diff --git a/node_backend/controllers/coordinadorGenController.js b/node_backend/controllers/coordinadorGenController.js index f8210af786308dc8c092798e489357adc427542a..4b40f3dc6f521d94493e1a3ce0a0f43aa0e78c1e 100644 --- a/node_backend/controllers/coordinadorGenController.js +++ b/node_backend/controllers/coordinadorGenController.js @@ -221,3 +221,4 @@ module.exports.getTutores = async (req, res) => { return res.status(500).json({ message: "Error del servidor", error }); } }; + diff --git a/node_backend/controllers/historialAcademicoController.js b/node_backend/controllers/historialAcademicoController.js new file mode 100644 index 0000000000000000000000000000000000000000..b8098355872ae47831563281a1264bcedb2ef04d --- /dev/null +++ b/node_backend/controllers/historialAcademicoController.js @@ -0,0 +1,94 @@ +const path = require('path'); +const fs = require('fs'); +const axios = require('axios'); +const Historial = require('../models/HistorialAcademico'); +const Personal = require('../models/Personal'); + +const generarHistorial = async (req, res) => { + const { semestre, matricula, fecha_generacion } = req.body; + + try { + const folderPath = path.join(__dirname, '..', 'exports', semestre); + if (!fs.existsSync(folderPath)) { + fs.mkdirSync(folderPath, { recursive: true }); + } + + // Descargar archivos desde las rutas existentes (usando axios) + const descargarYGuardar = async (url, outputPath) => { + const response = await axios.get(url, { responseType: 'arraybuffer' }); + fs.writeFileSync(outputPath, response.data); + }; + + // URLs para descarga + const urlAlumnos = 'http://localhost:5000/api/alumnos/exportar-csv'; + const urlMaterias = 'http://localhost:5000/api/materias/exportar-csv'; + const urlPersonal = `http://localhost:5000/api/personal/exportar-csv`; + + // Rutas de salida (ahora .csv) + const rutaAlumnos = path.join(folderPath, 'alumnos.csv'); + const rutaMaterias = path.join(folderPath, 'materias.csv'); + const rutaPersonal = path.join(folderPath, 'personal.csv'); + + // Descargar y guardar archivos + await Promise.all([ + descargarYGuardar(urlAlumnos, rutaAlumnos), + descargarYGuardar(urlMaterias, rutaMaterias), + descargarYGuardar(urlPersonal, rutaPersonal), + ]); + + const personal = await Personal.findOne({ matricula }); + if (!personal) { + return res.status(404).json({ message: 'Usuario no encontrado en la colección personal' }); + } + + // Buscar historial existente y actualizarlo, o crear uno nuevo si no existe + let historial = await Historial.findOne({ semestre }); + if (historial) { + historial.fecha_generacion = fecha_generacion || new Date(); + historial.generado_por = personal._id; + historial.archivos = { + alumnos: `/descargas/${semestre}/alumnos.csv`, + materias: `/descargas/${semestre}/materias.csv`, + personal: `/descargas/${semestre}/personal.csv` + }; + await historial.save(); + } else { + historial = new Historial({ + semestre, + fecha_generacion: fecha_generacion || new Date(), + generado_por: personal._id, + archivos: { + alumnos: `/descargas/${semestre}/alumnos.csv`, + materias: `/descargas/${semestre}/materias.csv`, + personal: `/descargas/${semestre}/personal.csv` + } + }); + await historial.save(); + } + + res.status(200).json(historial); + + } catch (err) { + console.error(err); + res.status(500).json({ message: 'Error al generar historial académico', error: err.message }); + } +}; + +const listarHistoriales = async (req, res) => { + try { + const historiales = await Historial.find().populate({ + path: 'generado_por', + model: 'Personal', + select: 'nombre matricula' + }); + res.status(200).json(Array.isArray(historiales) ? historiales : []); + } catch (err) { + console.error(err); + res.status(500).json({ message: 'Error al listar historiales académicos', error: err.message }); + } +} + +module.exports = { + generarHistorial, + listarHistoriales +}; \ No newline at end of file diff --git a/node_backend/exports/2024-2/alumnos.csv b/node_backend/exports/2024-2/alumnos.csv new file mode 100644 index 0000000000000000000000000000000000000000..07df4caaba3423beed1f43b189ff6ca15b55ce70 --- /dev/null +++ b/node_backend/exports/2024-2/alumnos.csv @@ -0,0 +1,9 @@ +"id_carrera","matricula","nombre","telefono","correo","id_carrera" +"ISftwS","A245","Marco Antonio valdez Soto","4021326555","stimpabo27@gmail.com","ISftwS" +"ISftwS","A543","Pablo Valadez Hernandez","4021326554","stimpabo27@gmail.com","ISftwS" +"ISftw","A120","Juan","4021326555","stimpabo27@gmail.com","ISftw" +"ISftw","A101","Alumno 2","4921456666","rzamarripam2001@gmail.com","ISftw" +"IDsr","A0000","Pablo Valadez Hernandez","4021326554","stimpabo27@gmail.como","IDsr" +"ISftw","A102","Alexis Lopez","4921456666","rogerzma500@gmail.com","ISftw" +"ISftw","A103","Brayan","4921456666","stimpabo27@gmail.com","ISftw" +"ICmp","A210","Kevin","4921456666","kevin@gmail.com","ICmp" \ No newline at end of file diff --git a/node_backend/exports/2024-2/materias.csv b/node_backend/exports/2024-2/materias.csv new file mode 100644 index 0000000000000000000000000000000000000000..a193328a4b60f4665b04b4ef92b05514c84da66c --- /dev/null +++ b/node_backend/exports/2024-2/materias.csv @@ -0,0 +1,49 @@ +"id_materia","id_carrera","nombre","salon","grupo","cupo","docente","lunes","martes","miercoles","jueves","viernes","sabado" +12,"ISftw","geometria 2","23","234",19,"P1233","7:30-9:30","-","-","-","-","-" +324,"ISftw","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-" +324,"ISftwS","gemoetria","234","342",23,"P3434","-","-","-","-","14:00-21:00","14:00-21:00" +324,"ISftwS","ecuaciones diferenciales","234","123",20,"P3434","-","-","-","-","14:00-20:00","15:00-20:00" +23245,"ISftw","programacion 3","345","234",23,"P3434","12:00-14:00","12:00-14:00","12:00-14:00","-","12:00-14:00","-" +12,"ISftwS","programacion 1","123","123",23,"P3434","-","-","-","-","14:00-20:00","14:00-20:00" +234,"ISftw","ecuaciones diferenciales","23","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +234,"ISftw","programacion 1","234","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +236,"ISftwS","programacion 4","234","342",23,"P3434","-","-","-","-","7:00-15:00","15:00-20:00" +129,"ISftwS","programacion 2","234","234",23,"P3434","-","-","-","-","7:00-15:00","14:00-20:00" +232,"ISftwS","programacion 5","235","234",23,"P3434","-","-","-","-","7:00-14:00","7:00-14:00" +12,"ISftw","geometria 2","23","234",20,"P1001","7:30-9:30","-","-","-","-","-" +23,"ISftw","geometria 4","23","234",23,"P1003","10:00-12:00","-","-","-","-","-" +2342,"ISftw","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-" +2332,"ISftw","programacion 7","23","123",17,"P1001","14:00-16:00","-","-","-","-","-" +234,"ISftw","programacion 8","23","234",20,"P1003","18:00-20:00","-","-","-","-","-" +234232,"ISftw","geometria 7","123","123",21,"Sin asignar","16:00-18:00","-","-","-","-","-" +234,"IDsr","programacion 1","234","234",21,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +324,"IDsr","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-" +23,"IDsr","geometria 4","23","234",21,"Sin asignar","10:00-12:00","-","-","-","-","-" +234232,"IDsr","geometria 7","123","123",21,"Sin asignar","16:00-18:00","-","-","-","-","-" +2332,"IDsr","programacion 7","23","123",18,"Sin asignar","14:00-16:00","-","-","-","-","-" +12,"IDsr","geometria 2","23","234",18,"Sin asignar","7:30-9:30","-","-","-","-","-" +12,"IDsr","geometria","123","234",20,"Sin asignar","10:00-12:00","-","10:00-12:00","-","10:00-12:00","-" +2342,"IDsr","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-" +23245,"IDsr","programacion 3","345","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +12,"IEIndS","geometria","123","234",20,"Sin asignar","10:00-12:00","-","10:00-12:00","-","10:00-12:00","-" +2342,"IEIndS","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-" +234232,"IEIndS","geometria 7","123","123",23,"Sin asignar","16:00-18:00","-","-","-","-","-" +2332,"IEIndS","programacion 7","23","123",20,"Sin asignar","14:00-16:00","-","-","-","-","-" +234,"IEIndS","programacion 1","234","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +23,"IEIndS","geometria 4","23","234",23,"Sin asignar","10:00-12:00","-","-","-","-","-" +23245,"IEIndS","programacion 3","345","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +324,"IEIndS","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-" +209,"ICmp","Paradigmas de programación","111","3A",35,"Sin asignar","7:00-8:30","-","7:00-8:30","-","10:00-11:30","-" +211,"ICmp","Algebra Lineal","101","1A",34,"Sin asignar","-","14:30-16:00","-","14:30-16:00","11:30-13:00","-" +207,"ICmp","Bases de datos","111","3A",35,"Sin asignar","-","10:00-11:30","11:30-13:00","-","8:30-10:00","-" +210,"ICmp","Finanzas empresariales","111","3A",35,"Sin asignar","11:30-13:00","13:00-14:30","-","13:00-14:30","-","-" +205,"ICmp","Matematicas Discretas","101","1A",35,"Sin asignar","10:00-11:30","11:30-13:00","11:30-13:00","13:00-14:30","-","-" +204,"ICmp","Circuitos eléctricos","111","3A",35,"Sin asignar","10:00-11:30","-","-","11:30-13:00","13:00-14:30","-" +206,"ICmp","Fundamentos de programación","101","1A",34,"Sin asignar","7:00-8:30","-","8:30-10:00","-","10:00-11:30","-" +208,"ICmp","Calculo","101","1A",34,"Sin asignar","8:30-10:00","10:00-11:30","10:00-11:30","-","-","-" +202,"ICmp","Analisis y diseño de algoritmos","111","3A",35,"Sin asignar","-","-","-","-","-","-" +212,"ICmp","Estadistica","104","3A",34,"P1233","10:00-12:00","16:00-18:00","12:00-14:00","12:00-14:00","12:00-14:00","-" +203,"ICmp","Ecuaciones diferenciales","111","3A",35,"Sin asignar","8:30-10:00","11:30-13:00","10:00-11:30","-","-","-" +201,"ICmp","Fundamentos de diseño digital","111","3A",35,"Sin asignar","-","8:30-10:00","8:30-10:00","-","11:30-13:00","-" +213,"ICmp","Estadistica II","104","3A",34,"P1233","10:00-12:00","16:00-18:00","12:00-14:00","12:00-14:00","12:00-14:00","-" +220,"ISftw","Redes de computadoras","101","3B",30,"P1003","12:00-14:00","16:00-18:00","12:00-14:00","16:00-18:00","-","-" \ No newline at end of file diff --git a/node_backend/exports/2024-2/personal.csv b/node_backend/exports/2024-2/personal.csv new file mode 100644 index 0000000000000000000000000000000000000000..0669bb240332235ac5d0125fe858a81879794301 --- /dev/null +++ b/node_backend/exports/2024-2/personal.csv @@ -0,0 +1,24 @@ +"matricula","nombre","password","roles","telefono","correo" +"C022","cord","segura123","C","4921429773","rzamarripam2001@gmail.com" +"CG001","CordGen","SEGURA123","CG","1231231231","ana@example.com" +"C982","cordDes","segura123","C","1231231231","correo@gmail.com" +"CG0000","CordGeneral123","segura123","CG","3245673457","tutor@gmail.com" +"AG0000","AdminGen","segura123","AG","4920356472","AdinGen@gmail.com" +"T1234","Tutor","SEGURA123","T","1231231231","ejemplo@gmail.com" +"C0234","Cordsemi","segura123","C","4922425671","tutor@gmail.com" +"T2322","tutorSemi","segura123","T","1231231231","tutor@gmail.com" +"P3434","docenteSemi","segura123","D","5553123344","ejemplo@gmail.com" +"A0111","Admin1","segura123","A","4921455566","admin@gmail.com" +"T1111","Juan","segura123","T","4921325678","tutor@gmail.com" +"T3453","ejemplo","segura123","T","1231231231","tutor@gmail.com" +"AG0001","AdminGen","segura123","AG","4021326553","stimpabo27@gmail.como" +"P1233","Stefano","segura123","D","4021326553","stimpabo27@gmail.com" +"A0002","Admin 2","segura123","A","4922425671","rogerzma500@gmail.com" +"P3444","Rafa","segura123","D","4922425671","stimpabo27@gmail.com" +"P3433","Rafa2","segura123","D","4021326553","stimpabo27@gmail.com" +"C0003","Coordinador computo","segura123","C","4921456666","correo@personal.com" +"P1000","Damian","segura123","D","4921456666","docente@gmail.com" +"T0014","Alessandra","segura123","T","4921456666","correo@personal.com" +"P1001","Maria Carolina Estrada Lopez","segura123","D","4921456666","correo@personal.com" +"P1002","Sandra Esthela Rios Huerta","segura123","D","4921456666","correo@personal.com" +"P1003","Jose Daniel Campos","segura123","D","4921456666","correo@personal.com" \ No newline at end of file diff --git a/node_backend/exports/2025-1/alumnos.csv b/node_backend/exports/2025-1/alumnos.csv new file mode 100644 index 0000000000000000000000000000000000000000..d200e3b4a918786d486538c3298391a781c95198 --- /dev/null +++ b/node_backend/exports/2025-1/alumnos.csv @@ -0,0 +1,8 @@ +"id_carrera","matricula","nombre","telefono","correo","id_carrera" +"ISftwS","A543","Pablo Valadez Hernandez","4021326554","stimpabo27@gmail.com","ISftwS" +"ISftw","A120","Juan","4021326555","stimpabo27@gmail.com","ISftw" +"ISftw","A101","Alumno 2","4921456666","rzamarripam2001@gmail.com","ISftw" +"IDsr","A0000","Pablo Valadez Hernandez","4021326554","stimpabo27@gmail.como","IDsr" +"ISftw","A102","Alexis Lopez","4921456666","rogerzma500@gmail.com","ISftw" +"ISftw","A103","Brayan","4921456666","stimpabo27@gmail.com","ISftw" +"ICmp","A210","Kevin","4921456666","kevin@gmail.com","ICmp" \ No newline at end of file diff --git a/node_backend/exports/2025-1/materias.csv b/node_backend/exports/2025-1/materias.csv new file mode 100644 index 0000000000000000000000000000000000000000..a193328a4b60f4665b04b4ef92b05514c84da66c --- /dev/null +++ b/node_backend/exports/2025-1/materias.csv @@ -0,0 +1,49 @@ +"id_materia","id_carrera","nombre","salon","grupo","cupo","docente","lunes","martes","miercoles","jueves","viernes","sabado" +12,"ISftw","geometria 2","23","234",19,"P1233","7:30-9:30","-","-","-","-","-" +324,"ISftw","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-" +324,"ISftwS","gemoetria","234","342",23,"P3434","-","-","-","-","14:00-21:00","14:00-21:00" +324,"ISftwS","ecuaciones diferenciales","234","123",20,"P3434","-","-","-","-","14:00-20:00","15:00-20:00" +23245,"ISftw","programacion 3","345","234",23,"P3434","12:00-14:00","12:00-14:00","12:00-14:00","-","12:00-14:00","-" +12,"ISftwS","programacion 1","123","123",23,"P3434","-","-","-","-","14:00-20:00","14:00-20:00" +234,"ISftw","ecuaciones diferenciales","23","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +234,"ISftw","programacion 1","234","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +236,"ISftwS","programacion 4","234","342",23,"P3434","-","-","-","-","7:00-15:00","15:00-20:00" +129,"ISftwS","programacion 2","234","234",23,"P3434","-","-","-","-","7:00-15:00","14:00-20:00" +232,"ISftwS","programacion 5","235","234",23,"P3434","-","-","-","-","7:00-14:00","7:00-14:00" +12,"ISftw","geometria 2","23","234",20,"P1001","7:30-9:30","-","-","-","-","-" +23,"ISftw","geometria 4","23","234",23,"P1003","10:00-12:00","-","-","-","-","-" +2342,"ISftw","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-" +2332,"ISftw","programacion 7","23","123",17,"P1001","14:00-16:00","-","-","-","-","-" +234,"ISftw","programacion 8","23","234",20,"P1003","18:00-20:00","-","-","-","-","-" +234232,"ISftw","geometria 7","123","123",21,"Sin asignar","16:00-18:00","-","-","-","-","-" +234,"IDsr","programacion 1","234","234",21,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +324,"IDsr","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-" +23,"IDsr","geometria 4","23","234",21,"Sin asignar","10:00-12:00","-","-","-","-","-" +234232,"IDsr","geometria 7","123","123",21,"Sin asignar","16:00-18:00","-","-","-","-","-" +2332,"IDsr","programacion 7","23","123",18,"Sin asignar","14:00-16:00","-","-","-","-","-" +12,"IDsr","geometria 2","23","234",18,"Sin asignar","7:30-9:30","-","-","-","-","-" +12,"IDsr","geometria","123","234",20,"Sin asignar","10:00-12:00","-","10:00-12:00","-","10:00-12:00","-" +2342,"IDsr","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-" +23245,"IDsr","programacion 3","345","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +12,"IEIndS","geometria","123","234",20,"Sin asignar","10:00-12:00","-","10:00-12:00","-","10:00-12:00","-" +2342,"IEIndS","geometria 6","23","342",20,"Sin asignar","12:00-14:00","-","-","-","-","-" +234232,"IEIndS","geometria 7","123","123",23,"Sin asignar","16:00-18:00","-","-","-","-","-" +2332,"IEIndS","programacion 7","23","123",20,"Sin asignar","14:00-16:00","-","-","-","-","-" +234,"IEIndS","programacion 1","234","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +23,"IEIndS","geometria 4","23","234",23,"Sin asignar","10:00-12:00","-","-","-","-","-" +23245,"IEIndS","programacion 3","345","234",23,"P3434","12:00-14:00","-","12:00-14:00","-","12:00-14:00","-" +324,"IEIndS","programacion 1","235","234",23,"Sin asignar","12:00-14:00","-","12:00-14:00","-","14:00-16:00","-" +209,"ICmp","Paradigmas de programación","111","3A",35,"Sin asignar","7:00-8:30","-","7:00-8:30","-","10:00-11:30","-" +211,"ICmp","Algebra Lineal","101","1A",34,"Sin asignar","-","14:30-16:00","-","14:30-16:00","11:30-13:00","-" +207,"ICmp","Bases de datos","111","3A",35,"Sin asignar","-","10:00-11:30","11:30-13:00","-","8:30-10:00","-" +210,"ICmp","Finanzas empresariales","111","3A",35,"Sin asignar","11:30-13:00","13:00-14:30","-","13:00-14:30","-","-" +205,"ICmp","Matematicas Discretas","101","1A",35,"Sin asignar","10:00-11:30","11:30-13:00","11:30-13:00","13:00-14:30","-","-" +204,"ICmp","Circuitos eléctricos","111","3A",35,"Sin asignar","10:00-11:30","-","-","11:30-13:00","13:00-14:30","-" +206,"ICmp","Fundamentos de programación","101","1A",34,"Sin asignar","7:00-8:30","-","8:30-10:00","-","10:00-11:30","-" +208,"ICmp","Calculo","101","1A",34,"Sin asignar","8:30-10:00","10:00-11:30","10:00-11:30","-","-","-" +202,"ICmp","Analisis y diseño de algoritmos","111","3A",35,"Sin asignar","-","-","-","-","-","-" +212,"ICmp","Estadistica","104","3A",34,"P1233","10:00-12:00","16:00-18:00","12:00-14:00","12:00-14:00","12:00-14:00","-" +203,"ICmp","Ecuaciones diferenciales","111","3A",35,"Sin asignar","8:30-10:00","11:30-13:00","10:00-11:30","-","-","-" +201,"ICmp","Fundamentos de diseño digital","111","3A",35,"Sin asignar","-","8:30-10:00","8:30-10:00","-","11:30-13:00","-" +213,"ICmp","Estadistica II","104","3A",34,"P1233","10:00-12:00","16:00-18:00","12:00-14:00","12:00-14:00","12:00-14:00","-" +220,"ISftw","Redes de computadoras","101","3B",30,"P1003","12:00-14:00","16:00-18:00","12:00-14:00","16:00-18:00","-","-" \ No newline at end of file diff --git a/node_backend/exports/2025-1/personal.csv b/node_backend/exports/2025-1/personal.csv new file mode 100644 index 0000000000000000000000000000000000000000..0669bb240332235ac5d0125fe858a81879794301 --- /dev/null +++ b/node_backend/exports/2025-1/personal.csv @@ -0,0 +1,24 @@ +"matricula","nombre","password","roles","telefono","correo" +"C022","cord","segura123","C","4921429773","rzamarripam2001@gmail.com" +"CG001","CordGen","SEGURA123","CG","1231231231","ana@example.com" +"C982","cordDes","segura123","C","1231231231","correo@gmail.com" +"CG0000","CordGeneral123","segura123","CG","3245673457","tutor@gmail.com" +"AG0000","AdminGen","segura123","AG","4920356472","AdinGen@gmail.com" +"T1234","Tutor","SEGURA123","T","1231231231","ejemplo@gmail.com" +"C0234","Cordsemi","segura123","C","4922425671","tutor@gmail.com" +"T2322","tutorSemi","segura123","T","1231231231","tutor@gmail.com" +"P3434","docenteSemi","segura123","D","5553123344","ejemplo@gmail.com" +"A0111","Admin1","segura123","A","4921455566","admin@gmail.com" +"T1111","Juan","segura123","T","4921325678","tutor@gmail.com" +"T3453","ejemplo","segura123","T","1231231231","tutor@gmail.com" +"AG0001","AdminGen","segura123","AG","4021326553","stimpabo27@gmail.como" +"P1233","Stefano","segura123","D","4021326553","stimpabo27@gmail.com" +"A0002","Admin 2","segura123","A","4922425671","rogerzma500@gmail.com" +"P3444","Rafa","segura123","D","4922425671","stimpabo27@gmail.com" +"P3433","Rafa2","segura123","D","4021326553","stimpabo27@gmail.com" +"C0003","Coordinador computo","segura123","C","4921456666","correo@personal.com" +"P1000","Damian","segura123","D","4921456666","docente@gmail.com" +"T0014","Alessandra","segura123","T","4921456666","correo@personal.com" +"P1001","Maria Carolina Estrada Lopez","segura123","D","4921456666","correo@personal.com" +"P1002","Sandra Esthela Rios Huerta","segura123","D","4921456666","correo@personal.com" +"P1003","Jose Daniel Campos","segura123","D","4921456666","correo@personal.com" \ No newline at end of file diff --git a/node_backend/models/HistorialAcademico.js b/node_backend/models/HistorialAcademico.js new file mode 100644 index 0000000000000000000000000000000000000000..715c0df00c3130c7839ac17670dd4d7888a52b71 --- /dev/null +++ b/node_backend/models/HistorialAcademico.js @@ -0,0 +1,14 @@ +const mongoose = require('mongoose'); + +const HistorialAcademicoSchema = new mongoose.Schema({ + semestre: { type: String, required: true }, + fecha_generacion: { type: Date, default: Date.now }, + archivos: { + personal: String, + alumnos: String, + materias: String + }, + generado_por: { type: mongoose.Schema.Types.ObjectId, ref: 'Usuario' } // Admin o coordinador +}); + +module.exports = mongoose.model('HistorialAcademico', HistorialAcademicoSchema); \ No newline at end of file diff --git a/node_backend/node_modules/.bin/crc32 b/node_backend/node_modules/.bin/crc32 new file mode 100644 index 0000000000000000000000000000000000000000..b8e4f8ec6abf345bd713ff44fca518a89a04dbdf --- /dev/null +++ b/node_backend/node_modules/.bin/crc32 @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../crc-32/bin/crc32.njs" "$@" +else + exec node "$basedir/../crc-32/bin/crc32.njs" "$@" +fi diff --git a/node_backend/node_modules/.bin/crc32.cmd b/node_backend/node_modules/.bin/crc32.cmd new file mode 100644 index 0000000000000000000000000000000000000000..4862b1de3d8f6f31132da6a728e661dc98f9ee93 --- /dev/null +++ b/node_backend/node_modules/.bin/crc32.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\crc-32\bin\crc32.njs" %* diff --git a/node_backend/node_modules/.bin/crc32.ps1 b/node_backend/node_modules/.bin/crc32.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..c286187cd73a75c045df3b957093caa47491282a --- /dev/null +++ b/node_backend/node_modules/.bin/crc32.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../crc-32/bin/crc32.njs" $args + } else { + & "$basedir/node$exe" "$basedir/../crc-32/bin/crc32.njs" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../crc-32/bin/crc32.njs" $args + } else { + & "node$exe" "$basedir/../crc-32/bin/crc32.njs" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_backend/node_modules/.bin/uuid b/node_backend/node_modules/.bin/uuid new file mode 100644 index 0000000000000000000000000000000000000000..0c2d46962921ed5023517facaf64937dd5e6bc5c --- /dev/null +++ b/node_backend/node_modules/.bin/uuid @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../uuid/dist/bin/uuid" "$@" +else + exec node "$basedir/../uuid/dist/bin/uuid" "$@" +fi diff --git a/node_backend/node_modules/.bin/uuid.cmd b/node_backend/node_modules/.bin/uuid.cmd new file mode 100644 index 0000000000000000000000000000000000000000..0f2376eaf4dbb387b218cc3dcd7d66fe13b95502 --- /dev/null +++ b/node_backend/node_modules/.bin/uuid.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\uuid\dist\bin\uuid" %* diff --git a/node_backend/node_modules/.bin/uuid.ps1 b/node_backend/node_modules/.bin/uuid.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..78046284b9366ed44fd3365394fd3696a86f2386 --- /dev/null +++ b/node_backend/node_modules/.bin/uuid.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } else { + & "$basedir/node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } else { + & "node$exe" "$basedir/../uuid/dist/bin/uuid" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_backend/node_modules/.package-lock.json b/node_backend/node_modules/.package-lock.json index a365bc26017f07ca6b962ff7686d5ea43611be43..3f5e9ca5e00cadb13553cf02959bd58481cfe739 100644 --- a/node_backend/node_modules/.package-lock.json +++ b/node_backend/node_modules/.package-lock.json @@ -4,6 +4,35 @@ "lockfileVersion": 3, "requires": true, "packages": { + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", @@ -44,6 +73,12 @@ "tslib": "^2.8.0" } }, + "node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -124,6 +159,75 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/are-we-there-yet": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", @@ -142,6 +246,12 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -184,6 +294,45 @@ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -232,6 +381,39 @@ "node": ">=16.20.1" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -242,6 +424,23 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -279,6 +478,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -311,6 +522,21 @@ "node": ">= 6" } }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -411,6 +637,31 @@ "node": ">= 0.10" } }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/crypto-js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", @@ -427,6 +678,12 @@ "node": ">= 10" } }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -497,6 +754,45 @@ "url": "https://dotenvx.com" } }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -523,6 +819,15 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -555,6 +860,26 @@ "node": ">= 0.6" } }, + "node_modules/exceljs": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.4.0.tgz", + "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==", + "license": "MIT", + "dependencies": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, "node_modules/express": { "version": "4.21.1", "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", @@ -596,6 +921,19 @@ "node": ">= 0.10.0" } }, + "node_modules/fast-csv": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -650,6 +988,12 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -677,6 +1021,47 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -754,6 +1139,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -862,6 +1253,32 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -946,6 +1363,54 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -973,6 +1438,57 @@ "node": ">=12.0.0" } }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/linebreak": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", @@ -990,12 +1506,48 @@ "node": ">= 0.4" } }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "license": "ISC" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead." }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==", + "license": "MIT" + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -1006,11 +1558,30 @@ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "license": "MIT" + }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", + "license": "MIT" + }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", @@ -1026,11 +1597,29 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", + "license": "MIT" + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -1399,6 +1988,15 @@ "node": ">=6" } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -1566,6 +2164,36 @@ "node": ">= 6" } }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/restructure": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", @@ -1610,6 +2238,18 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -1692,6 +2332,12 @@ "node": ">= 0.4" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -1796,11 +2442,36 @@ "node": ">=10" } }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tiny-inflate": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1820,6 +2491,15 @@ "node": ">=14" } }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -1868,6 +2548,54 @@ "node": ">= 0.8" } }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -1881,6 +2609,15 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1922,6 +2659,12 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -1934,6 +2677,41 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } } } } diff --git a/node_backend/node_modules/@fast-csv/format/CHANGELOG.md b/node_backend/node_modules/@fast-csv/format/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..28d9c3c71c7151ad2844750ec2ae2f098b17b8ee --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/CHANGELOG.md @@ -0,0 +1,73 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [4.3.5](https://github.com/C2FO/fast-csv/compare/v4.3.4...v4.3.5) (2020-11-03) + + +### Bug Fixes + +* **formatting,#446:** Do not quote fields that do not contain a quote ([13e688c](https://github.com/C2FO/fast-csv/commit/13e688cb38dcb67c7182211968c794146be54692)), closes [#446](https://github.com/C2FO/fast-csv/issues/446) + + + + + +## [4.3.4](https://github.com/C2FO/fast-csv/compare/v4.3.3...v4.3.4) (2020-11-03) + + +### Bug Fixes + +* **formatter,#503:** Do not ignore rows when headers is false ([1560564](https://github.com/C2FO/fast-csv/commit/1560564819c8b1254ca4ad43487830a4296570f6)), closes [#503](https://github.com/C2FO/fast-csv/issues/503) + + + + + +## [4.3.3](https://github.com/C2FO/fast-csv/compare/v4.3.2...v4.3.3) (2020-10-30) + +**Note:** Version bump only for package @fast-csv/format + + + + + +## [4.3.1](https://github.com/C2FO/fast-csv/compare/v4.3.0...v4.3.1) (2020-06-23) + +**Note:** Version bump only for package @fast-csv/format + + + + + +# [4.3.0](https://github.com/C2FO/fast-csv/compare/v4.2.0...v4.3.0) (2020-05-27) + +**Note:** Version bump only for package @fast-csv/format + + + + + +# [4.2.0](https://github.com/C2FO/fast-csv/compare/v4.1.6...v4.2.0) (2020-05-19) + + +### Features + +* **parsing:** Less restrictive row parsing type [#356](https://github.com/C2FO/fast-csv/issues/356) ([87d74ec](https://github.com/C2FO/fast-csv/commit/87d74ecd2cb16f3700b1942ebbbec221afe38790)) + + + + + +## [4.1.5](https://github.com/C2FO/fast-csv/compare/v4.1.4...v4.1.5) (2020-05-15) + +**Note:** Version bump only for package @fast-csv/format + + + + + +## [4.1.4](https://github.com/C2FO/fast-csv/compare/v4.1.3...v4.1.4) (2020-05-15) + +**Note:** Version bump only for package @fast-csv/format diff --git a/node_backend/node_modules/@fast-csv/format/LICENSE b/node_backend/node_modules/@fast-csv/format/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..34de49d379b6e2066ef384d349dee70de2652975 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2011-2019 C2FO + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/README.md b/node_backend/node_modules/@fast-csv/format/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c02da1173eed96f5f65e4478d5666619ce32e215 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/README.md @@ -0,0 +1,20 @@ +

+ fast-csv Logo +

+ +[![npm version](https://img.shields.io/npm/v/@fast-csv/format.svg)](https://www.npmjs.org/package/@fast-csv/format) +[![Build Status](https://travis-ci.org/C2FO/fast-csv.svg?branch=master)](https://travis-ci.org/C2FO/fast-csv) +[![Coverage Status](https://coveralls.io/repos/github/C2FO/fast-csv/badge.svg?branch=master)](https://coveralls.io/github/C2FO/fast-csv?branch=master) +[![Known Vulnerabilities](https://snyk.io/test/github/C2FO/fast-csv/badge.svg?targetFile=packages/format/package.json)](https://snyk.io/test/github/C2FO/fast-csv?targetFile=packages/format/package.json) + +# `@fast-csv/format` + +`fast-csv` package to format CSVs. + +## Installation + +[Install Guide](https://c2fo.io/fast-csv/docs/introduction/install) + +## Usage + +To get started with `@fast-csv/format` [check out the docs](https://c2fo.io/fast-csv/docs/formatting/getting-started) diff --git a/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2ee8f575750d57c4380c7d177b2f3c6cb23c103d --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.d.ts @@ -0,0 +1,13 @@ +/// +import { Transform, TransformCallback } from 'stream'; +import { FormatterOptions } from './FormatterOptions'; +import { Row, RowTransformFunction } from './types'; +export declare class CsvFormatterStream extends Transform { + private formatterOptions; + private rowFormatter; + private hasWrittenBOM; + constructor(formatterOptions: FormatterOptions); + transform(transformFunction: RowTransformFunction): CsvFormatterStream; + _transform(row: I, encoding: string, cb: TransformCallback): void; + _flush(cb: TransformCallback): void; +} diff --git a/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js new file mode 100644 index 0000000000000000000000000000000000000000..d414614eab310e51c075f931860fe5561e055579 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CsvFormatterStream = void 0; +const stream_1 = require("stream"); +const formatter_1 = require("./formatter"); +class CsvFormatterStream extends stream_1.Transform { + constructor(formatterOptions) { + super({ writableObjectMode: formatterOptions.objectMode }); + this.hasWrittenBOM = false; + this.formatterOptions = formatterOptions; + this.rowFormatter = new formatter_1.RowFormatter(formatterOptions); + // if writeBOM is false then set to true + // if writeBOM is true then set to false by default so it is written out + this.hasWrittenBOM = !formatterOptions.writeBOM; + } + transform(transformFunction) { + this.rowFormatter.rowTransform = transformFunction; + return this; + } + _transform(row, encoding, cb) { + let cbCalled = false; + try { + if (!this.hasWrittenBOM) { + this.push(this.formatterOptions.BOM); + this.hasWrittenBOM = true; + } + this.rowFormatter.format(row, (err, rows) => { + if (err) { + cbCalled = true; + return cb(err); + } + if (rows) { + rows.forEach((r) => { + this.push(Buffer.from(r, 'utf8')); + }); + } + cbCalled = true; + return cb(); + }); + } + catch (e) { + if (cbCalled) { + throw e; + } + cb(e); + } + } + _flush(cb) { + this.rowFormatter.finish((err, rows) => { + if (err) { + return cb(err); + } + if (rows) { + rows.forEach((r) => { + this.push(Buffer.from(r, 'utf8')); + }); + } + return cb(); + }); + } +} +exports.CsvFormatterStream = CsvFormatterStream; +//# sourceMappingURL=CsvFormatterStream.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js.map b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1ee124bf8e0dd00b8b43fe61d61ed989e26bc158 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CsvFormatterStream.js","sourceRoot":"","sources":["../../src/CsvFormatterStream.ts"],"names":[],"mappings":";;;AAAA,mCAAsD;AAGtD,2CAA2C;AAE3C,MAAa,kBAAiD,SAAQ,kBAAS;IAO3E,YAAmB,gBAAwC;QACvD,KAAK,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC;QAHvD,kBAAa,GAAG,KAAK,CAAC;QAI1B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,IAAI,wBAAY,CAAC,gBAAgB,CAAC,CAAC;QACvD,wCAAwC;QACxC,wEAAwE;QACxE,IAAI,CAAC,aAAa,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACpD,CAAC;IAEM,SAAS,CAAC,iBAA6C;QAC1D,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,iBAAiB,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,UAAU,CAAC,GAAM,EAAE,QAAgB,EAAE,EAAqB;QAC7D,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI;YACA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC7B;YACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,EAAQ,EAAE;gBAC9C,IAAI,GAAG,EAAE;oBACL,QAAQ,GAAG,IAAI,CAAC;oBAChB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;iBAClB;gBACD,IAAI,IAAI,EAAE;oBACN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAQ,EAAE;wBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;iBACN;gBACD,QAAQ,GAAG,IAAI,CAAC;gBAChB,OAAO,EAAE,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;SACN;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,QAAQ,EAAE;gBACV,MAAM,CAAC,CAAC;aACX;YACD,EAAE,CAAC,CAAC,CAAC,CAAC;SACT;IACL,CAAC;IAEM,MAAM,CAAC,EAAqB;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAQ,EAAE;YACzC,IAAI,GAAG,EAAE;gBACL,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;aAClB;YACD,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAQ,EAAE;oBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;aACN;YACD,OAAO,EAAE,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA9DD,gDA8DC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b9e1c0e55895ccf026b36f3bd18caf2307fca13b --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.d.ts @@ -0,0 +1,39 @@ +import { Row, RowTransformFunction } from './types'; +interface QuoteColumnMap { + [s: string]: boolean; +} +declare type QuoteColumns = boolean | boolean[] | QuoteColumnMap; +export interface FormatterOptionsArgs { + objectMode?: boolean; + delimiter?: string; + rowDelimiter?: string; + quote?: string | boolean; + escape?: string; + quoteColumns?: QuoteColumns; + quoteHeaders?: QuoteColumns; + headers?: null | boolean | string[]; + writeHeaders?: boolean; + includeEndRowDelimiter?: boolean; + writeBOM?: boolean; + transform?: RowTransformFunction; + alwaysWriteHeaders?: boolean; +} +export declare class FormatterOptions { + readonly objectMode: boolean; + readonly delimiter: string; + readonly rowDelimiter: string; + readonly quote: string; + readonly escape: string; + readonly quoteColumns: QuoteColumns; + readonly quoteHeaders: QuoteColumns; + readonly headers: null | string[]; + readonly includeEndRowDelimiter: boolean; + readonly transform?: RowTransformFunction; + readonly shouldWriteHeaders: boolean; + readonly writeBOM: boolean; + readonly escapedQuote: string; + readonly BOM: string; + readonly alwaysWriteHeaders: boolean; + constructor(opts?: FormatterOptionsArgs); +} +export {}; diff --git a/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js new file mode 100644 index 0000000000000000000000000000000000000000..cf9ed98249fa0580b9e93da2ff396a1af096ecd0 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FormatterOptions = void 0; +class FormatterOptions { + constructor(opts = {}) { + var _a; + this.objectMode = true; + this.delimiter = ','; + this.rowDelimiter = '\n'; + this.quote = '"'; + this.escape = this.quote; + this.quoteColumns = false; + this.quoteHeaders = this.quoteColumns; + this.headers = null; + this.includeEndRowDelimiter = false; + this.writeBOM = false; + this.BOM = '\ufeff'; + this.alwaysWriteHeaders = false; + Object.assign(this, opts || {}); + if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') { + this.quoteHeaders = this.quoteColumns; + } + if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) { + this.quote = '"'; + } + else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) { + this.quote = ''; + } + if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') { + this.escape = this.quote; + } + this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true); + this.headers = Array.isArray(this.headers) ? this.headers : null; + this.escapedQuote = `${this.escape}${this.quote}`; + } +} +exports.FormatterOptions = FormatterOptions; +//# sourceMappingURL=FormatterOptions.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js.map b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js.map new file mode 100644 index 0000000000000000000000000000000000000000..da56feef237a791a438917b62fec587e7f0403ee --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/FormatterOptions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"FormatterOptions.js","sourceRoot":"","sources":["../../src/FormatterOptions.ts"],"names":[],"mappings":";;;AAwBA,MAAa,gBAAgB;IA+BzB,YAAmB,OAAmC,EAAE;;QA9BxC,eAAU,GAAY,IAAI,CAAC;QAE3B,cAAS,GAAW,GAAG,CAAC;QAExB,iBAAY,GAAW,IAAI,CAAC;QAE5B,UAAK,GAAW,GAAG,CAAC;QAEpB,WAAM,GAAW,IAAI,CAAC,KAAK,CAAC;QAE5B,iBAAY,GAAiB,KAAK,CAAC;QAEnC,iBAAY,GAAiB,IAAI,CAAC,YAAY,CAAC;QAE/C,YAAO,GAAoB,IAAI,CAAC;QAEhC,2BAAsB,GAAY,KAAK,CAAC;QAMxC,aAAQ,GAAY,KAAK,CAAC;QAI1B,QAAG,GAAW,QAAQ,CAAC;QAEvB,uBAAkB,GAAY,KAAK,CAAC;QAGhD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAEhC,IAAI,QAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAA,KAAK,WAAW,EAAE;YAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;SACzC;QACD,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,MAAK,IAAI,EAAE;YACtB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;SACpB;aAAM,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,MAAK,KAAK,EAAE;YAC9B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACnB;QACD,IAAI,QAAO,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;SAC5B;QACD,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAC,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,IAAI,CAAC,YAAY,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC;CACJ;AAjDD,4CAiDC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f824b346f91ae77487dc9126d09c0e2586dac0bc --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.d.ts @@ -0,0 +1,13 @@ +import { FormatterOptions } from '../FormatterOptions'; +import { Row } from '../types'; +export declare class FieldFormatter { + private readonly formatterOptions; + private _headers; + private readonly REPLACE_REGEXP; + private readonly ESCAPE_REGEXP; + constructor(formatterOptions: FormatterOptions); + set headers(headers: string[]); + private shouldQuote; + format(field: string, fieldIndex: number, isHeader: boolean): string; + private quoteField; +} diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js new file mode 100644 index 0000000000000000000000000000000000000000..0c9fd89b58cc8994e94a02d9efc3715cf28b7c2b --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js @@ -0,0 +1,58 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FieldFormatter = void 0; +const lodash_isboolean_1 = __importDefault(require("lodash.isboolean")); +const lodash_isnil_1 = __importDefault(require("lodash.isnil")); +const lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp")); +class FieldFormatter { + constructor(formatterOptions) { + this._headers = null; + this.formatterOptions = formatterOptions; + if (formatterOptions.headers !== null) { + this.headers = formatterOptions.headers; + } + this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g'); + const escapePattern = `[${formatterOptions.delimiter}${lodash_escaperegexp_1.default(formatterOptions.rowDelimiter)}|\r|\n]`; + this.ESCAPE_REGEXP = new RegExp(escapePattern); + } + set headers(headers) { + this._headers = headers; + } + shouldQuote(fieldIndex, isHeader) { + const quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns; + if (lodash_isboolean_1.default(quoteConfig)) { + return quoteConfig; + } + if (Array.isArray(quoteConfig)) { + return quoteConfig[fieldIndex]; + } + if (this._headers !== null) { + return quoteConfig[this._headers[fieldIndex]]; + } + return false; + } + format(field, fieldIndex, isHeader) { + const preparedField = `${lodash_isnil_1.default(field) ? '' : field}`.replace(/\0/g, ''); + const { formatterOptions } = this; + if (formatterOptions.quote !== '') { + const shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1; + if (shouldEscape) { + return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote)); + } + } + const hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1; + if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) { + return this.quoteField(preparedField); + } + return preparedField; + } + quoteField(field) { + const { quote } = this.formatterOptions; + return `${quote}${field}${quote}`; + } +} +exports.FieldFormatter = FieldFormatter; +//# sourceMappingURL=FieldFormatter.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js.map b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b3a741e373e4aad3c68b13e01276232d0a8cb7ac --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"FieldFormatter.js","sourceRoot":"","sources":["../../../src/formatter/FieldFormatter.ts"],"names":[],"mappings":";;;;;;AAAA,wEAAyC;AACzC,gEAAiC;AACjC,8EAA+C;AAI/C,MAAa,cAAc;IASvB,YAAmB,gBAAwC;QANnD,aAAQ,GAAoB,IAAI,CAAC;QAOrC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,gBAAgB,CAAC,OAAO,KAAK,IAAI,EAAE;YACnC,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;SAC3C;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,IAAI,gBAAgB,CAAC,SAAS,GAAG,6BAAY,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC;QAC5G,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,IAAW,OAAO,CAAC,OAAiB;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAEO,WAAW,CAAC,UAAkB,EAAE,QAAiB;QACrD,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;QACvG,IAAI,0BAAS,CAAC,WAAW,CAAC,EAAE;YACxB,OAAO,WAAW,CAAC;SACtB;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC5B,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;YACxB,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;SACjD;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,MAAM,CAAC,KAAa,EAAE,UAAkB,EAAE,QAAiB;QAC9D,MAAM,aAAa,GAAG,GAAG,sBAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;QAClC,IAAI,gBAAgB,CAAC,KAAK,KAAK,EAAE,EAAE;YAC/B,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1E,IAAI,YAAY,EAAE;gBACd,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;aACrG;SACJ;QACD,MAAM,mBAAmB,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,IAAI,mBAAmB,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;YAC/D,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SACzC;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;IAEO,UAAU,CAAC,KAAa;QAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACxC,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC;IACtC,CAAC;CACJ;AAzDD,wCAyDC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..fe06d3784d0929d2cad6bf733378163a0434a0b7 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.d.ts @@ -0,0 +1,25 @@ +import { FormatterOptions } from '../FormatterOptions'; +import { Row, RowArray, RowTransformFunction } from '../types'; +declare type RowFormatterCallback = (error: Error | null, data?: RowArray) => void; +export declare class RowFormatter { + private static isRowHashArray; + private static isRowArray; + private static gatherHeaders; + private static createTransform; + private readonly formatterOptions; + private readonly fieldFormatter; + private readonly shouldWriteHeaders; + private _rowTransform?; + private headers; + private hasWrittenHeaders; + private rowCount; + constructor(formatterOptions: FormatterOptions); + set rowTransform(transformFunction: RowTransformFunction); + format(row: I, cb: RowFormatterCallback): void; + finish(cb: RowFormatterCallback): void; + private checkHeaders; + private gatherColumns; + private callTransformer; + private formatColumns; +} +export {}; diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js new file mode 100644 index 0000000000000000000000000000000000000000..fd51bcef3f980061bca42f118fee75b42373ef49 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js @@ -0,0 +1,168 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RowFormatter = void 0; +const lodash_isfunction_1 = __importDefault(require("lodash.isfunction")); +const lodash_isequal_1 = __importDefault(require("lodash.isequal")); +const FieldFormatter_1 = require("./FieldFormatter"); +const types_1 = require("../types"); +class RowFormatter { + constructor(formatterOptions) { + this.rowCount = 0; + this.formatterOptions = formatterOptions; + this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions); + this.headers = formatterOptions.headers; + this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders; + this.hasWrittenHeaders = false; + if (this.headers !== null) { + this.fieldFormatter.headers = this.headers; + } + if (formatterOptions.transform) { + this.rowTransform = formatterOptions.transform; + } + } + static isRowHashArray(row) { + if (Array.isArray(row)) { + return Array.isArray(row[0]) && row[0].length === 2; + } + return false; + } + static isRowArray(row) { + return Array.isArray(row) && !this.isRowHashArray(row); + } + // get headers from a row item + static gatherHeaders(row) { + if (RowFormatter.isRowHashArray(row)) { + // lets assume a multi-dimesional array with item 0 being the header + return row.map((it) => it[0]); + } + if (Array.isArray(row)) { + return row; + } + return Object.keys(row); + } + // eslint-disable-next-line @typescript-eslint/no-shadow + static createTransform(transformFunction) { + if (types_1.isSyncTransform(transformFunction)) { + return (row, cb) => { + let transformedRow = null; + try { + transformedRow = transformFunction(row); + } + catch (e) { + return cb(e); + } + return cb(null, transformedRow); + }; + } + return (row, cb) => { + transformFunction(row, cb); + }; + } + set rowTransform(transformFunction) { + if (!lodash_isfunction_1.default(transformFunction)) { + throw new TypeError('The transform should be a function'); + } + this._rowTransform = RowFormatter.createTransform(transformFunction); + } + format(row, cb) { + this.callTransformer(row, (err, transformedRow) => { + if (err) { + return cb(err); + } + if (!row) { + return cb(null); + } + const rows = []; + if (transformedRow) { + const { shouldFormatColumns, headers } = this.checkHeaders(transformedRow); + if (this.shouldWriteHeaders && headers && !this.hasWrittenHeaders) { + rows.push(this.formatColumns(headers, true)); + this.hasWrittenHeaders = true; + } + if (shouldFormatColumns) { + const columns = this.gatherColumns(transformedRow); + rows.push(this.formatColumns(columns, false)); + } + } + return cb(null, rows); + }); + } + finish(cb) { + const rows = []; + // check if we should write headers and we didnt get any rows + if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) { + if (!this.headers) { + return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.')); + } + rows.push(this.formatColumns(this.headers, true)); + } + if (this.formatterOptions.includeEndRowDelimiter) { + rows.push(this.formatterOptions.rowDelimiter); + } + return cb(null, rows); + } + // check if we need to write header return true if we should also write a row + // could be false if headers is true and the header row(first item) is passed in + checkHeaders(row) { + if (this.headers) { + // either the headers were provided by the user or we have already gathered them. + return { shouldFormatColumns: true, headers: this.headers }; + } + const headers = RowFormatter.gatherHeaders(row); + this.headers = headers; + this.fieldFormatter.headers = headers; + if (!this.shouldWriteHeaders) { + // if we are not supposed to write the headers then + // always format the columns + return { shouldFormatColumns: true, headers: null }; + } + // if the row is equal to headers dont format + return { shouldFormatColumns: !lodash_isequal_1.default(headers, row), headers }; + } + // todo change this method to unknown[] + gatherColumns(row) { + if (this.headers === null) { + throw new Error('Headers is currently null'); + } + if (!Array.isArray(row)) { + return this.headers.map((header) => row[header]); + } + if (RowFormatter.isRowHashArray(row)) { + return this.headers.map((header, i) => { + const col = row[i]; + if (col) { + return col[1]; + } + return ''; + }); + } + // if its a one dimensional array and headers were not provided + // then just return the row + if (RowFormatter.isRowArray(row) && !this.shouldWriteHeaders) { + return row; + } + return this.headers.map((header, i) => row[i]); + } + callTransformer(row, cb) { + if (!this._rowTransform) { + return cb(null, row); + } + return this._rowTransform(row, cb); + } + formatColumns(columns, isHeadersRow) { + const formattedCols = columns + .map((field, i) => this.fieldFormatter.format(field, i, isHeadersRow)) + .join(this.formatterOptions.delimiter); + const { rowCount } = this; + this.rowCount += 1; + if (rowCount) { + return [this.formatterOptions.rowDelimiter, formattedCols].join(''); + } + return formattedCols; + } +} +exports.RowFormatter = RowFormatter; +//# sourceMappingURL=RowFormatter.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js.map b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js.map new file mode 100644 index 0000000000000000000000000000000000000000..fe18025966aa449ac947a689710962721fa58f20 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"RowFormatter.js","sourceRoot":"","sources":["../../../src/formatter/RowFormatter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1fa760692b416e95100c2f508d6cf524a7bbd063 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.d.ts @@ -0,0 +1,2 @@ +export { RowFormatter } from './RowFormatter'; +export { FieldFormatter } from './FieldFormatter'; diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js new file mode 100644 index 0000000000000000000000000000000000000000..bf3c26d8d247817cb5673621c9bf4d5b2af7fb1a --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FieldFormatter = exports.RowFormatter = void 0; +var RowFormatter_1 = require("./RowFormatter"); +Object.defineProperty(exports, "RowFormatter", { enumerable: true, get: function () { return RowFormatter_1.RowFormatter; } }); +var FieldFormatter_1 = require("./FieldFormatter"); +Object.defineProperty(exports, "FieldFormatter", { enumerable: true, get: function () { return FieldFormatter_1.FieldFormatter; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js.map b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f36c547a7eb9db866ab68ab71c6e17541dbfccb1 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/formatter/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/formatter/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/index.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..235d93f1a8c2ad7e49d19071d2da4d21fe31bd9e --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/index.d.ts @@ -0,0 +1,14 @@ +/// +import * as fs from 'fs'; +import { Row } from './types'; +import { FormatterOptionsArgs } from './FormatterOptions'; +import { CsvFormatterStream } from './CsvFormatterStream'; +export * from './types'; +export { CsvFormatterStream } from './CsvFormatterStream'; +export { FormatterOptions, FormatterOptionsArgs } from './FormatterOptions'; +export declare const format: (options?: FormatterOptionsArgs | undefined) => CsvFormatterStream; +export declare const write: (rows: I[], options?: FormatterOptionsArgs | undefined) => CsvFormatterStream; +export declare const writeToStream: (ws: T, rows: I[], options?: FormatterOptionsArgs | undefined) => T; +export declare const writeToBuffer: (rows: I[], opts?: FormatterOptionsArgs) => Promise; +export declare const writeToString: (rows: I[], options?: FormatterOptionsArgs | undefined) => Promise; +export declare const writeToPath: (path: string, rows: I[], options?: FormatterOptionsArgs | undefined) => fs.WriteStream; diff --git a/node_backend/node_modules/@fast-csv/format/build/src/index.js b/node_backend/node_modules/@fast-csv/format/build/src/index.js new file mode 100644 index 0000000000000000000000000000000000000000..f1418b85a379cddedc99f866ab9c3bd8778d1755 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/index.js @@ -0,0 +1,68 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = exports.FormatterOptions = exports.CsvFormatterStream = void 0; +const util_1 = require("util"); +const stream_1 = require("stream"); +const fs = __importStar(require("fs")); +const FormatterOptions_1 = require("./FormatterOptions"); +const CsvFormatterStream_1 = require("./CsvFormatterStream"); +__exportStar(require("./types"), exports); +var CsvFormatterStream_2 = require("./CsvFormatterStream"); +Object.defineProperty(exports, "CsvFormatterStream", { enumerable: true, get: function () { return CsvFormatterStream_2.CsvFormatterStream; } }); +var FormatterOptions_2 = require("./FormatterOptions"); +Object.defineProperty(exports, "FormatterOptions", { enumerable: true, get: function () { return FormatterOptions_2.FormatterOptions; } }); +exports.format = (options) => new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options)); +exports.write = (rows, options) => { + const csvStream = exports.format(options); + const promiseWrite = util_1.promisify((row, cb) => { + csvStream.write(row, undefined, cb); + }); + rows.reduce((prev, row) => prev.then(() => promiseWrite(row)), Promise.resolve()) + .then(() => csvStream.end()) + .catch((err) => { + csvStream.emit('error', err); + }); + return csvStream; +}; +exports.writeToStream = (ws, rows, options) => exports.write(rows, options).pipe(ws); +exports.writeToBuffer = (rows, opts = {}) => { + const buffers = []; + const ws = new stream_1.Writable({ + write(data, enc, writeCb) { + buffers.push(data); + writeCb(); + }, + }); + return new Promise((res, rej) => { + ws.on('error', rej).on('finish', () => res(Buffer.concat(buffers))); + exports.write(rows, opts).pipe(ws); + }); +}; +exports.writeToString = (rows, options) => exports.writeToBuffer(rows, options).then((buffer) => buffer.toString()); +exports.writeToPath = (path, rows, options) => { + const stream = fs.createWriteStream(path, { encoding: 'utf8' }); + return exports.write(rows, options).pipe(stream); +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/index.js.map b/node_backend/node_modules/@fast-csv/format/build/src/index.js.map new file mode 100644 index 0000000000000000000000000000000000000000..57efc760fc60bb2a6ed9fe8c68392b86479896c7 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAiC;AACjC,mCAAkC;AAClC,uCAAyB;AAEzB,yDAA4E;AAC5E,6DAA0D;AAE1D,0CAAwB;AACxB,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,uDAA4E;AAAnE,oHAAA,gBAAgB,OAAA;AAEZ,QAAA,MAAM,GAAG,CAA+B,OAAoC,EAA4B,EAAE,CACnH,IAAI,uCAAkB,CAAC,IAAI,mCAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7C,QAAA,KAAK,GAAG,CACjB,IAAS,EACT,OAAoC,EACZ,EAAE;IAC1B,MAAM,SAAS,GAAG,cAAM,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,gBAAS,CAAC,CAAC,GAAM,EAAE,EAAkC,EAAQ,EAAE;QAChF,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CACP,CAAC,IAAmB,EAAE,GAAM,EAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAkB,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EACjG,OAAO,CAAC,OAAO,EAAE,CACpB;SACI,IAAI,CAAC,GAAS,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;SACjC,KAAK,CAAC,CAAC,GAAG,EAAQ,EAAE;QACjB,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACP,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEW,QAAA,aAAa,GAAG,CACzB,EAAK,EACL,IAAS,EACT,OAAoC,EACnC,EAAE,CAAC,aAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEzB,QAAA,aAAa,GAAG,CACzB,IAAS,EACT,OAAmC,EAAE,EACtB,EAAE;IACjB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAI,iBAAQ,CAAC;QACpB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO;YACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC;QACd,CAAC;KACJ,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAQ,EAAE;QAClC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1E,aAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEW,QAAA,aAAa,GAAG,CACzB,IAAS,EACT,OAAoC,EACrB,EAAE,CAAC,qBAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAU,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAElF,QAAA,WAAW,GAAG,CACvB,IAAY,EACZ,IAAS,EACT,OAAoC,EACtB,EAAE;IAChB,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAChE,OAAO,aAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/types.d.ts b/node_backend/node_modules/@fast-csv/format/build/src/types.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c59e09918c042569085f5048bcec99d24303819c --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/types.d.ts @@ -0,0 +1,9 @@ +export declare type RowMap = Record; +export declare type RowHashArray = [string, V][]; +export declare type RowArray = string[]; +export declare type Row = RowArray | RowHashArray | RowMap; +export declare type RowTransformCallback = (error?: Error | null, row?: R) => void; +export declare type SyncRowTransform = (row: I) => O; +export declare type AsyncRowTransform = (row: I, cb: RowTransformCallback) => void; +export declare type RowTransformFunction = SyncRowTransform | AsyncRowTransform; +export declare const isSyncTransform: (transform: RowTransformFunction) => transform is SyncRowTransform; diff --git a/node_backend/node_modules/@fast-csv/format/build/src/types.js b/node_backend/node_modules/@fast-csv/format/build/src/types.js new file mode 100644 index 0000000000000000000000000000000000000000..58cdf80bdc7aa02cfa226556c15b992b328697b2 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/types.js @@ -0,0 +1,6 @@ +"use strict"; +/* eslint-disable @typescript-eslint/no-explicit-any */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isSyncTransform = void 0; +exports.isSyncTransform = (transform) => transform.length === 1; +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/build/src/types.js.map b/node_backend/node_modules/@fast-csv/format/build/src/types.js.map new file mode 100644 index 0000000000000000000000000000000000000000..c706c037dd56c0f241ce7d850ea301c6af6629a0 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/build/src/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAY1C,QAAA,eAAe,GAAG,CAC3B,SAAqC,EACF,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/format/package.json b/node_backend/node_modules/@fast-csv/format/package.json new file mode 100644 index 0000000000000000000000000000000000000000..9eb582656e0bd2f980998469f0b9ce70c878275e --- /dev/null +++ b/node_backend/node_modules/@fast-csv/format/package.json @@ -0,0 +1,55 @@ +{ + "name": "@fast-csv/format", + "version": "4.3.5", + "description": "fast-csv formatting module", + "keywords": [ + "csv", + "format", + "write" + ], + "author": "doug-martin ", + "homepage": "http://c2fo.github.com/fast-csv/packages/format", + "license": "MIT", + "main": "build/src/index.js", + "types": "build/src/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "build/src/**" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/C2FO/fast-csv.git", + "directory": "packages/format" + }, + "scripts": { + "prepublishOnly": "npm run build", + "build": "npm run clean && npm run compile", + "clean": "rm -rf ./build && rm -rf tsconfig.tsbuildinfo", + "compile": "tsc" + }, + "bugs": { + "url": "https://github.com/C2FO/fast-csv/issues" + }, + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + }, + "devDependencies": { + "@types/lodash.escaperegexp": "4.1.6", + "@types/lodash.isboolean": "3.0.6", + "@types/lodash.isequal": "4.5.5", + "@types/lodash.isfunction": "3.0.6", + "@types/lodash.isnil": "4.0.6" + }, + "gitHead": "b908170cb49398ae12847d050af5c8e5b0dc812f" +} diff --git a/node_backend/node_modules/@fast-csv/parse/CHANGELOG.md b/node_backend/node_modules/@fast-csv/parse/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..3763965d80e2231bef30fac16949f6907d1385a0 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/CHANGELOG.md @@ -0,0 +1,87 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [4.3.6](https://github.com/C2FO/fast-csv/compare/v4.3.5...v4.3.6) (2020-12-04) + + +### Bug Fixes + +* Simplify empty row check by removing complex regex ([4bbd39f](https://github.com/C2FO/fast-csv/commit/4bbd39f26a8cd7382151ab4f5fb102234b2f829e)) + + + + + +## [4.3.3](https://github.com/C2FO/fast-csv/compare/v4.3.2...v4.3.3) (2020-10-30) + +**Note:** Version bump only for package @fast-csv/parse + + + + + +## [4.3.2](https://github.com/C2FO/fast-csv/compare/v4.3.1...v4.3.2) (2020-09-02) + + +### Bug Fixes + +* **parsing, #423:** Prevent callback from being called multiple times ([040febe](https://github.com/C2FO/fast-csv/commit/040febe17f5fe763a00f45b1d83c5acd47bbbe0b)), closes [#423](https://github.com/C2FO/fast-csv/issues/423) + + + + + +## [4.3.1](https://github.com/C2FO/fast-csv/compare/v4.3.0...v4.3.1) (2020-06-23) + + +### Bug Fixes + +* **parsing:** Pass errors through callbacks ([84ecdf6](https://github.com/C2FO/fast-csv/commit/84ecdf6ed18b15d68b4ed3e2bfec7eb41b438ad8)) + + + + + +# [4.3.0](https://github.com/C2FO/fast-csv/compare/v4.2.0...v4.3.0) (2020-05-27) + +**Note:** Version bump only for package @fast-csv/parse + + + + + +# [4.2.0](https://github.com/C2FO/fast-csv/compare/v4.1.6...v4.2.0) (2020-05-19) + + +### Features + +* **parsing:** Less restrictive row parsing type [#356](https://github.com/C2FO/fast-csv/issues/356) ([87d74ec](https://github.com/C2FO/fast-csv/commit/87d74ecd2cb16f3700b1942ebbbec221afe38790)) + + + + + +## [4.1.6](https://github.com/C2FO/fast-csv/compare/v4.1.5...v4.1.6) (2020-05-15) + + +### Bug Fixes + +* **parse:** Handle escaped escape properly [#340](https://github.com/C2FO/fast-csv/issues/340) ([78d9b16](https://github.com/C2FO/fast-csv/commit/78d9b160152ee399f31086cc6b5f66a7ca7f9e24)) + + + + + +## [4.1.5](https://github.com/C2FO/fast-csv/compare/v4.1.4...v4.1.5) (2020-05-15) + +**Note:** Version bump only for package @fast-csv/parse + + + + + +## [4.1.4](https://github.com/C2FO/fast-csv/compare/v4.1.3...v4.1.4) (2020-05-15) + +**Note:** Version bump only for package @fast-csv/parse diff --git a/node_backend/node_modules/@fast-csv/parse/LICENSE b/node_backend/node_modules/@fast-csv/parse/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..34de49d379b6e2066ef384d349dee70de2652975 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2011-2019 C2FO + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/README.md b/node_backend/node_modules/@fast-csv/parse/README.md new file mode 100644 index 0000000000000000000000000000000000000000..a5fba8882dd23959af86b6a165562e2eaf0bdd4b --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/README.md @@ -0,0 +1,20 @@ +

+ fast-csv Logo +

+ +[![npm version](https://img.shields.io/npm/v/@fast-csv/parse.svg)](https://www.npmjs.org/package/@fast-csv/parse) +[![Build Status](https://travis-ci.org/C2FO/fast-csv.svg?branch=master)](https://travis-ci.org/C2FO/fast-csv) +[![Coverage Status](https://coveralls.io/repos/github/C2FO/fast-csv/badge.svg?branch=master)](https://coveralls.io/github/C2FO/fast-csv?branch=master) +[![Known Vulnerabilities](https://snyk.io/test/github/C2FO/fast-csv/badge.svg?targetFile=packages/parse/package.json)](https://snyk.io/test/github/C2FO/fast-csv?targetFile=packages/parse/package.json) + +# `@fast-csv/parse` + +`fast-csv` package to parse CSVs. + +## Installation + +[Install Guide](https://c2fo.io/fast-csv/docs/introduction/install) + +## Usage + +To get started with `@fast-csv/parse` [check out the docs](https://c2fo.io/fast-csv/docs/parsing/getting-started) diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..757582e97a929cba3de073bc30522ed61c149289 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.d.ts @@ -0,0 +1,33 @@ +/// +import { Transform, TransformCallback } from 'stream'; +import { ParserOptions } from './ParserOptions'; +import { Row, RowTransformFunction, RowValidate } from './types'; +export declare class CsvParserStream extends Transform { + private readonly parserOptions; + private readonly decoder; + private readonly parser; + private readonly headerTransformer; + private readonly rowTransformerValidator; + private lines; + private rowCount; + private parsedRowCount; + private parsedLineCount; + private endEmitted; + private headersEmitted; + constructor(parserOptions: ParserOptions); + private get hasHitRowLimit(); + private get shouldEmitRows(); + private get shouldSkipLine(); + transform(transformFunction: RowTransformFunction): CsvParserStream; + validate(validateFunction: RowValidate): CsvParserStream; + emit(event: string | symbol, ...rest: any[]): boolean; + _transform(data: Buffer, encoding: string, done: TransformCallback): void; + _flush(done: TransformCallback): void; + private parse; + private processRows; + private transformRow; + private checkAndEmitHeaders; + private skipRow; + private pushRow; + private static wrapDoneCallback; +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js new file mode 100644 index 0000000000000000000000000000000000000000..c207a00ab8626d88398813ad1cad4198f7448ae2 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js @@ -0,0 +1,212 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CsvParserStream = void 0; +const string_decoder_1 = require("string_decoder"); +const stream_1 = require("stream"); +const transforms_1 = require("./transforms"); +const parser_1 = require("./parser"); +class CsvParserStream extends stream_1.Transform { + constructor(parserOptions) { + super({ objectMode: parserOptions.objectMode }); + this.lines = ''; + this.rowCount = 0; + this.parsedRowCount = 0; + this.parsedLineCount = 0; + this.endEmitted = false; + this.headersEmitted = false; + this.parserOptions = parserOptions; + this.parser = new parser_1.Parser(parserOptions); + this.headerTransformer = new transforms_1.HeaderTransformer(parserOptions); + this.decoder = new string_decoder_1.StringDecoder(parserOptions.encoding); + this.rowTransformerValidator = new transforms_1.RowTransformerValidator(); + } + get hasHitRowLimit() { + return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows; + } + get shouldEmitRows() { + return this.parsedRowCount > this.parserOptions.skipRows; + } + get shouldSkipLine() { + return this.parsedLineCount <= this.parserOptions.skipLines; + } + transform(transformFunction) { + this.rowTransformerValidator.rowTransform = transformFunction; + return this; + } + validate(validateFunction) { + this.rowTransformerValidator.rowValidator = validateFunction; + return this; + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + emit(event, ...rest) { + if (event === 'end') { + if (!this.endEmitted) { + this.endEmitted = true; + super.emit('end', this.rowCount); + } + return false; + } + return super.emit(event, ...rest); + } + _transform(data, encoding, done) { + // if we have hit our maxRows parsing limit then skip parsing + if (this.hasHitRowLimit) { + return done(); + } + const wrappedCallback = CsvParserStream.wrapDoneCallback(done); + try { + const { lines } = this; + const newLine = lines + this.decoder.write(data); + const rows = this.parse(newLine, true); + return this.processRows(rows, wrappedCallback); + } + catch (e) { + return wrappedCallback(e); + } + } + _flush(done) { + const wrappedCallback = CsvParserStream.wrapDoneCallback(done); + // if we have hit our maxRows parsing limit then skip parsing + if (this.hasHitRowLimit) { + return wrappedCallback(); + } + try { + const newLine = this.lines + this.decoder.end(); + const rows = this.parse(newLine, false); + return this.processRows(rows, wrappedCallback); + } + catch (e) { + return wrappedCallback(e); + } + } + parse(data, hasMoreData) { + if (!data) { + return []; + } + const { line, rows } = this.parser.parse(data, hasMoreData); + this.lines = line; + return rows; + } + processRows(rows, cb) { + const rowsLength = rows.length; + const iterate = (i) => { + const callNext = (err) => { + if (err) { + return cb(err); + } + if (i % 100 === 0) { + // incase the transform are sync insert a next tick to prevent stack overflow + setImmediate(() => iterate(i + 1)); + return undefined; + } + return iterate(i + 1); + }; + this.checkAndEmitHeaders(); + // if we have emitted all rows or we have hit the maxRows limit option + // then end + if (i >= rowsLength || this.hasHitRowLimit) { + return cb(); + } + this.parsedLineCount += 1; + if (this.shouldSkipLine) { + return callNext(); + } + const row = rows[i]; + this.rowCount += 1; + this.parsedRowCount += 1; + const nextRowCount = this.rowCount; + return this.transformRow(row, (err, transformResult) => { + if (err) { + this.rowCount -= 1; + return callNext(err); + } + if (!transformResult) { + return callNext(new Error('expected transform result')); + } + if (!transformResult.isValid) { + this.emit('data-invalid', transformResult.row, nextRowCount, transformResult.reason); + } + else if (transformResult.row) { + return this.pushRow(transformResult.row, callNext); + } + return callNext(); + }); + }; + iterate(0); + } + transformRow(parsedRow, cb) { + try { + this.headerTransformer.transform(parsedRow, (err, withHeaders) => { + if (err) { + return cb(err); + } + if (!withHeaders) { + return cb(new Error('Expected result from header transform')); + } + if (!withHeaders.isValid) { + if (this.shouldEmitRows) { + return cb(null, { isValid: false, row: parsedRow }); + } + // skipped because of skipRows option remove from total row count + return this.skipRow(cb); + } + if (withHeaders.row) { + if (this.shouldEmitRows) { + return this.rowTransformerValidator.transformAndValidate(withHeaders.row, cb); + } + // skipped because of skipRows option remove from total row count + return this.skipRow(cb); + } + // this is a header row dont include in the rowCount or parsedRowCount + this.rowCount -= 1; + this.parsedRowCount -= 1; + return cb(null, { row: null, isValid: true }); + }); + } + catch (e) { + cb(e); + } + } + checkAndEmitHeaders() { + if (!this.headersEmitted && this.headerTransformer.headers) { + this.headersEmitted = true; + this.emit('headers', this.headerTransformer.headers); + } + } + skipRow(cb) { + // skipped because of skipRows option remove from total row count + this.rowCount -= 1; + return cb(null, { row: null, isValid: true }); + } + pushRow(row, cb) { + try { + if (!this.parserOptions.objectMode) { + this.push(JSON.stringify(row)); + } + else { + this.push(row); + } + cb(); + } + catch (e) { + cb(e); + } + } + static wrapDoneCallback(done) { + let errorCalled = false; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return (err, ...args) => { + if (err) { + if (errorCalled) { + throw err; + } + errorCalled = true; + done(err); + return; + } + done(...args); + }; + } +} +exports.CsvParserStream = CsvParserStream; +//# sourceMappingURL=CsvParserStream.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js.map new file mode 100644 index 0000000000000000000000000000000000000000..872b48b8f801bee5007cd1d1be09163a2caec4fc --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/CsvParserStream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CsvParserStream.js","sourceRoot":"","sources":["../../src/CsvParserStream.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d1a15c65f3d26a9daff3bef6a94c2b4d1a91a6a6 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.d.ts @@ -0,0 +1,47 @@ +/// +import { HeaderArray, HeaderTransformFunction } from './types'; +export interface ParserOptionsArgs { + objectMode?: boolean; + delimiter?: string; + quote?: string | null; + escape?: string; + headers?: boolean | HeaderTransformFunction | HeaderArray; + renameHeaders?: boolean; + ignoreEmpty?: boolean; + comment?: string; + strictColumnHandling?: boolean; + discardUnmappedColumns?: boolean; + trim?: boolean; + ltrim?: boolean; + rtrim?: boolean; + encoding?: string; + maxRows?: number; + skipLines?: number; + skipRows?: number; +} +export declare class ParserOptions { + readonly escapedDelimiter: string; + readonly objectMode: boolean; + readonly delimiter: string; + readonly ignoreEmpty: boolean; + readonly quote: string | null; + readonly escape: string | null; + readonly escapeChar: string | null; + readonly comment: string | null; + readonly supportsComments: boolean; + readonly ltrim: boolean; + readonly rtrim: boolean; + readonly trim: boolean; + readonly headers: boolean | HeaderTransformFunction | HeaderArray | null; + readonly renameHeaders: boolean; + readonly strictColumnHandling: boolean; + readonly discardUnmappedColumns: boolean; + readonly carriageReturn: string; + readonly NEXT_TOKEN_REGEXP: RegExp; + readonly encoding: BufferEncoding; + readonly limitRows: boolean; + readonly maxRows: number; + readonly skipLines: number; + readonly skipRows: number; + constructor(opts?: ParserOptionsArgs); +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js new file mode 100644 index 0000000000000000000000000000000000000000..9fcbe7407e7dba4ae174aed6c83b41108f725f96 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js @@ -0,0 +1,47 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ParserOptions = void 0; +const lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp")); +const lodash_isnil_1 = __importDefault(require("lodash.isnil")); +class ParserOptions { + constructor(opts) { + var _a; + this.objectMode = true; + this.delimiter = ','; + this.ignoreEmpty = false; + this.quote = '"'; + this.escape = null; + this.escapeChar = this.quote; + this.comment = null; + this.supportsComments = false; + this.ltrim = false; + this.rtrim = false; + this.trim = false; + this.headers = null; + this.renameHeaders = false; + this.strictColumnHandling = false; + this.discardUnmappedColumns = false; + this.carriageReturn = '\r'; + this.encoding = 'utf8'; + this.limitRows = false; + this.maxRows = 0; + this.skipLines = 0; + this.skipRows = 0; + Object.assign(this, opts || {}); + if (this.delimiter.length > 1) { + throw new Error('delimiter option must be one character long'); + } + this.escapedDelimiter = lodash_escaperegexp_1.default(this.delimiter); + this.escapeChar = (_a = this.escape) !== null && _a !== void 0 ? _a : this.quote; + this.supportsComments = !lodash_isnil_1.default(this.comment); + this.NEXT_TOKEN_REGEXP = new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`); + if (this.maxRows > 0) { + this.limitRows = true; + } + } +} +exports.ParserOptions = ParserOptions; +//# sourceMappingURL=ParserOptions.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js.map new file mode 100644 index 0000000000000000000000000000000000000000..85b1f2e13fd5a1186b737b00165714806dcffb7c --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/ParserOptions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ParserOptions.js","sourceRoot":"","sources":["../../src/ParserOptions.ts"],"names":[],"mappings":";;;;;;AAAA,8EAA+C;AAC/C,gEAAiC;AAuBjC,MAAa,aAAa;IA+CtB,YAAmB,IAAwB;;QA5C3B,eAAU,GAAY,IAAI,CAAC;QAE3B,cAAS,GAAW,GAAG,CAAC;QAExB,gBAAW,GAAY,KAAK,CAAC;QAE7B,UAAK,GAAkB,GAAG,CAAC;QAE3B,WAAM,GAAkB,IAAI,CAAC;QAE7B,eAAU,GAAkB,IAAI,CAAC,KAAK,CAAC;QAEvC,YAAO,GAAkB,IAAI,CAAC;QAE9B,qBAAgB,GAAY,KAAK,CAAC;QAElC,UAAK,GAAY,KAAK,CAAC;QAEvB,UAAK,GAAY,KAAK,CAAC;QAEvB,SAAI,GAAY,KAAK,CAAC;QAEtB,YAAO,GAA2D,IAAI,CAAC;QAEvE,kBAAa,GAAY,KAAK,CAAC;QAE/B,yBAAoB,GAAY,KAAK,CAAC;QAEtC,2BAAsB,GAAY,KAAK,CAAC;QAExC,mBAAc,GAAW,IAAI,CAAC;QAI9B,aAAQ,GAAmB,MAAM,CAAC;QAElC,cAAS,GAAY,KAAK,CAAC;QAE3B,YAAO,GAAW,CAAC,CAAC;QAEpB,cAAS,GAAW,CAAC,CAAC;QAEtB,aAAQ,GAAW,CAAC,CAAC;QAGjC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAClE;QACD,IAAI,CAAC,gBAAgB,GAAG,6BAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,SAAG,IAAI,CAAC,MAAM,mCAAI,IAAI,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,gBAAgB,GAAG,CAAC,sBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,MAAM,CAAC,0BAA0B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAExF,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;IACL,CAAC;CACJ;AA7DD,sCA6DC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/index.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0ec5fad0291e7889ab2afc1f12b596d489cac954 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/index.d.ts @@ -0,0 +1,11 @@ +/// +import { ParserOptionsArgs } from './ParserOptions'; +import { CsvParserStream } from './CsvParserStream'; +import { Row } from './types'; +export * from './types'; +export { CsvParserStream } from './CsvParserStream'; +export { ParserOptions, ParserOptionsArgs } from './ParserOptions'; +export declare const parse: , O extends Row>(args?: ParserOptionsArgs | undefined) => CsvParserStream; +export declare const parseStream: , O extends Row>(stream: NodeJS.ReadableStream, options?: ParserOptionsArgs | undefined) => CsvParserStream; +export declare const parseFile: , O extends Row>(location: string, options?: ParserOptionsArgs) => CsvParserStream; +export declare const parseString: , O extends Row>(string: string, options?: ParserOptionsArgs | undefined) => CsvParserStream; diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/index.js b/node_backend/node_modules/@fast-csv/parse/build/src/index.js new file mode 100644 index 0000000000000000000000000000000000000000..1a4239ffc0017c740b514c9fa44f542f51ef17e2 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/index.js @@ -0,0 +1,44 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseString = exports.parseFile = exports.parseStream = exports.parse = exports.ParserOptions = exports.CsvParserStream = void 0; +const fs = __importStar(require("fs")); +const stream_1 = require("stream"); +const ParserOptions_1 = require("./ParserOptions"); +const CsvParserStream_1 = require("./CsvParserStream"); +__exportStar(require("./types"), exports); +var CsvParserStream_2 = require("./CsvParserStream"); +Object.defineProperty(exports, "CsvParserStream", { enumerable: true, get: function () { return CsvParserStream_2.CsvParserStream; } }); +var ParserOptions_2 = require("./ParserOptions"); +Object.defineProperty(exports, "ParserOptions", { enumerable: true, get: function () { return ParserOptions_2.ParserOptions; } }); +exports.parse = (args) => new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args)); +exports.parseStream = (stream, options) => stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options))); +exports.parseFile = (location, options = {}) => fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options))); +exports.parseString = (string, options) => { + const rs = new stream_1.Readable(); + rs.push(string); + rs.push(null); + return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options))); +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/index.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/index.js.map new file mode 100644 index 0000000000000000000000000000000000000000..5fd268a26649a0ccbe03cc0e0237decf5d6febb7 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,mCAAkC;AAClC,mDAAmE;AACnE,uDAAoD;AAGpD,0CAAwB;AACxB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,iDAAmE;AAA1D,8GAAA,aAAa,OAAA;AAET,QAAA,KAAK,GAAG,CAA+B,IAAwB,EAAyB,EAAE,CACnG,IAAI,iCAAe,CAAC,IAAI,6BAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpC,QAAA,WAAW,GAAG,CACvB,MAA6B,EAC7B,OAA2B,EACN,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,iCAAe,CAAC,IAAI,6BAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE5E,QAAA,SAAS,GAAG,CACrB,QAAgB,EAChB,UAA6B,EAAE,EACV,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,iCAAe,CAAC,IAAI,6BAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEnG,QAAA,WAAW,GAAG,CACvB,MAAc,EACd,OAA2B,EACN,EAAE;IACvB,MAAM,EAAE,GAAG,IAAI,iBAAQ,EAAE,CAAC;IAC1B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,iCAAe,CAAC,IAAI,6BAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..41213324e4e5d7cd7fc67e6414eef4b69cddd6c9 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.d.ts @@ -0,0 +1,15 @@ +import { ParserOptions } from '../ParserOptions'; +export interface ParseResult { + line: string; + rows: string[][]; +} +export declare class Parser { + private static removeBOM; + private readonly parserOptions; + private readonly rowParser; + constructor(parserOptions: ParserOptions); + parse(line: string, hasMoreData: boolean): ParseResult; + private parseWithoutComments; + private parseWithComments; + private parseRow; +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js new file mode 100644 index 0000000000000000000000000000000000000000..4b3d23424bd2b3a2f75e85e3c11adaa78d2ce18e --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js @@ -0,0 +1,76 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Parser = void 0; +const Scanner_1 = require("./Scanner"); +const RowParser_1 = require("./RowParser"); +const Token_1 = require("./Token"); +class Parser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.rowParser = new RowParser_1.RowParser(this.parserOptions); + } + static removeBOM(line) { + // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string + // conversion translates it to FEFF (UTF-16 BOM) + if (line && line.charCodeAt(0) === 0xfeff) { + return line.slice(1); + } + return line; + } + parse(line, hasMoreData) { + const scanner = new Scanner_1.Scanner({ + line: Parser.removeBOM(line), + parserOptions: this.parserOptions, + hasMoreData, + }); + if (this.parserOptions.supportsComments) { + return this.parseWithComments(scanner); + } + return this.parseWithoutComments(scanner); + } + parseWithoutComments(scanner) { + const rows = []; + let shouldContinue = true; + while (shouldContinue) { + shouldContinue = this.parseRow(scanner, rows); + } + return { line: scanner.line, rows }; + } + parseWithComments(scanner) { + const { parserOptions } = this; + const rows = []; + for (let nextToken = scanner.nextCharacterToken; nextToken !== null; nextToken = scanner.nextCharacterToken) { + if (Token_1.Token.isTokenComment(nextToken, parserOptions)) { + const cursor = scanner.advancePastLine(); + if (cursor === null) { + return { line: scanner.lineFromCursor, rows }; + } + if (!scanner.hasMoreCharacters) { + return { line: scanner.lineFromCursor, rows }; + } + scanner.truncateToCursor(); + } + else if (!this.parseRow(scanner, rows)) { + break; + } + } + return { line: scanner.line, rows }; + } + parseRow(scanner, rows) { + const nextToken = scanner.nextNonSpaceToken; + if (!nextToken) { + return false; + } + const row = this.rowParser.parse(scanner); + if (row === null) { + return false; + } + if (this.parserOptions.ignoreEmpty && RowParser_1.RowParser.isEmptyRow(row)) { + return true; + } + rows.push(row); + return true; + } +} +exports.Parser = Parser; +//# sourceMappingURL=Parser.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js.map new file mode 100644 index 0000000000000000000000000000000000000000..db362251026266e429647f2a4c0ff9037c715422 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Parser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../src/parser/Parser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..49c1f60561fb21e792fe90ade7da6b4d429a5a3c --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.d.ts @@ -0,0 +1,12 @@ +import { Scanner } from './Scanner'; +import { ParserOptions } from '../ParserOptions'; +import { RowArray } from '../types'; +export declare class RowParser { + static isEmptyRow(row: RowArray): boolean; + private readonly parserOptions; + private readonly columnParser; + constructor(parserOptions: ParserOptions); + parse(scanner: Scanner): RowArray | null; + private getStartToken; + private shouldSkipColumnParse; +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js new file mode 100644 index 0000000000000000000000000000000000000000..98a326ff728571f85df5fd0d335ca3d5a18b4fa5 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js @@ -0,0 +1,76 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RowParser = void 0; +const column_1 = require("./column"); +const Token_1 = require("./Token"); +const EMPTY_STRING = ''; +class RowParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.columnParser = new column_1.ColumnParser(parserOptions); + } + static isEmptyRow(row) { + return row.join(EMPTY_STRING).replace(/\s+/g, EMPTY_STRING) === EMPTY_STRING; + } + parse(scanner) { + const { parserOptions } = this; + const { hasMoreData } = scanner; + const currentScanner = scanner; + const columns = []; + let currentToken = this.getStartToken(currentScanner, columns); + while (currentToken) { + if (Token_1.Token.isTokenRowDelimiter(currentToken)) { + currentScanner.advancePastToken(currentToken); + // if ends with CR and there is more data, keep unparsed due to possible + // coming LF in CRLF + if (!currentScanner.hasMoreCharacters && + Token_1.Token.isTokenCarriageReturn(currentToken, parserOptions) && + hasMoreData) { + return null; + } + currentScanner.truncateToCursor(); + return columns; + } + if (!this.shouldSkipColumnParse(currentScanner, currentToken, columns)) { + const item = this.columnParser.parse(currentScanner); + if (item === null) { + return null; + } + columns.push(item); + } + currentToken = currentScanner.nextNonSpaceToken; + } + if (!hasMoreData) { + currentScanner.truncateToCursor(); + return columns; + } + return null; + } + getStartToken(scanner, columns) { + const currentToken = scanner.nextNonSpaceToken; + if (currentToken !== null && Token_1.Token.isTokenDelimiter(currentToken, this.parserOptions)) { + columns.push(''); + return scanner.nextNonSpaceToken; + } + return currentToken; + } + shouldSkipColumnParse(scanner, currentToken, columns) { + const { parserOptions } = this; + if (Token_1.Token.isTokenDelimiter(currentToken, parserOptions)) { + scanner.advancePastToken(currentToken); + // if the delimiter is at the end of a line + const nextToken = scanner.nextCharacterToken; + if (!scanner.hasMoreCharacters || (nextToken !== null && Token_1.Token.isTokenRowDelimiter(nextToken))) { + columns.push(''); + return true; + } + if (nextToken !== null && Token_1.Token.isTokenDelimiter(nextToken, parserOptions)) { + columns.push(''); + return true; + } + } + return false; + } +} +exports.RowParser = RowParser; +//# sourceMappingURL=RowParser.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e6b223e25a80cddf7532d57dd703177625778449 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/RowParser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"RowParser.js","sourceRoot":"","sources":["../../../src/parser/RowParser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bbd08020a1e7c11c7b869a8ac4915bfd5665eadf --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.d.ts @@ -0,0 +1,25 @@ +import { ParserOptions } from '../ParserOptions'; +import { MaybeToken, Token } from './Token'; +export interface ScannerArgs { + line: string; + parserOptions: ParserOptions; + hasMoreData: boolean; + cursor?: number; +} +export declare class Scanner { + line: string; + private readonly parserOptions; + lineLength: number; + readonly hasMoreData: boolean; + cursor: number; + constructor(args: ScannerArgs); + get hasMoreCharacters(): boolean; + get nextNonSpaceToken(): MaybeToken; + get nextCharacterToken(): MaybeToken; + get lineFromCursor(): string; + advancePastLine(): Scanner | null; + advanceTo(cursor: number): Scanner; + advanceToToken(token: Token): Scanner; + advancePastToken(token: Token): Scanner; + truncateToCursor(): Scanner; +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js new file mode 100644 index 0000000000000000000000000000000000000000..f00c9674858fc55c1f3f35a816f5c7a21766f664 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js @@ -0,0 +1,82 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Scanner = void 0; +const Token_1 = require("./Token"); +const ROW_DELIMITER = /((?:\r\n)|\n|\r)/; +class Scanner { + constructor(args) { + this.cursor = 0; + this.line = args.line; + this.lineLength = this.line.length; + this.parserOptions = args.parserOptions; + this.hasMoreData = args.hasMoreData; + this.cursor = args.cursor || 0; + } + get hasMoreCharacters() { + return this.lineLength > this.cursor; + } + get nextNonSpaceToken() { + const { lineFromCursor } = this; + const regex = this.parserOptions.NEXT_TOKEN_REGEXP; + if (lineFromCursor.search(regex) === -1) { + return null; + } + const match = regex.exec(lineFromCursor); + if (match == null) { + return null; + } + const token = match[1]; + const startCursor = this.cursor + (match.index || 0); + return new Token_1.Token({ + token, + startCursor, + endCursor: startCursor + token.length - 1, + }); + } + get nextCharacterToken() { + const { cursor, lineLength } = this; + if (lineLength <= cursor) { + return null; + } + return new Token_1.Token({ + token: this.line[cursor], + startCursor: cursor, + endCursor: cursor, + }); + } + get lineFromCursor() { + return this.line.substr(this.cursor); + } + advancePastLine() { + const match = ROW_DELIMITER.exec(this.lineFromCursor); + if (!match) { + if (this.hasMoreData) { + return null; + } + this.cursor = this.lineLength; + return this; + } + this.cursor += (match.index || 0) + match[0].length; + return this; + } + advanceTo(cursor) { + this.cursor = cursor; + return this; + } + advanceToToken(token) { + this.cursor = token.startCursor; + return this; + } + advancePastToken(token) { + this.cursor = token.endCursor + 1; + return this; + } + truncateToCursor() { + this.line = this.lineFromCursor; + this.lineLength = this.line.length; + this.cursor = 0; + return this; + } +} +exports.Scanner = Scanner; +//# sourceMappingURL=Scanner.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f812311ef26a43b51e0e2493dae8a77117c22c9d --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Scanner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Scanner.js","sourceRoot":"","sources":["../../../src/parser/Scanner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2f2bdf396aeb193c25ec78685c7426d79b555a64 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.d.ts @@ -0,0 +1,19 @@ +import { ParserOptions } from '../ParserOptions'; +export declare type MaybeToken = Token | null; +export interface TokenArgs { + token: string; + startCursor: number; + endCursor: number; +} +export declare class Token { + static isTokenRowDelimiter(token: Token): boolean; + static isTokenCarriageReturn(token: Token, parserOptions: ParserOptions): boolean; + static isTokenComment(token: Token, parserOptions: ParserOptions): boolean; + static isTokenEscapeCharacter(token: Token, parserOptions: ParserOptions): boolean; + static isTokenQuote(token: Token, parserOptions: ParserOptions): boolean; + static isTokenDelimiter(token: Token, parserOptions: ParserOptions): boolean; + readonly token: string; + readonly startCursor: number; + readonly endCursor: number; + constructor(tokenArgs: TokenArgs); +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js new file mode 100644 index 0000000000000000000000000000000000000000..d61b23cac340a070f9cf55e3e939511f3a4c7aaf --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Token = void 0; +class Token { + constructor(tokenArgs) { + this.token = tokenArgs.token; + this.startCursor = tokenArgs.startCursor; + this.endCursor = tokenArgs.endCursor; + } + static isTokenRowDelimiter(token) { + const content = token.token; + return content === '\r' || content === '\n' || content === '\r\n'; + } + static isTokenCarriageReturn(token, parserOptions) { + return token.token === parserOptions.carriageReturn; + } + static isTokenComment(token, parserOptions) { + return parserOptions.supportsComments && !!token && token.token === parserOptions.comment; + } + static isTokenEscapeCharacter(token, parserOptions) { + return token.token === parserOptions.escapeChar; + } + static isTokenQuote(token, parserOptions) { + return token.token === parserOptions.quote; + } + static isTokenDelimiter(token, parserOptions) { + return token.token === parserOptions.delimiter; + } +} +exports.Token = Token; +//# sourceMappingURL=Token.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js.map new file mode 100644 index 0000000000000000000000000000000000000000..403e802de27974c2da260087f5678dec92b3d0ab --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/Token.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Token.js","sourceRoot":"","sources":["../../../src/parser/Token.ts"],"names":[],"mappings":";;;AAUA,MAAa,KAAK;IAgCd,YAAmB,SAAoB;QACnC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACzC,CAAC;IAnCM,MAAM,CAAC,mBAAmB,CAAC,KAAY;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5B,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;IACtE,CAAC;IAEM,MAAM,CAAC,qBAAqB,CAAC,KAAY,EAAE,aAA4B;QAC1E,OAAO,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,cAAc,CAAC;IACxD,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,KAAY,EAAE,aAA4B;QACnE,OAAO,aAAa,CAAC,gBAAgB,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,OAAO,CAAC;IAC9F,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,KAAY,EAAE,aAA4B;QAC3E,OAAO,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,UAAU,CAAC;IACpD,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,KAAY,EAAE,aAA4B;QACjE,OAAO,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,CAAC;IAC/C,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,KAAY,EAAE,aAA4B;QACrE,OAAO,KAAK,CAAC,KAAK,KAAK,aAAa,CAAC,SAAS,CAAC;IACnD,CAAC;CAaJ;AArCD,sBAqCC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..35be4d97bf859815bf47be080e12e5d9e33245b3 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.d.ts @@ -0,0 +1,5 @@ +import { ParserOptions } from '../../ParserOptions'; +export declare class ColumnFormatter { + readonly format: (col: string) => string; + constructor(parserOptions: ParserOptions); +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js new file mode 100644 index 0000000000000000000000000000000000000000..721aa12d3eb6e06a19c59101621c1a4e5ebb2295 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ColumnFormatter = void 0; +class ColumnFormatter { + constructor(parserOptions) { + if (parserOptions.trim) { + this.format = (col) => col.trim(); + } + else if (parserOptions.ltrim) { + this.format = (col) => col.trimLeft(); + } + else if (parserOptions.rtrim) { + this.format = (col) => col.trimRight(); + } + else { + this.format = (col) => col; + } + } +} +exports.ColumnFormatter = ColumnFormatter; +//# sourceMappingURL=ColumnFormatter.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js.map new file mode 100644 index 0000000000000000000000000000000000000000..331d2690553479deff618c695098e4aefabe512c --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ColumnFormatter.js","sourceRoot":"","sources":["../../../../src/parser/column/ColumnFormatter.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAGxB,YAAmB,aAA4B;QAC3C,IAAI,aAAa,CAAC,IAAI,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACrD;aAAM,IAAI,aAAa,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;SACzD;aAAM,IAAI,aAAa,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;SAC1D;aAAM;YACH,IAAI,CAAC,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC;SAC9C;IACL,CAAC;CACJ;AAdD,0CAcC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6dd99cd3f3d49355b81942607105bb8307fef9dd --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.d.ts @@ -0,0 +1,11 @@ +import { ParserOptions } from '../../ParserOptions'; +import { NonQuotedColumnParser } from './NonQuotedColumnParser'; +import { QuotedColumnParser } from './QuotedColumnParser'; +import { Scanner } from '../Scanner'; +export declare class ColumnParser { + private readonly parserOptions; + readonly nonQuotedColumnParser: NonQuotedColumnParser; + readonly quotedColumnParser: QuotedColumnParser; + constructor(parserOptions: ParserOptions); + parse(scanner: Scanner): string | null; +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js new file mode 100644 index 0000000000000000000000000000000000000000..e811b59e26a839b445dfdad96806f96779b9bcea --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ColumnParser = void 0; +const NonQuotedColumnParser_1 = require("./NonQuotedColumnParser"); +const QuotedColumnParser_1 = require("./QuotedColumnParser"); +const Token_1 = require("../Token"); +class ColumnParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.quotedColumnParser = new QuotedColumnParser_1.QuotedColumnParser(parserOptions); + this.nonQuotedColumnParser = new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions); + } + parse(scanner) { + const { nextNonSpaceToken } = scanner; + if (nextNonSpaceToken !== null && Token_1.Token.isTokenQuote(nextNonSpaceToken, this.parserOptions)) { + scanner.advanceToToken(nextNonSpaceToken); + return this.quotedColumnParser.parse(scanner); + } + return this.nonQuotedColumnParser.parse(scanner); + } +} +exports.ColumnParser = ColumnParser; +//# sourceMappingURL=ColumnParser.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js.map new file mode 100644 index 0000000000000000000000000000000000000000..8f7258ebb93a31671569f0800474fb415d25fd7a --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ColumnParser.js","sourceRoot":"","sources":["../../../../src/parser/column/ColumnParser.ts"],"names":[],"mappings":";;;AACA,mEAAgE;AAChE,6DAA0D;AAE1D,oCAAiC;AAEjC,MAAa,YAAY;IAOrB,YAAmB,aAA4B;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,IAAI,uCAAkB,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,CAAC,qBAAqB,GAAG,IAAI,6CAAqB,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,OAAgB;QACzB,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QACtC,IAAI,iBAAiB,KAAK,IAAI,IAAI,aAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;YACzF,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;CACJ;AArBD,oCAqBC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f06f9710b344831bf30eb57d07ea74c3af78082d --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.d.ts @@ -0,0 +1,8 @@ +import { ParserOptions } from '../../ParserOptions'; +import { Scanner } from '../Scanner'; +export declare class NonQuotedColumnParser { + private readonly parserOptions; + private readonly columnFormatter; + constructor(parserOptions: ParserOptions); + parse(scanner: Scanner): string | null; +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js new file mode 100644 index 0000000000000000000000000000000000000000..5bc2fe951922f348aa021754282caaf5e6ed3fe0 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NonQuotedColumnParser = void 0; +const ColumnFormatter_1 = require("./ColumnFormatter"); +const Token_1 = require("../Token"); +class NonQuotedColumnParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions); + } + parse(scanner) { + if (!scanner.hasMoreCharacters) { + return null; + } + const { parserOptions } = this; + const characters = []; + let nextToken = scanner.nextCharacterToken; + for (; nextToken; nextToken = scanner.nextCharacterToken) { + if (Token_1.Token.isTokenDelimiter(nextToken, parserOptions) || Token_1.Token.isTokenRowDelimiter(nextToken)) { + break; + } + characters.push(nextToken.token); + scanner.advancePastToken(nextToken); + } + return this.columnFormatter.format(characters.join('')); + } +} +exports.NonQuotedColumnParser = NonQuotedColumnParser; +//# sourceMappingURL=NonQuotedColumnParser.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0bb118eabdb052e5ff6e10c89a167c582cc1071a --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"NonQuotedColumnParser.js","sourceRoot":"","sources":["../../../../src/parser/column/NonQuotedColumnParser.ts"],"names":[],"mappings":";;;AACA,uDAAoD;AAEpD,oCAAiC;AAEjC,MAAa,qBAAqB;IAK9B,YAAmB,aAA4B;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,IAAI,iCAAe,CAAC,aAAa,CAAC,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,OAAgB;QACzB,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC5B,OAAO,IAAI,CAAC;SACf;QACD,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,IAAI,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC3C,OAAO,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE;YACtD,IAAI,aAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,aAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;gBAC1F,MAAM;aACT;YACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;SACvC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;CACJ;AA1BD,sDA0BC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7983fd907eebf9be376507ae7dc92d55ed100478 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.d.ts @@ -0,0 +1,10 @@ +import { ParserOptions } from '../../ParserOptions'; +import { Scanner } from '../Scanner'; +export declare class QuotedColumnParser { + private readonly parserOptions; + private readonly columnFormatter; + constructor(parserOptions: ParserOptions); + parse(scanner: Scanner): string | null; + private gatherDataBetweenQuotes; + private checkForMalformedColumn; +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js new file mode 100644 index 0000000000000000000000000000000000000000..06ebca12a9cc1fa0daea52e415a109601a40c1c1 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js @@ -0,0 +1,97 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.QuotedColumnParser = void 0; +const ColumnFormatter_1 = require("./ColumnFormatter"); +const Token_1 = require("../Token"); +class QuotedColumnParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions); + } + parse(scanner) { + if (!scanner.hasMoreCharacters) { + return null; + } + const originalCursor = scanner.cursor; + const { foundClosingQuote, col } = this.gatherDataBetweenQuotes(scanner); + if (!foundClosingQuote) { + // reset the cursor to the original + scanner.advanceTo(originalCursor); + // if we didnt find a closing quote but we potentially have more data then skip the parsing + // and return the original scanner. + if (!scanner.hasMoreData) { + throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote || ''}' in line: at '${scanner.lineFromCursor.replace(/[\r\n]/g, "\\n'")}'`); + } + return null; + } + this.checkForMalformedColumn(scanner); + return col; + } + gatherDataBetweenQuotes(scanner) { + const { parserOptions } = this; + let foundStartingQuote = false; + let foundClosingQuote = false; + const characters = []; + let nextToken = scanner.nextCharacterToken; + for (; !foundClosingQuote && nextToken !== null; nextToken = scanner.nextCharacterToken) { + const isQuote = Token_1.Token.isTokenQuote(nextToken, parserOptions); + // ignore first quote + if (!foundStartingQuote && isQuote) { + foundStartingQuote = true; + } + else if (foundStartingQuote) { + if (Token_1.Token.isTokenEscapeCharacter(nextToken, parserOptions)) { + // advance past the escape character so we can get the next one in line + scanner.advancePastToken(nextToken); + const tokenFollowingEscape = scanner.nextCharacterToken; + // if the character following the escape is a quote character then just add + // the quote and advance to that character + if (tokenFollowingEscape !== null && + (Token_1.Token.isTokenQuote(tokenFollowingEscape, parserOptions) || + Token_1.Token.isTokenEscapeCharacter(tokenFollowingEscape, parserOptions))) { + characters.push(tokenFollowingEscape.token); + nextToken = tokenFollowingEscape; + } + else if (isQuote) { + // if the escape is also a quote then we found our closing quote and finish early + foundClosingQuote = true; + } + else { + // other wise add the escape token to the characters since it wast escaping anything + characters.push(nextToken.token); + } + } + else if (isQuote) { + // we found our closing quote! + foundClosingQuote = true; + } + else { + // add the token to the characters + characters.push(nextToken.token); + } + } + scanner.advancePastToken(nextToken); + } + return { col: this.columnFormatter.format(characters.join('')), foundClosingQuote }; + } + checkForMalformedColumn(scanner) { + const { parserOptions } = this; + const { nextNonSpaceToken } = scanner; + if (nextNonSpaceToken) { + const isNextTokenADelimiter = Token_1.Token.isTokenDelimiter(nextNonSpaceToken, parserOptions); + const isNextTokenARowDelimiter = Token_1.Token.isTokenRowDelimiter(nextNonSpaceToken); + if (!(isNextTokenADelimiter || isNextTokenARowDelimiter)) { + // if the final quote was NOT followed by a column (,) or row(\n) delimiter then its a bad column + // tldr: only part of the column was quoted + const linePreview = scanner.lineFromCursor.substr(0, 10).replace(/[\r\n]/g, "\\n'"); + throw new Error(`Parse Error: expected: '${parserOptions.escapedDelimiter}' OR new line got: '${nextNonSpaceToken.token}'. at '${linePreview}`); + } + scanner.advanceToToken(nextNonSpaceToken); + } + else if (!scanner.hasMoreData) { + scanner.advancePastLine(); + } + } +} +exports.QuotedColumnParser = QuotedColumnParser; +//# sourceMappingURL=QuotedColumnParser.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js.map new file mode 100644 index 0000000000000000000000000000000000000000..74eeb40aa21e8185f8dc9d282b308c9ea1edfeb9 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"QuotedColumnParser.js","sourceRoot":"","sources":["../../../../src/parser/column/QuotedColumnParser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2c574eadb38155d2422f1b79cdaefea7000c9240 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.d.ts @@ -0,0 +1,4 @@ +export { ColumnParser } from './ColumnParser'; +export { NonQuotedColumnParser } from './NonQuotedColumnParser'; +export { QuotedColumnParser } from './QuotedColumnParser'; +export { ColumnFormatter } from './ColumnFormatter'; diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js new file mode 100644 index 0000000000000000000000000000000000000000..d173b45d19f6fcd71f972e56d4708d05702e562d --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ColumnFormatter = exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = void 0; +var ColumnParser_1 = require("./ColumnParser"); +Object.defineProperty(exports, "ColumnParser", { enumerable: true, get: function () { return ColumnParser_1.ColumnParser; } }); +var NonQuotedColumnParser_1 = require("./NonQuotedColumnParser"); +Object.defineProperty(exports, "NonQuotedColumnParser", { enumerable: true, get: function () { return NonQuotedColumnParser_1.NonQuotedColumnParser; } }); +var QuotedColumnParser_1 = require("./QuotedColumnParser"); +Object.defineProperty(exports, "QuotedColumnParser", { enumerable: true, get: function () { return QuotedColumnParser_1.QuotedColumnParser; } }); +var ColumnFormatter_1 = require("./ColumnFormatter"); +Object.defineProperty(exports, "ColumnFormatter", { enumerable: true, get: function () { return ColumnFormatter_1.ColumnFormatter; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js.map new file mode 100644 index 0000000000000000000000000000000000000000..87996c1e67e04618d7071f9cab6098182e3cabe9 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/column/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/parser/column/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,qDAAoD;AAA3C,kHAAA,eAAe,OAAA"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2f64fcb9860336f9bf032b9fb953271c70b3795a --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.d.ts @@ -0,0 +1,5 @@ +export { Parser } from './Parser'; +export { RowParser } from './RowParser'; +export { Scanner } from './Scanner'; +export { Token, MaybeToken } from './Token'; +export { ColumnParser, NonQuotedColumnParser, QuotedColumnParser } from './column'; diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js new file mode 100644 index 0000000000000000000000000000000000000000..658e7e8c07d192e43eb2c01df2846493f84bd07b --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = exports.Token = exports.Scanner = exports.RowParser = exports.Parser = void 0; +var Parser_1 = require("./Parser"); +Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return Parser_1.Parser; } }); +var RowParser_1 = require("./RowParser"); +Object.defineProperty(exports, "RowParser", { enumerable: true, get: function () { return RowParser_1.RowParser; } }); +var Scanner_1 = require("./Scanner"); +Object.defineProperty(exports, "Scanner", { enumerable: true, get: function () { return Scanner_1.Scanner; } }); +var Token_1 = require("./Token"); +Object.defineProperty(exports, "Token", { enumerable: true, get: function () { return Token_1.Token; } }); +var column_1 = require("./column"); +Object.defineProperty(exports, "ColumnParser", { enumerable: true, get: function () { return column_1.ColumnParser; } }); +Object.defineProperty(exports, "NonQuotedColumnParser", { enumerable: true, get: function () { return column_1.NonQuotedColumnParser; } }); +Object.defineProperty(exports, "QuotedColumnParser", { enumerable: true, get: function () { return column_1.QuotedColumnParser; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js.map new file mode 100644 index 0000000000000000000000000000000000000000..245bcb6bcb9b76e1e4531916a10cf085c0447277 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/parser/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/parser/index.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,iCAA4C;AAAnC,8FAAA,KAAK,OAAA;AACd,mCAAmF;AAA1E,sGAAA,YAAY,OAAA;AAAE,+GAAA,qBAAqB,OAAA;AAAE,4GAAA,kBAAkB,OAAA"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..433daa1528b2066a86b29e1fc7df2d527d6516a7 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.d.ts @@ -0,0 +1,17 @@ +import { ParserOptions } from '../ParserOptions'; +import { HeaderArray, Row, RowArray, RowValidatorCallback } from '../types'; +export declare class HeaderTransformer { + private readonly parserOptions; + headers: HeaderArray | null; + private receivedHeaders; + private readonly shouldUseFirstRow; + private processedFirstRow; + private headersLength; + private readonly headersTransform?; + constructor(parserOptions: ParserOptions); + transform(row: RowArray, cb: RowValidatorCallback): void; + private shouldMapRow; + private processRow; + private mapHeaders; + private setHeaders; +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js new file mode 100644 index 0000000000000000000000000000000000000000..dd42491752975a0c0c73f5acb81c7fa3014234af --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js @@ -0,0 +1,115 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.HeaderTransformer = void 0; +const lodash_isundefined_1 = __importDefault(require("lodash.isundefined")); +const lodash_isfunction_1 = __importDefault(require("lodash.isfunction")); +const lodash_uniq_1 = __importDefault(require("lodash.uniq")); +const lodash_groupby_1 = __importDefault(require("lodash.groupby")); +class HeaderTransformer { + constructor(parserOptions) { + this.headers = null; + this.receivedHeaders = false; + this.shouldUseFirstRow = false; + this.processedFirstRow = false; + this.headersLength = 0; + this.parserOptions = parserOptions; + if (parserOptions.headers === true) { + this.shouldUseFirstRow = true; + } + else if (Array.isArray(parserOptions.headers)) { + this.setHeaders(parserOptions.headers); + } + else if (lodash_isfunction_1.default(parserOptions.headers)) { + this.headersTransform = parserOptions.headers; + } + } + transform(row, cb) { + if (!this.shouldMapRow(row)) { + return cb(null, { row: null, isValid: true }); + } + return cb(null, this.processRow(row)); + } + shouldMapRow(row) { + const { parserOptions } = this; + if (!this.headersTransform && parserOptions.renameHeaders && !this.processedFirstRow) { + if (!this.receivedHeaders) { + throw new Error('Error renaming headers: new headers must be provided in an array'); + } + this.processedFirstRow = true; + return false; + } + if (!this.receivedHeaders && Array.isArray(row)) { + if (this.headersTransform) { + this.setHeaders(this.headersTransform(row)); + } + else if (this.shouldUseFirstRow) { + this.setHeaders(row); + } + else { + // dont do anything with the headers if we didnt receive a transform or shouldnt use the first row. + return true; + } + return false; + } + return true; + } + processRow(row) { + if (!this.headers) { + return { row: row, isValid: true }; + } + const { parserOptions } = this; + if (!parserOptions.discardUnmappedColumns && row.length > this.headersLength) { + if (!parserOptions.strictColumnHandling) { + throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${row.length}`); + } + return { + row: row, + isValid: false, + reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`, + }; + } + if (parserOptions.strictColumnHandling && row.length < this.headersLength) { + return { + row: row, + isValid: false, + reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`, + }; + } + return { row: this.mapHeaders(row), isValid: true }; + } + mapHeaders(row) { + const rowMap = {}; + const { headers, headersLength } = this; + for (let i = 0; i < headersLength; i += 1) { + const header = headers[i]; + if (!lodash_isundefined_1.default(header)) { + const val = row[i]; + // eslint-disable-next-line no-param-reassign + if (lodash_isundefined_1.default(val)) { + rowMap[header] = ''; + } + else { + rowMap[header] = val; + } + } + } + return rowMap; + } + setHeaders(headers) { + var _a; + const filteredHeaders = headers.filter((h) => !!h); + if (lodash_uniq_1.default(filteredHeaders).length !== filteredHeaders.length) { + const grouped = lodash_groupby_1.default(filteredHeaders); + const duplicates = Object.keys(grouped).filter((dup) => grouped[dup].length > 1); + throw new Error(`Duplicate headers found ${JSON.stringify(duplicates)}`); + } + this.headers = headers; + this.receivedHeaders = true; + this.headersLength = ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.length) || 0; + } +} +exports.HeaderTransformer = HeaderTransformer; +//# sourceMappingURL=HeaderTransformer.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js.map new file mode 100644 index 0000000000000000000000000000000000000000..350999d3a57b92fde31beb8b55af27d5764f9707 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"HeaderTransformer.js","sourceRoot":"","sources":["../../../src/transforms/HeaderTransformer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..55a5173b512ef5ca8f81ea1b97aaf944155ef541 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.d.ts @@ -0,0 +1,12 @@ +import { Row, RowTransformFunction, RowValidatorCallback, RowValidate } from '../types'; +export declare class RowTransformerValidator { + private static createTransform; + private static createValidator; + private _rowTransform; + private _rowValidator; + set rowTransform(transformFunction: RowTransformFunction); + set rowValidator(validateFunction: RowValidate); + transformAndValidate(row: I, cb: RowValidatorCallback): void; + private callTransformer; + private callValidator; +} diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js new file mode 100644 index 0000000000000000000000000000000000000000..c7c69f881b02664115a41e994957f5a7af7c8bc3 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js @@ -0,0 +1,93 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RowTransformerValidator = void 0; +const lodash_isfunction_1 = __importDefault(require("lodash.isfunction")); +const types_1 = require("../types"); +class RowTransformerValidator { + constructor() { + this._rowTransform = null; + this._rowValidator = null; + } + // eslint-disable-next-line @typescript-eslint/no-shadow + static createTransform(transformFunction) { + if (types_1.isSyncTransform(transformFunction)) { + return (row, cb) => { + let transformed = null; + try { + transformed = transformFunction(row); + } + catch (e) { + return cb(e); + } + return cb(null, transformed); + }; + } + return transformFunction; + } + static createValidator(validateFunction) { + if (types_1.isSyncValidate(validateFunction)) { + return (row, cb) => { + cb(null, { row, isValid: validateFunction(row) }); + }; + } + return (row, cb) => { + validateFunction(row, (err, isValid, reason) => { + if (err) { + return cb(err); + } + if (isValid) { + return cb(null, { row, isValid, reason }); + } + return cb(null, { row, isValid: false, reason }); + }); + }; + } + set rowTransform(transformFunction) { + if (!lodash_isfunction_1.default(transformFunction)) { + throw new TypeError('The transform should be a function'); + } + this._rowTransform = RowTransformerValidator.createTransform(transformFunction); + } + set rowValidator(validateFunction) { + if (!lodash_isfunction_1.default(validateFunction)) { + throw new TypeError('The validate should be a function'); + } + this._rowValidator = RowTransformerValidator.createValidator(validateFunction); + } + transformAndValidate(row, cb) { + return this.callTransformer(row, (transformErr, transformedRow) => { + if (transformErr) { + return cb(transformErr); + } + if (!transformedRow) { + return cb(null, { row: null, isValid: true }); + } + return this.callValidator(transformedRow, (validateErr, validationResult) => { + if (validateErr) { + return cb(validateErr); + } + if (validationResult && !validationResult.isValid) { + return cb(null, { row: transformedRow, isValid: false, reason: validationResult.reason }); + } + return cb(null, { row: transformedRow, isValid: true }); + }); + }); + } + callTransformer(row, cb) { + if (!this._rowTransform) { + return cb(null, row); + } + return this._rowTransform(row, cb); + } + callValidator(row, cb) { + if (!this._rowValidator) { + return cb(null, { row, isValid: true }); + } + return this._rowValidator(row, cb); + } +} +exports.RowTransformerValidator = RowTransformerValidator; +//# sourceMappingURL=RowTransformerValidator.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js.map new file mode 100644 index 0000000000000000000000000000000000000000..008e02812e203d8a8115044e4bbee4d347ff0005 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"RowTransformerValidator.js","sourceRoot":"","sources":["../../../src/transforms/RowTransformerValidator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..26df69bfcce0154e6ff18bb3725d8bcb183021a9 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.d.ts @@ -0,0 +1,2 @@ +export { RowTransformerValidator } from './RowTransformerValidator'; +export { HeaderTransformer } from './HeaderTransformer'; diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js new file mode 100644 index 0000000000000000000000000000000000000000..2b8caf4d10c2018f913642d175d2b765356da6c3 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.HeaderTransformer = exports.RowTransformerValidator = void 0; +var RowTransformerValidator_1 = require("./RowTransformerValidator"); +Object.defineProperty(exports, "RowTransformerValidator", { enumerable: true, get: function () { return RowTransformerValidator_1.RowTransformerValidator; } }); +var HeaderTransformer_1 = require("./HeaderTransformer"); +Object.defineProperty(exports, "HeaderTransformer", { enumerable: true, get: function () { return HeaderTransformer_1.HeaderTransformer; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js.map new file mode 100644 index 0000000000000000000000000000000000000000..dacea918b69eff79acb035a3cb6fa6fa983e25a0 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/transforms/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transforms/index.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA;AAChC,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/types.d.ts b/node_backend/node_modules/@fast-csv/parse/build/src/types.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..625cb990f43e7570e481f8b0aef9d8fc76e95b36 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/types.d.ts @@ -0,0 +1,21 @@ +export declare type RowMap = Record; +export declare type RowArray = V[]; +export declare type Row = RowMap | RowArray; +export interface RowValidationResult { + row: R | null; + isValid: boolean; + reason?: string; +} +export declare type RowValidatorCallback = (error: Error | null, result?: RowValidationResult) => void; +export declare type RowTransformCallback = (error?: Error | null, row?: R) => void; +export declare type SyncRowTransform = (row: I) => O; +export declare type AsyncRowTransform = (row: I, cb: RowTransformCallback) => void; +export declare type RowTransformFunction = SyncRowTransform | AsyncRowTransform; +export declare const isSyncTransform: , O extends Row>(transform: RowTransformFunction) => transform is SyncRowTransform; +export declare type RowValidateCallback = (error?: Error | null, isValid?: boolean, reason?: string) => void; +export declare type SyncRowValidate = (row: R) => boolean; +export declare type AsyncRowValidate = (row: R, cb: RowValidateCallback) => void; +export declare type RowValidate = AsyncRowValidate | SyncRowValidate; +export declare const isSyncValidate: >(validate: RowValidate) => validate is SyncRowValidate; +export declare type HeaderArray = (string | undefined | null)[]; +export declare type HeaderTransformFunction = (headers: HeaderArray) => HeaderArray; diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/types.js b/node_backend/node_modules/@fast-csv/parse/build/src/types.js new file mode 100644 index 0000000000000000000000000000000000000000..92dc9f76fc363947fabfeb0d7f67a0044137ddaa --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/types.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isSyncValidate = exports.isSyncTransform = void 0; +exports.isSyncTransform = (transform) => transform.length === 1; +exports.isSyncValidate = (validate) => validate.length === 1; +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/build/src/types.js.map b/node_backend/node_modules/@fast-csv/parse/build/src/types.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f335163e49faa34810d24a6dea67e583a6bbc154 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/build/src/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAoBa,QAAA,eAAe,GAAG,CAC3B,SAAqC,EACF,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;AAQpD,QAAA,cAAc,GAAG,CAAgB,QAAwB,EAAkC,EAAE,CACtG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/@fast-csv/parse/package.json b/node_backend/node_modules/@fast-csv/parse/package.json new file mode 100644 index 0000000000000000000000000000000000000000..1fda641dc0ed7dbcaa8763a79d50100035add663 --- /dev/null +++ b/node_backend/node_modules/@fast-csv/parse/package.json @@ -0,0 +1,62 @@ +{ + "name": "@fast-csv/parse", + "version": "4.3.6", + "description": "fast-csv parsing package", + "keywords": [ + "csv", + "parse", + "fast-csv", + "parser" + ], + "author": "doug-martin ", + "homepage": "http://c2fo.github.com/fast-csv/packages/parse", + "license": "MIT", + "main": "build/src/index.js", + "types": "build/src/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "build/src/**" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/C2FO/fast-csv.git", + "directory": "packages/parse" + }, + "scripts": { + "prepublishOnly": "npm run build", + "build": "npm run clean && npm run compile", + "clean": "rm -rf ./build && rm -rf tsconfig.tsbuildinfo", + "compile": "tsc" + }, + "bugs": { + "url": "https://github.com/C2FO/fast-csv/issues" + }, + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + }, + "devDependencies": { + "@types/lodash.escaperegexp": "4.1.6", + "@types/lodash.groupby": "4.6.6", + "@types/lodash.isfunction": "3.0.6", + "@types/lodash.isnil": "4.0.6", + "@types/lodash.isundefined": "3.0.6", + "@types/lodash.partition": "4.6.6", + "@types/lodash.uniq": "4.5.6", + "@types/sinon": "9.0.9", + "lodash.partition": "4.6.0", + "sinon": "9.2.1" + }, + "gitHead": "3dc859edb19924b315051e4c87d6273808a0de73" +} diff --git a/node_backend/node_modules/@types/node/LICENSE b/node_backend/node_modules/@types/node/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..9e841e7a26e4eb057b24511e7b92d42b257a80e5 --- /dev/null +++ b/node_backend/node_modules/@types/node/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_backend/node_modules/@types/node/README.md b/node_backend/node_modules/@types/node/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4685d19bf9612a86b53185e95355dccaa9bedf56 --- /dev/null +++ b/node_backend/node_modules/@types/node/README.md @@ -0,0 +1,16 @@ +# Installation +> `npm install --save @types/node` + +# Summary +This package contains type definitions for Node.js (https://nodejs.org/). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node/v14. + +### Additional Details + * Last updated: Sat, 23 Sep 2023 20:38:33 GMT + * Dependencies: none + * Global values: `AbortController`, `AbortSignal`, `Buffer`, `__dirname`, `__filename`, `clearImmediate`, `clearInterval`, `clearTimeout`, `console`, `exports`, `global`, `module`, `process`, `queueMicrotask`, `require`, `setImmediate`, `setInterval`, `setTimeout` + +# Credits +These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [DefinitelyTyped](https://github.com/DefinitelyTyped), [Alberto Schiabel](https://github.com/jkomyno), [Alvis HT Tang](https://github.com/alvis), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [Chigozirim C.](https://github.com/smac89), [David Junger](https://github.com/touffy), [Deividas Bakanas](https://github.com/DeividasBakanas), [Eugene Y. Q. Shen](https://github.com/eyqs), [Hannes Magnusson](https://github.com/Hannes-Magnusson-CK), [Hoàng Văn Khải](https://github.com/KSXGitHub), [Huw](https://github.com/hoo29), [Kelvin Jin](https://github.com/kjin), [Klaus Meinhardt](https://github.com/ajafff), [Lishude](https://github.com/islishude), [Mariusz Wiktorczyk](https://github.com/mwiktorczyk), [Mohsen Azimi](https://github.com/mohsen1), [Nicolas Even](https://github.com/n-e), [Nikita Galkin](https://github.com/galkin), [Parambir Singh](https://github.com/parambirs), [Sebastian Silbermann](https://github.com/eps1lon), [Seth Westphal](https://github.com/westy92), [Simon Schick](https://github.com/SimonSchick), [Thomas den Hollander](https://github.com/ThomasdenH), [Wilco Bakker](https://github.com/WilcoBakker), [wwwy3y3](https://github.com/wwwy3y3), [Samuel Ainsworth](https://github.com/samuela), [Kyle Uehlein](https://github.com/kuehlein), [Thanik Bhongbhibhat](https://github.com/bhongy), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [Yongsheng Zhang](https://github.com/ZYSzys), [Bond](https://github.com/bondz), and [Linus Unnebäck](https://github.com/LinusU). diff --git a/node_backend/node_modules/@types/node/assert.d.ts b/node_backend/node_modules/@types/node/assert.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e1d8d92763a56a15c0206e0e0d7fd64966726a58 --- /dev/null +++ b/node_backend/node_modules/@types/node/assert.d.ts @@ -0,0 +1,130 @@ +declare module "assert" { + /** An alias of `assert.ok()`. */ + function assert(value: any, message?: string | Error): asserts value; + namespace assert { + class AssertionError extends Error { + actual: any; + expected: any; + operator: string; + generatedMessage: boolean; + code: "ERR_ASSERTION"; + + constructor(options?: { + /** If provided, the error message is set to this value. */ + message?: string | undefined; + /** The `actual` property on the error instance. */ + actual?: any; + /** The `expected` property on the error instance. */ + expected?: any; + /** The `operator` property on the error instance. */ + operator?: string | undefined; + /** If provided, the generated stack trace omits frames before this function. */ + // tslint:disable-next-line:ban-types + stackStartFn?: Function | undefined; + }); + } + + class CallTracker { + calls(exact?: number): () => void; + calls any>(fn?: Func, exact?: number): Func; + report(): CallTrackerReportInformation[]; + verify(): void; + } + interface CallTrackerReportInformation { + message: string; + /** The actual number of times the function was called. */ + actual: number; + /** The number of times the function was expected to be called. */ + expected: number; + /** The name of the function that is wrapped. */ + operator: string; + /** A stack trace of the function. */ + stack: object; + } + + type AssertPredicate = RegExp | (new() => object) | ((thrown: any) => boolean) | object | Error; + + function fail(message?: string | Error): never; + /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */ + function fail( + actual: any, + expected: any, + message?: string | Error, + operator?: string, + // tslint:disable-next-line:ban-types + stackStartFn?: Function, + ): never; + function ok(value: any, message?: string | Error): asserts value; + /** @deprecated since v9.9.0 - use strictEqual() instead. */ + function equal(actual: any, expected: any, message?: string | Error): void; + /** @deprecated since v9.9.0 - use notStrictEqual() instead. */ + function notEqual(actual: any, expected: any, message?: string | Error): void; + /** @deprecated since v9.9.0 - use deepStrictEqual() instead. */ + function deepEqual(actual: any, expected: any, message?: string | Error): void; + /** @deprecated since v9.9.0 - use notDeepStrictEqual() instead. */ + function notDeepEqual(actual: any, expected: any, message?: string | Error): void; + function strictEqual(actual: any, expected: T, message?: string | Error): asserts actual is T; + function notStrictEqual(actual: any, expected: any, message?: string | Error): void; + function deepStrictEqual(actual: any, expected: T, message?: string | Error): asserts actual is T; + function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void; + + function throws(block: () => any, message?: string | Error): void; + function throws(block: () => any, error: AssertPredicate, message?: string | Error): void; + function doesNotThrow(block: () => any, message?: string | Error): void; + function doesNotThrow(block: () => any, error: AssertPredicate, message?: string | Error): void; + + function ifError(value: any): asserts value is null | undefined; + + function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise; + function rejects( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: string | Error, + ): Promise; + function doesNotReject(block: (() => Promise) | Promise, message?: string | Error): Promise; + function doesNotReject( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: string | Error, + ): Promise; + + function match(value: string, regExp: RegExp, message?: string | Error): void; + function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void; + + const strict: + & Omit< + typeof assert, + | "equal" + | "notEqual" + | "deepEqual" + | "notDeepEqual" + | "ok" + | "strictEqual" + | "deepStrictEqual" + | "ifError" + | "strict" + > + & { + (value: any, message?: string | Error): asserts value; + equal: typeof strictEqual; + notEqual: typeof notStrictEqual; + deepEqual: typeof deepStrictEqual; + notDeepEqual: typeof notDeepStrictEqual; + + // Mapped types and assertion functions are incompatible? + // TS2775: Assertions require every name in the call target + // to be declared with an explicit type annotation. + ok: typeof ok; + strictEqual: typeof strictEqual; + deepStrictEqual: typeof deepStrictEqual; + ifError: typeof ifError; + strict: typeof strict; + }; + } + + export = assert; +} +declare module "node:assert" { + import assert = require("assert"); + export = assert; +} diff --git a/node_backend/node_modules/@types/node/async_hooks.d.ts b/node_backend/node_modules/@types/node/async_hooks.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ec1dad9d8da5decb16587253aa9d7550ac83d0ef --- /dev/null +++ b/node_backend/node_modules/@types/node/async_hooks.d.ts @@ -0,0 +1,237 @@ +/** + * Async Hooks module: https://nodejs.org/api/async_hooks.html + */ +declare module "async_hooks" { + /** + * Returns the asyncId of the current execution context. + */ + function executionAsyncId(): number; + + /** + * The resource representing the current execution. + * Useful to store data within the resource. + * + * Resource objects returned by `executionAsyncResource()` are most often internal + * Node.js handle objects with undocumented APIs. Using any functions or properties + * on the object is likely to crash your application and should be avoided. + * + * Using `executionAsyncResource()` in the top-level execution context will + * return an empty object as there is no handle or request object to use, + * but having an object representing the top-level can be helpful. + */ + function executionAsyncResource(): object; + + /** + * Returns the ID of the resource responsible for calling the callback that is currently being executed. + */ + function triggerAsyncId(): number; + + interface HookCallbacks { + /** + * Called when a class is constructed that has the possibility to emit an asynchronous event. + * @param asyncId a unique ID for the async resource + * @param type the type of the async resource + * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created + * @param resource reference to the resource representing the async operation, needs to be released during destroy + */ + init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void; + + /** + * When an asynchronous operation is initiated or completes a callback is called to notify the user. + * The before callback is called just before said callback is executed. + * @param asyncId the unique identifier assigned to the resource about to execute the callback. + */ + before?(asyncId: number): void; + + /** + * Called immediately after the callback specified in before is completed. + * @param asyncId the unique identifier assigned to the resource which has executed the callback. + */ + after?(asyncId: number): void; + + /** + * Called when a promise has resolve() called. This may not be in the same execution id + * as the promise itself. + * @param asyncId the unique id for the promise that was resolve()d. + */ + promiseResolve?(asyncId: number): void; + + /** + * Called after the resource corresponding to asyncId is destroyed + * @param asyncId a unique ID for the async resource + */ + destroy?(asyncId: number): void; + } + + interface AsyncHook { + /** + * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop. + */ + enable(): this; + + /** + * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled. + */ + disable(): this; + } + + /** + * Registers functions to be called for different lifetime events of each async operation. + * @param options the callbacks to register + * @return an AsyncHooks instance used for disabling and enabling hooks + */ + function createHook(options: HookCallbacks): AsyncHook; + + interface AsyncResourceOptions { + /** + * The ID of the execution context that created this async event. + * @default executionAsyncId() + */ + triggerAsyncId?: number | undefined; + + /** + * Disables automatic `emitDestroy` when the object is garbage collected. + * This usually does not need to be set (even if `emitDestroy` is called + * manually), unless the resource's `asyncId` is retrieved and the + * sensitive API's `emitDestroy` is called with it. + * @default false + */ + requireManualDestroy?: boolean | undefined; + } + + /** + * The class AsyncResource was designed to be extended by the embedder's async resources. + * Using this users can easily trigger the lifetime events of their own resources. + */ + class AsyncResource { + /** + * AsyncResource() is meant to be extended. Instantiating a + * new AsyncResource() also triggers init. If triggerAsyncId is omitted then + * async_hook.executionAsyncId() is used. + * @param type The type of async event. + * @param triggerAsyncId The ID of the execution context that created + * this async event (default: `executionAsyncId()`), or an + * AsyncResourceOptions object (since v9.3.0) + */ + constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions); + + /** + * Binds the given function to the current execution context. + * @param fn The function to bind to the current execution context. + * @param type An optional name to associate with the underlying `AsyncResource`. + */ + static bind any>( + fn: Func, + type?: string, + ): Func & { asyncResource: AsyncResource }; + + /** + * Binds the given function to execute to this `AsyncResource`'s scope. + * @param fn The function to bind to the current `AsyncResource`. + */ + bind any>(fn: Func): Func & { asyncResource: AsyncResource }; + + /** + * Call the provided function with the provided arguments in the + * execution context of the async resource. This will establish the + * context, trigger the AsyncHooks before callbacks, call the function, + * trigger the AsyncHooks after callbacks, and then restore the original + * execution context. + * @param fn The function to call in the execution context of this + * async resource. + * @param thisArg The receiver to be used for the function call. + * @param args Optional arguments to pass to the function. + */ + runInAsyncScope( + fn: (this: This, ...args: any[]) => Result, + thisArg?: This, + ...args: any[] + ): Result; + + /** + * Call AsyncHooks destroy callbacks. + */ + emitDestroy(): this; + + /** + * @return the unique ID assigned to this AsyncResource instance. + */ + asyncId(): number; + + /** + * @return the trigger ID for this AsyncResource instance. + */ + triggerAsyncId(): number; + } + + /** + * When having multiple instances of `AsyncLocalStorage`, they are independent + * from each other. It is safe to instantiate this class multiple times. + */ + class AsyncLocalStorage { + /** + * This method disables the instance of `AsyncLocalStorage`. All subsequent calls + * to `asyncLocalStorage.getStore()` will return `undefined` until + * `asyncLocalStorage.run()` is called again. + * + * When calling `asyncLocalStorage.disable()`, all current contexts linked to the + * instance will be exited. + * + * Calling `asyncLocalStorage.disable()` is required before the + * `asyncLocalStorage` can be garbage collected. This does not apply to stores + * provided by the `asyncLocalStorage`, as those objects are garbage collected + * along with the corresponding async resources. + * + * This method is to be used when the `asyncLocalStorage` is not in use anymore + * in the current process. + */ + disable(): void; + + /** + * This method returns the current store. If this method is called outside of an + * asynchronous context initialized by calling `asyncLocalStorage.run`, it will + * return `undefined`. + */ + getStore(): T | undefined; + + /** + * This methods runs a function synchronously within a context and return its + * return value. The store is not accessible outside of the callback function or + * the asynchronous operations created within the callback. + * + * Optionally, arguments can be passed to the function. They will be passed to the + * callback function. + * + * I the callback function throws an error, it will be thrown by `run` too. The + * stacktrace will not be impacted by this call and the context will be exited. + */ + // TODO: Apply generic vararg once available + run(store: T, callback: () => R): R; + run(store: T, callback: (...args: any[]) => R, ...args: any[]): R; + + /** + * This methods runs a function synchronously outside of a context and return its + * return value. The store is not accessible within the callback function or the + * asynchronous operations created within the callback. + * + * Optionally, arguments can be passed to the function. They will be passed to the + * callback function. + * + * If the callback function throws an error, it will be thrown by `exit` too. The + * stacktrace will not be impacted by this call and the context will be + * re-entered. + */ + // TODO: Apply generic vararg once available + exit(callback: (...args: any[]) => R, ...args: any[]): R; + + /** + * Calling `asyncLocalStorage.enterWith(store)` will transition into the context + * for the remainder of the current synchronous execution and will persist + * through any following asynchronous calls. + */ + enterWith(store: T): void; + } +} +declare module "node:async_hooks" { + export * from "async_hooks"; +} diff --git a/node_backend/node_modules/@types/node/buffer.d.ts b/node_backend/node_modules/@types/node/buffer.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..112b034142a4bec11de333a2f9c555e28d00f724 --- /dev/null +++ b/node_backend/node_modules/@types/node/buffer.d.ts @@ -0,0 +1,89 @@ +declare module "buffer" { + import { BinaryLike } from "node:crypto"; + export const INSPECT_MAX_BYTES: number; + export const kMaxLength: number; + export const kStringMaxLength: number; + export const constants: { + MAX_LENGTH: number; + MAX_STRING_LENGTH: number; + }; + const BuffType: typeof Buffer; + + export type TranscodeEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "latin1" | "binary"; + + export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer; + + export const SlowBuffer: { + /** @deprecated since v6.0.0, use `Buffer.allocUnsafeSlow()` */ + new(size: number): Buffer; + prototype: Buffer; + }; + /** + * @experimental + */ + export interface BlobOptions { + /** + * @default 'utf8' + */ + encoding?: BufferEncoding | undefined; + /** + * The Blob content-type. The intent is for `type` to convey + * the MIME media type of the data, however no validation of the type format + * is performed. + */ + type?: string | undefined; + } + /** + * A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) encapsulates immutable, raw data that can be safely shared across + * multiple worker threads. + * @since v14.18.0 + * @experimental + */ + export class Blob { + /** + * The total size of the `Blob` in bytes. + * @since v14.18.0 + */ + readonly size: number; + /** + * The content-type of the `Blob`. + * @since v14.18.0 + */ + readonly type: string; + /** + * Creates a new `Blob` object containing a concatenation of the given sources. + * + * {ArrayBuffer}, {TypedArray}, {DataView}, and {Buffer} sources are copied into + * the 'Blob' and can therefore be safely modified after the 'Blob' is created. + * + * String sources are also copied into the `Blob`. + */ + constructor(sources: Array, options?: BlobOptions); + /** + * Returns a promise that fulfills with an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) containing a copy of + * the `Blob` data. + * @since v14.18.0 + */ + arrayBuffer(): Promise; + /** + * Creates and returns a new `Blob` containing a subset of this `Blob` objects + * data. The original `Blob` is not altered. + * @since v14.18.0 + * @param start The starting index. + * @param end The ending index. + * @param type The content-type for the new `Blob` + */ + slice(start?: number, end?: number, type?: string): Blob; + /** + * Returns a promise that fulfills with the contents of the `Blob` decoded as a + * UTF-8 string. + * @since v14.18.0 + */ + text(): Promise; + } + + export { BuffType as Buffer }; +} +declare module "node:buffer" { + export * from "buffer"; +} diff --git a/node_backend/node_modules/@types/node/child_process.d.ts b/node_backend/node_modules/@types/node/child_process.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e86922ba9f090c8635adfa6e1383c40306792c2b --- /dev/null +++ b/node_backend/node_modules/@types/node/child_process.d.ts @@ -0,0 +1,682 @@ +declare module "child_process" { + import { BaseEncodingOptions } from "fs"; + import * as events from "events"; + import * as net from "net"; + import { Pipe, Readable, Stream, Writable } from "stream"; + + type Serializable = string | object | number | boolean; + type SendHandle = net.Socket | net.Server; + + interface ChildProcess extends events.EventEmitter { + stdin: Writable | null; + stdout: Readable | null; + stderr: Readable | null; + readonly channel?: Pipe | null | undefined; + readonly stdio: [ + Writable | null, // stdin + Readable | null, // stdout + Readable | null, // stderr + Readable | Writable | null | undefined, // extra + Readable | Writable | null | undefined, // extra + ]; + readonly killed: boolean; + readonly pid: number; + readonly connected: boolean; + readonly exitCode: number | null; + readonly signalCode: NodeJS.Signals | null; + readonly spawnargs: string[]; + readonly spawnfile: string; + kill(signal?: NodeJS.Signals | number): boolean; + send(message: Serializable, callback?: (error: Error | null) => void): boolean; + send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean; + send( + message: Serializable, + sendHandle?: SendHandle, + options?: MessageOptions, + callback?: (error: Error | null) => void, + ): boolean; + disconnect(): void; + unref(): void; + ref(): void; + + /** + * events.EventEmitter + * 1. close + * 2. disconnect + * 3. error + * 4. exit + * 5. message + */ + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: "disconnect", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: "disconnect"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "exit", code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: "message", message: Serializable, sendHandle: SendHandle): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: "disconnect", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: "disconnect", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: "disconnect", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "close", + listener: (code: number | null, signal: NodeJS.Signals | null) => void, + ): this; + prependOnceListener(event: "disconnect", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "exit", + listener: (code: number | null, signal: NodeJS.Signals | null) => void, + ): this; + prependOnceListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + } + + // return this object when stdio option is undefined or not specified + interface ChildProcessWithoutNullStreams extends ChildProcess { + stdin: Writable; + stdout: Readable; + stderr: Readable; + readonly stdio: [ + Writable, // stdin + Readable, // stdout + Readable, // stderr + Readable | Writable | null | undefined, // extra, no modification + Readable | Writable | null | undefined, // extra, no modification + ]; + } + + // return this object when stdio option is a tuple of 3 + interface ChildProcessByStdio< + I extends null | Writable, + O extends null | Readable, + E extends null | Readable, + > extends ChildProcess { + stdin: I; + stdout: O; + stderr: E; + readonly stdio: [ + I, + O, + E, + Readable | Writable | null | undefined, // extra, no modification + Readable | Writable | null | undefined, // extra, no modification + ]; + } + + interface MessageOptions { + keepOpen?: boolean | undefined; + } + + type StdioOptions = + | "pipe" + | "ignore" + | "inherit" + | Array<("pipe" | "ipc" | "ignore" | "inherit" | Stream | number | null | undefined)>; + + type SerializationType = "json" | "advanced"; + + interface MessagingOptions { + /** + * Specify the kind of serialization used for sending messages between processes. + * @default 'json' + */ + serialization?: SerializationType | undefined; + } + + interface ProcessEnvOptions { + uid?: number | undefined; + gid?: number | undefined; + cwd?: string | undefined; + env?: NodeJS.ProcessEnv | undefined; + } + + interface CommonOptions extends ProcessEnvOptions { + /** + * @default false + */ + windowsHide?: boolean | undefined; + /** + * @default 0 + */ + timeout?: number | undefined; + } + + interface CommonSpawnOptions extends CommonOptions, MessagingOptions { + argv0?: string | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + shell?: boolean | string | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + + interface SpawnOptions extends CommonSpawnOptions { + detached?: boolean | undefined; + } + + interface SpawnOptionsWithoutStdio extends SpawnOptions { + stdio?: "pipe" | Array | undefined; + } + + type StdioNull = "inherit" | "ignore" | Stream; + type StdioPipe = undefined | null | "pipe"; + + interface SpawnOptionsWithStdioTuple< + Stdin extends StdioNull | StdioPipe, + Stdout extends StdioNull | StdioPipe, + Stderr extends StdioNull | StdioPipe, + > extends SpawnOptions { + stdio: [Stdin, Stdout, Stderr]; + } + + // overloads of spawn without 'args' + function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams; + + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + + function spawn(command: string, options: SpawnOptions): ChildProcess; + + // overloads of spawn with 'args' + function spawn( + command: string, + args?: ReadonlyArray, + options?: SpawnOptionsWithoutStdio, + ): ChildProcessWithoutNullStreams; + + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + + function spawn(command: string, args: ReadonlyArray, options: SpawnOptions): ChildProcess; + + interface ExecOptions extends CommonOptions { + shell?: string | undefined; + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + } + + interface ExecOptionsWithStringEncoding extends ExecOptions { + encoding: BufferEncoding; + } + + interface ExecOptionsWithBufferEncoding extends ExecOptions { + encoding: BufferEncoding | null; // specify `null`. + } + + interface ExecException extends Error { + cmd?: string | undefined; + killed?: boolean | undefined; + code?: number | undefined; + signal?: NodeJS.Signals | undefined; + } + + // no `options` definitely means stdout/stderr are `string`. + function exec( + command: string, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function exec( + command: string, + options: { encoding: "buffer" | null } & ExecOptions, + callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function exec( + command: string, + options: { encoding: BufferEncoding } & ExecOptions, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function exec( + command: string, + options: { encoding: BufferEncoding } & ExecOptions, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function exec( + command: string, + options: ExecOptions, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function exec( + command: string, + options: (BaseEncodingOptions & ExecOptions) | undefined | null, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + + interface PromiseWithChild extends Promise { + child: ChildProcess; + } + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace exec { + function __promisify__(command: string): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + command: string, + options: { encoding: "buffer" | null } & ExecOptions, + ): PromiseWithChild<{ stdout: Buffer; stderr: Buffer }>; + function __promisify__( + command: string, + options: { encoding: BufferEncoding } & ExecOptions, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + command: string, + options: ExecOptions, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + command: string, + options?: (BaseEncodingOptions & ExecOptions) | null, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + } + + interface ExecFileOptions extends CommonOptions { + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + windowsVerbatimArguments?: boolean | undefined; + shell?: boolean | string | undefined; + } + interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { + encoding: "buffer" | null; + } + interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + type ExecFileException = + & Omit + & Omit + & { code?: string | number | undefined | null }; + + function execFile(file: string): ChildProcess; + function execFile(file: string, options: (BaseEncodingOptions & ExecFileOptions) | undefined | null): ChildProcess; + function execFile(file: string, args?: ReadonlyArray | null): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + ): ChildProcess; + + // no `options` definitely means stdout/stderr are `string`. + function execFile( + file: string, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function execFile( + file: string, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function execFile( + file: string, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function execFile( + file: string, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function execFile( + file: string, + options: ExecFileOptions, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function execFile( + file: string, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + callback: + | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) + | undefined + | null, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + callback: + | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) + | undefined + | null, + ): ChildProcess; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace execFile { + function __promisify__(file: string): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithBufferEncoding, + ): PromiseWithChild<{ stdout: Buffer; stderr: Buffer }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + ): PromiseWithChild<{ stdout: Buffer; stderr: Buffer }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithStringEncoding, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithOtherEncoding, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + function __promisify__( + file: string, + options: ExecFileOptions, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + } + + interface ForkOptions extends ProcessEnvOptions, MessagingOptions { + execPath?: string | undefined; + execArgv?: string[] | undefined; + silent?: boolean | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + detached?: boolean | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + function fork(modulePath: string, options?: ForkOptions): ChildProcess; + function fork(modulePath: string, args?: ReadonlyArray, options?: ForkOptions): ChildProcess; + + interface SpawnSyncOptions extends CommonSpawnOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + killSignal?: NodeJS.Signals | number | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | "buffer" | null | undefined; + } + interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { + encoding: BufferEncoding; + } + interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { + encoding?: "buffer" | null | undefined; + } + interface SpawnSyncReturns { + pid: number; + output: Array; + stdout: T; + stderr: T; + status: number | null; + signal: NodeJS.Signals | null; + error?: Error | undefined; + } + function spawnSync(command: string): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; + function spawnSync( + command: string, + args?: ReadonlyArray, + options?: SpawnSyncOptionsWithStringEncoding, + ): SpawnSyncReturns; + function spawnSync( + command: string, + args?: ReadonlyArray, + options?: SpawnSyncOptionsWithBufferEncoding, + ): SpawnSyncReturns; + function spawnSync( + command: string, + args?: ReadonlyArray, + options?: SpawnSyncOptions, + ): SpawnSyncReturns; + + interface ExecSyncOptions extends CommonOptions { + input?: string | Uint8Array | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + shell?: string | undefined; + killSignal?: NodeJS.Signals | number | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | "buffer" | null | undefined; + } + interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { + encoding: BufferEncoding; + } + interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { + encoding?: "buffer" | null | undefined; + } + function execSync(command: string): Buffer; + function execSync(command: string, options: ExecSyncOptionsWithStringEncoding): string; + function execSync(command: string, options: ExecSyncOptionsWithBufferEncoding): Buffer; + function execSync(command: string, options?: ExecSyncOptions): string | Buffer; + + interface ExecFileSyncOptions extends CommonOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + killSignal?: NodeJS.Signals | number | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | undefined; + shell?: boolean | string | undefined; + } + interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; + } + interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; // specify `null`. + } + function execFileSync(command: string): Buffer; + function execFileSync(command: string, options: ExecFileSyncOptionsWithStringEncoding): string; + function execFileSync(command: string, options: ExecFileSyncOptionsWithBufferEncoding): Buffer; + function execFileSync(command: string, options?: ExecFileSyncOptions): string | Buffer; + function execFileSync(command: string, args: ReadonlyArray): Buffer; + function execFileSync( + command: string, + args: ReadonlyArray, + options: ExecFileSyncOptionsWithStringEncoding, + ): string; + function execFileSync( + command: string, + args: ReadonlyArray, + options: ExecFileSyncOptionsWithBufferEncoding, + ): Buffer; + function execFileSync( + command: string, + args?: ReadonlyArray, + options?: ExecFileSyncOptions, + ): string | Buffer; +} +declare module "node:child_process" { + export * from "child_process"; +} diff --git a/node_backend/node_modules/@types/node/cluster.d.ts b/node_backend/node_modules/@types/node/cluster.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..29eb9841a1f12e7a25f932cd35938e99d1b490a6 --- /dev/null +++ b/node_backend/node_modules/@types/node/cluster.d.ts @@ -0,0 +1,300 @@ +declare module "cluster" { + import * as child from "child_process"; + import EventEmitter = require("events"); + import * as net from "net"; + + // interfaces + type SerializationType = "json" | "advanced"; + interface ClusterSettings { + execArgv?: string[] | undefined; // default: process.execArgv + exec?: string | undefined; + args?: string[] | undefined; + silent?: boolean | undefined; + stdio?: any[] | undefined; + uid?: number | undefined; + gid?: number | undefined; + inspectPort?: number | (() => number) | undefined; + serialization?: SerializationType | undefined; + cwd?: string | undefined; + windowsHide?: boolean | undefined; + } + + interface Address { + address: string; + port: number; + addressType: number | "udp4" | "udp6"; // 4, 6, -1, "udp4", "udp6" + } + + class Worker extends EventEmitter { + id: number; + process: child.ChildProcess; + send( + message: child.Serializable, + sendHandle?: child.SendHandle, + callback?: (error: Error | null) => void, + ): boolean; + kill(signal?: string): void; + destroy(signal?: string): void; + disconnect(): void; + isConnected(): boolean; + isDead(): boolean; + exitedAfterDisconnect: boolean; + + /** + * events.EventEmitter + * 1. disconnect + * 2. error + * 3. exit + * 4. listening + * 5. message + * 6. online + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "disconnect", listener: () => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "exit", listener: (code: number, signal: string) => void): this; + addListener(event: "listening", listener: (address: Address) => void): this; + addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: "online", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "disconnect"): boolean; + emit(event: "error", error: Error): boolean; + emit(event: "exit", code: number, signal: string): boolean; + emit(event: "listening", address: Address): boolean; + emit(event: "message", message: any, handle: net.Socket | net.Server): boolean; + emit(event: "online"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "disconnect", listener: () => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "exit", listener: (code: number, signal: string) => void): this; + on(event: "listening", listener: (address: Address) => void): this; + on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: "online", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "disconnect", listener: () => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "exit", listener: (code: number, signal: string) => void): this; + once(event: "listening", listener: (address: Address) => void): this; + once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: "online", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "disconnect", listener: () => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependListener(event: "listening", listener: (address: Address) => void): this; + prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependListener(event: "online", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "disconnect", listener: () => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependOnceListener(event: "listening", listener: (address: Address) => void): this; + prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener(event: "online", listener: () => void): this; + } + + interface Cluster extends EventEmitter { + Worker: Worker; + disconnect(callback?: () => void): void; + fork(env?: any): Worker; + isMaster: boolean; + isWorker: boolean; + schedulingPolicy: number; + settings: ClusterSettings; + setupMaster(settings?: ClusterSettings): void; + worker?: Worker | undefined; + workers?: NodeJS.Dict | undefined; + + readonly SCHED_NONE: number; + readonly SCHED_RR: number; + + /** + * events.EventEmitter + * 1. disconnect + * 2. exit + * 3. fork + * 4. listening + * 5. message + * 6. online + * 7. setup + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "disconnect", listener: (worker: Worker) => void): this; + addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + addListener(event: "fork", listener: (worker: Worker) => void): this; + addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + addListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: "online", listener: (worker: Worker) => void): this; + addListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "disconnect", worker: Worker): boolean; + emit(event: "exit", worker: Worker, code: number, signal: string): boolean; + emit(event: "fork", worker: Worker): boolean; + emit(event: "listening", worker: Worker, address: Address): boolean; + emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; + emit(event: "online", worker: Worker): boolean; + emit(event: "setup", settings: ClusterSettings): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "disconnect", listener: (worker: Worker) => void): this; + on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + on(event: "fork", listener: (worker: Worker) => void): this; + on(event: "listening", listener: (worker: Worker, address: Address) => void): this; + on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: "online", listener: (worker: Worker) => void): this; + on(event: "setup", listener: (settings: ClusterSettings) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "disconnect", listener: (worker: Worker) => void): this; + once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + once(event: "fork", listener: (worker: Worker) => void): this; + once(event: "listening", listener: (worker: Worker, address: Address) => void): this; + once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: "online", listener: (worker: Worker) => void): this; + once(event: "setup", listener: (settings: ClusterSettings) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "disconnect", listener: (worker: Worker) => void): this; + prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + prependListener(event: "fork", listener: (worker: Worker) => void): this; + prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + prependListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; // the handle is a net.Socket or net.Server object, or undefined. + prependListener(event: "online", listener: (worker: Worker) => void): this; + prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this; + prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + prependOnceListener(event: "fork", listener: (worker: Worker) => void): this; + prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; + prependOnceListener(event: "online", listener: (worker: Worker) => void): this; + prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + } + + const SCHED_NONE: number; + const SCHED_RR: number; + + function disconnect(callback?: () => void): void; + function fork(env?: any): Worker; + const isMaster: boolean; + const isWorker: boolean; + let schedulingPolicy: number; + const settings: ClusterSettings; + function setupMaster(settings?: ClusterSettings): void; + const worker: Worker; + const workers: NodeJS.Dict; + + /** + * events.EventEmitter + * 1. disconnect + * 2. exit + * 3. fork + * 4. listening + * 5. message + * 6. online + * 7. setup + */ + function addListener(event: string, listener: (...args: any[]) => void): Cluster; + function addListener(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; + function addListener(event: "fork", listener: (worker: Worker) => void): Cluster; + function addListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + // the handle is a net.Socket or net.Server object, or undefined. + function addListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; + function addListener(event: "online", listener: (worker: Worker) => void): Cluster; + function addListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function emit(event: string | symbol, ...args: any[]): boolean; + function emit(event: "disconnect", worker: Worker): boolean; + function emit(event: "exit", worker: Worker, code: number, signal: string): boolean; + function emit(event: "fork", worker: Worker): boolean; + function emit(event: "listening", worker: Worker, address: Address): boolean; + function emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; + function emit(event: "online", worker: Worker): boolean; + function emit(event: "setup", settings: ClusterSettings): boolean; + + function on(event: string, listener: (...args: any[]) => void): Cluster; + function on(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; + function on(event: "fork", listener: (worker: Worker) => void): Cluster; + function on(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + function on( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; // the handle is a net.Socket or net.Server object, or undefined. + function on(event: "online", listener: (worker: Worker) => void): Cluster; + function on(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function once(event: string, listener: (...args: any[]) => void): Cluster; + function once(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; + function once(event: "fork", listener: (worker: Worker) => void): Cluster; + function once(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + function once( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; // the handle is a net.Socket or net.Server object, or undefined. + function once(event: "online", listener: (worker: Worker) => void): Cluster; + function once(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function removeListener(event: string, listener: (...args: any[]) => void): Cluster; + function removeAllListeners(event?: string): Cluster; + function setMaxListeners(n: number): Cluster; + function getMaxListeners(): number; + function listeners(event: string): Function[]; + function listenerCount(type: string): number; + + function prependListener(event: string, listener: (...args: any[]) => void): Cluster; + function prependListener(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; + function prependListener(event: "fork", listener: (worker: Worker) => void): Cluster; + function prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + // the handle is a net.Socket or net.Server object, or undefined. + function prependListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; + function prependListener(event: "online", listener: (worker: Worker) => void): Cluster; + function prependListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function prependOnceListener(event: string, listener: (...args: any[]) => void): Cluster; + function prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function prependOnceListener( + event: "exit", + listener: (worker: Worker, code: number, signal: string) => void, + ): Cluster; + function prependOnceListener(event: "fork", listener: (worker: Worker) => void): Cluster; + function prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + // the handle is a net.Socket or net.Server object, or undefined. + function prependOnceListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; + function prependOnceListener(event: "online", listener: (worker: Worker) => void): Cluster; + function prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function eventNames(): string[]; +} +declare module "node:cluster" { + export * from "cluster"; +} diff --git a/node_backend/node_modules/@types/node/console.d.ts b/node_backend/node_modules/@types/node/console.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..016f64625ddb4a369a2181f91e7c511da355ae27 --- /dev/null +++ b/node_backend/node_modules/@types/node/console.d.ts @@ -0,0 +1,142 @@ +declare module "console" { + import console = require("node:console"); + export = console; +} +declare module "node:console" { + import { InspectOptions } from "util"; + + global { + // This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build + interface Console { + Console: NodeJS.ConsoleConstructor; + /** + * A simple assertion test that verifies whether `value` is truthy. + * If it is not, an `AssertionError` is thrown. + * If provided, the error `message` is formatted using `util.format()` and used as the error message. + */ + assert(value: any, message?: string, ...optionalParams: any[]): void; + /** + * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the TTY. + * When `stdout` is not a TTY, this method does nothing. + */ + clear(): void; + /** + * Maintains an internal counter specific to `label` and outputs to `stdout` the number of times `console.count()` has been called with the given `label`. + */ + count(label?: string): void; + /** + * Resets the internal counter specific to `label`. + */ + countReset(label?: string): void; + /** + * The `console.debug()` function is an alias for {@link console.log}. + */ + debug(message?: any, ...optionalParams: any[]): void; + /** + * Uses {@link util.inspect} on `obj` and prints the resulting string to `stdout`. + * This function bypasses any custom `inspect()` function defined on `obj`. + */ + dir(obj: any, options?: InspectOptions): void; + /** + * This method calls {@link console.log} passing it the arguments received. Please note that this method does not produce any XML formatting + */ + dirxml(...data: any[]): void; + /** + * Prints to `stderr` with newline. + */ + error(message?: any, ...optionalParams: any[]): void; + /** + * Increases indentation of subsequent lines by two spaces. + * If one or more `label`s are provided, those are printed first without the additional indentation. + */ + group(...label: any[]): void; + /** + * The `console.groupCollapsed()` function is an alias for {@link console.group}. + */ + groupCollapsed(...label: any[]): void; + /** + * Decreases indentation of subsequent lines by two spaces. + */ + groupEnd(): void; + /** + * The {@link console.info} function is an alias for {@link console.log}. + */ + info(message?: any, ...optionalParams: any[]): void; + /** + * Prints to `stdout` with newline. + */ + log(message?: any, ...optionalParams: any[]): void; + /** + * This method does not display anything unless used in the inspector. + * Prints to `stdout` the array `array` formatted as a table. + */ + table(tabularData: any, properties?: ReadonlyArray): void; + /** + * Starts a timer that can be used to compute the duration of an operation. Timers are identified by a unique `label`. + */ + time(label?: string): void; + /** + * Stops a timer that was previously started by calling {@link console.time} and prints the result to `stdout`. + */ + timeEnd(label?: string): void; + /** + * For a timer that was previously started by calling {@link console.time}, prints the elapsed time and other `data` arguments to `stdout`. + */ + timeLog(label?: string, ...data: any[]): void; + /** + * Prints to `stderr` the string 'Trace :', followed by the {@link util.format} formatted message and stack trace to the current position in the code. + */ + trace(message?: any, ...optionalParams: any[]): void; + /** + * The {@link console.warn} function is an alias for {@link console.error}. + */ + warn(message?: any, ...optionalParams: any[]): void; + + // --- Inspector mode only --- + /** + * This method does not display anything unless used in the inspector. + * Starts a JavaScript CPU profile with an optional label. + */ + profile(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector. + */ + profileEnd(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Adds an event with the label `label` to the Timeline panel of the inspector. + */ + timeStamp(label?: string): void; + } + + var console: Console; + + namespace NodeJS { + interface ConsoleConstructorOptions { + stdout: WritableStream; + stderr?: WritableStream | undefined; + ignoreErrors?: boolean | undefined; + colorMode?: boolean | "auto" | undefined; + inspectOptions?: InspectOptions | undefined; + /** + * Set group indentation + * @default 2 + */ + groupIndentation?: number | undefined; + } + + interface ConsoleConstructor { + prototype: Console; + new(stdout: WritableStream, stderr?: WritableStream, ignoreErrors?: boolean): Console; + new(options: ConsoleConstructorOptions): Console; + } + + interface Global { + console: typeof console; + } + } + } + + export = console; +} diff --git a/node_backend/node_modules/@types/node/constants.d.ts b/node_backend/node_modules/@types/node/constants.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..879342390bf0fc0e02485512b7016b254158e9a9 --- /dev/null +++ b/node_backend/node_modules/@types/node/constants.d.ts @@ -0,0 +1,19 @@ +/** @deprecated since v6.3.0 - use constants property exposed by the relevant module instead. */ +declare module "constants" { + import { constants as osConstants, SignalConstants } from "os"; + import { constants as cryptoConstants } from "crypto"; + import { constants as fsConstants } from "fs"; + + const exp: + & typeof osConstants.errno + & typeof osConstants.priority + & SignalConstants + & typeof cryptoConstants + & typeof fsConstants; + export = exp; +} + +declare module "node:constants" { + import constants = require("constants"); + export = constants; +} diff --git a/node_backend/node_modules/@types/node/crypto.d.ts b/node_backend/node_modules/@types/node/crypto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..96eb3dd7b05d29ba58ad4a5f08377fcc4c8fd68a --- /dev/null +++ b/node_backend/node_modules/@types/node/crypto.d.ts @@ -0,0 +1,1287 @@ +declare module "crypto" { + import * as stream from "stream"; + + interface Certificate { + /** + * @param spkac + * @returns The challenge component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportChallenge(spkac: BinaryLike): Buffer; + /** + * @param spkac + * @param encoding The encoding of the spkac string. + * @returns The public key component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportPublicKey(spkac: BinaryLike, encoding?: string): Buffer; + /** + * @param spkac + * @returns `true` if the given `spkac` data structure is valid, + * `false` otherwise. + */ + verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; + } + const Certificate: Certificate & { + /** @deprecated since v14.9.0 - Use static methods of `crypto.Certificate` instead. */ + new(): Certificate; + /** @deprecated since v14.9.0 - Use static methods of `crypto.Certificate` instead. */ + (): Certificate; + }; + + namespace constants { + // https://nodejs.org/dist/latest-v10.x/docs/api/crypto.html#crypto_crypto_constants + const OPENSSL_VERSION_NUMBER: number; + + /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */ + const SSL_OP_ALL: number; + /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; + /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_CIPHER_SERVER_PREFERENCE: number; + /** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */ + const SSL_OP_CISCO_ANYCONNECT: number; + /** Instructs OpenSSL to turn on cookie exchange. */ + const SSL_OP_COOKIE_EXCHANGE: number; + /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */ + const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; + /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */ + const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; + /** Instructs OpenSSL to always use the tmp_rsa key when performing RSA operations. */ + const SSL_OP_EPHEMERAL_RSA: number; + /** Allows initial connection to servers that do not support RI. */ + const SSL_OP_LEGACY_SERVER_CONNECT: number; + const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number; + const SSL_OP_MICROSOFT_SESS_ID_BUG: number; + /** Instructs OpenSSL to disable the workaround for a man-in-the-middle protocol-version vulnerability in the SSL 2.0 server implementation. */ + const SSL_OP_MSIE_SSLV2_RSA_PADDING: number; + const SSL_OP_NETSCAPE_CA_DN_BUG: number; + const SSL_OP_NETSCAPE_CHALLENGE_BUG: number; + const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number; + const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number; + /** Instructs OpenSSL to disable support for SSL/TLS compression. */ + const SSL_OP_NO_COMPRESSION: number; + const SSL_OP_NO_QUERY_MTU: number; + /** Instructs OpenSSL to always start a new session when performing renegotiation. */ + const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; + const SSL_OP_NO_SSLv2: number; + const SSL_OP_NO_SSLv3: number; + const SSL_OP_NO_TICKET: number; + const SSL_OP_NO_TLSv1: number; + const SSL_OP_NO_TLSv1_1: number; + const SSL_OP_NO_TLSv1_2: number; + const SSL_OP_PKCS1_CHECK_1: number; + const SSL_OP_PKCS1_CHECK_2: number; + /** Instructs OpenSSL to always create a new key when using temporary/ephemeral DH parameters. */ + const SSL_OP_SINGLE_DH_USE: number; + /** Instructs OpenSSL to always create a new key when using temporary/ephemeral ECDH parameters. */ + const SSL_OP_SINGLE_ECDH_USE: number; + const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number; + const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number; + const SSL_OP_TLS_BLOCK_PADDING_BUG: number; + const SSL_OP_TLS_D5_BUG: number; + /** Instructs OpenSSL to disable version rollback attack detection. */ + const SSL_OP_TLS_ROLLBACK_BUG: number; + + const ENGINE_METHOD_RSA: number; + const ENGINE_METHOD_DSA: number; + const ENGINE_METHOD_DH: number; + const ENGINE_METHOD_RAND: number; + const ENGINE_METHOD_EC: number; + const ENGINE_METHOD_CIPHERS: number; + const ENGINE_METHOD_DIGESTS: number; + const ENGINE_METHOD_PKEY_METHS: number; + const ENGINE_METHOD_PKEY_ASN1_METHS: number; + const ENGINE_METHOD_ALL: number; + const ENGINE_METHOD_NONE: number; + + const DH_CHECK_P_NOT_SAFE_PRIME: number; + const DH_CHECK_P_NOT_PRIME: number; + const DH_UNABLE_TO_CHECK_GENERATOR: number; + const DH_NOT_SUITABLE_GENERATOR: number; + + const ALPN_ENABLED: number; + + const RSA_PKCS1_PADDING: number; + const RSA_SSLV23_PADDING: number; + const RSA_NO_PADDING: number; + const RSA_PKCS1_OAEP_PADDING: number; + const RSA_X931_PADDING: number; + const RSA_PKCS1_PSS_PADDING: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */ + const RSA_PSS_SALTLEN_DIGEST: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */ + const RSA_PSS_SALTLEN_MAX_SIGN: number; + /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */ + const RSA_PSS_SALTLEN_AUTO: number; + + const POINT_CONVERSION_COMPRESSED: number; + const POINT_CONVERSION_UNCOMPRESSED: number; + const POINT_CONVERSION_HYBRID: number; + + /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */ + const defaultCoreCipherList: string; + /** Specifies the active default cipher list used by the current Node.js process (colon-separated values). */ + const defaultCipherList: string; + } + + interface HashOptions extends stream.TransformOptions { + /** + * For XOF hash functions such as `shake256`, the + * outputLength option can be used to specify the desired output length in bytes. + */ + outputLength?: number | undefined; + } + + /** @deprecated since v10.0.0 */ + const fips: boolean; + + function createHash(algorithm: string, options?: HashOptions): Hash; + function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac; + + // https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings + type BinaryToTextEncoding = "base64" | "base64url" | "hex"; + type CharacterEncoding = "utf8" | "utf-8" | "utf16le" | "latin1"; + type LegacyCharacterEncoding = "ascii" | "binary" | "ucs2" | "ucs-2"; + + type Encoding = BinaryToTextEncoding | CharacterEncoding | LegacyCharacterEncoding; + + type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid"; + + class Hash extends stream.Transform { + private constructor(); + copy(): Hash; + update(data: BinaryLike): Hash; + update(data: string, input_encoding: Encoding): Hash; + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + class Hmac extends stream.Transform { + private constructor(); + update(data: BinaryLike): Hmac; + update(data: string, input_encoding: Encoding): Hmac; + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + + type KeyObjectType = "secret" | "public" | "private"; + + interface KeyExportOptions { + type: "pkcs1" | "spki" | "pkcs8" | "sec1"; + format: T; + cipher?: string | undefined; + passphrase?: string | Buffer | undefined; + } + + class KeyObject { + private constructor(); + asymmetricKeyType?: KeyType | undefined; + /** + * For asymmetric keys, this property represents the size of the embedded key in + * bytes. This property is `undefined` for symmetric keys. + */ + asymmetricKeySize?: number | undefined; + export(options: KeyExportOptions<"pem">): string | Buffer; + export(options?: KeyExportOptions<"der">): Buffer; + symmetricKeySize?: number | undefined; + type: KeyObjectType; + } + + type CipherCCMTypes = "aes-128-ccm" | "aes-192-ccm" | "aes-256-ccm" | "chacha20-poly1305"; + type CipherGCMTypes = "aes-128-gcm" | "aes-192-gcm" | "aes-256-gcm"; + type CipherOCBTypes = "aes-128-ocb" | "aes-192-ocb" | "aes-256-ocb"; + + type BinaryLike = string | NodeJS.ArrayBufferView; + + type CipherKey = BinaryLike | KeyObject; + + interface CipherCCMOptions extends stream.TransformOptions { + authTagLength: number; + } + interface CipherGCMOptions extends stream.TransformOptions { + authTagLength?: number | undefined; + } + interface CipherOCBOptions extends stream.TransformOptions { + authTagLength: number; + } + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): CipherCCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): CipherGCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Cipher; + + function createCipheriv( + algorithm: CipherCCMTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherCCMOptions, + ): CipherCCM; + function createCipheriv( + algorithm: CipherOCBTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherOCBOptions, + ): CipherOCB; + function createCipheriv( + algorithm: CipherGCMTypes, + key: CipherKey, + iv: BinaryLike, + options?: CipherGCMOptions, + ): CipherGCM; + function createCipheriv( + algorithm: string, + key: CipherKey, + iv: BinaryLike | null, + options?: stream.TransformOptions, + ): Cipher; + + class Cipher extends stream.Transform { + private constructor(); + update(data: BinaryLike): Buffer; + update(data: string, input_encoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, input_encoding: undefined, output_encoding: Encoding): string; + update(data: string, input_encoding: Encoding | undefined, output_encoding: Encoding): string; + final(): Buffer; + final(output_encoding: BufferEncoding): string; + setAutoPadding(auto_padding?: boolean): this; + // getAuthTag(): Buffer; + // setAAD(buffer: NodeJS.ArrayBufferView): this; + } + interface CipherCCM extends Cipher { + setAAD(buffer: NodeJS.ArrayBufferView, options: { plaintextLength: number }): this; + getAuthTag(): Buffer; + } + interface CipherGCM extends Cipher { + setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this; + getAuthTag(): Buffer; + } + interface CipherOCB extends Cipher { + setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this; + getAuthTag(): Buffer; + } + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): DecipherCCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): DecipherGCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Decipher; + + function createDecipheriv( + algorithm: CipherCCMTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherCCMOptions, + ): DecipherCCM; + function createDecipheriv( + algorithm: CipherOCBTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherOCBOptions, + ): DecipherOCB; + function createDecipheriv( + algorithm: CipherGCMTypes, + key: CipherKey, + iv: BinaryLike, + options?: CipherGCMOptions, + ): DecipherGCM; + function createDecipheriv( + algorithm: string, + key: CipherKey, + iv: BinaryLike | null, + options?: stream.TransformOptions, + ): Decipher; + + class Decipher extends stream.Transform { + private constructor(); + update(data: NodeJS.ArrayBufferView): Buffer; + update(data: string, input_encoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, input_encoding: undefined, output_encoding: Encoding): string; + update(data: string, input_encoding: Encoding | undefined, output_encoding: Encoding): string; + final(): Buffer; + final(output_encoding: BufferEncoding): string; + setAutoPadding(auto_padding?: boolean): this; + // setAuthTag(tag: NodeJS.ArrayBufferView): this; + // setAAD(buffer: NodeJS.ArrayBufferView): this; + } + interface DecipherCCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD(buffer: NodeJS.ArrayBufferView, options: { plaintextLength: number }): this; + } + interface DecipherGCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this; + } + interface DecipherOCB extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this; + } + + interface PrivateKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: "pkcs1" | "pkcs8" | "sec1" | undefined; + passphrase?: string | Buffer | undefined; + } + + interface PublicKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: "pkcs1" | "spki" | undefined; + } + + function createPrivateKey(key: PrivateKeyInput | string | Buffer): KeyObject; + function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject): KeyObject; + function createSecretKey(key: NodeJS.ArrayBufferView): KeyObject; + + function createSign(algorithm: string, options?: stream.WritableOptions): Sign; + + type DSAEncoding = "der" | "ieee-p1363"; + + interface SigningOptions { + /** + * @see crypto.constants.RSA_PKCS1_PADDING + */ + padding?: number | undefined; + saltLength?: number | undefined; + dsaEncoding?: DSAEncoding | undefined; + } + + interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {} + interface SignKeyObjectInput extends SigningOptions { + key: KeyObject; + } + interface VerifyPublicKeyInput extends PublicKeyInput, SigningOptions {} + interface VerifyKeyObjectInput extends SigningOptions { + key: KeyObject; + } + + type KeyLike = string | Buffer | KeyObject; + + class Sign extends stream.Writable { + private constructor(); + + update(data: BinaryLike): Sign; + update(data: string, input_encoding: Encoding): Sign; + sign(private_key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput): Buffer; + sign( + private_key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + output_format: BinaryToTextEncoding, + ): string; + } + + function createVerify(algorithm: string, options?: stream.WritableOptions): Verify; + class Verify extends stream.Writable { + private constructor(); + + update(data: BinaryLike): Verify; + update(data: string, input_encoding: Encoding): Verify; + verify( + object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, + signature: NodeJS.ArrayBufferView, + ): boolean; + verify( + object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, + signature: string, + signature_format?: BinaryToTextEncoding, + ): boolean; + // https://nodejs.org/api/crypto.html#crypto_verifier_verify_object_signature_signature_format + // The signature field accepts a TypedArray type, but it is only available starting ES2017 + } + function createDiffieHellman(prime_length: number, generator?: number | NodeJS.ArrayBufferView): DiffieHellman; + function createDiffieHellman(prime: NodeJS.ArrayBufferView): DiffieHellman; + function createDiffieHellman(prime: string, prime_encoding: BinaryToTextEncoding): DiffieHellman; + function createDiffieHellman( + prime: string, + prime_encoding: BinaryToTextEncoding, + generator: number | NodeJS.ArrayBufferView, + ): DiffieHellman; + function createDiffieHellman( + prime: string, + prime_encoding: BinaryToTextEncoding, + generator: string, + generator_encoding: BinaryToTextEncoding, + ): DiffieHellman; + class DiffieHellman { + private constructor(); + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding): string; + computeSecret(otherPublicKey: NodeJS.ArrayBufferView, inputEncoding?: null, outputEncoding?: null): Buffer; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding, outputEncoding?: null): Buffer; + computeSecret( + otherPublicKey: NodeJS.ArrayBufferView, + inputEncoding: null, + outputEncoding: BinaryToTextEncoding, + ): string; + computeSecret( + other_public_key: string, + input_encoding: BinaryToTextEncoding, + output_encoding: BinaryToTextEncoding, + ): string; + getPrime(): Buffer; + getPrime(encoding: BinaryToTextEncoding): string; + getGenerator(): Buffer; + getGenerator(encoding: BinaryToTextEncoding): string; + getPublicKey(): Buffer; + getPublicKey(encoding: BinaryToTextEncoding): string; + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + setPublicKey(public_key: NodeJS.ArrayBufferView): void; + setPublicKey(public_key: string, encoding: BufferEncoding): void; + setPrivateKey(private_key: NodeJS.ArrayBufferView): void; + setPrivateKey(private_key: string, encoding: BufferEncoding): void; + verifyError: number; + } + /** + * The `DiffieHellmanGroup` class takes a well-known modp group as its argument. + * It works the same as `DiffieHellman`, except that it does not allow changing its keys after creation. + * In other words, it does not implement `setPublicKey()` or `setPrivateKey()` methods. + * + * ```js + * const { createDiffieHellmanGroup } = await import('node:crypto'); + * const dh = createDiffieHellmanGroup('modp1'); + * ``` + * The name (e.g. `'modp1'`) is taken from [RFC 2412](https://www.rfc-editor.org/rfc/rfc2412.txt) (modp1 and 2) and [RFC 3526](https://www.rfc-editor.org/rfc/rfc3526.txt): + * ```bash + * $ perl -ne 'print "$1\n" if /"(modp\d+)"/' src/node_crypto_groups.h + * modp1 # 768 bits + * modp2 # 1024 bits + * modp5 # 1536 bits + * modp14 # 2048 bits + * modp15 # etc. + * modp16 + * modp17 + * modp18 + * ``` + * @since v0.7.5 + */ + const DiffieHellmanGroup: DiffieHellmanGroupConstructor; + interface DiffieHellmanGroupConstructor { + new(name: string): DiffieHellmanGroup; + (name: string): DiffieHellmanGroup; + readonly prototype: DiffieHellmanGroup; + } + type DiffieHellmanGroup = Omit; + function getDiffieHellman(groupName: string): DiffieHellmanGroup; + /** + * An alias for {@link getDiffieHellman} + * @since v0.9.3 + */ + function createDiffieHellmanGroup(name: string): DiffieHellmanGroup; + function pbkdf2( + password: BinaryLike, + salt: BinaryLike, + iterations: number, + keylen: number, + digest: string, + callback: (err: Error | null, derivedKey: Buffer) => any, + ): void; + function pbkdf2Sync( + password: BinaryLike, + salt: BinaryLike, + iterations: number, + keylen: number, + digest: string, + ): Buffer; + + function randomBytes(size: number): Buffer; + function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + function pseudoRandomBytes(size: number): Buffer; + function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + + function randomInt(max: number): number; + function randomInt(min: number, max: number): number; + function randomInt(max: number, callback: (err: Error | null, value: number) => void): void; + function randomInt(min: number, max: number, callback: (err: Error | null, value: number) => void): void; + + function randomFillSync(buffer: T, offset?: number, size?: number): T; + function randomFill( + buffer: T, + callback: (err: Error | null, buf: T) => void, + ): void; + function randomFill( + buffer: T, + offset: number, + callback: (err: Error | null, buf: T) => void, + ): void; + function randomFill( + buffer: T, + offset: number, + size: number, + callback: (err: Error | null, buf: T) => void, + ): void; + + interface RandomUUIDOptions { + /** + * By default, to improve performance, + * Node.js will pre-emptively generate and persistently cache enough + * random data to generate up to 128 random UUIDs. To generate a UUID + * without using the cache, set `disableEntropyCache` to `true`. + * + * @default `false` + */ + disableEntropyCache?: boolean | undefined; + } + type UUID = `${string}-${string}-${string}-${string}-${string}`; + function randomUUID(options?: RandomUUIDOptions): UUID; + + interface ScryptOptions { + cost?: number | undefined; + blockSize?: number | undefined; + parallelization?: number | undefined; + N?: number | undefined; + r?: number | undefined; + p?: number | undefined; + maxmem?: number | undefined; + } + function scrypt( + password: BinaryLike, + salt: BinaryLike, + keylen: number, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + function scrypt( + password: BinaryLike, + salt: BinaryLike, + keylen: number, + options: ScryptOptions, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + function scryptSync(password: BinaryLike, salt: BinaryLike, keylen: number, options?: ScryptOptions): Buffer; + + interface RsaPublicKey { + key: KeyLike; + padding?: number | undefined; + } + interface RsaPrivateKey { + key: KeyLike; + passphrase?: string | undefined; + /** + * @default 'sha1' + */ + oaepHash?: string | undefined; + oaepLabel?: NodeJS.TypedArray | undefined; + padding?: number | undefined; + } + function publicEncrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + function publicDecrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + function privateDecrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + function privateEncrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + function getCiphers(): string[]; + function getCurves(): string[]; + function getFips(): 1 | 0; + /** + * Enables the FIPS compliant crypto provider in a FIPS-enabled Node.js build. Throws an error if FIPS mode is not available. + * @since v10.0.0 + * @param bool `true` to enable FIPS mode. + */ + function setFips(bool: boolean): void; + function getHashes(): string[]; + class ECDH { + private constructor(); + static convertKey( + key: BinaryLike, + curve: string, + inputEncoding?: BinaryToTextEncoding, + outputEncoding?: "latin1" | "hex" | "base64" | "base64url", + format?: "uncompressed" | "compressed" | "hybrid", + ): Buffer | string; + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + computeSecret(other_public_key: NodeJS.ArrayBufferView): Buffer; + computeSecret(other_public_key: string, input_encoding: BinaryToTextEncoding): Buffer; + computeSecret(other_public_key: NodeJS.ArrayBufferView, output_encoding: BinaryToTextEncoding): string; + computeSecret( + other_public_key: string, + input_encoding: BinaryToTextEncoding, + output_encoding: BinaryToTextEncoding, + ): string; + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + getPublicKey(): Buffer; + getPublicKey(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + setPrivateKey(private_key: NodeJS.ArrayBufferView): void; + setPrivateKey(private_key: string, encoding: BinaryToTextEncoding): void; + } + function createECDH(curve_name: string): ECDH; + function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean; + /** @deprecated since v10.0.0 */ + const DEFAULT_ENCODING: BufferEncoding; + + type KeyType = "rsa" | "dsa" | "ec" | "ed25519" | "ed448" | "x25519" | "x448"; + type KeyFormat = "pem" | "der"; + + interface BasePrivateKeyEncodingOptions { + format: T; + cipher?: string | undefined; + passphrase?: string | undefined; + } + + interface KeyPairKeyObjectResult { + publicKey: KeyObject; + privateKey: KeyObject; + } + + interface ED25519KeyPairKeyObjectOptions { + /** + * No options. + */ + } + + interface ED448KeyPairKeyObjectOptions { + /** + * No options. + */ + } + + interface X25519KeyPairKeyObjectOptions { + /** + * No options. + */ + } + + interface X448KeyPairKeyObjectOptions { + /** + * No options. + */ + } + + interface ECKeyPairKeyObjectOptions { + /** + * Name of the curve to use. + */ + namedCurve: string; + } + + interface RSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + + /** + * @default 0x10001 + */ + publicExponent?: number | undefined; + } + + interface DSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + + /** + * Size of q in bits + */ + divisorLength: number; + } + + interface RSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * @default 0x10001 + */ + publicExponent?: number | undefined; + + publicKeyEncoding: { + type: "pkcs1" | "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs1" | "pkcs8"; + }; + } + + interface DSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Size of q in bits + */ + divisorLength: number; + + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface ECKeyPairOptions { + /** + * Name of the curve to use. + */ + namedCurve: string; + + publicKeyEncoding: { + type: "pkcs1" | "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "sec1" | "pkcs8"; + }; + } + + interface ED25519KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface ED448KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface X25519KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface X448KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface KeyPairSyncResult { + publicKey: T1; + privateKey: T2; + } + + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "rsa", options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "dsa", options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ec", options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ed25519", options?: ED25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ed448", options?: ED448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "x25519", options?: X25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "x448", options?: X448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + namespace generateKeyPair { + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "rsa", options: RSAKeyPairKeyObjectOptions): Promise; + + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "dsa", options: DSAKeyPairKeyObjectOptions): Promise; + + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "ec", options: ECKeyPairKeyObjectOptions): Promise; + + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__( + type: "ed25519", + options?: ED25519KeyPairKeyObjectOptions, + ): Promise; + + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "ed448", options?: ED448KeyPairKeyObjectOptions): Promise; + + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__( + type: "x25519", + options?: X25519KeyPairKeyObjectOptions, + ): Promise; + + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "x448", options?: X448KeyPairKeyObjectOptions): Promise; + } + + /** + * Calculates and returns the signature for `data` using the given private key and + * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is + * dependent upon the key type (especially Ed25519 and Ed448). + * + * If `key` is not a [`KeyObject`][], this function behaves as if `key` had been + * passed to [`crypto.createPrivateKey()`][]. + */ + function sign( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + ): Buffer; + + /** + * Calculates and returns the signature for `data` using the given private key and + * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is + * dependent upon the key type (especially Ed25519 and Ed448). + * + * If `key` is not a [`KeyObject`][], this function behaves as if `key` had been + * passed to [`crypto.createPublicKey()`][]. + */ + function verify( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, + signature: NodeJS.ArrayBufferView, + ): boolean; + + /** + * Computes the Diffie-Hellman secret based on a privateKey and a publicKey. + * Both keys must have the same asymmetricKeyType, which must be one of + * 'dh' (for Diffie-Hellman), 'ec' (for ECDH), 'x448', or 'x25519' (for ECDH-ES). + */ + function diffieHellman(options: { privateKey: KeyObject; publicKey: KeyObject }): Buffer; + /** + * Load and set the `engine` for some or all OpenSSL functions (selected by flags). + * + * `engine` could be either an id or a path to the engine's shared library. + * + * The optional `flags` argument uses `ENGINE_METHOD_ALL` by default. + * The `flags` is a bit field taking one of or a mix of the following flags (defined in `crypto.constants`): + * + * - `crypto.constants.ENGINE_METHOD_RSA` + * - `crypto.constants.ENGINE_METHOD_DSA` + * - `crypto.constants.ENGINE_METHOD_DH` + * - `crypto.constants.ENGINE_METHOD_RAND` + * - `crypto.constants.ENGINE_METHOD_EC` + * - `crypto.constants.ENGINE_METHOD_CIPHERS` + * - `crypto.constants.ENGINE_METHOD_DIGESTS` + * - `crypto.constants.ENGINE_METHOD_PKEY_METHS` + * - `crypto.constants.ENGINE_METHOD_PKEY_ASN1_METHS` + * - `crypto.constants.ENGINE_METHOD_ALL` + * - `crypto.constants.ENGINE_METHOD_NONE` + * + * The flags below are deprecated in OpenSSL-1.1.0. + * + * - `crypto.constants.ENGINE_METHOD_ECDH` + * - `crypto.constants.ENGINE_METHOD_ECDSA` + * - `crypto.constants.ENGINE_METHOD_STORE` + * @since v0.11.11 + * @param [flags=crypto.constants.ENGINE_METHOD_ALL] + */ + function setEngine(engine: string, flags?: number): void; +} +declare module "node:crypto" { + export * from "crypto"; +} diff --git a/node_backend/node_modules/@types/node/dgram.d.ts b/node_backend/node_modules/@types/node/dgram.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4e190b14ba4cac1420e424edc1dc20daefe4c39d --- /dev/null +++ b/node_backend/node_modules/@types/node/dgram.d.ts @@ -0,0 +1,180 @@ +declare module "dgram" { + import { AddressInfo } from "net"; + import * as dns from "dns"; + import EventEmitter = require("events"); + + interface RemoteInfo { + address: string; + family: "IPv4" | "IPv6"; + port: number; + size: number; + } + + interface BindOptions { + port?: number | undefined; + address?: string | undefined; + exclusive?: boolean | undefined; + fd?: number | undefined; + } + + type SocketType = "udp4" | "udp6"; + + interface SocketOptions { + type: SocketType; + reuseAddr?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + recvBufferSize?: number | undefined; + sendBufferSize?: number | undefined; + lookup?: + | (( + hostname: string, + options: dns.LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ) => void) + | undefined; + } + + function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + + class Socket extends EventEmitter { + addMembership(multicastAddress: string, multicastInterface?: string): void; + address(): AddressInfo; + bind(port?: number, address?: string, callback?: () => void): this; + bind(port?: number, callback?: () => void): this; + bind(callback?: () => void): this; + bind(options: BindOptions, callback?: () => void): this; + close(callback?: () => void): this; + connect(port: number, address?: string, callback?: () => void): void; + connect(port: number, callback: () => void): void; + disconnect(): void; + dropMembership(multicastAddress: string, multicastInterface?: string): void; + getRecvBufferSize(): number; + getSendBufferSize(): number; + ref(): this; + remoteAddress(): AddressInfo; + send( + msg: string | Uint8Array | ReadonlyArray, + port?: number, + address?: string, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array | ReadonlyArray, + port?: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array | ReadonlyArray, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + port?: number, + address?: string, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + port?: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + setBroadcast(flag: boolean): void; + setMulticastInterface(multicastInterface: string): void; + setMulticastLoopback(flag: boolean): boolean; + setMulticastTTL(ttl: number): number; + setRecvBufferSize(size: number): void; + setSendBufferSize(size: number): void; + setTTL(ttl: number): number; + unref(): this; + /** + * Tells the kernel to join a source-specific multicast channel at the given + * `sourceAddress` and `groupAddress`, using the `multicastInterface` with the + * `IP_ADD_SOURCE_MEMBERSHIP` socket option. + * If the `multicastInterface` argument + * is not specified, the operating system will choose one interface and will add + * membership to it. + * To add membership to every available interface, call + * `socket.addSourceSpecificMembership()` multiple times, once per interface. + */ + addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + + /** + * Instructs the kernel to leave a source-specific multicast channel at the given + * `sourceAddress` and `groupAddress` using the `IP_DROP_SOURCE_MEMBERSHIP` + * socket option. This method is automatically called by the kernel when the + * socket is closed or the process terminates, so most apps will never have + * reason to call this. + * + * If `multicastInterface` is not specified, the operating system will attempt to + * drop membership on all valid interfaces. + */ + dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. error + * 4. listening + * 5. message + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connect"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "message", msg: Buffer, rinfo: RemoteInfo): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connect", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connect", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + } +} +declare module "node:dgram" { + export * from "dgram"; +} diff --git a/node_backend/node_modules/@types/node/dns.d.ts b/node_backend/node_modules/@types/node/dns.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..cbae237c24397bc9647f55c12de1dc59b371fe50 --- /dev/null +++ b/node_backend/node_modules/@types/node/dns.d.ts @@ -0,0 +1,516 @@ +declare module "dns" { + // Supported getaddrinfo flags. + const ADDRCONFIG: number; + const V4MAPPED: number; + /** + * If `dns.V4MAPPED` is specified, return resolved IPv6 addresses as + * well as IPv4 mapped IPv6 addresses. + */ + const ALL: number; + + interface LookupOptions { + family?: number | undefined; + hints?: number | undefined; + all?: boolean | undefined; + verbatim?: boolean | undefined; + } + + interface LookupOneOptions extends LookupOptions { + all?: false | undefined; + } + + interface LookupAllOptions extends LookupOptions { + all: true; + } + + interface LookupAddress { + address: string; + family: number; + } + + function lookup( + hostname: string, + family: number, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + function lookup( + hostname: string, + options: LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + function lookup( + hostname: string, + options: LookupAllOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void, + ): void; + function lookup( + hostname: string, + options: LookupOptions, + callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void, + ): void; + function lookup( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace lookup { + function __promisify__(hostname: string, options: LookupAllOptions): Promise; + function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise; + function __promisify__(hostname: string, options: LookupOptions): Promise; + } + + function lookupService( + address: string, + port: number, + callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void, + ): void; + + namespace lookupService { + function __promisify__(address: string, port: number): Promise<{ hostname: string; service: string }>; + } + + interface ResolveOptions { + ttl: boolean; + } + + interface ResolveWithTtlOptions extends ResolveOptions { + ttl: true; + } + + interface RecordWithTtl { + address: string; + ttl: number; + } + + /** @deprecated Use `AnyARecord` or `AnyAaaaRecord` instead. */ + type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord; + + interface AnyARecord extends RecordWithTtl { + type: "A"; + } + + interface AnyAaaaRecord extends RecordWithTtl { + type: "AAAA"; + } + + interface MxRecord { + priority: number; + exchange: string; + } + + interface AnyMxRecord extends MxRecord { + type: "MX"; + } + + interface NaptrRecord { + flags: string; + service: string; + regexp: string; + replacement: string; + order: number; + preference: number; + } + + interface AnyNaptrRecord extends NaptrRecord { + type: "NAPTR"; + } + + interface SoaRecord { + nsname: string; + hostmaster: string; + serial: number; + refresh: number; + retry: number; + expire: number; + minttl: number; + } + + interface AnySoaRecord extends SoaRecord { + type: "SOA"; + } + + interface SrvRecord { + priority: number; + weight: number; + port: number; + name: string; + } + + interface AnySrvRecord extends SrvRecord { + type: "SRV"; + } + + interface AnyTxtRecord { + type: "TXT"; + entries: string[]; + } + + interface AnyNsRecord { + type: "NS"; + value: string; + } + + interface AnyPtrRecord { + type: "PTR"; + value: string; + } + + interface AnyCnameRecord { + type: "CNAME"; + value: string; + } + + type AnyRecord = + | AnyARecord + | AnyAaaaRecord + | AnyCnameRecord + | AnyMxRecord + | AnyNaptrRecord + | AnyNsRecord + | AnyPtrRecord + | AnySoaRecord + | AnySrvRecord + | AnyTxtRecord; + + function resolve( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "A", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "AAAA", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "ANY", + callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "CNAME", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "MX", + callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "NAPTR", + callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "NS", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "PTR", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "SOA", + callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void, + ): void; + function resolve( + hostname: string, + rrtype: "SRV", + callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "TXT", + callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, + ): void; + function resolve( + hostname: string, + rrtype: string, + callback: ( + err: NodeJS.ErrnoException | null, + addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[], + ) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace resolve { + function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise; + function __promisify__(hostname: string, rrtype: "ANY"): Promise; + function __promisify__(hostname: string, rrtype: "MX"): Promise; + function __promisify__(hostname: string, rrtype: "NAPTR"): Promise; + function __promisify__(hostname: string, rrtype: "SOA"): Promise; + function __promisify__(hostname: string, rrtype: "SRV"): Promise; + function __promisify__(hostname: string, rrtype: "TXT"): Promise; + function __promisify__( + hostname: string, + rrtype: string, + ): Promise; + } + + function resolve4( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve4( + hostname: string, + options: ResolveWithTtlOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, + ): void; + function resolve4( + hostname: string, + options: ResolveOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace resolve4 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + + function resolve6( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve6( + hostname: string, + options: ResolveWithTtlOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, + ): void; + function resolve6( + hostname: string, + options: ResolveOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace resolve6 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + + function resolveCname( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + namespace resolveCname { + function __promisify__(hostname: string): Promise; + } + + function resolveMx( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, + ): void; + namespace resolveMx { + function __promisify__(hostname: string): Promise; + } + + function resolveNaptr( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, + ): void; + namespace resolveNaptr { + function __promisify__(hostname: string): Promise; + } + + function resolveNs( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + namespace resolveNs { + function __promisify__(hostname: string): Promise; + } + + function resolvePtr( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + namespace resolvePtr { + function __promisify__(hostname: string): Promise; + } + + function resolveSoa( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void, + ): void; + namespace resolveSoa { + function __promisify__(hostname: string): Promise; + } + + function resolveSrv( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, + ): void; + namespace resolveSrv { + function __promisify__(hostname: string): Promise; + } + + function resolveTxt( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, + ): void; + namespace resolveTxt { + function __promisify__(hostname: string): Promise; + } + + function resolveAny( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, + ): void; + namespace resolveAny { + function __promisify__(hostname: string): Promise; + } + + function reverse(ip: string, callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void): void; + function setServers(servers: ReadonlyArray): void; + function getServers(): string[]; + + function setDefaultResultOrder(order: "ipv4first" | "verbatim"): void; + + // Error codes + const NODATA: string; + const FORMERR: string; + const SERVFAIL: string; + const NOTFOUND: string; + const NOTIMP: string; + const REFUSED: string; + const BADQUERY: string; + const BADNAME: string; + const BADFAMILY: string; + const BADRESP: string; + const CONNREFUSED: string; + const TIMEOUT: string; + const EOF: string; + const FILE: string; + const NOMEM: string; + const DESTRUCTION: string; + const BADSTR: string; + const BADFLAGS: string; + const NONAME: string; + const BADHINTS: string; + const NOTINITIALIZED: string; + const LOADIPHLPAPI: string; + const ADDRGETNETWORKPARAMS: string; + const CANCELLED: string; + + interface ResolverOptions { + timeout?: number | undefined; + } + + class Resolver { + constructor(options?: ResolverOptions); + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } + + namespace promises { + function getServers(): string[]; + + function lookup(hostname: string, family: number): Promise; + function lookup(hostname: string, options: LookupOneOptions): Promise; + function lookup(hostname: string, options: LookupAllOptions): Promise; + function lookup(hostname: string, options: LookupOptions): Promise; + function lookup(hostname: string): Promise; + + function lookupService(address: string, port: number): Promise<{ hostname: string; service: string }>; + + function resolve(hostname: string): Promise; + function resolve(hostname: string, rrtype: "A"): Promise; + function resolve(hostname: string, rrtype: "AAAA"): Promise; + function resolve(hostname: string, rrtype: "ANY"): Promise; + function resolve(hostname: string, rrtype: "CNAME"): Promise; + function resolve(hostname: string, rrtype: "MX"): Promise; + function resolve(hostname: string, rrtype: "NAPTR"): Promise; + function resolve(hostname: string, rrtype: "NS"): Promise; + function resolve(hostname: string, rrtype: "PTR"): Promise; + function resolve(hostname: string, rrtype: "SOA"): Promise; + function resolve(hostname: string, rrtype: "SRV"): Promise; + function resolve(hostname: string, rrtype: "TXT"): Promise; + function resolve( + hostname: string, + rrtype: string, + ): Promise; + + function resolve4(hostname: string): Promise; + function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve4(hostname: string, options: ResolveOptions): Promise; + + function resolve6(hostname: string): Promise; + function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve6(hostname: string, options: ResolveOptions): Promise; + + function resolveAny(hostname: string): Promise; + + function resolveCname(hostname: string): Promise; + + function resolveMx(hostname: string): Promise; + + function resolveNaptr(hostname: string): Promise; + + function resolveNs(hostname: string): Promise; + + function resolvePtr(hostname: string): Promise; + + function resolveSoa(hostname: string): Promise; + + function resolveSrv(hostname: string): Promise; + + function resolveTxt(hostname: string): Promise; + + function reverse(ip: string): Promise; + + function setServers(servers: ReadonlyArray): void; + + function setDefaultResultOrder(order: "ipv4first" | "verbatim"): void; + + class Resolver { + constructor(options?: ResolverOptions); + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } + } +} +declare module "node:dns" { + export * from "dns"; +} diff --git a/node_backend/node_modules/@types/node/domain.d.ts b/node_backend/node_modules/@types/node/domain.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7168f63efc0addd8df71fb3f205755755ea44d47 --- /dev/null +++ b/node_backend/node_modules/@types/node/domain.d.ts @@ -0,0 +1,27 @@ +declare module "domain" { + import EventEmitter = require("events"); + + global { + namespace NodeJS { + interface Domain extends EventEmitter { + run(fn: (...args: any[]) => T, ...args: any[]): T; + add(emitter: EventEmitter | Timer): void; + remove(emitter: EventEmitter | Timer): void; + bind(cb: T): T; + intercept(cb: T): T; + } + } + } + + interface Domain extends NodeJS.Domain {} + class Domain extends EventEmitter { + members: Array; + enter(): void; + exit(): void; + } + + function create(): Domain; +} +declare module "node:domain" { + export * from "domain"; +} diff --git a/node_backend/node_modules/@types/node/events.d.ts b/node_backend/node_modules/@types/node/events.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9037dce28745e40a40825d8ff9ff4296cca1e23c --- /dev/null +++ b/node_backend/node_modules/@types/node/events.d.ts @@ -0,0 +1,82 @@ +declare module "events" { + interface EventEmitterOptions { + /** + * Enables automatic capturing of promise rejection. + */ + captureRejections?: boolean | undefined; + } + + interface NodeEventTarget { + once(event: string | symbol, listener: (...args: any[]) => void): this; + } + + interface DOMEventTarget { + addEventListener(event: string, listener: (...args: any[]) => void, opts?: { once: boolean }): any; + } + + interface EventEmitter extends NodeJS.EventEmitter {} + class EventEmitter { + constructor(options?: EventEmitterOptions); + + static once(emitter: NodeEventTarget, event: string | symbol): Promise; + static once(emitter: DOMEventTarget, event: string): Promise; + static on(emitter: NodeJS.EventEmitter, event: string): AsyncIterableIterator; + + /** @deprecated since v4.0.0 */ + static listenerCount(emitter: NodeJS.EventEmitter, event: string | symbol): number; + + /** + * This symbol shall be used to install a listener for only monitoring `'error'` + * events. Listeners installed using this symbol are called before the regular + * `'error'` listeners are called. + * + * Installing a listener using this symbol does not change the behavior once an + * `'error'` event is emitted, therefore the process will still crash if no + * regular `'error'` listener is installed. + */ + static readonly errorMonitor: unique symbol; + static readonly captureRejectionSymbol: unique symbol; + + /** + * Sets or gets the default captureRejection value for all emitters. + */ + // TODO: These should be described using static getter/setter pairs: + static captureRejections: boolean; + static defaultMaxListeners: number; + } + + import internal = require("events"); + namespace EventEmitter { + // Should just be `export { EventEmitter }`, but that doesn't work in TypeScript 3.4 + export { internal as EventEmitter }; + } + + global { + namespace NodeJS { + interface EventEmitter { + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + off(event: string | symbol, listener: (...args: any[]) => void): this; + removeAllListeners(event?: string | symbol): this; + setMaxListeners(n: number): this; + getMaxListeners(): number; + listeners(event: string | symbol): Function[]; + rawListeners(event: string | symbol): Function[]; + emit(event: string | symbol, ...args: any[]): boolean; + listenerCount(event: string | symbol): number; + // Added in Node 6... + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + eventNames(): Array; + } + } + } + + export = EventEmitter; +} +declare module "node:events" { + import events = require("events"); + export = events; +} diff --git a/node_backend/node_modules/@types/node/fs.d.ts b/node_backend/node_modules/@types/node/fs.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6391f9632c17ecaadfbd63fe1c49e98ec0c246d2 --- /dev/null +++ b/node_backend/node_modules/@types/node/fs.d.ts @@ -0,0 +1,2587 @@ +declare module "fs" { + import * as stream from "stream"; + import EventEmitter = require("events"); + import { URL } from "url"; + import * as promises from "fs/promises"; + + export { promises }; + /** + * Valid types for path values in "fs". + */ + export type PathLike = string | Buffer | URL; + + export type NoParamCallback = (err: NodeJS.ErrnoException | null) => void; + + export type BufferEncodingOption = "buffer" | { encoding: "buffer" }; + + export interface BaseEncodingOptions { + encoding?: BufferEncoding | null | undefined; + } + + export type OpenMode = number | string; + + export type Mode = number | string; + + export interface StatsBase { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + + dev: T; + ino: T; + mode: T; + nlink: T; + uid: T; + gid: T; + rdev: T; + size: T; + blksize: T; + blocks: T; + atimeMs: T; + mtimeMs: T; + ctimeMs: T; + birthtimeMs: T; + atime: Date; + mtime: Date; + ctime: Date; + birthtime: Date; + } + + export interface Stats extends StatsBase { + } + + export class Stats { + } + + export class Dirent { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + name: string; + } + + /** + * A class representing a directory stream. + */ + export class Dir { + readonly path: string; + + /** + * Asynchronously iterates over the directory via `readdir(3)` until all entries have been read. + */ + [Symbol.asyncIterator](): AsyncIterableIterator; + + /** + * Asynchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + */ + close(): Promise; + close(cb: NoParamCallback): void; + + /** + * Synchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + */ + closeSync(): void; + + /** + * Asynchronously read the next directory entry via `readdir(3)` as an `Dirent`. + * After the read is completed, a value is returned that will be resolved with an `Dirent`, or `null` if there are no more directory entries to read. + * Directory entries returned by this function are in no particular order as provided by the operating system's underlying directory mechanisms. + */ + read(): Promise; + read(cb: (err: NodeJS.ErrnoException | null, dirEnt: Dirent | null) => void): void; + + /** + * Synchronously read the next directory entry via `readdir(3)` as a `Dirent`. + * If there are no more directory entries to read, null will be returned. + * Directory entries returned by this function are in no particular order as provided by the operating system's underlying directory mechanisms. + */ + readSync(): Dirent | null; + } + + export interface FSWatcher extends EventEmitter { + close(): void; + + /** + * events.EventEmitter + * 1. change + * 2. error + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "close", listener: () => void): this; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "close", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "close", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "close", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + } + + export class ReadStream extends stream.Readable { + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + bytesRead: number; + path: string | Buffer; + pending: boolean; + + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "open", listener: (fd: number) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "open", listener: (fd: number) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "ready", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "open", listener: (fd: number) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "ready", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "open", listener: (fd: number) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "open", listener: (fd: number) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export class WriteStream extends stream.Writable { + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + bytesWritten: number; + path: string | Buffer; + pending: boolean; + + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "open", listener: (fd: number) => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "open", listener: (fd: number) => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "ready", listener: () => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "open", listener: (fd: number) => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "ready", listener: () => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "open", listener: (fd: number) => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "open", listener: (fd: number) => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + /** + * Asynchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace rename { + /** + * Asynchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(oldPath: PathLike, newPath: PathLike): Promise; + } + + /** + * Synchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function renameSync(oldPath: PathLike, newPath: PathLike): void; + + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + export function truncate(path: PathLike, len: number | undefined | null, callback: NoParamCallback): void; + + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function truncate(path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace truncate { + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(path: PathLike, len?: number | null): Promise; + } + + /** + * Synchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + export function truncateSync(path: PathLike, len?: number | null): void; + + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + * @param len If not specified, defaults to `0`. + */ + export function ftruncate(fd: number, len: number | undefined | null, callback: NoParamCallback): void; + + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + */ + export function ftruncate(fd: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace ftruncate { + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(fd: number, len?: number | null): Promise; + } + + /** + * Synchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + * @param len If not specified, defaults to `0`. + */ + export function ftruncateSync(fd: number, len?: number | null): void; + + /** + * Asynchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace chown { + /** + * Asynchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + + /** + * Synchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function chownSync(path: PathLike, uid: number, gid: number): void; + + /** + * Asynchronous fchown(2) - Change ownership of a file. + * @param fd A file descriptor. + */ + export function fchown(fd: number, uid: number, gid: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fchown { + /** + * Asynchronous fchown(2) - Change ownership of a file. + * @param fd A file descriptor. + */ + function __promisify__(fd: number, uid: number, gid: number): Promise; + } + + /** + * Synchronous fchown(2) - Change ownership of a file. + * @param fd A file descriptor. + */ + export function fchownSync(fd: number, uid: number, gid: number): void; + + /** + * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace lchown { + /** + * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + + /** + * Synchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function lchownSync(path: PathLike, uid: number, gid: number): void; + + /** + * Changes the access and modification times of a file in the same way as `fs.utimes()`, + * with the difference that if the path refers to a symbolic link, then the link is not + * dereferenced: instead, the timestamps of the symbolic link itself are changed. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function lutimes( + path: PathLike, + atime: string | number | Date, + mtime: string | number | Date, + callback: NoParamCallback, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace lutimes { + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, + * with the difference that if the path refers to a symbolic link, then the link is not + * dereferenced: instead, the timestamps of the symbolic link itself are changed. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__( + path: PathLike, + atime: string | number | Date, + mtime: string | number | Date, + ): Promise; + } + + /** + * Change the file system timestamps of the symbolic link referenced by `path`. Returns `undefined`, + * or throws an exception when parameters are incorrect or the operation fails. + * This is the synchronous version of `fs.lutimes()`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function lutimesSync(path: PathLike, atime: string | number | Date, mtime: string | number | Date): void; + + /** + * Asynchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace chmod { + /** + * Asynchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + + /** + * Synchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function chmodSync(path: PathLike, mode: Mode): void; + + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param fd A file descriptor. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function fchmod(fd: number, mode: Mode, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fchmod { + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param fd A file descriptor. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(fd: number, mode: Mode): Promise; + } + + /** + * Synchronous fchmod(2) - Change permissions of a file. + * @param fd A file descriptor. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function fchmodSync(fd: number, mode: Mode): void; + + /** + * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace lchmod { + /** + * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + + /** + * Synchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function lchmodSync(path: PathLike, mode: Mode): void; + + /** + * Asynchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function stat( + path: PathLike, + options: StatOptions & { bigint?: false | undefined } | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function stat( + path: PathLike, + options: StatOptions & { bigint: true }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function stat( + path: PathLike, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace stat { + /** + * Asynchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, options?: StatOptions & { bigint?: false | undefined }): Promise; + function __promisify__(path: PathLike, options: StatOptions & { bigint: true }): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + + /** + * Synchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function statSync(path: PathLike, options?: StatOptions & { bigint?: false | undefined }): Stats; + export function statSync(path: PathLike, options: StatOptions & { bigint: true }): BigIntStats; + export function statSync(path: PathLike, options?: StatOptions): Stats | BigIntStats; + + /** + * Asynchronous fstat(2) - Get file status. + * @param fd A file descriptor. + */ + export function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function fstat( + fd: number, + options: StatOptions & { bigint?: false | undefined } | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function fstat( + fd: number, + options: StatOptions & { bigint: true }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function fstat( + fd: number, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fstat { + /** + * Asynchronous fstat(2) - Get file status. + * @param fd A file descriptor. + */ + function __promisify__(fd: number, options?: StatOptions & { bigint?: false | undefined }): Promise; + function __promisify__(fd: number, options: StatOptions & { bigint: true }): Promise; + function __promisify__(fd: number, options?: StatOptions): Promise; + } + + /** + * Synchronous fstat(2) - Get file status. + * @param fd A file descriptor. + */ + export function fstatSync(fd: number, options?: StatOptions & { bigint?: false | undefined }): Stats; + export function fstatSync(fd: number, options: StatOptions & { bigint: true }): BigIntStats; + export function fstatSync(fd: number, options?: StatOptions): Stats | BigIntStats; + + /** + * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function lstat( + path: PathLike, + options: StatOptions & { bigint?: false | undefined } | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function lstat( + path: PathLike, + options: StatOptions & { bigint: true }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function lstat( + path: PathLike, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace lstat { + /** + * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, options?: StatOptions & { bigint?: false | undefined }): Promise; + function __promisify__(path: PathLike, options: StatOptions & { bigint: true }): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + + /** + * Synchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function lstatSync(path: PathLike, options?: StatOptions & { bigint?: false | undefined }): Stats; + export function lstatSync(path: PathLike, options: StatOptions & { bigint: true }): BigIntStats; + export function lstatSync(path: PathLike, options?: StatOptions): Stats | BigIntStats; + + /** + * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace link { + /** + * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(existingPath: PathLike, newPath: PathLike): Promise; + } + + /** + * Synchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function linkSync(existingPath: PathLike, newPath: PathLike): void; + + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + export function symlink( + target: PathLike, + path: PathLike, + type: symlink.Type | undefined | null, + callback: NoParamCallback, + ): void; + + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + */ + export function symlink(target: PathLike, path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace symlink { + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise; + + type Type = "dir" | "file" | "junction"; + } + + /** + * Synchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + export function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: BaseEncodingOptions | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, + ): void; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, linkString: Buffer) => void, + ): void; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: BaseEncodingOptions | string | undefined | null, + callback: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void, + ): void; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readlink( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace readlink { + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: BaseEncodingOptions | string | null): Promise; + } + + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): string; + + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options: BufferEncodingOption): Buffer; + + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options?: BaseEncodingOptions | string | null): string | Buffer; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: BaseEncodingOptions | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void, + ): void; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: BaseEncodingOptions | string | undefined | null, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void, + ): void; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function realpath( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace realpath { + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: BaseEncodingOptions | string | null): Promise; + + function native( + path: PathLike, + options: BaseEncodingOptions | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + function native( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void, + ): void; + function native( + path: PathLike, + options: BaseEncodingOptions | string | undefined | null, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void, + ): void; + function native( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + } + + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): string; + + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options: BufferEncodingOption): Buffer; + + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options?: BaseEncodingOptions | string | null): string | Buffer; + + export namespace realpathSync { + function native(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): string; + function native(path: PathLike, options: BufferEncodingOption): Buffer; + function native(path: PathLike, options?: BaseEncodingOptions | string | null): string | Buffer; + } + + /** + * Asynchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function unlink(path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace unlink { + /** + * Asynchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike): Promise; + } + + /** + * Synchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function unlinkSync(path: PathLike): void; + + export interface RmDirOptions { + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * @deprecated since v14.14.0 In future versions of Node.js, + * `fs.rmdir(path, { recursive: true })` will throw on nonexistent + * paths, or when given a file as a target. + * Use `fs.rm(path, { recursive: true, force: true })` instead. + * + * If `true`, perform a recursive directory removal. In + * recursive mode, errors are not reported if `path` does not exist, and + * operations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + + /** + * Asynchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function rmdir(path: PathLike, callback: NoParamCallback): void; + export function rmdir(path: PathLike, options: RmDirOptions, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace rmdir { + /** + * Asynchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, options?: RmDirOptions): Promise; + } + + /** + * Synchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function rmdirSync(path: PathLike, options?: RmDirOptions): void; + + export interface RmOptions { + /** + * When `true`, exceptions will be ignored if `path` does not exist. + * @default false + */ + force?: boolean | undefined; + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * If `true`, perform a recursive directory removal. In + * recursive mode, errors are not reported if `path` does not exist, and + * operations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + export function rm(path: PathLike, callback: NoParamCallback): void; + export function rm(path: PathLike, options: RmOptions, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace rm { + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + function __promisify__(path: PathLike, options?: RmOptions): Promise; + } + + /** + * Synchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + export function rmSync(path: PathLike, options?: RmOptions): void; + + export interface MakeDirectoryOptions { + /** + * Indicates whether parent folders should be created. + * If a folder was created, the path to the first created folder will be returned. + * @default false + */ + recursive?: boolean | undefined; + /** + * A file mode. If a string is passed, it is parsed as an octal integer. If not specified + * @default 0o777 + */ + mode?: Mode | undefined; + } + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: MakeDirectoryOptions & { recursive: true }, + callback: (err: NodeJS.ErrnoException | null, path?: string) => void, + ): void; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: Mode | (MakeDirectoryOptions & { recursive?: false | undefined }) | null | undefined, + callback: NoParamCallback, + ): void; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: Mode | MakeDirectoryOptions | null | undefined, + callback: (err: NodeJS.ErrnoException | null, path?: string) => void, + ): void; + + /** + * Asynchronous mkdir(2) - create a directory with a mode of `0o777`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function mkdir(path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace mkdir { + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options: MakeDirectoryOptions & { recursive: true }, + ): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options?: Mode | (MakeDirectoryOptions & { recursive?: false | undefined }) | null, + ): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options?: Mode | MakeDirectoryOptions | null, + ): Promise; + } + + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync(path: PathLike, options: MakeDirectoryOptions & { recursive: true }): string | undefined; + + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync( + path: PathLike, + options?: Mode | (MakeDirectoryOptions & { recursive?: false | undefined }) | null, + ): void; + + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync(path: PathLike, options?: Mode | MakeDirectoryOptions | null): string | undefined; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: BaseEncodingOptions | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, folder: string) => void, + ): void; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: "buffer" | { encoding: "buffer" }, + callback: (err: NodeJS.ErrnoException | null, folder: Buffer) => void, + ): void; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: BaseEncodingOptions | string | undefined | null, + callback: (err: NodeJS.ErrnoException | null, folder: string | Buffer) => void, + ): void; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + */ + export function mkdtemp( + prefix: string, + callback: (err: NodeJS.ErrnoException | null, folder: string) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace mkdtemp { + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options: BufferEncodingOption): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: BaseEncodingOptions | string | null): Promise; + } + + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options?: BaseEncodingOptions | BufferEncoding | null): string; + + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options: BufferEncodingOption): Buffer; + + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options?: BaseEncodingOptions | string | null): string | Buffer; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: + | { encoding: BufferEncoding | null; withFileTypes?: false | undefined } + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, + ): void; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: { encoding: "buffer"; withFileTypes?: false | undefined } | "buffer", + callback: (err: NodeJS.ErrnoException | null, files: Buffer[]) => void, + ): void; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, files: string[] | Buffer[]) => void, + ): void; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readdir( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, + ): void; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdir( + path: PathLike, + options: BaseEncodingOptions & { withFileTypes: true }, + callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace readdir { + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: { encoding: BufferEncoding | null; withFileTypes?: false | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options: "buffer" | { encoding: "buffer"; withFileTypes?: false | undefined }, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent + */ + function __promisify__( + path: PathLike, + options: BaseEncodingOptions & { withFileTypes: true }, + ): Promise; + } + + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options?: { encoding: BufferEncoding | null; withFileTypes?: false | undefined } | BufferEncoding | null, + ): string[]; + + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options: { encoding: "buffer"; withFileTypes?: false | undefined } | "buffer", + ): Buffer[]; + + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options?: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | null, + ): string[] | Buffer[]; + + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdirSync(path: PathLike, options: BaseEncodingOptions & { withFileTypes: true }): Dirent[]; + + /** + * Asynchronous close(2) - close a file descriptor. + * @param fd A file descriptor. + */ + export function close(fd: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace close { + /** + * Asynchronous close(2) - close a file descriptor. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + + /** + * Synchronous close(2) - close a file descriptor. + * @param fd A file descriptor. + */ + export function closeSync(fd: number): void; + + /** + * Asynchronous open(2) - open and possibly create a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param [flags='r'] See `support of file system `flags``. + * @param [mode=0o666] + */ + export function open( + path: PathLike, + flags: OpenMode | undefined, + mode: Mode | undefined | null, + callback: (err: NodeJS.ErrnoException | null, fd: number) => void, + ): void; + + /** + * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param [flags='r'] See `support of file system `flags``. + */ + export function open( + path: PathLike, + flags: OpenMode | undefined, + callback: (err: NodeJS.ErrnoException | null, fd: number) => void, + ): void; + + /** + * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace open { + /** + * Asynchronous open(2) - open and possibly create a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. + */ + function __promisify__(path: PathLike, flags: OpenMode, mode?: Mode | null): Promise; + } + + /** + * Synchronous open(2) - open and possibly create a file, returning a file descriptor.. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. + */ + export function openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number; + + /** + * Asynchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function utimes( + path: PathLike, + atime: string | number | Date, + mtime: string | number | Date, + callback: NoParamCallback, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace utimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__( + path: PathLike, + atime: string | number | Date, + mtime: string | number | Date, + ): Promise; + } + + /** + * Synchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function utimesSync(path: PathLike, atime: string | number | Date, mtime: string | number | Date): void; + + /** + * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function futimes( + fd: number, + atime: string | number | Date, + mtime: string | number | Date, + callback: NoParamCallback, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace futimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(fd: number, atime: string | number | Date, mtime: string | number | Date): Promise; + } + + /** + * Synchronously change file timestamps of the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function futimesSync(fd: number, atime: string | number | Date, mtime: string | number | Date): void; + + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor. + */ + export function fsync(fd: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fsync { + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + + /** + * Synchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor. + */ + export function fsyncSync(fd: number): void; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + position: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + */ + export function write( + fd: number, + buffer: TBuffer, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function write( + fd: number, + string: string, + position: number | undefined | null, + encoding: BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + export function write( + fd: number, + string: string, + position: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + */ + export function write( + fd: number, + string: string, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace write { + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + function __promisify__( + fd: number, + buffer?: TBuffer, + offset?: number, + length?: number, + position?: number | null, + ): Promise<{ bytesWritten: number; buffer: TBuffer }>; + + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + function __promisify__( + fd: number, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ bytesWritten: number; buffer: string }>; + } + + /** + * Synchronously writes `buffer` to the file referenced by the supplied file descriptor, returning the number of bytes written. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + export function writeSync( + fd: number, + buffer: NodeJS.ArrayBufferView, + offset?: number | null, + length?: number | null, + position?: number | null, + ): number; + + /** + * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function writeSync( + fd: number, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): number; + + /** + * Asynchronously reads data from the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + export function read( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: number | null, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace read { + /** + * @param fd A file descriptor. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + function __promisify__( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: number | null, + ): Promise<{ bytesRead: number; buffer: TBuffer }>; + } + + export interface ReadSyncOptions { + /** + * @default 0 + */ + offset?: number | undefined; + /** + * @default `length of buffer` + */ + length?: number | undefined; + /** + * @default null + */ + position?: number | null | undefined; + } + + /** + * Synchronously reads data from the file referenced by the supplied file descriptor, returning the number of bytes read. + * @param fd A file descriptor. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + export function readSync( + fd: number, + buffer: NodeJS.ArrayBufferView, + offset: number, + length: number, + position: number | null, + ): number; + + /** + * Similar to the above `fs.readSync` function, this version takes an optional `options` object. + * If no `options` object is specified, it will default with the above values. + */ + export function readSync(fd: number, buffer: NodeJS.ArrayBufferView, opts?: ReadSyncOptions): number; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathLike | number, + options: { encoding?: null | undefined; flag?: string | undefined } | undefined | null, + callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void, + ): void; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathLike | number, + options: { encoding: BufferEncoding; flag?: string | undefined } | BufferEncoding, + callback: (err: NodeJS.ErrnoException | null, data: string) => void, + ): void; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathLike | number, + options: BaseEncodingOptions & { flag?: string | undefined } | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, data: string | Buffer) => void, + ): void; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + */ + export function readFile( + path: PathLike | number, + callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace readFile { + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathLike | number, + options?: { encoding?: null | undefined; flag?: string | undefined } | null, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathLike | number, + options: { encoding: BufferEncoding; flag?: string | undefined } | BufferEncoding, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathLike | number, + options?: BaseEncodingOptions & { flag?: string | undefined } | BufferEncoding | null, + ): Promise; + } + + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathLike | number, + options?: { encoding?: null | undefined; flag?: string | undefined } | null, + ): Buffer; + + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathLike | number, + options: { encoding: BufferEncoding; flag?: string | undefined } | BufferEncoding, + ): string; + + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathLike | number, + options?: BaseEncodingOptions & { flag?: string | undefined } | BufferEncoding | null, + ): string | Buffer; + + export type WriteFileOptions = + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: string | undefined } + | BufferEncoding + | null; + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + export function writeFile( + path: PathLike | number, + data: string | NodeJS.ArrayBufferView, + options: WriteFileOptions, + callback: NoParamCallback, + ): void; + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function writeFile( + path: PathLike | number, + data: string | NodeJS.ArrayBufferView, + callback: NoParamCallback, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace writeFile { + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + function __promisify__( + path: PathLike | number, + data: string | NodeJS.ArrayBufferView, + options?: WriteFileOptions, + ): Promise; + } + + /** + * Synchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + export function writeFileSync( + path: PathLike | number, + data: string | NodeJS.ArrayBufferView, + options?: WriteFileOptions, + ): void; + + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + export function appendFile( + file: PathLike | number, + data: string | Uint8Array, + options: WriteFileOptions, + callback: NoParamCallback, + ): void; + + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function appendFile(file: PathLike | number, data: string | Uint8Array, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace appendFile { + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + function __promisify__( + file: PathLike | number, + data: string | Uint8Array, + options?: WriteFileOptions, + ): Promise; + } + + /** + * Synchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + export function appendFileSync( + file: PathLike | number, + data: string | Uint8Array, + options?: WriteFileOptions, + ): void; + + /** + * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. + */ + export function watchFile( + filename: PathLike, + options: { persistent?: boolean | undefined; interval?: number | undefined } | undefined, + listener: (curr: Stats, prev: Stats) => void, + ): void; + + /** + * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function watchFile(filename: PathLike, listener: (curr: Stats, prev: Stats) => void): void; + + /** + * Stop watching for changes on `filename`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function unwatchFile(filename: PathLike, listener?: (curr: Stats, prev: Stats) => void): void; + + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options: + | { + encoding?: BufferEncoding | null | undefined; + persistent?: boolean | undefined; + recursive?: boolean | undefined; + } + | BufferEncoding + | undefined + | null, + listener?: (event: "rename" | "change", filename: string) => void, + ): FSWatcher; + + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options: { encoding: "buffer"; persistent?: boolean | undefined; recursive?: boolean | undefined } | "buffer", + listener?: (event: "rename" | "change", filename: Buffer) => void, + ): FSWatcher; + + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options: + | { + encoding?: BufferEncoding | null | undefined; + persistent?: boolean | undefined; + recursive?: boolean | undefined; + } + | string + | null, + listener?: (event: "rename" | "change", filename: string | Buffer) => void, + ): FSWatcher; + + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function watch( + filename: PathLike, + listener?: (event: "rename" | "change", filename: string) => any, + ): FSWatcher; + + /** + * Asynchronously tests whether or not the given path exists by checking with the file system. + * @deprecated since v1.0.0 Use `fs.stat()` or `fs.access()` instead + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function exists(path: PathLike, callback: (exists: boolean) => void): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace exists { + /** + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike): Promise; + } + + /** + * Synchronously tests whether or not the given path exists by checking with the file system. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function existsSync(path: PathLike): boolean; + + export namespace constants { + // File Access Constants + + /** Constant for fs.access(). File is visible to the calling process. */ + const F_OK: number; + + /** Constant for fs.access(). File can be read by the calling process. */ + const R_OK: number; + + /** Constant for fs.access(). File can be written by the calling process. */ + const W_OK: number; + + /** Constant for fs.access(). File can be executed by the calling process. */ + const X_OK: number; + + // File Copy Constants + + /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */ + const COPYFILE_EXCL: number; + + /** + * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used. + */ + const COPYFILE_FICLONE: number; + + /** + * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then the operation will fail with an error. + */ + const COPYFILE_FICLONE_FORCE: number; + + // File Open Constants + + /** Constant for fs.open(). Flag indicating to open a file for read-only access. */ + const O_RDONLY: number; + + /** Constant for fs.open(). Flag indicating to open a file for write-only access. */ + const O_WRONLY: number; + + /** Constant for fs.open(). Flag indicating to open a file for read-write access. */ + const O_RDWR: number; + + /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */ + const O_CREAT: number; + + /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */ + const O_EXCL: number; + + /** + * Constant for fs.open(). Flag indicating that if path identifies a terminal device, + * opening the path shall not cause that terminal to become the controlling terminal for the process + * (if the process does not already have one). + */ + const O_NOCTTY: number; + + /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */ + const O_TRUNC: number; + + /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */ + const O_APPEND: number; + + /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */ + const O_DIRECTORY: number; + + /** + * constant for fs.open(). + * Flag indicating reading accesses to the file system will no longer result in + * an update to the atime information associated with the file. + * This flag is available on Linux operating systems only. + */ + const O_NOATIME: number; + + /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */ + const O_NOFOLLOW: number; + + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */ + const O_SYNC: number; + + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */ + const O_DSYNC: number; + + /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */ + const O_SYMLINK: number; + + /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */ + const O_DIRECT: number; + + /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */ + const O_NONBLOCK: number; + + // File Type Constants + + /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */ + const S_IFMT: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */ + const S_IFREG: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */ + const S_IFDIR: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */ + const S_IFCHR: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */ + const S_IFBLK: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */ + const S_IFIFO: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */ + const S_IFLNK: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */ + const S_IFSOCK: number; + + // File Mode Constants + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */ + const S_IRWXU: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */ + const S_IRUSR: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */ + const S_IWUSR: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */ + const S_IXUSR: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */ + const S_IRWXG: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */ + const S_IRGRP: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */ + const S_IWGRP: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */ + const S_IXGRP: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */ + const S_IRWXO: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */ + const S_IROTH: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */ + const S_IWOTH: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */ + const S_IXOTH: number; + + /** + * When set, a memory file mapping is used to access the file. This flag + * is available on Windows operating systems only. On other operating systems, + * this flag is ignored. + */ + const UV_FS_O_FILEMAP: number; + } + + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function access(path: PathLike, mode: number | undefined, callback: NoParamCallback): void; + + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function access(path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace access { + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike, mode?: number): Promise; + } + + /** + * Synchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function accessSync(path: PathLike, mode?: number): void; + + interface StreamOptions { + flags?: string | undefined; + encoding?: BufferEncoding | undefined; + fd?: number | undefined; + mode?: number | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + highWaterMark?: number | undefined; + } + interface FSImplementation { + open: (...args: any[]) => any; + close: (...args: any[]) => any; + } + interface CreateReadStreamFSImplementation extends FSImplementation { + read: (...args: any[]) => any; + } + interface CreateWriteStreamFSImplementation extends FSImplementation { + write: (...args: any[]) => any; + writev?: (...args: any[]) => any; + } + interface ReadStreamOptions extends StreamOptions { + fs?: CreateReadStreamFSImplementation | null | undefined; + end?: number | undefined; + } + interface WriteStreamOptions extends StreamOptions { + fs?: CreateWriteStreamFSImplementation | null | undefined; + } + /** + * Returns a new `ReadStream` object. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function createReadStream(path: PathLike, options?: BufferEncoding | ReadStreamOptions): ReadStream; + + /** + * Returns a new `WriteStream` object. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function createWriteStream(path: PathLike, options?: BufferEncoding | WriteStreamOptions): WriteStream; + + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor. + */ + export function fdatasync(fd: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fdatasync { + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + + /** + * Synchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor. + */ + export function fdatasyncSync(fd: number): void; + + /** + * Asynchronously copies src to dest. By default, dest is overwritten if it already exists. + * No arguments other than a possible exception are given to the callback function. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + */ + export function copyFile(src: PathLike, dest: PathLike, callback: NoParamCallback): void; + /** + * Asynchronously copies src to dest. By default, dest is overwritten if it already exists. + * No arguments other than a possible exception are given to the callback function. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + * @param flags An integer that specifies the behavior of the copy operation. The only supported flag is fs.constants.COPYFILE_EXCL, which causes the copy operation to fail if dest already exists. + */ + export function copyFile(src: PathLike, dest: PathLike, flags: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace copyFile { + /** + * Asynchronously copies src to dest. By default, dest is overwritten if it already exists. + * No arguments other than a possible exception are given to the callback function. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + * @param flags An optional integer that specifies the behavior of the copy operation. + * The only supported flag is fs.constants.COPYFILE_EXCL, + * which causes the copy operation to fail if dest already exists. + */ + function __promisify__(src: PathLike, dst: PathLike, flags?: number): Promise; + } + + /** + * Synchronously copies src to dest. By default, dest is overwritten if it already exists. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + * @param flags An optional integer that specifies the behavior of the copy operation. + * The only supported flag is fs.constants.COPYFILE_EXCL, which causes the copy operation to fail if dest already exists. + */ + export function copyFileSync(src: PathLike, dest: PathLike, flags?: number): void; + + /** + * Write an array of ArrayBufferViews to the file specified by fd using writev(). + * position is the offset from the beginning of the file where this data should be written. + * It is unsafe to use fs.writev() multiple times on the same file without waiting for the callback. For this scenario, use fs.createWriteStream(). + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to the end of the file. + */ + export function writev( + fd: number, + buffers: ReadonlyArray, + cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export function writev( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + + export interface WriteVResult { + bytesWritten: number; + buffers: NodeJS.ArrayBufferView[]; + } + + export namespace writev { + function __promisify__( + fd: number, + buffers: ReadonlyArray, + position?: number, + ): Promise; + } + + /** + * See `writev`. + */ + export function writevSync(fd: number, buffers: ReadonlyArray, position?: number): number; + + export function readv( + fd: number, + buffers: ReadonlyArray, + cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export function readv( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + + export interface ReadVResult { + bytesRead: number; + buffers: NodeJS.ArrayBufferView[]; + } + + export namespace readv { + function __promisify__( + fd: number, + buffers: ReadonlyArray, + position?: number, + ): Promise; + } + + /** + * See `readv`. + */ + export function readvSync(fd: number, buffers: ReadonlyArray, position?: number): number; + + export interface OpenDirOptions { + encoding?: BufferEncoding | undefined; + /** + * Number of directory entries that are buffered + * internally when reading from the directory. Higher values lead to better + * performance but higher memory usage. + * @default 32 + */ + bufferSize?: number | undefined; + } + + export function opendirSync(path: PathLike, options?: OpenDirOptions): Dir; + + export function opendir(path: PathLike, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void; + export function opendir( + path: PathLike, + options: OpenDirOptions, + cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void, + ): void; + + export namespace opendir { + function __promisify__(path: PathLike, options?: OpenDirOptions): Promise; + } + + export interface BigIntStats extends StatsBase { + } + + export class BigIntStats { + atimeNs: bigint; + mtimeNs: bigint; + ctimeNs: bigint; + birthtimeNs: bigint; + } + + export interface BigIntOptions { + bigint: true; + } + + export interface StatOptions { + bigint?: boolean | undefined; + } +} +declare module "node:fs" { + export * from "fs"; +} diff --git a/node_backend/node_modules/@types/node/fs/promises.d.ts b/node_backend/node_modules/@types/node/fs/promises.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef943711be10d471dc3a0464b28bc14fb19527e0 --- /dev/null +++ b/node_backend/node_modules/@types/node/fs/promises.d.ts @@ -0,0 +1,634 @@ +declare module "fs/promises" { + import { + BaseEncodingOptions, + BigIntStats, + BufferEncodingOption, + constants as fsConstants, + Dir, + Dirent, + MakeDirectoryOptions, + Mode, + OpenDirOptions, + OpenMode, + PathLike, + ReadVResult, + RmDirOptions, + RmOptions, + StatOptions, + Stats, + WriteVResult, + } from "fs"; + + interface FileHandle { + /** + * Gets the file descriptor for this file handle. + */ + readonly fd: number; + + /** + * Asynchronously append data to a file, creating the file if it does not exist. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for appending. + * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + appendFile( + data: string | Uint8Array, + options?: + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: OpenMode | undefined } + | BufferEncoding + | null, + ): Promise; + + /** + * Asynchronous fchown(2) - Change ownership of a file. + */ + chown(uid: number, gid: number): Promise; + + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + chmod(mode: Mode): Promise; + + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + */ + datasync(): Promise; + + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + */ + sync(): Promise; + + /** + * Asynchronously reads data from the file. + * The `FileHandle` must have been opened for reading. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + read( + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ bytesRead: number; buffer: TBuffer }>; + + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile(options?: { encoding?: null | undefined; flag?: OpenMode | undefined } | null): Promise; + + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile(options: { encoding: BufferEncoding; flag?: OpenMode | undefined } | BufferEncoding): Promise; + + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile( + options?: BaseEncodingOptions & { flag?: OpenMode | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous fstat(2) - Get file status. + */ + stat(opts?: StatOptions & { bigint?: false | undefined }): Promise; + stat(opts: StatOptions & { bigint: true }): Promise; + stat(opts?: StatOptions): Promise; + + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param len If not specified, defaults to `0`. + */ + truncate(len?: number): Promise; + + /** + * Asynchronously change file timestamps of the file. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + utimes(atime: string | number | Date, mtime: string | number | Date): Promise; + + /** + * Asynchronously writes `buffer` to the file. + * The `FileHandle` must have been opened for writing. + * @param buffer The buffer that the data will be written to. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + write( + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ bytesWritten: number; buffer: TBuffer }>; + + /** + * Asynchronously writes `string` to the file. + * The `FileHandle` must have been opened for writing. + * It is unsafe to call `write()` multiple times on the same file without waiting for the `Promise` + * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + write( + data: string | Uint8Array, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ bytesWritten: number; buffer: string }>; + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for writing. + * It is unsafe to call `writeFile()` multiple times on the same file without waiting for the `Promise` to be resolved (or rejected). + * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + writeFile( + data: string | Uint8Array, + options?: + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: OpenMode | undefined } + | BufferEncoding + | null, + ): Promise; + + /** + * See `fs.writev` promisified version. + */ + writev(buffers: ReadonlyArray, position?: number): Promise; + + /** + * See `fs.readv` promisified version. + */ + readv(buffers: ReadonlyArray, position?: number): Promise; + + /** + * Asynchronous close(2) - close a `FileHandle`. + */ + close(): Promise; + } + + const constants: typeof fsConstants; + + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function access(path: PathLike, mode?: number): Promise; + + /** + * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it already exists. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + * @param flags An optional integer that specifies the behavior of the copy operation. The only + * supported flag is `fs.constants.COPYFILE_EXCL`, which causes the copy operation to fail if + * `dest` already exists. + */ + function copyFile(src: PathLike, dest: PathLike, flags?: number): Promise; + + /** + * Asynchronous open(2) - open and possibly create a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param [flags='r'] See `support of file system `flags``. + * @param [mode] A file mode. If a string is passed, it is parsed as an octal integer. If not + * supplied, defaults to `0o666`. + */ + function open(path: PathLike, flags?: string | number, mode?: string | number): Promise; + + /** + * Asynchronously reads data from the file referenced by the supplied `FileHandle`. + * @param handle A `FileHandle`. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If + * `null`, data will be read from the current position. + */ + function read( + handle: FileHandle, + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ bytesRead: number; buffer: TBuffer }>; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied `FileHandle`. + * It is unsafe to call `fsPromises.write()` multiple times on the same file without waiting for the `Promise` + * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended. + * @param handle A `FileHandle`. + * @param buffer The buffer that the data will be written to. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + function write( + handle: FileHandle, + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ bytesWritten: number; buffer: TBuffer }>; + + /** + * Asynchronously writes `string` to the file referenced by the supplied `FileHandle`. + * It is unsafe to call `fsPromises.write()` multiple times on the same file without waiting for the `Promise` + * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended. + * @param handle A `FileHandle`. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + function write( + handle: FileHandle, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ bytesWritten: number; buffer: string }>; + + /** + * Asynchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function rename(oldPath: PathLike, newPath: PathLike): Promise; + + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + function truncate(path: PathLike, len?: number): Promise; + + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param handle A `FileHandle`. + * @param len If not specified, defaults to `0`. + */ + function ftruncate(handle: FileHandle, len?: number): Promise; + + /** + * Asynchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function rmdir(path: PathLike, options?: RmDirOptions): Promise; + + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + function rm(path: PathLike, options?: RmOptions): Promise; + + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param handle A `FileHandle`. + */ + function fdatasync(handle: FileHandle): Promise; + + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param handle A `FileHandle`. + */ + function fsync(handle: FileHandle): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir(path: PathLike, options: MakeDirectoryOptions & { recursive: true }): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir( + path: PathLike, + options?: Mode | (MakeDirectoryOptions & { recursive?: false | undefined }) | null, + ): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir(path: PathLike, options?: Mode | MakeDirectoryOptions | null): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options?: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options: { encoding: "buffer"; withFileTypes?: false | undefined } | "buffer", + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options?: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + function readdir(path: PathLike, options: BaseEncodingOptions & { withFileTypes: true }): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options: BufferEncodingOption): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options?: BaseEncodingOptions | string | null): Promise; + + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + function symlink(target: PathLike, path: PathLike, type?: string | null): Promise; + + /** + * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function lstat(path: PathLike, opts?: StatOptions & { bigint?: false | undefined }): Promise; + function lstat(path: PathLike, opts: StatOptions & { bigint: true }): Promise; + function lstat(path: PathLike, opts?: StatOptions): Promise; + + /** + * Asynchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function stat(path: PathLike, opts?: StatOptions & { bigint?: false | undefined }): Promise; + function stat(path: PathLike, opts: StatOptions & { bigint: true }): Promise; + function stat(path: PathLike, opts?: StatOptions): Promise; + + /** + * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function link(existingPath: PathLike, newPath: PathLike): Promise; + + /** + * Asynchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function unlink(path: PathLike): Promise; + + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param handle A `FileHandle`. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function fchmod(handle: FileHandle, mode: Mode): Promise; + + /** + * Asynchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function chmod(path: PathLike, mode: Mode): Promise; + + /** + * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function lchmod(path: PathLike, mode: Mode): Promise; + + /** + * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function lchown(path: PathLike, uid: number, gid: number): Promise; + + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, + * with the difference that if the path refers to a symbolic link, then the link is not + * dereferenced: instead, the timestamps of the symbolic link itself are changed. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function lutimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise; + + /** + * Asynchronous fchown(2) - Change ownership of a file. + * @param handle A `FileHandle`. + */ + function fchown(handle: FileHandle, uid: number, gid: number): Promise; + + /** + * Asynchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function chown(path: PathLike, uid: number, gid: number): Promise; + + /** + * Asynchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function utimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise; + + /** + * Asynchronously change file timestamps of the file referenced by the supplied `FileHandle`. + * @param handle A `FileHandle`. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function futimes(handle: FileHandle, atime: string | number | Date, mtime: string | number | Date): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options: BufferEncodingOption): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options: BufferEncodingOption): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * It is unsafe to call `fsPromises.writeFile()` multiple times on the same file without waiting for the `Promise` to be resolved (or rejected). + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + function writeFile( + path: PathLike | FileHandle, + data: string | Uint8Array, + options?: + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: OpenMode | undefined } + | BufferEncoding + | null, + ): Promise; + + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + function appendFile( + path: PathLike | FileHandle, + data: string | Uint8Array, + options?: + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: OpenMode | undefined } + | BufferEncoding + | null, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options?: { encoding?: null | undefined; flag?: OpenMode | undefined } | null, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options: { encoding: BufferEncoding; flag?: OpenMode | undefined } | BufferEncoding, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options?: BaseEncodingOptions & { flag?: OpenMode | undefined } | BufferEncoding | null, + ): Promise; + + function opendir(path: PathLike, options?: OpenDirOptions): Promise; +} +declare module "node:fs/promises" { + export * from "fs/promises"; +} diff --git a/node_backend/node_modules/@types/node/globals.d.ts b/node_backend/node_modules/@types/node/globals.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9066ed2d036ea84cf062400653298342ab8919a1 --- /dev/null +++ b/node_backend/node_modules/@types/node/globals.d.ts @@ -0,0 +1,765 @@ +// Declare "static" methods in Error +interface ErrorConstructor { + /** Create .stack property on a target object */ + captureStackTrace(targetObject: object, constructorOpt?: Function): void; + + /** + * Optional override for formatting stack traces + * + * @see https://v8.dev/docs/stack-trace-api#customizing-stack-traces + */ + prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; + + stackTraceLimit: number; +} + +// Node.js ESNEXT support +interface String { + /** Removes whitespace from the left end of a string. */ + trimLeft(): string; + /** Removes whitespace from the right end of a string. */ + trimRight(): string; + + /** Returns a copy with leading whitespace removed. */ + trimStart(): string; + /** Returns a copy with trailing whitespace removed. */ + trimEnd(): string; +} + +interface ImportMeta { + url: string; +} + +/*-----------------------------------------------* + * * + * GLOBAL * + * * + ------------------------------------------------*/ + +// For backwards compability +interface NodeRequire extends NodeJS.Require {} +interface RequireResolve extends NodeJS.RequireResolve {} +interface NodeModule extends NodeJS.Module {} + +declare var process: NodeJS.Process; +declare var console: Console; + +declare var __filename: string; +declare var __dirname: string; + +declare function setTimeout(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout; +declare namespace setTimeout { + function __promisify__(ms: number): Promise; + function __promisify__(ms: number, value: T): Promise; +} +declare function clearTimeout(timeoutId: NodeJS.Timeout | string | number | undefined): void; +declare function setInterval(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout; +declare function clearInterval(intervalId: NodeJS.Timeout | string | number | undefined): void; +declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate; +declare namespace setImmediate { + function __promisify__(): Promise; + function __promisify__(value: T): Promise; +} +declare function clearImmediate(immediateId: NodeJS.Immediate | undefined): void; + +declare function queueMicrotask(callback: () => void): void; + +declare var require: NodeRequire; +declare var module: NodeModule; + +// Same as module.exports +declare var exports: any; + +// Buffer class +type BufferEncoding = + | "ascii" + | "utf8" + | "utf-8" + | "utf16le" + | "ucs2" + | "ucs-2" + | "base64" + | "base64url" + | "latin1" + | "binary" + | "hex"; + +type WithImplicitCoercion = T | { valueOf(): T }; + +// #region borrowed +// from https://github.com/microsoft/TypeScript/blob/38da7c600c83e7b31193a62495239a0fe478cb67/lib/lib.webworker.d.ts#L633 until moved to separate lib +/** + * A controller object that allows you to abort one or more DOM requests as and when desired. + * @since v14.7.0 + */ +interface AbortController { + /** + * Returns the AbortSignal object associated with this object. + * @since v14.7.0 + */ + readonly signal: AbortSignal; + /** + * Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. + * @since v14.7.0 + */ + abort(reason?: any): void; +} + +/** + * A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object. + * @since v14.7.0 + */ +interface AbortSignal { + /** + * Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise. + * @since v14.7.0 + */ + readonly aborted: boolean; + readonly reason: any; +} + +declare var AbortController: { + prototype: AbortController; + new(): AbortController; +}; + +declare var AbortSignal: { + prototype: AbortSignal; + new(): AbortSignal; + abort(reason?: any): AbortSignal; + timeout(milliseconds: number): AbortSignal; +}; +// #endregion borrowed + +/** + * Raw data is stored in instances of the Buffer class. + * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. + * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex' + */ +declare class Buffer extends Uint8Array { + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. + */ + constructor(str: string, encoding?: BufferEncoding); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). + */ + constructor(size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + constructor(array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}/{SharedArrayBuffer}. + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. + */ + constructor(arrayBuffer: ArrayBuffer | SharedArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + constructor(array: ReadonlyArray); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + * @deprecated since v10.0.0 - Use `Buffer.from(buffer)` instead. + */ + constructor(buffer: Buffer); + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of any TypedArray or a new ArrayBuffer() + */ + static from( + arrayBuffer: WithImplicitCoercion, + byteOffset?: number, + length?: number, + ): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param data data to create a new Buffer + */ + static from(data: Uint8Array | ReadonlyArray): Buffer; + static from(data: WithImplicitCoercion | string>): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + */ + static from( + str: WithImplicitCoercion | { [Symbol.toPrimitive](hint: "string"): string }, + encoding?: BufferEncoding, + ): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param values to create a new Buffer + */ + static of(...items: number[]): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): encoding is BufferEncoding; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength( + string: string | NodeJS.ArrayBufferView | ArrayBuffer | SharedArrayBuffer, + encoding?: BufferEncoding, + ): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: ReadonlyArray, totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Uint8Array, buf2: Uint8Array): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + static alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; + /** + * This is the number of bytes used to determine the size of pre-allocated, internal Buffer instances used for pooling. This value may be modified. + */ + static poolSize: number; + + write(string: string, encoding?: BufferEncoding): number; + write(string: string, offset: number, encoding?: BufferEncoding): number; + write(string: string, offset: number, length: number, encoding?: BufferEncoding): number; + toString(encoding?: BufferEncoding, start?: number, end?: number): string; + toJSON(): { type: "Buffer"; data: number[] }; + equals(otherBuffer: Uint8Array): boolean; + compare( + otherBuffer: Uint8Array, + targetStart?: number, + targetEnd?: number, + sourceStart?: number, + sourceEnd?: number, + ): number; + copy(targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + /** + * Returns a new `Buffer` that references **the same memory as the original**, but offset and cropped by the start and end indices. + * + * This method is incompatible with `Uint8Array#slice()`, which returns a copy of the original memory. + * + * @param begin Where the new `Buffer` will start. Default: `0`. + * @param end Where the new `Buffer` will end (not inclusive). Default: `buf.length`. + */ + slice(begin?: number, end?: number): Buffer; + /** + * Returns a new `Buffer` that references **the same memory as the original**, but offset and cropped by the start and end indices. + * + * This method is compatible with `Uint8Array#subarray()`. + * + * @param begin Where the new `Buffer` will start. Default: `0`. + * @param end Where the new `Buffer` will end (not inclusive). Default: `buf.length`. + */ + subarray(begin?: number, end?: number): Buffer; + writeBigInt64BE(value: bigint, offset?: number): number; + writeBigInt64LE(value: bigint, offset?: number): number; + writeBigUInt64BE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64BE(value: bigint, offset?: number): number; + writeBigUInt64LE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64LE(value: bigint, offset?: number): number; + writeUIntLE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntLE + * @since v14.9.0, v12.19.0 + */ + writeUintLE(value: number, offset: number, byteLength: number): number; + writeUIntBE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntBE + * @since v14.9.0, v12.19.0 + */ + writeUintBE(value: number, offset: number, byteLength: number): number; + writeIntLE(value: number, offset: number, byteLength: number): number; + writeIntBE(value: number, offset: number, byteLength: number): number; + readBigUInt64BE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + readBigUint64BE(offset?: number): bigint; + readBigUInt64LE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + readBigUint64LE(offset?: number): bigint; + readBigInt64BE(offset?: number): bigint; + readBigInt64LE(offset?: number): bigint; + readUIntLE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntLE + * @since v14.9.0, v12.19.0 + */ + readUintLE(offset: number, byteLength: number): number; + readUIntBE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntBE + * @since v14.9.0, v12.19.0 + */ + readUintBE(offset: number, byteLength: number): number; + readIntLE(offset: number, byteLength: number): number; + readIntBE(offset: number, byteLength: number): number; + readUInt8(offset?: number): number; + /** + * @alias Buffer.readUInt8 + * @since v14.9.0, v12.19.0 + */ + readUint8(offset?: number): number; + readUInt16LE(offset?: number): number; + /** + * @alias Buffer.readUInt16LE + * @since v14.9.0, v12.19.0 + */ + readUint16LE(offset?: number): number; + readUInt16BE(offset?: number): number; + /** + * @alias Buffer.readUInt16BE + * @since v14.9.0, v12.19.0 + */ + readUint16BE(offset?: number): number; + readUInt32LE(offset?: number): number; + /** + * @alias Buffer.readUInt32LE + * @since v14.9.0, v12.19.0 + */ + readUint32LE(offset?: number): number; + readUInt32BE(offset?: number): number; + /** + * @alias Buffer.readUInt32BE + * @since v14.9.0, v12.19.0 + */ + readUint32BE(offset?: number): number; + readInt8(offset?: number): number; + readInt16LE(offset?: number): number; + readInt16BE(offset?: number): number; + readInt32LE(offset?: number): number; + readInt32BE(offset?: number): number; + readFloatLE(offset?: number): number; + readFloatBE(offset?: number): number; + readDoubleLE(offset?: number): number; + readDoubleBE(offset?: number): number; + reverse(): this; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt8 + * @since v14.9.0, v12.19.0 + */ + writeUint8(value: number, offset?: number): number; + writeUInt16LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16LE + * @since v14.9.0, v12.19.0 + */ + writeUint16LE(value: number, offset?: number): number; + writeUInt16BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16BE + * @since v14.9.0, v12.19.0 + */ + writeUint16BE(value: number, offset?: number): number; + writeUInt32LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32LE + * @since v14.9.0, v12.19.0 + */ + writeUint32LE(value: number, offset?: number): number; + writeUInt32BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32BE + * @since v14.9.0, v12.19.0 + */ + writeUint32BE(value: number, offset?: number): number; + writeInt8(value: number, offset?: number): number; + writeInt16LE(value: number, offset?: number): number; + writeInt16BE(value: number, offset?: number): number; + writeInt32LE(value: number, offset?: number): number; + writeInt32BE(value: number, offset?: number): number; + writeFloatLE(value: number, offset?: number): number; + writeFloatBE(value: number, offset?: number): number; + writeDoubleLE(value: number, offset?: number): number; + writeDoubleBE(value: number, offset?: number): number; + + fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this; + + indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + entries(): IterableIterator<[number, number]>; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean; + keys(): IterableIterator; + values(): IterableIterator; +} + +/*----------------------------------------------* +* * +* GLOBAL INTERFACES * +* * +*-----------------------------------------------*/ +declare namespace NodeJS { + interface InspectOptions { + /** + * If set to `true`, getters are going to be + * inspected as well. If set to `'get'` only getters without setter are going + * to be inspected. If set to `'set'` only getters having a corresponding + * setter are going to be inspected. This might cause side effects depending on + * the getter function. + * @default `false` + */ + getters?: "get" | "set" | boolean | undefined; + showHidden?: boolean | undefined; + /** + * @default 2 + */ + depth?: number | null | undefined; + colors?: boolean | undefined; + customInspect?: boolean | undefined; + showProxy?: boolean | undefined; + maxArrayLength?: number | null | undefined; + /** + * Specifies the maximum number of characters to + * include when formatting. Set to `null` or `Infinity` to show all elements. + * Set to `0` or negative to show no characters. + * @default Infinity + */ + maxStringLength?: number | null | undefined; + breakLength?: number | undefined; + /** + * Setting this to `false` causes each object key + * to be displayed on a new line. It will also add new lines to text that is + * longer than `breakLength`. If set to a number, the most `n` inner elements + * are united on a single line as long as all properties fit into + * `breakLength`. Short array elements are also grouped together. Note that no + * text will be reduced below 16 characters, no matter the `breakLength` size. + * For more information, see the example below. + * @default `true` + */ + compact?: boolean | number | undefined; + sorted?: boolean | ((a: string, b: string) => number) | undefined; + } + + interface CallSite { + /** + * Value of "this" + */ + getThis(): any; + + /** + * Type of "this" as a string. + * This is the name of the function stored in the constructor field of + * "this", if available. Otherwise the object's [[Class]] internal + * property. + */ + getTypeName(): string | null; + + /** + * Current function + */ + getFunction(): Function | undefined; + + /** + * Name of the current function, typically its name property. + * If a name property is not available an attempt will be made to try + * to infer a name from the function's context. + */ + getFunctionName(): string | null; + + /** + * Name of the property [of "this" or one of its prototypes] that holds + * the current function + */ + getMethodName(): string | null; + + /** + * Name of the script [if this function was defined in a script] + */ + getFileName(): string | undefined; + + /** + * Current line number [if this function was defined in a script] + */ + getLineNumber(): number | null; + + /** + * Current column number [if this function was defined in a script] + */ + getColumnNumber(): number | null; + + /** + * A call site object representing the location where eval was called + * [if this function was created using a call to eval] + */ + getEvalOrigin(): string | undefined; + + /** + * Is this a toplevel invocation, that is, is "this" the global object? + */ + isToplevel(): boolean; + + /** + * Does this call take place in code defined by a call to eval? + */ + isEval(): boolean; + + /** + * Is this call in native V8 code? + */ + isNative(): boolean; + + /** + * Is this a constructor call? + */ + isConstructor(): boolean; + } + + interface ErrnoException extends Error { + errno?: number | undefined; + code?: string | undefined; + path?: string | undefined; + syscall?: string | undefined; + } + + interface ReadableStream extends EventEmitter { + readable: boolean; + read(size?: number): string | Buffer; + setEncoding(encoding: BufferEncoding): this; + pause(): this; + resume(): this; + isPaused(): boolean; + pipe(destination: T, options?: { end?: boolean | undefined }): T; + unpipe(destination?: WritableStream): this; + unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void; + wrap(oldStream: ReadableStream): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + interface WritableStream extends EventEmitter { + writable: boolean; + write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; + write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; + end(cb?: () => void): this; + end(data: string | Uint8Array, cb?: () => void): this; + end(str: string, encoding?: BufferEncoding, cb?: () => void): this; + } + + interface ReadWriteStream extends ReadableStream, WritableStream {} + + interface Global { + Array: typeof Array; + ArrayBuffer: typeof ArrayBuffer; + Boolean: typeof Boolean; + Buffer: typeof Buffer; + DataView: typeof DataView; + Date: typeof Date; + Error: typeof Error; + EvalError: typeof EvalError; + Float32Array: typeof Float32Array; + Float64Array: typeof Float64Array; + Function: typeof Function; + Infinity: typeof Infinity; + Int16Array: typeof Int16Array; + Int32Array: typeof Int32Array; + Int8Array: typeof Int8Array; + Intl: typeof Intl; + JSON: typeof JSON; + Map: MapConstructor; + Math: typeof Math; + NaN: typeof NaN; + Number: typeof Number; + Object: typeof Object; + Promise: typeof Promise; + RangeError: typeof RangeError; + ReferenceError: typeof ReferenceError; + RegExp: typeof RegExp; + Set: SetConstructor; + String: typeof String; + Symbol: Function; + SyntaxError: typeof SyntaxError; + TypeError: typeof TypeError; + URIError: typeof URIError; + Uint16Array: typeof Uint16Array; + Uint32Array: typeof Uint32Array; + Uint8Array: typeof Uint8Array; + Uint8ClampedArray: typeof Uint8ClampedArray; + WeakMap: WeakMapConstructor; + WeakSet: WeakSetConstructor; + clearImmediate: (immediateId: Immediate) => void; + clearInterval: (intervalId: Timeout) => void; + clearTimeout: (timeoutId: Timeout) => void; + decodeURI: typeof decodeURI; + decodeURIComponent: typeof decodeURIComponent; + encodeURI: typeof encodeURI; + encodeURIComponent: typeof encodeURIComponent; + escape: (str: string) => string; + eval: typeof eval; + global: Global; + isFinite: typeof isFinite; + isNaN: typeof isNaN; + parseFloat: typeof parseFloat; + parseInt: typeof parseInt; + setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => Immediate; + setInterval: (callback: (...args: any[]) => void, ms?: number, ...args: any[]) => Timeout; + setTimeout: (callback: (...args: any[]) => void, ms?: number, ...args: any[]) => Timeout; + queueMicrotask: typeof queueMicrotask; + undefined: typeof undefined; + unescape: (str: string) => string; + gc: () => void; + v8debug?: any; + } + + interface RefCounted { + ref(): this; + unref(): this; + } + + // compatibility with older typings + interface Timer extends RefCounted { + hasRef(): boolean; + refresh(): this; + [Symbol.toPrimitive](): number; + } + + interface Immediate extends RefCounted { + hasRef(): boolean; + _onImmediate: Function; // to distinguish it from the Timeout class + } + + interface Timeout extends Timer { + hasRef(): boolean; + refresh(): this; + [Symbol.toPrimitive](): number; + } + + type TypedArray = + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | Int8Array + | Int16Array + | Int32Array + | BigUint64Array + | BigInt64Array + | Float32Array + | Float64Array; + type ArrayBufferView = TypedArray | DataView; + + interface Require { + (id: string): any; + resolve: RequireResolve; + cache: Dict; + /** + * @deprecated + */ + extensions: RequireExtensions; + main: Module | undefined; + } + + interface RequireResolve { + (id: string, options?: { paths?: string[] | undefined }): string; + paths(request: string): string[] | null; + } + + interface RequireExtensions extends Dict<(m: Module, filename: string) => any> { + ".js": (m: Module, filename: string) => any; + ".json": (m: Module, filename: string) => any; + ".node": (m: Module, filename: string) => any; + } + interface Module { + exports: any; + require: Require; + id: string; + filename: string; + loaded: boolean; + /** @deprecated since v14.6.0 Please use `require.main` and `module.children` instead. */ + parent: Module | null | undefined; + children: Module[]; + /** + * @since v11.14.0 + * + * The directory name of the module. This is usually the same as the path.dirname() of the module.id. + */ + path: string; + paths: string[]; + } + + interface Dict { + [key: string]: T | undefined; + } + + interface ReadOnlyDict { + readonly [key: string]: T | undefined; + } +} diff --git a/node_backend/node_modules/@types/node/globals.global.d.ts b/node_backend/node_modules/@types/node/globals.global.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d66acba63e02eb36050bc8f3aecee5ef421f36c5 --- /dev/null +++ b/node_backend/node_modules/@types/node/globals.global.d.ts @@ -0,0 +1 @@ +declare var global: NodeJS.Global & typeof globalThis; diff --git a/node_backend/node_modules/@types/node/http.d.ts b/node_backend/node_modules/@types/node/http.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b13680ad13157fe8a3b1cd4f976ad89a28ce10e9 --- /dev/null +++ b/node_backend/node_modules/@types/node/http.d.ts @@ -0,0 +1,581 @@ +declare module "http" { + import * as stream from "stream"; + import { URL } from "url"; + import { EventEmitter } from "events"; + import { LookupFunction, Server as NetServer, Socket } from "net"; + + // incoming headers will never contain number + interface IncomingHttpHeaders extends NodeJS.Dict { + "accept"?: string | undefined; + "accept-language"?: string | undefined; + "accept-patch"?: string | undefined; + "accept-ranges"?: string | undefined; + "access-control-allow-credentials"?: string | undefined; + "access-control-allow-headers"?: string | undefined; + "access-control-allow-methods"?: string | undefined; + "access-control-allow-origin"?: string | undefined; + "access-control-expose-headers"?: string | undefined; + "access-control-max-age"?: string | undefined; + "access-control-request-headers"?: string | undefined; + "access-control-request-method"?: string | undefined; + "age"?: string | undefined; + "allow"?: string | undefined; + "alt-svc"?: string | undefined; + "authorization"?: string | undefined; + "cache-control"?: string | undefined; + "connection"?: string | undefined; + "content-disposition"?: string | undefined; + "content-encoding"?: string | undefined; + "content-language"?: string | undefined; + "content-length"?: string | undefined; + "content-location"?: string | undefined; + "content-range"?: string | undefined; + "content-type"?: string | undefined; + "cookie"?: string | undefined; + "date"?: string | undefined; + "etag"?: string | undefined; + "expect"?: string | undefined; + "expires"?: string | undefined; + "forwarded"?: string | undefined; + "from"?: string | undefined; + "host"?: string | undefined; + "if-match"?: string | undefined; + "if-modified-since"?: string | undefined; + "if-none-match"?: string | undefined; + "if-unmodified-since"?: string | undefined; + "last-modified"?: string | undefined; + "location"?: string | undefined; + "origin"?: string | undefined; + "pragma"?: string | undefined; + "proxy-authenticate"?: string | undefined; + "proxy-authorization"?: string | undefined; + "public-key-pins"?: string | undefined; + "range"?: string | undefined; + "referer"?: string | undefined; + "retry-after"?: string | undefined; + "sec-websocket-accept"?: string | undefined; + "sec-websocket-extensions"?: string | undefined; + "sec-websocket-key"?: string | undefined; + "sec-websocket-protocol"?: string | undefined; + "sec-websocket-version"?: string | undefined; + "set-cookie"?: string[] | undefined; + "strict-transport-security"?: string | undefined; + "tk"?: string | undefined; + "trailer"?: string | undefined; + "transfer-encoding"?: string | undefined; + "upgrade"?: string | undefined; + "user-agent"?: string | undefined; + "vary"?: string | undefined; + "via"?: string | undefined; + "warning"?: string | undefined; + "www-authenticate"?: string | undefined; + } + + // outgoing headers allows numbers (as they are converted internally to strings) + type OutgoingHttpHeader = number | string | string[]; + + interface OutgoingHttpHeaders extends NodeJS.Dict {} + + interface ClientRequestArgs { + protocol?: string | null | undefined; + host?: string | null | undefined; + hostname?: string | null | undefined; + family?: number | undefined; + port?: number | string | null | undefined; + defaultPort?: number | string | undefined; + localAddress?: string | undefined; + socketPath?: string | undefined; + /** + * @default 8192 + */ + maxHeaderSize?: number | undefined; + method?: string | undefined; + path?: string | null | undefined; + headers?: OutgoingHttpHeaders | undefined; + auth?: string | null | undefined; + agent?: Agent | boolean | undefined; + _defaultAgent?: Agent | undefined; + timeout?: number | undefined; + setHost?: boolean | undefined; + // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278 + createConnection?: + | ((options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket) + | undefined; + lookup?: LookupFunction | undefined; + } + + interface ServerOptions< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > { + IncomingMessage?: Request | undefined; + ServerResponse?: Response | undefined; + /** + * Optionally overrides the value of + * [`--max-http-header-size`][] for requests received by this server, i.e. + * the maximum length of request headers in bytes. + * @default 8192 + */ + maxHeaderSize?: number | undefined; + /** + * Use an insecure HTTP parser that accepts invalid HTTP headers when true. + * Using the insecure parser should be avoided. + * See --insecure-http-parser for more information. + * @default false + */ + insecureHTTPParser?: boolean | undefined; + } + + type RequestListener< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > = (req: InstanceType, res: InstanceType) => void; + + class Server< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > extends NetServer { + constructor(requestListener?: RequestListener); + constructor(options: ServerOptions, requestListener?: RequestListener); + setTimeout(msecs?: number, callback?: () => void): this; + setTimeout(callback: () => void): this; + /** + * Limits maximum incoming headers count. If set to 0, no limit will be applied. + * @default 2000 + * {@link https://nodejs.org/api/http.html#http_server_maxheaderscount} + */ + maxHeadersCount: number | null; + timeout: number; + /** + * Limit the amount of time the parser will wait to receive the complete HTTP headers. + * @default 60000 + * {@link https://nodejs.org/api/http.html#http_server_headerstimeout} + */ + headersTimeout: number; + keepAliveTimeout: number; + /** + * Sets the timeout value in milliseconds for receiving the entire request from the client. + * @default 0 + * {@link https://nodejs.org/api/http.html#http_server_requesttimeout} + */ + requestTimeout: number; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "checkContinue", listener: RequestListener): this; + addListener(event: "checkExpectation", listener: RequestListener): this; + addListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + addListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + addListener(event: "request", listener: RequestListener): this; + addListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + emit(event: string, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "checkContinue", req: InstanceType, res: InstanceType): boolean; + emit(event: "checkExpectation", req: InstanceType, res: InstanceType): boolean; + emit(event: "clientError", err: Error, socket: stream.Duplex): boolean; + emit(event: "connect", req: InstanceType, socket: stream.Duplex, head: Buffer): boolean; + emit(event: "request", req: InstanceType, res: InstanceType): boolean; + emit(event: "upgrade", req: InstanceType, socket: stream.Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "checkContinue", listener: RequestListener): this; + on(event: "checkExpectation", listener: RequestListener): this; + on(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + on(event: "connect", listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void): this; + on(event: "request", listener: RequestListener): this; + on(event: "upgrade", listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "checkContinue", listener: RequestListener): this; + once(event: "checkExpectation", listener: RequestListener): this; + once(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + once( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + once(event: "request", listener: RequestListener): this; + once( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "checkContinue", listener: RequestListener): this; + prependListener(event: "checkExpectation", listener: RequestListener): this; + prependListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + prependListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependListener(event: "request", listener: RequestListener): this; + prependListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "checkContinue", listener: RequestListener): this; + prependOnceListener(event: "checkExpectation", listener: RequestListener): this; + prependOnceListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + prependOnceListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: "request", listener: RequestListener): this; + prependOnceListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + } + + // https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js + class OutgoingMessage extends stream.Writable { + upgrading: boolean; + chunkedEncoding: boolean; + shouldKeepAlive: boolean; + useChunkedEncodingByDefault: boolean; + sendDate: boolean; + /** + * @deprecated Use `writableEnded` instead. + */ + finished: boolean; + headersSent: boolean; + /** + * @deprecated Use `socket` instead. + */ + connection: Socket | null; + socket: Socket | null; + + constructor(); + + setTimeout(msecs: number, callback?: () => void): this; + setHeader(name: string, value: number | string | ReadonlyArray): this; + getHeader(name: string): number | string | string[] | undefined; + getHeaders(): OutgoingHttpHeaders; + getHeaderNames(): string[]; + hasHeader(name: string): boolean; + removeHeader(name: string): void; + addTrailers(headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void; + flushHeaders(): void; + } + + // https://github.com/nodejs/node/blob/master/lib/_http_server.js#L108-L256 + class ServerResponse extends OutgoingMessage { + statusCode: number; + statusMessage: string; + + constructor(req: IncomingMessage); + + assignSocket(socket: Socket): void; + detachSocket(socket: Socket): void; + // https://github.com/nodejs/node/blob/master/test/parallel/test-http-write-callbacks.js#L53 + // no args in writeContinue callback + writeContinue(callback?: () => void): void; + writeHead( + statusCode: number, + statusMessage?: string, + headers?: OutgoingHttpHeaders | OutgoingHttpHeader[], + ): this; + writeHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[]): this; + writeProcessing(): void; + } + + interface InformationEvent { + statusCode: number; + statusMessage: string; + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + headers: IncomingHttpHeaders; + rawHeaders: string[]; + } + + // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L77 + class ClientRequest extends OutgoingMessage { + aborted: boolean; + host: string; + protocol: string; + reusedSocket: boolean; + maxHeadersCount: number; + + constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void); + + method: string; + path: string; + /** @deprecated since v14.1.0 Use `request.destroy()` instead. */ + abort(): void; + onSocket(socket: Socket): void; + setTimeout(timeout: number, callback?: () => void): this; + setNoDelay(noDelay?: boolean): void; + setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; + + addListener(event: "abort", listener: () => void): this; + addListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + addListener(event: "continue", listener: () => void): this; + addListener(event: "information", listener: (info: InformationEvent) => void): this; + addListener(event: "response", listener: (response: IncomingMessage) => void): this; + addListener(event: "socket", listener: (socket: Socket) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + on(event: "abort", listener: () => void): this; + on(event: "connect", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: "continue", listener: () => void): this; + on(event: "information", listener: (info: InformationEvent) => void): this; + on(event: "response", listener: (response: IncomingMessage) => void): this; + on(event: "socket", listener: (socket: Socket) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: "upgrade", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "abort", listener: () => void): this; + once(event: "connect", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: "continue", listener: () => void): this; + once(event: "information", listener: (info: InformationEvent) => void): this; + once(event: "response", listener: (response: IncomingMessage) => void): this; + once(event: "socket", listener: (socket: Socket) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: "upgrade", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "abort", listener: () => void): this; + prependListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependListener(event: "continue", listener: () => void): this; + prependListener(event: "information", listener: (info: InformationEvent) => void): this; + prependListener(event: "response", listener: (response: IncomingMessage) => void): this; + prependListener(event: "socket", listener: (socket: Socket) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "abort", listener: () => void): this; + prependOnceListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependOnceListener(event: "continue", listener: () => void): this; + prependOnceListener(event: "information", listener: (info: InformationEvent) => void): this; + prependOnceListener(event: "response", listener: (response: IncomingMessage) => void): this; + prependOnceListener(event: "socket", listener: (socket: Socket) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + class IncomingMessage extends stream.Readable { + constructor(socket: Socket); + + aborted: boolean; + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + complete: boolean; + /** + * @deprecated since v13.0.0 - Use `socket` instead. + */ + connection: Socket; + socket: Socket; + headers: IncomingHttpHeaders; + rawHeaders: string[]; + trailers: NodeJS.Dict; + rawTrailers: string[]; + setTimeout(msecs: number, callback?: () => void): this; + /** + * Only valid for request obtained from http.Server. + */ + method?: string | undefined; + /** + * Only valid for request obtained from http.Server. + */ + url?: string | undefined; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusCode?: number | undefined; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusMessage?: string | undefined; + destroy(error?: Error): this; + } + + interface AgentOptions { + /** + * Keep sockets around in a pool to be used by other requests in the future. Default = false + */ + keepAlive?: boolean | undefined; + /** + * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. + * Only relevant if keepAlive is set to true. + */ + keepAliveMsecs?: number | undefined; + /** + * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity + */ + maxSockets?: number | undefined; + /** + * Maximum number of sockets allowed for all hosts in total. Each request will use a new socket until the maximum is reached. Default: Infinity. + */ + maxTotalSockets?: number | undefined; + /** + * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. + */ + maxFreeSockets?: number | undefined; + /** + * Socket timeout in milliseconds. This will set the timeout after the socket is connected. + */ + timeout?: number | undefined; + /** + * Scheduling strategy to apply when picking the next free socket to use. Default: 'fifo'. + */ + scheduling?: "fifo" | "lifo" | undefined; + } + + class Agent extends EventEmitter { + maxFreeSockets: number; + maxSockets: number; + maxTotalSockets: number; + readonly freeSockets: NodeJS.ReadOnlyDict; + readonly sockets: NodeJS.ReadOnlyDict; + readonly requests: NodeJS.ReadOnlyDict; + + constructor(opts?: AgentOptions); + + /** + * Destroy any sockets that are currently in use by the agent. + * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled, + * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise, + * sockets may hang open for quite a long time before the server terminates them. + */ + destroy(): void; + } + + const METHODS: string[]; + + const STATUS_CODES: { + [errorCode: number]: string | undefined; + [errorCode: string]: string | undefined; + }; + + function createServer< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + >(requestListener?: RequestListener): Server; + function createServer< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + >( + options: ServerOptions, + requestListener?: RequestListener, + ): Server; + + // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly, + // create interface RequestOptions would make the naming more clear to developers + interface RequestOptions extends ClientRequestArgs {} + function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function request( + url: string | URL, + options: RequestOptions, + callback?: (res: IncomingMessage) => void, + ): ClientRequest; + function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; + + /** + * Performs the low-level validations on the provided name that are done when `res.setHeader(name, value)` is called. + * Passing illegal value as name will result in a TypeError being thrown, identified by `code: 'ERR_INVALID_HTTP_TOKEN'`. + * @param name Header name + * @since v14.3.0 + */ + function validateHeaderName(name: string): void; + /** + * Performs the low-level validations on the provided value that are done when `res.setHeader(name, value)` is called. + * Passing illegal value as value will result in a TypeError being thrown. + * - Undefined value error is identified by `code: 'ERR_HTTP_INVALID_HEADER_VALUE'`. + * - Invalid value character error is identified by `code: 'ERR_INVALID_CHAR'`. + * @param name Header name + * @param value Header value + * @since v14.3.0 + */ + function validateHeaderValue(name: string, value: string): void; + + let globalAgent: Agent; + + /** + * Read-only property specifying the maximum allowed size of HTTP headers in bytes. + * Defaults to 16KB. Configurable using the [`--max-http-header-size`][] CLI option. + */ + const maxHeaderSize: number; +} +declare module "node:http" { + export * from "http"; +} diff --git a/node_backend/node_modules/@types/node/http2.d.ts b/node_backend/node_modules/@types/node/http2.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b63302bbcd648baddf6c90ff6a45f766acdf1b92 --- /dev/null +++ b/node_backend/node_modules/@types/node/http2.d.ts @@ -0,0 +1,1208 @@ +declare module "http2" { + import EventEmitter = require("events"); + import * as fs from "fs"; + import * as net from "net"; + import * as stream from "stream"; + import * as tls from "tls"; + import * as url from "url"; + + import { + IncomingHttpHeaders as Http1IncomingHttpHeaders, + IncomingMessage, + OutgoingHttpHeaders, + ServerResponse, + } from "http"; + export { OutgoingHttpHeaders } from "http"; + + export interface IncomingHttpStatusHeader { + ":status"?: number | undefined; + } + + export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders { + ":path"?: string | undefined; + ":method"?: string | undefined; + ":authority"?: string | undefined; + ":scheme"?: string | undefined; + } + + // Http2Stream + + export interface StreamPriorityOptions { + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + silent?: boolean | undefined; + } + + export interface StreamState { + localWindowSize?: number | undefined; + state?: number | undefined; + localClose?: number | undefined; + remoteClose?: number | undefined; + sumDependencyWeight?: number | undefined; + weight?: number | undefined; + } + + export interface ServerStreamResponseOptions { + endStream?: boolean | undefined; + waitForTrailers?: boolean | undefined; + } + + export interface StatOptions { + offset: number; + length: number; + } + + export interface ServerStreamFileResponseOptions { + statCheck?(stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions): void | boolean; + waitForTrailers?: boolean | undefined; + offset?: number | undefined; + length?: number | undefined; + } + + export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions { + onError?(err: NodeJS.ErrnoException): void; + } + + export interface Http2Stream extends stream.Duplex { + readonly aborted: boolean; + readonly bufferSize: number; + readonly closed: boolean; + readonly destroyed: boolean; + /** + * Set the true if the END_STREAM flag was set in the request or response HEADERS frame received, + * indicating that no additional data should be received and the readable side of the Http2Stream will be closed. + */ + readonly endAfterHeaders: boolean; + readonly id?: number | undefined; + readonly pending: boolean; + readonly rstCode: number; + readonly sentHeaders: OutgoingHttpHeaders; + readonly sentInfoHeaders?: OutgoingHttpHeaders[] | undefined; + readonly sentTrailers?: OutgoingHttpHeaders | undefined; + readonly session: Http2Session | undefined; + readonly state: StreamState; + + close(code?: number, callback?: () => void): void; + priority(options: StreamPriorityOptions): void; + setTimeout(msecs: number, callback?: () => void): void; + sendTrailers(headers: OutgoingHttpHeaders): void; + + addListener(event: "aborted", listener: () => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: "streamClosed", listener: (code: number) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + addListener(event: "wantTrailers", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "aborted"): boolean; + emit(event: "close"): boolean; + emit(event: "data", chunk: Buffer | string): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "frameError", frameType: number, errorCode: number): boolean; + emit(event: "pipe", src: stream.Readable): boolean; + emit(event: "unpipe", src: stream.Readable): boolean; + emit(event: "streamClosed", code: number): boolean; + emit(event: "timeout"): boolean; + emit(event: "trailers", trailers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "wantTrailers"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "aborted", listener: () => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: "streamClosed", listener: (code: number) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + on(event: "wantTrailers", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "aborted", listener: () => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: "streamClosed", listener: (code: number) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + once(event: "wantTrailers", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "aborted", listener: () => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "streamClosed", listener: (code: number) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependListener(event: "wantTrailers", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "aborted", listener: () => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "streamClosed", listener: (code: number) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener(event: "wantTrailers", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export interface ClientHttp2Stream extends Http2Stream { + addListener(event: "continue", listener: () => {}): this; + addListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + addListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + addListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "continue"): boolean; + emit(event: "headers", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: "push", headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "response", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "continue", listener: () => {}): this; + on( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + on(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + on( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "continue", listener: () => {}): this; + once( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + once(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + once( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "continue", listener: () => {}): this; + prependListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "continue", listener: () => {}): this; + prependOnceListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependOnceListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export interface ServerHttp2Stream extends Http2Stream { + readonly headersSent: boolean; + readonly pushAllowed: boolean; + additionalHeaders(headers: OutgoingHttpHeaders): void; + pushStream( + headers: OutgoingHttpHeaders, + callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, + ): void; + pushStream( + headers: OutgoingHttpHeaders, + options?: StreamPriorityOptions, + callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, + ): void; + respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void; + respondWithFD( + fd: number | fs.promises.FileHandle, + headers?: OutgoingHttpHeaders, + options?: ServerStreamFileResponseOptions, + ): void; + respondWithFile( + path: string, + headers?: OutgoingHttpHeaders, + options?: ServerStreamFileResponseOptionsWithError, + ): void; + } + + // Http2Session + + export interface Settings { + headerTableSize?: number | undefined; + enablePush?: boolean | undefined; + initialWindowSize?: number | undefined; + maxFrameSize?: number | undefined; + maxConcurrentStreams?: number | undefined; + maxHeaderListSize?: number | undefined; + enableConnectProtocol?: boolean | undefined; + } + + export interface ClientSessionRequestOptions { + endStream?: boolean | undefined; + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + waitForTrailers?: boolean | undefined; + signal?: AbortSignal | undefined; + } + + export interface SessionState { + effectiveLocalWindowSize?: number | undefined; + effectiveRecvDataLength?: number | undefined; + nextStreamID?: number | undefined; + localWindowSize?: number | undefined; + lastProcStreamID?: number | undefined; + remoteWindowSize?: number | undefined; + outboundQueueSize?: number | undefined; + deflateDynamicTableSize?: number | undefined; + inflateDynamicTableSize?: number | undefined; + } + + export interface Http2Session extends EventEmitter { + readonly alpnProtocol?: string | undefined; + readonly closed: boolean; + readonly connecting: boolean; + readonly destroyed: boolean; + readonly encrypted?: boolean | undefined; + readonly localSettings: Settings; + readonly originSet?: string[] | undefined; + readonly pendingSettingsAck: boolean; + readonly remoteSettings: Settings; + readonly socket: net.Socket | tls.TLSSocket; + readonly state: SessionState; + readonly type: number; + + close(callback?: () => void): void; + destroy(error?: Error, code?: number): void; + goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void; + ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean; + ping( + payload: NodeJS.ArrayBufferView, + callback: (err: Error | null, duration: number, payload: Buffer) => void, + ): boolean; + ref(): void; + setLocalWindowSize(windowSize: number): void; + setTimeout(msecs: number, callback?: () => void): void; + settings( + settings: Settings, + callback?: (err: Error | null, settings: Settings, duration: number) => void, + ): void; + unref(): void; + + addListener(event: "close", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + addListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + addListener(event: "localSettings", listener: (settings: Settings) => void): this; + addListener(event: "ping", listener: () => void): this; + addListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "frameError", frameType: number, errorCode: number, streamID: number): boolean; + emit(event: "goaway", errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean; + emit(event: "localSettings", settings: Settings): boolean; + emit(event: "ping"): boolean; + emit(event: "remoteSettings", settings: Settings): boolean; + emit(event: "timeout"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; + on(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + on(event: "localSettings", listener: (settings: Settings) => void): this; + on(event: "ping", listener: () => void): this; + on(event: "remoteSettings", listener: (settings: Settings) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; + once(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + once(event: "localSettings", listener: (settings: Settings) => void): this; + once(event: "ping", listener: () => void): this; + once(event: "remoteSettings", listener: (settings: Settings) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + prependListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + prependListener(event: "localSettings", listener: (settings: Settings) => void): this; + prependListener(event: "ping", listener: () => void): this; + prependListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + prependOnceListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + prependOnceListener(event: "localSettings", listener: (settings: Settings) => void): this; + prependOnceListener(event: "ping", listener: () => void): this; + prependOnceListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export interface ClientHttp2Session extends Http2Session { + request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream; + + addListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + addListener(event: "origin", listener: (origins: string[]) => void): this; + addListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + addListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "altsvc", alt: string, origin: string, stream: number): boolean; + emit(event: "origin", origins: ReadonlyArray): boolean; + emit(event: "connect", session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit( + event: "stream", + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + on(event: "origin", listener: (origins: string[]) => void): this; + on(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + once(event: "origin", listener: (origins: string[]) => void): this; + once( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + once( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + prependListener(event: "origin", listener: (origins: string[]) => void): this; + prependListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + prependOnceListener(event: "origin", listener: (origins: string[]) => void): this; + prependOnceListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependOnceListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export interface AlternativeServiceOptions { + origin: number | string | url.URL; + } + + export interface ServerHttp2Session extends Http2Session { + readonly server: Http2Server | Http2SecureServer; + + altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void; + origin(...args: Array): void; + + addListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "connect", session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + // Http2Server + + export interface SessionOptions { + maxDeflateDynamicTableSize?: number | undefined; + maxSessionMemory?: number | undefined; + maxHeaderListPairs?: number | undefined; + maxOutstandingPings?: number | undefined; + maxSendHeaderBlockLength?: number | undefined; + paddingStrategy?: number | undefined; + peerMaxConcurrentStreams?: number | undefined; + settings?: Settings | undefined; + + selectPadding?(frameLen: number, maxFrameLen: number): number; + } + + export interface ClientSessionOptions extends SessionOptions { + maxReservedRemoteStreams?: number | undefined; + createConnection?: ((authority: url.URL, option: SessionOptions) => stream.Duplex) | undefined; + protocol?: "http:" | "https:" | undefined; + } + + export interface ServerSessionOptions extends SessionOptions { + Http1IncomingMessage?: typeof IncomingMessage | undefined; + Http1ServerResponse?: typeof ServerResponse | undefined; + Http2ServerRequest?: typeof Http2ServerRequest | undefined; + Http2ServerResponse?: typeof Http2ServerResponse | undefined; + } + + export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions {} + export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions {} + + export interface ServerOptions extends ServerSessionOptions {} + + export interface SecureServerOptions extends SecureServerSessionOptions { + allowHTTP1?: boolean | undefined; + origins?: string[] | undefined; + } + + export interface Http2Server extends net.Server { + addListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + addListener(event: "sessionError", listener: (err: Error) => void): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "session", session: ServerHttp2Session): boolean; + emit(event: "sessionError", err: Error): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "timeout"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: "session", listener: (session: ServerHttp2Session) => void): this; + on(event: "sessionError", listener: (err: Error) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: "timeout", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: "session", listener: (session: ServerHttp2Session) => void): this; + once(event: "sessionError", listener: (err: Error) => void): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: "timeout", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependListener(event: "sessionError", listener: (err: Error) => void): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + setTimeout(msec?: number, callback?: () => void): this; + } + + export interface Http2SecureServer extends tls.Server { + addListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + addListener(event: "sessionError", listener: (err: Error) => void): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "session", session: ServerHttp2Session): boolean; + emit(event: "sessionError", err: Error): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "timeout"): boolean; + emit(event: "unknownProtocol", socket: tls.TLSSocket): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: "session", listener: (session: ServerHttp2Session) => void): this; + on(event: "sessionError", listener: (err: Error) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: "timeout", listener: () => void): this; + on(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: "session", listener: (session: ServerHttp2Session) => void): this; + once(event: "sessionError", listener: (err: Error) => void): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: "timeout", listener: () => void): this; + once(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependListener(event: "sessionError", listener: (err: Error) => void): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + setTimeout(msec?: number, callback?: () => void): this; + } + + export class Http2ServerRequest extends stream.Readable { + constructor( + stream: ServerHttp2Stream, + headers: IncomingHttpHeaders, + options: stream.ReadableOptions, + rawHeaders: ReadonlyArray, + ); + + readonly aborted: boolean; + readonly authority: string; + readonly connection: net.Socket | tls.TLSSocket; + readonly complete: boolean; + readonly headers: IncomingHttpHeaders; + readonly httpVersion: string; + readonly httpVersionMinor: number; + readonly httpVersionMajor: number; + readonly method: string; + readonly rawHeaders: string[]; + readonly rawTrailers: string[]; + readonly scheme: string; + readonly socket: net.Socket | tls.TLSSocket; + readonly stream: ServerHttp2Stream; + readonly trailers: IncomingHttpHeaders; + url: string; + + setTimeout(msecs: number, callback?: () => void): void; + read(size?: number): Buffer | string | null; + + addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "aborted", hadError: boolean, code: number): boolean; + emit(event: "close"): boolean; + emit(event: "data", chunk: Buffer | string): boolean; + emit(event: "end"): boolean; + emit(event: "readable"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "end", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "end", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export class Http2ServerResponse extends stream.Writable { + constructor(stream: ServerHttp2Stream); + + readonly connection: net.Socket | tls.TLSSocket; + readonly finished: boolean; + readonly headersSent: boolean; + readonly socket: net.Socket | tls.TLSSocket; + readonly stream: ServerHttp2Stream; + sendDate: boolean; + statusCode: number; + statusMessage: ""; + addTrailers(trailers: OutgoingHttpHeaders): void; + end(callback?: () => void): this; + end(data: string | Uint8Array, callback?: () => void): this; + end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): this; + getHeader(name: string): string; + getHeaderNames(): string[]; + getHeaders(): OutgoingHttpHeaders; + hasHeader(name: string): boolean; + removeHeader(name: string): void; + setHeader(name: string, value: number | string | ReadonlyArray): void; + setTimeout(msecs: number, callback?: () => void): void; + write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean; + write(chunk: string | Uint8Array, encoding: BufferEncoding, callback?: (err: Error) => void): boolean; + writeContinue(): void; + writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this; + writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders): this; + createPushResponse( + headers: OutgoingHttpHeaders, + callback: (err: Error | null, res: Http2ServerResponse) => void, + ): void; + + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "drain"): boolean; + emit(event: "error", error: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pipe", src: stream.Readable): boolean; + emit(event: "unpipe", src: stream.Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + // Public API + + export namespace constants { + const NGHTTP2_SESSION_SERVER: number; + const NGHTTP2_SESSION_CLIENT: number; + const NGHTTP2_STREAM_STATE_IDLE: number; + const NGHTTP2_STREAM_STATE_OPEN: number; + const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number; + const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number; + const NGHTTP2_STREAM_STATE_CLOSED: number; + const NGHTTP2_NO_ERROR: number; + const NGHTTP2_PROTOCOL_ERROR: number; + const NGHTTP2_INTERNAL_ERROR: number; + const NGHTTP2_FLOW_CONTROL_ERROR: number; + const NGHTTP2_SETTINGS_TIMEOUT: number; + const NGHTTP2_STREAM_CLOSED: number; + const NGHTTP2_FRAME_SIZE_ERROR: number; + const NGHTTP2_REFUSED_STREAM: number; + const NGHTTP2_CANCEL: number; + const NGHTTP2_COMPRESSION_ERROR: number; + const NGHTTP2_CONNECT_ERROR: number; + const NGHTTP2_ENHANCE_YOUR_CALM: number; + const NGHTTP2_INADEQUATE_SECURITY: number; + const NGHTTP2_HTTP_1_1_REQUIRED: number; + const NGHTTP2_ERR_FRAME_SIZE_ERROR: number; + const NGHTTP2_FLAG_NONE: number; + const NGHTTP2_FLAG_END_STREAM: number; + const NGHTTP2_FLAG_END_HEADERS: number; + const NGHTTP2_FLAG_ACK: number; + const NGHTTP2_FLAG_PADDED: number; + const NGHTTP2_FLAG_PRIORITY: number; + const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number; + const DEFAULT_SETTINGS_ENABLE_PUSH: number; + const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number; + const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number; + const MAX_MAX_FRAME_SIZE: number; + const MIN_MAX_FRAME_SIZE: number; + const MAX_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_DEFAULT_WEIGHT: number; + const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number; + const NGHTTP2_SETTINGS_ENABLE_PUSH: number; + const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number; + const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number; + const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number; + const PADDING_STRATEGY_NONE: number; + const PADDING_STRATEGY_MAX: number; + const PADDING_STRATEGY_CALLBACK: number; + const HTTP2_HEADER_STATUS: string; + const HTTP2_HEADER_METHOD: string; + const HTTP2_HEADER_AUTHORITY: string; + const HTTP2_HEADER_SCHEME: string; + const HTTP2_HEADER_PATH: string; + const HTTP2_HEADER_ACCEPT_CHARSET: string; + const HTTP2_HEADER_ACCEPT_ENCODING: string; + const HTTP2_HEADER_ACCEPT_LANGUAGE: string; + const HTTP2_HEADER_ACCEPT_RANGES: string; + const HTTP2_HEADER_ACCEPT: string; + const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string; + const HTTP2_HEADER_AGE: string; + const HTTP2_HEADER_ALLOW: string; + const HTTP2_HEADER_AUTHORIZATION: string; + const HTTP2_HEADER_CACHE_CONTROL: string; + const HTTP2_HEADER_CONNECTION: string; + const HTTP2_HEADER_CONTENT_DISPOSITION: string; + const HTTP2_HEADER_CONTENT_ENCODING: string; + const HTTP2_HEADER_CONTENT_LANGUAGE: string; + const HTTP2_HEADER_CONTENT_LENGTH: string; + const HTTP2_HEADER_CONTENT_LOCATION: string; + const HTTP2_HEADER_CONTENT_MD5: string; + const HTTP2_HEADER_CONTENT_RANGE: string; + const HTTP2_HEADER_CONTENT_TYPE: string; + const HTTP2_HEADER_COOKIE: string; + const HTTP2_HEADER_DATE: string; + const HTTP2_HEADER_ETAG: string; + const HTTP2_HEADER_EXPECT: string; + const HTTP2_HEADER_EXPIRES: string; + const HTTP2_HEADER_FROM: string; + const HTTP2_HEADER_HOST: string; + const HTTP2_HEADER_IF_MATCH: string; + const HTTP2_HEADER_IF_MODIFIED_SINCE: string; + const HTTP2_HEADER_IF_NONE_MATCH: string; + const HTTP2_HEADER_IF_RANGE: string; + const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string; + const HTTP2_HEADER_LAST_MODIFIED: string; + const HTTP2_HEADER_LINK: string; + const HTTP2_HEADER_LOCATION: string; + const HTTP2_HEADER_MAX_FORWARDS: string; + const HTTP2_HEADER_PREFER: string; + const HTTP2_HEADER_PROXY_AUTHENTICATE: string; + const HTTP2_HEADER_PROXY_AUTHORIZATION: string; + const HTTP2_HEADER_RANGE: string; + const HTTP2_HEADER_REFERER: string; + const HTTP2_HEADER_REFRESH: string; + const HTTP2_HEADER_RETRY_AFTER: string; + const HTTP2_HEADER_SERVER: string; + const HTTP2_HEADER_SET_COOKIE: string; + const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string; + const HTTP2_HEADER_TRANSFER_ENCODING: string; + const HTTP2_HEADER_TE: string; + const HTTP2_HEADER_UPGRADE: string; + const HTTP2_HEADER_USER_AGENT: string; + const HTTP2_HEADER_VARY: string; + const HTTP2_HEADER_VIA: string; + const HTTP2_HEADER_WWW_AUTHENTICATE: string; + const HTTP2_HEADER_HTTP2_SETTINGS: string; + const HTTP2_HEADER_KEEP_ALIVE: string; + const HTTP2_HEADER_PROXY_CONNECTION: string; + const HTTP2_METHOD_ACL: string; + const HTTP2_METHOD_BASELINE_CONTROL: string; + const HTTP2_METHOD_BIND: string; + const HTTP2_METHOD_CHECKIN: string; + const HTTP2_METHOD_CHECKOUT: string; + const HTTP2_METHOD_CONNECT: string; + const HTTP2_METHOD_COPY: string; + const HTTP2_METHOD_DELETE: string; + const HTTP2_METHOD_GET: string; + const HTTP2_METHOD_HEAD: string; + const HTTP2_METHOD_LABEL: string; + const HTTP2_METHOD_LINK: string; + const HTTP2_METHOD_LOCK: string; + const HTTP2_METHOD_MERGE: string; + const HTTP2_METHOD_MKACTIVITY: string; + const HTTP2_METHOD_MKCALENDAR: string; + const HTTP2_METHOD_MKCOL: string; + const HTTP2_METHOD_MKREDIRECTREF: string; + const HTTP2_METHOD_MKWORKSPACE: string; + const HTTP2_METHOD_MOVE: string; + const HTTP2_METHOD_OPTIONS: string; + const HTTP2_METHOD_ORDERPATCH: string; + const HTTP2_METHOD_PATCH: string; + const HTTP2_METHOD_POST: string; + const HTTP2_METHOD_PRI: string; + const HTTP2_METHOD_PROPFIND: string; + const HTTP2_METHOD_PROPPATCH: string; + const HTTP2_METHOD_PUT: string; + const HTTP2_METHOD_REBIND: string; + const HTTP2_METHOD_REPORT: string; + const HTTP2_METHOD_SEARCH: string; + const HTTP2_METHOD_TRACE: string; + const HTTP2_METHOD_UNBIND: string; + const HTTP2_METHOD_UNCHECKOUT: string; + const HTTP2_METHOD_UNLINK: string; + const HTTP2_METHOD_UNLOCK: string; + const HTTP2_METHOD_UPDATE: string; + const HTTP2_METHOD_UPDATEREDIRECTREF: string; + const HTTP2_METHOD_VERSION_CONTROL: string; + const HTTP_STATUS_CONTINUE: number; + const HTTP_STATUS_SWITCHING_PROTOCOLS: number; + const HTTP_STATUS_PROCESSING: number; + const HTTP_STATUS_OK: number; + const HTTP_STATUS_CREATED: number; + const HTTP_STATUS_ACCEPTED: number; + const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number; + const HTTP_STATUS_NO_CONTENT: number; + const HTTP_STATUS_RESET_CONTENT: number; + const HTTP_STATUS_PARTIAL_CONTENT: number; + const HTTP_STATUS_MULTI_STATUS: number; + const HTTP_STATUS_ALREADY_REPORTED: number; + const HTTP_STATUS_IM_USED: number; + const HTTP_STATUS_MULTIPLE_CHOICES: number; + const HTTP_STATUS_MOVED_PERMANENTLY: number; + const HTTP_STATUS_FOUND: number; + const HTTP_STATUS_SEE_OTHER: number; + const HTTP_STATUS_NOT_MODIFIED: number; + const HTTP_STATUS_USE_PROXY: number; + const HTTP_STATUS_TEMPORARY_REDIRECT: number; + const HTTP_STATUS_PERMANENT_REDIRECT: number; + const HTTP_STATUS_BAD_REQUEST: number; + const HTTP_STATUS_UNAUTHORIZED: number; + const HTTP_STATUS_PAYMENT_REQUIRED: number; + const HTTP_STATUS_FORBIDDEN: number; + const HTTP_STATUS_NOT_FOUND: number; + const HTTP_STATUS_METHOD_NOT_ALLOWED: number; + const HTTP_STATUS_NOT_ACCEPTABLE: number; + const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number; + const HTTP_STATUS_REQUEST_TIMEOUT: number; + const HTTP_STATUS_CONFLICT: number; + const HTTP_STATUS_GONE: number; + const HTTP_STATUS_LENGTH_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_FAILED: number; + const HTTP_STATUS_PAYLOAD_TOO_LARGE: number; + const HTTP_STATUS_URI_TOO_LONG: number; + const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number; + const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number; + const HTTP_STATUS_EXPECTATION_FAILED: number; + const HTTP_STATUS_TEAPOT: number; + const HTTP_STATUS_MISDIRECTED_REQUEST: number; + const HTTP_STATUS_UNPROCESSABLE_ENTITY: number; + const HTTP_STATUS_LOCKED: number; + const HTTP_STATUS_FAILED_DEPENDENCY: number; + const HTTP_STATUS_UNORDERED_COLLECTION: number; + const HTTP_STATUS_UPGRADE_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_REQUIRED: number; + const HTTP_STATUS_TOO_MANY_REQUESTS: number; + const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number; + const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number; + const HTTP_STATUS_INTERNAL_SERVER_ERROR: number; + const HTTP_STATUS_NOT_IMPLEMENTED: number; + const HTTP_STATUS_BAD_GATEWAY: number; + const HTTP_STATUS_SERVICE_UNAVAILABLE: number; + const HTTP_STATUS_GATEWAY_TIMEOUT: number; + const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number; + const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number; + const HTTP_STATUS_INSUFFICIENT_STORAGE: number; + const HTTP_STATUS_LOOP_DETECTED: number; + const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number; + const HTTP_STATUS_NOT_EXTENDED: number; + const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number; + } + + export function getDefaultSettings(): Settings; + export function getPackedSettings(settings: Settings): Buffer; + export function getUnpackedSettings(buf: Uint8Array): Settings; + + export function createServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2Server; + export function createServer( + options: ServerOptions, + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2Server; + + export function createSecureServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2SecureServer; + export function createSecureServer( + options: SecureServerOptions, + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2SecureServer; + + export function connect( + authority: string | url.URL, + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; + export function connect( + authority: string | url.URL, + options?: ClientSessionOptions | SecureClientSessionOptions, + listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; +} +declare module "node:http2" { + export * from "http2"; +} diff --git a/node_backend/node_modules/@types/node/https.d.ts b/node_backend/node_modules/@types/node/https.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5787c3d9116267c5e5eb2bf8cf0b515a0e4a9073 --- /dev/null +++ b/node_backend/node_modules/@types/node/https.d.ts @@ -0,0 +1,274 @@ +declare module "https" { + import { Duplex } from "stream"; + import * as tls from "tls"; + import * as http from "http"; + import { URL } from "url"; + + type ServerOptions< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > = tls.SecureContextOptions & tls.TlsOptions & http.ServerOptions; + + type RequestOptions = + & http.RequestOptions + & tls.SecureContextOptions + & { + checkServerIdentity?: typeof tls.checkServerIdentity | undefined; + rejectUnauthorized?: boolean | undefined; // Defaults to true + servername?: string | undefined; // SNI TLS Extension + }; + + interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions { + rejectUnauthorized?: boolean | undefined; + maxCachedSessions?: number | undefined; + } + + class Agent extends http.Agent { + constructor(options?: AgentOptions); + options: AgentOptions; + } + + interface Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > extends http.Server {} + class Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > extends tls.Server { + constructor(requestListener?: http.RequestListener); + constructor( + options: ServerOptions, + requestListener?: http.RequestListener, + ); + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Duplex) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "checkContinue", listener: http.RequestListener): this; + addListener(event: "checkExpectation", listener: http.RequestListener): this; + addListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + addListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + addListener(event: "request", listener: http.RequestListener): this; + addListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + emit(event: string, ...args: any[]): boolean; + emit(event: "keylog", line: Buffer, tlsSocket: tls.TLSSocket): boolean; + emit( + event: "newSession", + sessionId: Buffer, + sessionData: Buffer, + callback: (err: Error, resp: Buffer) => void, + ): boolean; + emit( + event: "OCSPRequest", + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ): boolean; + emit(event: "resumeSession", sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void): boolean; + emit(event: "secureConnection", tlsSocket: tls.TLSSocket): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: tls.TLSSocket): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Duplex): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "checkContinue", req: InstanceType, res: InstanceType): boolean; + emit(event: "checkExpectation", req: InstanceType, res: InstanceType): boolean; + emit(event: "clientError", err: Error, socket: Duplex): boolean; + emit(event: "connect", req: InstanceType, socket: Duplex, head: Buffer): boolean; + emit(event: "request", req: InstanceType, res: InstanceType): boolean; + emit(event: "upgrade", req: InstanceType, socket: Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + on( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + on( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Duplex) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "checkContinue", listener: http.RequestListener): this; + on(event: "checkExpectation", listener: http.RequestListener): this; + on(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + on(event: "connect", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + on(event: "request", listener: http.RequestListener): this; + on(event: "upgrade", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Duplex) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "checkContinue", listener: http.RequestListener): this; + once(event: "checkExpectation", listener: http.RequestListener): this; + once(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + once(event: "connect", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + once(event: "request", listener: http.RequestListener): this; + once(event: "upgrade", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Duplex) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "checkContinue", listener: http.RequestListener): this; + prependListener(event: "checkExpectation", listener: http.RequestListener): this; + prependListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependListener(event: "request", listener: http.RequestListener): this; + prependListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Duplex) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "checkContinue", listener: http.RequestListener): this; + prependOnceListener(event: "checkExpectation", listener: http.RequestListener): this; + prependOnceListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependOnceListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: "request", listener: http.RequestListener): this; + prependOnceListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + } + + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + >(requestListener?: http.RequestListener): Server; + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + >( + options: ServerOptions, + requestListener?: http.RequestListener, + ): Server; + function request( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function request( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function get( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function get( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + let globalAgent: Agent; +} +declare module "node:https" { + export * from "https"; +} diff --git a/node_backend/node_modules/@types/node/index.d.ts b/node_backend/node_modules/@types/node/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..fcaefc78f16e96d75c3df7b7aec92f02381e46eb --- /dev/null +++ b/node_backend/node_modules/@types/node/index.d.ts @@ -0,0 +1,98 @@ +// Type definitions for non-npm package Node.js 14.18 +// Project: https://nodejs.org/ +// Definitions by: Microsoft TypeScript +// DefinitelyTyped +// Alberto Schiabel +// Alvis HT Tang +// Andrew Makarov +// Benjamin Toueg +// Chigozirim C. +// David Junger +// Deividas Bakanas +// Eugene Y. Q. Shen +// Hannes Magnusson +// Hoàng Văn Khải +// Huw +// Kelvin Jin +// Klaus Meinhardt +// Lishude +// Mariusz Wiktorczyk +// Mohsen Azimi +// Nicolas Even +// Nikita Galkin +// Parambir Singh +// Sebastian Silbermann +// Seth Westphal +// Simon Schick +// Thomas den Hollander +// Wilco Bakker +// wwwy3y3 +// Samuel Ainsworth +// Kyle Uehlein +// Thanik Bhongbhibhat +// Marcin Kopacz +// Trivikram Kamat +// Junxiao Shi +// Ilia Baryshnikov +// ExE Boss +// Piotr Błażejewicz +// Anna Henningsen +// Victor Perin +// Yongsheng Zhang +// Bond +// Linus Unnebäck +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +// NOTE: These definitions support NodeJS and TypeScript 4.9+ + +// Reference required types from the default lib: +/// +/// +/// +/// + +// Base definitions for all NodeJS modules that are not specific to any version of TypeScript: +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// + +/// diff --git a/node_backend/node_modules/@types/node/inspector.d.ts b/node_backend/node_modules/@types/node/inspector.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7044b7f4577608f3347ea2488c8af8e837333377 --- /dev/null +++ b/node_backend/node_modules/@types/node/inspector.d.ts @@ -0,0 +1,3050 @@ +// eslint-disable-next-line @definitelytyped/dt-header +// Type definitions for inspector + +// These definitions are auto-generated. +// Please see https://github.com/DefinitelyTyped/DefinitelyTyped/pull/19330 +// for more information. + + +/** + * The inspector module provides an API for interacting with the V8 inspector. + */ +declare module 'inspector' { + import EventEmitter = require('events'); + + interface InspectorNotification { + method: string; + params: T; + } + + namespace Schema { + /** + * Description of the protocol domain. + */ + interface Domain { + /** + * Domain name. + */ + name: string; + /** + * Domain version. + */ + version: string; + } + + interface GetDomainsReturnType { + /** + * List of supported domains. + */ + domains: Domain[]; + } + } + + namespace Runtime { + /** + * Unique script identifier. + */ + type ScriptId = string; + + /** + * Unique object identifier. + */ + type RemoteObjectId = string; + + /** + * Primitive value which cannot be JSON-stringified. + */ + type UnserializableValue = string; + + /** + * Mirror object referencing original JavaScript object. + */ + interface RemoteObject { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * Object class (constructor) name. Specified for object type values only. + */ + className?: string | undefined; + /** + * Remote object value in case of primitive values or JSON values (if it was requested). + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified does not have value, but gets this property. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * Unique object identifier (for non-primitive values). + */ + objectId?: RemoteObjectId | undefined; + /** + * Preview containing abbreviated property values. Specified for object type values only. + * @experimental + */ + preview?: ObjectPreview | undefined; + /** + * @experimental + */ + customPreview?: CustomPreview | undefined; + } + + /** + * @experimental + */ + interface CustomPreview { + header: string; + hasBody: boolean; + formatterObjectId: RemoteObjectId; + bindRemoteObjectFunctionId: RemoteObjectId; + configObjectId?: RemoteObjectId | undefined; + } + + /** + * Object containing abbreviated remote object value. + * @experimental + */ + interface ObjectPreview { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * True iff some of the properties or entries of the original object did not fit. + */ + overflow: boolean; + /** + * List of the properties. + */ + properties: PropertyPreview[]; + /** + * List of the entries. Specified for map and set subtype values only. + */ + entries?: EntryPreview[] | undefined; + } + + /** + * @experimental + */ + interface PropertyPreview { + /** + * Property name. + */ + name: string; + /** + * Object type. Accessor means that the property itself is an accessor property. + */ + type: string; + /** + * User-friendly property value string. + */ + value?: string | undefined; + /** + * Nested value preview. + */ + valuePreview?: ObjectPreview | undefined; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + } + + /** + * @experimental + */ + interface EntryPreview { + /** + * Preview of the key. Specified for map-like collection entries. + */ + key?: ObjectPreview | undefined; + /** + * Preview of the value. + */ + value: ObjectPreview; + } + + /** + * Object property descriptor. + */ + interface PropertyDescriptor { + /** + * Property name or symbol description. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + /** + * True if the value associated with the property may be changed (data descriptors only). + */ + writable?: boolean | undefined; + /** + * A function which serves as a getter for the property, or undefined if there is no getter (accessor descriptors only). + */ + get?: RemoteObject | undefined; + /** + * A function which serves as a setter for the property, or undefined if there is no setter (accessor descriptors only). + */ + set?: RemoteObject | undefined; + /** + * True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. + */ + configurable: boolean; + /** + * True if this property shows up during enumeration of the properties on the corresponding object. + */ + enumerable: boolean; + /** + * True if the result was thrown during the evaluation. + */ + wasThrown?: boolean | undefined; + /** + * True if the property is owned for the object. + */ + isOwn?: boolean | undefined; + /** + * Property symbol object, if the property is of the symbol type. + */ + symbol?: RemoteObject | undefined; + } + + /** + * Object internal property descriptor. This property isn't normally visible in JavaScript code. + */ + interface InternalPropertyDescriptor { + /** + * Conventional property name. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + } + + /** + * Represents function call argument. Either remote object id objectId, primitive value, unserializable primitive value or neither of (for undefined) them should be specified. + */ + interface CallArgument { + /** + * Primitive value or serializable javascript object. + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * Remote object handle. + */ + objectId?: RemoteObjectId | undefined; + } + + /** + * Id of an execution context. + */ + type ExecutionContextId = number; + + /** + * Description of an isolated world. + */ + interface ExecutionContextDescription { + /** + * Unique id of the execution context. It can be used to specify in which execution context script evaluation should be performed. + */ + id: ExecutionContextId; + /** + * Execution context origin. + */ + origin: string; + /** + * Human readable name describing given context. + */ + name: string; + /** + * Embedder-specific auxiliary data. + */ + auxData?: {} | undefined; + } + + /** + * Detailed information about exception (or error) that was thrown during script compilation or execution. + */ + interface ExceptionDetails { + /** + * Exception id. + */ + exceptionId: number; + /** + * Exception text, which should be used together with exception object when available. + */ + text: string; + /** + * Line number of the exception location (0-based). + */ + lineNumber: number; + /** + * Column number of the exception location (0-based). + */ + columnNumber: number; + /** + * Script ID of the exception location. + */ + scriptId?: ScriptId | undefined; + /** + * URL of the exception location, to be used when the script was not reported. + */ + url?: string | undefined; + /** + * JavaScript stack trace if available. + */ + stackTrace?: StackTrace | undefined; + /** + * Exception object if available. + */ + exception?: RemoteObject | undefined; + /** + * Identifier of the context where exception happened. + */ + executionContextId?: ExecutionContextId | undefined; + } + + /** + * Number of milliseconds since epoch. + */ + type Timestamp = number; + + /** + * Stack entry for runtime errors and assertions. + */ + interface CallFrame { + /** + * JavaScript function name. + */ + functionName: string; + /** + * JavaScript script id. + */ + scriptId: ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * JavaScript script line number (0-based). + */ + lineNumber: number; + /** + * JavaScript script column number (0-based). + */ + columnNumber: number; + } + + /** + * Call frames for assertions or error messages. + */ + interface StackTrace { + /** + * String label of this stack trace. For async traces this may be a name of the function that initiated the async call. + */ + description?: string | undefined; + /** + * JavaScript function name. + */ + callFrames: CallFrame[]; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + */ + parent?: StackTrace | undefined; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + * @experimental + */ + parentId?: StackTraceId | undefined; + } + + /** + * Unique identifier of current debugger. + * @experimental + */ + type UniqueDebuggerId = string; + + /** + * If debuggerId is set stack trace comes from another debugger and can be resolved there. This allows to track cross-debugger calls. See Runtime.StackTrace and Debugger.paused for usages. + * @experimental + */ + interface StackTraceId { + id: string; + debuggerId?: UniqueDebuggerId | undefined; + } + + interface EvaluateParameterType { + /** + * Expression to evaluate. + */ + expression: string; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Specifies in which execution context to perform evaluation. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + contextId?: ExecutionContextId | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + + interface AwaitPromiseParameterType { + /** + * Identifier of the promise. + */ + promiseObjectId: RemoteObjectId; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + } + + interface CallFunctionOnParameterType { + /** + * Declaration of the function to call. + */ + functionDeclaration: string; + /** + * Identifier of the object to call function on. Either objectId or executionContextId should be specified. + */ + objectId?: RemoteObjectId | undefined; + /** + * Call arguments. All call arguments must belong to the same JavaScript world as the target object. + */ + arguments?: CallArgument[] | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + /** + * Specifies execution context which global object will be used to call function on. Either executionContextId or objectId should be specified. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. If objectGroup is not specified and objectId is, objectGroup will be inherited from object. + */ + objectGroup?: string | undefined; + } + + interface GetPropertiesParameterType { + /** + * Identifier of the object to return properties for. + */ + objectId: RemoteObjectId; + /** + * If true, returns properties belonging only to the element itself, not to its prototype chain. + */ + ownProperties?: boolean | undefined; + /** + * If true, returns accessor properties (with getter/setter) only; internal properties are not returned either. + * @experimental + */ + accessorPropertiesOnly?: boolean | undefined; + /** + * Whether preview should be generated for the results. + * @experimental + */ + generatePreview?: boolean | undefined; + } + + interface ReleaseObjectParameterType { + /** + * Identifier of the object to release. + */ + objectId: RemoteObjectId; + } + + interface ReleaseObjectGroupParameterType { + /** + * Symbolic object group name. + */ + objectGroup: string; + } + + interface SetCustomObjectFormatterEnabledParameterType { + enabled: boolean; + } + + interface CompileScriptParameterType { + /** + * Expression to compile. + */ + expression: string; + /** + * Source url to be set for the script. + */ + sourceURL: string; + /** + * Specifies whether the compiled script should be persisted. + */ + persistScript: boolean; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + } + + interface RunScriptParameterType { + /** + * Id of the script to run. + */ + scriptId: ScriptId; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + + interface QueryObjectsParameterType { + /** + * Identifier of the prototype to return objects for. + */ + prototypeObjectId: RemoteObjectId; + } + + interface GlobalLexicalScopeNamesParameterType { + /** + * Specifies in which execution context to lookup global scope variables. + */ + executionContextId?: ExecutionContextId | undefined; + } + + interface EvaluateReturnType { + /** + * Evaluation result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface AwaitPromiseReturnType { + /** + * Promise result. Will contain rejected value if promise was rejected. + */ + result: RemoteObject; + /** + * Exception details if stack strace is available. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface CallFunctionOnReturnType { + /** + * Call result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface GetPropertiesReturnType { + /** + * Object properties. + */ + result: PropertyDescriptor[]; + /** + * Internal object properties (only of the element itself). + */ + internalProperties?: InternalPropertyDescriptor[] | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface CompileScriptReturnType { + /** + * Id of the script. + */ + scriptId?: ScriptId | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface RunScriptReturnType { + /** + * Run result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface QueryObjectsReturnType { + /** + * Array with objects. + */ + objects: RemoteObject; + } + + interface GlobalLexicalScopeNamesReturnType { + names: string[]; + } + + interface ExecutionContextCreatedEventDataType { + /** + * A newly created execution context. + */ + context: ExecutionContextDescription; + } + + interface ExecutionContextDestroyedEventDataType { + /** + * Id of the destroyed context + */ + executionContextId: ExecutionContextId; + } + + interface ExceptionThrownEventDataType { + /** + * Timestamp of the exception. + */ + timestamp: Timestamp; + exceptionDetails: ExceptionDetails; + } + + interface ExceptionRevokedEventDataType { + /** + * Reason describing why exception was revoked. + */ + reason: string; + /** + * The id of revoked exception, as reported in exceptionThrown. + */ + exceptionId: number; + } + + interface ConsoleAPICalledEventDataType { + /** + * Type of the call. + */ + type: string; + /** + * Call arguments. + */ + args: RemoteObject[]; + /** + * Identifier of the context where the call was made. + */ + executionContextId: ExecutionContextId; + /** + * Call timestamp. + */ + timestamp: Timestamp; + /** + * Stack trace captured when the call was made. + */ + stackTrace?: StackTrace | undefined; + /** + * Console context descriptor for calls on non-default console context (not console.*): 'anonymous#unique-logger-id' for call on unnamed context, 'name#unique-logger-id' for call on named context. + * @experimental + */ + context?: string | undefined; + } + + interface InspectRequestedEventDataType { + object: RemoteObject; + hints: {}; + } + } + + namespace Debugger { + /** + * Breakpoint identifier. + */ + type BreakpointId = string; + + /** + * Call frame identifier. + */ + type CallFrameId = string; + + /** + * Location in the source code. + */ + interface Location { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + } + + /** + * Location in the source code. + * @experimental + */ + interface ScriptPosition { + lineNumber: number; + columnNumber: number; + } + + /** + * JavaScript call frame. Array of call frames form the call stack. + */ + interface CallFrame { + /** + * Call frame identifier. This identifier is only valid while the virtual machine is paused. + */ + callFrameId: CallFrameId; + /** + * Name of the JavaScript function called on this call frame. + */ + functionName: string; + /** + * Location in the source code. + */ + functionLocation?: Location | undefined; + /** + * Location in the source code. + */ + location: Location; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Scope chain for this call frame. + */ + scopeChain: Scope[]; + /** + * this object for this call frame. + */ + this: Runtime.RemoteObject; + /** + * The value being returned, if the function is at return point. + */ + returnValue?: Runtime.RemoteObject | undefined; + } + + /** + * Scope description. + */ + interface Scope { + /** + * Scope type. + */ + type: string; + /** + * Object representing the scope. For global and with scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties. + */ + object: Runtime.RemoteObject; + name?: string | undefined; + /** + * Location in the source code where scope starts + */ + startLocation?: Location | undefined; + /** + * Location in the source code where scope ends + */ + endLocation?: Location | undefined; + } + + /** + * Search match for resource. + */ + interface SearchMatch { + /** + * Line number in resource content. + */ + lineNumber: number; + /** + * Line with match content. + */ + lineContent: string; + } + + interface BreakLocation { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + type?: string | undefined; + } + + interface SetBreakpointsActiveParameterType { + /** + * New value for breakpoints active state. + */ + active: boolean; + } + + interface SetSkipAllPausesParameterType { + /** + * New value for skip pauses state. + */ + skip: boolean; + } + + interface SetBreakpointByUrlParameterType { + /** + * Line number to set breakpoint at. + */ + lineNumber: number; + /** + * URL of the resources to set breakpoint on. + */ + url?: string | undefined; + /** + * Regex pattern for the URLs of the resources to set breakpoints on. Either url or urlRegex must be specified. + */ + urlRegex?: string | undefined; + /** + * Script hash of the resources to set breakpoint on. + */ + scriptHash?: string | undefined; + /** + * Offset in the line to set breakpoint at. + */ + columnNumber?: number | undefined; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + + interface SetBreakpointParameterType { + /** + * Location to set breakpoint in. + */ + location: Location; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + + interface RemoveBreakpointParameterType { + breakpointId: BreakpointId; + } + + interface GetPossibleBreakpointsParameterType { + /** + * Start of range to search possible breakpoint locations in. + */ + start: Location; + /** + * End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range. + */ + end?: Location | undefined; + /** + * Only consider locations which are in the same (non-nested) function as start. + */ + restrictToFunction?: boolean | undefined; + } + + interface ContinueToLocationParameterType { + /** + * Location to continue to. + */ + location: Location; + targetCallFrames?: string | undefined; + } + + interface PauseOnAsyncCallParameterType { + /** + * Debugger will pause when async call with given stack trace is started. + */ + parentStackTraceId: Runtime.StackTraceId; + } + + interface StepIntoParameterType { + /** + * Debugger will issue additional Debugger.paused notification if any async task is scheduled before next pause. + * @experimental + */ + breakOnAsyncCall?: boolean | undefined; + } + + interface GetStackTraceParameterType { + stackTraceId: Runtime.StackTraceId; + } + + interface SearchInContentParameterType { + /** + * Id of the script to search in. + */ + scriptId: Runtime.ScriptId; + /** + * String to search for. + */ + query: string; + /** + * If true, search is case sensitive. + */ + caseSensitive?: boolean | undefined; + /** + * If true, treats string parameter as regex. + */ + isRegex?: boolean | undefined; + } + + interface SetScriptSourceParameterType { + /** + * Id of the script to edit. + */ + scriptId: Runtime.ScriptId; + /** + * New content of the script. + */ + scriptSource: string; + /** + * If true the change will not actually be applied. Dry run may be used to get result description without actually modifying the code. + */ + dryRun?: boolean | undefined; + } + + interface RestartFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + } + + interface GetScriptSourceParameterType { + /** + * Id of the script to get source for. + */ + scriptId: Runtime.ScriptId; + } + + interface SetPauseOnExceptionsParameterType { + /** + * Pause on exceptions mode. + */ + state: string; + } + + interface EvaluateOnCallFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + /** + * Expression to evaluate. + */ + expression: string; + /** + * String object group name to put result into (allows rapid releasing resulting object handles using releaseObjectGroup). + */ + objectGroup?: string | undefined; + /** + * Specifies whether command line API should be available to the evaluated expression, defaults to false. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether to throw an exception if side effect cannot be ruled out during evaluation. + */ + throwOnSideEffect?: boolean | undefined; + } + + interface SetVariableValueParameterType { + /** + * 0-based number of scope as was listed in scope chain. Only 'local', 'closure' and 'catch' scope types are allowed. Other scopes could be manipulated manually. + */ + scopeNumber: number; + /** + * Variable name. + */ + variableName: string; + /** + * New variable value. + */ + newValue: Runtime.CallArgument; + /** + * Id of callframe that holds variable. + */ + callFrameId: CallFrameId; + } + + interface SetReturnValueParameterType { + /** + * New return value. + */ + newValue: Runtime.CallArgument; + } + + interface SetAsyncCallStackDepthParameterType { + /** + * Maximum depth of async call stacks. Setting to 0 will effectively disable collecting async call stacks (default). + */ + maxDepth: number; + } + + interface SetBlackboxPatternsParameterType { + /** + * Array of regexps that will be used to check script url for blackbox state. + */ + patterns: string[]; + } + + interface SetBlackboxedRangesParameterType { + /** + * Id of the script. + */ + scriptId: Runtime.ScriptId; + positions: ScriptPosition[]; + } + + interface EnableReturnType { + /** + * Unique identifier of the debugger. + * @experimental + */ + debuggerId: Runtime.UniqueDebuggerId; + } + + interface SetBreakpointByUrlReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * List of the locations this breakpoint resolved into upon addition. + */ + locations: Location[]; + } + + interface SetBreakpointReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * Location this breakpoint resolved into. + */ + actualLocation: Location; + } + + interface GetPossibleBreakpointsReturnType { + /** + * List of the possible breakpoint locations. + */ + locations: BreakLocation[]; + } + + interface GetStackTraceReturnType { + stackTrace: Runtime.StackTrace; + } + + interface SearchInContentReturnType { + /** + * List of search matches. + */ + result: SearchMatch[]; + } + + interface SetScriptSourceReturnType { + /** + * New stack trace in case editing has happened while VM was stopped. + */ + callFrames?: CallFrame[] | undefined; + /** + * Whether current call stack was modified after applying the changes. + */ + stackChanged?: boolean | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Exception details if any. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + + interface RestartFrameReturnType { + /** + * New stack trace. + */ + callFrames: CallFrame[]; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + } + + interface GetScriptSourceReturnType { + /** + * Script source. + */ + scriptSource: string; + } + + interface EvaluateOnCallFrameReturnType { + /** + * Object wrapper for the evaluation result. + */ + result: Runtime.RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + + interface ScriptParsedEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * True, if this script is generated as a result of the live edit operation. + * @experimental + */ + isLiveEdit?: boolean | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + + interface ScriptFailedToParseEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + + interface BreakpointResolvedEventDataType { + /** + * Breakpoint unique identifier. + */ + breakpointId: BreakpointId; + /** + * Actual breakpoint location. + */ + location: Location; + } + + interface PausedEventDataType { + /** + * Call stack the virtual machine stopped on. + */ + callFrames: CallFrame[]; + /** + * Pause reason. + */ + reason: string; + /** + * Object containing break-specific auxiliary properties. + */ + data?: {} | undefined; + /** + * Hit breakpoints IDs + */ + hitBreakpoints?: string[] | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Just scheduled async call will have this stack trace as parent stack during async execution. This field is available only after Debugger.stepInto call with breakOnAsynCall flag. + * @experimental + */ + asyncCallStackTraceId?: Runtime.StackTraceId | undefined; + } + } + + namespace Console { + /** + * Console message. + */ + interface ConsoleMessage { + /** + * Message source. + */ + source: string; + /** + * Message severity. + */ + level: string; + /** + * Message text. + */ + text: string; + /** + * URL of the message origin. + */ + url?: string | undefined; + /** + * Line number in the resource that generated this message (1-based). + */ + line?: number | undefined; + /** + * Column number in the resource that generated this message (1-based). + */ + column?: number | undefined; + } + + interface MessageAddedEventDataType { + /** + * Console message that has been added. + */ + message: ConsoleMessage; + } + } + + namespace Profiler { + /** + * Profile node. Holds callsite information, execution statistics and child nodes. + */ + interface ProfileNode { + /** + * Unique id of the node. + */ + id: number; + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Number of samples where this node was on top of the call stack. + */ + hitCount?: number | undefined; + /** + * Child node ids. + */ + children?: number[] | undefined; + /** + * The reason of being not optimized. The function may be deoptimized or marked as don't optimize. + */ + deoptReason?: string | undefined; + /** + * An array of source position ticks. + */ + positionTicks?: PositionTickInfo[] | undefined; + } + + /** + * Profile. + */ + interface Profile { + /** + * The list of profile nodes. First item is the root node. + */ + nodes: ProfileNode[]; + /** + * Profiling start timestamp in microseconds. + */ + startTime: number; + /** + * Profiling end timestamp in microseconds. + */ + endTime: number; + /** + * Ids of samples top nodes. + */ + samples?: number[] | undefined; + /** + * Time intervals between adjacent samples in microseconds. The first delta is relative to the profile startTime. + */ + timeDeltas?: number[] | undefined; + } + + /** + * Specifies a number of samples attributed to a certain source position. + */ + interface PositionTickInfo { + /** + * Source line number (1-based). + */ + line: number; + /** + * Number of samples attributed to the source line. + */ + ticks: number; + } + + /** + * Coverage data for a source range. + */ + interface CoverageRange { + /** + * JavaScript script source offset for the range start. + */ + startOffset: number; + /** + * JavaScript script source offset for the range end. + */ + endOffset: number; + /** + * Collected execution count of the source range. + */ + count: number; + } + + /** + * Coverage data for a JavaScript function. + */ + interface FunctionCoverage { + /** + * JavaScript function name. + */ + functionName: string; + /** + * Source ranges inside the function with coverage data. + */ + ranges: CoverageRange[]; + /** + * Whether coverage data for this function has block granularity. + */ + isBlockCoverage: boolean; + } + + /** + * Coverage data for a JavaScript script. + */ + interface ScriptCoverage { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Functions contained in the script that has coverage data. + */ + functions: FunctionCoverage[]; + } + + /** + * Describes a type collected during runtime. + * @experimental + */ + interface TypeObject { + /** + * Name of a type collected with type profiling. + */ + name: string; + } + + /** + * Source offset and types for a parameter or return value. + * @experimental + */ + interface TypeProfileEntry { + /** + * Source offset of the parameter or end of function for return values. + */ + offset: number; + /** + * The types for this parameter or return value. + */ + types: TypeObject[]; + } + + /** + * Type profile data collected during runtime for a JavaScript script. + * @experimental + */ + interface ScriptTypeProfile { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Type profile entries for parameters and return values of the functions in the script. + */ + entries: TypeProfileEntry[]; + } + + interface SetSamplingIntervalParameterType { + /** + * New sampling interval in microseconds. + */ + interval: number; + } + + interface StartPreciseCoverageParameterType { + /** + * Collect accurate call counts beyond simple 'covered' or 'not covered'. + */ + callCount?: boolean | undefined; + /** + * Collect block-based coverage. + */ + detailed?: boolean | undefined; + } + + interface StopReturnType { + /** + * Recorded profile. + */ + profile: Profile; + } + + interface TakePreciseCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + + interface GetBestEffortCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + + interface TakeTypeProfileReturnType { + /** + * Type profile for all scripts since startTypeProfile() was turned on. + */ + result: ScriptTypeProfile[]; + } + + interface ConsoleProfileStartedEventDataType { + id: string; + /** + * Location of console.profile(). + */ + location: Debugger.Location; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + + interface ConsoleProfileFinishedEventDataType { + id: string; + /** + * Location of console.profileEnd(). + */ + location: Debugger.Location; + profile: Profile; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + } + + namespace HeapProfiler { + /** + * Heap snapshot object id. + */ + type HeapSnapshotObjectId = string; + + /** + * Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes. + */ + interface SamplingHeapProfileNode { + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Allocations size in bytes for the node excluding children. + */ + selfSize: number; + /** + * Child nodes. + */ + children: SamplingHeapProfileNode[]; + } + + /** + * Profile. + */ + interface SamplingHeapProfile { + head: SamplingHeapProfileNode; + } + + interface StartTrackingHeapObjectsParameterType { + trackAllocations?: boolean | undefined; + } + + interface StopTrackingHeapObjectsParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped. + */ + reportProgress?: boolean | undefined; + } + + interface TakeHeapSnapshotParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken. + */ + reportProgress?: boolean | undefined; + } + + interface GetObjectByHeapObjectIdParameterType { + objectId: HeapSnapshotObjectId; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + } + + interface AddInspectedHeapObjectParameterType { + /** + * Heap snapshot object id to be accessible by means of $x command line API. + */ + heapObjectId: HeapSnapshotObjectId; + } + + interface GetHeapObjectIdParameterType { + /** + * Identifier of the object to get heap object id for. + */ + objectId: Runtime.RemoteObjectId; + } + + interface StartSamplingParameterType { + /** + * Average sample interval in bytes. Poisson distribution is used for the intervals. The default value is 32768 bytes. + */ + samplingInterval?: number | undefined; + } + + interface GetObjectByHeapObjectIdReturnType { + /** + * Evaluation result. + */ + result: Runtime.RemoteObject; + } + + interface GetHeapObjectIdReturnType { + /** + * Id of the heap snapshot object corresponding to the passed remote object id. + */ + heapSnapshotObjectId: HeapSnapshotObjectId; + } + + interface StopSamplingReturnType { + /** + * Recorded sampling heap profile. + */ + profile: SamplingHeapProfile; + } + + interface GetSamplingProfileReturnType { + /** + * Return the sampling profile being collected. + */ + profile: SamplingHeapProfile; + } + + interface AddHeapSnapshotChunkEventDataType { + chunk: string; + } + + interface ReportHeapSnapshotProgressEventDataType { + done: number; + total: number; + finished?: boolean | undefined; + } + + interface LastSeenObjectIdEventDataType { + lastSeenObjectId: number; + timestamp: number; + } + + interface HeapStatsUpdateEventDataType { + /** + * An array of triplets. Each triplet describes a fragment. The first integer is the fragment index, the second integer is a total count of objects for the fragment, the third integer is a total size of the objects for the fragment. + */ + statsUpdate: number[]; + } + } + + namespace NodeTracing { + interface TraceConfig { + /** + * Controls how the trace buffer stores data. + */ + recordMode?: string | undefined; + /** + * Included category filters. + */ + includedCategories: string[]; + } + + interface StartParameterType { + traceConfig: TraceConfig; + } + + interface GetCategoriesReturnType { + /** + * A list of supported tracing categories. + */ + categories: string[]; + } + + interface DataCollectedEventDataType { + value: Array<{}>; + } + } + + namespace NodeWorker { + type WorkerID = string; + + /** + * Unique identifier of attached debugging session. + */ + type SessionID = string; + + interface WorkerInfo { + workerId: WorkerID; + type: string; + title: string; + url: string; + } + + interface SendMessageToWorkerParameterType { + message: string; + /** + * Identifier of the session. + */ + sessionId: SessionID; + } + + interface EnableParameterType { + /** + * Whether to new workers should be paused until the frontend sends `Runtime.runIfWaitingForDebugger` + * message to run them. + */ + waitForDebuggerOnStart: boolean; + } + + interface DetachParameterType { + sessionId: SessionID; + } + + interface AttachedToWorkerEventDataType { + /** + * Identifier assigned to the session used to send/receive messages. + */ + sessionId: SessionID; + workerInfo: WorkerInfo; + waitingForDebugger: boolean; + } + + interface DetachedFromWorkerEventDataType { + /** + * Detached session identifier. + */ + sessionId: SessionID; + } + + interface ReceivedMessageFromWorkerEventDataType { + /** + * Identifier of a session which sends a message. + */ + sessionId: SessionID; + message: string; + } + } + + namespace NodeRuntime { + interface NotifyWhenWaitingForDisconnectParameterType { + enabled: boolean; + } + } + + /** + * The inspector.Session is used for dispatching messages to the V8 inspector back-end and receiving message responses and notifications. + */ + class Session extends EventEmitter { + /** + * Create a new instance of the inspector.Session class. + * The inspector session needs to be connected through session.connect() before the messages can be dispatched to the inspector backend. + */ + constructor(); + + /** + * Connects a session to the inspector back-end. + */ + connect(): void; + + /** + * Connects a session to the main thread inspector back-end. + * An exception will be thrown if this API was not called on a Worker + * thread. + * @since v12.11.0 + */ + connectToMainThread(): void; + + /** + * Immediately close the session. All pending message callbacks will be called with an error. + * session.connect() will need to be called to be able to send messages again. + * Reconnected session will lose all inspector state, such as enabled agents or configured breakpoints. + */ + disconnect(): void; + + /** + * Posts a message to the inspector back-end. callback will be notified when a response is received. + * callback is a function that accepts two optional arguments - error and message-specific result. + */ + post(method: string, params?: {}, callback?: (err: Error | null, params?: {}) => void): void; + post(method: string, callback?: (err: Error | null, params?: {}) => void): void; + + /** + * Returns supported domains. + */ + post(method: "Schema.getDomains", callback?: (err: Error | null, params: Schema.GetDomainsReturnType) => void): void; + + /** + * Evaluates expression on global object. + */ + post(method: "Runtime.evaluate", params?: Runtime.EvaluateParameterType, callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + post(method: "Runtime.evaluate", callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + + /** + * Add handler to promise with given promise object id. + */ + post(method: "Runtime.awaitPromise", params?: Runtime.AwaitPromiseParameterType, callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + post(method: "Runtime.awaitPromise", callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + + /** + * Calls function with given declaration on the given object. Object group of the result is inherited from the target object. + */ + post(method: "Runtime.callFunctionOn", params?: Runtime.CallFunctionOnParameterType, callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + post(method: "Runtime.callFunctionOn", callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + + /** + * Returns properties of a given object. Object group of the result is inherited from the target object. + */ + post(method: "Runtime.getProperties", params?: Runtime.GetPropertiesParameterType, callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + post(method: "Runtime.getProperties", callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + + /** + * Releases remote object with given id. + */ + post(method: "Runtime.releaseObject", params?: Runtime.ReleaseObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: "Runtime.releaseObject", callback?: (err: Error | null) => void): void; + + /** + * Releases all remote objects that belong to a given group. + */ + post(method: "Runtime.releaseObjectGroup", params?: Runtime.ReleaseObjectGroupParameterType, callback?: (err: Error | null) => void): void; + post(method: "Runtime.releaseObjectGroup", callback?: (err: Error | null) => void): void; + + /** + * Tells inspected instance to run if it was waiting for debugger to attach. + */ + post(method: "Runtime.runIfWaitingForDebugger", callback?: (err: Error | null) => void): void; + + /** + * Enables reporting of execution contexts creation by means of executionContextCreated event. When the reporting gets enabled the event will be sent immediately for each existing execution context. + */ + post(method: "Runtime.enable", callback?: (err: Error | null) => void): void; + + /** + * Disables reporting of execution contexts creation. + */ + post(method: "Runtime.disable", callback?: (err: Error | null) => void): void; + + /** + * Discards collected exceptions and console API calls. + */ + post(method: "Runtime.discardConsoleEntries", callback?: (err: Error | null) => void): void; + + /** + * @experimental + */ + post(method: "Runtime.setCustomObjectFormatterEnabled", params?: Runtime.SetCustomObjectFormatterEnabledParameterType, callback?: (err: Error | null) => void): void; + post(method: "Runtime.setCustomObjectFormatterEnabled", callback?: (err: Error | null) => void): void; + + /** + * Compiles expression. + */ + post(method: "Runtime.compileScript", params?: Runtime.CompileScriptParameterType, callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + post(method: "Runtime.compileScript", callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + + /** + * Runs script with given id in a given context. + */ + post(method: "Runtime.runScript", params?: Runtime.RunScriptParameterType, callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: "Runtime.runScript", callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + + post(method: "Runtime.queryObjects", params?: Runtime.QueryObjectsParameterType, callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + post(method: "Runtime.queryObjects", callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + + /** + * Returns all let, const and class variables from global scope. + */ + post( + method: "Runtime.globalLexicalScopeNames", + params?: Runtime.GlobalLexicalScopeNamesParameterType, + callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void + ): void; + post(method: "Runtime.globalLexicalScopeNames", callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void): void; + + /** + * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received. + */ + post(method: "Debugger.enable", callback?: (err: Error | null, params: Debugger.EnableReturnType) => void): void; + + /** + * Disables debugger for given page. + */ + post(method: "Debugger.disable", callback?: (err: Error | null) => void): void; + + /** + * Activates / deactivates all breakpoints on the page. + */ + post(method: "Debugger.setBreakpointsActive", params?: Debugger.SetBreakpointsActiveParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setBreakpointsActive", callback?: (err: Error | null) => void): void; + + /** + * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). + */ + post(method: "Debugger.setSkipAllPauses", params?: Debugger.SetSkipAllPausesParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setSkipAllPauses", callback?: (err: Error | null) => void): void; + + /** + * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in locations property. Further matching script parsing will result in subsequent breakpointResolved events issued. This logical breakpoint will survive page reloads. + */ + post(method: "Debugger.setBreakpointByUrl", params?: Debugger.SetBreakpointByUrlParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + post(method: "Debugger.setBreakpointByUrl", callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + + /** + * Sets JavaScript breakpoint at a given location. + */ + post(method: "Debugger.setBreakpoint", params?: Debugger.SetBreakpointParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + post(method: "Debugger.setBreakpoint", callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + + /** + * Removes JavaScript breakpoint. + */ + post(method: "Debugger.removeBreakpoint", params?: Debugger.RemoveBreakpointParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.removeBreakpoint", callback?: (err: Error | null) => void): void; + + /** + * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same. + */ + post( + method: "Debugger.getPossibleBreakpoints", + params?: Debugger.GetPossibleBreakpointsParameterType, + callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void + ): void; + post(method: "Debugger.getPossibleBreakpoints", callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void): void; + + /** + * Continues execution until specific location is reached. + */ + post(method: "Debugger.continueToLocation", params?: Debugger.ContinueToLocationParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.continueToLocation", callback?: (err: Error | null) => void): void; + + /** + * @experimental + */ + post(method: "Debugger.pauseOnAsyncCall", params?: Debugger.PauseOnAsyncCallParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.pauseOnAsyncCall", callback?: (err: Error | null) => void): void; + + /** + * Steps over the statement. + */ + post(method: "Debugger.stepOver", callback?: (err: Error | null) => void): void; + + /** + * Steps into the function call. + */ + post(method: "Debugger.stepInto", params?: Debugger.StepIntoParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.stepInto", callback?: (err: Error | null) => void): void; + + /** + * Steps out of the function call. + */ + post(method: "Debugger.stepOut", callback?: (err: Error | null) => void): void; + + /** + * Stops on the next JavaScript statement. + */ + post(method: "Debugger.pause", callback?: (err: Error | null) => void): void; + + /** + * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called. + * @experimental + */ + post(method: "Debugger.scheduleStepIntoAsync", callback?: (err: Error | null) => void): void; + + /** + * Resumes JavaScript execution. + */ + post(method: "Debugger.resume", callback?: (err: Error | null) => void): void; + + /** + * Returns stack trace with given stackTraceId. + * @experimental + */ + post(method: "Debugger.getStackTrace", params?: Debugger.GetStackTraceParameterType, callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + post(method: "Debugger.getStackTrace", callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + + /** + * Searches for given string in script content. + */ + post(method: "Debugger.searchInContent", params?: Debugger.SearchInContentParameterType, callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + post(method: "Debugger.searchInContent", callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + + /** + * Edits JavaScript source live. + */ + post(method: "Debugger.setScriptSource", params?: Debugger.SetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + post(method: "Debugger.setScriptSource", callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + + /** + * Restarts particular call frame from the beginning. + */ + post(method: "Debugger.restartFrame", params?: Debugger.RestartFrameParameterType, callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + post(method: "Debugger.restartFrame", callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + + /** + * Returns source for the script with given id. + */ + post(method: "Debugger.getScriptSource", params?: Debugger.GetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + post(method: "Debugger.getScriptSource", callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + + /** + * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is none. + */ + post(method: "Debugger.setPauseOnExceptions", params?: Debugger.SetPauseOnExceptionsParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setPauseOnExceptions", callback?: (err: Error | null) => void): void; + + /** + * Evaluates expression on a given call frame. + */ + post(method: "Debugger.evaluateOnCallFrame", params?: Debugger.EvaluateOnCallFrameParameterType, callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + post(method: "Debugger.evaluateOnCallFrame", callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + + /** + * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually. + */ + post(method: "Debugger.setVariableValue", params?: Debugger.SetVariableValueParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setVariableValue", callback?: (err: Error | null) => void): void; + + /** + * Changes return value in top frame. Available only at return break position. + * @experimental + */ + post(method: "Debugger.setReturnValue", params?: Debugger.SetReturnValueParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setReturnValue", callback?: (err: Error | null) => void): void; + + /** + * Enables or disables async call stacks tracking. + */ + post(method: "Debugger.setAsyncCallStackDepth", params?: Debugger.SetAsyncCallStackDepthParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setAsyncCallStackDepth", callback?: (err: Error | null) => void): void; + + /** + * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. + * @experimental + */ + post(method: "Debugger.setBlackboxPatterns", params?: Debugger.SetBlackboxPatternsParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setBlackboxPatterns", callback?: (err: Error | null) => void): void; + + /** + * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted. + * @experimental + */ + post(method: "Debugger.setBlackboxedRanges", params?: Debugger.SetBlackboxedRangesParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setBlackboxedRanges", callback?: (err: Error | null) => void): void; + + /** + * Enables console domain, sends the messages collected so far to the client by means of the messageAdded notification. + */ + post(method: "Console.enable", callback?: (err: Error | null) => void): void; + + /** + * Disables console domain, prevents further console messages from being reported to the client. + */ + post(method: "Console.disable", callback?: (err: Error | null) => void): void; + + /** + * Does nothing. + */ + post(method: "Console.clearMessages", callback?: (err: Error | null) => void): void; + + post(method: "Profiler.enable", callback?: (err: Error | null) => void): void; + + post(method: "Profiler.disable", callback?: (err: Error | null) => void): void; + + /** + * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. + */ + post(method: "Profiler.setSamplingInterval", params?: Profiler.SetSamplingIntervalParameterType, callback?: (err: Error | null) => void): void; + post(method: "Profiler.setSamplingInterval", callback?: (err: Error | null) => void): void; + + post(method: "Profiler.start", callback?: (err: Error | null) => void): void; + + post(method: "Profiler.stop", callback?: (err: Error | null, params: Profiler.StopReturnType) => void): void; + + /** + * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters. + */ + post(method: "Profiler.startPreciseCoverage", params?: Profiler.StartPreciseCoverageParameterType, callback?: (err: Error | null) => void): void; + post(method: "Profiler.startPreciseCoverage", callback?: (err: Error | null) => void): void; + + /** + * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code. + */ + post(method: "Profiler.stopPreciseCoverage", callback?: (err: Error | null) => void): void; + + /** + * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started. + */ + post(method: "Profiler.takePreciseCoverage", callback?: (err: Error | null, params: Profiler.TakePreciseCoverageReturnType) => void): void; + + /** + * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection. + */ + post(method: "Profiler.getBestEffortCoverage", callback?: (err: Error | null, params: Profiler.GetBestEffortCoverageReturnType) => void): void; + + /** + * Enable type profile. + * @experimental + */ + post(method: "Profiler.startTypeProfile", callback?: (err: Error | null) => void): void; + + /** + * Disable type profile. Disabling releases type profile data collected so far. + * @experimental + */ + post(method: "Profiler.stopTypeProfile", callback?: (err: Error | null) => void): void; + + /** + * Collect type profile. + * @experimental + */ + post(method: "Profiler.takeTypeProfile", callback?: (err: Error | null, params: Profiler.TakeTypeProfileReturnType) => void): void; + + post(method: "HeapProfiler.enable", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.disable", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.startTrackingHeapObjects", params?: HeapProfiler.StartTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.startTrackingHeapObjects", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.stopTrackingHeapObjects", params?: HeapProfiler.StopTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.stopTrackingHeapObjects", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.takeHeapSnapshot", params?: HeapProfiler.TakeHeapSnapshotParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.takeHeapSnapshot", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.collectGarbage", callback?: (err: Error | null) => void): void; + + post( + method: "HeapProfiler.getObjectByHeapObjectId", + params?: HeapProfiler.GetObjectByHeapObjectIdParameterType, + callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void + ): void; + post(method: "HeapProfiler.getObjectByHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void): void; + + /** + * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions). + */ + post(method: "HeapProfiler.addInspectedHeapObject", params?: HeapProfiler.AddInspectedHeapObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.addInspectedHeapObject", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.getHeapObjectId", params?: HeapProfiler.GetHeapObjectIdParameterType, callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: "HeapProfiler.getHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + + post(method: "HeapProfiler.startSampling", params?: HeapProfiler.StartSamplingParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.startSampling", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.stopSampling", callback?: (err: Error | null, params: HeapProfiler.StopSamplingReturnType) => void): void; + + post(method: "HeapProfiler.getSamplingProfile", callback?: (err: Error | null, params: HeapProfiler.GetSamplingProfileReturnType) => void): void; + + /** + * Gets supported tracing categories. + */ + post(method: "NodeTracing.getCategories", callback?: (err: Error | null, params: NodeTracing.GetCategoriesReturnType) => void): void; + + /** + * Start trace events collection. + */ + post(method: "NodeTracing.start", params?: NodeTracing.StartParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeTracing.start", callback?: (err: Error | null) => void): void; + + /** + * Stop trace events collection. Remaining collected events will be sent as a sequence of + * dataCollected events followed by tracingComplete event. + */ + post(method: "NodeTracing.stop", callback?: (err: Error | null) => void): void; + + /** + * Sends protocol message over session with given id. + */ + post(method: "NodeWorker.sendMessageToWorker", params?: NodeWorker.SendMessageToWorkerParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeWorker.sendMessageToWorker", callback?: (err: Error | null) => void): void; + + /** + * Instructs the inspector to attach to running workers. Will also attach to new workers + * as they start + */ + post(method: "NodeWorker.enable", params?: NodeWorker.EnableParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeWorker.enable", callback?: (err: Error | null) => void): void; + + /** + * Detaches from all running workers and disables attaching to new workers as they are started. + */ + post(method: "NodeWorker.disable", callback?: (err: Error | null) => void): void; + + /** + * Detached from the worker with given sessionId. + */ + post(method: "NodeWorker.detach", params?: NodeWorker.DetachParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeWorker.detach", callback?: (err: Error | null) => void): void; + + /** + * Enable the `NodeRuntime.waitingForDisconnect`. + */ + post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", callback?: (err: Error | null) => void): void; + + // Events + + addListener(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + addListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + addListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + addListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + addListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + addListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + addListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + addListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + addListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + addListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + addListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + addListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + addListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + addListener(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + addListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + addListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + addListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + addListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + addListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + addListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + addListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + addListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + addListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + addListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + addListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + addListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + addListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + addListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "inspectorNotification", message: InspectorNotification<{}>): boolean; + emit(event: "Runtime.executionContextCreated", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextDestroyed", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextsCleared"): boolean; + emit(event: "Runtime.exceptionThrown", message: InspectorNotification): boolean; + emit(event: "Runtime.exceptionRevoked", message: InspectorNotification): boolean; + emit(event: "Runtime.consoleAPICalled", message: InspectorNotification): boolean; + emit(event: "Runtime.inspectRequested", message: InspectorNotification): boolean; + emit(event: "Debugger.scriptParsed", message: InspectorNotification): boolean; + emit(event: "Debugger.scriptFailedToParse", message: InspectorNotification): boolean; + emit(event: "Debugger.breakpointResolved", message: InspectorNotification): boolean; + emit(event: "Debugger.paused", message: InspectorNotification): boolean; + emit(event: "Debugger.resumed"): boolean; + emit(event: "Console.messageAdded", message: InspectorNotification): boolean; + emit(event: "Profiler.consoleProfileStarted", message: InspectorNotification): boolean; + emit(event: "Profiler.consoleProfileFinished", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.addHeapSnapshotChunk", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.resetProfiles"): boolean; + emit(event: "HeapProfiler.reportHeapSnapshotProgress", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.lastSeenObjectId", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.heapStatsUpdate", message: InspectorNotification): boolean; + emit(event: "NodeTracing.dataCollected", message: InspectorNotification): boolean; + emit(event: "NodeTracing.tracingComplete"): boolean; + emit(event: "NodeWorker.attachedToWorker", message: InspectorNotification): boolean; + emit(event: "NodeWorker.detachedFromWorker", message: InspectorNotification): boolean; + emit(event: "NodeWorker.receivedMessageFromWorker", message: InspectorNotification): boolean; + emit(event: "NodeRuntime.waitingForDisconnect"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + on(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + on(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + on(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + on(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + on(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + on(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + on(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + on(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + on(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + on(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + on(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + on(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + on(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + on(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + on(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + on(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + on(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + on(event: "HeapProfiler.resetProfiles", listener: () => void): this; + on(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + on(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + on(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + on(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + on(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + on(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + on(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + on(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + on(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + once(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + once(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + once(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + once(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + once(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + once(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + once(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + once(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + once(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + once(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + once(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + once(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + once(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + once(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + once(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + once(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + once(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + once(event: "HeapProfiler.resetProfiles", listener: () => void): this; + once(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + once(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + once(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + once(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + once(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + once(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + once(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + once(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + once(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + prependListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + prependListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + prependListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + prependListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + prependListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + prependListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + prependListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + prependListener(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + prependListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + prependListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + prependListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + prependListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + prependListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + prependListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + prependListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + prependListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependOnceListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + prependOnceListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + prependOnceListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + prependOnceListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + prependOnceListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + prependOnceListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + prependOnceListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependOnceListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependOnceListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + prependOnceListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependOnceListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependOnceListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + prependOnceListener(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + prependOnceListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependOnceListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + prependOnceListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + prependOnceListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependOnceListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependOnceListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + prependOnceListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependOnceListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + prependOnceListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + prependOnceListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependOnceListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependOnceListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + } + + // Top Level API + + /** + * Activate inspector on host and port. Equivalent to node --inspect=[[host:]port], but can be done programatically after node has started. + * If wait is true, will block until a client has connected to the inspect port and flow control has been passed to the debugger client. + * @param port Port to listen on for inspector connections. Optional, defaults to what was specified on the CLI. + * @param host Host to listen on for inspector connections. Optional, defaults to what was specified on the CLI. + * @param wait Block until a client has connected. Optional, defaults to false. + */ + function open(port?: number, host?: string, wait?: boolean): void; + + /** + * Deactivate the inspector. Blocks until there are no active connections. + */ + function close(): void; + + /** + * Return the URL of the active inspector, or `undefined` if there is none. + */ + function url(): string | undefined; + + /** + * Blocks until a client (existing or connected later) has sent + * `Runtime.runIfWaitingForDebugger` command. + * An exception will be thrown if there is no active inspector. + */ + function waitForDebugger(): void; +} +declare module 'node:inspector' { + import EventEmitter = require('inspector'); + export = EventEmitter; +} diff --git a/node_backend/node_modules/@types/node/module.d.ts b/node_backend/node_modules/@types/node/module.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f8d102db0de15495294062f275c0db2ea55893f1 --- /dev/null +++ b/node_backend/node_modules/@types/node/module.d.ts @@ -0,0 +1,56 @@ +declare module "module" { + import { URL } from "url"; + namespace Module { + /** + * Updates all the live bindings for builtin ES Modules to match the properties of the CommonJS exports. + * It does not add or remove exported names from the ES Modules. + */ + function syncBuiltinESMExports(): void; + + function findSourceMap(path: string, error?: Error): SourceMap; + interface SourceMapPayload { + file: string; + version: number; + sources: string[]; + sourcesContent: string[]; + names: string[]; + mappings: string; + sourceRoot: string; + } + + interface SourceMapping { + generatedLine: number; + generatedColumn: number; + originalSource: string; + originalLine: number; + originalColumn: number; + } + + class SourceMap { + readonly payload: SourceMapPayload; + constructor(payload: SourceMapPayload); + findEntry(line: number, column: number): SourceMapping; + } + } + interface Module extends NodeModule {} + class Module { + static runMain(): void; + static wrap(code: string): string; + + /** + * @deprecated Deprecated since: v12.2.0. Please use createRequire() instead. + */ + static createRequireFromPath(path: string): NodeRequire; + static createRequire(path: string | URL): NodeRequire; + static builtinModules: string[]; + + static Module: typeof Module; + + constructor(id: string, parent?: Module); + } + export = Module; +} +declare module "node:module" { + import module = require("module"); + export = module; +} diff --git a/node_backend/node_modules/@types/node/net.d.ts b/node_backend/node_modules/@types/node/net.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d00a4529813f7d65bae4811a65b3dd8cb34f1e82 --- /dev/null +++ b/node_backend/node_modules/@types/node/net.d.ts @@ -0,0 +1,324 @@ +declare module "net" { + import * as stream from "stream"; + import EventEmitter = require("events"); + import * as dns from "dns"; + + type LookupFunction = ( + hostname: string, + options: dns.LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ) => void; + + interface AddressInfo { + address: string; + family: string; + port: number; + } + + interface SocketConstructorOpts { + fd?: number | undefined; + allowHalfOpen?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + } + + interface OnReadOpts { + buffer: Uint8Array | (() => Uint8Array); + /** + * This function is called for every chunk of incoming data. + * Two arguments are passed to it: the number of bytes written to buffer and a reference to buffer. + * Return false from this function to implicitly pause() the socket. + */ + callback(bytesWritten: number, buf: Uint8Array): boolean; + } + + interface ConnectOpts { + /** + * If specified, incoming data is stored in a single buffer and passed to the supplied callback when data arrives on the socket. + * Note: this will cause the streaming functionality to not provide any data, however events like 'error', 'end', and 'close' will + * still be emitted as normal and methods like pause() and resume() will also behave as expected. + */ + onread?: OnReadOpts | undefined; + } + + interface TcpSocketConnectOpts extends ConnectOpts { + port: number; + host?: string | undefined; + localAddress?: string | undefined; + localPort?: number | undefined; + hints?: number | undefined; + family?: number | undefined; + lookup?: LookupFunction | undefined; + } + + interface IpcSocketConnectOpts extends ConnectOpts { + path: string; + } + + type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; + type SocketReadyState = "opening" | "open" | "readOnly" | "writeOnly" | "closed"; + + class Socket extends stream.Duplex { + constructor(options?: SocketConstructorOpts); + + // Extended base methods + write(buffer: Uint8Array | string, cb?: (err?: Error) => void): boolean; + write(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error) => void): boolean; + + connect(options: SocketConnectOpts, connectionListener?: () => void): this; + connect(port: number, host: string, connectionListener?: () => void): this; + connect(port: number, connectionListener?: () => void): this; + connect(path: string, connectionListener?: () => void): this; + + setEncoding(encoding?: BufferEncoding): this; + pause(): this; + resume(): this; + setTimeout(timeout: number, callback?: () => void): this; + setNoDelay(noDelay?: boolean): this; + setKeepAlive(enable?: boolean, initialDelay?: number): this; + address(): AddressInfo | {}; + unref(): this; + ref(): this; + + /** @deprecated since v14.6.0 - Use `writableLength` instead. */ + readonly bufferSize: number; + readonly bytesRead: number; + readonly bytesWritten: number; + readonly connecting: boolean; + readonly destroyed: boolean; + readonly localAddress: string; + readonly localPort: number; + readonly pending: boolean; + /** + * This property represents the state of the connection as a string. + * @see {https://nodejs.org/api/net.html#socketreadystate} + * @since v0.5.0 + */ + readonly readyState: SocketReadyState; + readonly remoteAddress?: string | undefined; + readonly remoteFamily?: string | undefined; + readonly remotePort?: number | undefined; + /** + * The socket timeout in milliseconds as set by socket.setTimeout(). It is undefined if a timeout has not been set. + * @since v10.7.0 + */ + readonly timeout?: number | undefined; + + // Extended base methods + end(cb?: () => void): this; + end(buffer: Uint8Array | string, cb?: () => void): this; + end(str: Uint8Array | string, encoding?: BufferEncoding, cb?: () => void): this; + + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. data + * 4. drain + * 5. end + * 6. error + * 7. lookup + * 8. timeout + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (had_error: boolean) => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "data", listener: (data: Buffer) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "timeout", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", had_error: boolean): boolean; + emit(event: "connect"): boolean; + emit(event: "data", data: Buffer): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean; + emit(event: "ready"): boolean; + emit(event: "timeout"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (had_error: boolean) => void): this; + on(event: "connect", listener: () => void): this; + on(event: "data", listener: (data: Buffer) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + on(event: "ready", listener: () => void): this; + on(event: "timeout", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (had_error: boolean) => void): this; + once(event: "connect", listener: () => void): this; + once(event: "data", listener: (data: Buffer) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + once(event: "ready", listener: () => void): this; + once(event: "timeout", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (had_error: boolean) => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "data", listener: (data: Buffer) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "timeout", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: (had_error: boolean) => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener(event: "data", listener: (data: Buffer) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + } + + interface ListenOptions { + port?: number | undefined; + host?: string | undefined; + backlog?: number | undefined; + path?: string | undefined; + exclusive?: boolean | undefined; + readableAll?: boolean | undefined; + writableAll?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + } + + interface ServerOpts { + /** + * Indicates whether half-opened TCP connections are allowed. + * @default false + */ + allowHalfOpen?: boolean | undefined; + + /** + * Indicates whether the socket should be paused on incoming connections. + * @default false + */ + pauseOnConnect?: boolean | undefined; + } + + // https://github.com/nodejs/node/blob/master/lib/net.js + class Server extends EventEmitter { + constructor(connectionListener?: (socket: Socket) => void); + constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void); + + listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, hostname?: string, listeningListener?: () => void): this; + listen(port?: number, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, listeningListener?: () => void): this; + listen(path: string, backlog?: number, listeningListener?: () => void): this; + listen(path: string, listeningListener?: () => void): this; + listen(options: ListenOptions, listeningListener?: () => void): this; + listen(handle: any, backlog?: number, listeningListener?: () => void): this; + listen(handle: any, listeningListener?: () => void): this; + close(callback?: (err?: Error) => void): this; + address(): AddressInfo | string | null; + getConnections(cb: (error: Error | null, count: number) => void): void; + ref(): this; + unref(): this; + maxConnections: number; + connections: number; + listening: boolean; + + /** + * events.EventEmitter + * 1. close + * 2. connection + * 3. error + * 4. listening + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + } + + interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + + interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + + type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; + + function createServer(connectionListener?: (socket: Socket) => void): Server; + function createServer(options?: ServerOpts, connectionListener?: (socket: Socket) => void): Server; + function connect(options: NetConnectOpts, connectionListener?: () => void): Socket; + function connect(port: number, host?: string, connectionListener?: () => void): Socket; + function connect(path: string, connectionListener?: () => void): Socket; + function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket; + function createConnection(port: number, host?: string, connectionListener?: () => void): Socket; + function createConnection(path: string, connectionListener?: () => void): Socket; + function isIP(input: string): number; + function isIPv4(input: string): boolean; + function isIPv6(input: string): boolean; +} +declare module "node:net" { + export * from "net"; +} diff --git a/node_backend/node_modules/@types/node/os.d.ts b/node_backend/node_modules/@types/node/os.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..199fbcb7786211e55ea2fbf26dd6a4f5e1412b92 --- /dev/null +++ b/node_backend/node_modules/@types/node/os.d.ts @@ -0,0 +1,243 @@ +declare module "os" { + interface CpuInfo { + model: string; + speed: number; + times: { + user: number; + nice: number; + sys: number; + idle: number; + irq: number; + }; + } + + interface NetworkInterfaceBase { + address: string; + netmask: string; + mac: string; + internal: boolean; + cidr: string | null; + } + + interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase { + family: "IPv4"; + scopeid?: undefined; + } + + interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase { + family: "IPv6"; + scopeid: number; + } + + interface UserInfo { + username: T; + uid: number; + gid: number; + shell: T; + homedir: T; + } + + type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6; + + function hostname(): string; + function loadavg(): number[]; + function uptime(): number; + function freemem(): number; + function totalmem(): number; + function cpus(): CpuInfo[]; + function type(): string; + function release(): string; + function networkInterfaces(): NodeJS.Dict; + function homedir(): string; + function userInfo(options: { encoding: "buffer" }): UserInfo; + function userInfo(options?: { encoding: BufferEncoding }): UserInfo; + + type SignalConstants = { + [key in NodeJS.Signals]: number; + }; + + namespace constants { + const UV_UDP_REUSEADDR: number; + namespace signals {} + const signals: SignalConstants; + namespace errno { + const E2BIG: number; + const EACCES: number; + const EADDRINUSE: number; + const EADDRNOTAVAIL: number; + const EAFNOSUPPORT: number; + const EAGAIN: number; + const EALREADY: number; + const EBADF: number; + const EBADMSG: number; + const EBUSY: number; + const ECANCELED: number; + const ECHILD: number; + const ECONNABORTED: number; + const ECONNREFUSED: number; + const ECONNRESET: number; + const EDEADLK: number; + const EDESTADDRREQ: number; + const EDOM: number; + const EDQUOT: number; + const EEXIST: number; + const EFAULT: number; + const EFBIG: number; + const EHOSTUNREACH: number; + const EIDRM: number; + const EILSEQ: number; + const EINPROGRESS: number; + const EINTR: number; + const EINVAL: number; + const EIO: number; + const EISCONN: number; + const EISDIR: number; + const ELOOP: number; + const EMFILE: number; + const EMLINK: number; + const EMSGSIZE: number; + const EMULTIHOP: number; + const ENAMETOOLONG: number; + const ENETDOWN: number; + const ENETRESET: number; + const ENETUNREACH: number; + const ENFILE: number; + const ENOBUFS: number; + const ENODATA: number; + const ENODEV: number; + const ENOENT: number; + const ENOEXEC: number; + const ENOLCK: number; + const ENOLINK: number; + const ENOMEM: number; + const ENOMSG: number; + const ENOPROTOOPT: number; + const ENOSPC: number; + const ENOSR: number; + const ENOSTR: number; + const ENOSYS: number; + const ENOTCONN: number; + const ENOTDIR: number; + const ENOTEMPTY: number; + const ENOTSOCK: number; + const ENOTSUP: number; + const ENOTTY: number; + const ENXIO: number; + const EOPNOTSUPP: number; + const EOVERFLOW: number; + const EPERM: number; + const EPIPE: number; + const EPROTO: number; + const EPROTONOSUPPORT: number; + const EPROTOTYPE: number; + const ERANGE: number; + const EROFS: number; + const ESPIPE: number; + const ESRCH: number; + const ESTALE: number; + const ETIME: number; + const ETIMEDOUT: number; + const ETXTBSY: number; + const EWOULDBLOCK: number; + const EXDEV: number; + const WSAEINTR: number; + const WSAEBADF: number; + const WSAEACCES: number; + const WSAEFAULT: number; + const WSAEINVAL: number; + const WSAEMFILE: number; + const WSAEWOULDBLOCK: number; + const WSAEINPROGRESS: number; + const WSAEALREADY: number; + const WSAENOTSOCK: number; + const WSAEDESTADDRREQ: number; + const WSAEMSGSIZE: number; + const WSAEPROTOTYPE: number; + const WSAENOPROTOOPT: number; + const WSAEPROTONOSUPPORT: number; + const WSAESOCKTNOSUPPORT: number; + const WSAEOPNOTSUPP: number; + const WSAEPFNOSUPPORT: number; + const WSAEAFNOSUPPORT: number; + const WSAEADDRINUSE: number; + const WSAEADDRNOTAVAIL: number; + const WSAENETDOWN: number; + const WSAENETUNREACH: number; + const WSAENETRESET: number; + const WSAECONNABORTED: number; + const WSAECONNRESET: number; + const WSAENOBUFS: number; + const WSAEISCONN: number; + const WSAENOTCONN: number; + const WSAESHUTDOWN: number; + const WSAETOOMANYREFS: number; + const WSAETIMEDOUT: number; + const WSAECONNREFUSED: number; + const WSAELOOP: number; + const WSAENAMETOOLONG: number; + const WSAEHOSTDOWN: number; + const WSAEHOSTUNREACH: number; + const WSAENOTEMPTY: number; + const WSAEPROCLIM: number; + const WSAEUSERS: number; + const WSAEDQUOT: number; + const WSAESTALE: number; + const WSAEREMOTE: number; + const WSASYSNOTREADY: number; + const WSAVERNOTSUPPORTED: number; + const WSANOTINITIALISED: number; + const WSAEDISCON: number; + const WSAENOMORE: number; + const WSAECANCELLED: number; + const WSAEINVALIDPROCTABLE: number; + const WSAEINVALIDPROVIDER: number; + const WSAEPROVIDERFAILEDINIT: number; + const WSASYSCALLFAILURE: number; + const WSASERVICE_NOT_FOUND: number; + const WSATYPE_NOT_FOUND: number; + const WSA_E_NO_MORE: number; + const WSA_E_CANCELLED: number; + const WSAEREFUSED: number; + } + namespace priority { + const PRIORITY_LOW: number; + const PRIORITY_BELOW_NORMAL: number; + const PRIORITY_NORMAL: number; + const PRIORITY_ABOVE_NORMAL: number; + const PRIORITY_HIGH: number; + const PRIORITY_HIGHEST: number; + } + } + + function arch(): string; + /** + * Returns a string identifying the kernel version. + * On POSIX systems, the operating system release is determined by calling + * [uname(3)][]. On Windows, `pRtlGetVersion` is used, and if it is not available, + * `GetVersionExW()` will be used. See + * https://en.wikipedia.org/wiki/Uname#Examples for more information. + */ + function version(): string; + function platform(): NodeJS.Platform; + function tmpdir(): string; + const EOL: string; + function endianness(): "BE" | "LE"; + /** + * Gets the priority of a process. + * Defaults to current process. + */ + function getPriority(pid?: number): number; + /** + * Sets the priority of the current process. + * @param priority Must be in range of -20 to 19 + */ + function setPriority(priority: number): void; + /** + * Sets the priority of the process specified process. + * @param priority Must be in range of -20 to 19 + */ + function setPriority(pid: number, priority: number): void; +} +declare module "node:os" { + export * from "os"; +} diff --git a/node_backend/node_modules/@types/node/package.json b/node_backend/node_modules/@types/node/package.json new file mode 100644 index 0000000000000000000000000000000000000000..578731e7b474c63d6a4b22fdfc99407d30e1e133 --- /dev/null +++ b/node_backend/node_modules/@types/node/package.json @@ -0,0 +1,232 @@ +{ + "name": "@types/node", + "version": "14.18.63", + "description": "TypeScript definitions for Node.js", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node", + "license": "MIT", + "contributors": [ + { + "name": "Microsoft TypeScript", + "url": "https://github.com/Microsoft", + "githubUsername": "Microsoft" + }, + { + "name": "DefinitelyTyped", + "url": "https://github.com/DefinitelyTyped", + "githubUsername": "DefinitelyTyped" + }, + { + "name": "Alberto Schiabel", + "url": "https://github.com/jkomyno", + "githubUsername": "jkomyno" + }, + { + "name": "Alvis HT Tang", + "url": "https://github.com/alvis", + "githubUsername": "alvis" + }, + { + "name": "Andrew Makarov", + "url": "https://github.com/r3nya", + "githubUsername": "r3nya" + }, + { + "name": "Benjamin Toueg", + "url": "https://github.com/btoueg", + "githubUsername": "btoueg" + }, + { + "name": "Chigozirim C.", + "url": "https://github.com/smac89", + "githubUsername": "smac89" + }, + { + "name": "David Junger", + "url": "https://github.com/touffy", + "githubUsername": "touffy" + }, + { + "name": "Deividas Bakanas", + "url": "https://github.com/DeividasBakanas", + "githubUsername": "DeividasBakanas" + }, + { + "name": "Eugene Y. Q. Shen", + "url": "https://github.com/eyqs", + "githubUsername": "eyqs" + }, + { + "name": "Hannes Magnusson", + "url": "https://github.com/Hannes-Magnusson-CK", + "githubUsername": "Hannes-Magnusson-CK" + }, + { + "name": "Hoàng Văn Khải", + "url": "https://github.com/KSXGitHub", + "githubUsername": "KSXGitHub" + }, + { + "name": "Huw", + "url": "https://github.com/hoo29", + "githubUsername": "hoo29" + }, + { + "name": "Kelvin Jin", + "url": "https://github.com/kjin", + "githubUsername": "kjin" + }, + { + "name": "Klaus Meinhardt", + "url": "https://github.com/ajafff", + "githubUsername": "ajafff" + }, + { + "name": "Lishude", + "url": "https://github.com/islishude", + "githubUsername": "islishude" + }, + { + "name": "Mariusz Wiktorczyk", + "url": "https://github.com/mwiktorczyk", + "githubUsername": "mwiktorczyk" + }, + { + "name": "Mohsen Azimi", + "url": "https://github.com/mohsen1", + "githubUsername": "mohsen1" + }, + { + "name": "Nicolas Even", + "url": "https://github.com/n-e", + "githubUsername": "n-e" + }, + { + "name": "Nikita Galkin", + "url": "https://github.com/galkin", + "githubUsername": "galkin" + }, + { + "name": "Parambir Singh", + "url": "https://github.com/parambirs", + "githubUsername": "parambirs" + }, + { + "name": "Sebastian Silbermann", + "url": "https://github.com/eps1lon", + "githubUsername": "eps1lon" + }, + { + "name": "Seth Westphal", + "url": "https://github.com/westy92", + "githubUsername": "westy92" + }, + { + "name": "Simon Schick", + "url": "https://github.com/SimonSchick", + "githubUsername": "SimonSchick" + }, + { + "name": "Thomas den Hollander", + "url": "https://github.com/ThomasdenH", + "githubUsername": "ThomasdenH" + }, + { + "name": "Wilco Bakker", + "url": "https://github.com/WilcoBakker", + "githubUsername": "WilcoBakker" + }, + { + "name": "wwwy3y3", + "url": "https://github.com/wwwy3y3", + "githubUsername": "wwwy3y3" + }, + { + "name": "Samuel Ainsworth", + "url": "https://github.com/samuela", + "githubUsername": "samuela" + }, + { + "name": "Kyle Uehlein", + "url": "https://github.com/kuehlein", + "githubUsername": "kuehlein" + }, + { + "name": "Thanik Bhongbhibhat", + "url": "https://github.com/bhongy", + "githubUsername": "bhongy" + }, + { + "name": "Marcin Kopacz", + "url": "https://github.com/chyzwar", + "githubUsername": "chyzwar" + }, + { + "name": "Trivikram Kamat", + "url": "https://github.com/trivikr", + "githubUsername": "trivikr" + }, + { + "name": "Junxiao Shi", + "url": "https://github.com/yoursunny", + "githubUsername": "yoursunny" + }, + { + "name": "Ilia Baryshnikov", + "url": "https://github.com/qwelias", + "githubUsername": "qwelias" + }, + { + "name": "ExE Boss", + "url": "https://github.com/ExE-Boss", + "githubUsername": "ExE-Boss" + }, + { + "name": "Piotr Błażejewicz", + "url": "https://github.com/peterblazejewicz", + "githubUsername": "peterblazejewicz" + }, + { + "name": "Anna Henningsen", + "url": "https://github.com/addaleax", + "githubUsername": "addaleax" + }, + { + "name": "Victor Perin", + "url": "https://github.com/victorperin", + "githubUsername": "victorperin" + }, + { + "name": "Yongsheng Zhang", + "url": "https://github.com/ZYSzys", + "githubUsername": "ZYSzys" + }, + { + "name": "Bond", + "url": "https://github.com/bondz", + "githubUsername": "bondz" + }, + { + "name": "Linus Unnebäck", + "url": "https://github.com/LinusU", + "githubUsername": "LinusU" + } + ], + "main": "", + "types": "index.d.ts", + "typesVersions": { + "<=4.8": { + "*": [ + "ts4.8/*" + ] + } + }, + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/node" + }, + "scripts": {}, + "dependencies": {}, + "typesPublisherContentHash": "094b5f53a7bae39684ec23bea14130aaf2772995fa789fc757b734b2f16b28f0", + "typeScriptVersion": "4.5" +} \ No newline at end of file diff --git a/node_backend/node_modules/@types/node/path.d.ts b/node_backend/node_modules/@types/node/path.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..09ae14ea15788e7402b8b8434c57f162e9486944 --- /dev/null +++ b/node_backend/node_modules/@types/node/path.d.ts @@ -0,0 +1,168 @@ +declare module "path" { + namespace path { + /** + * A parsed path object generated by path.parse() or consumed by path.format(). + */ + interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; + } + + interface FormatInputPathObject { + /** + * The root of the path such as '/' or 'c:\' + */ + root?: string | undefined; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir?: string | undefined; + /** + * The file name including extension (if any) such as 'index.html' + */ + base?: string | undefined; + /** + * The file extension (if any) such as '.html' + */ + ext?: string | undefined; + /** + * The file name without extension (if any) such as 'index' + */ + name?: string | undefined; + } + + interface PlatformPath { + /** + * Normalize a string path, reducing '..' and '.' parts. + * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. + * + * @param path string path to normalize. + * @throws {TypeError} if `path` is not a string. + */ + normalize(path: string): string; + /** + * Join all arguments together and normalize the resulting path. + * + * @param paths paths to join. + * @throws {TypeError} if any of the path segments is not a string. + */ + join(...paths: string[]): string; + /** + * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. + * + * Starting from leftmost {from} parameter, resolves {to} to an absolute path. + * + * If {to} isn't already absolute, {from} arguments are prepended in right to left order, + * until an absolute path is found. If after using all {from} paths still no absolute path is found, + * the current working directory is used as well. The resulting path is normalized, + * and trailing slashes are removed unless the path gets resolved to the root directory. + * + * @param paths A sequence of paths or path segments. + * @throws {TypeError} if any of the arguments is not a string. + */ + resolve(...paths: string[]): string; + /** + * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. + * + * If the given {path} is a zero-length string, `false` will be returned. + * + * @param path path to test. + * @throws {TypeError} if `path` is not a string. + */ + isAbsolute(path: string): boolean; + /** + * Solve the relative path from {from} to {to} based on the current working directory. + * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. + * + * @throws {TypeError} if either `from` or `to` is not a string. + */ + relative(from: string, to: string): string; + /** + * Return the directory name of a path. Similar to the Unix dirname command. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + dirname(path: string): string; + /** + * Return the last portion of a path. Similar to the Unix basename command. + * Often used to extract the file name from a fully qualified path. + * + * @param path the path to evaluate. + * @param ext optionally, an extension to remove from the result. + * @throws {TypeError} if `path` is not a string or if `ext` is given and is not a string. + */ + basename(path: string, ext?: string): string; + /** + * Return the extension of the path, from the last '.' to end of string in the last portion of the path. + * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + extname(path: string): string; + /** + * The platform-specific file separator. '\\' or '/'. + */ + readonly sep: "\\" | "/"; + /** + * The platform-specific file delimiter. ';' or ':'. + */ + readonly delimiter: ";" | ":"; + /** + * Returns an object from a path string - the opposite of format(). + * + * @param path path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + parse(path: string): ParsedPath; + /** + * Returns a path string from an object - the opposite of parse(). + * + * @param pathObject path to evaluate. + */ + format(pathObject: FormatInputPathObject): string; + /** + * On Windows systems only, returns an equivalent namespace-prefixed path for the given path. + * If path is not a string, path will be returned without modifications. + * This method is meaningful only on Windows system. + * On POSIX systems, the method is non-operational and always returns path without modifications. + */ + toNamespacedPath(path: string): string; + /** + * Posix specific pathing. + * Same as parent object on posix. + */ + readonly posix: PlatformPath; + /** + * Windows specific pathing. + * Same as parent object on windows + */ + readonly win32: PlatformPath; + } + } + const path: path.PlatformPath; + export = path; +} +declare module "node:path" { + import path = require("path"); + export = path; +} diff --git a/node_backend/node_modules/@types/node/perf_hooks.d.ts b/node_backend/node_modules/@types/node/perf_hooks.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4eb7179b3ae8720f75c90a9a6731728f04fcbef5 --- /dev/null +++ b/node_backend/node_modules/@types/node/perf_hooks.d.ts @@ -0,0 +1,274 @@ +declare module "perf_hooks" { + import { AsyncResource } from "async_hooks"; + + type EntryType = "node" | "mark" | "measure" | "gc" | "function" | "http2" | "http"; + + interface PerformanceEntry { + /** + * The total number of milliseconds elapsed for this entry. + * This value will not be meaningful for all Performance Entry types. + */ + readonly duration: number; + + /** + * The name of the performance entry. + */ + readonly name: string; + + /** + * The high resolution millisecond timestamp marking the starting time of the Performance Entry. + */ + readonly startTime: number; + + /** + * The type of the performance entry. + * Currently it may be one of: 'node', 'mark', 'measure', 'gc', or 'function'. + */ + readonly entryType: EntryType; + + /** + * When `performanceEntry.entryType` is equal to 'gc', `the performance.kind` property identifies + * the type of garbage collection operation that occurred. + * See perf_hooks.constants for valid values. + */ + readonly kind?: number | undefined; + + /** + * When `performanceEntry.entryType` is equal to 'gc', the `performance.flags` + * property contains additional information about garbage collection operation. + * See perf_hooks.constants for valid values. + */ + readonly flags?: number | undefined; + } + + interface PerformanceNodeTiming extends PerformanceEntry { + /** + * The high resolution millisecond timestamp at which the Node.js process completed bootstrap. + */ + readonly bootstrapComplete: number; + + /** + * The high resolution millisecond timestamp at which the Node.js process completed bootstrapping. + * If bootstrapping has not yet finished, the property has the value of -1. + */ + readonly environment: number; + + /** + * The high resolution millisecond timestamp at which the Node.js environment was initialized. + */ + readonly idleTime: number; + + /** + * The high resolution millisecond timestamp of the amount of time the event loop has been idle + * within the event loop's event provider (e.g. `epoll_wait`). This does not take CPU usage + * into consideration. If the event loop has not yet started (e.g., in the first tick of the main script), + * the property has the value of 0. + */ + readonly loopExit: number; + + /** + * The high resolution millisecond timestamp at which the Node.js event loop started. + * If the event loop has not yet started (e.g., in the first tick of the main script), the property has the value of -1. + */ + readonly loopStart: number; + + /** + * The high resolution millisecond timestamp at which the V8 platform was initialized. + */ + readonly v8Start: number; + } + + interface EventLoopUtilization { + idle: number; + active: number; + utilization: number; + } + + interface Performance { + /** + * If name is not provided, removes all PerformanceMark objects from the Performance Timeline. + * If name is provided, removes only the named mark. + * @param name + */ + clearMarks(name?: string): void; + + /** + * Creates a new PerformanceMark entry in the Performance Timeline. + * A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark', + * and whose performanceEntry.duration is always 0. + * Performance marks are used to mark specific significant moments in the Performance Timeline. + * @param name + */ + mark(name?: string): void; + + /** + * Creates a new PerformanceMeasure entry in the Performance Timeline. + * A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure', + * and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark. + * + * The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify + * any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist, + * then startMark is set to timeOrigin by default. + * + * The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp + * properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown. + * @param name + * @param startMark + * @param endMark + */ + measure(name: string, startMark?: string, endMark?: string): void; + + /** + * An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones. + */ + readonly nodeTiming: PerformanceNodeTiming; + + /** + * @return the current high resolution millisecond timestamp + */ + now(): number; + + /** + * The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured. + */ + readonly timeOrigin: number; + + /** + * Wraps a function within a new function that measures the running time of the wrapped function. + * A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed. + * @param fn + */ + timerify any>(fn: T): T; + + /** + * eventLoopUtilization is similar to CPU utilization except that it is calculated using high precision wall-clock time. + * It represents the percentage of time the event loop has spent outside the event loop's event provider (e.g. epoll_wait). + * No other CPU idle time is taken into consideration. + * + * @param util1 The result of a previous call to eventLoopUtilization() + * @param util2 The result of a previous call to eventLoopUtilization() prior to util1 + */ + eventLoopUtilization(util1?: EventLoopUtilization, util2?: EventLoopUtilization): EventLoopUtilization; + } + + interface PerformanceObserverEntryList { + /** + * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime. + */ + getEntries(): PerformanceEntry[]; + + /** + * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime + * whose performanceEntry.name is equal to name, and optionally, whose performanceEntry.entryType is equal to type. + */ + getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; + + /** + * @return Returns a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime + * whose performanceEntry.entryType is equal to type. + */ + getEntriesByType(type: EntryType): PerformanceEntry[]; + } + + type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void; + + class PerformanceObserver extends AsyncResource { + constructor(callback: PerformanceObserverCallback); + + /** + * Disconnects the PerformanceObserver instance from all notifications. + */ + disconnect(): void; + + /** + * Subscribes the PerformanceObserver instance to notifications of new PerformanceEntry instances identified by options.entryTypes. + * When options.buffered is false, the callback will be invoked once for every PerformanceEntry instance. + * Property buffered defaults to false. + * @param options + */ + observe(options: { entryTypes: ReadonlyArray; buffered?: boolean | undefined }): void; + } + + namespace constants { + const NODE_PERFORMANCE_GC_MAJOR: number; + const NODE_PERFORMANCE_GC_MINOR: number; + const NODE_PERFORMANCE_GC_INCREMENTAL: number; + const NODE_PERFORMANCE_GC_WEAKCB: number; + + const NODE_PERFORMANCE_GC_FLAGS_NO: number; + const NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number; + const NODE_PERFORMANCE_GC_FLAGS_FORCED: number; + const NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number; + const NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number; + } + + const performance: Performance; + + interface EventLoopMonitorOptions { + /** + * The sampling rate in milliseconds. + * Must be greater than zero. + * @default 10 + */ + resolution?: number | undefined; + } + + interface EventLoopDelayMonitor { + /** + * Enables the event loop delay sample timer. Returns `true` if the timer was started, `false` if it was already started. + */ + enable(): boolean; + /** + * Disables the event loop delay sample timer. Returns `true` if the timer was stopped, `false` if it was already stopped. + */ + disable(): boolean; + + /** + * Resets the collected histogram data. + */ + reset(): void; + + /** + * Returns the value at the given percentile. + * @param percentile A percentile value between 1 and 100. + */ + percentile(percentile: number): number; + + /** + * A `Map` object detailing the accumulated percentile distribution. + */ + readonly percentiles: Map; + + /** + * The number of times the event loop delay exceeded the maximum 1 hour eventloop delay threshold. + */ + readonly exceeds: number; + + /** + * The minimum recorded event loop delay. + */ + readonly min: number; + + /** + * The maximum recorded event loop delay. + */ + readonly max: number; + + /** + * The mean of the recorded event loop delays. + */ + readonly mean: number; + + /** + * The standard deviation of the recorded event loop delays. + */ + readonly stddev: number; + } + + function monitorEventLoopDelay(options?: EventLoopMonitorOptions): EventLoopDelayMonitor; +} +declare module "node:perf_hooks" { + export * from "perf_hooks"; +} diff --git a/node_backend/node_modules/@types/node/process.d.ts b/node_backend/node_modules/@types/node/process.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..aa2c6d4ffd9008f640925dee2c2fbd7fc245996d --- /dev/null +++ b/node_backend/node_modules/@types/node/process.d.ts @@ -0,0 +1,452 @@ +declare module "process" { + import * as tty from "tty"; + + global { + var process: NodeJS.Process; + + namespace NodeJS { + // this namespace merge is here because these are specifically used + // as the type for process.stdin, process.stdout, and process.stderr. + // they can't live in tty.d.ts because we need to disambiguate the imported name. + interface ReadStream extends tty.ReadStream {} + interface WriteStream extends tty.WriteStream {} + + interface MemoryUsage { + rss: number; + heapTotal: number; + heapUsed: number; + external: number; + arrayBuffers: number; + } + + interface CpuUsage { + user: number; + system: number; + } + + interface ProcessRelease { + name: string; + sourceUrl?: string | undefined; + headersUrl?: string | undefined; + libUrl?: string | undefined; + lts?: string | undefined; + } + + interface ProcessVersions extends Dict { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + modules: string; + openssl: string; + } + + type Platform = + | "aix" + | "android" + | "darwin" + | "freebsd" + | "linux" + | "openbsd" + | "sunos" + | "win32" + | "cygwin" + | "netbsd"; + + type Signals = + | "SIGABRT" + | "SIGALRM" + | "SIGBUS" + | "SIGCHLD" + | "SIGCONT" + | "SIGFPE" + | "SIGHUP" + | "SIGILL" + | "SIGINT" + | "SIGIO" + | "SIGIOT" + | "SIGKILL" + | "SIGPIPE" + | "SIGPOLL" + | "SIGPROF" + | "SIGPWR" + | "SIGQUIT" + | "SIGSEGV" + | "SIGSTKFLT" + | "SIGSTOP" + | "SIGSYS" + | "SIGTERM" + | "SIGTRAP" + | "SIGTSTP" + | "SIGTTIN" + | "SIGTTOU" + | "SIGUNUSED" + | "SIGURG" + | "SIGUSR1" + | "SIGUSR2" + | "SIGVTALRM" + | "SIGWINCH" + | "SIGXCPU" + | "SIGXFSZ" + | "SIGBREAK" + | "SIGLOST" + | "SIGINFO"; + + type UncaughtExceptionOrigin = "uncaughtException" | "unhandledRejection"; + type MultipleResolveType = "resolve" | "reject"; + + type BeforeExitListener = (code: number) => void; + type DisconnectListener = () => void; + type ExitListener = (code: number) => void; + type RejectionHandledListener = (promise: Promise) => void; + type UncaughtExceptionListener = (error: Error, origin: UncaughtExceptionOrigin) => void; + type UnhandledRejectionListener = (reason: {} | null | undefined, promise: Promise) => void; + type WarningListener = (warning: Error) => void; + type MessageListener = (message: any, sendHandle: any) => void; + type SignalsListener = (signal: Signals) => void; + type NewListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void; + type RemoveListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void; + type MultipleResolveListener = (type: MultipleResolveType, promise: Promise, value: any) => void; + + interface Socket extends ReadWriteStream { + isTTY?: true | undefined; + } + + // Alias for compatibility + interface ProcessEnv extends Dict {} + + interface HRTime { + (time?: [number, number]): [number, number]; + bigint(): bigint; + } + + interface ProcessReport { + /** + * Directory where the report is written. + * working directory of the Node.js process. + * @default '' indicating that reports are written to the current + */ + directory: string; + + /** + * Filename where the report is written. + * The default value is the empty string. + * @default '' the output filename will be comprised of a timestamp, + * PID, and sequence number. + */ + filename: string; + + /** + * Returns a JSON-formatted diagnostic report for the running process. + * The report's JavaScript stack trace is taken from err, if present. + */ + getReport(err?: Error): string; + + /** + * If true, a diagnostic report is generated on fatal errors, + * such as out of memory errors or failed C++ assertions. + * @default false + */ + reportOnFatalError: boolean; + + /** + * If true, a diagnostic report is generated when the process + * receives the signal specified by process.report.signal. + * @default false + */ + reportOnSignal: boolean; + + /** + * If true, a diagnostic report is generated on uncaught exception. + * @default false + */ + reportOnUncaughtException: boolean; + + /** + * The signal used to trigger the creation of a diagnostic report. + * @default 'SIGUSR2' + */ + signal: Signals; + + /** + * Writes a diagnostic report to a file. If filename is not provided, the default filename + * includes the date, time, PID, and a sequence number. + * The report's JavaScript stack trace is taken from err, if present. + * + * @param fileName Name of the file where the report is written. + * This should be a relative path, that will be appended to the directory specified in + * `process.report.directory`, or the current working directory of the Node.js process, + * if unspecified. + * @param error A custom error used for reporting the JavaScript stack. + * @return Filename of the generated report. + */ + writeReport(fileName?: string): string; + writeReport(error?: Error): string; + writeReport(fileName?: string, err?: Error): string; + } + + interface ResourceUsage { + fsRead: number; + fsWrite: number; + involuntaryContextSwitches: number; + ipcReceived: number; + ipcSent: number; + majorPageFault: number; + maxRSS: number; + minorPageFault: number; + sharedMemorySize: number; + signalsCount: number; + swappedOut: number; + systemCPUTime: number; + unsharedDataSize: number; + unsharedStackSize: number; + userCPUTime: number; + voluntaryContextSwitches: number; + } + + interface Process extends EventEmitter { + /** + * Can also be a tty.WriteStream, not typed due to limitations. + */ + stdout: WriteStream & { + fd: 1; + }; + /** + * Can also be a tty.WriteStream, not typed due to limitations. + */ + stderr: WriteStream & { + fd: 2; + }; + stdin: ReadStream & { + fd: 0; + }; + openStdin(): Socket; + argv: string[]; + argv0: string; + execArgv: string[]; + execPath: string; + abort(): never; + chdir(directory: string): void; + cwd(): string; + debugPort: number; + emitWarning(warning: string | Error, name?: string, ctor?: Function): void; + env: ProcessEnv; + exit(code?: number): never; + exitCode?: number | undefined; + getgid(): number; + setgid(id: number | string): void; + getuid(): number; + setuid(id: number | string): void; + geteuid(): number; + seteuid(id: number | string): void; + getegid(): number; + setegid(id: number | string): void; + getgroups(): number[]; + setgroups(groups: ReadonlyArray): void; + setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void; + hasUncaughtExceptionCaptureCallback(): boolean; + version: string; + versions: ProcessVersions; + config: { + target_defaults: { + cflags: any[]; + default_configuration: string; + defines: string[]; + include_dirs: string[]; + libraries: string[]; + }; + variables: { + clang: number; + host_arch: string; + node_install_npm: boolean; + node_install_waf: boolean; + node_prefix: string; + node_shared_openssl: boolean; + node_shared_v8: boolean; + node_shared_zlib: boolean; + node_use_dtrace: boolean; + node_use_etw: boolean; + node_use_openssl: boolean; + target_arch: string; + v8_no_strict_aliasing: number; + v8_use_snapshot: boolean; + visibility: string; + }; + }; + kill(pid: number, signal?: string | number): true; + pid: number; + ppid: number; + title: string; + arch: string; + platform: Platform; + /** @deprecated since v14.0.0 - use `require.main` instead. */ + mainModule?: Module | undefined; + memoryUsage(): MemoryUsage; + cpuUsage(previousValue?: CpuUsage): CpuUsage; + nextTick(callback: Function, ...args: any[]): void; + release: ProcessRelease; + features: { + inspector: boolean; + debug: boolean; + uv: boolean; + ipv6: boolean; + tls_alpn: boolean; + tls_sni: boolean; + tls_ocsp: boolean; + tls: boolean; + }; + /** + * @deprecated since v14.0.0 - Calling process.umask() with no argument causes + * the process-wide umask to be written twice. This introduces a race condition between threads, + * and is a potential security vulnerability. There is no safe, cross-platform alternative API. + */ + umask(): number; + /** + * Can only be set if not in worker thread. + */ + umask(mask: string | number): number; + uptime(): number; + hrtime: HRTime; + domain: Domain; + + // Worker + send?( + message: any, + sendHandle?: any, + options?: { swallowErrors?: boolean | undefined }, + callback?: (error: Error | null) => void, + ): boolean; + disconnect(): void; + connected: boolean; + + /** + * The `process.allowedNodeEnvironmentFlags` property is a special, + * read-only `Set` of flags allowable within the [`NODE_OPTIONS`][] + * environment variable. + */ + allowedNodeEnvironmentFlags: ReadonlySet; + + /** + * Only available with `--experimental-report` + */ + report?: ProcessReport | undefined; + + resourceUsage(): ResourceUsage; + + traceDeprecation: boolean; + + /* EventEmitter */ + addListener(event: "beforeExit", listener: BeforeExitListener): this; + addListener(event: "disconnect", listener: DisconnectListener): this; + addListener(event: "exit", listener: ExitListener): this; + addListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + addListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + addListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + addListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + addListener(event: "warning", listener: WarningListener): this; + addListener(event: "message", listener: MessageListener): this; + addListener(event: Signals, listener: SignalsListener): this; + addListener(event: "newListener", listener: NewListenerListener): this; + addListener(event: "removeListener", listener: RemoveListenerListener): this; + addListener(event: "multipleResolves", listener: MultipleResolveListener): this; + + emit(event: "beforeExit", code: number): boolean; + emit(event: "disconnect"): boolean; + emit(event: "exit", code: number): boolean; + emit(event: "rejectionHandled", promise: Promise): boolean; + emit(event: "uncaughtException", error: Error): boolean; + emit(event: "uncaughtExceptionMonitor", error: Error): boolean; + emit(event: "unhandledRejection", reason: any, promise: Promise): boolean; + emit(event: "warning", warning: Error): boolean; + emit(event: "message", message: any, sendHandle: any): this; + emit(event: Signals, signal: Signals): boolean; + emit(event: "newListener", eventName: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "removeListener", eventName: string, listener: (...args: any[]) => void): this; + emit(event: "multipleResolves", listener: MultipleResolveListener): this; + + on(event: "beforeExit", listener: BeforeExitListener): this; + on(event: "disconnect", listener: DisconnectListener): this; + on(event: "exit", listener: ExitListener): this; + on(event: "rejectionHandled", listener: RejectionHandledListener): this; + on(event: "uncaughtException", listener: UncaughtExceptionListener): this; + on(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + on(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + on(event: "warning", listener: WarningListener): this; + on(event: "message", listener: MessageListener): this; + on(event: Signals, listener: SignalsListener): this; + on(event: "newListener", listener: NewListenerListener): this; + on(event: "removeListener", listener: RemoveListenerListener): this; + on(event: "multipleResolves", listener: MultipleResolveListener): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "beforeExit", listener: BeforeExitListener): this; + once(event: "disconnect", listener: DisconnectListener): this; + once(event: "exit", listener: ExitListener): this; + once(event: "rejectionHandled", listener: RejectionHandledListener): this; + once(event: "uncaughtException", listener: UncaughtExceptionListener): this; + once(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + once(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + once(event: "warning", listener: WarningListener): this; + once(event: "message", listener: MessageListener): this; + once(event: Signals, listener: SignalsListener): this; + once(event: "newListener", listener: NewListenerListener): this; + once(event: "removeListener", listener: RemoveListenerListener): this; + once(event: "multipleResolves", listener: MultipleResolveListener): this; + + prependListener(event: "beforeExit", listener: BeforeExitListener): this; + prependListener(event: "disconnect", listener: DisconnectListener): this; + prependListener(event: "exit", listener: ExitListener): this; + prependListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependListener(event: "warning", listener: WarningListener): this; + prependListener(event: "message", listener: MessageListener): this; + prependListener(event: Signals, listener: SignalsListener): this; + prependListener(event: "newListener", listener: NewListenerListener): this; + prependListener(event: "removeListener", listener: RemoveListenerListener): this; + prependListener(event: "multipleResolves", listener: MultipleResolveListener): this; + + prependOnceListener(event: "beforeExit", listener: BeforeExitListener): this; + prependOnceListener(event: "disconnect", listener: DisconnectListener): this; + prependOnceListener(event: "exit", listener: ExitListener): this; + prependOnceListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependOnceListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependOnceListener(event: "warning", listener: WarningListener): this; + prependOnceListener(event: "message", listener: MessageListener): this; + prependOnceListener(event: Signals, listener: SignalsListener): this; + prependOnceListener(event: "newListener", listener: NewListenerListener): this; + prependOnceListener(event: "removeListener", listener: RemoveListenerListener): this; + prependOnceListener(event: "multipleResolves", listener: MultipleResolveListener): this; + + listeners(event: "beforeExit"): BeforeExitListener[]; + listeners(event: "disconnect"): DisconnectListener[]; + listeners(event: "exit"): ExitListener[]; + listeners(event: "rejectionHandled"): RejectionHandledListener[]; + listeners(event: "uncaughtException"): UncaughtExceptionListener[]; + listeners(event: "uncaughtExceptionMonitor"): UncaughtExceptionListener[]; + listeners(event: "unhandledRejection"): UnhandledRejectionListener[]; + listeners(event: "warning"): WarningListener[]; + listeners(event: "message"): MessageListener[]; + listeners(event: Signals): SignalsListener[]; + listeners(event: "newListener"): NewListenerListener[]; + listeners(event: "removeListener"): RemoveListenerListener[]; + listeners(event: "multipleResolves"): MultipleResolveListener[]; + } + + interface Global { + process: Process; + } + } + } + + export = process; +} +declare module "node:process" { + import process = require("process"); + export = process; +} diff --git a/node_backend/node_modules/@types/node/punycode.d.ts b/node_backend/node_modules/@types/node/punycode.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..550c216cd91f65816e5cee1020bb19b068cede76 --- /dev/null +++ b/node_backend/node_modules/@types/node/punycode.d.ts @@ -0,0 +1,78 @@ +/** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ +declare module "punycode" { + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + function decode(string: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + function encode(string: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + function toUnicode(domain: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + function toASCII(domain: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const ucs2: ucs2; + interface ucs2 { + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + decode(string: string): number[]; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + encode(codePoints: ReadonlyArray): string; + } + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const version: string; +} +declare module "node:punycode" { + export * from "punycode"; +} diff --git a/node_backend/node_modules/@types/node/querystring.d.ts b/node_backend/node_modules/@types/node/querystring.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f4a43a3612a92a0a2cf8d50804dcbe53d826c5a0 --- /dev/null +++ b/node_backend/node_modules/@types/node/querystring.d.ts @@ -0,0 +1,41 @@ +declare module "querystring" { + interface StringifyOptions { + encodeURIComponent?: ((str: string) => string) | undefined; + } + + interface ParseOptions { + maxKeys?: number | undefined; + decodeURIComponent?: ((str: string) => string) | undefined; + } + + interface ParsedUrlQuery extends NodeJS.Dict {} + + interface ParsedUrlQueryInput extends + NodeJS.Dict< + | string + | number + | boolean + | ReadonlyArray + | ReadonlyArray + | ReadonlyArray + | null + > + { + } + + function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string; + function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery; + /** + * The querystring.encode() function is an alias for querystring.stringify(). + */ + const encode: typeof stringify; + /** + * The querystring.decode() function is an alias for querystring.parse(). + */ + const decode: typeof parse; + function escape(str: string): string; + function unescape(str: string): string; +} +declare module "node:querystring" { + export * from "querystring"; +} diff --git a/node_backend/node_modules/@types/node/readline.d.ts b/node_backend/node_modules/@types/node/readline.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c7db82a7423e87e7f8a709cb3a618ded8944e1fe --- /dev/null +++ b/node_backend/node_modules/@types/node/readline.d.ts @@ -0,0 +1,184 @@ +declare module "readline" { + import EventEmitter = require("events"); + + interface Key { + sequence?: string | undefined; + name?: string | undefined; + ctrl?: boolean | undefined; + meta?: boolean | undefined; + shift?: boolean | undefined; + } + + class Interface extends EventEmitter { + readonly terminal: boolean; + + // Need direct access to line/cursor data, for use in external processes + // see: https://github.com/nodejs/node/issues/30347 + /** The current input data */ + readonly line: string; + /** The current cursor position in the input line */ + readonly cursor: number; + + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface + */ + protected constructor( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ); + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface + */ + protected constructor(options: ReadLineOptions); + + setPrompt(prompt: string): void; + prompt(preserveCursor?: boolean): void; + question(query: string, callback: (answer: string) => void): void; + pause(): this; + resume(): this; + close(): void; + write(data: string | Buffer, key?: Key): void; + write(data: undefined | null | string | Buffer, key: Key): void; + + /** + * Returns the real position of the cursor in relation to the input + * prompt + string. Long input (wrapping) strings, as well as multiple + * line prompts are included in the calculations. + */ + getCursorPos(): CursorPos; + + /** + * events.EventEmitter + * 1. close + * 2. line + * 3. pause + * 4. resume + * 5. SIGCONT + * 6. SIGINT + * 7. SIGTSTP + */ + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + type ReadLine = Interface; // type forwarded for backwards compatibility + + type Completer = (line: string) => CompleterResult; + type AsyncCompleter = (line: string, callback: (err?: null | Error, result?: CompleterResult) => void) => any; + + type CompleterResult = [string[], string]; + + interface ReadLineOptions { + input: NodeJS.ReadableStream; + output?: NodeJS.WritableStream | undefined; + completer?: Completer | AsyncCompleter | undefined; + terminal?: boolean | undefined; + historySize?: number | undefined; + prompt?: string | undefined; + crlfDelay?: number | undefined; + removeHistoryDuplicates?: boolean | undefined; + escapeCodeTimeout?: number | undefined; + tabSize?: number | undefined; + } + + function createInterface( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ): Interface; + function createInterface(options: ReadLineOptions): Interface; + function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; + + type Direction = -1 | 0 | 1; + + interface CursorPos { + rows: number; + cols: number; + } + + /** + * Clears the current line of this WriteStream in a direction identified by `dir`. + */ + function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean; + /** + * Clears this `WriteStream` from the current cursor down. + */ + function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean; + /** + * Moves this WriteStream's cursor to the specified position. + */ + function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean; + /** + * Moves this WriteStream's cursor relative to its current position. + */ + function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean; +} +declare module "node:readline" { + export * from "readline"; +} diff --git a/node_backend/node_modules/@types/node/repl.d.ts b/node_backend/node_modules/@types/node/repl.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6dd50600ed3c2d900ce592bdbeecfef66304d7b5 --- /dev/null +++ b/node_backend/node_modules/@types/node/repl.d.ts @@ -0,0 +1,404 @@ +declare module "repl" { + import { AsyncCompleter, Completer, Interface } from "readline"; + import { Context } from "vm"; + import { InspectOptions } from "util"; + + interface ReplOptions { + /** + * The input prompt to display. + * @default "> " + */ + prompt?: string | undefined; + /** + * The `Readable` stream from which REPL input will be read. + * @default process.stdin + */ + input?: NodeJS.ReadableStream | undefined; + /** + * The `Writable` stream to which REPL output will be written. + * @default process.stdout + */ + output?: NodeJS.WritableStream | undefined; + /** + * If `true`, specifies that the output should be treated as a TTY terminal, and have + * ANSI/VT100 escape codes written to it. + * Default: checking the value of the `isTTY` property on the output stream upon + * instantiation. + */ + terminal?: boolean | undefined; + /** + * The function to be used when evaluating each given line of input. + * Default: an async wrapper for the JavaScript `eval()` function. An `eval` function can + * error with `repl.Recoverable` to indicate the input was incomplete and prompt for + * additional lines. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_default_evaluation + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_custom_evaluation_functions + */ + eval?: REPLEval | undefined; + /** + * Defines if the repl prints output previews or not. + * @default `true` Always `false` in case `terminal` is falsy. + */ + preview?: boolean | undefined; + /** + * If `true`, specifies that the default `writer` function should include ANSI color + * styling to REPL output. If a custom `writer` function is provided then this has no + * effect. + * Default: the REPL instance's `terminal` value. + */ + useColors?: boolean | undefined; + /** + * If `true`, specifies that the default evaluation function will use the JavaScript + * `global` as the context as opposed to creating a new separate context for the REPL + * instance. The node CLI REPL sets this value to `true`. + * Default: `false`. + */ + useGlobal?: boolean | undefined; + /** + * If `true`, specifies that the default writer will not output the return value of a + * command if it evaluates to `undefined`. + * Default: `false`. + */ + ignoreUndefined?: boolean | undefined; + /** + * The function to invoke to format the output of each command before writing to `output`. + * Default: a wrapper for `util.inspect`. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_customizing_repl_output + */ + writer?: REPLWriter | undefined; + /** + * An optional function used for custom Tab auto completion. + * + * @see https://nodejs.org/dist/latest-v11.x/docs/api/readline.html#readline_use_of_the_completer_function + */ + completer?: Completer | AsyncCompleter | undefined; + /** + * A flag that specifies whether the default evaluator executes all JavaScript commands in + * strict mode or default (sloppy) mode. + * Accepted values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT | undefined; + /** + * Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is + * pressed. This cannot be used together with a custom `eval` function. + * Default: `false`. + */ + breakEvalOnSigint?: boolean | undefined; + } + + type REPLEval = ( + this: REPLServer, + evalCmd: string, + context: Context, + file: string, + cb: (err: Error | null, result: any) => void, + ) => void; + type REPLWriter = (this: REPLServer, obj: any) => string; + + /** + * This is the default "writer" value, if none is passed in the REPL options, + * and it can be overridden by custom print functions. + */ + const writer: REPLWriter & { options: InspectOptions }; + + type REPLCommandAction = (this: REPLServer, text: string) => void; + + interface REPLCommand { + /** + * Help text to be displayed when `.help` is entered. + */ + help?: string | undefined; + /** + * The function to execute, optionally accepting a single string argument. + */ + action: REPLCommandAction; + } + + /** + * Provides a customizable Read-Eval-Print-Loop (REPL). + * + * Instances of `repl.REPLServer` will accept individual lines of user input, evaluate those + * according to a user-defined evaluation function, then output the result. Input and output + * may be from `stdin` and `stdout`, respectively, or may be connected to any Node.js `stream`. + * + * Instances of `repl.REPLServer` support automatic completion of inputs, simplistic Emacs-style + * line editing, multi-line inputs, ANSI-styled output, saving and restoring current REPL session + * state, error recovery, and customizable evaluation functions. + * + * Instances of `repl.REPLServer` are created using the `repl.start()` method and _should not_ + * be created directly using the JavaScript `new` keyword. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_repl + */ + class REPLServer extends Interface { + /** + * The `vm.Context` provided to the `eval` function to be used for JavaScript + * evaluation. + */ + readonly context: Context; + /** + * @deprecated since v14.3.0 - Use `input` instead. + */ + readonly inputStream: NodeJS.ReadableStream; + /** + * @deprecated since v14.3.0 - Use `output` instead. + */ + readonly outputStream: NodeJS.WritableStream; + /** + * The `Readable` stream from which REPL input will be read. + */ + readonly input: NodeJS.ReadableStream; + /** + * The `Writable` stream to which REPL output will be written. + */ + readonly output: NodeJS.WritableStream; + /** + * The commands registered via `replServer.defineCommand()`. + */ + readonly commands: NodeJS.ReadOnlyDict; + /** + * A value indicating whether the REPL is currently in "editor mode". + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_commands_and_special_keys + */ + readonly editorMode: boolean; + /** + * A value indicating whether the `_` variable has been assigned. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreAssigned: boolean; + /** + * The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL). + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly last: any; + /** + * A value indicating whether the `_error` variable has been assigned. + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreErrAssigned: boolean; + /** + * The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL). + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly lastError: any; + /** + * Specified in the REPL options, this is the function to be used when evaluating each + * given line of input. If not specified in the REPL options, this is an async wrapper + * for the JavaScript `eval()` function. + */ + readonly eval: REPLEval; + /** + * Specified in the REPL options, this is a value indicating whether the default + * `writer` function should include ANSI color styling to REPL output. + */ + readonly useColors: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `eval` + * function will use the JavaScript `global` as the context as opposed to creating a new + * separate context for the REPL instance. + */ + readonly useGlobal: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `writer` + * function should output the result of a command if it evaluates to `undefined`. + */ + readonly ignoreUndefined: boolean; + /** + * Specified in the REPL options, this is the function to invoke to format the output of + * each command before writing to `outputStream`. If not specified in the REPL options, + * this will be a wrapper for `util.inspect`. + */ + readonly writer: REPLWriter; + /** + * Specified in the REPL options, this is the function to use for custom Tab auto-completion. + */ + readonly completer: Completer | AsyncCompleter; + /** + * Specified in the REPL options, this is a flag that specifies whether the default `eval` + * function should execute all JavaScript commands in strict mode or default (sloppy) mode. + * Possible values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT; + + /** + * NOTE: According to the documentation: + * + * > Instances of `repl.REPLServer` are created using the `repl.start()` method and + * > _should not_ be created directly using the JavaScript `new` keyword. + * + * `REPLServer` cannot be subclassed due to implementation specifics in NodeJS. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_class_replserver + */ + private constructor(); + + /** + * Used to add new `.`-prefixed commands to the REPL instance. Such commands are invoked + * by typing a `.` followed by the `keyword`. + * + * @param keyword The command keyword (_without_ a leading `.` character). + * @param cmd The function to invoke when the command is processed. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_replserver_definecommand_keyword_cmd + */ + defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void; + /** + * Readies the REPL instance for input from the user, printing the configured `prompt` to a + * new line in the `output` and resuming the `input` to accept new input. + * + * When multi-line input is being entered, an ellipsis is printed rather than the 'prompt'. + * + * This method is primarily intended to be called from within the action function for + * commands registered using the `replServer.defineCommand()` method. + * + * @param preserveCursor When `true`, the cursor placement will not be reset to `0`. + */ + displayPrompt(preserveCursor?: boolean): void; + /** + * Clears any command that has been buffered but not yet executed. + * + * This method is primarily intended to be called from within the action function for + * commands registered using the `replServer.defineCommand()` method. + * + * @since v9.0.0 + */ + clearBufferedCommand(): void; + + /** + * Initializes a history log file for the REPL instance. When executing the + * Node.js binary and using the command line REPL, a history file is initialized + * by default. However, this is not the case when creating a REPL + * programmatically. Use this method to initialize a history log file when working + * with REPL instances programmatically. + * @param path The path to the history file + */ + setupHistory(path: string, cb: (err: Error | null, repl: this) => void): void; + + /** + * events.EventEmitter + * 1. close - inherited from `readline.Interface` + * 2. line - inherited from `readline.Interface` + * 3. pause - inherited from `readline.Interface` + * 4. resume - inherited from `readline.Interface` + * 5. SIGCONT - inherited from `readline.Interface` + * 6. SIGINT - inherited from `readline.Interface` + * 7. SIGTSTP - inherited from `readline.Interface` + * 8. exit + * 9. reset + */ + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + addListener(event: "exit", listener: () => void): this; + addListener(event: "reset", listener: (context: Context) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + emit(event: "exit"): boolean; + emit(event: "reset", context: Context): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + on(event: "exit", listener: () => void): this; + on(event: "reset", listener: (context: Context) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + once(event: "exit", listener: () => void): this; + once(event: "reset", listener: (context: Context) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + prependListener(event: "exit", listener: () => void): this; + prependListener(event: "reset", listener: (context: Context) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + prependOnceListener(event: "exit", listener: () => void): this; + prependOnceListener(event: "reset", listener: (context: Context) => void): this; + } + + /** + * A flag passed in the REPL options. Evaluates expressions in sloppy mode. + */ + const REPL_MODE_SLOPPY: unique symbol; + + /** + * A flag passed in the REPL options. Evaluates expressions in strict mode. + * This is equivalent to prefacing every repl statement with `'use strict'`. + */ + const REPL_MODE_STRICT: unique symbol; + + /** + * Creates and starts a `repl.REPLServer` instance. + * + * @param options The options for the `REPLServer`. If `options` is a string, then it specifies + * the input prompt. + */ + function start(options?: string | ReplOptions): REPLServer; + + /** + * Indicates a recoverable error that a `REPLServer` can use to support multi-line input. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_recoverable_errors + */ + class Recoverable extends SyntaxError { + err: Error; + + constructor(err: Error); + } +} +declare module "node:repl" { + export * from "repl"; +} diff --git a/node_backend/node_modules/@types/node/stream.d.ts b/node_backend/node_modules/@types/node/stream.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..469fa96d8e10e827080f4f9edaba3e17a5e1f704 --- /dev/null +++ b/node_backend/node_modules/@types/node/stream.d.ts @@ -0,0 +1,518 @@ +declare module "stream" { + import EventEmitter = require("events"); + + class internal extends EventEmitter { + pipe(destination: T, options?: { end?: boolean | undefined }): T; + } + + namespace internal { + class Stream extends internal { + constructor(opts?: ReadableOptions); + } + + interface ReadableOptions { + highWaterMark?: number | undefined; + encoding?: BufferEncoding | undefined; + objectMode?: boolean | undefined; + read?(this: Readable, size: number): void; + destroy?(this: Readable, error: Error | null, callback: (error: Error | null) => void): void; + autoDestroy?: boolean | undefined; + } + + class Readable extends Stream implements NodeJS.ReadableStream { + /** + * A utility method for creating Readable Streams out of iterators. + */ + static from(iterable: Iterable | AsyncIterable, options?: ReadableOptions): Readable; + + readable: boolean; + readonly readableEncoding: BufferEncoding | null; + readonly readableEnded: boolean; + readonly readableFlowing: boolean | null; + readonly readableHighWaterMark: number; + readonly readableLength: number; + readonly readableObjectMode: boolean; + destroyed: boolean; + constructor(opts?: ReadableOptions); + _read(size: number): void; + read(size?: number): any; + setEncoding(encoding: BufferEncoding): this; + pause(): this; + resume(): this; + isPaused(): boolean; + unpipe(destination?: NodeJS.WritableStream): this; + unshift(chunk: any, encoding?: BufferEncoding): void; + wrap(oldStream: NodeJS.ReadableStream): this; + push(chunk: any, encoding?: BufferEncoding): boolean; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + destroy(error?: Error): this; + + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. end + * 4. error + * 5. pause + * 6. readable + * 7. resume + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "pause"): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + interface WritableOptions { + highWaterMark?: number | undefined; + decodeStrings?: boolean | undefined; + defaultEncoding?: BufferEncoding | undefined; + objectMode?: boolean | undefined; + emitClose?: boolean | undefined; + write?( + this: Writable, + chunk: any, + encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ): void; + writev?( + this: Writable, + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + destroy?(this: Writable, error: Error | null, callback: (error: Error | null) => void): void; + final?(this: Writable, callback: (error?: Error | null) => void): void; + autoDestroy?: boolean | undefined; + } + + class Writable extends Stream implements NodeJS.WritableStream { + readonly writable: boolean; + readonly writableEnded: boolean; + readonly writableFinished: boolean; + readonly writableHighWaterMark: number; + readonly writableLength: number; + readonly writableObjectMode: boolean; + readonly writableCorked: number; + destroyed: boolean; + constructor(opts?: WritableOptions); + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, encoding: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; + setDefaultEncoding(encoding: BufferEncoding): this; + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding: BufferEncoding, cb?: () => void): this; + cork(): void; + uncork(): void; + destroy(error?: Error): this; + + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. drain + * 3. error + * 4. finish + * 5. pipe + * 6. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "drain"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "close", listener: () => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + interface DuplexOptions extends ReadableOptions, WritableOptions { + allowHalfOpen?: boolean | undefined; + readableObjectMode?: boolean | undefined; + writableObjectMode?: boolean | undefined; + readableHighWaterMark?: number | undefined; + writableHighWaterMark?: number | undefined; + writableCorked?: number | undefined; + read?(this: Duplex, size: number): void; + write?(this: Duplex, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + writev?( + this: Duplex, + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Duplex, callback: (error?: Error | null) => void): void; + destroy?(this: Duplex, error: Error | null, callback: (error: Error | null) => void): void; + } + + // Note: Duplex extends both Readable and Writable. + class Duplex extends Readable implements Writable { + readonly writable: boolean; + readonly writableEnded: boolean; + readonly writableFinished: boolean; + readonly writableHighWaterMark: number; + readonly writableLength: number; + readonly writableObjectMode: boolean; + readonly writableCorked: number; + allowHalfOpen: boolean; + constructor(opts?: DuplexOptions); + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + _destroy(error: Error | null, callback: (error: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + write(chunk: any, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean; + setDefaultEncoding(encoding: BufferEncoding): this; + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding?: BufferEncoding, cb?: () => void): this; + cork(): void; + uncork(): void; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. drain + * 4. end + * 5. error + * 6. finish + * 7. pause + * 8. pipe + * 9. readable + * 10. resume + * 11. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pause"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pause", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pause", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + type TransformCallback = (error?: Error | null, data?: any) => void; + + interface TransformOptions extends DuplexOptions { + read?(this: Transform, size: number): void; + write?( + this: Transform, + chunk: any, + encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ): void; + writev?( + this: Transform, + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Transform, callback: (error?: Error | null) => void): void; + destroy?(this: Transform, error: Error | null, callback: (error: Error | null) => void): void; + transform?(this: Transform, chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + flush?(this: Transform, callback: TransformCallback): void; + } + + class Transform extends Duplex { + constructor(opts?: TransformOptions); + _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + _flush(callback: TransformCallback): void; + } + + class PassThrough extends Transform {} + + interface FinishedOptions { + error?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + } + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options: FinishedOptions, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + namespace finished { + function __promisify__( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options?: FinishedOptions, + ): Promise; + } + + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: T, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): T; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: T, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): T; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.ReadWriteStream, + stream4: T, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): T; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.ReadWriteStream, + stream4: NodeJS.ReadWriteStream, + stream5: T, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): T; + function pipeline( + streams: ReadonlyArray, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): NodeJS.WritableStream; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array< + NodeJS.ReadWriteStream | NodeJS.WritableStream | ((err: NodeJS.ErrnoException | null) => void) + > + ): NodeJS.WritableStream; + namespace pipeline { + function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.WritableStream): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.WritableStream, + ): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.ReadWriteStream, + stream4: NodeJS.WritableStream, + ): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.ReadWriteStream, + stream4: NodeJS.ReadWriteStream, + stream5: NodeJS.WritableStream, + ): Promise; + function __promisify__( + streams: ReadonlyArray, + ): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; + } + + interface Pipe { + close(): void; + hasRef(): boolean; + ref(): void; + unref(): void; + } + } + + export = internal; +} +declare module "node:stream" { + import stream = require("stream"); + export = stream; +} diff --git a/node_backend/node_modules/@types/node/string_decoder.d.ts b/node_backend/node_modules/@types/node/string_decoder.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..62ad20809e158ede9deb849969a873cf36579193 --- /dev/null +++ b/node_backend/node_modules/@types/node/string_decoder.d.ts @@ -0,0 +1,10 @@ +declare module "string_decoder" { + class StringDecoder { + constructor(encoding?: BufferEncoding); + write(buffer: Buffer): string; + end(buffer?: Buffer): string; + } +} +declare module "node:string_decoder" { + export * from "string_decoder"; +} diff --git a/node_backend/node_modules/@types/node/timers.d.ts b/node_backend/node_modules/@types/node/timers.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b6b31472bc10d39bd08e90dac4103994b8c070df --- /dev/null +++ b/node_backend/node_modules/@types/node/timers.d.ts @@ -0,0 +1,19 @@ +declare module "timers" { + function setTimeout(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout; + namespace setTimeout { + function __promisify__(ms: number): Promise; + function __promisify__(ms: number, value: T): Promise; + } + function clearTimeout(timeoutId: NodeJS.Timeout | string | number | undefined): void; + function setInterval(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout; + function clearInterval(intervalId: NodeJS.Timeout | string | number | undefined): void; + function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate; + namespace setImmediate { + function __promisify__(): Promise; + function __promisify__(value: T): Promise; + } + function clearImmediate(immediateId: NodeJS.Immediate | undefined): void; +} +declare module "node:timers" { + export * from "timers"; +} diff --git a/node_backend/node_modules/@types/node/tls.d.ts b/node_backend/node_modules/@types/node/tls.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f99ab5c4c8bc48c2101009df0070dbe207a01e2d --- /dev/null +++ b/node_backend/node_modules/@types/node/tls.d.ts @@ -0,0 +1,866 @@ +declare module "tls" { + import * as net from "net"; + import * as stream from "stream"; + + const CLIENT_RENEG_LIMIT: number; + const CLIENT_RENEG_WINDOW: number; + + interface Certificate { + /** + * Country code. + */ + C: string; + /** + * Street. + */ + ST: string; + /** + * Locality. + */ + L: string; + /** + * Organization. + */ + O: string; + /** + * Organizational unit. + */ + OU: string; + /** + * Common name. + */ + CN: string; + } + + interface PeerCertificate { + subject: Certificate; + issuer: Certificate; + subjectaltname: string; + infoAccess: NodeJS.Dict; + modulus: string; + exponent: string; + valid_from: string; + valid_to: string; + fingerprint: string; + fingerprint256: string; + ext_key_usage: string[]; + serialNumber: string; + raw: Buffer; + } + + interface DetailedPeerCertificate extends PeerCertificate { + issuerCertificate: DetailedPeerCertificate; + } + + interface CipherNameAndProtocol { + /** + * The cipher name. + */ + name: string; + /** + * SSL/TLS protocol version. + */ + version: string; + + /** + * IETF name for the cipher suite. + */ + standardName: string; + } + + interface EphemeralKeyInfo { + /** + * The supported types are 'DH' and 'ECDH'. + */ + type: string; + /** + * The name property is available only when type is 'ECDH'. + */ + name?: string | undefined; + /** + * The size of parameter of an ephemeral key exchange. + */ + size: number; + } + + interface KeyObject { + /** + * Private keys in PEM format. + */ + pem: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + + interface PxfObject { + /** + * PFX or PKCS12 encoded private key and certificate chain. + */ + buf: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + + interface TLSSocketOptions extends SecureContextOptions, CommonConnectionOptions { + /** + * If true the TLS socket will be instantiated in server-mode. + * Defaults to false. + */ + isServer?: boolean | undefined; + /** + * An optional net.Server instance. + */ + server?: net.Server | undefined; + + /** + * An optional Buffer instance containing a TLS session. + */ + session?: Buffer | undefined; + /** + * If true, specifies that the OCSP status request extension will be + * added to the client hello and an 'OCSPResponse' event will be + * emitted on the socket before establishing a secure communication + */ + requestOCSP?: boolean | undefined; + } + + class TLSSocket extends net.Socket { + /** + * Construct a new tls.TLSSocket object from an existing TCP socket. + */ + constructor(socket: net.Socket, options?: TLSSocketOptions); + + /** + * A boolean that is true if the peer certificate was signed by one of the specified CAs, otherwise false. + */ + authorized: boolean; + /** + * The reason why the peer's certificate has not been verified. + * This property becomes available only when tlsSocket.authorized === false. + */ + authorizationError: Error; + /** + * Static boolean value, always true. + * May be used to distinguish TLS sockets from regular ones. + */ + encrypted: true; + + /** + * String containing the selected ALPN protocol. + * Before a handshake has completed, this value is always null. + * When a handshake is completed but not ALPN protocol was selected, tlsSocket.alpnProtocol equals false. + */ + alpnProtocol: string | false | null; + + /** + * Returns an object representing the local certificate. The returned + * object has some properties corresponding to the fields of the + * certificate. + * + * See tls.TLSSocket.getPeerCertificate() for an example of the + * certificate structure. + * + * If there is no local certificate, an empty object will be returned. + * If the socket has been destroyed, null will be returned. + */ + getCertificate(): PeerCertificate | object | null; + /** + * Returns an object representing the cipher name and the SSL/TLS protocol version of the current connection. + * @returns Returns an object representing the cipher name + * and the SSL/TLS protocol version of the current connection. + */ + getCipher(): CipherNameAndProtocol; + /** + * Returns an object representing the type, name, and size of parameter + * of an ephemeral key exchange in Perfect Forward Secrecy on a client + * connection. It returns an empty object when the key exchange is not + * ephemeral. As this is only supported on a client socket; null is + * returned if called on a server socket. The supported types are 'DH' + * and 'ECDH'. The name property is available only when type is 'ECDH'. + * + * For example: { type: 'ECDH', name: 'prime256v1', size: 256 }. + */ + getEphemeralKeyInfo(): EphemeralKeyInfo | object | null; + /** + * Returns the latest Finished message that has + * been sent to the socket as part of a SSL/TLS handshake, or undefined + * if no Finished message has been sent yet. + * + * As the Finished messages are message digests of the complete + * handshake (with a total of 192 bits for TLS 1.0 and more for SSL + * 3.0), they can be used for external authentication procedures when + * the authentication provided by SSL/TLS is not desired or is not + * enough. + * + * Corresponds to the SSL_get_finished routine in OpenSSL and may be + * used to implement the tls-unique channel binding from RFC 5929. + */ + getFinished(): Buffer | undefined; + /** + * Returns an object representing the peer's certificate. + * The returned object has some properties corresponding to the field of the certificate. + * If detailed argument is true the full chain with issuer property will be returned, + * if false only the top certificate without issuer property. + * If the peer does not provide a certificate, it returns null or an empty object. + * @param detailed - If true; the full chain with issuer property will be returned. + * @returns An object representing the peer's certificate. + */ + getPeerCertificate(detailed: true): DetailedPeerCertificate; + getPeerCertificate(detailed?: false): PeerCertificate; + getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate; + /** + * Returns the latest Finished message that is expected or has actually + * been received from the socket as part of a SSL/TLS handshake, or + * undefined if there is no Finished message so far. + * + * As the Finished messages are message digests of the complete + * handshake (with a total of 192 bits for TLS 1.0 and more for SSL + * 3.0), they can be used for external authentication procedures when + * the authentication provided by SSL/TLS is not desired or is not + * enough. + * + * Corresponds to the SSL_get_peer_finished routine in OpenSSL and may + * be used to implement the tls-unique channel binding from RFC 5929. + */ + getPeerFinished(): Buffer | undefined; + /** + * Returns a string containing the negotiated SSL/TLS protocol version of the current connection. + * The value `'unknown'` will be returned for connected sockets that have not completed the handshaking process. + * The value `null` will be returned for server sockets or disconnected client sockets. + * See https://www.openssl.org/docs/man1.0.2/ssl/SSL_get_version.html for more information. + * @returns negotiated SSL/TLS protocol version of the current connection + */ + getProtocol(): string | null; + /** + * Could be used to speed up handshake establishment when reconnecting to the server. + * @returns ASN.1 encoded TLS session or undefined if none was negotiated. + */ + getSession(): Buffer | undefined; + /** + * Returns a list of signature algorithms shared between the server and + * the client in the order of decreasing preference. + */ + getSharedSigalgs(): string[]; + /** + * NOTE: Works only with client TLS sockets. + * Useful only for debugging, for session reuse provide session option to tls.connect(). + * @returns TLS session ticket or undefined if none was negotiated. + */ + getTLSTicket(): Buffer | undefined; + /** + * Returns true if the session was reused, false otherwise. + */ + isSessionReused(): boolean; + /** + * Initiate TLS renegotiation process. + * + * NOTE: Can be used to request peer's certificate after the secure connection has been established. + * ANOTHER NOTE: When running as the server, socket will be destroyed with an error after handshakeTimeout timeout. + * @param options - The options may contain the following fields: rejectUnauthorized, + * requestCert (See tls.createServer() for details). + * @param callback - callback(err) will be executed with null as err, once the renegotiation + * is successfully completed. + * @return `undefined` when socket is destroy, `false` if negotiaion can't be initiated. + */ + renegotiate( + options: { rejectUnauthorized?: boolean | undefined; requestCert?: boolean | undefined }, + callback: (err: Error | null) => void, + ): undefined | boolean; + /** + * Set maximum TLS fragment size (default and maximum value is: 16384, minimum is: 512). + * Smaller fragment size decreases buffering latency on the client: large fragments are buffered by + * the TLS layer until the entire fragment is received and its integrity is verified; + * large fragments can span multiple roundtrips, and their processing can be delayed due to packet + * loss or reordering. However, smaller fragments add extra TLS framing bytes and CPU overhead, + * which may decrease overall server throughput. + * @param size - TLS fragment size (default and maximum value is: 16384, minimum is: 512). + * @returns Returns true on success, false otherwise. + */ + setMaxSendFragment(size: number): boolean; + + /** + * Disables TLS renegotiation for this TLSSocket instance. Once called, + * attempts to renegotiate will trigger an 'error' event on the + * TLSSocket. + */ + disableRenegotiation(): void; + + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * + * Note: The format of the output is identical to the output of `openssl s_client + * -trace` or `openssl s_server -trace`. While it is produced by OpenSSL's + * `SSL_trace()` function, the format is undocumented, can change without notice, + * and should not be relied on. + */ + enableTrace(): void; + + /** + * @param length number of bytes to retrieve from keying material + * @param label an application specific label, typically this will be a value from the + * [IANA Exporter Label Registry](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels). + * @param context optionally provide a context. + */ + exportKeyingMaterial(length: number, label: string, context: Buffer): Buffer; + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + addListener(event: "secureConnect", listener: () => void): this; + addListener(event: "session", listener: (session: Buffer) => void): this; + addListener(event: "keylog", listener: (line: Buffer) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "OCSPResponse", response: Buffer): boolean; + emit(event: "secureConnect"): boolean; + emit(event: "session", session: Buffer): boolean; + emit(event: "keylog", line: Buffer): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "OCSPResponse", listener: (response: Buffer) => void): this; + on(event: "secureConnect", listener: () => void): this; + on(event: "session", listener: (session: Buffer) => void): this; + on(event: "keylog", listener: (line: Buffer) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "OCSPResponse", listener: (response: Buffer) => void): this; + once(event: "secureConnect", listener: () => void): this; + once(event: "session", listener: (session: Buffer) => void): this; + once(event: "keylog", listener: (line: Buffer) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + prependListener(event: "secureConnect", listener: () => void): this; + prependListener(event: "session", listener: (session: Buffer) => void): this; + prependListener(event: "keylog", listener: (line: Buffer) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + prependOnceListener(event: "secureConnect", listener: () => void): this; + prependOnceListener(event: "session", listener: (session: Buffer) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer) => void): this; + } + + interface CommonConnectionOptions { + /** + * An optional TLS context object from tls.createSecureContext() + */ + secureContext?: SecureContext | undefined; + + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * @default false + */ + enableTrace?: boolean | undefined; + /** + * If true the server will request a certificate from clients that + * connect and attempt to verify that certificate. Defaults to + * false. + */ + requestCert?: boolean | undefined; + /** + * An array of strings or a Buffer naming possible ALPN protocols. + * (Protocols should be ordered by their priority.) + */ + ALPNProtocols?: string[] | Uint8Array[] | Uint8Array | undefined; + /** + * SNICallback(servername, cb) A function that will be + * called if the client supports SNI TLS extension. Two arguments + * will be passed when called: servername and cb. SNICallback should + * invoke cb(null, ctx), where ctx is a SecureContext instance. + * (tls.createSecureContext(...) can be used to get a proper + * SecureContext.) If SNICallback wasn't provided the default callback + * with high-level API will be used (see below). + */ + SNICallback?: ((servername: string, cb: (err: Error | null, ctx: SecureContext) => void) => void) | undefined; + /** + * If true the server will reject any connection which is not + * authorized with the list of supplied CAs. This option only has an + * effect if requestCert is true. + * @default true + */ + rejectUnauthorized?: boolean | undefined; + } + + interface TlsOptions extends SecureContextOptions, CommonConnectionOptions, net.ServerOpts { + /** + * Abort the connection if the SSL/TLS handshake does not finish in the + * specified number of milliseconds. A 'tlsClientError' is emitted on + * the tls.Server object whenever a handshake times out. Default: + * 120000 (120 seconds). + */ + handshakeTimeout?: number | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + */ + ticketKeys?: Buffer | undefined; + + /** + * @param socket + * @param identity identity parameter sent from the client. + * @return pre-shared key that must either be + * a buffer or `null` to stop the negotiation process. Returned PSK must be + * compatible with the selected cipher's digest. + * + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with the identity provided by the client. + * If the return value is `null` the negotiation process will stop and an + * "unknown_psk_identity" alert message will be sent to the other party. + * If the server wishes to hide the fact that the PSK identity was not known, + * the callback must provide some random data as `psk` to make the connection + * fail with "decrypt_error" before negotiation is finished. + * PSK ciphers are disabled by default, and using TLS-PSK thus + * requires explicitly specifying a cipher suite with the `ciphers` option. + * More information can be found in the RFC 4279. + */ + + pskCallback?(socket: TLSSocket, identity: string): DataView | NodeJS.TypedArray | null; + /** + * hint to send to a client to help + * with selecting the identity during TLS-PSK negotiation. Will be ignored + * in TLS 1.3. Upon failing to set pskIdentityHint `tlsClientError` will be + * emitted with `ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED` code. + */ + pskIdentityHint?: string | undefined; + } + + interface PSKCallbackNegotation { + psk: DataView | NodeJS.TypedArray; + identity: string; + } + + interface ConnectionOptions extends SecureContextOptions, CommonConnectionOptions { + host?: string | undefined; + port?: number | undefined; + path?: string | undefined; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored. + socket?: stream.Duplex | undefined; // Establish secure connection on a given socket rather than creating a new socket + checkServerIdentity?: typeof checkServerIdentity | undefined; + servername?: string | undefined; // SNI TLS Extension + session?: Buffer | undefined; + minDHSize?: number | undefined; + lookup?: net.LookupFunction | undefined; + timeout?: number | undefined; + /** + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with optional identity `hint` provided by the server or `null` + * in case of TLS 1.3 where `hint` was removed. + * It will be necessary to provide a custom `tls.checkServerIdentity()` + * for the connection as the default one will try to check hostname/IP + * of the server against the certificate but that's not applicable for PSK + * because there won't be a certificate present. + * More information can be found in the RFC 4279. + * + * @param hint message sent from the server to help client + * decide which identity to use during negotiation. + * Always `null` if TLS 1.3 is used. + * @returns Return `null` to stop the negotiation process. `psk` must be + * compatible with the selected cipher's digest. + * `identity` must use UTF-8 encoding. + */ + pskCallback?(hint: string | null): PSKCallbackNegotation | null; + } + + class Server extends net.Server { + constructor(secureConnectionListener?: (socket: TLSSocket) => void); + constructor(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void); + + /** + * The server.addContext() method adds a secure context that will be + * used if the client request's SNI name matches the supplied hostname + * (or wildcard). + */ + addContext(hostName: string, credentials: SecureContextOptions): void; + /** + * Returns the session ticket keys. + */ + getTicketKeys(): Buffer; + /** + * The server.setSecureContext() method replaces the + * secure context of an existing server. Existing connections to the + * server are not interrupted. + */ + setSecureContext(details: SecureContextOptions): void; + /** + * The server.setSecureContext() method replaces the secure context of + * an existing server. Existing connections to the server are not + * interrupted. + */ + setTicketKeys(keys: Buffer): void; + + /** + * events.EventEmitter + * 1. tlsClientError + * 2. newSession + * 3. OCSPRequest + * 4. resumeSession + * 5. secureConnection + * 6. keylog + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + addListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: TLSSocket): boolean; + emit(event: "newSession", sessionId: Buffer, sessionData: Buffer, callback: () => void): boolean; + emit( + event: "OCSPRequest", + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ): boolean; + emit( + event: "resumeSession", + sessionId: Buffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ): boolean; + emit(event: "secureConnection", tlsSocket: TLSSocket): boolean; + emit(event: "keylog", line: Buffer, tlsSocket: TLSSocket): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + on(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void): this; + on( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + on(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + once(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + } + + interface SecurePair { + encrypted: TLSSocket; + cleartext: TLSSocket; + } + + type SecureVersion = "TLSv1.3" | "TLSv1.2" | "TLSv1.1" | "TLSv1"; + + interface SecureContextOptions { + /** + * Optionally override the trusted CA certificates. Default is to trust + * the well-known CAs curated by Mozilla. Mozilla's CAs are completely + * replaced when CAs are explicitly specified using this option. + */ + ca?: string | Buffer | Array | undefined; + /** + * Cert chains in PEM format. One cert chain should be provided per + * private key. Each cert chain should consist of the PEM formatted + * certificate for a provided private key, followed by the PEM + * formatted intermediate certificates (if any), in order, and not + * including the root CA (the root CA must be pre-known to the peer, + * see ca). When providing multiple cert chains, they do not have to + * be in the same order as their private keys in key. If the + * intermediate certificates are not provided, the peer will not be + * able to validate the certificate, and the handshake will fail. + */ + cert?: string | Buffer | Array | undefined; + /** + * Colon-separated list of supported signature algorithms. The list + * can contain digest algorithms (SHA256, MD5 etc.), public key + * algorithms (RSA-PSS, ECDSA etc.), combination of both (e.g + * 'RSA+SHA384') or TLS v1.3 scheme names (e.g. rsa_pss_pss_sha512). + */ + sigalgs?: string | undefined; + /** + * Cipher suite specification, replacing the default. For more + * information, see modifying the default cipher suite. Permitted + * ciphers can be obtained via tls.getCiphers(). Cipher names must be + * uppercased in order for OpenSSL to accept them. + */ + ciphers?: string | undefined; + /** + * Name of an OpenSSL engine which can provide the client certificate. + */ + clientCertEngine?: string | undefined; + /** + * PEM formatted CRLs (Certificate Revocation Lists). + */ + crl?: string | Buffer | Array | undefined; + /** + * Diffie Hellman parameters, required for Perfect Forward Secrecy. Use + * openssl dhparam to create the parameters. The key length must be + * greater than or equal to 1024 bits or else an error will be thrown. + * Although 1024 bits is permissible, use 2048 bits or larger for + * stronger security. If omitted or invalid, the parameters are + * silently discarded and DHE ciphers will not be available. + */ + dhparam?: string | Buffer | undefined; + /** + * A string describing a named curve or a colon separated list of curve + * NIDs or names, for example P-521:P-384:P-256, to use for ECDH key + * agreement. Set to auto to select the curve automatically. Use + * crypto.getCurves() to obtain a list of available curve names. On + * recent releases, openssl ecparam -list_curves will also display the + * name and description of each available elliptic curve. Default: + * tls.DEFAULT_ECDH_CURVE. + */ + ecdhCurve?: string | undefined; + /** + * Attempt to use the server's cipher suite preferences instead of the + * client's. When true, causes SSL_OP_CIPHER_SERVER_PREFERENCE to be + * set in secureOptions + */ + honorCipherOrder?: boolean | undefined; + /** + * Private keys in PEM format. PEM allows the option of private keys + * being encrypted. Encrypted keys will be decrypted with + * options.passphrase. Multiple keys using different algorithms can be + * provided either as an array of unencrypted key strings or buffers, + * or an array of objects in the form {pem: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted keys will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + key?: string | Buffer | Array | undefined; + /** + * Name of an OpenSSL engine to get private key from. Should be used + * together with privateKeyIdentifier. + */ + privateKeyEngine?: string | undefined; + /** + * Identifier of a private key managed by an OpenSSL engine. Should be + * used together with privateKeyEngine. Should not be set together with + * key, because both options define a private key in different ways. + */ + privateKeyIdentifier?: string | undefined; + /** + * Optionally set the maximum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. + * **Default:** `'TLSv1.3'`, unless changed using CLI options. Using + * `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets the default to + * `'TLSv1.3'`. If multiple of the options are provided, the highest maximum is used. + */ + maxVersion?: SecureVersion | undefined; + /** + * Optionally set the minimum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. It is not recommended to use + * less than TLSv1.2, but it may be required for interoperability. + * **Default:** `'TLSv1.2'`, unless changed using CLI options. Using + * `--tls-v1.0` sets the default to `'TLSv1'`. Using `--tls-v1.1` sets the default to + * `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the lowest minimum is used. + */ + minVersion?: SecureVersion | undefined; + /** + * Shared passphrase used for a single private key and/or a PFX. + */ + passphrase?: string | undefined; + /** + * PFX or PKCS12 encoded private key and certificate chain. pfx is an + * alternative to providing key and cert individually. PFX is usually + * encrypted, if it is, passphrase will be used to decrypt it. Multiple + * PFX can be provided either as an array of unencrypted PFX buffers, + * or an array of objects in the form {buf: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted PFX will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + pfx?: string | Buffer | Array | undefined; + /** + * Optionally affect the OpenSSL protocol behavior, which is not + * usually necessary. This should be used carefully if at all! Value is + * a numeric bitmask of the SSL_OP_* options from OpenSSL Options + */ + secureOptions?: number | undefined; // Value is a numeric bitmask of the `SSL_OP_*` options + /** + * Legacy mechanism to select the TLS protocol version to use, it does + * not support independent control of the minimum and maximum version, + * and does not support limiting the protocol to TLSv1.3. Use + * minVersion and maxVersion instead. The possible values are listed as + * SSL_METHODS, use the function names as strings. For example, use + * 'TLSv1_1_method' to force TLS version 1.1, or 'TLS_method' to allow + * any TLS protocol version up to TLSv1.3. It is not recommended to use + * TLS versions less than 1.2, but it may be required for + * interoperability. Default: none, see minVersion. + */ + secureProtocol?: string | undefined; + /** + * Opaque identifier used by servers to ensure session state is not + * shared between applications. Unused by clients. + */ + sessionIdContext?: string | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + * See Session Resumption for more information. + */ + ticketKeys?: Buffer | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + } + + interface SecureContext { + context: any; + } + + /* + * Verifies the certificate `cert` is issued to host `host`. + * @host The hostname to verify the certificate against + * @cert PeerCertificate representing the peer's certificate + * + * Returns Error object, populating it with the reason, host and cert on failure. On success, returns undefined. + */ + function checkServerIdentity(host: string, cert: PeerCertificate): Error | undefined; + function createServer(secureConnectionListener?: (socket: TLSSocket) => void): Server; + function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server; + function connect(options: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + function connect( + port: number, + host?: string, + options?: ConnectionOptions, + secureConnectListener?: () => void, + ): TLSSocket; + function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + /** + * @deprecated since v0.11.3 Use `tls.TLSSocket` instead. + */ + function createSecurePair( + credentials?: SecureContext, + isServer?: boolean, + requestCert?: boolean, + rejectUnauthorized?: boolean, + ): SecurePair; + function createSecureContext(options?: SecureContextOptions): SecureContext; + function getCiphers(): string[]; + + /** + * The default curve name to use for ECDH key agreement in a tls server. + * The default value is 'auto'. See tls.createSecureContext() for further + * information. + */ + let DEFAULT_ECDH_CURVE: string; + /** + * The default value of the maxVersion option of + * tls.createSecureContext(). It can be assigned any of the supported TLS + * protocol versions, 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: + * 'TLSv1.3', unless changed using CLI options. Using --tls-max-v1.2 sets + * the default to 'TLSv1.2'. Using --tls-max-v1.3 sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the highest maximum + * is used. + */ + let DEFAULT_MAX_VERSION: SecureVersion; + /** + * The default value of the minVersion option of tls.createSecureContext(). + * It can be assigned any of the supported TLS protocol versions, + * 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: 'TLSv1.2', unless + * changed using CLI options. Using --tls-min-v1.0 sets the default to + * 'TLSv1'. Using --tls-min-v1.1 sets the default to 'TLSv1.1'. Using + * --tls-min-v1.3 sets the default to 'TLSv1.3'. If multiple of the options + * are provided, the lowest minimum is used. + */ + let DEFAULT_MIN_VERSION: SecureVersion; + + /** + * An immutable array of strings representing the root certificates (in PEM + * format) used for verifying peer certificates. This is the default value + * of the ca option to tls.createSecureContext(). + */ + const rootCertificates: ReadonlyArray; +} +declare module "node:tls" { + export * from "tls"; +} diff --git a/node_backend/node_modules/@types/node/trace_events.d.ts b/node_backend/node_modules/@types/node/trace_events.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9c2a0b7913ebb7ef203464f5c20f8db7263aec7d --- /dev/null +++ b/node_backend/node_modules/@types/node/trace_events.d.ts @@ -0,0 +1,64 @@ +declare module "trace_events" { + /** + * The `Tracing` object is used to enable or disable tracing for sets of + * categories. Instances are created using the + * `trace_events.createTracing()` method. + * + * When created, the `Tracing` object is disabled. Calling the + * `tracing.enable()` method adds the categories to the set of enabled trace + * event categories. Calling `tracing.disable()` will remove the categories + * from the set of enabled trace event categories. + */ + interface Tracing { + /** + * A comma-separated list of the trace event categories covered by this + * `Tracing` object. + */ + readonly categories: string; + + /** + * Disables this `Tracing` object. + * + * Only trace event categories _not_ covered by other enabled `Tracing` + * objects and _not_ specified by the `--trace-event-categories` flag + * will be disabled. + */ + disable(): void; + + /** + * Enables this `Tracing` object for the set of categories covered by + * the `Tracing` object. + */ + enable(): void; + + /** + * `true` only if the `Tracing` object has been enabled. + */ + readonly enabled: boolean; + } + + interface CreateTracingOptions { + /** + * An array of trace category names. Values included in the array are + * coerced to a string when possible. An error will be thrown if the + * value cannot be coerced. + */ + categories: string[]; + } + + /** + * Creates and returns a Tracing object for the given set of categories. + */ + function createTracing(options: CreateTracingOptions): Tracing; + + /** + * Returns a comma-separated list of all currently-enabled trace event + * categories. The current set of enabled trace event categories is + * determined by the union of all currently-enabled `Tracing` objects and + * any categories enabled using the `--trace-event-categories` flag. + */ + function getEnabledCategories(): string | undefined; +} +declare module "node:trace_events" { + export * from "trace_events"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/assert.d.ts b/node_backend/node_modules/@types/node/ts4.8/assert.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e1d8d92763a56a15c0206e0e0d7fd64966726a58 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/assert.d.ts @@ -0,0 +1,130 @@ +declare module "assert" { + /** An alias of `assert.ok()`. */ + function assert(value: any, message?: string | Error): asserts value; + namespace assert { + class AssertionError extends Error { + actual: any; + expected: any; + operator: string; + generatedMessage: boolean; + code: "ERR_ASSERTION"; + + constructor(options?: { + /** If provided, the error message is set to this value. */ + message?: string | undefined; + /** The `actual` property on the error instance. */ + actual?: any; + /** The `expected` property on the error instance. */ + expected?: any; + /** The `operator` property on the error instance. */ + operator?: string | undefined; + /** If provided, the generated stack trace omits frames before this function. */ + // tslint:disable-next-line:ban-types + stackStartFn?: Function | undefined; + }); + } + + class CallTracker { + calls(exact?: number): () => void; + calls any>(fn?: Func, exact?: number): Func; + report(): CallTrackerReportInformation[]; + verify(): void; + } + interface CallTrackerReportInformation { + message: string; + /** The actual number of times the function was called. */ + actual: number; + /** The number of times the function was expected to be called. */ + expected: number; + /** The name of the function that is wrapped. */ + operator: string; + /** A stack trace of the function. */ + stack: object; + } + + type AssertPredicate = RegExp | (new() => object) | ((thrown: any) => boolean) | object | Error; + + function fail(message?: string | Error): never; + /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */ + function fail( + actual: any, + expected: any, + message?: string | Error, + operator?: string, + // tslint:disable-next-line:ban-types + stackStartFn?: Function, + ): never; + function ok(value: any, message?: string | Error): asserts value; + /** @deprecated since v9.9.0 - use strictEqual() instead. */ + function equal(actual: any, expected: any, message?: string | Error): void; + /** @deprecated since v9.9.0 - use notStrictEqual() instead. */ + function notEqual(actual: any, expected: any, message?: string | Error): void; + /** @deprecated since v9.9.0 - use deepStrictEqual() instead. */ + function deepEqual(actual: any, expected: any, message?: string | Error): void; + /** @deprecated since v9.9.0 - use notDeepStrictEqual() instead. */ + function notDeepEqual(actual: any, expected: any, message?: string | Error): void; + function strictEqual(actual: any, expected: T, message?: string | Error): asserts actual is T; + function notStrictEqual(actual: any, expected: any, message?: string | Error): void; + function deepStrictEqual(actual: any, expected: T, message?: string | Error): asserts actual is T; + function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void; + + function throws(block: () => any, message?: string | Error): void; + function throws(block: () => any, error: AssertPredicate, message?: string | Error): void; + function doesNotThrow(block: () => any, message?: string | Error): void; + function doesNotThrow(block: () => any, error: AssertPredicate, message?: string | Error): void; + + function ifError(value: any): asserts value is null | undefined; + + function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise; + function rejects( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: string | Error, + ): Promise; + function doesNotReject(block: (() => Promise) | Promise, message?: string | Error): Promise; + function doesNotReject( + block: (() => Promise) | Promise, + error: AssertPredicate, + message?: string | Error, + ): Promise; + + function match(value: string, regExp: RegExp, message?: string | Error): void; + function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void; + + const strict: + & Omit< + typeof assert, + | "equal" + | "notEqual" + | "deepEqual" + | "notDeepEqual" + | "ok" + | "strictEqual" + | "deepStrictEqual" + | "ifError" + | "strict" + > + & { + (value: any, message?: string | Error): asserts value; + equal: typeof strictEqual; + notEqual: typeof notStrictEqual; + deepEqual: typeof deepStrictEqual; + notDeepEqual: typeof notDeepStrictEqual; + + // Mapped types and assertion functions are incompatible? + // TS2775: Assertions require every name in the call target + // to be declared with an explicit type annotation. + ok: typeof ok; + strictEqual: typeof strictEqual; + deepStrictEqual: typeof deepStrictEqual; + ifError: typeof ifError; + strict: typeof strict; + }; + } + + export = assert; +} +declare module "node:assert" { + import assert = require("assert"); + export = assert; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/async_hooks.d.ts b/node_backend/node_modules/@types/node/ts4.8/async_hooks.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ec1dad9d8da5decb16587253aa9d7550ac83d0ef --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/async_hooks.d.ts @@ -0,0 +1,237 @@ +/** + * Async Hooks module: https://nodejs.org/api/async_hooks.html + */ +declare module "async_hooks" { + /** + * Returns the asyncId of the current execution context. + */ + function executionAsyncId(): number; + + /** + * The resource representing the current execution. + * Useful to store data within the resource. + * + * Resource objects returned by `executionAsyncResource()` are most often internal + * Node.js handle objects with undocumented APIs. Using any functions or properties + * on the object is likely to crash your application and should be avoided. + * + * Using `executionAsyncResource()` in the top-level execution context will + * return an empty object as there is no handle or request object to use, + * but having an object representing the top-level can be helpful. + */ + function executionAsyncResource(): object; + + /** + * Returns the ID of the resource responsible for calling the callback that is currently being executed. + */ + function triggerAsyncId(): number; + + interface HookCallbacks { + /** + * Called when a class is constructed that has the possibility to emit an asynchronous event. + * @param asyncId a unique ID for the async resource + * @param type the type of the async resource + * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created + * @param resource reference to the resource representing the async operation, needs to be released during destroy + */ + init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void; + + /** + * When an asynchronous operation is initiated or completes a callback is called to notify the user. + * The before callback is called just before said callback is executed. + * @param asyncId the unique identifier assigned to the resource about to execute the callback. + */ + before?(asyncId: number): void; + + /** + * Called immediately after the callback specified in before is completed. + * @param asyncId the unique identifier assigned to the resource which has executed the callback. + */ + after?(asyncId: number): void; + + /** + * Called when a promise has resolve() called. This may not be in the same execution id + * as the promise itself. + * @param asyncId the unique id for the promise that was resolve()d. + */ + promiseResolve?(asyncId: number): void; + + /** + * Called after the resource corresponding to asyncId is destroyed + * @param asyncId a unique ID for the async resource + */ + destroy?(asyncId: number): void; + } + + interface AsyncHook { + /** + * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop. + */ + enable(): this; + + /** + * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled. + */ + disable(): this; + } + + /** + * Registers functions to be called for different lifetime events of each async operation. + * @param options the callbacks to register + * @return an AsyncHooks instance used for disabling and enabling hooks + */ + function createHook(options: HookCallbacks): AsyncHook; + + interface AsyncResourceOptions { + /** + * The ID of the execution context that created this async event. + * @default executionAsyncId() + */ + triggerAsyncId?: number | undefined; + + /** + * Disables automatic `emitDestroy` when the object is garbage collected. + * This usually does not need to be set (even if `emitDestroy` is called + * manually), unless the resource's `asyncId` is retrieved and the + * sensitive API's `emitDestroy` is called with it. + * @default false + */ + requireManualDestroy?: boolean | undefined; + } + + /** + * The class AsyncResource was designed to be extended by the embedder's async resources. + * Using this users can easily trigger the lifetime events of their own resources. + */ + class AsyncResource { + /** + * AsyncResource() is meant to be extended. Instantiating a + * new AsyncResource() also triggers init. If triggerAsyncId is omitted then + * async_hook.executionAsyncId() is used. + * @param type The type of async event. + * @param triggerAsyncId The ID of the execution context that created + * this async event (default: `executionAsyncId()`), or an + * AsyncResourceOptions object (since v9.3.0) + */ + constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions); + + /** + * Binds the given function to the current execution context. + * @param fn The function to bind to the current execution context. + * @param type An optional name to associate with the underlying `AsyncResource`. + */ + static bind any>( + fn: Func, + type?: string, + ): Func & { asyncResource: AsyncResource }; + + /** + * Binds the given function to execute to this `AsyncResource`'s scope. + * @param fn The function to bind to the current `AsyncResource`. + */ + bind any>(fn: Func): Func & { asyncResource: AsyncResource }; + + /** + * Call the provided function with the provided arguments in the + * execution context of the async resource. This will establish the + * context, trigger the AsyncHooks before callbacks, call the function, + * trigger the AsyncHooks after callbacks, and then restore the original + * execution context. + * @param fn The function to call in the execution context of this + * async resource. + * @param thisArg The receiver to be used for the function call. + * @param args Optional arguments to pass to the function. + */ + runInAsyncScope( + fn: (this: This, ...args: any[]) => Result, + thisArg?: This, + ...args: any[] + ): Result; + + /** + * Call AsyncHooks destroy callbacks. + */ + emitDestroy(): this; + + /** + * @return the unique ID assigned to this AsyncResource instance. + */ + asyncId(): number; + + /** + * @return the trigger ID for this AsyncResource instance. + */ + triggerAsyncId(): number; + } + + /** + * When having multiple instances of `AsyncLocalStorage`, they are independent + * from each other. It is safe to instantiate this class multiple times. + */ + class AsyncLocalStorage { + /** + * This method disables the instance of `AsyncLocalStorage`. All subsequent calls + * to `asyncLocalStorage.getStore()` will return `undefined` until + * `asyncLocalStorage.run()` is called again. + * + * When calling `asyncLocalStorage.disable()`, all current contexts linked to the + * instance will be exited. + * + * Calling `asyncLocalStorage.disable()` is required before the + * `asyncLocalStorage` can be garbage collected. This does not apply to stores + * provided by the `asyncLocalStorage`, as those objects are garbage collected + * along with the corresponding async resources. + * + * This method is to be used when the `asyncLocalStorage` is not in use anymore + * in the current process. + */ + disable(): void; + + /** + * This method returns the current store. If this method is called outside of an + * asynchronous context initialized by calling `asyncLocalStorage.run`, it will + * return `undefined`. + */ + getStore(): T | undefined; + + /** + * This methods runs a function synchronously within a context and return its + * return value. The store is not accessible outside of the callback function or + * the asynchronous operations created within the callback. + * + * Optionally, arguments can be passed to the function. They will be passed to the + * callback function. + * + * I the callback function throws an error, it will be thrown by `run` too. The + * stacktrace will not be impacted by this call and the context will be exited. + */ + // TODO: Apply generic vararg once available + run(store: T, callback: () => R): R; + run(store: T, callback: (...args: any[]) => R, ...args: any[]): R; + + /** + * This methods runs a function synchronously outside of a context and return its + * return value. The store is not accessible within the callback function or the + * asynchronous operations created within the callback. + * + * Optionally, arguments can be passed to the function. They will be passed to the + * callback function. + * + * If the callback function throws an error, it will be thrown by `exit` too. The + * stacktrace will not be impacted by this call and the context will be + * re-entered. + */ + // TODO: Apply generic vararg once available + exit(callback: (...args: any[]) => R, ...args: any[]): R; + + /** + * Calling `asyncLocalStorage.enterWith(store)` will transition into the context + * for the remainder of the current synchronous execution and will persist + * through any following asynchronous calls. + */ + enterWith(store: T): void; + } +} +declare module "node:async_hooks" { + export * from "async_hooks"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/buffer.d.ts b/node_backend/node_modules/@types/node/ts4.8/buffer.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..112b034142a4bec11de333a2f9c555e28d00f724 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/buffer.d.ts @@ -0,0 +1,89 @@ +declare module "buffer" { + import { BinaryLike } from "node:crypto"; + export const INSPECT_MAX_BYTES: number; + export const kMaxLength: number; + export const kStringMaxLength: number; + export const constants: { + MAX_LENGTH: number; + MAX_STRING_LENGTH: number; + }; + const BuffType: typeof Buffer; + + export type TranscodeEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "latin1" | "binary"; + + export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer; + + export const SlowBuffer: { + /** @deprecated since v6.0.0, use `Buffer.allocUnsafeSlow()` */ + new(size: number): Buffer; + prototype: Buffer; + }; + /** + * @experimental + */ + export interface BlobOptions { + /** + * @default 'utf8' + */ + encoding?: BufferEncoding | undefined; + /** + * The Blob content-type. The intent is for `type` to convey + * the MIME media type of the data, however no validation of the type format + * is performed. + */ + type?: string | undefined; + } + /** + * A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) encapsulates immutable, raw data that can be safely shared across + * multiple worker threads. + * @since v14.18.0 + * @experimental + */ + export class Blob { + /** + * The total size of the `Blob` in bytes. + * @since v14.18.0 + */ + readonly size: number; + /** + * The content-type of the `Blob`. + * @since v14.18.0 + */ + readonly type: string; + /** + * Creates a new `Blob` object containing a concatenation of the given sources. + * + * {ArrayBuffer}, {TypedArray}, {DataView}, and {Buffer} sources are copied into + * the 'Blob' and can therefore be safely modified after the 'Blob' is created. + * + * String sources are also copied into the `Blob`. + */ + constructor(sources: Array, options?: BlobOptions); + /** + * Returns a promise that fulfills with an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) containing a copy of + * the `Blob` data. + * @since v14.18.0 + */ + arrayBuffer(): Promise; + /** + * Creates and returns a new `Blob` containing a subset of this `Blob` objects + * data. The original `Blob` is not altered. + * @since v14.18.0 + * @param start The starting index. + * @param end The ending index. + * @param type The content-type for the new `Blob` + */ + slice(start?: number, end?: number, type?: string): Blob; + /** + * Returns a promise that fulfills with the contents of the `Blob` decoded as a + * UTF-8 string. + * @since v14.18.0 + */ + text(): Promise; + } + + export { BuffType as Buffer }; +} +declare module "node:buffer" { + export * from "buffer"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/child_process.d.ts b/node_backend/node_modules/@types/node/ts4.8/child_process.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e86922ba9f090c8635adfa6e1383c40306792c2b --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/child_process.d.ts @@ -0,0 +1,682 @@ +declare module "child_process" { + import { BaseEncodingOptions } from "fs"; + import * as events from "events"; + import * as net from "net"; + import { Pipe, Readable, Stream, Writable } from "stream"; + + type Serializable = string | object | number | boolean; + type SendHandle = net.Socket | net.Server; + + interface ChildProcess extends events.EventEmitter { + stdin: Writable | null; + stdout: Readable | null; + stderr: Readable | null; + readonly channel?: Pipe | null | undefined; + readonly stdio: [ + Writable | null, // stdin + Readable | null, // stdout + Readable | null, // stderr + Readable | Writable | null | undefined, // extra + Readable | Writable | null | undefined, // extra + ]; + readonly killed: boolean; + readonly pid: number; + readonly connected: boolean; + readonly exitCode: number | null; + readonly signalCode: NodeJS.Signals | null; + readonly spawnargs: string[]; + readonly spawnfile: string; + kill(signal?: NodeJS.Signals | number): boolean; + send(message: Serializable, callback?: (error: Error | null) => void): boolean; + send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean; + send( + message: Serializable, + sendHandle?: SendHandle, + options?: MessageOptions, + callback?: (error: Error | null) => void, + ): boolean; + disconnect(): void; + unref(): void; + ref(): void; + + /** + * events.EventEmitter + * 1. close + * 2. disconnect + * 3. error + * 4. exit + * 5. message + */ + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: "disconnect", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + addListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: "disconnect"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "exit", code: number | null, signal: NodeJS.Signals | null): boolean; + emit(event: "message", message: Serializable, sendHandle: SendHandle): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: "disconnect", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + on(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: "disconnect", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + once(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: "disconnect", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "exit", listener: (code: number | null, signal: NodeJS.Signals | null) => void): this; + prependListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener( + event: "close", + listener: (code: number | null, signal: NodeJS.Signals | null) => void, + ): this; + prependOnceListener(event: "disconnect", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "exit", + listener: (code: number | null, signal: NodeJS.Signals | null) => void, + ): this; + prependOnceListener(event: "message", listener: (message: Serializable, sendHandle: SendHandle) => void): this; + } + + // return this object when stdio option is undefined or not specified + interface ChildProcessWithoutNullStreams extends ChildProcess { + stdin: Writable; + stdout: Readable; + stderr: Readable; + readonly stdio: [ + Writable, // stdin + Readable, // stdout + Readable, // stderr + Readable | Writable | null | undefined, // extra, no modification + Readable | Writable | null | undefined, // extra, no modification + ]; + } + + // return this object when stdio option is a tuple of 3 + interface ChildProcessByStdio< + I extends null | Writable, + O extends null | Readable, + E extends null | Readable, + > extends ChildProcess { + stdin: I; + stdout: O; + stderr: E; + readonly stdio: [ + I, + O, + E, + Readable | Writable | null | undefined, // extra, no modification + Readable | Writable | null | undefined, // extra, no modification + ]; + } + + interface MessageOptions { + keepOpen?: boolean | undefined; + } + + type StdioOptions = + | "pipe" + | "ignore" + | "inherit" + | Array<("pipe" | "ipc" | "ignore" | "inherit" | Stream | number | null | undefined)>; + + type SerializationType = "json" | "advanced"; + + interface MessagingOptions { + /** + * Specify the kind of serialization used for sending messages between processes. + * @default 'json' + */ + serialization?: SerializationType | undefined; + } + + interface ProcessEnvOptions { + uid?: number | undefined; + gid?: number | undefined; + cwd?: string | undefined; + env?: NodeJS.ProcessEnv | undefined; + } + + interface CommonOptions extends ProcessEnvOptions { + /** + * @default false + */ + windowsHide?: boolean | undefined; + /** + * @default 0 + */ + timeout?: number | undefined; + } + + interface CommonSpawnOptions extends CommonOptions, MessagingOptions { + argv0?: string | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + shell?: boolean | string | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + + interface SpawnOptions extends CommonSpawnOptions { + detached?: boolean | undefined; + } + + interface SpawnOptionsWithoutStdio extends SpawnOptions { + stdio?: "pipe" | Array | undefined; + } + + type StdioNull = "inherit" | "ignore" | Stream; + type StdioPipe = undefined | null | "pipe"; + + interface SpawnOptionsWithStdioTuple< + Stdin extends StdioNull | StdioPipe, + Stdout extends StdioNull | StdioPipe, + Stderr extends StdioNull | StdioPipe, + > extends SpawnOptions { + stdio: [Stdin, Stdout, Stderr]; + } + + // overloads of spawn without 'args' + function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams; + + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + + function spawn(command: string, options: SpawnOptions): ChildProcess; + + // overloads of spawn with 'args' + function spawn( + command: string, + args?: ReadonlyArray, + options?: SpawnOptionsWithoutStdio, + ): ChildProcessWithoutNullStreams; + + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + function spawn( + command: string, + args: ReadonlyArray, + options: SpawnOptionsWithStdioTuple, + ): ChildProcessByStdio; + + function spawn(command: string, args: ReadonlyArray, options: SpawnOptions): ChildProcess; + + interface ExecOptions extends CommonOptions { + shell?: string | undefined; + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + } + + interface ExecOptionsWithStringEncoding extends ExecOptions { + encoding: BufferEncoding; + } + + interface ExecOptionsWithBufferEncoding extends ExecOptions { + encoding: BufferEncoding | null; // specify `null`. + } + + interface ExecException extends Error { + cmd?: string | undefined; + killed?: boolean | undefined; + code?: number | undefined; + signal?: NodeJS.Signals | undefined; + } + + // no `options` definitely means stdout/stderr are `string`. + function exec( + command: string, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function exec( + command: string, + options: { encoding: "buffer" | null } & ExecOptions, + callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function exec( + command: string, + options: { encoding: BufferEncoding } & ExecOptions, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function exec( + command: string, + options: { encoding: BufferEncoding } & ExecOptions, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function exec( + command: string, + options: ExecOptions, + callback?: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function exec( + command: string, + options: (BaseEncodingOptions & ExecOptions) | undefined | null, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + + interface PromiseWithChild extends Promise { + child: ChildProcess; + } + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace exec { + function __promisify__(command: string): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + command: string, + options: { encoding: "buffer" | null } & ExecOptions, + ): PromiseWithChild<{ stdout: Buffer; stderr: Buffer }>; + function __promisify__( + command: string, + options: { encoding: BufferEncoding } & ExecOptions, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + command: string, + options: ExecOptions, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + command: string, + options?: (BaseEncodingOptions & ExecOptions) | null, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + } + + interface ExecFileOptions extends CommonOptions { + maxBuffer?: number | undefined; + killSignal?: NodeJS.Signals | number | undefined; + windowsVerbatimArguments?: boolean | undefined; + shell?: boolean | string | undefined; + } + interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { + encoding: "buffer" | null; + } + interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + type ExecFileException = + & Omit + & Omit + & { code?: string | number | undefined | null }; + + function execFile(file: string): ChildProcess; + function execFile(file: string, options: (BaseEncodingOptions & ExecFileOptions) | undefined | null): ChildProcess; + function execFile(file: string, args?: ReadonlyArray | null): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + ): ChildProcess; + + // no `options` definitely means stdout/stderr are `string`. + function execFile( + file: string, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function execFile( + file: string, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecFileException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function execFile( + file: string, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function execFile( + file: string, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function execFile( + file: string, + options: ExecFileOptions, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + callback: (error: ExecFileException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function execFile( + file: string, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + callback: + | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) + | undefined + | null, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + callback: + | ((error: ExecFileException | null, stdout: string | Buffer, stderr: string | Buffer) => void) + | undefined + | null, + ): ChildProcess; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace execFile { + function __promisify__(file: string): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithBufferEncoding, + ): PromiseWithChild<{ stdout: Buffer; stderr: Buffer }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + ): PromiseWithChild<{ stdout: Buffer; stderr: Buffer }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithStringEncoding, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + options: ExecFileOptionsWithOtherEncoding, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + function __promisify__( + file: string, + options: ExecFileOptions, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + ): PromiseWithChild<{ stdout: string; stderr: string }>; + function __promisify__( + file: string, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: (BaseEncodingOptions & ExecFileOptions) | undefined | null, + ): PromiseWithChild<{ stdout: string | Buffer; stderr: string | Buffer }>; + } + + interface ForkOptions extends ProcessEnvOptions, MessagingOptions { + execPath?: string | undefined; + execArgv?: string[] | undefined; + silent?: boolean | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + detached?: boolean | undefined; + windowsVerbatimArguments?: boolean | undefined; + } + function fork(modulePath: string, options?: ForkOptions): ChildProcess; + function fork(modulePath: string, args?: ReadonlyArray, options?: ForkOptions): ChildProcess; + + interface SpawnSyncOptions extends CommonSpawnOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + killSignal?: NodeJS.Signals | number | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | "buffer" | null | undefined; + } + interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { + encoding: BufferEncoding; + } + interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { + encoding?: "buffer" | null | undefined; + } + interface SpawnSyncReturns { + pid: number; + output: Array; + stdout: T; + stderr: T; + status: number | null; + signal: NodeJS.Signals | null; + error?: Error | undefined; + } + function spawnSync(command: string): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; + function spawnSync( + command: string, + args?: ReadonlyArray, + options?: SpawnSyncOptionsWithStringEncoding, + ): SpawnSyncReturns; + function spawnSync( + command: string, + args?: ReadonlyArray, + options?: SpawnSyncOptionsWithBufferEncoding, + ): SpawnSyncReturns; + function spawnSync( + command: string, + args?: ReadonlyArray, + options?: SpawnSyncOptions, + ): SpawnSyncReturns; + + interface ExecSyncOptions extends CommonOptions { + input?: string | Uint8Array | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + shell?: string | undefined; + killSignal?: NodeJS.Signals | number | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | "buffer" | null | undefined; + } + interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { + encoding: BufferEncoding; + } + interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { + encoding?: "buffer" | null | undefined; + } + function execSync(command: string): Buffer; + function execSync(command: string, options: ExecSyncOptionsWithStringEncoding): string; + function execSync(command: string, options: ExecSyncOptionsWithBufferEncoding): Buffer; + function execSync(command: string, options?: ExecSyncOptions): string | Buffer; + + interface ExecFileSyncOptions extends CommonOptions { + input?: string | NodeJS.ArrayBufferView | undefined; + /** + * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. + * If passed as an array, the first element is used for `stdin`, the second for + * `stdout`, and the third for `stderr`. A fourth element can be used to + * specify the `stdio` behavior beyond the standard streams. See + * {@link ChildProcess.stdio} for more information. + * + * @default 'pipe' + */ + stdio?: StdioOptions | undefined; + killSignal?: NodeJS.Signals | number | undefined; + maxBuffer?: number | undefined; + encoding?: BufferEncoding | undefined; + shell?: boolean | string | undefined; + } + interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; + } + interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; // specify `null`. + } + function execFileSync(command: string): Buffer; + function execFileSync(command: string, options: ExecFileSyncOptionsWithStringEncoding): string; + function execFileSync(command: string, options: ExecFileSyncOptionsWithBufferEncoding): Buffer; + function execFileSync(command: string, options?: ExecFileSyncOptions): string | Buffer; + function execFileSync(command: string, args: ReadonlyArray): Buffer; + function execFileSync( + command: string, + args: ReadonlyArray, + options: ExecFileSyncOptionsWithStringEncoding, + ): string; + function execFileSync( + command: string, + args: ReadonlyArray, + options: ExecFileSyncOptionsWithBufferEncoding, + ): Buffer; + function execFileSync( + command: string, + args?: ReadonlyArray, + options?: ExecFileSyncOptions, + ): string | Buffer; +} +declare module "node:child_process" { + export * from "child_process"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/cluster.d.ts b/node_backend/node_modules/@types/node/ts4.8/cluster.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..29eb9841a1f12e7a25f932cd35938e99d1b490a6 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/cluster.d.ts @@ -0,0 +1,300 @@ +declare module "cluster" { + import * as child from "child_process"; + import EventEmitter = require("events"); + import * as net from "net"; + + // interfaces + type SerializationType = "json" | "advanced"; + interface ClusterSettings { + execArgv?: string[] | undefined; // default: process.execArgv + exec?: string | undefined; + args?: string[] | undefined; + silent?: boolean | undefined; + stdio?: any[] | undefined; + uid?: number | undefined; + gid?: number | undefined; + inspectPort?: number | (() => number) | undefined; + serialization?: SerializationType | undefined; + cwd?: string | undefined; + windowsHide?: boolean | undefined; + } + + interface Address { + address: string; + port: number; + addressType: number | "udp4" | "udp6"; // 4, 6, -1, "udp4", "udp6" + } + + class Worker extends EventEmitter { + id: number; + process: child.ChildProcess; + send( + message: child.Serializable, + sendHandle?: child.SendHandle, + callback?: (error: Error | null) => void, + ): boolean; + kill(signal?: string): void; + destroy(signal?: string): void; + disconnect(): void; + isConnected(): boolean; + isDead(): boolean; + exitedAfterDisconnect: boolean; + + /** + * events.EventEmitter + * 1. disconnect + * 2. error + * 3. exit + * 4. listening + * 5. message + * 6. online + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "disconnect", listener: () => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "exit", listener: (code: number, signal: string) => void): this; + addListener(event: "listening", listener: (address: Address) => void): this; + addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: "online", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "disconnect"): boolean; + emit(event: "error", error: Error): boolean; + emit(event: "exit", code: number, signal: string): boolean; + emit(event: "listening", address: Address): boolean; + emit(event: "message", message: any, handle: net.Socket | net.Server): boolean; + emit(event: "online"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "disconnect", listener: () => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "exit", listener: (code: number, signal: string) => void): this; + on(event: "listening", listener: (address: Address) => void): this; + on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: "online", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "disconnect", listener: () => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "exit", listener: (code: number, signal: string) => void): this; + once(event: "listening", listener: (address: Address) => void): this; + once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: "online", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "disconnect", listener: () => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependListener(event: "listening", listener: (address: Address) => void): this; + prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependListener(event: "online", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "disconnect", listener: () => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependOnceListener(event: "listening", listener: (address: Address) => void): this; + prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener(event: "online", listener: () => void): this; + } + + interface Cluster extends EventEmitter { + Worker: Worker; + disconnect(callback?: () => void): void; + fork(env?: any): Worker; + isMaster: boolean; + isWorker: boolean; + schedulingPolicy: number; + settings: ClusterSettings; + setupMaster(settings?: ClusterSettings): void; + worker?: Worker | undefined; + workers?: NodeJS.Dict | undefined; + + readonly SCHED_NONE: number; + readonly SCHED_RR: number; + + /** + * events.EventEmitter + * 1. disconnect + * 2. exit + * 3. fork + * 4. listening + * 5. message + * 6. online + * 7. setup + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "disconnect", listener: (worker: Worker) => void): this; + addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + addListener(event: "fork", listener: (worker: Worker) => void): this; + addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + addListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; // the handle is a net.Socket or net.Server object, or undefined. + addListener(event: "online", listener: (worker: Worker) => void): this; + addListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "disconnect", worker: Worker): boolean; + emit(event: "exit", worker: Worker, code: number, signal: string): boolean; + emit(event: "fork", worker: Worker): boolean; + emit(event: "listening", worker: Worker, address: Address): boolean; + emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; + emit(event: "online", worker: Worker): boolean; + emit(event: "setup", settings: ClusterSettings): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "disconnect", listener: (worker: Worker) => void): this; + on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + on(event: "fork", listener: (worker: Worker) => void): this; + on(event: "listening", listener: (worker: Worker, address: Address) => void): this; + on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + on(event: "online", listener: (worker: Worker) => void): this; + on(event: "setup", listener: (settings: ClusterSettings) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "disconnect", listener: (worker: Worker) => void): this; + once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + once(event: "fork", listener: (worker: Worker) => void): this; + once(event: "listening", listener: (worker: Worker, address: Address) => void): this; + once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined. + once(event: "online", listener: (worker: Worker) => void): this; + once(event: "setup", listener: (settings: ClusterSettings) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "disconnect", listener: (worker: Worker) => void): this; + prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + prependListener(event: "fork", listener: (worker: Worker) => void): this; + prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + prependListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; // the handle is a net.Socket or net.Server object, or undefined. + prependListener(event: "online", listener: (worker: Worker) => void): this; + prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this; + prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this; + prependOnceListener(event: "fork", listener: (worker: Worker) => void): this; + prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this; + // the handle is a net.Socket or net.Server object, or undefined. + prependOnceListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): this; + prependOnceListener(event: "online", listener: (worker: Worker) => void): this; + prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this; + } + + const SCHED_NONE: number; + const SCHED_RR: number; + + function disconnect(callback?: () => void): void; + function fork(env?: any): Worker; + const isMaster: boolean; + const isWorker: boolean; + let schedulingPolicy: number; + const settings: ClusterSettings; + function setupMaster(settings?: ClusterSettings): void; + const worker: Worker; + const workers: NodeJS.Dict; + + /** + * events.EventEmitter + * 1. disconnect + * 2. exit + * 3. fork + * 4. listening + * 5. message + * 6. online + * 7. setup + */ + function addListener(event: string, listener: (...args: any[]) => void): Cluster; + function addListener(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; + function addListener(event: "fork", listener: (worker: Worker) => void): Cluster; + function addListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + // the handle is a net.Socket or net.Server object, or undefined. + function addListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; + function addListener(event: "online", listener: (worker: Worker) => void): Cluster; + function addListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function emit(event: string | symbol, ...args: any[]): boolean; + function emit(event: "disconnect", worker: Worker): boolean; + function emit(event: "exit", worker: Worker, code: number, signal: string): boolean; + function emit(event: "fork", worker: Worker): boolean; + function emit(event: "listening", worker: Worker, address: Address): boolean; + function emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean; + function emit(event: "online", worker: Worker): boolean; + function emit(event: "setup", settings: ClusterSettings): boolean; + + function on(event: string, listener: (...args: any[]) => void): Cluster; + function on(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; + function on(event: "fork", listener: (worker: Worker) => void): Cluster; + function on(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + function on( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; // the handle is a net.Socket or net.Server object, or undefined. + function on(event: "online", listener: (worker: Worker) => void): Cluster; + function on(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function once(event: string, listener: (...args: any[]) => void): Cluster; + function once(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; + function once(event: "fork", listener: (worker: Worker) => void): Cluster; + function once(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + function once( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; // the handle is a net.Socket or net.Server object, or undefined. + function once(event: "online", listener: (worker: Worker) => void): Cluster; + function once(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function removeListener(event: string, listener: (...args: any[]) => void): Cluster; + function removeAllListeners(event?: string): Cluster; + function setMaxListeners(n: number): Cluster; + function getMaxListeners(): number; + function listeners(event: string): Function[]; + function listenerCount(type: string): number; + + function prependListener(event: string, listener: (...args: any[]) => void): Cluster; + function prependListener(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster; + function prependListener(event: "fork", listener: (worker: Worker) => void): Cluster; + function prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + // the handle is a net.Socket or net.Server object, or undefined. + function prependListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; + function prependListener(event: "online", listener: (worker: Worker) => void): Cluster; + function prependListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function prependOnceListener(event: string, listener: (...args: any[]) => void): Cluster; + function prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): Cluster; + function prependOnceListener( + event: "exit", + listener: (worker: Worker, code: number, signal: string) => void, + ): Cluster; + function prependOnceListener(event: "fork", listener: (worker: Worker) => void): Cluster; + function prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster; + // the handle is a net.Socket or net.Server object, or undefined. + function prependOnceListener( + event: "message", + listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void, + ): Cluster; + function prependOnceListener(event: "online", listener: (worker: Worker) => void): Cluster; + function prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster; + + function eventNames(): string[]; +} +declare module "node:cluster" { + export * from "cluster"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/console.d.ts b/node_backend/node_modules/@types/node/ts4.8/console.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..016f64625ddb4a369a2181f91e7c511da355ae27 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/console.d.ts @@ -0,0 +1,142 @@ +declare module "console" { + import console = require("node:console"); + export = console; +} +declare module "node:console" { + import { InspectOptions } from "util"; + + global { + // This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build + interface Console { + Console: NodeJS.ConsoleConstructor; + /** + * A simple assertion test that verifies whether `value` is truthy. + * If it is not, an `AssertionError` is thrown. + * If provided, the error `message` is formatted using `util.format()` and used as the error message. + */ + assert(value: any, message?: string, ...optionalParams: any[]): void; + /** + * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the TTY. + * When `stdout` is not a TTY, this method does nothing. + */ + clear(): void; + /** + * Maintains an internal counter specific to `label` and outputs to `stdout` the number of times `console.count()` has been called with the given `label`. + */ + count(label?: string): void; + /** + * Resets the internal counter specific to `label`. + */ + countReset(label?: string): void; + /** + * The `console.debug()` function is an alias for {@link console.log}. + */ + debug(message?: any, ...optionalParams: any[]): void; + /** + * Uses {@link util.inspect} on `obj` and prints the resulting string to `stdout`. + * This function bypasses any custom `inspect()` function defined on `obj`. + */ + dir(obj: any, options?: InspectOptions): void; + /** + * This method calls {@link console.log} passing it the arguments received. Please note that this method does not produce any XML formatting + */ + dirxml(...data: any[]): void; + /** + * Prints to `stderr` with newline. + */ + error(message?: any, ...optionalParams: any[]): void; + /** + * Increases indentation of subsequent lines by two spaces. + * If one or more `label`s are provided, those are printed first without the additional indentation. + */ + group(...label: any[]): void; + /** + * The `console.groupCollapsed()` function is an alias for {@link console.group}. + */ + groupCollapsed(...label: any[]): void; + /** + * Decreases indentation of subsequent lines by two spaces. + */ + groupEnd(): void; + /** + * The {@link console.info} function is an alias for {@link console.log}. + */ + info(message?: any, ...optionalParams: any[]): void; + /** + * Prints to `stdout` with newline. + */ + log(message?: any, ...optionalParams: any[]): void; + /** + * This method does not display anything unless used in the inspector. + * Prints to `stdout` the array `array` formatted as a table. + */ + table(tabularData: any, properties?: ReadonlyArray): void; + /** + * Starts a timer that can be used to compute the duration of an operation. Timers are identified by a unique `label`. + */ + time(label?: string): void; + /** + * Stops a timer that was previously started by calling {@link console.time} and prints the result to `stdout`. + */ + timeEnd(label?: string): void; + /** + * For a timer that was previously started by calling {@link console.time}, prints the elapsed time and other `data` arguments to `stdout`. + */ + timeLog(label?: string, ...data: any[]): void; + /** + * Prints to `stderr` the string 'Trace :', followed by the {@link util.format} formatted message and stack trace to the current position in the code. + */ + trace(message?: any, ...optionalParams: any[]): void; + /** + * The {@link console.warn} function is an alias for {@link console.error}. + */ + warn(message?: any, ...optionalParams: any[]): void; + + // --- Inspector mode only --- + /** + * This method does not display anything unless used in the inspector. + * Starts a JavaScript CPU profile with an optional label. + */ + profile(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector. + */ + profileEnd(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Adds an event with the label `label` to the Timeline panel of the inspector. + */ + timeStamp(label?: string): void; + } + + var console: Console; + + namespace NodeJS { + interface ConsoleConstructorOptions { + stdout: WritableStream; + stderr?: WritableStream | undefined; + ignoreErrors?: boolean | undefined; + colorMode?: boolean | "auto" | undefined; + inspectOptions?: InspectOptions | undefined; + /** + * Set group indentation + * @default 2 + */ + groupIndentation?: number | undefined; + } + + interface ConsoleConstructor { + prototype: Console; + new(stdout: WritableStream, stderr?: WritableStream, ignoreErrors?: boolean): Console; + new(options: ConsoleConstructorOptions): Console; + } + + interface Global { + console: typeof console; + } + } + } + + export = console; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/constants.d.ts b/node_backend/node_modules/@types/node/ts4.8/constants.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..879342390bf0fc0e02485512b7016b254158e9a9 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/constants.d.ts @@ -0,0 +1,19 @@ +/** @deprecated since v6.3.0 - use constants property exposed by the relevant module instead. */ +declare module "constants" { + import { constants as osConstants, SignalConstants } from "os"; + import { constants as cryptoConstants } from "crypto"; + import { constants as fsConstants } from "fs"; + + const exp: + & typeof osConstants.errno + & typeof osConstants.priority + & SignalConstants + & typeof cryptoConstants + & typeof fsConstants; + export = exp; +} + +declare module "node:constants" { + import constants = require("constants"); + export = constants; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/crypto.d.ts b/node_backend/node_modules/@types/node/ts4.8/crypto.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..93236244cbb18220e72cced2bb91bb7d01d588ac --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/crypto.d.ts @@ -0,0 +1,1287 @@ +declare module "crypto" { + import * as stream from "stream"; + + interface Certificate { + /** + * @param spkac + * @returns The challenge component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportChallenge(spkac: BinaryLike): Buffer; + /** + * @param spkac + * @param encoding The encoding of the spkac string. + * @returns The public key component of the `spkac` data structure, + * which includes a public key and a challenge. + */ + exportPublicKey(spkac: BinaryLike, encoding?: string): Buffer; + /** + * @param spkac + * @returns `true` if the given `spkac` data structure is valid, + * `false` otherwise. + */ + verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; + } + const Certificate: Certificate & { + /** @deprecated since v14.9.0 - Use static methods of `crypto.Certificate` instead. */ + new(): Certificate; + /** @deprecated since v14.9.0 - Use static methods of `crypto.Certificate` instead. */ + (): Certificate; + }; + + namespace constants { + // https://nodejs.org/dist/latest-v10.x/docs/api/crypto.html#crypto_crypto_constants + const OPENSSL_VERSION_NUMBER: number; + + /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */ + const SSL_OP_ALL: number; + /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; + /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ + const SSL_OP_CIPHER_SERVER_PREFERENCE: number; + /** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */ + const SSL_OP_CISCO_ANYCONNECT: number; + /** Instructs OpenSSL to turn on cookie exchange. */ + const SSL_OP_COOKIE_EXCHANGE: number; + /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */ + const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; + /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */ + const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; + /** Instructs OpenSSL to always use the tmp_rsa key when performing RSA operations. */ + const SSL_OP_EPHEMERAL_RSA: number; + /** Allows initial connection to servers that do not support RI. */ + const SSL_OP_LEGACY_SERVER_CONNECT: number; + const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number; + const SSL_OP_MICROSOFT_SESS_ID_BUG: number; + /** Instructs OpenSSL to disable the workaround for a man-in-the-middle protocol-version vulnerability in the SSL 2.0 server implementation. */ + const SSL_OP_MSIE_SSLV2_RSA_PADDING: number; + const SSL_OP_NETSCAPE_CA_DN_BUG: number; + const SSL_OP_NETSCAPE_CHALLENGE_BUG: number; + const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number; + const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number; + /** Instructs OpenSSL to disable support for SSL/TLS compression. */ + const SSL_OP_NO_COMPRESSION: number; + const SSL_OP_NO_QUERY_MTU: number; + /** Instructs OpenSSL to always start a new session when performing renegotiation. */ + const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; + const SSL_OP_NO_SSLv2: number; + const SSL_OP_NO_SSLv3: number; + const SSL_OP_NO_TICKET: number; + const SSL_OP_NO_TLSv1: number; + const SSL_OP_NO_TLSv1_1: number; + const SSL_OP_NO_TLSv1_2: number; + const SSL_OP_PKCS1_CHECK_1: number; + const SSL_OP_PKCS1_CHECK_2: number; + /** Instructs OpenSSL to always create a new key when using temporary/ephemeral DH parameters. */ + const SSL_OP_SINGLE_DH_USE: number; + /** Instructs OpenSSL to always create a new key when using temporary/ephemeral ECDH parameters. */ + const SSL_OP_SINGLE_ECDH_USE: number; + const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number; + const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number; + const SSL_OP_TLS_BLOCK_PADDING_BUG: number; + const SSL_OP_TLS_D5_BUG: number; + /** Instructs OpenSSL to disable version rollback attack detection. */ + const SSL_OP_TLS_ROLLBACK_BUG: number; + + const ENGINE_METHOD_RSA: number; + const ENGINE_METHOD_DSA: number; + const ENGINE_METHOD_DH: number; + const ENGINE_METHOD_RAND: number; + const ENGINE_METHOD_EC: number; + const ENGINE_METHOD_CIPHERS: number; + const ENGINE_METHOD_DIGESTS: number; + const ENGINE_METHOD_PKEY_METHS: number; + const ENGINE_METHOD_PKEY_ASN1_METHS: number; + const ENGINE_METHOD_ALL: number; + const ENGINE_METHOD_NONE: number; + + const DH_CHECK_P_NOT_SAFE_PRIME: number; + const DH_CHECK_P_NOT_PRIME: number; + const DH_UNABLE_TO_CHECK_GENERATOR: number; + const DH_NOT_SUITABLE_GENERATOR: number; + + const ALPN_ENABLED: number; + + const RSA_PKCS1_PADDING: number; + const RSA_SSLV23_PADDING: number; + const RSA_NO_PADDING: number; + const RSA_PKCS1_OAEP_PADDING: number; + const RSA_X931_PADDING: number; + const RSA_PKCS1_PSS_PADDING: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */ + const RSA_PSS_SALTLEN_DIGEST: number; + /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */ + const RSA_PSS_SALTLEN_MAX_SIGN: number; + /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */ + const RSA_PSS_SALTLEN_AUTO: number; + + const POINT_CONVERSION_COMPRESSED: number; + const POINT_CONVERSION_UNCOMPRESSED: number; + const POINT_CONVERSION_HYBRID: number; + + /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */ + const defaultCoreCipherList: string; + /** Specifies the active default cipher list used by the current Node.js process (colon-separated values). */ + const defaultCipherList: string; + } + + interface HashOptions extends stream.TransformOptions { + /** + * For XOF hash functions such as `shake256`, the + * outputLength option can be used to specify the desired output length in bytes. + */ + outputLength?: number | undefined; + } + + /** @deprecated since v10.0.0 */ + const fips: boolean; + + function createHash(algorithm: string, options?: HashOptions): Hash; + function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac; + + // https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings + type BinaryToTextEncoding = "base64" | "base64url" | "hex"; + type CharacterEncoding = "utf8" | "utf-8" | "utf16le" | "latin1"; + type LegacyCharacterEncoding = "ascii" | "binary" | "ucs2" | "ucs-2"; + + type Encoding = BinaryToTextEncoding | CharacterEncoding | LegacyCharacterEncoding; + + type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid"; + + class Hash extends stream.Transform { + private constructor(); + copy(): Hash; + update(data: BinaryLike): Hash; + update(data: string, input_encoding: Encoding): Hash; + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + class Hmac extends stream.Transform { + private constructor(); + update(data: BinaryLike): Hmac; + update(data: string, input_encoding: Encoding): Hmac; + digest(): Buffer; + digest(encoding: BinaryToTextEncoding): string; + } + + type KeyObjectType = "secret" | "public" | "private"; + + interface KeyExportOptions { + type: "pkcs1" | "spki" | "pkcs8" | "sec1"; + format: T; + cipher?: string | undefined; + passphrase?: string | Buffer | undefined; + } + + class KeyObject { + private constructor(); + asymmetricKeyType?: KeyType | undefined; + /** + * For asymmetric keys, this property represents the size of the embedded key in + * bytes. This property is `undefined` for symmetric keys. + */ + asymmetricKeySize?: number | undefined; + export(options: KeyExportOptions<"pem">): string | Buffer; + export(options?: KeyExportOptions<"der">): Buffer; + symmetricKeySize?: number | undefined; + type: KeyObjectType; + } + + type CipherCCMTypes = "aes-128-ccm" | "aes-192-ccm" | "aes-256-ccm" | "chacha20-poly1305"; + type CipherGCMTypes = "aes-128-gcm" | "aes-192-gcm" | "aes-256-gcm"; + type CipherOCBTypes = "aes-128-ocb" | "aes-192-ocb" | "aes-256-ocb"; + + type BinaryLike = string | NodeJS.ArrayBufferView; + + type CipherKey = BinaryLike | KeyObject; + + interface CipherCCMOptions extends stream.TransformOptions { + authTagLength: number; + } + interface CipherGCMOptions extends stream.TransformOptions { + authTagLength?: number | undefined; + } + interface CipherOCBOptions extends stream.TransformOptions { + authTagLength: number; + } + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): CipherCCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): CipherGCM; + /** @deprecated since v10.0.0 use `createCipheriv()` */ + function createCipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Cipher; + + function createCipheriv( + algorithm: CipherCCMTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherCCMOptions, + ): CipherCCM; + function createCipheriv( + algorithm: CipherOCBTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherOCBOptions, + ): CipherOCB; + function createCipheriv( + algorithm: CipherGCMTypes, + key: CipherKey, + iv: BinaryLike, + options?: CipherGCMOptions, + ): CipherGCM; + function createCipheriv( + algorithm: string, + key: CipherKey, + iv: BinaryLike | null, + options?: stream.TransformOptions, + ): Cipher; + + class Cipher extends stream.Transform { + private constructor(); + update(data: BinaryLike): Buffer; + update(data: string, input_encoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, input_encoding: undefined, output_encoding: Encoding): string; + update(data: string, input_encoding: Encoding | undefined, output_encoding: Encoding): string; + final(): Buffer; + final(output_encoding: BufferEncoding): string; + setAutoPadding(auto_padding?: boolean): this; + // getAuthTag(): Buffer; + // setAAD(buffer: NodeJS.ArrayBufferView): this; + } + interface CipherCCM extends Cipher { + setAAD(buffer: NodeJS.ArrayBufferView, options: { plaintextLength: number }): this; + getAuthTag(): Buffer; + } + interface CipherGCM extends Cipher { + setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this; + getAuthTag(): Buffer; + } + interface CipherOCB extends Cipher { + setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this; + getAuthTag(): Buffer; + } + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): DecipherCCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): DecipherGCM; + /** @deprecated since v10.0.0 use `createDecipheriv()` */ + function createDecipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Decipher; + + function createDecipheriv( + algorithm: CipherCCMTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherCCMOptions, + ): DecipherCCM; + function createDecipheriv( + algorithm: CipherOCBTypes, + key: CipherKey, + iv: BinaryLike, + options: CipherOCBOptions, + ): DecipherOCB; + function createDecipheriv( + algorithm: CipherGCMTypes, + key: CipherKey, + iv: BinaryLike, + options?: CipherGCMOptions, + ): DecipherGCM; + function createDecipheriv( + algorithm: string, + key: CipherKey, + iv: BinaryLike | null, + options?: stream.TransformOptions, + ): Decipher; + + class Decipher extends stream.Transform { + private constructor(); + update(data: NodeJS.ArrayBufferView): Buffer; + update(data: string, input_encoding: Encoding): Buffer; + update(data: NodeJS.ArrayBufferView, input_encoding: undefined, output_encoding: Encoding): string; + update(data: string, input_encoding: Encoding | undefined, output_encoding: Encoding): string; + final(): Buffer; + final(output_encoding: BufferEncoding): string; + setAutoPadding(auto_padding?: boolean): this; + // setAuthTag(tag: NodeJS.ArrayBufferView): this; + // setAAD(buffer: NodeJS.ArrayBufferView): this; + } + interface DecipherCCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD(buffer: NodeJS.ArrayBufferView, options: { plaintextLength: number }): this; + } + interface DecipherGCM extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this; + } + interface DecipherOCB extends Decipher { + setAuthTag(buffer: NodeJS.ArrayBufferView): this; + setAAD(buffer: NodeJS.ArrayBufferView, options?: { plaintextLength: number }): this; + } + + interface PrivateKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: "pkcs1" | "pkcs8" | "sec1" | undefined; + passphrase?: string | Buffer | undefined; + } + + interface PublicKeyInput { + key: string | Buffer; + format?: KeyFormat | undefined; + type?: "pkcs1" | "spki" | undefined; + } + + function createPrivateKey(key: PrivateKeyInput | string | Buffer): KeyObject; + function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject): KeyObject; + function createSecretKey(key: NodeJS.ArrayBufferView): KeyObject; + + function createSign(algorithm: string, options?: stream.WritableOptions): Signer; + + type DSAEncoding = "der" | "ieee-p1363"; + + interface SigningOptions { + /** + * @see crypto.constants.RSA_PKCS1_PADDING + */ + padding?: number | undefined; + saltLength?: number | undefined; + dsaEncoding?: DSAEncoding | undefined; + } + + interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {} + interface SignKeyObjectInput extends SigningOptions { + key: KeyObject; + } + interface VerifyPublicKeyInput extends PublicKeyInput, SigningOptions {} + interface VerifyKeyObjectInput extends SigningOptions { + key: KeyObject; + } + + type KeyLike = string | Buffer | KeyObject; + + class Signer extends stream.Writable { + private constructor(); + + update(data: BinaryLike): Signer; + update(data: string, input_encoding: Encoding): Signer; + sign(private_key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput): Buffer; + sign( + private_key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + output_format: BinaryToTextEncoding, + ): string; + } + + function createVerify(algorithm: string, options?: stream.WritableOptions): Verify; + class Verify extends stream.Writable { + private constructor(); + + update(data: BinaryLike): Verify; + update(data: string, input_encoding: Encoding): Verify; + verify( + object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, + signature: NodeJS.ArrayBufferView, + ): boolean; + verify( + object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, + signature: string, + signature_format?: BinaryToTextEncoding, + ): boolean; + // https://nodejs.org/api/crypto.html#crypto_verifier_verify_object_signature_signature_format + // The signature field accepts a TypedArray type, but it is only available starting ES2017 + } + function createDiffieHellman(prime_length: number, generator?: number | NodeJS.ArrayBufferView): DiffieHellman; + function createDiffieHellman(prime: NodeJS.ArrayBufferView): DiffieHellman; + function createDiffieHellman(prime: string, prime_encoding: BinaryToTextEncoding): DiffieHellman; + function createDiffieHellman( + prime: string, + prime_encoding: BinaryToTextEncoding, + generator: number | NodeJS.ArrayBufferView, + ): DiffieHellman; + function createDiffieHellman( + prime: string, + prime_encoding: BinaryToTextEncoding, + generator: string, + generator_encoding: BinaryToTextEncoding, + ): DiffieHellman; + class DiffieHellman { + private constructor(); + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding): string; + computeSecret(otherPublicKey: NodeJS.ArrayBufferView, inputEncoding?: null, outputEncoding?: null): Buffer; + computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding, outputEncoding?: null): Buffer; + computeSecret( + otherPublicKey: NodeJS.ArrayBufferView, + inputEncoding: null, + outputEncoding: BinaryToTextEncoding, + ): string; + computeSecret( + other_public_key: string, + input_encoding: BinaryToTextEncoding, + output_encoding: BinaryToTextEncoding, + ): string; + getPrime(): Buffer; + getPrime(encoding: BinaryToTextEncoding): string; + getGenerator(): Buffer; + getGenerator(encoding: BinaryToTextEncoding): string; + getPublicKey(): Buffer; + getPublicKey(encoding: BinaryToTextEncoding): string; + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + setPublicKey(public_key: NodeJS.ArrayBufferView): void; + setPublicKey(public_key: string, encoding: BufferEncoding): void; + setPrivateKey(private_key: NodeJS.ArrayBufferView): void; + setPrivateKey(private_key: string, encoding: BufferEncoding): void; + verifyError: number; + } + /** + * The `DiffieHellmanGroup` class takes a well-known modp group as its argument. + * It works the same as `DiffieHellman`, except that it does not allow changing its keys after creation. + * In other words, it does not implement `setPublicKey()` or `setPrivateKey()` methods. + * + * ```js + * const { createDiffieHellmanGroup } = await import('node:crypto'); + * const dh = createDiffieHellmanGroup('modp1'); + * ``` + * The name (e.g. `'modp1'`) is taken from [RFC 2412](https://www.rfc-editor.org/rfc/rfc2412.txt) (modp1 and 2) and [RFC 3526](https://www.rfc-editor.org/rfc/rfc3526.txt): + * ```bash + * $ perl -ne 'print "$1\n" if /"(modp\d+)"/' src/node_crypto_groups.h + * modp1 # 768 bits + * modp2 # 1024 bits + * modp5 # 1536 bits + * modp14 # 2048 bits + * modp15 # etc. + * modp16 + * modp17 + * modp18 + * ``` + * @since v0.7.5 + */ + const DiffieHellmanGroup: DiffieHellmanGroupConstructor; + interface DiffieHellmanGroupConstructor { + new(name: string): DiffieHellmanGroup; + (name: string): DiffieHellmanGroup; + readonly prototype: DiffieHellmanGroup; + } + type DiffieHellmanGroup = Omit; + function getDiffieHellman(groupName: string): DiffieHellmanGroup; + /** + * An alias for {@link getDiffieHellman} + * @since v0.9.3 + */ + function createDiffieHellmanGroup(name: string): DiffieHellmanGroup; + function pbkdf2( + password: BinaryLike, + salt: BinaryLike, + iterations: number, + keylen: number, + digest: string, + callback: (err: Error | null, derivedKey: Buffer) => any, + ): void; + function pbkdf2Sync( + password: BinaryLike, + salt: BinaryLike, + iterations: number, + keylen: number, + digest: string, + ): Buffer; + + function randomBytes(size: number): Buffer; + function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + function pseudoRandomBytes(size: number): Buffer; + function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void; + + function randomInt(max: number): number; + function randomInt(min: number, max: number): number; + function randomInt(max: number, callback: (err: Error | null, value: number) => void): void; + function randomInt(min: number, max: number, callback: (err: Error | null, value: number) => void): void; + + function randomFillSync(buffer: T, offset?: number, size?: number): T; + function randomFill( + buffer: T, + callback: (err: Error | null, buf: T) => void, + ): void; + function randomFill( + buffer: T, + offset: number, + callback: (err: Error | null, buf: T) => void, + ): void; + function randomFill( + buffer: T, + offset: number, + size: number, + callback: (err: Error | null, buf: T) => void, + ): void; + + interface RandomUUIDOptions { + /** + * By default, to improve performance, + * Node.js will pre-emptively generate and persistently cache enough + * random data to generate up to 128 random UUIDs. To generate a UUID + * without using the cache, set `disableEntropyCache` to `true`. + * + * @default `false` + */ + disableEntropyCache?: boolean | undefined; + } + + function randomUUID(options?: RandomUUIDOptions): string; + + interface ScryptOptions { + cost?: number | undefined; + blockSize?: number | undefined; + parallelization?: number | undefined; + N?: number | undefined; + r?: number | undefined; + p?: number | undefined; + maxmem?: number | undefined; + } + function scrypt( + password: BinaryLike, + salt: BinaryLike, + keylen: number, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + function scrypt( + password: BinaryLike, + salt: BinaryLike, + keylen: number, + options: ScryptOptions, + callback: (err: Error | null, derivedKey: Buffer) => void, + ): void; + function scryptSync(password: BinaryLike, salt: BinaryLike, keylen: number, options?: ScryptOptions): Buffer; + + interface RsaPublicKey { + key: KeyLike; + padding?: number | undefined; + } + interface RsaPrivateKey { + key: KeyLike; + passphrase?: string | undefined; + /** + * @default 'sha1' + */ + oaepHash?: string | undefined; + oaepLabel?: NodeJS.TypedArray | undefined; + padding?: number | undefined; + } + function publicEncrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + function publicDecrypt(key: RsaPublicKey | RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + function privateDecrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + function privateEncrypt(private_key: RsaPrivateKey | KeyLike, buffer: NodeJS.ArrayBufferView): Buffer; + function getCiphers(): string[]; + function getCurves(): string[]; + function getFips(): 1 | 0; + /** + * Enables the FIPS compliant crypto provider in a FIPS-enabled Node.js build. Throws an error if FIPS mode is not available. + * @since v10.0.0 + * @param bool `true` to enable FIPS mode. + */ + function setFips(bool: boolean): void; + function getHashes(): string[]; + class ECDH { + private constructor(); + static convertKey( + key: BinaryLike, + curve: string, + inputEncoding?: BinaryToTextEncoding, + outputEncoding?: "latin1" | "hex" | "base64" | "base64url", + format?: "uncompressed" | "compressed" | "hybrid", + ): Buffer | string; + generateKeys(): Buffer; + generateKeys(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + computeSecret(other_public_key: NodeJS.ArrayBufferView): Buffer; + computeSecret(other_public_key: string, input_encoding: BinaryToTextEncoding): Buffer; + computeSecret(other_public_key: NodeJS.ArrayBufferView, output_encoding: BinaryToTextEncoding): string; + computeSecret( + other_public_key: string, + input_encoding: BinaryToTextEncoding, + output_encoding: BinaryToTextEncoding, + ): string; + getPrivateKey(): Buffer; + getPrivateKey(encoding: BinaryToTextEncoding): string; + getPublicKey(): Buffer; + getPublicKey(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; + setPrivateKey(private_key: NodeJS.ArrayBufferView): void; + setPrivateKey(private_key: string, encoding: BinaryToTextEncoding): void; + } + function createECDH(curve_name: string): ECDH; + function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean; + /** @deprecated since v10.0.0 */ + const DEFAULT_ENCODING: BufferEncoding; + + type KeyType = "rsa" | "dsa" | "ec" | "ed25519" | "ed448" | "x25519" | "x448"; + type KeyFormat = "pem" | "der"; + + interface BasePrivateKeyEncodingOptions { + format: T; + cipher?: string | undefined; + passphrase?: string | undefined; + } + + interface KeyPairKeyObjectResult { + publicKey: KeyObject; + privateKey: KeyObject; + } + + interface ED25519KeyPairKeyObjectOptions { + /** + * No options. + */ + } + + interface ED448KeyPairKeyObjectOptions { + /** + * No options. + */ + } + + interface X25519KeyPairKeyObjectOptions { + /** + * No options. + */ + } + + interface X448KeyPairKeyObjectOptions { + /** + * No options. + */ + } + + interface ECKeyPairKeyObjectOptions { + /** + * Name of the curve to use. + */ + namedCurve: string; + } + + interface RSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + + /** + * @default 0x10001 + */ + publicExponent?: number | undefined; + } + + interface DSAKeyPairKeyObjectOptions { + /** + * Key size in bits + */ + modulusLength: number; + + /** + * Size of q in bits + */ + divisorLength: number; + } + + interface RSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * @default 0x10001 + */ + publicExponent?: number | undefined; + + publicKeyEncoding: { + type: "pkcs1" | "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs1" | "pkcs8"; + }; + } + + interface DSAKeyPairOptions { + /** + * Key size in bits + */ + modulusLength: number; + /** + * Size of q in bits + */ + divisorLength: number; + + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface ECKeyPairOptions { + /** + * Name of the curve to use. + */ + namedCurve: string; + + publicKeyEncoding: { + type: "pkcs1" | "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "sec1" | "pkcs8"; + }; + } + + interface ED25519KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface ED448KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface X25519KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface X448KeyPairOptions { + publicKeyEncoding: { + type: "spki"; + format: PubF; + }; + privateKeyEncoding: BasePrivateKeyEncodingOptions & { + type: "pkcs8"; + }; + } + + interface KeyPairSyncResult { + publicKey: T1; + privateKey: T2; + } + + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "rsa", options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "dsa", options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ec", options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ed25519", options?: ED25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "ed448", options?: ED448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "x25519", options?: X25519KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + ): KeyPairSyncResult; + function generateKeyPairSync( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + ): KeyPairSyncResult; + function generateKeyPairSync(type: "x448", options?: X448KeyPairKeyObjectOptions): KeyPairKeyObjectResult; + + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "rsa", + options: RSAKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "dsa", + options: DSAKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ec", + options: ECKeyPairKeyObjectOptions, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed25519", + options: ED25519KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "ed448", + options: ED448KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x25519", + options: X25519KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + callback: (err: Error | null, publicKey: string, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void, + ): void; + function generateKeyPair( + type: "x448", + options: X448KeyPairKeyObjectOptions | undefined, + callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void, + ): void; + + namespace generateKeyPair { + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "rsa", + options: RSAKeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "rsa", options: RSAKeyPairKeyObjectOptions): Promise; + + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "dsa", + options: DSAKeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "dsa", options: DSAKeyPairKeyObjectOptions): Promise; + + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "ec", + options: ECKeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "ec", options: ECKeyPairKeyObjectOptions): Promise; + + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "ed25519", + options: ED25519KeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__( + type: "ed25519", + options?: ED25519KeyPairKeyObjectOptions, + ): Promise; + + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "ed448", + options: ED448KeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "ed448", options?: ED448KeyPairKeyObjectOptions): Promise; + + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "x25519", + options: X25519KeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__( + type: "x25519", + options?: X25519KeyPairKeyObjectOptions, + ): Promise; + + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"pem", "pem">, + ): Promise<{ publicKey: string; privateKey: string }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"pem", "der">, + ): Promise<{ publicKey: string; privateKey: Buffer }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"der", "pem">, + ): Promise<{ publicKey: Buffer; privateKey: string }>; + function __promisify__( + type: "x448", + options: X448KeyPairOptions<"der", "der">, + ): Promise<{ publicKey: Buffer; privateKey: Buffer }>; + function __promisify__(type: "x448", options?: X448KeyPairKeyObjectOptions): Promise; + } + + /** + * Calculates and returns the signature for `data` using the given private key and + * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is + * dependent upon the key type (especially Ed25519 and Ed448). + * + * If `key` is not a [`KeyObject`][], this function behaves as if `key` had been + * passed to [`crypto.createPrivateKey()`][]. + */ + function sign( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput, + ): Buffer; + + /** + * Calculates and returns the signature for `data` using the given private key and + * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is + * dependent upon the key type (especially Ed25519 and Ed448). + * + * If `key` is not a [`KeyObject`][], this function behaves as if `key` had been + * passed to [`crypto.createPublicKey()`][]. + */ + function verify( + algorithm: string | null | undefined, + data: NodeJS.ArrayBufferView, + key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput, + signature: NodeJS.ArrayBufferView, + ): boolean; + + /** + * Computes the Diffie-Hellman secret based on a privateKey and a publicKey. + * Both keys must have the same asymmetricKeyType, which must be one of + * 'dh' (for Diffie-Hellman), 'ec' (for ECDH), 'x448', or 'x25519' (for ECDH-ES). + */ + function diffieHellman(options: { privateKey: KeyObject; publicKey: KeyObject }): Buffer; + /** + * Load and set the `engine` for some or all OpenSSL functions (selected by flags). + * + * `engine` could be either an id or a path to the engine's shared library. + * + * The optional `flags` argument uses `ENGINE_METHOD_ALL` by default. + * The `flags` is a bit field taking one of or a mix of the following flags (defined in `crypto.constants`): + * + * - `crypto.constants.ENGINE_METHOD_RSA` + * - `crypto.constants.ENGINE_METHOD_DSA` + * - `crypto.constants.ENGINE_METHOD_DH` + * - `crypto.constants.ENGINE_METHOD_RAND` + * - `crypto.constants.ENGINE_METHOD_EC` + * - `crypto.constants.ENGINE_METHOD_CIPHERS` + * - `crypto.constants.ENGINE_METHOD_DIGESTS` + * - `crypto.constants.ENGINE_METHOD_PKEY_METHS` + * - `crypto.constants.ENGINE_METHOD_PKEY_ASN1_METHS` + * - `crypto.constants.ENGINE_METHOD_ALL` + * - `crypto.constants.ENGINE_METHOD_NONE` + * + * The flags below are deprecated in OpenSSL-1.1.0. + * + * - `crypto.constants.ENGINE_METHOD_ECDH` + * - `crypto.constants.ENGINE_METHOD_ECDSA` + * - `crypto.constants.ENGINE_METHOD_STORE` + * @since v0.11.11 + * @param [flags=crypto.constants.ENGINE_METHOD_ALL] + */ + function setEngine(engine: string, flags?: number): void; +} +declare module "node:crypto" { + export * from "crypto"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/dgram.d.ts b/node_backend/node_modules/@types/node/ts4.8/dgram.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4e190b14ba4cac1420e424edc1dc20daefe4c39d --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/dgram.d.ts @@ -0,0 +1,180 @@ +declare module "dgram" { + import { AddressInfo } from "net"; + import * as dns from "dns"; + import EventEmitter = require("events"); + + interface RemoteInfo { + address: string; + family: "IPv4" | "IPv6"; + port: number; + size: number; + } + + interface BindOptions { + port?: number | undefined; + address?: string | undefined; + exclusive?: boolean | undefined; + fd?: number | undefined; + } + + type SocketType = "udp4" | "udp6"; + + interface SocketOptions { + type: SocketType; + reuseAddr?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + recvBufferSize?: number | undefined; + sendBufferSize?: number | undefined; + lookup?: + | (( + hostname: string, + options: dns.LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ) => void) + | undefined; + } + + function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + + class Socket extends EventEmitter { + addMembership(multicastAddress: string, multicastInterface?: string): void; + address(): AddressInfo; + bind(port?: number, address?: string, callback?: () => void): this; + bind(port?: number, callback?: () => void): this; + bind(callback?: () => void): this; + bind(options: BindOptions, callback?: () => void): this; + close(callback?: () => void): this; + connect(port: number, address?: string, callback?: () => void): void; + connect(port: number, callback: () => void): void; + disconnect(): void; + dropMembership(multicastAddress: string, multicastInterface?: string): void; + getRecvBufferSize(): number; + getSendBufferSize(): number; + ref(): this; + remoteAddress(): AddressInfo; + send( + msg: string | Uint8Array | ReadonlyArray, + port?: number, + address?: string, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array | ReadonlyArray, + port?: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array | ReadonlyArray, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + port?: number, + address?: string, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + port?: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + send( + msg: string | Uint8Array, + offset: number, + length: number, + callback?: (error: Error | null, bytes: number) => void, + ): void; + setBroadcast(flag: boolean): void; + setMulticastInterface(multicastInterface: string): void; + setMulticastLoopback(flag: boolean): boolean; + setMulticastTTL(ttl: number): number; + setRecvBufferSize(size: number): void; + setSendBufferSize(size: number): void; + setTTL(ttl: number): number; + unref(): this; + /** + * Tells the kernel to join a source-specific multicast channel at the given + * `sourceAddress` and `groupAddress`, using the `multicastInterface` with the + * `IP_ADD_SOURCE_MEMBERSHIP` socket option. + * If the `multicastInterface` argument + * is not specified, the operating system will choose one interface and will add + * membership to it. + * To add membership to every available interface, call + * `socket.addSourceSpecificMembership()` multiple times, once per interface. + */ + addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + + /** + * Instructs the kernel to leave a source-specific multicast channel at the given + * `sourceAddress` and `groupAddress` using the `IP_DROP_SOURCE_MEMBERSHIP` + * socket option. This method is automatically called by the kernel when the + * socket is closed or the process terminates, so most apps will never have + * reason to call this. + * + * If `multicastInterface` is not specified, the operating system will attempt to + * drop membership on all valid interfaces. + */ + dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; + + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. error + * 4. listening + * 5. message + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connect"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "message", msg: Buffer, rinfo: RemoteInfo): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connect", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connect", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this; + } +} +declare module "node:dgram" { + export * from "dgram"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/dns.d.ts b/node_backend/node_modules/@types/node/ts4.8/dns.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..cbae237c24397bc9647f55c12de1dc59b371fe50 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/dns.d.ts @@ -0,0 +1,516 @@ +declare module "dns" { + // Supported getaddrinfo flags. + const ADDRCONFIG: number; + const V4MAPPED: number; + /** + * If `dns.V4MAPPED` is specified, return resolved IPv6 addresses as + * well as IPv4 mapped IPv6 addresses. + */ + const ALL: number; + + interface LookupOptions { + family?: number | undefined; + hints?: number | undefined; + all?: boolean | undefined; + verbatim?: boolean | undefined; + } + + interface LookupOneOptions extends LookupOptions { + all?: false | undefined; + } + + interface LookupAllOptions extends LookupOptions { + all: true; + } + + interface LookupAddress { + address: string; + family: number; + } + + function lookup( + hostname: string, + family: number, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + function lookup( + hostname: string, + options: LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + function lookup( + hostname: string, + options: LookupAllOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void, + ): void; + function lookup( + hostname: string, + options: LookupOptions, + callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void, + ): void; + function lookup( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace lookup { + function __promisify__(hostname: string, options: LookupAllOptions): Promise; + function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise; + function __promisify__(hostname: string, options: LookupOptions): Promise; + } + + function lookupService( + address: string, + port: number, + callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void, + ): void; + + namespace lookupService { + function __promisify__(address: string, port: number): Promise<{ hostname: string; service: string }>; + } + + interface ResolveOptions { + ttl: boolean; + } + + interface ResolveWithTtlOptions extends ResolveOptions { + ttl: true; + } + + interface RecordWithTtl { + address: string; + ttl: number; + } + + /** @deprecated Use `AnyARecord` or `AnyAaaaRecord` instead. */ + type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord; + + interface AnyARecord extends RecordWithTtl { + type: "A"; + } + + interface AnyAaaaRecord extends RecordWithTtl { + type: "AAAA"; + } + + interface MxRecord { + priority: number; + exchange: string; + } + + interface AnyMxRecord extends MxRecord { + type: "MX"; + } + + interface NaptrRecord { + flags: string; + service: string; + regexp: string; + replacement: string; + order: number; + preference: number; + } + + interface AnyNaptrRecord extends NaptrRecord { + type: "NAPTR"; + } + + interface SoaRecord { + nsname: string; + hostmaster: string; + serial: number; + refresh: number; + retry: number; + expire: number; + minttl: number; + } + + interface AnySoaRecord extends SoaRecord { + type: "SOA"; + } + + interface SrvRecord { + priority: number; + weight: number; + port: number; + name: string; + } + + interface AnySrvRecord extends SrvRecord { + type: "SRV"; + } + + interface AnyTxtRecord { + type: "TXT"; + entries: string[]; + } + + interface AnyNsRecord { + type: "NS"; + value: string; + } + + interface AnyPtrRecord { + type: "PTR"; + value: string; + } + + interface AnyCnameRecord { + type: "CNAME"; + value: string; + } + + type AnyRecord = + | AnyARecord + | AnyAaaaRecord + | AnyCnameRecord + | AnyMxRecord + | AnyNaptrRecord + | AnyNsRecord + | AnyPtrRecord + | AnySoaRecord + | AnySrvRecord + | AnyTxtRecord; + + function resolve( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "A", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "AAAA", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "ANY", + callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "CNAME", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "MX", + callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "NAPTR", + callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "NS", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "PTR", + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "SOA", + callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void, + ): void; + function resolve( + hostname: string, + rrtype: "SRV", + callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, + ): void; + function resolve( + hostname: string, + rrtype: "TXT", + callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, + ): void; + function resolve( + hostname: string, + rrtype: string, + callback: ( + err: NodeJS.ErrnoException | null, + addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[], + ) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace resolve { + function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise; + function __promisify__(hostname: string, rrtype: "ANY"): Promise; + function __promisify__(hostname: string, rrtype: "MX"): Promise; + function __promisify__(hostname: string, rrtype: "NAPTR"): Promise; + function __promisify__(hostname: string, rrtype: "SOA"): Promise; + function __promisify__(hostname: string, rrtype: "SRV"): Promise; + function __promisify__(hostname: string, rrtype: "TXT"): Promise; + function __promisify__( + hostname: string, + rrtype: string, + ): Promise; + } + + function resolve4( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve4( + hostname: string, + options: ResolveWithTtlOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, + ): void; + function resolve4( + hostname: string, + options: ResolveOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace resolve4 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + + function resolve6( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + function resolve6( + hostname: string, + options: ResolveWithTtlOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, + ): void; + function resolve6( + hostname: string, + options: ResolveOptions, + callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace resolve6 { + function __promisify__(hostname: string): Promise; + function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; + function __promisify__(hostname: string, options?: ResolveOptions): Promise; + } + + function resolveCname( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + namespace resolveCname { + function __promisify__(hostname: string): Promise; + } + + function resolveMx( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, + ): void; + namespace resolveMx { + function __promisify__(hostname: string): Promise; + } + + function resolveNaptr( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, + ): void; + namespace resolveNaptr { + function __promisify__(hostname: string): Promise; + } + + function resolveNs( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + namespace resolveNs { + function __promisify__(hostname: string): Promise; + } + + function resolvePtr( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, + ): void; + namespace resolvePtr { + function __promisify__(hostname: string): Promise; + } + + function resolveSoa( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void, + ): void; + namespace resolveSoa { + function __promisify__(hostname: string): Promise; + } + + function resolveSrv( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, + ): void; + namespace resolveSrv { + function __promisify__(hostname: string): Promise; + } + + function resolveTxt( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, + ): void; + namespace resolveTxt { + function __promisify__(hostname: string): Promise; + } + + function resolveAny( + hostname: string, + callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, + ): void; + namespace resolveAny { + function __promisify__(hostname: string): Promise; + } + + function reverse(ip: string, callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void): void; + function setServers(servers: ReadonlyArray): void; + function getServers(): string[]; + + function setDefaultResultOrder(order: "ipv4first" | "verbatim"): void; + + // Error codes + const NODATA: string; + const FORMERR: string; + const SERVFAIL: string; + const NOTFOUND: string; + const NOTIMP: string; + const REFUSED: string; + const BADQUERY: string; + const BADNAME: string; + const BADFAMILY: string; + const BADRESP: string; + const CONNREFUSED: string; + const TIMEOUT: string; + const EOF: string; + const FILE: string; + const NOMEM: string; + const DESTRUCTION: string; + const BADSTR: string; + const BADFLAGS: string; + const NONAME: string; + const BADHINTS: string; + const NOTINITIALIZED: string; + const LOADIPHLPAPI: string; + const ADDRGETNETWORKPARAMS: string; + const CANCELLED: string; + + interface ResolverOptions { + timeout?: number | undefined; + } + + class Resolver { + constructor(options?: ResolverOptions); + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } + + namespace promises { + function getServers(): string[]; + + function lookup(hostname: string, family: number): Promise; + function lookup(hostname: string, options: LookupOneOptions): Promise; + function lookup(hostname: string, options: LookupAllOptions): Promise; + function lookup(hostname: string, options: LookupOptions): Promise; + function lookup(hostname: string): Promise; + + function lookupService(address: string, port: number): Promise<{ hostname: string; service: string }>; + + function resolve(hostname: string): Promise; + function resolve(hostname: string, rrtype: "A"): Promise; + function resolve(hostname: string, rrtype: "AAAA"): Promise; + function resolve(hostname: string, rrtype: "ANY"): Promise; + function resolve(hostname: string, rrtype: "CNAME"): Promise; + function resolve(hostname: string, rrtype: "MX"): Promise; + function resolve(hostname: string, rrtype: "NAPTR"): Promise; + function resolve(hostname: string, rrtype: "NS"): Promise; + function resolve(hostname: string, rrtype: "PTR"): Promise; + function resolve(hostname: string, rrtype: "SOA"): Promise; + function resolve(hostname: string, rrtype: "SRV"): Promise; + function resolve(hostname: string, rrtype: "TXT"): Promise; + function resolve( + hostname: string, + rrtype: string, + ): Promise; + + function resolve4(hostname: string): Promise; + function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve4(hostname: string, options: ResolveOptions): Promise; + + function resolve6(hostname: string): Promise; + function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise; + function resolve6(hostname: string, options: ResolveOptions): Promise; + + function resolveAny(hostname: string): Promise; + + function resolveCname(hostname: string): Promise; + + function resolveMx(hostname: string): Promise; + + function resolveNaptr(hostname: string): Promise; + + function resolveNs(hostname: string): Promise; + + function resolvePtr(hostname: string): Promise; + + function resolveSoa(hostname: string): Promise; + + function resolveSrv(hostname: string): Promise; + + function resolveTxt(hostname: string): Promise; + + function reverse(ip: string): Promise; + + function setServers(servers: ReadonlyArray): void; + + function setDefaultResultOrder(order: "ipv4first" | "verbatim"): void; + + class Resolver { + constructor(options?: ResolverOptions); + cancel(): void; + getServers: typeof getServers; + resolve: typeof resolve; + resolve4: typeof resolve4; + resolve6: typeof resolve6; + resolveAny: typeof resolveAny; + resolveCname: typeof resolveCname; + resolveMx: typeof resolveMx; + resolveNaptr: typeof resolveNaptr; + resolveNs: typeof resolveNs; + resolvePtr: typeof resolvePtr; + resolveSoa: typeof resolveSoa; + resolveSrv: typeof resolveSrv; + resolveTxt: typeof resolveTxt; + reverse: typeof reverse; + setLocalAddress(ipv4?: string, ipv6?: string): void; + setServers: typeof setServers; + } + } +} +declare module "node:dns" { + export * from "dns"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/domain.d.ts b/node_backend/node_modules/@types/node/ts4.8/domain.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7168f63efc0addd8df71fb3f205755755ea44d47 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/domain.d.ts @@ -0,0 +1,27 @@ +declare module "domain" { + import EventEmitter = require("events"); + + global { + namespace NodeJS { + interface Domain extends EventEmitter { + run(fn: (...args: any[]) => T, ...args: any[]): T; + add(emitter: EventEmitter | Timer): void; + remove(emitter: EventEmitter | Timer): void; + bind(cb: T): T; + intercept(cb: T): T; + } + } + } + + interface Domain extends NodeJS.Domain {} + class Domain extends EventEmitter { + members: Array; + enter(): void; + exit(): void; + } + + function create(): Domain; +} +declare module "node:domain" { + export * from "domain"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/events.d.ts b/node_backend/node_modules/@types/node/ts4.8/events.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9037dce28745e40a40825d8ff9ff4296cca1e23c --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/events.d.ts @@ -0,0 +1,82 @@ +declare module "events" { + interface EventEmitterOptions { + /** + * Enables automatic capturing of promise rejection. + */ + captureRejections?: boolean | undefined; + } + + interface NodeEventTarget { + once(event: string | symbol, listener: (...args: any[]) => void): this; + } + + interface DOMEventTarget { + addEventListener(event: string, listener: (...args: any[]) => void, opts?: { once: boolean }): any; + } + + interface EventEmitter extends NodeJS.EventEmitter {} + class EventEmitter { + constructor(options?: EventEmitterOptions); + + static once(emitter: NodeEventTarget, event: string | symbol): Promise; + static once(emitter: DOMEventTarget, event: string): Promise; + static on(emitter: NodeJS.EventEmitter, event: string): AsyncIterableIterator; + + /** @deprecated since v4.0.0 */ + static listenerCount(emitter: NodeJS.EventEmitter, event: string | symbol): number; + + /** + * This symbol shall be used to install a listener for only monitoring `'error'` + * events. Listeners installed using this symbol are called before the regular + * `'error'` listeners are called. + * + * Installing a listener using this symbol does not change the behavior once an + * `'error'` event is emitted, therefore the process will still crash if no + * regular `'error'` listener is installed. + */ + static readonly errorMonitor: unique symbol; + static readonly captureRejectionSymbol: unique symbol; + + /** + * Sets or gets the default captureRejection value for all emitters. + */ + // TODO: These should be described using static getter/setter pairs: + static captureRejections: boolean; + static defaultMaxListeners: number; + } + + import internal = require("events"); + namespace EventEmitter { + // Should just be `export { EventEmitter }`, but that doesn't work in TypeScript 3.4 + export { internal as EventEmitter }; + } + + global { + namespace NodeJS { + interface EventEmitter { + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + off(event: string | symbol, listener: (...args: any[]) => void): this; + removeAllListeners(event?: string | symbol): this; + setMaxListeners(n: number): this; + getMaxListeners(): number; + listeners(event: string | symbol): Function[]; + rawListeners(event: string | symbol): Function[]; + emit(event: string | symbol, ...args: any[]): boolean; + listenerCount(event: string | symbol): number; + // Added in Node 6... + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + eventNames(): Array; + } + } + } + + export = EventEmitter; +} +declare module "node:events" { + import events = require("events"); + export = events; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/fs.d.ts b/node_backend/node_modules/@types/node/ts4.8/fs.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5824dd7895a635900dbe81cf01822948dee07a2c --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/fs.d.ts @@ -0,0 +1,2587 @@ +declare module "fs" { + import * as stream from "stream"; + import EventEmitter = require("events"); + import { URL } from "url"; + import * as promises from "fs/promises"; + + export { promises }; + /** + * Valid types for path values in "fs". + */ + export type PathLike = string | Buffer | URL; + + export type NoParamCallback = (err: NodeJS.ErrnoException | null) => void; + + export type BufferEncodingOption = "buffer" | { encoding: "buffer" }; + + export interface BaseEncodingOptions { + encoding?: BufferEncoding | null | undefined; + } + + export type OpenMode = number | string; + + export type Mode = number | string; + + export interface StatsBase { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + + dev: T; + ino: T; + mode: T; + nlink: T; + uid: T; + gid: T; + rdev: T; + size: T; + blksize: T; + blocks: T; + atimeMs: T; + mtimeMs: T; + ctimeMs: T; + birthtimeMs: T; + atime: Date; + mtime: Date; + ctime: Date; + birthtime: Date; + } + + export interface Stats extends StatsBase { + } + + export class Stats { + } + + export class Dirent { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + name: string; + } + + /** + * A class representing a directory stream. + */ + export class Dir { + readonly path: string; + + /** + * Asynchronously iterates over the directory via `readdir(3)` until all entries have been read. + */ + [Symbol.asyncIterator](): AsyncIterableIterator; + + /** + * Asynchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + */ + close(): Promise; + close(cb: NoParamCallback): void; + + /** + * Synchronously close the directory's underlying resource handle. + * Subsequent reads will result in errors. + */ + closeSync(): void; + + /** + * Asynchronously read the next directory entry via `readdir(3)` as an `Dirent`. + * After the read is completed, a value is returned that will be resolved with an `Dirent`, or `null` if there are no more directory entries to read. + * Directory entries returned by this function are in no particular order as provided by the operating system's underlying directory mechanisms. + */ + read(): Promise; + read(cb: (err: NodeJS.ErrnoException | null, dirEnt: Dirent | null) => void): void; + + /** + * Synchronously read the next directory entry via `readdir(3)` as a `Dirent`. + * If there are no more directory entries to read, null will be returned. + * Directory entries returned by this function are in no particular order as provided by the operating system's underlying directory mechanisms. + */ + readSync(): Dirent | null; + } + + export interface FSWatcher extends EventEmitter { + close(): void; + + /** + * events.EventEmitter + * 1. change + * 2. error + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "close", listener: () => void): this; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "close", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "close", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "close", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + } + + export class ReadStream extends stream.Readable { + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + bytesRead: number; + path: string | Buffer; + pending: boolean; + + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "open", listener: (fd: number) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "open", listener: (fd: number) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "ready", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "open", listener: (fd: number) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "ready", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "open", listener: (fd: number) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "open", listener: (fd: number) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export class WriteStream extends stream.Writable { + close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; + bytesWritten: number; + path: string | Buffer; + pending: boolean; + + /** + * events.EventEmitter + * 1. open + * 2. close + * 3. ready + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "open", listener: (fd: number) => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "open", listener: (fd: number) => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "ready", listener: () => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "open", listener: (fd: number) => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "ready", listener: () => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "open", listener: (fd: number) => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "open", listener: (fd: number) => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + /** + * Asynchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace rename { + /** + * Asynchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(oldPath: PathLike, newPath: PathLike): Promise; + } + + /** + * Synchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function renameSync(oldPath: PathLike, newPath: PathLike): void; + + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + export function truncate(path: PathLike, len: number | undefined | null, callback: NoParamCallback): void; + + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function truncate(path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace truncate { + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(path: PathLike, len?: number | null): Promise; + } + + /** + * Synchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + export function truncateSync(path: PathLike, len?: number | null): void; + + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + * @param len If not specified, defaults to `0`. + */ + export function ftruncate(fd: number, len: number | undefined | null, callback: NoParamCallback): void; + + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + */ + export function ftruncate(fd: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace ftruncate { + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + * @param len If not specified, defaults to `0`. + */ + function __promisify__(fd: number, len?: number | null): Promise; + } + + /** + * Synchronous ftruncate(2) - Truncate a file to a specified length. + * @param fd A file descriptor. + * @param len If not specified, defaults to `0`. + */ + export function ftruncateSync(fd: number, len?: number | null): void; + + /** + * Asynchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace chown { + /** + * Asynchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + + /** + * Synchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function chownSync(path: PathLike, uid: number, gid: number): void; + + /** + * Asynchronous fchown(2) - Change ownership of a file. + * @param fd A file descriptor. + */ + export function fchown(fd: number, uid: number, gid: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fchown { + /** + * Asynchronous fchown(2) - Change ownership of a file. + * @param fd A file descriptor. + */ + function __promisify__(fd: number, uid: number, gid: number): Promise; + } + + /** + * Synchronous fchown(2) - Change ownership of a file. + * @param fd A file descriptor. + */ + export function fchownSync(fd: number, uid: number, gid: number): void; + + /** + * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace lchown { + /** + * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, uid: number, gid: number): Promise; + } + + /** + * Synchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function lchownSync(path: PathLike, uid: number, gid: number): void; + + /** + * Changes the access and modification times of a file in the same way as `fs.utimes()`, + * with the difference that if the path refers to a symbolic link, then the link is not + * dereferenced: instead, the timestamps of the symbolic link itself are changed. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function lutimes( + path: PathLike, + atime: string | number | Date, + mtime: string | number | Date, + callback: NoParamCallback, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace lutimes { + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, + * with the difference that if the path refers to a symbolic link, then the link is not + * dereferenced: instead, the timestamps of the symbolic link itself are changed. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__( + path: PathLike, + atime: string | number | Date, + mtime: string | number | Date, + ): Promise; + } + + /** + * Change the file system timestamps of the symbolic link referenced by `path`. Returns `undefined`, + * or throws an exception when parameters are incorrect or the operation fails. + * This is the synchronous version of `fs.lutimes()`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function lutimesSync(path: PathLike, atime: string | number | Date, mtime: string | number | Date): void; + + /** + * Asynchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace chmod { + /** + * Asynchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + + /** + * Synchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function chmodSync(path: PathLike, mode: Mode): void; + + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param fd A file descriptor. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function fchmod(fd: number, mode: Mode, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fchmod { + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param fd A file descriptor. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(fd: number, mode: Mode): Promise; + } + + /** + * Synchronous fchmod(2) - Change permissions of a file. + * @param fd A file descriptor. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function fchmodSync(fd: number, mode: Mode): void; + + /** + * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace lchmod { + /** + * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function __promisify__(path: PathLike, mode: Mode): Promise; + } + + /** + * Synchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + export function lchmodSync(path: PathLike, mode: Mode): void; + + /** + * Asynchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function stat( + path: PathLike, + options: StatOptions & { bigint?: false | undefined } | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function stat( + path: PathLike, + options: StatOptions & { bigint: true }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function stat( + path: PathLike, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace stat { + /** + * Asynchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, options?: StatOptions & { bigint?: false | undefined }): Promise; + function __promisify__(path: PathLike, options: StatOptions & { bigint: true }): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + + /** + * Synchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function statSync(path: PathLike, options?: StatOptions & { bigint?: false | undefined }): Stats; + export function statSync(path: PathLike, options: StatOptions & { bigint: true }): BigIntStats; + export function statSync(path: PathLike, options?: StatOptions): Stats | BigIntStats; + + /** + * Asynchronous fstat(2) - Get file status. + * @param fd A file descriptor. + */ + export function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function fstat( + fd: number, + options: StatOptions & { bigint?: false | undefined } | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function fstat( + fd: number, + options: StatOptions & { bigint: true }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function fstat( + fd: number, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fstat { + /** + * Asynchronous fstat(2) - Get file status. + * @param fd A file descriptor. + */ + function __promisify__(fd: number, options?: StatOptions & { bigint?: false | undefined }): Promise; + function __promisify__(fd: number, options: StatOptions & { bigint: true }): Promise; + function __promisify__(fd: number, options?: StatOptions): Promise; + } + + /** + * Synchronous fstat(2) - Get file status. + * @param fd A file descriptor. + */ + export function fstatSync(fd: number, options?: StatOptions & { bigint?: false | undefined }): Stats; + export function fstatSync(fd: number, options: StatOptions & { bigint: true }): BigIntStats; + export function fstatSync(fd: number, options?: StatOptions): Stats | BigIntStats; + + /** + * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; + export function lstat( + path: PathLike, + options: StatOptions & { bigint?: false | undefined } | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, + ): void; + export function lstat( + path: PathLike, + options: StatOptions & { bigint: true }, + callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, + ): void; + export function lstat( + path: PathLike, + options: StatOptions | undefined, + callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace lstat { + /** + * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, options?: StatOptions & { bigint?: false | undefined }): Promise; + function __promisify__(path: PathLike, options: StatOptions & { bigint: true }): Promise; + function __promisify__(path: PathLike, options?: StatOptions): Promise; + } + + /** + * Synchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function lstatSync(path: PathLike, options?: StatOptions & { bigint?: false | undefined }): Stats; + export function lstatSync(path: PathLike, options: StatOptions & { bigint: true }): BigIntStats; + export function lstatSync(path: PathLike, options?: StatOptions): Stats | BigIntStats; + + /** + * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace link { + /** + * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(existingPath: PathLike, newPath: PathLike): Promise; + } + + /** + * Synchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function linkSync(existingPath: PathLike, newPath: PathLike): void; + + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + export function symlink( + target: PathLike, + path: PathLike, + type: symlink.Type | undefined | null, + callback: NoParamCallback, + ): void; + + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + */ + export function symlink(target: PathLike, path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace symlink { + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise; + + type Type = "dir" | "file" | "junction"; + } + + /** + * Synchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + export function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: BaseEncodingOptions | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, + ): void; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, linkString: Buffer) => void, + ): void; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlink( + path: PathLike, + options: BaseEncodingOptions | string | undefined | null, + callback: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void, + ): void; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readlink( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace readlink { + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: BaseEncodingOptions | string | null): Promise; + } + + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): string; + + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options: BufferEncodingOption): Buffer; + + /** + * Synchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readlinkSync(path: PathLike, options?: BaseEncodingOptions | string | null): string | Buffer; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: BaseEncodingOptions | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void, + ): void; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpath( + path: PathLike, + options: BaseEncodingOptions | string | undefined | null, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void, + ): void; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function realpath( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace realpath { + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(path: PathLike, options?: BaseEncodingOptions | string | null): Promise; + + function native( + path: PathLike, + options: BaseEncodingOptions | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + function native( + path: PathLike, + options: BufferEncodingOption, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void, + ): void; + function native( + path: PathLike, + options: BaseEncodingOptions | string | undefined | null, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void, + ): void; + function native( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, + ): void; + } + + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): string; + + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options: BufferEncodingOption): Buffer; + + /** + * Synchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function realpathSync(path: PathLike, options?: BaseEncodingOptions | string | null): string | Buffer; + + export namespace realpathSync { + function native(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): string; + function native(path: PathLike, options: BufferEncodingOption): Buffer; + function native(path: PathLike, options?: BaseEncodingOptions | string | null): string | Buffer; + } + + /** + * Asynchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function unlink(path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace unlink { + /** + * Asynchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike): Promise; + } + + /** + * Synchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function unlinkSync(path: PathLike): void; + + export interface RmDirOptions { + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * @deprecated since v14.14.0 In future versions of Node.js, + * `fs.rmdir(path, { recursive: true })` will throw on nonexistent + * paths, or when given a file as a target. + * Use `fs.rm(path, { recursive: true, force: true })` instead. + * + * If `true`, perform a recursive directory removal. In + * recursive mode, errors are not reported if `path` does not exist, and + * operations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + + /** + * Asynchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function rmdir(path: PathLike, callback: NoParamCallback): void; + export function rmdir(path: PathLike, options: RmDirOptions, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace rmdir { + /** + * Asynchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function __promisify__(path: PathLike, options?: RmDirOptions): Promise; + } + + /** + * Synchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function rmdirSync(path: PathLike, options?: RmDirOptions): void; + + export interface RmOptions { + /** + * When `true`, exceptions will be ignored if `path` does not exist. + * @default false + */ + force?: boolean | undefined; + /** + * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or + * `EPERM` error is encountered, Node.js will retry the operation with a linear + * backoff wait of `retryDelay` ms longer on each try. This option represents the + * number of retries. This option is ignored if the `recursive` option is not + * `true`. + * @default 0 + */ + maxRetries?: number | undefined; + /** + * If `true`, perform a recursive directory removal. In + * recursive mode, errors are not reported if `path` does not exist, and + * operations are retried on failure. + * @default false + */ + recursive?: boolean | undefined; + /** + * The amount of time in milliseconds to wait between retries. + * This option is ignored if the `recursive` option is not `true`. + * @default 100 + */ + retryDelay?: number | undefined; + } + + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + export function rm(path: PathLike, callback: NoParamCallback): void; + export function rm(path: PathLike, options: RmOptions, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace rm { + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + function __promisify__(path: PathLike, options?: RmOptions): Promise; + } + + /** + * Synchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + export function rmSync(path: PathLike, options?: RmOptions): void; + + export interface MakeDirectoryOptions { + /** + * Indicates whether parent folders should be created. + * If a folder was created, the path to the first created folder will be returned. + * @default false + */ + recursive?: boolean | undefined; + /** + * A file mode. If a string is passed, it is parsed as an octal integer. If not specified + * @default 0o777 + */ + mode?: Mode | undefined; + } + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: MakeDirectoryOptions & { recursive: true }, + callback: (err: NodeJS.ErrnoException | null, path?: string) => void, + ): void; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: Mode | (MakeDirectoryOptions & { recursive?: false | undefined }) | null | undefined, + callback: NoParamCallback, + ): void; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdir( + path: PathLike, + options: Mode | MakeDirectoryOptions | null | undefined, + callback: (err: NodeJS.ErrnoException | null, path?: string) => void, + ): void; + + /** + * Asynchronous mkdir(2) - create a directory with a mode of `0o777`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function mkdir(path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace mkdir { + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options: MakeDirectoryOptions & { recursive: true }, + ): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options?: Mode | (MakeDirectoryOptions & { recursive?: false | undefined }) | null, + ): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function __promisify__( + path: PathLike, + options?: Mode | MakeDirectoryOptions | null, + ): Promise; + } + + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync(path: PathLike, options: MakeDirectoryOptions & { recursive: true }): string | undefined; + + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync( + path: PathLike, + options?: Mode | (MakeDirectoryOptions & { recursive?: false | undefined }) | null, + ): void; + + /** + * Synchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + export function mkdirSync(path: PathLike, options?: Mode | MakeDirectoryOptions | null): string | undefined; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: BaseEncodingOptions | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, folder: string) => void, + ): void; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: "buffer" | { encoding: "buffer" }, + callback: (err: NodeJS.ErrnoException | null, folder: Buffer) => void, + ): void; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtemp( + prefix: string, + options: BaseEncodingOptions | string | undefined | null, + callback: (err: NodeJS.ErrnoException | null, folder: string | Buffer) => void, + ): void; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + */ + export function mkdtemp( + prefix: string, + callback: (err: NodeJS.ErrnoException | null, folder: string) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace mkdtemp { + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options: BufferEncodingOption): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__(prefix: string, options?: BaseEncodingOptions | string | null): Promise; + } + + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options?: BaseEncodingOptions | BufferEncoding | null): string; + + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options: BufferEncodingOption): Buffer; + + /** + * Synchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function mkdtempSync(prefix: string, options?: BaseEncodingOptions | string | null): string | Buffer; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: + | { encoding: BufferEncoding | null; withFileTypes?: false | undefined } + | BufferEncoding + | undefined + | null, + callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, + ): void; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: { encoding: "buffer"; withFileTypes?: false | undefined } | "buffer", + callback: (err: NodeJS.ErrnoException | null, files: Buffer[]) => void, + ): void; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdir( + path: PathLike, + options: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, files: string[] | Buffer[]) => void, + ): void; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function readdir( + path: PathLike, + callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, + ): void; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdir( + path: PathLike, + options: BaseEncodingOptions & { withFileTypes: true }, + callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace readdir { + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: { encoding: BufferEncoding | null; withFileTypes?: false | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options: "buffer" | { encoding: "buffer"; withFileTypes?: false | undefined }, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function __promisify__( + path: PathLike, + options?: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent + */ + function __promisify__( + path: PathLike, + options: BaseEncodingOptions & { withFileTypes: true }, + ): Promise; + } + + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options?: { encoding: BufferEncoding | null; withFileTypes?: false | undefined } | BufferEncoding | null, + ): string[]; + + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options: { encoding: "buffer"; withFileTypes?: false | undefined } | "buffer", + ): Buffer[]; + + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + export function readdirSync( + path: PathLike, + options?: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | null, + ): string[] | Buffer[]; + + /** + * Synchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + export function readdirSync(path: PathLike, options: BaseEncodingOptions & { withFileTypes: true }): Dirent[]; + + /** + * Asynchronous close(2) - close a file descriptor. + * @param fd A file descriptor. + */ + export function close(fd: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace close { + /** + * Asynchronous close(2) - close a file descriptor. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + + /** + * Synchronous close(2) - close a file descriptor. + * @param fd A file descriptor. + */ + export function closeSync(fd: number): void; + + /** + * Asynchronous open(2) - open and possibly create a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param [flags='r'] See `support of file system `flags``. + * @param [mode=0o666] + */ + export function open( + path: PathLike, + flags: OpenMode | undefined, + mode: Mode | undefined | null, + callback: (err: NodeJS.ErrnoException | null, fd: number) => void, + ): void; + + /** + * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param [flags='r'] See `support of file system `flags``. + */ + export function open( + path: PathLike, + flags: OpenMode | undefined, + callback: (err: NodeJS.ErrnoException | null, fd: number) => void, + ): void; + + /** + * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + export function open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace open { + /** + * Asynchronous open(2) - open and possibly create a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. + */ + function __promisify__(path: PathLike, flags: OpenMode, mode?: Mode | null): Promise; + } + + /** + * Synchronous open(2) - open and possibly create a file, returning a file descriptor.. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. + */ + export function openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number; + + /** + * Asynchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function utimes( + path: PathLike, + atime: string | number | Date, + mtime: string | number | Date, + callback: NoParamCallback, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace utimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__( + path: PathLike, + atime: string | number | Date, + mtime: string | number | Date, + ): Promise; + } + + /** + * Synchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function utimesSync(path: PathLike, atime: string | number | Date, mtime: string | number | Date): void; + + /** + * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function futimes( + fd: number, + atime: string | number | Date, + mtime: string | number | Date, + callback: NoParamCallback, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace futimes { + /** + * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function __promisify__(fd: number, atime: string | number | Date, mtime: string | number | Date): Promise; + } + + /** + * Synchronously change file timestamps of the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + export function futimesSync(fd: number, atime: string | number | Date, mtime: string | number | Date): void; + + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor. + */ + export function fsync(fd: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fsync { + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + + /** + * Synchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param fd A file descriptor. + */ + export function fsyncSync(fd: number): void; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + position: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + length: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + */ + export function write( + fd: number, + buffer: TBuffer, + offset: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + */ + export function write( + fd: number, + buffer: TBuffer, + callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, + ): void; + + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function write( + fd: number, + string: string, + position: number | undefined | null, + encoding: BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + export function write( + fd: number, + string: string, + position: number | undefined | null, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + */ + export function write( + fd: number, + string: string, + callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace write { + /** + * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + function __promisify__( + fd: number, + buffer?: TBuffer, + offset?: number, + length?: number, + position?: number | null, + ): Promise<{ bytesWritten: number; buffer: TBuffer }>; + + /** + * Asynchronously writes `string` to the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + function __promisify__( + fd: number, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ bytesWritten: number; buffer: string }>; + } + + /** + * Synchronously writes `buffer` to the file referenced by the supplied file descriptor, returning the number of bytes written. + * @param fd A file descriptor. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + export function writeSync( + fd: number, + buffer: NodeJS.ArrayBufferView, + offset?: number | null, + length?: number | null, + position?: number | null, + ): number; + + /** + * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written. + * @param fd A file descriptor. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + export function writeSync( + fd: number, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): number; + + /** + * Asynchronously reads data from the file referenced by the supplied file descriptor. + * @param fd A file descriptor. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + export function read( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: number | null, + callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace read { + /** + * @param fd A file descriptor. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + function __promisify__( + fd: number, + buffer: TBuffer, + offset: number, + length: number, + position: number | null, + ): Promise<{ bytesRead: number; buffer: TBuffer }>; + } + + export interface ReadSyncOptions { + /** + * @default 0 + */ + offset?: number | undefined; + /** + * @default `length of buffer` + */ + length?: number | undefined; + /** + * @default null + */ + position?: number | null | undefined; + } + + /** + * Synchronously reads data from the file referenced by the supplied file descriptor, returning the number of bytes read. + * @param fd A file descriptor. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + export function readSync( + fd: number, + buffer: NodeJS.ArrayBufferView, + offset: number, + length: number, + position: number | null, + ): number; + + /** + * Similar to the above `fs.readSync` function, this version takes an optional `options` object. + * If no `options` object is specified, it will default with the above values. + */ + export function readSync(fd: number, buffer: NodeJS.ArrayBufferView, opts?: ReadSyncOptions): number; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathLike | number, + options: { encoding?: null | undefined; flag?: string | undefined } | undefined | null, + callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void, + ): void; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathLike | number, + options: { encoding: BufferEncoding; flag?: string | undefined } | BufferEncoding, + callback: (err: NodeJS.ErrnoException | null, data: string) => void, + ): void; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFile( + path: PathLike | number, + options: BaseEncodingOptions & { flag?: string | undefined } | BufferEncoding | undefined | null, + callback: (err: NodeJS.ErrnoException | null, data: string | Buffer) => void, + ): void; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + */ + export function readFile( + path: PathLike | number, + callback: (err: NodeJS.ErrnoException | null, data: Buffer) => void, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace readFile { + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathLike | number, + options?: { encoding?: null | undefined; flag?: string | undefined } | null, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathLike | number, + options: { encoding: BufferEncoding; flag?: string | undefined } | BufferEncoding, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function __promisify__( + path: PathLike | number, + options?: BaseEncodingOptions & { flag?: string | undefined } | BufferEncoding | null, + ): Promise; + } + + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathLike | number, + options?: { encoding?: null | undefined; flag?: string | undefined } | null, + ): Buffer; + + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathLike | number, + options: { encoding: BufferEncoding; flag?: string | undefined } | BufferEncoding, + ): string; + + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + export function readFileSync( + path: PathLike | number, + options?: BaseEncodingOptions & { flag?: string | undefined } | BufferEncoding | null, + ): string | Buffer; + + export type WriteFileOptions = + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: string | undefined } + | BufferEncoding + | null; + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + export function writeFile( + path: PathLike | number, + data: string | NodeJS.ArrayBufferView, + options: WriteFileOptions, + callback: NoParamCallback, + ): void; + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function writeFile( + path: PathLike | number, + data: string | NodeJS.ArrayBufferView, + callback: NoParamCallback, + ): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace writeFile { + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + function __promisify__( + path: PathLike | number, + data: string | NodeJS.ArrayBufferView, + options?: WriteFileOptions, + ): Promise; + } + + /** + * Synchronously writes data to a file, replacing the file if it already exists. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + export function writeFileSync( + path: PathLike | number, + data: string | NodeJS.ArrayBufferView, + options?: WriteFileOptions, + ): void; + + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + export function appendFile( + file: PathLike | number, + data: string | Uint8Array, + options: WriteFileOptions, + callback: NoParamCallback, + ): void; + + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + */ + export function appendFile(file: PathLike | number, data: string | Uint8Array, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace appendFile { + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + function __promisify__( + file: PathLike | number, + data: string | Uint8Array, + options?: WriteFileOptions, + ): Promise; + } + + /** + * Synchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a file descriptor is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + export function appendFileSync( + file: PathLike | number, + data: string | Uint8Array, + options?: WriteFileOptions, + ): void; + + /** + * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. + */ + export function watchFile( + filename: PathLike, + options: { persistent?: boolean | undefined; interval?: number | undefined } | undefined, + listener: (curr: Stats, prev: Stats) => void, + ): void; + + /** + * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function watchFile(filename: PathLike, listener: (curr: Stats, prev: Stats) => void): void; + + /** + * Stop watching for changes on `filename`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function unwatchFile(filename: PathLike, listener?: (curr: Stats, prev: Stats) => void): void; + + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options: + | { + encoding?: BufferEncoding | null | undefined; + persistent?: boolean | undefined; + recursive?: boolean | undefined; + } + | BufferEncoding + | undefined + | null, + listener?: (event: "rename" | "change", filename: string) => void, + ): FSWatcher; + + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options: { encoding: "buffer"; persistent?: boolean | undefined; recursive?: boolean | undefined } | "buffer", + listener?: (event: "rename" | "change", filename: Buffer) => void, + ): FSWatcher; + + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param options Either the encoding for the filename provided to the listener, or an object optionally specifying encoding, persistent, and recursive options. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `persistent` is not supplied, the default of `true` is used. + * If `recursive` is not supplied, the default of `false` is used. + */ + export function watch( + filename: PathLike, + options: + | { + encoding?: BufferEncoding | null | undefined; + persistent?: boolean | undefined; + recursive?: boolean | undefined; + } + | string + | null, + listener?: (event: "rename" | "change", filename: string | Buffer) => void, + ): FSWatcher; + + /** + * Watch for changes on `filename`, where `filename` is either a file or a directory, returning an `FSWatcher`. + * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function watch( + filename: PathLike, + listener?: (event: "rename" | "change", filename: string) => any, + ): FSWatcher; + + /** + * Asynchronously tests whether or not the given path exists by checking with the file system. + * @deprecated since v1.0.0 Use `fs.stat()` or `fs.access()` instead + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function exists(path: PathLike, callback: (exists: boolean) => void): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace exists { + /** + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike): Promise; + } + + /** + * Synchronously tests whether or not the given path exists by checking with the file system. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function existsSync(path: PathLike): boolean; + + export namespace constants { + // File Access Constants + + /** Constant for fs.access(). File is visible to the calling process. */ + const F_OK: number; + + /** Constant for fs.access(). File can be read by the calling process. */ + const R_OK: number; + + /** Constant for fs.access(). File can be written by the calling process. */ + const W_OK: number; + + /** Constant for fs.access(). File can be executed by the calling process. */ + const X_OK: number; + + // File Copy Constants + + /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */ + const COPYFILE_EXCL: number; + + /** + * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used. + */ + const COPYFILE_FICLONE: number; + + /** + * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink. + * If the underlying platform does not support copy-on-write, then the operation will fail with an error. + */ + const COPYFILE_FICLONE_FORCE: number; + + // File Open Constants + + /** Constant for fs.open(). Flag indicating to open a file for read-only access. */ + const O_RDONLY: number; + + /** Constant for fs.open(). Flag indicating to open a file for write-only access. */ + const O_WRONLY: number; + + /** Constant for fs.open(). Flag indicating to open a file for read-write access. */ + const O_RDWR: number; + + /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */ + const O_CREAT: number; + + /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */ + const O_EXCL: number; + + /** + * Constant for fs.open(). Flag indicating that if path identifies a terminal device, + * opening the path shall not cause that terminal to become the controlling terminal for the process + * (if the process does not already have one). + */ + const O_NOCTTY: number; + + /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */ + const O_TRUNC: number; + + /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */ + const O_APPEND: number; + + /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */ + const O_DIRECTORY: number; + + /** + * constant for fs.open(). + * Flag indicating reading accesses to the file system will no longer result in + * an update to the atime information associated with the file. + * This flag is available on Linux operating systems only. + */ + const O_NOATIME: number; + + /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */ + const O_NOFOLLOW: number; + + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */ + const O_SYNC: number; + + /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */ + const O_DSYNC: number; + + /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */ + const O_SYMLINK: number; + + /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */ + const O_DIRECT: number; + + /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */ + const O_NONBLOCK: number; + + // File Type Constants + + /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */ + const S_IFMT: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */ + const S_IFREG: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */ + const S_IFDIR: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */ + const S_IFCHR: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */ + const S_IFBLK: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */ + const S_IFIFO: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */ + const S_IFLNK: number; + + /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */ + const S_IFSOCK: number; + + // File Mode Constants + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */ + const S_IRWXU: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */ + const S_IRUSR: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */ + const S_IWUSR: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */ + const S_IXUSR: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */ + const S_IRWXG: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */ + const S_IRGRP: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */ + const S_IWGRP: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */ + const S_IXGRP: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */ + const S_IRWXO: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */ + const S_IROTH: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */ + const S_IWOTH: number; + + /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */ + const S_IXOTH: number; + + /** + * When set, a memory file mapping is used to access the file. This flag + * is available on Windows operating systems only. On other operating systems, + * this flag is ignored. + */ + const UV_FS_O_FILEMAP: number; + } + + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function access(path: PathLike, mode: number | undefined, callback: NoParamCallback): void; + + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function access(path: PathLike, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace access { + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function __promisify__(path: PathLike, mode?: number): Promise; + } + + /** + * Synchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function accessSync(path: PathLike, mode?: number): void; + + interface StreamOptions { + flags?: string | undefined; + encoding?: BufferEncoding | null | undefined; + fd?: number | promises.FileHandle | null | undefined; + mode?: number | undefined; + autoClose?: boolean | undefined; + emitClose?: boolean | undefined; + start?: number | undefined; + highWaterMark?: number | undefined; + } + interface FSImplementation { + open: (...args: any[]) => any; + close: (...args: any[]) => any; + } + interface CreateReadStreamFSImplementation extends FSImplementation { + read: (...args: any[]) => any; + } + interface CreateWriteStreamFSImplementation extends FSImplementation { + write: (...args: any[]) => any; + writev?: (...args: any[]) => any; + } + interface ReadStreamOptions extends StreamOptions { + fs?: CreateReadStreamFSImplementation | null | undefined; + end?: number | undefined; + } + interface WriteStreamOptions extends StreamOptions { + fs?: CreateWriteStreamFSImplementation | null | undefined; + } + /** + * Returns a new `ReadStream` object. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function createReadStream(path: PathLike, options?: BufferEncoding | ReadStreamOptions): ReadStream; + + /** + * Returns a new `WriteStream` object. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + export function createWriteStream(path: PathLike, options?: BufferEncoding | WriteStreamOptions): WriteStream; + + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor. + */ + export function fdatasync(fd: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace fdatasync { + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor. + */ + function __promisify__(fd: number): Promise; + } + + /** + * Synchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param fd A file descriptor. + */ + export function fdatasyncSync(fd: number): void; + + /** + * Asynchronously copies src to dest. By default, dest is overwritten if it already exists. + * No arguments other than a possible exception are given to the callback function. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + */ + export function copyFile(src: PathLike, dest: PathLike, callback: NoParamCallback): void; + /** + * Asynchronously copies src to dest. By default, dest is overwritten if it already exists. + * No arguments other than a possible exception are given to the callback function. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + * @param flags An integer that specifies the behavior of the copy operation. The only supported flag is fs.constants.COPYFILE_EXCL, which causes the copy operation to fail if dest already exists. + */ + export function copyFile(src: PathLike, dest: PathLike, flags: number, callback: NoParamCallback): void; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + export namespace copyFile { + /** + * Asynchronously copies src to dest. By default, dest is overwritten if it already exists. + * No arguments other than a possible exception are given to the callback function. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + * @param flags An optional integer that specifies the behavior of the copy operation. + * The only supported flag is fs.constants.COPYFILE_EXCL, + * which causes the copy operation to fail if dest already exists. + */ + function __promisify__(src: PathLike, dst: PathLike, flags?: number): Promise; + } + + /** + * Synchronously copies src to dest. By default, dest is overwritten if it already exists. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + * @param flags An optional integer that specifies the behavior of the copy operation. + * The only supported flag is fs.constants.COPYFILE_EXCL, which causes the copy operation to fail if dest already exists. + */ + export function copyFileSync(src: PathLike, dest: PathLike, flags?: number): void; + + /** + * Write an array of ArrayBufferViews to the file specified by fd using writev(). + * position is the offset from the beginning of the file where this data should be written. + * It is unsafe to use fs.writev() multiple times on the same file without waiting for the callback. For this scenario, use fs.createWriteStream(). + * On Linux, positional writes don't work when the file is opened in append mode. + * The kernel ignores the position argument and always appends the data to the end of the file. + */ + export function writev( + fd: number, + buffers: ReadonlyArray, + cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export function writev( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + + export interface WriteVResult { + bytesWritten: number; + buffers: NodeJS.ArrayBufferView[]; + } + + export namespace writev { + function __promisify__( + fd: number, + buffers: ReadonlyArray, + position?: number, + ): Promise; + } + + /** + * See `writev`. + */ + export function writevSync(fd: number, buffers: ReadonlyArray, position?: number): number; + + export function readv( + fd: number, + buffers: ReadonlyArray, + cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + export function readv( + fd: number, + buffers: ReadonlyArray, + position: number, + cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: NodeJS.ArrayBufferView[]) => void, + ): void; + + export interface ReadVResult { + bytesRead: number; + buffers: NodeJS.ArrayBufferView[]; + } + + export namespace readv { + function __promisify__( + fd: number, + buffers: ReadonlyArray, + position?: number, + ): Promise; + } + + /** + * See `readv`. + */ + export function readvSync(fd: number, buffers: ReadonlyArray, position?: number): number; + + export interface OpenDirOptions { + encoding?: BufferEncoding | undefined; + /** + * Number of directory entries that are buffered + * internally when reading from the directory. Higher values lead to better + * performance but higher memory usage. + * @default 32 + */ + bufferSize?: number | undefined; + } + + export function opendirSync(path: PathLike, options?: OpenDirOptions): Dir; + + export function opendir(path: PathLike, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void; + export function opendir( + path: PathLike, + options: OpenDirOptions, + cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void, + ): void; + + export namespace opendir { + function __promisify__(path: PathLike, options?: OpenDirOptions): Promise; + } + + export interface BigIntStats extends StatsBase { + } + + export class BigIntStats { + atimeNs: bigint; + mtimeNs: bigint; + ctimeNs: bigint; + birthtimeNs: bigint; + } + + export interface BigIntOptions { + bigint: true; + } + + export interface StatOptions { + bigint?: boolean | undefined; + } +} +declare module "node:fs" { + export * from "fs"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/fs/promises.d.ts b/node_backend/node_modules/@types/node/ts4.8/fs/promises.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef943711be10d471dc3a0464b28bc14fb19527e0 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/fs/promises.d.ts @@ -0,0 +1,634 @@ +declare module "fs/promises" { + import { + BaseEncodingOptions, + BigIntStats, + BufferEncodingOption, + constants as fsConstants, + Dir, + Dirent, + MakeDirectoryOptions, + Mode, + OpenDirOptions, + OpenMode, + PathLike, + ReadVResult, + RmDirOptions, + RmOptions, + StatOptions, + Stats, + WriteVResult, + } from "fs"; + + interface FileHandle { + /** + * Gets the file descriptor for this file handle. + */ + readonly fd: number; + + /** + * Asynchronously append data to a file, creating the file if it does not exist. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for appending. + * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + appendFile( + data: string | Uint8Array, + options?: + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: OpenMode | undefined } + | BufferEncoding + | null, + ): Promise; + + /** + * Asynchronous fchown(2) - Change ownership of a file. + */ + chown(uid: number, gid: number): Promise; + + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + chmod(mode: Mode): Promise; + + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + */ + datasync(): Promise; + + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + */ + sync(): Promise; + + /** + * Asynchronously reads data from the file. + * The `FileHandle` must have been opened for reading. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. + */ + read( + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ bytesRead: number; buffer: TBuffer }>; + + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile(options?: { encoding?: null | undefined; flag?: OpenMode | undefined } | null): Promise; + + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile(options: { encoding: BufferEncoding; flag?: OpenMode | undefined } | BufferEncoding): Promise; + + /** + * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for reading. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + readFile( + options?: BaseEncodingOptions & { flag?: OpenMode | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous fstat(2) - Get file status. + */ + stat(opts?: StatOptions & { bigint?: false | undefined }): Promise; + stat(opts: StatOptions & { bigint: true }): Promise; + stat(opts?: StatOptions): Promise; + + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param len If not specified, defaults to `0`. + */ + truncate(len?: number): Promise; + + /** + * Asynchronously change file timestamps of the file. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + utimes(atime: string | number | Date, mtime: string | number | Date): Promise; + + /** + * Asynchronously writes `buffer` to the file. + * The `FileHandle` must have been opened for writing. + * @param buffer The buffer that the data will be written to. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + write( + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ bytesWritten: number; buffer: TBuffer }>; + + /** + * Asynchronously writes `string` to the file. + * The `FileHandle` must have been opened for writing. + * It is unsafe to call `write()` multiple times on the same file without waiting for the `Promise` + * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + write( + data: string | Uint8Array, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ bytesWritten: number; buffer: string }>; + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. The underlying file will _not_ be closed automatically. + * The `FileHandle` must have been opened for writing. + * It is unsafe to call `writeFile()` multiple times on the same file without waiting for the `Promise` to be resolved (or rejected). + * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + writeFile( + data: string | Uint8Array, + options?: + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: OpenMode | undefined } + | BufferEncoding + | null, + ): Promise; + + /** + * See `fs.writev` promisified version. + */ + writev(buffers: ReadonlyArray, position?: number): Promise; + + /** + * See `fs.readv` promisified version. + */ + readv(buffers: ReadonlyArray, position?: number): Promise; + + /** + * Asynchronous close(2) - close a `FileHandle`. + */ + close(): Promise; + } + + const constants: typeof fsConstants; + + /** + * Asynchronously tests a user's permissions for the file specified by path. + * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function access(path: PathLike, mode?: number): Promise; + + /** + * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it already exists. + * Node.js makes no guarantees about the atomicity of the copy operation. + * If an error occurs after the destination file has been opened for writing, Node.js will attempt + * to remove the destination. + * @param src A path to the source file. + * @param dest A path to the destination file. + * @param flags An optional integer that specifies the behavior of the copy operation. The only + * supported flag is `fs.constants.COPYFILE_EXCL`, which causes the copy operation to fail if + * `dest` already exists. + */ + function copyFile(src: PathLike, dest: PathLike, flags?: number): Promise; + + /** + * Asynchronous open(2) - open and possibly create a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param [flags='r'] See `support of file system `flags``. + * @param [mode] A file mode. If a string is passed, it is parsed as an octal integer. If not + * supplied, defaults to `0o666`. + */ + function open(path: PathLike, flags?: string | number, mode?: string | number): Promise; + + /** + * Asynchronously reads data from the file referenced by the supplied `FileHandle`. + * @param handle A `FileHandle`. + * @param buffer The buffer that the data will be written to. + * @param offset The offset in the buffer at which to start writing. + * @param length The number of bytes to read. + * @param position The offset from the beginning of the file from which data should be read. If + * `null`, data will be read from the current position. + */ + function read( + handle: FileHandle, + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ bytesRead: number; buffer: TBuffer }>; + + /** + * Asynchronously writes `buffer` to the file referenced by the supplied `FileHandle`. + * It is unsafe to call `fsPromises.write()` multiple times on the same file without waiting for the `Promise` + * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended. + * @param handle A `FileHandle`. + * @param buffer The buffer that the data will be written to. + * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. + * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + */ + function write( + handle: FileHandle, + buffer: TBuffer, + offset?: number | null, + length?: number | null, + position?: number | null, + ): Promise<{ bytesWritten: number; buffer: TBuffer }>; + + /** + * Asynchronously writes `string` to the file referenced by the supplied `FileHandle`. + * It is unsafe to call `fsPromises.write()` multiple times on the same file without waiting for the `Promise` + * to be resolved (or rejected). For this scenario, `fs.createWriteStream` is strongly recommended. + * @param handle A `FileHandle`. + * @param string A string to write. + * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. + * @param encoding The expected string encoding. + */ + function write( + handle: FileHandle, + string: string, + position?: number | null, + encoding?: BufferEncoding | null, + ): Promise<{ bytesWritten: number; buffer: string }>; + + /** + * Asynchronous rename(2) - Change the name or location of a file or directory. + * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + */ + function rename(oldPath: PathLike, newPath: PathLike): Promise; + + /** + * Asynchronous truncate(2) - Truncate a file to a specified length. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param len If not specified, defaults to `0`. + */ + function truncate(path: PathLike, len?: number): Promise; + + /** + * Asynchronous ftruncate(2) - Truncate a file to a specified length. + * @param handle A `FileHandle`. + * @param len If not specified, defaults to `0`. + */ + function ftruncate(handle: FileHandle, len?: number): Promise; + + /** + * Asynchronous rmdir(2) - delete a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function rmdir(path: PathLike, options?: RmDirOptions): Promise; + + /** + * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). + */ + function rm(path: PathLike, options?: RmOptions): Promise; + + /** + * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. + * @param handle A `FileHandle`. + */ + function fdatasync(handle: FileHandle): Promise; + + /** + * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. + * @param handle A `FileHandle`. + */ + function fsync(handle: FileHandle): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir(path: PathLike, options: MakeDirectoryOptions & { recursive: true }): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir( + path: PathLike, + options?: Mode | (MakeDirectoryOptions & { recursive?: false | undefined }) | null, + ): Promise; + + /** + * Asynchronous mkdir(2) - create a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders + * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. + */ + function mkdir(path: PathLike, options?: Mode | MakeDirectoryOptions | null): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options?: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options: { encoding: "buffer"; withFileTypes?: false | undefined } | "buffer", + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readdir( + path: PathLike, + options?: BaseEncodingOptions & { withFileTypes?: false | undefined } | BufferEncoding | null, + ): Promise; + + /** + * Asynchronous readdir(3) - read a directory. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. + */ + function readdir(path: PathLike, options: BaseEncodingOptions & { withFileTypes: true }): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options: BufferEncodingOption): Promise; + + /** + * Asynchronous readlink(2) - read value of a symbolic link. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function readlink(path: PathLike, options?: BaseEncodingOptions | string | null): Promise; + + /** + * Asynchronous symlink(2) - Create a new symbolic link to an existing file. + * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. + * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. + * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). + * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. + */ + function symlink(target: PathLike, path: PathLike, type?: string | null): Promise; + + /** + * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function lstat(path: PathLike, opts?: StatOptions & { bigint?: false | undefined }): Promise; + function lstat(path: PathLike, opts: StatOptions & { bigint: true }): Promise; + function lstat(path: PathLike, opts?: StatOptions): Promise; + + /** + * Asynchronous stat(2) - Get file status. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function stat(path: PathLike, opts?: StatOptions & { bigint?: false | undefined }): Promise; + function stat(path: PathLike, opts: StatOptions & { bigint: true }): Promise; + function stat(path: PathLike, opts?: StatOptions): Promise; + + /** + * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. + * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function link(existingPath: PathLike, newPath: PathLike): Promise; + + /** + * Asynchronous unlink(2) - delete a name and possibly the file it refers to. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function unlink(path: PathLike): Promise; + + /** + * Asynchronous fchmod(2) - Change permissions of a file. + * @param handle A `FileHandle`. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function fchmod(handle: FileHandle, mode: Mode): Promise; + + /** + * Asynchronous chmod(2) - Change permissions of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function chmod(path: PathLike, mode: Mode): Promise; + + /** + * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param mode A file mode. If a string is passed, it is parsed as an octal integer. + */ + function lchmod(path: PathLike, mode: Mode): Promise; + + /** + * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function lchown(path: PathLike, uid: number, gid: number): Promise; + + /** + * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, + * with the difference that if the path refers to a symbolic link, then the link is not + * dereferenced: instead, the timestamps of the symbolic link itself are changed. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function lutimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise; + + /** + * Asynchronous fchown(2) - Change ownership of a file. + * @param handle A `FileHandle`. + */ + function fchown(handle: FileHandle, uid: number, gid: number): Promise; + + /** + * Asynchronous chown(2) - Change ownership of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + */ + function chown(path: PathLike, uid: number, gid: number): Promise; + + /** + * Asynchronously change file timestamps of the file referenced by the supplied path. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function utimes(path: PathLike, atime: string | number | Date, mtime: string | number | Date): Promise; + + /** + * Asynchronously change file timestamps of the file referenced by the supplied `FileHandle`. + * @param handle A `FileHandle`. + * @param atime The last access time. If a string is provided, it will be coerced to number. + * @param mtime The last modified time. If a string is provided, it will be coerced to number. + */ + function futimes(handle: FileHandle, atime: string | number | Date, mtime: string | number | Date): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options: BufferEncodingOption): Promise; + + /** + * Asynchronous realpath(3) - return the canonicalized absolute pathname. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function realpath(path: PathLike, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options: BufferEncodingOption): Promise; + + /** + * Asynchronously creates a unique temporary directory. + * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. + * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. + */ + function mkdtemp(prefix: string, options?: BaseEncodingOptions | BufferEncoding | null): Promise; + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * It is unsafe to call `fsPromises.writeFile()` multiple times on the same file without waiting for the `Promise` to be resolved (or rejected). + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'w'` is used. + */ + function writeFile( + path: PathLike | FileHandle, + data: string | Uint8Array, + options?: + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: OpenMode | undefined } + | BufferEncoding + | null, + ): Promise; + + /** + * Asynchronously append data to a file, creating the file if it does not exist. + * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. + * URL support is _experimental_. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param data The data to write. If something other than a `Buffer` or `Uint8Array` is provided, the value is coerced to a string. + * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. + * If `encoding` is not supplied, the default of `'utf8'` is used. + * If `mode` is not supplied, the default of `0o666` is used. + * If `mode` is a string, it is parsed as an octal integer. + * If `flag` is not supplied, the default of `'a'` is used. + */ + function appendFile( + path: PathLike | FileHandle, + data: string | Uint8Array, + options?: + | BaseEncodingOptions & { mode?: Mode | undefined; flag?: OpenMode | undefined } + | BufferEncoding + | null, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options?: { encoding?: null | undefined; flag?: OpenMode | undefined } | null, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options: { encoding: BufferEncoding; flag?: OpenMode | undefined } | BufferEncoding, + ): Promise; + + /** + * Asynchronously reads the entire contents of a file. + * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. + * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. + * @param options An object that may contain an optional flag. + * If a flag is not provided, it defaults to `'r'`. + */ + function readFile( + path: PathLike | FileHandle, + options?: BaseEncodingOptions & { flag?: OpenMode | undefined } | BufferEncoding | null, + ): Promise; + + function opendir(path: PathLike, options?: OpenDirOptions): Promise; +} +declare module "node:fs/promises" { + export * from "fs/promises"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/globals.d.ts b/node_backend/node_modules/@types/node/ts4.8/globals.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..81bea828db34830b781d85644997c5f92d888bde --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/globals.d.ts @@ -0,0 +1,763 @@ +// Declare "static" methods in Error +interface ErrorConstructor { + /** Create .stack property on a target object */ + captureStackTrace(targetObject: object, constructorOpt?: Function): void; + + /** + * Optional override for formatting stack traces + * + * @see https://v8.dev/docs/stack-trace-api#customizing-stack-traces + */ + prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; + + stackTraceLimit: number; +} + +// Node.js ESNEXT support +interface String { + /** Removes whitespace from the left end of a string. */ + trimLeft(): string; + /** Removes whitespace from the right end of a string. */ + trimRight(): string; + + /** Returns a copy with leading whitespace removed. */ + trimStart(): string; + /** Returns a copy with trailing whitespace removed. */ + trimEnd(): string; +} + +interface ImportMeta { + url: string; +} + +/*-----------------------------------------------* + * * + * GLOBAL * + * * + ------------------------------------------------*/ + +// For backwards compability +interface NodeRequire extends NodeJS.Require {} +interface RequireResolve extends NodeJS.RequireResolve {} +interface NodeModule extends NodeJS.Module {} + +declare var process: NodeJS.Process; +declare var console: Console; + +declare var __filename: string; +declare var __dirname: string; + +declare function setTimeout(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout; +declare namespace setTimeout { + function __promisify__(ms: number): Promise; + function __promisify__(ms: number, value: T): Promise; +} +declare function clearTimeout(timeoutId: NodeJS.Timeout | string | number | undefined): void; +declare function setInterval(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout; +declare function clearInterval(intervalId: NodeJS.Timeout | string | number | undefined): void; +declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate; +declare namespace setImmediate { + function __promisify__(): Promise; + function __promisify__(value: T): Promise; +} +declare function clearImmediate(immediateId: NodeJS.Immediate | undefined): void; + +declare function queueMicrotask(callback: () => void): void; + +declare var require: NodeRequire; +declare var module: NodeModule; + +// Same as module.exports +declare var exports: any; + +// Buffer class +type BufferEncoding = + | "ascii" + | "utf8" + | "utf-8" + | "utf16le" + | "ucs2" + | "ucs-2" + | "base64" + | "base64url" + | "latin1" + | "binary" + | "hex"; + +type WithImplicitCoercion = T | { valueOf(): T }; + +// #region borrowed +// from https://github.com/microsoft/TypeScript/blob/38da7c600c83e7b31193a62495239a0fe478cb67/lib/lib.webworker.d.ts#L633 until moved to separate lib +/** + * A controller object that allows you to abort one or more DOM requests as and when desired. + * @since v14.7.0 + */ +interface AbortController { + /** + * Returns the AbortSignal object associated with this object. + * @since v14.7.0 + */ + readonly signal: AbortSignal; + /** + * Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. + * @since v14.7.0 + */ + abort(reason?: any): void; +} + +/** + * A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object. + * @since v14.7.0 + */ +interface AbortSignal { + /** + * Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise. + * @since v14.7.0 + */ + readonly aborted: boolean; +} + +declare var AbortController: { + prototype: AbortController; + new(): AbortController; +}; + +declare var AbortSignal: { + prototype: AbortSignal; + new(): AbortSignal; + // TODO: Add abort() static +}; +// #endregion borrowed + +/** + * Raw data is stored in instances of the Buffer class. + * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. + * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex' + */ +declare class Buffer extends Uint8Array { + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. + */ + constructor(str: string, encoding?: BufferEncoding); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). + */ + constructor(size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + constructor(array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}/{SharedArrayBuffer}. + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. + */ + constructor(arrayBuffer: ArrayBuffer | SharedArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + constructor(array: ReadonlyArray); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + * @deprecated since v10.0.0 - Use `Buffer.from(buffer)` instead. + */ + constructor(buffer: Buffer); + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of any TypedArray or a new ArrayBuffer() + */ + static from( + arrayBuffer: WithImplicitCoercion, + byteOffset?: number, + length?: number, + ): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param data data to create a new Buffer + */ + static from(data: Uint8Array | ReadonlyArray): Buffer; + static from(data: WithImplicitCoercion | string>): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + */ + static from( + str: WithImplicitCoercion | { [Symbol.toPrimitive](hint: "string"): string }, + encoding?: BufferEncoding, + ): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param values to create a new Buffer + */ + static of(...items: number[]): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): encoding is BufferEncoding; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength( + string: string | NodeJS.ArrayBufferView | ArrayBuffer | SharedArrayBuffer, + encoding?: BufferEncoding, + ): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: ReadonlyArray, totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Uint8Array, buf2: Uint8Array): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + static alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; + /** + * This is the number of bytes used to determine the size of pre-allocated, internal Buffer instances used for pooling. This value may be modified. + */ + static poolSize: number; + + write(string: string, encoding?: BufferEncoding): number; + write(string: string, offset: number, encoding?: BufferEncoding): number; + write(string: string, offset: number, length: number, encoding?: BufferEncoding): number; + toString(encoding?: BufferEncoding, start?: number, end?: number): string; + toJSON(): { type: "Buffer"; data: number[] }; + equals(otherBuffer: Uint8Array): boolean; + compare( + otherBuffer: Uint8Array, + targetStart?: number, + targetEnd?: number, + sourceStart?: number, + sourceEnd?: number, + ): number; + copy(targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + /** + * Returns a new `Buffer` that references **the same memory as the original**, but offset and cropped by the start and end indices. + * + * This method is incompatible with `Uint8Array#slice()`, which returns a copy of the original memory. + * + * @param begin Where the new `Buffer` will start. Default: `0`. + * @param end Where the new `Buffer` will end (not inclusive). Default: `buf.length`. + */ + slice(begin?: number, end?: number): Buffer; + /** + * Returns a new `Buffer` that references **the same memory as the original**, but offset and cropped by the start and end indices. + * + * This method is compatible with `Uint8Array#subarray()`. + * + * @param begin Where the new `Buffer` will start. Default: `0`. + * @param end Where the new `Buffer` will end (not inclusive). Default: `buf.length`. + */ + subarray(begin?: number, end?: number): Buffer; + writeBigInt64BE(value: bigint, offset?: number): number; + writeBigInt64LE(value: bigint, offset?: number): number; + writeBigUInt64BE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64BE(value: bigint, offset?: number): number; + writeBigUInt64LE(value: bigint, offset?: number): number; + /** + * @alias Buffer.writeBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + writeBigUint64LE(value: bigint, offset?: number): number; + writeUIntLE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntLE + * @since v14.9.0, v12.19.0 + */ + writeUintLE(value: number, offset: number, byteLength: number): number; + writeUIntBE(value: number, offset: number, byteLength: number): number; + /** + * @alias Buffer.writeUIntBE + * @since v14.9.0, v12.19.0 + */ + writeUintBE(value: number, offset: number, byteLength: number): number; + writeIntLE(value: number, offset: number, byteLength: number): number; + writeIntBE(value: number, offset: number, byteLength: number): number; + readBigUInt64BE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64BE + * @since v14.10.0, v12.19.0 + */ + readBigUint64BE(offset?: number): bigint; + readBigUInt64LE(offset?: number): bigint; + /** + * @alias Buffer.readBigUInt64LE + * @since v14.10.0, v12.19.0 + */ + readBigUint64LE(offset?: number): bigint; + readBigInt64BE(offset?: number): bigint; + readBigInt64LE(offset?: number): bigint; + readUIntLE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntLE + * @since v14.9.0, v12.19.0 + */ + readUintLE(offset: number, byteLength: number): number; + readUIntBE(offset: number, byteLength: number): number; + /** + * @alias Buffer.readUIntBE + * @since v14.9.0, v12.19.0 + */ + readUintBE(offset: number, byteLength: number): number; + readIntLE(offset: number, byteLength: number): number; + readIntBE(offset: number, byteLength: number): number; + readUInt8(offset?: number): number; + /** + * @alias Buffer.readUInt8 + * @since v14.9.0, v12.19.0 + */ + readUint8(offset?: number): number; + readUInt16LE(offset?: number): number; + /** + * @alias Buffer.readUInt16LE + * @since v14.9.0, v12.19.0 + */ + readUint16LE(offset?: number): number; + readUInt16BE(offset?: number): number; + /** + * @alias Buffer.readUInt16BE + * @since v14.9.0, v12.19.0 + */ + readUint16BE(offset?: number): number; + readUInt32LE(offset?: number): number; + /** + * @alias Buffer.readUInt32LE + * @since v14.9.0, v12.19.0 + */ + readUint32LE(offset?: number): number; + readUInt32BE(offset?: number): number; + /** + * @alias Buffer.readUInt32BE + * @since v14.9.0, v12.19.0 + */ + readUint32BE(offset?: number): number; + readInt8(offset?: number): number; + readInt16LE(offset?: number): number; + readInt16BE(offset?: number): number; + readInt32LE(offset?: number): number; + readInt32BE(offset?: number): number; + readFloatLE(offset?: number): number; + readFloatBE(offset?: number): number; + readDoubleLE(offset?: number): number; + readDoubleBE(offset?: number): number; + reverse(): this; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt8 + * @since v14.9.0, v12.19.0 + */ + writeUint8(value: number, offset?: number): number; + writeUInt16LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16LE + * @since v14.9.0, v12.19.0 + */ + writeUint16LE(value: number, offset?: number): number; + writeUInt16BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt16BE + * @since v14.9.0, v12.19.0 + */ + writeUint16BE(value: number, offset?: number): number; + writeUInt32LE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32LE + * @since v14.9.0, v12.19.0 + */ + writeUint32LE(value: number, offset?: number): number; + writeUInt32BE(value: number, offset?: number): number; + /** + * @alias Buffer.writeUInt32BE + * @since v14.9.0, v12.19.0 + */ + writeUint32BE(value: number, offset?: number): number; + writeInt8(value: number, offset?: number): number; + writeInt16LE(value: number, offset?: number): number; + writeInt16BE(value: number, offset?: number): number; + writeInt32LE(value: number, offset?: number): number; + writeInt32BE(value: number, offset?: number): number; + writeFloatLE(value: number, offset?: number): number; + writeFloatBE(value: number, offset?: number): number; + writeDoubleLE(value: number, offset?: number): number; + writeDoubleBE(value: number, offset?: number): number; + + fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this; + + indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; + entries(): IterableIterator<[number, number]>; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean; + keys(): IterableIterator; + values(): IterableIterator; +} + +/*----------------------------------------------* +* * +* GLOBAL INTERFACES * +* * +*-----------------------------------------------*/ +declare namespace NodeJS { + interface InspectOptions { + /** + * If set to `true`, getters are going to be + * inspected as well. If set to `'get'` only getters without setter are going + * to be inspected. If set to `'set'` only getters having a corresponding + * setter are going to be inspected. This might cause side effects depending on + * the getter function. + * @default `false` + */ + getters?: "get" | "set" | boolean | undefined; + showHidden?: boolean | undefined; + /** + * @default 2 + */ + depth?: number | null | undefined; + colors?: boolean | undefined; + customInspect?: boolean | undefined; + showProxy?: boolean | undefined; + maxArrayLength?: number | null | undefined; + /** + * Specifies the maximum number of characters to + * include when formatting. Set to `null` or `Infinity` to show all elements. + * Set to `0` or negative to show no characters. + * @default Infinity + */ + maxStringLength?: number | null | undefined; + breakLength?: number | undefined; + /** + * Setting this to `false` causes each object key + * to be displayed on a new line. It will also add new lines to text that is + * longer than `breakLength`. If set to a number, the most `n` inner elements + * are united on a single line as long as all properties fit into + * `breakLength`. Short array elements are also grouped together. Note that no + * text will be reduced below 16 characters, no matter the `breakLength` size. + * For more information, see the example below. + * @default `true` + */ + compact?: boolean | number | undefined; + sorted?: boolean | ((a: string, b: string) => number) | undefined; + } + + interface CallSite { + /** + * Value of "this" + */ + getThis(): any; + + /** + * Type of "this" as a string. + * This is the name of the function stored in the constructor field of + * "this", if available. Otherwise the object's [[Class]] internal + * property. + */ + getTypeName(): string | null; + + /** + * Current function + */ + getFunction(): Function | undefined; + + /** + * Name of the current function, typically its name property. + * If a name property is not available an attempt will be made to try + * to infer a name from the function's context. + */ + getFunctionName(): string | null; + + /** + * Name of the property [of "this" or one of its prototypes] that holds + * the current function + */ + getMethodName(): string | null; + + /** + * Name of the script [if this function was defined in a script] + */ + getFileName(): string | null; + + /** + * Current line number [if this function was defined in a script] + */ + getLineNumber(): number | null; + + /** + * Current column number [if this function was defined in a script] + */ + getColumnNumber(): number | null; + + /** + * A call site object representing the location where eval was called + * [if this function was created using a call to eval] + */ + getEvalOrigin(): string | undefined; + + /** + * Is this a toplevel invocation, that is, is "this" the global object? + */ + isToplevel(): boolean; + + /** + * Does this call take place in code defined by a call to eval? + */ + isEval(): boolean; + + /** + * Is this call in native V8 code? + */ + isNative(): boolean; + + /** + * Is this a constructor call? + */ + isConstructor(): boolean; + } + + interface ErrnoException extends Error { + errno?: number | undefined; + code?: string | undefined; + path?: string | undefined; + syscall?: string | undefined; + } + + interface ReadableStream extends EventEmitter { + readable: boolean; + read(size?: number): string | Buffer; + setEncoding(encoding: BufferEncoding): this; + pause(): this; + resume(): this; + isPaused(): boolean; + pipe(destination: T, options?: { end?: boolean | undefined }): T; + unpipe(destination?: WritableStream): this; + unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void; + wrap(oldStream: ReadableStream): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + interface WritableStream extends EventEmitter { + writable: boolean; + write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; + write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; + end(cb?: () => void): this; + end(data: string | Uint8Array, cb?: () => void): this; + end(str: string, encoding?: BufferEncoding, cb?: () => void): this; + } + + interface ReadWriteStream extends ReadableStream, WritableStream {} + + interface Global { + Array: typeof Array; + ArrayBuffer: typeof ArrayBuffer; + Boolean: typeof Boolean; + Buffer: typeof Buffer; + DataView: typeof DataView; + Date: typeof Date; + Error: typeof Error; + EvalError: typeof EvalError; + Float32Array: typeof Float32Array; + Float64Array: typeof Float64Array; + Function: typeof Function; + Infinity: typeof Infinity; + Int16Array: typeof Int16Array; + Int32Array: typeof Int32Array; + Int8Array: typeof Int8Array; + Intl: typeof Intl; + JSON: typeof JSON; + Map: MapConstructor; + Math: typeof Math; + NaN: typeof NaN; + Number: typeof Number; + Object: typeof Object; + Promise: typeof Promise; + RangeError: typeof RangeError; + ReferenceError: typeof ReferenceError; + RegExp: typeof RegExp; + Set: SetConstructor; + String: typeof String; + Symbol: Function; + SyntaxError: typeof SyntaxError; + TypeError: typeof TypeError; + URIError: typeof URIError; + Uint16Array: typeof Uint16Array; + Uint32Array: typeof Uint32Array; + Uint8Array: typeof Uint8Array; + Uint8ClampedArray: typeof Uint8ClampedArray; + WeakMap: WeakMapConstructor; + WeakSet: WeakSetConstructor; + clearImmediate: (immediateId: Immediate) => void; + clearInterval: (intervalId: Timeout) => void; + clearTimeout: (timeoutId: Timeout) => void; + decodeURI: typeof decodeURI; + decodeURIComponent: typeof decodeURIComponent; + encodeURI: typeof encodeURI; + encodeURIComponent: typeof encodeURIComponent; + escape: (str: string) => string; + eval: typeof eval; + global: Global; + isFinite: typeof isFinite; + isNaN: typeof isNaN; + parseFloat: typeof parseFloat; + parseInt: typeof parseInt; + setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => Immediate; + setInterval: (callback: (...args: any[]) => void, ms?: number, ...args: any[]) => Timeout; + setTimeout: (callback: (...args: any[]) => void, ms?: number, ...args: any[]) => Timeout; + queueMicrotask: typeof queueMicrotask; + undefined: typeof undefined; + unescape: (str: string) => string; + gc: () => void; + v8debug?: any; + } + + interface RefCounted { + ref(): this; + unref(): this; + } + + // compatibility with older typings + interface Timer extends RefCounted { + hasRef(): boolean; + refresh(): this; + [Symbol.toPrimitive](): number; + } + + interface Immediate extends RefCounted { + hasRef(): boolean; + _onImmediate: Function; // to distinguish it from the Timeout class + } + + interface Timeout extends Timer { + hasRef(): boolean; + refresh(): this; + [Symbol.toPrimitive](): number; + } + + type TypedArray = + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | Int8Array + | Int16Array + | Int32Array + | BigUint64Array + | BigInt64Array + | Float32Array + | Float64Array; + type ArrayBufferView = TypedArray | DataView; + + interface Require { + (id: string): any; + resolve: RequireResolve; + cache: Dict; + /** + * @deprecated + */ + extensions: RequireExtensions; + main: Module | undefined; + } + + interface RequireResolve { + (id: string, options?: { paths?: string[] | undefined }): string; + paths(request: string): string[] | null; + } + + interface RequireExtensions extends Dict<(m: Module, filename: string) => any> { + ".js": (m: Module, filename: string) => any; + ".json": (m: Module, filename: string) => any; + ".node": (m: Module, filename: string) => any; + } + interface Module { + exports: any; + require: Require; + id: string; + filename: string; + loaded: boolean; + /** @deprecated since v14.6.0 Please use `require.main` and `module.children` instead. */ + parent: Module | null | undefined; + children: Module[]; + /** + * @since v11.14.0 + * + * The directory name of the module. This is usually the same as the path.dirname() of the module.id. + */ + path: string; + paths: string[]; + } + + interface Dict { + [key: string]: T | undefined; + } + + interface ReadOnlyDict { + readonly [key: string]: T | undefined; + } +} diff --git a/node_backend/node_modules/@types/node/ts4.8/globals.global.d.ts b/node_backend/node_modules/@types/node/ts4.8/globals.global.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d66acba63e02eb36050bc8f3aecee5ef421f36c5 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/globals.global.d.ts @@ -0,0 +1 @@ +declare var global: NodeJS.Global & typeof globalThis; diff --git a/node_backend/node_modules/@types/node/ts4.8/http.d.ts b/node_backend/node_modules/@types/node/ts4.8/http.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..718d49733b6eaa17df0b2175eb2b0b0d2bae58c7 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/http.d.ts @@ -0,0 +1,580 @@ +declare module "http" { + import * as stream from "stream"; + import { URL } from "url"; + import { LookupFunction, Server as NetServer, Socket } from "net"; + + // incoming headers will never contain number + interface IncomingHttpHeaders extends NodeJS.Dict { + "accept"?: string | undefined; + "accept-language"?: string | undefined; + "accept-patch"?: string | undefined; + "accept-ranges"?: string | undefined; + "access-control-allow-credentials"?: string | undefined; + "access-control-allow-headers"?: string | undefined; + "access-control-allow-methods"?: string | undefined; + "access-control-allow-origin"?: string | undefined; + "access-control-expose-headers"?: string | undefined; + "access-control-max-age"?: string | undefined; + "access-control-request-headers"?: string | undefined; + "access-control-request-method"?: string | undefined; + "age"?: string | undefined; + "allow"?: string | undefined; + "alt-svc"?: string | undefined; + "authorization"?: string | undefined; + "cache-control"?: string | undefined; + "connection"?: string | undefined; + "content-disposition"?: string | undefined; + "content-encoding"?: string | undefined; + "content-language"?: string | undefined; + "content-length"?: string | undefined; + "content-location"?: string | undefined; + "content-range"?: string | undefined; + "content-type"?: string | undefined; + "cookie"?: string | undefined; + "date"?: string | undefined; + "etag"?: string | undefined; + "expect"?: string | undefined; + "expires"?: string | undefined; + "forwarded"?: string | undefined; + "from"?: string | undefined; + "host"?: string | undefined; + "if-match"?: string | undefined; + "if-modified-since"?: string | undefined; + "if-none-match"?: string | undefined; + "if-unmodified-since"?: string | undefined; + "last-modified"?: string | undefined; + "location"?: string | undefined; + "origin"?: string | undefined; + "pragma"?: string | undefined; + "proxy-authenticate"?: string | undefined; + "proxy-authorization"?: string | undefined; + "public-key-pins"?: string | undefined; + "range"?: string | undefined; + "referer"?: string | undefined; + "retry-after"?: string | undefined; + "sec-websocket-accept"?: string | undefined; + "sec-websocket-extensions"?: string | undefined; + "sec-websocket-key"?: string | undefined; + "sec-websocket-protocol"?: string | undefined; + "sec-websocket-version"?: string | undefined; + "set-cookie"?: string[] | undefined; + "strict-transport-security"?: string | undefined; + "tk"?: string | undefined; + "trailer"?: string | undefined; + "transfer-encoding"?: string | undefined; + "upgrade"?: string | undefined; + "user-agent"?: string | undefined; + "vary"?: string | undefined; + "via"?: string | undefined; + "warning"?: string | undefined; + "www-authenticate"?: string | undefined; + } + + // outgoing headers allows numbers (as they are converted internally to strings) + type OutgoingHttpHeader = number | string | string[]; + + interface OutgoingHttpHeaders extends NodeJS.Dict {} + + interface ClientRequestArgs { + protocol?: string | null | undefined; + host?: string | null | undefined; + hostname?: string | null | undefined; + family?: number | undefined; + port?: number | string | null | undefined; + defaultPort?: number | string | undefined; + localAddress?: string | undefined; + socketPath?: string | undefined; + /** + * @default 8192 + */ + maxHeaderSize?: number | undefined; + method?: string | undefined; + path?: string | null | undefined; + headers?: OutgoingHttpHeaders | undefined; + auth?: string | null | undefined; + agent?: Agent | boolean | undefined; + _defaultAgent?: Agent | undefined; + timeout?: number | undefined; + setHost?: boolean | undefined; + // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278 + createConnection?: + | ((options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket) + | undefined; + lookup?: LookupFunction | undefined; + } + + interface ServerOptions< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > { + IncomingMessage?: Request | undefined; + ServerResponse?: Response | undefined; + /** + * Optionally overrides the value of + * [`--max-http-header-size`][] for requests received by this server, i.e. + * the maximum length of request headers in bytes. + * @default 8192 + */ + maxHeaderSize?: number | undefined; + /** + * Use an insecure HTTP parser that accepts invalid HTTP headers when true. + * Using the insecure parser should be avoided. + * See --insecure-http-parser for more information. + * @default false + */ + insecureHTTPParser?: boolean | undefined; + } + + type RequestListener< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > = (req: InstanceType, res: InstanceType) => void; + + class Server< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + > extends NetServer { + constructor(requestListener?: RequestListener); + constructor(options: ServerOptions, requestListener?: RequestListener); + setTimeout(msecs?: number, callback?: () => void): this; + setTimeout(callback: () => void): this; + /** + * Limits maximum incoming headers count. If set to 0, no limit will be applied. + * @default 2000 + * {@link https://nodejs.org/api/http.html#http_server_maxheaderscount} + */ + maxHeadersCount: number | null; + timeout: number; + /** + * Limit the amount of time the parser will wait to receive the complete HTTP headers. + * @default 60000 + * {@link https://nodejs.org/api/http.html#http_server_headerstimeout} + */ + headersTimeout: number; + keepAliveTimeout: number; + /** + * Sets the timeout value in milliseconds for receiving the entire request from the client. + * @default 0 + * {@link https://nodejs.org/api/http.html#http_server_requesttimeout} + */ + requestTimeout: number; + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "checkContinue", listener: RequestListener): this; + addListener(event: "checkExpectation", listener: RequestListener): this; + addListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + addListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + addListener(event: "request", listener: RequestListener): this; + addListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + emit(event: string, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "checkContinue", req: InstanceType, res: InstanceType): boolean; + emit(event: "checkExpectation", req: InstanceType, res: InstanceType): boolean; + emit(event: "clientError", err: Error, socket: stream.Duplex): boolean; + emit(event: "connect", req: InstanceType, socket: stream.Duplex, head: Buffer): boolean; + emit(event: "request", req: InstanceType, res: InstanceType): boolean; + emit(event: "upgrade", req: InstanceType, socket: stream.Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "checkContinue", listener: RequestListener): this; + on(event: "checkExpectation", listener: RequestListener): this; + on(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + on(event: "connect", listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void): this; + on(event: "request", listener: RequestListener): this; + on(event: "upgrade", listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "checkContinue", listener: RequestListener): this; + once(event: "checkExpectation", listener: RequestListener): this; + once(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + once( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + once(event: "request", listener: RequestListener): this; + once( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "checkContinue", listener: RequestListener): this; + prependListener(event: "checkExpectation", listener: RequestListener): this; + prependListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + prependListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependListener(event: "request", listener: RequestListener): this; + prependListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "checkContinue", listener: RequestListener): this; + prependOnceListener(event: "checkExpectation", listener: RequestListener): this; + prependOnceListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this; + prependOnceListener( + event: "connect", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: "request", listener: RequestListener): this; + prependOnceListener( + event: "upgrade", + listener: (req: InstanceType, socket: stream.Duplex, head: Buffer) => void, + ): this; + } + + // https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js + class OutgoingMessage extends stream.Writable { + upgrading: boolean; + chunkedEncoding: boolean; + shouldKeepAlive: boolean; + useChunkedEncodingByDefault: boolean; + sendDate: boolean; + /** + * @deprecated Use `writableEnded` instead. + */ + finished: boolean; + headersSent: boolean; + /** + * @deprecated Use `socket` instead. + */ + connection: Socket | null; + socket: Socket | null; + + constructor(); + + setTimeout(msecs: number, callback?: () => void): this; + setHeader(name: string, value: number | string | ReadonlyArray): this; + getHeader(name: string): number | string | string[] | undefined; + getHeaders(): OutgoingHttpHeaders; + getHeaderNames(): string[]; + hasHeader(name: string): boolean; + removeHeader(name: string): void; + addTrailers(headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void; + flushHeaders(): void; + } + + // https://github.com/nodejs/node/blob/master/lib/_http_server.js#L108-L256 + class ServerResponse extends OutgoingMessage { + statusCode: number; + statusMessage: string; + + constructor(req: IncomingMessage); + + assignSocket(socket: Socket): void; + detachSocket(socket: Socket): void; + // https://github.com/nodejs/node/blob/master/test/parallel/test-http-write-callbacks.js#L53 + // no args in writeContinue callback + writeContinue(callback?: () => void): void; + writeHead( + statusCode: number, + statusMessage?: string, + headers?: OutgoingHttpHeaders | OutgoingHttpHeader[], + ): this; + writeHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[]): this; + writeProcessing(): void; + } + + interface InformationEvent { + statusCode: number; + statusMessage: string; + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + headers: IncomingHttpHeaders; + rawHeaders: string[]; + } + + // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L77 + class ClientRequest extends OutgoingMessage { + aborted: boolean; + host: string; + protocol: string; + reusedSocket: boolean; + maxHeadersCount: number; + + constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void); + + method: string; + path: string; + /** @deprecated since v14.1.0 Use `request.destroy()` instead. */ + abort(): void; + onSocket(socket: Socket): void; + setTimeout(timeout: number, callback?: () => void): this; + setNoDelay(noDelay?: boolean): void; + setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; + + addListener(event: "abort", listener: () => void): this; + addListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + addListener(event: "continue", listener: () => void): this; + addListener(event: "information", listener: (info: InformationEvent) => void): this; + addListener(event: "response", listener: (response: IncomingMessage) => void): this; + addListener(event: "socket", listener: (socket: Socket) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + on(event: "abort", listener: () => void): this; + on(event: "connect", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: "continue", listener: () => void): this; + on(event: "information", listener: (info: InformationEvent) => void): this; + on(event: "response", listener: (response: IncomingMessage) => void): this; + on(event: "socket", listener: (socket: Socket) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: "upgrade", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "abort", listener: () => void): this; + once(event: "connect", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: "continue", listener: () => void): this; + once(event: "information", listener: (info: InformationEvent) => void): this; + once(event: "response", listener: (response: IncomingMessage) => void): this; + once(event: "socket", listener: (socket: Socket) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: "upgrade", listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this; + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "abort", listener: () => void): this; + prependListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependListener(event: "continue", listener: () => void): this; + prependListener(event: "information", listener: (info: InformationEvent) => void): this; + prependListener(event: "response", listener: (response: IncomingMessage) => void): this; + prependListener(event: "socket", listener: (socket: Socket) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "abort", listener: () => void): this; + prependOnceListener( + event: "connect", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependOnceListener(event: "continue", listener: () => void): this; + prependOnceListener(event: "information", listener: (info: InformationEvent) => void): this; + prependOnceListener(event: "response", listener: (response: IncomingMessage) => void): this; + prependOnceListener(event: "socket", listener: (socket: Socket) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener( + event: "upgrade", + listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void, + ): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + class IncomingMessage extends stream.Readable { + constructor(socket: Socket); + + aborted: boolean; + httpVersion: string; + httpVersionMajor: number; + httpVersionMinor: number; + complete: boolean; + /** + * @deprecated since v13.0.0 - Use `socket` instead. + */ + connection: Socket; + socket: Socket; + headers: IncomingHttpHeaders; + rawHeaders: string[]; + trailers: NodeJS.Dict; + rawTrailers: string[]; + setTimeout(msecs: number, callback?: () => void): this; + /** + * Only valid for request obtained from http.Server. + */ + method?: string | undefined; + /** + * Only valid for request obtained from http.Server. + */ + url?: string | undefined; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusCode?: number | undefined; + /** + * Only valid for response obtained from http.ClientRequest. + */ + statusMessage?: string | undefined; + destroy(error?: Error): this; + } + + interface AgentOptions { + /** + * Keep sockets around in a pool to be used by other requests in the future. Default = false + */ + keepAlive?: boolean | undefined; + /** + * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. + * Only relevant if keepAlive is set to true. + */ + keepAliveMsecs?: number | undefined; + /** + * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity + */ + maxSockets?: number | undefined; + /** + * Maximum number of sockets allowed for all hosts in total. Each request will use a new socket until the maximum is reached. Default: Infinity. + */ + maxTotalSockets?: number | undefined; + /** + * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. + */ + maxFreeSockets?: number | undefined; + /** + * Socket timeout in milliseconds. This will set the timeout after the socket is connected. + */ + timeout?: number | undefined; + /** + * Scheduling strategy to apply when picking the next free socket to use. Default: 'fifo'. + */ + scheduling?: "fifo" | "lifo" | undefined; + } + + class Agent { + maxFreeSockets: number; + maxSockets: number; + maxTotalSockets: number; + readonly freeSockets: NodeJS.ReadOnlyDict; + readonly sockets: NodeJS.ReadOnlyDict; + readonly requests: NodeJS.ReadOnlyDict; + + constructor(opts?: AgentOptions); + + /** + * Destroy any sockets that are currently in use by the agent. + * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled, + * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise, + * sockets may hang open for quite a long time before the server terminates them. + */ + destroy(): void; + } + + const METHODS: string[]; + + const STATUS_CODES: { + [errorCode: number]: string | undefined; + [errorCode: string]: string | undefined; + }; + + function createServer< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + >(requestListener?: RequestListener): Server; + function createServer< + Request extends typeof IncomingMessage = typeof IncomingMessage, + Response extends typeof ServerResponse = typeof ServerResponse, + >( + options: ServerOptions, + requestListener?: RequestListener, + ): Server; + + // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly, + // create interface RequestOptions would make the naming more clear to developers + interface RequestOptions extends ClientRequestArgs {} + function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function request( + url: string | URL, + options: RequestOptions, + callback?: (res: IncomingMessage) => void, + ): ClientRequest; + function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; + function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; + + /** + * Performs the low-level validations on the provided name that are done when `res.setHeader(name, value)` is called. + * Passing illegal value as name will result in a TypeError being thrown, identified by `code: 'ERR_INVALID_HTTP_TOKEN'`. + * @param name Header name + * @since v14.3.0 + */ + function validateHeaderName(name: string): void; + /** + * Performs the low-level validations on the provided value that are done when `res.setHeader(name, value)` is called. + * Passing illegal value as value will result in a TypeError being thrown. + * - Undefined value error is identified by `code: 'ERR_HTTP_INVALID_HEADER_VALUE'`. + * - Invalid value character error is identified by `code: 'ERR_INVALID_CHAR'`. + * @param name Header name + * @param value Header value + * @since v14.3.0 + */ + function validateHeaderValue(name: string, value: string): void; + + let globalAgent: Agent; + + /** + * Read-only property specifying the maximum allowed size of HTTP headers in bytes. + * Defaults to 16KB. Configurable using the [`--max-http-header-size`][] CLI option. + */ + const maxHeaderSize: number; +} +declare module "node:http" { + export * from "http"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/http2.d.ts b/node_backend/node_modules/@types/node/ts4.8/http2.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b63302bbcd648baddf6c90ff6a45f766acdf1b92 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/http2.d.ts @@ -0,0 +1,1208 @@ +declare module "http2" { + import EventEmitter = require("events"); + import * as fs from "fs"; + import * as net from "net"; + import * as stream from "stream"; + import * as tls from "tls"; + import * as url from "url"; + + import { + IncomingHttpHeaders as Http1IncomingHttpHeaders, + IncomingMessage, + OutgoingHttpHeaders, + ServerResponse, + } from "http"; + export { OutgoingHttpHeaders } from "http"; + + export interface IncomingHttpStatusHeader { + ":status"?: number | undefined; + } + + export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders { + ":path"?: string | undefined; + ":method"?: string | undefined; + ":authority"?: string | undefined; + ":scheme"?: string | undefined; + } + + // Http2Stream + + export interface StreamPriorityOptions { + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + silent?: boolean | undefined; + } + + export interface StreamState { + localWindowSize?: number | undefined; + state?: number | undefined; + localClose?: number | undefined; + remoteClose?: number | undefined; + sumDependencyWeight?: number | undefined; + weight?: number | undefined; + } + + export interface ServerStreamResponseOptions { + endStream?: boolean | undefined; + waitForTrailers?: boolean | undefined; + } + + export interface StatOptions { + offset: number; + length: number; + } + + export interface ServerStreamFileResponseOptions { + statCheck?(stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions): void | boolean; + waitForTrailers?: boolean | undefined; + offset?: number | undefined; + length?: number | undefined; + } + + export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions { + onError?(err: NodeJS.ErrnoException): void; + } + + export interface Http2Stream extends stream.Duplex { + readonly aborted: boolean; + readonly bufferSize: number; + readonly closed: boolean; + readonly destroyed: boolean; + /** + * Set the true if the END_STREAM flag was set in the request or response HEADERS frame received, + * indicating that no additional data should be received and the readable side of the Http2Stream will be closed. + */ + readonly endAfterHeaders: boolean; + readonly id?: number | undefined; + readonly pending: boolean; + readonly rstCode: number; + readonly sentHeaders: OutgoingHttpHeaders; + readonly sentInfoHeaders?: OutgoingHttpHeaders[] | undefined; + readonly sentTrailers?: OutgoingHttpHeaders | undefined; + readonly session: Http2Session | undefined; + readonly state: StreamState; + + close(code?: number, callback?: () => void): void; + priority(options: StreamPriorityOptions): void; + setTimeout(msecs: number, callback?: () => void): void; + sendTrailers(headers: OutgoingHttpHeaders): void; + + addListener(event: "aborted", listener: () => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: "streamClosed", listener: (code: number) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + addListener(event: "wantTrailers", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "aborted"): boolean; + emit(event: "close"): boolean; + emit(event: "data", chunk: Buffer | string): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "frameError", frameType: number, errorCode: number): boolean; + emit(event: "pipe", src: stream.Readable): boolean; + emit(event: "unpipe", src: stream.Readable): boolean; + emit(event: "streamClosed", code: number): boolean; + emit(event: "timeout"): boolean; + emit(event: "trailers", trailers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "wantTrailers"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "aborted", listener: () => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: "streamClosed", listener: (code: number) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + on(event: "wantTrailers", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "aborted", listener: () => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: "streamClosed", listener: (code: number) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + once(event: "wantTrailers", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "aborted", listener: () => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "streamClosed", listener: (code: number) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependListener(event: "wantTrailers", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "aborted", listener: () => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "streamClosed", listener: (code: number) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener(event: "wantTrailers", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export interface ClientHttp2Stream extends Http2Stream { + addListener(event: "continue", listener: () => {}): this; + addListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + addListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + addListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "continue"): boolean; + emit(event: "headers", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: "push", headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "response", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "continue", listener: () => {}): this; + on( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + on(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + on( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "continue", listener: () => {}): this; + once( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + once(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + once( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "continue", listener: () => {}): this; + prependListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "continue", listener: () => {}): this; + prependOnceListener( + event: "headers", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependOnceListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this; + prependOnceListener( + event: "response", + listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export interface ServerHttp2Stream extends Http2Stream { + readonly headersSent: boolean; + readonly pushAllowed: boolean; + additionalHeaders(headers: OutgoingHttpHeaders): void; + pushStream( + headers: OutgoingHttpHeaders, + callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, + ): void; + pushStream( + headers: OutgoingHttpHeaders, + options?: StreamPriorityOptions, + callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, + ): void; + respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void; + respondWithFD( + fd: number | fs.promises.FileHandle, + headers?: OutgoingHttpHeaders, + options?: ServerStreamFileResponseOptions, + ): void; + respondWithFile( + path: string, + headers?: OutgoingHttpHeaders, + options?: ServerStreamFileResponseOptionsWithError, + ): void; + } + + // Http2Session + + export interface Settings { + headerTableSize?: number | undefined; + enablePush?: boolean | undefined; + initialWindowSize?: number | undefined; + maxFrameSize?: number | undefined; + maxConcurrentStreams?: number | undefined; + maxHeaderListSize?: number | undefined; + enableConnectProtocol?: boolean | undefined; + } + + export interface ClientSessionRequestOptions { + endStream?: boolean | undefined; + exclusive?: boolean | undefined; + parent?: number | undefined; + weight?: number | undefined; + waitForTrailers?: boolean | undefined; + signal?: AbortSignal | undefined; + } + + export interface SessionState { + effectiveLocalWindowSize?: number | undefined; + effectiveRecvDataLength?: number | undefined; + nextStreamID?: number | undefined; + localWindowSize?: number | undefined; + lastProcStreamID?: number | undefined; + remoteWindowSize?: number | undefined; + outboundQueueSize?: number | undefined; + deflateDynamicTableSize?: number | undefined; + inflateDynamicTableSize?: number | undefined; + } + + export interface Http2Session extends EventEmitter { + readonly alpnProtocol?: string | undefined; + readonly closed: boolean; + readonly connecting: boolean; + readonly destroyed: boolean; + readonly encrypted?: boolean | undefined; + readonly localSettings: Settings; + readonly originSet?: string[] | undefined; + readonly pendingSettingsAck: boolean; + readonly remoteSettings: Settings; + readonly socket: net.Socket | tls.TLSSocket; + readonly state: SessionState; + readonly type: number; + + close(callback?: () => void): void; + destroy(error?: Error, code?: number): void; + goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void; + ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean; + ping( + payload: NodeJS.ArrayBufferView, + callback: (err: Error | null, duration: number, payload: Buffer) => void, + ): boolean; + ref(): void; + setLocalWindowSize(windowSize: number): void; + setTimeout(msecs: number, callback?: () => void): void; + settings( + settings: Settings, + callback?: (err: Error | null, settings: Settings, duration: number) => void, + ): void; + unref(): void; + + addListener(event: "close", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + addListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + addListener(event: "localSettings", listener: (settings: Settings) => void): this; + addListener(event: "ping", listener: () => void): this; + addListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "frameError", frameType: number, errorCode: number, streamID: number): boolean; + emit(event: "goaway", errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean; + emit(event: "localSettings", settings: Settings): boolean; + emit(event: "ping"): boolean; + emit(event: "remoteSettings", settings: Settings): boolean; + emit(event: "timeout"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; + on(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + on(event: "localSettings", listener: (settings: Settings) => void): this; + on(event: "ping", listener: () => void): this; + on(event: "remoteSettings", listener: (settings: Settings) => void): this; + on(event: "timeout", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this; + once(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this; + once(event: "localSettings", listener: (settings: Settings) => void): this; + once(event: "ping", listener: () => void): this; + once(event: "remoteSettings", listener: (settings: Settings) => void): this; + once(event: "timeout", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + prependListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + prependListener(event: "localSettings", listener: (settings: Settings) => void): this; + prependListener(event: "ping", listener: () => void): this; + prependListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "frameError", + listener: (frameType: number, errorCode: number, streamID: number) => void, + ): this; + prependOnceListener( + event: "goaway", + listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void, + ): this; + prependOnceListener(event: "localSettings", listener: (settings: Settings) => void): this; + prependOnceListener(event: "ping", listener: () => void): this; + prependOnceListener(event: "remoteSettings", listener: (settings: Settings) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export interface ClientHttp2Session extends Http2Session { + request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream; + + addListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + addListener(event: "origin", listener: (origins: string[]) => void): this; + addListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + addListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "altsvc", alt: string, origin: string, stream: number): boolean; + emit(event: "origin", origins: ReadonlyArray): boolean; + emit(event: "connect", session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit( + event: "stream", + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + on(event: "origin", listener: (origins: string[]) => void): this; + on(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + once(event: "origin", listener: (origins: string[]) => void): this; + once( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + once( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + prependListener(event: "origin", listener: (origins: string[]) => void): this; + prependListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this; + prependOnceListener(event: "origin", listener: (origins: string[]) => void): this; + prependOnceListener( + event: "connect", + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependOnceListener( + event: "stream", + listener: ( + stream: ClientHttp2Stream, + headers: IncomingHttpHeaders & IncomingHttpStatusHeader, + flags: number, + ) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export interface AlternativeServiceOptions { + origin: number | string | url.URL; + } + + export interface ServerHttp2Session extends Http2Session { + readonly server: Http2Server | Http2SecureServer; + + altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void; + origin(...args: Array): void; + + addListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "connect", session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener( + event: "connect", + listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + // Http2Server + + export interface SessionOptions { + maxDeflateDynamicTableSize?: number | undefined; + maxSessionMemory?: number | undefined; + maxHeaderListPairs?: number | undefined; + maxOutstandingPings?: number | undefined; + maxSendHeaderBlockLength?: number | undefined; + paddingStrategy?: number | undefined; + peerMaxConcurrentStreams?: number | undefined; + settings?: Settings | undefined; + + selectPadding?(frameLen: number, maxFrameLen: number): number; + } + + export interface ClientSessionOptions extends SessionOptions { + maxReservedRemoteStreams?: number | undefined; + createConnection?: ((authority: url.URL, option: SessionOptions) => stream.Duplex) | undefined; + protocol?: "http:" | "https:" | undefined; + } + + export interface ServerSessionOptions extends SessionOptions { + Http1IncomingMessage?: typeof IncomingMessage | undefined; + Http1ServerResponse?: typeof ServerResponse | undefined; + Http2ServerRequest?: typeof Http2ServerRequest | undefined; + Http2ServerResponse?: typeof Http2ServerResponse | undefined; + } + + export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions {} + export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions {} + + export interface ServerOptions extends ServerSessionOptions {} + + export interface SecureServerOptions extends SecureServerSessionOptions { + allowHTTP1?: boolean | undefined; + origins?: string[] | undefined; + } + + export interface Http2Server extends net.Server { + addListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + addListener(event: "sessionError", listener: (err: Error) => void): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "session", session: ServerHttp2Session): boolean; + emit(event: "sessionError", err: Error): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "timeout"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: "session", listener: (session: ServerHttp2Session) => void): this; + on(event: "sessionError", listener: (err: Error) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: "timeout", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: "session", listener: (session: ServerHttp2Session) => void): this; + once(event: "sessionError", listener: (err: Error) => void): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: "timeout", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependListener(event: "sessionError", listener: (err: Error) => void): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + setTimeout(msec?: number, callback?: () => void): this; + } + + export interface Http2SecureServer extends tls.Server { + addListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + addListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + addListener(event: "sessionError", listener: (err: Error) => void): this; + addListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + addListener(event: "timeout", listener: () => void): this; + addListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean; + emit(event: "session", session: ServerHttp2Session): boolean; + emit(event: "sessionError", err: Error): boolean; + emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean; + emit(event: "timeout"): boolean; + emit(event: "unknownProtocol", socket: tls.TLSSocket): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + on(event: "session", listener: (session: ServerHttp2Session) => void): this; + on(event: "sessionError", listener: (err: Error) => void): this; + on( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + on(event: "timeout", listener: () => void): this; + on(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this; + once(event: "session", listener: (session: ServerHttp2Session) => void): this; + once(event: "sessionError", listener: (err: Error) => void): this; + once( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + once(event: "timeout", listener: () => void): this; + once(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependListener(event: "sessionError", listener: (err: Error) => void): this; + prependListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependListener(event: "timeout", listener: () => void): this; + prependListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener( + event: "checkContinue", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener( + event: "request", + listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): this; + prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this; + prependOnceListener(event: "sessionError", listener: (err: Error) => void): this; + prependOnceListener( + event: "stream", + listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void, + ): this; + prependOnceListener(event: "timeout", listener: () => void): this; + prependOnceListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + setTimeout(msec?: number, callback?: () => void): this; + } + + export class Http2ServerRequest extends stream.Readable { + constructor( + stream: ServerHttp2Stream, + headers: IncomingHttpHeaders, + options: stream.ReadableOptions, + rawHeaders: ReadonlyArray, + ); + + readonly aborted: boolean; + readonly authority: string; + readonly connection: net.Socket | tls.TLSSocket; + readonly complete: boolean; + readonly headers: IncomingHttpHeaders; + readonly httpVersion: string; + readonly httpVersionMinor: number; + readonly httpVersionMajor: number; + readonly method: string; + readonly rawHeaders: string[]; + readonly rawTrailers: string[]; + readonly scheme: string; + readonly socket: net.Socket | tls.TLSSocket; + readonly stream: ServerHttp2Stream; + readonly trailers: IncomingHttpHeaders; + url: string; + + setTimeout(msecs: number, callback?: () => void): void; + read(size?: number): Buffer | string | null; + + addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: Buffer | string) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "aborted", hadError: boolean, code: number): boolean; + emit(event: "close"): boolean; + emit(event: "data", chunk: Buffer | string): boolean; + emit(event: "end"): boolean; + emit(event: "readable"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: Buffer | string) => void): this; + on(event: "end", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: Buffer | string) => void): this; + once(event: "end", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + export class Http2ServerResponse extends stream.Writable { + constructor(stream: ServerHttp2Stream); + + readonly connection: net.Socket | tls.TLSSocket; + readonly finished: boolean; + readonly headersSent: boolean; + readonly socket: net.Socket | tls.TLSSocket; + readonly stream: ServerHttp2Stream; + sendDate: boolean; + statusCode: number; + statusMessage: ""; + addTrailers(trailers: OutgoingHttpHeaders): void; + end(callback?: () => void): this; + end(data: string | Uint8Array, callback?: () => void): this; + end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): this; + getHeader(name: string): string; + getHeaderNames(): string[]; + getHeaders(): OutgoingHttpHeaders; + hasHeader(name: string): boolean; + removeHeader(name: string): void; + setHeader(name: string, value: number | string | ReadonlyArray): void; + setTimeout(msecs: number, callback?: () => void): void; + write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean; + write(chunk: string | Uint8Array, encoding: BufferEncoding, callback?: (err: Error) => void): boolean; + writeContinue(): void; + writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this; + writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders): this; + createPushResponse( + headers: OutgoingHttpHeaders, + callback: (err: Error | null, res: Http2ServerResponse) => void, + ): void; + + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (error: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: stream.Readable) => void): this; + addListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "drain"): boolean; + emit(event: "error", error: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pipe", src: stream.Readable): boolean; + emit(event: "unpipe", src: stream.Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (error: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: stream.Readable) => void): this; + on(event: "unpipe", listener: (src: stream.Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (error: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: stream.Readable) => void): this; + once(event: "unpipe", listener: (src: stream.Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (error: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (error: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + // Public API + + export namespace constants { + const NGHTTP2_SESSION_SERVER: number; + const NGHTTP2_SESSION_CLIENT: number; + const NGHTTP2_STREAM_STATE_IDLE: number; + const NGHTTP2_STREAM_STATE_OPEN: number; + const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number; + const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number; + const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number; + const NGHTTP2_STREAM_STATE_CLOSED: number; + const NGHTTP2_NO_ERROR: number; + const NGHTTP2_PROTOCOL_ERROR: number; + const NGHTTP2_INTERNAL_ERROR: number; + const NGHTTP2_FLOW_CONTROL_ERROR: number; + const NGHTTP2_SETTINGS_TIMEOUT: number; + const NGHTTP2_STREAM_CLOSED: number; + const NGHTTP2_FRAME_SIZE_ERROR: number; + const NGHTTP2_REFUSED_STREAM: number; + const NGHTTP2_CANCEL: number; + const NGHTTP2_COMPRESSION_ERROR: number; + const NGHTTP2_CONNECT_ERROR: number; + const NGHTTP2_ENHANCE_YOUR_CALM: number; + const NGHTTP2_INADEQUATE_SECURITY: number; + const NGHTTP2_HTTP_1_1_REQUIRED: number; + const NGHTTP2_ERR_FRAME_SIZE_ERROR: number; + const NGHTTP2_FLAG_NONE: number; + const NGHTTP2_FLAG_END_STREAM: number; + const NGHTTP2_FLAG_END_HEADERS: number; + const NGHTTP2_FLAG_ACK: number; + const NGHTTP2_FLAG_PADDED: number; + const NGHTTP2_FLAG_PRIORITY: number; + const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number; + const DEFAULT_SETTINGS_ENABLE_PUSH: number; + const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number; + const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number; + const MAX_MAX_FRAME_SIZE: number; + const MIN_MAX_FRAME_SIZE: number; + const MAX_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_DEFAULT_WEIGHT: number; + const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number; + const NGHTTP2_SETTINGS_ENABLE_PUSH: number; + const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number; + const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number; + const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number; + const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number; + const PADDING_STRATEGY_NONE: number; + const PADDING_STRATEGY_MAX: number; + const PADDING_STRATEGY_CALLBACK: number; + const HTTP2_HEADER_STATUS: string; + const HTTP2_HEADER_METHOD: string; + const HTTP2_HEADER_AUTHORITY: string; + const HTTP2_HEADER_SCHEME: string; + const HTTP2_HEADER_PATH: string; + const HTTP2_HEADER_ACCEPT_CHARSET: string; + const HTTP2_HEADER_ACCEPT_ENCODING: string; + const HTTP2_HEADER_ACCEPT_LANGUAGE: string; + const HTTP2_HEADER_ACCEPT_RANGES: string; + const HTTP2_HEADER_ACCEPT: string; + const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string; + const HTTP2_HEADER_AGE: string; + const HTTP2_HEADER_ALLOW: string; + const HTTP2_HEADER_AUTHORIZATION: string; + const HTTP2_HEADER_CACHE_CONTROL: string; + const HTTP2_HEADER_CONNECTION: string; + const HTTP2_HEADER_CONTENT_DISPOSITION: string; + const HTTP2_HEADER_CONTENT_ENCODING: string; + const HTTP2_HEADER_CONTENT_LANGUAGE: string; + const HTTP2_HEADER_CONTENT_LENGTH: string; + const HTTP2_HEADER_CONTENT_LOCATION: string; + const HTTP2_HEADER_CONTENT_MD5: string; + const HTTP2_HEADER_CONTENT_RANGE: string; + const HTTP2_HEADER_CONTENT_TYPE: string; + const HTTP2_HEADER_COOKIE: string; + const HTTP2_HEADER_DATE: string; + const HTTP2_HEADER_ETAG: string; + const HTTP2_HEADER_EXPECT: string; + const HTTP2_HEADER_EXPIRES: string; + const HTTP2_HEADER_FROM: string; + const HTTP2_HEADER_HOST: string; + const HTTP2_HEADER_IF_MATCH: string; + const HTTP2_HEADER_IF_MODIFIED_SINCE: string; + const HTTP2_HEADER_IF_NONE_MATCH: string; + const HTTP2_HEADER_IF_RANGE: string; + const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string; + const HTTP2_HEADER_LAST_MODIFIED: string; + const HTTP2_HEADER_LINK: string; + const HTTP2_HEADER_LOCATION: string; + const HTTP2_HEADER_MAX_FORWARDS: string; + const HTTP2_HEADER_PREFER: string; + const HTTP2_HEADER_PROXY_AUTHENTICATE: string; + const HTTP2_HEADER_PROXY_AUTHORIZATION: string; + const HTTP2_HEADER_RANGE: string; + const HTTP2_HEADER_REFERER: string; + const HTTP2_HEADER_REFRESH: string; + const HTTP2_HEADER_RETRY_AFTER: string; + const HTTP2_HEADER_SERVER: string; + const HTTP2_HEADER_SET_COOKIE: string; + const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string; + const HTTP2_HEADER_TRANSFER_ENCODING: string; + const HTTP2_HEADER_TE: string; + const HTTP2_HEADER_UPGRADE: string; + const HTTP2_HEADER_USER_AGENT: string; + const HTTP2_HEADER_VARY: string; + const HTTP2_HEADER_VIA: string; + const HTTP2_HEADER_WWW_AUTHENTICATE: string; + const HTTP2_HEADER_HTTP2_SETTINGS: string; + const HTTP2_HEADER_KEEP_ALIVE: string; + const HTTP2_HEADER_PROXY_CONNECTION: string; + const HTTP2_METHOD_ACL: string; + const HTTP2_METHOD_BASELINE_CONTROL: string; + const HTTP2_METHOD_BIND: string; + const HTTP2_METHOD_CHECKIN: string; + const HTTP2_METHOD_CHECKOUT: string; + const HTTP2_METHOD_CONNECT: string; + const HTTP2_METHOD_COPY: string; + const HTTP2_METHOD_DELETE: string; + const HTTP2_METHOD_GET: string; + const HTTP2_METHOD_HEAD: string; + const HTTP2_METHOD_LABEL: string; + const HTTP2_METHOD_LINK: string; + const HTTP2_METHOD_LOCK: string; + const HTTP2_METHOD_MERGE: string; + const HTTP2_METHOD_MKACTIVITY: string; + const HTTP2_METHOD_MKCALENDAR: string; + const HTTP2_METHOD_MKCOL: string; + const HTTP2_METHOD_MKREDIRECTREF: string; + const HTTP2_METHOD_MKWORKSPACE: string; + const HTTP2_METHOD_MOVE: string; + const HTTP2_METHOD_OPTIONS: string; + const HTTP2_METHOD_ORDERPATCH: string; + const HTTP2_METHOD_PATCH: string; + const HTTP2_METHOD_POST: string; + const HTTP2_METHOD_PRI: string; + const HTTP2_METHOD_PROPFIND: string; + const HTTP2_METHOD_PROPPATCH: string; + const HTTP2_METHOD_PUT: string; + const HTTP2_METHOD_REBIND: string; + const HTTP2_METHOD_REPORT: string; + const HTTP2_METHOD_SEARCH: string; + const HTTP2_METHOD_TRACE: string; + const HTTP2_METHOD_UNBIND: string; + const HTTP2_METHOD_UNCHECKOUT: string; + const HTTP2_METHOD_UNLINK: string; + const HTTP2_METHOD_UNLOCK: string; + const HTTP2_METHOD_UPDATE: string; + const HTTP2_METHOD_UPDATEREDIRECTREF: string; + const HTTP2_METHOD_VERSION_CONTROL: string; + const HTTP_STATUS_CONTINUE: number; + const HTTP_STATUS_SWITCHING_PROTOCOLS: number; + const HTTP_STATUS_PROCESSING: number; + const HTTP_STATUS_OK: number; + const HTTP_STATUS_CREATED: number; + const HTTP_STATUS_ACCEPTED: number; + const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number; + const HTTP_STATUS_NO_CONTENT: number; + const HTTP_STATUS_RESET_CONTENT: number; + const HTTP_STATUS_PARTIAL_CONTENT: number; + const HTTP_STATUS_MULTI_STATUS: number; + const HTTP_STATUS_ALREADY_REPORTED: number; + const HTTP_STATUS_IM_USED: number; + const HTTP_STATUS_MULTIPLE_CHOICES: number; + const HTTP_STATUS_MOVED_PERMANENTLY: number; + const HTTP_STATUS_FOUND: number; + const HTTP_STATUS_SEE_OTHER: number; + const HTTP_STATUS_NOT_MODIFIED: number; + const HTTP_STATUS_USE_PROXY: number; + const HTTP_STATUS_TEMPORARY_REDIRECT: number; + const HTTP_STATUS_PERMANENT_REDIRECT: number; + const HTTP_STATUS_BAD_REQUEST: number; + const HTTP_STATUS_UNAUTHORIZED: number; + const HTTP_STATUS_PAYMENT_REQUIRED: number; + const HTTP_STATUS_FORBIDDEN: number; + const HTTP_STATUS_NOT_FOUND: number; + const HTTP_STATUS_METHOD_NOT_ALLOWED: number; + const HTTP_STATUS_NOT_ACCEPTABLE: number; + const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number; + const HTTP_STATUS_REQUEST_TIMEOUT: number; + const HTTP_STATUS_CONFLICT: number; + const HTTP_STATUS_GONE: number; + const HTTP_STATUS_LENGTH_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_FAILED: number; + const HTTP_STATUS_PAYLOAD_TOO_LARGE: number; + const HTTP_STATUS_URI_TOO_LONG: number; + const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number; + const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number; + const HTTP_STATUS_EXPECTATION_FAILED: number; + const HTTP_STATUS_TEAPOT: number; + const HTTP_STATUS_MISDIRECTED_REQUEST: number; + const HTTP_STATUS_UNPROCESSABLE_ENTITY: number; + const HTTP_STATUS_LOCKED: number; + const HTTP_STATUS_FAILED_DEPENDENCY: number; + const HTTP_STATUS_UNORDERED_COLLECTION: number; + const HTTP_STATUS_UPGRADE_REQUIRED: number; + const HTTP_STATUS_PRECONDITION_REQUIRED: number; + const HTTP_STATUS_TOO_MANY_REQUESTS: number; + const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number; + const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number; + const HTTP_STATUS_INTERNAL_SERVER_ERROR: number; + const HTTP_STATUS_NOT_IMPLEMENTED: number; + const HTTP_STATUS_BAD_GATEWAY: number; + const HTTP_STATUS_SERVICE_UNAVAILABLE: number; + const HTTP_STATUS_GATEWAY_TIMEOUT: number; + const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number; + const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number; + const HTTP_STATUS_INSUFFICIENT_STORAGE: number; + const HTTP_STATUS_LOOP_DETECTED: number; + const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number; + const HTTP_STATUS_NOT_EXTENDED: number; + const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number; + } + + export function getDefaultSettings(): Settings; + export function getPackedSettings(settings: Settings): Buffer; + export function getUnpackedSettings(buf: Uint8Array): Settings; + + export function createServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2Server; + export function createServer( + options: ServerOptions, + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2Server; + + export function createSecureServer( + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2SecureServer; + export function createSecureServer( + options: SecureServerOptions, + onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, + ): Http2SecureServer; + + export function connect( + authority: string | url.URL, + listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; + export function connect( + authority: string | url.URL, + options?: ClientSessionOptions | SecureClientSessionOptions, + listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, + ): ClientHttp2Session; +} +declare module "node:http2" { + export * from "http2"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/https.d.ts b/node_backend/node_modules/@types/node/ts4.8/https.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5787c3d9116267c5e5eb2bf8cf0b515a0e4a9073 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/https.d.ts @@ -0,0 +1,274 @@ +declare module "https" { + import { Duplex } from "stream"; + import * as tls from "tls"; + import * as http from "http"; + import { URL } from "url"; + + type ServerOptions< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > = tls.SecureContextOptions & tls.TlsOptions & http.ServerOptions; + + type RequestOptions = + & http.RequestOptions + & tls.SecureContextOptions + & { + checkServerIdentity?: typeof tls.checkServerIdentity | undefined; + rejectUnauthorized?: boolean | undefined; // Defaults to true + servername?: string | undefined; // SNI TLS Extension + }; + + interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions { + rejectUnauthorized?: boolean | undefined; + maxCachedSessions?: number | undefined; + } + + class Agent extends http.Agent { + constructor(options?: AgentOptions); + options: AgentOptions; + } + + interface Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > extends http.Server {} + class Server< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + > extends tls.Server { + constructor(requestListener?: http.RequestListener); + constructor( + options: ServerOptions, + requestListener?: http.RequestListener, + ); + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Duplex) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "checkContinue", listener: http.RequestListener): this; + addListener(event: "checkExpectation", listener: http.RequestListener): this; + addListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + addListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + addListener(event: "request", listener: http.RequestListener): this; + addListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + emit(event: string, ...args: any[]): boolean; + emit(event: "keylog", line: Buffer, tlsSocket: tls.TLSSocket): boolean; + emit( + event: "newSession", + sessionId: Buffer, + sessionData: Buffer, + callback: (err: Error, resp: Buffer) => void, + ): boolean; + emit( + event: "OCSPRequest", + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ): boolean; + emit(event: "resumeSession", sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void): boolean; + emit(event: "secureConnection", tlsSocket: tls.TLSSocket): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: tls.TLSSocket): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Duplex): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "checkContinue", req: InstanceType, res: InstanceType): boolean; + emit(event: "checkExpectation", req: InstanceType, res: InstanceType): boolean; + emit(event: "clientError", err: Error, socket: Duplex): boolean; + emit(event: "connect", req: InstanceType, socket: Duplex, head: Buffer): boolean; + emit(event: "request", req: InstanceType, res: InstanceType): boolean; + emit(event: "upgrade", req: InstanceType, socket: Duplex, head: Buffer): boolean; + on(event: string, listener: (...args: any[]) => void): this; + on(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + on( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + on( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Duplex) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "checkContinue", listener: http.RequestListener): this; + on(event: "checkExpectation", listener: http.RequestListener): this; + on(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + on(event: "connect", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + on(event: "request", listener: http.RequestListener): this; + on(event: "upgrade", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + once(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Duplex) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "checkContinue", listener: http.RequestListener): this; + once(event: "checkExpectation", listener: http.RequestListener): this; + once(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + once(event: "connect", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + once(event: "request", listener: http.RequestListener): this; + once(event: "upgrade", listener: (req: InstanceType, socket: Duplex, head: Buffer) => void): this; + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Duplex) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "checkContinue", listener: http.RequestListener): this; + prependListener(event: "checkExpectation", listener: http.RequestListener): this; + prependListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependListener(event: "request", listener: http.RequestListener): this; + prependListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: (err: Error, resp: Buffer) => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error, sessionData: Buffer) => void) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: tls.TLSSocket) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Duplex) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "checkContinue", listener: http.RequestListener): this; + prependOnceListener(event: "checkExpectation", listener: http.RequestListener): this; + prependOnceListener(event: "clientError", listener: (err: Error, socket: Duplex) => void): this; + prependOnceListener( + event: "connect", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + prependOnceListener(event: "request", listener: http.RequestListener): this; + prependOnceListener( + event: "upgrade", + listener: (req: InstanceType, socket: Duplex, head: Buffer) => void, + ): this; + } + + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + >(requestListener?: http.RequestListener): Server; + function createServer< + Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, + Response extends typeof http.ServerResponse = typeof http.ServerResponse, + >( + options: ServerOptions, + requestListener?: http.RequestListener, + ): Server; + function request( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function request( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function get( + options: RequestOptions | string | URL, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + function get( + url: string | URL, + options: RequestOptions, + callback?: (res: http.IncomingMessage) => void, + ): http.ClientRequest; + let globalAgent: Agent; +} +declare module "node:https" { + export * from "https"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/index.d.ts b/node_backend/node_modules/@types/node/ts4.8/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..74f3d350bd3d10bf623f5d5919d4d49afed2b60e --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/index.d.ts @@ -0,0 +1,53 @@ +// NOTE: These definitions support NodeJS and TypeScript 4.8 and earlier + +// Reference required types from the default lib: +/// +/// +/// +/// + +// Base definitions for all NodeJS modules that are not specific to any version of TypeScript: +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// + +/// diff --git a/node_backend/node_modules/@types/node/ts4.8/inspector.d.ts b/node_backend/node_modules/@types/node/ts4.8/inspector.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7044b7f4577608f3347ea2488c8af8e837333377 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/inspector.d.ts @@ -0,0 +1,3050 @@ +// eslint-disable-next-line @definitelytyped/dt-header +// Type definitions for inspector + +// These definitions are auto-generated. +// Please see https://github.com/DefinitelyTyped/DefinitelyTyped/pull/19330 +// for more information. + + +/** + * The inspector module provides an API for interacting with the V8 inspector. + */ +declare module 'inspector' { + import EventEmitter = require('events'); + + interface InspectorNotification { + method: string; + params: T; + } + + namespace Schema { + /** + * Description of the protocol domain. + */ + interface Domain { + /** + * Domain name. + */ + name: string; + /** + * Domain version. + */ + version: string; + } + + interface GetDomainsReturnType { + /** + * List of supported domains. + */ + domains: Domain[]; + } + } + + namespace Runtime { + /** + * Unique script identifier. + */ + type ScriptId = string; + + /** + * Unique object identifier. + */ + type RemoteObjectId = string; + + /** + * Primitive value which cannot be JSON-stringified. + */ + type UnserializableValue = string; + + /** + * Mirror object referencing original JavaScript object. + */ + interface RemoteObject { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * Object class (constructor) name. Specified for object type values only. + */ + className?: string | undefined; + /** + * Remote object value in case of primitive values or JSON values (if it was requested). + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified does not have value, but gets this property. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * Unique object identifier (for non-primitive values). + */ + objectId?: RemoteObjectId | undefined; + /** + * Preview containing abbreviated property values. Specified for object type values only. + * @experimental + */ + preview?: ObjectPreview | undefined; + /** + * @experimental + */ + customPreview?: CustomPreview | undefined; + } + + /** + * @experimental + */ + interface CustomPreview { + header: string; + hasBody: boolean; + formatterObjectId: RemoteObjectId; + bindRemoteObjectFunctionId: RemoteObjectId; + configObjectId?: RemoteObjectId | undefined; + } + + /** + * Object containing abbreviated remote object value. + * @experimental + */ + interface ObjectPreview { + /** + * Object type. + */ + type: string; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + /** + * String representation of the object. + */ + description?: string | undefined; + /** + * True iff some of the properties or entries of the original object did not fit. + */ + overflow: boolean; + /** + * List of the properties. + */ + properties: PropertyPreview[]; + /** + * List of the entries. Specified for map and set subtype values only. + */ + entries?: EntryPreview[] | undefined; + } + + /** + * @experimental + */ + interface PropertyPreview { + /** + * Property name. + */ + name: string; + /** + * Object type. Accessor means that the property itself is an accessor property. + */ + type: string; + /** + * User-friendly property value string. + */ + value?: string | undefined; + /** + * Nested value preview. + */ + valuePreview?: ObjectPreview | undefined; + /** + * Object subtype hint. Specified for object type values only. + */ + subtype?: string | undefined; + } + + /** + * @experimental + */ + interface EntryPreview { + /** + * Preview of the key. Specified for map-like collection entries. + */ + key?: ObjectPreview | undefined; + /** + * Preview of the value. + */ + value: ObjectPreview; + } + + /** + * Object property descriptor. + */ + interface PropertyDescriptor { + /** + * Property name or symbol description. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + /** + * True if the value associated with the property may be changed (data descriptors only). + */ + writable?: boolean | undefined; + /** + * A function which serves as a getter for the property, or undefined if there is no getter (accessor descriptors only). + */ + get?: RemoteObject | undefined; + /** + * A function which serves as a setter for the property, or undefined if there is no setter (accessor descriptors only). + */ + set?: RemoteObject | undefined; + /** + * True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. + */ + configurable: boolean; + /** + * True if this property shows up during enumeration of the properties on the corresponding object. + */ + enumerable: boolean; + /** + * True if the result was thrown during the evaluation. + */ + wasThrown?: boolean | undefined; + /** + * True if the property is owned for the object. + */ + isOwn?: boolean | undefined; + /** + * Property symbol object, if the property is of the symbol type. + */ + symbol?: RemoteObject | undefined; + } + + /** + * Object internal property descriptor. This property isn't normally visible in JavaScript code. + */ + interface InternalPropertyDescriptor { + /** + * Conventional property name. + */ + name: string; + /** + * The value associated with the property. + */ + value?: RemoteObject | undefined; + } + + /** + * Represents function call argument. Either remote object id objectId, primitive value, unserializable primitive value or neither of (for undefined) them should be specified. + */ + interface CallArgument { + /** + * Primitive value or serializable javascript object. + */ + value?: any; + /** + * Primitive value which can not be JSON-stringified. + */ + unserializableValue?: UnserializableValue | undefined; + /** + * Remote object handle. + */ + objectId?: RemoteObjectId | undefined; + } + + /** + * Id of an execution context. + */ + type ExecutionContextId = number; + + /** + * Description of an isolated world. + */ + interface ExecutionContextDescription { + /** + * Unique id of the execution context. It can be used to specify in which execution context script evaluation should be performed. + */ + id: ExecutionContextId; + /** + * Execution context origin. + */ + origin: string; + /** + * Human readable name describing given context. + */ + name: string; + /** + * Embedder-specific auxiliary data. + */ + auxData?: {} | undefined; + } + + /** + * Detailed information about exception (or error) that was thrown during script compilation or execution. + */ + interface ExceptionDetails { + /** + * Exception id. + */ + exceptionId: number; + /** + * Exception text, which should be used together with exception object when available. + */ + text: string; + /** + * Line number of the exception location (0-based). + */ + lineNumber: number; + /** + * Column number of the exception location (0-based). + */ + columnNumber: number; + /** + * Script ID of the exception location. + */ + scriptId?: ScriptId | undefined; + /** + * URL of the exception location, to be used when the script was not reported. + */ + url?: string | undefined; + /** + * JavaScript stack trace if available. + */ + stackTrace?: StackTrace | undefined; + /** + * Exception object if available. + */ + exception?: RemoteObject | undefined; + /** + * Identifier of the context where exception happened. + */ + executionContextId?: ExecutionContextId | undefined; + } + + /** + * Number of milliseconds since epoch. + */ + type Timestamp = number; + + /** + * Stack entry for runtime errors and assertions. + */ + interface CallFrame { + /** + * JavaScript function name. + */ + functionName: string; + /** + * JavaScript script id. + */ + scriptId: ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * JavaScript script line number (0-based). + */ + lineNumber: number; + /** + * JavaScript script column number (0-based). + */ + columnNumber: number; + } + + /** + * Call frames for assertions or error messages. + */ + interface StackTrace { + /** + * String label of this stack trace. For async traces this may be a name of the function that initiated the async call. + */ + description?: string | undefined; + /** + * JavaScript function name. + */ + callFrames: CallFrame[]; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + */ + parent?: StackTrace | undefined; + /** + * Asynchronous JavaScript stack trace that preceded this stack, if available. + * @experimental + */ + parentId?: StackTraceId | undefined; + } + + /** + * Unique identifier of current debugger. + * @experimental + */ + type UniqueDebuggerId = string; + + /** + * If debuggerId is set stack trace comes from another debugger and can be resolved there. This allows to track cross-debugger calls. See Runtime.StackTrace and Debugger.paused for usages. + * @experimental + */ + interface StackTraceId { + id: string; + debuggerId?: UniqueDebuggerId | undefined; + } + + interface EvaluateParameterType { + /** + * Expression to evaluate. + */ + expression: string; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Specifies in which execution context to perform evaluation. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + contextId?: ExecutionContextId | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + + interface AwaitPromiseParameterType { + /** + * Identifier of the promise. + */ + promiseObjectId: RemoteObjectId; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + } + + interface CallFunctionOnParameterType { + /** + * Declaration of the function to call. + */ + functionDeclaration: string; + /** + * Identifier of the object to call function on. Either objectId or executionContextId should be specified. + */ + objectId?: RemoteObjectId | undefined; + /** + * Call arguments. All call arguments must belong to the same JavaScript world as the target object. + */ + arguments?: CallArgument[] | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should be treated as initiated by user in the UI. + */ + userGesture?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + /** + * Specifies execution context which global object will be used to call function on. Either executionContextId or objectId should be specified. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. If objectGroup is not specified and objectId is, objectGroup will be inherited from object. + */ + objectGroup?: string | undefined; + } + + interface GetPropertiesParameterType { + /** + * Identifier of the object to return properties for. + */ + objectId: RemoteObjectId; + /** + * If true, returns properties belonging only to the element itself, not to its prototype chain. + */ + ownProperties?: boolean | undefined; + /** + * If true, returns accessor properties (with getter/setter) only; internal properties are not returned either. + * @experimental + */ + accessorPropertiesOnly?: boolean | undefined; + /** + * Whether preview should be generated for the results. + * @experimental + */ + generatePreview?: boolean | undefined; + } + + interface ReleaseObjectParameterType { + /** + * Identifier of the object to release. + */ + objectId: RemoteObjectId; + } + + interface ReleaseObjectGroupParameterType { + /** + * Symbolic object group name. + */ + objectGroup: string; + } + + interface SetCustomObjectFormatterEnabledParameterType { + enabled: boolean; + } + + interface CompileScriptParameterType { + /** + * Expression to compile. + */ + expression: string; + /** + * Source url to be set for the script. + */ + sourceURL: string; + /** + * Specifies whether the compiled script should be persisted. + */ + persistScript: boolean; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + } + + interface RunScriptParameterType { + /** + * Id of the script to run. + */ + scriptId: ScriptId; + /** + * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. + */ + executionContextId?: ExecutionContextId | undefined; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Determines whether Command Line API should be available during the evaluation. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object which should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + */ + generatePreview?: boolean | undefined; + /** + * Whether execution should await for resulting value and return once awaited promise is resolved. + */ + awaitPromise?: boolean | undefined; + } + + interface QueryObjectsParameterType { + /** + * Identifier of the prototype to return objects for. + */ + prototypeObjectId: RemoteObjectId; + } + + interface GlobalLexicalScopeNamesParameterType { + /** + * Specifies in which execution context to lookup global scope variables. + */ + executionContextId?: ExecutionContextId | undefined; + } + + interface EvaluateReturnType { + /** + * Evaluation result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface AwaitPromiseReturnType { + /** + * Promise result. Will contain rejected value if promise was rejected. + */ + result: RemoteObject; + /** + * Exception details if stack strace is available. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface CallFunctionOnReturnType { + /** + * Call result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface GetPropertiesReturnType { + /** + * Object properties. + */ + result: PropertyDescriptor[]; + /** + * Internal object properties (only of the element itself). + */ + internalProperties?: InternalPropertyDescriptor[] | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface CompileScriptReturnType { + /** + * Id of the script. + */ + scriptId?: ScriptId | undefined; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface RunScriptReturnType { + /** + * Run result. + */ + result: RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: ExceptionDetails | undefined; + } + + interface QueryObjectsReturnType { + /** + * Array with objects. + */ + objects: RemoteObject; + } + + interface GlobalLexicalScopeNamesReturnType { + names: string[]; + } + + interface ExecutionContextCreatedEventDataType { + /** + * A newly created execution context. + */ + context: ExecutionContextDescription; + } + + interface ExecutionContextDestroyedEventDataType { + /** + * Id of the destroyed context + */ + executionContextId: ExecutionContextId; + } + + interface ExceptionThrownEventDataType { + /** + * Timestamp of the exception. + */ + timestamp: Timestamp; + exceptionDetails: ExceptionDetails; + } + + interface ExceptionRevokedEventDataType { + /** + * Reason describing why exception was revoked. + */ + reason: string; + /** + * The id of revoked exception, as reported in exceptionThrown. + */ + exceptionId: number; + } + + interface ConsoleAPICalledEventDataType { + /** + * Type of the call. + */ + type: string; + /** + * Call arguments. + */ + args: RemoteObject[]; + /** + * Identifier of the context where the call was made. + */ + executionContextId: ExecutionContextId; + /** + * Call timestamp. + */ + timestamp: Timestamp; + /** + * Stack trace captured when the call was made. + */ + stackTrace?: StackTrace | undefined; + /** + * Console context descriptor for calls on non-default console context (not console.*): 'anonymous#unique-logger-id' for call on unnamed context, 'name#unique-logger-id' for call on named context. + * @experimental + */ + context?: string | undefined; + } + + interface InspectRequestedEventDataType { + object: RemoteObject; + hints: {}; + } + } + + namespace Debugger { + /** + * Breakpoint identifier. + */ + type BreakpointId = string; + + /** + * Call frame identifier. + */ + type CallFrameId = string; + + /** + * Location in the source code. + */ + interface Location { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + } + + /** + * Location in the source code. + * @experimental + */ + interface ScriptPosition { + lineNumber: number; + columnNumber: number; + } + + /** + * JavaScript call frame. Array of call frames form the call stack. + */ + interface CallFrame { + /** + * Call frame identifier. This identifier is only valid while the virtual machine is paused. + */ + callFrameId: CallFrameId; + /** + * Name of the JavaScript function called on this call frame. + */ + functionName: string; + /** + * Location in the source code. + */ + functionLocation?: Location | undefined; + /** + * Location in the source code. + */ + location: Location; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Scope chain for this call frame. + */ + scopeChain: Scope[]; + /** + * this object for this call frame. + */ + this: Runtime.RemoteObject; + /** + * The value being returned, if the function is at return point. + */ + returnValue?: Runtime.RemoteObject | undefined; + } + + /** + * Scope description. + */ + interface Scope { + /** + * Scope type. + */ + type: string; + /** + * Object representing the scope. For global and with scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties. + */ + object: Runtime.RemoteObject; + name?: string | undefined; + /** + * Location in the source code where scope starts + */ + startLocation?: Location | undefined; + /** + * Location in the source code where scope ends + */ + endLocation?: Location | undefined; + } + + /** + * Search match for resource. + */ + interface SearchMatch { + /** + * Line number in resource content. + */ + lineNumber: number; + /** + * Line with match content. + */ + lineContent: string; + } + + interface BreakLocation { + /** + * Script identifier as reported in the Debugger.scriptParsed. + */ + scriptId: Runtime.ScriptId; + /** + * Line number in the script (0-based). + */ + lineNumber: number; + /** + * Column number in the script (0-based). + */ + columnNumber?: number | undefined; + type?: string | undefined; + } + + interface SetBreakpointsActiveParameterType { + /** + * New value for breakpoints active state. + */ + active: boolean; + } + + interface SetSkipAllPausesParameterType { + /** + * New value for skip pauses state. + */ + skip: boolean; + } + + interface SetBreakpointByUrlParameterType { + /** + * Line number to set breakpoint at. + */ + lineNumber: number; + /** + * URL of the resources to set breakpoint on. + */ + url?: string | undefined; + /** + * Regex pattern for the URLs of the resources to set breakpoints on. Either url or urlRegex must be specified. + */ + urlRegex?: string | undefined; + /** + * Script hash of the resources to set breakpoint on. + */ + scriptHash?: string | undefined; + /** + * Offset in the line to set breakpoint at. + */ + columnNumber?: number | undefined; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + + interface SetBreakpointParameterType { + /** + * Location to set breakpoint in. + */ + location: Location; + /** + * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. + */ + condition?: string | undefined; + } + + interface RemoveBreakpointParameterType { + breakpointId: BreakpointId; + } + + interface GetPossibleBreakpointsParameterType { + /** + * Start of range to search possible breakpoint locations in. + */ + start: Location; + /** + * End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range. + */ + end?: Location | undefined; + /** + * Only consider locations which are in the same (non-nested) function as start. + */ + restrictToFunction?: boolean | undefined; + } + + interface ContinueToLocationParameterType { + /** + * Location to continue to. + */ + location: Location; + targetCallFrames?: string | undefined; + } + + interface PauseOnAsyncCallParameterType { + /** + * Debugger will pause when async call with given stack trace is started. + */ + parentStackTraceId: Runtime.StackTraceId; + } + + interface StepIntoParameterType { + /** + * Debugger will issue additional Debugger.paused notification if any async task is scheduled before next pause. + * @experimental + */ + breakOnAsyncCall?: boolean | undefined; + } + + interface GetStackTraceParameterType { + stackTraceId: Runtime.StackTraceId; + } + + interface SearchInContentParameterType { + /** + * Id of the script to search in. + */ + scriptId: Runtime.ScriptId; + /** + * String to search for. + */ + query: string; + /** + * If true, search is case sensitive. + */ + caseSensitive?: boolean | undefined; + /** + * If true, treats string parameter as regex. + */ + isRegex?: boolean | undefined; + } + + interface SetScriptSourceParameterType { + /** + * Id of the script to edit. + */ + scriptId: Runtime.ScriptId; + /** + * New content of the script. + */ + scriptSource: string; + /** + * If true the change will not actually be applied. Dry run may be used to get result description without actually modifying the code. + */ + dryRun?: boolean | undefined; + } + + interface RestartFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + } + + interface GetScriptSourceParameterType { + /** + * Id of the script to get source for. + */ + scriptId: Runtime.ScriptId; + } + + interface SetPauseOnExceptionsParameterType { + /** + * Pause on exceptions mode. + */ + state: string; + } + + interface EvaluateOnCallFrameParameterType { + /** + * Call frame identifier to evaluate on. + */ + callFrameId: CallFrameId; + /** + * Expression to evaluate. + */ + expression: string; + /** + * String object group name to put result into (allows rapid releasing resulting object handles using releaseObjectGroup). + */ + objectGroup?: string | undefined; + /** + * Specifies whether command line API should be available to the evaluated expression, defaults to false. + */ + includeCommandLineAPI?: boolean | undefined; + /** + * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. + */ + silent?: boolean | undefined; + /** + * Whether the result is expected to be a JSON object that should be sent by value. + */ + returnByValue?: boolean | undefined; + /** + * Whether preview should be generated for the result. + * @experimental + */ + generatePreview?: boolean | undefined; + /** + * Whether to throw an exception if side effect cannot be ruled out during evaluation. + */ + throwOnSideEffect?: boolean | undefined; + } + + interface SetVariableValueParameterType { + /** + * 0-based number of scope as was listed in scope chain. Only 'local', 'closure' and 'catch' scope types are allowed. Other scopes could be manipulated manually. + */ + scopeNumber: number; + /** + * Variable name. + */ + variableName: string; + /** + * New variable value. + */ + newValue: Runtime.CallArgument; + /** + * Id of callframe that holds variable. + */ + callFrameId: CallFrameId; + } + + interface SetReturnValueParameterType { + /** + * New return value. + */ + newValue: Runtime.CallArgument; + } + + interface SetAsyncCallStackDepthParameterType { + /** + * Maximum depth of async call stacks. Setting to 0 will effectively disable collecting async call stacks (default). + */ + maxDepth: number; + } + + interface SetBlackboxPatternsParameterType { + /** + * Array of regexps that will be used to check script url for blackbox state. + */ + patterns: string[]; + } + + interface SetBlackboxedRangesParameterType { + /** + * Id of the script. + */ + scriptId: Runtime.ScriptId; + positions: ScriptPosition[]; + } + + interface EnableReturnType { + /** + * Unique identifier of the debugger. + * @experimental + */ + debuggerId: Runtime.UniqueDebuggerId; + } + + interface SetBreakpointByUrlReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * List of the locations this breakpoint resolved into upon addition. + */ + locations: Location[]; + } + + interface SetBreakpointReturnType { + /** + * Id of the created breakpoint for further reference. + */ + breakpointId: BreakpointId; + /** + * Location this breakpoint resolved into. + */ + actualLocation: Location; + } + + interface GetPossibleBreakpointsReturnType { + /** + * List of the possible breakpoint locations. + */ + locations: BreakLocation[]; + } + + interface GetStackTraceReturnType { + stackTrace: Runtime.StackTrace; + } + + interface SearchInContentReturnType { + /** + * List of search matches. + */ + result: SearchMatch[]; + } + + interface SetScriptSourceReturnType { + /** + * New stack trace in case editing has happened while VM was stopped. + */ + callFrames?: CallFrame[] | undefined; + /** + * Whether current call stack was modified after applying the changes. + */ + stackChanged?: boolean | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Exception details if any. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + + interface RestartFrameReturnType { + /** + * New stack trace. + */ + callFrames: CallFrame[]; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + } + + interface GetScriptSourceReturnType { + /** + * Script source. + */ + scriptSource: string; + } + + interface EvaluateOnCallFrameReturnType { + /** + * Object wrapper for the evaluation result. + */ + result: Runtime.RemoteObject; + /** + * Exception details. + */ + exceptionDetails?: Runtime.ExceptionDetails | undefined; + } + + interface ScriptParsedEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * True, if this script is generated as a result of the live edit operation. + * @experimental + */ + isLiveEdit?: boolean | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + + interface ScriptFailedToParseEventDataType { + /** + * Identifier of the script parsed. + */ + scriptId: Runtime.ScriptId; + /** + * URL or name of the script parsed (if any). + */ + url: string; + /** + * Line offset of the script within the resource with given URL (for script tags). + */ + startLine: number; + /** + * Column offset of the script within the resource with given URL. + */ + startColumn: number; + /** + * Last line of the script. + */ + endLine: number; + /** + * Length of the last line of the script. + */ + endColumn: number; + /** + * Specifies script creation context. + */ + executionContextId: Runtime.ExecutionContextId; + /** + * Content hash of the script. + */ + hash: string; + /** + * Embedder-specific auxiliary data. + */ + executionContextAuxData?: {} | undefined; + /** + * URL of source map associated with script (if any). + */ + sourceMapURL?: string | undefined; + /** + * True, if this script has sourceURL. + */ + hasSourceURL?: boolean | undefined; + /** + * True, if this script is ES6 module. + */ + isModule?: boolean | undefined; + /** + * This script length. + */ + length?: number | undefined; + /** + * JavaScript top stack frame of where the script parsed event was triggered if available. + * @experimental + */ + stackTrace?: Runtime.StackTrace | undefined; + } + + interface BreakpointResolvedEventDataType { + /** + * Breakpoint unique identifier. + */ + breakpointId: BreakpointId; + /** + * Actual breakpoint location. + */ + location: Location; + } + + interface PausedEventDataType { + /** + * Call stack the virtual machine stopped on. + */ + callFrames: CallFrame[]; + /** + * Pause reason. + */ + reason: string; + /** + * Object containing break-specific auxiliary properties. + */ + data?: {} | undefined; + /** + * Hit breakpoints IDs + */ + hitBreakpoints?: string[] | undefined; + /** + * Async stack trace, if any. + */ + asyncStackTrace?: Runtime.StackTrace | undefined; + /** + * Async stack trace, if any. + * @experimental + */ + asyncStackTraceId?: Runtime.StackTraceId | undefined; + /** + * Just scheduled async call will have this stack trace as parent stack during async execution. This field is available only after Debugger.stepInto call with breakOnAsynCall flag. + * @experimental + */ + asyncCallStackTraceId?: Runtime.StackTraceId | undefined; + } + } + + namespace Console { + /** + * Console message. + */ + interface ConsoleMessage { + /** + * Message source. + */ + source: string; + /** + * Message severity. + */ + level: string; + /** + * Message text. + */ + text: string; + /** + * URL of the message origin. + */ + url?: string | undefined; + /** + * Line number in the resource that generated this message (1-based). + */ + line?: number | undefined; + /** + * Column number in the resource that generated this message (1-based). + */ + column?: number | undefined; + } + + interface MessageAddedEventDataType { + /** + * Console message that has been added. + */ + message: ConsoleMessage; + } + } + + namespace Profiler { + /** + * Profile node. Holds callsite information, execution statistics and child nodes. + */ + interface ProfileNode { + /** + * Unique id of the node. + */ + id: number; + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Number of samples where this node was on top of the call stack. + */ + hitCount?: number | undefined; + /** + * Child node ids. + */ + children?: number[] | undefined; + /** + * The reason of being not optimized. The function may be deoptimized or marked as don't optimize. + */ + deoptReason?: string | undefined; + /** + * An array of source position ticks. + */ + positionTicks?: PositionTickInfo[] | undefined; + } + + /** + * Profile. + */ + interface Profile { + /** + * The list of profile nodes. First item is the root node. + */ + nodes: ProfileNode[]; + /** + * Profiling start timestamp in microseconds. + */ + startTime: number; + /** + * Profiling end timestamp in microseconds. + */ + endTime: number; + /** + * Ids of samples top nodes. + */ + samples?: number[] | undefined; + /** + * Time intervals between adjacent samples in microseconds. The first delta is relative to the profile startTime. + */ + timeDeltas?: number[] | undefined; + } + + /** + * Specifies a number of samples attributed to a certain source position. + */ + interface PositionTickInfo { + /** + * Source line number (1-based). + */ + line: number; + /** + * Number of samples attributed to the source line. + */ + ticks: number; + } + + /** + * Coverage data for a source range. + */ + interface CoverageRange { + /** + * JavaScript script source offset for the range start. + */ + startOffset: number; + /** + * JavaScript script source offset for the range end. + */ + endOffset: number; + /** + * Collected execution count of the source range. + */ + count: number; + } + + /** + * Coverage data for a JavaScript function. + */ + interface FunctionCoverage { + /** + * JavaScript function name. + */ + functionName: string; + /** + * Source ranges inside the function with coverage data. + */ + ranges: CoverageRange[]; + /** + * Whether coverage data for this function has block granularity. + */ + isBlockCoverage: boolean; + } + + /** + * Coverage data for a JavaScript script. + */ + interface ScriptCoverage { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Functions contained in the script that has coverage data. + */ + functions: FunctionCoverage[]; + } + + /** + * Describes a type collected during runtime. + * @experimental + */ + interface TypeObject { + /** + * Name of a type collected with type profiling. + */ + name: string; + } + + /** + * Source offset and types for a parameter or return value. + * @experimental + */ + interface TypeProfileEntry { + /** + * Source offset of the parameter or end of function for return values. + */ + offset: number; + /** + * The types for this parameter or return value. + */ + types: TypeObject[]; + } + + /** + * Type profile data collected during runtime for a JavaScript script. + * @experimental + */ + interface ScriptTypeProfile { + /** + * JavaScript script id. + */ + scriptId: Runtime.ScriptId; + /** + * JavaScript script name or url. + */ + url: string; + /** + * Type profile entries for parameters and return values of the functions in the script. + */ + entries: TypeProfileEntry[]; + } + + interface SetSamplingIntervalParameterType { + /** + * New sampling interval in microseconds. + */ + interval: number; + } + + interface StartPreciseCoverageParameterType { + /** + * Collect accurate call counts beyond simple 'covered' or 'not covered'. + */ + callCount?: boolean | undefined; + /** + * Collect block-based coverage. + */ + detailed?: boolean | undefined; + } + + interface StopReturnType { + /** + * Recorded profile. + */ + profile: Profile; + } + + interface TakePreciseCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + + interface GetBestEffortCoverageReturnType { + /** + * Coverage data for the current isolate. + */ + result: ScriptCoverage[]; + } + + interface TakeTypeProfileReturnType { + /** + * Type profile for all scripts since startTypeProfile() was turned on. + */ + result: ScriptTypeProfile[]; + } + + interface ConsoleProfileStartedEventDataType { + id: string; + /** + * Location of console.profile(). + */ + location: Debugger.Location; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + + interface ConsoleProfileFinishedEventDataType { + id: string; + /** + * Location of console.profileEnd(). + */ + location: Debugger.Location; + profile: Profile; + /** + * Profile title passed as an argument to console.profile(). + */ + title?: string | undefined; + } + } + + namespace HeapProfiler { + /** + * Heap snapshot object id. + */ + type HeapSnapshotObjectId = string; + + /** + * Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes. + */ + interface SamplingHeapProfileNode { + /** + * Function location. + */ + callFrame: Runtime.CallFrame; + /** + * Allocations size in bytes for the node excluding children. + */ + selfSize: number; + /** + * Child nodes. + */ + children: SamplingHeapProfileNode[]; + } + + /** + * Profile. + */ + interface SamplingHeapProfile { + head: SamplingHeapProfileNode; + } + + interface StartTrackingHeapObjectsParameterType { + trackAllocations?: boolean | undefined; + } + + interface StopTrackingHeapObjectsParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped. + */ + reportProgress?: boolean | undefined; + } + + interface TakeHeapSnapshotParameterType { + /** + * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken. + */ + reportProgress?: boolean | undefined; + } + + interface GetObjectByHeapObjectIdParameterType { + objectId: HeapSnapshotObjectId; + /** + * Symbolic group name that can be used to release multiple objects. + */ + objectGroup?: string | undefined; + } + + interface AddInspectedHeapObjectParameterType { + /** + * Heap snapshot object id to be accessible by means of $x command line API. + */ + heapObjectId: HeapSnapshotObjectId; + } + + interface GetHeapObjectIdParameterType { + /** + * Identifier of the object to get heap object id for. + */ + objectId: Runtime.RemoteObjectId; + } + + interface StartSamplingParameterType { + /** + * Average sample interval in bytes. Poisson distribution is used for the intervals. The default value is 32768 bytes. + */ + samplingInterval?: number | undefined; + } + + interface GetObjectByHeapObjectIdReturnType { + /** + * Evaluation result. + */ + result: Runtime.RemoteObject; + } + + interface GetHeapObjectIdReturnType { + /** + * Id of the heap snapshot object corresponding to the passed remote object id. + */ + heapSnapshotObjectId: HeapSnapshotObjectId; + } + + interface StopSamplingReturnType { + /** + * Recorded sampling heap profile. + */ + profile: SamplingHeapProfile; + } + + interface GetSamplingProfileReturnType { + /** + * Return the sampling profile being collected. + */ + profile: SamplingHeapProfile; + } + + interface AddHeapSnapshotChunkEventDataType { + chunk: string; + } + + interface ReportHeapSnapshotProgressEventDataType { + done: number; + total: number; + finished?: boolean | undefined; + } + + interface LastSeenObjectIdEventDataType { + lastSeenObjectId: number; + timestamp: number; + } + + interface HeapStatsUpdateEventDataType { + /** + * An array of triplets. Each triplet describes a fragment. The first integer is the fragment index, the second integer is a total count of objects for the fragment, the third integer is a total size of the objects for the fragment. + */ + statsUpdate: number[]; + } + } + + namespace NodeTracing { + interface TraceConfig { + /** + * Controls how the trace buffer stores data. + */ + recordMode?: string | undefined; + /** + * Included category filters. + */ + includedCategories: string[]; + } + + interface StartParameterType { + traceConfig: TraceConfig; + } + + interface GetCategoriesReturnType { + /** + * A list of supported tracing categories. + */ + categories: string[]; + } + + interface DataCollectedEventDataType { + value: Array<{}>; + } + } + + namespace NodeWorker { + type WorkerID = string; + + /** + * Unique identifier of attached debugging session. + */ + type SessionID = string; + + interface WorkerInfo { + workerId: WorkerID; + type: string; + title: string; + url: string; + } + + interface SendMessageToWorkerParameterType { + message: string; + /** + * Identifier of the session. + */ + sessionId: SessionID; + } + + interface EnableParameterType { + /** + * Whether to new workers should be paused until the frontend sends `Runtime.runIfWaitingForDebugger` + * message to run them. + */ + waitForDebuggerOnStart: boolean; + } + + interface DetachParameterType { + sessionId: SessionID; + } + + interface AttachedToWorkerEventDataType { + /** + * Identifier assigned to the session used to send/receive messages. + */ + sessionId: SessionID; + workerInfo: WorkerInfo; + waitingForDebugger: boolean; + } + + interface DetachedFromWorkerEventDataType { + /** + * Detached session identifier. + */ + sessionId: SessionID; + } + + interface ReceivedMessageFromWorkerEventDataType { + /** + * Identifier of a session which sends a message. + */ + sessionId: SessionID; + message: string; + } + } + + namespace NodeRuntime { + interface NotifyWhenWaitingForDisconnectParameterType { + enabled: boolean; + } + } + + /** + * The inspector.Session is used for dispatching messages to the V8 inspector back-end and receiving message responses and notifications. + */ + class Session extends EventEmitter { + /** + * Create a new instance of the inspector.Session class. + * The inspector session needs to be connected through session.connect() before the messages can be dispatched to the inspector backend. + */ + constructor(); + + /** + * Connects a session to the inspector back-end. + */ + connect(): void; + + /** + * Connects a session to the main thread inspector back-end. + * An exception will be thrown if this API was not called on a Worker + * thread. + * @since v12.11.0 + */ + connectToMainThread(): void; + + /** + * Immediately close the session. All pending message callbacks will be called with an error. + * session.connect() will need to be called to be able to send messages again. + * Reconnected session will lose all inspector state, such as enabled agents or configured breakpoints. + */ + disconnect(): void; + + /** + * Posts a message to the inspector back-end. callback will be notified when a response is received. + * callback is a function that accepts two optional arguments - error and message-specific result. + */ + post(method: string, params?: {}, callback?: (err: Error | null, params?: {}) => void): void; + post(method: string, callback?: (err: Error | null, params?: {}) => void): void; + + /** + * Returns supported domains. + */ + post(method: "Schema.getDomains", callback?: (err: Error | null, params: Schema.GetDomainsReturnType) => void): void; + + /** + * Evaluates expression on global object. + */ + post(method: "Runtime.evaluate", params?: Runtime.EvaluateParameterType, callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + post(method: "Runtime.evaluate", callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; + + /** + * Add handler to promise with given promise object id. + */ + post(method: "Runtime.awaitPromise", params?: Runtime.AwaitPromiseParameterType, callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + post(method: "Runtime.awaitPromise", callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; + + /** + * Calls function with given declaration on the given object. Object group of the result is inherited from the target object. + */ + post(method: "Runtime.callFunctionOn", params?: Runtime.CallFunctionOnParameterType, callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + post(method: "Runtime.callFunctionOn", callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; + + /** + * Returns properties of a given object. Object group of the result is inherited from the target object. + */ + post(method: "Runtime.getProperties", params?: Runtime.GetPropertiesParameterType, callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + post(method: "Runtime.getProperties", callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; + + /** + * Releases remote object with given id. + */ + post(method: "Runtime.releaseObject", params?: Runtime.ReleaseObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: "Runtime.releaseObject", callback?: (err: Error | null) => void): void; + + /** + * Releases all remote objects that belong to a given group. + */ + post(method: "Runtime.releaseObjectGroup", params?: Runtime.ReleaseObjectGroupParameterType, callback?: (err: Error | null) => void): void; + post(method: "Runtime.releaseObjectGroup", callback?: (err: Error | null) => void): void; + + /** + * Tells inspected instance to run if it was waiting for debugger to attach. + */ + post(method: "Runtime.runIfWaitingForDebugger", callback?: (err: Error | null) => void): void; + + /** + * Enables reporting of execution contexts creation by means of executionContextCreated event. When the reporting gets enabled the event will be sent immediately for each existing execution context. + */ + post(method: "Runtime.enable", callback?: (err: Error | null) => void): void; + + /** + * Disables reporting of execution contexts creation. + */ + post(method: "Runtime.disable", callback?: (err: Error | null) => void): void; + + /** + * Discards collected exceptions and console API calls. + */ + post(method: "Runtime.discardConsoleEntries", callback?: (err: Error | null) => void): void; + + /** + * @experimental + */ + post(method: "Runtime.setCustomObjectFormatterEnabled", params?: Runtime.SetCustomObjectFormatterEnabledParameterType, callback?: (err: Error | null) => void): void; + post(method: "Runtime.setCustomObjectFormatterEnabled", callback?: (err: Error | null) => void): void; + + /** + * Compiles expression. + */ + post(method: "Runtime.compileScript", params?: Runtime.CompileScriptParameterType, callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + post(method: "Runtime.compileScript", callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; + + /** + * Runs script with given id in a given context. + */ + post(method: "Runtime.runScript", params?: Runtime.RunScriptParameterType, callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + post(method: "Runtime.runScript", callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; + + post(method: "Runtime.queryObjects", params?: Runtime.QueryObjectsParameterType, callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + post(method: "Runtime.queryObjects", callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; + + /** + * Returns all let, const and class variables from global scope. + */ + post( + method: "Runtime.globalLexicalScopeNames", + params?: Runtime.GlobalLexicalScopeNamesParameterType, + callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void + ): void; + post(method: "Runtime.globalLexicalScopeNames", callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void): void; + + /** + * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received. + */ + post(method: "Debugger.enable", callback?: (err: Error | null, params: Debugger.EnableReturnType) => void): void; + + /** + * Disables debugger for given page. + */ + post(method: "Debugger.disable", callback?: (err: Error | null) => void): void; + + /** + * Activates / deactivates all breakpoints on the page. + */ + post(method: "Debugger.setBreakpointsActive", params?: Debugger.SetBreakpointsActiveParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setBreakpointsActive", callback?: (err: Error | null) => void): void; + + /** + * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). + */ + post(method: "Debugger.setSkipAllPauses", params?: Debugger.SetSkipAllPausesParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setSkipAllPauses", callback?: (err: Error | null) => void): void; + + /** + * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in locations property. Further matching script parsing will result in subsequent breakpointResolved events issued. This logical breakpoint will survive page reloads. + */ + post(method: "Debugger.setBreakpointByUrl", params?: Debugger.SetBreakpointByUrlParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + post(method: "Debugger.setBreakpointByUrl", callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; + + /** + * Sets JavaScript breakpoint at a given location. + */ + post(method: "Debugger.setBreakpoint", params?: Debugger.SetBreakpointParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + post(method: "Debugger.setBreakpoint", callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; + + /** + * Removes JavaScript breakpoint. + */ + post(method: "Debugger.removeBreakpoint", params?: Debugger.RemoveBreakpointParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.removeBreakpoint", callback?: (err: Error | null) => void): void; + + /** + * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same. + */ + post( + method: "Debugger.getPossibleBreakpoints", + params?: Debugger.GetPossibleBreakpointsParameterType, + callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void + ): void; + post(method: "Debugger.getPossibleBreakpoints", callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void): void; + + /** + * Continues execution until specific location is reached. + */ + post(method: "Debugger.continueToLocation", params?: Debugger.ContinueToLocationParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.continueToLocation", callback?: (err: Error | null) => void): void; + + /** + * @experimental + */ + post(method: "Debugger.pauseOnAsyncCall", params?: Debugger.PauseOnAsyncCallParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.pauseOnAsyncCall", callback?: (err: Error | null) => void): void; + + /** + * Steps over the statement. + */ + post(method: "Debugger.stepOver", callback?: (err: Error | null) => void): void; + + /** + * Steps into the function call. + */ + post(method: "Debugger.stepInto", params?: Debugger.StepIntoParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.stepInto", callback?: (err: Error | null) => void): void; + + /** + * Steps out of the function call. + */ + post(method: "Debugger.stepOut", callback?: (err: Error | null) => void): void; + + /** + * Stops on the next JavaScript statement. + */ + post(method: "Debugger.pause", callback?: (err: Error | null) => void): void; + + /** + * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called. + * @experimental + */ + post(method: "Debugger.scheduleStepIntoAsync", callback?: (err: Error | null) => void): void; + + /** + * Resumes JavaScript execution. + */ + post(method: "Debugger.resume", callback?: (err: Error | null) => void): void; + + /** + * Returns stack trace with given stackTraceId. + * @experimental + */ + post(method: "Debugger.getStackTrace", params?: Debugger.GetStackTraceParameterType, callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + post(method: "Debugger.getStackTrace", callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; + + /** + * Searches for given string in script content. + */ + post(method: "Debugger.searchInContent", params?: Debugger.SearchInContentParameterType, callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + post(method: "Debugger.searchInContent", callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; + + /** + * Edits JavaScript source live. + */ + post(method: "Debugger.setScriptSource", params?: Debugger.SetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + post(method: "Debugger.setScriptSource", callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; + + /** + * Restarts particular call frame from the beginning. + */ + post(method: "Debugger.restartFrame", params?: Debugger.RestartFrameParameterType, callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + post(method: "Debugger.restartFrame", callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; + + /** + * Returns source for the script with given id. + */ + post(method: "Debugger.getScriptSource", params?: Debugger.GetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + post(method: "Debugger.getScriptSource", callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; + + /** + * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is none. + */ + post(method: "Debugger.setPauseOnExceptions", params?: Debugger.SetPauseOnExceptionsParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setPauseOnExceptions", callback?: (err: Error | null) => void): void; + + /** + * Evaluates expression on a given call frame. + */ + post(method: "Debugger.evaluateOnCallFrame", params?: Debugger.EvaluateOnCallFrameParameterType, callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + post(method: "Debugger.evaluateOnCallFrame", callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; + + /** + * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually. + */ + post(method: "Debugger.setVariableValue", params?: Debugger.SetVariableValueParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setVariableValue", callback?: (err: Error | null) => void): void; + + /** + * Changes return value in top frame. Available only at return break position. + * @experimental + */ + post(method: "Debugger.setReturnValue", params?: Debugger.SetReturnValueParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setReturnValue", callback?: (err: Error | null) => void): void; + + /** + * Enables or disables async call stacks tracking. + */ + post(method: "Debugger.setAsyncCallStackDepth", params?: Debugger.SetAsyncCallStackDepthParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setAsyncCallStackDepth", callback?: (err: Error | null) => void): void; + + /** + * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. + * @experimental + */ + post(method: "Debugger.setBlackboxPatterns", params?: Debugger.SetBlackboxPatternsParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setBlackboxPatterns", callback?: (err: Error | null) => void): void; + + /** + * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted. + * @experimental + */ + post(method: "Debugger.setBlackboxedRanges", params?: Debugger.SetBlackboxedRangesParameterType, callback?: (err: Error | null) => void): void; + post(method: "Debugger.setBlackboxedRanges", callback?: (err: Error | null) => void): void; + + /** + * Enables console domain, sends the messages collected so far to the client by means of the messageAdded notification. + */ + post(method: "Console.enable", callback?: (err: Error | null) => void): void; + + /** + * Disables console domain, prevents further console messages from being reported to the client. + */ + post(method: "Console.disable", callback?: (err: Error | null) => void): void; + + /** + * Does nothing. + */ + post(method: "Console.clearMessages", callback?: (err: Error | null) => void): void; + + post(method: "Profiler.enable", callback?: (err: Error | null) => void): void; + + post(method: "Profiler.disable", callback?: (err: Error | null) => void): void; + + /** + * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. + */ + post(method: "Profiler.setSamplingInterval", params?: Profiler.SetSamplingIntervalParameterType, callback?: (err: Error | null) => void): void; + post(method: "Profiler.setSamplingInterval", callback?: (err: Error | null) => void): void; + + post(method: "Profiler.start", callback?: (err: Error | null) => void): void; + + post(method: "Profiler.stop", callback?: (err: Error | null, params: Profiler.StopReturnType) => void): void; + + /** + * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters. + */ + post(method: "Profiler.startPreciseCoverage", params?: Profiler.StartPreciseCoverageParameterType, callback?: (err: Error | null) => void): void; + post(method: "Profiler.startPreciseCoverage", callback?: (err: Error | null) => void): void; + + /** + * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code. + */ + post(method: "Profiler.stopPreciseCoverage", callback?: (err: Error | null) => void): void; + + /** + * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started. + */ + post(method: "Profiler.takePreciseCoverage", callback?: (err: Error | null, params: Profiler.TakePreciseCoverageReturnType) => void): void; + + /** + * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection. + */ + post(method: "Profiler.getBestEffortCoverage", callback?: (err: Error | null, params: Profiler.GetBestEffortCoverageReturnType) => void): void; + + /** + * Enable type profile. + * @experimental + */ + post(method: "Profiler.startTypeProfile", callback?: (err: Error | null) => void): void; + + /** + * Disable type profile. Disabling releases type profile data collected so far. + * @experimental + */ + post(method: "Profiler.stopTypeProfile", callback?: (err: Error | null) => void): void; + + /** + * Collect type profile. + * @experimental + */ + post(method: "Profiler.takeTypeProfile", callback?: (err: Error | null, params: Profiler.TakeTypeProfileReturnType) => void): void; + + post(method: "HeapProfiler.enable", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.disable", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.startTrackingHeapObjects", params?: HeapProfiler.StartTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.startTrackingHeapObjects", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.stopTrackingHeapObjects", params?: HeapProfiler.StopTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.stopTrackingHeapObjects", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.takeHeapSnapshot", params?: HeapProfiler.TakeHeapSnapshotParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.takeHeapSnapshot", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.collectGarbage", callback?: (err: Error | null) => void): void; + + post( + method: "HeapProfiler.getObjectByHeapObjectId", + params?: HeapProfiler.GetObjectByHeapObjectIdParameterType, + callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void + ): void; + post(method: "HeapProfiler.getObjectByHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void): void; + + /** + * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions). + */ + post(method: "HeapProfiler.addInspectedHeapObject", params?: HeapProfiler.AddInspectedHeapObjectParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.addInspectedHeapObject", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.getHeapObjectId", params?: HeapProfiler.GetHeapObjectIdParameterType, callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + post(method: "HeapProfiler.getHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; + + post(method: "HeapProfiler.startSampling", params?: HeapProfiler.StartSamplingParameterType, callback?: (err: Error | null) => void): void; + post(method: "HeapProfiler.startSampling", callback?: (err: Error | null) => void): void; + + post(method: "HeapProfiler.stopSampling", callback?: (err: Error | null, params: HeapProfiler.StopSamplingReturnType) => void): void; + + post(method: "HeapProfiler.getSamplingProfile", callback?: (err: Error | null, params: HeapProfiler.GetSamplingProfileReturnType) => void): void; + + /** + * Gets supported tracing categories. + */ + post(method: "NodeTracing.getCategories", callback?: (err: Error | null, params: NodeTracing.GetCategoriesReturnType) => void): void; + + /** + * Start trace events collection. + */ + post(method: "NodeTracing.start", params?: NodeTracing.StartParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeTracing.start", callback?: (err: Error | null) => void): void; + + /** + * Stop trace events collection. Remaining collected events will be sent as a sequence of + * dataCollected events followed by tracingComplete event. + */ + post(method: "NodeTracing.stop", callback?: (err: Error | null) => void): void; + + /** + * Sends protocol message over session with given id. + */ + post(method: "NodeWorker.sendMessageToWorker", params?: NodeWorker.SendMessageToWorkerParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeWorker.sendMessageToWorker", callback?: (err: Error | null) => void): void; + + /** + * Instructs the inspector to attach to running workers. Will also attach to new workers + * as they start + */ + post(method: "NodeWorker.enable", params?: NodeWorker.EnableParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeWorker.enable", callback?: (err: Error | null) => void): void; + + /** + * Detaches from all running workers and disables attaching to new workers as they are started. + */ + post(method: "NodeWorker.disable", callback?: (err: Error | null) => void): void; + + /** + * Detached from the worker with given sessionId. + */ + post(method: "NodeWorker.detach", params?: NodeWorker.DetachParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeWorker.detach", callback?: (err: Error | null) => void): void; + + /** + * Enable the `NodeRuntime.waitingForDisconnect`. + */ + post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType, callback?: (err: Error | null) => void): void; + post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", callback?: (err: Error | null) => void): void; + + // Events + + addListener(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + addListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + addListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + addListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + addListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + addListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + addListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + addListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + addListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + addListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + addListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + addListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + addListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + addListener(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + addListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + addListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + addListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + addListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + addListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + addListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + addListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + addListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + addListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + addListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + addListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + addListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + addListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + addListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "inspectorNotification", message: InspectorNotification<{}>): boolean; + emit(event: "Runtime.executionContextCreated", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextDestroyed", message: InspectorNotification): boolean; + emit(event: "Runtime.executionContextsCleared"): boolean; + emit(event: "Runtime.exceptionThrown", message: InspectorNotification): boolean; + emit(event: "Runtime.exceptionRevoked", message: InspectorNotification): boolean; + emit(event: "Runtime.consoleAPICalled", message: InspectorNotification): boolean; + emit(event: "Runtime.inspectRequested", message: InspectorNotification): boolean; + emit(event: "Debugger.scriptParsed", message: InspectorNotification): boolean; + emit(event: "Debugger.scriptFailedToParse", message: InspectorNotification): boolean; + emit(event: "Debugger.breakpointResolved", message: InspectorNotification): boolean; + emit(event: "Debugger.paused", message: InspectorNotification): boolean; + emit(event: "Debugger.resumed"): boolean; + emit(event: "Console.messageAdded", message: InspectorNotification): boolean; + emit(event: "Profiler.consoleProfileStarted", message: InspectorNotification): boolean; + emit(event: "Profiler.consoleProfileFinished", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.addHeapSnapshotChunk", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.resetProfiles"): boolean; + emit(event: "HeapProfiler.reportHeapSnapshotProgress", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.lastSeenObjectId", message: InspectorNotification): boolean; + emit(event: "HeapProfiler.heapStatsUpdate", message: InspectorNotification): boolean; + emit(event: "NodeTracing.dataCollected", message: InspectorNotification): boolean; + emit(event: "NodeTracing.tracingComplete"): boolean; + emit(event: "NodeWorker.attachedToWorker", message: InspectorNotification): boolean; + emit(event: "NodeWorker.detachedFromWorker", message: InspectorNotification): boolean; + emit(event: "NodeWorker.receivedMessageFromWorker", message: InspectorNotification): boolean; + emit(event: "NodeRuntime.waitingForDisconnect"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + on(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + on(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + on(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + on(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + on(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + on(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + on(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + on(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + on(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + on(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + on(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + on(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + on(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + on(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + on(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + on(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + on(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + on(event: "HeapProfiler.resetProfiles", listener: () => void): this; + on(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + on(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + on(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + on(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + on(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + on(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + on(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + on(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + on(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + once(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + once(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + once(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + once(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + once(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + once(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + once(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + once(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + once(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + once(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + once(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + once(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + once(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + once(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + once(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + once(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + once(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + once(event: "HeapProfiler.resetProfiles", listener: () => void): this; + once(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + once(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + once(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + once(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + once(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + once(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + once(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + once(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + once(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + prependListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + prependListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + prependListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + prependListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + prependListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + prependListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + prependListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + prependListener(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + prependListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + prependListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + prependListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + prependListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + prependListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + prependListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + prependListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + prependListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + + /** + * Emitted when any notification from the V8 Inspector is received. + */ + prependOnceListener(event: "inspectorNotification", listener: (message: InspectorNotification<{}>) => void): this; + + /** + * Issued when new execution context is created. + */ + prependOnceListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when execution context is destroyed. + */ + prependOnceListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when all executionContexts were cleared in browser + */ + prependOnceListener(event: "Runtime.executionContextsCleared", listener: () => void): this; + + /** + * Issued when exception was thrown and unhandled. + */ + prependOnceListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when unhandled exception was revoked. + */ + prependOnceListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when console API was called. + */ + prependOnceListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when object should be inspected (for example, as a result of inspect() command line API call). + */ + prependOnceListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. + */ + prependOnceListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when virtual machine fails to parse the script. + */ + prependOnceListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when breakpoint is resolved to an actual script and location. + */ + prependOnceListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. + */ + prependOnceListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; + + /** + * Fired when the virtual machine resumed execution. + */ + prependOnceListener(event: "Debugger.resumed", listener: () => void): this; + + /** + * Issued when new console message is added. + */ + prependOnceListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; + + /** + * Sent when new profile recording is started using console.profile() call. + */ + prependOnceListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; + + prependOnceListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; + prependOnceListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; + prependOnceListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. + */ + prependOnceListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; + + /** + * If heap objects tracking has been started then backend may send update for one or more fragments + */ + prependOnceListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; + + /** + * Contains an bucket of collected trace events. + */ + prependOnceListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; + + /** + * Signals that tracing is stopped and there is no trace buffers pending flush, all data were + * delivered via dataCollected events. + */ + prependOnceListener(event: "NodeTracing.tracingComplete", listener: () => void): this; + + /** + * Issued when attached to a worker. + */ + prependOnceListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Issued when detached from the worker. + */ + prependOnceListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * Notifies about a new protocol message received from the session + * (session ID is provided in attachedToWorker notification). + */ + prependOnceListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; + + /** + * This event is fired instead of `Runtime.executionContextDestroyed` when + * enabled. + * It is fired when the Node process finished all code execution and is + * waiting for all frontends to disconnect. + */ + prependOnceListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; + } + + // Top Level API + + /** + * Activate inspector on host and port. Equivalent to node --inspect=[[host:]port], but can be done programatically after node has started. + * If wait is true, will block until a client has connected to the inspect port and flow control has been passed to the debugger client. + * @param port Port to listen on for inspector connections. Optional, defaults to what was specified on the CLI. + * @param host Host to listen on for inspector connections. Optional, defaults to what was specified on the CLI. + * @param wait Block until a client has connected. Optional, defaults to false. + */ + function open(port?: number, host?: string, wait?: boolean): void; + + /** + * Deactivate the inspector. Blocks until there are no active connections. + */ + function close(): void; + + /** + * Return the URL of the active inspector, or `undefined` if there is none. + */ + function url(): string | undefined; + + /** + * Blocks until a client (existing or connected later) has sent + * `Runtime.runIfWaitingForDebugger` command. + * An exception will be thrown if there is no active inspector. + */ + function waitForDebugger(): void; +} +declare module 'node:inspector' { + import EventEmitter = require('inspector'); + export = EventEmitter; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/module.d.ts b/node_backend/node_modules/@types/node/ts4.8/module.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f8d102db0de15495294062f275c0db2ea55893f1 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/module.d.ts @@ -0,0 +1,56 @@ +declare module "module" { + import { URL } from "url"; + namespace Module { + /** + * Updates all the live bindings for builtin ES Modules to match the properties of the CommonJS exports. + * It does not add or remove exported names from the ES Modules. + */ + function syncBuiltinESMExports(): void; + + function findSourceMap(path: string, error?: Error): SourceMap; + interface SourceMapPayload { + file: string; + version: number; + sources: string[]; + sourcesContent: string[]; + names: string[]; + mappings: string; + sourceRoot: string; + } + + interface SourceMapping { + generatedLine: number; + generatedColumn: number; + originalSource: string; + originalLine: number; + originalColumn: number; + } + + class SourceMap { + readonly payload: SourceMapPayload; + constructor(payload: SourceMapPayload); + findEntry(line: number, column: number): SourceMapping; + } + } + interface Module extends NodeModule {} + class Module { + static runMain(): void; + static wrap(code: string): string; + + /** + * @deprecated Deprecated since: v12.2.0. Please use createRequire() instead. + */ + static createRequireFromPath(path: string): NodeRequire; + static createRequire(path: string | URL): NodeRequire; + static builtinModules: string[]; + + static Module: typeof Module; + + constructor(id: string, parent?: Module); + } + export = Module; +} +declare module "node:module" { + import module = require("module"); + export = module; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/net.d.ts b/node_backend/node_modules/@types/node/ts4.8/net.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d00a4529813f7d65bae4811a65b3dd8cb34f1e82 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/net.d.ts @@ -0,0 +1,324 @@ +declare module "net" { + import * as stream from "stream"; + import EventEmitter = require("events"); + import * as dns from "dns"; + + type LookupFunction = ( + hostname: string, + options: dns.LookupOneOptions, + callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, + ) => void; + + interface AddressInfo { + address: string; + family: string; + port: number; + } + + interface SocketConstructorOpts { + fd?: number | undefined; + allowHalfOpen?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + } + + interface OnReadOpts { + buffer: Uint8Array | (() => Uint8Array); + /** + * This function is called for every chunk of incoming data. + * Two arguments are passed to it: the number of bytes written to buffer and a reference to buffer. + * Return false from this function to implicitly pause() the socket. + */ + callback(bytesWritten: number, buf: Uint8Array): boolean; + } + + interface ConnectOpts { + /** + * If specified, incoming data is stored in a single buffer and passed to the supplied callback when data arrives on the socket. + * Note: this will cause the streaming functionality to not provide any data, however events like 'error', 'end', and 'close' will + * still be emitted as normal and methods like pause() and resume() will also behave as expected. + */ + onread?: OnReadOpts | undefined; + } + + interface TcpSocketConnectOpts extends ConnectOpts { + port: number; + host?: string | undefined; + localAddress?: string | undefined; + localPort?: number | undefined; + hints?: number | undefined; + family?: number | undefined; + lookup?: LookupFunction | undefined; + } + + interface IpcSocketConnectOpts extends ConnectOpts { + path: string; + } + + type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; + type SocketReadyState = "opening" | "open" | "readOnly" | "writeOnly" | "closed"; + + class Socket extends stream.Duplex { + constructor(options?: SocketConstructorOpts); + + // Extended base methods + write(buffer: Uint8Array | string, cb?: (err?: Error) => void): boolean; + write(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error) => void): boolean; + + connect(options: SocketConnectOpts, connectionListener?: () => void): this; + connect(port: number, host: string, connectionListener?: () => void): this; + connect(port: number, connectionListener?: () => void): this; + connect(path: string, connectionListener?: () => void): this; + + setEncoding(encoding?: BufferEncoding): this; + pause(): this; + resume(): this; + setTimeout(timeout: number, callback?: () => void): this; + setNoDelay(noDelay?: boolean): this; + setKeepAlive(enable?: boolean, initialDelay?: number): this; + address(): AddressInfo | {}; + unref(): this; + ref(): this; + + /** @deprecated since v14.6.0 - Use `writableLength` instead. */ + readonly bufferSize: number; + readonly bytesRead: number; + readonly bytesWritten: number; + readonly connecting: boolean; + readonly destroyed: boolean; + readonly localAddress: string; + readonly localPort: number; + readonly pending: boolean; + /** + * This property represents the state of the connection as a string. + * @see {https://nodejs.org/api/net.html#socketreadystate} + * @since v0.5.0 + */ + readonly readyState: SocketReadyState; + readonly remoteAddress?: string | undefined; + readonly remoteFamily?: string | undefined; + readonly remotePort?: number | undefined; + /** + * The socket timeout in milliseconds as set by socket.setTimeout(). It is undefined if a timeout has not been set. + * @since v10.7.0 + */ + readonly timeout?: number | undefined; + + // Extended base methods + end(cb?: () => void): this; + end(buffer: Uint8Array | string, cb?: () => void): this; + end(str: Uint8Array | string, encoding?: BufferEncoding, cb?: () => void): this; + + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. data + * 4. drain + * 5. end + * 6. error + * 7. lookup + * 8. timeout + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (had_error: boolean) => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "data", listener: (data: Buffer) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + addListener(event: "ready", listener: () => void): this; + addListener(event: "timeout", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", had_error: boolean): boolean; + emit(event: "connect"): boolean; + emit(event: "data", data: Buffer): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean; + emit(event: "ready"): boolean; + emit(event: "timeout"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (had_error: boolean) => void): this; + on(event: "connect", listener: () => void): this; + on(event: "data", listener: (data: Buffer) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + on(event: "ready", listener: () => void): this; + on(event: "timeout", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (had_error: boolean) => void): this; + once(event: "connect", listener: () => void): this; + once(event: "data", listener: (data: Buffer) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + once(event: "ready", listener: () => void): this; + once(event: "timeout", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (had_error: boolean) => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "data", listener: (data: Buffer) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependListener(event: "ready", listener: () => void): this; + prependListener(event: "timeout", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: (had_error: boolean) => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener(event: "data", listener: (data: Buffer) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener( + event: "lookup", + listener: (err: Error, address: string, family: string | number, host: string) => void, + ): this; + prependOnceListener(event: "ready", listener: () => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + } + + interface ListenOptions { + port?: number | undefined; + host?: string | undefined; + backlog?: number | undefined; + path?: string | undefined; + exclusive?: boolean | undefined; + readableAll?: boolean | undefined; + writableAll?: boolean | undefined; + /** + * @default false + */ + ipv6Only?: boolean | undefined; + } + + interface ServerOpts { + /** + * Indicates whether half-opened TCP connections are allowed. + * @default false + */ + allowHalfOpen?: boolean | undefined; + + /** + * Indicates whether the socket should be paused on incoming connections. + * @default false + */ + pauseOnConnect?: boolean | undefined; + } + + // https://github.com/nodejs/node/blob/master/lib/net.js + class Server extends EventEmitter { + constructor(connectionListener?: (socket: Socket) => void); + constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void); + + listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, hostname?: string, listeningListener?: () => void): this; + listen(port?: number, backlog?: number, listeningListener?: () => void): this; + listen(port?: number, listeningListener?: () => void): this; + listen(path: string, backlog?: number, listeningListener?: () => void): this; + listen(path: string, listeningListener?: () => void): this; + listen(options: ListenOptions, listeningListener?: () => void): this; + listen(handle: any, backlog?: number, listeningListener?: () => void): this; + listen(handle: any, listeningListener?: () => void): this; + close(callback?: (err?: Error) => void): this; + address(): AddressInfo | string | null; + getConnections(cb: (error: Error | null, count: number) => void): void; + ref(): this; + unref(): this; + maxConnections: number; + connections: number; + listening: boolean; + + /** + * events.EventEmitter + * 1. close + * 2. connection + * 3. error + * 4. listening + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + } + + interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + + interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { + timeout?: number | undefined; + } + + type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; + + function createServer(connectionListener?: (socket: Socket) => void): Server; + function createServer(options?: ServerOpts, connectionListener?: (socket: Socket) => void): Server; + function connect(options: NetConnectOpts, connectionListener?: () => void): Socket; + function connect(port: number, host?: string, connectionListener?: () => void): Socket; + function connect(path: string, connectionListener?: () => void): Socket; + function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket; + function createConnection(port: number, host?: string, connectionListener?: () => void): Socket; + function createConnection(path: string, connectionListener?: () => void): Socket; + function isIP(input: string): number; + function isIPv4(input: string): boolean; + function isIPv6(input: string): boolean; +} +declare module "node:net" { + export * from "net"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/os.d.ts b/node_backend/node_modules/@types/node/ts4.8/os.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..199fbcb7786211e55ea2fbf26dd6a4f5e1412b92 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/os.d.ts @@ -0,0 +1,243 @@ +declare module "os" { + interface CpuInfo { + model: string; + speed: number; + times: { + user: number; + nice: number; + sys: number; + idle: number; + irq: number; + }; + } + + interface NetworkInterfaceBase { + address: string; + netmask: string; + mac: string; + internal: boolean; + cidr: string | null; + } + + interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase { + family: "IPv4"; + scopeid?: undefined; + } + + interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase { + family: "IPv6"; + scopeid: number; + } + + interface UserInfo { + username: T; + uid: number; + gid: number; + shell: T; + homedir: T; + } + + type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6; + + function hostname(): string; + function loadavg(): number[]; + function uptime(): number; + function freemem(): number; + function totalmem(): number; + function cpus(): CpuInfo[]; + function type(): string; + function release(): string; + function networkInterfaces(): NodeJS.Dict; + function homedir(): string; + function userInfo(options: { encoding: "buffer" }): UserInfo; + function userInfo(options?: { encoding: BufferEncoding }): UserInfo; + + type SignalConstants = { + [key in NodeJS.Signals]: number; + }; + + namespace constants { + const UV_UDP_REUSEADDR: number; + namespace signals {} + const signals: SignalConstants; + namespace errno { + const E2BIG: number; + const EACCES: number; + const EADDRINUSE: number; + const EADDRNOTAVAIL: number; + const EAFNOSUPPORT: number; + const EAGAIN: number; + const EALREADY: number; + const EBADF: number; + const EBADMSG: number; + const EBUSY: number; + const ECANCELED: number; + const ECHILD: number; + const ECONNABORTED: number; + const ECONNREFUSED: number; + const ECONNRESET: number; + const EDEADLK: number; + const EDESTADDRREQ: number; + const EDOM: number; + const EDQUOT: number; + const EEXIST: number; + const EFAULT: number; + const EFBIG: number; + const EHOSTUNREACH: number; + const EIDRM: number; + const EILSEQ: number; + const EINPROGRESS: number; + const EINTR: number; + const EINVAL: number; + const EIO: number; + const EISCONN: number; + const EISDIR: number; + const ELOOP: number; + const EMFILE: number; + const EMLINK: number; + const EMSGSIZE: number; + const EMULTIHOP: number; + const ENAMETOOLONG: number; + const ENETDOWN: number; + const ENETRESET: number; + const ENETUNREACH: number; + const ENFILE: number; + const ENOBUFS: number; + const ENODATA: number; + const ENODEV: number; + const ENOENT: number; + const ENOEXEC: number; + const ENOLCK: number; + const ENOLINK: number; + const ENOMEM: number; + const ENOMSG: number; + const ENOPROTOOPT: number; + const ENOSPC: number; + const ENOSR: number; + const ENOSTR: number; + const ENOSYS: number; + const ENOTCONN: number; + const ENOTDIR: number; + const ENOTEMPTY: number; + const ENOTSOCK: number; + const ENOTSUP: number; + const ENOTTY: number; + const ENXIO: number; + const EOPNOTSUPP: number; + const EOVERFLOW: number; + const EPERM: number; + const EPIPE: number; + const EPROTO: number; + const EPROTONOSUPPORT: number; + const EPROTOTYPE: number; + const ERANGE: number; + const EROFS: number; + const ESPIPE: number; + const ESRCH: number; + const ESTALE: number; + const ETIME: number; + const ETIMEDOUT: number; + const ETXTBSY: number; + const EWOULDBLOCK: number; + const EXDEV: number; + const WSAEINTR: number; + const WSAEBADF: number; + const WSAEACCES: number; + const WSAEFAULT: number; + const WSAEINVAL: number; + const WSAEMFILE: number; + const WSAEWOULDBLOCK: number; + const WSAEINPROGRESS: number; + const WSAEALREADY: number; + const WSAENOTSOCK: number; + const WSAEDESTADDRREQ: number; + const WSAEMSGSIZE: number; + const WSAEPROTOTYPE: number; + const WSAENOPROTOOPT: number; + const WSAEPROTONOSUPPORT: number; + const WSAESOCKTNOSUPPORT: number; + const WSAEOPNOTSUPP: number; + const WSAEPFNOSUPPORT: number; + const WSAEAFNOSUPPORT: number; + const WSAEADDRINUSE: number; + const WSAEADDRNOTAVAIL: number; + const WSAENETDOWN: number; + const WSAENETUNREACH: number; + const WSAENETRESET: number; + const WSAECONNABORTED: number; + const WSAECONNRESET: number; + const WSAENOBUFS: number; + const WSAEISCONN: number; + const WSAENOTCONN: number; + const WSAESHUTDOWN: number; + const WSAETOOMANYREFS: number; + const WSAETIMEDOUT: number; + const WSAECONNREFUSED: number; + const WSAELOOP: number; + const WSAENAMETOOLONG: number; + const WSAEHOSTDOWN: number; + const WSAEHOSTUNREACH: number; + const WSAENOTEMPTY: number; + const WSAEPROCLIM: number; + const WSAEUSERS: number; + const WSAEDQUOT: number; + const WSAESTALE: number; + const WSAEREMOTE: number; + const WSASYSNOTREADY: number; + const WSAVERNOTSUPPORTED: number; + const WSANOTINITIALISED: number; + const WSAEDISCON: number; + const WSAENOMORE: number; + const WSAECANCELLED: number; + const WSAEINVALIDPROCTABLE: number; + const WSAEINVALIDPROVIDER: number; + const WSAEPROVIDERFAILEDINIT: number; + const WSASYSCALLFAILURE: number; + const WSASERVICE_NOT_FOUND: number; + const WSATYPE_NOT_FOUND: number; + const WSA_E_NO_MORE: number; + const WSA_E_CANCELLED: number; + const WSAEREFUSED: number; + } + namespace priority { + const PRIORITY_LOW: number; + const PRIORITY_BELOW_NORMAL: number; + const PRIORITY_NORMAL: number; + const PRIORITY_ABOVE_NORMAL: number; + const PRIORITY_HIGH: number; + const PRIORITY_HIGHEST: number; + } + } + + function arch(): string; + /** + * Returns a string identifying the kernel version. + * On POSIX systems, the operating system release is determined by calling + * [uname(3)][]. On Windows, `pRtlGetVersion` is used, and if it is not available, + * `GetVersionExW()` will be used. See + * https://en.wikipedia.org/wiki/Uname#Examples for more information. + */ + function version(): string; + function platform(): NodeJS.Platform; + function tmpdir(): string; + const EOL: string; + function endianness(): "BE" | "LE"; + /** + * Gets the priority of a process. + * Defaults to current process. + */ + function getPriority(pid?: number): number; + /** + * Sets the priority of the current process. + * @param priority Must be in range of -20 to 19 + */ + function setPriority(priority: number): void; + /** + * Sets the priority of the process specified process. + * @param priority Must be in range of -20 to 19 + */ + function setPriority(pid: number, priority: number): void; +} +declare module "node:os" { + export * from "os"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/path.d.ts b/node_backend/node_modules/@types/node/ts4.8/path.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..09ae14ea15788e7402b8b8434c57f162e9486944 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/path.d.ts @@ -0,0 +1,168 @@ +declare module "path" { + namespace path { + /** + * A parsed path object generated by path.parse() or consumed by path.format(). + */ + interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; + } + + interface FormatInputPathObject { + /** + * The root of the path such as '/' or 'c:\' + */ + root?: string | undefined; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir?: string | undefined; + /** + * The file name including extension (if any) such as 'index.html' + */ + base?: string | undefined; + /** + * The file extension (if any) such as '.html' + */ + ext?: string | undefined; + /** + * The file name without extension (if any) such as 'index' + */ + name?: string | undefined; + } + + interface PlatformPath { + /** + * Normalize a string path, reducing '..' and '.' parts. + * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. + * + * @param path string path to normalize. + * @throws {TypeError} if `path` is not a string. + */ + normalize(path: string): string; + /** + * Join all arguments together and normalize the resulting path. + * + * @param paths paths to join. + * @throws {TypeError} if any of the path segments is not a string. + */ + join(...paths: string[]): string; + /** + * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. + * + * Starting from leftmost {from} parameter, resolves {to} to an absolute path. + * + * If {to} isn't already absolute, {from} arguments are prepended in right to left order, + * until an absolute path is found. If after using all {from} paths still no absolute path is found, + * the current working directory is used as well. The resulting path is normalized, + * and trailing slashes are removed unless the path gets resolved to the root directory. + * + * @param paths A sequence of paths or path segments. + * @throws {TypeError} if any of the arguments is not a string. + */ + resolve(...paths: string[]): string; + /** + * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. + * + * If the given {path} is a zero-length string, `false` will be returned. + * + * @param path path to test. + * @throws {TypeError} if `path` is not a string. + */ + isAbsolute(path: string): boolean; + /** + * Solve the relative path from {from} to {to} based on the current working directory. + * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. + * + * @throws {TypeError} if either `from` or `to` is not a string. + */ + relative(from: string, to: string): string; + /** + * Return the directory name of a path. Similar to the Unix dirname command. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + dirname(path: string): string; + /** + * Return the last portion of a path. Similar to the Unix basename command. + * Often used to extract the file name from a fully qualified path. + * + * @param path the path to evaluate. + * @param ext optionally, an extension to remove from the result. + * @throws {TypeError} if `path` is not a string or if `ext` is given and is not a string. + */ + basename(path: string, ext?: string): string; + /** + * Return the extension of the path, from the last '.' to end of string in the last portion of the path. + * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string. + * + * @param path the path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + extname(path: string): string; + /** + * The platform-specific file separator. '\\' or '/'. + */ + readonly sep: "\\" | "/"; + /** + * The platform-specific file delimiter. ';' or ':'. + */ + readonly delimiter: ";" | ":"; + /** + * Returns an object from a path string - the opposite of format(). + * + * @param path path to evaluate. + * @throws {TypeError} if `path` is not a string. + */ + parse(path: string): ParsedPath; + /** + * Returns a path string from an object - the opposite of parse(). + * + * @param pathObject path to evaluate. + */ + format(pathObject: FormatInputPathObject): string; + /** + * On Windows systems only, returns an equivalent namespace-prefixed path for the given path. + * If path is not a string, path will be returned without modifications. + * This method is meaningful only on Windows system. + * On POSIX systems, the method is non-operational and always returns path without modifications. + */ + toNamespacedPath(path: string): string; + /** + * Posix specific pathing. + * Same as parent object on posix. + */ + readonly posix: PlatformPath; + /** + * Windows specific pathing. + * Same as parent object on windows + */ + readonly win32: PlatformPath; + } + } + const path: path.PlatformPath; + export = path; +} +declare module "node:path" { + import path = require("path"); + export = path; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/perf_hooks.d.ts b/node_backend/node_modules/@types/node/ts4.8/perf_hooks.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4eb7179b3ae8720f75c90a9a6731728f04fcbef5 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/perf_hooks.d.ts @@ -0,0 +1,274 @@ +declare module "perf_hooks" { + import { AsyncResource } from "async_hooks"; + + type EntryType = "node" | "mark" | "measure" | "gc" | "function" | "http2" | "http"; + + interface PerformanceEntry { + /** + * The total number of milliseconds elapsed for this entry. + * This value will not be meaningful for all Performance Entry types. + */ + readonly duration: number; + + /** + * The name of the performance entry. + */ + readonly name: string; + + /** + * The high resolution millisecond timestamp marking the starting time of the Performance Entry. + */ + readonly startTime: number; + + /** + * The type of the performance entry. + * Currently it may be one of: 'node', 'mark', 'measure', 'gc', or 'function'. + */ + readonly entryType: EntryType; + + /** + * When `performanceEntry.entryType` is equal to 'gc', `the performance.kind` property identifies + * the type of garbage collection operation that occurred. + * See perf_hooks.constants for valid values. + */ + readonly kind?: number | undefined; + + /** + * When `performanceEntry.entryType` is equal to 'gc', the `performance.flags` + * property contains additional information about garbage collection operation. + * See perf_hooks.constants for valid values. + */ + readonly flags?: number | undefined; + } + + interface PerformanceNodeTiming extends PerformanceEntry { + /** + * The high resolution millisecond timestamp at which the Node.js process completed bootstrap. + */ + readonly bootstrapComplete: number; + + /** + * The high resolution millisecond timestamp at which the Node.js process completed bootstrapping. + * If bootstrapping has not yet finished, the property has the value of -1. + */ + readonly environment: number; + + /** + * The high resolution millisecond timestamp at which the Node.js environment was initialized. + */ + readonly idleTime: number; + + /** + * The high resolution millisecond timestamp of the amount of time the event loop has been idle + * within the event loop's event provider (e.g. `epoll_wait`). This does not take CPU usage + * into consideration. If the event loop has not yet started (e.g., in the first tick of the main script), + * the property has the value of 0. + */ + readonly loopExit: number; + + /** + * The high resolution millisecond timestamp at which the Node.js event loop started. + * If the event loop has not yet started (e.g., in the first tick of the main script), the property has the value of -1. + */ + readonly loopStart: number; + + /** + * The high resolution millisecond timestamp at which the V8 platform was initialized. + */ + readonly v8Start: number; + } + + interface EventLoopUtilization { + idle: number; + active: number; + utilization: number; + } + + interface Performance { + /** + * If name is not provided, removes all PerformanceMark objects from the Performance Timeline. + * If name is provided, removes only the named mark. + * @param name + */ + clearMarks(name?: string): void; + + /** + * Creates a new PerformanceMark entry in the Performance Timeline. + * A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark', + * and whose performanceEntry.duration is always 0. + * Performance marks are used to mark specific significant moments in the Performance Timeline. + * @param name + */ + mark(name?: string): void; + + /** + * Creates a new PerformanceMeasure entry in the Performance Timeline. + * A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure', + * and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark. + * + * The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify + * any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist, + * then startMark is set to timeOrigin by default. + * + * The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp + * properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown. + * @param name + * @param startMark + * @param endMark + */ + measure(name: string, startMark?: string, endMark?: string): void; + + /** + * An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones. + */ + readonly nodeTiming: PerformanceNodeTiming; + + /** + * @return the current high resolution millisecond timestamp + */ + now(): number; + + /** + * The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured. + */ + readonly timeOrigin: number; + + /** + * Wraps a function within a new function that measures the running time of the wrapped function. + * A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed. + * @param fn + */ + timerify any>(fn: T): T; + + /** + * eventLoopUtilization is similar to CPU utilization except that it is calculated using high precision wall-clock time. + * It represents the percentage of time the event loop has spent outside the event loop's event provider (e.g. epoll_wait). + * No other CPU idle time is taken into consideration. + * + * @param util1 The result of a previous call to eventLoopUtilization() + * @param util2 The result of a previous call to eventLoopUtilization() prior to util1 + */ + eventLoopUtilization(util1?: EventLoopUtilization, util2?: EventLoopUtilization): EventLoopUtilization; + } + + interface PerformanceObserverEntryList { + /** + * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime. + */ + getEntries(): PerformanceEntry[]; + + /** + * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime + * whose performanceEntry.name is equal to name, and optionally, whose performanceEntry.entryType is equal to type. + */ + getEntriesByName(name: string, type?: EntryType): PerformanceEntry[]; + + /** + * @return Returns a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime + * whose performanceEntry.entryType is equal to type. + */ + getEntriesByType(type: EntryType): PerformanceEntry[]; + } + + type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void; + + class PerformanceObserver extends AsyncResource { + constructor(callback: PerformanceObserverCallback); + + /** + * Disconnects the PerformanceObserver instance from all notifications. + */ + disconnect(): void; + + /** + * Subscribes the PerformanceObserver instance to notifications of new PerformanceEntry instances identified by options.entryTypes. + * When options.buffered is false, the callback will be invoked once for every PerformanceEntry instance. + * Property buffered defaults to false. + * @param options + */ + observe(options: { entryTypes: ReadonlyArray; buffered?: boolean | undefined }): void; + } + + namespace constants { + const NODE_PERFORMANCE_GC_MAJOR: number; + const NODE_PERFORMANCE_GC_MINOR: number; + const NODE_PERFORMANCE_GC_INCREMENTAL: number; + const NODE_PERFORMANCE_GC_WEAKCB: number; + + const NODE_PERFORMANCE_GC_FLAGS_NO: number; + const NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number; + const NODE_PERFORMANCE_GC_FLAGS_FORCED: number; + const NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number; + const NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number; + const NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number; + } + + const performance: Performance; + + interface EventLoopMonitorOptions { + /** + * The sampling rate in milliseconds. + * Must be greater than zero. + * @default 10 + */ + resolution?: number | undefined; + } + + interface EventLoopDelayMonitor { + /** + * Enables the event loop delay sample timer. Returns `true` if the timer was started, `false` if it was already started. + */ + enable(): boolean; + /** + * Disables the event loop delay sample timer. Returns `true` if the timer was stopped, `false` if it was already stopped. + */ + disable(): boolean; + + /** + * Resets the collected histogram data. + */ + reset(): void; + + /** + * Returns the value at the given percentile. + * @param percentile A percentile value between 1 and 100. + */ + percentile(percentile: number): number; + + /** + * A `Map` object detailing the accumulated percentile distribution. + */ + readonly percentiles: Map; + + /** + * The number of times the event loop delay exceeded the maximum 1 hour eventloop delay threshold. + */ + readonly exceeds: number; + + /** + * The minimum recorded event loop delay. + */ + readonly min: number; + + /** + * The maximum recorded event loop delay. + */ + readonly max: number; + + /** + * The mean of the recorded event loop delays. + */ + readonly mean: number; + + /** + * The standard deviation of the recorded event loop delays. + */ + readonly stddev: number; + } + + function monitorEventLoopDelay(options?: EventLoopMonitorOptions): EventLoopDelayMonitor; +} +declare module "node:perf_hooks" { + export * from "perf_hooks"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/process.d.ts b/node_backend/node_modules/@types/node/ts4.8/process.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..aa2c6d4ffd9008f640925dee2c2fbd7fc245996d --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/process.d.ts @@ -0,0 +1,452 @@ +declare module "process" { + import * as tty from "tty"; + + global { + var process: NodeJS.Process; + + namespace NodeJS { + // this namespace merge is here because these are specifically used + // as the type for process.stdin, process.stdout, and process.stderr. + // they can't live in tty.d.ts because we need to disambiguate the imported name. + interface ReadStream extends tty.ReadStream {} + interface WriteStream extends tty.WriteStream {} + + interface MemoryUsage { + rss: number; + heapTotal: number; + heapUsed: number; + external: number; + arrayBuffers: number; + } + + interface CpuUsage { + user: number; + system: number; + } + + interface ProcessRelease { + name: string; + sourceUrl?: string | undefined; + headersUrl?: string | undefined; + libUrl?: string | undefined; + lts?: string | undefined; + } + + interface ProcessVersions extends Dict { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + modules: string; + openssl: string; + } + + type Platform = + | "aix" + | "android" + | "darwin" + | "freebsd" + | "linux" + | "openbsd" + | "sunos" + | "win32" + | "cygwin" + | "netbsd"; + + type Signals = + | "SIGABRT" + | "SIGALRM" + | "SIGBUS" + | "SIGCHLD" + | "SIGCONT" + | "SIGFPE" + | "SIGHUP" + | "SIGILL" + | "SIGINT" + | "SIGIO" + | "SIGIOT" + | "SIGKILL" + | "SIGPIPE" + | "SIGPOLL" + | "SIGPROF" + | "SIGPWR" + | "SIGQUIT" + | "SIGSEGV" + | "SIGSTKFLT" + | "SIGSTOP" + | "SIGSYS" + | "SIGTERM" + | "SIGTRAP" + | "SIGTSTP" + | "SIGTTIN" + | "SIGTTOU" + | "SIGUNUSED" + | "SIGURG" + | "SIGUSR1" + | "SIGUSR2" + | "SIGVTALRM" + | "SIGWINCH" + | "SIGXCPU" + | "SIGXFSZ" + | "SIGBREAK" + | "SIGLOST" + | "SIGINFO"; + + type UncaughtExceptionOrigin = "uncaughtException" | "unhandledRejection"; + type MultipleResolveType = "resolve" | "reject"; + + type BeforeExitListener = (code: number) => void; + type DisconnectListener = () => void; + type ExitListener = (code: number) => void; + type RejectionHandledListener = (promise: Promise) => void; + type UncaughtExceptionListener = (error: Error, origin: UncaughtExceptionOrigin) => void; + type UnhandledRejectionListener = (reason: {} | null | undefined, promise: Promise) => void; + type WarningListener = (warning: Error) => void; + type MessageListener = (message: any, sendHandle: any) => void; + type SignalsListener = (signal: Signals) => void; + type NewListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void; + type RemoveListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void; + type MultipleResolveListener = (type: MultipleResolveType, promise: Promise, value: any) => void; + + interface Socket extends ReadWriteStream { + isTTY?: true | undefined; + } + + // Alias for compatibility + interface ProcessEnv extends Dict {} + + interface HRTime { + (time?: [number, number]): [number, number]; + bigint(): bigint; + } + + interface ProcessReport { + /** + * Directory where the report is written. + * working directory of the Node.js process. + * @default '' indicating that reports are written to the current + */ + directory: string; + + /** + * Filename where the report is written. + * The default value is the empty string. + * @default '' the output filename will be comprised of a timestamp, + * PID, and sequence number. + */ + filename: string; + + /** + * Returns a JSON-formatted diagnostic report for the running process. + * The report's JavaScript stack trace is taken from err, if present. + */ + getReport(err?: Error): string; + + /** + * If true, a diagnostic report is generated on fatal errors, + * such as out of memory errors or failed C++ assertions. + * @default false + */ + reportOnFatalError: boolean; + + /** + * If true, a diagnostic report is generated when the process + * receives the signal specified by process.report.signal. + * @default false + */ + reportOnSignal: boolean; + + /** + * If true, a diagnostic report is generated on uncaught exception. + * @default false + */ + reportOnUncaughtException: boolean; + + /** + * The signal used to trigger the creation of a diagnostic report. + * @default 'SIGUSR2' + */ + signal: Signals; + + /** + * Writes a diagnostic report to a file. If filename is not provided, the default filename + * includes the date, time, PID, and a sequence number. + * The report's JavaScript stack trace is taken from err, if present. + * + * @param fileName Name of the file where the report is written. + * This should be a relative path, that will be appended to the directory specified in + * `process.report.directory`, or the current working directory of the Node.js process, + * if unspecified. + * @param error A custom error used for reporting the JavaScript stack. + * @return Filename of the generated report. + */ + writeReport(fileName?: string): string; + writeReport(error?: Error): string; + writeReport(fileName?: string, err?: Error): string; + } + + interface ResourceUsage { + fsRead: number; + fsWrite: number; + involuntaryContextSwitches: number; + ipcReceived: number; + ipcSent: number; + majorPageFault: number; + maxRSS: number; + minorPageFault: number; + sharedMemorySize: number; + signalsCount: number; + swappedOut: number; + systemCPUTime: number; + unsharedDataSize: number; + unsharedStackSize: number; + userCPUTime: number; + voluntaryContextSwitches: number; + } + + interface Process extends EventEmitter { + /** + * Can also be a tty.WriteStream, not typed due to limitations. + */ + stdout: WriteStream & { + fd: 1; + }; + /** + * Can also be a tty.WriteStream, not typed due to limitations. + */ + stderr: WriteStream & { + fd: 2; + }; + stdin: ReadStream & { + fd: 0; + }; + openStdin(): Socket; + argv: string[]; + argv0: string; + execArgv: string[]; + execPath: string; + abort(): never; + chdir(directory: string): void; + cwd(): string; + debugPort: number; + emitWarning(warning: string | Error, name?: string, ctor?: Function): void; + env: ProcessEnv; + exit(code?: number): never; + exitCode?: number | undefined; + getgid(): number; + setgid(id: number | string): void; + getuid(): number; + setuid(id: number | string): void; + geteuid(): number; + seteuid(id: number | string): void; + getegid(): number; + setegid(id: number | string): void; + getgroups(): number[]; + setgroups(groups: ReadonlyArray): void; + setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void; + hasUncaughtExceptionCaptureCallback(): boolean; + version: string; + versions: ProcessVersions; + config: { + target_defaults: { + cflags: any[]; + default_configuration: string; + defines: string[]; + include_dirs: string[]; + libraries: string[]; + }; + variables: { + clang: number; + host_arch: string; + node_install_npm: boolean; + node_install_waf: boolean; + node_prefix: string; + node_shared_openssl: boolean; + node_shared_v8: boolean; + node_shared_zlib: boolean; + node_use_dtrace: boolean; + node_use_etw: boolean; + node_use_openssl: boolean; + target_arch: string; + v8_no_strict_aliasing: number; + v8_use_snapshot: boolean; + visibility: string; + }; + }; + kill(pid: number, signal?: string | number): true; + pid: number; + ppid: number; + title: string; + arch: string; + platform: Platform; + /** @deprecated since v14.0.0 - use `require.main` instead. */ + mainModule?: Module | undefined; + memoryUsage(): MemoryUsage; + cpuUsage(previousValue?: CpuUsage): CpuUsage; + nextTick(callback: Function, ...args: any[]): void; + release: ProcessRelease; + features: { + inspector: boolean; + debug: boolean; + uv: boolean; + ipv6: boolean; + tls_alpn: boolean; + tls_sni: boolean; + tls_ocsp: boolean; + tls: boolean; + }; + /** + * @deprecated since v14.0.0 - Calling process.umask() with no argument causes + * the process-wide umask to be written twice. This introduces a race condition between threads, + * and is a potential security vulnerability. There is no safe, cross-platform alternative API. + */ + umask(): number; + /** + * Can only be set if not in worker thread. + */ + umask(mask: string | number): number; + uptime(): number; + hrtime: HRTime; + domain: Domain; + + // Worker + send?( + message: any, + sendHandle?: any, + options?: { swallowErrors?: boolean | undefined }, + callback?: (error: Error | null) => void, + ): boolean; + disconnect(): void; + connected: boolean; + + /** + * The `process.allowedNodeEnvironmentFlags` property is a special, + * read-only `Set` of flags allowable within the [`NODE_OPTIONS`][] + * environment variable. + */ + allowedNodeEnvironmentFlags: ReadonlySet; + + /** + * Only available with `--experimental-report` + */ + report?: ProcessReport | undefined; + + resourceUsage(): ResourceUsage; + + traceDeprecation: boolean; + + /* EventEmitter */ + addListener(event: "beforeExit", listener: BeforeExitListener): this; + addListener(event: "disconnect", listener: DisconnectListener): this; + addListener(event: "exit", listener: ExitListener): this; + addListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + addListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + addListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + addListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + addListener(event: "warning", listener: WarningListener): this; + addListener(event: "message", listener: MessageListener): this; + addListener(event: Signals, listener: SignalsListener): this; + addListener(event: "newListener", listener: NewListenerListener): this; + addListener(event: "removeListener", listener: RemoveListenerListener): this; + addListener(event: "multipleResolves", listener: MultipleResolveListener): this; + + emit(event: "beforeExit", code: number): boolean; + emit(event: "disconnect"): boolean; + emit(event: "exit", code: number): boolean; + emit(event: "rejectionHandled", promise: Promise): boolean; + emit(event: "uncaughtException", error: Error): boolean; + emit(event: "uncaughtExceptionMonitor", error: Error): boolean; + emit(event: "unhandledRejection", reason: any, promise: Promise): boolean; + emit(event: "warning", warning: Error): boolean; + emit(event: "message", message: any, sendHandle: any): this; + emit(event: Signals, signal: Signals): boolean; + emit(event: "newListener", eventName: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "removeListener", eventName: string, listener: (...args: any[]) => void): this; + emit(event: "multipleResolves", listener: MultipleResolveListener): this; + + on(event: "beforeExit", listener: BeforeExitListener): this; + on(event: "disconnect", listener: DisconnectListener): this; + on(event: "exit", listener: ExitListener): this; + on(event: "rejectionHandled", listener: RejectionHandledListener): this; + on(event: "uncaughtException", listener: UncaughtExceptionListener): this; + on(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + on(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + on(event: "warning", listener: WarningListener): this; + on(event: "message", listener: MessageListener): this; + on(event: Signals, listener: SignalsListener): this; + on(event: "newListener", listener: NewListenerListener): this; + on(event: "removeListener", listener: RemoveListenerListener): this; + on(event: "multipleResolves", listener: MultipleResolveListener): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "beforeExit", listener: BeforeExitListener): this; + once(event: "disconnect", listener: DisconnectListener): this; + once(event: "exit", listener: ExitListener): this; + once(event: "rejectionHandled", listener: RejectionHandledListener): this; + once(event: "uncaughtException", listener: UncaughtExceptionListener): this; + once(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + once(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + once(event: "warning", listener: WarningListener): this; + once(event: "message", listener: MessageListener): this; + once(event: Signals, listener: SignalsListener): this; + once(event: "newListener", listener: NewListenerListener): this; + once(event: "removeListener", listener: RemoveListenerListener): this; + once(event: "multipleResolves", listener: MultipleResolveListener): this; + + prependListener(event: "beforeExit", listener: BeforeExitListener): this; + prependListener(event: "disconnect", listener: DisconnectListener): this; + prependListener(event: "exit", listener: ExitListener): this; + prependListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependListener(event: "warning", listener: WarningListener): this; + prependListener(event: "message", listener: MessageListener): this; + prependListener(event: Signals, listener: SignalsListener): this; + prependListener(event: "newListener", listener: NewListenerListener): this; + prependListener(event: "removeListener", listener: RemoveListenerListener): this; + prependListener(event: "multipleResolves", listener: MultipleResolveListener): this; + + prependOnceListener(event: "beforeExit", listener: BeforeExitListener): this; + prependOnceListener(event: "disconnect", listener: DisconnectListener): this; + prependOnceListener(event: "exit", listener: ExitListener): this; + prependOnceListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependOnceListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "uncaughtExceptionMonitor", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependOnceListener(event: "warning", listener: WarningListener): this; + prependOnceListener(event: "message", listener: MessageListener): this; + prependOnceListener(event: Signals, listener: SignalsListener): this; + prependOnceListener(event: "newListener", listener: NewListenerListener): this; + prependOnceListener(event: "removeListener", listener: RemoveListenerListener): this; + prependOnceListener(event: "multipleResolves", listener: MultipleResolveListener): this; + + listeners(event: "beforeExit"): BeforeExitListener[]; + listeners(event: "disconnect"): DisconnectListener[]; + listeners(event: "exit"): ExitListener[]; + listeners(event: "rejectionHandled"): RejectionHandledListener[]; + listeners(event: "uncaughtException"): UncaughtExceptionListener[]; + listeners(event: "uncaughtExceptionMonitor"): UncaughtExceptionListener[]; + listeners(event: "unhandledRejection"): UnhandledRejectionListener[]; + listeners(event: "warning"): WarningListener[]; + listeners(event: "message"): MessageListener[]; + listeners(event: Signals): SignalsListener[]; + listeners(event: "newListener"): NewListenerListener[]; + listeners(event: "removeListener"): RemoveListenerListener[]; + listeners(event: "multipleResolves"): MultipleResolveListener[]; + } + + interface Global { + process: Process; + } + } + } + + export = process; +} +declare module "node:process" { + import process = require("process"); + export = process; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/punycode.d.ts b/node_backend/node_modules/@types/node/ts4.8/punycode.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..550c216cd91f65816e5cee1020bb19b068cede76 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/punycode.d.ts @@ -0,0 +1,78 @@ +/** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ +declare module "punycode" { + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + function decode(string: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + function encode(string: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + function toUnicode(domain: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + function toASCII(domain: string): string; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const ucs2: ucs2; + interface ucs2 { + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + decode(string: string): number[]; + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + encode(codePoints: ReadonlyArray): string; + } + /** + * @deprecated since v7.0.0 + * The version of the punycode module bundled in Node.js is being deprecated. + * In a future major version of Node.js this module will be removed. + * Users currently depending on the punycode module should switch to using + * the userland-provided Punycode.js module instead. + */ + const version: string; +} +declare module "node:punycode" { + export * from "punycode"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/querystring.d.ts b/node_backend/node_modules/@types/node/ts4.8/querystring.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f4a43a3612a92a0a2cf8d50804dcbe53d826c5a0 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/querystring.d.ts @@ -0,0 +1,41 @@ +declare module "querystring" { + interface StringifyOptions { + encodeURIComponent?: ((str: string) => string) | undefined; + } + + interface ParseOptions { + maxKeys?: number | undefined; + decodeURIComponent?: ((str: string) => string) | undefined; + } + + interface ParsedUrlQuery extends NodeJS.Dict {} + + interface ParsedUrlQueryInput extends + NodeJS.Dict< + | string + | number + | boolean + | ReadonlyArray + | ReadonlyArray + | ReadonlyArray + | null + > + { + } + + function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string; + function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery; + /** + * The querystring.encode() function is an alias for querystring.stringify(). + */ + const encode: typeof stringify; + /** + * The querystring.decode() function is an alias for querystring.parse(). + */ + const decode: typeof parse; + function escape(str: string): string; + function unescape(str: string): string; +} +declare module "node:querystring" { + export * from "querystring"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/readline.d.ts b/node_backend/node_modules/@types/node/ts4.8/readline.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c7db82a7423e87e7f8a709cb3a618ded8944e1fe --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/readline.d.ts @@ -0,0 +1,184 @@ +declare module "readline" { + import EventEmitter = require("events"); + + interface Key { + sequence?: string | undefined; + name?: string | undefined; + ctrl?: boolean | undefined; + meta?: boolean | undefined; + shift?: boolean | undefined; + } + + class Interface extends EventEmitter { + readonly terminal: boolean; + + // Need direct access to line/cursor data, for use in external processes + // see: https://github.com/nodejs/node/issues/30347 + /** The current input data */ + readonly line: string; + /** The current cursor position in the input line */ + readonly cursor: number; + + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface + */ + protected constructor( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ); + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface + */ + protected constructor(options: ReadLineOptions); + + setPrompt(prompt: string): void; + prompt(preserveCursor?: boolean): void; + question(query: string, callback: (answer: string) => void): void; + pause(): this; + resume(): this; + close(): void; + write(data: string | Buffer, key?: Key): void; + write(data: undefined | null | string | Buffer, key: Key): void; + + /** + * Returns the real position of the cursor in relation to the input + * prompt + string. Long input (wrapping) strings, as well as multiple + * line prompts are included in the calculations. + */ + getCursorPos(): CursorPos; + + /** + * events.EventEmitter + * 1. close + * 2. line + * 3. pause + * 4. resume + * 5. SIGCONT + * 6. SIGINT + * 7. SIGTSTP + */ + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + type ReadLine = Interface; // type forwarded for backwards compatibility + + type Completer = (line: string) => CompleterResult; + type AsyncCompleter = (line: string, callback: (err?: null | Error, result?: CompleterResult) => void) => any; + + type CompleterResult = [string[], string]; + + interface ReadLineOptions { + input: NodeJS.ReadableStream; + output?: NodeJS.WritableStream | undefined; + completer?: Completer | AsyncCompleter | undefined; + terminal?: boolean | undefined; + historySize?: number | undefined; + prompt?: string | undefined; + crlfDelay?: number | undefined; + removeHistoryDuplicates?: boolean | undefined; + escapeCodeTimeout?: number | undefined; + tabSize?: number | undefined; + } + + function createInterface( + input: NodeJS.ReadableStream, + output?: NodeJS.WritableStream, + completer?: Completer | AsyncCompleter, + terminal?: boolean, + ): Interface; + function createInterface(options: ReadLineOptions): Interface; + function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; + + type Direction = -1 | 0 | 1; + + interface CursorPos { + rows: number; + cols: number; + } + + /** + * Clears the current line of this WriteStream in a direction identified by `dir`. + */ + function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean; + /** + * Clears this `WriteStream` from the current cursor down. + */ + function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean; + /** + * Moves this WriteStream's cursor to the specified position. + */ + function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean; + /** + * Moves this WriteStream's cursor relative to its current position. + */ + function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean; +} +declare module "node:readline" { + export * from "readline"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/repl.d.ts b/node_backend/node_modules/@types/node/ts4.8/repl.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6dd50600ed3c2d900ce592bdbeecfef66304d7b5 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/repl.d.ts @@ -0,0 +1,404 @@ +declare module "repl" { + import { AsyncCompleter, Completer, Interface } from "readline"; + import { Context } from "vm"; + import { InspectOptions } from "util"; + + interface ReplOptions { + /** + * The input prompt to display. + * @default "> " + */ + prompt?: string | undefined; + /** + * The `Readable` stream from which REPL input will be read. + * @default process.stdin + */ + input?: NodeJS.ReadableStream | undefined; + /** + * The `Writable` stream to which REPL output will be written. + * @default process.stdout + */ + output?: NodeJS.WritableStream | undefined; + /** + * If `true`, specifies that the output should be treated as a TTY terminal, and have + * ANSI/VT100 escape codes written to it. + * Default: checking the value of the `isTTY` property on the output stream upon + * instantiation. + */ + terminal?: boolean | undefined; + /** + * The function to be used when evaluating each given line of input. + * Default: an async wrapper for the JavaScript `eval()` function. An `eval` function can + * error with `repl.Recoverable` to indicate the input was incomplete and prompt for + * additional lines. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_default_evaluation + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_custom_evaluation_functions + */ + eval?: REPLEval | undefined; + /** + * Defines if the repl prints output previews or not. + * @default `true` Always `false` in case `terminal` is falsy. + */ + preview?: boolean | undefined; + /** + * If `true`, specifies that the default `writer` function should include ANSI color + * styling to REPL output. If a custom `writer` function is provided then this has no + * effect. + * Default: the REPL instance's `terminal` value. + */ + useColors?: boolean | undefined; + /** + * If `true`, specifies that the default evaluation function will use the JavaScript + * `global` as the context as opposed to creating a new separate context for the REPL + * instance. The node CLI REPL sets this value to `true`. + * Default: `false`. + */ + useGlobal?: boolean | undefined; + /** + * If `true`, specifies that the default writer will not output the return value of a + * command if it evaluates to `undefined`. + * Default: `false`. + */ + ignoreUndefined?: boolean | undefined; + /** + * The function to invoke to format the output of each command before writing to `output`. + * Default: a wrapper for `util.inspect`. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_customizing_repl_output + */ + writer?: REPLWriter | undefined; + /** + * An optional function used for custom Tab auto completion. + * + * @see https://nodejs.org/dist/latest-v11.x/docs/api/readline.html#readline_use_of_the_completer_function + */ + completer?: Completer | AsyncCompleter | undefined; + /** + * A flag that specifies whether the default evaluator executes all JavaScript commands in + * strict mode or default (sloppy) mode. + * Accepted values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT | undefined; + /** + * Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is + * pressed. This cannot be used together with a custom `eval` function. + * Default: `false`. + */ + breakEvalOnSigint?: boolean | undefined; + } + + type REPLEval = ( + this: REPLServer, + evalCmd: string, + context: Context, + file: string, + cb: (err: Error | null, result: any) => void, + ) => void; + type REPLWriter = (this: REPLServer, obj: any) => string; + + /** + * This is the default "writer" value, if none is passed in the REPL options, + * and it can be overridden by custom print functions. + */ + const writer: REPLWriter & { options: InspectOptions }; + + type REPLCommandAction = (this: REPLServer, text: string) => void; + + interface REPLCommand { + /** + * Help text to be displayed when `.help` is entered. + */ + help?: string | undefined; + /** + * The function to execute, optionally accepting a single string argument. + */ + action: REPLCommandAction; + } + + /** + * Provides a customizable Read-Eval-Print-Loop (REPL). + * + * Instances of `repl.REPLServer` will accept individual lines of user input, evaluate those + * according to a user-defined evaluation function, then output the result. Input and output + * may be from `stdin` and `stdout`, respectively, or may be connected to any Node.js `stream`. + * + * Instances of `repl.REPLServer` support automatic completion of inputs, simplistic Emacs-style + * line editing, multi-line inputs, ANSI-styled output, saving and restoring current REPL session + * state, error recovery, and customizable evaluation functions. + * + * Instances of `repl.REPLServer` are created using the `repl.start()` method and _should not_ + * be created directly using the JavaScript `new` keyword. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_repl + */ + class REPLServer extends Interface { + /** + * The `vm.Context` provided to the `eval` function to be used for JavaScript + * evaluation. + */ + readonly context: Context; + /** + * @deprecated since v14.3.0 - Use `input` instead. + */ + readonly inputStream: NodeJS.ReadableStream; + /** + * @deprecated since v14.3.0 - Use `output` instead. + */ + readonly outputStream: NodeJS.WritableStream; + /** + * The `Readable` stream from which REPL input will be read. + */ + readonly input: NodeJS.ReadableStream; + /** + * The `Writable` stream to which REPL output will be written. + */ + readonly output: NodeJS.WritableStream; + /** + * The commands registered via `replServer.defineCommand()`. + */ + readonly commands: NodeJS.ReadOnlyDict; + /** + * A value indicating whether the REPL is currently in "editor mode". + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_commands_and_special_keys + */ + readonly editorMode: boolean; + /** + * A value indicating whether the `_` variable has been assigned. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreAssigned: boolean; + /** + * The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL). + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly last: any; + /** + * A value indicating whether the `_error` variable has been assigned. + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreErrAssigned: boolean; + /** + * The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL). + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly lastError: any; + /** + * Specified in the REPL options, this is the function to be used when evaluating each + * given line of input. If not specified in the REPL options, this is an async wrapper + * for the JavaScript `eval()` function. + */ + readonly eval: REPLEval; + /** + * Specified in the REPL options, this is a value indicating whether the default + * `writer` function should include ANSI color styling to REPL output. + */ + readonly useColors: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `eval` + * function will use the JavaScript `global` as the context as opposed to creating a new + * separate context for the REPL instance. + */ + readonly useGlobal: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `writer` + * function should output the result of a command if it evaluates to `undefined`. + */ + readonly ignoreUndefined: boolean; + /** + * Specified in the REPL options, this is the function to invoke to format the output of + * each command before writing to `outputStream`. If not specified in the REPL options, + * this will be a wrapper for `util.inspect`. + */ + readonly writer: REPLWriter; + /** + * Specified in the REPL options, this is the function to use for custom Tab auto-completion. + */ + readonly completer: Completer | AsyncCompleter; + /** + * Specified in the REPL options, this is a flag that specifies whether the default `eval` + * function should execute all JavaScript commands in strict mode or default (sloppy) mode. + * Possible values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT; + + /** + * NOTE: According to the documentation: + * + * > Instances of `repl.REPLServer` are created using the `repl.start()` method and + * > _should not_ be created directly using the JavaScript `new` keyword. + * + * `REPLServer` cannot be subclassed due to implementation specifics in NodeJS. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_class_replserver + */ + private constructor(); + + /** + * Used to add new `.`-prefixed commands to the REPL instance. Such commands are invoked + * by typing a `.` followed by the `keyword`. + * + * @param keyword The command keyword (_without_ a leading `.` character). + * @param cmd The function to invoke when the command is processed. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_replserver_definecommand_keyword_cmd + */ + defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void; + /** + * Readies the REPL instance for input from the user, printing the configured `prompt` to a + * new line in the `output` and resuming the `input` to accept new input. + * + * When multi-line input is being entered, an ellipsis is printed rather than the 'prompt'. + * + * This method is primarily intended to be called from within the action function for + * commands registered using the `replServer.defineCommand()` method. + * + * @param preserveCursor When `true`, the cursor placement will not be reset to `0`. + */ + displayPrompt(preserveCursor?: boolean): void; + /** + * Clears any command that has been buffered but not yet executed. + * + * This method is primarily intended to be called from within the action function for + * commands registered using the `replServer.defineCommand()` method. + * + * @since v9.0.0 + */ + clearBufferedCommand(): void; + + /** + * Initializes a history log file for the REPL instance. When executing the + * Node.js binary and using the command line REPL, a history file is initialized + * by default. However, this is not the case when creating a REPL + * programmatically. Use this method to initialize a history log file when working + * with REPL instances programmatically. + * @param path The path to the history file + */ + setupHistory(path: string, cb: (err: Error | null, repl: this) => void): void; + + /** + * events.EventEmitter + * 1. close - inherited from `readline.Interface` + * 2. line - inherited from `readline.Interface` + * 3. pause - inherited from `readline.Interface` + * 4. resume - inherited from `readline.Interface` + * 5. SIGCONT - inherited from `readline.Interface` + * 6. SIGINT - inherited from `readline.Interface` + * 7. SIGTSTP - inherited from `readline.Interface` + * 8. exit + * 9. reset + */ + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + addListener(event: "exit", listener: () => void): this; + addListener(event: "reset", listener: (context: Context) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + emit(event: "exit"): boolean; + emit(event: "reset", context: Context): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + on(event: "exit", listener: () => void): this; + on(event: "reset", listener: (context: Context) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + once(event: "exit", listener: () => void): this; + once(event: "reset", listener: (context: Context) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + prependListener(event: "exit", listener: () => void): this; + prependListener(event: "reset", listener: (context: Context) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + prependOnceListener(event: "exit", listener: () => void): this; + prependOnceListener(event: "reset", listener: (context: Context) => void): this; + } + + /** + * A flag passed in the REPL options. Evaluates expressions in sloppy mode. + */ + const REPL_MODE_SLOPPY: unique symbol; + + /** + * A flag passed in the REPL options. Evaluates expressions in strict mode. + * This is equivalent to prefacing every repl statement with `'use strict'`. + */ + const REPL_MODE_STRICT: unique symbol; + + /** + * Creates and starts a `repl.REPLServer` instance. + * + * @param options The options for the `REPLServer`. If `options` is a string, then it specifies + * the input prompt. + */ + function start(options?: string | ReplOptions): REPLServer; + + /** + * Indicates a recoverable error that a `REPLServer` can use to support multi-line input. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_recoverable_errors + */ + class Recoverable extends SyntaxError { + err: Error; + + constructor(err: Error); + } +} +declare module "node:repl" { + export * from "repl"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/stream.d.ts b/node_backend/node_modules/@types/node/ts4.8/stream.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..469fa96d8e10e827080f4f9edaba3e17a5e1f704 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/stream.d.ts @@ -0,0 +1,518 @@ +declare module "stream" { + import EventEmitter = require("events"); + + class internal extends EventEmitter { + pipe(destination: T, options?: { end?: boolean | undefined }): T; + } + + namespace internal { + class Stream extends internal { + constructor(opts?: ReadableOptions); + } + + interface ReadableOptions { + highWaterMark?: number | undefined; + encoding?: BufferEncoding | undefined; + objectMode?: boolean | undefined; + read?(this: Readable, size: number): void; + destroy?(this: Readable, error: Error | null, callback: (error: Error | null) => void): void; + autoDestroy?: boolean | undefined; + } + + class Readable extends Stream implements NodeJS.ReadableStream { + /** + * A utility method for creating Readable Streams out of iterators. + */ + static from(iterable: Iterable | AsyncIterable, options?: ReadableOptions): Readable; + + readable: boolean; + readonly readableEncoding: BufferEncoding | null; + readonly readableEnded: boolean; + readonly readableFlowing: boolean | null; + readonly readableHighWaterMark: number; + readonly readableLength: number; + readonly readableObjectMode: boolean; + destroyed: boolean; + constructor(opts?: ReadableOptions); + _read(size: number): void; + read(size?: number): any; + setEncoding(encoding: BufferEncoding): this; + pause(): this; + resume(): this; + isPaused(): boolean; + unpipe(destination?: NodeJS.WritableStream): this; + unshift(chunk: any, encoding?: BufferEncoding): void; + wrap(oldStream: NodeJS.ReadableStream): this; + push(chunk: any, encoding?: BufferEncoding): boolean; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + destroy(error?: Error): this; + + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. end + * 4. error + * 5. pause + * 6. readable + * 7. resume + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "pause"): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + interface WritableOptions { + highWaterMark?: number | undefined; + decodeStrings?: boolean | undefined; + defaultEncoding?: BufferEncoding | undefined; + objectMode?: boolean | undefined; + emitClose?: boolean | undefined; + write?( + this: Writable, + chunk: any, + encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ): void; + writev?( + this: Writable, + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + destroy?(this: Writable, error: Error | null, callback: (error: Error | null) => void): void; + final?(this: Writable, callback: (error?: Error | null) => void): void; + autoDestroy?: boolean | undefined; + } + + class Writable extends Stream implements NodeJS.WritableStream { + readonly writable: boolean; + readonly writableEnded: boolean; + readonly writableFinished: boolean; + readonly writableHighWaterMark: number; + readonly writableLength: number; + readonly writableObjectMode: boolean; + readonly writableCorked: number; + destroyed: boolean; + constructor(opts?: WritableOptions); + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + _destroy(error: Error | null, callback: (error?: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, encoding: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; + setDefaultEncoding(encoding: BufferEncoding): this; + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding: BufferEncoding, cb?: () => void): this; + cork(): void; + uncork(): void; + destroy(error?: Error): this; + + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. drain + * 3. error + * 4. finish + * 5. pipe + * 6. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "drain"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "drain", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "drain", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "close", listener: () => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + interface DuplexOptions extends ReadableOptions, WritableOptions { + allowHalfOpen?: boolean | undefined; + readableObjectMode?: boolean | undefined; + writableObjectMode?: boolean | undefined; + readableHighWaterMark?: number | undefined; + writableHighWaterMark?: number | undefined; + writableCorked?: number | undefined; + read?(this: Duplex, size: number): void; + write?(this: Duplex, chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + writev?( + this: Duplex, + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Duplex, callback: (error?: Error | null) => void): void; + destroy?(this: Duplex, error: Error | null, callback: (error: Error | null) => void): void; + } + + // Note: Duplex extends both Readable and Writable. + class Duplex extends Readable implements Writable { + readonly writable: boolean; + readonly writableEnded: boolean; + readonly writableFinished: boolean; + readonly writableHighWaterMark: number; + readonly writableLength: number; + readonly writableObjectMode: boolean; + readonly writableCorked: number; + allowHalfOpen: boolean; + constructor(opts?: DuplexOptions); + _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; + _writev?( + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + _destroy(error: Error | null, callback: (error: Error | null) => void): void; + _final(callback: (error?: Error | null) => void): void; + write(chunk: any, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; + write(chunk: any, cb?: (error: Error | null | undefined) => void): boolean; + setDefaultEncoding(encoding: BufferEncoding): this; + end(cb?: () => void): this; + end(chunk: any, cb?: () => void): this; + end(chunk: any, encoding?: BufferEncoding, cb?: () => void): this; + cork(): void; + uncork(): void; + /** + * Event emitter + * The defined events on documents including: + * 1. close + * 2. data + * 3. drain + * 4. end + * 5. error + * 6. finish + * 7. pause + * 8. pipe + * 9. readable + * 10. resume + * 11. unpipe + */ + addListener(event: "close", listener: () => void): this; + addListener(event: "data", listener: (chunk: any) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "finish", listener: () => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "pipe", listener: (src: Readable) => void): this; + addListener(event: "readable", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "unpipe", listener: (src: Readable) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "close"): boolean; + emit(event: "data", chunk: any): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "finish"): boolean; + emit(event: "pause"): boolean; + emit(event: "pipe", src: Readable): boolean; + emit(event: "readable"): boolean; + emit(event: "resume"): boolean; + emit(event: "unpipe", src: Readable): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + on(event: "close", listener: () => void): this; + on(event: "data", listener: (chunk: any) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "finish", listener: () => void): this; + on(event: "pause", listener: () => void): this; + on(event: "pipe", listener: (src: Readable) => void): this; + on(event: "readable", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "unpipe", listener: (src: Readable) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "data", listener: (chunk: any) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "finish", listener: () => void): this; + once(event: "pause", listener: () => void): this; + once(event: "pipe", listener: (src: Readable) => void): this; + once(event: "readable", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "unpipe", listener: (src: Readable) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "data", listener: (chunk: any) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "finish", listener: () => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "pipe", listener: (src: Readable) => void): this; + prependListener(event: "readable", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "unpipe", listener: (src: Readable) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "data", listener: (chunk: any) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "finish", listener: () => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "pipe", listener: (src: Readable) => void): this; + prependOnceListener(event: "readable", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "unpipe", listener: (src: Readable) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: "close", listener: () => void): this; + removeListener(event: "data", listener: (chunk: any) => void): this; + removeListener(event: "drain", listener: () => void): this; + removeListener(event: "end", listener: () => void): this; + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "finish", listener: () => void): this; + removeListener(event: "pause", listener: () => void): this; + removeListener(event: "pipe", listener: (src: Readable) => void): this; + removeListener(event: "readable", listener: () => void): this; + removeListener(event: "resume", listener: () => void): this; + removeListener(event: "unpipe", listener: (src: Readable) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + } + + type TransformCallback = (error?: Error | null, data?: any) => void; + + interface TransformOptions extends DuplexOptions { + read?(this: Transform, size: number): void; + write?( + this: Transform, + chunk: any, + encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ): void; + writev?( + this: Transform, + chunks: Array<{ chunk: any; encoding: BufferEncoding }>, + callback: (error?: Error | null) => void, + ): void; + final?(this: Transform, callback: (error?: Error | null) => void): void; + destroy?(this: Transform, error: Error | null, callback: (error: Error | null) => void): void; + transform?(this: Transform, chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + flush?(this: Transform, callback: TransformCallback): void; + } + + class Transform extends Duplex { + constructor(opts?: TransformOptions); + _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; + _flush(callback: TransformCallback): void; + } + + class PassThrough extends Transform {} + + interface FinishedOptions { + error?: boolean | undefined; + readable?: boolean | undefined; + writable?: boolean | undefined; + } + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options: FinishedOptions, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + function finished( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + callback: (err?: NodeJS.ErrnoException | null) => void, + ): () => void; + namespace finished { + function __promisify__( + stream: NodeJS.ReadableStream | NodeJS.WritableStream | NodeJS.ReadWriteStream, + options?: FinishedOptions, + ): Promise; + } + + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: T, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): T; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: T, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): T; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.ReadWriteStream, + stream4: T, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): T; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.ReadWriteStream, + stream4: NodeJS.ReadWriteStream, + stream5: T, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): T; + function pipeline( + streams: ReadonlyArray, + callback?: (err: NodeJS.ErrnoException | null) => void, + ): NodeJS.WritableStream; + function pipeline( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array< + NodeJS.ReadWriteStream | NodeJS.WritableStream | ((err: NodeJS.ErrnoException | null) => void) + > + ): NodeJS.WritableStream; + namespace pipeline { + function __promisify__(stream1: NodeJS.ReadableStream, stream2: NodeJS.WritableStream): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.WritableStream, + ): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.ReadWriteStream, + stream4: NodeJS.WritableStream, + ): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream, + stream3: NodeJS.ReadWriteStream, + stream4: NodeJS.ReadWriteStream, + stream5: NodeJS.WritableStream, + ): Promise; + function __promisify__( + streams: ReadonlyArray, + ): Promise; + function __promisify__( + stream1: NodeJS.ReadableStream, + stream2: NodeJS.ReadWriteStream | NodeJS.WritableStream, + ...streams: Array + ): Promise; + } + + interface Pipe { + close(): void; + hasRef(): boolean; + ref(): void; + unref(): void; + } + } + + export = internal; +} +declare module "node:stream" { + import stream = require("stream"); + export = stream; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/string_decoder.d.ts b/node_backend/node_modules/@types/node/ts4.8/string_decoder.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..62ad20809e158ede9deb849969a873cf36579193 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/string_decoder.d.ts @@ -0,0 +1,10 @@ +declare module "string_decoder" { + class StringDecoder { + constructor(encoding?: BufferEncoding); + write(buffer: Buffer): string; + end(buffer?: Buffer): string; + } +} +declare module "node:string_decoder" { + export * from "string_decoder"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/timers.d.ts b/node_backend/node_modules/@types/node/ts4.8/timers.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b6b31472bc10d39bd08e90dac4103994b8c070df --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/timers.d.ts @@ -0,0 +1,19 @@ +declare module "timers" { + function setTimeout(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout; + namespace setTimeout { + function __promisify__(ms: number): Promise; + function __promisify__(ms: number, value: T): Promise; + } + function clearTimeout(timeoutId: NodeJS.Timeout | string | number | undefined): void; + function setInterval(callback: (...args: any[]) => void, ms?: number, ...args: any[]): NodeJS.Timeout; + function clearInterval(intervalId: NodeJS.Timeout | string | number | undefined): void; + function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate; + namespace setImmediate { + function __promisify__(): Promise; + function __promisify__(value: T): Promise; + } + function clearImmediate(immediateId: NodeJS.Immediate | undefined): void; +} +declare module "node:timers" { + export * from "timers"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/tls.d.ts b/node_backend/node_modules/@types/node/ts4.8/tls.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f99ab5c4c8bc48c2101009df0070dbe207a01e2d --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/tls.d.ts @@ -0,0 +1,866 @@ +declare module "tls" { + import * as net from "net"; + import * as stream from "stream"; + + const CLIENT_RENEG_LIMIT: number; + const CLIENT_RENEG_WINDOW: number; + + interface Certificate { + /** + * Country code. + */ + C: string; + /** + * Street. + */ + ST: string; + /** + * Locality. + */ + L: string; + /** + * Organization. + */ + O: string; + /** + * Organizational unit. + */ + OU: string; + /** + * Common name. + */ + CN: string; + } + + interface PeerCertificate { + subject: Certificate; + issuer: Certificate; + subjectaltname: string; + infoAccess: NodeJS.Dict; + modulus: string; + exponent: string; + valid_from: string; + valid_to: string; + fingerprint: string; + fingerprint256: string; + ext_key_usage: string[]; + serialNumber: string; + raw: Buffer; + } + + interface DetailedPeerCertificate extends PeerCertificate { + issuerCertificate: DetailedPeerCertificate; + } + + interface CipherNameAndProtocol { + /** + * The cipher name. + */ + name: string; + /** + * SSL/TLS protocol version. + */ + version: string; + + /** + * IETF name for the cipher suite. + */ + standardName: string; + } + + interface EphemeralKeyInfo { + /** + * The supported types are 'DH' and 'ECDH'. + */ + type: string; + /** + * The name property is available only when type is 'ECDH'. + */ + name?: string | undefined; + /** + * The size of parameter of an ephemeral key exchange. + */ + size: number; + } + + interface KeyObject { + /** + * Private keys in PEM format. + */ + pem: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + + interface PxfObject { + /** + * PFX or PKCS12 encoded private key and certificate chain. + */ + buf: string | Buffer; + /** + * Optional passphrase. + */ + passphrase?: string | undefined; + } + + interface TLSSocketOptions extends SecureContextOptions, CommonConnectionOptions { + /** + * If true the TLS socket will be instantiated in server-mode. + * Defaults to false. + */ + isServer?: boolean | undefined; + /** + * An optional net.Server instance. + */ + server?: net.Server | undefined; + + /** + * An optional Buffer instance containing a TLS session. + */ + session?: Buffer | undefined; + /** + * If true, specifies that the OCSP status request extension will be + * added to the client hello and an 'OCSPResponse' event will be + * emitted on the socket before establishing a secure communication + */ + requestOCSP?: boolean | undefined; + } + + class TLSSocket extends net.Socket { + /** + * Construct a new tls.TLSSocket object from an existing TCP socket. + */ + constructor(socket: net.Socket, options?: TLSSocketOptions); + + /** + * A boolean that is true if the peer certificate was signed by one of the specified CAs, otherwise false. + */ + authorized: boolean; + /** + * The reason why the peer's certificate has not been verified. + * This property becomes available only when tlsSocket.authorized === false. + */ + authorizationError: Error; + /** + * Static boolean value, always true. + * May be used to distinguish TLS sockets from regular ones. + */ + encrypted: true; + + /** + * String containing the selected ALPN protocol. + * Before a handshake has completed, this value is always null. + * When a handshake is completed but not ALPN protocol was selected, tlsSocket.alpnProtocol equals false. + */ + alpnProtocol: string | false | null; + + /** + * Returns an object representing the local certificate. The returned + * object has some properties corresponding to the fields of the + * certificate. + * + * See tls.TLSSocket.getPeerCertificate() for an example of the + * certificate structure. + * + * If there is no local certificate, an empty object will be returned. + * If the socket has been destroyed, null will be returned. + */ + getCertificate(): PeerCertificate | object | null; + /** + * Returns an object representing the cipher name and the SSL/TLS protocol version of the current connection. + * @returns Returns an object representing the cipher name + * and the SSL/TLS protocol version of the current connection. + */ + getCipher(): CipherNameAndProtocol; + /** + * Returns an object representing the type, name, and size of parameter + * of an ephemeral key exchange in Perfect Forward Secrecy on a client + * connection. It returns an empty object when the key exchange is not + * ephemeral. As this is only supported on a client socket; null is + * returned if called on a server socket. The supported types are 'DH' + * and 'ECDH'. The name property is available only when type is 'ECDH'. + * + * For example: { type: 'ECDH', name: 'prime256v1', size: 256 }. + */ + getEphemeralKeyInfo(): EphemeralKeyInfo | object | null; + /** + * Returns the latest Finished message that has + * been sent to the socket as part of a SSL/TLS handshake, or undefined + * if no Finished message has been sent yet. + * + * As the Finished messages are message digests of the complete + * handshake (with a total of 192 bits for TLS 1.0 and more for SSL + * 3.0), they can be used for external authentication procedures when + * the authentication provided by SSL/TLS is not desired or is not + * enough. + * + * Corresponds to the SSL_get_finished routine in OpenSSL and may be + * used to implement the tls-unique channel binding from RFC 5929. + */ + getFinished(): Buffer | undefined; + /** + * Returns an object representing the peer's certificate. + * The returned object has some properties corresponding to the field of the certificate. + * If detailed argument is true the full chain with issuer property will be returned, + * if false only the top certificate without issuer property. + * If the peer does not provide a certificate, it returns null or an empty object. + * @param detailed - If true; the full chain with issuer property will be returned. + * @returns An object representing the peer's certificate. + */ + getPeerCertificate(detailed: true): DetailedPeerCertificate; + getPeerCertificate(detailed?: false): PeerCertificate; + getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate; + /** + * Returns the latest Finished message that is expected or has actually + * been received from the socket as part of a SSL/TLS handshake, or + * undefined if there is no Finished message so far. + * + * As the Finished messages are message digests of the complete + * handshake (with a total of 192 bits for TLS 1.0 and more for SSL + * 3.0), they can be used for external authentication procedures when + * the authentication provided by SSL/TLS is not desired or is not + * enough. + * + * Corresponds to the SSL_get_peer_finished routine in OpenSSL and may + * be used to implement the tls-unique channel binding from RFC 5929. + */ + getPeerFinished(): Buffer | undefined; + /** + * Returns a string containing the negotiated SSL/TLS protocol version of the current connection. + * The value `'unknown'` will be returned for connected sockets that have not completed the handshaking process. + * The value `null` will be returned for server sockets or disconnected client sockets. + * See https://www.openssl.org/docs/man1.0.2/ssl/SSL_get_version.html for more information. + * @returns negotiated SSL/TLS protocol version of the current connection + */ + getProtocol(): string | null; + /** + * Could be used to speed up handshake establishment when reconnecting to the server. + * @returns ASN.1 encoded TLS session or undefined if none was negotiated. + */ + getSession(): Buffer | undefined; + /** + * Returns a list of signature algorithms shared between the server and + * the client in the order of decreasing preference. + */ + getSharedSigalgs(): string[]; + /** + * NOTE: Works only with client TLS sockets. + * Useful only for debugging, for session reuse provide session option to tls.connect(). + * @returns TLS session ticket or undefined if none was negotiated. + */ + getTLSTicket(): Buffer | undefined; + /** + * Returns true if the session was reused, false otherwise. + */ + isSessionReused(): boolean; + /** + * Initiate TLS renegotiation process. + * + * NOTE: Can be used to request peer's certificate after the secure connection has been established. + * ANOTHER NOTE: When running as the server, socket will be destroyed with an error after handshakeTimeout timeout. + * @param options - The options may contain the following fields: rejectUnauthorized, + * requestCert (See tls.createServer() for details). + * @param callback - callback(err) will be executed with null as err, once the renegotiation + * is successfully completed. + * @return `undefined` when socket is destroy, `false` if negotiaion can't be initiated. + */ + renegotiate( + options: { rejectUnauthorized?: boolean | undefined; requestCert?: boolean | undefined }, + callback: (err: Error | null) => void, + ): undefined | boolean; + /** + * Set maximum TLS fragment size (default and maximum value is: 16384, minimum is: 512). + * Smaller fragment size decreases buffering latency on the client: large fragments are buffered by + * the TLS layer until the entire fragment is received and its integrity is verified; + * large fragments can span multiple roundtrips, and their processing can be delayed due to packet + * loss or reordering. However, smaller fragments add extra TLS framing bytes and CPU overhead, + * which may decrease overall server throughput. + * @param size - TLS fragment size (default and maximum value is: 16384, minimum is: 512). + * @returns Returns true on success, false otherwise. + */ + setMaxSendFragment(size: number): boolean; + + /** + * Disables TLS renegotiation for this TLSSocket instance. Once called, + * attempts to renegotiate will trigger an 'error' event on the + * TLSSocket. + */ + disableRenegotiation(): void; + + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * + * Note: The format of the output is identical to the output of `openssl s_client + * -trace` or `openssl s_server -trace`. While it is produced by OpenSSL's + * `SSL_trace()` function, the format is undocumented, can change without notice, + * and should not be relied on. + */ + enableTrace(): void; + + /** + * @param length number of bytes to retrieve from keying material + * @param label an application specific label, typically this will be a value from the + * [IANA Exporter Label Registry](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels). + * @param context optionally provide a context. + */ + exportKeyingMaterial(length: number, label: string, context: Buffer): Buffer; + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + addListener(event: "secureConnect", listener: () => void): this; + addListener(event: "session", listener: (session: Buffer) => void): this; + addListener(event: "keylog", listener: (line: Buffer) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "OCSPResponse", response: Buffer): boolean; + emit(event: "secureConnect"): boolean; + emit(event: "session", session: Buffer): boolean; + emit(event: "keylog", line: Buffer): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "OCSPResponse", listener: (response: Buffer) => void): this; + on(event: "secureConnect", listener: () => void): this; + on(event: "session", listener: (session: Buffer) => void): this; + on(event: "keylog", listener: (line: Buffer) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "OCSPResponse", listener: (response: Buffer) => void): this; + once(event: "secureConnect", listener: () => void): this; + once(event: "session", listener: (session: Buffer) => void): this; + once(event: "keylog", listener: (line: Buffer) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + prependListener(event: "secureConnect", listener: () => void): this; + prependListener(event: "session", listener: (session: Buffer) => void): this; + prependListener(event: "keylog", listener: (line: Buffer) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "OCSPResponse", listener: (response: Buffer) => void): this; + prependOnceListener(event: "secureConnect", listener: () => void): this; + prependOnceListener(event: "session", listener: (session: Buffer) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer) => void): this; + } + + interface CommonConnectionOptions { + /** + * An optional TLS context object from tls.createSecureContext() + */ + secureContext?: SecureContext | undefined; + + /** + * When enabled, TLS packet trace information is written to `stderr`. This can be + * used to debug TLS connection problems. + * @default false + */ + enableTrace?: boolean | undefined; + /** + * If true the server will request a certificate from clients that + * connect and attempt to verify that certificate. Defaults to + * false. + */ + requestCert?: boolean | undefined; + /** + * An array of strings or a Buffer naming possible ALPN protocols. + * (Protocols should be ordered by their priority.) + */ + ALPNProtocols?: string[] | Uint8Array[] | Uint8Array | undefined; + /** + * SNICallback(servername, cb) A function that will be + * called if the client supports SNI TLS extension. Two arguments + * will be passed when called: servername and cb. SNICallback should + * invoke cb(null, ctx), where ctx is a SecureContext instance. + * (tls.createSecureContext(...) can be used to get a proper + * SecureContext.) If SNICallback wasn't provided the default callback + * with high-level API will be used (see below). + */ + SNICallback?: ((servername: string, cb: (err: Error | null, ctx: SecureContext) => void) => void) | undefined; + /** + * If true the server will reject any connection which is not + * authorized with the list of supplied CAs. This option only has an + * effect if requestCert is true. + * @default true + */ + rejectUnauthorized?: boolean | undefined; + } + + interface TlsOptions extends SecureContextOptions, CommonConnectionOptions, net.ServerOpts { + /** + * Abort the connection if the SSL/TLS handshake does not finish in the + * specified number of milliseconds. A 'tlsClientError' is emitted on + * the tls.Server object whenever a handshake times out. Default: + * 120000 (120 seconds). + */ + handshakeTimeout?: number | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + */ + ticketKeys?: Buffer | undefined; + + /** + * @param socket + * @param identity identity parameter sent from the client. + * @return pre-shared key that must either be + * a buffer or `null` to stop the negotiation process. Returned PSK must be + * compatible with the selected cipher's digest. + * + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with the identity provided by the client. + * If the return value is `null` the negotiation process will stop and an + * "unknown_psk_identity" alert message will be sent to the other party. + * If the server wishes to hide the fact that the PSK identity was not known, + * the callback must provide some random data as `psk` to make the connection + * fail with "decrypt_error" before negotiation is finished. + * PSK ciphers are disabled by default, and using TLS-PSK thus + * requires explicitly specifying a cipher suite with the `ciphers` option. + * More information can be found in the RFC 4279. + */ + + pskCallback?(socket: TLSSocket, identity: string): DataView | NodeJS.TypedArray | null; + /** + * hint to send to a client to help + * with selecting the identity during TLS-PSK negotiation. Will be ignored + * in TLS 1.3. Upon failing to set pskIdentityHint `tlsClientError` will be + * emitted with `ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED` code. + */ + pskIdentityHint?: string | undefined; + } + + interface PSKCallbackNegotation { + psk: DataView | NodeJS.TypedArray; + identity: string; + } + + interface ConnectionOptions extends SecureContextOptions, CommonConnectionOptions { + host?: string | undefined; + port?: number | undefined; + path?: string | undefined; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored. + socket?: stream.Duplex | undefined; // Establish secure connection on a given socket rather than creating a new socket + checkServerIdentity?: typeof checkServerIdentity | undefined; + servername?: string | undefined; // SNI TLS Extension + session?: Buffer | undefined; + minDHSize?: number | undefined; + lookup?: net.LookupFunction | undefined; + timeout?: number | undefined; + /** + * When negotiating TLS-PSK (pre-shared keys), this function is called + * with optional identity `hint` provided by the server or `null` + * in case of TLS 1.3 where `hint` was removed. + * It will be necessary to provide a custom `tls.checkServerIdentity()` + * for the connection as the default one will try to check hostname/IP + * of the server against the certificate but that's not applicable for PSK + * because there won't be a certificate present. + * More information can be found in the RFC 4279. + * + * @param hint message sent from the server to help client + * decide which identity to use during negotiation. + * Always `null` if TLS 1.3 is used. + * @returns Return `null` to stop the negotiation process. `psk` must be + * compatible with the selected cipher's digest. + * `identity` must use UTF-8 encoding. + */ + pskCallback?(hint: string | null): PSKCallbackNegotation | null; + } + + class Server extends net.Server { + constructor(secureConnectionListener?: (socket: TLSSocket) => void); + constructor(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void); + + /** + * The server.addContext() method adds a secure context that will be + * used if the client request's SNI name matches the supplied hostname + * (or wildcard). + */ + addContext(hostName: string, credentials: SecureContextOptions): void; + /** + * Returns the session ticket keys. + */ + getTicketKeys(): Buffer; + /** + * The server.setSecureContext() method replaces the + * secure context of an existing server. Existing connections to the + * server are not interrupted. + */ + setSecureContext(details: SecureContextOptions): void; + /** + * The server.setSecureContext() method replaces the secure context of + * an existing server. Existing connections to the server are not + * interrupted. + */ + setTicketKeys(keys: Buffer): void; + + /** + * events.EventEmitter + * 1. tlsClientError + * 2. newSession + * 3. OCSPRequest + * 4. resumeSession + * 5. secureConnection + * 6. keylog + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + addListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + addListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + addListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + addListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + addListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "tlsClientError", err: Error, tlsSocket: TLSSocket): boolean; + emit(event: "newSession", sessionId: Buffer, sessionData: Buffer, callback: () => void): boolean; + emit( + event: "OCSPRequest", + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ): boolean; + emit( + event: "resumeSession", + sessionId: Buffer, + callback: (err: Error | null, sessionData: Buffer | null) => void, + ): boolean; + emit(event: "secureConnection", tlsSocket: TLSSocket): boolean; + emit(event: "keylog", line: Buffer, tlsSocket: TLSSocket): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + on(event: "newSession", listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void): this; + on( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + on( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + on(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + on(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + once( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + once( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + once( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + once(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + once(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + prependListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + prependListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "tlsClientError", listener: (err: Error, tlsSocket: TLSSocket) => void): this; + prependOnceListener( + event: "newSession", + listener: (sessionId: Buffer, sessionData: Buffer, callback: () => void) => void, + ): this; + prependOnceListener( + event: "OCSPRequest", + listener: ( + certificate: Buffer, + issuer: Buffer, + callback: (err: Error | null, resp: Buffer) => void, + ) => void, + ): this; + prependOnceListener( + event: "resumeSession", + listener: (sessionId: Buffer, callback: (err: Error | null, sessionData: Buffer | null) => void) => void, + ): this; + prependOnceListener(event: "secureConnection", listener: (tlsSocket: TLSSocket) => void): this; + prependOnceListener(event: "keylog", listener: (line: Buffer, tlsSocket: TLSSocket) => void): this; + } + + interface SecurePair { + encrypted: TLSSocket; + cleartext: TLSSocket; + } + + type SecureVersion = "TLSv1.3" | "TLSv1.2" | "TLSv1.1" | "TLSv1"; + + interface SecureContextOptions { + /** + * Optionally override the trusted CA certificates. Default is to trust + * the well-known CAs curated by Mozilla. Mozilla's CAs are completely + * replaced when CAs are explicitly specified using this option. + */ + ca?: string | Buffer | Array | undefined; + /** + * Cert chains in PEM format. One cert chain should be provided per + * private key. Each cert chain should consist of the PEM formatted + * certificate for a provided private key, followed by the PEM + * formatted intermediate certificates (if any), in order, and not + * including the root CA (the root CA must be pre-known to the peer, + * see ca). When providing multiple cert chains, they do not have to + * be in the same order as their private keys in key. If the + * intermediate certificates are not provided, the peer will not be + * able to validate the certificate, and the handshake will fail. + */ + cert?: string | Buffer | Array | undefined; + /** + * Colon-separated list of supported signature algorithms. The list + * can contain digest algorithms (SHA256, MD5 etc.), public key + * algorithms (RSA-PSS, ECDSA etc.), combination of both (e.g + * 'RSA+SHA384') or TLS v1.3 scheme names (e.g. rsa_pss_pss_sha512). + */ + sigalgs?: string | undefined; + /** + * Cipher suite specification, replacing the default. For more + * information, see modifying the default cipher suite. Permitted + * ciphers can be obtained via tls.getCiphers(). Cipher names must be + * uppercased in order for OpenSSL to accept them. + */ + ciphers?: string | undefined; + /** + * Name of an OpenSSL engine which can provide the client certificate. + */ + clientCertEngine?: string | undefined; + /** + * PEM formatted CRLs (Certificate Revocation Lists). + */ + crl?: string | Buffer | Array | undefined; + /** + * Diffie Hellman parameters, required for Perfect Forward Secrecy. Use + * openssl dhparam to create the parameters. The key length must be + * greater than or equal to 1024 bits or else an error will be thrown. + * Although 1024 bits is permissible, use 2048 bits or larger for + * stronger security. If omitted or invalid, the parameters are + * silently discarded and DHE ciphers will not be available. + */ + dhparam?: string | Buffer | undefined; + /** + * A string describing a named curve or a colon separated list of curve + * NIDs or names, for example P-521:P-384:P-256, to use for ECDH key + * agreement. Set to auto to select the curve automatically. Use + * crypto.getCurves() to obtain a list of available curve names. On + * recent releases, openssl ecparam -list_curves will also display the + * name and description of each available elliptic curve. Default: + * tls.DEFAULT_ECDH_CURVE. + */ + ecdhCurve?: string | undefined; + /** + * Attempt to use the server's cipher suite preferences instead of the + * client's. When true, causes SSL_OP_CIPHER_SERVER_PREFERENCE to be + * set in secureOptions + */ + honorCipherOrder?: boolean | undefined; + /** + * Private keys in PEM format. PEM allows the option of private keys + * being encrypted. Encrypted keys will be decrypted with + * options.passphrase. Multiple keys using different algorithms can be + * provided either as an array of unencrypted key strings or buffers, + * or an array of objects in the form {pem: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted keys will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + key?: string | Buffer | Array | undefined; + /** + * Name of an OpenSSL engine to get private key from. Should be used + * together with privateKeyIdentifier. + */ + privateKeyEngine?: string | undefined; + /** + * Identifier of a private key managed by an OpenSSL engine. Should be + * used together with privateKeyEngine. Should not be set together with + * key, because both options define a private key in different ways. + */ + privateKeyIdentifier?: string | undefined; + /** + * Optionally set the maximum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. + * **Default:** `'TLSv1.3'`, unless changed using CLI options. Using + * `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets the default to + * `'TLSv1.3'`. If multiple of the options are provided, the highest maximum is used. + */ + maxVersion?: SecureVersion | undefined; + /** + * Optionally set the minimum TLS version to allow. One + * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the + * `secureProtocol` option, use one or the other. It is not recommended to use + * less than TLSv1.2, but it may be required for interoperability. + * **Default:** `'TLSv1.2'`, unless changed using CLI options. Using + * `--tls-v1.0` sets the default to `'TLSv1'`. Using `--tls-v1.1` sets the default to + * `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the lowest minimum is used. + */ + minVersion?: SecureVersion | undefined; + /** + * Shared passphrase used for a single private key and/or a PFX. + */ + passphrase?: string | undefined; + /** + * PFX or PKCS12 encoded private key and certificate chain. pfx is an + * alternative to providing key and cert individually. PFX is usually + * encrypted, if it is, passphrase will be used to decrypt it. Multiple + * PFX can be provided either as an array of unencrypted PFX buffers, + * or an array of objects in the form {buf: [, + * passphrase: ]}. The object form can only occur in an array. + * object.passphrase is optional. Encrypted PFX will be decrypted with + * object.passphrase if provided, or options.passphrase if it is not. + */ + pfx?: string | Buffer | Array | undefined; + /** + * Optionally affect the OpenSSL protocol behavior, which is not + * usually necessary. This should be used carefully if at all! Value is + * a numeric bitmask of the SSL_OP_* options from OpenSSL Options + */ + secureOptions?: number | undefined; // Value is a numeric bitmask of the `SSL_OP_*` options + /** + * Legacy mechanism to select the TLS protocol version to use, it does + * not support independent control of the minimum and maximum version, + * and does not support limiting the protocol to TLSv1.3. Use + * minVersion and maxVersion instead. The possible values are listed as + * SSL_METHODS, use the function names as strings. For example, use + * 'TLSv1_1_method' to force TLS version 1.1, or 'TLS_method' to allow + * any TLS protocol version up to TLSv1.3. It is not recommended to use + * TLS versions less than 1.2, but it may be required for + * interoperability. Default: none, see minVersion. + */ + secureProtocol?: string | undefined; + /** + * Opaque identifier used by servers to ensure session state is not + * shared between applications. Unused by clients. + */ + sessionIdContext?: string | undefined; + /** + * 48-bytes of cryptographically strong pseudo-random data. + * See Session Resumption for more information. + */ + ticketKeys?: Buffer | undefined; + /** + * The number of seconds after which a TLS session created by the + * server will no longer be resumable. See Session Resumption for more + * information. Default: 300. + */ + sessionTimeout?: number | undefined; + } + + interface SecureContext { + context: any; + } + + /* + * Verifies the certificate `cert` is issued to host `host`. + * @host The hostname to verify the certificate against + * @cert PeerCertificate representing the peer's certificate + * + * Returns Error object, populating it with the reason, host and cert on failure. On success, returns undefined. + */ + function checkServerIdentity(host: string, cert: PeerCertificate): Error | undefined; + function createServer(secureConnectionListener?: (socket: TLSSocket) => void): Server; + function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server; + function connect(options: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + function connect( + port: number, + host?: string, + options?: ConnectionOptions, + secureConnectListener?: () => void, + ): TLSSocket; + function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; + /** + * @deprecated since v0.11.3 Use `tls.TLSSocket` instead. + */ + function createSecurePair( + credentials?: SecureContext, + isServer?: boolean, + requestCert?: boolean, + rejectUnauthorized?: boolean, + ): SecurePair; + function createSecureContext(options?: SecureContextOptions): SecureContext; + function getCiphers(): string[]; + + /** + * The default curve name to use for ECDH key agreement in a tls server. + * The default value is 'auto'. See tls.createSecureContext() for further + * information. + */ + let DEFAULT_ECDH_CURVE: string; + /** + * The default value of the maxVersion option of + * tls.createSecureContext(). It can be assigned any of the supported TLS + * protocol versions, 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: + * 'TLSv1.3', unless changed using CLI options. Using --tls-max-v1.2 sets + * the default to 'TLSv1.2'. Using --tls-max-v1.3 sets the default to + * 'TLSv1.3'. If multiple of the options are provided, the highest maximum + * is used. + */ + let DEFAULT_MAX_VERSION: SecureVersion; + /** + * The default value of the minVersion option of tls.createSecureContext(). + * It can be assigned any of the supported TLS protocol versions, + * 'TLSv1.3', 'TLSv1.2', 'TLSv1.1', or 'TLSv1'. Default: 'TLSv1.2', unless + * changed using CLI options. Using --tls-min-v1.0 sets the default to + * 'TLSv1'. Using --tls-min-v1.1 sets the default to 'TLSv1.1'. Using + * --tls-min-v1.3 sets the default to 'TLSv1.3'. If multiple of the options + * are provided, the lowest minimum is used. + */ + let DEFAULT_MIN_VERSION: SecureVersion; + + /** + * An immutable array of strings representing the root certificates (in PEM + * format) used for verifying peer certificates. This is the default value + * of the ca option to tls.createSecureContext(). + */ + const rootCertificates: ReadonlyArray; +} +declare module "node:tls" { + export * from "tls"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/trace_events.d.ts b/node_backend/node_modules/@types/node/ts4.8/trace_events.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9c2a0b7913ebb7ef203464f5c20f8db7263aec7d --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/trace_events.d.ts @@ -0,0 +1,64 @@ +declare module "trace_events" { + /** + * The `Tracing` object is used to enable or disable tracing for sets of + * categories. Instances are created using the + * `trace_events.createTracing()` method. + * + * When created, the `Tracing` object is disabled. Calling the + * `tracing.enable()` method adds the categories to the set of enabled trace + * event categories. Calling `tracing.disable()` will remove the categories + * from the set of enabled trace event categories. + */ + interface Tracing { + /** + * A comma-separated list of the trace event categories covered by this + * `Tracing` object. + */ + readonly categories: string; + + /** + * Disables this `Tracing` object. + * + * Only trace event categories _not_ covered by other enabled `Tracing` + * objects and _not_ specified by the `--trace-event-categories` flag + * will be disabled. + */ + disable(): void; + + /** + * Enables this `Tracing` object for the set of categories covered by + * the `Tracing` object. + */ + enable(): void; + + /** + * `true` only if the `Tracing` object has been enabled. + */ + readonly enabled: boolean; + } + + interface CreateTracingOptions { + /** + * An array of trace category names. Values included in the array are + * coerced to a string when possible. An error will be thrown if the + * value cannot be coerced. + */ + categories: string[]; + } + + /** + * Creates and returns a Tracing object for the given set of categories. + */ + function createTracing(options: CreateTracingOptions): Tracing; + + /** + * Returns a comma-separated list of all currently-enabled trace event + * categories. The current set of enabled trace event categories is + * determined by the union of all currently-enabled `Tracing` objects and + * any categories enabled using the `--trace-event-categories` flag. + */ + function getEnabledCategories(): string | undefined; +} +declare module "node:trace_events" { + export * from "trace_events"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/tty.d.ts b/node_backend/node_modules/@types/node/ts4.8/tty.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3aa08a416351fe117f22b116074b78cbe3d4ea62 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/tty.d.ts @@ -0,0 +1,69 @@ +declare module "tty" { + import * as net from "net"; + + function isatty(fd: number): boolean; + class ReadStream extends net.Socket { + constructor(fd: number, options?: net.SocketConstructorOpts); + isRaw: boolean; + setRawMode(mode: boolean): this; + isTTY: boolean; + } + /** + * -1 - to the left from cursor + * 0 - the entire line + * 1 - to the right from cursor + */ + type Direction = -1 | 0 | 1; + class WriteStream extends net.Socket { + constructor(fd: number); + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "resize", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "resize"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "resize", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "resize", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "resize", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "resize", listener: () => void): this; + + /** + * Clears the current line of this WriteStream in a direction identified by `dir`. + */ + clearLine(dir: Direction, callback?: () => void): boolean; + /** + * Clears this `WriteStream` from the current cursor down. + */ + clearScreenDown(callback?: () => void): boolean; + /** + * Moves this WriteStream's cursor to the specified position. + */ + cursorTo(x: number, y?: number, callback?: () => void): boolean; + cursorTo(x: number, callback: () => void): boolean; + /** + * Moves this WriteStream's cursor relative to its current position. + */ + moveCursor(dx: number, dy: number, callback?: () => void): boolean; + /** + * @default `process.env` + */ + getColorDepth(env?: {}): number; + hasColors(depth?: number): boolean; + hasColors(env?: {}): boolean; + hasColors(depth: number, env?: {}): boolean; + getWindowSize(): [number, number]; + columns: number; + rows: number; + isTTY: boolean; + } +} +declare module "node:tty" { + export * from "tty"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/url.d.ts b/node_backend/node_modules/@types/node/ts4.8/url.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d8c94936b9ca9757264b0051e6ac6edbc00e1de2 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/url.d.ts @@ -0,0 +1,187 @@ +declare module "url" { + import { ClientRequestArgs } from "node:http"; + import { ParsedUrlQuery, ParsedUrlQueryInput } from "querystring"; + + // Input to `url.format` + interface UrlObject { + auth?: string | null | undefined; + hash?: string | null | undefined; + host?: string | null | undefined; + hostname?: string | null | undefined; + href?: string | null | undefined; + pathname?: string | null | undefined; + protocol?: string | null | undefined; + search?: string | null | undefined; + slashes?: boolean | null | undefined; + port?: string | number | null | undefined; + query?: string | null | ParsedUrlQueryInput | undefined; + } + + // Output of `url.parse` + interface Url { + auth: string | null; + hash: string | null; + host: string | null; + hostname: string | null; + href: string; + path: string | null; + pathname: string | null; + protocol: string | null; + search: string | null; + slashes: boolean | null; + port: string | null; + query: string | null | ParsedUrlQuery; + } + + interface UrlWithParsedQuery extends Url { + query: ParsedUrlQuery; + } + + interface UrlWithStringQuery extends Url { + query: string | null; + } + + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function parse(urlStr: string): UrlWithStringQuery; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function parse( + urlStr: string, + parseQueryString: false | undefined, + slashesDenoteHost?: boolean, + ): UrlWithStringQuery; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function parse(urlStr: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function parse(urlStr: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url; + + function format(URL: URL, options?: URLFormatOptions): string; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function format(urlObject: UrlObject | string): string; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function resolve(from: string, to: string): string; + + function domainToASCII(domain: string): string; + function domainToUnicode(domain: string): string; + + /** + * This function ensures the correct decodings of percent-encoded characters as + * well as ensuring a cross-platform valid absolute path string. + * @param url The file URL string or URL object to convert to a path. + */ + function fileURLToPath(url: string | URL): string; + + /** + * This function ensures that path is resolved absolutely, and that the URL + * control characters are correctly encoded when converting into a File URL. + * @param url The path to convert to a File URL. + */ + function pathToFileURL(url: string): URL; + /** + * This utility function converts a URL object into an ordinary options object as + * expected by the `http.request()` and `https.request()` APIs. + * + * ```js + * import { urlToHttpOptions } from 'url'; + * const myURL = new URL('https://a:b@測試?abc#foo'); + * + * console.log(urlToHttpOptions(myURL)); + * + * { + * protocol: 'https:', + * hostname: 'xn--g6w251d', + * hash: '#foo', + * search: '?abc', + * pathname: '/', + * path: '/?abc', + * href: 'https://a:b@xn--g6w251d/?abc#foo', + * auth: 'a:b' + * } + * + * ``` + * @since v14.18.0 + * @param url The `WHATWG URL` object to convert to an options object. + * @return Options object + */ + function urlToHttpOptions(url: URL): ClientRequestArgs; + + interface URLFormatOptions { + auth?: boolean | undefined; + fragment?: boolean | undefined; + search?: boolean | undefined; + unicode?: boolean | undefined; + } + + class URL { + constructor(input: string, base?: string | URL); + hash: string; + host: string; + hostname: string; + href: string; + readonly origin: string; + password: string; + pathname: string; + port: string; + protocol: string; + search: string; + readonly searchParams: URLSearchParams; + username: string; + toString(): string; + toJSON(): string; + } + + class URLSearchParams implements Iterable<[string, string]> { + constructor( + init?: + | URLSearchParams + | string + | Record> + | Iterable<[string, string]> + | ReadonlyArray<[string, string]>, + ); + readonly size: number; + append(name: string, value: string): void; + delete(name: string): void; + entries(): IterableIterator<[string, string]>; + forEach(callback: (value: string, name: string, searchParams: URLSearchParams) => void, thisArg?: any): void; + get(name: string): string | null; + getAll(name: string): string[]; + has(name: string): boolean; + keys(): IterableIterator; + set(name: string, value: string): void; + sort(): void; + toString(): string; + values(): IterableIterator; + [Symbol.iterator](): IterableIterator<[string, string]>; + } + + import { URL as _URL, URLSearchParams as _URLSearchParams } from "url"; + global { + interface URLSearchParams extends _URLSearchParams {} + interface URL extends _URL {} + interface Global { + URL: typeof _URL; + URLSearchParams: typeof _URLSearchParams; + } + /** + * `URL` class is a global reference for `require('url').URL` + * https://nodejs.org/api/url.html#the-whatwg-url-api + * @since v10.0.0 + */ + var URL: + // For compatibility with "dom" and "webworker" URL declarations + typeof globalThis extends { onmessage: any; URL: infer URL } ? URL + : typeof _URL; + /** + * `URLSearchParams` class is a global reference for `require('url').URLSearchParams`. + * https://nodejs.org/api/url.html#class-urlsearchparams + * @since v10.0.0 + */ + var URLSearchParams: + // For compatibility with "dom" and "webworker" URLSearchParams declarations + typeof globalThis extends { onmessage: any; URLSearchParams: infer URLSearchParams } ? URLSearchParams + : typeof _URLSearchParams; + } +} +declare module "node:url" { + export * from "url"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/util.d.ts b/node_backend/node_modules/@types/node/ts4.8/util.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0b0b4575abe7fcab3831239881f4f0a8405d0738 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/util.d.ts @@ -0,0 +1,278 @@ +declare module "util" { + interface InspectOptions extends NodeJS.InspectOptions {} + type Style = + | "special" + | "number" + | "bigint" + | "boolean" + | "undefined" + | "null" + | "string" + | "symbol" + | "date" + | "regexp" + | "module"; + type CustomInspectFunction = (depth: number, options: InspectOptionsStylized) => string; + interface InspectOptionsStylized extends InspectOptions { + stylize(text: string, styleType: Style): string; + } + function format(format?: any, ...param: any[]): string; + function formatWithOptions(inspectOptions: InspectOptions, format?: any, ...param: any[]): string; + function getSystemErrorName(err: number): string; + /** @deprecated since v0.11.3 - use a third party module instead. */ + function log(string: string): void; + function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string; + function inspect(object: any, options?: InspectOptions): string; + namespace inspect { + let colors: NodeJS.Dict<[number, number]>; + let styles: { + [K in Style]: string; + }; + let defaultOptions: InspectOptions; + /** + * Allows changing inspect settings from the repl. + */ + let replDefaults: InspectOptions; + const custom: unique symbol; + } + /** @deprecated since v4.0.0 - use `Array.isArray()` instead. */ + function isArray(object: any): object is any[]; + /** @deprecated since v4.0.0 - use `util.types.isRegExp()` instead. */ + function isRegExp(object: any): object is RegExp; + /** @deprecated since v4.0.0 - use `util.types.isDate()` instead. */ + function isDate(object: any): object is Date; + /** @deprecated since v4.0.0 - use `util.types.isNativeError()` instead. */ + function isError(object: any): object is Error; + function inherits(constructor: any, superConstructor: any): void; + type DebugLoggerFunction = (msg: string, ...param: any[]) => void; + interface DebugLogger extends DebugLoggerFunction { + enabled: boolean; + } + function debuglog(key: string, callback?: (fn: DebugLoggerFunction) => void): DebugLogger; + const debug: typeof debuglog; + /** @deprecated since v4.0.0 - use `typeof value === 'boolean'` instead. */ + function isBoolean(object: any): object is boolean; + /** @deprecated since v4.0.0 - use `Buffer.isBuffer()` instead. */ + function isBuffer(object: any): object is Buffer; + /** @deprecated since v4.0.0 - use `typeof value === 'function'` instead. */ + function isFunction(object: any): boolean; + /** @deprecated since v4.0.0 - use `value === null` instead. */ + function isNull(object: any): object is null; + /** @deprecated since v4.0.0 - use `value === null || value === undefined` instead. */ + function isNullOrUndefined(object: any): object is null | undefined; + /** @deprecated since v4.0.0 - use `typeof value === 'number'` instead. */ + function isNumber(object: any): object is number; + /** @deprecated since v4.0.0 - use `value !== null && typeof value === 'object'` instead. */ + function isObject(object: any): boolean; + /** @deprecated since v4.0.0 - use `(typeof value !== 'object' && typeof value !== 'function') || value === null` instead. */ + function isPrimitive(object: any): boolean; + /** @deprecated since v4.0.0 - use `typeof value === 'string'` instead. */ + function isString(object: any): object is string; + /** @deprecated since v4.0.0 - use `typeof value === 'symbol'` instead. */ + function isSymbol(object: any): object is symbol; + /** @deprecated since v4.0.0 - use `value === undefined` instead. */ + function isUndefined(object: any): object is undefined; + function deprecate(fn: T, message: string, code?: string): T; + function isDeepStrictEqual(val1: any, val2: any): boolean; + + function callbackify(fn: () => Promise): (callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: () => Promise, + ): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + function callbackify( + fn: (arg1: T1) => Promise, + ): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1) => Promise, + ): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2) => Promise, + ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2) => Promise, + ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + arg6: T6, + callback: (err: NodeJS.ErrnoException) => void, + ) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + arg6: T6, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + + interface CustomPromisifyLegacy extends Function { + __promisify__: TCustom; + } + + interface CustomPromisifySymbol extends Function { + [promisify.custom]: TCustom; + } + + type CustomPromisify = CustomPromisifySymbol | CustomPromisifyLegacy; + + function promisify(fn: CustomPromisify): TCustom; + function promisify(fn: (callback: (err: any, result: TResult) => void) => void): () => Promise; + function promisify(fn: (callback: (err?: any) => void) => void): () => Promise; + function promisify( + fn: (arg1: T1, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1) => Promise; + function promisify(fn: (arg1: T1, callback: (err?: any) => void) => void): (arg1: T1) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + function promisify(fn: Function): Function; + namespace promisify { + const custom: unique symbol; + } + + namespace types { + function isAnyArrayBuffer(object: any): object is ArrayBufferLike; + function isArgumentsObject(object: any): object is IArguments; + function isArrayBuffer(object: any): object is ArrayBuffer; + function isArrayBufferView(object: any): object is NodeJS.ArrayBufferView; + function isAsyncFunction(object: any): boolean; + function isBigInt64Array(value: any): value is BigInt64Array; + function isBigUint64Array(value: any): value is BigUint64Array; + function isBooleanObject(object: any): object is Boolean; + function isBoxedPrimitive(object: any): object is String | Number | BigInt | Boolean | Symbol; + function isDataView(object: any): object is DataView; + function isDate(object: any): object is Date; + function isExternal(object: any): boolean; + function isFloat32Array(object: any): object is Float32Array; + function isFloat64Array(object: any): object is Float64Array; + function isGeneratorFunction(object: any): object is GeneratorFunction; + function isGeneratorObject(object: any): object is Generator; + function isInt8Array(object: any): object is Int8Array; + function isInt16Array(object: any): object is Int16Array; + function isInt32Array(object: any): object is Int32Array; + function isMap( + object: T | {}, + ): object is T extends ReadonlyMap ? unknown extends T ? never + : ReadonlyMap + : Map; + function isMapIterator(object: any): boolean; + function isModuleNamespaceObject(value: any): boolean; + function isNativeError(object: any): object is Error; + function isNumberObject(object: any): object is Number; + function isPromise(object: any): object is Promise; + function isProxy(object: any): boolean; + function isRegExp(object: any): object is RegExp; + function isSet( + object: T | {}, + ): object is T extends ReadonlySet ? unknown extends T ? never + : ReadonlySet + : Set; + function isSetIterator(object: any): boolean; + function isSharedArrayBuffer(object: any): object is SharedArrayBuffer; + function isStringObject(object: any): object is String; + function isSymbolObject(object: any): object is Symbol; + function isTypedArray(object: any): object is NodeJS.TypedArray; + function isUint8Array(object: any): object is Uint8Array; + function isUint8ClampedArray(object: any): object is Uint8ClampedArray; + function isUint16Array(object: any): object is Uint16Array; + function isUint32Array(object: any): object is Uint32Array; + function isWeakMap(object: any): object is WeakMap; + function isWeakSet(object: any): object is WeakSet; + } + + class TextDecoder { + readonly encoding: string; + readonly fatal: boolean; + readonly ignoreBOM: boolean; + constructor( + encoding?: string, + options?: { fatal?: boolean | undefined; ignoreBOM?: boolean | undefined }, + ); + decode( + input?: NodeJS.ArrayBufferView | ArrayBuffer | null, + options?: { stream?: boolean | undefined }, + ): string; + } + + interface EncodeIntoResult { + /** + * The read Unicode code units of input. + */ + + read: number; + /** + * The written UTF-8 bytes of output. + */ + written: number; + } + + class TextEncoder { + readonly encoding: string; + encode(input?: string): Uint8Array; + encodeInto(input: string, output: Uint8Array): EncodeIntoResult; + } +} +declare module "node:util" { + export * from "util"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/v8.d.ts b/node_backend/node_modules/@types/node/ts4.8/v8.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2dc37b45352612fd640aebf5e6ffda134f0bbf3e --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/v8.d.ts @@ -0,0 +1,189 @@ +declare module "v8" { + import { Readable } from "stream"; + + interface HeapSpaceInfo { + space_name: string; + space_size: number; + space_used_size: number; + space_available_size: number; + physical_space_size: number; + } + + // ** Signifies if the --zap_code_space option is enabled or not. 1 == enabled, 0 == disabled. */ + type DoesZapCodeSpaceFlag = 0 | 1; + + interface HeapInfo { + total_heap_size: number; + total_heap_size_executable: number; + total_physical_size: number; + total_available_size: number; + used_heap_size: number; + heap_size_limit: number; + malloced_memory: number; + peak_malloced_memory: number; + does_zap_garbage: DoesZapCodeSpaceFlag; + number_of_native_contexts: number; + number_of_detached_contexts: number; + } + + interface HeapCodeStatistics { + code_and_metadata_size: number; + bytecode_and_metadata_size: number; + external_script_source_size: number; + } + + /** + * Returns an integer representing a "version tag" derived from the V8 version, command line flags and detected CPU features. + * This is useful for determining whether a vm.Script cachedData buffer is compatible with this instance of V8. + */ + function cachedDataVersionTag(): number; + + function getHeapStatistics(): HeapInfo; + function getHeapSpaceStatistics(): HeapSpaceInfo[]; + function setFlagsFromString(flags: string): void; + /** + * Generates a snapshot of the current V8 heap and returns a Readable + * Stream that may be used to read the JSON serialized representation. + * This conversation was marked as resolved by joyeecheung + * This JSON stream format is intended to be used with tools such as + * Chrome DevTools. The JSON schema is undocumented and specific to the + * V8 engine, and may change from one version of V8 to the next. + */ + function getHeapSnapshot(): Readable; + + /** + * @param fileName The file path where the V8 heap snapshot is to be + * saved. If not specified, a file name with the pattern + * `'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be + * generated, where `{pid}` will be the PID of the Node.js process, + * `{thread_id}` will be `0` when `writeHeapSnapshot()` is called from + * the main Node.js thread or the id of a worker thread. + */ + function writeHeapSnapshot(fileName?: string): string; + + function getHeapCodeStatistics(): HeapCodeStatistics; + + class Serializer { + /** + * Writes out a header, which includes the serialization format version. + */ + writeHeader(): void; + + /** + * Serializes a JavaScript value and adds the serialized representation to the internal buffer. + * This throws an error if value cannot be serialized. + */ + writeValue(val: any): boolean; + + /** + * Returns the stored internal buffer. + * This serializer should not be used once the buffer is released. + * Calling this method results in undefined behavior if a previous write has failed. + */ + releaseBuffer(): Buffer; + + /** + * Marks an ArrayBuffer as having its contents transferred out of band.\ + * Pass the corresponding ArrayBuffer in the deserializing context to deserializer.transferArrayBuffer(). + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + + /** + * Write a raw 32-bit unsigned integer. + */ + writeUint32(value: number): void; + + /** + * Write a raw 64-bit unsigned integer, split into high and low 32-bit parts. + */ + writeUint64(hi: number, lo: number): void; + + /** + * Write a JS number value. + */ + writeDouble(value: number): void; + + /** + * Write raw bytes into the serializer’s internal buffer. + * The deserializer will require a way to compute the length of the buffer. + */ + writeRawBytes(buffer: NodeJS.TypedArray): void; + } + + /** + * A subclass of `Serializer` that serializes `TypedArray` (in particular `Buffer`) and `DataView` objects as host objects, + * and only stores the part of their underlying `ArrayBuffers` that they are referring to. + */ + class DefaultSerializer extends Serializer { + } + + class Deserializer { + constructor(data: NodeJS.TypedArray); + /** + * Reads and validates a header (including the format version). + * May, for example, reject an invalid or unsupported wire format. + * In that case, an Error is thrown. + */ + readHeader(): boolean; + + /** + * Deserializes a JavaScript value from the buffer and returns it. + */ + readValue(): any; + + /** + * Marks an ArrayBuffer as having its contents transferred out of band. + * Pass the corresponding `ArrayBuffer` in the serializing context to serializer.transferArrayBuffer() + * (or return the id from serializer._getSharedArrayBufferId() in the case of SharedArrayBuffers). + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + + /** + * Reads the underlying wire format version. + * Likely mostly to be useful to legacy code reading old wire format versions. + * May not be called before .readHeader(). + */ + getWireFormatVersion(): number; + + /** + * Read a raw 32-bit unsigned integer and return it. + */ + readUint32(): number; + + /** + * Read a raw 64-bit unsigned integer and return it as an array [hi, lo] with two 32-bit unsigned integer entries. + */ + readUint64(): [number, number]; + + /** + * Read a JS number value. + */ + readDouble(): number; + + /** + * Read raw bytes from the deserializer’s internal buffer. + * The length parameter must correspond to the length of the buffer that was passed to serializer.writeRawBytes(). + */ + readRawBytes(length: number): Buffer; + } + + /** + * A subclass of `Serializer` that serializes `TypedArray` (in particular `Buffer`) and `DataView` objects as host objects, + * and only stores the part of their underlying `ArrayBuffers` that they are referring to. + */ + class DefaultDeserializer extends Deserializer { + } + + /** + * Uses a `DefaultSerializer` to serialize value into a buffer. + */ + function serialize(value: any): Buffer; + + /** + * Uses a `DefaultDeserializer` with default options to read a JS value from a buffer. + */ + function deserialize(data: NodeJS.TypedArray): any; +} +declare module "node:v8" { + export * from "v8"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/vm.d.ts b/node_backend/node_modules/@types/node/ts4.8/vm.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd9c2dc3a60d4ddb5d5c22df6fb933f4dde8bb4c --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/vm.d.ts @@ -0,0 +1,155 @@ +declare module "vm" { + interface Context extends NodeJS.Dict {} + interface BaseOptions { + /** + * Specifies the filename used in stack traces produced by this script. + * Default: `''`. + */ + filename?: string | undefined; + /** + * Specifies the line number offset that is displayed in stack traces produced by this script. + * Default: `0`. + */ + lineOffset?: number | undefined; + /** + * Specifies the column number offset that is displayed in stack traces produced by this script. + * @default 0 + */ + columnOffset?: number | undefined; + } + interface ScriptOptions extends BaseOptions { + displayErrors?: boolean | undefined; + timeout?: number | undefined; + cachedData?: Buffer | undefined; + /** @deprecated in favor of `script.createCachedData()` */ + produceCachedData?: boolean | undefined; + } + interface RunningScriptOptions extends BaseOptions { + /** + * When `true`, if an `Error` occurs while compiling the `code`, the line of code causing the error is attached to the stack trace. + * Default: `true`. + */ + displayErrors?: boolean | undefined; + /** + * Specifies the number of milliseconds to execute code before terminating execution. + * If execution is terminated, an `Error` will be thrown. This value must be a strictly positive integer. + */ + timeout?: number | undefined; + /** + * If `true`, the execution will be terminated when `SIGINT` (Ctrl+C) is received. + * Existing handlers for the event that have been attached via `process.on('SIGINT')` will be disabled during script execution, but will continue to work after that. + * If execution is terminated, an `Error` will be thrown. + * Default: `false`. + */ + breakOnSigint?: boolean | undefined; + /** + * If set to `afterEvaluate`, microtasks will be run immediately after the script has run. + */ + microtaskMode?: "afterEvaluate" | undefined; + } + interface CompileFunctionOptions extends BaseOptions { + /** + * Provides an optional data with V8's code cache data for the supplied source. + */ + cachedData?: Buffer | undefined; + /** + * Specifies whether to produce new cache data. + * Default: `false`, + */ + produceCachedData?: boolean | undefined; + /** + * The sandbox/context in which the said function should be compiled in. + */ + parsingContext?: Context | undefined; + + /** + * An array containing a collection of context extensions (objects wrapping the current scope) to be applied while compiling + */ + contextExtensions?: Object[] | undefined; + } + + interface CreateContextOptions { + /** + * Human-readable name of the newly created context. + * @default 'VM Context i' Where i is an ascending numerical index of the created context. + */ + name?: string | undefined; + /** + * Corresponds to the newly created context for display purposes. + * The origin should be formatted like a `URL`, but with only the scheme, host, and port (if necessary), + * like the value of the `url.origin` property of a URL object. + * Most notably, this string should omit the trailing slash, as that denotes a path. + * @default '' + */ + origin?: string | undefined; + codeGeneration?: { + /** + * If set to false any calls to eval or function constructors (Function, GeneratorFunction, etc) + * will throw an EvalError. + * @default true + */ + strings?: boolean | undefined; + /** + * If set to false any attempt to compile a WebAssembly module will throw a WebAssembly.CompileError. + * @default true + */ + wasm?: boolean | undefined; + } | undefined; + /** + * If set to `afterEvaluate`, microtasks will be run immediately after the script has run. + */ + microtaskMode?: "afterEvaluate" | undefined; + } + + type MeasureMemoryMode = "summary" | "detailed"; + + interface MeasureMemoryOptions { + /** + * @default 'summary' + */ + mode?: MeasureMemoryMode | undefined; + context?: Context | undefined; + } + + interface MemoryMeasurement { + total: { + jsMemoryEstimate: number; + jsMemoryRange: [number, number]; + }; + } + + class Script { + constructor(code: string, options?: ScriptOptions); + runInContext(contextifiedSandbox: Context, options?: RunningScriptOptions): any; + runInNewContext(sandbox?: Context, options?: RunningScriptOptions): any; + runInThisContext(options?: RunningScriptOptions): any; + createCachedData(): Buffer; + cachedDataRejected?: boolean | undefined; + } + function createContext(sandbox?: Context, options?: CreateContextOptions): Context; + function isContext(sandbox: Context): boolean; + function runInContext(code: string, contextifiedSandbox: Context, options?: RunningScriptOptions | string): any; + function runInNewContext(code: string, sandbox?: Context, options?: RunningScriptOptions | string): any; + function runInThisContext(code: string, options?: RunningScriptOptions | string): any; + function compileFunction(code: string, params?: ReadonlyArray, options?: CompileFunctionOptions): Function; + + /** + * Measure the memory known to V8 and used by the current execution context or a specified context. + * + * The format of the object that the returned Promise may resolve with is + * specific to the V8 engine and may change from one version of V8 to the next. + * + * The returned result is different from the statistics returned by + * `v8.getHeapSpaceStatistics()` in that `vm.measureMemory()` measures + * the memory reachable by V8 from a specific context, while + * `v8.getHeapSpaceStatistics()` measures the memory used by an instance + * of V8 engine, which can switch among multiple contexts that reference + * objects in the heap of one engine. + * + * @experimental + */ + function measureMemory(options?: MeasureMemoryOptions): Promise; +} +declare module "node:vm" { + export * from "vm"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/wasi.d.ts b/node_backend/node_modules/@types/node/ts4.8/wasi.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ec985ce863f29ee4813ec56c49ca9df608db1f4 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/wasi.d.ts @@ -0,0 +1,88 @@ +declare module "wasi" { + interface WASIOptions { + /** + * An array of strings that the WebAssembly application will + * see as command line arguments. The first argument is the virtual path to the + * WASI command itself. + */ + args?: string[] | undefined; + + /** + * An object similar to `process.env` that the WebAssembly + * application will see as its environment. + */ + env?: object | undefined; + + /** + * This object represents the WebAssembly application's + * sandbox directory structure. The string keys of `preopens` are treated as + * directories within the sandbox. The corresponding values in `preopens` are + * the real paths to those directories on the host machine. + */ + preopens?: NodeJS.Dict | undefined; + + /** + * By default, WASI applications terminate the Node.js + * process via the `__wasi_proc_exit()` function. Setting this option to `true` + * causes `wasi.start()` to return the exit code rather than terminate the + * process. + * @default false + */ + returnOnExit?: boolean | undefined; + + /** + * The file descriptor used as standard input in the WebAssembly application. + * @default 0 + */ + stdin?: number | undefined; + + /** + * The file descriptor used as standard output in the WebAssembly application. + * @default 1 + */ + stdout?: number | undefined; + + /** + * The file descriptor used as standard error in the WebAssembly application. + * @default 2 + */ + stderr?: number | undefined; + } + + class WASI { + constructor(options?: WASIOptions); + /** + * Attempt to begin execution of `instance` by invoking its `_start()` export. + * If `instance` does not contain a `_start()` export, then `start()` attempts to + * invoke the `__wasi_unstable_reactor_start()` export. If neither of those exports + * is present on `instance`, then `start()` does nothing. + * + * `start()` requires that `instance` exports a [`WebAssembly.Memory`][] named + * `memory`. If `instance` does not have a `memory` export an exception is thrown. + * + * If `start()` is called more than once, an exception is thrown. + */ + start(instance: object): void; // TODO: avoid DOM dependency until WASM moved to own lib. + + /** + * Attempt to initialize `instance` as a WASI reactor by invoking its `_initialize()` export, if it is present. + * If `instance` contains a `_start()` export, then an exception is thrown. + * + * `start()` requires that `instance` exports a [`WebAssembly.Memory`][] named + * `memory`. If `instance` does not have a `memory` export an exception is thrown. + * + * If `initialize()` is called more than once, an exception is thrown. + */ + initialize(instance: object): void; // TODO: avoid DOM dependency until WASM moved to own lib. + + /** + * Is an object that implements the WASI system call API. This object + * should be passed as the `wasi_snapshot_preview1` import during the instantiation of a + * [`WebAssembly.Instance`][]. + */ + readonly wasiImport: NodeJS.Dict; // TODO: Narrow to DOM types + } +} +declare module "node:wasi" { + export * from "wasi"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/worker_threads.d.ts b/node_backend/node_modules/@types/node/ts4.8/worker_threads.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c89937c062eac71e894470944a379939cab8f009 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/worker_threads.d.ts @@ -0,0 +1,241 @@ +declare module "worker_threads" { + import { Context } from "vm"; + import EventEmitter = require("events"); + import { Readable, Writable } from "stream"; + import { URL } from "url"; + import { FileHandle } from "fs/promises"; + + const isMainThread: boolean; + const parentPort: null | MessagePort; + const resourceLimits: ResourceLimits; + const SHARE_ENV: unique symbol; + const threadId: number; + const workerData: any; + + class MessageChannel { + readonly port1: MessagePort; + readonly port2: MessagePort; + } + + type TransferListItem = ArrayBuffer | MessagePort | FileHandle; + + class MessagePort extends EventEmitter { + close(): void; + postMessage(value: any, transferList?: ReadonlyArray): void; + ref(): void; + unref(): void; + start(): void; + + addListener(event: "close", listener: () => void): this; + addListener(event: "message", listener: (value: any) => void): this; + addListener(event: "messageerror", listener: (error: Error) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "message", value: any): boolean; + emit(event: "messageerror", error: Error): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "message", listener: (value: any) => void): this; + on(event: "messageerror", listener: (error: Error) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "message", listener: (value: any) => void): this; + once(event: "messageerror", listener: (error: Error) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "message", listener: (value: any) => void): this; + prependListener(event: "messageerror", listener: (error: Error) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "message", listener: (value: any) => void): this; + prependOnceListener(event: "messageerror", listener: (error: Error) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "close", listener: () => void): this; + removeListener(event: "message", listener: (value: any) => void): this; + removeListener(event: "messageerror", listener: (error: Error) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + + off(event: "close", listener: () => void): this; + off(event: "message", listener: (value: any) => void): this; + off(event: "messageerror", listener: (error: Error) => void): this; + off(event: string | symbol, listener: (...args: any[]) => void): this; + } + + interface WorkerOptions { + /** + * List of arguments which would be stringified and appended to + * `process.argv` in the worker. This is mostly similar to the `workerData` + * but the values will be available on the global `process.argv` as if they + * were passed as CLI options to the script. + */ + argv?: any[] | undefined; + env?: NodeJS.Dict | typeof SHARE_ENV | undefined; + eval?: boolean | undefined; + workerData?: any; + stdin?: boolean | undefined; + stdout?: boolean | undefined; + stderr?: boolean | undefined; + execArgv?: string[] | undefined; + resourceLimits?: ResourceLimits | undefined; + /** + * Additional data to send in the first worker message. + */ + transferList?: TransferListItem[] | undefined; + trackUnmanagedFds?: boolean | undefined; + } + + interface ResourceLimits { + /** + * The maximum size of a heap space for recently created objects. + */ + maxYoungGenerationSizeMb?: number | undefined; + /** + * The maximum size of the main heap in MB. + */ + maxOldGenerationSizeMb?: number | undefined; + /** + * The size of a pre-allocated memory range used for generated code. + */ + codeRangeSizeMb?: number | undefined; + /** + * The default maximum stack size for the thread. Small values may lead to unusable Worker instances. + * @default 4 + */ + stackSizeMb?: number | undefined; + } + + class Worker extends EventEmitter { + readonly stdin: Writable | null; + readonly stdout: Readable; + readonly stderr: Readable; + readonly threadId: number; + readonly resourceLimits?: ResourceLimits | undefined; + + /** + * @param filename The path to the Worker’s main script or module. + * Must be either an absolute path or a relative path (i.e. relative to the current working directory) starting with ./ or ../, + * or a WHATWG URL object using file: protocol. If options.eval is true, this is a string containing JavaScript code rather than a path. + */ + constructor(filename: string | URL, options?: WorkerOptions); + + postMessage(value: any, transferList?: ReadonlyArray): void; + ref(): void; + unref(): void; + /** + * Stop all JavaScript execution in the worker thread as soon as possible. + * Returns a Promise for the exit code that is fulfilled when the `exit` event is emitted. + */ + terminate(): Promise; + + /** + * Returns a readable stream for a V8 snapshot of the current state of the Worker. + * See [`v8.getHeapSnapshot()`][] for more details. + * + * If the Worker thread is no longer running, which may occur before the + * [`'exit'` event][] is emitted, the returned `Promise` will be rejected + * immediately with an [`ERR_WORKER_NOT_RUNNING`][] error + */ + getHeapSnapshot(): Promise; + + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "exit", listener: (exitCode: number) => void): this; + addListener(event: "message", listener: (value: any) => void): this; + addListener(event: "messageerror", listener: (error: Error) => void): this; + addListener(event: "online", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "error", err: Error): boolean; + emit(event: "exit", exitCode: number): boolean; + emit(event: "message", value: any): boolean; + emit(event: "messageerror", error: Error): boolean; + emit(event: "online"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "error", listener: (err: Error) => void): this; + on(event: "exit", listener: (exitCode: number) => void): this; + on(event: "message", listener: (value: any) => void): this; + on(event: "messageerror", listener: (error: Error) => void): this; + on(event: "online", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "error", listener: (err: Error) => void): this; + once(event: "exit", listener: (exitCode: number) => void): this; + once(event: "message", listener: (value: any) => void): this; + once(event: "messageerror", listener: (error: Error) => void): this; + once(event: "online", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "exit", listener: (exitCode: number) => void): this; + prependListener(event: "message", listener: (value: any) => void): this; + prependListener(event: "messageerror", listener: (error: Error) => void): this; + prependListener(event: "online", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "exit", listener: (exitCode: number) => void): this; + prependOnceListener(event: "message", listener: (value: any) => void): this; + prependOnceListener(event: "messageerror", listener: (error: Error) => void): this; + prependOnceListener(event: "online", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "exit", listener: (exitCode: number) => void): this; + removeListener(event: "message", listener: (value: any) => void): this; + removeListener(event: "messageerror", listener: (error: Error) => void): this; + removeListener(event: "online", listener: () => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + + off(event: "error", listener: (err: Error) => void): this; + off(event: "exit", listener: (exitCode: number) => void): this; + off(event: "message", listener: (value: any) => void): this; + off(event: "messageerror", listener: (error: Error) => void): this; + off(event: "online", listener: () => void): this; + off(event: string | symbol, listener: (...args: any[]) => void): this; + } + + /** + * Mark an object as not transferable. + * If `object` occurs in the transfer list of a `port.postMessage()` call, it will be ignored. + * + * In particular, this makes sense for objects that can be cloned, rather than transferred, + * and which are used by other objects on the sending side. For example, Node.js marks + * the `ArrayBuffer`s it uses for its Buffer pool with this. + * + * This operation cannot be undone. + */ + function markAsUntransferable(object: object): void; + + /** + * Transfer a `MessagePort` to a different `vm` Context. The original `port` + * object will be rendered unusable, and the returned `MessagePort` instance will + * take its place. + * + * The returned `MessagePort` will be an object in the target context, and will + * inherit from its global `Object` class. Objects passed to the + * `port.onmessage()` listener will also be created in the target context + * and inherit from its global `Object` class. + * + * However, the created `MessagePort` will no longer inherit from + * `EventEmitter`, and only `port.onmessage()` can be used to receive + * events using it. + */ + function moveMessagePortToContext(port: MessagePort, context: Context): MessagePort; + + /** + * Receive a single message from a given `MessagePort`. If no message is available, + * `undefined` is returned, otherwise an object with a single `message` property + * that contains the message payload, corresponding to the oldest message in the + * `MessagePort`’s queue. + */ + function receiveMessageOnPort(port: MessagePort): { message: any } | undefined; +} +declare module "node:worker_threads" { + export * from "worker_threads"; +} diff --git a/node_backend/node_modules/@types/node/ts4.8/zlib.d.ts b/node_backend/node_modules/@types/node/ts4.8/zlib.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ca2e542687ba02bb2e908e299af6a61cb0e971d7 --- /dev/null +++ b/node_backend/node_modules/@types/node/ts4.8/zlib.d.ts @@ -0,0 +1,364 @@ +declare module "zlib" { + import * as stream from "stream"; + + interface ZlibOptions { + /** + * @default constants.Z_NO_FLUSH + */ + flush?: number | undefined; + /** + * @default constants.Z_FINISH + */ + finishFlush?: number | undefined; + /** + * @default 16*1024 + */ + chunkSize?: number | undefined; + windowBits?: number | undefined; + level?: number | undefined; // compression only + memLevel?: number | undefined; // compression only + strategy?: number | undefined; // compression only + dictionary?: NodeJS.ArrayBufferView | ArrayBuffer | undefined; // deflate/inflate only, empty dictionary by default + info?: boolean | undefined; + maxOutputLength?: number | undefined; + } + + interface BrotliOptions { + /** + * @default constants.BROTLI_OPERATION_PROCESS + */ + flush?: number | undefined; + /** + * @default constants.BROTLI_OPERATION_FINISH + */ + finishFlush?: number | undefined; + /** + * @default 16*1024 + */ + chunkSize?: number | undefined; + params?: { + /** + * Each key is a `constants.BROTLI_*` constant. + */ + [key: number]: boolean | number; + } | undefined; + maxOutputLength?: number | undefined; + } + + interface Zlib { + /** @deprecated Use bytesWritten instead. */ + readonly bytesRead: number; + readonly bytesWritten: number; + shell?: boolean | string | undefined; + close(callback?: () => void): void; + flush(kind?: number, callback?: () => void): void; + flush(callback?: () => void): void; + } + + interface ZlibParams { + params(level: number, strategy: number, callback: () => void): void; + } + + interface ZlibReset { + reset(): void; + } + + interface BrotliCompress extends stream.Transform, Zlib {} + interface BrotliDecompress extends stream.Transform, Zlib {} + interface Gzip extends stream.Transform, Zlib {} + interface Gunzip extends stream.Transform, Zlib {} + interface Deflate extends stream.Transform, Zlib, ZlibReset, ZlibParams {} + interface Inflate extends stream.Transform, Zlib, ZlibReset {} + interface DeflateRaw extends stream.Transform, Zlib, ZlibReset, ZlibParams {} + interface InflateRaw extends stream.Transform, Zlib, ZlibReset {} + interface Unzip extends stream.Transform, Zlib {} + + function createBrotliCompress(options?: BrotliOptions): BrotliCompress; + function createBrotliDecompress(options?: BrotliOptions): BrotliDecompress; + function createGzip(options?: ZlibOptions): Gzip; + function createGunzip(options?: ZlibOptions): Gunzip; + function createDeflate(options?: ZlibOptions): Deflate; + function createInflate(options?: ZlibOptions): Inflate; + function createDeflateRaw(options?: ZlibOptions): DeflateRaw; + function createInflateRaw(options?: ZlibOptions): InflateRaw; + function createUnzip(options?: ZlibOptions): Unzip; + + type InputType = string | ArrayBuffer | NodeJS.ArrayBufferView; + + type CompressCallback = (error: Error | null, result: Buffer) => void; + + function brotliCompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void; + function brotliCompress(buf: InputType, callback: CompressCallback): void; + namespace brotliCompress { + function __promisify__(buffer: InputType, options?: BrotliOptions): Promise; + } + + function brotliCompressSync(buf: InputType, options?: BrotliOptions): Buffer; + + function brotliDecompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void; + function brotliDecompress(buf: InputType, callback: CompressCallback): void; + namespace brotliDecompress { + function __promisify__(buffer: InputType, options?: BrotliOptions): Promise; + } + + function brotliDecompressSync(buf: InputType, options?: BrotliOptions): Buffer; + + function deflate(buf: InputType, callback: CompressCallback): void; + function deflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace deflate { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function deflateSync(buf: InputType, options?: ZlibOptions): Buffer; + + function deflateRaw(buf: InputType, callback: CompressCallback): void; + function deflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace deflateRaw { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function deflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; + + function gzip(buf: InputType, callback: CompressCallback): void; + function gzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace gzip { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function gzipSync(buf: InputType, options?: ZlibOptions): Buffer; + + function gunzip(buf: InputType, callback: CompressCallback): void; + function gunzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace gunzip { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function gunzipSync(buf: InputType, options?: ZlibOptions): Buffer; + + function inflate(buf: InputType, callback: CompressCallback): void; + function inflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace inflate { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function inflateSync(buf: InputType, options?: ZlibOptions): Buffer; + + function inflateRaw(buf: InputType, callback: CompressCallback): void; + function inflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace inflateRaw { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function inflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; + + function unzip(buf: InputType, callback: CompressCallback): void; + function unzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace unzip { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function unzipSync(buf: InputType, options?: ZlibOptions): Buffer; + + namespace constants { + const BROTLI_DECODE: number; + const BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: number; + const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: number; + const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: number; + const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: number; + const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: number; + const BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: number; + const BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: number; + const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: number; + const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: number; + const BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: number; + const BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: number; + const BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: number; + const BROTLI_DECODER_ERROR_FORMAT_DISTANCE: number; + const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: number; + const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: number; + const BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: number; + const BROTLI_DECODER_ERROR_FORMAT_PADDING_1: number; + const BROTLI_DECODER_ERROR_FORMAT_PADDING_2: number; + const BROTLI_DECODER_ERROR_FORMAT_RESERVED: number; + const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: number; + const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: number; + const BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: number; + const BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: number; + const BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: number; + const BROTLI_DECODER_ERROR_UNREACHABLE: number; + const BROTLI_DECODER_NEEDS_MORE_INPUT: number; + const BROTLI_DECODER_NEEDS_MORE_OUTPUT: number; + const BROTLI_DECODER_NO_ERROR: number; + const BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: number; + const BROTLI_DECODER_PARAM_LARGE_WINDOW: number; + const BROTLI_DECODER_RESULT_ERROR: number; + const BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: number; + const BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: number; + const BROTLI_DECODER_RESULT_SUCCESS: number; + const BROTLI_DECODER_SUCCESS: number; + + const BROTLI_DEFAULT_MODE: number; + const BROTLI_DEFAULT_QUALITY: number; + const BROTLI_DEFAULT_WINDOW: number; + const BROTLI_ENCODE: number; + const BROTLI_LARGE_MAX_WINDOW_BITS: number; + const BROTLI_MAX_INPUT_BLOCK_BITS: number; + const BROTLI_MAX_QUALITY: number; + const BROTLI_MAX_WINDOW_BITS: number; + const BROTLI_MIN_INPUT_BLOCK_BITS: number; + const BROTLI_MIN_QUALITY: number; + const BROTLI_MIN_WINDOW_BITS: number; + + const BROTLI_MODE_FONT: number; + const BROTLI_MODE_GENERIC: number; + const BROTLI_MODE_TEXT: number; + + const BROTLI_OPERATION_EMIT_METADATA: number; + const BROTLI_OPERATION_FINISH: number; + const BROTLI_OPERATION_FLUSH: number; + const BROTLI_OPERATION_PROCESS: number; + + const BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: number; + const BROTLI_PARAM_LARGE_WINDOW: number; + const BROTLI_PARAM_LGBLOCK: number; + const BROTLI_PARAM_LGWIN: number; + const BROTLI_PARAM_MODE: number; + const BROTLI_PARAM_NDIRECT: number; + const BROTLI_PARAM_NPOSTFIX: number; + const BROTLI_PARAM_QUALITY: number; + const BROTLI_PARAM_SIZE_HINT: number; + + const DEFLATE: number; + const DEFLATERAW: number; + const GUNZIP: number; + const GZIP: number; + const INFLATE: number; + const INFLATERAW: number; + const UNZIP: number; + + // Allowed flush values. + const Z_NO_FLUSH: number; + const Z_PARTIAL_FLUSH: number; + const Z_SYNC_FLUSH: number; + const Z_FULL_FLUSH: number; + const Z_FINISH: number; + const Z_BLOCK: number; + const Z_TREES: number; + + // Return codes for the compression/decompression functions. + // Negative values are errors, positive values are used for special but normal events. + const Z_OK: number; + const Z_STREAM_END: number; + const Z_NEED_DICT: number; + const Z_ERRNO: number; + const Z_STREAM_ERROR: number; + const Z_DATA_ERROR: number; + const Z_MEM_ERROR: number; + const Z_BUF_ERROR: number; + const Z_VERSION_ERROR: number; + + // Compression levels. + const Z_NO_COMPRESSION: number; + const Z_BEST_SPEED: number; + const Z_BEST_COMPRESSION: number; + const Z_DEFAULT_COMPRESSION: number; + + // Compression strategy. + const Z_FILTERED: number; + const Z_HUFFMAN_ONLY: number; + const Z_RLE: number; + const Z_FIXED: number; + const Z_DEFAULT_STRATEGY: number; + + const Z_DEFAULT_WINDOWBITS: number; + const Z_MIN_WINDOWBITS: number; + const Z_MAX_WINDOWBITS: number; + + const Z_MIN_CHUNK: number; + const Z_MAX_CHUNK: number; + const Z_DEFAULT_CHUNK: number; + + const Z_MIN_MEMLEVEL: number; + const Z_MAX_MEMLEVEL: number; + const Z_DEFAULT_MEMLEVEL: number; + + const Z_MIN_LEVEL: number; + const Z_MAX_LEVEL: number; + const Z_DEFAULT_LEVEL: number; + + const ZLIB_VERNUM: number; + } + + // Allowed flush values. + /** @deprecated Use `constants.Z_NO_FLUSH` */ + const Z_NO_FLUSH: number; + /** @deprecated Use `constants.Z_PARTIAL_FLUSH` */ + const Z_PARTIAL_FLUSH: number; + /** @deprecated Use `constants.Z_SYNC_FLUSH` */ + const Z_SYNC_FLUSH: number; + /** @deprecated Use `constants.Z_FULL_FLUSH` */ + const Z_FULL_FLUSH: number; + /** @deprecated Use `constants.Z_FINISH` */ + const Z_FINISH: number; + /** @deprecated Use `constants.Z_BLOCK` */ + const Z_BLOCK: number; + /** @deprecated Use `constants.Z_TREES` */ + const Z_TREES: number; + + // Return codes for the compression/decompression functions. + // Negative values are errors, positive values are used for special but normal events. + /** @deprecated Use `constants.Z_OK` */ + const Z_OK: number; + /** @deprecated Use `constants.Z_STREAM_END` */ + const Z_STREAM_END: number; + /** @deprecated Use `constants.Z_NEED_DICT` */ + const Z_NEED_DICT: number; + /** @deprecated Use `constants.Z_ERRNO` */ + const Z_ERRNO: number; + /** @deprecated Use `constants.Z_STREAM_ERROR` */ + const Z_STREAM_ERROR: number; + /** @deprecated Use `constants.Z_DATA_ERROR` */ + const Z_DATA_ERROR: number; + /** @deprecated Use `constants.Z_MEM_ERROR` */ + const Z_MEM_ERROR: number; + /** @deprecated Use `constants.Z_BUF_ERROR` */ + const Z_BUF_ERROR: number; + /** @deprecated Use `constants.Z_VERSION_ERROR` */ + const Z_VERSION_ERROR: number; + + // Compression levels. + /** @deprecated Use `constants.Z_NO_COMPRESSION` */ + const Z_NO_COMPRESSION: number; + /** @deprecated Use `constants.Z_BEST_SPEED` */ + const Z_BEST_SPEED: number; + /** @deprecated Use `constants.Z_BEST_COMPRESSION` */ + const Z_BEST_COMPRESSION: number; + /** @deprecated Use `constants.Z_DEFAULT_COMPRESSION` */ + const Z_DEFAULT_COMPRESSION: number; + + // Compression strategy. + /** @deprecated Use `constants.Z_FILTERED` */ + const Z_FILTERED: number; + /** @deprecated Use `constants.Z_HUFFMAN_ONLY` */ + const Z_HUFFMAN_ONLY: number; + /** @deprecated Use `constants.Z_RLE` */ + const Z_RLE: number; + /** @deprecated Use `constants.Z_FIXED` */ + const Z_FIXED: number; + /** @deprecated Use `constants.Z_DEFAULT_STRATEGY` */ + const Z_DEFAULT_STRATEGY: number; + + /** @deprecated */ + const Z_BINARY: number; + /** @deprecated */ + const Z_TEXT: number; + /** @deprecated */ + const Z_ASCII: number; + /** @deprecated */ + const Z_UNKNOWN: number; + /** @deprecated */ + const Z_DEFLATED: number; +} +declare module "node:zlib" { + export * from "zlib"; +} diff --git a/node_backend/node_modules/@types/node/tty.d.ts b/node_backend/node_modules/@types/node/tty.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3aa08a416351fe117f22b116074b78cbe3d4ea62 --- /dev/null +++ b/node_backend/node_modules/@types/node/tty.d.ts @@ -0,0 +1,69 @@ +declare module "tty" { + import * as net from "net"; + + function isatty(fd: number): boolean; + class ReadStream extends net.Socket { + constructor(fd: number, options?: net.SocketConstructorOpts); + isRaw: boolean; + setRawMode(mode: boolean): this; + isTTY: boolean; + } + /** + * -1 - to the left from cursor + * 0 - the entire line + * 1 - to the right from cursor + */ + type Direction = -1 | 0 | 1; + class WriteStream extends net.Socket { + constructor(fd: number); + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "resize", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "resize"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "resize", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "resize", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "resize", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "resize", listener: () => void): this; + + /** + * Clears the current line of this WriteStream in a direction identified by `dir`. + */ + clearLine(dir: Direction, callback?: () => void): boolean; + /** + * Clears this `WriteStream` from the current cursor down. + */ + clearScreenDown(callback?: () => void): boolean; + /** + * Moves this WriteStream's cursor to the specified position. + */ + cursorTo(x: number, y?: number, callback?: () => void): boolean; + cursorTo(x: number, callback: () => void): boolean; + /** + * Moves this WriteStream's cursor relative to its current position. + */ + moveCursor(dx: number, dy: number, callback?: () => void): boolean; + /** + * @default `process.env` + */ + getColorDepth(env?: {}): number; + hasColors(depth?: number): boolean; + hasColors(env?: {}): boolean; + hasColors(depth: number, env?: {}): boolean; + getWindowSize(): [number, number]; + columns: number; + rows: number; + isTTY: boolean; + } +} +declare module "node:tty" { + export * from "tty"; +} diff --git a/node_backend/node_modules/@types/node/url.d.ts b/node_backend/node_modules/@types/node/url.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d8c94936b9ca9757264b0051e6ac6edbc00e1de2 --- /dev/null +++ b/node_backend/node_modules/@types/node/url.d.ts @@ -0,0 +1,187 @@ +declare module "url" { + import { ClientRequestArgs } from "node:http"; + import { ParsedUrlQuery, ParsedUrlQueryInput } from "querystring"; + + // Input to `url.format` + interface UrlObject { + auth?: string | null | undefined; + hash?: string | null | undefined; + host?: string | null | undefined; + hostname?: string | null | undefined; + href?: string | null | undefined; + pathname?: string | null | undefined; + protocol?: string | null | undefined; + search?: string | null | undefined; + slashes?: boolean | null | undefined; + port?: string | number | null | undefined; + query?: string | null | ParsedUrlQueryInput | undefined; + } + + // Output of `url.parse` + interface Url { + auth: string | null; + hash: string | null; + host: string | null; + hostname: string | null; + href: string; + path: string | null; + pathname: string | null; + protocol: string | null; + search: string | null; + slashes: boolean | null; + port: string | null; + query: string | null | ParsedUrlQuery; + } + + interface UrlWithParsedQuery extends Url { + query: ParsedUrlQuery; + } + + interface UrlWithStringQuery extends Url { + query: string | null; + } + + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function parse(urlStr: string): UrlWithStringQuery; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function parse( + urlStr: string, + parseQueryString: false | undefined, + slashesDenoteHost?: boolean, + ): UrlWithStringQuery; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function parse(urlStr: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function parse(urlStr: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url; + + function format(URL: URL, options?: URLFormatOptions): string; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function format(urlObject: UrlObject | string): string; + /** @deprecated since v11.0.0 - Use the WHATWG URL API. */ + function resolve(from: string, to: string): string; + + function domainToASCII(domain: string): string; + function domainToUnicode(domain: string): string; + + /** + * This function ensures the correct decodings of percent-encoded characters as + * well as ensuring a cross-platform valid absolute path string. + * @param url The file URL string or URL object to convert to a path. + */ + function fileURLToPath(url: string | URL): string; + + /** + * This function ensures that path is resolved absolutely, and that the URL + * control characters are correctly encoded when converting into a File URL. + * @param url The path to convert to a File URL. + */ + function pathToFileURL(url: string): URL; + /** + * This utility function converts a URL object into an ordinary options object as + * expected by the `http.request()` and `https.request()` APIs. + * + * ```js + * import { urlToHttpOptions } from 'url'; + * const myURL = new URL('https://a:b@測試?abc#foo'); + * + * console.log(urlToHttpOptions(myURL)); + * + * { + * protocol: 'https:', + * hostname: 'xn--g6w251d', + * hash: '#foo', + * search: '?abc', + * pathname: '/', + * path: '/?abc', + * href: 'https://a:b@xn--g6w251d/?abc#foo', + * auth: 'a:b' + * } + * + * ``` + * @since v14.18.0 + * @param url The `WHATWG URL` object to convert to an options object. + * @return Options object + */ + function urlToHttpOptions(url: URL): ClientRequestArgs; + + interface URLFormatOptions { + auth?: boolean | undefined; + fragment?: boolean | undefined; + search?: boolean | undefined; + unicode?: boolean | undefined; + } + + class URL { + constructor(input: string, base?: string | URL); + hash: string; + host: string; + hostname: string; + href: string; + readonly origin: string; + password: string; + pathname: string; + port: string; + protocol: string; + search: string; + readonly searchParams: URLSearchParams; + username: string; + toString(): string; + toJSON(): string; + } + + class URLSearchParams implements Iterable<[string, string]> { + constructor( + init?: + | URLSearchParams + | string + | Record> + | Iterable<[string, string]> + | ReadonlyArray<[string, string]>, + ); + readonly size: number; + append(name: string, value: string): void; + delete(name: string): void; + entries(): IterableIterator<[string, string]>; + forEach(callback: (value: string, name: string, searchParams: URLSearchParams) => void, thisArg?: any): void; + get(name: string): string | null; + getAll(name: string): string[]; + has(name: string): boolean; + keys(): IterableIterator; + set(name: string, value: string): void; + sort(): void; + toString(): string; + values(): IterableIterator; + [Symbol.iterator](): IterableIterator<[string, string]>; + } + + import { URL as _URL, URLSearchParams as _URLSearchParams } from "url"; + global { + interface URLSearchParams extends _URLSearchParams {} + interface URL extends _URL {} + interface Global { + URL: typeof _URL; + URLSearchParams: typeof _URLSearchParams; + } + /** + * `URL` class is a global reference for `require('url').URL` + * https://nodejs.org/api/url.html#the-whatwg-url-api + * @since v10.0.0 + */ + var URL: + // For compatibility with "dom" and "webworker" URL declarations + typeof globalThis extends { onmessage: any; URL: infer URL } ? URL + : typeof _URL; + /** + * `URLSearchParams` class is a global reference for `require('url').URLSearchParams`. + * https://nodejs.org/api/url.html#class-urlsearchparams + * @since v10.0.0 + */ + var URLSearchParams: + // For compatibility with "dom" and "webworker" URLSearchParams declarations + typeof globalThis extends { onmessage: any; URLSearchParams: infer URLSearchParams } ? URLSearchParams + : typeof _URLSearchParams; + } +} +declare module "node:url" { + export * from "url"; +} diff --git a/node_backend/node_modules/@types/node/util.d.ts b/node_backend/node_modules/@types/node/util.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0b0b4575abe7fcab3831239881f4f0a8405d0738 --- /dev/null +++ b/node_backend/node_modules/@types/node/util.d.ts @@ -0,0 +1,278 @@ +declare module "util" { + interface InspectOptions extends NodeJS.InspectOptions {} + type Style = + | "special" + | "number" + | "bigint" + | "boolean" + | "undefined" + | "null" + | "string" + | "symbol" + | "date" + | "regexp" + | "module"; + type CustomInspectFunction = (depth: number, options: InspectOptionsStylized) => string; + interface InspectOptionsStylized extends InspectOptions { + stylize(text: string, styleType: Style): string; + } + function format(format?: any, ...param: any[]): string; + function formatWithOptions(inspectOptions: InspectOptions, format?: any, ...param: any[]): string; + function getSystemErrorName(err: number): string; + /** @deprecated since v0.11.3 - use a third party module instead. */ + function log(string: string): void; + function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string; + function inspect(object: any, options?: InspectOptions): string; + namespace inspect { + let colors: NodeJS.Dict<[number, number]>; + let styles: { + [K in Style]: string; + }; + let defaultOptions: InspectOptions; + /** + * Allows changing inspect settings from the repl. + */ + let replDefaults: InspectOptions; + const custom: unique symbol; + } + /** @deprecated since v4.0.0 - use `Array.isArray()` instead. */ + function isArray(object: any): object is any[]; + /** @deprecated since v4.0.0 - use `util.types.isRegExp()` instead. */ + function isRegExp(object: any): object is RegExp; + /** @deprecated since v4.0.0 - use `util.types.isDate()` instead. */ + function isDate(object: any): object is Date; + /** @deprecated since v4.0.0 - use `util.types.isNativeError()` instead. */ + function isError(object: any): object is Error; + function inherits(constructor: any, superConstructor: any): void; + type DebugLoggerFunction = (msg: string, ...param: any[]) => void; + interface DebugLogger extends DebugLoggerFunction { + enabled: boolean; + } + function debuglog(key: string, callback?: (fn: DebugLoggerFunction) => void): DebugLogger; + const debug: typeof debuglog; + /** @deprecated since v4.0.0 - use `typeof value === 'boolean'` instead. */ + function isBoolean(object: any): object is boolean; + /** @deprecated since v4.0.0 - use `Buffer.isBuffer()` instead. */ + function isBuffer(object: any): object is Buffer; + /** @deprecated since v4.0.0 - use `typeof value === 'function'` instead. */ + function isFunction(object: any): boolean; + /** @deprecated since v4.0.0 - use `value === null` instead. */ + function isNull(object: any): object is null; + /** @deprecated since v4.0.0 - use `value === null || value === undefined` instead. */ + function isNullOrUndefined(object: any): object is null | undefined; + /** @deprecated since v4.0.0 - use `typeof value === 'number'` instead. */ + function isNumber(object: any): object is number; + /** @deprecated since v4.0.0 - use `value !== null && typeof value === 'object'` instead. */ + function isObject(object: any): boolean; + /** @deprecated since v4.0.0 - use `(typeof value !== 'object' && typeof value !== 'function') || value === null` instead. */ + function isPrimitive(object: any): boolean; + /** @deprecated since v4.0.0 - use `typeof value === 'string'` instead. */ + function isString(object: any): object is string; + /** @deprecated since v4.0.0 - use `typeof value === 'symbol'` instead. */ + function isSymbol(object: any): object is symbol; + /** @deprecated since v4.0.0 - use `value === undefined` instead. */ + function isUndefined(object: any): object is undefined; + function deprecate(fn: T, message: string, code?: string): T; + function isDeepStrictEqual(val1: any, val2: any): boolean; + + function callbackify(fn: () => Promise): (callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: () => Promise, + ): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + function callbackify( + fn: (arg1: T1) => Promise, + ): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1) => Promise, + ): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2) => Promise, + ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2) => Promise, + ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + arg6: T6, + callback: (err: NodeJS.ErrnoException) => void, + ) => void; + function callbackify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, + ): ( + arg1: T1, + arg2: T2, + arg3: T3, + arg4: T4, + arg5: T5, + arg6: T6, + callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, + ) => void; + + interface CustomPromisifyLegacy extends Function { + __promisify__: TCustom; + } + + interface CustomPromisifySymbol extends Function { + [promisify.custom]: TCustom; + } + + type CustomPromisify = CustomPromisifySymbol | CustomPromisifyLegacy; + + function promisify(fn: CustomPromisify): TCustom; + function promisify(fn: (callback: (err: any, result: TResult) => void) => void): () => Promise; + function promisify(fn: (callback: (err?: any) => void) => void): () => Promise; + function promisify( + fn: (arg1: T1, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1) => Promise; + function promisify(fn: (arg1: T1, callback: (err?: any) => void) => void): (arg1: T1) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + function promisify( + fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void, + ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; + function promisify(fn: Function): Function; + namespace promisify { + const custom: unique symbol; + } + + namespace types { + function isAnyArrayBuffer(object: any): object is ArrayBufferLike; + function isArgumentsObject(object: any): object is IArguments; + function isArrayBuffer(object: any): object is ArrayBuffer; + function isArrayBufferView(object: any): object is NodeJS.ArrayBufferView; + function isAsyncFunction(object: any): boolean; + function isBigInt64Array(value: any): value is BigInt64Array; + function isBigUint64Array(value: any): value is BigUint64Array; + function isBooleanObject(object: any): object is Boolean; + function isBoxedPrimitive(object: any): object is String | Number | BigInt | Boolean | Symbol; + function isDataView(object: any): object is DataView; + function isDate(object: any): object is Date; + function isExternal(object: any): boolean; + function isFloat32Array(object: any): object is Float32Array; + function isFloat64Array(object: any): object is Float64Array; + function isGeneratorFunction(object: any): object is GeneratorFunction; + function isGeneratorObject(object: any): object is Generator; + function isInt8Array(object: any): object is Int8Array; + function isInt16Array(object: any): object is Int16Array; + function isInt32Array(object: any): object is Int32Array; + function isMap( + object: T | {}, + ): object is T extends ReadonlyMap ? unknown extends T ? never + : ReadonlyMap + : Map; + function isMapIterator(object: any): boolean; + function isModuleNamespaceObject(value: any): boolean; + function isNativeError(object: any): object is Error; + function isNumberObject(object: any): object is Number; + function isPromise(object: any): object is Promise; + function isProxy(object: any): boolean; + function isRegExp(object: any): object is RegExp; + function isSet( + object: T | {}, + ): object is T extends ReadonlySet ? unknown extends T ? never + : ReadonlySet + : Set; + function isSetIterator(object: any): boolean; + function isSharedArrayBuffer(object: any): object is SharedArrayBuffer; + function isStringObject(object: any): object is String; + function isSymbolObject(object: any): object is Symbol; + function isTypedArray(object: any): object is NodeJS.TypedArray; + function isUint8Array(object: any): object is Uint8Array; + function isUint8ClampedArray(object: any): object is Uint8ClampedArray; + function isUint16Array(object: any): object is Uint16Array; + function isUint32Array(object: any): object is Uint32Array; + function isWeakMap(object: any): object is WeakMap; + function isWeakSet(object: any): object is WeakSet; + } + + class TextDecoder { + readonly encoding: string; + readonly fatal: boolean; + readonly ignoreBOM: boolean; + constructor( + encoding?: string, + options?: { fatal?: boolean | undefined; ignoreBOM?: boolean | undefined }, + ); + decode( + input?: NodeJS.ArrayBufferView | ArrayBuffer | null, + options?: { stream?: boolean | undefined }, + ): string; + } + + interface EncodeIntoResult { + /** + * The read Unicode code units of input. + */ + + read: number; + /** + * The written UTF-8 bytes of output. + */ + written: number; + } + + class TextEncoder { + readonly encoding: string; + encode(input?: string): Uint8Array; + encodeInto(input: string, output: Uint8Array): EncodeIntoResult; + } +} +declare module "node:util" { + export * from "util"; +} diff --git a/node_backend/node_modules/@types/node/v8.d.ts b/node_backend/node_modules/@types/node/v8.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2dc37b45352612fd640aebf5e6ffda134f0bbf3e --- /dev/null +++ b/node_backend/node_modules/@types/node/v8.d.ts @@ -0,0 +1,189 @@ +declare module "v8" { + import { Readable } from "stream"; + + interface HeapSpaceInfo { + space_name: string; + space_size: number; + space_used_size: number; + space_available_size: number; + physical_space_size: number; + } + + // ** Signifies if the --zap_code_space option is enabled or not. 1 == enabled, 0 == disabled. */ + type DoesZapCodeSpaceFlag = 0 | 1; + + interface HeapInfo { + total_heap_size: number; + total_heap_size_executable: number; + total_physical_size: number; + total_available_size: number; + used_heap_size: number; + heap_size_limit: number; + malloced_memory: number; + peak_malloced_memory: number; + does_zap_garbage: DoesZapCodeSpaceFlag; + number_of_native_contexts: number; + number_of_detached_contexts: number; + } + + interface HeapCodeStatistics { + code_and_metadata_size: number; + bytecode_and_metadata_size: number; + external_script_source_size: number; + } + + /** + * Returns an integer representing a "version tag" derived from the V8 version, command line flags and detected CPU features. + * This is useful for determining whether a vm.Script cachedData buffer is compatible with this instance of V8. + */ + function cachedDataVersionTag(): number; + + function getHeapStatistics(): HeapInfo; + function getHeapSpaceStatistics(): HeapSpaceInfo[]; + function setFlagsFromString(flags: string): void; + /** + * Generates a snapshot of the current V8 heap and returns a Readable + * Stream that may be used to read the JSON serialized representation. + * This conversation was marked as resolved by joyeecheung + * This JSON stream format is intended to be used with tools such as + * Chrome DevTools. The JSON schema is undocumented and specific to the + * V8 engine, and may change from one version of V8 to the next. + */ + function getHeapSnapshot(): Readable; + + /** + * @param fileName The file path where the V8 heap snapshot is to be + * saved. If not specified, a file name with the pattern + * `'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be + * generated, where `{pid}` will be the PID of the Node.js process, + * `{thread_id}` will be `0` when `writeHeapSnapshot()` is called from + * the main Node.js thread or the id of a worker thread. + */ + function writeHeapSnapshot(fileName?: string): string; + + function getHeapCodeStatistics(): HeapCodeStatistics; + + class Serializer { + /** + * Writes out a header, which includes the serialization format version. + */ + writeHeader(): void; + + /** + * Serializes a JavaScript value and adds the serialized representation to the internal buffer. + * This throws an error if value cannot be serialized. + */ + writeValue(val: any): boolean; + + /** + * Returns the stored internal buffer. + * This serializer should not be used once the buffer is released. + * Calling this method results in undefined behavior if a previous write has failed. + */ + releaseBuffer(): Buffer; + + /** + * Marks an ArrayBuffer as having its contents transferred out of band.\ + * Pass the corresponding ArrayBuffer in the deserializing context to deserializer.transferArrayBuffer(). + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + + /** + * Write a raw 32-bit unsigned integer. + */ + writeUint32(value: number): void; + + /** + * Write a raw 64-bit unsigned integer, split into high and low 32-bit parts. + */ + writeUint64(hi: number, lo: number): void; + + /** + * Write a JS number value. + */ + writeDouble(value: number): void; + + /** + * Write raw bytes into the serializer’s internal buffer. + * The deserializer will require a way to compute the length of the buffer. + */ + writeRawBytes(buffer: NodeJS.TypedArray): void; + } + + /** + * A subclass of `Serializer` that serializes `TypedArray` (in particular `Buffer`) and `DataView` objects as host objects, + * and only stores the part of their underlying `ArrayBuffers` that they are referring to. + */ + class DefaultSerializer extends Serializer { + } + + class Deserializer { + constructor(data: NodeJS.TypedArray); + /** + * Reads and validates a header (including the format version). + * May, for example, reject an invalid or unsupported wire format. + * In that case, an Error is thrown. + */ + readHeader(): boolean; + + /** + * Deserializes a JavaScript value from the buffer and returns it. + */ + readValue(): any; + + /** + * Marks an ArrayBuffer as having its contents transferred out of band. + * Pass the corresponding `ArrayBuffer` in the serializing context to serializer.transferArrayBuffer() + * (or return the id from serializer._getSharedArrayBufferId() in the case of SharedArrayBuffers). + */ + transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; + + /** + * Reads the underlying wire format version. + * Likely mostly to be useful to legacy code reading old wire format versions. + * May not be called before .readHeader(). + */ + getWireFormatVersion(): number; + + /** + * Read a raw 32-bit unsigned integer and return it. + */ + readUint32(): number; + + /** + * Read a raw 64-bit unsigned integer and return it as an array [hi, lo] with two 32-bit unsigned integer entries. + */ + readUint64(): [number, number]; + + /** + * Read a JS number value. + */ + readDouble(): number; + + /** + * Read raw bytes from the deserializer’s internal buffer. + * The length parameter must correspond to the length of the buffer that was passed to serializer.writeRawBytes(). + */ + readRawBytes(length: number): Buffer; + } + + /** + * A subclass of `Serializer` that serializes `TypedArray` (in particular `Buffer`) and `DataView` objects as host objects, + * and only stores the part of their underlying `ArrayBuffers` that they are referring to. + */ + class DefaultDeserializer extends Deserializer { + } + + /** + * Uses a `DefaultSerializer` to serialize value into a buffer. + */ + function serialize(value: any): Buffer; + + /** + * Uses a `DefaultDeserializer` with default options to read a JS value from a buffer. + */ + function deserialize(data: NodeJS.TypedArray): any; +} +declare module "node:v8" { + export * from "v8"; +} diff --git a/node_backend/node_modules/@types/node/vm.d.ts b/node_backend/node_modules/@types/node/vm.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd9c2dc3a60d4ddb5d5c22df6fb933f4dde8bb4c --- /dev/null +++ b/node_backend/node_modules/@types/node/vm.d.ts @@ -0,0 +1,155 @@ +declare module "vm" { + interface Context extends NodeJS.Dict {} + interface BaseOptions { + /** + * Specifies the filename used in stack traces produced by this script. + * Default: `''`. + */ + filename?: string | undefined; + /** + * Specifies the line number offset that is displayed in stack traces produced by this script. + * Default: `0`. + */ + lineOffset?: number | undefined; + /** + * Specifies the column number offset that is displayed in stack traces produced by this script. + * @default 0 + */ + columnOffset?: number | undefined; + } + interface ScriptOptions extends BaseOptions { + displayErrors?: boolean | undefined; + timeout?: number | undefined; + cachedData?: Buffer | undefined; + /** @deprecated in favor of `script.createCachedData()` */ + produceCachedData?: boolean | undefined; + } + interface RunningScriptOptions extends BaseOptions { + /** + * When `true`, if an `Error` occurs while compiling the `code`, the line of code causing the error is attached to the stack trace. + * Default: `true`. + */ + displayErrors?: boolean | undefined; + /** + * Specifies the number of milliseconds to execute code before terminating execution. + * If execution is terminated, an `Error` will be thrown. This value must be a strictly positive integer. + */ + timeout?: number | undefined; + /** + * If `true`, the execution will be terminated when `SIGINT` (Ctrl+C) is received. + * Existing handlers for the event that have been attached via `process.on('SIGINT')` will be disabled during script execution, but will continue to work after that. + * If execution is terminated, an `Error` will be thrown. + * Default: `false`. + */ + breakOnSigint?: boolean | undefined; + /** + * If set to `afterEvaluate`, microtasks will be run immediately after the script has run. + */ + microtaskMode?: "afterEvaluate" | undefined; + } + interface CompileFunctionOptions extends BaseOptions { + /** + * Provides an optional data with V8's code cache data for the supplied source. + */ + cachedData?: Buffer | undefined; + /** + * Specifies whether to produce new cache data. + * Default: `false`, + */ + produceCachedData?: boolean | undefined; + /** + * The sandbox/context in which the said function should be compiled in. + */ + parsingContext?: Context | undefined; + + /** + * An array containing a collection of context extensions (objects wrapping the current scope) to be applied while compiling + */ + contextExtensions?: Object[] | undefined; + } + + interface CreateContextOptions { + /** + * Human-readable name of the newly created context. + * @default 'VM Context i' Where i is an ascending numerical index of the created context. + */ + name?: string | undefined; + /** + * Corresponds to the newly created context for display purposes. + * The origin should be formatted like a `URL`, but with only the scheme, host, and port (if necessary), + * like the value of the `url.origin` property of a URL object. + * Most notably, this string should omit the trailing slash, as that denotes a path. + * @default '' + */ + origin?: string | undefined; + codeGeneration?: { + /** + * If set to false any calls to eval or function constructors (Function, GeneratorFunction, etc) + * will throw an EvalError. + * @default true + */ + strings?: boolean | undefined; + /** + * If set to false any attempt to compile a WebAssembly module will throw a WebAssembly.CompileError. + * @default true + */ + wasm?: boolean | undefined; + } | undefined; + /** + * If set to `afterEvaluate`, microtasks will be run immediately after the script has run. + */ + microtaskMode?: "afterEvaluate" | undefined; + } + + type MeasureMemoryMode = "summary" | "detailed"; + + interface MeasureMemoryOptions { + /** + * @default 'summary' + */ + mode?: MeasureMemoryMode | undefined; + context?: Context | undefined; + } + + interface MemoryMeasurement { + total: { + jsMemoryEstimate: number; + jsMemoryRange: [number, number]; + }; + } + + class Script { + constructor(code: string, options?: ScriptOptions); + runInContext(contextifiedSandbox: Context, options?: RunningScriptOptions): any; + runInNewContext(sandbox?: Context, options?: RunningScriptOptions): any; + runInThisContext(options?: RunningScriptOptions): any; + createCachedData(): Buffer; + cachedDataRejected?: boolean | undefined; + } + function createContext(sandbox?: Context, options?: CreateContextOptions): Context; + function isContext(sandbox: Context): boolean; + function runInContext(code: string, contextifiedSandbox: Context, options?: RunningScriptOptions | string): any; + function runInNewContext(code: string, sandbox?: Context, options?: RunningScriptOptions | string): any; + function runInThisContext(code: string, options?: RunningScriptOptions | string): any; + function compileFunction(code: string, params?: ReadonlyArray, options?: CompileFunctionOptions): Function; + + /** + * Measure the memory known to V8 and used by the current execution context or a specified context. + * + * The format of the object that the returned Promise may resolve with is + * specific to the V8 engine and may change from one version of V8 to the next. + * + * The returned result is different from the statistics returned by + * `v8.getHeapSpaceStatistics()` in that `vm.measureMemory()` measures + * the memory reachable by V8 from a specific context, while + * `v8.getHeapSpaceStatistics()` measures the memory used by an instance + * of V8 engine, which can switch among multiple contexts that reference + * objects in the heap of one engine. + * + * @experimental + */ + function measureMemory(options?: MeasureMemoryOptions): Promise; +} +declare module "node:vm" { + export * from "vm"; +} diff --git a/node_backend/node_modules/@types/node/wasi.d.ts b/node_backend/node_modules/@types/node/wasi.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4ec985ce863f29ee4813ec56c49ca9df608db1f4 --- /dev/null +++ b/node_backend/node_modules/@types/node/wasi.d.ts @@ -0,0 +1,88 @@ +declare module "wasi" { + interface WASIOptions { + /** + * An array of strings that the WebAssembly application will + * see as command line arguments. The first argument is the virtual path to the + * WASI command itself. + */ + args?: string[] | undefined; + + /** + * An object similar to `process.env` that the WebAssembly + * application will see as its environment. + */ + env?: object | undefined; + + /** + * This object represents the WebAssembly application's + * sandbox directory structure. The string keys of `preopens` are treated as + * directories within the sandbox. The corresponding values in `preopens` are + * the real paths to those directories on the host machine. + */ + preopens?: NodeJS.Dict | undefined; + + /** + * By default, WASI applications terminate the Node.js + * process via the `__wasi_proc_exit()` function. Setting this option to `true` + * causes `wasi.start()` to return the exit code rather than terminate the + * process. + * @default false + */ + returnOnExit?: boolean | undefined; + + /** + * The file descriptor used as standard input in the WebAssembly application. + * @default 0 + */ + stdin?: number | undefined; + + /** + * The file descriptor used as standard output in the WebAssembly application. + * @default 1 + */ + stdout?: number | undefined; + + /** + * The file descriptor used as standard error in the WebAssembly application. + * @default 2 + */ + stderr?: number | undefined; + } + + class WASI { + constructor(options?: WASIOptions); + /** + * Attempt to begin execution of `instance` by invoking its `_start()` export. + * If `instance` does not contain a `_start()` export, then `start()` attempts to + * invoke the `__wasi_unstable_reactor_start()` export. If neither of those exports + * is present on `instance`, then `start()` does nothing. + * + * `start()` requires that `instance` exports a [`WebAssembly.Memory`][] named + * `memory`. If `instance` does not have a `memory` export an exception is thrown. + * + * If `start()` is called more than once, an exception is thrown. + */ + start(instance: object): void; // TODO: avoid DOM dependency until WASM moved to own lib. + + /** + * Attempt to initialize `instance` as a WASI reactor by invoking its `_initialize()` export, if it is present. + * If `instance` contains a `_start()` export, then an exception is thrown. + * + * `start()` requires that `instance` exports a [`WebAssembly.Memory`][] named + * `memory`. If `instance` does not have a `memory` export an exception is thrown. + * + * If `initialize()` is called more than once, an exception is thrown. + */ + initialize(instance: object): void; // TODO: avoid DOM dependency until WASM moved to own lib. + + /** + * Is an object that implements the WASI system call API. This object + * should be passed as the `wasi_snapshot_preview1` import during the instantiation of a + * [`WebAssembly.Instance`][]. + */ + readonly wasiImport: NodeJS.Dict; // TODO: Narrow to DOM types + } +} +declare module "node:wasi" { + export * from "wasi"; +} diff --git a/node_backend/node_modules/@types/node/worker_threads.d.ts b/node_backend/node_modules/@types/node/worker_threads.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..c89937c062eac71e894470944a379939cab8f009 --- /dev/null +++ b/node_backend/node_modules/@types/node/worker_threads.d.ts @@ -0,0 +1,241 @@ +declare module "worker_threads" { + import { Context } from "vm"; + import EventEmitter = require("events"); + import { Readable, Writable } from "stream"; + import { URL } from "url"; + import { FileHandle } from "fs/promises"; + + const isMainThread: boolean; + const parentPort: null | MessagePort; + const resourceLimits: ResourceLimits; + const SHARE_ENV: unique symbol; + const threadId: number; + const workerData: any; + + class MessageChannel { + readonly port1: MessagePort; + readonly port2: MessagePort; + } + + type TransferListItem = ArrayBuffer | MessagePort | FileHandle; + + class MessagePort extends EventEmitter { + close(): void; + postMessage(value: any, transferList?: ReadonlyArray): void; + ref(): void; + unref(): void; + start(): void; + + addListener(event: "close", listener: () => void): this; + addListener(event: "message", listener: (value: any) => void): this; + addListener(event: "messageerror", listener: (error: Error) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "message", value: any): boolean; + emit(event: "messageerror", error: Error): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "message", listener: (value: any) => void): this; + on(event: "messageerror", listener: (error: Error) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "message", listener: (value: any) => void): this; + once(event: "messageerror", listener: (error: Error) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "message", listener: (value: any) => void): this; + prependListener(event: "messageerror", listener: (error: Error) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "message", listener: (value: any) => void): this; + prependOnceListener(event: "messageerror", listener: (error: Error) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "close", listener: () => void): this; + removeListener(event: "message", listener: (value: any) => void): this; + removeListener(event: "messageerror", listener: (error: Error) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + + off(event: "close", listener: () => void): this; + off(event: "message", listener: (value: any) => void): this; + off(event: "messageerror", listener: (error: Error) => void): this; + off(event: string | symbol, listener: (...args: any[]) => void): this; + } + + interface WorkerOptions { + /** + * List of arguments which would be stringified and appended to + * `process.argv` in the worker. This is mostly similar to the `workerData` + * but the values will be available on the global `process.argv` as if they + * were passed as CLI options to the script. + */ + argv?: any[] | undefined; + env?: NodeJS.Dict | typeof SHARE_ENV | undefined; + eval?: boolean | undefined; + workerData?: any; + stdin?: boolean | undefined; + stdout?: boolean | undefined; + stderr?: boolean | undefined; + execArgv?: string[] | undefined; + resourceLimits?: ResourceLimits | undefined; + /** + * Additional data to send in the first worker message. + */ + transferList?: TransferListItem[] | undefined; + trackUnmanagedFds?: boolean | undefined; + } + + interface ResourceLimits { + /** + * The maximum size of a heap space for recently created objects. + */ + maxYoungGenerationSizeMb?: number | undefined; + /** + * The maximum size of the main heap in MB. + */ + maxOldGenerationSizeMb?: number | undefined; + /** + * The size of a pre-allocated memory range used for generated code. + */ + codeRangeSizeMb?: number | undefined; + /** + * The default maximum stack size for the thread. Small values may lead to unusable Worker instances. + * @default 4 + */ + stackSizeMb?: number | undefined; + } + + class Worker extends EventEmitter { + readonly stdin: Writable | null; + readonly stdout: Readable; + readonly stderr: Readable; + readonly threadId: number; + readonly resourceLimits?: ResourceLimits | undefined; + + /** + * @param filename The path to the Worker’s main script or module. + * Must be either an absolute path or a relative path (i.e. relative to the current working directory) starting with ./ or ../, + * or a WHATWG URL object using file: protocol. If options.eval is true, this is a string containing JavaScript code rather than a path. + */ + constructor(filename: string | URL, options?: WorkerOptions); + + postMessage(value: any, transferList?: ReadonlyArray): void; + ref(): void; + unref(): void; + /** + * Stop all JavaScript execution in the worker thread as soon as possible. + * Returns a Promise for the exit code that is fulfilled when the `exit` event is emitted. + */ + terminate(): Promise; + + /** + * Returns a readable stream for a V8 snapshot of the current state of the Worker. + * See [`v8.getHeapSnapshot()`][] for more details. + * + * If the Worker thread is no longer running, which may occur before the + * [`'exit'` event][] is emitted, the returned `Promise` will be rejected + * immediately with an [`ERR_WORKER_NOT_RUNNING`][] error + */ + getHeapSnapshot(): Promise; + + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "exit", listener: (exitCode: number) => void): this; + addListener(event: "message", listener: (value: any) => void): this; + addListener(event: "messageerror", listener: (error: Error) => void): this; + addListener(event: "online", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "error", err: Error): boolean; + emit(event: "exit", exitCode: number): boolean; + emit(event: "message", value: any): boolean; + emit(event: "messageerror", error: Error): boolean; + emit(event: "online"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "error", listener: (err: Error) => void): this; + on(event: "exit", listener: (exitCode: number) => void): this; + on(event: "message", listener: (value: any) => void): this; + on(event: "messageerror", listener: (error: Error) => void): this; + on(event: "online", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "error", listener: (err: Error) => void): this; + once(event: "exit", listener: (exitCode: number) => void): this; + once(event: "message", listener: (value: any) => void): this; + once(event: "messageerror", listener: (error: Error) => void): this; + once(event: "online", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "exit", listener: (exitCode: number) => void): this; + prependListener(event: "message", listener: (value: any) => void): this; + prependListener(event: "messageerror", listener: (error: Error) => void): this; + prependListener(event: "online", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "exit", listener: (exitCode: number) => void): this; + prependOnceListener(event: "message", listener: (value: any) => void): this; + prependOnceListener(event: "messageerror", listener: (error: Error) => void): this; + prependOnceListener(event: "online", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "error", listener: (err: Error) => void): this; + removeListener(event: "exit", listener: (exitCode: number) => void): this; + removeListener(event: "message", listener: (value: any) => void): this; + removeListener(event: "messageerror", listener: (error: Error) => void): this; + removeListener(event: "online", listener: () => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + + off(event: "error", listener: (err: Error) => void): this; + off(event: "exit", listener: (exitCode: number) => void): this; + off(event: "message", listener: (value: any) => void): this; + off(event: "messageerror", listener: (error: Error) => void): this; + off(event: "online", listener: () => void): this; + off(event: string | symbol, listener: (...args: any[]) => void): this; + } + + /** + * Mark an object as not transferable. + * If `object` occurs in the transfer list of a `port.postMessage()` call, it will be ignored. + * + * In particular, this makes sense for objects that can be cloned, rather than transferred, + * and which are used by other objects on the sending side. For example, Node.js marks + * the `ArrayBuffer`s it uses for its Buffer pool with this. + * + * This operation cannot be undone. + */ + function markAsUntransferable(object: object): void; + + /** + * Transfer a `MessagePort` to a different `vm` Context. The original `port` + * object will be rendered unusable, and the returned `MessagePort` instance will + * take its place. + * + * The returned `MessagePort` will be an object in the target context, and will + * inherit from its global `Object` class. Objects passed to the + * `port.onmessage()` listener will also be created in the target context + * and inherit from its global `Object` class. + * + * However, the created `MessagePort` will no longer inherit from + * `EventEmitter`, and only `port.onmessage()` can be used to receive + * events using it. + */ + function moveMessagePortToContext(port: MessagePort, context: Context): MessagePort; + + /** + * Receive a single message from a given `MessagePort`. If no message is available, + * `undefined` is returned, otherwise an object with a single `message` property + * that contains the message payload, corresponding to the oldest message in the + * `MessagePort`’s queue. + */ + function receiveMessageOnPort(port: MessagePort): { message: any } | undefined; +} +declare module "node:worker_threads" { + export * from "worker_threads"; +} diff --git a/node_backend/node_modules/@types/node/zlib.d.ts b/node_backend/node_modules/@types/node/zlib.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ca2e542687ba02bb2e908e299af6a61cb0e971d7 --- /dev/null +++ b/node_backend/node_modules/@types/node/zlib.d.ts @@ -0,0 +1,364 @@ +declare module "zlib" { + import * as stream from "stream"; + + interface ZlibOptions { + /** + * @default constants.Z_NO_FLUSH + */ + flush?: number | undefined; + /** + * @default constants.Z_FINISH + */ + finishFlush?: number | undefined; + /** + * @default 16*1024 + */ + chunkSize?: number | undefined; + windowBits?: number | undefined; + level?: number | undefined; // compression only + memLevel?: number | undefined; // compression only + strategy?: number | undefined; // compression only + dictionary?: NodeJS.ArrayBufferView | ArrayBuffer | undefined; // deflate/inflate only, empty dictionary by default + info?: boolean | undefined; + maxOutputLength?: number | undefined; + } + + interface BrotliOptions { + /** + * @default constants.BROTLI_OPERATION_PROCESS + */ + flush?: number | undefined; + /** + * @default constants.BROTLI_OPERATION_FINISH + */ + finishFlush?: number | undefined; + /** + * @default 16*1024 + */ + chunkSize?: number | undefined; + params?: { + /** + * Each key is a `constants.BROTLI_*` constant. + */ + [key: number]: boolean | number; + } | undefined; + maxOutputLength?: number | undefined; + } + + interface Zlib { + /** @deprecated Use bytesWritten instead. */ + readonly bytesRead: number; + readonly bytesWritten: number; + shell?: boolean | string | undefined; + close(callback?: () => void): void; + flush(kind?: number, callback?: () => void): void; + flush(callback?: () => void): void; + } + + interface ZlibParams { + params(level: number, strategy: number, callback: () => void): void; + } + + interface ZlibReset { + reset(): void; + } + + interface BrotliCompress extends stream.Transform, Zlib {} + interface BrotliDecompress extends stream.Transform, Zlib {} + interface Gzip extends stream.Transform, Zlib {} + interface Gunzip extends stream.Transform, Zlib {} + interface Deflate extends stream.Transform, Zlib, ZlibReset, ZlibParams {} + interface Inflate extends stream.Transform, Zlib, ZlibReset {} + interface DeflateRaw extends stream.Transform, Zlib, ZlibReset, ZlibParams {} + interface InflateRaw extends stream.Transform, Zlib, ZlibReset {} + interface Unzip extends stream.Transform, Zlib {} + + function createBrotliCompress(options?: BrotliOptions): BrotliCompress; + function createBrotliDecompress(options?: BrotliOptions): BrotliDecompress; + function createGzip(options?: ZlibOptions): Gzip; + function createGunzip(options?: ZlibOptions): Gunzip; + function createDeflate(options?: ZlibOptions): Deflate; + function createInflate(options?: ZlibOptions): Inflate; + function createDeflateRaw(options?: ZlibOptions): DeflateRaw; + function createInflateRaw(options?: ZlibOptions): InflateRaw; + function createUnzip(options?: ZlibOptions): Unzip; + + type InputType = string | ArrayBuffer | NodeJS.ArrayBufferView; + + type CompressCallback = (error: Error | null, result: Buffer) => void; + + function brotliCompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void; + function brotliCompress(buf: InputType, callback: CompressCallback): void; + namespace brotliCompress { + function __promisify__(buffer: InputType, options?: BrotliOptions): Promise; + } + + function brotliCompressSync(buf: InputType, options?: BrotliOptions): Buffer; + + function brotliDecompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void; + function brotliDecompress(buf: InputType, callback: CompressCallback): void; + namespace brotliDecompress { + function __promisify__(buffer: InputType, options?: BrotliOptions): Promise; + } + + function brotliDecompressSync(buf: InputType, options?: BrotliOptions): Buffer; + + function deflate(buf: InputType, callback: CompressCallback): void; + function deflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace deflate { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function deflateSync(buf: InputType, options?: ZlibOptions): Buffer; + + function deflateRaw(buf: InputType, callback: CompressCallback): void; + function deflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace deflateRaw { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function deflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; + + function gzip(buf: InputType, callback: CompressCallback): void; + function gzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace gzip { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function gzipSync(buf: InputType, options?: ZlibOptions): Buffer; + + function gunzip(buf: InputType, callback: CompressCallback): void; + function gunzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace gunzip { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function gunzipSync(buf: InputType, options?: ZlibOptions): Buffer; + + function inflate(buf: InputType, callback: CompressCallback): void; + function inflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace inflate { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function inflateSync(buf: InputType, options?: ZlibOptions): Buffer; + + function inflateRaw(buf: InputType, callback: CompressCallback): void; + function inflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace inflateRaw { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function inflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; + + function unzip(buf: InputType, callback: CompressCallback): void; + function unzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace unzip { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function unzipSync(buf: InputType, options?: ZlibOptions): Buffer; + + namespace constants { + const BROTLI_DECODE: number; + const BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: number; + const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: number; + const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: number; + const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: number; + const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: number; + const BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: number; + const BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: number; + const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: number; + const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: number; + const BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: number; + const BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: number; + const BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: number; + const BROTLI_DECODER_ERROR_FORMAT_DISTANCE: number; + const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: number; + const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: number; + const BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: number; + const BROTLI_DECODER_ERROR_FORMAT_PADDING_1: number; + const BROTLI_DECODER_ERROR_FORMAT_PADDING_2: number; + const BROTLI_DECODER_ERROR_FORMAT_RESERVED: number; + const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: number; + const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: number; + const BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: number; + const BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: number; + const BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: number; + const BROTLI_DECODER_ERROR_UNREACHABLE: number; + const BROTLI_DECODER_NEEDS_MORE_INPUT: number; + const BROTLI_DECODER_NEEDS_MORE_OUTPUT: number; + const BROTLI_DECODER_NO_ERROR: number; + const BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: number; + const BROTLI_DECODER_PARAM_LARGE_WINDOW: number; + const BROTLI_DECODER_RESULT_ERROR: number; + const BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: number; + const BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: number; + const BROTLI_DECODER_RESULT_SUCCESS: number; + const BROTLI_DECODER_SUCCESS: number; + + const BROTLI_DEFAULT_MODE: number; + const BROTLI_DEFAULT_QUALITY: number; + const BROTLI_DEFAULT_WINDOW: number; + const BROTLI_ENCODE: number; + const BROTLI_LARGE_MAX_WINDOW_BITS: number; + const BROTLI_MAX_INPUT_BLOCK_BITS: number; + const BROTLI_MAX_QUALITY: number; + const BROTLI_MAX_WINDOW_BITS: number; + const BROTLI_MIN_INPUT_BLOCK_BITS: number; + const BROTLI_MIN_QUALITY: number; + const BROTLI_MIN_WINDOW_BITS: number; + + const BROTLI_MODE_FONT: number; + const BROTLI_MODE_GENERIC: number; + const BROTLI_MODE_TEXT: number; + + const BROTLI_OPERATION_EMIT_METADATA: number; + const BROTLI_OPERATION_FINISH: number; + const BROTLI_OPERATION_FLUSH: number; + const BROTLI_OPERATION_PROCESS: number; + + const BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: number; + const BROTLI_PARAM_LARGE_WINDOW: number; + const BROTLI_PARAM_LGBLOCK: number; + const BROTLI_PARAM_LGWIN: number; + const BROTLI_PARAM_MODE: number; + const BROTLI_PARAM_NDIRECT: number; + const BROTLI_PARAM_NPOSTFIX: number; + const BROTLI_PARAM_QUALITY: number; + const BROTLI_PARAM_SIZE_HINT: number; + + const DEFLATE: number; + const DEFLATERAW: number; + const GUNZIP: number; + const GZIP: number; + const INFLATE: number; + const INFLATERAW: number; + const UNZIP: number; + + // Allowed flush values. + const Z_NO_FLUSH: number; + const Z_PARTIAL_FLUSH: number; + const Z_SYNC_FLUSH: number; + const Z_FULL_FLUSH: number; + const Z_FINISH: number; + const Z_BLOCK: number; + const Z_TREES: number; + + // Return codes for the compression/decompression functions. + // Negative values are errors, positive values are used for special but normal events. + const Z_OK: number; + const Z_STREAM_END: number; + const Z_NEED_DICT: number; + const Z_ERRNO: number; + const Z_STREAM_ERROR: number; + const Z_DATA_ERROR: number; + const Z_MEM_ERROR: number; + const Z_BUF_ERROR: number; + const Z_VERSION_ERROR: number; + + // Compression levels. + const Z_NO_COMPRESSION: number; + const Z_BEST_SPEED: number; + const Z_BEST_COMPRESSION: number; + const Z_DEFAULT_COMPRESSION: number; + + // Compression strategy. + const Z_FILTERED: number; + const Z_HUFFMAN_ONLY: number; + const Z_RLE: number; + const Z_FIXED: number; + const Z_DEFAULT_STRATEGY: number; + + const Z_DEFAULT_WINDOWBITS: number; + const Z_MIN_WINDOWBITS: number; + const Z_MAX_WINDOWBITS: number; + + const Z_MIN_CHUNK: number; + const Z_MAX_CHUNK: number; + const Z_DEFAULT_CHUNK: number; + + const Z_MIN_MEMLEVEL: number; + const Z_MAX_MEMLEVEL: number; + const Z_DEFAULT_MEMLEVEL: number; + + const Z_MIN_LEVEL: number; + const Z_MAX_LEVEL: number; + const Z_DEFAULT_LEVEL: number; + + const ZLIB_VERNUM: number; + } + + // Allowed flush values. + /** @deprecated Use `constants.Z_NO_FLUSH` */ + const Z_NO_FLUSH: number; + /** @deprecated Use `constants.Z_PARTIAL_FLUSH` */ + const Z_PARTIAL_FLUSH: number; + /** @deprecated Use `constants.Z_SYNC_FLUSH` */ + const Z_SYNC_FLUSH: number; + /** @deprecated Use `constants.Z_FULL_FLUSH` */ + const Z_FULL_FLUSH: number; + /** @deprecated Use `constants.Z_FINISH` */ + const Z_FINISH: number; + /** @deprecated Use `constants.Z_BLOCK` */ + const Z_BLOCK: number; + /** @deprecated Use `constants.Z_TREES` */ + const Z_TREES: number; + + // Return codes for the compression/decompression functions. + // Negative values are errors, positive values are used for special but normal events. + /** @deprecated Use `constants.Z_OK` */ + const Z_OK: number; + /** @deprecated Use `constants.Z_STREAM_END` */ + const Z_STREAM_END: number; + /** @deprecated Use `constants.Z_NEED_DICT` */ + const Z_NEED_DICT: number; + /** @deprecated Use `constants.Z_ERRNO` */ + const Z_ERRNO: number; + /** @deprecated Use `constants.Z_STREAM_ERROR` */ + const Z_STREAM_ERROR: number; + /** @deprecated Use `constants.Z_DATA_ERROR` */ + const Z_DATA_ERROR: number; + /** @deprecated Use `constants.Z_MEM_ERROR` */ + const Z_MEM_ERROR: number; + /** @deprecated Use `constants.Z_BUF_ERROR` */ + const Z_BUF_ERROR: number; + /** @deprecated Use `constants.Z_VERSION_ERROR` */ + const Z_VERSION_ERROR: number; + + // Compression levels. + /** @deprecated Use `constants.Z_NO_COMPRESSION` */ + const Z_NO_COMPRESSION: number; + /** @deprecated Use `constants.Z_BEST_SPEED` */ + const Z_BEST_SPEED: number; + /** @deprecated Use `constants.Z_BEST_COMPRESSION` */ + const Z_BEST_COMPRESSION: number; + /** @deprecated Use `constants.Z_DEFAULT_COMPRESSION` */ + const Z_DEFAULT_COMPRESSION: number; + + // Compression strategy. + /** @deprecated Use `constants.Z_FILTERED` */ + const Z_FILTERED: number; + /** @deprecated Use `constants.Z_HUFFMAN_ONLY` */ + const Z_HUFFMAN_ONLY: number; + /** @deprecated Use `constants.Z_RLE` */ + const Z_RLE: number; + /** @deprecated Use `constants.Z_FIXED` */ + const Z_FIXED: number; + /** @deprecated Use `constants.Z_DEFAULT_STRATEGY` */ + const Z_DEFAULT_STRATEGY: number; + + /** @deprecated */ + const Z_BINARY: number; + /** @deprecated */ + const Z_TEXT: number; + /** @deprecated */ + const Z_ASCII: number; + /** @deprecated */ + const Z_UNKNOWN: number; + /** @deprecated */ + const Z_DEFLATED: number; +} +declare module "node:zlib" { + export * from "zlib"; +} diff --git a/node_backend/node_modules/archiver-utils/CHANGELOG.md b/node_backend/node_modules/archiver-utils/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..17fceaa4f9ce1e3f8b95ac8b8029aa8e5ee990b4 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/CHANGELOG.md @@ -0,0 +1,14 @@ +## Changelog + +**2.1.0** — July 19, 2019 — [Diff](https://github.com/archiverjs/archiver-utils/compare/2.0.0...2.1.0) + +- other: less lodash (#16) +- other: update dependencies + +**2.0.0** — August 22, 2018 — [Diff](https://github.com/archiverjs/archiver-utils/compare/1.3.0...2.0.0) + +- breaking: follow node LTS, remove support for versions under 6. +- other: remove unused lodash dependence (#13) +- test: now targeting node v10 + +[Release Archive](https://github.com/archiverjs/archiver-utils/releases) \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/LICENSE b/node_backend/node_modules/archiver-utils/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f12cd49cae3978dcdb337c7bad10842b3412ce59 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2015 Chris Talkington. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/README.md b/node_backend/node_modules/archiver-utils/README.md new file mode 100644 index 0000000000000000000000000000000000000000..fb90d643e9709be7f7a789e8f8824626089c7f33 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/README.md @@ -0,0 +1,7 @@ +# Archiver Utils [![Build Status](https://travis-ci.org/archiverjs/archiver-utils.svg?branch=master)](https://travis-ci.org/archiverjs/archiver-utils) [![Build status](https://ci.appveyor.com/api/projects/status/7254ojgmlglhqbed/branch/master?svg=true)](https://ci.appveyor.com/project/ctalkington/archiver-utils/branch/master) + + +## Things of Interest +- [Changelog](https://github.com/archiverjs/archiver-utils/releases) +- [Contributing](https://github.com/archiverjs/archiver-utils/blob/master/CONTRIBUTING.md) +- [MIT License](https://github.com/archiverjs/archiver-utils/blob/master/LICENSE) diff --git a/node_backend/node_modules/archiver-utils/file.js b/node_backend/node_modules/archiver-utils/file.js new file mode 100644 index 0000000000000000000000000000000000000000..98496886400acde52b68bc9f9c587e93ed90187d --- /dev/null +++ b/node_backend/node_modules/archiver-utils/file.js @@ -0,0 +1,209 @@ +/** + * archiver-utils + * + * Copyright (c) 2012-2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-archiver/blob/master/LICENSE-MIT + */ +var fs = require('graceful-fs'); +var path = require('path'); + +var flatten = require('lodash.flatten'); +var difference = require('lodash.difference'); +var union = require('lodash.union'); +var isPlainObject = require('lodash.isplainobject'); + +var glob = require('glob'); + +var file = module.exports = {}; + +var pathSeparatorRe = /[\/\\]/g; + +// Process specified wildcard glob patterns or filenames against a +// callback, excluding and uniquing files in the result set. +var processPatterns = function(patterns, fn) { + // Filepaths to return. + var result = []; + // Iterate over flattened patterns array. + flatten(patterns).forEach(function(pattern) { + // If the first character is ! it should be omitted + var exclusion = pattern.indexOf('!') === 0; + // If the pattern is an exclusion, remove the ! + if (exclusion) { pattern = pattern.slice(1); } + // Find all matching files for this pattern. + var matches = fn(pattern); + if (exclusion) { + // If an exclusion, remove matching files. + result = difference(result, matches); + } else { + // Otherwise add matching files. + result = union(result, matches); + } + }); + return result; +}; + +// True if the file path exists. +file.exists = function() { + var filepath = path.join.apply(path, arguments); + return fs.existsSync(filepath); +}; + +// Return an array of all file paths that match the given wildcard patterns. +file.expand = function(...args) { + // If the first argument is an options object, save those options to pass + // into the File.prototype.glob.sync method. + var options = isPlainObject(args[0]) ? args.shift() : {}; + // Use the first argument if it's an Array, otherwise convert the arguments + // object to an array and use that. + var patterns = Array.isArray(args[0]) ? args[0] : args; + // Return empty set if there are no patterns or filepaths. + if (patterns.length === 0) { return []; } + // Return all matching filepaths. + var matches = processPatterns(patterns, function(pattern) { + // Find all matching files for this pattern. + return glob.sync(pattern, options); + }); + // Filter result set? + if (options.filter) { + matches = matches.filter(function(filepath) { + filepath = path.join(options.cwd || '', filepath); + try { + if (typeof options.filter === 'function') { + return options.filter(filepath); + } else { + // If the file is of the right type and exists, this should work. + return fs.statSync(filepath)[options.filter](); + } + } catch(e) { + // Otherwise, it's probably not the right type. + return false; + } + }); + } + return matches; +}; + +// Build a multi task "files" object dynamically. +file.expandMapping = function(patterns, destBase, options) { + options = Object.assign({ + rename: function(destBase, destPath) { + return path.join(destBase || '', destPath); + } + }, options); + var files = []; + var fileByDest = {}; + // Find all files matching pattern, using passed-in options. + file.expand(options, patterns).forEach(function(src) { + var destPath = src; + // Flatten? + if (options.flatten) { + destPath = path.basename(destPath); + } + // Change the extension? + if (options.ext) { + destPath = destPath.replace(/(\.[^\/]*)?$/, options.ext); + } + // Generate destination filename. + var dest = options.rename(destBase, destPath, options); + // Prepend cwd to src path if necessary. + if (options.cwd) { src = path.join(options.cwd, src); } + // Normalize filepaths to be unix-style. + dest = dest.replace(pathSeparatorRe, '/'); + src = src.replace(pathSeparatorRe, '/'); + // Map correct src path to dest path. + if (fileByDest[dest]) { + // If dest already exists, push this src onto that dest's src array. + fileByDest[dest].src.push(src); + } else { + // Otherwise create a new src-dest file mapping object. + files.push({ + src: [src], + dest: dest, + }); + // And store a reference for later use. + fileByDest[dest] = files[files.length - 1]; + } + }); + return files; +}; + +// reusing bits of grunt's multi-task source normalization +file.normalizeFilesArray = function(data) { + var files = []; + + data.forEach(function(obj) { + var prop; + if ('src' in obj || 'dest' in obj) { + files.push(obj); + } + }); + + if (files.length === 0) { + return []; + } + + files = _(files).chain().forEach(function(obj) { + if (!('src' in obj) || !obj.src) { return; } + // Normalize .src properties to flattened array. + if (Array.isArray(obj.src)) { + obj.src = flatten(obj.src); + } else { + obj.src = [obj.src]; + } + }).map(function(obj) { + // Build options object, removing unwanted properties. + var expandOptions = Object.assign({}, obj); + delete expandOptions.src; + delete expandOptions.dest; + + // Expand file mappings. + if (obj.expand) { + return file.expandMapping(obj.src, obj.dest, expandOptions).map(function(mapObj) { + // Copy obj properties to result. + var result = Object.assign({}, obj); + // Make a clone of the orig obj available. + result.orig = Object.assign({}, obj); + // Set .src and .dest, processing both as templates. + result.src = mapObj.src; + result.dest = mapObj.dest; + // Remove unwanted properties. + ['expand', 'cwd', 'flatten', 'rename', 'ext'].forEach(function(prop) { + delete result[prop]; + }); + return result; + }); + } + + // Copy obj properties to result, adding an .orig property. + var result = Object.assign({}, obj); + // Make a clone of the orig obj available. + result.orig = Object.assign({}, obj); + + if ('src' in result) { + // Expose an expand-on-demand getter method as .src. + Object.defineProperty(result, 'src', { + enumerable: true, + get: function fn() { + var src; + if (!('result' in fn)) { + src = obj.src; + // If src is an array, flatten it. Otherwise, make it into an array. + src = Array.isArray(src) ? flatten(src) : [src]; + // Expand src files, memoizing result. + fn.result = file.expand(expandOptions, src); + } + return fn.result; + } + }); + } + + if ('dest' in result) { + result.dest = obj.dest; + } + + return result; + }).flatten().value(); + + return files; +}; diff --git a/node_backend/node_modules/archiver-utils/index.js b/node_backend/node_modules/archiver-utils/index.js new file mode 100644 index 0000000000000000000000000000000000000000..78733b0a88513188474390515763e648ef241414 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/index.js @@ -0,0 +1,156 @@ +/** + * archiver-utils + * + * Copyright (c) 2015 Chris Talkington. + * Licensed under the MIT license. + * https://github.com/archiverjs/archiver-utils/blob/master/LICENSE + */ +var fs = require('graceful-fs'); +var path = require('path'); +var nutil = require('util'); +var lazystream = require('lazystream'); +var normalizePath = require('normalize-path'); +var defaults = require('lodash.defaults'); + +var Stream = require('stream').Stream; +var PassThrough = require('readable-stream').PassThrough; + +var utils = module.exports = {}; +utils.file = require('./file.js'); + +function assertPath(path) { + if (typeof path !== 'string') { + throw new TypeError('Path must be a string. Received ' + nutils.inspect(path)); + } +} + +utils.collectStream = function(source, callback) { + var collection = []; + var size = 0; + + source.on('error', callback); + + source.on('data', function(chunk) { + collection.push(chunk); + size += chunk.length; + }); + + source.on('end', function() { + var buf = new Buffer(size); + var offset = 0; + + collection.forEach(function(data) { + data.copy(buf, offset); + offset += data.length; + }); + + callback(null, buf); + }); +}; + +utils.dateify = function(dateish) { + dateish = dateish || new Date(); + + if (dateish instanceof Date) { + dateish = dateish; + } else if (typeof dateish === 'string') { + dateish = new Date(dateish); + } else { + dateish = new Date(); + } + + return dateish; +}; + +// this is slightly different from lodash version +utils.defaults = function(object, source, guard) { + var args = arguments; + args[0] = args[0] || {}; + + return defaults(...args); +}; + +utils.isStream = function(source) { + return source instanceof Stream; +}; + +utils.lazyReadStream = function(filepath) { + return new lazystream.Readable(function() { + return fs.createReadStream(filepath); + }); +}; + +utils.normalizeInputSource = function(source) { + if (source === null) { + return new Buffer(0); + } else if (typeof source === 'string') { + return new Buffer(source); + } else if (utils.isStream(source) && !source._readableState) { + var normalized = new PassThrough(); + source.pipe(normalized); + + return normalized; + } + + return source; +}; + +utils.sanitizePath = function(filepath) { + return normalizePath(filepath, false).replace(/^\w+:/, '').replace(/^(\.\.\/|\/)+/, ''); +}; + +utils.trailingSlashIt = function(str) { + return str.slice(-1) !== '/' ? str + '/' : str; +}; + +utils.unixifyPath = function(filepath) { + return normalizePath(filepath, false).replace(/^\w+:/, ''); +}; + +utils.walkdir = function(dirpath, base, callback) { + var results = []; + + if (typeof base === 'function') { + callback = base; + base = dirpath; + } + + fs.readdir(dirpath, function(err, list) { + var i = 0; + var file; + var filepath; + + if (err) { + return callback(err); + } + + (function next() { + file = list[i++]; + + if (!file) { + return callback(null, results); + } + + filepath = path.join(dirpath, file); + + fs.stat(filepath, function(err, stats) { + results.push({ + path: filepath, + relative: path.relative(base, filepath).replace(/\\/g, '/'), + stats: stats + }); + + if (stats && stats.isDirectory()) { + utils.walkdir(filepath, base, function(err, res) { + res.forEach(function(dirEntry) { + results.push(dirEntry); + }); + next(); + }); + } else { + next(); + } + }); + })(); + }); +}; diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/.travis.yml b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..f62cdac0686da613ecdbf214fb2b43a828cb6ce9 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/.travis.yml @@ -0,0 +1,34 @@ +sudo: false +language: node_js +before_install: + - (test $NPM_LEGACY && npm install -g npm@2 && npm install -g npm@3) || true +notifications: + email: false +matrix: + fast_finish: true + include: + - node_js: '0.8' + env: NPM_LEGACY=true + - node_js: '0.10' + env: NPM_LEGACY=true + - node_js: '0.11' + env: NPM_LEGACY=true + - node_js: '0.12' + env: NPM_LEGACY=true + - node_js: 1 + env: NPM_LEGACY=true + - node_js: 2 + env: NPM_LEGACY=true + - node_js: 3 + env: NPM_LEGACY=true + - node_js: 4 + - node_js: 5 + - node_js: 6 + - node_js: 7 + - node_js: 8 + - node_js: 9 +script: "npm run test" +env: + global: + - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= + - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/CONTRIBUTING.md b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..f478d58dca85b2c396e2da8a2251be0071c4e9e0 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/CONTRIBUTING.md @@ -0,0 +1,38 @@ +# Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +* (a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +* (b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +* (c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +* (d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. + +## Moderation Policy + +The [Node.js Moderation Policy] applies to this WG. + +## Code of Conduct + +The [Node.js Code of Conduct][] applies to this WG. + +[Node.js Code of Conduct]: +https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md +[Node.js Moderation Policy]: +https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/GOVERNANCE.md b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/GOVERNANCE.md new file mode 100644 index 0000000000000000000000000000000000000000..16ffb93f24bece9519cc4a220a0c1d3c91481453 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/GOVERNANCE.md @@ -0,0 +1,136 @@ +### Streams Working Group + +The Node.js Streams is jointly governed by a Working Group +(WG) +that is responsible for high-level guidance of the project. + +The WG has final authority over this project including: + +* Technical direction +* Project governance and process (including this policy) +* Contribution policy +* GitHub repository hosting +* Conduct guidelines +* Maintaining the list of additional Collaborators + +For the current list of WG members, see the project +[README.md](./README.md#current-project-team-members). + +### Collaborators + +The readable-stream GitHub repository is +maintained by the WG and additional Collaborators who are added by the +WG on an ongoing basis. + +Individuals making significant and valuable contributions are made +Collaborators and given commit-access to the project. These +individuals are identified by the WG and their addition as +Collaborators is discussed during the WG meeting. + +_Note:_ If you make a significant contribution and are not considered +for commit-access log an issue or contact a WG member directly and it +will be brought up in the next WG meeting. + +Modifications of the contents of the readable-stream repository are +made on +a collaborative basis. Anybody with a GitHub account may propose a +modification via pull request and it will be considered by the project +Collaborators. All pull requests must be reviewed and accepted by a +Collaborator with sufficient expertise who is able to take full +responsibility for the change. In the case of pull requests proposed +by an existing Collaborator, an additional Collaborator is required +for sign-off. Consensus should be sought if additional Collaborators +participate and there is disagreement around a particular +modification. See _Consensus Seeking Process_ below for further detail +on the consensus model used for governance. + +Collaborators may opt to elevate significant or controversial +modifications, or modifications that have not found consensus to the +WG for discussion by assigning the ***WG-agenda*** tag to a pull +request or issue. The WG should serve as the final arbiter where +required. + +For the current list of Collaborators, see the project +[README.md](./README.md#members). + +### WG Membership + +WG seats are not time-limited. There is no fixed size of the WG. +However, the expected target is between 6 and 12, to ensure adequate +coverage of important areas of expertise, balanced with the ability to +make decisions efficiently. + +There is no specific set of requirements or qualifications for WG +membership beyond these rules. + +The WG may add additional members to the WG by unanimous consensus. + +A WG member may be removed from the WG by voluntary resignation, or by +unanimous consensus of all other WG members. + +Changes to WG membership should be posted in the agenda, and may be +suggested as any other agenda item (see "WG Meetings" below). + +If an addition or removal is proposed during a meeting, and the full +WG is not in attendance to participate, then the addition or removal +is added to the agenda for the subsequent meeting. This is to ensure +that all members are given the opportunity to participate in all +membership decisions. If a WG member is unable to attend a meeting +where a planned membership decision is being made, then their consent +is assumed. + +No more than 1/3 of the WG members may be affiliated with the same +employer. If removal or resignation of a WG member, or a change of +employment by a WG member, creates a situation where more than 1/3 of +the WG membership shares an employer, then the situation must be +immediately remedied by the resignation or removal of one or more WG +members affiliated with the over-represented employer(s). + +### WG Meetings + +The WG meets occasionally on a Google Hangout On Air. A designated moderator +approved by the WG runs the meeting. Each meeting should be +published to YouTube. + +Items are added to the WG agenda that are considered contentious or +are modifications of governance, contribution policy, WG membership, +or release process. + +The intention of the agenda is not to approve or review all patches; +that should happen continuously on GitHub and be handled by the larger +group of Collaborators. + +Any community member or contributor can ask that something be added to +the next meeting's agenda by logging a GitHub Issue. Any Collaborator, +WG member or the moderator can add the item to the agenda by adding +the ***WG-agenda*** tag to the issue. + +Prior to each WG meeting the moderator will share the Agenda with +members of the WG. WG members can add any items they like to the +agenda at the beginning of each meeting. The moderator and the WG +cannot veto or remove items. + +The WG may invite persons or representatives from certain projects to +participate in a non-voting capacity. + +The moderator is responsible for summarizing the discussion of each +agenda item and sends it as a pull request after the meeting. + +### Consensus Seeking Process + +The WG follows a +[Consensus +Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) +decision-making model. + +When an agenda item has appeared to reach a consensus the moderator +will ask "Does anyone object?" as a final call for dissent from the +consensus. + +If an agenda item cannot reach a consensus a WG member can call for +either a closing vote or a vote to table the issue to the next +meeting. The call for a vote must be seconded by a majority of the WG +or else the discussion will continue. Simple majority wins. + +Note that changes to WG membership require a majority consensus. See +"WG Membership" above. diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/LICENSE b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..2873b3b2e595072e66330369d83e8af46655970c --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/LICENSE @@ -0,0 +1,47 @@ +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/README.md b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/README.md new file mode 100644 index 0000000000000000000000000000000000000000..f1c5a9314f17aa36e8b5adaa6bf66786448aa6b0 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/README.md @@ -0,0 +1,58 @@ +# readable-stream + +***Node-core v8.17.0 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) + + +[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) +[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) + + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) + +```bash +npm install --save readable-stream +``` + +***Node-core streams for userland*** + +This package is a mirror of the Streams2 and Streams3 implementations in +Node-core. + +Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.17.0/docs/api/stream.html). + +If you want to guarantee a stable streams base, regardless of what version of +Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). + +As of version 2.0.0 **readable-stream** uses semantic versioning. + +# Streams Working Group + +`readable-stream` is maintained by the Streams Working Group, which +oversees the development and maintenance of the Streams API within +Node.js. The responsibilities of the Streams Working Group include: + +* Addressing stream issues on the Node.js issue tracker. +* Authoring and editing stream documentation within the Node.js project. +* Reviewing changes to stream subclasses within the Node.js project. +* Redirecting changes to streams from the Node.js project to this + project. +* Assisting in the implementation of stream providers within Node.js. +* Recommending versions of `readable-stream` to be included in Node.js. +* Messaging about the future of streams to give the community advance + notice of changes. + + +## Team Members + +* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> + - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B +* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> + - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 +* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> + - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D +* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> +* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> +* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> +* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> + - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E +* **Irina Shestak** ([@lrlna](https://github.com/lrlna)) <shestak.irina@gmail.com> diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md new file mode 100644 index 0000000000000000000000000000000000000000..83275f192e4077d32942525aaf510fa449a7c417 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md @@ -0,0 +1,60 @@ +# streams WG Meeting 2015-01-30 + +## Links + +* **Google Hangouts Video**: http://www.youtube.com/watch?v=I9nDOSGfwZg +* **GitHub Issue**: https://github.com/iojs/readable-stream/issues/106 +* **Original Minutes Google Doc**: https://docs.google.com/document/d/17aTgLnjMXIrfjgNaTUnHQO7m3xgzHR2VXBTmi03Qii4/ + +## Agenda + +Extracted from https://github.com/iojs/readable-stream/labels/wg-agenda prior to meeting. + +* adopt a charter [#105](https://github.com/iojs/readable-stream/issues/105) +* release and versioning strategy [#101](https://github.com/iojs/readable-stream/issues/101) +* simpler stream creation [#102](https://github.com/iojs/readable-stream/issues/102) +* proposal: deprecate implicit flowing of streams [#99](https://github.com/iojs/readable-stream/issues/99) + +## Minutes + +### adopt a charter + +* group: +1's all around + +### What versioning scheme should be adopted? +* group: +1’s 3.0.0 +* domenic+group: pulling in patches from other sources where appropriate +* mikeal: version independently, suggesting versions for io.js +* mikeal+domenic: work with TC to notify in advance of changes +simpler stream creation + +### streamline creation of streams +* sam: streamline creation of streams +* domenic: nice simple solution posted + but, we lose the opportunity to change the model + may not be backwards incompatible (double check keys) + + **action item:** domenic will check + +### remove implicit flowing of streams on(‘data’) +* add isFlowing / isPaused +* mikeal: worrying that we’re documenting polyfill methods – confuses users +* domenic: more reflective API is probably good, with warning labels for users +* new section for mad scientists (reflective stream access) +* calvin: name the “third state” +* mikeal: maybe borrow the name from whatwg? +* domenic: we’re missing the “third state” +* consensus: kind of difficult to name the third state +* mikeal: figure out differences in states / compat +* mathias: always flow on data – eliminates third state + * explore what it breaks + +**action items:** +* ask isaac for ability to list packages by what public io.js APIs they use (esp. Stream) +* ask rod/build for infrastructure +* **chris**: explore the “flow on data” approach +* add isPaused/isFlowing +* add new docs section +* move isPaused to that section + + diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/duplex-browser.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/duplex-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..f8b2db83dbe733d7720264a9840202e29ebeffbd --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/duplex-browser.js @@ -0,0 +1 @@ +module.exports = require('./lib/_stream_duplex.js'); diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/duplex.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/duplex.js new file mode 100644 index 0000000000000000000000000000000000000000..46924cbfdf53871b574d3f6f5b4bc6064b824aaa --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/duplex.js @@ -0,0 +1 @@ +module.exports = require('./readable').Duplex diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_duplex.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_duplex.js new file mode 100644 index 0000000000000000000000000000000000000000..57003c32d256c0a1fe20dadd279abef2d463074f --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_duplex.js @@ -0,0 +1,131 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + pna.nextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + + pna.nextTick(cb, err); +}; \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_passthrough.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_passthrough.js new file mode 100644 index 0000000000000000000000000000000000000000..612edb4d8b443fabc4ddac619da420bad62fc5b0 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_passthrough.js @@ -0,0 +1,47 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_readable.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_readable.js new file mode 100644 index 0000000000000000000000000000000000000000..3af95cb2dbf1e9fa93d261b030b0b090df507ff7 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_readable.js @@ -0,0 +1,1019 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +module.exports = Readable; + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = require('./internal/streams/BufferList'); +var destroyImpl = require('./internal/streams/destroy'); +var StringDecoder; + +util.inherits(Readable, Stream); + +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} + +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); +} + +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); + +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; + +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + + return needMoreData(state); +} + +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { hasUnpiped: false }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, { hasUnpiped: false }); + }return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this, unpipeInfo); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + + var state = this._readableState; + var paused = false; + + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + + _this.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return this; +}; + +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._readableState.highWaterMark; + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_transform.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_transform.js new file mode 100644 index 0000000000000000000000000000000000000000..fcfc105af8e9a124bea4b82011f6cb7d6d2a7158 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_transform.js @@ -0,0 +1,214 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + + cb(er); + + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} + +function prefinish() { + var _this = this; + + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this2.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_writable.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_writable.js new file mode 100644 index 0000000000000000000000000000000000000000..e1e897ff3b098a263aa105d5704dbadce42d5862 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/_stream_writable.js @@ -0,0 +1,685 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +var destroyImpl = require('./internal/streams/destroy'); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + pna.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} + +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + // reuse the free corkReq. + state.corkedRequestsFree.next = corkReq; +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); + +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/BufferList.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/BufferList.js new file mode 100644 index 0000000000000000000000000000000000000000..5e080976c3932d544595c14704a7943a9fd9f282 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/BufferList.js @@ -0,0 +1,78 @@ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Buffer = require('safe-buffer').Buffer; +var util = require('util'); + +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} + +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function push(v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function unshift(v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + + return BufferList; +}(); + +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ length: this.length }); + return this.constructor.name + ' ' + obj; + }; +} \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/destroy.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/destroy.js new file mode 100644 index 0000000000000000000000000000000000000000..85a821407fce47a9c8f9521ca92538d67d0857ad --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/destroy.js @@ -0,0 +1,84 @@ +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + pna.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, this, err); + } + } + + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + pna.nextTick(emitErrorNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, _this, err); + } + } else if (cb) { + cb(err); + } + }); + + return this; +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/stream-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..9332a3fdae7060505c0a081614e697fa6cb56dc0 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/stream-browser.js @@ -0,0 +1 @@ +module.exports = require('events').EventEmitter; diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/stream.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/stream.js new file mode 100644 index 0000000000000000000000000000000000000000..ce2ad5b6ee57f4778a1f4838f7970093c7941c1c --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/lib/internal/streams/stream.js @@ -0,0 +1 @@ +module.exports = require('stream'); diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/package.json b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/package.json new file mode 100644 index 0000000000000000000000000000000000000000..514c178e92045e082de6358f427d981f5b74d3d9 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/package.json @@ -0,0 +1,52 @@ +{ + "name": "readable-stream", + "version": "2.3.8", + "description": "Streams3, a user-land copy of the stream library from Node.js", + "main": "readable.js", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "devDependencies": { + "assert": "^1.4.0", + "babel-polyfill": "^6.9.1", + "buffer": "^4.9.0", + "lolex": "^2.3.2", + "nyc": "^6.4.0", + "tap": "^0.7.0", + "tape": "^4.8.0" + }, + "scripts": { + "test": "tap test/parallel/*.js test/ours/*.js && node test/verify-dependencies.js", + "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js", + "cover": "nyc npm test", + "report": "nyc report --reporter=lcov" + }, + "repository": { + "type": "git", + "url": "git://github.com/nodejs/readable-stream" + }, + "keywords": [ + "readable", + "stream", + "pipe" + ], + "browser": { + "util": false, + "./readable.js": "./readable-browser.js", + "./writable.js": "./writable-browser.js", + "./duplex.js": "./duplex-browser.js", + "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" + }, + "nyc": { + "include": [ + "lib/**.js" + ] + }, + "license": "MIT" +} diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/passthrough.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/passthrough.js new file mode 100644 index 0000000000000000000000000000000000000000..ffd791d7ff275a58d537ea89153175a23edee5fb --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/passthrough.js @@ -0,0 +1 @@ +module.exports = require('./readable').PassThrough diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/readable-browser.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/readable-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..e50372592ee6c63a7fc43cb912dd9639e3fa7eb1 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/readable-browser.js @@ -0,0 +1,7 @@ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/readable.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/readable.js new file mode 100644 index 0000000000000000000000000000000000000000..ec89ec53306497adae0014c4a8aba6d51d1aff6c --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/readable.js @@ -0,0 +1,19 @@ +var Stream = require('stream'); +if (process.env.READABLE_STREAM === 'disable' && Stream) { + module.exports = Stream; + exports = module.exports = Stream.Readable; + exports.Readable = Stream.Readable; + exports.Writable = Stream.Writable; + exports.Duplex = Stream.Duplex; + exports.Transform = Stream.Transform; + exports.PassThrough = Stream.PassThrough; + exports.Stream = Stream; +} else { + exports = module.exports = require('./lib/_stream_readable.js'); + exports.Stream = Stream || exports; + exports.Readable = exports; + exports.Writable = require('./lib/_stream_writable.js'); + exports.Duplex = require('./lib/_stream_duplex.js'); + exports.Transform = require('./lib/_stream_transform.js'); + exports.PassThrough = require('./lib/_stream_passthrough.js'); +} diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/transform.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/transform.js new file mode 100644 index 0000000000000000000000000000000000000000..b1baba26da03dc8bbc5d9da33cd55f3f88c99115 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/transform.js @@ -0,0 +1 @@ +module.exports = require('./readable').Transform diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/writable-browser.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/writable-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..ebdde6a85dcb19bfdbfc2ec2e34b13a54c0e5bf0 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/writable-browser.js @@ -0,0 +1 @@ +module.exports = require('./lib/_stream_writable.js'); diff --git a/node_backend/node_modules/archiver-utils/node_modules/readable-stream/writable.js b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/writable.js new file mode 100644 index 0000000000000000000000000000000000000000..3211a6f80d1abc9db7099cd1e8fa200ad2ccfdbe --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/readable-stream/writable.js @@ -0,0 +1,8 @@ +var Stream = require("stream") +var Writable = require("./lib/_stream_writable.js") + +if (process.env.READABLE_STREAM === 'disable') { + module.exports = Stream && Stream.Writable || Writable +} else { + module.exports = Writable +} diff --git a/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/LICENSE b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..0c068ceecbd48fc4e8279e6451793fec2bf12178 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/README.md b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e9a81afd0406f030ba21169f0c7a1dba70b3a93b --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/README.md @@ -0,0 +1,584 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg +[downloads-url]: https://npmjs.org/package/safe-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Safer Node.js Buffer API + +**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** + +**Uses the built-in implementation when available.** + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/index.d.ts b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e9fed809a5ab515658d6e71f7ba5f631be769be4 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/index.d.ts @@ -0,0 +1,187 @@ +declare module "safe-buffer" { + export class Buffer { + length: number + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + constructor (str: string, encoding?: string); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + constructor (size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + constructor (arrayBuffer: ArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: any[]); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + constructor (buffer: Buffer); + prototype: Buffer; + /** + * Allocates a new Buffer using an {array} of octets. + * + * @param array + */ + static from(array: any[]): Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() + * @param byteOffset + * @param length + */ + static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Copies the passed {buffer} data onto a new Buffer instance. + * + * @param buffer + */ + static from(buffer: Buffer): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + * + * @param str + */ + static from(str: string, encoding?: string): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Buffer, buf2: Buffer): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; + } +} \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/index.js b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/index.js new file mode 100644 index 0000000000000000000000000000000000000000..22438dabbbceef6954a1a7a68038f8c440a90c79 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/index.js @@ -0,0 +1,62 @@ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} diff --git a/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/package.json b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/package.json new file mode 100644 index 0000000000000000000000000000000000000000..623fbc3f6b0c480fb0b3257fc666b1db827378bf --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/safe-buffer/package.json @@ -0,0 +1,37 @@ +{ + "name": "safe-buffer", + "description": "Safer Node.js Buffer API", + "version": "5.1.2", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/safe-buffer/issues" + }, + "devDependencies": { + "standard": "*", + "tape": "^4.0.0" + }, + "homepage": "https://github.com/feross/safe-buffer", + "keywords": [ + "buffer", + "buffer allocate", + "node security", + "safe", + "safe-buffer", + "security", + "uninitialized" + ], + "license": "MIT", + "main": "index.js", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "git://github.com/feross/safe-buffer.git" + }, + "scripts": { + "test": "standard && tape test/*.js" + } +} diff --git a/node_backend/node_modules/archiver-utils/node_modules/string_decoder/.travis.yml b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..3347a7254650582da5339323466f84fe079fc270 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/.travis.yml @@ -0,0 +1,50 @@ +sudo: false +language: node_js +before_install: + - npm install -g npm@2 + - test $NPM_LEGACY && npm install -g npm@latest-3 || npm install npm -g +notifications: + email: false +matrix: + fast_finish: true + include: + - node_js: '0.8' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.10' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.11' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.12' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 1 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 2 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 3 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 4 + env: TASK=test + - node_js: 5 + env: TASK=test + - node_js: 6 + env: TASK=test + - node_js: 7 + env: TASK=test + - node_js: 8 + env: TASK=test + - node_js: 9 + env: TASK=test diff --git a/node_backend/node_modules/archiver-utils/node_modules/string_decoder/LICENSE b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..778edb20730ef48c01002248f4d51e7752c13487 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/LICENSE @@ -0,0 +1,48 @@ +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + diff --git a/node_backend/node_modules/archiver-utils/node_modules/string_decoder/README.md b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5fd58315ed588027742dde690a31cd0a2610649d --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/README.md @@ -0,0 +1,47 @@ +# string_decoder + +***Node-core v8.9.4 string_decoder for userland*** + + +[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/) +[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/) + + +```bash +npm install --save string_decoder +``` + +***Node-core string_decoder for userland*** + +This package is a mirror of the string_decoder implementation in Node-core. + +Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.9.4/docs/api/). + +As of version 1.0.0 **string_decoder** uses semantic versioning. + +## Previous versions + +Previous version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. + +## Update + +The *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version. + +## Streams Working Group + +`string_decoder` is maintained by the Streams Working Group, which +oversees the development and maintenance of the Streams API within +Node.js. The responsibilities of the Streams Working Group include: + +* Addressing stream issues on the Node.js issue tracker. +* Authoring and editing stream documentation within the Node.js project. +* Reviewing changes to stream subclasses within the Node.js project. +* Redirecting changes to streams from the Node.js project to this + project. +* Assisting in the implementation of stream providers within Node.js. +* Recommending versions of `readable-stream` to be included in Node.js. +* Messaging about the future of streams to give the community advance + notice of changes. + +See [readable-stream](https://github.com/nodejs/readable-stream) for +more details. diff --git a/node_backend/node_modules/archiver-utils/node_modules/string_decoder/lib/string_decoder.js b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/lib/string_decoder.js new file mode 100644 index 0000000000000000000000000000000000000000..2e89e63f7933e42b8ba543ede35d2a8fa3e4f100 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/lib/string_decoder.js @@ -0,0 +1,296 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ + +var Buffer = require('safe-buffer').Buffer; +/**/ + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. If an invalid byte is detected, -2 is returned. +function utf8CheckByte(byte) { + if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; + return byte >> 6 === 0x02 ? -1 : -2; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character is added when ending on a partial +// character. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} + +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} + +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} \ No newline at end of file diff --git a/node_backend/node_modules/archiver-utils/node_modules/string_decoder/package.json b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/package.json new file mode 100644 index 0000000000000000000000000000000000000000..518c3eb9fb1ffbf72bfdf6fed252117b73164673 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/node_modules/string_decoder/package.json @@ -0,0 +1,31 @@ +{ + "name": "string_decoder", + "version": "1.1.1", + "description": "The string_decoder module from Node core", + "main": "lib/string_decoder.js", + "dependencies": { + "safe-buffer": "~5.1.0" + }, + "devDependencies": { + "babel-polyfill": "^6.23.0", + "core-util-is": "^1.0.2", + "inherits": "^2.0.3", + "tap": "~0.4.8" + }, + "scripts": { + "test": "tap test/parallel/*.js && node test/verify-dependencies", + "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/nodejs/string_decoder.git" + }, + "homepage": "https://github.com/nodejs/string_decoder", + "keywords": [ + "string", + "decoder", + "browser", + "browserify" + ], + "license": "MIT" +} diff --git a/node_backend/node_modules/archiver-utils/package.json b/node_backend/node_modules/archiver-utils/package.json new file mode 100644 index 0000000000000000000000000000000000000000..1582f18546974b3fa0186fd04b42b39403957494 --- /dev/null +++ b/node_backend/node_modules/archiver-utils/package.json @@ -0,0 +1,54 @@ +{ + "name": "archiver-utils", + "version": "2.1.0", + "license": "MIT", + "description": "utility functions for archiver", + "homepage": "https://github.com/archiverjs/archiver-utils#readme", + "author": { + "name": "Chris Talkington", + "url": "http://christalkington.com/" + }, + "repository": { + "type": "git", + "url": "https://github.com/archiverjs/archiver-utils.git" + }, + "bugs": { + "url": "https://github.com/archiverjs/archiver-utils/issues" + }, + "keywords": [ + "archiver", + "utils" + ], + "main": "index.js", + "files": [ + "index.js", + "file.js" + ], + "engines": { + "node": ">= 6" + }, + "scripts": { + "test": "mocha --reporter dot" + }, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "devDependencies": { + "chai": "^4.2.0", + "mkdirp": "^0.5.0", + "mocha": "^5.0.0", + "rimraf": "^2.6.3" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/" + } +} diff --git a/node_backend/node_modules/archiver/CHANGELOG.md b/node_backend/node_modules/archiver/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..eac7b6e27758d132f7b7432cbf4da9c7e71517d2 --- /dev/null +++ b/node_backend/node_modules/archiver/CHANGELOG.md @@ -0,0 +1,246 @@ +## Changelog + +**5.3.2** - _August 16, 2023_ — [Diff](https://github.com/archiverjs/node-archiver/compare/5.3.1...5.3.2) + +Maintenance + +- test: run tests against node 18 @yharaskrik (#637) + +Dependency updates + +- Bump release-drafter/release-drafter from 5.19.0 to 5.23.0 @dependabot (#652) +- Bump actions/setup-node from 3.1.1 to 3.6.0 @dependabot (#638) +- Bump chai from 4.3.6 to 4.3.7 @dependabot (#627) +- Bump mkdirp from 1.0.4 to 2.1.5 @dependabot (#657) +- Bump rimraf from 3.0.2 to 4.3.1 @dependabot (#660) +- Bump tar from 6.1.11 to 6.1.13 @dependabot (#631) +- Bump readdir-glob from 1.1.1 to 1.1.2 @dependabot (#604) +- Bump minimatch from 3.0.4 to 3.1.2 @dependabot (#669) +- Bump async from 3.2.3 to 3.2.4 @dependabot (#596) + +**5.3.1** - _April 15, 2022_ — [Diff](https://github.com/archiverjs/node-archiver/compare/5.3.0...5.3.1) + +Maintenance + +- Test against node v16 @ctalkington (#545) + +Dependency updates + +- Bump mocha from 8.3.0 to 9.0.2 @dependabot (#526) +- Bump actions/setup-node from 2.1.5 to 2.2.0 @dependabot (#525) +- Bump jsdoc from 3.6.6 to 3.6.7 @dependabot (#516) +- Bump lodash from 4.17.19 to 4.17.21 @dependabot (#514) +- Bump chai from 4.3.3 to 4.3.4 @dependabot (#508) +- Bump actions/setup-node from 2.2.0 to 2.3.0 @dependabot (#528) +- Bump mocha from 9.0.2 to 9.1.0 @dependabot (#544) +- Bump async from 3.2.0 to 3.2.1 @dependabot (#538) +- Bump actions/checkout from 2.3.4 to 3.0.1 @dependabot (#586) +- Bump actions/setup-node from 2.3.0 to 3.1.1 @dependabot (#585) +- Bump jsdoc from 3.6.7 to 3.6.10 @dependabot (#566) +- Bump async from 3.2.1 to 3.2.3 @dependabot (#562) +- Bump mocha from 9.1.0 to 9.2.2 @dependabot (#580) +- Bump tar from 6.1.0 to 6.1.11 @dependabot (#546) +- Bump chai from 4.3.4 to 4.3.6 @dependabot (#568) + + +**5.3.0** - _March 7, 2021_ — [Diff](https://github.com/archiverjs/node-archiver/compare/5.2.0...5.3.0) + +Maintenance + +- Bump chai from 4.3.0 to 4.3.3 (#505) +- Bump zip-stream from 4.0.4 to 4.1.0 (#504) +- Bump mocha from 8.2.1 to 8.3.0 (#499) +- Bump actions/setup-node from v2.1.4 to v2.1.5 (#500) +- Bump tar from 6.0.5 to 6.1.0 (#487) +- Bump chai from 4.2.0 to 4.3.0 (#496) +- Bump tar-stream from 2.1.4 to 2.2.0 (#485) +- Bump actions/setup-node from v2.1.3 to v2.1.4 (#483) +- Update progress example (#384) + +**5.2.0** - _January 6, 2021_ — [Diff](https://github.com/archiverjs/node-archiver/compare/5.1.0...5.2.0) + +Features + +- Finalize should always return a promise (#480) + +Maintenance + +- Fix finalize method jsdoc return type (#482) +- Bump actions/setup-node from v2.1.2 to v2.1.3 (#479) +- Update README.md (#478) + +**5.1.0** - _November 19, 2020_ — [Diff](https://github.com/archiverjs/node-archiver/compare/5.0.2...5.1.0) + +Features + +- Add mode parameter to symlink (#469) +- Add isRegisteredFormat method (#462) + +Bug Fixes + +- Fix glob() `options` parameter's link (#453) + +Maintenance + +- Bump archiver-jsdoc-theme from 1.1.1 to 1.1.3 (#472) +- Bump zip-stream from 4.0.2 to 4.0.4 (#473) +- Bump jsdoc from 3.6.5 to 3.6.6 (#452) +- Bump readdir-glob from 1.0.0 to 1.1.1 (#460) +- Bump mocha from 8.1.3 to 8.2.1 (#465) +- Bump actions/setup-node from v2.1.1 to v2.1.2 (#459) +- Bump actions/checkout from v2.3.2 to v2.3.4 (#466) + +**5.0.2** - _September 11, 2020_ — [Diff](https://github.com/archiverjs/node-archiver/compare/5.0.1...5.0.2) + +Maintenance + +* Force bump tar-stream from 2.1.2 to 2.1.4 (#450) + +**5.0.1** - _September 10, 2020_ — [Diff](https://github.com/archiverjs/node-archiver/compare/5.0.0...5.0.1) + +Maintenance + +- Bump tar-stream from 2.1.3 to 2.1.4 (#448) +- Update docs (#441) +- Bump mocha from 8.1.1 to 8.1.3 (#444) +- Bump tar from 6.0.2 to 6.0.5 (#439) +- Bump mocha from 8.1.0 to 8.1.1 (#437) +- Bump actions/checkout from v2.3.1 to v2.3.2 (#438) +- Bump mocha from 8.0.1 to 8.1.0 (#436) +- Bump actions/setup-node from v2.1.0 to v2.1.1 (#432) +- Bump jsdoc from 3.6.4 to 3.6.5 (#434) + +**5.0.0** - _July 22, 2020_ — [Diff](https://github.com/archiverjs/node-archiver/compare/4.0.2...5.0.0) + +* breaking: absolute path glob patterns are no longer supported: use cwd option instead. +* Replaced glob with readdir-glob to be memory efficient (#433) @Yqnn +* Bump zip-stream from 4.0.0 to 4.0.2 (#431) @dependabot +* Bump zip-stream from 3.0.1 to 4.0.0 (#430) @dependabot +* Bump mocha from 6.2.3 to 8.0.1 (#424) @dependabot +* Bump tar from 4.4.13 to 6.0.2 (#426) @dependabot +* Bump tar-stream from 2.1.2 to 2.1.3 (#427) @dependabot +* Bump rimraf from 2.7.1 to 3.0.2 (#425) @dependabot +* Bump actions/setup-node from v1 to v2.1.0 (#428) @dependabot +* Bump actions/checkout from v1 to v2.3.1 (#429) @dependabot +* Bump lodash from 4.17.15 to 4.17.19 (#423) @dependabot + +**4.0.2** - _July 11, 2020_ — [Diff](https://github.com/archiverjs/node-archiver/compare/4.0.1...4.0.2) + +- update to async@^3.2.0 (#420) + +**4.0.1** - _April 14, 2020_ — [Diff](https://github.com/archiverjs/node-archiver/compare/4.0.0...4.0.1) + +- update to zip-stream@^3.0.1 + +**4.0.0** - _April 14, 2020_ — [Diff](https://github.com/archiverjs/node-archiver/compare/3.1.1...4.0.0) + +- breaking: slowly catch up with node LTS, remove support for versions under 8. +- update multiple deps. +- fix for a hang with _statQueue (#388) + +**3.1.1** - _August 2, 2019_ — [Diff](https://github.com/archiverjs/node-archiver/compare/3.1.0...3.1.1) + +- update zip-stream to v2.1.2 + +**3.1.0** - _August 2, 2019_ — [Diff](https://github.com/archiverjs/node-archiver/compare/3.0.3...3.1.0) + +- update zip-stream to v2.1.0 + +**3.0.3** - _July 19, 2019_ — [Diff](https://github.com/archiverjs/node-archiver/compare/3.0.2...3.0.3) + +- test: now targeting node v12 +- other: update zip-stream@2.0.0 + +**3.0.2** - _July 19, 2019_ — [Diff](https://github.com/archiverjs/node-archiver/compare/3.0.1...3.0.2) + +- other: update dependencies + +**3.0.1** - _July 19, 2019_ — [Diff](https://github.com/archiverjs/node-archiver/compare/3.0.0...3.0.1) + +- other: update dependencies +- docs: now deployed using netlify + +**3.0.0** - _August 22, 2018_ — [Diff](https://github.com/archiverjs/node-archiver/compare/2.1.1...3.0.0) + +- breaking: follow node LTS, remove support for versions under 6. (#339) +- bugfix: use stats in tar.js and core.js (#326) +- other: update to archiver-utils@2 and zip-stream@2 +- other: remove lodash npm module usage (#335, #339) +- other: Avoid using deprecated Buffer constructor (#312) +- other: Remove unnecessary return and fix indentation (#297) +- test: now targeting node v10 (#320) + +**2.1.1** — _January 10, 2018_ — [Diff](https://github.com/archiverjs/node-archiver/compare/2.1.0...2.1.1) + +- bugfix: fix relative symlink paths (#293) +- other: coding style fixes (#294) + +**2.1.0** — _October 12, 2017_ — [Diff](https://github.com/archiverjs/node-archiver/compare/2.0.3...2.1.0) + +- refactor: `directory` now uses glob behind the scenes. should fix some directory recursion issues. (#267, #275) +- docs: more info in quick start. (#284) + +**2.0.3** — _August 25, 2017_ — [Diff](https://github.com/archiverjs/node-archiver/compare/2.0.2...2.0.3) + +- bugfix: revert #261 due to potential issues with editing entryData in special cases. +- bugfix: add var to entryData in glob callback (#273) + +**2.0.2** — _August 25, 2017_ — [Diff](https://github.com/archiverjs/node-archiver/compare/2.0.1...2.0.2) + +- docs: fix changelog date. + +**2.0.1** — _August 25, 2017_ — [Diff](https://github.com/archiverjs/node-archiver/compare/2.0.0...2.0.1) + +- bugfix: add const to entryData in glob callback (#261) +- other: coding style fixes (#263) + +**2.0.0** — _July 5, 2017_ — [Diff](https://github.com/archiverjs/node-archiver/compare/1.3.0...2.0.0) + +- feature: support for symlinks. (#228) +- feature: support for promises on `finalize`. (#248) +- feature: addition of `symlink` method for programmatically creating symlinks within an archive. +- change: emit `warning` instead of `error` when stat fails and the process can still continue. +- change: errors and warnings now contain extended data (where available) and have standardized error codes (#256) +- change: removal of deprecated `bulk` functionality. (#249) +- change: removal of internal `_entries` property in favor of `progress` event. (#247) +- change: support for node v4.0+ only. node v0.10 and v0.12 support has been dropped. (#241) + +**1.3.0** — _December 13, 2016_ — [Diff](https://github.com/archiverjs/node-archiver/compare/1.2.0...1.3.0) + +- improve `directory` and `glob` methods to use events rather than callbacks. (#203) +- fix bulk warning spam (#208) +- updated mocha (#205) + +**1.2.0** — _November 2, 2016_ — [Diff](https://github.com/archiverjs/node-archiver/compare/1.1.0...1.2.0) + +- Add a `process.emitWarning` for `deprecated` (#202) + +**1.1.0** — _August 29, 2016_ — [Diff](https://github.com/archiverjs/node-archiver/compare/1.0.1...1.1.0) + +- minor doc fixes. +- bump deps to ensure latest versions are used. + +**1.0.1** — _July 27, 2016_ — [Diff](https://github.com/archiverjs/node-archiver/compare/1.0.0...1.0.1) + +- minor doc fixes. +- dependencies upgraded. + +**1.0.0** — _April 5, 2016_ — [Diff](https://github.com/archiverjs/node-archiver/compare/0.21.0...1.0.0) + +- version unification across many archiver packages. +- dependencies upgraded and now using semver caret (^). + +**0.21.0** — _December 21, 2015_ — [Diff](https://github.com/archiverjs/node-archiver/compare/0.20.0...0.21.0) + +- core: add support for `entry.prefix`. update some internals to use it. +- core(glob): when setting `options.cwd` get an absolute path to the file and use the relative path for `entry.name`. #173 +- core(bulk): soft-deprecation of `bulk` feature. will remain for time being with no new features or support. +- docs: initial jsdoc for core. http://archiverjs.com/docs +- tests: restructure a bit. + +**0.20.0** — _November 30, 2015_ — [Diff](https://github.com/archiverjs/node-archiver/compare/0.19.0...0.20.0) + +- simpler path normalization as path.join was a bit restrictive. #162 +- move utils to separate module to DRY. + +[Release Archive](https://github.com/archiverjs/node-archiver/releases) diff --git a/node_backend/node_modules/archiver/LICENSE b/node_backend/node_modules/archiver/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..88caf8710bef80b7fcd3801e0ff0fdaaa1d75c86 --- /dev/null +++ b/node_backend/node_modules/archiver/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2012-2014 Chris Talkington, contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_backend/node_modules/archiver/README.md b/node_backend/node_modules/archiver/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4b78e862f66ed0b08402a4e75d0d3372489fc96c --- /dev/null +++ b/node_backend/node_modules/archiver/README.md @@ -0,0 +1,94 @@ +# Archiver + +A streaming interface for archive generation + +Visit the [API documentation](https://www.archiverjs.com/) for a list of all methods available. + +## Install + +```bash +npm install archiver --save +``` + +## Quick Start + +```js +// require modules +const fs = require('fs'); +const archiver = require('archiver'); + +// create a file to stream archive data to. +const output = fs.createWriteStream(__dirname + '/example.zip'); +const archive = archiver('zip', { + zlib: { level: 9 } // Sets the compression level. +}); + +// listen for all archive data to be written +// 'close' event is fired only when a file descriptor is involved +output.on('close', function() { + console.log(archive.pointer() + ' total bytes'); + console.log('archiver has been finalized and the output file descriptor has closed.'); +}); + +// This event is fired when the data source is drained no matter what was the data source. +// It is not part of this library but rather from the NodeJS Stream API. +// @see: https://nodejs.org/api/stream.html#stream_event_end +output.on('end', function() { + console.log('Data has been drained'); +}); + +// good practice to catch warnings (ie stat failures and other non-blocking errors) +archive.on('warning', function(err) { + if (err.code === 'ENOENT') { + // log warning + } else { + // throw error + throw err; + } +}); + +// good practice to catch this error explicitly +archive.on('error', function(err) { + throw err; +}); + +// pipe archive data to the file +archive.pipe(output); + +// append a file from stream +const file1 = __dirname + '/file1.txt'; +archive.append(fs.createReadStream(file1), { name: 'file1.txt' }); + +// append a file from string +archive.append('string cheese!', { name: 'file2.txt' }); + +// append a file from buffer +const buffer3 = Buffer.from('buff it!'); +archive.append(buffer3, { name: 'file3.txt' }); + +// append a file +archive.file('file1.txt', { name: 'file4.txt' }); + +// append files from a sub-directory and naming it `new-subdir` within the archive +archive.directory('subdir/', 'new-subdir'); + +// append files from a sub-directory, putting its contents at the root of archive +archive.directory('subdir/', false); + +// append files from a glob pattern +archive.glob('file*.txt', {cwd:__dirname}); + +// finalize the archive (ie we are done appending files but streams have to finish yet) +// 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand +archive.finalize(); +``` + +## Formats + +Archiver ships with out of the box support for TAR and ZIP archives. + +You can register additional formats with `registerFormat`. + +You can check if format already exists before to register a new one with `isRegisteredFormat`. + +_Formats will be changing in the future to implement a middleware approach._ diff --git a/node_backend/node_modules/archiver/index.js b/node_backend/node_modules/archiver/index.js new file mode 100644 index 0000000000000000000000000000000000000000..0996daefb22b5c0ea2f51e11358f218dab36ef7e --- /dev/null +++ b/node_backend/node_modules/archiver/index.js @@ -0,0 +1,84 @@ +/** + * Archiver Vending + * + * @ignore + * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE} + * @copyright (c) 2012-2014 Chris Talkington, contributors. + */ +var Archiver = require('./lib/core'); + +var formats = {}; + +/** + * Dispenses a new Archiver instance. + * + * @constructor + * @param {String} format The archive format to use. + * @param {Object} options See [Archiver]{@link Archiver} + * @return {Archiver} + */ +var vending = function(format, options) { + return vending.create(format, options); +}; + +/** + * Creates a new Archiver instance. + * + * @param {String} format The archive format to use. + * @param {Object} options See [Archiver]{@link Archiver} + * @return {Archiver} + */ +vending.create = function(format, options) { + if (formats[format]) { + var instance = new Archiver(format, options); + instance.setFormat(format); + instance.setModule(new formats[format](options)); + + return instance; + } else { + throw new Error('create(' + format + '): format not registered'); + } +}; + +/** + * Registers a format for use with archiver. + * + * @param {String} format The name of the format. + * @param {Function} module The function for archiver to interact with. + * @return void + */ +vending.registerFormat = function(format, module) { + if (formats[format]) { + throw new Error('register(' + format + '): format already registered'); + } + + if (typeof module !== 'function') { + throw new Error('register(' + format + '): format module invalid'); + } + + if (typeof module.prototype.append !== 'function' || typeof module.prototype.finalize !== 'function') { + throw new Error('register(' + format + '): format module missing methods'); + } + + formats[format] = module; +}; + +/** + * Check if the format is already registered. + * + * @param {String} format the name of the format. + * @return boolean + */ +vending.isRegisteredFormat = function (format) { + if (formats[format]) { + return true; + } + + return false; +}; + +vending.registerFormat('zip', require('./lib/plugins/zip')); +vending.registerFormat('tar', require('./lib/plugins/tar')); +vending.registerFormat('json', require('./lib/plugins/json')); + +module.exports = vending; \ No newline at end of file diff --git a/node_backend/node_modules/archiver/lib/core.js b/node_backend/node_modules/archiver/lib/core.js new file mode 100644 index 0000000000000000000000000000000000000000..7c0a74d7ff29266f1a492f41129bb3cf1adb0efd --- /dev/null +++ b/node_backend/node_modules/archiver/lib/core.js @@ -0,0 +1,974 @@ +/** + * Archiver Core + * + * @ignore + * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE} + * @copyright (c) 2012-2014 Chris Talkington, contributors. + */ +var fs = require('fs'); +var glob = require('readdir-glob'); +var async = require('async'); +var path = require('path'); +var util = require('archiver-utils'); + +var inherits = require('util').inherits; +var ArchiverError = require('./error'); +var Transform = require('readable-stream').Transform; + +var win32 = process.platform === 'win32'; + +/** + * @constructor + * @param {String} format The archive format to use. + * @param {(CoreOptions|TransformOptions)} options See also {@link ZipOptions} and {@link TarOptions}. + */ +var Archiver = function(format, options) { + if (!(this instanceof Archiver)) { + return new Archiver(format, options); + } + + if (typeof format !== 'string') { + options = format; + format = 'zip'; + } + + options = this.options = util.defaults(options, { + highWaterMark: 1024 * 1024, + statConcurrency: 4 + }); + + Transform.call(this, options); + + this._format = false; + this._module = false; + this._pending = 0; + this._pointer = 0; + + this._entriesCount = 0; + this._entriesProcessedCount = 0; + this._fsEntriesTotalBytes = 0; + this._fsEntriesProcessedBytes = 0; + + this._queue = async.queue(this._onQueueTask.bind(this), 1); + this._queue.drain(this._onQueueDrain.bind(this)); + + this._statQueue = async.queue(this._onStatQueueTask.bind(this), options.statConcurrency); + this._statQueue.drain(this._onQueueDrain.bind(this)); + + this._state = { + aborted: false, + finalize: false, + finalizing: false, + finalized: false, + modulePiped: false + }; + + this._streams = []; +}; + +inherits(Archiver, Transform); + +/** + * Internal logic for `abort`. + * + * @private + * @return void + */ +Archiver.prototype._abort = function() { + this._state.aborted = true; + this._queue.kill(); + this._statQueue.kill(); + + if (this._queue.idle()) { + this._shutdown(); + } +}; + +/** + * Internal helper for appending files. + * + * @private + * @param {String} filepath The source filepath. + * @param {EntryData} data The entry data. + * @return void + */ +Archiver.prototype._append = function(filepath, data) { + data = data || {}; + + var task = { + source: null, + filepath: filepath + }; + + if (!data.name) { + data.name = filepath; + } + + data.sourcePath = filepath; + task.data = data; + this._entriesCount++; + + if (data.stats && data.stats instanceof fs.Stats) { + task = this._updateQueueTaskWithStats(task, data.stats); + if (task) { + if (data.stats.size) { + this._fsEntriesTotalBytes += data.stats.size; + } + + this._queue.push(task); + } + } else { + this._statQueue.push(task); + } +}; + +/** + * Internal logic for `finalize`. + * + * @private + * @return void + */ +Archiver.prototype._finalize = function() { + if (this._state.finalizing || this._state.finalized || this._state.aborted) { + return; + } + + this._state.finalizing = true; + + this._moduleFinalize(); + + this._state.finalizing = false; + this._state.finalized = true; +}; + +/** + * Checks the various state variables to determine if we can `finalize`. + * + * @private + * @return {Boolean} + */ +Archiver.prototype._maybeFinalize = function() { + if (this._state.finalizing || this._state.finalized || this._state.aborted) { + return false; + } + + if (this._state.finalize && this._pending === 0 && this._queue.idle() && this._statQueue.idle()) { + this._finalize(); + return true; + } + + return false; +}; + +/** + * Appends an entry to the module. + * + * @private + * @fires Archiver#entry + * @param {(Buffer|Stream)} source + * @param {EntryData} data + * @param {Function} callback + * @return void + */ +Archiver.prototype._moduleAppend = function(source, data, callback) { + if (this._state.aborted) { + callback(); + return; + } + + this._module.append(source, data, function(err) { + this._task = null; + + if (this._state.aborted) { + this._shutdown(); + return; + } + + if (err) { + this.emit('error', err); + setImmediate(callback); + return; + } + + /** + * Fires when the entry's input has been processed and appended to the archive. + * + * @event Archiver#entry + * @type {EntryData} + */ + this.emit('entry', data); + this._entriesProcessedCount++; + + if (data.stats && data.stats.size) { + this._fsEntriesProcessedBytes += data.stats.size; + } + + /** + * @event Archiver#progress + * @type {ProgressData} + */ + this.emit('progress', { + entries: { + total: this._entriesCount, + processed: this._entriesProcessedCount + }, + fs: { + totalBytes: this._fsEntriesTotalBytes, + processedBytes: this._fsEntriesProcessedBytes + } + }); + + setImmediate(callback); + }.bind(this)); +}; + +/** + * Finalizes the module. + * + * @private + * @return void + */ +Archiver.prototype._moduleFinalize = function() { + if (typeof this._module.finalize === 'function') { + this._module.finalize(); + } else if (typeof this._module.end === 'function') { + this._module.end(); + } else { + this.emit('error', new ArchiverError('NOENDMETHOD')); + } +}; + +/** + * Pipes the module to our internal stream with error bubbling. + * + * @private + * @return void + */ +Archiver.prototype._modulePipe = function() { + this._module.on('error', this._onModuleError.bind(this)); + this._module.pipe(this); + this._state.modulePiped = true; +}; + +/** + * Determines if the current module supports a defined feature. + * + * @private + * @param {String} key + * @return {Boolean} + */ +Archiver.prototype._moduleSupports = function(key) { + if (!this._module.supports || !this._module.supports[key]) { + return false; + } + + return this._module.supports[key]; +}; + +/** + * Unpipes the module from our internal stream. + * + * @private + * @return void + */ +Archiver.prototype._moduleUnpipe = function() { + this._module.unpipe(this); + this._state.modulePiped = false; +}; + +/** + * Normalizes entry data with fallbacks for key properties. + * + * @private + * @param {Object} data + * @param {fs.Stats} stats + * @return {Object} + */ +Archiver.prototype._normalizeEntryData = function(data, stats) { + data = util.defaults(data, { + type: 'file', + name: null, + date: null, + mode: null, + prefix: null, + sourcePath: null, + stats: false + }); + + if (stats && data.stats === false) { + data.stats = stats; + } + + var isDir = data.type === 'directory'; + + if (data.name) { + if (typeof data.prefix === 'string' && '' !== data.prefix) { + data.name = data.prefix + '/' + data.name; + data.prefix = null; + } + + data.name = util.sanitizePath(data.name); + + if (data.type !== 'symlink' && data.name.slice(-1) === '/') { + isDir = true; + data.type = 'directory'; + } else if (isDir) { + data.name += '/'; + } + } + + // 511 === 0777; 493 === 0755; 438 === 0666; 420 === 0644 + if (typeof data.mode === 'number') { + if (win32) { + data.mode &= 511; + } else { + data.mode &= 4095 + } + } else if (data.stats && data.mode === null) { + if (win32) { + data.mode = data.stats.mode & 511; + } else { + data.mode = data.stats.mode & 4095; + } + + // stat isn't reliable on windows; force 0755 for dir + if (win32 && isDir) { + data.mode = 493; + } + } else if (data.mode === null) { + data.mode = isDir ? 493 : 420; + } + + if (data.stats && data.date === null) { + data.date = data.stats.mtime; + } else { + data.date = util.dateify(data.date); + } + + return data; +}; + +/** + * Error listener that re-emits error on to our internal stream. + * + * @private + * @param {Error} err + * @return void + */ +Archiver.prototype._onModuleError = function(err) { + /** + * @event Archiver#error + * @type {ErrorData} + */ + this.emit('error', err); +}; + +/** + * Checks the various state variables after queue has drained to determine if + * we need to `finalize`. + * + * @private + * @return void + */ +Archiver.prototype._onQueueDrain = function() { + if (this._state.finalizing || this._state.finalized || this._state.aborted) { + return; + } + + if (this._state.finalize && this._pending === 0 && this._queue.idle() && this._statQueue.idle()) { + this._finalize(); + } +}; + +/** + * Appends each queue task to the module. + * + * @private + * @param {Object} task + * @param {Function} callback + * @return void + */ +Archiver.prototype._onQueueTask = function(task, callback) { + var fullCallback = () => { + if(task.data.callback) { + task.data.callback(); + } + callback(); + } + + if (this._state.finalizing || this._state.finalized || this._state.aborted) { + fullCallback(); + return; + } + + this._task = task; + this._moduleAppend(task.source, task.data, fullCallback); +}; + +/** + * Performs a file stat and reinjects the task back into the queue. + * + * @private + * @param {Object} task + * @param {Function} callback + * @return void + */ +Archiver.prototype._onStatQueueTask = function(task, callback) { + if (this._state.finalizing || this._state.finalized || this._state.aborted) { + callback(); + return; + } + + fs.lstat(task.filepath, function(err, stats) { + if (this._state.aborted) { + setImmediate(callback); + return; + } + + if (err) { + this._entriesCount--; + + /** + * @event Archiver#warning + * @type {ErrorData} + */ + this.emit('warning', err); + setImmediate(callback); + return; + } + + task = this._updateQueueTaskWithStats(task, stats); + + if (task) { + if (stats.size) { + this._fsEntriesTotalBytes += stats.size; + } + + this._queue.push(task); + } + + setImmediate(callback); + }.bind(this)); +}; + +/** + * Unpipes the module and ends our internal stream. + * + * @private + * @return void + */ +Archiver.prototype._shutdown = function() { + this._moduleUnpipe(); + this.end(); +}; + +/** + * Tracks the bytes emitted by our internal stream. + * + * @private + * @param {Buffer} chunk + * @param {String} encoding + * @param {Function} callback + * @return void + */ +Archiver.prototype._transform = function(chunk, encoding, callback) { + if (chunk) { + this._pointer += chunk.length; + } + + callback(null, chunk); +}; + +/** + * Updates and normalizes a queue task using stats data. + * + * @private + * @param {Object} task + * @param {fs.Stats} stats + * @return {Object} + */ +Archiver.prototype._updateQueueTaskWithStats = function(task, stats) { + if (stats.isFile()) { + task.data.type = 'file'; + task.data.sourceType = 'stream'; + task.source = util.lazyReadStream(task.filepath); + } else if (stats.isDirectory() && this._moduleSupports('directory')) { + task.data.name = util.trailingSlashIt(task.data.name); + task.data.type = 'directory'; + task.data.sourcePath = util.trailingSlashIt(task.filepath); + task.data.sourceType = 'buffer'; + task.source = Buffer.concat([]); + } else if (stats.isSymbolicLink() && this._moduleSupports('symlink')) { + var linkPath = fs.readlinkSync(task.filepath); + var dirName = path.dirname(task.filepath); + task.data.type = 'symlink'; + task.data.linkname = path.relative(dirName, path.resolve(dirName, linkPath)); + task.data.sourceType = 'buffer'; + task.source = Buffer.concat([]); + } else { + if (stats.isDirectory()) { + this.emit('warning', new ArchiverError('DIRECTORYNOTSUPPORTED', task.data)); + } else if (stats.isSymbolicLink()) { + this.emit('warning', new ArchiverError('SYMLINKNOTSUPPORTED', task.data)); + } else { + this.emit('warning', new ArchiverError('ENTRYNOTSUPPORTED', task.data)); + } + + return null; + } + + task.data = this._normalizeEntryData(task.data, stats); + + return task; +}; + +/** + * Aborts the archiving process, taking a best-effort approach, by: + * + * - removing any pending queue tasks + * - allowing any active queue workers to finish + * - detaching internal module pipes + * - ending both sides of the Transform stream + * + * It will NOT drain any remaining sources. + * + * @return {this} + */ +Archiver.prototype.abort = function() { + if (this._state.aborted || this._state.finalized) { + return this; + } + + this._abort(); + + return this; +}; + +/** + * Appends an input source (text string, buffer, or stream) to the instance. + * + * When the instance has received, processed, and emitted the input, the `entry` + * event is fired. + * + * @fires Archiver#entry + * @param {(Buffer|Stream|String)} source The input source. + * @param {EntryData} data See also {@link ZipEntryData} and {@link TarEntryData}. + * @return {this} + */ +Archiver.prototype.append = function(source, data) { + if (this._state.finalize || this._state.aborted) { + this.emit('error', new ArchiverError('QUEUECLOSED')); + return this; + } + + data = this._normalizeEntryData(data); + + if (typeof data.name !== 'string' || data.name.length === 0) { + this.emit('error', new ArchiverError('ENTRYNAMEREQUIRED')); + return this; + } + + if (data.type === 'directory' && !this._moduleSupports('directory')) { + this.emit('error', new ArchiverError('DIRECTORYNOTSUPPORTED', { name: data.name })); + return this; + } + + source = util.normalizeInputSource(source); + + if (Buffer.isBuffer(source)) { + data.sourceType = 'buffer'; + } else if (util.isStream(source)) { + data.sourceType = 'stream'; + } else { + this.emit('error', new ArchiverError('INPUTSTEAMBUFFERREQUIRED', { name: data.name })); + return this; + } + + this._entriesCount++; + this._queue.push({ + data: data, + source: source + }); + + return this; +}; + +/** + * Appends a directory and its files, recursively, given its dirpath. + * + * @param {String} dirpath The source directory path. + * @param {String} destpath The destination path within the archive. + * @param {(EntryData|Function)} data See also [ZipEntryData]{@link ZipEntryData} and + * [TarEntryData]{@link TarEntryData}. + * @return {this} + */ +Archiver.prototype.directory = function(dirpath, destpath, data) { + if (this._state.finalize || this._state.aborted) { + this.emit('error', new ArchiverError('QUEUECLOSED')); + return this; + } + + if (typeof dirpath !== 'string' || dirpath.length === 0) { + this.emit('error', new ArchiverError('DIRECTORYDIRPATHREQUIRED')); + return this; + } + + this._pending++; + + if (destpath === false) { + destpath = ''; + } else if (typeof destpath !== 'string'){ + destpath = dirpath; + } + + var dataFunction = false; + if (typeof data === 'function') { + dataFunction = data; + data = {}; + } else if (typeof data !== 'object') { + data = {}; + } + + var globOptions = { + stat: true, + dot: true + }; + + function onGlobEnd() { + this._pending--; + this._maybeFinalize(); + } + + function onGlobError(err) { + this.emit('error', err); + } + + function onGlobMatch(match){ + globber.pause(); + + var ignoreMatch = false; + var entryData = Object.assign({}, data); + entryData.name = match.relative; + entryData.prefix = destpath; + entryData.stats = match.stat; + entryData.callback = globber.resume.bind(globber); + + try { + if (dataFunction) { + entryData = dataFunction(entryData); + + if (entryData === false) { + ignoreMatch = true; + } else if (typeof entryData !== 'object') { + throw new ArchiverError('DIRECTORYFUNCTIONINVALIDDATA', { dirpath: dirpath }); + } + } + } catch(e) { + this.emit('error', e); + return; + } + + if (ignoreMatch) { + globber.resume(); + return; + } + + this._append(match.absolute, entryData); + } + + var globber = glob(dirpath, globOptions); + globber.on('error', onGlobError.bind(this)); + globber.on('match', onGlobMatch.bind(this)); + globber.on('end', onGlobEnd.bind(this)); + + return this; +}; + +/** + * Appends a file given its filepath using a + * [lazystream]{@link https://github.com/jpommerening/node-lazystream} wrapper to + * prevent issues with open file limits. + * + * When the instance has received, processed, and emitted the file, the `entry` + * event is fired. + * + * @param {String} filepath The source filepath. + * @param {EntryData} data See also [ZipEntryData]{@link ZipEntryData} and + * [TarEntryData]{@link TarEntryData}. + * @return {this} + */ +Archiver.prototype.file = function(filepath, data) { + if (this._state.finalize || this._state.aborted) { + this.emit('error', new ArchiverError('QUEUECLOSED')); + return this; + } + + if (typeof filepath !== 'string' || filepath.length === 0) { + this.emit('error', new ArchiverError('FILEFILEPATHREQUIRED')); + return this; + } + + this._append(filepath, data); + + return this; +}; + +/** + * Appends multiple files that match a glob pattern. + * + * @param {String} pattern The [glob pattern]{@link https://github.com/isaacs/minimatch} to match. + * @param {Object} options See [node-readdir-glob]{@link https://github.com/yqnn/node-readdir-glob#options}. + * @param {EntryData} data See also [ZipEntryData]{@link ZipEntryData} and + * [TarEntryData]{@link TarEntryData}. + * @return {this} + */ +Archiver.prototype.glob = function(pattern, options, data) { + this._pending++; + + options = util.defaults(options, { + stat: true, + pattern: pattern + }); + + function onGlobEnd() { + this._pending--; + this._maybeFinalize(); + } + + function onGlobError(err) { + this.emit('error', err); + } + + function onGlobMatch(match){ + globber.pause(); + var entryData = Object.assign({}, data); + entryData.callback = globber.resume.bind(globber); + entryData.stats = match.stat; + entryData.name = match.relative; + + this._append(match.absolute, entryData); + } + + var globber = glob(options.cwd || '.', options); + globber.on('error', onGlobError.bind(this)); + globber.on('match', onGlobMatch.bind(this)); + globber.on('end', onGlobEnd.bind(this)); + + return this; +}; + +/** + * Finalizes the instance and prevents further appending to the archive + * structure (queue will continue til drained). + * + * The `end`, `close` or `finish` events on the destination stream may fire + * right after calling this method so you should set listeners beforehand to + * properly detect stream completion. + * + * @return {Promise} + */ +Archiver.prototype.finalize = function() { + if (this._state.aborted) { + var abortedError = new ArchiverError('ABORTED'); + this.emit('error', abortedError); + return Promise.reject(abortedError); + } + + if (this._state.finalize) { + var finalizingError = new ArchiverError('FINALIZING'); + this.emit('error', finalizingError); + return Promise.reject(finalizingError); + } + + this._state.finalize = true; + + if (this._pending === 0 && this._queue.idle() && this._statQueue.idle()) { + this._finalize(); + } + + var self = this; + + return new Promise(function(resolve, reject) { + var errored; + + self._module.on('end', function() { + if (!errored) { + resolve(); + } + }) + + self._module.on('error', function(err) { + errored = true; + reject(err); + }) + }) +}; + +/** + * Sets the module format name used for archiving. + * + * @param {String} format The name of the format. + * @return {this} + */ +Archiver.prototype.setFormat = function(format) { + if (this._format) { + this.emit('error', new ArchiverError('FORMATSET')); + return this; + } + + this._format = format; + + return this; +}; + +/** + * Sets the module used for archiving. + * + * @param {Function} module The function for archiver to interact with. + * @return {this} + */ +Archiver.prototype.setModule = function(module) { + if (this._state.aborted) { + this.emit('error', new ArchiverError('ABORTED')); + return this; + } + + if (this._state.module) { + this.emit('error', new ArchiverError('MODULESET')); + return this; + } + + this._module = module; + this._modulePipe(); + + return this; +}; + +/** + * Appends a symlink to the instance. + * + * This does NOT interact with filesystem and is used for programmatically creating symlinks. + * + * @param {String} filepath The symlink path (within archive). + * @param {String} target The target path (within archive). + * @param {Number} mode Sets the entry permissions. + * @return {this} + */ +Archiver.prototype.symlink = function(filepath, target, mode) { + if (this._state.finalize || this._state.aborted) { + this.emit('error', new ArchiverError('QUEUECLOSED')); + return this; + } + + if (typeof filepath !== 'string' || filepath.length === 0) { + this.emit('error', new ArchiverError('SYMLINKFILEPATHREQUIRED')); + return this; + } + + if (typeof target !== 'string' || target.length === 0) { + this.emit('error', new ArchiverError('SYMLINKTARGETREQUIRED', { filepath: filepath })); + return this; + } + + if (!this._moduleSupports('symlink')) { + this.emit('error', new ArchiverError('SYMLINKNOTSUPPORTED', { filepath: filepath })); + return this; + } + + var data = {}; + data.type = 'symlink'; + data.name = filepath.replace(/\\/g, '/'); + data.linkname = target.replace(/\\/g, '/'); + data.sourceType = 'buffer'; + + if (typeof mode === "number") { + data.mode = mode; + } + + this._entriesCount++; + this._queue.push({ + data: data, + source: Buffer.concat([]) + }); + + return this; +}; + +/** + * Returns the current length (in bytes) that has been emitted. + * + * @return {Number} + */ +Archiver.prototype.pointer = function() { + return this._pointer; +}; + +/** + * Middleware-like helper that has yet to be fully implemented. + * + * @private + * @param {Function} plugin + * @return {this} + */ +Archiver.prototype.use = function(plugin) { + this._streams.push(plugin); + return this; +}; + +module.exports = Archiver; + +/** + * @typedef {Object} CoreOptions + * @global + * @property {Number} [statConcurrency=4] Sets the number of workers used to + * process the internal fs stat queue. + */ + +/** + * @typedef {Object} TransformOptions + * @property {Boolean} [allowHalfOpen=true] If set to false, then the stream + * will automatically end the readable side when the writable side ends and vice + * versa. + * @property {Boolean} [readableObjectMode=false] Sets objectMode for readable + * side of the stream. Has no effect if objectMode is true. + * @property {Boolean} [writableObjectMode=false] Sets objectMode for writable + * side of the stream. Has no effect if objectMode is true. + * @property {Boolean} [decodeStrings=true] Whether or not to decode strings + * into Buffers before passing them to _write(). `Writable` + * @property {String} [encoding=NULL] If specified, then buffers will be decoded + * to strings using the specified encoding. `Readable` + * @property {Number} [highWaterMark=16kb] The maximum number of bytes to store + * in the internal buffer before ceasing to read from the underlying resource. + * `Readable` `Writable` + * @property {Boolean} [objectMode=false] Whether this stream should behave as a + * stream of objects. Meaning that stream.read(n) returns a single value instead + * of a Buffer of size n. `Readable` `Writable` + */ + +/** + * @typedef {Object} EntryData + * @property {String} name Sets the entry name including internal path. + * @property {(String|Date)} [date=NOW()] Sets the entry date. + * @property {Number} [mode=D:0755/F:0644] Sets the entry permissions. + * @property {String} [prefix] Sets a path prefix for the entry name. Useful + * when working with methods like `directory` or `glob`. + * @property {fs.Stats} [stats] Sets the fs stat data for this entry allowing + * for reduction of fs stat calls when stat data is already known. + */ + +/** + * @typedef {Object} ErrorData + * @property {String} message The message of the error. + * @property {String} code The error code assigned to this error. + * @property {String} data Additional data provided for reporting or debugging (where available). + */ + +/** + * @typedef {Object} ProgressData + * @property {Object} entries + * @property {Number} entries.total Number of entries that have been appended. + * @property {Number} entries.processed Number of entries that have been processed. + * @property {Object} fs + * @property {Number} fs.totalBytes Number of bytes that have been appended. Calculated asynchronously and might not be accurate: it growth while entries are added. (based on fs.Stats) + * @property {Number} fs.processedBytes Number of bytes that have been processed. (based on fs.Stats) + */ diff --git a/node_backend/node_modules/archiver/lib/error.js b/node_backend/node_modules/archiver/lib/error.js new file mode 100644 index 0000000000000000000000000000000000000000..6bcb0ae1a788b4d7b704966846e38ba17794126b --- /dev/null +++ b/node_backend/node_modules/archiver/lib/error.js @@ -0,0 +1,40 @@ +/** + * Archiver Core + * + * @ignore + * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE} + * @copyright (c) 2012-2014 Chris Talkington, contributors. + */ + +var util = require('util'); + +const ERROR_CODES = { + 'ABORTED': 'archive was aborted', + 'DIRECTORYDIRPATHREQUIRED': 'diretory dirpath argument must be a non-empty string value', + 'DIRECTORYFUNCTIONINVALIDDATA': 'invalid data returned by directory custom data function', + 'ENTRYNAMEREQUIRED': 'entry name must be a non-empty string value', + 'FILEFILEPATHREQUIRED': 'file filepath argument must be a non-empty string value', + 'FINALIZING': 'archive already finalizing', + 'QUEUECLOSED': 'queue closed', + 'NOENDMETHOD': 'no suitable finalize/end method defined by module', + 'DIRECTORYNOTSUPPORTED': 'support for directory entries not defined by module', + 'FORMATSET': 'archive format already set', + 'INPUTSTEAMBUFFERREQUIRED': 'input source must be valid Stream or Buffer instance', + 'MODULESET': 'module already set', + 'SYMLINKNOTSUPPORTED': 'support for symlink entries not defined by module', + 'SYMLINKFILEPATHREQUIRED': 'symlink filepath argument must be a non-empty string value', + 'SYMLINKTARGETREQUIRED': 'symlink target argument must be a non-empty string value', + 'ENTRYNOTSUPPORTED': 'entry not supported' +}; + +function ArchiverError(code, data) { + Error.captureStackTrace(this, this.constructor); + //this.name = this.constructor.name; + this.message = ERROR_CODES[code] || code; + this.code = code; + this.data = data; +} + +util.inherits(ArchiverError, Error); + +exports = module.exports = ArchiverError; \ No newline at end of file diff --git a/node_backend/node_modules/archiver/lib/plugins/json.js b/node_backend/node_modules/archiver/lib/plugins/json.js new file mode 100644 index 0000000000000000000000000000000000000000..caf63de9475abf200eb57af32b313e1751ad292b --- /dev/null +++ b/node_backend/node_modules/archiver/lib/plugins/json.js @@ -0,0 +1,110 @@ +/** + * JSON Format Plugin + * + * @module plugins/json + * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE} + * @copyright (c) 2012-2014 Chris Talkington, contributors. + */ +var inherits = require('util').inherits; +var Transform = require('readable-stream').Transform; + +var crc32 = require('buffer-crc32'); +var util = require('archiver-utils'); + +/** + * @constructor + * @param {(JsonOptions|TransformOptions)} options + */ +var Json = function(options) { + if (!(this instanceof Json)) { + return new Json(options); + } + + options = this.options = util.defaults(options, {}); + + Transform.call(this, options); + + this.supports = { + directory: true, + symlink: true + }; + + this.files = []; +}; + +inherits(Json, Transform); + +/** + * [_transform description] + * + * @private + * @param {Buffer} chunk + * @param {String} encoding + * @param {Function} callback + * @return void + */ +Json.prototype._transform = function(chunk, encoding, callback) { + callback(null, chunk); +}; + +/** + * [_writeStringified description] + * + * @private + * @return void + */ +Json.prototype._writeStringified = function() { + var fileString = JSON.stringify(this.files); + this.write(fileString); +}; + +/** + * [append description] + * + * @param {(Buffer|Stream)} source + * @param {EntryData} data + * @param {Function} callback + * @return void + */ +Json.prototype.append = function(source, data, callback) { + var self = this; + + data.crc32 = 0; + + function onend(err, sourceBuffer) { + if (err) { + callback(err); + return; + } + + data.size = sourceBuffer.length || 0; + data.crc32 = crc32.unsigned(sourceBuffer); + + self.files.push(data); + + callback(null, data); + } + + if (data.sourceType === 'buffer') { + onend(null, source); + } else if (data.sourceType === 'stream') { + util.collectStream(source, onend); + } +}; + +/** + * [finalize description] + * + * @return void + */ +Json.prototype.finalize = function() { + this._writeStringified(); + this.end(); +}; + +module.exports = Json; + +/** + * @typedef {Object} JsonOptions + * @global + */ diff --git a/node_backend/node_modules/archiver/lib/plugins/tar.js b/node_backend/node_modules/archiver/lib/plugins/tar.js new file mode 100644 index 0000000000000000000000000000000000000000..3a17009004d15ed72180d9a2e82cfb726fe33107 --- /dev/null +++ b/node_backend/node_modules/archiver/lib/plugins/tar.js @@ -0,0 +1,167 @@ +/** + * TAR Format Plugin + * + * @module plugins/tar + * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE} + * @copyright (c) 2012-2014 Chris Talkington, contributors. + */ +var zlib = require('zlib'); + +var engine = require('tar-stream'); +var util = require('archiver-utils'); + +/** + * @constructor + * @param {TarOptions} options + */ +var Tar = function(options) { + if (!(this instanceof Tar)) { + return new Tar(options); + } + + options = this.options = util.defaults(options, { + gzip: false + }); + + if (typeof options.gzipOptions !== 'object') { + options.gzipOptions = {}; + } + + this.supports = { + directory: true, + symlink: true + }; + + this.engine = engine.pack(options); + this.compressor = false; + + if (options.gzip) { + this.compressor = zlib.createGzip(options.gzipOptions); + this.compressor.on('error', this._onCompressorError.bind(this)); + } +}; + +/** + * [_onCompressorError description] + * + * @private + * @param {Error} err + * @return void + */ +Tar.prototype._onCompressorError = function(err) { + this.engine.emit('error', err); +}; + +/** + * [append description] + * + * @param {(Buffer|Stream)} source + * @param {TarEntryData} data + * @param {Function} callback + * @return void + */ +Tar.prototype.append = function(source, data, callback) { + var self = this; + + data.mtime = data.date; + + function append(err, sourceBuffer) { + if (err) { + callback(err); + return; + } + + self.engine.entry(data, sourceBuffer, function(err) { + callback(err, data); + }); + } + + if (data.sourceType === 'buffer') { + append(null, source); + } else if (data.sourceType === 'stream' && data.stats) { + data.size = data.stats.size; + + var entry = self.engine.entry(data, function(err) { + callback(err, data); + }); + + source.pipe(entry); + } else if (data.sourceType === 'stream') { + util.collectStream(source, append); + } +}; + +/** + * [finalize description] + * + * @return void + */ +Tar.prototype.finalize = function() { + this.engine.finalize(); +}; + +/** + * [on description] + * + * @return this.engine + */ +Tar.prototype.on = function() { + return this.engine.on.apply(this.engine, arguments); +}; + +/** + * [pipe description] + * + * @param {String} destination + * @param {Object} options + * @return this.engine + */ +Tar.prototype.pipe = function(destination, options) { + if (this.compressor) { + return this.engine.pipe.apply(this.engine, [this.compressor]).pipe(destination, options); + } else { + return this.engine.pipe.apply(this.engine, arguments); + } +}; + +/** + * [unpipe description] + * + * @return this.engine + */ +Tar.prototype.unpipe = function() { + if (this.compressor) { + return this.compressor.unpipe.apply(this.compressor, arguments); + } else { + return this.engine.unpipe.apply(this.engine, arguments); + } +}; + +module.exports = Tar; + +/** + * @typedef {Object} TarOptions + * @global + * @property {Boolean} [gzip=false] Compress the tar archive using gzip. + * @property {Object} [gzipOptions] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options} + * to control compression. + * @property {*} [*] See [tar-stream]{@link https://github.com/mafintosh/tar-stream} documentation for additional properties. + */ + +/** + * @typedef {Object} TarEntryData + * @global + * @property {String} name Sets the entry name including internal path. + * @property {(String|Date)} [date=NOW()] Sets the entry date. + * @property {Number} [mode=D:0755/F:0644] Sets the entry permissions. + * @property {String} [prefix] Sets a path prefix for the entry name. Useful + * when working with methods like `directory` or `glob`. + * @property {fs.Stats} [stats] Sets the fs stat data for this entry allowing + * for reduction of fs stat calls when stat data is already known. + */ + +/** + * TarStream Module + * @external TarStream + * @see {@link https://github.com/mafintosh/tar-stream} + */ diff --git a/node_backend/node_modules/archiver/lib/plugins/zip.js b/node_backend/node_modules/archiver/lib/plugins/zip.js new file mode 100644 index 0000000000000000000000000000000000000000..df6f07432814b803056d6bde963a2a6281490c56 --- /dev/null +++ b/node_backend/node_modules/archiver/lib/plugins/zip.js @@ -0,0 +1,120 @@ +/** + * ZIP Format Plugin + * + * @module plugins/zip + * @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE} + * @copyright (c) 2012-2014 Chris Talkington, contributors. + */ +var engine = require('zip-stream'); +var util = require('archiver-utils'); + +/** + * @constructor + * @param {ZipOptions} [options] + * @param {String} [options.comment] Sets the zip archive comment. + * @param {Boolean} [options.forceLocalTime=false] Forces the archive to contain local file times instead of UTC. + * @param {Boolean} [options.forceZip64=false] Forces the archive to contain ZIP64 headers. + * @param {Boolean} [options.namePrependSlash=false] Prepends a forward slash to archive file paths. + * @param {Boolean} [options.store=false] Sets the compression method to STORE. + * @param {Object} [options.zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options} + */ +var Zip = function(options) { + if (!(this instanceof Zip)) { + return new Zip(options); + } + + options = this.options = util.defaults(options, { + comment: '', + forceUTC: false, + namePrependSlash: false, + store: false + }); + + this.supports = { + directory: true, + symlink: true + }; + + this.engine = new engine(options); +}; + +/** + * @param {(Buffer|Stream)} source + * @param {ZipEntryData} data + * @param {String} data.name Sets the entry name including internal path. + * @param {(String|Date)} [data.date=NOW()] Sets the entry date. + * @param {Number} [data.mode=D:0755/F:0644] Sets the entry permissions. + * @param {String} [data.prefix] Sets a path prefix for the entry name. Useful + * when working with methods like `directory` or `glob`. + * @param {fs.Stats} [data.stats] Sets the fs stat data for this entry allowing + * for reduction of fs stat calls when stat data is already known. + * @param {Boolean} [data.store=ZipOptions.store] Sets the compression method to STORE. + * @param {Function} callback + * @return void + */ +Zip.prototype.append = function(source, data, callback) { + this.engine.entry(source, data, callback); +}; + +/** + * @return void + */ +Zip.prototype.finalize = function() { + this.engine.finalize(); +}; + +/** + * @return this.engine + */ +Zip.prototype.on = function() { + return this.engine.on.apply(this.engine, arguments); +}; + +/** + * @return this.engine + */ +Zip.prototype.pipe = function() { + return this.engine.pipe.apply(this.engine, arguments); +}; + +/** + * @return this.engine + */ +Zip.prototype.unpipe = function() { + return this.engine.unpipe.apply(this.engine, arguments); +}; + +module.exports = Zip; + +/** + * @typedef {Object} ZipOptions + * @global + * @property {String} [comment] Sets the zip archive comment. + * @property {Boolean} [forceLocalTime=false] Forces the archive to contain local file times instead of UTC. + * @property {Boolean} [forceZip64=false] Forces the archive to contain ZIP64 headers. + * @prpperty {Boolean} [namePrependSlash=false] Prepends a forward slash to archive file paths. + * @property {Boolean} [store=false] Sets the compression method to STORE. + * @property {Object} [zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options} + * to control compression. + * @property {*} [*] See [zip-stream]{@link https://archiverjs.com/zip-stream/ZipStream.html} documentation for current list of properties. + */ + +/** + * @typedef {Object} ZipEntryData + * @global + * @property {String} name Sets the entry name including internal path. + * @property {(String|Date)} [date=NOW()] Sets the entry date. + * @property {Number} [mode=D:0755/F:0644] Sets the entry permissions. + * @property {Boolean} [namePrependSlash=ZipOptions.namePrependSlash] Prepends a forward slash to archive file paths. + * @property {String} [prefix] Sets a path prefix for the entry name. Useful + * when working with methods like `directory` or `glob`. + * @property {fs.Stats} [stats] Sets the fs stat data for this entry allowing + * for reduction of fs stat calls when stat data is already known. + * @property {Boolean} [store=ZipOptions.store] Sets the compression method to STORE. + */ + +/** + * ZipStream Module + * @external ZipStream + * @see {@link https://www.archiverjs.com/zip-stream/ZipStream.html} + */ diff --git a/node_backend/node_modules/archiver/package.json b/node_backend/node_modules/archiver/package.json new file mode 100644 index 0000000000000000000000000000000000000000..1ec13196c3ef2fd018f04ccca83c69c8d1e8b2ff --- /dev/null +++ b/node_backend/node_modules/archiver/package.json @@ -0,0 +1,60 @@ +{ + "name": "archiver", + "version": "5.3.2", + "description": "a streaming interface for archive generation", + "homepage": "https://github.com/archiverjs/node-archiver", + "author": { + "name": "Chris Talkington", + "url": "http://christalkington.com/" + }, + "repository": { + "type": "git", + "url": "https://github.com/archiverjs/node-archiver.git" + }, + "bugs": { + "url": "https://github.com/archiverjs/node-archiver/issues" + }, + "license": "MIT", + "main": "index.js", + "files": [ + "index.js", + "lib" + ], + "engines": { + "node": ">= 10" + }, + "scripts": { + "test": "mocha --reporter dot", + "bench": "node benchmark/simple/pack-zip.js" + }, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "devDependencies": { + "archiver-jsdoc-theme": "^1.1.3", + "chai": "^4.3.7", + "jsdoc": "^3.6.4", + "mkdirp": "^2.1.5", + "mocha": "^9.0.2", + "rimraf": "^4.3.1", + "stream-bench": "^0.1.2", + "tar": "^6.1.13", + "yauzl": "^2.9.0" + }, + "keywords": [ + "archive", + "archiver", + "stream", + "zip", + "tar" + ], + "publishConfig": { + "registry": "https://registry.npmjs.org/" + } +} diff --git a/node_backend/node_modules/async/CHANGELOG.md b/node_backend/node_modules/async/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..ce990a51c49edb690bd62b34ee0f814730296217 --- /dev/null +++ b/node_backend/node_modules/async/CHANGELOG.md @@ -0,0 +1,351 @@ +# v3.2.5 +- Ensure `Error` objects such as `AggregateError` are propagated without modification (#1920) + +# v3.2.4 +- Fix a bug in `priorityQueue` where it didn't wait for the result. (#1725) +- Fix a bug where `unshiftAsync` was included in `priorityQueue`. (#1790) + +# v3.2.3 +- Fix bugs in comment parsing in `autoInject`. (#1767, #1780) + +# v3.2.2 +- Fix potential prototype pollution exploit + +# v3.2.1 +- Use `queueMicrotask` if available to the environment (#1761) +- Minor perf improvement in `priorityQueue` (#1727) +- More examples in documentation (#1726) +- Various doc fixes (#1708, #1712, #1717, #1740, #1739, #1749, #1756) +- Improved test coverage (#1754) + +# v3.2.0 +- Fix a bug in Safari related to overwriting `func.name` +- Remove built-in browserify configuration (#1653) +- Varios doc fixes (#1688, #1703, #1704) + +# v3.1.1 +- Allow redefining `name` property on wrapped functions. + +# v3.1.0 + +- Added `q.pushAsync` and `q.unshiftAsync`, analagous to `q.push` and `q.unshift`, except they always do not accept a callback, and reject if processing the task errors. (#1659) +- Promises returned from `q.push` and `q.unshift` when a callback is not passed now resolve even if an error ocurred. (#1659) +- Fixed a parsing bug in `autoInject` with complicated function bodies (#1663) +- Added ES6+ configuration for Browserify bundlers (#1653) +- Various doc fixes (#1664, #1658, #1665, #1652) + +# v3.0.1 + +## Bug fixes +- Fixed a regression where arrays passed to `queue` and `cargo` would be completely flattened. (#1645) +- Clarified Async's browser support (#1643) + + +# v3.0.0 + +The `async`/`await` release! + +There are a lot of new features and subtle breaking changes in this major version, but the biggest feature is that most Async methods return a Promise if you omit the callback, meaning you can `await` them from within an `async` function. + +```js +const results = await async.mapLimit(urls, 5, async url => { + const resp = await fetch(url) + return resp.body +}) +``` + +## Breaking Changes +- Most Async methods return a Promise when the final callback is omitted, making them `await`-able! (#1572) +- We are now making heavy use of ES2015 features, this means we have dropped out-of-the-box support for Node 4 and earlier, and many old versions of browsers. (#1541, #1553) +- In `queue`, `priorityQueue`, `cargo` and `cargoQueue`, the "event"-style methods, like `q.drain` and `q.saturated` are now methods that register a callback, rather than properties you assign a callback to. They are now of the form `q.drain(callback)`. If you do not pass a callback a Promise will be returned for the next occurrence of the event, making them `await`-able, e.g. `await q.drain()`. (#1586, #1641) +- Calling `callback(false)` will cancel an async method, preventing further iteration and callback calls. This is useful for preventing memory leaks when you break out of an async flow by calling an outer callback. (#1064, #1542) +- `during` and `doDuring` have been removed, and instead `whilst`, `doWhilst`, `until` and `doUntil` now have asynchronous `test` functions. (#850, #1557) +- `limits` of less than 1 now cause an error to be thrown in queues and collection methods. (#1249, #1552) +- `memoize` no longer memoizes errors (#1465, #1466) +- `applyEach`/`applyEachSeries` have a simpler interface, to make them more easily type-able. It always returns a function that takes in a single callback argument. If that callback is omitted, a promise is returned, making it awaitable. (#1228, #1640) + +## New Features +- Async generators are now supported in all the Collection methods. (#1560) +- Added `cargoQueue`, a queue with both `concurrency` and `payload` size parameters. (#1567) +- Queue objects returned from `queue` now have a `Symbol.iterator` method, meaning they can be iterated over to inspect the current list of items in the queue. (#1459, #1556) +- A ESM-flavored `async.mjs` is included in the `async` package. This is described in the `package.json` `"module"` field, meaning it should be automatically used by Webpack and other compatible bundlers. + +## Bug fixes +- Better handle arbitrary error objects in `asyncify` (#1568, #1569) + +## Other +- Removed Lodash as a dependency (#1283, #1528) +- Miscellaneous docs fixes (#1393, #1501, #1540, #1543, #1558, #1563, #1564, #1579, #1581) +- Miscellaneous test fixes (#1538) + +------- + +# v2.6.1 +- Updated lodash to prevent `npm audit` warnings. (#1532, #1533) +- Made `async-es` more optimized for webpack users (#1517) +- Fixed a stack overflow with large collections and a synchronous iterator (#1514) +- Various small fixes/chores (#1505, #1511, #1527, #1530) + +# v2.6.0 +- Added missing aliases for many methods. Previously, you could not (e.g.) `require('async/find')` or use `async.anyLimit`. (#1483) +- Improved `queue` performance. (#1448, #1454) +- Add missing sourcemap (#1452, #1453) +- Various doc updates (#1448, #1471, #1483) + +# v2.5.0 +- Added `concatLimit`, the `Limit` equivalent of [`concat`](https://caolan.github.io/async/docs.html#concat) ([#1426](https://github.com/caolan/async/issues/1426), [#1430](https://github.com/caolan/async/pull/1430)) +- `concat` improvements: it now preserves order, handles falsy values and the `iteratee` callback takes a variable number of arguments ([#1437](https://github.com/caolan/async/issues/1437), [#1436](https://github.com/caolan/async/pull/1436)) +- Fixed an issue in `queue` where there was a size discrepancy between `workersList().length` and `running()` ([#1428](https://github.com/caolan/async/issues/1428), [#1429](https://github.com/caolan/async/pull/1429)) +- Various doc fixes ([#1422](https://github.com/caolan/async/issues/1422), [#1424](https://github.com/caolan/async/pull/1424)) + +# v2.4.1 +- Fixed a bug preventing functions wrapped with `timeout()` from being re-used. ([#1418](https://github.com/caolan/async/issues/1418), [#1419](https://github.com/caolan/async/issues/1419)) + +# v2.4.0 +- Added `tryEach`, for running async functions in parallel, where you only expect one to succeed. ([#1365](https://github.com/caolan/async/issues/1365), [#687](https://github.com/caolan/async/issues/687)) +- Improved performance, most notably in `parallel` and `waterfall` ([#1395](https://github.com/caolan/async/issues/1395)) +- Added `queue.remove()`, for removing items in a `queue` ([#1397](https://github.com/caolan/async/issues/1397), [#1391](https://github.com/caolan/async/issues/1391)) +- Fixed using `eval`, preventing Async from running in pages with Content Security Policy ([#1404](https://github.com/caolan/async/issues/1404), [#1403](https://github.com/caolan/async/issues/1403)) +- Fixed errors thrown in an `asyncify`ed function's callback being caught by the underlying Promise ([#1408](https://github.com/caolan/async/issues/1408)) +- Fixed timing of `queue.empty()` ([#1367](https://github.com/caolan/async/issues/1367)) +- Various doc fixes ([#1314](https://github.com/caolan/async/issues/1314), [#1394](https://github.com/caolan/async/issues/1394), [#1412](https://github.com/caolan/async/issues/1412)) + +# v2.3.0 +- Added support for ES2017 `async` functions. Wherever you can pass a Node-style/CPS function that uses a callback, you can also pass an `async` function. Previously, you had to wrap `async` functions with `asyncify`. The caveat is that it will only work if `async` functions are supported natively in your environment, transpiled implementations can't be detected. ([#1386](https://github.com/caolan/async/issues/1386), [#1390](https://github.com/caolan/async/issues/1390)) +- Small doc fix ([#1392](https://github.com/caolan/async/issues/1392)) + +# v2.2.0 +- Added `groupBy`, and the `Series`/`Limit` equivalents, analogous to [`_.groupBy`](http://lodash.com/docs#groupBy) ([#1364](https://github.com/caolan/async/issues/1364)) +- Fixed `transform` bug when `callback` was not passed ([#1381](https://github.com/caolan/async/issues/1381)) +- Added note about `reflect` to `parallel` docs ([#1385](https://github.com/caolan/async/issues/1385)) + +# v2.1.5 +- Fix `auto` bug when function names collided with Array.prototype ([#1358](https://github.com/caolan/async/issues/1358)) +- Improve some error messages ([#1349](https://github.com/caolan/async/issues/1349)) +- Avoid stack overflow case in queue +- Fixed an issue in `some`, `every` and `find` where processing would continue after the result was determined. +- Cleanup implementations of `some`, `every` and `find` + +# v2.1.3 +- Make bundle size smaller +- Create optimized hotpath for `filter` in array case. + +# v2.1.2 +- Fixed a stackoverflow bug with `detect`, `some`, `every` on large inputs ([#1293](https://github.com/caolan/async/issues/1293)). + +# v2.1.0 + +- `retry` and `retryable` now support an optional `errorFilter` function that determines if the `task` should retry on the error ([#1256](https://github.com/caolan/async/issues/1256), [#1261](https://github.com/caolan/async/issues/1261)) +- Optimized array iteration in `race`, `cargo`, `queue`, and `priorityQueue` ([#1253](https://github.com/caolan/async/issues/1253)) +- Added alias documentation to doc site ([#1251](https://github.com/caolan/async/issues/1251), [#1254](https://github.com/caolan/async/issues/1254)) +- Added [BootStrap scrollspy](http://getbootstrap.com/javascript/#scrollspy) to docs to highlight in the sidebar the current method being viewed ([#1289](https://github.com/caolan/async/issues/1289), [#1300](https://github.com/caolan/async/issues/1300)) +- Various minor doc fixes ([#1263](https://github.com/caolan/async/issues/1263), [#1264](https://github.com/caolan/async/issues/1264), [#1271](https://github.com/caolan/async/issues/1271), [#1278](https://github.com/caolan/async/issues/1278), [#1280](https://github.com/caolan/async/issues/1280), [#1282](https://github.com/caolan/async/issues/1282), [#1302](https://github.com/caolan/async/issues/1302)) + +# v2.0.1 + +- Significantly optimized all iteration based collection methods such as `each`, `map`, `filter`, etc ([#1245](https://github.com/caolan/async/issues/1245), [#1246](https://github.com/caolan/async/issues/1246), [#1247](https://github.com/caolan/async/issues/1247)). + +# v2.0.0 + +Lots of changes here! + +First and foremost, we have a slick new [site for docs](https://caolan.github.io/async/). Special thanks to [**@hargasinski**](https://github.com/hargasinski) for his work converting our old docs to `jsdoc` format and implementing the new website. Also huge ups to [**@ivanseidel**](https://github.com/ivanseidel) for designing our new logo. It was a long process for both of these tasks, but I think these changes turned out extraordinary well. + +The biggest feature is modularization. You can now `require("async/series")` to only require the `series` function. Every Async library function is available this way. You still can `require("async")` to require the entire library, like you could do before. + +We also provide Async as a collection of ES2015 modules. You can now `import {each} from 'async-es'` or `import waterfall from 'async-es/waterfall'`. If you are using only a few Async functions, and are using a ES bundler such as Rollup, this can significantly lower your build size. + +Major thanks to [**@Kikobeats**](github.com/Kikobeats), [**@aearly**](github.com/aearly) and [**@megawac**](github.com/megawac) for doing the majority of the modularization work, as well as [**@jdalton**](github.com/jdalton) and [**@Rich-Harris**](github.com/Rich-Harris) for advisory work on the general modularization strategy. + +Another one of the general themes of the 2.0 release is standardization of what an "async" function is. We are now more strictly following the node-style continuation passing style. That is, an async function is a function that: + +1. Takes a variable number of arguments +2. The last argument is always a callback +3. The callback can accept any number of arguments +4. The first argument passed to the callback will be treated as an error result, if the argument is truthy +5. Any number of result arguments can be passed after the "error" argument +6. The callback is called once and exactly once, either on the same tick or later tick of the JavaScript event loop. + +There were several cases where Async accepted some functions that did not strictly have these properties, most notably `auto`, `every`, `some`, `filter`, `reject` and `detect`. + +Another theme is performance. We have eliminated internal deferrals in all cases where they make sense. For example, in `waterfall` and `auto`, there was a `setImmediate` between each task -- these deferrals have been removed. A `setImmediate` call can add up to 1ms of delay. This might not seem like a lot, but it can add up if you are using many Async functions in the course of processing a HTTP request, for example. Nearly all asynchronous functions that do I/O already have some sort of deferral built in, so the extra deferral is unnecessary. The trade-off of this change is removing our built-in stack-overflow defense. Many synchronous callback calls in series can quickly overflow the JS call stack. If you do have a function that is sometimes synchronous (calling its callback on the same tick), and are running into stack overflows, wrap it with `async.ensureAsync()`. + +Another big performance win has been re-implementing `queue`, `cargo`, and `priorityQueue` with [doubly linked lists](https://en.wikipedia.org/wiki/Doubly_linked_list) instead of arrays. This has lead to queues being an order of [magnitude faster on large sets of tasks](https://github.com/caolan/async/pull/1205). + +## New Features + +- Async is now modularized. Individual functions can be `require()`d from the main package. (`require('async/auto')`) ([#984](https://github.com/caolan/async/issues/984), [#996](https://github.com/caolan/async/issues/996)) +- Async is also available as a collection of ES2015 modules in the new `async-es` package. (`import {forEachSeries} from 'async-es'`) ([#984](https://github.com/caolan/async/issues/984), [#996](https://github.com/caolan/async/issues/996)) +- Added `race`, analogous to `Promise.race()`. It will run an array of async tasks in parallel and will call its callback with the result of the first task to respond. ([#568](https://github.com/caolan/async/issues/568), [#1038](https://github.com/caolan/async/issues/1038)) +- Collection methods now accept ES2015 iterators. Maps, Sets, and anything that implements the iterator spec can now be passed directly to `each`, `map`, `parallel`, etc.. ([#579](https://github.com/caolan/async/issues/579), [#839](https://github.com/caolan/async/issues/839), [#1074](https://github.com/caolan/async/issues/1074)) +- Added `mapValues`, for mapping over the properties of an object and returning an object with the same keys. ([#1157](https://github.com/caolan/async/issues/1157), [#1177](https://github.com/caolan/async/issues/1177)) +- Added `timeout`, a wrapper for an async function that will make the task time-out after the specified time. ([#1007](https://github.com/caolan/async/issues/1007), [#1027](https://github.com/caolan/async/issues/1027)) +- Added `reflect` and `reflectAll`, analagous to [`Promise.reflect()`](http://bluebirdjs.com/docs/api/reflect.html), a wrapper for async tasks that always succeeds, by gathering results and errors into an object. ([#942](https://github.com/caolan/async/issues/942), [#1012](https://github.com/caolan/async/issues/1012), [#1095](https://github.com/caolan/async/issues/1095)) +- `constant` supports dynamic arguments -- it will now always use its last argument as the callback. ([#1016](https://github.com/caolan/async/issues/1016), [#1052](https://github.com/caolan/async/issues/1052)) +- `setImmediate` and `nextTick` now support arguments to partially apply to the deferred function, like the node-native versions do. ([#940](https://github.com/caolan/async/issues/940), [#1053](https://github.com/caolan/async/issues/1053)) +- `auto` now supports resolving cyclic dependencies using [Kahn's algorithm](https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm) ([#1140](https://github.com/caolan/async/issues/1140)). +- Added `autoInject`, a relative of `auto` that automatically spreads a task's dependencies as arguments to the task function. ([#608](https://github.com/caolan/async/issues/608), [#1055](https://github.com/caolan/async/issues/1055), [#1099](https://github.com/caolan/async/issues/1099), [#1100](https://github.com/caolan/async/issues/1100)) +- You can now limit the concurrency of `auto` tasks. ([#635](https://github.com/caolan/async/issues/635), [#637](https://github.com/caolan/async/issues/637)) +- Added `retryable`, a relative of `retry` that wraps an async function, making it retry when called. ([#1058](https://github.com/caolan/async/issues/1058)) +- `retry` now supports specifying a function that determines the next time interval, useful for exponential backoff, logging and other retry strategies. ([#1161](https://github.com/caolan/async/issues/1161)) +- `retry` will now pass all of the arguments the task function was resolved with to the callback ([#1231](https://github.com/caolan/async/issues/1231)). +- Added `q.unsaturated` -- callback called when a `queue`'s number of running workers falls below a threshold. ([#868](https://github.com/caolan/async/issues/868), [#1030](https://github.com/caolan/async/issues/1030), [#1033](https://github.com/caolan/async/issues/1033), [#1034](https://github.com/caolan/async/issues/1034)) +- Added `q.error` -- a callback called whenever a `queue` task calls its callback with an error. ([#1170](https://github.com/caolan/async/issues/1170)) +- `applyEach` and `applyEachSeries` now pass results to the final callback. ([#1088](https://github.com/caolan/async/issues/1088)) + +## Breaking changes + +- Calling a callback more than once is considered an error, and an error will be thrown. This had an explicit breaking change in `waterfall`. If you were relying on this behavior, you should more accurately represent your control flow as an event emitter or stream. ([#814](https://github.com/caolan/async/issues/814), [#815](https://github.com/caolan/async/issues/815), [#1048](https://github.com/caolan/async/issues/1048), [#1050](https://github.com/caolan/async/issues/1050)) +- `auto` task functions now always take the callback as the last argument. If a task has dependencies, the `results` object will be passed as the first argument. To migrate old task functions, wrap them with [`_.flip`](https://lodash.com/docs#flip) ([#1036](https://github.com/caolan/async/issues/1036), [#1042](https://github.com/caolan/async/issues/1042)) +- Internal `setImmediate` calls have been refactored away. This may make existing flows vulnerable to stack overflows if you use many synchronous functions in series. Use `ensureAsync` to work around this. ([#696](https://github.com/caolan/async/issues/696), [#704](https://github.com/caolan/async/issues/704), [#1049](https://github.com/caolan/async/issues/1049), [#1050](https://github.com/caolan/async/issues/1050)) +- `map` used to return an object when iterating over an object. `map` now always returns an array, like in other libraries. The previous object behavior has been split out into `mapValues`. ([#1157](https://github.com/caolan/async/issues/1157), [#1177](https://github.com/caolan/async/issues/1177)) +- `filter`, `reject`, `some`, `every`, `detect` and their families like `{METHOD}Series` and `{METHOD}Limit` now expect an error as the first callback argument, rather than just a simple boolean. Pass `null` as the first argument, or use `fs.access` instead of `fs.exists`. ([#118](https://github.com/caolan/async/issues/118), [#774](https://github.com/caolan/async/issues/774), [#1028](https://github.com/caolan/async/issues/1028), [#1041](https://github.com/caolan/async/issues/1041)) +- `{METHOD}` and `{METHOD}Series` are now implemented in terms of `{METHOD}Limit`. This is a major internal simplification, and is not expected to cause many problems, but it does subtly affect how functions execute internally. ([#778](https://github.com/caolan/async/issues/778), [#847](https://github.com/caolan/async/issues/847)) +- `retry`'s callback is now optional. Previously, omitting the callback would partially apply the function, meaning it could be passed directly as a task to `series` or `auto`. The partially applied "control-flow" behavior has been separated out into `retryable`. ([#1054](https://github.com/caolan/async/issues/1054), [#1058](https://github.com/caolan/async/issues/1058)) +- The test function for `whilst`, `until`, and `during` used to be passed non-error args from the iteratee function's callback, but this led to weirdness where the first call of the test function would be passed no args. We have made it so the test function is never passed extra arguments, and only the `doWhilst`, `doUntil`, and `doDuring` functions pass iteratee callback arguments to the test function ([#1217](https://github.com/caolan/async/issues/1217), [#1224](https://github.com/caolan/async/issues/1224)) +- The `q.tasks` array has been renamed `q._tasks` and is now implemented as a doubly linked list (DLL). Any code that used to interact with this array will need to be updated to either use the provided helpers or support DLLs ([#1205](https://github.com/caolan/async/issues/1205)). +- The timing of the `q.saturated()` callback in a `queue` has been modified to better reflect when tasks pushed to the queue will start queueing. ([#724](https://github.com/caolan/async/issues/724), [#1078](https://github.com/caolan/async/issues/1078)) +- Removed `iterator` method in favour of [ES2015 iterator protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators ) which natively supports arrays ([#1237](https://github.com/caolan/async/issues/1237)) +- Dropped support for Component, Jam, SPM, and Volo ([#1175](https://github.com/caolan/async/issues/1175), #[#176](https://github.com/caolan/async/issues/176)) + +## Bug Fixes + +- Improved handling of no dependency cases in `auto` & `autoInject` ([#1147](https://github.com/caolan/async/issues/1147)). +- Fixed a bug where the callback generated by `asyncify` with `Promises` could resolve twice ([#1197](https://github.com/caolan/async/issues/1197)). +- Fixed several documented optional callbacks not actually being optional ([#1223](https://github.com/caolan/async/issues/1223)). + +## Other + +- Added `someSeries` and `everySeries` for symmetry, as well as a complete set of `any`/`anyLimit`/`anySeries` and `all`/`/allLmit`/`allSeries` aliases. +- Added `find` as an alias for `detect. (as well as `findLimit` and `findSeries`). +- Various doc fixes ([#1005](https://github.com/caolan/async/issues/1005), [#1008](https://github.com/caolan/async/issues/1008), [#1010](https://github.com/caolan/async/issues/1010), [#1015](https://github.com/caolan/async/issues/1015), [#1021](https://github.com/caolan/async/issues/1021), [#1037](https://github.com/caolan/async/issues/1037), [#1039](https://github.com/caolan/async/issues/1039), [#1051](https://github.com/caolan/async/issues/1051), [#1102](https://github.com/caolan/async/issues/1102), [#1107](https://github.com/caolan/async/issues/1107), [#1121](https://github.com/caolan/async/issues/1121), [#1123](https://github.com/caolan/async/issues/1123), [#1129](https://github.com/caolan/async/issues/1129), [#1135](https://github.com/caolan/async/issues/1135), [#1138](https://github.com/caolan/async/issues/1138), [#1141](https://github.com/caolan/async/issues/1141), [#1153](https://github.com/caolan/async/issues/1153), [#1216](https://github.com/caolan/async/issues/1216), [#1217](https://github.com/caolan/async/issues/1217), [#1232](https://github.com/caolan/async/issues/1232), [#1233](https://github.com/caolan/async/issues/1233), [#1236](https://github.com/caolan/async/issues/1236), [#1238](https://github.com/caolan/async/issues/1238)) + +Thank you [**@aearly**](github.com/aearly) and [**@megawac**](github.com/megawac) for taking the lead on version 2 of async. + +------------------------------------------ + +# v1.5.2 +- Allow using `"constructor"` as an argument in `memoize` ([#998](https://github.com/caolan/async/issues/998)) +- Give a better error messsage when `auto` dependency checking fails ([#994](https://github.com/caolan/async/issues/994)) +- Various doc updates ([#936](https://github.com/caolan/async/issues/936), [#956](https://github.com/caolan/async/issues/956), [#979](https://github.com/caolan/async/issues/979), [#1002](https://github.com/caolan/async/issues/1002)) + +# v1.5.1 +- Fix issue with `pause` in `queue` with concurrency enabled ([#946](https://github.com/caolan/async/issues/946)) +- `while` and `until` now pass the final result to callback ([#963](https://github.com/caolan/async/issues/963)) +- `auto` will properly handle concurrency when there is no callback ([#966](https://github.com/caolan/async/issues/966)) +- `auto` will no. properly stop execution when an error occurs ([#988](https://github.com/caolan/async/issues/988), [#993](https://github.com/caolan/async/issues/993)) +- Various doc fixes ([#971](https://github.com/caolan/async/issues/971), [#980](https://github.com/caolan/async/issues/980)) + +# v1.5.0 + +- Added `transform`, analogous to [`_.transform`](http://lodash.com/docs#transform) ([#892](https://github.com/caolan/async/issues/892)) +- `map` now returns an object when an object is passed in, rather than array with non-numeric keys. `map` will begin always returning an array with numeric indexes in the next major release. ([#873](https://github.com/caolan/async/issues/873)) +- `auto` now accepts an optional `concurrency` argument to limit the number o. running tasks ([#637](https://github.com/caolan/async/issues/637)) +- Added `queue#workersList()`, to retrieve the lis. of currently running tasks. ([#891](https://github.com/caolan/async/issues/891)) +- Various code simplifications ([#896](https://github.com/caolan/async/issues/896), [#904](https://github.com/caolan/async/issues/904)) +- Various doc fixes :scroll: ([#890](https://github.com/caolan/async/issues/890), [#894](https://github.com/caolan/async/issues/894), [#903](https://github.com/caolan/async/issues/903), [#905](https://github.com/caolan/async/issues/905), [#912](https://github.com/caolan/async/issues/912)) + +# v1.4.2 + +- Ensure coverage files don't get published on npm ([#879](https://github.com/caolan/async/issues/879)) + +# v1.4.1 + +- Add in overlooked `detectLimit` method ([#866](https://github.com/caolan/async/issues/866)) +- Removed unnecessary files from npm releases ([#861](https://github.com/caolan/async/issues/861)) +- Removed usage of a reserved word to prevent :boom: in older environments ([#870](https://github.com/caolan/async/issues/870)) + +# v1.4.0 + +- `asyncify` now supports promises ([#840](https://github.com/caolan/async/issues/840)) +- Added `Limit` versions of `filter` and `reject` ([#836](https://github.com/caolan/async/issues/836)) +- Add `Limit` versions of `detect`, `some` and `every` ([#828](https://github.com/caolan/async/issues/828), [#829](https://github.com/caolan/async/issues/829)) +- `some`, `every` and `detect` now short circuit early ([#828](https://github.com/caolan/async/issues/828), [#829](https://github.com/caolan/async/issues/829)) +- Improve detection of the global object ([#804](https://github.com/caolan/async/issues/804)), enabling use in WebWorkers +- `whilst` now called with arguments from iterator ([#823](https://github.com/caolan/async/issues/823)) +- `during` now gets called with arguments from iterator ([#824](https://github.com/caolan/async/issues/824)) +- Code simplifications and optimizations aplenty ([diff](https://github.com/caolan/async/compare/v1.3.0...v1.4.0)) + + +# v1.3.0 + +New Features: +- Added `constant` +- Added `asyncify`/`wrapSync` for making sync functions work with callbacks. ([#671](https://github.com/caolan/async/issues/671), [#806](https://github.com/caolan/async/issues/806)) +- Added `during` and `doDuring`, which are like `whilst` with an async truth test. ([#800](https://github.com/caolan/async/issues/800)) +- `retry` now accepts an `interval` parameter to specify a delay between retries. ([#793](https://github.com/caolan/async/issues/793)) +- `async` should work better in Web Workers due to better `root` detection ([#804](https://github.com/caolan/async/issues/804)) +- Callbacks are now optional in `whilst`, `doWhilst`, `until`, and `doUntil` ([#642](https://github.com/caolan/async/issues/642)) +- Various internal updates ([#786](https://github.com/caolan/async/issues/786), [#801](https://github.com/caolan/async/issues/801), [#802](https://github.com/caolan/async/issues/802), [#803](https://github.com/caolan/async/issues/803)) +- Various doc fixes ([#790](https://github.com/caolan/async/issues/790), [#794](https://github.com/caolan/async/issues/794)) + +Bug Fixes: +- `cargo` now exposes the `payload` size, and `cargo.payload` can be changed on the fly after the `cargo` is created. ([#740](https://github.com/caolan/async/issues/740), [#744](https://github.com/caolan/async/issues/744), [#783](https://github.com/caolan/async/issues/783)) + + +# v1.2.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. ([#782](https://github.com/caolan/async/issues/782)) + + +# v1.2.0 + +New Features: + +- Added `timesLimit` ([#743](https://github.com/caolan/async/issues/743)) +- `concurrency` can be changed after initialization in `queue` by setting `q.concurrency`. The new concurrency will be reflected the next time a task is processed. ([#747](https://github.com/caolan/async/issues/747), [#772](https://github.com/caolan/async/issues/772)) + +Bug Fixes: + +- Fixed a regression in `each` and family with empty arrays that have additional properties. ([#775](https://github.com/caolan/async/issues/775), [#777](https://github.com/caolan/async/issues/777)) + + +# v1.1.1 + +Bug Fix: + +- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. ([#782](https://github.com/caolan/async/issues/782)) + + +# v1.1.0 + +New Features: + +- `cargo` now supports all of the same methods and event callbacks as `queue`. +- Added `ensureAsync` - A wrapper that ensures an async function calls its callback on a later tick. ([#769](https://github.com/caolan/async/issues/769)) +- Optimized `map`, `eachOf`, and `waterfall` families of functions +- Passing a `null` or `undefined` array to `map`, `each`, `parallel` and families will be treated as an empty array ([#667](https://github.com/caolan/async/issues/667)). +- The callback is now optional for the composed results of `compose` and `seq`. ([#618](https://github.com/caolan/async/issues/618)) +- Reduced file size by 4kb, (minified version by 1kb) +- Added code coverage through `nyc` and `coveralls` ([#768](https://github.com/caolan/async/issues/768)) + +Bug Fixes: + +- `forever` will no longer stack overflow with a synchronous iterator ([#622](https://github.com/caolan/async/issues/622)) +- `eachLimit` and other limit functions will stop iterating once an error occurs ([#754](https://github.com/caolan/async/issues/754)) +- Always pass `null` in callbacks when there is no error ([#439](https://github.com/caolan/async/issues/439)) +- Ensure proper conditions when calling `drain()` after pushing an empty data set to a queue ([#668](https://github.com/caolan/async/issues/668)) +- `each` and family will properly handle an empty array ([#578](https://github.com/caolan/async/issues/578)) +- `eachSeries` and family will finish if the underlying array is modified during execution ([#557](https://github.com/caolan/async/issues/557)) +- `queue` will throw if a non-function is passed to `q.push()` ([#593](https://github.com/caolan/async/issues/593)) +- Doc fixes ([#629](https://github.com/caolan/async/issues/629), [#766](https://github.com/caolan/async/issues/766)) + + +# v1.0.0 + +No known breaking changes, we are simply complying with semver from here on out. + +Changes: + +- Start using a changelog! +- Add `forEachOf` for iterating over Objects (or to iterate Arrays with indexes available) ([#168](https://github.com/caolan/async/issues/168) [#704](https://github.com/caolan/async/issues/704) [#321](https://github.com/caolan/async/issues/321)) +- Detect deadlocks in `auto` ([#663](https://github.com/caolan/async/issues/663)) +- Better support for require.js ([#527](https://github.com/caolan/async/issues/527)) +- Throw if queue created with concurrency `0` ([#714](https://github.com/caolan/async/issues/714)) +- Fix unneeded iteration in `queue.resume()` ([#758](https://github.com/caolan/async/issues/758)) +- Guard against timer mocking overriding `setImmediate` ([#609](https://github.com/caolan/async/issues/609) [#611](https://github.com/caolan/async/issues/611)) +- Miscellaneous doc fixes ([#542](https://github.com/caolan/async/issues/542) [#596](https://github.com/caolan/async/issues/596) [#615](https://github.com/caolan/async/issues/615) [#628](https://github.com/caolan/async/issues/628) [#631](https://github.com/caolan/async/issues/631) [#690](https://github.com/caolan/async/issues/690) [#729](https://github.com/caolan/async/issues/729)) +- Use single noop function internally ([#546](https://github.com/caolan/async/issues/546)) +- Optimize internal `_each`, `_map` and `_keys` functions. diff --git a/node_backend/node_modules/async/LICENSE b/node_backend/node_modules/async/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..b18aed69219562718858d972467ba0a68b1ce178 --- /dev/null +++ b/node_backend/node_modules/async/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010-2018 Caolan McMahon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_backend/node_modules/async/README.md b/node_backend/node_modules/async/README.md new file mode 100644 index 0000000000000000000000000000000000000000..55a0626de4acb1b94f3e39a0b547bc2bdf6dcf95 --- /dev/null +++ b/node_backend/node_modules/async/README.md @@ -0,0 +1,59 @@ +![Async Logo](https://raw.githubusercontent.com/caolan/async/master/logo/async-logo_readme.jpg) + +![Github Actions CI status](https://github.com/caolan/async/actions/workflows/ci.yml/badge.svg) +[![NPM version](https://img.shields.io/npm/v/async.svg)](https://www.npmjs.com/package/async) +[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master) +[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/async/badge?style=rounded)](https://www.jsdelivr.com/package/npm/async) + + + +Async is a utility module which provides straight-forward, powerful functions for working with [asynchronous JavaScript](http://caolan.github.io/async/v3/global.html). Although originally designed for use with [Node.js](https://nodejs.org/) and installable via `npm i async`, it can also be used directly in the browser. An ESM/MJS version is included in the main `async` package that should automatically be used with compatible bundlers such as Webpack and Rollup. + +A pure ESM version of Async is available as [`async-es`](https://www.npmjs.com/package/async-es). + +For Documentation, visit + +*For Async v1.5.x documentation, go [HERE](https://github.com/caolan/async/blob/v1.5.2/README.md)* + + +```javascript +// for use with Node-style callbacks... +var async = require("async"); + +var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; +var configs = {}; + +async.forEachOf(obj, (value, key, callback) => { + fs.readFile(__dirname + value, "utf8", (err, data) => { + if (err) return callback(err); + try { + configs[key] = JSON.parse(data); + } catch (e) { + return callback(e); + } + callback(); + }); +}, err => { + if (err) console.error(err.message); + // configs is now a map of JSON data + doSomethingWith(configs); +}); +``` + +```javascript +var async = require("async"); + +// ...or ES2017 async functions +async.mapLimit(urls, 5, async function(url) { + const response = await fetch(url) + return response.body +}, (err, results) => { + if (err) throw err + // results is now an array of the response bodies + console.log(results) +}) +``` diff --git a/node_backend/node_modules/async/all.js b/node_backend/node_modules/async/all.js new file mode 100644 index 0000000000000000000000000000000000000000..622b301941b95c7c756a5f8b98a3116b3a07b908 --- /dev/null +++ b/node_backend/node_modules/async/all.js @@ -0,0 +1,119 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns `true` if every element in `coll` satisfies an async test. If any + * iteratee call returns `false`, the main `callback` is immediately called. + * + * @name every + * @static + * @memberOf module:Collections + * @method + * @alias all + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file4.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.every(fileList, fileExists, function(err, result) { + * console.log(result); + * // true + * // result is true since every file exists + * }); + * + * async.every(withMissingFileList, fileExists, function(err, result) { + * console.log(result); + * // false + * // result is false since NOT every file exists + * }); + * + * // Using Promises + * async.every(fileList, fileExists) + * .then( result => { + * console.log(result); + * // true + * // result is true since every file exists + * }).catch( err => { + * console.log(err); + * }); + * + * async.every(withMissingFileList, fileExists) + * .then( result => { + * console.log(result); + * // false + * // result is false since NOT every file exists + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.every(fileList, fileExists); + * console.log(result); + * // true + * // result is true since every file exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + * async () => { + * try { + * let result = await async.every(withMissingFileList, fileExists); + * console.log(result); + * // false + * // result is false since NOT every file exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function every(coll, iteratee, callback) { + return (0, _createTester2.default)(bool => !bool, res => !res)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(every, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/allLimit.js b/node_backend/node_modules/async/allLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..375e126021af6f8f30ebee8fa4e9bd61d5d0be29 --- /dev/null +++ b/node_backend/node_modules/async/allLimit.js @@ -0,0 +1,46 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. + * + * @name everyLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function everyLimit(coll, limit, iteratee, callback) { + return (0, _createTester2.default)(bool => !bool, res => !res)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(everyLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/allSeries.js b/node_backend/node_modules/async/allSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..9a6bf7d468409fd7bf6c77aba5cb2e79f32e1847 --- /dev/null +++ b/node_backend/node_modules/async/allSeries.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. + * + * @name everySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in series. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function everySeries(coll, iteratee, callback) { + return (0, _createTester2.default)(bool => !bool, res => !res)(_eachOfSeries2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(everySeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/any.js b/node_backend/node_modules/async/any.js new file mode 100644 index 0000000000000000000000000000000000000000..a5bd328abe14685f2a467aa57e630be88158476f --- /dev/null +++ b/node_backend/node_modules/async/any.js @@ -0,0 +1,122 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // true + * // result is true since some file in the list exists + * } + *); + * + * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // false + * // result is false since none of the files exists + * } + *); + * + * // Using Promises + * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists) + * .then( result => { + * console.log(result); + * // true + * // result is true since some file in the list exists + * }).catch( err => { + * console.log(err); + * }); + * + * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists) + * .then( result => { + * console.log(result); + * // false + * // result is false since none of the files exists + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists); + * console.log(result); + * // true + * // result is true since some file in the list exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + * async () => { + * try { + * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists); + * console.log(result); + * // false + * // result is false since none of the files exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function some(coll, iteratee, callback) { + return (0, _createTester2.default)(Boolean, res => res)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(some, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/anyLimit.js b/node_backend/node_modules/async/anyLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..3a8096fdaac1b272d6a66ab985ff22dec372dd73 --- /dev/null +++ b/node_backend/node_modules/async/anyLimit.js @@ -0,0 +1,47 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function someLimit(coll, limit, iteratee, callback) { + return (0, _createTester2.default)(Boolean, res => res)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(someLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/anySeries.js b/node_backend/node_modules/async/anySeries.js new file mode 100644 index 0000000000000000000000000000000000000000..51aad19bdc2a5fc65cced4db170d273d94ba5790 --- /dev/null +++ b/node_backend/node_modules/async/anySeries.js @@ -0,0 +1,46 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. + * + * @name someSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anySeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in series. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function someSeries(coll, iteratee, callback) { + return (0, _createTester2.default)(Boolean, res => res)(_eachOfSeries2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(someSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/apply.js b/node_backend/node_modules/async/apply.js new file mode 100644 index 0000000000000000000000000000000000000000..d40784f303af9f79ab899f810f3154b236251624 --- /dev/null +++ b/node_backend/node_modules/async/apply.js @@ -0,0 +1,11 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (fn, ...args) { + return (...callArgs) => fn(...args, ...callArgs); +}; + +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/applyEach.js b/node_backend/node_modules/async/applyEach.js new file mode 100644 index 0000000000000000000000000000000000000000..841842c8b488777c87028f594ef464305b44cd74 --- /dev/null +++ b/node_backend/node_modules/async/applyEach.js @@ -0,0 +1,57 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _applyEach = require('./internal/applyEach.js'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _map = require('./map.js'); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Applies the provided arguments to each function in the array, calling + * `callback` after all functions have completed. If you only provide the first + * argument, `fns`, then it will return a function which lets you pass in the + * arguments as if it were a single function call. If more arguments are + * provided, `callback` is required while `args` is still optional. The results + * for each of the applied async functions are passed to the final callback + * as an array. + * + * @name applyEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s + * to all call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {AsyncFunction} - Returns a function that takes no args other than + * an optional callback, that is the result of applying the `args` to each + * of the functions. + * @example + * + * const appliedFn = async.applyEach([enableSearch, updateSchema], 'bucket') + * + * appliedFn((err, results) => { + * // results[0] is the results for `enableSearch` + * // results[1] is the results for `updateSchema` + * }); + * + * // partial application example: + * async.each( + * buckets, + * async (bucket) => async.applyEach([enableSearch, updateSchema], bucket)(), + * callback + * ); + */ +exports.default = (0, _applyEach2.default)(_map2.default); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/applyEachSeries.js b/node_backend/node_modules/async/applyEachSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..f5267f67f427b8f5b738830c67aad76ba6b94b7b --- /dev/null +++ b/node_backend/node_modules/async/applyEachSeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _applyEach = require('./internal/applyEach.js'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _mapSeries = require('./mapSeries.js'); + +var _mapSeries2 = _interopRequireDefault(_mapSeries); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time. + * + * @name applyEachSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.applyEach]{@link module:ControlFlow.applyEach} + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s to all + * call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {AsyncFunction} - A function, that when called, is the result of + * appling the `args` to the list of functions. It takes no args, other than + * a callback. + */ +exports.default = (0, _applyEach2.default)(_mapSeries2.default); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/asyncify.js b/node_backend/node_modules/async/asyncify.js new file mode 100644 index 0000000000000000000000000000000000000000..ddc3f02ff2c1367d97e8a8a5e0a1cff2d19cac20 --- /dev/null +++ b/node_backend/node_modules/async/asyncify.js @@ -0,0 +1,118 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = asyncify; + +var _initialParams = require('./internal/initialParams.js'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _setImmediate = require('./internal/setImmediate.js'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + if ((0, _wrapAsync.isAsync)(func)) { + return function (...args /*, callback*/) { + const callback = args.pop(); + const promise = func.apply(this, args); + return handlePromise(promise, callback); + }; + } + + return (0, _initialParams2.default)(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if (result && typeof result.then === 'function') { + return handlePromise(result, callback); + } else { + callback(null, result); + } + }); +} + +function handlePromise(promise, callback) { + return promise.then(value => { + invokeCallback(callback, null, value); + }, err => { + invokeCallback(callback, err && (err instanceof Error || err.message) ? err : new Error(err)); + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (err) { + (0, _setImmediate2.default)(e => { + throw e; + }, err); + } +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/auto.js b/node_backend/node_modules/async/auto.js new file mode 100644 index 0000000000000000000000000000000000000000..163c4f278121ba19fe88c66cda97a33782312ce0 --- /dev/null +++ b/node_backend/node_modules/async/auto.js @@ -0,0 +1,333 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = auto; + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _onlyOnce = require('./internal/onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _promiseCallback = require('./internal/promiseCallback.js'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on + * their requirements. Each function can optionally depend on other functions + * being completed first, and each function is run as soon as its requirements + * are satisfied. + * + * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence + * will stop. Further tasks will not execute (so any other functions depending + * on it will not run), and the main `callback` is immediately called with the + * error. + * + * {@link AsyncFunction}s also receive an object containing the results of functions which + * have completed so far as the first argument, if they have dependencies. If a + * task function has no dependencies, it will only be passed a callback. + * + * @name auto + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Object} tasks - An object. Each of its properties is either a + * function or an array of requirements, with the {@link AsyncFunction} itself the last item + * in the array. The object's key of a property serves as the name of the task + * defined by that property, i.e. can be used when specifying requirements for + * other tasks. The function receives one or two arguments: + * * a `results` object, containing the results of the previously executed + * functions, only passed if the task has any dependencies, + * * a `callback(err, result)` function, which must be called when finished, + * passing an `error` (which can be `null`) and the result of the function's + * execution. + * @param {number} [concurrency=Infinity] - An optional `integer` for + * determining the maximum number of tasks that can be run in parallel. By + * default, as many as possible. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback. Results are always returned; however, if an + * error occurs, no further `tasks` will be performed, and the results object + * will only contain partial results. Invoked with (err, results). + * @returns {Promise} a promise, if a callback is not passed + * @example + * + * //Using Callbacks + * async.auto({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * // once the file is written let's email a link to it... + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }, function(err, results) { + * if (err) { + * console.log('err = ', err); + * } + * console.log('results = ', results); + * // results = { + * // get_data: ['data', 'converted to array'] + * // make_folder; 'folder', + * // write_file: 'filename' + * // email_link: { file: 'filename', email: 'user@example.com' } + * // } + * }); + * + * //Using Promises + * async.auto({ + * get_data: function(callback) { + * console.log('in get_data'); + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * console.log('in make_folder'); + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * // once the file is written let's email a link to it... + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }).then(results => { + * console.log('results = ', results); + * // results = { + * // get_data: ['data', 'converted to array'] + * // make_folder; 'folder', + * // write_file: 'filename' + * // email_link: { file: 'filename', email: 'user@example.com' } + * // } + * }).catch(err => { + * console.log('err = ', err); + * }); + * + * //Using async/await + * async () => { + * try { + * let results = await async.auto({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * // once the file is written let's email a link to it... + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }); + * console.log('results = ', results); + * // results = { + * // get_data: ['data', 'converted to array'] + * // make_folder; 'folder', + * // write_file: 'filename' + * // email_link: { file: 'filename', email: 'user@example.com' } + * // } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function auto(tasks, concurrency, callback) { + if (typeof concurrency !== 'number') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = (0, _once2.default)(callback || (0, _promiseCallback.promiseCallback)()); + var numTasks = Object.keys(tasks).length; + if (!numTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = numTasks; + } + + var results = {}; + var runningTasks = 0; + var canceled = false; + var hasError = false; + + var listeners = Object.create(null); + + var readyTasks = []; + + // for cycle detection: + var readyToCheck = []; // tasks that have been identified as reachable + // without the possibility of returning to an ancestor task + var uncheckedDependencies = {}; + + Object.keys(tasks).forEach(key => { + var task = tasks[key]; + if (!Array.isArray(task)) { + // no dependencies + enqueueTask(key, [task]); + readyToCheck.push(key); + return; + } + + var dependencies = task.slice(0, task.length - 1); + var remainingDependencies = dependencies.length; + if (remainingDependencies === 0) { + enqueueTask(key, task); + readyToCheck.push(key); + return; + } + uncheckedDependencies[key] = remainingDependencies; + + dependencies.forEach(dependencyName => { + if (!tasks[dependencyName]) { + throw new Error('async.auto task `' + key + '` has a non-existent dependency `' + dependencyName + '` in ' + dependencies.join(', ')); + } + addListener(dependencyName, () => { + remainingDependencies--; + if (remainingDependencies === 0) { + enqueueTask(key, task); + } + }); + }); + }); + + checkForDeadlocks(); + processQueue(); + + function enqueueTask(key, task) { + readyTasks.push(() => runTask(key, task)); + } + + function processQueue() { + if (canceled) return; + if (readyTasks.length === 0 && runningTasks === 0) { + return callback(null, results); + } + while (readyTasks.length && runningTasks < concurrency) { + var run = readyTasks.shift(); + run(); + } + } + + function addListener(taskName, fn) { + var taskListeners = listeners[taskName]; + if (!taskListeners) { + taskListeners = listeners[taskName] = []; + } + + taskListeners.push(fn); + } + + function taskComplete(taskName) { + var taskListeners = listeners[taskName] || []; + taskListeners.forEach(fn => fn()); + processQueue(); + } + + function runTask(key, task) { + if (hasError) return; + + var taskCallback = (0, _onlyOnce2.default)((err, ...result) => { + runningTasks--; + if (err === false) { + canceled = true; + return; + } + if (result.length < 2) { + [result] = result; + } + if (err) { + var safeResults = {}; + Object.keys(results).forEach(rkey => { + safeResults[rkey] = results[rkey]; + }); + safeResults[key] = result; + hasError = true; + listeners = Object.create(null); + if (canceled) return; + callback(err, safeResults); + } else { + results[key] = result; + taskComplete(key); + } + }); + + runningTasks++; + var taskFn = (0, _wrapAsync2.default)(task[task.length - 1]); + if (task.length > 1) { + taskFn(results, taskCallback); + } else { + taskFn(taskCallback); + } + } + + function checkForDeadlocks() { + // Kahn's algorithm + // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm + // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html + var currentTask; + var counter = 0; + while (readyToCheck.length) { + currentTask = readyToCheck.pop(); + counter++; + getDependents(currentTask).forEach(dependent => { + if (--uncheckedDependencies[dependent] === 0) { + readyToCheck.push(dependent); + } + }); + } + + if (counter !== numTasks) { + throw new Error('async.auto cannot execute tasks due to a recursive dependency'); + } + } + + function getDependents(taskName) { + var result = []; + Object.keys(tasks).forEach(key => { + const task = tasks[key]; + if (Array.isArray(task) && task.indexOf(taskName) >= 0) { + result.push(key); + } + }); + return result; + } + + return callback[_promiseCallback.PROMISE_SYMBOL]; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/autoInject.js b/node_backend/node_modules/async/autoInject.js new file mode 100644 index 0000000000000000000000000000000000000000..5db2653ae6333c9d10375170797da57e10caf3bf --- /dev/null +++ b/node_backend/node_modules/async/autoInject.js @@ -0,0 +1,182 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = autoInject; + +var _auto = require('./auto.js'); + +var _auto2 = _interopRequireDefault(_auto); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var FN_ARGS = /^(?:async\s)?(?:function)?\s*(?:\w+\s*)?\(([^)]+)\)(?:\s*{)/; +var ARROW_FN_ARGS = /^(?:async\s)?\s*(?:\(\s*)?((?:[^)=\s]\s*)*)(?:\)\s*)?=>/; +var FN_ARG_SPLIT = /,/; +var FN_ARG = /(=.+)?(\s*)$/; + +function stripComments(string) { + let stripped = ''; + let index = 0; + let endBlockComment = string.indexOf('*/'); + while (index < string.length) { + if (string[index] === '/' && string[index + 1] === '/') { + // inline comment + let endIndex = string.indexOf('\n', index); + index = endIndex === -1 ? string.length : endIndex; + } else if (endBlockComment !== -1 && string[index] === '/' && string[index + 1] === '*') { + // block comment + let endIndex = string.indexOf('*/', index); + if (endIndex !== -1) { + index = endIndex + 2; + endBlockComment = string.indexOf('*/', index); + } else { + stripped += string[index]; + index++; + } + } else { + stripped += string[index]; + index++; + } + } + return stripped; +} + +function parseParams(func) { + const src = stripComments(func.toString()); + let match = src.match(FN_ARGS); + if (!match) { + match = src.match(ARROW_FN_ARGS); + } + if (!match) throw new Error('could not parse args in autoInject\nSource:\n' + src); + let [, args] = match; + return args.replace(/\s/g, '').split(FN_ARG_SPLIT).map(arg => arg.replace(FN_ARG, '').trim()); +} + +/** + * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent + * tasks are specified as parameters to the function, after the usual callback + * parameter, with the parameter names matching the names of the tasks it + * depends on. This can provide even more readable task graphs which can be + * easier to maintain. + * + * If a final callback is specified, the task results are similarly injected, + * specified as named parameters after the initial error parameter. + * + * The autoInject function is purely syntactic sugar and its semantics are + * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}. + * + * @name autoInject + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.auto]{@link module:ControlFlow.auto} + * @category Control Flow + * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of + * the form 'func([dependencies...], callback). The object's key of a property + * serves as the name of the task defined by that property, i.e. can be used + * when specifying requirements for other tasks. + * * The `callback` parameter is a `callback(err, result)` which must be called + * when finished, passing an `error` (which can be `null`) and the result of + * the function's execution. The remaining parameters name other tasks on + * which the task is dependent, and the results from those tasks are the + * arguments of those parameters. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback, and a `results` object with any completed + * task results, similar to `auto`. + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // The example from `auto` can be rewritten as follows: + * async.autoInject({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: function(get_data, make_folder, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }, + * email_link: function(write_file, callback) { + * // once the file is written let's email a link to it... + * // write_file contains the filename returned by write_file. + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * } + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + * + * // If you are using a JS minifier that mangles parameter names, `autoInject` + * // will not work with plain functions, since the parameter names will be + * // collapsed to a single letter identifier. To work around this, you can + * // explicitly specify the names of the parameters your task function needs + * // in an array, similar to Angular.js dependency injection. + * + * // This still has an advantage over plain `auto`, since the results a task + * // depends on are still spread into arguments. + * async.autoInject({ + * //... + * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) { + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(write_file, callback) { + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * }] + * //... + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + */ +function autoInject(tasks, callback) { + var newTasks = {}; + + Object.keys(tasks).forEach(key => { + var taskFn = tasks[key]; + var params; + var fnIsAsync = (0, _wrapAsync.isAsync)(taskFn); + var hasNoDeps = !fnIsAsync && taskFn.length === 1 || fnIsAsync && taskFn.length === 0; + + if (Array.isArray(taskFn)) { + params = [...taskFn]; + taskFn = params.pop(); + + newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); + } else if (hasNoDeps) { + // no dependencies, use the function as-is + newTasks[key] = taskFn; + } else { + params = parseParams(taskFn); + if (taskFn.length === 0 && !fnIsAsync && params.length === 0) { + throw new Error("autoInject task functions require explicit parameters."); + } + + // remove callback param + if (!fnIsAsync) params.pop(); + + newTasks[key] = params.concat(newTask); + } + + function newTask(results, taskCb) { + var newArgs = params.map(name => results[name]); + newArgs.push(taskCb); + (0, _wrapAsync2.default)(taskFn)(...newArgs); + } + }); + + return (0, _auto2.default)(newTasks, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/bower.json b/node_backend/node_modules/async/bower.json new file mode 100644 index 0000000000000000000000000000000000000000..390c6502f581075c067713444865d08b81a8bbd5 --- /dev/null +++ b/node_backend/node_modules/async/bower.json @@ -0,0 +1,17 @@ +{ + "name": "async", + "main": "dist/async.js", + "ignore": [ + "bower_components", + "lib", + "test", + "node_modules", + "perf", + "support", + "**/.*", + "*.config.js", + "*.json", + "index.js", + "Makefile" + ] +} diff --git a/node_backend/node_modules/async/cargo.js b/node_backend/node_modules/async/cargo.js new file mode 100644 index 0000000000000000000000000000000000000000..d4abd214d0c117e72d5ca56f2a91a2a37489e3e4 --- /dev/null +++ b/node_backend/node_modules/async/cargo.js @@ -0,0 +1,63 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = cargo; + +var _queue = require('./internal/queue.js'); + +var _queue2 = _interopRequireDefault(_queue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Creates a `cargo` object with the specified payload. Tasks added to the + * cargo will be processed altogether (up to the `payload` limit). If the + * `worker` is in progress, the task is queued until it becomes available. Once + * the `worker` has completed some tasks, each callback of those tasks is + * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) + * for how `cargo` and `queue` work. + * + * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers + * at a time, cargo passes an array of tasks to a single worker, repeating + * when the worker is finished. + * + * @name cargo + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An asynchronous function for processing an array + * of queued tasks. Invoked with `(tasks, callback)`. + * @param {number} [payload=Infinity] - An optional `integer` for determining + * how many tasks should be processed per round; if omitted, the default is + * unlimited. + * @returns {module:ControlFlow.QueueObject} A cargo object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the cargo and inner queue. + * @example + * + * // create a cargo object with payload 2 + * var cargo = async.cargo(function(tasks, callback) { + * for (var i=0; i { + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * }).catch(err => { + * console.log(err); + * }); + * + * // Error Handling + * async.concat(withMissingDirectoryList, fs.readdir) + * .then(results => { + * console.log(results); + * }).catch(err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.concat(directoryList, fs.readdir); + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * } catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let results = await async.concat(withMissingDirectoryList, fs.readdir); + * console.log(results); + * } catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * } + * } + * + */ +function concat(coll, iteratee, callback) { + return (0, _concatLimit2.default)(coll, Infinity, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(concat, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/concatLimit.js b/node_backend/node_modules/async/concatLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..a27cc7d45ac5d77a8c275eedd60be2a162cb186c --- /dev/null +++ b/node_backend/node_modules/async/concatLimit.js @@ -0,0 +1,60 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _mapLimit = require('./mapLimit.js'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time. + * + * @name concatLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.concat]{@link module:Collections.concat} + * @category Collection + * @alias flatMapLimit + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`, + * which should use an array as its result. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + */ +function concatLimit(coll, limit, iteratee, callback) { + var _iteratee = (0, _wrapAsync2.default)(iteratee); + return (0, _mapLimit2.default)(coll, limit, (val, iterCb) => { + _iteratee(val, (err, ...args) => { + if (err) return iterCb(err); + return iterCb(err, args); + }); + }, (err, mapResults) => { + var result = []; + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + result = result.concat(...mapResults[i]); + } + } + + return callback(err, result); + }); +} +exports.default = (0, _awaitify2.default)(concatLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/concatSeries.js b/node_backend/node_modules/async/concatSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..332de3f3ec4fbfcc818a867872bfb09a34208659 --- /dev/null +++ b/node_backend/node_modules/async/concatSeries.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _concatLimit = require('./concatLimit.js'); + +var _concatLimit2 = _interopRequireDefault(_concatLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time. + * + * @name concatSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.concat]{@link module:Collections.concat} + * @category Collection + * @alias flatMapSeries + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`. + * The iteratee should complete with an array an array of results. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + */ +function concatSeries(coll, iteratee, callback) { + return (0, _concatLimit2.default)(coll, 1, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(concatSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/constant.js b/node_backend/node_modules/async/constant.js new file mode 100644 index 0000000000000000000000000000000000000000..ea406f65548b85e46185478e7481cf44d016855a --- /dev/null +++ b/node_backend/node_modules/async/constant.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (...args) { + return function (...ignoredArgs /*, callback*/) { + var callback = ignoredArgs.pop(); + return callback(null, ...args); + }; +}; + +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/detect.js b/node_backend/node_modules/async/detect.js new file mode 100644 index 0000000000000000000000000000000000000000..d5896ef6435296a9abad3e771b05a9b261e018f2 --- /dev/null +++ b/node_backend/node_modules/async/detect.js @@ -0,0 +1,96 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns the first value in `coll` that passes an async truth test. The + * `iteratee` is applied in parallel, meaning the first iteratee to return + * `true` will fire the detect `callback` with that result. That means the + * result might not be the first item in the original `coll` (in terms of order) + * that passes the test. + + * If order within the original `coll` is important, then look at + * [`detectSeries`]{@link module:Collections.detectSeries}. + * + * @name detect + * @static + * @memberOf module:Collections + * @method + * @alias find + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // dir1/file1.txt + * // result now equals the first file in the list that exists + * } + *); + * + * // Using Promises + * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists) + * .then(result => { + * console.log(result); + * // dir1/file1.txt + * // result now equals the first file in the list that exists + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists); + * console.log(result); + * // dir1/file1.txt + * // result now equals the file in the list that exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function detect(coll, iteratee, callback) { + return (0, _createTester2.default)(bool => bool, (res, item) => item)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(detect, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/detectLimit.js b/node_backend/node_modules/async/detectLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..c59843b6211ae6700bad86d4f73645c68b326bf4 --- /dev/null +++ b/node_backend/node_modules/async/detectLimit.js @@ -0,0 +1,48 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a + * time. + * + * @name detectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findLimit + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + */ +function detectLimit(coll, limit, iteratee, callback) { + return (0, _createTester2.default)(bool => bool, (res, item) => item)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(detectLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/detectSeries.js b/node_backend/node_modules/async/detectSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..b48689967577f3d02265ed5053a013569be6d9ab --- /dev/null +++ b/node_backend/node_modules/async/detectSeries.js @@ -0,0 +1,47 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time. + * + * @name detectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findSeries + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + */ +function detectSeries(coll, iteratee, callback) { + return (0, _createTester2.default)(bool => bool, (res, item) => item)((0, _eachOfLimit2.default)(1), coll, iteratee, callback); +} + +exports.default = (0, _awaitify2.default)(detectSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/dir.js b/node_backend/node_modules/async/dir.js new file mode 100644 index 0000000000000000000000000000000000000000..8e9fafd788f08c91fbc281891cde1657b9335f63 --- /dev/null +++ b/node_backend/node_modules/async/dir.js @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _consoleFunc = require('./internal/consoleFunc.js'); + +var _consoleFunc2 = _interopRequireDefault(_consoleFunc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Logs the result of an [`async` function]{@link AsyncFunction} to the + * `console` using `console.dir` to display the properties of the resulting object. + * Only works in Node.js or in browsers that support `console.dir` and + * `console.error` (such as FF and Chrome). + * If multiple arguments are returned from the async function, + * `console.dir` is called on each argument in order. + * + * @name dir + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, {hello: name}); + * }, 1000); + * }; + * + * // in the node repl + * node> async.dir(hello, 'world'); + * {hello: 'world'} + */ +exports.default = (0, _consoleFunc2.default)('dir'); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/dist/async.js b/node_backend/node_modules/async/dist/async.js new file mode 100644 index 0000000000000000000000000000000000000000..d7b791898947d497b07bd5905d68450515bdb076 --- /dev/null +++ b/node_backend/node_modules/async/dist/async.js @@ -0,0 +1,6061 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.async = {})); +})(this, (function (exports) { 'use strict'; + + /** + * Creates a continuation function with some arguments already applied. + * + * Useful as a shorthand when combined with other control flow functions. Any + * arguments passed to the returned function are added to the arguments + * originally passed to apply. + * + * @name apply + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {Function} fn - The function you want to eventually apply all + * arguments to. Invokes with (arguments...). + * @param {...*} arguments... - Any number of arguments to automatically apply + * when the continuation is called. + * @returns {Function} the partially-applied function + * @example + * + * // using apply + * async.parallel([ + * async.apply(fs.writeFile, 'testfile1', 'test1'), + * async.apply(fs.writeFile, 'testfile2', 'test2') + * ]); + * + * + * // the same process without using apply + * async.parallel([ + * function(callback) { + * fs.writeFile('testfile1', 'test1', callback); + * }, + * function(callback) { + * fs.writeFile('testfile2', 'test2', callback); + * } + * ]); + * + * // It's possible to pass any number of additional arguments when calling the + * // continuation: + * + * node> var fn = async.apply(sys.puts, 'one'); + * node> fn('two', 'three'); + * one + * two + * three + */ + function apply(fn, ...args) { + return (...callArgs) => fn(...args,...callArgs); + } + + function initialParams (fn) { + return function (...args/*, callback*/) { + var callback = args.pop(); + return fn.call(this, args, callback); + }; + } + + /* istanbul ignore file */ + + var hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask; + var hasSetImmediate = typeof setImmediate === 'function' && setImmediate; + var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + + function fallback(fn) { + setTimeout(fn, 0); + } + + function wrap(defer) { + return (fn, ...args) => defer(() => fn(...args)); + } + + var _defer$1; + + if (hasQueueMicrotask) { + _defer$1 = queueMicrotask; + } else if (hasSetImmediate) { + _defer$1 = setImmediate; + } else if (hasNextTick) { + _defer$1 = process.nextTick; + } else { + _defer$1 = fallback; + } + + var setImmediate$1 = wrap(_defer$1); + + /** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ + function asyncify(func) { + if (isAsync(func)) { + return function (...args/*, callback*/) { + const callback = args.pop(); + const promise = func.apply(this, args); + return handlePromise(promise, callback) + } + } + + return initialParams(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if (result && typeof result.then === 'function') { + return handlePromise(result, callback) + } else { + callback(null, result); + } + }); + } + + function handlePromise(promise, callback) { + return promise.then(value => { + invokeCallback(callback, null, value); + }, err => { + invokeCallback(callback, err && (err instanceof Error || err.message) ? err : new Error(err)); + }); + } + + function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (err) { + setImmediate$1(e => { throw e }, err); + } + } + + function isAsync(fn) { + return fn[Symbol.toStringTag] === 'AsyncFunction'; + } + + function isAsyncGenerator(fn) { + return fn[Symbol.toStringTag] === 'AsyncGenerator'; + } + + function isAsyncIterable(obj) { + return typeof obj[Symbol.asyncIterator] === 'function'; + } + + function wrapAsync(asyncFn) { + if (typeof asyncFn !== 'function') throw new Error('expected a function') + return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn; + } + + // conditionally promisify a function. + // only return a promise if a callback is omitted + function awaitify (asyncFn, arity) { + if (!arity) arity = asyncFn.length; + if (!arity) throw new Error('arity is undefined') + function awaitable (...args) { + if (typeof args[arity - 1] === 'function') { + return asyncFn.apply(this, args) + } + + return new Promise((resolve, reject) => { + args[arity - 1] = (err, ...cbArgs) => { + if (err) return reject(err) + resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]); + }; + asyncFn.apply(this, args); + }) + } + + return awaitable + } + + function applyEach$1 (eachfn) { + return function applyEach(fns, ...callArgs) { + const go = awaitify(function (callback) { + var that = this; + return eachfn(fns, (fn, cb) => { + wrapAsync(fn).apply(that, callArgs.concat(cb)); + }, callback); + }); + return go; + }; + } + + function _asyncMap(eachfn, arr, iteratee, callback) { + arr = arr || []; + var results = []; + var counter = 0; + var _iteratee = wrapAsync(iteratee); + + return eachfn(arr, (value, _, iterCb) => { + var index = counter++; + _iteratee(value, (err, v) => { + results[index] = v; + iterCb(err); + }); + }, err => { + callback(err, results); + }); + } + + function isArrayLike(value) { + return value && + typeof value.length === 'number' && + value.length >= 0 && + value.length % 1 === 0; + } + + // A temporary value used to identify if the loop should be broken. + // See #1064, #1293 + const breakLoop = {}; + + function once(fn) { + function wrapper (...args) { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, args); + } + Object.assign(wrapper, fn); + return wrapper + } + + function getIterator (coll) { + return coll[Symbol.iterator] && coll[Symbol.iterator](); + } + + function createArrayIterator(coll) { + var i = -1; + var len = coll.length; + return function next() { + return ++i < len ? {value: coll[i], key: i} : null; + } + } + + function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) + return null; + i++; + return {value: item.value, key: i}; + } + } + + function createObjectIterator(obj) { + var okeys = obj ? Object.keys(obj) : []; + var i = -1; + var len = okeys.length; + return function next() { + var key = okeys[++i]; + if (key === '__proto__') { + return next(); + } + return i < len ? {value: obj[key], key} : null; + }; + } + + function createIterator(coll) { + if (isArrayLike(coll)) { + return createArrayIterator(coll); + } + + var iterator = getIterator(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); + } + + function onlyOnce(fn) { + return function (...args) { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, args); + }; + } + + // for async generators + function asyncEachOfLimit(generator, limit, iteratee, callback) { + let done = false; + let canceled = false; + let awaiting = false; + let running = 0; + let idx = 0; + + function replenish() { + //console.log('replenish') + if (running >= limit || awaiting || done) return + //console.log('replenish awaiting') + awaiting = true; + generator.next().then(({value, done: iterDone}) => { + //console.log('got value', value) + if (canceled || done) return + awaiting = false; + if (iterDone) { + done = true; + if (running <= 0) { + //console.log('done nextCb') + callback(null); + } + return; + } + running++; + iteratee(value, idx, iterateeCallback); + idx++; + replenish(); + }).catch(handleError); + } + + function iterateeCallback(err, result) { + //console.log('iterateeCallback') + running -= 1; + if (canceled) return + if (err) return handleError(err) + + if (err === false) { + done = true; + canceled = true; + return + } + + if (result === breakLoop || (done && running <= 0)) { + done = true; + //console.log('done iterCb') + return callback(null); + } + replenish(); + } + + function handleError(err) { + if (canceled) return + awaiting = false; + done = true; + callback(err); + } + + replenish(); + } + + var eachOfLimit$2 = (limit) => { + return (obj, iteratee, callback) => { + callback = once(callback); + if (limit <= 0) { + throw new RangeError('concurrency limit cannot be less than 1') + } + if (!obj) { + return callback(null); + } + if (isAsyncGenerator(obj)) { + return asyncEachOfLimit(obj, limit, iteratee, callback) + } + if (isAsyncIterable(obj)) { + return asyncEachOfLimit(obj[Symbol.asyncIterator](), limit, iteratee, callback) + } + var nextElem = createIterator(obj); + var done = false; + var canceled = false; + var running = 0; + var looping = false; + + function iterateeCallback(err, value) { + if (canceled) return + running -= 1; + if (err) { + done = true; + callback(err); + } + else if (err === false) { + done = true; + canceled = true; + } + else if (value === breakLoop || (done && running <= 0)) { + done = true; + return callback(null); + } + else if (!looping) { + replenish(); + } + } + + function replenish () { + looping = true; + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, onlyOnce(iterateeCallback)); + } + looping = false; + } + + replenish(); + }; + }; + + /** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a + * time. + * + * @name eachOfLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. The `key` is the item's key, or index in the case of an + * array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ + function eachOfLimit(coll, limit, iteratee, callback) { + return eachOfLimit$2(limit)(coll, wrapAsync(iteratee), callback); + } + + var eachOfLimit$1 = awaitify(eachOfLimit, 4); + + // eachOf implementation optimized for array-likes + function eachOfArrayLike(coll, iteratee, callback) { + callback = once(callback); + var index = 0, + completed = 0, + {length} = coll, + canceled = false; + if (length === 0) { + callback(null); + } + + function iteratorCallback(err, value) { + if (err === false) { + canceled = true; + } + if (canceled === true) return + if (err) { + callback(err); + } else if ((++completed === length) || value === breakLoop) { + callback(null); + } + } + + for (; index < length; index++) { + iteratee(coll[index], index, onlyOnce(iteratorCallback)); + } + } + + // a generic version of eachOf which can handle array, object, and iterator cases. + function eachOfGeneric (coll, iteratee, callback) { + return eachOfLimit$1(coll, Infinity, iteratee, callback); + } + + /** + * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument + * to the iteratee. + * + * @name eachOf + * @static + * @memberOf module:Collections + * @method + * @alias forEachOf + * @category Collection + * @see [async.each]{@link module:Collections.each} + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each + * item in `coll`. + * The `key` is the item's key, or index in the case of an array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dev.json is a file containing a valid json object config for dev environment + * // dev.json is a file containing a valid json object config for test environment + * // prod.json is a file containing a valid json object config for prod environment + * // invalid.json is a file with a malformed json object + * + * let configs = {}; //global variable + * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'}; + * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'}; + * + * // asynchronous function that reads a json file and parses the contents as json object + * function parseFile(file, key, callback) { + * fs.readFile(file, "utf8", function(err, data) { + * if (err) return calback(err); + * try { + * configs[key] = JSON.parse(data); + * } catch (e) { + * return callback(e); + * } + * callback(); + * }); + * } + * + * // Using callbacks + * async.forEachOf(validConfigFileMap, parseFile, function (err) { + * if (err) { + * console.error(err); + * } else { + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * } + * }); + * + * //Error handing + * async.forEachOf(invalidConfigFileMap, parseFile, function (err) { + * if (err) { + * console.error(err); + * // JSON parse error exception + * } else { + * console.log(configs); + * } + * }); + * + * // Using Promises + * async.forEachOf(validConfigFileMap, parseFile) + * .then( () => { + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * }).catch( err => { + * console.error(err); + * }); + * + * //Error handing + * async.forEachOf(invalidConfigFileMap, parseFile) + * .then( () => { + * console.log(configs); + * }).catch( err => { + * console.error(err); + * // JSON parse error exception + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.forEachOf(validConfigFileMap, parseFile); + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * } + * catch (err) { + * console.log(err); + * } + * } + * + * //Error handing + * async () => { + * try { + * let result = await async.forEachOf(invalidConfigFileMap, parseFile); + * console.log(configs); + * } + * catch (err) { + * console.log(err); + * // JSON parse error exception + * } + * } + * + */ + function eachOf(coll, iteratee, callback) { + var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric; + return eachOfImplementation(coll, wrapAsync(iteratee), callback); + } + + var eachOf$1 = awaitify(eachOf, 3); + + /** + * Produces a new collection of values by mapping each value in `coll` through + * the `iteratee` function. The `iteratee` is called with an item from `coll` + * and a callback for when it has finished processing. Each of these callbacks + * takes 2 arguments: an `error`, and the transformed item from `coll`. If + * `iteratee` passes an error to its callback, the main `callback` (for the + * `map` function) is immediately called with the error. + * + * Note, that since this function applies the `iteratee` to each item in + * parallel, there is no guarantee that the `iteratee` functions will complete + * in order. However, the results array will be in the same order as the + * original `coll`. + * + * If `map` is passed an Object, the results will be an Array. The results + * will roughly be in the order of the original Objects' keys (but this can + * vary across JavaScript engines). + * + * @name map + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an Array of the + * transformed items from the `coll`. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * // file4.txt does not exist + * + * const fileList = ['file1.txt','file2.txt','file3.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file4.txt']; + * + * // asynchronous function that returns the file size in bytes + * function getFileSizeInBytes(file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, stat.size); + * }); + * } + * + * // Using callbacks + * async.map(fileList, getFileSizeInBytes, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now an array of the file size in bytes for each file, e.g. + * // [ 1000, 2000, 3000] + * } + * }); + * + * // Error Handling + * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(results); + * } + * }); + * + * // Using Promises + * async.map(fileList, getFileSizeInBytes) + * .then( results => { + * console.log(results); + * // results is now an array of the file size in bytes for each file, e.g. + * // [ 1000, 2000, 3000] + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.map(withMissingFileList, getFileSizeInBytes) + * .then( results => { + * console.log(results); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.map(fileList, getFileSizeInBytes); + * console.log(results); + * // results is now an array of the file size in bytes for each file, e.g. + * // [ 1000, 2000, 3000] + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let results = await async.map(withMissingFileList, getFileSizeInBytes); + * console.log(results); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ + function map (coll, iteratee, callback) { + return _asyncMap(eachOf$1, coll, iteratee, callback) + } + var map$1 = awaitify(map, 3); + + /** + * Applies the provided arguments to each function in the array, calling + * `callback` after all functions have completed. If you only provide the first + * argument, `fns`, then it will return a function which lets you pass in the + * arguments as if it were a single function call. If more arguments are + * provided, `callback` is required while `args` is still optional. The results + * for each of the applied async functions are passed to the final callback + * as an array. + * + * @name applyEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s + * to all call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {AsyncFunction} - Returns a function that takes no args other than + * an optional callback, that is the result of applying the `args` to each + * of the functions. + * @example + * + * const appliedFn = async.applyEach([enableSearch, updateSchema], 'bucket') + * + * appliedFn((err, results) => { + * // results[0] is the results for `enableSearch` + * // results[1] is the results for `updateSchema` + * }); + * + * // partial application example: + * async.each( + * buckets, + * async (bucket) => async.applyEach([enableSearch, updateSchema], bucket)(), + * callback + * ); + */ + var applyEach = applyEach$1(map$1); + + /** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time. + * + * @name eachOfSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ + function eachOfSeries(coll, iteratee, callback) { + return eachOfLimit$1(coll, 1, iteratee, callback) + } + var eachOfSeries$1 = awaitify(eachOfSeries, 3); + + /** + * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. + * + * @name mapSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ + function mapSeries (coll, iteratee, callback) { + return _asyncMap(eachOfSeries$1, coll, iteratee, callback) + } + var mapSeries$1 = awaitify(mapSeries, 3); + + /** + * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time. + * + * @name applyEachSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.applyEach]{@link module:ControlFlow.applyEach} + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s to all + * call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {AsyncFunction} - A function, that when called, is the result of + * appling the `args` to the list of functions. It takes no args, other than + * a callback. + */ + var applyEachSeries = applyEach$1(mapSeries$1); + + const PROMISE_SYMBOL = Symbol('promiseCallback'); + + function promiseCallback () { + let resolve, reject; + function callback (err, ...args) { + if (err) return reject(err) + resolve(args.length > 1 ? args : args[0]); + } + + callback[PROMISE_SYMBOL] = new Promise((res, rej) => { + resolve = res, + reject = rej; + }); + + return callback + } + + /** + * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on + * their requirements. Each function can optionally depend on other functions + * being completed first, and each function is run as soon as its requirements + * are satisfied. + * + * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence + * will stop. Further tasks will not execute (so any other functions depending + * on it will not run), and the main `callback` is immediately called with the + * error. + * + * {@link AsyncFunction}s also receive an object containing the results of functions which + * have completed so far as the first argument, if they have dependencies. If a + * task function has no dependencies, it will only be passed a callback. + * + * @name auto + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Object} tasks - An object. Each of its properties is either a + * function or an array of requirements, with the {@link AsyncFunction} itself the last item + * in the array. The object's key of a property serves as the name of the task + * defined by that property, i.e. can be used when specifying requirements for + * other tasks. The function receives one or two arguments: + * * a `results` object, containing the results of the previously executed + * functions, only passed if the task has any dependencies, + * * a `callback(err, result)` function, which must be called when finished, + * passing an `error` (which can be `null`) and the result of the function's + * execution. + * @param {number} [concurrency=Infinity] - An optional `integer` for + * determining the maximum number of tasks that can be run in parallel. By + * default, as many as possible. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback. Results are always returned; however, if an + * error occurs, no further `tasks` will be performed, and the results object + * will only contain partial results. Invoked with (err, results). + * @returns {Promise} a promise, if a callback is not passed + * @example + * + * //Using Callbacks + * async.auto({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * // once the file is written let's email a link to it... + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }, function(err, results) { + * if (err) { + * console.log('err = ', err); + * } + * console.log('results = ', results); + * // results = { + * // get_data: ['data', 'converted to array'] + * // make_folder; 'folder', + * // write_file: 'filename' + * // email_link: { file: 'filename', email: 'user@example.com' } + * // } + * }); + * + * //Using Promises + * async.auto({ + * get_data: function(callback) { + * console.log('in get_data'); + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * console.log('in make_folder'); + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * // once the file is written let's email a link to it... + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }).then(results => { + * console.log('results = ', results); + * // results = { + * // get_data: ['data', 'converted to array'] + * // make_folder; 'folder', + * // write_file: 'filename' + * // email_link: { file: 'filename', email: 'user@example.com' } + * // } + * }).catch(err => { + * console.log('err = ', err); + * }); + * + * //Using async/await + * async () => { + * try { + * let results = await async.auto({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * // once the file is written let's email a link to it... + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }); + * console.log('results = ', results); + * // results = { + * // get_data: ['data', 'converted to array'] + * // make_folder; 'folder', + * // write_file: 'filename' + * // email_link: { file: 'filename', email: 'user@example.com' } + * // } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function auto(tasks, concurrency, callback) { + if (typeof concurrency !== 'number') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = once(callback || promiseCallback()); + var numTasks = Object.keys(tasks).length; + if (!numTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = numTasks; + } + + var results = {}; + var runningTasks = 0; + var canceled = false; + var hasError = false; + + var listeners = Object.create(null); + + var readyTasks = []; + + // for cycle detection: + var readyToCheck = []; // tasks that have been identified as reachable + // without the possibility of returning to an ancestor task + var uncheckedDependencies = {}; + + Object.keys(tasks).forEach(key => { + var task = tasks[key]; + if (!Array.isArray(task)) { + // no dependencies + enqueueTask(key, [task]); + readyToCheck.push(key); + return; + } + + var dependencies = task.slice(0, task.length - 1); + var remainingDependencies = dependencies.length; + if (remainingDependencies === 0) { + enqueueTask(key, task); + readyToCheck.push(key); + return; + } + uncheckedDependencies[key] = remainingDependencies; + + dependencies.forEach(dependencyName => { + if (!tasks[dependencyName]) { + throw new Error('async.auto task `' + key + + '` has a non-existent dependency `' + + dependencyName + '` in ' + + dependencies.join(', ')); + } + addListener(dependencyName, () => { + remainingDependencies--; + if (remainingDependencies === 0) { + enqueueTask(key, task); + } + }); + }); + }); + + checkForDeadlocks(); + processQueue(); + + function enqueueTask(key, task) { + readyTasks.push(() => runTask(key, task)); + } + + function processQueue() { + if (canceled) return + if (readyTasks.length === 0 && runningTasks === 0) { + return callback(null, results); + } + while(readyTasks.length && runningTasks < concurrency) { + var run = readyTasks.shift(); + run(); + } + + } + + function addListener(taskName, fn) { + var taskListeners = listeners[taskName]; + if (!taskListeners) { + taskListeners = listeners[taskName] = []; + } + + taskListeners.push(fn); + } + + function taskComplete(taskName) { + var taskListeners = listeners[taskName] || []; + taskListeners.forEach(fn => fn()); + processQueue(); + } + + + function runTask(key, task) { + if (hasError) return; + + var taskCallback = onlyOnce((err, ...result) => { + runningTasks--; + if (err === false) { + canceled = true; + return + } + if (result.length < 2) { + [result] = result; + } + if (err) { + var safeResults = {}; + Object.keys(results).forEach(rkey => { + safeResults[rkey] = results[rkey]; + }); + safeResults[key] = result; + hasError = true; + listeners = Object.create(null); + if (canceled) return + callback(err, safeResults); + } else { + results[key] = result; + taskComplete(key); + } + }); + + runningTasks++; + var taskFn = wrapAsync(task[task.length - 1]); + if (task.length > 1) { + taskFn(results, taskCallback); + } else { + taskFn(taskCallback); + } + } + + function checkForDeadlocks() { + // Kahn's algorithm + // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm + // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html + var currentTask; + var counter = 0; + while (readyToCheck.length) { + currentTask = readyToCheck.pop(); + counter++; + getDependents(currentTask).forEach(dependent => { + if (--uncheckedDependencies[dependent] === 0) { + readyToCheck.push(dependent); + } + }); + } + + if (counter !== numTasks) { + throw new Error( + 'async.auto cannot execute tasks due to a recursive dependency' + ); + } + } + + function getDependents(taskName) { + var result = []; + Object.keys(tasks).forEach(key => { + const task = tasks[key]; + if (Array.isArray(task) && task.indexOf(taskName) >= 0) { + result.push(key); + } + }); + return result; + } + + return callback[PROMISE_SYMBOL] + } + + var FN_ARGS = /^(?:async\s)?(?:function)?\s*(?:\w+\s*)?\(([^)]+)\)(?:\s*{)/; + var ARROW_FN_ARGS = /^(?:async\s)?\s*(?:\(\s*)?((?:[^)=\s]\s*)*)(?:\)\s*)?=>/; + var FN_ARG_SPLIT = /,/; + var FN_ARG = /(=.+)?(\s*)$/; + + function stripComments(string) { + let stripped = ''; + let index = 0; + let endBlockComment = string.indexOf('*/'); + while (index < string.length) { + if (string[index] === '/' && string[index+1] === '/') { + // inline comment + let endIndex = string.indexOf('\n', index); + index = (endIndex === -1) ? string.length : endIndex; + } else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) { + // block comment + let endIndex = string.indexOf('*/', index); + if (endIndex !== -1) { + index = endIndex + 2; + endBlockComment = string.indexOf('*/', index); + } else { + stripped += string[index]; + index++; + } + } else { + stripped += string[index]; + index++; + } + } + return stripped; + } + + function parseParams(func) { + const src = stripComments(func.toString()); + let match = src.match(FN_ARGS); + if (!match) { + match = src.match(ARROW_FN_ARGS); + } + if (!match) throw new Error('could not parse args in autoInject\nSource:\n' + src) + let [, args] = match; + return args + .replace(/\s/g, '') + .split(FN_ARG_SPLIT) + .map((arg) => arg.replace(FN_ARG, '').trim()); + } + + /** + * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent + * tasks are specified as parameters to the function, after the usual callback + * parameter, with the parameter names matching the names of the tasks it + * depends on. This can provide even more readable task graphs which can be + * easier to maintain. + * + * If a final callback is specified, the task results are similarly injected, + * specified as named parameters after the initial error parameter. + * + * The autoInject function is purely syntactic sugar and its semantics are + * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}. + * + * @name autoInject + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.auto]{@link module:ControlFlow.auto} + * @category Control Flow + * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of + * the form 'func([dependencies...], callback). The object's key of a property + * serves as the name of the task defined by that property, i.e. can be used + * when specifying requirements for other tasks. + * * The `callback` parameter is a `callback(err, result)` which must be called + * when finished, passing an `error` (which can be `null`) and the result of + * the function's execution. The remaining parameters name other tasks on + * which the task is dependent, and the results from those tasks are the + * arguments of those parameters. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback, and a `results` object with any completed + * task results, similar to `auto`. + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // The example from `auto` can be rewritten as follows: + * async.autoInject({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: function(get_data, make_folder, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }, + * email_link: function(write_file, callback) { + * // once the file is written let's email a link to it... + * // write_file contains the filename returned by write_file. + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * } + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + * + * // If you are using a JS minifier that mangles parameter names, `autoInject` + * // will not work with plain functions, since the parameter names will be + * // collapsed to a single letter identifier. To work around this, you can + * // explicitly specify the names of the parameters your task function needs + * // in an array, similar to Angular.js dependency injection. + * + * // This still has an advantage over plain `auto`, since the results a task + * // depends on are still spread into arguments. + * async.autoInject({ + * //... + * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) { + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(write_file, callback) { + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * }] + * //... + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + */ + function autoInject(tasks, callback) { + var newTasks = {}; + + Object.keys(tasks).forEach(key => { + var taskFn = tasks[key]; + var params; + var fnIsAsync = isAsync(taskFn); + var hasNoDeps = + (!fnIsAsync && taskFn.length === 1) || + (fnIsAsync && taskFn.length === 0); + + if (Array.isArray(taskFn)) { + params = [...taskFn]; + taskFn = params.pop(); + + newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); + } else if (hasNoDeps) { + // no dependencies, use the function as-is + newTasks[key] = taskFn; + } else { + params = parseParams(taskFn); + if ((taskFn.length === 0 && !fnIsAsync) && params.length === 0) { + throw new Error("autoInject task functions require explicit parameters."); + } + + // remove callback param + if (!fnIsAsync) params.pop(); + + newTasks[key] = params.concat(newTask); + } + + function newTask(results, taskCb) { + var newArgs = params.map(name => results[name]); + newArgs.push(taskCb); + wrapAsync(taskFn)(...newArgs); + } + }); + + return auto(newTasks, callback); + } + + // Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation + // used for queues. This implementation assumes that the node provided by the user can be modified + // to adjust the next and last properties. We implement only the minimal functionality + // for queue support. + class DLL { + constructor() { + this.head = this.tail = null; + this.length = 0; + } + + removeLink(node) { + if (node.prev) node.prev.next = node.next; + else this.head = node.next; + if (node.next) node.next.prev = node.prev; + else this.tail = node.prev; + + node.prev = node.next = null; + this.length -= 1; + return node; + } + + empty () { + while(this.head) this.shift(); + return this; + } + + insertAfter(node, newNode) { + newNode.prev = node; + newNode.next = node.next; + if (node.next) node.next.prev = newNode; + else this.tail = newNode; + node.next = newNode; + this.length += 1; + } + + insertBefore(node, newNode) { + newNode.prev = node.prev; + newNode.next = node; + if (node.prev) node.prev.next = newNode; + else this.head = newNode; + node.prev = newNode; + this.length += 1; + } + + unshift(node) { + if (this.head) this.insertBefore(this.head, node); + else setInitial(this, node); + } + + push(node) { + if (this.tail) this.insertAfter(this.tail, node); + else setInitial(this, node); + } + + shift() { + return this.head && this.removeLink(this.head); + } + + pop() { + return this.tail && this.removeLink(this.tail); + } + + toArray() { + return [...this] + } + + *[Symbol.iterator] () { + var cur = this.head; + while (cur) { + yield cur.data; + cur = cur.next; + } + } + + remove (testFn) { + var curr = this.head; + while(curr) { + var {next} = curr; + if (testFn(curr)) { + this.removeLink(curr); + } + curr = next; + } + return this; + } + } + + function setInitial(dll, node) { + dll.length = 1; + dll.head = dll.tail = node; + } + + function queue$1(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } + else if(concurrency === 0) { + throw new RangeError('Concurrency must not be zero'); + } + + var _worker = wrapAsync(worker); + var numRunning = 0; + var workersList = []; + const events = { + error: [], + drain: [], + saturated: [], + unsaturated: [], + empty: [] + }; + + function on (event, handler) { + events[event].push(handler); + } + + function once (event, handler) { + const handleAndRemove = (...args) => { + off(event, handleAndRemove); + handler(...args); + }; + events[event].push(handleAndRemove); + } + + function off (event, handler) { + if (!event) return Object.keys(events).forEach(ev => events[ev] = []) + if (!handler) return events[event] = [] + events[event] = events[event].filter(ev => ev !== handler); + } + + function trigger (event, ...args) { + events[event].forEach(handler => handler(...args)); + } + + var processingScheduled = false; + function _insert(data, insertAtFront, rejectOnError, callback) { + if (callback != null && typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + + var res, rej; + function promiseCallback (err, ...args) { + // we don't care about the error, let the global error handler + // deal with it + if (err) return rejectOnError ? rej(err) : res() + if (args.length <= 1) return res(args[0]) + res(args); + } + + var item = q._createTaskItem( + data, + rejectOnError ? promiseCallback : + (callback || promiseCallback) + ); + + if (insertAtFront) { + q._tasks.unshift(item); + } else { + q._tasks.push(item); + } + + if (!processingScheduled) { + processingScheduled = true; + setImmediate$1(() => { + processingScheduled = false; + q.process(); + }); + } + + if (rejectOnError || !callback) { + return new Promise((resolve, reject) => { + res = resolve; + rej = reject; + }) + } + } + + function _createCB(tasks) { + return function (err, ...args) { + numRunning -= 1; + + for (var i = 0, l = tasks.length; i < l; i++) { + var task = tasks[i]; + + var index = workersList.indexOf(task); + if (index === 0) { + workersList.shift(); + } else if (index > 0) { + workersList.splice(index, 1); + } + + task.callback(err, ...args); + + if (err != null) { + trigger('error', err, task.data); + } + } + + if (numRunning <= (q.concurrency - q.buffer) ) { + trigger('unsaturated'); + } + + if (q.idle()) { + trigger('drain'); + } + q.process(); + }; + } + + function _maybeDrain(data) { + if (data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + setImmediate$1(() => trigger('drain')); + return true + } + return false + } + + const eventMethod = (name) => (handler) => { + if (!handler) { + return new Promise((resolve, reject) => { + once(name, (err, data) => { + if (err) return reject(err) + resolve(data); + }); + }) + } + off(name); + on(name, handler); + + }; + + var isProcessing = false; + var q = { + _tasks: new DLL(), + _createTaskItem (data, callback) { + return { + data, + callback + }; + }, + *[Symbol.iterator] () { + yield* q._tasks[Symbol.iterator](); + }, + concurrency, + payload, + buffer: concurrency / 4, + started: false, + paused: false, + push (data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return + return data.map(datum => _insert(datum, false, false, callback)) + } + return _insert(data, false, false, callback); + }, + pushAsync (data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return + return data.map(datum => _insert(datum, false, true, callback)) + } + return _insert(data, false, true, callback); + }, + kill () { + off(); + q._tasks.empty(); + }, + unshift (data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return + return data.map(datum => _insert(datum, true, false, callback)) + } + return _insert(data, true, false, callback); + }, + unshiftAsync (data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return + return data.map(datum => _insert(datum, true, true, callback)) + } + return _insert(data, true, true, callback); + }, + remove (testFn) { + q._tasks.remove(testFn); + }, + process () { + // Avoid trying to start too many processing operations. This can occur + // when callbacks resolve synchronously (#1267). + if (isProcessing) { + return; + } + isProcessing = true; + while(!q.paused && numRunning < q.concurrency && q._tasks.length){ + var tasks = [], data = []; + var l = q._tasks.length; + if (q.payload) l = Math.min(l, q.payload); + for (var i = 0; i < l; i++) { + var node = q._tasks.shift(); + tasks.push(node); + workersList.push(node); + data.push(node.data); + } + + numRunning += 1; + + if (q._tasks.length === 0) { + trigger('empty'); + } + + if (numRunning === q.concurrency) { + trigger('saturated'); + } + + var cb = onlyOnce(_createCB(tasks)); + _worker(data, cb); + } + isProcessing = false; + }, + length () { + return q._tasks.length; + }, + running () { + return numRunning; + }, + workersList () { + return workersList; + }, + idle() { + return q._tasks.length + numRunning === 0; + }, + pause () { + q.paused = true; + }, + resume () { + if (q.paused === false) { return; } + q.paused = false; + setImmediate$1(q.process); + } + }; + // define these as fixed properties, so people get useful errors when updating + Object.defineProperties(q, { + saturated: { + writable: false, + value: eventMethod('saturated') + }, + unsaturated: { + writable: false, + value: eventMethod('unsaturated') + }, + empty: { + writable: false, + value: eventMethod('empty') + }, + drain: { + writable: false, + value: eventMethod('drain') + }, + error: { + writable: false, + value: eventMethod('error') + }, + }); + return q; + } + + /** + * Creates a `cargo` object with the specified payload. Tasks added to the + * cargo will be processed altogether (up to the `payload` limit). If the + * `worker` is in progress, the task is queued until it becomes available. Once + * the `worker` has completed some tasks, each callback of those tasks is + * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) + * for how `cargo` and `queue` work. + * + * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers + * at a time, cargo passes an array of tasks to a single worker, repeating + * when the worker is finished. + * + * @name cargo + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An asynchronous function for processing an array + * of queued tasks. Invoked with `(tasks, callback)`. + * @param {number} [payload=Infinity] - An optional `integer` for determining + * how many tasks should be processed per round; if omitted, the default is + * unlimited. + * @returns {module:ControlFlow.QueueObject} A cargo object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the cargo and inner queue. + * @example + * + * // create a cargo object with payload 2 + * var cargo = async.cargo(function(tasks, callback) { + * for (var i=0; i { + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.reduce(withMissingFileList, 0, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.reduce(fileList, 0, getFileSizeInBytes); + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes); + * console.log(result); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ + function reduce(coll, memo, iteratee, callback) { + callback = once(callback); + var _iteratee = wrapAsync(iteratee); + return eachOfSeries$1(coll, (x, i, iterCb) => { + _iteratee(memo, x, (err, v) => { + memo = v; + iterCb(err); + }); + }, err => callback(err, memo)); + } + var reduce$1 = awaitify(reduce, 4); + + /** + * Version of the compose function that is more natural to read. Each function + * consumes the return value of the previous function. It is the equivalent of + * [compose]{@link module:ControlFlow.compose} with the arguments reversed. + * + * Each function is executed with the `this` binding of the composed function. + * + * @name seq + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.compose]{@link module:ControlFlow.compose} + * @category Control Flow + * @param {...AsyncFunction} functions - the asynchronous functions to compose + * @returns {Function} a function that composes the `functions` in order + * @example + * + * // Requires lodash (or underscore), express3 and dresende's orm2. + * // Part of an app, that fetches cats of the logged user. + * // This example uses `seq` function to avoid overnesting and error + * // handling clutter. + * app.get('/cats', function(request, response) { + * var User = request.models.User; + * async.seq( + * User.get.bind(User), // 'User.get' has signature (id, callback(err, data)) + * function(user, fn) { + * user.getCats(fn); // 'getCats' has signature (callback(err, data)) + * } + * )(req.session.user_id, function (err, cats) { + * if (err) { + * console.error(err); + * response.json({ status: 'error', message: err.message }); + * } else { + * response.json({ status: 'ok', message: 'Cats found', data: cats }); + * } + * }); + * }); + */ + function seq(...functions) { + var _functions = functions.map(wrapAsync); + return function (...args) { + var that = this; + + var cb = args[args.length - 1]; + if (typeof cb == 'function') { + args.pop(); + } else { + cb = promiseCallback(); + } + + reduce$1(_functions, args, (newargs, fn, iterCb) => { + fn.apply(that, newargs.concat((err, ...nextargs) => { + iterCb(err, nextargs); + })); + }, + (err, results) => cb(err, ...results)); + + return cb[PROMISE_SYMBOL] + }; + } + + /** + * Creates a function which is a composition of the passed asynchronous + * functions. Each function consumes the return value of the function that + * follows. Composing functions `f()`, `g()`, and `h()` would produce the result + * of `f(g(h()))`, only this version uses callbacks to obtain the return values. + * + * If the last argument to the composed function is not a function, a promise + * is returned when you call it. + * + * Each function is executed with the `this` binding of the composed function. + * + * @name compose + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {...AsyncFunction} functions - the asynchronous functions to compose + * @returns {Function} an asynchronous function that is the composed + * asynchronous `functions` + * @example + * + * function add1(n, callback) { + * setTimeout(function () { + * callback(null, n + 1); + * }, 10); + * } + * + * function mul3(n, callback) { + * setTimeout(function () { + * callback(null, n * 3); + * }, 10); + * } + * + * var add1mul3 = async.compose(mul3, add1); + * add1mul3(4, function (err, result) { + * // result now equals 15 + * }); + */ + function compose(...args) { + return seq(...args.reverse()); + } + + /** + * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time. + * + * @name mapLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ + function mapLimit (coll, limit, iteratee, callback) { + return _asyncMap(eachOfLimit$2(limit), coll, iteratee, callback) + } + var mapLimit$1 = awaitify(mapLimit, 4); + + /** + * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time. + * + * @name concatLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.concat]{@link module:Collections.concat} + * @category Collection + * @alias flatMapLimit + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`, + * which should use an array as its result. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + */ + function concatLimit(coll, limit, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + return mapLimit$1(coll, limit, (val, iterCb) => { + _iteratee(val, (err, ...args) => { + if (err) return iterCb(err); + return iterCb(err, args); + }); + }, (err, mapResults) => { + var result = []; + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + result = result.concat(...mapResults[i]); + } + } + + return callback(err, result); + }); + } + var concatLimit$1 = awaitify(concatLimit, 4); + + /** + * Applies `iteratee` to each item in `coll`, concatenating the results. Returns + * the concatenated list. The `iteratee`s are called in parallel, and the + * results are concatenated as they return. The results array will be returned in + * the original order of `coll` passed to the `iteratee` function. + * + * @name concat + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @alias flatMap + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`, + * which should use an array as its result. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * let directoryList = ['dir1','dir2','dir3']; + * let withMissingDirectoryList = ['dir1','dir2','dir3', 'dir4']; + * + * // Using callbacks + * async.concat(directoryList, fs.readdir, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * } + * }); + * + * // Error Handling + * async.concat(withMissingDirectoryList, fs.readdir, function(err, results) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * } else { + * console.log(results); + * } + * }); + * + * // Using Promises + * async.concat(directoryList, fs.readdir) + * .then(results => { + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * }).catch(err => { + * console.log(err); + * }); + * + * // Error Handling + * async.concat(withMissingDirectoryList, fs.readdir) + * .then(results => { + * console.log(results); + * }).catch(err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.concat(directoryList, fs.readdir); + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * } catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let results = await async.concat(withMissingDirectoryList, fs.readdir); + * console.log(results); + * } catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * } + * } + * + */ + function concat(coll, iteratee, callback) { + return concatLimit$1(coll, Infinity, iteratee, callback) + } + var concat$1 = awaitify(concat, 3); + + /** + * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time. + * + * @name concatSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.concat]{@link module:Collections.concat} + * @category Collection + * @alias flatMapSeries + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`. + * The iteratee should complete with an array an array of results. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + */ + function concatSeries(coll, iteratee, callback) { + return concatLimit$1(coll, 1, iteratee, callback) + } + var concatSeries$1 = awaitify(concatSeries, 3); + + /** + * Returns a function that when called, calls-back with the values provided. + * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to + * [`auto`]{@link module:ControlFlow.auto}. + * + * @name constant + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {...*} arguments... - Any number of arguments to automatically invoke + * callback with. + * @returns {AsyncFunction} Returns a function that when invoked, automatically + * invokes the callback with the previous given arguments. + * @example + * + * async.waterfall([ + * async.constant(42), + * function (value, next) { + * // value === 42 + * }, + * //... + * ], callback); + * + * async.waterfall([ + * async.constant(filename, "utf8"), + * fs.readFile, + * function (fileData, next) { + * //... + * } + * //... + * ], callback); + * + * async.auto({ + * hostname: async.constant("https://server.net/"), + * port: findFreePort, + * launchServer: ["hostname", "port", function (options, cb) { + * startServer(options, cb); + * }], + * //... + * }, callback); + */ + function constant$1(...args) { + return function (...ignoredArgs/*, callback*/) { + var callback = ignoredArgs.pop(); + return callback(null, ...args); + }; + } + + function _createTester(check, getResult) { + return (eachfn, arr, _iteratee, cb) => { + var testPassed = false; + var testResult; + const iteratee = wrapAsync(_iteratee); + eachfn(arr, (value, _, callback) => { + iteratee(value, (err, result) => { + if (err || err === false) return callback(err); + + if (check(result) && !testResult) { + testPassed = true; + testResult = getResult(true, value); + return callback(null, breakLoop); + } + callback(); + }); + }, err => { + if (err) return cb(err); + cb(null, testPassed ? testResult : getResult(false)); + }); + }; + } + + /** + * Returns the first value in `coll` that passes an async truth test. The + * `iteratee` is applied in parallel, meaning the first iteratee to return + * `true` will fire the detect `callback` with that result. That means the + * result might not be the first item in the original `coll` (in terms of order) + * that passes the test. + + * If order within the original `coll` is important, then look at + * [`detectSeries`]{@link module:Collections.detectSeries}. + * + * @name detect + * @static + * @memberOf module:Collections + * @method + * @alias find + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // dir1/file1.txt + * // result now equals the first file in the list that exists + * } + *); + * + * // Using Promises + * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists) + * .then(result => { + * console.log(result); + * // dir1/file1.txt + * // result now equals the first file in the list that exists + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists); + * console.log(result); + * // dir1/file1.txt + * // result now equals the file in the list that exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function detect(coll, iteratee, callback) { + return _createTester(bool => bool, (res, item) => item)(eachOf$1, coll, iteratee, callback) + } + var detect$1 = awaitify(detect, 3); + + /** + * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a + * time. + * + * @name detectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findLimit + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + */ + function detectLimit(coll, limit, iteratee, callback) { + return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(limit), coll, iteratee, callback) + } + var detectLimit$1 = awaitify(detectLimit, 4); + + /** + * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time. + * + * @name detectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findSeries + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + */ + function detectSeries(coll, iteratee, callback) { + return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(1), coll, iteratee, callback) + } + + var detectSeries$1 = awaitify(detectSeries, 3); + + function consoleFunc(name) { + return (fn, ...args) => wrapAsync(fn)(...args, (err, ...resultArgs) => { + /* istanbul ignore else */ + if (typeof console === 'object') { + /* istanbul ignore else */ + if (err) { + /* istanbul ignore else */ + if (console.error) { + console.error(err); + } + } else if (console[name]) { /* istanbul ignore else */ + resultArgs.forEach(x => console[name](x)); + } + } + }) + } + + /** + * Logs the result of an [`async` function]{@link AsyncFunction} to the + * `console` using `console.dir` to display the properties of the resulting object. + * Only works in Node.js or in browsers that support `console.dir` and + * `console.error` (such as FF and Chrome). + * If multiple arguments are returned from the async function, + * `console.dir` is called on each argument in order. + * + * @name dir + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, {hello: name}); + * }, 1000); + * }; + * + * // in the node repl + * node> async.dir(hello, 'world'); + * {hello: 'world'} + */ + var dir = consoleFunc('dir'); + + /** + * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in + * the order of operations, the arguments `test` and `iteratee` are switched. + * + * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + * + * @name doWhilst + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - A function which is called each time `test` + * passes. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform after each + * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. + * `callback` will be passed an error and any arguments passed to the final + * `iteratee`'s callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + */ + function doWhilst(iteratee, test, callback) { + callback = onlyOnce(callback); + var _fn = wrapAsync(iteratee); + var _test = wrapAsync(test); + var results; + + function next(err, ...args) { + if (err) return callback(err); + if (err === false) return; + results = args; + _test(...args, check); + } + + function check(err, truth) { + if (err) return callback(err); + if (err === false) return; + if (!truth) return callback(null, ...results); + _fn(next); + } + + return check(null, true); + } + + var doWhilst$1 = awaitify(doWhilst, 3); + + /** + * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the + * argument ordering differs from `until`. + * + * @name doUntil + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.doWhilst]{@link module:ControlFlow.doWhilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform after each + * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `iteratee` + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + */ + function doUntil(iteratee, test, callback) { + const _test = wrapAsync(test); + return doWhilst$1(iteratee, (...args) => { + const cb = args.pop(); + _test(...args, (err, truth) => cb (err, !truth)); + }, callback); + } + + function _withoutIndex(iteratee) { + return (value, index, callback) => iteratee(value, callback); + } + + /** + * Applies the function `iteratee` to each item in `coll`, in parallel. + * The `iteratee` is called with an item from the list, and a callback for when + * it has finished. If the `iteratee` passes an error to its `callback`, the + * main `callback` (for the `each` function) is immediately called with the + * error. + * + * Note, that since this function applies `iteratee` to each item in parallel, + * there is no guarantee that the iteratee functions will complete in order. + * + * @name each + * @static + * @memberOf module:Collections + * @method + * @alias forEach + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to + * each item in `coll`. Invoked with (item, callback). + * The array index is not passed to the iteratee. + * If you need the index, use `eachOf`. + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt']; + * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt']; + * + * // asynchronous function that deletes a file + * const deleteFile = function(file, callback) { + * fs.unlink(file, callback); + * }; + * + * // Using callbacks + * async.each(fileList, deleteFile, function(err) { + * if( err ) { + * console.log(err); + * } else { + * console.log('All files have been deleted successfully'); + * } + * }); + * + * // Error Handling + * async.each(withMissingFileList, deleteFile, function(err){ + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * }); + * + * // Using Promises + * async.each(fileList, deleteFile) + * .then( () => { + * console.log('All files have been deleted successfully'); + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.each(fileList, deleteFile) + * .then( () => { + * console.log('All files have been deleted successfully'); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * }); + * + * // Using async/await + * async () => { + * try { + * await async.each(files, deleteFile); + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * await async.each(withMissingFileList, deleteFile); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * } + * } + * + */ + function eachLimit$2(coll, iteratee, callback) { + return eachOf$1(coll, _withoutIndex(wrapAsync(iteratee)), callback); + } + + var each = awaitify(eachLimit$2, 3); + + /** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ + function eachLimit(coll, limit, iteratee, callback) { + return eachOfLimit$2(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback); + } + var eachLimit$1 = awaitify(eachLimit, 4); + + /** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item + * in series and therefore the iteratee functions will complete in order. + + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ + function eachSeries(coll, iteratee, callback) { + return eachLimit$1(coll, 1, iteratee, callback) + } + var eachSeries$1 = awaitify(eachSeries, 3); + + /** + * Wrap an async function and ensure it calls its callback on a later tick of + * the event loop. If the function already calls its callback on a next tick, + * no extra deferral is added. This is useful for preventing stack overflows + * (`RangeError: Maximum call stack size exceeded`) and generally keeping + * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) + * contained. ES2017 `async` functions are returned as-is -- they are immune + * to Zalgo's corrupting influences, as they always resolve on a later tick. + * + * @name ensureAsync + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - an async function, one that expects a node-style + * callback as its last argument. + * @returns {AsyncFunction} Returns a wrapped function with the exact same call + * signature as the function passed in. + * @example + * + * function sometimesAsync(arg, callback) { + * if (cache[arg]) { + * return callback(null, cache[arg]); // this would be synchronous!! + * } else { + * doSomeIO(arg, callback); // this IO would be asynchronous + * } + * } + * + * // this has a risk of stack overflows if many results are cached in a row + * async.mapSeries(args, sometimesAsync, done); + * + * // this will defer sometimesAsync's callback if necessary, + * // preventing stack overflows + * async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + */ + function ensureAsync(fn) { + if (isAsync(fn)) return fn; + return function (...args/*, callback*/) { + var callback = args.pop(); + var sync = true; + args.push((...innerArgs) => { + if (sync) { + setImmediate$1(() => callback(...innerArgs)); + } else { + callback(...innerArgs); + } + }); + fn.apply(this, args); + sync = false; + }; + } + + /** + * Returns `true` if every element in `coll` satisfies an async test. If any + * iteratee call returns `false`, the main `callback` is immediately called. + * + * @name every + * @static + * @memberOf module:Collections + * @method + * @alias all + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file4.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.every(fileList, fileExists, function(err, result) { + * console.log(result); + * // true + * // result is true since every file exists + * }); + * + * async.every(withMissingFileList, fileExists, function(err, result) { + * console.log(result); + * // false + * // result is false since NOT every file exists + * }); + * + * // Using Promises + * async.every(fileList, fileExists) + * .then( result => { + * console.log(result); + * // true + * // result is true since every file exists + * }).catch( err => { + * console.log(err); + * }); + * + * async.every(withMissingFileList, fileExists) + * .then( result => { + * console.log(result); + * // false + * // result is false since NOT every file exists + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.every(fileList, fileExists); + * console.log(result); + * // true + * // result is true since every file exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + * async () => { + * try { + * let result = await async.every(withMissingFileList, fileExists); + * console.log(result); + * // false + * // result is false since NOT every file exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function every(coll, iteratee, callback) { + return _createTester(bool => !bool, res => !res)(eachOf$1, coll, iteratee, callback) + } + var every$1 = awaitify(every, 3); + + /** + * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. + * + * @name everyLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ + function everyLimit(coll, limit, iteratee, callback) { + return _createTester(bool => !bool, res => !res)(eachOfLimit$2(limit), coll, iteratee, callback) + } + var everyLimit$1 = awaitify(everyLimit, 4); + + /** + * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. + * + * @name everySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in series. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ + function everySeries(coll, iteratee, callback) { + return _createTester(bool => !bool, res => !res)(eachOfSeries$1, coll, iteratee, callback) + } + var everySeries$1 = awaitify(everySeries, 3); + + function filterArray(eachfn, arr, iteratee, callback) { + var truthValues = new Array(arr.length); + eachfn(arr, (x, index, iterCb) => { + iteratee(x, (err, v) => { + truthValues[index] = !!v; + iterCb(err); + }); + }, err => { + if (err) return callback(err); + var results = []; + for (var i = 0; i < arr.length; i++) { + if (truthValues[i]) results.push(arr[i]); + } + callback(null, results); + }); + } + + function filterGeneric(eachfn, coll, iteratee, callback) { + var results = []; + eachfn(coll, (x, index, iterCb) => { + iteratee(x, (err, v) => { + if (err) return iterCb(err); + if (v) { + results.push({index, value: x}); + } + iterCb(err); + }); + }, err => { + if (err) return callback(err); + callback(null, results + .sort((a, b) => a.index - b.index) + .map(v => v.value)); + }); + } + + function _filter(eachfn, coll, iteratee, callback) { + var filter = isArrayLike(coll) ? filterArray : filterGeneric; + return filter(eachfn, coll, wrapAsync(iteratee), callback); + } + + /** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.filter(files, fileExists, function(err, results) { + * if(err) { + * console.log(err); + * } else { + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * } + * }); + * + * // Using Promises + * async.filter(files, fileExists) + * .then(results => { + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.filter(files, fileExists); + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function filter (coll, iteratee, callback) { + return _filter(eachOf$1, coll, iteratee, callback) + } + var filter$1 = awaitify(filter, 3); + + /** + * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a + * time. + * + * @name filterLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback provided + */ + function filterLimit (coll, limit, iteratee, callback) { + return _filter(eachOfLimit$2(limit), coll, iteratee, callback) + } + var filterLimit$1 = awaitify(filterLimit, 4); + + /** + * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. + * + * @name filterSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results) + * @returns {Promise} a promise, if no callback provided + */ + function filterSeries (coll, iteratee, callback) { + return _filter(eachOfSeries$1, coll, iteratee, callback) + } + var filterSeries$1 = awaitify(filterSeries, 3); + + /** + * Calls the asynchronous function `fn` with a callback parameter that allows it + * to call itself again, in series, indefinitely. + + * If an error is passed to the callback then `errback` is called with the + * error, and execution stops, otherwise it will never be called. + * + * @name forever + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} fn - an async function to call repeatedly. + * Invoked with (next). + * @param {Function} [errback] - when `fn` passes an error to it's callback, + * this function will be called, and execution stops. Invoked with (err). + * @returns {Promise} a promise that rejects if an error occurs and an errback + * is not passed + * @example + * + * async.forever( + * function(next) { + * // next is suitable for passing to things that need a callback(err [, whatever]); + * // it will result in this function being called again. + * }, + * function(err) { + * // if next is called with a value in its first parameter, it will appear + * // in here as 'err', and execution will stop. + * } + * ); + */ + function forever(fn, errback) { + var done = onlyOnce(errback); + var task = wrapAsync(ensureAsync(fn)); + + function next(err) { + if (err) return done(err); + if (err === false) return; + task(next); + } + return next(); + } + var forever$1 = awaitify(forever, 2); + + /** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time. + * + * @name groupByLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @returns {Promise} a promise, if no callback is passed + */ + function groupByLimit(coll, limit, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + return mapLimit$1(coll, limit, (val, iterCb) => { + _iteratee(val, (err, key) => { + if (err) return iterCb(err); + return iterCb(err, {key, val}); + }); + }, (err, mapResults) => { + var result = {}; + // from MDN, handle object having an `hasOwnProperty` prop + var {hasOwnProperty} = Object.prototype; + + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + var {key} = mapResults[i]; + var {val} = mapResults[i]; + + if (hasOwnProperty.call(result, key)) { + result[key].push(val); + } else { + result[key] = [val]; + } + } + } + + return callback(err, result); + }); + } + + var groupByLimit$1 = awaitify(groupByLimit, 4); + + /** + * Returns a new object, where each value corresponds to an array of items, from + * `coll`, that returned the corresponding key. That is, the keys of the object + * correspond to the values passed to the `iteratee` callback. + * + * Note: Since this function applies the `iteratee` to each item in parallel, + * there is no guarantee that the `iteratee` functions will complete in order. + * However, the values for each key in the `result` will be in the same order as + * the original `coll`. For Objects, the values will roughly be in the order of + * the original Objects' keys (but this can vary across JavaScript engines). + * + * @name groupBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const files = ['dir1/file1.txt','dir2','dir4'] + * + * // asynchronous function that detects file type as none, file, or directory + * function detectFile(file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(null, 'none'); + * } + * callback(null, stat.isDirectory() ? 'directory' : 'file'); + * }); + * } + * + * //Using callbacks + * async.groupBy(files, detectFile, function(err, result) { + * if(err) { + * console.log(err); + * } else { + * console.log(result); + * // { + * // file: [ 'dir1/file1.txt' ], + * // none: [ 'dir4' ], + * // directory: [ 'dir2'] + * // } + * // result is object containing the files grouped by type + * } + * }); + * + * // Using Promises + * async.groupBy(files, detectFile) + * .then( result => { + * console.log(result); + * // { + * // file: [ 'dir1/file1.txt' ], + * // none: [ 'dir4' ], + * // directory: [ 'dir2'] + * // } + * // result is object containing the files grouped by type + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.groupBy(files, detectFile); + * console.log(result); + * // { + * // file: [ 'dir1/file1.txt' ], + * // none: [ 'dir4' ], + * // directory: [ 'dir2'] + * // } + * // result is object containing the files grouped by type + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function groupBy (coll, iteratee, callback) { + return groupByLimit$1(coll, Infinity, iteratee, callback) + } + + /** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. + * + * @name groupBySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whose + * properties are arrays of values which returned the corresponding key. + * @returns {Promise} a promise, if no callback is passed + */ + function groupBySeries (coll, iteratee, callback) { + return groupByLimit$1(coll, 1, iteratee, callback) + } + + /** + * Logs the result of an `async` function to the `console`. Only works in + * Node.js or in browsers that support `console.log` and `console.error` (such + * as FF and Chrome). If multiple arguments are returned from the async + * function, `console.log` is called on each argument in order. + * + * @name log + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, 'hello ' + name); + * }, 1000); + * }; + * + * // in the node repl + * node> async.log(hello, 'world'); + * 'hello world' + */ + var log = consoleFunc('log'); + + /** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a + * time. + * + * @name mapValuesLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback is passed + */ + function mapValuesLimit(obj, limit, iteratee, callback) { + callback = once(callback); + var newObj = {}; + var _iteratee = wrapAsync(iteratee); + return eachOfLimit$2(limit)(obj, (val, key, next) => { + _iteratee(val, key, (err, result) => { + if (err) return next(err); + newObj[key] = result; + next(err); + }); + }, err => callback(err, newObj)); + } + + var mapValuesLimit$1 = awaitify(mapValuesLimit, 4); + + /** + * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. + * + * Produces a new Object by mapping each value of `obj` through the `iteratee` + * function. The `iteratee` is called each `value` and `key` from `obj` and a + * callback for when it has finished processing. Each of these callbacks takes + * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` + * passes an error to its callback, the main `callback` (for the `mapValues` + * function) is immediately called with the error. + * + * Note, the order of the keys in the result is not guaranteed. The keys will + * be roughly in the order they complete, (but this is very engine-specific) + * + * @name mapValues + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * // file4.txt does not exist + * + * const fileMap = { + * f1: 'file1.txt', + * f2: 'file2.txt', + * f3: 'file3.txt' + * }; + * + * const withMissingFileMap = { + * f1: 'file1.txt', + * f2: 'file2.txt', + * f3: 'file4.txt' + * }; + * + * // asynchronous function that returns the file size in bytes + * function getFileSizeInBytes(file, key, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, stat.size); + * }); + * } + * + * // Using callbacks + * async.mapValues(fileMap, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * } else { + * console.log(result); + * // result is now a map of file size in bytes for each file, e.g. + * // { + * // f1: 1000, + * // f2: 2000, + * // f3: 3000 + * // } + * } + * }); + * + * // Error handling + * async.mapValues(withMissingFileMap, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(result); + * } + * }); + * + * // Using Promises + * async.mapValues(fileMap, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * // result is now a map of file size in bytes for each file, e.g. + * // { + * // f1: 1000, + * // f2: 2000, + * // f3: 3000 + * // } + * }).catch (err => { + * console.log(err); + * }); + * + * // Error Handling + * async.mapValues(withMissingFileMap, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * }).catch (err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.mapValues(fileMap, getFileSizeInBytes); + * console.log(result); + * // result is now a map of file size in bytes for each file, e.g. + * // { + * // f1: 1000, + * // f2: 2000, + * // f3: 3000 + * // } + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let result = await async.mapValues(withMissingFileMap, getFileSizeInBytes); + * console.log(result); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ + function mapValues(obj, iteratee, callback) { + return mapValuesLimit$1(obj, Infinity, iteratee, callback) + } + + /** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time. + * + * @name mapValuesSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback is passed + */ + function mapValuesSeries(obj, iteratee, callback) { + return mapValuesLimit$1(obj, 1, iteratee, callback) + } + + /** + * Caches the results of an async function. When creating a hash to store + * function results against, the callback is omitted from the hash and an + * optional hash function can be used. + * + * **Note: if the async function errs, the result will not be cached and + * subsequent calls will call the wrapped function.** + * + * If no hash function is specified, the first argument is used as a hash key, + * which may work reasonably if it is a string or a data type that converts to a + * distinct string. Note that objects and arrays will not behave reasonably. + * Neither will cases where the other arguments are significant. In such cases, + * specify your own hash function. + * + * The cache of results is exposed as the `memo` property of the function + * returned by `memoize`. + * + * @name memoize + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function to proxy and cache results from. + * @param {Function} hasher - An optional function for generating a custom hash + * for storing results. It has all the arguments applied to it apart from the + * callback, and must be synchronous. + * @returns {AsyncFunction} a memoized version of `fn` + * @example + * + * var slow_fn = function(name, callback) { + * // do something + * callback(null, result); + * }; + * var fn = async.memoize(slow_fn); + * + * // fn can now be used as if it were slow_fn + * fn('some name', function() { + * // callback + * }); + */ + function memoize(fn, hasher = v => v) { + var memo = Object.create(null); + var queues = Object.create(null); + var _fn = wrapAsync(fn); + var memoized = initialParams((args, callback) => { + var key = hasher(...args); + if (key in memo) { + setImmediate$1(() => callback(null, ...memo[key])); + } else if (key in queues) { + queues[key].push(callback); + } else { + queues[key] = [callback]; + _fn(...args, (err, ...resultArgs) => { + // #1465 don't memoize if an error occurred + if (!err) { + memo[key] = resultArgs; + } + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i](err, ...resultArgs); + } + }); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; + } + + /* istanbul ignore file */ + + /** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `process.nextTick`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name nextTick + * @static + * @memberOf module:Utils + * @method + * @see [async.setImmediate]{@link module:Utils.setImmediate} + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ + var _defer; + + if (hasNextTick) { + _defer = process.nextTick; + } else if (hasSetImmediate) { + _defer = setImmediate; + } else { + _defer = fallback; + } + + var nextTick = wrap(_defer); + + var _parallel = awaitify((eachfn, tasks, callback) => { + var results = isArrayLike(tasks) ? [] : {}; + + eachfn(tasks, (task, key, taskCb) => { + wrapAsync(task)((err, ...result) => { + if (result.length < 2) { + [result] = result; + } + results[key] = result; + taskCb(err); + }); + }, err => callback(err, results)); + }, 3); + + /** + * Run the `tasks` collection of functions in parallel, without waiting until + * the previous function has completed. If any of the functions pass an error to + * its callback, the main `callback` is immediately called with the value of the + * error. Once the `tasks` have completed, the results are passed to the final + * `callback` as an array. + * + * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about + * parallel execution of code. If your tasks do not use any timers or perform + * any I/O, they will actually be executed in series. Any synchronous setup + * sections for each task will happen one after the other. JavaScript remains + * single-threaded. + * + * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the + * execution of other tasks when a task fails. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.parallel}. + * + * @name parallel + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * @returns {Promise} a promise, if a callback is not passed + * + * @example + * + * //Using Callbacks + * async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], function(err, results) { + * console.log(results); + * // results is equal to ['one','two'] even though + * // the second function had a shorter timeout. + * }); + * + * // an example using an object instead of an array + * async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }); + * + * //Using Promises + * async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]).then(results => { + * console.log(results); + * // results is equal to ['one','two'] even though + * // the second function had a shorter timeout. + * }).catch(err => { + * console.log(err); + * }); + * + * // an example using an object instead of an array + * async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }).then(results => { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }).catch(err => { + * console.log(err); + * }); + * + * //Using async/await + * async () => { + * try { + * let results = await async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]); + * console.log(results); + * // results is equal to ['one','two'] even though + * // the second function had a shorter timeout. + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // an example using an object instead of an array + * async () => { + * try { + * let results = await async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }); + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function parallel(tasks, callback) { + return _parallel(eachOf$1, tasks, callback); + } + + /** + * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a + * time. + * + * @name parallelLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.parallel]{@link module:ControlFlow.parallel} + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * @returns {Promise} a promise, if a callback is not passed + */ + function parallelLimit(tasks, limit, callback) { + return _parallel(eachOfLimit$2(limit), tasks, callback); + } + + /** + * A queue of tasks for the worker function to complete. + * @typedef {Iterable} QueueObject + * @memberOf module:ControlFlow + * @property {Function} length - a function returning the number of items + * waiting to be processed. Invoke with `queue.length()`. + * @property {boolean} started - a boolean indicating whether or not any + * items have been pushed and processed by the queue. + * @property {Function} running - a function returning the number of items + * currently being processed. Invoke with `queue.running()`. + * @property {Function} workersList - a function returning the array of items + * currently being processed. Invoke with `queue.workersList()`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke with `queue.idle()`. + * @property {number} concurrency - an integer for determining how many `worker` + * functions should be run in parallel. This property can be changed after a + * `queue` is created to alter the concurrency on-the-fly. + * @property {number} payload - an integer that specifies how many items are + * passed to the worker function at a time. only applies if this is a + * [cargo]{@link module:ControlFlow.cargo} object + * @property {AsyncFunction} push - add a new task to the `queue`. Calls `callback` + * once the `worker` has finished processing the task. Instead of a single task, + * a `tasks` array can be submitted. The respective callback is used for every + * task in the list. Invoke with `queue.push(task, [callback])`, + * @property {AsyncFunction} unshift - add a new task to the front of the `queue`. + * Invoke with `queue.unshift(task, [callback])`. + * @property {AsyncFunction} pushAsync - the same as `q.push`, except this returns + * a promise that rejects if an error occurs. + * @property {AsyncFunction} unshiftAsync - the same as `q.unshift`, except this returns + * a promise that rejects if an error occurs. + * @property {Function} remove - remove items from the queue that match a test + * function. The test function will be passed an object with a `data` property, + * and a `priority` property, if this is a + * [priorityQueue]{@link module:ControlFlow.priorityQueue} object. + * Invoked with `queue.remove(testFn)`, where `testFn` is of the form + * `function ({data, priority}) {}` and returns a Boolean. + * @property {Function} saturated - a function that sets a callback that is + * called when the number of running workers hits the `concurrency` limit, and + * further tasks will be queued. If the callback is omitted, `q.saturated()` + * returns a promise for the next occurrence. + * @property {Function} unsaturated - a function that sets a callback that is + * called when the number of running workers is less than the `concurrency` & + * `buffer` limits, and further tasks will not be queued. If the callback is + * omitted, `q.unsaturated()` returns a promise for the next occurrence. + * @property {number} buffer - A minimum threshold buffer in order to say that + * the `queue` is `unsaturated`. + * @property {Function} empty - a function that sets a callback that is called + * when the last item from the `queue` is given to a `worker`. If the callback + * is omitted, `q.empty()` returns a promise for the next occurrence. + * @property {Function} drain - a function that sets a callback that is called + * when the last item from the `queue` has returned from the `worker`. If the + * callback is omitted, `q.drain()` returns a promise for the next occurrence. + * @property {Function} error - a function that sets a callback that is called + * when a task errors. Has the signature `function(error, task)`. If the + * callback is omitted, `error()` returns a promise that rejects on the next + * error. + * @property {boolean} paused - a boolean for determining whether the queue is + * in a paused state. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke with `queue.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke with `queue.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. No more tasks + * should be pushed to the queue after calling this function. Invoke with `queue.kill()`. + * + * @example + * const q = async.queue(worker, 2) + * q.push(item1) + * q.push(item2) + * q.push(item3) + * // queues are iterable, spread into an array to inspect + * const items = [...q] // [item1, item2, item3] + * // or use for of + * for (let item of q) { + * console.log(item) + * } + * + * q.drain(() => { + * console.log('all done') + * }) + * // or + * await q.drain() + */ + + /** + * Creates a `queue` object with the specified `concurrency`. Tasks added to the + * `queue` are processed in parallel (up to the `concurrency` limit). If all + * `worker`s are in progress, the task is queued until one becomes available. + * Once a `worker` completes a `task`, that `task`'s callback is called. + * + * @name queue + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. Invoked with (task, callback). + * @param {number} [concurrency=1] - An `integer` for determining how many + * `worker` functions should be run in parallel. If omitted, the concurrency + * defaults to `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can be + * attached as certain properties to listen for specific events during the + * lifecycle of the queue. + * @example + * + * // create a queue object with concurrency 2 + * var q = async.queue(function(task, callback) { + * console.log('hello ' + task.name); + * callback(); + * }, 2); + * + * // assign a callback + * q.drain(function() { + * console.log('all items have been processed'); + * }); + * // or await the end + * await q.drain() + * + * // assign an error callback + * q.error(function(err, task) { + * console.error('task experienced an error'); + * }); + * + * // add some items to the queue + * q.push({name: 'foo'}, function(err) { + * console.log('finished processing foo'); + * }); + * // callback is optional + * q.push({name: 'bar'}); + * + * // add some items to the queue (batch-wise) + * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) { + * console.log('finished processing item'); + * }); + * + * // add some items to the front of the queue + * q.unshift({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + */ + function queue (worker, concurrency) { + var _worker = wrapAsync(worker); + return queue$1((items, cb) => { + _worker(items[0], cb); + }, concurrency, 1); + } + + // Binary min-heap implementation used for priority queue. + // Implementation is stable, i.e. push time is considered for equal priorities + class Heap { + constructor() { + this.heap = []; + this.pushCount = Number.MIN_SAFE_INTEGER; + } + + get length() { + return this.heap.length; + } + + empty () { + this.heap = []; + return this; + } + + percUp(index) { + let p; + + while (index > 0 && smaller(this.heap[index], this.heap[p=parent(index)])) { + let t = this.heap[index]; + this.heap[index] = this.heap[p]; + this.heap[p] = t; + + index = p; + } + } + + percDown(index) { + let l; + + while ((l=leftChi(index)) < this.heap.length) { + if (l+1 < this.heap.length && smaller(this.heap[l+1], this.heap[l])) { + l = l+1; + } + + if (smaller(this.heap[index], this.heap[l])) { + break; + } + + let t = this.heap[index]; + this.heap[index] = this.heap[l]; + this.heap[l] = t; + + index = l; + } + } + + push(node) { + node.pushCount = ++this.pushCount; + this.heap.push(node); + this.percUp(this.heap.length-1); + } + + unshift(node) { + return this.heap.push(node); + } + + shift() { + let [top] = this.heap; + + this.heap[0] = this.heap[this.heap.length-1]; + this.heap.pop(); + this.percDown(0); + + return top; + } + + toArray() { + return [...this]; + } + + *[Symbol.iterator] () { + for (let i = 0; i < this.heap.length; i++) { + yield this.heap[i].data; + } + } + + remove (testFn) { + let j = 0; + for (let i = 0; i < this.heap.length; i++) { + if (!testFn(this.heap[i])) { + this.heap[j] = this.heap[i]; + j++; + } + } + + this.heap.splice(j); + + for (let i = parent(this.heap.length-1); i >= 0; i--) { + this.percDown(i); + } + + return this; + } + } + + function leftChi(i) { + return (i<<1)+1; + } + + function parent(i) { + return ((i+1)>>1)-1; + } + + function smaller(x, y) { + if (x.priority !== y.priority) { + return x.priority < y.priority; + } + else { + return x.pushCount < y.pushCount; + } + } + + /** + * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and + * completed in ascending priority order. + * + * @name priorityQueue + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. + * Invoked with (task, callback). + * @param {number} concurrency - An `integer` for determining how many `worker` + * functions should be run in parallel. If omitted, the concurrency defaults to + * `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are three + * differences between `queue` and `priorityQueue` objects: + * * `push(task, priority, [callback])` - `priority` should be a number. If an + * array of `tasks` is given, all tasks will be assigned the same priority. + * * `pushAsync(task, priority, [callback])` - the same as `priorityQueue.push`, + * except this returns a promise that rejects if an error occurs. + * * The `unshift` and `unshiftAsync` methods were removed. + */ + function priorityQueue(worker, concurrency) { + // Start with a normal queue + var q = queue(worker, concurrency); + + var { + push, + pushAsync + } = q; + + q._tasks = new Heap(); + q._createTaskItem = ({data, priority}, callback) => { + return { + data, + priority, + callback + }; + }; + + function createDataItems(tasks, priority) { + if (!Array.isArray(tasks)) { + return {data: tasks, priority}; + } + return tasks.map(data => { return {data, priority}; }); + } + + // Override push to accept second parameter representing priority + q.push = function(data, priority = 0, callback) { + return push(createDataItems(data, priority), callback); + }; + + q.pushAsync = function(data, priority = 0, callback) { + return pushAsync(createDataItems(data, priority), callback); + }; + + // Remove unshift functions + delete q.unshift; + delete q.unshiftAsync; + + return q; + } + + /** + * Runs the `tasks` array of functions in parallel, without waiting until the + * previous function has completed. Once any of the `tasks` complete or pass an + * error to its callback, the main `callback` is immediately called. It's + * equivalent to `Promise.race()`. + * + * @name race + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} + * to run. Each function can complete with an optional `result` value. + * @param {Function} callback - A callback to run once any of the functions have + * completed. This function gets an error or result from the first function that + * completed. Invoked with (err, result). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * async.race([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // main callback + * function(err, result) { + * // the result will be equal to 'two' as it finishes earlier + * }); + */ + function race(tasks, callback) { + callback = once(callback); + if (!Array.isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); + if (!tasks.length) return callback(); + for (var i = 0, l = tasks.length; i < l; i++) { + wrapAsync(tasks[i])(callback); + } + } + + var race$1 = awaitify(race, 2); + + /** + * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. + * + * @name reduceRight + * @static + * @memberOf module:Collections + * @method + * @see [async.reduce]{@link module:Collections.reduce} + * @alias foldr + * @category Collection + * @param {Array} array - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee completes with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + * @returns {Promise} a promise, if no callback is passed + */ + function reduceRight (array, memo, iteratee, callback) { + var reversed = [...array].reverse(); + return reduce$1(reversed, memo, iteratee, callback); + } + + /** + * Wraps the async function in another function that always completes with a + * result object, even when it errors. + * + * The result object has either the property `error` or `value`. + * + * @name reflect + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function you want to wrap + * @returns {Function} - A function that always passes null to it's callback as + * the error. The second argument to the callback will be an `object` with + * either an `error` or a `value` property. + * @example + * + * async.parallel([ + * async.reflect(function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }), + * async.reflect(function(callback) { + * // do some more stuff but error ... + * callback('bad stuff happened'); + * }), + * async.reflect(function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * }) + * ], + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = 'bad stuff happened' + * // results[2].value = 'two' + * }); + */ + function reflect(fn) { + var _fn = wrapAsync(fn); + return initialParams(function reflectOn(args, reflectCallback) { + args.push((error, ...cbArgs) => { + let retVal = {}; + if (error) { + retVal.error = error; + } + if (cbArgs.length > 0){ + var value = cbArgs; + if (cbArgs.length <= 1) { + [value] = cbArgs; + } + retVal.value = value; + } + reflectCallback(null, retVal); + }); + + return _fn.apply(this, args); + }); + } + + /** + * A helper function that wraps an array or an object of functions with `reflect`. + * + * @name reflectAll + * @static + * @memberOf module:Utils + * @method + * @see [async.reflect]{@link module:Utils.reflect} + * @category Util + * @param {Array|Object|Iterable} tasks - The collection of + * [async functions]{@link AsyncFunction} to wrap in `async.reflect`. + * @returns {Array} Returns an array of async functions, each wrapped in + * `async.reflect` + * @example + * + * let tasks = [ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * // do some more stuff but error ... + * callback(new Error('bad stuff happened')); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = Error('bad stuff happened') + * // results[2].value = 'two' + * }); + * + * // an example using an object instead of an array + * let tasks = { + * one: function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * two: function(callback) { + * callback('two'); + * }, + * three: function(callback) { + * setTimeout(function() { + * callback(null, 'three'); + * }, 100); + * } + * }; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results.one.value = 'one' + * // results.two.error = 'two' + * // results.three.value = 'three' + * }); + */ + function reflectAll(tasks) { + var results; + if (Array.isArray(tasks)) { + results = tasks.map(reflect); + } else { + results = {}; + Object.keys(tasks).forEach(key => { + results[key] = reflect.call(this, tasks[key]); + }); + } + return results; + } + + function reject$2(eachfn, arr, _iteratee, callback) { + const iteratee = wrapAsync(_iteratee); + return _filter(eachfn, arr, (value, cb) => { + iteratee(value, (err, v) => { + cb(err, !v); + }); + }, callback); + } + + /** + * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test. + * + * @name reject + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.reject(fileList, fileExists, function(err, results) { + * // [ 'dir3/file6.txt' ] + * // results now equals an array of the non-existing files + * }); + * + * // Using Promises + * async.reject(fileList, fileExists) + * .then( results => { + * console.log(results); + * // [ 'dir3/file6.txt' ] + * // results now equals an array of the non-existing files + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.reject(fileList, fileExists); + * console.log(results); + * // [ 'dir3/file6.txt' ] + * // results now equals an array of the non-existing files + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function reject (coll, iteratee, callback) { + return reject$2(eachOf$1, coll, iteratee, callback) + } + var reject$1 = awaitify(reject, 3); + + /** + * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a + * time. + * + * @name rejectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ + function rejectLimit (coll, limit, iteratee, callback) { + return reject$2(eachOfLimit$2(limit), coll, iteratee, callback) + } + var rejectLimit$1 = awaitify(rejectLimit, 4); + + /** + * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. + * + * @name rejectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ + function rejectSeries (coll, iteratee, callback) { + return reject$2(eachOfSeries$1, coll, iteratee, callback) + } + var rejectSeries$1 = awaitify(rejectSeries, 3); + + function constant(value) { + return function () { + return value; + } + } + + /** + * Attempts to get a successful response from `task` no more than `times` times + * before returning an error. If the task is successful, the `callback` will be + * passed the result of the successful task. If all attempts fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name retry + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @see [async.retryable]{@link module:ControlFlow.retryable} + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an + * object with `times` and `interval` or a number. + * * `times` - The number of attempts to make before giving up. The default + * is `5`. + * * `interval` - The time to wait between retries, in milliseconds. The + * default is `0`. The interval may also be specified as a function of the + * retry count (see example). + * * `errorFilter` - An optional synchronous function that is invoked on + * erroneous result. If it returns `true` the retry attempts will continue; + * if the function returns `false` the retry flow is aborted with the current + * attempt's error and result being returned to the final callback. + * Invoked with (err). + * * If `opts` is a number, the number specifies the number of times to retry, + * with the default interval of `0`. + * @param {AsyncFunction} task - An async function to retry. + * Invoked with (callback). + * @param {Function} [callback] - An optional callback which is called when the + * task has succeeded, or after the final failed attempt. It receives the `err` + * and `result` arguments of the last attempt at completing the `task`. Invoked + * with (err, results). + * @returns {Promise} a promise if no callback provided + * + * @example + * + * // The `retry` function can be used as a stand-alone control flow by passing + * // a callback, as shown below: + * + * // try calling apiMethod 3 times + * async.retry(3, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 3 times, waiting 200 ms between each retry + * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 10 times with exponential backoff + * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) + * async.retry({ + * times: 10, + * interval: function(retryCount) { + * return 50 * Math.pow(2, retryCount); + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod the default 5 times no delay between each retry + * async.retry(apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod only when error condition satisfies, all other + * // errors will abort the retry control flow and return to final callback + * async.retry({ + * errorFilter: function(err) { + * return err.message === 'Temporary error'; // only retry on a specific error + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // to retry individual methods that are not as reliable within other + * // control flow functions, use the `retryable` wrapper: + * async.auto({ + * users: api.getUsers.bind(api), + * payments: async.retryable(3, api.getPayments.bind(api)) + * }, function(err, results) { + * // do something with the results + * }); + * + */ + const DEFAULT_TIMES = 5; + const DEFAULT_INTERVAL = 0; + + function retry(opts, task, callback) { + var options = { + times: DEFAULT_TIMES, + intervalFunc: constant(DEFAULT_INTERVAL) + }; + + if (arguments.length < 3 && typeof opts === 'function') { + callback = task || promiseCallback(); + task = opts; + } else { + parseTimes(options, opts); + callback = callback || promiseCallback(); + } + + if (typeof task !== 'function') { + throw new Error("Invalid arguments for async.retry"); + } + + var _task = wrapAsync(task); + + var attempt = 1; + function retryAttempt() { + _task((err, ...args) => { + if (err === false) return + if (err && attempt++ < options.times && + (typeof options.errorFilter != 'function' || + options.errorFilter(err))) { + setTimeout(retryAttempt, options.intervalFunc(attempt - 1)); + } else { + callback(err, ...args); + } + }); + } + + retryAttempt(); + return callback[PROMISE_SYMBOL] + } + + function parseTimes(acc, t) { + if (typeof t === 'object') { + acc.times = +t.times || DEFAULT_TIMES; + + acc.intervalFunc = typeof t.interval === 'function' ? + t.interval : + constant(+t.interval || DEFAULT_INTERVAL); + + acc.errorFilter = t.errorFilter; + } else if (typeof t === 'number' || typeof t === 'string') { + acc.times = +t || DEFAULT_TIMES; + } else { + throw new Error("Invalid arguments for async.retry"); + } + } + + /** + * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method + * wraps a task and makes it retryable, rather than immediately calling it + * with retries. + * + * @name retryable + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.retry]{@link module:ControlFlow.retry} + * @category Control Flow + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional + * options, exactly the same as from `retry`, except for a `opts.arity` that + * is the arity of the `task` function, defaulting to `task.length` + * @param {AsyncFunction} task - the asynchronous function to wrap. + * This function will be passed any arguments passed to the returned wrapper. + * Invoked with (...args, callback). + * @returns {AsyncFunction} The wrapped function, which when invoked, will + * retry on an error, based on the parameters specified in `opts`. + * This function will accept the same parameters as `task`. + * @example + * + * async.auto({ + * dep1: async.retryable(3, getFromFlakyService), + * process: ["dep1", async.retryable(3, function (results, cb) { + * maybeProcessData(results.dep1, cb); + * })] + * }, callback); + */ + function retryable (opts, task) { + if (!task) { + task = opts; + opts = null; + } + let arity = (opts && opts.arity) || task.length; + if (isAsync(task)) { + arity += 1; + } + var _task = wrapAsync(task); + return initialParams((args, callback) => { + if (args.length < arity - 1 || callback == null) { + args.push(callback); + callback = promiseCallback(); + } + function taskFn(cb) { + _task(...args, cb); + } + + if (opts) retry(opts, taskFn, callback); + else retry(taskFn, callback); + + return callback[PROMISE_SYMBOL] + }); + } + + /** + * Run the functions in the `tasks` collection in series, each one running once + * the previous function has completed. If any functions in the series pass an + * error to its callback, no more functions are run, and `callback` is + * immediately called with the value of the error. Otherwise, `callback` + * receives an array of results when `tasks` have completed. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function, and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.series}. + * + * **Note** that while many implementations preserve the order of object + * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) + * explicitly states that + * + * > The mechanics and order of enumerating the properties is not specified. + * + * So if you rely on the order in which your series of functions are executed, + * and want this to work on all platforms, consider using an array. + * + * @name series + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing + * [async functions]{@link AsyncFunction} to run in series. + * Each function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This function gets a results array (or object) + * containing all the result arguments passed to the `task` callbacks. Invoked + * with (err, result). + * @return {Promise} a promise, if no callback is passed + * @example + * + * //Using Callbacks + * async.series([ + * function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 'two'); + * }, 100); + * } + * ], function(err, results) { + * console.log(results); + * // results is equal to ['one','two'] + * }); + * + * // an example using objects instead of arrays + * async.series({ + * one: function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }); + * + * //Using Promises + * async.series([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]).then(results => { + * console.log(results); + * // results is equal to ['one','two'] + * }).catch(err => { + * console.log(err); + * }); + * + * // an example using an object instead of an array + * async.series({ + * one: function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 2); + * }, 100); + * } + * }).then(results => { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }).catch(err => { + * console.log(err); + * }); + * + * //Using async/await + * async () => { + * try { + * let results = await async.series([ + * function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 'two'); + * }, 100); + * } + * ]); + * console.log(results); + * // results is equal to ['one','two'] + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // an example using an object instead of an array + * async () => { + * try { + * let results = await async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 2); + * }, 100); + * } + * }); + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function series(tasks, callback) { + return _parallel(eachOfSeries$1, tasks, callback); + } + + /** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // true + * // result is true since some file in the list exists + * } + *); + * + * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // false + * // result is false since none of the files exists + * } + *); + * + * // Using Promises + * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists) + * .then( result => { + * console.log(result); + * // true + * // result is true since some file in the list exists + * }).catch( err => { + * console.log(err); + * }); + * + * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists) + * .then( result => { + * console.log(result); + * // false + * // result is false since none of the files exists + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists); + * console.log(result); + * // true + * // result is true since some file in the list exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + * async () => { + * try { + * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists); + * console.log(result); + * // false + * // result is false since none of the files exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function some(coll, iteratee, callback) { + return _createTester(Boolean, res => res)(eachOf$1, coll, iteratee, callback) + } + var some$1 = awaitify(some, 3); + + /** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ + function someLimit(coll, limit, iteratee, callback) { + return _createTester(Boolean, res => res)(eachOfLimit$2(limit), coll, iteratee, callback) + } + var someLimit$1 = awaitify(someLimit, 4); + + /** + * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. + * + * @name someSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anySeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in series. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ + function someSeries(coll, iteratee, callback) { + return _createTester(Boolean, res => res)(eachOfSeries$1, coll, iteratee, callback) + } + var someSeries$1 = awaitify(someSeries, 3); + + /** + * Sorts a list by the results of running each `coll` value through an async + * `iteratee`. + * + * @name sortBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a value to use as the sort criteria as + * its `result`. + * Invoked with (item, callback). + * @param {Function} callback - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is the items + * from the original `coll` sorted by the values returned by the `iteratee` + * calls. Invoked with (err, results). + * @returns {Promise} a promise, if no callback passed + * @example + * + * // bigfile.txt is a file that is 251100 bytes in size + * // mediumfile.txt is a file that is 11000 bytes in size + * // smallfile.txt is a file that is 121 bytes in size + * + * // asynchronous function that returns the file size in bytes + * function getFileSizeInBytes(file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, stat.size); + * }); + * } + * + * // Using callbacks + * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes, + * function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * } + * } + * ); + * + * // By modifying the callback parameter the + * // sorting order can be influenced: + * + * // ascending order + * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) { + * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) { + * if (getFileSizeErr) return callback(getFileSizeErr); + * callback(null, fileSize); + * }); + * }, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * } + * } + * ); + * + * // descending order + * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) { + * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) { + * if (getFileSizeErr) { + * return callback(getFileSizeErr); + * } + * callback(null, fileSize * -1); + * }); + * }, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt'] + * } + * } + * ); + * + * // Error handling + * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes, + * function(err, results) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(results); + * } + * } + * ); + * + * // Using Promises + * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes) + * .then( results => { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * }).catch( err => { + * console.log(err); + * }); + * + * // Error handling + * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes) + * .then( results => { + * console.log(results); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * (async () => { + * try { + * let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes); + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * } + * catch (err) { + * console.log(err); + * } + * })(); + * + * // Error handling + * async () => { + * try { + * let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes); + * console.log(results); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ + function sortBy (coll, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + return map$1(coll, (x, iterCb) => { + _iteratee(x, (err, criteria) => { + if (err) return iterCb(err); + iterCb(err, {value: x, criteria}); + }); + }, (err, results) => { + if (err) return callback(err); + callback(null, results.sort(comparator).map(v => v.value)); + }); + + function comparator(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } + } + var sortBy$1 = awaitify(sortBy, 3); + + /** + * Sets a time limit on an asynchronous function. If the function does not call + * its callback within the specified milliseconds, it will be called with a + * timeout error. The code property for the error object will be `'ETIMEDOUT'`. + * + * @name timeout + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} asyncFn - The async function to limit in time. + * @param {number} milliseconds - The specified time limit. + * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) + * to timeout Error for more information.. + * @returns {AsyncFunction} Returns a wrapped function that can be used with any + * of the control flow functions. + * Invoke this function with the same parameters as you would `asyncFunc`. + * @example + * + * function myFunction(foo, callback) { + * doAsyncTask(foo, function(err, data) { + * // handle errors + * if (err) return callback(err); + * + * // do some stuff ... + * + * // return processed data + * return callback(null, data); + * }); + * } + * + * var wrapped = async.timeout(myFunction, 1000); + * + * // call `wrapped` as you would `myFunction` + * wrapped({ bar: 'bar' }, function(err, data) { + * // if `myFunction` takes < 1000 ms to execute, `err` + * // and `data` will have their expected values + * + * // else `err` will be an Error with the code 'ETIMEDOUT' + * }); + */ + function timeout(asyncFn, milliseconds, info) { + var fn = wrapAsync(asyncFn); + + return initialParams((args, callback) => { + var timedOut = false; + var timer; + + function timeoutCallback() { + var name = asyncFn.name || 'anonymous'; + var error = new Error('Callback function "' + name + '" timed out.'); + error.code = 'ETIMEDOUT'; + if (info) { + error.info = info; + } + timedOut = true; + callback(error); + } + + args.push((...cbArgs) => { + if (!timedOut) { + callback(...cbArgs); + clearTimeout(timer); + } + }); + + // setup timer and call original function + timer = setTimeout(timeoutCallback, milliseconds); + fn(...args); + }); + } + + function range(size) { + var result = Array(size); + while (size--) { + result[size] = size; + } + return result; + } + + /** + * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a + * time. + * + * @name timesLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} count - The number of times to run the function. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see [async.map]{@link module:Collections.map}. + * @returns {Promise} a promise, if no callback is provided + */ + function timesLimit(count, limit, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + return mapLimit$1(range(count), limit, _iteratee, callback); + } + + /** + * Calls the `iteratee` function `n` times, and accumulates results in the same + * manner you would use with [map]{@link module:Collections.map}. + * + * @name times + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.map]{@link module:Collections.map} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @returns {Promise} a promise, if no callback is provided + * @example + * + * // Pretend this is some complicated async factory + * var createUser = function(id, callback) { + * callback(null, { + * id: 'user' + id + * }); + * }; + * + * // generate 5 users + * async.times(5, function(n, next) { + * createUser(n, function(err, user) { + * next(err, user); + * }); + * }, function(err, users) { + * // we should now have 5 users + * }); + */ + function times (n, iteratee, callback) { + return timesLimit(n, Infinity, iteratee, callback) + } + + /** + * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time. + * + * @name timesSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @returns {Promise} a promise, if no callback is provided + */ + function timesSeries (n, iteratee, callback) { + return timesLimit(n, 1, iteratee, callback) + } + + /** + * A relative of `reduce`. Takes an Object or Array, and iterates over each + * element in parallel, each step potentially mutating an `accumulator` value. + * The type of the accumulator defaults to the type of collection passed in. + * + * @name transform + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {*} [accumulator] - The initial state of the transform. If omitted, + * it will default to an empty Object or Array, depending on the type of `coll` + * @param {AsyncFunction} iteratee - A function applied to each item in the + * collection that potentially modifies the accumulator. + * Invoked with (accumulator, item, key, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the transformed accumulator. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * + * // helper function that returns human-readable size format from bytes + * function formatBytes(bytes, decimals = 2) { + * // implementation not included for brevity + * return humanReadbleFilesize; + * } + * + * const fileList = ['file1.txt','file2.txt','file3.txt']; + * + * // asynchronous function that returns the file size, transformed to human-readable format + * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc. + * function transformFileSize(acc, value, key, callback) { + * fs.stat(value, function(err, stat) { + * if (err) { + * return callback(err); + * } + * acc[key] = formatBytes(stat.size); + * callback(null); + * }); + * } + * + * // Using callbacks + * async.transform(fileList, transformFileSize, function(err, result) { + * if(err) { + * console.log(err); + * } else { + * console.log(result); + * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ] + * } + * }); + * + * // Using Promises + * async.transform(fileList, transformFileSize) + * .then(result => { + * console.log(result); + * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ] + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * (async () => { + * try { + * let result = await async.transform(fileList, transformFileSize); + * console.log(result); + * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ] + * } + * catch (err) { + * console.log(err); + * } + * })(); + * + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * + * // helper function that returns human-readable size format from bytes + * function formatBytes(bytes, decimals = 2) { + * // implementation not included for brevity + * return humanReadbleFilesize; + * } + * + * const fileMap = { f1: 'file1.txt', f2: 'file2.txt', f3: 'file3.txt' }; + * + * // asynchronous function that returns the file size, transformed to human-readable format + * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc. + * function transformFileSize(acc, value, key, callback) { + * fs.stat(value, function(err, stat) { + * if (err) { + * return callback(err); + * } + * acc[key] = formatBytes(stat.size); + * callback(null); + * }); + * } + * + * // Using callbacks + * async.transform(fileMap, transformFileSize, function(err, result) { + * if(err) { + * console.log(err); + * } else { + * console.log(result); + * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' } + * } + * }); + * + * // Using Promises + * async.transform(fileMap, transformFileSize) + * .then(result => { + * console.log(result); + * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' } + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.transform(fileMap, transformFileSize); + * console.log(result); + * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ + function transform (coll, accumulator, iteratee, callback) { + if (arguments.length <= 3 && typeof accumulator === 'function') { + callback = iteratee; + iteratee = accumulator; + accumulator = Array.isArray(coll) ? [] : {}; + } + callback = once(callback || promiseCallback()); + var _iteratee = wrapAsync(iteratee); + + eachOf$1(coll, (v, k, cb) => { + _iteratee(accumulator, v, k, cb); + }, err => callback(err, accumulator)); + return callback[PROMISE_SYMBOL] + } + + /** + * It runs each task in series but stops whenever any of the functions were + * successful. If one of the tasks were successful, the `callback` will be + * passed the result of the successful task. If all tasks fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name tryEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to + * run, each function is passed a `callback(err, result)` it must call on + * completion with an error `err` (which can be `null`) and an optional `result` + * value. + * @param {Function} [callback] - An optional callback which is called when one + * of the tasks has succeeded, or all have failed. It receives the `err` and + * `result` arguments of the last attempt at completing the `task`. Invoked with + * (err, results). + * @returns {Promise} a promise, if no callback is passed + * @example + * async.tryEach([ + * function getDataFromFirstWebsite(callback) { + * // Try getting the data from the first website + * callback(err, data); + * }, + * function getDataFromSecondWebsite(callback) { + * // First website failed, + * // Try getting the data from the backup website + * callback(err, data); + * } + * ], + * // optional callback + * function(err, results) { + * Now do something with the data. + * }); + * + */ + function tryEach(tasks, callback) { + var error = null; + var result; + return eachSeries$1(tasks, (task, taskCb) => { + wrapAsync(task)((err, ...args) => { + if (err === false) return taskCb(err); + + if (args.length < 2) { + [result] = args; + } else { + result = args; + } + error = err; + taskCb(err ? null : {}); + }); + }, () => callback(error, result)); + } + + var tryEach$1 = awaitify(tryEach); + + /** + * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original, + * unmemoized form. Handy for testing. + * + * @name unmemoize + * @static + * @memberOf module:Utils + * @method + * @see [async.memoize]{@link module:Utils.memoize} + * @category Util + * @param {AsyncFunction} fn - the memoized function + * @returns {AsyncFunction} a function that calls the original unmemoized function + */ + function unmemoize(fn) { + return (...args) => { + return (fn.unmemoized || fn)(...args); + }; + } + + /** + * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. + * + * @name whilst + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `iteratee`. Invoked with (callback). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + * @example + * + * var count = 0; + * async.whilst( + * function test(cb) { cb(null, count < 5); }, + * function iter(callback) { + * count++; + * setTimeout(function() { + * callback(null, count); + * }, 1000); + * }, + * function (err, n) { + * // 5 seconds have passed, n = 5 + * } + * ); + */ + function whilst(test, iteratee, callback) { + callback = onlyOnce(callback); + var _fn = wrapAsync(iteratee); + var _test = wrapAsync(test); + var results = []; + + function next(err, ...rest) { + if (err) return callback(err); + results = rest; + if (err === false) return; + _test(check); + } + + function check(err, truth) { + if (err) return callback(err); + if (err === false) return; + if (!truth) return callback(null, ...results); + _fn(next); + } + + return _test(check); + } + var whilst$1 = awaitify(whilst, 3); + + /** + * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. `callback` will be passed an error and any + * arguments passed to the final `iteratee`'s callback. + * + * The inverse of [whilst]{@link module:ControlFlow.whilst}. + * + * @name until + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `iteratee`. Invoked with (callback). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if a callback is not passed + * + * @example + * const results = [] + * let finished = false + * async.until(function test(cb) { + * cb(null, finished) + * }, function iter(next) { + * fetchPage(url, (err, body) => { + * if (err) return next(err) + * results = results.concat(body.objects) + * finished = !!body.next + * next(err) + * }) + * }, function done (err) { + * // all pages have been fetched + * }) + */ + function until(test, iteratee, callback) { + const _test = wrapAsync(test); + return whilst$1((cb) => _test((err, truth) => cb (err, !truth)), iteratee, callback); + } + + /** + * Runs the `tasks` array of functions in series, each passing their results to + * the next in the array. However, if any of the `tasks` pass an error to their + * own callback, the next function is not executed, and the main `callback` is + * immediately called with the error. + * + * @name waterfall + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array of [async functions]{@link AsyncFunction} + * to run. + * Each function should complete with any number of `result` values. + * The `result` values will be passed as arguments, in order, to the next task. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This will be passed the results of the last task's + * callback. Invoked with (err, [results]). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * async.waterfall([ + * function(callback) { + * callback(null, 'one', 'two'); + * }, + * function(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * }, + * function(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + * ], function (err, result) { + * // result now equals 'done' + * }); + * + * // Or, with named functions: + * async.waterfall([ + * myFirstFunction, + * mySecondFunction, + * myLastFunction, + * ], function (err, result) { + * // result now equals 'done' + * }); + * function myFirstFunction(callback) { + * callback(null, 'one', 'two'); + * } + * function mySecondFunction(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * } + * function myLastFunction(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + */ + function waterfall (tasks, callback) { + callback = once(callback); + if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions')); + if (!tasks.length) return callback(); + var taskIndex = 0; + + function nextTask(args) { + var task = wrapAsync(tasks[taskIndex++]); + task(...args, onlyOnce(next)); + } + + function next(err, ...args) { + if (err === false) return + if (err || taskIndex === tasks.length) { + return callback(err, ...args); + } + nextTask(args); + } + + nextTask([]); + } + + var waterfall$1 = awaitify(waterfall); + + /** + * An "async function" in the context of Async is an asynchronous function with + * a variable number of parameters, with the final parameter being a callback. + * (`function (arg1, arg2, ..., callback) {}`) + * The final callback is of the form `callback(err, results...)`, which must be + * called once the function is completed. The callback should be called with a + * Error as its first argument to signal that an error occurred. + * Otherwise, if no error occurred, it should be called with `null` as the first + * argument, and any additional `result` arguments that may apply, to signal + * successful completion. + * The callback must be called exactly once, ideally on a later tick of the + * JavaScript event loop. + * + * This type of function is also referred to as a "Node-style async function", + * or a "continuation passing-style function" (CPS). Most of the methods of this + * library are themselves CPS/Node-style async functions, or functions that + * return CPS/Node-style async functions. + * + * Wherever we accept a Node-style async function, we also directly accept an + * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. + * In this case, the `async` function will not be passed a final callback + * argument, and any thrown error will be used as the `err` argument of the + * implicit callback, and the return value will be used as the `result` value. + * (i.e. a `rejected` of the returned Promise becomes the `err` callback + * argument, and a `resolved` value becomes the `result`.) + * + * Note, due to JavaScript limitations, we can only detect native `async` + * functions and not transpilied implementations. + * Your environment must have `async`/`await` support for this to work. + * (e.g. Node > v7.6, or a recent version of a modern browser). + * If you are using `async` functions through a transpiler (e.g. Babel), you + * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, + * because the `async function` will be compiled to an ordinary function that + * returns a promise. + * + * @typedef {Function} AsyncFunction + * @static + */ + + + var index = { + apply, + applyEach, + applyEachSeries, + asyncify, + auto, + autoInject, + cargo: cargo$1, + cargoQueue: cargo, + compose, + concat: concat$1, + concatLimit: concatLimit$1, + concatSeries: concatSeries$1, + constant: constant$1, + detect: detect$1, + detectLimit: detectLimit$1, + detectSeries: detectSeries$1, + dir, + doUntil, + doWhilst: doWhilst$1, + each, + eachLimit: eachLimit$1, + eachOf: eachOf$1, + eachOfLimit: eachOfLimit$1, + eachOfSeries: eachOfSeries$1, + eachSeries: eachSeries$1, + ensureAsync, + every: every$1, + everyLimit: everyLimit$1, + everySeries: everySeries$1, + filter: filter$1, + filterLimit: filterLimit$1, + filterSeries: filterSeries$1, + forever: forever$1, + groupBy, + groupByLimit: groupByLimit$1, + groupBySeries, + log, + map: map$1, + mapLimit: mapLimit$1, + mapSeries: mapSeries$1, + mapValues, + mapValuesLimit: mapValuesLimit$1, + mapValuesSeries, + memoize, + nextTick, + parallel, + parallelLimit, + priorityQueue, + queue, + race: race$1, + reduce: reduce$1, + reduceRight, + reflect, + reflectAll, + reject: reject$1, + rejectLimit: rejectLimit$1, + rejectSeries: rejectSeries$1, + retry, + retryable, + seq, + series, + setImmediate: setImmediate$1, + some: some$1, + someLimit: someLimit$1, + someSeries: someSeries$1, + sortBy: sortBy$1, + timeout, + times, + timesLimit, + timesSeries, + transform, + tryEach: tryEach$1, + unmemoize, + until, + waterfall: waterfall$1, + whilst: whilst$1, + + // aliases + all: every$1, + allLimit: everyLimit$1, + allSeries: everySeries$1, + any: some$1, + anyLimit: someLimit$1, + anySeries: someSeries$1, + find: detect$1, + findLimit: detectLimit$1, + findSeries: detectSeries$1, + flatMap: concat$1, + flatMapLimit: concatLimit$1, + flatMapSeries: concatSeries$1, + forEach: each, + forEachSeries: eachSeries$1, + forEachLimit: eachLimit$1, + forEachOf: eachOf$1, + forEachOfSeries: eachOfSeries$1, + forEachOfLimit: eachOfLimit$1, + inject: reduce$1, + foldl: reduce$1, + foldr: reduceRight, + select: filter$1, + selectLimit: filterLimit$1, + selectSeries: filterSeries$1, + wrapSync: asyncify, + during: whilst$1, + doDuring: doWhilst$1 + }; + + exports.all = every$1; + exports.allLimit = everyLimit$1; + exports.allSeries = everySeries$1; + exports.any = some$1; + exports.anyLimit = someLimit$1; + exports.anySeries = someSeries$1; + exports.apply = apply; + exports.applyEach = applyEach; + exports.applyEachSeries = applyEachSeries; + exports.asyncify = asyncify; + exports.auto = auto; + exports.autoInject = autoInject; + exports.cargo = cargo$1; + exports.cargoQueue = cargo; + exports.compose = compose; + exports.concat = concat$1; + exports.concatLimit = concatLimit$1; + exports.concatSeries = concatSeries$1; + exports.constant = constant$1; + exports.default = index; + exports.detect = detect$1; + exports.detectLimit = detectLimit$1; + exports.detectSeries = detectSeries$1; + exports.dir = dir; + exports.doDuring = doWhilst$1; + exports.doUntil = doUntil; + exports.doWhilst = doWhilst$1; + exports.during = whilst$1; + exports.each = each; + exports.eachLimit = eachLimit$1; + exports.eachOf = eachOf$1; + exports.eachOfLimit = eachOfLimit$1; + exports.eachOfSeries = eachOfSeries$1; + exports.eachSeries = eachSeries$1; + exports.ensureAsync = ensureAsync; + exports.every = every$1; + exports.everyLimit = everyLimit$1; + exports.everySeries = everySeries$1; + exports.filter = filter$1; + exports.filterLimit = filterLimit$1; + exports.filterSeries = filterSeries$1; + exports.find = detect$1; + exports.findLimit = detectLimit$1; + exports.findSeries = detectSeries$1; + exports.flatMap = concat$1; + exports.flatMapLimit = concatLimit$1; + exports.flatMapSeries = concatSeries$1; + exports.foldl = reduce$1; + exports.foldr = reduceRight; + exports.forEach = each; + exports.forEachLimit = eachLimit$1; + exports.forEachOf = eachOf$1; + exports.forEachOfLimit = eachOfLimit$1; + exports.forEachOfSeries = eachOfSeries$1; + exports.forEachSeries = eachSeries$1; + exports.forever = forever$1; + exports.groupBy = groupBy; + exports.groupByLimit = groupByLimit$1; + exports.groupBySeries = groupBySeries; + exports.inject = reduce$1; + exports.log = log; + exports.map = map$1; + exports.mapLimit = mapLimit$1; + exports.mapSeries = mapSeries$1; + exports.mapValues = mapValues; + exports.mapValuesLimit = mapValuesLimit$1; + exports.mapValuesSeries = mapValuesSeries; + exports.memoize = memoize; + exports.nextTick = nextTick; + exports.parallel = parallel; + exports.parallelLimit = parallelLimit; + exports.priorityQueue = priorityQueue; + exports.queue = queue; + exports.race = race$1; + exports.reduce = reduce$1; + exports.reduceRight = reduceRight; + exports.reflect = reflect; + exports.reflectAll = reflectAll; + exports.reject = reject$1; + exports.rejectLimit = rejectLimit$1; + exports.rejectSeries = rejectSeries$1; + exports.retry = retry; + exports.retryable = retryable; + exports.select = filter$1; + exports.selectLimit = filterLimit$1; + exports.selectSeries = filterSeries$1; + exports.seq = seq; + exports.series = series; + exports.setImmediate = setImmediate$1; + exports.some = some$1; + exports.someLimit = someLimit$1; + exports.someSeries = someSeries$1; + exports.sortBy = sortBy$1; + exports.timeout = timeout; + exports.times = times; + exports.timesLimit = timesLimit; + exports.timesSeries = timesSeries; + exports.transform = transform; + exports.tryEach = tryEach$1; + exports.unmemoize = unmemoize; + exports.until = until; + exports.waterfall = waterfall$1; + exports.whilst = whilst$1; + exports.wrapSync = asyncify; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/node_backend/node_modules/async/dist/async.min.js b/node_backend/node_modules/async/dist/async.min.js new file mode 100644 index 0000000000000000000000000000000000000000..f0b7fdf5f2e5601f5ae97705f2f8ff678872ebcf --- /dev/null +++ b/node_backend/node_modules/async/dist/async.min.js @@ -0,0 +1 @@ +(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):(e="undefined"==typeof globalThis?e||self:globalThis,t(e.async={}))})(this,function(e){"use strict";function t(e,...t){return(...n)=>e(...t,...n)}function n(e){return function(...t){var n=t.pop();return e.call(this,t,n)}}function a(e){setTimeout(e,0)}function i(e){return(t,...n)=>e(()=>t(...n))}function r(e){return d(e)?function(...t){const n=t.pop(),a=e.apply(this,t);return s(a,n)}:n(function(t,n){var a;try{a=e.apply(this,t)}catch(t){return n(t)}return a&&"function"==typeof a.then?s(a,n):void n(null,a)})}function s(e,t){return e.then(e=>{l(t,null,e)},e=>{l(t,e&&(e instanceof Error||e.message)?e:new Error(e))})}function l(e,t,n){try{e(t,n)}catch(e){_e(t=>{throw t},e)}}function d(e){return"AsyncFunction"===e[Symbol.toStringTag]}function u(e){return"AsyncGenerator"===e[Symbol.toStringTag]}function p(e){return"function"==typeof e[Symbol.asyncIterator]}function c(e){if("function"!=typeof e)throw new Error("expected a function");return d(e)?r(e):e}function o(e,t){function n(...n){return"function"==typeof n[t-1]?e.apply(this,n):new Promise((a,i)=>{n[t-1]=(e,...t)=>e?i(e):void a(1{c(e).apply(i,n.concat(t))},a)});return i}}function f(e,t,n,a){t=t||[];var i=[],r=0,s=c(n);return e(t,(e,t,n)=>{var a=r++;s(e,(e,t)=>{i[a]=t,n(e)})},e=>{a(e,i)})}function y(e){return e&&"number"==typeof e.length&&0<=e.length&&0==e.length%1}function m(e){function t(...t){if(null!==e){var n=e;e=null,n.apply(this,t)}}return Object.assign(t,e),t}function g(e){return e[Symbol.iterator]&&e[Symbol.iterator]()}function k(e){var t=-1,n=e.length;return function a(){return++t=t||u||l||(u=!0,e.next().then(({value:e,done:t})=>{if(!(d||l))return u=!1,t?(l=!0,void(0>=p&&a(null))):void(p++,n(e,c,r),c++,i())}).catch(s))}function r(e,t){return p-=1,d?void 0:e?s(e):!1===e?(l=!0,void(d=!0)):t===be||l&&0>=p?(l=!0,a(null)):void i()}function s(e){d||(u=!1,l=!0,a(e))}let l=!1,d=!1,u=!1,p=0,c=0;i()}function O(e,t,n){function a(e,t){!1===e&&(l=!0);!0===l||(e?n(e):(++r===s||t===be)&&n(null))}n=m(n);var i=0,r=0,{length:s}=e,l=!1;for(0===s&&n(null);i{t=e,n=a}),e}function A(e,t,n){function a(e,t){k.push(()=>l(e,t))}function i(){if(!f){if(0===k.length&&0===h)return n(null,o);for(;k.length&&he()),i()}function l(e,t){if(!y){var a=L((t,...a)=>{if(h--,!1===t)return void(f=!0);if(2>a.length&&([a]=a),t){var i={};if(Object.keys(o).forEach(e=>{i[e]=o[e]}),i[e]=a,y=!0,g=Object.create(null),f)return;n(t,i)}else o[e]=a,s(e)});h++;var i=c(t[t.length-1]);1{0==--S[e]&&v.push(e)});if(t!==p)throw new Error("async.auto cannot execute tasks due to a recursive dependency")}function u(t){var n=[];return Object.keys(e).forEach(a=>{const i=e[a];Array.isArray(i)&&0<=i.indexOf(t)&&n.push(a)}),n}"number"!=typeof t&&(n=t,t=null),n=m(n||b());var p=Object.keys(e).length;if(!p)return n(null);t||(t=p);var o={},h=0,f=!1,y=!1,g=Object.create(null),k=[],v=[],S={};return Object.keys(e).forEach(t=>{var n=e[t];if(!Array.isArray(n))return a(t,[n]),void v.push(t);var i=n.slice(0,n.length-1),s=i.length;return 0===s?(a(t,n),void v.push(t)):void(S[t]=s,i.forEach(l=>{if(!e[l])throw new Error("async.auto task `"+t+"` has a non-existent dependency `"+l+"` in "+i.join(", "));r(l,()=>{s--,0===s&&a(t,n)})}))}),d(),i(),n[Ce]}function I(e){let t="",n=0,a=e.indexOf("*/");for(;ne.replace(Ne,"").trim())}function j(e,t){var n={};return Object.keys(e).forEach(t=>{function a(e,t){var n=i.map(t=>e[t]);n.push(t),c(r)(...n)}var i,r=e[t],s=d(r),l=!s&&1===r.length||s&&0===r.length;if(Array.isArray(r))i=[...r],r=i.pop(),n[t]=i.concat(0{r(e,n),t(...a)};f[e].push(n)}function r(e,t){return e?t?void(f[e]=f[e].filter(e=>e!==t)):f[e]=[]:Object.keys(f).forEach(e=>f[e]=[])}function s(e,...t){f[e].forEach(e=>e(...t))}function l(e,t,n,a){function i(e,...t){return e?n?s(e):r():1>=t.length?r(t[0]):void r(t)}if(null!=a&&"function"!=typeof a)throw new Error("task callback must be a function");k.started=!0;var r,s,l=k._createTaskItem(e,n?i:a||i);if(t?k._tasks.unshift(l):k._tasks.push(l),y||(y=!0,_e(()=>{y=!1,k.process()})),n||!a)return new Promise((e,t)=>{r=e,s=t})}function d(e){return function(t,...n){o-=1;for(var a=0,r=e.length;as("drain")),!0)}if(null==t)t=1;else if(0===t)throw new RangeError("Concurrency must not be zero");var p=c(e),o=0,h=[];const f={error:[],drain:[],saturated:[],unsaturated:[],empty:[]};var y=!1;const m=e=>t=>t?void(r(e),a(e,t)):new Promise((t,n)=>{i(e,(e,a)=>e?n(e):void t(a))});var g=!1,k={_tasks:new Ve,_createTaskItem(e,t){return{data:e,callback:t}},*[Symbol.iterator](){yield*k._tasks[Symbol.iterator]()},concurrency:t,payload:n,buffer:t/4,started:!1,paused:!1,push(e,t){return Array.isArray(e)?u(e)?void 0:e.map(e=>l(e,!1,!1,t)):l(e,!1,!1,t)},pushAsync(e,t){return Array.isArray(e)?u(e)?void 0:e.map(e=>l(e,!1,!0,t)):l(e,!1,!0,t)},kill(){r(),k._tasks.empty()},unshift(e,t){return Array.isArray(e)?u(e)?void 0:e.map(e=>l(e,!0,!1,t)):l(e,!0,!1,t)},unshiftAsync(e,t){return Array.isArray(e)?u(e)?void 0:e.map(e=>l(e,!0,!0,t)):l(e,!0,!0,t)},remove(e){k._tasks.remove(e)},process(){var e=Math.min;if(!g){for(g=!0;!k.paused&&o{t.apply(n,e.concat((e,...t)=>{a(e,t)}))},(e,t)=>a(e,...t)),a[Ce]}}function P(...e){return C(...e.reverse())}function R(...e){return function(...t){var n=t.pop();return n(null,...e)}}function z(e,t){return(n,a,i,r)=>{var s,l=!1;const d=c(i);n(a,(n,a,i)=>{d(n,(a,r)=>a||!1===a?i(a):e(r)&&!s?(l=!0,s=t(!0,n),i(null,be)):void i())},e=>e?r(e):void r(null,l?s:t(!1)))}}function N(e){return(t,...n)=>c(t)(...n,(t,...n)=>{"object"==typeof console&&(t?console.error&&console.error(t):console[e]&&n.forEach(t=>console[e](t)))})}function V(e,t,n){const a=c(t);return Xe(e,(...e)=>{const t=e.pop();a(...e,(e,n)=>t(e,!n))},n)}function Y(e){return(t,n,a)=>e(t,a)}function q(e){return d(e)?e:function(...t){var n=t.pop(),a=!0;t.push((...e)=>{a?_e(()=>n(...e)):n(...e)}),e.apply(this,t),a=!1}}function D(e,t,n,a){var r=Array(t.length);e(t,(e,t,a)=>{n(e,(e,n)=>{r[t]=!!n,a(e)})},e=>{if(e)return a(e);for(var n=[],s=0;s{n(e,(n,r)=>n?a(n):void(r&&i.push({index:t,value:e}),a(n)))},e=>e?a(e):void a(null,i.sort((e,t)=>e.index-t.index).map(e=>e.value)))}function U(e,t,n,a){var i=y(t)?D:Q;return i(e,t,c(n),a)}function G(e,t,n){return dt(e,1/0,t,n)}function W(e,t,n){return dt(e,1,t,n)}function H(e,t,n){return pt(e,1/0,t,n)}function J(e,t,n){return pt(e,1,t,n)}function K(e,t=e=>e){var a=Object.create(null),r=Object.create(null),s=c(e),l=n((e,n)=>{var d=t(...e);d in a?_e(()=>n(null,...a[d])):d in r?r[d].push(n):(r[d]=[n],s(...e,(e,...t)=>{e||(a[d]=t);var n=r[d];delete r[d];for(var s=0,u=n.length;s{n(e[0],t)},t,1)}function ee(e){return(e<<1)+1}function te(e){return(e+1>>1)-1}function ne(e,t){return e.priority===t.priority?e.pushCount({data:e,priority:t})):{data:e,priority:t}}var a=$(e,t),{push:i,pushAsync:r}=a;return a._tasks=new ht,a._createTaskItem=({data:e,priority:t},n)=>({data:e,priority:t,callback:n}),a.push=function(e,t=0,a){return i(n(e,t),a)},a.pushAsync=function(e,t=0,a){return r(n(e,t),a)},delete a.unshift,delete a.unshiftAsync,a}function ie(e,t,n,a){var i=[...e].reverse();return qe(i,t,n,a)}function re(e){var t=c(e);return n(function a(e,n){return e.push((e,...t)=>{let a={};if(e&&(a.error=e),0=t.length&&([i]=t),a.value=i}n(null,a)}),t.apply(this,e)})}function se(e){var t;return Array.isArray(e)?t=e.map(re):(t={},Object.keys(e).forEach(n=>{t[n]=re.call(this,e[n])})),t}function le(e,t,n,a){const i=c(n);return U(e,t,(e,t)=>{i(e,(e,n)=>{t(e,!n)})},a)}function de(e){return function(){return e}}function ue(e,t,n){function a(){r((e,...t)=>{!1===e||(e&&s++arguments.length&&"function"==typeof e?(n=t||b(),t=e):(pe(i,e),n=n||b()),"function"!=typeof t)throw new Error("Invalid arguments for async.retry");var r=c(t),s=1;return a(),n[Ce]}function pe(e,n){if("object"==typeof n)e.times=+n.times||kt,e.intervalFunc="function"==typeof n.interval?n.interval:de(+n.interval||vt),e.errorFilter=n.errorFilter;else if("number"==typeof n||"string"==typeof n)e.times=+n||kt;else throw new Error("Invalid arguments for async.retry")}function ce(e,t){t||(t=e,e=null);let a=e&&e.arity||t.length;d(t)&&(a+=1);var i=c(t);return n((t,n)=>{function r(e){i(...t,e)}return(t.length{function s(){var t=e.name||"anonymous",n=new Error("Callback function \""+t+"\" timed out.");n.code="ETIMEDOUT",a&&(n.info=a),d=!0,r(n)}var l,d=!1;n.push((...e)=>{d||(r(...e),clearTimeout(l))}),l=setTimeout(s,t),i(...n)})}function fe(e){for(var t=Array(e);e--;)t[e]=e;return t}function ye(e,t,n,a){var i=c(n);return De(fe(e),t,i,a)}function me(e,t,n){return ye(e,1/0,t,n)}function ge(e,t,n){return ye(e,1,t,n)}function ke(e,t,n,a){3>=arguments.length&&"function"==typeof t&&(a=n,n=t,t=Array.isArray(e)?[]:{}),a=m(a||b());var i=c(n);return Me(e,(e,n,a)=>{i(t,e,n,a)},e=>a(e,t)),a[Ce]}function ve(e){return(...t)=>(e.unmemoized||e)(...t)}function Se(e,t,n){const a=c(e);return _t(e=>a((t,n)=>e(t,!n)),t,n)}var xe,Le="function"==typeof queueMicrotask&&queueMicrotask,Ee="function"==typeof setImmediate&&setImmediate,Oe="object"==typeof process&&"function"==typeof process.nextTick;xe=Le?queueMicrotask:Ee?setImmediate:Oe?process.nextTick:a;var _e=i(xe);const be={};var Ae=e=>(t,n,a)=>{function i(e,t){if(!d)if(c-=1,e)l=!0,a(e);else if(!1===e)l=!0,d=!0;else{if(t===be||l&&0>=c)return l=!0,a(null);o||r()}}function r(){for(o=!0;c=c&&a(null));c+=1,n(t.value,t.key,L(i))}o=!1}if(a=m(a),0>=e)throw new RangeError("concurrency limit cannot be less than 1");if(!t)return a(null);if(u(t))return E(t,e,n,a);if(p(t))return E(t[Symbol.asyncIterator](),e,n,a);var s=x(t),l=!1,d=!1,c=0,o=!1;r()},Ie=o(function i(e,t,n,a){return Ae(t)(e,c(n),a)},4),Me=o(function a(e,t,n){var i=y(e)?O:_;return i(e,c(t),n)},3),je=o(function a(e,t,n){return f(Me,e,t,n)},3),we=h(je),Be=o(function a(e,t,n){return Ie(e,1,t,n)},3),Te=o(function a(e,t,n){return f(Be,e,t,n)},3),Fe=h(Te);const Ce=Symbol("promiseCallback");var Pe=/^(?:async\s)?(?:function)?\s*(?:\w+\s*)?\(([^)]+)\)(?:\s*{)/,Re=/^(?:async\s)?\s*(?:\(\s*)?((?:[^)=\s]\s*)*)(?:\)\s*)?=>/,ze=/,/,Ne=/(=.+)?(\s*)$/;class Ve{constructor(){this.head=this.tail=null,this.length=0}removeLink(e){return e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev,e.prev=e.next=null,this.length-=1,e}empty(){for(;this.head;)this.shift();return this}insertAfter(e,t){t.prev=e,t.next=e.next,e.next?e.next.prev=t:this.tail=t,e.next=t,this.length+=1}insertBefore(e,t){t.prev=e.prev,t.next=e,e.prev?e.prev.next=t:this.head=t,e.prev=t,this.length+=1}unshift(e){this.head?this.insertBefore(this.head,e):w(this,e)}push(e){this.tail?this.insertAfter(this.tail,e):w(this,e)}shift(){return this.head&&this.removeLink(this.head)}pop(){return this.tail&&this.removeLink(this.tail)}toArray(){return[...this]}*[Symbol.iterator](){for(var e=this.head;e;)yield e.data,e=e.next}remove(e){for(var t=this.head;t;){var{next:n}=t;e(t)&&this.removeLink(t),t=n}return this}}var Ye,qe=o(function i(e,t,n,a){a=m(a);var r=c(n);return Be(e,(e,n,a)=>{r(t,e,(e,n)=>{t=n,a(e)})},e=>a(e,t))},4),De=o(function i(e,t,n,a){return f(Ae(t),e,n,a)},4),Qe=o(function i(e,t,n,a){var r=c(n);return De(e,t,(e,t)=>{r(e,(e,...n)=>e?t(e):t(e,n))},(e,t)=>{for(var n=[],r=0;re,(e,t)=>t)(Me,e,t,n)},3),He=o(function i(e,t,n,a){return z(e=>e,(e,t)=>t)(Ae(t),e,n,a)},4),Je=o(function a(e,t,n){return z(e=>e,(e,t)=>t)(Ae(1),e,t,n)},3),Ke=N("dir"),Xe=o(function a(e,t,n){function i(e,...t){return e?n(e):void(!1===e||(s=t,d(...t,r)))}function r(e,t){return e?n(e):!1===e?void 0:t?void l(i):n(null,...s)}n=L(n);var s,l=c(e),d=c(t);return r(null,!0)},3),Ze=o(function a(e,t,n){return Me(e,Y(c(t)),n)},3),$e=o(function i(e,t,n,a){return Ae(t)(e,Y(c(n)),a)},4),et=o(function a(e,t,n){return $e(e,1,t,n)},3),tt=o(function a(e,t,n){return z(e=>!e,e=>!e)(Me,e,t,n)},3),nt=o(function i(e,t,n,a){return z(e=>!e,e=>!e)(Ae(t),e,n,a)},4),at=o(function a(e,t,n){return z(e=>!e,e=>!e)(Be,e,t,n)},3),it=o(function a(e,t,n){return U(Me,e,t,n)},3),rt=o(function i(e,t,n,a){return U(Ae(t),e,n,a)},4),st=o(function a(e,t,n){return U(Be,e,t,n)},3),lt=o(function n(e,t){function a(e){return e?i(e):void(!1===e||r(a))}var i=L(t),r=c(q(e));return a()},2),dt=o(function i(e,t,n,a){var r=c(n);return De(e,t,(e,t)=>{r(e,(n,a)=>n?t(n):t(n,{key:a,val:e}))},(e,t)=>{for(var n={},{hasOwnProperty:r}=Object.prototype,s=0;s{s(e,t,(e,a)=>e?n(e):void(r[t]=a,n(e)))},e=>a(e,r))},4);Ye=Oe?process.nextTick:Ee?setImmediate:a;var ct=i(Ye),ot=o((e,t,n)=>{var a=y(t)?[]:{};e(t,(e,t,n)=>{c(e)((e,...i)=>{2>i.length&&([i]=i),a[t]=i,n(e)})},e=>n(e,a))},3);class ht{constructor(){this.heap=[],this.pushCount=Number.MIN_SAFE_INTEGER}get length(){return this.heap.length}empty(){return this.heap=[],this}percUp(e){for(let n;0e)(Me,e,t,n)},3),xt=o(function i(e,t,n,a){return z(Boolean,e=>e)(Ae(t),e,n,a)},4),Lt=o(function a(e,t,n){return z(Boolean,e=>e)(Be,e,t,n)},3),Et=o(function a(e,t,n){function i(e,t){var n=e.criteria,a=t.criteria;return na?1:0}var r=c(t);return je(e,(e,t)=>{r(e,(n,a)=>n?t(n):void t(n,{value:e,criteria:a}))},(e,t)=>e?n(e):void n(null,t.sort(i).map(e=>e.value)))},3),Ot=o(function n(e,t){var a,i=null;return et(e,(e,t)=>{c(e)((e,...n)=>!1===e?t(e):void(2>n.length?[a]=n:a=n,i=e,t(e?null:{})))},()=>t(i,a))}),_t=o(function a(e,t,n){function i(e,...t){if(e)return n(e);d=t;!1===e||l(r)}function r(e,t){return e?n(e):!1===e?void 0:t?void s(i):n(null,...d)}n=L(n);var s=c(t),l=c(e),d=[];return l(r)},3),bt=o(function n(e,t){function a(t){var n=c(e[r++]);n(...t,L(i))}function i(n,...i){return!1===n?void 0:n||r===e.length?t(n,...i):void a(i)}if(t=m(t),!Array.isArray(e))return t(new Error("First argument to waterfall must be an array of functions"));if(!e.length)return t();var r=0;a([])});e.all=tt,e.allLimit=nt,e.allSeries=at,e.any=St,e.anyLimit=xt,e.anySeries=Lt,e.apply=t,e.applyEach=we,e.applyEachSeries=Fe,e.asyncify=r,e.auto=A,e.autoInject=j,e.cargo=T,e.cargoQueue=F,e.compose=P,e.concat=Ue,e.concatLimit=Qe,e.concatSeries=Ge,e.constant=R,e.default={apply:t,applyEach:we,applyEachSeries:Fe,asyncify:r,auto:A,autoInject:j,cargo:T,cargoQueue:F,compose:P,concat:Ue,concatLimit:Qe,concatSeries:Ge,constant:R,detect:We,detectLimit:He,detectSeries:Je,dir:Ke,doUntil:V,doWhilst:Xe,each:Ze,eachLimit:$e,eachOf:Me,eachOfLimit:Ie,eachOfSeries:Be,eachSeries:et,ensureAsync:q,every:tt,everyLimit:nt,everySeries:at,filter:it,filterLimit:rt,filterSeries:st,forever:lt,groupBy:G,groupByLimit:dt,groupBySeries:W,log:ut,map:je,mapLimit:De,mapSeries:Te,mapValues:H,mapValuesLimit:pt,mapValuesSeries:J,memoize:K,nextTick:ct,parallel:X,parallelLimit:Z,priorityQueue:ae,queue:$,race:ft,reduce:qe,reduceRight:ie,reflect:re,reflectAll:se,reject:yt,rejectLimit:mt,rejectSeries:gt,retry:ue,retryable:ce,seq:C,series:oe,setImmediate:_e,some:St,someLimit:xt,someSeries:Lt,sortBy:Et,timeout:he,times:me,timesLimit:ye,timesSeries:ge,transform:ke,tryEach:Ot,unmemoize:ve,until:Se,waterfall:bt,whilst:_t,all:tt,allLimit:nt,allSeries:at,any:St,anyLimit:xt,anySeries:Lt,find:We,findLimit:He,findSeries:Je,flatMap:Ue,flatMapLimit:Qe,flatMapSeries:Ge,forEach:Ze,forEachSeries:et,forEachLimit:$e,forEachOf:Me,forEachOfSeries:Be,forEachOfLimit:Ie,inject:qe,foldl:qe,foldr:ie,select:it,selectLimit:rt,selectSeries:st,wrapSync:r,during:_t,doDuring:Xe},e.detect=We,e.detectLimit=He,e.detectSeries=Je,e.dir=Ke,e.doDuring=Xe,e.doUntil=V,e.doWhilst=Xe,e.during=_t,e.each=Ze,e.eachLimit=$e,e.eachOf=Me,e.eachOfLimit=Ie,e.eachOfSeries=Be,e.eachSeries=et,e.ensureAsync=q,e.every=tt,e.everyLimit=nt,e.everySeries=at,e.filter=it,e.filterLimit=rt,e.filterSeries=st,e.find=We,e.findLimit=He,e.findSeries=Je,e.flatMap=Ue,e.flatMapLimit=Qe,e.flatMapSeries=Ge,e.foldl=qe,e.foldr=ie,e.forEach=Ze,e.forEachLimit=$e,e.forEachOf=Me,e.forEachOfLimit=Ie,e.forEachOfSeries=Be,e.forEachSeries=et,e.forever=lt,e.groupBy=G,e.groupByLimit=dt,e.groupBySeries=W,e.inject=qe,e.log=ut,e.map=je,e.mapLimit=De,e.mapSeries=Te,e.mapValues=H,e.mapValuesLimit=pt,e.mapValuesSeries=J,e.memoize=K,e.nextTick=ct,e.parallel=X,e.parallelLimit=Z,e.priorityQueue=ae,e.queue=$,e.race=ft,e.reduce=qe,e.reduceRight=ie,e.reflect=re,e.reflectAll=se,e.reject=yt,e.rejectLimit=mt,e.rejectSeries=gt,e.retry=ue,e.retryable=ce,e.select=it,e.selectLimit=rt,e.selectSeries=st,e.seq=C,e.series=oe,e.setImmediate=_e,e.some=St,e.someLimit=xt,e.someSeries=Lt,e.sortBy=Et,e.timeout=he,e.times=me,e.timesLimit=ye,e.timesSeries=ge,e.transform=ke,e.tryEach=Ot,e.unmemoize=ve,e.until=Se,e.waterfall=bt,e.whilst=_t,e.wrapSync=r,Object.defineProperty(e,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/node_backend/node_modules/async/dist/async.mjs b/node_backend/node_modules/async/dist/async.mjs new file mode 100644 index 0000000000000000000000000000000000000000..2c599653364adb384d88e49e712dd471b83cd49a --- /dev/null +++ b/node_backend/node_modules/async/dist/async.mjs @@ -0,0 +1,5948 @@ +/** + * Creates a continuation function with some arguments already applied. + * + * Useful as a shorthand when combined with other control flow functions. Any + * arguments passed to the returned function are added to the arguments + * originally passed to apply. + * + * @name apply + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {Function} fn - The function you want to eventually apply all + * arguments to. Invokes with (arguments...). + * @param {...*} arguments... - Any number of arguments to automatically apply + * when the continuation is called. + * @returns {Function} the partially-applied function + * @example + * + * // using apply + * async.parallel([ + * async.apply(fs.writeFile, 'testfile1', 'test1'), + * async.apply(fs.writeFile, 'testfile2', 'test2') + * ]); + * + * + * // the same process without using apply + * async.parallel([ + * function(callback) { + * fs.writeFile('testfile1', 'test1', callback); + * }, + * function(callback) { + * fs.writeFile('testfile2', 'test2', callback); + * } + * ]); + * + * // It's possible to pass any number of additional arguments when calling the + * // continuation: + * + * node> var fn = async.apply(sys.puts, 'one'); + * node> fn('two', 'three'); + * one + * two + * three + */ +function apply(fn, ...args) { + return (...callArgs) => fn(...args,...callArgs); +} + +function initialParams (fn) { + return function (...args/*, callback*/) { + var callback = args.pop(); + return fn.call(this, args, callback); + }; +} + +/* istanbul ignore file */ + +var hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask; +var hasSetImmediate = typeof setImmediate === 'function' && setImmediate; +var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + +function fallback(fn) { + setTimeout(fn, 0); +} + +function wrap(defer) { + return (fn, ...args) => defer(() => fn(...args)); +} + +var _defer$1; + +if (hasQueueMicrotask) { + _defer$1 = queueMicrotask; +} else if (hasSetImmediate) { + _defer$1 = setImmediate; +} else if (hasNextTick) { + _defer$1 = process.nextTick; +} else { + _defer$1 = fallback; +} + +var setImmediate$1 = wrap(_defer$1); + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + if (isAsync(func)) { + return function (...args/*, callback*/) { + const callback = args.pop(); + const promise = func.apply(this, args); + return handlePromise(promise, callback) + } + } + + return initialParams(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if (result && typeof result.then === 'function') { + return handlePromise(result, callback) + } else { + callback(null, result); + } + }); +} + +function handlePromise(promise, callback) { + return promise.then(value => { + invokeCallback(callback, null, value); + }, err => { + invokeCallback(callback, err && (err instanceof Error || err.message) ? err : new Error(err)); + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (err) { + setImmediate$1(e => { throw e }, err); + } +} + +function isAsync(fn) { + return fn[Symbol.toStringTag] === 'AsyncFunction'; +} + +function isAsyncGenerator(fn) { + return fn[Symbol.toStringTag] === 'AsyncGenerator'; +} + +function isAsyncIterable(obj) { + return typeof obj[Symbol.asyncIterator] === 'function'; +} + +function wrapAsync(asyncFn) { + if (typeof asyncFn !== 'function') throw new Error('expected a function') + return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn; +} + +// conditionally promisify a function. +// only return a promise if a callback is omitted +function awaitify (asyncFn, arity) { + if (!arity) arity = asyncFn.length; + if (!arity) throw new Error('arity is undefined') + function awaitable (...args) { + if (typeof args[arity - 1] === 'function') { + return asyncFn.apply(this, args) + } + + return new Promise((resolve, reject) => { + args[arity - 1] = (err, ...cbArgs) => { + if (err) return reject(err) + resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]); + }; + asyncFn.apply(this, args); + }) + } + + return awaitable +} + +function applyEach$1 (eachfn) { + return function applyEach(fns, ...callArgs) { + const go = awaitify(function (callback) { + var that = this; + return eachfn(fns, (fn, cb) => { + wrapAsync(fn).apply(that, callArgs.concat(cb)); + }, callback); + }); + return go; + }; +} + +function _asyncMap(eachfn, arr, iteratee, callback) { + arr = arr || []; + var results = []; + var counter = 0; + var _iteratee = wrapAsync(iteratee); + + return eachfn(arr, (value, _, iterCb) => { + var index = counter++; + _iteratee(value, (err, v) => { + results[index] = v; + iterCb(err); + }); + }, err => { + callback(err, results); + }); +} + +function isArrayLike(value) { + return value && + typeof value.length === 'number' && + value.length >= 0 && + value.length % 1 === 0; +} + +// A temporary value used to identify if the loop should be broken. +// See #1064, #1293 +const breakLoop = {}; + +function once(fn) { + function wrapper (...args) { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, args); + } + Object.assign(wrapper, fn); + return wrapper +} + +function getIterator (coll) { + return coll[Symbol.iterator] && coll[Symbol.iterator](); +} + +function createArrayIterator(coll) { + var i = -1; + var len = coll.length; + return function next() { + return ++i < len ? {value: coll[i], key: i} : null; + } +} + +function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) + return null; + i++; + return {value: item.value, key: i}; + } +} + +function createObjectIterator(obj) { + var okeys = obj ? Object.keys(obj) : []; + var i = -1; + var len = okeys.length; + return function next() { + var key = okeys[++i]; + if (key === '__proto__') { + return next(); + } + return i < len ? {value: obj[key], key} : null; + }; +} + +function createIterator(coll) { + if (isArrayLike(coll)) { + return createArrayIterator(coll); + } + + var iterator = getIterator(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); +} + +function onlyOnce(fn) { + return function (...args) { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, args); + }; +} + +// for async generators +function asyncEachOfLimit(generator, limit, iteratee, callback) { + let done = false; + let canceled = false; + let awaiting = false; + let running = 0; + let idx = 0; + + function replenish() { + //console.log('replenish') + if (running >= limit || awaiting || done) return + //console.log('replenish awaiting') + awaiting = true; + generator.next().then(({value, done: iterDone}) => { + //console.log('got value', value) + if (canceled || done) return + awaiting = false; + if (iterDone) { + done = true; + if (running <= 0) { + //console.log('done nextCb') + callback(null); + } + return; + } + running++; + iteratee(value, idx, iterateeCallback); + idx++; + replenish(); + }).catch(handleError); + } + + function iterateeCallback(err, result) { + //console.log('iterateeCallback') + running -= 1; + if (canceled) return + if (err) return handleError(err) + + if (err === false) { + done = true; + canceled = true; + return + } + + if (result === breakLoop || (done && running <= 0)) { + done = true; + //console.log('done iterCb') + return callback(null); + } + replenish(); + } + + function handleError(err) { + if (canceled) return + awaiting = false; + done = true; + callback(err); + } + + replenish(); +} + +var eachOfLimit$2 = (limit) => { + return (obj, iteratee, callback) => { + callback = once(callback); + if (limit <= 0) { + throw new RangeError('concurrency limit cannot be less than 1') + } + if (!obj) { + return callback(null); + } + if (isAsyncGenerator(obj)) { + return asyncEachOfLimit(obj, limit, iteratee, callback) + } + if (isAsyncIterable(obj)) { + return asyncEachOfLimit(obj[Symbol.asyncIterator](), limit, iteratee, callback) + } + var nextElem = createIterator(obj); + var done = false; + var canceled = false; + var running = 0; + var looping = false; + + function iterateeCallback(err, value) { + if (canceled) return + running -= 1; + if (err) { + done = true; + callback(err); + } + else if (err === false) { + done = true; + canceled = true; + } + else if (value === breakLoop || (done && running <= 0)) { + done = true; + return callback(null); + } + else if (!looping) { + replenish(); + } + } + + function replenish () { + looping = true; + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, onlyOnce(iterateeCallback)); + } + looping = false; + } + + replenish(); + }; +}; + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a + * time. + * + * @name eachOfLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. The `key` is the item's key, or index in the case of an + * array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachOfLimit(coll, limit, iteratee, callback) { + return eachOfLimit$2(limit)(coll, wrapAsync(iteratee), callback); +} + +var eachOfLimit$1 = awaitify(eachOfLimit, 4); + +// eachOf implementation optimized for array-likes +function eachOfArrayLike(coll, iteratee, callback) { + callback = once(callback); + var index = 0, + completed = 0, + {length} = coll, + canceled = false; + if (length === 0) { + callback(null); + } + + function iteratorCallback(err, value) { + if (err === false) { + canceled = true; + } + if (canceled === true) return + if (err) { + callback(err); + } else if ((++completed === length) || value === breakLoop) { + callback(null); + } + } + + for (; index < length; index++) { + iteratee(coll[index], index, onlyOnce(iteratorCallback)); + } +} + +// a generic version of eachOf which can handle array, object, and iterator cases. +function eachOfGeneric (coll, iteratee, callback) { + return eachOfLimit$1(coll, Infinity, iteratee, callback); +} + +/** + * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument + * to the iteratee. + * + * @name eachOf + * @static + * @memberOf module:Collections + * @method + * @alias forEachOf + * @category Collection + * @see [async.each]{@link module:Collections.each} + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each + * item in `coll`. + * The `key` is the item's key, or index in the case of an array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dev.json is a file containing a valid json object config for dev environment + * // dev.json is a file containing a valid json object config for test environment + * // prod.json is a file containing a valid json object config for prod environment + * // invalid.json is a file with a malformed json object + * + * let configs = {}; //global variable + * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'}; + * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'}; + * + * // asynchronous function that reads a json file and parses the contents as json object + * function parseFile(file, key, callback) { + * fs.readFile(file, "utf8", function(err, data) { + * if (err) return calback(err); + * try { + * configs[key] = JSON.parse(data); + * } catch (e) { + * return callback(e); + * } + * callback(); + * }); + * } + * + * // Using callbacks + * async.forEachOf(validConfigFileMap, parseFile, function (err) { + * if (err) { + * console.error(err); + * } else { + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * } + * }); + * + * //Error handing + * async.forEachOf(invalidConfigFileMap, parseFile, function (err) { + * if (err) { + * console.error(err); + * // JSON parse error exception + * } else { + * console.log(configs); + * } + * }); + * + * // Using Promises + * async.forEachOf(validConfigFileMap, parseFile) + * .then( () => { + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * }).catch( err => { + * console.error(err); + * }); + * + * //Error handing + * async.forEachOf(invalidConfigFileMap, parseFile) + * .then( () => { + * console.log(configs); + * }).catch( err => { + * console.error(err); + * // JSON parse error exception + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.forEachOf(validConfigFileMap, parseFile); + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * } + * catch (err) { + * console.log(err); + * } + * } + * + * //Error handing + * async () => { + * try { + * let result = await async.forEachOf(invalidConfigFileMap, parseFile); + * console.log(configs); + * } + * catch (err) { + * console.log(err); + * // JSON parse error exception + * } + * } + * + */ +function eachOf(coll, iteratee, callback) { + var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric; + return eachOfImplementation(coll, wrapAsync(iteratee), callback); +} + +var eachOf$1 = awaitify(eachOf, 3); + +/** + * Produces a new collection of values by mapping each value in `coll` through + * the `iteratee` function. The `iteratee` is called with an item from `coll` + * and a callback for when it has finished processing. Each of these callbacks + * takes 2 arguments: an `error`, and the transformed item from `coll`. If + * `iteratee` passes an error to its callback, the main `callback` (for the + * `map` function) is immediately called with the error. + * + * Note, that since this function applies the `iteratee` to each item in + * parallel, there is no guarantee that the `iteratee` functions will complete + * in order. However, the results array will be in the same order as the + * original `coll`. + * + * If `map` is passed an Object, the results will be an Array. The results + * will roughly be in the order of the original Objects' keys (but this can + * vary across JavaScript engines). + * + * @name map + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an Array of the + * transformed items from the `coll`. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * // file4.txt does not exist + * + * const fileList = ['file1.txt','file2.txt','file3.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file4.txt']; + * + * // asynchronous function that returns the file size in bytes + * function getFileSizeInBytes(file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, stat.size); + * }); + * } + * + * // Using callbacks + * async.map(fileList, getFileSizeInBytes, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now an array of the file size in bytes for each file, e.g. + * // [ 1000, 2000, 3000] + * } + * }); + * + * // Error Handling + * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(results); + * } + * }); + * + * // Using Promises + * async.map(fileList, getFileSizeInBytes) + * .then( results => { + * console.log(results); + * // results is now an array of the file size in bytes for each file, e.g. + * // [ 1000, 2000, 3000] + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.map(withMissingFileList, getFileSizeInBytes) + * .then( results => { + * console.log(results); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.map(fileList, getFileSizeInBytes); + * console.log(results); + * // results is now an array of the file size in bytes for each file, e.g. + * // [ 1000, 2000, 3000] + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let results = await async.map(withMissingFileList, getFileSizeInBytes); + * console.log(results); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function map (coll, iteratee, callback) { + return _asyncMap(eachOf$1, coll, iteratee, callback) +} +var map$1 = awaitify(map, 3); + +/** + * Applies the provided arguments to each function in the array, calling + * `callback` after all functions have completed. If you only provide the first + * argument, `fns`, then it will return a function which lets you pass in the + * arguments as if it were a single function call. If more arguments are + * provided, `callback` is required while `args` is still optional. The results + * for each of the applied async functions are passed to the final callback + * as an array. + * + * @name applyEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s + * to all call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {AsyncFunction} - Returns a function that takes no args other than + * an optional callback, that is the result of applying the `args` to each + * of the functions. + * @example + * + * const appliedFn = async.applyEach([enableSearch, updateSchema], 'bucket') + * + * appliedFn((err, results) => { + * // results[0] is the results for `enableSearch` + * // results[1] is the results for `updateSchema` + * }); + * + * // partial application example: + * async.each( + * buckets, + * async (bucket) => async.applyEach([enableSearch, updateSchema], bucket)(), + * callback + * ); + */ +var applyEach = applyEach$1(map$1); + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time. + * + * @name eachOfSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachOfSeries(coll, iteratee, callback) { + return eachOfLimit$1(coll, 1, iteratee, callback) +} +var eachOfSeries$1 = awaitify(eachOfSeries, 3); + +/** + * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. + * + * @name mapSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ +function mapSeries (coll, iteratee, callback) { + return _asyncMap(eachOfSeries$1, coll, iteratee, callback) +} +var mapSeries$1 = awaitify(mapSeries, 3); + +/** + * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time. + * + * @name applyEachSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.applyEach]{@link module:ControlFlow.applyEach} + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} fns - A collection of {@link AsyncFunction}s to all + * call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {AsyncFunction} - A function, that when called, is the result of + * appling the `args` to the list of functions. It takes no args, other than + * a callback. + */ +var applyEachSeries = applyEach$1(mapSeries$1); + +const PROMISE_SYMBOL = Symbol('promiseCallback'); + +function promiseCallback () { + let resolve, reject; + function callback (err, ...args) { + if (err) return reject(err) + resolve(args.length > 1 ? args : args[0]); + } + + callback[PROMISE_SYMBOL] = new Promise((res, rej) => { + resolve = res, + reject = rej; + }); + + return callback +} + +/** + * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on + * their requirements. Each function can optionally depend on other functions + * being completed first, and each function is run as soon as its requirements + * are satisfied. + * + * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence + * will stop. Further tasks will not execute (so any other functions depending + * on it will not run), and the main `callback` is immediately called with the + * error. + * + * {@link AsyncFunction}s also receive an object containing the results of functions which + * have completed so far as the first argument, if they have dependencies. If a + * task function has no dependencies, it will only be passed a callback. + * + * @name auto + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Object} tasks - An object. Each of its properties is either a + * function or an array of requirements, with the {@link AsyncFunction} itself the last item + * in the array. The object's key of a property serves as the name of the task + * defined by that property, i.e. can be used when specifying requirements for + * other tasks. The function receives one or two arguments: + * * a `results` object, containing the results of the previously executed + * functions, only passed if the task has any dependencies, + * * a `callback(err, result)` function, which must be called when finished, + * passing an `error` (which can be `null`) and the result of the function's + * execution. + * @param {number} [concurrency=Infinity] - An optional `integer` for + * determining the maximum number of tasks that can be run in parallel. By + * default, as many as possible. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback. Results are always returned; however, if an + * error occurs, no further `tasks` will be performed, and the results object + * will only contain partial results. Invoked with (err, results). + * @returns {Promise} a promise, if a callback is not passed + * @example + * + * //Using Callbacks + * async.auto({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * // once the file is written let's email a link to it... + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }, function(err, results) { + * if (err) { + * console.log('err = ', err); + * } + * console.log('results = ', results); + * // results = { + * // get_data: ['data', 'converted to array'] + * // make_folder; 'folder', + * // write_file: 'filename' + * // email_link: { file: 'filename', email: 'user@example.com' } + * // } + * }); + * + * //Using Promises + * async.auto({ + * get_data: function(callback) { + * console.log('in get_data'); + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * console.log('in make_folder'); + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * // once the file is written let's email a link to it... + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }).then(results => { + * console.log('results = ', results); + * // results = { + * // get_data: ['data', 'converted to array'] + * // make_folder; 'folder', + * // write_file: 'filename' + * // email_link: { file: 'filename', email: 'user@example.com' } + * // } + * }).catch(err => { + * console.log('err = ', err); + * }); + * + * //Using async/await + * async () => { + * try { + * let results = await async.auto({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * // once the file is written let's email a link to it... + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }); + * console.log('results = ', results); + * // results = { + * // get_data: ['data', 'converted to array'] + * // make_folder; 'folder', + * // write_file: 'filename' + * // email_link: { file: 'filename', email: 'user@example.com' } + * // } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function auto(tasks, concurrency, callback) { + if (typeof concurrency !== 'number') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = once(callback || promiseCallback()); + var numTasks = Object.keys(tasks).length; + if (!numTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = numTasks; + } + + var results = {}; + var runningTasks = 0; + var canceled = false; + var hasError = false; + + var listeners = Object.create(null); + + var readyTasks = []; + + // for cycle detection: + var readyToCheck = []; // tasks that have been identified as reachable + // without the possibility of returning to an ancestor task + var uncheckedDependencies = {}; + + Object.keys(tasks).forEach(key => { + var task = tasks[key]; + if (!Array.isArray(task)) { + // no dependencies + enqueueTask(key, [task]); + readyToCheck.push(key); + return; + } + + var dependencies = task.slice(0, task.length - 1); + var remainingDependencies = dependencies.length; + if (remainingDependencies === 0) { + enqueueTask(key, task); + readyToCheck.push(key); + return; + } + uncheckedDependencies[key] = remainingDependencies; + + dependencies.forEach(dependencyName => { + if (!tasks[dependencyName]) { + throw new Error('async.auto task `' + key + + '` has a non-existent dependency `' + + dependencyName + '` in ' + + dependencies.join(', ')); + } + addListener(dependencyName, () => { + remainingDependencies--; + if (remainingDependencies === 0) { + enqueueTask(key, task); + } + }); + }); + }); + + checkForDeadlocks(); + processQueue(); + + function enqueueTask(key, task) { + readyTasks.push(() => runTask(key, task)); + } + + function processQueue() { + if (canceled) return + if (readyTasks.length === 0 && runningTasks === 0) { + return callback(null, results); + } + while(readyTasks.length && runningTasks < concurrency) { + var run = readyTasks.shift(); + run(); + } + + } + + function addListener(taskName, fn) { + var taskListeners = listeners[taskName]; + if (!taskListeners) { + taskListeners = listeners[taskName] = []; + } + + taskListeners.push(fn); + } + + function taskComplete(taskName) { + var taskListeners = listeners[taskName] || []; + taskListeners.forEach(fn => fn()); + processQueue(); + } + + + function runTask(key, task) { + if (hasError) return; + + var taskCallback = onlyOnce((err, ...result) => { + runningTasks--; + if (err === false) { + canceled = true; + return + } + if (result.length < 2) { + [result] = result; + } + if (err) { + var safeResults = {}; + Object.keys(results).forEach(rkey => { + safeResults[rkey] = results[rkey]; + }); + safeResults[key] = result; + hasError = true; + listeners = Object.create(null); + if (canceled) return + callback(err, safeResults); + } else { + results[key] = result; + taskComplete(key); + } + }); + + runningTasks++; + var taskFn = wrapAsync(task[task.length - 1]); + if (task.length > 1) { + taskFn(results, taskCallback); + } else { + taskFn(taskCallback); + } + } + + function checkForDeadlocks() { + // Kahn's algorithm + // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm + // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html + var currentTask; + var counter = 0; + while (readyToCheck.length) { + currentTask = readyToCheck.pop(); + counter++; + getDependents(currentTask).forEach(dependent => { + if (--uncheckedDependencies[dependent] === 0) { + readyToCheck.push(dependent); + } + }); + } + + if (counter !== numTasks) { + throw new Error( + 'async.auto cannot execute tasks due to a recursive dependency' + ); + } + } + + function getDependents(taskName) { + var result = []; + Object.keys(tasks).forEach(key => { + const task = tasks[key]; + if (Array.isArray(task) && task.indexOf(taskName) >= 0) { + result.push(key); + } + }); + return result; + } + + return callback[PROMISE_SYMBOL] +} + +var FN_ARGS = /^(?:async\s)?(?:function)?\s*(?:\w+\s*)?\(([^)]+)\)(?:\s*{)/; +var ARROW_FN_ARGS = /^(?:async\s)?\s*(?:\(\s*)?((?:[^)=\s]\s*)*)(?:\)\s*)?=>/; +var FN_ARG_SPLIT = /,/; +var FN_ARG = /(=.+)?(\s*)$/; + +function stripComments(string) { + let stripped = ''; + let index = 0; + let endBlockComment = string.indexOf('*/'); + while (index < string.length) { + if (string[index] === '/' && string[index+1] === '/') { + // inline comment + let endIndex = string.indexOf('\n', index); + index = (endIndex === -1) ? string.length : endIndex; + } else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) { + // block comment + let endIndex = string.indexOf('*/', index); + if (endIndex !== -1) { + index = endIndex + 2; + endBlockComment = string.indexOf('*/', index); + } else { + stripped += string[index]; + index++; + } + } else { + stripped += string[index]; + index++; + } + } + return stripped; +} + +function parseParams(func) { + const src = stripComments(func.toString()); + let match = src.match(FN_ARGS); + if (!match) { + match = src.match(ARROW_FN_ARGS); + } + if (!match) throw new Error('could not parse args in autoInject\nSource:\n' + src) + let [, args] = match; + return args + .replace(/\s/g, '') + .split(FN_ARG_SPLIT) + .map((arg) => arg.replace(FN_ARG, '').trim()); +} + +/** + * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent + * tasks are specified as parameters to the function, after the usual callback + * parameter, with the parameter names matching the names of the tasks it + * depends on. This can provide even more readable task graphs which can be + * easier to maintain. + * + * If a final callback is specified, the task results are similarly injected, + * specified as named parameters after the initial error parameter. + * + * The autoInject function is purely syntactic sugar and its semantics are + * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}. + * + * @name autoInject + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.auto]{@link module:ControlFlow.auto} + * @category Control Flow + * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of + * the form 'func([dependencies...], callback). The object's key of a property + * serves as the name of the task defined by that property, i.e. can be used + * when specifying requirements for other tasks. + * * The `callback` parameter is a `callback(err, result)` which must be called + * when finished, passing an `error` (which can be `null`) and the result of + * the function's execution. The remaining parameters name other tasks on + * which the task is dependent, and the results from those tasks are the + * arguments of those parameters. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback, and a `results` object with any completed + * task results, similar to `auto`. + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // The example from `auto` can be rewritten as follows: + * async.autoInject({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: function(get_data, make_folder, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }, + * email_link: function(write_file, callback) { + * // once the file is written let's email a link to it... + * // write_file contains the filename returned by write_file. + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * } + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + * + * // If you are using a JS minifier that mangles parameter names, `autoInject` + * // will not work with plain functions, since the parameter names will be + * // collapsed to a single letter identifier. To work around this, you can + * // explicitly specify the names of the parameters your task function needs + * // in an array, similar to Angular.js dependency injection. + * + * // This still has an advantage over plain `auto`, since the results a task + * // depends on are still spread into arguments. + * async.autoInject({ + * //... + * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) { + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(write_file, callback) { + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * }] + * //... + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + */ +function autoInject(tasks, callback) { + var newTasks = {}; + + Object.keys(tasks).forEach(key => { + var taskFn = tasks[key]; + var params; + var fnIsAsync = isAsync(taskFn); + var hasNoDeps = + (!fnIsAsync && taskFn.length === 1) || + (fnIsAsync && taskFn.length === 0); + + if (Array.isArray(taskFn)) { + params = [...taskFn]; + taskFn = params.pop(); + + newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); + } else if (hasNoDeps) { + // no dependencies, use the function as-is + newTasks[key] = taskFn; + } else { + params = parseParams(taskFn); + if ((taskFn.length === 0 && !fnIsAsync) && params.length === 0) { + throw new Error("autoInject task functions require explicit parameters."); + } + + // remove callback param + if (!fnIsAsync) params.pop(); + + newTasks[key] = params.concat(newTask); + } + + function newTask(results, taskCb) { + var newArgs = params.map(name => results[name]); + newArgs.push(taskCb); + wrapAsync(taskFn)(...newArgs); + } + }); + + return auto(newTasks, callback); +} + +// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation +// used for queues. This implementation assumes that the node provided by the user can be modified +// to adjust the next and last properties. We implement only the minimal functionality +// for queue support. +class DLL { + constructor() { + this.head = this.tail = null; + this.length = 0; + } + + removeLink(node) { + if (node.prev) node.prev.next = node.next; + else this.head = node.next; + if (node.next) node.next.prev = node.prev; + else this.tail = node.prev; + + node.prev = node.next = null; + this.length -= 1; + return node; + } + + empty () { + while(this.head) this.shift(); + return this; + } + + insertAfter(node, newNode) { + newNode.prev = node; + newNode.next = node.next; + if (node.next) node.next.prev = newNode; + else this.tail = newNode; + node.next = newNode; + this.length += 1; + } + + insertBefore(node, newNode) { + newNode.prev = node.prev; + newNode.next = node; + if (node.prev) node.prev.next = newNode; + else this.head = newNode; + node.prev = newNode; + this.length += 1; + } + + unshift(node) { + if (this.head) this.insertBefore(this.head, node); + else setInitial(this, node); + } + + push(node) { + if (this.tail) this.insertAfter(this.tail, node); + else setInitial(this, node); + } + + shift() { + return this.head && this.removeLink(this.head); + } + + pop() { + return this.tail && this.removeLink(this.tail); + } + + toArray() { + return [...this] + } + + *[Symbol.iterator] () { + var cur = this.head; + while (cur) { + yield cur.data; + cur = cur.next; + } + } + + remove (testFn) { + var curr = this.head; + while(curr) { + var {next} = curr; + if (testFn(curr)) { + this.removeLink(curr); + } + curr = next; + } + return this; + } +} + +function setInitial(dll, node) { + dll.length = 1; + dll.head = dll.tail = node; +} + +function queue$1(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } + else if(concurrency === 0) { + throw new RangeError('Concurrency must not be zero'); + } + + var _worker = wrapAsync(worker); + var numRunning = 0; + var workersList = []; + const events = { + error: [], + drain: [], + saturated: [], + unsaturated: [], + empty: [] + }; + + function on (event, handler) { + events[event].push(handler); + } + + function once (event, handler) { + const handleAndRemove = (...args) => { + off(event, handleAndRemove); + handler(...args); + }; + events[event].push(handleAndRemove); + } + + function off (event, handler) { + if (!event) return Object.keys(events).forEach(ev => events[ev] = []) + if (!handler) return events[event] = [] + events[event] = events[event].filter(ev => ev !== handler); + } + + function trigger (event, ...args) { + events[event].forEach(handler => handler(...args)); + } + + var processingScheduled = false; + function _insert(data, insertAtFront, rejectOnError, callback) { + if (callback != null && typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + + var res, rej; + function promiseCallback (err, ...args) { + // we don't care about the error, let the global error handler + // deal with it + if (err) return rejectOnError ? rej(err) : res() + if (args.length <= 1) return res(args[0]) + res(args); + } + + var item = q._createTaskItem( + data, + rejectOnError ? promiseCallback : + (callback || promiseCallback) + ); + + if (insertAtFront) { + q._tasks.unshift(item); + } else { + q._tasks.push(item); + } + + if (!processingScheduled) { + processingScheduled = true; + setImmediate$1(() => { + processingScheduled = false; + q.process(); + }); + } + + if (rejectOnError || !callback) { + return new Promise((resolve, reject) => { + res = resolve; + rej = reject; + }) + } + } + + function _createCB(tasks) { + return function (err, ...args) { + numRunning -= 1; + + for (var i = 0, l = tasks.length; i < l; i++) { + var task = tasks[i]; + + var index = workersList.indexOf(task); + if (index === 0) { + workersList.shift(); + } else if (index > 0) { + workersList.splice(index, 1); + } + + task.callback(err, ...args); + + if (err != null) { + trigger('error', err, task.data); + } + } + + if (numRunning <= (q.concurrency - q.buffer) ) { + trigger('unsaturated'); + } + + if (q.idle()) { + trigger('drain'); + } + q.process(); + }; + } + + function _maybeDrain(data) { + if (data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + setImmediate$1(() => trigger('drain')); + return true + } + return false + } + + const eventMethod = (name) => (handler) => { + if (!handler) { + return new Promise((resolve, reject) => { + once(name, (err, data) => { + if (err) return reject(err) + resolve(data); + }); + }) + } + off(name); + on(name, handler); + + }; + + var isProcessing = false; + var q = { + _tasks: new DLL(), + _createTaskItem (data, callback) { + return { + data, + callback + }; + }, + *[Symbol.iterator] () { + yield* q._tasks[Symbol.iterator](); + }, + concurrency, + payload, + buffer: concurrency / 4, + started: false, + paused: false, + push (data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return + return data.map(datum => _insert(datum, false, false, callback)) + } + return _insert(data, false, false, callback); + }, + pushAsync (data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return + return data.map(datum => _insert(datum, false, true, callback)) + } + return _insert(data, false, true, callback); + }, + kill () { + off(); + q._tasks.empty(); + }, + unshift (data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return + return data.map(datum => _insert(datum, true, false, callback)) + } + return _insert(data, true, false, callback); + }, + unshiftAsync (data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return + return data.map(datum => _insert(datum, true, true, callback)) + } + return _insert(data, true, true, callback); + }, + remove (testFn) { + q._tasks.remove(testFn); + }, + process () { + // Avoid trying to start too many processing operations. This can occur + // when callbacks resolve synchronously (#1267). + if (isProcessing) { + return; + } + isProcessing = true; + while(!q.paused && numRunning < q.concurrency && q._tasks.length){ + var tasks = [], data = []; + var l = q._tasks.length; + if (q.payload) l = Math.min(l, q.payload); + for (var i = 0; i < l; i++) { + var node = q._tasks.shift(); + tasks.push(node); + workersList.push(node); + data.push(node.data); + } + + numRunning += 1; + + if (q._tasks.length === 0) { + trigger('empty'); + } + + if (numRunning === q.concurrency) { + trigger('saturated'); + } + + var cb = onlyOnce(_createCB(tasks)); + _worker(data, cb); + } + isProcessing = false; + }, + length () { + return q._tasks.length; + }, + running () { + return numRunning; + }, + workersList () { + return workersList; + }, + idle() { + return q._tasks.length + numRunning === 0; + }, + pause () { + q.paused = true; + }, + resume () { + if (q.paused === false) { return; } + q.paused = false; + setImmediate$1(q.process); + } + }; + // define these as fixed properties, so people get useful errors when updating + Object.defineProperties(q, { + saturated: { + writable: false, + value: eventMethod('saturated') + }, + unsaturated: { + writable: false, + value: eventMethod('unsaturated') + }, + empty: { + writable: false, + value: eventMethod('empty') + }, + drain: { + writable: false, + value: eventMethod('drain') + }, + error: { + writable: false, + value: eventMethod('error') + }, + }); + return q; +} + +/** + * Creates a `cargo` object with the specified payload. Tasks added to the + * cargo will be processed altogether (up to the `payload` limit). If the + * `worker` is in progress, the task is queued until it becomes available. Once + * the `worker` has completed some tasks, each callback of those tasks is + * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) + * for how `cargo` and `queue` work. + * + * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers + * at a time, cargo passes an array of tasks to a single worker, repeating + * when the worker is finished. + * + * @name cargo + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An asynchronous function for processing an array + * of queued tasks. Invoked with `(tasks, callback)`. + * @param {number} [payload=Infinity] - An optional `integer` for determining + * how many tasks should be processed per round; if omitted, the default is + * unlimited. + * @returns {module:ControlFlow.QueueObject} A cargo object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the cargo and inner queue. + * @example + * + * // create a cargo object with payload 2 + * var cargo = async.cargo(function(tasks, callback) { + * for (var i=0; i { + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.reduce(withMissingFileList, 0, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.reduce(fileList, 0, getFileSizeInBytes); + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes); + * console.log(result); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function reduce(coll, memo, iteratee, callback) { + callback = once(callback); + var _iteratee = wrapAsync(iteratee); + return eachOfSeries$1(coll, (x, i, iterCb) => { + _iteratee(memo, x, (err, v) => { + memo = v; + iterCb(err); + }); + }, err => callback(err, memo)); +} +var reduce$1 = awaitify(reduce, 4); + +/** + * Version of the compose function that is more natural to read. Each function + * consumes the return value of the previous function. It is the equivalent of + * [compose]{@link module:ControlFlow.compose} with the arguments reversed. + * + * Each function is executed with the `this` binding of the composed function. + * + * @name seq + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.compose]{@link module:ControlFlow.compose} + * @category Control Flow + * @param {...AsyncFunction} functions - the asynchronous functions to compose + * @returns {Function} a function that composes the `functions` in order + * @example + * + * // Requires lodash (or underscore), express3 and dresende's orm2. + * // Part of an app, that fetches cats of the logged user. + * // This example uses `seq` function to avoid overnesting and error + * // handling clutter. + * app.get('/cats', function(request, response) { + * var User = request.models.User; + * async.seq( + * User.get.bind(User), // 'User.get' has signature (id, callback(err, data)) + * function(user, fn) { + * user.getCats(fn); // 'getCats' has signature (callback(err, data)) + * } + * )(req.session.user_id, function (err, cats) { + * if (err) { + * console.error(err); + * response.json({ status: 'error', message: err.message }); + * } else { + * response.json({ status: 'ok', message: 'Cats found', data: cats }); + * } + * }); + * }); + */ +function seq(...functions) { + var _functions = functions.map(wrapAsync); + return function (...args) { + var that = this; + + var cb = args[args.length - 1]; + if (typeof cb == 'function') { + args.pop(); + } else { + cb = promiseCallback(); + } + + reduce$1(_functions, args, (newargs, fn, iterCb) => { + fn.apply(that, newargs.concat((err, ...nextargs) => { + iterCb(err, nextargs); + })); + }, + (err, results) => cb(err, ...results)); + + return cb[PROMISE_SYMBOL] + }; +} + +/** + * Creates a function which is a composition of the passed asynchronous + * functions. Each function consumes the return value of the function that + * follows. Composing functions `f()`, `g()`, and `h()` would produce the result + * of `f(g(h()))`, only this version uses callbacks to obtain the return values. + * + * If the last argument to the composed function is not a function, a promise + * is returned when you call it. + * + * Each function is executed with the `this` binding of the composed function. + * + * @name compose + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {...AsyncFunction} functions - the asynchronous functions to compose + * @returns {Function} an asynchronous function that is the composed + * asynchronous `functions` + * @example + * + * function add1(n, callback) { + * setTimeout(function () { + * callback(null, n + 1); + * }, 10); + * } + * + * function mul3(n, callback) { + * setTimeout(function () { + * callback(null, n * 3); + * }, 10); + * } + * + * var add1mul3 = async.compose(mul3, add1); + * add1mul3(4, function (err, result) { + * // result now equals 15 + * }); + */ +function compose(...args) { + return seq(...args.reverse()); +} + +/** + * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time. + * + * @name mapLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ +function mapLimit (coll, limit, iteratee, callback) { + return _asyncMap(eachOfLimit$2(limit), coll, iteratee, callback) +} +var mapLimit$1 = awaitify(mapLimit, 4); + +/** + * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time. + * + * @name concatLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.concat]{@link module:Collections.concat} + * @category Collection + * @alias flatMapLimit + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`, + * which should use an array as its result. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + */ +function concatLimit(coll, limit, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + return mapLimit$1(coll, limit, (val, iterCb) => { + _iteratee(val, (err, ...args) => { + if (err) return iterCb(err); + return iterCb(err, args); + }); + }, (err, mapResults) => { + var result = []; + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + result = result.concat(...mapResults[i]); + } + } + + return callback(err, result); + }); +} +var concatLimit$1 = awaitify(concatLimit, 4); + +/** + * Applies `iteratee` to each item in `coll`, concatenating the results. Returns + * the concatenated list. The `iteratee`s are called in parallel, and the + * results are concatenated as they return. The results array will be returned in + * the original order of `coll` passed to the `iteratee` function. + * + * @name concat + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @alias flatMap + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`, + * which should use an array as its result. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * let directoryList = ['dir1','dir2','dir3']; + * let withMissingDirectoryList = ['dir1','dir2','dir3', 'dir4']; + * + * // Using callbacks + * async.concat(directoryList, fs.readdir, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * } + * }); + * + * // Error Handling + * async.concat(withMissingDirectoryList, fs.readdir, function(err, results) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * } else { + * console.log(results); + * } + * }); + * + * // Using Promises + * async.concat(directoryList, fs.readdir) + * .then(results => { + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * }).catch(err => { + * console.log(err); + * }); + * + * // Error Handling + * async.concat(withMissingDirectoryList, fs.readdir) + * .then(results => { + * console.log(results); + * }).catch(err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.concat(directoryList, fs.readdir); + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * } catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let results = await async.concat(withMissingDirectoryList, fs.readdir); + * console.log(results); + * } catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * } + * } + * + */ +function concat(coll, iteratee, callback) { + return concatLimit$1(coll, Infinity, iteratee, callback) +} +var concat$1 = awaitify(concat, 3); + +/** + * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time. + * + * @name concatSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.concat]{@link module:Collections.concat} + * @category Collection + * @alias flatMapSeries + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`. + * The iteratee should complete with an array an array of results. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + */ +function concatSeries(coll, iteratee, callback) { + return concatLimit$1(coll, 1, iteratee, callback) +} +var concatSeries$1 = awaitify(concatSeries, 3); + +/** + * Returns a function that when called, calls-back with the values provided. + * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to + * [`auto`]{@link module:ControlFlow.auto}. + * + * @name constant + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {...*} arguments... - Any number of arguments to automatically invoke + * callback with. + * @returns {AsyncFunction} Returns a function that when invoked, automatically + * invokes the callback with the previous given arguments. + * @example + * + * async.waterfall([ + * async.constant(42), + * function (value, next) { + * // value === 42 + * }, + * //... + * ], callback); + * + * async.waterfall([ + * async.constant(filename, "utf8"), + * fs.readFile, + * function (fileData, next) { + * //... + * } + * //... + * ], callback); + * + * async.auto({ + * hostname: async.constant("https://server.net/"), + * port: findFreePort, + * launchServer: ["hostname", "port", function (options, cb) { + * startServer(options, cb); + * }], + * //... + * }, callback); + */ +function constant$1(...args) { + return function (...ignoredArgs/*, callback*/) { + var callback = ignoredArgs.pop(); + return callback(null, ...args); + }; +} + +function _createTester(check, getResult) { + return (eachfn, arr, _iteratee, cb) => { + var testPassed = false; + var testResult; + const iteratee = wrapAsync(_iteratee); + eachfn(arr, (value, _, callback) => { + iteratee(value, (err, result) => { + if (err || err === false) return callback(err); + + if (check(result) && !testResult) { + testPassed = true; + testResult = getResult(true, value); + return callback(null, breakLoop); + } + callback(); + }); + }, err => { + if (err) return cb(err); + cb(null, testPassed ? testResult : getResult(false)); + }); + }; +} + +/** + * Returns the first value in `coll` that passes an async truth test. The + * `iteratee` is applied in parallel, meaning the first iteratee to return + * `true` will fire the detect `callback` with that result. That means the + * result might not be the first item in the original `coll` (in terms of order) + * that passes the test. + + * If order within the original `coll` is important, then look at + * [`detectSeries`]{@link module:Collections.detectSeries}. + * + * @name detect + * @static + * @memberOf module:Collections + * @method + * @alias find + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // dir1/file1.txt + * // result now equals the first file in the list that exists + * } + *); + * + * // Using Promises + * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists) + * .then(result => { + * console.log(result); + * // dir1/file1.txt + * // result now equals the first file in the list that exists + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists); + * console.log(result); + * // dir1/file1.txt + * // result now equals the file in the list that exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function detect(coll, iteratee, callback) { + return _createTester(bool => bool, (res, item) => item)(eachOf$1, coll, iteratee, callback) +} +var detect$1 = awaitify(detect, 3); + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a + * time. + * + * @name detectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findLimit + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + */ +function detectLimit(coll, limit, iteratee, callback) { + return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(limit), coll, iteratee, callback) +} +var detectLimit$1 = awaitify(detectLimit, 4); + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time. + * + * @name detectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findSeries + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + */ +function detectSeries(coll, iteratee, callback) { + return _createTester(bool => bool, (res, item) => item)(eachOfLimit$2(1), coll, iteratee, callback) +} + +var detectSeries$1 = awaitify(detectSeries, 3); + +function consoleFunc(name) { + return (fn, ...args) => wrapAsync(fn)(...args, (err, ...resultArgs) => { + /* istanbul ignore else */ + if (typeof console === 'object') { + /* istanbul ignore else */ + if (err) { + /* istanbul ignore else */ + if (console.error) { + console.error(err); + } + } else if (console[name]) { /* istanbul ignore else */ + resultArgs.forEach(x => console[name](x)); + } + } + }) +} + +/** + * Logs the result of an [`async` function]{@link AsyncFunction} to the + * `console` using `console.dir` to display the properties of the resulting object. + * Only works in Node.js or in browsers that support `console.dir` and + * `console.error` (such as FF and Chrome). + * If multiple arguments are returned from the async function, + * `console.dir` is called on each argument in order. + * + * @name dir + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, {hello: name}); + * }, 1000); + * }; + * + * // in the node repl + * node> async.dir(hello, 'world'); + * {hello: 'world'} + */ +var dir = consoleFunc('dir'); + +/** + * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in + * the order of operations, the arguments `test` and `iteratee` are switched. + * + * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + * + * @name doWhilst + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - A function which is called each time `test` + * passes. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform after each + * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. + * `callback` will be passed an error and any arguments passed to the final + * `iteratee`'s callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + */ +function doWhilst(iteratee, test, callback) { + callback = onlyOnce(callback); + var _fn = wrapAsync(iteratee); + var _test = wrapAsync(test); + var results; + + function next(err, ...args) { + if (err) return callback(err); + if (err === false) return; + results = args; + _test(...args, check); + } + + function check(err, truth) { + if (err) return callback(err); + if (err === false) return; + if (!truth) return callback(null, ...results); + _fn(next); + } + + return check(null, true); +} + +var doWhilst$1 = awaitify(doWhilst, 3); + +/** + * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the + * argument ordering differs from `until`. + * + * @name doUntil + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.doWhilst]{@link module:ControlFlow.doWhilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform after each + * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `iteratee` + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + */ +function doUntil(iteratee, test, callback) { + const _test = wrapAsync(test); + return doWhilst$1(iteratee, (...args) => { + const cb = args.pop(); + _test(...args, (err, truth) => cb (err, !truth)); + }, callback); +} + +function _withoutIndex(iteratee) { + return (value, index, callback) => iteratee(value, callback); +} + +/** + * Applies the function `iteratee` to each item in `coll`, in parallel. + * The `iteratee` is called with an item from the list, and a callback for when + * it has finished. If the `iteratee` passes an error to its `callback`, the + * main `callback` (for the `each` function) is immediately called with the + * error. + * + * Note, that since this function applies `iteratee` to each item in parallel, + * there is no guarantee that the iteratee functions will complete in order. + * + * @name each + * @static + * @memberOf module:Collections + * @method + * @alias forEach + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to + * each item in `coll`. Invoked with (item, callback). + * The array index is not passed to the iteratee. + * If you need the index, use `eachOf`. + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt']; + * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt']; + * + * // asynchronous function that deletes a file + * const deleteFile = function(file, callback) { + * fs.unlink(file, callback); + * }; + * + * // Using callbacks + * async.each(fileList, deleteFile, function(err) { + * if( err ) { + * console.log(err); + * } else { + * console.log('All files have been deleted successfully'); + * } + * }); + * + * // Error Handling + * async.each(withMissingFileList, deleteFile, function(err){ + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * }); + * + * // Using Promises + * async.each(fileList, deleteFile) + * .then( () => { + * console.log('All files have been deleted successfully'); + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.each(fileList, deleteFile) + * .then( () => { + * console.log('All files have been deleted successfully'); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * }); + * + * // Using async/await + * async () => { + * try { + * await async.each(files, deleteFile); + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * await async.each(withMissingFileList, deleteFile); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * } + * } + * + */ +function eachLimit$2(coll, iteratee, callback) { + return eachOf$1(coll, _withoutIndex(wrapAsync(iteratee)), callback); +} + +var each = awaitify(eachLimit$2, 3); + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachLimit(coll, limit, iteratee, callback) { + return eachOfLimit$2(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback); +} +var eachLimit$1 = awaitify(eachLimit, 4); + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item + * in series and therefore the iteratee functions will complete in order. + + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachSeries(coll, iteratee, callback) { + return eachLimit$1(coll, 1, iteratee, callback) +} +var eachSeries$1 = awaitify(eachSeries, 3); + +/** + * Wrap an async function and ensure it calls its callback on a later tick of + * the event loop. If the function already calls its callback on a next tick, + * no extra deferral is added. This is useful for preventing stack overflows + * (`RangeError: Maximum call stack size exceeded`) and generally keeping + * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) + * contained. ES2017 `async` functions are returned as-is -- they are immune + * to Zalgo's corrupting influences, as they always resolve on a later tick. + * + * @name ensureAsync + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - an async function, one that expects a node-style + * callback as its last argument. + * @returns {AsyncFunction} Returns a wrapped function with the exact same call + * signature as the function passed in. + * @example + * + * function sometimesAsync(arg, callback) { + * if (cache[arg]) { + * return callback(null, cache[arg]); // this would be synchronous!! + * } else { + * doSomeIO(arg, callback); // this IO would be asynchronous + * } + * } + * + * // this has a risk of stack overflows if many results are cached in a row + * async.mapSeries(args, sometimesAsync, done); + * + * // this will defer sometimesAsync's callback if necessary, + * // preventing stack overflows + * async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + */ +function ensureAsync(fn) { + if (isAsync(fn)) return fn; + return function (...args/*, callback*/) { + var callback = args.pop(); + var sync = true; + args.push((...innerArgs) => { + if (sync) { + setImmediate$1(() => callback(...innerArgs)); + } else { + callback(...innerArgs); + } + }); + fn.apply(this, args); + sync = false; + }; +} + +/** + * Returns `true` if every element in `coll` satisfies an async test. If any + * iteratee call returns `false`, the main `callback` is immediately called. + * + * @name every + * @static + * @memberOf module:Collections + * @method + * @alias all + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file4.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.every(fileList, fileExists, function(err, result) { + * console.log(result); + * // true + * // result is true since every file exists + * }); + * + * async.every(withMissingFileList, fileExists, function(err, result) { + * console.log(result); + * // false + * // result is false since NOT every file exists + * }); + * + * // Using Promises + * async.every(fileList, fileExists) + * .then( result => { + * console.log(result); + * // true + * // result is true since every file exists + * }).catch( err => { + * console.log(err); + * }); + * + * async.every(withMissingFileList, fileExists) + * .then( result => { + * console.log(result); + * // false + * // result is false since NOT every file exists + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.every(fileList, fileExists); + * console.log(result); + * // true + * // result is true since every file exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + * async () => { + * try { + * let result = await async.every(withMissingFileList, fileExists); + * console.log(result); + * // false + * // result is false since NOT every file exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function every(coll, iteratee, callback) { + return _createTester(bool => !bool, res => !res)(eachOf$1, coll, iteratee, callback) +} +var every$1 = awaitify(every, 3); + +/** + * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. + * + * @name everyLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function everyLimit(coll, limit, iteratee, callback) { + return _createTester(bool => !bool, res => !res)(eachOfLimit$2(limit), coll, iteratee, callback) +} +var everyLimit$1 = awaitify(everyLimit, 4); + +/** + * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. + * + * @name everySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in series. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function everySeries(coll, iteratee, callback) { + return _createTester(bool => !bool, res => !res)(eachOfSeries$1, coll, iteratee, callback) +} +var everySeries$1 = awaitify(everySeries, 3); + +function filterArray(eachfn, arr, iteratee, callback) { + var truthValues = new Array(arr.length); + eachfn(arr, (x, index, iterCb) => { + iteratee(x, (err, v) => { + truthValues[index] = !!v; + iterCb(err); + }); + }, err => { + if (err) return callback(err); + var results = []; + for (var i = 0; i < arr.length; i++) { + if (truthValues[i]) results.push(arr[i]); + } + callback(null, results); + }); +} + +function filterGeneric(eachfn, coll, iteratee, callback) { + var results = []; + eachfn(coll, (x, index, iterCb) => { + iteratee(x, (err, v) => { + if (err) return iterCb(err); + if (v) { + results.push({index, value: x}); + } + iterCb(err); + }); + }, err => { + if (err) return callback(err); + callback(null, results + .sort((a, b) => a.index - b.index) + .map(v => v.value)); + }); +} + +function _filter(eachfn, coll, iteratee, callback) { + var filter = isArrayLike(coll) ? filterArray : filterGeneric; + return filter(eachfn, coll, wrapAsync(iteratee), callback); +} + +/** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.filter(files, fileExists, function(err, results) { + * if(err) { + * console.log(err); + * } else { + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * } + * }); + * + * // Using Promises + * async.filter(files, fileExists) + * .then(results => { + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.filter(files, fileExists); + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function filter (coll, iteratee, callback) { + return _filter(eachOf$1, coll, iteratee, callback) +} +var filter$1 = awaitify(filter, 3); + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a + * time. + * + * @name filterLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback provided + */ +function filterLimit (coll, limit, iteratee, callback) { + return _filter(eachOfLimit$2(limit), coll, iteratee, callback) +} +var filterLimit$1 = awaitify(filterLimit, 4); + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. + * + * @name filterSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results) + * @returns {Promise} a promise, if no callback provided + */ +function filterSeries (coll, iteratee, callback) { + return _filter(eachOfSeries$1, coll, iteratee, callback) +} +var filterSeries$1 = awaitify(filterSeries, 3); + +/** + * Calls the asynchronous function `fn` with a callback parameter that allows it + * to call itself again, in series, indefinitely. + + * If an error is passed to the callback then `errback` is called with the + * error, and execution stops, otherwise it will never be called. + * + * @name forever + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} fn - an async function to call repeatedly. + * Invoked with (next). + * @param {Function} [errback] - when `fn` passes an error to it's callback, + * this function will be called, and execution stops. Invoked with (err). + * @returns {Promise} a promise that rejects if an error occurs and an errback + * is not passed + * @example + * + * async.forever( + * function(next) { + * // next is suitable for passing to things that need a callback(err [, whatever]); + * // it will result in this function being called again. + * }, + * function(err) { + * // if next is called with a value in its first parameter, it will appear + * // in here as 'err', and execution will stop. + * } + * ); + */ +function forever(fn, errback) { + var done = onlyOnce(errback); + var task = wrapAsync(ensureAsync(fn)); + + function next(err) { + if (err) return done(err); + if (err === false) return; + task(next); + } + return next(); +} +var forever$1 = awaitify(forever, 2); + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time. + * + * @name groupByLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @returns {Promise} a promise, if no callback is passed + */ +function groupByLimit(coll, limit, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + return mapLimit$1(coll, limit, (val, iterCb) => { + _iteratee(val, (err, key) => { + if (err) return iterCb(err); + return iterCb(err, {key, val}); + }); + }, (err, mapResults) => { + var result = {}; + // from MDN, handle object having an `hasOwnProperty` prop + var {hasOwnProperty} = Object.prototype; + + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + var {key} = mapResults[i]; + var {val} = mapResults[i]; + + if (hasOwnProperty.call(result, key)) { + result[key].push(val); + } else { + result[key] = [val]; + } + } + } + + return callback(err, result); + }); +} + +var groupByLimit$1 = awaitify(groupByLimit, 4); + +/** + * Returns a new object, where each value corresponds to an array of items, from + * `coll`, that returned the corresponding key. That is, the keys of the object + * correspond to the values passed to the `iteratee` callback. + * + * Note: Since this function applies the `iteratee` to each item in parallel, + * there is no guarantee that the `iteratee` functions will complete in order. + * However, the values for each key in the `result` will be in the same order as + * the original `coll`. For Objects, the values will roughly be in the order of + * the original Objects' keys (but this can vary across JavaScript engines). + * + * @name groupBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const files = ['dir1/file1.txt','dir2','dir4'] + * + * // asynchronous function that detects file type as none, file, or directory + * function detectFile(file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(null, 'none'); + * } + * callback(null, stat.isDirectory() ? 'directory' : 'file'); + * }); + * } + * + * //Using callbacks + * async.groupBy(files, detectFile, function(err, result) { + * if(err) { + * console.log(err); + * } else { + * console.log(result); + * // { + * // file: [ 'dir1/file1.txt' ], + * // none: [ 'dir4' ], + * // directory: [ 'dir2'] + * // } + * // result is object containing the files grouped by type + * } + * }); + * + * // Using Promises + * async.groupBy(files, detectFile) + * .then( result => { + * console.log(result); + * // { + * // file: [ 'dir1/file1.txt' ], + * // none: [ 'dir4' ], + * // directory: [ 'dir2'] + * // } + * // result is object containing the files grouped by type + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.groupBy(files, detectFile); + * console.log(result); + * // { + * // file: [ 'dir1/file1.txt' ], + * // none: [ 'dir4' ], + * // directory: [ 'dir2'] + * // } + * // result is object containing the files grouped by type + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function groupBy (coll, iteratee, callback) { + return groupByLimit$1(coll, Infinity, iteratee, callback) +} + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. + * + * @name groupBySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whose + * properties are arrays of values which returned the corresponding key. + * @returns {Promise} a promise, if no callback is passed + */ +function groupBySeries (coll, iteratee, callback) { + return groupByLimit$1(coll, 1, iteratee, callback) +} + +/** + * Logs the result of an `async` function to the `console`. Only works in + * Node.js or in browsers that support `console.log` and `console.error` (such + * as FF and Chrome). If multiple arguments are returned from the async + * function, `console.log` is called on each argument in order. + * + * @name log + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, 'hello ' + name); + * }, 1000); + * }; + * + * // in the node repl + * node> async.log(hello, 'world'); + * 'hello world' + */ +var log = consoleFunc('log'); + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a + * time. + * + * @name mapValuesLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback is passed + */ +function mapValuesLimit(obj, limit, iteratee, callback) { + callback = once(callback); + var newObj = {}; + var _iteratee = wrapAsync(iteratee); + return eachOfLimit$2(limit)(obj, (val, key, next) => { + _iteratee(val, key, (err, result) => { + if (err) return next(err); + newObj[key] = result; + next(err); + }); + }, err => callback(err, newObj)); +} + +var mapValuesLimit$1 = awaitify(mapValuesLimit, 4); + +/** + * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. + * + * Produces a new Object by mapping each value of `obj` through the `iteratee` + * function. The `iteratee` is called each `value` and `key` from `obj` and a + * callback for when it has finished processing. Each of these callbacks takes + * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` + * passes an error to its callback, the main `callback` (for the `mapValues` + * function) is immediately called with the error. + * + * Note, the order of the keys in the result is not guaranteed. The keys will + * be roughly in the order they complete, (but this is very engine-specific) + * + * @name mapValues + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * // file4.txt does not exist + * + * const fileMap = { + * f1: 'file1.txt', + * f2: 'file2.txt', + * f3: 'file3.txt' + * }; + * + * const withMissingFileMap = { + * f1: 'file1.txt', + * f2: 'file2.txt', + * f3: 'file4.txt' + * }; + * + * // asynchronous function that returns the file size in bytes + * function getFileSizeInBytes(file, key, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, stat.size); + * }); + * } + * + * // Using callbacks + * async.mapValues(fileMap, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * } else { + * console.log(result); + * // result is now a map of file size in bytes for each file, e.g. + * // { + * // f1: 1000, + * // f2: 2000, + * // f3: 3000 + * // } + * } + * }); + * + * // Error handling + * async.mapValues(withMissingFileMap, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(result); + * } + * }); + * + * // Using Promises + * async.mapValues(fileMap, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * // result is now a map of file size in bytes for each file, e.g. + * // { + * // f1: 1000, + * // f2: 2000, + * // f3: 3000 + * // } + * }).catch (err => { + * console.log(err); + * }); + * + * // Error Handling + * async.mapValues(withMissingFileMap, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * }).catch (err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.mapValues(fileMap, getFileSizeInBytes); + * console.log(result); + * // result is now a map of file size in bytes for each file, e.g. + * // { + * // f1: 1000, + * // f2: 2000, + * // f3: 3000 + * // } + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let result = await async.mapValues(withMissingFileMap, getFileSizeInBytes); + * console.log(result); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function mapValues(obj, iteratee, callback) { + return mapValuesLimit$1(obj, Infinity, iteratee, callback) +} + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time. + * + * @name mapValuesSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback is passed + */ +function mapValuesSeries(obj, iteratee, callback) { + return mapValuesLimit$1(obj, 1, iteratee, callback) +} + +/** + * Caches the results of an async function. When creating a hash to store + * function results against, the callback is omitted from the hash and an + * optional hash function can be used. + * + * **Note: if the async function errs, the result will not be cached and + * subsequent calls will call the wrapped function.** + * + * If no hash function is specified, the first argument is used as a hash key, + * which may work reasonably if it is a string or a data type that converts to a + * distinct string. Note that objects and arrays will not behave reasonably. + * Neither will cases where the other arguments are significant. In such cases, + * specify your own hash function. + * + * The cache of results is exposed as the `memo` property of the function + * returned by `memoize`. + * + * @name memoize + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function to proxy and cache results from. + * @param {Function} hasher - An optional function for generating a custom hash + * for storing results. It has all the arguments applied to it apart from the + * callback, and must be synchronous. + * @returns {AsyncFunction} a memoized version of `fn` + * @example + * + * var slow_fn = function(name, callback) { + * // do something + * callback(null, result); + * }; + * var fn = async.memoize(slow_fn); + * + * // fn can now be used as if it were slow_fn + * fn('some name', function() { + * // callback + * }); + */ +function memoize(fn, hasher = v => v) { + var memo = Object.create(null); + var queues = Object.create(null); + var _fn = wrapAsync(fn); + var memoized = initialParams((args, callback) => { + var key = hasher(...args); + if (key in memo) { + setImmediate$1(() => callback(null, ...memo[key])); + } else if (key in queues) { + queues[key].push(callback); + } else { + queues[key] = [callback]; + _fn(...args, (err, ...resultArgs) => { + // #1465 don't memoize if an error occurred + if (!err) { + memo[key] = resultArgs; + } + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i](err, ...resultArgs); + } + }); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; +} + +/* istanbul ignore file */ + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `process.nextTick`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name nextTick + * @static + * @memberOf module:Utils + * @method + * @see [async.setImmediate]{@link module:Utils.setImmediate} + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +var _defer; + +if (hasNextTick) { + _defer = process.nextTick; +} else if (hasSetImmediate) { + _defer = setImmediate; +} else { + _defer = fallback; +} + +var nextTick = wrap(_defer); + +var _parallel = awaitify((eachfn, tasks, callback) => { + var results = isArrayLike(tasks) ? [] : {}; + + eachfn(tasks, (task, key, taskCb) => { + wrapAsync(task)((err, ...result) => { + if (result.length < 2) { + [result] = result; + } + results[key] = result; + taskCb(err); + }); + }, err => callback(err, results)); +}, 3); + +/** + * Run the `tasks` collection of functions in parallel, without waiting until + * the previous function has completed. If any of the functions pass an error to + * its callback, the main `callback` is immediately called with the value of the + * error. Once the `tasks` have completed, the results are passed to the final + * `callback` as an array. + * + * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about + * parallel execution of code. If your tasks do not use any timers or perform + * any I/O, they will actually be executed in series. Any synchronous setup + * sections for each task will happen one after the other. JavaScript remains + * single-threaded. + * + * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the + * execution of other tasks when a task fails. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.parallel}. + * + * @name parallel + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * @returns {Promise} a promise, if a callback is not passed + * + * @example + * + * //Using Callbacks + * async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], function(err, results) { + * console.log(results); + * // results is equal to ['one','two'] even though + * // the second function had a shorter timeout. + * }); + * + * // an example using an object instead of an array + * async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }); + * + * //Using Promises + * async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]).then(results => { + * console.log(results); + * // results is equal to ['one','two'] even though + * // the second function had a shorter timeout. + * }).catch(err => { + * console.log(err); + * }); + * + * // an example using an object instead of an array + * async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }).then(results => { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }).catch(err => { + * console.log(err); + * }); + * + * //Using async/await + * async () => { + * try { + * let results = await async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]); + * console.log(results); + * // results is equal to ['one','two'] even though + * // the second function had a shorter timeout. + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // an example using an object instead of an array + * async () => { + * try { + * let results = await async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }); + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function parallel(tasks, callback) { + return _parallel(eachOf$1, tasks, callback); +} + +/** + * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a + * time. + * + * @name parallelLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.parallel]{@link module:ControlFlow.parallel} + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * @returns {Promise} a promise, if a callback is not passed + */ +function parallelLimit(tasks, limit, callback) { + return _parallel(eachOfLimit$2(limit), tasks, callback); +} + +/** + * A queue of tasks for the worker function to complete. + * @typedef {Iterable} QueueObject + * @memberOf module:ControlFlow + * @property {Function} length - a function returning the number of items + * waiting to be processed. Invoke with `queue.length()`. + * @property {boolean} started - a boolean indicating whether or not any + * items have been pushed and processed by the queue. + * @property {Function} running - a function returning the number of items + * currently being processed. Invoke with `queue.running()`. + * @property {Function} workersList - a function returning the array of items + * currently being processed. Invoke with `queue.workersList()`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke with `queue.idle()`. + * @property {number} concurrency - an integer for determining how many `worker` + * functions should be run in parallel. This property can be changed after a + * `queue` is created to alter the concurrency on-the-fly. + * @property {number} payload - an integer that specifies how many items are + * passed to the worker function at a time. only applies if this is a + * [cargo]{@link module:ControlFlow.cargo} object + * @property {AsyncFunction} push - add a new task to the `queue`. Calls `callback` + * once the `worker` has finished processing the task. Instead of a single task, + * a `tasks` array can be submitted. The respective callback is used for every + * task in the list. Invoke with `queue.push(task, [callback])`, + * @property {AsyncFunction} unshift - add a new task to the front of the `queue`. + * Invoke with `queue.unshift(task, [callback])`. + * @property {AsyncFunction} pushAsync - the same as `q.push`, except this returns + * a promise that rejects if an error occurs. + * @property {AsyncFunction} unshiftAsync - the same as `q.unshift`, except this returns + * a promise that rejects if an error occurs. + * @property {Function} remove - remove items from the queue that match a test + * function. The test function will be passed an object with a `data` property, + * and a `priority` property, if this is a + * [priorityQueue]{@link module:ControlFlow.priorityQueue} object. + * Invoked with `queue.remove(testFn)`, where `testFn` is of the form + * `function ({data, priority}) {}` and returns a Boolean. + * @property {Function} saturated - a function that sets a callback that is + * called when the number of running workers hits the `concurrency` limit, and + * further tasks will be queued. If the callback is omitted, `q.saturated()` + * returns a promise for the next occurrence. + * @property {Function} unsaturated - a function that sets a callback that is + * called when the number of running workers is less than the `concurrency` & + * `buffer` limits, and further tasks will not be queued. If the callback is + * omitted, `q.unsaturated()` returns a promise for the next occurrence. + * @property {number} buffer - A minimum threshold buffer in order to say that + * the `queue` is `unsaturated`. + * @property {Function} empty - a function that sets a callback that is called + * when the last item from the `queue` is given to a `worker`. If the callback + * is omitted, `q.empty()` returns a promise for the next occurrence. + * @property {Function} drain - a function that sets a callback that is called + * when the last item from the `queue` has returned from the `worker`. If the + * callback is omitted, `q.drain()` returns a promise for the next occurrence. + * @property {Function} error - a function that sets a callback that is called + * when a task errors. Has the signature `function(error, task)`. If the + * callback is omitted, `error()` returns a promise that rejects on the next + * error. + * @property {boolean} paused - a boolean for determining whether the queue is + * in a paused state. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke with `queue.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke with `queue.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. No more tasks + * should be pushed to the queue after calling this function. Invoke with `queue.kill()`. + * + * @example + * const q = async.queue(worker, 2) + * q.push(item1) + * q.push(item2) + * q.push(item3) + * // queues are iterable, spread into an array to inspect + * const items = [...q] // [item1, item2, item3] + * // or use for of + * for (let item of q) { + * console.log(item) + * } + * + * q.drain(() => { + * console.log('all done') + * }) + * // or + * await q.drain() + */ + +/** + * Creates a `queue` object with the specified `concurrency`. Tasks added to the + * `queue` are processed in parallel (up to the `concurrency` limit). If all + * `worker`s are in progress, the task is queued until one becomes available. + * Once a `worker` completes a `task`, that `task`'s callback is called. + * + * @name queue + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. Invoked with (task, callback). + * @param {number} [concurrency=1] - An `integer` for determining how many + * `worker` functions should be run in parallel. If omitted, the concurrency + * defaults to `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can be + * attached as certain properties to listen for specific events during the + * lifecycle of the queue. + * @example + * + * // create a queue object with concurrency 2 + * var q = async.queue(function(task, callback) { + * console.log('hello ' + task.name); + * callback(); + * }, 2); + * + * // assign a callback + * q.drain(function() { + * console.log('all items have been processed'); + * }); + * // or await the end + * await q.drain() + * + * // assign an error callback + * q.error(function(err, task) { + * console.error('task experienced an error'); + * }); + * + * // add some items to the queue + * q.push({name: 'foo'}, function(err) { + * console.log('finished processing foo'); + * }); + * // callback is optional + * q.push({name: 'bar'}); + * + * // add some items to the queue (batch-wise) + * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) { + * console.log('finished processing item'); + * }); + * + * // add some items to the front of the queue + * q.unshift({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + */ +function queue (worker, concurrency) { + var _worker = wrapAsync(worker); + return queue$1((items, cb) => { + _worker(items[0], cb); + }, concurrency, 1); +} + +// Binary min-heap implementation used for priority queue. +// Implementation is stable, i.e. push time is considered for equal priorities +class Heap { + constructor() { + this.heap = []; + this.pushCount = Number.MIN_SAFE_INTEGER; + } + + get length() { + return this.heap.length; + } + + empty () { + this.heap = []; + return this; + } + + percUp(index) { + let p; + + while (index > 0 && smaller(this.heap[index], this.heap[p=parent(index)])) { + let t = this.heap[index]; + this.heap[index] = this.heap[p]; + this.heap[p] = t; + + index = p; + } + } + + percDown(index) { + let l; + + while ((l=leftChi(index)) < this.heap.length) { + if (l+1 < this.heap.length && smaller(this.heap[l+1], this.heap[l])) { + l = l+1; + } + + if (smaller(this.heap[index], this.heap[l])) { + break; + } + + let t = this.heap[index]; + this.heap[index] = this.heap[l]; + this.heap[l] = t; + + index = l; + } + } + + push(node) { + node.pushCount = ++this.pushCount; + this.heap.push(node); + this.percUp(this.heap.length-1); + } + + unshift(node) { + return this.heap.push(node); + } + + shift() { + let [top] = this.heap; + + this.heap[0] = this.heap[this.heap.length-1]; + this.heap.pop(); + this.percDown(0); + + return top; + } + + toArray() { + return [...this]; + } + + *[Symbol.iterator] () { + for (let i = 0; i < this.heap.length; i++) { + yield this.heap[i].data; + } + } + + remove (testFn) { + let j = 0; + for (let i = 0; i < this.heap.length; i++) { + if (!testFn(this.heap[i])) { + this.heap[j] = this.heap[i]; + j++; + } + } + + this.heap.splice(j); + + for (let i = parent(this.heap.length-1); i >= 0; i--) { + this.percDown(i); + } + + return this; + } +} + +function leftChi(i) { + return (i<<1)+1; +} + +function parent(i) { + return ((i+1)>>1)-1; +} + +function smaller(x, y) { + if (x.priority !== y.priority) { + return x.priority < y.priority; + } + else { + return x.pushCount < y.pushCount; + } +} + +/** + * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and + * completed in ascending priority order. + * + * @name priorityQueue + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. + * Invoked with (task, callback). + * @param {number} concurrency - An `integer` for determining how many `worker` + * functions should be run in parallel. If omitted, the concurrency defaults to + * `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are three + * differences between `queue` and `priorityQueue` objects: + * * `push(task, priority, [callback])` - `priority` should be a number. If an + * array of `tasks` is given, all tasks will be assigned the same priority. + * * `pushAsync(task, priority, [callback])` - the same as `priorityQueue.push`, + * except this returns a promise that rejects if an error occurs. + * * The `unshift` and `unshiftAsync` methods were removed. + */ +function priorityQueue(worker, concurrency) { + // Start with a normal queue + var q = queue(worker, concurrency); + + var { + push, + pushAsync + } = q; + + q._tasks = new Heap(); + q._createTaskItem = ({data, priority}, callback) => { + return { + data, + priority, + callback + }; + }; + + function createDataItems(tasks, priority) { + if (!Array.isArray(tasks)) { + return {data: tasks, priority}; + } + return tasks.map(data => { return {data, priority}; }); + } + + // Override push to accept second parameter representing priority + q.push = function(data, priority = 0, callback) { + return push(createDataItems(data, priority), callback); + }; + + q.pushAsync = function(data, priority = 0, callback) { + return pushAsync(createDataItems(data, priority), callback); + }; + + // Remove unshift functions + delete q.unshift; + delete q.unshiftAsync; + + return q; +} + +/** + * Runs the `tasks` array of functions in parallel, without waiting until the + * previous function has completed. Once any of the `tasks` complete or pass an + * error to its callback, the main `callback` is immediately called. It's + * equivalent to `Promise.race()`. + * + * @name race + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} + * to run. Each function can complete with an optional `result` value. + * @param {Function} callback - A callback to run once any of the functions have + * completed. This function gets an error or result from the first function that + * completed. Invoked with (err, result). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * async.race([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // main callback + * function(err, result) { + * // the result will be equal to 'two' as it finishes earlier + * }); + */ +function race(tasks, callback) { + callback = once(callback); + if (!Array.isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); + if (!tasks.length) return callback(); + for (var i = 0, l = tasks.length; i < l; i++) { + wrapAsync(tasks[i])(callback); + } +} + +var race$1 = awaitify(race, 2); + +/** + * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. + * + * @name reduceRight + * @static + * @memberOf module:Collections + * @method + * @see [async.reduce]{@link module:Collections.reduce} + * @alias foldr + * @category Collection + * @param {Array} array - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee completes with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + * @returns {Promise} a promise, if no callback is passed + */ +function reduceRight (array, memo, iteratee, callback) { + var reversed = [...array].reverse(); + return reduce$1(reversed, memo, iteratee, callback); +} + +/** + * Wraps the async function in another function that always completes with a + * result object, even when it errors. + * + * The result object has either the property `error` or `value`. + * + * @name reflect + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function you want to wrap + * @returns {Function} - A function that always passes null to it's callback as + * the error. The second argument to the callback will be an `object` with + * either an `error` or a `value` property. + * @example + * + * async.parallel([ + * async.reflect(function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }), + * async.reflect(function(callback) { + * // do some more stuff but error ... + * callback('bad stuff happened'); + * }), + * async.reflect(function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * }) + * ], + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = 'bad stuff happened' + * // results[2].value = 'two' + * }); + */ +function reflect(fn) { + var _fn = wrapAsync(fn); + return initialParams(function reflectOn(args, reflectCallback) { + args.push((error, ...cbArgs) => { + let retVal = {}; + if (error) { + retVal.error = error; + } + if (cbArgs.length > 0){ + var value = cbArgs; + if (cbArgs.length <= 1) { + [value] = cbArgs; + } + retVal.value = value; + } + reflectCallback(null, retVal); + }); + + return _fn.apply(this, args); + }); +} + +/** + * A helper function that wraps an array or an object of functions with `reflect`. + * + * @name reflectAll + * @static + * @memberOf module:Utils + * @method + * @see [async.reflect]{@link module:Utils.reflect} + * @category Util + * @param {Array|Object|Iterable} tasks - The collection of + * [async functions]{@link AsyncFunction} to wrap in `async.reflect`. + * @returns {Array} Returns an array of async functions, each wrapped in + * `async.reflect` + * @example + * + * let tasks = [ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * // do some more stuff but error ... + * callback(new Error('bad stuff happened')); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = Error('bad stuff happened') + * // results[2].value = 'two' + * }); + * + * // an example using an object instead of an array + * let tasks = { + * one: function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * two: function(callback) { + * callback('two'); + * }, + * three: function(callback) { + * setTimeout(function() { + * callback(null, 'three'); + * }, 100); + * } + * }; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results.one.value = 'one' + * // results.two.error = 'two' + * // results.three.value = 'three' + * }); + */ +function reflectAll(tasks) { + var results; + if (Array.isArray(tasks)) { + results = tasks.map(reflect); + } else { + results = {}; + Object.keys(tasks).forEach(key => { + results[key] = reflect.call(this, tasks[key]); + }); + } + return results; +} + +function reject$2(eachfn, arr, _iteratee, callback) { + const iteratee = wrapAsync(_iteratee); + return _filter(eachfn, arr, (value, cb) => { + iteratee(value, (err, v) => { + cb(err, !v); + }); + }, callback); +} + +/** + * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test. + * + * @name reject + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.reject(fileList, fileExists, function(err, results) { + * // [ 'dir3/file6.txt' ] + * // results now equals an array of the non-existing files + * }); + * + * // Using Promises + * async.reject(fileList, fileExists) + * .then( results => { + * console.log(results); + * // [ 'dir3/file6.txt' ] + * // results now equals an array of the non-existing files + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.reject(fileList, fileExists); + * console.log(results); + * // [ 'dir3/file6.txt' ] + * // results now equals an array of the non-existing files + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function reject (coll, iteratee, callback) { + return reject$2(eachOf$1, coll, iteratee, callback) +} +var reject$1 = awaitify(reject, 3); + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a + * time. + * + * @name rejectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ +function rejectLimit (coll, limit, iteratee, callback) { + return reject$2(eachOfLimit$2(limit), coll, iteratee, callback) +} +var rejectLimit$1 = awaitify(rejectLimit, 4); + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. + * + * @name rejectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ +function rejectSeries (coll, iteratee, callback) { + return reject$2(eachOfSeries$1, coll, iteratee, callback) +} +var rejectSeries$1 = awaitify(rejectSeries, 3); + +function constant(value) { + return function () { + return value; + } +} + +/** + * Attempts to get a successful response from `task` no more than `times` times + * before returning an error. If the task is successful, the `callback` will be + * passed the result of the successful task. If all attempts fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name retry + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @see [async.retryable]{@link module:ControlFlow.retryable} + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an + * object with `times` and `interval` or a number. + * * `times` - The number of attempts to make before giving up. The default + * is `5`. + * * `interval` - The time to wait between retries, in milliseconds. The + * default is `0`. The interval may also be specified as a function of the + * retry count (see example). + * * `errorFilter` - An optional synchronous function that is invoked on + * erroneous result. If it returns `true` the retry attempts will continue; + * if the function returns `false` the retry flow is aborted with the current + * attempt's error and result being returned to the final callback. + * Invoked with (err). + * * If `opts` is a number, the number specifies the number of times to retry, + * with the default interval of `0`. + * @param {AsyncFunction} task - An async function to retry. + * Invoked with (callback). + * @param {Function} [callback] - An optional callback which is called when the + * task has succeeded, or after the final failed attempt. It receives the `err` + * and `result` arguments of the last attempt at completing the `task`. Invoked + * with (err, results). + * @returns {Promise} a promise if no callback provided + * + * @example + * + * // The `retry` function can be used as a stand-alone control flow by passing + * // a callback, as shown below: + * + * // try calling apiMethod 3 times + * async.retry(3, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 3 times, waiting 200 ms between each retry + * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 10 times with exponential backoff + * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) + * async.retry({ + * times: 10, + * interval: function(retryCount) { + * return 50 * Math.pow(2, retryCount); + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod the default 5 times no delay between each retry + * async.retry(apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod only when error condition satisfies, all other + * // errors will abort the retry control flow and return to final callback + * async.retry({ + * errorFilter: function(err) { + * return err.message === 'Temporary error'; // only retry on a specific error + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // to retry individual methods that are not as reliable within other + * // control flow functions, use the `retryable` wrapper: + * async.auto({ + * users: api.getUsers.bind(api), + * payments: async.retryable(3, api.getPayments.bind(api)) + * }, function(err, results) { + * // do something with the results + * }); + * + */ +const DEFAULT_TIMES = 5; +const DEFAULT_INTERVAL = 0; + +function retry(opts, task, callback) { + var options = { + times: DEFAULT_TIMES, + intervalFunc: constant(DEFAULT_INTERVAL) + }; + + if (arguments.length < 3 && typeof opts === 'function') { + callback = task || promiseCallback(); + task = opts; + } else { + parseTimes(options, opts); + callback = callback || promiseCallback(); + } + + if (typeof task !== 'function') { + throw new Error("Invalid arguments for async.retry"); + } + + var _task = wrapAsync(task); + + var attempt = 1; + function retryAttempt() { + _task((err, ...args) => { + if (err === false) return + if (err && attempt++ < options.times && + (typeof options.errorFilter != 'function' || + options.errorFilter(err))) { + setTimeout(retryAttempt, options.intervalFunc(attempt - 1)); + } else { + callback(err, ...args); + } + }); + } + + retryAttempt(); + return callback[PROMISE_SYMBOL] +} + +function parseTimes(acc, t) { + if (typeof t === 'object') { + acc.times = +t.times || DEFAULT_TIMES; + + acc.intervalFunc = typeof t.interval === 'function' ? + t.interval : + constant(+t.interval || DEFAULT_INTERVAL); + + acc.errorFilter = t.errorFilter; + } else if (typeof t === 'number' || typeof t === 'string') { + acc.times = +t || DEFAULT_TIMES; + } else { + throw new Error("Invalid arguments for async.retry"); + } +} + +/** + * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method + * wraps a task and makes it retryable, rather than immediately calling it + * with retries. + * + * @name retryable + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.retry]{@link module:ControlFlow.retry} + * @category Control Flow + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional + * options, exactly the same as from `retry`, except for a `opts.arity` that + * is the arity of the `task` function, defaulting to `task.length` + * @param {AsyncFunction} task - the asynchronous function to wrap. + * This function will be passed any arguments passed to the returned wrapper. + * Invoked with (...args, callback). + * @returns {AsyncFunction} The wrapped function, which when invoked, will + * retry on an error, based on the parameters specified in `opts`. + * This function will accept the same parameters as `task`. + * @example + * + * async.auto({ + * dep1: async.retryable(3, getFromFlakyService), + * process: ["dep1", async.retryable(3, function (results, cb) { + * maybeProcessData(results.dep1, cb); + * })] + * }, callback); + */ +function retryable (opts, task) { + if (!task) { + task = opts; + opts = null; + } + let arity = (opts && opts.arity) || task.length; + if (isAsync(task)) { + arity += 1; + } + var _task = wrapAsync(task); + return initialParams((args, callback) => { + if (args.length < arity - 1 || callback == null) { + args.push(callback); + callback = promiseCallback(); + } + function taskFn(cb) { + _task(...args, cb); + } + + if (opts) retry(opts, taskFn, callback); + else retry(taskFn, callback); + + return callback[PROMISE_SYMBOL] + }); +} + +/** + * Run the functions in the `tasks` collection in series, each one running once + * the previous function has completed. If any functions in the series pass an + * error to its callback, no more functions are run, and `callback` is + * immediately called with the value of the error. Otherwise, `callback` + * receives an array of results when `tasks` have completed. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function, and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.series}. + * + * **Note** that while many implementations preserve the order of object + * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) + * explicitly states that + * + * > The mechanics and order of enumerating the properties is not specified. + * + * So if you rely on the order in which your series of functions are executed, + * and want this to work on all platforms, consider using an array. + * + * @name series + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing + * [async functions]{@link AsyncFunction} to run in series. + * Each function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This function gets a results array (or object) + * containing all the result arguments passed to the `task` callbacks. Invoked + * with (err, result). + * @return {Promise} a promise, if no callback is passed + * @example + * + * //Using Callbacks + * async.series([ + * function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 'two'); + * }, 100); + * } + * ], function(err, results) { + * console.log(results); + * // results is equal to ['one','two'] + * }); + * + * // an example using objects instead of arrays + * async.series({ + * one: function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }); + * + * //Using Promises + * async.series([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]).then(results => { + * console.log(results); + * // results is equal to ['one','two'] + * }).catch(err => { + * console.log(err); + * }); + * + * // an example using an object instead of an array + * async.series({ + * one: function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 2); + * }, 100); + * } + * }).then(results => { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }).catch(err => { + * console.log(err); + * }); + * + * //Using async/await + * async () => { + * try { + * let results = await async.series([ + * function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 'two'); + * }, 100); + * } + * ]); + * console.log(results); + * // results is equal to ['one','two'] + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // an example using an object instead of an array + * async () => { + * try { + * let results = await async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 2); + * }, 100); + * } + * }); + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function series(tasks, callback) { + return _parallel(eachOfSeries$1, tasks, callback); +} + +/** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // true + * // result is true since some file in the list exists + * } + *); + * + * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // false + * // result is false since none of the files exists + * } + *); + * + * // Using Promises + * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists) + * .then( result => { + * console.log(result); + * // true + * // result is true since some file in the list exists + * }).catch( err => { + * console.log(err); + * }); + * + * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists) + * .then( result => { + * console.log(result); + * // false + * // result is false since none of the files exists + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists); + * console.log(result); + * // true + * // result is true since some file in the list exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + * async () => { + * try { + * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists); + * console.log(result); + * // false + * // result is false since none of the files exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function some(coll, iteratee, callback) { + return _createTester(Boolean, res => res)(eachOf$1, coll, iteratee, callback) +} +var some$1 = awaitify(some, 3); + +/** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function someLimit(coll, limit, iteratee, callback) { + return _createTester(Boolean, res => res)(eachOfLimit$2(limit), coll, iteratee, callback) +} +var someLimit$1 = awaitify(someLimit, 4); + +/** + * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. + * + * @name someSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anySeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in series. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function someSeries(coll, iteratee, callback) { + return _createTester(Boolean, res => res)(eachOfSeries$1, coll, iteratee, callback) +} +var someSeries$1 = awaitify(someSeries, 3); + +/** + * Sorts a list by the results of running each `coll` value through an async + * `iteratee`. + * + * @name sortBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a value to use as the sort criteria as + * its `result`. + * Invoked with (item, callback). + * @param {Function} callback - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is the items + * from the original `coll` sorted by the values returned by the `iteratee` + * calls. Invoked with (err, results). + * @returns {Promise} a promise, if no callback passed + * @example + * + * // bigfile.txt is a file that is 251100 bytes in size + * // mediumfile.txt is a file that is 11000 bytes in size + * // smallfile.txt is a file that is 121 bytes in size + * + * // asynchronous function that returns the file size in bytes + * function getFileSizeInBytes(file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, stat.size); + * }); + * } + * + * // Using callbacks + * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes, + * function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * } + * } + * ); + * + * // By modifying the callback parameter the + * // sorting order can be influenced: + * + * // ascending order + * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) { + * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) { + * if (getFileSizeErr) return callback(getFileSizeErr); + * callback(null, fileSize); + * }); + * }, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * } + * } + * ); + * + * // descending order + * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) { + * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) { + * if (getFileSizeErr) { + * return callback(getFileSizeErr); + * } + * callback(null, fileSize * -1); + * }); + * }, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt'] + * } + * } + * ); + * + * // Error handling + * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes, + * function(err, results) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(results); + * } + * } + * ); + * + * // Using Promises + * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes) + * .then( results => { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * }).catch( err => { + * console.log(err); + * }); + * + * // Error handling + * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes) + * .then( results => { + * console.log(results); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * (async () => { + * try { + * let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes); + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * } + * catch (err) { + * console.log(err); + * } + * })(); + * + * // Error handling + * async () => { + * try { + * let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes); + * console.log(results); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function sortBy (coll, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + return map$1(coll, (x, iterCb) => { + _iteratee(x, (err, criteria) => { + if (err) return iterCb(err); + iterCb(err, {value: x, criteria}); + }); + }, (err, results) => { + if (err) return callback(err); + callback(null, results.sort(comparator).map(v => v.value)); + }); + + function comparator(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } +} +var sortBy$1 = awaitify(sortBy, 3); + +/** + * Sets a time limit on an asynchronous function. If the function does not call + * its callback within the specified milliseconds, it will be called with a + * timeout error. The code property for the error object will be `'ETIMEDOUT'`. + * + * @name timeout + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} asyncFn - The async function to limit in time. + * @param {number} milliseconds - The specified time limit. + * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) + * to timeout Error for more information.. + * @returns {AsyncFunction} Returns a wrapped function that can be used with any + * of the control flow functions. + * Invoke this function with the same parameters as you would `asyncFunc`. + * @example + * + * function myFunction(foo, callback) { + * doAsyncTask(foo, function(err, data) { + * // handle errors + * if (err) return callback(err); + * + * // do some stuff ... + * + * // return processed data + * return callback(null, data); + * }); + * } + * + * var wrapped = async.timeout(myFunction, 1000); + * + * // call `wrapped` as you would `myFunction` + * wrapped({ bar: 'bar' }, function(err, data) { + * // if `myFunction` takes < 1000 ms to execute, `err` + * // and `data` will have their expected values + * + * // else `err` will be an Error with the code 'ETIMEDOUT' + * }); + */ +function timeout(asyncFn, milliseconds, info) { + var fn = wrapAsync(asyncFn); + + return initialParams((args, callback) => { + var timedOut = false; + var timer; + + function timeoutCallback() { + var name = asyncFn.name || 'anonymous'; + var error = new Error('Callback function "' + name + '" timed out.'); + error.code = 'ETIMEDOUT'; + if (info) { + error.info = info; + } + timedOut = true; + callback(error); + } + + args.push((...cbArgs) => { + if (!timedOut) { + callback(...cbArgs); + clearTimeout(timer); + } + }); + + // setup timer and call original function + timer = setTimeout(timeoutCallback, milliseconds); + fn(...args); + }); +} + +function range(size) { + var result = Array(size); + while (size--) { + result[size] = size; + } + return result; +} + +/** + * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a + * time. + * + * @name timesLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} count - The number of times to run the function. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see [async.map]{@link module:Collections.map}. + * @returns {Promise} a promise, if no callback is provided + */ +function timesLimit(count, limit, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + return mapLimit$1(range(count), limit, _iteratee, callback); +} + +/** + * Calls the `iteratee` function `n` times, and accumulates results in the same + * manner you would use with [map]{@link module:Collections.map}. + * + * @name times + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.map]{@link module:Collections.map} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @returns {Promise} a promise, if no callback is provided + * @example + * + * // Pretend this is some complicated async factory + * var createUser = function(id, callback) { + * callback(null, { + * id: 'user' + id + * }); + * }; + * + * // generate 5 users + * async.times(5, function(n, next) { + * createUser(n, function(err, user) { + * next(err, user); + * }); + * }, function(err, users) { + * // we should now have 5 users + * }); + */ +function times (n, iteratee, callback) { + return timesLimit(n, Infinity, iteratee, callback) +} + +/** + * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time. + * + * @name timesSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @returns {Promise} a promise, if no callback is provided + */ +function timesSeries (n, iteratee, callback) { + return timesLimit(n, 1, iteratee, callback) +} + +/** + * A relative of `reduce`. Takes an Object or Array, and iterates over each + * element in parallel, each step potentially mutating an `accumulator` value. + * The type of the accumulator defaults to the type of collection passed in. + * + * @name transform + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {*} [accumulator] - The initial state of the transform. If omitted, + * it will default to an empty Object or Array, depending on the type of `coll` + * @param {AsyncFunction} iteratee - A function applied to each item in the + * collection that potentially modifies the accumulator. + * Invoked with (accumulator, item, key, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the transformed accumulator. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * + * // helper function that returns human-readable size format from bytes + * function formatBytes(bytes, decimals = 2) { + * // implementation not included for brevity + * return humanReadbleFilesize; + * } + * + * const fileList = ['file1.txt','file2.txt','file3.txt']; + * + * // asynchronous function that returns the file size, transformed to human-readable format + * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc. + * function transformFileSize(acc, value, key, callback) { + * fs.stat(value, function(err, stat) { + * if (err) { + * return callback(err); + * } + * acc[key] = formatBytes(stat.size); + * callback(null); + * }); + * } + * + * // Using callbacks + * async.transform(fileList, transformFileSize, function(err, result) { + * if(err) { + * console.log(err); + * } else { + * console.log(result); + * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ] + * } + * }); + * + * // Using Promises + * async.transform(fileList, transformFileSize) + * .then(result => { + * console.log(result); + * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ] + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * (async () => { + * try { + * let result = await async.transform(fileList, transformFileSize); + * console.log(result); + * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ] + * } + * catch (err) { + * console.log(err); + * } + * })(); + * + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * + * // helper function that returns human-readable size format from bytes + * function formatBytes(bytes, decimals = 2) { + * // implementation not included for brevity + * return humanReadbleFilesize; + * } + * + * const fileMap = { f1: 'file1.txt', f2: 'file2.txt', f3: 'file3.txt' }; + * + * // asynchronous function that returns the file size, transformed to human-readable format + * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc. + * function transformFileSize(acc, value, key, callback) { + * fs.stat(value, function(err, stat) { + * if (err) { + * return callback(err); + * } + * acc[key] = formatBytes(stat.size); + * callback(null); + * }); + * } + * + * // Using callbacks + * async.transform(fileMap, transformFileSize, function(err, result) { + * if(err) { + * console.log(err); + * } else { + * console.log(result); + * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' } + * } + * }); + * + * // Using Promises + * async.transform(fileMap, transformFileSize) + * .then(result => { + * console.log(result); + * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' } + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.transform(fileMap, transformFileSize); + * console.log(result); + * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function transform (coll, accumulator, iteratee, callback) { + if (arguments.length <= 3 && typeof accumulator === 'function') { + callback = iteratee; + iteratee = accumulator; + accumulator = Array.isArray(coll) ? [] : {}; + } + callback = once(callback || promiseCallback()); + var _iteratee = wrapAsync(iteratee); + + eachOf$1(coll, (v, k, cb) => { + _iteratee(accumulator, v, k, cb); + }, err => callback(err, accumulator)); + return callback[PROMISE_SYMBOL] +} + +/** + * It runs each task in series but stops whenever any of the functions were + * successful. If one of the tasks were successful, the `callback` will be + * passed the result of the successful task. If all tasks fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name tryEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to + * run, each function is passed a `callback(err, result)` it must call on + * completion with an error `err` (which can be `null`) and an optional `result` + * value. + * @param {Function} [callback] - An optional callback which is called when one + * of the tasks has succeeded, or all have failed. It receives the `err` and + * `result` arguments of the last attempt at completing the `task`. Invoked with + * (err, results). + * @returns {Promise} a promise, if no callback is passed + * @example + * async.tryEach([ + * function getDataFromFirstWebsite(callback) { + * // Try getting the data from the first website + * callback(err, data); + * }, + * function getDataFromSecondWebsite(callback) { + * // First website failed, + * // Try getting the data from the backup website + * callback(err, data); + * } + * ], + * // optional callback + * function(err, results) { + * Now do something with the data. + * }); + * + */ +function tryEach(tasks, callback) { + var error = null; + var result; + return eachSeries$1(tasks, (task, taskCb) => { + wrapAsync(task)((err, ...args) => { + if (err === false) return taskCb(err); + + if (args.length < 2) { + [result] = args; + } else { + result = args; + } + error = err; + taskCb(err ? null : {}); + }); + }, () => callback(error, result)); +} + +var tryEach$1 = awaitify(tryEach); + +/** + * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original, + * unmemoized form. Handy for testing. + * + * @name unmemoize + * @static + * @memberOf module:Utils + * @method + * @see [async.memoize]{@link module:Utils.memoize} + * @category Util + * @param {AsyncFunction} fn - the memoized function + * @returns {AsyncFunction} a function that calls the original unmemoized function + */ +function unmemoize(fn) { + return (...args) => { + return (fn.unmemoized || fn)(...args); + }; +} + +/** + * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. + * + * @name whilst + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `iteratee`. Invoked with (callback). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + * @example + * + * var count = 0; + * async.whilst( + * function test(cb) { cb(null, count < 5); }, + * function iter(callback) { + * count++; + * setTimeout(function() { + * callback(null, count); + * }, 1000); + * }, + * function (err, n) { + * // 5 seconds have passed, n = 5 + * } + * ); + */ +function whilst(test, iteratee, callback) { + callback = onlyOnce(callback); + var _fn = wrapAsync(iteratee); + var _test = wrapAsync(test); + var results = []; + + function next(err, ...rest) { + if (err) return callback(err); + results = rest; + if (err === false) return; + _test(check); + } + + function check(err, truth) { + if (err) return callback(err); + if (err === false) return; + if (!truth) return callback(null, ...results); + _fn(next); + } + + return _test(check); +} +var whilst$1 = awaitify(whilst, 3); + +/** + * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. `callback` will be passed an error and any + * arguments passed to the final `iteratee`'s callback. + * + * The inverse of [whilst]{@link module:ControlFlow.whilst}. + * + * @name until + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `iteratee`. Invoked with (callback). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if a callback is not passed + * + * @example + * const results = [] + * let finished = false + * async.until(function test(cb) { + * cb(null, finished) + * }, function iter(next) { + * fetchPage(url, (err, body) => { + * if (err) return next(err) + * results = results.concat(body.objects) + * finished = !!body.next + * next(err) + * }) + * }, function done (err) { + * // all pages have been fetched + * }) + */ +function until(test, iteratee, callback) { + const _test = wrapAsync(test); + return whilst$1((cb) => _test((err, truth) => cb (err, !truth)), iteratee, callback); +} + +/** + * Runs the `tasks` array of functions in series, each passing their results to + * the next in the array. However, if any of the `tasks` pass an error to their + * own callback, the next function is not executed, and the main `callback` is + * immediately called with the error. + * + * @name waterfall + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array of [async functions]{@link AsyncFunction} + * to run. + * Each function should complete with any number of `result` values. + * The `result` values will be passed as arguments, in order, to the next task. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This will be passed the results of the last task's + * callback. Invoked with (err, [results]). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * async.waterfall([ + * function(callback) { + * callback(null, 'one', 'two'); + * }, + * function(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * }, + * function(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + * ], function (err, result) { + * // result now equals 'done' + * }); + * + * // Or, with named functions: + * async.waterfall([ + * myFirstFunction, + * mySecondFunction, + * myLastFunction, + * ], function (err, result) { + * // result now equals 'done' + * }); + * function myFirstFunction(callback) { + * callback(null, 'one', 'two'); + * } + * function mySecondFunction(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * } + * function myLastFunction(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + */ +function waterfall (tasks, callback) { + callback = once(callback); + if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions')); + if (!tasks.length) return callback(); + var taskIndex = 0; + + function nextTask(args) { + var task = wrapAsync(tasks[taskIndex++]); + task(...args, onlyOnce(next)); + } + + function next(err, ...args) { + if (err === false) return + if (err || taskIndex === tasks.length) { + return callback(err, ...args); + } + nextTask(args); + } + + nextTask([]); +} + +var waterfall$1 = awaitify(waterfall); + +/** + * An "async function" in the context of Async is an asynchronous function with + * a variable number of parameters, with the final parameter being a callback. + * (`function (arg1, arg2, ..., callback) {}`) + * The final callback is of the form `callback(err, results...)`, which must be + * called once the function is completed. The callback should be called with a + * Error as its first argument to signal that an error occurred. + * Otherwise, if no error occurred, it should be called with `null` as the first + * argument, and any additional `result` arguments that may apply, to signal + * successful completion. + * The callback must be called exactly once, ideally on a later tick of the + * JavaScript event loop. + * + * This type of function is also referred to as a "Node-style async function", + * or a "continuation passing-style function" (CPS). Most of the methods of this + * library are themselves CPS/Node-style async functions, or functions that + * return CPS/Node-style async functions. + * + * Wherever we accept a Node-style async function, we also directly accept an + * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. + * In this case, the `async` function will not be passed a final callback + * argument, and any thrown error will be used as the `err` argument of the + * implicit callback, and the return value will be used as the `result` value. + * (i.e. a `rejected` of the returned Promise becomes the `err` callback + * argument, and a `resolved` value becomes the `result`.) + * + * Note, due to JavaScript limitations, we can only detect native `async` + * functions and not transpilied implementations. + * Your environment must have `async`/`await` support for this to work. + * (e.g. Node > v7.6, or a recent version of a modern browser). + * If you are using `async` functions through a transpiler (e.g. Babel), you + * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, + * because the `async function` will be compiled to an ordinary function that + * returns a promise. + * + * @typedef {Function} AsyncFunction + * @static + */ + + +var index = { + apply, + applyEach, + applyEachSeries, + asyncify, + auto, + autoInject, + cargo: cargo$1, + cargoQueue: cargo, + compose, + concat: concat$1, + concatLimit: concatLimit$1, + concatSeries: concatSeries$1, + constant: constant$1, + detect: detect$1, + detectLimit: detectLimit$1, + detectSeries: detectSeries$1, + dir, + doUntil, + doWhilst: doWhilst$1, + each, + eachLimit: eachLimit$1, + eachOf: eachOf$1, + eachOfLimit: eachOfLimit$1, + eachOfSeries: eachOfSeries$1, + eachSeries: eachSeries$1, + ensureAsync, + every: every$1, + everyLimit: everyLimit$1, + everySeries: everySeries$1, + filter: filter$1, + filterLimit: filterLimit$1, + filterSeries: filterSeries$1, + forever: forever$1, + groupBy, + groupByLimit: groupByLimit$1, + groupBySeries, + log, + map: map$1, + mapLimit: mapLimit$1, + mapSeries: mapSeries$1, + mapValues, + mapValuesLimit: mapValuesLimit$1, + mapValuesSeries, + memoize, + nextTick, + parallel, + parallelLimit, + priorityQueue, + queue, + race: race$1, + reduce: reduce$1, + reduceRight, + reflect, + reflectAll, + reject: reject$1, + rejectLimit: rejectLimit$1, + rejectSeries: rejectSeries$1, + retry, + retryable, + seq, + series, + setImmediate: setImmediate$1, + some: some$1, + someLimit: someLimit$1, + someSeries: someSeries$1, + sortBy: sortBy$1, + timeout, + times, + timesLimit, + timesSeries, + transform, + tryEach: tryEach$1, + unmemoize, + until, + waterfall: waterfall$1, + whilst: whilst$1, + + // aliases + all: every$1, + allLimit: everyLimit$1, + allSeries: everySeries$1, + any: some$1, + anyLimit: someLimit$1, + anySeries: someSeries$1, + find: detect$1, + findLimit: detectLimit$1, + findSeries: detectSeries$1, + flatMap: concat$1, + flatMapLimit: concatLimit$1, + flatMapSeries: concatSeries$1, + forEach: each, + forEachSeries: eachSeries$1, + forEachLimit: eachLimit$1, + forEachOf: eachOf$1, + forEachOfSeries: eachOfSeries$1, + forEachOfLimit: eachOfLimit$1, + inject: reduce$1, + foldl: reduce$1, + foldr: reduceRight, + select: filter$1, + selectLimit: filterLimit$1, + selectSeries: filterSeries$1, + wrapSync: asyncify, + during: whilst$1, + doDuring: doWhilst$1 +}; + +export { every$1 as all, everyLimit$1 as allLimit, everySeries$1 as allSeries, some$1 as any, someLimit$1 as anyLimit, someSeries$1 as anySeries, apply, applyEach, applyEachSeries, asyncify, auto, autoInject, cargo$1 as cargo, cargo as cargoQueue, compose, concat$1 as concat, concatLimit$1 as concatLimit, concatSeries$1 as concatSeries, constant$1 as constant, index as default, detect$1 as detect, detectLimit$1 as detectLimit, detectSeries$1 as detectSeries, dir, doWhilst$1 as doDuring, doUntil, doWhilst$1 as doWhilst, whilst$1 as during, each, eachLimit$1 as eachLimit, eachOf$1 as eachOf, eachOfLimit$1 as eachOfLimit, eachOfSeries$1 as eachOfSeries, eachSeries$1 as eachSeries, ensureAsync, every$1 as every, everyLimit$1 as everyLimit, everySeries$1 as everySeries, filter$1 as filter, filterLimit$1 as filterLimit, filterSeries$1 as filterSeries, detect$1 as find, detectLimit$1 as findLimit, detectSeries$1 as findSeries, concat$1 as flatMap, concatLimit$1 as flatMapLimit, concatSeries$1 as flatMapSeries, reduce$1 as foldl, reduceRight as foldr, each as forEach, eachLimit$1 as forEachLimit, eachOf$1 as forEachOf, eachOfLimit$1 as forEachOfLimit, eachOfSeries$1 as forEachOfSeries, eachSeries$1 as forEachSeries, forever$1 as forever, groupBy, groupByLimit$1 as groupByLimit, groupBySeries, reduce$1 as inject, log, map$1 as map, mapLimit$1 as mapLimit, mapSeries$1 as mapSeries, mapValues, mapValuesLimit$1 as mapValuesLimit, mapValuesSeries, memoize, nextTick, parallel, parallelLimit, priorityQueue, queue, race$1 as race, reduce$1 as reduce, reduceRight, reflect, reflectAll, reject$1 as reject, rejectLimit$1 as rejectLimit, rejectSeries$1 as rejectSeries, retry, retryable, filter$1 as select, filterLimit$1 as selectLimit, filterSeries$1 as selectSeries, seq, series, setImmediate$1 as setImmediate, some$1 as some, someLimit$1 as someLimit, someSeries$1 as someSeries, sortBy$1 as sortBy, timeout, times, timesLimit, timesSeries, transform, tryEach$1 as tryEach, unmemoize, until, waterfall$1 as waterfall, whilst$1 as whilst, asyncify as wrapSync }; diff --git a/node_backend/node_modules/async/doDuring.js b/node_backend/node_modules/async/doDuring.js new file mode 100644 index 0000000000000000000000000000000000000000..c72766d0aa71eda780651a75368fddfcb9bfbfd1 --- /dev/null +++ b/node_backend/node_modules/async/doDuring.js @@ -0,0 +1,68 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _onlyOnce = require('./internal/onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in + * the order of operations, the arguments `test` and `iteratee` are switched. + * + * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + * + * @name doWhilst + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - A function which is called each time `test` + * passes. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform after each + * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. + * `callback` will be passed an error and any arguments passed to the final + * `iteratee`'s callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + */ +function doWhilst(iteratee, test, callback) { + callback = (0, _onlyOnce2.default)(callback); + var _fn = (0, _wrapAsync2.default)(iteratee); + var _test = (0, _wrapAsync2.default)(test); + var results; + + function next(err, ...args) { + if (err) return callback(err); + if (err === false) return; + results = args; + _test(...args, check); + } + + function check(err, truth) { + if (err) return callback(err); + if (err === false) return; + if (!truth) return callback(null, ...results); + _fn(next); + } + + return check(null, true); +} + +exports.default = (0, _awaitify2.default)(doWhilst, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/doUntil.js b/node_backend/node_modules/async/doUntil.js new file mode 100644 index 0000000000000000000000000000000000000000..519900ee9971e4b30ffcd42ebb31785e6cad219c --- /dev/null +++ b/node_backend/node_modules/async/doUntil.js @@ -0,0 +1,46 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doUntil; + +var _doWhilst = require('./doWhilst.js'); + +var _doWhilst2 = _interopRequireDefault(_doWhilst); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the + * argument ordering differs from `until`. + * + * @name doUntil + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.doWhilst]{@link module:ControlFlow.doWhilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform after each + * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `iteratee` + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + */ +function doUntil(iteratee, test, callback) { + const _test = (0, _wrapAsync2.default)(test); + return (0, _doWhilst2.default)(iteratee, (...args) => { + const cb = args.pop(); + _test(...args, (err, truth) => cb(err, !truth)); + }, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/doWhilst.js b/node_backend/node_modules/async/doWhilst.js new file mode 100644 index 0000000000000000000000000000000000000000..c72766d0aa71eda780651a75368fddfcb9bfbfd1 --- /dev/null +++ b/node_backend/node_modules/async/doWhilst.js @@ -0,0 +1,68 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _onlyOnce = require('./internal/onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in + * the order of operations, the arguments `test` and `iteratee` are switched. + * + * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + * + * @name doWhilst + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - A function which is called each time `test` + * passes. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform after each + * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. + * `callback` will be passed an error and any arguments passed to the final + * `iteratee`'s callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + */ +function doWhilst(iteratee, test, callback) { + callback = (0, _onlyOnce2.default)(callback); + var _fn = (0, _wrapAsync2.default)(iteratee); + var _test = (0, _wrapAsync2.default)(test); + var results; + + function next(err, ...args) { + if (err) return callback(err); + if (err === false) return; + results = args; + _test(...args, check); + } + + function check(err, truth) { + if (err) return callback(err); + if (err === false) return; + if (!truth) return callback(null, ...results); + _fn(next); + } + + return check(null, true); +} + +exports.default = (0, _awaitify2.default)(doWhilst, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/during.js b/node_backend/node_modules/async/during.js new file mode 100644 index 0000000000000000000000000000000000000000..4165543f818028d988dc57f051ab2a476f42abf9 --- /dev/null +++ b/node_backend/node_modules/async/during.js @@ -0,0 +1,78 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _onlyOnce = require('./internal/onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. + * + * @name whilst + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `iteratee`. Invoked with (callback). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + * @example + * + * var count = 0; + * async.whilst( + * function test(cb) { cb(null, count < 5); }, + * function iter(callback) { + * count++; + * setTimeout(function() { + * callback(null, count); + * }, 1000); + * }, + * function (err, n) { + * // 5 seconds have passed, n = 5 + * } + * ); + */ +function whilst(test, iteratee, callback) { + callback = (0, _onlyOnce2.default)(callback); + var _fn = (0, _wrapAsync2.default)(iteratee); + var _test = (0, _wrapAsync2.default)(test); + var results = []; + + function next(err, ...rest) { + if (err) return callback(err); + results = rest; + if (err === false) return; + _test(check); + } + + function check(err, truth) { + if (err) return callback(err); + if (err === false) return; + if (!truth) return callback(null, ...results); + _fn(next); + } + + return _test(check); +} +exports.default = (0, _awaitify2.default)(whilst, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/each.js b/node_backend/node_modules/async/each.js new file mode 100644 index 0000000000000000000000000000000000000000..fdfcbd882196dccf29b87a410f51070310723c16 --- /dev/null +++ b/node_backend/node_modules/async/each.js @@ -0,0 +1,129 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _withoutIndex = require('./internal/withoutIndex.js'); + +var _withoutIndex2 = _interopRequireDefault(_withoutIndex); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Applies the function `iteratee` to each item in `coll`, in parallel. + * The `iteratee` is called with an item from the list, and a callback for when + * it has finished. If the `iteratee` passes an error to its `callback`, the + * main `callback` (for the `each` function) is immediately called with the + * error. + * + * Note, that since this function applies `iteratee` to each item in parallel, + * there is no guarantee that the iteratee functions will complete in order. + * + * @name each + * @static + * @memberOf module:Collections + * @method + * @alias forEach + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to + * each item in `coll`. Invoked with (item, callback). + * The array index is not passed to the iteratee. + * If you need the index, use `eachOf`. + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt']; + * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt']; + * + * // asynchronous function that deletes a file + * const deleteFile = function(file, callback) { + * fs.unlink(file, callback); + * }; + * + * // Using callbacks + * async.each(fileList, deleteFile, function(err) { + * if( err ) { + * console.log(err); + * } else { + * console.log('All files have been deleted successfully'); + * } + * }); + * + * // Error Handling + * async.each(withMissingFileList, deleteFile, function(err){ + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * }); + * + * // Using Promises + * async.each(fileList, deleteFile) + * .then( () => { + * console.log('All files have been deleted successfully'); + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.each(fileList, deleteFile) + * .then( () => { + * console.log('All files have been deleted successfully'); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * }); + * + * // Using async/await + * async () => { + * try { + * await async.each(files, deleteFile); + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * await async.each(withMissingFileList, deleteFile); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * } + * } + * + */ +function eachLimit(coll, iteratee, callback) { + return (0, _eachOf2.default)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} + +exports.default = (0, _awaitify2.default)(eachLimit, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/eachLimit.js b/node_backend/node_modules/async/eachLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..7f5928c615590a0f0ee25229b107a87df10533e5 --- /dev/null +++ b/node_backend/node_modules/async/eachLimit.js @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _withoutIndex = require('./internal/withoutIndex.js'); + +var _withoutIndex2 = _interopRequireDefault(_withoutIndex); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachLimit(coll, limit, iteratee, callback) { + return (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} +exports.default = (0, _awaitify2.default)(eachLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/eachOf.js b/node_backend/node_modules/async/eachOf.js new file mode 100644 index 0000000000000000000000000000000000000000..9ed20f669fcbe47bebc859d077ebab6c92e3309c --- /dev/null +++ b/node_backend/node_modules/async/eachOf.js @@ -0,0 +1,185 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _isArrayLike = require('./internal/isArrayLike.js'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _breakLoop = require('./internal/breakLoop.js'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +var _eachOfLimit = require('./eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _onlyOnce = require('./internal/onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// eachOf implementation optimized for array-likes +function eachOfArrayLike(coll, iteratee, callback) { + callback = (0, _once2.default)(callback); + var index = 0, + completed = 0, + { length } = coll, + canceled = false; + if (length === 0) { + callback(null); + } + + function iteratorCallback(err, value) { + if (err === false) { + canceled = true; + } + if (canceled === true) return; + if (err) { + callback(err); + } else if (++completed === length || value === _breakLoop2.default) { + callback(null); + } + } + + for (; index < length; index++) { + iteratee(coll[index], index, (0, _onlyOnce2.default)(iteratorCallback)); + } +} + +// a generic version of eachOf which can handle array, object, and iterator cases. +function eachOfGeneric(coll, iteratee, callback) { + return (0, _eachOfLimit2.default)(coll, Infinity, iteratee, callback); +} + +/** + * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument + * to the iteratee. + * + * @name eachOf + * @static + * @memberOf module:Collections + * @method + * @alias forEachOf + * @category Collection + * @see [async.each]{@link module:Collections.each} + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each + * item in `coll`. + * The `key` is the item's key, or index in the case of an array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dev.json is a file containing a valid json object config for dev environment + * // dev.json is a file containing a valid json object config for test environment + * // prod.json is a file containing a valid json object config for prod environment + * // invalid.json is a file with a malformed json object + * + * let configs = {}; //global variable + * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'}; + * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'}; + * + * // asynchronous function that reads a json file and parses the contents as json object + * function parseFile(file, key, callback) { + * fs.readFile(file, "utf8", function(err, data) { + * if (err) return calback(err); + * try { + * configs[key] = JSON.parse(data); + * } catch (e) { + * return callback(e); + * } + * callback(); + * }); + * } + * + * // Using callbacks + * async.forEachOf(validConfigFileMap, parseFile, function (err) { + * if (err) { + * console.error(err); + * } else { + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * } + * }); + * + * //Error handing + * async.forEachOf(invalidConfigFileMap, parseFile, function (err) { + * if (err) { + * console.error(err); + * // JSON parse error exception + * } else { + * console.log(configs); + * } + * }); + * + * // Using Promises + * async.forEachOf(validConfigFileMap, parseFile) + * .then( () => { + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * }).catch( err => { + * console.error(err); + * }); + * + * //Error handing + * async.forEachOf(invalidConfigFileMap, parseFile) + * .then( () => { + * console.log(configs); + * }).catch( err => { + * console.error(err); + * // JSON parse error exception + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.forEachOf(validConfigFileMap, parseFile); + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * } + * catch (err) { + * console.log(err); + * } + * } + * + * //Error handing + * async () => { + * try { + * let result = await async.forEachOf(invalidConfigFileMap, parseFile); + * console.log(configs); + * } + * catch (err) { + * console.log(err); + * // JSON parse error exception + * } + * } + * + */ +function eachOf(coll, iteratee, callback) { + var eachOfImplementation = (0, _isArrayLike2.default)(coll) ? eachOfArrayLike : eachOfGeneric; + return eachOfImplementation(coll, (0, _wrapAsync2.default)(iteratee), callback); +} + +exports.default = (0, _awaitify2.default)(eachOf, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/eachOfLimit.js b/node_backend/node_modules/async/eachOfLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..a596e5ac08892d34395d76bfbd1d9f428675243c --- /dev/null +++ b/node_backend/node_modules/async/eachOfLimit.js @@ -0,0 +1,47 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit2 = require('./internal/eachOfLimit.js'); + +var _eachOfLimit3 = _interopRequireDefault(_eachOfLimit2); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a + * time. + * + * @name eachOfLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. The `key` is the item's key, or index in the case of an + * array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachOfLimit(coll, limit, iteratee, callback) { + return (0, _eachOfLimit3.default)(limit)(coll, (0, _wrapAsync2.default)(iteratee), callback); +} + +exports.default = (0, _awaitify2.default)(eachOfLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/eachOfSeries.js b/node_backend/node_modules/async/eachOfSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..04243ada0a45deac56a83f2e4a0755f710094e9b --- /dev/null +++ b/node_backend/node_modules/async/eachOfSeries.js @@ -0,0 +1,39 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit = require('./eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time. + * + * @name eachOfSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachOfSeries(coll, iteratee, callback) { + return (0, _eachOfLimit2.default)(coll, 1, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(eachOfSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/eachSeries.js b/node_backend/node_modules/async/eachSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..b04896e394ee5a2eaaac746c9c0eff805ce08968 --- /dev/null +++ b/node_backend/node_modules/async/eachSeries.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachLimit = require('./eachLimit.js'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item + * in series and therefore the iteratee functions will complete in order. + + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachSeries(coll, iteratee, callback) { + return (0, _eachLimit2.default)(coll, 1, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(eachSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/ensureAsync.js b/node_backend/node_modules/async/ensureAsync.js new file mode 100644 index 0000000000000000000000000000000000000000..749c5dac74d9037ca75128112b5f5b7ebde31bd4 --- /dev/null +++ b/node_backend/node_modules/async/ensureAsync.js @@ -0,0 +1,67 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = ensureAsync; + +var _setImmediate = require('./internal/setImmediate.js'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Wrap an async function and ensure it calls its callback on a later tick of + * the event loop. If the function already calls its callback on a next tick, + * no extra deferral is added. This is useful for preventing stack overflows + * (`RangeError: Maximum call stack size exceeded`) and generally keeping + * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) + * contained. ES2017 `async` functions are returned as-is -- they are immune + * to Zalgo's corrupting influences, as they always resolve on a later tick. + * + * @name ensureAsync + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - an async function, one that expects a node-style + * callback as its last argument. + * @returns {AsyncFunction} Returns a wrapped function with the exact same call + * signature as the function passed in. + * @example + * + * function sometimesAsync(arg, callback) { + * if (cache[arg]) { + * return callback(null, cache[arg]); // this would be synchronous!! + * } else { + * doSomeIO(arg, callback); // this IO would be asynchronous + * } + * } + * + * // this has a risk of stack overflows if many results are cached in a row + * async.mapSeries(args, sometimesAsync, done); + * + * // this will defer sometimesAsync's callback if necessary, + * // preventing stack overflows + * async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + */ +function ensureAsync(fn) { + if ((0, _wrapAsync.isAsync)(fn)) return fn; + return function (...args /*, callback*/) { + var callback = args.pop(); + var sync = true; + args.push((...innerArgs) => { + if (sync) { + (0, _setImmediate2.default)(() => callback(...innerArgs)); + } else { + callback(...innerArgs); + } + }); + fn.apply(this, args); + sync = false; + }; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/every.js b/node_backend/node_modules/async/every.js new file mode 100644 index 0000000000000000000000000000000000000000..622b301941b95c7c756a5f8b98a3116b3a07b908 --- /dev/null +++ b/node_backend/node_modules/async/every.js @@ -0,0 +1,119 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns `true` if every element in `coll` satisfies an async test. If any + * iteratee call returns `false`, the main `callback` is immediately called. + * + * @name every + * @static + * @memberOf module:Collections + * @method + * @alias all + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file4.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.every(fileList, fileExists, function(err, result) { + * console.log(result); + * // true + * // result is true since every file exists + * }); + * + * async.every(withMissingFileList, fileExists, function(err, result) { + * console.log(result); + * // false + * // result is false since NOT every file exists + * }); + * + * // Using Promises + * async.every(fileList, fileExists) + * .then( result => { + * console.log(result); + * // true + * // result is true since every file exists + * }).catch( err => { + * console.log(err); + * }); + * + * async.every(withMissingFileList, fileExists) + * .then( result => { + * console.log(result); + * // false + * // result is false since NOT every file exists + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.every(fileList, fileExists); + * console.log(result); + * // true + * // result is true since every file exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + * async () => { + * try { + * let result = await async.every(withMissingFileList, fileExists); + * console.log(result); + * // false + * // result is false since NOT every file exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function every(coll, iteratee, callback) { + return (0, _createTester2.default)(bool => !bool, res => !res)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(every, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/everyLimit.js b/node_backend/node_modules/async/everyLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..375e126021af6f8f30ebee8fa4e9bd61d5d0be29 --- /dev/null +++ b/node_backend/node_modules/async/everyLimit.js @@ -0,0 +1,46 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. + * + * @name everyLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function everyLimit(coll, limit, iteratee, callback) { + return (0, _createTester2.default)(bool => !bool, res => !res)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(everyLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/everySeries.js b/node_backend/node_modules/async/everySeries.js new file mode 100644 index 0000000000000000000000000000000000000000..9a6bf7d468409fd7bf6c77aba5cb2e79f32e1847 --- /dev/null +++ b/node_backend/node_modules/async/everySeries.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. + * + * @name everySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in series. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function everySeries(coll, iteratee, callback) { + return (0, _createTester2.default)(bool => !bool, res => !res)(_eachOfSeries2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(everySeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/filter.js b/node_backend/node_modules/async/filter.js new file mode 100644 index 0000000000000000000000000000000000000000..2c9a63de5b447820152e40c6be73bd97a0e56964 --- /dev/null +++ b/node_backend/node_modules/async/filter.js @@ -0,0 +1,93 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter2 = require('./internal/filter.js'); + +var _filter3 = _interopRequireDefault(_filter2); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.filter(files, fileExists, function(err, results) { + * if(err) { + * console.log(err); + * } else { + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * } + * }); + * + * // Using Promises + * async.filter(files, fileExists) + * .then(results => { + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.filter(files, fileExists); + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function filter(coll, iteratee, callback) { + return (0, _filter3.default)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(filter, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/filterLimit.js b/node_backend/node_modules/async/filterLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..d3b3f50c61df2797efade248307ee679548fcf3e --- /dev/null +++ b/node_backend/node_modules/async/filterLimit.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter2 = require('./internal/filter.js'); + +var _filter3 = _interopRequireDefault(_filter2); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a + * time. + * + * @name filterLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback provided + */ +function filterLimit(coll, limit, iteratee, callback) { + return (0, _filter3.default)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(filterLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/filterSeries.js b/node_backend/node_modules/async/filterSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..019a2d0a9d50a34760b3d5a5d6f366509e4e381e --- /dev/null +++ b/node_backend/node_modules/async/filterSeries.js @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter2 = require('./internal/filter.js'); + +var _filter3 = _interopRequireDefault(_filter2); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. + * + * @name filterSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results) + * @returns {Promise} a promise, if no callback provided + */ +function filterSeries(coll, iteratee, callback) { + return (0, _filter3.default)(_eachOfSeries2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(filterSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/find.js b/node_backend/node_modules/async/find.js new file mode 100644 index 0000000000000000000000000000000000000000..d5896ef6435296a9abad3e771b05a9b261e018f2 --- /dev/null +++ b/node_backend/node_modules/async/find.js @@ -0,0 +1,96 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns the first value in `coll` that passes an async truth test. The + * `iteratee` is applied in parallel, meaning the first iteratee to return + * `true` will fire the detect `callback` with that result. That means the + * result might not be the first item in the original `coll` (in terms of order) + * that passes the test. + + * If order within the original `coll` is important, then look at + * [`detectSeries`]{@link module:Collections.detectSeries}. + * + * @name detect + * @static + * @memberOf module:Collections + * @method + * @alias find + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // dir1/file1.txt + * // result now equals the first file in the list that exists + * } + *); + * + * // Using Promises + * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists) + * .then(result => { + * console.log(result); + * // dir1/file1.txt + * // result now equals the first file in the list that exists + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists); + * console.log(result); + * // dir1/file1.txt + * // result now equals the file in the list that exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function detect(coll, iteratee, callback) { + return (0, _createTester2.default)(bool => bool, (res, item) => item)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(detect, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/findLimit.js b/node_backend/node_modules/async/findLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..c59843b6211ae6700bad86d4f73645c68b326bf4 --- /dev/null +++ b/node_backend/node_modules/async/findLimit.js @@ -0,0 +1,48 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a + * time. + * + * @name detectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findLimit + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + */ +function detectLimit(coll, limit, iteratee, callback) { + return (0, _createTester2.default)(bool => bool, (res, item) => item)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(detectLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/findSeries.js b/node_backend/node_modules/async/findSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..b48689967577f3d02265ed5053a013569be6d9ab --- /dev/null +++ b/node_backend/node_modules/async/findSeries.js @@ -0,0 +1,47 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time. + * + * @name detectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findSeries + * @category Collections + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @returns {Promise} a promise, if a callback is omitted + */ +function detectSeries(coll, iteratee, callback) { + return (0, _createTester2.default)(bool => bool, (res, item) => item)((0, _eachOfLimit2.default)(1), coll, iteratee, callback); +} + +exports.default = (0, _awaitify2.default)(detectSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/flatMap.js b/node_backend/node_modules/async/flatMap.js new file mode 100644 index 0000000000000000000000000000000000000000..4540a79cffc444d45dcdbde37edb0b65b66d983b --- /dev/null +++ b/node_backend/node_modules/async/flatMap.js @@ -0,0 +1,115 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _concatLimit = require('./concatLimit.js'); + +var _concatLimit2 = _interopRequireDefault(_concatLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Applies `iteratee` to each item in `coll`, concatenating the results. Returns + * the concatenated list. The `iteratee`s are called in parallel, and the + * results are concatenated as they return. The results array will be returned in + * the original order of `coll` passed to the `iteratee` function. + * + * @name concat + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @alias flatMap + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`, + * which should use an array as its result. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * let directoryList = ['dir1','dir2','dir3']; + * let withMissingDirectoryList = ['dir1','dir2','dir3', 'dir4']; + * + * // Using callbacks + * async.concat(directoryList, fs.readdir, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * } + * }); + * + * // Error Handling + * async.concat(withMissingDirectoryList, fs.readdir, function(err, results) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * } else { + * console.log(results); + * } + * }); + * + * // Using Promises + * async.concat(directoryList, fs.readdir) + * .then(results => { + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * }).catch(err => { + * console.log(err); + * }); + * + * // Error Handling + * async.concat(withMissingDirectoryList, fs.readdir) + * .then(results => { + * console.log(results); + * }).catch(err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.concat(directoryList, fs.readdir); + * console.log(results); + * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ] + * } catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let results = await async.concat(withMissingDirectoryList, fs.readdir); + * console.log(results); + * } catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4 does not exist + * } + * } + * + */ +function concat(coll, iteratee, callback) { + return (0, _concatLimit2.default)(coll, Infinity, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(concat, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/flatMapLimit.js b/node_backend/node_modules/async/flatMapLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..a27cc7d45ac5d77a8c275eedd60be2a162cb186c --- /dev/null +++ b/node_backend/node_modules/async/flatMapLimit.js @@ -0,0 +1,60 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _mapLimit = require('./mapLimit.js'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time. + * + * @name concatLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.concat]{@link module:Collections.concat} + * @category Collection + * @alias flatMapLimit + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`, + * which should use an array as its result. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + */ +function concatLimit(coll, limit, iteratee, callback) { + var _iteratee = (0, _wrapAsync2.default)(iteratee); + return (0, _mapLimit2.default)(coll, limit, (val, iterCb) => { + _iteratee(val, (err, ...args) => { + if (err) return iterCb(err); + return iterCb(err, args); + }); + }, (err, mapResults) => { + var result = []; + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + result = result.concat(...mapResults[i]); + } + } + + return callback(err, result); + }); +} +exports.default = (0, _awaitify2.default)(concatLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/flatMapSeries.js b/node_backend/node_modules/async/flatMapSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..332de3f3ec4fbfcc818a867872bfb09a34208659 --- /dev/null +++ b/node_backend/node_modules/async/flatMapSeries.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _concatLimit = require('./concatLimit.js'); + +var _concatLimit2 = _interopRequireDefault(_concatLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time. + * + * @name concatSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.concat]{@link module:Collections.concat} + * @category Collection + * @alias flatMapSeries + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`. + * The iteratee should complete with an array an array of results. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + * @returns A Promise, if no callback is passed + */ +function concatSeries(coll, iteratee, callback) { + return (0, _concatLimit2.default)(coll, 1, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(concatSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/foldl.js b/node_backend/node_modules/async/foldl.js new file mode 100644 index 0000000000000000000000000000000000000000..8a69548a6efd9e974b5281f3bda4e29b1b1a48a2 --- /dev/null +++ b/node_backend/node_modules/async/foldl.js @@ -0,0 +1,153 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Reduces `coll` into a single value using an async `iteratee` to return each + * successive step. `memo` is the initial state of the reduction. This function + * only operates in series. + * + * For performance reasons, it may make sense to split a call to this function + * into a parallel map, and then use the normal `Array.prototype.reduce` on the + * results. This function is for situations where each step in the reduction + * needs to be async; if you can get the data before reducing it, then it's + * probably a good idea to do so. + * + * @name reduce + * @static + * @memberOf module:Collections + * @method + * @alias inject + * @alias foldl + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee completes with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * // file4.txt does not exist + * + * const fileList = ['file1.txt','file2.txt','file3.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file3.txt', 'file4.txt']; + * + * // asynchronous function that computes the file size in bytes + * // file size is added to the memoized value, then returned + * function getFileSizeInBytes(memo, file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, memo + stat.size); + * }); + * } + * + * // Using callbacks + * async.reduce(fileList, 0, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * } else { + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * } + * }); + * + * // Error Handling + * async.reduce(withMissingFileList, 0, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(result); + * } + * }); + * + * // Using Promises + * async.reduce(fileList, 0, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.reduce(withMissingFileList, 0, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.reduce(fileList, 0, getFileSizeInBytes); + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes); + * console.log(result); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function reduce(coll, memo, iteratee, callback) { + callback = (0, _once2.default)(callback); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + return (0, _eachOfSeries2.default)(coll, (x, i, iterCb) => { + _iteratee(memo, x, (err, v) => { + memo = v; + iterCb(err); + }); + }, err => callback(err, memo)); +} +exports.default = (0, _awaitify2.default)(reduce, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/foldr.js b/node_backend/node_modules/async/foldr.js new file mode 100644 index 0000000000000000000000000000000000000000..5be1b68dca537ea15872ba4b2710ad8c36b47a72 --- /dev/null +++ b/node_backend/node_modules/async/foldr.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reduceRight; + +var _reduce = require('./reduce.js'); + +var _reduce2 = _interopRequireDefault(_reduce); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. + * + * @name reduceRight + * @static + * @memberOf module:Collections + * @method + * @see [async.reduce]{@link module:Collections.reduce} + * @alias foldr + * @category Collection + * @param {Array} array - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee completes with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + * @returns {Promise} a promise, if no callback is passed + */ +function reduceRight(array, memo, iteratee, callback) { + var reversed = [...array].reverse(); + return (0, _reduce2.default)(reversed, memo, iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/forEach.js b/node_backend/node_modules/async/forEach.js new file mode 100644 index 0000000000000000000000000000000000000000..fdfcbd882196dccf29b87a410f51070310723c16 --- /dev/null +++ b/node_backend/node_modules/async/forEach.js @@ -0,0 +1,129 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _withoutIndex = require('./internal/withoutIndex.js'); + +var _withoutIndex2 = _interopRequireDefault(_withoutIndex); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Applies the function `iteratee` to each item in `coll`, in parallel. + * The `iteratee` is called with an item from the list, and a callback for when + * it has finished. If the `iteratee` passes an error to its `callback`, the + * main `callback` (for the `each` function) is immediately called with the + * error. + * + * Note, that since this function applies `iteratee` to each item in parallel, + * there is no guarantee that the iteratee functions will complete in order. + * + * @name each + * @static + * @memberOf module:Collections + * @method + * @alias forEach + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to + * each item in `coll`. Invoked with (item, callback). + * The array index is not passed to the iteratee. + * If you need the index, use `eachOf`. + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt']; + * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt']; + * + * // asynchronous function that deletes a file + * const deleteFile = function(file, callback) { + * fs.unlink(file, callback); + * }; + * + * // Using callbacks + * async.each(fileList, deleteFile, function(err) { + * if( err ) { + * console.log(err); + * } else { + * console.log('All files have been deleted successfully'); + * } + * }); + * + * // Error Handling + * async.each(withMissingFileList, deleteFile, function(err){ + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * }); + * + * // Using Promises + * async.each(fileList, deleteFile) + * .then( () => { + * console.log('All files have been deleted successfully'); + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.each(fileList, deleteFile) + * .then( () => { + * console.log('All files have been deleted successfully'); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * }); + * + * // Using async/await + * async () => { + * try { + * await async.each(files, deleteFile); + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * await async.each(withMissingFileList, deleteFile); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * // since dir4/file2.txt does not exist + * // dir1/file1.txt could have been deleted + * } + * } + * + */ +function eachLimit(coll, iteratee, callback) { + return (0, _eachOf2.default)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} + +exports.default = (0, _awaitify2.default)(eachLimit, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/forEachLimit.js b/node_backend/node_modules/async/forEachLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..7f5928c615590a0f0ee25229b107a87df10533e5 --- /dev/null +++ b/node_backend/node_modules/async/forEachLimit.js @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _withoutIndex = require('./internal/withoutIndex.js'); + +var _withoutIndex2 = _interopRequireDefault(_withoutIndex); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachLimit(coll, limit, iteratee, callback) { + return (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} +exports.default = (0, _awaitify2.default)(eachLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/forEachOf.js b/node_backend/node_modules/async/forEachOf.js new file mode 100644 index 0000000000000000000000000000000000000000..9ed20f669fcbe47bebc859d077ebab6c92e3309c --- /dev/null +++ b/node_backend/node_modules/async/forEachOf.js @@ -0,0 +1,185 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _isArrayLike = require('./internal/isArrayLike.js'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _breakLoop = require('./internal/breakLoop.js'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +var _eachOfLimit = require('./eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _onlyOnce = require('./internal/onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// eachOf implementation optimized for array-likes +function eachOfArrayLike(coll, iteratee, callback) { + callback = (0, _once2.default)(callback); + var index = 0, + completed = 0, + { length } = coll, + canceled = false; + if (length === 0) { + callback(null); + } + + function iteratorCallback(err, value) { + if (err === false) { + canceled = true; + } + if (canceled === true) return; + if (err) { + callback(err); + } else if (++completed === length || value === _breakLoop2.default) { + callback(null); + } + } + + for (; index < length; index++) { + iteratee(coll[index], index, (0, _onlyOnce2.default)(iteratorCallback)); + } +} + +// a generic version of eachOf which can handle array, object, and iterator cases. +function eachOfGeneric(coll, iteratee, callback) { + return (0, _eachOfLimit2.default)(coll, Infinity, iteratee, callback); +} + +/** + * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument + * to the iteratee. + * + * @name eachOf + * @static + * @memberOf module:Collections + * @method + * @alias forEachOf + * @category Collection + * @see [async.each]{@link module:Collections.each} + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each + * item in `coll`. + * The `key` is the item's key, or index in the case of an array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * // dev.json is a file containing a valid json object config for dev environment + * // dev.json is a file containing a valid json object config for test environment + * // prod.json is a file containing a valid json object config for prod environment + * // invalid.json is a file with a malformed json object + * + * let configs = {}; //global variable + * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'}; + * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'}; + * + * // asynchronous function that reads a json file and parses the contents as json object + * function parseFile(file, key, callback) { + * fs.readFile(file, "utf8", function(err, data) { + * if (err) return calback(err); + * try { + * configs[key] = JSON.parse(data); + * } catch (e) { + * return callback(e); + * } + * callback(); + * }); + * } + * + * // Using callbacks + * async.forEachOf(validConfigFileMap, parseFile, function (err) { + * if (err) { + * console.error(err); + * } else { + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * } + * }); + * + * //Error handing + * async.forEachOf(invalidConfigFileMap, parseFile, function (err) { + * if (err) { + * console.error(err); + * // JSON parse error exception + * } else { + * console.log(configs); + * } + * }); + * + * // Using Promises + * async.forEachOf(validConfigFileMap, parseFile) + * .then( () => { + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * }).catch( err => { + * console.error(err); + * }); + * + * //Error handing + * async.forEachOf(invalidConfigFileMap, parseFile) + * .then( () => { + * console.log(configs); + * }).catch( err => { + * console.error(err); + * // JSON parse error exception + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.forEachOf(validConfigFileMap, parseFile); + * console.log(configs); + * // configs is now a map of JSON data, e.g. + * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json} + * } + * catch (err) { + * console.log(err); + * } + * } + * + * //Error handing + * async () => { + * try { + * let result = await async.forEachOf(invalidConfigFileMap, parseFile); + * console.log(configs); + * } + * catch (err) { + * console.log(err); + * // JSON parse error exception + * } + * } + * + */ +function eachOf(coll, iteratee, callback) { + var eachOfImplementation = (0, _isArrayLike2.default)(coll) ? eachOfArrayLike : eachOfGeneric; + return eachOfImplementation(coll, (0, _wrapAsync2.default)(iteratee), callback); +} + +exports.default = (0, _awaitify2.default)(eachOf, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/forEachOfLimit.js b/node_backend/node_modules/async/forEachOfLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..a596e5ac08892d34395d76bfbd1d9f428675243c --- /dev/null +++ b/node_backend/node_modules/async/forEachOfLimit.js @@ -0,0 +1,47 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit2 = require('./internal/eachOfLimit.js'); + +var _eachOfLimit3 = _interopRequireDefault(_eachOfLimit2); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a + * time. + * + * @name eachOfLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. The `key` is the item's key, or index in the case of an + * array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachOfLimit(coll, limit, iteratee, callback) { + return (0, _eachOfLimit3.default)(limit)(coll, (0, _wrapAsync2.default)(iteratee), callback); +} + +exports.default = (0, _awaitify2.default)(eachOfLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/forEachOfSeries.js b/node_backend/node_modules/async/forEachOfSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..04243ada0a45deac56a83f2e4a0755f710094e9b --- /dev/null +++ b/node_backend/node_modules/async/forEachOfSeries.js @@ -0,0 +1,39 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit = require('./eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time. + * + * @name eachOfSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachOfSeries(coll, iteratee, callback) { + return (0, _eachOfLimit2.default)(coll, 1, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(eachOfSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/forEachSeries.js b/node_backend/node_modules/async/forEachSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..b04896e394ee5a2eaaac746c9c0eff805ce08968 --- /dev/null +++ b/node_backend/node_modules/async/forEachSeries.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachLimit = require('./eachLimit.js'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item + * in series and therefore the iteratee functions will complete in order. + + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @returns {Promise} a promise, if a callback is omitted + */ +function eachSeries(coll, iteratee, callback) { + return (0, _eachLimit2.default)(coll, 1, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(eachSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/forever.js b/node_backend/node_modules/async/forever.js new file mode 100644 index 0000000000000000000000000000000000000000..22925185e9d552f5a301f6132df44fe4d220ac8f --- /dev/null +++ b/node_backend/node_modules/async/forever.js @@ -0,0 +1,68 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _onlyOnce = require('./internal/onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _ensureAsync = require('./ensureAsync.js'); + +var _ensureAsync2 = _interopRequireDefault(_ensureAsync); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls the asynchronous function `fn` with a callback parameter that allows it + * to call itself again, in series, indefinitely. + + * If an error is passed to the callback then `errback` is called with the + * error, and execution stops, otherwise it will never be called. + * + * @name forever + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} fn - an async function to call repeatedly. + * Invoked with (next). + * @param {Function} [errback] - when `fn` passes an error to it's callback, + * this function will be called, and execution stops. Invoked with (err). + * @returns {Promise} a promise that rejects if an error occurs and an errback + * is not passed + * @example + * + * async.forever( + * function(next) { + * // next is suitable for passing to things that need a callback(err [, whatever]); + * // it will result in this function being called again. + * }, + * function(err) { + * // if next is called with a value in its first parameter, it will appear + * // in here as 'err', and execution will stop. + * } + * ); + */ +function forever(fn, errback) { + var done = (0, _onlyOnce2.default)(errback); + var task = (0, _wrapAsync2.default)((0, _ensureAsync2.default)(fn)); + + function next(err) { + if (err) return done(err); + if (err === false) return; + task(next); + } + return next(); +} +exports.default = (0, _awaitify2.default)(forever, 2); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/groupBy.js b/node_backend/node_modules/async/groupBy.js new file mode 100644 index 0000000000000000000000000000000000000000..f295763021ff65964deb2b47ad3c8187fb99cd66 --- /dev/null +++ b/node_backend/node_modules/async/groupBy.js @@ -0,0 +1,108 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = groupBy; + +var _groupByLimit = require('./groupByLimit.js'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns a new object, where each value corresponds to an array of items, from + * `coll`, that returned the corresponding key. That is, the keys of the object + * correspond to the values passed to the `iteratee` callback. + * + * Note: Since this function applies the `iteratee` to each item in parallel, + * there is no guarantee that the `iteratee` functions will complete in order. + * However, the values for each key in the `result` will be in the same order as + * the original `coll`. For Objects, the values will roughly be in the order of + * the original Objects' keys (but this can vary across JavaScript engines). + * + * @name groupBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * const files = ['dir1/file1.txt','dir2','dir4'] + * + * // asynchronous function that detects file type as none, file, or directory + * function detectFile(file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(null, 'none'); + * } + * callback(null, stat.isDirectory() ? 'directory' : 'file'); + * }); + * } + * + * //Using callbacks + * async.groupBy(files, detectFile, function(err, result) { + * if(err) { + * console.log(err); + * } else { + * console.log(result); + * // { + * // file: [ 'dir1/file1.txt' ], + * // none: [ 'dir4' ], + * // directory: [ 'dir2'] + * // } + * // result is object containing the files grouped by type + * } + * }); + * + * // Using Promises + * async.groupBy(files, detectFile) + * .then( result => { + * console.log(result); + * // { + * // file: [ 'dir1/file1.txt' ], + * // none: [ 'dir4' ], + * // directory: [ 'dir2'] + * // } + * // result is object containing the files grouped by type + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.groupBy(files, detectFile); + * console.log(result); + * // { + * // file: [ 'dir1/file1.txt' ], + * // none: [ 'dir4' ], + * // directory: [ 'dir2'] + * // } + * // result is object containing the files grouped by type + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function groupBy(coll, iteratee, callback) { + return (0, _groupByLimit2.default)(coll, Infinity, iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/groupByLimit.js b/node_backend/node_modules/async/groupByLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..30fd290af4e2282207a06fc161b2bf07d7b5bce1 --- /dev/null +++ b/node_backend/node_modules/async/groupByLimit.js @@ -0,0 +1,71 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mapLimit = require('./mapLimit.js'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time. + * + * @name groupByLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @returns {Promise} a promise, if no callback is passed + */ +function groupByLimit(coll, limit, iteratee, callback) { + var _iteratee = (0, _wrapAsync2.default)(iteratee); + return (0, _mapLimit2.default)(coll, limit, (val, iterCb) => { + _iteratee(val, (err, key) => { + if (err) return iterCb(err); + return iterCb(err, { key, val }); + }); + }, (err, mapResults) => { + var result = {}; + // from MDN, handle object having an `hasOwnProperty` prop + var { hasOwnProperty } = Object.prototype; + + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + var { key } = mapResults[i]; + var { val } = mapResults[i]; + + if (hasOwnProperty.call(result, key)) { + result[key].push(val); + } else { + result[key] = [val]; + } + } + } + + return callback(err, result); + }); +} + +exports.default = (0, _awaitify2.default)(groupByLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/groupBySeries.js b/node_backend/node_modules/async/groupBySeries.js new file mode 100644 index 0000000000000000000000000000000000000000..e2a528749753bfb23e3fd676d64e990163ec72a0 --- /dev/null +++ b/node_backend/node_modules/async/groupBySeries.js @@ -0,0 +1,36 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = groupBySeries; + +var _groupByLimit = require('./groupByLimit.js'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. + * + * @name groupBySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whose + * properties are arrays of values which returned the corresponding key. + * @returns {Promise} a promise, if no callback is passed + */ +function groupBySeries(coll, iteratee, callback) { + return (0, _groupByLimit2.default)(coll, 1, iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/index.js b/node_backend/node_modules/async/index.js new file mode 100644 index 0000000000000000000000000000000000000000..6154647d6b28fc1c085544ddff289b0b0e4bdeef --- /dev/null +++ b/node_backend/node_modules/async/index.js @@ -0,0 +1,588 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.doDuring = exports.during = exports.wrapSync = undefined; +exports.selectSeries = exports.selectLimit = exports.select = exports.foldr = exports.foldl = exports.inject = exports.forEachOfLimit = exports.forEachOfSeries = exports.forEachOf = exports.forEachLimit = exports.forEachSeries = exports.forEach = exports.flatMapSeries = exports.flatMapLimit = exports.flatMap = exports.findSeries = exports.findLimit = exports.find = exports.anySeries = exports.anyLimit = exports.any = exports.allSeries = exports.allLimit = exports.all = exports.whilst = exports.waterfall = exports.until = exports.unmemoize = exports.tryEach = exports.transform = exports.timesSeries = exports.timesLimit = exports.times = exports.timeout = exports.sortBy = exports.someSeries = exports.someLimit = exports.some = exports.setImmediate = exports.series = exports.seq = exports.retryable = exports.retry = exports.rejectSeries = exports.rejectLimit = exports.reject = exports.reflectAll = exports.reflect = exports.reduceRight = exports.reduce = exports.race = exports.queue = exports.priorityQueue = exports.parallelLimit = exports.parallel = exports.nextTick = exports.memoize = exports.mapValuesSeries = exports.mapValuesLimit = exports.mapValues = exports.mapSeries = exports.mapLimit = exports.map = exports.log = exports.groupBySeries = exports.groupByLimit = exports.groupBy = exports.forever = exports.filterSeries = exports.filterLimit = exports.filter = exports.everySeries = exports.everyLimit = exports.every = exports.ensureAsync = exports.eachSeries = exports.eachOfSeries = exports.eachOfLimit = exports.eachOf = exports.eachLimit = exports.each = exports.doWhilst = exports.doUntil = exports.dir = exports.detectSeries = exports.detectLimit = exports.detect = exports.constant = exports.concatSeries = exports.concatLimit = exports.concat = exports.compose = exports.cargoQueue = exports.cargo = exports.autoInject = exports.auto = exports.asyncify = exports.applyEachSeries = exports.applyEach = exports.apply = undefined; + +var _apply = require('./apply'); + +var _apply2 = _interopRequireDefault(_apply); + +var _applyEach = require('./applyEach'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _applyEachSeries = require('./applyEachSeries'); + +var _applyEachSeries2 = _interopRequireDefault(_applyEachSeries); + +var _asyncify = require('./asyncify'); + +var _asyncify2 = _interopRequireDefault(_asyncify); + +var _auto = require('./auto'); + +var _auto2 = _interopRequireDefault(_auto); + +var _autoInject = require('./autoInject'); + +var _autoInject2 = _interopRequireDefault(_autoInject); + +var _cargo = require('./cargo'); + +var _cargo2 = _interopRequireDefault(_cargo); + +var _cargoQueue = require('./cargoQueue'); + +var _cargoQueue2 = _interopRequireDefault(_cargoQueue); + +var _compose = require('./compose'); + +var _compose2 = _interopRequireDefault(_compose); + +var _concat = require('./concat'); + +var _concat2 = _interopRequireDefault(_concat); + +var _concatLimit = require('./concatLimit'); + +var _concatLimit2 = _interopRequireDefault(_concatLimit); + +var _concatSeries = require('./concatSeries'); + +var _concatSeries2 = _interopRequireDefault(_concatSeries); + +var _constant = require('./constant'); + +var _constant2 = _interopRequireDefault(_constant); + +var _detect = require('./detect'); + +var _detect2 = _interopRequireDefault(_detect); + +var _detectLimit = require('./detectLimit'); + +var _detectLimit2 = _interopRequireDefault(_detectLimit); + +var _detectSeries = require('./detectSeries'); + +var _detectSeries2 = _interopRequireDefault(_detectSeries); + +var _dir = require('./dir'); + +var _dir2 = _interopRequireDefault(_dir); + +var _doUntil = require('./doUntil'); + +var _doUntil2 = _interopRequireDefault(_doUntil); + +var _doWhilst = require('./doWhilst'); + +var _doWhilst2 = _interopRequireDefault(_doWhilst); + +var _each = require('./each'); + +var _each2 = _interopRequireDefault(_each); + +var _eachLimit = require('./eachLimit'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _eachOf = require('./eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _eachOfSeries = require('./eachOfSeries'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _eachSeries = require('./eachSeries'); + +var _eachSeries2 = _interopRequireDefault(_eachSeries); + +var _ensureAsync = require('./ensureAsync'); + +var _ensureAsync2 = _interopRequireDefault(_ensureAsync); + +var _every = require('./every'); + +var _every2 = _interopRequireDefault(_every); + +var _everyLimit = require('./everyLimit'); + +var _everyLimit2 = _interopRequireDefault(_everyLimit); + +var _everySeries = require('./everySeries'); + +var _everySeries2 = _interopRequireDefault(_everySeries); + +var _filter = require('./filter'); + +var _filter2 = _interopRequireDefault(_filter); + +var _filterLimit = require('./filterLimit'); + +var _filterLimit2 = _interopRequireDefault(_filterLimit); + +var _filterSeries = require('./filterSeries'); + +var _filterSeries2 = _interopRequireDefault(_filterSeries); + +var _forever = require('./forever'); + +var _forever2 = _interopRequireDefault(_forever); + +var _groupBy = require('./groupBy'); + +var _groupBy2 = _interopRequireDefault(_groupBy); + +var _groupByLimit = require('./groupByLimit'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +var _groupBySeries = require('./groupBySeries'); + +var _groupBySeries2 = _interopRequireDefault(_groupBySeries); + +var _log = require('./log'); + +var _log2 = _interopRequireDefault(_log); + +var _map = require('./map'); + +var _map2 = _interopRequireDefault(_map); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _mapSeries = require('./mapSeries'); + +var _mapSeries2 = _interopRequireDefault(_mapSeries); + +var _mapValues = require('./mapValues'); + +var _mapValues2 = _interopRequireDefault(_mapValues); + +var _mapValuesLimit = require('./mapValuesLimit'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +var _mapValuesSeries = require('./mapValuesSeries'); + +var _mapValuesSeries2 = _interopRequireDefault(_mapValuesSeries); + +var _memoize = require('./memoize'); + +var _memoize2 = _interopRequireDefault(_memoize); + +var _nextTick = require('./nextTick'); + +var _nextTick2 = _interopRequireDefault(_nextTick); + +var _parallel = require('./parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +var _parallelLimit = require('./parallelLimit'); + +var _parallelLimit2 = _interopRequireDefault(_parallelLimit); + +var _priorityQueue = require('./priorityQueue'); + +var _priorityQueue2 = _interopRequireDefault(_priorityQueue); + +var _queue = require('./queue'); + +var _queue2 = _interopRequireDefault(_queue); + +var _race = require('./race'); + +var _race2 = _interopRequireDefault(_race); + +var _reduce = require('./reduce'); + +var _reduce2 = _interopRequireDefault(_reduce); + +var _reduceRight = require('./reduceRight'); + +var _reduceRight2 = _interopRequireDefault(_reduceRight); + +var _reflect = require('./reflect'); + +var _reflect2 = _interopRequireDefault(_reflect); + +var _reflectAll = require('./reflectAll'); + +var _reflectAll2 = _interopRequireDefault(_reflectAll); + +var _reject = require('./reject'); + +var _reject2 = _interopRequireDefault(_reject); + +var _rejectLimit = require('./rejectLimit'); + +var _rejectLimit2 = _interopRequireDefault(_rejectLimit); + +var _rejectSeries = require('./rejectSeries'); + +var _rejectSeries2 = _interopRequireDefault(_rejectSeries); + +var _retry = require('./retry'); + +var _retry2 = _interopRequireDefault(_retry); + +var _retryable = require('./retryable'); + +var _retryable2 = _interopRequireDefault(_retryable); + +var _seq = require('./seq'); + +var _seq2 = _interopRequireDefault(_seq); + +var _series = require('./series'); + +var _series2 = _interopRequireDefault(_series); + +var _setImmediate = require('./setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _some = require('./some'); + +var _some2 = _interopRequireDefault(_some); + +var _someLimit = require('./someLimit'); + +var _someLimit2 = _interopRequireDefault(_someLimit); + +var _someSeries = require('./someSeries'); + +var _someSeries2 = _interopRequireDefault(_someSeries); + +var _sortBy = require('./sortBy'); + +var _sortBy2 = _interopRequireDefault(_sortBy); + +var _timeout = require('./timeout'); + +var _timeout2 = _interopRequireDefault(_timeout); + +var _times = require('./times'); + +var _times2 = _interopRequireDefault(_times); + +var _timesLimit = require('./timesLimit'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +var _timesSeries = require('./timesSeries'); + +var _timesSeries2 = _interopRequireDefault(_timesSeries); + +var _transform = require('./transform'); + +var _transform2 = _interopRequireDefault(_transform); + +var _tryEach = require('./tryEach'); + +var _tryEach2 = _interopRequireDefault(_tryEach); + +var _unmemoize = require('./unmemoize'); + +var _unmemoize2 = _interopRequireDefault(_unmemoize); + +var _until = require('./until'); + +var _until2 = _interopRequireDefault(_until); + +var _waterfall = require('./waterfall'); + +var _waterfall2 = _interopRequireDefault(_waterfall); + +var _whilst = require('./whilst'); + +var _whilst2 = _interopRequireDefault(_whilst); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * An "async function" in the context of Async is an asynchronous function with + * a variable number of parameters, with the final parameter being a callback. + * (`function (arg1, arg2, ..., callback) {}`) + * The final callback is of the form `callback(err, results...)`, which must be + * called once the function is completed. The callback should be called with a + * Error as its first argument to signal that an error occurred. + * Otherwise, if no error occurred, it should be called with `null` as the first + * argument, and any additional `result` arguments that may apply, to signal + * successful completion. + * The callback must be called exactly once, ideally on a later tick of the + * JavaScript event loop. + * + * This type of function is also referred to as a "Node-style async function", + * or a "continuation passing-style function" (CPS). Most of the methods of this + * library are themselves CPS/Node-style async functions, or functions that + * return CPS/Node-style async functions. + * + * Wherever we accept a Node-style async function, we also directly accept an + * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. + * In this case, the `async` function will not be passed a final callback + * argument, and any thrown error will be used as the `err` argument of the + * implicit callback, and the return value will be used as the `result` value. + * (i.e. a `rejected` of the returned Promise becomes the `err` callback + * argument, and a `resolved` value becomes the `result`.) + * + * Note, due to JavaScript limitations, we can only detect native `async` + * functions and not transpilied implementations. + * Your environment must have `async`/`await` support for this to work. + * (e.g. Node > v7.6, or a recent version of a modern browser). + * If you are using `async` functions through a transpiler (e.g. Babel), you + * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, + * because the `async function` will be compiled to an ordinary function that + * returns a promise. + * + * @typedef {Function} AsyncFunction + * @static + */ + +/** + * Async is a utility module which provides straight-forward, powerful functions + * for working with asynchronous JavaScript. Although originally designed for + * use with [Node.js](http://nodejs.org) and installable via + * `npm install --save async`, it can also be used directly in the browser. + * @module async + * @see AsyncFunction + */ + +/** + * A collection of `async` functions for manipulating collections, such as + * arrays and objects. + * @module Collections + */ + +/** + * A collection of `async` functions for controlling the flow through a script. + * @module ControlFlow + */ + +/** + * A collection of `async` utility functions. + * @module Utils + */ + +exports.default = { + apply: _apply2.default, + applyEach: _applyEach2.default, + applyEachSeries: _applyEachSeries2.default, + asyncify: _asyncify2.default, + auto: _auto2.default, + autoInject: _autoInject2.default, + cargo: _cargo2.default, + cargoQueue: _cargoQueue2.default, + compose: _compose2.default, + concat: _concat2.default, + concatLimit: _concatLimit2.default, + concatSeries: _concatSeries2.default, + constant: _constant2.default, + detect: _detect2.default, + detectLimit: _detectLimit2.default, + detectSeries: _detectSeries2.default, + dir: _dir2.default, + doUntil: _doUntil2.default, + doWhilst: _doWhilst2.default, + each: _each2.default, + eachLimit: _eachLimit2.default, + eachOf: _eachOf2.default, + eachOfLimit: _eachOfLimit2.default, + eachOfSeries: _eachOfSeries2.default, + eachSeries: _eachSeries2.default, + ensureAsync: _ensureAsync2.default, + every: _every2.default, + everyLimit: _everyLimit2.default, + everySeries: _everySeries2.default, + filter: _filter2.default, + filterLimit: _filterLimit2.default, + filterSeries: _filterSeries2.default, + forever: _forever2.default, + groupBy: _groupBy2.default, + groupByLimit: _groupByLimit2.default, + groupBySeries: _groupBySeries2.default, + log: _log2.default, + map: _map2.default, + mapLimit: _mapLimit2.default, + mapSeries: _mapSeries2.default, + mapValues: _mapValues2.default, + mapValuesLimit: _mapValuesLimit2.default, + mapValuesSeries: _mapValuesSeries2.default, + memoize: _memoize2.default, + nextTick: _nextTick2.default, + parallel: _parallel2.default, + parallelLimit: _parallelLimit2.default, + priorityQueue: _priorityQueue2.default, + queue: _queue2.default, + race: _race2.default, + reduce: _reduce2.default, + reduceRight: _reduceRight2.default, + reflect: _reflect2.default, + reflectAll: _reflectAll2.default, + reject: _reject2.default, + rejectLimit: _rejectLimit2.default, + rejectSeries: _rejectSeries2.default, + retry: _retry2.default, + retryable: _retryable2.default, + seq: _seq2.default, + series: _series2.default, + setImmediate: _setImmediate2.default, + some: _some2.default, + someLimit: _someLimit2.default, + someSeries: _someSeries2.default, + sortBy: _sortBy2.default, + timeout: _timeout2.default, + times: _times2.default, + timesLimit: _timesLimit2.default, + timesSeries: _timesSeries2.default, + transform: _transform2.default, + tryEach: _tryEach2.default, + unmemoize: _unmemoize2.default, + until: _until2.default, + waterfall: _waterfall2.default, + whilst: _whilst2.default, + + // aliases + all: _every2.default, + allLimit: _everyLimit2.default, + allSeries: _everySeries2.default, + any: _some2.default, + anyLimit: _someLimit2.default, + anySeries: _someSeries2.default, + find: _detect2.default, + findLimit: _detectLimit2.default, + findSeries: _detectSeries2.default, + flatMap: _concat2.default, + flatMapLimit: _concatLimit2.default, + flatMapSeries: _concatSeries2.default, + forEach: _each2.default, + forEachSeries: _eachSeries2.default, + forEachLimit: _eachLimit2.default, + forEachOf: _eachOf2.default, + forEachOfSeries: _eachOfSeries2.default, + forEachOfLimit: _eachOfLimit2.default, + inject: _reduce2.default, + foldl: _reduce2.default, + foldr: _reduceRight2.default, + select: _filter2.default, + selectLimit: _filterLimit2.default, + selectSeries: _filterSeries2.default, + wrapSync: _asyncify2.default, + during: _whilst2.default, + doDuring: _doWhilst2.default +}; +exports.apply = _apply2.default; +exports.applyEach = _applyEach2.default; +exports.applyEachSeries = _applyEachSeries2.default; +exports.asyncify = _asyncify2.default; +exports.auto = _auto2.default; +exports.autoInject = _autoInject2.default; +exports.cargo = _cargo2.default; +exports.cargoQueue = _cargoQueue2.default; +exports.compose = _compose2.default; +exports.concat = _concat2.default; +exports.concatLimit = _concatLimit2.default; +exports.concatSeries = _concatSeries2.default; +exports.constant = _constant2.default; +exports.detect = _detect2.default; +exports.detectLimit = _detectLimit2.default; +exports.detectSeries = _detectSeries2.default; +exports.dir = _dir2.default; +exports.doUntil = _doUntil2.default; +exports.doWhilst = _doWhilst2.default; +exports.each = _each2.default; +exports.eachLimit = _eachLimit2.default; +exports.eachOf = _eachOf2.default; +exports.eachOfLimit = _eachOfLimit2.default; +exports.eachOfSeries = _eachOfSeries2.default; +exports.eachSeries = _eachSeries2.default; +exports.ensureAsync = _ensureAsync2.default; +exports.every = _every2.default; +exports.everyLimit = _everyLimit2.default; +exports.everySeries = _everySeries2.default; +exports.filter = _filter2.default; +exports.filterLimit = _filterLimit2.default; +exports.filterSeries = _filterSeries2.default; +exports.forever = _forever2.default; +exports.groupBy = _groupBy2.default; +exports.groupByLimit = _groupByLimit2.default; +exports.groupBySeries = _groupBySeries2.default; +exports.log = _log2.default; +exports.map = _map2.default; +exports.mapLimit = _mapLimit2.default; +exports.mapSeries = _mapSeries2.default; +exports.mapValues = _mapValues2.default; +exports.mapValuesLimit = _mapValuesLimit2.default; +exports.mapValuesSeries = _mapValuesSeries2.default; +exports.memoize = _memoize2.default; +exports.nextTick = _nextTick2.default; +exports.parallel = _parallel2.default; +exports.parallelLimit = _parallelLimit2.default; +exports.priorityQueue = _priorityQueue2.default; +exports.queue = _queue2.default; +exports.race = _race2.default; +exports.reduce = _reduce2.default; +exports.reduceRight = _reduceRight2.default; +exports.reflect = _reflect2.default; +exports.reflectAll = _reflectAll2.default; +exports.reject = _reject2.default; +exports.rejectLimit = _rejectLimit2.default; +exports.rejectSeries = _rejectSeries2.default; +exports.retry = _retry2.default; +exports.retryable = _retryable2.default; +exports.seq = _seq2.default; +exports.series = _series2.default; +exports.setImmediate = _setImmediate2.default; +exports.some = _some2.default; +exports.someLimit = _someLimit2.default; +exports.someSeries = _someSeries2.default; +exports.sortBy = _sortBy2.default; +exports.timeout = _timeout2.default; +exports.times = _times2.default; +exports.timesLimit = _timesLimit2.default; +exports.timesSeries = _timesSeries2.default; +exports.transform = _transform2.default; +exports.tryEach = _tryEach2.default; +exports.unmemoize = _unmemoize2.default; +exports.until = _until2.default; +exports.waterfall = _waterfall2.default; +exports.whilst = _whilst2.default; +exports.all = _every2.default; +exports.allLimit = _everyLimit2.default; +exports.allSeries = _everySeries2.default; +exports.any = _some2.default; +exports.anyLimit = _someLimit2.default; +exports.anySeries = _someSeries2.default; +exports.find = _detect2.default; +exports.findLimit = _detectLimit2.default; +exports.findSeries = _detectSeries2.default; +exports.flatMap = _concat2.default; +exports.flatMapLimit = _concatLimit2.default; +exports.flatMapSeries = _concatSeries2.default; +exports.forEach = _each2.default; +exports.forEachSeries = _eachSeries2.default; +exports.forEachLimit = _eachLimit2.default; +exports.forEachOf = _eachOf2.default; +exports.forEachOfSeries = _eachOfSeries2.default; +exports.forEachOfLimit = _eachOfLimit2.default; +exports.inject = _reduce2.default; +exports.foldl = _reduce2.default; +exports.foldr = _reduceRight2.default; +exports.select = _filter2.default; +exports.selectLimit = _filterLimit2.default; +exports.selectSeries = _filterSeries2.default; +exports.wrapSync = _asyncify2.default; +exports.during = _whilst2.default; +exports.doDuring = _doWhilst2.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/inject.js b/node_backend/node_modules/async/inject.js new file mode 100644 index 0000000000000000000000000000000000000000..8a69548a6efd9e974b5281f3bda4e29b1b1a48a2 --- /dev/null +++ b/node_backend/node_modules/async/inject.js @@ -0,0 +1,153 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Reduces `coll` into a single value using an async `iteratee` to return each + * successive step. `memo` is the initial state of the reduction. This function + * only operates in series. + * + * For performance reasons, it may make sense to split a call to this function + * into a parallel map, and then use the normal `Array.prototype.reduce` on the + * results. This function is for situations where each step in the reduction + * needs to be async; if you can get the data before reducing it, then it's + * probably a good idea to do so. + * + * @name reduce + * @static + * @memberOf module:Collections + * @method + * @alias inject + * @alias foldl + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee completes with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * // file4.txt does not exist + * + * const fileList = ['file1.txt','file2.txt','file3.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file3.txt', 'file4.txt']; + * + * // asynchronous function that computes the file size in bytes + * // file size is added to the memoized value, then returned + * function getFileSizeInBytes(memo, file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, memo + stat.size); + * }); + * } + * + * // Using callbacks + * async.reduce(fileList, 0, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * } else { + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * } + * }); + * + * // Error Handling + * async.reduce(withMissingFileList, 0, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(result); + * } + * }); + * + * // Using Promises + * async.reduce(fileList, 0, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.reduce(withMissingFileList, 0, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.reduce(fileList, 0, getFileSizeInBytes); + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes); + * console.log(result); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function reduce(coll, memo, iteratee, callback) { + callback = (0, _once2.default)(callback); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + return (0, _eachOfSeries2.default)(coll, (x, i, iterCb) => { + _iteratee(memo, x, (err, v) => { + memo = v; + iterCb(err); + }); + }, err => callback(err, memo)); +} +exports.default = (0, _awaitify2.default)(reduce, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/DoublyLinkedList.js b/node_backend/node_modules/async/internal/DoublyLinkedList.js new file mode 100644 index 0000000000000000000000000000000000000000..419ce44bd15becbdaf45bbcf27f01c95cf32fbea --- /dev/null +++ b/node_backend/node_modules/async/internal/DoublyLinkedList.js @@ -0,0 +1,92 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation +// used for queues. This implementation assumes that the node provided by the user can be modified +// to adjust the next and last properties. We implement only the minimal functionality +// for queue support. +class DLL { + constructor() { + this.head = this.tail = null; + this.length = 0; + } + + removeLink(node) { + if (node.prev) node.prev.next = node.next;else this.head = node.next; + if (node.next) node.next.prev = node.prev;else this.tail = node.prev; + + node.prev = node.next = null; + this.length -= 1; + return node; + } + + empty() { + while (this.head) this.shift(); + return this; + } + + insertAfter(node, newNode) { + newNode.prev = node; + newNode.next = node.next; + if (node.next) node.next.prev = newNode;else this.tail = newNode; + node.next = newNode; + this.length += 1; + } + + insertBefore(node, newNode) { + newNode.prev = node.prev; + newNode.next = node; + if (node.prev) node.prev.next = newNode;else this.head = newNode; + node.prev = newNode; + this.length += 1; + } + + unshift(node) { + if (this.head) this.insertBefore(this.head, node);else setInitial(this, node); + } + + push(node) { + if (this.tail) this.insertAfter(this.tail, node);else setInitial(this, node); + } + + shift() { + return this.head && this.removeLink(this.head); + } + + pop() { + return this.tail && this.removeLink(this.tail); + } + + toArray() { + return [...this]; + } + + *[Symbol.iterator]() { + var cur = this.head; + while (cur) { + yield cur.data; + cur = cur.next; + } + } + + remove(testFn) { + var curr = this.head; + while (curr) { + var { next } = curr; + if (testFn(curr)) { + this.removeLink(curr); + } + curr = next; + } + return this; + } +} + +exports.default = DLL; +function setInitial(dll, node) { + dll.length = 1; + dll.head = dll.tail = node; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/Heap.js b/node_backend/node_modules/async/internal/Heap.js new file mode 100644 index 0000000000000000000000000000000000000000..7867c92818719cd70e8c8f08d98cff9464cf70dd --- /dev/null +++ b/node_backend/node_modules/async/internal/Heap.js @@ -0,0 +1,120 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +// Binary min-heap implementation used for priority queue. +// Implementation is stable, i.e. push time is considered for equal priorities +class Heap { + constructor() { + this.heap = []; + this.pushCount = Number.MIN_SAFE_INTEGER; + } + + get length() { + return this.heap.length; + } + + empty() { + this.heap = []; + return this; + } + + percUp(index) { + let p; + + while (index > 0 && smaller(this.heap[index], this.heap[p = parent(index)])) { + let t = this.heap[index]; + this.heap[index] = this.heap[p]; + this.heap[p] = t; + + index = p; + } + } + + percDown(index) { + let l; + + while ((l = leftChi(index)) < this.heap.length) { + if (l + 1 < this.heap.length && smaller(this.heap[l + 1], this.heap[l])) { + l = l + 1; + } + + if (smaller(this.heap[index], this.heap[l])) { + break; + } + + let t = this.heap[index]; + this.heap[index] = this.heap[l]; + this.heap[l] = t; + + index = l; + } + } + + push(node) { + node.pushCount = ++this.pushCount; + this.heap.push(node); + this.percUp(this.heap.length - 1); + } + + unshift(node) { + return this.heap.push(node); + } + + shift() { + let [top] = this.heap; + + this.heap[0] = this.heap[this.heap.length - 1]; + this.heap.pop(); + this.percDown(0); + + return top; + } + + toArray() { + return [...this]; + } + + *[Symbol.iterator]() { + for (let i = 0; i < this.heap.length; i++) { + yield this.heap[i].data; + } + } + + remove(testFn) { + let j = 0; + for (let i = 0; i < this.heap.length; i++) { + if (!testFn(this.heap[i])) { + this.heap[j] = this.heap[i]; + j++; + } + } + + this.heap.splice(j); + + for (let i = parent(this.heap.length - 1); i >= 0; i--) { + this.percDown(i); + } + + return this; + } +} + +exports.default = Heap; +function leftChi(i) { + return (i << 1) + 1; +} + +function parent(i) { + return (i + 1 >> 1) - 1; +} + +function smaller(x, y) { + if (x.priority !== y.priority) { + return x.priority < y.priority; + } else { + return x.pushCount < y.pushCount; + } +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/applyEach.js b/node_backend/node_modules/async/internal/applyEach.js new file mode 100644 index 0000000000000000000000000000000000000000..544491267177eb1fa9bccd95c9cb12a724e48ac7 --- /dev/null +++ b/node_backend/node_modules/async/internal/applyEach.js @@ -0,0 +1,29 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (eachfn) { + return function applyEach(fns, ...callArgs) { + const go = (0, _awaitify2.default)(function (callback) { + var that = this; + return eachfn(fns, (fn, cb) => { + (0, _wrapAsync2.default)(fn).apply(that, callArgs.concat(cb)); + }, callback); + }); + return go; + }; +}; + +var _wrapAsync = require('./wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/asyncEachOfLimit.js b/node_backend/node_modules/async/internal/asyncEachOfLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..34dd82bf697b76cfd6f741b8fc8da999a824e4f6 --- /dev/null +++ b/node_backend/node_modules/async/internal/asyncEachOfLimit.js @@ -0,0 +1,75 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = asyncEachOfLimit; + +var _breakLoop = require('./breakLoop.js'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// for async generators +function asyncEachOfLimit(generator, limit, iteratee, callback) { + let done = false; + let canceled = false; + let awaiting = false; + let running = 0; + let idx = 0; + + function replenish() { + //console.log('replenish') + if (running >= limit || awaiting || done) return; + //console.log('replenish awaiting') + awaiting = true; + generator.next().then(({ value, done: iterDone }) => { + //console.log('got value', value) + if (canceled || done) return; + awaiting = false; + if (iterDone) { + done = true; + if (running <= 0) { + //console.log('done nextCb') + callback(null); + } + return; + } + running++; + iteratee(value, idx, iterateeCallback); + idx++; + replenish(); + }).catch(handleError); + } + + function iterateeCallback(err, result) { + //console.log('iterateeCallback') + running -= 1; + if (canceled) return; + if (err) return handleError(err); + + if (err === false) { + done = true; + canceled = true; + return; + } + + if (result === _breakLoop2.default || done && running <= 0) { + done = true; + //console.log('done iterCb') + return callback(null); + } + replenish(); + } + + function handleError(err) { + if (canceled) return; + awaiting = false; + done = true; + callback(err); + } + + replenish(); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/awaitify.js b/node_backend/node_modules/async/internal/awaitify.js new file mode 100644 index 0000000000000000000000000000000000000000..bb7a609adcb1af30cccebbe33b0dec3d74c09423 --- /dev/null +++ b/node_backend/node_modules/async/internal/awaitify.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = awaitify; +// conditionally promisify a function. +// only return a promise if a callback is omitted +function awaitify(asyncFn, arity) { + if (!arity) arity = asyncFn.length; + if (!arity) throw new Error('arity is undefined'); + function awaitable(...args) { + if (typeof args[arity - 1] === 'function') { + return asyncFn.apply(this, args); + } + + return new Promise((resolve, reject) => { + args[arity - 1] = (err, ...cbArgs) => { + if (err) return reject(err); + resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]); + }; + asyncFn.apply(this, args); + }); + } + + return awaitable; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/breakLoop.js b/node_backend/node_modules/async/internal/breakLoop.js new file mode 100644 index 0000000000000000000000000000000000000000..87413dd0def73e6a4d46ea528425df5619894721 --- /dev/null +++ b/node_backend/node_modules/async/internal/breakLoop.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +// A temporary value used to identify if the loop should be broken. +// See #1064, #1293 +const breakLoop = {}; +exports.default = breakLoop; +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/consoleFunc.js b/node_backend/node_modules/async/internal/consoleFunc.js new file mode 100644 index 0000000000000000000000000000000000000000..748d54b74ae3cf79b1f05667c7b7b5aa621e6a23 --- /dev/null +++ b/node_backend/node_modules/async/internal/consoleFunc.js @@ -0,0 +1,31 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = consoleFunc; + +var _wrapAsync = require('./wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function consoleFunc(name) { + return (fn, ...args) => (0, _wrapAsync2.default)(fn)(...args, (err, ...resultArgs) => { + /* istanbul ignore else */ + if (typeof console === 'object') { + /* istanbul ignore else */ + if (err) { + /* istanbul ignore else */ + if (console.error) { + console.error(err); + } + } else if (console[name]) { + /* istanbul ignore else */ + resultArgs.forEach(x => console[name](x)); + } + } + }); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/createTester.js b/node_backend/node_modules/async/internal/createTester.js new file mode 100644 index 0000000000000000000000000000000000000000..cafdf62ebcffebf2129252ed21f8b2f597bfb867 --- /dev/null +++ b/node_backend/node_modules/async/internal/createTester.js @@ -0,0 +1,40 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _createTester; + +var _breakLoop = require('./breakLoop.js'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +var _wrapAsync = require('./wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _createTester(check, getResult) { + return (eachfn, arr, _iteratee, cb) => { + var testPassed = false; + var testResult; + const iteratee = (0, _wrapAsync2.default)(_iteratee); + eachfn(arr, (value, _, callback) => { + iteratee(value, (err, result) => { + if (err || err === false) return callback(err); + + if (check(result) && !testResult) { + testPassed = true; + testResult = getResult(true, value); + return callback(null, _breakLoop2.default); + } + callback(); + }); + }, err => { + if (err) return cb(err); + cb(null, testPassed ? testResult : getResult(false)); + }); + }; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/eachOfLimit.js b/node_backend/node_modules/async/internal/eachOfLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..ceed60f47f4850c37b1df85ca078cdd845e0b3e6 --- /dev/null +++ b/node_backend/node_modules/async/internal/eachOfLimit.js @@ -0,0 +1,90 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _once = require('./once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _iterator = require('./iterator.js'); + +var _iterator2 = _interopRequireDefault(_iterator); + +var _onlyOnce = require('./onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./wrapAsync.js'); + +var _asyncEachOfLimit = require('./asyncEachOfLimit.js'); + +var _asyncEachOfLimit2 = _interopRequireDefault(_asyncEachOfLimit); + +var _breakLoop = require('./breakLoop.js'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = limit => { + return (obj, iteratee, callback) => { + callback = (0, _once2.default)(callback); + if (limit <= 0) { + throw new RangeError('concurrency limit cannot be less than 1'); + } + if (!obj) { + return callback(null); + } + if ((0, _wrapAsync.isAsyncGenerator)(obj)) { + return (0, _asyncEachOfLimit2.default)(obj, limit, iteratee, callback); + } + if ((0, _wrapAsync.isAsyncIterable)(obj)) { + return (0, _asyncEachOfLimit2.default)(obj[Symbol.asyncIterator](), limit, iteratee, callback); + } + var nextElem = (0, _iterator2.default)(obj); + var done = false; + var canceled = false; + var running = 0; + var looping = false; + + function iterateeCallback(err, value) { + if (canceled) return; + running -= 1; + if (err) { + done = true; + callback(err); + } else if (err === false) { + done = true; + canceled = true; + } else if (value === _breakLoop2.default || done && running <= 0) { + done = true; + return callback(null); + } else if (!looping) { + replenish(); + } + } + + function replenish() { + looping = true; + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback)); + } + looping = false; + } + + replenish(); + }; +}; + +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/filter.js b/node_backend/node_modules/async/internal/filter.js new file mode 100644 index 0000000000000000000000000000000000000000..065c211ec996e25bba6b067b42a1b9e08d9c7b19 --- /dev/null +++ b/node_backend/node_modules/async/internal/filter.js @@ -0,0 +1,55 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _filter; + +var _isArrayLike = require('./isArrayLike.js'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _wrapAsync = require('./wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function filterArray(eachfn, arr, iteratee, callback) { + var truthValues = new Array(arr.length); + eachfn(arr, (x, index, iterCb) => { + iteratee(x, (err, v) => { + truthValues[index] = !!v; + iterCb(err); + }); + }, err => { + if (err) return callback(err); + var results = []; + for (var i = 0; i < arr.length; i++) { + if (truthValues[i]) results.push(arr[i]); + } + callback(null, results); + }); +} + +function filterGeneric(eachfn, coll, iteratee, callback) { + var results = []; + eachfn(coll, (x, index, iterCb) => { + iteratee(x, (err, v) => { + if (err) return iterCb(err); + if (v) { + results.push({ index, value: x }); + } + iterCb(err); + }); + }, err => { + if (err) return callback(err); + callback(null, results.sort((a, b) => a.index - b.index).map(v => v.value)); + }); +} + +function _filter(eachfn, coll, iteratee, callback) { + var filter = (0, _isArrayLike2.default)(coll) ? filterArray : filterGeneric; + return filter(eachfn, coll, (0, _wrapAsync2.default)(iteratee), callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/getIterator.js b/node_backend/node_modules/async/internal/getIterator.js new file mode 100644 index 0000000000000000000000000000000000000000..f518fce8c864e1118d80bdbb49948457f5f15f32 --- /dev/null +++ b/node_backend/node_modules/async/internal/getIterator.js @@ -0,0 +1,11 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll) { + return coll[Symbol.iterator] && coll[Symbol.iterator](); +}; + +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/initialParams.js b/node_backend/node_modules/async/internal/initialParams.js new file mode 100644 index 0000000000000000000000000000000000000000..04c0eff797d722460624d1c52dc6c9f755b3cebc --- /dev/null +++ b/node_backend/node_modules/async/internal/initialParams.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (fn) { + return function (...args /*, callback*/) { + var callback = args.pop(); + return fn.call(this, args, callback); + }; +}; + +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/isArrayLike.js b/node_backend/node_modules/async/internal/isArrayLike.js new file mode 100644 index 0000000000000000000000000000000000000000..a4c4c8a59546276fbeae14c7fd8f78a000a629b2 --- /dev/null +++ b/node_backend/node_modules/async/internal/isArrayLike.js @@ -0,0 +1,10 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = isArrayLike; +function isArrayLike(value) { + return value && typeof value.length === 'number' && value.length >= 0 && value.length % 1 === 0; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/iterator.js b/node_backend/node_modules/async/internal/iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..5778b1e830095cd8fb89455bef827e5b84b9c48a --- /dev/null +++ b/node_backend/node_modules/async/internal/iterator.js @@ -0,0 +1,57 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = createIterator; + +var _isArrayLike = require('./isArrayLike.js'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _getIterator = require('./getIterator.js'); + +var _getIterator2 = _interopRequireDefault(_getIterator); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createArrayIterator(coll) { + var i = -1; + var len = coll.length; + return function next() { + return ++i < len ? { value: coll[i], key: i } : null; + }; +} + +function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) return null; + i++; + return { value: item.value, key: i }; + }; +} + +function createObjectIterator(obj) { + var okeys = obj ? Object.keys(obj) : []; + var i = -1; + var len = okeys.length; + return function next() { + var key = okeys[++i]; + if (key === '__proto__') { + return next(); + } + return i < len ? { value: obj[key], key } : null; + }; +} + +function createIterator(coll) { + if ((0, _isArrayLike2.default)(coll)) { + return createArrayIterator(coll); + } + + var iterator = (0, _getIterator2.default)(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/map.js b/node_backend/node_modules/async/internal/map.js new file mode 100644 index 0000000000000000000000000000000000000000..acab1e7251241168cdad181ac4b0571ee0f9c7cf --- /dev/null +++ b/node_backend/node_modules/async/internal/map.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _asyncMap; + +var _wrapAsync = require('./wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _asyncMap(eachfn, arr, iteratee, callback) { + arr = arr || []; + var results = []; + var counter = 0; + var _iteratee = (0, _wrapAsync2.default)(iteratee); + + return eachfn(arr, (value, _, iterCb) => { + var index = counter++; + _iteratee(value, (err, v) => { + results[index] = v; + iterCb(err); + }); + }, err => { + callback(err, results); + }); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/once.js b/node_backend/node_modules/async/internal/once.js new file mode 100644 index 0000000000000000000000000000000000000000..a8b5792663459549ac789e316dccb15819f816b5 --- /dev/null +++ b/node_backend/node_modules/async/internal/once.js @@ -0,0 +1,17 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = once; +function once(fn) { + function wrapper(...args) { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, args); + } + Object.assign(wrapper, fn); + return wrapper; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/onlyOnce.js b/node_backend/node_modules/async/internal/onlyOnce.js new file mode 100644 index 0000000000000000000000000000000000000000..c95a92d408076c4e641baf5f3655b3ccaec3f427 --- /dev/null +++ b/node_backend/node_modules/async/internal/onlyOnce.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = onlyOnce; +function onlyOnce(fn) { + return function (...args) { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, args); + }; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/parallel.js b/node_backend/node_modules/async/internal/parallel.js new file mode 100644 index 0000000000000000000000000000000000000000..57fbd0d01e85e7a985820cc7624ba5c8debd421c --- /dev/null +++ b/node_backend/node_modules/async/internal/parallel.js @@ -0,0 +1,34 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _isArrayLike = require('./isArrayLike.js'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _wrapAsync = require('./wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = (0, _awaitify2.default)((eachfn, tasks, callback) => { + var results = (0, _isArrayLike2.default)(tasks) ? [] : {}; + + eachfn(tasks, (task, key, taskCb) => { + (0, _wrapAsync2.default)(task)((err, ...result) => { + if (result.length < 2) { + [result] = result; + } + results[key] = result; + taskCb(err); + }); + }, err => callback(err, results)); +}, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/promiseCallback.js b/node_backend/node_modules/async/internal/promiseCallback.js new file mode 100644 index 0000000000000000000000000000000000000000..17a83016c12b4293bb27ebd20a19540c9567e5e1 --- /dev/null +++ b/node_backend/node_modules/async/internal/promiseCallback.js @@ -0,0 +1,23 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +const PROMISE_SYMBOL = Symbol('promiseCallback'); + +function promiseCallback() { + let resolve, reject; + function callback(err, ...args) { + if (err) return reject(err); + resolve(args.length > 1 ? args : args[0]); + } + + callback[PROMISE_SYMBOL] = new Promise((res, rej) => { + resolve = res, reject = rej; + }); + + return callback; +} + +exports.promiseCallback = promiseCallback; +exports.PROMISE_SYMBOL = PROMISE_SYMBOL; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/queue.js b/node_backend/node_modules/async/internal/queue.js new file mode 100644 index 0000000000000000000000000000000000000000..7414e03bd600c15b98a77b22fae065dd312839a2 --- /dev/null +++ b/node_backend/node_modules/async/internal/queue.js @@ -0,0 +1,294 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = queue; + +var _onlyOnce = require('./onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _setImmediate = require('./setImmediate.js'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _DoublyLinkedList = require('./DoublyLinkedList.js'); + +var _DoublyLinkedList2 = _interopRequireDefault(_DoublyLinkedList); + +var _wrapAsync = require('./wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function queue(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } else if (concurrency === 0) { + throw new RangeError('Concurrency must not be zero'); + } + + var _worker = (0, _wrapAsync2.default)(worker); + var numRunning = 0; + var workersList = []; + const events = { + error: [], + drain: [], + saturated: [], + unsaturated: [], + empty: [] + }; + + function on(event, handler) { + events[event].push(handler); + } + + function once(event, handler) { + const handleAndRemove = (...args) => { + off(event, handleAndRemove); + handler(...args); + }; + events[event].push(handleAndRemove); + } + + function off(event, handler) { + if (!event) return Object.keys(events).forEach(ev => events[ev] = []); + if (!handler) return events[event] = []; + events[event] = events[event].filter(ev => ev !== handler); + } + + function trigger(event, ...args) { + events[event].forEach(handler => handler(...args)); + } + + var processingScheduled = false; + function _insert(data, insertAtFront, rejectOnError, callback) { + if (callback != null && typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + + var res, rej; + function promiseCallback(err, ...args) { + // we don't care about the error, let the global error handler + // deal with it + if (err) return rejectOnError ? rej(err) : res(); + if (args.length <= 1) return res(args[0]); + res(args); + } + + var item = q._createTaskItem(data, rejectOnError ? promiseCallback : callback || promiseCallback); + + if (insertAtFront) { + q._tasks.unshift(item); + } else { + q._tasks.push(item); + } + + if (!processingScheduled) { + processingScheduled = true; + (0, _setImmediate2.default)(() => { + processingScheduled = false; + q.process(); + }); + } + + if (rejectOnError || !callback) { + return new Promise((resolve, reject) => { + res = resolve; + rej = reject; + }); + } + } + + function _createCB(tasks) { + return function (err, ...args) { + numRunning -= 1; + + for (var i = 0, l = tasks.length; i < l; i++) { + var task = tasks[i]; + + var index = workersList.indexOf(task); + if (index === 0) { + workersList.shift(); + } else if (index > 0) { + workersList.splice(index, 1); + } + + task.callback(err, ...args); + + if (err != null) { + trigger('error', err, task.data); + } + } + + if (numRunning <= q.concurrency - q.buffer) { + trigger('unsaturated'); + } + + if (q.idle()) { + trigger('drain'); + } + q.process(); + }; + } + + function _maybeDrain(data) { + if (data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + (0, _setImmediate2.default)(() => trigger('drain')); + return true; + } + return false; + } + + const eventMethod = name => handler => { + if (!handler) { + return new Promise((resolve, reject) => { + once(name, (err, data) => { + if (err) return reject(err); + resolve(data); + }); + }); + } + off(name); + on(name, handler); + }; + + var isProcessing = false; + var q = { + _tasks: new _DoublyLinkedList2.default(), + _createTaskItem(data, callback) { + return { + data, + callback + }; + }, + *[Symbol.iterator]() { + yield* q._tasks[Symbol.iterator](); + }, + concurrency, + payload, + buffer: concurrency / 4, + started: false, + paused: false, + push(data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return; + return data.map(datum => _insert(datum, false, false, callback)); + } + return _insert(data, false, false, callback); + }, + pushAsync(data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return; + return data.map(datum => _insert(datum, false, true, callback)); + } + return _insert(data, false, true, callback); + }, + kill() { + off(); + q._tasks.empty(); + }, + unshift(data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return; + return data.map(datum => _insert(datum, true, false, callback)); + } + return _insert(data, true, false, callback); + }, + unshiftAsync(data, callback) { + if (Array.isArray(data)) { + if (_maybeDrain(data)) return; + return data.map(datum => _insert(datum, true, true, callback)); + } + return _insert(data, true, true, callback); + }, + remove(testFn) { + q._tasks.remove(testFn); + }, + process() { + // Avoid trying to start too many processing operations. This can occur + // when callbacks resolve synchronously (#1267). + if (isProcessing) { + return; + } + isProcessing = true; + while (!q.paused && numRunning < q.concurrency && q._tasks.length) { + var tasks = [], + data = []; + var l = q._tasks.length; + if (q.payload) l = Math.min(l, q.payload); + for (var i = 0; i < l; i++) { + var node = q._tasks.shift(); + tasks.push(node); + workersList.push(node); + data.push(node.data); + } + + numRunning += 1; + + if (q._tasks.length === 0) { + trigger('empty'); + } + + if (numRunning === q.concurrency) { + trigger('saturated'); + } + + var cb = (0, _onlyOnce2.default)(_createCB(tasks)); + _worker(data, cb); + } + isProcessing = false; + }, + length() { + return q._tasks.length; + }, + running() { + return numRunning; + }, + workersList() { + return workersList; + }, + idle() { + return q._tasks.length + numRunning === 0; + }, + pause() { + q.paused = true; + }, + resume() { + if (q.paused === false) { + return; + } + q.paused = false; + (0, _setImmediate2.default)(q.process); + } + }; + // define these as fixed properties, so people get useful errors when updating + Object.defineProperties(q, { + saturated: { + writable: false, + value: eventMethod('saturated') + }, + unsaturated: { + writable: false, + value: eventMethod('unsaturated') + }, + empty: { + writable: false, + value: eventMethod('empty') + }, + drain: { + writable: false, + value: eventMethod('drain') + }, + error: { + writable: false, + value: eventMethod('error') + } + }); + return q; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/range.js b/node_backend/node_modules/async/internal/range.js new file mode 100644 index 0000000000000000000000000000000000000000..cc7b3a9cdc4bd1122248ab0975db41290351fef8 --- /dev/null +++ b/node_backend/node_modules/async/internal/range.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = range; +function range(size) { + var result = Array(size); + while (size--) { + result[size] = size; + } + return result; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/reject.js b/node_backend/node_modules/async/internal/reject.js new file mode 100644 index 0000000000000000000000000000000000000000..9d9bc80bc464048ac39b58afb8c14a692eda89d9 --- /dev/null +++ b/node_backend/node_modules/async/internal/reject.js @@ -0,0 +1,26 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reject; + +var _filter = require('./filter.js'); + +var _filter2 = _interopRequireDefault(_filter); + +var _wrapAsync = require('./wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function reject(eachfn, arr, _iteratee, callback) { + const iteratee = (0, _wrapAsync2.default)(_iteratee); + return (0, _filter2.default)(eachfn, arr, (value, cb) => { + iteratee(value, (err, v) => { + cb(err, !v); + }); + }, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/setImmediate.js b/node_backend/node_modules/async/internal/setImmediate.js new file mode 100644 index 0000000000000000000000000000000000000000..513efd13c28363194a5aa7e1a8fd9d12a961bcbe --- /dev/null +++ b/node_backend/node_modules/async/internal/setImmediate.js @@ -0,0 +1,34 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.fallback = fallback; +exports.wrap = wrap; +/* istanbul ignore file */ + +var hasQueueMicrotask = exports.hasQueueMicrotask = typeof queueMicrotask === 'function' && queueMicrotask; +var hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate; +var hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + +function fallback(fn) { + setTimeout(fn, 0); +} + +function wrap(defer) { + return (fn, ...args) => defer(() => fn(...args)); +} + +var _defer; + +if (hasQueueMicrotask) { + _defer = queueMicrotask; +} else if (hasSetImmediate) { + _defer = setImmediate; +} else if (hasNextTick) { + _defer = process.nextTick; +} else { + _defer = fallback; +} + +exports.default = wrap(_defer); \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/withoutIndex.js b/node_backend/node_modules/async/internal/withoutIndex.js new file mode 100644 index 0000000000000000000000000000000000000000..fa91c2d5d2e3e2b124967f0889892849c5367174 --- /dev/null +++ b/node_backend/node_modules/async/internal/withoutIndex.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _withoutIndex; +function _withoutIndex(iteratee) { + return (value, index, callback) => iteratee(value, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/internal/wrapAsync.js b/node_backend/node_modules/async/internal/wrapAsync.js new file mode 100644 index 0000000000000000000000000000000000000000..ad4d619868ab1be3a44f753cd98e87ecb483e9c2 --- /dev/null +++ b/node_backend/node_modules/async/internal/wrapAsync.js @@ -0,0 +1,34 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isAsyncIterable = exports.isAsyncGenerator = exports.isAsync = undefined; + +var _asyncify = require('../asyncify.js'); + +var _asyncify2 = _interopRequireDefault(_asyncify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function isAsync(fn) { + return fn[Symbol.toStringTag] === 'AsyncFunction'; +} + +function isAsyncGenerator(fn) { + return fn[Symbol.toStringTag] === 'AsyncGenerator'; +} + +function isAsyncIterable(obj) { + return typeof obj[Symbol.asyncIterator] === 'function'; +} + +function wrapAsync(asyncFn) { + if (typeof asyncFn !== 'function') throw new Error('expected a function'); + return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn; +} + +exports.default = wrapAsync; +exports.isAsync = isAsync; +exports.isAsyncGenerator = isAsyncGenerator; +exports.isAsyncIterable = isAsyncIterable; \ No newline at end of file diff --git a/node_backend/node_modules/async/log.js b/node_backend/node_modules/async/log.js new file mode 100644 index 0000000000000000000000000000000000000000..332b9da79b0847b38eb87b626d38f58bdd943e85 --- /dev/null +++ b/node_backend/node_modules/async/log.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _consoleFunc = require('./internal/consoleFunc.js'); + +var _consoleFunc2 = _interopRequireDefault(_consoleFunc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Logs the result of an `async` function to the `console`. Only works in + * Node.js or in browsers that support `console.log` and `console.error` (such + * as FF and Chrome). If multiple arguments are returned from the async + * function, `console.log` is called on each argument in order. + * + * @name log + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, 'hello ' + name); + * }, 1000); + * }; + * + * // in the node repl + * node> async.log(hello, 'world'); + * 'hello world' + */ +exports.default = (0, _consoleFunc2.default)('log'); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/map.js b/node_backend/node_modules/async/map.js new file mode 100644 index 0000000000000000000000000000000000000000..c4b7a5ac56169367a10984a0c1efa7be1c07de54 --- /dev/null +++ b/node_backend/node_modules/async/map.js @@ -0,0 +1,142 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _map2 = require('./internal/map.js'); + +var _map3 = _interopRequireDefault(_map2); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Produces a new collection of values by mapping each value in `coll` through + * the `iteratee` function. The `iteratee` is called with an item from `coll` + * and a callback for when it has finished processing. Each of these callbacks + * takes 2 arguments: an `error`, and the transformed item from `coll`. If + * `iteratee` passes an error to its callback, the main `callback` (for the + * `map` function) is immediately called with the error. + * + * Note, that since this function applies the `iteratee` to each item in + * parallel, there is no guarantee that the `iteratee` functions will complete + * in order. However, the results array will be in the same order as the + * original `coll`. + * + * If `map` is passed an Object, the results will be an Array. The results + * will roughly be in the order of the original Objects' keys (but this can + * vary across JavaScript engines). + * + * @name map + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an Array of the + * transformed items from the `coll`. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * // file4.txt does not exist + * + * const fileList = ['file1.txt','file2.txt','file3.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file4.txt']; + * + * // asynchronous function that returns the file size in bytes + * function getFileSizeInBytes(file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, stat.size); + * }); + * } + * + * // Using callbacks + * async.map(fileList, getFileSizeInBytes, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now an array of the file size in bytes for each file, e.g. + * // [ 1000, 2000, 3000] + * } + * }); + * + * // Error Handling + * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(results); + * } + * }); + * + * // Using Promises + * async.map(fileList, getFileSizeInBytes) + * .then( results => { + * console.log(results); + * // results is now an array of the file size in bytes for each file, e.g. + * // [ 1000, 2000, 3000] + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.map(withMissingFileList, getFileSizeInBytes) + * .then( results => { + * console.log(results); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.map(fileList, getFileSizeInBytes); + * console.log(results); + * // results is now an array of the file size in bytes for each file, e.g. + * // [ 1000, 2000, 3000] + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let results = await async.map(withMissingFileList, getFileSizeInBytes); + * console.log(results); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function map(coll, iteratee, callback) { + return (0, _map3.default)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(map, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/mapLimit.js b/node_backend/node_modules/async/mapLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..6ad35724e761de8393f7aa14499c6d259da5d86f --- /dev/null +++ b/node_backend/node_modules/async/mapLimit.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _map2 = require('./internal/map.js'); + +var _map3 = _interopRequireDefault(_map2); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time. + * + * @name mapLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ +function mapLimit(coll, limit, iteratee, callback) { + return (0, _map3.default)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(mapLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/mapSeries.js b/node_backend/node_modules/async/mapSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..8dfdd8aae4b9f55d42057a1db79a07752e061a27 --- /dev/null +++ b/node_backend/node_modules/async/mapSeries.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _map2 = require('./internal/map.js'); + +var _map3 = _interopRequireDefault(_map2); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. + * + * @name mapSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ +function mapSeries(coll, iteratee, callback) { + return (0, _map3.default)(_eachOfSeries2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(mapSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/mapValues.js b/node_backend/node_modules/async/mapValues.js new file mode 100644 index 0000000000000000000000000000000000000000..3d0470e3120c116090476f1fb3b89b9ea0750ce9 --- /dev/null +++ b/node_backend/node_modules/async/mapValues.js @@ -0,0 +1,152 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = mapValues; + +var _mapValuesLimit = require('./mapValuesLimit.js'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. + * + * Produces a new Object by mapping each value of `obj` through the `iteratee` + * function. The `iteratee` is called each `value` and `key` from `obj` and a + * callback for when it has finished processing. Each of these callbacks takes + * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` + * passes an error to its callback, the main `callback` (for the `mapValues` + * function) is immediately called with the error. + * + * Note, the order of the keys in the result is not guaranteed. The keys will + * be roughly in the order they complete, (but this is very engine-specific) + * + * @name mapValues + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * // file4.txt does not exist + * + * const fileMap = { + * f1: 'file1.txt', + * f2: 'file2.txt', + * f3: 'file3.txt' + * }; + * + * const withMissingFileMap = { + * f1: 'file1.txt', + * f2: 'file2.txt', + * f3: 'file4.txt' + * }; + * + * // asynchronous function that returns the file size in bytes + * function getFileSizeInBytes(file, key, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, stat.size); + * }); + * } + * + * // Using callbacks + * async.mapValues(fileMap, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * } else { + * console.log(result); + * // result is now a map of file size in bytes for each file, e.g. + * // { + * // f1: 1000, + * // f2: 2000, + * // f3: 3000 + * // } + * } + * }); + * + * // Error handling + * async.mapValues(withMissingFileMap, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(result); + * } + * }); + * + * // Using Promises + * async.mapValues(fileMap, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * // result is now a map of file size in bytes for each file, e.g. + * // { + * // f1: 1000, + * // f2: 2000, + * // f3: 3000 + * // } + * }).catch (err => { + * console.log(err); + * }); + * + * // Error Handling + * async.mapValues(withMissingFileMap, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * }).catch (err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.mapValues(fileMap, getFileSizeInBytes); + * console.log(result); + * // result is now a map of file size in bytes for each file, e.g. + * // { + * // f1: 1000, + * // f2: 2000, + * // f3: 3000 + * // } + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let result = await async.mapValues(withMissingFileMap, getFileSizeInBytes); + * console.log(result); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function mapValues(obj, iteratee, callback) { + return (0, _mapValuesLimit2.default)(obj, Infinity, iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/mapValuesLimit.js b/node_backend/node_modules/async/mapValuesLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..f59e36f2f66941604baaff074fd3f04a27b94b7b --- /dev/null +++ b/node_backend/node_modules/async/mapValuesLimit.js @@ -0,0 +1,61 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a + * time. + * + * @name mapValuesLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback is passed + */ +function mapValuesLimit(obj, limit, iteratee, callback) { + callback = (0, _once2.default)(callback); + var newObj = {}; + var _iteratee = (0, _wrapAsync2.default)(iteratee); + return (0, _eachOfLimit2.default)(limit)(obj, (val, key, next) => { + _iteratee(val, key, (err, result) => { + if (err) return next(err); + newObj[key] = result; + next(err); + }); + }, err => callback(err, newObj)); +} + +exports.default = (0, _awaitify2.default)(mapValuesLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/mapValuesSeries.js b/node_backend/node_modules/async/mapValuesSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..5f05bf2182af49b729641767c8782c76e6fbbbb3 --- /dev/null +++ b/node_backend/node_modules/async/mapValuesSeries.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = mapValuesSeries; + +var _mapValuesLimit = require('./mapValuesLimit.js'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time. + * + * @name mapValuesSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback is passed + */ +function mapValuesSeries(obj, iteratee, callback) { + return (0, _mapValuesLimit2.default)(obj, 1, iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/memoize.js b/node_backend/node_modules/async/memoize.js new file mode 100644 index 0000000000000000000000000000000000000000..6535d4e4635cb53b5b9554a6dafc756612d38da3 --- /dev/null +++ b/node_backend/node_modules/async/memoize.js @@ -0,0 +1,91 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = memoize; + +var _setImmediate = require('./internal/setImmediate.js'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _initialParams = require('./internal/initialParams.js'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Caches the results of an async function. When creating a hash to store + * function results against, the callback is omitted from the hash and an + * optional hash function can be used. + * + * **Note: if the async function errs, the result will not be cached and + * subsequent calls will call the wrapped function.** + * + * If no hash function is specified, the first argument is used as a hash key, + * which may work reasonably if it is a string or a data type that converts to a + * distinct string. Note that objects and arrays will not behave reasonably. + * Neither will cases where the other arguments are significant. In such cases, + * specify your own hash function. + * + * The cache of results is exposed as the `memo` property of the function + * returned by `memoize`. + * + * @name memoize + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function to proxy and cache results from. + * @param {Function} hasher - An optional function for generating a custom hash + * for storing results. It has all the arguments applied to it apart from the + * callback, and must be synchronous. + * @returns {AsyncFunction} a memoized version of `fn` + * @example + * + * var slow_fn = function(name, callback) { + * // do something + * callback(null, result); + * }; + * var fn = async.memoize(slow_fn); + * + * // fn can now be used as if it were slow_fn + * fn('some name', function() { + * // callback + * }); + */ +function memoize(fn, hasher = v => v) { + var memo = Object.create(null); + var queues = Object.create(null); + var _fn = (0, _wrapAsync2.default)(fn); + var memoized = (0, _initialParams2.default)((args, callback) => { + var key = hasher(...args); + if (key in memo) { + (0, _setImmediate2.default)(() => callback(null, ...memo[key])); + } else if (key in queues) { + queues[key].push(callback); + } else { + queues[key] = [callback]; + _fn(...args, (err, ...resultArgs) => { + // #1465 don't memoize if an error occurred + if (!err) { + memo[key] = resultArgs; + } + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i](err, ...resultArgs); + } + }); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/nextTick.js b/node_backend/node_modules/async/nextTick.js new file mode 100644 index 0000000000000000000000000000000000000000..8ebfda9e62e5f25499a15d1301e3ab2345fa6d0a --- /dev/null +++ b/node_backend/node_modules/async/nextTick.js @@ -0,0 +1,52 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _setImmediate = require('./internal/setImmediate.js'); + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `process.nextTick`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name nextTick + * @static + * @memberOf module:Utils + * @method + * @see [async.setImmediate]{@link module:Utils.setImmediate} + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +var _defer; /* istanbul ignore file */ + + +if (_setImmediate.hasNextTick) { + _defer = process.nextTick; +} else if (_setImmediate.hasSetImmediate) { + _defer = setImmediate; +} else { + _defer = _setImmediate.fallback; +} + +exports.default = (0, _setImmediate.wrap)(_defer); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/package.json b/node_backend/node_modules/async/package.json new file mode 100644 index 0000000000000000000000000000000000000000..bcf4c41b4126cc0f2ccfeeb04be3ee0bc90eae62 --- /dev/null +++ b/node_backend/node_modules/async/package.json @@ -0,0 +1,75 @@ +{ + "name": "async", + "description": "Higher-order functions and common patterns for asynchronous code", + "version": "3.2.6", + "main": "dist/async.js", + "author": "Caolan McMahon", + "homepage": "https://caolan.github.io/async/", + "repository": { + "type": "git", + "url": "https://github.com/caolan/async.git" + }, + "bugs": { + "url": "https://github.com/caolan/async/issues" + }, + "keywords": [ + "async", + "callback", + "module", + "utility" + ], + "devDependencies": { + "@babel/eslint-parser": "^7.16.5", + "@babel/core": "7.25.2", + "babel-minify": "^0.5.0", + "babel-plugin-add-module-exports": "^1.0.4", + "babel-plugin-istanbul": "^7.0.0", + "babel-plugin-syntax-async-generators": "^6.13.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", + "babel-preset-es2015": "^6.3.13", + "babel-preset-es2017": "^6.22.0", + "babel-register": "^6.26.0", + "babelify": "^10.0.0", + "benchmark": "^2.1.1", + "bluebird": "^3.4.6", + "browserify": "^17.0.0", + "chai": "^4.2.0", + "cheerio": "^0.22.0", + "es6-promise": "^4.2.8", + "eslint": "^8.6.0", + "eslint-plugin-prefer-arrow": "^1.2.3", + "fs-extra": "^11.1.1", + "jsdoc": "^4.0.3", + "karma": "^6.3.12", + "karma-browserify": "^8.1.0", + "karma-firefox-launcher": "^2.1.2", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.0", + "karma-safari-launcher": "^1.0.0", + "mocha": "^6.1.4", + "native-promise-only": "^0.8.0-a", + "nyc": "^17.0.0", + "rollup": "^4.2.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-npm": "^2.0.0", + "rsvp": "^4.8.5", + "semver": "^7.3.5", + "yargs": "^17.3.1" + }, + "scripts": { + "coverage": "nyc npm run mocha-node-test -- --grep @nycinvalid --invert", + "jsdoc": "jsdoc -c ./support/jsdoc/jsdoc.json && node support/jsdoc/jsdoc-fix-html.js", + "lint": "eslint --fix .", + "mocha-browser-test": "karma start", + "mocha-node-test": "mocha", + "mocha-test": "npm run mocha-node-test && npm run mocha-browser-test", + "test": "npm run lint && npm run mocha-node-test" + }, + "license": "MIT", + "nyc": { + "exclude": [ + "test" + ] + }, + "module": "dist/async.mjs" +} \ No newline at end of file diff --git a/node_backend/node_modules/async/parallel.js b/node_backend/node_modules/async/parallel.js new file mode 100644 index 0000000000000000000000000000000000000000..2c7976feda3bdb030caa096e148a10e4efc91515 --- /dev/null +++ b/node_backend/node_modules/async/parallel.js @@ -0,0 +1,180 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = parallel; + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _parallel2 = require('./internal/parallel.js'); + +var _parallel3 = _interopRequireDefault(_parallel2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Run the `tasks` collection of functions in parallel, without waiting until + * the previous function has completed. If any of the functions pass an error to + * its callback, the main `callback` is immediately called with the value of the + * error. Once the `tasks` have completed, the results are passed to the final + * `callback` as an array. + * + * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about + * parallel execution of code. If your tasks do not use any timers or perform + * any I/O, they will actually be executed in series. Any synchronous setup + * sections for each task will happen one after the other. JavaScript remains + * single-threaded. + * + * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the + * execution of other tasks when a task fails. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.parallel}. + * + * @name parallel + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * @returns {Promise} a promise, if a callback is not passed + * + * @example + * + * //Using Callbacks + * async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], function(err, results) { + * console.log(results); + * // results is equal to ['one','two'] even though + * // the second function had a shorter timeout. + * }); + * + * // an example using an object instead of an array + * async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }); + * + * //Using Promises + * async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]).then(results => { + * console.log(results); + * // results is equal to ['one','two'] even though + * // the second function had a shorter timeout. + * }).catch(err => { + * console.log(err); + * }); + * + * // an example using an object instead of an array + * async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }).then(results => { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }).catch(err => { + * console.log(err); + * }); + * + * //Using async/await + * async () => { + * try { + * let results = await async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]); + * console.log(results); + * // results is equal to ['one','two'] even though + * // the second function had a shorter timeout. + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // an example using an object instead of an array + * async () => { + * try { + * let results = await async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }); + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function parallel(tasks, callback) { + return (0, _parallel3.default)(_eachOf2.default, tasks, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/parallelLimit.js b/node_backend/node_modules/async/parallelLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..43379572d97931836fd1523c6da42db02660bfce --- /dev/null +++ b/node_backend/node_modules/async/parallelLimit.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = parallelLimit; + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _parallel = require('./internal/parallel.js'); + +var _parallel2 = _interopRequireDefault(_parallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a + * time. + * + * @name parallelLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.parallel]{@link module:ControlFlow.parallel} + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * @returns {Promise} a promise, if a callback is not passed + */ +function parallelLimit(tasks, limit, callback) { + return (0, _parallel2.default)((0, _eachOfLimit2.default)(limit), tasks, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/priorityQueue.js b/node_backend/node_modules/async/priorityQueue.js new file mode 100644 index 0000000000000000000000000000000000000000..16c4daa0b790cbcb18c6a9480300ef27c34079f6 --- /dev/null +++ b/node_backend/node_modules/async/priorityQueue.js @@ -0,0 +1,60 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (worker, concurrency) { + // Start with a normal queue + var q = (0, _queue2.default)(worker, concurrency); + + var { + push, + pushAsync + } = q; + + q._tasks = new _Heap2.default(); + q._createTaskItem = ({ data, priority }, callback) => { + return { + data, + priority, + callback + }; + }; + + function createDataItems(tasks, priority) { + if (!Array.isArray(tasks)) { + return { data: tasks, priority }; + } + return tasks.map(data => { + return { data, priority }; + }); + } + + // Override push to accept second parameter representing priority + q.push = function (data, priority = 0, callback) { + return push(createDataItems(data, priority), callback); + }; + + q.pushAsync = function (data, priority = 0, callback) { + return pushAsync(createDataItems(data, priority), callback); + }; + + // Remove unshift functions + delete q.unshift; + delete q.unshiftAsync; + + return q; +}; + +var _queue = require('./queue.js'); + +var _queue2 = _interopRequireDefault(_queue); + +var _Heap = require('./internal/Heap.js'); + +var _Heap2 = _interopRequireDefault(_Heap); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/queue.js b/node_backend/node_modules/async/queue.js new file mode 100644 index 0000000000000000000000000000000000000000..c01340dc2d5addb664b4a9669515342371e158c6 --- /dev/null +++ b/node_backend/node_modules/async/queue.js @@ -0,0 +1,24 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (worker, concurrency) { + var _worker = (0, _wrapAsync2.default)(worker); + return (0, _queue2.default)((items, cb) => { + _worker(items[0], cb); + }, concurrency, 1); +}; + +var _queue = require('./internal/queue.js'); + +var _queue2 = _interopRequireDefault(_queue); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/race.js b/node_backend/node_modules/async/race.js new file mode 100644 index 0000000000000000000000000000000000000000..aa167be3f3481ddcf6cc68ed7f7e2aeea69a544d --- /dev/null +++ b/node_backend/node_modules/async/race.js @@ -0,0 +1,67 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Runs the `tasks` array of functions in parallel, without waiting until the + * previous function has completed. Once any of the `tasks` complete or pass an + * error to its callback, the main `callback` is immediately called. It's + * equivalent to `Promise.race()`. + * + * @name race + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} + * to run. Each function can complete with an optional `result` value. + * @param {Function} callback - A callback to run once any of the functions have + * completed. This function gets an error or result from the first function that + * completed. Invoked with (err, result). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * async.race([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // main callback + * function(err, result) { + * // the result will be equal to 'two' as it finishes earlier + * }); + */ +function race(tasks, callback) { + callback = (0, _once2.default)(callback); + if (!Array.isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); + if (!tasks.length) return callback(); + for (var i = 0, l = tasks.length; i < l; i++) { + (0, _wrapAsync2.default)(tasks[i])(callback); + } +} + +exports.default = (0, _awaitify2.default)(race, 2); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/reduce.js b/node_backend/node_modules/async/reduce.js new file mode 100644 index 0000000000000000000000000000000000000000..8a69548a6efd9e974b5281f3bda4e29b1b1a48a2 --- /dev/null +++ b/node_backend/node_modules/async/reduce.js @@ -0,0 +1,153 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Reduces `coll` into a single value using an async `iteratee` to return each + * successive step. `memo` is the initial state of the reduction. This function + * only operates in series. + * + * For performance reasons, it may make sense to split a call to this function + * into a parallel map, and then use the normal `Array.prototype.reduce` on the + * results. This function is for situations where each step in the reduction + * needs to be async; if you can get the data before reducing it, then it's + * probably a good idea to do so. + * + * @name reduce + * @static + * @memberOf module:Collections + * @method + * @alias inject + * @alias foldl + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee completes with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * // file4.txt does not exist + * + * const fileList = ['file1.txt','file2.txt','file3.txt']; + * const withMissingFileList = ['file1.txt','file2.txt','file3.txt', 'file4.txt']; + * + * // asynchronous function that computes the file size in bytes + * // file size is added to the memoized value, then returned + * function getFileSizeInBytes(memo, file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, memo + stat.size); + * }); + * } + * + * // Using callbacks + * async.reduce(fileList, 0, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * } else { + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * } + * }); + * + * // Error Handling + * async.reduce(withMissingFileList, 0, getFileSizeInBytes, function(err, result) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(result); + * } + * }); + * + * // Using Promises + * async.reduce(fileList, 0, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * }).catch( err => { + * console.log(err); + * }); + * + * // Error Handling + * async.reduce(withMissingFileList, 0, getFileSizeInBytes) + * .then( result => { + * console.log(result); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.reduce(fileList, 0, getFileSizeInBytes); + * console.log(result); + * // 6000 + * // which is the sum of the file sizes of the three files + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // Error Handling + * async () => { + * try { + * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes); + * console.log(result); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function reduce(coll, memo, iteratee, callback) { + callback = (0, _once2.default)(callback); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + return (0, _eachOfSeries2.default)(coll, (x, i, iterCb) => { + _iteratee(memo, x, (err, v) => { + memo = v; + iterCb(err); + }); + }, err => callback(err, memo)); +} +exports.default = (0, _awaitify2.default)(reduce, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/reduceRight.js b/node_backend/node_modules/async/reduceRight.js new file mode 100644 index 0000000000000000000000000000000000000000..5be1b68dca537ea15872ba4b2710ad8c36b47a72 --- /dev/null +++ b/node_backend/node_modules/async/reduceRight.js @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reduceRight; + +var _reduce = require('./reduce.js'); + +var _reduce2 = _interopRequireDefault(_reduce); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. + * + * @name reduceRight + * @static + * @memberOf module:Collections + * @method + * @see [async.reduce]{@link module:Collections.reduce} + * @alias foldr + * @category Collection + * @param {Array} array - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee completes with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + * @returns {Promise} a promise, if no callback is passed + */ +function reduceRight(array, memo, iteratee, callback) { + var reversed = [...array].reverse(); + return (0, _reduce2.default)(reversed, memo, iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/reflect.js b/node_backend/node_modules/async/reflect.js new file mode 100644 index 0000000000000000000000000000000000000000..39544956bed6c12b7b6f2e2d70512c975d071905 --- /dev/null +++ b/node_backend/node_modules/async/reflect.js @@ -0,0 +1,78 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reflect; + +var _initialParams = require('./internal/initialParams.js'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Wraps the async function in another function that always completes with a + * result object, even when it errors. + * + * The result object has either the property `error` or `value`. + * + * @name reflect + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function you want to wrap + * @returns {Function} - A function that always passes null to it's callback as + * the error. The second argument to the callback will be an `object` with + * either an `error` or a `value` property. + * @example + * + * async.parallel([ + * async.reflect(function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }), + * async.reflect(function(callback) { + * // do some more stuff but error ... + * callback('bad stuff happened'); + * }), + * async.reflect(function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * }) + * ], + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = 'bad stuff happened' + * // results[2].value = 'two' + * }); + */ +function reflect(fn) { + var _fn = (0, _wrapAsync2.default)(fn); + return (0, _initialParams2.default)(function reflectOn(args, reflectCallback) { + args.push((error, ...cbArgs) => { + let retVal = {}; + if (error) { + retVal.error = error; + } + if (cbArgs.length > 0) { + var value = cbArgs; + if (cbArgs.length <= 1) { + [value] = cbArgs; + } + retVal.value = value; + } + reflectCallback(null, retVal); + }); + + return _fn.apply(this, args); + }); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/reflectAll.js b/node_backend/node_modules/async/reflectAll.js new file mode 100644 index 0000000000000000000000000000000000000000..b78d598bf5715af8872371a55f0f356e02e15393 --- /dev/null +++ b/node_backend/node_modules/async/reflectAll.js @@ -0,0 +1,93 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reflectAll; + +var _reflect = require('./reflect.js'); + +var _reflect2 = _interopRequireDefault(_reflect); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A helper function that wraps an array or an object of functions with `reflect`. + * + * @name reflectAll + * @static + * @memberOf module:Utils + * @method + * @see [async.reflect]{@link module:Utils.reflect} + * @category Util + * @param {Array|Object|Iterable} tasks - The collection of + * [async functions]{@link AsyncFunction} to wrap in `async.reflect`. + * @returns {Array} Returns an array of async functions, each wrapped in + * `async.reflect` + * @example + * + * let tasks = [ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * // do some more stuff but error ... + * callback(new Error('bad stuff happened')); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = Error('bad stuff happened') + * // results[2].value = 'two' + * }); + * + * // an example using an object instead of an array + * let tasks = { + * one: function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * two: function(callback) { + * callback('two'); + * }, + * three: function(callback) { + * setTimeout(function() { + * callback(null, 'three'); + * }, 100); + * } + * }; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results.one.value = 'one' + * // results.two.error = 'two' + * // results.three.value = 'three' + * }); + */ +function reflectAll(tasks) { + var results; + if (Array.isArray(tasks)) { + results = tasks.map(_reflect2.default); + } else { + results = {}; + Object.keys(tasks).forEach(key => { + results[key] = _reflect2.default.call(this, tasks[key]); + }); + } + return results; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/reject.js b/node_backend/node_modules/async/reject.js new file mode 100644 index 0000000000000000000000000000000000000000..895949bd899bcf749545cc62dc1ae42d3926634f --- /dev/null +++ b/node_backend/node_modules/async/reject.js @@ -0,0 +1,87 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reject2 = require('./internal/reject.js'); + +var _reject3 = _interopRequireDefault(_reject2); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test. + * + * @name reject + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.reject(fileList, fileExists, function(err, results) { + * // [ 'dir3/file6.txt' ] + * // results now equals an array of the non-existing files + * }); + * + * // Using Promises + * async.reject(fileList, fileExists) + * .then( results => { + * console.log(results); + * // [ 'dir3/file6.txt' ] + * // results now equals an array of the non-existing files + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.reject(fileList, fileExists); + * console.log(results); + * // [ 'dir3/file6.txt' ] + * // results now equals an array of the non-existing files + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function reject(coll, iteratee, callback) { + return (0, _reject3.default)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(reject, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/rejectLimit.js b/node_backend/node_modules/async/rejectLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..ce10edf57e9139c8f9800e5d9bb675b0d5f6c3d7 --- /dev/null +++ b/node_backend/node_modules/async/rejectLimit.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reject2 = require('./internal/reject.js'); + +var _reject3 = _interopRequireDefault(_reject2); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a + * time. + * + * @name rejectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ +function rejectLimit(coll, limit, iteratee, callback) { + return (0, _reject3.default)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(rejectLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/rejectSeries.js b/node_backend/node_modules/async/rejectSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..c08e413f97462cc6240f9026561d132e910c8e9c --- /dev/null +++ b/node_backend/node_modules/async/rejectSeries.js @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reject2 = require('./internal/reject.js'); + +var _reject3 = _interopRequireDefault(_reject2); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. + * + * @name rejectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback is passed + */ +function rejectSeries(coll, iteratee, callback) { + return (0, _reject3.default)(_eachOfSeries2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(rejectSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/retry.js b/node_backend/node_modules/async/retry.js new file mode 100644 index 0000000000000000000000000000000000000000..a4b02356f3693fa9f71063b181d3b2f88ea23978 --- /dev/null +++ b/node_backend/node_modules/async/retry.js @@ -0,0 +1,159 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = retry; + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _promiseCallback = require('./internal/promiseCallback.js'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function constant(value) { + return function () { + return value; + }; +} + +/** + * Attempts to get a successful response from `task` no more than `times` times + * before returning an error. If the task is successful, the `callback` will be + * passed the result of the successful task. If all attempts fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name retry + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @see [async.retryable]{@link module:ControlFlow.retryable} + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an + * object with `times` and `interval` or a number. + * * `times` - The number of attempts to make before giving up. The default + * is `5`. + * * `interval` - The time to wait between retries, in milliseconds. The + * default is `0`. The interval may also be specified as a function of the + * retry count (see example). + * * `errorFilter` - An optional synchronous function that is invoked on + * erroneous result. If it returns `true` the retry attempts will continue; + * if the function returns `false` the retry flow is aborted with the current + * attempt's error and result being returned to the final callback. + * Invoked with (err). + * * If `opts` is a number, the number specifies the number of times to retry, + * with the default interval of `0`. + * @param {AsyncFunction} task - An async function to retry. + * Invoked with (callback). + * @param {Function} [callback] - An optional callback which is called when the + * task has succeeded, or after the final failed attempt. It receives the `err` + * and `result` arguments of the last attempt at completing the `task`. Invoked + * with (err, results). + * @returns {Promise} a promise if no callback provided + * + * @example + * + * // The `retry` function can be used as a stand-alone control flow by passing + * // a callback, as shown below: + * + * // try calling apiMethod 3 times + * async.retry(3, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 3 times, waiting 200 ms between each retry + * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 10 times with exponential backoff + * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) + * async.retry({ + * times: 10, + * interval: function(retryCount) { + * return 50 * Math.pow(2, retryCount); + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod the default 5 times no delay between each retry + * async.retry(apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod only when error condition satisfies, all other + * // errors will abort the retry control flow and return to final callback + * async.retry({ + * errorFilter: function(err) { + * return err.message === 'Temporary error'; // only retry on a specific error + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // to retry individual methods that are not as reliable within other + * // control flow functions, use the `retryable` wrapper: + * async.auto({ + * users: api.getUsers.bind(api), + * payments: async.retryable(3, api.getPayments.bind(api)) + * }, function(err, results) { + * // do something with the results + * }); + * + */ +const DEFAULT_TIMES = 5; +const DEFAULT_INTERVAL = 0; + +function retry(opts, task, callback) { + var options = { + times: DEFAULT_TIMES, + intervalFunc: constant(DEFAULT_INTERVAL) + }; + + if (arguments.length < 3 && typeof opts === 'function') { + callback = task || (0, _promiseCallback.promiseCallback)(); + task = opts; + } else { + parseTimes(options, opts); + callback = callback || (0, _promiseCallback.promiseCallback)(); + } + + if (typeof task !== 'function') { + throw new Error("Invalid arguments for async.retry"); + } + + var _task = (0, _wrapAsync2.default)(task); + + var attempt = 1; + function retryAttempt() { + _task((err, ...args) => { + if (err === false) return; + if (err && attempt++ < options.times && (typeof options.errorFilter != 'function' || options.errorFilter(err))) { + setTimeout(retryAttempt, options.intervalFunc(attempt - 1)); + } else { + callback(err, ...args); + } + }); + } + + retryAttempt(); + return callback[_promiseCallback.PROMISE_SYMBOL]; +} + +function parseTimes(acc, t) { + if (typeof t === 'object') { + acc.times = +t.times || DEFAULT_TIMES; + + acc.intervalFunc = typeof t.interval === 'function' ? t.interval : constant(+t.interval || DEFAULT_INTERVAL); + + acc.errorFilter = t.errorFilter; + } else if (typeof t === 'number' || typeof t === 'string') { + acc.times = +t || DEFAULT_TIMES; + } else { + throw new Error("Invalid arguments for async.retry"); + } +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/retryable.js b/node_backend/node_modules/async/retryable.js new file mode 100644 index 0000000000000000000000000000000000000000..68256c3162dc85500c8605fde839ff866c237bc4 --- /dev/null +++ b/node_backend/node_modules/async/retryable.js @@ -0,0 +1,77 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = retryable; + +var _retry = require('./retry.js'); + +var _retry2 = _interopRequireDefault(_retry); + +var _initialParams = require('./internal/initialParams.js'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _promiseCallback = require('./internal/promiseCallback.js'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method + * wraps a task and makes it retryable, rather than immediately calling it + * with retries. + * + * @name retryable + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.retry]{@link module:ControlFlow.retry} + * @category Control Flow + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional + * options, exactly the same as from `retry`, except for a `opts.arity` that + * is the arity of the `task` function, defaulting to `task.length` + * @param {AsyncFunction} task - the asynchronous function to wrap. + * This function will be passed any arguments passed to the returned wrapper. + * Invoked with (...args, callback). + * @returns {AsyncFunction} The wrapped function, which when invoked, will + * retry on an error, based on the parameters specified in `opts`. + * This function will accept the same parameters as `task`. + * @example + * + * async.auto({ + * dep1: async.retryable(3, getFromFlakyService), + * process: ["dep1", async.retryable(3, function (results, cb) { + * maybeProcessData(results.dep1, cb); + * })] + * }, callback); + */ +function retryable(opts, task) { + if (!task) { + task = opts; + opts = null; + } + let arity = opts && opts.arity || task.length; + if ((0, _wrapAsync.isAsync)(task)) { + arity += 1; + } + var _task = (0, _wrapAsync2.default)(task); + return (0, _initialParams2.default)((args, callback) => { + if (args.length < arity - 1 || callback == null) { + args.push(callback); + callback = (0, _promiseCallback.promiseCallback)(); + } + function taskFn(cb) { + _task(...args, cb); + } + + if (opts) (0, _retry2.default)(opts, taskFn, callback);else (0, _retry2.default)(taskFn, callback); + + return callback[_promiseCallback.PROMISE_SYMBOL]; + }); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/select.js b/node_backend/node_modules/async/select.js new file mode 100644 index 0000000000000000000000000000000000000000..2c9a63de5b447820152e40c6be73bd97a0e56964 --- /dev/null +++ b/node_backend/node_modules/async/select.js @@ -0,0 +1,93 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter2 = require('./internal/filter.js'); + +var _filter3 = _interopRequireDefault(_filter2); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * + * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt']; + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.filter(files, fileExists, function(err, results) { + * if(err) { + * console.log(err); + * } else { + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * } + * }); + * + * // Using Promises + * async.filter(files, fileExists) + * .then(results => { + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let results = await async.filter(files, fileExists); + * console.log(results); + * // [ 'dir1/file1.txt', 'dir2/file3.txt' ] + * // results is now an array of the existing files + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function filter(coll, iteratee, callback) { + return (0, _filter3.default)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(filter, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/selectLimit.js b/node_backend/node_modules/async/selectLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..d3b3f50c61df2797efade248307ee679548fcf3e --- /dev/null +++ b/node_backend/node_modules/async/selectLimit.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter2 = require('./internal/filter.js'); + +var _filter3 = _interopRequireDefault(_filter2); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a + * time. + * + * @name filterLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @returns {Promise} a promise, if no callback provided + */ +function filterLimit(coll, limit, iteratee, callback) { + return (0, _filter3.default)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(filterLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/selectSeries.js b/node_backend/node_modules/async/selectSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..019a2d0a9d50a34760b3d5a5d6f366509e4e381e --- /dev/null +++ b/node_backend/node_modules/async/selectSeries.js @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter2 = require('./internal/filter.js'); + +var _filter3 = _interopRequireDefault(_filter2); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. + * + * @name filterSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectSeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results) + * @returns {Promise} a promise, if no callback provided + */ +function filterSeries(coll, iteratee, callback) { + return (0, _filter3.default)(_eachOfSeries2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(filterSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/seq.js b/node_backend/node_modules/async/seq.js new file mode 100644 index 0000000000000000000000000000000000000000..e7881cd011b2404619230d39eb2ae7522f7159e0 --- /dev/null +++ b/node_backend/node_modules/async/seq.js @@ -0,0 +1,79 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = seq; + +var _reduce = require('./reduce.js'); + +var _reduce2 = _interopRequireDefault(_reduce); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _promiseCallback = require('./internal/promiseCallback.js'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Version of the compose function that is more natural to read. Each function + * consumes the return value of the previous function. It is the equivalent of + * [compose]{@link module:ControlFlow.compose} with the arguments reversed. + * + * Each function is executed with the `this` binding of the composed function. + * + * @name seq + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.compose]{@link module:ControlFlow.compose} + * @category Control Flow + * @param {...AsyncFunction} functions - the asynchronous functions to compose + * @returns {Function} a function that composes the `functions` in order + * @example + * + * // Requires lodash (or underscore), express3 and dresende's orm2. + * // Part of an app, that fetches cats of the logged user. + * // This example uses `seq` function to avoid overnesting and error + * // handling clutter. + * app.get('/cats', function(request, response) { + * var User = request.models.User; + * async.seq( + * User.get.bind(User), // 'User.get' has signature (id, callback(err, data)) + * function(user, fn) { + * user.getCats(fn); // 'getCats' has signature (callback(err, data)) + * } + * )(req.session.user_id, function (err, cats) { + * if (err) { + * console.error(err); + * response.json({ status: 'error', message: err.message }); + * } else { + * response.json({ status: 'ok', message: 'Cats found', data: cats }); + * } + * }); + * }); + */ +function seq(...functions) { + var _functions = functions.map(_wrapAsync2.default); + return function (...args) { + var that = this; + + var cb = args[args.length - 1]; + if (typeof cb == 'function') { + args.pop(); + } else { + cb = (0, _promiseCallback.promiseCallback)(); + } + + (0, _reduce2.default)(_functions, args, (newargs, fn, iterCb) => { + fn.apply(that, newargs.concat((err, ...nextargs) => { + iterCb(err, nextargs); + })); + }, (err, results) => cb(err, ...results)); + + return cb[_promiseCallback.PROMISE_SYMBOL]; + }; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/series.js b/node_backend/node_modules/async/series.js new file mode 100644 index 0000000000000000000000000000000000000000..60c17ed655d31b9752a22a217892270640d68c89 --- /dev/null +++ b/node_backend/node_modules/async/series.js @@ -0,0 +1,186 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = series; + +var _parallel2 = require('./internal/parallel.js'); + +var _parallel3 = _interopRequireDefault(_parallel2); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Run the functions in the `tasks` collection in series, each one running once + * the previous function has completed. If any functions in the series pass an + * error to its callback, no more functions are run, and `callback` is + * immediately called with the value of the error. Otherwise, `callback` + * receives an array of results when `tasks` have completed. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function, and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.series}. + * + * **Note** that while many implementations preserve the order of object + * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) + * explicitly states that + * + * > The mechanics and order of enumerating the properties is not specified. + * + * So if you rely on the order in which your series of functions are executed, + * and want this to work on all platforms, consider using an array. + * + * @name series + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing + * [async functions]{@link AsyncFunction} to run in series. + * Each function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This function gets a results array (or object) + * containing all the result arguments passed to the `task` callbacks. Invoked + * with (err, result). + * @return {Promise} a promise, if no callback is passed + * @example + * + * //Using Callbacks + * async.series([ + * function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 'two'); + * }, 100); + * } + * ], function(err, results) { + * console.log(results); + * // results is equal to ['one','two'] + * }); + * + * // an example using objects instead of arrays + * async.series({ + * one: function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }); + * + * //Using Promises + * async.series([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]).then(results => { + * console.log(results); + * // results is equal to ['one','two'] + * }).catch(err => { + * console.log(err); + * }); + * + * // an example using an object instead of an array + * async.series({ + * one: function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 2); + * }, 100); + * } + * }).then(results => { + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * }).catch(err => { + * console.log(err); + * }); + * + * //Using async/await + * async () => { + * try { + * let results = await async.series([ + * function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 'two'); + * }, 100); + * } + * ]); + * console.log(results); + * // results is equal to ['one','two'] + * } + * catch (err) { + * console.log(err); + * } + * } + * + * // an example using an object instead of an array + * async () => { + * try { + * let results = await async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * // do some async task + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * // then do another async task + * callback(null, 2); + * }, 100); + * } + * }); + * console.log(results); + * // results is equal to: { one: 1, two: 2 } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function series(tasks, callback) { + return (0, _parallel3.default)(_eachOfSeries2.default, tasks, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/setImmediate.js b/node_backend/node_modules/async/setImmediate.js new file mode 100644 index 0000000000000000000000000000000000000000..eea86771731514f526313858e88973e50ba5e157 --- /dev/null +++ b/node_backend/node_modules/async/setImmediate.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _setImmediate = require('./internal/setImmediate.js'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `setImmediate`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name setImmediate + * @static + * @memberOf module:Utils + * @method + * @see [async.nextTick]{@link module:Utils.nextTick} + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +exports.default = _setImmediate2.default; +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/some.js b/node_backend/node_modules/async/some.js new file mode 100644 index 0000000000000000000000000000000000000000..a5bd328abe14685f2a467aa57e630be88158476f --- /dev/null +++ b/node_backend/node_modules/async/some.js @@ -0,0 +1,122 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // dir1 is a directory that contains file1.txt, file2.txt + * // dir2 is a directory that contains file3.txt, file4.txt + * // dir3 is a directory that contains file5.txt + * // dir4 does not exist + * + * // asynchronous function that checks if a file exists + * function fileExists(file, callback) { + * fs.access(file, fs.constants.F_OK, (err) => { + * callback(null, !err); + * }); + * } + * + * // Using callbacks + * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // true + * // result is true since some file in the list exists + * } + *); + * + * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists, + * function(err, result) { + * console.log(result); + * // false + * // result is false since none of the files exists + * } + *); + * + * // Using Promises + * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists) + * .then( result => { + * console.log(result); + * // true + * // result is true since some file in the list exists + * }).catch( err => { + * console.log(err); + * }); + * + * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists) + * .then( result => { + * console.log(result); + * // false + * // result is false since none of the files exists + * }).catch( err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists); + * console.log(result); + * // true + * // result is true since some file in the list exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + * async () => { + * try { + * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists); + * console.log(result); + * // false + * // result is false since none of the files exists + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function some(coll, iteratee, callback) { + return (0, _createTester2.default)(Boolean, res => res)(_eachOf2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(some, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/someLimit.js b/node_backend/node_modules/async/someLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..3a8096fdaac1b272d6a66ab985ff22dec372dd73 --- /dev/null +++ b/node_backend/node_modules/async/someLimit.js @@ -0,0 +1,47 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfLimit = require('./internal/eachOfLimit.js'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function someLimit(coll, limit, iteratee, callback) { + return (0, _createTester2.default)(Boolean, res => res)((0, _eachOfLimit2.default)(limit), coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(someLimit, 4); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/someSeries.js b/node_backend/node_modules/async/someSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..51aad19bdc2a5fc65cced4db170d273d94ba5790 --- /dev/null +++ b/node_backend/node_modules/async/someSeries.js @@ -0,0 +1,46 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester.js'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _eachOfSeries = require('./eachOfSeries.js'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. + * + * @name someSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anySeries + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in series. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + */ +function someSeries(coll, iteratee, callback) { + return (0, _createTester2.default)(Boolean, res => res)(_eachOfSeries2.default, coll, iteratee, callback); +} +exports.default = (0, _awaitify2.default)(someSeries, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/sortBy.js b/node_backend/node_modules/async/sortBy.js new file mode 100644 index 0000000000000000000000000000000000000000..0988b612013a6395ea666ea80abcc92d7cd68147 --- /dev/null +++ b/node_backend/node_modules/async/sortBy.js @@ -0,0 +1,190 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _map = require('./map.js'); + +var _map2 = _interopRequireDefault(_map); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Sorts a list by the results of running each `coll` value through an async + * `iteratee`. + * + * @name sortBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a value to use as the sort criteria as + * its `result`. + * Invoked with (item, callback). + * @param {Function} callback - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is the items + * from the original `coll` sorted by the values returned by the `iteratee` + * calls. Invoked with (err, results). + * @returns {Promise} a promise, if no callback passed + * @example + * + * // bigfile.txt is a file that is 251100 bytes in size + * // mediumfile.txt is a file that is 11000 bytes in size + * // smallfile.txt is a file that is 121 bytes in size + * + * // asynchronous function that returns the file size in bytes + * function getFileSizeInBytes(file, callback) { + * fs.stat(file, function(err, stat) { + * if (err) { + * return callback(err); + * } + * callback(null, stat.size); + * }); + * } + * + * // Using callbacks + * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes, + * function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * } + * } + * ); + * + * // By modifying the callback parameter the + * // sorting order can be influenced: + * + * // ascending order + * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) { + * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) { + * if (getFileSizeErr) return callback(getFileSizeErr); + * callback(null, fileSize); + * }); + * }, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * } + * } + * ); + * + * // descending order + * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) { + * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) { + * if (getFileSizeErr) { + * return callback(getFileSizeErr); + * } + * callback(null, fileSize * -1); + * }); + * }, function(err, results) { + * if (err) { + * console.log(err); + * } else { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt'] + * } + * } + * ); + * + * // Error handling + * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes, + * function(err, results) { + * if (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } else { + * console.log(results); + * } + * } + * ); + * + * // Using Promises + * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes) + * .then( results => { + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * }).catch( err => { + * console.log(err); + * }); + * + * // Error handling + * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes) + * .then( results => { + * console.log(results); + * }).catch( err => { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * }); + * + * // Using async/await + * (async () => { + * try { + * let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes); + * console.log(results); + * // results is now the original array of files sorted by + * // file size (ascending by default), e.g. + * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt'] + * } + * catch (err) { + * console.log(err); + * } + * })(); + * + * // Error handling + * async () => { + * try { + * let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes); + * console.log(results); + * } + * catch (err) { + * console.log(err); + * // [ Error: ENOENT: no such file or directory ] + * } + * } + * + */ +function sortBy(coll, iteratee, callback) { + var _iteratee = (0, _wrapAsync2.default)(iteratee); + return (0, _map2.default)(coll, (x, iterCb) => { + _iteratee(x, (err, criteria) => { + if (err) return iterCb(err); + iterCb(err, { value: x, criteria }); + }); + }, (err, results) => { + if (err) return callback(err); + callback(null, results.sort(comparator).map(v => v.value)); + }); + + function comparator(left, right) { + var a = left.criteria, + b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } +} +exports.default = (0, _awaitify2.default)(sortBy, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/timeout.js b/node_backend/node_modules/async/timeout.js new file mode 100644 index 0000000000000000000000000000000000000000..46bb233af39052501adc7110c5fb1dad7fa1184d --- /dev/null +++ b/node_backend/node_modules/async/timeout.js @@ -0,0 +1,89 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = timeout; + +var _initialParams = require('./internal/initialParams.js'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Sets a time limit on an asynchronous function. If the function does not call + * its callback within the specified milliseconds, it will be called with a + * timeout error. The code property for the error object will be `'ETIMEDOUT'`. + * + * @name timeout + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} asyncFn - The async function to limit in time. + * @param {number} milliseconds - The specified time limit. + * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) + * to timeout Error for more information.. + * @returns {AsyncFunction} Returns a wrapped function that can be used with any + * of the control flow functions. + * Invoke this function with the same parameters as you would `asyncFunc`. + * @example + * + * function myFunction(foo, callback) { + * doAsyncTask(foo, function(err, data) { + * // handle errors + * if (err) return callback(err); + * + * // do some stuff ... + * + * // return processed data + * return callback(null, data); + * }); + * } + * + * var wrapped = async.timeout(myFunction, 1000); + * + * // call `wrapped` as you would `myFunction` + * wrapped({ bar: 'bar' }, function(err, data) { + * // if `myFunction` takes < 1000 ms to execute, `err` + * // and `data` will have their expected values + * + * // else `err` will be an Error with the code 'ETIMEDOUT' + * }); + */ +function timeout(asyncFn, milliseconds, info) { + var fn = (0, _wrapAsync2.default)(asyncFn); + + return (0, _initialParams2.default)((args, callback) => { + var timedOut = false; + var timer; + + function timeoutCallback() { + var name = asyncFn.name || 'anonymous'; + var error = new Error('Callback function "' + name + '" timed out.'); + error.code = 'ETIMEDOUT'; + if (info) { + error.info = info; + } + timedOut = true; + callback(error); + } + + args.push((...cbArgs) => { + if (!timedOut) { + callback(...cbArgs); + clearTimeout(timer); + } + }); + + // setup timer and call original function + timer = setTimeout(timeoutCallback, milliseconds); + fn(...args); + }); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/times.js b/node_backend/node_modules/async/times.js new file mode 100644 index 0000000000000000000000000000000000000000..ca7df517be584d880d1bf1c25e6138aad2ec4ae6 --- /dev/null +++ b/node_backend/node_modules/async/times.js @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = times; + +var _timesLimit = require('./timesLimit.js'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls the `iteratee` function `n` times, and accumulates results in the same + * manner you would use with [map]{@link module:Collections.map}. + * + * @name times + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.map]{@link module:Collections.map} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @returns {Promise} a promise, if no callback is provided + * @example + * + * // Pretend this is some complicated async factory + * var createUser = function(id, callback) { + * callback(null, { + * id: 'user' + id + * }); + * }; + * + * // generate 5 users + * async.times(5, function(n, next) { + * createUser(n, function(err, user) { + * next(err, user); + * }); + * }, function(err, users) { + * // we should now have 5 users + * }); + */ +function times(n, iteratee, callback) { + return (0, _timesLimit2.default)(n, Infinity, iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/timesLimit.js b/node_backend/node_modules/async/timesLimit.js new file mode 100644 index 0000000000000000000000000000000000000000..f76de250c85b9aca462fcc55eaefa665eb8b58bc --- /dev/null +++ b/node_backend/node_modules/async/timesLimit.js @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = timesLimit; + +var _mapLimit = require('./mapLimit.js'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _range = require('./internal/range.js'); + +var _range2 = _interopRequireDefault(_range); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a + * time. + * + * @name timesLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} count - The number of times to run the function. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see [async.map]{@link module:Collections.map}. + * @returns {Promise} a promise, if no callback is provided + */ +function timesLimit(count, limit, iteratee, callback) { + var _iteratee = (0, _wrapAsync2.default)(iteratee); + return (0, _mapLimit2.default)((0, _range2.default)(count), limit, _iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/timesSeries.js b/node_backend/node_modules/async/timesSeries.js new file mode 100644 index 0000000000000000000000000000000000000000..776b4f3afecd27ab755f223f4e0e7376e9400262 --- /dev/null +++ b/node_backend/node_modules/async/timesSeries.js @@ -0,0 +1,32 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = timesSeries; + +var _timesLimit = require('./timesLimit.js'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time. + * + * @name timesSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @returns {Promise} a promise, if no callback is provided + */ +function timesSeries(n, iteratee, callback) { + return (0, _timesLimit2.default)(n, 1, iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/transform.js b/node_backend/node_modules/async/transform.js new file mode 100644 index 0000000000000000000000000000000000000000..75dadea87ebe66ffa5832e466790cd74ec1e87ea --- /dev/null +++ b/node_backend/node_modules/async/transform.js @@ -0,0 +1,173 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = transform; + +var _eachOf = require('./eachOf.js'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _promiseCallback = require('./internal/promiseCallback.js'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A relative of `reduce`. Takes an Object or Array, and iterates over each + * element in parallel, each step potentially mutating an `accumulator` value. + * The type of the accumulator defaults to the type of collection passed in. + * + * @name transform + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over. + * @param {*} [accumulator] - The initial state of the transform. If omitted, + * it will default to an empty Object or Array, depending on the type of `coll` + * @param {AsyncFunction} iteratee - A function applied to each item in the + * collection that potentially modifies the accumulator. + * Invoked with (accumulator, item, key, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the transformed accumulator. + * Invoked with (err, result). + * @returns {Promise} a promise, if no callback provided + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * + * // helper function that returns human-readable size format from bytes + * function formatBytes(bytes, decimals = 2) { + * // implementation not included for brevity + * return humanReadbleFilesize; + * } + * + * const fileList = ['file1.txt','file2.txt','file3.txt']; + * + * // asynchronous function that returns the file size, transformed to human-readable format + * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc. + * function transformFileSize(acc, value, key, callback) { + * fs.stat(value, function(err, stat) { + * if (err) { + * return callback(err); + * } + * acc[key] = formatBytes(stat.size); + * callback(null); + * }); + * } + * + * // Using callbacks + * async.transform(fileList, transformFileSize, function(err, result) { + * if(err) { + * console.log(err); + * } else { + * console.log(result); + * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ] + * } + * }); + * + * // Using Promises + * async.transform(fileList, transformFileSize) + * .then(result => { + * console.log(result); + * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ] + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * (async () => { + * try { + * let result = await async.transform(fileList, transformFileSize); + * console.log(result); + * // [ '1000 Bytes', '1.95 KB', '2.93 KB' ] + * } + * catch (err) { + * console.log(err); + * } + * })(); + * + * @example + * + * // file1.txt is a file that is 1000 bytes in size + * // file2.txt is a file that is 2000 bytes in size + * // file3.txt is a file that is 3000 bytes in size + * + * // helper function that returns human-readable size format from bytes + * function formatBytes(bytes, decimals = 2) { + * // implementation not included for brevity + * return humanReadbleFilesize; + * } + * + * const fileMap = { f1: 'file1.txt', f2: 'file2.txt', f3: 'file3.txt' }; + * + * // asynchronous function that returns the file size, transformed to human-readable format + * // e.g. 1024 bytes = 1KB, 1234 bytes = 1.21 KB, 1048576 bytes = 1MB, etc. + * function transformFileSize(acc, value, key, callback) { + * fs.stat(value, function(err, stat) { + * if (err) { + * return callback(err); + * } + * acc[key] = formatBytes(stat.size); + * callback(null); + * }); + * } + * + * // Using callbacks + * async.transform(fileMap, transformFileSize, function(err, result) { + * if(err) { + * console.log(err); + * } else { + * console.log(result); + * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' } + * } + * }); + * + * // Using Promises + * async.transform(fileMap, transformFileSize) + * .then(result => { + * console.log(result); + * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' } + * }).catch(err => { + * console.log(err); + * }); + * + * // Using async/await + * async () => { + * try { + * let result = await async.transform(fileMap, transformFileSize); + * console.log(result); + * // { f1: '1000 Bytes', f2: '1.95 KB', f3: '2.93 KB' } + * } + * catch (err) { + * console.log(err); + * } + * } + * + */ +function transform(coll, accumulator, iteratee, callback) { + if (arguments.length <= 3 && typeof accumulator === 'function') { + callback = iteratee; + iteratee = accumulator; + accumulator = Array.isArray(coll) ? [] : {}; + } + callback = (0, _once2.default)(callback || (0, _promiseCallback.promiseCallback)()); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + + (0, _eachOf2.default)(coll, (v, k, cb) => { + _iteratee(accumulator, v, k, cb); + }, err => callback(err, accumulator)); + return callback[_promiseCallback.PROMISE_SYMBOL]; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/tryEach.js b/node_backend/node_modules/async/tryEach.js new file mode 100644 index 0000000000000000000000000000000000000000..7e63f9d5a471c2ec34d22a41c40584656b8de196 --- /dev/null +++ b/node_backend/node_modules/async/tryEach.js @@ -0,0 +1,78 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachSeries = require('./eachSeries.js'); + +var _eachSeries2 = _interopRequireDefault(_eachSeries); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * It runs each task in series but stops whenever any of the functions were + * successful. If one of the tasks were successful, the `callback` will be + * passed the result of the successful task. If all tasks fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name tryEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to + * run, each function is passed a `callback(err, result)` it must call on + * completion with an error `err` (which can be `null`) and an optional `result` + * value. + * @param {Function} [callback] - An optional callback which is called when one + * of the tasks has succeeded, or all have failed. It receives the `err` and + * `result` arguments of the last attempt at completing the `task`. Invoked with + * (err, results). + * @returns {Promise} a promise, if no callback is passed + * @example + * async.tryEach([ + * function getDataFromFirstWebsite(callback) { + * // Try getting the data from the first website + * callback(err, data); + * }, + * function getDataFromSecondWebsite(callback) { + * // First website failed, + * // Try getting the data from the backup website + * callback(err, data); + * } + * ], + * // optional callback + * function(err, results) { + * Now do something with the data. + * }); + * + */ +function tryEach(tasks, callback) { + var error = null; + var result; + return (0, _eachSeries2.default)(tasks, (task, taskCb) => { + (0, _wrapAsync2.default)(task)((err, ...args) => { + if (err === false) return taskCb(err); + + if (args.length < 2) { + [result] = args; + } else { + result = args; + } + error = err; + taskCb(err ? null : {}); + }); + }, () => callback(error, result)); +} + +exports.default = (0, _awaitify2.default)(tryEach); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/unmemoize.js b/node_backend/node_modules/async/unmemoize.js new file mode 100644 index 0000000000000000000000000000000000000000..badd7aecde70de2f9fd04170530ec643c00d9fd8 --- /dev/null +++ b/node_backend/node_modules/async/unmemoize.js @@ -0,0 +1,25 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = unmemoize; +/** + * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original, + * unmemoized form. Handy for testing. + * + * @name unmemoize + * @static + * @memberOf module:Utils + * @method + * @see [async.memoize]{@link module:Utils.memoize} + * @category Util + * @param {AsyncFunction} fn - the memoized function + * @returns {AsyncFunction} a function that calls the original unmemoized function + */ +function unmemoize(fn) { + return (...args) => { + return (fn.unmemoized || fn)(...args); + }; +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/until.js b/node_backend/node_modules/async/until.js new file mode 100644 index 0000000000000000000000000000000000000000..4b69b9723aaa4638bcfa8079cb7a54e8e9ce16f6 --- /dev/null +++ b/node_backend/node_modules/async/until.js @@ -0,0 +1,61 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = until; + +var _whilst = require('./whilst.js'); + +var _whilst2 = _interopRequireDefault(_whilst); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. `callback` will be passed an error and any + * arguments passed to the final `iteratee`'s callback. + * + * The inverse of [whilst]{@link module:ControlFlow.whilst}. + * + * @name until + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `iteratee`. Invoked with (callback). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if a callback is not passed + * + * @example + * const results = [] + * let finished = false + * async.until(function test(cb) { + * cb(null, finished) + * }, function iter(next) { + * fetchPage(url, (err, body) => { + * if (err) return next(err) + * results = results.concat(body.objects) + * finished = !!body.next + * next(err) + * }) + * }, function done (err) { + * // all pages have been fetched + * }) + */ +function until(test, iteratee, callback) { + const _test = (0, _wrapAsync2.default)(test); + return (0, _whilst2.default)(cb => _test((err, truth) => cb(err, !truth)), iteratee, callback); +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/waterfall.js b/node_backend/node_modules/async/waterfall.js new file mode 100644 index 0000000000000000000000000000000000000000..c3242f7975c1b2c93d7dd4cacbd9075863c87480 --- /dev/null +++ b/node_backend/node_modules/async/waterfall.js @@ -0,0 +1,105 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _once = require('./internal/once.js'); + +var _once2 = _interopRequireDefault(_once); + +var _onlyOnce = require('./internal/onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Runs the `tasks` array of functions in series, each passing their results to + * the next in the array. However, if any of the `tasks` pass an error to their + * own callback, the next function is not executed, and the main `callback` is + * immediately called with the error. + * + * @name waterfall + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array of [async functions]{@link AsyncFunction} + * to run. + * Each function should complete with any number of `result` values. + * The `result` values will be passed as arguments, in order, to the next task. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This will be passed the results of the last task's + * callback. Invoked with (err, [results]). + * @returns {Promise} a promise, if a callback is omitted + * @example + * + * async.waterfall([ + * function(callback) { + * callback(null, 'one', 'two'); + * }, + * function(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * }, + * function(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + * ], function (err, result) { + * // result now equals 'done' + * }); + * + * // Or, with named functions: + * async.waterfall([ + * myFirstFunction, + * mySecondFunction, + * myLastFunction, + * ], function (err, result) { + * // result now equals 'done' + * }); + * function myFirstFunction(callback) { + * callback(null, 'one', 'two'); + * } + * function mySecondFunction(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * } + * function myLastFunction(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + */ +function waterfall(tasks, callback) { + callback = (0, _once2.default)(callback); + if (!Array.isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions')); + if (!tasks.length) return callback(); + var taskIndex = 0; + + function nextTask(args) { + var task = (0, _wrapAsync2.default)(tasks[taskIndex++]); + task(...args, (0, _onlyOnce2.default)(next)); + } + + function next(err, ...args) { + if (err === false) return; + if (err || taskIndex === tasks.length) { + return callback(err, ...args); + } + nextTask(args); + } + + nextTask([]); +} + +exports.default = (0, _awaitify2.default)(waterfall); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/whilst.js b/node_backend/node_modules/async/whilst.js new file mode 100644 index 0000000000000000000000000000000000000000..4165543f818028d988dc57f051ab2a476f42abf9 --- /dev/null +++ b/node_backend/node_modules/async/whilst.js @@ -0,0 +1,78 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _onlyOnce = require('./internal/onlyOnce.js'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _awaitify = require('./internal/awaitify.js'); + +var _awaitify2 = _interopRequireDefault(_awaitify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. + * + * @name whilst + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `iteratee`. Invoked with (callback). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns {Promise} a promise, if no callback is passed + * @example + * + * var count = 0; + * async.whilst( + * function test(cb) { cb(null, count < 5); }, + * function iter(callback) { + * count++; + * setTimeout(function() { + * callback(null, count); + * }, 1000); + * }, + * function (err, n) { + * // 5 seconds have passed, n = 5 + * } + * ); + */ +function whilst(test, iteratee, callback) { + callback = (0, _onlyOnce2.default)(callback); + var _fn = (0, _wrapAsync2.default)(iteratee); + var _test = (0, _wrapAsync2.default)(test); + var results = []; + + function next(err, ...rest) { + if (err) return callback(err); + results = rest; + if (err === false) return; + _test(check); + } + + function check(err, truth) { + if (err) return callback(err); + if (err === false) return; + if (!truth) return callback(null, ...results); + _fn(next); + } + + return _test(check); +} +exports.default = (0, _awaitify2.default)(whilst, 3); +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/async/wrapSync.js b/node_backend/node_modules/async/wrapSync.js new file mode 100644 index 0000000000000000000000000000000000000000..ddc3f02ff2c1367d97e8a8a5e0a1cff2d19cac20 --- /dev/null +++ b/node_backend/node_modules/async/wrapSync.js @@ -0,0 +1,118 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = asyncify; + +var _initialParams = require('./internal/initialParams.js'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _setImmediate = require('./internal/setImmediate.js'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _wrapAsync = require('./internal/wrapAsync.js'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + if ((0, _wrapAsync.isAsync)(func)) { + return function (...args /*, callback*/) { + const callback = args.pop(); + const promise = func.apply(this, args); + return handlePromise(promise, callback); + }; + } + + return (0, _initialParams2.default)(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if (result && typeof result.then === 'function') { + return handlePromise(result, callback); + } else { + callback(null, result); + } + }); +} + +function handlePromise(promise, callback) { + return promise.then(value => { + invokeCallback(callback, null, value); + }, err => { + invokeCallback(callback, err && (err instanceof Error || err.message) ? err : new Error(err)); + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (err) { + (0, _setImmediate2.default)(e => { + throw e; + }, err); + } +} +module.exports = exports.default; \ No newline at end of file diff --git a/node_backend/node_modules/big-integer/BigInteger.d.ts b/node_backend/node_modules/big-integer/BigInteger.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..168ba5f41274dc3d5662f824a0bd6118c7cd5134 --- /dev/null +++ b/node_backend/node_modules/big-integer/BigInteger.d.ts @@ -0,0 +1,2393 @@ +/** + * Type definitions for BigInteger.js + * Definitions by: Tommy Frazier + */ +export = bigInt; +export as namespace bigInt; + +declare var bigInt: bigInt.BigIntegerStatic; + +declare namespace bigInt { + type BigNumber = number | bigint | string | BigInteger; + + interface BigIntegerStatic { + /** + * Equivalent to bigInt(0). + */ + (): BigInteger; + + /** + * Parse a Javascript number into a bigInt. + */ + (number: number): BigInteger; + + /** + * Parse a Javascript native bigint into a bigInt. + */ + (number: bigint): BigInteger; + + /** + * Parse a string into a bigInt. + * Default base is 10. + * Default alphabet is "0123456789abcdefghijklmnopqrstuvwxyz". + * caseSensitive defaults to false. + */ + (string: string, base?: BigNumber, alphabet?: string, caseSensitive?: boolean): BigInteger; + + /** + * no-op. + */ + (bigInt: BigInteger): BigInteger; + + /** + * Constructs a bigInt from an array of digits in specified base. + * The optional isNegative flag will make the number negative. + */ + fromArray: (digits: BigNumber[], base?: BigNumber, isNegative?: boolean) => BigInteger; + + /** + * Finds the greatest common denominator of a and b. + */ + gcd: (a: BigNumber, b: BigNumber) => BigInteger; + + + /** + * Returns true if x is a BigInteger, false otherwise. + */ + isInstance: (x: any) => x is BigInteger; + + /** + * Finds the least common multiple of a and b. + */ + lcm: (a: BigNumber, b: BigNumber) => BigInteger; + + /** + * Returns the largest of a and b. + */ + max: (a: BigNumber, b: BigNumber) => BigInteger; + + /** + * Returns the smallest of a and b. + */ + min: (a: BigNumber, b: BigNumber) => BigInteger; + + /** + * Equivalent to bigInt(-1). + */ + minusOne: BigInteger; + + /** + * Equivalent to bigInt(1). + */ + one: BigInteger; + + /** + * Returns a random number between min and max. + */ + randBetween: (min: BigNumber, max: BigNumber, rng?: () => number) => BigInteger; + + /** + * Equivalent to bigInt(0). + */ + zero: BigInteger; + } + + interface BigInteger { + /** + * Returns the absolute value of a bigInt. + */ + abs(): BigInteger; + + /** + * Performs addition. + */ + add(number: BigNumber): BigInteger; + + /** + * Performs the bitwise AND operation. + */ + and(number: BigNumber): BigInteger; + + /** + * Returns the number of digits required to represent a bigInt in binary. + */ + bitLength(): BigInteger; + + /** + * Performs a comparison between two numbers. If the numbers are equal, it returns 0. + * If the first number is greater, it returns 1. If the first number is lesser, it returns -1. + */ + compare(number: BigNumber): number; + + /** + * Performs a comparison between the absolute value of two numbers. + */ + compareAbs(number: BigNumber): number; + + /** + * Alias for the compare method. + */ + compareTo(number: BigNumber): number; + + /** + * Performs integer division, disregarding the remainder. + */ + divide(number: BigNumber): BigInteger; + + /** + * Performs division and returns an object with two properties: quotient and remainder. + * The sign of the remainder will match the sign of the dividend. + */ + divmod(number: BigNumber): { quotient: BigInteger, remainder: BigInteger }; + + /** + * Alias for the equals method. + */ + eq(number: BigNumber): boolean; + + /** + * Checks if two numbers are equal. + */ + equals(number: BigNumber): boolean; + + /** + * Alias for the greaterOrEquals method. + */ + geq(number: BigNumber): boolean; + + /** + * Checks if the first number is greater than the second. + */ + greater(number: BigNumber): boolean; + + /** + * Checks if the first number is greater than or equal to the second. + */ + greaterOrEquals(number: BigNumber): boolean; + + /** + * Alias for the greater method. + */ + gt(number: BigNumber): boolean; + + /** + * Returns true if the first number is divisible by the second number, false otherwise. + */ + isDivisibleBy(number: BigNumber): boolean; + + /** + * Returns true if the number is even, false otherwise. + */ + isEven(): boolean; + + /** + * Returns true if the number is negative, false otherwise. + * Returns false for 0 and true for -0. + */ + isNegative(): boolean; + + /** + * Returns true if the number is odd, false otherwise. + */ + isOdd(): boolean; + + /** + * Return true if the number is positive, false otherwise. + * Returns true for 0 and false for -0. + */ + isPositive(): boolean; + + /** + * Returns true if the number is prime, false otherwise. + */ + isPrime(strict?: boolean): boolean; + + /** + * Returns true if the number is very likely to be prime, false otherwise. + */ + isProbablePrime(iterations?: number, rng?: () => number): boolean; + + /** + * Returns true if the number is 1 or -1, false otherwise. + */ + isUnit(): boolean; + + /** + * Return true if the number is 0 or -0, false otherwise. + */ + isZero(): boolean; + + /** + * Alias for the lesserOrEquals method. + */ + leq(number: BigNumber): boolean; + + /** + * Checks if the first number is lesser than the second. + */ + lesser(number: BigNumber): boolean; + + /** + * Checks if the first number is less than or equal to the second. + */ + lesserOrEquals(number: BigNumber): boolean; + + /** + * Alias for the lesser method. + */ + lt(number: BigNumber): boolean; + + /** + * Alias for the subtract method. + */ + minus(number: BigNumber): BigInteger; + + /** + * Performs division and returns the remainder, disregarding the quotient. + * The sign of the remainder will match the sign of the dividend. + */ + mod(number: BigNumber): BigInteger; + + /** + * Finds the multiplicative inverse of the number modulo mod. + */ + modInv(number: BigNumber): BigInteger; + + /** + * Takes the number to the power exp modulo mod. + */ + modPow(exp: BigNumber, mod: BigNumber): BigInteger; + + /** + * Performs multiplication. + */ + multiply(number: BigNumber): BigInteger; + + /** + * Reverses the sign of the number. + */ + negate(): BigInteger; + + /** + * Alias for the notEquals method. + */ + neq(number: BigNumber): boolean; + + /** + * Adds one to the number. + */ + next(): BigInteger; + + /** + * Performs the bitwise NOT operation. + */ + not(): BigInteger; + + /** + * Checks if two numbers are not equal. + */ + notEquals(number: BigNumber): boolean; + + /** + * Performs the bitwise OR operation. + */ + or(number: BigNumber): BigInteger; + + /** + * Alias for the divide method. + */ + over(number: BigNumber): BigInteger; + + /** + * Alias for the add method. + */ + plus(number: BigNumber): BigInteger; + + /** + * Performs exponentiation. If the exponent is less than 0, pow returns 0. + * bigInt.zero.pow(0) returns 1. + */ + pow(number: BigNumber): BigInteger; + + /** + * Subtracts one from the number. + */ + prev(): BigInteger; + + /** + * Alias for the mod method. + */ + remainder(number: BigNumber): BigInteger; + + /** + * Shifts the number left by n places in its binary representation. + * If a negative number is provided, it will shift right. + * + * Throws an error if number is outside of the range [-9007199254740992, 9007199254740992]. + */ + shiftLeft(number: BigNumber): BigInteger; + + /** + * Shifts the number right by n places in its binary representation. + * If a negative number is provided, it will shift left. + * + * Throws an error if number is outside of the range [-9007199254740992, 9007199254740992]. + */ + shiftRight(number: BigNumber): BigInteger; + + /** + * Squares the number. + */ + square(): BigInteger; + + /** + * Performs subtraction. + */ + subtract(number: BigNumber): BigInteger; + + /** + * Alias for the multiply method. + */ + times(number: BigNumber): BigInteger; + + /** + * + * Converts a bigInt to an object representing it as an array of integers module the given radix. + */ + toArray(radix: number): BaseArray; + + /** + * Converts a bigInt into a native Javascript number. Loses precision for numbers outside the range. + */ + toJSNumber(): number; + + /** + * Converts a bigInt to a string. + */ + toString(radix?: number, alphabet?: string): string; + + /** + * Converts a bigInt to a string. This method is called behind the scenes in JSON.stringify. + */ + toJSON(): string; + + /** + * Converts a bigInt to a native Javascript number. This override allows you to use native + * arithmetic operators without explicit conversion. + */ + valueOf(): number; + + /** + * Performs the bitwise XOR operation. + */ + xor(number: BigNumber): BigInteger; + } + + // Array constant accessors + interface BigIntegerStatic { + '-999': BigInteger; + '-998': BigInteger; + '-997': BigInteger; + '-996': BigInteger; + '-995': BigInteger; + '-994': BigInteger; + '-993': BigInteger; + '-992': BigInteger; + '-991': BigInteger; + '-990': BigInteger; + '-989': BigInteger; + '-988': BigInteger; + '-987': BigInteger; + '-986': BigInteger; + '-985': BigInteger; + '-984': BigInteger; + '-983': BigInteger; + '-982': BigInteger; + '-981': BigInteger; + '-980': BigInteger; + '-979': BigInteger; + '-978': BigInteger; + '-977': BigInteger; + '-976': BigInteger; + '-975': BigInteger; + '-974': BigInteger; + '-973': BigInteger; + '-972': BigInteger; + '-971': BigInteger; + '-970': BigInteger; + '-969': BigInteger; + '-968': BigInteger; + '-967': BigInteger; + '-966': BigInteger; + '-965': BigInteger; + '-964': BigInteger; + '-963': BigInteger; + '-962': BigInteger; + '-961': BigInteger; + '-960': BigInteger; + '-959': BigInteger; + '-958': BigInteger; + '-957': BigInteger; + '-956': BigInteger; + '-955': BigInteger; + '-954': BigInteger; + '-953': BigInteger; + '-952': BigInteger; + '-951': BigInteger; + '-950': BigInteger; + '-949': BigInteger; + '-948': BigInteger; + '-947': BigInteger; + '-946': BigInteger; + '-945': BigInteger; + '-944': BigInteger; + '-943': BigInteger; + '-942': BigInteger; + '-941': BigInteger; + '-940': BigInteger; + '-939': BigInteger; + '-938': BigInteger; + '-937': BigInteger; + '-936': BigInteger; + '-935': BigInteger; + '-934': BigInteger; + '-933': BigInteger; + '-932': BigInteger; + '-931': BigInteger; + '-930': BigInteger; + '-929': BigInteger; + '-928': BigInteger; + '-927': BigInteger; + '-926': BigInteger; + '-925': BigInteger; + '-924': BigInteger; + '-923': BigInteger; + '-922': BigInteger; + '-921': BigInteger; + '-920': BigInteger; + '-919': BigInteger; + '-918': BigInteger; + '-917': BigInteger; + '-916': BigInteger; + '-915': BigInteger; + '-914': BigInteger; + '-913': BigInteger; + '-912': BigInteger; + '-911': BigInteger; + '-910': BigInteger; + '-909': BigInteger; + '-908': BigInteger; + '-907': BigInteger; + '-906': BigInteger; + '-905': BigInteger; + '-904': BigInteger; + '-903': BigInteger; + '-902': BigInteger; + '-901': BigInteger; + '-900': BigInteger; + '-899': BigInteger; + '-898': BigInteger; + '-897': BigInteger; + '-896': BigInteger; + '-895': BigInteger; + '-894': BigInteger; + '-893': BigInteger; + '-892': BigInteger; + '-891': BigInteger; + '-890': BigInteger; + '-889': BigInteger; + '-888': BigInteger; + '-887': BigInteger; + '-886': BigInteger; + '-885': BigInteger; + '-884': BigInteger; + '-883': BigInteger; + '-882': BigInteger; + '-881': BigInteger; + '-880': BigInteger; + '-879': BigInteger; + '-878': BigInteger; + '-877': BigInteger; + '-876': BigInteger; + '-875': BigInteger; + '-874': BigInteger; + '-873': BigInteger; + '-872': BigInteger; + '-871': BigInteger; + '-870': BigInteger; + '-869': BigInteger; + '-868': BigInteger; + '-867': BigInteger; + '-866': BigInteger; + '-865': BigInteger; + '-864': BigInteger; + '-863': BigInteger; + '-862': BigInteger; + '-861': BigInteger; + '-860': BigInteger; + '-859': BigInteger; + '-858': BigInteger; + '-857': BigInteger; + '-856': BigInteger; + '-855': BigInteger; + '-854': BigInteger; + '-853': BigInteger; + '-852': BigInteger; + '-851': BigInteger; + '-850': BigInteger; + '-849': BigInteger; + '-848': BigInteger; + '-847': BigInteger; + '-846': BigInteger; + '-845': BigInteger; + '-844': BigInteger; + '-843': BigInteger; + '-842': BigInteger; + '-841': BigInteger; + '-840': BigInteger; + '-839': BigInteger; + '-838': BigInteger; + '-837': BigInteger; + '-836': BigInteger; + '-835': BigInteger; + '-834': BigInteger; + '-833': BigInteger; + '-832': BigInteger; + '-831': BigInteger; + '-830': BigInteger; + '-829': BigInteger; + '-828': BigInteger; + '-827': BigInteger; + '-826': BigInteger; + '-825': BigInteger; + '-824': BigInteger; + '-823': BigInteger; + '-822': BigInteger; + '-821': BigInteger; + '-820': BigInteger; + '-819': BigInteger; + '-818': BigInteger; + '-817': BigInteger; + '-816': BigInteger; + '-815': BigInteger; + '-814': BigInteger; + '-813': BigInteger; + '-812': BigInteger; + '-811': BigInteger; + '-810': BigInteger; + '-809': BigInteger; + '-808': BigInteger; + '-807': BigInteger; + '-806': BigInteger; + '-805': BigInteger; + '-804': BigInteger; + '-803': BigInteger; + '-802': BigInteger; + '-801': BigInteger; + '-800': BigInteger; + '-799': BigInteger; + '-798': BigInteger; + '-797': BigInteger; + '-796': BigInteger; + '-795': BigInteger; + '-794': BigInteger; + '-793': BigInteger; + '-792': BigInteger; + '-791': BigInteger; + '-790': BigInteger; + '-789': BigInteger; + '-788': BigInteger; + '-787': BigInteger; + '-786': BigInteger; + '-785': BigInteger; + '-784': BigInteger; + '-783': BigInteger; + '-782': BigInteger; + '-781': BigInteger; + '-780': BigInteger; + '-779': BigInteger; + '-778': BigInteger; + '-777': BigInteger; + '-776': BigInteger; + '-775': BigInteger; + '-774': BigInteger; + '-773': BigInteger; + '-772': BigInteger; + '-771': BigInteger; + '-770': BigInteger; + '-769': BigInteger; + '-768': BigInteger; + '-767': BigInteger; + '-766': BigInteger; + '-765': BigInteger; + '-764': BigInteger; + '-763': BigInteger; + '-762': BigInteger; + '-761': BigInteger; + '-760': BigInteger; + '-759': BigInteger; + '-758': BigInteger; + '-757': BigInteger; + '-756': BigInteger; + '-755': BigInteger; + '-754': BigInteger; + '-753': BigInteger; + '-752': BigInteger; + '-751': BigInteger; + '-750': BigInteger; + '-749': BigInteger; + '-748': BigInteger; + '-747': BigInteger; + '-746': BigInteger; + '-745': BigInteger; + '-744': BigInteger; + '-743': BigInteger; + '-742': BigInteger; + '-741': BigInteger; + '-740': BigInteger; + '-739': BigInteger; + '-738': BigInteger; + '-737': BigInteger; + '-736': BigInteger; + '-735': BigInteger; + '-734': BigInteger; + '-733': BigInteger; + '-732': BigInteger; + '-731': BigInteger; + '-730': BigInteger; + '-729': BigInteger; + '-728': BigInteger; + '-727': BigInteger; + '-726': BigInteger; + '-725': BigInteger; + '-724': BigInteger; + '-723': BigInteger; + '-722': BigInteger; + '-721': BigInteger; + '-720': BigInteger; + '-719': BigInteger; + '-718': BigInteger; + '-717': BigInteger; + '-716': BigInteger; + '-715': BigInteger; + '-714': BigInteger; + '-713': BigInteger; + '-712': BigInteger; + '-711': BigInteger; + '-710': BigInteger; + '-709': BigInteger; + '-708': BigInteger; + '-707': BigInteger; + '-706': BigInteger; + '-705': BigInteger; + '-704': BigInteger; + '-703': BigInteger; + '-702': BigInteger; + '-701': BigInteger; + '-700': BigInteger; + '-699': BigInteger; + '-698': BigInteger; + '-697': BigInteger; + '-696': BigInteger; + '-695': BigInteger; + '-694': BigInteger; + '-693': BigInteger; + '-692': BigInteger; + '-691': BigInteger; + '-690': BigInteger; + '-689': BigInteger; + '-688': BigInteger; + '-687': BigInteger; + '-686': BigInteger; + '-685': BigInteger; + '-684': BigInteger; + '-683': BigInteger; + '-682': BigInteger; + '-681': BigInteger; + '-680': BigInteger; + '-679': BigInteger; + '-678': BigInteger; + '-677': BigInteger; + '-676': BigInteger; + '-675': BigInteger; + '-674': BigInteger; + '-673': BigInteger; + '-672': BigInteger; + '-671': BigInteger; + '-670': BigInteger; + '-669': BigInteger; + '-668': BigInteger; + '-667': BigInteger; + '-666': BigInteger; + '-665': BigInteger; + '-664': BigInteger; + '-663': BigInteger; + '-662': BigInteger; + '-661': BigInteger; + '-660': BigInteger; + '-659': BigInteger; + '-658': BigInteger; + '-657': BigInteger; + '-656': BigInteger; + '-655': BigInteger; + '-654': BigInteger; + '-653': BigInteger; + '-652': BigInteger; + '-651': BigInteger; + '-650': BigInteger; + '-649': BigInteger; + '-648': BigInteger; + '-647': BigInteger; + '-646': BigInteger; + '-645': BigInteger; + '-644': BigInteger; + '-643': BigInteger; + '-642': BigInteger; + '-641': BigInteger; + '-640': BigInteger; + '-639': BigInteger; + '-638': BigInteger; + '-637': BigInteger; + '-636': BigInteger; + '-635': BigInteger; + '-634': BigInteger; + '-633': BigInteger; + '-632': BigInteger; + '-631': BigInteger; + '-630': BigInteger; + '-629': BigInteger; + '-628': BigInteger; + '-627': BigInteger; + '-626': BigInteger; + '-625': BigInteger; + '-624': BigInteger; + '-623': BigInteger; + '-622': BigInteger; + '-621': BigInteger; + '-620': BigInteger; + '-619': BigInteger; + '-618': BigInteger; + '-617': BigInteger; + '-616': BigInteger; + '-615': BigInteger; + '-614': BigInteger; + '-613': BigInteger; + '-612': BigInteger; + '-611': BigInteger; + '-610': BigInteger; + '-609': BigInteger; + '-608': BigInteger; + '-607': BigInteger; + '-606': BigInteger; + '-605': BigInteger; + '-604': BigInteger; + '-603': BigInteger; + '-602': BigInteger; + '-601': BigInteger; + '-600': BigInteger; + '-599': BigInteger; + '-598': BigInteger; + '-597': BigInteger; + '-596': BigInteger; + '-595': BigInteger; + '-594': BigInteger; + '-593': BigInteger; + '-592': BigInteger; + '-591': BigInteger; + '-590': BigInteger; + '-589': BigInteger; + '-588': BigInteger; + '-587': BigInteger; + '-586': BigInteger; + '-585': BigInteger; + '-584': BigInteger; + '-583': BigInteger; + '-582': BigInteger; + '-581': BigInteger; + '-580': BigInteger; + '-579': BigInteger; + '-578': BigInteger; + '-577': BigInteger; + '-576': BigInteger; + '-575': BigInteger; + '-574': BigInteger; + '-573': BigInteger; + '-572': BigInteger; + '-571': BigInteger; + '-570': BigInteger; + '-569': BigInteger; + '-568': BigInteger; + '-567': BigInteger; + '-566': BigInteger; + '-565': BigInteger; + '-564': BigInteger; + '-563': BigInteger; + '-562': BigInteger; + '-561': BigInteger; + '-560': BigInteger; + '-559': BigInteger; + '-558': BigInteger; + '-557': BigInteger; + '-556': BigInteger; + '-555': BigInteger; + '-554': BigInteger; + '-553': BigInteger; + '-552': BigInteger; + '-551': BigInteger; + '-550': BigInteger; + '-549': BigInteger; + '-548': BigInteger; + '-547': BigInteger; + '-546': BigInteger; + '-545': BigInteger; + '-544': BigInteger; + '-543': BigInteger; + '-542': BigInteger; + '-541': BigInteger; + '-540': BigInteger; + '-539': BigInteger; + '-538': BigInteger; + '-537': BigInteger; + '-536': BigInteger; + '-535': BigInteger; + '-534': BigInteger; + '-533': BigInteger; + '-532': BigInteger; + '-531': BigInteger; + '-530': BigInteger; + '-529': BigInteger; + '-528': BigInteger; + '-527': BigInteger; + '-526': BigInteger; + '-525': BigInteger; + '-524': BigInteger; + '-523': BigInteger; + '-522': BigInteger; + '-521': BigInteger; + '-520': BigInteger; + '-519': BigInteger; + '-518': BigInteger; + '-517': BigInteger; + '-516': BigInteger; + '-515': BigInteger; + '-514': BigInteger; + '-513': BigInteger; + '-512': BigInteger; + '-511': BigInteger; + '-510': BigInteger; + '-509': BigInteger; + '-508': BigInteger; + '-507': BigInteger; + '-506': BigInteger; + '-505': BigInteger; + '-504': BigInteger; + '-503': BigInteger; + '-502': BigInteger; + '-501': BigInteger; + '-500': BigInteger; + '-499': BigInteger; + '-498': BigInteger; + '-497': BigInteger; + '-496': BigInteger; + '-495': BigInteger; + '-494': BigInteger; + '-493': BigInteger; + '-492': BigInteger; + '-491': BigInteger; + '-490': BigInteger; + '-489': BigInteger; + '-488': BigInteger; + '-487': BigInteger; + '-486': BigInteger; + '-485': BigInteger; + '-484': BigInteger; + '-483': BigInteger; + '-482': BigInteger; + '-481': BigInteger; + '-480': BigInteger; + '-479': BigInteger; + '-478': BigInteger; + '-477': BigInteger; + '-476': BigInteger; + '-475': BigInteger; + '-474': BigInteger; + '-473': BigInteger; + '-472': BigInteger; + '-471': BigInteger; + '-470': BigInteger; + '-469': BigInteger; + '-468': BigInteger; + '-467': BigInteger; + '-466': BigInteger; + '-465': BigInteger; + '-464': BigInteger; + '-463': BigInteger; + '-462': BigInteger; + '-461': BigInteger; + '-460': BigInteger; + '-459': BigInteger; + '-458': BigInteger; + '-457': BigInteger; + '-456': BigInteger; + '-455': BigInteger; + '-454': BigInteger; + '-453': BigInteger; + '-452': BigInteger; + '-451': BigInteger; + '-450': BigInteger; + '-449': BigInteger; + '-448': BigInteger; + '-447': BigInteger; + '-446': BigInteger; + '-445': BigInteger; + '-444': BigInteger; + '-443': BigInteger; + '-442': BigInteger; + '-441': BigInteger; + '-440': BigInteger; + '-439': BigInteger; + '-438': BigInteger; + '-437': BigInteger; + '-436': BigInteger; + '-435': BigInteger; + '-434': BigInteger; + '-433': BigInteger; + '-432': BigInteger; + '-431': BigInteger; + '-430': BigInteger; + '-429': BigInteger; + '-428': BigInteger; + '-427': BigInteger; + '-426': BigInteger; + '-425': BigInteger; + '-424': BigInteger; + '-423': BigInteger; + '-422': BigInteger; + '-421': BigInteger; + '-420': BigInteger; + '-419': BigInteger; + '-418': BigInteger; + '-417': BigInteger; + '-416': BigInteger; + '-415': BigInteger; + '-414': BigInteger; + '-413': BigInteger; + '-412': BigInteger; + '-411': BigInteger; + '-410': BigInteger; + '-409': BigInteger; + '-408': BigInteger; + '-407': BigInteger; + '-406': BigInteger; + '-405': BigInteger; + '-404': BigInteger; + '-403': BigInteger; + '-402': BigInteger; + '-401': BigInteger; + '-400': BigInteger; + '-399': BigInteger; + '-398': BigInteger; + '-397': BigInteger; + '-396': BigInteger; + '-395': BigInteger; + '-394': BigInteger; + '-393': BigInteger; + '-392': BigInteger; + '-391': BigInteger; + '-390': BigInteger; + '-389': BigInteger; + '-388': BigInteger; + '-387': BigInteger; + '-386': BigInteger; + '-385': BigInteger; + '-384': BigInteger; + '-383': BigInteger; + '-382': BigInteger; + '-381': BigInteger; + '-380': BigInteger; + '-379': BigInteger; + '-378': BigInteger; + '-377': BigInteger; + '-376': BigInteger; + '-375': BigInteger; + '-374': BigInteger; + '-373': BigInteger; + '-372': BigInteger; + '-371': BigInteger; + '-370': BigInteger; + '-369': BigInteger; + '-368': BigInteger; + '-367': BigInteger; + '-366': BigInteger; + '-365': BigInteger; + '-364': BigInteger; + '-363': BigInteger; + '-362': BigInteger; + '-361': BigInteger; + '-360': BigInteger; + '-359': BigInteger; + '-358': BigInteger; + '-357': BigInteger; + '-356': BigInteger; + '-355': BigInteger; + '-354': BigInteger; + '-353': BigInteger; + '-352': BigInteger; + '-351': BigInteger; + '-350': BigInteger; + '-349': BigInteger; + '-348': BigInteger; + '-347': BigInteger; + '-346': BigInteger; + '-345': BigInteger; + '-344': BigInteger; + '-343': BigInteger; + '-342': BigInteger; + '-341': BigInteger; + '-340': BigInteger; + '-339': BigInteger; + '-338': BigInteger; + '-337': BigInteger; + '-336': BigInteger; + '-335': BigInteger; + '-334': BigInteger; + '-333': BigInteger; + '-332': BigInteger; + '-331': BigInteger; + '-330': BigInteger; + '-329': BigInteger; + '-328': BigInteger; + '-327': BigInteger; + '-326': BigInteger; + '-325': BigInteger; + '-324': BigInteger; + '-323': BigInteger; + '-322': BigInteger; + '-321': BigInteger; + '-320': BigInteger; + '-319': BigInteger; + '-318': BigInteger; + '-317': BigInteger; + '-316': BigInteger; + '-315': BigInteger; + '-314': BigInteger; + '-313': BigInteger; + '-312': BigInteger; + '-311': BigInteger; + '-310': BigInteger; + '-309': BigInteger; + '-308': BigInteger; + '-307': BigInteger; + '-306': BigInteger; + '-305': BigInteger; + '-304': BigInteger; + '-303': BigInteger; + '-302': BigInteger; + '-301': BigInteger; + '-300': BigInteger; + '-299': BigInteger; + '-298': BigInteger; + '-297': BigInteger; + '-296': BigInteger; + '-295': BigInteger; + '-294': BigInteger; + '-293': BigInteger; + '-292': BigInteger; + '-291': BigInteger; + '-290': BigInteger; + '-289': BigInteger; + '-288': BigInteger; + '-287': BigInteger; + '-286': BigInteger; + '-285': BigInteger; + '-284': BigInteger; + '-283': BigInteger; + '-282': BigInteger; + '-281': BigInteger; + '-280': BigInteger; + '-279': BigInteger; + '-278': BigInteger; + '-277': BigInteger; + '-276': BigInteger; + '-275': BigInteger; + '-274': BigInteger; + '-273': BigInteger; + '-272': BigInteger; + '-271': BigInteger; + '-270': BigInteger; + '-269': BigInteger; + '-268': BigInteger; + '-267': BigInteger; + '-266': BigInteger; + '-265': BigInteger; + '-264': BigInteger; + '-263': BigInteger; + '-262': BigInteger; + '-261': BigInteger; + '-260': BigInteger; + '-259': BigInteger; + '-258': BigInteger; + '-257': BigInteger; + '-256': BigInteger; + '-255': BigInteger; + '-254': BigInteger; + '-253': BigInteger; + '-252': BigInteger; + '-251': BigInteger; + '-250': BigInteger; + '-249': BigInteger; + '-248': BigInteger; + '-247': BigInteger; + '-246': BigInteger; + '-245': BigInteger; + '-244': BigInteger; + '-243': BigInteger; + '-242': BigInteger; + '-241': BigInteger; + '-240': BigInteger; + '-239': BigInteger; + '-238': BigInteger; + '-237': BigInteger; + '-236': BigInteger; + '-235': BigInteger; + '-234': BigInteger; + '-233': BigInteger; + '-232': BigInteger; + '-231': BigInteger; + '-230': BigInteger; + '-229': BigInteger; + '-228': BigInteger; + '-227': BigInteger; + '-226': BigInteger; + '-225': BigInteger; + '-224': BigInteger; + '-223': BigInteger; + '-222': BigInteger; + '-221': BigInteger; + '-220': BigInteger; + '-219': BigInteger; + '-218': BigInteger; + '-217': BigInteger; + '-216': BigInteger; + '-215': BigInteger; + '-214': BigInteger; + '-213': BigInteger; + '-212': BigInteger; + '-211': BigInteger; + '-210': BigInteger; + '-209': BigInteger; + '-208': BigInteger; + '-207': BigInteger; + '-206': BigInteger; + '-205': BigInteger; + '-204': BigInteger; + '-203': BigInteger; + '-202': BigInteger; + '-201': BigInteger; + '-200': BigInteger; + '-199': BigInteger; + '-198': BigInteger; + '-197': BigInteger; + '-196': BigInteger; + '-195': BigInteger; + '-194': BigInteger; + '-193': BigInteger; + '-192': BigInteger; + '-191': BigInteger; + '-190': BigInteger; + '-189': BigInteger; + '-188': BigInteger; + '-187': BigInteger; + '-186': BigInteger; + '-185': BigInteger; + '-184': BigInteger; + '-183': BigInteger; + '-182': BigInteger; + '-181': BigInteger; + '-180': BigInteger; + '-179': BigInteger; + '-178': BigInteger; + '-177': BigInteger; + '-176': BigInteger; + '-175': BigInteger; + '-174': BigInteger; + '-173': BigInteger; + '-172': BigInteger; + '-171': BigInteger; + '-170': BigInteger; + '-169': BigInteger; + '-168': BigInteger; + '-167': BigInteger; + '-166': BigInteger; + '-165': BigInteger; + '-164': BigInteger; + '-163': BigInteger; + '-162': BigInteger; + '-161': BigInteger; + '-160': BigInteger; + '-159': BigInteger; + '-158': BigInteger; + '-157': BigInteger; + '-156': BigInteger; + '-155': BigInteger; + '-154': BigInteger; + '-153': BigInteger; + '-152': BigInteger; + '-151': BigInteger; + '-150': BigInteger; + '-149': BigInteger; + '-148': BigInteger; + '-147': BigInteger; + '-146': BigInteger; + '-145': BigInteger; + '-144': BigInteger; + '-143': BigInteger; + '-142': BigInteger; + '-141': BigInteger; + '-140': BigInteger; + '-139': BigInteger; + '-138': BigInteger; + '-137': BigInteger; + '-136': BigInteger; + '-135': BigInteger; + '-134': BigInteger; + '-133': BigInteger; + '-132': BigInteger; + '-131': BigInteger; + '-130': BigInteger; + '-129': BigInteger; + '-128': BigInteger; + '-127': BigInteger; + '-126': BigInteger; + '-125': BigInteger; + '-124': BigInteger; + '-123': BigInteger; + '-122': BigInteger; + '-121': BigInteger; + '-120': BigInteger; + '-119': BigInteger; + '-118': BigInteger; + '-117': BigInteger; + '-116': BigInteger; + '-115': BigInteger; + '-114': BigInteger; + '-113': BigInteger; + '-112': BigInteger; + '-111': BigInteger; + '-110': BigInteger; + '-109': BigInteger; + '-108': BigInteger; + '-107': BigInteger; + '-106': BigInteger; + '-105': BigInteger; + '-104': BigInteger; + '-103': BigInteger; + '-102': BigInteger; + '-101': BigInteger; + '-100': BigInteger; + '-99': BigInteger; + '-98': BigInteger; + '-97': BigInteger; + '-96': BigInteger; + '-95': BigInteger; + '-94': BigInteger; + '-93': BigInteger; + '-92': BigInteger; + '-91': BigInteger; + '-90': BigInteger; + '-89': BigInteger; + '-88': BigInteger; + '-87': BigInteger; + '-86': BigInteger; + '-85': BigInteger; + '-84': BigInteger; + '-83': BigInteger; + '-82': BigInteger; + '-81': BigInteger; + '-80': BigInteger; + '-79': BigInteger; + '-78': BigInteger; + '-77': BigInteger; + '-76': BigInteger; + '-75': BigInteger; + '-74': BigInteger; + '-73': BigInteger; + '-72': BigInteger; + '-71': BigInteger; + '-70': BigInteger; + '-69': BigInteger; + '-68': BigInteger; + '-67': BigInteger; + '-66': BigInteger; + '-65': BigInteger; + '-64': BigInteger; + '-63': BigInteger; + '-62': BigInteger; + '-61': BigInteger; + '-60': BigInteger; + '-59': BigInteger; + '-58': BigInteger; + '-57': BigInteger; + '-56': BigInteger; + '-55': BigInteger; + '-54': BigInteger; + '-53': BigInteger; + '-52': BigInteger; + '-51': BigInteger; + '-50': BigInteger; + '-49': BigInteger; + '-48': BigInteger; + '-47': BigInteger; + '-46': BigInteger; + '-45': BigInteger; + '-44': BigInteger; + '-43': BigInteger; + '-42': BigInteger; + '-41': BigInteger; + '-40': BigInteger; + '-39': BigInteger; + '-38': BigInteger; + '-37': BigInteger; + '-36': BigInteger; + '-35': BigInteger; + '-34': BigInteger; + '-33': BigInteger; + '-32': BigInteger; + '-31': BigInteger; + '-30': BigInteger; + '-29': BigInteger; + '-28': BigInteger; + '-27': BigInteger; + '-26': BigInteger; + '-25': BigInteger; + '-24': BigInteger; + '-23': BigInteger; + '-22': BigInteger; + '-21': BigInteger; + '-20': BigInteger; + '-19': BigInteger; + '-18': BigInteger; + '-17': BigInteger; + '-16': BigInteger; + '-15': BigInteger; + '-14': BigInteger; + '-13': BigInteger; + '-12': BigInteger; + '-11': BigInteger; + '-10': BigInteger; + '-9': BigInteger; + '-8': BigInteger; + '-7': BigInteger; + '-6': BigInteger; + '-5': BigInteger; + '-4': BigInteger; + '-3': BigInteger; + '-2': BigInteger; + '-1': BigInteger; + '0': BigInteger; + '1': BigInteger; + '2': BigInteger; + '3': BigInteger; + '4': BigInteger; + '5': BigInteger; + '6': BigInteger; + '7': BigInteger; + '8': BigInteger; + '9': BigInteger; + '10': BigInteger; + '11': BigInteger; + '12': BigInteger; + '13': BigInteger; + '14': BigInteger; + '15': BigInteger; + '16': BigInteger; + '17': BigInteger; + '18': BigInteger; + '19': BigInteger; + '20': BigInteger; + '21': BigInteger; + '22': BigInteger; + '23': BigInteger; + '24': BigInteger; + '25': BigInteger; + '26': BigInteger; + '27': BigInteger; + '28': BigInteger; + '29': BigInteger; + '30': BigInteger; + '31': BigInteger; + '32': BigInteger; + '33': BigInteger; + '34': BigInteger; + '35': BigInteger; + '36': BigInteger; + '37': BigInteger; + '38': BigInteger; + '39': BigInteger; + '40': BigInteger; + '41': BigInteger; + '42': BigInteger; + '43': BigInteger; + '44': BigInteger; + '45': BigInteger; + '46': BigInteger; + '47': BigInteger; + '48': BigInteger; + '49': BigInteger; + '50': BigInteger; + '51': BigInteger; + '52': BigInteger; + '53': BigInteger; + '54': BigInteger; + '55': BigInteger; + '56': BigInteger; + '57': BigInteger; + '58': BigInteger; + '59': BigInteger; + '60': BigInteger; + '61': BigInteger; + '62': BigInteger; + '63': BigInteger; + '64': BigInteger; + '65': BigInteger; + '66': BigInteger; + '67': BigInteger; + '68': BigInteger; + '69': BigInteger; + '70': BigInteger; + '71': BigInteger; + '72': BigInteger; + '73': BigInteger; + '74': BigInteger; + '75': BigInteger; + '76': BigInteger; + '77': BigInteger; + '78': BigInteger; + '79': BigInteger; + '80': BigInteger; + '81': BigInteger; + '82': BigInteger; + '83': BigInteger; + '84': BigInteger; + '85': BigInteger; + '86': BigInteger; + '87': BigInteger; + '88': BigInteger; + '89': BigInteger; + '90': BigInteger; + '91': BigInteger; + '92': BigInteger; + '93': BigInteger; + '94': BigInteger; + '95': BigInteger; + '96': BigInteger; + '97': BigInteger; + '98': BigInteger; + '99': BigInteger; + '100': BigInteger; + '101': BigInteger; + '102': BigInteger; + '103': BigInteger; + '104': BigInteger; + '105': BigInteger; + '106': BigInteger; + '107': BigInteger; + '108': BigInteger; + '109': BigInteger; + '110': BigInteger; + '111': BigInteger; + '112': BigInteger; + '113': BigInteger; + '114': BigInteger; + '115': BigInteger; + '116': BigInteger; + '117': BigInteger; + '118': BigInteger; + '119': BigInteger; + '120': BigInteger; + '121': BigInteger; + '122': BigInteger; + '123': BigInteger; + '124': BigInteger; + '125': BigInteger; + '126': BigInteger; + '127': BigInteger; + '128': BigInteger; + '129': BigInteger; + '130': BigInteger; + '131': BigInteger; + '132': BigInteger; + '133': BigInteger; + '134': BigInteger; + '135': BigInteger; + '136': BigInteger; + '137': BigInteger; + '138': BigInteger; + '139': BigInteger; + '140': BigInteger; + '141': BigInteger; + '142': BigInteger; + '143': BigInteger; + '144': BigInteger; + '145': BigInteger; + '146': BigInteger; + '147': BigInteger; + '148': BigInteger; + '149': BigInteger; + '150': BigInteger; + '151': BigInteger; + '152': BigInteger; + '153': BigInteger; + '154': BigInteger; + '155': BigInteger; + '156': BigInteger; + '157': BigInteger; + '158': BigInteger; + '159': BigInteger; + '160': BigInteger; + '161': BigInteger; + '162': BigInteger; + '163': BigInteger; + '164': BigInteger; + '165': BigInteger; + '166': BigInteger; + '167': BigInteger; + '168': BigInteger; + '169': BigInteger; + '170': BigInteger; + '171': BigInteger; + '172': BigInteger; + '173': BigInteger; + '174': BigInteger; + '175': BigInteger; + '176': BigInteger; + '177': BigInteger; + '178': BigInteger; + '179': BigInteger; + '180': BigInteger; + '181': BigInteger; + '182': BigInteger; + '183': BigInteger; + '184': BigInteger; + '185': BigInteger; + '186': BigInteger; + '187': BigInteger; + '188': BigInteger; + '189': BigInteger; + '190': BigInteger; + '191': BigInteger; + '192': BigInteger; + '193': BigInteger; + '194': BigInteger; + '195': BigInteger; + '196': BigInteger; + '197': BigInteger; + '198': BigInteger; + '199': BigInteger; + '200': BigInteger; + '201': BigInteger; + '202': BigInteger; + '203': BigInteger; + '204': BigInteger; + '205': BigInteger; + '206': BigInteger; + '207': BigInteger; + '208': BigInteger; + '209': BigInteger; + '210': BigInteger; + '211': BigInteger; + '212': BigInteger; + '213': BigInteger; + '214': BigInteger; + '215': BigInteger; + '216': BigInteger; + '217': BigInteger; + '218': BigInteger; + '219': BigInteger; + '220': BigInteger; + '221': BigInteger; + '222': BigInteger; + '223': BigInteger; + '224': BigInteger; + '225': BigInteger; + '226': BigInteger; + '227': BigInteger; + '228': BigInteger; + '229': BigInteger; + '230': BigInteger; + '231': BigInteger; + '232': BigInteger; + '233': BigInteger; + '234': BigInteger; + '235': BigInteger; + '236': BigInteger; + '237': BigInteger; + '238': BigInteger; + '239': BigInteger; + '240': BigInteger; + '241': BigInteger; + '242': BigInteger; + '243': BigInteger; + '244': BigInteger; + '245': BigInteger; + '246': BigInteger; + '247': BigInteger; + '248': BigInteger; + '249': BigInteger; + '250': BigInteger; + '251': BigInteger; + '252': BigInteger; + '253': BigInteger; + '254': BigInteger; + '255': BigInteger; + '256': BigInteger; + '257': BigInteger; + '258': BigInteger; + '259': BigInteger; + '260': BigInteger; + '261': BigInteger; + '262': BigInteger; + '263': BigInteger; + '264': BigInteger; + '265': BigInteger; + '266': BigInteger; + '267': BigInteger; + '268': BigInteger; + '269': BigInteger; + '270': BigInteger; + '271': BigInteger; + '272': BigInteger; + '273': BigInteger; + '274': BigInteger; + '275': BigInteger; + '276': BigInteger; + '277': BigInteger; + '278': BigInteger; + '279': BigInteger; + '280': BigInteger; + '281': BigInteger; + '282': BigInteger; + '283': BigInteger; + '284': BigInteger; + '285': BigInteger; + '286': BigInteger; + '287': BigInteger; + '288': BigInteger; + '289': BigInteger; + '290': BigInteger; + '291': BigInteger; + '292': BigInteger; + '293': BigInteger; + '294': BigInteger; + '295': BigInteger; + '296': BigInteger; + '297': BigInteger; + '298': BigInteger; + '299': BigInteger; + '300': BigInteger; + '301': BigInteger; + '302': BigInteger; + '303': BigInteger; + '304': BigInteger; + '305': BigInteger; + '306': BigInteger; + '307': BigInteger; + '308': BigInteger; + '309': BigInteger; + '310': BigInteger; + '311': BigInteger; + '312': BigInteger; + '313': BigInteger; + '314': BigInteger; + '315': BigInteger; + '316': BigInteger; + '317': BigInteger; + '318': BigInteger; + '319': BigInteger; + '320': BigInteger; + '321': BigInteger; + '322': BigInteger; + '323': BigInteger; + '324': BigInteger; + '325': BigInteger; + '326': BigInteger; + '327': BigInteger; + '328': BigInteger; + '329': BigInteger; + '330': BigInteger; + '331': BigInteger; + '332': BigInteger; + '333': BigInteger; + '334': BigInteger; + '335': BigInteger; + '336': BigInteger; + '337': BigInteger; + '338': BigInteger; + '339': BigInteger; + '340': BigInteger; + '341': BigInteger; + '342': BigInteger; + '343': BigInteger; + '344': BigInteger; + '345': BigInteger; + '346': BigInteger; + '347': BigInteger; + '348': BigInteger; + '349': BigInteger; + '350': BigInteger; + '351': BigInteger; + '352': BigInteger; + '353': BigInteger; + '354': BigInteger; + '355': BigInteger; + '356': BigInteger; + '357': BigInteger; + '358': BigInteger; + '359': BigInteger; + '360': BigInteger; + '361': BigInteger; + '362': BigInteger; + '363': BigInteger; + '364': BigInteger; + '365': BigInteger; + '366': BigInteger; + '367': BigInteger; + '368': BigInteger; + '369': BigInteger; + '370': BigInteger; + '371': BigInteger; + '372': BigInteger; + '373': BigInteger; + '374': BigInteger; + '375': BigInteger; + '376': BigInteger; + '377': BigInteger; + '378': BigInteger; + '379': BigInteger; + '380': BigInteger; + '381': BigInteger; + '382': BigInteger; + '383': BigInteger; + '384': BigInteger; + '385': BigInteger; + '386': BigInteger; + '387': BigInteger; + '388': BigInteger; + '389': BigInteger; + '390': BigInteger; + '391': BigInteger; + '392': BigInteger; + '393': BigInteger; + '394': BigInteger; + '395': BigInteger; + '396': BigInteger; + '397': BigInteger; + '398': BigInteger; + '399': BigInteger; + '400': BigInteger; + '401': BigInteger; + '402': BigInteger; + '403': BigInteger; + '404': BigInteger; + '405': BigInteger; + '406': BigInteger; + '407': BigInteger; + '408': BigInteger; + '409': BigInteger; + '410': BigInteger; + '411': BigInteger; + '412': BigInteger; + '413': BigInteger; + '414': BigInteger; + '415': BigInteger; + '416': BigInteger; + '417': BigInteger; + '418': BigInteger; + '419': BigInteger; + '420': BigInteger; + '421': BigInteger; + '422': BigInteger; + '423': BigInteger; + '424': BigInteger; + '425': BigInteger; + '426': BigInteger; + '427': BigInteger; + '428': BigInteger; + '429': BigInteger; + '430': BigInteger; + '431': BigInteger; + '432': BigInteger; + '433': BigInteger; + '434': BigInteger; + '435': BigInteger; + '436': BigInteger; + '437': BigInteger; + '438': BigInteger; + '439': BigInteger; + '440': BigInteger; + '441': BigInteger; + '442': BigInteger; + '443': BigInteger; + '444': BigInteger; + '445': BigInteger; + '446': BigInteger; + '447': BigInteger; + '448': BigInteger; + '449': BigInteger; + '450': BigInteger; + '451': BigInteger; + '452': BigInteger; + '453': BigInteger; + '454': BigInteger; + '455': BigInteger; + '456': BigInteger; + '457': BigInteger; + '458': BigInteger; + '459': BigInteger; + '460': BigInteger; + '461': BigInteger; + '462': BigInteger; + '463': BigInteger; + '464': BigInteger; + '465': BigInteger; + '466': BigInteger; + '467': BigInteger; + '468': BigInteger; + '469': BigInteger; + '470': BigInteger; + '471': BigInteger; + '472': BigInteger; + '473': BigInteger; + '474': BigInteger; + '475': BigInteger; + '476': BigInteger; + '477': BigInteger; + '478': BigInteger; + '479': BigInteger; + '480': BigInteger; + '481': BigInteger; + '482': BigInteger; + '483': BigInteger; + '484': BigInteger; + '485': BigInteger; + '486': BigInteger; + '487': BigInteger; + '488': BigInteger; + '489': BigInteger; + '490': BigInteger; + '491': BigInteger; + '492': BigInteger; + '493': BigInteger; + '494': BigInteger; + '495': BigInteger; + '496': BigInteger; + '497': BigInteger; + '498': BigInteger; + '499': BigInteger; + '500': BigInteger; + '501': BigInteger; + '502': BigInteger; + '503': BigInteger; + '504': BigInteger; + '505': BigInteger; + '506': BigInteger; + '507': BigInteger; + '508': BigInteger; + '509': BigInteger; + '510': BigInteger; + '511': BigInteger; + '512': BigInteger; + '513': BigInteger; + '514': BigInteger; + '515': BigInteger; + '516': BigInteger; + '517': BigInteger; + '518': BigInteger; + '519': BigInteger; + '520': BigInteger; + '521': BigInteger; + '522': BigInteger; + '523': BigInteger; + '524': BigInteger; + '525': BigInteger; + '526': BigInteger; + '527': BigInteger; + '528': BigInteger; + '529': BigInteger; + '530': BigInteger; + '531': BigInteger; + '532': BigInteger; + '533': BigInteger; + '534': BigInteger; + '535': BigInteger; + '536': BigInteger; + '537': BigInteger; + '538': BigInteger; + '539': BigInteger; + '540': BigInteger; + '541': BigInteger; + '542': BigInteger; + '543': BigInteger; + '544': BigInteger; + '545': BigInteger; + '546': BigInteger; + '547': BigInteger; + '548': BigInteger; + '549': BigInteger; + '550': BigInteger; + '551': BigInteger; + '552': BigInteger; + '553': BigInteger; + '554': BigInteger; + '555': BigInteger; + '556': BigInteger; + '557': BigInteger; + '558': BigInteger; + '559': BigInteger; + '560': BigInteger; + '561': BigInteger; + '562': BigInteger; + '563': BigInteger; + '564': BigInteger; + '565': BigInteger; + '566': BigInteger; + '567': BigInteger; + '568': BigInteger; + '569': BigInteger; + '570': BigInteger; + '571': BigInteger; + '572': BigInteger; + '573': BigInteger; + '574': BigInteger; + '575': BigInteger; + '576': BigInteger; + '577': BigInteger; + '578': BigInteger; + '579': BigInteger; + '580': BigInteger; + '581': BigInteger; + '582': BigInteger; + '583': BigInteger; + '584': BigInteger; + '585': BigInteger; + '586': BigInteger; + '587': BigInteger; + '588': BigInteger; + '589': BigInteger; + '590': BigInteger; + '591': BigInteger; + '592': BigInteger; + '593': BigInteger; + '594': BigInteger; + '595': BigInteger; + '596': BigInteger; + '597': BigInteger; + '598': BigInteger; + '599': BigInteger; + '600': BigInteger; + '601': BigInteger; + '602': BigInteger; + '603': BigInteger; + '604': BigInteger; + '605': BigInteger; + '606': BigInteger; + '607': BigInteger; + '608': BigInteger; + '609': BigInteger; + '610': BigInteger; + '611': BigInteger; + '612': BigInteger; + '613': BigInteger; + '614': BigInteger; + '615': BigInteger; + '616': BigInteger; + '617': BigInteger; + '618': BigInteger; + '619': BigInteger; + '620': BigInteger; + '621': BigInteger; + '622': BigInteger; + '623': BigInteger; + '624': BigInteger; + '625': BigInteger; + '626': BigInteger; + '627': BigInteger; + '628': BigInteger; + '629': BigInteger; + '630': BigInteger; + '631': BigInteger; + '632': BigInteger; + '633': BigInteger; + '634': BigInteger; + '635': BigInteger; + '636': BigInteger; + '637': BigInteger; + '638': BigInteger; + '639': BigInteger; + '640': BigInteger; + '641': BigInteger; + '642': BigInteger; + '643': BigInteger; + '644': BigInteger; + '645': BigInteger; + '646': BigInteger; + '647': BigInteger; + '648': BigInteger; + '649': BigInteger; + '650': BigInteger; + '651': BigInteger; + '652': BigInteger; + '653': BigInteger; + '654': BigInteger; + '655': BigInteger; + '656': BigInteger; + '657': BigInteger; + '658': BigInteger; + '659': BigInteger; + '660': BigInteger; + '661': BigInteger; + '662': BigInteger; + '663': BigInteger; + '664': BigInteger; + '665': BigInteger; + '666': BigInteger; + '667': BigInteger; + '668': BigInteger; + '669': BigInteger; + '670': BigInteger; + '671': BigInteger; + '672': BigInteger; + '673': BigInteger; + '674': BigInteger; + '675': BigInteger; + '676': BigInteger; + '677': BigInteger; + '678': BigInteger; + '679': BigInteger; + '680': BigInteger; + '681': BigInteger; + '682': BigInteger; + '683': BigInteger; + '684': BigInteger; + '685': BigInteger; + '686': BigInteger; + '687': BigInteger; + '688': BigInteger; + '689': BigInteger; + '690': BigInteger; + '691': BigInteger; + '692': BigInteger; + '693': BigInteger; + '694': BigInteger; + '695': BigInteger; + '696': BigInteger; + '697': BigInteger; + '698': BigInteger; + '699': BigInteger; + '700': BigInteger; + '701': BigInteger; + '702': BigInteger; + '703': BigInteger; + '704': BigInteger; + '705': BigInteger; + '706': BigInteger; + '707': BigInteger; + '708': BigInteger; + '709': BigInteger; + '710': BigInteger; + '711': BigInteger; + '712': BigInteger; + '713': BigInteger; + '714': BigInteger; + '715': BigInteger; + '716': BigInteger; + '717': BigInteger; + '718': BigInteger; + '719': BigInteger; + '720': BigInteger; + '721': BigInteger; + '722': BigInteger; + '723': BigInteger; + '724': BigInteger; + '725': BigInteger; + '726': BigInteger; + '727': BigInteger; + '728': BigInteger; + '729': BigInteger; + '730': BigInteger; + '731': BigInteger; + '732': BigInteger; + '733': BigInteger; + '734': BigInteger; + '735': BigInteger; + '736': BigInteger; + '737': BigInteger; + '738': BigInteger; + '739': BigInteger; + '740': BigInteger; + '741': BigInteger; + '742': BigInteger; + '743': BigInteger; + '744': BigInteger; + '745': BigInteger; + '746': BigInteger; + '747': BigInteger; + '748': BigInteger; + '749': BigInteger; + '750': BigInteger; + '751': BigInteger; + '752': BigInteger; + '753': BigInteger; + '754': BigInteger; + '755': BigInteger; + '756': BigInteger; + '757': BigInteger; + '758': BigInteger; + '759': BigInteger; + '760': BigInteger; + '761': BigInteger; + '762': BigInteger; + '763': BigInteger; + '764': BigInteger; + '765': BigInteger; + '766': BigInteger; + '767': BigInteger; + '768': BigInteger; + '769': BigInteger; + '770': BigInteger; + '771': BigInteger; + '772': BigInteger; + '773': BigInteger; + '774': BigInteger; + '775': BigInteger; + '776': BigInteger; + '777': BigInteger; + '778': BigInteger; + '779': BigInteger; + '780': BigInteger; + '781': BigInteger; + '782': BigInteger; + '783': BigInteger; + '784': BigInteger; + '785': BigInteger; + '786': BigInteger; + '787': BigInteger; + '788': BigInteger; + '789': BigInteger; + '790': BigInteger; + '791': BigInteger; + '792': BigInteger; + '793': BigInteger; + '794': BigInteger; + '795': BigInteger; + '796': BigInteger; + '797': BigInteger; + '798': BigInteger; + '799': BigInteger; + '800': BigInteger; + '801': BigInteger; + '802': BigInteger; + '803': BigInteger; + '804': BigInteger; + '805': BigInteger; + '806': BigInteger; + '807': BigInteger; + '808': BigInteger; + '809': BigInteger; + '810': BigInteger; + '811': BigInteger; + '812': BigInteger; + '813': BigInteger; + '814': BigInteger; + '815': BigInteger; + '816': BigInteger; + '817': BigInteger; + '818': BigInteger; + '819': BigInteger; + '820': BigInteger; + '821': BigInteger; + '822': BigInteger; + '823': BigInteger; + '824': BigInteger; + '825': BigInteger; + '826': BigInteger; + '827': BigInteger; + '828': BigInteger; + '829': BigInteger; + '830': BigInteger; + '831': BigInteger; + '832': BigInteger; + '833': BigInteger; + '834': BigInteger; + '835': BigInteger; + '836': BigInteger; + '837': BigInteger; + '838': BigInteger; + '839': BigInteger; + '840': BigInteger; + '841': BigInteger; + '842': BigInteger; + '843': BigInteger; + '844': BigInteger; + '845': BigInteger; + '846': BigInteger; + '847': BigInteger; + '848': BigInteger; + '849': BigInteger; + '850': BigInteger; + '851': BigInteger; + '852': BigInteger; + '853': BigInteger; + '854': BigInteger; + '855': BigInteger; + '856': BigInteger; + '857': BigInteger; + '858': BigInteger; + '859': BigInteger; + '860': BigInteger; + '861': BigInteger; + '862': BigInteger; + '863': BigInteger; + '864': BigInteger; + '865': BigInteger; + '866': BigInteger; + '867': BigInteger; + '868': BigInteger; + '869': BigInteger; + '870': BigInteger; + '871': BigInteger; + '872': BigInteger; + '873': BigInteger; + '874': BigInteger; + '875': BigInteger; + '876': BigInteger; + '877': BigInteger; + '878': BigInteger; + '879': BigInteger; + '880': BigInteger; + '881': BigInteger; + '882': BigInteger; + '883': BigInteger; + '884': BigInteger; + '885': BigInteger; + '886': BigInteger; + '887': BigInteger; + '888': BigInteger; + '889': BigInteger; + '890': BigInteger; + '891': BigInteger; + '892': BigInteger; + '893': BigInteger; + '894': BigInteger; + '895': BigInteger; + '896': BigInteger; + '897': BigInteger; + '898': BigInteger; + '899': BigInteger; + '900': BigInteger; + '901': BigInteger; + '902': BigInteger; + '903': BigInteger; + '904': BigInteger; + '905': BigInteger; + '906': BigInteger; + '907': BigInteger; + '908': BigInteger; + '909': BigInteger; + '910': BigInteger; + '911': BigInteger; + '912': BigInteger; + '913': BigInteger; + '914': BigInteger; + '915': BigInteger; + '916': BigInteger; + '917': BigInteger; + '918': BigInteger; + '919': BigInteger; + '920': BigInteger; + '921': BigInteger; + '922': BigInteger; + '923': BigInteger; + '924': BigInteger; + '925': BigInteger; + '926': BigInteger; + '927': BigInteger; + '928': BigInteger; + '929': BigInteger; + '930': BigInteger; + '931': BigInteger; + '932': BigInteger; + '933': BigInteger; + '934': BigInteger; + '935': BigInteger; + '936': BigInteger; + '937': BigInteger; + '938': BigInteger; + '939': BigInteger; + '940': BigInteger; + '941': BigInteger; + '942': BigInteger; + '943': BigInteger; + '944': BigInteger; + '945': BigInteger; + '946': BigInteger; + '947': BigInteger; + '948': BigInteger; + '949': BigInteger; + '950': BigInteger; + '951': BigInteger; + '952': BigInteger; + '953': BigInteger; + '954': BigInteger; + '955': BigInteger; + '956': BigInteger; + '957': BigInteger; + '958': BigInteger; + '959': BigInteger; + '960': BigInteger; + '961': BigInteger; + '962': BigInteger; + '963': BigInteger; + '964': BigInteger; + '965': BigInteger; + '966': BigInteger; + '967': BigInteger; + '968': BigInteger; + '969': BigInteger; + '970': BigInteger; + '971': BigInteger; + '972': BigInteger; + '973': BigInteger; + '974': BigInteger; + '975': BigInteger; + '976': BigInteger; + '977': BigInteger; + '978': BigInteger; + '979': BigInteger; + '980': BigInteger; + '981': BigInteger; + '982': BigInteger; + '983': BigInteger; + '984': BigInteger; + '985': BigInteger; + '986': BigInteger; + '987': BigInteger; + '988': BigInteger; + '989': BigInteger; + '990': BigInteger; + '991': BigInteger; + '992': BigInteger; + '993': BigInteger; + '994': BigInteger; + '995': BigInteger; + '996': BigInteger; + '997': BigInteger; + '998': BigInteger; + '999': BigInteger; + } + + interface BaseArray { + value: number[], + isNegative: boolean + } +} diff --git a/node_backend/node_modules/big-integer/BigInteger.js b/node_backend/node_modules/big-integer/BigInteger.js new file mode 100644 index 0000000000000000000000000000000000000000..e8658dc17ab027d4d17874fbd9e54c9e3475cb4f --- /dev/null +++ b/node_backend/node_modules/big-integer/BigInteger.js @@ -0,0 +1,1453 @@ +var bigInt = (function (undefined) { + "use strict"; + + var BASE = 1e7, + LOG_BASE = 7, + MAX_INT = 9007199254740992, + MAX_INT_ARR = smallToArray(MAX_INT), + DEFAULT_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz"; + + var supportsNativeBigInt = typeof BigInt === "function"; + + function Integer(v, radix, alphabet, caseSensitive) { + if (typeof v === "undefined") return Integer[0]; + if (typeof radix !== "undefined") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive); + return parseValue(v); + } + + function BigInteger(value, sign) { + this.value = value; + this.sign = sign; + this.isSmall = false; + } + BigInteger.prototype = Object.create(Integer.prototype); + + function SmallInteger(value) { + this.value = value; + this.sign = value < 0; + this.isSmall = true; + } + SmallInteger.prototype = Object.create(Integer.prototype); + + function NativeBigInt(value) { + this.value = value; + } + NativeBigInt.prototype = Object.create(Integer.prototype); + + function isPrecise(n) { + return -MAX_INT < n && n < MAX_INT; + } + + function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes + if (n < 1e7) + return [n]; + if (n < 1e14) + return [n % 1e7, Math.floor(n / 1e7)]; + return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)]; + } + + function arrayToSmall(arr) { // If BASE changes this function may need to change + trim(arr); + var length = arr.length; + if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) { + switch (length) { + case 0: return 0; + case 1: return arr[0]; + case 2: return arr[0] + arr[1] * BASE; + default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE; + } + } + return arr; + } + + function trim(v) { + var i = v.length; + while (v[--i] === 0); + v.length = i + 1; + } + + function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger + var x = new Array(length); + var i = -1; + while (++i < length) { + x[i] = 0; + } + return x; + } + + function truncate(n) { + if (n > 0) return Math.floor(n); + return Math.ceil(n); + } + + function add(a, b) { // assumes a and b are arrays with a.length >= b.length + var l_a = a.length, + l_b = b.length, + r = new Array(l_a), + carry = 0, + base = BASE, + sum, i; + for (i = 0; i < l_b; i++) { + sum = a[i] + b[i] + carry; + carry = sum >= base ? 1 : 0; + r[i] = sum - carry * base; + } + while (i < l_a) { + sum = a[i] + carry; + carry = sum === base ? 1 : 0; + r[i++] = sum - carry * base; + } + if (carry > 0) r.push(carry); + return r; + } + + function addAny(a, b) { + if (a.length >= b.length) return add(a, b); + return add(b, a); + } + + function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT + var l = a.length, + r = new Array(l), + base = BASE, + sum, i; + for (i = 0; i < l; i++) { + sum = a[i] - base + carry; + carry = Math.floor(sum / base); + r[i] = sum - carry * base; + carry += 1; + } + while (carry > 0) { + r[i++] = carry % base; + carry = Math.floor(carry / base); + } + return r; + } + + BigInteger.prototype.add = function (v) { + var n = parseValue(v); + if (this.sign !== n.sign) { + return this.subtract(n.negate()); + } + var a = this.value, b = n.value; + if (n.isSmall) { + return new BigInteger(addSmall(a, Math.abs(b)), this.sign); + } + return new BigInteger(addAny(a, b), this.sign); + }; + BigInteger.prototype.plus = BigInteger.prototype.add; + + SmallInteger.prototype.add = function (v) { + var n = parseValue(v); + var a = this.value; + if (a < 0 !== n.sign) { + return this.subtract(n.negate()); + } + var b = n.value; + if (n.isSmall) { + if (isPrecise(a + b)) return new SmallInteger(a + b); + b = smallToArray(Math.abs(b)); + } + return new BigInteger(addSmall(b, Math.abs(a)), a < 0); + }; + SmallInteger.prototype.plus = SmallInteger.prototype.add; + + NativeBigInt.prototype.add = function (v) { + return new NativeBigInt(this.value + parseValue(v).value); + } + NativeBigInt.prototype.plus = NativeBigInt.prototype.add; + + function subtract(a, b) { // assumes a and b are arrays with a >= b + var a_l = a.length, + b_l = b.length, + r = new Array(a_l), + borrow = 0, + base = BASE, + i, difference; + for (i = 0; i < b_l; i++) { + difference = a[i] - borrow - b[i]; + if (difference < 0) { + difference += base; + borrow = 1; + } else borrow = 0; + r[i] = difference; + } + for (i = b_l; i < a_l; i++) { + difference = a[i] - borrow; + if (difference < 0) difference += base; + else { + r[i++] = difference; + break; + } + r[i] = difference; + } + for (; i < a_l; i++) { + r[i] = a[i]; + } + trim(r); + return r; + } + + function subtractAny(a, b, sign) { + var value; + if (compareAbs(a, b) >= 0) { + value = subtract(a, b); + } else { + value = subtract(b, a); + sign = !sign; + } + value = arrayToSmall(value); + if (typeof value === "number") { + if (sign) value = -value; + return new SmallInteger(value); + } + return new BigInteger(value, sign); + } + + function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT + var l = a.length, + r = new Array(l), + carry = -b, + base = BASE, + i, difference; + for (i = 0; i < l; i++) { + difference = a[i] + carry; + carry = Math.floor(difference / base); + difference %= base; + r[i] = difference < 0 ? difference + base : difference; + } + r = arrayToSmall(r); + if (typeof r === "number") { + if (sign) r = -r; + return new SmallInteger(r); + } return new BigInteger(r, sign); + } + + BigInteger.prototype.subtract = function (v) { + var n = parseValue(v); + if (this.sign !== n.sign) { + return this.add(n.negate()); + } + var a = this.value, b = n.value; + if (n.isSmall) + return subtractSmall(a, Math.abs(b), this.sign); + return subtractAny(a, b, this.sign); + }; + BigInteger.prototype.minus = BigInteger.prototype.subtract; + + SmallInteger.prototype.subtract = function (v) { + var n = parseValue(v); + var a = this.value; + if (a < 0 !== n.sign) { + return this.add(n.negate()); + } + var b = n.value; + if (n.isSmall) { + return new SmallInteger(a - b); + } + return subtractSmall(b, Math.abs(a), a >= 0); + }; + SmallInteger.prototype.minus = SmallInteger.prototype.subtract; + + NativeBigInt.prototype.subtract = function (v) { + return new NativeBigInt(this.value - parseValue(v).value); + } + NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract; + + BigInteger.prototype.negate = function () { + return new BigInteger(this.value, !this.sign); + }; + SmallInteger.prototype.negate = function () { + var sign = this.sign; + var small = new SmallInteger(-this.value); + small.sign = !sign; + return small; + }; + NativeBigInt.prototype.negate = function () { + return new NativeBigInt(-this.value); + } + + BigInteger.prototype.abs = function () { + return new BigInteger(this.value, false); + }; + SmallInteger.prototype.abs = function () { + return new SmallInteger(Math.abs(this.value)); + }; + NativeBigInt.prototype.abs = function () { + return new NativeBigInt(this.value >= 0 ? this.value : -this.value); + } + + + function multiplyLong(a, b) { + var a_l = a.length, + b_l = b.length, + l = a_l + b_l, + r = createArray(l), + base = BASE, + product, carry, i, a_i, b_j; + for (i = 0; i < a_l; ++i) { + a_i = a[i]; + for (var j = 0; j < b_l; ++j) { + b_j = b[j]; + product = a_i * b_j + r[i + j]; + carry = Math.floor(product / base); + r[i + j] = product - carry * base; + r[i + j + 1] += carry; + } + } + trim(r); + return r; + } + + function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE + var l = a.length, + r = new Array(l), + base = BASE, + carry = 0, + product, i; + for (i = 0; i < l; i++) { + product = a[i] * b + carry; + carry = Math.floor(product / base); + r[i] = product - carry * base; + } + while (carry > 0) { + r[i++] = carry % base; + carry = Math.floor(carry / base); + } + return r; + } + + function shiftLeft(x, n) { + var r = []; + while (n-- > 0) r.push(0); + return r.concat(x); + } + + function multiplyKaratsuba(x, y) { + var n = Math.max(x.length, y.length); + + if (n <= 30) return multiplyLong(x, y); + n = Math.ceil(n / 2); + + var b = x.slice(n), + a = x.slice(0, n), + d = y.slice(n), + c = y.slice(0, n); + + var ac = multiplyKaratsuba(a, c), + bd = multiplyKaratsuba(b, d), + abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d)); + + var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n)); + trim(product); + return product; + } + + // The following function is derived from a surface fit of a graph plotting the performance difference + // between long multiplication and karatsuba multiplication versus the lengths of the two arrays. + function useKaratsuba(l1, l2) { + return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0; + } + + BigInteger.prototype.multiply = function (v) { + var n = parseValue(v), + a = this.value, b = n.value, + sign = this.sign !== n.sign, + abs; + if (n.isSmall) { + if (b === 0) return Integer[0]; + if (b === 1) return this; + if (b === -1) return this.negate(); + abs = Math.abs(b); + if (abs < BASE) { + return new BigInteger(multiplySmall(a, abs), sign); + } + b = smallToArray(abs); + } + if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes + return new BigInteger(multiplyKaratsuba(a, b), sign); + return new BigInteger(multiplyLong(a, b), sign); + }; + + BigInteger.prototype.times = BigInteger.prototype.multiply; + + function multiplySmallAndArray(a, b, sign) { // a >= 0 + if (a < BASE) { + return new BigInteger(multiplySmall(b, a), sign); + } + return new BigInteger(multiplyLong(b, smallToArray(a)), sign); + } + SmallInteger.prototype._multiplyBySmall = function (a) { + if (isPrecise(a.value * this.value)) { + return new SmallInteger(a.value * this.value); + } + return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign); + }; + BigInteger.prototype._multiplyBySmall = function (a) { + if (a.value === 0) return Integer[0]; + if (a.value === 1) return this; + if (a.value === -1) return this.negate(); + return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign); + }; + SmallInteger.prototype.multiply = function (v) { + return parseValue(v)._multiplyBySmall(this); + }; + SmallInteger.prototype.times = SmallInteger.prototype.multiply; + + NativeBigInt.prototype.multiply = function (v) { + return new NativeBigInt(this.value * parseValue(v).value); + } + NativeBigInt.prototype.times = NativeBigInt.prototype.multiply; + + function square(a) { + //console.assert(2 * BASE * BASE < MAX_INT); + var l = a.length, + r = createArray(l + l), + base = BASE, + product, carry, i, a_i, a_j; + for (i = 0; i < l; i++) { + a_i = a[i]; + carry = 0 - a_i * a_i; + for (var j = i; j < l; j++) { + a_j = a[j]; + product = 2 * (a_i * a_j) + r[i + j] + carry; + carry = Math.floor(product / base); + r[i + j] = product - carry * base; + } + r[i + l] = carry; + } + trim(r); + return r; + } + + BigInteger.prototype.square = function () { + return new BigInteger(square(this.value), false); + }; + + SmallInteger.prototype.square = function () { + var value = this.value * this.value; + if (isPrecise(value)) return new SmallInteger(value); + return new BigInteger(square(smallToArray(Math.abs(this.value))), false); + }; + + NativeBigInt.prototype.square = function (v) { + return new NativeBigInt(this.value * this.value); + } + + function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes. + var a_l = a.length, + b_l = b.length, + base = BASE, + result = createArray(b.length), + divisorMostSignificantDigit = b[b_l - 1], + // normalization + lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)), + remainder = multiplySmall(a, lambda), + divisor = multiplySmall(b, lambda), + quotientDigit, shift, carry, borrow, i, l, q; + if (remainder.length <= a_l) remainder.push(0); + divisor.push(0); + divisorMostSignificantDigit = divisor[b_l - 1]; + for (shift = a_l - b_l; shift >= 0; shift--) { + quotientDigit = base - 1; + if (remainder[shift + b_l] !== divisorMostSignificantDigit) { + quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit); + } + // quotientDigit <= base - 1 + carry = 0; + borrow = 0; + l = divisor.length; + for (i = 0; i < l; i++) { + carry += quotientDigit * divisor[i]; + q = Math.floor(carry / base); + borrow += remainder[shift + i] - (carry - q * base); + carry = q; + if (borrow < 0) { + remainder[shift + i] = borrow + base; + borrow = -1; + } else { + remainder[shift + i] = borrow; + borrow = 0; + } + } + while (borrow !== 0) { + quotientDigit -= 1; + carry = 0; + for (i = 0; i < l; i++) { + carry += remainder[shift + i] - base + divisor[i]; + if (carry < 0) { + remainder[shift + i] = carry + base; + carry = 0; + } else { + remainder[shift + i] = carry; + carry = 1; + } + } + borrow += carry; + } + result[shift] = quotientDigit; + } + // denormalization + remainder = divModSmall(remainder, lambda)[0]; + return [arrayToSmall(result), arrayToSmall(remainder)]; + } + + function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/ + // Performs faster than divMod1 on larger input sizes. + var a_l = a.length, + b_l = b.length, + result = [], + part = [], + base = BASE, + guess, xlen, highx, highy, check; + while (a_l) { + part.unshift(a[--a_l]); + trim(part); + if (compareAbs(part, b) < 0) { + result.push(0); + continue; + } + xlen = part.length; + highx = part[xlen - 1] * base + part[xlen - 2]; + highy = b[b_l - 1] * base + b[b_l - 2]; + if (xlen > b_l) { + highx = (highx + 1) * base; + } + guess = Math.ceil(highx / highy); + do { + check = multiplySmall(b, guess); + if (compareAbs(check, part) <= 0) break; + guess--; + } while (guess); + result.push(guess); + part = subtract(part, check); + } + result.reverse(); + return [arrayToSmall(result), arrayToSmall(part)]; + } + + function divModSmall(value, lambda) { + var length = value.length, + quotient = createArray(length), + base = BASE, + i, q, remainder, divisor; + remainder = 0; + for (i = length - 1; i >= 0; --i) { + divisor = remainder * base + value[i]; + q = truncate(divisor / lambda); + remainder = divisor - q * lambda; + quotient[i] = q | 0; + } + return [quotient, remainder | 0]; + } + + function divModAny(self, v) { + var value, n = parseValue(v); + if (supportsNativeBigInt) { + return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)]; + } + var a = self.value, b = n.value; + var quotient; + if (b === 0) throw new Error("Cannot divide by zero"); + if (self.isSmall) { + if (n.isSmall) { + return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)]; + } + return [Integer[0], self]; + } + if (n.isSmall) { + if (b === 1) return [self, Integer[0]]; + if (b == -1) return [self.negate(), Integer[0]]; + var abs = Math.abs(b); + if (abs < BASE) { + value = divModSmall(a, abs); + quotient = arrayToSmall(value[0]); + var remainder = value[1]; + if (self.sign) remainder = -remainder; + if (typeof quotient === "number") { + if (self.sign !== n.sign) quotient = -quotient; + return [new SmallInteger(quotient), new SmallInteger(remainder)]; + } + return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)]; + } + b = smallToArray(abs); + } + var comparison = compareAbs(a, b); + if (comparison === -1) return [Integer[0], self]; + if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]]; + + // divMod1 is faster on smaller input sizes + if (a.length + b.length <= 200) + value = divMod1(a, b); + else value = divMod2(a, b); + + quotient = value[0]; + var qSign = self.sign !== n.sign, + mod = value[1], + mSign = self.sign; + if (typeof quotient === "number") { + if (qSign) quotient = -quotient; + quotient = new SmallInteger(quotient); + } else quotient = new BigInteger(quotient, qSign); + if (typeof mod === "number") { + if (mSign) mod = -mod; + mod = new SmallInteger(mod); + } else mod = new BigInteger(mod, mSign); + return [quotient, mod]; + } + + BigInteger.prototype.divmod = function (v) { + var result = divModAny(this, v); + return { + quotient: result[0], + remainder: result[1] + }; + }; + NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod; + + + BigInteger.prototype.divide = function (v) { + return divModAny(this, v)[0]; + }; + NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) { + return new NativeBigInt(this.value / parseValue(v).value); + }; + SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide; + + BigInteger.prototype.mod = function (v) { + return divModAny(this, v)[1]; + }; + NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) { + return new NativeBigInt(this.value % parseValue(v).value); + }; + SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod; + + BigInteger.prototype.pow = function (v) { + var n = parseValue(v), + a = this.value, + b = n.value, + value, x, y; + if (b === 0) return Integer[1]; + if (a === 0) return Integer[0]; + if (a === 1) return Integer[1]; + if (a === -1) return n.isEven() ? Integer[1] : Integer[-1]; + if (n.sign) { + return Integer[0]; + } + if (!n.isSmall) throw new Error("The exponent " + n.toString() + " is too large."); + if (this.isSmall) { + if (isPrecise(value = Math.pow(a, b))) + return new SmallInteger(truncate(value)); + } + x = this; + y = Integer[1]; + while (true) { + if (b & 1 === 1) { + y = y.times(x); + --b; + } + if (b === 0) break; + b /= 2; + x = x.square(); + } + return y; + }; + SmallInteger.prototype.pow = BigInteger.prototype.pow; + + NativeBigInt.prototype.pow = function (v) { + var n = parseValue(v); + var a = this.value, b = n.value; + var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2); + if (b === _0) return Integer[1]; + if (a === _0) return Integer[0]; + if (a === _1) return Integer[1]; + if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1]; + if (n.isNegative()) return new NativeBigInt(_0); + var x = this; + var y = Integer[1]; + while (true) { + if ((b & _1) === _1) { + y = y.times(x); + --b; + } + if (b === _0) break; + b /= _2; + x = x.square(); + } + return y; + } + + BigInteger.prototype.modPow = function (exp, mod) { + exp = parseValue(exp); + mod = parseValue(mod); + if (mod.isZero()) throw new Error("Cannot take modPow with modulus 0"); + var r = Integer[1], + base = this.mod(mod); + if (exp.isNegative()) { + exp = exp.multiply(Integer[-1]); + base = base.modInv(mod); + } + while (exp.isPositive()) { + if (base.isZero()) return Integer[0]; + if (exp.isOdd()) r = r.multiply(base).mod(mod); + exp = exp.divide(2); + base = base.square().mod(mod); + } + return r; + }; + NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow; + + function compareAbs(a, b) { + if (a.length !== b.length) { + return a.length > b.length ? 1 : -1; + } + for (var i = a.length - 1; i >= 0; i--) { + if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1; + } + return 0; + } + + BigInteger.prototype.compareAbs = function (v) { + var n = parseValue(v), + a = this.value, + b = n.value; + if (n.isSmall) return 1; + return compareAbs(a, b); + }; + SmallInteger.prototype.compareAbs = function (v) { + var n = parseValue(v), + a = Math.abs(this.value), + b = n.value; + if (n.isSmall) { + b = Math.abs(b); + return a === b ? 0 : a > b ? 1 : -1; + } + return -1; + }; + NativeBigInt.prototype.compareAbs = function (v) { + var a = this.value; + var b = parseValue(v).value; + a = a >= 0 ? a : -a; + b = b >= 0 ? b : -b; + return a === b ? 0 : a > b ? 1 : -1; + } + + BigInteger.prototype.compare = function (v) { + // See discussion about comparison with Infinity: + // https://github.com/peterolson/BigInteger.js/issues/61 + if (v === Infinity) { + return -1; + } + if (v === -Infinity) { + return 1; + } + + var n = parseValue(v), + a = this.value, + b = n.value; + if (this.sign !== n.sign) { + return n.sign ? 1 : -1; + } + if (n.isSmall) { + return this.sign ? -1 : 1; + } + return compareAbs(a, b) * (this.sign ? -1 : 1); + }; + BigInteger.prototype.compareTo = BigInteger.prototype.compare; + + SmallInteger.prototype.compare = function (v) { + if (v === Infinity) { + return -1; + } + if (v === -Infinity) { + return 1; + } + + var n = parseValue(v), + a = this.value, + b = n.value; + if (n.isSmall) { + return a == b ? 0 : a > b ? 1 : -1; + } + if (a < 0 !== n.sign) { + return a < 0 ? -1 : 1; + } + return a < 0 ? 1 : -1; + }; + SmallInteger.prototype.compareTo = SmallInteger.prototype.compare; + + NativeBigInt.prototype.compare = function (v) { + if (v === Infinity) { + return -1; + } + if (v === -Infinity) { + return 1; + } + var a = this.value; + var b = parseValue(v).value; + return a === b ? 0 : a > b ? 1 : -1; + } + NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare; + + BigInteger.prototype.equals = function (v) { + return this.compare(v) === 0; + }; + NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals; + + BigInteger.prototype.notEquals = function (v) { + return this.compare(v) !== 0; + }; + NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals; + + BigInteger.prototype.greater = function (v) { + return this.compare(v) > 0; + }; + NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater; + + BigInteger.prototype.lesser = function (v) { + return this.compare(v) < 0; + }; + NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser; + + BigInteger.prototype.greaterOrEquals = function (v) { + return this.compare(v) >= 0; + }; + NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals; + + BigInteger.prototype.lesserOrEquals = function (v) { + return this.compare(v) <= 0; + }; + NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals; + + BigInteger.prototype.isEven = function () { + return (this.value[0] & 1) === 0; + }; + SmallInteger.prototype.isEven = function () { + return (this.value & 1) === 0; + }; + NativeBigInt.prototype.isEven = function () { + return (this.value & BigInt(1)) === BigInt(0); + } + + BigInteger.prototype.isOdd = function () { + return (this.value[0] & 1) === 1; + }; + SmallInteger.prototype.isOdd = function () { + return (this.value & 1) === 1; + }; + NativeBigInt.prototype.isOdd = function () { + return (this.value & BigInt(1)) === BigInt(1); + } + + BigInteger.prototype.isPositive = function () { + return !this.sign; + }; + SmallInteger.prototype.isPositive = function () { + return this.value > 0; + }; + NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive; + + BigInteger.prototype.isNegative = function () { + return this.sign; + }; + SmallInteger.prototype.isNegative = function () { + return this.value < 0; + }; + NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative; + + BigInteger.prototype.isUnit = function () { + return false; + }; + SmallInteger.prototype.isUnit = function () { + return Math.abs(this.value) === 1; + }; + NativeBigInt.prototype.isUnit = function () { + return this.abs().value === BigInt(1); + } + + BigInteger.prototype.isZero = function () { + return false; + }; + SmallInteger.prototype.isZero = function () { + return this.value === 0; + }; + NativeBigInt.prototype.isZero = function () { + return this.value === BigInt(0); + } + + BigInteger.prototype.isDivisibleBy = function (v) { + var n = parseValue(v); + if (n.isZero()) return false; + if (n.isUnit()) return true; + if (n.compareAbs(2) === 0) return this.isEven(); + return this.mod(n).isZero(); + }; + NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy; + + function isBasicPrime(v) { + var n = v.abs(); + if (n.isUnit()) return false; + if (n.equals(2) || n.equals(3) || n.equals(5)) return true; + if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false; + if (n.lesser(49)) return true; + // we don't know if it's prime: let the other functions figure it out + } + + function millerRabinTest(n, a) { + var nPrev = n.prev(), + b = nPrev, + r = 0, + d, t, i, x; + while (b.isEven()) b = b.divide(2), r++; + next: for (i = 0; i < a.length; i++) { + if (n.lesser(a[i])) continue; + x = bigInt(a[i]).modPow(b, n); + if (x.isUnit() || x.equals(nPrev)) continue; + for (d = r - 1; d != 0; d--) { + x = x.square().mod(n); + if (x.isUnit()) return false; + if (x.equals(nPrev)) continue next; + } + return false; + } + return true; + } + + // Set "strict" to true to force GRH-supported lower bound of 2*log(N)^2 + BigInteger.prototype.isPrime = function (strict) { + var isPrime = isBasicPrime(this); + if (isPrime !== undefined) return isPrime; + var n = this.abs(); + var bits = n.bitLength(); + if (bits <= 64) + return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]); + var logN = Math.log(2) * bits.toJSNumber(); + var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN); + for (var a = [], i = 0; i < t; i++) { + a.push(bigInt(i + 2)); + } + return millerRabinTest(n, a); + }; + NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime; + + BigInteger.prototype.isProbablePrime = function (iterations, rng) { + var isPrime = isBasicPrime(this); + if (isPrime !== undefined) return isPrime; + var n = this.abs(); + var t = iterations === undefined ? 5 : iterations; + for (var a = [], i = 0; i < t; i++) { + a.push(bigInt.randBetween(2, n.minus(2), rng)); + } + return millerRabinTest(n, a); + }; + NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime; + + BigInteger.prototype.modInv = function (n) { + var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR; + while (!newR.isZero()) { + q = r.divide(newR); + lastT = t; + lastR = r; + t = newT; + r = newR; + newT = lastT.subtract(q.multiply(newT)); + newR = lastR.subtract(q.multiply(newR)); + } + if (!r.isUnit()) throw new Error(this.toString() + " and " + n.toString() + " are not co-prime"); + if (t.compare(0) === -1) { + t = t.add(n); + } + if (this.isNegative()) { + return t.negate(); + } + return t; + }; + + NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv; + + BigInteger.prototype.next = function () { + var value = this.value; + if (this.sign) { + return subtractSmall(value, 1, this.sign); + } + return new BigInteger(addSmall(value, 1), this.sign); + }; + SmallInteger.prototype.next = function () { + var value = this.value; + if (value + 1 < MAX_INT) return new SmallInteger(value + 1); + return new BigInteger(MAX_INT_ARR, false); + }; + NativeBigInt.prototype.next = function () { + return new NativeBigInt(this.value + BigInt(1)); + } + + BigInteger.prototype.prev = function () { + var value = this.value; + if (this.sign) { + return new BigInteger(addSmall(value, 1), true); + } + return subtractSmall(value, 1, this.sign); + }; + SmallInteger.prototype.prev = function () { + var value = this.value; + if (value - 1 > -MAX_INT) return new SmallInteger(value - 1); + return new BigInteger(MAX_INT_ARR, true); + }; + NativeBigInt.prototype.prev = function () { + return new NativeBigInt(this.value - BigInt(1)); + } + + var powersOfTwo = [1]; + while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]); + var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1]; + + function shift_isSmall(n) { + return Math.abs(n) <= BASE; + } + + BigInteger.prototype.shiftLeft = function (v) { + var n = parseValue(v).toJSNumber(); + if (!shift_isSmall(n)) { + throw new Error(String(n) + " is too large for shifting."); + } + if (n < 0) return this.shiftRight(-n); + var result = this; + if (result.isZero()) return result; + while (n >= powers2Length) { + result = result.multiply(highestPower2); + n -= powers2Length - 1; + } + return result.multiply(powersOfTwo[n]); + }; + NativeBigInt.prototype.shiftLeft = SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft; + + BigInteger.prototype.shiftRight = function (v) { + var remQuo; + var n = parseValue(v).toJSNumber(); + if (!shift_isSmall(n)) { + throw new Error(String(n) + " is too large for shifting."); + } + if (n < 0) return this.shiftLeft(-n); + var result = this; + while (n >= powers2Length) { + if (result.isZero() || (result.isNegative() && result.isUnit())) return result; + remQuo = divModAny(result, highestPower2); + result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0]; + n -= powers2Length - 1; + } + remQuo = divModAny(result, powersOfTwo[n]); + return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0]; + }; + NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight; + + function bitwise(x, y, fn) { + y = parseValue(y); + var xSign = x.isNegative(), ySign = y.isNegative(); + var xRem = xSign ? x.not() : x, + yRem = ySign ? y.not() : y; + var xDigit = 0, yDigit = 0; + var xDivMod = null, yDivMod = null; + var result = []; + while (!xRem.isZero() || !yRem.isZero()) { + xDivMod = divModAny(xRem, highestPower2); + xDigit = xDivMod[1].toJSNumber(); + if (xSign) { + xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers + } + + yDivMod = divModAny(yRem, highestPower2); + yDigit = yDivMod[1].toJSNumber(); + if (ySign) { + yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers + } + + xRem = xDivMod[0]; + yRem = yDivMod[0]; + result.push(fn(xDigit, yDigit)); + } + var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0); + for (var i = result.length - 1; i >= 0; i -= 1) { + sum = sum.multiply(highestPower2).add(bigInt(result[i])); + } + return sum; + } + + BigInteger.prototype.not = function () { + return this.negate().prev(); + }; + NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not; + + BigInteger.prototype.and = function (n) { + return bitwise(this, n, function (a, b) { return a & b; }); + }; + NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and; + + BigInteger.prototype.or = function (n) { + return bitwise(this, n, function (a, b) { return a | b; }); + }; + NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or; + + BigInteger.prototype.xor = function (n) { + return bitwise(this, n, function (a, b) { return a ^ b; }); + }; + NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor; + + var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I; + function roughLOB(n) { // get lowestOneBit (rough) + // SmallInteger: return Min(lowestOneBit(n), 1 << 30) + // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7] + var v = n.value, + x = typeof v === "number" ? v | LOBMASK_I : + typeof v === "bigint" ? v | BigInt(LOBMASK_I) : + v[0] + v[1] * BASE | LOBMASK_BI; + return x & -x; + } + + function integerLogarithm(value, base) { + if (base.compareTo(value) <= 0) { + var tmp = integerLogarithm(value, base.square(base)); + var p = tmp.p; + var e = tmp.e; + var t = p.multiply(base); + return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 }; + } + return { p: bigInt(1), e: 0 }; + } + + BigInteger.prototype.bitLength = function () { + var n = this; + if (n.compareTo(bigInt(0)) < 0) { + n = n.negate().subtract(bigInt(1)); + } + if (n.compareTo(bigInt(0)) === 0) { + return bigInt(0); + } + return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1)); + } + NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength; + + function max(a, b) { + a = parseValue(a); + b = parseValue(b); + return a.greater(b) ? a : b; + } + function min(a, b) { + a = parseValue(a); + b = parseValue(b); + return a.lesser(b) ? a : b; + } + function gcd(a, b) { + a = parseValue(a).abs(); + b = parseValue(b).abs(); + if (a.equals(b)) return a; + if (a.isZero()) return b; + if (b.isZero()) return a; + var c = Integer[1], d, t; + while (a.isEven() && b.isEven()) { + d = min(roughLOB(a), roughLOB(b)); + a = a.divide(d); + b = b.divide(d); + c = c.multiply(d); + } + while (a.isEven()) { + a = a.divide(roughLOB(a)); + } + do { + while (b.isEven()) { + b = b.divide(roughLOB(b)); + } + if (a.greater(b)) { + t = b; b = a; a = t; + } + b = b.subtract(a); + } while (!b.isZero()); + return c.isUnit() ? a : a.multiply(c); + } + function lcm(a, b) { + a = parseValue(a).abs(); + b = parseValue(b).abs(); + return a.divide(gcd(a, b)).multiply(b); + } + function randBetween(a, b, rng) { + a = parseValue(a); + b = parseValue(b); + var usedRNG = rng || Math.random; + var low = min(a, b), high = max(a, b); + var range = high.subtract(low).add(1); + if (range.isSmall) return low.add(Math.floor(usedRNG() * range)); + var digits = toBase(range, BASE).value; + var result = [], restricted = true; + for (var i = 0; i < digits.length; i++) { + var top = restricted ? digits[i] + (i + 1 < digits.length ? digits[i + 1] / BASE : 0) : BASE; + var digit = truncate(usedRNG() * top); + result.push(digit); + if (digit < digits[i]) restricted = false; + } + return low.add(Integer.fromArray(result, BASE, false)); + } + + var parseBase = function (text, base, alphabet, caseSensitive) { + alphabet = alphabet || DEFAULT_ALPHABET; + text = String(text); + if (!caseSensitive) { + text = text.toLowerCase(); + alphabet = alphabet.toLowerCase(); + } + var length = text.length; + var i; + var absBase = Math.abs(base); + var alphabetValues = {}; + for (i = 0; i < alphabet.length; i++) { + alphabetValues[alphabet[i]] = i; + } + for (i = 0; i < length; i++) { + var c = text[i]; + if (c === "-") continue; + if (c in alphabetValues) { + if (alphabetValues[c] >= absBase) { + if (c === "1" && absBase === 1) continue; + throw new Error(c + " is not a valid digit in base " + base + "."); + } + } + } + base = parseValue(base); + var digits = []; + var isNegative = text[0] === "-"; + for (i = isNegative ? 1 : 0; i < text.length; i++) { + var c = text[i]; + if (c in alphabetValues) digits.push(parseValue(alphabetValues[c])); + else if (c === "<") { + var start = i; + do { i++; } while (text[i] !== ">" && i < text.length); + digits.push(parseValue(text.slice(start + 1, i))); + } + else throw new Error(c + " is not a valid character"); + } + return parseBaseFromArray(digits, base, isNegative); + }; + + function parseBaseFromArray(digits, base, isNegative) { + var val = Integer[0], pow = Integer[1], i; + for (i = digits.length - 1; i >= 0; i--) { + val = val.add(digits[i].times(pow)); + pow = pow.times(base); + } + return isNegative ? val.negate() : val; + } + + function stringify(digit, alphabet) { + alphabet = alphabet || DEFAULT_ALPHABET; + if (digit < alphabet.length) { + return alphabet[digit]; + } + return "<" + digit + ">"; + } + + function toBase(n, base) { + base = bigInt(base); + if (base.isZero()) { + if (n.isZero()) return { value: [0], isNegative: false }; + throw new Error("Cannot convert nonzero numbers to base 0."); + } + if (base.equals(-1)) { + if (n.isZero()) return { value: [0], isNegative: false }; + if (n.isNegative()) + return { + value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber())) + .map(Array.prototype.valueOf, [1, 0]) + ), + isNegative: false + }; + + var arr = Array.apply(null, Array(n.toJSNumber() - 1)) + .map(Array.prototype.valueOf, [0, 1]); + arr.unshift([1]); + return { + value: [].concat.apply([], arr), + isNegative: false + }; + } + + var neg = false; + if (n.isNegative() && base.isPositive()) { + neg = true; + n = n.abs(); + } + if (base.isUnit()) { + if (n.isZero()) return { value: [0], isNegative: false }; + + return { + value: Array.apply(null, Array(n.toJSNumber())) + .map(Number.prototype.valueOf, 1), + isNegative: neg + }; + } + var out = []; + var left = n, divmod; + while (left.isNegative() || left.compareAbs(base) >= 0) { + divmod = left.divmod(base); + left = divmod.quotient; + var digit = divmod.remainder; + if (digit.isNegative()) { + digit = base.minus(digit).abs(); + left = left.next(); + } + out.push(digit.toJSNumber()); + } + out.push(left.toJSNumber()); + return { value: out.reverse(), isNegative: neg }; + } + + function toBaseString(n, base, alphabet) { + var arr = toBase(n, base); + return (arr.isNegative ? "-" : "") + arr.value.map(function (x) { + return stringify(x, alphabet); + }).join(''); + } + + BigInteger.prototype.toArray = function (radix) { + return toBase(this, radix); + }; + + SmallInteger.prototype.toArray = function (radix) { + return toBase(this, radix); + }; + + NativeBigInt.prototype.toArray = function (radix) { + return toBase(this, radix); + }; + + BigInteger.prototype.toString = function (radix, alphabet) { + if (radix === undefined) radix = 10; + if (radix !== 10 || alphabet) return toBaseString(this, radix, alphabet); + var v = this.value, l = v.length, str = String(v[--l]), zeros = "0000000", digit; + while (--l >= 0) { + digit = String(v[l]); + str += zeros.slice(digit.length) + digit; + } + var sign = this.sign ? "-" : ""; + return sign + str; + }; + + SmallInteger.prototype.toString = function (radix, alphabet) { + if (radix === undefined) radix = 10; + if (radix != 10 || alphabet) return toBaseString(this, radix, alphabet); + return String(this.value); + }; + + NativeBigInt.prototype.toString = SmallInteger.prototype.toString; + + NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); } + + BigInteger.prototype.valueOf = function () { + return parseInt(this.toString(), 10); + }; + BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf; + + SmallInteger.prototype.valueOf = function () { + return this.value; + }; + SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf; + NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () { + return parseInt(this.toString(), 10); + } + + function parseStringValue(v) { + if (isPrecise(+v)) { + var x = +v; + if (x === truncate(x)) + return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x); + throw new Error("Invalid integer: " + v); + } + var sign = v[0] === "-"; + if (sign) v = v.slice(1); + var split = v.split(/e/i); + if (split.length > 2) throw new Error("Invalid integer: " + split.join("e")); + if (split.length === 2) { + var exp = split[1]; + if (exp[0] === "+") exp = exp.slice(1); + exp = +exp; + if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error("Invalid integer: " + exp + " is not a valid exponent."); + var text = split[0]; + var decimalPlace = text.indexOf("."); + if (decimalPlace >= 0) { + exp -= text.length - decimalPlace - 1; + text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1); + } + if (exp < 0) throw new Error("Cannot include negative exponent part for integers"); + text += (new Array(exp + 1)).join("0"); + v = text; + } + var isValid = /^([0-9][0-9]*)$/.test(v); + if (!isValid) throw new Error("Invalid integer: " + v); + if (supportsNativeBigInt) { + return new NativeBigInt(BigInt(sign ? "-" + v : v)); + } + var r = [], max = v.length, l = LOG_BASE, min = max - l; + while (max > 0) { + r.push(+v.slice(min, max)); + min -= l; + if (min < 0) min = 0; + max -= l; + } + trim(r); + return new BigInteger(r, sign); + } + + function parseNumberValue(v) { + if (supportsNativeBigInt) { + return new NativeBigInt(BigInt(v)); + } + if (isPrecise(v)) { + if (v !== truncate(v)) throw new Error(v + " is not an integer."); + return new SmallInteger(v); + } + return parseStringValue(v.toString()); + } + + function parseValue(v) { + if (typeof v === "number") { + return parseNumberValue(v); + } + if (typeof v === "string") { + return parseStringValue(v); + } + if (typeof v === "bigint") { + return new NativeBigInt(v); + } + return v; + } + // Pre-define numbers in range [-999,999] + for (var i = 0; i < 1000; i++) { + Integer[i] = parseValue(i); + if (i > 0) Integer[-i] = parseValue(-i); + } + // Backwards compatibility + Integer.one = Integer[1]; + Integer.zero = Integer[0]; + Integer.minusOne = Integer[-1]; + Integer.max = max; + Integer.min = min; + Integer.gcd = gcd; + Integer.lcm = lcm; + Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; }; + Integer.randBetween = randBetween; + + Integer.fromArray = function (digits, base, isNegative) { + return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative); + }; + + return Integer; +})(); + +// Node.js check +if (typeof module !== "undefined" && module.hasOwnProperty("exports")) { + module.exports = bigInt; +} + +//amd check +if (typeof define === "function" && define.amd) { + define( function () { + return bigInt; + }); +} diff --git a/node_backend/node_modules/big-integer/BigInteger.min.js b/node_backend/node_modules/big-integer/BigInteger.min.js new file mode 100644 index 0000000000000000000000000000000000000000..a960fa647905dc72f72f8eac043bb33d5ba12c75 --- /dev/null +++ b/node_backend/node_modules/big-integer/BigInteger.min.js @@ -0,0 +1 @@ +var bigInt=function(undefined){"use strict";var BASE=1e7,LOG_BASE=7,MAX_INT=9007199254740992,MAX_INT_ARR=smallToArray(MAX_INT),DEFAULT_ALPHABET="0123456789abcdefghijklmnopqrstuvwxyz";var supportsNativeBigInt=typeof BigInt==="function";function Integer(v,radix,alphabet,caseSensitive){if(typeof v==="undefined")return Integer[0];if(typeof radix!=="undefined")return+radix===10&&!alphabet?parseValue(v):parseBase(v,radix,alphabet,caseSensitive);return parseValue(v)}function BigInteger(value,sign){this.value=value;this.sign=sign;this.isSmall=false}BigInteger.prototype=Object.create(Integer.prototype);function SmallInteger(value){this.value=value;this.sign=value<0;this.isSmall=true}SmallInteger.prototype=Object.create(Integer.prototype);function NativeBigInt(value){this.value=value}NativeBigInt.prototype=Object.create(Integer.prototype);function isPrecise(n){return-MAX_INT0)return Math.floor(n);return Math.ceil(n)}function add(a,b){var l_a=a.length,l_b=b.length,r=new Array(l_a),carry=0,base=BASE,sum,i;for(i=0;i=base?1:0;r[i]=sum-carry*base}while(i0)r.push(carry);return r}function addAny(a,b){if(a.length>=b.length)return add(a,b);return add(b,a)}function addSmall(a,carry){var l=a.length,r=new Array(l),base=BASE,sum,i;for(i=0;i0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}BigInteger.prototype.add=function(v){var n=parseValue(v);if(this.sign!==n.sign){return this.subtract(n.negate())}var a=this.value,b=n.value;if(n.isSmall){return new BigInteger(addSmall(a,Math.abs(b)),this.sign)}return new BigInteger(addAny(a,b),this.sign)};BigInteger.prototype.plus=BigInteger.prototype.add;SmallInteger.prototype.add=function(v){var n=parseValue(v);var a=this.value;if(a<0!==n.sign){return this.subtract(n.negate())}var b=n.value;if(n.isSmall){if(isPrecise(a+b))return new SmallInteger(a+b);b=smallToArray(Math.abs(b))}return new BigInteger(addSmall(b,Math.abs(a)),a<0)};SmallInteger.prototype.plus=SmallInteger.prototype.add;NativeBigInt.prototype.add=function(v){return new NativeBigInt(this.value+parseValue(v).value)};NativeBigInt.prototype.plus=NativeBigInt.prototype.add;function subtract(a,b){var a_l=a.length,b_l=b.length,r=new Array(a_l),borrow=0,base=BASE,i,difference;for(i=0;i=0){value=subtract(a,b)}else{value=subtract(b,a);sign=!sign}value=arrayToSmall(value);if(typeof value==="number"){if(sign)value=-value;return new SmallInteger(value)}return new BigInteger(value,sign)}function subtractSmall(a,b,sign){var l=a.length,r=new Array(l),carry=-b,base=BASE,i,difference;for(i=0;i=0)};SmallInteger.prototype.minus=SmallInteger.prototype.subtract;NativeBigInt.prototype.subtract=function(v){return new NativeBigInt(this.value-parseValue(v).value)};NativeBigInt.prototype.minus=NativeBigInt.prototype.subtract;BigInteger.prototype.negate=function(){return new BigInteger(this.value,!this.sign)};SmallInteger.prototype.negate=function(){var sign=this.sign;var small=new SmallInteger(-this.value);small.sign=!sign;return small};NativeBigInt.prototype.negate=function(){return new NativeBigInt(-this.value)};BigInteger.prototype.abs=function(){return new BigInteger(this.value,false)};SmallInteger.prototype.abs=function(){return new SmallInteger(Math.abs(this.value))};NativeBigInt.prototype.abs=function(){return new NativeBigInt(this.value>=0?this.value:-this.value)};function multiplyLong(a,b){var a_l=a.length,b_l=b.length,l=a_l+b_l,r=createArray(l),base=BASE,product,carry,i,a_i,b_j;for(i=0;i0){r[i++]=carry%base;carry=Math.floor(carry/base)}return r}function shiftLeft(x,n){var r=[];while(n-- >0)r.push(0);return r.concat(x)}function multiplyKaratsuba(x,y){var n=Math.max(x.length,y.length);if(n<=30)return multiplyLong(x,y);n=Math.ceil(n/2);var b=x.slice(n),a=x.slice(0,n),d=y.slice(n),c=y.slice(0,n);var ac=multiplyKaratsuba(a,c),bd=multiplyKaratsuba(b,d),abcd=multiplyKaratsuba(addAny(a,b),addAny(c,d));var product=addAny(addAny(ac,shiftLeft(subtract(subtract(abcd,ac),bd),n)),shiftLeft(bd,2*n));trim(product);return product}function useKaratsuba(l1,l2){return-.012*l1-.012*l2+15e-6*l1*l2>0}BigInteger.prototype.multiply=function(v){var n=parseValue(v),a=this.value,b=n.value,sign=this.sign!==n.sign,abs;if(n.isSmall){if(b===0)return Integer[0];if(b===1)return this;if(b===-1)return this.negate();abs=Math.abs(b);if(abs=0;shift--){quotientDigit=base-1;if(remainder[shift+b_l]!==divisorMostSignificantDigit){quotientDigit=Math.floor((remainder[shift+b_l]*base+remainder[shift+b_l-1])/divisorMostSignificantDigit)}carry=0;borrow=0;l=divisor.length;for(i=0;ib_l){highx=(highx+1)*base}guess=Math.ceil(highx/highy);do{check=multiplySmall(b,guess);if(compareAbs(check,part)<=0)break;guess--}while(guess);result.push(guess);part=subtract(part,check)}result.reverse();return[arrayToSmall(result),arrayToSmall(part)]}function divModSmall(value,lambda){var length=value.length,quotient=createArray(length),base=BASE,i,q,remainder,divisor;remainder=0;for(i=length-1;i>=0;--i){divisor=remainder*base+value[i];q=truncate(divisor/lambda);remainder=divisor-q*lambda;quotient[i]=q|0}return[quotient,remainder|0]}function divModAny(self,v){var value,n=parseValue(v);if(supportsNativeBigInt){return[new NativeBigInt(self.value/n.value),new NativeBigInt(self.value%n.value)]}var a=self.value,b=n.value;var quotient;if(b===0)throw new Error("Cannot divide by zero");if(self.isSmall){if(n.isSmall){return[new SmallInteger(truncate(a/b)),new SmallInteger(a%b)]}return[Integer[0],self]}if(n.isSmall){if(b===1)return[self,Integer[0]];if(b==-1)return[self.negate(),Integer[0]];var abs=Math.abs(b);if(absb.length?1:-1}for(var i=a.length-1;i>=0;i--){if(a[i]!==b[i])return a[i]>b[i]?1:-1}return 0}BigInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall)return 1;return compareAbs(a,b)};SmallInteger.prototype.compareAbs=function(v){var n=parseValue(v),a=Math.abs(this.value),b=n.value;if(n.isSmall){b=Math.abs(b);return a===b?0:a>b?1:-1}return-1};NativeBigInt.prototype.compareAbs=function(v){var a=this.value;var b=parseValue(v).value;a=a>=0?a:-a;b=b>=0?b:-b;return a===b?0:a>b?1:-1};BigInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(this.sign!==n.sign){return n.sign?1:-1}if(n.isSmall){return this.sign?-1:1}return compareAbs(a,b)*(this.sign?-1:1)};BigInteger.prototype.compareTo=BigInteger.prototype.compare;SmallInteger.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var n=parseValue(v),a=this.value,b=n.value;if(n.isSmall){return a==b?0:a>b?1:-1}if(a<0!==n.sign){return a<0?-1:1}return a<0?1:-1};SmallInteger.prototype.compareTo=SmallInteger.prototype.compare;NativeBigInt.prototype.compare=function(v){if(v===Infinity){return-1}if(v===-Infinity){return 1}var a=this.value;var b=parseValue(v).value;return a===b?0:a>b?1:-1};NativeBigInt.prototype.compareTo=NativeBigInt.prototype.compare;BigInteger.prototype.equals=function(v){return this.compare(v)===0};NativeBigInt.prototype.eq=NativeBigInt.prototype.equals=SmallInteger.prototype.eq=SmallInteger.prototype.equals=BigInteger.prototype.eq=BigInteger.prototype.equals;BigInteger.prototype.notEquals=function(v){return this.compare(v)!==0};NativeBigInt.prototype.neq=NativeBigInt.prototype.notEquals=SmallInteger.prototype.neq=SmallInteger.prototype.notEquals=BigInteger.prototype.neq=BigInteger.prototype.notEquals;BigInteger.prototype.greater=function(v){return this.compare(v)>0};NativeBigInt.prototype.gt=NativeBigInt.prototype.greater=SmallInteger.prototype.gt=SmallInteger.prototype.greater=BigInteger.prototype.gt=BigInteger.prototype.greater;BigInteger.prototype.lesser=function(v){return this.compare(v)<0};NativeBigInt.prototype.lt=NativeBigInt.prototype.lesser=SmallInteger.prototype.lt=SmallInteger.prototype.lesser=BigInteger.prototype.lt=BigInteger.prototype.lesser;BigInteger.prototype.greaterOrEquals=function(v){return this.compare(v)>=0};NativeBigInt.prototype.geq=NativeBigInt.prototype.greaterOrEquals=SmallInteger.prototype.geq=SmallInteger.prototype.greaterOrEquals=BigInteger.prototype.geq=BigInteger.prototype.greaterOrEquals;BigInteger.prototype.lesserOrEquals=function(v){return this.compare(v)<=0};NativeBigInt.prototype.leq=NativeBigInt.prototype.lesserOrEquals=SmallInteger.prototype.leq=SmallInteger.prototype.lesserOrEquals=BigInteger.prototype.leq=BigInteger.prototype.lesserOrEquals;BigInteger.prototype.isEven=function(){return(this.value[0]&1)===0};SmallInteger.prototype.isEven=function(){return(this.value&1)===0};NativeBigInt.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)};BigInteger.prototype.isOdd=function(){return(this.value[0]&1)===1};SmallInteger.prototype.isOdd=function(){return(this.value&1)===1};NativeBigInt.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)};BigInteger.prototype.isPositive=function(){return!this.sign};SmallInteger.prototype.isPositive=function(){return this.value>0};NativeBigInt.prototype.isPositive=SmallInteger.prototype.isPositive;BigInteger.prototype.isNegative=function(){return this.sign};SmallInteger.prototype.isNegative=function(){return this.value<0};NativeBigInt.prototype.isNegative=SmallInteger.prototype.isNegative;BigInteger.prototype.isUnit=function(){return false};SmallInteger.prototype.isUnit=function(){return Math.abs(this.value)===1};NativeBigInt.prototype.isUnit=function(){return this.abs().value===BigInt(1)};BigInteger.prototype.isZero=function(){return false};SmallInteger.prototype.isZero=function(){return this.value===0};NativeBigInt.prototype.isZero=function(){return this.value===BigInt(0)};BigInteger.prototype.isDivisibleBy=function(v){var n=parseValue(v);if(n.isZero())return false;if(n.isUnit())return true;if(n.compareAbs(2)===0)return this.isEven();return this.mod(n).isZero()};NativeBigInt.prototype.isDivisibleBy=SmallInteger.prototype.isDivisibleBy=BigInteger.prototype.isDivisibleBy;function isBasicPrime(v){var n=v.abs();if(n.isUnit())return false;if(n.equals(2)||n.equals(3)||n.equals(5))return true;if(n.isEven()||n.isDivisibleBy(3)||n.isDivisibleBy(5))return false;if(n.lesser(49))return true}function millerRabinTest(n,a){var nPrev=n.prev(),b=nPrev,r=0,d,t,i,x;while(b.isEven())b=b.divide(2),r++;next:for(i=0;i-MAX_INT)return new SmallInteger(value-1);return new BigInteger(MAX_INT_ARR,true)};NativeBigInt.prototype.prev=function(){return new NativeBigInt(this.value-BigInt(1))};var powersOfTwo=[1];while(2*powersOfTwo[powersOfTwo.length-1]<=BASE)powersOfTwo.push(2*powersOfTwo[powersOfTwo.length-1]);var powers2Length=powersOfTwo.length,highestPower2=powersOfTwo[powers2Length-1];function shift_isSmall(n){return Math.abs(n)<=BASE}BigInteger.prototype.shiftLeft=function(v){var n=parseValue(v).toJSNumber();if(!shift_isSmall(n)){throw new Error(String(n)+" is too large for shifting.")}if(n<0)return this.shiftRight(-n);var result=this;if(result.isZero())return result;while(n>=powers2Length){result=result.multiply(highestPower2);n-=powers2Length-1}return result.multiply(powersOfTwo[n])};NativeBigInt.prototype.shiftLeft=SmallInteger.prototype.shiftLeft=BigInteger.prototype.shiftLeft;BigInteger.prototype.shiftRight=function(v){var remQuo;var n=parseValue(v).toJSNumber();if(!shift_isSmall(n)){throw new Error(String(n)+" is too large for shifting.")}if(n<0)return this.shiftLeft(-n);var result=this;while(n>=powers2Length){if(result.isZero()||result.isNegative()&&result.isUnit())return result;remQuo=divModAny(result,highestPower2);result=remQuo[1].isNegative()?remQuo[0].prev():remQuo[0];n-=powers2Length-1}remQuo=divModAny(result,powersOfTwo[n]);return remQuo[1].isNegative()?remQuo[0].prev():remQuo[0]};NativeBigInt.prototype.shiftRight=SmallInteger.prototype.shiftRight=BigInteger.prototype.shiftRight;function bitwise(x,y,fn){y=parseValue(y);var xSign=x.isNegative(),ySign=y.isNegative();var xRem=xSign?x.not():x,yRem=ySign?y.not():y;var xDigit=0,yDigit=0;var xDivMod=null,yDivMod=null;var result=[];while(!xRem.isZero()||!yRem.isZero()){xDivMod=divModAny(xRem,highestPower2);xDigit=xDivMod[1].toJSNumber();if(xSign){xDigit=highestPower2-1-xDigit}yDivMod=divModAny(yRem,highestPower2);yDigit=yDivMod[1].toJSNumber();if(ySign){yDigit=highestPower2-1-yDigit}xRem=xDivMod[0];yRem=yDivMod[0];result.push(fn(xDigit,yDigit))}var sum=fn(xSign?1:0,ySign?1:0)!==0?bigInt(-1):bigInt(0);for(var i=result.length-1;i>=0;i-=1){sum=sum.multiply(highestPower2).add(bigInt(result[i]))}return sum}BigInteger.prototype.not=function(){return this.negate().prev()};NativeBigInt.prototype.not=SmallInteger.prototype.not=BigInteger.prototype.not;BigInteger.prototype.and=function(n){return bitwise(this,n,function(a,b){return a&b})};NativeBigInt.prototype.and=SmallInteger.prototype.and=BigInteger.prototype.and;BigInteger.prototype.or=function(n){return bitwise(this,n,function(a,b){return a|b})};NativeBigInt.prototype.or=SmallInteger.prototype.or=BigInteger.prototype.or;BigInteger.prototype.xor=function(n){return bitwise(this,n,function(a,b){return a^b})};NativeBigInt.prototype.xor=SmallInteger.prototype.xor=BigInteger.prototype.xor;var LOBMASK_I=1<<30,LOBMASK_BI=(BASE&-BASE)*(BASE&-BASE)|LOBMASK_I;function roughLOB(n){var v=n.value,x=typeof v==="number"?v|LOBMASK_I:typeof v==="bigint"?v|BigInt(LOBMASK_I):v[0]+v[1]*BASE|LOBMASK_BI;return x&-x}function integerLogarithm(value,base){if(base.compareTo(value)<=0){var tmp=integerLogarithm(value,base.square(base));var p=tmp.p;var e=tmp.e;var t=p.multiply(base);return t.compareTo(value)<=0?{p:t,e:e*2+1}:{p:p,e:e*2}}return{p:bigInt(1),e:0}}BigInteger.prototype.bitLength=function(){var n=this;if(n.compareTo(bigInt(0))<0){n=n.negate().subtract(bigInt(1))}if(n.compareTo(bigInt(0))===0){return bigInt(0)}return bigInt(integerLogarithm(n,bigInt(2)).e).add(bigInt(1))};NativeBigInt.prototype.bitLength=SmallInteger.prototype.bitLength=BigInteger.prototype.bitLength;function max(a,b){a=parseValue(a);b=parseValue(b);return a.greater(b)?a:b}function min(a,b){a=parseValue(a);b=parseValue(b);return a.lesser(b)?a:b}function gcd(a,b){a=parseValue(a).abs();b=parseValue(b).abs();if(a.equals(b))return a;if(a.isZero())return b;if(b.isZero())return a;var c=Integer[1],d,t;while(a.isEven()&&b.isEven()){d=min(roughLOB(a),roughLOB(b));a=a.divide(d);b=b.divide(d);c=c.multiply(d)}while(a.isEven()){a=a.divide(roughLOB(a))}do{while(b.isEven()){b=b.divide(roughLOB(b))}if(a.greater(b)){t=b;b=a;a=t}b=b.subtract(a)}while(!b.isZero());return c.isUnit()?a:a.multiply(c)}function lcm(a,b){a=parseValue(a).abs();b=parseValue(b).abs();return a.divide(gcd(a,b)).multiply(b)}function randBetween(a,b,rng){a=parseValue(a);b=parseValue(b);var usedRNG=rng||Math.random;var low=min(a,b),high=max(a,b);var range=high.subtract(low).add(1);if(range.isSmall)return low.add(Math.floor(usedRNG()*range));var digits=toBase(range,BASE).value;var result=[],restricted=true;for(var i=0;i=absBase){if(c==="1"&&absBase===1)continue;throw new Error(c+" is not a valid digit in base "+base+".")}}}base=parseValue(base);var digits=[];var isNegative=text[0]==="-";for(i=isNegative?1:0;i"&&i=0;i--){val=val.add(digits[i].times(pow));pow=pow.times(base)}return isNegative?val.negate():val}function stringify(digit,alphabet){alphabet=alphabet||DEFAULT_ALPHABET;if(digit"}function toBase(n,base){base=bigInt(base);if(base.isZero()){if(n.isZero())return{value:[0],isNegative:false};throw new Error("Cannot convert nonzero numbers to base 0.")}if(base.equals(-1)){if(n.isZero())return{value:[0],isNegative:false};if(n.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-n.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:false};var arr=Array.apply(null,Array(n.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);arr.unshift([1]);return{value:[].concat.apply([],arr),isNegative:false}}var neg=false;if(n.isNegative()&&base.isPositive()){neg=true;n=n.abs()}if(base.isUnit()){if(n.isZero())return{value:[0],isNegative:false};return{value:Array.apply(null,Array(n.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:neg}}var out=[];var left=n,divmod;while(left.isNegative()||left.compareAbs(base)>=0){divmod=left.divmod(base);left=divmod.quotient;var digit=divmod.remainder;if(digit.isNegative()){digit=base.minus(digit).abs();left=left.next()}out.push(digit.toJSNumber())}out.push(left.toJSNumber());return{value:out.reverse(),isNegative:neg}}function toBaseString(n,base,alphabet){var arr=toBase(n,base);return(arr.isNegative?"-":"")+arr.value.map(function(x){return stringify(x,alphabet)}).join("")}BigInteger.prototype.toArray=function(radix){return toBase(this,radix)};SmallInteger.prototype.toArray=function(radix){return toBase(this,radix)};NativeBigInt.prototype.toArray=function(radix){return toBase(this,radix)};BigInteger.prototype.toString=function(radix,alphabet){if(radix===undefined)radix=10;if(radix!==10||alphabet)return toBaseString(this,radix,alphabet);var v=this.value,l=v.length,str=String(v[--l]),zeros="0000000",digit;while(--l>=0){digit=String(v[l]);str+=zeros.slice(digit.length)+digit}var sign=this.sign?"-":"";return sign+str};SmallInteger.prototype.toString=function(radix,alphabet){if(radix===undefined)radix=10;if(radix!=10||alphabet)return toBaseString(this,radix,alphabet);return String(this.value)};NativeBigInt.prototype.toString=SmallInteger.prototype.toString;NativeBigInt.prototype.toJSON=BigInteger.prototype.toJSON=SmallInteger.prototype.toJSON=function(){return this.toString()};BigInteger.prototype.valueOf=function(){return parseInt(this.toString(),10)};BigInteger.prototype.toJSNumber=BigInteger.prototype.valueOf;SmallInteger.prototype.valueOf=function(){return this.value};SmallInteger.prototype.toJSNumber=SmallInteger.prototype.valueOf;NativeBigInt.prototype.valueOf=NativeBigInt.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};function parseStringValue(v){if(isPrecise(+v)){var x=+v;if(x===truncate(x))return supportsNativeBigInt?new NativeBigInt(BigInt(x)):new SmallInteger(x);throw new Error("Invalid integer: "+v)}var sign=v[0]==="-";if(sign)v=v.slice(1);var split=v.split(/e/i);if(split.length>2)throw new Error("Invalid integer: "+split.join("e"));if(split.length===2){var exp=split[1];if(exp[0]==="+")exp=exp.slice(1);exp=+exp;if(exp!==truncate(exp)||!isPrecise(exp))throw new Error("Invalid integer: "+exp+" is not a valid exponent.");var text=split[0];var decimalPlace=text.indexOf(".");if(decimalPlace>=0){exp-=text.length-decimalPlace-1;text=text.slice(0,decimalPlace)+text.slice(decimalPlace+1)}if(exp<0)throw new Error("Cannot include negative exponent part for integers");text+=new Array(exp+1).join("0");v=text}var isValid=/^([0-9][0-9]*)$/.test(v);if(!isValid)throw new Error("Invalid integer: "+v);if(supportsNativeBigInt){return new NativeBigInt(BigInt(sign?"-"+v:v))}var r=[],max=v.length,l=LOG_BASE,min=max-l;while(max>0){r.push(+v.slice(min,max));min-=l;if(min<0)min=0;max-=l}trim(r);return new BigInteger(r,sign)}function parseNumberValue(v){if(supportsNativeBigInt){return new NativeBigInt(BigInt(v))}if(isPrecise(v)){if(v!==truncate(v))throw new Error(v+" is not an integer.");return new SmallInteger(v)}return parseStringValue(v.toString())}function parseValue(v){if(typeof v==="number"){return parseNumberValue(v)}if(typeof v==="string"){return parseStringValue(v)}if(typeof v==="bigint"){return new NativeBigInt(v)}return v}for(var i=0;i<1e3;i++){Integer[i]=parseValue(i);if(i>0)Integer[-i]=parseValue(-i)}Integer.one=Integer[1];Integer.zero=Integer[0];Integer.minusOne=Integer[-1];Integer.max=max;Integer.min=min;Integer.gcd=gcd;Integer.lcm=lcm;Integer.isInstance=function(x){return x instanceof BigInteger||x instanceof SmallInteger||x instanceof NativeBigInt};Integer.randBetween=randBetween;Integer.fromArray=function(digits,base,isNegative){return parseBaseFromArray(digits.map(parseValue),parseValue(base||10),isNegative)};return Integer}();if(typeof module!=="undefined"&&module.hasOwnProperty("exports")){module.exports=bigInt}if(typeof define==="function"&&define.amd){define(function(){return bigInt})} \ No newline at end of file diff --git a/node_backend/node_modules/big-integer/LICENSE b/node_backend/node_modules/big-integer/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..cf1ab25da0349f84a3fdd40032f0ce99db813b8b --- /dev/null +++ b/node_backend/node_modules/big-integer/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/node_backend/node_modules/big-integer/README.md b/node_backend/node_modules/big-integer/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d72420fbb75793dcdeaaed65d48d989e13f05d35 --- /dev/null +++ b/node_backend/node_modules/big-integer/README.md @@ -0,0 +1,589 @@ +# BigInteger.js [![Build Status][travis-img]][travis-url] [![Coverage Status][coveralls-img]][coveralls-url] [![Monthly Downloads][downloads-img]][downloads-url] + +[travis-url]: https://travis-ci.org/peterolson/BigInteger.js +[travis-img]: https://travis-ci.org/peterolson/BigInteger.js.svg?branch=master +[coveralls-url]: https://coveralls.io/github/peterolson/BigInteger.js?branch=master +[coveralls-img]: https://coveralls.io/repos/peterolson/BigInteger.js/badge.svg?branch=master&service=github +[downloads-url]: https://www.npmjs.com/package/big-integer +[downloads-img]: https://img.shields.io/npm/dm/big-integer.svg + +**BigInteger.js** is an arbitrary-length integer library for Javascript, allowing arithmetic operations on integers of unlimited size, notwithstanding memory and time limitations. + +**Update (December 2, 2018):** [`BigInt` is being added as a native feature of JavaScript](https://tc39.github.io/proposal-bigint/). This library now works as a polyfill: if the environment supports the native `BigInt`, this library acts as a thin wrapper over the native implementation. + +## Installation + +If you are using a browser, you can download [BigInteger.js from GitHub](http://peterolson.github.com/BigInteger.js/BigInteger.min.js) or just hotlink to it: + + + +If you are using node, you can install BigInteger with [npm](https://npmjs.org/). + + npm install big-integer + +Then you can include it in your code: + + var bigInt = require("big-integer"); + + +## Usage +### `bigInt(number, [base], [alphabet], [caseSensitive])` + +You can create a bigInt by calling the `bigInt` function. You can pass in + + - a string, which it will parse as an bigInt and throw an `"Invalid integer"` error if the parsing fails. + - a Javascript number, which it will parse as an bigInt and throw an `"Invalid integer"` error if the parsing fails. + - another bigInt. + - nothing, and it will return `bigInt.zero`. + + If you provide a second parameter, then it will parse `number` as a number in base `base`. Note that `base` can be any bigInt (even negative or zero). The letters "a-z" and "A-Z" will be interpreted as the numbers 10 to 35. Higher digits can be specified in angle brackets (`<` and `>`). The default `base` is `10`. + + You can specify a custom alphabet for base conversion with the third parameter. The default `alphabet` is `"0123456789abcdefghijklmnopqrstuvwxyz"`. + + The fourth parameter specifies whether or not the number string should be case-sensitive, i.e. whether `a` and `A` should be treated as different digits. By default `caseSensitive` is `false`. + +Examples: + + var zero = bigInt(); + var ninetyThree = bigInt(93); + var largeNumber = bigInt("75643564363473453456342378564387956906736546456235345"); + var googol = bigInt("1e100"); + var bigNumber = bigInt(largeNumber); + + var maximumByte = bigInt("FF", 16); + var fiftyFiveGoogol = bigInt("<55>0", googol); + +Note that Javascript numbers larger than `9007199254740992` and smaller than `-9007199254740992` are not precisely represented numbers and will not produce exact results. If you are dealing with numbers outside that range, it is better to pass in strings. + +### Method Chaining + +Note that bigInt operations return bigInts, which allows you to chain methods, for example: + + var salary = bigInt(dollarsPerHour).times(hoursWorked).plus(randomBonuses) + +### Constants + +There are three named constants already stored that you do not have to construct with the `bigInt` function yourself: + + - `bigInt.one`, equivalent to `bigInt(1)` + - `bigInt.zero`, equivalent to `bigInt(0)` + - `bigInt.minusOne`, equivalent to `bigInt(-1)` + +The numbers from -999 to 999 are also already prestored and can be accessed using `bigInt[index]`, for example: + + - `bigInt[-999]`, equivalent to `bigInt(-999)` + - `bigInt[256]`, equivalent to `bigInt(256)` + +### Methods + +#### `abs()` + +Returns the absolute value of a bigInt. + + - `bigInt(-45).abs()` => `45` + - `bigInt(45).abs()` => `45` + +#### `add(number)` + +Performs addition. + + - `bigInt(5).add(7)` => `12` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Addition) + +#### `and(number)` + +Performs the bitwise AND operation. The operands are treated as if they were represented using [two's complement representation](http://en.wikipedia.org/wiki/Two%27s_complement). + + - `bigInt(6).and(3)` => `2` + - `bigInt(6).and(-3)` => `4` + +#### `bitLength()` + +Returns the number of digits required to represent a bigInt in binary. + + - `bigInt(5)` => `3` (since 5 is `101` in binary, which is three digits long) + +#### `compare(number)` + +Performs a comparison between two numbers. If the numbers are equal, it returns `0`. If the first number is greater, it returns `1`. If the first number is lesser, it returns `-1`. + + - `bigInt(5).compare(5)` => `0` + - `bigInt(5).compare(4)` => `1` + - `bigInt(4).compare(5)` => `-1` + +#### `compareAbs(number)` + +Performs a comparison between the absolute value of two numbers. + + - `bigInt(5).compareAbs(-5)` => `0` + - `bigInt(5).compareAbs(4)` => `1` + - `bigInt(4).compareAbs(-5)` => `-1` + +#### `compareTo(number)` + +Alias for the `compare` method. + +#### `divide(number)` + +Performs integer division, disregarding the remainder. + + - `bigInt(59).divide(5)` => `11` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `divmod(number)` + +Performs division and returns an object with two properties: `quotient` and `remainder`. The sign of the remainder will match the sign of the dividend. + + - `bigInt(59).divmod(5)` => `{quotient: bigInt(11), remainder: bigInt(4) }` + - `bigInt(-5).divmod(2)` => `{quotient: bigInt(-2), remainder: bigInt(-1) }` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `eq(number)` + +Alias for the `equals` method. + +#### `equals(number)` + +Checks if two numbers are equal. + + - `bigInt(5).equals(5)` => `true` + - `bigInt(4).equals(7)` => `false` + +#### `geq(number)` + +Alias for the `greaterOrEquals` method. + + +#### `greater(number)` + +Checks if the first number is greater than the second. + + - `bigInt(5).greater(6)` => `false` + - `bigInt(5).greater(5)` => `false` + - `bigInt(5).greater(4)` => `true` + +#### `greaterOrEquals(number)` + +Checks if the first number is greater than or equal to the second. + + - `bigInt(5).greaterOrEquals(6)` => `false` + - `bigInt(5).greaterOrEquals(5)` => `true` + - `bigInt(5).greaterOrEquals(4)` => `true` + +#### `gt(number)` + +Alias for the `greater` method. + +#### `isDivisibleBy(number)` + +Returns `true` if the first number is divisible by the second number, `false` otherwise. + + - `bigInt(999).isDivisibleBy(333)` => `true` + - `bigInt(99).isDivisibleBy(5)` => `false` + +#### `isEven()` + +Returns `true` if the number is even, `false` otherwise. + + - `bigInt(6).isEven()` => `true` + - `bigInt(3).isEven()` => `false` + +#### `isNegative()` + +Returns `true` if the number is negative, `false` otherwise. +Returns `false` for `0` and `-0`. + + - `bigInt(-23).isNegative()` => `true` + - `bigInt(50).isNegative()` => `false` + +#### `isOdd()` + +Returns `true` if the number is odd, `false` otherwise. + + - `bigInt(13).isOdd()` => `true` + - `bigInt(40).isOdd()` => `false` + +#### `isPositive()` + +Return `true` if the number is positive, `false` otherwise. +Returns `false` for `0` and `-0`. + + - `bigInt(54).isPositive()` => `true` + - `bigInt(-1).isPositive()` => `false` + +#### `isPrime(strict?)` + +Returns `true` if the number is prime, `false` otherwise. +Set "strict" boolean to true to force GRH-supported lower bound of 2*log(N)^2. + + - `bigInt(5).isPrime()` => `true` + - `bigInt(6).isPrime()` => `false` + +#### `isProbablePrime([iterations], [rng])` + +Returns `true` if the number is very likely to be prime, `false` otherwise. +Supplying `iterations` is optional - it determines the number of iterations of the test (default: `5`). The more iterations, the lower chance of getting a false positive. +This uses the [Miller Rabin test](https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test). + + - `bigInt(5).isProbablePrime()` => `true` + - `bigInt(49).isProbablePrime()` => `false` + - `bigInt(1729).isProbablePrime()` => `false` + +Note that this function is not deterministic, since it relies on random sampling of factors, so the result for some numbers is not always the same - unless you pass a predictable random number generator as `rng`. The behavior and requirements are the same as with `randBetween`. + + - `bigInt(1729).isProbablePrime(1, () => 0.1)` => `false` + - `bigInt(1729).isProbablePrime(1, () => 0.2)` => `true` + +If the number is composite then the Miller–Rabin primality test declares the number probably prime with a probability at most `4` to the power `−iterations`. +If the number is prime, this function always returns `true`. + +#### `isUnit()` + +Returns `true` if the number is `1` or `-1`, `false` otherwise. + + - `bigInt.one.isUnit()` => `true` + - `bigInt.minusOne.isUnit()` => `true` + - `bigInt(5).isUnit()` => `false` + +#### `isZero()` + +Return `true` if the number is `0` or `-0`, `false` otherwise. + + - `bigInt.zero.isZero()` => `true` + - `bigInt("-0").isZero()` => `true` + - `bigInt(50).isZero()` => `false` + +#### `leq(number)` + +Alias for the `lesserOrEquals` method. + +#### `lesser(number)` + +Checks if the first number is lesser than the second. + + - `bigInt(5).lesser(6)` => `true` + - `bigInt(5).lesser(5)` => `false` + - `bigInt(5).lesser(4)` => `false` + +#### `lesserOrEquals(number)` + +Checks if the first number is less than or equal to the second. + + - `bigInt(5).lesserOrEquals(6)` => `true` + - `bigInt(5).lesserOrEquals(5)` => `true` + - `bigInt(5).lesserOrEquals(4)` => `false` + +#### `lt(number)` + +Alias for the `lesser` method. + +#### `minus(number)` + +Alias for the `subtract` method. + + - `bigInt(3).minus(5)` => `-2` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Subtraction) + +#### `mod(number)` + +Performs division and returns the remainder, disregarding the quotient. The sign of the remainder will match the sign of the dividend. + + - `bigInt(59).mod(5)` => `4` + - `bigInt(-5).mod(2)` => `-1` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `modInv(mod)` + +Finds the [multiplicative inverse](https://en.wikipedia.org/wiki/Modular_multiplicative_inverse) of the number modulo `mod`. + + - `bigInt(3).modInv(11)` => `4` + - `bigInt(42).modInv(2017)` => `1969` + +#### `modPow(exp, mod)` + +Takes the number to the power `exp` modulo `mod`. + + - `bigInt(10).modPow(3, 30)` => `10` + +#### `multiply(number)` + +Performs multiplication. + + - `bigInt(111).multiply(111)` => `12321` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Multiplication) + +#### `neq(number)` + +Alias for the `notEquals` method. + +#### `next()` + +Adds one to the number. + + - `bigInt(6).next()` => `7` + +#### `not()` + +Performs the bitwise NOT operation. The operands are treated as if they were represented using [two's complement representation](http://en.wikipedia.org/wiki/Two%27s_complement). + + - `bigInt(10).not()` => `-11` + - `bigInt(0).not()` => `-1` + +#### `notEquals(number)` + +Checks if two numbers are not equal. + + - `bigInt(5).notEquals(5)` => `false` + - `bigInt(4).notEquals(7)` => `true` + +#### `or(number)` + +Performs the bitwise OR operation. The operands are treated as if they were represented using [two's complement representation](http://en.wikipedia.org/wiki/Two%27s_complement). + + - `bigInt(13).or(10)` => `15` + - `bigInt(13).or(-8)` => `-3` + +#### `over(number)` + +Alias for the `divide` method. + + - `bigInt(59).over(5)` => `11` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `plus(number)` + +Alias for the `add` method. + + - `bigInt(5).plus(7)` => `12` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Addition) + +#### `pow(number)` + +Performs exponentiation. If the exponent is less than `0`, `pow` returns `0`. `bigInt.zero.pow(0)` returns `1`. + + - `bigInt(16).pow(16)` => `18446744073709551616` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Exponentiation) + +#### `prev(number)` + +Subtracts one from the number. + + - `bigInt(6).prev()` => `5` + +#### `remainder(number)` + +Alias for the `mod` method. + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Division) + +#### `shiftLeft(n)` + +Shifts the number left by `n` places in its binary representation. If a negative number is provided, it will shift right. Throws an error if `n` is outside of the range `[-9007199254740992, 9007199254740992]`. + + - `bigInt(8).shiftLeft(2)` => `32` + - `bigInt(8).shiftLeft(-2)` => `2` + +#### `shiftRight(n)` + +Shifts the number right by `n` places in its binary representation. If a negative number is provided, it will shift left. Throws an error if `n` is outside of the range `[-9007199254740992, 9007199254740992]`. + + - `bigInt(8).shiftRight(2)` => `2` + - `bigInt(8).shiftRight(-2)` => `32` + +#### `square()` + +Squares the number + + - `bigInt(3).square()` => `9` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Squaring) + +#### `subtract(number)` + +Performs subtraction. + + - `bigInt(3).subtract(5)` => `-2` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Subtraction) + +#### `times(number)` + +Alias for the `multiply` method. + + - `bigInt(111).times(111)` => `12321` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#Multiplication) + +#### `toArray(radix)` + +Converts a bigInt into an object with the properties "value" and "isNegative." "Value" is an array of integers modulo the given radix. "isNegative" is a boolean that represents the sign of the result. + + - `bigInt("1e9").toArray(10)` => { + value: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], + isNegative: false + } + - `bigInt("1e9").toArray(16)` => { + value: [3, 11, 9, 10, 12, 10, 0, 0], + isNegative: false + } + - `bigInt(567890).toArray(100)` => { + value: [56, 78, 90], + isNegative: false + } + +Negative bases are supported. + + - `bigInt(12345).toArray(-10)` => { + value: [2, 8, 4, 6, 5], + isNegative: false + } + +Base 1 and base -1 are also supported. + + - `bigInt(-15).toArray(1)` => { + value: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + isNegative: true + } + - `bigInt(-15).toArray(-1)` => { + value: [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], + isNegative: false + } + +Base 0 is only allowed for the number zero. + + - `bigInt(0).toArray(0)` => { + value: [0], + isNegative: false + } + - `bigInt(1).toArray(0)` => `Error: Cannot convert nonzero numbers to base 0.` + +#### `toJSNumber()` + +Converts a bigInt into a native Javascript number. Loses precision for numbers outside the range `[-9007199254740992, 9007199254740992]`. + + - `bigInt("18446744073709551616").toJSNumber()` => `18446744073709552000` + +#### `xor(number)` + +Performs the bitwise XOR operation. The operands are treated as if they were represented using [two's complement representation](http://en.wikipedia.org/wiki/Two%27s_complement). + + - `bigInt(12).xor(5)` => `9` + - `bigInt(12).xor(-5)` => `-9` + +### Static Methods + +#### `fromArray(digits, base = 10, isNegative?)` + +Constructs a bigInt from an array of digits in base `base`. The optional `isNegative` flag will make the number negative. + + - `bigInt.fromArray([1, 2, 3, 4, 5], 10)` => `12345` + - `bigInt.fromArray([1, 0, 0], 2, true)` => `-4` + +#### `gcd(a, b)` + +Finds the greatest common denominator of `a` and `b`. + + - `bigInt.gcd(42,56)` => `14` + +#### `isInstance(x)` + +Returns `true` if `x` is a BigInteger, `false` otherwise. + + - `bigInt.isInstance(bigInt(14))` => `true` + - `bigInt.isInstance(14)` => `false` + +#### `lcm(a,b)` + +Finds the least common multiple of `a` and `b`. + + - `bigInt.lcm(21, 6)` => `42` + +#### `max(a,b)` + +Returns the largest of `a` and `b`. + + - `bigInt.max(77, 432)` => `432` + +#### `min(a,b)` + +Returns the smallest of `a` and `b`. + + - `bigInt.min(77, 432)` => `77` + +#### `randBetween(min, max, [rng])` + +Returns a random number between `min` and `max`, optionally using `rng` to generate randomness. + + - `bigInt.randBetween("-1e100", "1e100")` => (for example) `8494907165436643479673097939554427056789510374838494147955756275846226209006506706784609314471378745` + +`rng` should take no arguments and return a `number` between 0 and 1. It defaults to `Math.random`. + + - `bigInt.randBetween("-1e100", "1e100", () => 0.5)` => (always) `50000005000000500000050000005000000500000050000005000000500000050000005000000500000050000005000000` + + +### Override Methods + +#### `toString(radix = 10, [alphabet])` + +Converts a bigInt to a string. There is an optional radix parameter (which defaults to 10) that converts the number to the given radix. Digits in the range `10-35` will use the letters `a-z`. + + - `bigInt("1e9").toString()` => `"1000000000"` + - `bigInt("1e9").toString(16)` => `"3b9aca00"` + + You can use a custom base alphabet with the second parameter. The default `alphabet` is `"0123456789abcdefghijklmnopqrstuvwxyz"`. + + - `bigInt("5").toString(2, "aA")` => `"AaA"` + +**Note that arithmetical operators will trigger the `valueOf` function rather than the `toString` function.** When converting a bigInteger to a string, you should use the `toString` method or the `String` function instead of adding the empty string. + + - `bigInt("999999999999999999").toString()` => `"999999999999999999"` + - `String(bigInt("999999999999999999"))` => `"999999999999999999"` + - `bigInt("999999999999999999") + ""` => `1000000000000000000` + +Bases larger than 36 are supported. If a digit is greater than or equal to 36, it will be enclosed in angle brackets. + + - `bigInt(567890).toString(100)` => `"<56><78><90>"` + +Negative bases are also supported. + + - `bigInt(12345).toString(-10)` => `"28465"` + +Base 1 and base -1 are also supported. + + - `bigInt(-15).toString(1)` => `"-111111111111111"` + - `bigInt(-15).toString(-1)` => `"101010101010101010101010101010"` + +Base 0 is only allowed for the number zero. + + - `bigInt(0).toString(0)` => `0` + - `bigInt(1).toString(0)` => `Error: Cannot convert nonzero numbers to base 0.` + +[View benchmarks for this method](http://peterolson.github.io/BigInteger.js/benchmark/#toString) + +#### `valueOf()` + +Converts a bigInt to a native Javascript number. This override allows you to use native arithmetic operators without explicit conversion: + + - `bigInt("100") + bigInt("200") === 300; //true` + +## Contributors + +To contribute, just fork the project, make some changes, and submit a pull request. Please verify that the unit tests pass before submitting. + +The unit tests are contained in the `spec/spec.js` file. You can run them locally by opening the `spec/SpecRunner.html` or file or running `npm test`. You can also [run the tests online from GitHub](http://peterolson.github.io/BigInteger.js/spec/SpecRunner.html). + +There are performance benchmarks that can be viewed from the `benchmarks/index.html` page. You can [run them online from GitHub](http://peterolson.github.io/BigInteger.js/benchmark/). + +## License + +This project is public domain. For more details, read about the [Unlicense](http://unlicense.org/). diff --git a/node_backend/node_modules/big-integer/bower.json b/node_backend/node_modules/big-integer/bower.json new file mode 100644 index 0000000000000000000000000000000000000000..22dc58f55596db6aab408c264e0503dfa6b45406 --- /dev/null +++ b/node_backend/node_modules/big-integer/bower.json @@ -0,0 +1,29 @@ +{ + "name": "big-integer", + "description": "An arbitrary length integer library for Javascript", + "main": "./BigInteger.js", + "authors": [ + "Peter Olson" + ], + "license": "Unlicense", + "keywords": [ + "math", + "big", + "bignum", + "bigint", + "biginteger", + "integer", + "arbitrary", + "precision", + "arithmetic" + ], + "homepage": "https://github.com/peterolson/BigInteger.js", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "coverage", + "tests" + ] +} diff --git a/node_backend/node_modules/big-integer/package.json b/node_backend/node_modules/big-integer/package.json new file mode 100644 index 0000000000000000000000000000000000000000..742570a694be4db5db32e0ba2c746070f6fc7f01 --- /dev/null +++ b/node_backend/node_modules/big-integer/package.json @@ -0,0 +1,48 @@ +{ + "name": "big-integer", + "version": "1.6.52", + "author": "Peter Olson ", + "description": "An arbitrary length integer library for Javascript", + "contributors": [], + "bin": {}, + "scripts": { + "test": "tsc && karma start my.conf.js && node spec/tsDefinitions.js", + "minify": "uglifyjs BigInteger.js -o BigInteger.min.js" + }, + "main": "./BigInteger", + "repository": { + "type": "git", + "url": "git@github.com:peterolson/BigInteger.js.git" + }, + "keywords": [ + "math", + "big", + "bignum", + "bigint", + "biginteger", + "integer", + "arbitrary", + "precision", + "arithmetic" + ], + "devDependencies": { + "@types/lodash": "^4.14.175", + "@types/node": "^7.10.2", + "coveralls": "^3.0.6", + "jasmine": "3.5.0", + "jasmine-core": "^3.5.0", + "karma": "^6.3.4", + "karma-cli": "^2.0.0", + "karma-coverage": "^2.0.3", + "karma-jasmine": "^4.0.1", + "karma-phantomjs-launcher": "^1.0.4", + "lodash": "^4.17.21", + "typescript": "^5.3.2", + "uglify-js": "^3.17.4" + }, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + }, + "typings": "./BigInteger.d.ts" +} diff --git a/node_backend/node_modules/big-integer/tsconfig.json b/node_backend/node_modules/big-integer/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..bb8e6cf87e1c08dc46fd69cff2ebc7dc10ea089e --- /dev/null +++ b/node_backend/node_modules/big-integer/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": false, + "baseUrl": "./", + "moduleResolution": "node", + "allowJs": true, + "typeRoots": [ + "./" + ], + "types": [], + "forceConsistentCasingInFileNames": true + }, + "files": [ + "BigInteger.d.ts", + "spec/tsDefinitions.ts" + ] +} diff --git a/node_backend/node_modules/binary/.npmignore b/node_backend/node_modules/binary/.npmignore new file mode 100644 index 0000000000000000000000000000000000000000..3c3629e647f5ddf82548912e337bea9826b434af --- /dev/null +++ b/node_backend/node_modules/binary/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_backend/node_modules/binary/.travis.yml b/node_backend/node_modules/binary/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..f1d0f13c8a54d0f8d78f86a1f9348f3c59750694 --- /dev/null +++ b/node_backend/node_modules/binary/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/node_backend/node_modules/binary/README.markdown b/node_backend/node_modules/binary/README.markdown new file mode 100644 index 0000000000000000000000000000000000000000..bbeac2e51f236c571c8660af19de4bc9a9dd5ca3 --- /dev/null +++ b/node_backend/node_modules/binary/README.markdown @@ -0,0 +1,177 @@ +binary +====== + +Unpack multibyte binary values from buffers and streams. +You can specify the endianness and signedness of the fields to be unpacked too. + +This module is a cleaner and more complete version of +[bufferlist](https://github.com/substack/node-bufferlist)'s binary module that +runs on pre-allocated buffers instead of a linked list. + +[![build status](https://secure.travis-ci.org/substack/node-binary.png)](http://travis-ci.org/substack/node-binary) + +examples +======== + +stream.js +--------- + +``` js +var binary = require('binary'); + +var ws = binary() + .word32lu('x') + .word16bs('y') + .word16bu('z') + .tap(function (vars) { + console.dir(vars); + }) +; +process.stdin.pipe(ws); +process.stdin.resume(); +``` + +output: + +``` +$ node examples/stream.js +abcdefgh +{ x: 1684234849, y: 25958, z: 26472 } +^D +``` + +parse.js +-------- + +``` js +var buf = new Buffer([ 97, 98, 99, 100, 101, 102, 0 ]); + +var binary = require('binary'); +var vars = binary.parse(buf) + .word16ls('ab') + .word32bu('cf') + .word8('x') + .vars +; +console.dir(vars); +``` + +output: + +``` +{ ab: 25185, cf: 1667523942, x: 0 } +``` + +methods +======= + +`var binary = require('binary')` + +var b = binary() +---------------- + +Return a new writable stream `b` that has the chainable methods documented below +for buffering binary input. + +binary.parse(buf) +----------------- + +Parse a static buffer in one pass. Returns a chainable interface with the +methods below plus a `vars` field to get at the variable stash as the last item +in a chain. + +In parse mode, methods will set their keys to `null` if the buffer isn't big +enough except `buffer()` and `scan()` which read up up to the end of the buffer +and stop. + +b.word{8,16,32,64}{l,b}{e,u,s}(key) +----------------------------------- + +Parse bytes in the buffer or stream given: + +* number of bits +* endianness ( l : little, b : big ), +* signedness ( u and e : unsigned, s : signed ) + +These functions won't start parsing until all previous parser functions have run +and the data is available. + +The result of the parse goes into the variable stash at `key`. +If `key` has dots (`.`s), it refers to a nested address. If parent container +values don't exist they will be created automatically, so for instance you can +assign into `dst.addr` and `dst.port` and the `dst` key in the variable stash +will be `{ addr : x, port : y }` afterwards. + +b.buffer(key, size) +------------------- + +Take `size` bytes directly off the buffer stream, putting the resulting buffer +slice in the variable stash at `key`. If `size` is a string, use the value at +`vars[size]`. The key follows the same dotted address rules as the word +functions. + +b.scan(key, buffer) +------------------- + +Search for `buffer` in the stream and store all the intervening data in the +stash at at `key`, excluding the search buffer. If `buffer` passed as a string, +it will be converted into a Buffer internally. + +For example, to read in a line you can just do: + +``` js +var b = binary() + .scan('line', new Buffer('\r\n')) + .tap(function (vars) { + console.log(vars.line) + }) +; +stream.pipe(b); +``` + +b.tap(cb) +--------- + +The callback `cb` is provided with the variable stash from all the previous +actions once they've all finished. + +You can nest additional actions onto `this` inside the callback. + +b.into(key, cb) +--------------- + +Like `.tap()`, except all nested actions will assign into a `key` in the `vars` +stash. + +b.loop(cb) +---------- + +Loop, each time calling `cb(end, vars)` for function `end` and the variable +stash with `this` set to a new chain for nested parsing. The loop terminates +once `end` is called. + +b.flush() +--------- + +Clear the variable stash entirely. + +installation +============ + +To install with [npm](http://github.com/isaacs/npm): + +``` +npm install binary +``` + +notes +===== + +The word64 functions will only return approximations since javascript uses ieee +floating point for all number types. Mind the loss of precision. + +license +======= + +MIT + diff --git a/node_backend/node_modules/binary/example/buf.js b/node_backend/node_modules/binary/example/buf.js new file mode 100644 index 0000000000000000000000000000000000000000..7f5d30b8dd5e26c98cca935a7281bbfeb76e5ea6 --- /dev/null +++ b/node_backend/node_modules/binary/example/buf.js @@ -0,0 +1,11 @@ +var buf = new Buffer([ 97, 98, 99, 100, 101, 102, 0 ]); + +var binary = require('binary'); +binary(buf) + .word16ls('ab') + .word32bu('cf') + .word8('x') + .tap(function (vars) { + console.dir(vars); + }) +; diff --git a/node_backend/node_modules/binary/example/parse.js b/node_backend/node_modules/binary/example/parse.js new file mode 100644 index 0000000000000000000000000000000000000000..b32688383472a174f7fc96d794d65767e285d891 --- /dev/null +++ b/node_backend/node_modules/binary/example/parse.js @@ -0,0 +1,10 @@ +var buf = new Buffer([ 97, 98, 99, 100, 101, 102, 0 ]); + +var binary = require('binary'); +var vars = binary.parse(buf) + .word16ls('ab') + .word32bu('cf') + .word8('x') + .vars +; +console.dir(vars); diff --git a/node_backend/node_modules/binary/example/stream.js b/node_backend/node_modules/binary/example/stream.js new file mode 100644 index 0000000000000000000000000000000000000000..28a6f96948aa201bafc1bc465e5cc617969cc81b --- /dev/null +++ b/node_backend/node_modules/binary/example/stream.js @@ -0,0 +1,12 @@ +var binary = require('binary'); + +var ws = binary() + .word32lu('x') + .word16bs('y') + .word16bu('z') + .tap(function (vars) { + console.dir(vars); + }) +; +process.stdin.pipe(ws); +process.stdin.resume(); diff --git a/node_backend/node_modules/binary/index.js b/node_backend/node_modules/binary/index.js new file mode 100644 index 0000000000000000000000000000000000000000..bf2ba4b66f1a5f4cb59b8d885cf3172f90671226 --- /dev/null +++ b/node_backend/node_modules/binary/index.js @@ -0,0 +1,397 @@ +var Chainsaw = require('chainsaw'); +var EventEmitter = require('events').EventEmitter; +var Buffers = require('buffers'); +var Vars = require('./lib/vars.js'); +var Stream = require('stream').Stream; + +exports = module.exports = function (bufOrEm, eventName) { + if (Buffer.isBuffer(bufOrEm)) { + return exports.parse(bufOrEm); + } + + var s = exports.stream(); + if (bufOrEm && bufOrEm.pipe) { + bufOrEm.pipe(s); + } + else if (bufOrEm) { + bufOrEm.on(eventName || 'data', function (buf) { + s.write(buf); + }); + + bufOrEm.on('end', function () { + s.end(); + }); + } + return s; +}; + +exports.stream = function (input) { + if (input) return exports.apply(null, arguments); + + var pending = null; + function getBytes (bytes, cb, skip) { + pending = { + bytes : bytes, + skip : skip, + cb : function (buf) { + pending = null; + cb(buf); + }, + }; + dispatch(); + } + + var offset = null; + function dispatch () { + if (!pending) { + if (caughtEnd) done = true; + return; + } + if (typeof pending === 'function') { + pending(); + } + else { + var bytes = offset + pending.bytes; + + if (buffers.length >= bytes) { + var buf; + if (offset == null) { + buf = buffers.splice(0, bytes); + if (!pending.skip) { + buf = buf.slice(); + } + } + else { + if (!pending.skip) { + buf = buffers.slice(offset, bytes); + } + offset = bytes; + } + + if (pending.skip) { + pending.cb(); + } + else { + pending.cb(buf); + } + } + } + } + + function builder (saw) { + function next () { if (!done) saw.next() } + + var self = words(function (bytes, cb) { + return function (name) { + getBytes(bytes, function (buf) { + vars.set(name, cb(buf)); + next(); + }); + }; + }); + + self.tap = function (cb) { + saw.nest(cb, vars.store); + }; + + self.into = function (key, cb) { + if (!vars.get(key)) vars.set(key, {}); + var parent = vars; + vars = Vars(parent.get(key)); + + saw.nest(function () { + cb.apply(this, arguments); + this.tap(function () { + vars = parent; + }); + }, vars.store); + }; + + self.flush = function () { + vars.store = {}; + next(); + }; + + self.loop = function (cb) { + var end = false; + + saw.nest(false, function loop () { + this.vars = vars.store; + cb.call(this, function () { + end = true; + next(); + }, vars.store); + this.tap(function () { + if (end) saw.next() + else loop.call(this) + }.bind(this)); + }, vars.store); + }; + + self.buffer = function (name, bytes) { + if (typeof bytes === 'string') { + bytes = vars.get(bytes); + } + + getBytes(bytes, function (buf) { + vars.set(name, buf); + next(); + }); + }; + + self.skip = function (bytes) { + if (typeof bytes === 'string') { + bytes = vars.get(bytes); + } + + getBytes(bytes, function () { + next(); + }); + }; + + self.scan = function find (name, search) { + if (typeof search === 'string') { + search = new Buffer(search); + } + else if (!Buffer.isBuffer(search)) { + throw new Error('search must be a Buffer or a string'); + } + + var taken = 0; + pending = function () { + var pos = buffers.indexOf(search, offset + taken); + var i = pos-offset-taken; + if (pos !== -1) { + pending = null; + if (offset != null) { + vars.set( + name, + buffers.slice(offset, offset + taken + i) + ); + offset += taken + i + search.length; + } + else { + vars.set( + name, + buffers.slice(0, taken + i) + ); + buffers.splice(0, taken + i + search.length); + } + next(); + dispatch(); + } else { + i = Math.max(buffers.length - search.length - offset - taken, 0); + } + taken += i; + }; + dispatch(); + }; + + self.peek = function (cb) { + offset = 0; + saw.nest(function () { + cb.call(this, vars.store); + this.tap(function () { + offset = null; + }); + }); + }; + + return self; + }; + + var stream = Chainsaw.light(builder); + stream.writable = true; + + var buffers = Buffers(); + + stream.write = function (buf) { + buffers.push(buf); + dispatch(); + }; + + var vars = Vars(); + + var done = false, caughtEnd = false; + stream.end = function () { + caughtEnd = true; + }; + + stream.pipe = Stream.prototype.pipe; + Object.getOwnPropertyNames(EventEmitter.prototype).forEach(function (name) { + stream[name] = EventEmitter.prototype[name]; + }); + + return stream; +}; + +exports.parse = function parse (buffer) { + var self = words(function (bytes, cb) { + return function (name) { + if (offset + bytes <= buffer.length) { + var buf = buffer.slice(offset, offset + bytes); + offset += bytes; + vars.set(name, cb(buf)); + } + else { + vars.set(name, null); + } + return self; + }; + }); + + var offset = 0; + var vars = Vars(); + self.vars = vars.store; + + self.tap = function (cb) { + cb.call(self, vars.store); + return self; + }; + + self.into = function (key, cb) { + if (!vars.get(key)) { + vars.set(key, {}); + } + var parent = vars; + vars = Vars(parent.get(key)); + cb.call(self, vars.store); + vars = parent; + return self; + }; + + self.loop = function (cb) { + var end = false; + var ender = function () { end = true }; + while (end === false) { + cb.call(self, ender, vars.store); + } + return self; + }; + + self.buffer = function (name, size) { + if (typeof size === 'string') { + size = vars.get(size); + } + var buf = buffer.slice(offset, Math.min(buffer.length, offset + size)); + offset += size; + vars.set(name, buf); + + return self; + }; + + self.skip = function (bytes) { + if (typeof bytes === 'string') { + bytes = vars.get(bytes); + } + offset += bytes; + + return self; + }; + + self.scan = function (name, search) { + if (typeof search === 'string') { + search = new Buffer(search); + } + else if (!Buffer.isBuffer(search)) { + throw new Error('search must be a Buffer or a string'); + } + vars.set(name, null); + + // simple but slow string search + for (var i = 0; i + offset <= buffer.length - search.length + 1; i++) { + for ( + var j = 0; + j < search.length && buffer[offset+i+j] === search[j]; + j++ + ); + if (j === search.length) break; + } + + vars.set(name, buffer.slice(offset, offset + i)); + offset += i + search.length; + return self; + }; + + self.peek = function (cb) { + var was = offset; + cb.call(self, vars.store); + offset = was; + return self; + }; + + self.flush = function () { + vars.store = {}; + return self; + }; + + self.eof = function () { + return offset >= buffer.length; + }; + + return self; +}; + +// convert byte strings to unsigned little endian numbers +function decodeLEu (bytes) { + var acc = 0; + for (var i = 0; i < bytes.length; i++) { + acc += Math.pow(256,i) * bytes[i]; + } + return acc; +} + +// convert byte strings to unsigned big endian numbers +function decodeBEu (bytes) { + var acc = 0; + for (var i = 0; i < bytes.length; i++) { + acc += Math.pow(256, bytes.length - i - 1) * bytes[i]; + } + return acc; +} + +// convert byte strings to signed big endian numbers +function decodeBEs (bytes) { + var val = decodeBEu(bytes); + if ((bytes[0] & 0x80) == 0x80) { + val -= Math.pow(256, bytes.length); + } + return val; +} + +// convert byte strings to signed little endian numbers +function decodeLEs (bytes) { + var val = decodeLEu(bytes); + if ((bytes[bytes.length - 1] & 0x80) == 0x80) { + val -= Math.pow(256, bytes.length); + } + return val; +} + +function words (decode) { + var self = {}; + + [ 1, 2, 4, 8 ].forEach(function (bytes) { + var bits = bytes * 8; + + self['word' + bits + 'le'] + = self['word' + bits + 'lu'] + = decode(bytes, decodeLEu); + + self['word' + bits + 'ls'] + = decode(bytes, decodeLEs); + + self['word' + bits + 'be'] + = self['word' + bits + 'bu'] + = decode(bytes, decodeBEu); + + self['word' + bits + 'bs'] + = decode(bytes, decodeBEs); + }); + + // word8be(n) == word8le(n) for all n + self.word8 = self.word8u = self.word8be; + self.word8s = self.word8bs; + + return self; +} diff --git a/node_backend/node_modules/binary/lib/vars.js b/node_backend/node_modules/binary/lib/vars.js new file mode 100644 index 0000000000000000000000000000000000000000..00d6df6758e2d172a5dafb4670909e3994518eb0 --- /dev/null +++ b/node_backend/node_modules/binary/lib/vars.js @@ -0,0 +1,28 @@ +module.exports = function (store) { + function getset (name, value) { + var node = vars.store; + var keys = name.split('.'); + keys.slice(0,-1).forEach(function (k) { + if (node[k] === undefined) node[k] = {}; + node = node[k] + }); + var key = keys[keys.length - 1]; + if (arguments.length == 1) { + return node[key]; + } + else { + return node[key] = value; + } + } + + var vars = { + get : function (name) { + return getset(name); + }, + set : function (name, value) { + return getset(name, value); + }, + store : store || {}, + }; + return vars; +}; diff --git a/node_backend/node_modules/binary/package.json b/node_backend/node_modules/binary/package.json new file mode 100644 index 0000000000000000000000000000000000000000..c71efb44f3538ce14adda994a264bcc0089d6f43 --- /dev/null +++ b/node_backend/node_modules/binary/package.json @@ -0,0 +1,38 @@ +{ + "name" : "binary", + "version" : "0.3.0", + "description" : "Unpack multibyte binary values from buffers", + "main" : "./index.js", + "repository" : { + "type" : "git", + "url" : "http://github.com/substack/node-binary.git" + }, + "keywords": [ + "binary", + "decode", + "endian", + "unpack", + "signed", + "unsigned" + ], + "author" : { + "name" : "James Halliday", + "email" : "mail@substack.net", + "url" : "http://substack.net" + }, + "dependencies" : { + "chainsaw" : "~0.1.0", + "buffers" : "~0.1.1" + }, + "devDependencies" : { + "seq" : "~0.2.5", + "tap" : "~0.2.4" + }, + "scripts" : { + "test" : "tap test/*.js" + }, + "license" : "MIT", + "engine" : { + "node" : ">=0.4.0" + } +} diff --git a/node_backend/node_modules/binary/perf/loop.js b/node_backend/node_modules/binary/perf/loop.js new file mode 100644 index 0000000000000000000000000000000000000000..bec60a84182596768c2a200a68dbbbf0a2e2eabb --- /dev/null +++ b/node_backend/node_modules/binary/perf/loop.js @@ -0,0 +1,92 @@ +var Seq = require('seq'); +var Hash = require('hashish'); +var EventEmitter = require('events').EventEmitter; + +var Bin = require('binary'); +var Buf = require('bufferlist/binary'); +var BufferList = require('bufferlist'); + +console.log('loop'); +function emitter () { + var em = new EventEmitter; + + var i = 0; + var iv = setInterval(function () { + var buf = new Buffer(10000); + buf[0] = 0xff; + + if (++ i >= 2000) { + buf[0] = 0; + clearInterval(iv); + } + em.emit('data', buf); + }, 1); + + return em; +} + +Seq() + .seq(function () { + var next = this.bind({}, null); + bufferlist(next); + }) + .seq(function () { + var next = this.bind({}, null); + binary(next); + }) +; + +function binary (next) { + var em = emitter(); + var t0 = Date.now(); + + Bin(em) + .loop(function (end) { + this + .word8('x') + .word8('y') + .word32be('z') + .word32le('w') + .buffer('buf', 10000 - 10) + .tap(function (vars) { + if (vars.x === 0) { + var tf = Date.now(); + console.log(' binary: ' + (tf - t0) + ' ms'); + end(); + setTimeout(next, 20); + } + }) + }) + ; +} + +function bufferlist (next) { + var em = emitter(); + var t0 = Date.now(); + + var blist = new BufferList; + em.on('data', function (buf) { + blist.push(buf); + }); + + Buf(blist) + .forever(function () { + var top = this; + this + .getWord8('x') + .getWord8('y') + .getWord32be('z') + .getWord32le('w') + .getBuffer('buf', 10000 - 10) + .tap(function (vars) { + if (vars.x === 0) { + var tf = Date.now(); + console.log(' bufferlist: ' + (tf - t0) + ' ms'); + top.exit(); + setTimeout(next, 20); + } + }) + }) + .end() + ; +} diff --git a/node_backend/node_modules/binary/perf/small.js b/node_backend/node_modules/binary/perf/small.js new file mode 100644 index 0000000000000000000000000000000000000000..2a5ed525bd524aa4c55c0e5667f47930a71390f4 --- /dev/null +++ b/node_backend/node_modules/binary/perf/small.js @@ -0,0 +1,80 @@ +var Seq = require('seq'); +var Hash = require('hashish'); + +var Bin = require('binary'); +var Buf = require('bufferlist/binary'); +var BufferList = require('bufferlist'); +var EventEmitter = require('events').EventEmitter; + +function binary (buf, cb) { + Bin(buf) + .word32le('x') + .word16be('y') + .word16be('z') + .word32le('w') + .tap(cb) + ; +}; + +function stream (buf, cb) { + var em = new EventEmitter; + Bin(em) + .word32le('x') + .word16be('y') + .word16be('z') + .word32le('w') + .tap(cb) + ; + em.emit('data', buf); +}; + +function parse (buf, cb) { + cb(Bin.parse(buf) + .word32le('x') + .word16be('y') + .word16be('z') + .word32le('w') + .vars + ); +}; + +function bufferlist (buf, cb) { + var blist = new BufferList; + blist.push(buf); + Buf(blist) + .getWord32le('x') + .getWord16be('y') + .getWord16be('z') + .getWord32le('w') + .tap(cb) + .end() + ; +}; + + +var buffers = []; +for (var i = 0; i < 200; i++) { + buffers.push(new Buffer(12)); +} + +console.log('small'); +Seq(binary, stream, parse, bufferlist) + .seqEach(function (f) { + var t = this; + var t0 = Date.now(); + Seq() + .extend(buffers) + .seqEach(function (buf) { + f(buf, this.bind(this, null)); + }) + .seq(function () { + var tf = Date.now(); + console.log(' ' + f.name + ': ' + (tf - t0)); + t(null); + }) + ; + }) + .seq(function () { + this(null); + }) +; diff --git a/node_backend/node_modules/binary/test/bu.js b/node_backend/node_modules/binary/test/bu.js new file mode 100644 index 0000000000000000000000000000000000000000..d557e3ce81916d66488dc2ba1ce3ea8464d739b8 --- /dev/null +++ b/node_backend/node_modules/binary/test/bu.js @@ -0,0 +1,46 @@ +var binary = require('../'); +var test = require('tap').test; + +test('bu', function (t) { + t.plan(8); + + // note: can't store -12667700813876161 exactly in an ieee float + + var buf = new Buffer([ + 44, // a == 44 + 2, 43, // b == 555 + 164, 213, 37, 37, // c == 2765432101 + 29, 81, 180, 20, 155, 115, 203, 193, // d == 2112667700813876161 + ]); + + binary.parse(buf) + .word8bu('a') + .word16bu('b') + .word32bu('c') + .word64bu('d') + .tap(function (vars) { + t.same(vars.a, 44); + t.same(vars.b, 555); + t.same(vars.c, 2765432101); + t.ok( + Math.abs(vars.d - 2112667700813876161) < 1500 + ); + }) + ; + + // also check aliases here: + binary.parse(buf) + .word8be('a') + .word16be('b') + .word32be('c') + .word64be('d') + .tap(function (vars) { + t.same(vars.a, 44); + t.same(vars.b, 555); + t.same(vars.c, 2765432101); + t.ok( + Math.abs(vars.d - 2112667700813876161) < 1500 + ); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/deferred.js b/node_backend/node_modules/binary/test/deferred.js new file mode 100644 index 0000000000000000000000000000000000000000..52623f7c4b2b298cf96b7902532447908021ab36 --- /dev/null +++ b/node_backend/node_modules/binary/test/deferred.js @@ -0,0 +1,20 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('deferred', function (t) { + t.plan(1); + + var em = new EventEmitter; + binary.stream(em) + .word8('a') + .word16be('bc') + .tap(function (vars) { + t.same(vars, { a : 97, bc : 25187 }); + }) + ; + + setTimeout(function () { + em.emit('data', new Buffer([ 97, 98, 99 ])); + }, 10); +}); diff --git a/node_backend/node_modules/binary/test/dots.js b/node_backend/node_modules/binary/test/dots.js new file mode 100644 index 0000000000000000000000000000000000000000..f730eb3832f64d1febf7aa43859383b485dec8f9 --- /dev/null +++ b/node_backend/node_modules/binary/test/dots.js @@ -0,0 +1,23 @@ +var binary = require('../'); +var test = require('tap').test; + +test('dots', function (t) { + t.plan(1); + + binary.parse(new Buffer([ 97, 98, 99, 100, 101, 102 ])) + .word8('a') + .word16be('b.x') + .word16be('b.y') + .word8('b.z') + .tap(function (vars) { + t.same(vars, { + a : 97, + b : { + x : 256 * 98 + 99, + y : 256 * 100 + 101, + z : 102 + }, + }); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/eof.js b/node_backend/node_modules/binary/test/eof.js new file mode 100644 index 0000000000000000000000000000000000000000..e5268ffc2b4213616df43ba2b5283bd708ae3637 --- /dev/null +++ b/node_backend/node_modules/binary/test/eof.js @@ -0,0 +1,41 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('eof', function (t) { + t.plan(4); + + var stream = new EventEmitter; + binary.stream(stream) + .buffer('sixone', 5) + .peek(function () { + this.word32le('len'); + }) + .buffer('buf', 'len') + .word8('x') + .tap(function (vars) { + t.same( + [].slice.call(vars.sixone), + [].slice.call(new Buffer([ 6, 1, 6, 1, 6 ])) + ); + t.same(vars.buf.length, vars.len); + t.same( + [].slice.call(vars.buf), + [ 9, 0, 0, 0, 97, 98, 99, 100, 101 ] + ); + t.same(vars.x, 102); + }) + ; + + var bufs = [ + new Buffer([ 6, 1, 6, 1, 6, 9, 0, 0, 0, 97 ]), + new Buffer([ 98, 99 ]), + new Buffer([ 100, 101, 102 ]), + ]; + + bufs.forEach(function (buf) { + stream.emit('data', buf); + }); + + stream.emit('end'); +}); diff --git a/node_backend/node_modules/binary/test/flush.js b/node_backend/node_modules/binary/test/flush.js new file mode 100644 index 0000000000000000000000000000000000000000..b9c0dde873b88a3e870f8b23e905551f497d8752 --- /dev/null +++ b/node_backend/node_modules/binary/test/flush.js @@ -0,0 +1,17 @@ +var binary = require('../'); +var test = require('tap').test; + +test('flush', function (t) { + t.plan(1); + + binary.parse(new Buffer([ 97, 98, 99, 100, 101, 102 ])) + .word8('a') + .word16be('b') + .word16be('c') + .flush() + .word8('d') + .tap(function (vars) { + t.same(vars, { d : 102 }); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/from_buffer.js b/node_backend/node_modules/binary/test/from_buffer.js new file mode 100644 index 0000000000000000000000000000000000000000..b5061e7e43a35ca77f6ccf385e1339221212e63e --- /dev/null +++ b/node_backend/node_modules/binary/test/from_buffer.js @@ -0,0 +1,14 @@ +var binary = require('../'); +var test = require('tap').test; + +test('from buffer', function (t) { + t.plan(1); + + binary(new Buffer([ 97, 98, 99 ])) + .word8('a') + .word16be('bc') + .tap(function (vars) { + t.same(vars, { a : 97, bc : 25187 }); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/get_buffer.js b/node_backend/node_modules/binary/test/get_buffer.js new file mode 100644 index 0000000000000000000000000000000000000000..1c6219227080e046a085dac2ba6fa08f8e323f9b --- /dev/null +++ b/node_backend/node_modules/binary/test/get_buffer.js @@ -0,0 +1,28 @@ +var binary = require('../'); +var test = require('tap').test; + +test('get buffer', function (t) { + t.plan(4); + + var buf = new Buffer([ 4, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ]); + binary.parse(buf) + .word8('a') + .buffer('b', 7) + .word16lu('c') + .tap(function (vars) { + t.equal(vars.a, 4); + t.equal( + vars.b.toString(), + new Buffer([ 2, 3, 4, 5, 6, 7, 8 ]).toString() + ); + t.equal(vars.c, 2569); + }) + .buffer('d', 'a') + .tap(function (vars) { + t.equal( + vars.d.toString(), + new Buffer([ 11, 12, 13, 14 ]).toString() + ); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/immediate.js b/node_backend/node_modules/binary/test/immediate.js new file mode 100644 index 0000000000000000000000000000000000000000..1f0ea7767255b67b275f819d77b89f7f1da51d93 --- /dev/null +++ b/node_backend/node_modules/binary/test/immediate.js @@ -0,0 +1,18 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('immediate', function (t) { + t.plan(1); + + var em = new EventEmitter; + binary.stream(em, 'moo') + .word8('a') + .word16be('bc') + .tap(function (vars) { + t.same(vars, { a : 97, bc : 25187 }); + }) + ; + + em.emit('moo', new Buffer([ 97, 98, 99 ])); +}); diff --git a/node_backend/node_modules/binary/test/interval.js b/node_backend/node_modules/binary/test/interval.js new file mode 100644 index 0000000000000000000000000000000000000000..b17c0cb2bdaa24727d8cee01c389c9fcf4522cdb --- /dev/null +++ b/node_backend/node_modules/binary/test/interval.js @@ -0,0 +1,38 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('interval', function (t) { + t.plan(1); + + var em = new EventEmitter; + var i = 0; + var iv = setInterval(function () { + var buf = new Buffer(1000); + buf[0] = 0xff; + if (++i >= 1000) { + clearInterval(iv); + buf[0] = 0; + } + em.emit('data', buf); + }, 1); + + var loops = 0; + binary(em) + .loop(function (end) { + this + .word8('x') + .word8('y') + .word32be('z') + .word32le('w') + .buffer('buf', 1000 - 10) + .tap(function (vars) { + loops ++; + if (vars.x == 0) end(); + }) + }) + .tap(function () { + t.same(loops, 1000); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/into_buffer.js b/node_backend/node_modules/binary/test/into_buffer.js new file mode 100644 index 0000000000000000000000000000000000000000..10d3d4add760f0de3d3f8e92e3b218a1a35d2926 --- /dev/null +++ b/node_backend/node_modules/binary/test/into_buffer.js @@ -0,0 +1,35 @@ +var binary = require('../'); +var test = require('tap').test; + +test('intoBuffer', function (t) { + t.plan(3); + var buf = new Buffer([ 1, 2, 3, 4, 5, 6 ]) + + binary.parse(buf) + .into('moo', function () { + this + .word8('x') + .word8('y') + .word8('z') + ; + }) + .tap(function (vars) { + t.same(vars, { moo : { x : 1, y : 2, z : 3 } }); + }) + .word8('w') + .tap(function (vars) { + t.same(vars, { + moo : { x : 1, y : 2, z : 3 }, + w : 4, + }); + }) + .word8('x') + .tap(function (vars) { + t.same(vars, { + moo : { x : 1, y : 2, z : 3 }, + w : 4, + x : 5, + }); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/into_stream.js b/node_backend/node_modules/binary/test/into_stream.js new file mode 100644 index 0000000000000000000000000000000000000000..db77092830c2ae945edf2ef89a54ec73ebadf18b --- /dev/null +++ b/node_backend/node_modules/binary/test/into_stream.js @@ -0,0 +1,43 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('into stream', function (t) { + t.plan(3); + + var digits = [ 1, 2, 3, 4, 5, 6 ]; + var stream = new EventEmitter; + var iv = setInterval(function () { + var d = digits.shift(); + if (d) stream.emit('data', new Buffer([ d ])) + else clearInterval(iv) + }, 20); + + binary.stream(stream) + .into('moo', function () { + this + .word8('x') + .word8('y') + .word8('z') + ; + }) + .tap(function (vars) { + t.same(vars, { moo : { x : 1, y : 2, z : 3 } }); + }) + .word8('w') + .tap(function (vars) { + t.same(vars, { + moo : { x : 1, y : 2, z : 3 }, + w : 4, + }); + }) + .word8('x') + .tap(function (vars) { + t.same(vars, { + moo : { x : 1, y : 2, z : 3 }, + w : 4, + x : 5, + }); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/loop.js b/node_backend/node_modules/binary/test/loop.js new file mode 100644 index 0000000000000000000000000000000000000000..74576a972f4c5b0cd629cbfd466965909b6f2e20 --- /dev/null +++ b/node_backend/node_modules/binary/test/loop.js @@ -0,0 +1,44 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('loop', function (t) { + t.plan(3 * 2 + 1); + + var em = new EventEmitter; + + binary.stream(em) + .loop(function (end, vars) { + t.strictEqual(vars, this.vars); + this + .word16lu('a') + .word8u('b') + .word8s('c') + .tap(function (vars_) { + t.strictEqual(vars, vars_); + if (vars.c < 0) end(); + }) + ; + }) + .tap(function (vars) { + t.same(vars, { a : 1337, b : 55, c : -5 }); + }) + ; + + setTimeout(function () { + em.emit('data', new Buffer([ 2, 10, 88 ])); + }, 10); + setTimeout(function () { + em.emit('data', new Buffer([ 100, 3, 6, 242, 30 ])); + }, 20); + setTimeout(function () { + em.emit('data', new Buffer([ 60, 60, 199, 44 ])); + }, 30); + + setTimeout(function () { + em.emit('data', new Buffer([ 57, 5 ])); + }, 80); + setTimeout(function () { + em.emit('data', new Buffer([ 55, 251 ])); + }, 90); +}); diff --git a/node_backend/node_modules/binary/test/loop_scan.js b/node_backend/node_modules/binary/test/loop_scan.js new file mode 100644 index 0000000000000000000000000000000000000000..394603a92359799c36ec37f2d940130f6080667f --- /dev/null +++ b/node_backend/node_modules/binary/test/loop_scan.js @@ -0,0 +1,54 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('loop scan', function (t) { + t.plan(8 + 6 + 2); + + var em = new EventEmitter; + + binary.stream(em) + .loop(function (end) { + var vars_ = this.vars; + this + .scan('filler', 'BEGINMSG') + .buffer('cmd', 3) + .word8('num') + .tap(function (vars) { + t.strictEqual(vars, vars_); + if (vars.num != 0x02 && vars.num != 0x06) { + t.same(vars.filler.length, 0); + } + if (vars.cmd.toString() == 'end') end(); + }) + ; + }) + .tap(function (vars) { + t.same(vars.cmd.toString(), 'end'); + t.same(vars.num, 0x08); + }) + ; + + setTimeout(function () { + em.emit('data', new Buffer( + 'BEGINMSGcmd\x01' + + 'GARBAGEDATAXXXX' + + 'BEGINMSGcmd\x02' + + 'BEGINMSGcmd\x03' + )); + }, 10); + + setTimeout(function () { + em.emit('data', new Buffer( + 'BEGINMSGcmd\x04' + + 'BEGINMSGcmd\x05' + + 'GARBAGEDATAXXXX' + + 'BEGINMSGcmd\x06' + )); + em.emit('data', new Buffer('BEGINMSGcmd\x07')); + }, 20); + + setTimeout(function () { + em.emit('data', new Buffer('BEGINMSGend\x08')); + }, 30); +}); diff --git a/node_backend/node_modules/binary/test/lu.js b/node_backend/node_modules/binary/test/lu.js new file mode 100644 index 0000000000000000000000000000000000000000..8d3e9e7cc875b8bc3fa193f448da0badeda29726 --- /dev/null +++ b/node_backend/node_modules/binary/test/lu.js @@ -0,0 +1,46 @@ +var binary = require('../'); +var test = require('tap').test; + +test('lu', function (t) { + t.plan(8); + + // note: can't store -12667700813876161 exactly in an ieee float + + var buf = new Buffer([ + 44, // a == 44 + 43, 2, // b == 555 + 37, 37, 213, 164, // c == 2765432101 + 193, 203, 115, 155, 20, 180, 81, 29, // d == 2112667700813876161 + ]); + + binary.parse(buf) + .word8lu('a') + .word16lu('b') + .word32lu('c') + .word64lu('d') + .tap(function (vars) { + t.same(vars.a, 44); + t.same(vars.b, 555); + t.same(vars.c, 2765432101); + t.ok( + Math.abs(vars.d - 2112667700813876161) < 1500 + ); + }) + ; + + // also check aliases here: + binary.parse(buf) + .word8le('a') + .word16le('b') + .word32le('c') + .word64le('d') + .tap(function (vars) { + t.same(vars.a, 44); + t.same(vars.b, 555); + t.same(vars.c, 2765432101); + t.ok( + Math.abs(vars.d - 2112667700813876161) < 1500 + ); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/negbs.js b/node_backend/node_modules/binary/test/negbs.js new file mode 100644 index 0000000000000000000000000000000000000000..dd23a9a6b75414ffa50a36573d0257d559c4db56 --- /dev/null +++ b/node_backend/node_modules/binary/test/negbs.js @@ -0,0 +1,29 @@ +var binary = require('../'); +var test = require('tap').test; + +test('negbs', function (t) { + t.plan(4); + // note: can't store -12667700813876161 exactly in an ieee float + + var buf = new Buffer([ + 226, // a == -30 + 246, 219, // b == -2341 + 255, 243, 245, 236, // c == -789012 + 255, 210, 254, 203, 16, 222, 52, 63, // d == -12667700813876161 + ]); + + binary.parse(buf) + .word8bs('a') + .word16bs('b') + .word32bs('c') + .word64bs('d') + .tap(function (vars) { + t.same(vars.a, -30); + t.same(vars.b, -2341); + t.same(vars.c, -789012); + t.ok( + Math.abs(vars.d - -12667700813876161) < 1500 + ); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/negls.js b/node_backend/node_modules/binary/test/negls.js new file mode 100644 index 0000000000000000000000000000000000000000..2a229f475955d052d04225cf512408ca895fbc90 --- /dev/null +++ b/node_backend/node_modules/binary/test/negls.js @@ -0,0 +1,29 @@ +var binary = require('../'); +var test = require('tap').test; + +test('negls', function (t) { + t.plan(4); + // note: can't store -12667700813876161 exactly in an ieee float + + var buf = new Buffer([ + 226, // a == -30 + 219, 246, // b == -2341 + 236, 245, 243, 255, // c == -789012 + 63, 52, 222, 16, 203, 254, 210, 255, // d == -12667700813876161 + ]); + + binary.parse(buf) + .word8ls('a') + .word16ls('b') + .word32ls('c') + .word64ls('d') + .tap(function (vars) { + t.same(vars.a, -30); + t.same(vars.b, -2341); + t.same(vars.c, -789012); + t.ok( + Math.abs(vars.d - -12667700813876161) < 1000 + ); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/nested.js b/node_backend/node_modules/binary/test/nested.js new file mode 100644 index 0000000000000000000000000000000000000000..869d51c9fae817e6e387d9a732c8c5a471dcf145 --- /dev/null +++ b/node_backend/node_modules/binary/test/nested.js @@ -0,0 +1,35 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('nested', function (t) { + t.plan(3); + var insideDone = false; + + var em = new EventEmitter; + binary.stream(em) + .word16be('ab') + .tap(function () { + this + .word8('c') + .word8('d') + .tap(function () { + insideDone = true; + }) + ; + }) + .tap(function (vars) { + t.ok(insideDone); + t.same(vars.c, 'c'.charCodeAt(0)); + t.same(vars.d, 'd'.charCodeAt(0)); + + }) + ; + + var strs = [ 'abc', 'def', 'hi', 'jkl' ]; + var iv = setInterval(function () { + var s = strs.shift(); + if (s) em.emit('data', new Buffer(s)); + else clearInterval(iv); + }, 50); +}); diff --git a/node_backend/node_modules/binary/test/not_enough_buf.js b/node_backend/node_modules/binary/test/not_enough_buf.js new file mode 100644 index 0000000000000000000000000000000000000000..bbf8ffff69b84a128341bdb7314919bf28113252 --- /dev/null +++ b/node_backend/node_modules/binary/test/not_enough_buf.js @@ -0,0 +1,17 @@ +var binary = require('../'); +var test = require('tap').test; + +test('not enough buf', function (t) { + t.plan(3); + + var vars = binary(new Buffer([1,2,3,4])) + .word8('a') + .buffer('b', 10) + .word8('c') + .vars + ; + + t.same(vars.a, 1); + t.equal(vars.b.toString(), new Buffer([2,3,4]).toString()); + t.strictEqual(vars.c, null); +}); diff --git a/node_backend/node_modules/binary/test/not_enough_parse.js b/node_backend/node_modules/binary/test/not_enough_parse.js new file mode 100644 index 0000000000000000000000000000000000000000..f9a32e2eacd0e34541f69935bce2445d9d24ae4c --- /dev/null +++ b/node_backend/node_modules/binary/test/not_enough_parse.js @@ -0,0 +1,19 @@ +var binary = require('../'); +var test = require('tap').test; + +test('not enough parse', function (t) { + t.plan(4); + + var vars = binary(new Buffer([1,2])) + .word8('a') + .word8('b') + .word8('c') + .word8('d') + .vars + ; + + t.same(vars.a, 1); + t.same(vars.b, 2); + t.strictEqual(vars.c, null); + t.strictEqual(vars.d, null); +}); diff --git a/node_backend/node_modules/binary/test/parse.js b/node_backend/node_modules/binary/test/parse.js new file mode 100644 index 0000000000000000000000000000000000000000..fbc9f5bd5ef48b97daa43c36f50a5b26e51ea0fa --- /dev/null +++ b/node_backend/node_modules/binary/test/parse.js @@ -0,0 +1,54 @@ +var binary = require('../'); +var test = require('tap').test; + +test('parse', function (t) { + t.plan(6); + var res = binary.parse(new Buffer([ 97, 98, 99, 99, 99, 99, 1, 2, 3 ])) + .word8('a') + .word16be('bc') + .skip(3) + .buffer('def', 3) + .tap(function (vars) { + t.equal(vars.a, 97); + t.equal(vars.bc, 25187); + t.same( + [].slice.call(vars.def), + [].slice.call(new Buffer([ 1, 2, 3])) + ); + }) + .vars + ; + t.equal(res.a, 97); + t.equal(res.bc, 25187); + t.same( + [].slice.call(res.def), + [].slice.call(new Buffer([ 1, 2, 3 ])) + ); +}); + +test('loop', function (t) { + t.plan(2); + var res = binary.parse(new Buffer([ 97, 98, 99, 4, 5, 2, -3, 9 ])) + .word8('a') + .word16be('bc') + .loop(function (end) { + var x = this.word8s('x').vars.x; + if (x < 0) end(); + }) + .tap(function (vars) { + t.same(vars, { + a : 97, + bc : 25187, + x : -3, + }); + }) + .word8('y') + .vars + ; + t.same(res, { + a : 97, + bc : 25187, + x : -3, + y : 9, + }); +}); diff --git a/node_backend/node_modules/binary/test/peek.js b/node_backend/node_modules/binary/test/peek.js new file mode 100644 index 0000000000000000000000000000000000000000..00109d396f8f4778c11da375c78c7d958810549c --- /dev/null +++ b/node_backend/node_modules/binary/test/peek.js @@ -0,0 +1,40 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('peek', function (t) { + t.plan(4); + var bufs = [ + new Buffer([ 6, 1, 6, 1, 6, 9, 0, 0, 0, 97 ]), + new Buffer([ 98, 99 ]), + new Buffer([ 100, 101, 102 ]), + ]; + + var stream = new EventEmitter; + var iv = setInterval(function () { + var buf = bufs.shift(); + if (buf) stream.emit('data', buf) + else clearInterval(iv) + }, 20); + + binary.stream(stream) + .buffer('sixone', 5) + .peek(function () { + this.word32le('len'); + }) + .buffer('buf', 'len') + .word8('x') + .tap(function (vars) { + t.same( + [].slice.call(vars.sixone), + [].slice.call(new Buffer([ 6, 1, 6, 1, 6 ])) + ); + t.same(vars.buf.length, vars.len); + t.same( + [].slice.call(vars.buf), + [ 9, 0, 0, 0, 97, 98, 99, 100, 101 ] + ); + t.same(vars.x, 102); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/pipe.js b/node_backend/node_modules/binary/test/pipe.js new file mode 100644 index 0000000000000000000000000000000000000000..7c260cdc692e2608a3cd38da9b78c4b39274cc76 --- /dev/null +++ b/node_backend/node_modules/binary/test/pipe.js @@ -0,0 +1,49 @@ +var binary = require('../'); +var test = require('tap').test; +var Stream = require('stream').Stream; + +test('loop', function (t) { + t.plan(3 * 2 + 1); + + var rs = new Stream; + rs.readable = true; + + var ws = binary() + .loop(function (end, vars) { + t.strictEqual(vars, this.vars); + this + .word16lu('a') + .word8u('b') + .word8s('c') + .tap(function (vars_) { + t.strictEqual(vars, vars_); + if (vars.c < 0) end(); + }) + ; + }) + .tap(function (vars) { + t.same(vars, { a : 1337, b : 55, c : -5 }); + }) + ; + rs.pipe(ws); + + setTimeout(function () { + rs.emit('data', new Buffer([ 2, 10, 88 ])); + }, 10); + setTimeout(function () { + rs.emit('data', new Buffer([ 100, 3, 6, 242, 30 ])); + }, 20); + setTimeout(function () { + rs.emit('data', new Buffer([ 60, 60, 199, 44 ])); + }, 30); + + setTimeout(function () { + rs.emit('data', new Buffer([ 57, 5 ])); + }, 80); + setTimeout(function () { + rs.emit('data', new Buffer([ 55, 251 ])); + }, 90); + setTimeout(function () { + rs.emit('end'); + }, 100); +}); diff --git a/node_backend/node_modules/binary/test/posbs.js b/node_backend/node_modules/binary/test/posbs.js new file mode 100644 index 0000000000000000000000000000000000000000..0642948ef18ccefe955683c0400b60ff66daa4ae --- /dev/null +++ b/node_backend/node_modules/binary/test/posbs.js @@ -0,0 +1,29 @@ +var binary = require('../'); +var test = require('tap').test; + +test('posbs', function (t) { + t.plan(4); + // note: can't store 12667700813876161 exactly in an ieee float + + var buf = new Buffer([ + 30, // a == -30 + 9, 37, // b == -2341 + 0, 12, 10, 20, // c == -789012 + 0, 45, 1, 52, 239, 33, 203, 193, // d == 12667700813876161 + ]); + + binary.parse(buf) + .word8bs('a') + .word16bs('b') + .word32bs('c') + .word64bs('d') + .tap(function (vars) { + t.same(vars.a, 30); + t.same(vars.b, 2341); + t.same(vars.c, 789012); + t.ok( + Math.abs(vars.d - 12667700813876161) < 1000 + ); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/posls.js b/node_backend/node_modules/binary/test/posls.js new file mode 100644 index 0000000000000000000000000000000000000000..2b8f208391105194ed130f08d3c7ba3f6557537e --- /dev/null +++ b/node_backend/node_modules/binary/test/posls.js @@ -0,0 +1,29 @@ +var binary = require('../'); +var test = require('tap').test; + +test('posls', function (t) { + t.plan(4); + + // note: can't store 12667700813876161 exactly in an ieee float + var buf = new Buffer([ + 30, // a == -30 + 37, 9, // b == -2341 + 20, 10, 12, 0, // c == -789012 + 193, 203, 33, 239, 52, 1, 45, 0, // d == 12667700813876161 + ]); + + binary.parse(buf) + .word8ls('a') + .word16ls('b') + .word32ls('c') + .word64ls('d') + .tap(function (vars) { + t.same(vars.a, 30); + t.same(vars.b, 2341); + t.same(vars.c, 789012); + t.ok( + Math.abs(vars.d - 12667700813876161) < 1000 + ); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/scan.js b/node_backend/node_modules/binary/test/scan.js new file mode 100644 index 0000000000000000000000000000000000000000..6acf2b2df2bea1a7e4051638f3d8ea703dbdb70c --- /dev/null +++ b/node_backend/node_modules/binary/test/scan.js @@ -0,0 +1,33 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('scan', function (t) { + t.plan(4); + + var em = new EventEmitter; + binary(em) + .word8('a') + .scan('l1', new Buffer('\r\n')) + .scan('l2', '\r\n') + .word8('z') + .tap(function (vars) { + t.same(vars.a, 99); + t.same(vars.l1.toString(), 'foo bar'); + t.same(vars.l2.toString(), 'baz'); + t.same(vars.z, 42); + }) + ; + + setTimeout(function () { + em.emit('data', new Buffer([99,0x66,0x6f,0x6f,0x20])); + }, 20); + + setTimeout(function () { + em.emit('data', new Buffer('bar\r')); + }, 40); + + setTimeout(function () { + em.emit('data', new Buffer('\nbaz\r\n*')); + }, 60); +}); diff --git a/node_backend/node_modules/binary/test/scan_buf.js b/node_backend/node_modules/binary/test/scan_buf.js new file mode 100644 index 0000000000000000000000000000000000000000..5e975c86d46d5e4f39f4ebbde44e9db8c759e18f --- /dev/null +++ b/node_backend/node_modules/binary/test/scan_buf.js @@ -0,0 +1,18 @@ +var binary = require('../'); +var test = require('tap').test; + +test('scan buf', function (t) { + t.plan(4); + + var vars = binary(new Buffer('\x63foo bar\r\nbaz\r\n*')) + .word8('a') + .scan('l1', new Buffer('\r\n')) + .scan('l2', '\r\n') + .word8('z') + .vars + ; + t.same(vars.a, 99); + t.same(vars.z, 42); + t.same(vars.l1.toString(), 'foo bar'); + t.same(vars.l2.toString(), 'baz'); +}); diff --git a/node_backend/node_modules/binary/test/scan_buf_null.js b/node_backend/node_modules/binary/test/scan_buf_null.js new file mode 100644 index 0000000000000000000000000000000000000000..96d97674abd1005008618ce3dfe35e37f79a562b --- /dev/null +++ b/node_backend/node_modules/binary/test/scan_buf_null.js @@ -0,0 +1,16 @@ +var binary = require('../'); +var test = require('tap').test; + +test('scan buf null', function (t) { + t.plan(3); + var vars = binary(new Buffer('\x63foo bar baz')) + .word8('a') + .scan('b', '\r\n') + .word8('c') + .vars + ; + + t.same(vars.a, 99); + t.same(vars.b.toString(), 'foo bar baz'); + t.strictEqual(vars.c, null); +}); diff --git a/node_backend/node_modules/binary/test/skip.js b/node_backend/node_modules/binary/test/skip.js new file mode 100644 index 0000000000000000000000000000000000000000..6a26051fcdbcf2dccbb42a8444a82e9c2b5b8b87 --- /dev/null +++ b/node_backend/node_modules/binary/test/skip.js @@ -0,0 +1,58 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; +var seq = require('seq'); + +test('skip', function (t) { + t.plan(7); + var em = new EventEmitter; + var state = 0; + + binary(em) + .word16lu('a') + .tap(function () { state = 1 }) + .skip(7) + .tap(function () { state = 2 }) + .word8('b') + .tap(function () { state = 3 }) + .tap(function (vars) { + t.same(state, 3); + t.same(vars, { + a : 2569, + b : 8, + }); + }) + ; + + seq() + .seq(setTimeout, seq, 20) + .seq(function () { + t.same(state, 0); + em.emit('data', new Buffer([ 9 ])); + this(null); + }) + .seq(setTimeout, seq, 5) + .seq(function () { + t.same(state, 0); + em.emit('data', new Buffer([ 10, 1, 2 ])); + this(null); + }) + .seq(setTimeout, seq, 30) + .seq(function () { + t.same(state, 1); + em.emit('data', new Buffer([ 3, 4, 5 ])); + this(null); + }) + .seq(setTimeout, seq, 15) + .seq(function () { + t.same(state, 1); + em.emit('data', new Buffer([ 6, 7 ])); + this(null); + }) + .seq(function () { + t.same(state, 2); + em.emit('data', new Buffer([ 8 ])); + this(null); + }) + ; +}); diff --git a/node_backend/node_modules/binary/test/split.js b/node_backend/node_modules/binary/test/split.js new file mode 100644 index 0000000000000000000000000000000000000000..cb9dffcc71a6216f04c4635076421aec4e6c34b0 --- /dev/null +++ b/node_backend/node_modules/binary/test/split.js @@ -0,0 +1,34 @@ +var binary = require('../'); +var test = require('tap').test; +var EventEmitter = require('events').EventEmitter; + +test('split', function (t) { + t.plan(1); + + var em = new EventEmitter; + binary.stream(em) + .word8('a') + .word16be('bc') + .word32ls('x') + .word32bs('y') + .tap(function (vars) { + t.same(vars, { + a : 97, + bc : 25187, + x : 621609828, + y : 621609828, + }); + }) + ; + + em.emit('data', new Buffer([ 97, 98 ])); + setTimeout(function () { + em.emit('data', new Buffer([ 99, 100 ])); + }, 25); + setTimeout(function () { + em.emit('data', new Buffer([ 3, 13, 37, 37 ])); + }, 30); + setTimeout(function () { + em.emit('data', new Buffer([ 13, 3, 100 ])); + }, 40); +}); diff --git a/node_backend/node_modules/bl/.travis.yml b/node_backend/node_modules/bl/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..016eaf55629001734bdfff57e5447cd478a9358f --- /dev/null +++ b/node_backend/node_modules/bl/.travis.yml @@ -0,0 +1,17 @@ +sudo: false +arch: + - amd64 + - ppc64le +language: node_js +node_js: + - '6' + - '8' + - '10' + - '12' + - '14' + - '15' + - lts/* +notifications: + email: + - rod@vagg.org + - matteo.collina@gmail.com diff --git a/node_backend/node_modules/bl/BufferList.js b/node_backend/node_modules/bl/BufferList.js new file mode 100644 index 0000000000000000000000000000000000000000..471ee7788937d9f860e865fbc1b648286efda530 --- /dev/null +++ b/node_backend/node_modules/bl/BufferList.js @@ -0,0 +1,396 @@ +'use strict' + +const { Buffer } = require('buffer') +const symbol = Symbol.for('BufferList') + +function BufferList (buf) { + if (!(this instanceof BufferList)) { + return new BufferList(buf) + } + + BufferList._init.call(this, buf) +} + +BufferList._init = function _init (buf) { + Object.defineProperty(this, symbol, { value: true }) + + this._bufs = [] + this.length = 0 + + if (buf) { + this.append(buf) + } +} + +BufferList.prototype._new = function _new (buf) { + return new BufferList(buf) +} + +BufferList.prototype._offset = function _offset (offset) { + if (offset === 0) { + return [0, 0] + } + + let tot = 0 + + for (let i = 0; i < this._bufs.length; i++) { + const _t = tot + this._bufs[i].length + if (offset < _t || i === this._bufs.length - 1) { + return [i, offset - tot] + } + tot = _t + } +} + +BufferList.prototype._reverseOffset = function (blOffset) { + const bufferId = blOffset[0] + let offset = blOffset[1] + + for (let i = 0; i < bufferId; i++) { + offset += this._bufs[i].length + } + + return offset +} + +BufferList.prototype.get = function get (index) { + if (index > this.length || index < 0) { + return undefined + } + + const offset = this._offset(index) + + return this._bufs[offset[0]][offset[1]] +} + +BufferList.prototype.slice = function slice (start, end) { + if (typeof start === 'number' && start < 0) { + start += this.length + } + + if (typeof end === 'number' && end < 0) { + end += this.length + } + + return this.copy(null, 0, start, end) +} + +BufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) { + if (typeof srcStart !== 'number' || srcStart < 0) { + srcStart = 0 + } + + if (typeof srcEnd !== 'number' || srcEnd > this.length) { + srcEnd = this.length + } + + if (srcStart >= this.length) { + return dst || Buffer.alloc(0) + } + + if (srcEnd <= 0) { + return dst || Buffer.alloc(0) + } + + const copy = !!dst + const off = this._offset(srcStart) + const len = srcEnd - srcStart + let bytes = len + let bufoff = (copy && dstStart) || 0 + let start = off[1] + + // copy/slice everything + if (srcStart === 0 && srcEnd === this.length) { + if (!copy) { + // slice, but full concat if multiple buffers + return this._bufs.length === 1 + ? this._bufs[0] + : Buffer.concat(this._bufs, this.length) + } + + // copy, need to copy individual buffers + for (let i = 0; i < this._bufs.length; i++) { + this._bufs[i].copy(dst, bufoff) + bufoff += this._bufs[i].length + } + + return dst + } + + // easy, cheap case where it's a subset of one of the buffers + if (bytes <= this._bufs[off[0]].length - start) { + return copy + ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes) + : this._bufs[off[0]].slice(start, start + bytes) + } + + if (!copy) { + // a slice, we need something to copy in to + dst = Buffer.allocUnsafe(len) + } + + for (let i = off[0]; i < this._bufs.length; i++) { + const l = this._bufs[i].length - start + + if (bytes > l) { + this._bufs[i].copy(dst, bufoff, start) + bufoff += l + } else { + this._bufs[i].copy(dst, bufoff, start, start + bytes) + bufoff += l + break + } + + bytes -= l + + if (start) { + start = 0 + } + } + + // safeguard so that we don't return uninitialized memory + if (dst.length > bufoff) return dst.slice(0, bufoff) + + return dst +} + +BufferList.prototype.shallowSlice = function shallowSlice (start, end) { + start = start || 0 + end = typeof end !== 'number' ? this.length : end + + if (start < 0) { + start += this.length + } + + if (end < 0) { + end += this.length + } + + if (start === end) { + return this._new() + } + + const startOffset = this._offset(start) + const endOffset = this._offset(end) + const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1) + + if (endOffset[1] === 0) { + buffers.pop() + } else { + buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1]) + } + + if (startOffset[1] !== 0) { + buffers[0] = buffers[0].slice(startOffset[1]) + } + + return this._new(buffers) +} + +BufferList.prototype.toString = function toString (encoding, start, end) { + return this.slice(start, end).toString(encoding) +} + +BufferList.prototype.consume = function consume (bytes) { + // first, normalize the argument, in accordance with how Buffer does it + bytes = Math.trunc(bytes) + // do nothing if not a positive number + if (Number.isNaN(bytes) || bytes <= 0) return this + + while (this._bufs.length) { + if (bytes >= this._bufs[0].length) { + bytes -= this._bufs[0].length + this.length -= this._bufs[0].length + this._bufs.shift() + } else { + this._bufs[0] = this._bufs[0].slice(bytes) + this.length -= bytes + break + } + } + + return this +} + +BufferList.prototype.duplicate = function duplicate () { + const copy = this._new() + + for (let i = 0; i < this._bufs.length; i++) { + copy.append(this._bufs[i]) + } + + return copy +} + +BufferList.prototype.append = function append (buf) { + if (buf == null) { + return this + } + + if (buf.buffer) { + // append a view of the underlying ArrayBuffer + this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)) + } else if (Array.isArray(buf)) { + for (let i = 0; i < buf.length; i++) { + this.append(buf[i]) + } + } else if (this._isBufferList(buf)) { + // unwrap argument into individual BufferLists + for (let i = 0; i < buf._bufs.length; i++) { + this.append(buf._bufs[i]) + } + } else { + // coerce number arguments to strings, since Buffer(number) does + // uninitialized memory allocation + if (typeof buf === 'number') { + buf = buf.toString() + } + + this._appendBuffer(Buffer.from(buf)) + } + + return this +} + +BufferList.prototype._appendBuffer = function appendBuffer (buf) { + this._bufs.push(buf) + this.length += buf.length +} + +BufferList.prototype.indexOf = function (search, offset, encoding) { + if (encoding === undefined && typeof offset === 'string') { + encoding = offset + offset = undefined + } + + if (typeof search === 'function' || Array.isArray(search)) { + throw new TypeError('The "value" argument must be one of type string, Buffer, BufferList, or Uint8Array.') + } else if (typeof search === 'number') { + search = Buffer.from([search]) + } else if (typeof search === 'string') { + search = Buffer.from(search, encoding) + } else if (this._isBufferList(search)) { + search = search.slice() + } else if (Array.isArray(search.buffer)) { + search = Buffer.from(search.buffer, search.byteOffset, search.byteLength) + } else if (!Buffer.isBuffer(search)) { + search = Buffer.from(search) + } + + offset = Number(offset || 0) + + if (isNaN(offset)) { + offset = 0 + } + + if (offset < 0) { + offset = this.length + offset + } + + if (offset < 0) { + offset = 0 + } + + if (search.length === 0) { + return offset > this.length ? this.length : offset + } + + const blOffset = this._offset(offset) + let blIndex = blOffset[0] // index of which internal buffer we're working on + let buffOffset = blOffset[1] // offset of the internal buffer we're working on + + // scan over each buffer + for (; blIndex < this._bufs.length; blIndex++) { + const buff = this._bufs[blIndex] + + while (buffOffset < buff.length) { + const availableWindow = buff.length - buffOffset + + if (availableWindow >= search.length) { + const nativeSearchResult = buff.indexOf(search, buffOffset) + + if (nativeSearchResult !== -1) { + return this._reverseOffset([blIndex, nativeSearchResult]) + } + + buffOffset = buff.length - search.length + 1 // end of native search window + } else { + const revOffset = this._reverseOffset([blIndex, buffOffset]) + + if (this._match(revOffset, search)) { + return revOffset + } + + buffOffset++ + } + } + + buffOffset = 0 + } + + return -1 +} + +BufferList.prototype._match = function (offset, search) { + if (this.length - offset < search.length) { + return false + } + + for (let searchOffset = 0; searchOffset < search.length; searchOffset++) { + if (this.get(offset + searchOffset) !== search[searchOffset]) { + return false + } + } + return true +} + +;(function () { + const methods = { + readDoubleBE: 8, + readDoubleLE: 8, + readFloatBE: 4, + readFloatLE: 4, + readInt32BE: 4, + readInt32LE: 4, + readUInt32BE: 4, + readUInt32LE: 4, + readInt16BE: 2, + readInt16LE: 2, + readUInt16BE: 2, + readUInt16LE: 2, + readInt8: 1, + readUInt8: 1, + readIntBE: null, + readIntLE: null, + readUIntBE: null, + readUIntLE: null + } + + for (const m in methods) { + (function (m) { + if (methods[m] === null) { + BufferList.prototype[m] = function (offset, byteLength) { + return this.slice(offset, offset + byteLength)[m](0, byteLength) + } + } else { + BufferList.prototype[m] = function (offset = 0) { + return this.slice(offset, offset + methods[m])[m](0) + } + } + }(m)) + } +}()) + +// Used internally by the class and also as an indicator of this object being +// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser +// environment because there could be multiple different copies of the +// BufferList class and some `BufferList`s might be `BufferList`s. +BufferList.prototype._isBufferList = function _isBufferList (b) { + return b instanceof BufferList || BufferList.isBufferList(b) +} + +BufferList.isBufferList = function isBufferList (b) { + return b != null && b[symbol] +} + +module.exports = BufferList diff --git a/node_backend/node_modules/bl/LICENSE.md b/node_backend/node_modules/bl/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..ecbe516374e7b0fa3d5c33d179a62f5e0d5c7b41 --- /dev/null +++ b/node_backend/node_modules/bl/LICENSE.md @@ -0,0 +1,13 @@ +The MIT License (MIT) +===================== + +Copyright (c) 2013-2019 bl contributors +---------------------------------- + +*bl contributors listed at * + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_backend/node_modules/bl/README.md b/node_backend/node_modules/bl/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9680b1dcb4839e5fb49a9dc176c3a901e202e802 --- /dev/null +++ b/node_backend/node_modules/bl/README.md @@ -0,0 +1,247 @@ +# bl *(BufferList)* + +[![Build Status](https://api.travis-ci.com/rvagg/bl.svg?branch=master)](https://travis-ci.com/rvagg/bl/) + +**A Node.js Buffer list collector, reader and streamer thingy.** + +[![NPM](https://nodei.co/npm/bl.svg)](https://nodei.co/npm/bl/) + +**bl** is a storage object for collections of Node Buffers, exposing them with the main Buffer readable API. Also works as a duplex stream so you can collect buffers from a stream that emits them and emit buffers to a stream that consumes them! + +The original buffers are kept intact and copies are only done as necessary. Any reads that require the use of a single original buffer will return a slice of that buffer only (which references the same memory as the original buffer). Reads that span buffers perform concatenation as required and return the results transparently. + +```js +const { BufferList } = require('bl') + +const bl = new BufferList() +bl.append(Buffer.from('abcd')) +bl.append(Buffer.from('efg')) +bl.append('hi') // bl will also accept & convert Strings +bl.append(Buffer.from('j')) +bl.append(Buffer.from([ 0x3, 0x4 ])) + +console.log(bl.length) // 12 + +console.log(bl.slice(0, 10).toString('ascii')) // 'abcdefghij' +console.log(bl.slice(3, 10).toString('ascii')) // 'defghij' +console.log(bl.slice(3, 6).toString('ascii')) // 'def' +console.log(bl.slice(3, 8).toString('ascii')) // 'defgh' +console.log(bl.slice(5, 10).toString('ascii')) // 'fghij' + +console.log(bl.indexOf('def')) // 3 +console.log(bl.indexOf('asdf')) // -1 + +// or just use toString! +console.log(bl.toString()) // 'abcdefghij\u0003\u0004' +console.log(bl.toString('ascii', 3, 8)) // 'defgh' +console.log(bl.toString('ascii', 5, 10)) // 'fghij' + +// other standard Buffer readables +console.log(bl.readUInt16BE(10)) // 0x0304 +console.log(bl.readUInt16LE(10)) // 0x0403 +``` + +Give it a callback in the constructor and use it just like **[concat-stream](https://github.com/maxogden/node-concat-stream)**: + +```js +const { BufferListStream } = require('bl') +const fs = require('fs') + +fs.createReadStream('README.md') + .pipe(BufferListStream((err, data) => { // note 'new' isn't strictly required + // `data` is a complete Buffer object containing the full data + console.log(data.toString()) + })) +``` + +Note that when you use the *callback* method like this, the resulting `data` parameter is a concatenation of all `Buffer` objects in the list. If you want to avoid the overhead of this concatenation (in cases of extreme performance consciousness), then avoid the *callback* method and just listen to `'end'` instead, like a standard Stream. + +Or to fetch a URL using [hyperquest](https://github.com/substack/hyperquest) (should work with [request](http://github.com/mikeal/request) and even plain Node http too!): + +```js +const hyperquest = require('hyperquest') +const { BufferListStream } = require('bl') + +const url = 'https://raw.github.com/rvagg/bl/master/README.md' + +hyperquest(url).pipe(BufferListStream((err, data) => { + console.log(data.toString()) +})) +``` + +Or, use it as a readable stream to recompose a list of Buffers to an output source: + +```js +const { BufferListStream } = require('bl') +const fs = require('fs') + +var bl = new BufferListStream() +bl.append(Buffer.from('abcd')) +bl.append(Buffer.from('efg')) +bl.append(Buffer.from('hi')) +bl.append(Buffer.from('j')) + +bl.pipe(fs.createWriteStream('gibberish.txt')) +``` + +## API + + * new BufferList([ buf ]) + * BufferList.isBufferList(obj) + * bl.length + * bl.append(buffer) + * bl.get(index) + * bl.indexOf(value[, byteOffset][, encoding]) + * bl.slice([ start[, end ] ]) + * bl.shallowSlice([ start[, end ] ]) + * bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ]) + * bl.duplicate() + * bl.consume(bytes) + * bl.toString([encoding, [ start, [ end ]]]) + * bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8() + * new BufferListStream([ callback ]) + +-------------------------------------------------------- + +### new BufferList([ Buffer | Buffer array | BufferList | BufferList array | String ]) +No arguments are _required_ for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` objects. + +`new` is not strictly required, if you don't instantiate a new object, it will be done automatically for you so you can create a new instance simply with: + +```js +const { BufferList } = require('bl') +const bl = BufferList() + +// equivalent to: + +const { BufferList } = require('bl') +const bl = new BufferList() +``` + +-------------------------------------------------------- + +### BufferList.isBufferList(obj) +Determines if the passed object is a `BufferList`. It will return `true` if the passed object is an instance of `BufferList` **or** `BufferListStream` and `false` otherwise. + +N.B. this won't return `true` for `BufferList` or `BufferListStream` instances created by versions of this library before this static method was added. + +-------------------------------------------------------- + +### bl.length +Get the length of the list in bytes. This is the sum of the lengths of all of the buffers contained in the list, minus any initial offset for a semi-consumed buffer at the beginning. Should accurately represent the total number of bytes that can be read from the list. + +-------------------------------------------------------- + +### bl.append(Buffer | Buffer array | BufferList | BufferList array | String) +`append(buffer)` adds an additional buffer or BufferList to the internal list. `this` is returned so it can be chained. + +-------------------------------------------------------- + +### bl.get(index) +`get()` will return the byte at the specified index. + +-------------------------------------------------------- + +### bl.indexOf(value[, byteOffset][, encoding]) +`get()` will return the byte at the specified index. +`indexOf()` method returns the first index at which a given element can be found in the BufferList, or -1 if it is not present. + +-------------------------------------------------------- + +### bl.slice([ start, [ end ] ]) +`slice()` returns a new `Buffer` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively. + +If the requested range spans a single internal buffer then a slice of that buffer will be returned which shares the original memory range of that Buffer. If the range spans multiple buffers then copy operations will likely occur to give you a uniform Buffer. + +-------------------------------------------------------- + +### bl.shallowSlice([ start, [ end ] ]) +`shallowSlice()` returns a new `BufferList` object containing the bytes within the range specified. Both `start` and `end` are optional and will default to the beginning and end of the list respectively. + +No copies will be performed. All buffers in the result share memory with the original list. + +-------------------------------------------------------- + +### bl.copy(dest, [ destStart, [ srcStart [, srcEnd ] ] ]) +`copy()` copies the content of the list in the `dest` buffer, starting from `destStart` and containing the bytes within the range specified with `srcStart` to `srcEnd`. `destStart`, `start` and `end` are optional and will default to the beginning of the `dest` buffer, and the beginning and end of the list respectively. + +-------------------------------------------------------- + +### bl.duplicate() +`duplicate()` performs a **shallow-copy** of the list. The internal Buffers remains the same, so if you change the underlying Buffers, the change will be reflected in both the original and the duplicate. This method is needed if you want to call `consume()` or `pipe()` and still keep the original list.Example: + +```js +var bl = new BufferListStream() + +bl.append('hello') +bl.append(' world') +bl.append('\n') + +bl.duplicate().pipe(process.stdout, { end: false }) + +console.log(bl.toString()) +``` + +-------------------------------------------------------- + +### bl.consume(bytes) +`consume()` will shift bytes *off the start of the list*. The number of bytes consumed don't need to line up with the sizes of the internal Buffers—initial offsets will be calculated accordingly in order to give you a consistent view of the data. + +-------------------------------------------------------- + +### bl.toString([encoding, [ start, [ end ]]]) +`toString()` will return a string representation of the buffer. The optional `start` and `end` arguments are passed on to `slice()`, while the `encoding` is passed on to `toString()` of the resulting Buffer. See the [Buffer#toString()](http://nodejs.org/docs/latest/api/buffer.html#buffer_buf_tostring_encoding_start_end) documentation for more information. + +-------------------------------------------------------- + +### bl.readDoubleBE(), bl.readDoubleLE(), bl.readFloatBE(), bl.readFloatLE(), bl.readInt32BE(), bl.readInt32LE(), bl.readUInt32BE(), bl.readUInt32LE(), bl.readInt16BE(), bl.readInt16LE(), bl.readUInt16BE(), bl.readUInt16LE(), bl.readInt8(), bl.readUInt8() + +All of the standard byte-reading methods of the `Buffer` interface are implemented and will operate across internal Buffer boundaries transparently. + +See the [Buffer](http://nodejs.org/docs/latest/api/buffer.html) documentation for how these work. + +-------------------------------------------------------- + +### new BufferListStream([ callback | Buffer | Buffer array | BufferList | BufferList array | String ]) +**BufferListStream** is a Node **[Duplex Stream](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_duplex)**, so it can be read from and written to like a standard Node stream. You can also `pipe()` to and from a **BufferListStream** instance. + +The constructor takes an optional callback, if supplied, the callback will be called with an error argument followed by a reference to the **bl** instance, when `bl.end()` is called (i.e. from a piped stream). This is a convenient method of collecting the entire contents of a stream, particularly when the stream is *chunky*, such as a network stream. + +Normally, no arguments are required for the constructor, but you can initialise the list by passing in a single `Buffer` object or an array of `Buffer` object. + +`new` is not strictly required, if you don't instantiate a new object, it will be done automatically for you so you can create a new instance simply with: + +```js +const { BufferListStream } = require('bl') +const bl = BufferListStream() + +// equivalent to: + +const { BufferListStream } = require('bl') +const bl = new BufferListStream() +``` + +N.B. For backwards compatibility reasons, `BufferListStream` is the **default** export when you `require('bl')`: + +```js +const { BufferListStream } = require('bl') +// equivalent to: +const BufferListStream = require('bl') +``` + +-------------------------------------------------------- + +## Contributors + +**bl** is brought to you by the following hackers: + + * [Rod Vagg](https://github.com/rvagg) + * [Matteo Collina](https://github.com/mcollina) + * [Jarett Cruger](https://github.com/jcrugzz) + + +## License & copyright + +Copyright (c) 2013-2019 bl contributors (listed above). + +bl is licensed under the MIT license. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE.md file for more details. diff --git a/node_backend/node_modules/bl/bl.js b/node_backend/node_modules/bl/bl.js new file mode 100644 index 0000000000000000000000000000000000000000..40228f8799af809f3a63490bba011604bf3fa724 --- /dev/null +++ b/node_backend/node_modules/bl/bl.js @@ -0,0 +1,84 @@ +'use strict' + +const DuplexStream = require('readable-stream').Duplex +const inherits = require('inherits') +const BufferList = require('./BufferList') + +function BufferListStream (callback) { + if (!(this instanceof BufferListStream)) { + return new BufferListStream(callback) + } + + if (typeof callback === 'function') { + this._callback = callback + + const piper = function piper (err) { + if (this._callback) { + this._callback(err) + this._callback = null + } + }.bind(this) + + this.on('pipe', function onPipe (src) { + src.on('error', piper) + }) + this.on('unpipe', function onUnpipe (src) { + src.removeListener('error', piper) + }) + + callback = null + } + + BufferList._init.call(this, callback) + DuplexStream.call(this) +} + +inherits(BufferListStream, DuplexStream) +Object.assign(BufferListStream.prototype, BufferList.prototype) + +BufferListStream.prototype._new = function _new (callback) { + return new BufferListStream(callback) +} + +BufferListStream.prototype._write = function _write (buf, encoding, callback) { + this._appendBuffer(buf) + + if (typeof callback === 'function') { + callback() + } +} + +BufferListStream.prototype._read = function _read (size) { + if (!this.length) { + return this.push(null) + } + + size = Math.min(size, this.length) + this.push(this.slice(0, size)) + this.consume(size) +} + +BufferListStream.prototype.end = function end (chunk) { + DuplexStream.prototype.end.call(this, chunk) + + if (this._callback) { + this._callback(null, this.slice()) + this._callback = null + } +} + +BufferListStream.prototype._destroy = function _destroy (err, cb) { + this._bufs.length = 0 + this.length = 0 + cb(err) +} + +BufferListStream.prototype._isBufferList = function _isBufferList (b) { + return b instanceof BufferListStream || b instanceof BufferList || BufferListStream.isBufferList(b) +} + +BufferListStream.isBufferList = BufferList.isBufferList + +module.exports = BufferListStream +module.exports.BufferListStream = BufferListStream +module.exports.BufferList = BufferList diff --git a/node_backend/node_modules/bl/package.json b/node_backend/node_modules/bl/package.json new file mode 100644 index 0000000000000000000000000000000000000000..3b2be3f48667e42bc04ffaf9c6efc4a4d8de57e2 --- /dev/null +++ b/node_backend/node_modules/bl/package.json @@ -0,0 +1,37 @@ +{ + "name": "bl", + "version": "4.1.0", + "description": "Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!", + "license": "MIT", + "main": "bl.js", + "scripts": { + "lint": "standard *.js test/*.js", + "test": "npm run lint && node test/test.js | faucet" + }, + "repository": { + "type": "git", + "url": "https://github.com/rvagg/bl.git" + }, + "homepage": "https://github.com/rvagg/bl", + "authors": [ + "Rod Vagg (https://github.com/rvagg)", + "Matteo Collina (https://github.com/mcollina)", + "Jarett Cruger (https://github.com/jcrugzz)" + ], + "keywords": [ + "buffer", + "buffers", + "stream", + "awesomesauce" + ], + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "devDependencies": { + "faucet": "~0.0.1", + "standard": "^14.3.0", + "tape": "^4.11.0" + } +} diff --git a/node_backend/node_modules/bl/test/convert.js b/node_backend/node_modules/bl/test/convert.js new file mode 100644 index 0000000000000000000000000000000000000000..9f3e23599e3adc0c8eddbe01bfd4b24e02e44340 --- /dev/null +++ b/node_backend/node_modules/bl/test/convert.js @@ -0,0 +1,21 @@ +'use strict' + +const tape = require('tape') +const { BufferList, BufferListStream } = require('../') +const { Buffer } = require('buffer') + +tape('convert from BufferList to BufferListStream', (t) => { + const data = Buffer.from(`TEST-${Date.now()}`) + const bl = new BufferList(data) + const bls = new BufferListStream(bl) + t.ok(bl.slice().equals(bls.slice())) + t.end() +}) + +tape('convert from BufferListStream to BufferList', (t) => { + const data = Buffer.from(`TEST-${Date.now()}`) + const bls = new BufferListStream(data) + const bl = new BufferList(bls) + t.ok(bl.slice().equals(bls.slice())) + t.end() +}) diff --git a/node_backend/node_modules/bl/test/indexOf.js b/node_backend/node_modules/bl/test/indexOf.js new file mode 100644 index 0000000000000000000000000000000000000000..62dcb01f3bcfba56ff0f7ec8beeca45897a70c4c --- /dev/null +++ b/node_backend/node_modules/bl/test/indexOf.js @@ -0,0 +1,492 @@ +'use strict' + +const tape = require('tape') +const BufferList = require('../') +const { Buffer } = require('buffer') + +tape('indexOf single byte needle', (t) => { + const bl = new BufferList(['abcdefg', 'abcdefg', '12345']) + + t.equal(bl.indexOf('e'), 4) + t.equal(bl.indexOf('e', 5), 11) + t.equal(bl.indexOf('e', 12), -1) + t.equal(bl.indexOf('5'), 18) + + t.end() +}) + +tape('indexOf multiple byte needle', (t) => { + const bl = new BufferList(['abcdefg', 'abcdefg']) + + t.equal(bl.indexOf('ef'), 4) + t.equal(bl.indexOf('ef', 5), 11) + + t.end() +}) + +tape('indexOf multiple byte needles across buffer boundaries', (t) => { + const bl = new BufferList(['abcdefg', 'abcdefg']) + + t.equal(bl.indexOf('fgabc'), 5) + + t.end() +}) + +tape('indexOf takes a Uint8Array search', (t) => { + const bl = new BufferList(['abcdefg', 'abcdefg']) + const search = new Uint8Array([102, 103, 97, 98, 99]) // fgabc + + t.equal(bl.indexOf(search), 5) + + t.end() +}) + +tape('indexOf takes a buffer list search', (t) => { + const bl = new BufferList(['abcdefg', 'abcdefg']) + const search = new BufferList('fgabc') + + t.equal(bl.indexOf(search), 5) + + t.end() +}) + +tape('indexOf a zero byte needle', (t) => { + const b = new BufferList('abcdef') + const bufEmpty = Buffer.from('') + + t.equal(b.indexOf(''), 0) + t.equal(b.indexOf('', 1), 1) + t.equal(b.indexOf('', b.length + 1), b.length) + t.equal(b.indexOf('', Infinity), b.length) + t.equal(b.indexOf(bufEmpty), 0) + t.equal(b.indexOf(bufEmpty, 1), 1) + t.equal(b.indexOf(bufEmpty, b.length + 1), b.length) + t.equal(b.indexOf(bufEmpty, Infinity), b.length) + + t.end() +}) + +tape('indexOf buffers smaller and larger than the needle', (t) => { + const bl = new BufferList(['abcdefg', 'a', 'bcdefg', 'a', 'bcfgab']) + + t.equal(bl.indexOf('fgabc'), 5) + t.equal(bl.indexOf('fgabc', 6), 12) + t.equal(bl.indexOf('fgabc', 13), -1) + + t.end() +}) + +// only present in node 6+ +;(process.version.substr(1).split('.')[0] >= 6) && tape('indexOf latin1 and binary encoding', (t) => { + const b = new BufferList('abcdef') + + // test latin1 encoding + t.equal( + new BufferList(Buffer.from(b.toString('latin1'), 'latin1')) + .indexOf('d', 0, 'latin1'), + 3 + ) + t.equal( + new BufferList(Buffer.from(b.toString('latin1'), 'latin1')) + .indexOf(Buffer.from('d', 'latin1'), 0, 'latin1'), + 3 + ) + t.equal( + new BufferList(Buffer.from('aa\u00e8aa', 'latin1')) + .indexOf('\u00e8', 'latin1'), + 2 + ) + t.equal( + new BufferList(Buffer.from('\u00e8', 'latin1')) + .indexOf('\u00e8', 'latin1'), + 0 + ) + t.equal( + new BufferList(Buffer.from('\u00e8', 'latin1')) + .indexOf(Buffer.from('\u00e8', 'latin1'), 'latin1'), + 0 + ) + + // test binary encoding + t.equal( + new BufferList(Buffer.from(b.toString('binary'), 'binary')) + .indexOf('d', 0, 'binary'), + 3 + ) + t.equal( + new BufferList(Buffer.from(b.toString('binary'), 'binary')) + .indexOf(Buffer.from('d', 'binary'), 0, 'binary'), + 3 + ) + t.equal( + new BufferList(Buffer.from('aa\u00e8aa', 'binary')) + .indexOf('\u00e8', 'binary'), + 2 + ) + t.equal( + new BufferList(Buffer.from('\u00e8', 'binary')) + .indexOf('\u00e8', 'binary'), + 0 + ) + t.equal( + new BufferList(Buffer.from('\u00e8', 'binary')) + .indexOf(Buffer.from('\u00e8', 'binary'), 'binary'), + 0 + ) + + t.end() +}) + +tape('indexOf the entire nodejs10 buffer test suite', (t) => { + const b = new BufferList('abcdef') + const bufA = Buffer.from('a') + const bufBc = Buffer.from('bc') + const bufF = Buffer.from('f') + const bufZ = Buffer.from('z') + + const stringComparison = 'abcdef' + + t.equal(b.indexOf('a'), 0) + t.equal(b.indexOf('a', 1), -1) + t.equal(b.indexOf('a', -1), -1) + t.equal(b.indexOf('a', -4), -1) + t.equal(b.indexOf('a', -b.length), 0) + t.equal(b.indexOf('a', NaN), 0) + t.equal(b.indexOf('a', -Infinity), 0) + t.equal(b.indexOf('a', Infinity), -1) + t.equal(b.indexOf('bc'), 1) + t.equal(b.indexOf('bc', 2), -1) + t.equal(b.indexOf('bc', -1), -1) + t.equal(b.indexOf('bc', -3), -1) + t.equal(b.indexOf('bc', -5), 1) + t.equal(b.indexOf('bc', NaN), 1) + t.equal(b.indexOf('bc', -Infinity), 1) + t.equal(b.indexOf('bc', Infinity), -1) + t.equal(b.indexOf('f'), b.length - 1) + t.equal(b.indexOf('z'), -1) + + // empty search tests + t.equal(b.indexOf(bufA), 0) + t.equal(b.indexOf(bufA, 1), -1) + t.equal(b.indexOf(bufA, -1), -1) + t.equal(b.indexOf(bufA, -4), -1) + t.equal(b.indexOf(bufA, -b.length), 0) + t.equal(b.indexOf(bufA, NaN), 0) + t.equal(b.indexOf(bufA, -Infinity), 0) + t.equal(b.indexOf(bufA, Infinity), -1) + t.equal(b.indexOf(bufBc), 1) + t.equal(b.indexOf(bufBc, 2), -1) + t.equal(b.indexOf(bufBc, -1), -1) + t.equal(b.indexOf(bufBc, -3), -1) + t.equal(b.indexOf(bufBc, -5), 1) + t.equal(b.indexOf(bufBc, NaN), 1) + t.equal(b.indexOf(bufBc, -Infinity), 1) + t.equal(b.indexOf(bufBc, Infinity), -1) + t.equal(b.indexOf(bufF), b.length - 1) + t.equal(b.indexOf(bufZ), -1) + t.equal(b.indexOf(0x61), 0) + t.equal(b.indexOf(0x61, 1), -1) + t.equal(b.indexOf(0x61, -1), -1) + t.equal(b.indexOf(0x61, -4), -1) + t.equal(b.indexOf(0x61, -b.length), 0) + t.equal(b.indexOf(0x61, NaN), 0) + t.equal(b.indexOf(0x61, -Infinity), 0) + t.equal(b.indexOf(0x61, Infinity), -1) + t.equal(b.indexOf(0x0), -1) + + // test offsets + t.equal(b.indexOf('d', 2), 3) + t.equal(b.indexOf('f', 5), 5) + t.equal(b.indexOf('f', -1), 5) + t.equal(b.indexOf('f', 6), -1) + + t.equal(b.indexOf(Buffer.from('d'), 2), 3) + t.equal(b.indexOf(Buffer.from('f'), 5), 5) + t.equal(b.indexOf(Buffer.from('f'), -1), 5) + t.equal(b.indexOf(Buffer.from('f'), 6), -1) + + t.equal(Buffer.from('ff').indexOf(Buffer.from('f'), 1, 'ucs2'), -1) + + // test invalid and uppercase encoding + t.equal(b.indexOf('b', 'utf8'), 1) + t.equal(b.indexOf('b', 'UTF8'), 1) + t.equal(b.indexOf('62', 'HEX'), 1) + t.throws(() => b.indexOf('bad', 'enc'), TypeError) + + // test hex encoding + t.equal( + Buffer.from(b.toString('hex'), 'hex') + .indexOf('64', 0, 'hex'), + 3 + ) + t.equal( + Buffer.from(b.toString('hex'), 'hex') + .indexOf(Buffer.from('64', 'hex'), 0, 'hex'), + 3 + ) + + // test base64 encoding + t.equal( + Buffer.from(b.toString('base64'), 'base64') + .indexOf('ZA==', 0, 'base64'), + 3 + ) + t.equal( + Buffer.from(b.toString('base64'), 'base64') + .indexOf(Buffer.from('ZA==', 'base64'), 0, 'base64'), + 3 + ) + + // test ascii encoding + t.equal( + Buffer.from(b.toString('ascii'), 'ascii') + .indexOf('d', 0, 'ascii'), + 3 + ) + t.equal( + Buffer.from(b.toString('ascii'), 'ascii') + .indexOf(Buffer.from('d', 'ascii'), 0, 'ascii'), + 3 + ) + + // test optional offset with passed encoding + t.equal(Buffer.from('aaaa0').indexOf('30', 'hex'), 4) + t.equal(Buffer.from('aaaa00a').indexOf('3030', 'hex'), 4) + + { + // test usc2 encoding + const twoByteString = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'ucs2') + + t.equal(8, twoByteString.indexOf('\u0395', 4, 'ucs2')) + t.equal(6, twoByteString.indexOf('\u03a3', -4, 'ucs2')) + t.equal(4, twoByteString.indexOf('\u03a3', -6, 'ucs2')) + t.equal(4, twoByteString.indexOf( + Buffer.from('\u03a3', 'ucs2'), -6, 'ucs2')) + t.equal(-1, twoByteString.indexOf('\u03a3', -2, 'ucs2')) + } + + const mixedByteStringUcs2 = + Buffer.from('\u039a\u0391abc\u03a3\u03a3\u0395', 'ucs2') + + t.equal(6, mixedByteStringUcs2.indexOf('bc', 0, 'ucs2')) + t.equal(10, mixedByteStringUcs2.indexOf('\u03a3', 0, 'ucs2')) + t.equal(-1, mixedByteStringUcs2.indexOf('\u0396', 0, 'ucs2')) + + t.equal( + 6, mixedByteStringUcs2.indexOf(Buffer.from('bc', 'ucs2'), 0, 'ucs2')) + t.equal( + 10, mixedByteStringUcs2.indexOf(Buffer.from('\u03a3', 'ucs2'), 0, 'ucs2')) + t.equal( + -1, mixedByteStringUcs2.indexOf(Buffer.from('\u0396', 'ucs2'), 0, 'ucs2')) + + { + const twoByteString = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'ucs2') + + // Test single char pattern + t.equal(0, twoByteString.indexOf('\u039a', 0, 'ucs2')) + let index = twoByteString.indexOf('\u0391', 0, 'ucs2') + t.equal(2, index, `Alpha - at index ${index}`) + index = twoByteString.indexOf('\u03a3', 0, 'ucs2') + t.equal(4, index, `First Sigma - at index ${index}`) + index = twoByteString.indexOf('\u03a3', 6, 'ucs2') + t.equal(6, index, `Second Sigma - at index ${index}`) + index = twoByteString.indexOf('\u0395', 0, 'ucs2') + t.equal(8, index, `Epsilon - at index ${index}`) + index = twoByteString.indexOf('\u0392', 0, 'ucs2') + t.equal(-1, index, `Not beta - at index ${index}`) + + // Test multi-char pattern + index = twoByteString.indexOf('\u039a\u0391', 0, 'ucs2') + t.equal(0, index, `Lambda Alpha - at index ${index}`) + index = twoByteString.indexOf('\u0391\u03a3', 0, 'ucs2') + t.equal(2, index, `Alpha Sigma - at index ${index}`) + index = twoByteString.indexOf('\u03a3\u03a3', 0, 'ucs2') + t.equal(4, index, `Sigma Sigma - at index ${index}`) + index = twoByteString.indexOf('\u03a3\u0395', 0, 'ucs2') + t.equal(6, index, `Sigma Epsilon - at index ${index}`) + } + + const mixedByteStringUtf8 = Buffer.from('\u039a\u0391abc\u03a3\u03a3\u0395') + + t.equal(5, mixedByteStringUtf8.indexOf('bc')) + t.equal(5, mixedByteStringUtf8.indexOf('bc', 5)) + t.equal(5, mixedByteStringUtf8.indexOf('bc', -8)) + t.equal(7, mixedByteStringUtf8.indexOf('\u03a3')) + t.equal(-1, mixedByteStringUtf8.indexOf('\u0396')) + + // Test complex string indexOf algorithms. Only trigger for long strings. + // Long string that isn't a simple repeat of a shorter string. + let longString = 'A' + for (let i = 66; i < 76; i++) { // from 'B' to 'K' + longString = longString + String.fromCharCode(i) + longString + } + + const longBufferString = Buffer.from(longString) + + // pattern of 15 chars, repeated every 16 chars in long + let pattern = 'ABACABADABACABA' + for (let i = 0; i < longBufferString.length - pattern.length; i += 7) { + const index = longBufferString.indexOf(pattern, i) + t.equal((i + 15) & ~0xf, index, + `Long ABACABA...-string at index ${i}`) + } + + let index = longBufferString.indexOf('AJABACA') + t.equal(510, index, `Long AJABACA, First J - at index ${index}`) + index = longBufferString.indexOf('AJABACA', 511) + t.equal(1534, index, `Long AJABACA, Second J - at index ${index}`) + + pattern = 'JABACABADABACABA' + index = longBufferString.indexOf(pattern) + t.equal(511, index, `Long JABACABA..., First J - at index ${index}`) + index = longBufferString.indexOf(pattern, 512) + t.equal( + 1535, index, `Long JABACABA..., Second J - at index ${index}`) + + // Search for a non-ASCII string in a pure ASCII string. + const asciiString = Buffer.from( + 'somethingnotatallsinisterwhichalsoworks') + t.equal(-1, asciiString.indexOf('\x2061')) + t.equal(3, asciiString.indexOf('eth', 0)) + + // Search in string containing many non-ASCII chars. + const allCodePoints = [] + for (let i = 0; i < 65536; i++) { + allCodePoints[i] = i + } + + const allCharsString = String.fromCharCode.apply(String, allCodePoints) + const allCharsBufferUtf8 = Buffer.from(allCharsString) + const allCharsBufferUcs2 = Buffer.from(allCharsString, 'ucs2') + + // Search for string long enough to trigger complex search with ASCII pattern + // and UC16 subject. + t.equal(-1, allCharsBufferUtf8.indexOf('notfound')) + t.equal(-1, allCharsBufferUcs2.indexOf('notfound')) + + // Needle is longer than haystack, but only because it's encoded as UTF-16 + t.equal(Buffer.from('aaaa').indexOf('a'.repeat(4), 'ucs2'), -1) + + t.equal(Buffer.from('aaaa').indexOf('a'.repeat(4), 'utf8'), 0) + t.equal(Buffer.from('aaaa').indexOf('你好', 'ucs2'), -1) + + // Haystack has odd length, but the needle is UCS2. + t.equal(Buffer.from('aaaaa').indexOf('b', 'ucs2'), -1) + + { + // Find substrings in Utf8. + const lengths = [1, 3, 15] // Single char, simple and complex. + const indices = [0x5, 0x60, 0x400, 0x680, 0x7ee, 0xFF02, 0x16610, 0x2f77b] + for (let lengthIndex = 0; lengthIndex < lengths.length; lengthIndex++) { + for (let i = 0; i < indices.length; i++) { + const index = indices[i] + let length = lengths[lengthIndex] + + if (index + length > 0x7F) { + length = 2 * length + } + + if (index + length > 0x7FF) { + length = 3 * length + } + + if (index + length > 0xFFFF) { + length = 4 * length + } + + const patternBufferUtf8 = allCharsBufferUtf8.slice(index, index + length) + t.equal(index, allCharsBufferUtf8.indexOf(patternBufferUtf8)) + + const patternStringUtf8 = patternBufferUtf8.toString() + t.equal(index, allCharsBufferUtf8.indexOf(patternStringUtf8)) + } + } + } + + { + // Find substrings in Usc2. + const lengths = [2, 4, 16] // Single char, simple and complex. + const indices = [0x5, 0x65, 0x105, 0x205, 0x285, 0x2005, 0x2085, 0xfff0] + + for (let lengthIndex = 0; lengthIndex < lengths.length; lengthIndex++) { + for (let i = 0; i < indices.length; i++) { + const index = indices[i] * 2 + const length = lengths[lengthIndex] + + const patternBufferUcs2 = + allCharsBufferUcs2.slice(index, index + length) + t.equal( + index, allCharsBufferUcs2.indexOf(patternBufferUcs2, 0, 'ucs2')) + + const patternStringUcs2 = patternBufferUcs2.toString('ucs2') + t.equal( + index, allCharsBufferUcs2.indexOf(patternStringUcs2, 0, 'ucs2')) + } + } + } + + [ + () => {}, + {}, + [] + ].forEach((val) => { + t.throws(() => b.indexOf(val), TypeError, `"${JSON.stringify(val)}" should throw`) + }) + + // Test weird offset arguments. + // The following offsets coerce to NaN or 0, searching the whole Buffer + t.equal(b.indexOf('b', undefined), 1) + t.equal(b.indexOf('b', {}), 1) + t.equal(b.indexOf('b', 0), 1) + t.equal(b.indexOf('b', null), 1) + t.equal(b.indexOf('b', []), 1) + + // The following offset coerces to 2, in other words +[2] === 2 + t.equal(b.indexOf('b', [2]), -1) + + // Behavior should match String.indexOf() + t.equal( + b.indexOf('b', undefined), + stringComparison.indexOf('b', undefined)) + t.equal( + b.indexOf('b', {}), + stringComparison.indexOf('b', {})) + t.equal( + b.indexOf('b', 0), + stringComparison.indexOf('b', 0)) + t.equal( + b.indexOf('b', null), + stringComparison.indexOf('b', null)) + t.equal( + b.indexOf('b', []), + stringComparison.indexOf('b', [])) + t.equal( + b.indexOf('b', [2]), + stringComparison.indexOf('b', [2])) + + // test truncation of Number arguments to uint8 + { + const buf = Buffer.from('this is a test') + + t.equal(buf.indexOf(0x6973), 3) + t.equal(buf.indexOf(0x697320), 4) + t.equal(buf.indexOf(0x69732069), 2) + t.equal(buf.indexOf(0x697374657374), 0) + t.equal(buf.indexOf(0x69737374), 0) + t.equal(buf.indexOf(0x69737465), 11) + t.equal(buf.indexOf(0x69737465), 11) + t.equal(buf.indexOf(-140), 0) + t.equal(buf.indexOf(-152), 1) + t.equal(buf.indexOf(0xff), -1) + t.equal(buf.indexOf(0xffff), -1) + } + + // Test that Uint8Array arguments are okay. + { + const needle = new Uint8Array([0x66, 0x6f, 0x6f]) + const haystack = new BufferList(Buffer.from('a foo b foo')) + t.equal(haystack.indexOf(needle), 2) + } + + t.end() +}) diff --git a/node_backend/node_modules/bl/test/isBufferList.js b/node_backend/node_modules/bl/test/isBufferList.js new file mode 100644 index 0000000000000000000000000000000000000000..9d895d59b3ffa81f9f63dc472f9d8af4164c4210 --- /dev/null +++ b/node_backend/node_modules/bl/test/isBufferList.js @@ -0,0 +1,32 @@ +'use strict' + +const tape = require('tape') +const { BufferList, BufferListStream } = require('../') +const { Buffer } = require('buffer') + +tape('isBufferList positives', (t) => { + t.ok(BufferList.isBufferList(new BufferList())) + t.ok(BufferList.isBufferList(new BufferListStream())) + + t.end() +}) + +tape('isBufferList negatives', (t) => { + const types = [ + null, + undefined, + NaN, + true, + false, + {}, + [], + Buffer.alloc(0), + [Buffer.alloc(0)] + ] + + for (const obj of types) { + t.notOk(BufferList.isBufferList(obj)) + } + + t.end() +}) diff --git a/node_backend/node_modules/bl/test/test.js b/node_backend/node_modules/bl/test/test.js new file mode 100644 index 0000000000000000000000000000000000000000..e523d0c3f271b50c16c98a88de0bb83e379ee0ee --- /dev/null +++ b/node_backend/node_modules/bl/test/test.js @@ -0,0 +1,869 @@ +'use strict' + +const tape = require('tape') +const crypto = require('crypto') +const fs = require('fs') +const path = require('path') +const BufferList = require('../') +const { Buffer } = require('buffer') + +const encodings = + ('hex utf8 utf-8 ascii binary base64' + + (process.browser ? '' : ' ucs2 ucs-2 utf16le utf-16le')).split(' ') + +require('./indexOf') +require('./isBufferList') +require('./convert') + +tape('single bytes from single buffer', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('abcd')) + + t.equal(bl.length, 4) + t.equal(bl.get(-1), undefined) + t.equal(bl.get(0), 97) + t.equal(bl.get(1), 98) + t.equal(bl.get(2), 99) + t.equal(bl.get(3), 100) + t.equal(bl.get(4), undefined) + + t.end() +}) + +tape('single bytes from multiple buffers', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + + t.equal(bl.length, 10) + + t.equal(bl.get(0), 97) + t.equal(bl.get(1), 98) + t.equal(bl.get(2), 99) + t.equal(bl.get(3), 100) + t.equal(bl.get(4), 101) + t.equal(bl.get(5), 102) + t.equal(bl.get(6), 103) + t.equal(bl.get(7), 104) + t.equal(bl.get(8), 105) + t.equal(bl.get(9), 106) + + t.end() +}) + +tape('multi bytes from single buffer', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('abcd')) + + t.equal(bl.length, 4) + + t.equal(bl.slice(0, 4).toString('ascii'), 'abcd') + t.equal(bl.slice(0, 3).toString('ascii'), 'abc') + t.equal(bl.slice(1, 4).toString('ascii'), 'bcd') + t.equal(bl.slice(-4, -1).toString('ascii'), 'abc') + + t.end() +}) + +tape('multi bytes from single buffer (negative indexes)', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('buffer')) + + t.equal(bl.length, 6) + + t.equal(bl.slice(-6, -1).toString('ascii'), 'buffe') + t.equal(bl.slice(-6, -2).toString('ascii'), 'buff') + t.equal(bl.slice(-5, -2).toString('ascii'), 'uff') + + t.end() +}) + +tape('multiple bytes from multiple buffers', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + + t.equal(bl.length, 10) + + t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') + t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') + t.equal(bl.slice(3, 6).toString('ascii'), 'def') + t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') + t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') + t.equal(bl.slice(-7, -4).toString('ascii'), 'def') + + t.end() +}) + +tape('multiple bytes from multiple buffer lists', function (t) { + const bl = new BufferList() + + bl.append(new BufferList([Buffer.from('abcd'), Buffer.from('efg')])) + bl.append(new BufferList([Buffer.from('hi'), Buffer.from('j')])) + + t.equal(bl.length, 10) + + t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') + + t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') + t.equal(bl.slice(3, 6).toString('ascii'), 'def') + t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') + t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') + + t.end() +}) + +// same data as previous test, just using nested constructors +tape('multiple bytes from crazy nested buffer lists', function (t) { + const bl = new BufferList() + + bl.append(new BufferList([ + new BufferList([ + new BufferList(Buffer.from('abc')), + Buffer.from('d'), + new BufferList(Buffer.from('efg')) + ]), + new BufferList([Buffer.from('hi')]), + new BufferList(Buffer.from('j')) + ])) + + t.equal(bl.length, 10) + + t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') + + t.equal(bl.slice(3, 10).toString('ascii'), 'defghij') + t.equal(bl.slice(3, 6).toString('ascii'), 'def') + t.equal(bl.slice(3, 8).toString('ascii'), 'defgh') + t.equal(bl.slice(5, 10).toString('ascii'), 'fghij') + + t.end() +}) + +tape('append accepts arrays of Buffers', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('abc')) + bl.append([Buffer.from('def')]) + bl.append([Buffer.from('ghi'), Buffer.from('jkl')]) + bl.append([Buffer.from('mnop'), Buffer.from('qrstu'), Buffer.from('vwxyz')]) + t.equal(bl.length, 26) + t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') + + t.end() +}) + +tape('append accepts arrays of Uint8Arrays', function (t) { + const bl = new BufferList() + + bl.append(new Uint8Array([97, 98, 99])) + bl.append([Uint8Array.from([100, 101, 102])]) + bl.append([new Uint8Array([103, 104, 105]), new Uint8Array([106, 107, 108])]) + bl.append([new Uint8Array([109, 110, 111, 112]), new Uint8Array([113, 114, 115, 116, 117]), new Uint8Array([118, 119, 120, 121, 122])]) + t.equal(bl.length, 26) + t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') + + t.end() +}) + +tape('append accepts arrays of BufferLists', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('abc')) + bl.append([new BufferList('def')]) + bl.append(new BufferList([Buffer.from('ghi'), new BufferList('jkl')])) + bl.append([Buffer.from('mnop'), new BufferList([Buffer.from('qrstu'), Buffer.from('vwxyz')])]) + t.equal(bl.length, 26) + t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') + + t.end() +}) + +tape('append chainable', function (t) { + const bl = new BufferList() + + t.ok(bl.append(Buffer.from('abcd')) === bl) + t.ok(bl.append([Buffer.from('abcd')]) === bl) + t.ok(bl.append(new BufferList(Buffer.from('abcd'))) === bl) + t.ok(bl.append([new BufferList(Buffer.from('abcd'))]) === bl) + + t.end() +}) + +tape('append chainable (test results)', function (t) { + const bl = new BufferList('abc') + .append([new BufferList('def')]) + .append(new BufferList([Buffer.from('ghi'), new BufferList('jkl')])) + .append([Buffer.from('mnop'), new BufferList([Buffer.from('qrstu'), Buffer.from('vwxyz')])]) + + t.equal(bl.length, 26) + t.equal(bl.slice().toString('ascii'), 'abcdefghijklmnopqrstuvwxyz') + + t.end() +}) + +tape('consuming from multiple buffers', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + + t.equal(bl.length, 10) + + t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij') + + bl.consume(3) + t.equal(bl.length, 7) + t.equal(bl.slice(0, 7).toString('ascii'), 'defghij') + + bl.consume(2) + t.equal(bl.length, 5) + t.equal(bl.slice(0, 5).toString('ascii'), 'fghij') + + bl.consume(1) + t.equal(bl.length, 4) + t.equal(bl.slice(0, 4).toString('ascii'), 'ghij') + + bl.consume(1) + t.equal(bl.length, 3) + t.equal(bl.slice(0, 3).toString('ascii'), 'hij') + + bl.consume(2) + t.equal(bl.length, 1) + t.equal(bl.slice(0, 1).toString('ascii'), 'j') + + t.end() +}) + +tape('complete consumption', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('a')) + bl.append(Buffer.from('b')) + + bl.consume(2) + + t.equal(bl.length, 0) + t.equal(bl._bufs.length, 0) + + t.end() +}) + +tape('test readUInt8 / readInt8', function (t) { + const buf1 = Buffer.alloc(1) + const buf2 = Buffer.alloc(3) + const buf3 = Buffer.alloc(3) + const bl = new BufferList() + + buf1[0] = 0x1 + buf2[1] = 0x3 + buf2[2] = 0x4 + buf3[0] = 0x23 + buf3[1] = 0x42 + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + t.equal(bl.readUInt8(), 0x1) + t.equal(bl.readUInt8(2), 0x3) + t.equal(bl.readInt8(2), 0x3) + t.equal(bl.readUInt8(3), 0x4) + t.equal(bl.readInt8(3), 0x4) + t.equal(bl.readUInt8(4), 0x23) + t.equal(bl.readInt8(4), 0x23) + t.equal(bl.readUInt8(5), 0x42) + t.equal(bl.readInt8(5), 0x42) + + t.end() +}) + +tape('test readUInt16LE / readUInt16BE / readInt16LE / readInt16BE', function (t) { + const buf1 = Buffer.alloc(1) + const buf2 = Buffer.alloc(3) + const buf3 = Buffer.alloc(3) + const bl = new BufferList() + + buf1[0] = 0x1 + buf2[1] = 0x3 + buf2[2] = 0x4 + buf3[0] = 0x23 + buf3[1] = 0x42 + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + t.equal(bl.readUInt16BE(), 0x0100) + t.equal(bl.readUInt16LE(), 0x0001) + t.equal(bl.readUInt16BE(2), 0x0304) + t.equal(bl.readUInt16LE(2), 0x0403) + t.equal(bl.readInt16BE(2), 0x0304) + t.equal(bl.readInt16LE(2), 0x0403) + t.equal(bl.readUInt16BE(3), 0x0423) + t.equal(bl.readUInt16LE(3), 0x2304) + t.equal(bl.readInt16BE(3), 0x0423) + t.equal(bl.readInt16LE(3), 0x2304) + t.equal(bl.readUInt16BE(4), 0x2342) + t.equal(bl.readUInt16LE(4), 0x4223) + t.equal(bl.readInt16BE(4), 0x2342) + t.equal(bl.readInt16LE(4), 0x4223) + + t.end() +}) + +tape('test readUInt32LE / readUInt32BE / readInt32LE / readInt32BE', function (t) { + const buf1 = Buffer.alloc(1) + const buf2 = Buffer.alloc(3) + const buf3 = Buffer.alloc(3) + const bl = new BufferList() + + buf1[0] = 0x1 + buf2[1] = 0x3 + buf2[2] = 0x4 + buf3[0] = 0x23 + buf3[1] = 0x42 + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + t.equal(bl.readUInt32BE(), 0x01000304) + t.equal(bl.readUInt32LE(), 0x04030001) + t.equal(bl.readUInt32BE(2), 0x03042342) + t.equal(bl.readUInt32LE(2), 0x42230403) + t.equal(bl.readInt32BE(2), 0x03042342) + t.equal(bl.readInt32LE(2), 0x42230403) + + t.end() +}) + +tape('test readUIntLE / readUIntBE / readIntLE / readIntBE', function (t) { + const buf1 = Buffer.alloc(1) + const buf2 = Buffer.alloc(3) + const buf3 = Buffer.alloc(3) + const bl = new BufferList() + + buf2[0] = 0x2 + buf2[1] = 0x3 + buf2[2] = 0x4 + buf3[0] = 0x23 + buf3[1] = 0x42 + buf3[2] = 0x61 + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + t.equal(bl.readUIntBE(1, 1), 0x02) + t.equal(bl.readUIntBE(1, 2), 0x0203) + t.equal(bl.readUIntBE(1, 3), 0x020304) + t.equal(bl.readUIntBE(1, 4), 0x02030423) + t.equal(bl.readUIntBE(1, 5), 0x0203042342) + t.equal(bl.readUIntBE(1, 6), 0x020304234261) + t.equal(bl.readUIntLE(1, 1), 0x02) + t.equal(bl.readUIntLE(1, 2), 0x0302) + t.equal(bl.readUIntLE(1, 3), 0x040302) + t.equal(bl.readUIntLE(1, 4), 0x23040302) + t.equal(bl.readUIntLE(1, 5), 0x4223040302) + t.equal(bl.readUIntLE(1, 6), 0x614223040302) + t.equal(bl.readIntBE(1, 1), 0x02) + t.equal(bl.readIntBE(1, 2), 0x0203) + t.equal(bl.readIntBE(1, 3), 0x020304) + t.equal(bl.readIntBE(1, 4), 0x02030423) + t.equal(bl.readIntBE(1, 5), 0x0203042342) + t.equal(bl.readIntBE(1, 6), 0x020304234261) + t.equal(bl.readIntLE(1, 1), 0x02) + t.equal(bl.readIntLE(1, 2), 0x0302) + t.equal(bl.readIntLE(1, 3), 0x040302) + t.equal(bl.readIntLE(1, 4), 0x23040302) + t.equal(bl.readIntLE(1, 5), 0x4223040302) + t.equal(bl.readIntLE(1, 6), 0x614223040302) + + t.end() +}) + +tape('test readFloatLE / readFloatBE', function (t) { + const buf1 = Buffer.alloc(1) + const buf2 = Buffer.alloc(3) + const buf3 = Buffer.alloc(3) + const bl = new BufferList() + + buf1[0] = 0x01 + buf2[1] = 0x00 + buf2[2] = 0x00 + buf3[0] = 0x80 + buf3[1] = 0x3f + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + const canonical = Buffer.concat([buf1, buf2, buf3]) + t.equal(bl.readFloatLE(), canonical.readFloatLE()) + t.equal(bl.readFloatBE(), canonical.readFloatBE()) + t.equal(bl.readFloatLE(2), canonical.readFloatLE(2)) + t.equal(bl.readFloatBE(2), canonical.readFloatBE(2)) + + t.end() +}) + +tape('test readDoubleLE / readDoubleBE', function (t) { + const buf1 = Buffer.alloc(1) + const buf2 = Buffer.alloc(3) + const buf3 = Buffer.alloc(10) + const bl = new BufferList() + + buf1[0] = 0x01 + buf2[1] = 0x55 + buf2[2] = 0x55 + buf3[0] = 0x55 + buf3[1] = 0x55 + buf3[2] = 0x55 + buf3[3] = 0x55 + buf3[4] = 0xd5 + buf3[5] = 0x3f + + bl.append(buf1) + bl.append(buf2) + bl.append(buf3) + + const canonical = Buffer.concat([buf1, buf2, buf3]) + t.equal(bl.readDoubleBE(), canonical.readDoubleBE()) + t.equal(bl.readDoubleLE(), canonical.readDoubleLE()) + t.equal(bl.readDoubleBE(2), canonical.readDoubleBE(2)) + t.equal(bl.readDoubleLE(2), canonical.readDoubleLE(2)) + + t.end() +}) + +tape('test toString', function (t) { + const bl = new BufferList() + + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + + t.equal(bl.toString('ascii', 0, 10), 'abcdefghij') + t.equal(bl.toString('ascii', 3, 10), 'defghij') + t.equal(bl.toString('ascii', 3, 6), 'def') + t.equal(bl.toString('ascii', 3, 8), 'defgh') + t.equal(bl.toString('ascii', 5, 10), 'fghij') + + t.end() +}) + +tape('test toString encoding', function (t) { + const bl = new BufferList() + const b = Buffer.from('abcdefghij\xff\x00') + + bl.append(Buffer.from('abcd')) + bl.append(Buffer.from('efg')) + bl.append(Buffer.from('hi')) + bl.append(Buffer.from('j')) + bl.append(Buffer.from('\xff\x00')) + + encodings.forEach(function (enc) { + t.equal(bl.toString(enc), b.toString(enc), enc) + }) + + t.end() +}) + +tape('uninitialized memory', function (t) { + const secret = crypto.randomBytes(256) + for (let i = 0; i < 1e6; i++) { + const clone = Buffer.from(secret) + const bl = new BufferList() + bl.append(Buffer.from('a')) + bl.consume(-1024) + const buf = bl.slice(1) + if (buf.indexOf(clone) !== -1) { + t.fail(`Match (at ${i})`) + break + } + } + t.end() +}) + +!process.browser && tape('test stream', function (t) { + const random = crypto.randomBytes(65534) + + const bl = new BufferList((err, buf) => { + t.ok(Buffer.isBuffer(buf)) + t.ok(err === null) + t.ok(random.equals(bl.slice())) + t.ok(random.equals(buf.slice())) + + bl.pipe(fs.createWriteStream('/tmp/bl_test_rnd_out.dat')) + .on('close', function () { + const rndhash = crypto.createHash('md5').update(random).digest('hex') + const md5sum = crypto.createHash('md5') + const s = fs.createReadStream('/tmp/bl_test_rnd_out.dat') + + s.on('data', md5sum.update.bind(md5sum)) + s.on('end', function () { + t.equal(rndhash, md5sum.digest('hex'), 'woohoo! correct hash!') + t.end() + }) + }) + }) + + fs.writeFileSync('/tmp/bl_test_rnd.dat', random) + fs.createReadStream('/tmp/bl_test_rnd.dat').pipe(bl) +}) + +tape('instantiation with Buffer', function (t) { + const buf = crypto.randomBytes(1024) + const buf2 = crypto.randomBytes(1024) + let b = BufferList(buf) + + t.equal(buf.toString('hex'), b.slice().toString('hex'), 'same buffer') + b = BufferList([buf, buf2]) + t.equal(b.slice().toString('hex'), Buffer.concat([buf, buf2]).toString('hex'), 'same buffer') + + t.end() +}) + +tape('test String appendage', function (t) { + const bl = new BufferList() + const b = Buffer.from('abcdefghij\xff\x00') + + bl.append('abcd') + bl.append('efg') + bl.append('hi') + bl.append('j') + bl.append('\xff\x00') + + encodings.forEach(function (enc) { + t.equal(bl.toString(enc), b.toString(enc)) + }) + + t.end() +}) + +tape('test Number appendage', function (t) { + const bl = new BufferList() + const b = Buffer.from('1234567890') + + bl.append(1234) + bl.append(567) + bl.append(89) + bl.append(0) + + encodings.forEach(function (enc) { + t.equal(bl.toString(enc), b.toString(enc)) + }) + + t.end() +}) + +tape('write nothing, should get empty buffer', function (t) { + t.plan(3) + BufferList(function (err, data) { + t.notOk(err, 'no error') + t.ok(Buffer.isBuffer(data), 'got a buffer') + t.equal(0, data.length, 'got a zero-length buffer') + t.end() + }).end() +}) + +tape('unicode string', function (t) { + t.plan(2) + + const inp1 = '\u2600' + const inp2 = '\u2603' + const exp = inp1 + ' and ' + inp2 + const bl = BufferList() + + bl.write(inp1) + bl.write(' and ') + bl.write(inp2) + t.equal(exp, bl.toString()) + t.equal(Buffer.from(exp).toString('hex'), bl.toString('hex')) +}) + +tape('should emit finish', function (t) { + const source = BufferList() + const dest = BufferList() + + source.write('hello') + source.pipe(dest) + + dest.on('finish', function () { + t.equal(dest.toString('utf8'), 'hello') + t.end() + }) +}) + +tape('basic copy', function (t) { + const buf = crypto.randomBytes(1024) + const buf2 = Buffer.alloc(1024) + const b = BufferList(buf) + + b.copy(buf2) + t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer') + + t.end() +}) + +tape('copy after many appends', function (t) { + const buf = crypto.randomBytes(512) + const buf2 = Buffer.alloc(1024) + const b = BufferList(buf) + + b.append(buf) + b.copy(buf2) + t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer') + + t.end() +}) + +tape('copy at a precise position', function (t) { + const buf = crypto.randomBytes(1004) + const buf2 = Buffer.alloc(1024) + const b = BufferList(buf) + + b.copy(buf2, 20) + t.equal(b.slice().toString('hex'), buf2.slice(20).toString('hex'), 'same buffer') + + t.end() +}) + +tape('copy starting from a precise location', function (t) { + const buf = crypto.randomBytes(10) + const buf2 = Buffer.alloc(5) + const b = BufferList(buf) + + b.copy(buf2, 0, 5) + t.equal(b.slice(5).toString('hex'), buf2.toString('hex'), 'same buffer') + + t.end() +}) + +tape('copy in an interval', function (t) { + const rnd = crypto.randomBytes(10) + const b = BufferList(rnd) // put the random bytes there + const actual = Buffer.alloc(3) + const expected = Buffer.alloc(3) + + rnd.copy(expected, 0, 5, 8) + b.copy(actual, 0, 5, 8) + + t.equal(actual.toString('hex'), expected.toString('hex'), 'same buffer') + + t.end() +}) + +tape('copy an interval between two buffers', function (t) { + const buf = crypto.randomBytes(10) + const buf2 = Buffer.alloc(10) + const b = BufferList(buf) + + b.append(buf) + b.copy(buf2, 0, 5, 15) + + t.equal(b.slice(5, 15).toString('hex'), buf2.toString('hex'), 'same buffer') + + t.end() +}) + +tape('shallow slice across buffer boundaries', function (t) { + const bl = new BufferList(['First', 'Second', 'Third']) + + t.equal(bl.shallowSlice(3, 13).toString(), 'stSecondTh') + + t.end() +}) + +tape('shallow slice within single buffer', function (t) { + t.plan(2) + + const bl = new BufferList(['First', 'Second', 'Third']) + + t.equal(bl.shallowSlice(5, 10).toString(), 'Secon') + t.equal(bl.shallowSlice(7, 10).toString(), 'con') + + t.end() +}) + +tape('shallow slice single buffer', function (t) { + t.plan(3) + + const bl = new BufferList(['First', 'Second', 'Third']) + + t.equal(bl.shallowSlice(0, 5).toString(), 'First') + t.equal(bl.shallowSlice(5, 11).toString(), 'Second') + t.equal(bl.shallowSlice(11, 16).toString(), 'Third') +}) + +tape('shallow slice with negative or omitted indices', function (t) { + t.plan(4) + + const bl = new BufferList(['First', 'Second', 'Third']) + + t.equal(bl.shallowSlice().toString(), 'FirstSecondThird') + t.equal(bl.shallowSlice(5).toString(), 'SecondThird') + t.equal(bl.shallowSlice(5, -3).toString(), 'SecondTh') + t.equal(bl.shallowSlice(-8).toString(), 'ondThird') +}) + +tape('shallow slice does not make a copy', function (t) { + t.plan(1) + + const buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')] + const bl = (new BufferList(buffers)).shallowSlice(5, -3) + + buffers[1].fill('h') + buffers[2].fill('h') + + t.equal(bl.toString(), 'hhhhhhhh') +}) + +tape('shallow slice with 0 length', function (t) { + t.plan(1) + + const buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')] + const bl = (new BufferList(buffers)).shallowSlice(0, 0) + + t.equal(bl.length, 0) +}) + +tape('shallow slice with 0 length from middle', function (t) { + t.plan(1) + + const buffers = [Buffer.from('First'), Buffer.from('Second'), Buffer.from('Third')] + const bl = (new BufferList(buffers)).shallowSlice(10, 10) + + t.equal(bl.length, 0) +}) + +tape('duplicate', function (t) { + t.plan(2) + + const bl = new BufferList('abcdefghij\xff\x00') + const dup = bl.duplicate() + + t.equal(bl.prototype, dup.prototype) + t.equal(bl.toString('hex'), dup.toString('hex')) +}) + +tape('destroy no pipe', function (t) { + t.plan(2) + + const bl = new BufferList('alsdkfja;lsdkfja;lsdk') + + bl.destroy() + + t.equal(bl._bufs.length, 0) + t.equal(bl.length, 0) +}) + +tape('destroy with error', function (t) { + t.plan(3) + + const bl = new BufferList('alsdkfja;lsdkfja;lsdk') + const err = new Error('kaboom') + + bl.destroy(err) + bl.on('error', function (_err) { + t.equal(_err, err) + }) + + t.equal(bl._bufs.length, 0) + t.equal(bl.length, 0) +}) + +!process.browser && tape('destroy with pipe before read end', function (t) { + t.plan(2) + + const bl = new BufferList() + fs.createReadStream(path.join(__dirname, '/test.js')) + .pipe(bl) + + bl.destroy() + + t.equal(bl._bufs.length, 0) + t.equal(bl.length, 0) +}) + +!process.browser && tape('destroy with pipe before read end with race', function (t) { + t.plan(2) + + const bl = new BufferList() + + fs.createReadStream(path.join(__dirname, '/test.js')) + .pipe(bl) + + setTimeout(function () { + bl.destroy() + setTimeout(function () { + t.equal(bl._bufs.length, 0) + t.equal(bl.length, 0) + }, 500) + }, 500) +}) + +!process.browser && tape('destroy with pipe after read end', function (t) { + t.plan(2) + + const bl = new BufferList() + + fs.createReadStream(path.join(__dirname, '/test.js')) + .on('end', onEnd) + .pipe(bl) + + function onEnd () { + bl.destroy() + + t.equal(bl._bufs.length, 0) + t.equal(bl.length, 0) + } +}) + +!process.browser && tape('destroy with pipe while writing to a destination', function (t) { + t.plan(4) + + const bl = new BufferList() + const ds = new BufferList() + + fs.createReadStream(path.join(__dirname, '/test.js')) + .on('end', onEnd) + .pipe(bl) + + function onEnd () { + bl.pipe(ds) + + setTimeout(function () { + bl.destroy() + + t.equals(bl._bufs.length, 0) + t.equals(bl.length, 0) + + ds.destroy() + + t.equals(bl._bufs.length, 0) + t.equals(bl.length, 0) + }, 100) + } +}) + +!process.browser && tape('handle error', function (t) { + t.plan(2) + + fs.createReadStream('/does/not/exist').pipe(BufferList(function (err, data) { + t.ok(err instanceof Error, 'has error') + t.notOk(data, 'no data') + })) +}) diff --git a/node_backend/node_modules/bluebird/LICENSE b/node_backend/node_modules/bluebird/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..4182a1e1cce0411c7fc7c835461dd3732f445a6d --- /dev/null +++ b/node_backend/node_modules/bluebird/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2015 Petka Antonov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_backend/node_modules/bluebird/README.md b/node_backend/node_modules/bluebird/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3772161e7d4b1c2fd0df709471312e45052b1773 --- /dev/null +++ b/node_backend/node_modules/bluebird/README.md @@ -0,0 +1,51 @@ + + Promises/A+ logo + +[![Build Status](https://travis-ci.org/petkaantonov/bluebird.svg?branch=master)](https://travis-ci.org/petkaantonov/bluebird) +[![coverage-98%](http://img.shields.io/badge/coverage-98%-brightgreen.svg?style=flat)](http://petkaantonov.github.io/bluebird/coverage/debug/index.html) + +**Got a question?** Join us on [stackoverflow](http://stackoverflow.com/questions/tagged/bluebird), the [mailing list](https://groups.google.com/forum/#!forum/bluebird-js) or chat on [IRC](https://webchat.freenode.net/?channels=#promises) + +# Introduction + +Bluebird is a fully featured promise library with focus on innovative features and performance + +See the [**bluebird website**](http://bluebirdjs.com/docs/getting-started.html) for further documentation, references and instructions. See the [**API reference**](http://bluebirdjs.com/docs/api-reference.html) here. + +For bluebird 2.x documentation and files, see the [2.x tree](https://github.com/petkaantonov/bluebird/tree/2.x). + +# Questions and issues + +The [github issue tracker](https://github.com/petkaantonov/bluebird/issues) is **_only_** for bug reports and feature requests. Anything else, such as questions for help in using the library, should be posted in [StackOverflow](http://stackoverflow.com/questions/tagged/bluebird) under tags `promise` and `bluebird`. + + + +## Thanks + +Thanks to BrowserStack for providing us with a free account which lets us support old browsers like IE8. + +# License + +The MIT License (MIT) + +Copyright (c) 2013-2016 Petka Antonov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/node_backend/node_modules/bluebird/changelog.md b/node_backend/node_modules/bluebird/changelog.md new file mode 100644 index 0000000000000000000000000000000000000000..73b2eb6c79dd457df0eb958e09333adffc579f25 --- /dev/null +++ b/node_backend/node_modules/bluebird/changelog.md @@ -0,0 +1 @@ +[http://bluebirdjs.com/docs/changelog.html](http://bluebirdjs.com/docs/changelog.html) diff --git a/node_backend/node_modules/bluebird/js/browser/bluebird.core.js b/node_backend/node_modules/bluebird/js/browser/bluebird.core.js new file mode 100644 index 0000000000000000000000000000000000000000..ffb65382200d0953b6e54b30a9cf2cbddc06c7ab --- /dev/null +++ b/node_backend/node_modules/bluebird/js/browser/bluebird.core.js @@ -0,0 +1,3739 @@ +/* @preserve + * The MIT License (MIT) + * + * Copyright (c) 2013-2015 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +/** + * bluebird build version 3.4.7 + * Features enabled: core + * Features disabled: race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each +*/ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_=="function"&&_dereq_;for(var o=0;o 0) { + var fn = queue.shift(); + if (typeof fn !== "function") { + fn._settlePromises(); + continue; + } + var receiver = queue.shift(); + var arg = queue.shift(); + fn.call(receiver, arg); + } +}; + +Async.prototype._drainQueues = function () { + this._drainQueue(this._normalQueue); + this._reset(); + this._haveDrainedQueues = true; + this._drainQueue(this._lateQueue); +}; + +Async.prototype._queueTick = function () { + if (!this._isTickUsed) { + this._isTickUsed = true; + this._schedule(this.drainQueues); + } +}; + +Async.prototype._reset = function () { + this._isTickUsed = false; +}; + +module.exports = Async; +module.exports.firstLineError = firstLineError; + +},{"./queue":17,"./schedule":18,"./util":21}],2:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { +var calledBind = false; +var rejectThis = function(_, e) { + this._reject(e); +}; + +var targetRejected = function(e, context) { + context.promiseRejectionQueued = true; + context.bindingPromise._then(rejectThis, rejectThis, null, this, e); +}; + +var bindingResolved = function(thisArg, context) { + if (((this._bitField & 50397184) === 0)) { + this._resolveCallback(context.target); + } +}; + +var bindingRejected = function(e, context) { + if (!context.promiseRejectionQueued) this._reject(e); +}; + +Promise.prototype.bind = function (thisArg) { + if (!calledBind) { + calledBind = true; + Promise.prototype._propagateFrom = debug.propagateFromFunction(); + Promise.prototype._boundValue = debug.boundValueFunction(); + } + var maybePromise = tryConvertToPromise(thisArg); + var ret = new Promise(INTERNAL); + ret._propagateFrom(this, 1); + var target = this._target(); + ret._setBoundTo(maybePromise); + if (maybePromise instanceof Promise) { + var context = { + promiseRejectionQueued: false, + promise: ret, + target: target, + bindingPromise: maybePromise + }; + target._then(INTERNAL, targetRejected, undefined, ret, context); + maybePromise._then( + bindingResolved, bindingRejected, undefined, ret, context); + ret._setOnCancel(maybePromise); + } else { + ret._resolveCallback(target); + } + return ret; +}; + +Promise.prototype._setBoundTo = function (obj) { + if (obj !== undefined) { + this._bitField = this._bitField | 2097152; + this._boundTo = obj; + } else { + this._bitField = this._bitField & (~2097152); + } +}; + +Promise.prototype._isBound = function () { + return (this._bitField & 2097152) === 2097152; +}; + +Promise.bind = function (thisArg, value) { + return Promise.resolve(value).bind(thisArg); +}; +}; + +},{}],3:[function(_dereq_,module,exports){ +"use strict"; +var old; +if (typeof Promise !== "undefined") old = Promise; +function noConflict() { + try { if (Promise === bluebird) Promise = old; } + catch (e) {} + return bluebird; +} +var bluebird = _dereq_("./promise")(); +bluebird.noConflict = noConflict; +module.exports = bluebird; + +},{"./promise":15}],4:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, PromiseArray, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +Promise.prototype["break"] = Promise.prototype.cancel = function() { + if (!debug.cancellation()) return this._warn("cancellation is disabled"); + + var promise = this; + var child = promise; + while (promise._isCancellable()) { + if (!promise._cancelBy(child)) { + if (child._isFollowing()) { + child._followee().cancel(); + } else { + child._cancelBranched(); + } + break; + } + + var parent = promise._cancellationParent; + if (parent == null || !parent._isCancellable()) { + if (promise._isFollowing()) { + promise._followee().cancel(); + } else { + promise._cancelBranched(); + } + break; + } else { + if (promise._isFollowing()) promise._followee().cancel(); + promise._setWillBeCancelled(); + child = promise; + promise = parent; + } + } +}; + +Promise.prototype._branchHasCancelled = function() { + this._branchesRemainingToCancel--; +}; + +Promise.prototype._enoughBranchesHaveCancelled = function() { + return this._branchesRemainingToCancel === undefined || + this._branchesRemainingToCancel <= 0; +}; + +Promise.prototype._cancelBy = function(canceller) { + if (canceller === this) { + this._branchesRemainingToCancel = 0; + this._invokeOnCancel(); + return true; + } else { + this._branchHasCancelled(); + if (this._enoughBranchesHaveCancelled()) { + this._invokeOnCancel(); + return true; + } + } + return false; +}; + +Promise.prototype._cancelBranched = function() { + if (this._enoughBranchesHaveCancelled()) { + this._cancel(); + } +}; + +Promise.prototype._cancel = function() { + if (!this._isCancellable()) return; + this._setCancelled(); + async.invoke(this._cancelPromises, this, undefined); +}; + +Promise.prototype._cancelPromises = function() { + if (this._length() > 0) this._settlePromises(); +}; + +Promise.prototype._unsetOnCancel = function() { + this._onCancelField = undefined; +}; + +Promise.prototype._isCancellable = function() { + return this.isPending() && !this._isCancelled(); +}; + +Promise.prototype.isCancellable = function() { + return this.isPending() && !this.isCancelled(); +}; + +Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { + if (util.isArray(onCancelCallback)) { + for (var i = 0; i < onCancelCallback.length; ++i) { + this._doInvokeOnCancel(onCancelCallback[i], internalOnly); + } + } else if (onCancelCallback !== undefined) { + if (typeof onCancelCallback === "function") { + if (!internalOnly) { + var e = tryCatch(onCancelCallback).call(this._boundValue()); + if (e === errorObj) { + this._attachExtraTrace(e.e); + async.throwLater(e.e); + } + } + } else { + onCancelCallback._resultCancelled(this); + } + } +}; + +Promise.prototype._invokeOnCancel = function() { + var onCancelCallback = this._onCancel(); + this._unsetOnCancel(); + async.invoke(this._doInvokeOnCancel, this, onCancelCallback); +}; + +Promise.prototype._invokeInternalOnCancel = function() { + if (this._isCancellable()) { + this._doInvokeOnCancel(this._onCancel(), true); + this._unsetOnCancel(); + } +}; + +Promise.prototype._resultCancelled = function() { + this.cancel(); +}; + +}; + +},{"./util":21}],5:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(NEXT_FILTER) { +var util = _dereq_("./util"); +var getKeys = _dereq_("./es5").keys; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function catchFilter(instances, cb, promise) { + return function(e) { + var boundTo = promise._boundValue(); + predicateLoop: for (var i = 0; i < instances.length; ++i) { + var item = instances[i]; + + if (item === Error || + (item != null && item.prototype instanceof Error)) { + if (e instanceof item) { + return tryCatch(cb).call(boundTo, e); + } + } else if (typeof item === "function") { + var matchesPredicate = tryCatch(item).call(boundTo, e); + if (matchesPredicate === errorObj) { + return matchesPredicate; + } else if (matchesPredicate) { + return tryCatch(cb).call(boundTo, e); + } + } else if (util.isObject(e)) { + var keys = getKeys(item); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + if (item[key] != e[key]) { + continue predicateLoop; + } + } + return tryCatch(cb).call(boundTo, e); + } + } + return NEXT_FILTER; + }; +} + +return catchFilter; +}; + +},{"./es5":10,"./util":21}],6:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +var longStackTraces = false; +var contextStack = []; + +Promise.prototype._promiseCreated = function() {}; +Promise.prototype._pushContext = function() {}; +Promise.prototype._popContext = function() {return null;}; +Promise._peekContext = Promise.prototype._peekContext = function() {}; + +function Context() { + this._trace = new Context.CapturedTrace(peekContext()); +} +Context.prototype._pushContext = function () { + if (this._trace !== undefined) { + this._trace._promiseCreated = null; + contextStack.push(this._trace); + } +}; + +Context.prototype._popContext = function () { + if (this._trace !== undefined) { + var trace = contextStack.pop(); + var ret = trace._promiseCreated; + trace._promiseCreated = null; + return ret; + } + return null; +}; + +function createContext() { + if (longStackTraces) return new Context(); +} + +function peekContext() { + var lastIndex = contextStack.length - 1; + if (lastIndex >= 0) { + return contextStack[lastIndex]; + } + return undefined; +} +Context.CapturedTrace = null; +Context.create = createContext; +Context.deactivateLongStackTraces = function() {}; +Context.activateLongStackTraces = function() { + var Promise_pushContext = Promise.prototype._pushContext; + var Promise_popContext = Promise.prototype._popContext; + var Promise_PeekContext = Promise._peekContext; + var Promise_peekContext = Promise.prototype._peekContext; + var Promise_promiseCreated = Promise.prototype._promiseCreated; + Context.deactivateLongStackTraces = function() { + Promise.prototype._pushContext = Promise_pushContext; + Promise.prototype._popContext = Promise_popContext; + Promise._peekContext = Promise_PeekContext; + Promise.prototype._peekContext = Promise_peekContext; + Promise.prototype._promiseCreated = Promise_promiseCreated; + longStackTraces = false; + }; + longStackTraces = true; + Promise.prototype._pushContext = Context.prototype._pushContext; + Promise.prototype._popContext = Context.prototype._popContext; + Promise._peekContext = Promise.prototype._peekContext = peekContext; + Promise.prototype._promiseCreated = function() { + var ctx = this._peekContext(); + if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; + }; +}; +return Context; +}; + +},{}],7:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, Context) { +var getDomain = Promise._getDomain; +var async = Promise._async; +var Warning = _dereq_("./errors").Warning; +var util = _dereq_("./util"); +var canAttachTrace = util.canAttachTrace; +var unhandledRejectionHandled; +var possiblyUnhandledRejection; +var bluebirdFramePattern = + /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; +var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/; +var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/; +var stackFramePattern = null; +var formatStack = null; +var indentStackFrames = false; +var printWarning; +var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && + (true || + util.env("BLUEBIRD_DEBUG") || + util.env("NODE_ENV") === "development")); + +var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && + (debugging || util.env("BLUEBIRD_WARNINGS"))); + +var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && + (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); + +var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && + (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); + +Promise.prototype.suppressUnhandledRejections = function() { + var target = this._target(); + target._bitField = ((target._bitField & (~1048576)) | + 524288); +}; + +Promise.prototype._ensurePossibleRejectionHandled = function () { + if ((this._bitField & 524288) !== 0) return; + this._setRejectionIsUnhandled(); + async.invokeLater(this._notifyUnhandledRejection, this, undefined); +}; + +Promise.prototype._notifyUnhandledRejectionIsHandled = function () { + fireRejectionEvent("rejectionHandled", + unhandledRejectionHandled, undefined, this); +}; + +Promise.prototype._setReturnedNonUndefined = function() { + this._bitField = this._bitField | 268435456; +}; + +Promise.prototype._returnedNonUndefined = function() { + return (this._bitField & 268435456) !== 0; +}; + +Promise.prototype._notifyUnhandledRejection = function () { + if (this._isRejectionUnhandled()) { + var reason = this._settledValue(); + this._setUnhandledRejectionIsNotified(); + fireRejectionEvent("unhandledRejection", + possiblyUnhandledRejection, reason, this); + } +}; + +Promise.prototype._setUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField | 262144; +}; + +Promise.prototype._unsetUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField & (~262144); +}; + +Promise.prototype._isUnhandledRejectionNotified = function () { + return (this._bitField & 262144) > 0; +}; + +Promise.prototype._setRejectionIsUnhandled = function () { + this._bitField = this._bitField | 1048576; +}; + +Promise.prototype._unsetRejectionIsUnhandled = function () { + this._bitField = this._bitField & (~1048576); + if (this._isUnhandledRejectionNotified()) { + this._unsetUnhandledRejectionIsNotified(); + this._notifyUnhandledRejectionIsHandled(); + } +}; + +Promise.prototype._isRejectionUnhandled = function () { + return (this._bitField & 1048576) > 0; +}; + +Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { + return warn(message, shouldUseOwnTrace, promise || this); +}; + +Promise.onPossiblyUnhandledRejection = function (fn) { + var domain = getDomain(); + possiblyUnhandledRejection = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +Promise.onUnhandledRejectionHandled = function (fn) { + var domain = getDomain(); + unhandledRejectionHandled = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +var disableLongStackTraces = function() {}; +Promise.longStackTraces = function () { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + if (!config.longStackTraces && longStackTracesIsSupported()) { + var Promise_captureStackTrace = Promise.prototype._captureStackTrace; + var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; + config.longStackTraces = true; + disableLongStackTraces = function() { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + Promise.prototype._captureStackTrace = Promise_captureStackTrace; + Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; + Context.deactivateLongStackTraces(); + async.enableTrampoline(); + config.longStackTraces = false; + }; + Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; + Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; + Context.activateLongStackTraces(); + async.disableTrampolineIfNecessary(); + } +}; + +Promise.hasLongStackTraces = function () { + return config.longStackTraces && longStackTracesIsSupported(); +}; + +var fireDomEvent = (function() { + try { + if (typeof CustomEvent === "function") { + var event = new CustomEvent("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new CustomEvent(name.toLowerCase(), { + detail: event, + cancelable: true + }); + return !util.global.dispatchEvent(domEvent); + }; + } else if (typeof Event === "function") { + var event = new Event("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new Event(name.toLowerCase(), { + cancelable: true + }); + domEvent.detail = event; + return !util.global.dispatchEvent(domEvent); + }; + } else { + var event = document.createEvent("CustomEvent"); + event.initCustomEvent("testingtheevent", false, true, {}); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = document.createEvent("CustomEvent"); + domEvent.initCustomEvent(name.toLowerCase(), false, true, + event); + return !util.global.dispatchEvent(domEvent); + }; + } + } catch (e) {} + return function() { + return false; + }; +})(); + +var fireGlobalEvent = (function() { + if (util.isNode) { + return function() { + return process.emit.apply(process, arguments); + }; + } else { + if (!util.global) { + return function() { + return false; + }; + } + return function(name) { + var methodName = "on" + name.toLowerCase(); + var method = util.global[methodName]; + if (!method) return false; + method.apply(util.global, [].slice.call(arguments, 1)); + return true; + }; + } +})(); + +function generatePromiseLifecycleEventObject(name, promise) { + return {promise: promise}; +} + +var eventToObjectGenerator = { + promiseCreated: generatePromiseLifecycleEventObject, + promiseFulfilled: generatePromiseLifecycleEventObject, + promiseRejected: generatePromiseLifecycleEventObject, + promiseResolved: generatePromiseLifecycleEventObject, + promiseCancelled: generatePromiseLifecycleEventObject, + promiseChained: function(name, promise, child) { + return {promise: promise, child: child}; + }, + warning: function(name, warning) { + return {warning: warning}; + }, + unhandledRejection: function (name, reason, promise) { + return {reason: reason, promise: promise}; + }, + rejectionHandled: generatePromiseLifecycleEventObject +}; + +var activeFireEvent = function (name) { + var globalEventFired = false; + try { + globalEventFired = fireGlobalEvent.apply(null, arguments); + } catch (e) { + async.throwLater(e); + globalEventFired = true; + } + + var domEventFired = false; + try { + domEventFired = fireDomEvent(name, + eventToObjectGenerator[name].apply(null, arguments)); + } catch (e) { + async.throwLater(e); + domEventFired = true; + } + + return domEventFired || globalEventFired; +}; + +Promise.config = function(opts) { + opts = Object(opts); + if ("longStackTraces" in opts) { + if (opts.longStackTraces) { + Promise.longStackTraces(); + } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { + disableLongStackTraces(); + } + } + if ("warnings" in opts) { + var warningsOption = opts.warnings; + config.warnings = !!warningsOption; + wForgottenReturn = config.warnings; + + if (util.isObject(warningsOption)) { + if ("wForgottenReturn" in warningsOption) { + wForgottenReturn = !!warningsOption.wForgottenReturn; + } + } + } + if ("cancellation" in opts && opts.cancellation && !config.cancellation) { + if (async.haveItemsQueued()) { + throw new Error( + "cannot enable cancellation after promises are in use"); + } + Promise.prototype._clearCancellationData = + cancellationClearCancellationData; + Promise.prototype._propagateFrom = cancellationPropagateFrom; + Promise.prototype._onCancel = cancellationOnCancel; + Promise.prototype._setOnCancel = cancellationSetOnCancel; + Promise.prototype._attachCancellationCallback = + cancellationAttachCancellationCallback; + Promise.prototype._execute = cancellationExecute; + propagateFromFunction = cancellationPropagateFrom; + config.cancellation = true; + } + if ("monitoring" in opts) { + if (opts.monitoring && !config.monitoring) { + config.monitoring = true; + Promise.prototype._fireEvent = activeFireEvent; + } else if (!opts.monitoring && config.monitoring) { + config.monitoring = false; + Promise.prototype._fireEvent = defaultFireEvent; + } + } + return Promise; +}; + +function defaultFireEvent() { return false; } + +Promise.prototype._fireEvent = defaultFireEvent; +Promise.prototype._execute = function(executor, resolve, reject) { + try { + executor(resolve, reject); + } catch (e) { + return e; + } +}; +Promise.prototype._onCancel = function () {}; +Promise.prototype._setOnCancel = function (handler) { ; }; +Promise.prototype._attachCancellationCallback = function(onCancel) { + ; +}; +Promise.prototype._captureStackTrace = function () {}; +Promise.prototype._attachExtraTrace = function () {}; +Promise.prototype._clearCancellationData = function() {}; +Promise.prototype._propagateFrom = function (parent, flags) { + ; + ; +}; + +function cancellationExecute(executor, resolve, reject) { + var promise = this; + try { + executor(resolve, reject, function(onCancel) { + if (typeof onCancel !== "function") { + throw new TypeError("onCancel must be a function, got: " + + util.toString(onCancel)); + } + promise._attachCancellationCallback(onCancel); + }); + } catch (e) { + return e; + } +} + +function cancellationAttachCancellationCallback(onCancel) { + if (!this._isCancellable()) return this; + + var previousOnCancel = this._onCancel(); + if (previousOnCancel !== undefined) { + if (util.isArray(previousOnCancel)) { + previousOnCancel.push(onCancel); + } else { + this._setOnCancel([previousOnCancel, onCancel]); + } + } else { + this._setOnCancel(onCancel); + } +} + +function cancellationOnCancel() { + return this._onCancelField; +} + +function cancellationSetOnCancel(onCancel) { + this._onCancelField = onCancel; +} + +function cancellationClearCancellationData() { + this._cancellationParent = undefined; + this._onCancelField = undefined; +} + +function cancellationPropagateFrom(parent, flags) { + if ((flags & 1) !== 0) { + this._cancellationParent = parent; + var branchesRemainingToCancel = parent._branchesRemainingToCancel; + if (branchesRemainingToCancel === undefined) { + branchesRemainingToCancel = 0; + } + parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; + } + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} + +function bindingPropagateFrom(parent, flags) { + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} +var propagateFromFunction = bindingPropagateFrom; + +function boundValueFunction() { + var ret = this._boundTo; + if (ret !== undefined) { + if (ret instanceof Promise) { + if (ret.isFulfilled()) { + return ret.value(); + } else { + return undefined; + } + } + } + return ret; +} + +function longStackTracesCaptureStackTrace() { + this._trace = new CapturedTrace(this._peekContext()); +} + +function longStackTracesAttachExtraTrace(error, ignoreSelf) { + if (canAttachTrace(error)) { + var trace = this._trace; + if (trace !== undefined) { + if (ignoreSelf) trace = trace._parent; + } + if (trace !== undefined) { + trace.attachExtraTrace(error); + } else if (!error.__stackCleaned__) { + var parsed = parseStackAndMessage(error); + util.notEnumerableProp(error, "stack", + parsed.message + "\n" + parsed.stack.join("\n")); + util.notEnumerableProp(error, "__stackCleaned__", true); + } + } +} + +function checkForgottenReturns(returnValue, promiseCreated, name, promise, + parent) { + if (returnValue === undefined && promiseCreated !== null && + wForgottenReturn) { + if (parent !== undefined && parent._returnedNonUndefined()) return; + if ((promise._bitField & 65535) === 0) return; + + if (name) name = name + " "; + var handlerLine = ""; + var creatorLine = ""; + if (promiseCreated._trace) { + var traceLines = promiseCreated._trace.stack.split("\n"); + var stack = cleanStack(traceLines); + for (var i = stack.length - 1; i >= 0; --i) { + var line = stack[i]; + if (!nodeFramePattern.test(line)) { + var lineMatches = line.match(parseLinePattern); + if (lineMatches) { + handlerLine = "at " + lineMatches[1] + + ":" + lineMatches[2] + ":" + lineMatches[3] + " "; + } + break; + } + } + + if (stack.length > 0) { + var firstUserLine = stack[0]; + for (var i = 0; i < traceLines.length; ++i) { + + if (traceLines[i] === firstUserLine) { + if (i > 0) { + creatorLine = "\n" + traceLines[i - 1]; + } + break; + } + } + + } + } + var msg = "a promise was created in a " + name + + "handler " + handlerLine + "but was not returned from it, " + + "see http://goo.gl/rRqMUw" + + creatorLine; + promise._warn(msg, true, promiseCreated); + } +} + +function deprecated(name, replacement) { + var message = name + + " is deprecated and will be removed in a future version."; + if (replacement) message += " Use " + replacement + " instead."; + return warn(message); +} + +function warn(message, shouldUseOwnTrace, promise) { + if (!config.warnings) return; + var warning = new Warning(message); + var ctx; + if (shouldUseOwnTrace) { + promise._attachExtraTrace(warning); + } else if (config.longStackTraces && (ctx = Promise._peekContext())) { + ctx.attachExtraTrace(warning); + } else { + var parsed = parseStackAndMessage(warning); + warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); + } + + if (!activeFireEvent("warning", warning)) { + formatAndLogError(warning, "", true); + } +} + +function reconstructStack(message, stacks) { + for (var i = 0; i < stacks.length - 1; ++i) { + stacks[i].push("From previous event:"); + stacks[i] = stacks[i].join("\n"); + } + if (i < stacks.length) { + stacks[i] = stacks[i].join("\n"); + } + return message + "\n" + stacks.join("\n"); +} + +function removeDuplicateOrEmptyJumps(stacks) { + for (var i = 0; i < stacks.length; ++i) { + if (stacks[i].length === 0 || + ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { + stacks.splice(i, 1); + i--; + } + } +} + +function removeCommonRoots(stacks) { + var current = stacks[0]; + for (var i = 1; i < stacks.length; ++i) { + var prev = stacks[i]; + var currentLastIndex = current.length - 1; + var currentLastLine = current[currentLastIndex]; + var commonRootMeetPoint = -1; + + for (var j = prev.length - 1; j >= 0; --j) { + if (prev[j] === currentLastLine) { + commonRootMeetPoint = j; + break; + } + } + + for (var j = commonRootMeetPoint; j >= 0; --j) { + var line = prev[j]; + if (current[currentLastIndex] === line) { + current.pop(); + currentLastIndex--; + } else { + break; + } + } + current = prev; + } +} + +function cleanStack(stack) { + var ret = []; + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + var isTraceLine = " (No stack trace)" === line || + stackFramePattern.test(line); + var isInternalFrame = isTraceLine && shouldIgnore(line); + if (isTraceLine && !isInternalFrame) { + if (indentStackFrames && line.charAt(0) !== " ") { + line = " " + line; + } + ret.push(line); + } + } + return ret; +} + +function stackFramesAsArray(error) { + var stack = error.stack.replace(/\s+$/g, "").split("\n"); + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + if (" (No stack trace)" === line || stackFramePattern.test(line)) { + break; + } + } + if (i > 0 && error.name != "SyntaxError") { + stack = stack.slice(i); + } + return stack; +} + +function parseStackAndMessage(error) { + var stack = error.stack; + var message = error.toString(); + stack = typeof stack === "string" && stack.length > 0 + ? stackFramesAsArray(error) : [" (No stack trace)"]; + return { + message: message, + stack: error.name == "SyntaxError" ? stack : cleanStack(stack) + }; +} + +function formatAndLogError(error, title, isSoft) { + if (typeof console !== "undefined") { + var message; + if (util.isObject(error)) { + var stack = error.stack; + message = title + formatStack(stack, error); + } else { + message = title + String(error); + } + if (typeof printWarning === "function") { + printWarning(message, isSoft); + } else if (typeof console.log === "function" || + typeof console.log === "object") { + console.log(message); + } + } +} + +function fireRejectionEvent(name, localHandler, reason, promise) { + var localEventFired = false; + try { + if (typeof localHandler === "function") { + localEventFired = true; + if (name === "rejectionHandled") { + localHandler(promise); + } else { + localHandler(reason, promise); + } + } + } catch (e) { + async.throwLater(e); + } + + if (name === "unhandledRejection") { + if (!activeFireEvent(name, reason, promise) && !localEventFired) { + formatAndLogError(reason, "Unhandled rejection "); + } + } else { + activeFireEvent(name, promise); + } +} + +function formatNonError(obj) { + var str; + if (typeof obj === "function") { + str = "[function " + + (obj.name || "anonymous") + + "]"; + } else { + str = obj && typeof obj.toString === "function" + ? obj.toString() : util.toString(obj); + var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; + if (ruselessToString.test(str)) { + try { + var newStr = JSON.stringify(obj); + str = newStr; + } + catch(e) { + + } + } + if (str.length === 0) { + str = "(empty array)"; + } + } + return ("(<" + snip(str) + ">, no stack trace)"); +} + +function snip(str) { + var maxChars = 41; + if (str.length < maxChars) { + return str; + } + return str.substr(0, maxChars - 3) + "..."; +} + +function longStackTracesIsSupported() { + return typeof captureStackTrace === "function"; +} + +var shouldIgnore = function() { return false; }; +var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; +function parseLineInfo(line) { + var matches = line.match(parseLineInfoRegex); + if (matches) { + return { + fileName: matches[1], + line: parseInt(matches[2], 10) + }; + } +} + +function setBounds(firstLineError, lastLineError) { + if (!longStackTracesIsSupported()) return; + var firstStackLines = firstLineError.stack.split("\n"); + var lastStackLines = lastLineError.stack.split("\n"); + var firstIndex = -1; + var lastIndex = -1; + var firstFileName; + var lastFileName; + for (var i = 0; i < firstStackLines.length; ++i) { + var result = parseLineInfo(firstStackLines[i]); + if (result) { + firstFileName = result.fileName; + firstIndex = result.line; + break; + } + } + for (var i = 0; i < lastStackLines.length; ++i) { + var result = parseLineInfo(lastStackLines[i]); + if (result) { + lastFileName = result.fileName; + lastIndex = result.line; + break; + } + } + if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || + firstFileName !== lastFileName || firstIndex >= lastIndex) { + return; + } + + shouldIgnore = function(line) { + if (bluebirdFramePattern.test(line)) return true; + var info = parseLineInfo(line); + if (info) { + if (info.fileName === firstFileName && + (firstIndex <= info.line && info.line <= lastIndex)) { + return true; + } + } + return false; + }; +} + +function CapturedTrace(parent) { + this._parent = parent; + this._promisesCreated = 0; + var length = this._length = 1 + (parent === undefined ? 0 : parent._length); + captureStackTrace(this, CapturedTrace); + if (length > 32) this.uncycle(); +} +util.inherits(CapturedTrace, Error); +Context.CapturedTrace = CapturedTrace; + +CapturedTrace.prototype.uncycle = function() { + var length = this._length; + if (length < 2) return; + var nodes = []; + var stackToIndex = {}; + + for (var i = 0, node = this; node !== undefined; ++i) { + nodes.push(node); + node = node._parent; + } + length = this._length = i; + for (var i = length - 1; i >= 0; --i) { + var stack = nodes[i].stack; + if (stackToIndex[stack] === undefined) { + stackToIndex[stack] = i; + } + } + for (var i = 0; i < length; ++i) { + var currentStack = nodes[i].stack; + var index = stackToIndex[currentStack]; + if (index !== undefined && index !== i) { + if (index > 0) { + nodes[index - 1]._parent = undefined; + nodes[index - 1]._length = 1; + } + nodes[i]._parent = undefined; + nodes[i]._length = 1; + var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; + + if (index < length - 1) { + cycleEdgeNode._parent = nodes[index + 1]; + cycleEdgeNode._parent.uncycle(); + cycleEdgeNode._length = + cycleEdgeNode._parent._length + 1; + } else { + cycleEdgeNode._parent = undefined; + cycleEdgeNode._length = 1; + } + var currentChildLength = cycleEdgeNode._length + 1; + for (var j = i - 2; j >= 0; --j) { + nodes[j]._length = currentChildLength; + currentChildLength++; + } + return; + } + } +}; + +CapturedTrace.prototype.attachExtraTrace = function(error) { + if (error.__stackCleaned__) return; + this.uncycle(); + var parsed = parseStackAndMessage(error); + var message = parsed.message; + var stacks = [parsed.stack]; + + var trace = this; + while (trace !== undefined) { + stacks.push(cleanStack(trace.stack.split("\n"))); + trace = trace._parent; + } + removeCommonRoots(stacks); + removeDuplicateOrEmptyJumps(stacks); + util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); + util.notEnumerableProp(error, "__stackCleaned__", true); +}; + +var captureStackTrace = (function stackDetection() { + var v8stackFramePattern = /^\s*at\s*/; + var v8stackFormatter = function(stack, error) { + if (typeof stack === "string") return stack; + + if (error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + if (typeof Error.stackTraceLimit === "number" && + typeof Error.captureStackTrace === "function") { + Error.stackTraceLimit += 6; + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + var captureStackTrace = Error.captureStackTrace; + + shouldIgnore = function(line) { + return bluebirdFramePattern.test(line); + }; + return function(receiver, ignoreUntil) { + Error.stackTraceLimit += 6; + captureStackTrace(receiver, ignoreUntil); + Error.stackTraceLimit -= 6; + }; + } + var err = new Error(); + + if (typeof err.stack === "string" && + err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { + stackFramePattern = /@/; + formatStack = v8stackFormatter; + indentStackFrames = true; + return function captureStackTrace(o) { + o.stack = new Error().stack; + }; + } + + var hasStackAfterThrow; + try { throw new Error(); } + catch(e) { + hasStackAfterThrow = ("stack" in e); + } + if (!("stack" in err) && hasStackAfterThrow && + typeof Error.stackTraceLimit === "number") { + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + return function captureStackTrace(o) { + Error.stackTraceLimit += 6; + try { throw new Error(); } + catch(e) { o.stack = e.stack; } + Error.stackTraceLimit -= 6; + }; + } + + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if ((typeof error === "object" || + typeof error === "function") && + error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + return null; + +})([]); + +if (typeof console !== "undefined" && typeof console.warn !== "undefined") { + printWarning = function (message) { + console.warn(message); + }; + if (util.isNode && process.stderr.isTTY) { + printWarning = function(message, isSoft) { + var color = isSoft ? "\u001b[33m" : "\u001b[31m"; + console.warn(color + message + "\u001b[0m\n"); + }; + } else if (!util.isNode && typeof (new Error().stack) === "string") { + printWarning = function(message, isSoft) { + console.warn("%c" + message, + isSoft ? "color: darkorange" : "color: red"); + }; + } +} + +var config = { + warnings: warnings, + longStackTraces: false, + cancellation: false, + monitoring: false +}; + +if (longStackTraces) Promise.longStackTraces(); + +return { + longStackTraces: function() { + return config.longStackTraces; + }, + warnings: function() { + return config.warnings; + }, + cancellation: function() { + return config.cancellation; + }, + monitoring: function() { + return config.monitoring; + }, + propagateFromFunction: function() { + return propagateFromFunction; + }, + boundValueFunction: function() { + return boundValueFunction; + }, + checkForgottenReturns: checkForgottenReturns, + setBounds: setBounds, + warn: warn, + deprecated: deprecated, + CapturedTrace: CapturedTrace, + fireDomEvent: fireDomEvent, + fireGlobalEvent: fireGlobalEvent +}; +}; + +},{"./errors":9,"./util":21}],8:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function returner() { + return this.value; +} +function thrower() { + throw this.reason; +} + +Promise.prototype["return"] = +Promise.prototype.thenReturn = function (value) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + returner, undefined, undefined, {value: value}, undefined); +}; + +Promise.prototype["throw"] = +Promise.prototype.thenThrow = function (reason) { + return this._then( + thrower, undefined, undefined, {reason: reason}, undefined); +}; + +Promise.prototype.catchThrow = function (reason) { + if (arguments.length <= 1) { + return this._then( + undefined, thrower, undefined, {reason: reason}, undefined); + } else { + var _reason = arguments[1]; + var handler = function() {throw _reason;}; + return this.caught(reason, handler); + } +}; + +Promise.prototype.catchReturn = function (value) { + if (arguments.length <= 1) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + undefined, returner, undefined, {value: value}, undefined); + } else { + var _value = arguments[1]; + if (_value instanceof Promise) _value.suppressUnhandledRejections(); + var handler = function() {return _value;}; + return this.caught(value, handler); + } +}; +}; + +},{}],9:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var Objectfreeze = es5.freeze; +var util = _dereq_("./util"); +var inherits = util.inherits; +var notEnumerableProp = util.notEnumerableProp; + +function subError(nameProperty, defaultMessage) { + function SubError(message) { + if (!(this instanceof SubError)) return new SubError(message); + notEnumerableProp(this, "message", + typeof message === "string" ? message : defaultMessage); + notEnumerableProp(this, "name", nameProperty); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + Error.call(this); + } + } + inherits(SubError, Error); + return SubError; +} + +var _TypeError, _RangeError; +var Warning = subError("Warning", "warning"); +var CancellationError = subError("CancellationError", "cancellation error"); +var TimeoutError = subError("TimeoutError", "timeout error"); +var AggregateError = subError("AggregateError", "aggregate error"); +try { + _TypeError = TypeError; + _RangeError = RangeError; +} catch(e) { + _TypeError = subError("TypeError", "type error"); + _RangeError = subError("RangeError", "range error"); +} + +var methods = ("join pop push shift unshift slice filter forEach some " + + "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); + +for (var i = 0; i < methods.length; ++i) { + if (typeof Array.prototype[methods[i]] === "function") { + AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; + } +} + +es5.defineProperty(AggregateError.prototype, "length", { + value: 0, + configurable: false, + writable: true, + enumerable: true +}); +AggregateError.prototype["isOperational"] = true; +var level = 0; +AggregateError.prototype.toString = function() { + var indent = Array(level * 4 + 1).join(" "); + var ret = "\n" + indent + "AggregateError of:" + "\n"; + level++; + indent = Array(level * 4 + 1).join(" "); + for (var i = 0; i < this.length; ++i) { + var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; + var lines = str.split("\n"); + for (var j = 0; j < lines.length; ++j) { + lines[j] = indent + lines[j]; + } + str = lines.join("\n"); + ret += str + "\n"; + } + level--; + return ret; +}; + +function OperationalError(message) { + if (!(this instanceof OperationalError)) + return new OperationalError(message); + notEnumerableProp(this, "name", "OperationalError"); + notEnumerableProp(this, "message", message); + this.cause = message; + this["isOperational"] = true; + + if (message instanceof Error) { + notEnumerableProp(this, "message", message.message); + notEnumerableProp(this, "stack", message.stack); + } else if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + +} +inherits(OperationalError, Error); + +var errorTypes = Error["__BluebirdErrorTypes__"]; +if (!errorTypes) { + errorTypes = Objectfreeze({ + CancellationError: CancellationError, + TimeoutError: TimeoutError, + OperationalError: OperationalError, + RejectionError: OperationalError, + AggregateError: AggregateError + }); + es5.defineProperty(Error, "__BluebirdErrorTypes__", { + value: errorTypes, + writable: false, + enumerable: false, + configurable: false + }); +} + +module.exports = { + Error: Error, + TypeError: _TypeError, + RangeError: _RangeError, + CancellationError: errorTypes.CancellationError, + OperationalError: errorTypes.OperationalError, + TimeoutError: errorTypes.TimeoutError, + AggregateError: errorTypes.AggregateError, + Warning: Warning +}; + +},{"./es5":10,"./util":21}],10:[function(_dereq_,module,exports){ +var isES5 = (function(){ + "use strict"; + return this === undefined; +})(); + +if (isES5) { + module.exports = { + freeze: Object.freeze, + defineProperty: Object.defineProperty, + getDescriptor: Object.getOwnPropertyDescriptor, + keys: Object.keys, + names: Object.getOwnPropertyNames, + getPrototypeOf: Object.getPrototypeOf, + isArray: Array.isArray, + isES5: isES5, + propertyIsWritable: function(obj, prop) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + return !!(!descriptor || descriptor.writable || descriptor.set); + } + }; +} else { + var has = {}.hasOwnProperty; + var str = {}.toString; + var proto = {}.constructor.prototype; + + var ObjectKeys = function (o) { + var ret = []; + for (var key in o) { + if (has.call(o, key)) { + ret.push(key); + } + } + return ret; + }; + + var ObjectGetDescriptor = function(o, key) { + return {value: o[key]}; + }; + + var ObjectDefineProperty = function (o, key, desc) { + o[key] = desc.value; + return o; + }; + + var ObjectFreeze = function (obj) { + return obj; + }; + + var ObjectGetPrototypeOf = function (obj) { + try { + return Object(obj).constructor.prototype; + } + catch (e) { + return proto; + } + }; + + var ArrayIsArray = function (obj) { + try { + return str.call(obj) === "[object Array]"; + } + catch(e) { + return false; + } + }; + + module.exports = { + isArray: ArrayIsArray, + keys: ObjectKeys, + names: ObjectKeys, + defineProperty: ObjectDefineProperty, + getDescriptor: ObjectGetDescriptor, + freeze: ObjectFreeze, + getPrototypeOf: ObjectGetPrototypeOf, + isES5: isES5, + propertyIsWritable: function() { + return true; + } + }; +} + +},{}],11:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, tryConvertToPromise) { +var util = _dereq_("./util"); +var CancellationError = Promise.CancellationError; +var errorObj = util.errorObj; + +function PassThroughHandlerContext(promise, type, handler) { + this.promise = promise; + this.type = type; + this.handler = handler; + this.called = false; + this.cancelPromise = null; +} + +PassThroughHandlerContext.prototype.isFinallyHandler = function() { + return this.type === 0; +}; + +function FinallyHandlerCancelReaction(finallyHandler) { + this.finallyHandler = finallyHandler; +} + +FinallyHandlerCancelReaction.prototype._resultCancelled = function() { + checkCancel(this.finallyHandler); +}; + +function checkCancel(ctx, reason) { + if (ctx.cancelPromise != null) { + if (arguments.length > 1) { + ctx.cancelPromise._reject(reason); + } else { + ctx.cancelPromise._cancel(); + } + ctx.cancelPromise = null; + return true; + } + return false; +} + +function succeed() { + return finallyHandler.call(this, this.promise._target()._settledValue()); +} +function fail(reason) { + if (checkCancel(this, reason)) return; + errorObj.e = reason; + return errorObj; +} +function finallyHandler(reasonOrValue) { + var promise = this.promise; + var handler = this.handler; + + if (!this.called) { + this.called = true; + var ret = this.isFinallyHandler() + ? handler.call(promise._boundValue()) + : handler.call(promise._boundValue(), reasonOrValue); + if (ret !== undefined) { + promise._setReturnedNonUndefined(); + var maybePromise = tryConvertToPromise(ret, promise); + if (maybePromise instanceof Promise) { + if (this.cancelPromise != null) { + if (maybePromise._isCancelled()) { + var reason = + new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + errorObj.e = reason; + return errorObj; + } else if (maybePromise.isPending()) { + maybePromise._attachCancellationCallback( + new FinallyHandlerCancelReaction(this)); + } + } + return maybePromise._then( + succeed, fail, undefined, this, undefined); + } + } + } + + if (promise.isRejected()) { + checkCancel(this); + errorObj.e = reasonOrValue; + return errorObj; + } else { + checkCancel(this); + return reasonOrValue; + } +} + +Promise.prototype._passThrough = function(handler, type, success, fail) { + if (typeof handler !== "function") return this.then(); + return this._then(success, + fail, + undefined, + new PassThroughHandlerContext(this, type, handler), + undefined); +}; + +Promise.prototype.lastly = +Promise.prototype["finally"] = function (handler) { + return this._passThrough(handler, + 0, + finallyHandler, + finallyHandler); +}; + +Promise.prototype.tap = function (handler) { + return this._passThrough(handler, 1, finallyHandler); +}; + +return PassThroughHandlerContext; +}; + +},{"./util":21}],12:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, + getDomain) { +var util = _dereq_("./util"); +var canEvaluate = util.canEvaluate; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var reject; + +if (!true) { +if (canEvaluate) { + var thenCallback = function(i) { + return new Function("value", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = value; \n\ + holder.checkFulfillment(this); \n\ + ".replace(/Index/g, i)); + }; + + var promiseSetter = function(i) { + return new Function("promise", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = promise; \n\ + ".replace(/Index/g, i)); + }; + + var generateHolderClass = function(total) { + var props = new Array(total); + for (var i = 0; i < props.length; ++i) { + props[i] = "this.p" + (i+1); + } + var assignment = props.join(" = ") + " = null;"; + var cancellationCode= "var promise;\n" + props.map(function(prop) { + return " \n\ + promise = " + prop + "; \n\ + if (promise instanceof Promise) { \n\ + promise.cancel(); \n\ + } \n\ + "; + }).join("\n"); + var passedArguments = props.join(", "); + var name = "Holder$" + total; + + + var code = "return function(tryCatch, errorObj, Promise, async) { \n\ + 'use strict'; \n\ + function [TheName](fn) { \n\ + [TheProperties] \n\ + this.fn = fn; \n\ + this.asyncNeeded = true; \n\ + this.now = 0; \n\ + } \n\ + \n\ + [TheName].prototype._callFunction = function(promise) { \n\ + promise._pushContext(); \n\ + var ret = tryCatch(this.fn)([ThePassedArguments]); \n\ + promise._popContext(); \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(ret.e, false); \n\ + } else { \n\ + promise._resolveCallback(ret); \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype.checkFulfillment = function(promise) { \n\ + var now = ++this.now; \n\ + if (now === [TheTotal]) { \n\ + if (this.asyncNeeded) { \n\ + async.invoke(this._callFunction, this, promise); \n\ + } else { \n\ + this._callFunction(promise); \n\ + } \n\ + \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype._resultCancelled = function() { \n\ + [CancellationCode] \n\ + }; \n\ + \n\ + return [TheName]; \n\ + }(tryCatch, errorObj, Promise, async); \n\ + "; + + code = code.replace(/\[TheName\]/g, name) + .replace(/\[TheTotal\]/g, total) + .replace(/\[ThePassedArguments\]/g, passedArguments) + .replace(/\[TheProperties\]/g, assignment) + .replace(/\[CancellationCode\]/g, cancellationCode); + + return new Function("tryCatch", "errorObj", "Promise", "async", code) + (tryCatch, errorObj, Promise, async); + }; + + var holderClasses = []; + var thenCallbacks = []; + var promiseSetters = []; + + for (var i = 0; i < 8; ++i) { + holderClasses.push(generateHolderClass(i + 1)); + thenCallbacks.push(thenCallback(i + 1)); + promiseSetters.push(promiseSetter(i + 1)); + } + + reject = function (reason) { + this._reject(reason); + }; +}} + +Promise.join = function () { + var last = arguments.length - 1; + var fn; + if (last > 0 && typeof arguments[last] === "function") { + fn = arguments[last]; + if (!true) { + if (last <= 8 && canEvaluate) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var HolderClass = holderClasses[last - 1]; + var holder = new HolderClass(fn); + var callbacks = thenCallbacks; + + for (var i = 0; i < last; ++i) { + var maybePromise = tryConvertToPromise(arguments[i], ret); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + maybePromise._then(callbacks[i], reject, + undefined, ret, holder); + promiseSetters[i](maybePromise, holder); + holder.asyncNeeded = false; + } else if (((bitField & 33554432) !== 0)) { + callbacks[i].call(ret, + maybePromise._value(), holder); + } else if (((bitField & 16777216) !== 0)) { + ret._reject(maybePromise._reason()); + } else { + ret._cancel(); + } + } else { + callbacks[i].call(ret, maybePromise, holder); + } + } + + if (!ret._isFateSealed()) { + if (holder.asyncNeeded) { + var domain = getDomain(); + if (domain !== null) { + holder.fn = util.domainBind(domain, holder.fn); + } + } + ret._setAsyncGuaranteed(); + ret._setOnCancel(holder); + } + return ret; + } + } + } + var args = [].slice.call(arguments);; + if (fn) args.pop(); + var ret = new PromiseArray(args).promise(); + return fn !== undefined ? ret.spread(fn) : ret; +}; + +}; + +},{"./util":21}],13:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; + +Promise.method = function (fn) { + if (typeof fn !== "function") { + throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); + } + return function () { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value = tryCatch(fn).apply(this, arguments); + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.method", ret); + ret._resolveFromSyncValue(value); + return ret; + }; +}; + +Promise.attempt = Promise["try"] = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value; + if (arguments.length > 1) { + debug.deprecated("calling Promise.try with more than 1 argument"); + var arg = arguments[1]; + var ctx = arguments[2]; + value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) + : tryCatch(fn).call(ctx, arg); + } else { + value = tryCatch(fn)(); + } + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.try", ret); + ret._resolveFromSyncValue(value); + return ret; +}; + +Promise.prototype._resolveFromSyncValue = function (value) { + if (value === util.errorObj) { + this._rejectCallback(value.e, false); + } else { + this._resolveCallback(value, true); + } +}; +}; + +},{"./util":21}],14:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var maybeWrapAsError = util.maybeWrapAsError; +var errors = _dereq_("./errors"); +var OperationalError = errors.OperationalError; +var es5 = _dereq_("./es5"); + +function isUntypedError(obj) { + return obj instanceof Error && + es5.getPrototypeOf(obj) === Error.prototype; +} + +var rErrorKey = /^(?:name|message|stack|cause)$/; +function wrapAsOperationalError(obj) { + var ret; + if (isUntypedError(obj)) { + ret = new OperationalError(obj); + ret.name = obj.name; + ret.message = obj.message; + ret.stack = obj.stack; + var keys = es5.keys(obj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (!rErrorKey.test(key)) { + ret[key] = obj[key]; + } + } + return ret; + } + util.markAsOriginatingFromRejection(obj); + return obj; +} + +function nodebackForPromise(promise, multiArgs) { + return function(err, value) { + if (promise === null) return; + if (err) { + var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } else if (!multiArgs) { + promise._fulfill(value); + } else { + var args = [].slice.call(arguments, 1);; + promise._fulfill(args); + } + promise = null; + }; +} + +module.exports = nodebackForPromise; + +},{"./errors":9,"./es5":10,"./util":21}],15:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function() { +var makeSelfResolutionError = function () { + return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var reflectHandler = function() { + return new Promise.PromiseInspection(this._target()); +}; +var apiRejection = function(msg) { + return Promise.reject(new TypeError(msg)); +}; +function Proxyable() {} +var UNDEFINED_BINDING = {}; +var util = _dereq_("./util"); + +var getDomain; +if (util.isNode) { + getDomain = function() { + var ret = process.domain; + if (ret === undefined) ret = null; + return ret; + }; +} else { + getDomain = function() { + return null; + }; +} +util.notEnumerableProp(Promise, "_getDomain", getDomain); + +var es5 = _dereq_("./es5"); +var Async = _dereq_("./async"); +var async = new Async(); +es5.defineProperty(Promise, "_async", {value: async}); +var errors = _dereq_("./errors"); +var TypeError = Promise.TypeError = errors.TypeError; +Promise.RangeError = errors.RangeError; +var CancellationError = Promise.CancellationError = errors.CancellationError; +Promise.TimeoutError = errors.TimeoutError; +Promise.OperationalError = errors.OperationalError; +Promise.RejectionError = errors.OperationalError; +Promise.AggregateError = errors.AggregateError; +var INTERNAL = function(){}; +var APPLY = {}; +var NEXT_FILTER = {}; +var tryConvertToPromise = _dereq_("./thenables")(Promise, INTERNAL); +var PromiseArray = + _dereq_("./promise_array")(Promise, INTERNAL, + tryConvertToPromise, apiRejection, Proxyable); +var Context = _dereq_("./context")(Promise); + /*jshint unused:false*/ +var createContext = Context.create; +var debug = _dereq_("./debuggability")(Promise, Context); +var CapturedTrace = debug.CapturedTrace; +var PassThroughHandlerContext = + _dereq_("./finally")(Promise, tryConvertToPromise); +var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); +var nodebackForPromise = _dereq_("./nodeback"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +function check(self, executor) { + if (typeof executor !== "function") { + throw new TypeError("expecting a function but got " + util.classString(executor)); + } + if (self.constructor !== Promise) { + throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } +} + +function Promise(executor) { + this._bitField = 0; + this._fulfillmentHandler0 = undefined; + this._rejectionHandler0 = undefined; + this._promise0 = undefined; + this._receiver0 = undefined; + if (executor !== INTERNAL) { + check(this, executor); + this._resolveFromExecutor(executor); + } + this._promiseCreated(); + this._fireEvent("promiseCreated", this); +} + +Promise.prototype.toString = function () { + return "[object Promise]"; +}; + +Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { + var len = arguments.length; + if (len > 1) { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (util.isObject(item)) { + catchInstances[j++] = item; + } else { + return apiRejection("expecting an object but got " + + "A catch statement predicate " + util.classString(item)); + } + } + catchInstances.length = j; + fn = arguments[i]; + return this.then(undefined, catchFilter(catchInstances, fn, this)); + } + return this.then(undefined, fn); +}; + +Promise.prototype.reflect = function () { + return this._then(reflectHandler, + reflectHandler, undefined, this, undefined); +}; + +Promise.prototype.then = function (didFulfill, didReject) { + if (debug.warnings() && arguments.length > 0 && + typeof didFulfill !== "function" && + typeof didReject !== "function") { + var msg = ".then() only accepts functions but was passed: " + + util.classString(didFulfill); + if (arguments.length > 1) { + msg += ", " + util.classString(didReject); + } + this._warn(msg); + } + return this._then(didFulfill, didReject, undefined, undefined, undefined); +}; + +Promise.prototype.done = function (didFulfill, didReject) { + var promise = + this._then(didFulfill, didReject, undefined, undefined, undefined); + promise._setIsFinal(); +}; + +Promise.prototype.spread = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + return this.all()._then(fn, undefined, undefined, APPLY, undefined); +}; + +Promise.prototype.toJSON = function () { + var ret = { + isFulfilled: false, + isRejected: false, + fulfillmentValue: undefined, + rejectionReason: undefined + }; + if (this.isFulfilled()) { + ret.fulfillmentValue = this.value(); + ret.isFulfilled = true; + } else if (this.isRejected()) { + ret.rejectionReason = this.reason(); + ret.isRejected = true; + } + return ret; +}; + +Promise.prototype.all = function () { + if (arguments.length > 0) { + this._warn(".all() was passed arguments but it does not take any"); + } + return new PromiseArray(this).promise(); +}; + +Promise.prototype.error = function (fn) { + return this.caught(util.originatesFromRejection, fn); +}; + +Promise.getNewLibraryCopy = module.exports; + +Promise.is = function (val) { + return val instanceof Promise; +}; + +Promise.fromNode = Promise.fromCallback = function(fn) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs + : false; + var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); + if (result === errorObj) { + ret._rejectCallback(result.e, true); + } + if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.all = function (promises) { + return new PromiseArray(promises).promise(); +}; + +Promise.cast = function (obj) { + var ret = tryConvertToPromise(obj); + if (!(ret instanceof Promise)) { + ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._setFulfilled(); + ret._rejectionHandler0 = obj; + } + return ret; +}; + +Promise.resolve = Promise.fulfilled = Promise.cast; + +Promise.reject = Promise.rejected = function (reason) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._rejectCallback(reason, true); + return ret; +}; + +Promise.setScheduler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + return async.setScheduler(fn); +}; + +Promise.prototype._then = function ( + didFulfill, + didReject, + _, receiver, + internalData +) { + var haveInternalData = internalData !== undefined; + var promise = haveInternalData ? internalData : new Promise(INTERNAL); + var target = this._target(); + var bitField = target._bitField; + + if (!haveInternalData) { + promise._propagateFrom(this, 3); + promise._captureStackTrace(); + if (receiver === undefined && + ((this._bitField & 2097152) !== 0)) { + if (!((bitField & 50397184) === 0)) { + receiver = this._boundValue(); + } else { + receiver = target === this ? undefined : this._boundTo; + } + } + this._fireEvent("promiseChained", this, promise); + } + + var domain = getDomain(); + if (!((bitField & 50397184) === 0)) { + var handler, value, settler = target._settlePromiseCtx; + if (((bitField & 33554432) !== 0)) { + value = target._rejectionHandler0; + handler = didFulfill; + } else if (((bitField & 16777216) !== 0)) { + value = target._fulfillmentHandler0; + handler = didReject; + target._unsetRejectionIsUnhandled(); + } else { + settler = target._settlePromiseLateCancellationObserver; + value = new CancellationError("late cancellation observer"); + target._attachExtraTrace(value); + handler = didReject; + } + + async.invoke(settler, target, { + handler: domain === null ? handler + : (typeof handler === "function" && + util.domainBind(domain, handler)), + promise: promise, + receiver: receiver, + value: value + }); + } else { + target._addCallbacks(didFulfill, didReject, promise, receiver, domain); + } + + return promise; +}; + +Promise.prototype._length = function () { + return this._bitField & 65535; +}; + +Promise.prototype._isFateSealed = function () { + return (this._bitField & 117506048) !== 0; +}; + +Promise.prototype._isFollowing = function () { + return (this._bitField & 67108864) === 67108864; +}; + +Promise.prototype._setLength = function (len) { + this._bitField = (this._bitField & -65536) | + (len & 65535); +}; + +Promise.prototype._setFulfilled = function () { + this._bitField = this._bitField | 33554432; + this._fireEvent("promiseFulfilled", this); +}; + +Promise.prototype._setRejected = function () { + this._bitField = this._bitField | 16777216; + this._fireEvent("promiseRejected", this); +}; + +Promise.prototype._setFollowing = function () { + this._bitField = this._bitField | 67108864; + this._fireEvent("promiseResolved", this); +}; + +Promise.prototype._setIsFinal = function () { + this._bitField = this._bitField | 4194304; +}; + +Promise.prototype._isFinal = function () { + return (this._bitField & 4194304) > 0; +}; + +Promise.prototype._unsetCancelled = function() { + this._bitField = this._bitField & (~65536); +}; + +Promise.prototype._setCancelled = function() { + this._bitField = this._bitField | 65536; + this._fireEvent("promiseCancelled", this); +}; + +Promise.prototype._setWillBeCancelled = function() { + this._bitField = this._bitField | 8388608; +}; + +Promise.prototype._setAsyncGuaranteed = function() { + if (async.hasCustomScheduler()) return; + this._bitField = this._bitField | 134217728; +}; + +Promise.prototype._receiverAt = function (index) { + var ret = index === 0 ? this._receiver0 : this[ + index * 4 - 4 + 3]; + if (ret === UNDEFINED_BINDING) { + return undefined; + } else if (ret === undefined && this._isBound()) { + return this._boundValue(); + } + return ret; +}; + +Promise.prototype._promiseAt = function (index) { + return this[ + index * 4 - 4 + 2]; +}; + +Promise.prototype._fulfillmentHandlerAt = function (index) { + return this[ + index * 4 - 4 + 0]; +}; + +Promise.prototype._rejectionHandlerAt = function (index) { + return this[ + index * 4 - 4 + 1]; +}; + +Promise.prototype._boundValue = function() {}; + +Promise.prototype._migrateCallback0 = function (follower) { + var bitField = follower._bitField; + var fulfill = follower._fulfillmentHandler0; + var reject = follower._rejectionHandler0; + var promise = follower._promise0; + var receiver = follower._receiverAt(0); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._migrateCallbackAt = function (follower, index) { + var fulfill = follower._fulfillmentHandlerAt(index); + var reject = follower._rejectionHandlerAt(index); + var promise = follower._promiseAt(index); + var receiver = follower._receiverAt(index); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._addCallbacks = function ( + fulfill, + reject, + promise, + receiver, + domain +) { + var index = this._length(); + + if (index >= 65535 - 4) { + index = 0; + this._setLength(0); + } + + if (index === 0) { + this._promise0 = promise; + this._receiver0 = receiver; + if (typeof fulfill === "function") { + this._fulfillmentHandler0 = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this._rejectionHandler0 = + domain === null ? reject : util.domainBind(domain, reject); + } + } else { + var base = index * 4 - 4; + this[base + 2] = promise; + this[base + 3] = receiver; + if (typeof fulfill === "function") { + this[base + 0] = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this[base + 1] = + domain === null ? reject : util.domainBind(domain, reject); + } + } + this._setLength(index + 1); + return index; +}; + +Promise.prototype._proxy = function (proxyable, arg) { + this._addCallbacks(undefined, undefined, arg, proxyable, null); +}; + +Promise.prototype._resolveCallback = function(value, shouldBind) { + if (((this._bitField & 117506048) !== 0)) return; + if (value === this) + return this._rejectCallback(makeSelfResolutionError(), false); + var maybePromise = tryConvertToPromise(value, this); + if (!(maybePromise instanceof Promise)) return this._fulfill(value); + + if (shouldBind) this._propagateFrom(maybePromise, 2); + + var promise = maybePromise._target(); + + if (promise === this) { + this._reject(makeSelfResolutionError()); + return; + } + + var bitField = promise._bitField; + if (((bitField & 50397184) === 0)) { + var len = this._length(); + if (len > 0) promise._migrateCallback0(this); + for (var i = 1; i < len; ++i) { + promise._migrateCallbackAt(this, i); + } + this._setFollowing(); + this._setLength(0); + this._setFollowee(promise); + } else if (((bitField & 33554432) !== 0)) { + this._fulfill(promise._value()); + } else if (((bitField & 16777216) !== 0)) { + this._reject(promise._reason()); + } else { + var reason = new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + this._reject(reason); + } +}; + +Promise.prototype._rejectCallback = +function(reason, synchronous, ignoreNonErrorWarnings) { + var trace = util.ensureErrorObject(reason); + var hasStack = trace === reason; + if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { + var message = "a promise was rejected with a non-error: " + + util.classString(reason); + this._warn(message, true); + } + this._attachExtraTrace(trace, synchronous ? hasStack : false); + this._reject(reason); +}; + +Promise.prototype._resolveFromExecutor = function (executor) { + var promise = this; + this._captureStackTrace(); + this._pushContext(); + var synchronous = true; + var r = this._execute(executor, function(value) { + promise._resolveCallback(value); + }, function (reason) { + promise._rejectCallback(reason, synchronous); + }); + synchronous = false; + this._popContext(); + + if (r !== undefined) { + promise._rejectCallback(r, true); + } +}; + +Promise.prototype._settlePromiseFromHandler = function ( + handler, receiver, value, promise +) { + var bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + promise._pushContext(); + var x; + if (receiver === APPLY) { + if (!value || typeof value.length !== "number") { + x = errorObj; + x.e = new TypeError("cannot .spread() a non-array: " + + util.classString(value)); + } else { + x = tryCatch(handler).apply(this._boundValue(), value); + } + } else { + x = tryCatch(handler).call(receiver, value); + } + var promiseCreated = promise._popContext(); + bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + + if (x === NEXT_FILTER) { + promise._reject(value); + } else if (x === errorObj) { + promise._rejectCallback(x.e, false); + } else { + debug.checkForgottenReturns(x, promiseCreated, "", promise, this); + promise._resolveCallback(x); + } +}; + +Promise.prototype._target = function() { + var ret = this; + while (ret._isFollowing()) ret = ret._followee(); + return ret; +}; + +Promise.prototype._followee = function() { + return this._rejectionHandler0; +}; + +Promise.prototype._setFollowee = function(promise) { + this._rejectionHandler0 = promise; +}; + +Promise.prototype._settlePromise = function(promise, handler, receiver, value) { + var isPromise = promise instanceof Promise; + var bitField = this._bitField; + var asyncGuaranteed = ((bitField & 134217728) !== 0); + if (((bitField & 65536) !== 0)) { + if (isPromise) promise._invokeInternalOnCancel(); + + if (receiver instanceof PassThroughHandlerContext && + receiver.isFinallyHandler()) { + receiver.cancelPromise = promise; + if (tryCatch(handler).call(receiver, value) === errorObj) { + promise._reject(errorObj.e); + } + } else if (handler === reflectHandler) { + promise._fulfill(reflectHandler.call(receiver)); + } else if (receiver instanceof Proxyable) { + receiver._promiseCancelled(promise); + } else if (isPromise || promise instanceof PromiseArray) { + promise._cancel(); + } else { + receiver.cancel(); + } + } else if (typeof handler === "function") { + if (!isPromise) { + handler.call(receiver, value, promise); + } else { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (receiver instanceof Proxyable) { + if (!receiver._isResolved()) { + if (((bitField & 33554432) !== 0)) { + receiver._promiseFulfilled(value, promise); + } else { + receiver._promiseRejected(value, promise); + } + } + } else if (isPromise) { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + if (((bitField & 33554432) !== 0)) { + promise._fulfill(value); + } else { + promise._reject(value); + } + } +}; + +Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { + var handler = ctx.handler; + var promise = ctx.promise; + var receiver = ctx.receiver; + var value = ctx.value; + if (typeof handler === "function") { + if (!(promise instanceof Promise)) { + handler.call(receiver, value, promise); + } else { + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (promise instanceof Promise) { + promise._reject(value); + } +}; + +Promise.prototype._settlePromiseCtx = function(ctx) { + this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); +}; + +Promise.prototype._settlePromise0 = function(handler, value, bitField) { + var promise = this._promise0; + var receiver = this._receiverAt(0); + this._promise0 = undefined; + this._receiver0 = undefined; + this._settlePromise(promise, handler, receiver, value); +}; + +Promise.prototype._clearCallbackDataAtIndex = function(index) { + var base = index * 4 - 4; + this[base + 2] = + this[base + 3] = + this[base + 0] = + this[base + 1] = undefined; +}; + +Promise.prototype._fulfill = function (value) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + if (value === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._reject(err); + } + this._setFulfilled(); + this._rejectionHandler0 = value; + + if ((bitField & 65535) > 0) { + if (((bitField & 134217728) !== 0)) { + this._settlePromises(); + } else { + async.settlePromises(this); + } + } +}; + +Promise.prototype._reject = function (reason) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + this._setRejected(); + this._fulfillmentHandler0 = reason; + + if (this._isFinal()) { + return async.fatalError(reason, util.isNode); + } + + if ((bitField & 65535) > 0) { + async.settlePromises(this); + } else { + this._ensurePossibleRejectionHandled(); + } +}; + +Promise.prototype._fulfillPromises = function (len, value) { + for (var i = 1; i < len; i++) { + var handler = this._fulfillmentHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, value); + } +}; + +Promise.prototype._rejectPromises = function (len, reason) { + for (var i = 1; i < len; i++) { + var handler = this._rejectionHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, reason); + } +}; + +Promise.prototype._settlePromises = function () { + var bitField = this._bitField; + var len = (bitField & 65535); + + if (len > 0) { + if (((bitField & 16842752) !== 0)) { + var reason = this._fulfillmentHandler0; + this._settlePromise0(this._rejectionHandler0, reason, bitField); + this._rejectPromises(len, reason); + } else { + var value = this._rejectionHandler0; + this._settlePromise0(this._fulfillmentHandler0, value, bitField); + this._fulfillPromises(len, value); + } + this._setLength(0); + } + this._clearCancellationData(); +}; + +Promise.prototype._settledValue = function() { + var bitField = this._bitField; + if (((bitField & 33554432) !== 0)) { + return this._rejectionHandler0; + } else if (((bitField & 16777216) !== 0)) { + return this._fulfillmentHandler0; + } +}; + +function deferResolve(v) {this.promise._resolveCallback(v);} +function deferReject(v) {this.promise._rejectCallback(v, false);} + +Promise.defer = Promise.pending = function() { + debug.deprecated("Promise.defer", "new Promise"); + var promise = new Promise(INTERNAL); + return { + promise: promise, + resolve: deferResolve, + reject: deferReject + }; +}; + +util.notEnumerableProp(Promise, + "_makeSelfResolutionError", + makeSelfResolutionError); + +_dereq_("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, + debug); +_dereq_("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); +_dereq_("./cancel")(Promise, PromiseArray, apiRejection, debug); +_dereq_("./direct_resolve")(Promise); +_dereq_("./synchronous_inspection")(Promise); +_dereq_("./join")( + Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain); +Promise.Promise = Promise; +Promise.version = "3.4.7"; + + util.toFastProperties(Promise); + util.toFastProperties(Promise.prototype); + function fillTypes(value) { + var p = new Promise(INTERNAL); + p._fulfillmentHandler0 = value; + p._rejectionHandler0 = value; + p._promise0 = value; + p._receiver0 = value; + } + // Complete slack tracking, opt out of field-type tracking and + // stabilize map + fillTypes({a: 1}); + fillTypes({b: 2}); + fillTypes({c: 3}); + fillTypes(1); + fillTypes(function(){}); + fillTypes(undefined); + fillTypes(false); + fillTypes(new Promise(INTERNAL)); + debug.setBounds(Async.firstLineError, util.lastLineError); + return Promise; + +}; + +},{"./async":1,"./bind":2,"./cancel":4,"./catch_filter":5,"./context":6,"./debuggability":7,"./direct_resolve":8,"./errors":9,"./es5":10,"./finally":11,"./join":12,"./method":13,"./nodeback":14,"./promise_array":16,"./synchronous_inspection":19,"./thenables":20,"./util":21}],16:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, + apiRejection, Proxyable) { +var util = _dereq_("./util"); +var isArray = util.isArray; + +function toResolutionValue(val) { + switch(val) { + case -2: return []; + case -3: return {}; + } +} + +function PromiseArray(values) { + var promise = this._promise = new Promise(INTERNAL); + if (values instanceof Promise) { + promise._propagateFrom(values, 3); + } + promise._setOnCancel(this); + this._values = values; + this._length = 0; + this._totalResolved = 0; + this._init(undefined, -2); +} +util.inherits(PromiseArray, Proxyable); + +PromiseArray.prototype.length = function () { + return this._length; +}; + +PromiseArray.prototype.promise = function () { + return this._promise; +}; + +PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { + var values = tryConvertToPromise(this._values, this._promise); + if (values instanceof Promise) { + values = values._target(); + var bitField = values._bitField; + ; + this._values = values; + + if (((bitField & 50397184) === 0)) { + this._promise._setAsyncGuaranteed(); + return values._then( + init, + this._reject, + undefined, + this, + resolveValueIfEmpty + ); + } else if (((bitField & 33554432) !== 0)) { + values = values._value(); + } else if (((bitField & 16777216) !== 0)) { + return this._reject(values._reason()); + } else { + return this._cancel(); + } + } + values = util.asArray(values); + if (values === null) { + var err = apiRejection( + "expecting an array or an iterable object but got " + util.classString(values)).reason(); + this._promise._rejectCallback(err, false); + return; + } + + if (values.length === 0) { + if (resolveValueIfEmpty === -5) { + this._resolveEmptyArray(); + } + else { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + } + return; + } + this._iterate(values); +}; + +PromiseArray.prototype._iterate = function(values) { + var len = this.getActualLength(values.length); + this._length = len; + this._values = this.shouldCopyValues() ? new Array(len) : this._values; + var result = this._promise; + var isResolved = false; + var bitField = null; + for (var i = 0; i < len; ++i) { + var maybePromise = tryConvertToPromise(values[i], result); + + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + bitField = maybePromise._bitField; + } else { + bitField = null; + } + + if (isResolved) { + if (bitField !== null) { + maybePromise.suppressUnhandledRejections(); + } + } else if (bitField !== null) { + if (((bitField & 50397184) === 0)) { + maybePromise._proxy(this, i); + this._values[i] = maybePromise; + } else if (((bitField & 33554432) !== 0)) { + isResolved = this._promiseFulfilled(maybePromise._value(), i); + } else if (((bitField & 16777216) !== 0)) { + isResolved = this._promiseRejected(maybePromise._reason(), i); + } else { + isResolved = this._promiseCancelled(i); + } + } else { + isResolved = this._promiseFulfilled(maybePromise, i); + } + } + if (!isResolved) result._setAsyncGuaranteed(); +}; + +PromiseArray.prototype._isResolved = function () { + return this._values === null; +}; + +PromiseArray.prototype._resolve = function (value) { + this._values = null; + this._promise._fulfill(value); +}; + +PromiseArray.prototype._cancel = function() { + if (this._isResolved() || !this._promise._isCancellable()) return; + this._values = null; + this._promise._cancel(); +}; + +PromiseArray.prototype._reject = function (reason) { + this._values = null; + this._promise._rejectCallback(reason, false); +}; + +PromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +PromiseArray.prototype._promiseCancelled = function() { + this._cancel(); + return true; +}; + +PromiseArray.prototype._promiseRejected = function (reason) { + this._totalResolved++; + this._reject(reason); + return true; +}; + +PromiseArray.prototype._resultCancelled = function() { + if (this._isResolved()) return; + var values = this._values; + this._cancel(); + if (values instanceof Promise) { + values.cancel(); + } else { + for (var i = 0; i < values.length; ++i) { + if (values[i] instanceof Promise) { + values[i].cancel(); + } + } + } +}; + +PromiseArray.prototype.shouldCopyValues = function () { + return true; +}; + +PromiseArray.prototype.getActualLength = function (len) { + return len; +}; + +return PromiseArray; +}; + +},{"./util":21}],17:[function(_dereq_,module,exports){ +"use strict"; +function arrayMove(src, srcIndex, dst, dstIndex, len) { + for (var j = 0; j < len; ++j) { + dst[j + dstIndex] = src[j + srcIndex]; + src[j + srcIndex] = void 0; + } +} + +function Queue(capacity) { + this._capacity = capacity; + this._length = 0; + this._front = 0; +} + +Queue.prototype._willBeOverCapacity = function (size) { + return this._capacity < size; +}; + +Queue.prototype._pushOne = function (arg) { + var length = this.length(); + this._checkCapacity(length + 1); + var i = (this._front + length) & (this._capacity - 1); + this[i] = arg; + this._length = length + 1; +}; + +Queue.prototype.push = function (fn, receiver, arg) { + var length = this.length() + 3; + if (this._willBeOverCapacity(length)) { + this._pushOne(fn); + this._pushOne(receiver); + this._pushOne(arg); + return; + } + var j = this._front + length - 3; + this._checkCapacity(length); + var wrapMask = this._capacity - 1; + this[(j + 0) & wrapMask] = fn; + this[(j + 1) & wrapMask] = receiver; + this[(j + 2) & wrapMask] = arg; + this._length = length; +}; + +Queue.prototype.shift = function () { + var front = this._front, + ret = this[front]; + + this[front] = undefined; + this._front = (front + 1) & (this._capacity - 1); + this._length--; + return ret; +}; + +Queue.prototype.length = function () { + return this._length; +}; + +Queue.prototype._checkCapacity = function (size) { + if (this._capacity < size) { + this._resizeTo(this._capacity << 1); + } +}; + +Queue.prototype._resizeTo = function (capacity) { + var oldCapacity = this._capacity; + this._capacity = capacity; + var front = this._front; + var length = this._length; + var moveItemsCount = (front + length) & (oldCapacity - 1); + arrayMove(this, 0, this, oldCapacity, moveItemsCount); +}; + +module.exports = Queue; + +},{}],18:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var schedule; +var noAsyncScheduler = function() { + throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var NativePromise = util.getNativePromise(); +if (util.isNode && typeof MutationObserver === "undefined") { + var GlobalSetImmediate = global.setImmediate; + var ProcessNextTick = process.nextTick; + schedule = util.isRecentNode + ? function(fn) { GlobalSetImmediate.call(global, fn); } + : function(fn) { ProcessNextTick.call(process, fn); }; +} else if (typeof NativePromise === "function" && + typeof NativePromise.resolve === "function") { + var nativePromise = NativePromise.resolve(); + schedule = function(fn) { + nativePromise.then(fn); + }; +} else if ((typeof MutationObserver !== "undefined") && + !(typeof window !== "undefined" && + window.navigator && + (window.navigator.standalone || window.cordova))) { + schedule = (function() { + var div = document.createElement("div"); + var opts = {attributes: true}; + var toggleScheduled = false; + var div2 = document.createElement("div"); + var o2 = new MutationObserver(function() { + div.classList.toggle("foo"); + toggleScheduled = false; + }); + o2.observe(div2, opts); + + var scheduleToggle = function() { + if (toggleScheduled) return; + toggleScheduled = true; + div2.classList.toggle("foo"); + }; + + return function schedule(fn) { + var o = new MutationObserver(function() { + o.disconnect(); + fn(); + }); + o.observe(div, opts); + scheduleToggle(); + }; + })(); +} else if (typeof setImmediate !== "undefined") { + schedule = function (fn) { + setImmediate(fn); + }; +} else if (typeof setTimeout !== "undefined") { + schedule = function (fn) { + setTimeout(fn, 0); + }; +} else { + schedule = noAsyncScheduler; +} +module.exports = schedule; + +},{"./util":21}],19:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function PromiseInspection(promise) { + if (promise !== undefined) { + promise = promise._target(); + this._bitField = promise._bitField; + this._settledValueField = promise._isFateSealed() + ? promise._settledValue() : undefined; + } + else { + this._bitField = 0; + this._settledValueField = undefined; + } +} + +PromiseInspection.prototype._settledValue = function() { + return this._settledValueField; +}; + +var value = PromiseInspection.prototype.value = function () { + if (!this.isFulfilled()) { + throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var reason = PromiseInspection.prototype.error = +PromiseInspection.prototype.reason = function () { + if (!this.isRejected()) { + throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { + return (this._bitField & 33554432) !== 0; +}; + +var isRejected = PromiseInspection.prototype.isRejected = function () { + return (this._bitField & 16777216) !== 0; +}; + +var isPending = PromiseInspection.prototype.isPending = function () { + return (this._bitField & 50397184) === 0; +}; + +var isResolved = PromiseInspection.prototype.isResolved = function () { + return (this._bitField & 50331648) !== 0; +}; + +PromiseInspection.prototype.isCancelled = function() { + return (this._bitField & 8454144) !== 0; +}; + +Promise.prototype.__isCancelled = function() { + return (this._bitField & 65536) === 65536; +}; + +Promise.prototype._isCancelled = function() { + return this._target().__isCancelled(); +}; + +Promise.prototype.isCancelled = function() { + return (this._target()._bitField & 8454144) !== 0; +}; + +Promise.prototype.isPending = function() { + return isPending.call(this._target()); +}; + +Promise.prototype.isRejected = function() { + return isRejected.call(this._target()); +}; + +Promise.prototype.isFulfilled = function() { + return isFulfilled.call(this._target()); +}; + +Promise.prototype.isResolved = function() { + return isResolved.call(this._target()); +}; + +Promise.prototype.value = function() { + return value.call(this._target()); +}; + +Promise.prototype.reason = function() { + var target = this._target(); + target._unsetRejectionIsUnhandled(); + return reason.call(target); +}; + +Promise.prototype._value = function() { + return this._settledValue(); +}; + +Promise.prototype._reason = function() { + this._unsetRejectionIsUnhandled(); + return this._settledValue(); +}; + +Promise.PromiseInspection = PromiseInspection; +}; + +},{}],20:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var util = _dereq_("./util"); +var errorObj = util.errorObj; +var isObject = util.isObject; + +function tryConvertToPromise(obj, context) { + if (isObject(obj)) { + if (obj instanceof Promise) return obj; + var then = getThen(obj); + if (then === errorObj) { + if (context) context._pushContext(); + var ret = Promise.reject(then.e); + if (context) context._popContext(); + return ret; + } else if (typeof then === "function") { + if (isAnyBluebirdPromise(obj)) { + var ret = new Promise(INTERNAL); + obj._then( + ret._fulfill, + ret._reject, + undefined, + ret, + null + ); + return ret; + } + return doThenable(obj, then, context); + } + } + return obj; +} + +function doGetThen(obj) { + return obj.then; +} + +function getThen(obj) { + try { + return doGetThen(obj); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} + +var hasProp = {}.hasOwnProperty; +function isAnyBluebirdPromise(obj) { + try { + return hasProp.call(obj, "_promise0"); + } catch (e) { + return false; + } +} + +function doThenable(x, then, context) { + var promise = new Promise(INTERNAL); + var ret = promise; + if (context) context._pushContext(); + promise._captureStackTrace(); + if (context) context._popContext(); + var synchronous = true; + var result = util.tryCatch(then).call(x, resolve, reject); + synchronous = false; + + if (promise && result === errorObj) { + promise._rejectCallback(result.e, true, true); + promise = null; + } + + function resolve(value) { + if (!promise) return; + promise._resolveCallback(value); + promise = null; + } + + function reject(reason) { + if (!promise) return; + promise._rejectCallback(reason, synchronous, true); + promise = null; + } + return ret; +} + +return tryConvertToPromise; +}; + +},{"./util":21}],21:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var canEvaluate = typeof navigator == "undefined"; + +var errorObj = {e: {}}; +var tryCatchTarget; +var globalObject = typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : + typeof global !== "undefined" ? global : + this !== undefined ? this : null; + +function tryCatcher() { + try { + var target = tryCatchTarget; + tryCatchTarget = null; + return target.apply(this, arguments); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} +function tryCatch(fn) { + tryCatchTarget = fn; + return tryCatcher; +} + +var inherits = function(Child, Parent) { + var hasProp = {}.hasOwnProperty; + + function T() { + this.constructor = Child; + this.constructor$ = Parent; + for (var propertyName in Parent.prototype) { + if (hasProp.call(Parent.prototype, propertyName) && + propertyName.charAt(propertyName.length-1) !== "$" + ) { + this[propertyName + "$"] = Parent.prototype[propertyName]; + } + } + } + T.prototype = Parent.prototype; + Child.prototype = new T(); + return Child.prototype; +}; + + +function isPrimitive(val) { + return val == null || val === true || val === false || + typeof val === "string" || typeof val === "number"; + +} + +function isObject(value) { + return typeof value === "function" || + typeof value === "object" && value !== null; +} + +function maybeWrapAsError(maybeError) { + if (!isPrimitive(maybeError)) return maybeError; + + return new Error(safeToString(maybeError)); +} + +function withAppended(target, appendee) { + var len = target.length; + var ret = new Array(len + 1); + var i; + for (i = 0; i < len; ++i) { + ret[i] = target[i]; + } + ret[i] = appendee; + return ret; +} + +function getDataPropertyOrDefault(obj, key, defaultValue) { + if (es5.isES5) { + var desc = Object.getOwnPropertyDescriptor(obj, key); + + if (desc != null) { + return desc.get == null && desc.set == null + ? desc.value + : defaultValue; + } + } else { + return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; + } +} + +function notEnumerableProp(obj, name, value) { + if (isPrimitive(obj)) return obj; + var descriptor = { + value: value, + configurable: true, + enumerable: false, + writable: true + }; + es5.defineProperty(obj, name, descriptor); + return obj; +} + +function thrower(r) { + throw r; +} + +var inheritedDataKeys = (function() { + var excludedPrototypes = [ + Array.prototype, + Object.prototype, + Function.prototype + ]; + + var isExcludedProto = function(val) { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (excludedPrototypes[i] === val) { + return true; + } + } + return false; + }; + + if (es5.isES5) { + var getKeys = Object.getOwnPropertyNames; + return function(obj) { + var ret = []; + var visitedKeys = Object.create(null); + while (obj != null && !isExcludedProto(obj)) { + var keys; + try { + keys = getKeys(obj); + } catch (e) { + return ret; + } + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (visitedKeys[key]) continue; + visitedKeys[key] = true; + var desc = Object.getOwnPropertyDescriptor(obj, key); + if (desc != null && desc.get == null && desc.set == null) { + ret.push(key); + } + } + obj = es5.getPrototypeOf(obj); + } + return ret; + }; + } else { + var hasProp = {}.hasOwnProperty; + return function(obj) { + if (isExcludedProto(obj)) return []; + var ret = []; + + /*jshint forin:false */ + enumeration: for (var key in obj) { + if (hasProp.call(obj, key)) { + ret.push(key); + } else { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (hasProp.call(excludedPrototypes[i], key)) { + continue enumeration; + } + } + ret.push(key); + } + } + return ret; + }; + } + +})(); + +var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; +function isClass(fn) { + try { + if (typeof fn === "function") { + var keys = es5.names(fn.prototype); + + var hasMethods = es5.isES5 && keys.length > 1; + var hasMethodsOtherThanConstructor = keys.length > 0 && + !(keys.length === 1 && keys[0] === "constructor"); + var hasThisAssignmentAndStaticMethods = + thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; + + if (hasMethods || hasMethodsOtherThanConstructor || + hasThisAssignmentAndStaticMethods) { + return true; + } + } + return false; + } catch (e) { + return false; + } +} + +function toFastProperties(obj) { + /*jshint -W027,-W055,-W031*/ + function FakeConstructor() {} + FakeConstructor.prototype = obj; + var l = 8; + while (l--) new FakeConstructor(); + return obj; + eval(obj); +} + +var rident = /^[a-z$_][a-z$_0-9]*$/i; +function isIdentifier(str) { + return rident.test(str); +} + +function filledRange(count, prefix, suffix) { + var ret = new Array(count); + for(var i = 0; i < count; ++i) { + ret[i] = prefix + i + suffix; + } + return ret; +} + +function safeToString(obj) { + try { + return obj + ""; + } catch (e) { + return "[no string representation]"; + } +} + +function isError(obj) { + return obj !== null && + typeof obj === "object" && + typeof obj.message === "string" && + typeof obj.name === "string"; +} + +function markAsOriginatingFromRejection(e) { + try { + notEnumerableProp(e, "isOperational", true); + } + catch(ignore) {} +} + +function originatesFromRejection(e) { + if (e == null) return false; + return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || + e["isOperational"] === true); +} + +function canAttachTrace(obj) { + return isError(obj) && es5.propertyIsWritable(obj, "stack"); +} + +var ensureErrorObject = (function() { + if (!("stack" in new Error())) { + return function(value) { + if (canAttachTrace(value)) return value; + try {throw new Error(safeToString(value));} + catch(err) {return err;} + }; + } else { + return function(value) { + if (canAttachTrace(value)) return value; + return new Error(safeToString(value)); + }; + } +})(); + +function classString(obj) { + return {}.toString.call(obj); +} + +function copyDescriptors(from, to, filter) { + var keys = es5.names(from); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (filter(key)) { + try { + es5.defineProperty(to, key, es5.getDescriptor(from, key)); + } catch (ignore) {} + } + } +} + +var asArray = function(v) { + if (es5.isArray(v)) { + return v; + } + return null; +}; + +if (typeof Symbol !== "undefined" && Symbol.iterator) { + var ArrayFrom = typeof Array.from === "function" ? function(v) { + return Array.from(v); + } : function(v) { + var ret = []; + var it = v[Symbol.iterator](); + var itResult; + while (!((itResult = it.next()).done)) { + ret.push(itResult.value); + } + return ret; + }; + + asArray = function(v) { + if (es5.isArray(v)) { + return v; + } else if (v != null && typeof v[Symbol.iterator] === "function") { + return ArrayFrom(v); + } + return null; + }; +} + +var isNode = typeof process !== "undefined" && + classString(process).toLowerCase() === "[object process]"; + +var hasEnvVariables = typeof process !== "undefined" && + typeof process.env !== "undefined"; + +function env(key) { + return hasEnvVariables ? process.env[key] : undefined; +} + +function getNativePromise() { + if (typeof Promise === "function") { + try { + var promise = new Promise(function(){}); + if ({}.toString.call(promise) === "[object Promise]") { + return Promise; + } + } catch (e) {} + } +} + +function domainBind(self, cb) { + return self.bind(cb); +} + +var ret = { + isClass: isClass, + isIdentifier: isIdentifier, + inheritedDataKeys: inheritedDataKeys, + getDataPropertyOrDefault: getDataPropertyOrDefault, + thrower: thrower, + isArray: es5.isArray, + asArray: asArray, + notEnumerableProp: notEnumerableProp, + isPrimitive: isPrimitive, + isObject: isObject, + isError: isError, + canEvaluate: canEvaluate, + errorObj: errorObj, + tryCatch: tryCatch, + inherits: inherits, + withAppended: withAppended, + maybeWrapAsError: maybeWrapAsError, + toFastProperties: toFastProperties, + filledRange: filledRange, + toString: safeToString, + canAttachTrace: canAttachTrace, + ensureErrorObject: ensureErrorObject, + originatesFromRejection: originatesFromRejection, + markAsOriginatingFromRejection: markAsOriginatingFromRejection, + classString: classString, + copyDescriptors: copyDescriptors, + hasDevTools: typeof chrome !== "undefined" && chrome && + typeof chrome.loadTimes === "function", + isNode: isNode, + hasEnvVariables: hasEnvVariables, + env: env, + global: globalObject, + getNativePromise: getNativePromise, + domainBind: domainBind +}; +ret.isRecentNode = ret.isNode && (function() { + var version = process.versions.node.split(".").map(Number); + return (version[0] === 0 && version[1] > 10) || (version[0] > 0); +})(); + +if (ret.isNode) ret.toFastProperties(process); + +try {throw new Error(); } catch (e) {ret.lastLineError = e;} +module.exports = ret; + +},{"./es5":10}]},{},[3])(3) +}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; } \ No newline at end of file diff --git a/node_backend/node_modules/bluebird/js/browser/bluebird.core.min.js b/node_backend/node_modules/bluebird/js/browser/bluebird.core.min.js new file mode 100644 index 0000000000000000000000000000000000000000..84bc422c93a70e5a82d26defb60e2315dfcf3e33 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/browser/bluebird.core.min.js @@ -0,0 +1,31 @@ +/* @preserve + * The MIT License (MIT) + * + * Copyright (c) 2013-2015 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +/** + * bluebird build version 3.4.7 + * Features enabled: core + * Features disabled: race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each +*/ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.Promise=t()}}(function(){var t,e,n;return function r(t,e,n){function i(a,s){if(!e[a]){if(!t[a]){var c="function"==typeof _dereq_&&_dereq_;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var u=e[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return i(n?n:e)},u,u.exports,r,t,e,n)}return e[a].exports}for(var o="function"==typeof _dereq_&&_dereq_,a=0;a0;){var e=t.shift();if("function"==typeof e){var n=t.shift(),r=t.shift();e.call(n,r)}else e._settlePromises()}},r.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,this._drainQueue(this._lateQueue)},r.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},r.prototype._reset=function(){this._isTickUsed=!1},e.exports=r,e.exports.firstLineError=s},{"./queue":17,"./schedule":18,"./util":21}],2:[function(t,e,n){"use strict";e.exports=function(t,e,n,r){var i=!1,o=function(t,e){this._reject(e)},a=function(t,e){e.promiseRejectionQueued=!0,e.bindingPromise._then(o,o,null,this,t)},s=function(t,e){0===(50397184&this._bitField)&&this._resolveCallback(e.target)},c=function(t,e){e.promiseRejectionQueued||this._reject(t)};t.prototype.bind=function(o){i||(i=!0,t.prototype._propagateFrom=r.propagateFromFunction(),t.prototype._boundValue=r.boundValueFunction());var l=n(o),u=new t(e);u._propagateFrom(this,1);var p=this._target();if(u._setBoundTo(l),l instanceof t){var f={promiseRejectionQueued:!1,promise:u,target:p,bindingPromise:l};p._then(e,a,void 0,u,f),l._then(s,c,void 0,u,f),u._setOnCancel(l)}else u._resolveCallback(p);return u},t.prototype._setBoundTo=function(t){void 0!==t?(this._bitField=2097152|this._bitField,this._boundTo=t):this._bitField=-2097153&this._bitField},t.prototype._isBound=function(){return 2097152===(2097152&this._bitField)},t.bind=function(e,n){return t.resolve(n).bind(e)}}},{}],3:[function(t,e,n){"use strict";function r(){try{Promise===o&&(Promise=i)}catch(t){}return o}var i;"undefined"!=typeof Promise&&(i=Promise);var o=t("./promise")();o.noConflict=r,e.exports=o},{"./promise":15}],4:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){var o=t("./util"),a=o.tryCatch,s=o.errorObj,c=e._async;e.prototype["break"]=e.prototype.cancel=function(){if(!i.cancellation())return this._warn("cancellation is disabled");for(var t=this,e=t;t._isCancellable();){if(!t._cancelBy(e)){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}var n=t._cancellationParent;if(null==n||!n._isCancellable()){t._isFollowing()?t._followee().cancel():t._cancelBranched();break}t._isFollowing()&&t._followee().cancel(),t._setWillBeCancelled(),e=t,t=n}},e.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},e.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},e.prototype._cancelBy=function(t){return t===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),this._enoughBranchesHaveCancelled()?(this._invokeOnCancel(),!0):!1)},e.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},e.prototype._cancel=function(){this._isCancellable()&&(this._setCancelled(),c.invoke(this._cancelPromises,this,void 0))},e.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},e.prototype._unsetOnCancel=function(){this._onCancelField=void 0},e.prototype._isCancellable=function(){return this.isPending()&&!this._isCancelled()},e.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},e.prototype._doInvokeOnCancel=function(t,e){if(o.isArray(t))for(var n=0;n=0?o[t]:void 0}var i=!1,o=[];return t.prototype._promiseCreated=function(){},t.prototype._pushContext=function(){},t.prototype._popContext=function(){return null},t._peekContext=t.prototype._peekContext=function(){},e.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,o.push(this._trace))},e.prototype._popContext=function(){if(void 0!==this._trace){var t=o.pop(),e=t._promiseCreated;return t._promiseCreated=null,e}return null},e.CapturedTrace=null,e.create=n,e.deactivateLongStackTraces=function(){},e.activateLongStackTraces=function(){var n=t.prototype._pushContext,o=t.prototype._popContext,a=t._peekContext,s=t.prototype._peekContext,c=t.prototype._promiseCreated;e.deactivateLongStackTraces=function(){t.prototype._pushContext=n,t.prototype._popContext=o,t._peekContext=a,t.prototype._peekContext=s,t.prototype._promiseCreated=c,i=!1},i=!0,t.prototype._pushContext=e.prototype._pushContext,t.prototype._popContext=e.prototype._popContext,t._peekContext=t.prototype._peekContext=r,t.prototype._promiseCreated=function(){var t=this._peekContext();t&&null==t._promiseCreated&&(t._promiseCreated=this)}},e}},{}],7:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,e){return{promise:e}}function i(){return!1}function o(t,e,n){var r=this;try{t(e,n,function(t){if("function"!=typeof t)throw new TypeError("onCancel must be a function, got: "+I.toString(t));r._attachCancellationCallback(t)})}catch(i){return i}}function a(t){if(!this._isCancellable())return this;var e=this._onCancel();void 0!==e?I.isArray(e)?e.push(t):this._setOnCancel([e,t]):this._setOnCancel(t)}function s(){return this._onCancelField}function c(t){this._onCancelField=t}function l(){this._cancellationParent=void 0,this._onCancelField=void 0}function u(t,e){if(0!==(1&e)){this._cancellationParent=t;var n=t._branchesRemainingToCancel;void 0===n&&(n=0),t._branchesRemainingToCancel=n+1}0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function p(t,e){0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function f(){var t=this._boundTo;return void 0!==t&&t instanceof e?t.isFulfilled()?t.value():void 0:t}function h(){this._trace=new x(this._peekContext())}function _(t,e){if(H(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._parent),void 0!==n)n.attachExtraTrace(t);else if(!t.__stackCleaned__){var r=E(t);I.notEnumerableProp(t,"stack",r.message+"\n"+r.stack.join("\n")),I.notEnumerableProp(t,"__stackCleaned__",!0)}}}function d(t,e,n,r,i){if(void 0===t&&null!==e&&X){if(void 0!==i&&i._returnedNonUndefined())return;if(0===(65535&r._bitField))return;n&&(n+=" ");var o="",a="";if(e._trace){for(var s=e._trace.stack.split("\n"),c=C(s),l=c.length-1;l>=0;--l){var u=c[l];if(!V.test(u)){var p=u.match(Q);p&&(o="at "+p[1]+":"+p[2]+":"+p[3]+" ");break}}if(c.length>0)for(var f=c[0],l=0;l0&&(a="\n"+s[l-1]);break}}var h="a promise was created in a "+n+"handler "+o+"but was not returned from it, see http://goo.gl/rRqMUw"+a;r._warn(h,!0,e)}}function v(t,e){var n=t+" is deprecated and will be removed in a future version.";return e&&(n+=" Use "+e+" instead."),y(n)}function y(t,n,r){if(ot.warnings){var i,o=new U(t);if(n)r._attachExtraTrace(o);else if(ot.longStackTraces&&(i=e._peekContext()))i.attachExtraTrace(o);else{var a=E(o);o.stack=a.message+"\n"+a.stack.join("\n")}tt("warning",o)||k(o,"",!0)}}function g(t,e){for(var n=0;n=0;--s)if(r[s]===o){a=s;break}for(var s=a;s>=0;--s){var c=r[s];if(e[i]!==c)break;e.pop(),i--}e=r}}function C(t){for(var e=[],n=0;n0&&"SyntaxError"!=t.name&&(e=e.slice(n)),e}function E(t){var e=t.stack,n=t.toString();return e="string"==typeof e&&e.length>0?w(t):[" (No stack trace)"],{message:n,stack:"SyntaxError"==t.name?e:C(e)}}function k(t,e,n){if("undefined"!=typeof console){var r;if(I.isObject(t)){var i=t.stack;r=e+G(i,t)}else r=e+String(t);"function"==typeof L?L(r,n):("function"==typeof console.log||"object"==typeof console.log)&&console.log(r)}}function j(t,e,n,r){var i=!1;try{"function"==typeof e&&(i=!0,"rejectionHandled"===t?e(r):e(n,r))}catch(o){B.throwLater(o)}"unhandledRejection"===t?tt(t,n,r)||i||k(n,"Unhandled rejection "):tt(t,r)}function F(t){var e;if("function"==typeof t)e="[function "+(t.name||"anonymous")+"]";else{e=t&&"function"==typeof t.toString?t.toString():I.toString(t);var n=/\[object [a-zA-Z0-9$_]+\]/;if(n.test(e))try{var r=JSON.stringify(t);e=r}catch(i){}0===e.length&&(e="(empty array)")}return"(<"+T(e)+">, no stack trace)"}function T(t){var e=41;return t.lengtha||0>s||!n||!r||n!==r||a>=s||(nt=function(t){if(D.test(t))return!0;var e=R(t);return e&&e.fileName===n&&a<=e.line&&e.line<=s?!0:!1})}}function x(t){this._parent=t,this._promisesCreated=0;var e=this._length=1+(void 0===t?0:t._length);it(this,x),e>32&&this.uncycle()}var O,A,L,N=e._getDomain,B=e._async,U=t("./errors").Warning,I=t("./util"),H=I.canAttachTrace,D=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,V=/\((?:timers\.js):\d+:\d+\)/,Q=/[\/<\(](.+?):(\d+):(\d+)\)?\s*$/,q=null,G=null,M=!1,W=!(0==I.env("BLUEBIRD_DEBUG")||!I.env("BLUEBIRD_DEBUG")&&"development"!==I.env("NODE_ENV")),$=!(0==I.env("BLUEBIRD_WARNINGS")||!W&&!I.env("BLUEBIRD_WARNINGS")),z=!(0==I.env("BLUEBIRD_LONG_STACK_TRACES")||!W&&!I.env("BLUEBIRD_LONG_STACK_TRACES")),X=0!=I.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&($||!!I.env("BLUEBIRD_W_FORGOTTEN_RETURN"));e.prototype.suppressUnhandledRejections=function(){var t=this._target();t._bitField=-1048577&t._bitField|524288},e.prototype._ensurePossibleRejectionHandled=function(){0===(524288&this._bitField)&&(this._setRejectionIsUnhandled(),B.invokeLater(this._notifyUnhandledRejection,this,void 0))},e.prototype._notifyUnhandledRejectionIsHandled=function(){j("rejectionHandled",O,void 0,this)},e.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},e.prototype._returnedNonUndefined=function(){return 0!==(268435456&this._bitField)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var t=this._settledValue();this._setUnhandledRejectionIsNotified(),j("unhandledRejection",A,t,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},e.prototype._warn=function(t,e,n){return y(t,e,n||this)},e.onPossiblyUnhandledRejection=function(t){var e=N();A="function"==typeof t?null===e?t:I.domainBind(e,t):void 0},e.onUnhandledRejectionHandled=function(t){var e=N();O="function"==typeof t?null===e?t:I.domainBind(e,t):void 0};var K=function(){};e.longStackTraces=function(){if(B.haveItemsQueued()&&!ot.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!ot.longStackTraces&&P()){var t=e.prototype._captureStackTrace,r=e.prototype._attachExtraTrace;ot.longStackTraces=!0,K=function(){if(B.haveItemsQueued()&&!ot.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");e.prototype._captureStackTrace=t,e.prototype._attachExtraTrace=r,n.deactivateLongStackTraces(),B.enableTrampoline(),ot.longStackTraces=!1},e.prototype._captureStackTrace=h,e.prototype._attachExtraTrace=_,n.activateLongStackTraces(),B.disableTrampolineIfNecessary()}},e.hasLongStackTraces=function(){return ot.longStackTraces&&P()};var J=function(){try{if("function"==typeof CustomEvent){var t=new CustomEvent("CustomEvent");return I.global.dispatchEvent(t),function(t,e){var n=new CustomEvent(t.toLowerCase(),{detail:e,cancelable:!0});return!I.global.dispatchEvent(n)}}if("function"==typeof Event){var t=new Event("CustomEvent");return I.global.dispatchEvent(t),function(t,e){var n=new Event(t.toLowerCase(),{cancelable:!0});return n.detail=e,!I.global.dispatchEvent(n)}}var t=document.createEvent("CustomEvent");return t.initCustomEvent("testingtheevent",!1,!0,{}),I.global.dispatchEvent(t),function(t,e){var n=document.createEvent("CustomEvent");return n.initCustomEvent(t.toLowerCase(),!1,!0,e),!I.global.dispatchEvent(n)}}catch(e){}return function(){return!1}}(),Y=function(){return I.isNode?function(){return process.emit.apply(process,arguments)}:I.global?function(t){var e="on"+t.toLowerCase(),n=I.global[e];return n?(n.apply(I.global,[].slice.call(arguments,1)),!0):!1}:function(){return!1}}(),Z={promiseCreated:r,promiseFulfilled:r,promiseRejected:r,promiseResolved:r,promiseCancelled:r,promiseChained:function(t,e,n){return{promise:e,child:n}},warning:function(t,e){return{warning:e}},unhandledRejection:function(t,e,n){return{reason:e,promise:n}},rejectionHandled:r},tt=function(t){var e=!1;try{e=Y.apply(null,arguments)}catch(n){B.throwLater(n),e=!0}var r=!1;try{r=J(t,Z[t].apply(null,arguments))}catch(n){B.throwLater(n),r=!0}return r||e};e.config=function(t){if(t=Object(t),"longStackTraces"in t&&(t.longStackTraces?e.longStackTraces():!t.longStackTraces&&e.hasLongStackTraces()&&K()),"warnings"in t){var n=t.warnings;ot.warnings=!!n,X=ot.warnings,I.isObject(n)&&"wForgottenReturn"in n&&(X=!!n.wForgottenReturn)}if("cancellation"in t&&t.cancellation&&!ot.cancellation){if(B.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");e.prototype._clearCancellationData=l,e.prototype._propagateFrom=u,e.prototype._onCancel=s,e.prototype._setOnCancel=c,e.prototype._attachCancellationCallback=a,e.prototype._execute=o,et=u,ot.cancellation=!0}return"monitoring"in t&&(t.monitoring&&!ot.monitoring?(ot.monitoring=!0,e.prototype._fireEvent=tt):!t.monitoring&&ot.monitoring&&(ot.monitoring=!1,e.prototype._fireEvent=i)),e},e.prototype._fireEvent=i,e.prototype._execute=function(t,e,n){try{t(e,n)}catch(r){return r}},e.prototype._onCancel=function(){},e.prototype._setOnCancel=function(t){},e.prototype._attachCancellationCallback=function(t){},e.prototype._captureStackTrace=function(){},e.prototype._attachExtraTrace=function(){},e.prototype._clearCancellationData=function(){},e.prototype._propagateFrom=function(t,e){};var et=p,nt=function(){return!1},rt=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;I.inherits(x,Error),n.CapturedTrace=x,x.prototype.uncycle=function(){var t=this._length;if(!(2>t)){for(var e=[],n={},r=0,i=this;void 0!==i;++r)e.push(i),i=i._parent;t=this._length=r;for(var r=t-1;r>=0;--r){var o=e[r].stack;void 0===n[o]&&(n[o]=r)}for(var r=0;t>r;++r){var a=e[r].stack,s=n[a];if(void 0!==s&&s!==r){s>0&&(e[s-1]._parent=void 0,e[s-1]._length=1),e[r]._parent=void 0,e[r]._length=1;var c=r>0?e[r-1]:this;t-1>s?(c._parent=e[s+1],c._parent.uncycle(),c._length=c._parent._length+1):(c._parent=void 0,c._length=1);for(var l=c._length+1,u=r-2;u>=0;--u)e[u]._length=l,l++;return}}}},x.prototype.attachExtraTrace=function(t){if(!t.__stackCleaned__){this.uncycle();for(var e=E(t),n=e.message,r=[e.stack],i=this;void 0!==i;)r.push(C(i.stack.split("\n"))),i=i._parent;b(r),m(r),I.notEnumerableProp(t,"stack",g(n,r)),I.notEnumerableProp(t,"__stackCleaned__",!0)}};var it=function(){var t=/^\s*at\s*/,e=function(t,e){return"string"==typeof t?t:void 0!==e.name&&void 0!==e.message?e.toString():F(e)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit+=6,q=t,G=e;var n=Error.captureStackTrace;return nt=function(t){return D.test(t)},function(t,e){Error.stackTraceLimit+=6,n(t,e),Error.stackTraceLimit-=6}}var r=new Error;if("string"==typeof r.stack&&r.stack.split("\n")[0].indexOf("stackDetection@")>=0)return q=/@/,G=e,M=!0,function(t){t.stack=(new Error).stack};var i;try{throw new Error}catch(o){i="stack"in o}return"stack"in r||!i||"number"!=typeof Error.stackTraceLimit?(G=function(t,e){return"string"==typeof t?t:"object"!=typeof e&&"function"!=typeof e||void 0===e.name||void 0===e.message?F(e):e.toString()},null):(q=t,G=e,function(t){Error.stackTraceLimit+=6;try{throw new Error}catch(e){t.stack=e.stack}Error.stackTraceLimit-=6})}([]);"undefined"!=typeof console&&"undefined"!=typeof console.warn&&(L=function(t){console.warn(t)},I.isNode&&process.stderr.isTTY?L=function(t,e){var n=e?"":"";console.warn(n+t+"\n")}:I.isNode||"string"!=typeof(new Error).stack||(L=function(t,e){console.warn("%c"+t,e?"color: darkorange":"color: red")}));var ot={warnings:$,longStackTraces:!1,cancellation:!1,monitoring:!1};return z&&e.longStackTraces(),{longStackTraces:function(){return ot.longStackTraces},warnings:function(){return ot.warnings},cancellation:function(){return ot.cancellation},monitoring:function(){return ot.monitoring},propagateFromFunction:function(){return et},boundValueFunction:function(){return f},checkForgottenReturns:d,setBounds:S,warn:y,deprecated:v,CapturedTrace:x,fireDomEvent:J,fireGlobalEvent:Y}}},{"./errors":9,"./util":21}],8:[function(t,e,n){"use strict";e.exports=function(t){function e(){return this.value}function n(){throw this.reason}t.prototype["return"]=t.prototype.thenReturn=function(n){return n instanceof t&&n.suppressUnhandledRejections(),this._then(e,void 0,void 0,{value:n},void 0)},t.prototype["throw"]=t.prototype.thenThrow=function(t){return this._then(n,void 0,void 0,{reason:t},void 0)},t.prototype.catchThrow=function(t){if(arguments.length<=1)return this._then(void 0,n,void 0,{reason:t},void 0);var e=arguments[1],r=function(){throw e};return this.caught(t,r)},t.prototype.catchReturn=function(n){if(arguments.length<=1)return n instanceof t&&n.suppressUnhandledRejections(),this._then(void 0,e,void 0,{value:n},void 0);var r=arguments[1];r instanceof t&&r.suppressUnhandledRejections();var i=function(){return r};return this.caught(n,i)}}},{}],9:[function(t,e,n){"use strict";function r(t,e){function n(r){return this instanceof n?(p(this,"message","string"==typeof r?r:e),p(this,"name",t),void(Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this))):new n(r)}return u(n,Error),n}function i(t){return this instanceof i?(p(this,"name","OperationalError"),p(this,"message",t),this.cause=t,this.isOperational=!0,void(t instanceof Error?(p(this,"message",t.message),p(this,"stack",t.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor))):new i(t)}var o,a,s=t("./es5"),c=s.freeze,l=t("./util"),u=l.inherits,p=l.notEnumerableProp,f=r("Warning","warning"),h=r("CancellationError","cancellation error"),_=r("TimeoutError","timeout error"),d=r("AggregateError","aggregate error");try{o=TypeError,a=RangeError}catch(v){o=r("TypeError","type error"),a=r("RangeError","range error")}for(var y="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),g=0;g1?t.cancelPromise._reject(e):t.cancelPromise._cancel(),t.cancelPromise=null,!0):!1}function a(){return c.call(this,this.promise._target()._settledValue())}function s(t){return o(this,t)?void 0:(p.e=t,p)}function c(t){var r=this.promise,c=this.handler;if(!this.called){this.called=!0;var l=this.isFinallyHandler()?c.call(r._boundValue()):c.call(r._boundValue(),t);if(void 0!==l){r._setReturnedNonUndefined();var f=n(l,r);if(f instanceof e){if(null!=this.cancelPromise){if(f._isCancelled()){var h=new u("late cancellation observer");return r._attachExtraTrace(h),p.e=h,p}f.isPending()&&f._attachCancellationCallback(new i(this))}return f._then(a,s,void 0,this,void 0)}}}return r.isRejected()?(o(this),p.e=t,p):(o(this),t)}var l=t("./util"),u=e.CancellationError,p=l.errorObj;return r.prototype.isFinallyHandler=function(){return 0===this.type},i.prototype._resultCancelled=function(){o(this.finallyHandler)},e.prototype._passThrough=function(t,e,n,i){return"function"!=typeof t?this.then():this._then(n,i,void 0,new r(this,e,t),void 0)},e.prototype.lastly=e.prototype["finally"]=function(t){return this._passThrough(t,0,c,c)},e.prototype.tap=function(t){return this._passThrough(t,1,c)},r}},{"./util":21}],12:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,a){var s=t("./util");s.canEvaluate,s.tryCatch,s.errorObj;e.join=function(){var t,e=arguments.length-1;if(e>0&&"function"==typeof arguments[e]){t=arguments[e];var r}var i=[].slice.call(arguments);t&&i.pop();var r=new n(i).promise();return void 0!==t?r.spread(t):r}}},{"./util":21}],13:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){var a=t("./util"),s=a.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("expecting a function but got "+a.classString(t));return function(){var r=new e(n);r._captureStackTrace(),r._pushContext();var i=s(t).apply(this,arguments),a=r._popContext();return o.checkForgottenReturns(i,a,"Promise.method",r),r._resolveFromSyncValue(i),r}},e.attempt=e["try"]=function(t){if("function"!=typeof t)return i("expecting a function but got "+a.classString(t));var r=new e(n);r._captureStackTrace(),r._pushContext();var c;if(arguments.length>1){o.deprecated("calling Promise.try with more than 1 argument");var l=arguments[1],u=arguments[2];c=a.isArray(l)?s(t).apply(u,l):s(t).call(u,l)}else c=s(t)();var p=r._popContext();return o.checkForgottenReturns(c,p,"Promise.try",r),r._resolveFromSyncValue(c),r},e.prototype._resolveFromSyncValue=function(t){t===a.errorObj?this._rejectCallback(t.e,!1):this._resolveCallback(t,!0)}}},{"./util":21}],14:[function(t,e,n){"use strict";function r(t){return t instanceof Error&&u.getPrototypeOf(t)===Error.prototype}function i(t){var e;if(r(t)){e=new l(t),e.name=t.name,e.message=t.message,e.stack=t.stack;for(var n=u.keys(t),i=0;i1){var n,r=new Array(e-1),i=0;for(n=0;e-1>n;++n){var o=arguments[n];if(!h.isObject(o))return p("expecting an object but got A catch statement predicate "+h.classString(o));r[i++]=o}return r.length=i,t=arguments[n],this.then(void 0,P(r,t,this))}return this.then(void 0,t)},i.prototype.reflect=function(){return this._then(u,u,void 0,this,void 0)},i.prototype.then=function(t,e){if(F.warnings()&&arguments.length>0&&"function"!=typeof t&&"function"!=typeof e){var n=".then() only accepts functions but was passed: "+h.classString(t);arguments.length>1&&(n+=", "+h.classString(e)),this._warn(n)}return this._then(t,e,void 0,void 0,void 0)},i.prototype.done=function(t,e){var n=this._then(t,e,void 0,void 0,void 0);n._setIsFinal()},i.prototype.spread=function(t){return"function"!=typeof t?p("expecting a function but got "+h.classString(t)):this.all()._then(t,void 0,void 0,C,void 0)},i.prototype.toJSON=function(){var t={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(t.fulfillmentValue=this.value(),t.isFulfilled=!0):this.isRejected()&&(t.rejectionReason=this.reason(),t.isRejected=!0),t},i.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new k(this).promise(); +},i.prototype.error=function(t){return this.caught(h.originatesFromRejection,t)},i.getNewLibraryCopy=e.exports,i.is=function(t){return t instanceof i},i.fromNode=i.fromCallback=function(t){var e=new i(b);e._captureStackTrace();var n=arguments.length>1?!!Object(arguments[1]).multiArgs:!1,r=x(t)(R(e,n));return r===S&&e._rejectCallback(r.e,!0),e._isFateSealed()||e._setAsyncGuaranteed(),e},i.all=function(t){return new k(t).promise()},i.cast=function(t){var e=E(t);return e instanceof i||(e=new i(b),e._captureStackTrace(),e._setFulfilled(),e._rejectionHandler0=t),e},i.resolve=i.fulfilled=i.cast,i.reject=i.rejected=function(t){var e=new i(b);return e._captureStackTrace(),e._rejectCallback(t,!0),e},i.setScheduler=function(t){if("function"!=typeof t)throw new g("expecting a function but got "+h.classString(t));return v.setScheduler(t)},i.prototype._then=function(t,e,n,r,o){var a=void 0!==o,s=a?o:new i(b),l=this._target(),u=l._bitField;a||(s._propagateFrom(this,3),s._captureStackTrace(),void 0===r&&0!==(2097152&this._bitField)&&(r=0!==(50397184&u)?this._boundValue():l===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,s));var p=c();if(0!==(50397184&u)){var f,_,d=l._settlePromiseCtx;0!==(33554432&u)?(_=l._rejectionHandler0,f=t):0!==(16777216&u)?(_=l._fulfillmentHandler0,f=e,l._unsetRejectionIsUnhandled()):(d=l._settlePromiseLateCancellationObserver,_=new m("late cancellation observer"),l._attachExtraTrace(_),f=e),v.invoke(d,l,{handler:null===p?f:"function"==typeof f&&h.domainBind(p,f),promise:s,receiver:r,value:_})}else l._addCallbacks(t,e,s,r,p);return s},i.prototype._length=function(){return 65535&this._bitField},i.prototype._isFateSealed=function(){return 0!==(117506048&this._bitField)},i.prototype._isFollowing=function(){return 67108864===(67108864&this._bitField)},i.prototype._setLength=function(t){this._bitField=-65536&this._bitField|65535&t},i.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},i.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},i.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},i.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},i.prototype._isFinal=function(){return(4194304&this._bitField)>0},i.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},i.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},i.prototype._setWillBeCancelled=function(){this._bitField=8388608|this._bitField},i.prototype._setAsyncGuaranteed=function(){v.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},i.prototype._receiverAt=function(t){var e=0===t?this._receiver0:this[4*t-4+3];return e===f?void 0:void 0===e&&this._isBound()?this._boundValue():e},i.prototype._promiseAt=function(t){return this[4*t-4+2]},i.prototype._fulfillmentHandlerAt=function(t){return this[4*t-4+0]},i.prototype._rejectionHandlerAt=function(t){return this[4*t-4+1]},i.prototype._boundValue=function(){},i.prototype._migrateCallback0=function(t){var e=(t._bitField,t._fulfillmentHandler0),n=t._rejectionHandler0,r=t._promise0,i=t._receiverAt(0);void 0===i&&(i=f),this._addCallbacks(e,n,r,i,null)},i.prototype._migrateCallbackAt=function(t,e){var n=t._fulfillmentHandlerAt(e),r=t._rejectionHandlerAt(e),i=t._promiseAt(e),o=t._receiverAt(e);void 0===o&&(o=f),this._addCallbacks(n,r,i,o,null)},i.prototype._addCallbacks=function(t,e,n,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=n,this._receiver0=r,"function"==typeof t&&(this._fulfillmentHandler0=null===i?t:h.domainBind(i,t)),"function"==typeof e&&(this._rejectionHandler0=null===i?e:h.domainBind(i,e));else{var a=4*o-4;this[a+2]=n,this[a+3]=r,"function"==typeof t&&(this[a+0]=null===i?t:h.domainBind(i,t)),"function"==typeof e&&(this[a+1]=null===i?e:h.domainBind(i,e))}return this._setLength(o+1),o},i.prototype._proxy=function(t,e){this._addCallbacks(void 0,void 0,e,t,null)},i.prototype._resolveCallback=function(t,e){if(0===(117506048&this._bitField)){if(t===this)return this._rejectCallback(l(),!1);var n=E(t,this);if(!(n instanceof i))return this._fulfill(t);e&&this._propagateFrom(n,2);var r=n._target();if(r===this)return void this._reject(l());var o=r._bitField;if(0===(50397184&o)){var a=this._length();a>0&&r._migrateCallback0(this);for(var s=1;a>s;++s)r._migrateCallbackAt(this,s);this._setFollowing(),this._setLength(0),this._setFollowee(r)}else if(0!==(33554432&o))this._fulfill(r._value());else if(0!==(16777216&o))this._reject(r._reason());else{var c=new m("late cancellation observer");r._attachExtraTrace(c),this._reject(c)}}},i.prototype._rejectCallback=function(t,e,n){var r=h.ensureErrorObject(t),i=r===t;if(!i&&!n&&F.warnings()){var o="a promise was rejected with a non-error: "+h.classString(t);this._warn(o,!0)}this._attachExtraTrace(r,e?i:!1),this._reject(t)},i.prototype._resolveFromExecutor=function(t){var e=this;this._captureStackTrace(),this._pushContext();var n=!0,r=this._execute(t,function(t){e._resolveCallback(t)},function(t){e._rejectCallback(t,n)});n=!1,this._popContext(),void 0!==r&&e._rejectCallback(r,!0)},i.prototype._settlePromiseFromHandler=function(t,e,n,r){var i=r._bitField;if(0===(65536&i)){r._pushContext();var o;e===C?n&&"number"==typeof n.length?o=x(t).apply(this._boundValue(),n):(o=S,o.e=new g("cannot .spread() a non-array: "+h.classString(n))):o=x(t).call(e,n);var a=r._popContext();i=r._bitField,0===(65536&i)&&(o===w?r._reject(n):o===S?r._rejectCallback(o.e,!1):(F.checkForgottenReturns(o,a,"",r,this),r._resolveCallback(o)))}},i.prototype._target=function(){for(var t=this;t._isFollowing();)t=t._followee();return t},i.prototype._followee=function(){return this._rejectionHandler0},i.prototype._setFollowee=function(t){this._rejectionHandler0=t},i.prototype._settlePromise=function(t,e,r,o){var a=t instanceof i,s=this._bitField,c=0!==(134217728&s);0!==(65536&s)?(a&&t._invokeInternalOnCancel(),r instanceof T&&r.isFinallyHandler()?(r.cancelPromise=t,x(e).call(r,o)===S&&t._reject(S.e)):e===u?t._fulfill(u.call(r)):r instanceof n?r._promiseCancelled(t):a||t instanceof k?t._cancel():r.cancel()):"function"==typeof e?a?(c&&t._setAsyncGuaranteed(),this._settlePromiseFromHandler(e,r,o,t)):e.call(r,o,t):r instanceof n?r._isResolved()||(0!==(33554432&s)?r._promiseFulfilled(o,t):r._promiseRejected(o,t)):a&&(c&&t._setAsyncGuaranteed(),0!==(33554432&s)?t._fulfill(o):t._reject(o))},i.prototype._settlePromiseLateCancellationObserver=function(t){var e=t.handler,n=t.promise,r=t.receiver,o=t.value;"function"==typeof e?n instanceof i?this._settlePromiseFromHandler(e,r,o,n):e.call(r,o,n):n instanceof i&&n._reject(o)},i.prototype._settlePromiseCtx=function(t){this._settlePromise(t.promise,t.handler,t.receiver,t.value)},i.prototype._settlePromise0=function(t,e,n){var r=this._promise0,i=this._receiverAt(0);this._promise0=void 0,this._receiver0=void 0,this._settlePromise(r,t,i,e)},i.prototype._clearCallbackDataAtIndex=function(t){var e=4*t-4;this[e+2]=this[e+3]=this[e+0]=this[e+1]=void 0},i.prototype._fulfill=function(t){var e=this._bitField;if(!((117506048&e)>>>16)){if(t===this){var n=l();return this._attachExtraTrace(n),this._reject(n)}this._setFulfilled(),this._rejectionHandler0=t,(65535&e)>0&&(0!==(134217728&e)?this._settlePromises():v.settlePromises(this))}},i.prototype._reject=function(t){var e=this._bitField;if(!((117506048&e)>>>16))return this._setRejected(),this._fulfillmentHandler0=t,this._isFinal()?v.fatalError(t,h.isNode):void((65535&e)>0?v.settlePromises(this):this._ensurePossibleRejectionHandled())},i.prototype._fulfillPromises=function(t,e){for(var n=1;t>n;n++){var r=this._fulfillmentHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._rejectPromises=function(t,e){for(var n=1;t>n;n++){var r=this._rejectionHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._settlePromises=function(){var t=this._bitField,e=65535&t;if(e>0){if(0!==(16842752&t)){var n=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,n,t),this._rejectPromises(e,n)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,t),this._fulfillPromises(e,r)}this._setLength(0)}this._clearCancellationData()},i.prototype._settledValue=function(){var t=this._bitField;return 0!==(33554432&t)?this._rejectionHandler0:0!==(16777216&t)?this._fulfillmentHandler0:void 0},i.defer=i.pending=function(){F.deprecated("Promise.defer","new Promise");var t=new i(b);return{promise:t,resolve:o,reject:a}},h.notEnumerableProp(i,"_makeSelfResolutionError",l),t("./method")(i,b,E,p,F),t("./bind")(i,b,E,F),t("./cancel")(i,k,p,F),t("./direct_resolve")(i),t("./synchronous_inspection")(i),t("./join")(i,k,E,b,v,c),i.Promise=i,i.version="3.4.7",h.toFastProperties(i),h.toFastProperties(i.prototype),s({a:1}),s({b:2}),s({c:3}),s(1),s(function(){}),s(void 0),s(!1),s(new i(b)),F.setBounds(d.firstLineError,h.lastLineError),i}},{"./async":1,"./bind":2,"./cancel":4,"./catch_filter":5,"./context":6,"./debuggability":7,"./direct_resolve":8,"./errors":9,"./es5":10,"./finally":11,"./join":12,"./method":13,"./nodeback":14,"./promise_array":16,"./synchronous_inspection":19,"./thenables":20,"./util":21}],16:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){function a(t){switch(t){case-2:return[];case-3:return{}}}function s(t){var r=this._promise=new e(n);t instanceof e&&r._propagateFrom(t,3),r._setOnCancel(this),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}var c=t("./util");c.isArray;return c.inherits(s,o),s.prototype.length=function(){return this._length},s.prototype.promise=function(){return this._promise},s.prototype._init=function l(t,n){var o=r(this._values,this._promise);if(o instanceof e){o=o._target();var s=o._bitField;if(this._values=o,0===(50397184&s))return this._promise._setAsyncGuaranteed(),o._then(l,this._reject,void 0,this,n);if(0===(33554432&s))return 0!==(16777216&s)?this._reject(o._reason()):this._cancel();o=o._value()}if(o=c.asArray(o),null===o){var u=i("expecting an array or an iterable object but got "+c.classString(o)).reason();return void this._promise._rejectCallback(u,!1)}return 0===o.length?void(-5===n?this._resolveEmptyArray():this._resolve(a(n))):void this._iterate(o)},s.prototype._iterate=function(t){var n=this.getActualLength(t.length);this._length=n,this._values=this.shouldCopyValues()?new Array(n):this._values;for(var i=this._promise,o=!1,a=null,s=0;n>s;++s){var c=r(t[s],i);c instanceof e?(c=c._target(),a=c._bitField):a=null,o?null!==a&&c.suppressUnhandledRejections():null!==a?0===(50397184&a)?(c._proxy(this,s),this._values[s]=c):o=0!==(33554432&a)?this._promiseFulfilled(c._value(),s):0!==(16777216&a)?this._promiseRejected(c._reason(),s):this._promiseCancelled(s):o=this._promiseFulfilled(c,s)}o||i._setAsyncGuaranteed()},s.prototype._isResolved=function(){return null===this._values},s.prototype._resolve=function(t){this._values=null,this._promise._fulfill(t)},s.prototype._cancel=function(){!this._isResolved()&&this._promise._isCancellable()&&(this._values=null,this._promise._cancel())},s.prototype._reject=function(t){this._values=null,this._promise._rejectCallback(t,!1)},s.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},s.prototype._promiseCancelled=function(){return this._cancel(),!0},s.prototype._promiseRejected=function(t){return this._totalResolved++,this._reject(t),!0},s.prototype._resultCancelled=function(){if(!this._isResolved()){var t=this._values;if(this._cancel(),t instanceof e)t.cancel();else for(var n=0;no;++o)n[o+r]=t[o+e],t[o+e]=void 0}function i(t){this._capacity=t,this._length=0,this._front=0}i.prototype._willBeOverCapacity=function(t){return this._capacityn;++n)i[n]=t[n];return i[n]=e,i}function l(t,e,n){if(!F.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:void 0;var r=Object.getOwnPropertyDescriptor(t,e);return null!=r?null==r.get&&null==r.set?r.value:n:void 0}function u(t,e,n){if(o(t))return t;var r={value:n,configurable:!0,enumerable:!1,writable:!0};return F.defineProperty(t,e,r),t}function p(t){throw t}function f(t){try{if("function"==typeof t){var e=F.names(t.prototype),n=F.isES5&&e.length>1,r=e.length>0&&!(1===e.length&&"constructor"===e[0]),i=A.test(t+"")&&F.names(t).length>0;if(n||r||i)return!0}return!1}catch(o){return!1}}function h(t){function e(){}e.prototype=t;for(var n=8;n--;)new e;return t}function _(t){return L.test(t)}function d(t,e,n){for(var r=new Array(t),i=0;t>i;++i)r[i]=e+i+n;return r}function v(t){try{return t+""}catch(e){return"[no string representation]"}}function y(t){return null!==t&&"object"==typeof t&&"string"==typeof t.message&&"string"==typeof t.name}function g(t){try{u(t,"isOperational",!0)}catch(e){}}function m(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes__.OperationalError||t.isOperational===!0}function b(t){return y(t)&&F.propertyIsWritable(t,"stack")}function C(t){return{}.toString.call(t)}function w(t,e,n){for(var r=F.names(t),i=0;i10||t[0]>0}(),D.isNode&&D.toFastProperties(process);try{throw new Error}catch(V){D.lastLineError=V}e.exports=D},{"./es5":10}]},{},[3])(3)}),"undefined"!=typeof window&&null!==window?window.P=window.Promise:"undefined"!=typeof self&&null!==self&&(self.P=self.Promise); \ No newline at end of file diff --git a/node_backend/node_modules/bluebird/js/browser/bluebird.js b/node_backend/node_modules/bluebird/js/browser/bluebird.js new file mode 100644 index 0000000000000000000000000000000000000000..dc80cb6a8e247007984945a873a67886dad0c833 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/browser/bluebird.js @@ -0,0 +1,5581 @@ +/* @preserve + * The MIT License (MIT) + * + * Copyright (c) 2013-2015 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +/** + * bluebird build version 3.4.7 + * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each +*/ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_=="function"&&_dereq_;for(var o=0;o 0) { + var fn = queue.shift(); + if (typeof fn !== "function") { + fn._settlePromises(); + continue; + } + var receiver = queue.shift(); + var arg = queue.shift(); + fn.call(receiver, arg); + } +}; + +Async.prototype._drainQueues = function () { + this._drainQueue(this._normalQueue); + this._reset(); + this._haveDrainedQueues = true; + this._drainQueue(this._lateQueue); +}; + +Async.prototype._queueTick = function () { + if (!this._isTickUsed) { + this._isTickUsed = true; + this._schedule(this.drainQueues); + } +}; + +Async.prototype._reset = function () { + this._isTickUsed = false; +}; + +module.exports = Async; +module.exports.firstLineError = firstLineError; + +},{"./queue":26,"./schedule":29,"./util":36}],3:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { +var calledBind = false; +var rejectThis = function(_, e) { + this._reject(e); +}; + +var targetRejected = function(e, context) { + context.promiseRejectionQueued = true; + context.bindingPromise._then(rejectThis, rejectThis, null, this, e); +}; + +var bindingResolved = function(thisArg, context) { + if (((this._bitField & 50397184) === 0)) { + this._resolveCallback(context.target); + } +}; + +var bindingRejected = function(e, context) { + if (!context.promiseRejectionQueued) this._reject(e); +}; + +Promise.prototype.bind = function (thisArg) { + if (!calledBind) { + calledBind = true; + Promise.prototype._propagateFrom = debug.propagateFromFunction(); + Promise.prototype._boundValue = debug.boundValueFunction(); + } + var maybePromise = tryConvertToPromise(thisArg); + var ret = new Promise(INTERNAL); + ret._propagateFrom(this, 1); + var target = this._target(); + ret._setBoundTo(maybePromise); + if (maybePromise instanceof Promise) { + var context = { + promiseRejectionQueued: false, + promise: ret, + target: target, + bindingPromise: maybePromise + }; + target._then(INTERNAL, targetRejected, undefined, ret, context); + maybePromise._then( + bindingResolved, bindingRejected, undefined, ret, context); + ret._setOnCancel(maybePromise); + } else { + ret._resolveCallback(target); + } + return ret; +}; + +Promise.prototype._setBoundTo = function (obj) { + if (obj !== undefined) { + this._bitField = this._bitField | 2097152; + this._boundTo = obj; + } else { + this._bitField = this._bitField & (~2097152); + } +}; + +Promise.prototype._isBound = function () { + return (this._bitField & 2097152) === 2097152; +}; + +Promise.bind = function (thisArg, value) { + return Promise.resolve(value).bind(thisArg); +}; +}; + +},{}],4:[function(_dereq_,module,exports){ +"use strict"; +var old; +if (typeof Promise !== "undefined") old = Promise; +function noConflict() { + try { if (Promise === bluebird) Promise = old; } + catch (e) {} + return bluebird; +} +var bluebird = _dereq_("./promise")(); +bluebird.noConflict = noConflict; +module.exports = bluebird; + +},{"./promise":22}],5:[function(_dereq_,module,exports){ +"use strict"; +var cr = Object.create; +if (cr) { + var callerCache = cr(null); + var getterCache = cr(null); + callerCache[" size"] = getterCache[" size"] = 0; +} + +module.exports = function(Promise) { +var util = _dereq_("./util"); +var canEvaluate = util.canEvaluate; +var isIdentifier = util.isIdentifier; + +var getMethodCaller; +var getGetter; +if (!true) { +var makeMethodCaller = function (methodName) { + return new Function("ensureMethod", " \n\ + return function(obj) { \n\ + 'use strict' \n\ + var len = this.length; \n\ + ensureMethod(obj, 'methodName'); \n\ + switch(len) { \n\ + case 1: return obj.methodName(this[0]); \n\ + case 2: return obj.methodName(this[0], this[1]); \n\ + case 3: return obj.methodName(this[0], this[1], this[2]); \n\ + case 0: return obj.methodName(); \n\ + default: \n\ + return obj.methodName.apply(obj, this); \n\ + } \n\ + }; \n\ + ".replace(/methodName/g, methodName))(ensureMethod); +}; + +var makeGetter = function (propertyName) { + return new Function("obj", " \n\ + 'use strict'; \n\ + return obj.propertyName; \n\ + ".replace("propertyName", propertyName)); +}; + +var getCompiled = function(name, compiler, cache) { + var ret = cache[name]; + if (typeof ret !== "function") { + if (!isIdentifier(name)) { + return null; + } + ret = compiler(name); + cache[name] = ret; + cache[" size"]++; + if (cache[" size"] > 512) { + var keys = Object.keys(cache); + for (var i = 0; i < 256; ++i) delete cache[keys[i]]; + cache[" size"] = keys.length - 256; + } + } + return ret; +}; + +getMethodCaller = function(name) { + return getCompiled(name, makeMethodCaller, callerCache); +}; + +getGetter = function(name) { + return getCompiled(name, makeGetter, getterCache); +}; +} + +function ensureMethod(obj, methodName) { + var fn; + if (obj != null) fn = obj[methodName]; + if (typeof fn !== "function") { + var message = "Object " + util.classString(obj) + " has no method '" + + util.toString(methodName) + "'"; + throw new Promise.TypeError(message); + } + return fn; +} + +function caller(obj) { + var methodName = this.pop(); + var fn = ensureMethod(obj, methodName); + return fn.apply(obj, this); +} +Promise.prototype.call = function (methodName) { + var args = [].slice.call(arguments, 1);; + if (!true) { + if (canEvaluate) { + var maybeCaller = getMethodCaller(methodName); + if (maybeCaller !== null) { + return this._then( + maybeCaller, undefined, undefined, args, undefined); + } + } + } + args.push(methodName); + return this._then(caller, undefined, undefined, args, undefined); +}; + +function namedGetter(obj) { + return obj[this]; +} +function indexedGetter(obj) { + var index = +this; + if (index < 0) index = Math.max(0, index + obj.length); + return obj[index]; +} +Promise.prototype.get = function (propertyName) { + var isIndex = (typeof propertyName === "number"); + var getter; + if (!isIndex) { + if (canEvaluate) { + var maybeGetter = getGetter(propertyName); + getter = maybeGetter !== null ? maybeGetter : namedGetter; + } else { + getter = namedGetter; + } + } else { + getter = indexedGetter; + } + return this._then(getter, undefined, undefined, propertyName, undefined); +}; +}; + +},{"./util":36}],6:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, PromiseArray, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +Promise.prototype["break"] = Promise.prototype.cancel = function() { + if (!debug.cancellation()) return this._warn("cancellation is disabled"); + + var promise = this; + var child = promise; + while (promise._isCancellable()) { + if (!promise._cancelBy(child)) { + if (child._isFollowing()) { + child._followee().cancel(); + } else { + child._cancelBranched(); + } + break; + } + + var parent = promise._cancellationParent; + if (parent == null || !parent._isCancellable()) { + if (promise._isFollowing()) { + promise._followee().cancel(); + } else { + promise._cancelBranched(); + } + break; + } else { + if (promise._isFollowing()) promise._followee().cancel(); + promise._setWillBeCancelled(); + child = promise; + promise = parent; + } + } +}; + +Promise.prototype._branchHasCancelled = function() { + this._branchesRemainingToCancel--; +}; + +Promise.prototype._enoughBranchesHaveCancelled = function() { + return this._branchesRemainingToCancel === undefined || + this._branchesRemainingToCancel <= 0; +}; + +Promise.prototype._cancelBy = function(canceller) { + if (canceller === this) { + this._branchesRemainingToCancel = 0; + this._invokeOnCancel(); + return true; + } else { + this._branchHasCancelled(); + if (this._enoughBranchesHaveCancelled()) { + this._invokeOnCancel(); + return true; + } + } + return false; +}; + +Promise.prototype._cancelBranched = function() { + if (this._enoughBranchesHaveCancelled()) { + this._cancel(); + } +}; + +Promise.prototype._cancel = function() { + if (!this._isCancellable()) return; + this._setCancelled(); + async.invoke(this._cancelPromises, this, undefined); +}; + +Promise.prototype._cancelPromises = function() { + if (this._length() > 0) this._settlePromises(); +}; + +Promise.prototype._unsetOnCancel = function() { + this._onCancelField = undefined; +}; + +Promise.prototype._isCancellable = function() { + return this.isPending() && !this._isCancelled(); +}; + +Promise.prototype.isCancellable = function() { + return this.isPending() && !this.isCancelled(); +}; + +Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { + if (util.isArray(onCancelCallback)) { + for (var i = 0; i < onCancelCallback.length; ++i) { + this._doInvokeOnCancel(onCancelCallback[i], internalOnly); + } + } else if (onCancelCallback !== undefined) { + if (typeof onCancelCallback === "function") { + if (!internalOnly) { + var e = tryCatch(onCancelCallback).call(this._boundValue()); + if (e === errorObj) { + this._attachExtraTrace(e.e); + async.throwLater(e.e); + } + } + } else { + onCancelCallback._resultCancelled(this); + } + } +}; + +Promise.prototype._invokeOnCancel = function() { + var onCancelCallback = this._onCancel(); + this._unsetOnCancel(); + async.invoke(this._doInvokeOnCancel, this, onCancelCallback); +}; + +Promise.prototype._invokeInternalOnCancel = function() { + if (this._isCancellable()) { + this._doInvokeOnCancel(this._onCancel(), true); + this._unsetOnCancel(); + } +}; + +Promise.prototype._resultCancelled = function() { + this.cancel(); +}; + +}; + +},{"./util":36}],7:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(NEXT_FILTER) { +var util = _dereq_("./util"); +var getKeys = _dereq_("./es5").keys; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function catchFilter(instances, cb, promise) { + return function(e) { + var boundTo = promise._boundValue(); + predicateLoop: for (var i = 0; i < instances.length; ++i) { + var item = instances[i]; + + if (item === Error || + (item != null && item.prototype instanceof Error)) { + if (e instanceof item) { + return tryCatch(cb).call(boundTo, e); + } + } else if (typeof item === "function") { + var matchesPredicate = tryCatch(item).call(boundTo, e); + if (matchesPredicate === errorObj) { + return matchesPredicate; + } else if (matchesPredicate) { + return tryCatch(cb).call(boundTo, e); + } + } else if (util.isObject(e)) { + var keys = getKeys(item); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + if (item[key] != e[key]) { + continue predicateLoop; + } + } + return tryCatch(cb).call(boundTo, e); + } + } + return NEXT_FILTER; + }; +} + +return catchFilter; +}; + +},{"./es5":13,"./util":36}],8:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +var longStackTraces = false; +var contextStack = []; + +Promise.prototype._promiseCreated = function() {}; +Promise.prototype._pushContext = function() {}; +Promise.prototype._popContext = function() {return null;}; +Promise._peekContext = Promise.prototype._peekContext = function() {}; + +function Context() { + this._trace = new Context.CapturedTrace(peekContext()); +} +Context.prototype._pushContext = function () { + if (this._trace !== undefined) { + this._trace._promiseCreated = null; + contextStack.push(this._trace); + } +}; + +Context.prototype._popContext = function () { + if (this._trace !== undefined) { + var trace = contextStack.pop(); + var ret = trace._promiseCreated; + trace._promiseCreated = null; + return ret; + } + return null; +}; + +function createContext() { + if (longStackTraces) return new Context(); +} + +function peekContext() { + var lastIndex = contextStack.length - 1; + if (lastIndex >= 0) { + return contextStack[lastIndex]; + } + return undefined; +} +Context.CapturedTrace = null; +Context.create = createContext; +Context.deactivateLongStackTraces = function() {}; +Context.activateLongStackTraces = function() { + var Promise_pushContext = Promise.prototype._pushContext; + var Promise_popContext = Promise.prototype._popContext; + var Promise_PeekContext = Promise._peekContext; + var Promise_peekContext = Promise.prototype._peekContext; + var Promise_promiseCreated = Promise.prototype._promiseCreated; + Context.deactivateLongStackTraces = function() { + Promise.prototype._pushContext = Promise_pushContext; + Promise.prototype._popContext = Promise_popContext; + Promise._peekContext = Promise_PeekContext; + Promise.prototype._peekContext = Promise_peekContext; + Promise.prototype._promiseCreated = Promise_promiseCreated; + longStackTraces = false; + }; + longStackTraces = true; + Promise.prototype._pushContext = Context.prototype._pushContext; + Promise.prototype._popContext = Context.prototype._popContext; + Promise._peekContext = Promise.prototype._peekContext = peekContext; + Promise.prototype._promiseCreated = function() { + var ctx = this._peekContext(); + if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; + }; +}; +return Context; +}; + +},{}],9:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, Context) { +var getDomain = Promise._getDomain; +var async = Promise._async; +var Warning = _dereq_("./errors").Warning; +var util = _dereq_("./util"); +var canAttachTrace = util.canAttachTrace; +var unhandledRejectionHandled; +var possiblyUnhandledRejection; +var bluebirdFramePattern = + /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; +var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/; +var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/; +var stackFramePattern = null; +var formatStack = null; +var indentStackFrames = false; +var printWarning; +var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && + (true || + util.env("BLUEBIRD_DEBUG") || + util.env("NODE_ENV") === "development")); + +var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && + (debugging || util.env("BLUEBIRD_WARNINGS"))); + +var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && + (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); + +var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && + (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); + +Promise.prototype.suppressUnhandledRejections = function() { + var target = this._target(); + target._bitField = ((target._bitField & (~1048576)) | + 524288); +}; + +Promise.prototype._ensurePossibleRejectionHandled = function () { + if ((this._bitField & 524288) !== 0) return; + this._setRejectionIsUnhandled(); + async.invokeLater(this._notifyUnhandledRejection, this, undefined); +}; + +Promise.prototype._notifyUnhandledRejectionIsHandled = function () { + fireRejectionEvent("rejectionHandled", + unhandledRejectionHandled, undefined, this); +}; + +Promise.prototype._setReturnedNonUndefined = function() { + this._bitField = this._bitField | 268435456; +}; + +Promise.prototype._returnedNonUndefined = function() { + return (this._bitField & 268435456) !== 0; +}; + +Promise.prototype._notifyUnhandledRejection = function () { + if (this._isRejectionUnhandled()) { + var reason = this._settledValue(); + this._setUnhandledRejectionIsNotified(); + fireRejectionEvent("unhandledRejection", + possiblyUnhandledRejection, reason, this); + } +}; + +Promise.prototype._setUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField | 262144; +}; + +Promise.prototype._unsetUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField & (~262144); +}; + +Promise.prototype._isUnhandledRejectionNotified = function () { + return (this._bitField & 262144) > 0; +}; + +Promise.prototype._setRejectionIsUnhandled = function () { + this._bitField = this._bitField | 1048576; +}; + +Promise.prototype._unsetRejectionIsUnhandled = function () { + this._bitField = this._bitField & (~1048576); + if (this._isUnhandledRejectionNotified()) { + this._unsetUnhandledRejectionIsNotified(); + this._notifyUnhandledRejectionIsHandled(); + } +}; + +Promise.prototype._isRejectionUnhandled = function () { + return (this._bitField & 1048576) > 0; +}; + +Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { + return warn(message, shouldUseOwnTrace, promise || this); +}; + +Promise.onPossiblyUnhandledRejection = function (fn) { + var domain = getDomain(); + possiblyUnhandledRejection = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +Promise.onUnhandledRejectionHandled = function (fn) { + var domain = getDomain(); + unhandledRejectionHandled = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +var disableLongStackTraces = function() {}; +Promise.longStackTraces = function () { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + if (!config.longStackTraces && longStackTracesIsSupported()) { + var Promise_captureStackTrace = Promise.prototype._captureStackTrace; + var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; + config.longStackTraces = true; + disableLongStackTraces = function() { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + Promise.prototype._captureStackTrace = Promise_captureStackTrace; + Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; + Context.deactivateLongStackTraces(); + async.enableTrampoline(); + config.longStackTraces = false; + }; + Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; + Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; + Context.activateLongStackTraces(); + async.disableTrampolineIfNecessary(); + } +}; + +Promise.hasLongStackTraces = function () { + return config.longStackTraces && longStackTracesIsSupported(); +}; + +var fireDomEvent = (function() { + try { + if (typeof CustomEvent === "function") { + var event = new CustomEvent("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new CustomEvent(name.toLowerCase(), { + detail: event, + cancelable: true + }); + return !util.global.dispatchEvent(domEvent); + }; + } else if (typeof Event === "function") { + var event = new Event("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new Event(name.toLowerCase(), { + cancelable: true + }); + domEvent.detail = event; + return !util.global.dispatchEvent(domEvent); + }; + } else { + var event = document.createEvent("CustomEvent"); + event.initCustomEvent("testingtheevent", false, true, {}); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = document.createEvent("CustomEvent"); + domEvent.initCustomEvent(name.toLowerCase(), false, true, + event); + return !util.global.dispatchEvent(domEvent); + }; + } + } catch (e) {} + return function() { + return false; + }; +})(); + +var fireGlobalEvent = (function() { + if (util.isNode) { + return function() { + return process.emit.apply(process, arguments); + }; + } else { + if (!util.global) { + return function() { + return false; + }; + } + return function(name) { + var methodName = "on" + name.toLowerCase(); + var method = util.global[methodName]; + if (!method) return false; + method.apply(util.global, [].slice.call(arguments, 1)); + return true; + }; + } +})(); + +function generatePromiseLifecycleEventObject(name, promise) { + return {promise: promise}; +} + +var eventToObjectGenerator = { + promiseCreated: generatePromiseLifecycleEventObject, + promiseFulfilled: generatePromiseLifecycleEventObject, + promiseRejected: generatePromiseLifecycleEventObject, + promiseResolved: generatePromiseLifecycleEventObject, + promiseCancelled: generatePromiseLifecycleEventObject, + promiseChained: function(name, promise, child) { + return {promise: promise, child: child}; + }, + warning: function(name, warning) { + return {warning: warning}; + }, + unhandledRejection: function (name, reason, promise) { + return {reason: reason, promise: promise}; + }, + rejectionHandled: generatePromiseLifecycleEventObject +}; + +var activeFireEvent = function (name) { + var globalEventFired = false; + try { + globalEventFired = fireGlobalEvent.apply(null, arguments); + } catch (e) { + async.throwLater(e); + globalEventFired = true; + } + + var domEventFired = false; + try { + domEventFired = fireDomEvent(name, + eventToObjectGenerator[name].apply(null, arguments)); + } catch (e) { + async.throwLater(e); + domEventFired = true; + } + + return domEventFired || globalEventFired; +}; + +Promise.config = function(opts) { + opts = Object(opts); + if ("longStackTraces" in opts) { + if (opts.longStackTraces) { + Promise.longStackTraces(); + } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { + disableLongStackTraces(); + } + } + if ("warnings" in opts) { + var warningsOption = opts.warnings; + config.warnings = !!warningsOption; + wForgottenReturn = config.warnings; + + if (util.isObject(warningsOption)) { + if ("wForgottenReturn" in warningsOption) { + wForgottenReturn = !!warningsOption.wForgottenReturn; + } + } + } + if ("cancellation" in opts && opts.cancellation && !config.cancellation) { + if (async.haveItemsQueued()) { + throw new Error( + "cannot enable cancellation after promises are in use"); + } + Promise.prototype._clearCancellationData = + cancellationClearCancellationData; + Promise.prototype._propagateFrom = cancellationPropagateFrom; + Promise.prototype._onCancel = cancellationOnCancel; + Promise.prototype._setOnCancel = cancellationSetOnCancel; + Promise.prototype._attachCancellationCallback = + cancellationAttachCancellationCallback; + Promise.prototype._execute = cancellationExecute; + propagateFromFunction = cancellationPropagateFrom; + config.cancellation = true; + } + if ("monitoring" in opts) { + if (opts.monitoring && !config.monitoring) { + config.monitoring = true; + Promise.prototype._fireEvent = activeFireEvent; + } else if (!opts.monitoring && config.monitoring) { + config.monitoring = false; + Promise.prototype._fireEvent = defaultFireEvent; + } + } + return Promise; +}; + +function defaultFireEvent() { return false; } + +Promise.prototype._fireEvent = defaultFireEvent; +Promise.prototype._execute = function(executor, resolve, reject) { + try { + executor(resolve, reject); + } catch (e) { + return e; + } +}; +Promise.prototype._onCancel = function () {}; +Promise.prototype._setOnCancel = function (handler) { ; }; +Promise.prototype._attachCancellationCallback = function(onCancel) { + ; +}; +Promise.prototype._captureStackTrace = function () {}; +Promise.prototype._attachExtraTrace = function () {}; +Promise.prototype._clearCancellationData = function() {}; +Promise.prototype._propagateFrom = function (parent, flags) { + ; + ; +}; + +function cancellationExecute(executor, resolve, reject) { + var promise = this; + try { + executor(resolve, reject, function(onCancel) { + if (typeof onCancel !== "function") { + throw new TypeError("onCancel must be a function, got: " + + util.toString(onCancel)); + } + promise._attachCancellationCallback(onCancel); + }); + } catch (e) { + return e; + } +} + +function cancellationAttachCancellationCallback(onCancel) { + if (!this._isCancellable()) return this; + + var previousOnCancel = this._onCancel(); + if (previousOnCancel !== undefined) { + if (util.isArray(previousOnCancel)) { + previousOnCancel.push(onCancel); + } else { + this._setOnCancel([previousOnCancel, onCancel]); + } + } else { + this._setOnCancel(onCancel); + } +} + +function cancellationOnCancel() { + return this._onCancelField; +} + +function cancellationSetOnCancel(onCancel) { + this._onCancelField = onCancel; +} + +function cancellationClearCancellationData() { + this._cancellationParent = undefined; + this._onCancelField = undefined; +} + +function cancellationPropagateFrom(parent, flags) { + if ((flags & 1) !== 0) { + this._cancellationParent = parent; + var branchesRemainingToCancel = parent._branchesRemainingToCancel; + if (branchesRemainingToCancel === undefined) { + branchesRemainingToCancel = 0; + } + parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; + } + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} + +function bindingPropagateFrom(parent, flags) { + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} +var propagateFromFunction = bindingPropagateFrom; + +function boundValueFunction() { + var ret = this._boundTo; + if (ret !== undefined) { + if (ret instanceof Promise) { + if (ret.isFulfilled()) { + return ret.value(); + } else { + return undefined; + } + } + } + return ret; +} + +function longStackTracesCaptureStackTrace() { + this._trace = new CapturedTrace(this._peekContext()); +} + +function longStackTracesAttachExtraTrace(error, ignoreSelf) { + if (canAttachTrace(error)) { + var trace = this._trace; + if (trace !== undefined) { + if (ignoreSelf) trace = trace._parent; + } + if (trace !== undefined) { + trace.attachExtraTrace(error); + } else if (!error.__stackCleaned__) { + var parsed = parseStackAndMessage(error); + util.notEnumerableProp(error, "stack", + parsed.message + "\n" + parsed.stack.join("\n")); + util.notEnumerableProp(error, "__stackCleaned__", true); + } + } +} + +function checkForgottenReturns(returnValue, promiseCreated, name, promise, + parent) { + if (returnValue === undefined && promiseCreated !== null && + wForgottenReturn) { + if (parent !== undefined && parent._returnedNonUndefined()) return; + if ((promise._bitField & 65535) === 0) return; + + if (name) name = name + " "; + var handlerLine = ""; + var creatorLine = ""; + if (promiseCreated._trace) { + var traceLines = promiseCreated._trace.stack.split("\n"); + var stack = cleanStack(traceLines); + for (var i = stack.length - 1; i >= 0; --i) { + var line = stack[i]; + if (!nodeFramePattern.test(line)) { + var lineMatches = line.match(parseLinePattern); + if (lineMatches) { + handlerLine = "at " + lineMatches[1] + + ":" + lineMatches[2] + ":" + lineMatches[3] + " "; + } + break; + } + } + + if (stack.length > 0) { + var firstUserLine = stack[0]; + for (var i = 0; i < traceLines.length; ++i) { + + if (traceLines[i] === firstUserLine) { + if (i > 0) { + creatorLine = "\n" + traceLines[i - 1]; + } + break; + } + } + + } + } + var msg = "a promise was created in a " + name + + "handler " + handlerLine + "but was not returned from it, " + + "see http://goo.gl/rRqMUw" + + creatorLine; + promise._warn(msg, true, promiseCreated); + } +} + +function deprecated(name, replacement) { + var message = name + + " is deprecated and will be removed in a future version."; + if (replacement) message += " Use " + replacement + " instead."; + return warn(message); +} + +function warn(message, shouldUseOwnTrace, promise) { + if (!config.warnings) return; + var warning = new Warning(message); + var ctx; + if (shouldUseOwnTrace) { + promise._attachExtraTrace(warning); + } else if (config.longStackTraces && (ctx = Promise._peekContext())) { + ctx.attachExtraTrace(warning); + } else { + var parsed = parseStackAndMessage(warning); + warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); + } + + if (!activeFireEvent("warning", warning)) { + formatAndLogError(warning, "", true); + } +} + +function reconstructStack(message, stacks) { + for (var i = 0; i < stacks.length - 1; ++i) { + stacks[i].push("From previous event:"); + stacks[i] = stacks[i].join("\n"); + } + if (i < stacks.length) { + stacks[i] = stacks[i].join("\n"); + } + return message + "\n" + stacks.join("\n"); +} + +function removeDuplicateOrEmptyJumps(stacks) { + for (var i = 0; i < stacks.length; ++i) { + if (stacks[i].length === 0 || + ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { + stacks.splice(i, 1); + i--; + } + } +} + +function removeCommonRoots(stacks) { + var current = stacks[0]; + for (var i = 1; i < stacks.length; ++i) { + var prev = stacks[i]; + var currentLastIndex = current.length - 1; + var currentLastLine = current[currentLastIndex]; + var commonRootMeetPoint = -1; + + for (var j = prev.length - 1; j >= 0; --j) { + if (prev[j] === currentLastLine) { + commonRootMeetPoint = j; + break; + } + } + + for (var j = commonRootMeetPoint; j >= 0; --j) { + var line = prev[j]; + if (current[currentLastIndex] === line) { + current.pop(); + currentLastIndex--; + } else { + break; + } + } + current = prev; + } +} + +function cleanStack(stack) { + var ret = []; + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + var isTraceLine = " (No stack trace)" === line || + stackFramePattern.test(line); + var isInternalFrame = isTraceLine && shouldIgnore(line); + if (isTraceLine && !isInternalFrame) { + if (indentStackFrames && line.charAt(0) !== " ") { + line = " " + line; + } + ret.push(line); + } + } + return ret; +} + +function stackFramesAsArray(error) { + var stack = error.stack.replace(/\s+$/g, "").split("\n"); + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + if (" (No stack trace)" === line || stackFramePattern.test(line)) { + break; + } + } + if (i > 0 && error.name != "SyntaxError") { + stack = stack.slice(i); + } + return stack; +} + +function parseStackAndMessage(error) { + var stack = error.stack; + var message = error.toString(); + stack = typeof stack === "string" && stack.length > 0 + ? stackFramesAsArray(error) : [" (No stack trace)"]; + return { + message: message, + stack: error.name == "SyntaxError" ? stack : cleanStack(stack) + }; +} + +function formatAndLogError(error, title, isSoft) { + if (typeof console !== "undefined") { + var message; + if (util.isObject(error)) { + var stack = error.stack; + message = title + formatStack(stack, error); + } else { + message = title + String(error); + } + if (typeof printWarning === "function") { + printWarning(message, isSoft); + } else if (typeof console.log === "function" || + typeof console.log === "object") { + console.log(message); + } + } +} + +function fireRejectionEvent(name, localHandler, reason, promise) { + var localEventFired = false; + try { + if (typeof localHandler === "function") { + localEventFired = true; + if (name === "rejectionHandled") { + localHandler(promise); + } else { + localHandler(reason, promise); + } + } + } catch (e) { + async.throwLater(e); + } + + if (name === "unhandledRejection") { + if (!activeFireEvent(name, reason, promise) && !localEventFired) { + formatAndLogError(reason, "Unhandled rejection "); + } + } else { + activeFireEvent(name, promise); + } +} + +function formatNonError(obj) { + var str; + if (typeof obj === "function") { + str = "[function " + + (obj.name || "anonymous") + + "]"; + } else { + str = obj && typeof obj.toString === "function" + ? obj.toString() : util.toString(obj); + var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; + if (ruselessToString.test(str)) { + try { + var newStr = JSON.stringify(obj); + str = newStr; + } + catch(e) { + + } + } + if (str.length === 0) { + str = "(empty array)"; + } + } + return ("(<" + snip(str) + ">, no stack trace)"); +} + +function snip(str) { + var maxChars = 41; + if (str.length < maxChars) { + return str; + } + return str.substr(0, maxChars - 3) + "..."; +} + +function longStackTracesIsSupported() { + return typeof captureStackTrace === "function"; +} + +var shouldIgnore = function() { return false; }; +var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; +function parseLineInfo(line) { + var matches = line.match(parseLineInfoRegex); + if (matches) { + return { + fileName: matches[1], + line: parseInt(matches[2], 10) + }; + } +} + +function setBounds(firstLineError, lastLineError) { + if (!longStackTracesIsSupported()) return; + var firstStackLines = firstLineError.stack.split("\n"); + var lastStackLines = lastLineError.stack.split("\n"); + var firstIndex = -1; + var lastIndex = -1; + var firstFileName; + var lastFileName; + for (var i = 0; i < firstStackLines.length; ++i) { + var result = parseLineInfo(firstStackLines[i]); + if (result) { + firstFileName = result.fileName; + firstIndex = result.line; + break; + } + } + for (var i = 0; i < lastStackLines.length; ++i) { + var result = parseLineInfo(lastStackLines[i]); + if (result) { + lastFileName = result.fileName; + lastIndex = result.line; + break; + } + } + if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || + firstFileName !== lastFileName || firstIndex >= lastIndex) { + return; + } + + shouldIgnore = function(line) { + if (bluebirdFramePattern.test(line)) return true; + var info = parseLineInfo(line); + if (info) { + if (info.fileName === firstFileName && + (firstIndex <= info.line && info.line <= lastIndex)) { + return true; + } + } + return false; + }; +} + +function CapturedTrace(parent) { + this._parent = parent; + this._promisesCreated = 0; + var length = this._length = 1 + (parent === undefined ? 0 : parent._length); + captureStackTrace(this, CapturedTrace); + if (length > 32) this.uncycle(); +} +util.inherits(CapturedTrace, Error); +Context.CapturedTrace = CapturedTrace; + +CapturedTrace.prototype.uncycle = function() { + var length = this._length; + if (length < 2) return; + var nodes = []; + var stackToIndex = {}; + + for (var i = 0, node = this; node !== undefined; ++i) { + nodes.push(node); + node = node._parent; + } + length = this._length = i; + for (var i = length - 1; i >= 0; --i) { + var stack = nodes[i].stack; + if (stackToIndex[stack] === undefined) { + stackToIndex[stack] = i; + } + } + for (var i = 0; i < length; ++i) { + var currentStack = nodes[i].stack; + var index = stackToIndex[currentStack]; + if (index !== undefined && index !== i) { + if (index > 0) { + nodes[index - 1]._parent = undefined; + nodes[index - 1]._length = 1; + } + nodes[i]._parent = undefined; + nodes[i]._length = 1; + var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; + + if (index < length - 1) { + cycleEdgeNode._parent = nodes[index + 1]; + cycleEdgeNode._parent.uncycle(); + cycleEdgeNode._length = + cycleEdgeNode._parent._length + 1; + } else { + cycleEdgeNode._parent = undefined; + cycleEdgeNode._length = 1; + } + var currentChildLength = cycleEdgeNode._length + 1; + for (var j = i - 2; j >= 0; --j) { + nodes[j]._length = currentChildLength; + currentChildLength++; + } + return; + } + } +}; + +CapturedTrace.prototype.attachExtraTrace = function(error) { + if (error.__stackCleaned__) return; + this.uncycle(); + var parsed = parseStackAndMessage(error); + var message = parsed.message; + var stacks = [parsed.stack]; + + var trace = this; + while (trace !== undefined) { + stacks.push(cleanStack(trace.stack.split("\n"))); + trace = trace._parent; + } + removeCommonRoots(stacks); + removeDuplicateOrEmptyJumps(stacks); + util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); + util.notEnumerableProp(error, "__stackCleaned__", true); +}; + +var captureStackTrace = (function stackDetection() { + var v8stackFramePattern = /^\s*at\s*/; + var v8stackFormatter = function(stack, error) { + if (typeof stack === "string") return stack; + + if (error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + if (typeof Error.stackTraceLimit === "number" && + typeof Error.captureStackTrace === "function") { + Error.stackTraceLimit += 6; + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + var captureStackTrace = Error.captureStackTrace; + + shouldIgnore = function(line) { + return bluebirdFramePattern.test(line); + }; + return function(receiver, ignoreUntil) { + Error.stackTraceLimit += 6; + captureStackTrace(receiver, ignoreUntil); + Error.stackTraceLimit -= 6; + }; + } + var err = new Error(); + + if (typeof err.stack === "string" && + err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { + stackFramePattern = /@/; + formatStack = v8stackFormatter; + indentStackFrames = true; + return function captureStackTrace(o) { + o.stack = new Error().stack; + }; + } + + var hasStackAfterThrow; + try { throw new Error(); } + catch(e) { + hasStackAfterThrow = ("stack" in e); + } + if (!("stack" in err) && hasStackAfterThrow && + typeof Error.stackTraceLimit === "number") { + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + return function captureStackTrace(o) { + Error.stackTraceLimit += 6; + try { throw new Error(); } + catch(e) { o.stack = e.stack; } + Error.stackTraceLimit -= 6; + }; + } + + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if ((typeof error === "object" || + typeof error === "function") && + error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + return null; + +})([]); + +if (typeof console !== "undefined" && typeof console.warn !== "undefined") { + printWarning = function (message) { + console.warn(message); + }; + if (util.isNode && process.stderr.isTTY) { + printWarning = function(message, isSoft) { + var color = isSoft ? "\u001b[33m" : "\u001b[31m"; + console.warn(color + message + "\u001b[0m\n"); + }; + } else if (!util.isNode && typeof (new Error().stack) === "string") { + printWarning = function(message, isSoft) { + console.warn("%c" + message, + isSoft ? "color: darkorange" : "color: red"); + }; + } +} + +var config = { + warnings: warnings, + longStackTraces: false, + cancellation: false, + monitoring: false +}; + +if (longStackTraces) Promise.longStackTraces(); + +return { + longStackTraces: function() { + return config.longStackTraces; + }, + warnings: function() { + return config.warnings; + }, + cancellation: function() { + return config.cancellation; + }, + monitoring: function() { + return config.monitoring; + }, + propagateFromFunction: function() { + return propagateFromFunction; + }, + boundValueFunction: function() { + return boundValueFunction; + }, + checkForgottenReturns: checkForgottenReturns, + setBounds: setBounds, + warn: warn, + deprecated: deprecated, + CapturedTrace: CapturedTrace, + fireDomEvent: fireDomEvent, + fireGlobalEvent: fireGlobalEvent +}; +}; + +},{"./errors":12,"./util":36}],10:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function returner() { + return this.value; +} +function thrower() { + throw this.reason; +} + +Promise.prototype["return"] = +Promise.prototype.thenReturn = function (value) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + returner, undefined, undefined, {value: value}, undefined); +}; + +Promise.prototype["throw"] = +Promise.prototype.thenThrow = function (reason) { + return this._then( + thrower, undefined, undefined, {reason: reason}, undefined); +}; + +Promise.prototype.catchThrow = function (reason) { + if (arguments.length <= 1) { + return this._then( + undefined, thrower, undefined, {reason: reason}, undefined); + } else { + var _reason = arguments[1]; + var handler = function() {throw _reason;}; + return this.caught(reason, handler); + } +}; + +Promise.prototype.catchReturn = function (value) { + if (arguments.length <= 1) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + undefined, returner, undefined, {value: value}, undefined); + } else { + var _value = arguments[1]; + if (_value instanceof Promise) _value.suppressUnhandledRejections(); + var handler = function() {return _value;}; + return this.caught(value, handler); + } +}; +}; + +},{}],11:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseReduce = Promise.reduce; +var PromiseAll = Promise.all; + +function promiseAllThis() { + return PromiseAll(this); +} + +function PromiseMapSeries(promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, INTERNAL); +} + +Promise.prototype.each = function (fn) { + return PromiseReduce(this, fn, INTERNAL, 0) + ._then(promiseAllThis, undefined, undefined, this, undefined); +}; + +Promise.prototype.mapSeries = function (fn) { + return PromiseReduce(this, fn, INTERNAL, INTERNAL); +}; + +Promise.each = function (promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, 0) + ._then(promiseAllThis, undefined, undefined, promises, undefined); +}; + +Promise.mapSeries = PromiseMapSeries; +}; + + +},{}],12:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var Objectfreeze = es5.freeze; +var util = _dereq_("./util"); +var inherits = util.inherits; +var notEnumerableProp = util.notEnumerableProp; + +function subError(nameProperty, defaultMessage) { + function SubError(message) { + if (!(this instanceof SubError)) return new SubError(message); + notEnumerableProp(this, "message", + typeof message === "string" ? message : defaultMessage); + notEnumerableProp(this, "name", nameProperty); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + Error.call(this); + } + } + inherits(SubError, Error); + return SubError; +} + +var _TypeError, _RangeError; +var Warning = subError("Warning", "warning"); +var CancellationError = subError("CancellationError", "cancellation error"); +var TimeoutError = subError("TimeoutError", "timeout error"); +var AggregateError = subError("AggregateError", "aggregate error"); +try { + _TypeError = TypeError; + _RangeError = RangeError; +} catch(e) { + _TypeError = subError("TypeError", "type error"); + _RangeError = subError("RangeError", "range error"); +} + +var methods = ("join pop push shift unshift slice filter forEach some " + + "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); + +for (var i = 0; i < methods.length; ++i) { + if (typeof Array.prototype[methods[i]] === "function") { + AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; + } +} + +es5.defineProperty(AggregateError.prototype, "length", { + value: 0, + configurable: false, + writable: true, + enumerable: true +}); +AggregateError.prototype["isOperational"] = true; +var level = 0; +AggregateError.prototype.toString = function() { + var indent = Array(level * 4 + 1).join(" "); + var ret = "\n" + indent + "AggregateError of:" + "\n"; + level++; + indent = Array(level * 4 + 1).join(" "); + for (var i = 0; i < this.length; ++i) { + var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; + var lines = str.split("\n"); + for (var j = 0; j < lines.length; ++j) { + lines[j] = indent + lines[j]; + } + str = lines.join("\n"); + ret += str + "\n"; + } + level--; + return ret; +}; + +function OperationalError(message) { + if (!(this instanceof OperationalError)) + return new OperationalError(message); + notEnumerableProp(this, "name", "OperationalError"); + notEnumerableProp(this, "message", message); + this.cause = message; + this["isOperational"] = true; + + if (message instanceof Error) { + notEnumerableProp(this, "message", message.message); + notEnumerableProp(this, "stack", message.stack); + } else if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + +} +inherits(OperationalError, Error); + +var errorTypes = Error["__BluebirdErrorTypes__"]; +if (!errorTypes) { + errorTypes = Objectfreeze({ + CancellationError: CancellationError, + TimeoutError: TimeoutError, + OperationalError: OperationalError, + RejectionError: OperationalError, + AggregateError: AggregateError + }); + es5.defineProperty(Error, "__BluebirdErrorTypes__", { + value: errorTypes, + writable: false, + enumerable: false, + configurable: false + }); +} + +module.exports = { + Error: Error, + TypeError: _TypeError, + RangeError: _RangeError, + CancellationError: errorTypes.CancellationError, + OperationalError: errorTypes.OperationalError, + TimeoutError: errorTypes.TimeoutError, + AggregateError: errorTypes.AggregateError, + Warning: Warning +}; + +},{"./es5":13,"./util":36}],13:[function(_dereq_,module,exports){ +var isES5 = (function(){ + "use strict"; + return this === undefined; +})(); + +if (isES5) { + module.exports = { + freeze: Object.freeze, + defineProperty: Object.defineProperty, + getDescriptor: Object.getOwnPropertyDescriptor, + keys: Object.keys, + names: Object.getOwnPropertyNames, + getPrototypeOf: Object.getPrototypeOf, + isArray: Array.isArray, + isES5: isES5, + propertyIsWritable: function(obj, prop) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + return !!(!descriptor || descriptor.writable || descriptor.set); + } + }; +} else { + var has = {}.hasOwnProperty; + var str = {}.toString; + var proto = {}.constructor.prototype; + + var ObjectKeys = function (o) { + var ret = []; + for (var key in o) { + if (has.call(o, key)) { + ret.push(key); + } + } + return ret; + }; + + var ObjectGetDescriptor = function(o, key) { + return {value: o[key]}; + }; + + var ObjectDefineProperty = function (o, key, desc) { + o[key] = desc.value; + return o; + }; + + var ObjectFreeze = function (obj) { + return obj; + }; + + var ObjectGetPrototypeOf = function (obj) { + try { + return Object(obj).constructor.prototype; + } + catch (e) { + return proto; + } + }; + + var ArrayIsArray = function (obj) { + try { + return str.call(obj) === "[object Array]"; + } + catch(e) { + return false; + } + }; + + module.exports = { + isArray: ArrayIsArray, + keys: ObjectKeys, + names: ObjectKeys, + defineProperty: ObjectDefineProperty, + getDescriptor: ObjectGetDescriptor, + freeze: ObjectFreeze, + getPrototypeOf: ObjectGetPrototypeOf, + isES5: isES5, + propertyIsWritable: function() { + return true; + } + }; +} + +},{}],14:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseMap = Promise.map; + +Promise.prototype.filter = function (fn, options) { + return PromiseMap(this, fn, options, INTERNAL); +}; + +Promise.filter = function (promises, fn, options) { + return PromiseMap(promises, fn, options, INTERNAL); +}; +}; + +},{}],15:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, tryConvertToPromise) { +var util = _dereq_("./util"); +var CancellationError = Promise.CancellationError; +var errorObj = util.errorObj; + +function PassThroughHandlerContext(promise, type, handler) { + this.promise = promise; + this.type = type; + this.handler = handler; + this.called = false; + this.cancelPromise = null; +} + +PassThroughHandlerContext.prototype.isFinallyHandler = function() { + return this.type === 0; +}; + +function FinallyHandlerCancelReaction(finallyHandler) { + this.finallyHandler = finallyHandler; +} + +FinallyHandlerCancelReaction.prototype._resultCancelled = function() { + checkCancel(this.finallyHandler); +}; + +function checkCancel(ctx, reason) { + if (ctx.cancelPromise != null) { + if (arguments.length > 1) { + ctx.cancelPromise._reject(reason); + } else { + ctx.cancelPromise._cancel(); + } + ctx.cancelPromise = null; + return true; + } + return false; +} + +function succeed() { + return finallyHandler.call(this, this.promise._target()._settledValue()); +} +function fail(reason) { + if (checkCancel(this, reason)) return; + errorObj.e = reason; + return errorObj; +} +function finallyHandler(reasonOrValue) { + var promise = this.promise; + var handler = this.handler; + + if (!this.called) { + this.called = true; + var ret = this.isFinallyHandler() + ? handler.call(promise._boundValue()) + : handler.call(promise._boundValue(), reasonOrValue); + if (ret !== undefined) { + promise._setReturnedNonUndefined(); + var maybePromise = tryConvertToPromise(ret, promise); + if (maybePromise instanceof Promise) { + if (this.cancelPromise != null) { + if (maybePromise._isCancelled()) { + var reason = + new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + errorObj.e = reason; + return errorObj; + } else if (maybePromise.isPending()) { + maybePromise._attachCancellationCallback( + new FinallyHandlerCancelReaction(this)); + } + } + return maybePromise._then( + succeed, fail, undefined, this, undefined); + } + } + } + + if (promise.isRejected()) { + checkCancel(this); + errorObj.e = reasonOrValue; + return errorObj; + } else { + checkCancel(this); + return reasonOrValue; + } +} + +Promise.prototype._passThrough = function(handler, type, success, fail) { + if (typeof handler !== "function") return this.then(); + return this._then(success, + fail, + undefined, + new PassThroughHandlerContext(this, type, handler), + undefined); +}; + +Promise.prototype.lastly = +Promise.prototype["finally"] = function (handler) { + return this._passThrough(handler, + 0, + finallyHandler, + finallyHandler); +}; + +Promise.prototype.tap = function (handler) { + return this._passThrough(handler, 1, finallyHandler); +}; + +return PassThroughHandlerContext; +}; + +},{"./util":36}],16:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, + apiRejection, + INTERNAL, + tryConvertToPromise, + Proxyable, + debug) { +var errors = _dereq_("./errors"); +var TypeError = errors.TypeError; +var util = _dereq_("./util"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +var yieldHandlers = []; + +function promiseFromYieldHandler(value, yieldHandlers, traceParent) { + for (var i = 0; i < yieldHandlers.length; ++i) { + traceParent._pushContext(); + var result = tryCatch(yieldHandlers[i])(value); + traceParent._popContext(); + if (result === errorObj) { + traceParent._pushContext(); + var ret = Promise.reject(errorObj.e); + traceParent._popContext(); + return ret; + } + var maybePromise = tryConvertToPromise(result, traceParent); + if (maybePromise instanceof Promise) return maybePromise; + } + return null; +} + +function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { + if (debug.cancellation()) { + var internal = new Promise(INTERNAL); + var _finallyPromise = this._finallyPromise = new Promise(INTERNAL); + this._promise = internal.lastly(function() { + return _finallyPromise; + }); + internal._captureStackTrace(); + internal._setOnCancel(this); + } else { + var promise = this._promise = new Promise(INTERNAL); + promise._captureStackTrace(); + } + this._stack = stack; + this._generatorFunction = generatorFunction; + this._receiver = receiver; + this._generator = undefined; + this._yieldHandlers = typeof yieldHandler === "function" + ? [yieldHandler].concat(yieldHandlers) + : yieldHandlers; + this._yieldedPromise = null; + this._cancellationPhase = false; +} +util.inherits(PromiseSpawn, Proxyable); + +PromiseSpawn.prototype._isResolved = function() { + return this._promise === null; +}; + +PromiseSpawn.prototype._cleanup = function() { + this._promise = this._generator = null; + if (debug.cancellation() && this._finallyPromise !== null) { + this._finallyPromise._fulfill(); + this._finallyPromise = null; + } +}; + +PromiseSpawn.prototype._promiseCancelled = function() { + if (this._isResolved()) return; + var implementsReturn = typeof this._generator["return"] !== "undefined"; + + var result; + if (!implementsReturn) { + var reason = new Promise.CancellationError( + "generator .return() sentinel"); + Promise.coroutine.returnSentinel = reason; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + result = tryCatch(this._generator["throw"]).call(this._generator, + reason); + this._promise._popContext(); + } else { + this._promise._pushContext(); + result = tryCatch(this._generator["return"]).call(this._generator, + undefined); + this._promise._popContext(); + } + this._cancellationPhase = true; + this._yieldedPromise = null; + this._continue(result); +}; + +PromiseSpawn.prototype._promiseFulfilled = function(value) { + this._yieldedPromise = null; + this._promise._pushContext(); + var result = tryCatch(this._generator.next).call(this._generator, value); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._promiseRejected = function(reason) { + this._yieldedPromise = null; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + var result = tryCatch(this._generator["throw"]) + .call(this._generator, reason); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._resultCancelled = function() { + if (this._yieldedPromise instanceof Promise) { + var promise = this._yieldedPromise; + this._yieldedPromise = null; + promise.cancel(); + } +}; + +PromiseSpawn.prototype.promise = function () { + return this._promise; +}; + +PromiseSpawn.prototype._run = function () { + this._generator = this._generatorFunction.call(this._receiver); + this._receiver = + this._generatorFunction = undefined; + this._promiseFulfilled(undefined); +}; + +PromiseSpawn.prototype._continue = function (result) { + var promise = this._promise; + if (result === errorObj) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._rejectCallback(result.e, false); + } + } + + var value = result.value; + if (result.done === true) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._resolveCallback(value); + } + } else { + var maybePromise = tryConvertToPromise(value, this._promise); + if (!(maybePromise instanceof Promise)) { + maybePromise = + promiseFromYieldHandler(maybePromise, + this._yieldHandlers, + this._promise); + if (maybePromise === null) { + this._promiseRejected( + new TypeError( + "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", value) + + "From coroutine:\u000a" + + this._stack.split("\n").slice(1, -7).join("\n") + ) + ); + return; + } + } + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + this._yieldedPromise = maybePromise; + maybePromise._proxy(this, null); + } else if (((bitField & 33554432) !== 0)) { + Promise._async.invoke( + this._promiseFulfilled, this, maybePromise._value() + ); + } else if (((bitField & 16777216) !== 0)) { + Promise._async.invoke( + this._promiseRejected, this, maybePromise._reason() + ); + } else { + this._promiseCancelled(); + } + } +}; + +Promise.coroutine = function (generatorFunction, options) { + if (typeof generatorFunction !== "function") { + throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var yieldHandler = Object(options).yieldHandler; + var PromiseSpawn$ = PromiseSpawn; + var stack = new Error().stack; + return function () { + var generator = generatorFunction.apply(this, arguments); + var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, + stack); + var ret = spawn.promise(); + spawn._generator = generator; + spawn._promiseFulfilled(undefined); + return ret; + }; +}; + +Promise.coroutine.addYieldHandler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + yieldHandlers.push(fn); +}; + +Promise.spawn = function (generatorFunction) { + debug.deprecated("Promise.spawn()", "Promise.coroutine()"); + if (typeof generatorFunction !== "function") { + return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var spawn = new PromiseSpawn(generatorFunction, this); + var ret = spawn.promise(); + spawn._run(Promise.spawn); + return ret; +}; +}; + +},{"./errors":12,"./util":36}],17:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, + getDomain) { +var util = _dereq_("./util"); +var canEvaluate = util.canEvaluate; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var reject; + +if (!true) { +if (canEvaluate) { + var thenCallback = function(i) { + return new Function("value", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = value; \n\ + holder.checkFulfillment(this); \n\ + ".replace(/Index/g, i)); + }; + + var promiseSetter = function(i) { + return new Function("promise", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = promise; \n\ + ".replace(/Index/g, i)); + }; + + var generateHolderClass = function(total) { + var props = new Array(total); + for (var i = 0; i < props.length; ++i) { + props[i] = "this.p" + (i+1); + } + var assignment = props.join(" = ") + " = null;"; + var cancellationCode= "var promise;\n" + props.map(function(prop) { + return " \n\ + promise = " + prop + "; \n\ + if (promise instanceof Promise) { \n\ + promise.cancel(); \n\ + } \n\ + "; + }).join("\n"); + var passedArguments = props.join(", "); + var name = "Holder$" + total; + + + var code = "return function(tryCatch, errorObj, Promise, async) { \n\ + 'use strict'; \n\ + function [TheName](fn) { \n\ + [TheProperties] \n\ + this.fn = fn; \n\ + this.asyncNeeded = true; \n\ + this.now = 0; \n\ + } \n\ + \n\ + [TheName].prototype._callFunction = function(promise) { \n\ + promise._pushContext(); \n\ + var ret = tryCatch(this.fn)([ThePassedArguments]); \n\ + promise._popContext(); \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(ret.e, false); \n\ + } else { \n\ + promise._resolveCallback(ret); \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype.checkFulfillment = function(promise) { \n\ + var now = ++this.now; \n\ + if (now === [TheTotal]) { \n\ + if (this.asyncNeeded) { \n\ + async.invoke(this._callFunction, this, promise); \n\ + } else { \n\ + this._callFunction(promise); \n\ + } \n\ + \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype._resultCancelled = function() { \n\ + [CancellationCode] \n\ + }; \n\ + \n\ + return [TheName]; \n\ + }(tryCatch, errorObj, Promise, async); \n\ + "; + + code = code.replace(/\[TheName\]/g, name) + .replace(/\[TheTotal\]/g, total) + .replace(/\[ThePassedArguments\]/g, passedArguments) + .replace(/\[TheProperties\]/g, assignment) + .replace(/\[CancellationCode\]/g, cancellationCode); + + return new Function("tryCatch", "errorObj", "Promise", "async", code) + (tryCatch, errorObj, Promise, async); + }; + + var holderClasses = []; + var thenCallbacks = []; + var promiseSetters = []; + + for (var i = 0; i < 8; ++i) { + holderClasses.push(generateHolderClass(i + 1)); + thenCallbacks.push(thenCallback(i + 1)); + promiseSetters.push(promiseSetter(i + 1)); + } + + reject = function (reason) { + this._reject(reason); + }; +}} + +Promise.join = function () { + var last = arguments.length - 1; + var fn; + if (last > 0 && typeof arguments[last] === "function") { + fn = arguments[last]; + if (!true) { + if (last <= 8 && canEvaluate) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var HolderClass = holderClasses[last - 1]; + var holder = new HolderClass(fn); + var callbacks = thenCallbacks; + + for (var i = 0; i < last; ++i) { + var maybePromise = tryConvertToPromise(arguments[i], ret); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + maybePromise._then(callbacks[i], reject, + undefined, ret, holder); + promiseSetters[i](maybePromise, holder); + holder.asyncNeeded = false; + } else if (((bitField & 33554432) !== 0)) { + callbacks[i].call(ret, + maybePromise._value(), holder); + } else if (((bitField & 16777216) !== 0)) { + ret._reject(maybePromise._reason()); + } else { + ret._cancel(); + } + } else { + callbacks[i].call(ret, maybePromise, holder); + } + } + + if (!ret._isFateSealed()) { + if (holder.asyncNeeded) { + var domain = getDomain(); + if (domain !== null) { + holder.fn = util.domainBind(domain, holder.fn); + } + } + ret._setAsyncGuaranteed(); + ret._setOnCancel(holder); + } + return ret; + } + } + } + var args = [].slice.call(arguments);; + if (fn) args.pop(); + var ret = new PromiseArray(args).promise(); + return fn !== undefined ? ret.spread(fn) : ret; +}; + +}; + +},{"./util":36}],18:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +function MappingPromiseArray(promises, fn, limit, _filter) { + this.constructor$(promises); + this._promise._captureStackTrace(); + var domain = getDomain(); + this._callback = domain === null ? fn : util.domainBind(domain, fn); + this._preservedValues = _filter === INTERNAL + ? new Array(this.length()) + : null; + this._limit = limit; + this._inFlight = 0; + this._queue = []; + async.invoke(this._asyncInit, this, undefined); +} +util.inherits(MappingPromiseArray, PromiseArray); + +MappingPromiseArray.prototype._asyncInit = function() { + this._init$(undefined, -2); +}; + +MappingPromiseArray.prototype._init = function () {}; + +MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { + var values = this._values; + var length = this.length(); + var preservedValues = this._preservedValues; + var limit = this._limit; + + if (index < 0) { + index = (index * -1) - 1; + values[index] = value; + if (limit >= 1) { + this._inFlight--; + this._drainQueue(); + if (this._isResolved()) return true; + } + } else { + if (limit >= 1 && this._inFlight >= limit) { + values[index] = value; + this._queue.push(index); + return false; + } + if (preservedValues !== null) preservedValues[index] = value; + + var promise = this._promise; + var callback = this._callback; + var receiver = promise._boundValue(); + promise._pushContext(); + var ret = tryCatch(callback).call(receiver, value, index, length); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + preservedValues !== null ? "Promise.filter" : "Promise.map", + promise + ); + if (ret === errorObj) { + this._reject(ret.e); + return true; + } + + var maybePromise = tryConvertToPromise(ret, this._promise); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + if (limit >= 1) this._inFlight++; + values[index] = maybePromise; + maybePromise._proxy(this, (index + 1) * -1); + return false; + } else if (((bitField & 33554432) !== 0)) { + ret = maybePromise._value(); + } else if (((bitField & 16777216) !== 0)) { + this._reject(maybePromise._reason()); + return true; + } else { + this._cancel(); + return true; + } + } + values[index] = ret; + } + var totalResolved = ++this._totalResolved; + if (totalResolved >= length) { + if (preservedValues !== null) { + this._filter(values, preservedValues); + } else { + this._resolve(values); + } + return true; + } + return false; +}; + +MappingPromiseArray.prototype._drainQueue = function () { + var queue = this._queue; + var limit = this._limit; + var values = this._values; + while (queue.length > 0 && this._inFlight < limit) { + if (this._isResolved()) return; + var index = queue.pop(); + this._promiseFulfilled(values[index], index); + } +}; + +MappingPromiseArray.prototype._filter = function (booleans, values) { + var len = values.length; + var ret = new Array(len); + var j = 0; + for (var i = 0; i < len; ++i) { + if (booleans[i]) ret[j++] = values[i]; + } + ret.length = j; + this._resolve(ret); +}; + +MappingPromiseArray.prototype.preservedValues = function () { + return this._preservedValues; +}; + +function map(promises, fn, options, _filter) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + + var limit = 0; + if (options !== undefined) { + if (typeof options === "object" && options !== null) { + if (typeof options.concurrency !== "number") { + return Promise.reject( + new TypeError("'concurrency' must be a number but it is " + + util.classString(options.concurrency))); + } + limit = options.concurrency; + } else { + return Promise.reject(new TypeError( + "options argument must be an object but it is " + + util.classString(options))); + } + } + limit = typeof limit === "number" && + isFinite(limit) && limit >= 1 ? limit : 0; + return new MappingPromiseArray(promises, fn, limit, _filter).promise(); +} + +Promise.prototype.map = function (fn, options) { + return map(this, fn, options, null); +}; + +Promise.map = function (promises, fn, options, _filter) { + return map(promises, fn, options, _filter); +}; + + +}; + +},{"./util":36}],19:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; + +Promise.method = function (fn) { + if (typeof fn !== "function") { + throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); + } + return function () { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value = tryCatch(fn).apply(this, arguments); + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.method", ret); + ret._resolveFromSyncValue(value); + return ret; + }; +}; + +Promise.attempt = Promise["try"] = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value; + if (arguments.length > 1) { + debug.deprecated("calling Promise.try with more than 1 argument"); + var arg = arguments[1]; + var ctx = arguments[2]; + value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) + : tryCatch(fn).call(ctx, arg); + } else { + value = tryCatch(fn)(); + } + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.try", ret); + ret._resolveFromSyncValue(value); + return ret; +}; + +Promise.prototype._resolveFromSyncValue = function (value) { + if (value === util.errorObj) { + this._rejectCallback(value.e, false); + } else { + this._resolveCallback(value, true); + } +}; +}; + +},{"./util":36}],20:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var maybeWrapAsError = util.maybeWrapAsError; +var errors = _dereq_("./errors"); +var OperationalError = errors.OperationalError; +var es5 = _dereq_("./es5"); + +function isUntypedError(obj) { + return obj instanceof Error && + es5.getPrototypeOf(obj) === Error.prototype; +} + +var rErrorKey = /^(?:name|message|stack|cause)$/; +function wrapAsOperationalError(obj) { + var ret; + if (isUntypedError(obj)) { + ret = new OperationalError(obj); + ret.name = obj.name; + ret.message = obj.message; + ret.stack = obj.stack; + var keys = es5.keys(obj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (!rErrorKey.test(key)) { + ret[key] = obj[key]; + } + } + return ret; + } + util.markAsOriginatingFromRejection(obj); + return obj; +} + +function nodebackForPromise(promise, multiArgs) { + return function(err, value) { + if (promise === null) return; + if (err) { + var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } else if (!multiArgs) { + promise._fulfill(value); + } else { + var args = [].slice.call(arguments, 1);; + promise._fulfill(args); + } + promise = null; + }; +} + +module.exports = nodebackForPromise; + +},{"./errors":12,"./es5":13,"./util":36}],21:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +var util = _dereq_("./util"); +var async = Promise._async; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function spreadAdapter(val, nodeback) { + var promise = this; + if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); + var ret = + tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +function successAdapter(val, nodeback) { + var promise = this; + var receiver = promise._boundValue(); + var ret = val === undefined + ? tryCatch(nodeback).call(receiver, null) + : tryCatch(nodeback).call(receiver, null, val); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} +function errorAdapter(reason, nodeback) { + var promise = this; + if (!reason) { + var newReason = new Error(reason + ""); + newReason.cause = reason; + reason = newReason; + } + var ret = tryCatch(nodeback).call(promise._boundValue(), reason); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, + options) { + if (typeof nodeback == "function") { + var adapter = successAdapter; + if (options !== undefined && Object(options).spread) { + adapter = spreadAdapter; + } + this._then( + adapter, + errorAdapter, + undefined, + this, + nodeback + ); + } + return this; +}; +}; + +},{"./util":36}],22:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function() { +var makeSelfResolutionError = function () { + return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var reflectHandler = function() { + return new Promise.PromiseInspection(this._target()); +}; +var apiRejection = function(msg) { + return Promise.reject(new TypeError(msg)); +}; +function Proxyable() {} +var UNDEFINED_BINDING = {}; +var util = _dereq_("./util"); + +var getDomain; +if (util.isNode) { + getDomain = function() { + var ret = process.domain; + if (ret === undefined) ret = null; + return ret; + }; +} else { + getDomain = function() { + return null; + }; +} +util.notEnumerableProp(Promise, "_getDomain", getDomain); + +var es5 = _dereq_("./es5"); +var Async = _dereq_("./async"); +var async = new Async(); +es5.defineProperty(Promise, "_async", {value: async}); +var errors = _dereq_("./errors"); +var TypeError = Promise.TypeError = errors.TypeError; +Promise.RangeError = errors.RangeError; +var CancellationError = Promise.CancellationError = errors.CancellationError; +Promise.TimeoutError = errors.TimeoutError; +Promise.OperationalError = errors.OperationalError; +Promise.RejectionError = errors.OperationalError; +Promise.AggregateError = errors.AggregateError; +var INTERNAL = function(){}; +var APPLY = {}; +var NEXT_FILTER = {}; +var tryConvertToPromise = _dereq_("./thenables")(Promise, INTERNAL); +var PromiseArray = + _dereq_("./promise_array")(Promise, INTERNAL, + tryConvertToPromise, apiRejection, Proxyable); +var Context = _dereq_("./context")(Promise); + /*jshint unused:false*/ +var createContext = Context.create; +var debug = _dereq_("./debuggability")(Promise, Context); +var CapturedTrace = debug.CapturedTrace; +var PassThroughHandlerContext = + _dereq_("./finally")(Promise, tryConvertToPromise); +var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER); +var nodebackForPromise = _dereq_("./nodeback"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +function check(self, executor) { + if (typeof executor !== "function") { + throw new TypeError("expecting a function but got " + util.classString(executor)); + } + if (self.constructor !== Promise) { + throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } +} + +function Promise(executor) { + this._bitField = 0; + this._fulfillmentHandler0 = undefined; + this._rejectionHandler0 = undefined; + this._promise0 = undefined; + this._receiver0 = undefined; + if (executor !== INTERNAL) { + check(this, executor); + this._resolveFromExecutor(executor); + } + this._promiseCreated(); + this._fireEvent("promiseCreated", this); +} + +Promise.prototype.toString = function () { + return "[object Promise]"; +}; + +Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { + var len = arguments.length; + if (len > 1) { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (util.isObject(item)) { + catchInstances[j++] = item; + } else { + return apiRejection("expecting an object but got " + + "A catch statement predicate " + util.classString(item)); + } + } + catchInstances.length = j; + fn = arguments[i]; + return this.then(undefined, catchFilter(catchInstances, fn, this)); + } + return this.then(undefined, fn); +}; + +Promise.prototype.reflect = function () { + return this._then(reflectHandler, + reflectHandler, undefined, this, undefined); +}; + +Promise.prototype.then = function (didFulfill, didReject) { + if (debug.warnings() && arguments.length > 0 && + typeof didFulfill !== "function" && + typeof didReject !== "function") { + var msg = ".then() only accepts functions but was passed: " + + util.classString(didFulfill); + if (arguments.length > 1) { + msg += ", " + util.classString(didReject); + } + this._warn(msg); + } + return this._then(didFulfill, didReject, undefined, undefined, undefined); +}; + +Promise.prototype.done = function (didFulfill, didReject) { + var promise = + this._then(didFulfill, didReject, undefined, undefined, undefined); + promise._setIsFinal(); +}; + +Promise.prototype.spread = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + return this.all()._then(fn, undefined, undefined, APPLY, undefined); +}; + +Promise.prototype.toJSON = function () { + var ret = { + isFulfilled: false, + isRejected: false, + fulfillmentValue: undefined, + rejectionReason: undefined + }; + if (this.isFulfilled()) { + ret.fulfillmentValue = this.value(); + ret.isFulfilled = true; + } else if (this.isRejected()) { + ret.rejectionReason = this.reason(); + ret.isRejected = true; + } + return ret; +}; + +Promise.prototype.all = function () { + if (arguments.length > 0) { + this._warn(".all() was passed arguments but it does not take any"); + } + return new PromiseArray(this).promise(); +}; + +Promise.prototype.error = function (fn) { + return this.caught(util.originatesFromRejection, fn); +}; + +Promise.getNewLibraryCopy = module.exports; + +Promise.is = function (val) { + return val instanceof Promise; +}; + +Promise.fromNode = Promise.fromCallback = function(fn) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs + : false; + var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); + if (result === errorObj) { + ret._rejectCallback(result.e, true); + } + if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.all = function (promises) { + return new PromiseArray(promises).promise(); +}; + +Promise.cast = function (obj) { + var ret = tryConvertToPromise(obj); + if (!(ret instanceof Promise)) { + ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._setFulfilled(); + ret._rejectionHandler0 = obj; + } + return ret; +}; + +Promise.resolve = Promise.fulfilled = Promise.cast; + +Promise.reject = Promise.rejected = function (reason) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._rejectCallback(reason, true); + return ret; +}; + +Promise.setScheduler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + return async.setScheduler(fn); +}; + +Promise.prototype._then = function ( + didFulfill, + didReject, + _, receiver, + internalData +) { + var haveInternalData = internalData !== undefined; + var promise = haveInternalData ? internalData : new Promise(INTERNAL); + var target = this._target(); + var bitField = target._bitField; + + if (!haveInternalData) { + promise._propagateFrom(this, 3); + promise._captureStackTrace(); + if (receiver === undefined && + ((this._bitField & 2097152) !== 0)) { + if (!((bitField & 50397184) === 0)) { + receiver = this._boundValue(); + } else { + receiver = target === this ? undefined : this._boundTo; + } + } + this._fireEvent("promiseChained", this, promise); + } + + var domain = getDomain(); + if (!((bitField & 50397184) === 0)) { + var handler, value, settler = target._settlePromiseCtx; + if (((bitField & 33554432) !== 0)) { + value = target._rejectionHandler0; + handler = didFulfill; + } else if (((bitField & 16777216) !== 0)) { + value = target._fulfillmentHandler0; + handler = didReject; + target._unsetRejectionIsUnhandled(); + } else { + settler = target._settlePromiseLateCancellationObserver; + value = new CancellationError("late cancellation observer"); + target._attachExtraTrace(value); + handler = didReject; + } + + async.invoke(settler, target, { + handler: domain === null ? handler + : (typeof handler === "function" && + util.domainBind(domain, handler)), + promise: promise, + receiver: receiver, + value: value + }); + } else { + target._addCallbacks(didFulfill, didReject, promise, receiver, domain); + } + + return promise; +}; + +Promise.prototype._length = function () { + return this._bitField & 65535; +}; + +Promise.prototype._isFateSealed = function () { + return (this._bitField & 117506048) !== 0; +}; + +Promise.prototype._isFollowing = function () { + return (this._bitField & 67108864) === 67108864; +}; + +Promise.prototype._setLength = function (len) { + this._bitField = (this._bitField & -65536) | + (len & 65535); +}; + +Promise.prototype._setFulfilled = function () { + this._bitField = this._bitField | 33554432; + this._fireEvent("promiseFulfilled", this); +}; + +Promise.prototype._setRejected = function () { + this._bitField = this._bitField | 16777216; + this._fireEvent("promiseRejected", this); +}; + +Promise.prototype._setFollowing = function () { + this._bitField = this._bitField | 67108864; + this._fireEvent("promiseResolved", this); +}; + +Promise.prototype._setIsFinal = function () { + this._bitField = this._bitField | 4194304; +}; + +Promise.prototype._isFinal = function () { + return (this._bitField & 4194304) > 0; +}; + +Promise.prototype._unsetCancelled = function() { + this._bitField = this._bitField & (~65536); +}; + +Promise.prototype._setCancelled = function() { + this._bitField = this._bitField | 65536; + this._fireEvent("promiseCancelled", this); +}; + +Promise.prototype._setWillBeCancelled = function() { + this._bitField = this._bitField | 8388608; +}; + +Promise.prototype._setAsyncGuaranteed = function() { + if (async.hasCustomScheduler()) return; + this._bitField = this._bitField | 134217728; +}; + +Promise.prototype._receiverAt = function (index) { + var ret = index === 0 ? this._receiver0 : this[ + index * 4 - 4 + 3]; + if (ret === UNDEFINED_BINDING) { + return undefined; + } else if (ret === undefined && this._isBound()) { + return this._boundValue(); + } + return ret; +}; + +Promise.prototype._promiseAt = function (index) { + return this[ + index * 4 - 4 + 2]; +}; + +Promise.prototype._fulfillmentHandlerAt = function (index) { + return this[ + index * 4 - 4 + 0]; +}; + +Promise.prototype._rejectionHandlerAt = function (index) { + return this[ + index * 4 - 4 + 1]; +}; + +Promise.prototype._boundValue = function() {}; + +Promise.prototype._migrateCallback0 = function (follower) { + var bitField = follower._bitField; + var fulfill = follower._fulfillmentHandler0; + var reject = follower._rejectionHandler0; + var promise = follower._promise0; + var receiver = follower._receiverAt(0); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._migrateCallbackAt = function (follower, index) { + var fulfill = follower._fulfillmentHandlerAt(index); + var reject = follower._rejectionHandlerAt(index); + var promise = follower._promiseAt(index); + var receiver = follower._receiverAt(index); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._addCallbacks = function ( + fulfill, + reject, + promise, + receiver, + domain +) { + var index = this._length(); + + if (index >= 65535 - 4) { + index = 0; + this._setLength(0); + } + + if (index === 0) { + this._promise0 = promise; + this._receiver0 = receiver; + if (typeof fulfill === "function") { + this._fulfillmentHandler0 = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this._rejectionHandler0 = + domain === null ? reject : util.domainBind(domain, reject); + } + } else { + var base = index * 4 - 4; + this[base + 2] = promise; + this[base + 3] = receiver; + if (typeof fulfill === "function") { + this[base + 0] = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this[base + 1] = + domain === null ? reject : util.domainBind(domain, reject); + } + } + this._setLength(index + 1); + return index; +}; + +Promise.prototype._proxy = function (proxyable, arg) { + this._addCallbacks(undefined, undefined, arg, proxyable, null); +}; + +Promise.prototype._resolveCallback = function(value, shouldBind) { + if (((this._bitField & 117506048) !== 0)) return; + if (value === this) + return this._rejectCallback(makeSelfResolutionError(), false); + var maybePromise = tryConvertToPromise(value, this); + if (!(maybePromise instanceof Promise)) return this._fulfill(value); + + if (shouldBind) this._propagateFrom(maybePromise, 2); + + var promise = maybePromise._target(); + + if (promise === this) { + this._reject(makeSelfResolutionError()); + return; + } + + var bitField = promise._bitField; + if (((bitField & 50397184) === 0)) { + var len = this._length(); + if (len > 0) promise._migrateCallback0(this); + for (var i = 1; i < len; ++i) { + promise._migrateCallbackAt(this, i); + } + this._setFollowing(); + this._setLength(0); + this._setFollowee(promise); + } else if (((bitField & 33554432) !== 0)) { + this._fulfill(promise._value()); + } else if (((bitField & 16777216) !== 0)) { + this._reject(promise._reason()); + } else { + var reason = new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + this._reject(reason); + } +}; + +Promise.prototype._rejectCallback = +function(reason, synchronous, ignoreNonErrorWarnings) { + var trace = util.ensureErrorObject(reason); + var hasStack = trace === reason; + if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { + var message = "a promise was rejected with a non-error: " + + util.classString(reason); + this._warn(message, true); + } + this._attachExtraTrace(trace, synchronous ? hasStack : false); + this._reject(reason); +}; + +Promise.prototype._resolveFromExecutor = function (executor) { + var promise = this; + this._captureStackTrace(); + this._pushContext(); + var synchronous = true; + var r = this._execute(executor, function(value) { + promise._resolveCallback(value); + }, function (reason) { + promise._rejectCallback(reason, synchronous); + }); + synchronous = false; + this._popContext(); + + if (r !== undefined) { + promise._rejectCallback(r, true); + } +}; + +Promise.prototype._settlePromiseFromHandler = function ( + handler, receiver, value, promise +) { + var bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + promise._pushContext(); + var x; + if (receiver === APPLY) { + if (!value || typeof value.length !== "number") { + x = errorObj; + x.e = new TypeError("cannot .spread() a non-array: " + + util.classString(value)); + } else { + x = tryCatch(handler).apply(this._boundValue(), value); + } + } else { + x = tryCatch(handler).call(receiver, value); + } + var promiseCreated = promise._popContext(); + bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + + if (x === NEXT_FILTER) { + promise._reject(value); + } else if (x === errorObj) { + promise._rejectCallback(x.e, false); + } else { + debug.checkForgottenReturns(x, promiseCreated, "", promise, this); + promise._resolveCallback(x); + } +}; + +Promise.prototype._target = function() { + var ret = this; + while (ret._isFollowing()) ret = ret._followee(); + return ret; +}; + +Promise.prototype._followee = function() { + return this._rejectionHandler0; +}; + +Promise.prototype._setFollowee = function(promise) { + this._rejectionHandler0 = promise; +}; + +Promise.prototype._settlePromise = function(promise, handler, receiver, value) { + var isPromise = promise instanceof Promise; + var bitField = this._bitField; + var asyncGuaranteed = ((bitField & 134217728) !== 0); + if (((bitField & 65536) !== 0)) { + if (isPromise) promise._invokeInternalOnCancel(); + + if (receiver instanceof PassThroughHandlerContext && + receiver.isFinallyHandler()) { + receiver.cancelPromise = promise; + if (tryCatch(handler).call(receiver, value) === errorObj) { + promise._reject(errorObj.e); + } + } else if (handler === reflectHandler) { + promise._fulfill(reflectHandler.call(receiver)); + } else if (receiver instanceof Proxyable) { + receiver._promiseCancelled(promise); + } else if (isPromise || promise instanceof PromiseArray) { + promise._cancel(); + } else { + receiver.cancel(); + } + } else if (typeof handler === "function") { + if (!isPromise) { + handler.call(receiver, value, promise); + } else { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (receiver instanceof Proxyable) { + if (!receiver._isResolved()) { + if (((bitField & 33554432) !== 0)) { + receiver._promiseFulfilled(value, promise); + } else { + receiver._promiseRejected(value, promise); + } + } + } else if (isPromise) { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + if (((bitField & 33554432) !== 0)) { + promise._fulfill(value); + } else { + promise._reject(value); + } + } +}; + +Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { + var handler = ctx.handler; + var promise = ctx.promise; + var receiver = ctx.receiver; + var value = ctx.value; + if (typeof handler === "function") { + if (!(promise instanceof Promise)) { + handler.call(receiver, value, promise); + } else { + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (promise instanceof Promise) { + promise._reject(value); + } +}; + +Promise.prototype._settlePromiseCtx = function(ctx) { + this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); +}; + +Promise.prototype._settlePromise0 = function(handler, value, bitField) { + var promise = this._promise0; + var receiver = this._receiverAt(0); + this._promise0 = undefined; + this._receiver0 = undefined; + this._settlePromise(promise, handler, receiver, value); +}; + +Promise.prototype._clearCallbackDataAtIndex = function(index) { + var base = index * 4 - 4; + this[base + 2] = + this[base + 3] = + this[base + 0] = + this[base + 1] = undefined; +}; + +Promise.prototype._fulfill = function (value) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + if (value === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._reject(err); + } + this._setFulfilled(); + this._rejectionHandler0 = value; + + if ((bitField & 65535) > 0) { + if (((bitField & 134217728) !== 0)) { + this._settlePromises(); + } else { + async.settlePromises(this); + } + } +}; + +Promise.prototype._reject = function (reason) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + this._setRejected(); + this._fulfillmentHandler0 = reason; + + if (this._isFinal()) { + return async.fatalError(reason, util.isNode); + } + + if ((bitField & 65535) > 0) { + async.settlePromises(this); + } else { + this._ensurePossibleRejectionHandled(); + } +}; + +Promise.prototype._fulfillPromises = function (len, value) { + for (var i = 1; i < len; i++) { + var handler = this._fulfillmentHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, value); + } +}; + +Promise.prototype._rejectPromises = function (len, reason) { + for (var i = 1; i < len; i++) { + var handler = this._rejectionHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, reason); + } +}; + +Promise.prototype._settlePromises = function () { + var bitField = this._bitField; + var len = (bitField & 65535); + + if (len > 0) { + if (((bitField & 16842752) !== 0)) { + var reason = this._fulfillmentHandler0; + this._settlePromise0(this._rejectionHandler0, reason, bitField); + this._rejectPromises(len, reason); + } else { + var value = this._rejectionHandler0; + this._settlePromise0(this._fulfillmentHandler0, value, bitField); + this._fulfillPromises(len, value); + } + this._setLength(0); + } + this._clearCancellationData(); +}; + +Promise.prototype._settledValue = function() { + var bitField = this._bitField; + if (((bitField & 33554432) !== 0)) { + return this._rejectionHandler0; + } else if (((bitField & 16777216) !== 0)) { + return this._fulfillmentHandler0; + } +}; + +function deferResolve(v) {this.promise._resolveCallback(v);} +function deferReject(v) {this.promise._rejectCallback(v, false);} + +Promise.defer = Promise.pending = function() { + debug.deprecated("Promise.defer", "new Promise"); + var promise = new Promise(INTERNAL); + return { + promise: promise, + resolve: deferResolve, + reject: deferReject + }; +}; + +util.notEnumerableProp(Promise, + "_makeSelfResolutionError", + makeSelfResolutionError); + +_dereq_("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, + debug); +_dereq_("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); +_dereq_("./cancel")(Promise, PromiseArray, apiRejection, debug); +_dereq_("./direct_resolve")(Promise); +_dereq_("./synchronous_inspection")(Promise); +_dereq_("./join")( + Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain); +Promise.Promise = Promise; +Promise.version = "3.4.7"; +_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +_dereq_('./call_get.js')(Promise); +_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug); +_dereq_('./timers.js')(Promise, INTERNAL, debug); +_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug); +_dereq_('./nodeify.js')(Promise); +_dereq_('./promisify.js')(Promise, INTERNAL); +_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection); +_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection); +_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +_dereq_('./settle.js')(Promise, PromiseArray, debug); +_dereq_('./some.js')(Promise, PromiseArray, apiRejection); +_dereq_('./filter.js')(Promise, INTERNAL); +_dereq_('./each.js')(Promise, INTERNAL); +_dereq_('./any.js')(Promise); + + util.toFastProperties(Promise); + util.toFastProperties(Promise.prototype); + function fillTypes(value) { + var p = new Promise(INTERNAL); + p._fulfillmentHandler0 = value; + p._rejectionHandler0 = value; + p._promise0 = value; + p._receiver0 = value; + } + // Complete slack tracking, opt out of field-type tracking and + // stabilize map + fillTypes({a: 1}); + fillTypes({b: 2}); + fillTypes({c: 3}); + fillTypes(1); + fillTypes(function(){}); + fillTypes(undefined); + fillTypes(false); + fillTypes(new Promise(INTERNAL)); + debug.setBounds(Async.firstLineError, util.lastLineError); + return Promise; + +}; + +},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, + apiRejection, Proxyable) { +var util = _dereq_("./util"); +var isArray = util.isArray; + +function toResolutionValue(val) { + switch(val) { + case -2: return []; + case -3: return {}; + } +} + +function PromiseArray(values) { + var promise = this._promise = new Promise(INTERNAL); + if (values instanceof Promise) { + promise._propagateFrom(values, 3); + } + promise._setOnCancel(this); + this._values = values; + this._length = 0; + this._totalResolved = 0; + this._init(undefined, -2); +} +util.inherits(PromiseArray, Proxyable); + +PromiseArray.prototype.length = function () { + return this._length; +}; + +PromiseArray.prototype.promise = function () { + return this._promise; +}; + +PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { + var values = tryConvertToPromise(this._values, this._promise); + if (values instanceof Promise) { + values = values._target(); + var bitField = values._bitField; + ; + this._values = values; + + if (((bitField & 50397184) === 0)) { + this._promise._setAsyncGuaranteed(); + return values._then( + init, + this._reject, + undefined, + this, + resolveValueIfEmpty + ); + } else if (((bitField & 33554432) !== 0)) { + values = values._value(); + } else if (((bitField & 16777216) !== 0)) { + return this._reject(values._reason()); + } else { + return this._cancel(); + } + } + values = util.asArray(values); + if (values === null) { + var err = apiRejection( + "expecting an array or an iterable object but got " + util.classString(values)).reason(); + this._promise._rejectCallback(err, false); + return; + } + + if (values.length === 0) { + if (resolveValueIfEmpty === -5) { + this._resolveEmptyArray(); + } + else { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + } + return; + } + this._iterate(values); +}; + +PromiseArray.prototype._iterate = function(values) { + var len = this.getActualLength(values.length); + this._length = len; + this._values = this.shouldCopyValues() ? new Array(len) : this._values; + var result = this._promise; + var isResolved = false; + var bitField = null; + for (var i = 0; i < len; ++i) { + var maybePromise = tryConvertToPromise(values[i], result); + + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + bitField = maybePromise._bitField; + } else { + bitField = null; + } + + if (isResolved) { + if (bitField !== null) { + maybePromise.suppressUnhandledRejections(); + } + } else if (bitField !== null) { + if (((bitField & 50397184) === 0)) { + maybePromise._proxy(this, i); + this._values[i] = maybePromise; + } else if (((bitField & 33554432) !== 0)) { + isResolved = this._promiseFulfilled(maybePromise._value(), i); + } else if (((bitField & 16777216) !== 0)) { + isResolved = this._promiseRejected(maybePromise._reason(), i); + } else { + isResolved = this._promiseCancelled(i); + } + } else { + isResolved = this._promiseFulfilled(maybePromise, i); + } + } + if (!isResolved) result._setAsyncGuaranteed(); +}; + +PromiseArray.prototype._isResolved = function () { + return this._values === null; +}; + +PromiseArray.prototype._resolve = function (value) { + this._values = null; + this._promise._fulfill(value); +}; + +PromiseArray.prototype._cancel = function() { + if (this._isResolved() || !this._promise._isCancellable()) return; + this._values = null; + this._promise._cancel(); +}; + +PromiseArray.prototype._reject = function (reason) { + this._values = null; + this._promise._rejectCallback(reason, false); +}; + +PromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +PromiseArray.prototype._promiseCancelled = function() { + this._cancel(); + return true; +}; + +PromiseArray.prototype._promiseRejected = function (reason) { + this._totalResolved++; + this._reject(reason); + return true; +}; + +PromiseArray.prototype._resultCancelled = function() { + if (this._isResolved()) return; + var values = this._values; + this._cancel(); + if (values instanceof Promise) { + values.cancel(); + } else { + for (var i = 0; i < values.length; ++i) { + if (values[i] instanceof Promise) { + values[i].cancel(); + } + } + } +}; + +PromiseArray.prototype.shouldCopyValues = function () { + return true; +}; + +PromiseArray.prototype.getActualLength = function (len) { + return len; +}; + +return PromiseArray; +}; + +},{"./util":36}],24:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var THIS = {}; +var util = _dereq_("./util"); +var nodebackForPromise = _dereq_("./nodeback"); +var withAppended = util.withAppended; +var maybeWrapAsError = util.maybeWrapAsError; +var canEvaluate = util.canEvaluate; +var TypeError = _dereq_("./errors").TypeError; +var defaultSuffix = "Async"; +var defaultPromisified = {__isPromisified__: true}; +var noCopyProps = [ + "arity", "length", + "name", + "arguments", + "caller", + "callee", + "prototype", + "__isPromisified__" +]; +var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); + +var defaultFilter = function(name) { + return util.isIdentifier(name) && + name.charAt(0) !== "_" && + name !== "constructor"; +}; + +function propsFilter(key) { + return !noCopyPropsPattern.test(key); +} + +function isPromisified(fn) { + try { + return fn.__isPromisified__ === true; + } + catch (e) { + return false; + } +} + +function hasPromisified(obj, key, suffix) { + var val = util.getDataPropertyOrDefault(obj, key + suffix, + defaultPromisified); + return val ? isPromisified(val) : false; +} +function checkValid(ret, suffix, suffixRegexp) { + for (var i = 0; i < ret.length; i += 2) { + var key = ret[i]; + if (suffixRegexp.test(key)) { + var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); + for (var j = 0; j < ret.length; j += 2) { + if (ret[j] === keyWithoutAsyncSuffix) { + throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a" + .replace("%s", suffix)); + } + } + } + } +} + +function promisifiableMethods(obj, suffix, suffixRegexp, filter) { + var keys = util.inheritedDataKeys(obj); + var ret = []; + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var value = obj[key]; + var passesDefaultFilter = filter === defaultFilter + ? true : defaultFilter(key, value, obj); + if (typeof value === "function" && + !isPromisified(value) && + !hasPromisified(obj, key, suffix) && + filter(key, value, obj, passesDefaultFilter)) { + ret.push(key, value); + } + } + checkValid(ret, suffix, suffixRegexp); + return ret; +} + +var escapeIdentRegex = function(str) { + return str.replace(/([$])/, "\\$"); +}; + +var makeNodePromisifiedEval; +if (!true) { +var switchCaseArgumentOrder = function(likelyArgumentCount) { + var ret = [likelyArgumentCount]; + var min = Math.max(0, likelyArgumentCount - 1 - 3); + for(var i = likelyArgumentCount - 1; i >= min; --i) { + ret.push(i); + } + for(var i = likelyArgumentCount + 1; i <= 3; ++i) { + ret.push(i); + } + return ret; +}; + +var argumentSequence = function(argumentCount) { + return util.filledRange(argumentCount, "_arg", ""); +}; + +var parameterDeclaration = function(parameterCount) { + return util.filledRange( + Math.max(parameterCount, 3), "_arg", ""); +}; + +var parameterCount = function(fn) { + if (typeof fn.length === "number") { + return Math.max(Math.min(fn.length, 1023 + 1), 0); + } + return 0; +}; + +makeNodePromisifiedEval = +function(callback, receiver, originalName, fn, _, multiArgs) { + var newParameterCount = Math.max(0, parameterCount(fn) - 1); + var argumentOrder = switchCaseArgumentOrder(newParameterCount); + var shouldProxyThis = typeof callback === "string" || receiver === THIS; + + function generateCallForArgumentCount(count) { + var args = argumentSequence(count).join(", "); + var comma = count > 0 ? ", " : ""; + var ret; + if (shouldProxyThis) { + ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; + } else { + ret = receiver === undefined + ? "ret = callback({{args}}, nodeback); break;\n" + : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; + } + return ret.replace("{{args}}", args).replace(", ", comma); + } + + function generateArgumentSwitchCase() { + var ret = ""; + for (var i = 0; i < argumentOrder.length; ++i) { + ret += "case " + argumentOrder[i] +":" + + generateCallForArgumentCount(argumentOrder[i]); + } + + ret += " \n\ + default: \n\ + var args = new Array(len + 1); \n\ + var i = 0; \n\ + for (var i = 0; i < len; ++i) { \n\ + args[i] = arguments[i]; \n\ + } \n\ + args[i] = nodeback; \n\ + [CodeForCall] \n\ + break; \n\ + ".replace("[CodeForCall]", (shouldProxyThis + ? "ret = callback.apply(this, args);\n" + : "ret = callback.apply(receiver, args);\n")); + return ret; + } + + var getFunctionCode = typeof callback === "string" + ? ("this != null ? this['"+callback+"'] : fn") + : "fn"; + var body = "'use strict'; \n\ + var ret = function (Parameters) { \n\ + 'use strict'; \n\ + var len = arguments.length; \n\ + var promise = new Promise(INTERNAL); \n\ + promise._captureStackTrace(); \n\ + var nodeback = nodebackForPromise(promise, " + multiArgs + "); \n\ + var ret; \n\ + var callback = tryCatch([GetFunctionCode]); \n\ + switch(len) { \n\ + [CodeForSwitchCase] \n\ + } \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ + } \n\ + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n\ + return promise; \n\ + }; \n\ + notEnumerableProp(ret, '__isPromisified__', true); \n\ + return ret; \n\ + ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) + .replace("[GetFunctionCode]", getFunctionCode); + body = body.replace("Parameters", parameterDeclaration(newParameterCount)); + return new Function("Promise", + "fn", + "receiver", + "withAppended", + "maybeWrapAsError", + "nodebackForPromise", + "tryCatch", + "errorObj", + "notEnumerableProp", + "INTERNAL", + body)( + Promise, + fn, + receiver, + withAppended, + maybeWrapAsError, + nodebackForPromise, + util.tryCatch, + util.errorObj, + util.notEnumerableProp, + INTERNAL); +}; +} + +function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) { + var defaultThis = (function() {return this;})(); + var method = callback; + if (typeof method === "string") { + callback = fn; + } + function promisified() { + var _receiver = receiver; + if (receiver === THIS) _receiver = this; + var promise = new Promise(INTERNAL); + promise._captureStackTrace(); + var cb = typeof method === "string" && this !== defaultThis + ? this[method] : callback; + var fn = nodebackForPromise(promise, multiArgs); + try { + cb.apply(_receiver, withAppended(arguments, fn)); + } catch(e) { + promise._rejectCallback(maybeWrapAsError(e), true, true); + } + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); + return promise; + } + util.notEnumerableProp(promisified, "__isPromisified__", true); + return promisified; +} + +var makeNodePromisified = canEvaluate + ? makeNodePromisifiedEval + : makeNodePromisifiedClosure; + +function promisifyAll(obj, suffix, filter, promisifier, multiArgs) { + var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); + var methods = + promisifiableMethods(obj, suffix, suffixRegexp, filter); + + for (var i = 0, len = methods.length; i < len; i+= 2) { + var key = methods[i]; + var fn = methods[i+1]; + var promisifiedKey = key + suffix; + if (promisifier === makeNodePromisified) { + obj[promisifiedKey] = + makeNodePromisified(key, THIS, key, fn, suffix, multiArgs); + } else { + var promisified = promisifier(fn, function() { + return makeNodePromisified(key, THIS, key, + fn, suffix, multiArgs); + }); + util.notEnumerableProp(promisified, "__isPromisified__", true); + obj[promisifiedKey] = promisified; + } + } + util.toFastProperties(obj); + return obj; +} + +function promisify(callback, receiver, multiArgs) { + return makeNodePromisified(callback, receiver, undefined, + callback, null, multiArgs); +} + +Promise.promisify = function (fn, options) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + if (isPromisified(fn)) { + return fn; + } + options = Object(options); + var receiver = options.context === undefined ? THIS : options.context; + var multiArgs = !!options.multiArgs; + var ret = promisify(fn, receiver, multiArgs); + util.copyDescriptors(fn, ret, propsFilter); + return ret; +}; + +Promise.promisifyAll = function (target, options) { + if (typeof target !== "function" && typeof target !== "object") { + throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + options = Object(options); + var multiArgs = !!options.multiArgs; + var suffix = options.suffix; + if (typeof suffix !== "string") suffix = defaultSuffix; + var filter = options.filter; + if (typeof filter !== "function") filter = defaultFilter; + var promisifier = options.promisifier; + if (typeof promisifier !== "function") promisifier = makeNodePromisified; + + if (!util.isIdentifier(suffix)) { + throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + + var keys = util.inheritedDataKeys(target); + for (var i = 0; i < keys.length; ++i) { + var value = target[keys[i]]; + if (keys[i] !== "constructor" && + util.isClass(value)) { + promisifyAll(value.prototype, suffix, filter, promisifier, + multiArgs); + promisifyAll(value, suffix, filter, promisifier, multiArgs); + } + } + + return promisifyAll(target, suffix, filter, promisifier, multiArgs); +}; +}; + + +},{"./errors":12,"./nodeback":20,"./util":36}],25:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function( + Promise, PromiseArray, tryConvertToPromise, apiRejection) { +var util = _dereq_("./util"); +var isObject = util.isObject; +var es5 = _dereq_("./es5"); +var Es6Map; +if (typeof Map === "function") Es6Map = Map; + +var mapToEntries = (function() { + var index = 0; + var size = 0; + + function extractEntry(value, key) { + this[index] = value; + this[index + size] = key; + index++; + } + + return function mapToEntries(map) { + size = map.size; + index = 0; + var ret = new Array(map.size * 2); + map.forEach(extractEntry, ret); + return ret; + }; +})(); + +var entriesToMap = function(entries) { + var ret = new Es6Map(); + var length = entries.length / 2 | 0; + for (var i = 0; i < length; ++i) { + var key = entries[length + i]; + var value = entries[i]; + ret.set(key, value); + } + return ret; +}; + +function PropertiesPromiseArray(obj) { + var isMap = false; + var entries; + if (Es6Map !== undefined && obj instanceof Es6Map) { + entries = mapToEntries(obj); + isMap = true; + } else { + var keys = es5.keys(obj); + var len = keys.length; + entries = new Array(len * 2); + for (var i = 0; i < len; ++i) { + var key = keys[i]; + entries[i] = obj[key]; + entries[i + len] = key; + } + } + this.constructor$(entries); + this._isMap = isMap; + this._init$(undefined, -3); +} +util.inherits(PropertiesPromiseArray, PromiseArray); + +PropertiesPromiseArray.prototype._init = function () {}; + +PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + var val; + if (this._isMap) { + val = entriesToMap(this._values); + } else { + val = {}; + var keyOffset = this.length(); + for (var i = 0, len = this.length(); i < len; ++i) { + val[this._values[i + keyOffset]] = this._values[i]; + } + } + this._resolve(val); + return true; + } + return false; +}; + +PropertiesPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +PropertiesPromiseArray.prototype.getActualLength = function (len) { + return len >> 1; +}; + +function props(promises) { + var ret; + var castValue = tryConvertToPromise(promises); + + if (!isObject(castValue)) { + return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } else if (castValue instanceof Promise) { + ret = castValue._then( + Promise.props, undefined, undefined, undefined, undefined); + } else { + ret = new PropertiesPromiseArray(castValue).promise(); + } + + if (castValue instanceof Promise) { + ret._propagateFrom(castValue, 2); + } + return ret; +} + +Promise.prototype.props = function () { + return props(this); +}; + +Promise.props = function (promises) { + return props(promises); +}; +}; + +},{"./es5":13,"./util":36}],26:[function(_dereq_,module,exports){ +"use strict"; +function arrayMove(src, srcIndex, dst, dstIndex, len) { + for (var j = 0; j < len; ++j) { + dst[j + dstIndex] = src[j + srcIndex]; + src[j + srcIndex] = void 0; + } +} + +function Queue(capacity) { + this._capacity = capacity; + this._length = 0; + this._front = 0; +} + +Queue.prototype._willBeOverCapacity = function (size) { + return this._capacity < size; +}; + +Queue.prototype._pushOne = function (arg) { + var length = this.length(); + this._checkCapacity(length + 1); + var i = (this._front + length) & (this._capacity - 1); + this[i] = arg; + this._length = length + 1; +}; + +Queue.prototype.push = function (fn, receiver, arg) { + var length = this.length() + 3; + if (this._willBeOverCapacity(length)) { + this._pushOne(fn); + this._pushOne(receiver); + this._pushOne(arg); + return; + } + var j = this._front + length - 3; + this._checkCapacity(length); + var wrapMask = this._capacity - 1; + this[(j + 0) & wrapMask] = fn; + this[(j + 1) & wrapMask] = receiver; + this[(j + 2) & wrapMask] = arg; + this._length = length; +}; + +Queue.prototype.shift = function () { + var front = this._front, + ret = this[front]; + + this[front] = undefined; + this._front = (front + 1) & (this._capacity - 1); + this._length--; + return ret; +}; + +Queue.prototype.length = function () { + return this._length; +}; + +Queue.prototype._checkCapacity = function (size) { + if (this._capacity < size) { + this._resizeTo(this._capacity << 1); + } +}; + +Queue.prototype._resizeTo = function (capacity) { + var oldCapacity = this._capacity; + this._capacity = capacity; + var front = this._front; + var length = this._length; + var moveItemsCount = (front + length) & (oldCapacity - 1); + arrayMove(this, 0, this, oldCapacity, moveItemsCount); +}; + +module.exports = Queue; + +},{}],27:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function( + Promise, INTERNAL, tryConvertToPromise, apiRejection) { +var util = _dereq_("./util"); + +var raceLater = function (promise) { + return promise.then(function(array) { + return race(array, promise); + }); +}; + +function race(promises, parent) { + var maybePromise = tryConvertToPromise(promises); + + if (maybePromise instanceof Promise) { + return raceLater(maybePromise); + } else { + promises = util.asArray(promises); + if (promises === null) + return apiRejection("expecting an array or an iterable object but got " + util.classString(promises)); + } + + var ret = new Promise(INTERNAL); + if (parent !== undefined) { + ret._propagateFrom(parent, 3); + } + var fulfill = ret._fulfill; + var reject = ret._reject; + for (var i = 0, len = promises.length; i < len; ++i) { + var val = promises[i]; + + if (val === undefined && !(i in promises)) { + continue; + } + + Promise.cast(val)._then(fulfill, reject, undefined, ret, null); + } + return ret; +} + +Promise.race = function (promises) { + return race(promises, undefined); +}; + +Promise.prototype.race = function () { + return race(this, undefined); +}; + +}; + +},{"./util":36}],28:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = _dereq_("./util"); +var tryCatch = util.tryCatch; + +function ReductionPromiseArray(promises, fn, initialValue, _each) { + this.constructor$(promises); + var domain = getDomain(); + this._fn = domain === null ? fn : util.domainBind(domain, fn); + if (initialValue !== undefined) { + initialValue = Promise.resolve(initialValue); + initialValue._attachCancellationCallback(this); + } + this._initialValue = initialValue; + this._currentCancellable = null; + if(_each === INTERNAL) { + this._eachValues = Array(this._length); + } else if (_each === 0) { + this._eachValues = null; + } else { + this._eachValues = undefined; + } + this._promise._captureStackTrace(); + this._init$(undefined, -5); +} +util.inherits(ReductionPromiseArray, PromiseArray); + +ReductionPromiseArray.prototype._gotAccum = function(accum) { + if (this._eachValues !== undefined && + this._eachValues !== null && + accum !== INTERNAL) { + this._eachValues.push(accum); + } +}; + +ReductionPromiseArray.prototype._eachComplete = function(value) { + if (this._eachValues !== null) { + this._eachValues.push(value); + } + return this._eachValues; +}; + +ReductionPromiseArray.prototype._init = function() {}; + +ReductionPromiseArray.prototype._resolveEmptyArray = function() { + this._resolve(this._eachValues !== undefined ? this._eachValues + : this._initialValue); +}; + +ReductionPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +ReductionPromiseArray.prototype._resolve = function(value) { + this._promise._resolveCallback(value); + this._values = null; +}; + +ReductionPromiseArray.prototype._resultCancelled = function(sender) { + if (sender === this._initialValue) return this._cancel(); + if (this._isResolved()) return; + this._resultCancelled$(); + if (this._currentCancellable instanceof Promise) { + this._currentCancellable.cancel(); + } + if (this._initialValue instanceof Promise) { + this._initialValue.cancel(); + } +}; + +ReductionPromiseArray.prototype._iterate = function (values) { + this._values = values; + var value; + var i; + var length = values.length; + if (this._initialValue !== undefined) { + value = this._initialValue; + i = 0; + } else { + value = Promise.resolve(values[0]); + i = 1; + } + + this._currentCancellable = value; + + if (!value.isRejected()) { + for (; i < length; ++i) { + var ctx = { + accum: null, + value: values[i], + index: i, + length: length, + array: this + }; + value = value._then(gotAccum, undefined, undefined, ctx, undefined); + } + } + + if (this._eachValues !== undefined) { + value = value + ._then(this._eachComplete, undefined, undefined, this, undefined); + } + value._then(completed, completed, undefined, value, this); +}; + +Promise.prototype.reduce = function (fn, initialValue) { + return reduce(this, fn, initialValue, null); +}; + +Promise.reduce = function (promises, fn, initialValue, _each) { + return reduce(promises, fn, initialValue, _each); +}; + +function completed(valueOrReason, array) { + if (this.isFulfilled()) { + array._resolve(valueOrReason); + } else { + array._reject(valueOrReason); + } +} + +function reduce(promises, fn, initialValue, _each) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var array = new ReductionPromiseArray(promises, fn, initialValue, _each); + return array.promise(); +} + +function gotAccum(accum) { + this.accum = accum; + this.array._gotAccum(accum); + var value = tryConvertToPromise(this.value, this.array._promise); + if (value instanceof Promise) { + this.array._currentCancellable = value; + return value._then(gotValue, undefined, undefined, this, undefined); + } else { + return gotValue.call(this, value); + } +} + +function gotValue(value) { + var array = this.array; + var promise = array._promise; + var fn = tryCatch(array._fn); + promise._pushContext(); + var ret; + if (array._eachValues !== undefined) { + ret = fn.call(promise._boundValue(), value, this.index, this.length); + } else { + ret = fn.call(promise._boundValue(), + this.accum, value, this.index, this.length); + } + if (ret instanceof Promise) { + array._currentCancellable = ret; + } + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + array._eachValues !== undefined ? "Promise.each" : "Promise.reduce", + promise + ); + return ret; +} +}; + +},{"./util":36}],29:[function(_dereq_,module,exports){ +"use strict"; +var util = _dereq_("./util"); +var schedule; +var noAsyncScheduler = function() { + throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var NativePromise = util.getNativePromise(); +if (util.isNode && typeof MutationObserver === "undefined") { + var GlobalSetImmediate = global.setImmediate; + var ProcessNextTick = process.nextTick; + schedule = util.isRecentNode + ? function(fn) { GlobalSetImmediate.call(global, fn); } + : function(fn) { ProcessNextTick.call(process, fn); }; +} else if (typeof NativePromise === "function" && + typeof NativePromise.resolve === "function") { + var nativePromise = NativePromise.resolve(); + schedule = function(fn) { + nativePromise.then(fn); + }; +} else if ((typeof MutationObserver !== "undefined") && + !(typeof window !== "undefined" && + window.navigator && + (window.navigator.standalone || window.cordova))) { + schedule = (function() { + var div = document.createElement("div"); + var opts = {attributes: true}; + var toggleScheduled = false; + var div2 = document.createElement("div"); + var o2 = new MutationObserver(function() { + div.classList.toggle("foo"); + toggleScheduled = false; + }); + o2.observe(div2, opts); + + var scheduleToggle = function() { + if (toggleScheduled) return; + toggleScheduled = true; + div2.classList.toggle("foo"); + }; + + return function schedule(fn) { + var o = new MutationObserver(function() { + o.disconnect(); + fn(); + }); + o.observe(div, opts); + scheduleToggle(); + }; + })(); +} else if (typeof setImmediate !== "undefined") { + schedule = function (fn) { + setImmediate(fn); + }; +} else if (typeof setTimeout !== "undefined") { + schedule = function (fn) { + setTimeout(fn, 0); + }; +} else { + schedule = noAsyncScheduler; +} +module.exports = schedule; + +},{"./util":36}],30:[function(_dereq_,module,exports){ +"use strict"; +module.exports = + function(Promise, PromiseArray, debug) { +var PromiseInspection = Promise.PromiseInspection; +var util = _dereq_("./util"); + +function SettledPromiseArray(values) { + this.constructor$(values); +} +util.inherits(SettledPromiseArray, PromiseArray); + +SettledPromiseArray.prototype._promiseResolved = function (index, inspection) { + this._values[index] = inspection; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { + var ret = new PromiseInspection(); + ret._bitField = 33554432; + ret._settledValueField = value; + return this._promiseResolved(index, ret); +}; +SettledPromiseArray.prototype._promiseRejected = function (reason, index) { + var ret = new PromiseInspection(); + ret._bitField = 16777216; + ret._settledValueField = reason; + return this._promiseResolved(index, ret); +}; + +Promise.settle = function (promises) { + debug.deprecated(".settle()", ".reflect()"); + return new SettledPromiseArray(promises).promise(); +}; + +Promise.prototype.settle = function () { + return Promise.settle(this); +}; +}; + +},{"./util":36}],31:[function(_dereq_,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, apiRejection) { +var util = _dereq_("./util"); +var RangeError = _dereq_("./errors").RangeError; +var AggregateError = _dereq_("./errors").AggregateError; +var isArray = util.isArray; +var CANCELLATION = {}; + + +function SomePromiseArray(values) { + this.constructor$(values); + this._howMany = 0; + this._unwrap = false; + this._initialized = false; +} +util.inherits(SomePromiseArray, PromiseArray); + +SomePromiseArray.prototype._init = function () { + if (!this._initialized) { + return; + } + if (this._howMany === 0) { + this._resolve([]); + return; + } + this._init$(undefined, -5); + var isArrayResolved = isArray(this._values); + if (!this._isResolved() && + isArrayResolved && + this._howMany > this._canPossiblyFulfill()) { + this._reject(this._getRangeError(this.length())); + } +}; + +SomePromiseArray.prototype.init = function () { + this._initialized = true; + this._init(); +}; + +SomePromiseArray.prototype.setUnwrap = function () { + this._unwrap = true; +}; + +SomePromiseArray.prototype.howMany = function () { + return this._howMany; +}; + +SomePromiseArray.prototype.setHowMany = function (count) { + this._howMany = count; +}; + +SomePromiseArray.prototype._promiseFulfilled = function (value) { + this._addFulfilled(value); + if (this._fulfilled() === this.howMany()) { + this._values.length = this.howMany(); + if (this.howMany() === 1 && this._unwrap) { + this._resolve(this._values[0]); + } else { + this._resolve(this._values); + } + return true; + } + return false; + +}; +SomePromiseArray.prototype._promiseRejected = function (reason) { + this._addRejected(reason); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._promiseCancelled = function () { + if (this._values instanceof Promise || this._values == null) { + return this._cancel(); + } + this._addRejected(CANCELLATION); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._checkOutcome = function() { + if (this.howMany() > this._canPossiblyFulfill()) { + var e = new AggregateError(); + for (var i = this.length(); i < this._values.length; ++i) { + if (this._values[i] !== CANCELLATION) { + e.push(this._values[i]); + } + } + if (e.length > 0) { + this._reject(e); + } else { + this._cancel(); + } + return true; + } + return false; +}; + +SomePromiseArray.prototype._fulfilled = function () { + return this._totalResolved; +}; + +SomePromiseArray.prototype._rejected = function () { + return this._values.length - this.length(); +}; + +SomePromiseArray.prototype._addRejected = function (reason) { + this._values.push(reason); +}; + +SomePromiseArray.prototype._addFulfilled = function (value) { + this._values[this._totalResolved++] = value; +}; + +SomePromiseArray.prototype._canPossiblyFulfill = function () { + return this.length() - this._rejected(); +}; + +SomePromiseArray.prototype._getRangeError = function (count) { + var message = "Input array must contain at least " + + this._howMany + " items but contains only " + count + " items"; + return new RangeError(message); +}; + +SomePromiseArray.prototype._resolveEmptyArray = function () { + this._reject(this._getRangeError(0)); +}; + +function some(promises, howMany) { + if ((howMany | 0) !== howMany || howMany < 0) { + return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var ret = new SomePromiseArray(promises); + var promise = ret.promise(); + ret.setHowMany(howMany); + ret.init(); + return promise; +} + +Promise.some = function (promises, howMany) { + return some(promises, howMany); +}; + +Promise.prototype.some = function (howMany) { + return some(this, howMany); +}; + +Promise._SomePromiseArray = SomePromiseArray; +}; + +},{"./errors":12,"./util":36}],32:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise) { +function PromiseInspection(promise) { + if (promise !== undefined) { + promise = promise._target(); + this._bitField = promise._bitField; + this._settledValueField = promise._isFateSealed() + ? promise._settledValue() : undefined; + } + else { + this._bitField = 0; + this._settledValueField = undefined; + } +} + +PromiseInspection.prototype._settledValue = function() { + return this._settledValueField; +}; + +var value = PromiseInspection.prototype.value = function () { + if (!this.isFulfilled()) { + throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var reason = PromiseInspection.prototype.error = +PromiseInspection.prototype.reason = function () { + if (!this.isRejected()) { + throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { + return (this._bitField & 33554432) !== 0; +}; + +var isRejected = PromiseInspection.prototype.isRejected = function () { + return (this._bitField & 16777216) !== 0; +}; + +var isPending = PromiseInspection.prototype.isPending = function () { + return (this._bitField & 50397184) === 0; +}; + +var isResolved = PromiseInspection.prototype.isResolved = function () { + return (this._bitField & 50331648) !== 0; +}; + +PromiseInspection.prototype.isCancelled = function() { + return (this._bitField & 8454144) !== 0; +}; + +Promise.prototype.__isCancelled = function() { + return (this._bitField & 65536) === 65536; +}; + +Promise.prototype._isCancelled = function() { + return this._target().__isCancelled(); +}; + +Promise.prototype.isCancelled = function() { + return (this._target()._bitField & 8454144) !== 0; +}; + +Promise.prototype.isPending = function() { + return isPending.call(this._target()); +}; + +Promise.prototype.isRejected = function() { + return isRejected.call(this._target()); +}; + +Promise.prototype.isFulfilled = function() { + return isFulfilled.call(this._target()); +}; + +Promise.prototype.isResolved = function() { + return isResolved.call(this._target()); +}; + +Promise.prototype.value = function() { + return value.call(this._target()); +}; + +Promise.prototype.reason = function() { + var target = this._target(); + target._unsetRejectionIsUnhandled(); + return reason.call(target); +}; + +Promise.prototype._value = function() { + return this._settledValue(); +}; + +Promise.prototype._reason = function() { + this._unsetRejectionIsUnhandled(); + return this._settledValue(); +}; + +Promise.PromiseInspection = PromiseInspection; +}; + +},{}],33:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var util = _dereq_("./util"); +var errorObj = util.errorObj; +var isObject = util.isObject; + +function tryConvertToPromise(obj, context) { + if (isObject(obj)) { + if (obj instanceof Promise) return obj; + var then = getThen(obj); + if (then === errorObj) { + if (context) context._pushContext(); + var ret = Promise.reject(then.e); + if (context) context._popContext(); + return ret; + } else if (typeof then === "function") { + if (isAnyBluebirdPromise(obj)) { + var ret = new Promise(INTERNAL); + obj._then( + ret._fulfill, + ret._reject, + undefined, + ret, + null + ); + return ret; + } + return doThenable(obj, then, context); + } + } + return obj; +} + +function doGetThen(obj) { + return obj.then; +} + +function getThen(obj) { + try { + return doGetThen(obj); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} + +var hasProp = {}.hasOwnProperty; +function isAnyBluebirdPromise(obj) { + try { + return hasProp.call(obj, "_promise0"); + } catch (e) { + return false; + } +} + +function doThenable(x, then, context) { + var promise = new Promise(INTERNAL); + var ret = promise; + if (context) context._pushContext(); + promise._captureStackTrace(); + if (context) context._popContext(); + var synchronous = true; + var result = util.tryCatch(then).call(x, resolve, reject); + synchronous = false; + + if (promise && result === errorObj) { + promise._rejectCallback(result.e, true, true); + promise = null; + } + + function resolve(value) { + if (!promise) return; + promise._resolveCallback(value); + promise = null; + } + + function reject(reason) { + if (!promise) return; + promise._rejectCallback(reason, synchronous, true); + promise = null; + } + return ret; +} + +return tryConvertToPromise; +}; + +},{"./util":36}],34:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, debug) { +var util = _dereq_("./util"); +var TimeoutError = Promise.TimeoutError; + +function HandleWrapper(handle) { + this.handle = handle; +} + +HandleWrapper.prototype._resultCancelled = function() { + clearTimeout(this.handle); +}; + +var afterValue = function(value) { return delay(+this).thenReturn(value); }; +var delay = Promise.delay = function (ms, value) { + var ret; + var handle; + if (value !== undefined) { + ret = Promise.resolve(value) + ._then(afterValue, null, null, ms, undefined); + if (debug.cancellation() && value instanceof Promise) { + ret._setOnCancel(value); + } + } else { + ret = new Promise(INTERNAL); + handle = setTimeout(function() { ret._fulfill(); }, +ms); + if (debug.cancellation()) { + ret._setOnCancel(new HandleWrapper(handle)); + } + ret._captureStackTrace(); + } + ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.prototype.delay = function (ms) { + return delay(ms, this); +}; + +var afterTimeout = function (promise, message, parent) { + var err; + if (typeof message !== "string") { + if (message instanceof Error) { + err = message; + } else { + err = new TimeoutError("operation timed out"); + } + } else { + err = new TimeoutError(message); + } + util.markAsOriginatingFromRejection(err); + promise._attachExtraTrace(err); + promise._reject(err); + + if (parent != null) { + parent.cancel(); + } +}; + +function successClear(value) { + clearTimeout(this.handle); + return value; +} + +function failureClear(reason) { + clearTimeout(this.handle); + throw reason; +} + +Promise.prototype.timeout = function (ms, message) { + ms = +ms; + var ret, parent; + + var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() { + if (ret.isPending()) { + afterTimeout(ret, message, parent); + } + }, ms)); + + if (debug.cancellation()) { + parent = this.then(); + ret = parent._then(successClear, failureClear, + undefined, handleWrapper, undefined); + ret._setOnCancel(handleWrapper); + } else { + ret = this._then(successClear, failureClear, + undefined, handleWrapper, undefined); + } + + return ret; +}; + +}; + +},{"./util":36}],35:[function(_dereq_,module,exports){ +"use strict"; +module.exports = function (Promise, apiRejection, tryConvertToPromise, + createContext, INTERNAL, debug) { + var util = _dereq_("./util"); + var TypeError = _dereq_("./errors").TypeError; + var inherits = _dereq_("./util").inherits; + var errorObj = util.errorObj; + var tryCatch = util.tryCatch; + var NULL = {}; + + function thrower(e) { + setTimeout(function(){throw e;}, 0); + } + + function castPreservingDisposable(thenable) { + var maybePromise = tryConvertToPromise(thenable); + if (maybePromise !== thenable && + typeof thenable._isDisposable === "function" && + typeof thenable._getDisposer === "function" && + thenable._isDisposable()) { + maybePromise._setDisposable(thenable._getDisposer()); + } + return maybePromise; + } + function dispose(resources, inspection) { + var i = 0; + var len = resources.length; + var ret = new Promise(INTERNAL); + function iterator() { + if (i >= len) return ret._fulfill(); + var maybePromise = castPreservingDisposable(resources[i++]); + if (maybePromise instanceof Promise && + maybePromise._isDisposable()) { + try { + maybePromise = tryConvertToPromise( + maybePromise._getDisposer().tryDispose(inspection), + resources.promise); + } catch (e) { + return thrower(e); + } + if (maybePromise instanceof Promise) { + return maybePromise._then(iterator, thrower, + null, null, null); + } + } + iterator(); + } + iterator(); + return ret; + } + + function Disposer(data, promise, context) { + this._data = data; + this._promise = promise; + this._context = context; + } + + Disposer.prototype.data = function () { + return this._data; + }; + + Disposer.prototype.promise = function () { + return this._promise; + }; + + Disposer.prototype.resource = function () { + if (this.promise().isFulfilled()) { + return this.promise().value(); + } + return NULL; + }; + + Disposer.prototype.tryDispose = function(inspection) { + var resource = this.resource(); + var context = this._context; + if (context !== undefined) context._pushContext(); + var ret = resource !== NULL + ? this.doDispose(resource, inspection) : null; + if (context !== undefined) context._popContext(); + this._promise._unsetDisposable(); + this._data = null; + return ret; + }; + + Disposer.isDisposer = function (d) { + return (d != null && + typeof d.resource === "function" && + typeof d.tryDispose === "function"); + }; + + function FunctionDisposer(fn, promise, context) { + this.constructor$(fn, promise, context); + } + inherits(FunctionDisposer, Disposer); + + FunctionDisposer.prototype.doDispose = function (resource, inspection) { + var fn = this.data(); + return fn.call(resource, resource, inspection); + }; + + function maybeUnwrapDisposer(value) { + if (Disposer.isDisposer(value)) { + this.resources[this.index]._setDisposable(value); + return value.promise(); + } + return value; + } + + function ResourceList(length) { + this.length = length; + this.promise = null; + this[length-1] = null; + } + + ResourceList.prototype._resultCancelled = function() { + var len = this.length; + for (var i = 0; i < len; ++i) { + var item = this[i]; + if (item instanceof Promise) { + item.cancel(); + } + } + }; + + Promise.using = function () { + var len = arguments.length; + if (len < 2) return apiRejection( + "you must pass at least 2 arguments to Promise.using"); + var fn = arguments[len - 1]; + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var input; + var spreadArgs = true; + if (len === 2 && Array.isArray(arguments[0])) { + input = arguments[0]; + len = input.length; + spreadArgs = false; + } else { + input = arguments; + len--; + } + var resources = new ResourceList(len); + for (var i = 0; i < len; ++i) { + var resource = input[i]; + if (Disposer.isDisposer(resource)) { + var disposer = resource; + resource = resource.promise(); + resource._setDisposable(disposer); + } else { + var maybePromise = tryConvertToPromise(resource); + if (maybePromise instanceof Promise) { + resource = + maybePromise._then(maybeUnwrapDisposer, null, null, { + resources: resources, + index: i + }, undefined); + } + } + resources[i] = resource; + } + + var reflectedResources = new Array(resources.length); + for (var i = 0; i < reflectedResources.length; ++i) { + reflectedResources[i] = Promise.resolve(resources[i]).reflect(); + } + + var resultPromise = Promise.all(reflectedResources) + .then(function(inspections) { + for (var i = 0; i < inspections.length; ++i) { + var inspection = inspections[i]; + if (inspection.isRejected()) { + errorObj.e = inspection.error(); + return errorObj; + } else if (!inspection.isFulfilled()) { + resultPromise.cancel(); + return; + } + inspections[i] = inspection.value(); + } + promise._pushContext(); + + fn = tryCatch(fn); + var ret = spreadArgs + ? fn.apply(undefined, inspections) : fn(inspections); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, promiseCreated, "Promise.using", promise); + return ret; + }); + + var promise = resultPromise.lastly(function() { + var inspection = new Promise.PromiseInspection(resultPromise); + return dispose(resources, inspection); + }); + resources.promise = promise; + promise._setOnCancel(resources); + return promise; + }; + + Promise.prototype._setDisposable = function (disposer) { + this._bitField = this._bitField | 131072; + this._disposer = disposer; + }; + + Promise.prototype._isDisposable = function () { + return (this._bitField & 131072) > 0; + }; + + Promise.prototype._getDisposer = function () { + return this._disposer; + }; + + Promise.prototype._unsetDisposable = function () { + this._bitField = this._bitField & (~131072); + this._disposer = undefined; + }; + + Promise.prototype.disposer = function (fn) { + if (typeof fn === "function") { + return new FunctionDisposer(fn, this, createContext()); + } + throw new TypeError(); + }; + +}; + +},{"./errors":12,"./util":36}],36:[function(_dereq_,module,exports){ +"use strict"; +var es5 = _dereq_("./es5"); +var canEvaluate = typeof navigator == "undefined"; + +var errorObj = {e: {}}; +var tryCatchTarget; +var globalObject = typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : + typeof global !== "undefined" ? global : + this !== undefined ? this : null; + +function tryCatcher() { + try { + var target = tryCatchTarget; + tryCatchTarget = null; + return target.apply(this, arguments); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} +function tryCatch(fn) { + tryCatchTarget = fn; + return tryCatcher; +} + +var inherits = function(Child, Parent) { + var hasProp = {}.hasOwnProperty; + + function T() { + this.constructor = Child; + this.constructor$ = Parent; + for (var propertyName in Parent.prototype) { + if (hasProp.call(Parent.prototype, propertyName) && + propertyName.charAt(propertyName.length-1) !== "$" + ) { + this[propertyName + "$"] = Parent.prototype[propertyName]; + } + } + } + T.prototype = Parent.prototype; + Child.prototype = new T(); + return Child.prototype; +}; + + +function isPrimitive(val) { + return val == null || val === true || val === false || + typeof val === "string" || typeof val === "number"; + +} + +function isObject(value) { + return typeof value === "function" || + typeof value === "object" && value !== null; +} + +function maybeWrapAsError(maybeError) { + if (!isPrimitive(maybeError)) return maybeError; + + return new Error(safeToString(maybeError)); +} + +function withAppended(target, appendee) { + var len = target.length; + var ret = new Array(len + 1); + var i; + for (i = 0; i < len; ++i) { + ret[i] = target[i]; + } + ret[i] = appendee; + return ret; +} + +function getDataPropertyOrDefault(obj, key, defaultValue) { + if (es5.isES5) { + var desc = Object.getOwnPropertyDescriptor(obj, key); + + if (desc != null) { + return desc.get == null && desc.set == null + ? desc.value + : defaultValue; + } + } else { + return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; + } +} + +function notEnumerableProp(obj, name, value) { + if (isPrimitive(obj)) return obj; + var descriptor = { + value: value, + configurable: true, + enumerable: false, + writable: true + }; + es5.defineProperty(obj, name, descriptor); + return obj; +} + +function thrower(r) { + throw r; +} + +var inheritedDataKeys = (function() { + var excludedPrototypes = [ + Array.prototype, + Object.prototype, + Function.prototype + ]; + + var isExcludedProto = function(val) { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (excludedPrototypes[i] === val) { + return true; + } + } + return false; + }; + + if (es5.isES5) { + var getKeys = Object.getOwnPropertyNames; + return function(obj) { + var ret = []; + var visitedKeys = Object.create(null); + while (obj != null && !isExcludedProto(obj)) { + var keys; + try { + keys = getKeys(obj); + } catch (e) { + return ret; + } + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (visitedKeys[key]) continue; + visitedKeys[key] = true; + var desc = Object.getOwnPropertyDescriptor(obj, key); + if (desc != null && desc.get == null && desc.set == null) { + ret.push(key); + } + } + obj = es5.getPrototypeOf(obj); + } + return ret; + }; + } else { + var hasProp = {}.hasOwnProperty; + return function(obj) { + if (isExcludedProto(obj)) return []; + var ret = []; + + /*jshint forin:false */ + enumeration: for (var key in obj) { + if (hasProp.call(obj, key)) { + ret.push(key); + } else { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (hasProp.call(excludedPrototypes[i], key)) { + continue enumeration; + } + } + ret.push(key); + } + } + return ret; + }; + } + +})(); + +var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; +function isClass(fn) { + try { + if (typeof fn === "function") { + var keys = es5.names(fn.prototype); + + var hasMethods = es5.isES5 && keys.length > 1; + var hasMethodsOtherThanConstructor = keys.length > 0 && + !(keys.length === 1 && keys[0] === "constructor"); + var hasThisAssignmentAndStaticMethods = + thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; + + if (hasMethods || hasMethodsOtherThanConstructor || + hasThisAssignmentAndStaticMethods) { + return true; + } + } + return false; + } catch (e) { + return false; + } +} + +function toFastProperties(obj) { + /*jshint -W027,-W055,-W031*/ + function FakeConstructor() {} + FakeConstructor.prototype = obj; + var l = 8; + while (l--) new FakeConstructor(); + return obj; + eval(obj); +} + +var rident = /^[a-z$_][a-z$_0-9]*$/i; +function isIdentifier(str) { + return rident.test(str); +} + +function filledRange(count, prefix, suffix) { + var ret = new Array(count); + for(var i = 0; i < count; ++i) { + ret[i] = prefix + i + suffix; + } + return ret; +} + +function safeToString(obj) { + try { + return obj + ""; + } catch (e) { + return "[no string representation]"; + } +} + +function isError(obj) { + return obj !== null && + typeof obj === "object" && + typeof obj.message === "string" && + typeof obj.name === "string"; +} + +function markAsOriginatingFromRejection(e) { + try { + notEnumerableProp(e, "isOperational", true); + } + catch(ignore) {} +} + +function originatesFromRejection(e) { + if (e == null) return false; + return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || + e["isOperational"] === true); +} + +function canAttachTrace(obj) { + return isError(obj) && es5.propertyIsWritable(obj, "stack"); +} + +var ensureErrorObject = (function() { + if (!("stack" in new Error())) { + return function(value) { + if (canAttachTrace(value)) return value; + try {throw new Error(safeToString(value));} + catch(err) {return err;} + }; + } else { + return function(value) { + if (canAttachTrace(value)) return value; + return new Error(safeToString(value)); + }; + } +})(); + +function classString(obj) { + return {}.toString.call(obj); +} + +function copyDescriptors(from, to, filter) { + var keys = es5.names(from); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (filter(key)) { + try { + es5.defineProperty(to, key, es5.getDescriptor(from, key)); + } catch (ignore) {} + } + } +} + +var asArray = function(v) { + if (es5.isArray(v)) { + return v; + } + return null; +}; + +if (typeof Symbol !== "undefined" && Symbol.iterator) { + var ArrayFrom = typeof Array.from === "function" ? function(v) { + return Array.from(v); + } : function(v) { + var ret = []; + var it = v[Symbol.iterator](); + var itResult; + while (!((itResult = it.next()).done)) { + ret.push(itResult.value); + } + return ret; + }; + + asArray = function(v) { + if (es5.isArray(v)) { + return v; + } else if (v != null && typeof v[Symbol.iterator] === "function") { + return ArrayFrom(v); + } + return null; + }; +} + +var isNode = typeof process !== "undefined" && + classString(process).toLowerCase() === "[object process]"; + +var hasEnvVariables = typeof process !== "undefined" && + typeof process.env !== "undefined"; + +function env(key) { + return hasEnvVariables ? process.env[key] : undefined; +} + +function getNativePromise() { + if (typeof Promise === "function") { + try { + var promise = new Promise(function(){}); + if ({}.toString.call(promise) === "[object Promise]") { + return Promise; + } + } catch (e) {} + } +} + +function domainBind(self, cb) { + return self.bind(cb); +} + +var ret = { + isClass: isClass, + isIdentifier: isIdentifier, + inheritedDataKeys: inheritedDataKeys, + getDataPropertyOrDefault: getDataPropertyOrDefault, + thrower: thrower, + isArray: es5.isArray, + asArray: asArray, + notEnumerableProp: notEnumerableProp, + isPrimitive: isPrimitive, + isObject: isObject, + isError: isError, + canEvaluate: canEvaluate, + errorObj: errorObj, + tryCatch: tryCatch, + inherits: inherits, + withAppended: withAppended, + maybeWrapAsError: maybeWrapAsError, + toFastProperties: toFastProperties, + filledRange: filledRange, + toString: safeToString, + canAttachTrace: canAttachTrace, + ensureErrorObject: ensureErrorObject, + originatesFromRejection: originatesFromRejection, + markAsOriginatingFromRejection: markAsOriginatingFromRejection, + classString: classString, + copyDescriptors: copyDescriptors, + hasDevTools: typeof chrome !== "undefined" && chrome && + typeof chrome.loadTimes === "function", + isNode: isNode, + hasEnvVariables: hasEnvVariables, + env: env, + global: globalObject, + getNativePromise: getNativePromise, + domainBind: domainBind +}; +ret.isRecentNode = ret.isNode && (function() { + var version = process.versions.node.split(".").map(Number); + return (version[0] === 0 && version[1] > 10) || (version[0] > 0); +})(); + +if (ret.isNode) ret.toFastProperties(process); + +try {throw new Error(); } catch (e) {ret.lastLineError = e;} +module.exports = ret; + +},{"./es5":13}]},{},[4])(4) +}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; } \ No newline at end of file diff --git a/node_backend/node_modules/bluebird/js/browser/bluebird.min.js b/node_backend/node_modules/bluebird/js/browser/bluebird.min.js new file mode 100644 index 0000000000000000000000000000000000000000..242bbfecab19c6a1792e2d489e3ff539efbac666 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/browser/bluebird.min.js @@ -0,0 +1,31 @@ +/* @preserve + * The MIT License (MIT) + * + * Copyright (c) 2013-2015 Petka Antonov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ +/** + * bluebird build version 3.4.7 + * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each +*/ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.Promise=t()}}(function(){var t,e,n;return function r(t,e,n){function i(s,a){if(!e[s]){if(!t[s]){var c="function"==typeof _dereq_&&_dereq_;if(!a&&c)return c(s,!0);if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var u=e[s]={exports:{}};t[s][0].call(u.exports,function(e){var n=t[s][1][e];return i(n?n:e)},u,u.exports,r,t,e,n)}return e[s].exports}for(var o="function"==typeof _dereq_&&_dereq_,s=0;s0;){var e=t.shift();if("function"==typeof e){var n=t.shift(),r=t.shift();e.call(n,r)}else e._settlePromises()}},r.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,this._drainQueue(this._lateQueue)},r.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},r.prototype._reset=function(){this._isTickUsed=!1},e.exports=r,e.exports.firstLineError=a},{"./queue":26,"./schedule":29,"./util":36}],3:[function(t,e,n){"use strict";e.exports=function(t,e,n,r){var i=!1,o=function(t,e){this._reject(e)},s=function(t,e){e.promiseRejectionQueued=!0,e.bindingPromise._then(o,o,null,this,t)},a=function(t,e){0===(50397184&this._bitField)&&this._resolveCallback(e.target)},c=function(t,e){e.promiseRejectionQueued||this._reject(t)};t.prototype.bind=function(o){i||(i=!0,t.prototype._propagateFrom=r.propagateFromFunction(),t.prototype._boundValue=r.boundValueFunction());var l=n(o),u=new t(e);u._propagateFrom(this,1);var p=this._target();if(u._setBoundTo(l),l instanceof t){var h={promiseRejectionQueued:!1,promise:u,target:p,bindingPromise:l};p._then(e,s,void 0,u,h),l._then(a,c,void 0,u,h),u._setOnCancel(l)}else u._resolveCallback(p);return u},t.prototype._setBoundTo=function(t){void 0!==t?(this._bitField=2097152|this._bitField,this._boundTo=t):this._bitField=-2097153&this._bitField},t.prototype._isBound=function(){return 2097152===(2097152&this._bitField)},t.bind=function(e,n){return t.resolve(n).bind(e)}}},{}],4:[function(t,e,n){"use strict";function r(){try{Promise===o&&(Promise=i)}catch(t){}return o}var i;"undefined"!=typeof Promise&&(i=Promise);var o=t("./promise")();o.noConflict=r,e.exports=o},{"./promise":22}],5:[function(t,e,n){"use strict";var r=Object.create;if(r){var i=r(null),o=r(null);i[" size"]=o[" size"]=0}e.exports=function(e){function n(t,n){var r;if(null!=t&&(r=t[n]),"function"!=typeof r){var i="Object "+a.classString(t)+" has no method '"+a.toString(n)+"'";throw new e.TypeError(i)}return r}function r(t){var e=this.pop(),r=n(t,e);return r.apply(t,this)}function i(t){return t[this]}function o(t){var e=+this;return 0>e&&(e=Math.max(0,e+t.length)),t[e]}var s,a=t("./util"),c=a.canEvaluate;a.isIdentifier;e.prototype.call=function(t){var e=[].slice.call(arguments,1);return e.push(t),this._then(r,void 0,void 0,e,void 0)},e.prototype.get=function(t){var e,n="number"==typeof t;if(n)e=o;else if(c){var r=s(t);e=null!==r?r:i}else e=i;return this._then(e,void 0,void 0,t,void 0)}}},{"./util":36}],6:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){var o=t("./util"),s=o.tryCatch,a=o.errorObj,c=e._async;e.prototype["break"]=e.prototype.cancel=function(){if(!i.cancellation())return this._warn("cancellation is disabled");for(var t=this,e=t;t._isCancellable();){if(!t._cancelBy(e)){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}var n=t._cancellationParent;if(null==n||!n._isCancellable()){t._isFollowing()?t._followee().cancel():t._cancelBranched();break}t._isFollowing()&&t._followee().cancel(),t._setWillBeCancelled(),e=t,t=n}},e.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},e.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},e.prototype._cancelBy=function(t){return t===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),this._enoughBranchesHaveCancelled()?(this._invokeOnCancel(),!0):!1)},e.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},e.prototype._cancel=function(){this._isCancellable()&&(this._setCancelled(),c.invoke(this._cancelPromises,this,void 0))},e.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},e.prototype._unsetOnCancel=function(){this._onCancelField=void 0},e.prototype._isCancellable=function(){return this.isPending()&&!this._isCancelled()},e.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},e.prototype._doInvokeOnCancel=function(t,e){if(o.isArray(t))for(var n=0;n=0?o[t]:void 0}var i=!1,o=[];return t.prototype._promiseCreated=function(){},t.prototype._pushContext=function(){},t.prototype._popContext=function(){return null},t._peekContext=t.prototype._peekContext=function(){},e.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,o.push(this._trace))},e.prototype._popContext=function(){if(void 0!==this._trace){var t=o.pop(),e=t._promiseCreated;return t._promiseCreated=null,e}return null},e.CapturedTrace=null,e.create=n,e.deactivateLongStackTraces=function(){},e.activateLongStackTraces=function(){var n=t.prototype._pushContext,o=t.prototype._popContext,s=t._peekContext,a=t.prototype._peekContext,c=t.prototype._promiseCreated;e.deactivateLongStackTraces=function(){t.prototype._pushContext=n,t.prototype._popContext=o,t._peekContext=s,t.prototype._peekContext=a,t.prototype._promiseCreated=c,i=!1},i=!0,t.prototype._pushContext=e.prototype._pushContext,t.prototype._popContext=e.prototype._popContext,t._peekContext=t.prototype._peekContext=r,t.prototype._promiseCreated=function(){var t=this._peekContext();t&&null==t._promiseCreated&&(t._promiseCreated=this)}},e}},{}],9:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,e){return{promise:e}}function i(){return!1}function o(t,e,n){var r=this;try{t(e,n,function(t){if("function"!=typeof t)throw new TypeError("onCancel must be a function, got: "+H.toString(t));r._attachCancellationCallback(t)})}catch(i){return i}}function s(t){if(!this._isCancellable())return this;var e=this._onCancel();void 0!==e?H.isArray(e)?e.push(t):this._setOnCancel([e,t]):this._setOnCancel(t)}function a(){return this._onCancelField}function c(t){this._onCancelField=t}function l(){this._cancellationParent=void 0,this._onCancelField=void 0}function u(t,e){if(0!==(1&e)){this._cancellationParent=t;var n=t._branchesRemainingToCancel;void 0===n&&(n=0),t._branchesRemainingToCancel=n+1}0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function p(t,e){0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function h(){var t=this._boundTo;return void 0!==t&&t instanceof e?t.isFulfilled()?t.value():void 0:t}function f(){this._trace=new S(this._peekContext())}function _(t,e){if(N(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._parent),void 0!==n)n.attachExtraTrace(t);else if(!t.__stackCleaned__){var r=j(t);H.notEnumerableProp(t,"stack",r.message+"\n"+r.stack.join("\n")),H.notEnumerableProp(t,"__stackCleaned__",!0)}}}function d(t,e,n,r,i){if(void 0===t&&null!==e&&W){if(void 0!==i&&i._returnedNonUndefined())return;if(0===(65535&r._bitField))return;n&&(n+=" ");var o="",s="";if(e._trace){for(var a=e._trace.stack.split("\n"),c=w(a),l=c.length-1;l>=0;--l){var u=c[l];if(!U.test(u)){var p=u.match(M);p&&(o="at "+p[1]+":"+p[2]+":"+p[3]+" ");break}}if(c.length>0)for(var h=c[0],l=0;l0&&(s="\n"+a[l-1]);break}}var f="a promise was created in a "+n+"handler "+o+"but was not returned from it, see http://goo.gl/rRqMUw"+s;r._warn(f,!0,e)}}function v(t,e){var n=t+" is deprecated and will be removed in a future version.";return e&&(n+=" Use "+e+" instead."),y(n)}function y(t,n,r){if(ot.warnings){var i,o=new L(t);if(n)r._attachExtraTrace(o);else if(ot.longStackTraces&&(i=e._peekContext()))i.attachExtraTrace(o);else{var s=j(o);o.stack=s.message+"\n"+s.stack.join("\n")}tt("warning",o)||E(o,"",!0)}}function m(t,e){for(var n=0;n=0;--a)if(r[a]===o){s=a;break}for(var a=s;a>=0;--a){var c=r[a];if(e[i]!==c)break;e.pop(),i--}e=r}}function w(t){for(var e=[],n=0;n0&&"SyntaxError"!=t.name&&(e=e.slice(n)),e}function j(t){var e=t.stack,n=t.toString();return e="string"==typeof e&&e.length>0?C(t):[" (No stack trace)"],{message:n,stack:"SyntaxError"==t.name?e:w(e)}}function E(t,e,n){if("undefined"!=typeof console){var r;if(H.isObject(t)){var i=t.stack;r=e+Q(i,t)}else r=e+String(t);"function"==typeof D?D(r,n):("function"==typeof console.log||"object"==typeof console.log)&&console.log(r)}}function k(t,e,n,r){var i=!1;try{"function"==typeof e&&(i=!0,"rejectionHandled"===t?e(r):e(n,r))}catch(o){I.throwLater(o)}"unhandledRejection"===t?tt(t,n,r)||i||E(n,"Unhandled rejection "):tt(t,r)}function F(t){var e;if("function"==typeof t)e="[function "+(t.name||"anonymous")+"]";else{e=t&&"function"==typeof t.toString?t.toString():H.toString(t);var n=/\[object [a-zA-Z0-9$_]+\]/;if(n.test(e))try{var r=JSON.stringify(t);e=r}catch(i){}0===e.length&&(e="(empty array)")}return"(<"+x(e)+">, no stack trace)"}function x(t){var e=41;return t.lengths||0>a||!n||!r||n!==r||s>=a||(nt=function(t){if(B.test(t))return!0;var e=P(t);return e&&e.fileName===n&&s<=e.line&&e.line<=a?!0:!1})}}function S(t){this._parent=t,this._promisesCreated=0;var e=this._length=1+(void 0===t?0:t._length);it(this,S),e>32&&this.uncycle()}var O,A,D,V=e._getDomain,I=e._async,L=t("./errors").Warning,H=t("./util"),N=H.canAttachTrace,B=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,U=/\((?:timers\.js):\d+:\d+\)/,M=/[\/<\(](.+?):(\d+):(\d+)\)?\s*$/,q=null,Q=null,$=!1,G=!(0==H.env("BLUEBIRD_DEBUG")||!H.env("BLUEBIRD_DEBUG")&&"development"!==H.env("NODE_ENV")),z=!(0==H.env("BLUEBIRD_WARNINGS")||!G&&!H.env("BLUEBIRD_WARNINGS")),X=!(0==H.env("BLUEBIRD_LONG_STACK_TRACES")||!G&&!H.env("BLUEBIRD_LONG_STACK_TRACES")),W=0!=H.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&(z||!!H.env("BLUEBIRD_W_FORGOTTEN_RETURN"));e.prototype.suppressUnhandledRejections=function(){var t=this._target();t._bitField=-1048577&t._bitField|524288},e.prototype._ensurePossibleRejectionHandled=function(){0===(524288&this._bitField)&&(this._setRejectionIsUnhandled(),I.invokeLater(this._notifyUnhandledRejection,this,void 0))},e.prototype._notifyUnhandledRejectionIsHandled=function(){k("rejectionHandled",O,void 0,this)},e.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},e.prototype._returnedNonUndefined=function(){return 0!==(268435456&this._bitField)},e.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var t=this._settledValue();this._setUnhandledRejectionIsNotified(),k("unhandledRejection",A,t,this)}},e.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},e.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},e.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},e.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},e.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},e.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},e.prototype._warn=function(t,e,n){return y(t,e,n||this)},e.onPossiblyUnhandledRejection=function(t){var e=V();A="function"==typeof t?null===e?t:H.domainBind(e,t):void 0},e.onUnhandledRejectionHandled=function(t){var e=V();O="function"==typeof t?null===e?t:H.domainBind(e,t):void 0};var K=function(){};e.longStackTraces=function(){if(I.haveItemsQueued()&&!ot.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!ot.longStackTraces&&T()){var t=e.prototype._captureStackTrace,r=e.prototype._attachExtraTrace;ot.longStackTraces=!0,K=function(){if(I.haveItemsQueued()&&!ot.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");e.prototype._captureStackTrace=t,e.prototype._attachExtraTrace=r,n.deactivateLongStackTraces(),I.enableTrampoline(),ot.longStackTraces=!1},e.prototype._captureStackTrace=f,e.prototype._attachExtraTrace=_,n.activateLongStackTraces(),I.disableTrampolineIfNecessary()}},e.hasLongStackTraces=function(){return ot.longStackTraces&&T()};var J=function(){try{if("function"==typeof CustomEvent){var t=new CustomEvent("CustomEvent");return H.global.dispatchEvent(t),function(t,e){var n=new CustomEvent(t.toLowerCase(),{detail:e,cancelable:!0});return!H.global.dispatchEvent(n)}}if("function"==typeof Event){var t=new Event("CustomEvent");return H.global.dispatchEvent(t),function(t,e){var n=new Event(t.toLowerCase(),{cancelable:!0});return n.detail=e,!H.global.dispatchEvent(n)}}var t=document.createEvent("CustomEvent");return t.initCustomEvent("testingtheevent",!1,!0,{}),H.global.dispatchEvent(t),function(t,e){var n=document.createEvent("CustomEvent");return n.initCustomEvent(t.toLowerCase(),!1,!0,e),!H.global.dispatchEvent(n)}}catch(e){}return function(){return!1}}(),Y=function(){return H.isNode?function(){return process.emit.apply(process,arguments)}:H.global?function(t){var e="on"+t.toLowerCase(),n=H.global[e];return n?(n.apply(H.global,[].slice.call(arguments,1)),!0):!1}:function(){return!1}}(),Z={promiseCreated:r,promiseFulfilled:r,promiseRejected:r,promiseResolved:r,promiseCancelled:r,promiseChained:function(t,e,n){return{promise:e,child:n}},warning:function(t,e){return{warning:e}},unhandledRejection:function(t,e,n){return{reason:e,promise:n}},rejectionHandled:r},tt=function(t){var e=!1;try{e=Y.apply(null,arguments)}catch(n){I.throwLater(n),e=!0}var r=!1;try{r=J(t,Z[t].apply(null,arguments))}catch(n){I.throwLater(n),r=!0}return r||e};e.config=function(t){if(t=Object(t),"longStackTraces"in t&&(t.longStackTraces?e.longStackTraces():!t.longStackTraces&&e.hasLongStackTraces()&&K()),"warnings"in t){var n=t.warnings;ot.warnings=!!n,W=ot.warnings,H.isObject(n)&&"wForgottenReturn"in n&&(W=!!n.wForgottenReturn)}if("cancellation"in t&&t.cancellation&&!ot.cancellation){if(I.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");e.prototype._clearCancellationData=l,e.prototype._propagateFrom=u,e.prototype._onCancel=a,e.prototype._setOnCancel=c,e.prototype._attachCancellationCallback=s,e.prototype._execute=o,et=u,ot.cancellation=!0}return"monitoring"in t&&(t.monitoring&&!ot.monitoring?(ot.monitoring=!0,e.prototype._fireEvent=tt):!t.monitoring&&ot.monitoring&&(ot.monitoring=!1,e.prototype._fireEvent=i)),e},e.prototype._fireEvent=i,e.prototype._execute=function(t,e,n){try{t(e,n)}catch(r){return r}},e.prototype._onCancel=function(){},e.prototype._setOnCancel=function(t){},e.prototype._attachCancellationCallback=function(t){},e.prototype._captureStackTrace=function(){},e.prototype._attachExtraTrace=function(){},e.prototype._clearCancellationData=function(){},e.prototype._propagateFrom=function(t,e){};var et=p,nt=function(){return!1},rt=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;H.inherits(S,Error),n.CapturedTrace=S,S.prototype.uncycle=function(){var t=this._length;if(!(2>t)){for(var e=[],n={},r=0,i=this;void 0!==i;++r)e.push(i),i=i._parent;t=this._length=r;for(var r=t-1;r>=0;--r){var o=e[r].stack;void 0===n[o]&&(n[o]=r)}for(var r=0;t>r;++r){var s=e[r].stack,a=n[s];if(void 0!==a&&a!==r){a>0&&(e[a-1]._parent=void 0,e[a-1]._length=1),e[r]._parent=void 0,e[r]._length=1;var c=r>0?e[r-1]:this;t-1>a?(c._parent=e[a+1],c._parent.uncycle(),c._length=c._parent._length+1):(c._parent=void 0,c._length=1);for(var l=c._length+1,u=r-2;u>=0;--u)e[u]._length=l,l++;return}}}},S.prototype.attachExtraTrace=function(t){if(!t.__stackCleaned__){this.uncycle();for(var e=j(t),n=e.message,r=[e.stack],i=this;void 0!==i;)r.push(w(i.stack.split("\n"))),i=i._parent;b(r),g(r),H.notEnumerableProp(t,"stack",m(n,r)),H.notEnumerableProp(t,"__stackCleaned__",!0)}};var it=function(){var t=/^\s*at\s*/,e=function(t,e){return"string"==typeof t?t:void 0!==e.name&&void 0!==e.message?e.toString():F(e)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit+=6,q=t,Q=e;var n=Error.captureStackTrace;return nt=function(t){return B.test(t)},function(t,e){Error.stackTraceLimit+=6,n(t,e),Error.stackTraceLimit-=6}}var r=new Error;if("string"==typeof r.stack&&r.stack.split("\n")[0].indexOf("stackDetection@")>=0)return q=/@/,Q=e,$=!0,function(t){t.stack=(new Error).stack};var i;try{throw new Error}catch(o){i="stack"in o}return"stack"in r||!i||"number"!=typeof Error.stackTraceLimit?(Q=function(t,e){return"string"==typeof t?t:"object"!=typeof e&&"function"!=typeof e||void 0===e.name||void 0===e.message?F(e):e.toString()},null):(q=t,Q=e,function(t){Error.stackTraceLimit+=6;try{throw new Error}catch(e){t.stack=e.stack}Error.stackTraceLimit-=6})}([]);"undefined"!=typeof console&&"undefined"!=typeof console.warn&&(D=function(t){console.warn(t)},H.isNode&&process.stderr.isTTY?D=function(t,e){var n=e?"":"";console.warn(n+t+"\n")}:H.isNode||"string"!=typeof(new Error).stack||(D=function(t,e){console.warn("%c"+t,e?"color: darkorange":"color: red")}));var ot={warnings:z,longStackTraces:!1,cancellation:!1,monitoring:!1};return X&&e.longStackTraces(),{longStackTraces:function(){return ot.longStackTraces},warnings:function(){return ot.warnings},cancellation:function(){return ot.cancellation},monitoring:function(){return ot.monitoring},propagateFromFunction:function(){return et},boundValueFunction:function(){return h},checkForgottenReturns:d,setBounds:R,warn:y,deprecated:v,CapturedTrace:S,fireDomEvent:J,fireGlobalEvent:Y}}},{"./errors":12,"./util":36}],10:[function(t,e,n){"use strict";e.exports=function(t){function e(){return this.value}function n(){throw this.reason}t.prototype["return"]=t.prototype.thenReturn=function(n){return n instanceof t&&n.suppressUnhandledRejections(),this._then(e,void 0,void 0,{value:n},void 0)},t.prototype["throw"]=t.prototype.thenThrow=function(t){return this._then(n,void 0,void 0,{reason:t},void 0)},t.prototype.catchThrow=function(t){if(arguments.length<=1)return this._then(void 0,n,void 0,{reason:t},void 0);var e=arguments[1],r=function(){throw e};return this.caught(t,r)},t.prototype.catchReturn=function(n){if(arguments.length<=1)return n instanceof t&&n.suppressUnhandledRejections(),this._then(void 0,e,void 0,{value:n},void 0);var r=arguments[1];r instanceof t&&r.suppressUnhandledRejections();var i=function(){return r};return this.caught(n,i)}}},{}],11:[function(t,e,n){"use strict";e.exports=function(t,e){function n(){return o(this)}function r(t,n){return i(t,n,e,e)}var i=t.reduce,o=t.all;t.prototype.each=function(t){return i(this,t,e,0)._then(n,void 0,void 0,this,void 0)},t.prototype.mapSeries=function(t){return i(this,t,e,e)},t.each=function(t,r){return i(t,r,e,0)._then(n,void 0,void 0,t,void 0)},t.mapSeries=r}},{}],12:[function(t,e,n){"use strict";function r(t,e){function n(r){return this instanceof n?(p(this,"message","string"==typeof r?r:e),p(this,"name",t),void(Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this))):new n(r)}return u(n,Error),n}function i(t){return this instanceof i?(p(this,"name","OperationalError"),p(this,"message",t),this.cause=t,this.isOperational=!0,void(t instanceof Error?(p(this,"message",t.message),p(this,"stack",t.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor))):new i(t)}var o,s,a=t("./es5"),c=a.freeze,l=t("./util"),u=l.inherits,p=l.notEnumerableProp,h=r("Warning","warning"),f=r("CancellationError","cancellation error"),_=r("TimeoutError","timeout error"),d=r("AggregateError","aggregate error");try{o=TypeError,s=RangeError}catch(v){o=r("TypeError","type error"),s=r("RangeError","range error")}for(var y="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),m=0;m1?t.cancelPromise._reject(e):t.cancelPromise._cancel(),t.cancelPromise=null,!0):!1}function s(){return c.call(this,this.promise._target()._settledValue())}function a(t){return o(this,t)?void 0:(p.e=t,p)}function c(t){var r=this.promise,c=this.handler;if(!this.called){this.called=!0;var l=this.isFinallyHandler()?c.call(r._boundValue()):c.call(r._boundValue(),t);if(void 0!==l){r._setReturnedNonUndefined();var h=n(l,r);if(h instanceof e){if(null!=this.cancelPromise){if(h._isCancelled()){var f=new u("late cancellation observer");return r._attachExtraTrace(f),p.e=f,p}h.isPending()&&h._attachCancellationCallback(new i(this))}return h._then(s,a,void 0,this,void 0)}}}return r.isRejected()?(o(this),p.e=t,p):(o(this),t)}var l=t("./util"),u=e.CancellationError,p=l.errorObj;return r.prototype.isFinallyHandler=function(){return 0===this.type},i.prototype._resultCancelled=function(){o(this.finallyHandler)},e.prototype._passThrough=function(t,e,n,i){return"function"!=typeof t?this.then():this._then(n,i,void 0,new r(this,e,t),void 0)},e.prototype.lastly=e.prototype["finally"]=function(t){return this._passThrough(t,0,c,c)},e.prototype.tap=function(t){return this._passThrough(t,1,c)},r}},{"./util":36}],16:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,n,r){for(var o=0;o0&&"function"==typeof arguments[e]){t=arguments[e];var r}var i=[].slice.call(arguments);t&&i.pop();var r=new n(i).promise();return void 0!==t?r.spread(t):r}}},{"./util":36}],18:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,e,n,r){this.constructor$(t),this._promise._captureStackTrace();var i=l();this._callback=null===i?e:u.domainBind(i,e),this._preservedValues=r===o?new Array(this.length()):null,this._limit=n,this._inFlight=0,this._queue=[],f.invoke(this._asyncInit,this,void 0)}function c(t,n,i,o){if("function"!=typeof n)return r("expecting a function but got "+u.classString(n));var s=0;if(void 0!==i){if("object"!=typeof i||null===i)return e.reject(new TypeError("options argument must be an object but it is "+u.classString(i)));if("number"!=typeof i.concurrency)return e.reject(new TypeError("'concurrency' must be a number but it is "+u.classString(i.concurrency)));s=i.concurrency}return s="number"==typeof s&&isFinite(s)&&s>=1?s:0,new a(t,n,s,o).promise()}var l=e._getDomain,u=t("./util"),p=u.tryCatch,h=u.errorObj,f=e._async;u.inherits(a,n),a.prototype._asyncInit=function(){this._init$(void 0,-2)},a.prototype._init=function(){},a.prototype._promiseFulfilled=function(t,n){var r=this._values,o=this.length(),a=this._preservedValues,c=this._limit;if(0>n){if(n=-1*n-1,r[n]=t,c>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return!0}else{if(c>=1&&this._inFlight>=c)return r[n]=t,this._queue.push(n),!1;null!==a&&(a[n]=t);var l=this._promise,u=this._callback,f=l._boundValue();l._pushContext();var _=p(u).call(f,t,n,o),d=l._popContext();if(s.checkForgottenReturns(_,d,null!==a?"Promise.filter":"Promise.map",l),_===h)return this._reject(_.e),!0;var v=i(_,this._promise);if(v instanceof e){v=v._target();var y=v._bitField;if(0===(50397184&y))return c>=1&&this._inFlight++,r[n]=v,v._proxy(this,-1*(n+1)),!1;if(0===(33554432&y))return 0!==(16777216&y)?(this._reject(v._reason()),!0):(this._cancel(),!0);_=v._value()}r[n]=_}var m=++this._totalResolved;return m>=o?(null!==a?this._filter(r,a):this._resolve(r),!0):!1},a.prototype._drainQueue=function(){for(var t=this._queue,e=this._limit,n=this._values;t.length>0&&this._inFlighto;++o)t[o]&&(r[i++]=e[o]);r.length=i,this._resolve(r)},a.prototype.preservedValues=function(){return this._preservedValues},e.prototype.map=function(t,e){return c(this,t,e,null)},e.map=function(t,e,n,r){return c(t,e,n,r)}}},{"./util":36}],19:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){var s=t("./util"),a=s.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("expecting a function but got "+s.classString(t));return function(){var r=new e(n);r._captureStackTrace(),r._pushContext();var i=a(t).apply(this,arguments),s=r._popContext();return o.checkForgottenReturns(i,s,"Promise.method",r),r._resolveFromSyncValue(i),r}},e.attempt=e["try"]=function(t){if("function"!=typeof t)return i("expecting a function but got "+s.classString(t));var r=new e(n);r._captureStackTrace(),r._pushContext();var c;if(arguments.length>1){o.deprecated("calling Promise.try with more than 1 argument");var l=arguments[1],u=arguments[2];c=s.isArray(l)?a(t).apply(u,l):a(t).call(u,l)}else c=a(t)();var p=r._popContext();return o.checkForgottenReturns(c,p,"Promise.try",r),r._resolveFromSyncValue(c),r},e.prototype._resolveFromSyncValue=function(t){t===s.errorObj?this._rejectCallback(t.e,!1):this._resolveCallback(t,!0)}}},{"./util":36}],20:[function(t,e,n){"use strict";function r(t){return t instanceof Error&&u.getPrototypeOf(t)===Error.prototype}function i(t){var e;if(r(t)){e=new l(t),e.name=t.name,e.message=t.message,e.stack=t.stack;for(var n=u.keys(t),i=0;i1){var n,r=new Array(e-1),i=0;for(n=0;e-1>n;++n){var o=arguments[n];if(!f.isObject(o))return p("expecting an object but got A catch statement predicate "+f.classString(o));r[i++]=o}return r.length=i,t=arguments[n],this.then(void 0,P(r,t,this))}return this.then(void 0,t)},i.prototype.reflect=function(){return this._then(u,u,void 0,this,void 0)},i.prototype.then=function(t,e){if(x.warnings()&&arguments.length>0&&"function"!=typeof t&&"function"!=typeof e){var n=".then() only accepts functions but was passed: "+f.classString(t);arguments.length>1&&(n+=", "+f.classString(e)),this._warn(n)}return this._then(t,e,void 0,void 0,void 0)},i.prototype.done=function(t,e){var n=this._then(t,e,void 0,void 0,void 0);n._setIsFinal()},i.prototype.spread=function(t){return"function"!=typeof t?p("expecting a function but got "+f.classString(t)):this.all()._then(t,void 0,void 0,w,void 0)},i.prototype.toJSON=function(){var t={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(t.fulfillmentValue=this.value(),t.isFulfilled=!0):this.isRejected()&&(t.rejectionReason=this.reason(),t.isRejected=!0),t},i.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new E(this).promise()},i.prototype.error=function(t){return this.caught(f.originatesFromRejection,t)},i.getNewLibraryCopy=e.exports,i.is=function(t){return t instanceof i},i.fromNode=i.fromCallback=function(t){var e=new i(b);e._captureStackTrace();var n=arguments.length>1?!!Object(arguments[1]).multiArgs:!1,r=O(t)(R(e,n));return r===S&&e._rejectCallback(r.e,!0),e._isFateSealed()||e._setAsyncGuaranteed(),e},i.all=function(t){return new E(t).promise()},i.cast=function(t){var e=j(t);return e instanceof i||(e=new i(b),e._captureStackTrace(),e._setFulfilled(),e._rejectionHandler0=t),e},i.resolve=i.fulfilled=i.cast,i.reject=i.rejected=function(t){var e=new i(b);return e._captureStackTrace(),e._rejectCallback(t,!0),e},i.setScheduler=function(t){if("function"!=typeof t)throw new m("expecting a function but got "+f.classString(t));return v.setScheduler(t)},i.prototype._then=function(t,e,n,r,o){var s=void 0!==o,a=s?o:new i(b),l=this._target(),u=l._bitField;s||(a._propagateFrom(this,3),a._captureStackTrace(),void 0===r&&0!==(2097152&this._bitField)&&(r=0!==(50397184&u)?this._boundValue():l===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,a));var p=c();if(0!==(50397184&u)){var h,_,d=l._settlePromiseCtx;0!==(33554432&u)?(_=l._rejectionHandler0,h=t):0!==(16777216&u)?(_=l._fulfillmentHandler0,h=e,l._unsetRejectionIsUnhandled()):(d=l._settlePromiseLateCancellationObserver,_=new g("late cancellation observer"),l._attachExtraTrace(_),h=e),v.invoke(d,l,{handler:null===p?h:"function"==typeof h&&f.domainBind(p,h),promise:a,receiver:r,value:_})}else l._addCallbacks(t,e,a,r,p);return a},i.prototype._length=function(){return 65535&this._bitField},i.prototype._isFateSealed=function(){return 0!==(117506048&this._bitField)},i.prototype._isFollowing=function(){return 67108864===(67108864&this._bitField)},i.prototype._setLength=function(t){this._bitField=-65536&this._bitField|65535&t},i.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},i.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},i.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},i.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},i.prototype._isFinal=function(){return(4194304&this._bitField)>0},i.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},i.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},i.prototype._setWillBeCancelled=function(){this._bitField=8388608|this._bitField},i.prototype._setAsyncGuaranteed=function(){v.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},i.prototype._receiverAt=function(t){var e=0===t?this._receiver0:this[4*t-4+3];return e===h?void 0:void 0===e&&this._isBound()?this._boundValue():e},i.prototype._promiseAt=function(t){return this[4*t-4+2]},i.prototype._fulfillmentHandlerAt=function(t){return this[4*t-4+0]},i.prototype._rejectionHandlerAt=function(t){return this[4*t-4+1]},i.prototype._boundValue=function(){},i.prototype._migrateCallback0=function(t){var e=(t._bitField,t._fulfillmentHandler0),n=t._rejectionHandler0,r=t._promise0,i=t._receiverAt(0);void 0===i&&(i=h),this._addCallbacks(e,n,r,i,null)},i.prototype._migrateCallbackAt=function(t,e){var n=t._fulfillmentHandlerAt(e),r=t._rejectionHandlerAt(e),i=t._promiseAt(e),o=t._receiverAt(e);void 0===o&&(o=h),this._addCallbacks(n,r,i,o,null)},i.prototype._addCallbacks=function(t,e,n,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=n,this._receiver0=r,"function"==typeof t&&(this._fulfillmentHandler0=null===i?t:f.domainBind(i,t)),"function"==typeof e&&(this._rejectionHandler0=null===i?e:f.domainBind(i,e));else{var s=4*o-4;this[s+2]=n,this[s+3]=r,"function"==typeof t&&(this[s+0]=null===i?t:f.domainBind(i,t)),"function"==typeof e&&(this[s+1]=null===i?e:f.domainBind(i,e))}return this._setLength(o+1),o},i.prototype._proxy=function(t,e){this._addCallbacks(void 0,void 0,e,t,null)},i.prototype._resolveCallback=function(t,e){if(0===(117506048&this._bitField)){if(t===this)return this._rejectCallback(l(),!1);var n=j(t,this);if(!(n instanceof i))return this._fulfill(t);e&&this._propagateFrom(n,2);var r=n._target();if(r===this)return void this._reject(l());var o=r._bitField;if(0===(50397184&o)){var s=this._length();s>0&&r._migrateCallback0(this);for(var a=1;s>a;++a)r._migrateCallbackAt(this,a);this._setFollowing(),this._setLength(0),this._setFollowee(r)}else if(0!==(33554432&o))this._fulfill(r._value());else if(0!==(16777216&o))this._reject(r._reason());else{var c=new g("late cancellation observer");r._attachExtraTrace(c),this._reject(c)}}},i.prototype._rejectCallback=function(t,e,n){var r=f.ensureErrorObject(t),i=r===t;if(!i&&!n&&x.warnings()){var o="a promise was rejected with a non-error: "+f.classString(t);this._warn(o,!0)}this._attachExtraTrace(r,e?i:!1),this._reject(t)},i.prototype._resolveFromExecutor=function(t){var e=this;this._captureStackTrace(),this._pushContext();var n=!0,r=this._execute(t,function(t){e._resolveCallback(t)},function(t){e._rejectCallback(t,n)});n=!1,this._popContext(),void 0!==r&&e._rejectCallback(r,!0)},i.prototype._settlePromiseFromHandler=function(t,e,n,r){var i=r._bitField;if(0===(65536&i)){r._pushContext();var o;e===w?n&&"number"==typeof n.length?o=O(t).apply(this._boundValue(),n):(o=S,o.e=new m("cannot .spread() a non-array: "+f.classString(n))):o=O(t).call(e,n);var s=r._popContext();i=r._bitField,0===(65536&i)&&(o===C?r._reject(n):o===S?r._rejectCallback(o.e,!1):(x.checkForgottenReturns(o,s,"",r,this),r._resolveCallback(o)))}},i.prototype._target=function(){for(var t=this;t._isFollowing();)t=t._followee();return t},i.prototype._followee=function(){return this._rejectionHandler0},i.prototype._setFollowee=function(t){this._rejectionHandler0=t},i.prototype._settlePromise=function(t,e,r,o){var s=t instanceof i,a=this._bitField,c=0!==(134217728&a);0!==(65536&a)?(s&&t._invokeInternalOnCancel(),r instanceof T&&r.isFinallyHandler()?(r.cancelPromise=t,O(e).call(r,o)===S&&t._reject(S.e)):e===u?t._fulfill(u.call(r)):r instanceof n?r._promiseCancelled(t):s||t instanceof E?t._cancel():r.cancel()):"function"==typeof e?s?(c&&t._setAsyncGuaranteed(),this._settlePromiseFromHandler(e,r,o,t)):e.call(r,o,t):r instanceof n?r._isResolved()||(0!==(33554432&a)?r._promiseFulfilled(o,t):r._promiseRejected(o,t)):s&&(c&&t._setAsyncGuaranteed(),0!==(33554432&a)?t._fulfill(o):t._reject(o))},i.prototype._settlePromiseLateCancellationObserver=function(t){var e=t.handler,n=t.promise,r=t.receiver,o=t.value;"function"==typeof e?n instanceof i?this._settlePromiseFromHandler(e,r,o,n):e.call(r,o,n):n instanceof i&&n._reject(o)},i.prototype._settlePromiseCtx=function(t){this._settlePromise(t.promise,t.handler,t.receiver,t.value)},i.prototype._settlePromise0=function(t,e,n){var r=this._promise0,i=this._receiverAt(0);this._promise0=void 0,this._receiver0=void 0,this._settlePromise(r,t,i,e)},i.prototype._clearCallbackDataAtIndex=function(t){var e=4*t-4;this[e+2]=this[e+3]=this[e+0]=this[e+1]=void 0},i.prototype._fulfill=function(t){var e=this._bitField;if(!((117506048&e)>>>16)){if(t===this){var n=l();return this._attachExtraTrace(n),this._reject(n)}this._setFulfilled(),this._rejectionHandler0=t,(65535&e)>0&&(0!==(134217728&e)?this._settlePromises():v.settlePromises(this))}},i.prototype._reject=function(t){var e=this._bitField;if(!((117506048&e)>>>16))return this._setRejected(),this._fulfillmentHandler0=t,this._isFinal()?v.fatalError(t,f.isNode):void((65535&e)>0?v.settlePromises(this):this._ensurePossibleRejectionHandled())},i.prototype._fulfillPromises=function(t,e){for(var n=1;t>n;n++){var r=this._fulfillmentHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._rejectPromises=function(t,e){for(var n=1;t>n;n++){var r=this._rejectionHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._settlePromises=function(){var t=this._bitField,e=65535&t;if(e>0){if(0!==(16842752&t)){var n=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,n,t),this._rejectPromises(e,n)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,t),this._fulfillPromises(e,r)}this._setLength(0)}this._clearCancellationData()},i.prototype._settledValue=function(){var t=this._bitField;return 0!==(33554432&t)?this._rejectionHandler0:0!==(16777216&t)?this._fulfillmentHandler0:void 0},i.defer=i.pending=function(){x.deprecated("Promise.defer","new Promise");var t=new i(b);return{promise:t,resolve:o,reject:s}},f.notEnumerableProp(i,"_makeSelfResolutionError",l),t("./method")(i,b,j,p,x),t("./bind")(i,b,j,x),t("./cancel")(i,E,p,x),t("./direct_resolve")(i),t("./synchronous_inspection")(i),t("./join")(i,E,j,b,v,c),i.Promise=i,i.version="3.4.7",t("./map.js")(i,E,p,j,b,x),t("./call_get.js")(i),t("./using.js")(i,p,j,F,b,x),t("./timers.js")(i,b,x),t("./generators.js")(i,p,b,j,n,x),t("./nodeify.js")(i),t("./promisify.js")(i,b),t("./props.js")(i,E,j,p),t("./race.js")(i,b,j,p),t("./reduce.js")(i,E,p,j,b,x),t("./settle.js")(i,E,x),t("./some.js")(i,E,p),t("./filter.js")(i,b),t("./each.js")(i,b),t("./any.js")(i),f.toFastProperties(i),f.toFastProperties(i.prototype),a({a:1}),a({b:2}),a({c:3}),a(1),a(function(){}),a(void 0),a(!1),a(new i(b)),x.setBounds(d.firstLineError,f.lastLineError),i}},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){function s(t){switch(t){case-2:return[];case-3:return{}}}function a(t){var r=this._promise=new e(n);t instanceof e&&r._propagateFrom(t,3),r._setOnCancel(this),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}var c=t("./util");c.isArray;return c.inherits(a,o),a.prototype.length=function(){return this._length},a.prototype.promise=function(){return this._promise},a.prototype._init=function l(t,n){var o=r(this._values,this._promise);if(o instanceof e){o=o._target();var a=o._bitField;if(this._values=o,0===(50397184&a))return this._promise._setAsyncGuaranteed(),o._then(l,this._reject,void 0,this,n);if(0===(33554432&a))return 0!==(16777216&a)?this._reject(o._reason()):this._cancel();o=o._value()}if(o=c.asArray(o),null===o){var u=i("expecting an array or an iterable object but got "+c.classString(o)).reason();return void this._promise._rejectCallback(u,!1)}return 0===o.length?void(-5===n?this._resolveEmptyArray():this._resolve(s(n))):void this._iterate(o)},a.prototype._iterate=function(t){var n=this.getActualLength(t.length);this._length=n,this._values=this.shouldCopyValues()?new Array(n):this._values;for(var i=this._promise,o=!1,s=null,a=0;n>a;++a){var c=r(t[a],i);c instanceof e?(c=c._target(),s=c._bitField):s=null,o?null!==s&&c.suppressUnhandledRejections():null!==s?0===(50397184&s)?(c._proxy(this,a),this._values[a]=c):o=0!==(33554432&s)?this._promiseFulfilled(c._value(),a):0!==(16777216&s)?this._promiseRejected(c._reason(),a):this._promiseCancelled(a):o=this._promiseFulfilled(c,a)}o||i._setAsyncGuaranteed()},a.prototype._isResolved=function(){return null===this._values},a.prototype._resolve=function(t){this._values=null,this._promise._fulfill(t)},a.prototype._cancel=function(){!this._isResolved()&&this._promise._isCancellable()&&(this._values=null,this._promise._cancel())},a.prototype._reject=function(t){this._values=null,this._promise._rejectCallback(t,!1)},a.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},a.prototype._promiseCancelled=function(){return this._cancel(),!0},a.prototype._promiseRejected=function(t){return this._totalResolved++,this._reject(t),!0},a.prototype._resultCancelled=function(){if(!this._isResolved()){var t=this._values;if(this._cancel(),t instanceof e)t.cancel();else for(var n=0;nc;c+=2){var u=s[c],p=s[c+1],_=u+e;if(r===k)t[_]=k(u,h,u,p,e,i);else{var d=r(p,function(){return k(u,h,u,p,e,i)});f.notEnumerableProp(d,"__isPromisified__",!0),t[_]=d}}return f.toFastProperties(t),t}function u(t,e,n){return k(t,e,void 0,t,null,n)}var p,h={},f=t("./util"),_=t("./nodeback"),d=f.withAppended,v=f.maybeWrapAsError,y=f.canEvaluate,m=t("./errors").TypeError,g="Async",b={__isPromisified__:!0},w=["arity","length","name","arguments","caller","callee","prototype","__isPromisified__"],C=new RegExp("^(?:"+w.join("|")+")$"),j=function(t){return f.isIdentifier(t)&&"_"!==t.charAt(0)&&"constructor"!==t},E=function(t){return t.replace(/([$])/,"\\$")},k=y?p:c;e.promisify=function(t,e){if("function"!=typeof t)throw new m("expecting a function but got "+f.classString(t));if(i(t))return t;e=Object(e);var n=void 0===e.context?h:e.context,o=!!e.multiArgs,s=u(t,n,o);return f.copyDescriptors(t,s,r),s},e.promisifyAll=function(t,e){if("function"!=typeof t&&"object"!=typeof t)throw new m("the target of promisifyAll must be an object or a function\n\n See http://goo.gl/MqrFmX\n");e=Object(e);var n=!!e.multiArgs,r=e.suffix;"string"!=typeof r&&(r=g);var i=e.filter;"function"!=typeof i&&(i=j);var o=e.promisifier;if("function"!=typeof o&&(o=k),!f.isIdentifier(r))throw new RangeError("suffix must be a valid identifier\n\n See http://goo.gl/MqrFmX\n");for(var s=f.inheritedDataKeys(t),a=0;ao;++o){var s=r[o];e[o]=t[s],e[o+i]=s}}this.constructor$(e),this._isMap=n,this._init$(void 0,-3)}function s(t){var n,s=r(t);return l(s)?(n=s instanceof e?s._then(e.props,void 0,void 0,void 0,void 0):new o(s).promise(),s instanceof e&&n._propagateFrom(s,2),n):i("cannot await properties of a non-object\n\n See http://goo.gl/MqrFmX\n")}var a,c=t("./util"),l=c.isObject,u=t("./es5");"function"==typeof Map&&(a=Map);var p=function(){function t(t,r){this[e]=t,this[e+n]=r,e++}var e=0,n=0;return function(r){n=r.size,e=0;var i=new Array(2*r.size);return r.forEach(t,i),i}}(),h=function(t){for(var e=new a,n=t.length/2|0,r=0;n>r;++r){var i=t[n+r],o=t[r];e.set(i,o)}return e};c.inherits(o,n),o.prototype._init=function(){},o.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;if(n>=this._length){var r;if(this._isMap)r=h(this._values);else{r={};for(var i=this.length(),o=0,s=this.length();s>o;++o)r[this._values[o+i]]=this._values[o]}return this._resolve(r),!0}return!1},o.prototype.shouldCopyValues=function(){return!1},o.prototype.getActualLength=function(t){return t>>1},e.prototype.props=function(){return s(this)},e.props=function(t){return s(t)}}},{"./es5":13,"./util":36}],26:[function(t,e,n){"use strict";function r(t,e,n,r,i){for(var o=0;i>o;++o)n[o+r]=t[o+e],t[o+e]=void 0}function i(t){this._capacity=t,this._length=0,this._front=0}i.prototype._willBeOverCapacity=function(t){return this._capacityh;++h){var _=t[h];(void 0!==_||h in t)&&e.cast(_)._then(u,p,void 0,l,null)}return l}var s=t("./util"),a=function(t){return t.then(function(e){return o(e,t)})};e.race=function(t){return o(t,void 0)},e.prototype.race=function(){return o(this,void 0)}}},{"./util":36}],28:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,n,r,i){this.constructor$(t);var s=h();this._fn=null===s?n:f.domainBind(s,n),void 0!==r&&(r=e.resolve(r),r._attachCancellationCallback(this)),this._initialValue=r,this._currentCancellable=null,i===o?this._eachValues=Array(this._length):0===i?this._eachValues=null:this._eachValues=void 0,this._promise._captureStackTrace(),this._init$(void 0,-5)}function c(t,e){this.isFulfilled()?e._resolve(t):e._reject(t)}function l(t,e,n,i){if("function"!=typeof e)return r("expecting a function but got "+f.classString(e));var o=new a(t,e,n,i);return o.promise()}function u(t){this.accum=t,this.array._gotAccum(t);var n=i(this.value,this.array._promise);return n instanceof e?(this.array._currentCancellable=n,n._then(p,void 0,void 0,this,void 0)):p.call(this,n)}function p(t){var n=this.array,r=n._promise,i=_(n._fn);r._pushContext();var o;o=void 0!==n._eachValues?i.call(r._boundValue(),t,this.index,this.length):i.call(r._boundValue(),this.accum,t,this.index,this.length),o instanceof e&&(n._currentCancellable=o);var a=r._popContext();return s.checkForgottenReturns(o,a,void 0!==n._eachValues?"Promise.each":"Promise.reduce",r),o}var h=e._getDomain,f=t("./util"),_=f.tryCatch;f.inherits(a,n),a.prototype._gotAccum=function(t){void 0!==this._eachValues&&null!==this._eachValues&&t!==o&&this._eachValues.push(t)},a.prototype._eachComplete=function(t){return null!==this._eachValues&&this._eachValues.push(t),this._eachValues},a.prototype._init=function(){},a.prototype._resolveEmptyArray=function(){this._resolve(void 0!==this._eachValues?this._eachValues:this._initialValue)},a.prototype.shouldCopyValues=function(){return!1},a.prototype._resolve=function(t){this._promise._resolveCallback(t),this._values=null},a.prototype._resultCancelled=function(t){return t===this._initialValue?this._cancel():void(this._isResolved()||(this._resultCancelled$(),this._currentCancellable instanceof e&&this._currentCancellable.cancel(),this._initialValue instanceof e&&this._initialValue.cancel()))},a.prototype._iterate=function(t){this._values=t;var n,r,i=t.length;if(void 0!==this._initialValue?(n=this._initialValue,r=0):(n=e.resolve(t[0]),r=1),this._currentCancellable=n,!n.isRejected())for(;i>r;++r){var o={accum:null,value:t[r],index:r,length:i,array:this};n=n._then(u,void 0,void 0,o,void 0)}void 0!==this._eachValues&&(n=n._then(this._eachComplete,void 0,void 0,this,void 0)),n._then(c,c,void 0,n,this)},e.prototype.reduce=function(t,e){return l(this,t,e,null)},e.reduce=function(t,e,n,r){return l(t,e,n,r)}}},{"./util":36}],29:[function(t,e,n){"use strict";var r,i=t("./util"),o=function(){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")},s=i.getNativePromise();if(i.isNode&&"undefined"==typeof MutationObserver){var a=global.setImmediate,c=process.nextTick;r=i.isRecentNode?function(t){a.call(global,t)}:function(t){c.call(process,t)}}else if("function"==typeof s&&"function"==typeof s.resolve){var l=s.resolve();r=function(t){l.then(t)}}else r="undefined"==typeof MutationObserver||"undefined"!=typeof window&&window.navigator&&(window.navigator.standalone||window.cordova)?"undefined"!=typeof setImmediate?function(t){setImmediate(t)}:"undefined"!=typeof setTimeout?function(t){setTimeout(t,0)}:o:function(){var t=document.createElement("div"),e={attributes:!0},n=!1,r=document.createElement("div"),i=new MutationObserver(function(){t.classList.toggle("foo"),n=!1});i.observe(r,e);var o=function(){n||(n=!0,r.classList.toggle("foo"))};return function(n){var r=new MutationObserver(function(){r.disconnect(),n()});r.observe(t,e),o()}}();e.exports=r},{"./util":36}],30:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.constructor$(t)}var o=e.PromiseInspection,s=t("./util");s.inherits(i,n),i.prototype._promiseResolved=function(t,e){this._values[t]=e;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},i.prototype._promiseFulfilled=function(t,e){var n=new o;return n._bitField=33554432,n._settledValueField=t,this._promiseResolved(e,n)},i.prototype._promiseRejected=function(t,e){var n=new o;return n._bitField=16777216,n._settledValueField=t,this._promiseResolved(e,n)},e.settle=function(t){return r.deprecated(".settle()",".reflect()"),new i(t).promise()},e.prototype.settle=function(){return e.settle(this)}}},{"./util":36}],31:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.constructor$(t),this._howMany=0,this._unwrap=!1,this._initialized=!1}function o(t,e){if((0|e)!==e||0>e)return r("expecting a positive integer\n\n See http://goo.gl/MqrFmX\n");var n=new i(t),o=n.promise();return n.setHowMany(e),n.init(),o}var s=t("./util"),a=t("./errors").RangeError,c=t("./errors").AggregateError,l=s.isArray,u={};s.inherits(i,n),i.prototype._init=function(){ +if(this._initialized){if(0===this._howMany)return void this._resolve([]);this._init$(void 0,-5);var t=l(this._values);!this._isResolved()&&t&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}},i.prototype.init=function(){this._initialized=!0,this._init()},i.prototype.setUnwrap=function(){this._unwrap=!0},i.prototype.howMany=function(){return this._howMany},i.prototype.setHowMany=function(t){this._howMany=t},i.prototype._promiseFulfilled=function(t){return this._addFulfilled(t),this._fulfilled()===this.howMany()?(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values),!0):!1},i.prototype._promiseRejected=function(t){return this._addRejected(t),this._checkOutcome()},i.prototype._promiseCancelled=function(){return this._values instanceof e||null==this._values?this._cancel():(this._addRejected(u),this._checkOutcome())},i.prototype._checkOutcome=function(){if(this.howMany()>this._canPossiblyFulfill()){for(var t=new c,e=this.length();e0?this._reject(t):this._cancel(),!0}return!1},i.prototype._fulfilled=function(){return this._totalResolved},i.prototype._rejected=function(){return this._values.length-this.length()},i.prototype._addRejected=function(t){this._values.push(t)},i.prototype._addFulfilled=function(t){this._values[this._totalResolved++]=t},i.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},i.prototype._getRangeError=function(t){var e="Input array must contain at least "+this._howMany+" items but contains only "+t+" items";return new a(e)},i.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},e.some=function(t,e){return o(t,e)},e.prototype.some=function(t){return o(this,t)},e._SomePromiseArray=i}},{"./errors":12,"./util":36}],32:[function(t,e,n){"use strict";e.exports=function(t){function e(t){void 0!==t?(t=t._target(),this._bitField=t._bitField,this._settledValueField=t._isFateSealed()?t._settledValue():void 0):(this._bitField=0,this._settledValueField=void 0)}e.prototype._settledValue=function(){return this._settledValueField};var n=e.prototype.value=function(){if(!this.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},r=e.prototype.error=e.prototype.reason=function(){if(!this.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},i=e.prototype.isFulfilled=function(){return 0!==(33554432&this._bitField)},o=e.prototype.isRejected=function(){return 0!==(16777216&this._bitField)},s=e.prototype.isPending=function(){return 0===(50397184&this._bitField)},a=e.prototype.isResolved=function(){return 0!==(50331648&this._bitField)};e.prototype.isCancelled=function(){return 0!==(8454144&this._bitField)},t.prototype.__isCancelled=function(){return 65536===(65536&this._bitField)},t.prototype._isCancelled=function(){return this._target().__isCancelled()},t.prototype.isCancelled=function(){return 0!==(8454144&this._target()._bitField)},t.prototype.isPending=function(){return s.call(this._target())},t.prototype.isRejected=function(){return o.call(this._target())},t.prototype.isFulfilled=function(){return i.call(this._target())},t.prototype.isResolved=function(){return a.call(this._target())},t.prototype.value=function(){return n.call(this._target())},t.prototype.reason=function(){var t=this._target();return t._unsetRejectionIsUnhandled(),r.call(t)},t.prototype._value=function(){return this._settledValue()},t.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue()},t.PromiseInspection=e}},{}],33:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,r){if(u(t)){if(t instanceof e)return t;var i=o(t);if(i===l){r&&r._pushContext();var c=e.reject(i.e);return r&&r._popContext(),c}if("function"==typeof i){if(s(t)){var c=new e(n);return t._then(c._fulfill,c._reject,void 0,c,null),c}return a(t,i,r)}}return t}function i(t){return t.then}function o(t){try{return i(t)}catch(e){return l.e=e,l}}function s(t){try{return p.call(t,"_promise0")}catch(e){return!1}}function a(t,r,i){function o(t){a&&(a._resolveCallback(t),a=null)}function s(t){a&&(a._rejectCallback(t,p,!0),a=null)}var a=new e(n),u=a;i&&i._pushContext(),a._captureStackTrace(),i&&i._popContext();var p=!0,h=c.tryCatch(r).call(t,o,s);return p=!1,a&&h===l&&(a._rejectCallback(h.e,!0,!0),a=null),u}var c=t("./util"),l=c.errorObj,u=c.isObject,p={}.hasOwnProperty;return r}},{"./util":36}],34:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.handle=t}function o(t){return clearTimeout(this.handle),t}function s(t){throw clearTimeout(this.handle),t}var a=t("./util"),c=e.TimeoutError;i.prototype._resultCancelled=function(){clearTimeout(this.handle)};var l=function(t){return u(+this).thenReturn(t)},u=e.delay=function(t,o){var s,a;return void 0!==o?(s=e.resolve(o)._then(l,null,null,t,void 0),r.cancellation()&&o instanceof e&&s._setOnCancel(o)):(s=new e(n),a=setTimeout(function(){s._fulfill()},+t),r.cancellation()&&s._setOnCancel(new i(a)),s._captureStackTrace()),s._setAsyncGuaranteed(),s};e.prototype.delay=function(t){return u(t,this)};var p=function(t,e,n){var r;r="string"!=typeof e?e instanceof Error?e:new c("operation timed out"):new c(e),a.markAsOriginatingFromRejection(r),t._attachExtraTrace(r),t._reject(r),null!=n&&n.cancel()};e.prototype.timeout=function(t,e){t=+t;var n,a,c=new i(setTimeout(function(){n.isPending()&&p(n,e,a)},t));return r.cancellation()?(a=this.then(),n=a._then(o,s,void 0,c,void 0),n._setOnCancel(c)):n=this._then(o,s,void 0,c,void 0),n}}},{"./util":36}],35:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t){setTimeout(function(){throw t},0)}function c(t){var e=r(t);return e!==t&&"function"==typeof t._isDisposable&&"function"==typeof t._getDisposer&&t._isDisposable()&&e._setDisposable(t._getDisposer()),e}function l(t,n){function i(){if(s>=l)return u._fulfill();var o=c(t[s++]);if(o instanceof e&&o._isDisposable()){try{o=r(o._getDisposer().tryDispose(n),t.promise)}catch(p){return a(p)}if(o instanceof e)return o._then(i,a,null,null,null)}i()}var s=0,l=t.length,u=new e(o);return i(),u}function u(t,e,n){this._data=t,this._promise=e,this._context=n}function p(t,e,n){this.constructor$(t,e,n)}function h(t){return u.isDisposer(t)?(this.resources[this.index]._setDisposable(t),t.promise()):t}function f(t){this.length=t,this.promise=null,this[t-1]=null}var _=t("./util"),d=t("./errors").TypeError,v=t("./util").inherits,y=_.errorObj,m=_.tryCatch,g={};u.prototype.data=function(){return this._data},u.prototype.promise=function(){return this._promise},u.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():g},u.prototype.tryDispose=function(t){var e=this.resource(),n=this._context;void 0!==n&&n._pushContext();var r=e!==g?this.doDispose(e,t):null;return void 0!==n&&n._popContext(),this._promise._unsetDisposable(),this._data=null,r},u.isDisposer=function(t){return null!=t&&"function"==typeof t.resource&&"function"==typeof t.tryDispose},v(p,u),p.prototype.doDispose=function(t,e){var n=this.data();return n.call(t,t,e)},f.prototype._resultCancelled=function(){for(var t=this.length,n=0;t>n;++n){var r=this[n];r instanceof e&&r.cancel()}},e.using=function(){var t=arguments.length;if(2>t)return n("you must pass at least 2 arguments to Promise.using");var i=arguments[t-1];if("function"!=typeof i)return n("expecting a function but got "+_.classString(i));var o,a=!0;2===t&&Array.isArray(arguments[0])?(o=arguments[0],t=o.length,a=!1):(o=arguments,t--);for(var c=new f(t),p=0;t>p;++p){var d=o[p];if(u.isDisposer(d)){var v=d;d=d.promise(),d._setDisposable(v)}else{var g=r(d);g instanceof e&&(d=g._then(h,null,null,{resources:c,index:p},void 0))}c[p]=d}for(var b=new Array(c.length),p=0;p0},e.prototype._getDisposer=function(){return this._disposer},e.prototype._unsetDisposable=function(){this._bitField=-131073&this._bitField,this._disposer=void 0},e.prototype.disposer=function(t){if("function"==typeof t)return new p(t,this,i());throw new d}}},{"./errors":12,"./util":36}],36:[function(t,e,n){"use strict";function r(){try{var t=P;return P=null,t.apply(this,arguments)}catch(e){return T.e=e,T}}function i(t){return P=t,r}function o(t){return null==t||t===!0||t===!1||"string"==typeof t||"number"==typeof t}function s(t){return"function"==typeof t||"object"==typeof t&&null!==t}function a(t){return o(t)?new Error(v(t)):t}function c(t,e){var n,r=t.length,i=new Array(r+1);for(n=0;r>n;++n)i[n]=t[n];return i[n]=e,i}function l(t,e,n){if(!F.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:void 0;var r=Object.getOwnPropertyDescriptor(t,e);return null!=r?null==r.get&&null==r.set?r.value:n:void 0}function u(t,e,n){if(o(t))return t;var r={value:n,configurable:!0,enumerable:!1,writable:!0};return F.defineProperty(t,e,r),t}function p(t){throw t}function h(t){try{if("function"==typeof t){var e=F.names(t.prototype),n=F.isES5&&e.length>1,r=e.length>0&&!(1===e.length&&"constructor"===e[0]),i=A.test(t+"")&&F.names(t).length>0;if(n||r||i)return!0}return!1}catch(o){return!1}}function f(t){function e(){}e.prototype=t;for(var n=8;n--;)new e;return t}function _(t){return D.test(t)}function d(t,e,n){for(var r=new Array(t),i=0;t>i;++i)r[i]=e+i+n;return r}function v(t){try{return t+""}catch(e){return"[no string representation]"}}function y(t){return null!==t&&"object"==typeof t&&"string"==typeof t.message&&"string"==typeof t.name}function m(t){try{u(t,"isOperational",!0)}catch(e){}}function g(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes__.OperationalError||t.isOperational===!0}function b(t){return y(t)&&F.propertyIsWritable(t,"stack")}function w(t){return{}.toString.call(t)}function C(t,e,n){for(var r=F.names(t),i=0;i10||t[0]>0}(),B.isNode&&B.toFastProperties(process);try{throw new Error}catch(U){B.lastLineError=U}e.exports=B},{"./es5":13}]},{},[4])(4)}),"undefined"!=typeof window&&null!==window?window.P=window.Promise:"undefined"!=typeof self&&null!==self&&(self.P=self.Promise); \ No newline at end of file diff --git a/node_backend/node_modules/bluebird/js/release/any.js b/node_backend/node_modules/bluebird/js/release/any.js new file mode 100644 index 0000000000000000000000000000000000000000..05a6228ef9c9016f6ee42ec9cb1322e120c1961b --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/any.js @@ -0,0 +1,21 @@ +"use strict"; +module.exports = function(Promise) { +var SomePromiseArray = Promise._SomePromiseArray; +function any(promises) { + var ret = new SomePromiseArray(promises); + var promise = ret.promise(); + ret.setHowMany(1); + ret.setUnwrap(); + ret.init(); + return promise; +} + +Promise.any = function (promises) { + return any(promises); +}; + +Promise.prototype.any = function () { + return any(this); +}; + +}; diff --git a/node_backend/node_modules/bluebird/js/release/assert.js b/node_backend/node_modules/bluebird/js/release/assert.js new file mode 100644 index 0000000000000000000000000000000000000000..4518231a1b496f306f5406358f82a2a236657462 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/assert.js @@ -0,0 +1,55 @@ +"use strict"; +module.exports = (function(){ +var AssertionError = (function() { + function AssertionError(a) { + this.constructor$(a); + this.message = a; + this.name = "AssertionError"; + } + AssertionError.prototype = new Error(); + AssertionError.prototype.constructor = AssertionError; + AssertionError.prototype.constructor$ = Error; + return AssertionError; +})(); + +function getParams(args) { + var params = []; + for (var i = 0; i < args.length; ++i) params.push("arg" + i); + return params; +} + +function nativeAssert(callName, args, expect) { + try { + var params = getParams(args); + var constructorArgs = params; + constructorArgs.push("return " + + callName + "("+ params.join(",") + ");"); + var fn = Function.apply(null, constructorArgs); + return fn.apply(null, args); + } catch (e) { + if (!(e instanceof SyntaxError)) { + throw e; + } else { + return expect; + } + } +} + +return function assert(boolExpr, message) { + if (boolExpr === true) return; + + if (typeof boolExpr === "string" && + boolExpr.charAt(0) === "%") { + var nativeCallName = boolExpr; + var $_len = arguments.length;var args = new Array(Math.max($_len - 2, 0)); for(var $_i = 2; $_i < $_len; ++$_i) {args[$_i - 2] = arguments[$_i];}; + if (nativeAssert(nativeCallName, args, message) === message) return; + message = (nativeCallName + " !== " + message); + } + + var ret = new AssertionError(message); + if (Error.captureStackTrace) { + Error.captureStackTrace(ret, assert); + } + throw ret; +}; +})(); diff --git a/node_backend/node_modules/bluebird/js/release/async.js b/node_backend/node_modules/bluebird/js/release/async.js new file mode 100644 index 0000000000000000000000000000000000000000..41f665564750a6fc51c07067d759e6940a061f9f --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/async.js @@ -0,0 +1,161 @@ +"use strict"; +var firstLineError; +try {throw new Error(); } catch (e) {firstLineError = e;} +var schedule = require("./schedule"); +var Queue = require("./queue"); +var util = require("./util"); + +function Async() { + this._customScheduler = false; + this._isTickUsed = false; + this._lateQueue = new Queue(16); + this._normalQueue = new Queue(16); + this._haveDrainedQueues = false; + this._trampolineEnabled = true; + var self = this; + this.drainQueues = function () { + self._drainQueues(); + }; + this._schedule = schedule; +} + +Async.prototype.setScheduler = function(fn) { + var prev = this._schedule; + this._schedule = fn; + this._customScheduler = true; + return prev; +}; + +Async.prototype.hasCustomScheduler = function() { + return this._customScheduler; +}; + +Async.prototype.enableTrampoline = function() { + this._trampolineEnabled = true; +}; + +Async.prototype.disableTrampolineIfNecessary = function() { + if (util.hasDevTools) { + this._trampolineEnabled = false; + } +}; + +Async.prototype.haveItemsQueued = function () { + return this._isTickUsed || this._haveDrainedQueues; +}; + + +Async.prototype.fatalError = function(e, isNode) { + if (isNode) { + process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e) + + "\n"); + process.exit(2); + } else { + this.throwLater(e); + } +}; + +Async.prototype.throwLater = function(fn, arg) { + if (arguments.length === 1) { + arg = fn; + fn = function () { throw arg; }; + } + if (typeof setTimeout !== "undefined") { + setTimeout(function() { + fn(arg); + }, 0); + } else try { + this._schedule(function() { + fn(arg); + }); + } catch (e) { + throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } +}; + +function AsyncInvokeLater(fn, receiver, arg) { + this._lateQueue.push(fn, receiver, arg); + this._queueTick(); +} + +function AsyncInvoke(fn, receiver, arg) { + this._normalQueue.push(fn, receiver, arg); + this._queueTick(); +} + +function AsyncSettlePromises(promise) { + this._normalQueue._pushOne(promise); + this._queueTick(); +} + +if (!util.hasDevTools) { + Async.prototype.invokeLater = AsyncInvokeLater; + Async.prototype.invoke = AsyncInvoke; + Async.prototype.settlePromises = AsyncSettlePromises; +} else { + Async.prototype.invokeLater = function (fn, receiver, arg) { + if (this._trampolineEnabled) { + AsyncInvokeLater.call(this, fn, receiver, arg); + } else { + this._schedule(function() { + setTimeout(function() { + fn.call(receiver, arg); + }, 100); + }); + } + }; + + Async.prototype.invoke = function (fn, receiver, arg) { + if (this._trampolineEnabled) { + AsyncInvoke.call(this, fn, receiver, arg); + } else { + this._schedule(function() { + fn.call(receiver, arg); + }); + } + }; + + Async.prototype.settlePromises = function(promise) { + if (this._trampolineEnabled) { + AsyncSettlePromises.call(this, promise); + } else { + this._schedule(function() { + promise._settlePromises(); + }); + } + }; +} + +Async.prototype._drainQueue = function(queue) { + while (queue.length() > 0) { + var fn = queue.shift(); + if (typeof fn !== "function") { + fn._settlePromises(); + continue; + } + var receiver = queue.shift(); + var arg = queue.shift(); + fn.call(receiver, arg); + } +}; + +Async.prototype._drainQueues = function () { + this._drainQueue(this._normalQueue); + this._reset(); + this._haveDrainedQueues = true; + this._drainQueue(this._lateQueue); +}; + +Async.prototype._queueTick = function () { + if (!this._isTickUsed) { + this._isTickUsed = true; + this._schedule(this.drainQueues); + } +}; + +Async.prototype._reset = function () { + this._isTickUsed = false; +}; + +module.exports = Async; +module.exports.firstLineError = firstLineError; diff --git a/node_backend/node_modules/bluebird/js/release/bind.js b/node_backend/node_modules/bluebird/js/release/bind.js new file mode 100644 index 0000000000000000000000000000000000000000..fc3379db28c259ba329de6617f355225c86e926c --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/bind.js @@ -0,0 +1,67 @@ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { +var calledBind = false; +var rejectThis = function(_, e) { + this._reject(e); +}; + +var targetRejected = function(e, context) { + context.promiseRejectionQueued = true; + context.bindingPromise._then(rejectThis, rejectThis, null, this, e); +}; + +var bindingResolved = function(thisArg, context) { + if (((this._bitField & 50397184) === 0)) { + this._resolveCallback(context.target); + } +}; + +var bindingRejected = function(e, context) { + if (!context.promiseRejectionQueued) this._reject(e); +}; + +Promise.prototype.bind = function (thisArg) { + if (!calledBind) { + calledBind = true; + Promise.prototype._propagateFrom = debug.propagateFromFunction(); + Promise.prototype._boundValue = debug.boundValueFunction(); + } + var maybePromise = tryConvertToPromise(thisArg); + var ret = new Promise(INTERNAL); + ret._propagateFrom(this, 1); + var target = this._target(); + ret._setBoundTo(maybePromise); + if (maybePromise instanceof Promise) { + var context = { + promiseRejectionQueued: false, + promise: ret, + target: target, + bindingPromise: maybePromise + }; + target._then(INTERNAL, targetRejected, undefined, ret, context); + maybePromise._then( + bindingResolved, bindingRejected, undefined, ret, context); + ret._setOnCancel(maybePromise); + } else { + ret._resolveCallback(target); + } + return ret; +}; + +Promise.prototype._setBoundTo = function (obj) { + if (obj !== undefined) { + this._bitField = this._bitField | 2097152; + this._boundTo = obj; + } else { + this._bitField = this._bitField & (~2097152); + } +}; + +Promise.prototype._isBound = function () { + return (this._bitField & 2097152) === 2097152; +}; + +Promise.bind = function (thisArg, value) { + return Promise.resolve(value).bind(thisArg); +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/bluebird.js b/node_backend/node_modules/bluebird/js/release/bluebird.js new file mode 100644 index 0000000000000000000000000000000000000000..1c36cf36446be3d393dd705a97f34c992312da07 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/bluebird.js @@ -0,0 +1,11 @@ +"use strict"; +var old; +if (typeof Promise !== "undefined") old = Promise; +function noConflict() { + try { if (Promise === bluebird) Promise = old; } + catch (e) {} + return bluebird; +} +var bluebird = require("./promise")(); +bluebird.noConflict = noConflict; +module.exports = bluebird; diff --git a/node_backend/node_modules/bluebird/js/release/call_get.js b/node_backend/node_modules/bluebird/js/release/call_get.js new file mode 100644 index 0000000000000000000000000000000000000000..0ed7714ac11e0d84a6debb289a6df06b17cac6e1 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/call_get.js @@ -0,0 +1,123 @@ +"use strict"; +var cr = Object.create; +if (cr) { + var callerCache = cr(null); + var getterCache = cr(null); + callerCache[" size"] = getterCache[" size"] = 0; +} + +module.exports = function(Promise) { +var util = require("./util"); +var canEvaluate = util.canEvaluate; +var isIdentifier = util.isIdentifier; + +var getMethodCaller; +var getGetter; +if (!false) { +var makeMethodCaller = function (methodName) { + return new Function("ensureMethod", " \n\ + return function(obj) { \n\ + 'use strict' \n\ + var len = this.length; \n\ + ensureMethod(obj, 'methodName'); \n\ + switch(len) { \n\ + case 1: return obj.methodName(this[0]); \n\ + case 2: return obj.methodName(this[0], this[1]); \n\ + case 3: return obj.methodName(this[0], this[1], this[2]); \n\ + case 0: return obj.methodName(); \n\ + default: \n\ + return obj.methodName.apply(obj, this); \n\ + } \n\ + }; \n\ + ".replace(/methodName/g, methodName))(ensureMethod); +}; + +var makeGetter = function (propertyName) { + return new Function("obj", " \n\ + 'use strict'; \n\ + return obj.propertyName; \n\ + ".replace("propertyName", propertyName)); +}; + +var getCompiled = function(name, compiler, cache) { + var ret = cache[name]; + if (typeof ret !== "function") { + if (!isIdentifier(name)) { + return null; + } + ret = compiler(name); + cache[name] = ret; + cache[" size"]++; + if (cache[" size"] > 512) { + var keys = Object.keys(cache); + for (var i = 0; i < 256; ++i) delete cache[keys[i]]; + cache[" size"] = keys.length - 256; + } + } + return ret; +}; + +getMethodCaller = function(name) { + return getCompiled(name, makeMethodCaller, callerCache); +}; + +getGetter = function(name) { + return getCompiled(name, makeGetter, getterCache); +}; +} + +function ensureMethod(obj, methodName) { + var fn; + if (obj != null) fn = obj[methodName]; + if (typeof fn !== "function") { + var message = "Object " + util.classString(obj) + " has no method '" + + util.toString(methodName) + "'"; + throw new Promise.TypeError(message); + } + return fn; +} + +function caller(obj) { + var methodName = this.pop(); + var fn = ensureMethod(obj, methodName); + return fn.apply(obj, this); +} +Promise.prototype.call = function (methodName) { + var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}; + if (!false) { + if (canEvaluate) { + var maybeCaller = getMethodCaller(methodName); + if (maybeCaller !== null) { + return this._then( + maybeCaller, undefined, undefined, args, undefined); + } + } + } + args.push(methodName); + return this._then(caller, undefined, undefined, args, undefined); +}; + +function namedGetter(obj) { + return obj[this]; +} +function indexedGetter(obj) { + var index = +this; + if (index < 0) index = Math.max(0, index + obj.length); + return obj[index]; +} +Promise.prototype.get = function (propertyName) { + var isIndex = (typeof propertyName === "number"); + var getter; + if (!isIndex) { + if (canEvaluate) { + var maybeGetter = getGetter(propertyName); + getter = maybeGetter !== null ? maybeGetter : namedGetter; + } else { + getter = namedGetter; + } + } else { + getter = indexedGetter; + } + return this._then(getter, undefined, undefined, propertyName, undefined); +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/cancel.js b/node_backend/node_modules/bluebird/js/release/cancel.js new file mode 100644 index 0000000000000000000000000000000000000000..7a12415ee5852ce66e78598d429903addb99cc02 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/cancel.js @@ -0,0 +1,129 @@ +"use strict"; +module.exports = function(Promise, PromiseArray, apiRejection, debug) { +var util = require("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +Promise.prototype["break"] = Promise.prototype.cancel = function() { + if (!debug.cancellation()) return this._warn("cancellation is disabled"); + + var promise = this; + var child = promise; + while (promise._isCancellable()) { + if (!promise._cancelBy(child)) { + if (child._isFollowing()) { + child._followee().cancel(); + } else { + child._cancelBranched(); + } + break; + } + + var parent = promise._cancellationParent; + if (parent == null || !parent._isCancellable()) { + if (promise._isFollowing()) { + promise._followee().cancel(); + } else { + promise._cancelBranched(); + } + break; + } else { + if (promise._isFollowing()) promise._followee().cancel(); + promise._setWillBeCancelled(); + child = promise; + promise = parent; + } + } +}; + +Promise.prototype._branchHasCancelled = function() { + this._branchesRemainingToCancel--; +}; + +Promise.prototype._enoughBranchesHaveCancelled = function() { + return this._branchesRemainingToCancel === undefined || + this._branchesRemainingToCancel <= 0; +}; + +Promise.prototype._cancelBy = function(canceller) { + if (canceller === this) { + this._branchesRemainingToCancel = 0; + this._invokeOnCancel(); + return true; + } else { + this._branchHasCancelled(); + if (this._enoughBranchesHaveCancelled()) { + this._invokeOnCancel(); + return true; + } + } + return false; +}; + +Promise.prototype._cancelBranched = function() { + if (this._enoughBranchesHaveCancelled()) { + this._cancel(); + } +}; + +Promise.prototype._cancel = function() { + if (!this._isCancellable()) return; + this._setCancelled(); + async.invoke(this._cancelPromises, this, undefined); +}; + +Promise.prototype._cancelPromises = function() { + if (this._length() > 0) this._settlePromises(); +}; + +Promise.prototype._unsetOnCancel = function() { + this._onCancelField = undefined; +}; + +Promise.prototype._isCancellable = function() { + return this.isPending() && !this._isCancelled(); +}; + +Promise.prototype.isCancellable = function() { + return this.isPending() && !this.isCancelled(); +}; + +Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { + if (util.isArray(onCancelCallback)) { + for (var i = 0; i < onCancelCallback.length; ++i) { + this._doInvokeOnCancel(onCancelCallback[i], internalOnly); + } + } else if (onCancelCallback !== undefined) { + if (typeof onCancelCallback === "function") { + if (!internalOnly) { + var e = tryCatch(onCancelCallback).call(this._boundValue()); + if (e === errorObj) { + this._attachExtraTrace(e.e); + async.throwLater(e.e); + } + } + } else { + onCancelCallback._resultCancelled(this); + } + } +}; + +Promise.prototype._invokeOnCancel = function() { + var onCancelCallback = this._onCancel(); + this._unsetOnCancel(); + async.invoke(this._doInvokeOnCancel, this, onCancelCallback); +}; + +Promise.prototype._invokeInternalOnCancel = function() { + if (this._isCancellable()) { + this._doInvokeOnCancel(this._onCancel(), true); + this._unsetOnCancel(); + } +}; + +Promise.prototype._resultCancelled = function() { + this.cancel(); +}; + +}; diff --git a/node_backend/node_modules/bluebird/js/release/catch_filter.js b/node_backend/node_modules/bluebird/js/release/catch_filter.js new file mode 100644 index 0000000000000000000000000000000000000000..0f24ce23eca23ff193a3040d8fdfb394fdb76ccf --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/catch_filter.js @@ -0,0 +1,42 @@ +"use strict"; +module.exports = function(NEXT_FILTER) { +var util = require("./util"); +var getKeys = require("./es5").keys; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function catchFilter(instances, cb, promise) { + return function(e) { + var boundTo = promise._boundValue(); + predicateLoop: for (var i = 0; i < instances.length; ++i) { + var item = instances[i]; + + if (item === Error || + (item != null && item.prototype instanceof Error)) { + if (e instanceof item) { + return tryCatch(cb).call(boundTo, e); + } + } else if (typeof item === "function") { + var matchesPredicate = tryCatch(item).call(boundTo, e); + if (matchesPredicate === errorObj) { + return matchesPredicate; + } else if (matchesPredicate) { + return tryCatch(cb).call(boundTo, e); + } + } else if (util.isObject(e)) { + var keys = getKeys(item); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + if (item[key] != e[key]) { + continue predicateLoop; + } + } + return tryCatch(cb).call(boundTo, e); + } + } + return NEXT_FILTER; + }; +} + +return catchFilter; +}; diff --git a/node_backend/node_modules/bluebird/js/release/context.js b/node_backend/node_modules/bluebird/js/release/context.js new file mode 100644 index 0000000000000000000000000000000000000000..c307414fc627c9a75b95ee2fdad408f9e47d2fa3 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/context.js @@ -0,0 +1,69 @@ +"use strict"; +module.exports = function(Promise) { +var longStackTraces = false; +var contextStack = []; + +Promise.prototype._promiseCreated = function() {}; +Promise.prototype._pushContext = function() {}; +Promise.prototype._popContext = function() {return null;}; +Promise._peekContext = Promise.prototype._peekContext = function() {}; + +function Context() { + this._trace = new Context.CapturedTrace(peekContext()); +} +Context.prototype._pushContext = function () { + if (this._trace !== undefined) { + this._trace._promiseCreated = null; + contextStack.push(this._trace); + } +}; + +Context.prototype._popContext = function () { + if (this._trace !== undefined) { + var trace = contextStack.pop(); + var ret = trace._promiseCreated; + trace._promiseCreated = null; + return ret; + } + return null; +}; + +function createContext() { + if (longStackTraces) return new Context(); +} + +function peekContext() { + var lastIndex = contextStack.length - 1; + if (lastIndex >= 0) { + return contextStack[lastIndex]; + } + return undefined; +} +Context.CapturedTrace = null; +Context.create = createContext; +Context.deactivateLongStackTraces = function() {}; +Context.activateLongStackTraces = function() { + var Promise_pushContext = Promise.prototype._pushContext; + var Promise_popContext = Promise.prototype._popContext; + var Promise_PeekContext = Promise._peekContext; + var Promise_peekContext = Promise.prototype._peekContext; + var Promise_promiseCreated = Promise.prototype._promiseCreated; + Context.deactivateLongStackTraces = function() { + Promise.prototype._pushContext = Promise_pushContext; + Promise.prototype._popContext = Promise_popContext; + Promise._peekContext = Promise_PeekContext; + Promise.prototype._peekContext = Promise_peekContext; + Promise.prototype._promiseCreated = Promise_promiseCreated; + longStackTraces = false; + }; + longStackTraces = true; + Promise.prototype._pushContext = Context.prototype._pushContext; + Promise.prototype._popContext = Context.prototype._popContext; + Promise._peekContext = Promise.prototype._peekContext = peekContext; + Promise.prototype._promiseCreated = function() { + var ctx = this._peekContext(); + if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; + }; +}; +return Context; +}; diff --git a/node_backend/node_modules/bluebird/js/release/debuggability.js b/node_backend/node_modules/bluebird/js/release/debuggability.js new file mode 100644 index 0000000000000000000000000000000000000000..bf0587ce7d409c6d9f86f8f105082ff50f99fbe7 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/debuggability.js @@ -0,0 +1,916 @@ +"use strict"; +module.exports = function(Promise, Context) { +var getDomain = Promise._getDomain; +var async = Promise._async; +var Warning = require("./errors").Warning; +var util = require("./util"); +var canAttachTrace = util.canAttachTrace; +var unhandledRejectionHandled; +var possiblyUnhandledRejection; +var bluebirdFramePattern = + /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; +var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/; +var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/; +var stackFramePattern = null; +var formatStack = null; +var indentStackFrames = false; +var printWarning; +var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && + (false || + util.env("BLUEBIRD_DEBUG") || + util.env("NODE_ENV") === "development")); + +var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && + (debugging || util.env("BLUEBIRD_WARNINGS"))); + +var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && + (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); + +var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && + (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); + +Promise.prototype.suppressUnhandledRejections = function() { + var target = this._target(); + target._bitField = ((target._bitField & (~1048576)) | + 524288); +}; + +Promise.prototype._ensurePossibleRejectionHandled = function () { + if ((this._bitField & 524288) !== 0) return; + this._setRejectionIsUnhandled(); + async.invokeLater(this._notifyUnhandledRejection, this, undefined); +}; + +Promise.prototype._notifyUnhandledRejectionIsHandled = function () { + fireRejectionEvent("rejectionHandled", + unhandledRejectionHandled, undefined, this); +}; + +Promise.prototype._setReturnedNonUndefined = function() { + this._bitField = this._bitField | 268435456; +}; + +Promise.prototype._returnedNonUndefined = function() { + return (this._bitField & 268435456) !== 0; +}; + +Promise.prototype._notifyUnhandledRejection = function () { + if (this._isRejectionUnhandled()) { + var reason = this._settledValue(); + this._setUnhandledRejectionIsNotified(); + fireRejectionEvent("unhandledRejection", + possiblyUnhandledRejection, reason, this); + } +}; + +Promise.prototype._setUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField | 262144; +}; + +Promise.prototype._unsetUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField & (~262144); +}; + +Promise.prototype._isUnhandledRejectionNotified = function () { + return (this._bitField & 262144) > 0; +}; + +Promise.prototype._setRejectionIsUnhandled = function () { + this._bitField = this._bitField | 1048576; +}; + +Promise.prototype._unsetRejectionIsUnhandled = function () { + this._bitField = this._bitField & (~1048576); + if (this._isUnhandledRejectionNotified()) { + this._unsetUnhandledRejectionIsNotified(); + this._notifyUnhandledRejectionIsHandled(); + } +}; + +Promise.prototype._isRejectionUnhandled = function () { + return (this._bitField & 1048576) > 0; +}; + +Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { + return warn(message, shouldUseOwnTrace, promise || this); +}; + +Promise.onPossiblyUnhandledRejection = function (fn) { + var domain = getDomain(); + possiblyUnhandledRejection = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +Promise.onUnhandledRejectionHandled = function (fn) { + var domain = getDomain(); + unhandledRejectionHandled = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +var disableLongStackTraces = function() {}; +Promise.longStackTraces = function () { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + if (!config.longStackTraces && longStackTracesIsSupported()) { + var Promise_captureStackTrace = Promise.prototype._captureStackTrace; + var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; + config.longStackTraces = true; + disableLongStackTraces = function() { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + Promise.prototype._captureStackTrace = Promise_captureStackTrace; + Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; + Context.deactivateLongStackTraces(); + async.enableTrampoline(); + config.longStackTraces = false; + }; + Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; + Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; + Context.activateLongStackTraces(); + async.disableTrampolineIfNecessary(); + } +}; + +Promise.hasLongStackTraces = function () { + return config.longStackTraces && longStackTracesIsSupported(); +}; + +var fireDomEvent = (function() { + try { + if (typeof CustomEvent === "function") { + var event = new CustomEvent("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new CustomEvent(name.toLowerCase(), { + detail: event, + cancelable: true + }); + return !util.global.dispatchEvent(domEvent); + }; + } else if (typeof Event === "function") { + var event = new Event("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new Event(name.toLowerCase(), { + cancelable: true + }); + domEvent.detail = event; + return !util.global.dispatchEvent(domEvent); + }; + } else { + var event = document.createEvent("CustomEvent"); + event.initCustomEvent("testingtheevent", false, true, {}); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = document.createEvent("CustomEvent"); + domEvent.initCustomEvent(name.toLowerCase(), false, true, + event); + return !util.global.dispatchEvent(domEvent); + }; + } + } catch (e) {} + return function() { + return false; + }; +})(); + +var fireGlobalEvent = (function() { + if (util.isNode) { + return function() { + return process.emit.apply(process, arguments); + }; + } else { + if (!util.global) { + return function() { + return false; + }; + } + return function(name) { + var methodName = "on" + name.toLowerCase(); + var method = util.global[methodName]; + if (!method) return false; + method.apply(util.global, [].slice.call(arguments, 1)); + return true; + }; + } +})(); + +function generatePromiseLifecycleEventObject(name, promise) { + return {promise: promise}; +} + +var eventToObjectGenerator = { + promiseCreated: generatePromiseLifecycleEventObject, + promiseFulfilled: generatePromiseLifecycleEventObject, + promiseRejected: generatePromiseLifecycleEventObject, + promiseResolved: generatePromiseLifecycleEventObject, + promiseCancelled: generatePromiseLifecycleEventObject, + promiseChained: function(name, promise, child) { + return {promise: promise, child: child}; + }, + warning: function(name, warning) { + return {warning: warning}; + }, + unhandledRejection: function (name, reason, promise) { + return {reason: reason, promise: promise}; + }, + rejectionHandled: generatePromiseLifecycleEventObject +}; + +var activeFireEvent = function (name) { + var globalEventFired = false; + try { + globalEventFired = fireGlobalEvent.apply(null, arguments); + } catch (e) { + async.throwLater(e); + globalEventFired = true; + } + + var domEventFired = false; + try { + domEventFired = fireDomEvent(name, + eventToObjectGenerator[name].apply(null, arguments)); + } catch (e) { + async.throwLater(e); + domEventFired = true; + } + + return domEventFired || globalEventFired; +}; + +Promise.config = function(opts) { + opts = Object(opts); + if ("longStackTraces" in opts) { + if (opts.longStackTraces) { + Promise.longStackTraces(); + } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { + disableLongStackTraces(); + } + } + if ("warnings" in opts) { + var warningsOption = opts.warnings; + config.warnings = !!warningsOption; + wForgottenReturn = config.warnings; + + if (util.isObject(warningsOption)) { + if ("wForgottenReturn" in warningsOption) { + wForgottenReturn = !!warningsOption.wForgottenReturn; + } + } + } + if ("cancellation" in opts && opts.cancellation && !config.cancellation) { + if (async.haveItemsQueued()) { + throw new Error( + "cannot enable cancellation after promises are in use"); + } + Promise.prototype._clearCancellationData = + cancellationClearCancellationData; + Promise.prototype._propagateFrom = cancellationPropagateFrom; + Promise.prototype._onCancel = cancellationOnCancel; + Promise.prototype._setOnCancel = cancellationSetOnCancel; + Promise.prototype._attachCancellationCallback = + cancellationAttachCancellationCallback; + Promise.prototype._execute = cancellationExecute; + propagateFromFunction = cancellationPropagateFrom; + config.cancellation = true; + } + if ("monitoring" in opts) { + if (opts.monitoring && !config.monitoring) { + config.monitoring = true; + Promise.prototype._fireEvent = activeFireEvent; + } else if (!opts.monitoring && config.monitoring) { + config.monitoring = false; + Promise.prototype._fireEvent = defaultFireEvent; + } + } + return Promise; +}; + +function defaultFireEvent() { return false; } + +Promise.prototype._fireEvent = defaultFireEvent; +Promise.prototype._execute = function(executor, resolve, reject) { + try { + executor(resolve, reject); + } catch (e) { + return e; + } +}; +Promise.prototype._onCancel = function () {}; +Promise.prototype._setOnCancel = function (handler) { ; }; +Promise.prototype._attachCancellationCallback = function(onCancel) { + ; +}; +Promise.prototype._captureStackTrace = function () {}; +Promise.prototype._attachExtraTrace = function () {}; +Promise.prototype._clearCancellationData = function() {}; +Promise.prototype._propagateFrom = function (parent, flags) { + ; + ; +}; + +function cancellationExecute(executor, resolve, reject) { + var promise = this; + try { + executor(resolve, reject, function(onCancel) { + if (typeof onCancel !== "function") { + throw new TypeError("onCancel must be a function, got: " + + util.toString(onCancel)); + } + promise._attachCancellationCallback(onCancel); + }); + } catch (e) { + return e; + } +} + +function cancellationAttachCancellationCallback(onCancel) { + if (!this._isCancellable()) return this; + + var previousOnCancel = this._onCancel(); + if (previousOnCancel !== undefined) { + if (util.isArray(previousOnCancel)) { + previousOnCancel.push(onCancel); + } else { + this._setOnCancel([previousOnCancel, onCancel]); + } + } else { + this._setOnCancel(onCancel); + } +} + +function cancellationOnCancel() { + return this._onCancelField; +} + +function cancellationSetOnCancel(onCancel) { + this._onCancelField = onCancel; +} + +function cancellationClearCancellationData() { + this._cancellationParent = undefined; + this._onCancelField = undefined; +} + +function cancellationPropagateFrom(parent, flags) { + if ((flags & 1) !== 0) { + this._cancellationParent = parent; + var branchesRemainingToCancel = parent._branchesRemainingToCancel; + if (branchesRemainingToCancel === undefined) { + branchesRemainingToCancel = 0; + } + parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; + } + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} + +function bindingPropagateFrom(parent, flags) { + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} +var propagateFromFunction = bindingPropagateFrom; + +function boundValueFunction() { + var ret = this._boundTo; + if (ret !== undefined) { + if (ret instanceof Promise) { + if (ret.isFulfilled()) { + return ret.value(); + } else { + return undefined; + } + } + } + return ret; +} + +function longStackTracesCaptureStackTrace() { + this._trace = new CapturedTrace(this._peekContext()); +} + +function longStackTracesAttachExtraTrace(error, ignoreSelf) { + if (canAttachTrace(error)) { + var trace = this._trace; + if (trace !== undefined) { + if (ignoreSelf) trace = trace._parent; + } + if (trace !== undefined) { + trace.attachExtraTrace(error); + } else if (!error.__stackCleaned__) { + var parsed = parseStackAndMessage(error); + util.notEnumerableProp(error, "stack", + parsed.message + "\n" + parsed.stack.join("\n")); + util.notEnumerableProp(error, "__stackCleaned__", true); + } + } +} + +function checkForgottenReturns(returnValue, promiseCreated, name, promise, + parent) { + if (returnValue === undefined && promiseCreated !== null && + wForgottenReturn) { + if (parent !== undefined && parent._returnedNonUndefined()) return; + if ((promise._bitField & 65535) === 0) return; + + if (name) name = name + " "; + var handlerLine = ""; + var creatorLine = ""; + if (promiseCreated._trace) { + var traceLines = promiseCreated._trace.stack.split("\n"); + var stack = cleanStack(traceLines); + for (var i = stack.length - 1; i >= 0; --i) { + var line = stack[i]; + if (!nodeFramePattern.test(line)) { + var lineMatches = line.match(parseLinePattern); + if (lineMatches) { + handlerLine = "at " + lineMatches[1] + + ":" + lineMatches[2] + ":" + lineMatches[3] + " "; + } + break; + } + } + + if (stack.length > 0) { + var firstUserLine = stack[0]; + for (var i = 0; i < traceLines.length; ++i) { + + if (traceLines[i] === firstUserLine) { + if (i > 0) { + creatorLine = "\n" + traceLines[i - 1]; + } + break; + } + } + + } + } + var msg = "a promise was created in a " + name + + "handler " + handlerLine + "but was not returned from it, " + + "see http://goo.gl/rRqMUw" + + creatorLine; + promise._warn(msg, true, promiseCreated); + } +} + +function deprecated(name, replacement) { + var message = name + + " is deprecated and will be removed in a future version."; + if (replacement) message += " Use " + replacement + " instead."; + return warn(message); +} + +function warn(message, shouldUseOwnTrace, promise) { + if (!config.warnings) return; + var warning = new Warning(message); + var ctx; + if (shouldUseOwnTrace) { + promise._attachExtraTrace(warning); + } else if (config.longStackTraces && (ctx = Promise._peekContext())) { + ctx.attachExtraTrace(warning); + } else { + var parsed = parseStackAndMessage(warning); + warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); + } + + if (!activeFireEvent("warning", warning)) { + formatAndLogError(warning, "", true); + } +} + +function reconstructStack(message, stacks) { + for (var i = 0; i < stacks.length - 1; ++i) { + stacks[i].push("From previous event:"); + stacks[i] = stacks[i].join("\n"); + } + if (i < stacks.length) { + stacks[i] = stacks[i].join("\n"); + } + return message + "\n" + stacks.join("\n"); +} + +function removeDuplicateOrEmptyJumps(stacks) { + for (var i = 0; i < stacks.length; ++i) { + if (stacks[i].length === 0 || + ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { + stacks.splice(i, 1); + i--; + } + } +} + +function removeCommonRoots(stacks) { + var current = stacks[0]; + for (var i = 1; i < stacks.length; ++i) { + var prev = stacks[i]; + var currentLastIndex = current.length - 1; + var currentLastLine = current[currentLastIndex]; + var commonRootMeetPoint = -1; + + for (var j = prev.length - 1; j >= 0; --j) { + if (prev[j] === currentLastLine) { + commonRootMeetPoint = j; + break; + } + } + + for (var j = commonRootMeetPoint; j >= 0; --j) { + var line = prev[j]; + if (current[currentLastIndex] === line) { + current.pop(); + currentLastIndex--; + } else { + break; + } + } + current = prev; + } +} + +function cleanStack(stack) { + var ret = []; + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + var isTraceLine = " (No stack trace)" === line || + stackFramePattern.test(line); + var isInternalFrame = isTraceLine && shouldIgnore(line); + if (isTraceLine && !isInternalFrame) { + if (indentStackFrames && line.charAt(0) !== " ") { + line = " " + line; + } + ret.push(line); + } + } + return ret; +} + +function stackFramesAsArray(error) { + var stack = error.stack.replace(/\s+$/g, "").split("\n"); + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + if (" (No stack trace)" === line || stackFramePattern.test(line)) { + break; + } + } + if (i > 0 && error.name != "SyntaxError") { + stack = stack.slice(i); + } + return stack; +} + +function parseStackAndMessage(error) { + var stack = error.stack; + var message = error.toString(); + stack = typeof stack === "string" && stack.length > 0 + ? stackFramesAsArray(error) : [" (No stack trace)"]; + return { + message: message, + stack: error.name == "SyntaxError" ? stack : cleanStack(stack) + }; +} + +function formatAndLogError(error, title, isSoft) { + if (typeof console !== "undefined") { + var message; + if (util.isObject(error)) { + var stack = error.stack; + message = title + formatStack(stack, error); + } else { + message = title + String(error); + } + if (typeof printWarning === "function") { + printWarning(message, isSoft); + } else if (typeof console.log === "function" || + typeof console.log === "object") { + console.log(message); + } + } +} + +function fireRejectionEvent(name, localHandler, reason, promise) { + var localEventFired = false; + try { + if (typeof localHandler === "function") { + localEventFired = true; + if (name === "rejectionHandled") { + localHandler(promise); + } else { + localHandler(reason, promise); + } + } + } catch (e) { + async.throwLater(e); + } + + if (name === "unhandledRejection") { + if (!activeFireEvent(name, reason, promise) && !localEventFired) { + formatAndLogError(reason, "Unhandled rejection "); + } + } else { + activeFireEvent(name, promise); + } +} + +function formatNonError(obj) { + var str; + if (typeof obj === "function") { + str = "[function " + + (obj.name || "anonymous") + + "]"; + } else { + str = obj && typeof obj.toString === "function" + ? obj.toString() : util.toString(obj); + var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; + if (ruselessToString.test(str)) { + try { + var newStr = JSON.stringify(obj); + str = newStr; + } + catch(e) { + + } + } + if (str.length === 0) { + str = "(empty array)"; + } + } + return ("(<" + snip(str) + ">, no stack trace)"); +} + +function snip(str) { + var maxChars = 41; + if (str.length < maxChars) { + return str; + } + return str.substr(0, maxChars - 3) + "..."; +} + +function longStackTracesIsSupported() { + return typeof captureStackTrace === "function"; +} + +var shouldIgnore = function() { return false; }; +var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; +function parseLineInfo(line) { + var matches = line.match(parseLineInfoRegex); + if (matches) { + return { + fileName: matches[1], + line: parseInt(matches[2], 10) + }; + } +} + +function setBounds(firstLineError, lastLineError) { + if (!longStackTracesIsSupported()) return; + var firstStackLines = firstLineError.stack.split("\n"); + var lastStackLines = lastLineError.stack.split("\n"); + var firstIndex = -1; + var lastIndex = -1; + var firstFileName; + var lastFileName; + for (var i = 0; i < firstStackLines.length; ++i) { + var result = parseLineInfo(firstStackLines[i]); + if (result) { + firstFileName = result.fileName; + firstIndex = result.line; + break; + } + } + for (var i = 0; i < lastStackLines.length; ++i) { + var result = parseLineInfo(lastStackLines[i]); + if (result) { + lastFileName = result.fileName; + lastIndex = result.line; + break; + } + } + if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || + firstFileName !== lastFileName || firstIndex >= lastIndex) { + return; + } + + shouldIgnore = function(line) { + if (bluebirdFramePattern.test(line)) return true; + var info = parseLineInfo(line); + if (info) { + if (info.fileName === firstFileName && + (firstIndex <= info.line && info.line <= lastIndex)) { + return true; + } + } + return false; + }; +} + +function CapturedTrace(parent) { + this._parent = parent; + this._promisesCreated = 0; + var length = this._length = 1 + (parent === undefined ? 0 : parent._length); + captureStackTrace(this, CapturedTrace); + if (length > 32) this.uncycle(); +} +util.inherits(CapturedTrace, Error); +Context.CapturedTrace = CapturedTrace; + +CapturedTrace.prototype.uncycle = function() { + var length = this._length; + if (length < 2) return; + var nodes = []; + var stackToIndex = {}; + + for (var i = 0, node = this; node !== undefined; ++i) { + nodes.push(node); + node = node._parent; + } + length = this._length = i; + for (var i = length - 1; i >= 0; --i) { + var stack = nodes[i].stack; + if (stackToIndex[stack] === undefined) { + stackToIndex[stack] = i; + } + } + for (var i = 0; i < length; ++i) { + var currentStack = nodes[i].stack; + var index = stackToIndex[currentStack]; + if (index !== undefined && index !== i) { + if (index > 0) { + nodes[index - 1]._parent = undefined; + nodes[index - 1]._length = 1; + } + nodes[i]._parent = undefined; + nodes[i]._length = 1; + var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; + + if (index < length - 1) { + cycleEdgeNode._parent = nodes[index + 1]; + cycleEdgeNode._parent.uncycle(); + cycleEdgeNode._length = + cycleEdgeNode._parent._length + 1; + } else { + cycleEdgeNode._parent = undefined; + cycleEdgeNode._length = 1; + } + var currentChildLength = cycleEdgeNode._length + 1; + for (var j = i - 2; j >= 0; --j) { + nodes[j]._length = currentChildLength; + currentChildLength++; + } + return; + } + } +}; + +CapturedTrace.prototype.attachExtraTrace = function(error) { + if (error.__stackCleaned__) return; + this.uncycle(); + var parsed = parseStackAndMessage(error); + var message = parsed.message; + var stacks = [parsed.stack]; + + var trace = this; + while (trace !== undefined) { + stacks.push(cleanStack(trace.stack.split("\n"))); + trace = trace._parent; + } + removeCommonRoots(stacks); + removeDuplicateOrEmptyJumps(stacks); + util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); + util.notEnumerableProp(error, "__stackCleaned__", true); +}; + +var captureStackTrace = (function stackDetection() { + var v8stackFramePattern = /^\s*at\s*/; + var v8stackFormatter = function(stack, error) { + if (typeof stack === "string") return stack; + + if (error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + if (typeof Error.stackTraceLimit === "number" && + typeof Error.captureStackTrace === "function") { + Error.stackTraceLimit += 6; + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + var captureStackTrace = Error.captureStackTrace; + + shouldIgnore = function(line) { + return bluebirdFramePattern.test(line); + }; + return function(receiver, ignoreUntil) { + Error.stackTraceLimit += 6; + captureStackTrace(receiver, ignoreUntil); + Error.stackTraceLimit -= 6; + }; + } + var err = new Error(); + + if (typeof err.stack === "string" && + err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { + stackFramePattern = /@/; + formatStack = v8stackFormatter; + indentStackFrames = true; + return function captureStackTrace(o) { + o.stack = new Error().stack; + }; + } + + var hasStackAfterThrow; + try { throw new Error(); } + catch(e) { + hasStackAfterThrow = ("stack" in e); + } + if (!("stack" in err) && hasStackAfterThrow && + typeof Error.stackTraceLimit === "number") { + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + return function captureStackTrace(o) { + Error.stackTraceLimit += 6; + try { throw new Error(); } + catch(e) { o.stack = e.stack; } + Error.stackTraceLimit -= 6; + }; + } + + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if ((typeof error === "object" || + typeof error === "function") && + error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + return null; + +})([]); + +if (typeof console !== "undefined" && typeof console.warn !== "undefined") { + printWarning = function (message) { + console.warn(message); + }; + if (util.isNode && process.stderr.isTTY) { + printWarning = function(message, isSoft) { + var color = isSoft ? "\u001b[33m" : "\u001b[31m"; + console.warn(color + message + "\u001b[0m\n"); + }; + } else if (!util.isNode && typeof (new Error().stack) === "string") { + printWarning = function(message, isSoft) { + console.warn("%c" + message, + isSoft ? "color: darkorange" : "color: red"); + }; + } +} + +var config = { + warnings: warnings, + longStackTraces: false, + cancellation: false, + monitoring: false +}; + +if (longStackTraces) Promise.longStackTraces(); + +return { + longStackTraces: function() { + return config.longStackTraces; + }, + warnings: function() { + return config.warnings; + }, + cancellation: function() { + return config.cancellation; + }, + monitoring: function() { + return config.monitoring; + }, + propagateFromFunction: function() { + return propagateFromFunction; + }, + boundValueFunction: function() { + return boundValueFunction; + }, + checkForgottenReturns: checkForgottenReturns, + setBounds: setBounds, + warn: warn, + deprecated: deprecated, + CapturedTrace: CapturedTrace, + fireDomEvent: fireDomEvent, + fireGlobalEvent: fireGlobalEvent +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/direct_resolve.js b/node_backend/node_modules/bluebird/js/release/direct_resolve.js new file mode 100644 index 0000000000000000000000000000000000000000..a89029826142e8fe632f6dc1192788b737b4781a --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/direct_resolve.js @@ -0,0 +1,46 @@ +"use strict"; +module.exports = function(Promise) { +function returner() { + return this.value; +} +function thrower() { + throw this.reason; +} + +Promise.prototype["return"] = +Promise.prototype.thenReturn = function (value) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + returner, undefined, undefined, {value: value}, undefined); +}; + +Promise.prototype["throw"] = +Promise.prototype.thenThrow = function (reason) { + return this._then( + thrower, undefined, undefined, {reason: reason}, undefined); +}; + +Promise.prototype.catchThrow = function (reason) { + if (arguments.length <= 1) { + return this._then( + undefined, thrower, undefined, {reason: reason}, undefined); + } else { + var _reason = arguments[1]; + var handler = function() {throw _reason;}; + return this.caught(reason, handler); + } +}; + +Promise.prototype.catchReturn = function (value) { + if (arguments.length <= 1) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + undefined, returner, undefined, {value: value}, undefined); + } else { + var _value = arguments[1]; + if (_value instanceof Promise) _value.suppressUnhandledRejections(); + var handler = function() {return _value;}; + return this.caught(value, handler); + } +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/each.js b/node_backend/node_modules/bluebird/js/release/each.js new file mode 100644 index 0000000000000000000000000000000000000000..e4f3d05ba3477be74d89cbf092523cb2d6dd900f --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/each.js @@ -0,0 +1,30 @@ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseReduce = Promise.reduce; +var PromiseAll = Promise.all; + +function promiseAllThis() { + return PromiseAll(this); +} + +function PromiseMapSeries(promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, INTERNAL); +} + +Promise.prototype.each = function (fn) { + return PromiseReduce(this, fn, INTERNAL, 0) + ._then(promiseAllThis, undefined, undefined, this, undefined); +}; + +Promise.prototype.mapSeries = function (fn) { + return PromiseReduce(this, fn, INTERNAL, INTERNAL); +}; + +Promise.each = function (promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, 0) + ._then(promiseAllThis, undefined, undefined, promises, undefined); +}; + +Promise.mapSeries = PromiseMapSeries; +}; + diff --git a/node_backend/node_modules/bluebird/js/release/errors.js b/node_backend/node_modules/bluebird/js/release/errors.js new file mode 100644 index 0000000000000000000000000000000000000000..f62f323eb8ffd6c036c4dfd2ba039ed471bd25fd --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/errors.js @@ -0,0 +1,116 @@ +"use strict"; +var es5 = require("./es5"); +var Objectfreeze = es5.freeze; +var util = require("./util"); +var inherits = util.inherits; +var notEnumerableProp = util.notEnumerableProp; + +function subError(nameProperty, defaultMessage) { + function SubError(message) { + if (!(this instanceof SubError)) return new SubError(message); + notEnumerableProp(this, "message", + typeof message === "string" ? message : defaultMessage); + notEnumerableProp(this, "name", nameProperty); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + Error.call(this); + } + } + inherits(SubError, Error); + return SubError; +} + +var _TypeError, _RangeError; +var Warning = subError("Warning", "warning"); +var CancellationError = subError("CancellationError", "cancellation error"); +var TimeoutError = subError("TimeoutError", "timeout error"); +var AggregateError = subError("AggregateError", "aggregate error"); +try { + _TypeError = TypeError; + _RangeError = RangeError; +} catch(e) { + _TypeError = subError("TypeError", "type error"); + _RangeError = subError("RangeError", "range error"); +} + +var methods = ("join pop push shift unshift slice filter forEach some " + + "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); + +for (var i = 0; i < methods.length; ++i) { + if (typeof Array.prototype[methods[i]] === "function") { + AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; + } +} + +es5.defineProperty(AggregateError.prototype, "length", { + value: 0, + configurable: false, + writable: true, + enumerable: true +}); +AggregateError.prototype["isOperational"] = true; +var level = 0; +AggregateError.prototype.toString = function() { + var indent = Array(level * 4 + 1).join(" "); + var ret = "\n" + indent + "AggregateError of:" + "\n"; + level++; + indent = Array(level * 4 + 1).join(" "); + for (var i = 0; i < this.length; ++i) { + var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; + var lines = str.split("\n"); + for (var j = 0; j < lines.length; ++j) { + lines[j] = indent + lines[j]; + } + str = lines.join("\n"); + ret += str + "\n"; + } + level--; + return ret; +}; + +function OperationalError(message) { + if (!(this instanceof OperationalError)) + return new OperationalError(message); + notEnumerableProp(this, "name", "OperationalError"); + notEnumerableProp(this, "message", message); + this.cause = message; + this["isOperational"] = true; + + if (message instanceof Error) { + notEnumerableProp(this, "message", message.message); + notEnumerableProp(this, "stack", message.stack); + } else if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + +} +inherits(OperationalError, Error); + +var errorTypes = Error["__BluebirdErrorTypes__"]; +if (!errorTypes) { + errorTypes = Objectfreeze({ + CancellationError: CancellationError, + TimeoutError: TimeoutError, + OperationalError: OperationalError, + RejectionError: OperationalError, + AggregateError: AggregateError + }); + es5.defineProperty(Error, "__BluebirdErrorTypes__", { + value: errorTypes, + writable: false, + enumerable: false, + configurable: false + }); +} + +module.exports = { + Error: Error, + TypeError: _TypeError, + RangeError: _RangeError, + CancellationError: errorTypes.CancellationError, + OperationalError: errorTypes.OperationalError, + TimeoutError: errorTypes.TimeoutError, + AggregateError: errorTypes.AggregateError, + Warning: Warning +}; diff --git a/node_backend/node_modules/bluebird/js/release/es5.js b/node_backend/node_modules/bluebird/js/release/es5.js new file mode 100644 index 0000000000000000000000000000000000000000..ea41d5a566921d91aa77ea549d569a96782a4bfc --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/es5.js @@ -0,0 +1,80 @@ +var isES5 = (function(){ + "use strict"; + return this === undefined; +})(); + +if (isES5) { + module.exports = { + freeze: Object.freeze, + defineProperty: Object.defineProperty, + getDescriptor: Object.getOwnPropertyDescriptor, + keys: Object.keys, + names: Object.getOwnPropertyNames, + getPrototypeOf: Object.getPrototypeOf, + isArray: Array.isArray, + isES5: isES5, + propertyIsWritable: function(obj, prop) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + return !!(!descriptor || descriptor.writable || descriptor.set); + } + }; +} else { + var has = {}.hasOwnProperty; + var str = {}.toString; + var proto = {}.constructor.prototype; + + var ObjectKeys = function (o) { + var ret = []; + for (var key in o) { + if (has.call(o, key)) { + ret.push(key); + } + } + return ret; + }; + + var ObjectGetDescriptor = function(o, key) { + return {value: o[key]}; + }; + + var ObjectDefineProperty = function (o, key, desc) { + o[key] = desc.value; + return o; + }; + + var ObjectFreeze = function (obj) { + return obj; + }; + + var ObjectGetPrototypeOf = function (obj) { + try { + return Object(obj).constructor.prototype; + } + catch (e) { + return proto; + } + }; + + var ArrayIsArray = function (obj) { + try { + return str.call(obj) === "[object Array]"; + } + catch(e) { + return false; + } + }; + + module.exports = { + isArray: ArrayIsArray, + keys: ObjectKeys, + names: ObjectKeys, + defineProperty: ObjectDefineProperty, + getDescriptor: ObjectGetDescriptor, + freeze: ObjectFreeze, + getPrototypeOf: ObjectGetPrototypeOf, + isES5: isES5, + propertyIsWritable: function() { + return true; + } + }; +} diff --git a/node_backend/node_modules/bluebird/js/release/filter.js b/node_backend/node_modules/bluebird/js/release/filter.js new file mode 100644 index 0000000000000000000000000000000000000000..ed57bf0159212ea42c9c8b76f07a2f3dac9f36cb --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/filter.js @@ -0,0 +1,12 @@ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseMap = Promise.map; + +Promise.prototype.filter = function (fn, options) { + return PromiseMap(this, fn, options, INTERNAL); +}; + +Promise.filter = function (promises, fn, options) { + return PromiseMap(promises, fn, options, INTERNAL); +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/finally.js b/node_backend/node_modules/bluebird/js/release/finally.js new file mode 100644 index 0000000000000000000000000000000000000000..3717911219594658fec5be9f2d7f2bb207dd999f --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/finally.js @@ -0,0 +1,111 @@ +"use strict"; +module.exports = function(Promise, tryConvertToPromise) { +var util = require("./util"); +var CancellationError = Promise.CancellationError; +var errorObj = util.errorObj; + +function PassThroughHandlerContext(promise, type, handler) { + this.promise = promise; + this.type = type; + this.handler = handler; + this.called = false; + this.cancelPromise = null; +} + +PassThroughHandlerContext.prototype.isFinallyHandler = function() { + return this.type === 0; +}; + +function FinallyHandlerCancelReaction(finallyHandler) { + this.finallyHandler = finallyHandler; +} + +FinallyHandlerCancelReaction.prototype._resultCancelled = function() { + checkCancel(this.finallyHandler); +}; + +function checkCancel(ctx, reason) { + if (ctx.cancelPromise != null) { + if (arguments.length > 1) { + ctx.cancelPromise._reject(reason); + } else { + ctx.cancelPromise._cancel(); + } + ctx.cancelPromise = null; + return true; + } + return false; +} + +function succeed() { + return finallyHandler.call(this, this.promise._target()._settledValue()); +} +function fail(reason) { + if (checkCancel(this, reason)) return; + errorObj.e = reason; + return errorObj; +} +function finallyHandler(reasonOrValue) { + var promise = this.promise; + var handler = this.handler; + + if (!this.called) { + this.called = true; + var ret = this.isFinallyHandler() + ? handler.call(promise._boundValue()) + : handler.call(promise._boundValue(), reasonOrValue); + if (ret !== undefined) { + promise._setReturnedNonUndefined(); + var maybePromise = tryConvertToPromise(ret, promise); + if (maybePromise instanceof Promise) { + if (this.cancelPromise != null) { + if (maybePromise._isCancelled()) { + var reason = + new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + errorObj.e = reason; + return errorObj; + } else if (maybePromise.isPending()) { + maybePromise._attachCancellationCallback( + new FinallyHandlerCancelReaction(this)); + } + } + return maybePromise._then( + succeed, fail, undefined, this, undefined); + } + } + } + + if (promise.isRejected()) { + checkCancel(this); + errorObj.e = reasonOrValue; + return errorObj; + } else { + checkCancel(this); + return reasonOrValue; + } +} + +Promise.prototype._passThrough = function(handler, type, success, fail) { + if (typeof handler !== "function") return this.then(); + return this._then(success, + fail, + undefined, + new PassThroughHandlerContext(this, type, handler), + undefined); +}; + +Promise.prototype.lastly = +Promise.prototype["finally"] = function (handler) { + return this._passThrough(handler, + 0, + finallyHandler, + finallyHandler); +}; + +Promise.prototype.tap = function (handler) { + return this._passThrough(handler, 1, finallyHandler); +}; + +return PassThroughHandlerContext; +}; diff --git a/node_backend/node_modules/bluebird/js/release/generators.js b/node_backend/node_modules/bluebird/js/release/generators.js new file mode 100644 index 0000000000000000000000000000000000000000..40e9b1fa668f6afea45b45eab69741d007449159 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/generators.js @@ -0,0 +1,223 @@ +"use strict"; +module.exports = function(Promise, + apiRejection, + INTERNAL, + tryConvertToPromise, + Proxyable, + debug) { +var errors = require("./errors"); +var TypeError = errors.TypeError; +var util = require("./util"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +var yieldHandlers = []; + +function promiseFromYieldHandler(value, yieldHandlers, traceParent) { + for (var i = 0; i < yieldHandlers.length; ++i) { + traceParent._pushContext(); + var result = tryCatch(yieldHandlers[i])(value); + traceParent._popContext(); + if (result === errorObj) { + traceParent._pushContext(); + var ret = Promise.reject(errorObj.e); + traceParent._popContext(); + return ret; + } + var maybePromise = tryConvertToPromise(result, traceParent); + if (maybePromise instanceof Promise) return maybePromise; + } + return null; +} + +function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { + if (debug.cancellation()) { + var internal = new Promise(INTERNAL); + var _finallyPromise = this._finallyPromise = new Promise(INTERNAL); + this._promise = internal.lastly(function() { + return _finallyPromise; + }); + internal._captureStackTrace(); + internal._setOnCancel(this); + } else { + var promise = this._promise = new Promise(INTERNAL); + promise._captureStackTrace(); + } + this._stack = stack; + this._generatorFunction = generatorFunction; + this._receiver = receiver; + this._generator = undefined; + this._yieldHandlers = typeof yieldHandler === "function" + ? [yieldHandler].concat(yieldHandlers) + : yieldHandlers; + this._yieldedPromise = null; + this._cancellationPhase = false; +} +util.inherits(PromiseSpawn, Proxyable); + +PromiseSpawn.prototype._isResolved = function() { + return this._promise === null; +}; + +PromiseSpawn.prototype._cleanup = function() { + this._promise = this._generator = null; + if (debug.cancellation() && this._finallyPromise !== null) { + this._finallyPromise._fulfill(); + this._finallyPromise = null; + } +}; + +PromiseSpawn.prototype._promiseCancelled = function() { + if (this._isResolved()) return; + var implementsReturn = typeof this._generator["return"] !== "undefined"; + + var result; + if (!implementsReturn) { + var reason = new Promise.CancellationError( + "generator .return() sentinel"); + Promise.coroutine.returnSentinel = reason; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + result = tryCatch(this._generator["throw"]).call(this._generator, + reason); + this._promise._popContext(); + } else { + this._promise._pushContext(); + result = tryCatch(this._generator["return"]).call(this._generator, + undefined); + this._promise._popContext(); + } + this._cancellationPhase = true; + this._yieldedPromise = null; + this._continue(result); +}; + +PromiseSpawn.prototype._promiseFulfilled = function(value) { + this._yieldedPromise = null; + this._promise._pushContext(); + var result = tryCatch(this._generator.next).call(this._generator, value); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._promiseRejected = function(reason) { + this._yieldedPromise = null; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + var result = tryCatch(this._generator["throw"]) + .call(this._generator, reason); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._resultCancelled = function() { + if (this._yieldedPromise instanceof Promise) { + var promise = this._yieldedPromise; + this._yieldedPromise = null; + promise.cancel(); + } +}; + +PromiseSpawn.prototype.promise = function () { + return this._promise; +}; + +PromiseSpawn.prototype._run = function () { + this._generator = this._generatorFunction.call(this._receiver); + this._receiver = + this._generatorFunction = undefined; + this._promiseFulfilled(undefined); +}; + +PromiseSpawn.prototype._continue = function (result) { + var promise = this._promise; + if (result === errorObj) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._rejectCallback(result.e, false); + } + } + + var value = result.value; + if (result.done === true) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._resolveCallback(value); + } + } else { + var maybePromise = tryConvertToPromise(value, this._promise); + if (!(maybePromise instanceof Promise)) { + maybePromise = + promiseFromYieldHandler(maybePromise, + this._yieldHandlers, + this._promise); + if (maybePromise === null) { + this._promiseRejected( + new TypeError( + "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", value) + + "From coroutine:\u000a" + + this._stack.split("\n").slice(1, -7).join("\n") + ) + ); + return; + } + } + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + this._yieldedPromise = maybePromise; + maybePromise._proxy(this, null); + } else if (((bitField & 33554432) !== 0)) { + Promise._async.invoke( + this._promiseFulfilled, this, maybePromise._value() + ); + } else if (((bitField & 16777216) !== 0)) { + Promise._async.invoke( + this._promiseRejected, this, maybePromise._reason() + ); + } else { + this._promiseCancelled(); + } + } +}; + +Promise.coroutine = function (generatorFunction, options) { + if (typeof generatorFunction !== "function") { + throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var yieldHandler = Object(options).yieldHandler; + var PromiseSpawn$ = PromiseSpawn; + var stack = new Error().stack; + return function () { + var generator = generatorFunction.apply(this, arguments); + var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, + stack); + var ret = spawn.promise(); + spawn._generator = generator; + spawn._promiseFulfilled(undefined); + return ret; + }; +}; + +Promise.coroutine.addYieldHandler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + yieldHandlers.push(fn); +}; + +Promise.spawn = function (generatorFunction) { + debug.deprecated("Promise.spawn()", "Promise.coroutine()"); + if (typeof generatorFunction !== "function") { + return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var spawn = new PromiseSpawn(generatorFunction, this); + var ret = spawn.promise(); + spawn._run(Promise.spawn); + return ret; +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/join.js b/node_backend/node_modules/bluebird/js/release/join.js new file mode 100644 index 0000000000000000000000000000000000000000..4945e3f782268623a39b720d0da32ea6d31456b5 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/join.js @@ -0,0 +1,168 @@ +"use strict"; +module.exports = +function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, + getDomain) { +var util = require("./util"); +var canEvaluate = util.canEvaluate; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var reject; + +if (!false) { +if (canEvaluate) { + var thenCallback = function(i) { + return new Function("value", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = value; \n\ + holder.checkFulfillment(this); \n\ + ".replace(/Index/g, i)); + }; + + var promiseSetter = function(i) { + return new Function("promise", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = promise; \n\ + ".replace(/Index/g, i)); + }; + + var generateHolderClass = function(total) { + var props = new Array(total); + for (var i = 0; i < props.length; ++i) { + props[i] = "this.p" + (i+1); + } + var assignment = props.join(" = ") + " = null;"; + var cancellationCode= "var promise;\n" + props.map(function(prop) { + return " \n\ + promise = " + prop + "; \n\ + if (promise instanceof Promise) { \n\ + promise.cancel(); \n\ + } \n\ + "; + }).join("\n"); + var passedArguments = props.join(", "); + var name = "Holder$" + total; + + + var code = "return function(tryCatch, errorObj, Promise, async) { \n\ + 'use strict'; \n\ + function [TheName](fn) { \n\ + [TheProperties] \n\ + this.fn = fn; \n\ + this.asyncNeeded = true; \n\ + this.now = 0; \n\ + } \n\ + \n\ + [TheName].prototype._callFunction = function(promise) { \n\ + promise._pushContext(); \n\ + var ret = tryCatch(this.fn)([ThePassedArguments]); \n\ + promise._popContext(); \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(ret.e, false); \n\ + } else { \n\ + promise._resolveCallback(ret); \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype.checkFulfillment = function(promise) { \n\ + var now = ++this.now; \n\ + if (now === [TheTotal]) { \n\ + if (this.asyncNeeded) { \n\ + async.invoke(this._callFunction, this, promise); \n\ + } else { \n\ + this._callFunction(promise); \n\ + } \n\ + \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype._resultCancelled = function() { \n\ + [CancellationCode] \n\ + }; \n\ + \n\ + return [TheName]; \n\ + }(tryCatch, errorObj, Promise, async); \n\ + "; + + code = code.replace(/\[TheName\]/g, name) + .replace(/\[TheTotal\]/g, total) + .replace(/\[ThePassedArguments\]/g, passedArguments) + .replace(/\[TheProperties\]/g, assignment) + .replace(/\[CancellationCode\]/g, cancellationCode); + + return new Function("tryCatch", "errorObj", "Promise", "async", code) + (tryCatch, errorObj, Promise, async); + }; + + var holderClasses = []; + var thenCallbacks = []; + var promiseSetters = []; + + for (var i = 0; i < 8; ++i) { + holderClasses.push(generateHolderClass(i + 1)); + thenCallbacks.push(thenCallback(i + 1)); + promiseSetters.push(promiseSetter(i + 1)); + } + + reject = function (reason) { + this._reject(reason); + }; +}} + +Promise.join = function () { + var last = arguments.length - 1; + var fn; + if (last > 0 && typeof arguments[last] === "function") { + fn = arguments[last]; + if (!false) { + if (last <= 8 && canEvaluate) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var HolderClass = holderClasses[last - 1]; + var holder = new HolderClass(fn); + var callbacks = thenCallbacks; + + for (var i = 0; i < last; ++i) { + var maybePromise = tryConvertToPromise(arguments[i], ret); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + maybePromise._then(callbacks[i], reject, + undefined, ret, holder); + promiseSetters[i](maybePromise, holder); + holder.asyncNeeded = false; + } else if (((bitField & 33554432) !== 0)) { + callbacks[i].call(ret, + maybePromise._value(), holder); + } else if (((bitField & 16777216) !== 0)) { + ret._reject(maybePromise._reason()); + } else { + ret._cancel(); + } + } else { + callbacks[i].call(ret, maybePromise, holder); + } + } + + if (!ret._isFateSealed()) { + if (holder.asyncNeeded) { + var domain = getDomain(); + if (domain !== null) { + holder.fn = util.domainBind(domain, holder.fn); + } + } + ret._setAsyncGuaranteed(); + ret._setOnCancel(holder); + } + return ret; + } + } + } + var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}; + if (fn) args.pop(); + var ret = new PromiseArray(args).promise(); + return fn !== undefined ? ret.spread(fn) : ret; +}; + +}; diff --git a/node_backend/node_modules/bluebird/js/release/map.js b/node_backend/node_modules/bluebird/js/release/map.js new file mode 100644 index 0000000000000000000000000000000000000000..976f15ef2930bd14e7fceadab4fc33adb0a6118c --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/map.js @@ -0,0 +1,168 @@ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = require("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +function MappingPromiseArray(promises, fn, limit, _filter) { + this.constructor$(promises); + this._promise._captureStackTrace(); + var domain = getDomain(); + this._callback = domain === null ? fn : util.domainBind(domain, fn); + this._preservedValues = _filter === INTERNAL + ? new Array(this.length()) + : null; + this._limit = limit; + this._inFlight = 0; + this._queue = []; + async.invoke(this._asyncInit, this, undefined); +} +util.inherits(MappingPromiseArray, PromiseArray); + +MappingPromiseArray.prototype._asyncInit = function() { + this._init$(undefined, -2); +}; + +MappingPromiseArray.prototype._init = function () {}; + +MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { + var values = this._values; + var length = this.length(); + var preservedValues = this._preservedValues; + var limit = this._limit; + + if (index < 0) { + index = (index * -1) - 1; + values[index] = value; + if (limit >= 1) { + this._inFlight--; + this._drainQueue(); + if (this._isResolved()) return true; + } + } else { + if (limit >= 1 && this._inFlight >= limit) { + values[index] = value; + this._queue.push(index); + return false; + } + if (preservedValues !== null) preservedValues[index] = value; + + var promise = this._promise; + var callback = this._callback; + var receiver = promise._boundValue(); + promise._pushContext(); + var ret = tryCatch(callback).call(receiver, value, index, length); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + preservedValues !== null ? "Promise.filter" : "Promise.map", + promise + ); + if (ret === errorObj) { + this._reject(ret.e); + return true; + } + + var maybePromise = tryConvertToPromise(ret, this._promise); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + if (limit >= 1) this._inFlight++; + values[index] = maybePromise; + maybePromise._proxy(this, (index + 1) * -1); + return false; + } else if (((bitField & 33554432) !== 0)) { + ret = maybePromise._value(); + } else if (((bitField & 16777216) !== 0)) { + this._reject(maybePromise._reason()); + return true; + } else { + this._cancel(); + return true; + } + } + values[index] = ret; + } + var totalResolved = ++this._totalResolved; + if (totalResolved >= length) { + if (preservedValues !== null) { + this._filter(values, preservedValues); + } else { + this._resolve(values); + } + return true; + } + return false; +}; + +MappingPromiseArray.prototype._drainQueue = function () { + var queue = this._queue; + var limit = this._limit; + var values = this._values; + while (queue.length > 0 && this._inFlight < limit) { + if (this._isResolved()) return; + var index = queue.pop(); + this._promiseFulfilled(values[index], index); + } +}; + +MappingPromiseArray.prototype._filter = function (booleans, values) { + var len = values.length; + var ret = new Array(len); + var j = 0; + for (var i = 0; i < len; ++i) { + if (booleans[i]) ret[j++] = values[i]; + } + ret.length = j; + this._resolve(ret); +}; + +MappingPromiseArray.prototype.preservedValues = function () { + return this._preservedValues; +}; + +function map(promises, fn, options, _filter) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + + var limit = 0; + if (options !== undefined) { + if (typeof options === "object" && options !== null) { + if (typeof options.concurrency !== "number") { + return Promise.reject( + new TypeError("'concurrency' must be a number but it is " + + util.classString(options.concurrency))); + } + limit = options.concurrency; + } else { + return Promise.reject(new TypeError( + "options argument must be an object but it is " + + util.classString(options))); + } + } + limit = typeof limit === "number" && + isFinite(limit) && limit >= 1 ? limit : 0; + return new MappingPromiseArray(promises, fn, limit, _filter).promise(); +} + +Promise.prototype.map = function (fn, options) { + return map(this, fn, options, null); +}; + +Promise.map = function (promises, fn, options, _filter) { + return map(promises, fn, options, _filter); +}; + + +}; diff --git a/node_backend/node_modules/bluebird/js/release/method.js b/node_backend/node_modules/bluebird/js/release/method.js new file mode 100644 index 0000000000000000000000000000000000000000..ce9e4db7edf42aa9e2ac12c89a854e89052b978c --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/method.js @@ -0,0 +1,55 @@ +"use strict"; +module.exports = +function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { +var util = require("./util"); +var tryCatch = util.tryCatch; + +Promise.method = function (fn) { + if (typeof fn !== "function") { + throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); + } + return function () { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value = tryCatch(fn).apply(this, arguments); + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.method", ret); + ret._resolveFromSyncValue(value); + return ret; + }; +}; + +Promise.attempt = Promise["try"] = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value; + if (arguments.length > 1) { + debug.deprecated("calling Promise.try with more than 1 argument"); + var arg = arguments[1]; + var ctx = arguments[2]; + value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) + : tryCatch(fn).call(ctx, arg); + } else { + value = tryCatch(fn)(); + } + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.try", ret); + ret._resolveFromSyncValue(value); + return ret; +}; + +Promise.prototype._resolveFromSyncValue = function (value) { + if (value === util.errorObj) { + this._rejectCallback(value.e, false); + } else { + this._resolveCallback(value, true); + } +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/nodeback.js b/node_backend/node_modules/bluebird/js/release/nodeback.js new file mode 100644 index 0000000000000000000000000000000000000000..71e69ebdbec9478c85e865dbce01b385de38f4de --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/nodeback.js @@ -0,0 +1,51 @@ +"use strict"; +var util = require("./util"); +var maybeWrapAsError = util.maybeWrapAsError; +var errors = require("./errors"); +var OperationalError = errors.OperationalError; +var es5 = require("./es5"); + +function isUntypedError(obj) { + return obj instanceof Error && + es5.getPrototypeOf(obj) === Error.prototype; +} + +var rErrorKey = /^(?:name|message|stack|cause)$/; +function wrapAsOperationalError(obj) { + var ret; + if (isUntypedError(obj)) { + ret = new OperationalError(obj); + ret.name = obj.name; + ret.message = obj.message; + ret.stack = obj.stack; + var keys = es5.keys(obj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (!rErrorKey.test(key)) { + ret[key] = obj[key]; + } + } + return ret; + } + util.markAsOriginatingFromRejection(obj); + return obj; +} + +function nodebackForPromise(promise, multiArgs) { + return function(err, value) { + if (promise === null) return; + if (err) { + var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } else if (!multiArgs) { + promise._fulfill(value); + } else { + var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}; + promise._fulfill(args); + } + promise = null; + }; +} + +module.exports = nodebackForPromise; diff --git a/node_backend/node_modules/bluebird/js/release/nodeify.js b/node_backend/node_modules/bluebird/js/release/nodeify.js new file mode 100644 index 0000000000000000000000000000000000000000..ce2b19004e5bae49f986e9041cd47dab58775d30 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/nodeify.js @@ -0,0 +1,58 @@ +"use strict"; +module.exports = function(Promise) { +var util = require("./util"); +var async = Promise._async; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function spreadAdapter(val, nodeback) { + var promise = this; + if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); + var ret = + tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +function successAdapter(val, nodeback) { + var promise = this; + var receiver = promise._boundValue(); + var ret = val === undefined + ? tryCatch(nodeback).call(receiver, null) + : tryCatch(nodeback).call(receiver, null, val); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} +function errorAdapter(reason, nodeback) { + var promise = this; + if (!reason) { + var newReason = new Error(reason + ""); + newReason.cause = reason; + reason = newReason; + } + var ret = tryCatch(nodeback).call(promise._boundValue(), reason); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, + options) { + if (typeof nodeback == "function") { + var adapter = successAdapter; + if (options !== undefined && Object(options).spread) { + adapter = spreadAdapter; + } + this._then( + adapter, + errorAdapter, + undefined, + this, + nodeback + ); + } + return this; +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/promise.js b/node_backend/node_modules/bluebird/js/release/promise.js new file mode 100644 index 0000000000000000000000000000000000000000..f699a539a0931e4598e80655de6840e4b3711103 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/promise.js @@ -0,0 +1,773 @@ +"use strict"; +module.exports = function() { +var makeSelfResolutionError = function () { + return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var reflectHandler = function() { + return new Promise.PromiseInspection(this._target()); +}; +var apiRejection = function(msg) { + return Promise.reject(new TypeError(msg)); +}; +function Proxyable() {} +var UNDEFINED_BINDING = {}; +var util = require("./util"); + +var getDomain; +if (util.isNode) { + getDomain = function() { + var ret = process.domain; + if (ret === undefined) ret = null; + return ret; + }; +} else { + getDomain = function() { + return null; + }; +} +util.notEnumerableProp(Promise, "_getDomain", getDomain); + +var es5 = require("./es5"); +var Async = require("./async"); +var async = new Async(); +es5.defineProperty(Promise, "_async", {value: async}); +var errors = require("./errors"); +var TypeError = Promise.TypeError = errors.TypeError; +Promise.RangeError = errors.RangeError; +var CancellationError = Promise.CancellationError = errors.CancellationError; +Promise.TimeoutError = errors.TimeoutError; +Promise.OperationalError = errors.OperationalError; +Promise.RejectionError = errors.OperationalError; +Promise.AggregateError = errors.AggregateError; +var INTERNAL = function(){}; +var APPLY = {}; +var NEXT_FILTER = {}; +var tryConvertToPromise = require("./thenables")(Promise, INTERNAL); +var PromiseArray = + require("./promise_array")(Promise, INTERNAL, + tryConvertToPromise, apiRejection, Proxyable); +var Context = require("./context")(Promise); + /*jshint unused:false*/ +var createContext = Context.create; +var debug = require("./debuggability")(Promise, Context); +var CapturedTrace = debug.CapturedTrace; +var PassThroughHandlerContext = + require("./finally")(Promise, tryConvertToPromise); +var catchFilter = require("./catch_filter")(NEXT_FILTER); +var nodebackForPromise = require("./nodeback"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +function check(self, executor) { + if (typeof executor !== "function") { + throw new TypeError("expecting a function but got " + util.classString(executor)); + } + if (self.constructor !== Promise) { + throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } +} + +function Promise(executor) { + this._bitField = 0; + this._fulfillmentHandler0 = undefined; + this._rejectionHandler0 = undefined; + this._promise0 = undefined; + this._receiver0 = undefined; + if (executor !== INTERNAL) { + check(this, executor); + this._resolveFromExecutor(executor); + } + this._promiseCreated(); + this._fireEvent("promiseCreated", this); +} + +Promise.prototype.toString = function () { + return "[object Promise]"; +}; + +Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { + var len = arguments.length; + if (len > 1) { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (util.isObject(item)) { + catchInstances[j++] = item; + } else { + return apiRejection("expecting an object but got " + + "A catch statement predicate " + util.classString(item)); + } + } + catchInstances.length = j; + fn = arguments[i]; + return this.then(undefined, catchFilter(catchInstances, fn, this)); + } + return this.then(undefined, fn); +}; + +Promise.prototype.reflect = function () { + return this._then(reflectHandler, + reflectHandler, undefined, this, undefined); +}; + +Promise.prototype.then = function (didFulfill, didReject) { + if (debug.warnings() && arguments.length > 0 && + typeof didFulfill !== "function" && + typeof didReject !== "function") { + var msg = ".then() only accepts functions but was passed: " + + util.classString(didFulfill); + if (arguments.length > 1) { + msg += ", " + util.classString(didReject); + } + this._warn(msg); + } + return this._then(didFulfill, didReject, undefined, undefined, undefined); +}; + +Promise.prototype.done = function (didFulfill, didReject) { + var promise = + this._then(didFulfill, didReject, undefined, undefined, undefined); + promise._setIsFinal(); +}; + +Promise.prototype.spread = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + return this.all()._then(fn, undefined, undefined, APPLY, undefined); +}; + +Promise.prototype.toJSON = function () { + var ret = { + isFulfilled: false, + isRejected: false, + fulfillmentValue: undefined, + rejectionReason: undefined + }; + if (this.isFulfilled()) { + ret.fulfillmentValue = this.value(); + ret.isFulfilled = true; + } else if (this.isRejected()) { + ret.rejectionReason = this.reason(); + ret.isRejected = true; + } + return ret; +}; + +Promise.prototype.all = function () { + if (arguments.length > 0) { + this._warn(".all() was passed arguments but it does not take any"); + } + return new PromiseArray(this).promise(); +}; + +Promise.prototype.error = function (fn) { + return this.caught(util.originatesFromRejection, fn); +}; + +Promise.getNewLibraryCopy = module.exports; + +Promise.is = function (val) { + return val instanceof Promise; +}; + +Promise.fromNode = Promise.fromCallback = function(fn) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs + : false; + var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); + if (result === errorObj) { + ret._rejectCallback(result.e, true); + } + if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.all = function (promises) { + return new PromiseArray(promises).promise(); +}; + +Promise.cast = function (obj) { + var ret = tryConvertToPromise(obj); + if (!(ret instanceof Promise)) { + ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._setFulfilled(); + ret._rejectionHandler0 = obj; + } + return ret; +}; + +Promise.resolve = Promise.fulfilled = Promise.cast; + +Promise.reject = Promise.rejected = function (reason) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._rejectCallback(reason, true); + return ret; +}; + +Promise.setScheduler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + return async.setScheduler(fn); +}; + +Promise.prototype._then = function ( + didFulfill, + didReject, + _, receiver, + internalData +) { + var haveInternalData = internalData !== undefined; + var promise = haveInternalData ? internalData : new Promise(INTERNAL); + var target = this._target(); + var bitField = target._bitField; + + if (!haveInternalData) { + promise._propagateFrom(this, 3); + promise._captureStackTrace(); + if (receiver === undefined && + ((this._bitField & 2097152) !== 0)) { + if (!((bitField & 50397184) === 0)) { + receiver = this._boundValue(); + } else { + receiver = target === this ? undefined : this._boundTo; + } + } + this._fireEvent("promiseChained", this, promise); + } + + var domain = getDomain(); + if (!((bitField & 50397184) === 0)) { + var handler, value, settler = target._settlePromiseCtx; + if (((bitField & 33554432) !== 0)) { + value = target._rejectionHandler0; + handler = didFulfill; + } else if (((bitField & 16777216) !== 0)) { + value = target._fulfillmentHandler0; + handler = didReject; + target._unsetRejectionIsUnhandled(); + } else { + settler = target._settlePromiseLateCancellationObserver; + value = new CancellationError("late cancellation observer"); + target._attachExtraTrace(value); + handler = didReject; + } + + async.invoke(settler, target, { + handler: domain === null ? handler + : (typeof handler === "function" && + util.domainBind(domain, handler)), + promise: promise, + receiver: receiver, + value: value + }); + } else { + target._addCallbacks(didFulfill, didReject, promise, receiver, domain); + } + + return promise; +}; + +Promise.prototype._length = function () { + return this._bitField & 65535; +}; + +Promise.prototype._isFateSealed = function () { + return (this._bitField & 117506048) !== 0; +}; + +Promise.prototype._isFollowing = function () { + return (this._bitField & 67108864) === 67108864; +}; + +Promise.prototype._setLength = function (len) { + this._bitField = (this._bitField & -65536) | + (len & 65535); +}; + +Promise.prototype._setFulfilled = function () { + this._bitField = this._bitField | 33554432; + this._fireEvent("promiseFulfilled", this); +}; + +Promise.prototype._setRejected = function () { + this._bitField = this._bitField | 16777216; + this._fireEvent("promiseRejected", this); +}; + +Promise.prototype._setFollowing = function () { + this._bitField = this._bitField | 67108864; + this._fireEvent("promiseResolved", this); +}; + +Promise.prototype._setIsFinal = function () { + this._bitField = this._bitField | 4194304; +}; + +Promise.prototype._isFinal = function () { + return (this._bitField & 4194304) > 0; +}; + +Promise.prototype._unsetCancelled = function() { + this._bitField = this._bitField & (~65536); +}; + +Promise.prototype._setCancelled = function() { + this._bitField = this._bitField | 65536; + this._fireEvent("promiseCancelled", this); +}; + +Promise.prototype._setWillBeCancelled = function() { + this._bitField = this._bitField | 8388608; +}; + +Promise.prototype._setAsyncGuaranteed = function() { + if (async.hasCustomScheduler()) return; + this._bitField = this._bitField | 134217728; +}; + +Promise.prototype._receiverAt = function (index) { + var ret = index === 0 ? this._receiver0 : this[ + index * 4 - 4 + 3]; + if (ret === UNDEFINED_BINDING) { + return undefined; + } else if (ret === undefined && this._isBound()) { + return this._boundValue(); + } + return ret; +}; + +Promise.prototype._promiseAt = function (index) { + return this[ + index * 4 - 4 + 2]; +}; + +Promise.prototype._fulfillmentHandlerAt = function (index) { + return this[ + index * 4 - 4 + 0]; +}; + +Promise.prototype._rejectionHandlerAt = function (index) { + return this[ + index * 4 - 4 + 1]; +}; + +Promise.prototype._boundValue = function() {}; + +Promise.prototype._migrateCallback0 = function (follower) { + var bitField = follower._bitField; + var fulfill = follower._fulfillmentHandler0; + var reject = follower._rejectionHandler0; + var promise = follower._promise0; + var receiver = follower._receiverAt(0); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._migrateCallbackAt = function (follower, index) { + var fulfill = follower._fulfillmentHandlerAt(index); + var reject = follower._rejectionHandlerAt(index); + var promise = follower._promiseAt(index); + var receiver = follower._receiverAt(index); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._addCallbacks = function ( + fulfill, + reject, + promise, + receiver, + domain +) { + var index = this._length(); + + if (index >= 65535 - 4) { + index = 0; + this._setLength(0); + } + + if (index === 0) { + this._promise0 = promise; + this._receiver0 = receiver; + if (typeof fulfill === "function") { + this._fulfillmentHandler0 = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this._rejectionHandler0 = + domain === null ? reject : util.domainBind(domain, reject); + } + } else { + var base = index * 4 - 4; + this[base + 2] = promise; + this[base + 3] = receiver; + if (typeof fulfill === "function") { + this[base + 0] = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this[base + 1] = + domain === null ? reject : util.domainBind(domain, reject); + } + } + this._setLength(index + 1); + return index; +}; + +Promise.prototype._proxy = function (proxyable, arg) { + this._addCallbacks(undefined, undefined, arg, proxyable, null); +}; + +Promise.prototype._resolveCallback = function(value, shouldBind) { + if (((this._bitField & 117506048) !== 0)) return; + if (value === this) + return this._rejectCallback(makeSelfResolutionError(), false); + var maybePromise = tryConvertToPromise(value, this); + if (!(maybePromise instanceof Promise)) return this._fulfill(value); + + if (shouldBind) this._propagateFrom(maybePromise, 2); + + var promise = maybePromise._target(); + + if (promise === this) { + this._reject(makeSelfResolutionError()); + return; + } + + var bitField = promise._bitField; + if (((bitField & 50397184) === 0)) { + var len = this._length(); + if (len > 0) promise._migrateCallback0(this); + for (var i = 1; i < len; ++i) { + promise._migrateCallbackAt(this, i); + } + this._setFollowing(); + this._setLength(0); + this._setFollowee(promise); + } else if (((bitField & 33554432) !== 0)) { + this._fulfill(promise._value()); + } else if (((bitField & 16777216) !== 0)) { + this._reject(promise._reason()); + } else { + var reason = new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + this._reject(reason); + } +}; + +Promise.prototype._rejectCallback = +function(reason, synchronous, ignoreNonErrorWarnings) { + var trace = util.ensureErrorObject(reason); + var hasStack = trace === reason; + if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { + var message = "a promise was rejected with a non-error: " + + util.classString(reason); + this._warn(message, true); + } + this._attachExtraTrace(trace, synchronous ? hasStack : false); + this._reject(reason); +}; + +Promise.prototype._resolveFromExecutor = function (executor) { + var promise = this; + this._captureStackTrace(); + this._pushContext(); + var synchronous = true; + var r = this._execute(executor, function(value) { + promise._resolveCallback(value); + }, function (reason) { + promise._rejectCallback(reason, synchronous); + }); + synchronous = false; + this._popContext(); + + if (r !== undefined) { + promise._rejectCallback(r, true); + } +}; + +Promise.prototype._settlePromiseFromHandler = function ( + handler, receiver, value, promise +) { + var bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + promise._pushContext(); + var x; + if (receiver === APPLY) { + if (!value || typeof value.length !== "number") { + x = errorObj; + x.e = new TypeError("cannot .spread() a non-array: " + + util.classString(value)); + } else { + x = tryCatch(handler).apply(this._boundValue(), value); + } + } else { + x = tryCatch(handler).call(receiver, value); + } + var promiseCreated = promise._popContext(); + bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + + if (x === NEXT_FILTER) { + promise._reject(value); + } else if (x === errorObj) { + promise._rejectCallback(x.e, false); + } else { + debug.checkForgottenReturns(x, promiseCreated, "", promise, this); + promise._resolveCallback(x); + } +}; + +Promise.prototype._target = function() { + var ret = this; + while (ret._isFollowing()) ret = ret._followee(); + return ret; +}; + +Promise.prototype._followee = function() { + return this._rejectionHandler0; +}; + +Promise.prototype._setFollowee = function(promise) { + this._rejectionHandler0 = promise; +}; + +Promise.prototype._settlePromise = function(promise, handler, receiver, value) { + var isPromise = promise instanceof Promise; + var bitField = this._bitField; + var asyncGuaranteed = ((bitField & 134217728) !== 0); + if (((bitField & 65536) !== 0)) { + if (isPromise) promise._invokeInternalOnCancel(); + + if (receiver instanceof PassThroughHandlerContext && + receiver.isFinallyHandler()) { + receiver.cancelPromise = promise; + if (tryCatch(handler).call(receiver, value) === errorObj) { + promise._reject(errorObj.e); + } + } else if (handler === reflectHandler) { + promise._fulfill(reflectHandler.call(receiver)); + } else if (receiver instanceof Proxyable) { + receiver._promiseCancelled(promise); + } else if (isPromise || promise instanceof PromiseArray) { + promise._cancel(); + } else { + receiver.cancel(); + } + } else if (typeof handler === "function") { + if (!isPromise) { + handler.call(receiver, value, promise); + } else { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (receiver instanceof Proxyable) { + if (!receiver._isResolved()) { + if (((bitField & 33554432) !== 0)) { + receiver._promiseFulfilled(value, promise); + } else { + receiver._promiseRejected(value, promise); + } + } + } else if (isPromise) { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + if (((bitField & 33554432) !== 0)) { + promise._fulfill(value); + } else { + promise._reject(value); + } + } +}; + +Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { + var handler = ctx.handler; + var promise = ctx.promise; + var receiver = ctx.receiver; + var value = ctx.value; + if (typeof handler === "function") { + if (!(promise instanceof Promise)) { + handler.call(receiver, value, promise); + } else { + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (promise instanceof Promise) { + promise._reject(value); + } +}; + +Promise.prototype._settlePromiseCtx = function(ctx) { + this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); +}; + +Promise.prototype._settlePromise0 = function(handler, value, bitField) { + var promise = this._promise0; + var receiver = this._receiverAt(0); + this._promise0 = undefined; + this._receiver0 = undefined; + this._settlePromise(promise, handler, receiver, value); +}; + +Promise.prototype._clearCallbackDataAtIndex = function(index) { + var base = index * 4 - 4; + this[base + 2] = + this[base + 3] = + this[base + 0] = + this[base + 1] = undefined; +}; + +Promise.prototype._fulfill = function (value) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + if (value === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._reject(err); + } + this._setFulfilled(); + this._rejectionHandler0 = value; + + if ((bitField & 65535) > 0) { + if (((bitField & 134217728) !== 0)) { + this._settlePromises(); + } else { + async.settlePromises(this); + } + } +}; + +Promise.prototype._reject = function (reason) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + this._setRejected(); + this._fulfillmentHandler0 = reason; + + if (this._isFinal()) { + return async.fatalError(reason, util.isNode); + } + + if ((bitField & 65535) > 0) { + async.settlePromises(this); + } else { + this._ensurePossibleRejectionHandled(); + } +}; + +Promise.prototype._fulfillPromises = function (len, value) { + for (var i = 1; i < len; i++) { + var handler = this._fulfillmentHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, value); + } +}; + +Promise.prototype._rejectPromises = function (len, reason) { + for (var i = 1; i < len; i++) { + var handler = this._rejectionHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, reason); + } +}; + +Promise.prototype._settlePromises = function () { + var bitField = this._bitField; + var len = (bitField & 65535); + + if (len > 0) { + if (((bitField & 16842752) !== 0)) { + var reason = this._fulfillmentHandler0; + this._settlePromise0(this._rejectionHandler0, reason, bitField); + this._rejectPromises(len, reason); + } else { + var value = this._rejectionHandler0; + this._settlePromise0(this._fulfillmentHandler0, value, bitField); + this._fulfillPromises(len, value); + } + this._setLength(0); + } + this._clearCancellationData(); +}; + +Promise.prototype._settledValue = function() { + var bitField = this._bitField; + if (((bitField & 33554432) !== 0)) { + return this._rejectionHandler0; + } else if (((bitField & 16777216) !== 0)) { + return this._fulfillmentHandler0; + } +}; + +function deferResolve(v) {this.promise._resolveCallback(v);} +function deferReject(v) {this.promise._rejectCallback(v, false);} + +Promise.defer = Promise.pending = function() { + debug.deprecated("Promise.defer", "new Promise"); + var promise = new Promise(INTERNAL); + return { + promise: promise, + resolve: deferResolve, + reject: deferReject + }; +}; + +util.notEnumerableProp(Promise, + "_makeSelfResolutionError", + makeSelfResolutionError); + +require("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, + debug); +require("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); +require("./cancel")(Promise, PromiseArray, apiRejection, debug); +require("./direct_resolve")(Promise); +require("./synchronous_inspection")(Promise); +require("./join")( + Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain); +Promise.Promise = Promise; +Promise.version = "3.4.7"; +require('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +require('./call_get.js')(Promise); +require('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug); +require('./timers.js')(Promise, INTERNAL, debug); +require('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug); +require('./nodeify.js')(Promise); +require('./promisify.js')(Promise, INTERNAL); +require('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection); +require('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection); +require('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +require('./settle.js')(Promise, PromiseArray, debug); +require('./some.js')(Promise, PromiseArray, apiRejection); +require('./filter.js')(Promise, INTERNAL); +require('./each.js')(Promise, INTERNAL); +require('./any.js')(Promise); + + util.toFastProperties(Promise); + util.toFastProperties(Promise.prototype); + function fillTypes(value) { + var p = new Promise(INTERNAL); + p._fulfillmentHandler0 = value; + p._rejectionHandler0 = value; + p._promise0 = value; + p._receiver0 = value; + } + // Complete slack tracking, opt out of field-type tracking and + // stabilize map + fillTypes({a: 1}); + fillTypes({b: 2}); + fillTypes({c: 3}); + fillTypes(1); + fillTypes(function(){}); + fillTypes(undefined); + fillTypes(false); + fillTypes(new Promise(INTERNAL)); + debug.setBounds(Async.firstLineError, util.lastLineError); + return Promise; + +}; diff --git a/node_backend/node_modules/bluebird/js/release/promise_array.js b/node_backend/node_modules/bluebird/js/release/promise_array.js new file mode 100644 index 0000000000000000000000000000000000000000..f874df3f3d72187347cbadeb430bed892364beda --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/promise_array.js @@ -0,0 +1,184 @@ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, + apiRejection, Proxyable) { +var util = require("./util"); +var isArray = util.isArray; + +function toResolutionValue(val) { + switch(val) { + case -2: return []; + case -3: return {}; + } +} + +function PromiseArray(values) { + var promise = this._promise = new Promise(INTERNAL); + if (values instanceof Promise) { + promise._propagateFrom(values, 3); + } + promise._setOnCancel(this); + this._values = values; + this._length = 0; + this._totalResolved = 0; + this._init(undefined, -2); +} +util.inherits(PromiseArray, Proxyable); + +PromiseArray.prototype.length = function () { + return this._length; +}; + +PromiseArray.prototype.promise = function () { + return this._promise; +}; + +PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { + var values = tryConvertToPromise(this._values, this._promise); + if (values instanceof Promise) { + values = values._target(); + var bitField = values._bitField; + ; + this._values = values; + + if (((bitField & 50397184) === 0)) { + this._promise._setAsyncGuaranteed(); + return values._then( + init, + this._reject, + undefined, + this, + resolveValueIfEmpty + ); + } else if (((bitField & 33554432) !== 0)) { + values = values._value(); + } else if (((bitField & 16777216) !== 0)) { + return this._reject(values._reason()); + } else { + return this._cancel(); + } + } + values = util.asArray(values); + if (values === null) { + var err = apiRejection( + "expecting an array or an iterable object but got " + util.classString(values)).reason(); + this._promise._rejectCallback(err, false); + return; + } + + if (values.length === 0) { + if (resolveValueIfEmpty === -5) { + this._resolveEmptyArray(); + } + else { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + } + return; + } + this._iterate(values); +}; + +PromiseArray.prototype._iterate = function(values) { + var len = this.getActualLength(values.length); + this._length = len; + this._values = this.shouldCopyValues() ? new Array(len) : this._values; + var result = this._promise; + var isResolved = false; + var bitField = null; + for (var i = 0; i < len; ++i) { + var maybePromise = tryConvertToPromise(values[i], result); + + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + bitField = maybePromise._bitField; + } else { + bitField = null; + } + + if (isResolved) { + if (bitField !== null) { + maybePromise.suppressUnhandledRejections(); + } + } else if (bitField !== null) { + if (((bitField & 50397184) === 0)) { + maybePromise._proxy(this, i); + this._values[i] = maybePromise; + } else if (((bitField & 33554432) !== 0)) { + isResolved = this._promiseFulfilled(maybePromise._value(), i); + } else if (((bitField & 16777216) !== 0)) { + isResolved = this._promiseRejected(maybePromise._reason(), i); + } else { + isResolved = this._promiseCancelled(i); + } + } else { + isResolved = this._promiseFulfilled(maybePromise, i); + } + } + if (!isResolved) result._setAsyncGuaranteed(); +}; + +PromiseArray.prototype._isResolved = function () { + return this._values === null; +}; + +PromiseArray.prototype._resolve = function (value) { + this._values = null; + this._promise._fulfill(value); +}; + +PromiseArray.prototype._cancel = function() { + if (this._isResolved() || !this._promise._isCancellable()) return; + this._values = null; + this._promise._cancel(); +}; + +PromiseArray.prototype._reject = function (reason) { + this._values = null; + this._promise._rejectCallback(reason, false); +}; + +PromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +PromiseArray.prototype._promiseCancelled = function() { + this._cancel(); + return true; +}; + +PromiseArray.prototype._promiseRejected = function (reason) { + this._totalResolved++; + this._reject(reason); + return true; +}; + +PromiseArray.prototype._resultCancelled = function() { + if (this._isResolved()) return; + var values = this._values; + this._cancel(); + if (values instanceof Promise) { + values.cancel(); + } else { + for (var i = 0; i < values.length; ++i) { + if (values[i] instanceof Promise) { + values[i].cancel(); + } + } + } +}; + +PromiseArray.prototype.shouldCopyValues = function () { + return true; +}; + +PromiseArray.prototype.getActualLength = function (len) { + return len; +}; + +return PromiseArray; +}; diff --git a/node_backend/node_modules/bluebird/js/release/promisify.js b/node_backend/node_modules/bluebird/js/release/promisify.js new file mode 100644 index 0000000000000000000000000000000000000000..aa98e5bde1ca973ff24ecfe6bc7ad305246d7415 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/promisify.js @@ -0,0 +1,314 @@ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var THIS = {}; +var util = require("./util"); +var nodebackForPromise = require("./nodeback"); +var withAppended = util.withAppended; +var maybeWrapAsError = util.maybeWrapAsError; +var canEvaluate = util.canEvaluate; +var TypeError = require("./errors").TypeError; +var defaultSuffix = "Async"; +var defaultPromisified = {__isPromisified__: true}; +var noCopyProps = [ + "arity", "length", + "name", + "arguments", + "caller", + "callee", + "prototype", + "__isPromisified__" +]; +var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); + +var defaultFilter = function(name) { + return util.isIdentifier(name) && + name.charAt(0) !== "_" && + name !== "constructor"; +}; + +function propsFilter(key) { + return !noCopyPropsPattern.test(key); +} + +function isPromisified(fn) { + try { + return fn.__isPromisified__ === true; + } + catch (e) { + return false; + } +} + +function hasPromisified(obj, key, suffix) { + var val = util.getDataPropertyOrDefault(obj, key + suffix, + defaultPromisified); + return val ? isPromisified(val) : false; +} +function checkValid(ret, suffix, suffixRegexp) { + for (var i = 0; i < ret.length; i += 2) { + var key = ret[i]; + if (suffixRegexp.test(key)) { + var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); + for (var j = 0; j < ret.length; j += 2) { + if (ret[j] === keyWithoutAsyncSuffix) { + throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a" + .replace("%s", suffix)); + } + } + } + } +} + +function promisifiableMethods(obj, suffix, suffixRegexp, filter) { + var keys = util.inheritedDataKeys(obj); + var ret = []; + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var value = obj[key]; + var passesDefaultFilter = filter === defaultFilter + ? true : defaultFilter(key, value, obj); + if (typeof value === "function" && + !isPromisified(value) && + !hasPromisified(obj, key, suffix) && + filter(key, value, obj, passesDefaultFilter)) { + ret.push(key, value); + } + } + checkValid(ret, suffix, suffixRegexp); + return ret; +} + +var escapeIdentRegex = function(str) { + return str.replace(/([$])/, "\\$"); +}; + +var makeNodePromisifiedEval; +if (!false) { +var switchCaseArgumentOrder = function(likelyArgumentCount) { + var ret = [likelyArgumentCount]; + var min = Math.max(0, likelyArgumentCount - 1 - 3); + for(var i = likelyArgumentCount - 1; i >= min; --i) { + ret.push(i); + } + for(var i = likelyArgumentCount + 1; i <= 3; ++i) { + ret.push(i); + } + return ret; +}; + +var argumentSequence = function(argumentCount) { + return util.filledRange(argumentCount, "_arg", ""); +}; + +var parameterDeclaration = function(parameterCount) { + return util.filledRange( + Math.max(parameterCount, 3), "_arg", ""); +}; + +var parameterCount = function(fn) { + if (typeof fn.length === "number") { + return Math.max(Math.min(fn.length, 1023 + 1), 0); + } + return 0; +}; + +makeNodePromisifiedEval = +function(callback, receiver, originalName, fn, _, multiArgs) { + var newParameterCount = Math.max(0, parameterCount(fn) - 1); + var argumentOrder = switchCaseArgumentOrder(newParameterCount); + var shouldProxyThis = typeof callback === "string" || receiver === THIS; + + function generateCallForArgumentCount(count) { + var args = argumentSequence(count).join(", "); + var comma = count > 0 ? ", " : ""; + var ret; + if (shouldProxyThis) { + ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; + } else { + ret = receiver === undefined + ? "ret = callback({{args}}, nodeback); break;\n" + : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; + } + return ret.replace("{{args}}", args).replace(", ", comma); + } + + function generateArgumentSwitchCase() { + var ret = ""; + for (var i = 0; i < argumentOrder.length; ++i) { + ret += "case " + argumentOrder[i] +":" + + generateCallForArgumentCount(argumentOrder[i]); + } + + ret += " \n\ + default: \n\ + var args = new Array(len + 1); \n\ + var i = 0; \n\ + for (var i = 0; i < len; ++i) { \n\ + args[i] = arguments[i]; \n\ + } \n\ + args[i] = nodeback; \n\ + [CodeForCall] \n\ + break; \n\ + ".replace("[CodeForCall]", (shouldProxyThis + ? "ret = callback.apply(this, args);\n" + : "ret = callback.apply(receiver, args);\n")); + return ret; + } + + var getFunctionCode = typeof callback === "string" + ? ("this != null ? this['"+callback+"'] : fn") + : "fn"; + var body = "'use strict'; \n\ + var ret = function (Parameters) { \n\ + 'use strict'; \n\ + var len = arguments.length; \n\ + var promise = new Promise(INTERNAL); \n\ + promise._captureStackTrace(); \n\ + var nodeback = nodebackForPromise(promise, " + multiArgs + "); \n\ + var ret; \n\ + var callback = tryCatch([GetFunctionCode]); \n\ + switch(len) { \n\ + [CodeForSwitchCase] \n\ + } \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ + } \n\ + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n\ + return promise; \n\ + }; \n\ + notEnumerableProp(ret, '__isPromisified__', true); \n\ + return ret; \n\ + ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) + .replace("[GetFunctionCode]", getFunctionCode); + body = body.replace("Parameters", parameterDeclaration(newParameterCount)); + return new Function("Promise", + "fn", + "receiver", + "withAppended", + "maybeWrapAsError", + "nodebackForPromise", + "tryCatch", + "errorObj", + "notEnumerableProp", + "INTERNAL", + body)( + Promise, + fn, + receiver, + withAppended, + maybeWrapAsError, + nodebackForPromise, + util.tryCatch, + util.errorObj, + util.notEnumerableProp, + INTERNAL); +}; +} + +function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) { + var defaultThis = (function() {return this;})(); + var method = callback; + if (typeof method === "string") { + callback = fn; + } + function promisified() { + var _receiver = receiver; + if (receiver === THIS) _receiver = this; + var promise = new Promise(INTERNAL); + promise._captureStackTrace(); + var cb = typeof method === "string" && this !== defaultThis + ? this[method] : callback; + var fn = nodebackForPromise(promise, multiArgs); + try { + cb.apply(_receiver, withAppended(arguments, fn)); + } catch(e) { + promise._rejectCallback(maybeWrapAsError(e), true, true); + } + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); + return promise; + } + util.notEnumerableProp(promisified, "__isPromisified__", true); + return promisified; +} + +var makeNodePromisified = canEvaluate + ? makeNodePromisifiedEval + : makeNodePromisifiedClosure; + +function promisifyAll(obj, suffix, filter, promisifier, multiArgs) { + var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); + var methods = + promisifiableMethods(obj, suffix, suffixRegexp, filter); + + for (var i = 0, len = methods.length; i < len; i+= 2) { + var key = methods[i]; + var fn = methods[i+1]; + var promisifiedKey = key + suffix; + if (promisifier === makeNodePromisified) { + obj[promisifiedKey] = + makeNodePromisified(key, THIS, key, fn, suffix, multiArgs); + } else { + var promisified = promisifier(fn, function() { + return makeNodePromisified(key, THIS, key, + fn, suffix, multiArgs); + }); + util.notEnumerableProp(promisified, "__isPromisified__", true); + obj[promisifiedKey] = promisified; + } + } + util.toFastProperties(obj); + return obj; +} + +function promisify(callback, receiver, multiArgs) { + return makeNodePromisified(callback, receiver, undefined, + callback, null, multiArgs); +} + +Promise.promisify = function (fn, options) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + if (isPromisified(fn)) { + return fn; + } + options = Object(options); + var receiver = options.context === undefined ? THIS : options.context; + var multiArgs = !!options.multiArgs; + var ret = promisify(fn, receiver, multiArgs); + util.copyDescriptors(fn, ret, propsFilter); + return ret; +}; + +Promise.promisifyAll = function (target, options) { + if (typeof target !== "function" && typeof target !== "object") { + throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + options = Object(options); + var multiArgs = !!options.multiArgs; + var suffix = options.suffix; + if (typeof suffix !== "string") suffix = defaultSuffix; + var filter = options.filter; + if (typeof filter !== "function") filter = defaultFilter; + var promisifier = options.promisifier; + if (typeof promisifier !== "function") promisifier = makeNodePromisified; + + if (!util.isIdentifier(suffix)) { + throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + + var keys = util.inheritedDataKeys(target); + for (var i = 0; i < keys.length; ++i) { + var value = target[keys[i]]; + if (keys[i] !== "constructor" && + util.isClass(value)) { + promisifyAll(value.prototype, suffix, filter, promisifier, + multiArgs); + promisifyAll(value, suffix, filter, promisifier, multiArgs); + } + } + + return promisifyAll(target, suffix, filter, promisifier, multiArgs); +}; +}; + diff --git a/node_backend/node_modules/bluebird/js/release/props.js b/node_backend/node_modules/bluebird/js/release/props.js new file mode 100644 index 0000000000000000000000000000000000000000..fc981ce4991a6a337c2e9ff50f6e68b8cd6e614b --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/props.js @@ -0,0 +1,118 @@ +"use strict"; +module.exports = function( + Promise, PromiseArray, tryConvertToPromise, apiRejection) { +var util = require("./util"); +var isObject = util.isObject; +var es5 = require("./es5"); +var Es6Map; +if (typeof Map === "function") Es6Map = Map; + +var mapToEntries = (function() { + var index = 0; + var size = 0; + + function extractEntry(value, key) { + this[index] = value; + this[index + size] = key; + index++; + } + + return function mapToEntries(map) { + size = map.size; + index = 0; + var ret = new Array(map.size * 2); + map.forEach(extractEntry, ret); + return ret; + }; +})(); + +var entriesToMap = function(entries) { + var ret = new Es6Map(); + var length = entries.length / 2 | 0; + for (var i = 0; i < length; ++i) { + var key = entries[length + i]; + var value = entries[i]; + ret.set(key, value); + } + return ret; +}; + +function PropertiesPromiseArray(obj) { + var isMap = false; + var entries; + if (Es6Map !== undefined && obj instanceof Es6Map) { + entries = mapToEntries(obj); + isMap = true; + } else { + var keys = es5.keys(obj); + var len = keys.length; + entries = new Array(len * 2); + for (var i = 0; i < len; ++i) { + var key = keys[i]; + entries[i] = obj[key]; + entries[i + len] = key; + } + } + this.constructor$(entries); + this._isMap = isMap; + this._init$(undefined, -3); +} +util.inherits(PropertiesPromiseArray, PromiseArray); + +PropertiesPromiseArray.prototype._init = function () {}; + +PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + var val; + if (this._isMap) { + val = entriesToMap(this._values); + } else { + val = {}; + var keyOffset = this.length(); + for (var i = 0, len = this.length(); i < len; ++i) { + val[this._values[i + keyOffset]] = this._values[i]; + } + } + this._resolve(val); + return true; + } + return false; +}; + +PropertiesPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +PropertiesPromiseArray.prototype.getActualLength = function (len) { + return len >> 1; +}; + +function props(promises) { + var ret; + var castValue = tryConvertToPromise(promises); + + if (!isObject(castValue)) { + return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } else if (castValue instanceof Promise) { + ret = castValue._then( + Promise.props, undefined, undefined, undefined, undefined); + } else { + ret = new PropertiesPromiseArray(castValue).promise(); + } + + if (castValue instanceof Promise) { + ret._propagateFrom(castValue, 2); + } + return ret; +} + +Promise.prototype.props = function () { + return props(this); +}; + +Promise.props = function (promises) { + return props(promises); +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/queue.js b/node_backend/node_modules/bluebird/js/release/queue.js new file mode 100644 index 0000000000000000000000000000000000000000..ffd36fda1fb51f855c24ae218b52dd430bef0380 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/queue.js @@ -0,0 +1,73 @@ +"use strict"; +function arrayMove(src, srcIndex, dst, dstIndex, len) { + for (var j = 0; j < len; ++j) { + dst[j + dstIndex] = src[j + srcIndex]; + src[j + srcIndex] = void 0; + } +} + +function Queue(capacity) { + this._capacity = capacity; + this._length = 0; + this._front = 0; +} + +Queue.prototype._willBeOverCapacity = function (size) { + return this._capacity < size; +}; + +Queue.prototype._pushOne = function (arg) { + var length = this.length(); + this._checkCapacity(length + 1); + var i = (this._front + length) & (this._capacity - 1); + this[i] = arg; + this._length = length + 1; +}; + +Queue.prototype.push = function (fn, receiver, arg) { + var length = this.length() + 3; + if (this._willBeOverCapacity(length)) { + this._pushOne(fn); + this._pushOne(receiver); + this._pushOne(arg); + return; + } + var j = this._front + length - 3; + this._checkCapacity(length); + var wrapMask = this._capacity - 1; + this[(j + 0) & wrapMask] = fn; + this[(j + 1) & wrapMask] = receiver; + this[(j + 2) & wrapMask] = arg; + this._length = length; +}; + +Queue.prototype.shift = function () { + var front = this._front, + ret = this[front]; + + this[front] = undefined; + this._front = (front + 1) & (this._capacity - 1); + this._length--; + return ret; +}; + +Queue.prototype.length = function () { + return this._length; +}; + +Queue.prototype._checkCapacity = function (size) { + if (this._capacity < size) { + this._resizeTo(this._capacity << 1); + } +}; + +Queue.prototype._resizeTo = function (capacity) { + var oldCapacity = this._capacity; + this._capacity = capacity; + var front = this._front; + var length = this._length; + var moveItemsCount = (front + length) & (oldCapacity - 1); + arrayMove(this, 0, this, oldCapacity, moveItemsCount); +}; + +module.exports = Queue; diff --git a/node_backend/node_modules/bluebird/js/release/race.js b/node_backend/node_modules/bluebird/js/release/race.js new file mode 100644 index 0000000000000000000000000000000000000000..b862f46d64ea047159d7df0370998dfc14b091d5 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/race.js @@ -0,0 +1,49 @@ +"use strict"; +module.exports = function( + Promise, INTERNAL, tryConvertToPromise, apiRejection) { +var util = require("./util"); + +var raceLater = function (promise) { + return promise.then(function(array) { + return race(array, promise); + }); +}; + +function race(promises, parent) { + var maybePromise = tryConvertToPromise(promises); + + if (maybePromise instanceof Promise) { + return raceLater(maybePromise); + } else { + promises = util.asArray(promises); + if (promises === null) + return apiRejection("expecting an array or an iterable object but got " + util.classString(promises)); + } + + var ret = new Promise(INTERNAL); + if (parent !== undefined) { + ret._propagateFrom(parent, 3); + } + var fulfill = ret._fulfill; + var reject = ret._reject; + for (var i = 0, len = promises.length; i < len; ++i) { + var val = promises[i]; + + if (val === undefined && !(i in promises)) { + continue; + } + + Promise.cast(val)._then(fulfill, reject, undefined, ret, null); + } + return ret; +} + +Promise.race = function (promises) { + return race(promises, undefined); +}; + +Promise.prototype.race = function () { + return race(this, undefined); +}; + +}; diff --git a/node_backend/node_modules/bluebird/js/release/reduce.js b/node_backend/node_modules/bluebird/js/release/reduce.js new file mode 100644 index 0000000000000000000000000000000000000000..26e2b1a970618468e9faedeb38cb543cc4e4db23 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/reduce.js @@ -0,0 +1,172 @@ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = require("./util"); +var tryCatch = util.tryCatch; + +function ReductionPromiseArray(promises, fn, initialValue, _each) { + this.constructor$(promises); + var domain = getDomain(); + this._fn = domain === null ? fn : util.domainBind(domain, fn); + if (initialValue !== undefined) { + initialValue = Promise.resolve(initialValue); + initialValue._attachCancellationCallback(this); + } + this._initialValue = initialValue; + this._currentCancellable = null; + if(_each === INTERNAL) { + this._eachValues = Array(this._length); + } else if (_each === 0) { + this._eachValues = null; + } else { + this._eachValues = undefined; + } + this._promise._captureStackTrace(); + this._init$(undefined, -5); +} +util.inherits(ReductionPromiseArray, PromiseArray); + +ReductionPromiseArray.prototype._gotAccum = function(accum) { + if (this._eachValues !== undefined && + this._eachValues !== null && + accum !== INTERNAL) { + this._eachValues.push(accum); + } +}; + +ReductionPromiseArray.prototype._eachComplete = function(value) { + if (this._eachValues !== null) { + this._eachValues.push(value); + } + return this._eachValues; +}; + +ReductionPromiseArray.prototype._init = function() {}; + +ReductionPromiseArray.prototype._resolveEmptyArray = function() { + this._resolve(this._eachValues !== undefined ? this._eachValues + : this._initialValue); +}; + +ReductionPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +ReductionPromiseArray.prototype._resolve = function(value) { + this._promise._resolveCallback(value); + this._values = null; +}; + +ReductionPromiseArray.prototype._resultCancelled = function(sender) { + if (sender === this._initialValue) return this._cancel(); + if (this._isResolved()) return; + this._resultCancelled$(); + if (this._currentCancellable instanceof Promise) { + this._currentCancellable.cancel(); + } + if (this._initialValue instanceof Promise) { + this._initialValue.cancel(); + } +}; + +ReductionPromiseArray.prototype._iterate = function (values) { + this._values = values; + var value; + var i; + var length = values.length; + if (this._initialValue !== undefined) { + value = this._initialValue; + i = 0; + } else { + value = Promise.resolve(values[0]); + i = 1; + } + + this._currentCancellable = value; + + if (!value.isRejected()) { + for (; i < length; ++i) { + var ctx = { + accum: null, + value: values[i], + index: i, + length: length, + array: this + }; + value = value._then(gotAccum, undefined, undefined, ctx, undefined); + } + } + + if (this._eachValues !== undefined) { + value = value + ._then(this._eachComplete, undefined, undefined, this, undefined); + } + value._then(completed, completed, undefined, value, this); +}; + +Promise.prototype.reduce = function (fn, initialValue) { + return reduce(this, fn, initialValue, null); +}; + +Promise.reduce = function (promises, fn, initialValue, _each) { + return reduce(promises, fn, initialValue, _each); +}; + +function completed(valueOrReason, array) { + if (this.isFulfilled()) { + array._resolve(valueOrReason); + } else { + array._reject(valueOrReason); + } +} + +function reduce(promises, fn, initialValue, _each) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var array = new ReductionPromiseArray(promises, fn, initialValue, _each); + return array.promise(); +} + +function gotAccum(accum) { + this.accum = accum; + this.array._gotAccum(accum); + var value = tryConvertToPromise(this.value, this.array._promise); + if (value instanceof Promise) { + this.array._currentCancellable = value; + return value._then(gotValue, undefined, undefined, this, undefined); + } else { + return gotValue.call(this, value); + } +} + +function gotValue(value) { + var array = this.array; + var promise = array._promise; + var fn = tryCatch(array._fn); + promise._pushContext(); + var ret; + if (array._eachValues !== undefined) { + ret = fn.call(promise._boundValue(), value, this.index, this.length); + } else { + ret = fn.call(promise._boundValue(), + this.accum, value, this.index, this.length); + } + if (ret instanceof Promise) { + array._currentCancellable = ret; + } + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + array._eachValues !== undefined ? "Promise.each" : "Promise.reduce", + promise + ); + return ret; +} +}; diff --git a/node_backend/node_modules/bluebird/js/release/schedule.js b/node_backend/node_modules/bluebird/js/release/schedule.js new file mode 100644 index 0000000000000000000000000000000000000000..a1907288229f5824e2172064f549895ace54d0cf --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/schedule.js @@ -0,0 +1,61 @@ +"use strict"; +var util = require("./util"); +var schedule; +var noAsyncScheduler = function() { + throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var NativePromise = util.getNativePromise(); +if (util.isNode && typeof MutationObserver === "undefined") { + var GlobalSetImmediate = global.setImmediate; + var ProcessNextTick = process.nextTick; + schedule = util.isRecentNode + ? function(fn) { GlobalSetImmediate.call(global, fn); } + : function(fn) { ProcessNextTick.call(process, fn); }; +} else if (typeof NativePromise === "function" && + typeof NativePromise.resolve === "function") { + var nativePromise = NativePromise.resolve(); + schedule = function(fn) { + nativePromise.then(fn); + }; +} else if ((typeof MutationObserver !== "undefined") && + !(typeof window !== "undefined" && + window.navigator && + (window.navigator.standalone || window.cordova))) { + schedule = (function() { + var div = document.createElement("div"); + var opts = {attributes: true}; + var toggleScheduled = false; + var div2 = document.createElement("div"); + var o2 = new MutationObserver(function() { + div.classList.toggle("foo"); + toggleScheduled = false; + }); + o2.observe(div2, opts); + + var scheduleToggle = function() { + if (toggleScheduled) return; + toggleScheduled = true; + div2.classList.toggle("foo"); + }; + + return function schedule(fn) { + var o = new MutationObserver(function() { + o.disconnect(); + fn(); + }); + o.observe(div, opts); + scheduleToggle(); + }; + })(); +} else if (typeof setImmediate !== "undefined") { + schedule = function (fn) { + setImmediate(fn); + }; +} else if (typeof setTimeout !== "undefined") { + schedule = function (fn) { + setTimeout(fn, 0); + }; +} else { + schedule = noAsyncScheduler; +} +module.exports = schedule; diff --git a/node_backend/node_modules/bluebird/js/release/settle.js b/node_backend/node_modules/bluebird/js/release/settle.js new file mode 100644 index 0000000000000000000000000000000000000000..fade3a174f2a4ac51e002412449d0c18a09418ea --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/settle.js @@ -0,0 +1,43 @@ +"use strict"; +module.exports = + function(Promise, PromiseArray, debug) { +var PromiseInspection = Promise.PromiseInspection; +var util = require("./util"); + +function SettledPromiseArray(values) { + this.constructor$(values); +} +util.inherits(SettledPromiseArray, PromiseArray); + +SettledPromiseArray.prototype._promiseResolved = function (index, inspection) { + this._values[index] = inspection; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { + var ret = new PromiseInspection(); + ret._bitField = 33554432; + ret._settledValueField = value; + return this._promiseResolved(index, ret); +}; +SettledPromiseArray.prototype._promiseRejected = function (reason, index) { + var ret = new PromiseInspection(); + ret._bitField = 16777216; + ret._settledValueField = reason; + return this._promiseResolved(index, ret); +}; + +Promise.settle = function (promises) { + debug.deprecated(".settle()", ".reflect()"); + return new SettledPromiseArray(promises).promise(); +}; + +Promise.prototype.settle = function () { + return Promise.settle(this); +}; +}; diff --git a/node_backend/node_modules/bluebird/js/release/some.js b/node_backend/node_modules/bluebird/js/release/some.js new file mode 100644 index 0000000000000000000000000000000000000000..400d85207d6d7de2b996509bd567efe5cd893b0e --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/some.js @@ -0,0 +1,148 @@ +"use strict"; +module.exports = +function(Promise, PromiseArray, apiRejection) { +var util = require("./util"); +var RangeError = require("./errors").RangeError; +var AggregateError = require("./errors").AggregateError; +var isArray = util.isArray; +var CANCELLATION = {}; + + +function SomePromiseArray(values) { + this.constructor$(values); + this._howMany = 0; + this._unwrap = false; + this._initialized = false; +} +util.inherits(SomePromiseArray, PromiseArray); + +SomePromiseArray.prototype._init = function () { + if (!this._initialized) { + return; + } + if (this._howMany === 0) { + this._resolve([]); + return; + } + this._init$(undefined, -5); + var isArrayResolved = isArray(this._values); + if (!this._isResolved() && + isArrayResolved && + this._howMany > this._canPossiblyFulfill()) { + this._reject(this._getRangeError(this.length())); + } +}; + +SomePromiseArray.prototype.init = function () { + this._initialized = true; + this._init(); +}; + +SomePromiseArray.prototype.setUnwrap = function () { + this._unwrap = true; +}; + +SomePromiseArray.prototype.howMany = function () { + return this._howMany; +}; + +SomePromiseArray.prototype.setHowMany = function (count) { + this._howMany = count; +}; + +SomePromiseArray.prototype._promiseFulfilled = function (value) { + this._addFulfilled(value); + if (this._fulfilled() === this.howMany()) { + this._values.length = this.howMany(); + if (this.howMany() === 1 && this._unwrap) { + this._resolve(this._values[0]); + } else { + this._resolve(this._values); + } + return true; + } + return false; + +}; +SomePromiseArray.prototype._promiseRejected = function (reason) { + this._addRejected(reason); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._promiseCancelled = function () { + if (this._values instanceof Promise || this._values == null) { + return this._cancel(); + } + this._addRejected(CANCELLATION); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._checkOutcome = function() { + if (this.howMany() > this._canPossiblyFulfill()) { + var e = new AggregateError(); + for (var i = this.length(); i < this._values.length; ++i) { + if (this._values[i] !== CANCELLATION) { + e.push(this._values[i]); + } + } + if (e.length > 0) { + this._reject(e); + } else { + this._cancel(); + } + return true; + } + return false; +}; + +SomePromiseArray.prototype._fulfilled = function () { + return this._totalResolved; +}; + +SomePromiseArray.prototype._rejected = function () { + return this._values.length - this.length(); +}; + +SomePromiseArray.prototype._addRejected = function (reason) { + this._values.push(reason); +}; + +SomePromiseArray.prototype._addFulfilled = function (value) { + this._values[this._totalResolved++] = value; +}; + +SomePromiseArray.prototype._canPossiblyFulfill = function () { + return this.length() - this._rejected(); +}; + +SomePromiseArray.prototype._getRangeError = function (count) { + var message = "Input array must contain at least " + + this._howMany + " items but contains only " + count + " items"; + return new RangeError(message); +}; + +SomePromiseArray.prototype._resolveEmptyArray = function () { + this._reject(this._getRangeError(0)); +}; + +function some(promises, howMany) { + if ((howMany | 0) !== howMany || howMany < 0) { + return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var ret = new SomePromiseArray(promises); + var promise = ret.promise(); + ret.setHowMany(howMany); + ret.init(); + return promise; +} + +Promise.some = function (promises, howMany) { + return some(promises, howMany); +}; + +Promise.prototype.some = function (howMany) { + return some(this, howMany); +}; + +Promise._SomePromiseArray = SomePromiseArray; +}; diff --git a/node_backend/node_modules/bluebird/js/release/synchronous_inspection.js b/node_backend/node_modules/bluebird/js/release/synchronous_inspection.js new file mode 100644 index 0000000000000000000000000000000000000000..9c49d2e6003923d6093535246bc8ef64cae0422f --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/synchronous_inspection.js @@ -0,0 +1,103 @@ +"use strict"; +module.exports = function(Promise) { +function PromiseInspection(promise) { + if (promise !== undefined) { + promise = promise._target(); + this._bitField = promise._bitField; + this._settledValueField = promise._isFateSealed() + ? promise._settledValue() : undefined; + } + else { + this._bitField = 0; + this._settledValueField = undefined; + } +} + +PromiseInspection.prototype._settledValue = function() { + return this._settledValueField; +}; + +var value = PromiseInspection.prototype.value = function () { + if (!this.isFulfilled()) { + throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var reason = PromiseInspection.prototype.error = +PromiseInspection.prototype.reason = function () { + if (!this.isRejected()) { + throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { + return (this._bitField & 33554432) !== 0; +}; + +var isRejected = PromiseInspection.prototype.isRejected = function () { + return (this._bitField & 16777216) !== 0; +}; + +var isPending = PromiseInspection.prototype.isPending = function () { + return (this._bitField & 50397184) === 0; +}; + +var isResolved = PromiseInspection.prototype.isResolved = function () { + return (this._bitField & 50331648) !== 0; +}; + +PromiseInspection.prototype.isCancelled = function() { + return (this._bitField & 8454144) !== 0; +}; + +Promise.prototype.__isCancelled = function() { + return (this._bitField & 65536) === 65536; +}; + +Promise.prototype._isCancelled = function() { + return this._target().__isCancelled(); +}; + +Promise.prototype.isCancelled = function() { + return (this._target()._bitField & 8454144) !== 0; +}; + +Promise.prototype.isPending = function() { + return isPending.call(this._target()); +}; + +Promise.prototype.isRejected = function() { + return isRejected.call(this._target()); +}; + +Promise.prototype.isFulfilled = function() { + return isFulfilled.call(this._target()); +}; + +Promise.prototype.isResolved = function() { + return isResolved.call(this._target()); +}; + +Promise.prototype.value = function() { + return value.call(this._target()); +}; + +Promise.prototype.reason = function() { + var target = this._target(); + target._unsetRejectionIsUnhandled(); + return reason.call(target); +}; + +Promise.prototype._value = function() { + return this._settledValue(); +}; + +Promise.prototype._reason = function() { + this._unsetRejectionIsUnhandled(); + return this._settledValue(); +}; + +Promise.PromiseInspection = PromiseInspection; +}; diff --git a/node_backend/node_modules/bluebird/js/release/thenables.js b/node_backend/node_modules/bluebird/js/release/thenables.js new file mode 100644 index 0000000000000000000000000000000000000000..d6ab9aa275d5b09dc39bc0978affe66333910dee --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/thenables.js @@ -0,0 +1,86 @@ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var util = require("./util"); +var errorObj = util.errorObj; +var isObject = util.isObject; + +function tryConvertToPromise(obj, context) { + if (isObject(obj)) { + if (obj instanceof Promise) return obj; + var then = getThen(obj); + if (then === errorObj) { + if (context) context._pushContext(); + var ret = Promise.reject(then.e); + if (context) context._popContext(); + return ret; + } else if (typeof then === "function") { + if (isAnyBluebirdPromise(obj)) { + var ret = new Promise(INTERNAL); + obj._then( + ret._fulfill, + ret._reject, + undefined, + ret, + null + ); + return ret; + } + return doThenable(obj, then, context); + } + } + return obj; +} + +function doGetThen(obj) { + return obj.then; +} + +function getThen(obj) { + try { + return doGetThen(obj); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} + +var hasProp = {}.hasOwnProperty; +function isAnyBluebirdPromise(obj) { + try { + return hasProp.call(obj, "_promise0"); + } catch (e) { + return false; + } +} + +function doThenable(x, then, context) { + var promise = new Promise(INTERNAL); + var ret = promise; + if (context) context._pushContext(); + promise._captureStackTrace(); + if (context) context._popContext(); + var synchronous = true; + var result = util.tryCatch(then).call(x, resolve, reject); + synchronous = false; + + if (promise && result === errorObj) { + promise._rejectCallback(result.e, true, true); + promise = null; + } + + function resolve(value) { + if (!promise) return; + promise._resolveCallback(value); + promise = null; + } + + function reject(reason) { + if (!promise) return; + promise._rejectCallback(reason, synchronous, true); + promise = null; + } + return ret; +} + +return tryConvertToPromise; +}; diff --git a/node_backend/node_modules/bluebird/js/release/timers.js b/node_backend/node_modules/bluebird/js/release/timers.js new file mode 100644 index 0000000000000000000000000000000000000000..cb8f1f421a8cb44cf7457aa2d247a65e5ad2e7b2 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/timers.js @@ -0,0 +1,93 @@ +"use strict"; +module.exports = function(Promise, INTERNAL, debug) { +var util = require("./util"); +var TimeoutError = Promise.TimeoutError; + +function HandleWrapper(handle) { + this.handle = handle; +} + +HandleWrapper.prototype._resultCancelled = function() { + clearTimeout(this.handle); +}; + +var afterValue = function(value) { return delay(+this).thenReturn(value); }; +var delay = Promise.delay = function (ms, value) { + var ret; + var handle; + if (value !== undefined) { + ret = Promise.resolve(value) + ._then(afterValue, null, null, ms, undefined); + if (debug.cancellation() && value instanceof Promise) { + ret._setOnCancel(value); + } + } else { + ret = new Promise(INTERNAL); + handle = setTimeout(function() { ret._fulfill(); }, +ms); + if (debug.cancellation()) { + ret._setOnCancel(new HandleWrapper(handle)); + } + ret._captureStackTrace(); + } + ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.prototype.delay = function (ms) { + return delay(ms, this); +}; + +var afterTimeout = function (promise, message, parent) { + var err; + if (typeof message !== "string") { + if (message instanceof Error) { + err = message; + } else { + err = new TimeoutError("operation timed out"); + } + } else { + err = new TimeoutError(message); + } + util.markAsOriginatingFromRejection(err); + promise._attachExtraTrace(err); + promise._reject(err); + + if (parent != null) { + parent.cancel(); + } +}; + +function successClear(value) { + clearTimeout(this.handle); + return value; +} + +function failureClear(reason) { + clearTimeout(this.handle); + throw reason; +} + +Promise.prototype.timeout = function (ms, message) { + ms = +ms; + var ret, parent; + + var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() { + if (ret.isPending()) { + afterTimeout(ret, message, parent); + } + }, ms)); + + if (debug.cancellation()) { + parent = this.then(); + ret = parent._then(successClear, failureClear, + undefined, handleWrapper, undefined); + ret._setOnCancel(handleWrapper); + } else { + ret = this._then(successClear, failureClear, + undefined, handleWrapper, undefined); + } + + return ret; +}; + +}; diff --git a/node_backend/node_modules/bluebird/js/release/using.js b/node_backend/node_modules/bluebird/js/release/using.js new file mode 100644 index 0000000000000000000000000000000000000000..65de531c11da24b485b59740807e6c3ea72e4a9e --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/using.js @@ -0,0 +1,226 @@ +"use strict"; +module.exports = function (Promise, apiRejection, tryConvertToPromise, + createContext, INTERNAL, debug) { + var util = require("./util"); + var TypeError = require("./errors").TypeError; + var inherits = require("./util").inherits; + var errorObj = util.errorObj; + var tryCatch = util.tryCatch; + var NULL = {}; + + function thrower(e) { + setTimeout(function(){throw e;}, 0); + } + + function castPreservingDisposable(thenable) { + var maybePromise = tryConvertToPromise(thenable); + if (maybePromise !== thenable && + typeof thenable._isDisposable === "function" && + typeof thenable._getDisposer === "function" && + thenable._isDisposable()) { + maybePromise._setDisposable(thenable._getDisposer()); + } + return maybePromise; + } + function dispose(resources, inspection) { + var i = 0; + var len = resources.length; + var ret = new Promise(INTERNAL); + function iterator() { + if (i >= len) return ret._fulfill(); + var maybePromise = castPreservingDisposable(resources[i++]); + if (maybePromise instanceof Promise && + maybePromise._isDisposable()) { + try { + maybePromise = tryConvertToPromise( + maybePromise._getDisposer().tryDispose(inspection), + resources.promise); + } catch (e) { + return thrower(e); + } + if (maybePromise instanceof Promise) { + return maybePromise._then(iterator, thrower, + null, null, null); + } + } + iterator(); + } + iterator(); + return ret; + } + + function Disposer(data, promise, context) { + this._data = data; + this._promise = promise; + this._context = context; + } + + Disposer.prototype.data = function () { + return this._data; + }; + + Disposer.prototype.promise = function () { + return this._promise; + }; + + Disposer.prototype.resource = function () { + if (this.promise().isFulfilled()) { + return this.promise().value(); + } + return NULL; + }; + + Disposer.prototype.tryDispose = function(inspection) { + var resource = this.resource(); + var context = this._context; + if (context !== undefined) context._pushContext(); + var ret = resource !== NULL + ? this.doDispose(resource, inspection) : null; + if (context !== undefined) context._popContext(); + this._promise._unsetDisposable(); + this._data = null; + return ret; + }; + + Disposer.isDisposer = function (d) { + return (d != null && + typeof d.resource === "function" && + typeof d.tryDispose === "function"); + }; + + function FunctionDisposer(fn, promise, context) { + this.constructor$(fn, promise, context); + } + inherits(FunctionDisposer, Disposer); + + FunctionDisposer.prototype.doDispose = function (resource, inspection) { + var fn = this.data(); + return fn.call(resource, resource, inspection); + }; + + function maybeUnwrapDisposer(value) { + if (Disposer.isDisposer(value)) { + this.resources[this.index]._setDisposable(value); + return value.promise(); + } + return value; + } + + function ResourceList(length) { + this.length = length; + this.promise = null; + this[length-1] = null; + } + + ResourceList.prototype._resultCancelled = function() { + var len = this.length; + for (var i = 0; i < len; ++i) { + var item = this[i]; + if (item instanceof Promise) { + item.cancel(); + } + } + }; + + Promise.using = function () { + var len = arguments.length; + if (len < 2) return apiRejection( + "you must pass at least 2 arguments to Promise.using"); + var fn = arguments[len - 1]; + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var input; + var spreadArgs = true; + if (len === 2 && Array.isArray(arguments[0])) { + input = arguments[0]; + len = input.length; + spreadArgs = false; + } else { + input = arguments; + len--; + } + var resources = new ResourceList(len); + for (var i = 0; i < len; ++i) { + var resource = input[i]; + if (Disposer.isDisposer(resource)) { + var disposer = resource; + resource = resource.promise(); + resource._setDisposable(disposer); + } else { + var maybePromise = tryConvertToPromise(resource); + if (maybePromise instanceof Promise) { + resource = + maybePromise._then(maybeUnwrapDisposer, null, null, { + resources: resources, + index: i + }, undefined); + } + } + resources[i] = resource; + } + + var reflectedResources = new Array(resources.length); + for (var i = 0; i < reflectedResources.length; ++i) { + reflectedResources[i] = Promise.resolve(resources[i]).reflect(); + } + + var resultPromise = Promise.all(reflectedResources) + .then(function(inspections) { + for (var i = 0; i < inspections.length; ++i) { + var inspection = inspections[i]; + if (inspection.isRejected()) { + errorObj.e = inspection.error(); + return errorObj; + } else if (!inspection.isFulfilled()) { + resultPromise.cancel(); + return; + } + inspections[i] = inspection.value(); + } + promise._pushContext(); + + fn = tryCatch(fn); + var ret = spreadArgs + ? fn.apply(undefined, inspections) : fn(inspections); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, promiseCreated, "Promise.using", promise); + return ret; + }); + + var promise = resultPromise.lastly(function() { + var inspection = new Promise.PromiseInspection(resultPromise); + return dispose(resources, inspection); + }); + resources.promise = promise; + promise._setOnCancel(resources); + return promise; + }; + + Promise.prototype._setDisposable = function (disposer) { + this._bitField = this._bitField | 131072; + this._disposer = disposer; + }; + + Promise.prototype._isDisposable = function () { + return (this._bitField & 131072) > 0; + }; + + Promise.prototype._getDisposer = function () { + return this._disposer; + }; + + Promise.prototype._unsetDisposable = function () { + this._bitField = this._bitField & (~131072); + this._disposer = undefined; + }; + + Promise.prototype.disposer = function (fn) { + if (typeof fn === "function") { + return new FunctionDisposer(fn, this, createContext()); + } + throw new TypeError(); + }; + +}; diff --git a/node_backend/node_modules/bluebird/js/release/util.js b/node_backend/node_modules/bluebird/js/release/util.js new file mode 100644 index 0000000000000000000000000000000000000000..84c28ec4759aca3902737ae8d15da9b6bd0eaab1 --- /dev/null +++ b/node_backend/node_modules/bluebird/js/release/util.js @@ -0,0 +1,379 @@ +"use strict"; +var es5 = require("./es5"); +var canEvaluate = typeof navigator == "undefined"; + +var errorObj = {e: {}}; +var tryCatchTarget; +var globalObject = typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : + typeof global !== "undefined" ? global : + this !== undefined ? this : null; + +function tryCatcher() { + try { + var target = tryCatchTarget; + tryCatchTarget = null; + return target.apply(this, arguments); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} +function tryCatch(fn) { + tryCatchTarget = fn; + return tryCatcher; +} + +var inherits = function(Child, Parent) { + var hasProp = {}.hasOwnProperty; + + function T() { + this.constructor = Child; + this.constructor$ = Parent; + for (var propertyName in Parent.prototype) { + if (hasProp.call(Parent.prototype, propertyName) && + propertyName.charAt(propertyName.length-1) !== "$" + ) { + this[propertyName + "$"] = Parent.prototype[propertyName]; + } + } + } + T.prototype = Parent.prototype; + Child.prototype = new T(); + return Child.prototype; +}; + + +function isPrimitive(val) { + return val == null || val === true || val === false || + typeof val === "string" || typeof val === "number"; + +} + +function isObject(value) { + return typeof value === "function" || + typeof value === "object" && value !== null; +} + +function maybeWrapAsError(maybeError) { + if (!isPrimitive(maybeError)) return maybeError; + + return new Error(safeToString(maybeError)); +} + +function withAppended(target, appendee) { + var len = target.length; + var ret = new Array(len + 1); + var i; + for (i = 0; i < len; ++i) { + ret[i] = target[i]; + } + ret[i] = appendee; + return ret; +} + +function getDataPropertyOrDefault(obj, key, defaultValue) { + if (es5.isES5) { + var desc = Object.getOwnPropertyDescriptor(obj, key); + + if (desc != null) { + return desc.get == null && desc.set == null + ? desc.value + : defaultValue; + } + } else { + return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; + } +} + +function notEnumerableProp(obj, name, value) { + if (isPrimitive(obj)) return obj; + var descriptor = { + value: value, + configurable: true, + enumerable: false, + writable: true + }; + es5.defineProperty(obj, name, descriptor); + return obj; +} + +function thrower(r) { + throw r; +} + +var inheritedDataKeys = (function() { + var excludedPrototypes = [ + Array.prototype, + Object.prototype, + Function.prototype + ]; + + var isExcludedProto = function(val) { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (excludedPrototypes[i] === val) { + return true; + } + } + return false; + }; + + if (es5.isES5) { + var getKeys = Object.getOwnPropertyNames; + return function(obj) { + var ret = []; + var visitedKeys = Object.create(null); + while (obj != null && !isExcludedProto(obj)) { + var keys; + try { + keys = getKeys(obj); + } catch (e) { + return ret; + } + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (visitedKeys[key]) continue; + visitedKeys[key] = true; + var desc = Object.getOwnPropertyDescriptor(obj, key); + if (desc != null && desc.get == null && desc.set == null) { + ret.push(key); + } + } + obj = es5.getPrototypeOf(obj); + } + return ret; + }; + } else { + var hasProp = {}.hasOwnProperty; + return function(obj) { + if (isExcludedProto(obj)) return []; + var ret = []; + + /*jshint forin:false */ + enumeration: for (var key in obj) { + if (hasProp.call(obj, key)) { + ret.push(key); + } else { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (hasProp.call(excludedPrototypes[i], key)) { + continue enumeration; + } + } + ret.push(key); + } + } + return ret; + }; + } + +})(); + +var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; +function isClass(fn) { + try { + if (typeof fn === "function") { + var keys = es5.names(fn.prototype); + + var hasMethods = es5.isES5 && keys.length > 1; + var hasMethodsOtherThanConstructor = keys.length > 0 && + !(keys.length === 1 && keys[0] === "constructor"); + var hasThisAssignmentAndStaticMethods = + thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; + + if (hasMethods || hasMethodsOtherThanConstructor || + hasThisAssignmentAndStaticMethods) { + return true; + } + } + return false; + } catch (e) { + return false; + } +} + +function toFastProperties(obj) { + /*jshint -W027,-W055,-W031*/ + function FakeConstructor() {} + FakeConstructor.prototype = obj; + var l = 8; + while (l--) new FakeConstructor(); + return obj; + eval(obj); +} + +var rident = /^[a-z$_][a-z$_0-9]*$/i; +function isIdentifier(str) { + return rident.test(str); +} + +function filledRange(count, prefix, suffix) { + var ret = new Array(count); + for(var i = 0; i < count; ++i) { + ret[i] = prefix + i + suffix; + } + return ret; +} + +function safeToString(obj) { + try { + return obj + ""; + } catch (e) { + return "[no string representation]"; + } +} + +function isError(obj) { + return obj !== null && + typeof obj === "object" && + typeof obj.message === "string" && + typeof obj.name === "string"; +} + +function markAsOriginatingFromRejection(e) { + try { + notEnumerableProp(e, "isOperational", true); + } + catch(ignore) {} +} + +function originatesFromRejection(e) { + if (e == null) return false; + return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || + e["isOperational"] === true); +} + +function canAttachTrace(obj) { + return isError(obj) && es5.propertyIsWritable(obj, "stack"); +} + +var ensureErrorObject = (function() { + if (!("stack" in new Error())) { + return function(value) { + if (canAttachTrace(value)) return value; + try {throw new Error(safeToString(value));} + catch(err) {return err;} + }; + } else { + return function(value) { + if (canAttachTrace(value)) return value; + return new Error(safeToString(value)); + }; + } +})(); + +function classString(obj) { + return {}.toString.call(obj); +} + +function copyDescriptors(from, to, filter) { + var keys = es5.names(from); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (filter(key)) { + try { + es5.defineProperty(to, key, es5.getDescriptor(from, key)); + } catch (ignore) {} + } + } +} + +var asArray = function(v) { + if (es5.isArray(v)) { + return v; + } + return null; +}; + +if (typeof Symbol !== "undefined" && Symbol.iterator) { + var ArrayFrom = typeof Array.from === "function" ? function(v) { + return Array.from(v); + } : function(v) { + var ret = []; + var it = v[Symbol.iterator](); + var itResult; + while (!((itResult = it.next()).done)) { + ret.push(itResult.value); + } + return ret; + }; + + asArray = function(v) { + if (es5.isArray(v)) { + return v; + } else if (v != null && typeof v[Symbol.iterator] === "function") { + return ArrayFrom(v); + } + return null; + }; +} + +var isNode = typeof process !== "undefined" && + classString(process).toLowerCase() === "[object process]"; + +var hasEnvVariables = typeof process !== "undefined" && + typeof process.env !== "undefined"; + +function env(key) { + return hasEnvVariables ? process.env[key] : undefined; +} + +function getNativePromise() { + if (typeof Promise === "function") { + try { + var promise = new Promise(function(){}); + if ({}.toString.call(promise) === "[object Promise]") { + return Promise; + } + } catch (e) {} + } +} + +function domainBind(self, cb) { + return self.bind(cb); +} + +var ret = { + isClass: isClass, + isIdentifier: isIdentifier, + inheritedDataKeys: inheritedDataKeys, + getDataPropertyOrDefault: getDataPropertyOrDefault, + thrower: thrower, + isArray: es5.isArray, + asArray: asArray, + notEnumerableProp: notEnumerableProp, + isPrimitive: isPrimitive, + isObject: isObject, + isError: isError, + canEvaluate: canEvaluate, + errorObj: errorObj, + tryCatch: tryCatch, + inherits: inherits, + withAppended: withAppended, + maybeWrapAsError: maybeWrapAsError, + toFastProperties: toFastProperties, + filledRange: filledRange, + toString: safeToString, + canAttachTrace: canAttachTrace, + ensureErrorObject: ensureErrorObject, + originatesFromRejection: originatesFromRejection, + markAsOriginatingFromRejection: markAsOriginatingFromRejection, + classString: classString, + copyDescriptors: copyDescriptors, + hasDevTools: typeof chrome !== "undefined" && chrome && + typeof chrome.loadTimes === "function", + isNode: isNode, + hasEnvVariables: hasEnvVariables, + env: env, + global: globalObject, + getNativePromise: getNativePromise, + domainBind: domainBind +}; +ret.isRecentNode = ret.isNode && (function() { + var version = process.versions.node.split(".").map(Number); + return (version[0] === 0 && version[1] > 10) || (version[0] > 0); +})(); + +if (ret.isNode) ret.toFastProperties(process); + +try {throw new Error(); } catch (e) {ret.lastLineError = e;} +module.exports = ret; diff --git a/node_backend/node_modules/bluebird/package.json b/node_backend/node_modules/bluebird/package.json new file mode 100644 index 0000000000000000000000000000000000000000..0effb14e4ff92a0e5bb5a06804d00ace2ce01114 --- /dev/null +++ b/node_backend/node_modules/bluebird/package.json @@ -0,0 +1,76 @@ +{ + "name": "bluebird", + "description": "Full featured Promises/A+ implementation with exceptionally good performance", + "version": "3.4.7", + "keywords": [ + "promise", + "performance", + "promises", + "promises-a", + "promises-aplus", + "async", + "await", + "deferred", + "deferreds", + "future", + "flow control", + "dsl", + "fluent interface" + ], + "scripts": { + "lint": "node scripts/jshint.js", + "test": "node tools/test.js", + "istanbul": "istanbul", + "prepublish": "npm run generate-browser-core && npm run generate-browser-full", + "generate-browser-full": "node tools/build.js --no-clean --no-debug --release --browser --minify", + "generate-browser-core": "node tools/build.js --features=core --no-debug --release --zalgo --browser --minify && mv js/browser/bluebird.js js/browser/bluebird.core.js && mv js/browser/bluebird.min.js js/browser/bluebird.core.min.js" + }, + "homepage": "https://github.com/petkaantonov/bluebird", + "repository": { + "type": "git", + "url": "git://github.com/petkaantonov/bluebird.git" + }, + "bugs": { + "url": "http://github.com/petkaantonov/bluebird/issues" + }, + "license": "MIT", + "author": { + "name": "Petka Antonov", + "email": "petka_antonov@hotmail.com", + "url": "http://github.com/petkaantonov/" + }, + "devDependencies": { + "acorn": "~0.6.0", + "baconjs": "^0.7.43", + "bluebird": "^2.9.2", + "body-parser": "^1.10.2", + "browserify": "^8.1.1", + "cli-table": "~0.3.1", + "co": "^4.2.0", + "cross-spawn": "^0.2.3", + "glob": "^4.3.2", + "grunt-saucelabs": "~8.4.1", + "highland": "^2.3.0", + "istanbul": "^0.3.5", + "jshint": "^2.6.0", + "jshint-stylish": "~0.2.0", + "mkdirp": "~0.5.0", + "mocha": "~2.1", + "open": "~0.0.5", + "optimist": "~0.6.1", + "rimraf": "~2.2.6", + "rx": "^2.3.25", + "serve-static": "^1.7.1", + "sinon": "~1.7.3", + "uglify-js": "~2.4.16", + "kefir": "^2.4.1" + }, + "readmeFilename": "README.md", + "main": "./js/release/bluebird.js", + "browser": "./js/browser/bluebird.js", + "files": [ + "js/browser", + "js/release", + "LICENSE" + ] +} diff --git a/node_backend/node_modules/buffer-crc32/LICENSE b/node_backend/node_modules/buffer-crc32/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..4cef10eb7b161e48e39d2cc4def3fd81db6cf884 --- /dev/null +++ b/node_backend/node_modules/buffer-crc32/LICENSE @@ -0,0 +1,19 @@ +The MIT License + +Copyright (c) 2013 Brian J. Brennan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_backend/node_modules/buffer-crc32/README.md b/node_backend/node_modules/buffer-crc32/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0d9d8b83595b57dd04076fd2372ac47b4e526750 --- /dev/null +++ b/node_backend/node_modules/buffer-crc32/README.md @@ -0,0 +1,47 @@ +# buffer-crc32 + +[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) + +crc32 that works with binary data and fancy character sets, outputs +buffer, signed or unsigned data and has tests. + +Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix + +# install +``` +npm install buffer-crc32 +``` + +# example +```js +var crc32 = require('buffer-crc32'); +// works with buffers +var buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) +crc32(buf) // -> + +// has convenience methods for getting signed or unsigned ints +crc32.signed(buf) // -> -1805997238 +crc32.unsigned(buf) // -> 2488970058 + +// will cast to buffer if given a string, so you can +// directly use foreign characters safely +crc32('自動販売機') // -> + +// and works in append mode too +var partialCrc = crc32('hey'); +var partialCrc = crc32(' ', partialCrc); +var partialCrc = crc32('sup', partialCrc); +var partialCrc = crc32(' ', partialCrc); +var finalCrc = crc32('bros', partialCrc); // -> +``` + +# tests +This was tested against the output of zlib's crc32 method. You can run +the tests with`npm test` (requires tap) + +# see also +https://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also +supports buffer inputs and return unsigned ints (thanks @tjholowaychuk). + +# license +MIT/X11 diff --git a/node_backend/node_modules/buffer-crc32/index.js b/node_backend/node_modules/buffer-crc32/index.js new file mode 100644 index 0000000000000000000000000000000000000000..6727dd39bb09ada1f02f48e11cacb435b86771c7 --- /dev/null +++ b/node_backend/node_modules/buffer-crc32/index.js @@ -0,0 +1,111 @@ +var Buffer = require('buffer').Buffer; + +var CRC_TABLE = [ + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d +]; + +if (typeof Int32Array !== 'undefined') { + CRC_TABLE = new Int32Array(CRC_TABLE); +} + +function ensureBuffer(input) { + if (Buffer.isBuffer(input)) { + return input; + } + + var hasNewBufferAPI = + typeof Buffer.alloc === "function" && + typeof Buffer.from === "function"; + + if (typeof input === "number") { + return hasNewBufferAPI ? Buffer.alloc(input) : new Buffer(input); + } + else if (typeof input === "string") { + return hasNewBufferAPI ? Buffer.from(input) : new Buffer(input); + } + else { + throw new Error("input must be buffer, number, or string, received " + + typeof input); + } +} + +function bufferizeInt(num) { + var tmp = ensureBuffer(4); + tmp.writeInt32BE(num, 0); + return tmp; +} + +function _crc32(buf, previous) { + buf = ensureBuffer(buf); + if (Buffer.isBuffer(previous)) { + previous = previous.readUInt32BE(0); + } + var crc = ~~previous ^ -1; + for (var n = 0; n < buf.length; n++) { + crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8); + } + return (crc ^ -1); +} + +function crc32() { + return bufferizeInt(_crc32.apply(null, arguments)); +} +crc32.signed = function () { + return _crc32.apply(null, arguments); +}; +crc32.unsigned = function () { + return _crc32.apply(null, arguments) >>> 0; +}; + +module.exports = crc32; diff --git a/node_backend/node_modules/buffer-crc32/package.json b/node_backend/node_modules/buffer-crc32/package.json new file mode 100644 index 0000000000000000000000000000000000000000..e896bec584f960a953beb3b1f2291f5e33439a86 --- /dev/null +++ b/node_backend/node_modules/buffer-crc32/package.json @@ -0,0 +1,39 @@ +{ + "author": "Brian J. Brennan ", + "name": "buffer-crc32", + "description": "A pure javascript CRC32 algorithm that plays nice with binary data", + "version": "0.2.13", + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/brianloveswords/buffer-crc32/raw/master/LICENSE" + } + ], + "contributors": [ + { + "name": "Vladimir Kuznetsov", + "github": "mistakster" + } + ], + "homepage": "https://github.com/brianloveswords/buffer-crc32", + "repository": { + "type": "git", + "url": "git://github.com/brianloveswords/buffer-crc32.git" + }, + "main": "index.js", + "scripts": { + "test": "./node_modules/.bin/tap tests/*.test.js" + }, + "dependencies": {}, + "devDependencies": { + "tap": "~0.2.5" + }, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "license": "MIT", + "files": [ + "index.js" + ] +} diff --git a/node_backend/node_modules/buffer-indexof-polyfill/.eslintrc b/node_backend/node_modules/buffer-indexof-polyfill/.eslintrc new file mode 100644 index 0000000000000000000000000000000000000000..718d2ec081727865a444df352d17d93328b1f258 --- /dev/null +++ b/node_backend/node_modules/buffer-indexof-polyfill/.eslintrc @@ -0,0 +1,33 @@ +{ + "rules": { + "indent": [ + 2, + 4, + { "SwitchCase": 1 } + ], + "quotes": [ + 2, + "double" + ], + "linebreak-style": [ + 2, + "unix" + ], + "semi": [ + 2, + "always" + ], + "no-console": [ + 0 + ], + "no-trailing-spaces": + [ + 2 + ] + }, + "env": { + "node": true, + "mocha": true + }, + "extends": "eslint:recommended" +} diff --git a/node_backend/node_modules/buffer-indexof-polyfill/.travis.yml b/node_backend/node_modules/buffer-indexof-polyfill/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..c662e80928e4f3c43d375ce5258fe6ac7f337ad6 --- /dev/null +++ b/node_backend/node_modules/buffer-indexof-polyfill/.travis.yml @@ -0,0 +1,17 @@ +language: node_js +node_js: + - "0.10" + - "0.12" + - "1.0" + - "1.8" + - "2.0" + - "2.5" + - "3.0" + - "3.3" + - "4.0" + - "4.2" + - "5.0" + - "6" +sudo: false +script: + - "npm run lint && npm test" diff --git a/node_backend/node_modules/buffer-indexof-polyfill/LICENSE b/node_backend/node_modules/buffer-indexof-polyfill/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..1c5a6a9e38a4af0bf50428162184791cbdd94486 --- /dev/null +++ b/node_backend/node_modules/buffer-indexof-polyfill/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Sarosia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_backend/node_modules/buffer-indexof-polyfill/README.md b/node_backend/node_modules/buffer-indexof-polyfill/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3ab22b9d668532a75d4ba86a58c75405e0443d6a --- /dev/null +++ b/node_backend/node_modules/buffer-indexof-polyfill/README.md @@ -0,0 +1,33 @@ +# buffer-indexof-polyfill + +[![Build Status][travis-image]][travis-url] +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] + +This is a polyfill for [`Buffer#indexOf`](https://nodejs.org/api/buffer.html#buffer_buf_indexof_value_byteoffset) and Buffer#lastIndexOf introduced in NodeJS 4.0. + +## Example + +```js +require("buffer-indexof-polyfill"); + +new Buffer("buffer").indexOf("uff") // return 1 +new Buffer("buffer").indexOf("abc") // return -1 +``` + +## Installation + +```bash +npm install buffer-indexof-polyfill +``` + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/buffer-indexof-polyfill.svg +[npm-url]: https://npmjs.org/package/buffer-indexof-polyfill +[downloads-image]: https://img.shields.io/npm/dm/buffer-indexof-polyfill.svg +[downloads-url]: https://npmjs.org/package/buffer-indexof-polyfill +[travis-image]: https://travis-ci.org/sarosia/buffer-indexof-polyfill.svg?branch=master +[travis-url]: https://travis-ci.org/sarosia/buffer-indexof-polyfill diff --git a/node_backend/node_modules/buffer-indexof-polyfill/index.js b/node_backend/node_modules/buffer-indexof-polyfill/index.js new file mode 100644 index 0000000000000000000000000000000000000000..258adf0cdf82352d7998d64f689631ffe426edad --- /dev/null +++ b/node_backend/node_modules/buffer-indexof-polyfill/index.js @@ -0,0 +1,73 @@ +"use strict"; +var initBuffer = require("./init-buffer"); + +if (!Buffer.prototype.indexOf) { + Buffer.prototype.indexOf = function (value, offset) { + offset = offset || 0; + + // Always wrap the input as a Buffer so that this method will support any + // data type such as array octet, string or buffer. + if (typeof value === "string" || value instanceof String) { + value = initBuffer(value); + } else if (typeof value === "number" || value instanceof Number) { + value = initBuffer([ value ]); + } + + var len = value.length; + + for (var i = offset; i <= this.length - len; i++) { + var mismatch = false; + for (var j = 0; j < len; j++) { + if (this[i + j] != value[j]) { + mismatch = true; + break; + } + } + + if (!mismatch) { + return i; + } + } + + return -1; + }; +} + +function bufferLastIndexOf (value, offset) { + + // Always wrap the input as a Buffer so that this method will support any + // data type such as array octet, string or buffer. + if (typeof value === "string" || value instanceof String) { + value = initBuffer(value); + } else if (typeof value === "number" || value instanceof Number) { + value = initBuffer([ value ]); + } + + var len = value.length; + offset = offset || this.length - len; + + for (var i = offset; i >= 0; i--) { + var mismatch = false; + for (var j = 0; j < len; j++) { + if (this[i + j] != value[j]) { + mismatch = true; + break; + } + } + + if (!mismatch) { + return i; + } + } + + return -1; +} + + +if (Buffer.prototype.lastIndexOf) { + // check Buffer#lastIndexOf is usable: https://github.com/nodejs/node/issues/4604 + if (initBuffer("ABC").lastIndexOf ("ABC") === -1) + Buffer.prototype.lastIndexOf = bufferLastIndexOf; +} else { + Buffer.prototype.lastIndexOf = bufferLastIndexOf; +} diff --git a/node_backend/node_modules/buffer-indexof-polyfill/init-buffer.js b/node_backend/node_modules/buffer-indexof-polyfill/init-buffer.js new file mode 100644 index 0000000000000000000000000000000000000000..a372fa71fc24693125e19f788afcbbfaea16c990 --- /dev/null +++ b/node_backend/node_modules/buffer-indexof-polyfill/init-buffer.js @@ -0,0 +1,8 @@ +module.exports = function initBuffer(val) { + // assume old version + var nodeVersion = process && process.version ? process.version : "v5.0.0"; + var major = nodeVersion.split(".")[0].replace("v", ""); + return major < 6 + ? new Buffer(val) + : Buffer.from(val); +}; \ No newline at end of file diff --git a/node_backend/node_modules/buffer-indexof-polyfill/package.json b/node_backend/node_modules/buffer-indexof-polyfill/package.json new file mode 100644 index 0000000000000000000000000000000000000000..6533ba2eecd32099aacc217c43b7eb85f00768d1 --- /dev/null +++ b/node_backend/node_modules/buffer-indexof-polyfill/package.json @@ -0,0 +1,34 @@ +{ + "name": "buffer-indexof-polyfill", + "version": "1.0.2", + "description": "This is a polyfill for Buffer#indexOf introduced in NodeJS 4.0.", + "main": "index.js", + "scripts": { + "test": "mocha", + "lint": "eslint .", + "fix": "eslint . --fix" + }, + "author": "https://github.com/sarosia", + "license": "MIT", + "engines": { + "node": ">=0.10" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sarosia/buffer-indexof-polyfill.git" + }, + "devDependencies": { + "chai": "^3.3.0", + "eslint": "^1.10.3", + "mocha": "^2.3.3" + }, + "keywords": [ + "buffer", + "indexof", + "polyfill" + ], + "bugs": { + "url": "https://github.com/sarosia/buffer-indexof-polyfill/issues" + }, + "homepage": "https://github.com/sarosia/buffer-indexof-polyfill#readme" +} diff --git a/node_backend/node_modules/buffer-indexof-polyfill/test/indexof.js b/node_backend/node_modules/buffer-indexof-polyfill/test/indexof.js new file mode 100644 index 0000000000000000000000000000000000000000..c96aaa2302c3bd20487a47260f5dcaa1404ba8e7 --- /dev/null +++ b/node_backend/node_modules/buffer-indexof-polyfill/test/indexof.js @@ -0,0 +1,128 @@ +"use strict"; + +var expect = require("chai").expect; +var initBuffer = require("../init-buffer"); + +require("../index.js"); + +describe("Buffer#indexOf", function () { + + it("Buffer as value", function () { + var buffer = initBuffer("ABC"); + + expect(buffer.indexOf(initBuffer("ABC"))).to.be.equal(0); + expect(buffer.indexOf(initBuffer("AB"))).to.be.equal(0); + expect(buffer.indexOf(initBuffer("BC"))).to.be.equal(1); + expect(buffer.indexOf(initBuffer("C"))).to.be.equal(2); + expect(buffer.indexOf(initBuffer("CC"))).to.be.equal(-1); + expect(buffer.indexOf(initBuffer("CA"))).to.be.equal(-1); + + expect(buffer.indexOf(initBuffer("ABC"), 1)).to.be.equal(-1); + expect(buffer.indexOf(initBuffer("AB"), 1)).to.be.equal(-1); + expect(buffer.indexOf(initBuffer("BC"), 1)).to.be.equal(1); + expect(buffer.indexOf(initBuffer("C"), 1)).to.be.equal(2); + expect(buffer.indexOf(initBuffer("CC"), 1)).to.be.equal(-1); + expect(buffer.indexOf(initBuffer("CA"), 1)).to.be.equal(-1); + }); + + it("String as value", function () { + var buffer = initBuffer("ABC"); + expect(buffer.indexOf("ABC")).to.be.equal(0); + expect(buffer.indexOf("AB")).to.be.equal(0); + expect(buffer.indexOf("BC")).to.be.equal(1); + expect(buffer.indexOf("C")).to.be.equal(2); + expect(buffer.indexOf("CC")).to.be.equal(-1); + expect(buffer.indexOf("CA")).to.be.equal(-1); + + expect(buffer.indexOf("ABC", 1)).to.be.equal(-1); + expect(buffer.indexOf("AB", 1)).to.be.equal(-1); + expect(buffer.indexOf("BC", 1)).to.be.equal(1); + expect(buffer.indexOf("C", 1)).to.be.equal(2); + expect(buffer.indexOf("CC", 1)).to.be.equal(-1); + expect(buffer.indexOf("CA", 1)).to.be.equal(-1); + }); + + it("Number as value", function () { + var buffer = initBuffer([ 1, 2, 3 ]); + expect(buffer.indexOf(1)).to.be.equal(0); + expect(buffer.indexOf(2)).to.be.equal(1); + expect(buffer.indexOf(3)).to.be.equal(2); + expect(buffer.indexOf(4)).to.be.equal(-1); + + expect(buffer.indexOf(1, 1)).to.be.equal(-1); + expect(buffer.indexOf(2, 1)).to.be.equal(1); + expect(buffer.indexOf(3, 1)).to.be.equal(2); + expect(buffer.indexOf(4, 1)).to.be.equal(-1); + }); +}); + +describe("Buffer#lastIndexOf", function () { + + it("Buffer as value", function () { + var buffer = initBuffer("ABCABC"); + + expect(buffer.lastIndexOf(initBuffer("ABC"))).to.be.equal(3); + expect(buffer.lastIndexOf(initBuffer("AB"))).to.be.equal(3); + expect(buffer.lastIndexOf(initBuffer("BC"))).to.be.equal(4); + expect(buffer.lastIndexOf(initBuffer("C"))).to.be.equal(5); + expect(buffer.lastIndexOf(initBuffer("CC"))).to.be.equal(-1); + expect(buffer.lastIndexOf(initBuffer("CA"))).to.be.equal(2); + + expect(buffer.lastIndexOf(initBuffer("ABC"), 1)).to.be.equal(0); + expect(buffer.lastIndexOf(initBuffer("AB"), 1)).to.be.equal(0); + expect(buffer.lastIndexOf(initBuffer("BC"), 1)).to.be.equal(1); + expect(buffer.lastIndexOf(initBuffer("C"), 1)).to.be.equal(-1); + expect(buffer.lastIndexOf(initBuffer("CC"), 1)).to.be.equal(-1); + expect(buffer.lastIndexOf(initBuffer("CA"), 1)).to.be.equal(-1); + }); + + it("String as value", function () { + var buffer = initBuffer("ABCABC"); + + expect(buffer.lastIndexOf("ABC")).to.be.equal(3); + expect(buffer.lastIndexOf("AB")).to.be.equal(3); + expect(buffer.lastIndexOf("BC")).to.be.equal(4); + expect(buffer.lastIndexOf("C")).to.be.equal(5); + expect(buffer.lastIndexOf("CC")).to.be.equal(-1); + expect(buffer.lastIndexOf("CA")).to.be.equal(2); + + expect(buffer.lastIndexOf("ABC", 1)).to.be.equal(0); + expect(buffer.lastIndexOf("AB", 1)).to.be.equal(0); + expect(buffer.lastIndexOf("BC", 1)).to.be.equal(1); + expect(buffer.lastIndexOf("C", 1)).to.be.equal(-1); + expect(buffer.lastIndexOf("CC", 1)).to.be.equal(-1); + expect(buffer.lastIndexOf("CA", 1)).to.be.equal(-1); + + // make sure it works predictable + buffer = buffer.toString(); + + expect(buffer.lastIndexOf("ABC")).to.be.equal(3); + expect(buffer.lastIndexOf("AB")).to.be.equal(3); + expect(buffer.lastIndexOf("BC")).to.be.equal(4); + expect(buffer.lastIndexOf("C")).to.be.equal(5); + expect(buffer.lastIndexOf("CC")).to.be.equal(-1); + expect(buffer.lastIndexOf("CA")).to.be.equal(2); + + expect(buffer.lastIndexOf("ABC", 1)).to.be.equal(0); + expect(buffer.lastIndexOf("AB", 1)).to.be.equal(0); + expect(buffer.lastIndexOf("BC", 1)).to.be.equal(1); + expect(buffer.lastIndexOf("C", 1)).to.be.equal(-1); + expect(buffer.lastIndexOf("CC", 1)).to.be.equal(-1); + expect(buffer.lastIndexOf("CA", 1)).to.be.equal(-1); + + }); + + it("Number as value", function () { + var buffer = initBuffer([ 1, 2, 3, 1, 2, 3]); + + expect(buffer.lastIndexOf(1)).to.be.equal(3); + expect(buffer.lastIndexOf(2)).to.be.equal(4); + expect(buffer.lastIndexOf(3)).to.be.equal(5); + expect(buffer.lastIndexOf(4)).to.be.equal(-1); + + expect(buffer.lastIndexOf(1, 1)).to.be.equal(0); + expect(buffer.lastIndexOf(2, 1)).to.be.equal(1); + expect(buffer.lastIndexOf(3, 1)).to.be.equal(-1); + expect(buffer.lastIndexOf(4, 1)).to.be.equal(-1); + }); +}); diff --git a/node_backend/node_modules/buffer/AUTHORS.md b/node_backend/node_modules/buffer/AUTHORS.md new file mode 100644 index 0000000000000000000000000000000000000000..22eb17129e69632091e30ddf3025f40480da711b --- /dev/null +++ b/node_backend/node_modules/buffer/AUTHORS.md @@ -0,0 +1,70 @@ +# Authors + +#### Ordered by first contribution. + +- Romain Beauxis (toots@rastageeks.org) +- Tobias Koppers (tobias.koppers@googlemail.com) +- Janus (ysangkok@gmail.com) +- Rainer Dreyer (rdrey1@gmail.com) +- Tõnis Tiigi (tonistiigi@gmail.com) +- James Halliday (mail@substack.net) +- Michael Williamson (mike@zwobble.org) +- elliottcable (github@elliottcable.name) +- rafael (rvalle@livelens.net) +- Andrew Kelley (superjoe30@gmail.com) +- Andreas Madsen (amwebdk@gmail.com) +- Mike Brevoort (mike.brevoort@pearson.com) +- Brian White (mscdex@mscdex.net) +- Feross Aboukhadijeh (feross@feross.org) +- Ruben Verborgh (ruben@verborgh.org) +- eliang (eliang.cs@gmail.com) +- Jesse Tane (jesse.tane@gmail.com) +- Alfonso Boza (alfonso@cloud.com) +- Mathias Buus (mathiasbuus@gmail.com) +- Devon Govett (devongovett@gmail.com) +- Daniel Cousens (github@dcousens.com) +- Joseph Dykstra (josephdykstra@gmail.com) +- Parsha Pourkhomami (parshap+git@gmail.com) +- Damjan Košir (damjan.kosir@gmail.com) +- daverayment (dave.rayment@gmail.com) +- kawanet (u-suke@kawa.net) +- Linus Unnebäck (linus@folkdatorn.se) +- Nolan Lawson (nolan.lawson@gmail.com) +- Calvin Metcalf (calvin.metcalf@gmail.com) +- Koki Takahashi (hakatasiloving@gmail.com) +- Guy Bedford (guybedford@gmail.com) +- Jan Schär (jscissr@gmail.com) +- RaulTsc (tomescu.raul@gmail.com) +- Matthieu Monsch (monsch@alum.mit.edu) +- Dan Ehrenberg (littledan@chromium.org) +- Kirill Fomichev (fanatid@ya.ru) +- Yusuke Kawasaki (u-suke@kawa.net) +- DC (dcposch@dcpos.ch) +- John-David Dalton (john.david.dalton@gmail.com) +- adventure-yunfei (adventure030@gmail.com) +- Emil Bay (github@tixz.dk) +- Sam Sudar (sudar.sam@gmail.com) +- Volker Mische (volker.mische@gmail.com) +- David Walton (support@geekstocks.com) +- Сковорода Никита Андреевич (chalkerx@gmail.com) +- greenkeeper[bot] (greenkeeper[bot]@users.noreply.github.com) +- ukstv (sergey.ukustov@machinomy.com) +- Renée Kooi (renee@kooi.me) +- ranbochen (ranbochen@qq.com) +- Vladimir Borovik (bobahbdb@gmail.com) +- greenkeeper[bot] (23040076+greenkeeper[bot]@users.noreply.github.com) +- kumavis (aaron@kumavis.me) +- Sergey Ukustov (sergey.ukustov@machinomy.com) +- Fei Liu (liu.feiwood@gmail.com) +- Blaine Bublitz (blaine.bublitz@gmail.com) +- clement (clement@seald.io) +- Koushik Dutta (koushd@gmail.com) +- Jordan Harband (ljharb@gmail.com) +- Niklas Mischkulnig (mischnic@users.noreply.github.com) +- Nikolai Vavilov (vvnicholas@gmail.com) +- Fedor Nezhivoi (gyzerok@users.noreply.github.com) +- Peter Newman (peternewman@users.noreply.github.com) +- mathmakgakpak (44949126+mathmakgakpak@users.noreply.github.com) +- jkkang (jkkang@smartauth.kr) + +#### Generated by bin/update-authors.sh. diff --git a/node_backend/node_modules/buffer/LICENSE b/node_backend/node_modules/buffer/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d6bf75dcf1f6f701d4a8fc502f01f93e9d1284f2 --- /dev/null +++ b/node_backend/node_modules/buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh, and other contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_backend/node_modules/buffer/README.md b/node_backend/node_modules/buffer/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9a23d7cfa3e5505aa18c1e3f4c060c10aed3e300 --- /dev/null +++ b/node_backend/node_modules/buffer/README.md @@ -0,0 +1,410 @@ +# buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/buffer/master.svg +[travis-url]: https://travis-ci.org/feross/buffer +[npm-image]: https://img.shields.io/npm/v/buffer.svg +[npm-url]: https://npmjs.org/package/buffer +[downloads-image]: https://img.shields.io/npm/dm/buffer.svg +[downloads-url]: https://npmjs.org/package/buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### The buffer module from [node.js](https://nodejs.org/), for the browser. + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[saucelabs-image]: https://saucelabs.com/browser-matrix/buffer.svg +[saucelabs-url]: https://saucelabs.com/u/buffer + +With [browserify](http://browserify.org), simply `require('buffer')` or use the `Buffer` global and you will get this module. + +The goal is to provide an API that is 100% identical to +[node's Buffer API](https://nodejs.org/api/buffer.html). Read the +[official docs](https://nodejs.org/api/buffer.html) for the full list of properties, +instance methods, and class methods that are supported. + +## features + +- Manipulate binary data like a boss, in all browsers! +- Super fast. Backed by Typed Arrays (`Uint8Array`/`ArrayBuffer`, not `Object`) +- Extremely small bundle size (**6.75KB minified + gzipped**, 51.9KB with comments) +- Excellent browser support (Chrome, Firefox, Edge, Safari 9+, IE 11, iOS 9+, Android, etc.) +- Preserves Node API exactly, with one minor difference (see below) +- Square-bracket `buf[4]` notation works! +- Does not modify any browser prototypes or put anything on `window` +- Comprehensive test suite (including all buffer tests from node.js core) + +## install + +To use this module directly (without browserify), install it: + +```bash +npm install buffer +``` + +This module was previously called **native-buffer-browserify**, but please use **buffer** +from now on. + +If you do not use a bundler, you can use the [standalone script](https://bundle.run/buffer). + +## usage + +The module's API is identical to node's `Buffer` API. Read the +[official docs](https://nodejs.org/api/buffer.html) for the full list of properties, +instance methods, and class methods that are supported. + +As mentioned above, `require('buffer')` or use the `Buffer` global with +[browserify](http://browserify.org) and this module will automatically be included +in your bundle. Almost any npm module will work in the browser, even if it assumes that +the node `Buffer` API will be available. + +To depend on this module explicitly (without browserify), require it like this: + +```js +var Buffer = require('buffer/').Buffer // note: the trailing slash is important! +``` + +To require this module explicitly, use `require('buffer/')` which tells the node.js module +lookup algorithm (also used by browserify) to use the **npm module** named `buffer` +instead of the **node.js core** module named `buffer`! + + +## how does it work? + +The Buffer constructor returns instances of `Uint8Array` that have their prototype +changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of `Uint8Array`, +so the returned instances will have all the node `Buffer` methods and the +`Uint8Array` methods. Square bracket notation works as expected -- it returns a +single octet. + +The `Uint8Array` prototype remains unmodified. + + +## tracking the latest node api + +This module tracks the Buffer API in the latest (unstable) version of node.js. The Buffer +API is considered **stable** in the +[node stability index](https://nodejs.org/docs/latest/api/documentation.html#documentation_stability_index), +so it is unlikely that there will ever be breaking changes. +Nonetheless, when/if the Buffer API changes in node, this module's API will change +accordingly. + +## related packages + +- [`buffer-reverse`](https://www.npmjs.com/package/buffer-reverse) - Reverse a buffer +- [`buffer-xor`](https://www.npmjs.com/package/buffer-xor) - Bitwise xor a buffer +- [`is-buffer`](https://www.npmjs.com/package/is-buffer) - Determine if an object is a Buffer without including the whole `Buffer` package + +## conversion packages + +### convert typed array to buffer + +Use [`typedarray-to-buffer`](https://www.npmjs.com/package/typedarray-to-buffer) to convert any kind of typed array to a `Buffer`. Does not perform a copy, so it's super fast. + +### convert buffer to typed array + +`Buffer` is a subclass of `Uint8Array` (which is a typed array). So there is no need to explicitly convert to typed array. Just use the buffer as a `Uint8Array`. + +### convert blob to buffer + +Use [`blob-to-buffer`](https://www.npmjs.com/package/blob-to-buffer) to convert a `Blob` to a `Buffer`. + +### convert buffer to blob + +To convert a `Buffer` to a `Blob`, use the `Blob` constructor: + +```js +var blob = new Blob([ buffer ]) +``` + +Optionally, specify a mimetype: + +```js +var blob = new Blob([ buffer ], { type: 'text/html' }) +``` + +### convert arraybuffer to buffer + +To convert an `ArrayBuffer` to a `Buffer`, use the `Buffer.from` function. Does not perform a copy, so it's super fast. + +```js +var buffer = Buffer.from(arrayBuffer) +``` + +### convert buffer to arraybuffer + +To convert a `Buffer` to an `ArrayBuffer`, use the `.buffer` property (which is present on all `Uint8Array` objects): + +```js +var arrayBuffer = buffer.buffer.slice( + buffer.byteOffset, buffer.byteOffset + buffer.byteLength +) +``` + +Alternatively, use the [`to-arraybuffer`](https://www.npmjs.com/package/to-arraybuffer) module. + +## performance + +See perf tests in `/perf`. + +`BrowserBuffer` is the browser `buffer` module (this repo). `Uint8Array` is included as a +sanity check (since `BrowserBuffer` uses `Uint8Array` under the hood, `Uint8Array` will +always be at least a bit faster). Finally, `NodeBuffer` is the node.js buffer module, +which is included to compare against. + +NOTE: Performance has improved since these benchmarks were taken. PR welcome to update the README. + +### Chrome 38 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 11,457,464 ops/sec | ±0.86% | 66 | ✓ | +| Uint8Array#bracket-notation | 10,824,332 ops/sec | ±0.74% | 65 | | +| | | | | +| BrowserBuffer#concat | 450,532 ops/sec | ±0.76% | 68 | | +| Uint8Array#concat | 1,368,911 ops/sec | ±1.50% | 62 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 903,001 ops/sec | ±0.96% | 67 | | +| Uint8Array#copy(16000) | 1,422,441 ops/sec | ±1.04% | 66 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 11,431,358 ops/sec | ±0.46% | 69 | | +| Uint8Array#copy(16) | 13,944,163 ops/sec | ±1.12% | 68 | ✓ | +| | | | | +| BrowserBuffer#new(16000) | 106,329 ops/sec | ±6.70% | 44 | | +| Uint8Array#new(16000) | 131,001 ops/sec | ±2.85% | 31 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 1,554,491 ops/sec | ±1.60% | 65 | | +| Uint8Array#new(16) | 6,623,930 ops/sec | ±1.66% | 65 | ✓ | +| | | | | +| BrowserBuffer#readDoubleBE | 112,830 ops/sec | ±0.51% | 69 | ✓ | +| DataView#getFloat64 | 93,500 ops/sec | ±0.57% | 68 | | +| | | | | +| BrowserBuffer#readFloatBE | 146,678 ops/sec | ±0.95% | 68 | ✓ | +| DataView#getFloat32 | 99,311 ops/sec | ±0.41% | 67 | | +| | | | | +| BrowserBuffer#readUInt32LE | 843,214 ops/sec | ±0.70% | 69 | ✓ | +| DataView#getUint32 | 103,024 ops/sec | ±0.64% | 67 | | +| | | | | +| BrowserBuffer#slice | 1,013,941 ops/sec | ±0.75% | 67 | | +| Uint8Array#subarray | 1,903,928 ops/sec | ±0.53% | 67 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 61,387 ops/sec | ±0.90% | 67 | | +| DataView#setFloat32 | 141,249 ops/sec | ±0.40% | 66 | ✓ | + + +### Firefox 33 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 20,800,421 ops/sec | ±1.84% | 60 | | +| Uint8Array#bracket-notation | 20,826,235 ops/sec | ±2.02% | 61 | ✓ | +| | | | | +| BrowserBuffer#concat | 153,076 ops/sec | ±2.32% | 61 | | +| Uint8Array#concat | 1,255,674 ops/sec | ±8.65% | 52 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 1,105,312 ops/sec | ±1.16% | 63 | | +| Uint8Array#copy(16000) | 1,615,911 ops/sec | ±0.55% | 66 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 16,357,599 ops/sec | ±0.73% | 68 | | +| Uint8Array#copy(16) | 31,436,281 ops/sec | ±1.05% | 68 | ✓ | +| | | | | +| BrowserBuffer#new(16000) | 52,995 ops/sec | ±6.01% | 35 | | +| Uint8Array#new(16000) | 87,686 ops/sec | ±5.68% | 45 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 252,031 ops/sec | ±1.61% | 66 | | +| Uint8Array#new(16) | 8,477,026 ops/sec | ±0.49% | 68 | ✓ | +| | | | | +| BrowserBuffer#readDoubleBE | 99,871 ops/sec | ±0.41% | 69 | | +| DataView#getFloat64 | 285,663 ops/sec | ±0.70% | 68 | ✓ | +| | | | | +| BrowserBuffer#readFloatBE | 115,540 ops/sec | ±0.42% | 69 | | +| DataView#getFloat32 | 288,722 ops/sec | ±0.82% | 68 | ✓ | +| | | | | +| BrowserBuffer#readUInt32LE | 633,926 ops/sec | ±1.08% | 67 | ✓ | +| DataView#getUint32 | 294,808 ops/sec | ±0.79% | 64 | | +| | | | | +| BrowserBuffer#slice | 349,425 ops/sec | ±0.46% | 69 | | +| Uint8Array#subarray | 5,965,819 ops/sec | ±0.60% | 65 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 59,980 ops/sec | ±0.41% | 67 | | +| DataView#setFloat32 | 317,634 ops/sec | ±0.63% | 68 | ✓ | + +### Safari 8 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 10,279,729 ops/sec | ±2.25% | 56 | ✓ | +| Uint8Array#bracket-notation | 10,030,767 ops/sec | ±2.23% | 59 | | +| | | | | +| BrowserBuffer#concat | 144,138 ops/sec | ±1.38% | 65 | | +| Uint8Array#concat | 4,950,764 ops/sec | ±1.70% | 63 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 1,058,548 ops/sec | ±1.51% | 64 | | +| Uint8Array#copy(16000) | 1,409,666 ops/sec | ±1.17% | 65 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 6,282,529 ops/sec | ±1.88% | 58 | | +| Uint8Array#copy(16) | 11,907,128 ops/sec | ±2.87% | 58 | ✓ | +| | | | | +| BrowserBuffer#new(16000) | 101,663 ops/sec | ±3.89% | 57 | | +| Uint8Array#new(16000) | 22,050,818 ops/sec | ±6.51% | 46 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 176,072 ops/sec | ±2.13% | 64 | | +| Uint8Array#new(16) | 24,385,731 ops/sec | ±5.01% | 51 | ✓ | +| | | | | +| BrowserBuffer#readDoubleBE | 41,341 ops/sec | ±1.06% | 67 | | +| DataView#getFloat64 | 322,280 ops/sec | ±0.84% | 68 | ✓ | +| | | | | +| BrowserBuffer#readFloatBE | 46,141 ops/sec | ±1.06% | 65 | | +| DataView#getFloat32 | 337,025 ops/sec | ±0.43% | 69 | ✓ | +| | | | | +| BrowserBuffer#readUInt32LE | 151,551 ops/sec | ±1.02% | 66 | | +| DataView#getUint32 | 308,278 ops/sec | ±0.94% | 67 | ✓ | +| | | | | +| BrowserBuffer#slice | 197,365 ops/sec | ±0.95% | 66 | | +| Uint8Array#subarray | 9,558,024 ops/sec | ±3.08% | 58 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 17,518 ops/sec | ±1.03% | 63 | | +| DataView#setFloat32 | 319,751 ops/sec | ±0.48% | 68 | ✓ | + + +### Node 0.11.14 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 10,489,828 ops/sec | ±3.25% | 90 | | +| Uint8Array#bracket-notation | 10,534,884 ops/sec | ±0.81% | 92 | ✓ | +| NodeBuffer#bracket-notation | 10,389,910 ops/sec | ±0.97% | 87 | | +| | | | | +| BrowserBuffer#concat | 487,830 ops/sec | ±2.58% | 88 | | +| Uint8Array#concat | 1,814,327 ops/sec | ±1.28% | 88 | ✓ | +| NodeBuffer#concat | 1,636,523 ops/sec | ±1.88% | 73 | | +| | | | | +| BrowserBuffer#copy(16000) | 1,073,665 ops/sec | ±0.77% | 90 | | +| Uint8Array#copy(16000) | 1,348,517 ops/sec | ±0.84% | 89 | ✓ | +| NodeBuffer#copy(16000) | 1,289,533 ops/sec | ±0.82% | 93 | | +| | | | | +| BrowserBuffer#copy(16) | 12,782,706 ops/sec | ±0.74% | 85 | | +| Uint8Array#copy(16) | 14,180,427 ops/sec | ±0.93% | 92 | ✓ | +| NodeBuffer#copy(16) | 11,083,134 ops/sec | ±1.06% | 89 | | +| | | | | +| BrowserBuffer#new(16000) | 141,678 ops/sec | ±3.30% | 67 | | +| Uint8Array#new(16000) | 161,491 ops/sec | ±2.96% | 60 | | +| NodeBuffer#new(16000) | 292,699 ops/sec | ±3.20% | 55 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 1,655,466 ops/sec | ±2.41% | 82 | | +| Uint8Array#new(16) | 14,399,926 ops/sec | ±0.91% | 94 | ✓ | +| NodeBuffer#new(16) | 3,894,696 ops/sec | ±0.88% | 92 | | +| | | | | +| BrowserBuffer#readDoubleBE | 109,582 ops/sec | ±0.75% | 93 | ✓ | +| DataView#getFloat64 | 91,235 ops/sec | ±0.81% | 90 | | +| NodeBuffer#readDoubleBE | 88,593 ops/sec | ±0.96% | 81 | | +| | | | | +| BrowserBuffer#readFloatBE | 139,854 ops/sec | ±1.03% | 85 | ✓ | +| DataView#getFloat32 | 98,744 ops/sec | ±0.80% | 89 | | +| NodeBuffer#readFloatBE | 92,769 ops/sec | ±0.94% | 93 | | +| | | | | +| BrowserBuffer#readUInt32LE | 710,861 ops/sec | ±0.82% | 92 | | +| DataView#getUint32 | 117,893 ops/sec | ±0.84% | 91 | | +| NodeBuffer#readUInt32LE | 851,412 ops/sec | ±0.72% | 93 | ✓ | +| | | | | +| BrowserBuffer#slice | 1,673,877 ops/sec | ±0.73% | 94 | | +| Uint8Array#subarray | 6,919,243 ops/sec | ±0.67% | 90 | ✓ | +| NodeBuffer#slice | 4,617,604 ops/sec | ±0.79% | 93 | | +| | | | | +| BrowserBuffer#writeFloatBE | 66,011 ops/sec | ±0.75% | 93 | | +| DataView#setFloat32 | 127,760 ops/sec | ±0.72% | 93 | ✓ | +| NodeBuffer#writeFloatBE | 103,352 ops/sec | ±0.83% | 93 | | + +### iojs 1.8.1 + +| Method | Operations | Accuracy | Sampled | Fastest | +|:-------|:-----------|:---------|:--------|:-------:| +| BrowserBuffer#bracket-notation | 10,990,488 ops/sec | ±1.11% | 91 | | +| Uint8Array#bracket-notation | 11,268,757 ops/sec | ±0.65% | 97 | | +| NodeBuffer#bracket-notation | 11,353,260 ops/sec | ±0.83% | 94 | ✓ | +| | | | | +| BrowserBuffer#concat | 378,954 ops/sec | ±0.74% | 94 | | +| Uint8Array#concat | 1,358,288 ops/sec | ±0.97% | 87 | | +| NodeBuffer#concat | 1,934,050 ops/sec | ±1.11% | 78 | ✓ | +| | | | | +| BrowserBuffer#copy(16000) | 894,538 ops/sec | ±0.56% | 84 | | +| Uint8Array#copy(16000) | 1,442,656 ops/sec | ±0.71% | 96 | | +| NodeBuffer#copy(16000) | 1,457,898 ops/sec | ±0.53% | 92 | ✓ | +| | | | | +| BrowserBuffer#copy(16) | 12,870,457 ops/sec | ±0.67% | 95 | | +| Uint8Array#copy(16) | 16,643,989 ops/sec | ±0.61% | 93 | ✓ | +| NodeBuffer#copy(16) | 14,885,848 ops/sec | ±0.74% | 94 | | +| | | | | +| BrowserBuffer#new(16000) | 109,264 ops/sec | ±4.21% | 63 | | +| Uint8Array#new(16000) | 138,916 ops/sec | ±1.87% | 61 | | +| NodeBuffer#new(16000) | 281,449 ops/sec | ±3.58% | 51 | ✓ | +| | | | | +| BrowserBuffer#new(16) | 1,362,935 ops/sec | ±0.56% | 99 | | +| Uint8Array#new(16) | 6,193,090 ops/sec | ±0.64% | 95 | ✓ | +| NodeBuffer#new(16) | 4,745,425 ops/sec | ±1.56% | 90 | | +| | | | | +| BrowserBuffer#readDoubleBE | 118,127 ops/sec | ±0.59% | 93 | ✓ | +| DataView#getFloat64 | 107,332 ops/sec | ±0.65% | 91 | | +| NodeBuffer#readDoubleBE | 116,274 ops/sec | ±0.94% | 95 | | +| | | | | +| BrowserBuffer#readFloatBE | 150,326 ops/sec | ±0.58% | 95 | ✓ | +| DataView#getFloat32 | 110,541 ops/sec | ±0.57% | 98 | | +| NodeBuffer#readFloatBE | 121,599 ops/sec | ±0.60% | 87 | | +| | | | | +| BrowserBuffer#readUInt32LE | 814,147 ops/sec | ±0.62% | 93 | | +| DataView#getUint32 | 137,592 ops/sec | ±0.64% | 90 | | +| NodeBuffer#readUInt32LE | 931,650 ops/sec | ±0.71% | 96 | ✓ | +| | | | | +| BrowserBuffer#slice | 878,590 ops/sec | ±0.68% | 93 | | +| Uint8Array#subarray | 2,843,308 ops/sec | ±1.02% | 90 | | +| NodeBuffer#slice | 4,998,316 ops/sec | ±0.68% | 90 | ✓ | +| | | | | +| BrowserBuffer#writeFloatBE | 65,927 ops/sec | ±0.74% | 93 | | +| DataView#setFloat32 | 139,823 ops/sec | ±0.97% | 89 | ✓ | +| NodeBuffer#writeFloatBE | 135,763 ops/sec | ±0.65% | 96 | | +| | | | | + +## Testing the project + +First, install the project: + + npm install + +Then, to run tests in Node.js, run: + + npm run test-node + +To test locally in a browser, you can run: + + npm run test-browser-es5-local # For ES5 browsers that don't support ES6 + npm run test-browser-es6-local # For ES6 compliant browsers + +This will print out a URL that you can then open in a browser to run the tests, using [airtap](https://www.npmjs.com/package/airtap). + +To run automated browser tests using Saucelabs, ensure that your `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables are set, then run: + + npm test + +This is what's run in Travis, to check against various browsers. The list of browsers is kept in the `bin/airtap-es5.yml` and `bin/airtap-es6.yml` files. + +## JavaScript Standard Style + +This module uses [JavaScript Standard Style](https://github.com/feross/standard). + +[![JavaScript Style Guide](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) + +To test that the code conforms to the style, `npm install` and run: + + ./node_modules/.bin/standard + +## credit + +This was originally forked from [buffer-browserify](https://github.com/toots/buffer-browserify). + +## Security Policies and Procedures + +The `buffer` team and community take all security bugs in `buffer` seriously. Please see our [security policies and procedures](https://github.com/feross/security) document to learn how to report issues. + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org), and other contributors. Originally forked from an MIT-licensed module by Romain Beauxis. diff --git a/node_backend/node_modules/buffer/index.d.ts b/node_backend/node_modules/buffer/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5d1a804e5a8465592fec8686337022a65cb2586d --- /dev/null +++ b/node_backend/node_modules/buffer/index.d.ts @@ -0,0 +1,186 @@ +export class Buffer extends Uint8Array { + length: number + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + reverse(): this; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + constructor (str: string, encoding?: string); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + constructor (size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + constructor (arrayBuffer: ArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: any[]); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + constructor (buffer: Buffer); + prototype: Buffer; + /** + * Allocates a new Buffer using an {array} of octets. + * + * @param array + */ + static from(array: any[]): Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() + * @param byteOffset + * @param length + */ + static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Copies the passed {buffer} data onto a new Buffer instance. + * + * @param buffer + */ + static from(buffer: Buffer | Uint8Array): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + * + * @param str + */ + static from(str: string, encoding?: string): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Buffer, buf2: Buffer): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initializing + */ + static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; +} diff --git a/node_backend/node_modules/buffer/index.js b/node_backend/node_modules/buffer/index.js new file mode 100644 index 0000000000000000000000000000000000000000..609cf3113940d6811fd9798e27e483e460ff6761 --- /dev/null +++ b/node_backend/node_modules/buffer/index.js @@ -0,0 +1,1817 @@ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation + ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +var K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1) + var proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayView(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof SharedArrayBuffer !== 'undefined' && + (isInstance(value, SharedArrayBuffer) || + (value && isInstance(value.buffer, SharedArrayBuffer)))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + var valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + var b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from( + value[Symbol.toPrimitive]('string'), encodingOrOffset, length + ) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpreted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + var length = byteLength(string, encoding) | 0 + var buf = createBuffer(length) + + var actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + var buf = createBuffer(length) + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayView (arrayView) { + if (isInstance(arrayView, Uint8Array)) { + var copy = new Uint8Array(arrayView) + return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength) + } + return fromArrayLike(arrayView) +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + var buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + var buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (isInstance(buf, Uint8Array)) { + if (pos + buf.length > buffer.length) { + Buffer.from(buf).copy(buffer, pos) + } else { + Uint8Array.prototype.set.call( + buffer, + buf, + pos + ) + } + } else if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } else { + buf.copy(buffer, pos) + } + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + var len = string.length + var mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coercion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + var length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + var strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + case 'latin1': + case 'binary': + return asciiWrite(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) + ? 4 + : (firstByte > 0xDF) + ? 3 + : (firstByte > 0xBF) + ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) + for (var i = 0; i < bytes.length - 1; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUintLE = +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUintBE = +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUint8 = +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUint16LE = +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUint16BE = +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUint32LE = +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUint32BE = +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUintLE = +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUintBE = +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUint8 = +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUint16LE = +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUint16BE = +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUint32LE = +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUint32BE = +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + var len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +var hexSliceLookupTable = (function () { + var alphabet = '0123456789abcdef' + var table = new Array(256) + for (var i = 0; i < 16; ++i) { + var i16 = i * 16 + for (var j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() diff --git a/node_backend/node_modules/buffer/package.json b/node_backend/node_modules/buffer/package.json new file mode 100644 index 0000000000000000000000000000000000000000..3b1b4986f8b9937818753fe0560d4cc5c15e7f23 --- /dev/null +++ b/node_backend/node_modules/buffer/package.json @@ -0,0 +1,96 @@ +{ + "name": "buffer", + "description": "Node.js Buffer API, for the browser", + "version": "5.7.1", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/buffer/issues" + }, + "contributors": [ + "Romain Beauxis ", + "James Halliday " + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + }, + "devDependencies": { + "airtap": "^3.0.0", + "benchmark": "^2.1.4", + "browserify": "^17.0.0", + "concat-stream": "^2.0.0", + "hyperquest": "^2.1.3", + "is-buffer": "^2.0.4", + "is-nan": "^1.3.0", + "split": "^1.0.1", + "standard": "*", + "tape": "^5.0.1", + "through2": "^4.0.2", + "uglify-js": "^3.11.3" + }, + "homepage": "https://github.com/feross/buffer", + "jspm": { + "map": { + "./index.js": { + "node": "@node/buffer" + } + } + }, + "keywords": [ + "arraybuffer", + "browser", + "browserify", + "buffer", + "compatible", + "dataview", + "uint8array" + ], + "license": "MIT", + "main": "index.js", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "git://github.com/feross/buffer.git" + }, + "scripts": { + "perf": "browserify --debug perf/bracket-notation.js > perf/bundle.js && open perf/index.html", + "perf-node": "node perf/bracket-notation.js && node perf/concat.js && node perf/copy-big.js && node perf/copy.js && node perf/new-big.js && node perf/new.js && node perf/readDoubleBE.js && node perf/readFloatBE.js && node perf/readUInt32LE.js && node perf/slice.js && node perf/writeFloatBE.js", + "size": "browserify -r ./ | uglifyjs -c -m | gzip | wc -c", + "test": "standard && node ./bin/test.js", + "test-browser-es5": "airtap -- test/*.js", + "test-browser-es5-local": "airtap --local -- test/*.js", + "test-browser-es6": "airtap -- test/*.js test/node/*.js", + "test-browser-es6-local": "airtap --local -- test/*.js test/node/*.js", + "test-node": "tape test/*.js test/node/*.js", + "update-authors": "./bin/update-authors.sh" + }, + "standard": { + "ignore": [ + "test/node/**/*.js", + "test/common.js", + "test/_polyfill.js", + "perf/**/*.js" + ], + "globals": [ + "SharedArrayBuffer" + ] + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] +} diff --git a/node_backend/node_modules/buffers/README.markdown b/node_backend/node_modules/buffers/README.markdown new file mode 100644 index 0000000000000000000000000000000000000000..73a18a41e641dcbdc949fbc377dbc60011290efb --- /dev/null +++ b/node_backend/node_modules/buffers/README.markdown @@ -0,0 +1,122 @@ +buffers +======= + +Treat a collection of Buffers as a single contiguous partially mutable Buffer. + +Where possible, operations execute without creating a new Buffer and copying +everything over. + +This is a cleaner more Buffery rehash of +[bufferlist](http://github.com/substack/node-bufferlist). + +example +======= + +slice +----- + + var Buffers = require('buffers'); + var bufs = Buffers(); + bufs.push(new Buffer([1,2,3])); + bufs.push(new Buffer([4,5,6,7])); + bufs.push(new Buffer([8,9,10])); + + console.dir(bufs.slice(2,8)) + +output: + + $ node examples/slice.js + + +splice +------ + + var Buffers = require('buffers'); + var bufs = Buffers([ + new Buffer([1,2,3]), + new Buffer([4,5,6,7]), + new Buffer([8,9,10]), + ]); + + var removed = bufs.splice(2, 4); + console.dir({ + removed : removed.slice(), + bufs : bufs.slice(), + }); + +output: + + $ node examples/splice.js + { removed: , + bufs: } + +methods +======= + +Buffers(buffers) +---------------- + +Create a Buffers with an array of `Buffer`s if specified, else `[]`. + +.push(buf1, buf2...) +-------------------- + +Push buffers onto the end. Just like `Array.prototype.push`. + +.unshift(buf1, buf2...) +----------------------- + +Unshift buffers onto the head. Just like `Array.prototype.unshift`. + +.slice(i, j) +------------ + +Slice a range out of the buffer collection as if it were contiguous. +Works just like the `Array.prototype.slice` version. + +.splice(i, howMany, replacements) +--------------------------------- + +Splice the buffer collection as if it were contiguous. +Works just like `Array.prototype.splice`, even the replacement part! + +.copy(dst, dstStart, start, end) +-------------------------------- + +Copy the buffer collection as if it were contiguous to the `dst` Buffer with the +specified bounds. +Works just like `Buffer.prototype.copy`. + +.get(i) +------- + +Get a single element at index `i`. + +.set(i, x) +---------- + +Set a single element's value at index `i`. + +.indexOf(needle, offset) +---------- + +Find a string or buffer `needle` inside the buffer collection. Returns +the position of the search string or -1 if the search string was not +found. + +Provide an `offset` to skip that number of characters at the beginning +of the search. This can be used to find additional matches. + +This function will return the correct result even if the search string +is spread out over multiple internal buffers. + +.toBuffer() +----------- + +Convert the buffer collection to a single buffer, equivalent with `.slice(0, buffers.length)`; + +.toString(encoding, start, end) +----------- + +Decodes and returns a string from the buffer collection. +Works just like `Buffer.prototype.toString` diff --git a/node_backend/node_modules/buffers/examples/slice.js b/node_backend/node_modules/buffers/examples/slice.js new file mode 100644 index 0000000000000000000000000000000000000000..0bea38c98af499387ebe46443615a50a7181fa55 --- /dev/null +++ b/node_backend/node_modules/buffers/examples/slice.js @@ -0,0 +1,9 @@ +var Buffers = require('buffers'); +var bufs = Buffers(); +bufs.push(new Buffer([1,2,3])); +bufs.push(new Buffer([4,5,6,7])); +bufs.push(new Buffer([8,9,10])); + +console.dir(bufs.slice(2,8)) + +// Output: diff --git a/node_backend/node_modules/buffers/examples/splice.js b/node_backend/node_modules/buffers/examples/splice.js new file mode 100644 index 0000000000000000000000000000000000000000..56a17518906e97b1f7a47369ac703c81a4ed8c30 --- /dev/null +++ b/node_backend/node_modules/buffers/examples/splice.js @@ -0,0 +1,17 @@ +var Buffers = require('buffers'); +var bufs = Buffers([ + new Buffer([1,2,3]), + new Buffer([4,5,6,7]), + new Buffer([8,9,10]), +]); + +var removed = bufs.splice(2, 4, new Buffer('ab'), new Buffer('cd')); +console.dir({ + removed : removed.slice(), + bufs : bufs.slice(), +}); + +/* Output: +{ removed: , + bufs: } +*/ diff --git a/node_backend/node_modules/buffers/index.js b/node_backend/node_modules/buffers/index.js new file mode 100644 index 0000000000000000000000000000000000000000..86a9696898b4f9fa85874da1de83cec7298461d5 --- /dev/null +++ b/node_backend/node_modules/buffers/index.js @@ -0,0 +1,269 @@ +module.exports = Buffers; + +function Buffers (bufs) { + if (!(this instanceof Buffers)) return new Buffers(bufs); + this.buffers = bufs || []; + this.length = this.buffers.reduce(function (size, buf) { + return size + buf.length + }, 0); +} + +Buffers.prototype.push = function () { + for (var i = 0; i < arguments.length; i++) { + if (!Buffer.isBuffer(arguments[i])) { + throw new TypeError('Tried to push a non-buffer'); + } + } + + for (var i = 0; i < arguments.length; i++) { + var buf = arguments[i]; + this.buffers.push(buf); + this.length += buf.length; + } + return this.length; +}; + +Buffers.prototype.unshift = function () { + for (var i = 0; i < arguments.length; i++) { + if (!Buffer.isBuffer(arguments[i])) { + throw new TypeError('Tried to unshift a non-buffer'); + } + } + + for (var i = 0; i < arguments.length; i++) { + var buf = arguments[i]; + this.buffers.unshift(buf); + this.length += buf.length; + } + return this.length; +}; + +Buffers.prototype.copy = function (dst, dStart, start, end) { + return this.slice(start, end).copy(dst, dStart, 0, end - start); +}; + +Buffers.prototype.splice = function (i, howMany) { + var buffers = this.buffers; + var index = i >= 0 ? i : this.length - i; + var reps = [].slice.call(arguments, 2); + + if (howMany === undefined) { + howMany = this.length - index; + } + else if (howMany > this.length - index) { + howMany = this.length - index; + } + + for (var i = 0; i < reps.length; i++) { + this.length += reps[i].length; + } + + var removed = new Buffers(); + var bytes = 0; + + var startBytes = 0; + for ( + var ii = 0; + ii < buffers.length && startBytes + buffers[ii].length < index; + ii ++ + ) { startBytes += buffers[ii].length } + + if (index - startBytes > 0) { + var start = index - startBytes; + + if (start + howMany < buffers[ii].length) { + removed.push(buffers[ii].slice(start, start + howMany)); + + var orig = buffers[ii]; + //var buf = new Buffer(orig.length - howMany); + var buf0 = new Buffer(start); + for (var i = 0; i < start; i++) { + buf0[i] = orig[i]; + } + + var buf1 = new Buffer(orig.length - start - howMany); + for (var i = start + howMany; i < orig.length; i++) { + buf1[ i - howMany - start ] = orig[i] + } + + if (reps.length > 0) { + var reps_ = reps.slice(); + reps_.unshift(buf0); + reps_.push(buf1); + buffers.splice.apply(buffers, [ ii, 1 ].concat(reps_)); + ii += reps_.length; + reps = []; + } + else { + buffers.splice(ii, 1, buf0, buf1); + //buffers[ii] = buf; + ii += 2; + } + } + else { + removed.push(buffers[ii].slice(start)); + buffers[ii] = buffers[ii].slice(0, start); + ii ++; + } + } + + if (reps.length > 0) { + buffers.splice.apply(buffers, [ ii, 0 ].concat(reps)); + ii += reps.length; + } + + while (removed.length < howMany) { + var buf = buffers[ii]; + var len = buf.length; + var take = Math.min(len, howMany - removed.length); + + if (take === len) { + removed.push(buf); + buffers.splice(ii, 1); + } + else { + removed.push(buf.slice(0, take)); + buffers[ii] = buffers[ii].slice(take); + } + } + + this.length -= removed.length; + + return removed; +}; + +Buffers.prototype.slice = function (i, j) { + var buffers = this.buffers; + if (j === undefined) j = this.length; + if (i === undefined) i = 0; + + if (j > this.length) j = this.length; + + var startBytes = 0; + for ( + var si = 0; + si < buffers.length && startBytes + buffers[si].length <= i; + si ++ + ) { startBytes += buffers[si].length } + + var target = new Buffer(j - i); + + var ti = 0; + for (var ii = si; ti < j - i && ii < buffers.length; ii++) { + var len = buffers[ii].length; + + var start = ti === 0 ? i - startBytes : 0; + var end = ti + len >= j - i + ? Math.min(start + (j - i) - ti, len) + : len + ; + + buffers[ii].copy(target, ti, start, end); + ti += end - start; + } + + return target; +}; + +Buffers.prototype.pos = function (i) { + if (i < 0 || i >= this.length) throw new Error('oob'); + var l = i, bi = 0, bu = null; + for (;;) { + bu = this.buffers[bi]; + if (l < bu.length) { + return {buf: bi, offset: l}; + } else { + l -= bu.length; + } + bi++; + } +}; + +Buffers.prototype.get = function get (i) { + var pos = this.pos(i); + + return this.buffers[pos.buf].get(pos.offset); +}; + +Buffers.prototype.set = function set (i, b) { + var pos = this.pos(i); + + return this.buffers[pos.buf].set(pos.offset, b); +}; + +Buffers.prototype.indexOf = function (needle, offset) { + if ("string" === typeof needle) { + needle = new Buffer(needle); + } else if (needle instanceof Buffer) { + // already a buffer + } else { + throw new Error('Invalid type for a search string'); + } + + if (!needle.length) { + return 0; + } + + if (!this.length) { + return -1; + } + + var i = 0, j = 0, match = 0, mstart, pos = 0; + + // start search from a particular point in the virtual buffer + if (offset) { + var p = this.pos(offset); + i = p.buf; + j = p.offset; + pos = offset; + } + + // for each character in virtual buffer + for (;;) { + while (j >= this.buffers[i].length) { + j = 0; + i++; + + if (i >= this.buffers.length) { + // search string not found + return -1; + } + } + + var char = this.buffers[i][j]; + + if (char == needle[match]) { + // keep track where match started + if (match == 0) { + mstart = { + i: i, + j: j, + pos: pos + }; + } + match++; + if (match == needle.length) { + // full match + return mstart.pos; + } + } else if (match != 0) { + // a partial match ended, go back to match starting position + // this will continue the search at the next character + i = mstart.i; + j = mstart.j; + pos = mstart.pos; + match = 0; + } + + j++; + pos++; + } +}; + +Buffers.prototype.toBuffer = function() { + return this.slice(); +} + +Buffers.prototype.toString = function(encoding, start, end) { + return this.slice(start, end).toString(encoding); +} diff --git a/node_backend/node_modules/buffers/package.json b/node_backend/node_modules/buffers/package.json new file mode 100644 index 0000000000000000000000000000000000000000..0e5d23cf0119f54bacc83103f95ec5318f6890fe --- /dev/null +++ b/node_backend/node_modules/buffers/package.json @@ -0,0 +1,14 @@ +{ + "name" : "buffers", + "description" : "Treat a collection of Buffers as a single contiguous partially mutable Buffer.", + "version" : "0.1.1", + "repository" : "http://github.com/substack/node-buffers.git", + "author" : "James Halliday (http://substack.net)", + "main" : "./index", + "scripts" : { + "test" : "expresso" + }, + "engines" : { + "node" : ">=0.2.0" + } +} diff --git a/node_backend/node_modules/buffers/test/buffers.js b/node_backend/node_modules/buffers/test/buffers.js new file mode 100644 index 0000000000000000000000000000000000000000..0c2406614c441a34ba08c77956a907ccc607ad52 --- /dev/null +++ b/node_backend/node_modules/buffers/test/buffers.js @@ -0,0 +1,209 @@ +var assert = require('assert'); +var Buffers = require('../'); + +function create (xs, split) { + var bufs = Buffers(); + var offset = 0; + split.forEach(function (i) { + bufs.push(new Buffer(xs.slice(offset, offset + i))); + offset += i; + }); + return bufs; +} + +exports.slice = function () { + var xs = [0,1,2,3,4,5,6,7,8,9]; + var splits = [ [4,2,3,1], [2,2,2,2,2], [1,6,3,1], [9,2], [10], [5,5] ]; + + splits.forEach(function (split) { + var bufs = create(xs, split); + assert.eql(new Buffer(xs), bufs.slice(), + '[' + xs.join(',') + ']' + + ' != ' + + '[' + [].join.call(bufs.slice(), ',') + ']' + ); + + for (var i = 0; i < xs.length; i++) { + for (var j = i; j < xs.length; j++) { + var a = bufs.slice(i,j); + var b = new Buffer(xs.slice(i,j)); + + assert.eql(a, b, + '[' + [].join.call(a, ',') + ']' + + ' != ' + + '[' + [].join.call(b, ',') + ']' + ); + } + } + }); +}; + +exports.splice = function () { + var xs = [0,1,2,3,4,5,6,7,8,9]; + var splits = [ [4,2,3,1], [2,2,2,2,2], [1,6,3,1], [9,2], [10], [5,5] ]; + + splits.forEach(function (split) { + for (var i = 0; i < xs.length; i++) { + for (var j = i; j < xs.length; j++) { + var bufs = create(xs, split); + var xs_ = xs.slice(); + + var a_ = bufs.splice(i,j); + var a = [].slice.call(a_.slice()); + var b = xs_.splice(i,j); + assert.eql(a, b, + '[' + a.join(',') + ']' + + ' != ' + + '[' + b.join(',') + ']' + ); + + assert.eql(bufs.slice(), new Buffer(xs_), + '[' + [].join.call(bufs.slice(), ',') + ']' + + ' != ' + + '[' + [].join.call(xs_, ',') + ']' + ); + } + } + }); +}; + +exports.spliceRep = function () { + var xs = [0,1,2,3,4,5,6,7,8,9]; + var splits = [ [4,2,3,1], [2,2,2,2,2], [1,6,3,1], [9,2], [10], [5,5] ]; + var reps = [ [], [1], [5,6], [3,1,3,3,7], [9,8,7,6,5,4,3,2,1,2,3,4,5] ]; + + splits.forEach(function (split) { + reps.forEach(function (rep) { + for (var i = 0; i < xs.length; i++) { + for (var j = i; j < xs.length; j++) { + var bufs = create(xs, split); + var xs_ = xs.slice(); + + var a_ = bufs.splice.apply( + bufs, [ i, j ].concat(new Buffer(rep)) + ); + var a = [].slice.call(a_.slice()); + var b = xs_.splice.apply(xs_, [ i, j ].concat(rep)); + + assert.eql(a, b, + '[' + a.join(',') + ']' + + ' != ' + + '[' + b.join(',') + ']' + ); + + assert.eql(bufs.slice(), new Buffer(xs_), + '[' + [].join.call(bufs.slice(), ',') + ']' + + ' != ' + + '[' + [].join.call(xs_, ',') + ']' + ); + } + } + }); + }); +}; + +exports.copy = function () { + var xs = [0,1,2,3,4,5,6,7,8,9]; + var splits = [ [4,2,3,1], [2,2,2,2,2], [1,6,3,1], [9,2], [10], [5,5] ]; + + splits.forEach(function (split) { + var bufs = create(xs, split); + var buf = new Buffer(xs); + + for (var i = 0; i < xs.length; i++) { + for (var j = i; j < xs.length; j++) { + var t0 = new Buffer(j - i); + var t1 = new Buffer(j - i); + + assert.eql( + bufs.copy(t0, 0, i, j), + buf.copy(t1, 0, i, j) + ); + + assert.eql( + [].slice.call(t0), + [].slice.call(t1) + ); + } + } + }); +}; + +exports.push = function () { + var bufs = Buffers(); + bufs.push(new Buffer([0])); + bufs.push(new Buffer([1,2,3])); + bufs.push(new Buffer([4,5])); + bufs.push(new Buffer([6,7,8,9])); + assert.eql( + [].slice.call(bufs.slice()), + [0,1,2,3,4,5,6,7,8,9] + ); + + assert.throws(function () { + bufs.push(new Buffer([11,12]), 'moo'); + }); + assert.eql(bufs.buffers.length, 4); +}; + +exports.unshift = function () { + var bufs = Buffers(); + bufs.unshift(new Buffer([6,7,8,9])); + bufs.unshift(new Buffer([4,5])); + bufs.unshift(new Buffer([1,2,3])); + bufs.unshift(new Buffer([0])); + assert.eql( + [].slice.call(bufs.slice()), + [0,1,2,3,4,5,6,7,8,9] + ); + assert.throws(function () { + bufs.unshift(new Buffer([-2,-1]), 'moo'); + }); + assert.eql(bufs.buffers.length, 4); +}; + +exports.get = function () { + var bufs = Buffers(); + bufs.unshift(new Buffer([6,7,8,9])); + bufs.unshift(new Buffer([4,5])); + bufs.unshift(new Buffer([1,2,3])); + bufs.unshift(new Buffer([0])); + assert.eql( bufs.get(0), 0 ); + assert.eql( bufs.get(1), 1 ); + assert.eql( bufs.get(2), 2 ); + assert.eql( bufs.get(3), 3 ); + assert.eql( bufs.get(4), 4 ); + assert.eql( bufs.get(5), 5 ); + assert.eql( bufs.get(6), 6 ); + assert.eql( bufs.get(7), 7 ); + assert.eql( bufs.get(8), 8 ); + assert.eql( bufs.get(9), 9 ); +}; + +exports.set = function () { + var bufs = Buffers(); + bufs.push(new Buffer("Hel")); + bufs.push(new Buffer("lo")); + bufs.push(new Buffer("!")); + bufs.set(0, 'h'.charCodeAt(0) ); + bufs.set(3, 'L'.charCodeAt(0) ); + bufs.set(5, '.'.charCodeAt(0) ); + assert.eql( bufs.slice(0).toString(), 'helLo.' ); +}; + +exports.indexOf = function () { + var bufs = Buffers(); + bufs.push(new Buffer("Hel")); + bufs.push(new Buffer("lo,")); + bufs.push(new Buffer(" how are ")); + bufs.push(new Buffer("you")); + bufs.push(new Buffer("?")); + assert.eql( bufs.indexOf("Hello"), 0 ); + assert.eql( bufs.indexOf("Hello", 1), -1 ); + assert.eql( bufs.indexOf("ello"), 1 ); + assert.eql( bufs.indexOf("ello", 1), 1 ); + assert.eql( bufs.indexOf("ello", 2), -1 ); + assert.eql( bufs.indexOf("e"), 1 ); + assert.eql( bufs.indexOf("e", 2), 13 ); + assert.eql( bufs.indexOf(new Buffer([0x65]), 2), 13 ); +}; diff --git a/node_backend/node_modules/chainsaw/.npmignore b/node_backend/node_modules/chainsaw/.npmignore new file mode 100644 index 0000000000000000000000000000000000000000..3c3629e647f5ddf82548912e337bea9826b434af --- /dev/null +++ b/node_backend/node_modules/chainsaw/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_backend/node_modules/chainsaw/README.markdown b/node_backend/node_modules/chainsaw/README.markdown new file mode 100644 index 0000000000000000000000000000000000000000..4721f782955bb0200d495b1f23f7458fd38641e0 --- /dev/null +++ b/node_backend/node_modules/chainsaw/README.markdown @@ -0,0 +1,157 @@ +Chainsaw +======== + +Build chainable fluent interfaces the easy way in node.js. + +With this meta-module you can write modules with chainable interfaces. +Chainsaw takes care of all of the boring details and makes nested flow control +super simple too. + +Just call `Chainsaw` with a constructor function like in the examples below. +In your methods, just do `saw.next()` to move along to the next event and +`saw.nest()` to create a nested chain. + +Examples +======== + +add_do.js +--------- + +This silly example adds values with a chainsaw. + + var Chainsaw = require('chainsaw'); + + function AddDo (sum) { + return Chainsaw(function (saw) { + this.add = function (n) { + sum += n; + saw.next(); + }; + + this.do = function (cb) { + saw.nest(cb, sum); + }; + }); + } + + AddDo(0) + .add(5) + .add(10) + .do(function (sum) { + if (sum > 12) this.add(-10); + }) + .do(function (sum) { + console.log('Sum: ' + sum); + }) + ; + +Output: + Sum: 5 + +prompt.js +--------- + +This example provides a wrapper on top of stdin with the help of +[node-lazy](https://github.com/pkrumins/node-lazy) for line-processing. + + var Chainsaw = require('chainsaw'); + var Lazy = require('lazy'); + + module.exports = Prompt; + function Prompt (stream) { + var waiting = []; + var lines = []; + var lazy = Lazy(stream).lines.map(String) + .forEach(function (line) { + if (waiting.length) { + var w = waiting.shift(); + w(line); + } + else lines.push(line); + }) + ; + + var vars = {}; + return Chainsaw(function (saw) { + this.getline = function (f) { + var g = function (line) { + saw.nest(f, line, vars); + }; + + if (lines.length) g(lines.shift()); + else waiting.push(g); + }; + + this.do = function (cb) { + saw.nest(cb, vars); + }; + }); + } + +And now for the new Prompt() module in action: + + var util = require('util'); + var stdin = process.openStdin(); + + Prompt(stdin) + .do(function () { + util.print('x = '); + }) + .getline(function (line, vars) { + vars.x = parseInt(line, 10); + }) + .do(function () { + util.print('y = '); + }) + .getline(function (line, vars) { + vars.y = parseInt(line, 10); + }) + .do(function (vars) { + if (vars.x + vars.y < 10) { + util.print('z = '); + this.getline(function (line) { + vars.z = parseInt(line, 10); + }) + } + else { + vars.z = 0; + } + }) + .do(function (vars) { + console.log('x + y + z = ' + (vars.x + vars.y + vars.z)); + process.exit(); + }) + ; + +Installation +============ + +With [npm](http://github.com/isaacs/npm), just do: + npm install chainsaw + +or clone this project on github: + + git clone http://github.com/substack/node-chainsaw.git + +To run the tests with [expresso](http://github.com/visionmedia/expresso), +just do: + + expresso + + +Light Mode vs Full Mode +======================= + +`node-chainsaw` supports two different modes. In full mode, every +action is recorded, which allows you to replay actions using the +`jump()`, `trap()` and `down()` methods. + +However, if your chainsaws are long-lived, recording every action can +consume a tremendous amount of memory, so we also offer a "light" mode +where actions are not recorded and the aforementioned methods are +disabled. + +To enable light mode simply use `Chainsaw.light()` to construct your +saw, instead of `Chainsaw()`. + + diff --git a/node_backend/node_modules/chainsaw/examples/add_do.js b/node_backend/node_modules/chainsaw/examples/add_do.js new file mode 100644 index 0000000000000000000000000000000000000000..378705dfbdd78494134b408574b214ed9c11fa5c --- /dev/null +++ b/node_backend/node_modules/chainsaw/examples/add_do.js @@ -0,0 +1,25 @@ +var Chainsaw = require('chainsaw'); + +function AddDo (sum) { + return Chainsaw(function (saw) { + this.add = function (n) { + sum += n; + saw.next(); + }; + + this.do = function (cb) { + saw.nest(cb, sum); + }; + }); +} + +AddDo(0) + .add(5) + .add(10) + .do(function (sum) { + if (sum > 12) this.add(-10); + }) + .do(function (sum) { + console.log('Sum: ' + sum); + }) +; diff --git a/node_backend/node_modules/chainsaw/examples/prompt.js b/node_backend/node_modules/chainsaw/examples/prompt.js new file mode 100644 index 0000000000000000000000000000000000000000..0a06d71c34680f9295604e2daeb30ad9889a2aa9 --- /dev/null +++ b/node_backend/node_modules/chainsaw/examples/prompt.js @@ -0,0 +1,67 @@ +var Chainsaw = require('chainsaw'); +var Lazy = require('lazy'); + +module.exports = Prompt; +function Prompt (stream) { + var waiting = []; + var lines = []; + var lazy = Lazy(stream).lines.map(String) + .forEach(function (line) { + if (waiting.length) { + var w = waiting.shift(); + w(line); + } + else lines.push(line); + }) + ; + + var vars = {}; + return Chainsaw(function (saw) { + this.getline = function (f) { + var g = function (line) { + saw.nest(f, line, vars); + }; + + if (lines.length) g(lines.shift()); + else waiting.push(g); + }; + + this.do = function (cb) { + saw.nest(cb, vars); + }; + }); +} + +var util = require('util'); +if (__filename === process.argv[1]) { + var stdin = process.openStdin(); + Prompt(stdin) + .do(function () { + util.print('x = '); + }) + .getline(function (line, vars) { + vars.x = parseInt(line, 10); + }) + .do(function () { + util.print('y = '); + }) + .getline(function (line, vars) { + vars.y = parseInt(line, 10); + }) + .do(function (vars) { + if (vars.x + vars.y < 10) { + util.print('z = '); + this.getline(function (line) { + vars.z = parseInt(line, 10); + }) + } + else { + vars.z = 0; + } + }) + .do(function (vars) { + console.log('x + y + z = ' + (vars.x + vars.y + vars.z)); + process.exit(); + }) + ; +} diff --git a/node_backend/node_modules/chainsaw/index.js b/node_backend/node_modules/chainsaw/index.js new file mode 100644 index 0000000000000000000000000000000000000000..39f8c0783fae86540631e163f0d260a15efe3363 --- /dev/null +++ b/node_backend/node_modules/chainsaw/index.js @@ -0,0 +1,145 @@ +var Traverse = require('traverse'); +var EventEmitter = require('events').EventEmitter; + +module.exports = Chainsaw; +function Chainsaw (builder) { + var saw = Chainsaw.saw(builder, {}); + var r = builder.call(saw.handlers, saw); + if (r !== undefined) saw.handlers = r; + saw.record(); + return saw.chain(); +}; + +Chainsaw.light = function ChainsawLight (builder) { + var saw = Chainsaw.saw(builder, {}); + var r = builder.call(saw.handlers, saw); + if (r !== undefined) saw.handlers = r; + return saw.chain(); +}; + +Chainsaw.saw = function (builder, handlers) { + var saw = new EventEmitter; + saw.handlers = handlers; + saw.actions = []; + + saw.chain = function () { + var ch = Traverse(saw.handlers).map(function (node) { + if (this.isRoot) return node; + var ps = this.path; + + if (typeof node === 'function') { + this.update(function () { + saw.actions.push({ + path : ps, + args : [].slice.call(arguments) + }); + return ch; + }); + } + }); + + process.nextTick(function () { + saw.emit('begin'); + saw.next(); + }); + + return ch; + }; + + saw.pop = function () { + return saw.actions.shift(); + }; + + saw.next = function () { + var action = saw.pop(); + + if (!action) { + saw.emit('end'); + } + else if (!action.trap) { + var node = saw.handlers; + action.path.forEach(function (key) { node = node[key] }); + node.apply(saw.handlers, action.args); + } + }; + + saw.nest = function (cb) { + var args = [].slice.call(arguments, 1); + var autonext = true; + + if (typeof cb === 'boolean') { + var autonext = cb; + cb = args.shift(); + } + + var s = Chainsaw.saw(builder, {}); + var r = builder.call(s.handlers, s); + + if (r !== undefined) s.handlers = r; + + // If we are recording... + if ("undefined" !== typeof saw.step) { + // ... our children should, too + s.record(); + } + + cb.apply(s.chain(), args); + if (autonext !== false) s.on('end', saw.next); + }; + + saw.record = function () { + upgradeChainsaw(saw); + }; + + ['trap', 'down', 'jump'].forEach(function (method) { + saw[method] = function () { + throw new Error("To use the trap, down and jump features, please "+ + "call record() first to start recording actions."); + }; + }); + + return saw; +}; + +function upgradeChainsaw(saw) { + saw.step = 0; + + // override pop + saw.pop = function () { + return saw.actions[saw.step++]; + }; + + saw.trap = function (name, cb) { + var ps = Array.isArray(name) ? name : [name]; + saw.actions.push({ + path : ps, + step : saw.step, + cb : cb, + trap : true + }); + }; + + saw.down = function (name) { + var ps = (Array.isArray(name) ? name : [name]).join('/'); + var i = saw.actions.slice(saw.step).map(function (x) { + if (x.trap && x.step <= saw.step) return false; + return x.path.join('/') == ps; + }).indexOf(true); + + if (i >= 0) saw.step += i; + else saw.step = saw.actions.length; + + var act = saw.actions[saw.step - 1]; + if (act && act.trap) { + // It's a trap! + saw.step = act.step; + act.cb(); + } + else saw.next(); + }; + + saw.jump = function (step) { + saw.step = step; + saw.next(); + }; +}; diff --git a/node_backend/node_modules/chainsaw/package.json b/node_backend/node_modules/chainsaw/package.json new file mode 100644 index 0000000000000000000000000000000000000000..d237f56cb9c4a11866904d8b66ddc4387b8a6d40 --- /dev/null +++ b/node_backend/node_modules/chainsaw/package.json @@ -0,0 +1,23 @@ +{ + "name" : "chainsaw", + "version" : "0.1.0", + "description" : "Build chainable fluent interfaces the easy way... with a freakin' chainsaw!", + "main" : "./index.js", + "repository" : { + "type" : "git", + "url" : "http://github.com/substack/node-chainsaw.git" + }, + "dependencies" : { + "traverse" : ">=0.3.0 <0.4" + }, + "keywords" : [ + "chain", + "fluent", + "interface", + "monad", + "monadic" + ], + "author" : "James Halliday (http://substack.net)", + "license" : "MIT/X11", + "engine" : { "node" : ">=0.4.0" } +} diff --git a/node_backend/node_modules/chainsaw/test/chainsaw.js b/node_backend/node_modules/chainsaw/test/chainsaw.js new file mode 100644 index 0000000000000000000000000000000000000000..8895e89955d227d1b399d88e8f165685a1a00345 --- /dev/null +++ b/node_backend/node_modules/chainsaw/test/chainsaw.js @@ -0,0 +1,418 @@ +var assert = require('assert'); +var Chainsaw = require('../index'); + +exports.getset = function () { + var to = setTimeout(function () { + assert.fail('builder never fired'); + }, 1000); + + var ch = Chainsaw(function (saw) { + clearTimeout(to); + var num = 0; + + this.get = function (cb) { + cb(num); + saw.next(); + }; + + this.set = function (n) { + num = n; + saw.next(); + }; + + var ti = setTimeout(function () { + assert.fail('end event not emitted'); + }, 50); + + saw.on('end', function () { + clearTimeout(ti); + assert.equal(times, 3); + }); + }); + + var times = 0; + ch + .get(function (x) { + assert.equal(x, 0); + times ++; + }) + .set(10) + .get(function (x) { + assert.equal(x, 10); + times ++; + }) + .set(20) + .get(function (x) { + assert.equal(x, 20); + times ++; + }) + ; +}; + +exports.nest = function () { + var ch = (function () { + var vars = {}; + return Chainsaw(function (saw) { + this.do = function (cb) { + saw.nest(cb, vars); + }; + }); + })(); + + var order = []; + var to = setTimeout(function () { + assert.fail("Didn't get to the end"); + }, 50); + + ch + .do(function (vars) { + vars.x = 'y'; + order.push(1); + + this + .do(function (vs) { + order.push(2); + vs.x = 'x'; + }) + .do(function (vs) { + order.push(3); + vs.z = 'z'; + }) + ; + }) + .do(function (vars) { + vars.y = 'y'; + order.push(4); + }) + .do(function (vars) { + assert.eql(order, [1,2,3,4]); + assert.eql(vars, { x : 'x', y : 'y', z : 'z' }); + clearTimeout(to); + }) + ; +}; + +exports.nestWait = function () { + var ch = (function () { + var vars = {}; + return Chainsaw(function (saw) { + this.do = function (cb) { + saw.nest(cb, vars); + }; + + this.wait = function (n) { + setTimeout(function () { + saw.next(); + }, n); + }; + }); + })(); + + var order = []; + var to = setTimeout(function () { + assert.fail("Didn't get to the end"); + }, 1000); + + var times = {}; + + ch + .do(function (vars) { + vars.x = 'y'; + order.push(1); + + this + .do(function (vs) { + order.push(2); + vs.x = 'x'; + times.x = Date.now(); + }) + .wait(50) + .do(function (vs) { + order.push(3); + vs.z = 'z'; + + times.z = Date.now(); + var dt = times.z - times.x; + assert.ok(dt >= 50 && dt < 75); + }) + ; + }) + .do(function (vars) { + vars.y = 'y'; + order.push(4); + + times.y = Date.now(); + }) + .wait(100) + .do(function (vars) { + assert.eql(order, [1,2,3,4]); + assert.eql(vars, { x : 'x', y : 'y', z : 'z' }); + clearTimeout(to); + + times.end = Date.now(); + var dt = times.end - times.y; + assert.ok(dt >= 100 && dt < 125) + }) + ; +}; + +exports.nestNext = function () { + var ch = (function () { + var vars = {}; + return Chainsaw(function (saw) { + this.do = function (cb) { + saw.nest(false, function () { + var args = [].slice.call(arguments); + args.push(saw.next); + cb.apply(this, args); + }, vars); + }; + }); + })(); + + var order = []; + var to = setTimeout(function () { + assert.fail("Didn't get to the end"); + }, 500); + + var times = []; + + ch + .do(function (vars, next_) { + vars.x = 'y'; + order.push(1); + + this + .do(function (vs, next) { + order.push(2); + vs.x = 'x'; + setTimeout(next, 30); + }) + .do(function (vs, next) { + order.push(3); + vs.z = 'z'; + setTimeout(next, 10); + }) + .do(function () { + setTimeout(next_, 20); + }) + ; + }) + .do(function (vars, next) { + vars.y = 'y'; + order.push(4); + setTimeout(next, 5); + }) + .do(function (vars) { + assert.eql(order, [1,2,3,4]); + assert.eql(vars, { x : 'x', y : 'y', z : 'z' }); + + clearTimeout(to); + }) + ; +}; + +exports.builder = function () { + var cx = Chainsaw(function (saw) { + this.x = function () {}; + }); + assert.ok(cx.x); + + var cy = Chainsaw(function (saw) { + return { y : function () {} }; + }); + assert.ok(cy.y); + + var cz = Chainsaw(function (saw) { + return { z : function (cb) { saw.nest(cb) } }; + }); + assert.ok(cz.z); + + var to = setTimeout(function () { + assert.fail("Nested z didn't run"); + }, 50); + + cz.z(function () { + clearTimeout(to); + assert.ok(this.z); + }); +}; + +this.attr = function () { + var to = setTimeout(function () { + assert.fail("attr chain didn't finish"); + }, 50); + + var xy = []; + var ch = Chainsaw(function (saw) { + this.h = { + x : function () { + xy.push('x'); + saw.next(); + }, + y : function () { + xy.push('y'); + saw.next(); + assert.eql(xy, ['x','y']); + clearTimeout(to); + } + }; + }); + assert.ok(ch.h); + assert.ok(ch.h.x); + assert.ok(ch.h.y); + + ch.h.x().h.y(); +}; + +exports.down = function () { + var error = null; + var s; + var ch = Chainsaw(function (saw) { + s = saw; + this.raise = function (err) { + error = err; + saw.down('catch'); + }; + + this.do = function (cb) { + cb.call(this); + }; + + this.catch = function (cb) { + if (error) { + saw.nest(cb, error); + error = null; + } + else saw.next(); + }; + }); + + var to = setTimeout(function () { + assert.fail(".do() after .catch() didn't fire"); + }, 50); + + ch + .do(function () { + this.raise('pow'); + }) + .do(function () { + assert.fail("raise didn't skip over this do block"); + }) + .catch(function (err) { + assert.equal(err, 'pow'); + }) + .do(function () { + clearTimeout(to); + }) + ; +}; + +exports.trap = function () { + var error = null; + var ch = Chainsaw(function (saw) { + var pars = 0; + var stack = []; + var i = 0; + + this.par = function (cb) { + pars ++; + var j = i ++; + cb.call(function () { + pars --; + stack[j] = [].slice.call(arguments); + saw.down('result'); + }); + saw.next(); + }; + + this.join = function (cb) { + saw.trap('result', function () { + if (pars == 0) { + cb.apply(this, stack); + saw.next(); + } + }); + }; + + this.raise = function (err) { + error = err; + saw.down('catch'); + }; + + this.do = function (cb) { + cb.call(this); + }; + + this.catch = function (cb) { + if (error) { + saw.nest(cb, error); + error = null; + } + else saw.next(); + }; + }); + + var to = setTimeout(function () { + assert.fail(".do() after .join() didn't fire"); + }, 100); + var tj = setTimeout(function () { + assert.fail('.join() never fired'); + }, 100); + + var joined = false; + ch + .par(function () { + setTimeout(this.bind(null, 1), 50); + }) + .par(function () { + setTimeout(this.bind(null, 2), 25); + }) + .join(function (x, y) { + assert.equal(x[0], 1); + assert.equal(y[0], 2); + clearTimeout(tj); + joined = true; + }) + .do(function () { + clearTimeout(to); + assert.ok(joined); + }) + ; +}; + +exports.jump = function () { + var to = setTimeout(function () { + assert.fail('builder never fired'); + }, 50); + + var xs = [ 4, 5, 6, -4, 8, 9, -1, 8 ]; + var xs_ = []; + + var ch = Chainsaw(function (saw) { + this.x = function (i) { + xs_.push(i); + saw.next(); + }; + + this.y = function (step) { + var x = xs.shift(); + if (x > 0) saw.jump(step); + else saw.next(); + }; + + saw.on('end', function () { + clearTimeout(to); + assert.eql(xs, [ 8 ]); + assert.eql(xs_, [ 1, 1, 1, 1, 2, 3, 2, 3, 2, 3 ]); + }); + }); + + ch + .x(1) + .y(0) + .x(2) + .x(3) + .y(2) + ; +}; diff --git a/node_backend/node_modules/compress-commons/CHANGELOG.md b/node_backend/node_modules/compress-commons/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..9421e92ca9916fcd2973f3183a51e112855cb3a0 --- /dev/null +++ b/node_backend/node_modules/compress-commons/CHANGELOG.md @@ -0,0 +1,60 @@ +## Changelog + +**4.1.2** — _September 2, 2023_ — [Diff](https://github.com/archiverjs/node-compress-commons/compare/4.1.1...4.1.2) + +**4.1.1** — _May 30th, 2021_ — [Diff](https://github.com/archiverjs/node-compress-commons/compare/4.1.0...4.1.1) + +### Maintenance +- Bump mocha from 8.2.1 to 8.4.0 (#70) +- Bump crc32-stream from 4.0.1 to 4.0.2 (#59) +- Bump y18n from 4.0.0 to 4.0.1 (#69) +- Bump chai from 4.2.0 to 4.3.4 (#67) +- Bump actions/setup-node from 2.1.4 to 2.1.5 (#71) + +**4.1.0** — _March 2, 2021_ — [Diff](https://github.com/archiverjs/node-compress-commons/compare/4.0.1...4.1.0) + +### Features + +- Allow prepending forward slash in entry name (#63) + +### Maintenance + +- Bump actions/setup-node from v2.1.2 to v2.1.4 (#58) + +**4.0.1** — _July 20, 2020_ — [Diff](https://github.com/archiverjs/node-compress-commons/compare/4.0.0...4.0.1) + +* Bump crc32-stream from 3.0.1 to 4.0.0 (#43) @dependabot + +**4.0.0** — _July 18, 2020_ — [Diff](https://github.com/archiverjs/node-compress-commons/compare/3.0.0...4.0.0) + +* Bump mocha from 5.2.0 to 8.0.1 (#36) @dependabot +* Bump readable-stream from 2.3.7 to 3.6.0 (#39) @dependabot +* Bump actions/setup-node from v1 to v2.1.0 (#41) @dependabot +* Bump rimraf from 2.7.1 to 3.0.2 (#38) @dependabot +* Bump mkdirp from 0.5.5 to 1.0.4 (#37) @dependabot +* Bump actions/checkout from v1 to v2.3.1 (#40) @dependabot +* remove support for node < 10 (#42) @ctalkington + +**3.0.0** — _April 14, 2020_ — [Diff](https://github.com/archiverjs/node-compress-commons/compare/2.1.1...3.0.0) + +- breaking: slowly catch up with node LTS, remove support for versions under 8. +- update multiple deps. + +**2.1.1** — _August 2, 2019_ — [Diff](https://github.com/archiverjs/node-compress-commons/compare/2.1.0...2.1.1) + +- update crc32-stream to v3.0.1 + +**2.1.0** — _August 2, 2019_ — [Diff](https://github.com/archiverjs/node-compress-commons/compare/2.0.0...2.1.0) + +- update crc32-stream to v3.0.0 + +**2.0.0** — _July 19, 2019_ — [Diff](https://github.com/archiverjs/node-compress-commons/compare/1.2.2...2.0.0) + +- breaking: follow node LTS, remove support for versions under 6. +- test: now targeting node v10 and v12 +- fix: update Buffer calls to alloc/from +- fix: Add offset to buffer call (#31) +- other: update normalize-path@3 (#34) +- other: update dependencies + +[Release Archive](https://github.com/archiverjs/node-compress-commons/releases) diff --git a/node_backend/node_modules/compress-commons/LICENSE b/node_backend/node_modules/compress-commons/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..56420a6a06bd156003ce69970b50c67176f2afe5 --- /dev/null +++ b/node_backend/node_modules/compress-commons/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 Chris Talkington, contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_backend/node_modules/compress-commons/README.md b/node_backend/node_modules/compress-commons/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6a74ce1480b347c94ccb40782a07f43740102186 --- /dev/null +++ b/node_backend/node_modules/compress-commons/README.md @@ -0,0 +1,25 @@ +# Compress Commons + +Compress Commons is a library that defines a common interface for working with archive formats within node. + +[![NPM](https://nodei.co/npm/compress-commons.png)](https://nodei.co/npm/compress-commons/) + +## Install + +```bash +npm install compress-commons --save +``` + +You can also use `npm install https://github.com/archiverjs/node-compress-commons/archive/master.tar.gz` to test upcoming versions. + +## Things of Interest + +- [Changelog](https://github.com/archiverjs/node-compress-commons/releases) +- [Contributing](https://github.com/archiverjs/node-compress-commons/blob/master/CONTRIBUTING.md) +- [MIT License](https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT) + +## Credits + +Concept inspired by [Apache Commons Compress](http://commons.apache.org/proper/commons-compress/)™. + +Some logic derived from [Apache Commons Compress](http://commons.apache.org/proper/commons-compress/)™ and [OpenJDK 7](http://openjdk.java.net/). \ No newline at end of file diff --git a/node_backend/node_modules/compress-commons/lib/archivers/archive-entry.js b/node_backend/node_modules/compress-commons/lib/archivers/archive-entry.js new file mode 100644 index 0000000000000000000000000000000000000000..86bc59886a2392c35c759cad28325c61bfcd6b8e --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/archivers/archive-entry.js @@ -0,0 +1,16 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +var ArchiveEntry = module.exports = function() {}; + +ArchiveEntry.prototype.getName = function() {}; + +ArchiveEntry.prototype.getSize = function() {}; + +ArchiveEntry.prototype.getLastModifiedDate = function() {}; + +ArchiveEntry.prototype.isDirectory = function() {}; \ No newline at end of file diff --git a/node_backend/node_modules/compress-commons/lib/archivers/archive-output-stream.js b/node_backend/node_modules/compress-commons/lib/archivers/archive-output-stream.js new file mode 100644 index 0000000000000000000000000000000000000000..b5fa4939c6c9e55492eb8fe6d14a4ad547817b77 --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/archivers/archive-output-stream.js @@ -0,0 +1,117 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +var inherits = require('util').inherits; +var Transform = require('readable-stream').Transform; + +var ArchiveEntry = require('./archive-entry'); +var util = require('../util'); + +var ArchiveOutputStream = module.exports = function(options) { + if (!(this instanceof ArchiveOutputStream)) { + return new ArchiveOutputStream(options); + } + + Transform.call(this, options); + + this.offset = 0; + this._archive = { + finish: false, + finished: false, + processing: false + }; +}; + +inherits(ArchiveOutputStream, Transform); + +ArchiveOutputStream.prototype._appendBuffer = function(zae, source, callback) { + // scaffold only +}; + +ArchiveOutputStream.prototype._appendStream = function(zae, source, callback) { + // scaffold only +}; + +ArchiveOutputStream.prototype._emitErrorCallback = function(err) { + if (err) { + this.emit('error', err); + } +}; + +ArchiveOutputStream.prototype._finish = function(ae) { + // scaffold only +}; + +ArchiveOutputStream.prototype._normalizeEntry = function(ae) { + // scaffold only +}; + +ArchiveOutputStream.prototype._transform = function(chunk, encoding, callback) { + callback(null, chunk); +}; + +ArchiveOutputStream.prototype.entry = function(ae, source, callback) { + source = source || null; + + if (typeof callback !== 'function') { + callback = this._emitErrorCallback.bind(this); + } + + if (!(ae instanceof ArchiveEntry)) { + callback(new Error('not a valid instance of ArchiveEntry')); + return; + } + + if (this._archive.finish || this._archive.finished) { + callback(new Error('unacceptable entry after finish')); + return; + } + + if (this._archive.processing) { + callback(new Error('already processing an entry')); + return; + } + + this._archive.processing = true; + this._normalizeEntry(ae); + this._entry = ae; + + source = util.normalizeInputSource(source); + + if (Buffer.isBuffer(source)) { + this._appendBuffer(ae, source, callback); + } else if (util.isStream(source)) { + this._appendStream(ae, source, callback); + } else { + this._archive.processing = false; + callback(new Error('input source must be valid Stream or Buffer instance')); + return; + } + + return this; +}; + +ArchiveOutputStream.prototype.finish = function() { + if (this._archive.processing) { + this._archive.finish = true; + return; + } + + this._finish(); +}; + +ArchiveOutputStream.prototype.getBytesWritten = function() { + return this.offset; +}; + +ArchiveOutputStream.prototype.write = function(chunk, cb) { + if (chunk) { + this.offset += chunk.length; + } + + return Transform.prototype.write.call(this, chunk, cb); +}; \ No newline at end of file diff --git a/node_backend/node_modules/compress-commons/lib/archivers/zip/constants.js b/node_backend/node_modules/compress-commons/lib/archivers/zip/constants.js new file mode 100644 index 0000000000000000000000000000000000000000..c30b3250b6ce7519ddd594b6a4bddbd395f04fe1 --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/archivers/zip/constants.js @@ -0,0 +1,71 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +module.exports = { + WORD: 4, + DWORD: 8, + EMPTY: Buffer.alloc(0), + + SHORT: 2, + SHORT_MASK: 0xffff, + SHORT_SHIFT: 16, + SHORT_ZERO: Buffer.from(Array(2)), + LONG: 4, + LONG_ZERO: Buffer.from(Array(4)), + + MIN_VERSION_INITIAL: 10, + MIN_VERSION_DATA_DESCRIPTOR: 20, + MIN_VERSION_ZIP64: 45, + VERSION_MADEBY: 45, + + METHOD_STORED: 0, + METHOD_DEFLATED: 8, + + PLATFORM_UNIX: 3, + PLATFORM_FAT: 0, + + SIG_LFH: 0x04034b50, + SIG_DD: 0x08074b50, + SIG_CFH: 0x02014b50, + SIG_EOCD: 0x06054b50, + SIG_ZIP64_EOCD: 0x06064B50, + SIG_ZIP64_EOCD_LOC: 0x07064B50, + + ZIP64_MAGIC_SHORT: 0xffff, + ZIP64_MAGIC: 0xffffffff, + ZIP64_EXTRA_ID: 0x0001, + + ZLIB_NO_COMPRESSION: 0, + ZLIB_BEST_SPEED: 1, + ZLIB_BEST_COMPRESSION: 9, + ZLIB_DEFAULT_COMPRESSION: -1, + + MODE_MASK: 0xFFF, + DEFAULT_FILE_MODE: 33188, // 010644 = -rw-r--r-- = S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH + DEFAULT_DIR_MODE: 16877, // 040755 = drwxr-xr-x = S_IFDIR | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH + + EXT_FILE_ATTR_DIR: 1106051088, // 010173200020 = drwxr-xr-x = (((S_IFDIR | 0755) << 16) | S_DOS_D) + EXT_FILE_ATTR_FILE: 2175008800, // 020151000040 = -rw-r--r-- = (((S_IFREG | 0644) << 16) | S_DOS_A) >>> 0 + + // Unix file types + S_IFMT: 61440, // 0170000 type of file mask + S_IFIFO: 4096, // 010000 named pipe (fifo) + S_IFCHR: 8192, // 020000 character special + S_IFDIR: 16384, // 040000 directory + S_IFBLK: 24576, // 060000 block special + S_IFREG: 32768, // 0100000 regular + S_IFLNK: 40960, // 0120000 symbolic link + S_IFSOCK: 49152, // 0140000 socket + + // DOS file type flags + S_DOS_A: 32, // 040 Archive + S_DOS_D: 16, // 020 Directory + S_DOS_V: 8, // 010 Volume + S_DOS_S: 4, // 04 System + S_DOS_H: 2, // 02 Hidden + S_DOS_R: 1 // 01 Read Only +}; diff --git a/node_backend/node_modules/compress-commons/lib/archivers/zip/general-purpose-bit.js b/node_backend/node_modules/compress-commons/lib/archivers/zip/general-purpose-bit.js new file mode 100644 index 0000000000000000000000000000000000000000..62703996a1bae9c36ff137795a8100bde4aadc9f --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/archivers/zip/general-purpose-bit.js @@ -0,0 +1,101 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +var zipUtil = require('./util'); + +var DATA_DESCRIPTOR_FLAG = 1 << 3; +var ENCRYPTION_FLAG = 1 << 0; +var NUMBER_OF_SHANNON_FANO_TREES_FLAG = 1 << 2; +var SLIDING_DICTIONARY_SIZE_FLAG = 1 << 1; +var STRONG_ENCRYPTION_FLAG = 1 << 6; +var UFT8_NAMES_FLAG = 1 << 11; + +var GeneralPurposeBit = module.exports = function() { + if (!(this instanceof GeneralPurposeBit)) { + return new GeneralPurposeBit(); + } + + this.descriptor = false; + this.encryption = false; + this.utf8 = false; + this.numberOfShannonFanoTrees = 0; + this.strongEncryption = false; + this.slidingDictionarySize = 0; + + return this; +}; + +GeneralPurposeBit.prototype.encode = function() { + return zipUtil.getShortBytes( + (this.descriptor ? DATA_DESCRIPTOR_FLAG : 0) | + (this.utf8 ? UFT8_NAMES_FLAG : 0) | + (this.encryption ? ENCRYPTION_FLAG : 0) | + (this.strongEncryption ? STRONG_ENCRYPTION_FLAG : 0) + ); +}; + +GeneralPurposeBit.prototype.parse = function(buf, offset) { + var flag = zipUtil.getShortBytesValue(buf, offset); + var gbp = new GeneralPurposeBit(); + + gbp.useDataDescriptor((flag & DATA_DESCRIPTOR_FLAG) !== 0); + gbp.useUTF8ForNames((flag & UFT8_NAMES_FLAG) !== 0); + gbp.useStrongEncryption((flag & STRONG_ENCRYPTION_FLAG) !== 0); + gbp.useEncryption((flag & ENCRYPTION_FLAG) !== 0); + gbp.setSlidingDictionarySize((flag & SLIDING_DICTIONARY_SIZE_FLAG) !== 0 ? 8192 : 4096); + gbp.setNumberOfShannonFanoTrees((flag & NUMBER_OF_SHANNON_FANO_TREES_FLAG) !== 0 ? 3 : 2); + + return gbp; +}; + +GeneralPurposeBit.prototype.setNumberOfShannonFanoTrees = function(n) { + this.numberOfShannonFanoTrees = n; +}; + +GeneralPurposeBit.prototype.getNumberOfShannonFanoTrees = function() { + return this.numberOfShannonFanoTrees; +}; + +GeneralPurposeBit.prototype.setSlidingDictionarySize = function(n) { + this.slidingDictionarySize = n; +}; + +GeneralPurposeBit.prototype.getSlidingDictionarySize = function() { + return this.slidingDictionarySize; +}; + +GeneralPurposeBit.prototype.useDataDescriptor = function(b) { + this.descriptor = b; +}; + +GeneralPurposeBit.prototype.usesDataDescriptor = function() { + return this.descriptor; +}; + +GeneralPurposeBit.prototype.useEncryption = function(b) { + this.encryption = b; +}; + +GeneralPurposeBit.prototype.usesEncryption = function() { + return this.encryption; +}; + +GeneralPurposeBit.prototype.useStrongEncryption = function(b) { + this.strongEncryption = b; +}; + +GeneralPurposeBit.prototype.usesStrongEncryption = function() { + return this.strongEncryption; +}; + +GeneralPurposeBit.prototype.useUTF8ForNames = function(b) { + this.utf8 = b; +}; + +GeneralPurposeBit.prototype.usesUTF8ForNames = function() { + return this.utf8; +}; \ No newline at end of file diff --git a/node_backend/node_modules/compress-commons/lib/archivers/zip/unix-stat.js b/node_backend/node_modules/compress-commons/lib/archivers/zip/unix-stat.js new file mode 100644 index 0000000000000000000000000000000000000000..1326cd1d836d483b31346e7cb0fc5c06ef7e731b --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/archivers/zip/unix-stat.js @@ -0,0 +1,53 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +module.exports = { + /** + * Bits used for permissions (and sticky bit) + */ + PERM_MASK: 4095, // 07777 + + /** + * Bits used to indicate the filesystem object type. + */ + FILE_TYPE_FLAG: 61440, // 0170000 + + /** + * Indicates symbolic links. + */ + LINK_FLAG: 40960, // 0120000 + + /** + * Indicates plain files. + */ + FILE_FLAG: 32768, // 0100000 + + /** + * Indicates directories. + */ + DIR_FLAG: 16384, // 040000 + + // ---------------------------------------------------------- + // somewhat arbitrary choices that are quite common for shared + // installations + // ----------------------------------------------------------- + + /** + * Default permissions for symbolic links. + */ + DEFAULT_LINK_PERM: 511, // 0777 + + /** + * Default permissions for directories. + */ + DEFAULT_DIR_PERM: 493, // 0755 + + /** + * Default permissions for plain files. + */ + DEFAULT_FILE_PERM: 420 // 0644 +}; \ No newline at end of file diff --git a/node_backend/node_modules/compress-commons/lib/archivers/zip/util.js b/node_backend/node_modules/compress-commons/lib/archivers/zip/util.js new file mode 100644 index 0000000000000000000000000000000000000000..22055ae515bc98a86bb366cbef48e566f01e3727 --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/archivers/zip/util.js @@ -0,0 +1,74 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +var util = module.exports = {}; + +util.dateToDos = function(d, forceLocalTime) { + forceLocalTime = forceLocalTime || false; + + var year = forceLocalTime ? d.getFullYear() : d.getUTCFullYear(); + + if (year < 1980) { + return 2162688; // 1980-1-1 00:00:00 + } else if (year >= 2044) { + return 2141175677; // 2043-12-31 23:59:58 + } + + var val = { + year: year, + month: forceLocalTime ? d.getMonth() : d.getUTCMonth(), + date: forceLocalTime ? d.getDate() : d.getUTCDate(), + hours: forceLocalTime ? d.getHours() : d.getUTCHours(), + minutes: forceLocalTime ? d.getMinutes() : d.getUTCMinutes(), + seconds: forceLocalTime ? d.getSeconds() : d.getUTCSeconds() + }; + + return ((val.year - 1980) << 25) | ((val.month + 1) << 21) | (val.date << 16) | + (val.hours << 11) | (val.minutes << 5) | (val.seconds / 2); +}; + +util.dosToDate = function(dos) { + return new Date(((dos >> 25) & 0x7f) + 1980, ((dos >> 21) & 0x0f) - 1, (dos >> 16) & 0x1f, (dos >> 11) & 0x1f, (dos >> 5) & 0x3f, (dos & 0x1f) << 1); +}; + +util.fromDosTime = function(buf) { + return util.dosToDate(buf.readUInt32LE(0)); +}; + +util.getEightBytes = function(v) { + var buf = Buffer.alloc(8); + buf.writeUInt32LE(v % 0x0100000000, 0); + buf.writeUInt32LE((v / 0x0100000000) | 0, 4); + + return buf; +}; + +util.getShortBytes = function(v) { + var buf = Buffer.alloc(2); + buf.writeUInt16LE((v & 0xFFFF) >>> 0, 0); + + return buf; +}; + +util.getShortBytesValue = function(buf, offset) { + return buf.readUInt16LE(offset); +}; + +util.getLongBytes = function(v) { + var buf = Buffer.alloc(4); + buf.writeUInt32LE((v & 0xFFFFFFFF) >>> 0, 0); + + return buf; +}; + +util.getLongBytesValue = function(buf, offset) { + return buf.readUInt32LE(offset); +}; + +util.toDosTime = function(d) { + return util.getLongBytes(util.dateToDos(d)); +}; \ No newline at end of file diff --git a/node_backend/node_modules/compress-commons/lib/archivers/zip/zip-archive-entry.js b/node_backend/node_modules/compress-commons/lib/archivers/zip/zip-archive-entry.js new file mode 100644 index 0000000000000000000000000000000000000000..c53ad0ad8fe1b34f080e6138e8eba6bd4b87dfe1 --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/archivers/zip/zip-archive-entry.js @@ -0,0 +1,413 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +var inherits = require('util').inherits; +var normalizePath = require('normalize-path'); + +var ArchiveEntry = require('../archive-entry'); +var GeneralPurposeBit = require('./general-purpose-bit'); +var UnixStat = require('./unix-stat'); + +var constants = require('./constants'); +var zipUtil = require('./util'); + +var ZipArchiveEntry = module.exports = function(name) { + if (!(this instanceof ZipArchiveEntry)) { + return new ZipArchiveEntry(name); + } + + ArchiveEntry.call(this); + + this.platform = constants.PLATFORM_FAT; + this.method = -1; + + this.name = null; + this.size = 0; + this.csize = 0; + this.gpb = new GeneralPurposeBit(); + this.crc = 0; + this.time = -1; + + this.minver = constants.MIN_VERSION_INITIAL; + this.mode = -1; + this.extra = null; + this.exattr = 0; + this.inattr = 0; + this.comment = null; + + if (name) { + this.setName(name); + } +}; + +inherits(ZipArchiveEntry, ArchiveEntry); + +/** + * Returns the extra fields related to the entry. + * + * @returns {Buffer} + */ +ZipArchiveEntry.prototype.getCentralDirectoryExtra = function() { + return this.getExtra(); +}; + +/** + * Returns the comment set for the entry. + * + * @returns {string} + */ +ZipArchiveEntry.prototype.getComment = function() { + return this.comment !== null ? this.comment : ''; +}; + +/** + * Returns the compressed size of the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getCompressedSize = function() { + return this.csize; +}; + +/** + * Returns the CRC32 digest for the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getCrc = function() { + return this.crc; +}; + +/** + * Returns the external file attributes for the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getExternalAttributes = function() { + return this.exattr; +}; + +/** + * Returns the extra fields related to the entry. + * + * @returns {Buffer} + */ +ZipArchiveEntry.prototype.getExtra = function() { + return this.extra !== null ? this.extra : constants.EMPTY; +}; + +/** + * Returns the general purpose bits related to the entry. + * + * @returns {GeneralPurposeBit} + */ +ZipArchiveEntry.prototype.getGeneralPurposeBit = function() { + return this.gpb; +}; + +/** + * Returns the internal file attributes for the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getInternalAttributes = function() { + return this.inattr; +}; + +/** + * Returns the last modified date of the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getLastModifiedDate = function() { + return this.getTime(); +}; + +/** + * Returns the extra fields related to the entry. + * + * @returns {Buffer} + */ +ZipArchiveEntry.prototype.getLocalFileDataExtra = function() { + return this.getExtra(); +}; + +/** + * Returns the compression method used on the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getMethod = function() { + return this.method; +}; + +/** + * Returns the filename of the entry. + * + * @returns {string} + */ +ZipArchiveEntry.prototype.getName = function() { + return this.name; +}; + +/** + * Returns the platform on which the entry was made. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getPlatform = function() { + return this.platform; +}; + +/** + * Returns the size of the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getSize = function() { + return this.size; +}; + +/** + * Returns a date object representing the last modified date of the entry. + * + * @returns {number|Date} + */ +ZipArchiveEntry.prototype.getTime = function() { + return this.time !== -1 ? zipUtil.dosToDate(this.time) : -1; +}; + +/** + * Returns the DOS timestamp for the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getTimeDos = function() { + return this.time !== -1 ? this.time : 0; +}; + +/** + * Returns the UNIX file permissions for the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getUnixMode = function() { + return this.platform !== constants.PLATFORM_UNIX ? 0 : ((this.getExternalAttributes() >> constants.SHORT_SHIFT) & constants.SHORT_MASK); +}; + +/** + * Returns the version of ZIP needed to extract the entry. + * + * @returns {number} + */ +ZipArchiveEntry.prototype.getVersionNeededToExtract = function() { + return this.minver; +}; + +/** + * Sets the comment of the entry. + * + * @param comment + */ +ZipArchiveEntry.prototype.setComment = function(comment) { + if (Buffer.byteLength(comment) !== comment.length) { + this.getGeneralPurposeBit().useUTF8ForNames(true); + } + + this.comment = comment; +}; + +/** + * Sets the compressed size of the entry. + * + * @param size + */ +ZipArchiveEntry.prototype.setCompressedSize = function(size) { + if (size < 0) { + throw new Error('invalid entry compressed size'); + } + + this.csize = size; +}; + +/** + * Sets the checksum of the entry. + * + * @param crc + */ +ZipArchiveEntry.prototype.setCrc = function(crc) { + if (crc < 0) { + throw new Error('invalid entry crc32'); + } + + this.crc = crc; +}; + +/** + * Sets the external file attributes of the entry. + * + * @param attr + */ +ZipArchiveEntry.prototype.setExternalAttributes = function(attr) { + this.exattr = attr >>> 0; +}; + +/** + * Sets the extra fields related to the entry. + * + * @param extra + */ +ZipArchiveEntry.prototype.setExtra = function(extra) { + this.extra = extra; +}; + +/** + * Sets the general purpose bits related to the entry. + * + * @param gpb + */ +ZipArchiveEntry.prototype.setGeneralPurposeBit = function(gpb) { + if (!(gpb instanceof GeneralPurposeBit)) { + throw new Error('invalid entry GeneralPurposeBit'); + } + + this.gpb = gpb; +}; + +/** + * Sets the internal file attributes of the entry. + * + * @param attr + */ +ZipArchiveEntry.prototype.setInternalAttributes = function(attr) { + this.inattr = attr; +}; + +/** + * Sets the compression method of the entry. + * + * @param method + */ +ZipArchiveEntry.prototype.setMethod = function(method) { + if (method < 0) { + throw new Error('invalid entry compression method'); + } + + this.method = method; +}; + +/** + * Sets the name of the entry. + * + * @param name + * @param prependSlash + */ +ZipArchiveEntry.prototype.setName = function(name, prependSlash = false) { + name = normalizePath(name, false) + .replace(/^\w+:/, '') + .replace(/^(\.\.\/|\/)+/, ''); + + if (prependSlash) { + name = `/${name}`; + } + + if (Buffer.byteLength(name) !== name.length) { + this.getGeneralPurposeBit().useUTF8ForNames(true); + } + + this.name = name; +}; + +/** + * Sets the platform on which the entry was made. + * + * @param platform + */ +ZipArchiveEntry.prototype.setPlatform = function(platform) { + this.platform = platform; +}; + +/** + * Sets the size of the entry. + * + * @param size + */ +ZipArchiveEntry.prototype.setSize = function(size) { + if (size < 0) { + throw new Error('invalid entry size'); + } + + this.size = size; +}; + +/** + * Sets the time of the entry. + * + * @param time + * @param forceLocalTime + */ +ZipArchiveEntry.prototype.setTime = function(time, forceLocalTime) { + if (!(time instanceof Date)) { + throw new Error('invalid entry time'); + } + + this.time = zipUtil.dateToDos(time, forceLocalTime); +}; + +/** + * Sets the UNIX file permissions for the entry. + * + * @param mode + */ +ZipArchiveEntry.prototype.setUnixMode = function(mode) { + mode |= this.isDirectory() ? constants.S_IFDIR : constants.S_IFREG; + + var extattr = 0; + extattr |= (mode << constants.SHORT_SHIFT) | (this.isDirectory() ? constants.S_DOS_D : constants.S_DOS_A); + + this.setExternalAttributes(extattr); + this.mode = mode & constants.MODE_MASK; + this.platform = constants.PLATFORM_UNIX; +}; + +/** + * Sets the version of ZIP needed to extract this entry. + * + * @param minver + */ +ZipArchiveEntry.prototype.setVersionNeededToExtract = function(minver) { + this.minver = minver; +}; + +/** + * Returns true if this entry represents a directory. + * + * @returns {boolean} + */ +ZipArchiveEntry.prototype.isDirectory = function() { + return this.getName().slice(-1) === '/'; +}; + +/** + * Returns true if this entry represents a unix symlink, + * in which case the entry's content contains the target path + * for the symlink. + * + * @returns {boolean} + */ +ZipArchiveEntry.prototype.isUnixSymlink = function() { + return (this.getUnixMode() & UnixStat.FILE_TYPE_FLAG) === UnixStat.LINK_FLAG; +}; + +/** + * Returns true if this entry is using the ZIP64 extension of ZIP. + * + * @returns {boolean} + */ +ZipArchiveEntry.prototype.isZip64 = function() { + return this.csize > constants.ZIP64_MAGIC || this.size > constants.ZIP64_MAGIC; +}; diff --git a/node_backend/node_modules/compress-commons/lib/archivers/zip/zip-archive-output-stream.js b/node_backend/node_modules/compress-commons/lib/archivers/zip/zip-archive-output-stream.js new file mode 100644 index 0000000000000000000000000000000000000000..0b17dd49a985634a9763f7f5860939a407e7a06d --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/archivers/zip/zip-archive-output-stream.js @@ -0,0 +1,440 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +var inherits = require('util').inherits; +var crc32 = require('buffer-crc32'); +var {CRC32Stream} = require('crc32-stream'); +var {DeflateCRC32Stream} = require('crc32-stream'); + +var ArchiveOutputStream = require('../archive-output-stream'); +var ZipArchiveEntry = require('./zip-archive-entry'); +var GeneralPurposeBit = require('./general-purpose-bit'); + +var constants = require('./constants'); +var util = require('../../util'); +var zipUtil = require('./util'); + +var ZipArchiveOutputStream = module.exports = function(options) { + if (!(this instanceof ZipArchiveOutputStream)) { + return new ZipArchiveOutputStream(options); + } + + options = this.options = this._defaults(options); + + ArchiveOutputStream.call(this, options); + + this._entry = null; + this._entries = []; + this._archive = { + centralLength: 0, + centralOffset: 0, + comment: '', + finish: false, + finished: false, + processing: false, + forceZip64: options.forceZip64, + forceLocalTime: options.forceLocalTime + }; +}; + +inherits(ZipArchiveOutputStream, ArchiveOutputStream); + +ZipArchiveOutputStream.prototype._afterAppend = function(ae) { + this._entries.push(ae); + + if (ae.getGeneralPurposeBit().usesDataDescriptor()) { + this._writeDataDescriptor(ae); + } + + this._archive.processing = false; + this._entry = null; + + if (this._archive.finish && !this._archive.finished) { + this._finish(); + } +}; + +ZipArchiveOutputStream.prototype._appendBuffer = function(ae, source, callback) { + if (source.length === 0) { + ae.setMethod(constants.METHOD_STORED); + } + + var method = ae.getMethod(); + + if (method === constants.METHOD_STORED) { + ae.setSize(source.length); + ae.setCompressedSize(source.length); + ae.setCrc(crc32.unsigned(source)); + } + + this._writeLocalFileHeader(ae); + + if (method === constants.METHOD_STORED) { + this.write(source); + this._afterAppend(ae); + callback(null, ae); + return; + } else if (method === constants.METHOD_DEFLATED) { + this._smartStream(ae, callback).end(source); + return; + } else { + callback(new Error('compression method ' + method + ' not implemented')); + return; + } +}; + +ZipArchiveOutputStream.prototype._appendStream = function(ae, source, callback) { + ae.getGeneralPurposeBit().useDataDescriptor(true); + ae.setVersionNeededToExtract(constants.MIN_VERSION_DATA_DESCRIPTOR); + + this._writeLocalFileHeader(ae); + + var smart = this._smartStream(ae, callback); + source.once('error', function(err) { + smart.emit('error', err); + smart.end(); + }) + source.pipe(smart); +}; + +ZipArchiveOutputStream.prototype._defaults = function(o) { + if (typeof o !== 'object') { + o = {}; + } + + if (typeof o.zlib !== 'object') { + o.zlib = {}; + } + + if (typeof o.zlib.level !== 'number') { + o.zlib.level = constants.ZLIB_BEST_SPEED; + } + + o.forceZip64 = !!o.forceZip64; + o.forceLocalTime = !!o.forceLocalTime; + + return o; +}; + +ZipArchiveOutputStream.prototype._finish = function() { + this._archive.centralOffset = this.offset; + + this._entries.forEach(function(ae) { + this._writeCentralFileHeader(ae); + }.bind(this)); + + this._archive.centralLength = this.offset - this._archive.centralOffset; + + if (this.isZip64()) { + this._writeCentralDirectoryZip64(); + } + + this._writeCentralDirectoryEnd(); + + this._archive.processing = false; + this._archive.finish = true; + this._archive.finished = true; + this.end(); +}; + +ZipArchiveOutputStream.prototype._normalizeEntry = function(ae) { + if (ae.getMethod() === -1) { + ae.setMethod(constants.METHOD_DEFLATED); + } + + if (ae.getMethod() === constants.METHOD_DEFLATED) { + ae.getGeneralPurposeBit().useDataDescriptor(true); + ae.setVersionNeededToExtract(constants.MIN_VERSION_DATA_DESCRIPTOR); + } + + if (ae.getTime() === -1) { + ae.setTime(new Date(), this._archive.forceLocalTime); + } + + ae._offsets = { + file: 0, + data: 0, + contents: 0, + }; +}; + +ZipArchiveOutputStream.prototype._smartStream = function(ae, callback) { + var deflate = ae.getMethod() === constants.METHOD_DEFLATED; + var process = deflate ? new DeflateCRC32Stream(this.options.zlib) : new CRC32Stream(); + var error = null; + + function handleStuff() { + var digest = process.digest().readUInt32BE(0); + ae.setCrc(digest); + ae.setSize(process.size()); + ae.setCompressedSize(process.size(true)); + this._afterAppend(ae); + callback(error, ae); + } + + process.once('end', handleStuff.bind(this)); + process.once('error', function(err) { + error = err; + }); + + process.pipe(this, { end: false }); + + return process; +}; + +ZipArchiveOutputStream.prototype._writeCentralDirectoryEnd = function() { + var records = this._entries.length; + var size = this._archive.centralLength; + var offset = this._archive.centralOffset; + + if (this.isZip64()) { + records = constants.ZIP64_MAGIC_SHORT; + size = constants.ZIP64_MAGIC; + offset = constants.ZIP64_MAGIC; + } + + // signature + this.write(zipUtil.getLongBytes(constants.SIG_EOCD)); + + // disk numbers + this.write(constants.SHORT_ZERO); + this.write(constants.SHORT_ZERO); + + // number of entries + this.write(zipUtil.getShortBytes(records)); + this.write(zipUtil.getShortBytes(records)); + + // length and location of CD + this.write(zipUtil.getLongBytes(size)); + this.write(zipUtil.getLongBytes(offset)); + + // archive comment + var comment = this.getComment(); + var commentLength = Buffer.byteLength(comment); + this.write(zipUtil.getShortBytes(commentLength)); + this.write(comment); +}; + +ZipArchiveOutputStream.prototype._writeCentralDirectoryZip64 = function() { + // signature + this.write(zipUtil.getLongBytes(constants.SIG_ZIP64_EOCD)); + + // size of the ZIP64 EOCD record + this.write(zipUtil.getEightBytes(44)); + + // version made by + this.write(zipUtil.getShortBytes(constants.MIN_VERSION_ZIP64)); + + // version to extract + this.write(zipUtil.getShortBytes(constants.MIN_VERSION_ZIP64)); + + // disk numbers + this.write(constants.LONG_ZERO); + this.write(constants.LONG_ZERO); + + // number of entries + this.write(zipUtil.getEightBytes(this._entries.length)); + this.write(zipUtil.getEightBytes(this._entries.length)); + + // length and location of CD + this.write(zipUtil.getEightBytes(this._archive.centralLength)); + this.write(zipUtil.getEightBytes(this._archive.centralOffset)); + + // extensible data sector + // not implemented at this time + + // end of central directory locator + this.write(zipUtil.getLongBytes(constants.SIG_ZIP64_EOCD_LOC)); + + // disk number holding the ZIP64 EOCD record + this.write(constants.LONG_ZERO); + + // relative offset of the ZIP64 EOCD record + this.write(zipUtil.getEightBytes(this._archive.centralOffset + this._archive.centralLength)); + + // total number of disks + this.write(zipUtil.getLongBytes(1)); +}; + +ZipArchiveOutputStream.prototype._writeCentralFileHeader = function(ae) { + var gpb = ae.getGeneralPurposeBit(); + var method = ae.getMethod(); + var offsets = ae._offsets; + + var size = ae.getSize(); + var compressedSize = ae.getCompressedSize(); + + if (ae.isZip64() || offsets.file > constants.ZIP64_MAGIC) { + size = constants.ZIP64_MAGIC; + compressedSize = constants.ZIP64_MAGIC; + + ae.setVersionNeededToExtract(constants.MIN_VERSION_ZIP64); + + var extraBuf = Buffer.concat([ + zipUtil.getShortBytes(constants.ZIP64_EXTRA_ID), + zipUtil.getShortBytes(24), + zipUtil.getEightBytes(ae.getSize()), + zipUtil.getEightBytes(ae.getCompressedSize()), + zipUtil.getEightBytes(offsets.file) + ], 28); + + ae.setExtra(extraBuf); + } + + // signature + this.write(zipUtil.getLongBytes(constants.SIG_CFH)); + + // version made by + this.write(zipUtil.getShortBytes((ae.getPlatform() << 8) | constants.VERSION_MADEBY)); + + // version to extract and general bit flag + this.write(zipUtil.getShortBytes(ae.getVersionNeededToExtract())); + this.write(gpb.encode()); + + // compression method + this.write(zipUtil.getShortBytes(method)); + + // datetime + this.write(zipUtil.getLongBytes(ae.getTimeDos())); + + // crc32 checksum + this.write(zipUtil.getLongBytes(ae.getCrc())); + + // sizes + this.write(zipUtil.getLongBytes(compressedSize)); + this.write(zipUtil.getLongBytes(size)); + + var name = ae.getName(); + var comment = ae.getComment(); + var extra = ae.getCentralDirectoryExtra(); + + if (gpb.usesUTF8ForNames()) { + name = Buffer.from(name); + comment = Buffer.from(comment); + } + + // name length + this.write(zipUtil.getShortBytes(name.length)); + + // extra length + this.write(zipUtil.getShortBytes(extra.length)); + + // comments length + this.write(zipUtil.getShortBytes(comment.length)); + + // disk number start + this.write(constants.SHORT_ZERO); + + // internal attributes + this.write(zipUtil.getShortBytes(ae.getInternalAttributes())); + + // external attributes + this.write(zipUtil.getLongBytes(ae.getExternalAttributes())); + + // relative offset of LFH + if (offsets.file > constants.ZIP64_MAGIC) { + this.write(zipUtil.getLongBytes(constants.ZIP64_MAGIC)); + } else { + this.write(zipUtil.getLongBytes(offsets.file)); + } + + // name + this.write(name); + + // extra + this.write(extra); + + // comment + this.write(comment); +}; + +ZipArchiveOutputStream.prototype._writeDataDescriptor = function(ae) { + // signature + this.write(zipUtil.getLongBytes(constants.SIG_DD)); + + // crc32 checksum + this.write(zipUtil.getLongBytes(ae.getCrc())); + + // sizes + if (ae.isZip64()) { + this.write(zipUtil.getEightBytes(ae.getCompressedSize())); + this.write(zipUtil.getEightBytes(ae.getSize())); + } else { + this.write(zipUtil.getLongBytes(ae.getCompressedSize())); + this.write(zipUtil.getLongBytes(ae.getSize())); + } +}; + +ZipArchiveOutputStream.prototype._writeLocalFileHeader = function(ae) { + var gpb = ae.getGeneralPurposeBit(); + var method = ae.getMethod(); + var name = ae.getName(); + var extra = ae.getLocalFileDataExtra(); + + if (ae.isZip64()) { + gpb.useDataDescriptor(true); + ae.setVersionNeededToExtract(constants.MIN_VERSION_ZIP64); + } + + if (gpb.usesUTF8ForNames()) { + name = Buffer.from(name); + } + + ae._offsets.file = this.offset; + + // signature + this.write(zipUtil.getLongBytes(constants.SIG_LFH)); + + // version to extract and general bit flag + this.write(zipUtil.getShortBytes(ae.getVersionNeededToExtract())); + this.write(gpb.encode()); + + // compression method + this.write(zipUtil.getShortBytes(method)); + + // datetime + this.write(zipUtil.getLongBytes(ae.getTimeDos())); + + ae._offsets.data = this.offset; + + // crc32 checksum and sizes + if (gpb.usesDataDescriptor()) { + this.write(constants.LONG_ZERO); + this.write(constants.LONG_ZERO); + this.write(constants.LONG_ZERO); + } else { + this.write(zipUtil.getLongBytes(ae.getCrc())); + this.write(zipUtil.getLongBytes(ae.getCompressedSize())); + this.write(zipUtil.getLongBytes(ae.getSize())); + } + + // name length + this.write(zipUtil.getShortBytes(name.length)); + + // extra length + this.write(zipUtil.getShortBytes(extra.length)); + + // name + this.write(name); + + // extra + this.write(extra); + + ae._offsets.contents = this.offset; +}; + +ZipArchiveOutputStream.prototype.getComment = function(comment) { + return this._archive.comment !== null ? this._archive.comment : ''; +}; + +ZipArchiveOutputStream.prototype.isZip64 = function() { + return this._archive.forceZip64 || this._entries.length > constants.ZIP64_MAGIC_SHORT || this._archive.centralLength > constants.ZIP64_MAGIC || this._archive.centralOffset > constants.ZIP64_MAGIC; +}; + +ZipArchiveOutputStream.prototype.setComment = function(comment) { + this._archive.comment = comment; +}; diff --git a/node_backend/node_modules/compress-commons/lib/compress-commons.js b/node_backend/node_modules/compress-commons/lib/compress-commons.js new file mode 100644 index 0000000000000000000000000000000000000000..ef3bc1dbed1addba642eb382a9641d708eb9d884 --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/compress-commons.js @@ -0,0 +1,13 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +module.exports = { + ArchiveEntry: require('./archivers/archive-entry'), + ZipArchiveEntry: require('./archivers/zip/zip-archive-entry'), + ArchiveOutputStream: require('./archivers/archive-output-stream'), + ZipArchiveOutputStream: require('./archivers/zip/zip-archive-output-stream') +}; \ No newline at end of file diff --git a/node_backend/node_modules/compress-commons/lib/util/index.js b/node_backend/node_modules/compress-commons/lib/util/index.js new file mode 100644 index 0000000000000000000000000000000000000000..20a6783311a9441ce5026383f2edf76292ba7254 --- /dev/null +++ b/node_backend/node_modules/compress-commons/lib/util/index.js @@ -0,0 +1,30 @@ +/** + * node-compress-commons + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-compress-commons/blob/master/LICENSE-MIT + */ +var Stream = require('stream').Stream; +var PassThrough = require('readable-stream').PassThrough; + +var util = module.exports = {}; + +util.isStream = function(source) { + return source instanceof Stream; +}; + +util.normalizeInputSource = function(source) { + if (source === null) { + return Buffer.alloc(0); + } else if (typeof source === 'string') { + return Buffer.from(source); + } else if (util.isStream(source) && !source._readableState) { + var normalized = new PassThrough(); + source.pipe(normalized); + + return normalized; + } + + return source; +}; \ No newline at end of file diff --git a/node_backend/node_modules/compress-commons/package.json b/node_backend/node_modules/compress-commons/package.json new file mode 100644 index 0000000000000000000000000000000000000000..69d378aa75c1d32ca23600dc361c28bcd7ff8809 --- /dev/null +++ b/node_backend/node_modules/compress-commons/package.json @@ -0,0 +1,45 @@ +{ + "name": "compress-commons", + "version": "4.1.2", + "description": "a library that defines a common interface for working with archive formats within node", + "homepage": "https://github.com/archiverjs/node-compress-commons", + "author": { + "name": "Chris Talkington", + "url": "http://christalkington.com/" + }, + "repository": { + "type": "git", + "url": "https://github.com/archiverjs/node-compress-commons.git" + }, + "bugs": { + "url": "https://github.com/archiverjs/node-compress-commons/issues" + }, + "license": "MIT", + "main": "lib/compress-commons.js", + "files": [ + "lib" + ], + "engines": { + "node": ">= 10" + }, + "scripts": { + "test": "mocha --reporter dot" + }, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "devDependencies": { + "chai": "4.3.8", + "mkdirp": "2.1.6", + "mocha": "9.2.2", + "rimraf": "3.0.2" + }, + "keywords": [ + "compress", + "commons", + "archive" + ] +} diff --git a/node_backend/node_modules/crc-32/LICENSE b/node_backend/node_modules/crc-32/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..5723c45b65c813a87ed38272f5a3e6b7b6890a96 --- /dev/null +++ b/node_backend/node_modules/crc-32/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (C) 2014-present SheetJS LLC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_backend/node_modules/crc-32/README.md b/node_backend/node_modules/crc-32/README.md new file mode 100644 index 0000000000000000000000000000000000000000..082127a0d96ef462da7d9f9dcd836316a6f2da41 --- /dev/null +++ b/node_backend/node_modules/crc-32/README.md @@ -0,0 +1,200 @@ +# crc32 + +Standard CRC-32 algorithm implementation in JS (for the browser and nodejs). +Emphasis on correctness, performance, and IE6+ support. + +## Installation + +With [npm](https://www.npmjs.org/package/crc-32): + +```bash +$ npm install crc-32 +``` + +When installed globally, npm installs a script `crc32` that computes the +checksum for a specified file or standard input. + +
+ CDN Availability (click to show) + +| CDN | URL | +|-----------:|:-------------------------------------------| +| `unpkg` | | +| `jsDelivr` | | +| `CDNjs` | | + +
+ + +## Integration + +Using NodeJS or a bundler: + +```js +var CRC32 = require("crc-32"); +``` + +In the browser, the `crc32.js` script can be loaded directly: + +```html + +``` + +The browser script exposes a variable `CRC32`. + +The script will manipulate `module.exports` if available . This is not always +desirable. To prevent the behavior, define `DO_NOT_EXPORT_CRC`. + +### CRC32C (Castagnoli) + +The module and CDNs also include a parallel script for CRC32C calculations. + +Using NodeJS or a bundler: + +```js +var CRC32C = require("crc-32/crc32c"); +``` + +In the browser, the `crc32c.js` script can be loaded directly: + +```html + +``` + +The browser exposes a variable `CRC32C`. + +The script will manipulate `module.exports` if available . This is not always +desirable. To prevent the behavior, define `DO_NOT_EXPORT_CRC`. + +## Usage + +In all cases, the relevant function takes an argument representing data and an +optional second argument representing the starting "seed" (for rolling CRC). + +The return value is a signed 32-bit integer. + +- `CRC32.buf(byte array or buffer[, seed])` assumes the argument is a sequence + of 8-bit unsigned integers (nodejs `Buffer`, `Uint8Array` or array of bytes). + +- `CRC32.bstr(binary string[, seed])` assumes the argument is a binary string + where byte `i` is the low byte of the UCS-2 char: `str.charCodeAt(i) & 0xFF` + +- `CRC32.str(string[, seed])` assumes the argument is a standard JS string and + calculates the hash of the UTF-8 encoding. + +For example: + +```js +// var CRC32 = require('crc-32'); // uncomment this line if in node +CRC32.str("SheetJS") // -1647298270 +CRC32.bstr("SheetJS") // -1647298270 +CRC32.buf([ 83, 104, 101, 101, 116, 74, 83 ]) // -1647298270 + +crc32 = CRC32.buf([83, 104]) // -1826163454 "Sh" +crc32 = CRC32.str("eet", crc32) // 1191034598 "Sheet" +CRC32.bstr("JS", crc32) // -1647298270 "SheetJS" + +[CRC32.str("\u2603"), CRC32.str("\u0003")] // [ -1743909036, 1259060791 ] +[CRC32.bstr("\u2603"), CRC32.bstr("\u0003")] // [ 1259060791, 1259060791 ] +[CRC32.buf([0x2603]), CRC32.buf([0x0003])] // [ 1259060791, 1259060791 ] + +// var CRC32C = require('crc-32/crc32c'); // uncomment this line if in node +CRC32C.str("SheetJS") // -284764294 +CRC32C.bstr("SheetJS") // -284764294 +CRC32C.buf([ 83, 104, 101, 101, 116, 74, 83 ]) // -284764294 + +crc32c = CRC32C.buf([83, 104]) // -297065629 "Sh" +crc32c = CRC32C.str("eet", crc32c) // 1241364256 "Sheet" +CRC32C.bstr("JS", crc32c) // -284764294 "SheetJS" + +[CRC32C.str("\u2603"), CRC32C.str("\u0003")] // [ 1253703093, 1093509285 ] +[CRC32C.bstr("\u2603"), CRC32C.bstr("\u0003")] // [ 1093509285, 1093509285 ] +[CRC32C.buf([0x2603]), CRC32C.buf([0x0003])] // [ 1093509285, 1093509285 ] +``` + +### Best Practices + +Even though the initial seed is optional, for performance reasons it is highly +recommended to explicitly pass the default seed 0. + +In NodeJS with the native Buffer implementation, it is oftentimes faster to +convert binary strings with `Buffer.from(bstr, "binary")` first: + +```js +/* Frequently slower in NodeJS */ +crc32 = CRC32.bstr(bstr, 0); +/* Frequently faster in NodeJS */ +crc32 = CRC32.buf(Buffer.from(bstr, "binary"), 0); +``` + +This does not apply to browser `Buffer` shims, and thus is not implemented in +the library directly. + +## Testing + +`make test` will run the nodejs-based test. + +To run the in-browser tests, run a local server and go to the `ctest` directory. +`make ctestserv` will start a python `SimpleHTTPServer` server on port 8000. + +To update the browser artifacts, run `make ctest`. + +To generate the bits file, use the `crc32` function from python `zlib`: + +```python +>>> from zlib import crc32 +>>> x="foo bar baz٪☃🍣" +>>> crc32(x) +1531648243 +>>> crc32(x+x) +-218791105 +>>> crc32(x+x+x) +1834240887 +``` + +The included `crc32.njs` script can process files or standard input: + +```bash +$ echo "this is a test" > t.txt +$ bin/crc32.njs t.txt +1912935186 +``` + +For comparison, the included `crc32.py` script uses python `zlib`: + +```bash +$ bin/crc32.py t.txt +1912935186 +``` + +On OSX the command `cksum` generates unsigned CRC-32 with Algorithm 3: + +```bash +$ cksum -o 3 < IE8.Win7.For.Windows.VMware.zip +1891069052 4161613172 +$ crc32 --unsigned ~/Downloads/IE8.Win7.For.Windows.VMware.zip +1891069052 +``` + +## Performance + +`make perf` will run algorithmic performance tests (which should justify certain +decisions in the code). + +The [`adler-32` project](http://git.io/adler32) has more performance notes + +## License + +Please consult the attached LICENSE file for details. All rights not explicitly +granted by the Apache 2.0 license are reserved by the Original Author. + +## Badges + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/crc32.svg)](https://saucelabs.com/u/crc32) + +[![Build Status](https://travis-ci.org/SheetJS/js-crc32.svg?branch=master)](https://travis-ci.org/SheetJS/js-crc32) +[![Coverage Status](http://img.shields.io/coveralls/SheetJS/js-crc32/master.svg)](https://coveralls.io/r/SheetJS/js-crc32?branch=master) +[![Dependencies Status](https://david-dm.org/sheetjs/js-crc32/status.svg)](https://david-dm.org/sheetjs/js-crc32) +[![NPM Downloads](https://img.shields.io/npm/dt/crc-32.svg)](https://npmjs.org/package/crc-32) +[![ghit.me](https://ghit.me/badge.svg?repo=sheetjs/js-xlsx)](https://ghit.me/repo/sheetjs/js-xlsx) +[![Analytics](https://ga-beacon.appspot.com/UA-36810333-1/SheetJS/js-crc32?pixel)](https://github.com/SheetJS/js-crc32) diff --git a/node_backend/node_modules/crc-32/bin/crc32.njs b/node_backend/node_modules/crc-32/bin/crc32.njs new file mode 100644 index 0000000000000000000000000000000000000000..334e7d2ccd35aa4203b0427e4bf420fa88e947ea --- /dev/null +++ b/node_backend/node_modules/crc-32/bin/crc32.njs @@ -0,0 +1,105 @@ +#!/usr/bin/env node +/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */ +/* eslint-env node */ +/* vim: set ts=2 ft=javascript: */ +/*jshint node:true */ + +var X/*:CRC32Module*/; +try { X = require('../'); } catch(e) { X = require('crc-32'); } + +function help()/*:number*/ { +[ +"usage: crc32 [options] [filename]", +"", +"Options:", +" -h, --help output usage information", +" -V, --version output the version number", +" -S, --seed= use integer seed as starting value (rolling CRC)", +" -H, --hex-seed= use hex seed as starting value (rolling CRC)", +" -d, --signed print result with format `%d` (default)", +" -u, --unsigned print result with format `%u`", +" -x, --hex print result with format `%0.8x`", +" -X, --HEX print result with format `%0.8X`", +" -c, --crc32c use CRC32C (Castagnoli)", +" -F, --format= use specified printf format", +"", +"Set filename = '-' or pipe data into crc32 to read from stdin", +"Default output mode is signed (-d)", +"" +].forEach(function(l) { console.log(l); }); + return 0; +} + +function version()/*:number*/ { console.log(X.version); return 0; } + +var fs = require('fs'); +try { require('exit-on-epipe'); } catch(e) {} + +function die(msg/*:string*/, ec/*:?number*/)/*:void*/ { console.error(msg); process.exit(ec || 0); } + +var args/*:Array*/ = process.argv.slice(2); +var filename/*:string*/ = ""; +var fmt/*:string*/ = ""; +var seed = 0, r = 10; + +for(var i = 0; i < args.length; ++i) { + var arg = args[i]; + if(arg.charCodeAt(0) != 45) { if(filename === "") filename = arg; continue; } + var m = arg.indexOf("=") == -1 ? arg : arg.substr(0, arg.indexOf("=")); + switch(m) { + case "-": filename = "-"; break; + + case "--help": case "-h": process.exit(help()); break; + case "--version": case "-V": process.exit(version()); break; + + case "--crc32c": case "-c": try { X = require('../crc32c'); } catch(e) { X = require('crc-32/crc32c'); } break; + + case "--signed": case "-d": fmt = "%d"; break; + case "--unsigned": case "-u": fmt = "%u"; break; + case "--hex": case "-x": fmt = "%0.8x"; break; + case "--HEX": case "-X": fmt = "%0.8X"; break; + case "--format": case "-F": + try { + require("printj"); + fmt = ((m!=arg) ? arg.substr(m.length+1) : args[++i])||""; + } catch(e) { + console.error("The `crc-32` module removed the `printj` dependency for formatting"); + console.error("Use the `crc32-cli` module instead:"); + console.error(" $ npx crc32-cli [options] [filename]"); + } break; + + case "--hex-seed": case "-H": r = 16; + /* falls through */ + case "--seed": case "-S": + seed=parseInt((m!=arg) ? arg.substr(m.length+1) : args[++i], r)||0; break; + + default: die("crc32: unrecognized option `" + arg + "'", 22); + } +} + +if(!process.stdin.isTTY) filename = filename || "-"; +if(filename.length===0) die("crc32: must specify a filename ('-' for stdin)",1); + +var crc32 = seed; +// $FlowIgnore -- Writable is callable but type sig disagrees +var writable = require('stream').Writable(); +writable._write = function(chunk, e, cb) { crc32 = X.buf(chunk, crc32); cb(); }; +writable._writev = function(chunks, cb) { + chunks.forEach(function(c) { crc32 = X.buf(c.chunk, crc32);}); + cb(); +}; +writable.on('finish', function() { + if(fmt === "") console.log(crc32); + else try { console.log(require("printj").sprintf(fmt, crc32)); } catch(e) { + switch(fmt) { + case "%d": console.log(crc32); break; + case "%u": console.log(crc32 >>> 0); break; + case "%0.8x": console.log((crc32 >>> 0).toString(16).padStart(8, "0").toLowerCase()); break; + case "%0.8X": console.log((crc32 >>> 0).toString(16).padStart(8, "0").toUpperCase()); break; + } + } +}); + +if(filename === "-") process.stdin.pipe(writable); +else if(fs.existsSync(filename)) fs.createReadStream(filename).pipe(writable); +else die("crc32: " + filename + ": No such file or directory", 2); diff --git a/node_backend/node_modules/crc-32/crc32.js b/node_backend/node_modules/crc-32/crc32.js new file mode 100644 index 0000000000000000000000000000000000000000..c92664a7216b7993ea01baafe0e8488736c0e8c3 --- /dev/null +++ b/node_backend/node_modules/crc-32/crc32.js @@ -0,0 +1,115 @@ +/*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */ +/* vim: set ts=2: */ +/*exported CRC32 */ +var CRC32; +(function (factory) { + /*jshint ignore:start */ + /*eslint-disable */ + if(typeof DO_NOT_EXPORT_CRC === 'undefined') { + if('object' === typeof exports) { + factory(exports); + } else if ('function' === typeof define && define.amd) { + define(function () { + var module = {}; + factory(module); + return module; + }); + } else { + factory(CRC32 = {}); + } + } else { + factory(CRC32 = {}); + } + /*eslint-enable */ + /*jshint ignore:end */ +}(function(CRC32) { +CRC32.version = '1.2.2'; +/*global Int32Array */ +function signed_crc_table() { + var c = 0, table = new Array(256); + + for(var n =0; n != 256; ++n){ + c = n; + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1)); + table[n] = c; + } + + return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table; +} + +var T0 = signed_crc_table(); +function slice_by_16_tables(T) { + var c = 0, v = 0, n = 0, table = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ; + + for(n = 0; n != 256; ++n) table[n] = T[n]; + for(n = 0; n != 256; ++n) { + v = T[n]; + for(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF]; + } + var out = []; + for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); + return out; +} +var TT = slice_by_16_tables(T0); +var T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4]; +var T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9]; +var Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14]; +function crc32_bstr(bstr, seed) { + var C = seed ^ -1; + for(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF]; + return ~C; +} + +function crc32_buf(B, seed) { + var C = seed ^ -1, L = B.length - 15, i = 0; + for(; i < L;) C = + Tf[B[i++] ^ (C & 255)] ^ + Te[B[i++] ^ ((C >> 8) & 255)] ^ + Td[B[i++] ^ ((C >> 16) & 255)] ^ + Tc[B[i++] ^ (C >>> 24)] ^ + Tb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^ + T7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^ + T3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]]; + L += 15; + while(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF]; + return ~C; +} + +function crc32_str(str, seed) { + var C = seed ^ -1; + for(var i = 0, L = str.length, c = 0, d = 0; i < L;) { + c = str.charCodeAt(i++); + if(c < 0x80) { + C = (C>>>8) ^ T0[(C^c)&0xFF]; + } else if(c < 0x800) { + C = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF]; + } else if(c >= 0xD800 && c < 0xE000) { + c = (c&1023)+64; d = str.charCodeAt(i++)&1023; + C = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF]; + } else { + C = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF]; + } + } + return ~C; +} +CRC32.table = T0; +// $FlowIgnore +CRC32.bstr = crc32_bstr; +// $FlowIgnore +CRC32.buf = crc32_buf; +// $FlowIgnore +CRC32.str = crc32_str; +})); diff --git a/node_backend/node_modules/crc-32/crc32c.js b/node_backend/node_modules/crc-32/crc32c.js new file mode 100644 index 0000000000000000000000000000000000000000..447fc8f7b96b5a789d9ede04133a54381d12016e --- /dev/null +++ b/node_backend/node_modules/crc-32/crc32c.js @@ -0,0 +1,115 @@ +/*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */ +/* vim: set ts=2: */ +/*exported CRC32C */ +var CRC32C; +(function (factory) { + /*jshint ignore:start */ + /*eslint-disable */ + if(typeof DO_NOT_EXPORT_CRC === 'undefined') { + if('object' === typeof exports) { + factory(exports); + } else if ('function' === typeof define && define.amd) { + define(function () { + var module = {}; + factory(module); + return module; + }); + } else { + factory(CRC32C = {}); + } + } else { + factory(CRC32C = {}); + } + /*eslint-enable */ + /*jshint ignore:end */ +}(function(CRC32C) { +CRC32C.version = '1.2.2'; +/*global Int32Array */ +function signed_crc_table() { + var c = 0, table = new Array(256); + + for(var n =0; n != 256; ++n){ + c = n; + c = ((c&1) ? (-2097792136 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-2097792136 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-2097792136 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-2097792136 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-2097792136 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-2097792136 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-2097792136 ^ (c >>> 1)) : (c >>> 1)); + c = ((c&1) ? (-2097792136 ^ (c >>> 1)) : (c >>> 1)); + table[n] = c; + } + + return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table; +} + +var T0 = signed_crc_table(); +function slice_by_16_tables(T) { + var c = 0, v = 0, n = 0, table = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ; + + for(n = 0; n != 256; ++n) table[n] = T[n]; + for(n = 0; n != 256; ++n) { + v = T[n]; + for(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF]; + } + var out = []; + for(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256); + return out; +} +var TT = slice_by_16_tables(T0); +var T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4]; +var T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9]; +var Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14]; +function crc32_bstr(bstr, seed) { + var C = seed ^ -1; + for(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF]; + return ~C; +} + +function crc32_buf(B, seed) { + var C = seed ^ -1, L = B.length - 15, i = 0; + for(; i < L;) C = + Tf[B[i++] ^ (C & 255)] ^ + Te[B[i++] ^ ((C >> 8) & 255)] ^ + Td[B[i++] ^ ((C >> 16) & 255)] ^ + Tc[B[i++] ^ (C >>> 24)] ^ + Tb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^ + T7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^ + T3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]]; + L += 15; + while(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF]; + return ~C; +} + +function crc32_str(str, seed) { + var C = seed ^ -1; + for(var i = 0, L = str.length, c = 0, d = 0; i < L;) { + c = str.charCodeAt(i++); + if(c < 0x80) { + C = (C>>>8) ^ T0[(C^c)&0xFF]; + } else if(c < 0x800) { + C = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF]; + } else if(c >= 0xD800 && c < 0xE000) { + c = (c&1023)+64; d = str.charCodeAt(i++)&1023; + C = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF]; + } else { + C = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF]; + C = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF]; + } + } + return ~C; +} +CRC32C.table = T0; +// $FlowIgnore +CRC32C.bstr = crc32_bstr; +// $FlowIgnore +CRC32C.buf = crc32_buf; +// $FlowIgnore +CRC32C.str = crc32_str; +})); diff --git a/node_backend/node_modules/crc-32/package.json b/node_backend/node_modules/crc-32/package.json new file mode 100644 index 0000000000000000000000000000000000000000..a523291a51cd24de8b628c917152d01aef2bf615 --- /dev/null +++ b/node_backend/node_modules/crc-32/package.json @@ -0,0 +1,43 @@ +{ + "name": "crc-32", + "version": "1.2.2", + "author": "sheetjs", + "description": "Pure-JS CRC-32", + "keywords": [ "crc", "crc32", "checksum" ], + "bin": { + "crc32": "bin/crc32.njs" + }, + "main": "crc32.js", + "types": "types/index.d.ts", + "typesVersions": { "*": { "*": ["types/index.d.ts" ] } }, + "dependencies": { + }, + "devDependencies": { + "printj": "~1.3.1", + "exit-on-epipe": "~1.0.1", + "mocha": "~2.5.3", + "blanket": "~1.2.3", + "codepage": "~1.10.0", + "@sheetjs/uglify-js": "~2.7.3", + "@types/node": "^8.0.7", + "dtslint": "^0.1.2", + "typescript": "2.2.0" + }, + "repository": { "type": "git", "url": "git://github.com/SheetJS/js-crc32.git" }, + "scripts": { + "test": "make test", + "build": "make", + "lint": "make fullint", + "dtslint": "dtslint types" + }, + "config": { + "blanket": { + "pattern": "crc32.js" + } + }, + "homepage": "https://sheetjs.com/", + "files": ["crc32.js", "crc32c.js", "bin/crc32.njs", "LICENSE", "README.md", "types/index.d.ts", "types/*.json"], + "bugs": { "url": "https://github.com/SheetJS/js-crc32/issues" }, + "license": "Apache-2.0", + "engines": { "node": ">=0.8" } +} diff --git a/node_backend/node_modules/crc-32/types/index.d.ts b/node_backend/node_modules/crc-32/types/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..163869007563cdf0f8a01f5de95891e1195f9cf7 --- /dev/null +++ b/node_backend/node_modules/crc-32/types/index.d.ts @@ -0,0 +1,14 @@ +/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */ +// TypeScript Version: 2.2 + +/** Version string */ +export const version: string; + +/** Process a node buffer or byte array */ +export function buf(data: number[] | Uint8Array, seed?: number): number; + +/** Process a binary string */ +export function bstr(data: string, seed?: number): number; + +/** Process a JS string based on the UTF8 encoding */ +export function str(data: string, seed?: number): number; diff --git a/node_backend/node_modules/crc-32/types/tsconfig.json b/node_backend/node_modules/crc-32/types/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..6e122c7794cdb3c83a2190ccdf9c6b14783ca0dc --- /dev/null +++ b/node_backend/node_modules/crc-32/types/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ "es5" ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": false, + "baseUrl": ".", + "paths": { "crc-32": ["."] }, + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/node_backend/node_modules/crc-32/types/tslint.json b/node_backend/node_modules/crc-32/types/tslint.json new file mode 100644 index 0000000000000000000000000000000000000000..d9401a976295deb60716b947854dfaa721491694 --- /dev/null +++ b/node_backend/node_modules/crc-32/types/tslint.json @@ -0,0 +1,11 @@ +{ + "extends": "dtslint/dtslint.json", + "rules": { + "whitespace": false, + "no-sparse-arrays": false, + "only-arrow-functions": false, + "no-consecutive-blank-lines": false, + "prefer-conditional-expression": false, + "one-variable-per-declaration": false + } +} diff --git a/node_backend/node_modules/crc32-stream/CHANGELOG.md b/node_backend/node_modules/crc32-stream/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..466dd070533c0d8c19963a7df17eb8705050faf3 --- /dev/null +++ b/node_backend/node_modules/crc32-stream/CHANGELOG.md @@ -0,0 +1,59 @@ +## Changelog + +**4.0.3** — _September 2, 2023_ — [Diff](https://github.com/archiverjs/node-crc32-stream/compare/4.0.2...4.0.3) + +**4.0.2** — _February 3, 2021_ — [Diff](https://github.com/archiverjs/node-crc32-stream/compare/4.0.1...4.0.2) + +### Bug Fixes + +- fix DeflateCRC32Stream to support Node.js 15.6.0+ (#31) (#32) + +### Maintenance + +- Bump actions/setup-node from v2.1.2 to v2.1.4 (#30) + +**4.0.1** — _November 18, 2020_ — [Diff](https://github.com/archiverjs/node-crc32-stream/compare/4.0.0...4.0.1) + +### Bug Fixes + +- use crc-32 rather than crc module (#28) + +### Maintenance + +- Bump mocha from 8.2.0 to 8.2.1 (#25) +- Bump actions/checkout from v2.3.2 to v2.3.4 (#26) +- Bump actions/setup-node from v2.1.1 to v2.1.2 (#23) +- Bump mocha from 8.1.1 to 8.2.0 (#24) +- Bump mocha from 8.1.0 to 8.1.1 (#18) +- Bump actions/checkout from v2.3.1 to v2.3.2 (#19) +- Bump mocha from 8.0.1 to 8.1.0 (#17) +- Bump actions/setup-node from v2.1.0 to v2.1.1 (#16) + +**4.0.0** — _July 18, 2020_ — [Diff](https://github.com/archiverjs/node-crc32-stream/compare/3.0.1...4.0.0) + +* Bump actions/checkout from v1 to v2.3.1 (#13) @dependabot +* Bump readable-stream from 3.4.0 to 3.6.0 (#15) @dependabot +* Bump mocha from 6.2.0 to 8.0.1 (#14) @dependabot +* Bump actions/setup-node from v1 to v2.1.0 (#12) @dependabot +* remove support for node < 10 (#11) @ctalkington + +**3.0.1** — _August 2, 2019_ — [Diff](https://github.com/archiverjs/node-crc32-stream/compare/3.0.0...3.0.1) + +- update dependencies + +**3.0.0** — _April 29, 2019_ — [Diff](https://github.com/archiverjs/node-crc32-stream/compare/2.0.0...3.0.0) + +- Require Node.js 6.9, update dependencies, use modern JS syntax (GH #10) +- Do not use the deprecated Buffer() constructor (GH #8) +- remove node v0.10 and v0.12 support + +**2.0.0** — _February 13, 2017_ — [Diff](https://github.com/archiverjs/node-crc32-stream/compare/1.0.1...2.0.0) + +- adopt nodejs core Hash API (GH #4) + +**1.0.1** — _January 12, 2016_ — [Diff](https://github.com/archiverjs/node-crc32-stream/compare/1.0.0...1.0.1) + +- Switch to node-crc for performance (GH #3) +- bump deps to ensure latest versions are used. + +[Release Archive](https://github.com/archiverjs/node-crc32-stream/releases) diff --git a/node_backend/node_modules/crc32-stream/LICENSE b/node_backend/node_modules/crc32-stream/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..56420a6a06bd156003ce69970b50c67176f2afe5 --- /dev/null +++ b/node_backend/node_modules/crc32-stream/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 Chris Talkington, contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_backend/node_modules/crc32-stream/README.md b/node_backend/node_modules/crc32-stream/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d91c90f0bdaca2d2a745e3f58e193c0ce1bbd110 --- /dev/null +++ b/node_backend/node_modules/crc32-stream/README.md @@ -0,0 +1,79 @@ +# CRC32 Stream + +crc32-stream is a streaming CRC32 checksumer. It uses the [crc](https://www.npmjs.org/package/crc) module behind the scenes to reliably handle binary data and fancy character sets. Data is passed through untouched. + +### Install + +```bash +npm install crc32-stream --save +``` + +You can also use `npm install https://github.com/archiverjs/node-crc32-stream/archive/master.tar.gz` to test upcoming versions. + +### Usage + +#### CRC32Stream + +Inherits [Transform Stream](http://nodejs.org/api/stream.html#stream_class_stream_transform) options and methods. + +```js +const {CRC32Stream} = require('crc32-stream'); + +const source = fs.createReadStream('file.txt'); +const checksum = new CRC32Stream(); + +checksum.on('end', function(err) { + // do something with checksum.digest() here +}); + +// either pipe it +source.pipe(checksum); + +// or write it +checksum.write('string'); +checksum.end(); +``` + +#### DeflateCRC32Stream + +Inherits [zlib.DeflateRaw](http://nodejs.org/api/zlib.html#zlib_class_zlib_deflateraw) options and methods. + +```js +const {DeflateCRC32Stream} = require('crc32-stream'); + +const source = fs.createReadStream('file.txt'); +const checksum = new DeflateCRC32Stream(); + +checksum.on('end', function(err) { + // do something with checksum.digest() here +}); + +// either pipe it +source.pipe(checksum); + +// or write it +checksum.write('string'); +checksum.end(); +``` + +### Instance API + +#### digest() + +Returns the checksum digest in unsigned form. + +#### hex() + +Returns the hexadecimal representation of the checksum digest. (ie E81722F0) + +#### size(compressed) + +Returns the raw size/length of passed-through data. + +If `compressed` is `true`, it returns compressed length instead. (DeflateCRC32Stream) + +## Things of Interest + +- [Changelog](https://github.com/archiverjs/node-crc32-stream/releases) +- [Contributing](https://github.com/archiverjs/node-crc32-stream/blob/master/CONTRIBUTING.md) +- [MIT License](https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT) diff --git a/node_backend/node_modules/crc32-stream/lib/crc32-stream.js b/node_backend/node_modules/crc32-stream/lib/crc32-stream.js new file mode 100644 index 0000000000000000000000000000000000000000..7942ecc9c6c621f6b392ba4acb32bfebdc0c3c0e --- /dev/null +++ b/node_backend/node_modules/crc32-stream/lib/crc32-stream.js @@ -0,0 +1,48 @@ +/** + * node-crc32-stream + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT + */ + + 'use strict'; + +const {Transform} = require('readable-stream'); + +const crc32 = require('crc-32'); + +class CRC32Stream extends Transform { + constructor(options) { + super(options); + this.checksum = Buffer.allocUnsafe(4); + this.checksum.writeInt32BE(0, 0); + + this.rawSize = 0; + } + + _transform(chunk, encoding, callback) { + if (chunk) { + this.checksum = crc32.buf(chunk, this.checksum) >>> 0; + this.rawSize += chunk.length; + } + + callback(null, chunk); + } + + digest(encoding) { + const checksum = Buffer.allocUnsafe(4); + checksum.writeUInt32BE(this.checksum >>> 0, 0); + return encoding ? checksum.toString(encoding) : checksum; + } + + hex() { + return this.digest('hex').toUpperCase(); + } + + size() { + return this.rawSize; + } +} + +module.exports = CRC32Stream; diff --git a/node_backend/node_modules/crc32-stream/lib/deflate-crc32-stream.js b/node_backend/node_modules/crc32-stream/lib/deflate-crc32-stream.js new file mode 100644 index 0000000000000000000000000000000000000000..899315ebf0ba15cf10691735c3d52d94b7f92148 --- /dev/null +++ b/node_backend/node_modules/crc32-stream/lib/deflate-crc32-stream.js @@ -0,0 +1,62 @@ +/** + * node-crc32-stream + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT + */ + +'use strict'; + +const {DeflateRaw} = require('zlib'); + +const crc32 = require('crc-32'); + +class DeflateCRC32Stream extends DeflateRaw { + constructor(options) { + super(options); + + this.checksum = Buffer.allocUnsafe(4); + this.checksum.writeInt32BE(0, 0); + + this.rawSize = 0; + this.compressedSize = 0; + } + + push(chunk, encoding) { + if (chunk) { + this.compressedSize += chunk.length; + } + + return super.push(chunk, encoding); + } + + _transform(chunk, encoding, callback) { + if (chunk) { + this.checksum = crc32.buf(chunk, this.checksum) >>> 0; + this.rawSize += chunk.length; + } + + super._transform(chunk, encoding, callback) + } + + digest(encoding) { + const checksum = Buffer.allocUnsafe(4); + checksum.writeUInt32BE(this.checksum >>> 0, 0); + return encoding ? checksum.toString(encoding) : checksum; + } + + hex() { + return this.digest('hex').toUpperCase(); + } + + size(compressed = false) { + if (compressed) { + return this.compressedSize; + } else { + return this.rawSize; + } + } +} + +module.exports = DeflateCRC32Stream; diff --git a/node_backend/node_modules/crc32-stream/lib/index.js b/node_backend/node_modules/crc32-stream/lib/index.js new file mode 100644 index 0000000000000000000000000000000000000000..8e154ecd33661c0d7d813eda3edda15547a47cde --- /dev/null +++ b/node_backend/node_modules/crc32-stream/lib/index.js @@ -0,0 +1,14 @@ +/** + * node-crc32-stream + * + * Copyright (c) 2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-crc32-stream/blob/master/LICENSE-MIT + */ + +'use strict'; + +module.exports = { + CRC32Stream: require('./crc32-stream'), + DeflateCRC32Stream: require('./deflate-crc32-stream') +} diff --git a/node_backend/node_modules/crc32-stream/package.json b/node_backend/node_modules/crc32-stream/package.json new file mode 100644 index 0000000000000000000000000000000000000000..3038d318621df86e063ea44a32567796585d4a01 --- /dev/null +++ b/node_backend/node_modules/crc32-stream/package.json @@ -0,0 +1,45 @@ +{ + "name": "crc32-stream", + "version": "4.0.3", + "description": "a streaming CRC32 checksumer", + "homepage": "https://github.com/archiverjs/node-crc32-stream", + "author": { + "name": "Chris Talkington", + "url": "http://christalkington.com/" + }, + "repository": { + "type": "git", + "url": "https://github.com/archiverjs/node-crc32-stream.git" + }, + "bugs": { + "url": "https://github.com/archiverjs/node-crc32-stream/issues" + }, + "license": "MIT", + "main": "lib/index.js", + "files": [ + "lib" + ], + "engines": { + "node": ">= 10" + }, + "scripts": { + "test": "mocha --reporter dot" + }, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "devDependencies": { + "chai": "4.3.8", + "mocha": "9.2.2" + }, + "keywords": [ + "crc32-stream", + "crc32", + "stream", + "checksum" + ], + "publishConfig": { + "registry": "https://registry.npmjs.org/" + } +} diff --git a/node_backend/node_modules/dayjs/.editorconfig b/node_backend/node_modules/dayjs/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..d4d73cf570ec43dc0823b27315c36b05b5365cbc --- /dev/null +++ b/node_backend/node_modules/dayjs/.editorconfig @@ -0,0 +1,7 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_size = 2 diff --git a/node_backend/node_modules/dayjs/CHANGELOG.md b/node_backend/node_modules/dayjs/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..5b0244ba7730b85824ce15b1d66fe52184a71b3f --- /dev/null +++ b/node_backend/node_modules/dayjs/CHANGELOG.md @@ -0,0 +1,947 @@ +## [1.11.13](https://github.com/iamkun/dayjs/compare/v1.11.12...v1.11.13) (2024-08-20) + + +### Bug Fixes + +* customParseFormat supports Q quter / w ww weekOfYear ([#2705](https://github.com/iamkun/dayjs/issues/2705)) ([8ca74f1](https://github.com/iamkun/dayjs/commit/8ca74f178eff4bb4eb686676cf35fe7edb815536)) + +## [1.11.12](https://github.com/iamkun/dayjs/compare/v1.11.11...v1.11.12) (2024-07-18) + + +### Bug Fixes + +* Add NegativeYear Plugin support ([#2640](https://github.com/iamkun/dayjs/issues/2640)) ([6a42e0d](https://github.com/iamkun/dayjs/commit/6a42e0d7398639238f575d51287daaf4d495a2a3)) +* add UTC support to negativeYear plugin ([#2692](https://github.com/iamkun/dayjs/issues/2692)) ([f3ef705](https://github.com/iamkun/dayjs/commit/f3ef705613af83333fe132b470896a65e12f31b0)) +* Fix zero offset issue when use tz with locale ([#2532](https://github.com/iamkun/dayjs/issues/2532)) ([d0e6738](https://github.com/iamkun/dayjs/commit/d0e6738a66e1b65d3706aad2f9168ebb43d4f887)) +* Improve typing for min/max plugin ([#2573](https://github.com/iamkun/dayjs/issues/2573)) ([4fbe94a](https://github.com/iamkun/dayjs/commit/4fbe94aaba8c815a42cf4d23dabac918ec50e68c)) +* timezone plugin correct parse UTC tz ([#2693](https://github.com/iamkun/dayjs/issues/2693)) ([b575c81](https://github.com/iamkun/dayjs/commit/b575c81a8c9c85c7a0baf6f608a12f9d3ba95bd1)) + +## [1.11.11](https://github.com/iamkun/dayjs/compare/v1.11.10...v1.11.11) (2024-04-28) + + +### Bug Fixes + +* day of week type literal ([#2630](https://github.com/iamkun/dayjs/issues/2630)) ([f68d73e](https://github.com/iamkun/dayjs/commit/f68d73efe562fdedd9e288ecb0ce6565e602f507)) +* improve locale "zh-hk" format and meridiem ([#2419](https://github.com/iamkun/dayjs/issues/2419)) ([a947a51](https://github.com/iamkun/dayjs/commit/a947a5171aad5695eaf593bc95fe073de0f0894a)) +* Update 'da' locale to match correct first week of year ([#2592](https://github.com/iamkun/dayjs/issues/2592)) ([44b0936](https://github.com/iamkun/dayjs/commit/44b0936ad709212b63e48672d8b9c225e2c3b830)) +* update locale Bulgarian monthsShort Jan ([#2538](https://github.com/iamkun/dayjs/issues/2538)) ([f0c9a41](https://github.com/iamkun/dayjs/commit/f0c9a41c6ec91528f3790e442b0c5dff15a4e640)) + +## [1.11.10](https://github.com/iamkun/dayjs/compare/v1.11.9...v1.11.10) (2023-09-19) + + +### Bug Fixes + +* Add Korean Day of Month with ordinal ([#2395](https://github.com/iamkun/dayjs/issues/2395)) ([dd55ee2](https://github.com/iamkun/dayjs/commit/dd55ee2aadd1009242235e47d558bbf028827896)) +* change back fa locale to the Gregorian calendar equivalent ([#2411](https://github.com/iamkun/dayjs/issues/2411)) ([95e9458](https://github.com/iamkun/dayjs/commit/95e9458b221fe35e59ee4a160a5db247313a68fb)) +* duration plugin - MILLISECONDS_A_MONTH const calculation ([#2362](https://github.com/iamkun/dayjs/issues/2362)) ([f0a0b54](https://github.com/iamkun/dayjs/commit/f0a0b546b074b3b511c2319a1ce83d412894b91f)) +* duration plugin getter get result 0 instead of undefined ([#2369](https://github.com/iamkun/dayjs/issues/2369)) ([061aa7e](https://github.com/iamkun/dayjs/commit/061aa7ed6c31696974665fc9b11a74d30841ebed)) +* fix isDayjs check logic ([#2383](https://github.com/iamkun/dayjs/issues/2383)) ([5f3f878](https://github.com/iamkun/dayjs/commit/5f3f8786c796cd432fe6bcb6966a810daea89203)) +* fix timezone plugin to get correct locale setting ([#2420](https://github.com/iamkun/dayjs/issues/2420)) ([4f45012](https://github.com/iamkun/dayjs/commit/4f4501256fa1bc72128aae1d841bbd782df86aed)) +* **locale:** add meridiem in `ar` locale ([#2418](https://github.com/iamkun/dayjs/issues/2418)) ([361be5c](https://github.com/iamkun/dayjs/commit/361be5c7c628614ee833d710acbe154a598b904d)) +* round durations to millisecond precision for ISO string ([#2367](https://github.com/iamkun/dayjs/issues/2367)) ([890a17a](https://github.com/iamkun/dayjs/commit/890a17a8d8ddd43c7c8b806e3afc7b27f3288d27)) +* sub-second precisions need to be rounded at the seconds field to avoid adding floats ([#2377](https://github.com/iamkun/dayjs/issues/2377)) ([a9d7d03](https://github.com/iamkun/dayjs/commit/a9d7d0398d22ebd4bfc3812ca0134a97606d54d9)) +* update $x logic to avoid plugin error ([#2429](https://github.com/iamkun/dayjs/issues/2429)) ([2254635](https://github.com/iamkun/dayjs/commit/22546357f30924fcff3b3ffa14fd04be21f97a5e)) +* Update Slovenian locale for relative time ([#2396](https://github.com/iamkun/dayjs/issues/2396)) ([5470a15](https://github.com/iamkun/dayjs/commit/5470a15e437fac803797363063b24f3ba3bd5299)) +* update uzbek language translation ([#2327](https://github.com/iamkun/dayjs/issues/2327)) ([0a91056](https://github.com/iamkun/dayjs/commit/0a910564d76dc7c128da8e0d85d8e11ebdb5660b)) + +## [1.11.9](https://github.com/iamkun/dayjs/compare/v1.11.8...v1.11.9) (2023-07-01) + + +### Bug Fixes + +* Add null to min and max plugin return type ([#2355](https://github.com/iamkun/dayjs/issues/2355)) ([62d9042](https://github.com/iamkun/dayjs/commit/62d9042eb84b78d78324694ccbeaad1679d37e68)) +* check if null passed to objectSupport parser ([#2175](https://github.com/iamkun/dayjs/issues/2175)) ([013968f](https://github.com/iamkun/dayjs/commit/013968f609c32e2269df69b4dd1feb2e8e1e035a)) +* dayjs.diff improve performance ([#2244](https://github.com/iamkun/dayjs/issues/2244)) ([33c80e1](https://github.com/iamkun/dayjs/commit/33c80e14cf14f70ceb4f54639e266cd70a3c3996)) +* dayjs(null) throws error, not return dayjs object as invalid date ([#2334](https://github.com/iamkun/dayjs/issues/2334)) ([c79e2f5](https://github.com/iamkun/dayjs/commit/c79e2f5d03eef5660b1f13385b69c0c9668d2f98)) +* objectSupport plugin causes an error when null is passed to dayjs function (closes [#2277](https://github.com/iamkun/dayjs/issues/2277)) ([#2342](https://github.com/iamkun/dayjs/issues/2342)) ([89bf31c](https://github.com/iamkun/dayjs/commit/89bf31ce0a36dcfc892029dc019d85d3654cf5fb)) +* Optimize format method ([#2313](https://github.com/iamkun/dayjs/issues/2313)) ([1fe1b1d](https://github.com/iamkun/dayjs/commit/1fe1b1d9a214d3b8c9f267b432801424a493f1c4)) +* update Duration plugin add/subtract take into account days in month ([#2337](https://github.com/iamkun/dayjs/issues/2337)) ([3b1060f](https://github.com/iamkun/dayjs/commit/3b1060f92183ab3a3c49289c2d87fbdd34c1eacc)) +* update MinMax plugin 1. ignore the 'null' in args 2. return the only one arg ([#2330](https://github.com/iamkun/dayjs/issues/2330)) ([3c2c6ee](https://github.com/iamkun/dayjs/commit/3c2c6ee4db00bbb43a7a3bb0b56bc0d0f03daddc)) + +## [1.11.8](https://github.com/iamkun/dayjs/compare/v1.11.7...v1.11.8) (2023-06-02) + + +### Bug Fixes + +* .format add padding to 'YYYY' ([#2231](https://github.com/iamkun/dayjs/issues/2231)) ([00c223b](https://github.com/iamkun/dayjs/commit/00c223b7e92970d07557133994fcb225a6d4c960)) +* Added .valueOf method to Duration class ([#2226](https://github.com/iamkun/dayjs/issues/2226)) ([9b4fcfd](https://github.com/iamkun/dayjs/commit/9b4fcfde35b39693894be1821b6c7222fac98657)) +* timezone type mark `date` parameter as optional ([#2222](https://github.com/iamkun/dayjs/issues/2222)) ([b87aa0e](https://github.com/iamkun/dayjs/commit/b87aa0ed9a748c478a66ef48230cd1d6350d7b8a)) +* type file first parameter date is optional in isSame(), isBefore(), isAfter() ([#2272](https://github.com/iamkun/dayjs/issues/2272)) ([4d56f3e](https://github.com/iamkun/dayjs/commit/4d56f3eb2b3770879d60f824590bf1b32f237d47)) + +## [1.11.7](https://github.com/iamkun/dayjs/compare/v1.11.6...v1.11.7) (2022-12-06) + + +### Bug Fixes + +* Add locale (zh-tw) meridiem ([#2149](https://github.com/iamkun/dayjs/issues/2149)) ([1e9ba76](https://github.com/iamkun/dayjs/commit/1e9ba761ff4e3f2759106dfe1aa9054d5826451c)) +* update fa locale ([#2151](https://github.com/iamkun/dayjs/issues/2151)) ([1c26732](https://github.com/iamkun/dayjs/commit/1c267321a1a01b4947e1482bac67d67ebc7c3dfa)) + +## [1.11.6](https://github.com/iamkun/dayjs/compare/v1.11.5...v1.11.6) (2022-10-21) + + +### Bug Fixes + +* add BigIntSupport plugin ([#2087](https://github.com/iamkun/dayjs/issues/2087)) ([f6dce48](https://github.com/iamkun/dayjs/commit/f6dce48a9e39677718b087867d9fd901d5078155)) +* Fix objectSupport collides with Duration plugin - issue [#2027](https://github.com/iamkun/dayjs/issues/2027) ([#2038](https://github.com/iamkun/dayjs/issues/2038)) ([c9370ea](https://github.com/iamkun/dayjs/commit/c9370ea96bf420439ee7eaa4146e8ed643160312)) + +## [1.11.5](https://github.com/iamkun/dayjs/compare/v1.11.4...v1.11.5) (2022-08-12) + + +### Bug Fixes + +* ordinal for nl not working ([#2011](https://github.com/iamkun/dayjs/issues/2011)) ([c93c85e](https://github.com/iamkun/dayjs/commit/c93c85eaa11564a1aae2d823480a417812c01bf4)) +* wrong ordinal for french locale ([#2010](https://github.com/iamkun/dayjs/issues/2010)) ([dd192a7](https://github.com/iamkun/dayjs/commit/dd192a72fc5d26ce56481e89b0c1ccf5f939be0c)) + +## [1.11.4](https://github.com/iamkun/dayjs/compare/v1.11.3...v1.11.4) (2022-07-19) + + +### Bug Fixes + +* correct past property in ku (kurdish) locale ([#1916](https://github.com/iamkun/dayjs/issues/1916)) ([74e82b9](https://github.com/iamkun/dayjs/commit/74e82b9da5ec8b90361fc27ac7c8b63faf354502)) +* fix French [fr] local ordinal ([#1932](https://github.com/iamkun/dayjs/issues/1932)) ([8f09834](https://github.com/iamkun/dayjs/commit/8f09834a88b8e7f8353c6e7473d4711596890a8c)) +* fix objectSupport plugin ConfigTypeMap type ([#1441](https://github.com/iamkun/dayjs/issues/1441)) ([#1990](https://github.com/iamkun/dayjs/issues/1990)) ([fd51fe4](https://github.com/iamkun/dayjs/commit/fd51fe4f7fa799d8c598343e71fa59299ec4cf93)) +* fix type error to add ordianl property in InstanceLocaleDataReturn and GlobalLocaleDataReturn types ([#1931](https://github.com/iamkun/dayjs/issues/1931)) ([526f0ae](https://github.com/iamkun/dayjs/commit/526f0ae549ffbeeb9ef1099ca23964791fc59743)) +* update locale ar-* meridiem function ([#1954](https://github.com/iamkun/dayjs/issues/1954)) ([3d31611](https://github.com/iamkun/dayjs/commit/3d316117f04362d31f4e8bd349620b8414ce5d0c)) +* zh-tw / zh-hk locale ordinal error ([#1976](https://github.com/iamkun/dayjs/issues/1976)) ([0a1bd08](https://github.com/iamkun/dayjs/commit/0a1bd08e736be7d4e378aaca280caa6543f8066d)) + +## [1.11.3](https://github.com/iamkun/dayjs/compare/v1.11.2...v1.11.3) (2022-06-06) + + +### Bug Fixes + +* customParseFormat plugin to parse comma as a separator character ([#1913](https://github.com/iamkun/dayjs/issues/1913)) ([41b1405](https://github.com/iamkun/dayjs/commit/41b1405971e099431211ae6c2a100cd797da4427)) +* update Dutch [nl] locale ordinal ([#1908](https://github.com/iamkun/dayjs/issues/1908)) ([5da98f8](https://github.com/iamkun/dayjs/commit/5da98f8085d2d2847d79e38c795082703a14f24b)) + +## [1.11.2](https://github.com/iamkun/dayjs/compare/v1.11.1...v1.11.2) (2022-05-06) + + +### Bug Fixes + +* add OpUnitType (week) to quarterOfYear startOf/endOf types ([#1865](https://github.com/iamkun/dayjs/issues/1865)) ([400bc3e](https://github.com/iamkun/dayjs/commit/400bc3e8915e0c58e7abbfd3a1235364b1abaf3e)) +* Fix type issue with ManipulateType ([#1864](https://github.com/iamkun/dayjs/issues/1864)) ([d033dfc](https://github.com/iamkun/dayjs/commit/d033dfcfc1d2ced39b2733898e8d85ad5984c9e9)) +* fix UTC plugin .valueOf not taking DST into account ([#1448](https://github.com/iamkun/dayjs/issues/1448)) ([27d1c50](https://github.com/iamkun/dayjs/commit/27d1c506100ae6624f258c21cc06b24768ced733)) + +## [1.11.1](https://github.com/iamkun/dayjs/compare/v1.11.0...v1.11.1) (2022-04-15) + + +### Bug Fixes + +* add Bengali (Bangladesh) [bn-bd] locale ([#1806](https://github.com/iamkun/dayjs/issues/1806)) ([840ed76](https://github.com/iamkun/dayjs/commit/840ed76eedc085afefc4dedd05f31d44196b63b0)) +* refactor replace deprecated String.prototype.substr() ([#1836](https://github.com/iamkun/dayjs/issues/1836)) ([627fa39](https://github.com/iamkun/dayjs/commit/627fa393e4daf83c92431162dbe18534b23fcbae)) +* Update German [de] locale, adds the abbreviations for month including a . in the end, as in September -> Sept. ([#1831](https://github.com/iamkun/dayjs/issues/1831)) ([4e2802c](https://github.com/iamkun/dayjs/commit/4e2802cc3bec2941ffb737a15fb531c90951eafe)) +* update Italian (Switzerland) [it-ch] locale relativeTime ([#1829](https://github.com/iamkun/dayjs/issues/1829)) ([8e6d11d](https://github.com/iamkun/dayjs/commit/8e6d11d053393d97bee1ba411adb2d82de1a58c4)) +* update Kurdish [ku] locale strings and formatted output contains non-standard kurdish characters ([#1848](https://github.com/iamkun/dayjs/issues/1848)) ([a597d0b](https://github.com/iamkun/dayjs/commit/a597d0b1b8dd28e626f8c59d326622088f7b51e7)) +* update locale bo [Tibetan]: corrected the orders in formats ([#1823](https://github.com/iamkun/dayjs/issues/1823)) ([e790516](https://github.com/iamkun/dayjs/commit/e79051617af6787358f6c9b5443d987b8b53a9e1)) + +# [1.11.0](https://github.com/iamkun/dayjs/compare/v1.10.8...v1.11.0) (2022-03-14) + + +### Bug Fixes + +* Add Kirundi (rn) locale ([#1793](https://github.com/iamkun/dayjs/issues/1793)) ([74e5247](https://github.com/iamkun/dayjs/commit/74e5247227a779fffde39bdfcd1ee19911496709)) +* add missing date shorthand D type definition ([#1752](https://github.com/iamkun/dayjs/issues/1752)) ([b045baf](https://github.com/iamkun/dayjs/commit/b045baf1646a81f7e4f446f355d02d5fb0ef4aa7)) +* Add relative time to Galician (gl) and fix ordinals ([#1800](https://github.com/iamkun/dayjs/issues/1800)) ([dcbf170](https://github.com/iamkun/dayjs/commit/dcbf1708400624addfbddbc71e0f6a9ac15fa961)) +* update German locales (de-at, de-ch) ([#1775](https://github.com/iamkun/dayjs/issues/1775)) ([f9055a7](https://github.com/iamkun/dayjs/commit/f9055a77bf3d84c575e5fcf99e21611138ba64d7)) +* update Icelandic [is] locale relativeTime config ([#1796](https://github.com/iamkun/dayjs/issues/1796)) ([76f9e17](https://github.com/iamkun/dayjs/commit/76f9e1756de7e99c01e471dab30ea074b9ec9629)) +* Update index.d.ts note ([#1716](https://github.com/iamkun/dayjs/issues/1716)) ([5a108ff](https://github.com/iamkun/dayjs/commit/5a108ff3159c53fd270ea7638f33c35c934d6457)) +* Update locale German [de] monthsShort ([#1746](https://github.com/iamkun/dayjs/issues/1746)) ([4a7b7d0](https://github.com/iamkun/dayjs/commit/4a7b7d07c885bb9338514c234dbb708e24e9863e)) +* update meridiem function to Kurdish (ku) locale ([#1725](https://github.com/iamkun/dayjs/issues/1725)) ([efd3904](https://github.com/iamkun/dayjs/commit/efd3904ff8cbf0a4fc064911dda76fc86b669f7b)) +* update updateLocal plugin typescript types ([#1692](https://github.com/iamkun/dayjs/issues/1692)) ([c7a3f73](https://github.com/iamkun/dayjs/commit/c7a3f73064dbb63b4d365b2ad4c792f075f4d8d8)) + + +### Features + +* Fallback to language only locale + support uppercase locales ([#1524](https://github.com/iamkun/dayjs/issues/1524)) ([9138dc2](https://github.com/iamkun/dayjs/commit/9138dc28206875372da4fb74c64716437cd11b95)) + +## [1.10.8](https://github.com/iamkun/dayjs/compare/v1.10.7...v1.10.8) (2022-02-28) + + +### Bug Fixes + +* set locale pt, pt-br correct weekdays and months ([#1697](https://github.com/iamkun/dayjs/issues/1697)) ([e019301](https://github.com/iamkun/dayjs/commit/e01930171c8235f58a114236f146086428f99569)) + +## [1.10.7](https://github.com/iamkun/dayjs/compare/v1.10.6...v1.10.7) (2021-09-10) + + +### Bug Fixes + +* Add Spanish (Mexico) [es-mx] locale ([#1614](https://github.com/iamkun/dayjs/issues/1614)) ([3393f2a](https://github.com/iamkun/dayjs/commit/3393f2ad55346d55902683a2e31c6f253d96c8c2)) +* Add Arabic (Iraq) [ar-iq] locale ([#1627](https://github.com/iamkun/dayjs/issues/1627)) ([b5a1391](https://github.com/iamkun/dayjs/commit/b5a1391011b247d08863d291542db5937b23b427)) +* add format object type to type file ([#1572](https://github.com/iamkun/dayjs/issues/1572)) ([5a79cc6](https://github.com/iamkun/dayjs/commit/5a79cc6408e825d9e123629eb44fc19c996d7751)) +* duration plugin when parsing duration from ISO string, set missing components to 0 instead of NaN ([#1611](https://github.com/iamkun/dayjs/issues/1611)) ([252585b](https://github.com/iamkun/dayjs/commit/252585b4b2bd59508150e21bb994908a9d78f9b0)) +* narrow type for `add` and `subtract` ([#1576](https://github.com/iamkun/dayjs/issues/1576)) ([1686962](https://github.com/iamkun/dayjs/commit/16869621b1a42563064dbf87f80c1ebfd74c1188)) +* update customParseFormat plugin strict x X parsing ([#1571](https://github.com/iamkun/dayjs/issues/1571)) ([08adda5](https://github.com/iamkun/dayjs/commit/08adda54edbcca38601f57841921d0f87f84e49e)) +* update Lithuanian [lt] locale spelling for single month ([#1609](https://github.com/iamkun/dayjs/issues/1609)) ([255dc54](https://github.com/iamkun/dayjs/commit/255dc54d9295de135a9037ce6ca13cae4bfd2cfb)) +* Update Norwegian Bokmål [nb] local yearStart 4 ([#1608](https://github.com/iamkun/dayjs/issues/1608)) ([7a8467c](https://github.com/iamkun/dayjs/commit/7a8467c0b7d59821f7e19d4a6973bcda8e4c19b1)) +* update plugin advancedFormat `isValid` validation ([#1566](https://github.com/iamkun/dayjs/issues/1566)) ([755fc8b](https://github.com/iamkun/dayjs/commit/755fc8bb1c532eb991459f180eee81367d12016c)) +* update Sinhalese [si] locale month name ([#1475](https://github.com/iamkun/dayjs/issues/1475)) ([63de2a8](https://github.com/iamkun/dayjs/commit/63de2a8b7dcd7e68c132c85d88572d4c9d296907)) +* update utcOffset plugin type file ([#1604](https://github.com/iamkun/dayjs/issues/1604)) ([f68e4b1](https://github.com/iamkun/dayjs/commit/f68e4b1a29fc33542f74cde10ec6d9fb045ca37e)) + +## [1.10.6](https://github.com/iamkun/dayjs/compare/v1.10.5...v1.10.6) (2021-07-06) + + +### Bug Fixes + +* add invalid date string override ([#1465](https://github.com/iamkun/dayjs/issues/1465)) ([#1470](https://github.com/iamkun/dayjs/issues/1470)) ([06f88f4](https://github.com/iamkun/dayjs/commit/06f88f425828b1ce96b737332d25145a95a4ee9d)) +* add sv-fi Finland Swedish locale ([#1522](https://github.com/iamkun/dayjs/issues/1522)) ([8e32164](https://github.com/iamkun/dayjs/commit/8e32164855cff724642e24c37a631eb4c4d760c8)) +* customParseFormat support parsing X x timestamp ([#1567](https://github.com/iamkun/dayjs/issues/1567)) ([eb087f5](https://github.com/iamkun/dayjs/commit/eb087f52861313b8dd8a5c1b77858665ec72859e)) +* dayjs ConfigTypeMap add null & undefined ([#1560](https://github.com/iamkun/dayjs/issues/1560)) ([b5e40e6](https://github.com/iamkun/dayjs/commit/b5e40e6f16abeaea6a0facfa466d20aefaa8a444)) +* Fix DayOfYear plugin when using BadMutable plugin ([#1511](https://github.com/iamkun/dayjs/issues/1511)) ([0b0c6a3](https://github.com/iamkun/dayjs/commit/0b0c6a31ec9c0aff991b0e8dd6eed116201274cc)) +* Implement ordinal in Bulgarian translation (fixes [#1501](https://github.com/iamkun/dayjs/issues/1501)) ([#1502](https://github.com/iamkun/dayjs/issues/1502)) ([b728da5](https://github.com/iamkun/dayjs/commit/b728da5ed9ed08210004ed20ce5fcd52a92de7da)) +* more strict delimiter in REGEX_PARSE ([#1555](https://github.com/iamkun/dayjs/issues/1555)) ([bfdab5c](https://github.com/iamkun/dayjs/commit/bfdab5c0d45a5736b68e8e1b1354fc021e05f607)) +* parameter type ([#1549](https://github.com/iamkun/dayjs/issues/1549)) ([f369844](https://github.com/iamkun/dayjs/commit/f369844dd69d253c4c7cbf68150939db3db233be)) +* update customParseFormat plugin to custom two-digit year parse function ([#1421](https://github.com/iamkun/dayjs/issues/1421)) ([bb5df55](https://github.com/iamkun/dayjs/commit/bb5df55cd3975dc7638b8f4e762afa470b6620f7)) +* update names of weekdays and months in Bulgarian [bg] to lowercase ([#1438](https://github.com/iamkun/dayjs/issues/1438)) ([b246210](https://github.com/iamkun/dayjs/commit/b24621091fec9cf6704de21e4b323f6f0c4abbf1)) +* update type file `.diff` ([#1505](https://github.com/iamkun/dayjs/issues/1505)) ([6508494](https://github.com/iamkun/dayjs/commit/6508494a4e62977b4397baaeef293d1bcf3c7235)) +* update UTC plugin type file for strict parsing ([#1443](https://github.com/iamkun/dayjs/issues/1443)) ([b4f28df](https://github.com/iamkun/dayjs/commit/b4f28df219fe63202dffdbeeaec5677c4d2c9111)) + +## [1.10.5](https://github.com/iamkun/dayjs/compare/v1.10.4...v1.10.5) (2021-05-26) + + +### Bug Fixes + +* add meridiem in ar locales ([#1375](https://github.com/iamkun/dayjs/issues/1375)) ([319f616](https://github.com/iamkun/dayjs/commit/319f616e572a03b984013d04d1b3a18ffd5b1190)) +* Added Zulu support to customParseFormat ([#1359](https://github.com/iamkun/dayjs/issues/1359)) ([1138a3f](https://github.com/iamkun/dayjs/commit/1138a3f0a76592c6d72fb86c4399e133fa41e2ec)) +* fix Bengali [bn] locale monthsShort error ([a0e6c0c](https://github.com/iamkun/dayjs/commit/a0e6c0cf3e1828020dfa11432c6716990f6ed5e0)) +* fix missing types for ArraySupport plugin ([#1401](https://github.com/iamkun/dayjs/issues/1401)) ([b1abdc4](https://github.com/iamkun/dayjs/commit/b1abdc40ee6c9d18ff46c311a114e0755677ea6f)) +* fix Ukrainian [uk] locale ([#1463](https://github.com/iamkun/dayjs/issues/1463)) ([0fdac93](https://github.com/iamkun/dayjs/commit/0fdac93ff2531542301b76952be9b084b2e2dfa0)) +* hotfix for `Duration` types ([#1357](https://github.com/iamkun/dayjs/issues/1357)) ([855b7b3](https://github.com/iamkun/dayjs/commit/855b7b3d049a3903794f91db3419f167c00dabd2)), closes [#1354](https://github.com/iamkun/dayjs/issues/1354) +* timezone plugin DST error ([#1352](https://github.com/iamkun/dayjs/issues/1352)) ([71bed15](https://github.com/iamkun/dayjs/commit/71bed155edf32bff24379930ac684fc783538d8f)) +* Update duration plugin change string to number ([#1394](https://github.com/iamkun/dayjs/issues/1394)) ([e1546d1](https://github.com/iamkun/dayjs/commit/e1546d1a0cdb97ae92cf11efe61d94707af6a3a3)) +* update Duration plugin to support no-argument ([#1400](https://github.com/iamkun/dayjs/issues/1400)) ([8d9a5ae](https://github.com/iamkun/dayjs/commit/8d9a5ae0749e1b4e76babd4deeaa3b1d9776c29b)) +* Update Finnish [fi] locale to set yearStart ([#1378](https://github.com/iamkun/dayjs/issues/1378)) ([f3370bd](https://github.com/iamkun/dayjs/commit/f3370bda4e435118f714c8a7daf5c88cfc4b69ba)) +* update Russian [ru] locale meridiem and unit tests ([#1403](https://github.com/iamkun/dayjs/issues/1403)) ([f10f39d](https://github.com/iamkun/dayjs/commit/f10f39de7db70244a3c35e4a421090a12972457b)) +* update Russian [ru] locale yearStart config ([#1372](https://github.com/iamkun/dayjs/issues/1372)) ([5052515](https://github.com/iamkun/dayjs/commit/5052515fe35b2444201ef8ef87220b1876a94d0a)) +* update Slovenian [sl] locale to set correct ordinal ([#1386](https://github.com/iamkun/dayjs/issues/1386)) ([cb4f746](https://github.com/iamkun/dayjs/commit/cb4f74633b3020d6dbf19548c8cb13613dafca18)) +* update Spanish [es] locale to change month names to lowercase ([#1414](https://github.com/iamkun/dayjs/issues/1414)) ([9c20e77](https://github.com/iamkun/dayjs/commit/9c20e77caf7b1b5eccf418175203b198d4e29535)) +* update Swedish [sv] locale to set correct yearStart ([#1385](https://github.com/iamkun/dayjs/issues/1385)) ([66c5935](https://github.com/iamkun/dayjs/commit/66c59354964ef456bcd5f6152819618f44978082)) +* update UTC plugin to support string argument like +HH:mm ([#1395](https://github.com/iamkun/dayjs/issues/1395)) ([656127c](https://github.com/iamkun/dayjs/commit/656127cc44eda50923a1ac755602863fc32b9e69)) + +## [1.10.4](https://github.com/iamkun/dayjs/compare/v1.10.3...v1.10.4) (2021-01-22) + + +### Bug Fixes + +* Correct handling negative duration ([#1317](https://github.com/iamkun/dayjs/issues/1317)) ([3f5c085](https://github.com/iamkun/dayjs/commit/3f5c085608182472f20b84766b10949945663e44)) +* Improve `Duration` types ([#1338](https://github.com/iamkun/dayjs/issues/1338)) ([4aca4b1](https://github.com/iamkun/dayjs/commit/4aca4b1b584a15de1146d929f95c944594032f20)) +* parse a string for MMM month format with underscore delimiter ([#1349](https://github.com/iamkun/dayjs/issues/1349)) ([82ef9a3](https://github.com/iamkun/dayjs/commit/82ef9a304f06287ac0a14c4da9a7fe6152b5fec9)) +* Update Bengali [bn] locale ([#1329](https://github.com/iamkun/dayjs/issues/1329)) ([02d96ec](https://github.com/iamkun/dayjs/commit/02d96ec7189f62d6ef8987135919cbb5ceff20a6)) +* update locale Portuguese [pt] yearStart ([#1345](https://github.com/iamkun/dayjs/issues/1345)) ([5c785d5](https://github.com/iamkun/dayjs/commit/5c785d528cc08811638d7cbfc7fc158d67b32d75)) +* update Polish [pl] locale yearStart ([#1348](https://github.com/iamkun/dayjs/issues/1348)) ([e93e6b8](https://github.com/iamkun/dayjs/commit/e93e6b8ffa61036b26382f1763e3864d4a7d5df5)) +* Update Slovenian [sl] relativeTime locale ([#1333](https://github.com/iamkun/dayjs/issues/1333)) ([fe5f1d0](https://github.com/iamkun/dayjs/commit/fe5f1d0afbe57b70339e268047e6c3028ca3d59b)) + +## [1.10.3](https://github.com/iamkun/dayjs/compare/v1.10.2...v1.10.3) (2021-01-09) + + +### Bug Fixes + +* fix customParseFormat plugin strict mode parse meridiem bug ([#1321](https://github.com/iamkun/dayjs/issues/1321)) ([e49eeef](https://github.com/iamkun/dayjs/commit/e49eeefbe8acb36419d36ca2e7ed8bc152f73ac1)) +* fix weekYear plugin missing locale bug ([#1319](https://github.com/iamkun/dayjs/issues/1319)) ([344bdc0](https://github.com/iamkun/dayjs/commit/344bdc0eed6843edb05723dc7853a41833d88f08)), closes [#1304](https://github.com/iamkun/dayjs/issues/1304) +* update advancedFormat plugin to add format options for iso week and weekyear ([#1309](https://github.com/iamkun/dayjs/issues/1309)) ([2c54c64](https://github.com/iamkun/dayjs/commit/2c54c6441871a175ac9b95e41e4cd075dbac10cb)) +* update devHelper to add dev warning setting locale before loading ([c5cc893](https://github.com/iamkun/dayjs/commit/c5cc89355e1e206ca72433c19c40cb528690b04f)) +* update German [de] locale yearStart ([1858df8](https://github.com/iamkun/dayjs/commit/1858df8008de56570680723df89b36a8cbc970ef)), closes [#1264](https://github.com/iamkun/dayjs/issues/1264) + +## [1.10.2](https://github.com/iamkun/dayjs/compare/v1.10.1...v1.10.2) (2021-01-05) + + +### Bug Fixes + +* fix parse regex bug ([#1307](https://github.com/iamkun/dayjs/issues/1307)) ([db2b6a5](https://github.com/iamkun/dayjs/commit/db2b6a5ea8e70f9fda645d113ca33495aa96b616)), closes [#1305](https://github.com/iamkun/dayjs/issues/1305) +* remove module entry in package.json to revert 1.10.1 change ([#1314](https://github.com/iamkun/dayjs/issues/1314)) ([824dcb8](https://github.com/iamkun/dayjs/commit/824dcb8dfcccf14f64b6a2741a00fcdfe53dcd98)) +* update devHelper add warning "passing Year as a Number will be parsed as a Unix timestamp" ([#1315](https://github.com/iamkun/dayjs/issues/1315)) ([b0dda31](https://github.com/iamkun/dayjs/commit/b0dda3139e25441ab4e7c1f4f192dee0ecce6ef8)) + +## [1.10.1](https://github.com/iamkun/dayjs/compare/v1.10.0...v1.10.1) (2021-01-03) + + +### Bug Fixes + +* fix typescript type error UnitTypeLongPlural ([#1302](https://github.com/iamkun/dayjs/issues/1302)) ([bfaabe4](https://github.com/iamkun/dayjs/commit/bfaabe4f398c11564eca6cda7c8aded22e1b231a)), closes [#1300](https://github.com/iamkun/dayjs/issues/1300) + +# [1.10.0](https://github.com/iamkun/dayjs/compare/v1.9.8...v1.10.0) (2021-01-03) + + +### Bug Fixes + +* add ordinal to localeData plugin ([#1266](https://github.com/iamkun/dayjs/issues/1266)) ([fd229fa](https://github.com/iamkun/dayjs/commit/fd229fa5bd26bcba810e2535eb937ea8d99106c2)) +* add preParsePostFormat plugin & update Arabic [ar] locale ([#1255](https://github.com/iamkun/dayjs/issues/1255)) ([f2e4790](https://github.com/iamkun/dayjs/commit/f2e479006a9a49bc0917f8620101d40ac645f7f2)) +* add type support for plural forms of units ([#1289](https://github.com/iamkun/dayjs/issues/1289)) ([de49bb1](https://github.com/iamkun/dayjs/commit/de49bb100badfb92b9a5933cc568841f340a923f)) +* escape last period to match only milliseconds ([#1239](https://github.com/iamkun/dayjs/issues/1239)) ([#1295](https://github.com/iamkun/dayjs/issues/1295)) ([64037e6](https://github.com/iamkun/dayjs/commit/64037e6a8cf303dcfd2b954f309bd9691f87fffc)) + + +### Features + +* add ES6 Module Support, package.json module point to "esm/index.js" ([#1298](https://github.com/iamkun/dayjs/issues/1298)) ([f63375d](https://github.com/iamkun/dayjs/commit/f63375dea89becbd3bb2bb8ea7289c58c752bfed)), closes [#598](https://github.com/iamkun/dayjs/issues/598) [#313](https://github.com/iamkun/dayjs/issues/313) + +## [1.9.8](https://github.com/iamkun/dayjs/compare/v1.9.7...v1.9.8) (2020-12-27) + + +### Bug Fixes + +* fix Ukrainian [uk] locale typo ([1605cc0](https://github.com/iamkun/dayjs/commit/1605cc0f6fe0e9c46a92d529bc9cd6e130432337)) +* update Hebrew [he] locale for double units ([#1287](https://github.com/iamkun/dayjs/issues/1287)) ([1c4b0da](https://github.com/iamkun/dayjs/commit/1c4b0da1468522e59dc9ee646d10dd2b31477d99)) +* update zh locale meridiem "noon" ([0e7ff3d](https://github.com/iamkun/dayjs/commit/0e7ff3dd29ca3aed85cb76dfcb8298d326e26542)) +* update zh-cn locale definition of noon ([#1278](https://github.com/iamkun/dayjs/issues/1278)) ([d5930b9](https://github.com/iamkun/dayjs/commit/d5930b96ff884f4176ca3fcb1bc95e8f1ec75c71)) + +## [1.9.7](https://github.com/iamkun/dayjs/compare/v1.9.6...v1.9.7) (2020-12-05) + + +### Bug Fixes + +* add duration.format to format a Duration ([#1202](https://github.com/iamkun/dayjs/issues/1202)) ([9a859a1](https://github.com/iamkun/dayjs/commit/9a859a147ba223a1eeff0f2bb6f33d97e0ccc6c7)) +* Add function handling for relativeTime.future and relativeTime.past ([#1197](https://github.com/iamkun/dayjs/issues/1197)) ([ef1979c](https://github.com/iamkun/dayjs/commit/ef1979ce85c61fe2d759ef3c37cb6aaf2358094f)) +* avoid install installed plugin ([#1214](https://github.com/iamkun/dayjs/issues/1214)) ([a92eb6c](https://github.com/iamkun/dayjs/commit/a92eb6c4dc1437ec920e69484d52984f5921a8ea)) +* avoid memory leak after installing a plugin too many times ([b8d2e32](https://github.com/iamkun/dayjs/commit/b8d2e32a9eb59661a7ed6200daa070687becaebd)) +* fix diff bug when UTC plugin enabled ([#1201](https://github.com/iamkun/dayjs/issues/1201)) ([9544ed2](https://github.com/iamkun/dayjs/commit/9544ed2a6c466b8308d26b33a388a6737435a1f4)), closes [#1200](https://github.com/iamkun/dayjs/issues/1200) +* fix startOf/endOf bug in timezone plugin ([#1229](https://github.com/iamkun/dayjs/issues/1229)) ([eb5fbc4](https://github.com/iamkun/dayjs/commit/eb5fbc4c7d1b62a8615d2f263b404a9515d8e15c)) +* fix utc plugin diff edge case ([#1187](https://github.com/iamkun/dayjs/issues/1187)) ([971b3d4](https://github.com/iamkun/dayjs/commit/971b3d40b4c9403165138f1034e2223cd97c3abf)) +* update customParseFormat plugin to parse 2-digit offset ([#1209](https://github.com/iamkun/dayjs/issues/1209)) ([b56936a](https://github.com/iamkun/dayjs/commit/b56936ab77b8f6289a1b77d49307b495c4bf9f91)), closes [#1205](https://github.com/iamkun/dayjs/issues/1205) +* Update timezone plugin type definition ([#1221](https://github.com/iamkun/dayjs/issues/1221)) ([34cfb92](https://github.com/iamkun/dayjs/commit/34cfb920b9653ad44d4b31fe49e533692a3ce01b)) + +## [1.9.6](https://github.com/iamkun/dayjs/compare/v1.9.5...v1.9.6) (2020-11-10) + + +### Bug Fixes + +* fix customParseFormat plugin parsing date bug ([#1198](https://github.com/iamkun/dayjs/issues/1198)) ([50f05ad](https://github.com/iamkun/dayjs/commit/50f05ad3addf27827c5657ae7519514e40d9faec)), closes [#1194](https://github.com/iamkun/dayjs/issues/1194) +* Update lv (Latvian) locale relative time ([#1192](https://github.com/iamkun/dayjs/issues/1192)) ([6d6c684](https://github.com/iamkun/dayjs/commit/6d6c6841b13ba4f7e69de92caf132a3592c5253a)) + +## [1.9.5](https://github.com/iamkun/dayjs/compare/v1.9.4...v1.9.5) (2020-11-05) + + +### Bug Fixes + +* customParseFormat plugin supports parsing localizedFormats ([#1110](https://github.com/iamkun/dayjs/issues/1110)) ([402b603](https://github.com/iamkun/dayjs/commit/402b603aa3ee4199786950bc88b3fdc6b527aa35)) +* fix customParseFormat plugin parse meridiem bug ([#1169](https://github.com/iamkun/dayjs/issues/1169)) ([9e8f8d9](https://github.com/iamkun/dayjs/commit/9e8f8d96c69d557f4d267f42567c25ae9e7ab227)), closes [#1168](https://github.com/iamkun/dayjs/issues/1168) +* fix devHelper error in umd bundle in browser ([#1165](https://github.com/iamkun/dayjs/issues/1165)) ([d11b5ee](https://github.com/iamkun/dayjs/commit/d11b5ee7dc11af671355f65ccda00f6ba42cc725)) +* fix utc plugin diff bug in DST ([#1171](https://github.com/iamkun/dayjs/issues/1171)) ([f8da3fe](https://github.com/iamkun/dayjs/commit/f8da3fe7e50c84c0502bf5be0b364910922dbd79)), closes [#1097](https://github.com/iamkun/dayjs/issues/1097) [#1021](https://github.com/iamkun/dayjs/issues/1021) +* isoWeek plugin type ([#1177](https://github.com/iamkun/dayjs/issues/1177)) ([c3d0436](https://github.com/iamkun/dayjs/commit/c3d0436b06f74989e3a2c751a5d170f8072c4aad)) +* update localeData plugin to support meridiem ([#1174](https://github.com/iamkun/dayjs/issues/1174)) ([fdb09e4](https://github.com/iamkun/dayjs/commit/fdb09e4074cc7e8f6196846f18d3566c1f9e8fcd)), closes [#1172](https://github.com/iamkun/dayjs/issues/1172) +* update timezone plugin parse Date instance / timestamp logic & remove useless test ([#1183](https://github.com/iamkun/dayjs/issues/1183)) ([a7f858b](https://github.com/iamkun/dayjs/commit/a7f858bb70ad81f718ba35c479e84b54eace48b2)) + +## [1.9.4](https://github.com/iamkun/dayjs/compare/v1.9.3...v1.9.4) (2020-10-23) + + +### Bug Fixes + +* Add descriptions to types ([#1148](https://github.com/iamkun/dayjs/issues/1148)) ([9a407a1](https://github.com/iamkun/dayjs/commit/9a407a140b089345a387d1aceab4d0d1635229c7)) +* add devHelper plugin ([#1163](https://github.com/iamkun/dayjs/issues/1163)) ([de49dc8](https://github.com/iamkun/dayjs/commit/de49dc80c83b85de4170571b64412bd60ada221b)) +* Fix Hungarian (hu) locale ([#1112](https://github.com/iamkun/dayjs/issues/1112)) ([ab13754](https://github.com/iamkun/dayjs/commit/ab13754f43c5033dacaa0eb2042dc4ab1a7a2754)) +* fix minMax plugin parsing empty array bug ([#1062](https://github.com/iamkun/dayjs/issues/1062)) ([368108b](https://github.com/iamkun/dayjs/commit/368108bc6d5cb1542f711b8eba722bd4dfaab0cd)) +* update adding/subtracting Duration from Dayjs object ([#1156](https://github.com/iamkun/dayjs/issues/1156)) ([f861aca](https://github.com/iamkun/dayjs/commit/f861acac3e83e28d3a4a96312c71119fd6b544fc)) +* update en-NZ locale to use proper ordinal formatting function ([#1143](https://github.com/iamkun/dayjs/issues/1143)) ([fcdbc58](https://github.com/iamkun/dayjs/commit/fcdbc5880710456a29b2bacf250542230bf48b99)) +* update localeData plugin type ([#1116](https://github.com/iamkun/dayjs/issues/1116)) ([ee5a4ec](https://github.com/iamkun/dayjs/commit/ee5a4ec41edddfb57d103c35182dc635c9264a10)) +* update timezone plugin to support custom parse format ([#1160](https://github.com/iamkun/dayjs/issues/1160)) ([48cbf31](https://github.com/iamkun/dayjs/commit/48cbf3118ba5427de428777c2e025896db654f2e)), closes [#1159](https://github.com/iamkun/dayjs/issues/1159) +* update timezone plugin to support keepLocalTime ([#1161](https://github.com/iamkun/dayjs/issues/1161)) ([1d429e5](https://github.com/iamkun/dayjs/commit/1d429e5fe4467ebddcf81b43cf6f36e5e3be944c)), closes [#1149](https://github.com/iamkun/dayjs/issues/1149) + +## [1.9.3](https://github.com/iamkun/dayjs/compare/v1.9.2...v1.9.3) (2020-10-13) + + +### Bug Fixes + +* fix localizedFormat export error ([#1133](https://github.com/iamkun/dayjs/issues/1133)) ([deecd6a](https://github.com/iamkun/dayjs/commit/deecd6ab8a2f4173ee7046f6b568b41fd2677531)), closes [#1132](https://github.com/iamkun/dayjs/issues/1132) + +## [1.9.2](https://github.com/iamkun/dayjs/compare/v1.9.1...v1.9.2) (2020-10-13) + + +### Bug Fixes + +* add arraySupport plugin ([#1129](https://github.com/iamkun/dayjs/issues/1129)) ([be505c2](https://github.com/iamkun/dayjs/commit/be505c2c540261027342cecc55d8919a3d18d893)) +* export type of duration plugin ([#1094](https://github.com/iamkun/dayjs/issues/1094)) ([2c92e71](https://github.com/iamkun/dayjs/commit/2c92e71bf55d09601120cdf433da7a19cc8abff6)) +* Fix LocaleData plugin longDateFormat lowercase error ([#1101](https://github.com/iamkun/dayjs/issues/1101)) ([7937ccd](https://github.com/iamkun/dayjs/commit/7937ccdeac47d094a60e65ebb62a6020b81c46f4)) +* Fix objectSupport plugin bug in UTC ([#1107](https://github.com/iamkun/dayjs/issues/1107)) ([fe90bb6](https://github.com/iamkun/dayjs/commit/fe90bb6944f2ff1969ca975954d303b449dfa95b)), closes [#1105](https://github.com/iamkun/dayjs/issues/1105) +* fix Serbian locale grammar (sr, sr-cyrl) ([#1108](https://github.com/iamkun/dayjs/issues/1108)) ([cc87eff](https://github.com/iamkun/dayjs/commit/cc87eff8b75b0d86ce0956516319d402bccae6c0)) +* Fix typo for "monday" in arabic ([#1067](https://github.com/iamkun/dayjs/issues/1067)) ([2e1e426](https://github.com/iamkun/dayjs/commit/2e1e42650124f30282dc4d710798d576b928f1c7)) +* support dayjs.add(Duration), dayjs.subtract(Duration) ([#1099](https://github.com/iamkun/dayjs/issues/1099)) ([b1a0294](https://github.com/iamkun/dayjs/commit/b1a02942c5238203aaa04ce9a074c73742324ab7)) +* update Breton [br] locale relativeTime config ([#1103](https://github.com/iamkun/dayjs/issues/1103)) ([b038bfd](https://github.com/iamkun/dayjs/commit/b038bfdb128889d677c95534d2be29cc30c9e72f)) +* update Catalan [ca] locale ordinal ([73da380](https://github.com/iamkun/dayjs/commit/73da38024c8b550bdcfbe3ff7e578e742c7aecf2)) +* update German [de] locale relativeTime config ([#1109](https://github.com/iamkun/dayjs/issues/1109)) ([f6e771b](https://github.com/iamkun/dayjs/commit/f6e771b70f93d19ebb12e6b794aa4628a1796248)) +* update localeData plugin to add longDateFormat to global localeData ([#1106](https://github.com/iamkun/dayjs/issues/1106)) ([16937d1](https://github.com/iamkun/dayjs/commit/16937d16e053b8c1d4a607622fa2fdbfd9809832)) +* Update objectSupport plugin to return current date time while parsing empty object ([f56783e](https://github.com/iamkun/dayjs/commit/f56783e14d8cf50916b015e7188b23bb6fbca839)) + +## [1.9.1](https://github.com/iamkun/dayjs/compare/v1.9.0...v1.9.1) (2020-09-28) + + +### Bug Fixes + +* Fix objectSupport plugin to get the correct result (zero-based month) ([#1089](https://github.com/iamkun/dayjs/issues/1089)) ([f95ac15](https://github.com/iamkun/dayjs/commit/f95ac15a4577ae5a3d1ce353872a2cd9fc454bc2)) + +# [1.9.0](https://github.com/iamkun/dayjs/compare/v1.8.36...v1.9.0) (2020-09-28) + + +### Bug Fixes + +* Add `setDefault` typing to timezone.d.ts ([#1057](https://github.com/iamkun/dayjs/issues/1057)) ([c0f0886](https://github.com/iamkun/dayjs/commit/c0f088620f17260e6e3ebce7697d561b5623f5f3)) +* fix DST bug in utc plugin ([#1053](https://github.com/iamkun/dayjs/issues/1053)) ([3d73543](https://github.com/iamkun/dayjs/commit/3d7354361f042ced1176d91f9ae9edffe6173425)) +* Fix optional type for timezone plugin ([#1081](https://github.com/iamkun/dayjs/issues/1081)) ([a6ebcf2](https://github.com/iamkun/dayjs/commit/a6ebcf283a83273562dce5663155e3b3a12ea9a5)), closes [#1079](https://github.com/iamkun/dayjs/issues/1079) +* Fix timezone plugin conversion bug ([#1073](https://github.com/iamkun/dayjs/issues/1073)) ([16816a3](https://github.com/iamkun/dayjs/commit/16816a31ff43220aca9d1d179df6b729182abb55)) +* update duration plugin type file ([#1065](https://github.com/iamkun/dayjs/issues/1065)) ([94af9af](https://github.com/iamkun/dayjs/commit/94af9af27c5bc182cbb24f1845e561dd1d82d776)) +* update timezone plugin to support getting offset name e.g. EST ([#1069](https://github.com/iamkun/dayjs/issues/1069)) ([cbb755e](https://github.com/iamkun/dayjs/commit/cbb755e5c68d49c5678291f3ce832b32831a056e)) +* update utc plugin to support keepLocalTime `.utc(true)` ([#1080](https://github.com/iamkun/dayjs/issues/1080)) ([5ce4e0d](https://github.com/iamkun/dayjs/commit/5ce4e0d2f552f3645262537ff7afdc946f5a7e72)) + + +### Features + +* Correct casing for en-sg locale name ([#1048](https://github.com/iamkun/dayjs/issues/1048)) ([2edaddc](https://github.com/iamkun/dayjs/commit/2edaddc22a7eb914f915531f389766217acd7034)) + +## [1.8.36](https://github.com/iamkun/dayjs/compare/v1.8.35...v1.8.36) (2020-09-17) + + +### Bug Fixes + +* Add Amharic (am) locale ([#1046](https://github.com/iamkun/dayjs/issues/1046)) ([cdc49a1](https://github.com/iamkun/dayjs/commit/cdc49a1911c74b7ea96ed222f42796d53715cfed)) +* Export Duration type in duration plugin ([#1043](https://github.com/iamkun/dayjs/issues/1043)) ([0f20c3a](https://github.com/iamkun/dayjs/commit/0f20c3ac75d9ac1026a15a7bb343d3a150d9b30f)) +* Fix duration plugin parsing milliseconds bug ([#1042](https://github.com/iamkun/dayjs/issues/1042)) ([fe2301b](https://github.com/iamkun/dayjs/commit/fe2301b22318886aaa89ed1620e0a118e98c2b8a)) +* Timezone plugin set default timezone ([#1033](https://github.com/iamkun/dayjs/issues/1033)) ([0c2050a](https://github.com/iamkun/dayjs/commit/0c2050a152da708b01edd6150a5013f642b14576)) +* Timezone plugin should have the same behavior in latest ICU version ([#1032](https://github.com/iamkun/dayjs/issues/1032)) ([de31592](https://github.com/iamkun/dayjs/commit/de315921575cc50c38464b27d0338e30a54d8e2a)) +* Update Finnish (fi) locale ([#963](https://github.com/iamkun/dayjs/issues/963)) ([cf8b6a0](https://github.com/iamkun/dayjs/commit/cf8b6a096f24b54cbdb95675ac386d8ac85ea616)) +* Update Polish (pl) , Hungarian (hr) and Lithuanian (lt) localization ([#1045](https://github.com/iamkun/dayjs/issues/1045)) ([638fd39](https://github.com/iamkun/dayjs/commit/638fd394fc24f4188390faf387da6b156e7c6320)) + +## [1.8.35](https://github.com/iamkun/dayjs/compare/v1.8.34...v1.8.35) (2020-09-02) + + +### Bug Fixes + +* Fix BadMutable plugin bug in .diff ([#1023](https://github.com/iamkun/dayjs/issues/1023)) ([40ab6d9](https://github.com/iamkun/dayjs/commit/40ab6d9a53e8047cfca63c611c25dd045372d021)) +* fix LocaleData plugin to support instance.weekdays() API ([#1019](https://github.com/iamkun/dayjs/issues/1019)) ([a09d259](https://github.com/iamkun/dayjs/commit/a09d259a407b81d1cb6bb5623fad551c775d8674)), closes [#1017](https://github.com/iamkun/dayjs/issues/1017) +* Update Dutch (nl) locale to set correct yearStart ([1533a2c](https://github.com/iamkun/dayjs/commit/1533a2cc1475270032da2d87b19fc3d62327e6e3)) + +## [1.8.34](https://github.com/iamkun/dayjs/compare/v1.8.33...v1.8.34) (2020-08-20) + + +### Bug Fixes + +* Fix Timezone plugin to preserve milliseconds while changing timezone ([#1003](https://github.com/iamkun/dayjs/issues/1003)) ([5f446ed](https://github.com/iamkun/dayjs/commit/5f446eda770fa97e895c81a8195b3ba5d082cef0)), closes [#1002](https://github.com/iamkun/dayjs/issues/1002) +* support parsing unlimited decimals of millisecond ([#1010](https://github.com/iamkun/dayjs/issues/1010)) ([d1bdd36](https://github.com/iamkun/dayjs/commit/d1bdd36a56e3d1786523a180e3fc18068f609135)), closes [#544](https://github.com/iamkun/dayjs/issues/544) +* update Duration plugin to support global locale ([#1008](https://github.com/iamkun/dayjs/issues/1008)) ([1c49c83](https://github.com/iamkun/dayjs/commit/1c49c83e79811eede13db6372b5d65db598aee77)), closes [#1007](https://github.com/iamkun/dayjs/issues/1007) + +## [1.8.33](https://github.com/iamkun/dayjs/compare/v1.8.32...v1.8.33) (2020-08-10) + + +### Bug Fixes + +* Add PluralGetSet plugin for plural getters/setters ([#996](https://github.com/iamkun/dayjs/issues/996)) ([f76e3ce](https://github.com/iamkun/dayjs/commit/f76e3ce2fbe5d3e9ed9121086baf55eb0cc4d355)) +* Add typescript type defs in esm build ([#985](https://github.com/iamkun/dayjs/issues/985)) ([50e3b3c](https://github.com/iamkun/dayjs/commit/50e3b3c6719cb0b4ec6eff394dacd63d5db8f253)) +* Fix isoWeek Plugin cal bug in UTC mode ([#993](https://github.com/iamkun/dayjs/issues/993)) ([f2e5f32](https://github.com/iamkun/dayjs/commit/f2e5f327aaf12b4572296ec6e107ecc05fcf76e7)) +* Fix Timezone plugin parsing js date, Day.js object, timestamp bug && update type file ([#994](https://github.com/iamkun/dayjs/issues/994)) ([22f3d49](https://github.com/iamkun/dayjs/commit/22f3d49405da98db6da56d1673eebcd01b57554b)), closes [#992](https://github.com/iamkun/dayjs/issues/992) [#989](https://github.com/iamkun/dayjs/issues/989) +* Fix Timezone plugin UTCOffset rounding bug ([#987](https://github.com/iamkun/dayjs/issues/987)) ([b07182b](https://github.com/iamkun/dayjs/commit/b07182bbdf5aef7f6bf1e88fcd38432e2b8ee465)), closes [#986](https://github.com/iamkun/dayjs/issues/986) +* Fix UTC plugin bug while comparing an utc instance to a local one ([#995](https://github.com/iamkun/dayjs/issues/995)) ([747c0fb](https://github.com/iamkun/dayjs/commit/747c0fb4eba6353755b5dad3417fd8d5a408c378)) +* Update pt-br locale weekStart 0 ([#984](https://github.com/iamkun/dayjs/issues/984)) ([0f881c1](https://github.com/iamkun/dayjs/commit/0f881c18efb02b9d0ba7f76cba92bb504226fa95)) + +## [1.8.32](https://github.com/iamkun/dayjs/compare/v1.8.31...v1.8.32) (2020-08-04) + + +### Bug Fixes + +* Add Experimental Timezone Plugin ([#974](https://github.com/iamkun/dayjs/issues/974)) ([e69caba](https://github.com/iamkun/dayjs/commit/e69caba1b0957241a855aa0ae38db899fa2c3795)) +* fix parse date string error e.g. '2020/9/30' ([#980](https://github.com/iamkun/dayjs/issues/980)) ([231790d](https://github.com/iamkun/dayjs/commit/231790da62af0494732960c2c50d86ae9bf63ec6)), closes [#979](https://github.com/iamkun/dayjs/issues/979) +* update monthDiff function to get more accurate results ([19e8a7f](https://github.com/iamkun/dayjs/commit/19e8a7f2f7582b717f49d446822e39603694433c)) +* Update UTC plugin to support keepLocalTime ([#973](https://github.com/iamkun/dayjs/issues/973)) ([9f488e5](https://github.com/iamkun/dayjs/commit/9f488e5aca92f0b4c2951459436829d79f86d8d7)) + +## [1.8.31](https://github.com/iamkun/dayjs/compare/v1.8.30...v1.8.31) (2020-07-29) + + +### Bug Fixes + +* Rollback LocalePresetType to string ([#968](https://github.com/iamkun/dayjs/issues/968)) ([b342bd3](https://github.com/iamkun/dayjs/commit/b342bd3d84987d6c7587a0c4590d614fb0e670d7)) +* Update Regex to parse 'YYYY' correctly ([#969](https://github.com/iamkun/dayjs/issues/969)) ([70c1239](https://github.com/iamkun/dayjs/commit/70c123990dcc6bd479fa2b5d7f9985127872a826)) + +## [1.8.30](https://github.com/iamkun/dayjs/compare/v1.8.29...v1.8.30) (2020-07-22) + + +### Bug Fixes + +* Add Haitian Creole (ht) and Spanish Puerto Rico (es-pr) locale configs ([#958](https://github.com/iamkun/dayjs/issues/958)) ([b2642e2](https://github.com/iamkun/dayjs/commit/b2642e2d1f87734a34808c66e5176cb18bc0414d)) +* Fix UTC plugin wrong hour bug while adding month or year ([#957](https://github.com/iamkun/dayjs/issues/957)) ([28ae070](https://github.com/iamkun/dayjs/commit/28ae070024ff26685c88ce4cc8747307e86923c9)) +* Update French (fr) locale to set correct yearStart ([14ab808](https://github.com/iamkun/dayjs/commit/14ab808a7b7e226f2eb2cbe894916a18ed5d967d)), closes [#956](https://github.com/iamkun/dayjs/issues/956) + +## [1.8.29](https://github.com/iamkun/dayjs/compare/v1.8.28...v1.8.29) (2020-07-02) + + +### Bug Fixes + +* Duration plugin supports parse ISO string with week (W) ([#950](https://github.com/iamkun/dayjs/issues/950)) ([f0fc12a](https://github.com/iamkun/dayjs/commit/f0fc12adadcab53fb0577ad8f5e2f1cf784fd8f5)) +* LocaleData plugin supports locale order ([#938](https://github.com/iamkun/dayjs/issues/938)) ([62f429d](https://github.com/iamkun/dayjs/commit/62f429db73a0a069b1267231dea172b85f4b90e3)), closes [#936](https://github.com/iamkun/dayjs/issues/936) +* Update type definition to support array format ([#945](https://github.com/iamkun/dayjs/issues/945)) ([81d4740](https://github.com/iamkun/dayjs/commit/81d4740511d47e34f891b21afeb0449ef8a28688)), closes [#944](https://github.com/iamkun/dayjs/issues/944) +* Update type definition to support strict mode ([#951](https://github.com/iamkun/dayjs/issues/951)) ([8d54f3f](https://github.com/iamkun/dayjs/commit/8d54f3f7d4d161e72c767fa09699e70a2b3d681c)) + +## [1.8.28](https://github.com/iamkun/dayjs/compare/v1.8.27...v1.8.28) (2020-05-28) + + +### Bug Fixes + +* Fix CustomParseFormat plugin month index error ([#918](https://github.com/iamkun/dayjs/issues/918)) ([fa2ec7f](https://github.com/iamkun/dayjs/commit/fa2ec7fcb980dcd2c7498dafe2f9ca2e52d735cf)), closes [#915](https://github.com/iamkun/dayjs/issues/915) +* Update Ukrainian (uk) locale monthFormat and monthStandalone ([#899](https://github.com/iamkun/dayjs/issues/899)) ([a08756e](https://github.com/iamkun/dayjs/commit/a08756e80bd1d7126fca28c5ad9e382613fc86c4)) + +## [1.8.27](https://github.com/iamkun/dayjs/compare/v1.8.26...v1.8.27) (2020-05-14) + + +### Bug Fixes + +* Add Kinyarwanda (rw) locale ([#903](https://github.com/iamkun/dayjs/issues/903)) ([f355235](https://github.com/iamkun/dayjs/commit/f355235a836540d77880959fb1b614c87e9f7b3e)) +* Add plugin objectSupport ([#887](https://github.com/iamkun/dayjs/issues/887)) ([52dfb13](https://github.com/iamkun/dayjs/commit/52dfb13a6b84f0a753cc5761192b92416f440961)) +* Add Turkmen (tk) locale ([#893](https://github.com/iamkun/dayjs/issues/893)) ([a9ca8dc](https://github.com/iamkun/dayjs/commit/a9ca8dcbbd0964c5b9abb4e8a2d620c983cf091a)) +* Fix CustomParseFormat plugin set locale error ([#896](https://github.com/iamkun/dayjs/issues/896)) ([8035c8a](https://github.com/iamkun/dayjs/commit/8035c8a760549b631252252718db3cdc4ab2f68f)) +* Fix locale month function bug ([#908](https://github.com/iamkun/dayjs/issues/908)) ([bf347c3](https://github.com/iamkun/dayjs/commit/bf347c36e401f50727fb5afcc537497b54b90d6b)) +* Update CustomParseFormat plugin to support Array formats ([#906](https://github.com/iamkun/dayjs/issues/906)) ([97856c6](https://github.com/iamkun/dayjs/commit/97856c603ef5fbbeb1cf8a42387479e56a77dbe8)) + +## [1.8.26](https://github.com/iamkun/dayjs/compare/v1.8.25...v1.8.26) (2020-04-30) + + +### Bug Fixes + +* Fix Duration plugin `.toISOString` format bug ([#889](https://github.com/iamkun/dayjs/issues/889)) ([058d624](https://github.com/iamkun/dayjs/commit/058d624808fd2be024ae846bcb2e03885f39b556)), closes [#888](https://github.com/iamkun/dayjs/issues/888) +* Fix WeekOfYear plugin bug while using BadMutable plugin ([#884](https://github.com/iamkun/dayjs/issues/884)) ([2977438](https://github.com/iamkun/dayjs/commit/2977438458542573a4500e21f7ba5d1f8442960e)) +* Update CustomParseFormat plugin strict mode ([#882](https://github.com/iamkun/dayjs/issues/882)) ([db642ac](https://github.com/iamkun/dayjs/commit/db642ac73e52e00d8c41546b2935c9e691cf66e0)) +* Update RelativeTime plugin default config ([#883](https://github.com/iamkun/dayjs/issues/883)) ([0606f42](https://github.com/iamkun/dayjs/commit/0606f425aef8ccbfc3da3e43cba368130603b0cc)) + +## [1.8.25](https://github.com/iamkun/dayjs/compare/v1.8.24...v1.8.25) (2020-04-21) + + +### Bug Fixes + +* Fix CustomParseFormat plugin of parsing only YYYY / YYYY-MM bug ([#873](https://github.com/iamkun/dayjs/issues/873)) ([3cea04d](https://github.com/iamkun/dayjs/commit/3cea04d33d54d44bbdd3d026b5c7f67ebf176116)), closes [#849](https://github.com/iamkun/dayjs/issues/849) +* Fix Duration plugin get seconds ([#867](https://github.com/iamkun/dayjs/issues/867)) ([62b092d](https://github.com/iamkun/dayjs/commit/62b092d9f9a3db5506ef01f798bdf211f163f53f)) +* Fix type definition of locale ([9790b85](https://github.com/iamkun/dayjs/commit/9790b853e6113243a7f4a81dd12c6509e406a102)) +* Fix UTC plugin startOf, endOf bug ([#872](https://github.com/iamkun/dayjs/issues/872)) ([4141084](https://github.com/iamkun/dayjs/commit/4141084ba96d35cadcda3f1e661bf1d0f6c8e4de)), closes [#809](https://github.com/iamkun/dayjs/issues/809) [#808](https://github.com/iamkun/dayjs/issues/808) + +## [1.8.24](https://github.com/iamkun/dayjs/compare/v1.8.23...v1.8.24) (2020-04-10) + + +### Bug Fixes + +* Add config option to RelativeTime plugin ([#851](https://github.com/iamkun/dayjs/issues/851)) ([bd24034](https://github.com/iamkun/dayjs/commit/bd24034b95bfc656024b75ef3f3c986708845fed)) +* add Duration plugin ([#858](https://github.com/iamkun/dayjs/issues/858)) ([d568273](https://github.com/iamkun/dayjs/commit/d568273223199ca0497f238e2cc3a8d3dcf32d0f)) +* Add en-in, en-tt locales ([#855](https://github.com/iamkun/dayjs/issues/855)) ([c39fb96](https://github.com/iamkun/dayjs/commit/c39fb96e2a9102c14b004c14a6c073af9d266f2f)) +* add isToday, isTomorrow, isYesterday plugins ([#857](https://github.com/iamkun/dayjs/issues/857)) ([fc08ab6](https://github.com/iamkun/dayjs/commit/fc08ab68f8a28269802deeab9d6b0473b92cdc51)) +* Add option callback to Calendar plugin ([#839](https://github.com/iamkun/dayjs/issues/839)) ([b25be90](https://github.com/iamkun/dayjs/commit/b25be9094325295310c8fc5e617fb058be8a5f68)) +* Fix monthsShort for locale fr ([#862](https://github.com/iamkun/dayjs/issues/862)) ([d2de9a0](https://github.com/iamkun/dayjs/commit/d2de9a0b44b830038ed0094f79bfd40726311f2a)) +* Update Breton locale (br) meridiem config ([#856](https://github.com/iamkun/dayjs/issues/856)) ([a2a6672](https://github.com/iamkun/dayjs/commit/a2a66720abb788a8f1cffbfd0929b35579f29c72)) +* Update Ukrainian (uk) locale relative time ([#842](https://github.com/iamkun/dayjs/issues/842)) ([578bc1a](https://github.com/iamkun/dayjs/commit/578bc1a23c6e737783bbac3da12c0ed5d1edcf82)) + +## [1.8.23](https://github.com/iamkun/dayjs/compare/v1.8.22...v1.8.23) (2020-03-16) + + +### Bug Fixes + +* Add Chinese (zh) locale ([f9b8945](https://github.com/iamkun/dayjs/commit/f9b89453166d8b53d33b1d7eefd9942022552e6e)) +* Fix IsoWeek plugin typescript definition ([#828](https://github.com/iamkun/dayjs/issues/828)) ([30aab0c](https://github.com/iamkun/dayjs/commit/30aab0c7bce85dfac0ae208a891def30f88b5cb4)) +* Update Arabic (ar) locale relative time ([#836](https://github.com/iamkun/dayjs/issues/836)) ([14044c6](https://github.com/iamkun/dayjs/commit/14044c6fda1229e3f0e5473d3f886bd79589b15f)) +* Update Slovak (sk) locale, Czech (cs) locale ([#833](https://github.com/iamkun/dayjs/issues/833)) ([f0d451f](https://github.com/iamkun/dayjs/commit/f0d451f795e9ebf752cd854d51b25b11de2343a3)) +* Update Thai (th) locale relativeTime ([#826](https://github.com/iamkun/dayjs/issues/826)) ([63b7c03](https://github.com/iamkun/dayjs/commit/63b7c03a6dbb0507d60776e8bad6cccde3828b88)), closes [#816](https://github.com/iamkun/dayjs/issues/816) + +## [1.8.22](https://github.com/iamkun/dayjs/compare/v1.8.21...v1.8.22) (2020-03-08) + + +### Bug Fixes + +* Add IsoWeek plugin ([#811](https://github.com/iamkun/dayjs/issues/811)) ([28a2207](https://github.com/iamkun/dayjs/commit/28a2207ef9849afbac15dd29267b2e7a09cd3c16)) +* Fix unsupported locale fallback to previous one ([#819](https://github.com/iamkun/dayjs/issues/819)) ([4868715](https://github.com/iamkun/dayjs/commit/48687152cf5bee6a4c1b8ceea4bda8b9bab9be10)) + +## [1.8.21](https://github.com/iamkun/dayjs/compare/v1.8.20...v1.8.21) (2020-02-26) + + +### Bug Fixes + +* Set + Get accept 'D' as the short version of 'date' ([#795](https://github.com/iamkun/dayjs/issues/795)) ([523c038](https://github.com/iamkun/dayjs/commit/523c03880fa8bbad83214494ad02cd606cdb8b30)) +* Update DayOfYear plugin type ([#799](https://github.com/iamkun/dayjs/issues/799)) ([5809652](https://github.com/iamkun/dayjs/commit/5809652e40245b7759827d9bf317abdcfa75a330)) +* Update fi (Finnish) locale relativeTime ([#797](https://github.com/iamkun/dayjs/issues/797)) ([4a470fb](https://github.com/iamkun/dayjs/commit/4a470fbd6fef9e051727d0f26d53cc050b85935d)) + +## [1.8.20](https://github.com/iamkun/dayjs/compare/v1.8.19...v1.8.20) (2020-02-04) + + +### Bug Fixes + +* Add Bislama Locale (bi) ([#780](https://github.com/iamkun/dayjs/issues/780)) ([9ac6ab4](https://github.com/iamkun/dayjs/commit/9ac6ab481bc883dd4ecc02caab12c8b2fc218a42)) +* Fix weekOfYear plugin to support yearStart locale for better week number result ([#769](https://github.com/iamkun/dayjs/issues/769)) ([f00db36](https://github.com/iamkun/dayjs/commit/f00db36e70bc7beaca1abadeb30a9b1fbb3261ee)) +* Update et (Estonian) locale relativeTime ([#790](https://github.com/iamkun/dayjs/issues/790)) ([d8e0f45](https://github.com/iamkun/dayjs/commit/d8e0f45f6cd2d5e5704b9797929227454c92d1a5)) +* Update LocaleData plugin to support dayjs.localeData().weekdays() API ([287fed6](https://github.com/iamkun/dayjs/commit/287fed6db9eb4fd979b4861aca4dacbd32422533)), closes [#779](https://github.com/iamkun/dayjs/issues/779) +* Update LocaleData plugin to support dayjs.months dayjs.weekdays API ([144c2ae](https://github.com/iamkun/dayjs/commit/144c2ae6e15fbf89e3acd7c8cb9e237c5f6e1348)), closes [#779](https://github.com/iamkun/dayjs/issues/779) +* Update pl locale fusional config ([d372475](https://github.com/iamkun/dayjs/commit/d3724758bb27d5b17587b995ba14e7e80dcd1151)) + +## [1.8.19](https://github.com/iamkun/dayjs/compare/v1.8.18...v1.8.19) (2020-01-06) + + +### Bug Fixes + +* Add UpdateLocale plugin to update a locale's properties ([#766](https://github.com/iamkun/dayjs/issues/766)) ([82ce2ba](https://github.com/iamkun/dayjs/commit/82ce2ba8d7e402e40f6d005d400eb5356a0b0633)) +* Fix CustomParseFormat Plugin 'YYYY-MM' use first day of the month ([ba709ec](https://github.com/iamkun/dayjs/commit/ba709eca86a71ae648bc68bf67d9abdc229198d4)), closes [#761](https://github.com/iamkun/dayjs/issues/761) +* Fix CustomParseFormat Plugin to set correct locale ([66ce23f](https://github.com/iamkun/dayjs/commit/66ce23f2e18c5506e8f1a7ef20d3483a4df80087)) +* Fix WeekOfYear Plugin wrong calender week number bug ([79b86db](https://github.com/iamkun/dayjs/commit/79b86dbbf3cfd3f1e2165b3d479a7061ad1b6925)), closes [#760](https://github.com/iamkun/dayjs/issues/760) +* Update RelativeTime plugin to support function to make additional processing ([#767](https://github.com/iamkun/dayjs/issues/767)) ([4bd9250](https://github.com/iamkun/dayjs/commit/4bd9250fbe7131e2fddfb5fa1b3350e8c2262ca9)) +* Update ru, uk, cs locale to support relativeTime with plural ([3f080f7](https://github.com/iamkun/dayjs/commit/3f080f7d6bfdc4018cbb7c4d0112ff1ead4ef6b8)) + +## [1.8.18](https://github.com/iamkun/dayjs/compare/v1.8.17...v1.8.18) (2019-12-18) + + +### Bug Fixes + +* Add missing locale type definition ([#716](https://github.com/iamkun/dayjs/issues/716)) ([cde5d0b](https://github.com/iamkun/dayjs/commit/cde5d0b91be7b2f5f3098de4aa0b9a4f0f28ea5c)) +* Fix .locale() handel unsupported locale ([78ec173](https://github.com/iamkun/dayjs/commit/78ec173fcecc1299516ab7b44f4554d431b4b2fd)) +* Update Italian locale (it) ([#727](https://github.com/iamkun/dayjs/issues/727)) ([5b53e98](https://github.com/iamkun/dayjs/commit/5b53e98c0a3ba0eb9573a9c77caeb907439be9e7)) +* Update locale (fa) ([#733](https://github.com/iamkun/dayjs/issues/733)) ([9ad2e47](https://github.com/iamkun/dayjs/commit/9ad2e47e0569b23991bb0d5578f49c792c12df08)) +* Update locale (zh-cn) ([#706](https://github.com/iamkun/dayjs/issues/706)) ([e31e544](https://github.com/iamkun/dayjs/commit/e31e54414fb90e1f54da13a117748ba37f52645d)) +* Update locale (zh-cn) meridiem ([#735](https://github.com/iamkun/dayjs/issues/735)) ([15d1b81](https://github.com/iamkun/dayjs/commit/15d1b813e7faf5a1f9d1ea6fc673fd27ac49d8b1)) +* Update LocaleData plugin to support dayjs().longDateFormat() ([#734](https://github.com/iamkun/dayjs/issues/734)) ([aa0f210](https://github.com/iamkun/dayjs/commit/aa0f210a1e3c4f6aba61c3b96f9eb445b43a33f0)), closes [#680](https://github.com/iamkun/dayjs/issues/680) +* Update Mongolian (mn) locale relativeTime ([#753](https://github.com/iamkun/dayjs/issues/753)) ([6d51435](https://github.com/iamkun/dayjs/commit/6d51435092c0c94d8e50256d3f0f058cdd15febe)) +* Update Swedish locale (sv) fix ordinal error ([#745](https://github.com/iamkun/dayjs/issues/745)) ([49670d5](https://github.com/iamkun/dayjs/commit/49670d5ae31e4e21636cc5a8bfe35fef0f6d9e4a)), closes [#743](https://github.com/iamkun/dayjs/issues/743) + +## [1.8.17](https://github.com/iamkun/dayjs/compare/v1.8.16...v1.8.17) (2019-11-06) + + +### Bug Fixes + +* Fix set utcOffset in utc mode ([d148115](https://github.com/iamkun/dayjs/commit/d148115dad8f1a5afc0a64e9b8163dfeba4616b6)) +* Update advancedFormat plugin to support w ww wo week tokens … ([#678](https://github.com/iamkun/dayjs/issues/678)) ([26cfa63](https://github.com/iamkun/dayjs/commit/26cfa63a524b803f7966dac5464f9cbf8f63387e)), closes [#676](https://github.com/iamkun/dayjs/issues/676) +* Update ka locale weekdays ([f8ca3d4](https://github.com/iamkun/dayjs/commit/f8ca3d4ba1d3cbe41613d3909c0627935a51a0c4)) +* Update nb locale ([#679](https://github.com/iamkun/dayjs/issues/679)) ([1063b0e](https://github.com/iamkun/dayjs/commit/1063b0e1b5c19a1354d233cc0f21438e7073233a)) +* Update Polish locale (pl)([#713](https://github.com/iamkun/dayjs/issues/713)) ([30d2f02](https://github.com/iamkun/dayjs/commit/30d2f026b47188833a4f44fee4bab52467d4a718)) +* Update Ukrainian locale (uk) ([#710](https://github.com/iamkun/dayjs/issues/710)) ([360161c](https://github.com/iamkun/dayjs/commit/360161cac75f597fdd51d9d1ff138601282a1b4b)) +* UTC plugin set utcOffset value ([#668](https://github.com/iamkun/dayjs/issues/668)) ([8877883](https://github.com/iamkun/dayjs/commit/88778838e71dd309e79cd1a8094d5bea36ca3390)) + +## [1.8.16](https://github.com/iamkun/dayjs/compare/v1.8.15...v1.8.16) (2019-08-27) + + +### Bug Fixes + +* Fix relativeTime Plugin .FromNow() result error in UTC mode ([a385d5c](https://github.com/iamkun/dayjs/commit/a385d5c)) +* Handle locale in WeekOfYear plugin ([#658](https://github.com/iamkun/dayjs/issues/658)) ([0e45b0a](https://github.com/iamkun/dayjs/commit/0e45b0a)) +* LocaleData plugin returns all months and weekdays data when pas no argument ([#645](https://github.com/iamkun/dayjs/issues/645)) ([95e70b4](https://github.com/iamkun/dayjs/commit/95e70b4)) +* Return null in toJSON if not valid ([#633](https://github.com/iamkun/dayjs/issues/633)) ([19affc8](https://github.com/iamkun/dayjs/commit/19affc8)) +* Update Danish (da) locale ([#626](https://github.com/iamkun/dayjs/issues/626)) ([ac2ec77](https://github.com/iamkun/dayjs/commit/ac2ec77)) +* Update Korean locale meridiem ([#642](https://github.com/iamkun/dayjs/issues/642)) ([b457146](https://github.com/iamkun/dayjs/commit/b457146)) +* update Occitan locale Catalan locale ([#630](https://github.com/iamkun/dayjs/issues/630)) ([fef135e](https://github.com/iamkun/dayjs/commit/fef135e)) +* update pt-br locale ([#628](https://github.com/iamkun/dayjs/issues/628)) ([ccf596d](https://github.com/iamkun/dayjs/commit/ccf596d)) +* Update weekdaysShort to some locale files ([#643](https://github.com/iamkun/dayjs/issues/643)) ([cc1f15f](https://github.com/iamkun/dayjs/commit/cc1f15f)) + +## [1.8.15](https://github.com/iamkun/dayjs/compare/v1.8.14...v1.8.15) (2019-07-08) + + +### Bug Fixes + +* Fix dayjs.locale() returns current global locale ([#602](https://github.com/iamkun/dayjs/issues/602)) ([790cd1a](https://github.com/iamkun/dayjs/commit/790cd1a)) +* Fix incorrect Thai locale translation of July ([#607](https://github.com/iamkun/dayjs/issues/607)) ([43cbfd3](https://github.com/iamkun/dayjs/commit/43cbfd3)) +* Lowercase french locale months and weekdays ([#615](https://github.com/iamkun/dayjs/issues/615)) ([e5a257c](https://github.com/iamkun/dayjs/commit/e5a257c)) +* Type - Export Ls object to query all available locales ([#623](https://github.com/iamkun/dayjs/issues/623)) ([f6bfae0](https://github.com/iamkun/dayjs/commit/f6bfae0)) +* Update nb (Norsk Bokmål) locale ([#604](https://github.com/iamkun/dayjs/issues/604)) ([907f5c9](https://github.com/iamkun/dayjs/commit/907f5c9)) +* Update types of `.diff` API ([#617](https://github.com/iamkun/dayjs/issues/617)) ([f0f43d2](https://github.com/iamkun/dayjs/commit/f0f43d2)) + +## [1.8.14](https://github.com/iamkun/dayjs/compare/v1.8.13...v1.8.14) (2019-05-07) + + +### Bug Fixes + +* Fix `.format` API returns UTC offset when value is 0 bug ([b254964](https://github.com/iamkun/dayjs/commit/b254964)) +* Fix QuarterOfYear plugin bug ([#591](https://github.com/iamkun/dayjs/issues/591)) ([434f774](https://github.com/iamkun/dayjs/commit/434f774)) +* Fix UTC plugin add day DST bug ([#590](https://github.com/iamkun/dayjs/issues/590)) ([86cd839](https://github.com/iamkun/dayjs/commit/86cd839)) + +## [1.8.13](https://github.com/iamkun/dayjs/compare/v1.8.12...v1.8.13) (2019-04-26) + + +### Bug Fixes + +* Add missing relativeTime and formats for some locales ([#560](https://github.com/iamkun/dayjs/issues/560)) ([96b917e](https://github.com/iamkun/dayjs/commit/96b917e)) +* Add weekday (locale aware day of the week) plugin ([#569](https://github.com/iamkun/dayjs/issues/569)) ([9007cc5](https://github.com/iamkun/dayjs/commit/9007cc5)), closes [#559](https://github.com/iamkun/dayjs/issues/559) +* Allow customizing "am" / "pm" strings with locale meridiem function ([#580](https://github.com/iamkun/dayjs/issues/580)) ([576e93e](https://github.com/iamkun/dayjs/commit/576e93e)), closes [#578](https://github.com/iamkun/dayjs/issues/578) +* Fix `.add` day/week decimal rouding bug ([800f6c9](https://github.com/iamkun/dayjs/commit/800f6c9)) +* Fix `.diff` type definition error ([#565](https://github.com/iamkun/dayjs/issues/565)) ([c4921ae](https://github.com/iamkun/dayjs/commit/c4921ae)), closes [#561](https://github.com/iamkun/dayjs/issues/561) +* Fix CustomParseFormat plugin bug ([#568](https://github.com/iamkun/dayjs/issues/568)) ([1f5a9db](https://github.com/iamkun/dayjs/commit/1f5a9db)), closes [#555](https://github.com/iamkun/dayjs/issues/555) +* Fix relativeTime plugin Math.round bug ([40bea40](https://github.com/iamkun/dayjs/commit/40bea40)) +* skip square brackets in buddhistEra, advancedFormat plugins ([#556](https://github.com/iamkun/dayjs/issues/556)) ([9279718](https://github.com/iamkun/dayjs/commit/9279718)), closes [#554](https://github.com/iamkun/dayjs/issues/554) +* Update Indonesian locale([#574](https://github.com/iamkun/dayjs/issues/574)) ([0aa7143](https://github.com/iamkun/dayjs/commit/0aa7143)) +* Update locale month to support both array and function ([#581](https://github.com/iamkun/dayjs/issues/581)) ([b6599d3](https://github.com/iamkun/dayjs/commit/b6599d3)) +* Update LocalizedFormat plugin lowercase formats logic ([#557](https://github.com/iamkun/dayjs/issues/557)) ([d409304](https://github.com/iamkun/dayjs/commit/d409304)) + +## [1.8.12](https://github.com/iamkun/dayjs/compare/v1.8.11...v1.8.12) (2019-04-02) + + +### Bug Fixes + +* Add .get API ([7318797](https://github.com/iamkun/dayjs/commit/7318797)) +* Add 79 locales ([#541](https://github.com/iamkun/dayjs/issues/541)) ([f75a125](https://github.com/iamkun/dayjs/commit/f75a125)) +* Add Calendar plugin ([d1b9cf9](https://github.com/iamkun/dayjs/commit/d1b9cf9)) +* Add isoWeeksInYear plugin ([2db8631](https://github.com/iamkun/dayjs/commit/2db8631)) +* Add Occitan (oc-lnc) locale file ([#551](https://github.com/iamkun/dayjs/issues/551)) ([c30b715](https://github.com/iamkun/dayjs/commit/c30b715)) +* Add plugin minMax to sopport .max .min ([2870a23](https://github.com/iamkun/dayjs/commit/2870a23)) +* Fix set Month Year error in last day of the month ([d058f4a](https://github.com/iamkun/dayjs/commit/d058f4a)) +* Update ko locale weekdaysShort ([#543](https://github.com/iamkun/dayjs/issues/543)) ([317fd3e](https://github.com/iamkun/dayjs/commit/317fd3e)) +* Update localizedFormat plugin to support lowercase localizable formats (l, ll, lll, llll) ([#546](https://github.com/iamkun/dayjs/issues/546)) ([f2b5ebf](https://github.com/iamkun/dayjs/commit/f2b5ebf)) + +## [1.8.11](https://github.com/iamkun/dayjs/compare/v1.8.10...v1.8.11) (2019-03-21) + + +### Bug Fixes + +* Add .add('quarter') .startOf('quarter') through plugin quarterOfYear ([dde39e9](https://github.com/iamkun/dayjs/commit/dde39e9)), closes [#537](https://github.com/iamkun/dayjs/issues/537) [#531](https://github.com/iamkun/dayjs/issues/531) +* Add locale support for Azerbaijani language (az) ([#535](https://github.com/iamkun/dayjs/issues/535)) ([eeb20fa](https://github.com/iamkun/dayjs/commit/eeb20fa)) +* Correct typescript definition `add` ([22a249c](https://github.com/iamkun/dayjs/commit/22a249c)), closes [#531](https://github.com/iamkun/dayjs/issues/531) +* Fix CustomParseFormat plugin formatting bug ([#536](https://github.com/iamkun/dayjs/issues/536)) ([8578546](https://github.com/iamkun/dayjs/commit/8578546)), closes [#533](https://github.com/iamkun/dayjs/issues/533) +* Update pt locale ([#538](https://github.com/iamkun/dayjs/issues/538)) ([1ac9e1e](https://github.com/iamkun/dayjs/commit/1ac9e1e)) + +## [1.8.10](https://github.com/iamkun/dayjs/compare/v1.8.9...v1.8.10) (2019-03-10) + + +### Bug Fixes + +* **locale:** Add nepali (ne) locale ([#524](https://github.com/iamkun/dayjs/issues/524)) ([bdbec01](https://github.com/iamkun/dayjs/commit/bdbec01)) +* Add WeekYear plugin ([a892608](https://github.com/iamkun/dayjs/commit/a892608)) +* API .locale() with no argument should return current locale name string ([8d63d88](https://github.com/iamkun/dayjs/commit/8d63d88)) +* CustomParseFormat correct parse HH:mm:ss with only one digit like 0:12:10 ([600d547](https://github.com/iamkun/dayjs/commit/600d547)) +* CustomParseFormat plugin parse Do format string ([bf27fda](https://github.com/iamkun/dayjs/commit/bf27fda)), closes [#522](https://github.com/iamkun/dayjs/issues/522) +* Expand setters like .year(2000) .hour(12) ([ac532a0](https://github.com/iamkun/dayjs/commit/ac532a0)) +* Move toObject, toArray API to separate plugin from core ([40a3431](https://github.com/iamkun/dayjs/commit/40a3431)) + +## [1.8.9](https://github.com/iamkun/dayjs/compare/v1.8.8...v1.8.9) (2019-03-06) + + +### Features + +* Add UTC mode with UTC plugin ([#517](https://github.com/iamkun/dayjs/issues/517)) ([caf335c](https://github.com/iamkun/dayjs/commit/caf335c)) + +> For plugin developers: Please note, we have changed the name of some method in `Utils` in order to reduce the file size. ([#517](https://github.com/iamkun/dayjs/issues/517)) ([detail](https://github.com/iamkun/dayjs/pull/517/files#diff-2b4ca49d4bb0a774c4d4c1672d7aa781R46)) + +### Bug Fixes + +* Add locale de-AT ([#515](https://github.com/iamkun/dayjs/issues/515)) ([d93f7b6](https://github.com/iamkun/dayjs/commit/d93f7b6)) +* Add locale zh-hk ([#516](https://github.com/iamkun/dayjs/issues/516)) ([5fc05a6](https://github.com/iamkun/dayjs/commit/5fc05a6)) + +## [1.8.8](https://github.com/iamkun/dayjs/compare/v1.8.7...v1.8.8) (2019-02-25) + + +### Bug Fixes + +* Update relativeTime plugin type definition ([de56f2c](https://github.com/iamkun/dayjs/commit/de56f2c)) + +## [1.8.7](https://github.com/iamkun/dayjs/compare/v1.8.6...v1.8.7) (2019-02-24) + + +### Bug Fixes + +* Add plugin type definitions ([#418](https://github.com/iamkun/dayjs/issues/418)) ([361d437](https://github.com/iamkun/dayjs/commit/361d437)) +* Add Swahili locale ([#508](https://github.com/iamkun/dayjs/issues/508)) ([b9cee84](https://github.com/iamkun/dayjs/commit/b9cee84)) +* Parse month string 'MMMM MMM (February, Feb)' in customParseFormat ([#457](https://github.com/iamkun/dayjs/issues/457)) ([f343206](https://github.com/iamkun/dayjs/commit/f343206)) +* Update declaration file .diff .isBefore .isSame .isAfter ([#496](https://github.com/iamkun/dayjs/issues/496)) ([4523275](https://github.com/iamkun/dayjs/commit/4523275)) +* Word orders corrections for locale 'fa' ([#491](https://github.com/iamkun/dayjs/issues/491)) ([56050c2](https://github.com/iamkun/dayjs/commit/56050c2)) + +## [1.8.6](https://github.com/iamkun/dayjs/compare/v1.8.5...v1.8.6) (2019-02-14) + + +### Bug Fixes + +* Add Bahasa Melayu (Malaysia) locale ([#485](https://github.com/iamkun/dayjs/issues/485)) ([cb208b0](https://github.com/iamkun/dayjs/commit/cb208b0)) +* Copy & export built-in en locale to /locale folder as a separate file ([a7e05e0](https://github.com/iamkun/dayjs/commit/a7e05e0)) +* Fix bug in customParseFormat plugin while month(MM) is '01' ([9884ca5](https://github.com/iamkun/dayjs/commit/9884ca5)), closes [#494](https://github.com/iamkun/dayjs/issues/494) +* Fix startOf week bug while week start is not Sunday ([5eaf77b](https://github.com/iamkun/dayjs/commit/5eaf77b)) +* Implemented isBetween inclusivity ([#464](https://github.com/iamkun/dayjs/issues/464)) ([af2f4f1](https://github.com/iamkun/dayjs/commit/af2f4f1)) +* Update Swedish and Finnish locales ([#488](https://github.com/iamkun/dayjs/issues/488)) ([f142082](https://github.com/iamkun/dayjs/commit/f142082)) +* Fix commonJS require ES Module bug in webpack4 ([23f9f3d](https://github.com/iamkun/dayjs/commit/23f9f3d)), check [#492](https://github.com/iamkun/dayjs/issues/492) + +> Get access to ESM code with `import dayjs from 'dayjs/esm'` + +## [1.8.5](https://github.com/iamkun/dayjs/compare/v1.8.4...v1.8.5) (2019-02-07) + + +### Bug Fixes + +* Add en-gb locale ([#478](https://github.com/iamkun/dayjs/issues/478)) ([508c3a7](https://github.com/iamkun/dayjs/commit/508c3a7)) +* **module:** transpile everything except ES6 modules in the 'module' entrypoint ([#477](https://github.com/iamkun/dayjs/issues/477)) ([#480](https://github.com/iamkun/dayjs/issues/480)) ([#482](https://github.com/iamkun/dayjs/issues/482)) ([767017d](https://github.com/iamkun/dayjs/commit/767017d)) +* update customParseFormat plugin support hh:mm ([54947cc](https://github.com/iamkun/dayjs/commit/54947cc)), closes [#484](https://github.com/iamkun/dayjs/issues/484) +* Update module in package.json ([5c5a7a0](https://github.com/iamkun/dayjs/commit/5c5a7a0)) + +## [1.8.4](https://github.com/iamkun/dayjs/compare/v1.8.3...v1.8.4) (2019-02-05) + +* Allow set start day of week in locale && Allow set week in weekOfYear plugin ([1295591](https://github.com/iamkun/dayjs/commit/1295591)) +### Bug Fixes +* update all locale files with correct week start ([5b03412](https://github.com/iamkun/dayjs/commit/5b03412)) +* update es es-do locale adding weekStart && update weekStart test ([66e42ec](https://github.com/iamkun/dayjs/commit/66e42ec)) +* Revert default export ([b00da1b](https://github.com/iamkun/dayjs/commit/b00da1b)) + +## [1.8.3](https://github.com/iamkun/dayjs/compare/v1.8.2...v1.8.3) (2019-02-04) + + +### Bug Fixes + +* fix ios safari YYYY-MM-DD HH:mm parse BUG ([e02ae82](https://github.com/iamkun/dayjs/commit/e02ae82)), closes [#254](https://github.com/iamkun/dayjs/issues/254) + +## [1.8.2](https://github.com/iamkun/dayjs/compare/v1.8.1...v1.8.2) (2019-02-02) + + +### Bug Fixes + +* Add missing czech language locale ([#461](https://github.com/iamkun/dayjs/issues/461)) ([7e04004](https://github.com/iamkun/dayjs/commit/7e04004)) +* Add utcOffset api method and fix calculating diff error in DST ([#453](https://github.com/iamkun/dayjs/issues/453)) ([ce2e30e](https://github.com/iamkun/dayjs/commit/ce2e30e)) +* Fix it locale error ([#458](https://github.com/iamkun/dayjs/issues/458)) ([f6d9a64](https://github.com/iamkun/dayjs/commit/f6d9a64)) +* Add DayOfYear plugin (#454) +* Fix es locale monthsShort error + +## [1.8.1](https://github.com/iamkun/dayjs/compare/v1.8.0...v1.8.1) (2019-02-02) + +* Add LocalizedFormat plugin supplying format like LTS, LT, LLLL + +* update declaration File with default export (#278) +> From v1.8.1, in TypeScript Project, just `import from dayjs from 'dayjs'` +* add ES2015 module support (#451) + +### Performance Improvements + +* **format:** reuse matches instead of created when replacing ([#441](https://github.com/iamkun/dayjs/issues/441)) ([10b79d8](https://github.com/iamkun/dayjs/commit/10b79d8)) + +# [1.8.0](https://github.com/iamkun/dayjs/compare/v1.7.8...v1.8.0) (2019-01-14) + + +### Features + +* add CustomParseFormat plugin and QuarterOfYear plugin ([#450](https://github.com/iamkun/dayjs/issues/450)) ([8f6f63c](https://github.com/iamkun/dayjs/commit/8f6f63c)) + +## [1.7.8](https://github.com/iamkun/dayjs/compare/v1.7.7...v1.7.8) (2018-12-13) + + +### Feature + +* update isSame isBefore isAfter supports units ([fd65464](https://github.com/iamkun/dayjs/commit/fd65464)) + +* add greek lithuanian locales + +## [1.7.7](https://github.com/iamkun/dayjs/compare/v1.7.6...v1.7.7) (2018-09-26) + + +### Bug Fixes + +* **DST:** fix daylight saving time DST bug && add test ([#354](https://github.com/iamkun/dayjs/issues/354)) ([6fca6d5](https://github.com/iamkun/dayjs/commit/6fca6d5)) + +## [1.7.6](https://github.com/iamkun/dayjs/compare/v1.7.5...v1.7.6) (2018-09-25) + + +### Bug Fixes + +* **add dayjs.unix:** add dayjs.unix to parse timestamp in seconds && locale update ([5711c5e](https://github.com/iamkun/dayjs/commit/5711c5e)) + +## [1.7.5](https://github.com/iamkun/dayjs/compare/v1.7.4...v1.7.5) (2018-08-10) + + +### Bug Fixes + +* add isBetween API & update ([b5fc3d1](https://github.com/iamkun/dayjs/commit/b5fc3d1)) + +## [1.7.4](https://github.com/iamkun/dayjs/compare/v1.7.3...v1.7.4) (2018-07-11) + + +### Bug Fixes + +* update set week logic ([60b6325](https://github.com/iamkun/dayjs/commit/60b6325)), closes [#276](https://github.com/iamkun/dayjs/issues/276) + +## [1.7.3](https://github.com/iamkun/dayjs/compare/v1.7.2...v1.7.3) (2018-07-10) + + +### Bug Fixes + +* **locale-nl:** set correct weekdays and months ([6d089d7](https://github.com/iamkun/dayjs/commit/6d089d7)) + +## [1.7.2](https://github.com/iamkun/dayjs/compare/v1.7.1...v1.7.2) (2018-07-04) + + +### Bug Fixes + +* DEPRECATED isLeapYear, use IsLeapYear plugin instead ([e2e5116](https://github.com/iamkun/dayjs/commit/e2e5116)) + +## [1.7.1](https://github.com/iamkun/dayjs/compare/v1.7.0...v1.7.1) (2018-07-03) + + +### Bug Fixes + +* fix week() error near the end of the year ([fa03689](https://github.com/iamkun/dayjs/commit/fa03689)) + +# [1.7.0](https://github.com/iamkun/dayjs/compare/v1.6.10...v1.7.0) (2018-07-02) + + +### Features + +* Added method `.week()` to retrieve week of the year ([e1c1b1c](https://github.com/iamkun/dayjs/commit/e1c1b1c)) +* Updated Japanese locae + +## [1.6.10](https://github.com/iamkun/dayjs/compare/v1.6.9...v1.6.10) (2018-06-25) + + +### Bug Fixes + +* Add relative locales to russian language ([c7e9898](https://github.com/iamkun/dayjs/commit/c7e9898)), closes [#256](https://github.com/iamkun/dayjs/issues/256) + +## [1.6.9](https://github.com/iamkun/dayjs/compare/v1.6.8...v1.6.9) (2018-06-14) + + +### Bug Fixes + +* add isDayjs => boolean API ([6227c8b](https://github.com/iamkun/dayjs/commit/6227c8b)) + +## [1.6.8](https://github.com/iamkun/dayjs/compare/v1.6.7...v1.6.8) (2018-06-14) + + +### Bug Fixes + +* fix Advanced format bug in zh-cn ([0c07874](https://github.com/iamkun/dayjs/commit/0c07874)), closes [#242](https://github.com/iamkun/dayjs/issues/242) + +## [1.6.7](https://github.com/iamkun/dayjs/compare/v1.6.6...v1.6.7) (2018-06-11) + + +### Bug Fixes + +* fix id locale ([1ebbeb8](https://github.com/iamkun/dayjs/commit/1ebbeb8)), closes [#234](https://github.com/iamkun/dayjs/issues/234) + + +## [1.6.6](https://github.com/iamkun/dayjs/compare/v1.6.5...v1.6.6) (2018-06-06) + + +### Bug Fixes + +* format API update and locale file update ([5ca48f0](https://github.com/iamkun/dayjs/commit/5ca48f0)), closes [#228](https://github.com/iamkun/dayjs/issues/228) + + +## [1.6.5](https://github.com/iamkun/dayjs/compare/v1.6.4...v1.6.5) (2018-05-31) + + +### Bug Fixes + +* bugfix, utils update and locale file update ([ebcb6d5](https://github.com/iamkun/dayjs/commit/ebcb6d5)), closes [#214](https://github.com/iamkun/dayjs/issues/214) + + +## [1.6.4](https://github.com/iamkun/dayjs/compare/v1.6.3...v1.6.4) (2018-05-25) + + +### Bug Fixes + +* add RelativeTime plugin and locale file update ([c1fbbca](https://github.com/iamkun/dayjs/commit/c1fbbca)), closes [#198](https://github.com/iamkun/dayjs/issues/198) + + +## [1.6.3](https://github.com/iamkun/dayjs/compare/v1.6.2...v1.6.3) (2018-05-21) + + +### Bug Fixes + +* Changing locales locally is immutable from this release ([2cce729](https://github.com/iamkun/dayjs/commit/2cce729)), closes [#182](https://github.com/iamkun/dayjs/issues/182) +* instance locale change should be immutable ([84597c9](https://github.com/iamkun/dayjs/commit/84597c9)) +* Add more locales +* english ordinal fix + + +## [1.6.2](https://github.com/iamkun/dayjs/compare/v1.6.1...v1.6.2) (2018-05-18) + + +### Bug Fixes + +* change-log update && test new npm release ([aa49cba](https://github.com/iamkun/dayjs/commit/aa49cba)), closes [#163](https://github.com/iamkun/dayjs/issues/163) + + +## [1.6.1](https://github.com/iamkun/dayjs/compare/v1.6.0...v1.6.1) (2018-05-18) + + +### Bug Fixes + +* Add German, Brazilian Portuguese locales +* add() & parse() bug fix & add locale de, pt-br ([bf1331e](https://github.com/iamkun/dayjs/commit/bf1331e)) + + +# [1.6.0](https://github.com/iamkun/dayjs/compare/v1.5.24...v1.6.0) (2018-05-15) + + +### Features + +* Locale && Plugin ([2342c55](https://github.com/iamkun/dayjs/commit/2342c55)), closes [#141](https://github.com/iamkun/dayjs/issues/141) diff --git a/node_backend/node_modules/dayjs/LICENSE b/node_backend/node_modules/dayjs/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..caf9315493c66640ca870078cb54fcc762921db6 --- /dev/null +++ b/node_backend/node_modules/dayjs/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018-present, iamkun + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_backend/node_modules/dayjs/README.md b/node_backend/node_modules/dayjs/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9247b6e75cc36cad0ec36f3e8342d956e588bfb2 --- /dev/null +++ b/node_backend/node_modules/dayjs/README.md @@ -0,0 +1,172 @@ +English | [简体中文](./docs/zh-cn/README.zh-CN.md) | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md) | [한국어](./docs/ko/README-ko.md) | [Español (España)](./docs/es-es/README-es-es.md) | [Русский](./docs/ru/README-ru.md) | [Türkçe](./docs/tr/README-tr.md) | [සිංහල](./docs/si/README-si.md) | [עברית](./docs/he/README-he.md) + +

Day.js

+

Fast 2kB alternative to Moment.js with the same modern API

+

+ Gzip Size + NPM Version + Build Status + Codecov + License +
+ + Sauce Test Status + +

+ +> Day.js is a minimalist JavaScript library that parses, validates, manipulates, and displays dates and times for modern browsers with a largely Moment.js-compatible API. If you use Moment.js, you already know how to use Day.js. + +```js +dayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss'); +``` + +* 🕒 Familiar Moment.js API & patterns +* 💪 Immutable +* 🔥 Chainable +* 🌐 I18n support +* 📦 2kb mini library +* 👫 All browsers supported + +--- + +## Getting Started + +### Documentation + +You can find more details, API, and other docs on [day.js.org](https://day.js.org/) website. + +### Installation + +```console +npm install dayjs --save +``` + +📚[Installation Guide](https://day.js.org/docs/en/installation/installation) + +### API + +It's easy to use Day.js APIs to parse, validate, manipulate, and display dates and times. + +```javascript +dayjs('2018-08-08') // parse + +dayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // display + +dayjs().set('month', 3).month() // get & set + +dayjs().add(1, 'year') // manipulate + +dayjs().isBefore(dayjs()) // query +``` + +📚[API Reference](https://day.js.org/docs/en/parse/parse) + +### I18n + +Day.js has great support for internationalization. + +But none of them will be included in your build unless you use it. + +```javascript +import 'dayjs/locale/es' // load on demand + +dayjs.locale('es') // use Spanish locale globally + +dayjs('2018-05-05').locale('zh-cn').format() // use Chinese Simplified locale in a specific instance +``` + +📚[Internationalization](https://day.js.org/docs/en/i18n/i18n) + +### Plugin + +A plugin is an independent module that can be added to Day.js to extend functionality or add new features. + +```javascript +import advancedFormat from 'dayjs/plugin/advancedFormat' // load on demand + +dayjs.extend(advancedFormat) // use plugin + +dayjs().format('Q Do k kk X x') // more available formats +``` + +📚[Plugin List](https://day.js.org/docs/en/plugin/plugin) + +### Usage Trend + + + + + +## Sponsors + +Support this project by becoming a sponsor. Your logo will show up here with a link to your website. + +[[Become a sponsor via Github](https://github.com/sponsors/iamkun/)] [[Become a sponsor via OpenCollective](https://opencollective.com/dayjs#sponsor)] + + + + +         + + + +         + + + +         + + + +         + + + +         + + + +         + + + +         + + + +         + + BestKru + +         + + Route Optimizer and Route Planner Software + + + +## Contributors + +This project exists thanks to all the people who contribute. + +Please give us a 💖 star 💖 to support us. Thank you. + +And thank you to all our backers! 🙏 + + + + + +
+ + +## License + +Day.js is licensed under a [MIT License](./LICENSE). diff --git a/node_backend/node_modules/dayjs/dayjs.min.js b/node_backend/node_modules/dayjs/dayjs.min.js new file mode 100644 index 0000000000000000000000000000000000000000..61916d8824ea9774139dc5247bd509f36dfd313f --- /dev/null +++ b/node_backend/node_modules/dayjs/dayjs.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",c="month",f="quarter",h="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t) + +export = dayjs; + +declare function dayjs (date?: dayjs.ConfigType): dayjs.Dayjs + +declare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, strict?: boolean): dayjs.Dayjs + +declare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, locale?: string, strict?: boolean): dayjs.Dayjs + +declare namespace dayjs { + interface ConfigTypeMap { + default: string | number | Date | Dayjs | null | undefined + } + + export type ConfigType = ConfigTypeMap[keyof ConfigTypeMap] + + export interface FormatObject { locale?: string, format?: string, utc?: boolean } + + export type OptionType = FormatObject | string | string[] + + export type UnitTypeShort = 'd' | 'D' | 'M' | 'y' | 'h' | 'm' | 's' | 'ms' + + export type UnitTypeLong = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'date' + + export type UnitTypeLongPlural = 'milliseconds' | 'seconds' | 'minutes' | 'hours' | 'days' | 'months' | 'years' | 'dates' + + export type UnitType = UnitTypeLong | UnitTypeLongPlural | UnitTypeShort; + + export type OpUnitType = UnitType | "week" | "weeks" | 'w'; + export type QUnitType = UnitType | "quarter" | "quarters" | 'Q'; + export type ManipulateType = Exclude; + class Dayjs { + constructor (config?: ConfigType) + /** + * All Day.js objects are immutable. Still, `dayjs#clone` can create a clone of the current object if you need one. + * ``` + * dayjs().clone()// => Dayjs + * dayjs(dayjs('2019-01-25')) // passing a Dayjs object to a constructor will also clone it + * ``` + * Docs: https://day.js.org/docs/en/parse/dayjs-clone + */ + clone(): Dayjs + /** + * This returns a `boolean` indicating whether the Day.js object contains a valid date or not. + * ``` + * dayjs().isValid()// => boolean + * ``` + * Docs: https://day.js.org/docs/en/parse/is-valid + */ + isValid(): boolean + /** + * Get the year. + * ``` + * dayjs().year()// => 2020 + * ``` + * Docs: https://day.js.org/docs/en/get-set/year + */ + year(): number + /** + * Set the year. + * ``` + * dayjs().year(2000)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/year + */ + year(value: number): Dayjs + /** + * Get the month. + * + * Months are zero indexed, so January is month 0. + * ``` + * dayjs().month()// => 0-11 + * ``` + * Docs: https://day.js.org/docs/en/get-set/month + */ + month(): number + /** + * Set the month. + * + * Months are zero indexed, so January is month 0. + * + * Accepts numbers from 0 to 11. If the range is exceeded, it will bubble up to the next year. + * ``` + * dayjs().month(0)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/month + */ + month(value: number): Dayjs + /** + * Get the date of the month. + * ``` + * dayjs().date()// => 1-31 + * ``` + * Docs: https://day.js.org/docs/en/get-set/date + */ + date(): number + /** + * Set the date of the month. + * + * Accepts numbers from 1 to 31. If the range is exceeded, it will bubble up to the next months. + * ``` + * dayjs().date(1)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/date + */ + date(value: number): Dayjs + /** + * Get the day of the week. + * + * Returns numbers from 0 (Sunday) to 6 (Saturday). + * ``` + * dayjs().day()// 0-6 + * ``` + * Docs: https://day.js.org/docs/en/get-set/day + */ + day(): 0 | 1 | 2 | 3 | 4 | 5 | 6 + /** + * Set the day of the week. + * + * Accepts numbers from 0 (Sunday) to 6 (Saturday). If the range is exceeded, it will bubble up to next weeks. + * ``` + * dayjs().day(0)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/day + */ + day(value: number): Dayjs + /** + * Get the hour. + * ``` + * dayjs().hour()// => 0-23 + * ``` + * Docs: https://day.js.org/docs/en/get-set/hour + */ + hour(): number + /** + * Set the hour. + * + * Accepts numbers from 0 to 23. If the range is exceeded, it will bubble up to the next day. + * ``` + * dayjs().hour(12)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/hour + */ + hour(value: number): Dayjs + /** + * Get the minutes. + * ``` + * dayjs().minute()// => 0-59 + * ``` + * Docs: https://day.js.org/docs/en/get-set/minute + */ + minute(): number + /** + * Set the minutes. + * + * Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next hour. + * ``` + * dayjs().minute(59)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/minute + */ + minute(value: number): Dayjs + /** + * Get the seconds. + * ``` + * dayjs().second()// => 0-59 + * ``` + * Docs: https://day.js.org/docs/en/get-set/second + */ + second(): number + /** + * Set the seconds. + * + * Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next minutes. + * ``` + * dayjs().second(1)// Dayjs + * ``` + */ + second(value: number): Dayjs + /** + * Get the milliseconds. + * ``` + * dayjs().millisecond()// => 0-999 + * ``` + * Docs: https://day.js.org/docs/en/get-set/millisecond + */ + millisecond(): number + /** + * Set the milliseconds. + * + * Accepts numbers from 0 to 999. If the range is exceeded, it will bubble up to the next seconds. + * ``` + * dayjs().millisecond(1)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/millisecond + */ + millisecond(value: number): Dayjs + /** + * Generic setter, accepting unit as first argument, and value as second, returns a new instance with the applied changes. + * + * In general: + * ``` + * dayjs().set(unit, value) === dayjs()[unit](value) + * ``` + * Units are case insensitive, and support plural and short forms. + * ``` + * dayjs().set('date', 1) + * dayjs().set('month', 3) // April + * dayjs().set('second', 30) + * ``` + * Docs: https://day.js.org/docs/en/get-set/set + */ + set(unit: UnitType, value: number): Dayjs + /** + * String getter, returns the corresponding information getting from Day.js object. + * + * In general: + * ``` + * dayjs().get(unit) === dayjs()[unit]() + * ``` + * Units are case insensitive, and support plural and short forms. + * ``` + * dayjs().get('year') + * dayjs().get('month') // start 0 + * dayjs().get('date') + * ``` + * Docs: https://day.js.org/docs/en/get-set/get + */ + get(unit: UnitType): number + /** + * Returns a cloned Day.js object with a specified amount of time added. + * ``` + * dayjs().add(7, 'day')// => Dayjs + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/manipulate/add + */ + add(value: number, unit?: ManipulateType): Dayjs + /** + * Returns a cloned Day.js object with a specified amount of time subtracted. + * ``` + * dayjs().subtract(7, 'year')// => Dayjs + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/manipulate/subtract + */ + subtract(value: number, unit?: ManipulateType): Dayjs + /** + * Returns a cloned Day.js object and set it to the start of a unit of time. + * ``` + * dayjs().startOf('year')// => Dayjs + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/manipulate/start-of + */ + startOf(unit: OpUnitType): Dayjs + /** + * Returns a cloned Day.js object and set it to the end of a unit of time. + * ``` + * dayjs().endOf('month')// => Dayjs + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/manipulate/end-of + */ + endOf(unit: OpUnitType): Dayjs + /** + * Get the formatted date according to the string of tokens passed in. + * + * To escape characters, wrap them in square brackets (e.g. [MM]). + * ``` + * dayjs().format()// => current date in ISO8601, without fraction seconds e.g. '2020-04-02T08:02:17-05:00' + * dayjs('2019-01-25').format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]')// 'YYYYescape 2019-01-25T00:00:00-02:00Z' + * dayjs('2019-01-25').format('DD/MM/YYYY') // '25/01/2019' + * ``` + * Docs: https://day.js.org/docs/en/display/format + */ + format(template?: string): string + /** + * This indicates the difference between two date-time in the specified unit. + * + * To get the difference in milliseconds, use `dayjs#diff` + * ``` + * const date1 = dayjs('2019-01-25') + * const date2 = dayjs('2018-06-05') + * date1.diff(date2) // 20214000000 default milliseconds + * date1.diff() // milliseconds to current time + * ``` + * + * To get the difference in another unit of measurement, pass that measurement as the second argument. + * ``` + * const date1 = dayjs('2019-01-25') + * date1.diff('2018-06-05', 'month') // 7 + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/display/difference + */ + diff(date?: ConfigType, unit?: QUnitType | OpUnitType, float?: boolean): number + /** + * This returns the number of **milliseconds** since the Unix Epoch of the Day.js object. + * ``` + * dayjs('2019-01-25').valueOf() // 1548381600000 + * +dayjs(1548381600000) // 1548381600000 + * ``` + * To get a Unix timestamp (the number of seconds since the epoch) from a Day.js object, you should use Unix Timestamp `dayjs#unix()`. + * + * Docs: https://day.js.org/docs/en/display/unix-timestamp-milliseconds + */ + valueOf(): number + /** + * This returns the Unix timestamp (the number of **seconds** since the Unix Epoch) of the Day.js object. + * ``` + * dayjs('2019-01-25').unix() // 1548381600 + * ``` + * This value is floored to the nearest second, and does not include a milliseconds component. + * + * Docs: https://day.js.org/docs/en/display/unix-timestamp + */ + unix(): number + /** + * Get the number of days in the current month. + * ``` + * dayjs('2019-01-25').daysInMonth() // 31 + * ``` + * Docs: https://day.js.org/docs/en/display/days-in-month + */ + daysInMonth(): number + /** + * To get a copy of the native `Date` object parsed from the Day.js object use `dayjs#toDate`. + * ``` + * dayjs('2019-01-25').toDate()// => Date + * ``` + */ + toDate(): Date + /** + * To serialize as an ISO 8601 string. + * ``` + * dayjs('2019-01-25').toJSON() // '2019-01-25T02:00:00.000Z' + * ``` + * Docs: https://day.js.org/docs/en/display/as-json + */ + toJSON(): string + /** + * To format as an ISO 8601 string. + * ``` + * dayjs('2019-01-25').toISOString() // '2019-01-25T02:00:00.000Z' + * ``` + * Docs: https://day.js.org/docs/en/display/as-iso-string + */ + toISOString(): string + /** + * Returns a string representation of the date. + * ``` + * dayjs('2019-01-25').toString() // 'Fri, 25 Jan 2019 02:00:00 GMT' + * ``` + * Docs: https://day.js.org/docs/en/display/as-string + */ + toString(): string + /** + * Get the UTC offset in minutes. + * ``` + * dayjs().utcOffset() + * ``` + * Docs: https://day.js.org/docs/en/manipulate/utc-offset + */ + utcOffset(): number + /** + * This indicates whether the Day.js object is before the other supplied date-time. + * ``` + * dayjs().isBefore(dayjs('2011-01-01')) // default milliseconds + * ``` + * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter. + * ``` + * dayjs().isBefore('2011-01-01', 'year')// => boolean + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/query/is-before + */ + isBefore(date?: ConfigType, unit?: OpUnitType): boolean + /** + * This indicates whether the Day.js object is the same as the other supplied date-time. + * ``` + * dayjs().isSame(dayjs('2011-01-01')) // default milliseconds + * ``` + * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter. + * ``` + * dayjs().isSame('2011-01-01', 'year')// => boolean + * ``` + * Docs: https://day.js.org/docs/en/query/is-same + */ + isSame(date?: ConfigType, unit?: OpUnitType): boolean + /** + * This indicates whether the Day.js object is after the other supplied date-time. + * ``` + * dayjs().isAfter(dayjs('2011-01-01')) // default milliseconds + * ``` + * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter. + * ``` + * dayjs().isAfter('2011-01-01', 'year')// => boolean + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/query/is-after + */ + isAfter(date?: ConfigType, unit?: OpUnitType): boolean + + locale(): string + + locale(preset: string | ILocale, object?: Partial): Dayjs + } + + export type PluginFunc = (option: T, c: typeof Dayjs, d: typeof dayjs) => void + + export function extend(plugin: PluginFunc, option?: T): Dayjs + + export function locale(preset?: string | ILocale, object?: Partial, isLocal?: boolean): string + + export function isDayjs(d: any): d is Dayjs + + export function unix(t: number): Dayjs + + const Ls : { [key: string] : ILocale } +} diff --git a/node_backend/node_modules/dayjs/esm/index.js b/node_backend/node_modules/dayjs/esm/index.js new file mode 100644 index 0000000000000000000000000000000000000000..a82986b88f0392243dbbb84dcfd8d3161b170043 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/index.js @@ -0,0 +1,541 @@ +import * as C from './constant'; +import en from './locale/en'; +import U from './utils'; +var L = 'en'; // global locale + +var Ls = {}; // global loaded locale + +Ls[L] = en; +var IS_DAYJS = '$isDayjsObject'; // eslint-disable-next-line no-use-before-define + +var isDayjs = function isDayjs(d) { + return d instanceof Dayjs || !!(d && d[IS_DAYJS]); +}; + +var parseLocale = function parseLocale(preset, object, isLocal) { + var l; + if (!preset) return L; + + if (typeof preset === 'string') { + var presetLower = preset.toLowerCase(); + + if (Ls[presetLower]) { + l = presetLower; + } + + if (object) { + Ls[presetLower] = object; + l = presetLower; + } + + var presetSplit = preset.split('-'); + + if (!l && presetSplit.length > 1) { + return parseLocale(presetSplit[0]); + } + } else { + var name = preset.name; + Ls[name] = preset; + l = name; + } + + if (!isLocal && l) L = l; + return l || !isLocal && L; +}; + +var dayjs = function dayjs(date, c) { + if (isDayjs(date)) { + return date.clone(); + } // eslint-disable-next-line no-nested-ternary + + + var cfg = typeof c === 'object' ? c : {}; + cfg.date = date; + cfg.args = arguments; // eslint-disable-line prefer-rest-params + + return new Dayjs(cfg); // eslint-disable-line no-use-before-define +}; + +var wrapper = function wrapper(date, instance) { + return dayjs(date, { + locale: instance.$L, + utc: instance.$u, + x: instance.$x, + $offset: instance.$offset // todo: refactor; do not use this.$offset in you code + + }); +}; + +var Utils = U; // for plugin use + +Utils.l = parseLocale; +Utils.i = isDayjs; +Utils.w = wrapper; + +var parseDate = function parseDate(cfg) { + var date = cfg.date, + utc = cfg.utc; + if (date === null) return new Date(NaN); // null is invalid + + if (Utils.u(date)) return new Date(); // today + + if (date instanceof Date) return new Date(date); + + if (typeof date === 'string' && !/Z$/i.test(date)) { + var d = date.match(C.REGEX_PARSE); + + if (d) { + var m = d[2] - 1 || 0; + var ms = (d[7] || '0').substring(0, 3); + + if (utc) { + return new Date(Date.UTC(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms)); + } + + return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms); + } + } + + return new Date(date); // everything else +}; + +var Dayjs = /*#__PURE__*/function () { + function Dayjs(cfg) { + this.$L = parseLocale(cfg.locale, null, true); + this.parse(cfg); // for plugin + + this.$x = this.$x || cfg.x || {}; + this[IS_DAYJS] = true; + } + + var _proto = Dayjs.prototype; + + _proto.parse = function parse(cfg) { + this.$d = parseDate(cfg); + this.init(); + }; + + _proto.init = function init() { + var $d = this.$d; + this.$y = $d.getFullYear(); + this.$M = $d.getMonth(); + this.$D = $d.getDate(); + this.$W = $d.getDay(); + this.$H = $d.getHours(); + this.$m = $d.getMinutes(); + this.$s = $d.getSeconds(); + this.$ms = $d.getMilliseconds(); + } // eslint-disable-next-line class-methods-use-this + ; + + _proto.$utils = function $utils() { + return Utils; + }; + + _proto.isValid = function isValid() { + return !(this.$d.toString() === C.INVALID_DATE_STRING); + }; + + _proto.isSame = function isSame(that, units) { + var other = dayjs(that); + return this.startOf(units) <= other && other <= this.endOf(units); + }; + + _proto.isAfter = function isAfter(that, units) { + return dayjs(that) < this.startOf(units); + }; + + _proto.isBefore = function isBefore(that, units) { + return this.endOf(units) < dayjs(that); + }; + + _proto.$g = function $g(input, get, set) { + if (Utils.u(input)) return this[get]; + return this.set(set, input); + }; + + _proto.unix = function unix() { + return Math.floor(this.valueOf() / 1000); + }; + + _proto.valueOf = function valueOf() { + // timezone(hour) * 60 * 60 * 1000 => ms + return this.$d.getTime(); + }; + + _proto.startOf = function startOf(units, _startOf) { + var _this = this; + + // startOf -> endOf + var isStartOf = !Utils.u(_startOf) ? _startOf : true; + var unit = Utils.p(units); + + var instanceFactory = function instanceFactory(d, m) { + var ins = Utils.w(_this.$u ? Date.UTC(_this.$y, m, d) : new Date(_this.$y, m, d), _this); + return isStartOf ? ins : ins.endOf(C.D); + }; + + var instanceFactorySet = function instanceFactorySet(method, slice) { + var argumentStart = [0, 0, 0, 0]; + var argumentEnd = [23, 59, 59, 999]; + return Utils.w(_this.toDate()[method].apply( // eslint-disable-line prefer-spread + _this.toDate('s'), (isStartOf ? argumentStart : argumentEnd).slice(slice)), _this); + }; + + var $W = this.$W, + $M = this.$M, + $D = this.$D; + var utcPad = "set" + (this.$u ? 'UTC' : ''); + + switch (unit) { + case C.Y: + return isStartOf ? instanceFactory(1, 0) : instanceFactory(31, 11); + + case C.M: + return isStartOf ? instanceFactory(1, $M) : instanceFactory(0, $M + 1); + + case C.W: + { + var weekStart = this.$locale().weekStart || 0; + var gap = ($W < weekStart ? $W + 7 : $W) - weekStart; + return instanceFactory(isStartOf ? $D - gap : $D + (6 - gap), $M); + } + + case C.D: + case C.DATE: + return instanceFactorySet(utcPad + "Hours", 0); + + case C.H: + return instanceFactorySet(utcPad + "Minutes", 1); + + case C.MIN: + return instanceFactorySet(utcPad + "Seconds", 2); + + case C.S: + return instanceFactorySet(utcPad + "Milliseconds", 3); + + default: + return this.clone(); + } + }; + + _proto.endOf = function endOf(arg) { + return this.startOf(arg, false); + }; + + _proto.$set = function $set(units, _int) { + var _C$D$C$DATE$C$M$C$Y$C; + + // private set + var unit = Utils.p(units); + var utcPad = "set" + (this.$u ? 'UTC' : ''); + var name = (_C$D$C$DATE$C$M$C$Y$C = {}, _C$D$C$DATE$C$M$C$Y$C[C.D] = utcPad + "Date", _C$D$C$DATE$C$M$C$Y$C[C.DATE] = utcPad + "Date", _C$D$C$DATE$C$M$C$Y$C[C.M] = utcPad + "Month", _C$D$C$DATE$C$M$C$Y$C[C.Y] = utcPad + "FullYear", _C$D$C$DATE$C$M$C$Y$C[C.H] = utcPad + "Hours", _C$D$C$DATE$C$M$C$Y$C[C.MIN] = utcPad + "Minutes", _C$D$C$DATE$C$M$C$Y$C[C.S] = utcPad + "Seconds", _C$D$C$DATE$C$M$C$Y$C[C.MS] = utcPad + "Milliseconds", _C$D$C$DATE$C$M$C$Y$C)[unit]; + var arg = unit === C.D ? this.$D + (_int - this.$W) : _int; + + if (unit === C.M || unit === C.Y) { + // clone is for badMutable plugin + var date = this.clone().set(C.DATE, 1); + date.$d[name](arg); + date.init(); + this.$d = date.set(C.DATE, Math.min(this.$D, date.daysInMonth())).$d; + } else if (name) this.$d[name](arg); + + this.init(); + return this; + }; + + _proto.set = function set(string, _int2) { + return this.clone().$set(string, _int2); + }; + + _proto.get = function get(unit) { + return this[Utils.p(unit)](); + }; + + _proto.add = function add(number, units) { + var _this2 = this, + _C$MIN$C$H$C$S$unit; + + number = Number(number); // eslint-disable-line no-param-reassign + + var unit = Utils.p(units); + + var instanceFactorySet = function instanceFactorySet(n) { + var d = dayjs(_this2); + return Utils.w(d.date(d.date() + Math.round(n * number)), _this2); + }; + + if (unit === C.M) { + return this.set(C.M, this.$M + number); + } + + if (unit === C.Y) { + return this.set(C.Y, this.$y + number); + } + + if (unit === C.D) { + return instanceFactorySet(1); + } + + if (unit === C.W) { + return instanceFactorySet(7); + } + + var step = (_C$MIN$C$H$C$S$unit = {}, _C$MIN$C$H$C$S$unit[C.MIN] = C.MILLISECONDS_A_MINUTE, _C$MIN$C$H$C$S$unit[C.H] = C.MILLISECONDS_A_HOUR, _C$MIN$C$H$C$S$unit[C.S] = C.MILLISECONDS_A_SECOND, _C$MIN$C$H$C$S$unit)[unit] || 1; // ms + + var nextTimeStamp = this.$d.getTime() + number * step; + return Utils.w(nextTimeStamp, this); + }; + + _proto.subtract = function subtract(number, string) { + return this.add(number * -1, string); + }; + + _proto.format = function format(formatStr) { + var _this3 = this; + + var locale = this.$locale(); + if (!this.isValid()) return locale.invalidDate || C.INVALID_DATE_STRING; + var str = formatStr || C.FORMAT_DEFAULT; + var zoneStr = Utils.z(this); + var $H = this.$H, + $m = this.$m, + $M = this.$M; + var weekdays = locale.weekdays, + months = locale.months, + meridiem = locale.meridiem; + + var getShort = function getShort(arr, index, full, length) { + return arr && (arr[index] || arr(_this3, str)) || full[index].slice(0, length); + }; + + var get$H = function get$H(num) { + return Utils.s($H % 12 || 12, num, '0'); + }; + + var meridiemFunc = meridiem || function (hour, minute, isLowercase) { + var m = hour < 12 ? 'AM' : 'PM'; + return isLowercase ? m.toLowerCase() : m; + }; + + var matches = function matches(match) { + switch (match) { + case 'YY': + return String(_this3.$y).slice(-2); + + case 'YYYY': + return Utils.s(_this3.$y, 4, '0'); + + case 'M': + return $M + 1; + + case 'MM': + return Utils.s($M + 1, 2, '0'); + + case 'MMM': + return getShort(locale.monthsShort, $M, months, 3); + + case 'MMMM': + return getShort(months, $M); + + case 'D': + return _this3.$D; + + case 'DD': + return Utils.s(_this3.$D, 2, '0'); + + case 'd': + return String(_this3.$W); + + case 'dd': + return getShort(locale.weekdaysMin, _this3.$W, weekdays, 2); + + case 'ddd': + return getShort(locale.weekdaysShort, _this3.$W, weekdays, 3); + + case 'dddd': + return weekdays[_this3.$W]; + + case 'H': + return String($H); + + case 'HH': + return Utils.s($H, 2, '0'); + + case 'h': + return get$H(1); + + case 'hh': + return get$H(2); + + case 'a': + return meridiemFunc($H, $m, true); + + case 'A': + return meridiemFunc($H, $m, false); + + case 'm': + return String($m); + + case 'mm': + return Utils.s($m, 2, '0'); + + case 's': + return String(_this3.$s); + + case 'ss': + return Utils.s(_this3.$s, 2, '0'); + + case 'SSS': + return Utils.s(_this3.$ms, 3, '0'); + + case 'Z': + return zoneStr; + // 'ZZ' logic below + + default: + break; + } + + return null; + }; + + return str.replace(C.REGEX_FORMAT, function (match, $1) { + return $1 || matches(match) || zoneStr.replace(':', ''); + }); // 'ZZ' + }; + + _proto.utcOffset = function utcOffset() { + // Because a bug at FF24, we're rounding the timezone offset around 15 minutes + // https://github.com/moment/moment/pull/1871 + return -Math.round(this.$d.getTimezoneOffset() / 15) * 15; + }; + + _proto.diff = function diff(input, units, _float) { + var _this4 = this; + + var unit = Utils.p(units); + var that = dayjs(input); + var zoneDelta = (that.utcOffset() - this.utcOffset()) * C.MILLISECONDS_A_MINUTE; + var diff = this - that; + + var getMonth = function getMonth() { + return Utils.m(_this4, that); + }; + + var result; + + switch (unit) { + case C.Y: + result = getMonth() / 12; + break; + + case C.M: + result = getMonth(); + break; + + case C.Q: + result = getMonth() / 3; + break; + + case C.W: + result = (diff - zoneDelta) / C.MILLISECONDS_A_WEEK; + break; + + case C.D: + result = (diff - zoneDelta) / C.MILLISECONDS_A_DAY; + break; + + case C.H: + result = diff / C.MILLISECONDS_A_HOUR; + break; + + case C.MIN: + result = diff / C.MILLISECONDS_A_MINUTE; + break; + + case C.S: + result = diff / C.MILLISECONDS_A_SECOND; + break; + + default: + result = diff; // milliseconds + + break; + } + + return _float ? result : Utils.a(result); + }; + + _proto.daysInMonth = function daysInMonth() { + return this.endOf(C.M).$D; + }; + + _proto.$locale = function $locale() { + // get locale object + return Ls[this.$L]; + }; + + _proto.locale = function locale(preset, object) { + if (!preset) return this.$L; + var that = this.clone(); + var nextLocaleName = parseLocale(preset, object, true); + if (nextLocaleName) that.$L = nextLocaleName; + return that; + }; + + _proto.clone = function clone() { + return Utils.w(this.$d, this); + }; + + _proto.toDate = function toDate() { + return new Date(this.valueOf()); + }; + + _proto.toJSON = function toJSON() { + return this.isValid() ? this.toISOString() : null; + }; + + _proto.toISOString = function toISOString() { + // ie 8 return + // new Dayjs(this.valueOf() + this.$d.getTimezoneOffset() * 60000) + // .format('YYYY-MM-DDTHH:mm:ss.SSS[Z]') + return this.$d.toISOString(); + }; + + _proto.toString = function toString() { + return this.$d.toUTCString(); + }; + + return Dayjs; +}(); + +var proto = Dayjs.prototype; +dayjs.prototype = proto; +[['$ms', C.MS], ['$s', C.S], ['$m', C.MIN], ['$H', C.H], ['$W', C.D], ['$M', C.M], ['$y', C.Y], ['$D', C.DATE]].forEach(function (g) { + proto[g[1]] = function (input) { + return this.$g(input, g[0], g[1]); + }; +}); + +dayjs.extend = function (plugin, option) { + if (!plugin.$i) { + // install plugin only once + plugin(option, Dayjs, dayjs); + plugin.$i = true; + } + + return dayjs; +}; + +dayjs.locale = parseLocale; +dayjs.isDayjs = isDayjs; + +dayjs.unix = function (timestamp) { + return dayjs(timestamp * 1e3); +}; + +dayjs.en = Ls[L]; +dayjs.Ls = Ls; +dayjs.p = {}; +export default dayjs; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/af.js b/node_backend/node_modules/dayjs/esm/locale/af.js new file mode 100644 index 0000000000000000000000000000000000000000..ce0c2855f842e4d53df4bf256f2dc24cb6814317 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/af.js @@ -0,0 +1,39 @@ +// Afrikaans [af] +import dayjs from '../index'; +var locale = { + name: 'af', + weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'), + months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'), + weekStart: 1, + weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'oor %s', + past: '%s gelede', + s: "'n paar sekondes", + m: "'n minuut", + mm: '%d minute', + h: "'n uur", + hh: '%d ure', + d: "'n dag", + dd: '%d dae', + M: "'n maand", + MM: '%d maande', + y: "'n jaar", + yy: '%d jaar' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/am.js b/node_backend/node_modules/dayjs/esm/locale/am.js new file mode 100644 index 0000000000000000000000000000000000000000..cf25510c7ba068832c36bed789c79f21f04cae21 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/am.js @@ -0,0 +1,40 @@ +// Amharic [am] +import dayjs from '../index'; +var locale = { + name: 'am', + weekdays: 'እሑድ_ሰኞ_ማክሰኞ_ረቡዕ_ሐሙስ_አርብ_ቅዳሜ'.split('_'), + weekdaysShort: 'እሑድ_ሰኞ_ማክሰ_ረቡዕ_ሐሙስ_አርብ_ቅዳሜ'.split('_'), + weekdaysMin: 'እሑ_ሰኞ_ማክ_ረቡ_ሐሙ_አር_ቅዳ'.split('_'), + months: 'ጃንዋሪ_ፌብሯሪ_ማርች_ኤፕሪል_ሜይ_ጁን_ጁላይ_ኦገስት_ሴፕቴምበር_ኦክቶበር_ኖቬምበር_ዲሴምበር'.split('_'), + monthsShort: 'ጃንዋ_ፌብሯ_ማርች_ኤፕሪ_ሜይ_ጁን_ጁላይ_ኦገስ_ሴፕቴ_ኦክቶ_ኖቬም_ዲሴም'.split('_'), + weekStart: 1, + yearStart: 4, + relativeTime: { + future: 'በ%s', + past: '%s በፊት', + s: 'ጥቂት ሰከንዶች', + m: 'አንድ ደቂቃ', + mm: '%d ደቂቃዎች', + h: 'አንድ ሰዓት', + hh: '%d ሰዓታት', + d: 'አንድ ቀን', + dd: '%d ቀናት', + M: 'አንድ ወር', + MM: '%d ወራት', + y: 'አንድ ዓመት', + yy: '%d ዓመታት' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'MMMM D ፣ YYYY', + LLL: 'MMMM D ፣ YYYY HH:mm', + LLLL: 'dddd ፣ MMMM D ፣ YYYY HH:mm' + }, + ordinal: function ordinal(n) { + return n + "\u129B"; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ar-dz.js b/node_backend/node_modules/dayjs/esm/locale/ar-dz.js new file mode 100644 index 0000000000000000000000000000000000000000..3ecc04fca1308f0ca285f6869ffcf33a7c188910 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ar-dz.js @@ -0,0 +1,41 @@ +// Arabic (Algeria) [ar-dz] +import dayjs from '../index'; +var locale = { + name: 'ar-dz', + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdaysMin: 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + meridiem: function meridiem(hour) { + return hour > 12 ? 'م' : 'ص'; + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ar-iq.js b/node_backend/node_modules/dayjs/esm/locale/ar-iq.js new file mode 100644 index 0000000000000000000000000000000000000000..dfe31bf222b3e68338d886b6786deaff3721efb8 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ar-iq.js @@ -0,0 +1,42 @@ +// Arabic (Iraq) [ar-iq] +import dayjs from '../index'; +var locale = { + name: 'ar-iq', + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + months: 'كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول'.split('_'), + weekStart: 1, + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + monthsShort: 'كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + meridiem: function meridiem(hour) { + return hour > 12 ? 'م' : 'ص'; + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ar-kw.js b/node_backend/node_modules/dayjs/esm/locale/ar-kw.js new file mode 100644 index 0000000000000000000000000000000000000000..73bf90a7a8bf2ed9266e3fff3ca997f0f4fcf645 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ar-kw.js @@ -0,0 +1,41 @@ +// Arabic (Kuwait) [ar-kw] +import dayjs from '../index'; +var locale = { + name: 'ar-kw', + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + meridiem: function meridiem(hour) { + return hour > 12 ? 'م' : 'ص'; + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ar-ly.js b/node_backend/node_modules/dayjs/esm/locale/ar-ly.js new file mode 100644 index 0000000000000000000000000000000000000000..5caa8698046ad949c2b581afdb1ac65af37d7599 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ar-ly.js @@ -0,0 +1,27 @@ +// Arabic (Lybia) [ar-ly] +import dayjs from '../index'; +var locale = { + name: 'ar-ly', + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekStart: 6, + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + meridiem: function meridiem(hour) { + return hour > 12 ? 'م' : 'ص'; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/‏M/‏YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ar-ma.js b/node_backend/node_modules/dayjs/esm/locale/ar-ma.js new file mode 100644 index 0000000000000000000000000000000000000000..ed6dfef07f755dcd96dc0b91d583df7356e2545b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ar-ma.js @@ -0,0 +1,42 @@ +// Arabic (Morocco) [ar-ma] +import dayjs from '../index'; +var locale = { + name: 'ar-ma', + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekStart: 6, + weekdaysShort: 'احد_إثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + meridiem: function meridiem(hour) { + return hour > 12 ? 'م' : 'ص'; + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ar-sa.js b/node_backend/node_modules/dayjs/esm/locale/ar-sa.js new file mode 100644 index 0000000000000000000000000000000000000000..8eb9687e1868fe3e49d979a9d2cc21c42dbcbe8f --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ar-sa.js @@ -0,0 +1,41 @@ +// Arabic (Saudi Arabia) [ar-sa] +import dayjs from '../index'; +var locale = { + name: 'ar-sa', + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + meridiem: function meridiem(hour) { + return hour > 12 ? 'م' : 'ص'; + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ar-tn.js b/node_backend/node_modules/dayjs/esm/locale/ar-tn.js new file mode 100644 index 0000000000000000000000000000000000000000..3c1f2b01d1a2ba360277be256182c69adfefcf89 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ar-tn.js @@ -0,0 +1,42 @@ +// Arabic (Tunisia) [ar-tn] +import dayjs from '../index'; +var locale = { + name: 'ar-tn', + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekStart: 1, + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + meridiem: function meridiem(hour) { + return hour > 12 ? 'م' : 'ص'; + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ar.js b/node_backend/node_modules/dayjs/esm/locale/ar.js new file mode 100644 index 0000000000000000000000000000000000000000..78b99b8bf6f6bd96ae517d5b837009f9d96010d2 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ar.js @@ -0,0 +1,77 @@ +// Arabic [ar] +import dayjs from '../index'; +var months = 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'); +var symbolMap = { + 1: '١', + 2: '٢', + 3: '٣', + 4: '٤', + 5: '٥', + 6: '٦', + 7: '٧', + 8: '٨', + 9: '٩', + 0: '٠' +}; +var numberMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}; +var locale = { + name: 'ar', + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'), + months: months, + monthsShort: months, + weekStart: 6, + meridiem: function meridiem(hour) { + return hour > 12 ? 'م' : 'ص'; + }, + relativeTime: { + future: 'بعد %s', + past: 'منذ %s', + s: 'ثانية واحدة', + m: 'دقيقة واحدة', + mm: '%d دقائق', + h: 'ساعة واحدة', + hh: '%d ساعات', + d: 'يوم واحد', + dd: '%d أيام', + M: 'شهر واحد', + MM: '%d أشهر', + y: 'عام واحد', + yy: '%d أعوام' + }, + preparse: function preparse(string) { + return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function postformat(string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/‏M/‏YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/az.js b/node_backend/node_modules/dayjs/esm/locale/az.js new file mode 100644 index 0000000000000000000000000000000000000000..3505c8a752d59a86f1562a541212fe8319f44e16 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/az.js @@ -0,0 +1,39 @@ +// Azerbaijani [az] +import dayjs from '../index'; +var locale = { + name: 'az', + weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'), + weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'), + monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekStart: 1, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., H:mm', + LLLL: 'dddd, D MMMM YYYY г., H:mm' + }, + relativeTime: { + future: '%s sonra', + past: '%s əvvəl', + s: 'bir neçə saniyə', + m: 'bir dəqiqə', + mm: '%d dəqiqə', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir il', + yy: '%d il' + }, + ordinal: function ordinal(n) { + return n; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/be.js b/node_backend/node_modules/dayjs/esm/locale/be.js new file mode 100644 index 0000000000000000000000000000000000000000..5642e397ffe61459f5731310ae2fbc77dd7c5f97 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/be.js @@ -0,0 +1,24 @@ +// Belarusian [be] +import dayjs from '../index'; +var locale = { + name: 'be', + weekdays: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'), + months: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'), + weekStart: 1, + weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), + weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., HH:mm', + LLLL: 'dddd, D MMMM YYYY г., HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/bg.js b/node_backend/node_modules/dayjs/esm/locale/bg.js new file mode 100644 index 0000000000000000000000000000000000000000..e4e2a34ad998fedd4191506ac162048807871868 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/bg.js @@ -0,0 +1,55 @@ +// Bulgarian [bg] +import dayjs from '../index'; +var locale = { + name: 'bg', + weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'), + weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'), + monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekStart: 1, + ordinal: function ordinal(n) { + var last2Digits = n % 100; + + if (last2Digits > 10 && last2Digits < 20) { + return n + "-\u0442\u0438"; + } + + var lastDigit = n % 10; + + if (lastDigit === 1) { + return n + "-\u0432\u0438"; + } else if (lastDigit === 2) { + return n + "-\u0440\u0438"; + } else if (lastDigit === 7 || lastDigit === 8) { + return n + "-\u043C\u0438"; + } + + return n + "-\u0442\u0438"; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm' + }, + relativeTime: { + future: 'след %s', + past: 'преди %s', + s: 'няколко секунди', + m: 'минута', + mm: '%d минути', + h: 'час', + hh: '%d часа', + d: 'ден', + dd: '%d дена', + M: 'месец', + MM: '%d месеца', + y: 'година', + yy: '%d години' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/bi.js b/node_backend/node_modules/dayjs/esm/locale/bi.js new file mode 100644 index 0000000000000000000000000000000000000000..6230f251fb3cacf7e8b02a220c67ec6261d5fcc8 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/bi.js @@ -0,0 +1,39 @@ +// Bislama [bi] +import dayjs from '../index'; +var locale = { + name: 'bi', + weekdays: 'Sande_Mande_Tusde_Wenesde_Tosde_Fraede_Sarade'.split('_'), + months: 'Januari_Februari_Maj_Eprel_Mei_Jun_Julae_Okis_Septemba_Oktoba_Novemba_Disemba'.split('_'), + weekStart: 1, + weekdaysShort: 'San_Man_Tus_Wen_Tos_Frae_Sar'.split('_'), + monthsShort: 'Jan_Feb_Maj_Epr_Mai_Jun_Jul_Oki_Sep_Okt_Nov_Dis'.split('_'), + weekdaysMin: 'San_Ma_Tu_We_To_Fr_Sar'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A' + }, + relativeTime: { + future: 'lo %s', + past: '%s bifo', + s: 'sam seken', + m: 'wan minit', + mm: '%d minit', + h: 'wan haoa', + hh: '%d haoa', + d: 'wan dei', + dd: '%d dei', + M: 'wan manis', + MM: '%d manis', + y: 'wan yia', + yy: '%d yia' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/bm.js b/node_backend/node_modules/dayjs/esm/locale/bm.js new file mode 100644 index 0000000000000000000000000000000000000000..0d610930985c048c32cad0c77b3fd5073e5d6ee3 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/bm.js @@ -0,0 +1,39 @@ +// Bambara [bm] +import dayjs from '../index'; +var locale = { + name: 'bm', + weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'), + months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'), + weekStart: 1, + weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'), + monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'), + weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'MMMM [tile] D [san] YYYY', + LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', + LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm' + }, + relativeTime: { + future: '%s kɔnɔ', + past: 'a bɛ %s bɔ', + s: 'sanga dama dama', + m: 'miniti kelen', + mm: 'miniti %d', + h: 'lɛrɛ kelen', + hh: 'lɛrɛ %d', + d: 'tile kelen', + dd: 'tile %d', + M: 'kalo kelen', + MM: 'kalo %d', + y: 'san kelen', + yy: 'san %d' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/bn-bd.js b/node_backend/node_modules/dayjs/esm/locale/bn-bd.js new file mode 100644 index 0000000000000000000000000000000000000000..f13b660ba4ddd235e97ac0e38566df2a0a003f80 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/bn-bd.js @@ -0,0 +1,81 @@ +// Bengali (Bangladesh) [bn-bd] +import dayjs from '../index'; +var symbolMap = { + 1: '১', + 2: '২', + 3: '৩', + 4: '৪', + 5: '৫', + 6: '৬', + 7: '৭', + 8: '৮', + 9: '৯', + 0: '০' +}; +var numberMap = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0' +}; +var locale = { + name: 'bn-bd', + weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'), + months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'), + weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'), + weekdaysMin: 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'), + weekStart: 0, + preparse: function preparse(string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function postformat(string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + ordinal: function ordinal(n) { + var s = ['ই', 'লা', 'রা', 'ঠা', 'শে']; + var v = n % 100; + return "[" + n + (s[(v - 20) % 10] || s[v] || s[0]) + "]"; + }, + formats: { + LT: 'A h:mm সময়', + LTS: 'A h:mm:ss সময়', + L: 'DD/MM/YYYY খ্রিস্টাব্দ', + LL: 'D MMMM YYYY খ্রিস্টাব্দ', + LLL: 'D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়', + LLLL: 'dddd, D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়' + }, + meridiem: function meridiem(hour) { + return ( + /* eslint-disable no-nested-ternary */ + hour < 4 ? 'রাত' : hour < 6 ? 'ভোর' : hour < 12 ? 'সকাল' : hour < 15 ? 'দুপুর' : hour < 18 ? 'বিকাল' : hour < 20 ? 'সন্ধ্যা' : 'রাত' + ); + }, + relativeTime: { + future: '%s পরে', + past: '%s আগে', + s: 'কয়েক সেকেন্ড', + m: 'এক মিনিট', + mm: '%d মিনিট', + h: 'এক ঘন্টা', + hh: '%d ঘন্টা', + d: 'এক দিন', + dd: '%d দিন', + M: 'এক মাস', + MM: '%d মাস', + y: 'এক বছর', + yy: '%d বছর' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/bn.js b/node_backend/node_modules/dayjs/esm/locale/bn.js new file mode 100644 index 0000000000000000000000000000000000000000..25fc1703509cd5455370e17abbdadf64172976b3 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/bn.js @@ -0,0 +1,72 @@ +// Bengali [bn] +import dayjs from '../index'; +var symbolMap = { + 1: '১', + 2: '২', + 3: '৩', + 4: '৪', + 5: '৫', + 6: '৬', + 7: '৭', + 8: '৮', + 9: '৯', + 0: '০' +}; +var numberMap = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0' +}; +var locale = { + name: 'bn', + weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'), + months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'), + weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'), + weekdaysMin: 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'), + preparse: function preparse(string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap[match]; + }); + }, + postformat: function postformat(string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }); + }, + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm সময়', + LTS: 'A h:mm:ss সময়', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm সময়', + LLLL: 'dddd, D MMMM YYYY, A h:mm সময়' + }, + relativeTime: { + future: '%s পরে', + past: '%s আগে', + s: 'কয়েক সেকেন্ড', + m: 'এক মিনিট', + mm: '%d মিনিট', + h: 'এক ঘন্টা', + hh: '%d ঘন্টা', + d: 'এক দিন', + dd: '%d দিন', + M: 'এক মাস', + MM: '%d মাস', + y: 'এক বছর', + yy: '%d বছর' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/bo.js b/node_backend/node_modules/dayjs/esm/locale/bo.js new file mode 100644 index 0000000000000000000000000000000000000000..fce33446057510f05bcdebeff39bfb3c8ea7fb10 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/bo.js @@ -0,0 +1,38 @@ +// Tibetan [bo] +import dayjs from '../index'; +var locale = { + name: 'bo', + weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'), + weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + weekdaysMin: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + monthsShort: 'ཟླ་དང་པོ_ཟླ་གཉིས་པ_ཟླ་གསུམ་པ_ཟླ་བཞི་པ_ཟླ་ལྔ་པ_ཟླ་དྲུག་པ_ཟླ་བདུན་པ_ཟླ་བརྒྱད་པ_ཟླ་དགུ་པ_ཟླ་བཅུ་པ_ཟླ་བཅུ་གཅིག་པ_ཟླ་བཅུ་གཉིས་པ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm' + }, + relativeTime: { + future: '%s ལ་', + past: '%s སྔོན་ལ་', + s: 'ཏོག་ཙམ་', + m: 'སྐར་མ་གཅིག་', + mm: 'སྐར་མ་ %d', + h: 'ཆུ་ཚོད་གཅིག་', + hh: 'ཆུ་ཚོད་ %d', + d: 'ཉིན་གཅིག་', + dd: 'ཉིན་ %d', + M: 'ཟླ་བ་གཅིག་', + MM: 'ཟླ་བ་ %d', + y: 'ལོ་གཅིག་', + yy: 'ལོ་ %d' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/br.js b/node_backend/node_modules/dayjs/esm/locale/br.js new file mode 100644 index 0000000000000000000000000000000000000000..d18b4fea5d6ec6137da8c2a2e89b3d994d66ad89 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/br.js @@ -0,0 +1,93 @@ +// Breton [br] +import dayjs from '../index'; + +function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + + return number; +} + +function softMutation(text) { + var mutationTable = { + m: 'v', + b: 'v', + d: 'z' + }; + return mutationTable[text.charAt(0)] + text.substring(1); +} + +function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + + return text; +} + +function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + mm: 'munutenn', + MM: 'miz', + dd: 'devezh' + }; + return number + " " + mutation(format[key], number); +} + +function specialMutationForYears(number) { + /* istanbul ignore next line */ + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + " bloaz"; + + default: + return number + " vloaz"; + } +} + +var locale = { + name: 'br', + weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'), + months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'), + weekStart: 1, + weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'h[e]mm A', + LTS: 'h[e]mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D [a viz] MMMM YYYY', + LLL: 'D [a viz] MMMM YYYY h[e]mm A', + LLLL: 'dddd, D [a viz] MMMM YYYY h[e]mm A' + }, + relativeTime: { + future: 'a-benn %s', + past: '%s ʼzo', + s: 'un nebeud segondennoù', + m: 'ur vunutenn', + mm: relativeTimeWithMutation, + h: 'un eur', + hh: '%d eur', + d: 'un devezh', + dd: relativeTimeWithMutation, + M: 'ur miz', + MM: relativeTimeWithMutation, + y: 'ur bloaz', + yy: specialMutationForYears + }, + meridiem: function meridiem(hour) { + return hour < 12 ? 'a.m.' : 'g.m.'; + } // a-raok merenn | goude merenn + +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/bs.js b/node_backend/node_modules/dayjs/esm/locale/bs.js new file mode 100644 index 0000000000000000000000000000000000000000..328a1fe38bd6e19c60608cf1d6c36da001e948f9 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/bs.js @@ -0,0 +1,24 @@ +// Bosnian [bs] +import dayjs from '../index'; +var locale = { + name: 'bs', + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'), + weekStart: 1, + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ca.js b/node_backend/node_modules/dayjs/esm/locale/ca.js new file mode 100644 index 0000000000000000000000000000000000000000..94fc0b9c69172ef65ca2ad6aa81748ff9931a148 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ca.js @@ -0,0 +1,44 @@ +// Catalan [ca] +import dayjs from '../index'; +var locale = { + name: 'ca', + weekdays: 'Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte'.split('_'), + weekdaysShort: 'Dg._Dl._Dt._Dc._Dj._Dv._Ds.'.split('_'), + weekdaysMin: 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'), + months: 'Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre'.split('_'), + monthsShort: 'Gen._Febr._Març_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.'.split('_'), + weekStart: 1, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + LLL: 'D MMMM [de] YYYY [a les] H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY, H:mm', + llll: 'ddd D MMM YYYY, H:mm' + }, + relativeTime: { + future: 'd\'aquí %s', + past: 'fa %s', + s: 'uns segons', + m: 'un minut', + mm: '%d minuts', + h: 'una hora', + hh: '%d hores', + d: 'un dia', + dd: '%d dies', + M: 'un mes', + MM: '%d mesos', + y: 'un any', + yy: '%d anys' + }, + ordinal: function ordinal(n) { + var ord; + if (n === 1 || n === 3) ord = 'r';else if (n === 2) ord = 'n';else if (n === 4) ord = 't';else ord = 'è'; + return "" + n + ord; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/cs.js b/node_backend/node_modules/dayjs/esm/locale/cs.js new file mode 100644 index 0000000000000000000000000000000000000000..165b662c6bc1f74d8d2edb4edeafd07e9b8fcf0b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/cs.js @@ -0,0 +1,120 @@ +// Czech [cs] +import dayjs from '../index'; + +function plural(n) { + return n > 1 && n < 5 && ~~(n / 10) !== 1; // eslint-disable-line +} +/* eslint-disable */ + + +function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + + switch (key) { + case 's': + // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami'; + + case 'm': + // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou'; + + case 'mm': + // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minuty' : 'minut'); + } + + return result + "minutami"; + + case 'h': + // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + + case 'hh': + // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodin'); + } + + return result + "hodinami"; + + case 'd': + // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'den' : 'dnem'; + + case 'dd': + // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dny' : 'dní'); + } + + return result + "dny"; + + case 'M': + // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'měsíc' : 'měsícem'; + + case 'MM': + // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'měsíce' : 'měsíců'); + } + + return result + "m\u011Bs\xEDci"; + + case 'y': + // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokem'; + + case 'yy': + // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'let'); + } + + return result + "lety"; + } +} +/* eslint-enable */ + + +var locale = { + name: 'cs', + weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'), + months: 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'), + monthsShort: 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'), + weekStart: 1, + yearStart: 4, + ordinal: function ordinal(n) { + return n + "."; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + l: 'D. M. YYYY' + }, + relativeTime: { + future: 'za %s', + past: 'před %s', + s: translate, + m: translate, + mm: translate, + h: translate, + hh: translate, + d: translate, + dd: translate, + M: translate, + MM: translate, + y: translate, + yy: translate + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/cv.js b/node_backend/node_modules/dayjs/esm/locale/cv.js new file mode 100644 index 0000000000000000000000000000000000000000..7dc41f767dd03ce32726ebe1b6d51469f76621a4 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/cv.js @@ -0,0 +1,24 @@ +// Chuvash [cv] +import dayjs from '../index'; +var locale = { + name: 'cv', + weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'), + months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'), + weekStart: 1, + weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/cy.js b/node_backend/node_modules/dayjs/esm/locale/cy.js new file mode 100644 index 0000000000000000000000000000000000000000..63e6c33c2c5d51e452d1ed02e95b8e234193e6bd --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/cy.js @@ -0,0 +1,39 @@ +// Welsh [cy] +import dayjs from '../index'; +var locale = { + name: 'cy', + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'), + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'), + weekStart: 1, + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/da.js b/node_backend/node_modules/dayjs/esm/locale/da.js new file mode 100644 index 0000000000000000000000000000000000000000..9c2d04895fbe3b18ebf78f436e922544ae3ddb9e --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/da.js @@ -0,0 +1,40 @@ +// Danish [da] +import dayjs from '../index'; +var locale = { + name: 'da', + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'søn._man._tirs._ons._tors._fre._lør.'.split('_'), + weekdaysMin: 'sø._ma._ti._on._to._fr._lø.'.split('_'), + months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.'.split('_'), + weekStart: 1, + yearStart: 4, + ordinal: function ordinal(n) { + return n + "."; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm' + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'få sekunder', + m: 'et minut', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dage', + M: 'en måned', + MM: '%d måneder', + y: 'et år', + yy: '%d år' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/de-at.js b/node_backend/node_modules/dayjs/esm/locale/de-at.js new file mode 100644 index 0000000000000000000000000000000000000000..e109d97103a6780d9e32b06f0fc99ee901a6333d --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/de-at.js @@ -0,0 +1,63 @@ +// German (Austria) [de-at] +import dayjs from '../index'; +var texts = { + s: 'ein paar Sekunden', + m: ['eine Minute', 'einer Minute'], + mm: '%d Minuten', + h: ['eine Stunde', 'einer Stunde'], + hh: '%d Stunden', + d: ['ein Tag', 'einem Tag'], + dd: ['%d Tage', '%d Tagen'], + M: ['ein Monat', 'einem Monat'], + MM: ['%d Monate', '%d Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: ['%d Jahre', '%d Jahren'] +}; + +function relativeTimeFormatter(number, withoutSuffix, key) { + var l = texts[key]; + + if (Array.isArray(l)) { + l = l[withoutSuffix ? 0 : 1]; + } + + return l.replace('%d', number); +} + +var locale = { + name: 'de-at', + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + formats: { + LTS: 'HH:mm:ss', + LT: 'HH:mm', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: relativeTimeFormatter, + m: relativeTimeFormatter, + mm: relativeTimeFormatter, + h: relativeTimeFormatter, + hh: relativeTimeFormatter, + d: relativeTimeFormatter, + dd: relativeTimeFormatter, + M: relativeTimeFormatter, + MM: relativeTimeFormatter, + y: relativeTimeFormatter, + yy: relativeTimeFormatter + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/de-ch.js b/node_backend/node_modules/dayjs/esm/locale/de-ch.js new file mode 100644 index 0000000000000000000000000000000000000000..1ffbbf73086fa6f62ec926fa959e32b535eeecc6 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/de-ch.js @@ -0,0 +1,63 @@ +// German (Switzerland) [de-ch] +import dayjs from '../index'; +var texts = { + s: 'ein paar Sekunden', + m: ['eine Minute', 'einer Minute'], + mm: '%d Minuten', + h: ['eine Stunde', 'einer Stunde'], + hh: '%d Stunden', + d: ['ein Tag', 'einem Tag'], + dd: ['%d Tage', '%d Tagen'], + M: ['ein Monat', 'einem Monat'], + MM: ['%d Monate', '%d Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: ['%d Jahre', '%d Jahren'] +}; + +function relativeTimeFormatter(number, withoutSuffix, key) { + var l = texts[key]; + + if (Array.isArray(l)) { + l = l[withoutSuffix ? 0 : 1]; + } + + return l.replace('%d', number); +} + +var locale = { + name: 'de-ch', + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: relativeTimeFormatter, + m: relativeTimeFormatter, + mm: relativeTimeFormatter, + h: relativeTimeFormatter, + hh: relativeTimeFormatter, + d: relativeTimeFormatter, + dd: relativeTimeFormatter, + M: relativeTimeFormatter, + MM: relativeTimeFormatter, + y: relativeTimeFormatter, + yy: relativeTimeFormatter + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/de.js b/node_backend/node_modules/dayjs/esm/locale/de.js new file mode 100644 index 0000000000000000000000000000000000000000..8ccd48337ee87cc73f37a93bc790f5ba054525ff --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/de.js @@ -0,0 +1,64 @@ +// German [de] +import dayjs from '../index'; +var texts = { + s: 'ein paar Sekunden', + m: ['eine Minute', 'einer Minute'], + mm: '%d Minuten', + h: ['eine Stunde', 'einer Stunde'], + hh: '%d Stunden', + d: ['ein Tag', 'einem Tag'], + dd: ['%d Tage', '%d Tagen'], + M: ['ein Monat', 'einem Monat'], + MM: ['%d Monate', '%d Monaten'], + y: ['ein Jahr', 'einem Jahr'], + yy: ['%d Jahre', '%d Jahren'] +}; + +function relativeTimeFormatter(number, withoutSuffix, key) { + var l = texts[key]; + + if (Array.isArray(l)) { + l = l[withoutSuffix ? 0 : 1]; + } + + return l.replace('%d', number); +} + +var locale = { + name: 'de', + weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + yearStart: 4, + formats: { + LTS: 'HH:mm:ss', + LT: 'HH:mm', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY HH:mm', + LLLL: 'dddd, D. MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'in %s', + past: 'vor %s', + s: relativeTimeFormatter, + m: relativeTimeFormatter, + mm: relativeTimeFormatter, + h: relativeTimeFormatter, + hh: relativeTimeFormatter, + d: relativeTimeFormatter, + dd: relativeTimeFormatter, + M: relativeTimeFormatter, + MM: relativeTimeFormatter, + y: relativeTimeFormatter, + yy: relativeTimeFormatter + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/dv.js b/node_backend/node_modules/dayjs/esm/locale/dv.js new file mode 100644 index 0000000000000000000000000000000000000000..8943fdd80c72ffac0287c3606162956b6d624f47 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/dv.js @@ -0,0 +1,39 @@ +// Maldivian [dv] +import dayjs from '../index'; +var locale = { + name: 'dv', + weekdays: 'އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު'.split('_'), + months: 'ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު'.split('_'), + weekStart: 7, + weekdaysShort: 'އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު'.split('_'), + monthsShort: 'ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު'.split('_'), + weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'D/M/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'ތެރޭގައި %s', + past: 'ކުރިން %s', + s: 'ސިކުންތުކޮޅެއް', + m: 'މިނިޓެއް', + mm: 'މިނިޓު %d', + h: 'ގަޑިއިރެއް', + hh: 'ގަޑިއިރު %d', + d: 'ދުވަހެއް', + dd: 'ދުވަސް %d', + M: 'މަހެއް', + MM: 'މަސް %d', + y: 'އަހަރެއް', + yy: 'އަހަރު %d' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/el.js b/node_backend/node_modules/dayjs/esm/locale/el.js new file mode 100644 index 0000000000000000000000000000000000000000..2aa9917dc369539b86b8209a31cf72d7f4f2910b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/el.js @@ -0,0 +1,39 @@ +// Greek [el] +import dayjs from '../index'; +var locale = { + name: 'el', + weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'), + weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + months: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), + monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαι_Ιουν_Ιουλ_Αυγ_Σεπτ_Οκτ_Νοε_Δεκ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + weekStart: 1, + relativeTime: { + future: 'σε %s', + past: 'πριν %s', + s: 'μερικά δευτερόλεπτα', + m: 'ένα λεπτό', + mm: '%d λεπτά', + h: 'μία ώρα', + hh: '%d ώρες', + d: 'μία μέρα', + dd: '%d μέρες', + M: 'ένα μήνα', + MM: '%d μήνες', + y: 'ένα χρόνο', + yy: '%d χρόνια' + }, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en-au.js b/node_backend/node_modules/dayjs/esm/locale/en-au.js new file mode 100644 index 0000000000000000000000000000000000000000..f9dde03402bcb29d122686a468d0523c9733c241 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en-au.js @@ -0,0 +1,39 @@ +// English (Australia) [en-au] +import dayjs from '../index'; +var locale = { + name: 'en-au', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + weekStart: 1, + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A' + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en-ca.js b/node_backend/node_modules/dayjs/esm/locale/en-ca.js new file mode 100644 index 0000000000000000000000000000000000000000..8e416c9965a7eba118e692a3f05157b86164af0d --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en-ca.js @@ -0,0 +1,38 @@ +// English (Canada) [en-ca] +import dayjs from '../index'; +var locale = { + name: 'en-ca', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'YYYY-MM-DD', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A' + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en-gb.js b/node_backend/node_modules/dayjs/esm/locale/en-gb.js new file mode 100644 index 0000000000000000000000000000000000000000..f979b442fb3daf18d003d58e34cffe46261814a4 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en-gb.js @@ -0,0 +1,42 @@ +// English (United Kingdom) [en-gb] +import dayjs from '../index'; +var locale = { + name: 'en-gb', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekStart: 1, + yearStart: 4, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + ordinal: function ordinal(n) { + var s = ['th', 'st', 'nd', 'rd']; + var v = n % 100; + return "[" + n + (s[(v - 20) % 10] || s[v] || s[0]) + "]"; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en-ie.js b/node_backend/node_modules/dayjs/esm/locale/en-ie.js new file mode 100644 index 0000000000000000000000000000000000000000..8098d2f7a2b2c2a6779fe2937fec687d1dc70940 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en-ie.js @@ -0,0 +1,39 @@ +// English (Ireland) [en-ie] +import dayjs from '../index'; +var locale = { + name: 'en-ie', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + weekStart: 1, + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en-il.js b/node_backend/node_modules/dayjs/esm/locale/en-il.js new file mode 100644 index 0000000000000000000000000000000000000000..56c241ac427e249a6e88320f83b032d3e7278971 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en-il.js @@ -0,0 +1,38 @@ +// English (Israel) [en-il] +import dayjs from '../index'; +var locale = { + name: 'en-il', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en-in.js b/node_backend/node_modules/dayjs/esm/locale/en-in.js new file mode 100644 index 0000000000000000000000000000000000000000..7ccb206ca0e35438b83c0e9c35b352301879dbe6 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en-in.js @@ -0,0 +1,42 @@ +// English (India) [en-in] +import dayjs from '../index'; +var locale = { + name: 'en-in', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekStart: 1, + yearStart: 4, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + ordinal: function ordinal(n) { + var s = ['th', 'st', 'nd', 'rd']; + var v = n % 100; + return "[" + n + (s[(v - 20) % 10] || s[v] || s[0]) + "]"; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en-nz.js b/node_backend/node_modules/dayjs/esm/locale/en-nz.js new file mode 100644 index 0000000000000000000000000000000000000000..08c562eb02363c779c0558ec723438171b038446 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en-nz.js @@ -0,0 +1,41 @@ +// English (New Zealand) [en-nz] +import dayjs from '../index'; +var locale = { + name: 'en-nz', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + weekStart: 1, + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + ordinal: function ordinal(n) { + var s = ['th', 'st', 'nd', 'rd']; + var v = n % 100; + return "[" + n + (s[(v - 20) % 10] || s[v] || s[0]) + "]"; + }, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A' + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en-sg.js b/node_backend/node_modules/dayjs/esm/locale/en-sg.js new file mode 100644 index 0000000000000000000000000000000000000000..3c5edceef9d1a3fbf49475e0b35e7477e12b8a9c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en-sg.js @@ -0,0 +1,39 @@ +// English (Singapore) [en-sg] +import dayjs from '../index'; +var locale = { + name: 'en-sg', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + weekStart: 1, + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en-tt.js b/node_backend/node_modules/dayjs/esm/locale/en-tt.js new file mode 100644 index 0000000000000000000000000000000000000000..ef47eeba3af9f09b51130451f196a6c4b1334543 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en-tt.js @@ -0,0 +1,42 @@ +// English (Trinidad & Tobago) [en-tt] +import dayjs from '../index'; +var locale = { + name: 'en-tt', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekStart: 1, + yearStart: 4, + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + ordinal: function ordinal(n) { + var s = ['th', 'st', 'nd', 'rd']; + var v = n % 100; + return "[" + n + (s[(v - 20) % 10] || s[v] || s[0]) + "]"; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/en.js b/node_backend/node_modules/dayjs/esm/locale/en.js new file mode 100644 index 0000000000000000000000000000000000000000..8ba610720a4b9b6828328eb25549463b35585175 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/en.js @@ -0,0 +1,12 @@ +// English [en] +// We don't need weekdaysShort, weekdaysMin, monthsShort in en.js locale +export default { + name: 'en', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + ordinal: function ordinal(n) { + var s = ['th', 'st', 'nd', 'rd']; + var v = n % 100; + return "[" + n + (s[(v - 20) % 10] || s[v] || s[0]) + "]"; + } +}; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/eo.js b/node_backend/node_modules/dayjs/esm/locale/eo.js new file mode 100644 index 0000000000000000000000000000000000000000..e62599aae764959ee5a26127dde1f62d0c9594d1 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/eo.js @@ -0,0 +1,39 @@ +// Esperanto [eo] +import dayjs from '../index'; +var locale = { + name: 'eo', + weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), + months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'), + weekStart: 1, + weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'), + weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D[-a de] MMMM, YYYY', + LLL: 'D[-a de] MMMM, YYYY HH:mm', + LLLL: 'dddd, [la] D[-a de] MMMM, YYYY HH:mm' + }, + relativeTime: { + future: 'post %s', + past: 'antaŭ %s', + s: 'sekundoj', + m: 'minuto', + mm: '%d minutoj', + h: 'horo', + hh: '%d horoj', + d: 'tago', + dd: '%d tagoj', + M: 'monato', + MM: '%d monatoj', + y: 'jaro', + yy: '%d jaroj' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/es-do.js b/node_backend/node_modules/dayjs/esm/locale/es-do.js new file mode 100644 index 0000000000000000000000000000000000000000..09410cfab1948bd8d14aae47ed57cee21d12128e --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/es-do.js @@ -0,0 +1,39 @@ +// Spanish (Dominican Republic) [es-do] +import dayjs from '../index'; +var locale = { + name: 'es-do', + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + weekStart: 1, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años' + }, + ordinal: function ordinal(n) { + return n + "\xBA"; + }, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/es-mx.js b/node_backend/node_modules/dayjs/esm/locale/es-mx.js new file mode 100644 index 0000000000000000000000000000000000000000..0207f83bac58f8951097b909d57f1cf0ce8b99ce --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/es-mx.js @@ -0,0 +1,38 @@ +// Spanish (Mexico) [es-mx] +import dayjs from '../index'; +var locale = { + name: 'es-mx', + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años' + }, + ordinal: function ordinal(n) { + return n + "\xBA"; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/es-pr.js b/node_backend/node_modules/dayjs/esm/locale/es-pr.js new file mode 100644 index 0000000000000000000000000000000000000000..5edc359eeb47697e7e197870d302482d2ed81ac1 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/es-pr.js @@ -0,0 +1,39 @@ +// Spanish (Puerto Rico) [es-PR] +import dayjs from '../index'; +var locale = { + name: 'es-pr', + monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + weekStart: 1, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'MM/DD/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A' + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años' + }, + ordinal: function ordinal(n) { + return n + "\xBA"; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/es-us.js b/node_backend/node_modules/dayjs/esm/locale/es-us.js new file mode 100644 index 0000000000000000000000000000000000000000..f9b01a08f95aea8ce113066b476e87032b2912b6 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/es-us.js @@ -0,0 +1,38 @@ +// Spanish (United States) [es-us] +import dayjs from '../index'; +var locale = { + name: 'es-us', + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años' + }, + ordinal: function ordinal(n) { + return n + "\xBA"; + }, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'MM/DD/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY h:mm A', + LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/es.js b/node_backend/node_modules/dayjs/esm/locale/es.js new file mode 100644 index 0000000000000000000000000000000000000000..84bdfbe916ce2770f35b715209a1e6b5b552baf9 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/es.js @@ -0,0 +1,39 @@ +// Spanish [es] +import dayjs from '../index'; +var locale = { + name: 'es', + monthsShort: 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'), + months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + weekStart: 1, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + relativeTime: { + future: 'en %s', + past: 'hace %s', + s: 'unos segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'una hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un año', + yy: '%d años' + }, + ordinal: function ordinal(n) { + return n + "\xBA"; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/et.js b/node_backend/node_modules/dayjs/esm/locale/et.js new file mode 100644 index 0000000000000000000000000000000000000000..7f7c5ff59a7d93bcd819013f957d093f37dea0fe --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/et.js @@ -0,0 +1,65 @@ +// Estonian [et] +import dayjs from '../index'; + +function relativeTimeWithTense(number, withoutSuffix, key, isFuture) { + var format = { + s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + m: ['ühe minuti', 'üks minut'], + mm: ['%d minuti', '%d minutit'], + h: ['ühe tunni', 'tund aega', 'üks tund'], + hh: ['%d tunni', '%d tundi'], + d: ['ühe päeva', 'üks päev'], + M: ['kuu aja', 'kuu aega', 'üks kuu'], + MM: ['%d kuu', '%d kuud'], + y: ['ühe aasta', 'aasta', 'üks aasta'], + yy: ['%d aasta', '%d aastat'] + }; + + if (withoutSuffix) { + return (format[key][2] ? format[key][2] : format[key][1]).replace('%d', number); + } + + return (isFuture ? format[key][0] : format[key][1]).replace('%d', number); +} + +var locale = { + name: 'et', + // Estonian + weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), + // Note weekdays are not capitalized in Estonian + weekdaysShort: 'P_E_T_K_N_R_L'.split('_'), + // There is no short form of weekdays in Estonian except this 1 letter format so it is used for both 'weekdaysShort' and 'weekdaysMin' + weekdaysMin: 'P_E_T_K_N_R_L'.split('_'), + months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), + // Note month names are not capitalized in Estonian + monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + relativeTime: { + future: '%s pärast', + past: '%s tagasi', + s: relativeTimeWithTense, + m: relativeTimeWithTense, + mm: relativeTimeWithTense, + h: relativeTimeWithTense, + hh: relativeTimeWithTense, + d: relativeTimeWithTense, + dd: '%d päeva', + M: relativeTimeWithTense, + MM: relativeTimeWithTense, + y: relativeTimeWithTense, + yy: relativeTimeWithTense + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/eu.js b/node_backend/node_modules/dayjs/esm/locale/eu.js new file mode 100644 index 0000000000000000000000000000000000000000..5cb73d093c38dd9dc02705ee72ad02df55a9c85a --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/eu.js @@ -0,0 +1,43 @@ +// Basque [eu] +import dayjs from '../index'; +var locale = { + name: 'eu', + weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'), + months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'), + weekStart: 1, + weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'), + monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'), + weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY[ko] MMMM[ren] D[a]', + LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l: 'YYYY-M-D', + ll: 'YYYY[ko] MMM D[a]', + lll: 'YYYY[ko] MMM D[a] HH:mm', + llll: 'ddd, YYYY[ko] MMM D[a] HH:mm' + }, + relativeTime: { + future: '%s barru', + past: 'duela %s', + s: 'segundo batzuk', + m: 'minutu bat', + mm: '%d minutu', + h: 'ordu bat', + hh: '%d ordu', + d: 'egun bat', + dd: '%d egun', + M: 'hilabete bat', + MM: '%d hilabete', + y: 'urte bat', + yy: '%d urte' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/fa.js b/node_backend/node_modules/dayjs/esm/locale/fa.js new file mode 100644 index 0000000000000000000000000000000000000000..089459e78a545933283c6b81721a2a64a12554a5 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/fa.js @@ -0,0 +1,39 @@ +// Persian [fa] +import dayjs from '../index'; +var locale = { + name: 'fa', + weekdays: 'یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه'.split('_'), + weekdaysShort: "\u06CC\u06A9\u200C\u0634\u0646\u0628\u0647_\u062F\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200C\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067E\u0646\u062C\u200C\u0634\u0646\u0628\u0647_\u062C\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split('_'), + weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'), + weekStart: 6, + months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'در %s', + past: '%s پیش', + s: 'چند ثانیه', + m: 'یک دقیقه', + mm: '%d دقیقه', + h: 'یک ساعت', + hh: '%d ساعت', + d: 'یک روز', + dd: '%d روز', + M: 'یک ماه', + MM: '%d ماه', + y: 'یک سال', + yy: '%d سال' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/fi.js b/node_backend/node_modules/dayjs/esm/locale/fi.js new file mode 100644 index 0000000000000000000000000000000000000000..1ded894dbbb656fd4020513971c34027ecd24f29 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/fi.js @@ -0,0 +1,88 @@ +// Finnish [fi] +import dayjs from '../index'; + +function relativeTimeFormatter(number, withoutSuffix, key, isFuture) { + var past = { + s: 'muutama sekunti', + m: 'minuutti', + mm: '%d minuuttia', + h: 'tunti', + hh: '%d tuntia', + d: 'päivä', + dd: '%d päivää', + M: 'kuukausi', + MM: '%d kuukautta', + y: 'vuosi', + yy: '%d vuotta', + numbers: 'nolla_yksi_kaksi_kolme_neljä_viisi_kuusi_seitsemän_kahdeksan_yhdeksän'.split('_') + }; + var future = { + s: 'muutaman sekunnin', + m: 'minuutin', + mm: '%d minuutin', + h: 'tunnin', + hh: '%d tunnin', + d: 'päivän', + dd: '%d päivän', + M: 'kuukauden', + MM: '%d kuukauden', + y: 'vuoden', + yy: '%d vuoden', + numbers: 'nollan_yhden_kahden_kolmen_neljän_viiden_kuuden_seitsemän_kahdeksan_yhdeksän'.split('_') + }; + var words = isFuture && !withoutSuffix ? future : past; + var result = words[key]; + + if (number < 10) { + return result.replace('%d', words.numbers[number]); + } + + return result.replace('%d', number); +} + +var locale = { + name: 'fi', + // Finnish + weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), + // Note weekdays are not capitalized in Finnish + weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), + // There is no short form of weekdays in Finnish except this 2 letter format so it is used for both 'weekdaysShort' and 'weekdaysMin' + weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'), + months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), + // Note month names are not capitalized in Finnish + monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + yearStart: 4, + relativeTime: { + future: '%s päästä', + past: '%s sitten', + s: relativeTimeFormatter, + m: relativeTimeFormatter, + mm: relativeTimeFormatter, + h: relativeTimeFormatter, + hh: relativeTimeFormatter, + d: relativeTimeFormatter, + dd: relativeTimeFormatter, + M: relativeTimeFormatter, + MM: relativeTimeFormatter, + y: relativeTimeFormatter, + yy: relativeTimeFormatter + }, + formats: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM[ta] YYYY', + LLL: 'D. MMMM[ta] YYYY, [klo] HH.mm', + LLLL: 'dddd, D. MMMM[ta] YYYY, [klo] HH.mm', + l: 'D.M.YYYY', + ll: 'D. MMM YYYY', + lll: 'D. MMM YYYY, [klo] HH.mm', + llll: 'ddd, D. MMM YYYY, [klo] HH.mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/fo.js b/node_backend/node_modules/dayjs/esm/locale/fo.js new file mode 100644 index 0000000000000000000000000000000000000000..07c376173d8d2cec9a93ba1d13013bad36865414 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/fo.js @@ -0,0 +1,39 @@ +// Faroese [fo] +import dayjs from '../index'; +var locale = { + name: 'fo', + weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'), + months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + weekStart: 1, + weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D. MMMM, YYYY HH:mm' + }, + relativeTime: { + future: 'um %s', + past: '%s síðani', + s: 'fá sekund', + m: 'ein minuttur', + mm: '%d minuttir', + h: 'ein tími', + hh: '%d tímar', + d: 'ein dagur', + dd: '%d dagar', + M: 'ein mánaður', + MM: '%d mánaðir', + y: 'eitt ár', + yy: '%d ár' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/fr-ca.js b/node_backend/node_modules/dayjs/esm/locale/fr-ca.js new file mode 100644 index 0000000000000000000000000000000000000000..688d695c67b0ba678c1441dafbd31bcb54af5c68 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/fr-ca.js @@ -0,0 +1,38 @@ +// French (Canada) [fr-ca] +import dayjs from '../index'; +var locale = { + name: 'fr-ca', + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/fr-ch.js b/node_backend/node_modules/dayjs/esm/locale/fr-ch.js new file mode 100644 index 0000000000000000000000000000000000000000..593dba804685b9220c6a4d91b856fe5a38697b1d --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/fr-ch.js @@ -0,0 +1,39 @@ +// French (Switzerland) [fr-ch] +import dayjs from '../index'; +var locale = { + name: 'fr-ch', + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + weekStart: 1, + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/fr.js b/node_backend/node_modules/dayjs/esm/locale/fr.js new file mode 100644 index 0000000000000000000000000000000000000000..b31c11d3ad848684c246edfdca9529566b9ad0d3 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/fr.js @@ -0,0 +1,41 @@ +// French [fr] +import dayjs from '../index'; +var locale = { + name: 'fr', + weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'), + months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + weekStart: 1, + yearStart: 4, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'dans %s', + past: 'il y a %s', + s: 'quelques secondes', + m: 'une minute', + mm: '%d minutes', + h: 'une heure', + hh: '%d heures', + d: 'un jour', + dd: '%d jours', + M: 'un mois', + MM: '%d mois', + y: 'un an', + yy: '%d ans' + }, + ordinal: function ordinal(n) { + var o = n === 1 ? 'er' : ''; + return "" + n + o; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/fy.js b/node_backend/node_modules/dayjs/esm/locale/fy.js new file mode 100644 index 0000000000000000000000000000000000000000..4b9f9de41ec829449009f3f68fc9e5f524084b8b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/fy.js @@ -0,0 +1,39 @@ +// Frisian [fy] +import dayjs from '../index'; +var locale = { + name: 'fy', + weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'), + months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), + monthsShort: 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'), + weekStart: 1, + weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'oer %s', + past: '%s lyn', + s: 'in pear sekonden', + m: 'ien minút', + mm: '%d minuten', + h: 'ien oere', + hh: '%d oeren', + d: 'ien dei', + dd: '%d dagen', + M: 'ien moanne', + MM: '%d moannen', + y: 'ien jier', + yy: '%d jierren' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ga.js b/node_backend/node_modules/dayjs/esm/locale/ga.js new file mode 100644 index 0000000000000000000000000000000000000000..8cdfa9f128db4631c65a6f6ad2ac0016f4191d10 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ga.js @@ -0,0 +1,39 @@ +// Irish or Irish Gaelic [ga] +import dayjs from '../index'; +var locale = { + name: 'ga', + weekdays: 'Dé Domhnaigh_Dé Luain_Dé Máirt_Dé Céadaoin_Déardaoin_Dé hAoine_Dé Satharn'.split('_'), + months: 'Eanáir_Feabhra_Márta_Aibreán_Bealtaine_Méitheamh_Iúil_Lúnasa_Meán Fómhair_Deaireadh Fómhair_Samhain_Nollaig'.split('_'), + weekStart: 1, + weekdaysShort: 'Dom_Lua_Mái_Céa_Déa_hAo_Sat'.split('_'), + monthsShort: 'Eaná_Feab_Márt_Aibr_Beal_Méit_Iúil_Lúna_Meán_Deai_Samh_Noll'.split('_'), + weekdaysMin: 'Do_Lu_Má_Ce_Dé_hA_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'i %s', + past: '%s ó shin', + s: 'cúpla soicind', + m: 'nóiméad', + mm: '%d nóiméad', + h: 'uair an chloig', + hh: '%d uair an chloig', + d: 'lá', + dd: '%d lá', + M: 'mí', + MM: '%d mí', + y: 'bliain', + yy: '%d bliain' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/gd.js b/node_backend/node_modules/dayjs/esm/locale/gd.js new file mode 100644 index 0000000000000000000000000000000000000000..fcf62cd5d769f76b0ba73a9b097f82d79487d639 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/gd.js @@ -0,0 +1,39 @@ +// Scottish Gaelic [gd] +import dayjs from '../index'; +var locale = { + name: 'gd', + weekdays: 'Didòmhnaich_Diluain_Dimàirt_Diciadain_Diardaoin_Dihaoine_Disathairne'.split('_'), + months: 'Am Faoilleach_An Gearran_Am Màrt_An Giblean_An Cèitean_An t-Ògmhios_An t-Iuchar_An Lùnastal_An t-Sultain_An Dàmhair_An t-Samhain_An Dùbhlachd'.split('_'), + weekStart: 1, + weekdaysShort: 'Did_Dil_Dim_Dic_Dia_Dih_Dis'.split('_'), + monthsShort: 'Faoi_Gear_Màrt_Gibl_Cèit_Ògmh_Iuch_Lùn_Sult_Dàmh_Samh_Dùbh'.split('_'), + weekdaysMin: 'Dò_Lu_Mà_Ci_Ar_Ha_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'ann an %s', + past: 'bho chionn %s', + s: 'beagan diogan', + m: 'mionaid', + mm: '%d mionaidean', + h: 'uair', + hh: '%d uairean', + d: 'latha', + dd: '%d latha', + M: 'mìos', + MM: '%d mìosan', + y: 'bliadhna', + yy: '%d bliadhna' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/gl.js b/node_backend/node_modules/dayjs/esm/locale/gl.js new file mode 100644 index 0000000000000000000000000000000000000000..23d687f634adfcee60c2db32101fdf7ab1f0a824 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/gl.js @@ -0,0 +1,39 @@ +// Galician [gl] +import dayjs from '../index'; +var locale = { + name: 'gl', + weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'), + weekStart: 1, + weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'), + weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'), + ordinal: function ordinal(n) { + return n + "\xBA"; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY H:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + relativeTime: { + future: 'en %s', + past: 'fai %s', + s: 'uns segundos', + m: 'un minuto', + mm: '%d minutos', + h: 'unha hora', + hh: '%d horas', + d: 'un día', + dd: '%d días', + M: 'un mes', + MM: '%d meses', + y: 'un ano', + yy: '%d anos' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/gom-latn.js b/node_backend/node_modules/dayjs/esm/locale/gom-latn.js new file mode 100644 index 0000000000000000000000000000000000000000..d621f5b7614311b08bc1d62f61cf80a5508486cd --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/gom-latn.js @@ -0,0 +1,25 @@ +// Konkani Latin script [gom-latn] +import dayjs from '../index'; +var locale = { + name: 'gom-latn', + weekdays: "Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split('_'), + months: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'), + weekStart: 1, + weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), + monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), + weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm [vazta]', + LTS: 'A h:mm:ss [vazta]', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY A h:mm [vazta]', + LLLL: 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]', + llll: 'ddd, D MMM YYYY, A h:mm [vazta]' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/gu.js b/node_backend/node_modules/dayjs/esm/locale/gu.js new file mode 100644 index 0000000000000000000000000000000000000000..e05f44ba1a7cf3a3c94ede2305b6f654eee16201 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/gu.js @@ -0,0 +1,38 @@ +// Gujarati [gu] +import dayjs from '../index'; +var locale = { + name: 'gu', + weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'), + months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'), + weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'), + monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'), + weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm વાગ્યે', + LTS: 'A h:mm:ss વાગ્યે', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm વાગ્યે', + LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે' + }, + relativeTime: { + future: '%s મા', + past: '%s પેહલા', + s: 'અમુક પળો', + m: 'એક મિનિટ', + mm: '%d મિનિટ', + h: 'એક કલાક', + hh: '%d કલાક', + d: 'એક દિવસ', + dd: '%d દિવસ', + M: 'એક મહિનો', + MM: '%d મહિનો', + y: 'એક વર્ષ', + yy: '%d વર્ષ' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/he.js b/node_backend/node_modules/dayjs/esm/locale/he.js new file mode 100644 index 0000000000000000000000000000000000000000..a8868ff69802c411c8b2ceae2af09081502b478c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/he.js @@ -0,0 +1,78 @@ +// Hebrew [he] +import dayjs from '../index'; +var texts = { + s: 'מספר שניות', + ss: '%d שניות', + m: 'דקה', + mm: '%d דקות', + h: 'שעה', + hh: '%d שעות', + hh2: 'שעתיים', + d: 'יום', + dd: '%d ימים', + dd2: 'יומיים', + M: 'חודש', + MM: '%d חודשים', + MM2: 'חודשיים', + y: 'שנה', + yy: '%d שנים', + yy2: 'שנתיים' +}; + +function relativeTimeFormatter(number, withoutSuffix, key) { + var text = texts[key + (number === 2 ? '2' : '')] || texts[key]; + return text.replace('%d', number); +} + +var locale = { + name: 'he', + weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin: 'א׳_ב׳_ג׳_ד׳_ה׳_ו_ש׳'.split('_'), + months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), + monthsShort: 'ינו_פבר_מרץ_אפר_מאי_יונ_יול_אוג_ספט_אוק_נוב_דצמ'.split('_'), + relativeTime: { + future: 'בעוד %s', + past: 'לפני %s', + s: relativeTimeFormatter, + m: relativeTimeFormatter, + mm: relativeTimeFormatter, + h: relativeTimeFormatter, + hh: relativeTimeFormatter, + d: relativeTimeFormatter, + dd: relativeTimeFormatter, + M: relativeTimeFormatter, + MM: relativeTimeFormatter, + y: relativeTimeFormatter, + yy: relativeTimeFormatter + }, + ordinal: function ordinal(n) { + return n; + }, + format: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [ב]MMMM YYYY', + LLL: 'D [ב]MMMM YYYY HH:mm', + LLLL: 'dddd, D [ב]MMMM YYYY HH:mm', + l: 'D/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [ב]MMMM YYYY', + LLL: 'D [ב]MMMM YYYY HH:mm', + LLLL: 'dddd, D [ב]MMMM YYYY HH:mm', + l: 'D/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/hi.js b/node_backend/node_modules/dayjs/esm/locale/hi.js new file mode 100644 index 0000000000000000000000000000000000000000..e877ed6b1033d95ad73f8b030a147b2110bb5ea5 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/hi.js @@ -0,0 +1,38 @@ +// Hindi [hi] +import dayjs from '../index'; +var locale = { + name: 'hi', + weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'), + weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm बजे', + LTS: 'A h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, A h:mm बजे' + }, + relativeTime: { + future: '%s में', + past: '%s पहले', + s: 'कुछ ही क्षण', + m: 'एक मिनट', + mm: '%d मिनट', + h: 'एक घंटा', + hh: '%d घंटे', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महीने', + MM: '%d महीने', + y: 'एक वर्ष', + yy: '%d वर्ष' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/hr.js b/node_backend/node_modules/dayjs/esm/locale/hr.js new file mode 100644 index 0000000000000000000000000000000000000000..a760fe34789ccae60f22a7133181438226568255 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/hr.js @@ -0,0 +1,53 @@ +// Croatian [hr] +import dayjs from '../index'; +var monthFormat = 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'); +var monthStandalone = 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_'); +var MONTHS_IN_FORMAT = /D[oD]?(\[[^[\]]*\]|\s)+MMMM?/; + +var months = function months(dayjsInstance, format) { + if (MONTHS_IN_FORMAT.test(format)) { + return monthFormat[dayjsInstance.month()]; + } + + return monthStandalone[dayjsInstance.month()]; +}; + +months.s = monthStandalone; +months.f = monthFormat; +var locale = { + name: 'hr', + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + months: months, + monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'), + weekStart: 1, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + relativeTime: { + future: 'za %s', + past: 'prije %s', + s: 'sekunda', + m: 'minuta', + mm: '%d minuta', + h: 'sat', + hh: '%d sati', + d: 'dan', + dd: '%d dana', + M: 'mjesec', + MM: '%d mjeseci', + y: 'godina', + yy: '%d godine' + }, + ordinal: function ordinal(n) { + return n + "."; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ht.js b/node_backend/node_modules/dayjs/esm/locale/ht.js new file mode 100644 index 0000000000000000000000000000000000000000..896739e36ce148de5a285e30ad27bb5995658730 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ht.js @@ -0,0 +1,38 @@ +// Haitian Creole (Haiti) [ht] +import dayjs from '../index'; +var locale = { + name: 'ht', + weekdays: 'dimanch_lendi_madi_mèkredi_jedi_vandredi_samdi'.split('_'), + months: 'janvye_fevriye_mas_avril_me_jen_jiyè_out_septanm_oktòb_novanm_desanm'.split('_'), + weekdaysShort: 'dim._len._mad._mèk._jed._van._sam.'.split('_'), + monthsShort: 'jan._fev._mas_avr._me_jen_jiyè._out_sept._okt._nov._des.'.split('_'), + weekdaysMin: 'di_le_ma_mè_je_va_sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'nan %s', + past: 'sa gen %s', + s: 'kèk segond', + m: 'yon minit', + mm: '%d minit', + h: 'inèdtan', + hh: '%d zè', + d: 'yon jou', + dd: '%d jou', + M: 'yon mwa', + MM: '%d mwa', + y: 'yon ane', + yy: '%d ane' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/hu.js b/node_backend/node_modules/dayjs/esm/locale/hu.js new file mode 100644 index 0000000000000000000000000000000000000000..18df6e46a89afa2f6ffd226bf2194435c7f92099 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/hu.js @@ -0,0 +1,61 @@ +// Hungarian [hu] +import dayjs from '../index'; +var locale = { + name: 'hu', + weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'), + months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'), + monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + relativeTime: { + future: '%s múlva', + past: '%s', + s: function s(_, _s, ___, isFuture) { + return "n\xE9h\xE1ny m\xE1sodperc" + (isFuture || _s ? '' : 'e'); + }, + m: function m(_, s, ___, isFuture) { + return "egy perc" + (isFuture || s ? '' : 'e'); + }, + mm: function mm(n, s, ___, isFuture) { + return n + " perc" + (isFuture || s ? '' : 'e'); + }, + h: function h(_, s, ___, isFuture) { + return "egy " + (isFuture || s ? 'óra' : 'órája'); + }, + hh: function hh(n, s, ___, isFuture) { + return n + " " + (isFuture || s ? 'óra' : 'órája'); + }, + d: function d(_, s, ___, isFuture) { + return "egy " + (isFuture || s ? 'nap' : 'napja'); + }, + dd: function dd(n, s, ___, isFuture) { + return n + " " + (isFuture || s ? 'nap' : 'napja'); + }, + M: function M(_, s, ___, isFuture) { + return "egy " + (isFuture || s ? 'hónap' : 'hónapja'); + }, + MM: function MM(n, s, ___, isFuture) { + return n + " " + (isFuture || s ? 'hónap' : 'hónapja'); + }, + y: function y(_, s, ___, isFuture) { + return "egy " + (isFuture || s ? 'év' : 'éve'); + }, + yy: function yy(n, s, ___, isFuture) { + return n + " " + (isFuture || s ? 'év' : 'éve'); + } + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY. MMMM D.', + LLL: 'YYYY. MMMM D. H:mm', + LLLL: 'YYYY. MMMM D., dddd H:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/hy-am.js b/node_backend/node_modules/dayjs/esm/locale/hy-am.js new file mode 100644 index 0000000000000000000000000000000000000000..937f2be5e9d7f967e88e9874abbf6bc7b7beed71 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/hy-am.js @@ -0,0 +1,39 @@ +// Armenian [hy-am] +import dayjs from '../index'; +var locale = { + name: 'hy-am', + weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'), + months: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'), + weekStart: 1, + weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'), + weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY թ.', + LLL: 'D MMMM YYYY թ., HH:mm', + LLLL: 'dddd, D MMMM YYYY թ., HH:mm' + }, + relativeTime: { + future: '%s հետո', + past: '%s առաջ', + s: 'մի քանի վայրկյան', + m: 'րոպե', + mm: '%d րոպե', + h: 'ժամ', + hh: '%d ժամ', + d: 'օր', + dd: '%d օր', + M: 'ամիս', + MM: '%d ամիս', + y: 'տարի', + yy: '%d տարի' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/id.js b/node_backend/node_modules/dayjs/esm/locale/id.js new file mode 100644 index 0000000000000000000000000000000000000000..f743a123cfdb50705284ac453bec4a9867660e9c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/id.js @@ -0,0 +1,39 @@ +// Indonesian [id] +import dayjs from '../index'; +var locale = { + name: 'id', + weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), + weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + weekStart: 1, + formats: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lalu', + s: 'beberapa detik', + m: 'semenit', + mm: '%d menit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun' + }, + ordinal: function ordinal(n) { + return n + "."; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/index.d.ts b/node_backend/node_modules/dayjs/esm/locale/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..beb0d36ca07f2e539eb7e4cc6205c4fce6c987dc --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/index.d.ts @@ -0,0 +1,11 @@ +/// + +declare module 'dayjs/esm/locale/*' { + namespace locale { + interface Locale extends ILocale {} + } + + const locale: locale.Locale + + export = locale +} diff --git a/node_backend/node_modules/dayjs/esm/locale/is.js b/node_backend/node_modules/dayjs/esm/locale/is.js new file mode 100644 index 0000000000000000000000000000000000000000..22d81212910be9fc169f68c196bca0899400d380 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/is.js @@ -0,0 +1,68 @@ +// Icelandic [is] +import dayjs from '../index'; +var texts = { + s: ['nokkrar sekúndur', 'nokkrar sekúndur', 'nokkrum sekúndum'], + m: ['mínúta', 'mínútu', 'mínútu'], + mm: ['mínútur', 'mínútur', 'mínútum'], + h: ['klukkustund', 'klukkustund', 'klukkustund'], + hh: ['klukkustundir', 'klukkustundir', 'klukkustundum'], + d: ['dagur', 'dag', 'degi'], + dd: ['dagar', 'daga', 'dögum'], + M: ['mánuður', 'mánuð', 'mánuði'], + MM: ['mánuðir', 'mánuði', 'mánuðum'], + y: ['ár', 'ár', 'ári'], + yy: ['ár', 'ár', 'árum'] +}; + +function resolveTemplate(key, number, isFuture, withoutSuffix) { + var suffixIndex = isFuture ? 1 : 2; + var index = withoutSuffix ? 0 : suffixIndex; + var keyShouldBeSingular = key.length === 2 && number % 10 === 1; + var correctedKey = keyShouldBeSingular ? key[0] : key; + var unitText = texts[correctedKey]; + var text = unitText[index]; + return key.length === 1 ? text : "%d " + text; +} + +function relativeTimeFormatter(number, withoutSuffix, key, isFuture) { + var template = resolveTemplate(key, number, isFuture, withoutSuffix); + return template.replace('%d', number); +} + +var locale = { + name: 'is', + weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'), + months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'), + weekStart: 1, + weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm' + }, + relativeTime: { + future: 'eftir %s', + past: 'fyrir %s síðan', + s: relativeTimeFormatter, + m: relativeTimeFormatter, + mm: relativeTimeFormatter, + h: relativeTimeFormatter, + hh: relativeTimeFormatter, + d: relativeTimeFormatter, + dd: relativeTimeFormatter, + M: relativeTimeFormatter, + MM: relativeTimeFormatter, + y: relativeTimeFormatter, + yy: relativeTimeFormatter + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/it-ch.js b/node_backend/node_modules/dayjs/esm/locale/it-ch.js new file mode 100644 index 0000000000000000000000000000000000000000..cfbb94dd4fa8601cc03a7f516adcbdee9ec49244 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/it-ch.js @@ -0,0 +1,39 @@ +// Italian (Switzerland) [it-ch] +import dayjs from '../index'; +var locale = { + name: 'it-ch', + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), + weekStart: 1, + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'tra %s', + past: '%s fa', + s: 'alcuni secondi', + m: 'un minuto', + mm: '%d minuti', + h: 'un\'ora', + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/it.js b/node_backend/node_modules/dayjs/esm/locale/it.js new file mode 100644 index 0000000000000000000000000000000000000000..e8d24905894d244ddd72c93cd9011d7302b01c82 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/it.js @@ -0,0 +1,39 @@ +// Italian [it] +import dayjs from '../index'; +var locale = { + name: 'it', + weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), + weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'), + weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'), + months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), + weekStart: 1, + monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'tra %s', + past: '%s fa', + s: 'qualche secondo', + m: 'un minuto', + mm: '%d minuti', + h: 'un\' ora', + hh: '%d ore', + d: 'un giorno', + dd: '%d giorni', + M: 'un mese', + MM: '%d mesi', + y: 'un anno', + yy: '%d anni' + }, + ordinal: function ordinal(n) { + return n + "\xBA"; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ja.js b/node_backend/node_modules/dayjs/esm/locale/ja.js new file mode 100644 index 0000000000000000000000000000000000000000..6568e1390856f43115382f5937437dcb23dd7bb7 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ja.js @@ -0,0 +1,45 @@ +// Japanese [ja] +import dayjs from '../index'; +var locale = { + name: 'ja', + weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort: '日_月_火_水_木_金_土'.split('_'), + weekdaysMin: '日_月_火_水_木_金_土'.split('_'), + months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + ordinal: function ordinal(n) { + return n + "\u65E5"; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日 dddd HH:mm', + l: 'YYYY/MM/DD', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日(ddd) HH:mm' + }, + meridiem: function meridiem(hour) { + return hour < 12 ? '午前' : '午後'; + }, + relativeTime: { + future: '%s後', + past: '%s前', + s: '数秒', + m: '1分', + mm: '%d分', + h: '1時間', + hh: '%d時間', + d: '1日', + dd: '%d日', + M: '1ヶ月', + MM: '%dヶ月', + y: '1年', + yy: '%d年' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/jv.js b/node_backend/node_modules/dayjs/esm/locale/jv.js new file mode 100644 index 0000000000000000000000000000000000000000..81a3f6607475628b91b64b2e46cbd7f93b700332 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/jv.js @@ -0,0 +1,39 @@ +// Javanese [jv] +import dayjs from '../index'; +var locale = { + name: 'jv', + weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'), + weekStart: 1, + weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + relativeTime: { + future: 'wonten ing %s', + past: '%s ingkang kepengker', + s: 'sawetawis detik', + m: 'setunggal menit', + mm: '%d menit', + h: 'setunggal jam', + hh: '%d jam', + d: 'sedinten', + dd: '%d dinten', + M: 'sewulan', + MM: '%d wulan', + y: 'setaun', + yy: '%d taun' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ka.js b/node_backend/node_modules/dayjs/esm/locale/ka.js new file mode 100644 index 0000000000000000000000000000000000000000..381fffa4168c8ad883076df8add2de5ef993f1b6 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ka.js @@ -0,0 +1,39 @@ +// Georgian [ka] +import dayjs from '../index'; +var locale = { + name: 'ka', + weekdays: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), + weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), + monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekStart: 1, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A' + }, + relativeTime: { + future: '%s შემდეგ', + past: '%s წინ', + s: 'წამი', + m: 'წუთი', + mm: '%d წუთი', + h: 'საათი', + hh: '%d საათის', + d: 'დღეს', + dd: '%d დღის განმავლობაში', + M: 'თვის', + MM: '%d თვის', + y: 'წელი', + yy: '%d წლის' + }, + ordinal: function ordinal(n) { + return n; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/kk.js b/node_backend/node_modules/dayjs/esm/locale/kk.js new file mode 100644 index 0000000000000000000000000000000000000000..f2ca045c3154185989ade5e4b47a1c9c53f25f81 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/kk.js @@ -0,0 +1,39 @@ +// Kazakh [kk] +import dayjs from '../index'; +var locale = { + name: 'kk', + weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'), + weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'), + monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekStart: 1, + relativeTime: { + future: '%s ішінде', + past: '%s бұрын', + s: 'бірнеше секунд', + m: 'бір минут', + mm: '%d минут', + h: 'бір сағат', + hh: '%d сағат', + d: 'бір күн', + dd: '%d күн', + M: 'бір ай', + MM: '%d ай', + y: 'бір жыл', + yy: '%d жыл' + }, + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/km.js b/node_backend/node_modules/dayjs/esm/locale/km.js new file mode 100644 index 0000000000000000000000000000000000000000..7fd185ba2f6805abbf055af67031e1bbdfd7b5de --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/km.js @@ -0,0 +1,39 @@ +// Cambodian [km] +import dayjs from '../index'; +var locale = { + name: 'km', + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + weekStart: 1, + weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/kn.js b/node_backend/node_modules/dayjs/esm/locale/kn.js new file mode 100644 index 0000000000000000000000000000000000000000..b9ca9b9084c22c14002930415bfe564865dc0bb3 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/kn.js @@ -0,0 +1,38 @@ +// Kannada [kn] +import dayjs from '../index'; +var locale = { + name: 'kn', + weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'), + months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'), + weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), + monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'), + weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm' + }, + relativeTime: { + future: '%s ನಂತರ', + past: '%s ಹಿಂದೆ', + s: 'ಕೆಲವು ಕ್ಷಣಗಳು', + m: 'ಒಂದು ನಿಮಿಷ', + mm: '%d ನಿಮಿಷ', + h: 'ಒಂದು ಗಂಟೆ', + hh: '%d ಗಂಟೆ', + d: 'ಒಂದು ದಿನ', + dd: '%d ದಿನ', + M: 'ಒಂದು ತಿಂಗಳು', + MM: '%d ತಿಂಗಳು', + y: 'ಒಂದು ವರ್ಷ', + yy: '%d ವರ್ಷ' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ko.js b/node_backend/node_modules/dayjs/esm/locale/ko.js new file mode 100644 index 0000000000000000000000000000000000000000..cfad49de21da56f7c2069a73be2c5a6b07dfcb2f --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ko.js @@ -0,0 +1,45 @@ +// Korean [ko] +import dayjs from '../index'; +var locale = { + name: 'ko', + weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort: '일_월_화_수_목_금_토'.split('_'), + weekdaysMin: '일_월_화_수_목_금_토'.split('_'), + months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + ordinal: function ordinal(n) { + return n + "\uC77C"; + }, + formats: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'YYYY.MM.DD.', + LL: 'YYYY년 MMMM D일', + LLL: 'YYYY년 MMMM D일 A h:mm', + LLLL: 'YYYY년 MMMM D일 dddd A h:mm', + l: 'YYYY.MM.DD.', + ll: 'YYYY년 MMMM D일', + lll: 'YYYY년 MMMM D일 A h:mm', + llll: 'YYYY년 MMMM D일 dddd A h:mm' + }, + meridiem: function meridiem(hour) { + return hour < 12 ? '오전' : '오후'; + }, + relativeTime: { + future: '%s 후', + past: '%s 전', + s: '몇 초', + m: '1분', + mm: '%d분', + h: '한 시간', + hh: '%d시간', + d: '하루', + dd: '%d일', + M: '한 달', + MM: '%d달', + y: '일 년', + yy: '%d년' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ku.js b/node_backend/node_modules/dayjs/esm/locale/ku.js new file mode 100644 index 0000000000000000000000000000000000000000..e56664eb8f7432f3aa15ec97939de55ddc2f9fc1 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ku.js @@ -0,0 +1,77 @@ +// Kurdish [ku] +import dayjs from '../index'; +export var englishToArabicNumbersMap = { + 1: '١', + 2: '٢', + 3: '٣', + 4: '٤', + 5: '٥', + 6: '٦', + 7: '٧', + 8: '٨', + 9: '٩', + 0: '٠' +}; +var arabicToEnglishNumbersMap = { + '١': '1', + '٢': '2', + '٣': '3', + '٤': '4', + '٥': '5', + '٦': '6', + '٧': '7', + '٨': '8', + '٩': '9', + '٠': '0' +}; +var months = ['کانوونی دووەم', 'شوبات', 'ئادار', 'نیسان', 'ئایار', 'حوزەیران', 'تەممووز', 'ئاب', 'ئەیلوول', 'تشرینی یەکەم', 'تشرینی دووەم', 'کانوونی یەکەم']; +var locale = { + name: 'ku', + months: months, + monthsShort: months, + weekdays: 'یەکشەممە_دووشەممە_سێشەممە_چوارشەممە_پێنجشەممە_هەینی_شەممە'.split('_'), + weekdaysShort: 'یەکشەم_دووشەم_سێشەم_چوارشەم_پێنجشەم_هەینی_شەممە'.split('_'), + weekStart: 6, + weekdaysMin: 'ی_د_س_چ_پ_هـ_ش'.split('_'), + preparse: function preparse(string) { + return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return arabicToEnglishNumbersMap[match]; + }).replace(/،/g, ','); + }, + postformat: function postformat(string) { + return string.replace(/\d/g, function (match) { + return englishToArabicNumbersMap[match]; + }).replace(/,/g, '،'); + }, + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + meridiem: function meridiem(hour) { + return hour < 12 ? 'پ.ن' : 'د.ن'; + }, + relativeTime: { + future: 'لە %s', + past: 'لەمەوپێش %s', + s: 'چەند چرکەیەک', + m: 'یەک خولەک', + mm: '%d خولەک', + h: 'یەک کاتژمێر', + hh: '%d کاتژمێر', + d: 'یەک ڕۆژ', + dd: '%d ڕۆژ', + M: 'یەک مانگ', + MM: '%d مانگ', + y: 'یەک ساڵ', + yy: '%d ساڵ' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ky.js b/node_backend/node_modules/dayjs/esm/locale/ky.js new file mode 100644 index 0000000000000000000000000000000000000000..fd044778b312a5c48a77c593cd3aaf6d002a1e13 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ky.js @@ -0,0 +1,39 @@ +// Kyrgyz [ky] +import dayjs from '../index'; +var locale = { + name: 'ky', + weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'), + months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + weekStart: 1, + weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: '%s ичинде', + past: '%s мурун', + s: 'бирнече секунд', + m: 'бир мүнөт', + mm: '%d мүнөт', + h: 'бир саат', + hh: '%d саат', + d: 'бир күн', + dd: '%d күн', + M: 'бир ай', + MM: '%d ай', + y: 'бир жыл', + yy: '%d жыл' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/lb.js b/node_backend/node_modules/dayjs/esm/locale/lb.js new file mode 100644 index 0000000000000000000000000000000000000000..21ef4aab68ad992a33f051036b6a120019b3ea9e --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/lb.js @@ -0,0 +1,24 @@ +// Luxembourgish [lb] +import dayjs from '../index'; +var locale = { + name: 'lb', + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'), + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + weekStart: 1, + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/lo.js b/node_backend/node_modules/dayjs/esm/locale/lo.js new file mode 100644 index 0000000000000000000000000000000000000000..7732ec4b17f86e79d9ad98a5cd0740561da3525c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/lo.js @@ -0,0 +1,38 @@ +// Lao [lo] +import dayjs from '../index'; +var locale = { + name: 'lo', + weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'ວັນdddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'ອີກ %s', + past: '%sຜ່ານມາ', + s: 'ບໍ່ເທົ່າໃດວິນາທີ', + m: '1 ນາທີ', + mm: '%d ນາທີ', + h: '1 ຊົ່ວໂມງ', + hh: '%d ຊົ່ວໂມງ', + d: '1 ມື້', + dd: '%d ມື້', + M: '1 ເດືອນ', + MM: '%d ເດືອນ', + y: '1 ປີ', + yy: '%d ປີ' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/lt.js b/node_backend/node_modules/dayjs/esm/locale/lt.js new file mode 100644 index 0000000000000000000000000000000000000000..cb46ca9b8ce8e2088d89f58e9c03c2cd14f3ae12 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/lt.js @@ -0,0 +1,70 @@ +// Lithuanian [lt] +import dayjs from '../index'; +var monthFormat = 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'); +var monthStandalone = 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'); // eslint-disable-next-line no-useless-escape + +var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/; + +var months = function months(dayjsInstance, format) { + if (MONTHS_IN_FORMAT.test(format)) { + return monthFormat[dayjsInstance.month()]; + } + + return monthStandalone[dayjsInstance.month()]; +}; + +months.s = monthStandalone; +months.f = monthFormat; +var locale = { + name: 'lt', + weekdays: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'), + weekdaysShort: 'sek_pir_ant_tre_ket_pen_šeš'.split('_'), + weekdaysMin: 's_p_a_t_k_pn_š'.split('_'), + months: months, + monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + relativeTime: { + future: 'už %s', + past: 'prieš %s', + s: 'kelias sekundes', + m: 'minutę', + mm: '%d minutes', + h: 'valandą', + hh: '%d valandas', + d: 'dieną', + dd: '%d dienas', + M: 'mėnesį', + MM: '%d mėnesius', + y: 'metus', + yy: '%d metus' + }, + format: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY [m.] MMMM D [d.]', + LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l: 'YYYY-MM-DD', + ll: 'YYYY [m.] MMMM D [d.]', + lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY [m.] MMMM D [d.]', + LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l: 'YYYY-MM-DD', + ll: 'YYYY [m.] MMMM D [d.]', + lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/lv.js b/node_backend/node_modules/dayjs/esm/locale/lv.js new file mode 100644 index 0000000000000000000000000000000000000000..4b18a61403b8c41442a5859369acdea8474a1eda --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/lv.js @@ -0,0 +1,39 @@ +// Latvian [lv] +import dayjs from '../index'; +var locale = { + name: 'lv', + weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'), + months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'), + weekStart: 1, + weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'), + monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), + weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY.', + LL: 'YYYY. [gada] D. MMMM', + LLL: 'YYYY. [gada] D. MMMM, HH:mm', + LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm' + }, + relativeTime: { + future: 'pēc %s', + past: 'pirms %s', + s: 'dažām sekundēm', + m: 'minūtes', + mm: '%d minūtēm', + h: 'stundas', + hh: '%d stundām', + d: 'dienas', + dd: '%d dienām', + M: 'mēneša', + MM: '%d mēnešiem', + y: 'gada', + yy: '%d gadiem' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/me.js b/node_backend/node_modules/dayjs/esm/locale/me.js new file mode 100644 index 0000000000000000000000000000000000000000..465c0ff0478ac441749d7398e99ad95b91d594c3 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/me.js @@ -0,0 +1,24 @@ +// Montenegrin [me] +import dayjs from '../index'; +var locale = { + name: 'me', + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + weekStart: 1, + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/mi.js b/node_backend/node_modules/dayjs/esm/locale/mi.js new file mode 100644 index 0000000000000000000000000000000000000000..3b56f0ec7fd44d507f2e0154bd63973bc17f7b89 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/mi.js @@ -0,0 +1,39 @@ +// Maori [mi] +import dayjs from '../index'; +var locale = { + name: 'mi', + weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'), + weekStart: 1, + weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'), + weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm' + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/mk.js b/node_backend/node_modules/dayjs/esm/locale/mk.js new file mode 100644 index 0000000000000000000000000000000000000000..8522c261ca1910562a209c882406bbd243eaf581 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/mk.js @@ -0,0 +1,39 @@ +// Macedonian [mk] +import dayjs from '../index'; +var locale = { + name: 'mk', + weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'), + months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'), + weekStart: 1, + weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm' + }, + relativeTime: { + future: 'после %s', + past: 'пред %s', + s: 'неколку секунди', + m: 'минута', + mm: '%d минути', + h: 'час', + hh: '%d часа', + d: 'ден', + dd: '%d дена', + M: 'месец', + MM: '%d месеци', + y: 'година', + yy: '%d години' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ml.js b/node_backend/node_modules/dayjs/esm/locale/ml.js new file mode 100644 index 0000000000000000000000000000000000000000..bfcc277eb076dd258dc79b3e2897bcb3a758ca0b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ml.js @@ -0,0 +1,38 @@ +// Malayalam [ml] +import dayjs from '../index'; +var locale = { + name: 'ml', + weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'), + months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'), + weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'), + weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm -നു', + LTS: 'A h:mm:ss -നു', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm -നു', + LLLL: 'dddd, D MMMM YYYY, A h:mm -നു' + }, + relativeTime: { + future: '%s കഴിഞ്ഞ്', + past: '%s മുൻപ്', + s: 'അൽപ നിമിഷങ്ങൾ', + m: 'ഒരു മിനിറ്റ്', + mm: '%d മിനിറ്റ്', + h: 'ഒരു മണിക്കൂർ', + hh: '%d മണിക്കൂർ', + d: 'ഒരു ദിവസം', + dd: '%d ദിവസം', + M: 'ഒരു മാസം', + MM: '%d മാസം', + y: 'ഒരു വർഷം', + yy: '%d വർഷം' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/mn.js b/node_backend/node_modules/dayjs/esm/locale/mn.js new file mode 100644 index 0000000000000000000000000000000000000000..d93cae216da8814393685342cde3e844e8c016ac --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/mn.js @@ -0,0 +1,38 @@ +// Mongolian [mn] +import dayjs from '../index'; +var locale = { + name: 'mn', + weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'), + months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'), + weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'), + monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'), + weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY оны MMMMын D', + LLL: 'YYYY оны MMMMын D HH:mm', + LLLL: 'dddd, YYYY оны MMMMын D HH:mm' + }, + relativeTime: { + future: '%s', + past: '%s', + s: 'саяхан', + m: 'м', + mm: '%dм', + h: '1ц', + hh: '%dц', + d: '1ө', + dd: '%dө', + M: '1с', + MM: '%dс', + y: '1ж', + yy: '%dж' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/mr.js b/node_backend/node_modules/dayjs/esm/locale/mr.js new file mode 100644 index 0000000000000000000000000000000000000000..9eac8a734a6d7d4d106f633b0962205865a77680 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/mr.js @@ -0,0 +1,23 @@ +// Marathi [mr] +import dayjs from '../index'; +var locale = { + name: 'mr', + weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'), + weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'), + weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm वाजता', + LTS: 'A h:mm:ss वाजता', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm वाजता', + LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ms-my.js b/node_backend/node_modules/dayjs/esm/locale/ms-my.js new file mode 100644 index 0000000000000000000000000000000000000000..51382197a892a1d22c1e763bd10429beb32a84e3 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ms-my.js @@ -0,0 +1,39 @@ +// Malay [ms-my] +import dayjs from '../index'; +var locale = { + name: 'ms-my', + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + weekStart: 1, + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [pukul] HH.mm', + LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ms.js b/node_backend/node_modules/dayjs/esm/locale/ms.js new file mode 100644 index 0000000000000000000000000000000000000000..86349f3fde70b8d7f7a0561c69b3992da4909dd9 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ms.js @@ -0,0 +1,39 @@ +// Malay [ms] +import dayjs from '../index'; +var locale = { + name: 'ms', + weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekStart: 1, + formats: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH.mm', + LLLL: 'dddd, D MMMM YYYY HH.mm' + }, + relativeTime: { + future: 'dalam %s', + past: '%s yang lepas', + s: 'beberapa saat', + m: 'seminit', + mm: '%d minit', + h: 'sejam', + hh: '%d jam', + d: 'sehari', + dd: '%d hari', + M: 'sebulan', + MM: '%d bulan', + y: 'setahun', + yy: '%d tahun' + }, + ordinal: function ordinal(n) { + return n + "."; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/mt.js b/node_backend/node_modules/dayjs/esm/locale/mt.js new file mode 100644 index 0000000000000000000000000000000000000000..9c909538121bda4baf95c1da60f48e55371d4da8 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/mt.js @@ -0,0 +1,39 @@ +// Maltese (Malta) [mt] +import dayjs from '../index'; +var locale = { + name: 'mt', + weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'), + months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'), + weekStart: 1, + weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'), + monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'), + weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'f’ %s', + past: '%s ilu', + s: 'ftit sekondi', + m: 'minuta', + mm: '%d minuti', + h: 'siegħa', + hh: '%d siegħat', + d: 'ġurnata', + dd: '%d ġranet', + M: 'xahar', + MM: '%d xhur', + y: 'sena', + yy: '%d sni' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/my.js b/node_backend/node_modules/dayjs/esm/locale/my.js new file mode 100644 index 0000000000000000000000000000000000000000..73b263339ea06c5fbf04c09f3d5447573aa7c1fe --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/my.js @@ -0,0 +1,39 @@ +// Burmese [my] +import dayjs from '../index'; +var locale = { + name: 'my', + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'), + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'), + weekStart: 1, + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/nb.js b/node_backend/node_modules/dayjs/esm/locale/nb.js new file mode 100644 index 0000000000000000000000000000000000000000..1d7b1eb56e660f5ef1b09f2b9a214025eeb4f70b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/nb.js @@ -0,0 +1,40 @@ +// Norwegian Bokmål [nb] +import dayjs from '../index'; +var locale = { + name: 'nb', + weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'), + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort: 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + relativeTime: { + future: 'om %s', + past: '%s siden', + s: 'noen sekunder', + m: 'ett minutt', + mm: '%d minutter', + h: 'en time', + hh: '%d timer', + d: 'en dag', + dd: '%d dager', + M: 'en måned', + MM: '%d måneder', + y: 'ett år', + yy: '%d år' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ne.js b/node_backend/node_modules/dayjs/esm/locale/ne.js new file mode 100644 index 0000000000000000000000000000000000000000..4f5a0044e89607827fb3a0bc9da9ad1efb82bcdf --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ne.js @@ -0,0 +1,40 @@ +// Nepalese [ne] +import dayjs from '../index'; +var locale = { + name: 'ne', + weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'), + weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मे_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'), + monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'), + relativeTime: { + future: '%s पछि', + past: '%s अघि', + s: 'सेकेन्ड', + m: 'एक मिनेट', + mm: '%d मिनेट', + h: 'घन्टा', + hh: '%d घन्टा', + d: 'एक दिन', + dd: '%d दिन', + M: 'एक महिना', + MM: '%d महिना', + y: 'एक वर्ष', + yy: '%d वर्ष' + }, + ordinal: function ordinal(n) { + return ("" + n).replace(/\d/g, function (i) { + return '०१२३४५६७८९'[i]; + }); + }, + formats: { + LT: 'Aको h:mm बजे', + LTS: 'Aको h:mm:ss बजे', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, Aको h:mm बजे', + LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/nl-be.js b/node_backend/node_modules/dayjs/esm/locale/nl-be.js new file mode 100644 index 0000000000000000000000000000000000000000..51465b7101c2a621e4ccc95195bb46f341795ed9 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/nl-be.js @@ -0,0 +1,39 @@ +// Dutch (Belgium) [nl-be] +import dayjs from '../index'; +var locale = { + name: 'nl-be', + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort: 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), + weekStart: 1, + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + m: 'één minuut', + mm: '%d minuten', + h: 'één uur', + hh: '%d uur', + d: 'één dag', + dd: '%d dagen', + M: 'één maand', + MM: '%d maanden', + y: 'één jaar', + yy: '%d jaar' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/nl.js b/node_backend/node_modules/dayjs/esm/locale/nl.js new file mode 100644 index 0000000000000000000000000000000000000000..ee1ac747a46ecbbff266c4c119d44042859596a0 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/nl.js @@ -0,0 +1,40 @@ +// Dutch [nl] +import dayjs from '../index'; +var locale = { + name: 'nl', + weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'), + months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort: 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'), + ordinal: function ordinal(n) { + return "[" + n + (n === 1 || n === 8 || n >= 20 ? 'ste' : 'de') + "]"; + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD-MM-YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'over %s', + past: '%s geleden', + s: 'een paar seconden', + m: 'een minuut', + mm: '%d minuten', + h: 'een uur', + hh: '%d uur', + d: 'een dag', + dd: '%d dagen', + M: 'een maand', + MM: '%d maanden', + y: 'een jaar', + yy: '%d jaar' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/nn.js b/node_backend/node_modules/dayjs/esm/locale/nn.js new file mode 100644 index 0000000000000000000000000000000000000000..43767a40bb312e64710977d99aafe1ce6b872711 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/nn.js @@ -0,0 +1,39 @@ +// Nynorsk [nn] +import dayjs from '../index'; +var locale = { + name: 'nn', + weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort: 'sun_mån_tys_ons_tor_fre_lau'.split('_'), + weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'), + months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + relativeTime: { + future: 'om %s', + past: 'for %s sidan', + s: 'nokre sekund', + m: 'eitt minutt', + mm: '%d minutt', + h: 'ein time', + hh: '%d timar', + d: 'ein dag', + dd: '%d dagar', + M: 'ein månad', + MM: '%d månadar', + y: 'eitt år', + yy: '%d år' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY [kl.] H:mm', + LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/oc-lnc.js b/node_backend/node_modules/dayjs/esm/locale/oc-lnc.js new file mode 100644 index 0000000000000000000000000000000000000000..91e2f0d35252198f710a800cdf1128dad1360eeb --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/oc-lnc.js @@ -0,0 +1,39 @@ +// Occitan, lengadocian dialecte [oc-lnc] +import dayjs from '../index'; +var locale = { + name: 'oc-lnc', + weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split('_'), + weekdaysShort: 'Dg_Dl_Dm_Dc_Dj_Dv_Ds'.split('_'), + weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'), + months: 'genièr_febrièr_març_abrial_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split('_'), + monthsShort: 'gen_feb_març_abr_mai_junh_julh_ago_set_oct_nov_dec'.split('_'), + weekStart: 1, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [de] YYYY', + LLL: 'D MMMM [de] YYYY [a] H:mm', + LLLL: 'dddd D MMMM [de] YYYY [a] H:mm' + }, + relativeTime: { + future: 'd\'aquí %s', + past: 'fa %s', + s: 'unas segondas', + m: 'una minuta', + mm: '%d minutas', + h: 'una ora', + hh: '%d oras', + d: 'un jorn', + dd: '%d jorns', + M: 'un mes', + MM: '%d meses', + y: 'un an', + yy: '%d ans' + }, + ordinal: function ordinal(n) { + return n + "\xBA"; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/pa-in.js b/node_backend/node_modules/dayjs/esm/locale/pa-in.js new file mode 100644 index 0000000000000000000000000000000000000000..624a8522ee83b6b804549aa81a426d4ecb16f3eb --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/pa-in.js @@ -0,0 +1,38 @@ +// Punjabi (India) [pa-in] +import dayjs from '../index'; +var locale = { + name: 'pa-in', + weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'), + months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm ਵਜੇ', + LTS: 'A h:mm:ss ਵਜੇ', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ' + }, + relativeTime: { + future: '%s ਵਿੱਚ', + past: '%s ਪਿਛਲੇ', + s: 'ਕੁਝ ਸਕਿੰਟ', + m: 'ਇਕ ਮਿੰਟ', + mm: '%d ਮਿੰਟ', + h: 'ਇੱਕ ਘੰਟਾ', + hh: '%d ਘੰਟੇ', + d: 'ਇੱਕ ਦਿਨ', + dd: '%d ਦਿਨ', + M: 'ਇੱਕ ਮਹੀਨਾ', + MM: '%d ਮਹੀਨੇ', + y: 'ਇੱਕ ਸਾਲ', + yy: '%d ਸਾਲ' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/pl.js b/node_backend/node_modules/dayjs/esm/locale/pl.js new file mode 100644 index 0000000000000000000000000000000000000000..368b2a5e83eae2eacbc2de8131c05026dcaaae1a --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/pl.js @@ -0,0 +1,87 @@ +// Polish [pl] +import dayjs from '../index'; + +function plural(n) { + return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1; // eslint-disable-line +} +/* eslint-disable */ + + +function translate(number, withoutSuffix, key) { + var result = number + " "; + + switch (key) { + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + + case 'mm': + return result + (plural(number) ? 'minuty' : 'minut'); + + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + + case 'hh': + return result + (plural(number) ? 'godziny' : 'godzin'); + + case 'MM': + return result + (plural(number) ? 'miesiące' : 'miesięcy'); + + case 'yy': + return result + (plural(number) ? 'lata' : 'lat'); + } +} +/* eslint-enable */ + + +var monthFormat = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'); +var monthStandalone = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'); +var MONTHS_IN_FORMAT = /D MMMM/; + +var months = function months(dayjsInstance, format) { + if (MONTHS_IN_FORMAT.test(format)) { + return monthFormat[dayjsInstance.month()]; + } + + return monthStandalone[dayjsInstance.month()]; +}; + +months.s = monthStandalone; +months.f = monthFormat; +var locale = { + name: 'pl', + weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'), + weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + months: months, + monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + weekStart: 1, + yearStart: 4, + relativeTime: { + future: 'za %s', + past: '%s temu', + s: 'kilka sekund', + m: translate, + mm: translate, + h: translate, + hh: translate, + d: '1 dzień', + dd: '%d dni', + M: 'miesiąc', + MM: translate, + y: 'rok', + yy: translate + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/pt-br.js b/node_backend/node_modules/dayjs/esm/locale/pt-br.js new file mode 100644 index 0000000000000000000000000000000000000000..0635cd850c4719e48742ed775e5260ea23b55389 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/pt-br.js @@ -0,0 +1,38 @@ +// Portuguese (Brazil) [pt-br] +import dayjs from '../index'; +var locale = { + name: 'pt-br', + weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split('_'), + weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'), + weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + ordinal: function ordinal(n) { + return n + "\xBA"; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm' + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'poucos segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/pt.js b/node_backend/node_modules/dayjs/esm/locale/pt.js new file mode 100644 index 0000000000000000000000000000000000000000..cba233197b2ee9ae33b9fcb9705e4f0d601fc793 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/pt.js @@ -0,0 +1,40 @@ +// Portuguese [pt] +import dayjs from '../index'; +var locale = { + name: 'pt', + weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split('_'), + weekdaysShort: 'dom_seg_ter_qua_qui_sex_sab'.split('_'), + weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sa'.split('_'), + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'), + monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'), + ordinal: function ordinal(n) { + return n + "\xBA"; + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D [de] MMMM [de] YYYY', + LLL: 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm' + }, + relativeTime: { + future: 'em %s', + past: 'há %s', + s: 'alguns segundos', + m: 'um minuto', + mm: '%d minutos', + h: 'uma hora', + hh: '%d horas', + d: 'um dia', + dd: '%d dias', + M: 'um mês', + MM: '%d meses', + y: 'um ano', + yy: '%d anos' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/rn.js b/node_backend/node_modules/dayjs/esm/locale/rn.js new file mode 100644 index 0000000000000000000000000000000000000000..21b3cdb732f43cbdf95a1716dfe3a13caeca0ca7 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/rn.js @@ -0,0 +1,39 @@ +// Kirundi [rn] +import dayjs from '../index'; +var locale = { + name: 'rn', + weekdays: 'Ku wa Mungu_Ku wa Mbere_Ku wa Kabiri_Ku wa Gatatu_Ku wa Kane_Ku wa Gatanu_Ku wa Gatandatu'.split('_'), + weekdaysShort: 'Kngu_Kmbr_Kbri_Ktat_Kkan_Ktan_Kdat'.split('_'), + weekdaysMin: 'K7_K1_K2_K3_K4_K5_K6'.split('_'), + months: 'Nzero_Ruhuhuma_Ntwarante_Ndamukiza_Rusama_Ruhenshi_Mukakaro_Myandagaro_Nyakanga_Gitugutu_Munyonyo_Kigarama'.split('_'), + monthsShort: 'Nzer_Ruhuh_Ntwar_Ndam_Rus_Ruhen_Muk_Myand_Nyak_Git_Muny_Kig'.split('_'), + weekStart: 1, + ordinal: function ordinal(n) { + return n; + }, + relativeTime: { + future: 'mu %s', + past: '%s', + s: 'amasegonda', + m: 'Umunota', + mm: '%d iminota', + h: 'isaha', + hh: '%d amasaha', + d: 'Umunsi', + dd: '%d iminsi', + M: 'ukwezi', + MM: '%d amezi', + y: 'umwaka', + yy: '%d imyaka' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ro.js b/node_backend/node_modules/dayjs/esm/locale/ro.js new file mode 100644 index 0000000000000000000000000000000000000000..93ef6bfc1449313c703142be3bb292c6cf48ef5f --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ro.js @@ -0,0 +1,39 @@ +// Romanian [ro] +import dayjs from '../index'; +var locale = { + name: 'ro', + weekdays: 'Duminică_Luni_Marți_Miercuri_Joi_Vineri_Sâmbătă'.split('_'), + weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + months: 'Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie'.split('_'), + monthsShort: 'Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.'.split('_'), + weekStart: 1, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY H:mm', + LLLL: 'dddd, D MMMM YYYY H:mm' + }, + relativeTime: { + future: 'peste %s', + past: 'acum %s', + s: 'câteva secunde', + m: 'un minut', + mm: '%d minute', + h: 'o oră', + hh: '%d ore', + d: 'o zi', + dd: '%d zile', + M: 'o lună', + MM: '%d luni', + y: 'un an', + yy: '%d ani' + }, + ordinal: function ordinal(n) { + return n; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ru.js b/node_backend/node_modules/dayjs/esm/locale/ru.js new file mode 100644 index 0000000000000000000000000000000000000000..fbb1b358917b2f03885aec0342c12325da1b4311 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ru.js @@ -0,0 +1,99 @@ +// Russian [ru] +import dayjs from '../index'; +var monthFormat = 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'); +var monthStandalone = 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'); +var monthShortFormat = 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'); +var monthShortStandalone = 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_'); +var MONTHS_IN_FORMAT = /D[oD]?(\[[^[\]]*\]|\s)+MMMM?/; + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]; // eslint-disable-line +} + +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + hh: 'час_часа_часов', + dd: 'день_дня_дней', + MM: 'месяц_месяца_месяцев', + yy: 'год_года_лет' + }; + + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } + + return number + " " + plural(format[key], +number); +} + +var months = function months(dayjsInstance, format) { + if (MONTHS_IN_FORMAT.test(format)) { + return monthFormat[dayjsInstance.month()]; + } + + return monthStandalone[dayjsInstance.month()]; +}; + +months.s = monthStandalone; +months.f = monthFormat; + +var monthsShort = function monthsShort(dayjsInstance, format) { + if (MONTHS_IN_FORMAT.test(format)) { + return monthShortFormat[dayjsInstance.month()]; + } + + return monthShortStandalone[dayjsInstance.month()]; +}; + +monthsShort.s = monthShortStandalone; +monthsShort.f = monthShortFormat; +var locale = { + name: 'ru', + weekdays: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), + weekdaysShort: 'вск_пнд_втр_срд_чтв_птн_сбт'.split('_'), + weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + months: months, + monthsShort: monthsShort, + weekStart: 1, + yearStart: 4, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY г.', + LLL: 'D MMMM YYYY г., H:mm', + LLLL: 'dddd, D MMMM YYYY г., H:mm' + }, + relativeTime: { + future: 'через %s', + past: '%s назад', + s: 'несколько секунд', + m: relativeTimeWithPlural, + mm: relativeTimeWithPlural, + h: 'час', + hh: relativeTimeWithPlural, + d: 'день', + dd: relativeTimeWithPlural, + M: 'месяц', + MM: relativeTimeWithPlural, + y: 'год', + yy: relativeTimeWithPlural + }, + ordinal: function ordinal(n) { + return n; + }, + meridiem: function meridiem(hour) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } + + return 'вечера'; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/rw.js b/node_backend/node_modules/dayjs/esm/locale/rw.js new file mode 100644 index 0000000000000000000000000000000000000000..1e53ac7600a1168c01e32afb5b1d7c105038c6ed --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/rw.js @@ -0,0 +1,35 @@ +// Kinyarwanda (Rwanda) [rw] +import dayjs from '../index'; +var locale = { + name: 'rw', + weekdays: 'Ku Cyumweru_Kuwa Mbere_Kuwa Kabiri_Kuwa Gatatu_Kuwa Kane_Kuwa Gatanu_Kuwa Gatandatu'.split('_'), + months: 'Mutarama_Gashyantare_Werurwe_Mata_Gicurasi_Kamena_Nyakanga_Kanama_Nzeri_Ukwakira_Ugushyingo_Ukuboza'.split('_'), + relativeTime: { + future: 'mu %s', + past: '%s', + s: 'amasegonda', + m: 'Umunota', + mm: '%d iminota', + h: 'isaha', + hh: '%d amasaha', + d: 'Umunsi', + dd: '%d iminsi', + M: 'ukwezi', + MM: '%d amezi', + y: 'umwaka', + yy: '%d imyaka' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + ordinal: function ordinal(n) { + return n; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/sd.js b/node_backend/node_modules/dayjs/esm/locale/sd.js new file mode 100644 index 0000000000000000000000000000000000000000..a429f8db298553a8e9f393273553b4fbe677a3cb --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/sd.js @@ -0,0 +1,39 @@ +// Sindhi [sd] +import dayjs from '../index'; +var locale = { + name: 'sd', + weekdays: 'آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر'.split('_'), + months: 'جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر'.split('_'), + weekStart: 1, + weekdaysShort: 'آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر'.split('_'), + monthsShort: 'جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر'.split('_'), + weekdaysMin: 'آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm' + }, + relativeTime: { + future: '%s پوء', + past: '%s اڳ', + s: 'چند سيڪنڊ', + m: 'هڪ منٽ', + mm: '%d منٽ', + h: 'هڪ ڪلاڪ', + hh: '%d ڪلاڪ', + d: 'هڪ ڏينهن', + dd: '%d ڏينهن', + M: 'هڪ مهينو', + MM: '%d مهينا', + y: 'هڪ سال', + yy: '%d سال' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/se.js b/node_backend/node_modules/dayjs/esm/locale/se.js new file mode 100644 index 0000000000000000000000000000000000000000..691099cef18e3f70fe6df837890ddd676d2c32c3 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/se.js @@ -0,0 +1,39 @@ +// Northern Sami [se] +import dayjs from '../index'; +var locale = { + name: 'se', + weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'), + months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'), + weekStart: 1, + weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'), + weekdaysMin: 's_v_m_g_d_b_L'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'MMMM D. [b.] YYYY', + LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm' + }, + relativeTime: { + future: '%s geažes', + past: 'maŋit %s', + s: 'moadde sekunddat', + m: 'okta minuhta', + mm: '%d minuhtat', + h: 'okta diimmu', + hh: '%d diimmut', + d: 'okta beaivi', + dd: '%d beaivvit', + M: 'okta mánnu', + MM: '%d mánut', + y: 'okta jahki', + yy: '%d jagit' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/si.js b/node_backend/node_modules/dayjs/esm/locale/si.js new file mode 100644 index 0000000000000000000000000000000000000000..89b67bfd1fae60c1998d32667dc873b0fd9de506 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/si.js @@ -0,0 +1,38 @@ +// Sinhalese [si] +import dayjs from '../index'; +var locale = { + name: 'si', + weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'), + months: 'දුරුතු_නවම්_මැදින්_බක්_වෙසක්_පොසොන්_ඇසළ_නිකිණි_බිනර_වප්_ඉල්_උඳුවප්'.split('_'), + weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + monthsShort: 'දුරු_නව_මැදි_බක්_වෙස_පොසො_ඇස_නිකි_බින_වප්_ඉල්_උඳු'.split('_'), + weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'a h:mm', + LTS: 'a h:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY MMMM D', + LLL: 'YYYY MMMM D, a h:mm', + LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss' + }, + relativeTime: { + future: '%sකින්', + past: '%sකට පෙර', + s: 'තත්පර කිහිපය', + m: 'විනාඩිය', + mm: 'විනාඩි %d', + h: 'පැය', + hh: 'පැය %d', + d: 'දිනය', + dd: 'දින %d', + M: 'මාසය', + MM: 'මාස %d', + y: 'වසර', + yy: 'වසර %d' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/sk.js b/node_backend/node_modules/dayjs/esm/locale/sk.js new file mode 100644 index 0000000000000000000000000000000000000000..222401fd5894f6c3ea56765e7b7e577e9c6cad15 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/sk.js @@ -0,0 +1,121 @@ +// Slovak [sk] +import dayjs from '../index'; + +function plural(n) { + return n > 1 && n < 5 && ~~(n / 10) !== 1; // eslint-disable-line +} +/* eslint-disable */ + + +function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + + switch (key) { + case 's': + // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami'; + + case 'm': + // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou'; + + case 'mm': + // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'minúty' : 'minút'); + } + + return result + "min\xFAtami"; + + case 'h': + // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou'; + + case 'hh': + // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'hodiny' : 'hodín'); + } + + return result + "hodinami"; + + case 'd': + // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'deň' : 'dňom'; + + case 'dd': + // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'dni' : 'dní'); + } + + return result + "d\u0148ami"; + + case 'M': + // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom'; + + case 'MM': + // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'mesiace' : 'mesiacov'); + } + + return result + "mesiacmi"; + + case 'y': + // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'rok' : 'rokom'; + + case 'yy': + // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural(number) ? 'roky' : 'rokov'); + } + + return result + "rokmi"; + } +} +/* eslint-enable */ + + +var locale = { + name: 'sk', + weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'), + weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'), + weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'), + months: 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'), + monthsShort: 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'), + weekStart: 1, + yearStart: 4, + ordinal: function ordinal(n) { + return n + "."; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd D. MMMM YYYY H:mm', + l: 'D. M. YYYY' + }, + relativeTime: { + future: 'za %s', + // Should be `o %s` (change when moment/moment#5408 is fixed) + past: 'pred %s', + s: translate, + m: translate, + mm: translate, + h: translate, + hh: translate, + d: translate, + dd: translate, + M: translate, + MM: translate, + y: translate, + yy: translate + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/sl.js b/node_backend/node_modules/dayjs/esm/locale/sl.js new file mode 100644 index 0000000000000000000000000000000000000000..e3c583935502eabf2ac8b1ed96916457743ff2ff --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/sl.js @@ -0,0 +1,141 @@ +// Slovenian [sl] +import dayjs from '../index'; + +function dual(n) { + return n % 100 == 2; // eslint-disable-line +} + +function threeFour(n) { + return n % 100 == 3 || n % 100 == 4; // eslint-disable-line +} +/* eslint-disable */ + + +function translate(number, withoutSuffix, key, isFuture) { + var result = number + " "; + + switch (key) { + case 's': + // a few seconds / in a few seconds / a few seconds ago + return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami'; + + case 'm': + // a minute / in a minute / a minute ago + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + + case 'mm': + // 9 minutes / in 9 minutes / 9 minutes ago + if (dual(number)) { + return result + (withoutSuffix || isFuture ? 'minuti' : 'minutama'); + } + + if (threeFour(number)) { + return result + (withoutSuffix || isFuture ? 'minute' : 'minutami'); + } + + return result + (withoutSuffix || isFuture ? 'minut' : 'minutami'); + + case 'h': + // an hour / in an hour / an hour ago + return withoutSuffix ? 'ena ura' : isFuture ? 'eno uro' : 'eno uro'; + + case 'hh': + // 9 hours / in 9 hours / 9 hours ago + if (dual(number)) { + return result + (withoutSuffix || isFuture ? 'uri' : 'urama'); + } + + if (threeFour(number)) { + return result + (withoutSuffix || isFuture ? 'ure' : 'urami'); + } + + return result + (withoutSuffix || isFuture ? 'ur' : 'urami'); + + case 'd': + // a day / in a day / a day ago + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + + case 'dd': + // 9 days / in 9 days / 9 days ago + if (dual(number)) { + return result + (withoutSuffix || isFuture ? 'dneva' : 'dnevoma'); + } + + return result + (withoutSuffix || isFuture ? 'dni' : 'dnevi'); + + case 'M': + // a month / in a month / a month ago + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + + case 'MM': + // 9 months / in 9 months / 9 months ago + if (dual(number)) { + // 2 minutes / in 2 minutes + return result + (withoutSuffix || isFuture ? 'meseca' : 'mesecema'); + } + + if (threeFour(number)) { + return result + (withoutSuffix || isFuture ? 'mesece' : 'meseci'); + } + + return result + (withoutSuffix || isFuture ? 'mesecev' : 'meseci'); + + case 'y': + // a year / in a year / a year ago + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + + case 'yy': + // 9 years / in 9 years / 9 years ago + if (dual(number)) { + // 2 minutes / in 2 minutes + return result + (withoutSuffix || isFuture ? 'leti' : 'letoma'); + } + + if (threeFour(number)) { + return result + (withoutSuffix || isFuture ? 'leta' : 'leti'); + } + + return result + (withoutSuffix || isFuture ? 'let' : 'leti'); + } +} +/* eslint-enable */ + + +var locale = { + name: 'sl', + weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'), + weekStart: 1, + weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'), + weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'), + ordinal: function ordinal(n) { + return n + "."; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm', + l: 'D. M. YYYY' + }, + relativeTime: { + future: 'čez %s', + past: 'pred %s', + s: translate, + m: translate, + mm: translate, + h: translate, + hh: translate, + d: translate, + dd: translate, + M: translate, + MM: translate, + y: translate, + yy: translate + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/sq.js b/node_backend/node_modules/dayjs/esm/locale/sq.js new file mode 100644 index 0000000000000000000000000000000000000000..625b7013d93340291bbd126ebb644447cb4b5488 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/sq.js @@ -0,0 +1,39 @@ +// Albanian [sq] +import dayjs from '../index'; +var locale = { + name: 'sq', + weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'), + months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'), + weekStart: 1, + weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'në %s', + past: '%s më parë', + s: 'disa sekonda', + m: 'një minutë', + mm: '%d minuta', + h: 'një orë', + hh: '%d orë', + d: 'një ditë', + dd: '%d ditë', + M: 'një muaj', + MM: '%d muaj', + y: 'një vit', + yy: '%d vite' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/sr-cyrl.js b/node_backend/node_modules/dayjs/esm/locale/sr-cyrl.js new file mode 100644 index 0000000000000000000000000000000000000000..2e40d51acc1aa271657d65cdb7fdd42c3399fedf --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/sr-cyrl.js @@ -0,0 +1,74 @@ +// Serbian Cyrillic [sr-cyrl] +import dayjs from '../index'; +var translator = { + words: { + m: ['један минут', 'једног минута'], + mm: ['%d минут', '%d минута', '%d минута'], + h: ['један сат', 'једног сата'], + hh: ['%d сат', '%d сата', '%d сати'], + d: ['један дан', 'једног дана'], + dd: ['%d дан', '%d дана', '%d дана'], + M: ['један месец', 'једног месеца'], + MM: ['%d месец', '%d месеца', '%d месеци'], + y: ['једну годину', 'једне године'], + yy: ['%d годину', '%d године', '%d година'] + }, + correctGrammarCase: function correctGrammarCase(number, wordKey) { + if (number % 10 >= 1 && number % 10 <= 4 && (number % 100 < 10 || number % 100 >= 20)) { + return number % 10 === 1 ? wordKey[0] : wordKey[1]; + } + + return wordKey[2]; + }, + relativeTimeFormatter: function relativeTimeFormatter(number, withoutSuffix, key, isFuture) { + var wordKey = translator.words[key]; + + if (key.length === 1) { + // Nominativ + if (key === 'y' && withoutSuffix) return 'једна година'; + return isFuture || withoutSuffix ? wordKey[0] : wordKey[1]; + } + + var word = translator.correctGrammarCase(number, wordKey); // Nominativ + + if (key === 'yy' && withoutSuffix && word === '%d годину') return number + " \u0433\u043E\u0434\u0438\u043D\u0430"; + return word.replace('%d', number); + } +}; +var locale = { + name: 'sr-cyrl', + weekdays: 'Недеља_Понедељак_Уторак_Среда_Четвртак_Петак_Субота'.split('_'), + weekdaysShort: 'Нед._Пон._Уто._Сре._Чет._Пет._Суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + months: 'Јануар_Фебруар_Март_Април_Мај_Јун_Јул_Август_Септембар_Октобар_Новембар_Децембар'.split('_'), + monthsShort: 'Јан._Феб._Мар._Апр._Мај_Јун_Јул_Авг._Сеп._Окт._Нов._Дец.'.split('_'), + weekStart: 1, + relativeTime: { + future: 'за %s', + past: 'пре %s', + s: 'неколико секунди', + m: translator.relativeTimeFormatter, + mm: translator.relativeTimeFormatter, + h: translator.relativeTimeFormatter, + hh: translator.relativeTimeFormatter, + d: translator.relativeTimeFormatter, + dd: translator.relativeTimeFormatter, + M: translator.relativeTimeFormatter, + MM: translator.relativeTimeFormatter, + y: translator.relativeTimeFormatter, + yy: translator.relativeTimeFormatter + }, + ordinal: function ordinal(n) { + return n + "."; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D. M. YYYY.', + LL: 'D. MMMM YYYY.', + LLL: 'D. MMMM YYYY. H:mm', + LLLL: 'dddd, D. MMMM YYYY. H:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/sr.js b/node_backend/node_modules/dayjs/esm/locale/sr.js new file mode 100644 index 0000000000000000000000000000000000000000..f5174cedbf56de80eef7a0d3795ec815d0a495bf --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/sr.js @@ -0,0 +1,74 @@ +// Serbian [sr] +import dayjs from '../index'; +var translator = { + words: { + m: ['jedan minut', 'jednog minuta'], + mm: ['%d minut', '%d minuta', '%d minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['%d sat', '%d sata', '%d sati'], + d: ['jedan dan', 'jednog dana'], + dd: ['%d dan', '%d dana', '%d dana'], + M: ['jedan mesec', 'jednog meseca'], + MM: ['%d mesec', '%d meseca', '%d meseci'], + y: ['jednu godinu', 'jedne godine'], + yy: ['%d godinu', '%d godine', '%d godina'] + }, + correctGrammarCase: function correctGrammarCase(number, wordKey) { + if (number % 10 >= 1 && number % 10 <= 4 && (number % 100 < 10 || number % 100 >= 20)) { + return number % 10 === 1 ? wordKey[0] : wordKey[1]; + } + + return wordKey[2]; + }, + relativeTimeFormatter: function relativeTimeFormatter(number, withoutSuffix, key, isFuture) { + var wordKey = translator.words[key]; + + if (key.length === 1) { + // Nominativ + if (key === 'y' && withoutSuffix) return 'jedna godina'; + return isFuture || withoutSuffix ? wordKey[0] : wordKey[1]; + } + + var word = translator.correctGrammarCase(number, wordKey); // Nominativ + + if (key === 'yy' && withoutSuffix && word === '%d godinu') return number + " godina"; + return word.replace('%d', number); + } +}; +var locale = { + name: 'sr', + weekdays: 'Nedelja_Ponedeljak_Utorak_Sreda_Četvrtak_Petak_Subota'.split('_'), + weekdaysShort: 'Ned._Pon._Uto._Sre._Čet._Pet._Sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + months: 'Januar_Februar_Mart_April_Maj_Jun_Jul_Avgust_Septembar_Oktobar_Novembar_Decembar'.split('_'), + monthsShort: 'Jan._Feb._Mar._Apr._Maj_Jun_Jul_Avg._Sep._Okt._Nov._Dec.'.split('_'), + weekStart: 1, + relativeTime: { + future: 'za %s', + past: 'pre %s', + s: 'nekoliko sekundi', + m: translator.relativeTimeFormatter, + mm: translator.relativeTimeFormatter, + h: translator.relativeTimeFormatter, + hh: translator.relativeTimeFormatter, + d: translator.relativeTimeFormatter, + dd: translator.relativeTimeFormatter, + M: translator.relativeTimeFormatter, + MM: translator.relativeTimeFormatter, + y: translator.relativeTimeFormatter, + yy: translator.relativeTimeFormatter + }, + ordinal: function ordinal(n) { + return n + "."; + }, + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'D. M. YYYY.', + LL: 'D. MMMM YYYY.', + LLL: 'D. MMMM YYYY. H:mm', + LLLL: 'dddd, D. MMMM YYYY. H:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ss.js b/node_backend/node_modules/dayjs/esm/locale/ss.js new file mode 100644 index 0000000000000000000000000000000000000000..4354a4843d262add5fdefd5c3a9c01e45550dce9 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ss.js @@ -0,0 +1,39 @@ +// siSwati [ss] +import dayjs from '../index'; +var locale = { + name: 'ss', + weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'), + months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'), + weekStart: 1, + weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A' + }, + relativeTime: { + future: 'nga %s', + past: 'wenteka nga %s', + s: 'emizuzwana lomcane', + m: 'umzuzu', + mm: '%d emizuzu', + h: 'lihora', + hh: '%d emahora', + d: 'lilanga', + dd: '%d emalanga', + M: 'inyanga', + MM: '%d tinyanga', + y: 'umnyaka', + yy: '%d iminyaka' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/sv-fi.js b/node_backend/node_modules/dayjs/esm/locale/sv-fi.js new file mode 100644 index 0000000000000000000000000000000000000000..a18977fa0689c06bc5b2098cf8719a7eacc661c3 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/sv-fi.js @@ -0,0 +1,46 @@ +// Finland Swedish [sv-fi] +import dayjs from '../index'; +var locale = { + name: 'sv-fi', + weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'), + months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekStart: 1, + yearStart: 4, + ordinal: function ordinal(n) { + var b = n % 10; + var o = b === 1 || b === 2 ? 'a' : 'e'; + return "[" + n + o + "]"; + }, + formats: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY, [kl.] HH.mm', + LLLL: 'dddd, D. MMMM YYYY, [kl.] HH.mm', + l: 'D.M.YYYY', + ll: 'D. MMM YYYY', + lll: 'D. MMM YYYY, [kl.] HH.mm', + llll: 'ddd, D. MMM YYYY, [kl.] HH.mm' + }, + relativeTime: { + future: 'om %s', + past: 'för %s sedan', + s: 'några sekunder', + m: 'en minut', + mm: '%d minuter', + h: 'en timme', + hh: '%d timmar', + d: 'en dag', + dd: '%d dagar', + M: 'en månad', + MM: '%d månader', + y: 'ett år', + yy: '%d år' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/sv.js b/node_backend/node_modules/dayjs/esm/locale/sv.js new file mode 100644 index 0000000000000000000000000000000000000000..2563ee7c91e2c56d655f1ce28b96c5d29d302d3a --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/sv.js @@ -0,0 +1,44 @@ +// Swedish [sv] +import dayjs from '../index'; +var locale = { + name: 'sv', + weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'), + months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), + monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekStart: 1, + yearStart: 4, + ordinal: function ordinal(n) { + var b = n % 10; + var o = b === 1 || b === 2 ? 'a' : 'e'; + return "[" + n + o + "]"; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [kl.] HH:mm', + LLLL: 'dddd D MMMM YYYY [kl.] HH:mm', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd D MMM YYYY HH:mm' + }, + relativeTime: { + future: 'om %s', + past: 'för %s sedan', + s: 'några sekunder', + m: 'en minut', + mm: '%d minuter', + h: 'en timme', + hh: '%d timmar', + d: 'en dag', + dd: '%d dagar', + M: 'en månad', + MM: '%d månader', + y: 'ett år', + yy: '%d år' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/sw.js b/node_backend/node_modules/dayjs/esm/locale/sw.js new file mode 100644 index 0000000000000000000000000000000000000000..287bf3360b3454bec896a486cd459d95c5d64d75 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/sw.js @@ -0,0 +1,39 @@ +// Swahili [sw] +import dayjs from '../index'; +var locale = { + name: 'sw', + weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'), + weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekStart: 1, + ordinal: function ordinal(n) { + return n; + }, + relativeTime: { + future: '%s baadaye', + past: 'tokea %s', + s: 'hivi punde', + m: 'dakika moja', + mm: 'dakika %d', + h: 'saa limoja', + hh: 'masaa %d', + d: 'siku moja', + dd: 'masiku %d', + M: 'mwezi mmoja', + MM: 'miezi %d', + y: 'mwaka mmoja', + yy: 'miaka %d' + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ta.js b/node_backend/node_modules/dayjs/esm/locale/ta.js new file mode 100644 index 0000000000000000000000000000000000000000..6df25f876821b9494e54d605766e24422b8bf6f8 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ta.js @@ -0,0 +1,38 @@ +// Tamil [ta] +import dayjs from '../index'; +var locale = { + name: 'ta', + weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'), + months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'), + monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, HH:mm', + LLLL: 'dddd, D MMMM YYYY, HH:mm' + }, + relativeTime: { + future: '%s இல்', + past: '%s முன்', + s: 'ஒரு சில விநாடிகள்', + m: 'ஒரு நிமிடம்', + mm: '%d நிமிடங்கள்', + h: 'ஒரு மணி நேரம்', + hh: '%d மணி நேரம்', + d: 'ஒரு நாள்', + dd: '%d நாட்கள்', + M: 'ஒரு மாதம்', + MM: '%d மாதங்கள்', + y: 'ஒரு வருடம்', + yy: '%d ஆண்டுகள்' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/te.js b/node_backend/node_modules/dayjs/esm/locale/te.js new file mode 100644 index 0000000000000000000000000000000000000000..392a2478c290b5b174b4beed54369cb9e4c74c4c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/te.js @@ -0,0 +1,38 @@ +// Telugu [te] +import dayjs from '../index'; +var locale = { + name: 'te', + weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'), + months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'), + weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'), + weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'A h:mm', + LTS: 'A h:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY, A h:mm', + LLLL: 'dddd, D MMMM YYYY, A h:mm' + }, + relativeTime: { + future: '%s లో', + past: '%s క్రితం', + s: 'కొన్ని క్షణాలు', + m: 'ఒక నిమిషం', + mm: '%d నిమిషాలు', + h: 'ఒక గంట', + hh: '%d గంటలు', + d: 'ఒక రోజు', + dd: '%d రోజులు', + M: 'ఒక నెల', + MM: '%d నెలలు', + y: 'ఒక సంవత్సరం', + yy: '%d సంవత్సరాలు' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/tet.js b/node_backend/node_modules/dayjs/esm/locale/tet.js new file mode 100644 index 0000000000000000000000000000000000000000..ff83eeab05f267cf815ea65207625c6af042f443 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/tet.js @@ -0,0 +1,39 @@ +// Tetun Dili (East Timor) [tet] +import dayjs from '../index'; +var locale = { + name: 'tet', + weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'), + months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'), + weekStart: 1, + weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'), + monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'iha %s', + past: '%s liuba', + s: 'minutu balun', + m: 'minutu ida', + mm: 'minutu %d', + h: 'oras ida', + hh: 'oras %d', + d: 'loron ida', + dd: 'loron %d', + M: 'fulan ida', + MM: 'fulan %d', + y: 'tinan ida', + yy: 'tinan %d' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/tg.js b/node_backend/node_modules/dayjs/esm/locale/tg.js new file mode 100644 index 0000000000000000000000000000000000000000..536df0b967beb89fed160c75a63b5ef8c270d246 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/tg.js @@ -0,0 +1,39 @@ +// Tajik [tg] +import dayjs from '../index'; +var locale = { + name: 'tg', + weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'), + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), + weekStart: 1, + weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'баъди %s', + past: '%s пеш', + s: 'якчанд сония', + m: 'як дақиқа', + mm: '%d дақиқа', + h: 'як соат', + hh: '%d соат', + d: 'як рӯз', + dd: '%d рӯз', + M: 'як моҳ', + MM: '%d моҳ', + y: 'як сол', + yy: '%d сол' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/th.js b/node_backend/node_modules/dayjs/esm/locale/th.js new file mode 100644 index 0000000000000000000000000000000000000000..5cbcdf2ad635c47c56e07e4fb01ec3044b2fbb0b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/th.js @@ -0,0 +1,38 @@ +// Thai [th] +import dayjs from '../index'; +var locale = { + name: 'th', + weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), + weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'), + monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'), + formats: { + LT: 'H:mm', + LTS: 'H:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY เวลา H:mm', + LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm' + }, + relativeTime: { + future: 'อีก %s', + past: '%sที่แล้ว', + s: 'ไม่กี่วินาที', + m: '1 นาที', + mm: '%d นาที', + h: '1 ชั่วโมง', + hh: '%d ชั่วโมง', + d: '1 วัน', + dd: '%d วัน', + M: '1 เดือน', + MM: '%d เดือน', + y: '1 ปี', + yy: '%d ปี' + }, + ordinal: function ordinal(n) { + return n + "."; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/tk.js b/node_backend/node_modules/dayjs/esm/locale/tk.js new file mode 100644 index 0000000000000000000000000000000000000000..93390f18b857ccd3dd0e6f8430f6f43d87532312 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/tk.js @@ -0,0 +1,39 @@ +// Turkmen [tk] +import dayjs from '../index'; +var locale = { + name: 'tk', + weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split('_'), + weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'), + weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'), + months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split('_'), + monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'), + weekStart: 1, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: '%s soň', + past: '%s öň', + s: 'birnäçe sekunt', + m: 'bir minut', + mm: '%d minut', + h: 'bir sagat', + hh: '%d sagat', + d: 'bir gün', + dd: '%d gün', + M: 'bir aý', + MM: '%d aý', + y: 'bir ýyl', + yy: '%d ýyl' + }, + ordinal: function ordinal(n) { + return n + "."; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/tl-ph.js b/node_backend/node_modules/dayjs/esm/locale/tl-ph.js new file mode 100644 index 0000000000000000000000000000000000000000..0fa84f3a7213157d2eecbc0fd61385b75f2ba64b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/tl-ph.js @@ -0,0 +1,39 @@ +// Tagalog (Philippines) [tl-ph] +import dayjs from '../index'; +var locale = { + name: 'tl-ph', + weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'), + months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'), + weekStart: 1, + weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'MM/D/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY HH:mm', + LLLL: 'dddd, MMMM DD, YYYY HH:mm' + }, + relativeTime: { + future: 'sa loob ng %s', + past: '%s ang nakalipas', + s: 'ilang segundo', + m: 'isang minuto', + mm: '%d minuto', + h: 'isang oras', + hh: '%d oras', + d: 'isang araw', + dd: '%d araw', + M: 'isang buwan', + MM: '%d buwan', + y: 'isang taon', + yy: '%d taon' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/tlh.js b/node_backend/node_modules/dayjs/esm/locale/tlh.js new file mode 100644 index 0000000000000000000000000000000000000000..30f52fe74116fbc6963a7796ffa2488cc5a276f7 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/tlh.js @@ -0,0 +1,24 @@ +// Klingon [tlh] +import dayjs from '../index'; +var locale = { + name: 'tlh', + weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'), + weekStart: 1, + weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'), + weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/tr.js b/node_backend/node_modules/dayjs/esm/locale/tr.js new file mode 100644 index 0000000000000000000000000000000000000000..e7fe24fb3b1ef426dafa8390d4aab43072ea636b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/tr.js @@ -0,0 +1,39 @@ +// Turkish [tr] +import dayjs from '../index'; +var locale = { + name: 'tr', + weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'), + weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'), + monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekStart: 1, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: '%s sonra', + past: '%s önce', + s: 'birkaç saniye', + m: 'bir dakika', + mm: '%d dakika', + h: 'bir saat', + hh: '%d saat', + d: 'bir gün', + dd: '%d gün', + M: 'bir ay', + MM: '%d ay', + y: 'bir yıl', + yy: '%d yıl' + }, + ordinal: function ordinal(n) { + return n + "."; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/types.d.ts b/node_backend/node_modules/dayjs/esm/locale/types.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2c24a64566fe466005802bb9a61652bae772db9c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/types.d.ts @@ -0,0 +1,33 @@ +declare interface ILocale { + name: string + weekdays?: string[] + months?: string[] + weekStart?: number + weekdaysShort?: string[] + monthsShort?: string[] + weekdaysMin?: string[] + ordinal?: (n: number) => number | string + formats: Partial<{ + LT: string + LTS: string + L: string + LL: string + LLL: string + LLLL: string + }> + relativeTime: Partial<{ + future: string + past: string + s: string + m: string + mm: string + h: string + hh: string + d: string + dd: string + M: string + MM: string + y: string + yy: string + }> +} diff --git a/node_backend/node_modules/dayjs/esm/locale/tzl.js b/node_backend/node_modules/dayjs/esm/locale/tzl.js new file mode 100644 index 0000000000000000000000000000000000000000..9fa0cd2b97076f9e4d017c49e2c5a8c2450d4b77 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/tzl.js @@ -0,0 +1,24 @@ +// Talossan [tzl] +import dayjs from '../index'; +var locale = { + name: 'tzl', + weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'), + weekStart: 1, + weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH.mm', + LTS: 'HH.mm.ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM [dallas] YYYY', + LLL: 'D. MMMM [dallas] YYYY HH.mm', + LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/tzm-latn.js b/node_backend/node_modules/dayjs/esm/locale/tzm-latn.js new file mode 100644 index 0000000000000000000000000000000000000000..e5ac6aff76daa9151f783a887a134cb5025f63bd --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/tzm-latn.js @@ -0,0 +1,39 @@ +// Central Atlas Tamazight Latin [tzm-latn] +import dayjs from '../index'; +var locale = { + name: 'tzm-latn', + weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + weekStart: 6, + weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'dadkh s yan %s', + past: 'yan %s', + s: 'imik', + m: 'minuḍ', + mm: '%d minuḍ', + h: 'saɛa', + hh: '%d tassaɛin', + d: 'ass', + dd: '%d ossan', + M: 'ayowr', + MM: '%d iyyirn', + y: 'asgas', + yy: '%d isgasn' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/tzm.js b/node_backend/node_modules/dayjs/esm/locale/tzm.js new file mode 100644 index 0000000000000000000000000000000000000000..d94a6c09383257c49026aa9ef83fe2f6cf4946d8 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/tzm.js @@ -0,0 +1,39 @@ +// Central Atlas Tamazight [tzm] +import dayjs from '../index'; +var locale = { + name: 'tzm', + weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + weekStart: 6, + weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past: 'ⵢⴰⵏ %s', + s: 'ⵉⵎⵉⴽ', + m: 'ⵎⵉⵏⵓⴺ', + mm: '%d ⵎⵉⵏⵓⴺ', + h: 'ⵙⴰⵄⴰ', + hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d: 'ⴰⵙⵙ', + dd: '%d oⵙⵙⴰⵏ', + M: 'ⴰⵢoⵓⵔ', + MM: '%d ⵉⵢⵢⵉⵔⵏ', + y: 'ⴰⵙⴳⴰⵙ', + yy: '%d ⵉⵙⴳⴰⵙⵏ' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ug-cn.js b/node_backend/node_modules/dayjs/esm/locale/ug-cn.js new file mode 100644 index 0000000000000000000000000000000000000000..d3d6392a822782c722f69aefe87f2af1ff43eea5 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ug-cn.js @@ -0,0 +1,39 @@ +// Uyghur (China) [ug-cn] +import dayjs from '../index'; +var locale = { + name: 'ug-cn', + weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split('_'), + months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'), + weekStart: 1, + weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'), + weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY-MM-DD', + LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى', + LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm', + LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm' + }, + relativeTime: { + future: '%s كېيىن', + past: '%s بۇرۇن', + s: 'نەچچە سېكونت', + m: 'بىر مىنۇت', + mm: '%d مىنۇت', + h: 'بىر سائەت', + hh: '%d سائەت', + d: 'بىر كۈن', + dd: '%d كۈن', + M: 'بىر ئاي', + MM: '%d ئاي', + y: 'بىر يىل', + yy: '%d يىل' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/uk.js b/node_backend/node_modules/dayjs/esm/locale/uk.js new file mode 100644 index 0000000000000000000000000000000000000000..3c70b1329c5f6ec501c4568bfef4371abfcc1d7e --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/uk.js @@ -0,0 +1,77 @@ +// Ukrainian [uk] +import dayjs from '../index'; +var monthFormat = 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'); +var monthStandalone = 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'); +var MONTHS_IN_FORMAT = /D[oD]?(\[[^[\]]*\]|\s)+MMMM?/; + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]; // eslint-disable-line +} + +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд', + mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + dd: 'день_дні_днів', + MM: 'місяць_місяці_місяців', + yy: 'рік_роки_років' + }; + + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } + + return number + " " + plural(format[key], +number); +} + +var months = function months(dayjsInstance, format) { + if (MONTHS_IN_FORMAT.test(format)) { + return monthFormat[dayjsInstance.month()]; + } + + return monthStandalone[dayjsInstance.month()]; +}; + +months.s = monthStandalone; +months.f = monthFormat; +var locale = { + name: 'uk', + weekdays: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), + weekdaysShort: 'ндл_пнд_втр_срд_чтв_птн_сбт'.split('_'), + weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + months: months, + monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'), + weekStart: 1, + relativeTime: { + future: 'за %s', + past: '%s тому', + s: 'декілька секунд', + m: relativeTimeWithPlural, + mm: relativeTimeWithPlural, + h: relativeTimeWithPlural, + hh: relativeTimeWithPlural, + d: 'день', + dd: relativeTimeWithPlural, + M: 'місяць', + MM: relativeTimeWithPlural, + y: 'рік', + yy: relativeTimeWithPlural + }, + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D MMMM YYYY р.', + LLL: 'D MMMM YYYY р., HH:mm', + LLLL: 'dddd, D MMMM YYYY р., HH:mm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/ur.js b/node_backend/node_modules/dayjs/esm/locale/ur.js new file mode 100644 index 0000000000000000000000000000000000000000..7464c1ebc93c035cfc8b1131dd2f2857cf595572 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/ur.js @@ -0,0 +1,39 @@ +// Urdu [ur] +import dayjs from '../index'; +var locale = { + name: 'ur', + weekdays: 'اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ'.split('_'), + months: 'جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر'.split('_'), + weekStart: 1, + weekdaysShort: 'اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ'.split('_'), + monthsShort: 'جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر'.split('_'), + weekdaysMin: 'اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd، D MMMM YYYY HH:mm' + }, + relativeTime: { + future: '%s بعد', + past: '%s قبل', + s: 'چند سیکنڈ', + m: 'ایک منٹ', + mm: '%d منٹ', + h: 'ایک گھنٹہ', + hh: '%d گھنٹے', + d: 'ایک دن', + dd: '%d دن', + M: 'ایک ماہ', + MM: '%d ماہ', + y: 'ایک سال', + yy: '%d سال' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/uz-latn.js b/node_backend/node_modules/dayjs/esm/locale/uz-latn.js new file mode 100644 index 0000000000000000000000000000000000000000..befdfee44fb78d14ca17fac0692a49cb19507082 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/uz-latn.js @@ -0,0 +1,39 @@ +// Uzbek Latin [uz-latn] +import dayjs from '../index'; +var locale = { + name: 'uz-latn', + weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'), + months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'), + weekStart: 1, + weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), + monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), + weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm' + }, + relativeTime: { + future: 'Yaqin %s ichida', + past: '%s oldin', + s: 'soniya', + m: 'bir daqiqa', + mm: '%d daqiqa', + h: 'bir soat', + hh: '%d soat', + d: 'bir kun', + dd: '%d kun', + M: 'bir oy', + MM: '%d oy', + y: 'bir yil', + yy: '%d yil' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/uz.js b/node_backend/node_modules/dayjs/esm/locale/uz.js new file mode 100644 index 0000000000000000000000000000000000000000..443326373b1d6ebed3f533feb01221f067e1248c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/uz.js @@ -0,0 +1,39 @@ +// Uzbek [uz] +import dayjs from '../index'; +var locale = { + name: 'uz', + weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), + weekStart: 1, + weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'D MMMM YYYY, dddd HH:mm' + }, + relativeTime: { + future: 'Якин %s ичида', + past: '%s олдин', + s: 'фурсат', + m: 'бир дакика', + mm: '%d дакика', + h: 'бир соат', + hh: '%d соат', + d: 'бир кун', + dd: '%d кун', + M: 'бир ой', + MM: '%d ой', + y: 'бир йил', + yy: '%d йил' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/vi.js b/node_backend/node_modules/dayjs/esm/locale/vi.js new file mode 100644 index 0000000000000000000000000000000000000000..f55cc732b88c30d58310ee860cc050011dc7a037 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/vi.js @@ -0,0 +1,43 @@ +// Vietnamese [vi] +import dayjs from '../index'; +var locale = { + name: 'vi', + weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'), + months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'), + weekStart: 1, + weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + monthsShort: 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'), + weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM [năm] YYYY', + LLL: 'D MMMM [năm] YYYY HH:mm', + LLLL: 'dddd, D MMMM [năm] YYYY HH:mm', + l: 'DD/M/YYYY', + ll: 'D MMM YYYY', + lll: 'D MMM YYYY HH:mm', + llll: 'ddd, D MMM YYYY HH:mm' + }, + relativeTime: { + future: '%s tới', + past: '%s trước', + s: 'vài giây', + m: 'một phút', + mm: '%d phút', + h: 'một giờ', + hh: '%d giờ', + d: 'một ngày', + dd: '%d ngày', + M: 'một tháng', + MM: '%d tháng', + y: 'một năm', + yy: '%d năm' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/x-pseudo.js b/node_backend/node_modules/dayjs/esm/locale/x-pseudo.js new file mode 100644 index 0000000000000000000000000000000000000000..ceb67827d86501182b01caed4827bc85b243c40b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/x-pseudo.js @@ -0,0 +1,39 @@ +// Pseudo [x-pseudo] +import dayjs from '../index'; +var locale = { + name: 'x-pseudo', + weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'), + months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'), + weekStart: 1, + weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'), + weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + relativeTime: { + future: 'í~ñ %s', + past: '%s á~gó', + s: 'á ~féw ~sécó~ñds', + m: 'á ~míñ~úté', + mm: '%d m~íñú~tés', + h: 'á~ñ hó~úr', + hh: '%d h~óúrs', + d: 'á ~dáý', + dd: '%d d~áýs', + M: 'á ~móñ~th', + MM: '%d m~óñt~hs', + y: 'á ~ýéár', + yy: '%d ý~éárs' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/yo.js b/node_backend/node_modules/dayjs/esm/locale/yo.js new file mode 100644 index 0000000000000000000000000000000000000000..1f7946846d2ff659390444642b89f790cfe5354c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/yo.js @@ -0,0 +1,39 @@ +// Yoruba Nigeria [yo] +import dayjs from '../index'; +var locale = { + name: 'yo', + weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'), + weekStart: 1, + weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + ordinal: function ordinal(n) { + return n; + }, + formats: { + LT: 'h:mm A', + LTS: 'h:mm:ss A', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY h:mm A', + LLLL: 'dddd, D MMMM YYYY h:mm A' + }, + relativeTime: { + future: 'ní %s', + past: '%s kọjá', + s: 'ìsẹjú aayá die', + m: 'ìsẹjú kan', + mm: 'ìsẹjú %d', + h: 'wákati kan', + hh: 'wákati %d', + d: 'ọjọ́ kan', + dd: 'ọjọ́ %d', + M: 'osù kan', + MM: 'osù %d', + y: 'ọdún kan', + yy: 'ọdún %d' + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/zh-cn.js b/node_backend/node_modules/dayjs/esm/locale/zh-cn.js new file mode 100644 index 0000000000000000000000000000000000000000..1a7ebf4bdf7e3eec8f56092f22e062ecba33b69b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/zh-cn.js @@ -0,0 +1,67 @@ +// Chinese (China) [zh-cn] +import dayjs from '../index'; +var locale = { + name: 'zh-cn', + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + ordinal: function ordinal(number, period) { + switch (period) { + case 'W': + return number + "\u5468"; + + default: + return number + "\u65E5"; + } + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日Ah点mm分', + LLLL: 'YYYY年M月D日ddddAh点mm分', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm' + }, + relativeTime: { + future: '%s内', + past: '%s前', + s: '几秒', + m: '1 分钟', + mm: '%d 分钟', + h: '1 小时', + hh: '%d 小时', + d: '1 天', + dd: '%d 天', + M: '1 个月', + MM: '%d 个月', + y: '1 年', + yy: '%d 年' + }, + meridiem: function meridiem(hour, minute) { + var hm = hour * 100 + minute; + + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1100) { + return '上午'; + } else if (hm < 1300) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } + + return '晚上'; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/zh-hk.js b/node_backend/node_modules/dayjs/esm/locale/zh-hk.js new file mode 100644 index 0000000000000000000000000000000000000000..8ada9a018dbef08bb6a55a86f7e23c4cac47fdf7 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/zh-hk.js @@ -0,0 +1,65 @@ +// Chinese (Hong Kong) [zh-hk] +import dayjs from '../index'; +var locale = { + name: 'zh-hk', + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + ordinal: function ordinal(number, period) { + switch (period) { + case 'W': + return number + "\u9031"; + + default: + return number + "\u65E5"; + } + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm' + }, + relativeTime: { + future: '%s內', + past: '%s前', + s: '幾秒', + m: '一分鐘', + mm: '%d 分鐘', + h: '一小時', + hh: '%d 小時', + d: '一天', + dd: '%d 天', + M: '一個月', + MM: '%d 個月', + y: '一年', + yy: '%d 年' + }, + meridiem: function meridiem(hour, minute) { + var hm = hour * 100 + minute; + + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1100) { + return '上午'; + } else if (hm < 1300) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } + + return '晚上'; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/zh-tw.js b/node_backend/node_modules/dayjs/esm/locale/zh-tw.js new file mode 100644 index 0000000000000000000000000000000000000000..ada89ee41ef62499ba501ba7dd7123baecbd47e2 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/zh-tw.js @@ -0,0 +1,65 @@ +// Chinese (Taiwan) [zh-tw] +import dayjs from '../index'; +var locale = { + name: 'zh-tw', + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + ordinal: function ordinal(number, period) { + switch (period) { + case 'W': + return number + "\u9031"; + + default: + return number + "\u65E5"; + } + }, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日 HH:mm', + LLLL: 'YYYY年M月D日dddd HH:mm', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm' + }, + relativeTime: { + future: '%s內', + past: '%s前', + s: '幾秒', + m: '1 分鐘', + mm: '%d 分鐘', + h: '1 小時', + hh: '%d 小時', + d: '1 天', + dd: '%d 天', + M: '1 個月', + MM: '%d 個月', + y: '1 年', + yy: '%d 年' + }, + meridiem: function meridiem(hour, minute) { + var hm = hour * 100 + minute; + + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1100) { + return '上午'; + } else if (hm < 1300) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } + + return '晚上'; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/locale/zh.js b/node_backend/node_modules/dayjs/esm/locale/zh.js new file mode 100644 index 0000000000000000000000000000000000000000..b98ab70df06526bca8bc8401e532444819e74d61 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/locale/zh.js @@ -0,0 +1,67 @@ +// Chinese [zh] +import dayjs from '../index'; +var locale = { + name: 'zh', + weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin: '日_一_二_三_四_五_六'.split('_'), + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + ordinal: function ordinal(number, period) { + switch (period) { + case 'W': + return number + "\u5468"; + + default: + return number + "\u65E5"; + } + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日Ah点mm分', + LLLL: 'YYYY年M月D日ddddAh点mm分', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm' + }, + relativeTime: { + future: '%s后', + past: '%s前', + s: '几秒', + m: '1 分钟', + mm: '%d 分钟', + h: '1 小时', + hh: '%d 小时', + d: '1 天', + dd: '%d 天', + M: '1 个月', + MM: '%d 个月', + y: '1 年', + yy: '%d 年' + }, + meridiem: function meridiem(hour, minute) { + var hm = hour * 100 + minute; + + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1100) { + return '上午'; + } else if (hm < 1300) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } + + return '晚上'; + } +}; +dayjs.locale(locale, null, true); +export default locale; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/advancedFormat/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/advancedFormat/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a17c89631da21938e072443df494e8cc3d409022 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/advancedFormat/index.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/esm/plugin/advancedFormat/index.js b/node_backend/node_modules/dayjs/esm/plugin/advancedFormat/index.js new file mode 100644 index 0000000000000000000000000000000000000000..f45e4e0042159eb361a92b9cdf3b8ada98ec9181 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/advancedFormat/index.js @@ -0,0 +1,66 @@ +import { FORMAT_DEFAULT } from '../../constant'; +export default (function (o, c) { + // locale needed later + var proto = c.prototype; + var oldFormat = proto.format; + + proto.format = function (formatStr) { + var _this = this; + + var locale = this.$locale(); + + if (!this.isValid()) { + return oldFormat.bind(this)(formatStr); + } + + var utils = this.$utils(); + var str = formatStr || FORMAT_DEFAULT; + var result = str.replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, function (match) { + switch (match) { + case 'Q': + return Math.ceil((_this.$M + 1) / 3); + + case 'Do': + return locale.ordinal(_this.$D); + + case 'gggg': + return _this.weekYear(); + + case 'GGGG': + return _this.isoWeekYear(); + + case 'wo': + return locale.ordinal(_this.week(), 'W'); + // W for week + + case 'w': + case 'ww': + return utils.s(_this.week(), match === 'w' ? 1 : 2, '0'); + + case 'W': + case 'WW': + return utils.s(_this.isoWeek(), match === 'W' ? 1 : 2, '0'); + + case 'k': + case 'kk': + return utils.s(String(_this.$H === 0 ? 24 : _this.$H), match === 'k' ? 1 : 2, '0'); + + case 'X': + return Math.floor(_this.$d.getTime() / 1000); + + case 'x': + return _this.$d.getTime(); + + case 'z': + return "[" + _this.offsetName() + "]"; + + case 'zzz': + return "[" + _this.offsetName('long') + "]"; + + default: + return match; + } + }); + return oldFormat.bind(this)(result); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/arraySupport/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/arraySupport/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..30f8d9c5bd1556bca1fbb6891c50694582a8a174 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/arraySupport/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs/esm' + +declare module 'dayjs/esm' { + interface ConfigTypeMap { + arraySupport: [number?, number?, number?, number?, number?, number?, number?] + } +} + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/esm/plugin/arraySupport/index.js b/node_backend/node_modules/dayjs/esm/plugin/arraySupport/index.js new file mode 100644 index 0000000000000000000000000000000000000000..c7edc793c2e10567333927eddfc68d219e49c985 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/arraySupport/index.js @@ -0,0 +1,33 @@ +export default (function (o, c, dayjs) { + var proto = c.prototype; + + var parseDate = function parseDate(cfg) { + var date = cfg.date, + utc = cfg.utc; + + if (Array.isArray(date)) { + if (utc) { + if (!date.length) { + return new Date(); + } + + return new Date(Date.UTC.apply(null, date)); + } + + if (date.length === 1) { + return dayjs(String(date[0])).toDate(); + } + + return new (Function.prototype.bind.apply(Date, [null].concat(date)))(); + } + + return date; + }; + + var oldParse = proto.parse; + + proto.parse = function (cfg) { + cfg.date = parseDate.bind(this)(cfg); + oldParse.bind(this)(cfg); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/badMutable/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/badMutable/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a17c89631da21938e072443df494e8cc3d409022 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/badMutable/index.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/esm/plugin/badMutable/index.js b/node_backend/node_modules/dayjs/esm/plugin/badMutable/index.js new file mode 100644 index 0000000000000000000000000000000000000000..679edee98fb7db822a1fe84318900b1087d79ab8 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/badMutable/index.js @@ -0,0 +1,61 @@ +export default (function (o, c) { + // locale needed later + var proto = c.prototype; + + proto.$g = function (input, get, set) { + if (this.$utils().u(input)) return this[get]; + return this.$set(set, input); + }; + + proto.set = function (string, _int) { + return this.$set(string, _int); + }; + + var oldStartOf = proto.startOf; + + proto.startOf = function (units, startOf) { + this.$d = oldStartOf.bind(this)(units, startOf).toDate(); + this.init(); + return this; + }; + + var oldAdd = proto.add; + + proto.add = function (number, units) { + this.$d = oldAdd.bind(this)(number, units).toDate(); + this.init(); + return this; + }; + + var oldLocale = proto.locale; + + proto.locale = function (preset, object) { + if (!preset) return this.$L; + this.$L = oldLocale.bind(this)(preset, object).$L; + return this; + }; + + var oldDaysInMonth = proto.daysInMonth; + + proto.daysInMonth = function () { + return oldDaysInMonth.bind(this.clone())(); + }; + + var oldIsSame = proto.isSame; + + proto.isSame = function (that, units) { + return oldIsSame.bind(this.clone())(that, units); + }; + + var oldIsBefore = proto.isBefore; + + proto.isBefore = function (that, units) { + return oldIsBefore.bind(this.clone())(that, units); + }; + + var oldIsAfter = proto.isAfter; + + proto.isAfter = function (that, units) { + return oldIsAfter.bind(this.clone())(that, units); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/bigIntSupport/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/bigIntSupport/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..0829ead5b7d1ce7a59c405df7f1ad751cc8270cb --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/bigIntSupport/index.d.ts @@ -0,0 +1,11 @@ +import { PluginFunc } from 'dayjs/esm' + +declare module 'dayjs/esm' { + interface ConfigTypeMap { + bigIntSupport: BigInt + } + export function unix(t: BigInt): Dayjs +} + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/esm/plugin/bigIntSupport/index.js b/node_backend/node_modules/dayjs/esm/plugin/bigIntSupport/index.js new file mode 100644 index 0000000000000000000000000000000000000000..fa9398212de77f0e15ec43fe436b066bf6523b12 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/bigIntSupport/index.js @@ -0,0 +1,32 @@ +// eslint-disable-next-line valid-typeof +var isBigInt = function isBigInt(num) { + return typeof num === 'bigint'; +}; + +export default (function (o, c, dayjs) { + var proto = c.prototype; + + var parseDate = function parseDate(cfg) { + var date = cfg.date; + + if (isBigInt(date)) { + return Number(date); + } + + return date; + }; + + var oldParse = proto.parse; + + proto.parse = function (cfg) { + cfg.date = parseDate.bind(this)(cfg); + oldParse.bind(this)(cfg); + }; + + var oldUnix = dayjs.unix; + + dayjs.unix = function (timestamp) { + var ts = isBigInt(timestamp) ? Number(timestamp) : timestamp; + return oldUnix(ts); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/buddhistEra/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/buddhistEra/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a17c89631da21938e072443df494e8cc3d409022 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/buddhistEra/index.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/esm/plugin/buddhistEra/index.js b/node_backend/node_modules/dayjs/esm/plugin/buddhistEra/index.js new file mode 100644 index 0000000000000000000000000000000000000000..76ce44cca926d87f93e6d1729635b6499a18517d --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/buddhistEra/index.js @@ -0,0 +1,21 @@ +import { FORMAT_DEFAULT } from '../../constant'; +export default (function (o, c) { + // locale needed later + var proto = c.prototype; + var oldFormat = proto.format; // extend en locale here + + proto.format = function (formatStr) { + var _this = this; + + var yearBias = 543; + var str = formatStr || FORMAT_DEFAULT; + var result = str.replace(/(\[[^\]]+])|BBBB|BB/g, function (match, a) { + var _this$$utils; + + var year = String(_this.$y + yearBias); + var args = match === 'BB' ? [year.slice(-2), 2] : [year, 4]; + return a || (_this$$utils = _this.$utils()).s.apply(_this$$utils, args.concat(['0'])); + }); + return oldFormat.bind(this)(result); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/calendar/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/calendar/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..42bff4bfcb7174ea036432353028a604498ed81c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/calendar/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc, ConfigType } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + calendar(referenceTime?: ConfigType, formats?: object): string + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/calendar/index.js b/node_backend/node_modules/dayjs/esm/plugin/calendar/index.js new file mode 100644 index 0000000000000000000000000000000000000000..9abf1e907dc6df1b1c13ddca40539f3a66d65073 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/calendar/index.js @@ -0,0 +1,32 @@ +export default (function (o, c, d) { + var LT = 'h:mm A'; + var L = 'MM/DD/YYYY'; + var calendarFormat = { + lastDay: "[Yesterday at] " + LT, + sameDay: "[Today at] " + LT, + nextDay: "[Tomorrow at] " + LT, + nextWeek: "dddd [at] " + LT, + lastWeek: "[Last] dddd [at] " + LT, + sameElse: L + }; + var proto = c.prototype; + + proto.calendar = function (referenceTime, formats) { + var format = formats || this.$locale().calendar || calendarFormat; + var referenceStartOfDay = d(referenceTime || undefined).startOf('d'); + var diff = this.diff(referenceStartOfDay, 'd', true); + var sameElse = 'sameElse'; + /* eslint-disable no-nested-ternary */ + + var retVal = diff < -6 ? sameElse : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : sameElse; + /* eslint-enable no-nested-ternary */ + + var currentFormat = format[retVal] || calendarFormat[retVal]; + + if (typeof currentFormat === 'function') { + return currentFormat.call(this, d()); + } + + return this.format(currentFormat); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/customParseFormat/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/customParseFormat/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7da585e6e5aa1406b0cc3259bb0e256b3691a1c9 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/customParseFormat/index.d.ts @@ -0,0 +1,8 @@ +import { PluginFunc } from 'dayjs/esm' + +declare interface PluginOptions { + parseTwoDigitYear?: (yearString: string) => number +} + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/esm/plugin/customParseFormat/index.js b/node_backend/node_modules/dayjs/esm/plugin/customParseFormat/index.js new file mode 100644 index 0000000000000000000000000000000000000000..b5363f2a88add165f895d70dba9ccdaa1bafd3df --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/customParseFormat/index.js @@ -0,0 +1,333 @@ +import { u } from '../localizedFormat/utils'; +var formattingTokens = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g; +var match1 = /\d/; // 0 - 9 + +var match2 = /\d\d/; // 00 - 99 + +var match3 = /\d{3}/; // 000 - 999 + +var match4 = /\d{4}/; // 0000 - 9999 + +var match1to2 = /\d\d?/; // 0 - 99 + +var matchSigned = /[+-]?\d+/; // -inf - inf + +var matchOffset = /[+-]\d\d:?(\d\d)?|Z/; // +00:00 -00:00 +0000 or -0000 +00 or Z + +var matchWord = /\d*[^-_:/,()\s\d]+/; // Word + +var locale = {}; + +var parseTwoDigitYear = function parseTwoDigitYear(input) { + input = +input; + return input + (input > 68 ? 1900 : 2000); +}; + +function offsetFromString(string) { + if (!string) return 0; + if (string === 'Z') return 0; + var parts = string.match(/([+-]|\d\d)/g); + var minutes = +(parts[1] * 60) + (+parts[2] || 0); + return minutes === 0 ? 0 : parts[0] === '+' ? -minutes : minutes; // eslint-disable-line no-nested-ternary +} + +var addInput = function addInput(property) { + return function (input) { + this[property] = +input; + }; +}; + +var zoneExpressions = [matchOffset, function (input) { + var zone = this.zone || (this.zone = {}); + zone.offset = offsetFromString(input); +}]; + +var getLocalePart = function getLocalePart(name) { + var part = locale[name]; + return part && (part.indexOf ? part : part.s.concat(part.f)); +}; + +var meridiemMatch = function meridiemMatch(input, isLowerCase) { + var isAfternoon; + var _locale = locale, + meridiem = _locale.meridiem; + + if (!meridiem) { + isAfternoon = input === (isLowerCase ? 'pm' : 'PM'); + } else { + for (var i = 1; i <= 24; i += 1) { + // todo: fix input === meridiem(i, 0, isLowerCase) + if (input.indexOf(meridiem(i, 0, isLowerCase)) > -1) { + isAfternoon = i > 12; + break; + } + } + } + + return isAfternoon; +}; + +var expressions = { + A: [matchWord, function (input) { + this.afternoon = meridiemMatch(input, false); + }], + a: [matchWord, function (input) { + this.afternoon = meridiemMatch(input, true); + }], + Q: [match1, function (input) { + this.month = (input - 1) * 3 + 1; + }], + S: [match1, function (input) { + this.milliseconds = +input * 100; + }], + SS: [match2, function (input) { + this.milliseconds = +input * 10; + }], + SSS: [match3, function (input) { + this.milliseconds = +input; + }], + s: [match1to2, addInput('seconds')], + ss: [match1to2, addInput('seconds')], + m: [match1to2, addInput('minutes')], + mm: [match1to2, addInput('minutes')], + H: [match1to2, addInput('hours')], + h: [match1to2, addInput('hours')], + HH: [match1to2, addInput('hours')], + hh: [match1to2, addInput('hours')], + D: [match1to2, addInput('day')], + DD: [match2, addInput('day')], + Do: [matchWord, function (input) { + var _locale2 = locale, + ordinal = _locale2.ordinal; + + var _input$match = input.match(/\d+/); + + this.day = _input$match[0]; + if (!ordinal) return; + + for (var i = 1; i <= 31; i += 1) { + if (ordinal(i).replace(/\[|\]/g, '') === input) { + this.day = i; + } + } + }], + w: [match1to2, addInput('week')], + ww: [match2, addInput('week')], + M: [match1to2, addInput('month')], + MM: [match2, addInput('month')], + MMM: [matchWord, function (input) { + var months = getLocalePart('months'); + var monthsShort = getLocalePart('monthsShort'); + var matchIndex = (monthsShort || months.map(function (_) { + return _.slice(0, 3); + })).indexOf(input) + 1; + + if (matchIndex < 1) { + throw new Error(); + } + + this.month = matchIndex % 12 || matchIndex; + }], + MMMM: [matchWord, function (input) { + var months = getLocalePart('months'); + var matchIndex = months.indexOf(input) + 1; + + if (matchIndex < 1) { + throw new Error(); + } + + this.month = matchIndex % 12 || matchIndex; + }], + Y: [matchSigned, addInput('year')], + YY: [match2, function (input) { + this.year = parseTwoDigitYear(input); + }], + YYYY: [match4, addInput('year')], + Z: zoneExpressions, + ZZ: zoneExpressions +}; + +function correctHours(time) { + var afternoon = time.afternoon; + + if (afternoon !== undefined) { + var hours = time.hours; + + if (afternoon) { + if (hours < 12) { + time.hours += 12; + } + } else if (hours === 12) { + time.hours = 0; + } + + delete time.afternoon; + } +} + +function makeParser(format) { + format = u(format, locale && locale.formats); + var array = format.match(formattingTokens); + var length = array.length; + + for (var i = 0; i < length; i += 1) { + var token = array[i]; + var parseTo = expressions[token]; + var regex = parseTo && parseTo[0]; + var parser = parseTo && parseTo[1]; + + if (parser) { + array[i] = { + regex: regex, + parser: parser + }; + } else { + array[i] = token.replace(/^\[|\]$/g, ''); + } + } + + return function (input) { + var time = {}; + + for (var _i = 0, start = 0; _i < length; _i += 1) { + var _token = array[_i]; + + if (typeof _token === 'string') { + start += _token.length; + } else { + var _regex = _token.regex, + _parser = _token.parser; + var part = input.slice(start); + + var match = _regex.exec(part); + + var value = match[0]; + + _parser.call(time, value); + + input = input.replace(value, ''); + } + } + + correctHours(time); + return time; + }; +} + +var parseFormattedInput = function parseFormattedInput(input, format, utc, dayjs) { + try { + if (['x', 'X'].indexOf(format) > -1) return new Date((format === 'X' ? 1000 : 1) * input); + var parser = makeParser(format); + + var _parser2 = parser(input), + year = _parser2.year, + month = _parser2.month, + day = _parser2.day, + hours = _parser2.hours, + minutes = _parser2.minutes, + seconds = _parser2.seconds, + milliseconds = _parser2.milliseconds, + zone = _parser2.zone, + week = _parser2.week; + + var now = new Date(); + var d = day || (!year && !month ? now.getDate() : 1); + var y = year || now.getFullYear(); + var M = 0; + + if (!(year && !month)) { + M = month > 0 ? month - 1 : now.getMonth(); + } + + var h = hours || 0; + var m = minutes || 0; + var s = seconds || 0; + var ms = milliseconds || 0; + + if (zone) { + return new Date(Date.UTC(y, M, d, h, m, s, ms + zone.offset * 60 * 1000)); + } + + if (utc) { + return new Date(Date.UTC(y, M, d, h, m, s, ms)); + } + + var newDate; + newDate = new Date(y, M, d, h, m, s, ms); + + if (week) { + newDate = dayjs(newDate).week(week).toDate(); + } + + return newDate; + } catch (e) { + return new Date(''); // Invalid Date + } +}; + +export default (function (o, C, d) { + d.p.customParseFormat = true; + + if (o && o.parseTwoDigitYear) { + parseTwoDigitYear = o.parseTwoDigitYear; + } + + var proto = C.prototype; + var oldParse = proto.parse; + + proto.parse = function (cfg) { + var date = cfg.date, + utc = cfg.utc, + args = cfg.args; + this.$u = utc; + var format = args[1]; + + if (typeof format === 'string') { + var isStrictWithoutLocale = args[2] === true; + var isStrictWithLocale = args[3] === true; + var isStrict = isStrictWithoutLocale || isStrictWithLocale; + var pl = args[2]; + + if (isStrictWithLocale) { + pl = args[2]; + } + + locale = this.$locale(); + + if (!isStrictWithoutLocale && pl) { + locale = d.Ls[pl]; + } + + this.$d = parseFormattedInput(date, format, utc, d); + this.init(); + if (pl && pl !== true) this.$L = this.locale(pl).$L; // use != to treat + // input number 1410715640579 and format string '1410715640579' equal + // eslint-disable-next-line eqeqeq + + if (isStrict && date != this.format(format)) { + this.$d = new Date(''); + } // reset global locale to make parallel unit test + + + locale = {}; + } else if (format instanceof Array) { + var len = format.length; + + for (var i = 1; i <= len; i += 1) { + args[1] = format[i - 1]; + var result = d.apply(this, args); + + if (result.isValid()) { + this.$d = result.$d; + this.$L = result.$L; + this.init(); + break; + } + + if (i === len) this.$d = new Date(''); + } + } else { + oldParse.call(this, cfg); + } + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/dayOfYear/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/dayOfYear/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4b9601e7c8964b876a9a2d5c054fdb16eac33c82 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/dayOfYear/index.d.ts @@ -0,0 +1,11 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + dayOfYear(): number + dayOfYear(value: number): Dayjs + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/dayOfYear/index.js b/node_backend/node_modules/dayjs/esm/plugin/dayOfYear/index.js new file mode 100644 index 0000000000000000000000000000000000000000..0cb1158025793138de59c8f788520090a939b4df --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/dayOfYear/index.js @@ -0,0 +1,9 @@ +export default (function (o, c, d) { + var proto = c.prototype; + + proto.dayOfYear = function (input) { + // d(this) is for badMutable + var dayOfYear = Math.round((d(this).startOf('day') - d(this).startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add(input - dayOfYear, 'day'); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/devHelper/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/devHelper/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a17c89631da21938e072443df494e8cc3d409022 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/devHelper/index.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/esm/plugin/devHelper/index.js b/node_backend/node_modules/dayjs/esm/plugin/devHelper/index.js new file mode 100644 index 0000000000000000000000000000000000000000..9e2af82794aaf5ff3008223ecbca940a839e246f --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/devHelper/index.js @@ -0,0 +1,38 @@ +/* eslint-disable no-console */ +export default (function (o, c, d) { + /* istanbul ignore next line */ + if (!process || process.env.NODE_ENV !== 'production') { + var proto = c.prototype; + var oldParse = proto.parse; + + proto.parse = function (cfg) { + var date = cfg.date; + + if (typeof date === 'string' && date.length === 13) { + console.warn("To parse a Unix timestamp like " + date + ", you should pass it as a Number. https://day.js.org/docs/en/parse/unix-timestamp-milliseconds"); + } + + if (typeof date === 'number' && String(date).length === 4) { + console.warn("Guessing you may want to parse the Year " + date + ", you should pass it as a String " + date + ", not a Number. Otherwise, " + date + " will be treated as a Unix timestamp"); + } + + if (cfg.args.length >= 2 && !d.p.customParseFormat) { + console.warn("To parse a date-time string like " + date + " using the given format, you should enable customParseFormat plugin first. https://day.js.org/docs/en/parse/string-format"); + } + + return oldParse.bind(this)(cfg); + }; + + var oldLocale = d.locale; + + d.locale = function (preset, object, isLocal) { + if (typeof object === 'undefined' && typeof preset === 'string') { + if (!d.Ls[preset]) { + console.warn("Guessing you may want to use locale " + preset + ", you have to load it before using it. https://day.js.org/docs/en/i18n/loading-into-nodejs"); + } + } + + return oldLocale(preset, object, isLocal); + }; + } +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/duration/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/duration/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..dc974a544ce3b1a1345d948bf0b4a6d425d24a8c --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/duration/index.d.ts @@ -0,0 +1,88 @@ +import { PluginFunc } from 'dayjs/esm' +import { OpUnitType, UnitTypeLongPlural } from 'dayjs/esm'; + +declare const plugin: PluginFunc +export as namespace plugin; +export = plugin + +declare namespace plugin { + /** + * @deprecated Please use more strict types + */ + type DurationInputType = string | number | object + /** + * @deprecated Please use more strict types + */ + type DurationAddType = number | object | Duration + + type DurationUnitsObjectType = Partial<{ + [unit in Exclude | "weeks"]: number + }>; + type DurationUnitType = Exclude + type CreateDurationType = + ((units: DurationUnitsObjectType) => Duration) + & ((time: number, unit?: DurationUnitType) => Duration) + & ((ISO_8601: string) => Duration) + type AddDurationType = CreateDurationType & ((duration: Duration) => Duration) + + interface Duration { + new (input: string | number | object, unit?: string, locale?: string): Duration + + clone(): Duration + + humanize(withSuffix?: boolean): string + + milliseconds(): number + asMilliseconds(): number + + seconds(): number + asSeconds(): number + + minutes(): number + asMinutes(): number + + hours(): number + asHours(): number + + days(): number + asDays(): number + + weeks(): number + asWeeks(): number + + months(): number + asMonths(): number + + years(): number + asYears(): number + + as(unit: DurationUnitType): number + + get(unit: DurationUnitType): number + + add: AddDurationType + + subtract: AddDurationType + + toJSON(): string + + toISOString(): string + + format(formatStr?: string): string + + locale(locale: string): Duration + } +} + +declare module 'dayjs/esm' { + interface Dayjs { + add(duration: plugin.Duration): Dayjs + subtract(duration: plugin.Duration): Dayjs + } + + /** + * @param time If unit is not present, time treated as number of milliseconds + */ + export const duration: plugin.CreateDurationType; + export function isDuration(d: any): d is plugin.Duration +} \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/duration/index.js b/node_backend/node_modules/dayjs/esm/plugin/duration/index.js new file mode 100644 index 0000000000000000000000000000000000000000..a241d4b202e99c61467639a5756c586e0e50ceb7 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/duration/index.js @@ -0,0 +1,356 @@ +import { MILLISECONDS_A_DAY, MILLISECONDS_A_HOUR, MILLISECONDS_A_MINUTE, MILLISECONDS_A_SECOND, MILLISECONDS_A_WEEK, REGEX_FORMAT } from '../../constant'; +var MILLISECONDS_A_YEAR = MILLISECONDS_A_DAY * 365; +var MILLISECONDS_A_MONTH = MILLISECONDS_A_YEAR / 12; +var durationRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; +var unitToMS = { + years: MILLISECONDS_A_YEAR, + months: MILLISECONDS_A_MONTH, + days: MILLISECONDS_A_DAY, + hours: MILLISECONDS_A_HOUR, + minutes: MILLISECONDS_A_MINUTE, + seconds: MILLISECONDS_A_SECOND, + milliseconds: 1, + weeks: MILLISECONDS_A_WEEK +}; + +var isDuration = function isDuration(d) { + return d instanceof Duration; +}; // eslint-disable-line no-use-before-define + + +var $d; +var $u; + +var wrapper = function wrapper(input, instance, unit) { + return new Duration(input, unit, instance.$l); +}; // eslint-disable-line no-use-before-define + + +var prettyUnit = function prettyUnit(unit) { + return $u.p(unit) + "s"; +}; + +var isNegative = function isNegative(number) { + return number < 0; +}; + +var roundNumber = function roundNumber(number) { + return isNegative(number) ? Math.ceil(number) : Math.floor(number); +}; + +var absolute = function absolute(number) { + return Math.abs(number); +}; + +var getNumberUnitFormat = function getNumberUnitFormat(number, unit) { + if (!number) { + return { + negative: false, + format: '' + }; + } + + if (isNegative(number)) { + return { + negative: true, + format: "" + absolute(number) + unit + }; + } + + return { + negative: false, + format: "" + number + unit + }; +}; + +var Duration = /*#__PURE__*/function () { + function Duration(input, unit, locale) { + var _this = this; + + this.$d = {}; + this.$l = locale; + + if (input === undefined) { + this.$ms = 0; + this.parseFromMilliseconds(); + } + + if (unit) { + return wrapper(input * unitToMS[prettyUnit(unit)], this); + } + + if (typeof input === 'number') { + this.$ms = input; + this.parseFromMilliseconds(); + return this; + } + + if (typeof input === 'object') { + Object.keys(input).forEach(function (k) { + _this.$d[prettyUnit(k)] = input[k]; + }); + this.calMilliseconds(); + return this; + } + + if (typeof input === 'string') { + var d = input.match(durationRegex); + + if (d) { + var properties = d.slice(2); + var numberD = properties.map(function (value) { + return value != null ? Number(value) : 0; + }); + this.$d.years = numberD[0]; + this.$d.months = numberD[1]; + this.$d.weeks = numberD[2]; + this.$d.days = numberD[3]; + this.$d.hours = numberD[4]; + this.$d.minutes = numberD[5]; + this.$d.seconds = numberD[6]; + this.calMilliseconds(); + return this; + } + } + + return this; + } + + var _proto = Duration.prototype; + + _proto.calMilliseconds = function calMilliseconds() { + var _this2 = this; + + this.$ms = Object.keys(this.$d).reduce(function (total, unit) { + return total + (_this2.$d[unit] || 0) * unitToMS[unit]; + }, 0); + }; + + _proto.parseFromMilliseconds = function parseFromMilliseconds() { + var $ms = this.$ms; + this.$d.years = roundNumber($ms / MILLISECONDS_A_YEAR); + $ms %= MILLISECONDS_A_YEAR; + this.$d.months = roundNumber($ms / MILLISECONDS_A_MONTH); + $ms %= MILLISECONDS_A_MONTH; + this.$d.days = roundNumber($ms / MILLISECONDS_A_DAY); + $ms %= MILLISECONDS_A_DAY; + this.$d.hours = roundNumber($ms / MILLISECONDS_A_HOUR); + $ms %= MILLISECONDS_A_HOUR; + this.$d.minutes = roundNumber($ms / MILLISECONDS_A_MINUTE); + $ms %= MILLISECONDS_A_MINUTE; + this.$d.seconds = roundNumber($ms / MILLISECONDS_A_SECOND); + $ms %= MILLISECONDS_A_SECOND; + this.$d.milliseconds = $ms; + }; + + _proto.toISOString = function toISOString() { + var Y = getNumberUnitFormat(this.$d.years, 'Y'); + var M = getNumberUnitFormat(this.$d.months, 'M'); + var days = +this.$d.days || 0; + + if (this.$d.weeks) { + days += this.$d.weeks * 7; + } + + var D = getNumberUnitFormat(days, 'D'); + var H = getNumberUnitFormat(this.$d.hours, 'H'); + var m = getNumberUnitFormat(this.$d.minutes, 'M'); + var seconds = this.$d.seconds || 0; + + if (this.$d.milliseconds) { + seconds += this.$d.milliseconds / 1000; + seconds = Math.round(seconds * 1000) / 1000; + } + + var S = getNumberUnitFormat(seconds, 'S'); + var negativeMode = Y.negative || M.negative || D.negative || H.negative || m.negative || S.negative; + var T = H.format || m.format || S.format ? 'T' : ''; + var P = negativeMode ? '-' : ''; + var result = P + "P" + Y.format + M.format + D.format + T + H.format + m.format + S.format; + return result === 'P' || result === '-P' ? 'P0D' : result; + }; + + _proto.toJSON = function toJSON() { + return this.toISOString(); + }; + + _proto.format = function format(formatStr) { + var str = formatStr || 'YYYY-MM-DDTHH:mm:ss'; + var matches = { + Y: this.$d.years, + YY: $u.s(this.$d.years, 2, '0'), + YYYY: $u.s(this.$d.years, 4, '0'), + M: this.$d.months, + MM: $u.s(this.$d.months, 2, '0'), + D: this.$d.days, + DD: $u.s(this.$d.days, 2, '0'), + H: this.$d.hours, + HH: $u.s(this.$d.hours, 2, '0'), + m: this.$d.minutes, + mm: $u.s(this.$d.minutes, 2, '0'), + s: this.$d.seconds, + ss: $u.s(this.$d.seconds, 2, '0'), + SSS: $u.s(this.$d.milliseconds, 3, '0') + }; + return str.replace(REGEX_FORMAT, function (match, $1) { + return $1 || String(matches[match]); + }); + }; + + _proto.as = function as(unit) { + return this.$ms / unitToMS[prettyUnit(unit)]; + }; + + _proto.get = function get(unit) { + var base = this.$ms; + var pUnit = prettyUnit(unit); + + if (pUnit === 'milliseconds') { + base %= 1000; + } else if (pUnit === 'weeks') { + base = roundNumber(base / unitToMS[pUnit]); + } else { + base = this.$d[pUnit]; + } + + return base || 0; // a === 0 will be true on both 0 and -0 + }; + + _proto.add = function add(input, unit, isSubtract) { + var another; + + if (unit) { + another = input * unitToMS[prettyUnit(unit)]; + } else if (isDuration(input)) { + another = input.$ms; + } else { + another = wrapper(input, this).$ms; + } + + return wrapper(this.$ms + another * (isSubtract ? -1 : 1), this); + }; + + _proto.subtract = function subtract(input, unit) { + return this.add(input, unit, true); + }; + + _proto.locale = function locale(l) { + var that = this.clone(); + that.$l = l; + return that; + }; + + _proto.clone = function clone() { + return wrapper(this.$ms, this); + }; + + _proto.humanize = function humanize(withSuffix) { + return $d().add(this.$ms, 'ms').locale(this.$l).fromNow(!withSuffix); + }; + + _proto.valueOf = function valueOf() { + return this.asMilliseconds(); + }; + + _proto.milliseconds = function milliseconds() { + return this.get('milliseconds'); + }; + + _proto.asMilliseconds = function asMilliseconds() { + return this.as('milliseconds'); + }; + + _proto.seconds = function seconds() { + return this.get('seconds'); + }; + + _proto.asSeconds = function asSeconds() { + return this.as('seconds'); + }; + + _proto.minutes = function minutes() { + return this.get('minutes'); + }; + + _proto.asMinutes = function asMinutes() { + return this.as('minutes'); + }; + + _proto.hours = function hours() { + return this.get('hours'); + }; + + _proto.asHours = function asHours() { + return this.as('hours'); + }; + + _proto.days = function days() { + return this.get('days'); + }; + + _proto.asDays = function asDays() { + return this.as('days'); + }; + + _proto.weeks = function weeks() { + return this.get('weeks'); + }; + + _proto.asWeeks = function asWeeks() { + return this.as('weeks'); + }; + + _proto.months = function months() { + return this.get('months'); + }; + + _proto.asMonths = function asMonths() { + return this.as('months'); + }; + + _proto.years = function years() { + return this.get('years'); + }; + + _proto.asYears = function asYears() { + return this.as('years'); + }; + + return Duration; +}(); + +var manipulateDuration = function manipulateDuration(date, duration, k) { + return date.add(duration.years() * k, 'y').add(duration.months() * k, 'M').add(duration.days() * k, 'd').add(duration.hours() * k, 'h').add(duration.minutes() * k, 'm').add(duration.seconds() * k, 's').add(duration.milliseconds() * k, 'ms'); +}; + +export default (function (option, Dayjs, dayjs) { + $d = dayjs; + $u = dayjs().$utils(); + + dayjs.duration = function (input, unit) { + var $l = dayjs.locale(); + return wrapper(input, { + $l: $l + }, unit); + }; + + dayjs.isDuration = isDuration; + var oldAdd = Dayjs.prototype.add; + var oldSubtract = Dayjs.prototype.subtract; + + Dayjs.prototype.add = function (value, unit) { + if (isDuration(value)) { + return manipulateDuration(this, value, 1); + } + + return oldAdd.bind(this)(value, unit); + }; + + Dayjs.prototype.subtract = function (value, unit) { + if (isDuration(value)) { + return manipulateDuration(this, value, -1); + } + + return oldSubtract.bind(this)(value, unit); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isBetween/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isBetween/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1c62711c76a2c1b8bed4ce06122ae198eefc3919 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isBetween/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc, ConfigType, OpUnitType } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + isBetween(a: ConfigType, b: ConfigType, c?: OpUnitType | null, d?: '()' | '[]' | '[)' | '(]'): boolean + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isBetween/index.js b/node_backend/node_modules/dayjs/esm/plugin/isBetween/index.js new file mode 100644 index 0000000000000000000000000000000000000000..2182a8950c272897dfa6637ab626b93eeed9680e --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isBetween/index.js @@ -0,0 +1,10 @@ +export default (function (o, c, d) { + c.prototype.isBetween = function (a, b, u, i) { + var dA = d(a); + var dB = d(b); + i = i || '()'; + var dAi = i[0] === '('; + var dBi = i[1] === ')'; + return (dAi ? this.isAfter(dA, u) : !this.isBefore(dA, u)) && (dBi ? this.isBefore(dB, u) : !this.isAfter(dB, u)) || (dAi ? this.isBefore(dA, u) : !this.isAfter(dA, u)) && (dBi ? this.isAfter(dB, u) : !this.isBefore(dB, u)); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isLeapYear/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isLeapYear/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..627ec5a8611b488e97b52a3ac96218d70e5c0cd4 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isLeapYear/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + isLeapYear(): boolean + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isLeapYear/index.js b/node_backend/node_modules/dayjs/esm/plugin/isLeapYear/index.js new file mode 100644 index 0000000000000000000000000000000000000000..bf1309d0181b71a518c39e5d3b8a9d3a2d553566 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isLeapYear/index.js @@ -0,0 +1,7 @@ +export default (function (o, c) { + var proto = c.prototype; + + proto.isLeapYear = function () { + return this.$y % 4 === 0 && this.$y % 100 !== 0 || this.$y % 400 === 0; + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isMoment/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isMoment/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6e3a69f135eccf3c0ea18df3aee68e89d7061f15 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isMoment/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + + export function isMoment(input: any): boolean + +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isMoment/index.js b/node_backend/node_modules/dayjs/esm/plugin/isMoment/index.js new file mode 100644 index 0000000000000000000000000000000000000000..48c8a895e1b13c62a7fb061de5495e88daae881e --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isMoment/index.js @@ -0,0 +1,5 @@ +export default (function (o, c, f) { + f.isMoment = function (input) { + return f.isDayjs(input); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isSameOrAfter/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isSameOrAfter/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7b6d239693279b005db6e964e9d51eeabbf403a8 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isSameOrAfter/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc, ConfigType, OpUnitType } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + isSameOrAfter(date?: ConfigType, unit?: OpUnitType): boolean + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isSameOrAfter/index.js b/node_backend/node_modules/dayjs/esm/plugin/isSameOrAfter/index.js new file mode 100644 index 0000000000000000000000000000000000000000..6a5c56f0e6561a9495a5cdd049a392817a5641cf --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isSameOrAfter/index.js @@ -0,0 +1,5 @@ +export default (function (o, c) { + c.prototype.isSameOrAfter = function (that, units) { + return this.isSame(that, units) || this.isAfter(that, units); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isSameOrBefore/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isSameOrBefore/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7ec009f41f615e727b80aacf5d3ef8bfbe509ecf --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isSameOrBefore/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc, ConfigType, OpUnitType } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + isSameOrBefore(date?: ConfigType, unit?: OpUnitType): boolean + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isSameOrBefore/index.js b/node_backend/node_modules/dayjs/esm/plugin/isSameOrBefore/index.js new file mode 100644 index 0000000000000000000000000000000000000000..18d526a499775f040c4a7055da283f7f74e9574b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isSameOrBefore/index.js @@ -0,0 +1,5 @@ +export default (function (o, c) { + c.prototype.isSameOrBefore = function (that, units) { + return this.isSame(that, units) || this.isBefore(that, units); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isToday/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isToday/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8d55da8d009d29ebd7c2a6ab6f79ba5a62b39140 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isToday/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + isToday(): boolean + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isToday/index.js b/node_backend/node_modules/dayjs/esm/plugin/isToday/index.js new file mode 100644 index 0000000000000000000000000000000000000000..93b36c8017543bcadbc16dbcd06d6c82dcc38d1d --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isToday/index.js @@ -0,0 +1,9 @@ +export default (function (o, c, d) { + var proto = c.prototype; + + proto.isToday = function () { + var comparisonTemplate = 'YYYY-MM-DD'; + var now = d(); + return this.format(comparisonTemplate) === now.format(comparisonTemplate); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isTomorrow/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isTomorrow/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..76522375ff9dfd5e72482409c3596bd0f167786b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isTomorrow/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + isTomorrow(): boolean + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isTomorrow/index.js b/node_backend/node_modules/dayjs/esm/plugin/isTomorrow/index.js new file mode 100644 index 0000000000000000000000000000000000000000..8cc7238de3e55e061c036c287faeae1a285a80c6 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isTomorrow/index.js @@ -0,0 +1,9 @@ +export default (function (o, c, d) { + var proto = c.prototype; + + proto.isTomorrow = function () { + var comparisonTemplate = 'YYYY-MM-DD'; + var tomorrow = d().add(1, 'day'); + return this.format(comparisonTemplate) === tomorrow.format(comparisonTemplate); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isYesterday/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isYesterday/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..f4370dc6db1d384ccff12142248f383c67ed1557 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isYesterday/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + isYesterday(): boolean + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isYesterday/index.js b/node_backend/node_modules/dayjs/esm/plugin/isYesterday/index.js new file mode 100644 index 0000000000000000000000000000000000000000..fa55373c4595130f413305a63d5558d9815bcec5 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isYesterday/index.js @@ -0,0 +1,9 @@ +export default (function (o, c, d) { + var proto = c.prototype; + + proto.isYesterday = function () { + var comparisonTemplate = 'YYYY-MM-DD'; + var yesterday = d().subtract(1, 'day'); + return this.format(comparisonTemplate) === yesterday.format(comparisonTemplate); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isoWeek/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isoWeek/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6e6a75a7210790d044b9dfd918ca7f66d6a8e5bd --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isoWeek/index.d.ts @@ -0,0 +1,27 @@ +import { PluginFunc, OpUnitType, ConfigType } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +type ISOUnitType = OpUnitType | 'isoWeek'; + +declare module 'dayjs/esm' { + interface Dayjs { + isoWeekYear(): number + isoWeek(): number + isoWeek(value: number): Dayjs + + isoWeekday(): number + isoWeekday(value: number): Dayjs + + startOf(unit: ISOUnitType): Dayjs + + endOf(unit: ISOUnitType): Dayjs + + isSame(date?: ConfigType, unit?: ISOUnitType): boolean + + isBefore(date?: ConfigType, unit?: ISOUnitType): boolean + + isAfter(date?: ConfigType, unit?: ISOUnitType): boolean + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isoWeek/index.js b/node_backend/node_modules/dayjs/esm/plugin/isoWeek/index.js new file mode 100644 index 0000000000000000000000000000000000000000..289ea7ca1e4692fb45271d340365cf1dca8b6e52 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isoWeek/index.js @@ -0,0 +1,57 @@ +import { D, W, Y } from '../../constant'; +var isoWeekPrettyUnit = 'isoweek'; +export default (function (o, c, d) { + var getYearFirstThursday = function getYearFirstThursday(year, isUtc) { + var yearFirstDay = (isUtc ? d.utc : d)().year(year).startOf(Y); + var addDiffDays = 4 - yearFirstDay.isoWeekday(); + + if (yearFirstDay.isoWeekday() > 4) { + addDiffDays += 7; + } + + return yearFirstDay.add(addDiffDays, D); + }; + + var getCurrentWeekThursday = function getCurrentWeekThursday(ins) { + return ins.add(4 - ins.isoWeekday(), D); + }; + + var proto = c.prototype; + + proto.isoWeekYear = function () { + var nowWeekThursday = getCurrentWeekThursday(this); + return nowWeekThursday.year(); + }; + + proto.isoWeek = function (week) { + if (!this.$utils().u(week)) { + return this.add((week - this.isoWeek()) * 7, D); + } + + var nowWeekThursday = getCurrentWeekThursday(this); + var diffWeekThursday = getYearFirstThursday(this.isoWeekYear(), this.$u); + return nowWeekThursday.diff(diffWeekThursday, W) + 1; + }; + + proto.isoWeekday = function (week) { + if (!this.$utils().u(week)) { + return this.day(this.day() % 7 ? week : week - 7); + } + + return this.day() || 7; + }; + + var oldStartOf = proto.startOf; + + proto.startOf = function (units, startOf) { + var utils = this.$utils(); + var isStartOf = !utils.u(startOf) ? startOf : true; + var unit = utils.p(units); + + if (unit === isoWeekPrettyUnit) { + return isStartOf ? this.date(this.date() - (this.isoWeekday() - 1)).startOf('day') : this.date(this.date() - 1 - (this.isoWeekday() - 1) + 7).endOf('day'); + } + + return oldStartOf.bind(this)(units, startOf); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/isoWeeksInYear/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/isoWeeksInYear/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..986360fae9538aa24dd0d9dfab7a4c9c96751b1d --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isoWeeksInYear/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + isoWeeksInYear(): number + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/isoWeeksInYear/index.js b/node_backend/node_modules/dayjs/esm/plugin/isoWeeksInYear/index.js new file mode 100644 index 0000000000000000000000000000000000000000..71618942a5a941355f393a41412d0203f6bd6875 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/isoWeeksInYear/index.js @@ -0,0 +1,15 @@ +export default (function (o, c) { + var proto = c.prototype; + + proto.isoWeeksInYear = function () { + var isLeapYear = this.isLeapYear(); + var last = this.endOf('y'); + var day = last.day(); + + if (day === 4 || isLeapYear && day === 5) { + return 53; + } + + return 52; + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/localeData/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/localeData/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f8762eda4223d3e08edb80c326ec8a17dc281cf --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/localeData/index.d.ts @@ -0,0 +1,44 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + type WeekdayNames = [string, string, string, string, string, string, string]; + type MonthNames = [string, string, string, string, string, string, string, string, string, string, string, string]; + + interface InstanceLocaleDataReturn { + firstDayOfWeek(): number; + weekdays(instance?: Dayjs): WeekdayNames; + weekdaysShort(instance?: Dayjs): WeekdayNames; + weekdaysMin(instance?: Dayjs): WeekdayNames; + months(instance?: Dayjs): MonthNames; + monthsShort(instance?: Dayjs): MonthNames; + longDateFormat(format: string): string; + meridiem(hour?: number, minute?: number, isLower?: boolean): string; + ordinal(n: number): string + } + + interface GlobalLocaleDataReturn { + firstDayOfWeek(): number; + weekdays(): WeekdayNames; + weekdaysShort(): WeekdayNames; + weekdaysMin(): WeekdayNames; + months(): MonthNames; + monthsShort(): MonthNames; + longDateFormat(format: string): string; + meridiem(hour?: number, minute?: number, isLower?: boolean): string; + ordinal(n: number): string + } + + interface Dayjs { + localeData(): InstanceLocaleDataReturn; + } + + export function weekdays(localOrder?: boolean): WeekdayNames; + export function weekdaysShort(localOrder?: boolean): WeekdayNames; + export function weekdaysMin(localOrder?: boolean): WeekdayNames; + export function monthsShort(): MonthNames; + export function months(): MonthNames; + export function localeData(): GlobalLocaleDataReturn; +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/localeData/index.js b/node_backend/node_modules/dayjs/esm/plugin/localeData/index.js new file mode 100644 index 0000000000000000000000000000000000000000..c48d92cbc6f8d0da3b7688f462727e911e010b51 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/localeData/index.js @@ -0,0 +1,114 @@ +import { t } from '../localizedFormat/utils'; +export default (function (o, c, dayjs) { + // locale needed later + var proto = c.prototype; + + var getLocalePart = function getLocalePart(part) { + return part && (part.indexOf ? part : part.s); + }; + + var getShort = function getShort(ins, target, full, num, localeOrder) { + var locale = ins.name ? ins : ins.$locale(); + var targetLocale = getLocalePart(locale[target]); + var fullLocale = getLocalePart(locale[full]); + var result = targetLocale || fullLocale.map(function (f) { + return f.slice(0, num); + }); + if (!localeOrder) return result; + var weekStart = locale.weekStart; + return result.map(function (_, index) { + return result[(index + (weekStart || 0)) % 7]; + }); + }; + + var getDayjsLocaleObject = function getDayjsLocaleObject() { + return dayjs.Ls[dayjs.locale()]; + }; + + var getLongDateFormat = function getLongDateFormat(l, format) { + return l.formats[format] || t(l.formats[format.toUpperCase()]); + }; + + var localeData = function localeData() { + var _this = this; + + return { + months: function months(instance) { + return instance ? instance.format('MMMM') : getShort(_this, 'months'); + }, + monthsShort: function monthsShort(instance) { + return instance ? instance.format('MMM') : getShort(_this, 'monthsShort', 'months', 3); + }, + firstDayOfWeek: function firstDayOfWeek() { + return _this.$locale().weekStart || 0; + }, + weekdays: function weekdays(instance) { + return instance ? instance.format('dddd') : getShort(_this, 'weekdays'); + }, + weekdaysMin: function weekdaysMin(instance) { + return instance ? instance.format('dd') : getShort(_this, 'weekdaysMin', 'weekdays', 2); + }, + weekdaysShort: function weekdaysShort(instance) { + return instance ? instance.format('ddd') : getShort(_this, 'weekdaysShort', 'weekdays', 3); + }, + longDateFormat: function longDateFormat(format) { + return getLongDateFormat(_this.$locale(), format); + }, + meridiem: this.$locale().meridiem, + ordinal: this.$locale().ordinal + }; + }; + + proto.localeData = function () { + return localeData.bind(this)(); + }; + + dayjs.localeData = function () { + var localeObject = getDayjsLocaleObject(); + return { + firstDayOfWeek: function firstDayOfWeek() { + return localeObject.weekStart || 0; + }, + weekdays: function weekdays() { + return dayjs.weekdays(); + }, + weekdaysShort: function weekdaysShort() { + return dayjs.weekdaysShort(); + }, + weekdaysMin: function weekdaysMin() { + return dayjs.weekdaysMin(); + }, + months: function months() { + return dayjs.months(); + }, + monthsShort: function monthsShort() { + return dayjs.monthsShort(); + }, + longDateFormat: function longDateFormat(format) { + return getLongDateFormat(localeObject, format); + }, + meridiem: localeObject.meridiem, + ordinal: localeObject.ordinal + }; + }; + + dayjs.months = function () { + return getShort(getDayjsLocaleObject(), 'months'); + }; + + dayjs.monthsShort = function () { + return getShort(getDayjsLocaleObject(), 'monthsShort', 'months', 3); + }; + + dayjs.weekdays = function (localeOrder) { + return getShort(getDayjsLocaleObject(), 'weekdays', null, null, localeOrder); + }; + + dayjs.weekdaysShort = function (localeOrder) { + return getShort(getDayjsLocaleObject(), 'weekdaysShort', 'weekdays', 3, localeOrder); + }; + + dayjs.weekdaysMin = function (localeOrder) { + return getShort(getDayjsLocaleObject(), 'weekdaysMin', 'weekdays', 2, localeOrder); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/localizedFormat/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/localizedFormat/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a17c89631da21938e072443df494e8cc3d409022 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/localizedFormat/index.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/esm/plugin/localizedFormat/index.js b/node_backend/node_modules/dayjs/esm/plugin/localizedFormat/index.js new file mode 100644 index 0000000000000000000000000000000000000000..9defb1f4124f27bd6eda83a6112a95c2b205bd49 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/localizedFormat/index.js @@ -0,0 +1,20 @@ +import { FORMAT_DEFAULT } from '../../constant'; +import { u, englishFormats } from './utils'; +export default (function (o, c, d) { + var proto = c.prototype; + var oldFormat = proto.format; + d.en.formats = englishFormats; + + proto.format = function (formatStr) { + if (formatStr === void 0) { + formatStr = FORMAT_DEFAULT; + } + + var _this$$locale = this.$locale(), + _this$$locale$formats = _this$$locale.formats, + formats = _this$$locale$formats === void 0 ? {} : _this$$locale$formats; + + var result = u(formatStr, formats); + return oldFormat.call(this, result); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/localizedFormat/utils.js b/node_backend/node_modules/dayjs/esm/plugin/localizedFormat/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..1f48eff1b979f09c67f5c419b8b7845cdae40c97 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/localizedFormat/utils.js @@ -0,0 +1,20 @@ +// eslint-disable-next-line import/prefer-default-export +export var t = function t(format) { + return format.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function (_, a, b) { + return a || b.slice(1); + }); +}; +export var englishFormats = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A' +}; +export var u = function u(formatStr, formats) { + return formatStr.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, function (_, a, b) { + var B = b && b.toUpperCase(); + return a || formats[b] || englishFormats[b] || t(formats[B]); + }); +}; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/minMax/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/minMax/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9b2fb3f371e8dedf7070b4e1ff980576e6e8d5a4 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/minMax/index.d.ts @@ -0,0 +1,22 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + export function max(dayjs: [Dayjs, ...Dayjs[]]): Dayjs + export function max(noDates: never[]): null + export function max(maybeDates: Dayjs[]): Dayjs | null + + export function max(...dayjs: [Dayjs, ...Dayjs[]]): Dayjs + export function max(...noDates: never[]): null + export function max(...maybeDates: Dayjs[]): Dayjs | null + + export function min(dayjs: [Dayjs, ...Dayjs[]]): Dayjs + export function min(noDates: never[]): null + export function min(maybeDates: Dayjs[]): Dayjs | null + + export function min(...dayjs: [Dayjs, ...Dayjs[]]): Dayjs + export function min(...noDates: never[]): null + export function min(...maybeDates: Dayjs[]): Dayjs | null +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/minMax/index.js b/node_backend/node_modules/dayjs/esm/plugin/minMax/index.js new file mode 100644 index 0000000000000000000000000000000000000000..0fd68e9c87846e2f4e15464b17a8427f5f61b7e9 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/minMax/index.js @@ -0,0 +1,39 @@ +export default (function (o, c, d) { + var sortBy = function sortBy(method, dates) { + if (!dates || !dates.length || dates.length === 1 && !dates[0] || dates.length === 1 && Array.isArray(dates[0]) && !dates[0].length) { + return null; + } + + if (dates.length === 1 && dates[0].length > 0) { + var _dates = dates; + dates = _dates[0]; + } + + dates = dates.filter(function (date) { + return date; + }); + var result; + var _dates2 = dates; + result = _dates2[0]; + + for (var i = 1; i < dates.length; i += 1) { + if (!dates[i].isValid() || dates[i][method](result)) { + result = dates[i]; + } + } + + return result; + }; + + d.max = function () { + var args = [].slice.call(arguments, 0); // eslint-disable-line prefer-rest-params + + return sortBy('isAfter', args); + }; + + d.min = function () { + var args = [].slice.call(arguments, 0); // eslint-disable-line prefer-rest-params + + return sortBy('isBefore', args); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/negativeYear/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/negativeYear/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8112bdc1a03b8f9b90d1e98b592b5425af29486d --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/negativeYear/index.d.ts @@ -0,0 +1,4 @@ +import {PluginFunc} from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/negativeYear/index.js b/node_backend/node_modules/dayjs/esm/plugin/negativeYear/index.js new file mode 100644 index 0000000000000000000000000000000000000000..5b83af3999a7c98e8886873058b4fd88925111ea --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/negativeYear/index.js @@ -0,0 +1,36 @@ +export default (function (_, c, dayjs) { + var proto = c.prototype; + + var parseDate = function parseDate(cfg) { + var date = cfg.date, + utc = cfg.utc; + + if (typeof date === 'string' && date.charAt(0) === '-') { + var normalData = date.slice(1); + var newDate = dayjs(normalData); + + if (utc) { + newDate = dayjs.utc(normalData); + } else { + newDate = dayjs(normalData); + } + + var fullYear = newDate.year(); + + if (date.indexOf("-" + fullYear) !== -1) { + return dayjs(newDate).subtract(fullYear * 2, 'year').toDate(); + } + + return date; + } + + return date; + }; + + var oldParse = proto.parse; + + proto.parse = function (cfg) { + cfg.date = parseDate.bind(this)(cfg); + oldParse.bind(this)(cfg); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/objectSupport/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/objectSupport/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..03b8b7c8bbca536116cf290de4c6c2b4f536bf20 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/objectSupport/index.d.ts @@ -0,0 +1,48 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + set(argument: object): Dayjs + add(argument: object): Dayjs + subtract(argument: object): Dayjs + } + + interface ConfigTypeMap { + objectSupport: { + years?: number | string; + year?: number | string; + y?: number | string; + + months?: number | string; + month?: number | string; + M?: number | string; + + days?: number | string; + day?: number | string; + d?: number | string; + + dates?: number | string; + date?: number | string; + D?: number | string; + + hours?: number | string; + hour?: number | string; + h?: number | string; + + minutes?: number | string; + minute?: number | string; + m?: number | string; + + seconds?: number | string; + second?: number | string; + s?: number | string; + + milliseconds?: number | string; + millisecond?: number | string; + ms?: number | string; + } + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/objectSupport/index.js b/node_backend/node_modules/dayjs/esm/plugin/objectSupport/index.js new file mode 100644 index 0000000000000000000000000000000000000000..61636e7662e2284941ac940b5486e0004f6015d5 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/objectSupport/index.js @@ -0,0 +1,97 @@ +export default (function (o, c, dayjs) { + var proto = c.prototype; + + var isObject = function isObject(obj) { + return obj !== null && !(obj instanceof Date) && !(obj instanceof Array) && !proto.$utils().u(obj) && obj.constructor.name === 'Object'; + }; + + var prettyUnit = function prettyUnit(u) { + var unit = proto.$utils().p(u); + return unit === 'date' ? 'day' : unit; + }; + + var parseDate = function parseDate(cfg) { + var date = cfg.date, + utc = cfg.utc; + var $d = {}; + + if (isObject(date)) { + if (!Object.keys(date).length) { + return new Date(); + } + + var now = utc ? dayjs.utc() : dayjs(); + Object.keys(date).forEach(function (k) { + $d[prettyUnit(k)] = date[k]; + }); + var d = $d.day || (!$d.year && !($d.month >= 0) ? now.date() : 1); + var y = $d.year || now.year(); + var M = $d.month >= 0 ? $d.month : !$d.year && !$d.day ? now.month() : 0; // eslint-disable-line no-nested-ternary,max-len + + var h = $d.hour || 0; + var m = $d.minute || 0; + var s = $d.second || 0; + var ms = $d.millisecond || 0; + + if (utc) { + return new Date(Date.UTC(y, M, d, h, m, s, ms)); + } + + return new Date(y, M, d, h, m, s, ms); + } + + return date; + }; + + var oldParse = proto.parse; + + proto.parse = function (cfg) { + cfg.date = parseDate.bind(this)(cfg); + oldParse.bind(this)(cfg); + }; + + var oldSet = proto.set; + var oldAdd = proto.add; + var oldSubtract = proto.subtract; + + var callObject = function callObject(call, argument, string, offset) { + if (offset === void 0) { + offset = 1; + } + + var keys = Object.keys(argument); + var chain = this; + keys.forEach(function (key) { + chain = call.bind(chain)(argument[key] * offset, key); + }); + return chain; + }; + + proto.set = function (unit, value) { + value = value === undefined ? unit : value; + + if (unit.constructor.name === 'Object') { + return callObject.bind(this)(function (i, s) { + return oldSet.bind(this)(s, i); + }, value, unit); + } + + return oldSet.bind(this)(unit, value); + }; + + proto.add = function (value, unit) { + if (value.constructor.name === 'Object') { + return callObject.bind(this)(oldAdd, value, unit); + } + + return oldAdd.bind(this)(value, unit); + }; + + proto.subtract = function (value, unit) { + if (value.constructor.name === 'Object') { + return callObject.bind(this)(oldAdd, value, unit, -1); + } + + return oldSubtract.bind(this)(value, unit); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/pluralGetSet/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/pluralGetSet/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7ef7167c97fd51e1955649905e160a6690f456c6 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/pluralGetSet/index.d.ts @@ -0,0 +1,44 @@ +import { PluginFunc, UnitType, ConfigType } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + years(): number + + years(value: number): Dayjs + + months(): number + + months(value: number): Dayjs + + dates(): number + + dates(value: number): Dayjs + + weeks(): number + + weeks(value: number): Dayjs + + days(): number + + days(value: number): Dayjs + + hours(): number + + hours(value: number): Dayjs + + minutes(): number + + minutes(value: number): Dayjs + + seconds(): number + + seconds(value: number): Dayjs + + milliseconds(): number + + milliseconds(value: number): Dayjs + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/pluralGetSet/index.js b/node_backend/node_modules/dayjs/esm/plugin/pluralGetSet/index.js new file mode 100644 index 0000000000000000000000000000000000000000..d8214d641d12dbf4f02d915cb3cef469fc0ce801 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/pluralGetSet/index.js @@ -0,0 +1,7 @@ +export default (function (o, c) { + var proto = c.prototype; + var pluralAliases = ['milliseconds', 'seconds', 'minutes', 'hours', 'days', 'weeks', 'isoWeeks', 'months', 'quarters', 'years', 'dates']; + pluralAliases.forEach(function (alias) { + proto[alias] = proto[alias.replace(/s$/, '')]; + }); +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/preParsePostFormat/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/preParsePostFormat/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a17c89631da21938e072443df494e8cc3d409022 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/preParsePostFormat/index.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/esm/plugin/preParsePostFormat/index.js b/node_backend/node_modules/dayjs/esm/plugin/preParsePostFormat/index.js new file mode 100644 index 0000000000000000000000000000000000000000..7654ccbe94f45a1aa1385bf6ca6255104c336ef6 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/preParsePostFormat/index.js @@ -0,0 +1,40 @@ +// Plugin template from https://day.js.org/docs/en/plugin/plugin +export default (function (option, dayjsClass) { + var oldParse = dayjsClass.prototype.parse; + + dayjsClass.prototype.parse = function (cfg) { + if (typeof cfg.date === 'string') { + var locale = this.$locale(); + cfg.date = locale && locale.preparse ? locale.preparse(cfg.date) : cfg.date; + } // original parse result + + + return oldParse.bind(this)(cfg); + }; // // overriding existing API + // // e.g. extend dayjs().format() + + + var oldFormat = dayjsClass.prototype.format; + + dayjsClass.prototype.format = function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // original format result + var result = oldFormat.call.apply(oldFormat, [this].concat(args)); // return modified result + + var locale = this.$locale(); + return locale && locale.postformat ? locale.postformat(result) : result; + }; + + var oldFromTo = dayjsClass.prototype.fromToBase; + + if (oldFromTo) { + dayjsClass.prototype.fromToBase = function (input, withoutSuffix, instance, isFrom) { + var locale = this.$locale() || instance.$locale(); // original format result + + return oldFromTo.call(this, input, withoutSuffix, instance, isFrom, locale && locale.postformat); + }; + } +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/quarterOfYear/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/quarterOfYear/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..37691c1163dbdb3f6da8448aace870d75277dd5a --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/quarterOfYear/index.d.ts @@ -0,0 +1,26 @@ +import { PluginFunc, ConfigType, QUnitType, OpUnitType } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + quarter(): number + + quarter(quarter: number): Dayjs + + add(value: number, unit: QUnitType): Dayjs + + subtract(value: number, unit: QUnitType): Dayjs + + startOf(unit: QUnitType | OpUnitType): Dayjs + + endOf(unit: QUnitType | OpUnitType): Dayjs + + isSame(date?: ConfigType, unit?: QUnitType): boolean + + isBefore(date?: ConfigType, unit?: QUnitType): boolean + + isAfter(date?: ConfigType, unit?: QUnitType): boolean + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/quarterOfYear/index.js b/node_backend/node_modules/dayjs/esm/plugin/quarterOfYear/index.js new file mode 100644 index 0000000000000000000000000000000000000000..e376889e5904ca65e408e58d98c860d27b2f3ecc --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/quarterOfYear/index.js @@ -0,0 +1,41 @@ +import { Q, M, D } from '../../constant'; +export default (function (o, c) { + var proto = c.prototype; + + proto.quarter = function (quarter) { + if (!this.$utils().u(quarter)) { + return this.month(this.month() % 3 + (quarter - 1) * 3); + } + + return Math.ceil((this.month() + 1) / 3); + }; + + var oldAdd = proto.add; + + proto.add = function (number, units) { + number = Number(number); // eslint-disable-line no-param-reassign + + var unit = this.$utils().p(units); + + if (unit === Q) { + return this.add(number * 3, M); + } + + return oldAdd.bind(this)(number, units); + }; + + var oldStartOf = proto.startOf; + + proto.startOf = function (units, startOf) { + var utils = this.$utils(); + var isStartOf = !utils.u(startOf) ? startOf : true; + var unit = utils.p(units); + + if (unit === Q) { + var quarter = this.quarter() - 1; + return isStartOf ? this.month(quarter * 3).startOf(M).startOf(D) : this.month(quarter * 3 + 2).endOf(M).endOf(D); + } + + return oldStartOf.bind(this)(units, startOf); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/relativeTime/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/relativeTime/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e1b17cf8b2c3a7a005173f760d1acff25c2c0774 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/relativeTime/index.d.ts @@ -0,0 +1,24 @@ +import { PluginFunc, ConfigType } from 'dayjs/esm' + +declare interface RelativeTimeThreshold { + l: string + r?: number + d?: string +} + +declare interface RelativeTimeOptions { + rounding?: (num: number) => number + thresholds?: RelativeTimeThreshold[] +} + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + fromNow(withoutSuffix?: boolean): string + from(compared: ConfigType, withoutSuffix?: boolean): string + toNow(withoutSuffix?: boolean): string + to(compared: ConfigType, withoutSuffix?: boolean): string + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/relativeTime/index.js b/node_backend/node_modules/dayjs/esm/plugin/relativeTime/index.js new file mode 100644 index 0000000000000000000000000000000000000000..88fdbbe833470cc7c76dad3b62ca8f7befc27091 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/relativeTime/index.js @@ -0,0 +1,130 @@ +import * as C from '../../constant'; +export default (function (o, c, d) { + o = o || {}; + var proto = c.prototype; + var relObj = { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + }; + d.en.relativeTime = relObj; + + proto.fromToBase = function (input, withoutSuffix, instance, isFrom, postFormat) { + var loc = instance.$locale().relativeTime || relObj; + var T = o.thresholds || [{ + l: 's', + r: 44, + d: C.S + }, { + l: 'm', + r: 89 + }, { + l: 'mm', + r: 44, + d: C.MIN + }, { + l: 'h', + r: 89 + }, { + l: 'hh', + r: 21, + d: C.H + }, { + l: 'd', + r: 35 + }, { + l: 'dd', + r: 25, + d: C.D + }, { + l: 'M', + r: 45 + }, { + l: 'MM', + r: 10, + d: C.M + }, { + l: 'y', + r: 17 + }, { + l: 'yy', + d: C.Y + }]; + var Tl = T.length; + var result; + var out; + var isFuture; + + for (var i = 0; i < Tl; i += 1) { + var t = T[i]; + + if (t.d) { + result = isFrom ? d(input).diff(instance, t.d, true) : instance.diff(input, t.d, true); + } + + var abs = (o.rounding || Math.round)(Math.abs(result)); + isFuture = result > 0; + + if (abs <= t.r || !t.r) { + if (abs <= 1 && i > 0) t = T[i - 1]; // 1 minutes -> a minute, 0 seconds -> 0 second + + var format = loc[t.l]; + + if (postFormat) { + abs = postFormat("" + abs); + } + + if (typeof format === 'string') { + out = format.replace('%d', abs); + } else { + out = format(abs, withoutSuffix, t.l, isFuture); + } + + break; + } + } + + if (withoutSuffix) return out; + var pastOrFuture = isFuture ? loc.future : loc.past; + + if (typeof pastOrFuture === 'function') { + return pastOrFuture(out); + } + + return pastOrFuture.replace('%s', out); + }; + + function fromTo(input, withoutSuffix, instance, isFrom) { + return proto.fromToBase(input, withoutSuffix, instance, isFrom); + } + + proto.to = function (input, withoutSuffix) { + return fromTo(input, withoutSuffix, this, true); + }; + + proto.from = function (input, withoutSuffix) { + return fromTo(input, withoutSuffix, this); + }; + + var makeNow = function makeNow(thisDay) { + return thisDay.$u ? d.utc() : d(); + }; + + proto.toNow = function (withoutSuffix) { + return this.to(makeNow(this), withoutSuffix); + }; + + proto.fromNow = function (withoutSuffix) { + return this.from(makeNow(this), withoutSuffix); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/timezone/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/timezone/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5a2d9f2db17e27f4b7d9f64e2e92bf0de45fd792 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/timezone/index.d.ts @@ -0,0 +1,20 @@ +import { PluginFunc, ConfigType } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + tz(timezone?: string, keepLocalTime?: boolean): Dayjs + offsetName(type?: 'short' | 'long'): string | undefined + } + + interface DayjsTimezone { + (date?: ConfigType, timezone?: string): Dayjs + (date: ConfigType, format: string, timezone?: string): Dayjs + guess(): string + setDefault(timezone?: string): void + } + + const tz: DayjsTimezone +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/timezone/index.js b/node_backend/node_modules/dayjs/esm/plugin/timezone/index.js new file mode 100644 index 0000000000000000000000000000000000000000..2f63de26b223b2c9c6214ecefbfec748e6c43fda --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/timezone/index.js @@ -0,0 +1,198 @@ +import { MIN, MS } from '../../constant'; +var typeToPos = { + year: 0, + month: 1, + day: 2, + hour: 3, + minute: 4, + second: 5 +}; // Cache time-zone lookups from Intl.DateTimeFormat, +// as it is a *very* slow method. + +var dtfCache = {}; + +var getDateTimeFormat = function getDateTimeFormat(timezone, options) { + if (options === void 0) { + options = {}; + } + + var timeZoneName = options.timeZoneName || 'short'; + var key = timezone + "|" + timeZoneName; + var dtf = dtfCache[key]; + + if (!dtf) { + dtf = new Intl.DateTimeFormat('en-US', { + hour12: false, + timeZone: timezone, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + timeZoneName: timeZoneName + }); + dtfCache[key] = dtf; + } + + return dtf; +}; + +export default (function (o, c, d) { + var defaultTimezone; + + var makeFormatParts = function makeFormatParts(timestamp, timezone, options) { + if (options === void 0) { + options = {}; + } + + var date = new Date(timestamp); + var dtf = getDateTimeFormat(timezone, options); + return dtf.formatToParts(date); + }; + + var tzOffset = function tzOffset(timestamp, timezone) { + var formatResult = makeFormatParts(timestamp, timezone); + var filled = []; + + for (var i = 0; i < formatResult.length; i += 1) { + var _formatResult$i = formatResult[i], + type = _formatResult$i.type, + value = _formatResult$i.value; + var pos = typeToPos[type]; + + if (pos >= 0) { + filled[pos] = parseInt(value, 10); + } + } + + var hour = filled[3]; // Workaround for the same behavior in different node version + // https://github.com/nodejs/node/issues/33027 + + /* istanbul ignore next */ + + var fixedHour = hour === 24 ? 0 : hour; + var utcString = filled[0] + "-" + filled[1] + "-" + filled[2] + " " + fixedHour + ":" + filled[4] + ":" + filled[5] + ":000"; + var utcTs = d.utc(utcString).valueOf(); + var asTS = +timestamp; + var over = asTS % 1000; + asTS -= over; + return (utcTs - asTS) / (60 * 1000); + }; // find the right offset a given local time. The o input is our guess, which determines which + // offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) + // https://github.com/moment/luxon/blob/master/src/datetime.js#L76 + + + var fixOffset = function fixOffset(localTS, o0, tz) { + // Our UTC time is just a guess because our offset is just a guess + var utcGuess = localTS - o0 * 60 * 1000; // Test whether the zone matches the offset for this ts + + var o2 = tzOffset(utcGuess, tz); // If so, offset didn't change and we're done + + if (o0 === o2) { + return [utcGuess, o0]; + } // If not, change the ts by the difference in the offset + + + utcGuess -= (o2 - o0) * 60 * 1000; // If that gives us the local time we want, we're done + + var o3 = tzOffset(utcGuess, tz); + + if (o2 === o3) { + return [utcGuess, o2]; + } // If it's different, we're in a hole time. + // The offset has changed, but the we don't adjust the time + + + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; + }; + + var proto = c.prototype; + + proto.tz = function (timezone, keepLocalTime) { + if (timezone === void 0) { + timezone = defaultTimezone; + } + + var oldOffset = this.utcOffset(); + var date = this.toDate(); + var target = date.toLocaleString('en-US', { + timeZone: timezone + }); + var diff = Math.round((date - new Date(target)) / 1000 / 60); + var offset = -Math.round(date.getTimezoneOffset() / 15) * 15 - diff; + var isUTC = !Number(offset); + var ins; + + if (isUTC) { + // if utcOffset is 0, turn it to UTC mode + ins = this.utcOffset(0, keepLocalTime); + } else { + ins = d(target, { + locale: this.$L + }).$set(MS, this.$ms).utcOffset(offset, true); + + if (keepLocalTime) { + var newOffset = ins.utcOffset(); + ins = ins.add(oldOffset - newOffset, MIN); + } + } + + ins.$x.$timezone = timezone; + return ins; + }; + + proto.offsetName = function (type) { + // type: short(default) / long + var zone = this.$x.$timezone || d.tz.guess(); + var result = makeFormatParts(this.valueOf(), zone, { + timeZoneName: type + }).find(function (m) { + return m.type.toLowerCase() === 'timezonename'; + }); + return result && result.value; + }; + + var oldStartOf = proto.startOf; + + proto.startOf = function (units, startOf) { + if (!this.$x || !this.$x.$timezone) { + return oldStartOf.call(this, units, startOf); + } + + var withoutTz = d(this.format('YYYY-MM-DD HH:mm:ss:SSS'), { + locale: this.$L + }); + var startOfWithoutTz = oldStartOf.call(withoutTz, units, startOf); + return startOfWithoutTz.tz(this.$x.$timezone, true); + }; + + d.tz = function (input, arg1, arg2) { + var parseFormat = arg2 && arg1; + var timezone = arg2 || arg1 || defaultTimezone; + var previousOffset = tzOffset(+d(), timezone); + + if (typeof input !== 'string') { + // timestamp number || js Date || Day.js + return d(input).tz(timezone); + } + + var localTs = d.utc(input, parseFormat).valueOf(); + + var _fixOffset = fixOffset(localTs, previousOffset, timezone), + targetTs = _fixOffset[0], + targetOffset = _fixOffset[1]; + + var ins = d(targetTs).utcOffset(targetOffset); + ins.$x.$timezone = timezone; + return ins; + }; + + d.tz.guess = function () { + return Intl.DateTimeFormat().resolvedOptions().timeZone; + }; + + d.tz.setDefault = function (timezone) { + defaultTimezone = timezone; + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/toArray/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/toArray/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5033831da59cc207a3c0bf4f03755473ffa2fd3a --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/toArray/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + toArray(): number[] + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/toArray/index.js b/node_backend/node_modules/dayjs/esm/plugin/toArray/index.js new file mode 100644 index 0000000000000000000000000000000000000000..2b795f4986a97abe2cdfa10e84e57cf10c2c7d11 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/toArray/index.js @@ -0,0 +1,7 @@ +export default (function (o, c) { + var proto = c.prototype; + + proto.toArray = function () { + return [this.$y, this.$M, this.$D, this.$H, this.$m, this.$s, this.$ms]; + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/toObject/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/toObject/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ad215200b22896dbf6e275053b7a2a30b0c571ea --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/toObject/index.d.ts @@ -0,0 +1,20 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +interface DayjsObject { + years: number + months: number + date: number + hours: number + minutes: number + seconds: number + milliseconds: number +} + +declare module 'dayjs/esm' { + interface Dayjs { + toObject(): DayjsObject + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/toObject/index.js b/node_backend/node_modules/dayjs/esm/plugin/toObject/index.js new file mode 100644 index 0000000000000000000000000000000000000000..e35d93f56a57b38e6f76d5f34fbb3359da497f17 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/toObject/index.js @@ -0,0 +1,15 @@ +export default (function (o, c) { + var proto = c.prototype; + + proto.toObject = function () { + return { + years: this.$y, + months: this.$M, + date: this.$D, + hours: this.$H, + minutes: this.$m, + seconds: this.$s, + milliseconds: this.$ms + }; + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/updateLocale/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/updateLocale/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..994a884d71bf056f72c4ed76cbda2b6c14cc7d2e --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/updateLocale/index.d.ts @@ -0,0 +1,8 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + export function updateLocale(localeName: string, customConfig: Record): Record +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/updateLocale/index.js b/node_backend/node_modules/dayjs/esm/plugin/updateLocale/index.js new file mode 100644 index 0000000000000000000000000000000000000000..1b9965cd03c08459f9d7b61bc406a1499aacc357 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/updateLocale/index.js @@ -0,0 +1,12 @@ +export default (function (option, Dayjs, dayjs) { + dayjs.updateLocale = function (locale, customConfig) { + var localeList = dayjs.Ls; + var localeConfig = localeList[locale]; + if (!localeConfig) return; + var customConfigKeys = customConfig ? Object.keys(customConfig) : []; + customConfigKeys.forEach(function (c) { + localeConfig[c] = customConfig[c]; + }); + return localeConfig; // eslint-disable-line consistent-return + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/utc/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/utc/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..15c61fec1639c3228c9ea038d1a2c356de64acf6 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/utc/index.d.ts @@ -0,0 +1,19 @@ +import { PluginFunc, ConfigType } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + + utc(keepLocalTime?: boolean): Dayjs + + local(): Dayjs + + isUTC(): boolean + + utcOffset(offset: number | string, keepLocalTime?: boolean): Dayjs + } + + export function utc(config?: ConfigType, format?: string, strict?: boolean): Dayjs +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/utc/index.js b/node_backend/node_modules/dayjs/esm/plugin/utc/index.js new file mode 100644 index 0000000000000000000000000000000000000000..a8a05f56c405466931d6ffec9202b464c3f0f50f --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/utc/index.js @@ -0,0 +1,188 @@ +import { MILLISECONDS_A_MINUTE, MIN } from '../../constant'; +var REGEX_VALID_OFFSET_FORMAT = /[+-]\d\d(?::?\d\d)?/g; +var REGEX_OFFSET_HOURS_MINUTES_FORMAT = /([+-]|\d\d)/g; + +function offsetFromString(value) { + if (value === void 0) { + value = ''; + } + + var offset = value.match(REGEX_VALID_OFFSET_FORMAT); + + if (!offset) { + return null; + } + + var _ref = ("" + offset[0]).match(REGEX_OFFSET_HOURS_MINUTES_FORMAT) || ['-', 0, 0], + indicator = _ref[0], + hoursOffset = _ref[1], + minutesOffset = _ref[2]; + + var totalOffsetInMinutes = +hoursOffset * 60 + +minutesOffset; + + if (totalOffsetInMinutes === 0) { + return 0; + } + + return indicator === '+' ? totalOffsetInMinutes : -totalOffsetInMinutes; +} + +export default (function (option, Dayjs, dayjs) { + var proto = Dayjs.prototype; + + dayjs.utc = function (date) { + var cfg = { + date: date, + utc: true, + args: arguments + }; // eslint-disable-line prefer-rest-params + + return new Dayjs(cfg); // eslint-disable-line no-use-before-define + }; + + proto.utc = function (keepLocalTime) { + var ins = dayjs(this.toDate(), { + locale: this.$L, + utc: true + }); + + if (keepLocalTime) { + return ins.add(this.utcOffset(), MIN); + } + + return ins; + }; + + proto.local = function () { + return dayjs(this.toDate(), { + locale: this.$L, + utc: false + }); + }; + + var oldParse = proto.parse; + + proto.parse = function (cfg) { + if (cfg.utc) { + this.$u = true; + } + + if (!this.$utils().u(cfg.$offset)) { + this.$offset = cfg.$offset; + } + + oldParse.call(this, cfg); + }; + + var oldInit = proto.init; + + proto.init = function () { + if (this.$u) { + var $d = this.$d; + this.$y = $d.getUTCFullYear(); + this.$M = $d.getUTCMonth(); + this.$D = $d.getUTCDate(); + this.$W = $d.getUTCDay(); + this.$H = $d.getUTCHours(); + this.$m = $d.getUTCMinutes(); + this.$s = $d.getUTCSeconds(); + this.$ms = $d.getUTCMilliseconds(); + } else { + oldInit.call(this); + } + }; + + var oldUtcOffset = proto.utcOffset; + + proto.utcOffset = function (input, keepLocalTime) { + var _this$$utils = this.$utils(), + u = _this$$utils.u; + + if (u(input)) { + if (this.$u) { + return 0; + } + + if (!u(this.$offset)) { + return this.$offset; + } + + return oldUtcOffset.call(this); + } + + if (typeof input === 'string') { + input = offsetFromString(input); + + if (input === null) { + return this; + } + } + + var offset = Math.abs(input) <= 16 ? input * 60 : input; + var ins = this; + + if (keepLocalTime) { + ins.$offset = offset; + ins.$u = input === 0; + return ins; + } + + if (input !== 0) { + var localTimezoneOffset = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset(); + ins = this.local().add(offset + localTimezoneOffset, MIN); + ins.$offset = offset; + ins.$x.$localOffset = localTimezoneOffset; + } else { + ins = this.utc(); + } + + return ins; + }; + + var oldFormat = proto.format; + var UTC_FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ss[Z]'; + + proto.format = function (formatStr) { + var str = formatStr || (this.$u ? UTC_FORMAT_DEFAULT : ''); + return oldFormat.call(this, str); + }; + + proto.valueOf = function () { + var addedOffset = !this.$utils().u(this.$offset) ? this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset()) : 0; + return this.$d.valueOf() - addedOffset * MILLISECONDS_A_MINUTE; + }; + + proto.isUTC = function () { + return !!this.$u; + }; + + proto.toISOString = function () { + return this.toDate().toISOString(); + }; + + proto.toString = function () { + return this.toDate().toUTCString(); + }; + + var oldToDate = proto.toDate; + + proto.toDate = function (type) { + if (type === 's' && this.$offset) { + return dayjs(this.format('YYYY-MM-DD HH:mm:ss:SSS')).toDate(); + } + + return oldToDate.call(this); + }; + + var oldDiff = proto.diff; + + proto.diff = function (input, units, _float) { + if (input && this.$u === input.$u) { + return oldDiff.call(this, input, units, _float); + } + + var localThis = this.local(); + var localInput = dayjs(input).local(); + return oldDiff.call(localThis, localInput, units, _float); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/weekOfYear/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/weekOfYear/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..340051bd3261987bc10ca0cda185d912ed9dc3cb --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/weekOfYear/index.d.ts @@ -0,0 +1,12 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + week(): number + + week(value : number): Dayjs + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/weekOfYear/index.js b/node_backend/node_modules/dayjs/esm/plugin/weekOfYear/index.js new file mode 100644 index 0000000000000000000000000000000000000000..c92406eb628aaaf27183b2b2adf6355f09694a7e --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/weekOfYear/index.js @@ -0,0 +1,44 @@ +import { MS, Y, D, W } from '../../constant'; +export default (function (o, c, d) { + var proto = c.prototype; + + proto.week = function (week) { + if (week === void 0) { + week = null; + } + + if (week !== null) { + return this.add((week - this.week()) * 7, D); + } + + var yearStart = this.$locale().yearStart || 1; + + if (this.month() === 11 && this.date() > 25) { + // d(this) is for badMutable + var nextYearStartDay = d(this).startOf(Y).add(1, Y).date(yearStart); + var thisEndOfWeek = d(this).endOf(W); + + if (nextYearStartDay.isBefore(thisEndOfWeek)) { + return 1; + } + } + + var yearStartDay = d(this).startOf(Y).date(yearStart); + var yearStartWeek = yearStartDay.startOf(W).subtract(1, MS); + var diffInWeek = this.diff(yearStartWeek, W, true); + + if (diffInWeek < 0) { + return d(this).startOf('week').week(); + } + + return Math.ceil(diffInWeek); + }; + + proto.weeks = function (week) { + if (week === void 0) { + week = null; + } + + return this.week(week); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/weekYear/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/weekYear/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5b713e531cac741caef92f61241501bd8002b2e2 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/weekYear/index.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + weekYear(): number + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/weekYear/index.js b/node_backend/node_modules/dayjs/esm/plugin/weekYear/index.js new file mode 100644 index 0000000000000000000000000000000000000000..140dcd44078a0d498a177c0fcd732e7cf75e7f33 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/weekYear/index.js @@ -0,0 +1,19 @@ +export default (function (o, c) { + var proto = c.prototype; + + proto.weekYear = function () { + var month = this.month(); + var weekOfYear = this.week(); + var year = this.year(); + + if (weekOfYear === 1 && month === 11) { + return year + 1; + } + + if (month === 0 && weekOfYear >= 52) { + return year - 1; + } + + return year; + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/plugin/weekday/index.d.ts b/node_backend/node_modules/dayjs/esm/plugin/weekday/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..41945e7e39c5e342a66af7d1e937f09d8df69049 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/weekday/index.d.ts @@ -0,0 +1,12 @@ +import { PluginFunc } from 'dayjs/esm' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs/esm' { + interface Dayjs { + weekday(): number + + weekday(value: number): Dayjs + } +} diff --git a/node_backend/node_modules/dayjs/esm/plugin/weekday/index.js b/node_backend/node_modules/dayjs/esm/plugin/weekday/index.js new file mode 100644 index 0000000000000000000000000000000000000000..18032b36e32e574aa515fde1fdb2eaae04fb8220 --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/plugin/weekday/index.js @@ -0,0 +1,15 @@ +export default (function (o, c) { + var proto = c.prototype; + + proto.weekday = function (input) { + var weekStart = this.$locale().weekStart || 0; + var $W = this.$W; + var weekday = ($W < weekStart ? $W + 7 : $W) - weekStart; + + if (this.$utils().u(input)) { + return weekday; + } + + return this.subtract(weekday, 'day').add(input, 'day'); + }; +}); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/esm/utils.js b/node_backend/node_modules/dayjs/esm/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..b5a81312b702adf2f60a28db5bee15c4e8e6828b --- /dev/null +++ b/node_backend/node_modules/dayjs/esm/utils.js @@ -0,0 +1,58 @@ +import * as C from './constant'; + +var padStart = function padStart(string, length, pad) { + var s = String(string); + if (!s || s.length >= length) return string; + return "" + Array(length + 1 - s.length).join(pad) + string; +}; + +var padZoneStr = function padZoneStr(instance) { + var negMinutes = -instance.utcOffset(); + var minutes = Math.abs(negMinutes); + var hourOffset = Math.floor(minutes / 60); + var minuteOffset = minutes % 60; + return "" + (negMinutes <= 0 ? '+' : '-') + padStart(hourOffset, 2, '0') + ":" + padStart(minuteOffset, 2, '0'); +}; + +var monthDiff = function monthDiff(a, b) { + // function from moment.js in order to keep the same result + if (a.date() < b.date()) return -monthDiff(b, a); + var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()); + var anchor = a.clone().add(wholeMonthDiff, C.M); + var c = b - anchor < 0; + var anchor2 = a.clone().add(wholeMonthDiff + (c ? -1 : 1), C.M); + return +(-(wholeMonthDiff + (b - anchor) / (c ? anchor - anchor2 : anchor2 - anchor)) || 0); +}; + +var absFloor = function absFloor(n) { + return n < 0 ? Math.ceil(n) || 0 : Math.floor(n); +}; + +var prettyUnit = function prettyUnit(u) { + var special = { + M: C.M, + y: C.Y, + w: C.W, + d: C.D, + D: C.DATE, + h: C.H, + m: C.MIN, + s: C.S, + ms: C.MS, + Q: C.Q + }; + return special[u] || String(u || '').toLowerCase().replace(/s$/, ''); +}; + +var isUndefined = function isUndefined(s) { + return s === undefined; +}; + +export default { + s: padStart, + z: padZoneStr, + m: monthDiff, + a: absFloor, + p: prettyUnit, + u: isUndefined +}; \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/index.d.ts b/node_backend/node_modules/dayjs/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..cd159dcaeb7568ce49740976d612649868426e53 --- /dev/null +++ b/node_backend/node_modules/dayjs/index.d.ts @@ -0,0 +1,429 @@ +/// + +export = dayjs; + +declare function dayjs (date?: dayjs.ConfigType): dayjs.Dayjs + +declare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, strict?: boolean): dayjs.Dayjs + +declare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, locale?: string, strict?: boolean): dayjs.Dayjs + +declare namespace dayjs { + interface ConfigTypeMap { + default: string | number | Date | Dayjs | null | undefined + } + + export type ConfigType = ConfigTypeMap[keyof ConfigTypeMap] + + export interface FormatObject { locale?: string, format?: string, utc?: boolean } + + export type OptionType = FormatObject | string | string[] + + export type UnitTypeShort = 'd' | 'D' | 'M' | 'y' | 'h' | 'm' | 's' | 'ms' + + export type UnitTypeLong = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'date' + + export type UnitTypeLongPlural = 'milliseconds' | 'seconds' | 'minutes' | 'hours' | 'days' | 'months' | 'years' | 'dates' + + export type UnitType = UnitTypeLong | UnitTypeLongPlural | UnitTypeShort; + + export type OpUnitType = UnitType | "week" | "weeks" | 'w'; + export type QUnitType = UnitType | "quarter" | "quarters" | 'Q'; + export type ManipulateType = Exclude; + class Dayjs { + constructor (config?: ConfigType) + /** + * All Day.js objects are immutable. Still, `dayjs#clone` can create a clone of the current object if you need one. + * ``` + * dayjs().clone()// => Dayjs + * dayjs(dayjs('2019-01-25')) // passing a Dayjs object to a constructor will also clone it + * ``` + * Docs: https://day.js.org/docs/en/parse/dayjs-clone + */ + clone(): Dayjs + /** + * This returns a `boolean` indicating whether the Day.js object contains a valid date or not. + * ``` + * dayjs().isValid()// => boolean + * ``` + * Docs: https://day.js.org/docs/en/parse/is-valid + */ + isValid(): boolean + /** + * Get the year. + * ``` + * dayjs().year()// => 2020 + * ``` + * Docs: https://day.js.org/docs/en/get-set/year + */ + year(): number + /** + * Set the year. + * ``` + * dayjs().year(2000)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/year + */ + year(value: number): Dayjs + /** + * Get the month. + * + * Months are zero indexed, so January is month 0. + * ``` + * dayjs().month()// => 0-11 + * ``` + * Docs: https://day.js.org/docs/en/get-set/month + */ + month(): number + /** + * Set the month. + * + * Months are zero indexed, so January is month 0. + * + * Accepts numbers from 0 to 11. If the range is exceeded, it will bubble up to the next year. + * ``` + * dayjs().month(0)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/month + */ + month(value: number): Dayjs + /** + * Get the date of the month. + * ``` + * dayjs().date()// => 1-31 + * ``` + * Docs: https://day.js.org/docs/en/get-set/date + */ + date(): number + /** + * Set the date of the month. + * + * Accepts numbers from 1 to 31. If the range is exceeded, it will bubble up to the next months. + * ``` + * dayjs().date(1)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/date + */ + date(value: number): Dayjs + /** + * Get the day of the week. + * + * Returns numbers from 0 (Sunday) to 6 (Saturday). + * ``` + * dayjs().day()// 0-6 + * ``` + * Docs: https://day.js.org/docs/en/get-set/day + */ + day(): 0 | 1 | 2 | 3 | 4 | 5 | 6 + /** + * Set the day of the week. + * + * Accepts numbers from 0 (Sunday) to 6 (Saturday). If the range is exceeded, it will bubble up to next weeks. + * ``` + * dayjs().day(0)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/day + */ + day(value: number): Dayjs + /** + * Get the hour. + * ``` + * dayjs().hour()// => 0-23 + * ``` + * Docs: https://day.js.org/docs/en/get-set/hour + */ + hour(): number + /** + * Set the hour. + * + * Accepts numbers from 0 to 23. If the range is exceeded, it will bubble up to the next day. + * ``` + * dayjs().hour(12)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/hour + */ + hour(value: number): Dayjs + /** + * Get the minutes. + * ``` + * dayjs().minute()// => 0-59 + * ``` + * Docs: https://day.js.org/docs/en/get-set/minute + */ + minute(): number + /** + * Set the minutes. + * + * Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next hour. + * ``` + * dayjs().minute(59)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/minute + */ + minute(value: number): Dayjs + /** + * Get the seconds. + * ``` + * dayjs().second()// => 0-59 + * ``` + * Docs: https://day.js.org/docs/en/get-set/second + */ + second(): number + /** + * Set the seconds. + * + * Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next minutes. + * ``` + * dayjs().second(1)// Dayjs + * ``` + */ + second(value: number): Dayjs + /** + * Get the milliseconds. + * ``` + * dayjs().millisecond()// => 0-999 + * ``` + * Docs: https://day.js.org/docs/en/get-set/millisecond + */ + millisecond(): number + /** + * Set the milliseconds. + * + * Accepts numbers from 0 to 999. If the range is exceeded, it will bubble up to the next seconds. + * ``` + * dayjs().millisecond(1)// => Dayjs + * ``` + * Docs: https://day.js.org/docs/en/get-set/millisecond + */ + millisecond(value: number): Dayjs + /** + * Generic setter, accepting unit as first argument, and value as second, returns a new instance with the applied changes. + * + * In general: + * ``` + * dayjs().set(unit, value) === dayjs()[unit](value) + * ``` + * Units are case insensitive, and support plural and short forms. + * ``` + * dayjs().set('date', 1) + * dayjs().set('month', 3) // April + * dayjs().set('second', 30) + * ``` + * Docs: https://day.js.org/docs/en/get-set/set + */ + set(unit: UnitType, value: number): Dayjs + /** + * String getter, returns the corresponding information getting from Day.js object. + * + * In general: + * ``` + * dayjs().get(unit) === dayjs()[unit]() + * ``` + * Units are case insensitive, and support plural and short forms. + * ``` + * dayjs().get('year') + * dayjs().get('month') // start 0 + * dayjs().get('date') + * ``` + * Docs: https://day.js.org/docs/en/get-set/get + */ + get(unit: UnitType): number + /** + * Returns a cloned Day.js object with a specified amount of time added. + * ``` + * dayjs().add(7, 'day')// => Dayjs + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/manipulate/add + */ + add(value: number, unit?: ManipulateType): Dayjs + /** + * Returns a cloned Day.js object with a specified amount of time subtracted. + * ``` + * dayjs().subtract(7, 'year')// => Dayjs + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/manipulate/subtract + */ + subtract(value: number, unit?: ManipulateType): Dayjs + /** + * Returns a cloned Day.js object and set it to the start of a unit of time. + * ``` + * dayjs().startOf('year')// => Dayjs + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/manipulate/start-of + */ + startOf(unit: OpUnitType): Dayjs + /** + * Returns a cloned Day.js object and set it to the end of a unit of time. + * ``` + * dayjs().endOf('month')// => Dayjs + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/manipulate/end-of + */ + endOf(unit: OpUnitType): Dayjs + /** + * Get the formatted date according to the string of tokens passed in. + * + * To escape characters, wrap them in square brackets (e.g. [MM]). + * ``` + * dayjs().format()// => current date in ISO8601, without fraction seconds e.g. '2020-04-02T08:02:17-05:00' + * dayjs('2019-01-25').format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]')// 'YYYYescape 2019-01-25T00:00:00-02:00Z' + * dayjs('2019-01-25').format('DD/MM/YYYY') // '25/01/2019' + * ``` + * Docs: https://day.js.org/docs/en/display/format + */ + format(template?: string): string + /** + * This indicates the difference between two date-time in the specified unit. + * + * To get the difference in milliseconds, use `dayjs#diff` + * ``` + * const date1 = dayjs('2019-01-25') + * const date2 = dayjs('2018-06-05') + * date1.diff(date2) // 20214000000 default milliseconds + * date1.diff() // milliseconds to current time + * ``` + * + * To get the difference in another unit of measurement, pass that measurement as the second argument. + * ``` + * const date1 = dayjs('2019-01-25') + * date1.diff('2018-06-05', 'month') // 7 + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/display/difference + */ + diff(date?: ConfigType, unit?: QUnitType | OpUnitType, float?: boolean): number + /** + * This returns the number of **milliseconds** since the Unix Epoch of the Day.js object. + * ``` + * dayjs('2019-01-25').valueOf() // 1548381600000 + * +dayjs(1548381600000) // 1548381600000 + * ``` + * To get a Unix timestamp (the number of seconds since the epoch) from a Day.js object, you should use Unix Timestamp `dayjs#unix()`. + * + * Docs: https://day.js.org/docs/en/display/unix-timestamp-milliseconds + */ + valueOf(): number + /** + * This returns the Unix timestamp (the number of **seconds** since the Unix Epoch) of the Day.js object. + * ``` + * dayjs('2019-01-25').unix() // 1548381600 + * ``` + * This value is floored to the nearest second, and does not include a milliseconds component. + * + * Docs: https://day.js.org/docs/en/display/unix-timestamp + */ + unix(): number + /** + * Get the number of days in the current month. + * ``` + * dayjs('2019-01-25').daysInMonth() // 31 + * ``` + * Docs: https://day.js.org/docs/en/display/days-in-month + */ + daysInMonth(): number + /** + * To get a copy of the native `Date` object parsed from the Day.js object use `dayjs#toDate`. + * ``` + * dayjs('2019-01-25').toDate()// => Date + * ``` + */ + toDate(): Date + /** + * To serialize as an ISO 8601 string. + * ``` + * dayjs('2019-01-25').toJSON() // '2019-01-25T02:00:00.000Z' + * ``` + * Docs: https://day.js.org/docs/en/display/as-json + */ + toJSON(): string + /** + * To format as an ISO 8601 string. + * ``` + * dayjs('2019-01-25').toISOString() // '2019-01-25T02:00:00.000Z' + * ``` + * Docs: https://day.js.org/docs/en/display/as-iso-string + */ + toISOString(): string + /** + * Returns a string representation of the date. + * ``` + * dayjs('2019-01-25').toString() // 'Fri, 25 Jan 2019 02:00:00 GMT' + * ``` + * Docs: https://day.js.org/docs/en/display/as-string + */ + toString(): string + /** + * Get the UTC offset in minutes. + * ``` + * dayjs().utcOffset() + * ``` + * Docs: https://day.js.org/docs/en/manipulate/utc-offset + */ + utcOffset(): number + /** + * This indicates whether the Day.js object is before the other supplied date-time. + * ``` + * dayjs().isBefore(dayjs('2011-01-01')) // default milliseconds + * ``` + * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter. + * ``` + * dayjs().isBefore('2011-01-01', 'year')// => boolean + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/query/is-before + */ + isBefore(date?: ConfigType, unit?: OpUnitType): boolean + /** + * This indicates whether the Day.js object is the same as the other supplied date-time. + * ``` + * dayjs().isSame(dayjs('2011-01-01')) // default milliseconds + * ``` + * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter. + * ``` + * dayjs().isSame('2011-01-01', 'year')// => boolean + * ``` + * Docs: https://day.js.org/docs/en/query/is-same + */ + isSame(date?: ConfigType, unit?: OpUnitType): boolean + /** + * This indicates whether the Day.js object is after the other supplied date-time. + * ``` + * dayjs().isAfter(dayjs('2011-01-01')) // default milliseconds + * ``` + * If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter. + * ``` + * dayjs().isAfter('2011-01-01', 'year')// => boolean + * ``` + * Units are case insensitive, and support plural and short forms. + * + * Docs: https://day.js.org/docs/en/query/is-after + */ + isAfter(date?: ConfigType, unit?: OpUnitType): boolean + + locale(): string + + locale(preset: string | ILocale, object?: Partial): Dayjs + } + + export type PluginFunc = (option: T, c: typeof Dayjs, d: typeof dayjs) => void + + export function extend(plugin: PluginFunc, option?: T): Dayjs + + export function locale(preset?: string | ILocale, object?: Partial, isLocal?: boolean): string + + export function isDayjs(d: any): d is Dayjs + + export function unix(t: number): Dayjs + + const Ls : { [key: string] : ILocale } +} diff --git a/node_backend/node_modules/dayjs/locale.json b/node_backend/node_modules/dayjs/locale.json new file mode 100644 index 0000000000000000000000000000000000000000..de98ae11375aa9d422cb1e7e7cd98d14cc271057 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale.json @@ -0,0 +1 @@ +[{"key":"af","name":"Afrikaans"},{"key":"am","name":"Amharic"},{"key":"ar-dz","name":"Arabic (Algeria)"},{"key":"ar-iq","name":" Arabic (Iraq)"},{"key":"ar-kw","name":"Arabic (Kuwait)"},{"key":"ar-ly","name":"Arabic (Lybia)"},{"key":"ar-ma","name":"Arabic (Morocco)"},{"key":"ar-sa","name":"Arabic (Saudi Arabia)"},{"key":"ar-tn","name":" Arabic (Tunisia)"},{"key":"ar","name":"Arabic"},{"key":"az","name":"Azerbaijani"},{"key":"be","name":"Belarusian"},{"key":"bg","name":"Bulgarian"},{"key":"bi","name":"Bislama"},{"key":"bm","name":"Bambara"},{"key":"bn-bd","name":"Bengali (Bangladesh)"},{"key":"bn","name":"Bengali"},{"key":"bo","name":"Tibetan"},{"key":"br","name":"Breton"},{"key":"bs","name":"Bosnian"},{"key":"ca","name":"Catalan"},{"key":"cs","name":"Czech"},{"key":"cv","name":"Chuvash"},{"key":"cy","name":"Welsh"},{"key":"de-at","name":"German (Austria)"},{"key":"da","name":"Danish"},{"key":"de-ch","name":"German (Switzerland)"},{"key":"de","name":"German"},{"key":"dv","name":"Maldivian"},{"key":"el","name":"Greek"},{"key":"en-au","name":"English (Australia)"},{"key":"en-ca","name":"English (Canada)"},{"key":"en-gb","name":"English (United Kingdom)"},{"key":"en-ie","name":"English (Ireland)"},{"key":"en-il","name":"English (Israel)"},{"key":"en-in","name":"English (India)"},{"key":"en-nz","name":"English (New Zealand)"},{"key":"en-sg","name":"English (Singapore)"},{"key":"en-tt","name":"English (Trinidad & Tobago)"},{"key":"eo","name":"Esperanto"},{"key":"en","name":"English"},{"key":"es-do","name":"Spanish (Dominican Republic)"},{"key":"es-mx","name":"Spanish (Mexico)"},{"key":"es-pr","name":"Spanish (Puerto Rico)"},{"key":"es-us","name":"Spanish (United States)"},{"key":"et","name":"Estonian"},{"key":"es","name":"Spanish"},{"key":"eu","name":"Basque"},{"key":"fa","name":"Persian"},{"key":"fo","name":"Faroese"},{"key":"fi","name":"Finnish"},{"key":"fr-ca","name":"French (Canada)"},{"key":"fr-ch","name":"French (Switzerland)"},{"key":"fr","name":"French"},{"key":"fy","name":"Frisian"},{"key":"ga","name":"Irish or Irish Gaelic"},{"key":"gd","name":"Scottish Gaelic"},{"key":"gom-latn","name":"Konkani Latin script"},{"key":"gl","name":"Galician"},{"key":"gu","name":"Gujarati"},{"key":"he","name":"Hebrew"},{"key":"hi","name":"Hindi"},{"key":"hr","name":"Croatian"},{"key":"hu","name":"Hungarian"},{"key":"ht","name":"Haitian Creole (Haiti)"},{"key":"hy-am","name":"Armenian"},{"key":"id","name":"Indonesian"},{"key":"is","name":"Icelandic"},{"key":"it-ch","name":"Italian (Switzerland)"},{"key":"it","name":"Italian"},{"key":"ja","name":"Japanese"},{"key":"jv","name":"Javanese"},{"key":"ka","name":"Georgian"},{"key":"kk","name":"Kazakh"},{"key":"km","name":"Cambodian"},{"key":"kn","name":"Kannada"},{"key":"ko","name":"Korean"},{"key":"ku","name":"Kurdish"},{"key":"ky","name":"Kyrgyz"},{"key":"lb","name":"Luxembourgish"},{"key":"lo","name":"Lao"},{"key":"lt","name":"Lithuanian"},{"key":"lv","name":"Latvian"},{"key":"me","name":"Montenegrin"},{"key":"mi","name":"Maori"},{"key":"mk","name":"Macedonian"},{"key":"ml","name":"Malayalam"},{"key":"mn","name":"Mongolian"},{"key":"mr","name":"Marathi"},{"key":"ms-my","name":"Malay"},{"key":"ms","name":"Malay"},{"key":"mt","name":"Maltese (Malta)"},{"key":"my","name":"Burmese"},{"key":"nb","name":"Norwegian Bokmål"},{"key":"ne","name":"Nepalese"},{"key":"nl-be","name":"Dutch (Belgium)"},{"key":"nl","name":"Dutch"},{"key":"pl","name":"Polish"},{"key":"pt-br","name":"Portuguese (Brazil)"},{"key":"pt","name":"Portuguese"},{"key":"rn","name":"Kirundi"},{"key":"ro","name":"Romanian"},{"key":"ru","name":"Russian"},{"key":"rw","name":"Kinyarwanda (Rwanda)"},{"key":"sd","name":"Sindhi"},{"key":"se","name":"Northern Sami"},{"key":"si","name":"Sinhalese"},{"key":"sk","name":"Slovak"},{"key":"sl","name":"Slovenian"},{"key":"sq","name":"Albanian"},{"key":"sr-cyrl","name":"Serbian Cyrillic"},{"key":"ss","name":"siSwati"},{"key":"sv-fi","name":"Finland Swedish"},{"key":"sr","name":"Serbian"},{"key":"sv","name":"Swedish"},{"key":"sw","name":"Swahili"},{"key":"ta","name":"Tamil"},{"key":"te","name":"Telugu"},{"key":"tet","name":"Tetun Dili (East Timor)"},{"key":"tg","name":"Tajik"},{"key":"th","name":"Thai"},{"key":"tk","name":"Turkmen"},{"key":"tl-ph","name":"Tagalog (Philippines)"},{"key":"tlh","name":"Klingon"},{"key":"tr","name":"Turkish"},{"key":"tzl","name":"Talossan"},{"key":"tzm-latn","name":"Central Atlas Tamazight Latin"},{"key":"tzm","name":"Central Atlas Tamazight"},{"key":"ug-cn","name":"Uyghur (China)"},{"key":"uk","name":"Ukrainian"},{"key":"ur","name":"Urdu"},{"key":"uz-latn","name":"Uzbek Latin"},{"key":"uz","name":"Uzbek"},{"key":"vi","name":"Vietnamese"},{"key":"x-pseudo","name":"Pseudo"},{"key":"yo","name":"Yoruba Nigeria"},{"key":"zh-cn","name":"Chinese (China)"},{"key":"zh-hk","name":"Chinese (Hong Kong)"},{"key":"zh-tw","name":"Chinese (Taiwan)"},{"key":"zh","name":"Chinese"},{"key":"oc-lnc","name":"Occitan, lengadocian dialecte"},{"key":"nn","name":"Nynorsk"},{"key":"pa-in","name":"Punjabi (India)"}] \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/af.js b/node_backend/node_modules/dayjs/locale/af.js new file mode 100644 index 0000000000000000000000000000000000000000..62c75e4e9fef8576ce2b70549aa8381aa413dead --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/af.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_af=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),t={name:"af",weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),weekStart:1,weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"}};return n.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/am.js b/node_backend/node_modules/dayjs/locale/am.js new file mode 100644 index 0000000000000000000000000000000000000000..7b588a88a0dffa0f7b146fdc76fc466712e482b2 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/am.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_am=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"am",weekdays:"እሑድ_ሰኞ_ማክሰኞ_ረቡዕ_ሐሙስ_አርብ_ቅዳሜ".split("_"),weekdaysShort:"እሑድ_ሰኞ_ማክሰ_ረቡዕ_ሐሙስ_አርብ_ቅዳሜ".split("_"),weekdaysMin:"እሑ_ሰኞ_ማክ_ረቡ_ሐሙ_አር_ቅዳ".split("_"),months:"ጃንዋሪ_ፌብሯሪ_ማርች_ኤፕሪል_ሜይ_ጁን_ጁላይ_ኦገስት_ሴፕቴምበር_ኦክቶበር_ኖቬምበር_ዲሴምበር".split("_"),monthsShort:"ጃንዋ_ፌብሯ_ማርች_ኤፕሪ_ሜይ_ጁን_ጁላይ_ኦገስ_ሴፕቴ_ኦክቶ_ኖቬም_ዲሴም".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"በ%s",past:"%s በፊት",s:"ጥቂት ሰከንዶች",m:"አንድ ደቂቃ",mm:"%d ደቂቃዎች",h:"አንድ ሰዓት",hh:"%d ሰዓታት",d:"አንድ ቀን",dd:"%d ቀናት",M:"አንድ ወር",MM:"%d ወራት",y:"አንድ ዓመት",yy:"%d ዓመታት"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM D ፣ YYYY",LLL:"MMMM D ፣ YYYY HH:mm",LLLL:"dddd ፣ MMMM D ፣ YYYY HH:mm"},ordinal:function(e){return e+"ኛ"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ar-dz.js b/node_backend/node_modules/dayjs/locale/ar-dz.js new file mode 100644 index 0000000000000000000000000000000000000000..55227905161cb5ec19f729538408a62219c8433a --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ar-dz.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ar_dz=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ar-dz",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(_){return _>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ar-iq.js b/node_backend/node_modules/dayjs/locale/ar-iq.js new file mode 100644 index 0000000000000000000000000000000000000000..07e8c71ca35513185f77e9f0de54afd36c8ddf7a --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ar-iq.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ar_iq=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ar-iq",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول".split("_"),weekStart:1,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(e){return e>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ar-kw.js b/node_backend/node_modules/dayjs/locale/ar-kw.js new file mode 100644 index 0000000000000000000000000000000000000000..a876ca06c211639a81fbec7dcd6c4fd319531d05 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ar-kw.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ar_kw=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ar-kw",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(_){return _>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ar-ly.js b/node_backend/node_modules/dayjs/locale/ar-ly.js new file mode 100644 index 0000000000000000000000000000000000000000..9dbe09bf2fbf7f02c4688df98176e0d6840af93d --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ar-ly.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ar_ly=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),n={name:"ar-ly",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekStart:6,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},meridiem:function(_){return _>12?"م":"ص"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return t.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ar-ma.js b/node_backend/node_modules/dayjs/locale/ar-ma.js new file mode 100644 index 0000000000000000000000000000000000000000..dbb77cc9a8340f8542856a0054342ad4acbe994e --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ar-ma.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ar_ma=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ar-ma",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekStart:6,weekdaysShort:"احد_إثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(e){return e>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ar-sa.js b/node_backend/node_modules/dayjs/locale/ar-sa.js new file mode 100644 index 0000000000000000000000000000000000000000..9c2c0d4e394a14dfe1c4b07d642f0b0ed87fc407 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ar-sa.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ar_sa=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ar-sa",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(_){return _>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ar-tn.js b/node_backend/node_modules/dayjs/locale/ar-tn.js new file mode 100644 index 0000000000000000000000000000000000000000..944b46d0efffc57f5cebcf30be5783dd45f0c20c --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ar-tn.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ar_tn=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ar-tn",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekStart:1,weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiem:function(e){return e>12?"م":"ص"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ar.js b/node_backend/node_modules/dayjs/locale/ar.js new file mode 100644 index 0000000000000000000000000000000000000000..517c49e25d12aab7c6305aa07a6baaf6abaa3b7c --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ar.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ar=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),r="يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),d={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},_={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},o={name:"ar",weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),months:r,monthsShort:r,weekStart:6,meridiem:function(e){return e>12?"م":"ص"},relativeTime:{future:"بعد %s",past:"منذ %s",s:"ثانية واحدة",m:"دقيقة واحدة",mm:"%d دقائق",h:"ساعة واحدة",hh:"%d ساعات",d:"يوم واحد",dd:"%d أيام",M:"شهر واحد",MM:"%d أشهر",y:"عام واحد",yy:"%d أعوام"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return _[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return d[e]})).replace(/,/g,"،")},ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"}};return n.default.locale(o,null,!0),o})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/az.js b/node_backend/node_modules/dayjs/locale/az.js new file mode 100644 index 0000000000000000000000000000000000000000..d63ed1f237ac8e9c3b2974dc3d2abd5e9e1a0ee6 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/az.js @@ -0,0 +1 @@ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_az=e(a.dayjs)}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var _=e(a),t={name:"az",weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"bir neçə saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},ordinal:function(a){return a}};return _.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/be.js b/node_backend/node_modules/dayjs/locale/be.js new file mode 100644 index 0000000000000000000000000000000000000000..704a87de0bcc3e8c30d740d662abcdbda46ee5e4 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/be.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_be=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),n={name:"be",weekdays:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),months:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),weekStart:1,weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"}};return t.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/bg.js b/node_backend/node_modules/dayjs/locale/bg.js new file mode 100644 index 0000000000000000000000000000000000000000..89ddeffe3131674548e5a9ad8a4601c4f5f4d80e --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/bg.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_bg=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"bg",weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekStart:1,ordinal:function(e){var _=e%100;if(_>10&&_<20)return e+"-ти";var t=e%10;return 1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/bi.js b/node_backend/node_modules/dayjs/locale/bi.js new file mode 100644 index 0000000000000000000000000000000000000000..e457dff6620d97938326036b728ae069aaa630fc --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/bi.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_bi=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),_={name:"bi",weekdays:"Sande_Mande_Tusde_Wenesde_Tosde_Fraede_Sarade".split("_"),months:"Januari_Februari_Maj_Eprel_Mei_Jun_Julae_Okis_Septemba_Oktoba_Novemba_Disemba".split("_"),weekStart:1,weekdaysShort:"San_Man_Tus_Wen_Tos_Frae_Sar".split("_"),monthsShort:"Jan_Feb_Maj_Epr_Mai_Jun_Jul_Oki_Sep_Okt_Nov_Dis".split("_"),weekdaysMin:"San_Ma_Tu_We_To_Fr_Sar".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"lo %s",past:"%s bifo",s:"sam seken",m:"wan minit",mm:"%d minit",h:"wan haoa",hh:"%d haoa",d:"wan dei",dd:"%d dei",M:"wan manis",MM:"%d manis",y:"wan yia",yy:"%d yia"}};return n.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/bm.js b/node_backend/node_modules/dayjs/locale/bm.js new file mode 100644 index 0000000000000000000000000000000000000000..3c4fbdd281443b1b8b857e7a0e73c185c1c30660 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/bm.js @@ -0,0 +1 @@ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_bm=e(a.dayjs)}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var l=e(a),t={name:"bm",weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),weekStart:1,weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"}};return l.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/bn-bd.js b/node_backend/node_modules/dayjs/locale/bn-bd.js new file mode 100644 index 0000000000000000000000000000000000000000..ae76f9f05ed9754e78d9304825d9bd0a1f2c3ab4 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/bn-bd.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_bn_bd=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),n={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},d={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"},r={name:"bn-bd",weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),weekStart:0,preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return d[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return n[e]}))},ordinal:function(e){var t=["ই","লা","রা","ঠা","শে"],_=e%100;return"["+e+(t[(_-20)%10]||t[_]||t[0])+"]"},formats:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY খ্রিস্টাব্দ",LL:"D MMMM YYYY খ্রিস্টাব্দ",LLL:"D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়",LLLL:"dddd, D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়"},meridiem:function(e){return e<4?"রাত":e<6?"ভোর":e<12?"সকাল":e<15?"দুপুর":e<18?"বিকাল":e<20?"সন্ধ্যা":"রাত"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"}};return _.default.locale(r,null,!0),r})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/bn.js b/node_backend/node_modules/dayjs/locale/bn.js new file mode 100644 index 0000000000000000000000000000000000000000..30ffa0287ceaf1f1a6bb126dbbaf5681ecc98cd1 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/bn.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_bn=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),n={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},d={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"},o={name:"bn",weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return d[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return n[e]}))},ordinal:function(e){return e},formats:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"}};return t.default.locale(o,null,!0),o})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/bo.js b/node_backend/node_modules/dayjs/locale/bo.js new file mode 100644 index 0000000000000000000000000000000000000000..92bb7cc0c1a6f128c5c9b8db0058b7d01edeaf2a --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/bo.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_bo=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"bo",weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་དང་པོ_ཟླ་གཉིས་པ_ཟླ་གསུམ་པ_ཟླ་བཞི་པ_ཟླ་ལྔ་པ_ཟླ་དྲུག་པ_ཟླ་བདུན་པ_ཟླ་བརྒྱད་པ_ཟླ་དགུ་པ_ཟླ་བཅུ་པ_ཟླ་བཅུ་གཅིག་པ_ཟླ་བཅུ་གཉིས་པ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s ལ་",past:"%s སྔོན་ལ་",s:"ཏོག་ཙམ་",m:"སྐར་མ་གཅིག་",mm:"སྐར་མ་ %d",h:"ཆུ་ཚོད་གཅིག་",hh:"ཆུ་ཚོད་ %d",d:"ཉིན་གཅིག་",dd:"ཉིན་ %d",M:"ཟླ་བ་གཅིག་",MM:"ཟླ་བ་ %d",y:"ལོ་གཅིག་",yy:"ལོ་ %d"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/br.js b/node_backend/node_modules/dayjs/locale/br.js new file mode 100644 index 0000000000000000000000000000000000000000..0b2317faa52717a9ef274bcda98f0c926737442b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/br.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_br=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e);function r(e){return e>9?r(e%10):e}function t(e,n,u){return e+" "+function(e,n){return 2===n?function(e){return{m:"v",b:"v",d:"z"}[e.charAt(0)]+e.substring(1)}(e):e}({mm:"munutenn",MM:"miz",dd:"devezh"}[u],e)}var o={name:"br",weekdays:"Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn".split("_"),months:"Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),weekStart:1,weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),monthsShort:"Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},relativeTime:{future:"a-benn %s",past:"%s ʼzo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:function(e){switch(r(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},meridiem:function(e){return e<12?"a.m.":"g.m."}};return u.default.locale(o,null,!0),o})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/bs.js b/node_backend/node_modules/dayjs/locale/bs.js new file mode 100644 index 0000000000000000000000000000000000000000..25dcd6d5a79f3913047f4de7f5c4f348f769516f --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/bs.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_bs=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),a={name:"bs",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ca.js b/node_backend/node_modules/dayjs/locale/ca.js new file mode 100644 index 0000000000000000000000000000000000000000..1614cc20f5e297dcb7d16d676632f30c18eb99c1 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ca.js @@ -0,0 +1 @@ +!function(e,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],s):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ca=s(e.dayjs)}(this,(function(e){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=s(e),_={name:"ca",weekdays:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),weekdaysShort:"Dg._Dl._Dt._Dc._Dj._Dv._Ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),months:"Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen._Febr._Març_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",ll:"D MMM YYYY",lll:"D MMM YYYY, H:mm",llll:"ddd D MMM YYYY, H:mm"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinal:function(e){return""+e+(1===e||3===e?"r":2===e?"n":4===e?"t":"è")}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/cs.js b/node_backend/node_modules/dayjs/locale/cs.js new file mode 100644 index 0000000000000000000000000000000000000000..43bddb9bb937b95560ce7106b682dcc2b85f5932 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/cs.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_cs=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e);function s(e){return e>1&&e<5&&1!=~~(e/10)}function r(e,n,t,r){var d=e+" ";switch(t){case"s":return n||r?"pár sekund":"pár sekundami";case"m":return n?"minuta":r?"minutu":"minutou";case"mm":return n||r?d+(s(e)?"minuty":"minut"):d+"minutami";case"h":return n?"hodina":r?"hodinu":"hodinou";case"hh":return n||r?d+(s(e)?"hodiny":"hodin"):d+"hodinami";case"d":return n||r?"den":"dnem";case"dd":return n||r?d+(s(e)?"dny":"dní"):d+"dny";case"M":return n||r?"měsíc":"měsícem";case"MM":return n||r?d+(s(e)?"měsíce":"měsíců"):d+"měsíci";case"y":return n||r?"rok":"rokem";case"yy":return n||r?d+(s(e)?"roky":"let"):d+"lety"}}var d={name:"cs",weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),months:"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),monthsShort:"led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"před %s",s:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/cv.js b/node_backend/node_modules/dayjs/locale/cv.js new file mode 100644 index 0000000000000000000000000000000000000000..a30efe0cab13b034b2da42aca5db58f638d4b214 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/cv.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_cv=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),n={name:"cv",weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),weekStart:1,weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"}};return t.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/cy.js b/node_backend/node_modules/dayjs/locale/cy.js new file mode 100644 index 0000000000000000000000000000000000000000..ee1910f5b08d5ebd61bb01790c3657ecd73fd6b8 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/cy.js @@ -0,0 +1 @@ +!function(d,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(d="undefined"!=typeof globalThis?globalThis:d||self).dayjs_locale_cy=e(d.dayjs)}(this,(function(d){"use strict";function e(d){return d&&"object"==typeof d&&"default"in d?d:{default:d}}var _=e(d),a={name:"cy",weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),weekStart:1,weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),ordinal:function(d){return d},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"}};return _.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/da.js b/node_backend/node_modules/dayjs/locale/da.js new file mode 100644 index 0000000000000000000000000000000000000000..f196072b2d4f7a00047f55b2d5a7b203535a7019 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/da.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_da=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=t(e),a={name:"da",weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn._man._tirs._ons._tors._fre._lør.".split("_"),weekdaysMin:"sø._ma._ti._on._to._fr._lø.".split("_"),months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"}};return d.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/de-at.js b/node_backend/node_modules/dayjs/locale/de-at.js new file mode 100644 index 0000000000000000000000000000000000000000..ca51ef518559968f839ad2f37e0e293c4a0c95de --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/de-at.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_de_at=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),i={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function a(e,n,t){var a=i[t];return Array.isArray(a)&&(a=a[n?0:1]),a.replace("%d",e)}var r={name:"de-at",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a}};return t.default.locale(r,null,!0),r})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/de-ch.js b/node_backend/node_modules/dayjs/locale/de-ch.js new file mode 100644 index 0000000000000000000000000000000000000000..3fef2182d4bd4c5e57a47e2928342dcd4c7d00fb --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/de-ch.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_de_ch=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),a={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function i(e,n,t){var i=a[t];return Array.isArray(i)&&(i=i[n?0:1]),i.replace("%d",e)}var r={name:"de-ch",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),ordinal:function(e){return e+"."},weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i}};return t.default.locale(r,null,!0),r})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/de.js b/node_backend/node_modules/dayjs/locale/de.js new file mode 100644 index 0000000000000000000000000000000000000000..35f05ecb8a9bc7b48b978aa101733eefa30bebb1 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/de.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_de=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),a={s:"ein paar Sekunden",m:["eine Minute","einer Minute"],mm:"%d Minuten",h:["eine Stunde","einer Stunde"],hh:"%d Stunden",d:["ein Tag","einem Tag"],dd:["%d Tage","%d Tagen"],M:["ein Monat","einem Monat"],MM:["%d Monate","%d Monaten"],y:["ein Jahr","einem Jahr"],yy:["%d Jahre","%d Jahren"]};function i(e,n,t){var i=a[t];return Array.isArray(i)&&(i=i[n?0:1]),i.replace("%d",e)}var r={name:"de",weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,formats:{LTS:"HH:mm:ss",LT:"HH:mm",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"vor %s",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i}};return t.default.locale(r,null,!0),r})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/dv.js b/node_backend/node_modules/dayjs/locale/dv.js new file mode 100644 index 0000000000000000000000000000000000000000..b0bd8f9bd6a9986f8f337491d99aa78c2487fe35 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/dv.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_dv=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"dv",weekdays:"އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު".split("_"),months:"ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު".split("_"),weekStart:7,weekdaysShort:"އާދިއްތަ_ހޯމަ_އަންގާރަ_ބުދަ_ބުރާސްފަތި_ހުކުރު_ހޮނިހިރު".split("_"),monthsShort:"ޖެނުއަރީ_ފެބްރުއަރީ_މާރިޗު_އޭޕްރީލު_މޭ_ޖޫން_ޖުލައި_އޯގަސްޓު_ސެޕްޓެމްބަރު_އޮކްޓޯބަރު_ނޮވެމްބަރު_ޑިސެމްބަރު".split("_"),weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/el.js b/node_backend/node_modules/dayjs/locale/el.js new file mode 100644 index 0000000000000000000000000000000000000000..1488034239528b5c607d69a5054371d13eea4240 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/el.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_el=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"el",weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),months:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαι_Ιουν_Ιουλ_Αυγ_Σεπτ_Οκτ_Νοε_Δεκ".split("_"),ordinal:function(e){return e},weekStart:1,relativeTime:{future:"σε %s",past:"πριν %s",s:"μερικά δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένα μήνα",MM:"%d μήνες",y:"ένα χρόνο",yy:"%d χρόνια"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en-au.js b/node_backend/node_modules/dayjs/locale/en-au.js new file mode 100644 index 0000000000000000000000000000000000000000..b952cdbf32f71450243fc24d95f8f9f4077903fe --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en-au.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_au=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"en-au",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en-ca.js b/node_backend/node_modules/dayjs/locale/en-ca.js new file mode 100644 index 0000000000000000000000000000000000000000..bf766214a7f5f72e3a0d53921ed40ef74eec3ff8 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en-ca.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_ca=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=a(e),t={name:"en-ca",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return _.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en-gb.js b/node_backend/node_modules/dayjs/locale/en-gb.js new file mode 100644 index 0000000000000000000000000000000000000000..7fc7c3f500a2542f6e9a0b877a4240127e57914c --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en-gb.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_gb=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"en-gb",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],t=e%100;return"["+e+(a[(t-20)%10]||a[t]||a[0])+"]"}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en-ie.js b/node_backend/node_modules/dayjs/locale/en-ie.js new file mode 100644 index 0000000000000000000000000000000000000000..b0ad3f900eaa77411aface269d0a42c755dea6f5 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en-ie.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_ie=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"en-ie",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en-il.js b/node_backend/node_modules/dayjs/locale/en-il.js new file mode 100644 index 0000000000000000000000000000000000000000..d8bea62d33dd8b2d9fbe726932d80c5beb5e593b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en-il.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_il=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=a(e),t={name:"en-il",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return _.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en-in.js b/node_backend/node_modules/dayjs/locale/en-in.js new file mode 100644 index 0000000000000000000000000000000000000000..af8cff3bf48dc400d1ddf8067d77147aaa80ab7b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en-in.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_in=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),n={name:"en-in",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var a=["th","st","nd","rd"],t=e%100;return"["+e+(a[(t-20)%10]||a[t]||a[0])+"]"}};return t.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en-nz.js b/node_backend/node_modules/dayjs/locale/en-nz.js new file mode 100644 index 0000000000000000000000000000000000000000..058abbe7c063c45fa99110eaab474ecb30f4b997 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en-nz.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_nz=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),n={name:"en-nz",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){var a=["th","st","nd","rd"],t=e%100;return"["+e+(a[(t-20)%10]||a[t]||a[0])+"]"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return t.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en-sg.js b/node_backend/node_modules/dayjs/locale/en-sg.js new file mode 100644 index 0000000000000000000000000000000000000000..787fa847d205a76679e3cd50b7fe307f26d8cf3b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en-sg.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_sg=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"en-sg",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),weekStart:1,weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en-tt.js b/node_backend/node_modules/dayjs/locale/en-tt.js new file mode 100644 index 0000000000000000000000000000000000000000..afc4d36172822d879c1b73a55939629e73e50663 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en-tt.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en_tt=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),_={name:"en-tt",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekStart:1,yearStart:4,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(e){var t=["th","st","nd","rd"],a=e%100;return"["+e+(t[(a-20)%10]||t[a]||t[0])+"]"}};return a.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/en.js b/node_backend/node_modules/dayjs/locale/en.js new file mode 100644 index 0000000000000000000000000000000000000000..847cbfdacb4f33b8b0c86c9897685944c2b98c36 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/en.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_en=n()}(this,(function(){"use strict";return{name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var n=["th","st","nd","rd"],t=e%100;return"["+e+(n[(t-20)%10]||n[t]||n[0])+"]"}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/eo.js b/node_backend/node_modules/dayjs/locale/eo.js new file mode 100644 index 0000000000000000000000000000000000000000..2dcbe01466dd19ebcf5074f1cdbd1daa3c4cc2ed --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/eo.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_eo=o(e.dayjs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(e),t={name:"eo",weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),weekStart:1,weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"}};return a.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/es-do.js b/node_backend/node_modules/dayjs/locale/es-do.js new file mode 100644 index 0000000000000000000000000000000000000000..07907ad121ee9346ada3f1ac9a7803452a3f4996 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/es-do.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_es_do=o(e.dayjs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"es-do",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekStart:1,relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"}};return s.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/es-mx.js b/node_backend/node_modules/dayjs/locale/es-mx.js new file mode 100644 index 0000000000000000000000000000000000000000..f865a2d15e1f12b78a000ef3c13d49095ec403c7 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/es-mx.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_es_mx=o(e.dayjs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"es-mx",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"}};return s.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/es-pr.js b/node_backend/node_modules/dayjs/locale/es-pr.js new file mode 100644 index 0000000000000000000000000000000000000000..56fdeb45df70dfca986cbfa1679544441b7923f8 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/es-pr.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_es_pr=o(e.dayjs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"es-pr",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"}};return s.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/es-us.js b/node_backend/node_modules/dayjs/locale/es-us.js new file mode 100644 index 0000000000000000000000000000000000000000..35f55353ea73309ce376bb5981148e008edf05d0 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/es-us.js @@ -0,0 +1 @@ +!function(e,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],s):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_es_us=s(e.dayjs)}(this,(function(e){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=s(e),d={name:"es-us",weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"}};return o.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/es.js b/node_backend/node_modules/dayjs/locale/es.js new file mode 100644 index 0000000000000000000000000000000000000000..eb33b8107c261294f5e41e89b18afde4fd3c8fad --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/es.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_es=o(e.dayjs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"es",monthsShort:"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinal:function(e){return e+"º"}};return s.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/et.js b/node_backend/node_modules/dayjs/locale/et.js new file mode 100644 index 0000000000000000000000000000000000000000..4158d13898664c720ea2a4e52bc209d45420686f --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/et.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_et=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e);function u(e,a,t,u){var s={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:["%d minuti","%d minutit"],h:["ühe tunni","tund aega","üks tund"],hh:["%d tunni","%d tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:["%d kuu","%d kuud"],y:["ühe aasta","aasta","üks aasta"],yy:["%d aasta","%d aastat"]};return a?(s[t][2]?s[t][2]:s[t][1]).replace("%d",e):(u?s[t][0]:s[t][1]).replace("%d",e)}var s={name:"et",weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s pärast",past:"%s tagasi",s:u,m:u,mm:u,h:u,hh:u,d:u,dd:"%d päeva",M:u,MM:u,y:u,yy:u},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return t.default.locale(s,null,!0),s})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/eu.js b/node_backend/node_modules/dayjs/locale/eu.js new file mode 100644 index 0000000000000000000000000000000000000000..ed8e2284eb7ac27c71889ba4df7d501a02e7bbbc --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/eu.js @@ -0,0 +1 @@ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_eu=e(a.dayjs)}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var t=e(a),l={name:"eu",weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),weekStart:1,weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"}};return t.default.locale(l,null,!0),l})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/fa.js b/node_backend/node_modules/dayjs/locale/fa.js new file mode 100644 index 0000000000000000000000000000000000000000..648bb4eb9ce1356f2643a1d917b8e2f1778d1afa --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/fa.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_fa=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"fa",weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekStart:6,months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/fi.js b/node_backend/node_modules/dayjs/locale/fi.js new file mode 100644 index 0000000000000000000000000000000000000000..2681ebd19b77fcc0cfb0972fc57f80aeb66f0a83 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/fi.js @@ -0,0 +1 @@ +!function(u,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(u="undefined"!=typeof globalThis?globalThis:u||self).dayjs_locale_fi=e(u.dayjs)}(this,(function(u){"use strict";function e(u){return u&&"object"==typeof u&&"default"in u?u:{default:u}}var t=e(u);function n(u,e,t,n){var i={s:"muutama sekunti",m:"minuutti",mm:"%d minuuttia",h:"tunti",hh:"%d tuntia",d:"päivä",dd:"%d päivää",M:"kuukausi",MM:"%d kuukautta",y:"vuosi",yy:"%d vuotta",numbers:"nolla_yksi_kaksi_kolme_neljä_viisi_kuusi_seitsemän_kahdeksan_yhdeksän".split("_")},a={s:"muutaman sekunnin",m:"minuutin",mm:"%d minuutin",h:"tunnin",hh:"%d tunnin",d:"päivän",dd:"%d päivän",M:"kuukauden",MM:"%d kuukauden",y:"vuoden",yy:"%d vuoden",numbers:"nollan_yhden_kahden_kolmen_neljän_viiden_kuuden_seitsemän_kahdeksan_yhdeksän".split("_")},s=n&&!e?a:i,_=s[t];return u<10?_.replace("%d",s.numbers[u]):_.replace("%d",u)}var i={name:"fi",weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),ordinal:function(u){return u+"."},weekStart:1,yearStart:4,relativeTime:{future:"%s päästä",past:"%s sitten",s:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM[ta] YYYY",LLL:"D. MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, D. MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"D. MMM YYYY",lll:"D. MMM YYYY, [klo] HH.mm",llll:"ddd, D. MMM YYYY, [klo] HH.mm"}};return t.default.locale(i,null,!0),i})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/fo.js b/node_backend/node_modules/dayjs/locale/fo.js new file mode 100644 index 0000000000000000000000000000000000000000..ff6f8d8b976bcf103f11580d7018f2660d741f43 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/fo.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_fo=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),r={name:"fo",weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),weekStart:1,weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"}};return a.default.locale(r,null,!0),r})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/fr-ca.js b/node_backend/node_modules/dayjs/locale/fr-ca.js new file mode 100644 index 0000000000000000000000000000000000000000..9cc0d037d3cc656b21ae5d2cc77a6714f55be5e0 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/fr-ca.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_fr_ca=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=n(e),_={name:"fr-ca",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"}};return i.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/fr-ch.js b/node_backend/node_modules/dayjs/locale/fr-ch.js new file mode 100644 index 0000000000000000000000000000000000000000..1308de9967a226385be72f8c71cdc1129385424b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/fr-ch.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_fr_ch=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=n(e),_={name:"fr-ch",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),weekStart:1,weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"}};return i.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/fr.js b/node_backend/node_modules/dayjs/locale/fr.js new file mode 100644 index 0000000000000000000000000000000000000000..8c42be4be47d0888eaf8009f3033df110fd9e18a --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/fr.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_fr=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),i={name:"fr",weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinal:function(e){return""+e+(1===e?"er":"")}};return t.default.locale(i,null,!0),i})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/fy.js b/node_backend/node_modules/dayjs/locale/fy.js new file mode 100644 index 0000000000000000000000000000000000000000..291dd5f545b8b04d4c34b0175160fea6e9dd57db --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/fy.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_fy=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=n(e),t={name:"fy",weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),weekStart:1,weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"}};return i.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ga.js b/node_backend/node_modules/dayjs/locale/ga.js new file mode 100644 index 0000000000000000000000000000000000000000..0b2489f4a3ca44ef08ea4d1ec16f0f2d39b3220d --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ga.js @@ -0,0 +1 @@ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_ga=e(a.dayjs)}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var i=e(a),n={name:"ga",weekdays:"Dé Domhnaigh_Dé Luain_Dé Máirt_Dé Céadaoin_Déardaoin_Dé hAoine_Dé Satharn".split("_"),months:"Eanáir_Feabhra_Márta_Aibreán_Bealtaine_Méitheamh_Iúil_Lúnasa_Meán Fómhair_Deaireadh Fómhair_Samhain_Nollaig".split("_"),weekStart:1,weekdaysShort:"Dom_Lua_Mái_Céa_Déa_hAo_Sat".split("_"),monthsShort:"Eaná_Feab_Márt_Aibr_Beal_Méit_Iúil_Lúna_Meán_Deai_Samh_Noll".split("_"),weekdaysMin:"Do_Lu_Má_Ce_Dé_hA_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d mí",y:"bliain",yy:"%d bliain"}};return i.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/gd.js b/node_backend/node_modules/dayjs/locale/gd.js new file mode 100644 index 0000000000000000000000000000000000000000..c7e47ab09eb132eab59927077344280329970693 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/gd.js @@ -0,0 +1 @@ +!function(a,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],i):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_gd=i(a.dayjs)}(this,(function(a){"use strict";function i(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var n=i(a),e={name:"gd",weekdays:"Didòmhnaich_Diluain_Dimàirt_Diciadain_Diardaoin_Dihaoine_Disathairne".split("_"),months:"Am Faoilleach_An Gearran_Am Màrt_An Giblean_An Cèitean_An t-Ògmhios_An t-Iuchar_An Lùnastal_An t-Sultain_An Dàmhair_An t-Samhain_An Dùbhlachd".split("_"),weekStart:1,weekdaysShort:"Did_Dil_Dim_Dic_Dia_Dih_Dis".split("_"),monthsShort:"Faoi_Gear_Màrt_Gibl_Cèit_Ògmh_Iuch_Lùn_Sult_Dàmh_Samh_Dùbh".split("_"),weekdaysMin:"Dò_Lu_Mà_Ci_Ar_Ha_Sa".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"}};return n.default.locale(e,null,!0),e})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/gl.js b/node_backend/node_modules/dayjs/locale/gl.js new file mode 100644 index 0000000000000000000000000000000000000000..f5cf48325e62eb260cb739d089381361df475ea2 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/gl.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_gl=o(e.dayjs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),d={name:"gl",weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),weekStart:1,weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),ordinal:function(e){return e+"º"},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},relativeTime:{future:"en %s",past:"fai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"}};return s.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/gom-latn.js b/node_backend/node_modules/dayjs/locale/gom-latn.js new file mode 100644 index 0000000000000000000000000000000000000000..1596618449bb8a8f1928c97a59f657984e34ac27 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/gom-latn.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_gom_latn=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),_={name:"gom-latn",weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),weekStart:1,weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),ordinal:function(e){return e},formats:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"}};return a.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/gu.js b/node_backend/node_modules/dayjs/locale/gu.js new file mode 100644 index 0000000000000000000000000000000000000000..f42a17c53e933c0b06c9e951b9d9e07a363fd4a9 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/gu.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_gu=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"gu",weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/he.js b/node_backend/node_modules/dayjs/locale/he.js new file mode 100644 index 0000000000000000000000000000000000000000..3e4062e28e8ba6fe0bbaef423b46f88c56e58a99 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/he.js @@ -0,0 +1 @@ +!function(Y,M){"object"==typeof exports&&"undefined"!=typeof module?module.exports=M(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],M):(Y="undefined"!=typeof globalThis?globalThis:Y||self).dayjs_locale_he=M(Y.dayjs)}(this,(function(Y){"use strict";function M(Y){return Y&&"object"==typeof Y&&"default"in Y?Y:{default:Y}}var d=M(Y),e={s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:"%d שעות",hh2:"שעתיים",d:"יום",dd:"%d ימים",dd2:"יומיים",M:"חודש",MM:"%d חודשים",MM2:"חודשיים",y:"שנה",yy:"%d שנים",yy2:"שנתיים"};function _(Y,M,d){return(e[d+(2===Y?"2":"")]||e[d]).replace("%d",Y)}var l={name:"he",weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א׳_ב׳_ג׳_ד׳_ה׳_ו_ש׳".split("_"),months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו_פבר_מרץ_אפר_מאי_יונ_יול_אוג_ספט_אוק_נוב_דצמ".split("_"),relativeTime:{future:"בעוד %s",past:"לפני %s",s:_,m:_,mm:_,h:_,hh:_,d:_,dd:_,M:_,MM:_,y:_,yy:_},ordinal:function(Y){return Y},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"}};return d.default.locale(l,null,!0),l})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/hi.js b/node_backend/node_modules/dayjs/locale/hi.js new file mode 100644 index 0000000000000000000000000000000000000000..9dca3cf50d6ee517919bdf7fbffd0a0a283bf86b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/hi.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_hi=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"hi",weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/hr.js b/node_backend/node_modules/dayjs/locale/hr.js new file mode 100644 index 0000000000000000000000000000000000000000..12e83873137ba35454dc1e26cd958566c861eb3a --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/hr.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_hr=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),s="siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),n="siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_"),_=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/,o=function(e,a){return _.test(a)?s[e.month()]:n[e.month()]};o.s=n,o.f=s;var i={name:"hr",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),months:o,monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},relativeTime:{future:"za %s",past:"prije %s",s:"sekunda",m:"minuta",mm:"%d minuta",h:"sat",hh:"%d sati",d:"dan",dd:"%d dana",M:"mjesec",MM:"%d mjeseci",y:"godina",yy:"%d godine"},ordinal:function(e){return e+"."}};return t.default.locale(i,null,!0),i})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ht.js b/node_backend/node_modules/dayjs/locale/ht.js new file mode 100644 index 0000000000000000000000000000000000000000..3b2d9a3b68398ff7b98a0931ad5feaf3cbec6748 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ht.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ht=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=n(e),a={name:"ht",weekdays:"dimanch_lendi_madi_mèkredi_jedi_vandredi_samdi".split("_"),months:"janvye_fevriye_mas_avril_me_jen_jiyè_out_septanm_oktòb_novanm_desanm".split("_"),weekdaysShort:"dim._len._mad._mèk._jed._van._sam.".split("_"),monthsShort:"jan._fev._mas_avr._me_jen_jiyè._out_sept._okt._nov._des.".split("_"),weekdaysMin:"di_le_ma_mè_je_va_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"nan %s",past:"sa gen %s",s:"kèk segond",m:"yon minit",mm:"%d minit",h:"inèdtan",hh:"%d zè",d:"yon jou",dd:"%d jou",M:"yon mwa",MM:"%d mwa",y:"yon ane",yy:"%d ane"}};return d.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/hu.js b/node_backend/node_modules/dayjs/locale/hu.js new file mode 100644 index 0000000000000000000000000000000000000000..e2aff042bb0b79b37eab4048b23585de85c1a6ff --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/hu.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_hu=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),r={name:"hu",weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"%s múlva",past:"%s",s:function(e,n,t,r){return"néhány másodperc"+(r||n?"":"e")},m:function(e,n,t,r){return"egy perc"+(r||n?"":"e")},mm:function(e,n,t,r){return e+" perc"+(r||n?"":"e")},h:function(e,n,t,r){return"egy "+(r||n?"óra":"órája")},hh:function(e,n,t,r){return e+" "+(r||n?"óra":"órája")},d:function(e,n,t,r){return"egy "+(r||n?"nap":"napja")},dd:function(e,n,t,r){return e+" "+(r||n?"nap":"napja")},M:function(e,n,t,r){return"egy "+(r||n?"hónap":"hónapja")},MM:function(e,n,t,r){return e+" "+(r||n?"hónap":"hónapja")},y:function(e,n,t,r){return"egy "+(r||n?"év":"éve")},yy:function(e,n,t,r){return e+" "+(r||n?"év":"éve")}},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"}};return t.default.locale(r,null,!0),r})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/hy-am.js b/node_backend/node_modules/dayjs/locale/hy-am.js new file mode 100644 index 0000000000000000000000000000000000000000..44daa15ba1d56afc210b459550b66e1d5cef1321 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/hy-am.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_hy_am=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"hy-am",weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),months:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),weekStart:1,weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/id.js b/node_backend/node_modules/dayjs/locale/id.js new file mode 100644 index 0000000000000000000000000000000000000000..0637a6516b7603c13b99c5e73d3abf5304162c8a --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/id.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_id=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"id",weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/index.d.ts b/node_backend/node_modules/dayjs/locale/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd2dca2cdcf698d81ee5718333e92418d2dbb123 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/index.d.ts @@ -0,0 +1,11 @@ +/// + +declare module 'dayjs/locale/*' { + namespace locale { + interface Locale extends ILocale {} + } + + const locale: locale.Locale + + export = locale +} diff --git a/node_backend/node_modules/dayjs/locale/is.js b/node_backend/node_modules/dayjs/locale/is.js new file mode 100644 index 0000000000000000000000000000000000000000..de6799ba2b8a747b390c32b222397de8b3e949b6 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/is.js @@ -0,0 +1 @@ +!function(u,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],r):(u="undefined"!=typeof globalThis?globalThis:u||self).dayjs_locale_is=r(u.dayjs)}(this,(function(u){"use strict";function r(u){return u&&"object"==typeof u&&"default"in u?u:{default:u}}var n=r(u),e={s:["nokkrar sekúndur","nokkrar sekúndur","nokkrum sekúndum"],m:["mínúta","mínútu","mínútu"],mm:["mínútur","mínútur","mínútum"],h:["klukkustund","klukkustund","klukkustund"],hh:["klukkustundir","klukkustundir","klukkustundum"],d:["dagur","dag","degi"],dd:["dagar","daga","dögum"],M:["mánuður","mánuð","mánuði"],MM:["mánuðir","mánuði","mánuðum"],y:["ár","ár","ári"],yy:["ár","ár","árum"]};function t(u,r,n,t){var a=function(u,r,n,t){var a=t?0:n?1:2,d=2===u.length&&r%10==1?u[0]:u,m=e[d][a];return 1===u.length?m:"%d "+m}(n,u,t,r);return a.replace("%d",u)}var a={name:"is",weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),weekStart:1,weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),ordinal:function(u){return u},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t}};return n.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/it-ch.js b/node_backend/node_modules/dayjs/locale/it-ch.js new file mode 100644 index 0000000000000000000000000000000000000000..7e1c92f7726a3f7ef67f7c00e0b6e8695e456caa --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/it-ch.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_it_ch=o(e.dayjs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(e),t={name:"it-ch",weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"}};return n.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/it.js b/node_backend/node_modules/dayjs/locale/it.js new file mode 100644 index 0000000000000000000000000000000000000000..2ddf44b7c8fc5f409092c00b4005e6144d61bbb0 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/it.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_it=o(e.dayjs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=o(e),n={name:"it",weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),weekStart:1,monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"tra %s",past:"%s fa",s:"qualche secondo",m:"un minuto",mm:"%d minuti",h:"un' ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinal:function(e){return e+"º"}};return t.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ja.js b/node_backend/node_modules/dayjs/locale/ja.js new file mode 100644 index 0000000000000000000000000000000000000000..cd52f361d115267c47e5d03843928d3586d60bfa --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ja.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ja=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ja",weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(e){return e+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiem:function(e){return e<12?"午前":"午後"},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/jv.js b/node_backend/node_modules/dayjs/locale/jv.js new file mode 100644 index 0000000000000000000000000000000000000000..7566308523e86412498c3a221d31c6bbeef035d3 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/jv.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_jv=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),_={name:"jv",weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),weekStart:1,weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),ordinal:function(e){return e},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ka.js b/node_backend/node_modules/dayjs/locale/ka.js new file mode 100644 index 0000000000000000000000000000000000000000..7b2ce53248389996c97a70c4da1d11b8e30a668c --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ka.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ka=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ka",weekdays:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekStart:1,formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"%s შემდეგ",past:"%s წინ",s:"წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათის",d:"დღეს",dd:"%d დღის განმავლობაში",M:"თვის",MM:"%d თვის",y:"წელი",yy:"%d წლის"},ordinal:function(_){return _}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/kk.js b/node_backend/node_modules/dayjs/locale/kk.js new file mode 100644 index 0000000000000000000000000000000000000000..a2f17a33843ce80ec6c6ff3efbcd3c18b0ac18e7 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/kk.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_kk=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"kk",weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekStart:1,relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/km.js b/node_backend/node_modules/dayjs/locale/km.js new file mode 100644 index 0000000000000000000000000000000000000000..528923e78702032f4dc05c7006cf5001765e4bf5 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/km.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_km=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"km",weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekStart:1,weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/kn.js b/node_backend/node_modules/dayjs/locale/kn.js new file mode 100644 index 0000000000000000000000000000000000000000..e040ebab2f4830db29193d9c2f788789811c3345 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/kn.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_kn=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"kn",weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ko.js b/node_backend/node_modules/dayjs/locale/ko.js new file mode 100644 index 0000000000000000000000000000000000000000..cfe8b37973fc9f1802c8beed204d2643092e45e3 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ko.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ko=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=_(e),t={name:"ko",weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),ordinal:function(e){return e+"일"},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},meridiem:function(e){return e<12?"오전":"오후"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"}};return d.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ku.js b/node_backend/node_modules/dayjs/locale/ku.js new file mode 100644 index 0000000000000000000000000000000000000000..cd98fc2c88c553a6da1986603ee6cf8a321f20c1 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ku.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("dayjs")):"function"==typeof define&&define.amd?define(["exports","dayjs"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ku={},e.dayjs)}(this,(function(e,t){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(t),d={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},o={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},u=["کانوونی دووەم","شوبات","ئادار","نیسان","ئایار","حوزەیران","تەممووز","ئاب","ئەیلوول","تشرینی یەکەم","تشرینی دووەم","کانوونی یەکەم"],i={name:"ku",months:u,monthsShort:u,weekdays:"یەکشەممە_دووشەممە_سێشەممە_چوارشەممە_پێنجشەممە_هەینی_شەممە".split("_"),weekdaysShort:"یەکشەم_دووشەم_سێشەم_چوارشەم_پێنجشەم_هەینی_شەممە".split("_"),weekStart:6,weekdaysMin:"ی_د_س_چ_پ_هـ_ش".split("_"),preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return o[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return d[e]})).replace(/,/g,"،")},ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiem:function(e){return e<12?"پ.ن":"د.ن"},relativeTime:{future:"لە %s",past:"لەمەوپێش %s",s:"چەند چرکەیەک",m:"یەک خولەک",mm:"%d خولەک",h:"یەک کاتژمێر",hh:"%d کاتژمێر",d:"یەک ڕۆژ",dd:"%d ڕۆژ",M:"یەک مانگ",MM:"%d مانگ",y:"یەک ساڵ",yy:"%d ساڵ"}};r.default.locale(i,null,!0),e.default=i,e.englishToArabicNumbersMap=d,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ky.js b/node_backend/node_modules/dayjs/locale/ky.js new file mode 100644 index 0000000000000000000000000000000000000000..1fdc40e3e8e43dad0e35f0448b36d1a2ebda2f30 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ky.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ky=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ky",weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),weekStart:1,weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/lb.js b/node_backend/node_modules/dayjs/locale/lb.js new file mode 100644 index 0000000000000000000000000000000000000000..b6895f24968583993202ac626f84ee01c32105a5 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/lb.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_lb=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),n={name:"lb",weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),weekStart:1,weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"}};return t.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/lo.js b/node_backend/node_modules/dayjs/locale/lo.js new file mode 100644 index 0000000000000000000000000000000000000000..1bf09d1db4bb43b30e508f823532674bf5cc5476 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/lo.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_lo=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"lo",weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/lt.js b/node_backend/node_modules/dayjs/locale/lt.js new file mode 100644 index 0000000000000000000000000000000000000000..52f22258328e4968a564cece6ac8804bf5c8e099 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/lt.js @@ -0,0 +1 @@ +!function(e,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],s):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_lt=s(e.dayjs)}(this,(function(e){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=s(e),d="sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),a="sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),l=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,M=function(e,s){return l.test(s)?d[e.month()]:a[e.month()]};M.s=a,M.f=d;var t={name:"lt",weekdays:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),weekdaysShort:"sek_pir_ant_tre_ket_pen_šeš".split("_"),weekdaysMin:"s_p_a_t_k_pn_š".split("_"),months:M,monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"už %s",past:"prieš %s",s:"kelias sekundes",m:"minutę",mm:"%d minutes",h:"valandą",hh:"%d valandas",d:"dieną",dd:"%d dienas",M:"mėnesį",MM:"%d mėnesius",y:"metus",yy:"%d metus"},format:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"}};return i.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/lv.js b/node_backend/node_modules/dayjs/locale/lv.js new file mode 100644 index 0000000000000000000000000000000000000000..98fc1265a81993cf0040a4c6ea0b2e6d4513a8b6 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/lv.js @@ -0,0 +1 @@ +!function(e,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],s):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_lv=s(e.dayjs)}(this,(function(e){"use strict";function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=s(e),d={name:"lv",weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),weekStart:1,weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},relativeTime:{future:"pēc %s",past:"pirms %s",s:"dažām sekundēm",m:"minūtes",mm:"%d minūtēm",h:"stundas",hh:"%d stundām",d:"dienas",dd:"%d dienām",M:"mēneša",MM:"%d mēnešiem",y:"gada",yy:"%d gadiem"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/me.js b/node_backend/node_modules/dayjs/locale/me.js new file mode 100644 index 0000000000000000000000000000000000000000..ecb22aef8a77a8eb804dcf5289861dfc667407fa --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/me.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_me=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),a={name:"me",weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),weekStart:1,weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"}};return _.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/mi.js b/node_backend/node_modules/dayjs/locale/mi.js new file mode 100644 index 0000000000000000000000000000000000000000..1b328f07c88b72e6b6a6fe8db34b43d035918e81 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/mi.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_mi=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(e),t={name:"mi",weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),weekStart:1,weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"}};return i.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/mk.js b/node_backend/node_modules/dayjs/locale/mk.js new file mode 100644 index 0000000000000000000000000000000000000000..0f2ece14b5fb3ae89c139cbc2a09bdb007b222d7 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/mk.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_mk=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"mk",weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),weekStart:1,weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),ordinal:function(e){return e},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ml.js b/node_backend/node_modules/dayjs/locale/ml.js new file mode 100644 index 0000000000000000000000000000000000000000..8e7db4f781ec2c502a829bb42a7e556f261b0212 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ml.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ml=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ml",weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/mn.js b/node_backend/node_modules/dayjs/locale/mn.js new file mode 100644 index 0000000000000000000000000000000000000000..4de299bf5b180ccc77d502b6ac64a4f08072d39b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/mn.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_mn=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"mn",weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},relativeTime:{future:"%s",past:"%s",s:"саяхан",m:"м",mm:"%dм",h:"1ц",hh:"%dц",d:"1ө",dd:"%dө",M:"1с",MM:"%dс",y:"1ж",yy:"%dж"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/mr.js b/node_backend/node_modules/dayjs/locale/mr.js new file mode 100644 index 0000000000000000000000000000000000000000..af6bb3aea253f9b14ae79ee59e777aaf82b5027d --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/mr.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_mr=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),n={name:"mr",weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"}};return t.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ms-my.js b/node_backend/node_modules/dayjs/locale/ms-my.js new file mode 100644 index 0000000000000000000000000000000000000000..1917d7ac2afd16b5b129c8be22d236ca86008a44 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ms-my.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ms_my=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),_={name:"ms-my",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),weekStart:1,weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),ordinal:function(e){return e},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ms.js b/node_backend/node_modules/dayjs/locale/ms.js new file mode 100644 index 0000000000000000000000000000000000000000..be4f88ea2c73ed17ce0dd9beb295bb1db5a350a5 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ms.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ms=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(e),s={name:"ms",weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekStart:1,formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH.mm",LLLL:"dddd, D MMMM YYYY HH.mm"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},ordinal:function(e){return e+"."}};return t.default.locale(s,null,!0),s})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/mt.js b/node_backend/node_modules/dayjs/locale/mt.js new file mode 100644 index 0000000000000000000000000000000000000000..43d481a3d69ce0195728c603c1f68c9b3393d0f1 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/mt.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_mt=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),i={name:"mt",weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),weekStart:1,weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"}};return a.default.locale(i,null,!0),i})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/my.js b/node_backend/node_modules/dayjs/locale/my.js new file mode 100644 index 0000000000000000000000000000000000000000..95adead3efd55e328ad7a8b7ca3d147420c8eb36 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/my.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_my=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"my",weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),weekStart:1,weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/nb.js b/node_backend/node_modules/dayjs/locale/nb.js new file mode 100644 index 0000000000000000000000000000000000000000..ece1f317e77bc406b1df16c8879dd6c4b7f89a77 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/nb.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_nb=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),a={name:"nb",weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"}};return n.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ne.js b/node_backend/node_modules/dayjs/locale/ne.js new file mode 100644 index 0000000000000000000000000000000000000000..3d166bcc0cfb2a4756493e4d506da58ebf07548b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ne.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ne=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"ne",weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मे_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),relativeTime:{future:"%s पछि",past:"%s अघि",s:"सेकेन्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"घन्टा",hh:"%d घन्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक वर्ष",yy:"%d वर्ष"},ordinal:function(e){return(""+e).replace(/\d/g,(function(e){return"०१२३४५६७८९"[e]}))},formats:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/nl-be.js b/node_backend/node_modules/dayjs/locale/nl-be.js new file mode 100644 index 0000000000000000000000000000000000000000..7a2f60f5b04acd710dd266b5fa2dd9f367fc8442 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/nl-be.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_nl_be=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),d={name:"nl-be",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),weekStart:1,weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"}};return n.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/nl.js b/node_backend/node_modules/dayjs/locale/nl.js new file mode 100644 index 0000000000000000000000000000000000000000..47e789f24206fca428ada7ac0d3f01a22f4df34e --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/nl.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_nl=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=a(e),n={name:"nl",weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ordinal:function(e){return"["+e+(1===e||8===e||e>=20?"ste":"de")+"]"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"een minuut",mm:"%d minuten",h:"een uur",hh:"%d uur",d:"een dag",dd:"%d dagen",M:"een maand",MM:"%d maanden",y:"een jaar",yy:"%d jaar"}};return d.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/nn.js b/node_backend/node_modules/dayjs/locale/nn.js new file mode 100644 index 0000000000000000000000000000000000000000..eba3c244a3891ded41ee910f476aa826e4866531 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/nn.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_nn=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),a={name:"nn",weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_la".split("_"),months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),ordinal:function(e){return e+"."},weekStart:1,relativeTime:{future:"om %s",past:"for %s sidan",s:"nokre sekund",m:"eitt minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månadar",y:"eitt år",yy:"%d år"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"}};return n.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/oc-lnc.js b/node_backend/node_modules/dayjs/locale/oc-lnc.js new file mode 100644 index 0000000000000000000000000000000000000000..12e162c3038abbe919d3c44b3650010c36490cdd --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/oc-lnc.js @@ -0,0 +1 @@ +!function(e,d){"object"==typeof exports&&"undefined"!=typeof module?module.exports=d(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],d):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_oc_lnc=d(e.dayjs)}(this,(function(e){"use strict";function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=d(e),s={name:"oc-lnc",weekdays:"dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte".split("_"),weekdaysShort:"Dg_Dl_Dm_Dc_Dj_Dv_Ds".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),months:"genièr_febrièr_març_abrial_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre".split("_"),monthsShort:"gen_feb_març_abr_mai_junh_julh_ago_set_oct_nov_dec".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"unas segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},ordinal:function(e){return e+"º"}};return n.default.locale(s,null,!0),s})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/pa-in.js b/node_backend/node_modules/dayjs/locale/pa-in.js new file mode 100644 index 0000000000000000000000000000000000000000..4ee388447de9f75e9fe18adc86fbd32566380349 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/pa-in.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_pa_in=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"pa-in",weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/pl.js b/node_backend/node_modules/dayjs/locale/pl.js new file mode 100644 index 0000000000000000000000000000000000000000..3f5148c4a5f56160117a9fdc3f8f50229904209c --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/pl.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_pl=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=t(e);function a(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function n(e,t,i){var n=e+" ";switch(i){case"m":return t?"minuta":"minutę";case"mm":return n+(a(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return n+(a(e)?"godziny":"godzin");case"MM":return n+(a(e)?"miesiące":"miesięcy");case"yy":return n+(a(e)?"lata":"lat")}}var r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),_="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),s=/D MMMM/,d=function(e,t){return s.test(t)?r[e.month()]:_[e.month()]};d.s=_,d.f=r;var o={name:"pl",weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),months:d,monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),ordinal:function(e){return e+"."},weekStart:1,yearStart:4,relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:n,mm:n,h:n,hh:n,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:n,y:"rok",yy:n},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return i.default.locale(o,null,!0),o})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/pt-br.js b/node_backend/node_modules/dayjs/locale/pt-br.js new file mode 100644 index 0000000000000000000000000000000000000000..629c2f1780ab818e51f06080a3202466a7e3e371 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/pt-br.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_pt_br=o(e.dayjs)}(this,(function(e){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(e),s={name:"pt-br",weekdays:"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"º"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"}};return a.default.locale(s,null,!0),s})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/pt.js b/node_backend/node_modules/dayjs/locale/pt.js new file mode 100644 index 0000000000000000000000000000000000000000..91652e816fe8e4ac16aedfa3caabf84b7ab86056 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/pt.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_pt=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=a(e),t={name:"pt",weekdays:"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sab".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sa".split("_"),months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),ordinal:function(e){return e+"º"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},relativeTime:{future:"em %s",past:"há %s",s:"alguns segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"}};return o.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/rn.js b/node_backend/node_modules/dayjs/locale/rn.js new file mode 100644 index 0000000000000000000000000000000000000000..a0933643fe0a8f45a0d1bcbaf8759c098e153a88 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/rn.js @@ -0,0 +1 @@ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_rn=e(a.dayjs)}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var t=e(a),u={name:"rn",weekdays:"Ku wa Mungu_Ku wa Mbere_Ku wa Kabiri_Ku wa Gatatu_Ku wa Kane_Ku wa Gatanu_Ku wa Gatandatu".split("_"),weekdaysShort:"Kngu_Kmbr_Kbri_Ktat_Kkan_Ktan_Kdat".split("_"),weekdaysMin:"K7_K1_K2_K3_K4_K5_K6".split("_"),months:"Nzero_Ruhuhuma_Ntwarante_Ndamukiza_Rusama_Ruhenshi_Mukakaro_Myandagaro_Nyakanga_Gitugutu_Munyonyo_Kigarama".split("_"),monthsShort:"Nzer_Ruhuh_Ntwar_Ndam_Rus_Ruhen_Muk_Myand_Nyak_Git_Muny_Kig".split("_"),weekStart:1,ordinal:function(a){return a},relativeTime:{future:"mu %s",past:"%s",s:"amasegonda",m:"Umunota",mm:"%d iminota",h:"isaha",hh:"%d amasaha",d:"Umunsi",dd:"%d iminsi",M:"ukwezi",MM:"%d amezi",y:"umwaka",yy:"%d imyaka"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return t.default.locale(u,null,!0),u})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ro.js b/node_backend/node_modules/dayjs/locale/ro.js new file mode 100644 index 0000000000000000000000000000000000000000..445af3dce406bed2f5de5808b0f10d7a9eaff946 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ro.js @@ -0,0 +1 @@ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],i):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ro=i(e.dayjs)}(this,(function(e){"use strict";function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=i(e),_={name:"ro",weekdays:"Duminică_Luni_Marți_Miercuri_Joi_Vineri_Sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian._Febr._Mart._Apr._Mai_Iun._Iul._Aug._Sept._Oct._Nov._Dec.".split("_"),weekStart:1,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},relativeTime:{future:"peste %s",past:"acum %s",s:"câteva secunde",m:"un minut",mm:"%d minute",h:"o oră",hh:"%d ore",d:"o zi",dd:"%d zile",M:"o lună",MM:"%d luni",y:"un an",yy:"%d ani"},ordinal:function(e){return e}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ru.js b/node_backend/node_modules/dayjs/locale/ru.js new file mode 100644 index 0000000000000000000000000000000000000000..f8967908f3860043c2a30c9f02813d3e9568e2c7 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ru.js @@ -0,0 +1 @@ +!function(_,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ru=t(_.dayjs)}(this,(function(_){"use strict";function t(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var e=t(_),n="января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),s="январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),r="янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),o="янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_"),i=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function d(_,t,e){var n,s;return"m"===e?t?"минута":"минуту":_+" "+(n=+_,s={mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[e].split("_"),n%10==1&&n%100!=11?s[0]:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?s[1]:s[2])}var u=function(_,t){return i.test(t)?n[_.month()]:s[_.month()]};u.s=s,u.f=n;var a=function(_,t){return i.test(t)?r[_.month()]:o[_.month()]};a.s=o,a.f=r;var m={name:"ru",weekdays:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),weekdaysShort:"вск_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),months:u,monthsShort:a,weekStart:1,yearStart:4,formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:d,mm:d,h:"час",hh:d,d:"день",dd:d,M:"месяц",MM:d,y:"год",yy:d},ordinal:function(_){return _},meridiem:function(_){return _<4?"ночи":_<12?"утра":_<17?"дня":"вечера"}};return e.default.locale(m,null,!0),m})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/rw.js b/node_backend/node_modules/dayjs/locale/rw.js new file mode 100644 index 0000000000000000000000000000000000000000..bf4c280c220133a92e18a8dff5f73fa3db90bfc9 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/rw.js @@ -0,0 +1 @@ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_rw=e(a.dayjs)}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var u=e(a),t={name:"rw",weekdays:"Ku Cyumweru_Kuwa Mbere_Kuwa Kabiri_Kuwa Gatatu_Kuwa Kane_Kuwa Gatanu_Kuwa Gatandatu".split("_"),months:"Mutarama_Gashyantare_Werurwe_Mata_Gicurasi_Kamena_Nyakanga_Kanama_Nzeri_Ukwakira_Ugushyingo_Ukuboza".split("_"),relativeTime:{future:"mu %s",past:"%s",s:"amasegonda",m:"Umunota",mm:"%d iminota",h:"isaha",hh:"%d amasaha",d:"Umunsi",dd:"%d iminsi",M:"ukwezi",MM:"%d amezi",y:"umwaka",yy:"%d imyaka"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},ordinal:function(a){return a}};return u.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/sd.js b/node_backend/node_modules/dayjs/locale/sd.js new file mode 100644 index 0000000000000000000000000000000000000000..b1e1ee4874cf9df336c37cfc3553416d0c53788f --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/sd.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_sd=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"sd",weekdays:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),months:"جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر".split("_"),weekStart:1,weekdaysShort:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),monthsShort:"جنوري_فيبروري_مارچ_اپريل_مئي_جون_جولاءِ_آگسٽ_سيپٽمبر_آڪٽوبر_نومبر_ڊسمبر".split("_"),weekdaysMin:"آچر_سومر_اڱارو_اربع_خميس_جمع_ڇنڇر".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/se.js b/node_backend/node_modules/dayjs/locale/se.js new file mode 100644 index 0000000000000000000000000000000000000000..2cbb22462aa36ef89a673451ed73225770e1bc1d --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/se.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_se=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),t={name:"se",weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),weekStart:1,weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"}};return n.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/si.js b/node_backend/node_modules/dayjs/locale/si.js new file mode 100644 index 0000000000000000000000000000000000000000..216ae8a88a0eb70de5705b342e73156336e91bda --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/si.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_si=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"si",weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),months:"දුරුතු_නවම්_මැදින්_බක්_වෙසක්_පොසොන්_ඇසළ_නිකිණි_බිනර_වප්_ඉල්_උඳුවප්".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),monthsShort:"දුරු_නව_මැදි_බක්_වෙස_පොසො_ඇස_නිකි_බින_වප්_ඉල්_උඳු".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),ordinal:function(_){return _},formats:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"විනාඩිය",mm:"විනාඩි %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/sk.js b/node_backend/node_modules/dayjs/locale/sk.js new file mode 100644 index 0000000000000000000000000000000000000000..b2707e3232570c2b3b06fb014c609738e93e88d2 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/sk.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_sk=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e);function r(e){return e>1&&e<5&&1!=~~(e/10)}function o(e,t,n,o){var a=e+" ";switch(n){case"s":return t||o?"pár sekúnd":"pár sekundami";case"m":return t?"minúta":o?"minútu":"minútou";case"mm":return t||o?a+(r(e)?"minúty":"minút"):a+"minútami";case"h":return t?"hodina":o?"hodinu":"hodinou";case"hh":return t||o?a+(r(e)?"hodiny":"hodín"):a+"hodinami";case"d":return t||o?"deň":"dňom";case"dd":return t||o?a+(r(e)?"dni":"dní"):a+"dňami";case"M":return t||o?"mesiac":"mesiacom";case"MM":return t||o?a+(r(e)?"mesiace":"mesiacov"):a+"mesiacmi";case"y":return t||o?"rok":"rokom";case"yy":return t||o?a+(r(e)?"roky":"rokov"):a+"rokmi"}}var a={name:"sk",weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),months:"január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),monthsShort:"jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"za %s",past:"pred %s",s:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o}};return n.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/sl.js b/node_backend/node_modules/dayjs/locale/sl.js new file mode 100644 index 0000000000000000000000000000000000000000..162d2ecd3808ec55600a60dae6e274a598bb031c --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/sl.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_sl=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e);function r(e){return e%100==2}function a(e){return e%100==3||e%100==4}function s(e,n,t,s){var m=e+" ";switch(t){case"s":return n||s?"nekaj sekund":"nekaj sekundami";case"m":return n?"ena minuta":"eno minuto";case"mm":return r(e)?m+(n||s?"minuti":"minutama"):a(e)?m+(n||s?"minute":"minutami"):m+(n||s?"minut":"minutami");case"h":return n?"ena ura":"eno uro";case"hh":return r(e)?m+(n||s?"uri":"urama"):a(e)?m+(n||s?"ure":"urami"):m+(n||s?"ur":"urami");case"d":return n||s?"en dan":"enim dnem";case"dd":return r(e)?m+(n||s?"dneva":"dnevoma"):m+(n||s?"dni":"dnevi");case"M":return n||s?"en mesec":"enim mesecem";case"MM":return r(e)?m+(n||s?"meseca":"mesecema"):a(e)?m+(n||s?"mesece":"meseci"):m+(n||s?"mesecev":"meseci");case"y":return n||s?"eno leto":"enim letom";case"yy":return r(e)?m+(n||s?"leti":"letoma"):a(e)?m+(n||s?"leta":"leti"):m+(n||s?"let":"leti")}}var m={name:"sl",weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),weekStart:1,weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm",l:"D. M. YYYY"},relativeTime:{future:"čez %s",past:"pred %s",s:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s}};return t.default.locale(m,null,!0),m})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/sq.js b/node_backend/node_modules/dayjs/locale/sq.js new file mode 100644 index 0000000000000000000000000000000000000000..99bca9a27ceb3e4a30b771d204929a57a8c2ffdd --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/sq.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_sq=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),n={name:"sq",weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),weekStart:1,weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"}};return _.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/sr-cyrl.js b/node_backend/node_modules/dayjs/locale/sr-cyrl.js new file mode 100644 index 0000000000000000000000000000000000000000..90daeebd79595d66733e7d85222d3382371b6acb --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/sr-cyrl.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_sr_cyrl=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e),a={words:{m:["један минут","једног минута"],mm:["%d минут","%d минута","%d минута"],h:["један сат","једног сата"],hh:["%d сат","%d сата","%d сати"],d:["један дан","једног дана"],dd:["%d дан","%d дана","%d дана"],M:["један месец","једног месеца"],MM:["%d месец","%d месеца","%d месеци"],y:["једну годину","једне године"],yy:["%d годину","%d године","%d година"]},correctGrammarCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},relativeTimeFormatter:function(e,t,r,d){var i=a.words[r];if(1===r.length)return"y"===r&&t?"једна година":d||t?i[0]:i[1];var m=a.correctGrammarCase(e,i);return"yy"===r&&t&&"%d годину"===m?e+" година":m.replace("%d",e)}},d={name:"sr-cyrl",weekdays:"Недеља_Понедељак_Уторак_Среда_Четвртак_Петак_Субота".split("_"),weekdaysShort:"Нед._Пон._Уто._Сре._Чет._Пет._Суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),months:"Јануар_Фебруар_Март_Април_Мај_Јун_Јул_Август_Септембар_Октобар_Новембар_Децембар".split("_"),monthsShort:"Јан._Феб._Мар._Апр._Мај_Јун_Јул_Авг._Сеп._Окт._Нов._Дец.".split("_"),weekStart:1,relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:a.relativeTimeFormatter,mm:a.relativeTimeFormatter,h:a.relativeTimeFormatter,hh:a.relativeTimeFormatter,d:a.relativeTimeFormatter,dd:a.relativeTimeFormatter,M:a.relativeTimeFormatter,MM:a.relativeTimeFormatter,y:a.relativeTimeFormatter,yy:a.relativeTimeFormatter},ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"}};return r.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/sr.js b/node_backend/node_modules/dayjs/locale/sr.js new file mode 100644 index 0000000000000000000000000000000000000000..35a5b55e5d6e6654ee9ce74cea6cda0f6f2a146d --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/sr.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_sr=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),r={words:{m:["jedan minut","jednog minuta"],mm:["%d minut","%d minuta","%d minuta"],h:["jedan sat","jednog sata"],hh:["%d sat","%d sata","%d sati"],d:["jedan dan","jednog dana"],dd:["%d dan","%d dana","%d dana"],M:["jedan mesec","jednog meseca"],MM:["%d mesec","%d meseca","%d meseci"],y:["jednu godinu","jedne godine"],yy:["%d godinu","%d godine","%d godina"]},correctGrammarCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},relativeTimeFormatter:function(e,t,a,d){var n=r.words[a];if(1===a.length)return"y"===a&&t?"jedna godina":d||t?n[0]:n[1];var i=r.correctGrammarCase(e,n);return"yy"===a&&t&&"%d godinu"===i?e+" godina":i.replace("%d",e)}},d={name:"sr",weekdays:"Nedelja_Ponedeljak_Utorak_Sreda_Četvrtak_Petak_Subota".split("_"),weekdaysShort:"Ned._Pon._Uto._Sre._Čet._Pet._Sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),months:"Januar_Februar_Mart_April_Maj_Jun_Jul_Avgust_Septembar_Oktobar_Novembar_Decembar".split("_"),monthsShort:"Jan._Feb._Mar._Apr._Maj_Jun_Jul_Avg._Sep._Okt._Nov._Dec.".split("_"),weekStart:1,relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:r.relativeTimeFormatter,mm:r.relativeTimeFormatter,h:r.relativeTimeFormatter,hh:r.relativeTimeFormatter,d:r.relativeTimeFormatter,dd:r.relativeTimeFormatter,M:r.relativeTimeFormatter,MM:r.relativeTimeFormatter,y:r.relativeTimeFormatter,yy:r.relativeTimeFormatter},ordinal:function(e){return e+"."},formats:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"}};return a.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ss.js b/node_backend/node_modules/dayjs/locale/ss.js new file mode 100644 index 0000000000000000000000000000000000000000..4df16a5b41be39b30a832653650d53455244dde0 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ss.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_ss=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=n(e),i={name:"ss",weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),weekStart:1,weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"}};return a.default.locale(i,null,!0),i})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/sv-fi.js b/node_backend/node_modules/dayjs/locale/sv-fi.js new file mode 100644 index 0000000000000000000000000000000000000000..5b2f8afb13ebf4aa2b444c3953550e0ff5b166e2 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/sv-fi.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_sv_fi=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),d={name:"sv-fi",weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var t=e%10;return"["+e+(1===t||2===t?"a":"e")+"]"},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY, [kl.] HH.mm",LLLL:"dddd, D. MMMM YYYY, [kl.] HH.mm",l:"D.M.YYYY",ll:"D. MMM YYYY",lll:"D. MMM YYYY, [kl.] HH.mm",llll:"ddd, D. MMM YYYY, [kl.] HH.mm"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"}};return a.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/sv.js b/node_backend/node_modules/dayjs/locale/sv.js new file mode 100644 index 0000000000000000000000000000000000000000..16e6d3723b1325d80295f2c6f5137fce7f3ea175 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/sv.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_sv=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e),d={name:"sv",weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekStart:1,yearStart:4,ordinal:function(e){var t=e%10;return"["+e+(1===t||2===t?"a":"e")+"]"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"}};return a.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/sw.js b/node_backend/node_modules/dayjs/locale/sw.js new file mode 100644 index 0000000000000000000000000000000000000000..a13bd44b37b3be809665c3d4ce1d02d447f0977c --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/sw.js @@ -0,0 +1 @@ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_sw=e(a.dayjs)}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var i=e(a),t={name:"sw",weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekStart:1,ordinal:function(a){return a},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return i.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ta.js b/node_backend/node_modules/dayjs/locale/ta.js new file mode 100644 index 0000000000000000000000000000000000000000..406cf134b43bcd9c3a306c59c679263c0a0df3a2 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ta.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ta=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ta",weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/te.js b/node_backend/node_modules/dayjs/locale/te.js new file mode 100644 index 0000000000000000000000000000000000000000..c7593db9e0abc4d38c111b4131f291be86a4d8bf --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/te.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_te=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"te",weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),ordinal:function(_){return _},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/tet.js b/node_backend/node_modules/dayjs/locale/tet.js new file mode 100644 index 0000000000000000000000000000000000000000..aec6f682727a333d9844c68849e1b2d5b6a73387 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/tet.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_tet=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=t(e),a={name:"tet",weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),weekStart:1,weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"}};return u.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/tg.js b/node_backend/node_modules/dayjs/locale/tg.js new file mode 100644 index 0000000000000000000000000000000000000000..7643103019639fe186d66c2345e5a9a1ac3820e3 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/tg.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_tg=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"tg",weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),weekStart:1,weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/th.js b/node_backend/node_modules/dayjs/locale/th.js new file mode 100644 index 0000000000000000000000000000000000000000..185d4ebc6cb1c021eef100fc7ec0d941bab8b2e0 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/th.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_th=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"th",weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),formats:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"},ordinal:function(_){return _+"."}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/tk.js b/node_backend/node_modules/dayjs/locale/tk.js new file mode 100644 index 0000000000000000000000000000000000000000..1e737b5aba162efd83d7ec8809c6cbadb9f63679 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/tk.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_tk=n(e.dayjs)}(this,(function(e){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e),_={name:"tk",weekdays:"Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe".split("_"),weekdaysShort:"Ýek_Duş_Siş_Çar_Pen_Ann_Şen".split("_"),weekdaysMin:"Ýk_Dş_Sş_Çr_Pn_An_Şn".split("_"),months:"Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr".split("_"),monthsShort:"Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s soň",past:"%s öň",s:"birnäçe sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir gün",dd:"%d gün",M:"bir aý",MM:"%d aý",y:"bir ýyl",yy:"%d ýyl"},ordinal:function(e){return e+"."}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/tl-ph.js b/node_backend/node_modules/dayjs/locale/tl-ph.js new file mode 100644 index 0000000000000000000000000000000000000000..885f8a9eafc3d2b30c105d8d4396ab0840d84f6a --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/tl-ph.js @@ -0,0 +1 @@ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],a):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_tl_ph=a(e.dayjs)}(this,(function(e){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),t={name:"tl-ph",weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),weekStart:1,weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"}};return n.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/tlh.js b/node_backend/node_modules/dayjs/locale/tlh.js new file mode 100644 index 0000000000000000000000000000000000000000..03d89962239a5540ceea38000c4c97999539db4e --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/tlh.js @@ -0,0 +1 @@ +!function(a,j){"object"==typeof exports&&"undefined"!=typeof module?module.exports=j(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],j):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_tlh=j(a.dayjs)}(this,(function(a){"use strict";function j(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var t=j(a),e={name:"tlh",weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),weekStart:1,weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"}};return t.default.locale(e,null,!0),e})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/tr.js b/node_backend/node_modules/dayjs/locale/tr.js new file mode 100644 index 0000000000000000000000000000000000000000..9c7844a476f8c28affcf4fcbe23c892ae0d2c424 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/tr.js @@ -0,0 +1 @@ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_tr=e(a.dayjs)}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var t=e(a),_={name:"tr",weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekStart:1,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(a){return a+"."}};return t.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/types.d.ts b/node_backend/node_modules/dayjs/locale/types.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2c24a64566fe466005802bb9a61652bae772db9c --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/types.d.ts @@ -0,0 +1,33 @@ +declare interface ILocale { + name: string + weekdays?: string[] + months?: string[] + weekStart?: number + weekdaysShort?: string[] + monthsShort?: string[] + weekdaysMin?: string[] + ordinal?: (n: number) => number | string + formats: Partial<{ + LT: string + LTS: string + L: string + LL: string + LLL: string + LLLL: string + }> + relativeTime: Partial<{ + future: string + past: string + s: string + m: string + mm: string + h: string + hh: string + d: string + dd: string + M: string + MM: string + y: string + yy: string + }> +} diff --git a/node_backend/node_modules/dayjs/locale/tzl.js b/node_backend/node_modules/dayjs/locale/tzl.js new file mode 100644 index 0000000000000000000000000000000000000000..2b1d5983b6f981b24edd303150e099781fe34def --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/tzl.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_tzl=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),a={name:"tzl",weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),weekStart:1,weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),ordinal:function(e){return e},formats:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"}};return t.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/tzm-latn.js b/node_backend/node_modules/dayjs/locale/tzm-latn.js new file mode 100644 index 0000000000000000000000000000000000000000..3f7cdd442f07feb32cf76681c1e62a467cdd9a9d --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/tzm-latn.js @@ -0,0 +1 @@ +!function(a,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],s):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_tzm_latn=s(a.dayjs)}(this,(function(a){"use strict";function s(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var n=s(a),i={name:"tzm-latn",weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekStart:6,weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"}};return n.default.locale(i,null,!0),i})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/tzm.js b/node_backend/node_modules/dayjs/locale/tzm.js new file mode 100644 index 0000000000000000000000000000000000000000..e4c403160ff16819245721057c9c49829d61430d --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/tzm.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_tzm=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"tzm",weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekStart:6,weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ug-cn.js b/node_backend/node_modules/dayjs/locale/ug-cn.js new file mode 100644 index 0000000000000000000000000000000000000000..995c3b3baae8a1895d27705b19c8cc20ed158b4b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ug-cn.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ug_cn=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ug-cn",weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekStart:1,weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/uk.js b/node_backend/node_modules/dayjs/locale/uk.js new file mode 100644 index 0000000000000000000000000000000000000000..537afb1b2a9d006fad265f75147129b6f6ea60c9 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/uk.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_uk=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),s="січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),n="січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_"),o=/D[oD]?(\[[^[\]]*\]|\s)+MMMM?/;function d(_,e,t){var s,n;return"m"===t?e?"хвилина":"хвилину":"h"===t?e?"година":"годину":_+" "+(s=+_,n={ss:e?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:e?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:e?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[t].split("_"),s%10==1&&s%100!=11?n[0]:s%10>=2&&s%10<=4&&(s%100<10||s%100>=20)?n[1]:n[2])}var i=function(_,e){return o.test(e)?s[_.month()]:n[_.month()]};i.s=n,i.f=s;var r={name:"uk",weekdays:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),weekdaysShort:"ндл_пнд_втр_срд_чтв_птн_сбт".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),months:i,monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekStart:1,relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:d,mm:d,h:d,hh:d,d:"день",dd:d,M:"місяць",MM:d,y:"рік",yy:d},ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"}};return t.default.locale(r,null,!0),r})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/ur.js b/node_backend/node_modules/dayjs/locale/ur.js new file mode 100644 index 0000000000000000000000000000000000000000..4f83c8b83fcf698ac33795fe3b634ca443fb42ae --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/ur.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_ur=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"ur",weekdays:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),months:"جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر".split("_"),weekStart:1,weekdaysShort:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),monthsShort:"جنوری_فروری_مارچ_اپریل_مئی_جون_جولائی_اگست_ستمبر_اکتوبر_نومبر_دسمبر".split("_"),weekdaysMin:"اتوار_پیر_منگل_بدھ_جمعرات_جمعہ_ہفتہ".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/uz-latn.js b/node_backend/node_modules/dayjs/locale/uz-latn.js new file mode 100644 index 0000000000000000000000000000000000000000..a8ebab49f45dc2d9406990d2561e1121d36572f5 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/uz-latn.js @@ -0,0 +1 @@ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(a="undefined"!=typeof globalThis?globalThis:a||self).dayjs_locale_uz_latn=e(a.dayjs)}(this,(function(a){"use strict";function e(a){return a&&"object"==typeof a&&"default"in a?a:{default:a}}var _=e(a),n={name:"uz-latn",weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),weekStart:1,weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),ordinal:function(a){return a},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},relativeTime:{future:"Yaqin %s ichida",past:"%s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"}};return _.default.locale(n,null,!0),n})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/uz.js b/node_backend/node_modules/dayjs/locale/uz.js new file mode 100644 index 0000000000000000000000000000000000000000..f6992b1ada4f118a05745f616957f76efca25110 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/uz.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_uz=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"uz",weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),weekStart:1,weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),ordinal:function(_){return _},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},relativeTime:{future:"Якин %s ичида",past:"%s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/vi.js b/node_backend/node_modules/dayjs/locale/vi.js new file mode 100644 index 0000000000000000000000000000000000000000..ee3395492c67b42bbab10524326200bb9eac7be0 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/vi.js @@ -0,0 +1 @@ +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],n):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_locale_vi=n(t.dayjs)}(this,(function(t){"use strict";function n(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var h=n(t),_={name:"vi",weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),weekStart:1,weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),ordinal:function(t){return t},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"}};return h.default.locale(_,null,!0),_})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/x-pseudo.js b/node_backend/node_modules/dayjs/locale/x-pseudo.js new file mode 100644 index 0000000000000000000000000000000000000000..c1215d669133418e4e41ec79c7a0e6ce6489656e --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/x-pseudo.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_x_pseudo=t(e.dayjs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var _=t(e),d={name:"x-pseudo",weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),weekStart:1,weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),ordinal:function(e){return e},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"}};return _.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/yo.js b/node_backend/node_modules/dayjs/locale/yo.js new file mode 100644 index 0000000000000000000000000000000000000000..b12b37b7b0d38529ba5e0fc1d5a165b67da7ca98 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/yo.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_yo=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),a={name:"yo",weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),weekStart:1,weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),ordinal:function(e){return e},formats:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"}};return t.default.locale(a,null,!0),a})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/zh-cn.js b/node_backend/node_modules/dayjs/locale/zh-cn.js new file mode 100644 index 0000000000000000000000000000000000000000..21cf2281ad9e9af8c436ce7d9d0160f638a5e125 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/zh-cn.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_zh_cn=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"zh-cn",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(e,_){return"W"===_?e+"周":e+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(e,_){var t=100*e+_;return t<600?"凌晨":t<900?"早上":t<1100?"上午":t<1300?"中午":t<1800?"下午":"晚上"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/zh-hk.js b/node_backend/node_modules/dayjs/locale/zh-hk.js new file mode 100644 index 0000000000000000000000000000000000000000..dd389f9885a706fe14871d18788f57c209cb1b90 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/zh-hk.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_zh_hk=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var d=e(_),t={name:"zh-hk",months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),ordinal:function(_,e){return"W"===e?_+"週":_+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"一分鐘",mm:"%d 分鐘",h:"一小時",hh:"%d 小時",d:"一天",dd:"%d 天",M:"一個月",MM:"%d 個月",y:"一年",yy:"%d 年"},meridiem:function(_,e){var d=100*_+e;return d<600?"凌晨":d<900?"早上":d<1100?"上午":d<1300?"中午":d<1800?"下午":"晚上"}};return d.default.locale(t,null,!0),t})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/zh-tw.js b/node_backend/node_modules/dayjs/locale/zh-tw.js new file mode 100644 index 0000000000000000000000000000000000000000..5970f17d41ed3fa48035eb30fe81c14d161a8612 --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/zh-tw.js @@ -0,0 +1 @@ +!function(_,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],e):(_="undefined"!=typeof globalThis?globalThis:_||self).dayjs_locale_zh_tw=e(_.dayjs)}(this,(function(_){"use strict";function e(_){return _&&"object"==typeof _&&"default"in _?_:{default:_}}var t=e(_),d={name:"zh-tw",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(_,e){return"W"===e?_+"週":_+"日"},formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"},meridiem:function(_,e){var t=100*_+e;return t<600?"凌晨":t<900?"早上":t<1100?"上午":t<1300?"中午":t<1800?"下午":"晚上"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/locale/zh.js b/node_backend/node_modules/dayjs/locale/zh.js new file mode 100644 index 0000000000000000000000000000000000000000..2e80015ff2689e22c4e63d4d388d0c704d8c525b --- /dev/null +++ b/node_backend/node_modules/dayjs/locale/zh.js @@ -0,0 +1 @@ +!function(e,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_(require("dayjs")):"function"==typeof define&&define.amd?define(["dayjs"],_):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_locale_zh=_(e.dayjs)}(this,(function(e){"use strict";function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=_(e),d={name:"zh",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(e,_){return"W"===_?e+"周":e+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s后",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(e,_){var t=100*e+_;return t<600?"凌晨":t<900?"早上":t<1100?"上午":t<1300?"中午":t<1800?"下午":"晚上"}};return t.default.locale(d,null,!0),d})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/package.json b/node_backend/node_modules/dayjs/package.json new file mode 100644 index 0000000000000000000000000000000000000000..d3e7c314b725117fc75bf36e26480cb5c7c3cb13 --- /dev/null +++ b/node_backend/node_modules/dayjs/package.json @@ -0,0 +1,84 @@ +{ + "name": "dayjs", + "version": "1.11.13", + "description": "2KB immutable date time library alternative to Moment.js with the same modern API ", + "main": "dayjs.min.js", + "types": "index.d.ts", + "scripts": { + "test": "TZ=Pacific/Auckland npm run test-tz && TZ=Europe/London npm run test-tz && TZ=America/Whitehorse npm run test-tz && npm run test-tz && jest", + "test-tz": "date && jest test/timezone.test --coverage=false", + "lint": "./node_modules/.bin/eslint src/* test/* build/*", + "prettier": "prettier --write \"docs/**/*.md\"", + "babel": "cross-env BABEL_ENV=build babel src --out-dir esm --copy-files && node build/esm", + "build": "cross-env BABEL_ENV=build node build && npm run size", + "sauce": "npx karma start karma.sauce.conf.js", + "test:sauce": "npm run sauce -- 0 && npm run sauce -- 1 && npm run sauce -- 2 && npm run sauce -- 3", + "size": "size-limit && gzip-size dayjs.min.js" + }, + "pre-commit": [ + "lint" + ], + "size-limit": [ + { + "limit": "2.99 KB", + "path": "dayjs.min.js" + } + ], + "jest": { + "roots": [ + "test" + ], + "testRegex": "test/(.*?/)?.*test.js$", + "testURL": "http://localhost", + "coverageDirectory": "./coverage/", + "collectCoverage": true, + "collectCoverageFrom": [ + "src/**/*" + ] + }, + "keywords": [ + "dayjs", + "date", + "time", + "immutable", + "moment" + ], + "author": "iamkun", + "license": "MIT", + "homepage": "https://day.js.org", + "repository": { + "type": "git", + "url": "https://github.com/iamkun/dayjs.git" + }, + "devDependencies": { + "@babel/cli": "^7.0.0-beta.44", + "@babel/core": "^7.0.0-beta.44", + "@babel/node": "^7.0.0-beta.44", + "@babel/preset-env": "^7.0.0-beta.44", + "babel-core": "^7.0.0-bridge.0", + "babel-jest": "^22.4.3", + "babel-plugin-external-helpers": "^6.22.0", + "cross-env": "^5.1.6", + "eslint": "^4.19.1", + "eslint-config-airbnb-base": "^12.1.0", + "eslint-plugin-import": "^2.10.0", + "eslint-plugin-jest": "^21.15.0", + "gzip-size-cli": "^2.1.0", + "jasmine-core": "^2.99.1", + "jest": "^22.4.3", + "karma": "^2.0.2", + "karma-jasmine": "^1.1.2", + "karma-sauce-launcher": "^1.1.0", + "mockdate": "^2.0.2", + "moment": "2.29.2", + "moment-timezone": "0.5.31", + "ncp": "^2.0.0", + "pre-commit": "^1.2.2", + "prettier": "^1.16.1", + "rollup": "^2.45.1", + "rollup-plugin-babel": "^4.4.0", + "rollup-plugin-terser": "^7.0.2", + "size-limit": "^0.18.0", + "typescript": "^2.8.3" + } +} diff --git a/node_backend/node_modules/dayjs/plugin/advancedFormat.d.ts b/node_backend/node_modules/dayjs/plugin/advancedFormat.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..30ec75e5ddce507f81365b627a14b4f77a8491ca --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/advancedFormat.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/plugin/advancedFormat.js b/node_backend/node_modules/dayjs/plugin/advancedFormat.js new file mode 100644 index 0000000000000000000000000000000000000000..88d62e7c84bd38cb73b0aed69f480ca2fa502184 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/advancedFormat.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_advancedFormat=t()}(this,(function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return r.ordinal(t.$D);case"gggg":return t.weekYear();case"GGGG":return t.isoWeekYear();case"wo":return r.ordinal(t.week(),"W");case"w":case"ww":return s.s(t.week(),"w"===e?1:2,"0");case"W":case"WW":return s.s(t.isoWeek(),"W"===e?1:2,"0");case"k":case"kk":return s.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();case"z":return"["+t.offsetName()+"]";case"zzz":return"["+t.offsetName("long")+"]";default:return e}}));return n.bind(this)(a)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/arraySupport.d.ts b/node_backend/node_modules/dayjs/plugin/arraySupport.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e4e44b2e6e11e0fec0a757e12dc4149d1f37aaf8 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/arraySupport.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare module 'dayjs' { + interface ConfigTypeMap { + arraySupport: [number?, number?, number?, number?, number?, number?, number?] + } +} + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/plugin/arraySupport.js b/node_backend/node_modules/dayjs/plugin/arraySupport.js new file mode 100644 index 0000000000000000000000000000000000000000..b16675fc56a37452a0a52c1e93ed00e5f35f5c6b --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/arraySupport.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_arraySupport=t()}(this,(function(){"use strict";return function(e,t,n){var o=t.prototype,i=function(e){var t=e.date,o=e.utc;return Array.isArray(t)?o?t.length?new Date(Date.UTC.apply(null,t)):new Date:1===t.length?n(String(t[0])).toDate():new(Function.prototype.bind.apply(Date,[null].concat(t))):t},a=o.parse;o.parse=function(e){e.date=i.bind(this)(e),a.bind(this)(e)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/badMutable.d.ts b/node_backend/node_modules/dayjs/plugin/badMutable.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..30ec75e5ddce507f81365b627a14b4f77a8491ca --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/badMutable.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/plugin/badMutable.js b/node_backend/node_modules/dayjs/plugin/badMutable.js new file mode 100644 index 0000000000000000000000000000000000000000..68270ccbe3fbbcc1afa7a7665a303b42868f41de --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/badMutable.js @@ -0,0 +1 @@ +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_badMutable=i()}(this,(function(){"use strict";return function(t,i){var n=i.prototype;n.$g=function(t,i,n){return this.$utils().u(t)?this[i]:this.$set(n,t)},n.set=function(t,i){return this.$set(t,i)};var e=n.startOf;n.startOf=function(t,i){return this.$d=e.bind(this)(t,i).toDate(),this.init(),this};var s=n.add;n.add=function(t,i){return this.$d=s.bind(this)(t,i).toDate(),this.init(),this};var o=n.locale;n.locale=function(t,i){return t?(this.$L=o.bind(this)(t,i).$L,this):this.$L};var r=n.daysInMonth;n.daysInMonth=function(){return r.bind(this.clone())()};var u=n.isSame;n.isSame=function(t,i){return u.bind(this.clone())(t,i)};var f=n.isBefore;n.isBefore=function(t,i){return f.bind(this.clone())(t,i)};var d=n.isAfter;n.isAfter=function(t,i){return d.bind(this.clone())(t,i)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/bigIntSupport.d.ts b/node_backend/node_modules/dayjs/plugin/bigIntSupport.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d9f2f394ec03759c0666f02d20a7e34d58c76426 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/bigIntSupport.d.ts @@ -0,0 +1,11 @@ +import { PluginFunc } from 'dayjs' + +declare module 'dayjs' { + interface ConfigTypeMap { + bigIntSupport: BigInt + } + export function unix(t: BigInt): Dayjs +} + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/plugin/bigIntSupport.js b/node_backend/node_modules/dayjs/plugin/bigIntSupport.js new file mode 100644 index 0000000000000000000000000000000000000000..0c7efac698efdea03fb310cc47dc95d3ee96731e --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/bigIntSupport.js @@ -0,0 +1 @@ +!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(n="undefined"!=typeof globalThis?globalThis:n||self).dayjs_plugin_bigIntSupport=e()}(this,(function(){"use strict";var n=function(n){return"bigint"==typeof n};return function(e,t,i){var o=t.prototype,u=function(e){var t=e.date;return n(t)?Number(t):t},r=o.parse;o.parse=function(n){n.date=u.bind(this)(n),r.bind(this)(n)};var f=i.unix;i.unix=function(e){var t=n(e)?Number(e):e;return f(t)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/buddhistEra.d.ts b/node_backend/node_modules/dayjs/plugin/buddhistEra.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..30ec75e5ddce507f81365b627a14b4f77a8491ca --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/buddhistEra.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/plugin/buddhistEra.js b/node_backend/node_modules/dayjs/plugin/buddhistEra.js new file mode 100644 index 0000000000000000000000000000000000000000..58b137c6c21d83ff0b756aeae9a0d074607512fe --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/buddhistEra.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_buddhistEra=e()}(this,(function(){"use strict";return function(t,e){var n=e.prototype,i=n.format;n.format=function(t){var e=this,n=(t||"YYYY-MM-DDTHH:mm:ssZ").replace(/(\[[^\]]+])|BBBB|BB/g,(function(t,n){var i,o=String(e.$y+543),f="BB"===t?[o.slice(-2),2]:[o,4];return n||(i=e.$utils()).s.apply(i,f.concat(["0"]))}));return i.bind(this)(n)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/calendar.d.ts b/node_backend/node_modules/dayjs/plugin/calendar.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..a8d064fd63e480496ebd772549ffd4cffd4f8c7c --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/calendar.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc, ConfigType } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + calendar(referenceTime?: ConfigType, formats?: object): string + } +} diff --git a/node_backend/node_modules/dayjs/plugin/calendar.js b/node_backend/node_modules/dayjs/plugin/calendar.js new file mode 100644 index 0000000000000000000000000000000000000000..c577098c58c95d6e4826f3496b3e193dc2db7ba4 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/calendar.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_calendar=t()}(this,(function(){"use strict";return function(e,t,a){var n="h:mm A",d={lastDay:"[Yesterday at] "+n,sameDay:"[Today at] "+n,nextDay:"[Tomorrow at] "+n,nextWeek:"dddd [at] "+n,lastWeek:"[Last] dddd [at] "+n,sameElse:"MM/DD/YYYY"};t.prototype.calendar=function(e,t){var n=t||this.$locale().calendar||d,o=a(e||void 0).startOf("d"),s=this.diff(o,"d",!0),i="sameElse",f=s<-6?i:s<-1?"lastWeek":s<0?"lastDay":s<1?"sameDay":s<2?"nextDay":s<7?"nextWeek":i,l=n[f]||d[f];return"function"==typeof l?l.call(this,a()):this.format(l)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/customParseFormat.d.ts b/node_backend/node_modules/dayjs/plugin/customParseFormat.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..1b41c0d8d4b9fb6914cb0feb5f058fc419de2647 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/customParseFormat.d.ts @@ -0,0 +1,8 @@ +import { PluginFunc } from 'dayjs' + +declare interface PluginOptions { + parseTwoDigitYear?: (yearString: string) => number +} + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/plugin/customParseFormat.js b/node_backend/node_modules/dayjs/plugin/customParseFormat.js new file mode 100644 index 0000000000000000000000000000000000000000..10a806e78d4e18749e94b4af73ef9f76c3014884 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/customParseFormat.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d/,r=/\d\d/,i=/\d\d?/,o=/\d*[^-_:/,()\s\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[i,f("seconds")],ss:[i,f("seconds")],m:[i,f("minutes")],mm:[i,f("minutes")],H:[i,f("hours")],h:[i,f("hours")],HH:[i,f("hours")],hh:[i,f("hours")],D:[i,f("day")],DD:[r,f("day")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],w:[i,f("week")],ww:[r,f("week")],M:[i,f("month")],MM:[r,f("month")],MMM:[o,function(e){var t=u("months"),n=(u("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,f("year")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\d{4}/,f("year")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f-1)return new Date(("X"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date("")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date("")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(""))}else i.call(this,e)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/dayOfYear.d.ts b/node_backend/node_modules/dayjs/plugin/dayOfYear.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..4fd66011245153a5624ff32afae1644652e8ffe4 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/dayOfYear.d.ts @@ -0,0 +1,11 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + dayOfYear(): number + dayOfYear(value: number): Dayjs + } +} diff --git a/node_backend/node_modules/dayjs/plugin/dayOfYear.js b/node_backend/node_modules/dayjs/plugin/dayOfYear.js new file mode 100644 index 0000000000000000000000000000000000000000..4a5700001f2e0010f0fb904414eb66b7a429b7b3 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/dayOfYear.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_dayOfYear=t()}(this,(function(){"use strict";return function(e,t,n){t.prototype.dayOfYear=function(e){var t=Math.round((n(this).startOf("day")-n(this).startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"day")}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/devHelper.d.ts b/node_backend/node_modules/dayjs/plugin/devHelper.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..30ec75e5ddce507f81365b627a14b4f77a8491ca --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/devHelper.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/plugin/devHelper.js b/node_backend/node_modules/dayjs/plugin/devHelper.js new file mode 100644 index 0000000000000000000000000000000000000000..a3f6daff993e2b5fb27036aee8c7dd9d4f17aeb0 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/devHelper.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_devHelper=t()}(this,(function(){"use strict";return function(e,t,o){if(!process||"production"!==process.env.NODE_ENV){var s=t.prototype,n=s.parse;s.parse=function(e){var t=e.date;return"string"==typeof t&&13===t.length&&console.warn("To parse a Unix timestamp like "+t+", you should pass it as a Number. https://day.js.org/docs/en/parse/unix-timestamp-milliseconds"),"number"==typeof t&&4===String(t).length&&console.warn("Guessing you may want to parse the Year "+t+", you should pass it as a String "+t+", not a Number. Otherwise, "+t+" will be treated as a Unix timestamp"),e.args.length>=2&&!o.p.customParseFormat&&console.warn("To parse a date-time string like "+t+" using the given format, you should enable customParseFormat plugin first. https://day.js.org/docs/en/parse/string-format"),n.bind(this)(e)};var a=o.locale;o.locale=function(e,t,s){return void 0===t&&"string"==typeof e&&(o.Ls[e]||console.warn("Guessing you may want to use locale "+e+", you have to load it before using it. https://day.js.org/docs/en/i18n/loading-into-nodejs")),a(e,t,s)}}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/duration.d.ts b/node_backend/node_modules/dayjs/plugin/duration.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9675a80b846f3e69fc54fd91b0fded2d973032b0 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/duration.d.ts @@ -0,0 +1,88 @@ +import { PluginFunc } from 'dayjs' +import { OpUnitType, UnitTypeLongPlural } from 'dayjs'; + +declare const plugin: PluginFunc +export as namespace plugin; +export = plugin + +declare namespace plugin { + /** + * @deprecated Please use more strict types + */ + type DurationInputType = string | number | object + /** + * @deprecated Please use more strict types + */ + type DurationAddType = number | object | Duration + + type DurationUnitsObjectType = Partial<{ + [unit in Exclude | "weeks"]: number + }>; + type DurationUnitType = Exclude + type CreateDurationType = + ((units: DurationUnitsObjectType) => Duration) + & ((time: number, unit?: DurationUnitType) => Duration) + & ((ISO_8601: string) => Duration) + type AddDurationType = CreateDurationType & ((duration: Duration) => Duration) + + interface Duration { + new (input: string | number | object, unit?: string, locale?: string): Duration + + clone(): Duration + + humanize(withSuffix?: boolean): string + + milliseconds(): number + asMilliseconds(): number + + seconds(): number + asSeconds(): number + + minutes(): number + asMinutes(): number + + hours(): number + asHours(): number + + days(): number + asDays(): number + + weeks(): number + asWeeks(): number + + months(): number + asMonths(): number + + years(): number + asYears(): number + + as(unit: DurationUnitType): number + + get(unit: DurationUnitType): number + + add: AddDurationType + + subtract: AddDurationType + + toJSON(): string + + toISOString(): string + + format(formatStr?: string): string + + locale(locale: string): Duration + } +} + +declare module 'dayjs' { + interface Dayjs { + add(duration: plugin.Duration): Dayjs + subtract(duration: plugin.Duration): Dayjs + } + + /** + * @param time If unit is not present, time treated as number of milliseconds + */ + export const duration: plugin.CreateDurationType; + export function isDuration(d: any): d is plugin.Duration +} \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/duration.js b/node_backend/node_modules/dayjs/plugin/duration.js new file mode 100644 index 0000000000000000000000000000000000000000..4578f0644c004c2ee0721e3c9f4543a6dbfbeee7 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/duration.js @@ -0,0 +1 @@ +!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){"use strict";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+"s"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:""+y(t)+s}:{negative:!1,format:""+t+s}:{negative:!1,format:""}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if("number"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if("object"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if("string"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,"Y"),s=v(this.$d.months,"M"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,"D"),e=v(this.$d.hours,"H"),r=v(this.$d.minutes,"M"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,"S"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?"T":"",h=(d?"-":"")+"P"+t.format+s.format+i.format+a+e.format+r.format+u.format;return"P"===h||"-P"===h?"P0D":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||"YYYY-MM-DDTHH:mm:ss",i={Y:this.$d.years,YY:s.s(this.$d.years,2,"0"),YYYY:s.s(this.$d.years,4,"0"),M:this.$d.months,MM:s.s(this.$d.months,2,"0"),D:this.$d.days,DD:s.s(this.$d.days,2,"0"),H:this.$d.hours,HH:s.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,"0"),SSS:s.s(this.$d.milliseconds,3,"0")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return"milliseconds"===n?s%=1e3:s="weeks"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get("milliseconds")},y.asMilliseconds=function(){return this.as("milliseconds")},y.seconds=function(){return this.get("seconds")},y.asSeconds=function(){return this.as("seconds")},y.minutes=function(){return this.get("minutes")},y.asMinutes=function(){return this.as("minutes")},y.hours=function(){return this.get("hours")},y.asHours=function(){return this.as("hours")},y.days=function(){return this.get("days")},y.asDays=function(){return this.as("days")},y.weeks=function(){return this.get("weeks")},y.asWeeks=function(){return this.as("weeks")},y.months=function(){return this.get("months")},y.asMonths=function(){return this.as("months")},y.years=function(){return this.get("years")},y.asYears=function(){return this.as("years")},l}(),p=function(t,s,n){return t.add(s.years()*n,"y").add(s.months()*n,"M").add(s.days()*n,"d").add(s.hours()*n,"h").add(s.minutes()*n,"m").add(s.seconds()*n,"s").add(s.milliseconds()*n,"ms")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isBetween.d.ts b/node_backend/node_modules/dayjs/plugin/isBetween.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..431fff80bf803c5d1c5bbb09aa797890f7c07bfa --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isBetween.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc, ConfigType, OpUnitType } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + isBetween(a: ConfigType, b: ConfigType, c?: OpUnitType | null, d?: '()' | '[]' | '[)' | '(]'): boolean + } +} diff --git a/node_backend/node_modules/dayjs/plugin/isBetween.js b/node_backend/node_modules/dayjs/plugin/isBetween.js new file mode 100644 index 0000000000000000000000000000000000000000..68046cb8165aa6743c4abc6fe80462dcdb5909ec --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isBetween.js @@ -0,0 +1 @@ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isBetween=i()}(this,(function(){"use strict";return function(e,i,t){i.prototype.isBetween=function(e,i,s,f){var n=t(e),o=t(i),r="("===(f=f||"()")[0],u=")"===f[1];return(r?this.isAfter(n,s):!this.isBefore(n,s))&&(u?this.isBefore(o,s):!this.isAfter(o,s))||(r?this.isBefore(n,s):!this.isAfter(n,s))&&(u?this.isAfter(o,s):!this.isBefore(o,s))}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isLeapYear.d.ts b/node_backend/node_modules/dayjs/plugin/isLeapYear.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5be74092b94697da12620b24805e0115f7c71db6 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isLeapYear.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + isLeapYear(): boolean + } +} diff --git a/node_backend/node_modules/dayjs/plugin/isLeapYear.js b/node_backend/node_modules/dayjs/plugin/isLeapYear.js new file mode 100644 index 0000000000000000000000000000000000000000..030bd46e5e674ba59a22eec4aa3c7dd587d2b8f3 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isLeapYear.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isLeapYear=t()}(this,(function(){"use strict";return function(e,t){t.prototype.isLeapYear=function(){return this.$y%4==0&&this.$y%100!=0||this.$y%400==0}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isMoment.d.ts b/node_backend/node_modules/dayjs/plugin/isMoment.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..dac24f6f7ac888c3eff928861c69e301c2975c5d --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isMoment.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + + export function isMoment(input: any): boolean + +} diff --git a/node_backend/node_modules/dayjs/plugin/isMoment.js b/node_backend/node_modules/dayjs/plugin/isMoment.js new file mode 100644 index 0000000000000000000000000000000000000000..be264125140cfdc95699ee9f8cb6b6a5fb5bd7ac --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isMoment.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isMoment=n()}(this,(function(){"use strict";return function(e,n,t){t.isMoment=function(e){return t.isDayjs(e)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isSameOrAfter.d.ts b/node_backend/node_modules/dayjs/plugin/isSameOrAfter.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..916bc801cad6e36d636c60986679fda1f4a94bc0 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isSameOrAfter.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc, ConfigType, OpUnitType } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + isSameOrAfter(date?: ConfigType, unit?: OpUnitType): boolean + } +} diff --git a/node_backend/node_modules/dayjs/plugin/isSameOrAfter.js b/node_backend/node_modules/dayjs/plugin/isSameOrAfter.js new file mode 100644 index 0000000000000000000000000000000000000000..76f8a3355117a67488ecae9fbd4312aa5c0fdc25 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isSameOrAfter.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrAfter=t()}(this,(function(){"use strict";return function(e,t){t.prototype.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isSameOrBefore.d.ts b/node_backend/node_modules/dayjs/plugin/isSameOrBefore.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d52b0955c8454145aeb133e2546ee0447576b34e --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isSameOrBefore.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc, ConfigType, OpUnitType } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + isSameOrBefore(date?: ConfigType, unit?: OpUnitType): boolean + } +} diff --git a/node_backend/node_modules/dayjs/plugin/isSameOrBefore.js b/node_backend/node_modules/dayjs/plugin/isSameOrBefore.js new file mode 100644 index 0000000000000000000000000000000000000000..57a767e6be7b42db6840432dc59ccac0e6249d40 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isSameOrBefore.js @@ -0,0 +1 @@ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrBefore=i()}(this,(function(){"use strict";return function(e,i){i.prototype.isSameOrBefore=function(e,i){return this.isSame(e,i)||this.isBefore(e,i)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isToday.d.ts b/node_backend/node_modules/dayjs/plugin/isToday.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..04ac5818df46b6771a80d6f315d597812d08f3ec --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isToday.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + isToday(): boolean + } +} diff --git a/node_backend/node_modules/dayjs/plugin/isToday.js b/node_backend/node_modules/dayjs/plugin/isToday.js new file mode 100644 index 0000000000000000000000000000000000000000..ee9f9cdbebf962af5d298746f1e318d78b329382 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isToday.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isToday=o()}(this,(function(){"use strict";return function(e,o,t){o.prototype.isToday=function(){var e="YYYY-MM-DD",o=t();return this.format(e)===o.format(e)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isTomorrow.d.ts b/node_backend/node_modules/dayjs/plugin/isTomorrow.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..08110b6e201e9ca8b9b74580a89d99c26ff61fb4 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isTomorrow.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + isTomorrow(): boolean + } +} diff --git a/node_backend/node_modules/dayjs/plugin/isTomorrow.js b/node_backend/node_modules/dayjs/plugin/isTomorrow.js new file mode 100644 index 0000000000000000000000000000000000000000..ca850440c04d354e750d6a6ee1625c069f647b42 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isTomorrow.js @@ -0,0 +1 @@ +!function(o,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(o="undefined"!=typeof globalThis?globalThis:o||self).dayjs_plugin_isTomorrow=e()}(this,(function(){"use strict";return function(o,e,t){e.prototype.isTomorrow=function(){var o="YYYY-MM-DD",e=t().add(1,"day");return this.format(o)===e.format(o)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isYesterday.d.ts b/node_backend/node_modules/dayjs/plugin/isYesterday.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d8ae9e1aa6d6f817bfabb0ef0051d0931728076 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isYesterday.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + isYesterday(): boolean + } +} diff --git a/node_backend/node_modules/dayjs/plugin/isYesterday.js b/node_backend/node_modules/dayjs/plugin/isYesterday.js new file mode 100644 index 0000000000000000000000000000000000000000..b63b68ac9ae1fc2095b2e0e5aa638735dc913147 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isYesterday.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isYesterday=t()}(this,(function(){"use strict";return function(e,t,n){t.prototype.isYesterday=function(){var e="YYYY-MM-DD",t=n().subtract(1,"day");return this.format(e)===t.format(e)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isoWeek.d.ts b/node_backend/node_modules/dayjs/plugin/isoWeek.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3f4d88f62c2294bdefa2d9e5d09152648b015a5d --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isoWeek.d.ts @@ -0,0 +1,27 @@ +import { PluginFunc, OpUnitType, ConfigType } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +type ISOUnitType = OpUnitType | 'isoWeek'; + +declare module 'dayjs' { + interface Dayjs { + isoWeekYear(): number + isoWeek(): number + isoWeek(value: number): Dayjs + + isoWeekday(): number + isoWeekday(value: number): Dayjs + + startOf(unit: ISOUnitType): Dayjs + + endOf(unit: ISOUnitType): Dayjs + + isSame(date?: ConfigType, unit?: ISOUnitType): boolean + + isBefore(date?: ConfigType, unit?: ISOUnitType): boolean + + isAfter(date?: ConfigType, unit?: ISOUnitType): boolean + } +} diff --git a/node_backend/node_modules/dayjs/plugin/isoWeek.js b/node_backend/node_modules/dayjs/plugin/isoWeek.js new file mode 100644 index 0000000000000000000000000000000000000000..202ade7d135dd5da9cd3061c8d8d56cebee8ff36 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isoWeek.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){"use strict";var e="day";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf("year"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,"week")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return"isoweek"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):n.bind(this)(e,t)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/isoWeeksInYear.d.ts b/node_backend/node_modules/dayjs/plugin/isoWeeksInYear.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..2bc02cddf5db25c8e3da1e3fe5458f3cf268317d --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isoWeeksInYear.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + isoWeeksInYear(): number + } +} diff --git a/node_backend/node_modules/dayjs/plugin/isoWeeksInYear.js b/node_backend/node_modules/dayjs/plugin/isoWeeksInYear.js new file mode 100644 index 0000000000000000000000000000000000000000..2bd20cd5b0444b9b7e2a3e17815e77e8f47ddb94 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/isoWeeksInYear.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeeksInYear=n()}(this,(function(){"use strict";return function(e,n){n.prototype.isoWeeksInYear=function(){var e=this.isLeapYear(),n=this.endOf("y").day();return 4===n||e&&5===n?53:52}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/localeData.d.ts b/node_backend/node_modules/dayjs/plugin/localeData.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ae9e55766ac5a5d2659417b4d4eee64d3aa47acb --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/localeData.d.ts @@ -0,0 +1,44 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + type WeekdayNames = [string, string, string, string, string, string, string]; + type MonthNames = [string, string, string, string, string, string, string, string, string, string, string, string]; + + interface InstanceLocaleDataReturn { + firstDayOfWeek(): number; + weekdays(instance?: Dayjs): WeekdayNames; + weekdaysShort(instance?: Dayjs): WeekdayNames; + weekdaysMin(instance?: Dayjs): WeekdayNames; + months(instance?: Dayjs): MonthNames; + monthsShort(instance?: Dayjs): MonthNames; + longDateFormat(format: string): string; + meridiem(hour?: number, minute?: number, isLower?: boolean): string; + ordinal(n: number): string + } + + interface GlobalLocaleDataReturn { + firstDayOfWeek(): number; + weekdays(): WeekdayNames; + weekdaysShort(): WeekdayNames; + weekdaysMin(): WeekdayNames; + months(): MonthNames; + monthsShort(): MonthNames; + longDateFormat(format: string): string; + meridiem(hour?: number, minute?: number, isLower?: boolean): string; + ordinal(n: number): string + } + + interface Dayjs { + localeData(): InstanceLocaleDataReturn; + } + + export function weekdays(localOrder?: boolean): WeekdayNames; + export function weekdaysShort(localOrder?: boolean): WeekdayNames; + export function weekdaysMin(localOrder?: boolean): WeekdayNames; + export function monthsShort(): MonthNames; + export function months(): MonthNames; + export function localeData(): GlobalLocaleDataReturn; +} diff --git a/node_backend/node_modules/dayjs/plugin/localeData.js b/node_backend/node_modules/dayjs/plugin/localeData.js new file mode 100644 index 0000000000000000000000000000000000000000..55e01ee7bd4e7327fe540c68a2bb3160e82da2c5 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/localeData.js @@ -0,0 +1 @@ +!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(n="undefined"!=typeof globalThis?globalThis:n||self).dayjs_plugin_localeData=e()}(this,(function(){"use strict";return function(n,e,t){var r=e.prototype,o=function(n){return n&&(n.indexOf?n:n.s)},u=function(n,e,t,r,u){var i=n.name?n:n.$locale(),a=o(i[e]),s=o(i[t]),f=a||s.map((function(n){return n.slice(0,r)}));if(!u)return f;var d=i.weekStart;return f.map((function(n,e){return f[(e+(d||0))%7]}))},i=function(){return t.Ls[t.locale()]},a=function(n,e){return n.formats[e]||function(n){return n.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(n,e,t){return e||t.slice(1)}))}(n.formats[e.toUpperCase()])},s=function(){var n=this;return{months:function(e){return e?e.format("MMMM"):u(n,"months")},monthsShort:function(e){return e?e.format("MMM"):u(n,"monthsShort","months",3)},firstDayOfWeek:function(){return n.$locale().weekStart||0},weekdays:function(e){return e?e.format("dddd"):u(n,"weekdays")},weekdaysMin:function(e){return e?e.format("dd"):u(n,"weekdaysMin","weekdays",2)},weekdaysShort:function(e){return e?e.format("ddd"):u(n,"weekdaysShort","weekdays",3)},longDateFormat:function(e){return a(n.$locale(),e)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return s.bind(this)()},t.localeData=function(){var n=i();return{firstDayOfWeek:function(){return n.weekStart||0},weekdays:function(){return t.weekdays()},weekdaysShort:function(){return t.weekdaysShort()},weekdaysMin:function(){return t.weekdaysMin()},months:function(){return t.months()},monthsShort:function(){return t.monthsShort()},longDateFormat:function(e){return a(n,e)},meridiem:n.meridiem,ordinal:n.ordinal}},t.months=function(){return u(i(),"months")},t.monthsShort=function(){return u(i(),"monthsShort","months",3)},t.weekdays=function(n){return u(i(),"weekdays",null,null,n)},t.weekdaysShort=function(n){return u(i(),"weekdaysShort","weekdays",3,n)},t.weekdaysMin=function(n){return u(i(),"weekdaysMin","weekdays",2,n)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/localizedFormat.d.ts b/node_backend/node_modules/dayjs/plugin/localizedFormat.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..30ec75e5ddce507f81365b627a14b4f77a8491ca --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/localizedFormat.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/plugin/localizedFormat.js b/node_backend/node_modules/dayjs/plugin/localizedFormat.js new file mode 100644 index 0000000000000000000000000000000000000000..2aa466526f39e4d51089c6fa2bc5e101a0246f0a --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/localizedFormat.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_localizedFormat=t()}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};return function(t,o,n){var r=o.prototype,i=r.format;n.en.formats=e,r.format=function(t){void 0===t&&(t="YYYY-MM-DDTHH:mm:ssZ");var o=this.$locale().formats,n=function(t,o){return t.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,o){return t||o.slice(1)}))}))}(t,void 0===o?{}:o);return i.call(this,n)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/minMax.d.ts b/node_backend/node_modules/dayjs/plugin/minMax.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..7d0827f1355a527593905742979c51d243434f6a --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/minMax.d.ts @@ -0,0 +1,22 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + export function max(dayjs: [Dayjs, ...Dayjs[]]): Dayjs + export function max(noDates: never[]): null + export function max(maybeDates: Dayjs[]): Dayjs | null + + export function max(...dayjs: [Dayjs, ...Dayjs[]]): Dayjs + export function max(...noDates: never[]): null + export function max(...maybeDates: Dayjs[]): Dayjs | null + + export function min(dayjs: [Dayjs, ...Dayjs[]]): Dayjs + export function min(noDates: never[]): null + export function min(maybeDates: Dayjs[]): Dayjs | null + + export function min(...dayjs: [Dayjs, ...Dayjs[]]): Dayjs + export function min(...noDates: never[]): null + export function min(...maybeDates: Dayjs[]): Dayjs | null +} diff --git a/node_backend/node_modules/dayjs/plugin/minMax.js b/node_backend/node_modules/dayjs/plugin/minMax.js new file mode 100644 index 0000000000000000000000000000000000000000..ce063146aa0495c8085cd29e9b3d41ed3c37e4f4 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/minMax.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_minMax=n()}(this,(function(){"use strict";return function(e,n,t){var i=function(e,n){if(!n||!n.length||1===n.length&&!n[0]||1===n.length&&Array.isArray(n[0])&&!n[0].length)return null;var t;1===n.length&&n[0].length>0&&(n=n[0]);t=(n=n.filter((function(e){return e})))[0];for(var i=1;i=0?1:a.date()),s=u.year||a.year(),d=u.month>=0?u.month:u.year||u.day?0:a.month(),f=u.hour||0,b=u.minute||0,h=u.second||0,y=u.millisecond||0;return o?new Date(Date.UTC(s,d,c,f,b,h,y)):new Date(s,d,c,f,b,h,y)}return r},o=i.parse;i.parse=function(t){t.date=r.bind(this)(t),o.bind(this)(t)};var u=i.set,a=i.add,c=i.subtract,s=function(t,n,e,i){void 0===i&&(i=1);var r=Object.keys(n),o=this;return r.forEach((function(e){o=t.bind(o)(n[e]*i,e)})),o};i.set=function(t,n){return n=void 0===n?t:n,"Object"===t.constructor.name?s.bind(this)((function(t,n){return u.bind(this)(n,t)}),n,t):u.bind(this)(t,n)},i.add=function(t,n){return"Object"===t.constructor.name?s.bind(this)(a,t,n):a.bind(this)(t,n)},i.subtract=function(t,n){return"Object"===t.constructor.name?s.bind(this)(a,t,n,-1):c.bind(this)(t,n)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/pluralGetSet.d.ts b/node_backend/node_modules/dayjs/plugin/pluralGetSet.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ab2d89aafe856425fc64aae26bde655f9b86ef45 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/pluralGetSet.d.ts @@ -0,0 +1,44 @@ +import { PluginFunc, UnitType, ConfigType } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + years(): number + + years(value: number): Dayjs + + months(): number + + months(value: number): Dayjs + + dates(): number + + dates(value: number): Dayjs + + weeks(): number + + weeks(value: number): Dayjs + + days(): number + + days(value: number): Dayjs + + hours(): number + + hours(value: number): Dayjs + + minutes(): number + + minutes(value: number): Dayjs + + seconds(): number + + seconds(value: number): Dayjs + + milliseconds(): number + + milliseconds(value: number): Dayjs + } +} diff --git a/node_backend/node_modules/dayjs/plugin/pluralGetSet.js b/node_backend/node_modules/dayjs/plugin/pluralGetSet.js new file mode 100644 index 0000000000000000000000000000000000000000..d7584940765a4feac80986381a86117fb866e406 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/pluralGetSet.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_pluralGetSet=o()}(this,(function(){"use strict";return function(e,o){var s=o.prototype;["milliseconds","seconds","minutes","hours","days","weeks","isoWeeks","months","quarters","years","dates"].forEach((function(e){s[e]=s[e.replace(/s$/,"")]}))}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/preParsePostFormat.d.ts b/node_backend/node_modules/dayjs/plugin/preParsePostFormat.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..30ec75e5ddce507f81365b627a14b4f77a8491ca --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/preParsePostFormat.d.ts @@ -0,0 +1,4 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin diff --git a/node_backend/node_modules/dayjs/plugin/preParsePostFormat.js b/node_backend/node_modules/dayjs/plugin/preParsePostFormat.js new file mode 100644 index 0000000000000000000000000000000000000000..5611d107d62e5d504f7575b1754a1185a9f55308 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/preParsePostFormat.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_preParsePostFormat=e()}(this,(function(){"use strict";return function(t,e){var o=e.prototype.parse;e.prototype.parse=function(t){if("string"==typeof t.date){var e=this.$locale();t.date=e&&e.preparse?e.preparse(t.date):t.date}return o.bind(this)(t)};var r=e.prototype.format;e.prototype.format=function(){for(var t=arguments.length,e=new Array(t),o=0;o number + thresholds?: RelativeTimeThreshold[] +} + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + fromNow(withoutSuffix?: boolean): string + from(compared: ConfigType, withoutSuffix?: boolean): string + toNow(withoutSuffix?: boolean): string + to(compared: ConfigType, withoutSuffix?: boolean): string + } +} diff --git a/node_backend/node_modules/dayjs/plugin/relativeTime.js b/node_backend/node_modules/dayjs/plugin/relativeTime.js new file mode 100644 index 0000000000000000000000000000000000000000..898eee6d079326394eeae9ef6fca3df4e6f75c0c --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/relativeTime.js @@ -0,0 +1 @@ +!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){"use strict";return function(r,e,t){r=r||{};var n=e.prototype,o={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],m=h.length,c=0;c0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(""+p)),a="string"==typeof v?v.replace("%d",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return"function"==typeof M?M(a):M.replace("%s",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/timezone.d.ts b/node_backend/node_modules/dayjs/plugin/timezone.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..049bb08702bf558946955641c3fd189938ea301f --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/timezone.d.ts @@ -0,0 +1,20 @@ +import { PluginFunc, ConfigType } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + tz(timezone?: string, keepLocalTime?: boolean): Dayjs + offsetName(type?: 'short' | 'long'): string | undefined + } + + interface DayjsTimezone { + (date?: ConfigType, timezone?: string): Dayjs + (date: ConfigType, format: string, timezone?: string): Dayjs + guess(): string + setDefault(timezone?: string): void + } + + const tz: DayjsTimezone +} diff --git a/node_backend/node_modules/dayjs/plugin/timezone.js b/node_backend/node_modules/dayjs/plugin/timezone.js new file mode 100644 index 0000000000000000000000000000000000000000..280a2bf478715493dde874164576a4e7424b50de --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/timezone.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){"use strict";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||"short",o=t+"|"+i,r=e[o];return r||(r=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+"-"+r[1]+"-"+r[2]+" "+l+":"+r[4]+":"+r[5]+":000",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n,i=this.utcOffset(),a=this.toDate(),u=a.toLocaleString("en-US",{timeZone:t}),f=Math.round((a-new Date(u))/1e3/60),s=15*-Math.round(a.getTimezoneOffset()/15)-f;if(!Number(s))n=this.utcOffset(0,e);else if(n=o(u,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,"minute")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return"timezonename"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if("string"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/toArray.d.ts b/node_backend/node_modules/dayjs/plugin/toArray.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..45f1f0c3cf094fa3ee607ee5667b42d624f42047 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/toArray.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + toArray(): number[] + } +} diff --git a/node_backend/node_modules/dayjs/plugin/toArray.js b/node_backend/node_modules/dayjs/plugin/toArray.js new file mode 100644 index 0000000000000000000000000000000000000000..ac06750eb5f39210ade760dd7498d1778ad262f4 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/toArray.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_toArray=e()}(this,(function(){"use strict";return function(t,e){e.prototype.toArray=function(){return[this.$y,this.$M,this.$D,this.$H,this.$m,this.$s,this.$ms]}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/toObject.d.ts b/node_backend/node_modules/dayjs/plugin/toObject.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ca12aaf00acaaf894e03c8a6adc837cf2ab1c067 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/toObject.d.ts @@ -0,0 +1,20 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +interface DayjsObject { + years: number + months: number + date: number + hours: number + minutes: number + seconds: number + milliseconds: number +} + +declare module 'dayjs' { + interface Dayjs { + toObject(): DayjsObject + } +} diff --git a/node_backend/node_modules/dayjs/plugin/toObject.js b/node_backend/node_modules/dayjs/plugin/toObject.js new file mode 100644 index 0000000000000000000000000000000000000000..573b49e6fab75c03c01eee6f8f206d8af298c042 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/toObject.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_toObject=e()}(this,(function(){"use strict";return function(t,e){e.prototype.toObject=function(){return{years:this.$y,months:this.$M,date:this.$D,hours:this.$H,minutes:this.$m,seconds:this.$s,milliseconds:this.$ms}}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/updateLocale.d.ts b/node_backend/node_modules/dayjs/plugin/updateLocale.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef1c01df9c39d28df0e2dbc975e52fc6703460e6 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/updateLocale.d.ts @@ -0,0 +1,8 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + export function updateLocale(localeName: string, customConfig: Record): Record +} diff --git a/node_backend/node_modules/dayjs/plugin/updateLocale.js b/node_backend/node_modules/dayjs/plugin/updateLocale.js new file mode 100644 index 0000000000000000000000000000000000000000..811d9e912a4a9ef76f69f971a4d4a3d3495ad4df --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/updateLocale.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_updateLocale=n()}(this,(function(){"use strict";return function(e,n,t){t.updateLocale=function(e,n){var o=t.Ls[e];if(o)return(n?Object.keys(n):[]).forEach((function(e){o[e]=n[e]})),o}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/utc.d.ts b/node_backend/node_modules/dayjs/plugin/utc.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..544ea4e70ac740c53fcbc5a000945d87e1fc9180 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/utc.d.ts @@ -0,0 +1,19 @@ +import { PluginFunc, ConfigType } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + + utc(keepLocalTime?: boolean): Dayjs + + local(): Dayjs + + isUTC(): boolean + + utcOffset(offset: number | string, keepLocalTime?: boolean): Dayjs + } + + export function utc(config?: ConfigType, format?: string, strict?: boolean): Dayjs +} diff --git a/node_backend/node_modules/dayjs/plugin/utc.js b/node_backend/node_modules/dayjs/plugin/utc.js new file mode 100644 index 0000000000000000000000000000000000000000..af07564f09750aeeae7852f2c758bcdc616a1f9b --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/utc.js @@ -0,0 +1 @@ +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){"use strict";var t="minute",i=/[+-]\d\d(?::?\d\d)?/g,e=/([+-]|\d\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if("string"==typeof s&&(s=function(t){void 0===t&&(t="");var s=t.match(i);if(!s)return null;var f=(""+s[0]).match(e)||["-",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:"+"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/weekOfYear.d.ts b/node_backend/node_modules/dayjs/plugin/weekOfYear.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d98801455d827059279e25a2dccfe25e40128a1f --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/weekOfYear.d.ts @@ -0,0 +1,12 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + week(): number + + week(value : number): Dayjs + } +} diff --git a/node_backend/node_modules/dayjs/plugin/weekOfYear.js b/node_backend/node_modules/dayjs/plugin/weekOfYear.js new file mode 100644 index 0000000000000000000000000000000000000000..7e234c425f887813e663cc828938e1c0c76d0638 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/weekOfYear.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekOfYear=t()}(this,(function(){"use strict";var e="week",t="year";return function(i,n,r){var f=n.prototype;f.week=function(i){if(void 0===i&&(i=null),null!==i)return this.add(7*(i-this.week()),"day");var n=this.$locale().yearStart||1;if(11===this.month()&&this.date()>25){var f=r(this).startOf(t).add(1,t).date(n),s=r(this).endOf(e);if(f.isBefore(s))return 1}var a=r(this).startOf(t).date(n).startOf(e).subtract(1,"millisecond"),o=this.diff(a,e,!0);return o<0?r(this).startOf("week").week():Math.ceil(o)},f.weeks=function(e){return void 0===e&&(e=null),this.week(e)}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/weekYear.d.ts b/node_backend/node_modules/dayjs/plugin/weekYear.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..df2533123e9622c8ec89797298ec7faa008bb159 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/weekYear.d.ts @@ -0,0 +1,10 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + weekYear(): number + } +} diff --git a/node_backend/node_modules/dayjs/plugin/weekYear.js b/node_backend/node_modules/dayjs/plugin/weekYear.js new file mode 100644 index 0000000000000000000000000000000000000000..d90d137ec6cd92d31e6e9c5af4646bcf7d8d270a --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/weekYear.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekYear=t()}(this,(function(){"use strict";return function(e,t){t.prototype.weekYear=function(){var e=this.month(),t=this.week(),n=this.year();return 1===t&&11===e?n+1:0===e&&t>=52?n-1:n}}})); \ No newline at end of file diff --git a/node_backend/node_modules/dayjs/plugin/weekday.d.ts b/node_backend/node_modules/dayjs/plugin/weekday.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..87a8025a3f7f5542804c680658853e00f9bbf672 --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/weekday.d.ts @@ -0,0 +1,12 @@ +import { PluginFunc } from 'dayjs' + +declare const plugin: PluginFunc +export = plugin + +declare module 'dayjs' { + interface Dayjs { + weekday(): number + + weekday(value: number): Dayjs + } +} diff --git a/node_backend/node_modules/dayjs/plugin/weekday.js b/node_backend/node_modules/dayjs/plugin/weekday.js new file mode 100644 index 0000000000000000000000000000000000000000..ae2276b83ef8fd15be03ba1eede96e8c15a5987c --- /dev/null +++ b/node_backend/node_modules/dayjs/plugin/weekday.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekday=t()}(this,(function(){"use strict";return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,i=this.$W,n=(i +## Team Members + +* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> + - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B +* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> + - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 +* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> + - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D +* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> +* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> +* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> +* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> + - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E +* **Irina Shestak** ([@lrlna](https://github.com/lrlna)) <shestak.irina@gmail.com> diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_backend/node_modules/duplexer2/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md new file mode 100644 index 0000000000000000000000000000000000000000..83275f192e4077d32942525aaf510fa449a7c417 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md @@ -0,0 +1,60 @@ +# streams WG Meeting 2015-01-30 + +## Links + +* **Google Hangouts Video**: http://www.youtube.com/watch?v=I9nDOSGfwZg +* **GitHub Issue**: https://github.com/iojs/readable-stream/issues/106 +* **Original Minutes Google Doc**: https://docs.google.com/document/d/17aTgLnjMXIrfjgNaTUnHQO7m3xgzHR2VXBTmi03Qii4/ + +## Agenda + +Extracted from https://github.com/iojs/readable-stream/labels/wg-agenda prior to meeting. + +* adopt a charter [#105](https://github.com/iojs/readable-stream/issues/105) +* release and versioning strategy [#101](https://github.com/iojs/readable-stream/issues/101) +* simpler stream creation [#102](https://github.com/iojs/readable-stream/issues/102) +* proposal: deprecate implicit flowing of streams [#99](https://github.com/iojs/readable-stream/issues/99) + +## Minutes + +### adopt a charter + +* group: +1's all around + +### What versioning scheme should be adopted? +* group: +1’s 3.0.0 +* domenic+group: pulling in patches from other sources where appropriate +* mikeal: version independently, suggesting versions for io.js +* mikeal+domenic: work with TC to notify in advance of changes +simpler stream creation + +### streamline creation of streams +* sam: streamline creation of streams +* domenic: nice simple solution posted + but, we lose the opportunity to change the model + may not be backwards incompatible (double check keys) + + **action item:** domenic will check + +### remove implicit flowing of streams on(‘data’) +* add isFlowing / isPaused +* mikeal: worrying that we’re documenting polyfill methods – confuses users +* domenic: more reflective API is probably good, with warning labels for users +* new section for mad scientists (reflective stream access) +* calvin: name the “third state” +* mikeal: maybe borrow the name from whatwg? +* domenic: we’re missing the “third state” +* consensus: kind of difficult to name the third state +* mikeal: figure out differences in states / compat +* mathias: always flow on data – eliminates third state + * explore what it breaks + +**action items:** +* ask isaac for ability to list packages by what public io.js APIs they use (esp. Stream) +* ask rod/build for infrastructure +* **chris**: explore the “flow on data” approach +* add isPaused/isFlowing +* add new docs section +* move isPaused to that section + + diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/duplex-browser.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/duplex-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..f8b2db83dbe733d7720264a9840202e29ebeffbd --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/duplex-browser.js @@ -0,0 +1 @@ +module.exports = require('./lib/_stream_duplex.js'); diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/duplex.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/duplex.js new file mode 100644 index 0000000000000000000000000000000000000000..46924cbfdf53871b574d3f6f5b4bc6064b824aaa --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/duplex.js @@ -0,0 +1 @@ +module.exports = require('./readable').Duplex diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_duplex.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_duplex.js new file mode 100644 index 0000000000000000000000000000000000000000..57003c32d256c0a1fe20dadd279abef2d463074f --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_duplex.js @@ -0,0 +1,131 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + pna.nextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + + pna.nextTick(cb, err); +}; \ No newline at end of file diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_passthrough.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_passthrough.js new file mode 100644 index 0000000000000000000000000000000000000000..612edb4d8b443fabc4ddac619da420bad62fc5b0 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_passthrough.js @@ -0,0 +1,47 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; \ No newline at end of file diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_readable.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_readable.js new file mode 100644 index 0000000000000000000000000000000000000000..3af95cb2dbf1e9fa93d261b030b0b090df507ff7 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_readable.js @@ -0,0 +1,1019 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +module.exports = Readable; + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = require('./internal/streams/BufferList'); +var destroyImpl = require('./internal/streams/destroy'); +var StringDecoder; + +util.inherits(Readable, Stream); + +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} + +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); +} + +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); + +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; + +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + + return needMoreData(state); +} + +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { hasUnpiped: false }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, { hasUnpiped: false }); + }return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this, unpipeInfo); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + + var state = this._readableState; + var paused = false; + + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + + _this.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return this; +}; + +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._readableState.highWaterMark; + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} \ No newline at end of file diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_transform.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_transform.js new file mode 100644 index 0000000000000000000000000000000000000000..fcfc105af8e9a124bea4b82011f6cb7d6d2a7158 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_transform.js @@ -0,0 +1,214 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + + cb(er); + + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} + +function prefinish() { + var _this = this; + + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this2.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} \ No newline at end of file diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_writable.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_writable.js new file mode 100644 index 0000000000000000000000000000000000000000..e1e897ff3b098a263aa105d5704dbadce42d5862 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/_stream_writable.js @@ -0,0 +1,685 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +var destroyImpl = require('./internal/streams/destroy'); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + pna.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} + +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + // reuse the free corkReq. + state.corkedRequestsFree.next = corkReq; +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); + +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; \ No newline at end of file diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/BufferList.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/BufferList.js new file mode 100644 index 0000000000000000000000000000000000000000..5e080976c3932d544595c14704a7943a9fd9f282 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/BufferList.js @@ -0,0 +1,78 @@ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Buffer = require('safe-buffer').Buffer; +var util = require('util'); + +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} + +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function push(v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function unshift(v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + + return BufferList; +}(); + +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ length: this.length }); + return this.constructor.name + ' ' + obj; + }; +} \ No newline at end of file diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/destroy.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/destroy.js new file mode 100644 index 0000000000000000000000000000000000000000..85a821407fce47a9c8f9521ca92538d67d0857ad --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/destroy.js @@ -0,0 +1,84 @@ +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + pna.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, this, err); + } + } + + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + pna.nextTick(emitErrorNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, _this, err); + } + } else if (cb) { + cb(err); + } + }); + + return this; +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; \ No newline at end of file diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/stream-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..9332a3fdae7060505c0a081614e697fa6cb56dc0 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/stream-browser.js @@ -0,0 +1 @@ +module.exports = require('events').EventEmitter; diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/stream.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/stream.js new file mode 100644 index 0000000000000000000000000000000000000000..ce2ad5b6ee57f4778a1f4838f7970093c7941c1c --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/lib/internal/streams/stream.js @@ -0,0 +1 @@ +module.exports = require('stream'); diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/package.json b/node_backend/node_modules/duplexer2/node_modules/readable-stream/package.json new file mode 100644 index 0000000000000000000000000000000000000000..514c178e92045e082de6358f427d981f5b74d3d9 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/package.json @@ -0,0 +1,52 @@ +{ + "name": "readable-stream", + "version": "2.3.8", + "description": "Streams3, a user-land copy of the stream library from Node.js", + "main": "readable.js", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "devDependencies": { + "assert": "^1.4.0", + "babel-polyfill": "^6.9.1", + "buffer": "^4.9.0", + "lolex": "^2.3.2", + "nyc": "^6.4.0", + "tap": "^0.7.0", + "tape": "^4.8.0" + }, + "scripts": { + "test": "tap test/parallel/*.js test/ours/*.js && node test/verify-dependencies.js", + "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js", + "cover": "nyc npm test", + "report": "nyc report --reporter=lcov" + }, + "repository": { + "type": "git", + "url": "git://github.com/nodejs/readable-stream" + }, + "keywords": [ + "readable", + "stream", + "pipe" + ], + "browser": { + "util": false, + "./readable.js": "./readable-browser.js", + "./writable.js": "./writable-browser.js", + "./duplex.js": "./duplex-browser.js", + "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" + }, + "nyc": { + "include": [ + "lib/**.js" + ] + }, + "license": "MIT" +} diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/passthrough.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/passthrough.js new file mode 100644 index 0000000000000000000000000000000000000000..ffd791d7ff275a58d537ea89153175a23edee5fb --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/passthrough.js @@ -0,0 +1 @@ +module.exports = require('./readable').PassThrough diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/readable-browser.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/readable-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..e50372592ee6c63a7fc43cb912dd9639e3fa7eb1 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/readable-browser.js @@ -0,0 +1,7 @@ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/readable.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/readable.js new file mode 100644 index 0000000000000000000000000000000000000000..ec89ec53306497adae0014c4a8aba6d51d1aff6c --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/readable.js @@ -0,0 +1,19 @@ +var Stream = require('stream'); +if (process.env.READABLE_STREAM === 'disable' && Stream) { + module.exports = Stream; + exports = module.exports = Stream.Readable; + exports.Readable = Stream.Readable; + exports.Writable = Stream.Writable; + exports.Duplex = Stream.Duplex; + exports.Transform = Stream.Transform; + exports.PassThrough = Stream.PassThrough; + exports.Stream = Stream; +} else { + exports = module.exports = require('./lib/_stream_readable.js'); + exports.Stream = Stream || exports; + exports.Readable = exports; + exports.Writable = require('./lib/_stream_writable.js'); + exports.Duplex = require('./lib/_stream_duplex.js'); + exports.Transform = require('./lib/_stream_transform.js'); + exports.PassThrough = require('./lib/_stream_passthrough.js'); +} diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/transform.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/transform.js new file mode 100644 index 0000000000000000000000000000000000000000..b1baba26da03dc8bbc5d9da33cd55f3f88c99115 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/transform.js @@ -0,0 +1 @@ +module.exports = require('./readable').Transform diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/writable-browser.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/writable-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..ebdde6a85dcb19bfdbfc2ec2e34b13a54c0e5bf0 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/writable-browser.js @@ -0,0 +1 @@ +module.exports = require('./lib/_stream_writable.js'); diff --git a/node_backend/node_modules/duplexer2/node_modules/readable-stream/writable.js b/node_backend/node_modules/duplexer2/node_modules/readable-stream/writable.js new file mode 100644 index 0000000000000000000000000000000000000000..3211a6f80d1abc9db7099cd1e8fa200ad2ccfdbe --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/readable-stream/writable.js @@ -0,0 +1,8 @@ +var Stream = require("stream") +var Writable = require("./lib/_stream_writable.js") + +if (process.env.READABLE_STREAM === 'disable') { + module.exports = Stream && Stream.Writable || Writable +} else { + module.exports = Writable +} diff --git a/node_backend/node_modules/duplexer2/node_modules/safe-buffer/LICENSE b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..0c068ceecbd48fc4e8279e6451793fec2bf12178 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_backend/node_modules/duplexer2/node_modules/safe-buffer/README.md b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e9a81afd0406f030ba21169f0c7a1dba70b3a93b --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/README.md @@ -0,0 +1,584 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg +[downloads-url]: https://npmjs.org/package/safe-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Safer Node.js Buffer API + +**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** + +**Uses the built-in implementation when available.** + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_backend/node_modules/duplexer2/node_modules/safe-buffer/index.d.ts b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..e9fed809a5ab515658d6e71f7ba5f631be769be4 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/index.d.ts @@ -0,0 +1,187 @@ +declare module "safe-buffer" { + export class Buffer { + length: number + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + constructor (str: string, encoding?: string); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + constructor (size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + constructor (arrayBuffer: ArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: any[]); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + constructor (buffer: Buffer); + prototype: Buffer; + /** + * Allocates a new Buffer using an {array} of octets. + * + * @param array + */ + static from(array: any[]): Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() + * @param byteOffset + * @param length + */ + static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Copies the passed {buffer} data onto a new Buffer instance. + * + * @param buffer + */ + static from(buffer: Buffer): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + * + * @param str + */ + static from(str: string, encoding?: string): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Buffer, buf2: Buffer): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; + } +} \ No newline at end of file diff --git a/node_backend/node_modules/duplexer2/node_modules/safe-buffer/index.js b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/index.js new file mode 100644 index 0000000000000000000000000000000000000000..22438dabbbceef6954a1a7a68038f8c440a90c79 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/index.js @@ -0,0 +1,62 @@ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} diff --git a/node_backend/node_modules/duplexer2/node_modules/safe-buffer/package.json b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/package.json new file mode 100644 index 0000000000000000000000000000000000000000..623fbc3f6b0c480fb0b3257fc666b1db827378bf --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/safe-buffer/package.json @@ -0,0 +1,37 @@ +{ + "name": "safe-buffer", + "description": "Safer Node.js Buffer API", + "version": "5.1.2", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/safe-buffer/issues" + }, + "devDependencies": { + "standard": "*", + "tape": "^4.0.0" + }, + "homepage": "https://github.com/feross/safe-buffer", + "keywords": [ + "buffer", + "buffer allocate", + "node security", + "safe", + "safe-buffer", + "security", + "uninitialized" + ], + "license": "MIT", + "main": "index.js", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "git://github.com/feross/safe-buffer.git" + }, + "scripts": { + "test": "standard && tape test/*.js" + } +} diff --git a/node_backend/node_modules/duplexer2/node_modules/string_decoder/.travis.yml b/node_backend/node_modules/duplexer2/node_modules/string_decoder/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..3347a7254650582da5339323466f84fe079fc270 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/string_decoder/.travis.yml @@ -0,0 +1,50 @@ +sudo: false +language: node_js +before_install: + - npm install -g npm@2 + - test $NPM_LEGACY && npm install -g npm@latest-3 || npm install npm -g +notifications: + email: false +matrix: + fast_finish: true + include: + - node_js: '0.8' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.10' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.11' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.12' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 1 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 2 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 3 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 4 + env: TASK=test + - node_js: 5 + env: TASK=test + - node_js: 6 + env: TASK=test + - node_js: 7 + env: TASK=test + - node_js: 8 + env: TASK=test + - node_js: 9 + env: TASK=test diff --git a/node_backend/node_modules/duplexer2/node_modules/string_decoder/LICENSE b/node_backend/node_modules/duplexer2/node_modules/string_decoder/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..778edb20730ef48c01002248f4d51e7752c13487 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/string_decoder/LICENSE @@ -0,0 +1,48 @@ +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + diff --git a/node_backend/node_modules/duplexer2/node_modules/string_decoder/README.md b/node_backend/node_modules/duplexer2/node_modules/string_decoder/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5fd58315ed588027742dde690a31cd0a2610649d --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/string_decoder/README.md @@ -0,0 +1,47 @@ +# string_decoder + +***Node-core v8.9.4 string_decoder for userland*** + + +[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/) +[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/) + + +```bash +npm install --save string_decoder +``` + +***Node-core string_decoder for userland*** + +This package is a mirror of the string_decoder implementation in Node-core. + +Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.9.4/docs/api/). + +As of version 1.0.0 **string_decoder** uses semantic versioning. + +## Previous versions + +Previous version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. + +## Update + +The *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version. + +## Streams Working Group + +`string_decoder` is maintained by the Streams Working Group, which +oversees the development and maintenance of the Streams API within +Node.js. The responsibilities of the Streams Working Group include: + +* Addressing stream issues on the Node.js issue tracker. +* Authoring and editing stream documentation within the Node.js project. +* Reviewing changes to stream subclasses within the Node.js project. +* Redirecting changes to streams from the Node.js project to this + project. +* Assisting in the implementation of stream providers within Node.js. +* Recommending versions of `readable-stream` to be included in Node.js. +* Messaging about the future of streams to give the community advance + notice of changes. + +See [readable-stream](https://github.com/nodejs/readable-stream) for +more details. diff --git a/node_backend/node_modules/duplexer2/node_modules/string_decoder/lib/string_decoder.js b/node_backend/node_modules/duplexer2/node_modules/string_decoder/lib/string_decoder.js new file mode 100644 index 0000000000000000000000000000000000000000..2e89e63f7933e42b8ba543ede35d2a8fa3e4f100 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/string_decoder/lib/string_decoder.js @@ -0,0 +1,296 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ + +var Buffer = require('safe-buffer').Buffer; +/**/ + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. If an invalid byte is detected, -2 is returned. +function utf8CheckByte(byte) { + if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; + return byte >> 6 === 0x02 ? -1 : -2; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character is added when ending on a partial +// character. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} + +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} + +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} \ No newline at end of file diff --git a/node_backend/node_modules/duplexer2/node_modules/string_decoder/package.json b/node_backend/node_modules/duplexer2/node_modules/string_decoder/package.json new file mode 100644 index 0000000000000000000000000000000000000000..518c3eb9fb1ffbf72bfdf6fed252117b73164673 --- /dev/null +++ b/node_backend/node_modules/duplexer2/node_modules/string_decoder/package.json @@ -0,0 +1,31 @@ +{ + "name": "string_decoder", + "version": "1.1.1", + "description": "The string_decoder module from Node core", + "main": "lib/string_decoder.js", + "dependencies": { + "safe-buffer": "~5.1.0" + }, + "devDependencies": { + "babel-polyfill": "^6.23.0", + "core-util-is": "^1.0.2", + "inherits": "^2.0.3", + "tap": "~0.4.8" + }, + "scripts": { + "test": "tap test/parallel/*.js && node test/verify-dependencies", + "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/nodejs/string_decoder.git" + }, + "homepage": "https://github.com/nodejs/string_decoder", + "keywords": [ + "string", + "decoder", + "browser", + "browserify" + ], + "license": "MIT" +} diff --git a/node_backend/node_modules/duplexer2/package.json b/node_backend/node_modules/duplexer2/package.json new file mode 100644 index 0000000000000000000000000000000000000000..c2b1f6c82088034a421f4b3949101f47e5bea735 --- /dev/null +++ b/node_backend/node_modules/duplexer2/package.json @@ -0,0 +1,28 @@ +{ + "name": "duplexer2", + "version": "0.1.4", + "description": "Like duplexer but using streams3", + "files": [ + "index.js" + ], + "scripts": { + "test": "mocha -R tap" + }, + "repository": "deoxxa/duplexer2", + "keywords": [ + "duplex", + "duplexer", + "stream", + "stream3", + "join", + "combine" + ], + "author": "Conrad Pankoff (http://www.fknsrs.biz/)", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + }, + "devDependencies": { + "mocha": "^2.2.5" + } +} diff --git a/node_backend/node_modules/end-of-stream/LICENSE b/node_backend/node_modules/end-of-stream/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..757562ec59276bff35792501d88fe83b34acca9a --- /dev/null +++ b/node_backend/node_modules/end-of-stream/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_backend/node_modules/end-of-stream/README.md b/node_backend/node_modules/end-of-stream/README.md new file mode 100644 index 0000000000000000000000000000000000000000..857b14bd7e4ffecbf82d04d2d9f7f54d5b0a9d97 --- /dev/null +++ b/node_backend/node_modules/end-of-stream/README.md @@ -0,0 +1,54 @@ +# end-of-stream + +A node module that calls a callback when a readable/writable/duplex stream has completed or failed. + + npm install end-of-stream + +[![Build status](https://travis-ci.org/mafintosh/end-of-stream.svg?branch=master)](https://travis-ci.org/mafintosh/end-of-stream) + +## Usage + +Simply pass a stream and a callback to the `eos`. +Both legacy streams, streams2 and stream3 are supported. + +``` js +var eos = require('end-of-stream'); + +eos(readableStream, function(err) { + // this will be set to the stream instance + if (err) return console.log('stream had an error or closed early'); + console.log('stream has ended', this === readableStream); +}); + +eos(writableStream, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has finished', this === writableStream); +}); + +eos(duplexStream, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has ended and finished', this === duplexStream); +}); + +eos(duplexStream, {readable:false}, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has finished but might still be readable'); +}); + +eos(duplexStream, {writable:false}, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has ended but might still be writable'); +}); + +eos(readableStream, {error:false}, function(err) { + // do not treat emit('error', err) as a end-of-stream +}); +``` + +## License + +MIT + +## Related + +`end-of-stream` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one. diff --git a/node_backend/node_modules/end-of-stream/index.js b/node_backend/node_modules/end-of-stream/index.js new file mode 100644 index 0000000000000000000000000000000000000000..7ce47e951a615472142812f0454314f70255362c --- /dev/null +++ b/node_backend/node_modules/end-of-stream/index.js @@ -0,0 +1,96 @@ +var once = require('once'); + +var noop = function() {}; + +var qnt = global.Bare ? queueMicrotask : process.nextTick.bind(process); + +var isRequest = function(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +}; + +var isChildProcess = function(stream) { + return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 +}; + +var eos = function(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + + callback = once(callback || noop); + + var ws = stream._writableState; + var rs = stream._readableState; + var readable = opts.readable || (opts.readable !== false && stream.readable); + var writable = opts.writable || (opts.writable !== false && stream.writable); + var cancelled = false; + + var onlegacyfinish = function() { + if (!stream.writable) onfinish(); + }; + + var onfinish = function() { + writable = false; + if (!readable) callback.call(stream); + }; + + var onend = function() { + readable = false; + if (!writable) callback.call(stream); + }; + + var onexit = function(exitCode) { + callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); + }; + + var onerror = function(err) { + callback.call(stream, err); + }; + + var onclose = function() { + qnt(onclosenexttick); + }; + + var onclosenexttick = function() { + if (cancelled) return; + if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close')); + if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close')); + }; + + var onrequest = function() { + stream.req.on('finish', onfinish); + }; + + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest(); + else stream.on('request', onrequest); + } else if (writable && !ws) { // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } + + if (isChildProcess(stream)) stream.on('exit', onexit); + + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); + + return function() { + cancelled = true; + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('exit', onexit); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; +}; + +module.exports = eos; diff --git a/node_backend/node_modules/end-of-stream/package.json b/node_backend/node_modules/end-of-stream/package.json new file mode 100644 index 0000000000000000000000000000000000000000..0b530cdf544b8842e326744a7e4a0b8e46e4cde7 --- /dev/null +++ b/node_backend/node_modules/end-of-stream/package.json @@ -0,0 +1,37 @@ +{ + "name": "end-of-stream", + "version": "1.4.5", + "description": "Call a callback when a readable/writable/duplex stream has completed or failed.", + "repository": { + "type": "git", + "url": "git://github.com/mafintosh/end-of-stream.git" + }, + "dependencies": { + "once": "^1.4.0" + }, + "scripts": { + "test": "node test.js" + }, + "files": [ + "index.js" + ], + "keywords": [ + "stream", + "streams", + "callback", + "finish", + "close", + "end", + "wait" + ], + "bugs": { + "url": "https://github.com/mafintosh/end-of-stream/issues" + }, + "homepage": "https://github.com/mafintosh/end-of-stream", + "main": "index.js", + "author": "Mathias Buus ", + "license": "MIT", + "devDependencies": { + "tape": "^4.11.0" + } +} diff --git a/node_backend/node_modules/exceljs/LICENSE b/node_backend/node_modules/exceljs/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f7a22414387391ad697b9e556be503e39cbf16b0 --- /dev/null +++ b/node_backend/node_modules/exceljs/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 Guyon Roche + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_backend/node_modules/exceljs/README.md b/node_backend/node_modules/exceljs/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e70b1d2be90da7e07af27884340a7783752784fd --- /dev/null +++ b/node_backend/node_modules/exceljs/README.md @@ -0,0 +1,3023 @@ +# ExcelJS + +[![Build Status](https://github.com/exceljs/exceljs/actions/workflows/tests.yml/badge.svg?branch=master&event=push)](https://github.com/exceljs/exceljs/actions/workflows/tests.yml) + +Read, manipulate and write spreadsheet data and styles to XLSX and JSON. + +Reverse engineered from Excel spreadsheet files as a project. + +# Translations + +* [中文文档](README_zh.md) + +# Installation + +```shell +npm install exceljs +``` + +# New Features! + +* Merged [fix: styles rendering in case when "numFmt" is present in conditional formatting rules (resolves #1814) #1815](https://github.com/exceljs/exceljs/pull/1815).
Many thanks to [@andreykrupskii](https://github.com/andreykrupskii) for this contribution! +* Merged [inlineStr cell type support #1575 #1576](https://github.com/exceljs/exceljs/pull/1576).
Many thanks to [@drdmitry](https://github.com/drdmitry) for this contribution! +* Merged [Fix parsing of boolean attributes #1849](https://github.com/exceljs/exceljs/pull/1849).
Many thanks to [@bno1](https://github.com/bno1) for this contribution! +* Merged [add optional custom auto-filter to table #1670](https://github.com/exceljs/exceljs/pull/1670).
Many thanks to [@thambley](https://github.com/thambley) for this contribution! +* Merged [Deep copy inherited style #1850](https://github.com/exceljs/exceljs/pull/1850).
Many thanks to [@ikzhr](https://github.com/ikzhr) for this contribution! +* Merged [Upgrade actions/cache and actions/setup-node #1846](https://github.com/exceljs/exceljs/pull/1846).
Many thanks to [@cclauss](https://github.com/cclauss) for this contribution! +* Merged [Check object keys in isEqual #1831](https://github.com/exceljs/exceljs/pull/1831).
Many thanks to [@bno1](https://github.com/bno1) for this contribution! +* Merged [Add v17 to testing workflow #1856](https://github.com/exceljs/exceljs/pull/1856).
Many thanks to [@Siemienik](https://github.com/Siemienik) for this contribution! +* Merged [Upgrade jszip to its latest version to date. This version does not have any vulnerability found by Snyk so far #1895](https://github.com/exceljs/exceljs/pull/1895).
Many thanks to [@ValerioSevilla](https://github.com/ValerioSevilla) for this contribution! +* Merged [Update README.md #1677](https://github.com/exceljs/exceljs/pull/1677).
Many thanks to [@xjrcode](https://github.com/xjrcode) for this contribution! +* Merged [(docs): set prototype of RegExp correctly. #1700](https://github.com/exceljs/exceljs/pull/1700).
Many thanks to [@joeldenning](https://github.com/joeldenning) for this contribution! +* Merged [Added timeouts to github actions #1733](https://github.com/exceljs/exceljs/pull/1733).
Many thanks to [@alexbjorlig](https://github.com/alexbjorlig) for this contribution! +* Merged [fix issue 1676 #1701](https://github.com/exceljs/exceljs/pull/1701).
Many thanks to [@skypesky](https://github.com/skypesky) for this contribution! +* Merged [ExcelJS/ExcelJS#2237 : Update CI Tests, Drop support for Node v8 #2242](https://github.com/exceljs/exceljs/pull/2242).
Many thanks to [@Siemienik](https://github.com/Siemienik) for this contribution! +* Merged [Fix types for getWorksheet() #2223](https://github.com/exceljs/exceljs/pull/2223).
Many thanks to [@hfhchan-plb](https://github.com/hfhchan-plb) for this contribution! +* Merged [add characters cannot be used for worksheet name #2126](https://github.com/exceljs/exceljs/pull/2126).
Many thanks to [@tkm-kj](https://github.com/tkm-kj) for this contribution! +* Merged [Fix issue #1753 Reject promise when workbook reader is writing to temporary file stream and error occurs #1756](https://github.com/exceljs/exceljs/pull/1756).
Many thanks to [@pauliusg](https://github.com/pauliusg) for this contribution! +* Merged [README.md to have correct link for Streaming XLSX #2186](https://github.com/exceljs/exceljs/pull/2186).
Many thanks to [@wulfsolter](https://github.com/wulfsolter) for this contribution! +* Merged [Added a polyfill of promise.finally to support lower versions of Firefox. #1982](https://github.com/exceljs/exceljs/pull/1982).
Many thanks to [@DemoJj](https://github.com/DemoJj) for this contribution! +* Merged [Fix read this.worksheet before assign it #1934](https://github.com/exceljs/exceljs/pull/1934).
Many thanks to [@ZyqGitHub1](https://github.com/ZyqGitHub1) for this contribution! +* Merged [chore: upgrade jszip to ^3.10.1 #2211](https://github.com/exceljs/exceljs/pull/2211).
Many thanks to [@jarrod-cocoon](https://github.com/jarrod-cocoon) for this contribution! +* Merged [fixed spelling error in README.md file #2208](https://github.com/exceljs/exceljs/pull/2208).
Many thanks to [@HugoP27](https://github.com/HugoP27) for this contribution! +* Merged [fix: Fix xlsx.writeFile() not catching error when error occurs #2244](https://github.com/exceljs/exceljs/pull/2244).
Many thanks to [@zurmokeeper](https://github.com/zurmokeeper) for this contribution! +* Merged [Improve worksheets' naming validation logic. #2257](https://github.com/exceljs/exceljs/pull/2257).
Many thanks to [@Siemienik](https://github.com/Siemienik) for this contribution! +* Merged [fix issue 2125 - spliceRows remove last row #2140](https://github.com/exceljs/exceljs/pull/2140).
Many thanks to [@babu-ch](https://github.com/babu-ch) for this contribution! +* Merged [fix: fix the loss of column attributes due to incorrect column order #2222](https://github.com/exceljs/exceljs/pull/2222).
Many thanks to [@cpaiyueyue](https://github.com/cpaiyueyue) for this contribution! +* Merged [Fix: Sheet Properties Types #2327](https://github.com/exceljs/exceljs/pull/2327).
Many thanks to [@albeniraouf](https://github.com/albeniraouf) for this contribution! +* Merged [Use node 18 LTS for tsc, and benchmark. Add node 20. to test matrix. … #2354](https://github.com/exceljs/exceljs/pull/2354).
Many thanks to [@Siemienik](https://github.com/Siemienik) for this contribution! +* Merged [Add missing tooltip attribute to CellHyperlinkValue index.d.ts #2350](https://github.com/exceljs/exceljs/pull/2350).
Many thanks to [@NiklasPor](https://github.com/NiklasPor) for this contribution! +* Merged [Increase resilience to generating large workbooks #2320](https://github.com/exceljs/exceljs/pull/2320).
Many thanks to [@hfhchan-plb](https://github.com/hfhchan-plb) for this contribution! +* Merged [repair all 'c2fo.io' links ('c2fo.github.io') #2324](https://github.com/exceljs/exceljs/pull/2324).
Many thanks to [@justintunev7](https://github.com/justintunev7) for this contribution! +* Merged [fix: fix type definitions about last column, formula values and protection #2309](https://github.com/exceljs/exceljs/pull/2309).
Many thanks to [@gltjk](https://github.com/gltjk) for this contribution! +* Merged [fix: add spinCount field for WorksheetProtection type #2284](https://github.com/exceljs/exceljs/pull/2284).
Many thanks to [@damingerdai](https://github.com/damingerdai) for this contribution! +* Merged [Add type definition for WorksheetModel.merges #2281](https://github.com/exceljs/exceljs/pull/2281).
Many thanks to [@ytjmt](https://github.com/ytjmt) for this contribution! + +# Contributions + +Contributions are very welcome! It helps me know what features are desired or what bugs are causing the most pain. + +I have just one request; If you submit a pull request for a bugfix, please add a unit-test or integration-test (in the spec folder) that catches the problem. + Even a PR that just has a failing test is fine - I can analyse what the test is doing and fix the code from that. + +Note: Please try to avoid modifying the package version in a PR. +Versions are updated on release and any change will most likely result in merge collisions. + +To be clear, all contributions added to this library will be included in the library's MIT licence. + +### Let's chat together: + +[![SiemaTeam](https://discordapp.com/api/guilds/976854442009825321/widget.png?style=banner2)](https://discord.gg/siema) + +# Contents + + + +# Importing[⬆](#contents) + +```javascript +const ExcelJS = require('exceljs'); +``` + +## ES5 Imports[⬆](#contents) + +To use the ES5 transpiled code, for example for node.js versions older than 10, use the dist/es5 path. + +```javascript +const ExcelJS = require('exceljs/dist/es5'); +``` + +**Note:** The ES5 build has an implicit dependency on a number of polyfills which are no longer + explicitly added by exceljs. + You will need to add "core-js" and "regenerator-runtime" to your dependencies and + include the following requires in your code before the exceljs import: + +```javascript +// polyfills required by exceljs +require('core-js/modules/es.promise'); +require('core-js/modules/es.string.includes'); +require('core-js/modules/es.object.assign'); +require('core-js/modules/es.object.keys'); +require('core-js/modules/es.symbol'); +require('core-js/modules/es.symbol.async-iterator'); +require('regenerator-runtime/runtime'); + +const ExcelJS = require('exceljs/dist/es5'); +``` + +For IE 11, you'll also need a polyfill to support unicode regex patterns. For example, + +```js +const rewritePattern = require('regexpu-core'); +const {generateRegexpuOptions} = require('@babel/helper-create-regexp-features-plugin/lib/util'); + +const {RegExp} = global; +try { + new RegExp('a', 'u'); +} catch (err) { + global.RegExp = function(pattern, flags) { + if (flags && flags.includes('u')) { + return new RegExp(rewritePattern(pattern, flags, generateRegexpuOptions({flags, pattern}))); + } + return new RegExp(pattern, flags); + }; + global.RegExp.prototype = RegExp.prototype; +} +``` + +## Browserify[⬆](#contents) + +ExcelJS publishes two browserified bundles inside the dist/ folder: + +One with implicit dependencies on core-js polyfills... +```html + + +``` + +And one without... +```html + + +``` + + +# Interface[⬆](#contents) + +## Create a Workbook[⬆](#contents) + +```javascript +const workbook = new ExcelJS.Workbook(); +``` + +## Set Workbook Properties[⬆](#contents) + +```javascript +workbook.creator = 'Me'; +workbook.lastModifiedBy = 'Her'; +workbook.created = new Date(1985, 8, 30); +workbook.modified = new Date(); +workbook.lastPrinted = new Date(2016, 9, 27); +``` + +```javascript +// Set workbook dates to 1904 date system +workbook.properties.date1904 = true; +``` + +## Set Calculation Properties[⬆](#contents) + +```javascript +// Force workbook calculation on load +workbook.calcProperties.fullCalcOnLoad = true; +``` + +## Workbook Views[⬆](#contents) + +The Workbook views controls how many separate windows Excel will open when viewing the workbook. + +```javascript +workbook.views = [ + { + x: 0, y: 0, width: 10000, height: 20000, + firstSheet: 0, activeTab: 1, visibility: 'visible' + } +] +``` + +## Add a Worksheet[⬆](#contents) + +```javascript +const sheet = workbook.addWorksheet('My Sheet'); +``` + +Use the second parameter of the addWorksheet function to specify options for the worksheet. + +For Example: + +```javascript +// create a sheet with red tab colour +const sheet = workbook.addWorksheet('My Sheet', {properties:{tabColor:{argb:'FFC0000'}}}); + +// create a sheet where the grid lines are hidden +const sheet = workbook.addWorksheet('My Sheet', {views: [{showGridLines: false}]}); + +// create a sheet with the first row and column frozen +const sheet = workbook.addWorksheet('My Sheet', {views:[{state: 'frozen', xSplit: 1, ySplit:1}]}); + +// Create worksheets with headers and footers +const sheet = workbook.addWorksheet('My Sheet', { + headerFooter:{firstHeader: "Hello Exceljs", firstFooter: "Hello World"} +}); + +// create new sheet with pageSetup settings for A4 - landscape +const worksheet = workbook.addWorksheet('My Sheet', { + pageSetup:{paperSize: 9, orientation:'landscape'} +}); +``` + +## Remove a Worksheet[⬆](#contents) + +Use the worksheet `id` to remove the sheet from workbook. + +For Example: + +```javascript +// Create a worksheet +const sheet = workbook.addWorksheet('My Sheet'); + +// Remove the worksheet using worksheet id +workbook.removeWorksheet(sheet.id) +``` + +## Access Worksheets[⬆](#contents) +```javascript +// Iterate over all sheets +// Note: workbook.worksheets.forEach will still work but this is better +workbook.eachSheet(function(worksheet, sheetId) { + // ... +}); + +// fetch sheet by name +const worksheet = workbook.getWorksheet('My Sheet'); + +// fetch sheet by id +// INFO: Be careful when using it! +// It tries to access to `worksheet.id` field. Sometimes (really very often) workbook has worksheets with id not starting from 1. +// For instance It happens when any worksheet has been deleted. +// It's much more safety when you assume that ids are random. And stop to use this function. +// If you need to access all worksheets in a loop please look to the next example. +const worksheet = workbook.getWorksheet(1); + +// access by `worksheets` array: +workbook.worksheets[0]; //the first one; + +``` + +It's important to know that `workbook.getWorksheet(1) != Workbook.worksheets[0]` and `workbook.getWorksheet(1) != Workbook.worksheets[1]`, +because `workbook.worksheets[0].id` may have any value. + +## Worksheet State[⬆](#contents) + +```javascript +// make worksheet visible +worksheet.state = 'visible'; + +// make worksheet hidden +worksheet.state = 'hidden'; + +// make worksheet hidden from 'hide/unhide' dialog +worksheet.state = 'veryHidden'; +``` + +## Worksheet Properties[⬆](#contents) + +Worksheets support a property bucket to allow control over some features of the worksheet. + +```javascript +// create new sheet with properties +const worksheet = workbook.addWorksheet('sheet', {properties:{tabColor:{argb:'FF00FF00'}}}); + +// create a new sheet writer with properties +const worksheetWriter = workbookWriter.addWorksheet('sheet', {properties:{outlineLevelCol:1}}); + +// adjust properties afterwards (not supported by worksheet-writer) +worksheet.properties.outlineLevelCol = 2; +worksheet.properties.defaultRowHeight = 15; +``` + +**Supported Properties** + +| Name | Default | Description | +| ---------------- | ---------- | ----------- | +| tabColor | undefined | Color of the tabs | +| outlineLevelCol | 0 | The worksheet column outline level | +| outlineLevelRow | 0 | The worksheet row outline level | +| defaultRowHeight | 15 | Default row height | +| defaultColWidth | (optional) | Default column width | +| dyDescent | 55 | TBD | + +### Worksheet Metrics[⬆](#contents) + +Some new metrics have been added to Worksheet... + +| Name | Description | +| ----------------- | ----------- | +| rowCount | The total row size of the document. Equal to the row number of the last row that has values. | +| actualRowCount | A count of the number of rows that have values. If a mid-document row is empty, it will not be included in the count. | +| columnCount | The total column size of the document. Equal to the maximum cell count from all of the rows | +| actualColumnCount | A count of the number of columns that have values. | + + +## Page Setup[⬆](#contents) + +All properties that can affect the printing of a sheet are held in a pageSetup object on the sheet. + +```javascript +// create new sheet with pageSetup settings for A4 - landscape +const worksheet = workbook.addWorksheet('sheet', { + pageSetup:{paperSize: 9, orientation:'landscape'} +}); + +// create a new sheet writer with pageSetup settings for fit-to-page +const worksheetWriter = workbookWriter.addWorksheet('sheet', { + pageSetup:{fitToPage: true, fitToHeight: 5, fitToWidth: 7} +}); + +// adjust pageSetup settings afterwards +worksheet.pageSetup.margins = { + left: 0.7, right: 0.7, + top: 0.75, bottom: 0.75, + header: 0.3, footer: 0.3 +}; + +// Set Print Area for a sheet +worksheet.pageSetup.printArea = 'A1:G20'; + +// Set multiple Print Areas by separating print areas with '&&' +worksheet.pageSetup.printArea = 'A1:G10&&A11:G20'; + +// Repeat specific rows on every printed page +worksheet.pageSetup.printTitlesRow = '1:3'; + +// Repeat specific columns on every printed page +worksheet.pageSetup.printTitlesColumn = 'A:C'; +``` + +**Supported pageSetup settings** + +| Name | Default | Description | +| --------------------- | ------------- | ----------- | +| margins | | Whitespace on the borders of the page. Units are inches. | +| orientation | 'portrait' | Orientation of the page - i.e. taller (portrait) or wider (landscape) | +| horizontalDpi | 4294967295 | Horizontal Dots per Inch. Default value is -1 | +| verticalDpi | 4294967295 | Vertical Dots per Inch. Default value is -1 | +| fitToPage | | Whether to use fitToWidth and fitToHeight or scale settings. Default is based on presence of these settings in the pageSetup object - if both are present, scale wins (i.e. default will be false) | +| pageOrder | 'downThenOver'| Which order to print the pages - one of ['downThenOver', 'overThenDown'] | +| blackAndWhite | false | Print without colour | +| draft | false | Print with less quality (and ink) | +| cellComments | 'None' | Where to place comments - one of ['atEnd', 'asDisplayed', 'None'] | +| errors | 'displayed' | Where to show errors - one of ['dash', 'blank', 'NA', 'displayed'] | +| scale | 100 | Percentage value to increase or reduce the size of the print. Active when fitToPage is false | +| fitToWidth | 1 | How many pages wide the sheet should print on to. Active when fitToPage is true | +| fitToHeight | 1 | How many pages high the sheet should print on to. Active when fitToPage is true | +| paperSize | | What paper size to use (see below) | +| showRowColHeaders | false | Whether to show the row numbers and column letters | +| showGridLines | false | Whether to show grid lines | +| firstPageNumber | | Which number to use for the first page | +| horizontalCentered | false | Whether to center the sheet data horizontally | +| verticalCentered | false | Whether to center the sheet data vertically | + +**Example Paper Sizes** + +| Name | Value | +| ----------------------------- | --------- | +| Letter | undefined | +| Legal | 5 | +| Executive | 7 | +| A3 | 8 | +| A4 | 9 | +| A5 | 11 | +| B5 (JIS) | 13 | +| Envelope #10 | 20 | +| Envelope DL | 27 | +| Envelope C5 | 28 | +| Envelope B5 | 34 | +| Envelope Monarch | 37 | +| Double Japan Postcard Rotated | 82 | +| 16K 197x273 mm | 119 | + +## Headers and Footers[⬆](#contents) + +Here's how to add headers and footers. +The added content is mainly text, such as time, introduction, file information, etc., and you can set the style of the text. +In addition, you can set different texts for the first page and even page. + +Note: Images are not currently supported. + +```javascript + +// Create worksheets with headers and footers +var sheet = workbook.addWorksheet('sheet', { + headerFooter:{firstHeader: "Hello Exceljs", firstFooter: "Hello World"} +}); +// Create worksheets with headers and footers +var worksheetWriter = workbookWriter.addWorksheet('sheet', { + headerFooter:{firstHeader: "Hello Exceljs", firstFooter: "Hello World"} +}); +// Set footer (default centered), result: "Page 2 of 16" +worksheet.headerFooter.oddFooter = "Page &P of &N"; + +// Set the footer (default centered) to bold, resulting in: "Page 2 of 16" +worksheet.headerFooter.oddFooter = "Page &P of &N"; + +// Set the left footer to 18px and italicize. Result: "Page 2 of 16" +worksheet.headerFooter.oddFooter = "&LPage &P of &N"; + +// Set the middle header to gray Aril, the result: "52 exceljs" +worksheet.headerFooter.oddHeader = "&C&KCCCCCC&\"Aril\"52 exceljs"; + +// Set the left, center, and right text of the footer. Result: “Exceljs” in the footer left. “demo.xlsx” in the footer center. “Page 2” in the footer right +worksheet.headerFooter.oddFooter = "&Lexceljs&C&F&RPage &P"; + +// Add different header & footer for the first page +worksheet.headerFooter.differentFirst = true; +worksheet.headerFooter.firstHeader = "Hello Exceljs"; +worksheet.headerFooter.firstFooter = "Hello World" +``` + +**Supported headerFooter settings** + +| Name | Default | Description | +| ----------------- | --------- | ----------- | +| differentFirst | false | Set the value of differentFirst as true, which indicates that headers/footers for first page are different from the other pages | +| differentOddEven | false | Set the value of differentOddEven as true, which indicates that headers/footers for odd and even pages are different | +| oddHeader | null | Set header string for odd(default) pages, could format the string | +| oddFooter | null | Set footer string for odd(default) pages, could format the string | +| evenHeader | null | Set header string for even pages, could format the string | +| evenFooter | null | Set footer string for even pages, could format the string | +| firstHeader | null | Set header string for the first page, could format the string | +| firstFooter | null | Set footer string for the first page, could format the string | + +**Script Commands** + +| Commands | Description | +| ------------ | ----------- | +| &L | Set position to the left | +| &C | Set position to the center | +| &R | Set position to the right | +| &P | The current page number | +| &N | The total number of pages | +| &D | The current date | +| &T | The current time | +| &G | A picture | +| &A | The worksheet name | +| &F | The file name | +| &B | Make text bold | +| &I | Italicize text | +| &U | Underline text | +| &"font name" | font name, for example &"Aril" | +| &font size | font size, for example 12 | +| &KHEXCode | font color, for example &KCCCCCC | + +## Worksheet Views[⬆](#contents) + +Worksheets now support a list of views, that control how Excel presents the sheet: + +* frozen - where a number of rows and columns to the top and left are frozen in place. Only the bottom right section will scroll +* split - where the view is split into 4 sections, each semi-independently scrollable. + +Each view also supports various properties: + +| Name | Default | Description | +| ----------------- | --------- | ----------- | +| state | 'normal' | Controls the view state - one of normal, frozen or split | +| rightToLeft | false | Sets the worksheet view's orientation to right-to-left | +| activeCell | undefined | The currently selected cell | +| showRuler | true | Shows or hides the ruler in Page Layout | +| showRowColHeaders | true | Shows or hides the row and column headers (e.g. A1, B1 at the top and 1,2,3 on the left | +| showGridLines | true | Shows or hides the gridlines (shown for cells where borders have not been defined) | +| zoomScale | 100 | Percentage zoom to use for the view | +| zoomScaleNormal | 100 | Normal zoom for the view | +| style | undefined | Presentation style - one of pageBreakPreview or pageLayout. Note pageLayout is not compatible with frozen views | + +### Frozen Views[⬆](#contents) + +Frozen views support the following extra properties: + +| Name | Default | Description | +| ----------------- | --------- | ----------- | +| xSplit | 0 | How many columns to freeze. To freeze rows only, set this to 0 or undefined | +| ySplit | 0 | How many rows to freeze. To freeze columns only, set this to 0 or undefined | +| topLeftCell | special | Which cell will be top-left in the bottom-right pane. Note: cannot be a frozen cell. Defaults to first unfrozen cell | + +```javascript +worksheet.views = [ + {state: 'frozen', xSplit: 2, ySplit: 3, topLeftCell: 'G10', activeCell: 'A1'} +]; +``` + +### Split Views[⬆](#contents) + +Split views support the following extra properties: + +| Name | Default | Description | +| ----------------- | --------- | ----------- | +| xSplit | 0 | How many points from the left to place the splitter. To split vertically, set this to 0 or undefined | +| ySplit | 0 | How many points from the top to place the splitter. To split horizontally, set this to 0 or undefined | +| topLeftCell | undefined | Which cell will be top-left in the bottom-right pane. | +| activePane | undefined | Which pane will be active - one of topLeft, topRight, bottomLeft and bottomRight | + +```javascript +worksheet.views = [ + {state: 'split', xSplit: 2000, ySplit: 3000, topLeftCell: 'G10', activeCell: 'A1'} +]; +``` + +## Auto filters[⬆](#contents) + +It is possible to apply an auto filter to your worksheet. + +```javascript +worksheet.autoFilter = 'A1:C1'; +``` + +While the range string is the standard form of the autoFilter, the worksheet will also support the +following values: + +```javascript +// Set an auto filter from A1 to C1 +worksheet.autoFilter = { + from: 'A1', + to: 'C1', +} + +// Set an auto filter from the cell in row 3 and column 1 +// to the cell in row 5 and column 12 +worksheet.autoFilter = { + from: { + row: 3, + column: 1 + }, + to: { + row: 5, + column: 12 + } +} + +// Set an auto filter from D3 to the +// cell in row 7 and column 5 +worksheet.autoFilter = { + from: 'D3', + to: { + row: 7, + column: 5 + } +} +``` + +## Columns[⬆](#contents) + +```javascript +// Add column headers and define column keys and widths +// Note: these column structures are a workbook-building convenience only, +// apart from the column width, they will not be fully persisted. +worksheet.columns = [ + { header: 'Id', key: 'id', width: 10 }, + { header: 'Name', key: 'name', width: 32 }, + { header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 } +]; + +// Access an individual columns by key, letter and 1-based column number +const idCol = worksheet.getColumn('id'); +const nameCol = worksheet.getColumn('B'); +const dobCol = worksheet.getColumn(3); + +// set column properties + +// Note: will overwrite cell value C1 +dobCol.header = 'Date of Birth'; + +// Note: this will overwrite cell values C1:C2 +dobCol.header = ['Date of Birth', 'A.K.A. D.O.B.']; + +// from this point on, this column will be indexed by 'dob' and not 'DOB' +dobCol.key = 'dob'; + +dobCol.width = 15; + +// Hide the column if you'd like +dobCol.hidden = true; + +// set an outline level for columns +worksheet.getColumn(4).outlineLevel = 0; +worksheet.getColumn(5).outlineLevel = 1; + +// columns support a readonly field to indicate the collapsed state based on outlineLevel +expect(worksheet.getColumn(4).collapsed).to.equal(false); +expect(worksheet.getColumn(5).collapsed).to.equal(true); + +// iterate over all current cells in this column +dobCol.eachCell(function(cell, rowNumber) { + // ... +}); + +// iterate over all current cells in this column including empty cells +dobCol.eachCell({ includeEmpty: true }, function(cell, rowNumber) { + // ... +}); + +// add a column of new values +worksheet.getColumn(6).values = [1,2,3,4,5]; + +// add a sparse column of values +worksheet.getColumn(7).values = [,,2,3,,5,,7,,,,11]; + +// cut one or more columns (columns to the right are shifted left) +// If column properties have been defined, they will be cut or moved accordingly +// Known Issue: If a splice causes any merged cells to move, the results may be unpredictable +worksheet.spliceColumns(3,2); + +// remove one column and insert two more. +// Note: columns 4 and above will be shifted right by 1 column. +// Also: If the worksheet has more rows than values in the column inserts, +// the rows will still be shifted as if the values existed +const newCol3Values = [1,2,3,4,5]; +const newCol4Values = ['one', 'two', 'three', 'four', 'five']; +worksheet.spliceColumns(3, 1, newCol3Values, newCol4Values); + +``` + +## Rows[⬆](#contents) + +```javascript +// Get a row object. If it doesn't already exist, a new empty one will be returned +const row = worksheet.getRow(5); + +// Get multiple row objects. If it doesn't already exist, new empty ones will be returned +const rows = worksheet.getRows(5, 2); // start, length (>0, else undefined is returned) + +// Get the last editable row in a worksheet (or undefined if there are none) +const row = worksheet.lastRow; + +// Set a specific row height +row.height = 42.5; + +// make row hidden +row.hidden = true; + +// set an outline level for rows +worksheet.getRow(4).outlineLevel = 0; +worksheet.getRow(5).outlineLevel = 1; + +// rows support a readonly field to indicate the collapsed state based on outlineLevel +expect(worksheet.getRow(4).collapsed).to.equal(false); +expect(worksheet.getRow(5).collapsed).to.equal(true); + + +row.getCell(1).value = 5; // A5's value set to 5 +row.getCell('name').value = 'Zeb'; // B5's value set to 'Zeb' - assuming column 2 is still keyed by name +row.getCell('C').value = new Date(); // C5's value set to now + +// Get a row as a sparse array +// Note: interface change: worksheet.getRow(4) ==> worksheet.getRow(4).values +row = worksheet.getRow(4).values; +expect(row[5]).toEqual('Kyle'); + +// assign row values by contiguous array (where array element 0 has a value) +row.values = [1,2,3]; +expect(row.getCell(1).value).toEqual(1); +expect(row.getCell(2).value).toEqual(2); +expect(row.getCell(3).value).toEqual(3); + +// assign row values by sparse array (where array element 0 is undefined) +const values = [] +values[5] = 7; +values[10] = 'Hello, World!'; +row.values = values; +expect(row.getCell(1).value).toBeNull(); +expect(row.getCell(5).value).toEqual(7); +expect(row.getCell(10).value).toEqual('Hello, World!'); + +// assign row values by object, using column keys +row.values = { + id: 13, + name: 'Thing 1', + dob: new Date() +}; + +// Insert a page break below the row +row.addPageBreak(); + +// Iterate over all rows that have values in a worksheet +worksheet.eachRow(function(row, rowNumber) { + console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values)); +}); + +// Iterate over all rows (including empty rows) in a worksheet +worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) { + console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values)); +}); + +// Iterate over all non-null cells in a row +row.eachCell(function(cell, colNumber) { + console.log('Cell ' + colNumber + ' = ' + cell.value); +}); + +// Iterate over all cells in a row (including empty cells) +row.eachCell({ includeEmpty: true }, function(cell, colNumber) { + console.log('Cell ' + colNumber + ' = ' + cell.value); +}); + +// Commit a completed row to stream +row.commit(); + +// row metrics +const rowSize = row.cellCount; +const numValues = row.actualCellCount; +``` + +## Add Rows[⬆](#contents) + +```javascript +// Add a couple of Rows by key-value, after the last current row, using the column keys +worksheet.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)}); +worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)}); + +// Add a row by contiguous Array (assign to columns A, B & C) +worksheet.addRow([3, 'Sam', new Date()]); + +// Add a row by sparse Array (assign to columns A, E & I) +const rowValues = []; +rowValues[1] = 4; +rowValues[5] = 'Kyle'; +rowValues[9] = new Date(); +worksheet.addRow(rowValues); + +// Add a row with inherited style +// This new row will have same style as last row +// And return as row object +const newRow = worksheet.addRow(rowValues, 'i'); + +// Add an array of rows +const rows = [ + [5,'Bob',new Date()], // row by array + {id:6, name: 'Barbara', dob: new Date()} +]; +// add new rows and return them as array of row objects +const newRows = worksheet.addRows(rows); + +// Add an array of rows with inherited style +// These new rows will have same styles as last row +// and return them as array of row objects +const newRowsStyled = worksheet.addRows(rows, 'i'); +``` +| Parameter | Description | Default Value | +| -------------- | ----------------- | -------- | +| value/s | The new row/s values | | +| style | 'i' for inherit from row above, 'i+' to include empty cells, 'n' for none | *'n'* | + +## Handling Individual Cells[⬆](#contents) + +```javascript +const cell = worksheet.getCell('C3'); + +// Modify/Add individual cell +cell.value = new Date(1968, 5, 1); + +// query a cell's type +expect(cell.type).toEqual(Excel.ValueType.Date); + +// use string value of cell +myInput.value = cell.text; + +// use html-safe string for rendering... +const html = '
' + cell.html + '
'; + +``` + +## Merged Cells[⬆](#contents) + +```javascript +// merge a range of cells +worksheet.mergeCells('A4:B5'); + +// ... merged cells are linked +worksheet.getCell('B5').value = 'Hello, World!'; +expect(worksheet.getCell('B5').value).toBe(worksheet.getCell('A4').value); +expect(worksheet.getCell('B5').master).toBe(worksheet.getCell('A4')); + +// ... merged cells share the same style object +expect(worksheet.getCell('B5').style).toBe(worksheet.getCell('A4').style); +worksheet.getCell('B5').style.font = myFonts.arial; +expect(worksheet.getCell('A4').style.font).toBe(myFonts.arial); + +// unmerging the cells breaks the style links +worksheet.unMergeCells('A4'); +expect(worksheet.getCell('B5').style).not.toBe(worksheet.getCell('A4').style); +expect(worksheet.getCell('B5').style.font).not.toBe(myFonts.arial); + +// merge by top-left, bottom-right +worksheet.mergeCells('K10', 'M12'); + +// merge by start row, start column, end row, end column (equivalent to K10:M12) +worksheet.mergeCells(10,11,12,13); +``` + +## Insert Rows[⬆](#contents) + +```javascript +insertRow(pos, value, style = 'n') +insertRows(pos, values, style = 'n') + +// Insert a couple of Rows by key-value, shifting down rows every time +worksheet.insertRow(1, {id: 1, name: 'John Doe', dob: new Date(1970,1,1)}); +worksheet.insertRow(1, {id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)}); + +// Insert a row by contiguous Array (assign to columns A, B & C) +worksheet.insertRow(1, [3, 'Sam', new Date()]); + +// Insert a row by sparse Array (assign to columns A, E & I) +var rowValues = []; +rowValues[1] = 4; +rowValues[5] = 'Kyle'; +rowValues[9] = new Date(); +// insert new row and return as row object +const insertedRow = worksheet.insertRow(1, rowValues); + +// Insert a row, with inherited style +// This new row will have same style as row on top of it +// And return as row object +const insertedRowInherited = worksheet.insertRow(1, rowValues, 'i'); + +// Insert a row, keeping original style +// This new row will have same style as it was previously +// And return as row object +const insertedRowOriginal = worksheet.insertRow(1, rowValues, 'o'); + +// Insert an array of rows, in position 1, shifting down current position 1 and later rows by 2 rows +var rows = [ + [5,'Bob',new Date()], // row by array + {id:6, name: 'Barbara', dob: new Date()} +]; +// insert new rows and return them as array of row objects +const insertedRows = worksheet.insertRows(1, rows); + +// Insert an array of rows, with inherited style +// These new rows will have same style as row on top of it +// And return them as array of row objects +const insertedRowsInherited = worksheet.insertRows(1, rows, 'i'); + +// Insert an array of rows, keeping original style +// These new rows will have same style as it was previously in 'pos' position +const insertedRowsOriginal = worksheet.insertRows(1, rows, 'o'); + +``` +| Parameter | Description | Default Value | +| -------------- | ----------------- | -------- | +| pos | Row number where you want to insert, pushing down all rows from there | | +| value/s | The new row/s values | | +| style | 'i' for inherit from row above, , 'i+' to include empty cells, 'o' for original style, 'o+' to include empty cells, 'n' for none | *'n'* | + +## Splice[⬆](#contents) + +```javascript +// Cut one or more rows (rows below are shifted up) +// Known Issue: If a splice causes any merged cells to move, the results may be unpredictable +worksheet.spliceRows(4, 3); + +// remove one row and insert two more. +// Note: rows 4 and below will be shifted down by 1 row. +const newRow3Values = [1, 2, 3, 4, 5]; +const newRow4Values = ['one', 'two', 'three', 'four', 'five']; +worksheet.spliceRows(3, 1, newRow3Values, newRow4Values); + +// Cut one or more cells (cells to the right are shifted left) +// Note: this operation will not affect other rows +row.splice(3, 2); + +// remove one cell and insert two more (cells to the right of the cut cell will be shifted right) +row.splice(4, 1, 'new value 1', 'new value 2'); +``` +| Parameter | Description | Default Value | +| -------------- | ----------------- | -------- | +| start | Starting point to splice from | | +| count | Number of rows/cells to remove | | +| ...inserts | New row/cell values to insert | | + +## Duplicate a Row[⬆](#contents) + +```javascript +duplicateRow(start, amount = 1, insert = true) + +const wb = new ExcelJS.Workbook(); +const ws = wb.addWorksheet('duplicateTest'); +ws.getCell('A1').value = 'One'; +ws.getCell('A2').value = 'Two'; +ws.getCell('A3').value = 'Three'; +ws.getCell('A4').value = 'Four'; + +// This line will duplicate the row 'One' twice but it will replace rows 'Two' and 'Three' +// if third param was true so it would insert 2 new rows with the values and styles of row 'One' +ws.duplicateRow(1,2,false); +``` + +| Parameter | Description | Default Value | +| -------------- | ----------------- | -------- | +| start | Row number you want to duplicate (first in excel is 1) | | +| amount | The times you want to duplicate the row | 1 | +| insert | *true* if you want to insert new rows for the duplicates, or *false* if you want to replace them | *true* | + + + +## Defined Names[⬆](#contents) + +Individual cells (or multiple groups of cells) can have names assigned to them. + The names can be used in formulas and data validation (and probably more). + +```javascript +// assign (or get) a name for a cell (will overwrite any other names that cell had) +worksheet.getCell('A1').name = 'PI'; +expect(worksheet.getCell('A1').name).to.equal('PI'); + +// assign (or get) an array of names for a cell (cells can have more than one name) +worksheet.getCell('A1').names = ['thing1', 'thing2']; +expect(worksheet.getCell('A1').names).to.have.members(['thing1', 'thing2']); + +// remove a name from a cell +worksheet.getCell('A1').removeName('thing1'); +expect(worksheet.getCell('A1').names).to.have.members(['thing2']); +``` + +## Data Validations[⬆](#contents) + +Cells can define what values are valid or not and provide prompting to the user to help guide them. + +Validation types can be one of the following: + +| Type | Description | +| ---------- | ----------- | +| list | Define a discrete set of valid values. Excel will offer these in a dropdown for easy entry | +| whole | The value must be a whole number | +| decimal | The value must be a decimal number | +| textLength | The value may be text but the length is controlled | +| custom | A custom formula controls the valid values | + +For types other than list or custom, the following operators affect the validation: + +| Operator | Description | +| -------------------- | ----------- | +| between | Values must lie between formula results | +| notBetween | Values must not lie between formula results | +| equal | Value must equal formula result | +| notEqual | Value must not equal formula result | +| greaterThan | Value must be greater than formula result | +| lessThan | Value must be less than formula result | +| greaterThanOrEqual | Value must be greater than or equal to formula result | +| lessThanOrEqual | Value must be less than or equal to formula result | + +```javascript +// Specify list of valid values (One, Two, Three, Four). +// Excel will provide a dropdown with these values. +worksheet.getCell('A1').dataValidation = { + type: 'list', + allowBlank: true, + formulae: ['"One,Two,Three,Four"'] +}; + +// Specify list of valid values from a range. +// Excel will provide a dropdown with these values. +worksheet.getCell('A1').dataValidation = { + type: 'list', + allowBlank: true, + formulae: ['$D$5:$F$5'] +}; + +// Specify Cell must be a whole number that is not 5. +// Show the user an appropriate error message if they get it wrong +worksheet.getCell('A1').dataValidation = { + type: 'whole', + operator: 'notEqual', + showErrorMessage: true, + formulae: [5], + errorStyle: 'error', + errorTitle: 'Five', + error: 'The value must not be Five' +}; + +// Specify Cell must be a decimal number between 1.5 and 7. +// Add 'tooltip' to help guid the user +worksheet.getCell('A1').dataValidation = { + type: 'decimal', + operator: 'between', + allowBlank: true, + showInputMessage: true, + formulae: [1.5, 7], + promptTitle: 'Decimal', + prompt: 'The value must between 1.5 and 7' +}; + +// Specify Cell must be have a text length less than 15 +worksheet.getCell('A1').dataValidation = { + type: 'textLength', + operator: 'lessThan', + showErrorMessage: true, + allowBlank: true, + formulae: [15] +}; + +// Specify Cell must be have be a date before 1st Jan 2016 +worksheet.getCell('A1').dataValidation = { + type: 'date', + operator: 'lessThan', + showErrorMessage: true, + allowBlank: true, + formulae: [new Date(2016,0,1)] +}; +``` + +## Cell Comments[⬆](#contents) + +Add old style comment to a cell + +```javascript +// plain text note +worksheet.getCell('A1').note = 'Hello, ExcelJS!'; + +// colourful formatted note +ws.getCell('B1').note = { + texts: [ + {'font': {'size': 12, 'color': {'theme': 0}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': 'This is '}, + {'font': {'italic': true, 'size': 12, 'color': {'theme': 0}, 'name': 'Calibri', 'scheme': 'minor'}, 'text': 'a'}, + {'font': {'size': 12, 'color': {'theme': 1}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': ' '}, + {'font': {'size': 12, 'color': {'argb': 'FFFF6600'}, 'name': 'Calibri', 'scheme': 'minor'}, 'text': 'colorful'}, + {'font': {'size': 12, 'color': {'theme': 1}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': ' text '}, + {'font': {'size': 12, 'color': {'argb': 'FFCCFFCC'}, 'name': 'Calibri', 'scheme': 'minor'}, 'text': 'with'}, + {'font': {'size': 12, 'color': {'theme': 1}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': ' in-cell '}, + {'font': {'bold': true, 'size': 12, 'color': {'theme': 1}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': 'format'}, + ], + margins: { + insetmode: 'custom', + inset: [0.25, 0.25, 0.35, 0.35] + }, + protection: { + locked: True, + lockText: False + }, + editAs: 'twoCells', +}; +``` + +### Cell Comments Properties[⬆](#contents) + +The following table defines the properties supported by cell comments. + +| Field | Required | Default Value | Description | +| -------- | -------- | ------------- | ----------- | +| texts | Y | | The text of the comment | +| margins | N | {} | Determines the value of margins for automatic or custom cell comments +| protection | N | {} | Specifying the lock status of objects and object text using protection attributes | +| editAs | N | 'absolute' | Use the 'editAs' attribute to specify how the annotation is anchored to the cell | + +### Cell Comments Margins + +Determine the page margin setting mode of the cell annotation, automatic or custom mode. + +```javascript +ws.getCell('B1').note.margins = { + insetmode: 'custom', + inset: [0.25, 0.25, 0.35, 0.35] +} +``` + +### Supported Margins Properties[⬆](#contents) + +| Property | Required | Default Value | Description | +| -------- | -------- | ------------- | ----------- | +| insetmode | N | 'auto' | Determines whether comment margins are set automatically and the value is 'auto' or 'custom' | +| inset | N | [0.13, 0.13, 0.25, 0.25] | Whitespace on the borders of the comment. Units are centimeter. Direction is left, top, right, bottom | + +Note: This ```inset``` setting takes effect only when the value of ```insetmode``` is 'custom'. + +### Cell Comments Protection + +Specifying the lock status of objects and object text using protection attributes. + +```javascript +ws.getCell('B1').note.protection = { + locked: 'False', + lockText: 'False', +}; +``` + +### Supported Protection Properties[⬆](#contents) + +| Property | Required | Default Value | Description | +| -------- | -------- | ------------- | ----------- | +| locked | N | 'True' | This element specifies that the object is locked when the sheet is protected | +| lockText | N | 'True' | This element specifies that the text of the object is locked | + +Note: Locked objects are valid only when the worksheet is protected. + +### Cell Comments EditAs[⬆](#contents) + +The cell comments can also have the property 'editAs' which will control how the comments is anchored to the cell(s). +It can have one of the following values: + +```javascript +ws.getCell('B1').note.editAs = 'twoCells'; +``` + +| Value | Description | +| --------- | ----------- | +| twoCells | It specifies that the size and position of the note varies with cells | +| oneCells | It specifies that the size of the note is fixed and the position changes with the cell | +| absolute | This is the default. Comments will not be moved or sized with cells | + +## Tables[⬆](#contents) + +Tables allow for in-sheet manipulation of tabular data. + +To add a table to a worksheet, define a table model and call addTable: + +```javascript +// add a table to a sheet +ws.addTable({ + name: 'MyTable', + ref: 'A1', + headerRow: true, + totalsRow: true, + style: { + theme: 'TableStyleDark3', + showRowStripes: true, + }, + columns: [ + {name: 'Date', totalsRowLabel: 'Totals:', filterButton: true}, + {name: 'Amount', totalsRowFunction: 'sum', filterButton: false}, + ], + rows: [ + [new Date('2019-07-20'), 70.10], + [new Date('2019-07-21'), 70.60], + [new Date('2019-07-22'), 70.10], + ], +}); +``` + +Note: Adding a table to a worksheet will modify the sheet by placing +headers and row data to the sheet. +Any data on the sheet covered by the resulting table (including headers and +totals) will be overwritten. + +### Table Properties[⬆](#contents) + +The following table defines the properties supported by tables. + +| Table Property | Description | Required | Default Value | +| -------------- | ----------------- | -------- | ------------- | +| name | The name of the table | Y | | +| displayName | The display name of the table | N | name | +| ref | Top left cell of the table | Y | | +| headerRow | Show headers at top of table | N | true | +| totalsRow | Show totals at bottom of table | N | false | +| style | Extra style properties | N | {} | +| columns | Column definitions | Y | | +| rows | Rows of data | Y | | + +### Table Style Properties[⬆](#contents) + +The following table defines the properties supported within the table +style property. + +| Style Property | Description | Required | Default Value | +| ------------------ | ----------------- | -------- | ------------- | +| theme | The colour theme of the table | N | 'TableStyleMedium2' | +| showFirstColumn | Highlight the first column (bold) | N | false | +| showLastColumn | Highlight the last column (bold) | N | false | +| showRowStripes | Alternate rows shown with background colour | N | false | +| showColumnStripes | Alternate rows shown with background colour | N | false | + +### Table Column Properties[⬆](#contents) + +The following table defines the properties supported within each table +column. + +| Column Property | Description | Required | Default Value | +| ------------------ | ----------------- | -------- | ------------- | +| name | The name of the column, also used in the header | Y | | +| filterButton | Switches the filter control in the header | N | false | +| totalsRowLabel | Label to describe the totals row (first column) | N | 'Total' | +| totalsRowFunction | Name of the totals function | N | 'none' | +| totalsRowFormula | Optional formula for custom functions | N | | + +### Totals Functions[⬆](#contents) + +The following table list the valid values for the totalsRowFunction property +defined by columns. If any value other than 'custom' is used, it is not +necessary to include the associated formula as this will be inserted +by the table. + +| Totals Functions | Description | +| ------------------ | ----------------- | +| none | No totals function for this column | +| average | Compute average for the column | +| countNums | Count the entries that are numbers | +| count | Count of entries | +| max | The maximum value in this column | +| min | The minimum value in this column | +| stdDev | The standard deviation for this column | +| var | The variance for this column | +| sum | The sum of entries for this column | +| custom | A custom formula. Requires an associated totalsRowFormula value. | + +### Table Style Themes[⬆](#contents) + +Valid theme names follow the following pattern: + +* "TableStyle[Shade][Number]" + +Shades, Numbers can be one of: + +* Light, 1-21 +* Medium, 1-28 +* Dark, 1-11 + +For no theme, use the value null. + +Note: custom table themes are not supported by exceljs yet. + +### Modifying Tables[⬆](#contents) + +Tables support a set of manipulation functions that allow data to be +added or removed and some properties to be changed. Since many of these +operations may have on-sheet effects, the changes must be committed +once complete. + +All index values in the table are zero based, so the first row number +and first column number is 0. + +**Adding or Removing Headers and Totals** + +```javascript +const table = ws.getTable('MyTable'); + +// turn header row on +table.headerRow = true; + +// turn totals row off +table.totalsRow = false; + +// commit the table changes into the sheet +table.commit(); +``` + +**Relocating a Table** + +```javascript +const table = ws.getTable('MyTable'); + +// table top-left move to D4 +table.ref = 'D4'; + +// commit the table changes into the sheet +table.commit(); +``` + +**Adding and Removing Rows** + +```javascript +const table = ws.getTable('MyTable'); + +// remove first two rows +table.removeRows(0, 2); + +// insert new rows at index 5 +table.addRow([new Date('2019-08-05'), 5, 'Mid'], 5); + +// append new row to bottom of table +table.addRow([new Date('2019-08-10'), 10, 'End']); + +// commit the table changes into the sheet +table.commit(); +``` + +**Adding and Removing Columns** + +```javascript +const table = ws.getTable('MyTable'); + +// remove second column +table.removeColumns(1, 1); + +// insert new column (with data) at index 1 +table.addColumn( + {name: 'Letter', totalsRowFunction: 'custom', totalsRowFormula: 'ROW()', totalsRowResult: 6, filterButton: true}, + ['a', 'b', 'c', 'd'], + 2 +); + +// commit the table changes into the sheet +table.commit(); +``` + +**Change Column Properties** + +```javascript +const table = ws.getTable('MyTable'); + +// Get Column Wrapper for second column +const column = table.getColumn(1); + +// set some properties +column.name = 'Code'; +column.filterButton = true; +column.style = {font:{bold: true, name: 'Comic Sans MS'}}; +column.totalsRowLabel = 'Totals'; +column.totalsRowFunction = 'custom'; +column.totalsRowFormula = 'ROW()'; +column.totalsRowResult = 10; + +// commit the table changes into the sheet +table.commit(); +``` + + +## Styles[⬆](#contents) + +Cells, Rows and Columns each support a rich set of styles and formats that affect how the cells are displayed. + +Styles are set by assigning the following properties: + +* numFmt +* font +* alignment +* border +* fill + +```javascript +// assign a style to a cell +ws.getCell('A1').numFmt = '0.00%'; + +// Apply styles to worksheet columns +ws.columns = [ + { header: 'Id', key: 'id', width: 10 }, + { header: 'Name', key: 'name', width: 32, style: { font: { name: 'Arial Black' } } }, + { header: 'D.O.B.', key: 'DOB', width: 10, style: { numFmt: 'dd/mm/yyyy' } } +]; + +// Set Column 3 to Currency Format +ws.getColumn(3).numFmt = '"£"#,##0.00;[Red]\-"£"#,##0.00'; + +// Set Row 2 to Comic Sans. +ws.getRow(2).font = { name: 'Comic Sans MS', family: 4, size: 16, underline: 'double', bold: true }; +``` + +When a style is applied to a row or column, it will be applied to all currently existing cells in that row or column. + Also, any new cell that is created will inherit its initial styles from the row and column it belongs to. + +If a cell's row and column both define a specific style (e.g. font), the cell will use the row style over the column style. + However if the row and column define different styles (e.g. column.numFmt and row.font), the cell will inherit the font from the row and the numFmt from the column. + +Caveat: All the above properties (with the exception of numFmt, which is a string), are JS object structures. + If the same style object is assigned to more than one spreadsheet entity, then each entity will share the same style object. + If the style object is later modified before the spreadsheet is serialized, then all entities referencing that style object will be modified too. + This behaviour is intended to prioritize performance by reducing the number of JS objects created. + If you want the style objects to be independent, you will need to clone them before assigning them. + Also, by default, when a document is read from file (or stream) if spreadsheet entities share similar styles, then they will reference the same style object too. + +### Number Formats[⬆](#contents) + +```javascript +// display value as '1 3/5' +ws.getCell('A1').value = 1.6; +ws.getCell('A1').numFmt = '# ?/?'; + +// display value as '1.60%' +ws.getCell('B1').value = 0.016; +ws.getCell('B1').numFmt = '0.00%'; +``` + +### Fonts[⬆](#contents) + +```javascript + +// for the wannabe graphic designers out there +ws.getCell('A1').font = { + name: 'Comic Sans MS', + family: 4, + size: 16, + underline: true, + bold: true +}; + +// for the graduate graphic designers... +ws.getCell('A2').font = { + name: 'Arial Black', + color: { argb: 'FF00FF00' }, + family: 2, + size: 14, + italic: true +}; + +// for the vertical align +ws.getCell('A3').font = { + vertAlign: 'superscript' +}; + +// note: the cell will store a reference to the font object assigned. +// If the font object is changed afterwards, the cell font will change also... +const font = { name: 'Arial', size: 12 }; +ws.getCell('A3').font = font; +font.size = 20; // Cell A3 now has font size 20! + +// Cells that share similar fonts may reference the same font object after +// the workbook is read from file or stream +``` + +| Font Property | Description | Example Value(s) | +| ------------- | ----------------- | ---------------- | +| name | Font name. | 'Arial', 'Calibri', etc. | +| family | Font family for fallback. An integer value. | 1 - Serif, 2 - Sans Serif, 3 - Mono, Others - unknown | +| scheme | Font scheme. | 'minor', 'major', 'none' | +| charset | Font charset. An integer value. | 1, 2, etc. | +| size | Font size. An integer value. | 9, 10, 12, 16, etc. | +| color | Colour description, an object containing an ARGB value. | { argb: 'FFFF0000'} | +| bold | Font **weight** | true, false | +| italic | Font *slope* | true, false | +| underline | Font underline style | true, false, 'none', 'single', 'double', 'singleAccounting', 'doubleAccounting' | +| strike | Font strikethrough | true, false | +| outline | Font outline | true, false | +| vertAlign | Vertical align | 'superscript', 'subscript' + +### Alignment[⬆](#contents) + +```javascript +// set cell alignment to top-left, middle-center, bottom-right +ws.getCell('A1').alignment = { vertical: 'top', horizontal: 'left' }; +ws.getCell('B1').alignment = { vertical: 'middle', horizontal: 'center' }; +ws.getCell('C1').alignment = { vertical: 'bottom', horizontal: 'right' }; + +// set cell to wrap-text +ws.getCell('D1').alignment = { wrapText: true }; + +// set cell indent to 1 +ws.getCell('E1').alignment = { indent: 1 }; + +// set cell text rotation to 30deg upwards, 45deg downwards and vertical text +ws.getCell('F1').alignment = { textRotation: 30 }; +ws.getCell('G1').alignment = { textRotation: -45 }; +ws.getCell('H1').alignment = { textRotation: 'vertical' }; +``` + +**Valid Alignment Property Values** + +| horizontal | vertical | wrapText | shrinkToFit | indent | readingOrder | textRotation | +| ---------------- | ----------- | -------- | ----------- | ------- | ------------ | ------------ | +| left | top | true | true | integer | rtl | 0 to 90 | +| center | middle | false | false | | ltr | -1 to -90 | +| right | bottom | | | | | vertical | +| fill | distributed | | | | | | +| justify | justify | | | | | | +| centerContinuous | | | | | | | +| distributed | | | | | | | + + +### Borders[⬆](#contents) + +```javascript +// set single thin border around A1 +ws.getCell('A1').border = { + top: {style:'thin'}, + left: {style:'thin'}, + bottom: {style:'thin'}, + right: {style:'thin'} +}; + +// set double thin green border around A3 +ws.getCell('A3').border = { + top: {style:'double', color: {argb:'FF00FF00'}}, + left: {style:'double', color: {argb:'FF00FF00'}}, + bottom: {style:'double', color: {argb:'FF00FF00'}}, + right: {style:'double', color: {argb:'FF00FF00'}} +}; + +// set thick red cross in A5 +ws.getCell('A5').border = { + diagonal: {up: true, down: true, style:'thick', color: {argb:'FFFF0000'}} +}; +``` + +**Valid Border Styles** + +* thin +* dotted +* dashDot +* hair +* dashDotDot +* slantDashDot +* mediumDashed +* mediumDashDotDot +* mediumDashDot +* medium +* double +* thick + +### Fills[⬆](#contents) + +```javascript +// fill A1 with red darkVertical stripes +ws.getCell('A1').fill = { + type: 'pattern', + pattern:'darkVertical', + fgColor:{argb:'FFFF0000'} +}; + +// fill A2 with yellow dark trellis and blue behind +ws.getCell('A2').fill = { + type: 'pattern', + pattern:'darkTrellis', + fgColor:{argb:'FFFFFF00'}, + bgColor:{argb:'FF0000FF'} +}; + +// fill A3 with solid coral +ws.getCell('A3').fill = { + type: 'pattern', + pattern:'solid', + fgColor:{argb:'F08080'}, +}; + +// fill A4 with blue-white-blue gradient from left to right +ws.getCell('A4').fill = { + type: 'gradient', + gradient: 'angle', + degree: 0, + stops: [ + {position:0, color:{argb:'FF0000FF'}}, + {position:0.5, color:{argb:'FFFFFFFF'}}, + {position:1, color:{argb:'FF0000FF'}} + ] +}; + + +// fill A5 with red-green gradient from center +ws.getCell('A5').fill = { + type: 'gradient', + gradient: 'path', + center:{left:0.5,top:0.5}, + stops: [ + {position:0, color:{argb:'FFFF0000'}}, + {position:1, color:{argb:'FF00FF00'}} + ] +}; +``` + +#### Pattern Fills[⬆](#contents) + +| Property | Required | Description | +| -------- | -------- | ----------- | +| type | Y | Value: 'pattern'
Specifies this fill uses patterns | +| pattern | Y | Specifies type of pattern (see Valid Pattern Types below) | +| fgColor | N | Specifies the pattern foreground color. Default is black. | +| bgColor | N | Specifies the pattern background color. Default is white. | + +Note: If you want to fill a cell using the `solid` pattern, then you don't need to specify `bgColor`. +See example above for cell `A3` with a `solid` pattern and a coral `fgColor`. + + +**Valid Pattern Types** + +* none +* solid +* darkGray +* mediumGray +* lightGray +* gray125 +* gray0625 +* darkHorizontal +* darkVertical +* darkDown +* darkUp +* darkGrid +* darkTrellis +* lightHorizontal +* lightVertical +* lightDown +* lightUp +* lightGrid +* lightTrellis + +#### Gradient Fills[⬆](#contents) + +| Property | Required | Description | +| -------- | -------- | ----------- | +| type | Y | Value: 'gradient'
Specifies this fill uses gradients | +| gradient | Y | Specifies gradient type. One of ['angle', 'path'] | +| degree | angle | For 'angle' gradient, specifies the direction of the gradient. 0 is from the left to the right. Values from 1 - 359 rotates the direction clockwise | +| center | path | For 'path' gradient. Specifies the relative coordinates for the start of the path. 'left' and 'top' values range from 0 to 1 | +| stops | Y | Specifies the gradient colour sequence. Is an array of objects containing position and color starting with position 0 and ending with position 1. Intermediary positions may be used to specify other colours on the path. | + +**Caveats** + +Using the interface above it may be possible to create gradient fill effects not possible using the XLSX editor program. +For example, Excel only supports angle gradients of 0, 45, 90 and 135. +Similarly the sequence of stops may also be limited by the UI with positions [0,1] or [0,0.5,1] as the only options. +Take care with this fill to be sure it is supported by the target XLSX viewers. + +### Rich Text[⬆](#contents) + +Individual cells now support rich text or in-cell formatting. + Rich text values can control the font properties of any number of sub-strings within the text value. + See Fonts for a complete list of details on what font properties are supported. + +```javascript + +ws.getCell('A1').value = { + 'richText': [ + {'font': {'size': 12,'color': {'theme': 0},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': 'This is '}, + {'font': {'italic': true,'size': 12,'color': {'theme': 0},'name': 'Calibri','scheme': 'minor'},'text': 'a'}, + {'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' '}, + {'font': {'size': 12,'color': {'argb': 'FFFF6600'},'name': 'Calibri','scheme': 'minor'},'text': 'colorful'}, + {'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' text '}, + {'font': {'size': 12,'color': {'argb': 'FFCCFFCC'},'name': 'Calibri','scheme': 'minor'},'text': 'with'}, + {'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' in-cell '}, + {'font': {'bold': true,'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': 'format'} + ] +}; + +expect(ws.getCell('A1').text).to.equal('This is a colorful text with in-cell format'); +expect(ws.getCell('A1').type).to.equal(Excel.ValueType.RichText); + +``` + +### Cell Protection[⬆](#contents) + +Cell level protection can be modified using the protection property. + +```javascript +ws.getCell('A1').protection = { + locked: false, + hidden: true, +}; +``` + +**Supported Protection Properties** + +| Property | Default | Description | +| -------- | ------- | ----------- | +| locked | true | Specifies whether a cell will be locked if the sheet is protected. | +| hidden | false | Specifies whether a cell's formula will be visible if the sheet is protected. | + +## Conditional Formatting[⬆](#contents) + +Conditional formatting allows a sheet to show specific styles, icons, etc +depending on cell values or any arbitrary formula. + +Conditional formatting rules are added at the sheet level and will typically +cover a range of cells. + +Multiple rules can be applied to a given cell range and each rule will apply +its own style. + +If multiple rules affect a given cell, the rule priority value will determine +which rule wins out if competing styles collide. +The rule with the lower priority value wins. +If priority values are not specified for a given rule, ExcelJS will assign them +in ascending order. + +Note: at present, only a subset of conditional formatting rules are supported. +Specifically, only the formatting rules that do not require XML rendering +inside an <extLst> element. This means that datasets and three specific +icon sets (3Triangles, 3Stars, 5Boxes) are not supported. + +```javascript +// add a checkerboard pattern to A1:E7 based on row + col being even or odd +worksheet.addConditionalFormatting({ + ref: 'A1:E7', + rules: [ + { + type: 'expression', + formulae: ['MOD(ROW()+COLUMN(),2)=0'], + style: {fill: {type: 'pattern', pattern: 'solid', bgColor: {argb: 'FF00FF00'}}}, + } + ] +}) +``` + +**Supported Conditional Formatting Rule Types** + +| Type | Description | +| ------------ | ----------- | +| expression | Any custom function may be used to activate the rule. | +| cellIs | Compares cell value with supplied formula using specified operator | +| top10 | Applies formatting to cells with values in top (or bottom) ranges | +| aboveAverage | Applies formatting to cells with values above (or below) average | +| colorScale | Applies a coloured background to cells based on where their values lie in the range | +| iconSet | Adds one of a range of icons to cells based on value | +| containsText | Applies formatting based on whether cell a specific text | +| timePeriod | Applies formatting based on whether cell datetime value lies within a specified range | + +### Expression[⬆](#contents) + +| Field | Optional | Default | Description | +| -------- | -------- | ------- | ----------- | +| type | | | 'expression' | +| priority | Y | <auto> | determines priority ordering of styles | +| formulae | | | array of 1 formula string that returns a true/false value. To reference the cell value, use the top-left cell address | +| style | | | style structure to apply if the formula returns true | + +### Cell Is[⬆](#contents) + +| Field | Optional | Default | Description | +| -------- | -------- | ------- | ----------- | +| type | | | 'cellIs' | +| priority | Y | <auto> | determines priority ordering of styles | +| operator | | | how to compare cell value with formula result | +| formulae | | | array of 1 formula string that returns the value to compare against each cell | +| style | | | style structure to apply if the comparison returns true | + +**Cell Is Operators** + +| Operator | Description | +| ----------- | ----------- | +| equal | Apply format if cell value equals formula value | +| greaterThan | Apply format if cell value is greater than formula value | +| lessThan | Apply format if cell value is less than formula value | +| between | Apply format if cell value is between two formula values (inclusive) | + + +### Top 10[⬆](#contents) + +| Field | Optional | Default | Description | +| -------- | -------- | ------- | ----------- | +| type | | | 'top10' | +| priority | Y | <auto> | determines priority ordering of styles | +| rank | Y | 10 | specifies how many top (or bottom) values are included in the formatting | +| percent | Y | false | if true, the rank field is a percentage, not an absolute | +| bottom | Y | false | if true, the bottom values are included instead of the top | +| style | | | style structure to apply if the comparison returns true | + +### Above Average[⬆](#contents) + +| Field | Optional | Default | Description | +| ------------- | -------- | ------- | ----------- | +| type | | | 'aboveAverage' | +| priority | Y | <auto> | determines priority ordering of styles | +| aboveAverage | Y | false | if true, the rank field is a percentage, not an absolute | +| style | | | style structure to apply if the comparison returns true | + +### Color Scale[⬆](#contents) + +| Field | Optional | Default | Description | +| ------------- | -------- | ------- | ----------- | +| type | | | 'colorScale' | +| priority | Y | <auto> | determines priority ordering of styles | +| cfvo | | | array of 2 to 5 Conditional Formatting Value Objects specifying way-points in the value range | +| color | | | corresponding array of colours to use at given way points | +| style | | | style structure to apply if the comparison returns true | + +### Icon Set[⬆](#contents) + +| Field | Optional | Default | Description | +| ------------- | -------- | ------- | ----------- | +| type | | | 'iconSet' | +| priority | Y | <auto> | determines priority ordering of styles | +| iconSet | Y | 3TrafficLights | name of icon set to use | +| showValue | | true | Specifies whether the cells in the applied range display the icon and cell value, or the icon only | +| reverse | | false | Specifies whether the icons in the icon set specified in iconSet are show in reserve order. If custom equals "true" this value must be ignored | +| custom | | false | Specifies whether a custom set of icons is used | +| cfvo | | | array of 2 to 5 Conditional Formatting Value Objects specifying way-points in the value range | +| style | | | style structure to apply if the comparison returns true | + +### Data Bar[⬆](#contents) + +| Field | Optional | Default | Description | +| ---------- | -------- | ------- | ----------- | +| type | | | 'dataBar' | +| priority | Y | <auto> | determines priority ordering of styles | +| minLength | | 0 | Specifies the length of the shortest data bar in this conditional formatting range | +| maxLength | | 100 | Specifies the length of the longest data bar in this conditional formatting range | +| showValue | | true | Specifies whether the cells in the conditional formatting range display both the data bar and the numeric value or the data bar | +| gradient | | true | Specifies whether the data bar has a gradient fill | +| border | | true | Specifies whether the data bar has a border | +| negativeBarColorSameAsPositive | | true | Specifies whether the data bar has a negative bar color that is different from the positive bar color | +| negativeBarBorderColorSameAsPositive | | true | Specifies whether the data bar has a negative border color that is different from the positive border color | +| axisPosition | | 'auto' | Specifies the axis position for the data bar | +| direction | | 'leftToRight' | Specifies the direction of the data bar | +| cfvo | | | array of 2 to 5 Conditional Formatting Value Objects specifying way-points in the value range | +| style | | | style structure to apply if the comparison returns true | + +### Contains Text[⬆](#contents) + +| Field | Optional | Default | Description | +| -------- | -------- | ------- | ----------- | +| type | | | 'containsText' | +| priority | Y | <auto> | determines priority ordering of styles | +| operator | | | type of text comparison | +| text | | | text to search for | +| style | | | style structure to apply if the comparison returns true | + +**Contains Text Operators** + +| Operator | Description | +| ----------------- | ----------- | +| containsText | Apply format if cell value contains the value specified in the 'text' field | +| containsBlanks | Apply format if cell value contains blanks | +| notContainsBlanks | Apply format if cell value does not contain blanks | +| containsErrors | Apply format if cell value contains errors | +| notContainsErrors | Apply format if cell value does not contain errors | + +### Time Period[⬆](#contents) + +| Field | Optional | Default | Description | +| ---------- | -------- | ------- | ----------- | +| type | | | 'timePeriod' | +| priority | Y | <auto> | determines priority ordering of styles | +| timePeriod | | | what time period to compare cell value to | +| style | | | style structure to apply if the comparison returns true | + +**Time Periods** + +| Time Period | Description | +| ----------------- | ----------- | +| lastWeek | Apply format if cell value falls within the last week | +| thisWeek | Apply format if cell value falls in this week | +| nextWeek | Apply format if cell value falls in the next week | +| yesterday | Apply format if cell value is equal to yesterday | +| today | Apply format if cell value is equal to today | +| tomorrow | Apply format if cell value is equal to tomorrow | +| last7Days | Apply format if cell value falls within the last 7 days | +| lastMonth | Apply format if cell value falls in last month | +| thisMonth | Apply format if cell value falls in this month | +| nextMonth | Apply format if cell value falls in next month | + +## Outline Levels[⬆](#contents) + +Excel supports outlining; where rows or columns can be expanded or collapsed depending on what level of detail the user wishes to view. + +Outline levels can be defined in column setup: +```javascript +worksheet.columns = [ + { header: 'Id', key: 'id', width: 10 }, + { header: 'Name', key: 'name', width: 32 }, + { header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 } +]; +``` + +Or directly on the row or column +```javascript +worksheet.getColumn(3).outlineLevel = 1; +worksheet.getRow(3).outlineLevel = 1; +``` + +The sheet outline levels can be set on the worksheet +```javascript +// set column outline level +worksheet.properties.outlineLevelCol = 1; + +// set row outline level +worksheet.properties.outlineLevelRow = 1; +``` + +Note: adjusting outline levels on rows or columns or the outline levels on the worksheet will incur a side effect of also modifying the collapsed property of all rows or columns affected by the property change. E.g.: +```javascript +worksheet.properties.outlineLevelCol = 1; + +worksheet.getColumn(3).outlineLevel = 1; +expect(worksheet.getColumn(3).collapsed).to.be.true; + +worksheet.properties.outlineLevelCol = 2; +expect(worksheet.getColumn(3).collapsed).to.be.false; +``` + +The outline properties can be set on the worksheet + +```javascript +worksheet.properties.outlineProperties = { + summaryBelow: false, + summaryRight: false, +}; +``` + +## Images[⬆](#contents) + +Adding images to a worksheet is a two-step process. +First, the image is added to the workbook via the addImage() function which will also return an imageId value. +Then, using the imageId, the image can be added to the worksheet either as a tiled background or covering a cell range. + +Note: As of this version, adjusting or transforming the image is not supported and images are not supported in streaming mode. + +### Add Image to Workbook[⬆](#contents) + +The Workbook.addImage function supports adding images by filename or by Buffer. +Note that in both cases, the extension must be specified. +Valid extension values include 'jpeg', 'png', 'gif'. + +```javascript +// add image to workbook by filename +const imageId1 = workbook.addImage({ + filename: 'path/to/image.jpg', + extension: 'jpeg', +}); + +// add image to workbook by buffer +const imageId2 = workbook.addImage({ + buffer: fs.readFileSync('path/to.image.png'), + extension: 'png', +}); + +// add image to workbook by base64 +const myBase64Image = "data:image/png;base64,iVBORw0KG..."; +const imageId2 = workbook.addImage({ + base64: myBase64Image, + extension: 'png', +}); +``` + +### Add image background to worksheet[⬆](#contents) + +Using the image id from Workbook.addImage, the background to a worksheet can be set using the addBackgroundImage function + +```javascript +// set background +worksheet.addBackgroundImage(imageId1); +``` + +### Add image over a range[⬆](#contents) + +Using the image id from Workbook.addImage, an image can be embedded within the worksheet to cover a range. +The coordinates calculated from the range will cover from the top-left of the first cell to the bottom right of the second. + +```javascript +// insert an image over B2:D6 +worksheet.addImage(imageId2, 'B2:D6'); +``` + +Using a structure instead of a range string, it is possible to partially cover cells. + +Note that the coordinate system used for this is zero based, so the top-left of A1 will be { col: 0, row: 0 }. +Fractions of cells can be specified by using floating point numbers, e.g. the midpoint of A1 is { col: 0.5, row: 0.5 }. + +```javascript +// insert an image over part of B2:D6 +worksheet.addImage(imageId2, { + tl: { col: 1.5, row: 1.5 }, + br: { col: 3.5, row: 5.5 } +}); +``` + +The cell range can also have the property 'editAs' which will control how the image is anchored to the cell(s) +It can have one of the following values: + +| Value | Description | +| --------- | ----------- | +| undefined | It specifies the image will be moved and sized with cells | +| oneCell | This is the default. Image will be moved with cells but not sized | +| absolute | Image will not be moved or sized with cells | + +```javascript +ws.addImage(imageId, { + tl: { col: 0.1125, row: 0.4 }, + br: { col: 2.101046875, row: 3.4 }, + editAs: 'oneCell' +}); +``` + +### Add image to a cell[⬆](#contents) + +You can add an image to a cell and then define its width and height in pixels at 96dpi. + +```javascript +worksheet.addImage(imageId2, { + tl: { col: 0, row: 0 }, + ext: { width: 500, height: 200 } +}); +``` + +### Add image with hyperlinks[⬆](#contents) + +You can add an image with hyperlinks to a cell, and defines the hyperlinks in image range. + +```javascript +worksheet.addImage(imageId2, { + tl: { col: 0, row: 0 }, + ext: { width: 500, height: 200 }, + hyperlinks: { + hyperlink: 'http://www.somewhere.com', + tooltip: 'http://www.somewhere.com' + } +}); +``` + +## Sheet Protection[⬆](#contents) + +Worksheets can be protected from modification by adding a password. + +```javascript +await worksheet.protect('the-password', options); +``` + +Worksheet protection can also be removed: + +```javascript +worksheet.unprotect(); +``` + + +See Cell Protection for details on how +to modify individual cell protection. + +**Note:** While the protect() function returns a Promise indicating +that it is async, the current implementation runs on the main +thread and will use approx 600ms on an average CPU. This can be adjusted +by setting the spinCount, which can be used to make the process either +faster or more resilient. + +### Sheet Protection Options[⬆](#contents) + +| Field | Default | Description | +| ------------------- | ------- | ----------- | +| selectLockedCells | true | Lets the user select locked cells | +| selectUnlockedCells | true | Lets the user select unlocked cells | +| formatCells | false | Lets the user format cells | +| formatColumns | false | Lets the user format columns | +| formatRows | false | Lets the user format rows | +| insertRows | false | Lets the user insert rows | +| insertColumns | false | Lets the user insert columns | +| insertHyperlinks | false | Lets the user insert hyperlinks | +| deleteRows | false | Lets the user delete rows | +| deleteColumns | false | Lets the user delete columns | +| sort | false | Lets the user sort data | +| autoFilter | false | Lets the user filter data in tables | +| pivotTables | false | Lets the user use pivot tables | +| spinCount | 100000 | The number of hash iterations performed when protecting or unprotecting | + + + +## File I/O[⬆](#contents) + +### XLSX[⬆](#contents) + +#### Reading XLSX[⬆](#contents) + +Options supported when reading CSV files. + +| Field | Required | Type |Description | +| ---------------- | ----------- | ----------- | ----------- | +| ignoreNodes | N | Array | A list of node names to ignore while loading the XLSX document. Improves performance in some situations.
Available: `sheetPr`, `dimension`, `sheetViews `, `sheetFormatPr`, `cols `, `sheetData`, `autoFilter `, `mergeCells `, `rowBreaks`, `hyperlinks `, `pageMargins`, `dataValidations`, `pageSetup`, `headerFooter `, `printOptions `, `picture`, `drawing`, `sheetProtection`, `tableParts `, `conditionalFormatting`, `extLst`,| + +```javascript +// read from a file +const workbook = new Excel.Workbook(); +await workbook.xlsx.readFile(filename); +// ... use workbook + + +// read from a stream +const workbook = new Excel.Workbook(); +await workbook.xlsx.read(stream); +// ... use workbook + + +// load from buffer +const workbook = new Excel.Workbook(); +await workbook.xlsx.load(data); +// ... use workbook + + +// using additional options +const workbook = new Excel.Workbook(); +await workbook.xlsx.load(data, { + ignoreNodes: [ + 'dataValidations' // ignores the workbook's Data Validations + ], +}); +// ... use workbook +``` + +#### Writing XLSX[⬆](#contents) + +```javascript +// write to a file +const workbook = createAndFillWorkbook(); +await workbook.xlsx.writeFile(filename); + +// write to a stream +await workbook.xlsx.write(stream); + +// write to a new buffer +const buffer = await workbook.xlsx.writeBuffer(); +``` + +### CSV[⬆](#contents) + +#### Reading CSV[⬆](#contents) + +Options supported when reading CSV files. + +| Field | Required | Type |Description | +| ---------------- | ----------- | ----------- | ----------- | +| dateFormats | N | Array | Specify the date encoding format of dayjs. | +| map | N | Function | Custom Array.prototype.map() callback function for processing data. | +| sheetName | N | String | Specify worksheet name. | +| parserOptions | N | Object | [parseOptions options](https://c2fo.github.io/fast-csv/docs/parsing/options) @fast-csv/format module to write csv data. | + +```javascript +// read from a file +const workbook = new Excel.Workbook(); +const worksheet = await workbook.csv.readFile(filename); +// ... use workbook or worksheet + + +// read from a stream +const workbook = new Excel.Workbook(); +const worksheet = await workbook.csv.read(stream); +// ... use workbook or worksheet + + +// read from a file with European Dates +const workbook = new Excel.Workbook(); +const options = { + dateFormats: ['DD/MM/YYYY'] +}; +const worksheet = await workbook.csv.readFile(filename, options); +// ... use workbook or worksheet + + +// read from a file with custom value parsing +const workbook = new Excel.Workbook(); +const options = { + map(value, index) { + switch(index) { + case 0: + // column 1 is string + return value; + case 1: + // column 2 is a date + return new Date(value); + case 2: + // column 3 is JSON of a formula value + return JSON.parse(value); + default: + // the rest are numbers + return parseFloat(value); + } + }, + // https://c2fo.github.io/fast-csv/docs/parsing/options + parserOptions: { + delimiter: '\t', + quote: false, + }, +}; +const worksheet = await workbook.csv.readFile(filename, options); +// ... use workbook or worksheet +``` + +The CSV parser uses [fast-csv](https://www.npmjs.com/package/fast-csv) to read the CSV file. +The formatterOptions in the options passed to the above write function will be passed to the @fast-csv/format module to write csv data. + Please refer to the fast-csv README.md for details. + +Dates are parsed using the npm module [dayjs](https://www.npmjs.com/package/dayjs). + If a dateFormats array is not supplied, the following dateFormats are used: + +* 'YYYY-MM-DD\[T\]HH:mm:ss' +* 'MM-DD-YYYY' +* 'YYYY-MM-DD' + +Please refer to the [dayjs CustomParseFormat plugin](https://github.com/iamkun/dayjs/blob/HEAD/docs/en/Plugin.md#customparseformat) for details on how to structure a dateFormat. + +#### Writing CSV[⬆](#contents) + +Options supported when writing to a CSV file. + +| Field | Required | Type | Description | +| ---------------- | ----------- | ----------- | ----------- | +| dateFormat | N | String | Specify the date encoding format of dayjs. | +| dateUTC | N | Boolean | Specify whether ExcelJS uses `dayjs.utc ()` to convert time zone for parsing dates. | +| encoding | N | String | Specify file encoding format. (Only applies to `.writeFile`.) | +| includeEmptyRows | N | Boolean | Specifies whether empty rows can be written. | +| map | N | Function | Custom Array.prototype.map() callback function for processing row values. | +| sheetName | N | String | Specify worksheet name. | +| sheetId | N | Number | Specify worksheet ID. | +| formatterOptions | N | Object | [formatterOptions options](https://c2fo.github.io/fast-csv/docs/formatting/options/) @fast-csv/format module to write csv data. | + +```javascript + +// write to a file +const workbook = createAndFillWorkbook(); +await workbook.csv.writeFile(filename); + +// write to a stream +// Be careful that you need to provide sheetName or +// sheetId for correct import to csv. +await workbook.csv.write(stream, { sheetName: 'Page name' }); + +// write to a file with European Date-Times +const workbook = new Excel.Workbook(); +const options = { + dateFormat: 'DD/MM/YYYY HH:mm:ss', + dateUTC: true, // use utc when rendering dates +}; +await workbook.csv.writeFile(filename, options); + + +// write to a file with custom value formatting +const workbook = new Excel.Workbook(); +const options = { + map(value, index) { + switch(index) { + case 0: + // column 1 is string + return value; + case 1: + // column 2 is a date + return dayjs(value).format('YYYY-MM-DD'); + case 2: + // column 3 is a formula, write just the result + return value.result; + default: + // the rest are numbers + return value; + } + }, + // https://c2fo.github.io/fast-csv/docs/formatting/options + formatterOptions: { + delimiter: '\t', + quote: false, + }, +}; +await workbook.csv.writeFile(filename, options); + +// write to a new buffer +const buffer = await workbook.csv.writeBuffer(); +``` + +The CSV parser uses [fast-csv](https://www.npmjs.com/package/fast-csv) to write the CSV file. + The formatterOptions in the options passed to the above write function will be passed to the @fast-csv/format module to write csv data. + Please refer to the fast-csv README.md for details. + +Dates are formatted using the npm module [dayjs](https://www.npmjs.com/package/dayjs). + If no dateFormat is supplied, dayjs.ISO_8601 is used. + When writing a CSV you can supply the boolean dateUTC as true to have ExcelJS parse the date without automatically + converting the timezone using `dayjs.utc()`. + +### Streaming I/O[⬆](#contents) + +The File I/O documented above requires that an entire workbook is built up in memory before the file can be written. + While convenient, it can limit the size of the document due to the amount of memory required. + +A streaming writer (or reader) processes the workbook or worksheet data as it is generated, + converting it into file form as it goes. Typically this is much more efficient on memory as the final + memory footprint and even intermediate memory footprints are much more compact than with the document version, + especially when you consider that the row and cell objects are disposed once they are committed. + +The interface to the streaming workbook and worksheet is almost the same as the document versions with a few minor practical differences: + +* Once a worksheet is added to a workbook, it cannot be removed. +* Once a row is committed, it is no longer accessible since it will have been dropped from the worksheet. +* unMergeCells() is not supported. + +Note that it is possible to build the entire workbook without committing any rows. + When the workbook is committed, all added worksheets (including all uncommitted rows) will be automatically committed. + However in this case, little will have been gained over the Document version. + +#### Streaming XLSX[⬆](#contents) + +##### Streaming XLSX Writer(#contents) + +The streaming XLSX workbook writer is available in the ExcelJS.stream.xlsx namespace. + +The constructor takes an optional options object with the following fields: + +| Field | Description | +| ---------------- | ----------- | +| stream | Specifies a writable stream to write the XLSX workbook to. | +| filename | If stream not specified, this field specifies the path to a file to write the XLSX workbook to. | +| useSharedStrings | Specifies whether to use shared strings in the workbook. Default is `false`. | +| useStyles | Specifies whether to add style information to the workbook. Styles can add some performance overhead. Default is `false`. | +| zip | [Zip options](https://www.archiverjs.com/global.html#ZipOptions) that ExcelJS internally passes to [Archiver](https://github.com/archiverjs/node-archiver). Default is `undefined`. | + +If neither stream nor filename is specified in the options, the workbook writer will create a StreamBuf object + that will store the contents of the XLSX workbook in memory. + This StreamBuf object, which can be accessed via the property workbook.stream, can be used to either + access the bytes directly by stream.read() or to pipe the contents to another stream. + +```javascript +// construct a streaming XLSX workbook writer with styles and shared strings +const options = { + filename: './streamed-workbook.xlsx', + useStyles: true, + useSharedStrings: true +}; +const workbook = new Excel.stream.xlsx.WorkbookWriter(options); +``` + +In general, the interface to the streaming XLSX writer is the same as the Document workbook (and worksheets) + described above, in fact the row, cell and style objects are the same. + +However there are some differences... + +**Construction** + +As seen above, the WorkbookWriter will typically require the output stream or file to be specified in the constructor. + +**Committing Data** + +When a worksheet row is ready, it should be committed so that the row object and contents can be freed. + Typically this would be done as each row is added... + +```javascript +worksheet.addRow({ + id: i, + name: theName, + etc: someOtherDetail +}).commit(); +``` + +The reason the WorksheetWriter does not commit rows as they are added is to allow cells to be merged across rows: + +```javascript +worksheet.mergeCells('A1:B2'); +worksheet.getCell('A1').value = 'I am merged'; +worksheet.getCell('C1').value = 'I am not'; +worksheet.getCell('C2').value = 'Neither am I'; +worksheet.getRow(2).commit(); // now rows 1 and two are committed. +``` + +As each worksheet is completed, it must also be committed: + +```javascript +// Finished adding data. Commit the worksheet +worksheet.commit(); +``` + +To complete the XLSX document, the workbook must be committed. If any worksheet in a workbook are uncommitted, + they will be committed automatically as part of the workbook commit. + +```javascript +// Finished the workbook. +await workbook.commit(); +// ... the stream has been written +``` + +##### Streaming XLSX Reader(#contents) + +The streaming XLSX workbook reader is available in the ExcelJS.stream.xlsx namespace. + +The constructor takes a required input argument and an optional options argument: + +| Argument | Description | +| --------------------- | ----------- | +| input (required) | Specifies the name of the file or the readable stream from which to read the XLSX workbook. | +| options (optional) | Specifies how to handle the event types occuring during the read parsing. | +| options.entries | Specifies whether to emit entries (`'emit'`) or not (`'ignore'`). Default is `'emit'`. | +| options.sharedStrings | Specifies whether to cache shared strings (`'cache'`), which inserts them into the respective cell values, or whether to emit them (`'emit'`) or ignore them (`'ignore'`), in both of which case the cell value will be a reference to the shared string's index. Default is `'cache'`. | +| options.hyperlinks | Specifies whether to cache hyperlinks (`'cache'`), which inserts them into their respective cells, whether to emit them (`'emit'`) or whether to ignore them (`'ignore'`). Default is `'cache'`. | +| options.styles | Specifies whether to cache styles (`'cache'`), which inserts them into their respective rows and cells, or whether to ignore them (`'ignore'`). Default is `'cache'`. | +| options.worksheets | Specifies whether to emit worksheets (`'emit'`) or not (`'ignore'`). Default is `'emit'`. | + +```js +const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader('./file.xlsx'); +for await (const worksheetReader of workbookReader) { + for await (const row of worksheetReader) { + // ... + } +} +``` + +Please note that `worksheetReader` returns an array of rows rather than each row individually for performance reasons: https://github.com/nodejs/node/issues/31979 + +###### Iterating over all events(#contents) + +Events on workbook are 'worksheet', 'shared-strings' and 'hyperlinks'. Events on worksheet are 'row' and 'hyperlinks'. + +```js +const options = { + sharedStrings: 'emit', + hyperlinks: 'emit', + worksheets: 'emit', +}; +const workbook = new ExcelJS.stream.xlsx.WorkbookReader('./file.xlsx', options); +for await (const {eventType, value} of workbook.parse()) { + switch (eventType) { + case 'shared-strings': + // value is the shared string + case 'worksheet': + // value is the worksheetReader + case 'hyperlinks': + // value is the hyperlinksReader + } +} +``` + +###### Readable stream(#contents) + +While we strongly encourage to use async iteration, we also expose a streaming interface for backwards compatibility. + +```js +const options = { + sharedStrings: 'emit', + hyperlinks: 'emit', + worksheets: 'emit', +}; +const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader('./file.xlsx', options); +workbookReader.read(); + +workbookReader.on('worksheet', worksheet => { + worksheet.on('row', row => { + }); +}); + +workbookReader.on('shared-strings', sharedString => { + // ... +}); + +workbookReader.on('hyperlinks', hyperlinksReader => { + // ... +}); + +workbookReader.on('end', () => { + // ... +}); +workbookReader.on('error', (err) => { + // ... +}); +``` + +# Browser[⬆](#contents) + +A portion of this library has been isolated and tested for use within a browser environment. + +Due to the streaming nature of the workbook reader and workbook writer, these have not been included. +Only the document based workbook may be used (see Create a Workbook for details). + +For example code using ExcelJS in the browser take a look at the spec/browser folder in the github repo. + +## Prebundled[⬆](#contents) + +The following files are pre-bundled and included inside the dist folder. + +* exceljs.js +* exceljs.min.js + +# Value Types[⬆](#contents) + +The following value types are supported. + +## Null Value[⬆](#contents) + +Enum: Excel.ValueType.Null + +A null value indicates an absence of value and will typically not be stored when written to file (except for merged cells). + It can be used to remove the value from a cell. + +E.g. + +```javascript +worksheet.getCell('A1').value = null; +``` + +## Merge Cell[⬆](#contents) + +Enum: Excel.ValueType.Merge + +A merge cell is one that has its value bound to another 'master' cell. + Assigning to a merge cell will cause the master's cell to be modified. + +## Number Value[⬆](#contents) + +Enum: Excel.ValueType.Number + +A numeric value. + +E.g. + +```javascript +worksheet.getCell('A1').value = 5; +worksheet.getCell('A2').value = 3.14159; +``` + +## String Value[⬆](#contents) + +Enum: Excel.ValueType.String + +A simple text string. + +E.g. + +```javascript +worksheet.getCell('A1').value = 'Hello, World!'; +``` + +## Date Value[⬆](#contents) + +Enum: Excel.ValueType.Date + +A date value, represented by the JavaScript Date type. + +E.g. + +```javascript +worksheet.getCell('A1').value = new Date(2017, 2, 15); +``` + +## Hyperlink Value[⬆](#contents) + +Enum: Excel.ValueType.Hyperlink + +A URL with both text and link value. + +E.g. +```javascript +// link to web +worksheet.getCell('A1').value = { + text: 'www.mylink.com', + hyperlink: 'http://www.mylink.com', + tooltip: 'www.mylink.com' +}; + +// internal link +worksheet.getCell('A1').value = { text: 'Sheet2', hyperlink: '#\'Sheet2\'!A1' }; +``` + +## Formula Value[⬆](#contents) + +Enum: Excel.ValueType.Formula + +An Excel formula for calculating values on the fly. + Note that while the cell type will be Formula, the cell may have an effectiveType value that will + be derived from the result value. + +Note that ExcelJS cannot process the formula to generate a result, it must be supplied. + +Note that function semantic names must be in English and the separator must be a comma. + +E.g. + +```javascript +worksheet.getCell('A3').value = { formula: 'A1+A2', result: 7 }; +worksheet.getCell('A3').value = { formula: 'SUM(A1,A2)', result: 7 }; +``` + +Cells also support convenience getters to access the formula and result: + +```javascript +worksheet.getCell('A3').formula === 'A1+A2'; +worksheet.getCell('A3').result === 7; +``` + +### Shared Formula[⬆](#contents) + +Shared formulae enhance the compression of the xlsx document by decreasing the repetition +of text within the worksheet xml. +The top-left cell in a range is the designated master and will hold the +formula that all the other cells in the range will derive from. +The other 'slave' cells can then refer to this master cell instead of redefining the +whole formula again. +Note that the master formula will be translated to the slave cells in the usual +Excel fashion so that references to other cells will be shifted down and +to the right depending on the slave's offset to the master. +For example: if the master cell A2 has a formula referencing A1 then +if cell B2 shares A2's formula, then it will reference B1. + +A master formula can be assigned to a cell along with the slave cells in its range + +```javascript +worksheet.getCell('A2').value = { + formula: 'A1', + result: 10, + shareType: 'shared', + ref: 'A2:B3' +}; +``` + +A shared formula can be assigned to a cell using a new value form: + +```javascript +worksheet.getCell('B2').value = { sharedFormula: 'A2', result: 10 }; +``` + +This specifies that the cell B2 is a formula that will be derived from the formula in +A2 and its result is 10. + +The formula convenience getter will translate the formula in A2 to what it should be in B2: + +```javascript +expect(worksheet.getCell('B2').formula).to.equal('B1'); +``` + +Shared formulae can be assigned into a sheet using the 'fillFormula' function: + +```javascript +// set A1 to starting number +worksheet.getCell('A1').value = 1; + +// fill A2 to A10 with ascending count starting from A1 +worksheet.fillFormula('A2:A10', 'A1+1', [2,3,4,5,6,7,8,9,10]); +``` + +fillFormula can also use a callback function to calculate the value at each cell + +```javascript +// fill A2 to A100 with ascending count starting from A1 +worksheet.fillFormula('A2:A100', 'A1+1', (row, col) => row); +``` + +### Formula Type[⬆](#contents) + +To distinguish between real and translated formula cells, use the formulaType getter: + +```javascript +worksheet.getCell('A3').formulaType === Enums.FormulaType.Master; +worksheet.getCell('B3').formulaType === Enums.FormulaType.Shared; +``` + +Formula type has the following values: + +| Name | Value | +| -------------------------- | ------- | +| Enums.FormulaType.None | 0 | +| Enums.FormulaType.Master | 1 | +| Enums.FormulaType.Shared | 2 | + +### Array Formula[⬆](#contents) + +A new way of expressing shared formulae in Excel is the array formula. +In this form, the master cell is the only cell that contains any information relating to a formula. +It contains the shareType 'array' along with the range of cells it applies to and the formula that will be copied. +The rest of the cells are regular cells with regular values. + +Note: array formulae are not translated in the way shared formulae are. +So if master cell A2 refers to A1, then slave cell B2 will also refer to A1. + +E.g. +```javascript +// assign array formula to A2:B3 +worksheet.getCell('A2').value = { + formula: 'A1', + result: 10, + shareType: 'array', + ref: 'A2:B3' +}; + +// it may not be necessary to fill the rest of the values in the sheet +``` + +The fillFormula function can also be used to fill an array formula + +```javascript +// fill A2:B3 with array formula "A1" +worksheet.fillFormula('A2:B3', 'A1', [1,1,1,1], 'array'); +``` + + +## Rich Text Value[⬆](#contents) + +Enum: Excel.ValueType.RichText + +Rich, styled text. + +E.g. +```javascript +worksheet.getCell('A1').value = { + richText: [ + { text: 'This is '}, + {font: {italic: true}, text: 'italic'}, + ] +}; +``` + +## Boolean Value[⬆](#contents) + +Enum: Excel.ValueType.Boolean + +E.g. + +```javascript +worksheet.getCell('A1').value = true; +worksheet.getCell('A2').value = false; +``` + +## Error Value[⬆](#contents) + +Enum: Excel.ValueType.Error + +E.g. + +```javascript +worksheet.getCell('A1').value = { error: '#N/A' }; +worksheet.getCell('A2').value = { error: '#VALUE!' }; +``` + +The current valid Error text values are: + +| Name | Value | +| ------------------------------ | ----------- | +| Excel.ErrorValue.NotApplicable | #N/A | +| Excel.ErrorValue.Ref | #REF! | +| Excel.ErrorValue.Name | #NAME? | +| Excel.ErrorValue.DivZero | #DIV/0! | +| Excel.ErrorValue.Null | #NULL! | +| Excel.ErrorValue.Value | #VALUE! | +| Excel.ErrorValue.Num | #NUM! | + +# Interface Changes[⬆](#contents) + +Every effort is made to make a good consistent interface that doesn't break through the versions but regrettably, now and then some things have to change for the greater good. + +## 0.1.0[⬆](#contents) + +### Worksheet.eachRow[⬆](#contents) + +The arguments in the callback function to Worksheet.eachRow have been swapped and changed; it was function(rowNumber,rowValues), now it is function(row, rowNumber) which gives it a look and feel more like the underscore (_.each) function and priorities the row object over the row number. + +### Worksheet.getRow[⬆](#contents) + +This function has changed from returning a sparse array of cell values to returning a Row object. This enables accessing row properties and will facilitate managing row styles and so on. + +The sparse array of cell values is still available via Worksheet.getRow(rowNumber).values; + +## 0.1.1[⬆](#contents) + +### cell.model[⬆](#contents) + +cell.styles renamed to cell.style + +## 0.2.44[⬆](#contents) + +Promises returned from functions switched from Bluebird to native node Promise which can break calling code + if they rely on Bluebird's extra features. + +To mitigate this the following two changes were added to 0.3.0: + +* A more fully featured and still browser compatible promise lib is used by default. This lib supports many of the features of Bluebird but with a much lower footprint. +* An option to inject a different Promise implementation. See Config section for more details. + +# Config[⬆](#contents) + +ExcelJS now supports dependency injection for the promise library. + You can restore Bluebird promises by including the following code in your module... + +```javascript +ExcelJS.config.setValue('promise', require('bluebird')); +``` + +Please note: I have tested ExcelJS with bluebird specifically (since up until recently this was the library it used). + From the tests I have done it will not work with Q. + +# Caveats[⬆](#contents) + +## Dist Folder[⬆](#contents) + +Before publishing this module, the source code is transpiled and otherwise processed +before being placed in a dist/ folder. +This README identifies two files - a browserified bundle and minified version. +No other contents of the dist/ folder are guaranteed in any way other than the file +specified as "main" in the package.json + + +# Known Issues[⬆](#contents) + +## Testing with Puppeteer[⬆](#contents) + +The test suite included in this lib includes a small script executed in a headless browser +to validate the bundled packages. At the time of this writing, it appears that +this test does not play nicely in the Windows Linux subsystem. + +For this reason, the browser test can be disabled by the existence of a file named .disable-test-browser + +```bash +sudo apt-get install libfontconfig +``` + +## Splice vs Merge[⬆](#contents) + +If any splice operation affects a merged cell, the merge group will not be moved correctly + +# Release History[⬆](#contents) + +| Version | Changes | +|---------| ------- | +| 0.0.9 | | +| 0.1.0 | | +| 0.1.1 |
  • Bug Fixes
    • More textual data written properly to xml (including text, hyperlinks, formula results and format codes)
    • Better date format code recognition
  • Cell Font Style
| +| 0.1.2 |
  • Fixed potential race condition on zip write
| +| 0.1.3 | | +| 0.1.5 |
  • Bug Fixes
    • Now handles 10 or more worksheets in one workbook
    • theme1.xml file properly added and referenced
  • Cell Borders
| +| 0.1.6 |
  • Bug Fixes
    • More compatible theme1.xml included in XLSX file
  • Cell Fills
| +| 0.1.8 |
  • Bug Fixes
    • More compatible theme1.xml included in XLSX file
    • Fixed filename case issue
  • Cell Fills
| +| 0.1.9 |
  • Bug Fixes
    • Added docProps files to satisfy Mac Excel users
    • Fixed filename case issue
    • Fixed worksheet id issue
  • Core Workbook Properties
| +| 0.1.10 |
  • Bug Fixes
    • Handles File Not Found error
  • CSV Files
| +| 0.1.11 | | +| 0.2.0 |
  • Streaming XLSX Writer
    • At long last ExcelJS can support writing massive XLSX files in a scalable memory efficient manner. Performance has been optimised and even smaller spreadsheets can be faster to write than the document writer. Options have been added to control the use of shared strings and styles as these can both have a considerable effect on performance
  • Worksheet.lastRow
    • Access the last editable row in a worksheet.
  • Row.commit()
    • For streaming writers, this method commits the row (and any previous rows) to the stream. Committed rows will no longer be editable (and are typically deleted from the worksheet object). For Document type workbooks, this method has no effect.
| +| 0.2.2 |
  • One Billion Cells
    • Achievement Unlocked: A simple test using ExcelJS has created a spreadsheet with 1,000,000,000 cells. Made using random data with 100,000,000 rows of 10 cells per row. I cannot validate the file yet as Excel will not open it and I have yet to implement the streaming reader but I have every confidence that it is good since 1,000,000 rows loads ok.
| +| 0.2.3 |
  • Bug Fixes
  • Streaming XLSX Writer
    • At long last ExcelJS can support writing massive XLSX files in a scalable memory efficient manner. Performance has been optimised and even smaller spreadsheets can be faster to write than the document writer. Options have been added to control the use of shared strings and styles as these can both have a considerable effect on performance
  • Worksheet.lastRow
    • Access the last editable row in a worksheet.
  • Row.commit()
    • For streaming writers, this method commits the row (and any previous rows) to the stream. Committed rows will no longer be editable (and are typically deleted from the worksheet object). For Document type workbooks, this method has no effect.
| +| 0.2.4 | | +| 0.2.6 | | +| 0.2.7 |
  • Data Validations
    • Cells can now define validations that controls the valid values the cell can have
| +| 0.2.8 | | +| 0.2.9 |
  • Fixed "read property 'richText' of undefined error. Thanks to james075
| +| 0.2.10 |
  • Refactoring Complete. All unit and integration tests pass.
| +| 0.2.11 | | +| 0.2.12 | | +| 0.2.13 | | +| 0.2.14 | | +| 0.2.15 | | +| 0.2.16 | | +| 0.2.17 | | +| 0.2.18 | | +| 0.2.19 | | +| 0.2.20 | | +| 0.2.21 | | +| 0.2.22 | | +| 0.2.23 |
  • Merged Fall back to JSON.stringify() if unknown Cell.Type #137 with some modification. If a cell value is assigned to an unrecognisable javascript object, the stored value in xlsx and csv files will be JSON stringified. Note that if the file is read again, no attempt will be made to parse the stringified JSON text. Thanks to wulfsolter for the contribution.
| +| 0.2.24 |
  • Merged Protect cell fix #166. This does not mean full support for protected cells merely that the parser is not confused by the extra xml. Thanks to jayflo for the contribution.
| +| 0.2.25 |
  • Added functions to delete cells, rows and columns from a worksheet. Modelled after the Array splice method, the functions allow cells, rows and columns to be deleted (and optionally inserted). See Columns and Rows for details.
    Note: Not compatible with cell merges
| +| 0.2.26 | | +| 0.2.27 | | +| 0.2.28 | | +| 0.2.29 | | +| 0.2.30 |
  • Merged Fix issue #178 #201. Adds the following properties to workbook:
    • title
    • subject
    • keywords
    • category
    • description
    • company
    • manager
    Thanks to stavenko for the contribution.
| +| 0.2.31 | | +| 0.2.32 | | +| 0.2.33 | | +| 0.2.34 | | +| 0.2.35 | | +| 0.2.36 | | +| 0.2.37 | | +| 0.2.38 | | +| 0.2.39 | | +| 0.2.42 |
  • Browser Compatible!
    • Well mostly. I have added a browser sub-folder that contains a browserified bundle and an index.js that can be used to generate another. See Browser section for details.
  • Fixed corrupted theme.xml. Apologies for letting that through.
  • Merged [BUGFIX] data validation formulae undefined #253. Thanks to jayflo for the contribution.
| +| 0.2.43 | | +| 0.2.44 |
  • Reduced Dependencies.
    • Goodbye lodash, goodbye bluebird. Minified bundle is now just over half what it was in the first version.
| +| 0.2.45 | | +| 0.2.46 | | +| 0.3.0 | | +| 0.3.1 | | +| 0.4.0 | | +| 0.4.1 | | +| 0.4.2 |
  • Addressed the following issues:

    These issues are potentially caused by a bug that caused colours with zero themes, tints or indexes to be rendered and parsed incorrectly.

    Regarding themes: the theme files stored inside the xlsx container hold important information regarding colours, styles etc and if the theme information from a loaded xlsx file is lost, the results can be unpredictable and undesirable. To address this, when an ExcelJS Workbook parses an XLSX file, it will preserve any theme files it finds and include them when writing to a new XLSX. If this behaviour is not desired, the Workbook class exposes a clearThemes() function which will drop the theme content. Note that this behaviour is only implemented in the document based Workbook class, not the streamed Reader and Writer.

| +| 0.4.3 | | +| 0.4.4 | | +| 0.4.6 | | +| 0.4.9 |
  • Switching to transpiled code for distribution. This will ensure compatability with 4.0.0 and above from here on. And it will also allow use of much more expressive JS code in the lib folder!
  • Basic Image Support!Images can now be added to worksheets either as a tiled background or stretched over a range. Note: other features like rotation, etc. are not supported yet and will reqeuire further work.
| +| 0.4.10 | | +| 0.4.11 | | +| 0.4.12 | | +| 0.4.13 | | +| 0.4.14 | | +| 0.5.0 | | +| 0.5.1 | +| 0.6.0 | | +| 0.6.1 | | +| 0.6.2 | | +| 0.7.0 | | +| 0.7.1 | +| 0.8.0 | | +| 0.8.1 | | +| 0.8.2 | | +| 0.8.3 | | +| 0.8.4 | | +| 0.8.5 | | +| 0.9.0 | | +| 0.9.1 | | +| 1.0.0 | | +| 1.0.1 | | +| 1.0.2 | | +| 1.1.0 | | +| 1.1.1 | | +| 1.1.2 | | +| 1.1.3 | | +| 1.2.0 | | +| 1.2.1 | | +| 1.3.0 | | +| 1.4.2 | | +| 1.4.3 | | +| 1.4.5 | | +| 1.4.6 | | +| 1.4.7 | | +| 1.4.8 | | +| 1.4.9 | | +| 1.4.10 | | +| 1.4.12 | | +| 1.4.13 | | +| 1.5.0 | | +| 1.5.1 | | +| 1.6.0 | | +| 1.6.1 | | +| 1.6.2 | | +| 1.6.3 | | +| 1.7.0 | | +| 1.8.0 | | +| 1.9.0 | | +| 1.9.1 | | +| 1.10.0 | | +| 1.11.0 | | +| 1.12.0 | | +| 1.12.1 | | +| 1.12.2 | | +| 1.13.0 | | +| 1.14.0 | | +| 1.15.0 | | +| 2.0.1 |

Major Version Change

Introducing async/await to ExcelJS!

The new async and await features of JavaScript can help a lot to make code more readable and maintainable. To avoid confusion, particularly with returned promises from async functions, we have had to remove the Promise class configuration option and from v2 onwards ExcelJS will use native Promises. Since this is potentially a breaking change we're bumping the major version for this release.

Changes

| +| 3.0.0 |

Another Major Version Change

Javascript has changed a lot over the years, and so have the modules and technologies surrounding it. To this end, this major version of ExcelJS changes the structure of the publish artefacts:

Main Export is now the Original Javascript Source

Prior to this release, the transpiled ES5 code was exported as the package main. From now on, the package main comes directly from the lib/ folder. This means a number of dependencies have been removed, including the polyfills.

ES5 and Browserify are Still Included

In order to support those that still require ES5 ready code (e.g. as dependencies in web apps) the source code will still be transpiled and available in dist/es5.

The ES5 code is also browserified and available as dist/exceljs.js or dist/exceljs.min.js

See the section Importing for details

| +| 3.1.0 | | +| 3.2.0 | | +| 3.3.0 | | +| 3.3.1 | | +| 3.4.0 | | +| 3.5.0 |
  • Conditional Formatting A subset of Excel Conditional formatting has been implemented! Specifically the formatting rules that do not require XML to be rendered inside an <extLst> node, or in other words everything except databar and three icon sets (3Triangles, 3Stars, 5Boxes). These will be implemented in due course
  • Merged remove core-js/ import #1030. Many thanks to jeffrey n. carre for this contribution. This change is used to create a new browserified bundle artefact that does not include any polyfills. See Browserify for details.
| +| 3.6.0 | | +| 3.6.1 | | +| 3.7.0 | | +| 3.8.0 | | +| 3.8.1 | | +| 3.8.2 | | +| 3.9.0 | | +| 3.10.0 | | +| 4.0.1 | | +| 4.1.0 | | +| 4.1.1 | | +| 4.2.0 | | +| 4.2.1 | | +| 4.3.0 | | diff --git a/node_backend/node_modules/exceljs/README_zh.md b/node_backend/node_modules/exceljs/README_zh.md new file mode 100644 index 0000000000000000000000000000000000000000..5f1100363d2e22443a99b51a94a076f5cee6726b --- /dev/null +++ b/node_backend/node_modules/exceljs/README_zh.md @@ -0,0 +1,2878 @@ +# ExcelJS + +[![Build status](https://github.com/exceljs/exceljs/workflows/ExcelJS/badge.svg)](https://github.com/exceljs/exceljs/actions?query=workflow%3AExcelJS) +[![Code Quality: Javascript](https://img.shields.io/lgtm/grade/javascript/g/exceljs/exceljs.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/exceljs/exceljs/context:javascript) +[![Total Alerts](https://img.shields.io/lgtm/alerts/g/exceljs/exceljs.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/exceljs/exceljs/alerts) + +读取,操作并写入电子表格数据和样式到 XLSX 和 JSON 文件。 + +一个 Excel 电子表格文件逆向工程项目。 + +# 安装 + +```shell +npm install exceljs +``` + +# 新的功能! + +* Merged [fix: styles rendering in case when "numFmt" is present in conditional formatting rules (resolves #1814) #1815](https://github.com/exceljs/exceljs/pull/1815).
Many thanks to [@andreykrupskii](https://github.com/andreykrupskii) for this contribution! +* Merged [inlineStr cell type support #1575 #1576](https://github.com/exceljs/exceljs/pull/1576).
Many thanks to [@drdmitry](https://github.com/drdmitry) for this contribution! +* Merged [Fix parsing of boolean attributes #1849](https://github.com/exceljs/exceljs/pull/1849).
Many thanks to [@bno1](https://github.com/bno1) for this contribution! +* Merged [add optional custom auto-filter to table #1670](https://github.com/exceljs/exceljs/pull/1670).
Many thanks to [@thambley](https://github.com/thambley) for this contribution! +* Merged [Deep copy inherited style #1850](https://github.com/exceljs/exceljs/pull/1850).
Many thanks to [@ikzhr](https://github.com/ikzhr) for this contribution! +* Merged [Upgrade actions/cache and actions/setup-node #1846](https://github.com/exceljs/exceljs/pull/1846).
Many thanks to [@cclauss](https://github.com/cclauss) for this contribution! +* Merged [Check object keys in isEqual #1831](https://github.com/exceljs/exceljs/pull/1831).
Many thanks to [@bno1](https://github.com/bno1) for this contribution! +* Merged [Add v17 to testing workflow #1856](https://github.com/exceljs/exceljs/pull/1856).
Many thanks to [@Siemienik](https://github.com/Siemienik) for this contribution! +* Merged [Upgrade jszip to its latest version to date. This version does not have any vulnerability found by Snyk so far #1895](https://github.com/exceljs/exceljs/pull/1895).
Many thanks to [@ValerioSevilla](https://github.com/ValerioSevilla) for this contribution! +* Merged [Update README.md #1677](https://github.com/exceljs/exceljs/pull/1677).
Many thanks to [@xjrcode](https://github.com/xjrcode) for this contribution! +* Merged [(docs): set prototype of RegExp correctly. #1700](https://github.com/exceljs/exceljs/pull/1700).
Many thanks to [@joeldenning](https://github.com/joeldenning) for this contribution! +* Merged [Added timeouts to github actions #1733](https://github.com/exceljs/exceljs/pull/1733).
Many thanks to [@alexbjorlig](https://github.com/alexbjorlig) for this contribution! +* Merged [fix issue 1676 #1701](https://github.com/exceljs/exceljs/pull/1701).
Many thanks to [@skypesky](https://github.com/skypesky) for this contribution! +* Merged [ExcelJS/ExcelJS#2237 : Update CI Tests, Drop support for Node v8 #2242](https://github.com/exceljs/exceljs/pull/2242).
Many thanks to [@Siemienik](https://github.com/Siemienik) for this contribution! +* Merged [Fix types for getWorksheet() #2223](https://github.com/exceljs/exceljs/pull/2223).
Many thanks to [@hfhchan-plb](https://github.com/hfhchan-plb) for this contribution! +* Merged [add characters cannot be used for worksheet name #2126](https://github.com/exceljs/exceljs/pull/2126).
Many thanks to [@tkm-kj](https://github.com/tkm-kj) for this contribution! +* Merged [Fix issue #1753 Reject promise when workbook reader is writing to temporary file stream and error occurs #1756](https://github.com/exceljs/exceljs/pull/1756).
Many thanks to [@pauliusg](https://github.com/pauliusg) for this contribution! +* Merged [README.md to have correct link for Streaming XLSX #2186](https://github.com/exceljs/exceljs/pull/2186).
Many thanks to [@wulfsolter](https://github.com/wulfsolter) for this contribution! +* Merged [Added a polyfill of promise.finally to support lower versions of Firefox. #1982](https://github.com/exceljs/exceljs/pull/1982).
Many thanks to [@DemoJj](https://github.com/DemoJj) for this contribution! +* Merged [Fix read this.worksheet before assign it #1934](https://github.com/exceljs/exceljs/pull/1934).
Many thanks to [@ZyqGitHub1](https://github.com/ZyqGitHub1) for this contribution! +* Merged [chore: upgrade jszip to ^3.10.1 #2211](https://github.com/exceljs/exceljs/pull/2211).
Many thanks to [@jarrod-cocoon](https://github.com/jarrod-cocoon) for this contribution! +* Merged [fixed spelling error in README.md file #2208](https://github.com/exceljs/exceljs/pull/2208).
Many thanks to [@HugoP27](https://github.com/HugoP27) for this contribution! +* Merged [fix: Fix xlsx.writeFile() not catching error when error occurs #2244](https://github.com/exceljs/exceljs/pull/2244).
Many thanks to [@zurmokeeper](https://github.com/zurmokeeper) for this contribution! +* Merged [Improve worksheets' naming validation logic. #2257](https://github.com/exceljs/exceljs/pull/2257).
Many thanks to [@Siemienik](https://github.com/Siemienik) for this contribution! +* Merged [fix issue 2125 - spliceRows remove last row #2140](https://github.com/exceljs/exceljs/pull/2140).
Many thanks to [@babu-ch](https://github.com/babu-ch) for this contribution! +* Merged [fix: fix the loss of column attributes due to incorrect column order #2222](https://github.com/exceljs/exceljs/pull/2222).
Many thanks to [@cpaiyueyue](https://github.com/cpaiyueyue) for this contribution! +* Merged [Fix: Sheet Properties Types #2327](https://github.com/exceljs/exceljs/pull/2327).
Many thanks to [@albeniraouf](https://github.com/albeniraouf) for this contribution! +* Merged [Use node 18 LTS for tsc, and benchmark. Add node 20. to test matrix. … #2354](https://github.com/exceljs/exceljs/pull/2354).
Many thanks to [@Siemienik](https://github.com/Siemienik) for this contribution! +* Merged [Add missing tooltip attribute to CellHyperlinkValue index.d.ts #2350](https://github.com/exceljs/exceljs/pull/2350).
Many thanks to [@NiklasPor](https://github.com/NiklasPor) for this contribution! +* Merged [Increase resilience to generating large workbooks #2320](https://github.com/exceljs/exceljs/pull/2320).
Many thanks to [@hfhchan-plb](https://github.com/hfhchan-plb) for this contribution! +* Merged [repair all 'c2fo.io' links ('c2fo.github.io') #2324](https://github.com/exceljs/exceljs/pull/2324).
Many thanks to [@justintunev7](https://github.com/justintunev7) for this contribution! +* Merged [fix: fix type definitions about last column, formula values and protection #2309](https://github.com/exceljs/exceljs/pull/2309).
Many thanks to [@gltjk](https://github.com/gltjk) for this contribution! +* Merged [fix: add spinCount field for WorksheetProtection type #2284](https://github.com/exceljs/exceljs/pull/2284).
Many thanks to [@damingerdai](https://github.com/damingerdai) for this contribution! +* Merged [Add type definition for WorksheetModel.merges #2281](https://github.com/exceljs/exceljs/pull/2281).
Many thanks to [@ytjmt](https://github.com/ytjmt) for this contribution! + +# 贡献 + +欢迎贡献!这可以帮助我了解大家需要一些什么功能,或者哪些 bugs 造成了极大的麻烦。 + +我只有一个请求;如果您提交对错误修复的请求(PR),请添加一个能够解决问题的单元测试或集成测试(在 *spec* 文件夹中)。 +即使只是测试失败的请求(PR)也可以 - 我可以分析测试的过程并以此修复代码。 + +注意:请尽可能避免在请求(PR)中修改软件包版本。 +版本一般在发布时会进行更新,任何版本更改很可能导致合并冲突。 + +明确地说,添加到该库的所有贡献都将包含在该库的 MIT 许可证中。 + +# 目录 + + + + + +# 导入[⬆](#目录) + +```javascript +const ExcelJS = require('exceljs'); +``` + +## ES5 导入[⬆](#目录) + +要使用 ES5 编译代码,请使用 *dist/es5* 路径。 + +```javascript +const ExcelJS = require('exceljs/dist/es5'); +``` + +**注意:**ES5 版本对许多 polyfill 都具有隐式依赖,而 exceljs 不再明确添加。 +您需要在依赖项中添加 `core-js` 和 `regenerator-runtime`,并在导入 `exceljs` 之前在代码中包含以下引用: + +```javascript +// exceljs 所需的 polyfills +require('core-js/modules/es.promise'); +require('core-js/modules/es.string.includes'); +require('core-js/modules/es.object.assign'); +require('core-js/modules/es.object.keys'); +require('core-js/modules/es.symbol'); +require('core-js/modules/es.symbol.async-iterator'); +require('regenerator-runtime/runtime'); + +const ExcelJS = require('exceljs/dist/es5'); +``` + +对于 IE 11,您还需要一个 polyfill 以支持 unicode regex 模式。 例如, + +```js +const rewritePattern = require('regexpu-core'); +const {generateRegexpuOptions} = require('@babel/helper-create-regexp-features-plugin/lib/util'); + +const {RegExp} = global; +try { + new RegExp('a', 'u'); +} catch (err) { + global.RegExp = function(pattern, flags) { + if (flags && flags.includes('u')) { + return new RegExp(rewritePattern(pattern, flags, generateRegexpuOptions({flags, pattern}))); + } + return new RegExp(pattern, flags); + }; + global.RegExp.prototype = RegExp.prototype; +} +``` + +## 浏览器端[⬆](#目录) + +ExcelJS 在 *dist/* 文件夹内发布了两个支持浏览器的包: + +一个是隐式依赖 `core-js` polyfills 的... +```html + + +``` + +另一个则没有... +```html + + +``` + + +# 接口[⬆](#目录) + +## 创建工作簿[⬆](#目录) + +```javascript +const workbook = new ExcelJS.Workbook(); +``` + +## 设置工作簿属性[⬆](#目录) + +```javascript +workbook.creator = 'Me'; +workbook.lastModifiedBy = 'Her'; +workbook.created = new Date(1985, 8, 30); +workbook.modified = new Date(); +workbook.lastPrinted = new Date(2016, 9, 27); +``` + +```javascript +// 将工作簿日期设置为 1904 年日期系统 +workbook.properties.date1904 = true; +``` + +## 设置计算属性[⬆](#目录) + +```javascript +// 在加载时强制工作簿计算属性 +workbook.calcProperties.fullCalcOnLoad = true; +``` + +## 工作簿视图[⬆](#目录) + +工作簿视图控制在查看工作簿时 Excel 将打开多少个单独的窗口。 + +```javascript +workbook.views = [ + { + x: 0, y: 0, width: 10000, height: 20000, + firstSheet: 0, activeTab: 1, visibility: 'visible' + } +] +``` + +## 添加工作表[⬆](#目录) + +```javascript +const sheet = workbook.addWorksheet('My Sheet'); +``` + +使用 `addWorksheet` 函数的第二个参数来指定工作表的选项。 + +示例: + +```javascript +// 创建带有红色标签颜色的工作表 +const sheet = workbook.addWorksheet('My Sheet', {properties:{tabColor:{argb:'FFC0000'}}}); + +// 创建一个隐藏了网格线的工作表 +const sheet = workbook.addWorksheet('My Sheet', {views: [{showGridLines: false}]}); + +// 创建一个第一行和列冻结的工作表 +const sheet = workbook.addWorksheet('My Sheet', {views:[{xSplit: 1, ySplit:1}]}); + +// 使用A4设置的页面设置设置创建新工作表 - 横向 +const worksheet = workbook.addWorksheet('My Sheet', { + pageSetup:{paperSize: 9, orientation:'landscape'} +}); + +// 创建一个具有页眉页脚的工作表 +const sheet = workbook.addWorksheet('My Sheet', { + headerFooter:{firstHeader: "Hello Exceljs", firstFooter: "Hello World"} +}); + +// 创建一个冻结了第一行和第一列的工作表 +const sheet = workbook.addWorksheet('My Sheet', {views:[{state: 'frozen', xSplit: 1, ySplit:1}]}); + +``` + +## 删除工作表[⬆](#目录) + +使用工作表的 `id` 从工作簿中删除工作表。 + +示例: + +```javascript +// 创建工作表 +const sheet = workbook.addWorksheet('My Sheet'); + +// 使用工作表 id 删除工作表 +workbook.removeWorksheet(sheet.id) +``` + +## 访问工作表[⬆](#目录) +```javascript +// 遍历所有工作表 +// 注意: workbook.worksheets.forEach 仍然是可以正常运行的, 但是以下的方式更好 +workbook.eachSheet(function(worksheet, sheetId) { + // ... +}); + +// 按 name 提取工作表 +const worksheet = workbook.getWorksheet('My Sheet'); + +// 按 id 提取工作表 +const worksheet = workbook.getWorksheet(1); +``` + +## 工作表状态[⬆](#目录) + +```javascript +// 使工作表可见 +worksheet.state = 'visible'; + +// 隐藏工作表 +worksheet.state = 'hidden'; + +// 从“隐藏/取消隐藏”对话框中隐藏工作表 +worksheet.state = 'veryHidden'; +``` + +## 工作表属性[⬆](#目录) + +工作表支持属性存储,以允许控制工作表的某些功能。 + +```javascript +// 创建具有属性的新工作表 +const worksheet = workbook.addWorksheet('sheet', {properties:{tabColor:{argb:'FF00FF00'}}}); + +// 创建一个具有属性的可写的新工作表 +const worksheetWriter = workbookWriter.addWorksheet('sheet', {properties:{outlineLevelCol:1}}); + +// 之后调整属性(工作表读写器不支持该操作) +worksheet.properties.outlineLevelCol = 2; +worksheet.properties.defaultRowHeight = 15; +``` + +**支持的属性** + +| 属性名 | 默认值 | 描述 | +| ---------------- | ---------- | ----------- | +| tabColor | `undefined` | 标签的颜色 | +| outlineLevelCol | 0 | 工作表列大纲级别 | +| outlineLevelRow | 0 | 工作表行大纲级别 | +| defaultRowHeight | 15 | 默认行高 | +| defaultColWidth | (optional) | 默认列宽 | +| dyDescent | 55 | TBD | + +### 工作表尺寸[⬆](#目录) + +一些新的尺寸属性已添加到工作表中... + +| 属性名 | 描述 | +| ----------------- | ------------------------------------------------------------ | +| rowCount | 文档的总行数。 等于具有值的最后一行的行号。 | +| actualRowCount | 具有值的行数的计数。 如果中间文档行为空,则该行将不包括在计数中。 | +| columnCount | 文档的总列数。 等于所有行的最大单元数。 | +| actualColumnCount | 具有值的列数的计数。 | + + +## 页面设置[⬆](#目录) + +所有可能影响工作表打印的属性都保存在工作表上的 `pageSetup` 对象中。 + +```javascript +// 使用 A4 横向的页面设置创建新工作表 +const worksheet = workbook.addWorksheet('sheet', { + pageSetup:{paperSize: 9, orientation:'landscape'} +}); + +// 使用适合页面的pageSetup设置创建一个新的工作表编写器 +const worksheetWriter = workbookWriter.addWorksheet('sheet', { + pageSetup:{fitToPage: true, fitToHeight: 5, fitToWidth: 7} +}); + +// 之后调整页面设置配置 +worksheet.pageSetup.margins = { + left: 0.7, right: 0.7, + top: 0.75, bottom: 0.75, + header: 0.3, footer: 0.3 +}; + +// 设置工作表的打印区域 +worksheet.pageSetup.printArea = 'A1:G20'; + +// 通过使用 `&&` 分隔打印区域来设置多个打印区域 +worksheet.pageSetup.printArea = 'A1:G10&&A11:G20'; + +// 在每个打印页面上重复特定的行 +worksheet.pageSetup.printTitlesRow = '1:3'; + +// 在每个打印页面上重复特定列 +worksheet.pageSetup.printTitlesColumn = 'A:C'; +``` + +**支持的页面设置配置项** + +| 属性名 | 默认值 | 描述 | +| --------------------- | ------------- | ----------- | +| margins | | 页面上的空白边距。 单位为英寸。 | +| orientation | `'portrait'` | 页面方向 - 即较高 (`'portrait'`) 或者较宽 (`'landscape'`) | +| horizontalDpi | 4294967295 | 水平方向上的 DPI。默认值为 `-1` | +| verticalDpi | 4294967295 | 垂直方向上的 DPI。默认值为 `-1` | +| fitToPage | | 是否使用 `fitToWidth` 和 `fitToHeight` 或 `scale` 设置。默认基于存在于 `pageSetup` 对象中的设置-如果两者都存在,则 `scale` 优先级高(默认值为 `false`)。 | +| pageOrder | `'downThenOver'` | 打印页面的顺序-`['downThenOver', 'overThenDown']` 之一 | +| blackAndWhite | `false` | 无色打印 | +| draft | `false` | 打印质量较低(墨水) | +| cellComments | `'None'` | 在何处放置批注-`['atEnd','asDisplayed','None']`中的一个 | +| errors | `'displayed'` | 哪里显示错误 -`['dash', 'blank', 'NA', 'displayed']` 之一 | +| scale | 100 | 增加或减小打印尺寸的百分比值。 当 `fitToPage` 为 `false` 时激活 | +| fitToWidth | 1 | 纸张应打印多少页宽。 当 `fitToPage` 为 `true` 时激活 | +| fitToHeight | 1 | 纸张应打印多少页高。 当 `fitToPage` 为 `true` 时激活 | +| paperSize | | 使用哪种纸张尺寸(见下文) | +| showRowColHeaders | false | 是否显示行号和列字母 | +| showGridLines | false | 是否显示网格线 | +| firstPageNumber | | 第一页使用哪个页码 | +| horizontalCentered | false | 是否将工作表数据水平居中 | +| verticalCentered | false | 是否将工作表数据垂直居中 | + +**示例纸张尺寸** + +| 属性名 | 值 | +| ----------------------------- | ----------- | +| Letter | `undefined` | +| Legal | 5 | +| Executive | 7 | +| A3 | 8 | +| A4 | 9 | +| A5 | 11 | +| B5 (JIS) | 13 | +| Envelope #10 | 20 | +| Envelope DL | 27 | +| Envelope C5 | 28 | +| Envelope B5 | 34 | +| Envelope Monarch | 37 | +| Double Japan Postcard Rotated | 82 | +| 16K 197x273 mm | 119 | + +## 页眉和页脚[⬆](#目录) + +这是添加页眉和页脚的方法。 +添加的内容主要是文本,例如时间,简介,文件信息等,您可以设置文本的样式。 +此外,您可以为首页和偶数页设置不同的文本。 + +注意:目前不支持图片。 + +```javascript +// 创建一个带有页眉和页脚的工作表 +var sheet = workbook.addWorksheet('My Sheet', { + headerFooter:{firstHeader: "Hello Exceljs", firstFooter: "Hello World"} +}); + +// 创建一个带有页眉和页脚可写的工作表 +var worksheetWriter = workbookWriter.addWorksheet('sheet', { + headerFooter:{firstHeader: "Hello Exceljs", firstFooter: "Hello World"} +}); +// 代码中出现的&开头字符对应变量,相关信息可查阅下文的变量表 +// 设置页脚(默认居中),结果:“第 2 页,共 16 页” +worksheet.headerFooter.oddFooter = "第 &P 页,共 &N 页"; + +// 将页脚(默认居中)设置为粗体,结果是:“第2页,共16页” +worksheet.headerFooter.oddFooter = "Page &P of &N"; + +// 将左页脚设置为 18px 并以斜体显示。 结果:“第2页,共16页” +worksheet.headerFooter.oddFooter = "&LPage &P of &N"; + +// 将中间标题设置为灰色Aril,结果为:“ 52 exceljs” +worksheet.headerFooter.oddHeader = "&C&KCCCCCC&\"Aril\"52 exceljs"; + +// 设置页脚的左,中和右文本。 结果:页脚左侧为“ Exceljs”。 页脚中心的“ demo.xlsx”。 页脚右侧的“第2页” +worksheet.headerFooter.oddFooter = "&Lexceljs&C&F&RPage &P"; + +// 在首页添加不同的页眉和页脚 +worksheet.headerFooter.differentFirst = true; +worksheet.headerFooter.firstHeader = "Hello Exceljs"; +worksheet.headerFooter.firstFooter = "Hello World" +``` + +**支持的 headerFooter 设置** + +| 属性名 | 默认值 | 描述 | +| ---------------- | ------- | ------------------------------------------------------------ | +| differentFirst | `false` | 将 `differentFirst` 的值设置为 `true`,这表示第一页的页眉/页脚与其他页不同 | +| differentOddEven | `false` | 将 `differentOddEven` 的值设置为 `true`,表示奇数页和偶数页的页眉/页脚不同 | +| oddHeader | `null` | 设置奇数(默认)页面的标题字符串,可以设置格式化字符串 | +| oddFooter | `null` | 设置奇数(默认)页面的页脚字符串,可以设置格式化字符串 | +| evenHeader | `null` | 设置偶数页的标题字符串,可以设置格式化字符串 | +| evenFooter | `null` | 为偶数页设置页脚字符串,可以设置格式化字符串 | +| firstHeader | `null` | 设置首页的标题字符串,可以设置格式化字符串 | +| firstFooter | `null` | 设置首页的页脚字符串,可以设置格式化字符串 | + +**脚本命令** + +| 命令 | 描述 | +| ------------ | ----------- | +| &L | 将位置设定在左侧 | +| &C | 将位置设置在中心 | +| &R | 将位置设定在右边 | +| &P | 当前页码 | +| &N | 总页数 | +| &D | 当前日期 | +| &T | 当前时间 | +| &G | 照片 | +| &A | 工作表名称 | +| &F | 文件名称 | +| &B | 加粗文本 | +| &I | 斜体文本 | +| &U | 文本下划线 | +| &"font name" | 字体名称,例如&“ Aril” | +| &font size | 字体大小,例如12 | +| &KHEXCode | 字体颜色,例如 &KCCCCCC | + +## 工作表视图[⬆](#目录) + +现在,工作表支持视图列表,这些视图控制Excel如何显示工作表: + +* `frozen` - 顶部和左侧的许多行和列被冻结在适当的位置。 仅右下部分会滚动 +* `split` - 该视图分为4个部分,每个部分可半独立滚动。 + +每个视图还支持各种属性: + +| 属性名 | 默认值 | 描述 | +| ----------------- | --------- | ----------- | +| state | `'normal'` | 控制视图状态 - `'normal'`, `'frozen'` 或者 `'split'` 之一 | +| rightToLeft | `false` | 将工作表视图的方向设置为从右到左 | +| activeCell | `undefined` | 当前选择的单元格 | +| showRuler | `true` | 在页面布局中显示或隐藏标尺 | +| showRowColHeaders | `true` | 显示或隐藏行标题和列标题(例如,顶部的 A1,B1 和左侧的1,2,3) | +| showGridLines | `true` | 显示或隐藏网格线(针对未定义边框的单元格显示) | +| zoomScale | 100 | 用于视图的缩放比例 | +| zoomScaleNormal | 100 | 正常缩放视图 | +| style | `undefined` | 演示样式- `pageBreakPreview` 或 `pageLayout` 之一。 注意:页面布局与 `frozen` 视图不兼容 | + +### 冻结视图[⬆](#目录) + +冻结视图支持以下额外属性: + +| 属性名 | 默认值 | 描述 | +| ----------------- | --------- | ----------- | +| xSplit | 0 | 冻结多少列。要仅冻结行,请将其设置为 `0` 或 `undefined` | +| ySplit | 0 | 冻结多少行。要仅冻结列,请将其设置为 `0` 或 `undefined` | +| topLeftCell | special | 哪个单元格将在右下窗格中的左上角。注意:不能是冻结单元格。默认为第一个未冻结的单元格 | + +```javascript +worksheet.views = [ + {state: 'frozen', xSplit: 2, ySplit: 3, topLeftCell: 'G10', activeCell: 'A1'} +]; +``` + +### 拆分视图[⬆](#目录) + +拆分视图支持以下额外属性: + +| 属性名 | 默认值 | 描述 | +| ----------------- | --------- | ----------- | +| xSplit | 0 | 从左侧多少个点起,以放置拆分器。要垂直拆分,请将其设置为 `0` 或 `undefined` | +| ySplit | 0 | 从顶部多少个点起,放置拆分器。要水平拆分,请将其设置为 `0` 或 `undefined` | +| topLeftCell | `undefined` | 哪个单元格将在右下窗格中的左上角。 | +| activePane | `undefined` | 哪个窗格将处于活动状态-`topLeft`,`topRight`,`bottomLeft` 和 `bottomRight` 中的一个 | + +```javascript +worksheet.views = [ + {state: 'split', xSplit: 2000, ySplit: 3000, topLeftCell: 'G10', activeCell: 'A1'} +]; +``` + +## 自动筛选器[⬆](#目录) + +可以对工作表应用自动筛选器。 + +```javascript +worksheet.autoFilter = 'A1:C1'; +``` + +尽管范围字符串是 `autoFilter` 的标准形式,但工作表还将支持以下值: + +```javascript +// 将自动筛选器设置为从 A1 到 C1 +worksheet.autoFilter = { + from: 'A1', + to: 'C1', +} + +// 将自动筛选器设置为从第3行第1列的单元格到第5行第12列的单元格 +worksheet.autoFilter = { + from: { + row: 3, + column: 1 + }, + to: { + row: 5, + column: 12 + } +} + +// 将自动筛选器设置为从D3到第7行第5列中的单元格 +worksheet.autoFilter = { + from: 'D3', + to: { + row: 7, + column: 5 + } +} +``` + +## 列[⬆](#目录) + +```javascript +// 添加列标题并定义列键和宽度 +// 注意:这些列结构仅是构建工作簿的方便之处,除了列宽之外,它们不会完全保留。 +worksheet.columns = [ + { header: 'Id', key: 'id', width: 10 }, + { header: 'Name', key: 'name', width: 32 }, + { header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 } +]; + +// 通过键,字母和基于1的列号访问单个列 +const idCol = worksheet.getColumn('id'); +const nameCol = worksheet.getColumn('B'); +const dobCol = worksheet.getColumn(3); + +// 设置列属性 + +// 注意:将覆盖 C1 单元格值 +dobCol.header = 'Date of Birth'; + +// 注意:这将覆盖 C1:C2 单元格值 +dobCol.header = ['Date of Birth', 'A.K.A. D.O.B.']; + +// 从现在开始,此列将以 “dob” 而不是 “DOB” 建立索引 +dobCol.key = 'dob'; + +dobCol.width = 15; + +// 如果需要,隐藏列 +dobCol.hidden = true; + +// 为列设置大纲级别 +worksheet.getColumn(4).outlineLevel = 0; +worksheet.getColumn(5).outlineLevel = 1; + +// 列支持一个只读字段,以指示基于 `OutlineLevel` 的折叠状态 +expect(worksheet.getColumn(4).collapsed).to.equal(false); +expect(worksheet.getColumn(5).collapsed).to.equal(true); + +// 遍历此列中的所有当前单元格 +dobCol.eachCell(function(cell, rowNumber) { + // ... +}); + +// 遍历此列中的所有当前单元格,包括空单元格 +dobCol.eachCell({ includeEmpty: true }, function(cell, rowNumber) { + // ... +}); + +// 添加一列新值 +worksheet.getColumn(6).values = [1,2,3,4,5]; + +// 添加稀疏列值 +worksheet.getColumn(7).values = [,,2,3,,5,,7,,,,11]; + +// 剪切一列或多列(右边的列向左移动) +// 如果定义了列属性,则会相应地对其进行切割或移动 +// 已知问题:如果拼接导致任何合并的单元格移动,结果可能是不可预测的 +worksheet.spliceColumns(3,2); + +// 删除一列,再插入两列。 +// 注意:第4列及以上的列将右移1列。 +// 另外:如果工作表中的行数多于列插入项中的值,则行将仍然被插入,就好像值存在一样。 +const newCol3Values = [1,2,3,4,5]; +const newCol4Values = ['one', 'two', 'three', 'four', 'five']; +worksheet.spliceColumns(3, 1, newCol3Values, newCol4Values); + +``` + +## 行[⬆](#目录) + +```javascript +// 获取一个行对象。如果尚不存在,则将返回一个新的空对象 +const row = worksheet.getRow(5); + +// Get multiple row objects. If it doesn't already exist, new empty ones will be returned +const rows = worksheet.getRows(5, 2); // start, length (>0, else undefined is returned) + +// 获取工作表中的最后一个可编辑行(如果没有,则为 `undefined`) +const row = worksheet.lastRow; + +// 设置特定的行高 +row.height = 42.5; + +// 隐藏行 +row.hidden = true; + +// 为行设置大纲级别 +worksheet.getRow(4).outlineLevel = 0; +worksheet.getRow(5).outlineLevel = 1; + +// 行支持一个只读字段,以指示基于 `OutlineLevel` 的折叠状态 +expect(worksheet.getRow(4).collapsed).to.equal(false); +expect(worksheet.getRow(5).collapsed).to.equal(true); + + +row.getCell(1).value = 5; // A5 的值设置为5 +row.getCell('name').value = 'Zeb'; // B5 的值设置为 “Zeb” - 假设第2列仍按名称键入 +row.getCell('C').value = new Date(); // C5 的值设置为当前时间 + +// 获取行并作为稀疏数组返回 +// 注意:接口更改:worksheet.getRow(4) ==> worksheet.getRow(4).values +row = worksheet.getRow(4).values; +expect(row[5]).toEqual('Kyle'); + +// 通过连续数组分配行值(其中数组元素 0 具有值) +row.values = [1,2,3]; +expect(row.getCell(1).value).toEqual(1); +expect(row.getCell(2).value).toEqual(2); +expect(row.getCell(3).value).toEqual(3); + +// 通过稀疏数组分配行值(其中数组元素 0 为 `undefined`) +const values = [] +values[5] = 7; +values[10] = 'Hello, World!'; +row.values = values; +expect(row.getCell(1).value).toBeNull(); +expect(row.getCell(5).value).toEqual(7); +expect(row.getCell(10).value).toEqual('Hello, World!'); + +// 使用列键按对象分配行值 +row.values = { + id: 13, + name: 'Thing 1', + dob: new Date() +}; + +// 在该行下方插入一个分页符 +row.addPageBreak(); + +// 遍历工作表中具有值的所有行 +worksheet.eachRow(function(row, rowNumber) { + console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values)); +}); + +// 遍历工作表中的所有行(包括空行) +worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) { + console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values)); +}); + +// 连续遍历所有非空单元格 +row.eachCell(function(cell, colNumber) { + console.log('Cell ' + colNumber + ' = ' + cell.value); +}); + +// 遍历一行中的所有单元格(包括空单元格) +row.eachCell({ includeEmpty: true }, function(cell, colNumber) { + console.log('Cell ' + colNumber + ' = ' + cell.value); +}); + +// 提交给流一个完成的行 +row.commit(); + +// 行尺寸 +const rowSize = row.cellCount; +const numValues = row.actualCellCount; +``` + +## Add Rows[⬆](#contents) + +```javascript +// Add a couple of Rows by key-value, after the last current row, using the column keys +worksheet.addRow({id: 1, name: 'John Doe', dob: new Date(1970,1,1)}); +worksheet.addRow({id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)}); + +// Add a row by contiguous Array (assign to columns A, B & C) +worksheet.addRow([3, 'Sam', new Date()]); + +// Add a row by sparse Array (assign to columns A, E & I) +const rowValues = []; +rowValues[1] = 4; +rowValues[5] = 'Kyle'; +rowValues[9] = new Date(); +worksheet.addRow(rowValues); + +// Add a row with inherited style +// This new row will have same style as last row +// And return as row object +const newRow = worksheet.addRow(rowValues, 'i'); + +// Add an array of rows +const rows = [ + [5,'Bob',new Date()], // row by array + {id:6, name: 'Barbara', dob: new Date()} +]; +// add new rows and return them as array of row objects +const newRows = worksheet.addRows(rows); + +// Add an array of rows with inherited style +// These new rows will have same styles as last row +// and return them as array of row objects +const newRowsStyled = worksheet.addRows(rows, 'i'); +``` +| Parameter | Description | Default Value | +| -------------- | ----------------- | -------- | +| value/s | The new row/s values | | +| style | 'i' for inherit from row above, 'i+' to include empty cells, 'n' for none | *'n'* | + +## 处理单个单元格[⬆](#目录) + +```javascript +const cell = worksheet.getCell('C3'); + +// 修改/添加单个单元格 +cell.value = new Date(1968, 5, 1); + +// 查询单元格的类型 +expect(cell.type).toEqual(Excel.ValueType.Date); + +// 使用单元格的字符串值 +myInput.value = cell.text; + +// 使用 html 安全的字符串进行渲染... +const html = '
' + cell.html + '
'; + +``` + +## 合并单元格[⬆](#目录) + +```javascript +// 合并一系列单元格 +worksheet.mergeCells('A4:B5'); + +// ...合并的单元格被链接起来了 +worksheet.getCell('B5').value = 'Hello, World!'; +expect(worksheet.getCell('B5').value).toBe(worksheet.getCell('A4').value); +expect(worksheet.getCell('B5').master).toBe(worksheet.getCell('A4')); + +// ...合并的单元格共享相同的样式对象 +expect(worksheet.getCell('B5').style).toBe(worksheet.getCell('A4').style); +worksheet.getCell('B5').style.font = myFonts.arial; +expect(worksheet.getCell('A4').style.font).toBe(myFonts.arial); + +// 取消单元格合并将打破链接的样式 +worksheet.unMergeCells('A4'); +expect(worksheet.getCell('B5').style).not.toBe(worksheet.getCell('A4').style); +expect(worksheet.getCell('B5').style.font).not.toBe(myFonts.arial); + +// 按左上,右下合并 +worksheet.mergeCells('K10', 'M12'); + +// 按开始行,开始列,结束行,结束列合并(相当于 K10:M12) +worksheet.mergeCells(10,11,12,13); +``` + +## Insert Rows[⬆](#目录) + +```javascript +insertRow(pos, value, style = 'n') +insertRows(pos, values, style = 'n') + +// Insert a couple of Rows by key-value, shifting down rows every time +worksheet.insertRow(1, {id: 1, name: 'John Doe', dob: new Date(1970,1,1)}); +worksheet.insertRow(1, {id: 2, name: 'Jane Doe', dob: new Date(1965,1,7)}); + +// Insert a row by contiguous Array (assign to columns A, B & C) +worksheet.insertRow(1, [3, 'Sam', new Date()]); + +// Insert a row by sparse Array (assign to columns A, E & I) +var rowValues = []; +rowValues[1] = 4; +rowValues[5] = 'Kyle'; +rowValues[9] = new Date(); +// insert new row and return as row object +const insertedRow = worksheet.insertRow(1, rowValues); + +// Insert a row, with inherited style +// This new row will have same style as row on top of it +// And return as row object +const insertedRowInherited = worksheet.insertRow(1, rowValues, 'i'); + +// Insert a row, keeping original style +// This new row will have same style as it was previously +// And return as row object +const insertedRowOriginal = worksheet.insertRow(1, rowValues, 'o'); + +// Insert an array of rows, in position 1, shifting down current position 1 and later rows by 2 rows +var rows = [ + [5,'Bob',new Date()], // row by array + {id:6, name: 'Barbara', dob: new Date()} +]; +// insert new rows and return them as array of row objects +const insertedRows = worksheet.insertRows(1, rows); + +// Insert an array of rows, with inherited style +// These new rows will have same style as row on top of it +// And return them as array of row objects +const insertedRowsInherited = worksheet.insertRows(1, rows, 'i'); + +// Insert an array of rows, keeping original style +// These new rows will have same style as it was previously in 'pos' position +const insertedRowsOriginal = worksheet.insertRows(1, rows, 'o'); + +``` +| Parameter | Description | Default Value | +| -------------- | ----------------- | -------- | +| pos | Row number where you want to insert, pushing down all rows from there | | +| value/s | The new row/s values | | +| style | 'i' for inherit from row above, , 'i+' to include empty cells, 'o' for original style, 'o+' to include empty cells, 'n' for none | *'n'* | + +## Splice[⬆](#contents) + +```javascript +// Cut one or more rows (rows below are shifted up) +// Known Issue: If a splice causes any merged cells to move, the results may be unpredictable +worksheet.spliceRows(4, 3); + +// remove one row and insert two more. +// Note: rows 4 and below will be shifted down by 1 row. +const newRow3Values = [1, 2, 3, 4, 5]; +const newRow4Values = ['one', 'two', 'three', 'four', 'five']; +worksheet.spliceRows(3, 1, newRow3Values, newRow4Values); + +// Cut one or more cells (cells to the right are shifted left) +// Note: this operation will not affect other rows +row.splice(3, 2); + +// remove one cell and insert two more (cells to the right of the cut cell will be shifted right) +row.splice(4, 1, 'new value 1', 'new value 2'); +``` +| Parameter | Description | Default Value | +| -------------- | ----------------- | -------- | +| start | Starting point to splice from | | +| count | Number of rows/cells to remove | | +| ...inserts | New row/cell values to insert | | + +## 重复行[⬆](#目录) + +```javascript +duplicateRow(start, amount = 1, insert = true) + +const wb = new ExcelJS.Workbook(); +const ws = wb.addWorksheet('duplicateTest'); +ws.getCell('A1').value = 'One'; +ws.getCell('A2').value = 'Two'; +ws.getCell('A3').value = 'Three'; +ws.getCell('A4').value = 'Four'; + +// 该行将重复复制第一行两次,但将替换第二行和第三行 +// 如果第三个参数为 true,则它将插入2个新行,其中包含行 “One” 的值和样式 +ws.duplicateRow(1,2,false); +``` + +| 参数 | 描述 | 默认值 | +| -------------- | ----------------- | -------- | +| start | 要复制的行号(Excel中的第一个是1) | | +| amount | 您要复制行的次数 | 1 | +| insert | 如果要为重复项插入新行,则为 `true`,否则为 `false` 将替换已有行 | `true` | + + + +## 定义名称[⬆](#目录) + +单个单元格(或多个单元格组)可以为它们分配名称。名称可用于公式和数据验证(可能还有更多)。 + +```javascript +// 为单元格分配(或获取)名称(将覆盖该单元具有的其他任何名称) +worksheet.getCell('A1').name = 'PI'; +expect(worksheet.getCell('A1').name).to.equal('PI'); + +// 为单元格分配(或获取)一组名称(单元可以具有多个名称) +worksheet.getCell('A1').names = ['thing1', 'thing2']; +expect(worksheet.getCell('A1').names).to.have.members(['thing1', 'thing2']); + +// 从单元格中删除名称 +worksheet.getCell('A1').removeName('thing1'); +expect(worksheet.getCell('A1').names).to.have.members(['thing2']); +``` + +## 数据验证[⬆](#目录) + +单元格可以定义哪些值有效或无效,并提示用户以帮助指导它们。 + +验证类型可以是以下之一: + +| 类型 | 描述 | +| ---------- | ----------- | +| list | 定义一组离散的有效值。Excel 将在下拉菜单中提供这些内容,以便于输入 | +| whole | 该值必须是整数 | +| decimal | 该值必须是十进制数 | +| textLength | 该值可以是文本,但长度是受控的 | +| custom | 自定义公式控制有效值 | + +对于 `list` 或 `custom` 以外的其他类型,以下运算符会影响验证: + +| 运算符 | 描述 | +| -------------------- | ----------- | +| between | 值必须介于公式结果之间 | +| notBetween | 值不能介于公式结果之间 | +| equal | 值必须等于公式结果 | +| notEqual | 值不能等于公式结果 | +| greaterThan | 值必须大于公式结果 | +| lessThan | 值必须小于公式结果 | +| greaterThanOrEqual | 值必须大于或等于公式结果 | +| lessThanOrEqual | 值必须小于或等于公式结果 | + +```javascript +// 指定有效值的列表(One,Two,Three,Four)。 +// Excel 将提供一个包含这些值的下拉列表。 +worksheet.getCell('A1').dataValidation = { + type: 'list', + allowBlank: true, + formulae: ['"One,Two,Three,Four"'] +}; + +// 指定范围内的有效值列表。 +// Excel 将提供一个包含这些值的下拉列表。 +worksheet.getCell('A1').dataValidation = { + type: 'list', + allowBlank: true, + formulae: ['$D$5:$F$5'] +}; + +// 指定单元格必须为非5的整数。 +// 向用户显示适当的错误消息(如果他们弄错了) +worksheet.getCell('A1').dataValidation = { + type: 'whole', + operator: 'notEqual', + showErrorMessage: true, + formulae: [5], + errorStyle: 'error', + errorTitle: 'Five', + error: 'The value must not be Five' +}; + +// 指定单元格必须为1.5到7之间的十进制数字。 +// 添加“工具提示”以帮助指导用户 +worksheet.getCell('A1').dataValidation = { + type: 'decimal', + operator: 'between', + allowBlank: true, + showInputMessage: true, + formulae: [1.5, 7], + promptTitle: 'Decimal', + prompt: 'The value must between 1.5 and 7' +}; + +// 指定单元格的文本长度必须小于15 +worksheet.getCell('A1').dataValidation = { + type: 'textLength', + operator: 'lessThan', + showErrorMessage: true, + allowBlank: true, + formulae: [15] +}; + +// 指定单元格必须是2016年1月1日之前的日期 +worksheet.getCell('A1').dataValidation = { + type: 'date', + operator: 'lessThan', + showErrorMessage: true, + allowBlank: true, + formulae: [new Date(2016,0,1)] +}; +``` + +## 单元格注释[⬆](#目录) + +将旧样式的注释添加到单元格 + +```javascript +// 纯文字笔记 +worksheet.getCell('A1').note = 'Hello, ExcelJS!'; + +// 彩色格式化的笔记 +ws.getCell('B1').note = { + texts: [ + {'font': {'size': 12, 'color': {'theme': 0}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': 'This is '}, + {'font': {'italic': true, 'size': 12, 'color': {'theme': 0}, 'name': 'Calibri', 'scheme': 'minor'}, 'text': 'a'}, + {'font': {'size': 12, 'color': {'theme': 1}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': ' '}, + {'font': {'size': 12, 'color': {'argb': 'FFFF6600'}, 'name': 'Calibri', 'scheme': 'minor'}, 'text': 'colorful'}, + {'font': {'size': 12, 'color': {'theme': 1}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': ' text '}, + {'font': {'size': 12, 'color': {'argb': 'FFCCFFCC'}, 'name': 'Calibri', 'scheme': 'minor'}, 'text': 'with'}, + {'font': {'size': 12, 'color': {'theme': 1}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': ' in-cell '}, + {'font': {'bold': true, 'size': 12, 'color': {'theme': 1}, 'name': 'Calibri', 'family': 2, 'scheme': 'minor'}, 'text': 'format'}, + ], + margins: { + insetmode: 'custom', + inset: [0.25, 0.25, 0.35, 0.35] + }, + protection: { + locked: True, + lockText: False + }, + editAs: 'twoCells' +}; +``` + +### 单元格批注属性[⬆](#目录) + +下表定义了单元格注释已支持的属性。 + +| Field | Required | Default Value | Description | +| -------- | -------- | ------------- | ----------- | +| texts | Y | | 评论文字 | +| margins | N | {} | 确定自动或自定义设置单元格注释的边距值 | +| protection | N | {} | 可以使用保护属性来指定对象和对象文本的锁定状态 | +| editAs | N | 'absolute' | 可以使用'editAs'属性来指定注释如何锚定到单元格 | + +### 单元格批注页边距[⬆](#目录) + +确定单元格批注的页面距设置模式,自动或者自定义模式。 + +```javascript +ws.getCell('B1').note.margins = { + insetmode: 'custom', + inset: [0.25, 0.25, 0.35, 0.35] +} +``` + +### 已支持的页边距属性[⬆](#目录) + +| Property | Required | Default Value | Description | +| -------- | -------- | ------------- | ----------- | +| insetmode | N | 'auto' | 确定是否自动设置注释边距,并且值是'auto' 或者 'custom' | +| inset | N | [0.13, 0.13, 0.25, 0.25] | 批注页边距的值,单位是厘米, 方向是左-上-右-下 | + +注意:只有当 ```insetmode```的值设置为'custom'时,```inset```的设置才生效。 + +### 单元格批注保护[⬆](#目录) + +可以使用保护属性来修改单元级别保护。 + +```javascript +ws.getCell('B1').note.protection = { + locked: 'False', + lockText: 'False', +}; +``` + +### 已支持的保护属性[⬆](#目录) + +| Property | Required | Default Value | Description | +| -------- | -------- | ------------- | ----------- | +| locked | N | 'True' | 此元素指定在保护工作表时对象已锁定 | +| lockText | N | 'True' | 该元素指定对象的文本已锁定 | + + +### 单元格批注对象位置属性[⬆](#目录) + +单元格注释还可以具有属性 'editAs',该属性将控制注释如何锚定到单元格。 +它可以具有以下值之一: + +```javascript +ws.getCell('B1').note.editAs = 'twoCells' +``` + +| Value | Description | +| --------- | ----------- | +| twoCells | 它指定注释的大小、位置随单元格而变 | +| oneCells | 它指定注释的大小固定,位置随单元格而变 | +| absolute | 这是默认值,它指定注释的大小、位置均固定 | + +## 表格[⬆](#目录) + +表允许表格内数据的表内操作。 + +要将表添加到工作表,请定义表模型并调用 `addTable`: + +```javascript +// 将表格添加到工作表 +ws.addTable({ + name: 'MyTable', + ref: 'A1', + headerRow: true, + totalsRow: true, + style: { + theme: 'TableStyleDark3', + showRowStripes: true, + }, + columns: [ + {name: 'Date', totalsRowLabel: 'Totals:', filterButton: true}, + {name: 'Amount', totalsRowFunction: 'sum', filterButton: false}, + ], + rows: [ + [new Date('2019-07-20'), 70.10], + [new Date('2019-07-21'), 70.60], + [new Date('2019-07-22'), 70.10], + ], +}); +``` + +注意:将表格添加到工作表将通过放置表格的标题和行数据来修改工作表。 +结果就是表格覆盖的工作表上的所有数据(包括标题和所有的)都将被覆盖。 + +### 表格属性[⬆](#目录) + + +下表定义了表格支持的属性。 + +| 表属性 | 描述 | 是否需要 | 默认值 | +| -------------- | ----------------- | -------- | ------------- | +| name | 表格名称 | Y | | +| displayName | 表格的显示名称 | N | `name` | +| ref | 表格的左上方单元格 | Y | | +| headerRow | 在表格顶部显示标题 | N | true | +| totalsRow | 在表格底部显示总计 | N | `false` | +| style | 额外的样式属性 | N | {} | +| columns | 列定义 | Y | | +| rows | 数据行 | Y | | + +### 表格样式属性[⬆](#目录) + +下表定义了表格中支持的属性样式属性。 + +| 样式属性 | 描述 | 是否需要 | 默认值 | +| ------------------ | ----------------- | -------- | ------------- | +| theme | 桌子的颜色主题 | N | `'TableStyleMedium2'` | +| showFirstColumn | 突出显示第一列(粗体) | N | `false` | +| showLastColumn | 突出显示最后一列(粗体) | N | `false` | +| showRowStripes | 用交替的背景色显示行 | N | `false` | +| showColumnStripes | 用交替的背景色显示列 | N | `false` | + +### 表格列属性[⬆](#目录) + +下表定义了每个表格列中支持的属性。 + +| 列属性 | 描述 | 是否需要 | 默认值 | +| ------------------ | ----------------- | -------- | ------------- | +| name | 列名,也用在标题中 | Y | | +| filterButton | 切换标题中的过滤器控件 | N | false | +| totalsRowLabel | 用于描述统计行的标签(第一列) | N | `'Total'` | +| totalsRowFunction | 统计函数名称 | N | `'none'` | +| totalsRowFormula | 自定义函数的可选公式 | N | | + +### 统计函数[⬆](#目录) + +下表列出了由列定义的 `totalsRowFunction` 属性的有效值。如果使用 `'custom'` 以外的任何值,则无需包括关联的公式,因为该公式将被表格插入。 + +| 统计函数 | 描述 | +| ------------------ | ----------------- | +| none | 此列没有统计函数 | +| average | 计算列的平均值 | +| countNums | 统计数字条目数 | +| count | 条目数 | +| max | 此列中的最大值 | +| min | 此列中的最小值 | +| stdDev | 该列的标准偏差 | +| var | 此列的方差 | +| sum | 此列的条目总数 | +| custom | 自定义公式。 需要关联的 `totalsRowFormula` 值。 | + +### 表格样式主题[⬆](#目录) + +有效的主题名称遵循以下模式: + +* "TableStyle[Shade][Number]" + +Shades(阴影),Number(数字)可以是以下之一: + +* Light, 1-21 +* Medium, 1-28 +* Dark, 1-11 + +对于无主题,请使用值 `null`。 + +注意:exceljs 尚不支持自定义表格主题。 + +### 修改表格[⬆](#目录) + +表格支持一组操作函数,这些操作函数允许添加或删除数据以及更改某些属性。由于这些操作中的许多操作可能会对工作表产生副作用,因此更改必须在完成后立即提交。 + +表中的所有索引值均基于零,因此第一行号和第一列号为 `0`。 + +**添加或删除标题和统计** + +```javascript +const table = ws.getTable('MyTable'); + +// 打开标题行 +table.headerRow = true; + +// 关闭统计行 +table.totalsRow = false; + +// 将表更改提交到工作表中 +table.commit(); +``` + +**重定位表** + +```javascript +const table = ws.getTable('MyTable'); + +// 表格左上移至 D4 +table.ref = 'D4'; + +// 将表更改提交到工作表中 +table.commit(); +``` + +**添加和删除行** + +```javascript +const table = ws.getTable('MyTable'); + +// 删除前两行 +table.removeRows(0, 2); + +// 在索引 5 处插入新行 +table.addRow([new Date('2019-08-05'), 5, 'Mid'], 5); + +// 在表格底部追加新行 +table.addRow([new Date('2019-08-10'), 10, 'End']); + +// 将表更改提交到工作表中 +table.commit(); +``` + +**添加和删除列** + +```javascript +const table = ws.getTable('MyTable'); + +// 删除第二列 +table.removeColumns(1, 1); + +// 在索引 1 处插入新列(包含数据) +table.addColumn( + {name: 'Letter', totalsRowFunction: 'custom', totalsRowFormula: 'ROW()', totalsRowResult: 6, filterButton: true}, + ['a', 'b', 'c', 'd'], + 2 +); + +// 将表更改提交到工作表中 +table.commit(); +``` + +**更改列属性** + +```javascript +const table = ws.getTable('MyTable'); + +// 获取第二列的列包装器 +const column = table.getColumn(1); + +// 设置一些属性 +column.name = 'Code'; +column.filterButton = true; +column.style = {font:{bold: true, name: 'Comic Sans MS'}}; +column.totalsRowLabel = 'Totals'; +column.totalsRowFunction = 'custom'; +column.totalsRowFormula = 'ROW()'; +column.totalsRowResult = 10; + +// 将表更改提交到工作表中 +table.commit(); +``` + + +## 样式[⬆](#目录) + +单元格,行和列均支持一组丰富的样式和格式,这些样式和格式会影响单元格的显示方式。 + +通过分配以下属性来设置样式: + +* numFmt +* font +* alignment +* border +* fill + +```javascript +// 为单元格分配样式 +ws.getCell('A1').numFmt = '0.00%'; + +// 将样式应用于工作表列 +ws.columns = [ + { header: 'Id', key: 'id', width: 10 }, + { header: 'Name', key: 'name', width: 32, style: { font: { name: 'Arial Black' } } }, + { header: 'D.O.B.', key: 'DOB', width: 10, style: { numFmt: 'dd/mm/yyyy' } } +]; + +// 将第3列设置为“货币格式” +ws.getColumn(3).numFmt = '"£"#,##0.00;[Red]\-"£"#,##0.00'; + +// 将第2行设置为 Comic Sans。 +ws.getRow(2).font = { name: 'Comic Sans MS', family: 4, size: 16, underline: 'double', bold: true }; +``` + +将样式应用于行或列时,它将应用于该行或列中所有当前存在的单元格。另外,创建的任何新单元格都将从其所属的行和列继承其初始样式。 + +如果单元格的行和列都定义了特定的样式(例如,字体),则该单元格所在行样式比列样式具有更高优先级。但是,如果行和列定义了不同的样式(例如 `column.numFmt` 和 `row.font`),则单元格将继承行的字体和列的 `numFmt`。 + + +注意:以上所有属性(`numFmt`(字符串)除外)都是 JS 对象结构。如果将同一样式对象分配给多个电子表格实体,则每个实体将共享同一样式对象。如果样式对象后来在电子表格序列化之前被修改,则所有引用该样式对象的实体也将被修改。此行为旨在通过减少创建的JS对象的数量来优先考虑性能。如果希望样式对象是独立的,则需要先对其进行克隆,然后再分配它们。同样,默认情况下,如果电子表格实体共享相似的样式,则从文件(或流)中读取文档时,它们也将引用相同的样式对象。 + +### 数字格式[⬆](#目录) + +```javascript +// 将值显示为“ 1 3/5” +ws.getCell('A1').value = 1.6; +ws.getCell('A1').numFmt = '# ?/?'; + +// 显示为“ 1.60%” +ws.getCell('B1').value = 0.016; +ws.getCell('B1').numFmt = '0.00%'; +``` + +### 字体 + +```javascript + +// for the wannabe graphic designers out there +ws.getCell('A1').font = { + name: 'Comic Sans MS', + family: 4, + size: 16, + underline: true, + bold: true +}; + +// for the graduate graphic designers... +ws.getCell('A2').font = { + name: 'Arial Black', + color: { argb: 'FF00FF00' }, + family: 2, + size: 14, + italic: true +}; + +// 垂直对齐 +ws.getCell('A3').font = { + vertAlign: 'superscript' +}; + +// 注意:该单元格将存储对分配的字体对象的引用。 +// 如果之后更改了字体对象,则单元字体也将更改。 +const font = { name: 'Arial', size: 12 }; +ws.getCell('A3').font = font; +font.size = 20; // 单元格 A3 现在具有20号字体! + +// 从文件或流中读取工作簿后,共享相似字体的单元格可能引用相同的字体对象 +``` + +| 字体属性 | 描述 | 示例值 | +| ------------- | ----------------- | ---------------- | +| name | 字体名称。 | 'Arial', 'Calibri', etc. | +| family | 备用字体家族。整数值。 | 1 - Serif, 2 - Sans Serif, 3 - Mono, Others - unknown | +| scheme | 字体方案。 | 'minor', 'major', 'none' | +| charset | 字体字符集。整数值。 | 1, 2, etc. | +| size | 字体大小。整数值。 | 9, 10, 12, 16, etc. | +| color | 颜色描述,一个包含 ARGB 值的对象。 | { argb: 'FFFF0000'} | +| bold | 字体 **粗细** | true, false | +| italic | 字体 *倾斜* | true, false | +| underline | 字体 下划线 样式 | true, false, 'none', 'single', 'double', 'singleAccounting', 'doubleAccounting' | +| strike | 字体 删除线 | true, false | +| outline | 字体轮廓 | true, false | +| vertAlign | 垂直对齐 | 'superscript', 'subscript' + +### 对齐[⬆](#目录) + +```javascript +// 将单元格对齐方式设置为左上,中间居中,右下 +ws.getCell('A1').alignment = { vertical: 'top', horizontal: 'left' }; +ws.getCell('B1').alignment = { vertical: 'middle', horizontal: 'center' }; +ws.getCell('C1').alignment = { vertical: 'bottom', horizontal: 'right' }; + +// 将单元格设置为自动换行 +ws.getCell('D1').alignment = { wrapText: true }; + +// 将单元格缩进设置为1 +ws.getCell('E1').alignment = { indent: 1 }; + +// 将单元格文本旋转设置为向上30deg,向下45deg和垂直文本 +ws.getCell('F1').alignment = { textRotation: 30 }; +ws.getCell('G1').alignment = { textRotation: -45 }; +ws.getCell('H1').alignment = { textRotation: 'vertical' }; +``` + +**有效的对齐属性值** + +| 水平的 | 垂直 | 文本换行 | 自适应 | 缩进 | 阅读顺序 | 文本旋转 | +| ---------------- | ----------- | -------- | ----------- | ------- | ------------ | ------------ | +| left | top | true | true | integer | rtl | 0 to 90 | +| center | middle | false | false | | ltr | -1 to -90 | +| right | bottom | | | | | vertical | +| fill | distributed | | | | | | +| justify | justify | | | | | | +| centerContinuous | | | | | | | +| distributed | | | | | | | + + +### 边框[⬆](#目录) + +```javascript +// 在A1周围设置单个细边框 +ws.getCell('A1').border = { + top: {style:'thin'}, + left: {style:'thin'}, + bottom: {style:'thin'}, + right: {style:'thin'} +}; + +// 在A3周围设置双细绿色边框 +ws.getCell('A3').border = { + top: {style:'double', color: {argb:'FF00FF00'}}, + left: {style:'double', color: {argb:'FF00FF00'}}, + bottom: {style:'double', color: {argb:'FF00FF00'}}, + right: {style:'double', color: {argb:'FF00FF00'}} +}; + +// 在A5中设置厚红十字边框 +ws.getCell('A5').border = { + diagonal: {up: true, down: true, style:'thick', color: {argb:'FFFF0000'}} +}; +``` + +**有效边框样式** + +* thin +* dotted +* dashDot +* hair +* dashDotDot +* slantDashDot +* mediumDashed +* mediumDashDotDot +* mediumDashDot +* medium +* double +* thick + +### 填充[⬆](#目录) + +```javascript +// 用红色深色垂直条纹填充A1 +ws.getCell('A1').fill = { + type: 'pattern', + pattern:'darkVertical', + fgColor:{argb:'FFFF0000'} +}; + +// 在A2中填充深黄色格子和蓝色背景 +ws.getCell('A2').fill = { + type: 'pattern', + pattern:'darkTrellis', + fgColor:{argb:'FFFFFF00'}, + bgColor:{argb:'FF0000FF'} +}; + +// 从左到右用蓝白蓝渐变填充A3 +ws.getCell('A3').fill = { + type: 'gradient', + gradient: 'angle', + degree: 0, + stops: [ + {position:0, color:{argb:'FF0000FF'}}, + {position:0.5, color:{argb:'FFFFFFFF'}}, + {position:1, color:{argb:'FF0000FF'}} + ] +}; + + +// 从中心开始用红绿色渐变填充A4 +ws.getCell('A4').fill = { + type: 'gradient', + gradient: 'path', + center:{left:0.5,top:0.5}, + stops: [ + {position:0, color:{argb:'FFFF0000'}}, + {position:1, color:{argb:'FF00FF00'}} + ] +}; +``` + +#### 填充模式[⬆](#目录) + +| 属性 | 是否需要 | 描述 | +| -------- | -------- | ----------- | +| type | Y | 值: `'pattern'`
指定此填充使用模式 | +| pattern | Y | 指定模式类型 (查看下面 有效模式类型 ) | +| fgColor | N | 指定图案前景色。默认为黑色。 | +| bgColor | N | 指定图案背景色。默认为白色。 | + +**有效模式类型** + +* none +* solid +* darkGray +* mediumGray +* lightGray +* gray125 +* gray0625 +* darkHorizontal +* darkVertical +* darkDown +* darkUp +* darkGrid +* darkTrellis +* lightHorizontal +* lightVertical +* lightDown +* lightUp +* lightGrid +* lightTrellis + +#### 渐变填充[⬆](#目录) + +| 属性 | 是否需要 | 描述 | +| -------- | -------- | ----------- | +| type | Y | 值: `'gradient'`
指定此填充使用渐变 | +| gradient | Y | 指定渐变类型。`['angle','path']` 之一 | +| degree | angle | 对于“角度”渐变,指定渐变的方向。`0` 是从左到右。值从 1-359 顺时针旋转方向 | +| center | path | 对于“路径”渐变。指定路径起点的相对坐标。“左”和“顶”值的范围是 0 到 1 | +| stops | Y | 指定渐变颜色序列。是包含位置和颜色(从位置 0 开始到位置 1 结束)的对象的数组。中间位置可用于指定路径上的其他颜色。 | + +**注意事项** + +使用上面的接口,可能会创建使用XLSX编辑器程序无法实现的渐变填充效果。例如,Excel 仅支持0、45、90 和 135 的角度梯度。类似地,stops 的顺序也可能受到 UI 的限制,其中位置 [0,1] 或[0,0.5,1] 是唯一的选择。请谨慎处理此填充,以确保目标 XLSX 查看器支持该填充。 + +### 富文本[⬆](#目录) + +现在,单个单元格支持RTF文本或单元格格式化。富文本值可以控制文本值内任意数量的子字符串的字体属性。有关支持哪些字体属性的详细信息,请参见字体。 + +```javascript + +ws.getCell('A1').value = { + 'richText': [ + {'font': {'size': 12,'color': {'theme': 0},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': 'This is '}, + {'font': {'italic': true,'size': 12,'color': {'theme': 0},'name': 'Calibri','scheme': 'minor'},'text': 'a'}, + {'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' '}, + {'font': {'size': 12,'color': {'argb': 'FFFF6600'},'name': 'Calibri','scheme': 'minor'},'text': 'colorful'}, + {'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' text '}, + {'font': {'size': 12,'color': {'argb': 'FFCCFFCC'},'name': 'Calibri','scheme': 'minor'},'text': 'with'}, + {'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' in-cell '}, + {'font': {'bold': true,'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': 'format'} + ] +}; + +expect(ws.getCell('A1').text).to.equal('This is a colorful text with in-cell format'); +expect(ws.getCell('A1').type).to.equal(Excel.ValueType.RichText); + +``` + +### 单元格保护[⬆](#目录) + +可以使用保护属性来修改单元级别保护。 + +```javascript +ws.getCell('A1').protection = { + locked: false, + hidden: true, +}; +``` + +**支持的保护属性** + +| 属性 | 默认值 | 描述 | +| -------- | ------- | ----------- | +| locked | `true` | 指定在工作表受保护的情况下是否将单元格锁定。 | +| hidden | `false` | 指定如果工作表受保护,则单元格的公式是否可见。 | + +## 条件格式化[⬆](#目录) + +条件格式化允许工作表根据单元格值或任意公式显示特定的样式,图标等。 + +条件格式设置规则是在工作表级别添加的,通常会覆盖一系列单元格。 + +可以将多个规则应用于给定的单元格范围,并且每个规则都将应用自己的样式。 + +如果多个规则影响给定的单元格,则规则优先级值将确定如果竞争样式冲突,则哪个规则胜出。优先级值较低的规则获胜。如果没有为给定规则指定优先级值,ExcelJS 将按升序分配它们。 + +注意:目前,仅支持条件格式设置规则的子集。具体来说,只有格式规则不需要 <extLst> 元素内的 XML 呈现。这意味着不支持数据集和三个特定的图标集(3Triangles,3Stars,5Boxes)。 + +```javascript +// 根据行和列为偶数或奇数向 A1:E7 添加一个棋盘图案 +worksheet.addConditionalFormatting({ + ref: 'A1:E7', + rules: [ + { + type: 'expression', + formulae: ['MOD(ROW()+COLUMN(),2)=0'], + style: {fill: {type: 'pattern', pattern: 'solid', bgColor: {argb: 'FF00FF00'}}}, + } + ] +}) +``` + +**支持的条件格式设置规则类型** + +| 类型 | 描述 | +| ------------ | ----------- | +| expression | 任何自定义功能均可用于激活规则。 | +| cellIs | 使用指定的运算符将单元格值与提供的公式进行比较 | +| top10 | 将格式化应用于值在顶部(或底部)范围内的单元格 | +| aboveAverage | 将格式化应用于值高于(或低于)平均值的单元格 | +| colorScale | 根据其值在范围内的位置将彩色背景应用于单元格 | +| iconSet | 根据值将一系列图标之一添加到单元格 | +| containsText | 根据单元格是否为特定文本来应用格式 | +| timePeriod | 根据单元格日期时间值是否在指定范围内应用格式 | + +### 表达式[⬆](#目录) + +| 属性 | 可选 | 默认值 | 描述 | +| -------- | -------- | ------- | ----------- | +| type | | | `'expression'` | +| priority | Y | <auto> | 确定样式的优先顺序 | +| formulae | | | 1个包含真/假值的公式字符串数组。要引用单元格值,请使用左上角的单元格地址 | +| style | | | 公式返回 `true` 时要应用的样式结构 | + +### Cell Is[⬆](#目录) + +| 属性 | 可选 | 默认值 | 描述 | +| -------- | -------- | ------- | ----------- | +| type | | | `'cellIs'` | +| priority | Y | <auto> | 确定样式的优先顺序 | +| operator | | | 如何将单元格值与公式结果进行比较 | +| formulae | | | 1个公式字符串数组,返回要与每个单元格进行比较的值 | +| style | | | 如果比较返回 `true`,则应用样式结构 | + +**Cell Is 运算符** + +| 运算 | 描述 | +| ----------- | ----------- | +| equal | 如果单元格值等于公式值,则应用格式 | +| greaterThan | 如果单元格值大于公式值,则应用格式 | +| lessThan | 如果单元格值小于公式值,则应用格式 | +| between | 如果单元格值在两个公式值之间(包括两个值),则应用格式 | + + +### Top 10[⬆](#目录) + +| 属性 | 可选 | 默认值 | 描述 | +| -------- | -------- | ------- | ----------- | +| type | | | `'top10'` | +| priority | Y | <auto> | 确定样式的优先顺序 | +| rank | Y | 10 | 指定格式中包含多少个顶部(或底部)值 | +| percent | Y | `false` | 如果为 true,则等级字段为百分比,而不是绝对值 | +| bottom | Y | `false` | 如果为 true,则包含最低值而不是最高值 | +| style | | | 如果比较返回 true,则应用样式结构 | + +### 高于平均值[⬆](#目录) + +| 属性 | 可选 | 默认值 | 描述 | +| ------------- | -------- | ------- | ----------- | +| type | | | `'aboveAverage'` | +| priority | Y | <auto> | 确定样式的优先顺序 | +| aboveAverage | Y | `false` | 如果为 true,则等级字段为百分比,而不是绝对值 | +| style | | | 如果比较返回 true,则应用样式结构 | + +### 色阶[⬆](#目录) + +| 属性 | 可选 | 默认值 | 描述 | +| ------------- | -------- | ------- | ----------- | +| type | | | `'colorScale'` | +| priority | Y | <auto> | 确定样式的优先顺序 | +| cfvo | | | 2到5个条件格式化值对象的数组,指定值范围内的航路点 | +| color | | | 在给定的航路点使用的相应颜色数组 | +| style | | | 如果比较返回 true,则应用样式结构 | + +### 图标集[⬆](#目录) + +| 属性 | 可选 | 默认值 | 描述 | +| ------------- | -------- | ------- | ----------- | +| type | | | `'iconSet'` | +| priority | Y | <auto> | 确定样式的优先顺序 | +| iconSet | Y | 3TrafficLights | 设置使用的图标名称 | +| showValue | | true | 指定应用范围内的单元格是显示图标和单元格值,还是仅显示图标 | +| reverse | | false | 指定是否以保留顺序显示 `iconSet` 中指定的图标集中的图标。 如果 `custom` 等于 `true`,则必须忽略此值 | +| custom | | false | 指定是否使用自定义图标集 | +| cfvo | | | 2到5个条件格式化值对象的数组,指定值范围内的航路点 | +| style | | | 如果比较返回 true,则应用样式结构 | + +### 数据条[⬆](#目录) + +| 字段 | 可选 | 默认值 | 描述 | +| ---------- | -------- | ------- | ----------- | +| type | | | `'dataBar'` | +| priority | Y | <auto> | 确定样式的优先顺序 | +| minLength | | 0 | 指定此条件格式范围内最短数据条的长度 | +| maxLength | | 100 | 指定此条件格式范围内最长数据条的长度 | +| showValue | | true | 指定条件格式范围内的单元格是否同时显示数据条和数值或数据条 | +| gradient | | true | 指定数据条是否具有渐变填充 | +| border | | true | 指定数据条是否有边框 | +| negativeBarColorSameAsPositive | | true | 指定数据条是否具有与正条颜色不同的负条颜色 | +| negativeBarBorderColorSameAsPositive | | true | 指定数据条的负边框颜色是否不同于正边框颜色 | +| axisPosition | | 'auto' | 指定数据条的轴位置 | +| direction | | 'leftToRight' | 指定数据条的方向 | +| cfvo | | | 2 到 5 个条件格式化值对象的数组,指定值范围内的航路点 | +| style | | | 如果比较返回 true,则应用样式结构 | + +### 包含文字[⬆](#目录) + +| 属性 | 可选 | 默认值 | 描述 | +| -------- | -------- | ------- | ----------- | +| type | | | `'containsText'` | +| priority | Y | <auto> | 确定样式的优先顺序 | +| operator | | | 文本比较类型 | +| text | | | 要搜索的文本 | +| style | | | 如果比较返回 true,则应用样式结构 | + +**包含文本运算符** + +| 运算符 | 描述 | +| ----------------- | ----------- | +| containsText | 如果单元格值包含在 `text` 字段中指定的值,则应用格式 | +| containsBlanks | 如果单元格值包含空格,则应用格式 | +| notContainsBlanks | 如果单元格值不包含空格,则应用格式 | +| containsErrors | 如果单元格值包含错误,则应用格式 | +| notContainsErrors | 如果单元格值不包含错误,则应用格式 | + +### 时间段[⬆](#目录) + +| 属性 | 可选 | 默认值 | 描述 | +| ---------- | -------- | ------- | ----------- | +| type | | | `'timePeriod'` | +| priority | Y | <auto> | 确定样式的优先顺序 | +| timePeriod | | | 比较单元格值的时间段 | +| style | | | 如果比较返回 true,则应用样式结构 | + +**时间段** + +| 时间段 | 描述 | +| ----------------- | ----------- | +| lastWeek | 如果单元格值落在最后一周内,则应用格式 | +| thisWeek | 如果单元格值在本周下降,则应用格式 | +| nextWeek | 如果单元格值在下一周下降,则应用格式 | +| yesterday | 如果单元格值等于昨天,则应用格式 | +| today | 如果单元格值等于今天,则应用格式 | +| tomorrow | 如果单元格值等于明天,则应用格式 | +| last7Days | 如果单元格值在过去7天之内,则应用格式 | +| lastMonth | 如果单元格值属于上个月,则应用格式 | +| thisMonth | 如果单元格值在本月下降,则应用格式 | +| nextMonth | 如果单元格值在下个月下降,则应用格式 | + + +## 大纲级别[⬆](#目录) + +Excel 支持大纲;行或列可以根据用户希望查看的详细程度展开或折叠。 + +大纲级别可以在列设置中定义: +```javascript +worksheet.columns = [ + { header: 'Id', key: 'id', width: 10 }, + { header: 'Name', key: 'name', width: 32 }, + { header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 } +]; +``` + +或直接在行或列上 +```javascript +worksheet.getColumn(3).outlineLevel = 1; +worksheet.getRow(3).outlineLevel = 1; +``` + +工作表大纲级别可以在工作表上设置 +```javascript +// 设置列大纲级别 +worksheet.properties.outlineLevelCol = 1; + +// 设置行大纲级别 +worksheet.properties.outlineLevelRow = 1; +``` + +注意:调整行或列上的大纲级别或工作表上的大纲级别将产生副作用,即还修改受属性更改影响的所有行或列的折叠属性。 例如。: +```javascript +worksheet.properties.outlineLevelCol = 1; + +worksheet.getColumn(3).outlineLevel = 1; +expect(worksheet.getColumn(3).collapsed).to.be.true; + +worksheet.properties.outlineLevelCol = 2; +expect(worksheet.getColumn(3).collapsed).to.be.false; +``` + +大纲属性可以在工作表上设置 + +```javascript +worksheet.properties.outlineProperties = { + summaryBelow: false, + summaryRight: false, +}; +``` + +## 图片[⬆](#目录) + +将图像添加到工作表是一个分为两个步骤的过程。首先,通过 `addImage()` 函数将图像添加到工作簿中,该函数还将返回 `imageId` 值。然后,使用 `imageId`,可以将图像作为平铺背景或覆盖单元格区域添加到工作表中。 + +注意:从此版本开始,不支持调整或变换图像。 + +### 将图片添加到工作簿[⬆](#目录) + +`Workbook.addImage` 函数支持按文件名或按 `Buffer` 添加图像。请注意,在两种情况下,都必须指定扩展名。有效的扩展名包括 “jpeg”,“png”,“gif”。 + +```javascript +// 通过文件名将图像添加到工作簿 +const imageId1 = workbook.addImage({ + filename: 'path/to/image.jpg', + extension: 'jpeg', +}); + +// 通过 buffer 将图像添加到工作簿 +const imageId2 = workbook.addImage({ + buffer: fs.readFileSync('path/to.image.png'), + extension: 'png', +}); + +// 通过 base64 将图像添加到工作簿 +const myBase64Image = "data:image/png;base64,iVBORw0KG..."; +const imageId2 = workbook.addImage({ + base64: myBase64Image, + extension: 'png', +}); +``` + +### 将图片添加到工作表背景[⬆](#目录) + +使用 `Workbook.addImage` 中的图像 `ID`,可以使用 `addBackgroundImage` 函数设置工作表的背景 + +```javascript +// 设置背景 +worksheet.addBackgroundImage(imageId1); +``` + +### 在一定范围内添加图片[⬆](#目录) + +使用 `Workbook.addImage` 中的图像 `ID`,可以将图像嵌入工作表中以覆盖一定范围。从该范围计算出的坐标将覆盖从第一个单元格的左上角到第二个单元格的右下角。 + +```javascript +// 在 B2:D6 上插入图片 +worksheet.addImage(imageId2, 'B2:D6'); +``` + +使用结构而不是范围字符串,可以部分覆盖单元格。 + +请注意,为此使用的坐标系基于零,因此 A1 的左上角将为 `{col:0,row:0}`。单元格的分数可以通过使用浮点数来指定,例如 A1 的中点是 `{col:0.5,row:0.5}`。 + +```javascript +// 在 B2:D6 的一部分上插入图像 +worksheet.addImage(imageId2, { + tl: { col: 1.5, row: 1.5 }, + br: { col: 3.5, row: 5.5 } +}); +``` + +单元格区域还可以具有属性 `"editAs"`,该属性将控制将图像锚定到单元格的方式。它可以具有以下值之一: + +| 值 | 描述 | +| --------- | ----------- | +| `undefined` | 它指定使图像将根据单元格移动和调整其大小 | +| `oneCell` | 这是默认值。图像将与单元格一起移动,但大小不变动 | +| `absolute` | 图像将不会随着单元格移动或调整大小 | + +```javascript +ws.addImage(imageId, { + tl: { col: 0.1125, row: 0.4 }, + br: { col: 2.101046875, row: 3.4 }, + editAs: 'oneCell' +}); +``` + +### 将图片添加到单元格[⬆](#目录) + +您可以将图像添加到单元格,然后以 96dpi 定义其宽度和高度(以像素为单位)。 + +```javascript +worksheet.addImage(imageId2, { + tl: { col: 0, row: 0 }, + ext: { width: 500, height: 200 } +}); +``` + +### 添加带有超链接的图片[⬆](#目录) + +您可以将带有超链接的图像添加到单元格,并在图像范围内定义超链接。 + +```javascript +worksheet.addImage(imageId2, { + tl: { col: 0, row: 0 }, + ext: { width: 500, height: 200 }, + hyperlinks: { + hyperlink: 'http://www.somewhere.com', + tooltip: 'http://www.somewhere.com' + } +}); +``` + +## 工作表保护[⬆](#目录) + +可以通过添加密码来保护工作表免受修改。 + +```javascript +await worksheet.protect('the-password', options); +``` + +工作表保护也可以删除: + +```javascript +worksheet.unprotect(); +``` + + +有关如何修改单个单元格保护的详细信息请查看 单元格保护。 + +**注意:** 当 `protect()` 函数返回一个 Promise 代表它是异步的,当前的实现在主线程上运行,并且在 CPU 上将使用平均大约 600 毫秒。可以通过设置 `spinCount` 进行调整,该值可用于使过程更快或更有弹性。 + +### 工作表保护选项[⬆](#目录) + +| 属性 | 默认值 | 描述 | +| ------------------- | ------- | ----------- | +| selectLockedCells | `true` | 允许用户选择锁定的单元格 | +| selectUnlockedCells | `true` | 允许用户选择未锁定的单元格 | +| formatCells | `false` | 允许用户格式化单元格 | +| formatColumns | `false` | 允许用户格式化列 | +| formatRows | `false` | 允许用户格式化行 | +| insertRows | `false` | 允许用户插入行 | +| insertColumns | `false` | 允许用户插入列 | +| insertHyperlinks | `false` | 允许用户插入超链接 | +| deleteRows | `false` | 允许用户删除行 | +| deleteColumns | `false` | 允许用户删除列 | +| sort | `false` | 允许用户对数据进行排序 | +| autoFilter | `false` | 允许用户过滤表中的数据 | +| pivotTables | `false` | 允许用户使用数据透视表 | +| spinCount | 100000 | 保护或取消保护时执行的哈希迭代次数 | + + +## 文件 I/O[⬆](#目录) + +### XLSX[⬆](#目录) + +#### 读 XLSX[⬆](#目录) + +```javascript +// 从文件读取 +const workbook = new Excel.Workbook(); +await workbook.xlsx.readFile(filename); +// ... 使用 workbook + + +// 从流读取 +const workbook = new Excel.Workbook(); +await workbook.xlsx.read(stream); +// ... 使用 workbook + + +// 从 buffer 加载 +const workbook = new Excel.Workbook(); +await workbook.xlsx.load(data); +// ... 使用 workbook +``` + +#### 写 XLSX + +```javascript +// 写入文件 +const workbook = createAndFillWorkbook(); +await workbook.xlsx.writeFile(filename); + +// 写入流 +await workbook.xlsx.write(stream); + +// 写入 buffer +const buffer = await workbook.xlsx.writeBuffer(); +``` + +### CSV[⬆](#目录) + +#### 读 CSV[⬆](#目录) + +读取 CSV 文件时支持的选项。 + +| 属性 | 是否需要 | 类型 | 描述 | +| ---------------- | ----------- | ----------- | ----------- | +| dateFormats | N | Array | 指定 dayjs 的日期编码格式。 | +| map | N | Function | 自定义`Array.prototype.map()` 回调函数,用于处理数据。 | +| sheetName | N | String | 指定工作表名称。 | +| parserOptions | N | Object | [parseOptions 选项](https://c2fo.github.io/fast-csv/docs/parsing/options) @fast-csv/format 模块以写入 csv 数据。 | + +```javascript +// 从文件读取 +const workbook = new Excel.Workbook(); +const worksheet = await workbook.csv.readFile(filename); +// ... 使用 workbook 或 worksheet + + +// 从流中读取 +const workbook = new Excel.Workbook(); +const worksheet = await workbook.csv.read(stream); +// ... 使用 workbook 或 worksheet + + +// 从带有欧洲日期的文件中读取 +const workbook = new Excel.Workbook(); +const options = { + dateFormats: ['DD/MM/YYYY'] +}; +const worksheet = await workbook.csv.readFile(filename, options); +// ... 使用 workbook 或 worksheet + + +// 从具有自定义值解析的文件中读取 +const workbook = new Excel.Workbook(); +const options = { + map(value, index) { + switch(index) { + case 0: + // 第1列是字符串 + return value; + case 1: + // 第2列是日期 + return new Date(value); + case 2: + // 第3列是公式值的JSON + return JSON.parse(value); + default: + // 其余的是数字 + return parseFloat(value); + } + }, + // https://c2fo.github.io/fast-csv/docs/parsing/options + parserOptions: { + delimiter: '\t', + quote: false, + }, +}; +const worksheet = await workbook.csv.readFile(filename, options); +// ... 使用 workbook 或 worksheet +``` + +CSV 解析器使用 [fast-csv](https://www.npmjs.com/package/fast-csv) 读取CSV文件。传递给上述写入函数的选项中的 `formatterOptions` 将传递给 @fast-csv/format 模块以写入 csv 数据。 有关详细信息,请参阅 fast-csv README.md。 + +使用 npm 模块 [dayjs](https://www.npmjs.com/package/dayjs) 解析日期。如果未提供 `dateFormats` 数组,则使用以下 dateFormats: + +* 'YYYY-MM-DD\[T\]HH:mm:ss' +* 'MM-DD-YYYY' +* 'YYYY-MM-DD' + +请参阅 [dayjs CustomParseFormat 插件](https://github.com/iamkun/dayjs/blob/HEAD/docs/en/Plugin.md#customparseformat),以获取有关如何构造 `dateFormat` 的详细信息。 + +#### 写 CSV[⬆](#目录) + +写入 CSV 文件时支持的选项。 + +| 属性 | 是否需要 | 类型 | 描述 | +| ---------------- | ----------- | ----------- | ----------- | +| dateFormat | N | String | 指定 dayjs 的日期编码格式。 | +| dateUTC | N | Boolean | 指定 ExcelJS 是否使用`dayjs.utc()`转换时区以解析日期。 | +| encoding | N | String | 指定文件编码格式。 | +| includeEmptyRows | N | Boolean | 指定是否可以写入空行。 | +| map | N | Function | 自定义`Array.prototype.map()` 回调函数,用于处理行值。 | +| sheetName | N | String | 指定工作表名称。 | +| sheetId | N | Number | 指定工作表 ID。 | +| formatterOptions | N | Object | [formatterOptions 选项](https://c2fo.github.io/fast-csv/docs/formatting/options/) @fast-csv/format 模块写入csv 数据。 | + +```javascript + +// 写入文件 +const workbook = createAndFillWorkbook(); +await workbook.csv.writeFile(filename); + +// 写入流 +// 请注意,您需要提供 sheetName 或 sheetId 以正确导入到 csv +await workbook.csv.write(stream, { sheetName: 'Page name' }); + +// 使用欧洲日期时间写入文件 +const workbook = new Excel.Workbook(); +const options = { + dateFormat: 'DD/MM/YYYY HH:mm:ss', + dateUTC: true, // 呈现日期时使用 utc +}; +await workbook.csv.writeFile(filename, options); + + +// 使用自定义值格式写入文件 +const workbook = new Excel.Workbook(); +const options = { + map(value, index) { + switch(index) { + case 0: + // 第1列是字符串 + return value; + case 1: + // 第2列是日期 + return dayjs(value).format('YYYY-MM-DD'); + case 2: + // 第3列是一个公式,只写结果 + return value.result; + default: + // 其余的是数字 + return value; + } + }, + // https://c2fo.github.io/fast-csv/docs/formatting/options + formatterOptions: { + delimiter: '\t', + quote: false, + }, +}; +await workbook.csv.writeFile(filename, options); + +// 写入新 buffer +const buffer = await workbook.csv.writeBuffer(); +``` + +CSV 解析器使用 [fast-csv](https://www.npmjs.com/package/fast-csv) 编写 CSV 文件。传递给上述写入函数的选项中的 `formatterOptions` 将传递给 @fast-csv/format 模块以写入 csv 数据。有关详细信息,请参阅 fast-csv README.md。 + +日期使用 npm 模块 [dayjs](https://www.npmjs.com/package/dayjs) 格式化。如果未提供 `dateFormat`,则使用 `dayjs.ISO_8601`。编写 CSV 时,您可以提供布尔值 `dateUTC` 为 `true`,以使 ExcelJS 解析日期,而无需使用 `dayjs.utc()` 自动转换时区。 + +### 流式 I/O[⬆](#目录) + +上面记录的文件 I/O 需要在内存中建立整个工作簿,然后才能写入文件。虽然方便,但是由于所需的内存量,它可能会限制文档的大小。 + +流写入器(或读取器)在生成工作簿或工作表数据时对其进行处理,然后将其转换为文件形式。通常,这在内存上效率要高得多,因为最终的内存占用量,甚至中间的内存占用量都比文档版本要紧凑得多,尤其是当您考虑到行和单元格对象一旦提交就被销毁时,尤其如此。 + +流式工作簿和工作表的接口几乎与文档版本相同,但实际存在一些细微差别: + +* 将工作表添加到工作簿后,将无法将其删除。 +* 提交行后,将无法再访问该行,因为该行将从工作表中删除。 +* 不支持 `unMergeCells()`。 + +请注意,可以在不提交任何行的情况下构建整个工作簿。提交工作簿后,所有添加的工作表(包括所有未提交的行)将自动提交。但是,在这种情况下,与文档版本相比收效甚微。 + +#### 流式 XLSX[⬆](#目录) + +##### 流式 XLSX 写入器[⬆](#目录) + +流式 XLSX 写入器在 `ExcelJS.stream.xlsx` 命名空间中可用。 + +构造函数采用带有以下字段的可选 `options` 对象: + +| 字段 | 描述 | +| ---------------- | ----------- | +| stream | 指定要写入 XLSX 工作簿的可写流。 | +| filename | 如果未指定流,则此字段指定要写入 XLSX 工作簿的文件的路径。 | +| useSharedStrings | 指定是否在工作簿中使用共享字符串。默认为 `false` | +| useStyles | 指定是否将样式信息添加到工作簿。样式会增加一些性能开销。默认为 `false` | +| zip | ExcelJS 内部传递给 [Archiver](https://github.com/archiverjs/node-archiver) 的 [Zip选项](https://www.archiverjs.com/global.html#ZipOptions)。默认值为 `undefined` | + +如果在选项中未指定 `stream` 或 `filename`,则工作簿编写器将创建一个 StreamBuf 对象,该对象将 XLSX 工作簿的内容存储在内存中。可以通过属性 `workbook.stream` 访问此 StreamBuf 对象,该对象可用于通过 `stream.read()` 直接访问字节,或将内容通过管道传输到另一个流。 + +```javascript +// 使用样式和共享字符串构造流式 XLSX 工作簿编写器 +const options = { + filename: './streamed-workbook.xlsx', + useStyles: true, + useSharedStrings: true +}; +const workbook = new Excel.stream.xlsx.WorkbookWriter(options); +``` + +通常,流式 XLSX 写入器的接口与上述文档工作簿(和工作表)相同,实际上行,单元格和样式对象是相同的。 + +但是有一些区别... + +**构造** + +如上所示,WorkbookWriter 通常将要求在构造函数中指定输出流或文件。 + +**提交数据** + +当工作表行准备就绪时,应将其提交,以便可以释放行对象和内容。通常,这将在添加每一行时完成... + +```javascript +worksheet.addRow({ + id: i, + name: theName, + etc: someOtherDetail +}).commit(); +``` + +WorksheetWriter 在添加行时不提交行的原因是允许单元格跨行合并: +```javascript +worksheet.mergeCells('A1:B2'); +worksheet.getCell('A1').value = 'I am merged'; +worksheet.getCell('C1').value = 'I am not'; +worksheet.getCell('C2').value = 'Neither am I'; +worksheet.getRow(2).commit(); // now rows 1 and two are committed. +``` + +每个工作表完成后,还必须提交: + +```javascript +// 完成添加数据。 提交工作表 +worksheet.commit(); +``` + +要完成 XLSX 文档,必须提交工作簿。 如果未提交工作簿中的任何工作表,则将在工作簿提交中自动提交它们。 + +```javascript +// 完成 workbook. +await workbook.commit(); +// ... 流已被写入 +``` + +##### 流式 XLSX 阅读器[⬆](#目录) + +流式 XLSX 工作簿阅读器可以在ExcelJS.stream.xlsx命名空间中找到。 + +构造函数包含必需的输入参数和可选的options参数: + +| Argument | Description | +| --------------------- | ----------- | +| input (必需的) | 指定从中读取XLSX工作簿的文件或可读流的名称| +| options (可选的) | 指定如何处理读取解析期间发生的事件类型 | +| options.entries | 指定是否去触发事件(`'emit'`)或者不发出事件(`'ignore'`),默认值是`'emit'` | +| options.sharedStrings | 指定是否去缓存(`'cache'`)共享字符串,将其插入到相应的单元格值中,或者是否去触发(`'emit'`)或忽略(`'ignore'`)它们,在这两种情况下,单元格值都将是对共享字符串索引的引用。默认值是`'cache'` | +| options.hyperlinks | 指定是否去缓存超链接(`'cache'`),将其插入到相应的单元格值中,是否去触发(`'emit'`)或忽略(`'ignore'`)它们。默认值是`'cache'` | +| options.styles | 指定是否去缓存样式(`'cache'`),将其插入到相应的行或单元格值中,或是否忽略(`'忽略'`)它们。默认值是`'cache'` | +| options.worksheets |指定是否去触发(`'emit'`)或忽略(`'ignore'`)工作表。默认值是`'emit'` | + +```js +const workbook = new ExcelJS.stream.xlsx.WorkbookReader('./file.xlsx'); +for await (const worksheetReader of workbookReader) { + for await (const row of worksheetReader) { + // ... + } +} +``` + +请注意,由于性能原因,`worksheetReader`返回一个行数组,而不是单独返回每一行: https://github.com/nodejs/node/issues/31979 + +###### 迭代遍历所有事件[⬆](#目录) + +工作簿上的事件是 'worksheet'、'shared-strings' 和 'hyperlinks'。 工作表上的事件是 'row' 和 'hyperlinks'. + +```js +const options = { + sharedStrings: 'emit', + hyperlinks: 'emit', + worksheets: 'emit', +}; +const workbook = new ExcelJS.stream.xlsx.WorkbookReader('./file.xlsx', options); +for await (const {eventType, value} of workbook.parse()) { + switch (eventType) { + case 'shared-strings': + // 值是共享字符串 + case 'worksheet': + // 值是worksheetReader + case 'hyperlinks': + // 值是hyperlinksReader + } +} +``` + +###### 可读流[⬆](#目录) + +我们强烈建议使用异步迭代,但我们也公开了流接口以实现向后兼容性。 + +```js +const options = { + sharedStrings: 'emit', + hyperlinks: 'emit', + worksheets: 'emit', +}; +const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader('./file.xlsx', options); +workbookReader.read(); + +workbookReader.on('worksheet', worksheet => { + worksheet.on('row', row => { + }); +}); + +workbookReader.on('shared-strings', sharedString => { + // ... +}); + +workbookReader.on('hyperlinks', hyperlinksReader => { + // ... +}); + +workbookReader.on('end', () => { + // ... +}); +workbookReader.on('error', (err) => { + // ... +}); +``` + +# 浏览器[⬆](#目录) + +该库的一部分已被隔离,并经过测试可在浏览器环境中使用。 + +由于工作簿读写器的流式传输性质,因此未包括这些内容。只能使用基于文档的工作簿(有关详细信息,请参见 创建工作簿)。 + +例如,在浏览器中使用 ExcelJS 的代码可查看 github 中的 spec / browser 文件夹。 + +## 预捆绑[⬆](#目录) + +以下文件已预先捆绑在一起,并包含在 *dist* 文件夹中。 + +* exceljs.js +* exceljs.min.js + +# 值类型[⬆](#目录) + +支持以下值类型。 + +## Null 值[⬆](#目录) + +Enum: `Excel.ValueType.Null` + +空值表示没有值,通常在写入文件时将不存储(合并的单元格除外)。可用于从单元格中删除该值。例如: + +```javascript +worksheet.getCell('A1').value = null; +``` + +## 合并单元格[⬆](#目录) + +Enum: `Excel.ValueType.Merge` + +合并单元格是其值绑定到另一个“主”单元格的单元格。分配给合并单元将导致修改单元格。 + +## 数字值[⬆](#目录) + +Enum: `Excel.ValueType.Number` + +一个数字值。 + +例如: + +```javascript +worksheet.getCell('A1').value = 5; +worksheet.getCell('A2').value = 3.14159; +``` + +## 字符串值[⬆](#目录) + +Enum: `Excel.ValueType.String` + +一个简单的文本字符串。 + +例如: + +```javascript +worksheet.getCell('A1').value = 'Hello, World!'; +``` + +## 日期值[⬆](#目录) + +Enum: `Excel.ValueType.Date` + +日期值,由 JavaScript Date 类型表示。 + +例如: + +```javascript +worksheet.getCell('A1').value = new Date(2017, 2, 15); +``` + +## 超链接值[⬆](#目录) + +Enum: `Excel.ValueType.Hyperlink` + +具有文本和链接值的 URL。 + +例如: +```javascript +// 链接到网络 +worksheet.getCell('A1').value = { + text: 'www.mylink.com', + hyperlink: 'http://www.mylink.com', + tooltip: 'www.mylink.com' +}; + +// 内部链接 +worksheet.getCell('A1').value = { text: 'Sheet2', hyperlink: '#\'Sheet2\'!A1' }; +``` + +## 公式值[⬆](#目录) + +Enum: `Excel.ValueType.Formula` + +一个 Excel 公式,用于即时计算值。请注意,虽然单元格类型将为“公式”,但该单元格可能具有一个有效类型值,该值将从结果值中得出。 + +请注意,ExcelJS 无法处理公式以生成结果,必须提供该公式。 + +例如: + +```javascript +worksheet.getCell('A3').value = { formula: 'A1+A2', result: 7 }; +``` + +单元格还支持便捷的获取器,以访问公式和结果: + +```javascript +worksheet.getCell('A3').formula === 'A1+A2'; +worksheet.getCell('A3').result === 7; +``` + +### 共享公式[⬆](#目录) + +共享的公式通过减少工作表 xml 中文本的重复来增强 xlsx 文档的压缩。范围中左上角的单元格是指定的母版,它将保留该范围内的所有其他单元格都将引用的公式。然后,其他“从属”单元格可以引用此主单元格,而不必再次重新定义整个公式。请注意,主公式将以常用的 Excel 方式转换为从属单元格,以便对其他单元格的引用将根据从属单元相对于主单元的偏移量向右下移。例如:如果主单元格A2具有引用A1的公式,则如果单元格B2共享A2的公式,则它将引用B1。 + +可以将主公式与该范围内的从属单元格一起分配给该单元格 + +```javascript +worksheet.getCell('A2').value = { + formula: 'A1', + result: 10, + shareType: 'shared', + ref: 'A2:B3' +}; +``` + +可以使用新的值形式将共享公式分配给单元格: + +```javascript +worksheet.getCell('B2').value = { sharedFormula: 'A2', result: 10 }; +``` + +这指定单元格B2是将从A2中的公式派生的公式,其结果为10。 + +公式便捷获取器会将A2中的公式转换为B2中应具有的公式: + +```javascript +expect(worksheet.getCell('B2').formula).to.equal('B1'); +``` + +可以使用 `fillFormula` 方法将共享的公式分配到工作表中: + +```javascript +// 将 A1 设置为起始编号 +worksheet.getCell('A1').value = 1; + +// 从 A1 开始以递增计数将 A2 填充到 A10 +worksheet.fillFormula('A2:A10', 'A1+1', [2,3,4,5,6,7,8,9,10]); +``` + +`fillFormula` 也可以使用回调函数来计算每个单元格的值 + +```javascript +// 从A1开始以递增计数将 A2 填充到 A100 +worksheet.fillFormula('A2:A100', 'A1+1', (row, col) => row); +``` + +### 公式类型[⬆](#目录) + +要区分真正的和转换后的公式单元格,请使用 FormulaType getter: + +```javascript +worksheet.getCell('A3').formulaType === Enums.FormulaType.Master; +worksheet.getCell('B3').formulaType === Enums.FormulaType.Shared; +``` + +公式类型具有以下值: + +| 名称 | 值 | +| -------------------------- | ------- | +| Enums.FormulaType.None | 0 | +| Enums.FormulaType.Master | 1 | +| Enums.FormulaType.Shared | 2 | + +### 数组公式[⬆](#目录) + +在 Excel 中表示共享公式的一种新方法是数组公式。以这种形式,主单元格是唯一包含与公式有关的任何信息的单元格。它包含 shareType 'array' 以及适用于其的单元格范围以及将要复制的公式。其余单元格是具有常规值的常规单元格。 + +注意:数组公式不会以共享公式的方式转换。因此,如果主单元A2引用A1,则从单元B2也将引用A1。 + +例如: +```javascript +// 将数组公式分配给 A2:B3 +worksheet.getCell('A2').value = { + formula: 'A1', + result: 10, + shareType: 'array', + ref: 'A2:B3' +}; + +// 可能没有必要填写工作表中的其余值 +``` + +`fillFormula` 方法也可以用于填充数组公式 + +```javascript +// 用数组公式 "A1" 填充 A2:B3 +worksheet.fillFormula('A2:B3', 'A1', [1,1,1,1], 'array'); +``` + + +## 富文本值[⬆](#目录) + +Enum: `Excel.ValueType.RichText` + +样式丰富的文本。 + +例如: +```javascript +worksheet.getCell('A1').value = { + richText: [ + { text: 'This is '}, + {font: {italic: true}, text: 'italic'}, + ] +}; +``` + +## 布尔值[⬆](#目录) + +Enum: `Excel.ValueType.Boolean` + +例如: + +```javascript +worksheet.getCell('A1').value = true; +worksheet.getCell('A2').value = false; +``` + +## 错误值[⬆](#目录) + +Enum: `Excel.ValueType.Error` + +例如: + +```javascript +worksheet.getCell('A1').value = { error: '#N/A' }; +worksheet.getCell('A2').value = { error: '#VALUE!' }; +``` + +当前有效的错误文本值为: + +| 名称 | 值 | +| ------------------------------ | ----------- | +| Excel.ErrorValue.NotApplicable | #N/A | +| Excel.ErrorValue.Ref | #REF! | +| Excel.ErrorValue.Name | #NAME? | +| Excel.ErrorValue.DivZero | #DIV/0! | +| Excel.ErrorValue.Null | #NULL! | +| Excel.ErrorValue.Value | #VALUE! | +| Excel.ErrorValue.Num | #NUM! | + +# 接口变化[⬆](#目录) + +我们会尽一切努力创建一个良好的,一致的接口,该接口不会在版本之间不兼容,但令人遗憾的是,为了实现更大的利益,有时需要进行一些更改。 + +## 0.1.0[⬆](#目录) + +### Worksheet.eachRow[⬆](#目录) + +在 `Worksheet.eachRow` 的回调函数中的参数已被交换和更改;它是 `function(rowNumber,rowValues)`,现在是 `function(row,rowNumber)`,使它的外观更像 *underscore(`_.each`)方法,并且行对象优先于行号。* + +### Worksheet.getRow[⬆](#目录) + +此函数已从返回稀疏的单元格数组更改为返回 `Row` 对象。这样可以访问行属性,并有助于管理行样式等。 + +仍可通过 `Worksheet.getRow(rowNumber).values;` 获得稀疏的单元格值的数组。 + +## 0.1.1[⬆](#目录) + +### cell.model[⬆](#目录) + +`cell.styles` 重命名为 `cell.style` + +## 0.2.44[⬆](#目录) + +从 Bluebird 切换到 Node 原生 Promise 的函数返回的 Promise 如果依赖 Bluebird 的额外功能,则可能会破坏调用代码。 + +为了减少这种情况的出现,在0.3.0中添加了以下两个更改: + +* 默认情况下使用功能更全且仍与浏览器兼容的 promise lib。 该库支持 Bluebird 的许多功能,但占用空间少得多。 +* 注入其他 Promise 实现的选项。有关更多详细信息,请参见配置部分。 + + + +# 配置[⬆](#目录) + +ExcelJS现在支持对 Promise 库的依赖项注入。您可以通过在模块中包含以下代码来还原 Bluebird Promise。 + +```javascript +ExcelJS.config.setValue('promise', require('bluebird')); +``` + +请注意:我已经使用 bluebird 专门测试了 ExcelJS(直到最近,这是它使用的库)。根据我所做的测试,它不适用于 Q。 + +# 注意事项[⬆](#目录) + +## Dist 文件夹[⬆](#目录) + +在发布此模块之前,先对源代码进行编译和其他处理,然后再将它们放置在 *dist/* 文件夹中。该自述文件标识两个文件-浏览器捆绑和压缩版本。除了在 package.json 中指定为 `"main"` 的文件外,不能保证 *dist/* 文件夹的其他内容。 + + +# 已知的问题[⬆](#目录) + +## 使用 Puppeteer 进行测试[⬆](#目录) + +该 lib 中包含的测试套件包括一个在无头浏览器中执行的小脚本,以验证捆绑的软件包。 在撰写本文时,其表现出该测试在 Windows Linux 子系统中不能很好地进行。 + +因此,可以通过存在名为 *.disable-test-browser* 的文件来禁用浏览器测试。 + +```bash +sudo apt-get install libfontconfig +``` + +## 拼接与合并[⬆](#目录) + +如果任何 `splice` 操作影响合并的单元格,则合并组将无法正确移动 + +# 发布历史[⬆](#目录) + +| Version | Changes | +|---------| ------- | +| 0.0.9 | | +| 0.1.0 | | +| 0.1.1 |
  • Bug Fixes
    • More textual data written properly to xml (including text, hyperlinks, formula results and format codes)
    • Better date format code recognition
  • Cell Font Style
| +| 0.1.2 |
  • Fixed potential race condition on zip write
| +| 0.1.3 | | +| 0.1.5 |
  • Bug Fixes
    • Now handles 10 or more worksheets in one workbook
    • theme1.xml file properly added and referenced
  • Cell Borders
| +| 0.1.6 |
  • Bug Fixes
    • More compatible theme1.xml included in XLSX file
  • Cell Fills
| +| 0.1.8 |
  • Bug Fixes
    • More compatible theme1.xml included in XLSX file
    • Fixed filename case issue
  • Cell Fills
| +| 0.1.9 |
  • Bug Fixes
    • Added docProps files to satisfy Mac Excel users
    • Fixed filename case issue
    • Fixed worksheet id issue
  • Core Workbook Properties
| +| 0.1.10 |
  • Bug Fixes
    • Handles File Not Found error
  • CSV Files
| +| 0.1.11 | | +| 0.2.0 |
  • Streaming XLSX Writer
    • At long last ExcelJS can support writing massive XLSX files in a scalable memory efficient manner. Performance has been optimised and even smaller spreadsheets can be faster to write than the document writer. Options have been added to control the use of shared strings and styles as these can both have a considerable effect on performance
  • Worksheet.lastRow
    • Access the last editable row in a worksheet.
  • Row.commit()
    • For streaming writers, this method commits the row (and any previous rows) to the stream. Committed rows will no longer be editable (and are typically deleted from the worksheet object). For Document type workbooks, this method has no effect.
| +| 0.2.2 |
  • One Billion Cells
    • Achievement Unlocked: A simple test using ExcelJS has created a spreadsheet with 1,000,000,000 cells. Made using random data with 100,000,000 rows of 10 cells per row. I cannot validate the file yet as Excel will not open it and I have yet to implement the streaming reader but I have every confidence that it is good since 1,000,000 rows loads ok.
| +| 0.2.3 |
  • Bug Fixes
  • Streaming XLSX Writer
    • At long last ExcelJS can support writing massive XLSX files in a scalable memory efficient manner. Performance has been optimised and even smaller spreadsheets can be faster to write than the document writer. Options have been added to control the use of shared strings and styles as these can both have a considerable effect on performance
  • Worksheet.lastRow
    • Access the last editable row in a worksheet.
  • Row.commit()
    • For streaming writers, this method commits the row (and any previous rows) to the stream. Committed rows will no longer be editable (and are typically deleted from the worksheet object). For Document type workbooks, this method has no effect.
| +| 0.2.4 | | +| 0.2.6 | | +| 0.2.7 |
  • Data Validations
    • Cells can now define validations that controls the valid values the cell can have
| +| 0.2.8 | | +| 0.2.9 |
  • Fixed "read property 'richText' of undefined error. Thanks to james075
| +| 0.2.10 |
  • Refactoring Complete. All unit and integration tests pass.
| +| 0.2.11 | | +| 0.2.12 | | +| 0.2.13 | | +| 0.2.14 | | +| 0.2.15 | | +| 0.2.16 | | +| 0.2.17 | | +| 0.2.18 | | +| 0.2.19 | | +| 0.2.20 | | +| 0.2.21 | | +| 0.2.22 | | +| 0.2.23 |
  • Merged Fall back to JSON.stringify() if unknown Cell.Type #137 with some modification. If a cell value is assigned to an unrecognisable javascript object, the stored value in xlsx and csv files will be JSON stringified. Note that if the file is read again, no attempt will be made to parse the stringified JSON text. Thanks to wulfsolter for the contribution.
| +| 0.2.24 |
  • Merged Protect cell fix #166. This does not mean full support for protected cells merely that the parser is not confused by the extra xml. Thanks to jayflo for the contribution.
| +| 0.2.25 |
  • Added functions to delete cells, rows and columns from a worksheet. Modelled after the Array splice method, the functions allow cells, rows and columns to be deleted (and optionally inserted). See Columns and Rows for details.
    Note: Not compatible with cell merges
| +| 0.2.26 | | +| 0.2.27 | | +| 0.2.28 | | +| 0.2.29 | | +| 0.2.30 |
  • Merged Fix issue #178 #201. Adds the following properties to workbook:
    • title
    • subject
    • keywords
    • category
    • description
    • company
    • manager
    Thanks to stavenko for the contribution.
| +| 0.2.31 | | +| 0.2.32 | | +| 0.2.33 | | +| 0.2.34 | | +| 0.2.35 | | +| 0.2.36 | | +| 0.2.37 | | +| 0.2.38 | | +| 0.2.39 | | +| 0.2.42 |
  • Browser Compatible!
    • Well mostly. I have added a browser sub-folder that contains a browserified bundle and an index.js that can be used to generate another. See Browser section for details.
  • Fixed corrupted theme.xml. Apologies for letting that through.
  • Merged [BUGFIX] data validation formulae undefined #253. Thanks to jayflo for the contribution.
| +| 0.2.43 | | +| 0.2.44 |
  • Reduced Dependencies.
    • Goodbye lodash, goodbye bluebird. Minified bundle is now just over half what it was in the first version.
| +| 0.2.45 | | +| 0.2.46 | | +| 0.3.0 | | +| 0.3.1 | | +| 0.4.0 | | +| 0.4.1 | | +| 0.4.2 |
  • Addressed the following issues:

    These issues are potentially caused by a bug that caused colours with zero themes, tints or indexes to be rendered and parsed incorrectly.

    Regarding themes: the theme files stored inside the xlsx container hold important information regarding colours, styles etc and if the theme information from a loaded xlsx file is lost, the results can be unpredictable and undesirable. To address this, when an ExcelJS Workbook parses an XLSX file, it will preserve any theme files it finds and include them when writing to a new XLSX. If this behaviour is not desired, the Workbook class exposes a clearThemes() function which will drop the theme content. Note that this behaviour is only implemented in the document based Workbook class, not the streamed Reader and Writer.

| +| 0.4.3 | | +| 0.4.4 | | +| 0.4.6 | | +| 0.4.9 |
  • Switching to transpiled code for distribution. This will ensure compatability with 4.0.0 and above from here on. And it will also allow use of much more expressive JS code in the lib folder!
  • Basic Image Support!Images can now be added to worksheets either as a tiled background or stretched over a range. Note: other features like rotation, etc. are not supported yet and will reqeuire further work.
| +| 0.4.10 | | +| 0.4.11 | | +| 0.4.12 | | +| 0.4.13 | | +| 0.4.14 | | +| 0.5.0 | | +| 0.5.1 | +| 0.6.0 | | +| 0.6.1 | | +| 0.6.2 | | +| 0.7.0 | | +| 0.7.1 | +| 0.8.0 | | +| 0.8.1 | | +| 0.8.2 | | +| 0.8.3 | | +| 0.8.4 | | +| 0.8.5 | | +| 0.9.0 | | +| 0.9.1 | | +| 1.0.0 | | +| 1.0.1 | | +| 1.0.2 | | +| 1.1.0 | | +| 1.1.1 | | +| 1.1.2 | | +| 1.1.3 | | +| 1.2.0 | | +| 1.2.1 | | +| 1.3.0 | | +| 1.4.2 | | +| 1.4.3 | | +| 1.4.5 | | +| 1.4.6 | | +| 1.4.7 | | +| 1.4.8 | | +| 1.4.9 | | +| 1.4.10 | | +| 1.4.12 | | +| 1.4.13 | | +| 1.5.0 | | +| 1.5.1 | | +| 1.6.0 | | +| 1.6.1 | | +| 1.6.2 | | +| 1.6.3 | | +| 1.7.0 | | +| 1.8.0 | | +| 1.9.0 | | +| 1.9.1 | | +| 1.10.0 | | +| 1.11.0 | | +| 1.12.0 | | +| 1.12.1 | | +| 1.12.2 | | +| 1.13.0 | | +| 1.14.0 | | +| 1.15.0 | | +| 2.0.1 |

Major Version Change

Introducing async/await to ExcelJS!

The new async and await features of JavaScript can help a lot to make code more readable and maintainable. To avoid confusion, particularly with returned promises from async functions, we have had to remove the Promise class configuration option and from v2 onwards ExcelJS will use native Promises. Since this is potentially a breaking change we're bumping the major version for this release.

Changes

| +| 3.0.0 |

Another Major Version Change

Javascript has changed a lot over the years, and so have the modules and technologies surrounding it. To this end, this major version of ExcelJS changes the structure of the publish artefacts:

Main Export is now the Original Javascript Source

Prior to this release, the transpiled ES5 code was exported as the package main. From now on, the package main comes directly from the lib/ folder. This means a number of dependencies have been removed, including the polyfills.

ES5 and Browserify are Still Included

In order to support those that still require ES5 ready code (e.g. as dependencies in web apps) the source code will still be transpiled and available in dist/es5.

The ES5 code is also browserified and available as dist/exceljs.js or dist/exceljs.min.js

See the section Importing for details

| +| 3.1.0 | | +| 3.2.0 | | +| 3.3.0 | | +| 3.3.1 | | +| 3.4.0 | | +| 3.5.0 |
  • Conditional Formatting A subset of Excel Conditional formatting has been implemented! Specifically the formatting rules that do not require XML to be rendered inside an <extLst> node, or in other words everything except databar and three icon sets (3Triangles, 3Stars, 5Boxes). These will be implemented in due course
  • Merged remove core-js/ import #1030. Many thanks to jeffrey n. carre for this contribution. This change is used to create a new browserified bundle artefact that does not include any polyfills. See Browserify for details.
| +| 3.6.0 | | +| 3.6.1 | | +| 3.7.0 | | +| 3.8.0 | | +| 3.8.1 | | +| 3.8.2 | | +| 3.9.0 | | +| 3.10.0 | | +| 4.0.1 | | +| 4.1.0 | | +| 4.1.1 | | +| 4.2.0 | | +| 4.2.1 | | +| 4.3.0 | | diff --git a/node_backend/node_modules/exceljs/dist/LICENSE b/node_backend/node_modules/exceljs/dist/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f7a22414387391ad697b9e556be503e39cbf16b0 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 Guyon Roche + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node_backend/node_modules/exceljs/dist/es5/csv/csv.js b/node_backend/node_modules/exceljs/dist/es5/csv/csv.js new file mode 100644 index 0000000000000000000000000000000000000000..67cbcfed61b0fccc32feefe73d641879ba0dc88d --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/csv/csv.js @@ -0,0 +1,182 @@ +"use strict"; + +const fs = require('fs'); +const fastCsv = require('fast-csv'); +const customParseFormat = require('dayjs/plugin/customParseFormat'); +const utc = require('dayjs/plugin/utc'); +const dayjs = require('dayjs').extend(customParseFormat).extend(utc); +const StreamBuf = require('../utils/stream-buf'); +const { + fs: { + exists + } +} = require('../utils/utils'); + +/* eslint-disable quote-props */ +const SpecialValues = { + true: true, + false: false, + '#N/A': { + error: '#N/A' + }, + '#REF!': { + error: '#REF!' + }, + '#NAME?': { + error: '#NAME?' + }, + '#DIV/0!': { + error: '#DIV/0!' + }, + '#NULL!': { + error: '#NULL!' + }, + '#VALUE!': { + error: '#VALUE!' + }, + '#NUM!': { + error: '#NUM!' + } +}; +/* eslint-ensable quote-props */ + +class CSV { + constructor(workbook) { + this.workbook = workbook; + this.worksheet = null; + } + async readFile(filename, options) { + options = options || {}; + if (!(await exists(filename))) { + throw new Error(`File not found: ${filename}`); + } + const stream = fs.createReadStream(filename); + const worksheet = await this.read(stream, options); + stream.close(); + return worksheet; + } + read(stream, options) { + options = options || {}; + return new Promise((resolve, reject) => { + const worksheet = this.workbook.addWorksheet(options.sheetName); + const dateFormats = options.dateFormats || ['YYYY-MM-DD[T]HH:mm:ssZ', 'YYYY-MM-DD[T]HH:mm:ss', 'MM-DD-YYYY', 'YYYY-MM-DD']; + const map = options.map || function (datum) { + if (datum === '') { + return null; + } + const datumNumber = Number(datum); + if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) { + return datumNumber; + } + const dt = dateFormats.reduce((matchingDate, currentDateFormat) => { + if (matchingDate) { + return matchingDate; + } + const dayjsObj = dayjs(datum, currentDateFormat, true); + if (dayjsObj.isValid()) { + return dayjsObj; + } + return null; + }, null); + if (dt) { + return new Date(dt.valueOf()); + } + const special = SpecialValues[datum]; + if (special !== undefined) { + return special; + } + return datum; + }; + const csvStream = fastCsv.parse(options.parserOptions).on('data', data => { + worksheet.addRow(data.map(map)); + }).on('end', () => { + csvStream.emit('worksheet', worksheet); + }); + csvStream.on('worksheet', resolve).on('error', reject); + stream.pipe(csvStream); + }); + } + + /** + * @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md + */ + createInputStream() { + throw new Error('`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'); + } + write(stream, options) { + return new Promise((resolve, reject) => { + options = options || {}; + // const encoding = options.encoding || 'utf8'; + // const separator = options.separator || ','; + // const quoteChar = options.quoteChar || '\''; + + const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId); + const csvStream = fastCsv.format(options.formatterOptions); + stream.on('finish', () => { + resolve(); + }); + csvStream.on('error', reject); + csvStream.pipe(stream); + const { + dateFormat, + dateUTC + } = options; + const map = options.map || (value => { + if (value) { + if (value.text || value.hyperlink) { + return value.hyperlink || value.text || ''; + } + if (value.formula || value.result) { + return value.result || ''; + } + if (value instanceof Date) { + if (dateFormat) { + return dateUTC ? dayjs.utc(value).format(dateFormat) : dayjs(value).format(dateFormat); + } + return dateUTC ? dayjs.utc(value).format() : dayjs(value).format(); + } + if (value.error) { + return value.error; + } + if (typeof value === 'object') { + return JSON.stringify(value); + } + } + return value; + }); + const includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows; + let lastRow = 1; + if (worksheet) { + worksheet.eachRow((row, rowNumber) => { + if (includeEmptyRows) { + while (lastRow++ < rowNumber - 1) { + csvStream.write([]); + } + } + const { + values + } = row; + values.shift(); + csvStream.write(values.map(map)); + lastRow = rowNumber; + }); + } + csvStream.end(); + }); + } + writeFile(filename, options) { + options = options || {}; + const streamOptions = { + encoding: options.encoding || 'utf8' + }; + const stream = fs.createWriteStream(filename, streamOptions); + return this.write(stream, options); + } + async writeBuffer(options) { + const stream = new StreamBuf(); + await this.write(stream, options); + return stream.read(); + } +} +module.exports = CSV; +//# sourceMappingURL=csv.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/csv/csv.js.map b/node_backend/node_modules/exceljs/dist/es5/csv/csv.js.map new file mode 100644 index 0000000000000000000000000000000000000000..95050a60110a84993b99cddac1eb434ee8fc7d16 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/csv/csv.js.map @@ -0,0 +1 @@ +{"version":3,"file":"csv.js","names":["fs","require","fastCsv","customParseFormat","utc","dayjs","extend","StreamBuf","exists","SpecialValues","true","false","error","CSV","constructor","workbook","worksheet","readFile","filename","options","Error","stream","createReadStream","read","close","Promise","resolve","reject","addWorksheet","sheetName","dateFormats","map","datum","datumNumber","Number","isNaN","Infinity","dt","reduce","matchingDate","currentDateFormat","dayjsObj","isValid","Date","valueOf","special","undefined","csvStream","parse","parserOptions","on","data","addRow","emit","pipe","createInputStream","write","getWorksheet","sheetId","format","formatterOptions","dateFormat","dateUTC","value","text","hyperlink","formula","result","JSON","stringify","includeEmptyRows","lastRow","eachRow","row","rowNumber","values","shift","end","writeFile","streamOptions","encoding","createWriteStream","writeBuffer","module","exports"],"sources":["../../../lib/csv/csv.js"],"sourcesContent":["const fs = require('fs');\nconst fastCsv = require('fast-csv');\nconst customParseFormat = require('dayjs/plugin/customParseFormat');\nconst utc = require('dayjs/plugin/utc');\nconst dayjs = require('dayjs').extend(customParseFormat).extend(utc);\nconst StreamBuf = require('../utils/stream-buf');\n\nconst {\n fs: {exists},\n} = require('../utils/utils');\n\n/* eslint-disable quote-props */\nconst SpecialValues = {\n true: true,\n false: false,\n '#N/A': {error: '#N/A'},\n '#REF!': {error: '#REF!'},\n '#NAME?': {error: '#NAME?'},\n '#DIV/0!': {error: '#DIV/0!'},\n '#NULL!': {error: '#NULL!'},\n '#VALUE!': {error: '#VALUE!'},\n '#NUM!': {error: '#NUM!'},\n};\n/* eslint-ensable quote-props */\n\nclass CSV {\n constructor(workbook) {\n this.workbook = workbook;\n this.worksheet = null;\n }\n\n async readFile(filename, options) {\n options = options || {};\n if (!(await exists(filename))) {\n throw new Error(`File not found: ${filename}`);\n }\n const stream = fs.createReadStream(filename);\n const worksheet = await this.read(stream, options);\n stream.close();\n return worksheet;\n }\n\n read(stream, options) {\n options = options || {};\n\n return new Promise((resolve, reject) => {\n const worksheet = this.workbook.addWorksheet(options.sheetName);\n\n const dateFormats = options.dateFormats || [\n 'YYYY-MM-DD[T]HH:mm:ssZ',\n 'YYYY-MM-DD[T]HH:mm:ss',\n 'MM-DD-YYYY',\n 'YYYY-MM-DD',\n ];\n const map =\n options.map ||\n function(datum) {\n if (datum === '') {\n return null;\n }\n const datumNumber = Number(datum);\n if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) {\n return datumNumber;\n }\n const dt = dateFormats.reduce((matchingDate, currentDateFormat) => {\n if (matchingDate) {\n return matchingDate;\n }\n const dayjsObj = dayjs(datum, currentDateFormat, true);\n if (dayjsObj.isValid()) {\n return dayjsObj;\n }\n return null;\n }, null);\n if (dt) {\n return new Date(dt.valueOf());\n }\n const special = SpecialValues[datum];\n if (special !== undefined) {\n return special;\n }\n return datum;\n };\n\n const csvStream = fastCsv\n .parse(options.parserOptions)\n .on('data', data => {\n worksheet.addRow(data.map(map));\n })\n .on('end', () => {\n csvStream.emit('worksheet', worksheet);\n });\n\n csvStream.on('worksheet', resolve).on('error', reject);\n\n stream.pipe(csvStream);\n });\n }\n\n /**\n * @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\n */\n createInputStream() {\n throw new Error(\n '`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\n );\n }\n\n write(stream, options) {\n return new Promise((resolve, reject) => {\n options = options || {};\n // const encoding = options.encoding || 'utf8';\n // const separator = options.separator || ',';\n // const quoteChar = options.quoteChar || '\\'';\n\n const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId);\n\n const csvStream = fastCsv.format(options.formatterOptions);\n stream.on('finish', () => {\n resolve();\n });\n csvStream.on('error', reject);\n csvStream.pipe(stream);\n\n const {dateFormat, dateUTC} = options;\n const map =\n options.map ||\n (value => {\n if (value) {\n if (value.text || value.hyperlink) {\n return value.hyperlink || value.text || '';\n }\n if (value.formula || value.result) {\n return value.result || '';\n }\n if (value instanceof Date) {\n if (dateFormat) {\n return dateUTC\n ? dayjs.utc(value).format(dateFormat)\n : dayjs(value).format(dateFormat);\n }\n return dateUTC ? dayjs.utc(value).format() : dayjs(value).format();\n }\n if (value.error) {\n return value.error;\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n }\n return value;\n });\n\n const includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows;\n let lastRow = 1;\n if (worksheet) {\n worksheet.eachRow((row, rowNumber) => {\n if (includeEmptyRows) {\n while (lastRow++ < rowNumber - 1) {\n csvStream.write([]);\n }\n }\n const {values} = row;\n values.shift();\n csvStream.write(values.map(map));\n lastRow = rowNumber;\n });\n }\n csvStream.end();\n });\n }\n\n writeFile(filename, options) {\n options = options || {};\n\n const streamOptions = {\n encoding: options.encoding || 'utf8',\n };\n const stream = fs.createWriteStream(filename, streamOptions);\n\n return this.write(stream, options);\n }\n\n async writeBuffer(options) {\n const stream = new StreamBuf();\n await this.write(stream, options);\n return stream.read();\n }\n}\n\nmodule.exports = CSV;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/csv/line-buffer.js b/node_backend/node_modules/exceljs/dist/es5/csv/line-buffer.js new file mode 100644 index 0000000000000000000000000000000000000000..26388dc9b01dee5bcb0b3fd14059bdc886583905 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/csv/line-buffer.js @@ -0,0 +1,68 @@ +"use strict"; + +const { + EventEmitter +} = require('events'); +class LineBuffer extends EventEmitter { + constructor(options) { + super(); + this.encoding = options.encoding; + this.buffer = null; + + // part of cork/uncork + this.corked = false; + this.queue = []; + } + + // Events: + // line: here is a line + // done: all lines emitted + + write(chunk) { + // find line or lines in chunk and emit them if not corked + // or queue them if corked + const data = this.buffer ? this.buffer + chunk : chunk; + const lines = data.split(/\r?\n/g); + + // save the last line + this.buffer = lines.pop(); + lines.forEach(function (line) { + if (this.corked) { + this.queue.push(line); + } else { + this.emit('line', line); + } + }); + return !this.corked; + } + cork() { + this.corked = true; + } + uncork() { + this.corked = false; + this._flush(); + + // tell the source I'm ready again + this.emit('drain'); + } + setDefaultEncoding() { + // ? + } + end() { + if (this.buffer) { + this.emit('line', this.buffer); + this.buffer = null; + } + this.emit('done'); + } + _flush() { + if (!this.corked) { + this.queue.forEach(line => { + this.emit('line', line); + }); + this.queue = []; + } + } +} +module.exports = LineBuffer; +//# sourceMappingURL=line-buffer.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/csv/line-buffer.js.map b/node_backend/node_modules/exceljs/dist/es5/csv/line-buffer.js.map new file mode 100644 index 0000000000000000000000000000000000000000..30e2e2442182858a9878e496be96e05d258f6caa --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/csv/line-buffer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"line-buffer.js","names":["EventEmitter","require","LineBuffer","constructor","options","encoding","buffer","corked","queue","write","chunk","data","lines","split","pop","forEach","line","push","emit","cork","uncork","_flush","setDefaultEncoding","end","module","exports"],"sources":["../../../lib/csv/line-buffer.js"],"sourcesContent":["const {EventEmitter} = require('events');\n\nclass LineBuffer extends EventEmitter {\n constructor(options) {\n super();\n\n this.encoding = options.encoding;\n\n this.buffer = null;\n\n // part of cork/uncork\n this.corked = false;\n this.queue = [];\n }\n\n // Events:\n // line: here is a line\n // done: all lines emitted\n\n write(chunk) {\n // find line or lines in chunk and emit them if not corked\n // or queue them if corked\n const data = this.buffer ? this.buffer + chunk : chunk;\n const lines = data.split(/\\r?\\n/g);\n\n // save the last line\n this.buffer = lines.pop();\n\n lines.forEach(function(line) {\n if (this.corked) {\n this.queue.push(line);\n } else {\n this.emit('line', line);\n }\n });\n\n return !this.corked;\n }\n\n cork() {\n this.corked = true;\n }\n\n uncork() {\n this.corked = false;\n this._flush();\n\n // tell the source I'm ready again\n this.emit('drain');\n }\n\n setDefaultEncoding() {\n // ?\n }\n\n end() {\n if (this.buffer) {\n this.emit('line', this.buffer);\n this.buffer = null;\n }\n this.emit('done');\n }\n\n _flush() {\n if (!this.corked) {\n this.queue.forEach(line => {\n this.emit('line', line);\n });\n this.queue = [];\n }\n }\n}\n\nmodule.exports = LineBuffer;\n"],"mappings":";;AAAA,MAAM;EAACA;AAAY,CAAC,GAAGC,OAAO,CAAC,QAAQ,CAAC;AAExC,MAAMC,UAAU,SAASF,YAAY,CAAC;EACpCG,WAAWA,CAACC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,QAAQ,GAAGD,OAAO,CAACC,QAAQ;IAEhC,IAAI,CAACC,MAAM,GAAG,IAAI;;IAElB;IACA,IAAI,CAACC,MAAM,GAAG,KAAK;IACnB,IAAI,CAACC,KAAK,GAAG,EAAE;EACjB;;EAEA;EACA;EACA;;EAEAC,KAAKA,CAACC,KAAK,EAAE;IACX;IACA;IACA,MAAMC,IAAI,GAAG,IAAI,CAACL,MAAM,GAAG,IAAI,CAACA,MAAM,GAAGI,KAAK,GAAGA,KAAK;IACtD,MAAME,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,QAAQ,CAAC;;IAElC;IACA,IAAI,CAACP,MAAM,GAAGM,KAAK,CAACE,GAAG,CAAC,CAAC;IAEzBF,KAAK,CAACG,OAAO,CAAC,UAASC,IAAI,EAAE;MAC3B,IAAI,IAAI,CAACT,MAAM,EAAE;QACf,IAAI,CAACC,KAAK,CAACS,IAAI,CAACD,IAAI,CAAC;MACvB,CAAC,MAAM;QACL,IAAI,CAACE,IAAI,CAAC,MAAM,EAAEF,IAAI,CAAC;MACzB;IACF,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAACT,MAAM;EACrB;EAEAY,IAAIA,CAAA,EAAG;IACL,IAAI,CAACZ,MAAM,GAAG,IAAI;EACpB;EAEAa,MAAMA,CAAA,EAAG;IACP,IAAI,CAACb,MAAM,GAAG,KAAK;IACnB,IAAI,CAACc,MAAM,CAAC,CAAC;;IAEb;IACA,IAAI,CAACH,IAAI,CAAC,OAAO,CAAC;EACpB;EAEAI,kBAAkBA,CAAA,EAAG;IACnB;EAAA;EAGFC,GAAGA,CAAA,EAAG;IACJ,IAAI,IAAI,CAACjB,MAAM,EAAE;MACf,IAAI,CAACY,IAAI,CAAC,MAAM,EAAE,IAAI,CAACZ,MAAM,CAAC;MAC9B,IAAI,CAACA,MAAM,GAAG,IAAI;IACpB;IACA,IAAI,CAACY,IAAI,CAAC,MAAM,CAAC;EACnB;EAEAG,MAAMA,CAAA,EAAG;IACP,IAAI,CAAC,IAAI,CAACd,MAAM,EAAE;MAChB,IAAI,CAACC,KAAK,CAACO,OAAO,CAACC,IAAI,IAAI;QACzB,IAAI,CAACE,IAAI,CAAC,MAAM,EAAEF,IAAI,CAAC;MACzB,CAAC,CAAC;MACF,IAAI,CAACR,KAAK,GAAG,EAAE;IACjB;EACF;AACF;AAEAgB,MAAM,CAACC,OAAO,GAAGvB,UAAU"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/csv/stream-converter.js b/node_backend/node_modules/exceljs/dist/es5/csv/stream-converter.js new file mode 100644 index 0000000000000000000000000000000000000000..94685c05f1f80f2919e941df427e79fc824e963e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/csv/stream-converter.js @@ -0,0 +1,110 @@ +"use strict"; + +// ======================================================================================================= +// StreamConverter +// +// convert between encoding schemes in a stream +// Work in Progress - Will complete this at some point +let jconv; +class StreamConverter { + constructor(inner, options) { + this.inner = inner; + options = options || {}; + this.innerEncoding = (options.innerEncoding || 'UTF8').toUpperCase(); + this.outerEncoding = (options.outerEncoding || 'UTF8').toUpperCase(); + this.innerBOM = options.innerBOM || null; + this.outerBOM = options.outerBOM || null; + this.writeStarted = false; + } + convertInwards(data) { + if (data) { + if (typeof data === 'string') { + data = Buffer.from(data, this.outerEncoding); + } + if (this.innerEncoding !== this.outerEncoding) { + data = jconv.convert(data, this.outerEncoding, this.innerEncoding); + } + } + return data; + } + convertOutwards(data) { + if (typeof data === 'string') { + data = Buffer.from(data, this.innerEncoding); + } + if (this.innerEncoding !== this.outerEncoding) { + data = jconv.convert(data, this.innerEncoding, this.outerEncoding); + } + return data; + } + addListener(event, handler) { + this.inner.addListener(event, handler); + } + removeListener(event, handler) { + this.inner.removeListener(event, handler); + } + write(data, encoding, callback) { + if (encoding instanceof Function) { + callback = encoding; + encoding = undefined; + } + if (!this.writeStarted) { + // if inner encoding has BOM, write it now + if (this.innerBOM) { + this.inner.write(this.innerBOM); + } + + // if outer encoding has BOM, delete it now + if (this.outerBOM) { + if (data.length <= this.outerBOM.length) { + if (callback) { + callback(); + } + return; + } + const bomless = Buffer.alloc(data.length - this.outerBOM.length); + data.copy(bomless, 0, this.outerBOM.length, data.length); + data = bomless; + } + this.writeStarted = true; + } + this.inner.write(this.convertInwards(data), encoding ? this.innerEncoding : undefined, callback); + } + read() { + // TBD + } + pipe(destination, options) { + const reverseConverter = new StreamConverter(destination, { + innerEncoding: this.outerEncoding, + outerEncoding: this.innerEncoding, + innerBOM: this.outerBOM, + outerBOM: this.innerBOM + }); + this.inner.pipe(reverseConverter, options); + } + close() { + this.inner.close(); + } + on(type, callback) { + switch (type) { + case 'data': + this.inner.on('data', chunk => { + callback(this.convertOutwards(chunk)); + }); + return this; + default: + this.inner.on(type, callback); + return this; + } + } + once(type, callback) { + this.inner.once(type, callback); + } + end(chunk, encoding, callback) { + this.inner.end(this.convertInwards(chunk), this.innerEncoding, callback); + } + emit(type, value) { + this.inner.emit(type, value); + } +} +module.exports = StreamConverter; +//# sourceMappingURL=stream-converter.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/csv/stream-converter.js.map b/node_backend/node_modules/exceljs/dist/es5/csv/stream-converter.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2d56f2ebd7c6ede0d58f39c2822746646e7a2c4f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/csv/stream-converter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stream-converter.js","names":["jconv","StreamConverter","constructor","inner","options","innerEncoding","toUpperCase","outerEncoding","innerBOM","outerBOM","writeStarted","convertInwards","data","Buffer","from","convert","convertOutwards","addListener","event","handler","removeListener","write","encoding","callback","Function","undefined","length","bomless","alloc","copy","read","pipe","destination","reverseConverter","close","on","type","chunk","once","end","emit","value","module","exports"],"sources":["../../../lib/csv/stream-converter.js"],"sourcesContent":["// =======================================================================================================\n// StreamConverter\n//\n// convert between encoding schemes in a stream\n// Work in Progress - Will complete this at some point\nlet jconv;\n\nclass StreamConverter {\n constructor(inner, options) {\n this.inner = inner;\n\n options = options || {};\n this.innerEncoding = (options.innerEncoding || 'UTF8').toUpperCase();\n this.outerEncoding = (options.outerEncoding || 'UTF8').toUpperCase();\n\n this.innerBOM = options.innerBOM || null;\n this.outerBOM = options.outerBOM || null;\n\n this.writeStarted = false;\n }\n\n convertInwards(data) {\n if (data) {\n if (typeof data === 'string') {\n data = Buffer.from(data, this.outerEncoding);\n }\n\n if (this.innerEncoding !== this.outerEncoding) {\n data = jconv.convert(data, this.outerEncoding, this.innerEncoding);\n }\n }\n\n return data;\n }\n\n convertOutwards(data) {\n if (typeof data === 'string') {\n data = Buffer.from(data, this.innerEncoding);\n }\n\n if (this.innerEncoding !== this.outerEncoding) {\n data = jconv.convert(data, this.innerEncoding, this.outerEncoding);\n }\n return data;\n }\n\n addListener(event, handler) {\n this.inner.addListener(event, handler);\n }\n\n removeListener(event, handler) {\n this.inner.removeListener(event, handler);\n }\n\n write(data, encoding, callback) {\n if (encoding instanceof Function) {\n callback = encoding;\n encoding = undefined;\n }\n\n if (!this.writeStarted) {\n // if inner encoding has BOM, write it now\n if (this.innerBOM) {\n this.inner.write(this.innerBOM);\n }\n\n // if outer encoding has BOM, delete it now\n if (this.outerBOM) {\n if (data.length <= this.outerBOM.length) {\n if (callback) {\n callback();\n }\n return;\n }\n const bomless = Buffer.alloc(data.length - this.outerBOM.length);\n data.copy(bomless, 0, this.outerBOM.length, data.length);\n data = bomless;\n }\n\n this.writeStarted = true;\n }\n\n this.inner.write(\n this.convertInwards(data),\n encoding ? this.innerEncoding : undefined,\n callback\n );\n }\n\n read() {\n // TBD\n }\n\n pipe(destination, options) {\n const reverseConverter = new StreamConverter(destination, {\n innerEncoding: this.outerEncoding,\n outerEncoding: this.innerEncoding,\n innerBOM: this.outerBOM,\n outerBOM: this.innerBOM,\n });\n\n this.inner.pipe(reverseConverter, options);\n }\n\n close() {\n this.inner.close();\n }\n\n on(type, callback) {\n switch (type) {\n case 'data':\n this.inner.on('data', chunk => {\n callback(this.convertOutwards(chunk));\n });\n return this;\n default:\n this.inner.on(type, callback);\n return this;\n }\n }\n\n once(type, callback) {\n this.inner.once(type, callback);\n }\n\n end(chunk, encoding, callback) {\n this.inner.end(this.convertInwards(chunk), this.innerEncoding, callback);\n }\n\n emit(type, value) {\n this.inner.emit(type, value);\n }\n}\n\nmodule.exports = StreamConverter;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/anchor.js b/node_backend/node_modules/exceljs/dist/es5/doc/anchor.js new file mode 100644 index 0000000000000000000000000000000000000000..98041868dbef9269be4b4f78248c85216adfee4b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/anchor.js @@ -0,0 +1,73 @@ +'use strict'; + +const colCache = require('../utils/col-cache'); +class Anchor { + constructor(worksheet, address) { + let offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + this.worksheet = worksheet; + if (!address) { + this.nativeCol = 0; + this.nativeColOff = 0; + this.nativeRow = 0; + this.nativeRowOff = 0; + } else if (typeof address === 'string') { + const decoded = colCache.decodeAddress(address); + this.nativeCol = decoded.col + offset; + this.nativeColOff = 0; + this.nativeRow = decoded.row + offset; + this.nativeRowOff = 0; + } else if (address.nativeCol !== undefined) { + this.nativeCol = address.nativeCol || 0; + this.nativeColOff = address.nativeColOff || 0; + this.nativeRow = address.nativeRow || 0; + this.nativeRowOff = address.nativeRowOff || 0; + } else if (address.col !== undefined) { + this.col = address.col + offset; + this.row = address.row + offset; + } else { + this.nativeCol = 0; + this.nativeColOff = 0; + this.nativeRow = 0; + this.nativeRowOff = 0; + } + } + static asInstance(model) { + return model instanceof Anchor || model == null ? model : new Anchor(model); + } + get col() { + return this.nativeCol + Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth; + } + set col(v) { + this.nativeCol = Math.floor(v); + this.nativeColOff = Math.floor((v - this.nativeCol) * this.colWidth); + } + get row() { + return this.nativeRow + Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight; + } + set row(v) { + this.nativeRow = Math.floor(v); + this.nativeRowOff = Math.floor((v - this.nativeRow) * this.rowHeight); + } + get colWidth() { + return this.worksheet && this.worksheet.getColumn(this.nativeCol + 1) && this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth ? Math.floor(this.worksheet.getColumn(this.nativeCol + 1).width * 10000) : 640000; + } + get rowHeight() { + return this.worksheet && this.worksheet.getRow(this.nativeRow + 1) && this.worksheet.getRow(this.nativeRow + 1).height ? Math.floor(this.worksheet.getRow(this.nativeRow + 1).height * 10000) : 180000; + } + get model() { + return { + nativeCol: this.nativeCol, + nativeColOff: this.nativeColOff, + nativeRow: this.nativeRow, + nativeRowOff: this.nativeRowOff + }; + } + set model(value) { + this.nativeCol = value.nativeCol; + this.nativeColOff = value.nativeColOff; + this.nativeRow = value.nativeRow; + this.nativeRowOff = value.nativeRowOff; + } +} +module.exports = Anchor; +//# sourceMappingURL=anchor.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/anchor.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/anchor.js.map new file mode 100644 index 0000000000000000000000000000000000000000..80523883dfd762fb2ba539ab9bb83205dca4d6bd --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/anchor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"anchor.js","names":["colCache","require","Anchor","constructor","worksheet","address","offset","arguments","length","undefined","nativeCol","nativeColOff","nativeRow","nativeRowOff","decoded","decodeAddress","col","row","asInstance","model","Math","min","colWidth","v","floor","rowHeight","getColumn","isCustomWidth","width","getRow","height","value","module","exports"],"sources":["../../../lib/doc/anchor.js"],"sourcesContent":["'use strict';\n\nconst colCache = require('../utils/col-cache');\n\nclass Anchor {\n constructor(worksheet, address, offset = 0) {\n this.worksheet = worksheet;\n\n if (!address) {\n this.nativeCol = 0;\n this.nativeColOff = 0;\n this.nativeRow = 0;\n this.nativeRowOff = 0;\n } else if (typeof address === 'string') {\n const decoded = colCache.decodeAddress(address);\n this.nativeCol = decoded.col + offset;\n this.nativeColOff = 0;\n this.nativeRow = decoded.row + offset;\n this.nativeRowOff = 0;\n } else if (address.nativeCol !== undefined) {\n this.nativeCol = address.nativeCol || 0;\n this.nativeColOff = address.nativeColOff || 0;\n this.nativeRow = address.nativeRow || 0;\n this.nativeRowOff = address.nativeRowOff || 0;\n } else if (address.col !== undefined) {\n this.col = address.col + offset;\n this.row = address.row + offset;\n } else {\n this.nativeCol = 0;\n this.nativeColOff = 0;\n this.nativeRow = 0;\n this.nativeRowOff = 0;\n }\n }\n\n static asInstance(model) {\n return model instanceof Anchor || model == null ? model : new Anchor(model);\n }\n\n get col() {\n return this.nativeCol + (Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth);\n }\n\n set col(v) {\n this.nativeCol = Math.floor(v);\n this.nativeColOff = Math.floor((v - this.nativeCol) * this.colWidth);\n }\n\n get row() {\n return this.nativeRow + (Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight);\n }\n\n set row(v) {\n this.nativeRow = Math.floor(v);\n this.nativeRowOff = Math.floor((v - this.nativeRow) * this.rowHeight);\n }\n\n get colWidth() {\n return this.worksheet &&\n this.worksheet.getColumn(this.nativeCol + 1) &&\n this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth\n ? Math.floor(this.worksheet.getColumn(this.nativeCol + 1).width * 10000)\n : 640000;\n }\n\n get rowHeight() {\n return this.worksheet &&\n this.worksheet.getRow(this.nativeRow + 1) &&\n this.worksheet.getRow(this.nativeRow + 1).height\n ? Math.floor(this.worksheet.getRow(this.nativeRow + 1).height * 10000)\n : 180000;\n }\n\n get model() {\n return {\n nativeCol: this.nativeCol,\n nativeColOff: this.nativeColOff,\n nativeRow: this.nativeRow,\n nativeRowOff: this.nativeRowOff,\n };\n }\n\n set model(value) {\n this.nativeCol = value.nativeCol;\n this.nativeColOff = value.nativeColOff;\n this.nativeRow = value.nativeRow;\n this.nativeRowOff = value.nativeRowOff;\n }\n}\n\nmodule.exports = Anchor;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/cell.js b/node_backend/node_modules/exceljs/dist/es5/doc/cell.js new file mode 100644 index 0000000000000000000000000000000000000000..f6b607ce0210504652aa60be766b0fe6162410e9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/cell.js @@ -0,0 +1,961 @@ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const colCache = require('../utils/col-cache'); +const _ = require('../utils/under-dash'); +const Enums = require('./enums'); +const { + slideFormula +} = require('../utils/shared-formula'); +const Note = require('./note'); +// Cell requirements +// Operate inside a worksheet +// Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc. +// Manage/use and manipulate cell format either as local to cell or inherited from column or row. + +class Cell { + constructor(row, column, address) { + if (!row || !column) { + throw new Error('A Cell needs a Row'); + } + this._row = row; + this._column = column; + colCache.validateAddress(address); + this._address = address; + + // TODO: lazy evaluation of this._value + this._value = Value.create(Cell.Types.Null, this); + this.style = this._mergeStyle(row.style, column.style, {}); + this._mergeCount = 0; + } + get worksheet() { + return this._row.worksheet; + } + get workbook() { + return this._row.worksheet.workbook; + } + + // help GC by removing cyclic (and other) references + destroy() { + delete this.style; + delete this._value; + delete this._row; + delete this._column; + delete this._address; + } + + // ========================================================================= + // Styles stuff + get numFmt() { + return this.style.numFmt; + } + set numFmt(value) { + this.style.numFmt = value; + } + get font() { + return this.style.font; + } + set font(value) { + this.style.font = value; + } + get alignment() { + return this.style.alignment; + } + set alignment(value) { + this.style.alignment = value; + } + get border() { + return this.style.border; + } + set border(value) { + this.style.border = value; + } + get fill() { + return this.style.fill; + } + set fill(value) { + this.style.fill = value; + } + get protection() { + return this.style.protection; + } + set protection(value) { + this.style.protection = value; + } + _mergeStyle(rowStyle, colStyle, style) { + const numFmt = rowStyle && rowStyle.numFmt || colStyle && colStyle.numFmt; + if (numFmt) style.numFmt = numFmt; + const font = rowStyle && rowStyle.font || colStyle && colStyle.font; + if (font) style.font = font; + const alignment = rowStyle && rowStyle.alignment || colStyle && colStyle.alignment; + if (alignment) style.alignment = alignment; + const border = rowStyle && rowStyle.border || colStyle && colStyle.border; + if (border) style.border = border; + const fill = rowStyle && rowStyle.fill || colStyle && colStyle.fill; + if (fill) style.fill = fill; + const protection = rowStyle && rowStyle.protection || colStyle && colStyle.protection; + if (protection) style.protection = protection; + return style; + } + + // ========================================================================= + // return the address for this cell + get address() { + return this._address; + } + get row() { + return this._row.number; + } + get col() { + return this._column.number; + } + get $col$row() { + return `$${this._column.letter}$${this.row}`; + } + + // ========================================================================= + // Value stuff + + get type() { + return this._value.type; + } + get effectiveType() { + return this._value.effectiveType; + } + toCsvString() { + return this._value.toCsvString(); + } + + // ========================================================================= + // Merge stuff + + addMergeRef() { + this._mergeCount++; + } + releaseMergeRef() { + this._mergeCount--; + } + get isMerged() { + return this._mergeCount > 0 || this.type === Cell.Types.Merge; + } + merge(master, ignoreStyle) { + this._value.release(); + this._value = Value.create(Cell.Types.Merge, this, master); + if (!ignoreStyle) { + this.style = master.style; + } + } + unmerge() { + if (this.type === Cell.Types.Merge) { + this._value.release(); + this._value = Value.create(Cell.Types.Null, this); + this.style = this._mergeStyle(this._row.style, this._column.style, {}); + } + } + isMergedTo(master) { + if (this._value.type !== Cell.Types.Merge) return false; + return this._value.isMergedTo(master); + } + get master() { + if (this.type === Cell.Types.Merge) { + return this._value.master; + } + return this; // an unmerged cell is its own master + } + + get isHyperlink() { + return this._value.type === Cell.Types.Hyperlink; + } + get hyperlink() { + return this._value.hyperlink; + } + + // return the value + get value() { + return this._value.value; + } + + // set the value - can be number, string or raw + set value(v) { + // special case - merge cells set their master's value + if (this.type === Cell.Types.Merge) { + this._value.master.value = v; + return; + } + this._value.release(); + + // assign value + this._value = Value.create(Value.getType(v), this, v); + } + get note() { + return this._comment && this._comment.note; + } + set note(note) { + this._comment = new Note(note); + } + get text() { + return this._value.toString(); + } + get html() { + return _.escapeHtml(this.text); + } + toString() { + return this.text; + } + _upgradeToHyperlink(hyperlink) { + // if this cell is a string, turn it into a Hyperlink + if (this.type === Cell.Types.String) { + this._value = Value.create(Cell.Types.Hyperlink, this, { + text: this._value.value, + hyperlink + }); + } + } + + // ========================================================================= + // Formula stuff + get formula() { + return this._value.formula; + } + get result() { + return this._value.result; + } + get formulaType() { + return this._value.formulaType; + } + + // ========================================================================= + // Name stuff + get fullAddress() { + const { + worksheet + } = this._row; + return { + sheetName: worksheet.name, + address: this.address, + row: this.row, + col: this.col + }; + } + get name() { + return this.names[0]; + } + set name(value) { + this.names = [value]; + } + get names() { + return this.workbook.definedNames.getNamesEx(this.fullAddress); + } + set names(value) { + const { + definedNames + } = this.workbook; + definedNames.removeAllNames(this.fullAddress); + value.forEach(name => { + definedNames.addEx(this.fullAddress, name); + }); + } + addName(name) { + this.workbook.definedNames.addEx(this.fullAddress, name); + } + removeName(name) { + this.workbook.definedNames.removeEx(this.fullAddress, name); + } + removeAllNames() { + this.workbook.definedNames.removeAllNames(this.fullAddress); + } + + // ========================================================================= + // Data Validation stuff + get _dataValidations() { + return this.worksheet.dataValidations; + } + get dataValidation() { + return this._dataValidations.find(this.address); + } + set dataValidation(value) { + this._dataValidations.add(this.address, value); + } + + // ========================================================================= + // Model stuff + + get model() { + const { + model + } = this._value; + model.style = this.style; + if (this._comment) { + model.comment = this._comment.model; + } + return model; + } + set model(value) { + this._value.release(); + this._value = Value.create(value.type, this); + this._value.model = value; + if (value.comment) { + switch (value.comment.type) { + case 'note': + this._comment = Note.fromModel(value.comment); + break; + } + } + if (value.style) { + this.style = value.style; + } else { + this.style = {}; + } + } +} +Cell.Types = Enums.ValueType; + +// ============================================================================= +// Internal Value Types + +class NullValue { + constructor(cell) { + this.model = { + address: cell.address, + type: Cell.Types.Null + }; + } + get value() { + return null; + } + set value(value) { + // nothing to do + } + get type() { + return Cell.Types.Null; + } + get effectiveType() { + return Cell.Types.Null; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return ''; + } + release() {} + toString() { + return ''; + } +} +class NumberValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Number, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Number; + } + get effectiveType() { + return Cell.Types.Number; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value.toString(); + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class StringValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.String, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.String; + } + get effectiveType() { + return Cell.Types.String; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return `"${this.model.value.replace(/"/g, '""')}"`; + } + release() {} + toString() { + return this.model.value; + } +} +class RichTextValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.String, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + toString() { + return this.model.value.richText.map(t => t.text).join(''); + } + get type() { + return Cell.Types.RichText; + } + get effectiveType() { + return Cell.Types.RichText; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return `"${this.text.replace(/"/g, '""')}"`; + } + release() {} +} +class DateValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Date, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Date; + } + get effectiveType() { + return Cell.Types.Date; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value.toISOString(); + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class HyperlinkValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Hyperlink, + text: value ? value.text : undefined, + hyperlink: value ? value.hyperlink : undefined + }; + if (value && value.tooltip) { + this.model.tooltip = value.tooltip; + } + } + get value() { + const v = { + text: this.model.text, + hyperlink: this.model.hyperlink + }; + if (this.model.tooltip) { + v.tooltip = this.model.tooltip; + } + return v; + } + set value(value) { + this.model = { + text: value.text, + hyperlink: value.hyperlink + }; + if (value.tooltip) { + this.model.tooltip = value.tooltip; + } + } + get text() { + return this.model.text; + } + set text(value) { + this.model.text = value; + } + + /* + get tooltip() { + return this.model.tooltip; + } + set tooltip(value) { + this.model.tooltip = value; + } */ + + get hyperlink() { + return this.model.hyperlink; + } + set hyperlink(value) { + this.model.hyperlink = value; + } + get type() { + return Cell.Types.Hyperlink; + } + get effectiveType() { + return Cell.Types.Hyperlink; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.hyperlink; + } + release() {} + toString() { + return this.model.text; + } +} +class MergeValue { + constructor(cell, master) { + this.model = { + address: cell.address, + type: Cell.Types.Merge, + master: master ? master.address : undefined + }; + this._master = master; + if (master) { + master.addMergeRef(); + } + } + get value() { + return this._master.value; + } + set value(value) { + if (value instanceof Cell) { + if (this._master) { + this._master.releaseMergeRef(); + } + value.addMergeRef(); + this._master = value; + } else { + this._master.value = value; + } + } + isMergedTo(master) { + return master === this._master; + } + get master() { + return this._master; + } + get type() { + return Cell.Types.Merge; + } + get effectiveType() { + return this._master.effectiveType; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return ''; + } + release() { + this._master.releaseMergeRef(); + } + toString() { + return this.value.toString(); + } +} +class FormulaValue { + constructor(cell, value) { + this.cell = cell; + this.model = { + address: cell.address, + type: Cell.Types.Formula, + shareType: value ? value.shareType : undefined, + ref: value ? value.ref : undefined, + formula: value ? value.formula : undefined, + sharedFormula: value ? value.sharedFormula : undefined, + result: value ? value.result : undefined + }; + } + _copyModel(model) { + const copy = {}; + const cp = name => { + const value = model[name]; + if (value) { + copy[name] = value; + } + }; + cp('formula'); + cp('result'); + cp('ref'); + cp('shareType'); + cp('sharedFormula'); + return copy; + } + get value() { + return this._copyModel(this.model); + } + set value(value) { + this.model = this._copyModel(value); + } + validate(value) { + switch (Value.getType(value)) { + case Cell.Types.Null: + case Cell.Types.String: + case Cell.Types.Number: + case Cell.Types.Date: + break; + case Cell.Types.Hyperlink: + case Cell.Types.Formula: + default: + throw new Error('Cannot process that type of result value'); + } + } + get dependencies() { + // find all the ranges and cells mentioned in the formula + const ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g); + const cells = this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g, '').match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g); + return { + ranges, + cells + }; + } + get formula() { + return this.model.formula || this._getTranslatedFormula(); + } + set formula(value) { + this.model.formula = value; + } + get formulaType() { + if (this.model.formula) { + return Enums.FormulaType.Master; + } + if (this.model.sharedFormula) { + return Enums.FormulaType.Shared; + } + return Enums.FormulaType.None; + } + get result() { + return this.model.result; + } + set result(value) { + this.model.result = value; + } + get type() { + return Cell.Types.Formula; + } + get effectiveType() { + const v = this.model.result; + if (v === null || v === undefined) { + return Enums.ValueType.Null; + } + if (v instanceof String || typeof v === 'string') { + return Enums.ValueType.String; + } + if (typeof v === 'number') { + return Enums.ValueType.Number; + } + if (v instanceof Date) { + return Enums.ValueType.Date; + } + if (v.text && v.hyperlink) { + return Enums.ValueType.Hyperlink; + } + if (v.formula) { + return Enums.ValueType.Formula; + } + return Enums.ValueType.Null; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + _getTranslatedFormula() { + if (!this._translatedFormula && this.model.sharedFormula) { + const { + worksheet + } = this.cell; + const master = worksheet.findCell(this.model.sharedFormula); + this._translatedFormula = master && slideFormula(master.formula, master.address, this.model.address); + } + return this._translatedFormula; + } + toCsvString() { + return `${this.model.result || ''}`; + } + release() {} + toString() { + return this.model.result ? this.model.result.toString() : ''; + } +} +class SharedStringValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.SharedString, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.SharedString; + } + get effectiveType() { + return Cell.Types.SharedString; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value.toString(); + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class BooleanValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Boolean, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Boolean; + } + get effectiveType() { + return Cell.Types.Boolean; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value ? 1 : 0; + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class ErrorValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Error, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Error; + } + get effectiveType() { + return Cell.Types.Error; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.toString(); + } + release() {} + toString() { + return this.model.value.error.toString(); + } +} +class JSONValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.String, + value: JSON.stringify(value), + rawValue: value + }; + } + get value() { + return this.model.rawValue; + } + set value(value) { + this.model.rawValue = value; + this.model.value = JSON.stringify(value); + } + get type() { + return Cell.Types.String; + } + get effectiveType() { + return Cell.Types.String; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value; + } + release() {} + toString() { + return this.model.value; + } +} + +// Value is a place to hold common static Value type functions +const Value = { + getType(value) { + if (value === null || value === undefined) { + return Cell.Types.Null; + } + if (value instanceof String || typeof value === 'string') { + return Cell.Types.String; + } + if (typeof value === 'number') { + return Cell.Types.Number; + } + if (typeof value === 'boolean') { + return Cell.Types.Boolean; + } + if (value instanceof Date) { + return Cell.Types.Date; + } + if (value.text && value.hyperlink) { + return Cell.Types.Hyperlink; + } + if (value.formula || value.sharedFormula) { + return Cell.Types.Formula; + } + if (value.richText) { + return Cell.Types.RichText; + } + if (value.sharedString) { + return Cell.Types.SharedString; + } + if (value.error) { + return Cell.Types.Error; + } + return Cell.Types.JSON; + }, + // map valueType to constructor + types: [{ + t: Cell.Types.Null, + f: NullValue + }, { + t: Cell.Types.Number, + f: NumberValue + }, { + t: Cell.Types.String, + f: StringValue + }, { + t: Cell.Types.Date, + f: DateValue + }, { + t: Cell.Types.Hyperlink, + f: HyperlinkValue + }, { + t: Cell.Types.Formula, + f: FormulaValue + }, { + t: Cell.Types.Merge, + f: MergeValue + }, { + t: Cell.Types.JSON, + f: JSONValue + }, { + t: Cell.Types.SharedString, + f: SharedStringValue + }, { + t: Cell.Types.RichText, + f: RichTextValue + }, { + t: Cell.Types.Boolean, + f: BooleanValue + }, { + t: Cell.Types.Error, + f: ErrorValue + }].reduce((p, t) => { + p[t.t] = t.f; + return p; + }, []), + create(type, cell, value) { + const T = this.types[type]; + if (!T) { + throw new Error(`Could not create Value of type ${type}`); + } + return new T(cell, value); + } +}; +module.exports = Cell; +//# sourceMappingURL=cell.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/cell.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/cell.js.map new file mode 100644 index 0000000000000000000000000000000000000000..af000efb952b5d5bb7c40da21b811104bf063a37 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/cell.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cell.js","names":["colCache","require","_","Enums","slideFormula","Note","Cell","constructor","row","column","address","Error","_row","_column","validateAddress","_address","_value","Value","create","Types","Null","style","_mergeStyle","_mergeCount","worksheet","workbook","destroy","numFmt","value","font","alignment","border","fill","protection","rowStyle","colStyle","number","col","$col$row","letter","type","effectiveType","toCsvString","addMergeRef","releaseMergeRef","isMerged","Merge","merge","master","ignoreStyle","release","unmerge","isMergedTo","isHyperlink","Hyperlink","hyperlink","v","getType","note","_comment","text","toString","html","escapeHtml","_upgradeToHyperlink","String","formula","result","formulaType","fullAddress","sheetName","name","names","definedNames","getNamesEx","removeAllNames","forEach","addEx","addName","removeName","removeEx","_dataValidations","dataValidations","dataValidation","find","add","model","comment","fromModel","ValueType","NullValue","cell","NumberValue","Number","StringValue","replace","RichTextValue","richText","map","t","join","RichText","DateValue","Date","toISOString","HyperlinkValue","undefined","tooltip","MergeValue","_master","FormulaValue","Formula","shareType","ref","sharedFormula","_copyModel","copy","cp","validate","dependencies","ranges","match","cells","_getTranslatedFormula","FormulaType","Master","Shared","None","_translatedFormula","findCell","SharedStringValue","SharedString","BooleanValue","Boolean","ErrorValue","error","JSONValue","JSON","stringify","rawValue","sharedString","types","f","reduce","p","T","module","exports"],"sources":["../../../lib/doc/cell.js"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nconst colCache = require('../utils/col-cache');\nconst _ = require('../utils/under-dash');\nconst Enums = require('./enums');\nconst {slideFormula} = require('../utils/shared-formula');\nconst Note = require('./note');\n// Cell requirements\n// Operate inside a worksheet\n// Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc.\n// Manage/use and manipulate cell format either as local to cell or inherited from column or row.\n\nclass Cell {\n constructor(row, column, address) {\n if (!row || !column) {\n throw new Error('A Cell needs a Row');\n }\n\n this._row = row;\n this._column = column;\n\n colCache.validateAddress(address);\n this._address = address;\n\n // TODO: lazy evaluation of this._value\n this._value = Value.create(Cell.Types.Null, this);\n\n this.style = this._mergeStyle(row.style, column.style, {});\n\n this._mergeCount = 0;\n }\n\n get worksheet() {\n return this._row.worksheet;\n }\n\n get workbook() {\n return this._row.worksheet.workbook;\n }\n\n // help GC by removing cyclic (and other) references\n destroy() {\n delete this.style;\n delete this._value;\n delete this._row;\n delete this._column;\n delete this._address;\n }\n\n // =========================================================================\n // Styles stuff\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this.style.numFmt = value;\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this.style.font = value;\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this.style.alignment = value;\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this.style.border = value;\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this.style.fill = value;\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this.style.protection = value;\n }\n\n _mergeStyle(rowStyle, colStyle, style) {\n const numFmt = (rowStyle && rowStyle.numFmt) || (colStyle && colStyle.numFmt);\n if (numFmt) style.numFmt = numFmt;\n\n const font = (rowStyle && rowStyle.font) || (colStyle && colStyle.font);\n if (font) style.font = font;\n\n const alignment = (rowStyle && rowStyle.alignment) || (colStyle && colStyle.alignment);\n if (alignment) style.alignment = alignment;\n\n const border = (rowStyle && rowStyle.border) || (colStyle && colStyle.border);\n if (border) style.border = border;\n\n const fill = (rowStyle && rowStyle.fill) || (colStyle && colStyle.fill);\n if (fill) style.fill = fill;\n\n const protection = (rowStyle && rowStyle.protection) || (colStyle && colStyle.protection);\n if (protection) style.protection = protection;\n\n return style;\n }\n\n // =========================================================================\n // return the address for this cell\n get address() {\n return this._address;\n }\n\n get row() {\n return this._row.number;\n }\n\n get col() {\n return this._column.number;\n }\n\n get $col$row() {\n return `$${this._column.letter}$${this.row}`;\n }\n\n // =========================================================================\n // Value stuff\n\n get type() {\n return this._value.type;\n }\n\n get effectiveType() {\n return this._value.effectiveType;\n }\n\n toCsvString() {\n return this._value.toCsvString();\n }\n\n // =========================================================================\n // Merge stuff\n\n addMergeRef() {\n this._mergeCount++;\n }\n\n releaseMergeRef() {\n this._mergeCount--;\n }\n\n get isMerged() {\n return this._mergeCount > 0 || this.type === Cell.Types.Merge;\n }\n\n merge(master, ignoreStyle) {\n this._value.release();\n this._value = Value.create(Cell.Types.Merge, this, master);\n if (!ignoreStyle) {\n this.style = master.style;\n }\n }\n\n unmerge() {\n if (this.type === Cell.Types.Merge) {\n this._value.release();\n this._value = Value.create(Cell.Types.Null, this);\n this.style = this._mergeStyle(this._row.style, this._column.style, {});\n }\n }\n\n isMergedTo(master) {\n if (this._value.type !== Cell.Types.Merge) return false;\n return this._value.isMergedTo(master);\n }\n\n get master() {\n if (this.type === Cell.Types.Merge) {\n return this._value.master;\n }\n return this; // an unmerged cell is its own master\n }\n\n get isHyperlink() {\n return this._value.type === Cell.Types.Hyperlink;\n }\n\n get hyperlink() {\n return this._value.hyperlink;\n }\n\n // return the value\n get value() {\n return this._value.value;\n }\n\n // set the value - can be number, string or raw\n set value(v) {\n // special case - merge cells set their master's value\n if (this.type === Cell.Types.Merge) {\n this._value.master.value = v;\n return;\n }\n\n this._value.release();\n\n // assign value\n this._value = Value.create(Value.getType(v), this, v);\n }\n\n get note() {\n return this._comment && this._comment.note;\n }\n\n set note(note) {\n this._comment = new Note(note);\n }\n\n get text() {\n return this._value.toString();\n }\n\n get html() {\n return _.escapeHtml(this.text);\n }\n\n toString() {\n return this.text;\n }\n\n _upgradeToHyperlink(hyperlink) {\n // if this cell is a string, turn it into a Hyperlink\n if (this.type === Cell.Types.String) {\n this._value = Value.create(Cell.Types.Hyperlink, this, {\n text: this._value.value,\n hyperlink,\n });\n }\n }\n\n // =========================================================================\n // Formula stuff\n get formula() {\n return this._value.formula;\n }\n\n get result() {\n return this._value.result;\n }\n\n get formulaType() {\n return this._value.formulaType;\n }\n\n // =========================================================================\n // Name stuff\n get fullAddress() {\n const {worksheet} = this._row;\n return {\n sheetName: worksheet.name,\n address: this.address,\n row: this.row,\n col: this.col,\n };\n }\n\n get name() {\n return this.names[0];\n }\n\n set name(value) {\n this.names = [value];\n }\n\n get names() {\n return this.workbook.definedNames.getNamesEx(this.fullAddress);\n }\n\n set names(value) {\n const {definedNames} = this.workbook;\n definedNames.removeAllNames(this.fullAddress);\n value.forEach(name => {\n definedNames.addEx(this.fullAddress, name);\n });\n }\n\n addName(name) {\n this.workbook.definedNames.addEx(this.fullAddress, name);\n }\n\n removeName(name) {\n this.workbook.definedNames.removeEx(this.fullAddress, name);\n }\n\n removeAllNames() {\n this.workbook.definedNames.removeAllNames(this.fullAddress);\n }\n\n // =========================================================================\n // Data Validation stuff\n get _dataValidations() {\n return this.worksheet.dataValidations;\n }\n\n get dataValidation() {\n return this._dataValidations.find(this.address);\n }\n\n set dataValidation(value) {\n this._dataValidations.add(this.address, value);\n }\n\n // =========================================================================\n // Model stuff\n\n get model() {\n const {model} = this._value;\n model.style = this.style;\n if (this._comment) {\n model.comment = this._comment.model;\n }\n return model;\n }\n\n set model(value) {\n this._value.release();\n this._value = Value.create(value.type, this);\n this._value.model = value;\n\n if (value.comment) {\n switch (value.comment.type) {\n case 'note':\n this._comment = Note.fromModel(value.comment);\n break;\n }\n }\n\n if (value.style) {\n this.style = value.style;\n } else {\n this.style = {};\n }\n }\n}\nCell.Types = Enums.ValueType;\n\n// =============================================================================\n// Internal Value Types\n\nclass NullValue {\n constructor(cell) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Null,\n };\n }\n\n get value() {\n return null;\n }\n\n set value(value) {\n // nothing to do\n }\n\n get type() {\n return Cell.Types.Null;\n }\n\n get effectiveType() {\n return Cell.Types.Null;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return '';\n }\n\n release() {}\n\n toString() {\n return '';\n }\n}\n\nclass NumberValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Number,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Number;\n }\n\n get effectiveType() {\n return Cell.Types.Number;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass StringValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.String;\n }\n\n get effectiveType() {\n return Cell.Types.String;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return `\"${this.model.value.replace(/\"/g, '\"\"')}\"`;\n }\n\n release() {}\n\n toString() {\n return this.model.value;\n }\n}\n\nclass RichTextValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n toString() {\n return this.model.value.richText.map(t => t.text).join('');\n }\n\n get type() {\n return Cell.Types.RichText;\n }\n\n get effectiveType() {\n return Cell.Types.RichText;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return `\"${this.text.replace(/\"/g, '\"\"')}\"`;\n }\n\n release() {}\n}\n\nclass DateValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Date,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Date;\n }\n\n get effectiveType() {\n return Cell.Types.Date;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toISOString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass HyperlinkValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Hyperlink,\n text: value ? value.text : undefined,\n hyperlink: value ? value.hyperlink : undefined,\n };\n if (value && value.tooltip) {\n this.model.tooltip = value.tooltip;\n }\n }\n\n get value() {\n const v = {\n text: this.model.text,\n hyperlink: this.model.hyperlink,\n };\n if (this.model.tooltip) {\n v.tooltip = this.model.tooltip;\n }\n return v;\n }\n\n set value(value) {\n this.model = {\n text: value.text,\n hyperlink: value.hyperlink,\n };\n if (value.tooltip) {\n this.model.tooltip = value.tooltip;\n }\n }\n\n get text() {\n return this.model.text;\n }\n\n set text(value) {\n this.model.text = value;\n }\n\n /*\n get tooltip() {\n return this.model.tooltip;\n }\n\n set tooltip(value) {\n this.model.tooltip = value;\n } */\n\n get hyperlink() {\n return this.model.hyperlink;\n }\n\n set hyperlink(value) {\n this.model.hyperlink = value;\n }\n\n get type() {\n return Cell.Types.Hyperlink;\n }\n\n get effectiveType() {\n return Cell.Types.Hyperlink;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.hyperlink;\n }\n\n release() {}\n\n toString() {\n return this.model.text;\n }\n}\n\nclass MergeValue {\n constructor(cell, master) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Merge,\n master: master ? master.address : undefined,\n };\n this._master = master;\n if (master) {\n master.addMergeRef();\n }\n }\n\n get value() {\n return this._master.value;\n }\n\n set value(value) {\n if (value instanceof Cell) {\n if (this._master) {\n this._master.releaseMergeRef();\n }\n value.addMergeRef();\n this._master = value;\n } else {\n this._master.value = value;\n }\n }\n\n isMergedTo(master) {\n return master === this._master;\n }\n\n get master() {\n return this._master;\n }\n\n get type() {\n return Cell.Types.Merge;\n }\n\n get effectiveType() {\n return this._master.effectiveType;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return '';\n }\n\n release() {\n this._master.releaseMergeRef();\n }\n\n toString() {\n return this.value.toString();\n }\n}\n\nclass FormulaValue {\n constructor(cell, value) {\n this.cell = cell;\n\n this.model = {\n address: cell.address,\n type: Cell.Types.Formula,\n shareType: value ? value.shareType : undefined,\n ref: value ? value.ref : undefined,\n formula: value ? value.formula : undefined,\n sharedFormula: value ? value.sharedFormula : undefined,\n result: value ? value.result : undefined,\n };\n }\n\n _copyModel(model) {\n const copy = {};\n const cp = name => {\n const value = model[name];\n if (value) {\n copy[name] = value;\n }\n };\n cp('formula');\n cp('result');\n cp('ref');\n cp('shareType');\n cp('sharedFormula');\n return copy;\n }\n\n get value() {\n return this._copyModel(this.model);\n }\n\n set value(value) {\n this.model = this._copyModel(value);\n }\n\n validate(value) {\n switch (Value.getType(value)) {\n case Cell.Types.Null:\n case Cell.Types.String:\n case Cell.Types.Number:\n case Cell.Types.Date:\n break;\n case Cell.Types.Hyperlink:\n case Cell.Types.Formula:\n default:\n throw new Error('Cannot process that type of result value');\n }\n }\n\n get dependencies() {\n // find all the ranges and cells mentioned in the formula\n const ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g);\n const cells = this.formula\n .replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g, '')\n .match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}/g);\n return {\n ranges,\n cells,\n };\n }\n\n get formula() {\n return this.model.formula || this._getTranslatedFormula();\n }\n\n set formula(value) {\n this.model.formula = value;\n }\n\n get formulaType() {\n if (this.model.formula) {\n return Enums.FormulaType.Master;\n }\n if (this.model.sharedFormula) {\n return Enums.FormulaType.Shared;\n }\n return Enums.FormulaType.None;\n }\n\n get result() {\n return this.model.result;\n }\n\n set result(value) {\n this.model.result = value;\n }\n\n get type() {\n return Cell.Types.Formula;\n }\n\n get effectiveType() {\n const v = this.model.result;\n if (v === null || v === undefined) {\n return Enums.ValueType.Null;\n }\n if (v instanceof String || typeof v === 'string') {\n return Enums.ValueType.String;\n }\n if (typeof v === 'number') {\n return Enums.ValueType.Number;\n }\n if (v instanceof Date) {\n return Enums.ValueType.Date;\n }\n if (v.text && v.hyperlink) {\n return Enums.ValueType.Hyperlink;\n }\n if (v.formula) {\n return Enums.ValueType.Formula;\n }\n\n return Enums.ValueType.Null;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n _getTranslatedFormula() {\n if (!this._translatedFormula && this.model.sharedFormula) {\n const {worksheet} = this.cell;\n const master = worksheet.findCell(this.model.sharedFormula);\n this._translatedFormula =\n master && slideFormula(master.formula, master.address, this.model.address);\n }\n return this._translatedFormula;\n }\n\n toCsvString() {\n return `${this.model.result || ''}`;\n }\n\n release() {}\n\n toString() {\n return this.model.result ? this.model.result.toString() : '';\n }\n}\n\nclass SharedStringValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.SharedString,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.SharedString;\n }\n\n get effectiveType() {\n return Cell.Types.SharedString;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass BooleanValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Boolean,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Boolean;\n }\n\n get effectiveType() {\n return Cell.Types.Boolean;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value ? 1 : 0;\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass ErrorValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Error,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Error;\n }\n\n get effectiveType() {\n return Cell.Types.Error;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.error.toString();\n }\n}\n\nclass JSONValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value: JSON.stringify(value),\n rawValue: value,\n };\n }\n\n get value() {\n return this.model.rawValue;\n }\n\n set value(value) {\n this.model.rawValue = value;\n this.model.value = JSON.stringify(value);\n }\n\n get type() {\n return Cell.Types.String;\n }\n\n get effectiveType() {\n return Cell.Types.String;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value;\n }\n\n release() {}\n\n toString() {\n return this.model.value;\n }\n}\n\n// Value is a place to hold common static Value type functions\nconst Value = {\n getType(value) {\n if (value === null || value === undefined) {\n return Cell.Types.Null;\n }\n if (value instanceof String || typeof value === 'string') {\n return Cell.Types.String;\n }\n if (typeof value === 'number') {\n return Cell.Types.Number;\n }\n if (typeof value === 'boolean') {\n return Cell.Types.Boolean;\n }\n if (value instanceof Date) {\n return Cell.Types.Date;\n }\n if (value.text && value.hyperlink) {\n return Cell.Types.Hyperlink;\n }\n if (value.formula || value.sharedFormula) {\n return Cell.Types.Formula;\n }\n if (value.richText) {\n return Cell.Types.RichText;\n }\n if (value.sharedString) {\n return Cell.Types.SharedString;\n }\n if (value.error) {\n return Cell.Types.Error;\n }\n return Cell.Types.JSON;\n },\n\n // map valueType to constructor\n types: [\n {t: Cell.Types.Null, f: NullValue},\n {t: Cell.Types.Number, f: NumberValue},\n {t: Cell.Types.String, f: StringValue},\n {t: Cell.Types.Date, f: DateValue},\n {t: Cell.Types.Hyperlink, f: HyperlinkValue},\n {t: Cell.Types.Formula, f: FormulaValue},\n {t: Cell.Types.Merge, f: MergeValue},\n {t: Cell.Types.JSON, f: JSONValue},\n {t: Cell.Types.SharedString, f: SharedStringValue},\n {t: Cell.Types.RichText, f: RichTextValue},\n {t: Cell.Types.Boolean, f: BooleanValue},\n {t: Cell.Types.Error, f: ErrorValue},\n ].reduce((p, t) => {\n p[t.t] = t.f;\n return p;\n }, []),\n\n create(type, cell, value) {\n const T = this.types[type];\n if (!T) {\n throw new Error(`Could not create Value of type ${type}`);\n }\n return new T(cell, value);\n },\n};\n\nmodule.exports = Cell;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/column.js b/node_backend/node_modules/exceljs/dist/es5/doc/column.js new file mode 100644 index 0000000000000000000000000000000000000000..524248fbc648022c95c5e84f57aea7bfdf1f50c6 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/column.js @@ -0,0 +1,274 @@ +'use strict'; + +const _ = require('../utils/under-dash'); +const Enums = require('./enums'); +const colCache = require('../utils/col-cache'); +const DEFAULT_COLUMN_WIDTH = 9; + +// Column defines the column properties for 1 column. +// This includes header rows, widths, key, (style), etc. +// Worksheet will condense the columns as appropriate during serialization +class Column { + constructor(worksheet, number, defn) { + this._worksheet = worksheet; + this._number = number; + if (defn !== false) { + // sometimes defn will follow + this.defn = defn; + } + } + get number() { + return this._number; + } + get worksheet() { + return this._worksheet; + } + get letter() { + return colCache.n2l(this._number); + } + get isCustomWidth() { + return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH; + } + get defn() { + return { + header: this._header, + key: this.key, + width: this.width, + style: this.style, + hidden: this.hidden, + outlineLevel: this.outlineLevel + }; + } + set defn(value) { + if (value) { + this.key = value.key; + this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH; + this.outlineLevel = value.outlineLevel; + if (value.style) { + this.style = value.style; + } else { + this.style = {}; + } + + // headers must be set after style + this.header = value.header; + this._hidden = !!value.hidden; + } else { + delete this._header; + delete this._key; + delete this.width; + this.style = {}; + this.outlineLevel = 0; + } + } + get headers() { + return this._header && this._header instanceof Array ? this._header : [this._header]; + } + get header() { + return this._header; + } + set header(value) { + if (value !== undefined) { + this._header = value; + this.headers.forEach((text, index) => { + this._worksheet.getCell(index + 1, this.number).value = text; + }); + } else { + this._header = undefined; + } + } + get key() { + return this._key; + } + set key(value) { + const column = this._key && this._worksheet.getColumnKey(this._key); + if (column === this) { + this._worksheet.deleteColumnKey(this._key); + } + this._key = value; + if (value) { + this._worksheet.setColumnKey(this._key, this); + } + } + get hidden() { + return !!this._hidden; + } + set hidden(value) { + this._hidden = value; + } + get outlineLevel() { + return this._outlineLevel || 0; + } + set outlineLevel(value) { + this._outlineLevel = value; + } + get collapsed() { + return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol); + } + toString() { + return JSON.stringify({ + key: this.key, + width: this.width, + headers: this.headers.length ? this.headers : undefined + }); + } + equivalentTo(other) { + return this.width === other.width && this.hidden === other.hidden && this.outlineLevel === other.outlineLevel && _.isEqual(this.style, other.style); + } + get isDefault() { + if (this.isCustomWidth) { + return false; + } + if (this.hidden) { + return false; + } + if (this.outlineLevel) { + return false; + } + const s = this.style; + if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) { + return false; + } + return true; + } + get headerCount() { + return this.headers.length; + } + eachCell(options, iteratee) { + const colNumber = this.number; + if (!iteratee) { + iteratee = options; + options = null; + } + this._worksheet.eachRow(options, (row, rowNumber) => { + iteratee(row.getCell(colNumber), rowNumber); + }); + } + get values() { + const v = []; + this.eachCell((cell, rowNumber) => { + if (cell && cell.type !== Enums.ValueType.Null) { + v[rowNumber] = cell.value; + } + }); + return v; + } + set values(v) { + if (!v) { + return; + } + const colNumber = this.number; + let offset = 0; + if (v.hasOwnProperty('0')) { + // assume contiguous array, start at row 1 + offset = 1; + } + v.forEach((value, index) => { + this._worksheet.getCell(index + offset, colNumber).value = value; + }); + } + + // ========================================================================= + // styles + _applyStyle(name, value) { + this.style[name] = value; + this.eachCell(cell => { + cell[name] = value; + }); + return value; + } + get numFmt() { + return this.style.numFmt; + } + set numFmt(value) { + this._applyStyle('numFmt', value); + } + get font() { + return this.style.font; + } + set font(value) { + this._applyStyle('font', value); + } + get alignment() { + return this.style.alignment; + } + set alignment(value) { + this._applyStyle('alignment', value); + } + get protection() { + return this.style.protection; + } + set protection(value) { + this._applyStyle('protection', value); + } + get border() { + return this.style.border; + } + set border(value) { + this._applyStyle('border', value); + } + get fill() { + return this.style.fill; + } + set fill(value) { + this._applyStyle('fill', value); + } + + // ============================================================================= + // static functions + + static toModel(columns) { + // Convert array of Column into compressed list cols + const cols = []; + let col = null; + if (columns) { + columns.forEach((column, index) => { + if (column.isDefault) { + if (col) { + col = null; + } + } else if (!col || !column.equivalentTo(col)) { + col = { + min: index + 1, + max: index + 1, + width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH, + style: column.style, + isCustomWidth: column.isCustomWidth, + hidden: column.hidden, + outlineLevel: column.outlineLevel, + collapsed: column.collapsed + }; + cols.push(col); + } else { + col.max = index + 1; + } + }); + } + return cols.length ? cols : undefined; + } + static fromModel(worksheet, cols) { + cols = cols || []; + const columns = []; + let count = 1; + let index = 0; + /** + * sort cols by min + * If it is not sorted, the subsequent column configuration will be overwritten + * */ + cols = cols.sort(function (pre, next) { + return pre.min - next.min; + }); + while (index < cols.length) { + const col = cols[index++]; + while (count < col.min) { + columns.push(new Column(worksheet, count++)); + } + while (count <= col.max) { + columns.push(new Column(worksheet, count++, col)); + } + } + return columns.length ? columns : null; + } +} +module.exports = Column; +//# sourceMappingURL=column.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/column.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/column.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2bf2609b5a9dec05db97fdc30be80195b6996ddc --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/column.js.map @@ -0,0 +1 @@ +{"version":3,"file":"column.js","names":["_","require","Enums","colCache","DEFAULT_COLUMN_WIDTH","Column","constructor","worksheet","number","defn","_worksheet","_number","letter","n2l","isCustomWidth","width","undefined","header","_header","key","style","hidden","outlineLevel","value","_hidden","_key","headers","Array","forEach","text","index","getCell","column","getColumnKey","deleteColumnKey","setColumnKey","_outlineLevel","collapsed","properties","outlineLevelCol","toString","JSON","stringify","length","equivalentTo","other","isEqual","isDefault","s","font","numFmt","alignment","border","fill","protection","headerCount","eachCell","options","iteratee","colNumber","eachRow","row","rowNumber","values","v","cell","type","ValueType","Null","offset","hasOwnProperty","_applyStyle","name","toModel","columns","cols","col","min","max","push","fromModel","count","sort","pre","next","module","exports"],"sources":["../../../lib/doc/column.js"],"sourcesContent":["'use strict';\n\nconst _ = require('../utils/under-dash');\n\nconst Enums = require('./enums');\nconst colCache = require('../utils/col-cache');\n\nconst DEFAULT_COLUMN_WIDTH = 9;\n\n// Column defines the column properties for 1 column.\n// This includes header rows, widths, key, (style), etc.\n// Worksheet will condense the columns as appropriate during serialization\nclass Column {\n constructor(worksheet, number, defn) {\n this._worksheet = worksheet;\n this._number = number;\n if (defn !== false) {\n // sometimes defn will follow\n this.defn = defn;\n }\n }\n\n get number() {\n return this._number;\n }\n\n get worksheet() {\n return this._worksheet;\n }\n\n get letter() {\n return colCache.n2l(this._number);\n }\n\n get isCustomWidth() {\n return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH;\n }\n\n get defn() {\n return {\n header: this._header,\n key: this.key,\n width: this.width,\n style: this.style,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n };\n }\n\n set defn(value) {\n if (value) {\n this.key = value.key;\n this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH;\n this.outlineLevel = value.outlineLevel;\n if (value.style) {\n this.style = value.style;\n } else {\n this.style = {};\n }\n\n // headers must be set after style\n this.header = value.header;\n this._hidden = !!value.hidden;\n } else {\n delete this._header;\n delete this._key;\n delete this.width;\n this.style = {};\n this.outlineLevel = 0;\n }\n }\n\n get headers() {\n return this._header && this._header instanceof Array ? this._header : [this._header];\n }\n\n get header() {\n return this._header;\n }\n\n set header(value) {\n if (value !== undefined) {\n this._header = value;\n this.headers.forEach((text, index) => {\n this._worksheet.getCell(index + 1, this.number).value = text;\n });\n } else {\n this._header = undefined;\n }\n }\n\n get key() {\n return this._key;\n }\n\n set key(value) {\n const column = this._key && this._worksheet.getColumnKey(this._key);\n if (column === this) {\n this._worksheet.deleteColumnKey(this._key);\n }\n\n this._key = value;\n if (value) {\n this._worksheet.setColumnKey(this._key, this);\n }\n }\n\n get hidden() {\n return !!this._hidden;\n }\n\n set hidden(value) {\n this._hidden = value;\n }\n\n get outlineLevel() {\n return this._outlineLevel || 0;\n }\n\n set outlineLevel(value) {\n this._outlineLevel = value;\n }\n\n get collapsed() {\n return !!(\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol\n );\n }\n\n toString() {\n return JSON.stringify({\n key: this.key,\n width: this.width,\n headers: this.headers.length ? this.headers : undefined,\n });\n }\n\n equivalentTo(other) {\n return (\n this.width === other.width &&\n this.hidden === other.hidden &&\n this.outlineLevel === other.outlineLevel &&\n _.isEqual(this.style, other.style)\n );\n }\n\n get isDefault() {\n if (this.isCustomWidth) {\n return false;\n }\n if (this.hidden) {\n return false;\n }\n if (this.outlineLevel) {\n return false;\n }\n const s = this.style;\n if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) {\n return false;\n }\n return true;\n }\n\n get headerCount() {\n return this.headers.length;\n }\n\n eachCell(options, iteratee) {\n const colNumber = this.number;\n if (!iteratee) {\n iteratee = options;\n options = null;\n }\n this._worksheet.eachRow(options, (row, rowNumber) => {\n iteratee(row.getCell(colNumber), rowNumber);\n });\n }\n\n get values() {\n const v = [];\n this.eachCell((cell, rowNumber) => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n v[rowNumber] = cell.value;\n }\n });\n return v;\n }\n\n set values(v) {\n if (!v) {\n return;\n }\n const colNumber = this.number;\n let offset = 0;\n if (v.hasOwnProperty('0')) {\n // assume contiguous array, start at row 1\n offset = 1;\n }\n v.forEach((value, index) => {\n this._worksheet.getCell(index + offset, colNumber).value = value;\n });\n }\n\n // =========================================================================\n // styles\n _applyStyle(name, value) {\n this.style[name] = value;\n this.eachCell(cell => {\n cell[name] = value;\n });\n return value;\n }\n\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this._applyStyle('numFmt', value);\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this._applyStyle('font', value);\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this._applyStyle('alignment', value);\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this._applyStyle('protection', value);\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this._applyStyle('border', value);\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this._applyStyle('fill', value);\n }\n\n // =============================================================================\n // static functions\n\n static toModel(columns) {\n // Convert array of Column into compressed list cols\n const cols = [];\n let col = null;\n if (columns) {\n columns.forEach((column, index) => {\n if (column.isDefault) {\n if (col) {\n col = null;\n }\n } else if (!col || !column.equivalentTo(col)) {\n col = {\n min: index + 1,\n max: index + 1,\n width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH,\n style: column.style,\n isCustomWidth: column.isCustomWidth,\n hidden: column.hidden,\n outlineLevel: column.outlineLevel,\n collapsed: column.collapsed,\n };\n cols.push(col);\n } else {\n col.max = index + 1;\n }\n });\n }\n return cols.length ? cols : undefined;\n }\n\n static fromModel(worksheet, cols) {\n cols = cols || [];\n const columns = [];\n let count = 1;\n let index = 0;\n /**\n * sort cols by min\n * If it is not sorted, the subsequent column configuration will be overwritten\n * */\n cols = cols.sort(function(pre, next) {\n return pre.min - next.min;\n });\n while (index < cols.length) {\n const col = cols[index++];\n while (count < col.min) {\n columns.push(new Column(worksheet, count++));\n }\n while (count <= col.max) {\n columns.push(new Column(worksheet, count++, col));\n }\n }\n return columns.length ? columns : null;\n }\n}\n\nmodule.exports = Column;\n"],"mappings":"AAAA,YAAY;;AAEZ,MAAMA,CAAC,GAAGC,OAAO,CAAC,qBAAqB,CAAC;AAExC,MAAMC,KAAK,GAAGD,OAAO,CAAC,SAAS,CAAC;AAChC,MAAME,QAAQ,GAAGF,OAAO,CAAC,oBAAoB,CAAC;AAE9C,MAAMG,oBAAoB,GAAG,CAAC;;AAE9B;AACA;AACA;AACA,MAAMC,MAAM,CAAC;EACXC,WAAWA,CAACC,SAAS,EAAEC,MAAM,EAAEC,IAAI,EAAE;IACnC,IAAI,CAACC,UAAU,GAAGH,SAAS;IAC3B,IAAI,CAACI,OAAO,GAAGH,MAAM;IACrB,IAAIC,IAAI,KAAK,KAAK,EAAE;MAClB;MACA,IAAI,CAACA,IAAI,GAAGA,IAAI;IAClB;EACF;EAEA,IAAID,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAACG,OAAO;EACrB;EAEA,IAAIJ,SAASA,CAAA,EAAG;IACd,OAAO,IAAI,CAACG,UAAU;EACxB;EAEA,IAAIE,MAAMA,CAAA,EAAG;IACX,OAAOT,QAAQ,CAACU,GAAG,CAAC,IAAI,CAACF,OAAO,CAAC;EACnC;EAEA,IAAIG,aAAaA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACC,KAAK,KAAKC,SAAS,IAAI,IAAI,CAACD,KAAK,KAAKX,oBAAoB;EACxE;EAEA,IAAIK,IAAIA,CAAA,EAAG;IACT,OAAO;MACLQ,MAAM,EAAE,IAAI,CAACC,OAAO;MACpBC,GAAG,EAAE,IAAI,CAACA,GAAG;MACbJ,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBK,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBC,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBC,YAAY,EAAE,IAAI,CAACA;IACrB,CAAC;EACH;EAEA,IAAIb,IAAIA,CAACc,KAAK,EAAE;IACd,IAAIA,KAAK,EAAE;MACT,IAAI,CAACJ,GAAG,GAAGI,KAAK,CAACJ,GAAG;MACpB,IAAI,CAACJ,KAAK,GAAGQ,KAAK,CAACR,KAAK,KAAKC,SAAS,GAAGO,KAAK,CAACR,KAAK,GAAGX,oBAAoB;MAC3E,IAAI,CAACkB,YAAY,GAAGC,KAAK,CAACD,YAAY;MACtC,IAAIC,KAAK,CAACH,KAAK,EAAE;QACf,IAAI,CAACA,KAAK,GAAGG,KAAK,CAACH,KAAK;MAC1B,CAAC,MAAM;QACL,IAAI,CAACA,KAAK,GAAG,CAAC,CAAC;MACjB;;MAEA;MACA,IAAI,CAACH,MAAM,GAAGM,KAAK,CAACN,MAAM;MAC1B,IAAI,CAACO,OAAO,GAAG,CAAC,CAACD,KAAK,CAACF,MAAM;IAC/B,CAAC,MAAM;MACL,OAAO,IAAI,CAACH,OAAO;MACnB,OAAO,IAAI,CAACO,IAAI;MAChB,OAAO,IAAI,CAACV,KAAK;MACjB,IAAI,CAACK,KAAK,GAAG,CAAC,CAAC;MACf,IAAI,CAACE,YAAY,GAAG,CAAC;IACvB;EACF;EAEA,IAAII,OAAOA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACR,OAAO,IAAI,IAAI,CAACA,OAAO,YAAYS,KAAK,GAAG,IAAI,CAACT,OAAO,GAAG,CAAC,IAAI,CAACA,OAAO,CAAC;EACtF;EAEA,IAAID,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAACC,OAAO;EACrB;EAEA,IAAID,MAAMA,CAACM,KAAK,EAAE;IAChB,IAAIA,KAAK,KAAKP,SAAS,EAAE;MACvB,IAAI,CAACE,OAAO,GAAGK,KAAK;MACpB,IAAI,CAACG,OAAO,CAACE,OAAO,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;QACpC,IAAI,CAACpB,UAAU,CAACqB,OAAO,CAACD,KAAK,GAAG,CAAC,EAAE,IAAI,CAACtB,MAAM,CAAC,CAACe,KAAK,GAAGM,IAAI;MAC9D,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,IAAI,CAACX,OAAO,GAAGF,SAAS;IAC1B;EACF;EAEA,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,IAAI,CAACM,IAAI;EAClB;EAEA,IAAIN,GAAGA,CAACI,KAAK,EAAE;IACb,MAAMS,MAAM,GAAG,IAAI,CAACP,IAAI,IAAI,IAAI,CAACf,UAAU,CAACuB,YAAY,CAAC,IAAI,CAACR,IAAI,CAAC;IACnE,IAAIO,MAAM,KAAK,IAAI,EAAE;MACnB,IAAI,CAACtB,UAAU,CAACwB,eAAe,CAAC,IAAI,CAACT,IAAI,CAAC;IAC5C;IAEA,IAAI,CAACA,IAAI,GAAGF,KAAK;IACjB,IAAIA,KAAK,EAAE;MACT,IAAI,CAACb,UAAU,CAACyB,YAAY,CAAC,IAAI,CAACV,IAAI,EAAE,IAAI,CAAC;IAC/C;EACF;EAEA,IAAIJ,MAAMA,CAAA,EAAG;IACX,OAAO,CAAC,CAAC,IAAI,CAACG,OAAO;EACvB;EAEA,IAAIH,MAAMA,CAACE,KAAK,EAAE;IAChB,IAAI,CAACC,OAAO,GAAGD,KAAK;EACtB;EAEA,IAAID,YAAYA,CAAA,EAAG;IACjB,OAAO,IAAI,CAACc,aAAa,IAAI,CAAC;EAChC;EAEA,IAAId,YAAYA,CAACC,KAAK,EAAE;IACtB,IAAI,CAACa,aAAa,GAAGb,KAAK;EAC5B;EAEA,IAAIc,SAASA,CAAA,EAAG;IACd,OAAO,CAAC,EACN,IAAI,CAACD,aAAa,IAAI,IAAI,CAACA,aAAa,IAAI,IAAI,CAAC1B,UAAU,CAAC4B,UAAU,CAACC,eAAe,CACvF;EACH;EAEAC,QAAQA,CAAA,EAAG;IACT,OAAOC,IAAI,CAACC,SAAS,CAAC;MACpBvB,GAAG,EAAE,IAAI,CAACA,GAAG;MACbJ,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBW,OAAO,EAAE,IAAI,CAACA,OAAO,CAACiB,MAAM,GAAG,IAAI,CAACjB,OAAO,GAAGV;IAChD,CAAC,CAAC;EACJ;EAEA4B,YAAYA,CAACC,KAAK,EAAE;IAClB,OACE,IAAI,CAAC9B,KAAK,KAAK8B,KAAK,CAAC9B,KAAK,IAC1B,IAAI,CAACM,MAAM,KAAKwB,KAAK,CAACxB,MAAM,IAC5B,IAAI,CAACC,YAAY,KAAKuB,KAAK,CAACvB,YAAY,IACxCtB,CAAC,CAAC8C,OAAO,CAAC,IAAI,CAAC1B,KAAK,EAAEyB,KAAK,CAACzB,KAAK,CAAC;EAEtC;EAEA,IAAI2B,SAASA,CAAA,EAAG;IACd,IAAI,IAAI,CAACjC,aAAa,EAAE;MACtB,OAAO,KAAK;IACd;IACA,IAAI,IAAI,CAACO,MAAM,EAAE;MACf,OAAO,KAAK;IACd;IACA,IAAI,IAAI,CAACC,YAAY,EAAE;MACrB,OAAO,KAAK;IACd;IACA,MAAM0B,CAAC,GAAG,IAAI,CAAC5B,KAAK;IACpB,IAAI4B,CAAC,KAAKA,CAAC,CAACC,IAAI,IAAID,CAAC,CAACE,MAAM,IAAIF,CAAC,CAACG,SAAS,IAAIH,CAAC,CAACI,MAAM,IAAIJ,CAAC,CAACK,IAAI,IAAIL,CAAC,CAACM,UAAU,CAAC,EAAE;MAClF,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb;EAEA,IAAIC,WAAWA,CAAA,EAAG;IAChB,OAAO,IAAI,CAAC7B,OAAO,CAACiB,MAAM;EAC5B;EAEAa,QAAQA,CAACC,OAAO,EAAEC,QAAQ,EAAE;IAC1B,MAAMC,SAAS,GAAG,IAAI,CAACnD,MAAM;IAC7B,IAAI,CAACkD,QAAQ,EAAE;MACbA,QAAQ,GAAGD,OAAO;MAClBA,OAAO,GAAG,IAAI;IAChB;IACA,IAAI,CAAC/C,UAAU,CAACkD,OAAO,CAACH,OAAO,EAAE,CAACI,GAAG,EAAEC,SAAS,KAAK;MACnDJ,QAAQ,CAACG,GAAG,CAAC9B,OAAO,CAAC4B,SAAS,CAAC,EAAEG,SAAS,CAAC;IAC7C,CAAC,CAAC;EACJ;EAEA,IAAIC,MAAMA,CAAA,EAAG;IACX,MAAMC,CAAC,GAAG,EAAE;IACZ,IAAI,CAACR,QAAQ,CAAC,CAACS,IAAI,EAAEH,SAAS,KAAK;MACjC,IAAIG,IAAI,IAAIA,IAAI,CAACC,IAAI,KAAKhE,KAAK,CAACiE,SAAS,CAACC,IAAI,EAAE;QAC9CJ,CAAC,CAACF,SAAS,CAAC,GAAGG,IAAI,CAAC1C,KAAK;MAC3B;IACF,CAAC,CAAC;IACF,OAAOyC,CAAC;EACV;EAEA,IAAID,MAAMA,CAACC,CAAC,EAAE;IACZ,IAAI,CAACA,CAAC,EAAE;MACN;IACF;IACA,MAAML,SAAS,GAAG,IAAI,CAACnD,MAAM;IAC7B,IAAI6D,MAAM,GAAG,CAAC;IACd,IAAIL,CAAC,CAACM,cAAc,CAAC,GAAG,CAAC,EAAE;MACzB;MACAD,MAAM,GAAG,CAAC;IACZ;IACAL,CAAC,CAACpC,OAAO,CAAC,CAACL,KAAK,EAAEO,KAAK,KAAK;MAC1B,IAAI,CAACpB,UAAU,CAACqB,OAAO,CAACD,KAAK,GAAGuC,MAAM,EAAEV,SAAS,CAAC,CAACpC,KAAK,GAAGA,KAAK;IAClE,CAAC,CAAC;EACJ;;EAEA;EACA;EACAgD,WAAWA,CAACC,IAAI,EAAEjD,KAAK,EAAE;IACvB,IAAI,CAACH,KAAK,CAACoD,IAAI,CAAC,GAAGjD,KAAK;IACxB,IAAI,CAACiC,QAAQ,CAACS,IAAI,IAAI;MACpBA,IAAI,CAACO,IAAI,CAAC,GAAGjD,KAAK;IACpB,CAAC,CAAC;IACF,OAAOA,KAAK;EACd;EAEA,IAAI2B,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAAC9B,KAAK,CAAC8B,MAAM;EAC1B;EAEA,IAAIA,MAAMA,CAAC3B,KAAK,EAAE;IAChB,IAAI,CAACgD,WAAW,CAAC,QAAQ,EAAEhD,KAAK,CAAC;EACnC;EAEA,IAAI0B,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAAC7B,KAAK,CAAC6B,IAAI;EACxB;EAEA,IAAIA,IAAIA,CAAC1B,KAAK,EAAE;IACd,IAAI,CAACgD,WAAW,CAAC,MAAM,EAAEhD,KAAK,CAAC;EACjC;EAEA,IAAI4B,SAASA,CAAA,EAAG;IACd,OAAO,IAAI,CAAC/B,KAAK,CAAC+B,SAAS;EAC7B;EAEA,IAAIA,SAASA,CAAC5B,KAAK,EAAE;IACnB,IAAI,CAACgD,WAAW,CAAC,WAAW,EAAEhD,KAAK,CAAC;EACtC;EAEA,IAAI+B,UAAUA,CAAA,EAAG;IACf,OAAO,IAAI,CAAClC,KAAK,CAACkC,UAAU;EAC9B;EAEA,IAAIA,UAAUA,CAAC/B,KAAK,EAAE;IACpB,IAAI,CAACgD,WAAW,CAAC,YAAY,EAAEhD,KAAK,CAAC;EACvC;EAEA,IAAI6B,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAAChC,KAAK,CAACgC,MAAM;EAC1B;EAEA,IAAIA,MAAMA,CAAC7B,KAAK,EAAE;IAChB,IAAI,CAACgD,WAAW,CAAC,QAAQ,EAAEhD,KAAK,CAAC;EACnC;EAEA,IAAI8B,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACjC,KAAK,CAACiC,IAAI;EACxB;EAEA,IAAIA,IAAIA,CAAC9B,KAAK,EAAE;IACd,IAAI,CAACgD,WAAW,CAAC,MAAM,EAAEhD,KAAK,CAAC;EACjC;;EAEA;EACA;;EAEA,OAAOkD,OAAOA,CAACC,OAAO,EAAE;IACtB;IACA,MAAMC,IAAI,GAAG,EAAE;IACf,IAAIC,GAAG,GAAG,IAAI;IACd,IAAIF,OAAO,EAAE;MACXA,OAAO,CAAC9C,OAAO,CAAC,CAACI,MAAM,EAAEF,KAAK,KAAK;QACjC,IAAIE,MAAM,CAACe,SAAS,EAAE;UACpB,IAAI6B,GAAG,EAAE;YACPA,GAAG,GAAG,IAAI;UACZ;QACF,CAAC,MAAM,IAAI,CAACA,GAAG,IAAI,CAAC5C,MAAM,CAACY,YAAY,CAACgC,GAAG,CAAC,EAAE;UAC5CA,GAAG,GAAG;YACJC,GAAG,EAAE/C,KAAK,GAAG,CAAC;YACdgD,GAAG,EAAEhD,KAAK,GAAG,CAAC;YACdf,KAAK,EAAEiB,MAAM,CAACjB,KAAK,KAAKC,SAAS,GAAGgB,MAAM,CAACjB,KAAK,GAAGX,oBAAoB;YACvEgB,KAAK,EAAEY,MAAM,CAACZ,KAAK;YACnBN,aAAa,EAAEkB,MAAM,CAAClB,aAAa;YACnCO,MAAM,EAAEW,MAAM,CAACX,MAAM;YACrBC,YAAY,EAAEU,MAAM,CAACV,YAAY;YACjCe,SAAS,EAAEL,MAAM,CAACK;UACpB,CAAC;UACDsC,IAAI,CAACI,IAAI,CAACH,GAAG,CAAC;QAChB,CAAC,MAAM;UACLA,GAAG,CAACE,GAAG,GAAGhD,KAAK,GAAG,CAAC;QACrB;MACF,CAAC,CAAC;IACJ;IACA,OAAO6C,IAAI,CAAChC,MAAM,GAAGgC,IAAI,GAAG3D,SAAS;EACvC;EAEA,OAAOgE,SAASA,CAACzE,SAAS,EAAEoE,IAAI,EAAE;IAChCA,IAAI,GAAGA,IAAI,IAAI,EAAE;IACjB,MAAMD,OAAO,GAAG,EAAE;IAClB,IAAIO,KAAK,GAAG,CAAC;IACb,IAAInD,KAAK,GAAG,CAAC;IACb;AACJ;AACA;AACA;IACI6C,IAAI,GAAGA,IAAI,CAACO,IAAI,CAAC,UAASC,GAAG,EAAEC,IAAI,EAAG;MACpC,OAAOD,GAAG,CAACN,GAAG,GAAGO,IAAI,CAACP,GAAG;IAC3B,CAAC,CAAC;IACF,OAAO/C,KAAK,GAAG6C,IAAI,CAAChC,MAAM,EAAE;MAC1B,MAAMiC,GAAG,GAAGD,IAAI,CAAC7C,KAAK,EAAE,CAAC;MACzB,OAAOmD,KAAK,GAAGL,GAAG,CAACC,GAAG,EAAE;QACtBH,OAAO,CAACK,IAAI,CAAC,IAAI1E,MAAM,CAACE,SAAS,EAAE0E,KAAK,EAAE,CAAC,CAAC;MAC9C;MACA,OAAOA,KAAK,IAAIL,GAAG,CAACE,GAAG,EAAE;QACvBJ,OAAO,CAACK,IAAI,CAAC,IAAI1E,MAAM,CAACE,SAAS,EAAE0E,KAAK,EAAE,EAAEL,GAAG,CAAC,CAAC;MACnD;IACF;IACA,OAAOF,OAAO,CAAC/B,MAAM,GAAG+B,OAAO,GAAG,IAAI;EACxC;AACF;AAEAW,MAAM,CAACC,OAAO,GAAGjF,MAAM"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/data-validations.js b/node_backend/node_modules/exceljs/dist/es5/doc/data-validations.js new file mode 100644 index 0000000000000000000000000000000000000000..c8912f7aa7b84a1334d64d1ac09fdc129c3d5412 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/data-validations.js @@ -0,0 +1,18 @@ +"use strict"; + +class DataValidations { + constructor(model) { + this.model = model || {}; + } + add(address, validation) { + return this.model[address] = validation; + } + find(address) { + return this.model[address]; + } + remove(address) { + this.model[address] = undefined; + } +} +module.exports = DataValidations; +//# sourceMappingURL=data-validations.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/data-validations.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/data-validations.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3660a71dee96df9700ac71ffb5ab45fe6511bbdf --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/data-validations.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-validations.js","names":["DataValidations","constructor","model","add","address","validation","find","remove","undefined","module","exports"],"sources":["../../../lib/doc/data-validations.js"],"sourcesContent":["class DataValidations {\n constructor(model) {\n this.model = model || {};\n }\n\n add(address, validation) {\n return (this.model[address] = validation);\n }\n\n find(address) {\n return this.model[address];\n }\n\n remove(address) {\n this.model[address] = undefined;\n }\n}\n\nmodule.exports = DataValidations;\n"],"mappings":";;AAAA,MAAMA,eAAe,CAAC;EACpBC,WAAWA,CAACC,KAAK,EAAE;IACjB,IAAI,CAACA,KAAK,GAAGA,KAAK,IAAI,CAAC,CAAC;EAC1B;EAEAC,GAAGA,CAACC,OAAO,EAAEC,UAAU,EAAE;IACvB,OAAQ,IAAI,CAACH,KAAK,CAACE,OAAO,CAAC,GAAGC,UAAU;EAC1C;EAEAC,IAAIA,CAACF,OAAO,EAAE;IACZ,OAAO,IAAI,CAACF,KAAK,CAACE,OAAO,CAAC;EAC5B;EAEAG,MAAMA,CAACH,OAAO,EAAE;IACd,IAAI,CAACF,KAAK,CAACE,OAAO,CAAC,GAAGI,SAAS;EACjC;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGV,eAAe"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/defined-names.js b/node_backend/node_modules/exceljs/dist/es5/doc/defined-names.js new file mode 100644 index 0000000000000000000000000000000000000000..76de5603b27efb8f6d2fb5cd6ac0bc83bd6bc139 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/defined-names.js @@ -0,0 +1,173 @@ +'use strict'; + +const _ = require('../utils/under-dash'); +const colCache = require('../utils/col-cache'); +const CellMatrix = require('../utils/cell-matrix'); +const Range = require('./range'); +const rangeRegexp = /[$](\w+)[$](\d+)(:[$](\w+)[$](\d+))?/; +class DefinedNames { + constructor() { + this.matrixMap = {}; + } + getMatrix(name) { + const matrix = this.matrixMap[name] || (this.matrixMap[name] = new CellMatrix()); + return matrix; + } + + // add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2 + add(locStr, name) { + const location = colCache.decodeEx(locStr); + this.addEx(location, name); + } + addEx(location, name) { + const matrix = this.getMatrix(name); + if (location.top) { + for (let col = location.left; col <= location.right; col++) { + for (let row = location.top; row <= location.bottom; row++) { + const address = { + sheetName: location.sheetName, + address: colCache.n2l(col) + row, + row, + col + }; + matrix.addCellEx(address); + } + } + } else { + matrix.addCellEx(location); + } + } + remove(locStr, name) { + const location = colCache.decodeEx(locStr); + this.removeEx(location, name); + } + removeEx(location, name) { + const matrix = this.getMatrix(name); + matrix.removeCellEx(location); + } + removeAllNames(location) { + _.each(this.matrixMap, matrix => { + matrix.removeCellEx(location); + }); + } + forEach(callback) { + _.each(this.matrixMap, (matrix, name) => { + matrix.forEach(cell => { + callback(name, cell); + }); + }); + } + + // get all the names of a cell + getNames(addressStr) { + return this.getNamesEx(colCache.decodeEx(addressStr)); + } + getNamesEx(address) { + return _.map(this.matrixMap, (matrix, name) => matrix.findCellEx(address) && name).filter(Boolean); + } + _explore(matrix, cell) { + cell.mark = false; + const { + sheetName + } = cell; + const range = new Range(cell.row, cell.col, cell.row, cell.col, sheetName); + let x; + let y; + + // grow vertical - only one col to worry about + function vGrow(yy, edge) { + const c = matrix.findCellAt(sheetName, yy, cell.col); + if (!c || !c.mark) { + return false; + } + range[edge] = yy; + c.mark = false; + return true; + } + for (y = cell.row - 1; vGrow(y, 'top'); y--); + for (y = cell.row + 1; vGrow(y, 'bottom'); y++); + + // grow horizontal - ensure all rows can grow + function hGrow(xx, edge) { + const cells = []; + for (y = range.top; y <= range.bottom; y++) { + const c = matrix.findCellAt(sheetName, y, xx); + if (c && c.mark) { + cells.push(c); + } else { + return false; + } + } + range[edge] = xx; + for (let i = 0; i < cells.length; i++) { + cells[i].mark = false; + } + return true; + } + for (x = cell.col - 1; hGrow(x, 'left'); x--); + for (x = cell.col + 1; hGrow(x, 'right'); x++); + return range; + } + getRanges(name, matrix) { + matrix = matrix || this.matrixMap[name]; + if (!matrix) { + return { + name, + ranges: [] + }; + } + + // mark and sweep! + matrix.forEach(cell => { + cell.mark = true; + }); + const ranges = matrix.map(cell => cell.mark && this._explore(matrix, cell)).filter(Boolean).map(range => range.$shortRange); + return { + name, + ranges + }; + } + normaliseMatrix(matrix, sheetName) { + // some of the cells might have shifted on specified sheet + // need to reassign rows, cols + matrix.forEachInSheet(sheetName, (cell, row, col) => { + if (cell) { + if (cell.row !== row || cell.col !== col) { + cell.row = row; + cell.col = col; + cell.address = colCache.n2l(col) + row; + } + } + }); + } + spliceRows(sheetName, start, numDelete, numInsert) { + _.each(this.matrixMap, matrix => { + matrix.spliceRows(sheetName, start, numDelete, numInsert); + this.normaliseMatrix(matrix, sheetName); + }); + } + spliceColumns(sheetName, start, numDelete, numInsert) { + _.each(this.matrixMap, matrix => { + matrix.spliceColumns(sheetName, start, numDelete, numInsert); + this.normaliseMatrix(matrix, sheetName); + }); + } + get model() { + // To get names per cell - just iterate over all names finding cells if they exist + return _.map(this.matrixMap, (matrix, name) => this.getRanges(name, matrix)).filter(definedName => definedName.ranges.length); + } + set model(value) { + // value is [ { name, ranges }, ... ] + const matrixMap = this.matrixMap = {}; + value.forEach(definedName => { + const matrix = matrixMap[definedName.name] = new CellMatrix(); + definedName.ranges.forEach(rangeStr => { + if (rangeRegexp.test(rangeStr.split('!').pop() || '')) { + matrix.addCell(rangeStr); + } + }); + }); + } +} +module.exports = DefinedNames; +//# sourceMappingURL=defined-names.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/defined-names.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/defined-names.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a43a18320467bce7cb398f53d7fbb8c09c3d4b59 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/defined-names.js.map @@ -0,0 +1 @@ +{"version":3,"file":"defined-names.js","names":["_","require","colCache","CellMatrix","Range","rangeRegexp","DefinedNames","constructor","matrixMap","getMatrix","name","matrix","add","locStr","location","decodeEx","addEx","top","col","left","right","row","bottom","address","sheetName","n2l","addCellEx","remove","removeEx","removeCellEx","removeAllNames","each","forEach","callback","cell","getNames","addressStr","getNamesEx","map","findCellEx","filter","Boolean","_explore","mark","range","x","y","vGrow","yy","edge","c","findCellAt","hGrow","xx","cells","push","i","length","getRanges","ranges","$shortRange","normaliseMatrix","forEachInSheet","spliceRows","start","numDelete","numInsert","spliceColumns","model","definedName","value","rangeStr","test","split","pop","addCell","module","exports"],"sources":["../../../lib/doc/defined-names.js"],"sourcesContent":["'use strict';\n\nconst _ = require('../utils/under-dash');\nconst colCache = require('../utils/col-cache');\nconst CellMatrix = require('../utils/cell-matrix');\nconst Range = require('./range');\n\nconst rangeRegexp = /[$](\\w+)[$](\\d+)(:[$](\\w+)[$](\\d+))?/;\n\nclass DefinedNames {\n constructor() {\n this.matrixMap = {};\n }\n\n getMatrix(name) {\n const matrix = this.matrixMap[name] || (this.matrixMap[name] = new CellMatrix());\n return matrix;\n }\n\n // add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2\n add(locStr, name) {\n const location = colCache.decodeEx(locStr);\n this.addEx(location, name);\n }\n\n addEx(location, name) {\n const matrix = this.getMatrix(name);\n if (location.top) {\n for (let col = location.left; col <= location.right; col++) {\n for (let row = location.top; row <= location.bottom; row++) {\n const address = {\n sheetName: location.sheetName,\n address: colCache.n2l(col) + row,\n row,\n col,\n };\n\n matrix.addCellEx(address);\n }\n }\n } else {\n matrix.addCellEx(location);\n }\n }\n\n remove(locStr, name) {\n const location = colCache.decodeEx(locStr);\n this.removeEx(location, name);\n }\n\n removeEx(location, name) {\n const matrix = this.getMatrix(name);\n matrix.removeCellEx(location);\n }\n\n removeAllNames(location) {\n _.each(this.matrixMap, matrix => {\n matrix.removeCellEx(location);\n });\n }\n\n forEach(callback) {\n _.each(this.matrixMap, (matrix, name) => {\n matrix.forEach(cell => {\n callback(name, cell);\n });\n });\n }\n\n // get all the names of a cell\n getNames(addressStr) {\n return this.getNamesEx(colCache.decodeEx(addressStr));\n }\n\n getNamesEx(address) {\n return _.map(this.matrixMap, (matrix, name) => matrix.findCellEx(address) && name).filter(\n Boolean\n );\n }\n\n _explore(matrix, cell) {\n cell.mark = false;\n const {sheetName} = cell;\n\n const range = new Range(cell.row, cell.col, cell.row, cell.col, sheetName);\n let x;\n let y;\n\n // grow vertical - only one col to worry about\n function vGrow(yy, edge) {\n const c = matrix.findCellAt(sheetName, yy, cell.col);\n if (!c || !c.mark) {\n return false;\n }\n range[edge] = yy;\n c.mark = false;\n return true;\n }\n for (y = cell.row - 1; vGrow(y, 'top'); y--);\n for (y = cell.row + 1; vGrow(y, 'bottom'); y++);\n\n // grow horizontal - ensure all rows can grow\n function hGrow(xx, edge) {\n const cells = [];\n for (y = range.top; y <= range.bottom; y++) {\n const c = matrix.findCellAt(sheetName, y, xx);\n if (c && c.mark) {\n cells.push(c);\n } else {\n return false;\n }\n }\n range[edge] = xx;\n for (let i = 0; i < cells.length; i++) {\n cells[i].mark = false;\n }\n return true;\n }\n for (x = cell.col - 1; hGrow(x, 'left'); x--);\n for (x = cell.col + 1; hGrow(x, 'right'); x++);\n\n return range;\n }\n\n getRanges(name, matrix) {\n matrix = matrix || this.matrixMap[name];\n\n if (!matrix) {\n return {name, ranges: []};\n }\n\n // mark and sweep!\n matrix.forEach(cell => {\n cell.mark = true;\n });\n const ranges = matrix\n .map(cell => cell.mark && this._explore(matrix, cell))\n .filter(Boolean)\n .map(range => range.$shortRange);\n\n return {\n name,\n ranges,\n };\n }\n\n normaliseMatrix(matrix, sheetName) {\n // some of the cells might have shifted on specified sheet\n // need to reassign rows, cols\n matrix.forEachInSheet(sheetName, (cell, row, col) => {\n if (cell) {\n if (cell.row !== row || cell.col !== col) {\n cell.row = row;\n cell.col = col;\n cell.address = colCache.n2l(col) + row;\n }\n }\n });\n }\n\n spliceRows(sheetName, start, numDelete, numInsert) {\n _.each(this.matrixMap, matrix => {\n matrix.spliceRows(sheetName, start, numDelete, numInsert);\n this.normaliseMatrix(matrix, sheetName);\n });\n }\n\n spliceColumns(sheetName, start, numDelete, numInsert) {\n _.each(this.matrixMap, matrix => {\n matrix.spliceColumns(sheetName, start, numDelete, numInsert);\n this.normaliseMatrix(matrix, sheetName);\n });\n }\n\n get model() {\n // To get names per cell - just iterate over all names finding cells if they exist\n return _.map(this.matrixMap, (matrix, name) => this.getRanges(name, matrix)).filter(\n definedName => definedName.ranges.length\n );\n }\n\n set model(value) {\n // value is [ { name, ranges }, ... ]\n const matrixMap = (this.matrixMap = {});\n value.forEach(definedName => {\n const matrix = (matrixMap[definedName.name] = new CellMatrix());\n definedName.ranges.forEach(rangeStr => {\n if (rangeRegexp.test(rangeStr.split('!').pop() || '')) {\n matrix.addCell(rangeStr);\n }\n });\n });\n }\n}\n\nmodule.exports = DefinedNames;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/enums.js b/node_backend/node_modules/exceljs/dist/es5/doc/enums.js new file mode 100644 index 0000000000000000000000000000000000000000..4b7589cf9b3d864ea12a8faf8da4aef474d8da81 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/enums.js @@ -0,0 +1,49 @@ +'use strict'; + +module.exports = { + ValueType: { + Null: 0, + Merge: 1, + Number: 2, + String: 3, + Date: 4, + Hyperlink: 5, + Formula: 6, + SharedString: 7, + RichText: 8, + Boolean: 9, + Error: 10 + }, + FormulaType: { + None: 0, + Master: 1, + Shared: 2 + }, + RelationshipType: { + None: 0, + OfficeDocument: 1, + Worksheet: 2, + CalcChain: 3, + SharedStrings: 4, + Styles: 5, + Theme: 6, + Hyperlink: 7 + }, + DocumentType: { + Xlsx: 1 + }, + ReadingOrder: { + LeftToRight: 1, + RightToLeft: 2 + }, + ErrorValue: { + NotApplicable: '#N/A', + Ref: '#REF!', + Name: '#NAME?', + DivZero: '#DIV/0!', + Null: '#NULL!', + Value: '#VALUE!', + Num: '#NUM!' + } +}; +//# sourceMappingURL=enums.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/enums.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/enums.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2aaec4af138fcc2c229205bc447e9b8d4fd24f2b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/enums.js.map @@ -0,0 +1 @@ +{"version":3,"file":"enums.js","names":["module","exports","ValueType","Null","Merge","Number","String","Date","Hyperlink","Formula","SharedString","RichText","Boolean","Error","FormulaType","None","Master","Shared","RelationshipType","OfficeDocument","Worksheet","CalcChain","SharedStrings","Styles","Theme","DocumentType","Xlsx","ReadingOrder","LeftToRight","RightToLeft","ErrorValue","NotApplicable","Ref","Name","DivZero","Value","Num"],"sources":["../../../lib/doc/enums.js"],"sourcesContent":["'use strict';\n\nmodule.exports = {\n ValueType: {\n Null: 0,\n Merge: 1,\n Number: 2,\n String: 3,\n Date: 4,\n Hyperlink: 5,\n Formula: 6,\n SharedString: 7,\n RichText: 8,\n Boolean: 9,\n Error: 10,\n },\n FormulaType: {\n None: 0,\n Master: 1,\n Shared: 2,\n },\n RelationshipType: {\n None: 0,\n OfficeDocument: 1,\n Worksheet: 2,\n CalcChain: 3,\n SharedStrings: 4,\n Styles: 5,\n Theme: 6,\n Hyperlink: 7,\n },\n DocumentType: {\n Xlsx: 1,\n },\n ReadingOrder: {\n LeftToRight: 1,\n RightToLeft: 2,\n },\n ErrorValue: {\n NotApplicable: '#N/A',\n Ref: '#REF!',\n Name: '#NAME?',\n DivZero: '#DIV/0!',\n Null: '#NULL!',\n Value: '#VALUE!',\n Num: '#NUM!',\n },\n};\n"],"mappings":"AAAA,YAAY;;AAEZA,MAAM,CAACC,OAAO,GAAG;EACfC,SAAS,EAAE;IACTC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACTC,MAAM,EAAE,CAAC;IACTC,IAAI,EAAE,CAAC;IACPC,SAAS,EAAE,CAAC;IACZC,OAAO,EAAE,CAAC;IACVC,YAAY,EAAE,CAAC;IACfC,QAAQ,EAAE,CAAC;IACXC,OAAO,EAAE,CAAC;IACVC,KAAK,EAAE;EACT,CAAC;EACDC,WAAW,EAAE;IACXC,IAAI,EAAE,CAAC;IACPC,MAAM,EAAE,CAAC;IACTC,MAAM,EAAE;EACV,CAAC;EACDC,gBAAgB,EAAE;IAChBH,IAAI,EAAE,CAAC;IACPI,cAAc,EAAE,CAAC;IACjBC,SAAS,EAAE,CAAC;IACZC,SAAS,EAAE,CAAC;IACZC,aAAa,EAAE,CAAC;IAChBC,MAAM,EAAE,CAAC;IACTC,KAAK,EAAE,CAAC;IACRhB,SAAS,EAAE;EACb,CAAC;EACDiB,YAAY,EAAE;IACZC,IAAI,EAAE;EACR,CAAC;EACDC,YAAY,EAAE;IACZC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE;EACf,CAAC;EACDC,UAAU,EAAE;IACVC,aAAa,EAAE,MAAM;IACrBC,GAAG,EAAE,OAAO;IACZC,IAAI,EAAE,QAAQ;IACdC,OAAO,EAAE,SAAS;IAClB/B,IAAI,EAAE,QAAQ;IACdgC,KAAK,EAAE,SAAS;IAChBC,GAAG,EAAE;EACP;AACF,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/image.js b/node_backend/node_modules/exceljs/dist/es5/doc/image.js new file mode 100644 index 0000000000000000000000000000000000000000..7e58fe234fb117e0f3d94b210ec61ab09e07dcce --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/image.js @@ -0,0 +1,69 @@ +"use strict"; + +const colCache = require('../utils/col-cache'); +const Anchor = require('./anchor'); +class Image { + constructor(worksheet, model) { + this.worksheet = worksheet; + this.model = model; + } + get model() { + switch (this.type) { + case 'background': + return { + type: this.type, + imageId: this.imageId + }; + case 'image': + return { + type: this.type, + imageId: this.imageId, + hyperlinks: this.range.hyperlinks, + range: { + tl: this.range.tl.model, + br: this.range.br && this.range.br.model, + ext: this.range.ext, + editAs: this.range.editAs + } + }; + default: + throw new Error('Invalid Image Type'); + } + } + set model(_ref) { + let { + type, + imageId, + range, + hyperlinks + } = _ref; + this.type = type; + this.imageId = imageId; + if (type === 'image') { + if (typeof range === 'string') { + const decoded = colCache.decode(range); + this.range = { + tl: new Anchor(this.worksheet, { + col: decoded.left, + row: decoded.top + }, -1), + br: new Anchor(this.worksheet, { + col: decoded.right, + row: decoded.bottom + }, 0), + editAs: 'oneCell' + }; + } else { + this.range = { + tl: new Anchor(this.worksheet, range.tl, 0), + br: range.br && new Anchor(this.worksheet, range.br, 0), + ext: range.ext, + editAs: range.editAs, + hyperlinks: hyperlinks || range.hyperlinks + }; + } + } + } +} +module.exports = Image; +//# sourceMappingURL=image.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/image.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/image.js.map new file mode 100644 index 0000000000000000000000000000000000000000..090ba15354a9e7f2e012bba954833fba16b72d5e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/image.js.map @@ -0,0 +1 @@ +{"version":3,"file":"image.js","names":["colCache","require","Anchor","Image","constructor","worksheet","model","type","imageId","hyperlinks","range","tl","br","ext","editAs","Error","_ref","decoded","decode","col","left","row","top","right","bottom","module","exports"],"sources":["../../../lib/doc/image.js"],"sourcesContent":["const colCache = require('../utils/col-cache');\nconst Anchor = require('./anchor');\n\nclass Image {\n constructor(worksheet, model) {\n this.worksheet = worksheet;\n this.model = model;\n }\n\n get model() {\n switch (this.type) {\n case 'background':\n return {\n type: this.type,\n imageId: this.imageId,\n };\n case 'image':\n return {\n type: this.type,\n imageId: this.imageId,\n hyperlinks: this.range.hyperlinks,\n range: {\n tl: this.range.tl.model,\n br: this.range.br && this.range.br.model,\n ext: this.range.ext,\n editAs: this.range.editAs,\n },\n };\n default:\n throw new Error('Invalid Image Type');\n }\n }\n\n set model({type, imageId, range, hyperlinks}) {\n this.type = type;\n this.imageId = imageId;\n\n if (type === 'image') {\n if (typeof range === 'string') {\n const decoded = colCache.decode(range);\n this.range = {\n tl: new Anchor(this.worksheet, {col: decoded.left, row: decoded.top}, -1),\n br: new Anchor(this.worksheet, {col: decoded.right, row: decoded.bottom}, 0),\n editAs: 'oneCell',\n };\n } else {\n this.range = {\n tl: new Anchor(this.worksheet, range.tl, 0),\n br: range.br && new Anchor(this.worksheet, range.br, 0),\n ext: range.ext,\n editAs: range.editAs,\n hyperlinks: hyperlinks || range.hyperlinks,\n };\n }\n }\n }\n}\n\nmodule.exports = Image;\n"],"mappings":";;AAAA,MAAMA,QAAQ,GAAGC,OAAO,CAAC,oBAAoB,CAAC;AAC9C,MAAMC,MAAM,GAAGD,OAAO,CAAC,UAAU,CAAC;AAElC,MAAME,KAAK,CAAC;EACVC,WAAWA,CAACC,SAAS,EAAEC,KAAK,EAAE;IAC5B,IAAI,CAACD,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,KAAK,GAAGA,KAAK;EACpB;EAEA,IAAIA,KAAKA,CAAA,EAAG;IACV,QAAQ,IAAI,CAACC,IAAI;MACf,KAAK,YAAY;QACf,OAAO;UACLA,IAAI,EAAE,IAAI,CAACA,IAAI;UACfC,OAAO,EAAE,IAAI,CAACA;QAChB,CAAC;MACH,KAAK,OAAO;QACV,OAAO;UACLD,IAAI,EAAE,IAAI,CAACA,IAAI;UACfC,OAAO,EAAE,IAAI,CAACA,OAAO;UACrBC,UAAU,EAAE,IAAI,CAACC,KAAK,CAACD,UAAU;UACjCC,KAAK,EAAE;YACLC,EAAE,EAAE,IAAI,CAACD,KAAK,CAACC,EAAE,CAACL,KAAK;YACvBM,EAAE,EAAE,IAAI,CAACF,KAAK,CAACE,EAAE,IAAI,IAAI,CAACF,KAAK,CAACE,EAAE,CAACN,KAAK;YACxCO,GAAG,EAAE,IAAI,CAACH,KAAK,CAACG,GAAG;YACnBC,MAAM,EAAE,IAAI,CAACJ,KAAK,CAACI;UACrB;QACF,CAAC;MACH;QACE,MAAM,IAAIC,KAAK,CAAC,oBAAoB,CAAC;IACzC;EACF;EAEA,IAAIT,KAAKA,CAAAU,IAAA,EAAqC;IAAA,IAApC;MAACT,IAAI;MAAEC,OAAO;MAAEE,KAAK;MAAED;IAAU,CAAC,GAAAO,IAAA;IAC1C,IAAI,CAACT,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,OAAO,GAAGA,OAAO;IAEtB,IAAID,IAAI,KAAK,OAAO,EAAE;MACpB,IAAI,OAAOG,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAMO,OAAO,GAAGjB,QAAQ,CAACkB,MAAM,CAACR,KAAK,CAAC;QACtC,IAAI,CAACA,KAAK,GAAG;UACXC,EAAE,EAAE,IAAIT,MAAM,CAAC,IAAI,CAACG,SAAS,EAAE;YAACc,GAAG,EAAEF,OAAO,CAACG,IAAI;YAAEC,GAAG,EAAEJ,OAAO,CAACK;UAAG,CAAC,EAAE,CAAC,CAAC,CAAC;UACzEV,EAAE,EAAE,IAAIV,MAAM,CAAC,IAAI,CAACG,SAAS,EAAE;YAACc,GAAG,EAAEF,OAAO,CAACM,KAAK;YAAEF,GAAG,EAAEJ,OAAO,CAACO;UAAM,CAAC,EAAE,CAAC,CAAC;UAC5EV,MAAM,EAAE;QACV,CAAC;MACH,CAAC,MAAM;QACL,IAAI,CAACJ,KAAK,GAAG;UACXC,EAAE,EAAE,IAAIT,MAAM,CAAC,IAAI,CAACG,SAAS,EAAEK,KAAK,CAACC,EAAE,EAAE,CAAC,CAAC;UAC3CC,EAAE,EAAEF,KAAK,CAACE,EAAE,IAAI,IAAIV,MAAM,CAAC,IAAI,CAACG,SAAS,EAAEK,KAAK,CAACE,EAAE,EAAE,CAAC,CAAC;UACvDC,GAAG,EAAEH,KAAK,CAACG,GAAG;UACdC,MAAM,EAAEJ,KAAK,CAACI,MAAM;UACpBL,UAAU,EAAEA,UAAU,IAAIC,KAAK,CAACD;QAClC,CAAC;MACH;IACF;EACF;AACF;AAEAgB,MAAM,CAACC,OAAO,GAAGvB,KAAK"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/modelcontainer.js b/node_backend/node_modules/exceljs/dist/es5/doc/modelcontainer.js new file mode 100644 index 0000000000000000000000000000000000000000..55fa6d1c39aa820b725fd9590d882d3a3d7e09be --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/modelcontainer.js @@ -0,0 +1,16 @@ +'use strict'; + +const XLSX = require('../xlsx/xlsx'); +class ModelContainer { + constructor(model) { + this.model = model; + } + get xlsx() { + if (!this._xlsx) { + this._xlsx = new XLSX(this); + } + return this._xlsx; + } +} +module.exports = ModelContainer; +//# sourceMappingURL=modelcontainer.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/modelcontainer.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/modelcontainer.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0f77d0ed14c962ebf64df06ed1e34eaa029205d1 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/modelcontainer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"modelcontainer.js","names":["XLSX","require","ModelContainer","constructor","model","xlsx","_xlsx","module","exports"],"sources":["../../../lib/doc/modelcontainer.js"],"sourcesContent":["'use strict';\n\nconst XLSX = require('../xlsx/xlsx');\n\nclass ModelContainer {\n constructor(model) {\n this.model = model;\n }\n\n get xlsx() {\n if (!this._xlsx) {\n this._xlsx = new XLSX(this);\n }\n return this._xlsx;\n }\n}\n\nmodule.exports = ModelContainer;\n"],"mappings":"AAAA,YAAY;;AAEZ,MAAMA,IAAI,GAAGC,OAAO,CAAC,cAAc,CAAC;AAEpC,MAAMC,cAAc,CAAC;EACnBC,WAAWA,CAACC,KAAK,EAAE;IACjB,IAAI,CAACA,KAAK,GAAGA,KAAK;EACpB;EAEA,IAAIC,IAAIA,CAAA,EAAG;IACT,IAAI,CAAC,IAAI,CAACC,KAAK,EAAE;MACf,IAAI,CAACA,KAAK,GAAG,IAAIN,IAAI,CAAC,IAAI,CAAC;IAC7B;IACA,OAAO,IAAI,CAACM,KAAK;EACnB;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGN,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/note.js b/node_backend/node_modules/exceljs/dist/es5/doc/note.js new file mode 100644 index 0000000000000000000000000000000000000000..0053513afc234fe444eae932cebf24b99dd24a60 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/note.js @@ -0,0 +1,64 @@ +"use strict"; + +const _ = require('../utils/under-dash'); +class Note { + constructor(note) { + this.note = note; + } + get model() { + let value = null; + switch (typeof this.note) { + case 'string': + value = { + type: 'note', + note: { + texts: [{ + text: this.note + }] + } + }; + break; + default: + value = { + type: 'note', + note: this.note + }; + break; + } + // Suitable for all cell comments + return _.deepMerge({}, Note.DEFAULT_CONFIGS, value); + } + set model(value) { + const { + note + } = value; + const { + texts + } = note; + if (texts.length === 1 && Object.keys(texts[0]).length === 1) { + this.note = texts[0].text; + } else { + this.note = note; + } + } + static fromModel(model) { + const note = new Note(); + note.model = model; + return note; + } +} +Note.DEFAULT_CONFIGS = { + note: { + margins: { + insetmode: 'auto', + inset: [0.13, 0.13, 0.25, 0.25] + }, + protection: { + locked: 'True', + lockText: 'True' + }, + editAs: 'absolute' + } +}; +module.exports = Note; +//# sourceMappingURL=note.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/note.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/note.js.map new file mode 100644 index 0000000000000000000000000000000000000000..732076be0c94bf8cdea42c43e28b73758ea7308b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/note.js.map @@ -0,0 +1 @@ +{"version":3,"file":"note.js","names":["_","require","Note","constructor","note","model","value","type","texts","text","deepMerge","DEFAULT_CONFIGS","length","Object","keys","fromModel","margins","insetmode","inset","protection","locked","lockText","editAs","module","exports"],"sources":["../../../lib/doc/note.js"],"sourcesContent":["const _ = require('../utils/under-dash');\n\nclass Note {\n constructor(note) {\n this.note = note;\n }\n\n get model() {\n let value = null;\n switch (typeof this.note) {\n case 'string':\n value = {\n type: 'note',\n note: {\n texts: [\n {\n text: this.note,\n },\n ],\n },\n };\n break;\n default:\n value = {\n type: 'note',\n note: this.note,\n };\n break;\n }\n // Suitable for all cell comments\n return _.deepMerge({}, Note.DEFAULT_CONFIGS, value);\n }\n\n set model(value) {\n const {note} = value;\n const {texts} = note;\n if (texts.length === 1 && Object.keys(texts[0]).length === 1) {\n this.note = texts[0].text;\n } else {\n this.note = note;\n }\n }\n\n static fromModel(model) {\n const note = new Note();\n note.model = model;\n return note;\n }\n}\n\nNote.DEFAULT_CONFIGS = {\n note: {\n margins: {\n insetmode: 'auto',\n inset: [0.13, 0.13, 0.25, 0.25],\n },\n protection: {\n locked: 'True',\n lockText: 'True',\n },\n editAs: 'absolute',\n },\n};\n\nmodule.exports = Note;\n"],"mappings":";;AAAA,MAAMA,CAAC,GAAGC,OAAO,CAAC,qBAAqB,CAAC;AAExC,MAAMC,IAAI,CAAC;EACTC,WAAWA,CAACC,IAAI,EAAE;IAChB,IAAI,CAACA,IAAI,GAAGA,IAAI;EAClB;EAEA,IAAIC,KAAKA,CAAA,EAAG;IACV,IAAIC,KAAK,GAAG,IAAI;IAChB,QAAQ,OAAO,IAAI,CAACF,IAAI;MACtB,KAAK,QAAQ;QACXE,KAAK,GAAG;UACNC,IAAI,EAAE,MAAM;UACZH,IAAI,EAAE;YACJI,KAAK,EAAE,CACL;cACEC,IAAI,EAAE,IAAI,CAACL;YACb,CAAC;UAEL;QACF,CAAC;QACD;MACF;QACEE,KAAK,GAAG;UACNC,IAAI,EAAE,MAAM;UACZH,IAAI,EAAE,IAAI,CAACA;QACb,CAAC;QACD;IACJ;IACA;IACA,OAAOJ,CAAC,CAACU,SAAS,CAAC,CAAC,CAAC,EAAER,IAAI,CAACS,eAAe,EAAEL,KAAK,CAAC;EACrD;EAEA,IAAID,KAAKA,CAACC,KAAK,EAAE;IACf,MAAM;MAACF;IAAI,CAAC,GAAGE,KAAK;IACpB,MAAM;MAACE;IAAK,CAAC,GAAGJ,IAAI;IACpB,IAAII,KAAK,CAACI,MAAM,KAAK,CAAC,IAAIC,MAAM,CAACC,IAAI,CAACN,KAAK,CAAC,CAAC,CAAC,CAAC,CAACI,MAAM,KAAK,CAAC,EAAE;MAC5D,IAAI,CAACR,IAAI,GAAGI,KAAK,CAAC,CAAC,CAAC,CAACC,IAAI;IAC3B,CAAC,MAAM;MACL,IAAI,CAACL,IAAI,GAAGA,IAAI;IAClB;EACF;EAEA,OAAOW,SAASA,CAACV,KAAK,EAAE;IACtB,MAAMD,IAAI,GAAG,IAAIF,IAAI,CAAC,CAAC;IACvBE,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,OAAOD,IAAI;EACb;AACF;AAEAF,IAAI,CAACS,eAAe,GAAG;EACrBP,IAAI,EAAE;IACJY,OAAO,EAAE;MACPC,SAAS,EAAE,MAAM;MACjBC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAChC,CAAC;IACDC,UAAU,EAAE;MACVC,MAAM,EAAE,MAAM;MACdC,QAAQ,EAAE;IACZ,CAAC;IACDC,MAAM,EAAE;EACV;AACF,CAAC;AAEDC,MAAM,CAACC,OAAO,GAAGtB,IAAI"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/range.js b/node_backend/node_modules/exceljs/dist/es5/doc/range.js new file mode 100644 index 0000000000000000000000000000000000000000..cb37656fadf3c7aa55cffb22517ff35b174d36fe --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/range.js @@ -0,0 +1,229 @@ +"use strict"; + +const colCache = require('../utils/col-cache'); + +// used by worksheet to calculate sheet dimensions +class Range { + constructor() { + this.decode(arguments); + } + setTLBR(t, l, b, r, s) { + if (arguments.length < 4) { + // setTLBR(tl, br, s) + const tl = colCache.decodeAddress(t); + const br = colCache.decodeAddress(l); + this.model = { + top: Math.min(tl.row, br.row), + left: Math.min(tl.col, br.col), + bottom: Math.max(tl.row, br.row), + right: Math.max(tl.col, br.col), + sheetName: b + }; + this.setTLBR(tl.row, tl.col, br.row, br.col, s); + } else { + // setTLBR(t, l, b, r, s) + this.model = { + top: Math.min(t, b), + left: Math.min(l, r), + bottom: Math.max(t, b), + right: Math.max(l, r), + sheetName: s + }; + } + } + decode(argv) { + switch (argv.length) { + case 5: + // [t,l,b,r,s] + this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]); + break; + case 4: + // [t,l,b,r] + this.setTLBR(argv[0], argv[1], argv[2], argv[3]); + break; + case 3: + // [tl,br,s] + this.setTLBR(argv[0], argv[1], argv[2]); + break; + case 2: + // [tl,br] + this.setTLBR(argv[0], argv[1]); + break; + case 1: + { + const value = argv[0]; + if (value instanceof Range) { + // copy constructor + this.model = { + top: value.model.top, + left: value.model.left, + bottom: value.model.bottom, + right: value.model.right, + sheetName: value.sheetName + }; + } else if (value instanceof Array) { + // an arguments array + this.decode(value); + } else if (value.top && value.left && value.bottom && value.right) { + // a model + this.model = { + top: value.top, + left: value.left, + bottom: value.bottom, + right: value.right, + sheetName: value.sheetName + }; + } else { + // [sheetName!]tl:br + const tlbr = colCache.decodeEx(value); + if (tlbr.top) { + this.model = { + top: tlbr.top, + left: tlbr.left, + bottom: tlbr.bottom, + right: tlbr.right, + sheetName: tlbr.sheetName + }; + } else { + this.model = { + top: tlbr.row, + left: tlbr.col, + bottom: tlbr.row, + right: tlbr.col, + sheetName: tlbr.sheetName + }; + } + } + break; + } + case 0: + this.model = { + top: 0, + left: 0, + bottom: 0, + right: 0 + }; + break; + default: + throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`); + } + } + get top() { + return this.model.top || 1; + } + set top(value) { + this.model.top = value; + } + get left() { + return this.model.left || 1; + } + set left(value) { + this.model.left = value; + } + get bottom() { + return this.model.bottom || 1; + } + set bottom(value) { + this.model.bottom = value; + } + get right() { + return this.model.right || 1; + } + set right(value) { + this.model.right = value; + } + get sheetName() { + return this.model.sheetName; + } + set sheetName(value) { + this.model.sheetName = value; + } + get _serialisedSheetName() { + const { + sheetName + } = this.model; + if (sheetName) { + if (/^[a-zA-Z0-9]*$/.test(sheetName)) { + return `${sheetName}!`; + } + return `'${sheetName}'!`; + } + return ''; + } + expand(top, left, bottom, right) { + if (!this.model.top || top < this.top) this.top = top; + if (!this.model.left || left < this.left) this.left = left; + if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom; + if (!this.model.right || right > this.right) this.right = right; + } + expandRow(row) { + if (row) { + const { + dimensions, + number + } = row; + if (dimensions) { + this.expand(number, dimensions.min, number, dimensions.max); + } + } + } + expandToAddress(addressStr) { + const address = colCache.decodeEx(addressStr); + this.expand(address.row, address.col, address.row, address.col); + } + get tl() { + return colCache.n2l(this.left) + this.top; + } + get $t$l() { + return `$${colCache.n2l(this.left)}$${this.top}`; + } + get br() { + return colCache.n2l(this.right) + this.bottom; + } + get $b$r() { + return `$${colCache.n2l(this.right)}$${this.bottom}`; + } + get range() { + return `${this._serialisedSheetName + this.tl}:${this.br}`; + } + get $range() { + return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`; + } + get shortRange() { + return this.count > 1 ? this.range : this._serialisedSheetName + this.tl; + } + get $shortRange() { + return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l; + } + get count() { + return (1 + this.bottom - this.top) * (1 + this.right - this.left); + } + toString() { + return this.range; + } + intersects(other) { + if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false; + if (other.bottom < this.top) return false; + if (other.top > this.bottom) return false; + if (other.right < this.left) return false; + if (other.left > this.right) return false; + return true; + } + contains(addressStr) { + const address = colCache.decodeEx(addressStr); + return this.containsEx(address); + } + containsEx(address) { + if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false; + return address.row >= this.top && address.row <= this.bottom && address.col >= this.left && address.col <= this.right; + } + forEachAddress(cb) { + for (let col = this.left; col <= this.right; col++) { + for (let row = this.top; row <= this.bottom; row++) { + cb(colCache.encodeAddress(row, col), row, col); + } + } + } +} +module.exports = Range; +//# sourceMappingURL=range.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/range.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/range.js.map new file mode 100644 index 0000000000000000000000000000000000000000..5e5f232b403834598b51d267c383d7dab3c2c8c5 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/range.js.map @@ -0,0 +1 @@ +{"version":3,"file":"range.js","names":["colCache","require","Range","constructor","decode","arguments","setTLBR","t","l","b","r","s","length","tl","decodeAddress","br","model","top","Math","min","row","left","col","bottom","max","right","sheetName","argv","value","Array","tlbr","decodeEx","Error","_serialisedSheetName","test","expand","expandRow","dimensions","number","expandToAddress","addressStr","address","n2l","$t$l","$b$r","range","$range","shortRange","count","$shortRange","toString","intersects","other","contains","containsEx","forEachAddress","cb","encodeAddress","module","exports"],"sources":["../../../lib/doc/range.js"],"sourcesContent":["const colCache = require('../utils/col-cache');\n\n// used by worksheet to calculate sheet dimensions\nclass Range {\n constructor() {\n this.decode(arguments);\n }\n\n setTLBR(t, l, b, r, s) {\n if (arguments.length < 4) {\n // setTLBR(tl, br, s)\n const tl = colCache.decodeAddress(t);\n const br = colCache.decodeAddress(l);\n this.model = {\n top: Math.min(tl.row, br.row),\n left: Math.min(tl.col, br.col),\n bottom: Math.max(tl.row, br.row),\n right: Math.max(tl.col, br.col),\n sheetName: b,\n };\n\n this.setTLBR(tl.row, tl.col, br.row, br.col, s);\n } else {\n // setTLBR(t, l, b, r, s)\n this.model = {\n top: Math.min(t, b),\n left: Math.min(l, r),\n bottom: Math.max(t, b),\n right: Math.max(l, r),\n sheetName: s,\n };\n }\n }\n\n decode(argv) {\n switch (argv.length) {\n case 5: // [t,l,b,r,s]\n this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);\n break;\n case 4: // [t,l,b,r]\n this.setTLBR(argv[0], argv[1], argv[2], argv[3]);\n break;\n\n case 3: // [tl,br,s]\n this.setTLBR(argv[0], argv[1], argv[2]);\n break;\n case 2: // [tl,br]\n this.setTLBR(argv[0], argv[1]);\n break;\n\n case 1: {\n const value = argv[0];\n if (value instanceof Range) {\n // copy constructor\n this.model = {\n top: value.model.top,\n left: value.model.left,\n bottom: value.model.bottom,\n right: value.model.right,\n sheetName: value.sheetName,\n };\n } else if (value instanceof Array) {\n // an arguments array\n this.decode(value);\n } else if (value.top && value.left && value.bottom && value.right) {\n // a model\n this.model = {\n top: value.top,\n left: value.left,\n bottom: value.bottom,\n right: value.right,\n sheetName: value.sheetName,\n };\n } else {\n // [sheetName!]tl:br\n const tlbr = colCache.decodeEx(value);\n if (tlbr.top) {\n this.model = {\n top: tlbr.top,\n left: tlbr.left,\n bottom: tlbr.bottom,\n right: tlbr.right,\n sheetName: tlbr.sheetName,\n };\n } else {\n this.model = {\n top: tlbr.row,\n left: tlbr.col,\n bottom: tlbr.row,\n right: tlbr.col,\n sheetName: tlbr.sheetName,\n };\n }\n }\n break;\n }\n\n case 0:\n this.model = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n };\n break;\n\n default:\n throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`);\n }\n }\n\n get top() {\n return this.model.top || 1;\n }\n\n set top(value) {\n this.model.top = value;\n }\n\n get left() {\n return this.model.left || 1;\n }\n\n set left(value) {\n this.model.left = value;\n }\n\n get bottom() {\n return this.model.bottom || 1;\n }\n\n set bottom(value) {\n this.model.bottom = value;\n }\n\n get right() {\n return this.model.right || 1;\n }\n\n set right(value) {\n this.model.right = value;\n }\n\n get sheetName() {\n return this.model.sheetName;\n }\n\n set sheetName(value) {\n this.model.sheetName = value;\n }\n\n get _serialisedSheetName() {\n const {sheetName} = this.model;\n if (sheetName) {\n if (/^[a-zA-Z0-9]*$/.test(sheetName)) {\n return `${sheetName}!`;\n }\n return `'${sheetName}'!`;\n }\n return '';\n }\n\n expand(top, left, bottom, right) {\n if (!this.model.top || top < this.top) this.top = top;\n if (!this.model.left || left < this.left) this.left = left;\n if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;\n if (!this.model.right || right > this.right) this.right = right;\n }\n\n expandRow(row) {\n if (row) {\n const {dimensions, number} = row;\n if (dimensions) {\n this.expand(number, dimensions.min, number, dimensions.max);\n }\n }\n }\n\n expandToAddress(addressStr) {\n const address = colCache.decodeEx(addressStr);\n this.expand(address.row, address.col, address.row, address.col);\n }\n\n get tl() {\n return colCache.n2l(this.left) + this.top;\n }\n\n get $t$l() {\n return `$${colCache.n2l(this.left)}$${this.top}`;\n }\n\n get br() {\n return colCache.n2l(this.right) + this.bottom;\n }\n\n get $b$r() {\n return `$${colCache.n2l(this.right)}$${this.bottom}`;\n }\n\n get range() {\n return `${this._serialisedSheetName + this.tl}:${this.br}`;\n }\n\n get $range() {\n return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`;\n }\n\n get shortRange() {\n return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;\n }\n\n get $shortRange() {\n return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;\n }\n\n get count() {\n return (1 + this.bottom - this.top) * (1 + this.right - this.left);\n }\n\n toString() {\n return this.range;\n }\n\n intersects(other) {\n if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;\n if (other.bottom < this.top) return false;\n if (other.top > this.bottom) return false;\n if (other.right < this.left) return false;\n if (other.left > this.right) return false;\n return true;\n }\n\n contains(addressStr) {\n const address = colCache.decodeEx(addressStr);\n return this.containsEx(address);\n }\n\n containsEx(address) {\n if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;\n return (\n address.row >= this.top &&\n address.row <= this.bottom &&\n address.col >= this.left &&\n address.col <= this.right\n );\n }\n\n forEachAddress(cb) {\n for (let col = this.left; col <= this.right; col++) {\n for (let row = this.top; row <= this.bottom; row++) {\n cb(colCache.encodeAddress(row, col), row, col);\n }\n }\n }\n}\n\nmodule.exports = Range;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/row.js b/node_backend/node_modules/exceljs/dist/es5/doc/row.js new file mode 100644 index 0000000000000000000000000000000000000000..4afba3794a83cad53baffbf4f516631adaba7776 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/row.js @@ -0,0 +1,382 @@ +'use strict'; + +const _ = require('../utils/under-dash'); +const Enums = require('./enums'); +const colCache = require('../utils/col-cache'); +const Cell = require('./cell'); +class Row { + constructor(worksheet, number) { + this._worksheet = worksheet; + this._number = number; + this._cells = []; + this.style = {}; + this.outlineLevel = 0; + } + + // return the row number + get number() { + return this._number; + } + get worksheet() { + return this._worksheet; + } + + // Inform Streaming Writer that this row (and all rows before it) are complete + // and ready to write. Has no effect on Worksheet document + commit() { + this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle + } + + // helps GC by breaking cyclic references + destroy() { + delete this._worksheet; + delete this._cells; + delete this.style; + } + findCell(colNumber) { + return this._cells[colNumber - 1]; + } + + // given {address, row, col}, find or create new cell + getCellEx(address) { + let cell = this._cells[address.col - 1]; + if (!cell) { + const column = this._worksheet.getColumn(address.col); + cell = new Cell(this, column, address.address); + this._cells[address.col - 1] = cell; + } + return cell; + } + + // get cell by key, letter or column number + getCell(col) { + if (typeof col === 'string') { + // is it a key? + const column = this._worksheet.getColumnKey(col); + if (column) { + col = column.number; + } else { + col = colCache.l2n(col); + } + } + return this._cells[col - 1] || this.getCellEx({ + address: colCache.encodeAddress(this._number, col), + row: this._number, + col + }); + } + + // remove cell(s) and shift all higher cells down by count + splice(start, count) { + const nKeep = start + count; + for (var _len = arguments.length, inserts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + inserts[_key - 2] = arguments[_key]; + } + const nExpand = inserts.length - count; + const nEnd = this._cells.length; + let i; + let cSrc; + let cDst; + if (nExpand < 0) { + // remove cells + for (i = start + inserts.length; i <= nEnd; i++) { + cDst = this._cells[i - 1]; + cSrc = this._cells[i - nExpand - 1]; + if (cSrc) { + cDst = this.getCell(i); + cDst.value = cSrc.value; + cDst.style = cSrc.style; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = cSrc._comment; + } else if (cDst) { + cDst.value = null; + cDst.style = {}; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = undefined; + } + } + } else if (nExpand > 0) { + // insert new cells + for (i = nEnd; i >= nKeep; i--) { + cSrc = this._cells[i - 1]; + if (cSrc) { + cDst = this.getCell(i + nExpand); + cDst.value = cSrc.value; + cDst.style = cSrc.style; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = cSrc._comment; + } else { + this._cells[i + nExpand - 1] = undefined; + } + } + } + + // now add the new values + for (i = 0; i < inserts.length; i++) { + cDst = this.getCell(start + i); + cDst.value = inserts[i]; + cDst.style = {}; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = undefined; + } + } + + // Iterate over all non-null cells in this row + eachCell(options, iteratee) { + if (!iteratee) { + iteratee = options; + options = null; + } + if (options && options.includeEmpty) { + const n = this._cells.length; + for (let i = 1; i <= n; i++) { + iteratee(this.getCell(i), i); + } + } else { + this._cells.forEach((cell, index) => { + if (cell && cell.type !== Enums.ValueType.Null) { + iteratee(cell, index + 1); + } + }); + } + } + + // =========================================================================== + // Page Breaks + addPageBreak(lft, rght) { + const ws = this._worksheet; + const left = Math.max(0, lft - 1) || 0; + const right = Math.max(0, rght - 1) || 16838; + const pb = { + id: this._number, + max: right, + man: 1 + }; + if (left) pb.min = left; + ws.rowBreaks.push(pb); + } + + // return a sparse array of cell values + get values() { + const values = []; + this._cells.forEach(cell => { + if (cell && cell.type !== Enums.ValueType.Null) { + values[cell.col] = cell.value; + } + }); + return values; + } + + // set the values by contiguous or sparse array, or by key'd object literal + set values(value) { + // this operation is not additive - any prior cells are removed + this._cells = []; + if (!value) { + // empty row + } else if (value instanceof Array) { + let offset = 0; + if (value.hasOwnProperty('0')) { + // contiguous array - start at column 1 + offset = 1; + } + value.forEach((item, index) => { + if (item !== undefined) { + this.getCellEx({ + address: colCache.encodeAddress(this._number, index + offset), + row: this._number, + col: index + offset + }).value = item; + } + }); + } else { + // assume object with column keys + this._worksheet.eachColumnKey((column, key) => { + if (value[key] !== undefined) { + this.getCellEx({ + address: colCache.encodeAddress(this._number, column.number), + row: this._number, + col: column.number + }).value = value[key]; + } + }); + } + } + + // returns true if the row includes at least one cell with a value + get hasValues() { + return _.some(this._cells, cell => cell && cell.type !== Enums.ValueType.Null); + } + get cellCount() { + return this._cells.length; + } + get actualCellCount() { + let count = 0; + this.eachCell(() => { + count++; + }); + return count; + } + + // get the min and max column number for the non-null cells in this row or null + get dimensions() { + let min = 0; + let max = 0; + this._cells.forEach(cell => { + if (cell && cell.type !== Enums.ValueType.Null) { + if (!min || min > cell.col) { + min = cell.col; + } + if (max < cell.col) { + max = cell.col; + } + } + }); + return min > 0 ? { + min, + max + } : null; + } + + // ========================================================================= + // styles + _applyStyle(name, value) { + this.style[name] = value; + this._cells.forEach(cell => { + if (cell) { + cell[name] = value; + } + }); + return value; + } + get numFmt() { + return this.style.numFmt; + } + set numFmt(value) { + this._applyStyle('numFmt', value); + } + get font() { + return this.style.font; + } + set font(value) { + this._applyStyle('font', value); + } + get alignment() { + return this.style.alignment; + } + set alignment(value) { + this._applyStyle('alignment', value); + } + get protection() { + return this.style.protection; + } + set protection(value) { + this._applyStyle('protection', value); + } + get border() { + return this.style.border; + } + set border(value) { + this._applyStyle('border', value); + } + get fill() { + return this.style.fill; + } + set fill(value) { + this._applyStyle('fill', value); + } + get hidden() { + return !!this._hidden; + } + set hidden(value) { + this._hidden = value; + } + get outlineLevel() { + return this._outlineLevel || 0; + } + set outlineLevel(value) { + this._outlineLevel = value; + } + get collapsed() { + return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow); + } + + // ========================================================================= + get model() { + const cells = []; + let min = 0; + let max = 0; + this._cells.forEach(cell => { + if (cell) { + const cellModel = cell.model; + if (cellModel) { + if (!min || min > cell.col) { + min = cell.col; + } + if (max < cell.col) { + max = cell.col; + } + cells.push(cellModel); + } + } + }); + return this.height || cells.length ? { + cells, + number: this.number, + min, + max, + height: this.height, + style: this.style, + hidden: this.hidden, + outlineLevel: this.outlineLevel, + collapsed: this.collapsed + } : null; + } + set model(value) { + if (value.number !== this._number) { + throw new Error('Invalid row number in model'); + } + this._cells = []; + let previousAddress; + value.cells.forEach(cellModel => { + switch (cellModel.type) { + case Cell.Types.Merge: + // special case - don't add this types + break; + default: + { + let address; + if (cellModel.address) { + address = colCache.decodeAddress(cellModel.address); + } else if (previousAddress) { + // This is a element without an r attribute + // Assume that it's the cell for the next column + const { + row + } = previousAddress; + const col = previousAddress.col + 1; + address = { + row, + col, + address: colCache.encodeAddress(row, col), + $col$row: `$${colCache.n2l(col)}$${row}` + }; + } + previousAddress = address; + const cell = this.getCellEx(address); + cell.model = cellModel; + break; + } + } + }); + if (value.height) { + this.height = value.height; + } else { + delete this.height; + } + this.hidden = value.hidden; + this.outlineLevel = value.outlineLevel || 0; + this.style = value.style && JSON.parse(JSON.stringify(value.style)) || {}; + } +} +module.exports = Row; +//# sourceMappingURL=row.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/row.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/row.js.map new file mode 100644 index 0000000000000000000000000000000000000000..d1f308d391e062b946ba6d5be8d93a81f7a00e75 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/row.js.map @@ -0,0 +1 @@ +{"version":3,"file":"row.js","names":["_","require","Enums","colCache","Cell","Row","constructor","worksheet","number","_worksheet","_number","_cells","style","outlineLevel","commit","_commitRow","destroy","findCell","colNumber","getCellEx","address","cell","col","column","getColumn","getCell","getColumnKey","l2n","encodeAddress","row","splice","start","count","nKeep","_len","arguments","length","inserts","Array","_key","nExpand","nEnd","i","cSrc","cDst","value","_comment","undefined","eachCell","options","iteratee","includeEmpty","n","forEach","index","type","ValueType","Null","addPageBreak","lft","rght","ws","left","Math","max","right","pb","id","man","min","rowBreaks","push","values","offset","hasOwnProperty","item","eachColumnKey","key","hasValues","some","cellCount","actualCellCount","dimensions","_applyStyle","name","numFmt","font","alignment","protection","border","fill","hidden","_hidden","_outlineLevel","collapsed","properties","outlineLevelRow","model","cells","cellModel","height","Error","previousAddress","Types","Merge","decodeAddress","$col$row","n2l","JSON","parse","stringify","module","exports"],"sources":["../../../lib/doc/row.js"],"sourcesContent":["'use strict';\n\nconst _ = require('../utils/under-dash');\n\nconst Enums = require('./enums');\nconst colCache = require('../utils/col-cache');\nconst Cell = require('./cell');\n\nclass Row {\n constructor(worksheet, number) {\n this._worksheet = worksheet;\n this._number = number;\n this._cells = [];\n this.style = {};\n this.outlineLevel = 0;\n }\n\n // return the row number\n get number() {\n return this._number;\n }\n\n get worksheet() {\n return this._worksheet;\n }\n\n // Inform Streaming Writer that this row (and all rows before it) are complete\n // and ready to write. Has no effect on Worksheet document\n commit() {\n this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle\n }\n\n // helps GC by breaking cyclic references\n destroy() {\n delete this._worksheet;\n delete this._cells;\n delete this.style;\n }\n\n findCell(colNumber) {\n return this._cells[colNumber - 1];\n }\n\n // given {address, row, col}, find or create new cell\n getCellEx(address) {\n let cell = this._cells[address.col - 1];\n if (!cell) {\n const column = this._worksheet.getColumn(address.col);\n cell = new Cell(this, column, address.address);\n this._cells[address.col - 1] = cell;\n }\n return cell;\n }\n\n // get cell by key, letter or column number\n getCell(col) {\n if (typeof col === 'string') {\n // is it a key?\n const column = this._worksheet.getColumnKey(col);\n if (column) {\n col = column.number;\n } else {\n col = colCache.l2n(col);\n }\n }\n return (\n this._cells[col - 1] ||\n this.getCellEx({\n address: colCache.encodeAddress(this._number, col),\n row: this._number,\n col,\n })\n );\n }\n\n // remove cell(s) and shift all higher cells down by count\n splice(start, count, ...inserts) {\n const nKeep = start + count;\n const nExpand = inserts.length - count;\n const nEnd = this._cells.length;\n let i;\n let cSrc;\n let cDst;\n\n if (nExpand < 0) {\n // remove cells\n for (i = start + inserts.length; i <= nEnd; i++) {\n cDst = this._cells[i - 1];\n cSrc = this._cells[i - nExpand - 1];\n if (cSrc) {\n cDst = this.getCell(i);\n cDst.value = cSrc.value;\n cDst.style = cSrc.style;\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = cSrc._comment;\n } else if (cDst) {\n cDst.value = null;\n cDst.style = {};\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = undefined;\n }\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n cSrc = this._cells[i - 1];\n if (cSrc) {\n cDst = this.getCell(i + nExpand);\n cDst.value = cSrc.value;\n cDst.style = cSrc.style;\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = cSrc._comment;\n } else {\n this._cells[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now add the new values\n for (i = 0; i < inserts.length; i++) {\n cDst = this.getCell(start + i);\n cDst.value = inserts[i];\n cDst.style = {};\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = undefined;\n }\n }\n\n // Iterate over all non-null cells in this row\n eachCell(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = null;\n }\n if (options && options.includeEmpty) {\n const n = this._cells.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getCell(i), i);\n }\n } else {\n this._cells.forEach((cell, index) => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n iteratee(cell, index + 1);\n }\n });\n }\n }\n\n // ===========================================================================\n // Page Breaks\n addPageBreak(lft, rght) {\n const ws = this._worksheet;\n const left = Math.max(0, lft - 1) || 0;\n const right = Math.max(0, rght - 1) || 16838;\n const pb = {\n id: this._number,\n max: right,\n man: 1,\n };\n if (left) pb.min = left;\n\n ws.rowBreaks.push(pb);\n }\n\n // return a sparse array of cell values\n get values() {\n const values = [];\n this._cells.forEach(cell => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n values[cell.col] = cell.value;\n }\n });\n return values;\n }\n\n // set the values by contiguous or sparse array, or by key'd object literal\n set values(value) {\n // this operation is not additive - any prior cells are removed\n this._cells = [];\n if (!value) {\n // empty row\n } else if (value instanceof Array) {\n let offset = 0;\n if (value.hasOwnProperty('0')) {\n // contiguous array - start at column 1\n offset = 1;\n }\n value.forEach((item, index) => {\n if (item !== undefined) {\n this.getCellEx({\n address: colCache.encodeAddress(this._number, index + offset),\n row: this._number,\n col: index + offset,\n }).value = item;\n }\n });\n } else {\n // assume object with column keys\n this._worksheet.eachColumnKey((column, key) => {\n if (value[key] !== undefined) {\n this.getCellEx({\n address: colCache.encodeAddress(this._number, column.number),\n row: this._number,\n col: column.number,\n }).value = value[key];\n }\n });\n }\n }\n\n // returns true if the row includes at least one cell with a value\n get hasValues() {\n return _.some(this._cells, cell => cell && cell.type !== Enums.ValueType.Null);\n }\n\n get cellCount() {\n return this._cells.length;\n }\n\n get actualCellCount() {\n let count = 0;\n this.eachCell(() => {\n count++;\n });\n return count;\n }\n\n // get the min and max column number for the non-null cells in this row or null\n get dimensions() {\n let min = 0;\n let max = 0;\n this._cells.forEach(cell => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n if (!min || min > cell.col) {\n min = cell.col;\n }\n if (max < cell.col) {\n max = cell.col;\n }\n }\n });\n return min > 0\n ? {\n min,\n max,\n }\n : null;\n }\n\n // =========================================================================\n // styles\n _applyStyle(name, value) {\n this.style[name] = value;\n this._cells.forEach(cell => {\n if (cell) {\n cell[name] = value;\n }\n });\n return value;\n }\n\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this._applyStyle('numFmt', value);\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this._applyStyle('font', value);\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this._applyStyle('alignment', value);\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this._applyStyle('protection', value);\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this._applyStyle('border', value);\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this._applyStyle('fill', value);\n }\n\n get hidden() {\n return !!this._hidden;\n }\n\n set hidden(value) {\n this._hidden = value;\n }\n\n get outlineLevel() {\n return this._outlineLevel || 0;\n }\n\n set outlineLevel(value) {\n this._outlineLevel = value;\n }\n\n get collapsed() {\n return !!(\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow\n );\n }\n\n // =========================================================================\n get model() {\n const cells = [];\n let min = 0;\n let max = 0;\n this._cells.forEach(cell => {\n if (cell) {\n const cellModel = cell.model;\n if (cellModel) {\n if (!min || min > cell.col) {\n min = cell.col;\n }\n if (max < cell.col) {\n max = cell.col;\n }\n cells.push(cellModel);\n }\n }\n });\n\n return this.height || cells.length\n ? {\n cells,\n number: this.number,\n min,\n max,\n height: this.height,\n style: this.style,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n collapsed: this.collapsed,\n }\n : null;\n }\n\n set model(value) {\n if (value.number !== this._number) {\n throw new Error('Invalid row number in model');\n }\n this._cells = [];\n let previousAddress;\n value.cells.forEach(cellModel => {\n switch (cellModel.type) {\n case Cell.Types.Merge:\n // special case - don't add this types\n break;\n default: {\n let address;\n if (cellModel.address) {\n address = colCache.decodeAddress(cellModel.address);\n } else if (previousAddress) {\n // This is a element without an r attribute\n // Assume that it's the cell for the next column\n const {row} = previousAddress;\n const col = previousAddress.col + 1;\n address = {\n row,\n col,\n address: colCache.encodeAddress(row, col),\n $col$row: `$${colCache.n2l(col)}$${row}`,\n };\n }\n previousAddress = address;\n const cell = this.getCellEx(address);\n cell.model = cellModel;\n break;\n }\n }\n });\n\n if (value.height) {\n this.height = value.height;\n } else {\n delete this.height;\n }\n\n this.hidden = value.hidden;\n this.outlineLevel = value.outlineLevel || 0;\n\n this.style = (value.style && JSON.parse(JSON.stringify(value.style))) || {};\n }\n}\n\nmodule.exports = Row;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/table.js b/node_backend/node_modules/exceljs/dist/es5/doc/table.js new file mode 100644 index 0000000000000000000000000000000000000000..9fffe48b80ea0a0f160d4fc1fc027d042b03602e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/table.js @@ -0,0 +1,443 @@ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const colCache = require('../utils/col-cache'); +class Column { + // wrapper around column model, allowing access and manipulation + constructor(table, column, index) { + this.table = table; + this.column = column; + this.index = index; + } + _set(name, value) { + this.table.cacheState(); + this.column[name] = value; + } + + /* eslint-disable lines-between-class-members */ + get name() { + return this.column.name; + } + set name(value) { + this._set('name', value); + } + get filterButton() { + return this.column.filterButton; + } + set filterButton(value) { + this.column.filterButton = value; + } + get style() { + return this.column.style; + } + set style(value) { + this.column.style = value; + } + get totalsRowLabel() { + return this.column.totalsRowLabel; + } + set totalsRowLabel(value) { + this._set('totalsRowLabel', value); + } + get totalsRowFunction() { + return this.column.totalsRowFunction; + } + set totalsRowFunction(value) { + this._set('totalsRowFunction', value); + } + get totalsRowResult() { + return this.column.totalsRowResult; + } + set totalsRowResult(value) { + this._set('totalsRowResult', value); + } + get totalsRowFormula() { + return this.column.totalsRowFormula; + } + set totalsRowFormula(value) { + this._set('totalsRowFormula', value); + } + /* eslint-enable lines-between-class-members */ +} + +class Table { + constructor(worksheet, table) { + this.worksheet = worksheet; + if (table) { + this.table = table; + // check things are ok first + this.validate(); + this.store(); + } + } + getFormula(column) { + // get the correct formula to apply to the totals row + switch (column.totalsRowFunction) { + case 'none': + return null; + case 'average': + return `SUBTOTAL(101,${this.table.name}[${column.name}])`; + case 'countNums': + return `SUBTOTAL(102,${this.table.name}[${column.name}])`; + case 'count': + return `SUBTOTAL(103,${this.table.name}[${column.name}])`; + case 'max': + return `SUBTOTAL(104,${this.table.name}[${column.name}])`; + case 'min': + return `SUBTOTAL(105,${this.table.name}[${column.name}])`; + case 'stdDev': + return `SUBTOTAL(106,${this.table.name}[${column.name}])`; + case 'var': + return `SUBTOTAL(107,${this.table.name}[${column.name}])`; + case 'sum': + return `SUBTOTAL(109,${this.table.name}[${column.name}])`; + case 'custom': + return column.totalsRowFormula; + default: + throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`); + } + } + get width() { + // width of the table + return this.table.columns.length; + } + get height() { + // height of the table data + return this.table.rows.length; + } + get filterHeight() { + // height of the table data plus optional header row + return this.height + (this.table.headerRow ? 1 : 0); + } + get tableHeight() { + // full height of the table on the sheet + return this.filterHeight + (this.table.totalsRow ? 1 : 0); + } + validate() { + const { + table + } = this; + // set defaults and check is valid + const assign = (o, name, dflt) => { + if (o[name] === undefined) { + o[name] = dflt; + } + }; + assign(table, 'headerRow', true); + assign(table, 'totalsRow', false); + assign(table, 'style', {}); + assign(table.style, 'theme', 'TableStyleMedium2'); + assign(table.style, 'showFirstColumn', false); + assign(table.style, 'showLastColumn', false); + assign(table.style, 'showRowStripes', false); + assign(table.style, 'showColumnStripes', false); + const assert = (test, message) => { + if (!test) { + throw new Error(message); + } + }; + assert(table.ref, 'Table must have ref'); + assert(table.columns, 'Table must have column definitions'); + assert(table.rows, 'Table must have row definitions'); + table.tl = colCache.decodeAddress(table.ref); + const { + row, + col + } = table.tl; + assert(row > 0, 'Table must be on valid row'); + assert(col > 0, 'Table must be on valid col'); + const { + width, + filterHeight, + tableHeight + } = this; + + // autoFilterRef is a range that includes optional headers only + table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1); + + // tableRef is a range that includes optional headers and totals + table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1); + table.columns.forEach((column, i) => { + assert(column.name, `Column ${i} must have a name`); + if (i === 0) { + assign(column, 'totalsRowLabel', 'Total'); + } else { + assign(column, 'totalsRowFunction', 'none'); + column.totalsRowFormula = this.getFormula(column); + } + }); + } + store() { + // where the table needs to store table data, headers, footers in + // the sheet... + const assignStyle = (cell, style) => { + if (style) { + Object.keys(style).forEach(key => { + cell[key] = style[key]; + }); + } + }; + const { + worksheet, + table + } = this; + const { + row, + col + } = table.tl; + let count = 0; + if (table.headerRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const { + style, + name + } = column; + const cell = r.getCell(col + j); + cell.value = name; + assignStyle(cell, style); + }); + } + table.rows.forEach(data => { + const r = worksheet.getRow(row + count++); + data.forEach((value, j) => { + const cell = r.getCell(col + j); + cell.value = value; + assignStyle(cell, table.columns[j].style); + }); + }); + if (table.totalsRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const cell = r.getCell(col + j); + if (j === 0) { + cell.value = column.totalsRowLabel; + } else { + const formula = this.getFormula(column); + if (formula) { + cell.value = { + formula: column.totalsRowFormula, + result: column.totalsRowResult + }; + } else { + cell.value = null; + } + } + assignStyle(cell, column.style); + }); + } + } + load(worksheet) { + // where the table will read necessary features from a loaded sheet + const { + table + } = this; + const { + row, + col + } = table.tl; + let count = 0; + if (table.headerRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const cell = r.getCell(col + j); + cell.value = column.name; + }); + } + table.rows.forEach(data => { + const r = worksheet.getRow(row + count++); + data.forEach((value, j) => { + const cell = r.getCell(col + j); + cell.value = value; + }); + }); + if (table.totalsRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const cell = r.getCell(col + j); + if (j === 0) { + cell.value = column.totalsRowLabel; + } else { + const formula = this.getFormula(column); + if (formula) { + cell.value = { + formula: column.totalsRowFormula, + result: column.totalsRowResult + }; + } + } + }); + } + } + get model() { + return this.table; + } + set model(value) { + this.table = value; + } + + // ================================================================ + // TODO: Mutating methods + cacheState() { + if (!this._cache) { + this._cache = { + ref: this.ref, + width: this.width, + tableHeight: this.tableHeight + }; + } + } + commit() { + // changes may have been made that might have on-sheet effects + if (!this._cache) { + return; + } + + // check things are ok first + this.validate(); + const ref = colCache.decodeAddress(this._cache.ref); + if (this.ref !== this._cache.ref) { + // wipe out whole table footprint at previous location + for (let i = 0; i < this._cache.tableHeight; i++) { + const row = this.worksheet.getRow(ref.row + i); + for (let j = 0; j < this._cache.width; j++) { + const cell = row.getCell(ref.col + j); + cell.value = null; + } + } + } else { + // clear out below table if it has shrunk + for (let i = this.tableHeight; i < this._cache.tableHeight; i++) { + const row = this.worksheet.getRow(ref.row + i); + for (let j = 0; j < this._cache.width; j++) { + const cell = row.getCell(ref.col + j); + cell.value = null; + } + } + + // clear out to right of table if it has lost columns + for (let i = 0; i < this.tableHeight; i++) { + const row = this.worksheet.getRow(ref.row + i); + for (let j = this.width; j < this._cache.width; j++) { + const cell = row.getCell(ref.col + j); + cell.value = null; + } + } + } + this.store(); + } + addRow(values, rowNumber) { + // Add a row of data, either insert at rowNumber or append + this.cacheState(); + if (rowNumber === undefined) { + this.table.rows.push(values); + } else { + this.table.rows.splice(rowNumber, 0, values); + } + } + removeRows(rowIndex) { + let count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + // Remove a rows of data + this.cacheState(); + this.table.rows.splice(rowIndex, count); + } + getColumn(colIndex) { + const column = this.table.columns[colIndex]; + return new Column(this, column, colIndex); + } + addColumn(column, values, colIndex) { + // Add a new column, including column defn and values + // Inserts at colNumber or adds to the right + this.cacheState(); + if (colIndex === undefined) { + this.table.columns.push(column); + this.table.rows.forEach((row, i) => { + row.push(values[i]); + }); + } else { + this.table.columns.splice(colIndex, 0, column); + this.table.rows.forEach((row, i) => { + row.splice(colIndex, 0, values[i]); + }); + } + } + removeColumns(colIndex) { + let count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + // Remove a column with data + this.cacheState(); + this.table.columns.splice(colIndex, count); + this.table.rows.forEach(row => { + row.splice(colIndex, count); + }); + } + _assign(target, prop, value) { + this.cacheState(); + target[prop] = value; + } + + /* eslint-disable lines-between-class-members */ + get ref() { + return this.table.ref; + } + set ref(value) { + this._assign(this.table, 'ref', value); + } + get name() { + return this.table.name; + } + set name(value) { + this.table.name = value; + } + get displayName() { + return this.table.displyName || this.table.name; + } + set displayNamename(value) { + this.table.displayName = value; + } + get headerRow() { + return this.table.headerRow; + } + set headerRow(value) { + this._assign(this.table, 'headerRow', value); + } + get totalsRow() { + return this.table.totalsRow; + } + set totalsRow(value) { + this._assign(this.table, 'totalsRow', value); + } + get theme() { + return this.table.style.name; + } + set theme(value) { + this.table.style.name = value; + } + get showFirstColumn() { + return this.table.style.showFirstColumn; + } + set showFirstColumn(value) { + this.table.style.showFirstColumn = value; + } + get showLastColumn() { + return this.table.style.showLastColumn; + } + set showLastColumn(value) { + this.table.style.showLastColumn = value; + } + get showRowStripes() { + return this.table.style.showRowStripes; + } + set showRowStripes(value) { + this.table.style.showRowStripes = value; + } + get showColumnStripes() { + return this.table.style.showColumnStripes; + } + set showColumnStripes(value) { + this.table.style.showColumnStripes = value; + } + /* eslint-enable lines-between-class-members */ +} + +module.exports = Table; +//# sourceMappingURL=table.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/table.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/table.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1ddae0bf67dc780bf0e2ba08f1177959d35ef586 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/table.js.map @@ -0,0 +1 @@ +{"version":3,"file":"table.js","names":["colCache","require","Column","constructor","table","column","index","_set","name","value","cacheState","filterButton","style","totalsRowLabel","totalsRowFunction","totalsRowResult","totalsRowFormula","Table","worksheet","validate","store","getFormula","Error","width","columns","length","height","rows","filterHeight","headerRow","tableHeight","totalsRow","assign","o","dflt","undefined","assert","test","message","ref","tl","decodeAddress","row","col","autoFilterRef","encode","tableRef","forEach","i","assignStyle","cell","Object","keys","key","count","r","getRow","j","getCell","data","formula","result","load","model","_cache","commit","addRow","values","rowNumber","push","splice","removeRows","rowIndex","arguments","getColumn","colIndex","addColumn","removeColumns","_assign","target","prop","displayName","displyName","displayNamename","theme","showFirstColumn","showLastColumn","showRowStripes","showColumnStripes","module","exports"],"sources":["../../../lib/doc/table.js"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nconst colCache = require('../utils/col-cache');\n\nclass Column {\n // wrapper around column model, allowing access and manipulation\n constructor(table, column, index) {\n this.table = table;\n this.column = column;\n this.index = index;\n }\n\n _set(name, value) {\n this.table.cacheState();\n this.column[name] = value;\n }\n\n /* eslint-disable lines-between-class-members */\n get name() {\n return this.column.name;\n }\n set name(value) {\n this._set('name', value);\n }\n\n get filterButton() {\n return this.column.filterButton;\n }\n set filterButton(value) {\n this.column.filterButton = value;\n }\n\n get style() {\n return this.column.style;\n }\n set style(value) {\n this.column.style = value;\n }\n\n get totalsRowLabel() {\n return this.column.totalsRowLabel;\n }\n set totalsRowLabel(value) {\n this._set('totalsRowLabel', value);\n }\n\n get totalsRowFunction() {\n return this.column.totalsRowFunction;\n }\n set totalsRowFunction(value) {\n this._set('totalsRowFunction', value);\n }\n\n get totalsRowResult() {\n return this.column.totalsRowResult;\n }\n set totalsRowResult(value) {\n this._set('totalsRowResult', value);\n }\n\n get totalsRowFormula() {\n return this.column.totalsRowFormula;\n }\n set totalsRowFormula(value) {\n this._set('totalsRowFormula', value);\n }\n /* eslint-enable lines-between-class-members */\n}\n\nclass Table {\n constructor(worksheet, table) {\n this.worksheet = worksheet;\n if (table) {\n this.table = table;\n // check things are ok first\n this.validate();\n\n this.store();\n }\n }\n\n getFormula(column) {\n // get the correct formula to apply to the totals row\n switch (column.totalsRowFunction) {\n case 'none':\n return null;\n case 'average':\n return `SUBTOTAL(101,${this.table.name}[${column.name}])`;\n case 'countNums':\n return `SUBTOTAL(102,${this.table.name}[${column.name}])`;\n case 'count':\n return `SUBTOTAL(103,${this.table.name}[${column.name}])`;\n case 'max':\n return `SUBTOTAL(104,${this.table.name}[${column.name}])`;\n case 'min':\n return `SUBTOTAL(105,${this.table.name}[${column.name}])`;\n case 'stdDev':\n return `SUBTOTAL(106,${this.table.name}[${column.name}])`;\n case 'var':\n return `SUBTOTAL(107,${this.table.name}[${column.name}])`;\n case 'sum':\n return `SUBTOTAL(109,${this.table.name}[${column.name}])`;\n case 'custom':\n return column.totalsRowFormula;\n default:\n throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`);\n }\n }\n\n get width() {\n // width of the table\n return this.table.columns.length;\n }\n\n get height() {\n // height of the table data\n return this.table.rows.length;\n }\n\n get filterHeight() {\n // height of the table data plus optional header row\n return this.height + (this.table.headerRow ? 1 : 0);\n }\n\n get tableHeight() {\n // full height of the table on the sheet\n return this.filterHeight + (this.table.totalsRow ? 1 : 0);\n }\n\n validate() {\n const {table} = this;\n // set defaults and check is valid\n const assign = (o, name, dflt) => {\n if (o[name] === undefined) {\n o[name] = dflt;\n }\n };\n assign(table, 'headerRow', true);\n assign(table, 'totalsRow', false);\n\n assign(table, 'style', {});\n assign(table.style, 'theme', 'TableStyleMedium2');\n assign(table.style, 'showFirstColumn', false);\n assign(table.style, 'showLastColumn', false);\n assign(table.style, 'showRowStripes', false);\n assign(table.style, 'showColumnStripes', false);\n\n const assert = (test, message) => {\n if (!test) {\n throw new Error(message);\n }\n };\n assert(table.ref, 'Table must have ref');\n assert(table.columns, 'Table must have column definitions');\n assert(table.rows, 'Table must have row definitions');\n\n table.tl = colCache.decodeAddress(table.ref);\n const {row, col} = table.tl;\n assert(row > 0, 'Table must be on valid row');\n assert(col > 0, 'Table must be on valid col');\n\n const {width, filterHeight, tableHeight} = this;\n\n // autoFilterRef is a range that includes optional headers only\n table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1);\n\n // tableRef is a range that includes optional headers and totals\n table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1);\n\n table.columns.forEach((column, i) => {\n assert(column.name, `Column ${i} must have a name`);\n if (i === 0) {\n assign(column, 'totalsRowLabel', 'Total');\n } else {\n assign(column, 'totalsRowFunction', 'none');\n column.totalsRowFormula = this.getFormula(column);\n }\n });\n }\n\n store() {\n // where the table needs to store table data, headers, footers in\n // the sheet...\n const assignStyle = (cell, style) => {\n if (style) {\n Object.keys(style).forEach(key => {\n cell[key] = style[key];\n });\n }\n };\n\n const {worksheet, table} = this;\n const {row, col} = table.tl;\n let count = 0;\n if (table.headerRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const {style, name} = column;\n const cell = r.getCell(col + j);\n cell.value = name;\n assignStyle(cell, style);\n });\n }\n table.rows.forEach(data => {\n const r = worksheet.getRow(row + count++);\n data.forEach((value, j) => {\n const cell = r.getCell(col + j);\n cell.value = value;\n\n assignStyle(cell, table.columns[j].style);\n });\n });\n\n if (table.totalsRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n if (j === 0) {\n cell.value = column.totalsRowLabel;\n } else {\n const formula = this.getFormula(column);\n if (formula) {\n cell.value = {\n formula: column.totalsRowFormula,\n result: column.totalsRowResult,\n };\n } else {\n cell.value = null;\n }\n }\n\n assignStyle(cell, column.style);\n });\n }\n }\n\n load(worksheet) {\n // where the table will read necessary features from a loaded sheet\n const {table} = this;\n const {row, col} = table.tl;\n let count = 0;\n if (table.headerRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n cell.value = column.name;\n });\n }\n table.rows.forEach(data => {\n const r = worksheet.getRow(row + count++);\n data.forEach((value, j) => {\n const cell = r.getCell(col + j);\n cell.value = value;\n });\n });\n\n if (table.totalsRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n if (j === 0) {\n cell.value = column.totalsRowLabel;\n } else {\n const formula = this.getFormula(column);\n if (formula) {\n cell.value = {\n formula: column.totalsRowFormula,\n result: column.totalsRowResult,\n };\n }\n }\n });\n }\n }\n\n get model() {\n return this.table;\n }\n\n set model(value) {\n this.table = value;\n }\n\n // ================================================================\n // TODO: Mutating methods\n cacheState() {\n if (!this._cache) {\n this._cache = {\n ref: this.ref,\n width: this.width,\n tableHeight: this.tableHeight,\n };\n }\n }\n\n commit() {\n // changes may have been made that might have on-sheet effects\n if (!this._cache) {\n return;\n }\n\n // check things are ok first\n this.validate();\n\n const ref = colCache.decodeAddress(this._cache.ref);\n if (this.ref !== this._cache.ref) {\n // wipe out whole table footprint at previous location\n for (let i = 0; i < this._cache.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = 0; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n } else {\n // clear out below table if it has shrunk\n for (let i = this.tableHeight; i < this._cache.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = 0; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n\n // clear out to right of table if it has lost columns\n for (let i = 0; i < this.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = this.width; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n }\n\n this.store();\n }\n\n addRow(values, rowNumber) {\n // Add a row of data, either insert at rowNumber or append\n this.cacheState();\n\n if (rowNumber === undefined) {\n this.table.rows.push(values);\n } else {\n this.table.rows.splice(rowNumber, 0, values);\n }\n }\n\n removeRows(rowIndex, count = 1) {\n // Remove a rows of data\n this.cacheState();\n this.table.rows.splice(rowIndex, count);\n }\n\n getColumn(colIndex) {\n const column = this.table.columns[colIndex];\n return new Column(this, column, colIndex);\n }\n\n addColumn(column, values, colIndex) {\n // Add a new column, including column defn and values\n // Inserts at colNumber or adds to the right\n this.cacheState();\n\n if (colIndex === undefined) {\n this.table.columns.push(column);\n this.table.rows.forEach((row, i) => {\n row.push(values[i]);\n });\n } else {\n this.table.columns.splice(colIndex, 0, column);\n this.table.rows.forEach((row, i) => {\n row.splice(colIndex, 0, values[i]);\n });\n }\n }\n\n removeColumns(colIndex, count = 1) {\n // Remove a column with data\n this.cacheState();\n\n this.table.columns.splice(colIndex, count);\n this.table.rows.forEach(row => {\n row.splice(colIndex, count);\n });\n }\n\n _assign(target, prop, value) {\n this.cacheState();\n target[prop] = value;\n }\n\n /* eslint-disable lines-between-class-members */\n get ref() {\n return this.table.ref;\n }\n set ref(value) {\n this._assign(this.table, 'ref', value);\n }\n\n get name() {\n return this.table.name;\n }\n set name(value) {\n this.table.name = value;\n }\n\n get displayName() {\n return this.table.displyName || this.table.name;\n }\n set displayNamename(value) {\n this.table.displayName = value;\n }\n\n get headerRow() {\n return this.table.headerRow;\n }\n set headerRow(value) {\n this._assign(this.table, 'headerRow', value);\n }\n\n get totalsRow() {\n return this.table.totalsRow;\n }\n set totalsRow(value) {\n this._assign(this.table, 'totalsRow', value);\n }\n\n get theme() {\n return this.table.style.name;\n }\n set theme(value) {\n this.table.style.name = value;\n }\n\n get showFirstColumn() {\n return this.table.style.showFirstColumn;\n }\n set showFirstColumn(value) {\n this.table.style.showFirstColumn = value;\n }\n\n get showLastColumn() {\n return this.table.style.showLastColumn;\n }\n set showLastColumn(value) {\n this.table.style.showLastColumn = value;\n }\n\n get showRowStripes() {\n return this.table.style.showRowStripes;\n }\n set showRowStripes(value) {\n this.table.style.showRowStripes = value;\n }\n\n get showColumnStripes() {\n return this.table.style.showColumnStripes;\n }\n set showColumnStripes(value) {\n this.table.style.showColumnStripes = value;\n }\n /* eslint-enable lines-between-class-members */\n}\n\nmodule.exports = Table;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/workbook.js b/node_backend/node_modules/exceljs/dist/es5/doc/workbook.js new file mode 100644 index 0000000000000000000000000000000000000000..908d8a5e531dc7d557dd2bcbbf6af89a5d92cc38 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/workbook.js @@ -0,0 +1,202 @@ +'use strict'; + +const Worksheet = require('./worksheet'); +const DefinedNames = require('./defined-names'); +const XLSX = require('../xlsx/xlsx'); +const CSV = require('../csv/csv'); + +// Workbook requirements +// Load and Save from file and stream +// Access/Add/Delete individual worksheets +// Manage String table, Hyperlink table, etc. +// Manage scaffolding for contained objects to write to/read from + +class Workbook { + constructor() { + this.category = ''; + this.company = ''; + this.created = new Date(); + this.description = ''; + this.keywords = ''; + this.manager = ''; + this.modified = this.created; + this.properties = {}; + this.calcProperties = {}; + this._worksheets = []; + this.subject = ''; + this.title = ''; + this.views = []; + this.media = []; + this._definedNames = new DefinedNames(); + } + get xlsx() { + if (!this._xlsx) this._xlsx = new XLSX(this); + return this._xlsx; + } + get csv() { + if (!this._csv) this._csv = new CSV(this); + return this._csv; + } + get nextId() { + // find the next unique spot to add worksheet + for (let i = 1; i < this._worksheets.length; i++) { + if (!this._worksheets[i]) { + return i; + } + } + return this._worksheets.length || 1; + } + addWorksheet(name, options) { + const id = this.nextId; + + // if options is a color, call it tabColor (and signal deprecated message) + if (options) { + if (typeof options === 'string') { + // eslint-disable-next-line no-console + console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: "rbg value" } }'); + options = { + properties: { + tabColor: { + argb: options + } + } + }; + } else if (options.argb || options.theme || options.indexed) { + // eslint-disable-next-line no-console + console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }'); + options = { + properties: { + tabColor: options + } + }; + } + } + const lastOrderNo = this._worksheets.reduce((acc, ws) => (ws && ws.orderNo) > acc ? ws.orderNo : acc, 0); + const worksheetOptions = Object.assign({}, options, { + id, + name, + orderNo: lastOrderNo + 1, + workbook: this + }); + const worksheet = new Worksheet(worksheetOptions); + this._worksheets[id] = worksheet; + return worksheet; + } + removeWorksheetEx(worksheet) { + delete this._worksheets[worksheet.id]; + } + removeWorksheet(id) { + const worksheet = this.getWorksheet(id); + if (worksheet) { + worksheet.destroy(); + } + } + getWorksheet(id) { + if (id === undefined) { + return this._worksheets.find(Boolean); + } + if (typeof id === 'number') { + return this._worksheets[id]; + } + if (typeof id === 'string') { + return this._worksheets.find(worksheet => worksheet && worksheet.name === id); + } + return undefined; + } + get worksheets() { + // return a clone of _worksheets + return this._worksheets.slice(1).sort((a, b) => a.orderNo - b.orderNo).filter(Boolean); + } + eachSheet(iteratee) { + this.worksheets.forEach(sheet => { + iteratee(sheet, sheet.id); + }); + } + get definedNames() { + return this._definedNames; + } + clearThemes() { + // Note: themes are not an exposed feature, meddle at your peril! + this._themes = undefined; + } + addImage(image) { + // TODO: validation? + const id = this.media.length; + this.media.push(Object.assign({}, image, { + type: 'image' + })); + return id; + } + getImage(id) { + return this.media[id]; + } + get model() { + return { + creator: this.creator || 'Unknown', + lastModifiedBy: this.lastModifiedBy || 'Unknown', + lastPrinted: this.lastPrinted, + created: this.created, + modified: this.modified, + properties: this.properties, + worksheets: this.worksheets.map(worksheet => worksheet.model), + sheets: this.worksheets.map(ws => ws.model).filter(Boolean), + definedNames: this._definedNames.model, + views: this.views, + company: this.company, + manager: this.manager, + title: this.title, + subject: this.subject, + keywords: this.keywords, + category: this.category, + description: this.description, + language: this.language, + revision: this.revision, + contentStatus: this.contentStatus, + themes: this._themes, + media: this.media, + calcProperties: this.calcProperties + }; + } + set model(value) { + this.creator = value.creator; + this.lastModifiedBy = value.lastModifiedBy; + this.lastPrinted = value.lastPrinted; + this.created = value.created; + this.modified = value.modified; + this.company = value.company; + this.manager = value.manager; + this.title = value.title; + this.subject = value.subject; + this.keywords = value.keywords; + this.category = value.category; + this.description = value.description; + this.language = value.language; + this.revision = value.revision; + this.contentStatus = value.contentStatus; + this.properties = value.properties; + this.calcProperties = value.calcProperties; + this._worksheets = []; + value.worksheets.forEach(worksheetModel => { + const { + id, + name, + state + } = worksheetModel; + const orderNo = value.sheets && value.sheets.findIndex(ws => ws.id === id); + const worksheet = this._worksheets[id] = new Worksheet({ + id, + name, + orderNo, + state, + workbook: this + }); + worksheet.model = worksheetModel; + }); + this._definedNames.model = value.definedNames; + this.views = value.views; + this._themes = value.themes; + this.media = value.media || []; + } +} +module.exports = Workbook; +//# sourceMappingURL=workbook.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/workbook.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/workbook.js.map new file mode 100644 index 0000000000000000000000000000000000000000..765c79138be9dfe63f861492d7cf8814b549e489 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/workbook.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workbook.js","names":["Worksheet","require","DefinedNames","XLSX","CSV","Workbook","constructor","category","company","created","Date","description","keywords","manager","modified","properties","calcProperties","_worksheets","subject","title","views","media","_definedNames","xlsx","_xlsx","csv","_csv","nextId","i","length","addWorksheet","name","options","id","console","trace","tabColor","argb","theme","indexed","lastOrderNo","reduce","acc","ws","orderNo","worksheetOptions","Object","assign","workbook","worksheet","removeWorksheetEx","removeWorksheet","getWorksheet","destroy","undefined","find","Boolean","worksheets","slice","sort","a","b","filter","eachSheet","iteratee","forEach","sheet","definedNames","clearThemes","_themes","addImage","image","push","type","getImage","model","creator","lastModifiedBy","lastPrinted","map","sheets","language","revision","contentStatus","themes","value","worksheetModel","state","findIndex","module","exports"],"sources":["../../../lib/doc/workbook.js"],"sourcesContent":["'use strict';\n\nconst Worksheet = require('./worksheet');\nconst DefinedNames = require('./defined-names');\nconst XLSX = require('../xlsx/xlsx');\nconst CSV = require('../csv/csv');\n\n// Workbook requirements\n// Load and Save from file and stream\n// Access/Add/Delete individual worksheets\n// Manage String table, Hyperlink table, etc.\n// Manage scaffolding for contained objects to write to/read from\n\nclass Workbook {\n constructor() {\n this.category = '';\n this.company = '';\n this.created = new Date();\n this.description = '';\n this.keywords = '';\n this.manager = '';\n this.modified = this.created;\n this.properties = {};\n this.calcProperties = {};\n this._worksheets = [];\n this.subject = '';\n this.title = '';\n this.views = [];\n this.media = [];\n this._definedNames = new DefinedNames();\n }\n\n get xlsx() {\n if (!this._xlsx) this._xlsx = new XLSX(this);\n return this._xlsx;\n }\n\n get csv() {\n if (!this._csv) this._csv = new CSV(this);\n return this._csv;\n }\n\n get nextId() {\n // find the next unique spot to add worksheet\n for (let i = 1; i < this._worksheets.length; i++) {\n if (!this._worksheets[i]) {\n return i;\n }\n }\n return this._worksheets.length || 1;\n }\n\n addWorksheet(name, options) {\n const id = this.nextId;\n\n // if options is a color, call it tabColor (and signal deprecated message)\n if (options) {\n if (typeof options === 'string') {\n // eslint-disable-next-line no-console\n console.trace(\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: \"rbg value\" } }'\n );\n options = {\n properties: {\n tabColor: {argb: options},\n },\n };\n } else if (options.argb || options.theme || options.indexed) {\n // eslint-disable-next-line no-console\n console.trace(\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }'\n );\n options = {\n properties: {\n tabColor: options,\n },\n };\n }\n }\n\n const lastOrderNo = this._worksheets.reduce((acc, ws) => ((ws && ws.orderNo) > acc ? ws.orderNo : acc), 0);\n const worksheetOptions = Object.assign({}, options, {\n id,\n name,\n orderNo: lastOrderNo + 1,\n workbook: this,\n });\n\n const worksheet = new Worksheet(worksheetOptions);\n\n this._worksheets[id] = worksheet;\n return worksheet;\n }\n\n removeWorksheetEx(worksheet) {\n delete this._worksheets[worksheet.id];\n }\n\n removeWorksheet(id) {\n const worksheet = this.getWorksheet(id);\n if (worksheet) {\n worksheet.destroy();\n }\n }\n\n getWorksheet(id) {\n if (id === undefined) {\n return this._worksheets.find(Boolean);\n }\n if (typeof id === 'number') {\n return this._worksheets[id];\n }\n if (typeof id === 'string') {\n return this._worksheets.find(worksheet => worksheet && worksheet.name === id);\n }\n return undefined;\n }\n\n get worksheets() {\n // return a clone of _worksheets\n return this._worksheets\n .slice(1)\n .sort((a, b) => a.orderNo - b.orderNo)\n .filter(Boolean);\n }\n\n eachSheet(iteratee) {\n this.worksheets.forEach(sheet => {\n iteratee(sheet, sheet.id);\n });\n }\n\n get definedNames() {\n return this._definedNames;\n }\n\n clearThemes() {\n // Note: themes are not an exposed feature, meddle at your peril!\n this._themes = undefined;\n }\n\n addImage(image) {\n // TODO: validation?\n const id = this.media.length;\n this.media.push(Object.assign({}, image, {type: 'image'}));\n return id;\n }\n\n getImage(id) {\n return this.media[id];\n }\n\n get model() {\n return {\n creator: this.creator || 'Unknown',\n lastModifiedBy: this.lastModifiedBy || 'Unknown',\n lastPrinted: this.lastPrinted,\n created: this.created,\n modified: this.modified,\n properties: this.properties,\n worksheets: this.worksheets.map(worksheet => worksheet.model),\n sheets: this.worksheets.map(ws => ws.model).filter(Boolean),\n definedNames: this._definedNames.model,\n views: this.views,\n company: this.company,\n manager: this.manager,\n title: this.title,\n subject: this.subject,\n keywords: this.keywords,\n category: this.category,\n description: this.description,\n language: this.language,\n revision: this.revision,\n contentStatus: this.contentStatus,\n themes: this._themes,\n media: this.media,\n calcProperties: this.calcProperties,\n };\n }\n\n set model(value) {\n this.creator = value.creator;\n this.lastModifiedBy = value.lastModifiedBy;\n this.lastPrinted = value.lastPrinted;\n this.created = value.created;\n this.modified = value.modified;\n this.company = value.company;\n this.manager = value.manager;\n this.title = value.title;\n this.subject = value.subject;\n this.keywords = value.keywords;\n this.category = value.category;\n this.description = value.description;\n this.language = value.language;\n this.revision = value.revision;\n this.contentStatus = value.contentStatus;\n\n this.properties = value.properties;\n this.calcProperties = value.calcProperties;\n this._worksheets = [];\n value.worksheets.forEach(worksheetModel => {\n const {id, name, state} = worksheetModel;\n const orderNo = value.sheets && value.sheets.findIndex(ws => ws.id === id);\n const worksheet = (this._worksheets[id] = new Worksheet({\n id,\n name,\n orderNo,\n state,\n workbook: this,\n }));\n worksheet.model = worksheetModel;\n });\n\n this._definedNames.model = value.definedNames;\n this.views = value.views;\n this._themes = value.themes;\n this.media = value.media || [];\n }\n}\n\nmodule.exports = Workbook;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/worksheet.js b/node_backend/node_modules/exceljs/dist/es5/doc/worksheet.js new file mode 100644 index 0000000000000000000000000000000000000000..1584ed76110873875a6fba9811bdfcb308eed546 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/worksheet.js @@ -0,0 +1,900 @@ +"use strict"; + +const _ = require('../utils/under-dash'); +const colCache = require('../utils/col-cache'); +const Range = require('./range'); +const Row = require('./row'); +const Column = require('./column'); +const Enums = require('./enums'); +const Image = require('./image'); +const Table = require('./table'); +const DataValidations = require('./data-validations'); +const Encryptor = require('../utils/encryptor'); +const { + copyStyle +} = require('../utils/copy-style'); + +// Worksheet requirements +// Operate as sheet inside workbook or standalone +// Load and Save from file and stream +// Access/Add/Delete individual cells +// Manage column widths and row heights + +class Worksheet { + constructor(options) { + options = options || {}; + this._workbook = options.workbook; + + // in a workbook, each sheet will have a number + this.id = options.id; + this.orderNo = options.orderNo; + + // and a name + this.name = options.name; + + // add a state + this.state = options.state || 'visible'; + + // rows allows access organised by row. Sparse array of arrays indexed by row-1, col + // Note: _rows is zero based. Must subtract 1 to go from cell.row to index + this._rows = []; + + // column definitions + this._columns = null; + + // column keys (addRow convenience): key ==> this._collumns index + this._keys = {}; + + // keep record of all merges + this._merges = {}; + + // record of all row and column pageBreaks + this.rowBreaks = []; + + // for tabColor, default row height, outline levels, etc + this.properties = Object.assign({}, { + defaultRowHeight: 15, + dyDescent: 55, + outlineLevelCol: 0, + outlineLevelRow: 0 + }, options.properties); + + // for all things printing + this.pageSetup = Object.assign({}, { + margins: { + left: 0.7, + right: 0.7, + top: 0.75, + bottom: 0.75, + header: 0.3, + footer: 0.3 + }, + orientation: 'portrait', + horizontalDpi: 4294967295, + verticalDpi: 4294967295, + fitToPage: !!(options.pageSetup && (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) && !options.pageSetup.scale), + pageOrder: 'downThenOver', + blackAndWhite: false, + draft: false, + cellComments: 'None', + errors: 'displayed', + scale: 100, + fitToWidth: 1, + fitToHeight: 1, + paperSize: undefined, + showRowColHeaders: false, + showGridLines: false, + firstPageNumber: undefined, + horizontalCentered: false, + verticalCentered: false, + rowBreaks: null, + colBreaks: null + }, options.pageSetup); + this.headerFooter = Object.assign({}, { + differentFirst: false, + differentOddEven: false, + oddHeader: null, + oddFooter: null, + evenHeader: null, + evenFooter: null, + firstHeader: null, + firstFooter: null + }, options.headerFooter); + this.dataValidations = new DataValidations(); + + // for freezepanes, split, zoom, gridlines, etc + this.views = options.views || []; + this.autoFilter = options.autoFilter || null; + + // for images, etc + this._media = []; + + // worksheet protection + this.sheetProtection = null; + + // for tables + this.tables = {}; + this.conditionalFormattings = []; + } + get name() { + return this._name; + } + set name(name) { + if (name === undefined) { + name = `sheet${this.id}`; + } + if (this._name === name) return; + if (typeof name !== 'string') { + throw new Error('The name has to be a string.'); + } + if (name === '') { + throw new Error('The name can\'t be empty.'); + } + if (name === 'History') { + throw new Error('The name "History" is protected. Please use a different name.'); + } + + // Illegal character in worksheet name: asterisk (*), question mark (?), + // colon (:), forward slash (/ \), or bracket ([]) + if (/[*?:/\\[\]]/.test(name)) { + throw new Error(`Worksheet name ${name} cannot include any of the following characters: * ? : \\ / [ ]`); + } + if (/(^')|('$)/.test(name)) { + throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${name}`); + } + if (name && name.length > 31) { + // eslint-disable-next-line no-console + console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`); + name = name.substring(0, 31); + } + if (this._workbook._worksheets.find(ws => ws && ws.name.toLowerCase() === name.toLowerCase())) { + throw new Error(`Worksheet name already exists: ${name}`); + } + this._name = name; + } + get workbook() { + return this._workbook; + } + + // when you're done with this worksheet, call this to remove from workbook + destroy() { + this._workbook.removeWorksheetEx(this); + } + + // Get the bounding range of the cells in this worksheet + get dimensions() { + const dimensions = new Range(); + this._rows.forEach(row => { + if (row) { + const rowDims = row.dimensions; + if (rowDims) { + dimensions.expand(row.number, rowDims.min, row.number, rowDims.max); + } + } + }); + return dimensions; + } + + // ========================================================================= + // Columns + + // get the current columns array. + get columns() { + return this._columns; + } + + // set the columns from an array of column definitions. + // Note: any headers defined will overwrite existing values. + set columns(value) { + // calculate max header row count + this._headerRowCount = value.reduce((pv, cv) => { + const headerCount = cv.header && 1 || cv.headers && cv.headers.length || 0; + return Math.max(pv, headerCount); + }, 0); + + // construct Column objects + let count = 1; + const columns = this._columns = []; + value.forEach(defn => { + const column = new Column(this, count++, false); + columns.push(column); + column.defn = defn; + }); + } + getColumnKey(key) { + return this._keys[key]; + } + setColumnKey(key, value) { + this._keys[key] = value; + } + deleteColumnKey(key) { + delete this._keys[key]; + } + eachColumnKey(f) { + _.each(this._keys, f); + } + + // get a single column by col number. If it doesn't exist, create it and any gaps before it + getColumn(c) { + if (typeof c === 'string') { + // if it matches a key'd column, return that + const col = this._keys[c]; + if (col) return col; + + // otherwise, assume letter + c = colCache.l2n(c); + } + if (!this._columns) { + this._columns = []; + } + if (c > this._columns.length) { + let n = this._columns.length + 1; + while (n <= c) { + this._columns.push(new Column(this, n++)); + } + } + return this._columns[c - 1]; + } + spliceColumns(start, count) { + const rows = this._rows; + const nRows = rows.length; + for (var _len = arguments.length, inserts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + inserts[_key - 2] = arguments[_key]; + } + if (inserts.length > 0) { + // must iterate over all rows whether they exist yet or not + for (let i = 0; i < nRows; i++) { + const rowArguments = [start, count]; + // eslint-disable-next-line no-loop-func + inserts.forEach(insert => { + rowArguments.push(insert[i] || null); + }); + const row = this.getRow(i + 1); + // eslint-disable-next-line prefer-spread + row.splice.apply(row, rowArguments); + } + } else { + // nothing to insert, so just splice all rows + this._rows.forEach(r => { + if (r) { + r.splice(start, count); + } + }); + } + + // splice column definitions + const nExpand = inserts.length - count; + const nKeep = start + count; + const nEnd = this._columns.length; + if (nExpand < 0) { + for (let i = start + inserts.length; i <= nEnd; i++) { + this.getColumn(i).defn = this.getColumn(i - nExpand).defn; + } + } else if (nExpand > 0) { + for (let i = nEnd; i >= nKeep; i--) { + this.getColumn(i + nExpand).defn = this.getColumn(i).defn; + } + } + for (let i = start; i < start + inserts.length; i++) { + this.getColumn(i).defn = null; + } + + // account for defined names + this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length); + } + get lastColumn() { + return this.getColumn(this.columnCount); + } + get columnCount() { + let maxCount = 0; + this.eachRow(row => { + maxCount = Math.max(maxCount, row.cellCount); + }); + return maxCount; + } + get actualColumnCount() { + // performance nightmare - for each row, counts all the columns used + const counts = []; + let count = 0; + this.eachRow(row => { + row.eachCell(_ref => { + let { + col + } = _ref; + if (!counts[col]) { + counts[col] = true; + count++; + } + }); + }); + return count; + } + + // ========================================================================= + // Rows + + _commitRow() { + // nop - allows streaming reader to fill a document + } + get _lastRowNumber() { + // need to cope with results of splice + const rows = this._rows; + let n = rows.length; + while (n > 0 && rows[n - 1] === undefined) { + n--; + } + return n; + } + get _nextRow() { + return this._lastRowNumber + 1; + } + get lastRow() { + if (this._rows.length) { + return this._rows[this._rows.length - 1]; + } + return undefined; + } + + // find a row (if exists) by row number + findRow(r) { + return this._rows[r - 1]; + } + + // find multiple rows (if exists) by row number + findRows(start, length) { + return this._rows.slice(start - 1, start - 1 + length); + } + get rowCount() { + return this._lastRowNumber; + } + get actualRowCount() { + // counts actual rows that have actual data + let count = 0; + this.eachRow(() => { + count++; + }); + return count; + } + + // get a row by row number. + getRow(r) { + let row = this._rows[r - 1]; + if (!row) { + row = this._rows[r - 1] = new Row(this, r); + } + return row; + } + + // get multiple rows by row number. + getRows(start, length) { + if (length < 1) return undefined; + const rows = []; + for (let i = start; i < start + length; i++) { + rows.push(this.getRow(i)); + } + return rows; + } + addRow(value) { + let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n'; + const rowNo = this._nextRow; + const row = this.getRow(rowNo); + row.values = value; + this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n'); + return row; + } + addRows(value) { + let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n'; + const rows = []; + value.forEach(row => { + rows.push(this.addRow(row, style)); + }); + return rows; + } + insertRow(pos, value) { + let style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'n'; + this.spliceRows(pos, 0, value); + this._setStyleOption(pos, style); + return this.getRow(pos); + } + insertRows(pos, values) { + let style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'n'; + this.spliceRows(pos, 0, ...values); + if (style !== 'n') { + // copy over the styles + for (let i = 0; i < values.length; i++) { + if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) { + this._copyStyle(values.length + pos + i, pos + i, style[1] === '+'); + } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) { + this._copyStyle(pos - 1, pos + i, style[1] === '+'); + } + } + } + return this.getRows(pos, values.length); + } + + // set row at position to same style as of either pervious row (option 'i') or next row (option 'o') + _setStyleOption(pos) { + let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n'; + if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) { + this._copyStyle(pos + 1, pos, style[1] === '+'); + } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) { + this._copyStyle(pos - 1, pos, style[1] === '+'); + } + } + _copyStyle(src, dest) { + let styleEmpty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + const rSrc = this.getRow(src); + const rDst = this.getRow(dest); + rDst.style = copyStyle(rSrc.style); + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: styleEmpty + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = copyStyle(cell.style); + }); + rDst.height = rSrc.height; + } + duplicateRow(rowNum, count) { + let insert = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + // create count duplicates of rowNum + // either inserting new or overwriting existing rows + + const rSrc = this._rows[rowNum - 1]; + const inserts = new Array(count).fill(rSrc.values); + this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts); + + // now copy styles... + for (let i = 0; i < count; i++) { + const rDst = this._rows[rowNum + i]; + rDst.style = rSrc.style; + rDst.height = rSrc.height; + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: true + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = cell.style; + }); + } + } + spliceRows(start, count) { + // same problem as row.splice, except worse. + const nKeep = start + count; + for (var _len2 = arguments.length, inserts = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + inserts[_key2 - 2] = arguments[_key2]; + } + const nInserts = inserts.length; + const nExpand = nInserts - count; + const nEnd = this._rows.length; + let i; + let rSrc; + if (nExpand < 0) { + // remove rows + if (start === nEnd) { + this._rows[nEnd - 1] = undefined; + } + for (i = nKeep; i <= nEnd; i++) { + rSrc = this._rows[i - 1]; + if (rSrc) { + const rDst = this.getRow(i + nExpand); + rDst.values = rSrc.values; + rDst.style = rSrc.style; + rDst.height = rSrc.height; + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: true + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = cell.style; + }); + this._rows[i - 1] = undefined; + } else { + this._rows[i + nExpand - 1] = undefined; + } + } + } else if (nExpand > 0) { + // insert new cells + for (i = nEnd; i >= nKeep; i--) { + rSrc = this._rows[i - 1]; + if (rSrc) { + const rDst = this.getRow(i + nExpand); + rDst.values = rSrc.values; + rDst.style = rSrc.style; + rDst.height = rSrc.height; + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: true + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = cell.style; + + // remerge cells accounting for insert offset + if (cell._value.constructor.name === 'MergeValue') { + const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber); + const prevMaster = cell._value._master; + const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number); + cellToBeMerged.merge(newMaster); + } + }); + } else { + this._rows[i + nExpand - 1] = undefined; + } + } + } + + // now copy over the new values + for (i = 0; i < nInserts; i++) { + const rDst = this.getRow(start + i); + rDst.style = {}; + rDst.values = inserts[i]; + } + + // account for defined names + this.workbook.definedNames.spliceRows(this.name, start, count, nInserts); + } + + // iterate over every row in the worksheet, including maybe empty rows + eachRow(options, iteratee) { + if (!iteratee) { + iteratee = options; + options = undefined; + } + if (options && options.includeEmpty) { + const n = this._rows.length; + for (let i = 1; i <= n; i++) { + iteratee(this.getRow(i), i); + } + } else { + this._rows.forEach(row => { + if (row && row.hasValues) { + iteratee(row, row.number); + } + }); + } + } + + // return all rows as sparse array + getSheetValues() { + const rows = []; + this._rows.forEach(row => { + if (row) { + rows[row.number] = row.values; + } + }); + return rows; + } + + // ========================================================================= + // Cells + + // returns the cell at [r,c] or address given by r. If not found, return undefined + findCell(r, c) { + const address = colCache.getAddress(r, c); + const row = this._rows[address.row - 1]; + return row ? row.findCell(address.col) : undefined; + } + + // return the cell at [r,c] or address given by r. If not found, create a new one. + getCell(r, c) { + const address = colCache.getAddress(r, c); + const row = this.getRow(address.row); + return row.getCellEx(address); + } + + // ========================================================================= + // Merge + + // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell + mergeCells() { + for (var _len3 = arguments.length, cells = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + cells[_key3] = arguments[_key3]; + } + const dimensions = new Range(cells); + this._mergeCellsInternal(dimensions); + } + mergeCellsWithoutStyle() { + for (var _len4 = arguments.length, cells = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + cells[_key4] = arguments[_key4]; + } + const dimensions = new Range(cells); + this._mergeCellsInternal(dimensions, true); + } + _mergeCellsInternal(dimensions, ignoreStyle) { + // check cells aren't already merged + _.each(this._merges, merge => { + if (merge.intersects(dimensions)) { + throw new Error('Cannot merge already merged cells'); + } + }); + + // apply merge + const master = this.getCell(dimensions.top, dimensions.left); + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + for (let j = dimensions.left; j <= dimensions.right; j++) { + // merge all but the master cell + if (i > dimensions.top || j > dimensions.left) { + this.getCell(i, j).merge(master, ignoreStyle); + } + } + } + + // index merge + this._merges[master.address] = dimensions; + } + _unMergeMaster(master) { + // master is always top left of a rectangle + const merge = this._merges[master.address]; + if (merge) { + for (let i = merge.top; i <= merge.bottom; i++) { + for (let j = merge.left; j <= merge.right; j++) { + this.getCell(i, j).unmerge(); + } + } + delete this._merges[master.address]; + } + } + get hasMerges() { + // return true if this._merges has a merge object + return _.some(this._merges, Boolean); + } + + // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge, + // un-merge the group. Note this function can affect multiple merges and merge-blocks are + // atomic - either they're all merged or all un-merged. + unMergeCells() { + for (var _len5 = arguments.length, cells = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + cells[_key5] = arguments[_key5]; + } + const dimensions = new Range(cells); + + // find any cells in that range and unmerge them + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + for (let j = dimensions.left; j <= dimensions.right; j++) { + const cell = this.findCell(i, j); + if (cell) { + if (cell.type === Enums.ValueType.Merge) { + // this cell merges to another master + this._unMergeMaster(cell.master); + } else if (this._merges[cell.address]) { + // this cell is a master + this._unMergeMaster(cell); + } + } + } + } + } + + // =========================================================================== + // Shared/Array Formula + fillFormula(range, formula, results) { + let shareType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'shared'; + // Define formula for top-left cell and share to rest + const decoded = colCache.decode(range); + const { + top, + left, + bottom, + right + } = decoded; + const width = right - left + 1; + const masterAddress = colCache.encodeAddress(top, left); + const isShared = shareType === 'shared'; + + // work out result accessor + let getResult; + if (typeof results === 'function') { + getResult = results; + } else if (Array.isArray(results)) { + if (Array.isArray(results[0])) { + getResult = (row, col) => results[row - top][col - left]; + } else { + // eslint-disable-next-line no-mixed-operators + getResult = (row, col) => results[(row - top) * width + (col - left)]; + } + } else { + getResult = () => undefined; + } + let first = true; + for (let r = top; r <= bottom; r++) { + for (let c = left; c <= right; c++) { + if (first) { + this.getCell(r, c).value = { + shareType, + formula, + ref: range, + result: getResult(r, c) + }; + first = false; + } else { + this.getCell(r, c).value = isShared ? { + sharedFormula: masterAddress, + result: getResult(r, c) + } : getResult(r, c); + } + } + } + } + + // ========================================================================= + // Images + addImage(imageId, range) { + const model = { + type: 'image', + imageId, + range + }; + this._media.push(new Image(this, model)); + } + getImages() { + return this._media.filter(m => m.type === 'image'); + } + addBackgroundImage(imageId) { + const model = { + type: 'background', + imageId + }; + this._media.push(new Image(this, model)); + } + getBackgroundImageId() { + const image = this._media.find(m => m.type === 'background'); + return image && image.imageId; + } + + // ========================================================================= + // Worksheet Protection + protect(password, options) { + // TODO: make this function truly async + // perhaps marshal to worker thread or something + return new Promise(resolve => { + this.sheetProtection = { + sheet: true + }; + if (options && 'spinCount' in options) { + // force spinCount to be integer >= 0 + options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000; + } + if (password) { + this.sheetProtection.algorithmName = 'SHA-512'; + this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64'); + this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount + this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(password, 'SHA512', this.sheetProtection.saltValue, this.sheetProtection.spinCount); + } + if (options) { + this.sheetProtection = Object.assign(this.sheetProtection, options); + if (!password && 'spinCount' in options) { + delete this.sheetProtection.spinCount; + } + } + resolve(); + }); + } + unprotect() { + this.sheetProtection = null; + } + + // ========================================================================= + // Tables + addTable(model) { + const table = new Table(this, model); + this.tables[model.name] = table; + return table; + } + getTable(name) { + return this.tables[name]; + } + removeTable(name) { + delete this.tables[name]; + } + getTables() { + return Object.values(this.tables); + } + + // =========================================================================== + // Conditional Formatting + addConditionalFormatting(cf) { + this.conditionalFormattings.push(cf); + } + removeConditionalFormatting(filter) { + if (typeof filter === 'number') { + this.conditionalFormattings.splice(filter, 1); + } else if (filter instanceof Function) { + this.conditionalFormattings = this.conditionalFormattings.filter(filter); + } else { + this.conditionalFormattings = []; + } + } + + // =========================================================================== + // Deprecated + get tabColor() { + // eslint-disable-next-line no-console + console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor'); + return this.properties.tabColor; + } + set tabColor(value) { + // eslint-disable-next-line no-console + console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor'); + this.properties.tabColor = value; + } + + // =========================================================================== + // Model + + get model() { + const model = { + id: this.id, + name: this.name, + dataValidations: this.dataValidations.model, + properties: this.properties, + state: this.state, + pageSetup: this.pageSetup, + headerFooter: this.headerFooter, + rowBreaks: this.rowBreaks, + views: this.views, + autoFilter: this.autoFilter, + media: this._media.map(medium => medium.model), + sheetProtection: this.sheetProtection, + tables: Object.values(this.tables).map(table => table.model), + conditionalFormattings: this.conditionalFormattings + }; + + // ================================================= + // columns + model.cols = Column.toModel(this.columns); + + // ========================================================== + // Rows + const rows = model.rows = []; + const dimensions = model.dimensions = new Range(); + this._rows.forEach(row => { + const rowModel = row && row.model; + if (rowModel) { + dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max); + rows.push(rowModel); + } + }); + + // ========================================================== + // Merges + model.merges = []; + _.each(this._merges, merge => { + model.merges.push(merge.range); + }); + return model; + } + _parseRows(model) { + this._rows = []; + model.rows.forEach(rowModel => { + const row = new Row(this, rowModel.number); + this._rows[row.number - 1] = row; + row.model = rowModel; + }); + } + _parseMergeCells(model) { + _.each(model.mergeCells, merge => { + // Do not merge styles when importing an Excel file + // since each cell may have different styles intentionally. + this.mergeCellsWithoutStyle(merge); + }); + } + set model(value) { + this.name = value.name; + this._columns = Column.fromModel(this, value.cols); + this._parseRows(value); + this._parseMergeCells(value); + this.dataValidations = new DataValidations(value.dataValidations); + this.properties = value.properties; + this.pageSetup = value.pageSetup; + this.headerFooter = value.headerFooter; + this.views = value.views; + this.autoFilter = value.autoFilter; + this._media = value.media.map(medium => new Image(this, medium)); + this.sheetProtection = value.sheetProtection; + this.tables = value.tables.reduce((tables, table) => { + const t = new Table(); + t.model = table; + tables[table.name] = t; + return tables; + }, {}); + this.conditionalFormattings = value.conditionalFormattings; + } +} +module.exports = Worksheet; +//# sourceMappingURL=worksheet.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/doc/worksheet.js.map b/node_backend/node_modules/exceljs/dist/es5/doc/worksheet.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0a87506dc6d12a5e567f16be78f2a431745b6f2f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/doc/worksheet.js.map @@ -0,0 +1 @@ +{"version":3,"file":"worksheet.js","names":["_","require","colCache","Range","Row","Column","Enums","Image","Table","DataValidations","Encryptor","copyStyle","Worksheet","constructor","options","_workbook","workbook","id","orderNo","name","state","_rows","_columns","_keys","_merges","rowBreaks","properties","Object","assign","defaultRowHeight","dyDescent","outlineLevelCol","outlineLevelRow","pageSetup","margins","left","right","top","bottom","header","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","undefined","showRowColHeaders","showGridLines","firstPageNumber","horizontalCentered","verticalCentered","colBreaks","headerFooter","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","dataValidations","views","autoFilter","_media","sheetProtection","tables","conditionalFormattings","_name","Error","test","length","console","warn","substring","_worksheets","find","ws","toLowerCase","destroy","removeWorksheetEx","dimensions","forEach","row","rowDims","expand","number","min","max","columns","value","_headerRowCount","reduce","pv","cv","headerCount","headers","Math","count","defn","column","push","getColumnKey","key","setColumnKey","deleteColumnKey","eachColumnKey","f","each","getColumn","c","col","l2n","n","spliceColumns","start","rows","nRows","_len","arguments","inserts","Array","_key","i","rowArguments","insert","getRow","splice","apply","r","nExpand","nKeep","nEnd","definedNames","lastColumn","columnCount","maxCount","eachRow","cellCount","actualColumnCount","counts","eachCell","_ref","_commitRow","_lastRowNumber","_nextRow","lastRow","findRow","findRows","slice","rowCount","actualRowCount","getRows","addRow","style","rowNo","values","_setStyleOption","addRows","insertRow","pos","spliceRows","insertRows","_copyStyle","src","dest","styleEmpty","rSrc","rDst","includeEmpty","cell","colNumber","getCell","height","duplicateRow","rowNum","fill","_len2","_key2","nInserts","_value","cellToBeMerged","_row","_number","prevMaster","_master","newMaster","_column","merge","iteratee","hasValues","getSheetValues","findCell","address","getAddress","getCellEx","mergeCells","_len3","cells","_key3","_mergeCellsInternal","mergeCellsWithoutStyle","_len4","_key4","ignoreStyle","intersects","master","j","_unMergeMaster","unmerge","hasMerges","some","Boolean","unMergeCells","_len5","_key5","type","ValueType","Merge","fillFormula","range","formula","results","shareType","decoded","decode","width","masterAddress","encodeAddress","isShared","getResult","isArray","first","ref","result","sharedFormula","addImage","imageId","model","getImages","filter","m","addBackgroundImage","getBackgroundImageId","image","protect","password","Promise","resolve","sheet","spinCount","Number","isFinite","round","algorithmName","saltValue","randomBytes","toString","hashValue","convertPasswordToHash","unprotect","addTable","table","getTable","removeTable","getTables","addConditionalFormatting","cf","removeConditionalFormatting","Function","tabColor","trace","media","map","medium","cols","toModel","rowModel","merges","_parseRows","_parseMergeCells","fromModel","t","module","exports"],"sources":["../../../lib/doc/worksheet.js"],"sourcesContent":["const _ = require('../utils/under-dash');\n\nconst colCache = require('../utils/col-cache');\nconst Range = require('./range');\nconst Row = require('./row');\nconst Column = require('./column');\nconst Enums = require('./enums');\nconst Image = require('./image');\nconst Table = require('./table');\nconst DataValidations = require('./data-validations');\nconst Encryptor = require('../utils/encryptor');\nconst {copyStyle} = require('../utils/copy-style');\n\n// Worksheet requirements\n// Operate as sheet inside workbook or standalone\n// Load and Save from file and stream\n// Access/Add/Delete individual cells\n// Manage column widths and row heights\n\nclass Worksheet {\n constructor(options) {\n options = options || {};\n this._workbook = options.workbook;\n\n // in a workbook, each sheet will have a number\n this.id = options.id;\n this.orderNo = options.orderNo;\n\n // and a name\n this.name = options.name;\n\n // add a state\n this.state = options.state || 'visible';\n\n // rows allows access organised by row. Sparse array of arrays indexed by row-1, col\n // Note: _rows is zero based. Must subtract 1 to go from cell.row to index\n this._rows = [];\n\n // column definitions\n this._columns = null;\n\n // column keys (addRow convenience): key ==> this._collumns index\n this._keys = {};\n\n // keep record of all merges\n this._merges = {};\n\n // record of all row and column pageBreaks\n this.rowBreaks = [];\n\n // for tabColor, default row height, outline levels, etc\n this.properties = Object.assign(\n {},\n {\n defaultRowHeight: 15,\n dyDescent: 55,\n outlineLevelCol: 0,\n outlineLevelRow: 0,\n },\n options.properties\n );\n\n // for all things printing\n this.pageSetup = Object.assign(\n {},\n {\n margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3},\n orientation: 'portrait',\n horizontalDpi: 4294967295,\n verticalDpi: 4294967295,\n fitToPage: !!(\n options.pageSetup &&\n (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) &&\n !options.pageSetup.scale\n ),\n pageOrder: 'downThenOver',\n blackAndWhite: false,\n draft: false,\n cellComments: 'None',\n errors: 'displayed',\n scale: 100,\n fitToWidth: 1,\n fitToHeight: 1,\n paperSize: undefined,\n showRowColHeaders: false,\n showGridLines: false,\n firstPageNumber: undefined,\n horizontalCentered: false,\n verticalCentered: false,\n rowBreaks: null,\n colBreaks: null,\n },\n options.pageSetup\n );\n\n this.headerFooter = Object.assign(\n {},\n {\n differentFirst: false,\n differentOddEven: false,\n oddHeader: null,\n oddFooter: null,\n evenHeader: null,\n evenFooter: null,\n firstHeader: null,\n firstFooter: null,\n },\n options.headerFooter\n );\n\n this.dataValidations = new DataValidations();\n\n // for freezepanes, split, zoom, gridlines, etc\n this.views = options.views || [];\n\n this.autoFilter = options.autoFilter || null;\n\n // for images, etc\n this._media = [];\n\n // worksheet protection\n this.sheetProtection = null;\n\n // for tables\n this.tables = {};\n\n this.conditionalFormattings = [];\n }\n\n get name() {\n return this._name;\n }\n\n set name(name) {\n if (name === undefined) {\n name = `sheet${this.id}`;\n }\n\n if (this._name === name) return;\n\n if (typeof name !== 'string') {\n throw new Error('The name has to be a string.');\n }\n\n if (name === '') {\n throw new Error('The name can\\'t be empty.');\n }\n\n if (name === 'History') {\n throw new Error('The name \"History\" is protected. Please use a different name.');\n }\n\n // Illegal character in worksheet name: asterisk (*), question mark (?),\n // colon (:), forward slash (/ \\), or bracket ([])\n if (/[*?:/\\\\[\\]]/.test(name)) {\n throw new Error(`Worksheet name ${name} cannot include any of the following characters: * ? : \\\\ / [ ]`);\n }\n\n if (/(^')|('$)/.test(name)) {\n throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${name}`);\n }\n\n if (name && name.length > 31) {\n // eslint-disable-next-line no-console\n console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`);\n name = name.substring(0, 31);\n }\n\n if (this._workbook._worksheets.find(ws => ws && ws.name.toLowerCase() === name.toLowerCase())) {\n throw new Error(`Worksheet name already exists: ${name}`);\n }\n\n this._name = name;\n }\n\n get workbook() {\n return this._workbook;\n }\n\n // when you're done with this worksheet, call this to remove from workbook\n destroy() {\n this._workbook.removeWorksheetEx(this);\n }\n\n // Get the bounding range of the cells in this worksheet\n get dimensions() {\n const dimensions = new Range();\n this._rows.forEach(row => {\n if (row) {\n const rowDims = row.dimensions;\n if (rowDims) {\n dimensions.expand(row.number, rowDims.min, row.number, rowDims.max);\n }\n }\n });\n return dimensions;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\n }\n\n // set the columns from an array of column definitions.\n // Note: any headers defined will overwrite existing values.\n set columns(value) {\n // calculate max header row count\n this._headerRowCount = value.reduce((pv, cv) => {\n const headerCount = (cv.header && 1) || (cv.headers && cv.headers.length) || 0;\n return Math.max(pv, headerCount);\n }, 0);\n\n // construct Column objects\n let count = 1;\n const columns = (this._columns = []);\n value.forEach(defn => {\n const column = new Column(this, count++, false);\n columns.push(column);\n column.defn = defn;\n });\n }\n\n getColumnKey(key) {\n return this._keys[key];\n }\n\n setColumnKey(key, value) {\n this._keys[key] = value;\n }\n\n deleteColumnKey(key) {\n delete this._keys[key];\n }\n\n eachColumnKey(f) {\n _.each(this._keys, f);\n }\n\n // get a single column by col number. If it doesn't exist, create it and any gaps before it\n getColumn(c) {\n if (typeof c === 'string') {\n // if it matches a key'd column, return that\n const col = this._keys[c];\n if (col) return col;\n\n // otherwise, assume letter\n c = colCache.l2n(c);\n }\n if (!this._columns) {\n this._columns = [];\n }\n if (c > this._columns.length) {\n let n = this._columns.length + 1;\n while (n <= c) {\n this._columns.push(new Column(this, n++));\n }\n }\n return this._columns[c - 1];\n }\n\n spliceColumns(start, count, ...inserts) {\n const rows = this._rows;\n const nRows = rows.length;\n if (inserts.length > 0) {\n // must iterate over all rows whether they exist yet or not\n for (let i = 0; i < nRows; i++) {\n const rowArguments = [start, count];\n // eslint-disable-next-line no-loop-func\n inserts.forEach(insert => {\n rowArguments.push(insert[i] || null);\n });\n const row = this.getRow(i + 1);\n // eslint-disable-next-line prefer-spread\n row.splice.apply(row, rowArguments);\n }\n } else {\n // nothing to insert, so just splice all rows\n this._rows.forEach(r => {\n if (r) {\n r.splice(start, count);\n }\n });\n }\n\n // splice column definitions\n const nExpand = inserts.length - count;\n const nKeep = start + count;\n const nEnd = this._columns.length;\n if (nExpand < 0) {\n for (let i = start + inserts.length; i <= nEnd; i++) {\n this.getColumn(i).defn = this.getColumn(i - nExpand).defn;\n }\n } else if (nExpand > 0) {\n for (let i = nEnd; i >= nKeep; i--) {\n this.getColumn(i + nExpand).defn = this.getColumn(i).defn;\n }\n }\n for (let i = start; i < start + inserts.length; i++) {\n this.getColumn(i).defn = null;\n }\n\n // account for defined names\n this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length);\n }\n\n get lastColumn() {\n return this.getColumn(this.columnCount);\n }\n\n get columnCount() {\n let maxCount = 0;\n this.eachRow(row => {\n maxCount = Math.max(maxCount, row.cellCount);\n });\n return maxCount;\n }\n\n get actualColumnCount() {\n // performance nightmare - for each row, counts all the columns used\n const counts = [];\n let count = 0;\n this.eachRow(row => {\n row.eachCell(({col}) => {\n if (!counts[col]) {\n counts[col] = true;\n count++;\n }\n });\n });\n return count;\n }\n\n // =========================================================================\n // Rows\n\n _commitRow() {\n // nop - allows streaming reader to fill a document\n }\n\n get _lastRowNumber() {\n // need to cope with results of splice\n const rows = this._rows;\n let n = rows.length;\n while (n > 0 && rows[n - 1] === undefined) {\n n--;\n }\n return n;\n }\n\n get _nextRow() {\n return this._lastRowNumber + 1;\n }\n\n get lastRow() {\n if (this._rows.length) {\n return this._rows[this._rows.length - 1];\n }\n return undefined;\n }\n\n // find a row (if exists) by row number\n findRow(r) {\n return this._rows[r - 1];\n }\n\n // find multiple rows (if exists) by row number\n findRows(start, length) {\n return this._rows.slice(start - 1, start - 1 + length);\n }\n\n get rowCount() {\n return this._lastRowNumber;\n }\n\n get actualRowCount() {\n // counts actual rows that have actual data\n let count = 0;\n this.eachRow(() => {\n count++;\n });\n return count;\n }\n\n // get a row by row number.\n getRow(r) {\n let row = this._rows[r - 1];\n if (!row) {\n row = this._rows[r - 1] = new Row(this, r);\n }\n return row;\n }\n\n // get multiple rows by row number.\n getRows(start, length) {\n if (length < 1) return undefined;\n const rows = [];\n for (let i = start; i < start + length; i++) {\n rows.push(this.getRow(i));\n }\n return rows;\n }\n\n addRow(value, style = 'n') {\n const rowNo = this._nextRow;\n const row = this.getRow(rowNo);\n row.values = value;\n this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n');\n return row;\n }\n\n addRows(value, style = 'n') {\n const rows = [];\n value.forEach(row => {\n rows.push(this.addRow(row, style));\n });\n return rows;\n }\n\n insertRow(pos, value, style = 'n') {\n this.spliceRows(pos, 0, value);\n this._setStyleOption(pos, style);\n return this.getRow(pos);\n }\n\n insertRows(pos, values, style = 'n') {\n this.spliceRows(pos, 0, ...values);\n if (style !== 'n') {\n // copy over the styles\n for (let i = 0; i < values.length; i++) {\n if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) {\n this._copyStyle(values.length + pos + i, pos + i, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos + i, style[1] === '+');\n }\n }\n }\n return this.getRows(pos, values.length);\n }\n\n // set row at position to same style as of either pervious row (option 'i') or next row (option 'o')\n _setStyleOption(pos, style = 'n') {\n if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) {\n this._copyStyle(pos + 1, pos, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos, style[1] === '+');\n }\n }\n\n _copyStyle(src, dest, styleEmpty = false) {\n const rSrc = this.getRow(src);\n const rDst = this.getRow(dest);\n rDst.style = copyStyle(rSrc.style);\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: styleEmpty}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = copyStyle(cell.style);\n });\n rDst.height = rSrc.height;\n }\n\n duplicateRow(rowNum, count, insert = false) {\n // create count duplicates of rowNum\n // either inserting new or overwriting existing rows\n\n const rSrc = this._rows[rowNum - 1];\n const inserts = new Array(count).fill(rSrc.values);\n this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts);\n\n // now copy styles...\n for (let i = 0; i < count; i++) {\n const rDst = this._rows[rowNum + i];\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n }\n }\n\n spliceRows(start, count, ...inserts) {\n // same problem as row.splice, except worse.\n const nKeep = start + count;\n const nInserts = inserts.length;\n const nExpand = nInserts - count;\n const nEnd = this._rows.length;\n let i;\n let rSrc;\n if (nExpand < 0) {\n // remove rows\n if (start === nEnd) {\n this._rows[nEnd - 1] = undefined;\n }\n for (i = nKeep; i <= nEnd; i++) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n this._rows[i - 1] = undefined;\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n\n // remerge cells accounting for insert offset\n if (cell._value.constructor.name === 'MergeValue') {\n const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber);\n const prevMaster = cell._value._master;\n const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number);\n cellToBeMerged.merge(newMaster);\n }\n });\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now copy over the new values\n for (i = 0; i < nInserts; i++) {\n const rDst = this.getRow(start + i);\n rDst.style = {};\n rDst.values = inserts[i];\n }\n\n // account for defined names\n this.workbook.definedNames.spliceRows(this.name, start, count, nInserts);\n }\n\n // iterate over every row in the worksheet, including maybe empty rows\n eachRow(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = undefined;\n }\n if (options && options.includeEmpty) {\n const n = this._rows.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getRow(i), i);\n }\n } else {\n this._rows.forEach(row => {\n if (row && row.hasValues) {\n iteratee(row, row.number);\n }\n });\n }\n }\n\n // return all rows as sparse array\n getSheetValues() {\n const rows = [];\n this._rows.forEach(row => {\n if (row) {\n rows[row.number] = row.values;\n }\n });\n return rows;\n }\n\n // =========================================================================\n // Cells\n\n // returns the cell at [r,c] or address given by r. If not found, return undefined\n findCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this._rows[address.row - 1];\n return row ? row.findCell(address.col) : undefined;\n }\n\n // return the cell at [r,c] or address given by r. If not found, create a new one.\n getCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this.getRow(address.row);\n return row.getCellEx(address);\n }\n\n // =========================================================================\n // Merge\n\n // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell\n mergeCells(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions);\n }\n\n mergeCellsWithoutStyle(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions, true);\n }\n\n _mergeCellsInternal(dimensions, ignoreStyle) {\n // check cells aren't already merged\n _.each(this._merges, merge => {\n if (merge.intersects(dimensions)) {\n throw new Error('Cannot merge already merged cells');\n }\n });\n\n // apply merge\n const master = this.getCell(dimensions.top, dimensions.left);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n // merge all but the master cell\n if (i > dimensions.top || j > dimensions.left) {\n this.getCell(i, j).merge(master, ignoreStyle);\n }\n }\n }\n\n // index merge\n this._merges[master.address] = dimensions;\n }\n\n _unMergeMaster(master) {\n // master is always top left of a rectangle\n const merge = this._merges[master.address];\n if (merge) {\n for (let i = merge.top; i <= merge.bottom; i++) {\n for (let j = merge.left; j <= merge.right; j++) {\n this.getCell(i, j).unmerge();\n }\n }\n delete this._merges[master.address];\n }\n }\n\n get hasMerges() {\n // return true if this._merges has a merge object\n return _.some(this._merges, Boolean);\n }\n\n // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge,\n // un-merge the group. Note this function can affect multiple merges and merge-blocks are\n // atomic - either they're all merged or all un-merged.\n unMergeCells(...cells) {\n const dimensions = new Range(cells);\n\n // find any cells in that range and unmerge them\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = this.findCell(i, j);\n if (cell) {\n if (cell.type === Enums.ValueType.Merge) {\n // this cell merges to another master\n this._unMergeMaster(cell.master);\n } else if (this._merges[cell.address]) {\n // this cell is a master\n this._unMergeMaster(cell);\n }\n }\n }\n }\n }\n\n // ===========================================================================\n // Shared/Array Formula\n fillFormula(range, formula, results, shareType = 'shared') {\n // Define formula for top-left cell and share to rest\n const decoded = colCache.decode(range);\n const {top, left, bottom, right} = decoded;\n const width = right - left + 1;\n const masterAddress = colCache.encodeAddress(top, left);\n const isShared = shareType === 'shared';\n\n // work out result accessor\n let getResult;\n if (typeof results === 'function') {\n getResult = results;\n } else if (Array.isArray(results)) {\n if (Array.isArray(results[0])) {\n getResult = (row, col) => results[row - top][col - left];\n } else {\n // eslint-disable-next-line no-mixed-operators\n getResult = (row, col) => results[(row - top) * width + (col - left)];\n }\n } else {\n getResult = () => undefined;\n }\n let first = true;\n for (let r = top; r <= bottom; r++) {\n for (let c = left; c <= right; c++) {\n if (first) {\n this.getCell(r, c).value = {\n shareType,\n formula,\n ref: range,\n result: getResult(r, c),\n };\n first = false;\n } else {\n this.getCell(r, c).value = isShared\n ? {\n sharedFormula: masterAddress,\n result: getResult(r, c),\n }\n : getResult(r, c);\n }\n }\n }\n }\n\n // =========================================================================\n // Images\n addImage(imageId, range) {\n const model = {\n type: 'image',\n imageId,\n range,\n };\n this._media.push(new Image(this, model));\n }\n\n getImages() {\n return this._media.filter(m => m.type === 'image');\n }\n\n addBackgroundImage(imageId) {\n const model = {\n type: 'background',\n imageId,\n };\n this._media.push(new Image(this, model));\n }\n\n getBackgroundImageId() {\n const image = this._media.find(m => m.type === 'background');\n return image && image.imageId;\n }\n\n // =========================================================================\n // Worksheet Protection\n protect(password, options) {\n // TODO: make this function truly async\n // perhaps marshal to worker thread or something\n return new Promise(resolve => {\n this.sheetProtection = {\n sheet: true,\n };\n if (options && 'spinCount' in options) {\n // force spinCount to be integer >= 0\n options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;\n }\n if (password) {\n this.sheetProtection.algorithmName = 'SHA-512';\n this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');\n this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount\n this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(\n password,\n 'SHA512',\n this.sheetProtection.saltValue,\n this.sheetProtection.spinCount\n );\n }\n if (options) {\n this.sheetProtection = Object.assign(this.sheetProtection, options);\n if (!password && 'spinCount' in options) {\n delete this.sheetProtection.spinCount;\n }\n }\n resolve();\n });\n }\n\n unprotect() {\n this.sheetProtection = null;\n }\n\n // =========================================================================\n // Tables\n addTable(model) {\n const table = new Table(this, model);\n this.tables[model.name] = table;\n return table;\n }\n\n getTable(name) {\n return this.tables[name];\n }\n\n removeTable(name) {\n delete this.tables[name];\n }\n\n getTables() {\n return Object.values(this.tables);\n }\n\n // ===========================================================================\n // Conditional Formatting\n addConditionalFormatting(cf) {\n this.conditionalFormattings.push(cf);\n }\n\n removeConditionalFormatting(filter) {\n if (typeof filter === 'number') {\n this.conditionalFormattings.splice(filter, 1);\n } else if (filter instanceof Function) {\n this.conditionalFormattings = this.conditionalFormattings.filter(filter);\n } else {\n this.conditionalFormattings = [];\n }\n }\n\n // ===========================================================================\n // Deprecated\n get tabColor() {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n return this.properties.tabColor;\n }\n\n set tabColor(value) {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n this.properties.tabColor = value;\n }\n\n // ===========================================================================\n // Model\n\n get model() {\n const model = {\n id: this.id,\n name: this.name,\n dataValidations: this.dataValidations.model,\n properties: this.properties,\n state: this.state,\n pageSetup: this.pageSetup,\n headerFooter: this.headerFooter,\n rowBreaks: this.rowBreaks,\n views: this.views,\n autoFilter: this.autoFilter,\n media: this._media.map(medium => medium.model),\n sheetProtection: this.sheetProtection,\n tables: Object.values(this.tables).map(table => table.model),\n conditionalFormattings: this.conditionalFormattings,\n };\n\n // =================================================\n // columns\n model.cols = Column.toModel(this.columns);\n\n // ==========================================================\n // Rows\n const rows = (model.rows = []);\n const dimensions = (model.dimensions = new Range());\n this._rows.forEach(row => {\n const rowModel = row && row.model;\n if (rowModel) {\n dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max);\n rows.push(rowModel);\n }\n });\n\n // ==========================================================\n // Merges\n model.merges = [];\n _.each(this._merges, merge => {\n model.merges.push(merge.range);\n });\n\n return model;\n }\n\n _parseRows(model) {\n this._rows = [];\n model.rows.forEach(rowModel => {\n const row = new Row(this, rowModel.number);\n this._rows[row.number - 1] = row;\n row.model = rowModel;\n });\n }\n\n _parseMergeCells(model) {\n _.each(model.mergeCells, merge => {\n // Do not merge styles when importing an Excel file\n // since each cell may have different styles intentionally.\n this.mergeCellsWithoutStyle(merge);\n });\n }\n\n set model(value) {\n this.name = value.name;\n this._columns = Column.fromModel(this, value.cols);\n this._parseRows(value);\n\n this._parseMergeCells(value);\n this.dataValidations = new DataValidations(value.dataValidations);\n this.properties = value.properties;\n this.pageSetup = value.pageSetup;\n this.headerFooter = value.headerFooter;\n this.views = value.views;\n this.autoFilter = value.autoFilter;\n this._media = value.media.map(medium => new Image(this, medium));\n this.sheetProtection = value.sheetProtection;\n this.tables = value.tables.reduce((tables, table) => {\n const t = new Table();\n t.model = table;\n tables[table.name] = t;\n return tables;\n }, {});\n this.conditionalFormattings = value.conditionalFormattings;\n }\n}\n\nmodule.exports = Worksheet;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/exceljs.bare.js b/node_backend/node_modules/exceljs/dist/es5/exceljs.bare.js new file mode 100644 index 0000000000000000000000000000000000000000..8ff5ebb2f0e2fd4be8ee2ef4730664f7073f670a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/exceljs.bare.js @@ -0,0 +1,14 @@ +"use strict"; + +// this bundle is built without polyfill leaving apps the freedom to add their own +const ExcelJS = { + Workbook: require('./doc/workbook') +}; + +// Object.assign mono-fill +const Enums = require('./doc/enums'); +Object.keys(Enums).forEach(key => { + ExcelJS[key] = Enums[key]; +}); +module.exports = ExcelJS; +//# sourceMappingURL=exceljs.bare.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/exceljs.bare.js.map b/node_backend/node_modules/exceljs/dist/es5/exceljs.bare.js.map new file mode 100644 index 0000000000000000000000000000000000000000..8b7835c422734a913e4e7eb4723f53d5e1e94c37 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/exceljs.bare.js.map @@ -0,0 +1 @@ +{"version":3,"file":"exceljs.bare.js","names":["ExcelJS","Workbook","require","Enums","Object","keys","forEach","key","module","exports"],"sources":["../../lib/exceljs.bare.js"],"sourcesContent":["// this bundle is built without polyfill leaving apps the freedom to add their own\nconst ExcelJS = {\n Workbook: require('./doc/workbook'),\n};\n\n// Object.assign mono-fill\nconst Enums = require('./doc/enums');\n\nObject.keys(Enums).forEach(key => {\n ExcelJS[key] = Enums[key];\n});\n\nmodule.exports = ExcelJS;\n"],"mappings":";;AAAA;AACA,MAAMA,OAAO,GAAG;EACdC,QAAQ,EAAEC,OAAO,CAAC,gBAAgB;AACpC,CAAC;;AAED;AACA,MAAMC,KAAK,GAAGD,OAAO,CAAC,aAAa,CAAC;AAEpCE,MAAM,CAACC,IAAI,CAACF,KAAK,CAAC,CAACG,OAAO,CAACC,GAAG,IAAI;EAChCP,OAAO,CAACO,GAAG,CAAC,GAAGJ,KAAK,CAACI,GAAG,CAAC;AAC3B,CAAC,CAAC;AAEFC,MAAM,CAACC,OAAO,GAAGT,OAAO"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/exceljs.browser.js b/node_backend/node_modules/exceljs/dist/es5/exceljs.browser.js new file mode 100644 index 0000000000000000000000000000000000000000..a0bdfddce3b021873346e30f26740df8062ef53a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/exceljs.browser.js @@ -0,0 +1,36 @@ +"use strict"; + +/* eslint-disable import/no-extraneous-dependencies,node/no-unpublished-require */ +require('core-js/modules/es.promise'); +require('core-js/modules/es.promise.finally'); +require('core-js/modules/es.object.assign'); +require('core-js/modules/es.object.keys'); +require('core-js/modules/es.object.values'); +require('core-js/modules/es.symbol'); +require('core-js/modules/es.symbol.async-iterator'); +// required by core-js/modules/es.promise Promise.all +require('core-js/modules/es.array.iterator'); +// required by node_modules/saxes/saxes.js SaxesParser.captureTo +require('core-js/modules/es.array.includes'); +// required by lib/doc/workbook.js Workbook.model +require('core-js/modules/es.array.find-index'); +// required by lib/doc/workbook.js Workbook.addWorksheet and Workbook.getWorksheet +require('core-js/modules/es.array.find'); +// required by node_modules/saxes/saxes.js SaxesParser.getCode10 +require('core-js/modules/es.string.from-code-point'); +// required by lib/xlsx/xform/sheet/data-validations-xform.js DataValidationsXform.parseClose +require('core-js/modules/es.string.includes'); +// required by lib/utils/utils.js utils.validInt and lib/csv/csv.js CSV.read +require('core-js/modules/es.number.is-nan'); +require('regenerator-runtime/runtime'); +const ExcelJS = { + Workbook: require('./doc/workbook') +}; + +// Object.assign mono-fill +const Enums = require('./doc/enums'); +Object.keys(Enums).forEach(key => { + ExcelJS[key] = Enums[key]; +}); +module.exports = ExcelJS; +//# sourceMappingURL=exceljs.browser.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/exceljs.browser.js.map b/node_backend/node_modules/exceljs/dist/es5/exceljs.browser.js.map new file mode 100644 index 0000000000000000000000000000000000000000..7bfaa5c5a5f5d4219453f06842af9e4c5a6872d7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/exceljs.browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"exceljs.browser.js","names":["require","ExcelJS","Workbook","Enums","Object","keys","forEach","key","module","exports"],"sources":["../../lib/exceljs.browser.js"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies,node/no-unpublished-require */\nrequire('core-js/modules/es.promise');\nrequire('core-js/modules/es.promise.finally');\nrequire('core-js/modules/es.object.assign');\nrequire('core-js/modules/es.object.keys');\nrequire('core-js/modules/es.object.values');\nrequire('core-js/modules/es.symbol');\nrequire('core-js/modules/es.symbol.async-iterator');\n// required by core-js/modules/es.promise Promise.all\nrequire('core-js/modules/es.array.iterator');\n// required by node_modules/saxes/saxes.js SaxesParser.captureTo\nrequire('core-js/modules/es.array.includes');\n// required by lib/doc/workbook.js Workbook.model\nrequire('core-js/modules/es.array.find-index');\n// required by lib/doc/workbook.js Workbook.addWorksheet and Workbook.getWorksheet\nrequire('core-js/modules/es.array.find');\n// required by node_modules/saxes/saxes.js SaxesParser.getCode10\nrequire('core-js/modules/es.string.from-code-point');\n// required by lib/xlsx/xform/sheet/data-validations-xform.js DataValidationsXform.parseClose\nrequire('core-js/modules/es.string.includes');\n// required by lib/utils/utils.js utils.validInt and lib/csv/csv.js CSV.read\nrequire('core-js/modules/es.number.is-nan');\nrequire('regenerator-runtime/runtime');\n\nconst ExcelJS = {\n Workbook: require('./doc/workbook'),\n};\n\n// Object.assign mono-fill\nconst Enums = require('./doc/enums');\n\nObject.keys(Enums).forEach(key => {\n ExcelJS[key] = Enums[key];\n});\n\nmodule.exports = ExcelJS;\n"],"mappings":";;AAAA;AACAA,OAAO,CAAC,4BAA4B,CAAC;AACrCA,OAAO,CAAC,oCAAoC,CAAC;AAC7CA,OAAO,CAAC,kCAAkC,CAAC;AAC3CA,OAAO,CAAC,gCAAgC,CAAC;AACzCA,OAAO,CAAC,kCAAkC,CAAC;AAC3CA,OAAO,CAAC,2BAA2B,CAAC;AACpCA,OAAO,CAAC,0CAA0C,CAAC;AACnD;AACAA,OAAO,CAAC,mCAAmC,CAAC;AAC5C;AACAA,OAAO,CAAC,mCAAmC,CAAC;AAC5C;AACAA,OAAO,CAAC,qCAAqC,CAAC;AAC9C;AACAA,OAAO,CAAC,+BAA+B,CAAC;AACxC;AACAA,OAAO,CAAC,2CAA2C,CAAC;AACpD;AACAA,OAAO,CAAC,oCAAoC,CAAC;AAC7C;AACAA,OAAO,CAAC,kCAAkC,CAAC;AAC3CA,OAAO,CAAC,6BAA6B,CAAC;AAEtC,MAAMC,OAAO,GAAG;EACdC,QAAQ,EAAEF,OAAO,CAAC,gBAAgB;AACpC,CAAC;;AAED;AACA,MAAMG,KAAK,GAAGH,OAAO,CAAC,aAAa,CAAC;AAEpCI,MAAM,CAACC,IAAI,CAACF,KAAK,CAAC,CAACG,OAAO,CAACC,GAAG,IAAI;EAChCN,OAAO,CAACM,GAAG,CAAC,GAAGJ,KAAK,CAACI,GAAG,CAAC;AAC3B,CAAC,CAAC;AAEFC,MAAM,CAACC,OAAO,GAAGR,OAAO"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/exceljs.nodejs.js b/node_backend/node_modules/exceljs/dist/es5/exceljs.nodejs.js new file mode 100644 index 0000000000000000000000000000000000000000..a352f39e6aabdbc70022a9eedfa979f3511d2a90 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/exceljs.nodejs.js @@ -0,0 +1,15 @@ +"use strict"; + +const ExcelJS = { + Workbook: require('./doc/workbook'), + ModelContainer: require('./doc/modelcontainer'), + stream: { + xlsx: { + WorkbookWriter: require('./stream/xlsx/workbook-writer'), + WorkbookReader: require('./stream/xlsx/workbook-reader') + } + } +}; +Object.assign(ExcelJS, require('./doc/enums')); +module.exports = ExcelJS; +//# sourceMappingURL=exceljs.nodejs.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/exceljs.nodejs.js.map b/node_backend/node_modules/exceljs/dist/es5/exceljs.nodejs.js.map new file mode 100644 index 0000000000000000000000000000000000000000..85b87a2c9ff48e7b7e8ea7353ee547428b486818 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/exceljs.nodejs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"exceljs.nodejs.js","names":["ExcelJS","Workbook","require","ModelContainer","stream","xlsx","WorkbookWriter","WorkbookReader","Object","assign","module","exports"],"sources":["../../lib/exceljs.nodejs.js"],"sourcesContent":["const ExcelJS = {\n Workbook: require('./doc/workbook'),\n ModelContainer: require('./doc/modelcontainer'),\n stream: {\n xlsx: {\n WorkbookWriter: require('./stream/xlsx/workbook-writer'),\n WorkbookReader: require('./stream/xlsx/workbook-reader'),\n },\n },\n};\n\nObject.assign(ExcelJS, require('./doc/enums'));\n\nmodule.exports = ExcelJS;\n"],"mappings":";;AAAA,MAAMA,OAAO,GAAG;EACdC,QAAQ,EAAEC,OAAO,CAAC,gBAAgB,CAAC;EACnCC,cAAc,EAAED,OAAO,CAAC,sBAAsB,CAAC;EAC/CE,MAAM,EAAE;IACNC,IAAI,EAAE;MACJC,cAAc,EAAEJ,OAAO,CAAC,+BAA+B,CAAC;MACxDK,cAAc,EAAEL,OAAO,CAAC,+BAA+B;IACzD;EACF;AACF,CAAC;AAEDM,MAAM,CAACC,MAAM,CAACT,OAAO,EAAEE,OAAO,CAAC,aAAa,CAAC,CAAC;AAE9CQ,MAAM,CAACC,OAAO,GAAGX,OAAO"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/index.js b/node_backend/node_modules/exceljs/dist/es5/index.js new file mode 100644 index 0000000000000000000000000000000000000000..a352f39e6aabdbc70022a9eedfa979f3511d2a90 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/index.js @@ -0,0 +1,15 @@ +"use strict"; + +const ExcelJS = { + Workbook: require('./doc/workbook'), + ModelContainer: require('./doc/modelcontainer'), + stream: { + xlsx: { + WorkbookWriter: require('./stream/xlsx/workbook-writer'), + WorkbookReader: require('./stream/xlsx/workbook-reader') + } + } +}; +Object.assign(ExcelJS, require('./doc/enums')); +module.exports = ExcelJS; +//# sourceMappingURL=exceljs.nodejs.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js new file mode 100644 index 0000000000000000000000000000000000000000..d948fc6ed7400d2eb4ae7051033c39bf06f4c7fb --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js @@ -0,0 +1,90 @@ +"use strict"; + +const { + EventEmitter +} = require('events'); +const parseSax = require('../../utils/parse-sax'); +const Enums = require('../../doc/enums'); +const RelType = require('../../xlsx/rel-type'); +class HyperlinkReader extends EventEmitter { + constructor(_ref) { + let { + workbook, + id, + iterator, + options + } = _ref; + super(); + this.workbook = workbook; + this.id = id; + this.iterator = iterator; + this.options = options; + } + get count() { + return this.hyperlinks && this.hyperlinks.length || 0; + } + each(fn) { + return this.hyperlinks.forEach(fn); + } + async read() { + const { + iterator, + options + } = this; + let emitHyperlinks = false; + let hyperlinks = null; + switch (options.hyperlinks) { + case 'emit': + emitHyperlinks = true; + break; + case 'cache': + this.hyperlinks = hyperlinks = {}; + break; + default: + break; + } + if (!emitHyperlinks && !hyperlinks) { + this.emit('finished'); + return; + } + try { + for await (const events of parseSax(iterator)) { + for (const { + eventType, + value + } of events) { + if (eventType === 'opentag') { + const node = value; + if (node.name === 'Relationship') { + const rId = node.attributes.Id; + switch (node.attributes.Type) { + case RelType.Hyperlink: + { + const relationship = { + type: Enums.RelationshipType.Styles, + rId, + target: node.attributes.Target, + targetMode: node.attributes.TargetMode + }; + if (emitHyperlinks) { + this.emit('hyperlink', relationship); + } else { + hyperlinks[relationship.rId] = relationship; + } + } + break; + default: + break; + } + } + } + } + } + this.emit('finished'); + } catch (error) { + this.emit('error', error); + } + } +} +module.exports = HyperlinkReader; +//# sourceMappingURL=hyperlink-reader.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js.map b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f48c0b9d3a9aa0ea6aec5cfcd22c66049b50fbef --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js.map @@ -0,0 +1 @@ +{"version":3,"file":"hyperlink-reader.js","names":["EventEmitter","require","parseSax","Enums","RelType","HyperlinkReader","constructor","_ref","workbook","id","iterator","options","count","hyperlinks","length","each","fn","forEach","read","emitHyperlinks","emit","events","eventType","value","node","name","rId","attributes","Id","Type","Hyperlink","relationship","type","RelationshipType","Styles","target","Target","targetMode","TargetMode","error","module","exports"],"sources":["../../../../lib/stream/xlsx/hyperlink-reader.js"],"sourcesContent":["const {EventEmitter} = require('events');\nconst parseSax = require('../../utils/parse-sax');\n\nconst Enums = require('../../doc/enums');\nconst RelType = require('../../xlsx/rel-type');\n\nclass HyperlinkReader extends EventEmitter {\n constructor({workbook, id, iterator, options}) {\n super();\n\n this.workbook = workbook;\n this.id = id;\n this.iterator = iterator;\n this.options = options;\n }\n\n get count() {\n return (this.hyperlinks && this.hyperlinks.length) || 0;\n }\n\n each(fn) {\n return this.hyperlinks.forEach(fn);\n }\n\n async read() {\n const {iterator, options} = this;\n let emitHyperlinks = false;\n let hyperlinks = null;\n switch (options.hyperlinks) {\n case 'emit':\n emitHyperlinks = true;\n break;\n case 'cache':\n this.hyperlinks = hyperlinks = {};\n break;\n default:\n break;\n }\n\n if (!emitHyperlinks && !hyperlinks) {\n this.emit('finished');\n return;\n }\n\n try {\n for await (const events of parseSax(iterator)) {\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n const node = value;\n if (node.name === 'Relationship') {\n const rId = node.attributes.Id;\n switch (node.attributes.Type) {\n case RelType.Hyperlink:\n {\n const relationship = {\n type: Enums.RelationshipType.Styles,\n rId,\n target: node.attributes.Target,\n targetMode: node.attributes.TargetMode,\n };\n if (emitHyperlinks) {\n this.emit('hyperlink', relationship);\n } else {\n hyperlinks[relationship.rId] = relationship;\n }\n }\n break;\n\n default:\n break;\n }\n }\n }\n }\n }\n this.emit('finished');\n } catch (error) {\n this.emit('error', error);\n }\n }\n}\n\nmodule.exports = HyperlinkReader;\n"],"mappings":";;AAAA,MAAM;EAACA;AAAY,CAAC,GAAGC,OAAO,CAAC,QAAQ,CAAC;AACxC,MAAMC,QAAQ,GAAGD,OAAO,CAAC,uBAAuB,CAAC;AAEjD,MAAME,KAAK,GAAGF,OAAO,CAAC,iBAAiB,CAAC;AACxC,MAAMG,OAAO,GAAGH,OAAO,CAAC,qBAAqB,CAAC;AAE9C,MAAMI,eAAe,SAASL,YAAY,CAAC;EACzCM,WAAWA,CAAAC,IAAA,EAAoC;IAAA,IAAnC;MAACC,QAAQ;MAAEC,EAAE;MAAEC,QAAQ;MAAEC;IAAO,CAAC,GAAAJ,IAAA;IAC3C,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,OAAO,GAAGA,OAAO;EACxB;EAEA,IAAIC,KAAKA,CAAA,EAAG;IACV,OAAQ,IAAI,CAACC,UAAU,IAAI,IAAI,CAACA,UAAU,CAACC,MAAM,IAAK,CAAC;EACzD;EAEAC,IAAIA,CAACC,EAAE,EAAE;IACP,OAAO,IAAI,CAACH,UAAU,CAACI,OAAO,CAACD,EAAE,CAAC;EACpC;EAEA,MAAME,IAAIA,CAAA,EAAG;IACX,MAAM;MAACR,QAAQ;MAAEC;IAAO,CAAC,GAAG,IAAI;IAChC,IAAIQ,cAAc,GAAG,KAAK;IAC1B,IAAIN,UAAU,GAAG,IAAI;IACrB,QAAQF,OAAO,CAACE,UAAU;MACxB,KAAK,MAAM;QACTM,cAAc,GAAG,IAAI;QACrB;MACF,KAAK,OAAO;QACV,IAAI,CAACN,UAAU,GAAGA,UAAU,GAAG,CAAC,CAAC;QACjC;MACF;QACE;IACJ;IAEA,IAAI,CAACM,cAAc,IAAI,CAACN,UAAU,EAAE;MAClC,IAAI,CAACO,IAAI,CAAC,UAAU,CAAC;MACrB;IACF;IAEA,IAAI;MACF,WAAW,MAAMC,MAAM,IAAInB,QAAQ,CAACQ,QAAQ,CAAC,EAAE;QAC7C,KAAK,MAAM;UAACY,SAAS;UAAEC;QAAK,CAAC,IAAIF,MAAM,EAAE;UACvC,IAAIC,SAAS,KAAK,SAAS,EAAE;YAC3B,MAAME,IAAI,GAAGD,KAAK;YAClB,IAAIC,IAAI,CAACC,IAAI,KAAK,cAAc,EAAE;cAChC,MAAMC,GAAG,GAAGF,IAAI,CAACG,UAAU,CAACC,EAAE;cAC9B,QAAQJ,IAAI,CAACG,UAAU,CAACE,IAAI;gBAC1B,KAAKzB,OAAO,CAAC0B,SAAS;kBACpB;oBACE,MAAMC,YAAY,GAAG;sBACnBC,IAAI,EAAE7B,KAAK,CAAC8B,gBAAgB,CAACC,MAAM;sBACnCR,GAAG;sBACHS,MAAM,EAAEX,IAAI,CAACG,UAAU,CAACS,MAAM;sBAC9BC,UAAU,EAAEb,IAAI,CAACG,UAAU,CAACW;oBAC9B,CAAC;oBACD,IAAInB,cAAc,EAAE;sBAClB,IAAI,CAACC,IAAI,CAAC,WAAW,EAAEW,YAAY,CAAC;oBACtC,CAAC,MAAM;sBACLlB,UAAU,CAACkB,YAAY,CAACL,GAAG,CAAC,GAAGK,YAAY;oBAC7C;kBACF;kBACA;gBAEF;kBACE;cACJ;YACF;UACF;QACF;MACF;MACA,IAAI,CAACX,IAAI,CAAC,UAAU,CAAC;IACvB,CAAC,CAAC,OAAOmB,KAAK,EAAE;MACd,IAAI,CAACnB,IAAI,CAAC,OAAO,EAAEmB,KAAK,CAAC;IAC3B;EACF;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGpC,eAAe"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js new file mode 100644 index 0000000000000000000000000000000000000000..9b484c37e47c664618748e0195ab7453ed880c91 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js @@ -0,0 +1,94 @@ +"use strict"; + +const XmlStream = require('../../utils/xml-stream'); +const RelType = require('../../xlsx/rel-type'); +const colCache = require('../../utils/col-cache'); +const CommentXform = require('../../xlsx/xform/comment/comment-xform'); +const VmlShapeXform = require('../../xlsx/xform/comment/vml-shape-xform'); +class SheetCommentsWriter { + constructor(worksheet, sheetRelsWriter, options) { + // in a workbook, each sheet will have a number + this.id = options.id; + this.count = 0; + this._worksheet = worksheet; + this._workbook = options.workbook; + this._sheetRelsWriter = sheetRelsWriter; + } + get commentsStream() { + if (!this._commentsStream) { + // eslint-disable-next-line no-underscore-dangle + this._commentsStream = this._workbook._openStream(`/xl/comments${this.id}.xml`); + } + return this._commentsStream; + } + get vmlStream() { + if (!this._vmlStream) { + // eslint-disable-next-line no-underscore-dangle + this._vmlStream = this._workbook._openStream(`xl/drawings/vmlDrawing${this.id}.vml`); + } + return this._vmlStream; + } + _addRelationships() { + const commentRel = { + Type: RelType.Comments, + Target: `../comments${this.id}.xml` + }; + this._sheetRelsWriter.addRelationship(commentRel); + const vmlDrawingRel = { + Type: RelType.VmlDrawing, + Target: `../drawings/vmlDrawing${this.id}.vml` + }; + this.vmlRelId = this._sheetRelsWriter.addRelationship(vmlDrawingRel); + } + _addCommentRefs() { + this._workbook.commentRefs.push({ + commentName: `comments${this.id}`, + vmlDrawing: `vmlDrawing${this.id}` + }); + } + _writeOpen() { + this.commentsStream.write('' + '' + 'Author' + ''); + this.vmlStream.write('' + '' + '' + '' + '' + '' + '' + '' + ''); + } + _writeComment(comment, index) { + const commentXform = new CommentXform(); + const commentsXmlStream = new XmlStream(); + commentXform.render(commentsXmlStream, comment); + this.commentsStream.write(commentsXmlStream.xml); + const vmlShapeXform = new VmlShapeXform(); + const vmlXmlStream = new XmlStream(); + vmlShapeXform.render(vmlXmlStream, comment, index); + this.vmlStream.write(vmlXmlStream.xml); + } + _writeClose() { + this.commentsStream.write(''); + this.vmlStream.write(''); + } + addComments(comments) { + if (comments && comments.length) { + if (!this.startedData) { + this._worksheet.comments = []; + this._writeOpen(); + this._addRelationships(); + this._addCommentRefs(); + this.startedData = true; + } + comments.forEach(item => { + item.refAddress = colCache.decodeAddress(item.ref); + }); + comments.forEach(comment => { + this._writeComment(comment, this.count); + this.count += 1; + }); + } + } + commit() { + if (this.count) { + this._writeClose(); + this.commentsStream.end(); + this.vmlStream.end(); + } + } +} +module.exports = SheetCommentsWriter; +//# sourceMappingURL=sheet-comments-writer.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js.map b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3866e2f3df7dcefe6e64c790791291239a422583 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sheet-comments-writer.js","names":["XmlStream","require","RelType","colCache","CommentXform","VmlShapeXform","SheetCommentsWriter","constructor","worksheet","sheetRelsWriter","options","id","count","_worksheet","_workbook","workbook","_sheetRelsWriter","commentsStream","_commentsStream","_openStream","vmlStream","_vmlStream","_addRelationships","commentRel","Type","Comments","Target","addRelationship","vmlDrawingRel","VmlDrawing","vmlRelId","_addCommentRefs","commentRefs","push","commentName","vmlDrawing","_writeOpen","write","_writeComment","comment","index","commentXform","commentsXmlStream","render","xml","vmlShapeXform","vmlXmlStream","_writeClose","addComments","comments","length","startedData","forEach","item","refAddress","decodeAddress","ref","commit","end","module","exports"],"sources":["../../../../lib/stream/xlsx/sheet-comments-writer.js"],"sourcesContent":["const XmlStream = require('../../utils/xml-stream');\nconst RelType = require('../../xlsx/rel-type');\nconst colCache = require('../../utils/col-cache');\nconst CommentXform = require('../../xlsx/xform/comment/comment-xform');\nconst VmlShapeXform = require('../../xlsx/xform/comment/vml-shape-xform');\n\nclass SheetCommentsWriter {\n constructor(worksheet, sheetRelsWriter, options) {\n // in a workbook, each sheet will have a number\n this.id = options.id;\n this.count = 0;\n this._worksheet = worksheet;\n this._workbook = options.workbook;\n this._sheetRelsWriter = sheetRelsWriter;\n }\n\n get commentsStream() {\n if (!this._commentsStream) {\n // eslint-disable-next-line no-underscore-dangle\n this._commentsStream = this._workbook._openStream(`/xl/comments${this.id}.xml`);\n }\n return this._commentsStream;\n }\n\n get vmlStream() {\n if (!this._vmlStream) {\n // eslint-disable-next-line no-underscore-dangle\n this._vmlStream = this._workbook._openStream(`xl/drawings/vmlDrawing${this.id}.vml`);\n }\n return this._vmlStream;\n }\n\n _addRelationships() {\n const commentRel = {\n Type: RelType.Comments,\n Target: `../comments${this.id}.xml`,\n };\n this._sheetRelsWriter.addRelationship(commentRel);\n\n const vmlDrawingRel = {\n Type: RelType.VmlDrawing,\n Target: `../drawings/vmlDrawing${this.id}.vml`,\n };\n this.vmlRelId = this._sheetRelsWriter.addRelationship(vmlDrawingRel);\n }\n\n _addCommentRefs() {\n this._workbook.commentRefs.push({\n commentName: `comments${this.id}`,\n vmlDrawing: `vmlDrawing${this.id}`,\n });\n }\n\n _writeOpen() {\n this.commentsStream.write(\n '' +\n '' +\n 'Author' +\n ''\n );\n this.vmlStream.write(\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n ''\n );\n }\n\n _writeComment(comment, index) {\n const commentXform = new CommentXform();\n const commentsXmlStream = new XmlStream();\n commentXform.render(commentsXmlStream, comment);\n this.commentsStream.write(commentsXmlStream.xml);\n\n const vmlShapeXform = new VmlShapeXform();\n const vmlXmlStream = new XmlStream();\n vmlShapeXform.render(vmlXmlStream, comment, index);\n this.vmlStream.write(vmlXmlStream.xml);\n }\n\n _writeClose() {\n this.commentsStream.write('');\n this.vmlStream.write('');\n }\n\n addComments(comments) {\n if (comments && comments.length) {\n if (!this.startedData) {\n this._worksheet.comments = [];\n this._writeOpen();\n this._addRelationships();\n this._addCommentRefs();\n this.startedData = true;\n }\n\n comments.forEach(item => {\n item.refAddress = colCache.decodeAddress(item.ref);\n });\n\n comments.forEach(comment => {\n this._writeComment(comment, this.count);\n this.count += 1;\n });\n }\n }\n\n commit() {\n if (this.count) {\n this._writeClose();\n this.commentsStream.end();\n this.vmlStream.end();\n }\n }\n}\n\nmodule.exports = SheetCommentsWriter;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js new file mode 100644 index 0000000000000000000000000000000000000000..e88d683acff37ba2ad15864b387f318ef7c1ac6f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js @@ -0,0 +1,94 @@ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const utils = require('../../utils/utils'); +const RelType = require('../../xlsx/rel-type'); +class HyperlinksProxy { + constructor(sheetRelsWriter) { + this.writer = sheetRelsWriter; + } + push(hyperlink) { + this.writer.addHyperlink(hyperlink); + } +} +class SheetRelsWriter { + constructor(options) { + // in a workbook, each sheet will have a number + this.id = options.id; + + // count of all relationships + this.count = 0; + + // keep record of all hyperlinks + this._hyperlinks = []; + this._workbook = options.workbook; + } + get stream() { + if (!this._stream) { + // eslint-disable-next-line no-underscore-dangle + this._stream = this._workbook._openStream(`/xl/worksheets/_rels/sheet${this.id}.xml.rels`); + } + return this._stream; + } + get length() { + return this._hyperlinks.length; + } + each(fn) { + return this._hyperlinks.forEach(fn); + } + get hyperlinksProxy() { + return this._hyperlinksProxy || (this._hyperlinksProxy = new HyperlinksProxy(this)); + } + addHyperlink(hyperlink) { + // Write to stream + const relationship = { + Target: hyperlink.target, + Type: RelType.Hyperlink, + TargetMode: 'External' + }; + const rId = this._writeRelationship(relationship); + + // store sheet stuff for later + this._hyperlinks.push({ + rId, + address: hyperlink.address + }); + } + addMedia(media) { + return this._writeRelationship(media); + } + addRelationship(rel) { + return this._writeRelationship(rel); + } + commit() { + if (this.count) { + // write xml utro + this._writeClose(); + // and close stream + this.stream.end(); + } + } + + // ================================================================================ + _writeOpen() { + this.stream.write(` + `); + } + _writeRelationship(relationship) { + if (!this.count) { + this._writeOpen(); + } + const rId = `rId${++this.count}`; + if (relationship.TargetMode) { + this.stream.write(`'); + } else { + this.stream.write(``); + } + return rId; + } + _writeClose() { + this.stream.write(''); + } +} +module.exports = SheetRelsWriter; +//# sourceMappingURL=sheet-rels-writer.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js.map b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e4506994929d7ab0496aebe3bf51a5fe6ab3081b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sheet-rels-writer.js","names":["utils","require","RelType","HyperlinksProxy","constructor","sheetRelsWriter","writer","push","hyperlink","addHyperlink","SheetRelsWriter","options","id","count","_hyperlinks","_workbook","workbook","stream","_stream","_openStream","length","each","fn","forEach","hyperlinksProxy","_hyperlinksProxy","relationship","Target","target","Type","Hyperlink","TargetMode","rId","_writeRelationship","address","addMedia","media","addRelationship","rel","commit","_writeClose","end","_writeOpen","write","xmlEncode","module","exports"],"sources":["../../../../lib/stream/xlsx/sheet-rels-writer.js"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nconst utils = require('../../utils/utils');\nconst RelType = require('../../xlsx/rel-type');\n\nclass HyperlinksProxy {\n constructor(sheetRelsWriter) {\n this.writer = sheetRelsWriter;\n }\n\n push(hyperlink) {\n this.writer.addHyperlink(hyperlink);\n }\n}\n\nclass SheetRelsWriter {\n constructor(options) {\n // in a workbook, each sheet will have a number\n this.id = options.id;\n\n // count of all relationships\n this.count = 0;\n\n // keep record of all hyperlinks\n this._hyperlinks = [];\n\n this._workbook = options.workbook;\n }\n\n get stream() {\n if (!this._stream) {\n // eslint-disable-next-line no-underscore-dangle\n this._stream = this._workbook._openStream(`/xl/worksheets/_rels/sheet${this.id}.xml.rels`);\n }\n return this._stream;\n }\n\n get length() {\n return this._hyperlinks.length;\n }\n\n each(fn) {\n return this._hyperlinks.forEach(fn);\n }\n\n get hyperlinksProxy() {\n return this._hyperlinksProxy || (this._hyperlinksProxy = new HyperlinksProxy(this));\n }\n\n addHyperlink(hyperlink) {\n // Write to stream\n const relationship = {\n Target: hyperlink.target,\n Type: RelType.Hyperlink,\n TargetMode: 'External',\n };\n const rId = this._writeRelationship(relationship);\n\n // store sheet stuff for later\n this._hyperlinks.push({\n rId,\n address: hyperlink.address,\n });\n }\n\n addMedia(media) {\n return this._writeRelationship(media);\n }\n\n addRelationship(rel) {\n return this._writeRelationship(rel);\n }\n\n commit() {\n if (this.count) {\n // write xml utro\n this._writeClose();\n // and close stream\n this.stream.end();\n }\n }\n\n // ================================================================================\n _writeOpen() {\n this.stream.write(\n `\n `\n );\n }\n\n _writeRelationship(relationship) {\n if (!this.count) {\n this._writeOpen();\n }\n\n const rId = `rId${++this.count}`;\n\n if (relationship.TargetMode) {\n this.stream.write(\n `'\n );\n } else {\n this.stream.write(\n ``\n );\n }\n\n return rId;\n }\n\n _writeClose() {\n this.stream.write('');\n }\n}\n\nmodule.exports = SheetRelsWriter;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js new file mode 100644 index 0000000000000000000000000000000000000000..0abf26c2d9c88569f10e7b2cae1d1e279ea40890 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js @@ -0,0 +1,362 @@ +"use strict"; + +const fs = require('fs'); +const { + EventEmitter +} = require('events'); +const { + PassThrough, + Readable +} = require('readable-stream'); +const nodeStream = require('stream'); +const unzip = require('unzipper'); +const tmp = require('tmp'); +const iterateStream = require('../../utils/iterate-stream'); +const parseSax = require('../../utils/parse-sax'); +const StyleManager = require('../../xlsx/xform/style/styles-xform'); +const WorkbookXform = require('../../xlsx/xform/book/workbook-xform'); +const RelationshipsXform = require('../../xlsx/xform/core/relationships-xform'); +const WorksheetReader = require('./worksheet-reader'); +const HyperlinkReader = require('./hyperlink-reader'); +tmp.setGracefulCleanup(); +class WorkbookReader extends EventEmitter { + constructor(input) { + let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + super(); + this.input = input; + this.options = { + worksheets: 'emit', + sharedStrings: 'cache', + hyperlinks: 'ignore', + styles: 'ignore', + entries: 'ignore', + ...options + }; + this.styles = new StyleManager(); + this.styles.init(); + } + _getStream(input) { + if (input instanceof nodeStream.Readable || input instanceof Readable) { + return input; + } + if (typeof input === 'string') { + return fs.createReadStream(input); + } + throw new Error(`Could not recognise input: ${input}`); + } + async read(input, options) { + try { + for await (const { + eventType, + value + } of this.parse(input, options)) { + switch (eventType) { + case 'shared-strings': + this.emit(eventType, value); + break; + case 'worksheet': + this.emit(eventType, value); + await value.read(); + break; + case 'hyperlinks': + this.emit(eventType, value); + break; + } + } + this.emit('end'); + this.emit('finished'); + } catch (error) { + this.emit('error', error); + } + } + async *[Symbol.asyncIterator]() { + for await (const { + eventType, + value + } of this.parse()) { + if (eventType === 'worksheet') { + yield value; + } + } + } + async *parse(input, options) { + if (options) this.options = options; + const stream = this.stream = this._getStream(input || this.input); + const zip = unzip.Parse({ + forceStream: true + }); + stream.pipe(zip); + + // worksheets, deferred for parsing after shared strings reading + const waitingWorkSheets = []; + for await (const entry of iterateStream(zip)) { + let match; + let sheetNo; + switch (entry.path) { + case '_rels/.rels': + break; + case 'xl/_rels/workbook.xml.rels': + await this._parseRels(entry); + break; + case 'xl/workbook.xml': + await this._parseWorkbook(entry); + break; + case 'xl/sharedStrings.xml': + yield* this._parseSharedStrings(entry); + break; + case 'xl/styles.xml': + await this._parseStyles(entry); + break; + default: + if (entry.path.match(/xl\/worksheets\/sheet\d+[.]xml/)) { + match = entry.path.match(/xl\/worksheets\/sheet(\d+)[.]xml/); + sheetNo = match[1]; + if (this.sharedStrings && this.workbookRels) { + yield* this._parseWorksheet(iterateStream(entry), sheetNo); + } else { + // create temp file for each worksheet + await new Promise((resolve, reject) => { + tmp.file((err, path, fd, tempFileCleanupCallback) => { + if (err) { + return reject(err); + } + waitingWorkSheets.push({ + sheetNo, + path, + tempFileCleanupCallback + }); + const tempStream = fs.createWriteStream(path); + tempStream.on('error', reject); + entry.pipe(tempStream); + return tempStream.on('finish', () => { + return resolve(); + }); + }); + }); + } + } else if (entry.path.match(/xl\/worksheets\/_rels\/sheet\d+[.]xml.rels/)) { + match = entry.path.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/); + sheetNo = match[1]; + yield* this._parseHyperlinks(iterateStream(entry), sheetNo); + } + break; + } + entry.autodrain(); + } + for (const { + sheetNo, + path, + tempFileCleanupCallback + } of waitingWorkSheets) { + let fileStream = fs.createReadStream(path); + // TODO: Remove once node v8 is deprecated + // Detect and upgrade old fileStreams + if (!fileStream[Symbol.asyncIterator]) { + fileStream = fileStream.pipe(new PassThrough()); + } + yield* this._parseWorksheet(fileStream, sheetNo); + tempFileCleanupCallback(); + } + } + _emitEntry(payload) { + if (this.options.entries === 'emit') { + this.emit('entry', payload); + } + } + async _parseRels(entry) { + const xform = new RelationshipsXform(); + this.workbookRels = await xform.parseStream(iterateStream(entry)); + } + async _parseWorkbook(entry) { + this._emitEntry({ + type: 'workbook' + }); + const workbook = new WorkbookXform(); + await workbook.parseStream(iterateStream(entry)); + this.properties = workbook.map.workbookPr; + this.model = workbook.model; + } + async *_parseSharedStrings(entry) { + this._emitEntry({ + type: 'shared-strings' + }); + switch (this.options.sharedStrings) { + case 'cache': + this.sharedStrings = []; + break; + case 'emit': + break; + default: + return; + } + let text = null; + let richText = []; + let index = 0; + let font = null; + for await (const events of parseSax(iterateStream(entry))) { + for (const { + eventType, + value + } of events) { + if (eventType === 'opentag') { + const node = value; + switch (node.name) { + case 'b': + font = font || {}; + font.bold = true; + break; + case 'charset': + font = font || {}; + font.charset = parseInt(node.attributes.charset, 10); + break; + case 'color': + font = font || {}; + font.color = {}; + if (node.attributes.rgb) { + font.color.argb = node.attributes.argb; + } + if (node.attributes.val) { + font.color.argb = node.attributes.val; + } + if (node.attributes.theme) { + font.color.theme = node.attributes.theme; + } + break; + case 'family': + font = font || {}; + font.family = parseInt(node.attributes.val, 10); + break; + case 'i': + font = font || {}; + font.italic = true; + break; + case 'outline': + font = font || {}; + font.outline = true; + break; + case 'rFont': + font = font || {}; + font.name = node.value; + break; + case 'si': + font = null; + richText = []; + text = null; + break; + case 'sz': + font = font || {}; + font.size = parseInt(node.attributes.val, 10); + break; + case 'strike': + break; + case 't': + text = null; + break; + case 'u': + font = font || {}; + font.underline = true; + break; + case 'vertAlign': + font = font || {}; + font.vertAlign = node.attributes.val; + break; + } + } else if (eventType === 'text') { + text = text ? text + value : value; + } else if (eventType === 'closetag') { + const node = value; + switch (node.name) { + case 'r': + richText.push({ + font, + text + }); + font = null; + text = null; + break; + case 'si': + if (this.options.sharedStrings === 'cache') { + this.sharedStrings.push(richText.length ? { + richText + } : text); + } else if (this.options.sharedStrings === 'emit') { + yield { + index: index++, + text: richText.length ? { + richText + } : text + }; + } + richText = []; + font = null; + text = null; + break; + } + } + } + } + } + async _parseStyles(entry) { + this._emitEntry({ + type: 'styles' + }); + if (this.options.styles === 'cache') { + this.styles = new StyleManager(); + await this.styles.parseStream(iterateStream(entry)); + } + } + *_parseWorksheet(iterator, sheetNo) { + this._emitEntry({ + type: 'worksheet', + id: sheetNo + }); + const worksheetReader = new WorksheetReader({ + workbook: this, + id: sheetNo, + iterator, + options: this.options + }); + const matchingRel = (this.workbookRels || []).find(rel => rel.Target === `worksheets/sheet${sheetNo}.xml`); + const matchingSheet = matchingRel && (this.model.sheets || []).find(sheet => sheet.rId === matchingRel.Id); + if (matchingSheet) { + worksheetReader.id = matchingSheet.id; + worksheetReader.name = matchingSheet.name; + worksheetReader.state = matchingSheet.state; + } + if (this.options.worksheets === 'emit') { + yield { + eventType: 'worksheet', + value: worksheetReader + }; + } + } + *_parseHyperlinks(iterator, sheetNo) { + this._emitEntry({ + type: 'hyperlinks', + id: sheetNo + }); + const hyperlinksReader = new HyperlinkReader({ + workbook: this, + id: sheetNo, + iterator, + options: this.options + }); + if (this.options.hyperlinks === 'emit') { + yield { + eventType: 'hyperlinks', + value: hyperlinksReader + }; + } + } +} + +// for reference - these are the valid values for options +WorkbookReader.Options = { + worksheets: ['emit', 'ignore'], + sharedStrings: ['cache', 'emit', 'ignore'], + hyperlinks: ['cache', 'emit', 'ignore'], + styles: ['cache', 'ignore'], + entries: ['emit', 'ignore'] +}; +module.exports = WorkbookReader; +//# sourceMappingURL=workbook-reader.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js.map b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js.map new file mode 100644 index 0000000000000000000000000000000000000000..827f849698ab04668a77a87e4ffaa9c65838077e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workbook-reader.js","names":["fs","require","EventEmitter","PassThrough","Readable","nodeStream","unzip","tmp","iterateStream","parseSax","StyleManager","WorkbookXform","RelationshipsXform","WorksheetReader","HyperlinkReader","setGracefulCleanup","WorkbookReader","constructor","input","options","arguments","length","undefined","worksheets","sharedStrings","hyperlinks","styles","entries","init","_getStream","createReadStream","Error","read","eventType","value","parse","emit","error","Symbol","asyncIterator","stream","zip","Parse","forceStream","pipe","waitingWorkSheets","entry","match","sheetNo","path","_parseRels","_parseWorkbook","_parseSharedStrings","_parseStyles","workbookRels","_parseWorksheet","Promise","resolve","reject","file","err","fd","tempFileCleanupCallback","push","tempStream","createWriteStream","on","_parseHyperlinks","autodrain","fileStream","_emitEntry","payload","xform","parseStream","type","workbook","properties","map","workbookPr","model","text","richText","index","font","events","node","name","bold","charset","parseInt","attributes","color","rgb","argb","val","theme","family","italic","outline","size","underline","vertAlign","iterator","id","worksheetReader","matchingRel","find","rel","Target","matchingSheet","sheets","sheet","rId","Id","state","hyperlinksReader","Options","module","exports"],"sources":["../../../../lib/stream/xlsx/workbook-reader.js"],"sourcesContent":["const fs = require('fs');\nconst {EventEmitter} = require('events');\nconst {PassThrough, Readable} = require('readable-stream');\nconst nodeStream = require('stream');\nconst unzip = require('unzipper');\nconst tmp = require('tmp');\nconst iterateStream = require('../../utils/iterate-stream');\nconst parseSax = require('../../utils/parse-sax');\n\nconst StyleManager = require('../../xlsx/xform/style/styles-xform');\nconst WorkbookXform = require('../../xlsx/xform/book/workbook-xform');\nconst RelationshipsXform = require('../../xlsx/xform/core/relationships-xform');\n\nconst WorksheetReader = require('./worksheet-reader');\nconst HyperlinkReader = require('./hyperlink-reader');\n\ntmp.setGracefulCleanup();\n\nclass WorkbookReader extends EventEmitter {\n constructor(input, options = {}) {\n super();\n\n this.input = input;\n\n this.options = {\n worksheets: 'emit',\n sharedStrings: 'cache',\n hyperlinks: 'ignore',\n styles: 'ignore',\n entries: 'ignore',\n ...options,\n };\n\n this.styles = new StyleManager();\n this.styles.init();\n }\n\n _getStream(input) {\n if (input instanceof nodeStream.Readable || input instanceof Readable) {\n return input;\n }\n if (typeof input === 'string') {\n return fs.createReadStream(input);\n }\n throw new Error(`Could not recognise input: ${input}`);\n }\n\n async read(input, options) {\n try {\n for await (const {eventType, value} of this.parse(input, options)) {\n switch (eventType) {\n case 'shared-strings':\n this.emit(eventType, value);\n break;\n case 'worksheet':\n this.emit(eventType, value);\n await value.read();\n break;\n case 'hyperlinks':\n this.emit(eventType, value);\n break;\n }\n }\n this.emit('end');\n this.emit('finished');\n } catch (error) {\n this.emit('error', error);\n }\n }\n\n async *[Symbol.asyncIterator]() {\n for await (const {eventType, value} of this.parse()) {\n if (eventType === 'worksheet') {\n yield value;\n }\n }\n }\n\n async *parse(input, options) {\n if (options) this.options = options;\n const stream = (this.stream = this._getStream(input || this.input));\n const zip = unzip.Parse({forceStream: true});\n stream.pipe(zip);\n\n // worksheets, deferred for parsing after shared strings reading\n const waitingWorkSheets = [];\n\n for await (const entry of iterateStream(zip)) {\n let match;\n let sheetNo;\n switch (entry.path) {\n case '_rels/.rels':\n break;\n case 'xl/_rels/workbook.xml.rels':\n await this._parseRels(entry);\n break;\n case 'xl/workbook.xml':\n await this._parseWorkbook(entry);\n break;\n case 'xl/sharedStrings.xml':\n yield* this._parseSharedStrings(entry);\n break;\n case 'xl/styles.xml':\n await this._parseStyles(entry);\n break;\n default:\n if (entry.path.match(/xl\\/worksheets\\/sheet\\d+[.]xml/)) {\n match = entry.path.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/);\n sheetNo = match[1];\n if (this.sharedStrings && this.workbookRels) {\n yield* this._parseWorksheet(iterateStream(entry), sheetNo);\n } else {\n // create temp file for each worksheet\n await new Promise((resolve, reject) => {\n tmp.file((err, path, fd, tempFileCleanupCallback) => {\n if (err) {\n return reject(err);\n }\n waitingWorkSheets.push({sheetNo, path, tempFileCleanupCallback});\n\n const tempStream = fs.createWriteStream(path);\n tempStream.on('error', reject);\n entry.pipe(tempStream);\n return tempStream.on('finish', () => {\n return resolve();\n });\n });\n });\n }\n } else if (entry.path.match(/xl\\/worksheets\\/_rels\\/sheet\\d+[.]xml.rels/)) {\n match = entry.path.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/);\n sheetNo = match[1];\n yield* this._parseHyperlinks(iterateStream(entry), sheetNo);\n }\n break;\n }\n entry.autodrain();\n }\n\n for (const {sheetNo, path, tempFileCleanupCallback} of waitingWorkSheets) {\n let fileStream = fs.createReadStream(path);\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old fileStreams\n if (!fileStream[Symbol.asyncIterator]) {\n fileStream = fileStream.pipe(new PassThrough());\n }\n yield* this._parseWorksheet(fileStream, sheetNo);\n tempFileCleanupCallback();\n }\n }\n\n _emitEntry(payload) {\n if (this.options.entries === 'emit') {\n this.emit('entry', payload);\n }\n }\n\n async _parseRels(entry) {\n const xform = new RelationshipsXform();\n this.workbookRels = await xform.parseStream(iterateStream(entry));\n }\n\n async _parseWorkbook(entry) {\n this._emitEntry({type: 'workbook'});\n\n const workbook = new WorkbookXform();\n await workbook.parseStream(iterateStream(entry));\n\n this.properties = workbook.map.workbookPr;\n this.model = workbook.model;\n }\n\n async *_parseSharedStrings(entry) {\n this._emitEntry({type: 'shared-strings'});\n switch (this.options.sharedStrings) {\n case 'cache':\n this.sharedStrings = [];\n break;\n case 'emit':\n break;\n default:\n return;\n }\n\n let text = null;\n let richText = [];\n let index = 0;\n let font = null;\n for await (const events of parseSax(iterateStream(entry))) {\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n const node = value;\n switch (node.name) {\n case 'b':\n font = font || {};\n font.bold = true;\n break;\n case 'charset':\n font = font || {};\n font.charset = parseInt(node.attributes.charset, 10);\n break;\n case 'color':\n font = font || {};\n font.color = {};\n if (node.attributes.rgb) {\n font.color.argb = node.attributes.argb;\n }\n if (node.attributes.val) {\n font.color.argb = node.attributes.val;\n }\n if (node.attributes.theme) {\n font.color.theme = node.attributes.theme;\n }\n break;\n case 'family':\n font = font || {};\n font.family = parseInt(node.attributes.val, 10);\n break;\n case 'i':\n font = font || {};\n font.italic = true;\n break;\n case 'outline':\n font = font || {};\n font.outline = true;\n break;\n case 'rFont':\n font = font || {};\n font.name = node.value;\n break;\n case 'si':\n font = null;\n richText = [];\n text = null;\n break;\n case 'sz':\n font = font || {};\n font.size = parseInt(node.attributes.val, 10);\n break;\n case 'strike':\n break;\n case 't':\n text = null;\n break;\n case 'u':\n font = font || {};\n font.underline = true;\n break;\n case 'vertAlign':\n font = font || {};\n font.vertAlign = node.attributes.val;\n break;\n }\n } else if (eventType === 'text') {\n text = text ? text + value : value;\n } else if (eventType === 'closetag') {\n const node = value;\n switch (node.name) {\n case 'r':\n richText.push({\n font,\n text,\n });\n\n font = null;\n text = null;\n break;\n case 'si':\n if (this.options.sharedStrings === 'cache') {\n this.sharedStrings.push(richText.length ? {richText} : text);\n } else if (this.options.sharedStrings === 'emit') {\n yield {index: index++, text: richText.length ? {richText} : text};\n }\n\n richText = [];\n font = null;\n text = null;\n break;\n }\n }\n }\n }\n }\n\n async _parseStyles(entry) {\n this._emitEntry({type: 'styles'});\n if (this.options.styles === 'cache') {\n this.styles = new StyleManager();\n await this.styles.parseStream(iterateStream(entry));\n }\n }\n\n *_parseWorksheet(iterator, sheetNo) {\n this._emitEntry({type: 'worksheet', id: sheetNo});\n const worksheetReader = new WorksheetReader({\n workbook: this,\n id: sheetNo,\n iterator,\n options: this.options,\n });\n\n const matchingRel = (this.workbookRels || []).find(rel => rel.Target === `worksheets/sheet${sheetNo}.xml`);\n const matchingSheet = matchingRel && (this.model.sheets || []).find(sheet => sheet.rId === matchingRel.Id);\n if (matchingSheet) {\n worksheetReader.id = matchingSheet.id;\n worksheetReader.name = matchingSheet.name;\n worksheetReader.state = matchingSheet.state;\n }\n if (this.options.worksheets === 'emit') {\n yield {eventType: 'worksheet', value: worksheetReader};\n }\n }\n\n *_parseHyperlinks(iterator, sheetNo) {\n this._emitEntry({type: 'hyperlinks', id: sheetNo});\n const hyperlinksReader = new HyperlinkReader({\n workbook: this,\n id: sheetNo,\n iterator,\n options: this.options,\n });\n if (this.options.hyperlinks === 'emit') {\n yield {eventType: 'hyperlinks', value: hyperlinksReader};\n }\n }\n}\n\n// for reference - these are the valid values for options\nWorkbookReader.Options = {\n worksheets: ['emit', 'ignore'],\n sharedStrings: ['cache', 'emit', 'ignore'],\n hyperlinks: ['cache', 'emit', 'ignore'],\n styles: ['cache', 'ignore'],\n entries: ['emit', 'ignore'],\n};\n\nmodule.exports = WorkbookReader;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js new file mode 100644 index 0000000000000000000000000000000000000000..f06796b948c3afa98b058d3ed438c9c3625aee03 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js @@ -0,0 +1,347 @@ +"use strict"; + +const fs = require('fs'); +const Archiver = require('archiver'); +const StreamBuf = require('../../utils/stream-buf'); +const RelType = require('../../xlsx/rel-type'); +const StylesXform = require('../../xlsx/xform/style/styles-xform'); +const SharedStrings = require('../../utils/shared-strings'); +const DefinedNames = require('../../doc/defined-names'); +const CoreXform = require('../../xlsx/xform/core/core-xform'); +const RelationshipsXform = require('../../xlsx/xform/core/relationships-xform'); +const ContentTypesXform = require('../../xlsx/xform/core/content-types-xform'); +const AppXform = require('../../xlsx/xform/core/app-xform'); +const WorkbookXform = require('../../xlsx/xform/book/workbook-xform'); +const SharedStringsXform = require('../../xlsx/xform/strings/shared-strings-xform'); +const WorksheetWriter = require('./worksheet-writer'); +const theme1Xml = require('../../xlsx/xml/theme1.js'); +class WorkbookWriter { + constructor(options) { + options = options || {}; + this.created = options.created || new Date(); + this.modified = options.modified || this.created; + this.creator = options.creator || 'ExcelJS'; + this.lastModifiedBy = options.lastModifiedBy || 'ExcelJS'; + this.lastPrinted = options.lastPrinted; + + // using shared strings creates a smaller xlsx file but may use more memory + this.useSharedStrings = options.useSharedStrings || false; + this.sharedStrings = new SharedStrings(); + + // style manager + this.styles = options.useStyles ? new StylesXform(true) : new StylesXform.Mock(true); + + // defined names + this._definedNames = new DefinedNames(); + this._worksheets = []; + this.views = []; + this.zipOptions = options.zip; + this.media = []; + this.commentRefs = []; + this.zip = Archiver('zip', this.zipOptions); + if (options.stream) { + this.stream = options.stream; + } else if (options.filename) { + this.stream = fs.createWriteStream(options.filename); + } else { + this.stream = new StreamBuf(); + } + this.zip.pipe(this.stream); + + // these bits can be added right now + this.promise = Promise.all([this.addThemes(), this.addOfficeRels()]); + } + get definedNames() { + return this._definedNames; + } + _openStream(path) { + const stream = new StreamBuf({ + bufSize: 65536, + batch: true + }); + this.zip.append(stream, { + name: path + }); + stream.on('finish', () => { + stream.emit('zipped'); + }); + return stream; + } + _commitWorksheets() { + const commitWorksheet = function (worksheet) { + if (!worksheet.committed) { + return new Promise(resolve => { + worksheet.stream.on('zipped', () => { + resolve(); + }); + worksheet.commit(); + }); + } + return Promise.resolve(); + }; + // if there are any uncommitted worksheets, commit them now and wait + const promises = this._worksheets.map(commitWorksheet); + if (promises.length) { + return Promise.all(promises); + } + return Promise.resolve(); + } + async commit() { + // commit all worksheets, then add suplimentary files + await this.promise; + await this.addMedia(); + await this._commitWorksheets(); + await Promise.all([this.addContentTypes(), this.addApp(), this.addCore(), this.addSharedStrings(), this.addStyles(), this.addWorkbookRels()]); + await this.addWorkbook(); + return this._finalize(); + } + get nextId() { + // find the next unique spot to add worksheet + let i; + for (i = 1; i < this._worksheets.length; i++) { + if (!this._worksheets[i]) { + return i; + } + } + return this._worksheets.length || 1; + } + addImage(image) { + const id = this.media.length; + const medium = Object.assign({}, image, { + type: 'image', + name: `image${id}.${image.extension}` + }); + this.media.push(medium); + return id; + } + getImage(id) { + return this.media[id]; + } + addWorksheet(name, options) { + // it's possible to add a worksheet with different than default + // shared string handling + // in fact, it's even possible to switch it mid-sheet + options = options || {}; + const useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : this.useSharedStrings; + if (options.tabColor) { + // eslint-disable-next-line no-console + console.trace('tabColor option has moved to { properties: tabColor: {...} }'); + options.properties = Object.assign({ + tabColor: options.tabColor + }, options.properties); + } + const id = this.nextId; + name = name || `sheet${id}`; + const worksheet = new WorksheetWriter({ + id, + name, + workbook: this, + useSharedStrings, + properties: options.properties, + state: options.state, + pageSetup: options.pageSetup, + views: options.views, + autoFilter: options.autoFilter, + headerFooter: options.headerFooter + }); + this._worksheets[id] = worksheet; + return worksheet; + } + getWorksheet(id) { + if (id === undefined) { + return this._worksheets.find(() => true); + } + if (typeof id === 'number') { + return this._worksheets[id]; + } + if (typeof id === 'string') { + return this._worksheets.find(worksheet => worksheet && worksheet.name === id); + } + return undefined; + } + addStyles() { + return new Promise(resolve => { + this.zip.append(this.styles.xml, { + name: 'xl/styles.xml' + }); + resolve(); + }); + } + addThemes() { + return new Promise(resolve => { + this.zip.append(theme1Xml, { + name: 'xl/theme/theme1.xml' + }); + resolve(); + }); + } + addOfficeRels() { + return new Promise(resolve => { + const xform = new RelationshipsXform(); + const xml = xform.toXml([{ + Id: 'rId1', + Type: RelType.OfficeDocument, + Target: 'xl/workbook.xml' + }, { + Id: 'rId2', + Type: RelType.CoreProperties, + Target: 'docProps/core.xml' + }, { + Id: 'rId3', + Type: RelType.ExtenderProperties, + Target: 'docProps/app.xml' + }]); + this.zip.append(xml, { + name: '/_rels/.rels' + }); + resolve(); + }); + } + addContentTypes() { + return new Promise(resolve => { + const model = { + worksheets: this._worksheets.filter(Boolean), + sharedStrings: this.sharedStrings, + commentRefs: this.commentRefs, + media: this.media + }; + const xform = new ContentTypesXform(); + const xml = xform.toXml(model); + this.zip.append(xml, { + name: '[Content_Types].xml' + }); + resolve(); + }); + } + addMedia() { + return Promise.all(this.media.map(medium => { + if (medium.type === 'image') { + const filename = `xl/media/${medium.name}`; + if (medium.filename) { + return this.zip.file(medium.filename, { + name: filename + }); + } + if (medium.buffer) { + return this.zip.append(medium.buffer, { + name: filename + }); + } + if (medium.base64) { + const dataimg64 = medium.base64; + const content = dataimg64.substring(dataimg64.indexOf(',') + 1); + return this.zip.append(content, { + name: filename, + base64: true + }); + } + } + throw new Error('Unsupported media'); + })); + } + addApp() { + return new Promise(resolve => { + const model = { + worksheets: this._worksheets.filter(Boolean) + }; + const xform = new AppXform(); + const xml = xform.toXml(model); + this.zip.append(xml, { + name: 'docProps/app.xml' + }); + resolve(); + }); + } + addCore() { + return new Promise(resolve => { + const coreXform = new CoreXform(); + const xml = coreXform.toXml(this); + this.zip.append(xml, { + name: 'docProps/core.xml' + }); + resolve(); + }); + } + addSharedStrings() { + if (this.sharedStrings.count) { + return new Promise(resolve => { + const sharedStringsXform = new SharedStringsXform(); + const xml = sharedStringsXform.toXml(this.sharedStrings); + this.zip.append(xml, { + name: '/xl/sharedStrings.xml' + }); + resolve(); + }); + } + return Promise.resolve(); + } + addWorkbookRels() { + let count = 1; + const relationships = [{ + Id: `rId${count++}`, + Type: RelType.Styles, + Target: 'styles.xml' + }, { + Id: `rId${count++}`, + Type: RelType.Theme, + Target: 'theme/theme1.xml' + }]; + if (this.sharedStrings.count) { + relationships.push({ + Id: `rId${count++}`, + Type: RelType.SharedStrings, + Target: 'sharedStrings.xml' + }); + } + this._worksheets.forEach(worksheet => { + if (worksheet) { + worksheet.rId = `rId${count++}`; + relationships.push({ + Id: worksheet.rId, + Type: RelType.Worksheet, + Target: `worksheets/sheet${worksheet.id}.xml` + }); + } + }); + return new Promise(resolve => { + const xform = new RelationshipsXform(); + const xml = xform.toXml(relationships); + this.zip.append(xml, { + name: '/xl/_rels/workbook.xml.rels' + }); + resolve(); + }); + } + addWorkbook() { + const { + zip + } = this; + const model = { + worksheets: this._worksheets.filter(Boolean), + definedNames: this._definedNames.model, + views: this.views, + properties: {}, + calcProperties: {} + }; + return new Promise(resolve => { + const xform = new WorkbookXform(); + xform.prepare(model); + zip.append(xform.toXml(model), { + name: '/xl/workbook.xml' + }); + resolve(); + }); + } + _finalize() { + return new Promise((resolve, reject) => { + this.stream.on('error', reject); + this.stream.on('finish', () => { + resolve(this); + }); + this.zip.on('error', reject); + this.zip.finalize(); + }); + } +} +module.exports = WorkbookWriter; +//# sourceMappingURL=workbook-writer.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js.map b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0360621bdf0343bb3a2e37f845fffd3ed727bd2e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workbook-writer.js","names":["fs","require","Archiver","StreamBuf","RelType","StylesXform","SharedStrings","DefinedNames","CoreXform","RelationshipsXform","ContentTypesXform","AppXform","WorkbookXform","SharedStringsXform","WorksheetWriter","theme1Xml","WorkbookWriter","constructor","options","created","Date","modified","creator","lastModifiedBy","lastPrinted","useSharedStrings","sharedStrings","styles","useStyles","Mock","_definedNames","_worksheets","views","zipOptions","zip","media","commentRefs","stream","filename","createWriteStream","pipe","promise","Promise","all","addThemes","addOfficeRels","definedNames","_openStream","path","bufSize","batch","append","name","on","emit","_commitWorksheets","commitWorksheet","worksheet","committed","resolve","commit","promises","map","length","addMedia","addContentTypes","addApp","addCore","addSharedStrings","addStyles","addWorkbookRels","addWorkbook","_finalize","nextId","i","addImage","image","id","medium","Object","assign","type","extension","push","getImage","addWorksheet","undefined","tabColor","console","trace","properties","workbook","state","pageSetup","autoFilter","headerFooter","getWorksheet","find","xml","xform","toXml","Id","Type","OfficeDocument","Target","CoreProperties","ExtenderProperties","model","worksheets","filter","Boolean","file","buffer","base64","dataimg64","content","substring","indexOf","Error","coreXform","count","sharedStringsXform","relationships","Styles","Theme","forEach","rId","Worksheet","calcProperties","prepare","reject","finalize","module","exports"],"sources":["../../../../lib/stream/xlsx/workbook-writer.js"],"sourcesContent":["const fs = require('fs');\nconst Archiver = require('archiver');\n\nconst StreamBuf = require('../../utils/stream-buf');\n\nconst RelType = require('../../xlsx/rel-type');\nconst StylesXform = require('../../xlsx/xform/style/styles-xform');\nconst SharedStrings = require('../../utils/shared-strings');\nconst DefinedNames = require('../../doc/defined-names');\n\nconst CoreXform = require('../../xlsx/xform/core/core-xform');\nconst RelationshipsXform = require('../../xlsx/xform/core/relationships-xform');\nconst ContentTypesXform = require('../../xlsx/xform/core/content-types-xform');\nconst AppXform = require('../../xlsx/xform/core/app-xform');\nconst WorkbookXform = require('../../xlsx/xform/book/workbook-xform');\nconst SharedStringsXform = require('../../xlsx/xform/strings/shared-strings-xform');\n\nconst WorksheetWriter = require('./worksheet-writer');\n\nconst theme1Xml = require('../../xlsx/xml/theme1.js');\n\nclass WorkbookWriter {\n constructor(options) {\n options = options || {};\n\n this.created = options.created || new Date();\n this.modified = options.modified || this.created;\n this.creator = options.creator || 'ExcelJS';\n this.lastModifiedBy = options.lastModifiedBy || 'ExcelJS';\n this.lastPrinted = options.lastPrinted;\n\n // using shared strings creates a smaller xlsx file but may use more memory\n this.useSharedStrings = options.useSharedStrings || false;\n this.sharedStrings = new SharedStrings();\n\n // style manager\n this.styles = options.useStyles ? new StylesXform(true) : new StylesXform.Mock(true);\n\n // defined names\n this._definedNames = new DefinedNames();\n\n this._worksheets = [];\n this.views = [];\n\n this.zipOptions = options.zip;\n\n this.media = [];\n this.commentRefs = [];\n\n this.zip = Archiver('zip', this.zipOptions);\n if (options.stream) {\n this.stream = options.stream;\n } else if (options.filename) {\n this.stream = fs.createWriteStream(options.filename);\n } else {\n this.stream = new StreamBuf();\n }\n this.zip.pipe(this.stream);\n\n // these bits can be added right now\n this.promise = Promise.all([this.addThemes(), this.addOfficeRels()]);\n }\n\n get definedNames() {\n return this._definedNames;\n }\n\n _openStream(path) {\n const stream = new StreamBuf({bufSize: 65536, batch: true});\n this.zip.append(stream, {name: path});\n stream.on('finish', () => {\n stream.emit('zipped');\n });\n return stream;\n }\n\n _commitWorksheets() {\n const commitWorksheet = function(worksheet) {\n if (!worksheet.committed) {\n return new Promise(resolve => {\n worksheet.stream.on('zipped', () => {\n resolve();\n });\n worksheet.commit();\n });\n }\n return Promise.resolve();\n };\n // if there are any uncommitted worksheets, commit them now and wait\n const promises = this._worksheets.map(commitWorksheet);\n if (promises.length) {\n return Promise.all(promises);\n }\n return Promise.resolve();\n }\n\n async commit() {\n // commit all worksheets, then add suplimentary files\n await this.promise;\n await this.addMedia();\n await this._commitWorksheets();\n await Promise.all([\n this.addContentTypes(),\n this.addApp(),\n this.addCore(),\n this.addSharedStrings(),\n this.addStyles(),\n this.addWorkbookRels(),\n ]);\n await this.addWorkbook();\n return this._finalize();\n }\n\n get nextId() {\n // find the next unique spot to add worksheet\n let i;\n for (i = 1; i < this._worksheets.length; i++) {\n if (!this._worksheets[i]) {\n return i;\n }\n }\n return this._worksheets.length || 1;\n }\n\n addImage(image) {\n const id = this.media.length;\n const medium = Object.assign({}, image, {type: 'image', name: `image${id}.${image.extension}`});\n this.media.push(medium);\n return id;\n }\n\n getImage(id) {\n return this.media[id];\n }\n\n addWorksheet(name, options) {\n // it's possible to add a worksheet with different than default\n // shared string handling\n // in fact, it's even possible to switch it mid-sheet\n options = options || {};\n const useSharedStrings =\n options.useSharedStrings !== undefined ? options.useSharedStrings : this.useSharedStrings;\n\n if (options.tabColor) {\n // eslint-disable-next-line no-console\n console.trace('tabColor option has moved to { properties: tabColor: {...} }');\n options.properties = Object.assign(\n {\n tabColor: options.tabColor,\n },\n options.properties\n );\n }\n\n const id = this.nextId;\n name = name || `sheet${id}`;\n\n const worksheet = new WorksheetWriter({\n id,\n name,\n workbook: this,\n useSharedStrings,\n properties: options.properties,\n state: options.state,\n pageSetup: options.pageSetup,\n views: options.views,\n autoFilter: options.autoFilter,\n headerFooter: options.headerFooter,\n });\n\n this._worksheets[id] = worksheet;\n return worksheet;\n }\n\n getWorksheet(id) {\n if (id === undefined) {\n return this._worksheets.find(() => true);\n }\n if (typeof id === 'number') {\n return this._worksheets[id];\n }\n if (typeof id === 'string') {\n return this._worksheets.find(worksheet => worksheet && worksheet.name === id);\n }\n return undefined;\n }\n\n addStyles() {\n return new Promise(resolve => {\n this.zip.append(this.styles.xml, {name: 'xl/styles.xml'});\n resolve();\n });\n }\n\n addThemes() {\n return new Promise(resolve => {\n this.zip.append(theme1Xml, {name: 'xl/theme/theme1.xml'});\n resolve();\n });\n }\n\n addOfficeRels() {\n return new Promise(resolve => {\n const xform = new RelationshipsXform();\n const xml = xform.toXml([\n {Id: 'rId1', Type: RelType.OfficeDocument, Target: 'xl/workbook.xml'},\n {Id: 'rId2', Type: RelType.CoreProperties, Target: 'docProps/core.xml'},\n {Id: 'rId3', Type: RelType.ExtenderProperties, Target: 'docProps/app.xml'},\n ]);\n this.zip.append(xml, {name: '/_rels/.rels'});\n resolve();\n });\n }\n\n addContentTypes() {\n return new Promise(resolve => {\n const model = {\n worksheets: this._worksheets.filter(Boolean),\n sharedStrings: this.sharedStrings,\n commentRefs: this.commentRefs,\n media: this.media,\n };\n const xform = new ContentTypesXform();\n const xml = xform.toXml(model);\n this.zip.append(xml, {name: '[Content_Types].xml'});\n resolve();\n });\n }\n\n addMedia() {\n return Promise.all(\n this.media.map(medium => {\n if (medium.type === 'image') {\n const filename = `xl/media/${medium.name}`;\n if (medium.filename) {\n return this.zip.file(medium.filename, {name: filename});\n }\n if (medium.buffer) {\n return this.zip.append(medium.buffer, {name: filename});\n }\n if (medium.base64) {\n const dataimg64 = medium.base64;\n const content = dataimg64.substring(dataimg64.indexOf(',') + 1);\n return this.zip.append(content, {name: filename, base64: true});\n }\n }\n throw new Error('Unsupported media');\n })\n );\n }\n\n addApp() {\n return new Promise(resolve => {\n const model = {\n worksheets: this._worksheets.filter(Boolean),\n };\n const xform = new AppXform();\n const xml = xform.toXml(model);\n this.zip.append(xml, {name: 'docProps/app.xml'});\n resolve();\n });\n }\n\n addCore() {\n return new Promise(resolve => {\n const coreXform = new CoreXform();\n const xml = coreXform.toXml(this);\n this.zip.append(xml, {name: 'docProps/core.xml'});\n resolve();\n });\n }\n\n addSharedStrings() {\n if (this.sharedStrings.count) {\n return new Promise(resolve => {\n const sharedStringsXform = new SharedStringsXform();\n const xml = sharedStringsXform.toXml(this.sharedStrings);\n this.zip.append(xml, {name: '/xl/sharedStrings.xml'});\n resolve();\n });\n }\n return Promise.resolve();\n }\n\n addWorkbookRels() {\n let count = 1;\n const relationships = [\n {Id: `rId${count++}`, Type: RelType.Styles, Target: 'styles.xml'},\n {Id: `rId${count++}`, Type: RelType.Theme, Target: 'theme/theme1.xml'},\n ];\n if (this.sharedStrings.count) {\n relationships.push({\n Id: `rId${count++}`,\n Type: RelType.SharedStrings,\n Target: 'sharedStrings.xml',\n });\n }\n this._worksheets.forEach(worksheet => {\n if (worksheet) {\n worksheet.rId = `rId${count++}`;\n relationships.push({\n Id: worksheet.rId,\n Type: RelType.Worksheet,\n Target: `worksheets/sheet${worksheet.id}.xml`,\n });\n }\n });\n return new Promise(resolve => {\n const xform = new RelationshipsXform();\n const xml = xform.toXml(relationships);\n this.zip.append(xml, {name: '/xl/_rels/workbook.xml.rels'});\n resolve();\n });\n }\n\n addWorkbook() {\n const {zip} = this;\n const model = {\n worksheets: this._worksheets.filter(Boolean),\n definedNames: this._definedNames.model,\n views: this.views,\n properties: {},\n calcProperties: {},\n };\n\n return new Promise(resolve => {\n const xform = new WorkbookXform();\n xform.prepare(model);\n zip.append(xform.toXml(model), {name: '/xl/workbook.xml'});\n resolve();\n });\n }\n\n _finalize() {\n return new Promise((resolve, reject) => {\n this.stream.on('error', reject);\n this.stream.on('finish', () => {\n resolve(this);\n });\n this.zip.on('error', reject);\n\n this.zip.finalize();\n });\n }\n}\n\nmodule.exports = WorkbookWriter;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js new file mode 100644 index 0000000000000000000000000000000000000000..fde1935d7dbd7fc1526543294866481e2f4ad90a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js @@ -0,0 +1,392 @@ +"use strict"; + +const { + EventEmitter +} = require('events'); +const parseSax = require('../../utils/parse-sax'); +const _ = require('../../utils/under-dash'); +const utils = require('../../utils/utils'); +const colCache = require('../../utils/col-cache'); +const Dimensions = require('../../doc/range'); +const Row = require('../../doc/row'); +const Column = require('../../doc/column'); +class WorksheetReader extends EventEmitter { + constructor(_ref) { + let { + workbook, + id, + iterator, + options + } = _ref; + super(); + this.workbook = workbook; + this.id = id; + this.iterator = iterator; + this.options = options || {}; + + // and a name + this.name = `Sheet${this.id}`; + + // column definitions + this._columns = null; + this._keys = {}; + + // keep a record of dimensions + this._dimensions = new Dimensions(); + } + + // destroy - not a valid operation for a streaming writer + // even though some streamers might be able to, it's a bad idea. + destroy() { + throw new Error('Invalid Operation: destroy'); + } + + // return the current dimensions of the writer + get dimensions() { + return this._dimensions; + } + + // ========================================================================= + // Columns + + // get the current columns array. + get columns() { + return this._columns; + } + + // get a single column by col number. If it doesn't exist, it and any gaps before it + // are created. + getColumn(c) { + if (typeof c === 'string') { + // if it matches a key'd column, return that + const col = this._keys[c]; + if (col) { + return col; + } + + // otherise, assume letter + c = colCache.l2n(c); + } + if (!this._columns) { + this._columns = []; + } + if (c > this._columns.length) { + let n = this._columns.length + 1; + while (n <= c) { + this._columns.push(new Column(this, n++)); + } + } + return this._columns[c - 1]; + } + getColumnKey(key) { + return this._keys[key]; + } + setColumnKey(key, value) { + this._keys[key] = value; + } + deleteColumnKey(key) { + delete this._keys[key]; + } + eachColumnKey(f) { + _.each(this._keys, f); + } + async read() { + try { + for await (const events of this.parse()) { + for (const { + eventType, + value + } of events) { + this.emit(eventType, value); + } + } + this.emit('finished'); + } catch (error) { + this.emit('error', error); + } + } + async *[Symbol.asyncIterator]() { + for await (const events of this.parse()) { + for (const { + eventType, + value + } of events) { + if (eventType === 'row') { + yield value; + } + } + } + } + async *parse() { + const { + iterator, + options + } = this; + let emitSheet = false; + let emitHyperlinks = false; + let hyperlinks = null; + switch (options.worksheets) { + case 'emit': + emitSheet = true; + break; + case 'prep': + break; + default: + break; + } + switch (options.hyperlinks) { + case 'emit': + emitHyperlinks = true; + break; + case 'cache': + this.hyperlinks = hyperlinks = {}; + break; + default: + break; + } + if (!emitSheet && !emitHyperlinks && !hyperlinks) { + return; + } + + // references + const { + sharedStrings, + styles, + properties + } = this.workbook; + + // xml position + let inCols = false; + let inRows = false; + let inHyperlinks = false; + + // parse state + let cols = null; + let row = null; + let c = null; + let current = null; + for await (const events of parseSax(iterator)) { + const worksheetEvents = []; + for (const { + eventType, + value + } of events) { + if (eventType === 'opentag') { + const node = value; + if (emitSheet) { + switch (node.name) { + case 'cols': + inCols = true; + cols = []; + break; + case 'sheetData': + inRows = true; + break; + case 'col': + if (inCols) { + cols.push({ + min: parseInt(node.attributes.min, 10), + max: parseInt(node.attributes.max, 10), + width: parseFloat(node.attributes.width), + styleId: parseInt(node.attributes.style || '0', 10) + }); + } + break; + case 'row': + if (inRows) { + const r = parseInt(node.attributes.r, 10); + row = new Row(this, r); + if (node.attributes.ht) { + row.height = parseFloat(node.attributes.ht); + } + if (node.attributes.s) { + const styleId = parseInt(node.attributes.s, 10); + const style = styles.getStyleModel(styleId); + if (style) { + row.style = style; + } + } + } + break; + case 'c': + if (row) { + c = { + ref: node.attributes.r, + s: parseInt(node.attributes.s, 10), + t: node.attributes.t + }; + } + break; + case 'f': + if (c) { + current = c.f = { + text: '' + }; + } + break; + case 'v': + if (c) { + current = c.v = { + text: '' + }; + } + break; + case 'is': + case 't': + if (c) { + current = c.v = { + text: '' + }; + } + break; + case 'mergeCell': + break; + default: + break; + } + } + + // ================================================================= + // + if (emitHyperlinks || hyperlinks) { + switch (node.name) { + case 'hyperlinks': + inHyperlinks = true; + break; + case 'hyperlink': + if (inHyperlinks) { + const hyperlink = { + ref: node.attributes.ref, + rId: node.attributes['r:id'] + }; + if (emitHyperlinks) { + worksheetEvents.push({ + eventType: 'hyperlink', + value: hyperlink + }); + } else { + hyperlinks[hyperlink.ref] = hyperlink; + } + } + break; + default: + break; + } + } + } else if (eventType === 'text') { + // only text data is for sheet values + if (emitSheet) { + if (current) { + current.text += value; + } + } + } else if (eventType === 'closetag') { + const node = value; + if (emitSheet) { + switch (node.name) { + case 'cols': + inCols = false; + this._columns = Column.fromModel(cols); + break; + case 'sheetData': + inRows = false; + break; + case 'row': + this._dimensions.expandRow(row); + worksheetEvents.push({ + eventType: 'row', + value: row + }); + row = null; + break; + case 'c': + if (row && c) { + const address = colCache.decodeAddress(c.ref); + const cell = row.getCell(address.col); + if (c.s) { + const style = styles.getStyleModel(c.s); + if (style) { + cell.style = style; + } + } + if (c.f) { + const cellValue = { + formula: c.f.text + }; + if (c.v) { + if (c.t === 'str') { + cellValue.result = utils.xmlDecode(c.v.text); + } else { + cellValue.result = parseFloat(c.v.text); + } + } + cell.value = cellValue; + } else if (c.v) { + switch (c.t) { + case 's': + { + const index = parseInt(c.v.text, 10); + if (sharedStrings) { + cell.value = sharedStrings[index]; + } else { + cell.value = { + sharedString: index + }; + } + break; + } + case 'inlineStr': + case 'str': + cell.value = utils.xmlDecode(c.v.text); + break; + case 'e': + cell.value = { + error: c.v.text + }; + break; + case 'b': + cell.value = parseInt(c.v.text, 10) !== 0; + break; + default: + if (utils.isDateFmt(cell.numFmt)) { + cell.value = utils.excelToDate(parseFloat(c.v.text), properties.model && properties.model.date1904); + } else { + cell.value = parseFloat(c.v.text); + } + break; + } + } + if (hyperlinks) { + const hyperlink = hyperlinks[c.ref]; + if (hyperlink) { + cell.text = cell.value; + cell.value = undefined; + cell.hyperlink = hyperlink; + } + } + c = null; + } + break; + default: + break; + } + } + if (emitHyperlinks || hyperlinks) { + switch (node.name) { + case 'hyperlinks': + inHyperlinks = false; + break; + default: + break; + } + } + } + } + if (worksheetEvents.length > 0) { + yield worksheetEvents; + } + } + } +} +module.exports = WorksheetReader; +//# sourceMappingURL=worksheet-reader.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js.map b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1592788424f64447e0a01bec41a72763cfabc54a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js.map @@ -0,0 +1 @@ +{"version":3,"file":"worksheet-reader.js","names":["EventEmitter","require","parseSax","_","utils","colCache","Dimensions","Row","Column","WorksheetReader","constructor","_ref","workbook","id","iterator","options","name","_columns","_keys","_dimensions","destroy","Error","dimensions","columns","getColumn","c","col","l2n","length","n","push","getColumnKey","key","setColumnKey","value","deleteColumnKey","eachColumnKey","f","each","read","events","parse","eventType","emit","error","Symbol","asyncIterator","emitSheet","emitHyperlinks","hyperlinks","worksheets","sharedStrings","styles","properties","inCols","inRows","inHyperlinks","cols","row","current","worksheetEvents","node","min","parseInt","attributes","max","width","parseFloat","styleId","style","r","ht","height","s","getStyleModel","ref","t","text","v","hyperlink","rId","fromModel","expandRow","address","decodeAddress","cell","getCell","cellValue","formula","result","xmlDecode","index","sharedString","isDateFmt","numFmt","excelToDate","model","date1904","undefined","module","exports"],"sources":["../../../../lib/stream/xlsx/worksheet-reader.js"],"sourcesContent":["const {EventEmitter} = require('events');\nconst parseSax = require('../../utils/parse-sax');\n\nconst _ = require('../../utils/under-dash');\nconst utils = require('../../utils/utils');\nconst colCache = require('../../utils/col-cache');\nconst Dimensions = require('../../doc/range');\n\nconst Row = require('../../doc/row');\nconst Column = require('../../doc/column');\n\nclass WorksheetReader extends EventEmitter {\n constructor({workbook, id, iterator, options}) {\n super();\n\n this.workbook = workbook;\n this.id = id;\n this.iterator = iterator;\n this.options = options || {};\n\n // and a name\n this.name = `Sheet${this.id}`;\n\n // column definitions\n this._columns = null;\n this._keys = {};\n\n // keep a record of dimensions\n this._dimensions = new Dimensions();\n }\n\n // destroy - not a valid operation for a streaming writer\n // even though some streamers might be able to, it's a bad idea.\n destroy() {\n throw new Error('Invalid Operation: destroy');\n }\n\n // return the current dimensions of the writer\n get dimensions() {\n return this._dimensions;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\n }\n\n // get a single column by col number. If it doesn't exist, it and any gaps before it\n // are created.\n getColumn(c) {\n if (typeof c === 'string') {\n // if it matches a key'd column, return that\n const col = this._keys[c];\n if (col) {\n return col;\n }\n\n // otherise, assume letter\n c = colCache.l2n(c);\n }\n if (!this._columns) {\n this._columns = [];\n }\n if (c > this._columns.length) {\n let n = this._columns.length + 1;\n while (n <= c) {\n this._columns.push(new Column(this, n++));\n }\n }\n return this._columns[c - 1];\n }\n\n getColumnKey(key) {\n return this._keys[key];\n }\n\n setColumnKey(key, value) {\n this._keys[key] = value;\n }\n\n deleteColumnKey(key) {\n delete this._keys[key];\n }\n\n eachColumnKey(f) {\n _.each(this._keys, f);\n }\n\n async read() {\n try {\n for await (const events of this.parse()) {\n for (const {eventType, value} of events) {\n this.emit(eventType, value);\n }\n }\n this.emit('finished');\n } catch (error) {\n this.emit('error', error);\n }\n }\n\n async *[Symbol.asyncIterator]() {\n for await (const events of this.parse()) {\n for (const {eventType, value} of events) {\n if (eventType === 'row') {\n yield value;\n }\n }\n }\n }\n\n async *parse() {\n const {iterator, options} = this;\n let emitSheet = false;\n let emitHyperlinks = false;\n let hyperlinks = null;\n switch (options.worksheets) {\n case 'emit':\n emitSheet = true;\n break;\n case 'prep':\n break;\n default:\n break;\n }\n switch (options.hyperlinks) {\n case 'emit':\n emitHyperlinks = true;\n break;\n case 'cache':\n this.hyperlinks = hyperlinks = {};\n break;\n default:\n break;\n }\n if (!emitSheet && !emitHyperlinks && !hyperlinks) {\n return;\n }\n\n // references\n const {sharedStrings, styles, properties} = this.workbook;\n\n // xml position\n let inCols = false;\n let inRows = false;\n let inHyperlinks = false;\n\n // parse state\n let cols = null;\n let row = null;\n let c = null;\n let current = null;\n for await (const events of parseSax(iterator)) {\n const worksheetEvents = [];\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n const node = value;\n if (emitSheet) {\n switch (node.name) {\n case 'cols':\n inCols = true;\n cols = [];\n break;\n case 'sheetData':\n inRows = true;\n break;\n\n case 'col':\n if (inCols) {\n cols.push({\n min: parseInt(node.attributes.min, 10),\n max: parseInt(node.attributes.max, 10),\n width: parseFloat(node.attributes.width),\n styleId: parseInt(node.attributes.style || '0', 10),\n });\n }\n break;\n\n case 'row':\n if (inRows) {\n const r = parseInt(node.attributes.r, 10);\n row = new Row(this, r);\n if (node.attributes.ht) {\n row.height = parseFloat(node.attributes.ht);\n }\n if (node.attributes.s) {\n const styleId = parseInt(node.attributes.s, 10);\n const style = styles.getStyleModel(styleId);\n if (style) {\n row.style = style;\n }\n }\n }\n break;\n case 'c':\n if (row) {\n c = {\n ref: node.attributes.r,\n s: parseInt(node.attributes.s, 10),\n t: node.attributes.t,\n };\n }\n break;\n case 'f':\n if (c) {\n current = c.f = {text: ''};\n }\n break;\n case 'v':\n if (c) {\n current = c.v = {text: ''};\n }\n break;\n case 'is':\n case 't':\n if (c) {\n current = c.v = {text: ''};\n }\n break;\n case 'mergeCell':\n break;\n default:\n break;\n }\n }\n\n // =================================================================\n //\n if (emitHyperlinks || hyperlinks) {\n switch (node.name) {\n case 'hyperlinks':\n inHyperlinks = true;\n break;\n case 'hyperlink':\n if (inHyperlinks) {\n const hyperlink = {\n ref: node.attributes.ref,\n rId: node.attributes['r:id'],\n };\n if (emitHyperlinks) {\n worksheetEvents.push({eventType: 'hyperlink', value: hyperlink});\n } else {\n hyperlinks[hyperlink.ref] = hyperlink;\n }\n }\n break;\n default:\n break;\n }\n }\n } else if (eventType === 'text') {\n // only text data is for sheet values\n if (emitSheet) {\n if (current) {\n current.text += value;\n }\n }\n } else if (eventType === 'closetag') {\n const node = value;\n if (emitSheet) {\n switch (node.name) {\n case 'cols':\n inCols = false;\n this._columns = Column.fromModel(cols);\n break;\n case 'sheetData':\n inRows = false;\n break;\n\n case 'row':\n this._dimensions.expandRow(row);\n worksheetEvents.push({eventType: 'row', value: row});\n row = null;\n break;\n\n case 'c':\n if (row && c) {\n const address = colCache.decodeAddress(c.ref);\n const cell = row.getCell(address.col);\n if (c.s) {\n const style = styles.getStyleModel(c.s);\n if (style) {\n cell.style = style;\n }\n }\n\n if (c.f) {\n const cellValue = {\n formula: c.f.text,\n };\n if (c.v) {\n if (c.t === 'str') {\n cellValue.result = utils.xmlDecode(c.v.text);\n } else {\n cellValue.result = parseFloat(c.v.text);\n }\n }\n cell.value = cellValue;\n } else if (c.v) {\n switch (c.t) {\n case 's': {\n const index = parseInt(c.v.text, 10);\n if (sharedStrings) {\n cell.value = sharedStrings[index];\n } else {\n cell.value = {\n sharedString: index,\n };\n }\n break;\n }\n\n case 'inlineStr':\n case 'str':\n cell.value = utils.xmlDecode(c.v.text);\n break;\n\n case 'e':\n cell.value = {error: c.v.text};\n break;\n\n case 'b':\n cell.value = parseInt(c.v.text, 10) !== 0;\n break;\n\n default:\n if (utils.isDateFmt(cell.numFmt)) {\n cell.value = utils.excelToDate(\n parseFloat(c.v.text),\n properties.model && properties.model.date1904\n );\n } else {\n cell.value = parseFloat(c.v.text);\n }\n break;\n }\n }\n if (hyperlinks) {\n const hyperlink = hyperlinks[c.ref];\n if (hyperlink) {\n cell.text = cell.value;\n cell.value = undefined;\n cell.hyperlink = hyperlink;\n }\n }\n c = null;\n }\n break;\n default:\n break;\n }\n }\n if (emitHyperlinks || hyperlinks) {\n switch (node.name) {\n case 'hyperlinks':\n inHyperlinks = false;\n break;\n default:\n break;\n }\n }\n }\n }\n if (worksheetEvents.length > 0) {\n yield worksheetEvents;\n }\n }\n }\n}\n\nmodule.exports = WorksheetReader;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js new file mode 100644 index 0000000000000000000000000000000000000000..6592f0a2305d1ee950be3b239dbd4fb66e040bf7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js @@ -0,0 +1,652 @@ +"use strict"; + +const _ = require('../../utils/under-dash'); +const RelType = require('../../xlsx/rel-type'); +const colCache = require('../../utils/col-cache'); +const Encryptor = require('../../utils/encryptor'); +const Dimensions = require('../../doc/range'); +const StringBuf = require('../../utils/string-buf'); +const Row = require('../../doc/row'); +const Column = require('../../doc/column'); +const SheetRelsWriter = require('./sheet-rels-writer'); +const SheetCommentsWriter = require('./sheet-comments-writer'); +const DataValidations = require('../../doc/data-validations'); +const xmlBuffer = new StringBuf(); + +// ============================================================================================ +// Xforms +const ListXform = require('../../xlsx/xform/list-xform'); +const DataValidationsXform = require('../../xlsx/xform/sheet/data-validations-xform'); +const SheetPropertiesXform = require('../../xlsx/xform/sheet/sheet-properties-xform'); +const SheetFormatPropertiesXform = require('../../xlsx/xform/sheet/sheet-format-properties-xform'); +const ColXform = require('../../xlsx/xform/sheet/col-xform'); +const RowXform = require('../../xlsx/xform/sheet/row-xform'); +const HyperlinkXform = require('../../xlsx/xform/sheet/hyperlink-xform'); +const SheetViewXform = require('../../xlsx/xform/sheet/sheet-view-xform'); +const SheetProtectionXform = require('../../xlsx/xform/sheet/sheet-protection-xform'); +const PageMarginsXform = require('../../xlsx/xform/sheet/page-margins-xform'); +const PageSetupXform = require('../../xlsx/xform/sheet/page-setup-xform'); +const AutoFilterXform = require('../../xlsx/xform/sheet/auto-filter-xform'); +const PictureXform = require('../../xlsx/xform/sheet/picture-xform'); +const ConditionalFormattingsXform = require('../../xlsx/xform/sheet/cf/conditional-formattings-xform'); +const HeaderFooterXform = require('../../xlsx/xform/sheet/header-footer-xform'); +const RowBreaksXform = require('../../xlsx/xform/sheet/row-breaks-xform'); + +// since prepare and render are functional, we can use singletons +const xform = { + dataValidations: new DataValidationsXform(), + sheetProperties: new SheetPropertiesXform(), + sheetFormatProperties: new SheetFormatPropertiesXform(), + columns: new ListXform({ + tag: 'cols', + length: false, + childXform: new ColXform() + }), + row: new RowXform(), + hyperlinks: new ListXform({ + tag: 'hyperlinks', + length: false, + childXform: new HyperlinkXform() + }), + sheetViews: new ListXform({ + tag: 'sheetViews', + length: false, + childXform: new SheetViewXform() + }), + sheetProtection: new SheetProtectionXform(), + pageMargins: new PageMarginsXform(), + pageSeteup: new PageSetupXform(), + autoFilter: new AutoFilterXform(), + picture: new PictureXform(), + conditionalFormattings: new ConditionalFormattingsXform(), + headerFooter: new HeaderFooterXform(), + rowBreaks: new RowBreaksXform() +}; + +// ============================================================================================ + +class WorksheetWriter { + constructor(options) { + // in a workbook, each sheet will have a number + this.id = options.id; + + // and a name + this.name = options.name || `Sheet${this.id}`; + + // add a state + this.state = options.state || 'visible'; + + // rows are stored here while they need to be worked on. + // when they are committed, they will be deleted. + this._rows = []; + + // column definitions + this._columns = null; + + // column keys (addRow convenience): key ==> this._columns index + this._keys = {}; + + // keep a record of all row and column pageBreaks + this._merges = []; + this._merges.add = function () {}; // ignore cell instruction + + // keep record of all hyperlinks + this._sheetRelsWriter = new SheetRelsWriter(options); + this._sheetCommentsWriter = new SheetCommentsWriter(this, this._sheetRelsWriter, options); + + // keep a record of dimensions + this._dimensions = new Dimensions(); + + // first uncommitted row + this._rowZero = 1; + + // committed flag + this.committed = false; + + // for data validations + this.dataValidations = new DataValidations(); + + // for sharing formulae + this._formulae = {}; + this._siFormulae = 0; + + // keep a record of conditionalFormattings + this.conditionalFormatting = []; + + // keep a record of all row and column pageBreaks + this.rowBreaks = []; + + // for default row height, outline levels, etc + this.properties = Object.assign({}, { + defaultRowHeight: 15, + dyDescent: 55, + outlineLevelCol: 0, + outlineLevelRow: 0 + }, options.properties); + this.headerFooter = Object.assign({}, { + differentFirst: false, + differentOddEven: false, + oddHeader: null, + oddFooter: null, + evenHeader: null, + evenFooter: null, + firstHeader: null, + firstFooter: null + }, options.headerFooter); + + // for all things printing + this.pageSetup = Object.assign({}, { + margins: { + left: 0.7, + right: 0.7, + top: 0.75, + bottom: 0.75, + header: 0.3, + footer: 0.3 + }, + orientation: 'portrait', + horizontalDpi: 4294967295, + verticalDpi: 4294967295, + fitToPage: !!(options.pageSetup && (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) && !options.pageSetup.scale), + pageOrder: 'downThenOver', + blackAndWhite: false, + draft: false, + cellComments: 'None', + errors: 'displayed', + scale: 100, + fitToWidth: 1, + fitToHeight: 1, + paperSize: undefined, + showRowColHeaders: false, + showGridLines: false, + horizontalCentered: false, + verticalCentered: false, + rowBreaks: null, + colBreaks: null + }, options.pageSetup); + + // using shared strings creates a smaller xlsx file but may use more memory + this.useSharedStrings = options.useSharedStrings || false; + this._workbook = options.workbook; + this.hasComments = false; + + // views + this._views = options.views || []; + + // auto filter + this.autoFilter = options.autoFilter || null; + this._media = []; + + // worksheet protection + this.sheetProtection = null; + + // start writing to stream now + this._writeOpenWorksheet(); + this.startedData = false; + } + get workbook() { + return this._workbook; + } + get stream() { + if (!this._stream) { + // eslint-disable-next-line no-underscore-dangle + this._stream = this._workbook._openStream(`/xl/worksheets/sheet${this.id}.xml`); + + // pause stream to prevent 'data' events + this._stream.pause(); + } + return this._stream; + } + + // destroy - not a valid operation for a streaming writer + // even though some streamers might be able to, it's a bad idea. + destroy() { + throw new Error('Invalid Operation: destroy'); + } + commit() { + if (this.committed) { + return; + } + // commit all rows + this._rows.forEach(cRow => { + if (cRow) { + // write the row to the stream + this._writeRow(cRow); + } + }); + + // we _cannot_ accept new rows from now on + this._rows = null; + if (!this.startedData) { + this._writeOpenSheetData(); + } + this._writeCloseSheetData(); + this._writeAutoFilter(); + this._writeMergeCells(); + + // for some reason, Excel can't handle dimensions at the bottom of the file + // this._writeDimensions(); + + this._writeHyperlinks(); + this._writeConditionalFormatting(); + this._writeDataValidations(); + this._writeSheetProtection(); + this._writePageMargins(); + this._writePageSetup(); + this._writeBackground(); + this._writeHeaderFooter(); + this._writeRowBreaks(); + + // Legacy Data tag for comments + this._writeLegacyData(); + this._writeCloseWorksheet(); + // signal end of stream to workbook + this.stream.end(); + this._sheetCommentsWriter.commit(); + // also commit the hyperlinks if any + this._sheetRelsWriter.commit(); + this.committed = true; + } + + // return the current dimensions of the writer + get dimensions() { + return this._dimensions; + } + get views() { + return this._views; + } + + // ========================================================================= + // Columns + + // get the current columns array. + get columns() { + return this._columns; + } + + // set the columns from an array of column definitions. + // Note: any headers defined will overwrite existing values. + set columns(value) { + // calculate max header row count + this._headerRowCount = value.reduce((pv, cv) => { + const headerCount = cv.header && 1 || cv.headers && cv.headers.length || 0; + return Math.max(pv, headerCount); + }, 0); + + // construct Column objects + let count = 1; + const columns = this._columns = []; + value.forEach(defn => { + const column = new Column(this, count++, false); + columns.push(column); + column.defn = defn; + }); + } + getColumnKey(key) { + return this._keys[key]; + } + setColumnKey(key, value) { + this._keys[key] = value; + } + deleteColumnKey(key) { + delete this._keys[key]; + } + eachColumnKey(f) { + _.each(this._keys, f); + } + + // get a single column by col number. If it doesn't exist, it and any gaps before it + // are created. + getColumn(c) { + if (typeof c === 'string') { + // if it matches a key'd column, return that + const col = this._keys[c]; + if (col) return col; + + // otherwise, assume letter + c = colCache.l2n(c); + } + if (!this._columns) { + this._columns = []; + } + if (c > this._columns.length) { + let n = this._columns.length + 1; + while (n <= c) { + this._columns.push(new Column(this, n++)); + } + } + return this._columns[c - 1]; + } + + // ========================================================================= + // Rows + get _nextRow() { + return this._rowZero + this._rows.length; + } + + // iterate over every uncommitted row in the worksheet, including maybe empty rows + eachRow(options, iteratee) { + if (!iteratee) { + iteratee = options; + options = undefined; + } + if (options && options.includeEmpty) { + const n = this._nextRow; + for (let i = this._rowZero; i < n; i++) { + iteratee(this.getRow(i), i); + } + } else { + this._rows.forEach(row => { + if (row.hasValues) { + iteratee(row, row.number); + } + }); + } + } + _commitRow(cRow) { + // since rows must be written in order, we commit all rows up till and including cRow + let found = false; + while (this._rows.length && !found) { + const row = this._rows.shift(); + this._rowZero++; + if (row) { + this._writeRow(row); + found = row.number === cRow.number; + this._rowZero = row.number + 1; + } + } + } + get lastRow() { + // returns last uncommitted row + if (this._rows.length) { + return this._rows[this._rows.length - 1]; + } + return undefined; + } + + // find a row (if exists) by row number + findRow(rowNumber) { + const index = rowNumber - this._rowZero; + return this._rows[index]; + } + getRow(rowNumber) { + const index = rowNumber - this._rowZero; + + // may fail if rows have been comitted + if (index < 0) { + throw new Error('Out of bounds: this row has been committed'); + } + let row = this._rows[index]; + if (!row) { + this._rows[index] = row = new Row(this, rowNumber); + } + return row; + } + addRow(value) { + const row = new Row(this, this._nextRow); + this._rows[row.number - this._rowZero] = row; + row.values = value; + return row; + } + + // ================================================================================ + // Cells + + // returns the cell at [r,c] or address given by r. If not found, return undefined + findCell(r, c) { + const address = colCache.getAddress(r, c); + const row = this.findRow(address.row); + return row ? row.findCell(address.column) : undefined; + } + + // return the cell at [r,c] or address given by r. If not found, create a new one. + getCell(r, c) { + const address = colCache.getAddress(r, c); + const row = this.getRow(address.row); + return row.getCellEx(address); + } + mergeCells() { + for (var _len = arguments.length, cells = new Array(_len), _key = 0; _key < _len; _key++) { + cells[_key] = arguments[_key]; + } + // may fail if rows have been comitted + const dimensions = new Dimensions(cells); + + // check cells aren't already merged + this._merges.forEach(merge => { + if (merge.intersects(dimensions)) { + throw new Error('Cannot merge already merged cells'); + } + }); + + // apply merge + const master = this.getCell(dimensions.top, dimensions.left); + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + for (let j = dimensions.left; j <= dimensions.right; j++) { + if (i > dimensions.top || j > dimensions.left) { + this.getCell(i, j).merge(master); + } + } + } + + // index merge + this._merges.push(dimensions); + } + + // =========================================================================== + // Conditional Formatting + addConditionalFormatting(cf) { + this.conditionalFormatting.push(cf); + } + removeConditionalFormatting(filter) { + if (typeof filter === 'number') { + this.conditionalFormatting.splice(filter, 1); + } else if (filter instanceof Function) { + this.conditionalFormatting = this.conditionalFormatting.filter(filter); + } else { + this.conditionalFormatting = []; + } + } + + // ========================================================================= + + addBackgroundImage(imageId) { + this._background = { + imageId + }; + } + getBackgroundImageId() { + return this._background && this._background.imageId; + } + + // ========================================================================= + // Worksheet Protection + protect(password, options) { + // TODO: make this function truly async + // perhaps marshal to worker thread or something + return new Promise(resolve => { + this.sheetProtection = { + sheet: true + }; + if (options && 'spinCount' in options) { + // force spinCount to be integer >= 0 + options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000; + } + if (password) { + this.sheetProtection.algorithmName = 'SHA-512'; + this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64'); + this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount + this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(password, 'SHA512', this.sheetProtection.saltValue, this.sheetProtection.spinCount); + } + if (options) { + this.sheetProtection = Object.assign(this.sheetProtection, options); + if (!password && 'spinCount' in options) { + delete this.sheetProtection.spinCount; + } + } + resolve(); + }); + } + unprotect() { + this.sheetProtection = null; + } + + // ================================================================================ + + _write(text) { + xmlBuffer.reset(); + xmlBuffer.addText(text); + this.stream.write(xmlBuffer); + } + _writeSheetProperties(xmlBuf, properties, pageSetup) { + const sheetPropertiesModel = { + outlineProperties: properties && properties.outlineProperties, + tabColor: properties && properties.tabColor, + pageSetup: pageSetup && pageSetup.fitToPage ? { + fitToPage: pageSetup.fitToPage + } : undefined + }; + xmlBuf.addText(xform.sheetProperties.toXml(sheetPropertiesModel)); + } + _writeSheetFormatProperties(xmlBuf, properties) { + const sheetFormatPropertiesModel = properties ? { + defaultRowHeight: properties.defaultRowHeight, + dyDescent: properties.dyDescent, + outlineLevelCol: properties.outlineLevelCol, + outlineLevelRow: properties.outlineLevelRow + } : undefined; + if (properties.defaultColWidth) { + sheetFormatPropertiesModel.defaultColWidth = properties.defaultColWidth; + } + xmlBuf.addText(xform.sheetFormatProperties.toXml(sheetFormatPropertiesModel)); + } + _writeOpenWorksheet() { + xmlBuffer.reset(); + xmlBuffer.addText(''); + xmlBuffer.addText(''); + this._writeSheetProperties(xmlBuffer, this.properties, this.pageSetup); + xmlBuffer.addText(xform.sheetViews.toXml(this.views)); + this._writeSheetFormatProperties(xmlBuffer, this.properties); + this.stream.write(xmlBuffer); + } + _writeColumns() { + const cols = Column.toModel(this.columns); + if (cols) { + xform.columns.prepare(cols, { + styles: this._workbook.styles + }); + this.stream.write(xform.columns.toXml(cols)); + } + } + _writeOpenSheetData() { + this._write(''); + } + _writeRow(row) { + if (!this.startedData) { + this._writeColumns(); + this._writeOpenSheetData(); + this.startedData = true; + } + if (row.hasValues || row.height) { + const { + model + } = row; + const options = { + styles: this._workbook.styles, + sharedStrings: this.useSharedStrings ? this._workbook.sharedStrings : undefined, + hyperlinks: this._sheetRelsWriter.hyperlinksProxy, + merges: this._merges, + formulae: this._formulae, + siFormulae: this._siFormulae, + comments: [] + }; + xform.row.prepare(model, options); + this.stream.write(xform.row.toXml(model)); + if (options.comments.length) { + this.hasComments = true; + this._sheetCommentsWriter.addComments(options.comments); + } + } + } + _writeCloseSheetData() { + this._write(''); + } + _writeMergeCells() { + if (this._merges.length) { + xmlBuffer.reset(); + xmlBuffer.addText(``); + this._merges.forEach(merge => { + xmlBuffer.addText(``); + }); + xmlBuffer.addText(''); + this.stream.write(xmlBuffer); + } + } + _writeHyperlinks() { + // eslint-disable-next-line no-underscore-dangle + this.stream.write(xform.hyperlinks.toXml(this._sheetRelsWriter._hyperlinks)); + } + _writeConditionalFormatting() { + const options = { + styles: this._workbook.styles + }; + xform.conditionalFormattings.prepare(this.conditionalFormatting, options); + this.stream.write(xform.conditionalFormattings.toXml(this.conditionalFormatting)); + } + _writeRowBreaks() { + this.stream.write(xform.rowBreaks.toXml(this.rowBreaks)); + } + _writeDataValidations() { + this.stream.write(xform.dataValidations.toXml(this.dataValidations.model)); + } + _writeSheetProtection() { + this.stream.write(xform.sheetProtection.toXml(this.sheetProtection)); + } + _writePageMargins() { + this.stream.write(xform.pageMargins.toXml(this.pageSetup.margins)); + } + _writePageSetup() { + this.stream.write(xform.pageSeteup.toXml(this.pageSetup)); + } + _writeHeaderFooter() { + this.stream.write(xform.headerFooter.toXml(this.headerFooter)); + } + _writeAutoFilter() { + this.stream.write(xform.autoFilter.toXml(this.autoFilter)); + } + _writeBackground() { + if (this._background) { + if (this._background.imageId !== undefined) { + const image = this._workbook.getImage(this._background.imageId); + const pictureId = this._sheetRelsWriter.addMedia({ + Target: `../media/${image.name}`, + Type: RelType.Image + }); + this._background = { + ...this._background, + rId: pictureId + }; + } + this.stream.write(xform.picture.toXml({ + rId: this._background.rId + })); + } + } + _writeLegacyData() { + if (this.hasComments) { + xmlBuffer.reset(); + xmlBuffer.addText(``); + this.stream.write(xmlBuffer); + } + } + _writeDimensions() { + // for some reason, Excel can't handle dimensions at the bottom of the file + // and we don't know the dimensions until the commit, so don't write them. + // this._write(''); + } + _writeCloseWorksheet() { + this._write(''); + } +} +module.exports = WorksheetWriter; +//# sourceMappingURL=worksheet-writer.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js.map b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js.map new file mode 100644 index 0000000000000000000000000000000000000000..20205389c730195a039cbe76295784fe20373c4c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"worksheet-writer.js","names":["_","require","RelType","colCache","Encryptor","Dimensions","StringBuf","Row","Column","SheetRelsWriter","SheetCommentsWriter","DataValidations","xmlBuffer","ListXform","DataValidationsXform","SheetPropertiesXform","SheetFormatPropertiesXform","ColXform","RowXform","HyperlinkXform","SheetViewXform","SheetProtectionXform","PageMarginsXform","PageSetupXform","AutoFilterXform","PictureXform","ConditionalFormattingsXform","HeaderFooterXform","RowBreaksXform","xform","dataValidations","sheetProperties","sheetFormatProperties","columns","tag","length","childXform","row","hyperlinks","sheetViews","sheetProtection","pageMargins","pageSeteup","autoFilter","picture","conditionalFormattings","headerFooter","rowBreaks","WorksheetWriter","constructor","options","id","name","state","_rows","_columns","_keys","_merges","add","_sheetRelsWriter","_sheetCommentsWriter","_dimensions","_rowZero","committed","_formulae","_siFormulae","conditionalFormatting","properties","Object","assign","defaultRowHeight","dyDescent","outlineLevelCol","outlineLevelRow","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","pageSetup","margins","left","right","top","bottom","header","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","undefined","showRowColHeaders","showGridLines","horizontalCentered","verticalCentered","colBreaks","useSharedStrings","_workbook","workbook","hasComments","_views","views","_media","_writeOpenWorksheet","startedData","stream","_stream","_openStream","pause","destroy","Error","commit","forEach","cRow","_writeRow","_writeOpenSheetData","_writeCloseSheetData","_writeAutoFilter","_writeMergeCells","_writeHyperlinks","_writeConditionalFormatting","_writeDataValidations","_writeSheetProtection","_writePageMargins","_writePageSetup","_writeBackground","_writeHeaderFooter","_writeRowBreaks","_writeLegacyData","_writeCloseWorksheet","end","dimensions","value","_headerRowCount","reduce","pv","cv","headerCount","headers","Math","max","count","defn","column","push","getColumnKey","key","setColumnKey","deleteColumnKey","eachColumnKey","f","each","getColumn","c","col","l2n","n","_nextRow","eachRow","iteratee","includeEmpty","i","getRow","hasValues","number","_commitRow","found","shift","lastRow","findRow","rowNumber","index","addRow","values","findCell","r","address","getAddress","getCell","getCellEx","mergeCells","_len","arguments","cells","Array","_key","merge","intersects","master","j","addConditionalFormatting","cf","removeConditionalFormatting","filter","splice","Function","addBackgroundImage","imageId","_background","getBackgroundImageId","protect","password","Promise","resolve","sheet","spinCount","Number","isFinite","round","algorithmName","saltValue","randomBytes","toString","hashValue","convertPasswordToHash","unprotect","_write","text","reset","addText","write","_writeSheetProperties","xmlBuf","sheetPropertiesModel","outlineProperties","tabColor","toXml","_writeSheetFormatProperties","sheetFormatPropertiesModel","defaultColWidth","_writeColumns","cols","toModel","prepare","styles","height","model","sharedStrings","hyperlinksProxy","merges","formulae","siFormulae","comments","addComments","_hyperlinks","image","getImage","pictureId","addMedia","Target","Type","Image","rId","vmlRelId","_writeDimensions","module","exports"],"sources":["../../../../lib/stream/xlsx/worksheet-writer.js"],"sourcesContent":["const _ = require('../../utils/under-dash');\n\nconst RelType = require('../../xlsx/rel-type');\n\nconst colCache = require('../../utils/col-cache');\nconst Encryptor = require('../../utils/encryptor');\nconst Dimensions = require('../../doc/range');\nconst StringBuf = require('../../utils/string-buf');\n\nconst Row = require('../../doc/row');\nconst Column = require('../../doc/column');\n\nconst SheetRelsWriter = require('./sheet-rels-writer');\nconst SheetCommentsWriter = require('./sheet-comments-writer');\nconst DataValidations = require('../../doc/data-validations');\n\nconst xmlBuffer = new StringBuf();\n\n// ============================================================================================\n// Xforms\nconst ListXform = require('../../xlsx/xform/list-xform');\nconst DataValidationsXform = require('../../xlsx/xform/sheet/data-validations-xform');\nconst SheetPropertiesXform = require('../../xlsx/xform/sheet/sheet-properties-xform');\nconst SheetFormatPropertiesXform = require('../../xlsx/xform/sheet/sheet-format-properties-xform');\nconst ColXform = require('../../xlsx/xform/sheet/col-xform');\nconst RowXform = require('../../xlsx/xform/sheet/row-xform');\nconst HyperlinkXform = require('../../xlsx/xform/sheet/hyperlink-xform');\nconst SheetViewXform = require('../../xlsx/xform/sheet/sheet-view-xform');\nconst SheetProtectionXform = require('../../xlsx/xform/sheet/sheet-protection-xform');\nconst PageMarginsXform = require('../../xlsx/xform/sheet/page-margins-xform');\nconst PageSetupXform = require('../../xlsx/xform/sheet/page-setup-xform');\nconst AutoFilterXform = require('../../xlsx/xform/sheet/auto-filter-xform');\nconst PictureXform = require('../../xlsx/xform/sheet/picture-xform');\nconst ConditionalFormattingsXform = require('../../xlsx/xform/sheet/cf/conditional-formattings-xform');\nconst HeaderFooterXform = require('../../xlsx/xform/sheet/header-footer-xform');\nconst RowBreaksXform = require('../../xlsx/xform/sheet/row-breaks-xform');\n\n// since prepare and render are functional, we can use singletons\nconst xform = {\n dataValidations: new DataValidationsXform(),\n sheetProperties: new SheetPropertiesXform(),\n sheetFormatProperties: new SheetFormatPropertiesXform(),\n columns: new ListXform({tag: 'cols', length: false, childXform: new ColXform()}),\n row: new RowXform(),\n hyperlinks: new ListXform({tag: 'hyperlinks', length: false, childXform: new HyperlinkXform()}),\n sheetViews: new ListXform({tag: 'sheetViews', length: false, childXform: new SheetViewXform()}),\n sheetProtection: new SheetProtectionXform(),\n pageMargins: new PageMarginsXform(),\n pageSeteup: new PageSetupXform(),\n autoFilter: new AutoFilterXform(),\n picture: new PictureXform(),\n conditionalFormattings: new ConditionalFormattingsXform(),\n headerFooter: new HeaderFooterXform(),\n rowBreaks: new RowBreaksXform(),\n};\n\n// ============================================================================================\n\nclass WorksheetWriter {\n constructor(options) {\n // in a workbook, each sheet will have a number\n this.id = options.id;\n\n // and a name\n this.name = options.name || `Sheet${this.id}`;\n\n // add a state\n this.state = options.state || 'visible';\n\n // rows are stored here while they need to be worked on.\n // when they are committed, they will be deleted.\n this._rows = [];\n\n // column definitions\n this._columns = null;\n\n // column keys (addRow convenience): key ==> this._columns index\n this._keys = {};\n\n // keep a record of all row and column pageBreaks\n this._merges = [];\n this._merges.add = function() {}; // ignore cell instruction\n\n // keep record of all hyperlinks\n this._sheetRelsWriter = new SheetRelsWriter(options);\n\n this._sheetCommentsWriter = new SheetCommentsWriter(this, this._sheetRelsWriter, options);\n\n // keep a record of dimensions\n this._dimensions = new Dimensions();\n\n // first uncommitted row\n this._rowZero = 1;\n\n // committed flag\n this.committed = false;\n\n // for data validations\n this.dataValidations = new DataValidations();\n\n // for sharing formulae\n this._formulae = {};\n this._siFormulae = 0;\n\n // keep a record of conditionalFormattings\n this.conditionalFormatting = [];\n\n // keep a record of all row and column pageBreaks\n this.rowBreaks = [];\n\n // for default row height, outline levels, etc\n this.properties = Object.assign(\n {},\n {\n defaultRowHeight: 15,\n dyDescent: 55,\n outlineLevelCol: 0,\n outlineLevelRow: 0,\n },\n options.properties\n );\n\n this.headerFooter = Object.assign(\n {},\n {\n differentFirst: false,\n differentOddEven: false,\n oddHeader: null,\n oddFooter: null,\n evenHeader: null,\n evenFooter: null,\n firstHeader: null,\n firstFooter: null,\n },\n options.headerFooter\n );\n\n // for all things printing\n this.pageSetup = Object.assign(\n {},\n {\n margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3},\n orientation: 'portrait',\n horizontalDpi: 4294967295,\n verticalDpi: 4294967295,\n fitToPage: !!(\n options.pageSetup &&\n (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) &&\n !options.pageSetup.scale\n ),\n pageOrder: 'downThenOver',\n blackAndWhite: false,\n draft: false,\n cellComments: 'None',\n errors: 'displayed',\n scale: 100,\n fitToWidth: 1,\n fitToHeight: 1,\n paperSize: undefined,\n showRowColHeaders: false,\n showGridLines: false,\n horizontalCentered: false,\n verticalCentered: false,\n rowBreaks: null,\n colBreaks: null,\n },\n options.pageSetup\n );\n\n // using shared strings creates a smaller xlsx file but may use more memory\n this.useSharedStrings = options.useSharedStrings || false;\n\n this._workbook = options.workbook;\n\n this.hasComments = false;\n\n // views\n this._views = options.views || [];\n\n // auto filter\n this.autoFilter = options.autoFilter || null;\n\n this._media = [];\n\n // worksheet protection\n this.sheetProtection = null;\n\n // start writing to stream now\n this._writeOpenWorksheet();\n\n this.startedData = false;\n }\n\n get workbook() {\n return this._workbook;\n }\n\n get stream() {\n if (!this._stream) {\n // eslint-disable-next-line no-underscore-dangle\n this._stream = this._workbook._openStream(`/xl/worksheets/sheet${this.id}.xml`);\n\n // pause stream to prevent 'data' events\n this._stream.pause();\n }\n return this._stream;\n }\n\n // destroy - not a valid operation for a streaming writer\n // even though some streamers might be able to, it's a bad idea.\n destroy() {\n throw new Error('Invalid Operation: destroy');\n }\n\n commit() {\n if (this.committed) {\n return;\n }\n // commit all rows\n this._rows.forEach(cRow => {\n if (cRow) {\n // write the row to the stream\n this._writeRow(cRow);\n }\n });\n\n // we _cannot_ accept new rows from now on\n this._rows = null;\n\n if (!this.startedData) {\n this._writeOpenSheetData();\n }\n this._writeCloseSheetData();\n this._writeAutoFilter();\n this._writeMergeCells();\n\n // for some reason, Excel can't handle dimensions at the bottom of the file\n // this._writeDimensions();\n\n this._writeHyperlinks();\n this._writeConditionalFormatting();\n this._writeDataValidations();\n this._writeSheetProtection();\n this._writePageMargins();\n this._writePageSetup();\n this._writeBackground();\n this._writeHeaderFooter();\n this._writeRowBreaks();\n\n // Legacy Data tag for comments\n this._writeLegacyData();\n\n this._writeCloseWorksheet();\n // signal end of stream to workbook\n this.stream.end();\n\n this._sheetCommentsWriter.commit();\n // also commit the hyperlinks if any\n this._sheetRelsWriter.commit();\n\n this.committed = true;\n }\n\n // return the current dimensions of the writer\n get dimensions() {\n return this._dimensions;\n }\n\n get views() {\n return this._views;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\n }\n\n // set the columns from an array of column definitions.\n // Note: any headers defined will overwrite existing values.\n set columns(value) {\n // calculate max header row count\n this._headerRowCount = value.reduce((pv, cv) => {\n const headerCount = (cv.header && 1) || (cv.headers && cv.headers.length) || 0;\n return Math.max(pv, headerCount);\n }, 0);\n\n // construct Column objects\n let count = 1;\n const columns = (this._columns = []);\n value.forEach(defn => {\n const column = new Column(this, count++, false);\n columns.push(column);\n column.defn = defn;\n });\n }\n\n getColumnKey(key) {\n return this._keys[key];\n }\n\n setColumnKey(key, value) {\n this._keys[key] = value;\n }\n\n deleteColumnKey(key) {\n delete this._keys[key];\n }\n\n eachColumnKey(f) {\n _.each(this._keys, f);\n }\n\n // get a single column by col number. If it doesn't exist, it and any gaps before it\n // are created.\n getColumn(c) {\n if (typeof c === 'string') {\n // if it matches a key'd column, return that\n const col = this._keys[c];\n if (col) return col;\n\n // otherwise, assume letter\n c = colCache.l2n(c);\n }\n if (!this._columns) {\n this._columns = [];\n }\n if (c > this._columns.length) {\n let n = this._columns.length + 1;\n while (n <= c) {\n this._columns.push(new Column(this, n++));\n }\n }\n return this._columns[c - 1];\n }\n\n // =========================================================================\n // Rows\n get _nextRow() {\n return this._rowZero + this._rows.length;\n }\n\n // iterate over every uncommitted row in the worksheet, including maybe empty rows\n eachRow(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = undefined;\n }\n if (options && options.includeEmpty) {\n const n = this._nextRow;\n for (let i = this._rowZero; i < n; i++) {\n iteratee(this.getRow(i), i);\n }\n } else {\n this._rows.forEach(row => {\n if (row.hasValues) {\n iteratee(row, row.number);\n }\n });\n }\n }\n\n _commitRow(cRow) {\n // since rows must be written in order, we commit all rows up till and including cRow\n let found = false;\n while (this._rows.length && !found) {\n const row = this._rows.shift();\n this._rowZero++;\n if (row) {\n this._writeRow(row);\n found = row.number === cRow.number;\n this._rowZero = row.number + 1;\n }\n }\n }\n\n get lastRow() {\n // returns last uncommitted row\n if (this._rows.length) {\n return this._rows[this._rows.length - 1];\n }\n return undefined;\n }\n\n // find a row (if exists) by row number\n findRow(rowNumber) {\n const index = rowNumber - this._rowZero;\n return this._rows[index];\n }\n\n getRow(rowNumber) {\n const index = rowNumber - this._rowZero;\n\n // may fail if rows have been comitted\n if (index < 0) {\n throw new Error('Out of bounds: this row has been committed');\n }\n let row = this._rows[index];\n if (!row) {\n this._rows[index] = row = new Row(this, rowNumber);\n }\n return row;\n }\n\n addRow(value) {\n const row = new Row(this, this._nextRow);\n this._rows[row.number - this._rowZero] = row;\n row.values = value;\n return row;\n }\n\n // ================================================================================\n // Cells\n\n // returns the cell at [r,c] or address given by r. If not found, return undefined\n findCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this.findRow(address.row);\n return row ? row.findCell(address.column) : undefined;\n }\n\n // return the cell at [r,c] or address given by r. If not found, create a new one.\n getCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this.getRow(address.row);\n return row.getCellEx(address);\n }\n\n mergeCells(...cells) {\n // may fail if rows have been comitted\n const dimensions = new Dimensions(cells);\n\n // check cells aren't already merged\n this._merges.forEach(merge => {\n if (merge.intersects(dimensions)) {\n throw new Error('Cannot merge already merged cells');\n }\n });\n\n // apply merge\n const master = this.getCell(dimensions.top, dimensions.left);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n if (i > dimensions.top || j > dimensions.left) {\n this.getCell(i, j).merge(master);\n }\n }\n }\n\n // index merge\n this._merges.push(dimensions);\n }\n\n // ===========================================================================\n // Conditional Formatting\n addConditionalFormatting(cf) {\n this.conditionalFormatting.push(cf);\n }\n\n removeConditionalFormatting(filter) {\n if (typeof filter === 'number') {\n this.conditionalFormatting.splice(filter, 1);\n } else if (filter instanceof Function) {\n this.conditionalFormatting = this.conditionalFormatting.filter(filter);\n } else {\n this.conditionalFormatting = [];\n }\n }\n\n // =========================================================================\n\n addBackgroundImage(imageId) {\n this._background = {\n imageId,\n };\n }\n\n getBackgroundImageId() {\n return this._background && this._background.imageId;\n }\n\n // =========================================================================\n // Worksheet Protection\n protect(password, options) {\n // TODO: make this function truly async\n // perhaps marshal to worker thread or something\n return new Promise(resolve => {\n this.sheetProtection = {\n sheet: true,\n };\n if (options && 'spinCount' in options) {\n // force spinCount to be integer >= 0\n options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;\n }\n if (password) {\n this.sheetProtection.algorithmName = 'SHA-512';\n this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');\n this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount\n this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(\n password,\n 'SHA512',\n this.sheetProtection.saltValue,\n this.sheetProtection.spinCount\n );\n }\n if (options) {\n this.sheetProtection = Object.assign(this.sheetProtection, options);\n if (!password && 'spinCount' in options) {\n delete this.sheetProtection.spinCount;\n }\n }\n resolve();\n });\n }\n\n unprotect() {\n this.sheetProtection = null;\n }\n\n // ================================================================================\n\n _write(text) {\n xmlBuffer.reset();\n xmlBuffer.addText(text);\n this.stream.write(xmlBuffer);\n }\n\n _writeSheetProperties(xmlBuf, properties, pageSetup) {\n const sheetPropertiesModel = {\n outlineProperties: properties && properties.outlineProperties,\n tabColor: properties && properties.tabColor,\n pageSetup:\n pageSetup && pageSetup.fitToPage\n ? {\n fitToPage: pageSetup.fitToPage,\n }\n : undefined,\n };\n\n xmlBuf.addText(xform.sheetProperties.toXml(sheetPropertiesModel));\n }\n\n _writeSheetFormatProperties(xmlBuf, properties) {\n const sheetFormatPropertiesModel = properties\n ? {\n defaultRowHeight: properties.defaultRowHeight,\n dyDescent: properties.dyDescent,\n outlineLevelCol: properties.outlineLevelCol,\n outlineLevelRow: properties.outlineLevelRow,\n }\n : undefined;\n if (properties.defaultColWidth) {\n sheetFormatPropertiesModel.defaultColWidth = properties.defaultColWidth;\n }\n\n xmlBuf.addText(xform.sheetFormatProperties.toXml(sheetFormatPropertiesModel));\n }\n\n _writeOpenWorksheet() {\n xmlBuffer.reset();\n\n xmlBuffer.addText('');\n xmlBuffer.addText(\n ''\n );\n\n this._writeSheetProperties(xmlBuffer, this.properties, this.pageSetup);\n\n xmlBuffer.addText(xform.sheetViews.toXml(this.views));\n\n this._writeSheetFormatProperties(xmlBuffer, this.properties);\n\n this.stream.write(xmlBuffer);\n }\n\n _writeColumns() {\n const cols = Column.toModel(this.columns);\n if (cols) {\n xform.columns.prepare(cols, {styles: this._workbook.styles});\n this.stream.write(xform.columns.toXml(cols));\n }\n }\n\n _writeOpenSheetData() {\n this._write('');\n }\n\n _writeRow(row) {\n if (!this.startedData) {\n this._writeColumns();\n this._writeOpenSheetData();\n this.startedData = true;\n }\n\n if (row.hasValues || row.height) {\n const {model} = row;\n const options = {\n styles: this._workbook.styles,\n sharedStrings: this.useSharedStrings ? this._workbook.sharedStrings : undefined,\n hyperlinks: this._sheetRelsWriter.hyperlinksProxy,\n merges: this._merges,\n formulae: this._formulae,\n siFormulae: this._siFormulae,\n comments: [],\n };\n xform.row.prepare(model, options);\n this.stream.write(xform.row.toXml(model));\n\n if (options.comments.length) {\n this.hasComments = true;\n this._sheetCommentsWriter.addComments(options.comments);\n }\n }\n }\n\n _writeCloseSheetData() {\n this._write('');\n }\n\n _writeMergeCells() {\n if (this._merges.length) {\n xmlBuffer.reset();\n xmlBuffer.addText(``);\n this._merges.forEach(merge => {\n xmlBuffer.addText(``);\n });\n xmlBuffer.addText('');\n\n this.stream.write(xmlBuffer);\n }\n }\n\n _writeHyperlinks() {\n // eslint-disable-next-line no-underscore-dangle\n this.stream.write(xform.hyperlinks.toXml(this._sheetRelsWriter._hyperlinks));\n }\n\n _writeConditionalFormatting() {\n const options = {\n styles: this._workbook.styles,\n };\n xform.conditionalFormattings.prepare(this.conditionalFormatting, options);\n this.stream.write(xform.conditionalFormattings.toXml(this.conditionalFormatting));\n }\n\n _writeRowBreaks() {\n this.stream.write(xform.rowBreaks.toXml(this.rowBreaks));\n }\n\n _writeDataValidations() {\n this.stream.write(xform.dataValidations.toXml(this.dataValidations.model));\n }\n\n _writeSheetProtection() {\n this.stream.write(xform.sheetProtection.toXml(this.sheetProtection));\n }\n\n _writePageMargins() {\n this.stream.write(xform.pageMargins.toXml(this.pageSetup.margins));\n }\n\n _writePageSetup() {\n this.stream.write(xform.pageSeteup.toXml(this.pageSetup));\n }\n\n _writeHeaderFooter() {\n this.stream.write(xform.headerFooter.toXml(this.headerFooter));\n }\n\n _writeAutoFilter() {\n this.stream.write(xform.autoFilter.toXml(this.autoFilter));\n }\n\n _writeBackground() {\n if (this._background) {\n if (this._background.imageId !== undefined) {\n const image = this._workbook.getImage(this._background.imageId);\n const pictureId = this._sheetRelsWriter.addMedia({\n Target: `../media/${image.name}`,\n Type: RelType.Image,\n });\n\n this._background = {\n ...this._background,\n rId: pictureId,\n };\n }\n this.stream.write(xform.picture.toXml({rId: this._background.rId}));\n }\n }\n\n _writeLegacyData() {\n if (this.hasComments) {\n xmlBuffer.reset();\n xmlBuffer.addText(``);\n this.stream.write(xmlBuffer);\n }\n }\n\n _writeDimensions() {\n // for some reason, Excel can't handle dimensions at the bottom of the file\n // and we don't know the dimensions until the commit, so don't write them.\n // this._write('');\n }\n\n _writeCloseWorksheet() {\n this._write('');\n }\n}\n\nmodule.exports = WorksheetWriter;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/auto-drain.js b/node_backend/node_modules/exceljs/dist/es5/utils/auto-drain.js new file mode 100644 index 0000000000000000000000000000000000000000..9c4992b1bfa34e91dee917f622208b0095d1cfbd --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/auto-drain.js @@ -0,0 +1,18 @@ +"use strict"; + +const { + EventEmitter +} = require('events'); + +// ============================================================================= +// AutoDrain - kind of /dev/null +class AutoDrain extends EventEmitter { + write(chunk) { + this.emit('data', chunk); + } + end() { + this.emit('end'); + } +} +module.exports = AutoDrain; +//# sourceMappingURL=auto-drain.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/auto-drain.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/auto-drain.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b11ae9d5bd5a40984c43e5577d04a2498505928c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/auto-drain.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auto-drain.js","names":["EventEmitter","require","AutoDrain","write","chunk","emit","end","module","exports"],"sources":["../../../lib/utils/auto-drain.js"],"sourcesContent":["const {EventEmitter} = require('events');\n\n// =============================================================================\n// AutoDrain - kind of /dev/null\nclass AutoDrain extends EventEmitter {\n write(chunk) {\n this.emit('data', chunk);\n }\n\n end() {\n this.emit('end');\n }\n}\n\nmodule.exports = AutoDrain;\n"],"mappings":";;AAAA,MAAM;EAACA;AAAY,CAAC,GAAGC,OAAO,CAAC,QAAQ,CAAC;;AAExC;AACA;AACA,MAAMC,SAAS,SAASF,YAAY,CAAC;EACnCG,KAAKA,CAACC,KAAK,EAAE;IACX,IAAI,CAACC,IAAI,CAAC,MAAM,EAAED,KAAK,CAAC;EAC1B;EAEAE,GAAGA,CAAA,EAAG;IACJ,IAAI,CAACD,IAAI,CAAC,KAAK,CAAC;EAClB;AACF;AAEAE,MAAM,CAACC,OAAO,GAAGN,SAAS"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js b/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js new file mode 100644 index 0000000000000000000000000000000000000000..35f7098f7ac2d829d98fa59d395a6e393669dec2 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js @@ -0,0 +1,15 @@ +"use strict"; + +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8'); +function bufferToString(chunk) { + if (typeof chunk === 'string') { + return chunk; + } + if (textDecoder) { + return textDecoder.decode(chunk); + } + return chunk.toString(); +} +exports.bufferToString = bufferToString; +//# sourceMappingURL=browser-buffer-decode.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js.map new file mode 100644 index 0000000000000000000000000000000000000000..7b700abf7add38349f75b3026ef4fb8b97a5ee7a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser-buffer-decode.js","names":["textDecoder","TextDecoder","bufferToString","chunk","decode","toString","exports"],"sources":["../../../lib/utils/browser-buffer-decode.js"],"sourcesContent":["// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');\n\nfunction bufferToString(chunk) {\n if (typeof chunk === 'string') {\n return chunk;\n }\n if (textDecoder) {\n return textDecoder.decode(chunk);\n }\n return chunk.toString();\n}\n\nexports.bufferToString = bufferToString;\n"],"mappings":";;AAAA;AACA,MAAMA,WAAW,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAG,IAAI,GAAG,IAAIA,WAAW,CAAC,OAAO,CAAC;AAExF,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC7B,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAOA,KAAK;EACd;EACA,IAAIH,WAAW,EAAE;IACf,OAAOA,WAAW,CAACI,MAAM,CAACD,KAAK,CAAC;EAClC;EACA,OAAOA,KAAK,CAACE,QAAQ,CAAC,CAAC;AACzB;AAEAC,OAAO,CAACJ,cAAc,GAAGA,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js b/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js new file mode 100644 index 0000000000000000000000000000000000000000..78b75d131eaee18f19c20f3222f2d7c9969120bb --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js @@ -0,0 +1,18 @@ +"use strict"; + +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8'); +const { + Buffer +} = require('buffer'); +function stringToBuffer(str) { + if (typeof str !== 'string') { + return str; + } + if (textEncoder) { + return Buffer.from(textEncoder.encode(str).buffer); + } + return Buffer.from(str); +} +exports.stringToBuffer = stringToBuffer; +//# sourceMappingURL=browser-buffer-encode.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js.map new file mode 100644 index 0000000000000000000000000000000000000000..809395f3adb72336df63fe28d800ee6989658bcb --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser-buffer-encode.js","names":["textEncoder","TextEncoder","Buffer","require","stringToBuffer","str","from","encode","buffer","exports"],"sources":["../../../lib/utils/browser-buffer-encode.js"],"sourcesContent":["// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8');\nconst {Buffer} = require('buffer');\n\nfunction stringToBuffer(str) {\n if (typeof str !== 'string') {\n return str;\n }\n if (textEncoder) {\n return Buffer.from(textEncoder.encode(str).buffer);\n }\n return Buffer.from(str);\n}\n\nexports.stringToBuffer = stringToBuffer;\n"],"mappings":";;AAAA;AACA,MAAMA,WAAW,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAG,IAAI,GAAG,IAAIA,WAAW,CAAC,OAAO,CAAC;AACxF,MAAM;EAACC;AAAM,CAAC,GAAGC,OAAO,CAAC,QAAQ,CAAC;AAElC,SAASC,cAAcA,CAACC,GAAG,EAAE;EAC3B,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IAC3B,OAAOA,GAAG;EACZ;EACA,IAAIL,WAAW,EAAE;IACf,OAAOE,MAAM,CAACI,IAAI,CAACN,WAAW,CAACO,MAAM,CAACF,GAAG,CAAC,CAACG,MAAM,CAAC;EACpD;EACA,OAAON,MAAM,CAACI,IAAI,CAACD,GAAG,CAAC;AACzB;AAEAI,OAAO,CAACL,cAAc,GAAGA,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/cell-matrix.js b/node_backend/node_modules/exceljs/dist/es5/utils/cell-matrix.js new file mode 100644 index 0000000000000000000000000000000000000000..099fd9bd876940f08949cbc488d52ad37cac90b8 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/cell-matrix.js @@ -0,0 +1,149 @@ +"use strict"; + +const _ = require('./under-dash'); +const colCache = require('./col-cache'); +class CellMatrix { + constructor(template) { + this.template = template; + this.sheets = {}; + } + addCell(addressStr) { + this.addCellEx(colCache.decodeEx(addressStr)); + } + getCell(addressStr) { + return this.findCellEx(colCache.decodeEx(addressStr), true); + } + findCell(addressStr) { + return this.findCellEx(colCache.decodeEx(addressStr), false); + } + findCellAt(sheetName, rowNumber, colNumber) { + const sheet = this.sheets[sheetName]; + const row = sheet && sheet[rowNumber]; + return row && row[colNumber]; + } + addCellEx(address) { + if (address.top) { + for (let row = address.top; row <= address.bottom; row++) { + for (let col = address.left; col <= address.right; col++) { + this.getCellAt(address.sheetName, row, col); + } + } + } else { + this.findCellEx(address, true); + } + } + getCellEx(address) { + return this.findCellEx(address, true); + } + findCellEx(address, create) { + const sheet = this.findSheet(address, create); + const row = this.findSheetRow(sheet, address, create); + return this.findRowCell(row, address, create); + } + getCellAt(sheetName, rowNumber, colNumber) { + const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []); + const row = sheet[rowNumber] || (sheet[rowNumber] = []); + const cell = row[colNumber] || (row[colNumber] = { + sheetName, + address: colCache.n2l(colNumber) + rowNumber, + row: rowNumber, + col: colNumber + }); + return cell; + } + removeCellEx(address) { + const sheet = this.findSheet(address); + if (!sheet) { + return; + } + const row = this.findSheetRow(sheet, address); + if (!row) { + return; + } + delete row[address.col]; + } + forEachInSheet(sheetName, callback) { + const sheet = this.sheets[sheetName]; + if (sheet) { + sheet.forEach((row, rowNumber) => { + if (row) { + row.forEach((cell, colNumber) => { + if (cell) { + callback(cell, rowNumber, colNumber); + } + }); + } + }); + } + } + forEach(callback) { + _.each(this.sheets, (sheet, sheetName) => { + this.forEachInSheet(sheetName, callback); + }); + } + map(callback) { + const results = []; + this.forEach(cell => { + results.push(callback(cell)); + }); + return results; + } + findSheet(address, create) { + const name = address.sheetName; + if (this.sheets[name]) { + return this.sheets[name]; + } + if (create) { + return this.sheets[name] = []; + } + return undefined; + } + findSheetRow(sheet, address, create) { + const { + row + } = address; + if (sheet && sheet[row]) { + return sheet[row]; + } + if (create) { + return sheet[row] = []; + } + return undefined; + } + findRowCell(row, address, create) { + const { + col + } = address; + if (row && row[col]) { + return row[col]; + } + if (create) { + return row[col] = this.template ? Object.assign(address, JSON.parse(JSON.stringify(this.template))) : address; + } + return undefined; + } + spliceRows(sheetName, start, numDelete, numInsert) { + const sheet = this.sheets[sheetName]; + if (sheet) { + const inserts = []; + for (let i = 0; i < numInsert; i++) { + inserts.push([]); + } + sheet.splice(start, numDelete, ...inserts); + } + } + spliceColumns(sheetName, start, numDelete, numInsert) { + const sheet = this.sheets[sheetName]; + if (sheet) { + const inserts = []; + for (let i = 0; i < numInsert; i++) { + inserts.push(null); + } + _.each(sheet, row => { + row.splice(start, numDelete, ...inserts); + }); + } + } +} +module.exports = CellMatrix; +//# sourceMappingURL=cell-matrix.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/cell-matrix.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/cell-matrix.js.map new file mode 100644 index 0000000000000000000000000000000000000000..ee3df3eb950ef3b3ae17f583f6ac97fa841f43ee --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/cell-matrix.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cell-matrix.js","names":["_","require","colCache","CellMatrix","constructor","template","sheets","addCell","addressStr","addCellEx","decodeEx","getCell","findCellEx","findCell","findCellAt","sheetName","rowNumber","colNumber","sheet","row","address","top","bottom","col","left","right","getCellAt","getCellEx","create","findSheet","findSheetRow","findRowCell","cell","n2l","removeCellEx","forEachInSheet","callback","forEach","each","map","results","push","name","undefined","Object","assign","JSON","parse","stringify","spliceRows","start","numDelete","numInsert","inserts","i","splice","spliceColumns","module","exports"],"sources":["../../../lib/utils/cell-matrix.js"],"sourcesContent":["const _ = require('./under-dash');\nconst colCache = require('./col-cache');\n\nclass CellMatrix {\n constructor(template) {\n this.template = template;\n this.sheets = {};\n }\n\n addCell(addressStr) {\n this.addCellEx(colCache.decodeEx(addressStr));\n }\n\n getCell(addressStr) {\n return this.findCellEx(colCache.decodeEx(addressStr), true);\n }\n\n findCell(addressStr) {\n return this.findCellEx(colCache.decodeEx(addressStr), false);\n }\n\n findCellAt(sheetName, rowNumber, colNumber) {\n const sheet = this.sheets[sheetName];\n const row = sheet && sheet[rowNumber];\n return row && row[colNumber];\n }\n\n addCellEx(address) {\n if (address.top) {\n for (let row = address.top; row <= address.bottom; row++) {\n for (let col = address.left; col <= address.right; col++) {\n this.getCellAt(address.sheetName, row, col);\n }\n }\n } else {\n this.findCellEx(address, true);\n }\n }\n\n getCellEx(address) {\n return this.findCellEx(address, true);\n }\n\n findCellEx(address, create) {\n const sheet = this.findSheet(address, create);\n const row = this.findSheetRow(sheet, address, create);\n return this.findRowCell(row, address, create);\n }\n\n getCellAt(sheetName, rowNumber, colNumber) {\n const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []);\n const row = sheet[rowNumber] || (sheet[rowNumber] = []);\n const cell =\n row[colNumber] ||\n (row[colNumber] = {\n sheetName,\n address: colCache.n2l(colNumber) + rowNumber,\n row: rowNumber,\n col: colNumber,\n });\n return cell;\n }\n\n removeCellEx(address) {\n const sheet = this.findSheet(address);\n if (!sheet) {\n return;\n }\n const row = this.findSheetRow(sheet, address);\n if (!row) {\n return;\n }\n delete row[address.col];\n }\n\n forEachInSheet(sheetName, callback) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n sheet.forEach((row, rowNumber) => {\n if (row) {\n row.forEach((cell, colNumber) => {\n if (cell) {\n callback(cell, rowNumber, colNumber);\n }\n });\n }\n });\n }\n }\n\n forEach(callback) {\n _.each(this.sheets, (sheet, sheetName) => {\n this.forEachInSheet(sheetName, callback);\n });\n }\n\n map(callback) {\n const results = [];\n this.forEach(cell => {\n results.push(callback(cell));\n });\n return results;\n }\n\n findSheet(address, create) {\n const name = address.sheetName;\n if (this.sheets[name]) {\n return this.sheets[name];\n }\n if (create) {\n return (this.sheets[name] = []);\n }\n return undefined;\n }\n\n findSheetRow(sheet, address, create) {\n const {row} = address;\n if (sheet && sheet[row]) {\n return sheet[row];\n }\n if (create) {\n return (sheet[row] = []);\n }\n return undefined;\n }\n\n findRowCell(row, address, create) {\n const {col} = address;\n if (row && row[col]) {\n return row[col];\n }\n if (create) {\n return (row[col] = this.template\n ? Object.assign(address, JSON.parse(JSON.stringify(this.template)))\n : address);\n }\n return undefined;\n }\n\n spliceRows(sheetName, start, numDelete, numInsert) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n const inserts = [];\n for (let i = 0; i < numInsert; i++) {\n inserts.push([]);\n }\n sheet.splice(start, numDelete, ...inserts);\n }\n }\n\n spliceColumns(sheetName, start, numDelete, numInsert) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n const inserts = [];\n for (let i = 0; i < numInsert; i++) {\n inserts.push(null);\n }\n _.each(sheet, row => {\n row.splice(start, numDelete, ...inserts);\n });\n }\n }\n}\n\nmodule.exports = CellMatrix;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/col-cache.js b/node_backend/node_modules/exceljs/dist/es5/utils/col-cache.js new file mode 100644 index 0000000000000000000000000000000000000000..cfa14f886ae20ffb11430f9eaaf6413ad0dc0e95 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/col-cache.js @@ -0,0 +1,258 @@ +"use strict"; + +const addressRegex = /^[A-Z]+\d+$/; +// ========================================================================= +// Column Letter to Number conversion +const colCache = { + _dictionary: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'], + _l2nFill: 0, + _l2n: {}, + _n2l: [], + _level(n) { + if (n <= 26) { + return 1; + } + if (n <= 26 * 26) { + return 2; + } + return 3; + }, + _fill(level) { + let c; + let v; + let l1; + let l2; + let l3; + let n = 1; + if (level >= 4) { + throw new Error('Out of bounds. Excel supports columns from 1 to 16384'); + } + if (this._l2nFill < 1 && level >= 1) { + while (n <= 26) { + c = this._dictionary[n - 1]; + this._n2l[n] = c; + this._l2n[c] = n; + n++; + } + this._l2nFill = 1; + } + if (this._l2nFill < 2 && level >= 2) { + n = 27; + while (n <= 26 + 26 * 26) { + v = n - (26 + 1); + l1 = v % 26; + l2 = Math.floor(v / 26); + c = this._dictionary[l2] + this._dictionary[l1]; + this._n2l[n] = c; + this._l2n[c] = n; + n++; + } + this._l2nFill = 2; + } + if (this._l2nFill < 3 && level >= 3) { + n = 26 + 26 * 26 + 1; + while (n <= 16384) { + v = n - (26 * 26 + 26 + 1); + l1 = v % 26; + l2 = Math.floor(v / 26) % 26; + l3 = Math.floor(v / (26 * 26)); + c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1]; + this._n2l[n] = c; + this._l2n[c] = n; + n++; + } + this._l2nFill = 3; + } + }, + l2n(l) { + if (!this._l2n[l]) { + this._fill(l.length); + } + if (!this._l2n[l]) { + throw new Error(`Out of bounds. Invalid column letter: ${l}`); + } + return this._l2n[l]; + }, + n2l(n) { + if (n < 1 || n > 16384) { + throw new Error(`${n} is out of bounds. Excel supports columns from 1 to 16384`); + } + if (!this._n2l[n]) { + this._fill(this._level(n)); + } + return this._n2l[n]; + }, + // ========================================================================= + // Address processing + _hash: {}, + // check if value looks like an address + validateAddress(value) { + if (!addressRegex.test(value)) { + throw new Error(`Invalid Address: ${value}`); + } + return true; + }, + // convert address string into structure + decodeAddress(value) { + const addr = value.length < 5 && this._hash[value]; + if (addr) { + return addr; + } + let hasCol = false; + let col = ''; + let colNumber = 0; + let hasRow = false; + let row = ''; + let rowNumber = 0; + for (let i = 0, char; i < value.length; i++) { + char = value.charCodeAt(i); + // col should before row + if (!hasRow && char >= 65 && char <= 90) { + // 65 = 'A'.charCodeAt(0) + // 90 = 'Z'.charCodeAt(0) + hasCol = true; + col += value[i]; + // colNumber starts from 1 + colNumber = colNumber * 26 + char - 64; + } else if (char >= 48 && char <= 57) { + // 48 = '0'.charCodeAt(0) + // 57 = '9'.charCodeAt(0) + hasRow = true; + row += value[i]; + // rowNumber starts from 0 + rowNumber = rowNumber * 10 + char - 48; + } else if (hasRow && hasCol && char !== 36) { + // 36 = '$'.charCodeAt(0) + break; + } + } + if (!hasCol) { + colNumber = undefined; + } else if (colNumber > 16384) { + throw new Error(`Out of bounds. Invalid column letter: ${col}`); + } + if (!hasRow) { + rowNumber = undefined; + } + + // in case $row$col + value = col + row; + const address = { + address: value, + col: colNumber, + row: rowNumber, + $col$row: `$${col}$${row}` + }; + + // mem fix - cache only the tl 100x100 square + if (colNumber <= 100 && rowNumber <= 100) { + this._hash[value] = address; + this._hash[address.$col$row] = address; + } + return address; + }, + // convert r,c into structure (if only 1 arg, assume r is address string) + getAddress(r, c) { + if (c) { + const address = this.n2l(c) + r; + return this.decodeAddress(address); + } + return this.decodeAddress(r); + }, + // convert [address], [tl:br] into address structures + decode(value) { + const parts = value.split(':'); + if (parts.length === 2) { + const tl = this.decodeAddress(parts[0]); + const br = this.decodeAddress(parts[1]); + const result = { + top: Math.min(tl.row, br.row), + left: Math.min(tl.col, br.col), + bottom: Math.max(tl.row, br.row), + right: Math.max(tl.col, br.col) + }; + // reconstruct tl, br and dimensions + result.tl = this.n2l(result.left) + result.top; + result.br = this.n2l(result.right) + result.bottom; + result.dimensions = `${result.tl}:${result.br}`; + return result; + } + return this.decodeAddress(value); + }, + // convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures + decodeEx(value) { + const groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/); + const sheetName = groups[1] || groups[2]; // Qouted and unqouted groups + const reference = groups[3]; // Remaining address + + const parts = reference.split(':'); + if (parts.length > 1) { + let tl = this.decodeAddress(parts[0]); + let br = this.decodeAddress(parts[1]); + const top = Math.min(tl.row, br.row); + const left = Math.min(tl.col, br.col); + const bottom = Math.max(tl.row, br.row); + const right = Math.max(tl.col, br.col); + tl = this.n2l(left) + top; + br = this.n2l(right) + bottom; + return { + top, + left, + bottom, + right, + sheetName, + tl: { + address: tl, + col: left, + row: top, + $col$row: `$${this.n2l(left)}$${top}`, + sheetName + }, + br: { + address: br, + col: right, + row: bottom, + $col$row: `$${this.n2l(right)}$${bottom}`, + sheetName + }, + dimensions: `${tl}:${br}` + }; + } + if (reference.startsWith('#')) { + return sheetName ? { + sheetName, + error: reference + } : { + error: reference + }; + } + const address = this.decodeAddress(reference); + return sheetName ? { + sheetName, + ...address + } : address; + }, + // convert row,col into address string + encodeAddress(row, col) { + return colCache.n2l(col) + row; + }, + // convert row,col into string address or t,l,b,r into range + encode() { + switch (arguments.length) { + case 2: + return colCache.encodeAddress(arguments[0], arguments[1]); + case 4: + return `${colCache.encodeAddress(arguments[0], arguments[1])}:${colCache.encodeAddress(arguments[2], arguments[3])}`; + default: + throw new Error('Can only encode with 2 or 4 arguments'); + } + }, + // return true if address is contained within range + inRange(range, address) { + const [left, top,, right, bottom] = range; + const [col, row] = address; + return col >= left && col <= right && row >= top && row <= bottom; + } +}; +module.exports = colCache; +//# sourceMappingURL=col-cache.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/col-cache.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/col-cache.js.map new file mode 100644 index 0000000000000000000000000000000000000000..61dd984f618c03cb96a194bec1c95a53909e8f3b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/col-cache.js.map @@ -0,0 +1 @@ +{"version":3,"file":"col-cache.js","names":["addressRegex","colCache","_dictionary","_l2nFill","_l2n","_n2l","_level","n","_fill","level","c","v","l1","l2","l3","Error","Math","floor","l2n","l","length","n2l","_hash","validateAddress","value","test","decodeAddress","addr","hasCol","col","colNumber","hasRow","row","rowNumber","i","char","charCodeAt","undefined","address","$col$row","getAddress","r","decode","parts","split","tl","br","result","top","min","left","bottom","max","right","dimensions","decodeEx","groups","match","sheetName","reference","startsWith","error","encodeAddress","encode","arguments","inRange","range","module","exports"],"sources":["../../../lib/utils/col-cache.js"],"sourcesContent":["const addressRegex = /^[A-Z]+\\d+$/;\n// =========================================================================\n// Column Letter to Number conversion\nconst colCache = {\n _dictionary: [\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'F',\n 'G',\n 'H',\n 'I',\n 'J',\n 'K',\n 'L',\n 'M',\n 'N',\n 'O',\n 'P',\n 'Q',\n 'R',\n 'S',\n 'T',\n 'U',\n 'V',\n 'W',\n 'X',\n 'Y',\n 'Z',\n ],\n _l2nFill: 0,\n _l2n: {},\n _n2l: [],\n _level(n) {\n if (n <= 26) {\n return 1;\n }\n if (n <= 26 * 26) {\n return 2;\n }\n return 3;\n },\n _fill(level) {\n let c;\n let v;\n let l1;\n let l2;\n let l3;\n let n = 1;\n if (level >= 4) {\n throw new Error('Out of bounds. Excel supports columns from 1 to 16384');\n }\n if (this._l2nFill < 1 && level >= 1) {\n while (n <= 26) {\n c = this._dictionary[n - 1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 1;\n }\n if (this._l2nFill < 2 && level >= 2) {\n n = 27;\n while (n <= 26 + (26 * 26)) {\n v = n - (26 + 1);\n l1 = v % 26;\n l2 = Math.floor(v / 26);\n c = this._dictionary[l2] + this._dictionary[l1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 2;\n }\n if (this._l2nFill < 3 && level >= 3) {\n n = 26 + (26 * 26) + 1;\n while (n <= 16384) {\n v = n - ((26 * 26) + 26 + 1);\n l1 = v % 26;\n l2 = Math.floor(v / 26) % 26;\n l3 = Math.floor(v / (26 * 26));\n c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 3;\n }\n },\n l2n(l) {\n if (!this._l2n[l]) {\n this._fill(l.length);\n }\n if (!this._l2n[l]) {\n throw new Error(`Out of bounds. Invalid column letter: ${l}`);\n }\n return this._l2n[l];\n },\n n2l(n) {\n if (n < 1 || n > 16384) {\n throw new Error(`${n} is out of bounds. Excel supports columns from 1 to 16384`);\n }\n if (!this._n2l[n]) {\n this._fill(this._level(n));\n }\n return this._n2l[n];\n },\n\n // =========================================================================\n // Address processing\n _hash: {},\n\n // check if value looks like an address\n validateAddress(value) {\n if (!addressRegex.test(value)) {\n throw new Error(`Invalid Address: ${value}`);\n }\n return true;\n },\n\n // convert address string into structure\n decodeAddress(value) {\n const addr = value.length < 5 && this._hash[value];\n if (addr) {\n return addr;\n }\n let hasCol = false;\n let col = '';\n let colNumber = 0;\n let hasRow = false;\n let row = '';\n let rowNumber = 0;\n for (let i = 0, char; i < value.length; i++) {\n char = value.charCodeAt(i);\n // col should before row\n if (!hasRow && char >= 65 && char <= 90) {\n // 65 = 'A'.charCodeAt(0)\n // 90 = 'Z'.charCodeAt(0)\n hasCol = true;\n col += value[i];\n // colNumber starts from 1\n colNumber = (colNumber * 26) + char - 64;\n } else if (char >= 48 && char <= 57) {\n // 48 = '0'.charCodeAt(0)\n // 57 = '9'.charCodeAt(0)\n hasRow = true;\n row += value[i];\n // rowNumber starts from 0\n rowNumber = (rowNumber * 10) + char - 48;\n } else if (hasRow && hasCol && char !== 36) {\n // 36 = '$'.charCodeAt(0)\n break;\n }\n }\n if (!hasCol) {\n colNumber = undefined;\n } else if (colNumber > 16384) {\n throw new Error(`Out of bounds. Invalid column letter: ${col}`);\n }\n if (!hasRow) {\n rowNumber = undefined;\n }\n\n // in case $row$col\n value = col + row;\n\n const address = {\n address: value,\n col: colNumber,\n row: rowNumber,\n $col$row: `$${col}$${row}`,\n };\n\n // mem fix - cache only the tl 100x100 square\n if (colNumber <= 100 && rowNumber <= 100) {\n this._hash[value] = address;\n this._hash[address.$col$row] = address;\n }\n\n return address;\n },\n\n // convert r,c into structure (if only 1 arg, assume r is address string)\n getAddress(r, c) {\n if (c) {\n const address = this.n2l(c) + r;\n return this.decodeAddress(address);\n }\n return this.decodeAddress(r);\n },\n\n // convert [address], [tl:br] into address structures\n decode(value) {\n const parts = value.split(':');\n if (parts.length === 2) {\n const tl = this.decodeAddress(parts[0]);\n const br = this.decodeAddress(parts[1]);\n const result = {\n top: Math.min(tl.row, br.row),\n left: Math.min(tl.col, br.col),\n bottom: Math.max(tl.row, br.row),\n right: Math.max(tl.col, br.col),\n };\n // reconstruct tl, br and dimensions\n result.tl = this.n2l(result.left) + result.top;\n result.br = this.n2l(result.right) + result.bottom;\n result.dimensions = `${result.tl}:${result.br}`;\n return result;\n }\n return this.decodeAddress(value);\n },\n\n // convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures\n decodeEx(value) {\n const groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/);\n\n const sheetName = groups[1] || groups[2]; // Qouted and unqouted groups\n const reference = groups[3]; // Remaining address\n\n const parts = reference.split(':');\n if (parts.length > 1) {\n let tl = this.decodeAddress(parts[0]);\n let br = this.decodeAddress(parts[1]);\n const top = Math.min(tl.row, br.row);\n const left = Math.min(tl.col, br.col);\n const bottom = Math.max(tl.row, br.row);\n const right = Math.max(tl.col, br.col);\n\n tl = this.n2l(left) + top;\n br = this.n2l(right) + bottom;\n\n return {\n top,\n left,\n bottom,\n right,\n sheetName,\n tl: {address: tl, col: left, row: top, $col$row: `$${this.n2l(left)}$${top}`, sheetName},\n br: {\n address: br,\n col: right,\n row: bottom,\n $col$row: `$${this.n2l(right)}$${bottom}`,\n sheetName,\n },\n dimensions: `${tl}:${br}`,\n };\n }\n if (reference.startsWith('#')) {\n return sheetName ? {sheetName, error: reference} : {error: reference};\n }\n\n const address = this.decodeAddress(reference);\n return sheetName ? {sheetName, ...address} : address;\n },\n\n // convert row,col into address string\n encodeAddress(row, col) {\n return colCache.n2l(col) + row;\n },\n\n // convert row,col into string address or t,l,b,r into range\n encode() {\n switch (arguments.length) {\n case 2:\n return colCache.encodeAddress(arguments[0], arguments[1]);\n case 4:\n return `${colCache.encodeAddress(arguments[0], arguments[1])}:${colCache.encodeAddress(\n arguments[2],\n arguments[3]\n )}`;\n default:\n throw new Error('Can only encode with 2 or 4 arguments');\n }\n },\n\n // return true if address is contained within range\n inRange(range, address) {\n const [left, top, , right, bottom] = range;\n const [col, row] = address;\n return col >= left && col <= right && row >= top && row <= bottom;\n },\n};\n\nmodule.exports = colCache;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/copy-style.js b/node_backend/node_modules/exceljs/dist/es5/utils/copy-style.js new file mode 100644 index 0000000000000000000000000000000000000000..73db3baf4b430c4cc2f9bb310a526a31f9974446 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/copy-style.js @@ -0,0 +1,43 @@ +"use strict"; + +const oneDepthCopy = (obj, nestKeys) => ({ + ...obj, + ...nestKeys.reduce((memo, key) => { + if (obj[key]) memo[key] = { + ...obj[key] + }; + return memo; + }, {}) +}); +const setIfExists = function (src, dst, key) { + let nestKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + if (src[key]) dst[key] = oneDepthCopy(src[key], nestKeys); +}; +const isEmptyObj = obj => Object.keys(obj).length === 0; +const copyStyle = style => { + if (!style) return style; + if (isEmptyObj(style)) return {}; + const copied = { + ...style + }; + setIfExists(style, copied, 'font', ['color']); + setIfExists(style, copied, 'alignment'); + setIfExists(style, copied, 'protection'); + if (style.border) { + setIfExists(style, copied, 'border'); + setIfExists(style.border, copied.border, 'top', ['color']); + setIfExists(style.border, copied.border, 'left', ['color']); + setIfExists(style.border, copied.border, 'bottom', ['color']); + setIfExists(style.border, copied.border, 'right', ['color']); + setIfExists(style.border, copied.border, 'diagonal', ['color']); + } + if (style.fill) { + setIfExists(style, copied, 'fill', ['fgColor', 'bgColor', 'center']); + if (style.fill.stops) { + copied.fill.stops = style.fill.stops.map(s => oneDepthCopy(s, ['color'])); + } + } + return copied; +}; +exports.copyStyle = copyStyle; +//# sourceMappingURL=copy-style.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/copy-style.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/copy-style.js.map new file mode 100644 index 0000000000000000000000000000000000000000..86a18bdca77a723f3909bd29202c79e03ed54a53 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/copy-style.js.map @@ -0,0 +1 @@ +{"version":3,"file":"copy-style.js","names":["oneDepthCopy","obj","nestKeys","reduce","memo","key","setIfExists","src","dst","arguments","length","undefined","isEmptyObj","Object","keys","copyStyle","style","copied","border","fill","stops","map","s","exports"],"sources":["../../../lib/utils/copy-style.js"],"sourcesContent":["const oneDepthCopy = (obj, nestKeys) => ({\n ...obj,\n ...nestKeys.reduce((memo, key) => {\n if (obj[key]) memo[key] = {...obj[key]};\n return memo;\n }, {}),\n});\n\nconst setIfExists = (src, dst, key, nestKeys = []) => {\n if (src[key]) dst[key] = oneDepthCopy(src[key], nestKeys);\n};\n\nconst isEmptyObj = obj => Object.keys(obj).length === 0;\n\nconst copyStyle = style => {\n if (!style) return style;\n if (isEmptyObj(style)) return {};\n\n const copied = {...style};\n\n setIfExists(style, copied, 'font', ['color']);\n setIfExists(style, copied, 'alignment');\n setIfExists(style, copied, 'protection');\n if (style.border) {\n setIfExists(style, copied, 'border');\n setIfExists(style.border, copied.border, 'top', ['color']);\n setIfExists(style.border, copied.border, 'left', ['color']);\n setIfExists(style.border, copied.border, 'bottom', ['color']);\n setIfExists(style.border, copied.border, 'right', ['color']);\n setIfExists(style.border, copied.border, 'diagonal', ['color']);\n }\n\n if (style.fill) {\n setIfExists(style, copied, 'fill', ['fgColor', 'bgColor', 'center']);\n if (style.fill.stops) {\n copied.fill.stops = style.fill.stops.map(s => oneDepthCopy(s, ['color']));\n }\n }\n\n return copied;\n};\n\nexports.copyStyle = copyStyle;\n"],"mappings":";;AAAA,MAAMA,YAAY,GAAGA,CAACC,GAAG,EAAEC,QAAQ,MAAM;EACvC,GAAGD,GAAG;EACN,GAAGC,QAAQ,CAACC,MAAM,CAAC,CAACC,IAAI,EAAEC,GAAG,KAAK;IAChC,IAAIJ,GAAG,CAACI,GAAG,CAAC,EAAED,IAAI,CAACC,GAAG,CAAC,GAAG;MAAC,GAAGJ,GAAG,CAACI,GAAG;IAAC,CAAC;IACvC,OAAOD,IAAI;EACb,CAAC,EAAE,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAME,WAAW,GAAG,SAAAA,CAACC,GAAG,EAAEC,GAAG,EAAEH,GAAG,EAAoB;EAAA,IAAlBH,QAAQ,GAAAO,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAC/C,IAAIF,GAAG,CAACF,GAAG,CAAC,EAAEG,GAAG,CAACH,GAAG,CAAC,GAAGL,YAAY,CAACO,GAAG,CAACF,GAAG,CAAC,EAAEH,QAAQ,CAAC;AAC3D,CAAC;AAED,MAAMU,UAAU,GAAGX,GAAG,IAAIY,MAAM,CAACC,IAAI,CAACb,GAAG,CAAC,CAACS,MAAM,KAAK,CAAC;AAEvD,MAAMK,SAAS,GAAGC,KAAK,IAAI;EACzB,IAAI,CAACA,KAAK,EAAE,OAAOA,KAAK;EACxB,IAAIJ,UAAU,CAACI,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;EAEhC,MAAMC,MAAM,GAAG;IAAC,GAAGD;EAAK,CAAC;EAEzBV,WAAW,CAACU,KAAK,EAAEC,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;EAC7CX,WAAW,CAACU,KAAK,EAAEC,MAAM,EAAE,WAAW,CAAC;EACvCX,WAAW,CAACU,KAAK,EAAEC,MAAM,EAAE,YAAY,CAAC;EACxC,IAAID,KAAK,CAACE,MAAM,EAAE;IAChBZ,WAAW,CAACU,KAAK,EAAEC,MAAM,EAAE,QAAQ,CAAC;IACpCX,WAAW,CAACU,KAAK,CAACE,MAAM,EAAED,MAAM,CAACC,MAAM,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1DZ,WAAW,CAACU,KAAK,CAACE,MAAM,EAAED,MAAM,CAACC,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3DZ,WAAW,CAACU,KAAK,CAACE,MAAM,EAAED,MAAM,CAACC,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;IAC7DZ,WAAW,CAACU,KAAK,CAACE,MAAM,EAAED,MAAM,CAACC,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;IAC5DZ,WAAW,CAACU,KAAK,CAACE,MAAM,EAAED,MAAM,CAACC,MAAM,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC;EACjE;EAEA,IAAIF,KAAK,CAACG,IAAI,EAAE;IACdb,WAAW,CAACU,KAAK,EAAEC,MAAM,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpE,IAAID,KAAK,CAACG,IAAI,CAACC,KAAK,EAAE;MACpBH,MAAM,CAACE,IAAI,CAACC,KAAK,GAAGJ,KAAK,CAACG,IAAI,CAACC,KAAK,CAACC,GAAG,CAACC,CAAC,IAAItB,YAAY,CAACsB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E;EACF;EAEA,OAAOL,MAAM;AACf,CAAC;AAEDM,OAAO,CAACR,SAAS,GAAGA,SAAS"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/encryptor.js b/node_backend/node_modules/exceljs/dist/es5/utils/encryptor.js new file mode 100644 index 0000000000000000000000000000000000000000..d3731fa22977064406084160052b3e1ec97af457 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/encryptor.js @@ -0,0 +1,58 @@ +'use strict'; + +const crypto = require('crypto'); +const Encryptor = { + /** + * Calculate a hash of the concatenated buffers with the given algorithm. + * @param {string} algorithm - The hash algorithm. + * @returns {Buffer} The hash + */ + hash(algorithm) { + const hash = crypto.createHash(algorithm); + for (var _len = arguments.length, buffers = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + buffers[_key - 1] = arguments[_key]; + } + hash.update(Buffer.concat(buffers)); + return hash.digest(); + }, + /** + * Convert a password into an encryption key + * @param {string} password - The password + * @param {string} hashAlgorithm - The hash algoritm + * @param {string} saltValue - The salt value + * @param {number} spinCount - The spin count + * @param {number} keyBits - The length of the key in bits + * @param {Buffer} blockKey - The block key + * @returns {Buffer} The encryption key + */ + convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) { + hashAlgorithm = hashAlgorithm.toLowerCase(); + const hashes = crypto.getHashes(); + if (hashes.indexOf(hashAlgorithm) < 0) { + throw new Error(`Hash algorithm '${hashAlgorithm}' not supported!`); + } + + // Password must be in unicode buffer + const passwordBuffer = Buffer.from(password, 'utf16le'); + // Generate the initial hash + let key = this.hash(hashAlgorithm, Buffer.from(saltValue, 'base64'), passwordBuffer); + // Now regenerate until spin count + for (let i = 0; i < spinCount; i++) { + const iterator = Buffer.alloc(4); + // this is the 'special' element of Excel password hashing + // that stops us from using crypto.pbkdf2() + iterator.writeUInt32LE(i, 0); + key = this.hash(hashAlgorithm, key, iterator); + } + return key.toString('base64'); + }, + /** + * Generates cryptographically strong pseudo-random data. + * @param size The size argument is a number indicating the number of bytes to generate. + */ + randomBytes(size) { + return crypto.randomBytes(size); + } +}; +module.exports = Encryptor; +//# sourceMappingURL=encryptor.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/encryptor.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/encryptor.js.map new file mode 100644 index 0000000000000000000000000000000000000000..14c659c646583ccfe150b74fef55ce2e5c6d1ce7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/encryptor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encryptor.js","names":["crypto","require","Encryptor","hash","algorithm","createHash","_len","arguments","length","buffers","Array","_key","update","Buffer","concat","digest","convertPasswordToHash","password","hashAlgorithm","saltValue","spinCount","toLowerCase","hashes","getHashes","indexOf","Error","passwordBuffer","from","key","i","iterator","alloc","writeUInt32LE","toString","randomBytes","size","module","exports"],"sources":["../../../lib/utils/encryptor.js"],"sourcesContent":["'use strict';\n\nconst crypto = require('crypto');\n\nconst Encryptor = {\n /**\n * Calculate a hash of the concatenated buffers with the given algorithm.\n * @param {string} algorithm - The hash algorithm.\n * @returns {Buffer} The hash\n */\n hash(algorithm, ...buffers) {\n const hash = crypto.createHash(algorithm);\n hash.update(Buffer.concat(buffers));\n return hash.digest();\n },\n /**\n * Convert a password into an encryption key\n * @param {string} password - The password\n * @param {string} hashAlgorithm - The hash algoritm\n * @param {string} saltValue - The salt value\n * @param {number} spinCount - The spin count\n * @param {number} keyBits - The length of the key in bits\n * @param {Buffer} blockKey - The block key\n * @returns {Buffer} The encryption key\n */\n convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) {\n hashAlgorithm = hashAlgorithm.toLowerCase();\n const hashes = crypto.getHashes();\n if (hashes.indexOf(hashAlgorithm) < 0) {\n throw new Error(`Hash algorithm '${hashAlgorithm}' not supported!`);\n }\n\n // Password must be in unicode buffer\n const passwordBuffer = Buffer.from(password, 'utf16le');\n // Generate the initial hash\n let key = this.hash(hashAlgorithm, Buffer.from(saltValue, 'base64'), passwordBuffer);\n // Now regenerate until spin count\n for (let i = 0; i < spinCount; i++) {\n const iterator = Buffer.alloc(4);\n // this is the 'special' element of Excel password hashing\n // that stops us from using crypto.pbkdf2()\n iterator.writeUInt32LE(i, 0);\n key = this.hash(hashAlgorithm, key, iterator);\n }\n return key.toString('base64');\n },\n /**\n * Generates cryptographically strong pseudo-random data.\n * @param size The size argument is a number indicating the number of bytes to generate.\n */\n randomBytes(size) {\n return crypto.randomBytes(size);\n },\n};\nmodule.exports = Encryptor;\n"],"mappings":"AAAA,YAAY;;AAEZ,MAAMA,MAAM,GAAGC,OAAO,CAAC,QAAQ,CAAC;AAEhC,MAAMC,SAAS,GAAG;EAChB;AACF;AACA;AACA;AACA;EACEC,IAAIA,CAACC,SAAS,EAAc;IAC1B,MAAMD,IAAI,GAAGH,MAAM,CAACK,UAAU,CAACD,SAAS,CAAC;IAAC,SAAAE,IAAA,GAAAC,SAAA,CAAAC,MAAA,EADzBC,OAAO,OAAAC,KAAA,CAAAJ,IAAA,OAAAA,IAAA,WAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;MAAPF,OAAO,CAAAE,IAAA,QAAAJ,SAAA,CAAAI,IAAA;IAAA;IAExBR,IAAI,CAACS,MAAM,CAACC,MAAM,CAACC,MAAM,CAACL,OAAO,CAAC,CAAC;IACnC,OAAON,IAAI,CAACY,MAAM,CAAC,CAAC;EACtB,CAAC;EACD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,qBAAqBA,CAACC,QAAQ,EAAEC,aAAa,EAAEC,SAAS,EAAEC,SAAS,EAAE;IACnEF,aAAa,GAAGA,aAAa,CAACG,WAAW,CAAC,CAAC;IAC3C,MAAMC,MAAM,GAAGtB,MAAM,CAACuB,SAAS,CAAC,CAAC;IACjC,IAAID,MAAM,CAACE,OAAO,CAACN,aAAa,CAAC,GAAG,CAAC,EAAE;MACrC,MAAM,IAAIO,KAAK,CAAE,mBAAkBP,aAAc,kBAAiB,CAAC;IACrE;;IAEA;IACA,MAAMQ,cAAc,GAAGb,MAAM,CAACc,IAAI,CAACV,QAAQ,EAAE,SAAS,CAAC;IACvD;IACA,IAAIW,GAAG,GAAG,IAAI,CAACzB,IAAI,CAACe,aAAa,EAAEL,MAAM,CAACc,IAAI,CAACR,SAAS,EAAE,QAAQ,CAAC,EAAEO,cAAc,CAAC;IACpF;IACA,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGT,SAAS,EAAES,CAAC,EAAE,EAAE;MAClC,MAAMC,QAAQ,GAAGjB,MAAM,CAACkB,KAAK,CAAC,CAAC,CAAC;MAChC;MACA;MACAD,QAAQ,CAACE,aAAa,CAACH,CAAC,EAAE,CAAC,CAAC;MAC5BD,GAAG,GAAG,IAAI,CAACzB,IAAI,CAACe,aAAa,EAAEU,GAAG,EAAEE,QAAQ,CAAC;IAC/C;IACA,OAAOF,GAAG,CAACK,QAAQ,CAAC,QAAQ,CAAC;EAC/B,CAAC;EACD;AACF;AACA;AACA;EACEC,WAAWA,CAACC,IAAI,EAAE;IAChB,OAAOnC,MAAM,CAACkC,WAAW,CAACC,IAAI,CAAC;EACjC;AACF,CAAC;AACDC,MAAM,CAACC,OAAO,GAAGnC,SAAS"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/iterate-stream.js b/node_backend/node_modules/exceljs/dist/es5/utils/iterate-stream.js new file mode 100644 index 0000000000000000000000000000000000000000..84764d221761a0137217d0402b61e180165d6ff9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/iterate-stream.js @@ -0,0 +1,46 @@ +"use strict"; + +module.exports = async function* iterateStream(stream) { + const contents = []; + stream.on('data', data => contents.push(data)); + let resolveStreamEndedPromise; + const streamEndedPromise = new Promise(resolve => resolveStreamEndedPromise = resolve); + let ended = false; + stream.on('end', () => { + ended = true; + resolveStreamEndedPromise(); + }); + let error = false; + stream.on('error', err => { + error = err; + resolveStreamEndedPromise(); + }); + while (!ended || contents.length > 0) { + if (contents.length === 0) { + stream.resume(); + // eslint-disable-next-line no-await-in-loop + await Promise.race([once(stream, 'data'), streamEndedPromise]); + } else { + stream.pause(); + const data = contents.shift(); + yield data; + } + if (error) throw error; + } + resolveStreamEndedPromise(); +}; +function once(eventEmitter, type) { + // TODO: Use require('events').once when node v10 is dropped + return new Promise(resolve => { + let fired = false; + const handler = () => { + if (!fired) { + fired = true; + eventEmitter.removeListener(type, handler); + resolve(); + } + }; + eventEmitter.addListener(type, handler); + }); +} +//# sourceMappingURL=iterate-stream.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/iterate-stream.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/iterate-stream.js.map new file mode 100644 index 0000000000000000000000000000000000000000..5a2de604c34f13f90537d7934316cc4d82033b5a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/iterate-stream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"iterate-stream.js","names":["module","exports","iterateStream","stream","contents","on","data","push","resolveStreamEndedPromise","streamEndedPromise","Promise","resolve","ended","error","err","length","resume","race","once","pause","shift","eventEmitter","type","fired","handler","removeListener","addListener"],"sources":["../../../lib/utils/iterate-stream.js"],"sourcesContent":["module.exports = async function* iterateStream(stream) {\n const contents = [];\n stream.on('data', data => contents.push(data));\n\n let resolveStreamEndedPromise;\n const streamEndedPromise = new Promise(resolve => (resolveStreamEndedPromise = resolve));\n\n let ended = false;\n stream.on('end', () => {\n ended = true;\n resolveStreamEndedPromise();\n });\n\n let error = false;\n stream.on('error', err => {\n error = err;\n resolveStreamEndedPromise();\n });\n\n while (!ended || contents.length > 0) {\n if (contents.length === 0) {\n stream.resume();\n // eslint-disable-next-line no-await-in-loop\n await Promise.race([once(stream, 'data'), streamEndedPromise]);\n } else {\n stream.pause();\n const data = contents.shift();\n yield data;\n }\n if (error) throw error;\n }\n resolveStreamEndedPromise();\n};\n\nfunction once(eventEmitter, type) {\n // TODO: Use require('events').once when node v10 is dropped\n return new Promise(resolve => {\n let fired = false;\n const handler = () => {\n if (!fired) {\n fired = true;\n eventEmitter.removeListener(type, handler);\n resolve();\n }\n };\n eventEmitter.addListener(type, handler);\n });\n}\n"],"mappings":";;AAAAA,MAAM,CAACC,OAAO,GAAG,gBAAgBC,aAAaA,CAACC,MAAM,EAAE;EACrD,MAAMC,QAAQ,GAAG,EAAE;EACnBD,MAAM,CAACE,EAAE,CAAC,MAAM,EAAEC,IAAI,IAAIF,QAAQ,CAACG,IAAI,CAACD,IAAI,CAAC,CAAC;EAE9C,IAAIE,yBAAyB;EAC7B,MAAMC,kBAAkB,GAAG,IAAIC,OAAO,CAACC,OAAO,IAAKH,yBAAyB,GAAGG,OAAQ,CAAC;EAExF,IAAIC,KAAK,GAAG,KAAK;EACjBT,MAAM,CAACE,EAAE,CAAC,KAAK,EAAE,MAAM;IACrBO,KAAK,GAAG,IAAI;IACZJ,yBAAyB,CAAC,CAAC;EAC7B,CAAC,CAAC;EAEF,IAAIK,KAAK,GAAG,KAAK;EACjBV,MAAM,CAACE,EAAE,CAAC,OAAO,EAAES,GAAG,IAAI;IACxBD,KAAK,GAAGC,GAAG;IACXN,yBAAyB,CAAC,CAAC;EAC7B,CAAC,CAAC;EAEF,OAAO,CAACI,KAAK,IAAIR,QAAQ,CAACW,MAAM,GAAG,CAAC,EAAE;IACpC,IAAIX,QAAQ,CAACW,MAAM,KAAK,CAAC,EAAE;MACzBZ,MAAM,CAACa,MAAM,CAAC,CAAC;MACf;MACA,MAAMN,OAAO,CAACO,IAAI,CAAC,CAACC,IAAI,CAACf,MAAM,EAAE,MAAM,CAAC,EAAEM,kBAAkB,CAAC,CAAC;IAChE,CAAC,MAAM;MACLN,MAAM,CAACgB,KAAK,CAAC,CAAC;MACd,MAAMb,IAAI,GAAGF,QAAQ,CAACgB,KAAK,CAAC,CAAC;MAC7B,MAAMd,IAAI;IACZ;IACA,IAAIO,KAAK,EAAE,MAAMA,KAAK;EACxB;EACAL,yBAAyB,CAAC,CAAC;AAC7B,CAAC;AAED,SAASU,IAAIA,CAACG,YAAY,EAAEC,IAAI,EAAE;EAChC;EACA,OAAO,IAAIZ,OAAO,CAACC,OAAO,IAAI;IAC5B,IAAIY,KAAK,GAAG,KAAK;IACjB,MAAMC,OAAO,GAAGA,CAAA,KAAM;MACpB,IAAI,CAACD,KAAK,EAAE;QACVA,KAAK,GAAG,IAAI;QACZF,YAAY,CAACI,cAAc,CAACH,IAAI,EAAEE,OAAO,CAAC;QAC1Cb,OAAO,CAAC,CAAC;MACX;IACF,CAAC;IACDU,YAAY,CAACK,WAAW,CAACJ,IAAI,EAAEE,OAAO,CAAC;EACzC,CAAC,CAAC;AACJ"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/parse-sax.js b/node_backend/node_modules/exceljs/dist/es5/utils/parse-sax.js new file mode 100644 index 0000000000000000000000000000000000000000..df49fbf9a10095cd0dba7fd249ae23ed67891b61 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/parse-sax.js @@ -0,0 +1,47 @@ +"use strict"; + +const { + SaxesParser +} = require('saxes'); +const { + PassThrough +} = require('readable-stream'); +const { + bufferToString +} = require('./browser-buffer-decode'); +module.exports = async function* (iterable) { + // TODO: Remove once node v8 is deprecated + // Detect and upgrade old streams + if (iterable.pipe && !iterable[Symbol.asyncIterator]) { + iterable = iterable.pipe(new PassThrough()); + } + const saxesParser = new SaxesParser(); + let error; + saxesParser.on('error', err => { + error = err; + }); + let events = []; + saxesParser.on('opentag', value => events.push({ + eventType: 'opentag', + value + })); + saxesParser.on('text', value => events.push({ + eventType: 'text', + value + })); + saxesParser.on('closetag', value => events.push({ + eventType: 'closetag', + value + })); + for await (const chunk of iterable) { + saxesParser.write(bufferToString(chunk)); + // saxesParser.write and saxesParser.on() are synchronous, + // so we can only reach the below line once all events have been emitted + if (error) throw error; + // As a performance optimization, we gather all events instead of passing + // them one by one, which would cause each event to go through the event queue + yield events; + events = []; + } +}; +//# sourceMappingURL=parse-sax.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/parse-sax.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/parse-sax.js.map new file mode 100644 index 0000000000000000000000000000000000000000..646479b886dea734127dcd3f8843d68cfb236673 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/parse-sax.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parse-sax.js","names":["SaxesParser","require","PassThrough","bufferToString","module","exports","iterable","pipe","Symbol","asyncIterator","saxesParser","error","on","err","events","value","push","eventType","chunk","write"],"sources":["../../../lib/utils/parse-sax.js"],"sourcesContent":["const {SaxesParser} = require('saxes');\nconst {PassThrough} = require('readable-stream');\nconst {bufferToString} = require('./browser-buffer-decode');\n\nmodule.exports = async function* (iterable) {\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old streams\n if (iterable.pipe && !iterable[Symbol.asyncIterator]) {\n iterable = iterable.pipe(new PassThrough());\n }\n const saxesParser = new SaxesParser();\n let error;\n saxesParser.on('error', err => {\n error = err;\n });\n let events = [];\n saxesParser.on('opentag', value => events.push({eventType: 'opentag', value}));\n saxesParser.on('text', value => events.push({eventType: 'text', value}));\n saxesParser.on('closetag', value => events.push({eventType: 'closetag', value}));\n for await (const chunk of iterable) {\n saxesParser.write(bufferToString(chunk));\n // saxesParser.write and saxesParser.on() are synchronous,\n // so we can only reach the below line once all events have been emitted\n if (error) throw error;\n // As a performance optimization, we gather all events instead of passing\n // them one by one, which would cause each event to go through the event queue\n yield events;\n events = [];\n }\n};\n"],"mappings":";;AAAA,MAAM;EAACA;AAAW,CAAC,GAAGC,OAAO,CAAC,OAAO,CAAC;AACtC,MAAM;EAACC;AAAW,CAAC,GAAGD,OAAO,CAAC,iBAAiB,CAAC;AAChD,MAAM;EAACE;AAAc,CAAC,GAAGF,OAAO,CAAC,yBAAyB,CAAC;AAE3DG,MAAM,CAACC,OAAO,GAAG,iBAAiBC,QAAQ,EAAE;EAC1C;EACA;EACA,IAAIA,QAAQ,CAACC,IAAI,IAAI,CAACD,QAAQ,CAACE,MAAM,CAACC,aAAa,CAAC,EAAE;IACpDH,QAAQ,GAAGA,QAAQ,CAACC,IAAI,CAAC,IAAIL,WAAW,CAAC,CAAC,CAAC;EAC7C;EACA,MAAMQ,WAAW,GAAG,IAAIV,WAAW,CAAC,CAAC;EACrC,IAAIW,KAAK;EACTD,WAAW,CAACE,EAAE,CAAC,OAAO,EAAEC,GAAG,IAAI;IAC7BF,KAAK,GAAGE,GAAG;EACb,CAAC,CAAC;EACF,IAAIC,MAAM,GAAG,EAAE;EACfJ,WAAW,CAACE,EAAE,CAAC,SAAS,EAAEG,KAAK,IAAID,MAAM,CAACE,IAAI,CAAC;IAACC,SAAS,EAAE,SAAS;IAAEF;EAAK,CAAC,CAAC,CAAC;EAC9EL,WAAW,CAACE,EAAE,CAAC,MAAM,EAAEG,KAAK,IAAID,MAAM,CAACE,IAAI,CAAC;IAACC,SAAS,EAAE,MAAM;IAAEF;EAAK,CAAC,CAAC,CAAC;EACxEL,WAAW,CAACE,EAAE,CAAC,UAAU,EAAEG,KAAK,IAAID,MAAM,CAACE,IAAI,CAAC;IAACC,SAAS,EAAE,UAAU;IAAEF;EAAK,CAAC,CAAC,CAAC;EAChF,WAAW,MAAMG,KAAK,IAAIZ,QAAQ,EAAE;IAClCI,WAAW,CAACS,KAAK,CAAChB,cAAc,CAACe,KAAK,CAAC,CAAC;IACxC;IACA;IACA,IAAIP,KAAK,EAAE,MAAMA,KAAK;IACtB;IACA;IACA,MAAMG,MAAM;IACZA,MAAM,GAAG,EAAE;EACb;AACF,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/shared-formula.js b/node_backend/node_modules/exceljs/dist/es5/utils/shared-formula.js new file mode 100644 index 0000000000000000000000000000000000000000..9838f263b679c4d3aae703cc0a5444892780bfd7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/shared-formula.js @@ -0,0 +1,42 @@ +"use strict"; + +const colCache = require('./col-cache'); + +// const cellRefRegex = /(([a-z_\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i; +const replacementCandidateRx = /(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi; +const CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i; +function slideFormula(formula, fromCell, toCell) { + const offset = colCache.decode(fromCell); + const to = colCache.decode(toCell); + return formula.replace(replacementCandidateRx, (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => { + if (trailingParen) { + return refMatch; + } + const match = CRrx.exec(addrPart); + if (match) { + const colDollar = match[1]; + const colStr = match[2].toUpperCase(); + const rowDollar = match[3]; + const rowStr = match[4]; + if (colStr.length > 3 || colStr.length === 3 && colStr > 'XFD') { + // > XFD is the highest col number in excel 2007 and beyond, so this is a named range + return refMatch; + } + let col = colCache.l2n(colStr); + let row = parseInt(rowStr, 10); + if (!colDollar) { + col += to.col - offset.col; + } + if (!rowDollar) { + row += to.row - offset.row; + } + const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row; + return res; + } + return refMatch; + }); +} +module.exports = { + slideFormula +}; +//# sourceMappingURL=shared-formula.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/shared-formula.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/shared-formula.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1b78d6594e04cf5ad4a5dd4c159f43873bf30418 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/shared-formula.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-formula.js","names":["colCache","require","replacementCandidateRx","CRrx","slideFormula","formula","fromCell","toCell","offset","decode","to","replace","refMatch","sheet","sheetMaybe","addrPart","trailingParen","match","exec","colDollar","colStr","toUpperCase","rowDollar","rowStr","length","col","l2n","row","parseInt","res","n2l","module","exports"],"sources":["../../../lib/utils/shared-formula.js"],"sourcesContent":["const colCache = require('./col-cache');\n\n// const cellRefRegex = /(([a-z_\\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i;\nconst replacementCandidateRx = /(([a-z_\\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;\nconst CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;\n\nfunction slideFormula(formula, fromCell, toCell) {\n const offset = colCache.decode(fromCell);\n const to = colCache.decode(toCell);\n return formula.replace(\n replacementCandidateRx,\n (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => {\n if (trailingParen) {\n return refMatch;\n }\n const match = CRrx.exec(addrPart);\n if (match) {\n const colDollar = match[1];\n const colStr = match[2].toUpperCase();\n const rowDollar = match[3];\n const rowStr = match[4];\n if (colStr.length > 3 || (colStr.length === 3 && colStr > 'XFD')) {\n // > XFD is the highest col number in excel 2007 and beyond, so this is a named range\n return refMatch;\n }\n let col = colCache.l2n(colStr);\n let row = parseInt(rowStr, 10);\n if (!colDollar) {\n col += to.col - offset.col;\n }\n if (!rowDollar) {\n row += to.row - offset.row;\n }\n const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row;\n return res;\n }\n return refMatch;\n }\n );\n}\n\nmodule.exports = {\n slideFormula,\n};\n"],"mappings":";;AAAA,MAAMA,QAAQ,GAAGC,OAAO,CAAC,aAAa,CAAC;;AAEvC;AACA,MAAMC,sBAAsB,GAAG,4CAA4C;AAC3E,MAAMC,IAAI,GAAG,sCAAsC;AAEnD,SAASC,YAAYA,CAACC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,EAAE;EAC/C,MAAMC,MAAM,GAAGR,QAAQ,CAACS,MAAM,CAACH,QAAQ,CAAC;EACxC,MAAMI,EAAE,GAAGV,QAAQ,CAACS,MAAM,CAACF,MAAM,CAAC;EAClC,OAAOF,OAAO,CAACM,OAAO,CACpBT,sBAAsB,EACtB,CAACU,QAAQ,EAAEC,KAAK,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,aAAa,KAAK;IACxD,IAAIA,aAAa,EAAE;MACjB,OAAOJ,QAAQ;IACjB;IACA,MAAMK,KAAK,GAAGd,IAAI,CAACe,IAAI,CAACH,QAAQ,CAAC;IACjC,IAAIE,KAAK,EAAE;MACT,MAAME,SAAS,GAAGF,KAAK,CAAC,CAAC,CAAC;MAC1B,MAAMG,MAAM,GAAGH,KAAK,CAAC,CAAC,CAAC,CAACI,WAAW,CAAC,CAAC;MACrC,MAAMC,SAAS,GAAGL,KAAK,CAAC,CAAC,CAAC;MAC1B,MAAMM,MAAM,GAAGN,KAAK,CAAC,CAAC,CAAC;MACvB,IAAIG,MAAM,CAACI,MAAM,GAAG,CAAC,IAAKJ,MAAM,CAACI,MAAM,KAAK,CAAC,IAAIJ,MAAM,GAAG,KAAM,EAAE;QAChE;QACA,OAAOR,QAAQ;MACjB;MACA,IAAIa,GAAG,GAAGzB,QAAQ,CAAC0B,GAAG,CAACN,MAAM,CAAC;MAC9B,IAAIO,GAAG,GAAGC,QAAQ,CAACL,MAAM,EAAE,EAAE,CAAC;MAC9B,IAAI,CAACJ,SAAS,EAAE;QACdM,GAAG,IAAIf,EAAE,CAACe,GAAG,GAAGjB,MAAM,CAACiB,GAAG;MAC5B;MACA,IAAI,CAACH,SAAS,EAAE;QACdK,GAAG,IAAIjB,EAAE,CAACiB,GAAG,GAAGnB,MAAM,CAACmB,GAAG;MAC5B;MACA,MAAME,GAAG,GAAG,CAAChB,KAAK,IAAI,EAAE,KAAKM,SAAS,IAAI,EAAE,CAAC,GAAGnB,QAAQ,CAAC8B,GAAG,CAACL,GAAG,CAAC,IAAIH,SAAS,IAAI,EAAE,CAAC,GAAGK,GAAG;MAC3F,OAAOE,GAAG;IACZ;IACA,OAAOjB,QAAQ;EACjB,CACF,CAAC;AACH;AAEAmB,MAAM,CAACC,OAAO,GAAG;EACf5B;AACF,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/shared-strings.js b/node_backend/node_modules/exceljs/dist/es5/utils/shared-strings.js new file mode 100644 index 0000000000000000000000000000000000000000..4cfebb5ff58537b76a9a96718d2684d920dd886b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/shared-strings.js @@ -0,0 +1,32 @@ +"use strict"; + +class SharedStrings { + constructor() { + this._values = []; + this._totalRefs = 0; + this._hash = Object.create(null); + } + get count() { + return this._values.length; + } + get values() { + return this._values; + } + get totalRefs() { + return this._totalRefs; + } + getString(index) { + return this._values[index]; + } + add(value) { + let index = this._hash[value]; + if (index === undefined) { + index = this._hash[value] = this._values.length; + this._values.push(value); + } + this._totalRefs++; + return index; + } +} +module.exports = SharedStrings; +//# sourceMappingURL=shared-strings.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/shared-strings.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/shared-strings.js.map new file mode 100644 index 0000000000000000000000000000000000000000..d33a43258549750fbb8fa53afbdb6d0cc9f8aa9f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/shared-strings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-strings.js","names":["SharedStrings","constructor","_values","_totalRefs","_hash","Object","create","count","length","values","totalRefs","getString","index","add","value","undefined","push","module","exports"],"sources":["../../../lib/utils/shared-strings.js"],"sourcesContent":["class SharedStrings {\n constructor() {\n this._values = [];\n this._totalRefs = 0;\n this._hash = Object.create(null);\n }\n\n get count() {\n return this._values.length;\n }\n\n get values() {\n return this._values;\n }\n\n get totalRefs() {\n return this._totalRefs;\n }\n\n getString(index) {\n return this._values[index];\n }\n\n add(value) {\n let index = this._hash[value];\n if (index === undefined) {\n index = this._hash[value] = this._values.length;\n this._values.push(value);\n }\n this._totalRefs++;\n return index;\n }\n}\n\nmodule.exports = SharedStrings;\n"],"mappings":";;AAAA,MAAMA,aAAa,CAAC;EAClBC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,OAAO,GAAG,EAAE;IACjB,IAAI,CAACC,UAAU,GAAG,CAAC;IACnB,IAAI,CAACC,KAAK,GAAGC,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC;EAClC;EAEA,IAAIC,KAAKA,CAAA,EAAG;IACV,OAAO,IAAI,CAACL,OAAO,CAACM,MAAM;EAC5B;EAEA,IAAIC,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAACP,OAAO;EACrB;EAEA,IAAIQ,SAASA,CAAA,EAAG;IACd,OAAO,IAAI,CAACP,UAAU;EACxB;EAEAQ,SAASA,CAACC,KAAK,EAAE;IACf,OAAO,IAAI,CAACV,OAAO,CAACU,KAAK,CAAC;EAC5B;EAEAC,GAAGA,CAACC,KAAK,EAAE;IACT,IAAIF,KAAK,GAAG,IAAI,CAACR,KAAK,CAACU,KAAK,CAAC;IAC7B,IAAIF,KAAK,KAAKG,SAAS,EAAE;MACvBH,KAAK,GAAG,IAAI,CAACR,KAAK,CAACU,KAAK,CAAC,GAAG,IAAI,CAACZ,OAAO,CAACM,MAAM;MAC/C,IAAI,CAACN,OAAO,CAACc,IAAI,CAACF,KAAK,CAAC;IAC1B;IACA,IAAI,CAACX,UAAU,EAAE;IACjB,OAAOS,KAAK;EACd;AACF;AAEAK,MAAM,CAACC,OAAO,GAAGlB,aAAa"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/stream-base64.js b/node_backend/node_modules/exceljs/dist/es5/utils/stream-base64.js new file mode 100644 index 0000000000000000000000000000000000000000..51a36a385ca2d668801023235c7131af49b88baa --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/stream-base64.js @@ -0,0 +1,66 @@ +"use strict"; + +const Stream = require('readable-stream'); + +// ============================================================================= +// StreamBase64 - A utility to convert to/from base64 stream +// Note: does not buffer data, must be piped +class StreamBase64 extends Stream.Duplex { + constructor() { + super(); + + // consuming pipe streams go here + this.pipes = []; + } + + // writable + // event drain - if write returns false (which it won't), indicates when safe to write again. + // finish - end() has been called + // pipe(src) - pipe() has been called on readable + // unpipe(src) - unpipe() has been called on readable + // error - duh + + write( /* data, encoding */ + ) { + return true; + } + cork() {} + uncork() {} + end( /* chunk, encoding, callback */) {} + + // readable + // event readable - some data is now available + // event data - switch to flowing mode - feeds chunks to handler + // event end - no more data + // event close - optional, indicates upstream close + // event error - duh + read( /* size */) {} + setEncoding(encoding) { + // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects + this.encoding = encoding; + } + pause() {} + resume() {} + isPaused() {} + pipe(destination) { + // add destination to pipe list & write current buffer + this.pipes.push(destination); + } + unpipe(destination) { + // remove destination from pipe list + this.pipes = this.pipes.filter(pipe => pipe !== destination); + } + unshift( /* chunk */ + ) { + // some numpty has read some data that's not for them and they want to put it back! + // Might implement this some day + throw new Error('Not Implemented'); + } + wrap( /* stream */ + ) { + // not implemented + throw new Error('Not Implemented'); + } +} +module.exports = StreamBase64; +//# sourceMappingURL=stream-base64.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/stream-base64.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/stream-base64.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0bc8fd389246ce3982cd54e560f188c7ecca960b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/stream-base64.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stream-base64.js","names":["Stream","require","StreamBase64","Duplex","constructor","pipes","write","cork","uncork","end","read","setEncoding","encoding","pause","resume","isPaused","pipe","destination","push","unpipe","filter","unshift","Error","wrap","module","exports"],"sources":["../../../lib/utils/stream-base64.js"],"sourcesContent":["const Stream = require('readable-stream');\n\n// =============================================================================\n// StreamBase64 - A utility to convert to/from base64 stream\n// Note: does not buffer data, must be piped\nclass StreamBase64 extends Stream.Duplex {\n constructor() {\n super();\n\n // consuming pipe streams go here\n this.pipes = [];\n }\n\n // writable\n // event drain - if write returns false (which it won't), indicates when safe to write again.\n // finish - end() has been called\n // pipe(src) - pipe() has been called on readable\n // unpipe(src) - unpipe() has been called on readable\n // error - duh\n\n write(/* data, encoding */) {\n return true;\n }\n\n cork() {}\n\n uncork() {}\n\n end(/* chunk, encoding, callback */) {}\n\n // readable\n // event readable - some data is now available\n // event data - switch to flowing mode - feeds chunks to handler\n // event end - no more data\n // event close - optional, indicates upstream close\n // event error - duh\n read(/* size */) {}\n\n setEncoding(encoding) {\n // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects\n this.encoding = encoding;\n }\n\n pause() {}\n\n resume() {}\n\n isPaused() {}\n\n pipe(destination) {\n // add destination to pipe list & write current buffer\n this.pipes.push(destination);\n }\n\n unpipe(destination) {\n // remove destination from pipe list\n this.pipes = this.pipes.filter(pipe => pipe !== destination);\n }\n\n unshift(/* chunk */) {\n // some numpty has read some data that's not for them and they want to put it back!\n // Might implement this some day\n throw new Error('Not Implemented');\n }\n\n wrap(/* stream */) {\n // not implemented\n throw new Error('Not Implemented');\n }\n}\n\nmodule.exports = StreamBase64;\n"],"mappings":";;AAAA,MAAMA,MAAM,GAAGC,OAAO,CAAC,iBAAiB,CAAC;;AAEzC;AACA;AACA;AACA,MAAMC,YAAY,SAASF,MAAM,CAACG,MAAM,CAAC;EACvCC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;;IAEP;IACA,IAAI,CAACC,KAAK,GAAG,EAAE;EACjB;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEAC,KAAKA,CAAA,CAAC;EAAA,EAAsB;IAC1B,OAAO,IAAI;EACb;EAEAC,IAAIA,CAAA,EAAG,CAAC;EAERC,MAAMA,CAAA,EAAG,CAAC;EAEVC,GAAGA,CAAA,CAAC,iCAAiC,CAAC;;EAEtC;EACA;EACA;EACA;EACA;EACA;EACAC,IAAIA,CAAA,CAAC,YAAY,CAAC;EAElBC,WAAWA,CAACC,QAAQ,EAAE;IACpB;IACA,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;EAEAC,KAAKA,CAAA,EAAG,CAAC;EAETC,MAAMA,CAAA,EAAG,CAAC;EAEVC,QAAQA,CAAA,EAAG,CAAC;EAEZC,IAAIA,CAACC,WAAW,EAAE;IAChB;IACA,IAAI,CAACZ,KAAK,CAACa,IAAI,CAACD,WAAW,CAAC;EAC9B;EAEAE,MAAMA,CAACF,WAAW,EAAE;IAClB;IACA,IAAI,CAACZ,KAAK,GAAG,IAAI,CAACA,KAAK,CAACe,MAAM,CAACJ,IAAI,IAAIA,IAAI,KAAKC,WAAW,CAAC;EAC9D;EAEAI,OAAOA,CAAA,CAAC;EAAA,EAAa;IACnB;IACA;IACA,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;EACpC;EAEAC,IAAIA,CAAA,CAAC;EAAA,EAAc;IACjB;IACA,MAAM,IAAID,KAAK,CAAC,iBAAiB,CAAC;EACpC;AACF;AAEAE,MAAM,CAACC,OAAO,GAAGvB,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/stream-buf.js b/node_backend/node_modules/exceljs/dist/es5/utils/stream-buf.js new file mode 100644 index 0000000000000000000000000000000000000000..33e814442c609682dca02f9a161d0a33a6804588 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/stream-buf.js @@ -0,0 +1,343 @@ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const Stream = require('readable-stream'); +const utils = require('./utils'); +const StringBuf = require('./string-buf'); + +// ============================================================================= +// data chunks - encapsulating incoming data +class StringChunk { + constructor(data, encoding) { + this._data = data; + this._encoding = encoding; + } + get length() { + return this.toBuffer().length; + } + + // copy to target buffer + copy(target, targetOffset, offset, length) { + return this.toBuffer().copy(target, targetOffset, offset, length); + } + toBuffer() { + if (!this._buffer) { + this._buffer = Buffer.from(this._data, this._encoding); + } + return this._buffer; + } +} +class StringBufChunk { + constructor(data) { + this._data = data; + } + get length() { + return this._data.length; + } + + // copy to target buffer + copy(target, targetOffset, offset, length) { + // eslint-disable-next-line no-underscore-dangle + return this._data._buf.copy(target, targetOffset, offset, length); + } + toBuffer() { + return this._data.toBuffer(); + } +} +class BufferChunk { + constructor(data) { + this._data = data; + } + get length() { + return this._data.length; + } + + // copy to target buffer + copy(target, targetOffset, offset, length) { + this._data.copy(target, targetOffset, offset, length); + } + toBuffer() { + return this._data; + } +} + +// ============================================================================= +// ReadWriteBuf - a single buffer supporting simple read-write +class ReadWriteBuf { + constructor(size) { + this.size = size; + // the buffer + this.buffer = Buffer.alloc(size); + // read index + this.iRead = 0; + // write index + this.iWrite = 0; + } + toBuffer() { + if (this.iRead === 0 && this.iWrite === this.size) { + return this.buffer; + } + const buf = Buffer.alloc(this.iWrite - this.iRead); + this.buffer.copy(buf, 0, this.iRead, this.iWrite); + return buf; + } + get length() { + return this.iWrite - this.iRead; + } + get eod() { + return this.iRead === this.iWrite; + } + get full() { + return this.iWrite === this.size; + } + read(size) { + let buf; + // read size bytes from buffer and return buffer + if (size === 0) { + // special case - return null if no data requested + return null; + } + if (size === undefined || size >= this.length) { + // if no size specified or size is at least what we have then return all of the bytes + buf = this.toBuffer(); + this.iRead = this.iWrite; + return buf; + } + + // otherwise return a chunk + buf = Buffer.alloc(size); + this.buffer.copy(buf, 0, this.iRead, size); + this.iRead += size; + return buf; + } + write(chunk, offset, length) { + // write as many bytes from data from optional source offset + // and return number of bytes written + const size = Math.min(length, this.size - this.iWrite); + chunk.copy(this.buffer, this.iWrite, offset, offset + size); + this.iWrite += size; + return size; + } +} + +// ============================================================================= +// StreamBuf - a multi-purpose read-write stream +// As MemBuf - write as much data as you like. Then call toBuffer() to consolidate +// As StreamHub - pipe to multiple writables +// As readable stream - feed data into the writable part and have some other code read from it. + +// Note: Not sure why but StreamBuf does not like JS "class" sugar. It fails the +// integration tests +const StreamBuf = function (options) { + options = options || {}; + this.bufSize = options.bufSize || 1024 * 1024; + this.buffers = []; + + // batch mode fills a buffer completely before passing the data on + // to pipes or 'readable' event listeners + this.batch = options.batch || false; + this.corked = false; + // where in the current writable buffer we're up to + this.inPos = 0; + + // where in the current readable buffer we've read up to + this.outPos = 0; + + // consuming pipe streams go here + this.pipes = []; + + // controls emit('data') + this.paused = false; + this.encoding = null; +}; +utils.inherits(StreamBuf, Stream.Duplex, { + toBuffer() { + switch (this.buffers.length) { + case 0: + return null; + case 1: + return this.buffers[0].toBuffer(); + default: + return Buffer.concat(this.buffers.map(rwBuf => rwBuf.toBuffer())); + } + }, + // writable + // event drain - if write returns false (which it won't), indicates when safe to write again. + // finish - end() has been called + // pipe(src) - pipe() has been called on readable + // unpipe(src) - unpipe() has been called on readable + // error - duh + + _getWritableBuffer() { + if (this.buffers.length) { + const last = this.buffers[this.buffers.length - 1]; + if (!last.full) { + return last; + } + } + const buf = new ReadWriteBuf(this.bufSize); + this.buffers.push(buf); + return buf; + }, + async _pipe(chunk) { + const write = function (pipe) { + return new Promise(resolve => { + pipe.write(chunk.toBuffer(), () => { + resolve(); + }); + }); + }; + await Promise.all(this.pipes.map(write)); + }, + _writeToBuffers(chunk) { + let inPos = 0; + const inLen = chunk.length; + while (inPos < inLen) { + // find writable buffer + const buffer = this._getWritableBuffer(); + + // write some data + inPos += buffer.write(chunk, inPos, inLen - inPos); + } + }, + async write(data, encoding, callback) { + if (encoding instanceof Function) { + callback = encoding; + encoding = 'utf8'; + } + callback = callback || utils.nop; + + // encapsulate data into a chunk + let chunk; + if (data instanceof StringBuf) { + chunk = new StringBufChunk(data); + } else if (data instanceof Buffer) { + chunk = new BufferChunk(data); + } else if (typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer) { + chunk = new StringChunk(data, encoding); + } else { + throw new Error('Chunk must be one of type String, Buffer or StringBuf.'); + } + + // now, do something with the chunk + if (this.pipes.length) { + if (this.batch) { + this._writeToBuffers(chunk); + while (!this.corked && this.buffers.length > 1) { + this._pipe(this.buffers.shift()); + } + } else if (!this.corked) { + await this._pipe(chunk); + callback(); + } else { + this._writeToBuffers(chunk); + process.nextTick(callback); + } + } else { + if (!this.paused) { + this.emit('data', chunk.toBuffer()); + } + this._writeToBuffers(chunk); + this.emit('readable'); + } + return true; + }, + cork() { + this.corked = true; + }, + _flush( /* destination */ + ) { + // if we have comsumers... + if (this.pipes.length) { + // and there's stuff not written + while (this.buffers.length) { + this._pipe(this.buffers.shift()); + } + } + }, + uncork() { + this.corked = false; + this._flush(); + }, + end(chunk, encoding, callback) { + const writeComplete = error => { + if (error) { + callback(error); + } else { + this._flush(); + this.pipes.forEach(pipe => { + pipe.end(); + }); + this.emit('finish'); + } + }; + if (chunk) { + this.write(chunk, encoding, writeComplete); + } else { + writeComplete(); + } + }, + // readable + // event readable - some data is now available + // event data - switch to flowing mode - feeds chunks to handler + // event end - no more data + // event close - optional, indicates upstream close + // event error - duh + read(size) { + let buffers; + // read min(buffer, size || infinity) + if (size) { + buffers = []; + while (size && this.buffers.length && !this.buffers[0].eod) { + const first = this.buffers[0]; + const buffer = first.read(size); + size -= buffer.length; + buffers.push(buffer); + if (first.eod && first.full) { + this.buffers.shift(); + } + } + return Buffer.concat(buffers); + } + buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean); + this.buffers = []; + return Buffer.concat(buffers); + }, + setEncoding(encoding) { + // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects + this.encoding = encoding; + }, + pause() { + this.paused = true; + }, + resume() { + this.paused = false; + }, + isPaused() { + return !!this.paused; + }, + pipe(destination) { + // add destination to pipe list & write current buffer + this.pipes.push(destination); + if (!this.paused && this.buffers.length) { + this.end(); + } + }, + unpipe(destination) { + // remove destination from pipe list + this.pipes = this.pipes.filter(pipe => pipe !== destination); + }, + unshift( /* chunk */ + ) { + // some numpty has read some data that's not for them and they want to put it back! + // Might implement this some day + throw new Error('Not Implemented'); + }, + wrap( /* stream */ + ) { + // not implemented + throw new Error('Not Implemented'); + } +}); +module.exports = StreamBuf; +//# sourceMappingURL=stream-buf.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/stream-buf.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/stream-buf.js.map new file mode 100644 index 0000000000000000000000000000000000000000..ce320c08b4bcbcc2de6bf10ecbf592432d6aa4ac --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/stream-buf.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stream-buf.js","names":["Stream","require","utils","StringBuf","StringChunk","constructor","data","encoding","_data","_encoding","length","toBuffer","copy","target","targetOffset","offset","_buffer","Buffer","from","StringBufChunk","_buf","BufferChunk","ReadWriteBuf","size","buffer","alloc","iRead","iWrite","buf","eod","full","read","undefined","write","chunk","Math","min","StreamBuf","options","bufSize","buffers","batch","corked","inPos","outPos","pipes","paused","inherits","Duplex","concat","map","rwBuf","_getWritableBuffer","last","push","_pipe","pipe","Promise","resolve","all","_writeToBuffers","inLen","callback","Function","nop","String","ArrayBuffer","Error","shift","process","nextTick","emit","cork","_flush","uncork","end","writeComplete","error","forEach","first","filter","Boolean","setEncoding","pause","resume","isPaused","destination","unpipe","unshift","wrap","module","exports"],"sources":["../../../lib/utils/stream-buf.js"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nconst Stream = require('readable-stream');\n\nconst utils = require('./utils');\nconst StringBuf = require('./string-buf');\n\n// =============================================================================\n// data chunks - encapsulating incoming data\nclass StringChunk {\n constructor(data, encoding) {\n this._data = data;\n this._encoding = encoding;\n }\n\n get length() {\n return this.toBuffer().length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n return this.toBuffer().copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n if (!this._buffer) {\n this._buffer = Buffer.from(this._data, this._encoding);\n }\n return this._buffer;\n }\n}\n\nclass StringBufChunk {\n constructor(data) {\n this._data = data;\n }\n\n get length() {\n return this._data.length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n // eslint-disable-next-line no-underscore-dangle\n return this._data._buf.copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n return this._data.toBuffer();\n }\n}\n\nclass BufferChunk {\n constructor(data) {\n this._data = data;\n }\n\n get length() {\n return this._data.length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n this._data.copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n return this._data;\n }\n}\n\n// =============================================================================\n// ReadWriteBuf - a single buffer supporting simple read-write\nclass ReadWriteBuf {\n constructor(size) {\n this.size = size;\n // the buffer\n this.buffer = Buffer.alloc(size);\n // read index\n this.iRead = 0;\n // write index\n this.iWrite = 0;\n }\n\n toBuffer() {\n if (this.iRead === 0 && this.iWrite === this.size) {\n return this.buffer;\n }\n\n const buf = Buffer.alloc(this.iWrite - this.iRead);\n this.buffer.copy(buf, 0, this.iRead, this.iWrite);\n return buf;\n }\n\n get length() {\n return this.iWrite - this.iRead;\n }\n\n get eod() {\n return this.iRead === this.iWrite;\n }\n\n get full() {\n return this.iWrite === this.size;\n }\n\n read(size) {\n let buf;\n // read size bytes from buffer and return buffer\n if (size === 0) {\n // special case - return null if no data requested\n return null;\n }\n\n if (size === undefined || size >= this.length) {\n // if no size specified or size is at least what we have then return all of the bytes\n buf = this.toBuffer();\n this.iRead = this.iWrite;\n return buf;\n }\n\n // otherwise return a chunk\n buf = Buffer.alloc(size);\n this.buffer.copy(buf, 0, this.iRead, size);\n this.iRead += size;\n return buf;\n }\n\n write(chunk, offset, length) {\n // write as many bytes from data from optional source offset\n // and return number of bytes written\n const size = Math.min(length, this.size - this.iWrite);\n chunk.copy(this.buffer, this.iWrite, offset, offset + size);\n this.iWrite += size;\n return size;\n }\n}\n\n// =============================================================================\n// StreamBuf - a multi-purpose read-write stream\n// As MemBuf - write as much data as you like. Then call toBuffer() to consolidate\n// As StreamHub - pipe to multiple writables\n// As readable stream - feed data into the writable part and have some other code read from it.\n\n// Note: Not sure why but StreamBuf does not like JS \"class\" sugar. It fails the\n// integration tests\nconst StreamBuf = function(options) {\n options = options || {};\n this.bufSize = options.bufSize || 1024 * 1024;\n this.buffers = [];\n\n // batch mode fills a buffer completely before passing the data on\n // to pipes or 'readable' event listeners\n this.batch = options.batch || false;\n\n this.corked = false;\n // where in the current writable buffer we're up to\n this.inPos = 0;\n\n // where in the current readable buffer we've read up to\n this.outPos = 0;\n\n // consuming pipe streams go here\n this.pipes = [];\n\n // controls emit('data')\n this.paused = false;\n\n this.encoding = null;\n};\n\nutils.inherits(StreamBuf, Stream.Duplex, {\n toBuffer() {\n switch (this.buffers.length) {\n case 0:\n return null;\n case 1:\n return this.buffers[0].toBuffer();\n default:\n return Buffer.concat(this.buffers.map(rwBuf => rwBuf.toBuffer()));\n }\n },\n\n // writable\n // event drain - if write returns false (which it won't), indicates when safe to write again.\n // finish - end() has been called\n // pipe(src) - pipe() has been called on readable\n // unpipe(src) - unpipe() has been called on readable\n // error - duh\n\n _getWritableBuffer() {\n if (this.buffers.length) {\n const last = this.buffers[this.buffers.length - 1];\n if (!last.full) {\n return last;\n }\n }\n const buf = new ReadWriteBuf(this.bufSize);\n this.buffers.push(buf);\n return buf;\n },\n\n async _pipe(chunk) {\n const write = function(pipe) {\n return new Promise(resolve => {\n pipe.write(chunk.toBuffer(), () => {\n resolve();\n });\n });\n };\n await Promise.all(this.pipes.map(write));\n },\n _writeToBuffers(chunk) {\n let inPos = 0;\n const inLen = chunk.length;\n while (inPos < inLen) {\n // find writable buffer\n const buffer = this._getWritableBuffer();\n\n // write some data\n inPos += buffer.write(chunk, inPos, inLen - inPos);\n }\n },\n async write(data, encoding, callback) {\n if (encoding instanceof Function) {\n callback = encoding;\n encoding = 'utf8';\n }\n callback = callback || utils.nop;\n\n // encapsulate data into a chunk\n let chunk;\n if (data instanceof StringBuf) {\n chunk = new StringBufChunk(data);\n } else if (data instanceof Buffer) {\n chunk = new BufferChunk(data);\n } else if (typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer) {\n chunk = new StringChunk(data, encoding);\n } else {\n throw new Error('Chunk must be one of type String, Buffer or StringBuf.');\n }\n\n // now, do something with the chunk\n if (this.pipes.length) {\n if (this.batch) {\n this._writeToBuffers(chunk);\n while (!this.corked && this.buffers.length > 1) {\n this._pipe(this.buffers.shift());\n }\n } else if (!this.corked) {\n await this._pipe(chunk);\n callback();\n } else {\n this._writeToBuffers(chunk);\n process.nextTick(callback);\n }\n } else {\n if (!this.paused) {\n this.emit('data', chunk.toBuffer());\n }\n\n this._writeToBuffers(chunk);\n this.emit('readable');\n }\n\n return true;\n },\n cork() {\n this.corked = true;\n },\n _flush(/* destination */) {\n // if we have comsumers...\n if (this.pipes.length) {\n // and there's stuff not written\n while (this.buffers.length) {\n this._pipe(this.buffers.shift());\n }\n }\n },\n uncork() {\n this.corked = false;\n this._flush();\n },\n end(chunk, encoding, callback) {\n const writeComplete = error => {\n if (error) {\n callback(error);\n } else {\n this._flush();\n this.pipes.forEach(pipe => {\n pipe.end();\n });\n this.emit('finish');\n }\n };\n if (chunk) {\n this.write(chunk, encoding, writeComplete);\n } else {\n writeComplete();\n }\n },\n\n // readable\n // event readable - some data is now available\n // event data - switch to flowing mode - feeds chunks to handler\n // event end - no more data\n // event close - optional, indicates upstream close\n // event error - duh\n read(size) {\n let buffers;\n // read min(buffer, size || infinity)\n if (size) {\n buffers = [];\n while (size && this.buffers.length && !this.buffers[0].eod) {\n const first = this.buffers[0];\n const buffer = first.read(size);\n size -= buffer.length;\n buffers.push(buffer);\n if (first.eod && first.full) {\n this.buffers.shift();\n }\n }\n return Buffer.concat(buffers);\n }\n\n buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean);\n this.buffers = [];\n return Buffer.concat(buffers);\n },\n setEncoding(encoding) {\n // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects\n this.encoding = encoding;\n },\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n isPaused() {\n return !!this.paused;\n },\n pipe(destination) {\n // add destination to pipe list & write current buffer\n this.pipes.push(destination);\n if (!this.paused && this.buffers.length) {\n this.end();\n }\n },\n unpipe(destination) {\n // remove destination from pipe list\n this.pipes = this.pipes.filter(pipe => pipe !== destination);\n },\n unshift(/* chunk */) {\n // some numpty has read some data that's not for them and they want to put it back!\n // Might implement this some day\n throw new Error('Not Implemented');\n },\n wrap(/* stream */) {\n // not implemented\n throw new Error('Not Implemented');\n },\n});\n\nmodule.exports = StreamBuf;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/string-buf.js b/node_backend/node_modules/exceljs/dist/es5/utils/string-buf.js new file mode 100644 index 0000000000000000000000000000000000000000..066bb635d878305a967a8d9e1ad81ff2e345f305 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/string-buf.js @@ -0,0 +1,73 @@ +"use strict"; + +// StringBuf - a way to keep string memory operations to a minimum +// while building the strings for the xml files +class StringBuf { + constructor(options) { + this._buf = Buffer.alloc(options && options.size || 16384); + this._encoding = options && options.encoding || 'utf8'; + + // where in the buffer we are at + this._inPos = 0; + + // for use by toBuffer() + this._buffer = undefined; + } + get length() { + return this._inPos; + } + get capacity() { + return this._buf.length; + } + get buffer() { + return this._buf; + } + toBuffer() { + // return the current data as a single enclosing buffer + if (!this._buffer) { + this._buffer = Buffer.alloc(this.length); + this._buf.copy(this._buffer, 0, 0, this.length); + } + return this._buffer; + } + reset(position) { + position = position || 0; + this._buffer = undefined; + this._inPos = position; + } + _grow(min) { + let size = this._buf.length * 2; + while (size < min) { + size *= 2; + } + const buf = Buffer.alloc(size); + this._buf.copy(buf, 0); + this._buf = buf; + } + addText(text) { + this._buffer = undefined; + let inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding); + + // if we've hit (or nearing capacity), grow the buf + while (inPos >= this._buf.length - 4) { + this._grow(this._inPos + text.length); + + // keep trying to write until we've completely written the text + inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding); + } + this._inPos = inPos; + } + addStringBuf(inBuf) { + if (inBuf.length) { + this._buffer = undefined; + if (this.length + inBuf.length > this.capacity) { + this._grow(this.length + inBuf.length); + } + // eslint-disable-next-line no-underscore-dangle + inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length); + this._inPos += inBuf.length; + } + } +} +module.exports = StringBuf; +//# sourceMappingURL=string-buf.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/string-buf.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/string-buf.js.map new file mode 100644 index 0000000000000000000000000000000000000000..99fba5bb9c387e1008b3b223d1cbae1ad60c3d03 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/string-buf.js.map @@ -0,0 +1 @@ +{"version":3,"file":"string-buf.js","names":["StringBuf","constructor","options","_buf","Buffer","alloc","size","_encoding","encoding","_inPos","_buffer","undefined","length","capacity","buffer","toBuffer","copy","reset","position","_grow","min","buf","addText","text","inPos","write","addStringBuf","inBuf","module","exports"],"sources":["../../../lib/utils/string-buf.js"],"sourcesContent":["// StringBuf - a way to keep string memory operations to a minimum\n// while building the strings for the xml files\nclass StringBuf {\n constructor(options) {\n this._buf = Buffer.alloc((options && options.size) || 16384);\n this._encoding = (options && options.encoding) || 'utf8';\n\n // where in the buffer we are at\n this._inPos = 0;\n\n // for use by toBuffer()\n this._buffer = undefined;\n }\n\n get length() {\n return this._inPos;\n }\n\n get capacity() {\n return this._buf.length;\n }\n\n get buffer() {\n return this._buf;\n }\n\n toBuffer() {\n // return the current data as a single enclosing buffer\n if (!this._buffer) {\n this._buffer = Buffer.alloc(this.length);\n this._buf.copy(this._buffer, 0, 0, this.length);\n }\n return this._buffer;\n }\n\n reset(position) {\n position = position || 0;\n this._buffer = undefined;\n this._inPos = position;\n }\n\n _grow(min) {\n let size = this._buf.length * 2;\n while (size < min) {\n size *= 2;\n }\n const buf = Buffer.alloc(size);\n this._buf.copy(buf, 0);\n this._buf = buf;\n }\n\n addText(text) {\n this._buffer = undefined;\n\n let inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\n\n // if we've hit (or nearing capacity), grow the buf\n while (inPos >= this._buf.length - 4) {\n this._grow(this._inPos + text.length);\n\n // keep trying to write until we've completely written the text\n inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\n }\n\n this._inPos = inPos;\n }\n\n addStringBuf(inBuf) {\n if (inBuf.length) {\n this._buffer = undefined;\n\n if (this.length + inBuf.length > this.capacity) {\n this._grow(this.length + inBuf.length);\n }\n // eslint-disable-next-line no-underscore-dangle\n inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length);\n this._inPos += inBuf.length;\n }\n }\n}\n\nmodule.exports = StringBuf;\n"],"mappings":";;AAAA;AACA;AACA,MAAMA,SAAS,CAAC;EACdC,WAAWA,CAACC,OAAO,EAAE;IACnB,IAAI,CAACC,IAAI,GAAGC,MAAM,CAACC,KAAK,CAAEH,OAAO,IAAIA,OAAO,CAACI,IAAI,IAAK,KAAK,CAAC;IAC5D,IAAI,CAACC,SAAS,GAAIL,OAAO,IAAIA,OAAO,CAACM,QAAQ,IAAK,MAAM;;IAExD;IACA,IAAI,CAACC,MAAM,GAAG,CAAC;;IAEf;IACA,IAAI,CAACC,OAAO,GAAGC,SAAS;EAC1B;EAEA,IAAIC,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAACH,MAAM;EACpB;EAEA,IAAII,QAAQA,CAAA,EAAG;IACb,OAAO,IAAI,CAACV,IAAI,CAACS,MAAM;EACzB;EAEA,IAAIE,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAACX,IAAI;EAClB;EAEAY,QAAQA,CAAA,EAAG;IACT;IACA,IAAI,CAAC,IAAI,CAACL,OAAO,EAAE;MACjB,IAAI,CAACA,OAAO,GAAGN,MAAM,CAACC,KAAK,CAAC,IAAI,CAACO,MAAM,CAAC;MACxC,IAAI,CAACT,IAAI,CAACa,IAAI,CAAC,IAAI,CAACN,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAACE,MAAM,CAAC;IACjD;IACA,OAAO,IAAI,CAACF,OAAO;EACrB;EAEAO,KAAKA,CAACC,QAAQ,EAAE;IACdA,QAAQ,GAAGA,QAAQ,IAAI,CAAC;IACxB,IAAI,CAACR,OAAO,GAAGC,SAAS;IACxB,IAAI,CAACF,MAAM,GAAGS,QAAQ;EACxB;EAEAC,KAAKA,CAACC,GAAG,EAAE;IACT,IAAId,IAAI,GAAG,IAAI,CAACH,IAAI,CAACS,MAAM,GAAG,CAAC;IAC/B,OAAON,IAAI,GAAGc,GAAG,EAAE;MACjBd,IAAI,IAAI,CAAC;IACX;IACA,MAAMe,GAAG,GAAGjB,MAAM,CAACC,KAAK,CAACC,IAAI,CAAC;IAC9B,IAAI,CAACH,IAAI,CAACa,IAAI,CAACK,GAAG,EAAE,CAAC,CAAC;IACtB,IAAI,CAAClB,IAAI,GAAGkB,GAAG;EACjB;EAEAC,OAAOA,CAACC,IAAI,EAAE;IACZ,IAAI,CAACb,OAAO,GAAGC,SAAS;IAExB,IAAIa,KAAK,GAAG,IAAI,CAACf,MAAM,GAAG,IAAI,CAACN,IAAI,CAACsB,KAAK,CAACF,IAAI,EAAE,IAAI,CAACd,MAAM,EAAE,IAAI,CAACF,SAAS,CAAC;;IAE5E;IACA,OAAOiB,KAAK,IAAI,IAAI,CAACrB,IAAI,CAACS,MAAM,GAAG,CAAC,EAAE;MACpC,IAAI,CAACO,KAAK,CAAC,IAAI,CAACV,MAAM,GAAGc,IAAI,CAACX,MAAM,CAAC;;MAErC;MACAY,KAAK,GAAG,IAAI,CAACf,MAAM,GAAG,IAAI,CAACN,IAAI,CAACsB,KAAK,CAACF,IAAI,EAAE,IAAI,CAACd,MAAM,EAAE,IAAI,CAACF,SAAS,CAAC;IAC1E;IAEA,IAAI,CAACE,MAAM,GAAGe,KAAK;EACrB;EAEAE,YAAYA,CAACC,KAAK,EAAE;IAClB,IAAIA,KAAK,CAACf,MAAM,EAAE;MAChB,IAAI,CAACF,OAAO,GAAGC,SAAS;MAExB,IAAI,IAAI,CAACC,MAAM,GAAGe,KAAK,CAACf,MAAM,GAAG,IAAI,CAACC,QAAQ,EAAE;QAC9C,IAAI,CAACM,KAAK,CAAC,IAAI,CAACP,MAAM,GAAGe,KAAK,CAACf,MAAM,CAAC;MACxC;MACA;MACAe,KAAK,CAACxB,IAAI,CAACa,IAAI,CAAC,IAAI,CAACb,IAAI,EAAE,IAAI,CAACM,MAAM,EAAE,CAAC,EAAEkB,KAAK,CAACf,MAAM,CAAC;MACxD,IAAI,CAACH,MAAM,IAAIkB,KAAK,CAACf,MAAM;IAC7B;EACF;AACF;AAEAgB,MAAM,CAACC,OAAO,GAAG7B,SAAS"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/string-builder.js b/node_backend/node_modules/exceljs/dist/es5/utils/string-builder.js new file mode 100644 index 0000000000000000000000000000000000000000..45625dc3fd39e310bbab9e791e46a54ee23e0b65 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/string-builder.js @@ -0,0 +1,32 @@ +"use strict"; + +// StringBuilder - a way to keep string memory operations to a minimum +// while building the strings for the xml files +class StringBuilder { + constructor() { + this.reset(); + } + get length() { + return this._buf.length; + } + toString() { + return this._buf.join(''); + } + reset(position) { + if (position) { + while (this._buf.length > position) { + this._buf.pop(); + } + } else { + this._buf = []; + } + } + addText(text) { + this._buf.push(text); + } + addStringBuf(inBuf) { + this._buf.push(inBuf.toString()); + } +} +module.exports = StringBuilder; +//# sourceMappingURL=string-builder.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/string-builder.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/string-builder.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a0c1273c6fe66e7eca05453656da31db32944b33 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/string-builder.js.map @@ -0,0 +1 @@ +{"version":3,"file":"string-builder.js","names":["StringBuilder","constructor","reset","length","_buf","toString","join","position","pop","addText","text","push","addStringBuf","inBuf","module","exports"],"sources":["../../../lib/utils/string-builder.js"],"sourcesContent":["// StringBuilder - a way to keep string memory operations to a minimum\n// while building the strings for the xml files\nclass StringBuilder {\n constructor() {\n this.reset();\n }\n\n get length() {\n return this._buf.length;\n }\n\n toString() {\n return this._buf.join('');\n }\n\n reset(position) {\n if (position) {\n while (this._buf.length > position) {\n this._buf.pop();\n }\n } else {\n this._buf = [];\n }\n }\n\n addText(text) {\n this._buf.push(text);\n }\n\n addStringBuf(inBuf) {\n this._buf.push(inBuf.toString());\n }\n}\n\nmodule.exports = StringBuilder;\n"],"mappings":";;AAAA;AACA;AACA,MAAMA,aAAa,CAAC;EAClBC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,KAAK,CAAC,CAAC;EACd;EAEA,IAAIC,MAAMA,CAAA,EAAG;IACX,OAAO,IAAI,CAACC,IAAI,CAACD,MAAM;EACzB;EAEAE,QAAQA,CAAA,EAAG;IACT,OAAO,IAAI,CAACD,IAAI,CAACE,IAAI,CAAC,EAAE,CAAC;EAC3B;EAEAJ,KAAKA,CAACK,QAAQ,EAAE;IACd,IAAIA,QAAQ,EAAE;MACZ,OAAO,IAAI,CAACH,IAAI,CAACD,MAAM,GAAGI,QAAQ,EAAE;QAClC,IAAI,CAACH,IAAI,CAACI,GAAG,CAAC,CAAC;MACjB;IACF,CAAC,MAAM;MACL,IAAI,CAACJ,IAAI,GAAG,EAAE;IAChB;EACF;EAEAK,OAAOA,CAACC,IAAI,EAAE;IACZ,IAAI,CAACN,IAAI,CAACO,IAAI,CAACD,IAAI,CAAC;EACtB;EAEAE,YAAYA,CAACC,KAAK,EAAE;IAClB,IAAI,CAACT,IAAI,CAACO,IAAI,CAACE,KAAK,CAACR,QAAQ,CAAC,CAAC,CAAC;EAClC;AACF;AAEAS,MAAM,CAACC,OAAO,GAAGf,aAAa"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js b/node_backend/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js new file mode 100644 index 0000000000000000000000000000000000000000..933ca594a61ce8f05af97799dd3229ed5b8a475d --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js @@ -0,0 +1,61 @@ +"use strict"; + +const events = require('events'); + +// ============================================================================= +// StutteredPipe - Used to slow down streaming so GC can get a look in +class StutteredPipe extends events.EventEmitter { + constructor(readable, writable, options) { + super(); + options = options || {}; + this.readable = readable; + this.writable = writable; + this.bufSize = options.bufSize || 16384; + this.autoPause = options.autoPause || false; + this.paused = false; + this.eod = false; + this.scheduled = null; + readable.on('end', () => { + this.eod = true; + writable.end(); + }); + + // need to have some way to communicate speed of stream + // back from the consumer + readable.on('readable', () => { + if (!this.paused) { + this.resume(); + } + }); + this._schedule(); + } + pause() { + this.paused = true; + } + resume() { + if (!this.eod) { + if (this.scheduled !== null) { + clearImmediate(this.scheduled); + } + this._schedule(); + } + } + _schedule() { + this.scheduled = setImmediate(() => { + this.scheduled = null; + if (!this.eod && !this.paused) { + const data = this.readable.read(this.bufSize); + if (data && data.length) { + this.writable.write(data); + if (!this.paused && !this.autoPause) { + this._schedule(); + } + } else if (!this.paused) { + this._schedule(); + } + } + }); + } +} +module.exports = StutteredPipe; +//# sourceMappingURL=stuttered-pipe.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b3d6a91689340e146c5a81c3e81ec67ad9675931 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stuttered-pipe.js","names":["events","require","StutteredPipe","EventEmitter","constructor","readable","writable","options","bufSize","autoPause","paused","eod","scheduled","on","end","resume","_schedule","pause","clearImmediate","setImmediate","data","read","length","write","module","exports"],"sources":["../../../lib/utils/stuttered-pipe.js"],"sourcesContent":["const events = require('events');\n\n// =============================================================================\n// StutteredPipe - Used to slow down streaming so GC can get a look in\nclass StutteredPipe extends events.EventEmitter {\n constructor(readable, writable, options) {\n super();\n\n options = options || {};\n\n this.readable = readable;\n this.writable = writable;\n this.bufSize = options.bufSize || 16384;\n this.autoPause = options.autoPause || false;\n\n this.paused = false;\n this.eod = false;\n this.scheduled = null;\n\n readable.on('end', () => {\n this.eod = true;\n writable.end();\n });\n\n // need to have some way to communicate speed of stream\n // back from the consumer\n readable.on('readable', () => {\n if (!this.paused) {\n this.resume();\n }\n });\n this._schedule();\n }\n\n pause() {\n this.paused = true;\n }\n\n resume() {\n if (!this.eod) {\n if (this.scheduled !== null) {\n clearImmediate(this.scheduled);\n }\n this._schedule();\n }\n }\n\n _schedule() {\n this.scheduled = setImmediate(() => {\n this.scheduled = null;\n if (!this.eod && !this.paused) {\n const data = this.readable.read(this.bufSize);\n if (data && data.length) {\n this.writable.write(data);\n\n if (!this.paused && !this.autoPause) {\n this._schedule();\n }\n } else if (!this.paused) {\n this._schedule();\n }\n }\n });\n }\n}\n\nmodule.exports = StutteredPipe;\n"],"mappings":";;AAAA,MAAMA,MAAM,GAAGC,OAAO,CAAC,QAAQ,CAAC;;AAEhC;AACA;AACA,MAAMC,aAAa,SAASF,MAAM,CAACG,YAAY,CAAC;EAC9CC,WAAWA,CAACC,QAAQ,EAAEC,QAAQ,EAAEC,OAAO,EAAE;IACvC,KAAK,CAAC,CAAC;IAEPA,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;IAEvB,IAAI,CAACF,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACE,OAAO,GAAGD,OAAO,CAACC,OAAO,IAAI,KAAK;IACvC,IAAI,CAACC,SAAS,GAAGF,OAAO,CAACE,SAAS,IAAI,KAAK;IAE3C,IAAI,CAACC,MAAM,GAAG,KAAK;IACnB,IAAI,CAACC,GAAG,GAAG,KAAK;IAChB,IAAI,CAACC,SAAS,GAAG,IAAI;IAErBP,QAAQ,CAACQ,EAAE,CAAC,KAAK,EAAE,MAAM;MACvB,IAAI,CAACF,GAAG,GAAG,IAAI;MACfL,QAAQ,CAACQ,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC;;IAEF;IACA;IACAT,QAAQ,CAACQ,EAAE,CAAC,UAAU,EAAE,MAAM;MAC5B,IAAI,CAAC,IAAI,CAACH,MAAM,EAAE;QAChB,IAAI,CAACK,MAAM,CAAC,CAAC;MACf;IACF,CAAC,CAAC;IACF,IAAI,CAACC,SAAS,CAAC,CAAC;EAClB;EAEAC,KAAKA,CAAA,EAAG;IACN,IAAI,CAACP,MAAM,GAAG,IAAI;EACpB;EAEAK,MAAMA,CAAA,EAAG;IACP,IAAI,CAAC,IAAI,CAACJ,GAAG,EAAE;MACb,IAAI,IAAI,CAACC,SAAS,KAAK,IAAI,EAAE;QAC3BM,cAAc,CAAC,IAAI,CAACN,SAAS,CAAC;MAChC;MACA,IAAI,CAACI,SAAS,CAAC,CAAC;IAClB;EACF;EAEAA,SAASA,CAAA,EAAG;IACV,IAAI,CAACJ,SAAS,GAAGO,YAAY,CAAC,MAAM;MAClC,IAAI,CAACP,SAAS,GAAG,IAAI;MACrB,IAAI,CAAC,IAAI,CAACD,GAAG,IAAI,CAAC,IAAI,CAACD,MAAM,EAAE;QAC7B,MAAMU,IAAI,GAAG,IAAI,CAACf,QAAQ,CAACgB,IAAI,CAAC,IAAI,CAACb,OAAO,CAAC;QAC7C,IAAIY,IAAI,IAAIA,IAAI,CAACE,MAAM,EAAE;UACvB,IAAI,CAAChB,QAAQ,CAACiB,KAAK,CAACH,IAAI,CAAC;UAEzB,IAAI,CAAC,IAAI,CAACV,MAAM,IAAI,CAAC,IAAI,CAACD,SAAS,EAAE;YACnC,IAAI,CAACO,SAAS,CAAC,CAAC;UAClB;QACF,CAAC,MAAM,IAAI,CAAC,IAAI,CAACN,MAAM,EAAE;UACvB,IAAI,CAACM,SAAS,CAAC,CAAC;QAClB;MACF;IACF,CAAC,CAAC;EACJ;AACF;AAEAQ,MAAM,CAACC,OAAO,GAAGvB,aAAa"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/typed-stack.js b/node_backend/node_modules/exceljs/dist/es5/utils/typed-stack.js new file mode 100644 index 0000000000000000000000000000000000000000..969b47508cfe4d0512b0b0beb1e3acc38d534399 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/typed-stack.js @@ -0,0 +1,23 @@ +"use strict"; + +class TypedStack { + constructor(type) { + this._type = type; + this._stack = []; + } + get size() { + return this._stack.length; + } + pop() { + const tos = this._stack.pop(); + return tos || new this._type(); + } + push(instance) { + if (!(instance instanceof this._type)) { + throw new Error('Invalid type pushed to TypedStack'); + } + this._stack.push(instance); + } +} +module.exports = TypedStack; +//# sourceMappingURL=typed-stack.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/typed-stack.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/typed-stack.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2ad4b39f69afbbee6a47925e834000038f6bd178 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/typed-stack.js.map @@ -0,0 +1 @@ +{"version":3,"file":"typed-stack.js","names":["TypedStack","constructor","type","_type","_stack","size","length","pop","tos","push","instance","Error","module","exports"],"sources":["../../../lib/utils/typed-stack.js"],"sourcesContent":["class TypedStack {\n constructor(type) {\n this._type = type;\n this._stack = [];\n }\n\n get size() {\n return this._stack.length;\n }\n\n pop() {\n const tos = this._stack.pop();\n return tos || new this._type();\n }\n\n push(instance) {\n if (!(instance instanceof this._type)) {\n throw new Error('Invalid type pushed to TypedStack');\n }\n this._stack.push(instance);\n }\n}\n\nmodule.exports = TypedStack;\n"],"mappings":";;AAAA,MAAMA,UAAU,CAAC;EACfC,WAAWA,CAACC,IAAI,EAAE;IAChB,IAAI,CAACC,KAAK,GAAGD,IAAI;IACjB,IAAI,CAACE,MAAM,GAAG,EAAE;EAClB;EAEA,IAAIC,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACD,MAAM,CAACE,MAAM;EAC3B;EAEAC,GAAGA,CAAA,EAAG;IACJ,MAAMC,GAAG,GAAG,IAAI,CAACJ,MAAM,CAACG,GAAG,CAAC,CAAC;IAC7B,OAAOC,GAAG,IAAI,IAAI,IAAI,CAACL,KAAK,CAAC,CAAC;EAChC;EAEAM,IAAIA,CAACC,QAAQ,EAAE;IACb,IAAI,EAAEA,QAAQ,YAAY,IAAI,CAACP,KAAK,CAAC,EAAE;MACrC,MAAM,IAAIQ,KAAK,CAAC,mCAAmC,CAAC;IACtD;IACA,IAAI,CAACP,MAAM,CAACK,IAAI,CAACC,QAAQ,CAAC;EAC5B;AACF;AAEAE,MAAM,CAACC,OAAO,GAAGb,UAAU"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/under-dash.js b/node_backend/node_modules/exceljs/dist/es5/utils/under-dash.js new file mode 100644 index 0000000000000000000000000000000000000000..6361e754b2c66572cd785727912f8d57eb896b07 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/under-dash.js @@ -0,0 +1,168 @@ +"use strict"; + +const { + toString +} = Object.prototype; +const escapeHtmlRegex = /["&<>]/; +const _ = { + each: function each(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + obj.forEach(cb); + } else { + Object.keys(obj).forEach(key => { + cb(obj[key], key); + }); + } + } + }, + some: function some(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + return obj.some(cb); + } + return Object.keys(obj).some(key => cb(obj[key], key)); + } + return false; + }, + every: function every(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + return obj.every(cb); + } + return Object.keys(obj).every(key => cb(obj[key], key)); + } + return true; + }, + map: function map(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + return obj.map(cb); + } + return Object.keys(obj).map(key => cb(obj[key], key)); + } + return []; + }, + keyBy(a, p) { + return a.reduce((o, v) => { + o[v[p]] = v; + return o; + }, {}); + }, + isEqual: function isEqual(a, b) { + const aType = typeof a; + const bType = typeof b; + const aArray = Array.isArray(a); + const bArray = Array.isArray(b); + let keys; + if (aType !== bType) { + return false; + } + switch (typeof a) { + case 'object': + if (aArray || bArray) { + if (aArray && bArray) { + return a.length === b.length && a.every((aValue, index) => { + const bValue = b[index]; + return _.isEqual(aValue, bValue); + }); + } + return false; + } + if (a === null || b === null) { + return a === b; + } + + // Compare object keys and values + keys = Object.keys(a); + if (Object.keys(b).length !== keys.length) { + return false; + } + for (const key of keys) { + if (!b.hasOwnProperty(key)) { + return false; + } + } + return _.every(a, (aValue, key) => { + const bValue = b[key]; + return _.isEqual(aValue, bValue); + }); + default: + return a === b; + } + }, + escapeHtml(html) { + const regexResult = escapeHtmlRegex.exec(html); + if (!regexResult) return html; + let result = ''; + let escape = ''; + let lastIndex = 0; + let i = regexResult.index; + for (; i < html.length; i++) { + switch (html.charAt(i)) { + case '"': + escape = '"'; + break; + case '&': + escape = '&'; + break; + case '\'': + escape = '''; + break; + case '<': + escape = '<'; + break; + case '>': + escape = '>'; + break; + default: + continue; + } + if (lastIndex !== i) result += html.substring(lastIndex, i); + lastIndex = i + 1; + result += escape; + } + if (lastIndex !== i) return result + html.substring(lastIndex, i); + return result; + }, + strcmp(a, b) { + if (a < b) return -1; + if (a > b) return 1; + return 0; + }, + isUndefined(val) { + return toString.call(val) === '[object Undefined]'; + }, + isObject(val) { + return toString.call(val) === '[object Object]'; + }, + deepMerge() { + const target = arguments[0] || {}; + const { + length + } = arguments; + // eslint-disable-next-line one-var + let src, clone, copyIsArray; + function assignValue(val, key) { + src = target[key]; + copyIsArray = Array.isArray(val); + if (_.isObject(val) || copyIsArray) { + if (copyIsArray) { + copyIsArray = false; + clone = src && Array.isArray(src) ? src : []; + } else { + clone = src && _.isObject(src) ? src : {}; + } + target[key] = _.deepMerge(clone, val); + } else if (!_.isUndefined(val)) { + target[key] = val; + } + } + for (let i = 0; i < length; i++) { + _.each(arguments[i], assignValue); + } + return target; + } +}; +module.exports = _; +//# sourceMappingURL=under-dash.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/under-dash.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/under-dash.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e90c5368154d22d54b362475929c45339b9274e3 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/under-dash.js.map @@ -0,0 +1 @@ +{"version":3,"file":"under-dash.js","names":["toString","Object","prototype","escapeHtmlRegex","_","each","obj","cb","Array","isArray","forEach","keys","key","some","every","map","keyBy","a","p","reduce","o","v","isEqual","b","aType","bType","aArray","bArray","length","aValue","index","bValue","hasOwnProperty","escapeHtml","html","regexResult","exec","result","escape","lastIndex","i","charAt","substring","strcmp","isUndefined","val","call","isObject","deepMerge","target","arguments","src","clone","copyIsArray","assignValue","module","exports"],"sources":["../../../lib/utils/under-dash.js"],"sourcesContent":["const {toString} = Object.prototype;\nconst escapeHtmlRegex = /[\"&<>]/;\nconst _ = {\n each: function each(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n obj.forEach(cb);\n } else {\n Object.keys(obj).forEach(key => {\n cb(obj[key], key);\n });\n }\n }\n },\n\n some: function some(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.some(cb);\n }\n return Object.keys(obj).some(key => cb(obj[key], key));\n }\n return false;\n },\n\n every: function every(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.every(cb);\n }\n return Object.keys(obj).every(key => cb(obj[key], key));\n }\n return true;\n },\n\n map: function map(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.map(cb);\n }\n return Object.keys(obj).map(key => cb(obj[key], key));\n }\n return [];\n },\n\n keyBy(a, p) {\n return a.reduce((o, v) => {\n o[v[p]] = v;\n return o;\n }, {});\n },\n\n isEqual: function isEqual(a, b) {\n const aType = typeof a;\n const bType = typeof b;\n const aArray = Array.isArray(a);\n const bArray = Array.isArray(b);\n let keys;\n\n if (aType !== bType) {\n return false;\n }\n switch (typeof a) {\n case 'object':\n if (aArray || bArray) {\n if (aArray && bArray) {\n return (\n a.length === b.length &&\n a.every((aValue, index) => {\n const bValue = b[index];\n return _.isEqual(aValue, bValue);\n })\n );\n }\n return false;\n }\n\n if (a === null || b === null) {\n return a === b;\n }\n\n // Compare object keys and values\n keys = Object.keys(a);\n\n if (Object.keys(b).length !== keys.length) {\n return false;\n }\n\n for (const key of keys) {\n if (!b.hasOwnProperty(key)) {\n return false;\n }\n }\n\n return _.every(a, (aValue, key) => {\n const bValue = b[key];\n return _.isEqual(aValue, bValue);\n });\n\n default:\n return a === b;\n }\n },\n\n escapeHtml(html) {\n const regexResult = escapeHtmlRegex.exec(html);\n if (!regexResult) return html;\n\n let result = '';\n let escape = '';\n let lastIndex = 0;\n let i = regexResult.index;\n for (; i < html.length; i++) {\n switch (html.charAt(i)) {\n case '\"':\n escape = '"';\n break;\n case '&':\n escape = '&';\n break;\n case '\\'':\n escape = ''';\n break;\n case '<':\n escape = '<';\n break;\n case '>':\n escape = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== i) result += html.substring(lastIndex, i);\n lastIndex = i + 1;\n result += escape;\n }\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\n return result;\n },\n\n strcmp(a, b) {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n },\n\n isUndefined(val) {\n return toString.call(val) === '[object Undefined]';\n },\n\n isObject(val) {\n return toString.call(val) === '[object Object]';\n },\n\n deepMerge() {\n const target = arguments[0] || {};\n const {length} = arguments;\n // eslint-disable-next-line one-var\n let src, clone, copyIsArray;\n\n function assignValue(val, key) {\n src = target[key];\n copyIsArray = Array.isArray(val);\n if (_.isObject(val) || copyIsArray) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && Array.isArray(src) ? src : [];\n } else {\n clone = src && _.isObject(src) ? src : {};\n }\n target[key] = _.deepMerge(clone, val);\n } else if (!_.isUndefined(val)) {\n target[key] = val;\n }\n }\n\n for (let i = 0; i < length; i++) {\n _.each(arguments[i], assignValue);\n }\n return target;\n },\n};\n\nmodule.exports = _;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/utils.js b/node_backend/node_modules/exceljs/dist/es5/utils/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..121b1256a0fdce7e405821924ad76433058c989c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/utils.js @@ -0,0 +1,171 @@ +"use strict"; + +const fs = require('fs'); + +// useful stuff +const inherits = function (cls, superCtor, statics, prototype) { + // eslint-disable-next-line no-underscore-dangle + cls.super_ = superCtor; + if (!prototype) { + prototype = statics; + statics = null; + } + if (statics) { + Object.keys(statics).forEach(i => { + Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i)); + }); + } + const properties = { + constructor: { + value: cls, + enumerable: false, + writable: false, + configurable: true + } + }; + if (prototype) { + Object.keys(prototype).forEach(i => { + properties[i] = Object.getOwnPropertyDescriptor(prototype, i); + }); + } + cls.prototype = Object.create(superCtor.prototype, properties); +}; + +// eslint-disable-next-line no-control-regex +const xmlDecodeRegex = /[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/; +const utils = { + nop() {}, + promiseImmediate(value) { + return new Promise(resolve => { + if (global.setImmediate) { + setImmediate(() => { + resolve(value); + }); + } else { + // poorman's setImmediate - must wait at least 1ms + setTimeout(() => { + resolve(value); + }, 1); + } + }); + }, + inherits, + dateToExcel(d, date1904) { + return 25569 + d.getTime() / (24 * 3600 * 1000) - (date1904 ? 1462 : 0); + }, + excelToDate(v, date1904) { + const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000); + return new Date(millisecondSinceEpoch); + }, + parsePath(filepath) { + const last = filepath.lastIndexOf('/'); + return { + path: filepath.substring(0, last), + name: filepath.substring(last + 1) + }; + }, + getRelsPath(filepath) { + const path = utils.parsePath(filepath); + return `${path.path}/_rels/${path.name}.rels`; + }, + xmlEncode(text) { + const regexResult = xmlDecodeRegex.exec(text); + if (!regexResult) return text; + let result = ''; + let escape = ''; + let lastIndex = 0; + let i = regexResult.index; + for (; i < text.length; i++) { + const charCode = text.charCodeAt(i); + switch (charCode) { + case 34: + // " + escape = '"'; + break; + case 38: + // & + escape = '&'; + break; + case 39: + // ' + escape = '''; + break; + case 60: + // < + escape = '<'; + break; + case 62: + // > + escape = '>'; + break; + case 127: + escape = ''; + break; + default: + { + if (charCode <= 31 && (charCode <= 8 || charCode >= 11 && charCode !== 13)) { + escape = ''; + break; + } + continue; + } + } + if (lastIndex !== i) result += text.substring(lastIndex, i); + lastIndex = i + 1; + if (escape) result += escape; + } + if (lastIndex !== i) return result + text.substring(lastIndex, i); + return result; + }, + xmlDecode(text) { + return text.replace(/&([a-z]*);/g, c => { + switch (c) { + case '<': + return '<'; + case '>': + return '>'; + case '&': + return '&'; + case ''': + return '\''; + case '"': + return '"'; + default: + return c; + } + }); + }, + validInt(value) { + const i = parseInt(value, 10); + return !Number.isNaN(i) ? i : 0; + }, + isDateFmt(fmt) { + if (!fmt) { + return false; + } + + // must remove all chars inside quotes and [] + fmt = fmt.replace(/\[[^\]]*]/g, ''); + fmt = fmt.replace(/"[^"]*"/g, ''); + // then check for date formatting chars + const result = fmt.match(/[ymdhMsb]+/) !== null; + return result; + }, + fs: { + exists(path) { + return new Promise(resolve => { + fs.access(path, fs.constants.F_OK, err => { + resolve(!err); + }); + }); + } + }, + toIsoDateString(dt) { + return dt.toIsoString().subsstr(0, 10); + }, + parseBoolean(value) { + return value === true || value === 'true' || value === 1 || value === '1'; + } +}; +module.exports = utils; +//# sourceMappingURL=utils.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/utils.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/utils.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6e9c5046e02d75536c423652a4042252c4bfbfb8 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","names":["fs","require","inherits","cls","superCtor","statics","prototype","super_","Object","keys","forEach","i","defineProperty","getOwnPropertyDescriptor","properties","constructor","value","enumerable","writable","configurable","create","xmlDecodeRegex","utils","nop","promiseImmediate","Promise","resolve","global","setImmediate","setTimeout","dateToExcel","d","date1904","getTime","excelToDate","v","millisecondSinceEpoch","Math","round","Date","parsePath","filepath","last","lastIndexOf","path","substring","name","getRelsPath","xmlEncode","text","regexResult","exec","result","escape","lastIndex","index","length","charCode","charCodeAt","xmlDecode","replace","c","validInt","parseInt","Number","isNaN","isDateFmt","fmt","match","exists","access","constants","F_OK","err","toIsoDateString","dt","toIsoString","subsstr","parseBoolean","module","exports"],"sources":["../../../lib/utils/utils.js"],"sourcesContent":["const fs = require('fs');\n\n// useful stuff\nconst inherits = function(cls, superCtor, statics, prototype) {\n // eslint-disable-next-line no-underscore-dangle\n cls.super_ = superCtor;\n\n if (!prototype) {\n prototype = statics;\n statics = null;\n }\n\n if (statics) {\n Object.keys(statics).forEach(i => {\n Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));\n });\n }\n\n const properties = {\n constructor: {\n value: cls,\n enumerable: false,\n writable: false,\n configurable: true,\n },\n };\n if (prototype) {\n Object.keys(prototype).forEach(i => {\n properties[i] = Object.getOwnPropertyDescriptor(prototype, i);\n });\n }\n\n cls.prototype = Object.create(superCtor.prototype, properties);\n};\n\n// eslint-disable-next-line no-control-regex\nconst xmlDecodeRegex = /[<>&'\"\\x7F\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]/;\nconst utils = {\n nop() {},\n promiseImmediate(value) {\n return new Promise(resolve => {\n if (global.setImmediate) {\n setImmediate(() => {\n resolve(value);\n });\n } else {\n // poorman's setImmediate - must wait at least 1ms\n setTimeout(() => {\n resolve(value);\n }, 1);\n }\n });\n },\n inherits,\n dateToExcel(d, date1904) {\n return 25569 + ( d.getTime() / (24 * 3600 * 1000) ) - (date1904 ? 1462 : 0);\n },\n excelToDate(v, date1904) {\n const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);\n return new Date(millisecondSinceEpoch);\n },\n parsePath(filepath) {\n const last = filepath.lastIndexOf('/');\n return {\n path: filepath.substring(0, last),\n name: filepath.substring(last + 1),\n };\n },\n getRelsPath(filepath) {\n const path = utils.parsePath(filepath);\n return `${path.path}/_rels/${path.name}.rels`;\n },\n xmlEncode(text) {\n const regexResult = xmlDecodeRegex.exec(text);\n if (!regexResult) return text;\n\n let result = '';\n let escape = '';\n let lastIndex = 0;\n let i = regexResult.index;\n for (; i < text.length; i++) {\n const charCode = text.charCodeAt(i);\n switch (charCode) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n case 127:\n escape = '';\n break;\n default: {\n if (charCode <= 31 && (charCode <= 8 || (charCode >= 11 && charCode !== 13))) {\n escape = '';\n break;\n }\n continue;\n }\n }\n if (lastIndex !== i) result += text.substring(lastIndex, i);\n lastIndex = i + 1;\n if (escape) result += escape;\n }\n if (lastIndex !== i) return result + text.substring(lastIndex, i);\n return result;\n },\n xmlDecode(text) {\n return text.replace(/&([a-z]*);/g, c => {\n switch (c) {\n case '<':\n return '<';\n case '>':\n return '>';\n case '&':\n return '&';\n case ''':\n return '\\'';\n case '"':\n return '\"';\n default:\n return c;\n }\n });\n },\n validInt(value) {\n const i = parseInt(value, 10);\n return !Number.isNaN(i) ? i : 0;\n },\n\n isDateFmt(fmt) {\n if (!fmt) {\n return false;\n }\n\n // must remove all chars inside quotes and []\n fmt = fmt.replace(/\\[[^\\]]*]/g, '');\n fmt = fmt.replace(/\"[^\"]*\"/g, '');\n // then check for date formatting chars\n const result = fmt.match(/[ymdhMsb]+/) !== null;\n return result;\n },\n\n fs: {\n exists(path) {\n return new Promise(resolve => {\n fs.access(path, fs.constants.F_OK, err => {\n resolve(!err);\n });\n });\n },\n },\n\n toIsoDateString(dt) {\n return dt.toIsoString().subsstr(0, 10);\n },\n\n parseBoolean(value) {\n return value === true || value === 'true' || value === 1 || value === '1';\n },\n};\n\nmodule.exports = utils;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/xml-stream.js b/node_backend/node_modules/exceljs/dist/es5/utils/xml-stream.js new file mode 100644 index 0000000000000000000000000000000000000000..7e31c18450c896dd7ae59d47d33a014d97510053 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/xml-stream.js @@ -0,0 +1,151 @@ +"use strict"; + +const _ = require('./under-dash'); +const utils = require('./utils'); + +// constants +const OPEN_ANGLE = '<'; +const CLOSE_ANGLE = '>'; +const OPEN_ANGLE_SLASH = ''; +function pushAttribute(xml, name, value) { + xml.push(` ${name}="${utils.xmlEncode(value.toString())}"`); +} +function pushAttributes(xml, attributes) { + if (attributes) { + const tmp = []; + _.each(attributes, (value, name) => { + if (value !== undefined) { + pushAttribute(tmp, name, value); + } + }); + xml.push(tmp.join("")); + } +} +class XmlStream { + constructor() { + this._xml = []; + this._stack = []; + this._rollbacks = []; + } + get tos() { + return this._stack.length ? this._stack[this._stack.length - 1] : undefined; + } + get cursor() { + // handy way to track whether anything has been added + return this._xml.length; + } + openXml(docAttributes) { + const xml = this._xml; + // + xml.push('\n'); + } + openNode(name, attributes) { + const parent = this.tos; + const xml = this._xml; + if (parent && this.open) { + xml.push(CLOSE_ANGLE); + } + this._stack.push(name); + + // start streaming node + xml.push(OPEN_ANGLE); + xml.push(name); + pushAttributes(xml, attributes); + this.leaf = true; + this.open = true; + } + addAttribute(name, value) { + if (!this.open) { + throw new Error('Cannot write attributes to node if it is not open'); + } + if (value !== undefined) { + pushAttribute(this._xml, name, value); + } + } + addAttributes(attrs) { + if (!this.open) { + throw new Error('Cannot write attributes to node if it is not open'); + } + pushAttributes(this._xml, attrs); + } + writeText(text) { + const xml = this._xml; + if (this.open) { + xml.push(CLOSE_ANGLE); + this.open = false; + } + this.leaf = false; + xml.push(utils.xmlEncode(text.toString())); + } + writeXml(xml) { + if (this.open) { + this._xml.push(CLOSE_ANGLE); + this.open = false; + } + this.leaf = false; + this._xml.push(xml); + } + closeNode() { + const node = this._stack.pop(); + const xml = this._xml; + if (this.leaf) { + xml.push(CLOSE_SLASH_ANGLE); + } else { + xml.push(OPEN_ANGLE_SLASH); + xml.push(node); + xml.push(CLOSE_ANGLE); + } + this.open = false; + this.leaf = false; + } + leafNode(name, attributes, text) { + this.openNode(name, attributes); + if (text !== undefined) { + // zeros need to be written + this.writeText(text); + } + this.closeNode(); + } + closeAll() { + while (this._stack.length) { + this.closeNode(); + } + } + addRollback() { + this._rollbacks.push({ + xml: this._xml.length, + stack: this._stack.length, + leaf: this.leaf, + open: this.open + }); + return this.cursor; + } + commit() { + this._rollbacks.pop(); + } + rollback() { + const r = this._rollbacks.pop(); + if (this._xml.length > r.xml) { + this._xml.splice(r.xml, this._xml.length - r.xml); + } + if (this._stack.length > r.stack) { + this._stack.splice(r.stack, this._stack.length - r.stack); + } + this.leaf = r.leaf; + this.open = r.open; + } + get xml() { + this.closeAll(); + return this._xml.join(''); + } +} +XmlStream.StdDocAttributes = { + version: '1.0', + encoding: 'UTF-8', + standalone: 'yes' +}; +module.exports = XmlStream; +//# sourceMappingURL=xml-stream.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/xml-stream.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/xml-stream.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e269bb6f9682ae72d6df25758bb04659a99408bf --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/xml-stream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xml-stream.js","names":["_","require","utils","OPEN_ANGLE","CLOSE_ANGLE","OPEN_ANGLE_SLASH","CLOSE_SLASH_ANGLE","pushAttribute","xml","name","value","push","xmlEncode","toString","pushAttributes","attributes","tmp","each","undefined","join","XmlStream","constructor","_xml","_stack","_rollbacks","tos","length","cursor","openXml","docAttributes","openNode","parent","open","leaf","addAttribute","Error","addAttributes","attrs","writeText","text","writeXml","closeNode","node","pop","leafNode","closeAll","addRollback","stack","commit","rollback","r","splice","StdDocAttributes","version","encoding","standalone","module","exports"],"sources":["../../../lib/utils/xml-stream.js"],"sourcesContent":["const _ = require('./under-dash');\n\nconst utils = require('./utils');\n\n// constants\nconst OPEN_ANGLE = '<';\nconst CLOSE_ANGLE = '>';\nconst OPEN_ANGLE_SLASH = '';\n\nfunction pushAttribute(xml, name, value) {\n xml.push(` ${name}=\"${utils.xmlEncode(value.toString())}\"`);\n}\nfunction pushAttributes(xml, attributes) {\n if (attributes) {\n const tmp = [];\n _.each(attributes, (value, name) => {\n if (value !== undefined) {\n pushAttribute(tmp, name, value);\n }\n });\n xml.push(tmp.join(\"\"));\n }\n}\n\nclass XmlStream {\n constructor() {\n this._xml = [];\n this._stack = [];\n this._rollbacks = [];\n }\n\n get tos() {\n return this._stack.length ? this._stack[this._stack.length - 1] : undefined;\n }\n\n get cursor() {\n // handy way to track whether anything has been added\n return this._xml.length;\n }\n\n openXml(docAttributes) {\n const xml = this._xml;\n // \n xml.push('\\n');\n }\n\n openNode(name, attributes) {\n const parent = this.tos;\n const xml = this._xml;\n if (parent && this.open) {\n xml.push(CLOSE_ANGLE);\n }\n\n this._stack.push(name);\n\n // start streaming node\n xml.push(OPEN_ANGLE);\n xml.push(name);\n pushAttributes(xml, attributes);\n this.leaf = true;\n this.open = true;\n }\n\n addAttribute(name, value) {\n if (!this.open) {\n throw new Error('Cannot write attributes to node if it is not open');\n }\n if (value !== undefined) {\n pushAttribute(this._xml, name, value);\n }\n }\n\n addAttributes(attrs) {\n if (!this.open) {\n throw new Error('Cannot write attributes to node if it is not open');\n }\n pushAttributes(this._xml, attrs);\n }\n\n writeText(text) {\n const xml = this._xml;\n if (this.open) {\n xml.push(CLOSE_ANGLE);\n this.open = false;\n }\n this.leaf = false;\n xml.push(utils.xmlEncode(text.toString()));\n }\n\n writeXml(xml) {\n if (this.open) {\n this._xml.push(CLOSE_ANGLE);\n this.open = false;\n }\n this.leaf = false;\n this._xml.push(xml);\n }\n\n closeNode() {\n const node = this._stack.pop();\n const xml = this._xml;\n if (this.leaf) {\n xml.push(CLOSE_SLASH_ANGLE);\n } else {\n xml.push(OPEN_ANGLE_SLASH);\n xml.push(node);\n xml.push(CLOSE_ANGLE);\n }\n this.open = false;\n this.leaf = false;\n }\n\n leafNode(name, attributes, text) {\n this.openNode(name, attributes);\n if (text !== undefined) {\n // zeros need to be written\n this.writeText(text);\n }\n this.closeNode();\n }\n\n closeAll() {\n while (this._stack.length) {\n this.closeNode();\n }\n }\n\n addRollback() {\n this._rollbacks.push({\n xml: this._xml.length,\n stack: this._stack.length,\n leaf: this.leaf,\n open: this.open,\n });\n return this.cursor;\n }\n\n commit() {\n this._rollbacks.pop();\n }\n\n rollback() {\n const r = this._rollbacks.pop();\n if (this._xml.length > r.xml) {\n this._xml.splice(r.xml, this._xml.length - r.xml);\n }\n if (this._stack.length > r.stack) {\n this._stack.splice(r.stack, this._stack.length - r.stack);\n }\n this.leaf = r.leaf;\n this.open = r.open;\n }\n\n get xml() {\n this.closeAll();\n return this._xml.join('');\n }\n}\n\nXmlStream.StdDocAttributes = {\n version: '1.0',\n encoding: 'UTF-8',\n standalone: 'yes',\n};\n\nmodule.exports = XmlStream;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/zip-stream.js b/node_backend/node_modules/exceljs/dist/es5/utils/zip-stream.js new file mode 100644 index 0000000000000000000000000000000000000000..cbb63c1e3e573b9257f033f63655c6d27c582b2f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/zip-stream.js @@ -0,0 +1,79 @@ +"use strict"; + +const events = require('events'); +const JSZip = require('jszip'); +const StreamBuf = require('./stream-buf'); +const { + stringToBuffer +} = require('./browser-buffer-encode'); + +// ============================================================================= +// The ZipWriter class +// Packs streamed data into an output zip stream +class ZipWriter extends events.EventEmitter { + constructor(options) { + super(); + this.options = Object.assign({ + type: 'nodebuffer', + compression: 'DEFLATE' + }, options); + this.zip = new JSZip(); + this.stream = new StreamBuf(); + } + append(data, options) { + if (options.hasOwnProperty('base64') && options.base64) { + this.zip.file(options.name, data, { + base64: true + }); + } else { + // https://www.npmjs.com/package/process + if (process.browser && typeof data === 'string') { + // use TextEncoder in browser + data = stringToBuffer(data); + } + this.zip.file(options.name, data); + } + } + async finalize() { + const content = await this.zip.generateAsync(this.options); + this.stream.end(content); + this.emit('finish'); + } + + // ========================================================================== + // Stream.Readable interface + read(size) { + return this.stream.read(size); + } + setEncoding(encoding) { + return this.stream.setEncoding(encoding); + } + pause() { + return this.stream.pause(); + } + resume() { + return this.stream.resume(); + } + isPaused() { + return this.stream.isPaused(); + } + pipe(destination, options) { + return this.stream.pipe(destination, options); + } + unpipe(destination) { + return this.stream.unpipe(destination); + } + unshift(chunk) { + return this.stream.unshift(chunk); + } + wrap(stream) { + return this.stream.wrap(stream); + } +} + +// ============================================================================= + +module.exports = { + ZipWriter +}; +//# sourceMappingURL=zip-stream.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/utils/zip-stream.js.map b/node_backend/node_modules/exceljs/dist/es5/utils/zip-stream.js.map new file mode 100644 index 0000000000000000000000000000000000000000..88189d38cbdabc99fa3ff195486a2467895c39bc --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/utils/zip-stream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"zip-stream.js","names":["events","require","JSZip","StreamBuf","stringToBuffer","ZipWriter","EventEmitter","constructor","options","Object","assign","type","compression","zip","stream","append","data","hasOwnProperty","base64","file","name","process","browser","finalize","content","generateAsync","end","emit","read","size","setEncoding","encoding","pause","resume","isPaused","pipe","destination","unpipe","unshift","chunk","wrap","module","exports"],"sources":["../../../lib/utils/zip-stream.js"],"sourcesContent":["const events = require('events');\nconst JSZip = require('jszip');\n\nconst StreamBuf = require('./stream-buf');\nconst {stringToBuffer} = require('./browser-buffer-encode');\n\n// =============================================================================\n// The ZipWriter class\n// Packs streamed data into an output zip stream\nclass ZipWriter extends events.EventEmitter {\n constructor(options) {\n super();\n this.options = Object.assign(\n {\n type: 'nodebuffer',\n compression: 'DEFLATE',\n },\n options\n );\n\n this.zip = new JSZip();\n this.stream = new StreamBuf();\n }\n\n append(data, options) {\n if (options.hasOwnProperty('base64') && options.base64) {\n this.zip.file(options.name, data, {base64: true});\n } else {\n // https://www.npmjs.com/package/process\n if (process.browser && typeof data === 'string') {\n // use TextEncoder in browser\n data = stringToBuffer(data);\n }\n this.zip.file(options.name, data);\n }\n }\n\n async finalize() {\n const content = await this.zip.generateAsync(this.options);\n this.stream.end(content);\n this.emit('finish');\n }\n\n // ==========================================================================\n // Stream.Readable interface\n read(size) {\n return this.stream.read(size);\n }\n\n setEncoding(encoding) {\n return this.stream.setEncoding(encoding);\n }\n\n pause() {\n return this.stream.pause();\n }\n\n resume() {\n return this.stream.resume();\n }\n\n isPaused() {\n return this.stream.isPaused();\n }\n\n pipe(destination, options) {\n return this.stream.pipe(destination, options);\n }\n\n unpipe(destination) {\n return this.stream.unpipe(destination);\n }\n\n unshift(chunk) {\n return this.stream.unshift(chunk);\n }\n\n wrap(stream) {\n return this.stream.wrap(stream);\n }\n}\n\n// =============================================================================\n\nmodule.exports = {\n ZipWriter,\n};\n"],"mappings":";;AAAA,MAAMA,MAAM,GAAGC,OAAO,CAAC,QAAQ,CAAC;AAChC,MAAMC,KAAK,GAAGD,OAAO,CAAC,OAAO,CAAC;AAE9B,MAAME,SAAS,GAAGF,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM;EAACG;AAAc,CAAC,GAAGH,OAAO,CAAC,yBAAyB,CAAC;;AAE3D;AACA;AACA;AACA,MAAMI,SAAS,SAASL,MAAM,CAACM,YAAY,CAAC;EAC1CC,WAAWA,CAACC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IACP,IAAI,CAACA,OAAO,GAAGC,MAAM,CAACC,MAAM,CAC1B;MACEC,IAAI,EAAE,YAAY;MAClBC,WAAW,EAAE;IACf,CAAC,EACDJ,OACF,CAAC;IAED,IAAI,CAACK,GAAG,GAAG,IAAIX,KAAK,CAAC,CAAC;IACtB,IAAI,CAACY,MAAM,GAAG,IAAIX,SAAS,CAAC,CAAC;EAC/B;EAEAY,MAAMA,CAACC,IAAI,EAAER,OAAO,EAAE;IACpB,IAAIA,OAAO,CAACS,cAAc,CAAC,QAAQ,CAAC,IAAIT,OAAO,CAACU,MAAM,EAAE;MACtD,IAAI,CAACL,GAAG,CAACM,IAAI,CAACX,OAAO,CAACY,IAAI,EAAEJ,IAAI,EAAE;QAACE,MAAM,EAAE;MAAI,CAAC,CAAC;IACnD,CAAC,MAAM;MACL;MACA,IAAIG,OAAO,CAACC,OAAO,IAAI,OAAON,IAAI,KAAK,QAAQ,EAAE;QAC/C;QACAA,IAAI,GAAGZ,cAAc,CAACY,IAAI,CAAC;MAC7B;MACA,IAAI,CAACH,GAAG,CAACM,IAAI,CAACX,OAAO,CAACY,IAAI,EAAEJ,IAAI,CAAC;IACnC;EACF;EAEA,MAAMO,QAAQA,CAAA,EAAG;IACf,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACX,GAAG,CAACY,aAAa,CAAC,IAAI,CAACjB,OAAO,CAAC;IAC1D,IAAI,CAACM,MAAM,CAACY,GAAG,CAACF,OAAO,CAAC;IACxB,IAAI,CAACG,IAAI,CAAC,QAAQ,CAAC;EACrB;;EAEA;EACA;EACAC,IAAIA,CAACC,IAAI,EAAE;IACT,OAAO,IAAI,CAACf,MAAM,CAACc,IAAI,CAACC,IAAI,CAAC;EAC/B;EAEAC,WAAWA,CAACC,QAAQ,EAAE;IACpB,OAAO,IAAI,CAACjB,MAAM,CAACgB,WAAW,CAACC,QAAQ,CAAC;EAC1C;EAEAC,KAAKA,CAAA,EAAG;IACN,OAAO,IAAI,CAAClB,MAAM,CAACkB,KAAK,CAAC,CAAC;EAC5B;EAEAC,MAAMA,CAAA,EAAG;IACP,OAAO,IAAI,CAACnB,MAAM,CAACmB,MAAM,CAAC,CAAC;EAC7B;EAEAC,QAAQA,CAAA,EAAG;IACT,OAAO,IAAI,CAACpB,MAAM,CAACoB,QAAQ,CAAC,CAAC;EAC/B;EAEAC,IAAIA,CAACC,WAAW,EAAE5B,OAAO,EAAE;IACzB,OAAO,IAAI,CAACM,MAAM,CAACqB,IAAI,CAACC,WAAW,EAAE5B,OAAO,CAAC;EAC/C;EAEA6B,MAAMA,CAACD,WAAW,EAAE;IAClB,OAAO,IAAI,CAACtB,MAAM,CAACuB,MAAM,CAACD,WAAW,CAAC;EACxC;EAEAE,OAAOA,CAACC,KAAK,EAAE;IACb,OAAO,IAAI,CAACzB,MAAM,CAACwB,OAAO,CAACC,KAAK,CAAC;EACnC;EAEAC,IAAIA,CAAC1B,MAAM,EAAE;IACX,OAAO,IAAI,CAACA,MAAM,CAAC0B,IAAI,CAAC1B,MAAM,CAAC;EACjC;AACF;;AAEA;;AAEA2B,MAAM,CAACC,OAAO,GAAG;EACfrC;AACF,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js new file mode 100644 index 0000000000000000000000000000000000000000..ed7ee4e9c09fd54590c7a50af2ac1550944806a6 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js @@ -0,0 +1,230 @@ +"use strict"; + +module.exports = { + 0: { + f: 'General' + }, + 1: { + f: '0' + }, + 2: { + f: '0.00' + }, + 3: { + f: '#,##0' + }, + 4: { + f: '#,##0.00' + }, + 9: { + f: '0%' + }, + 10: { + f: '0.00%' + }, + 11: { + f: '0.00E+00' + }, + 12: { + f: '# ?/?' + }, + 13: { + f: '# ??/??' + }, + 14: { + f: 'mm-dd-yy' + }, + 15: { + f: 'd-mmm-yy' + }, + 16: { + f: 'd-mmm' + }, + 17: { + f: 'mmm-yy' + }, + 18: { + f: 'h:mm AM/PM' + }, + 19: { + f: 'h:mm:ss AM/PM' + }, + 20: { + f: 'h:mm' + }, + 21: { + f: 'h:mm:ss' + }, + 22: { + f: 'm/d/yy "h":mm' + }, + 27: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 28: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 29: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 30: { + 'zh-tw': 'm/d/yy ', + 'zh-cn': 'm-d-yy', + 'ja-jp': 'm/d/yy', + 'ko-kr': 'mm-dd-yy' + }, + 31: { + 'zh-tw': 'yyyy"年"m"月"d"日"', + 'zh-cn': 'yyyy"年"m"月"d"日"', + 'ja-jp': 'yyyy"年"m"月"d"日"', + 'ko-kr': 'yyyy"년" mm"월" dd"일"' + }, + 32: { + 'zh-tw': 'hh"時"mm"分"', + 'zh-cn': 'h"时"mm"分"', + 'ja-jp': 'h"時"mm"分"', + 'ko-kr': 'h"시" mm"분"' + }, + 33: { + 'zh-tw': 'hh"時"mm"分"ss"秒"', + 'zh-cn': 'h"时"mm"分"ss"秒"', + 'ja-jp': 'h"時"mm"分"ss"秒"', + 'ko-kr': 'h"시" mm"분" ss"초"' + }, + 34: { + 'zh-tw': '上午/下午 hh"時"mm"分"', + 'zh-cn': '上午/下午 h"时"mm"分"', + 'ja-jp': 'yyyy"年"m"月"', + 'ko-kr': 'yyyy-mm-dd' + }, + 35: { + 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"', + 'zh-cn': '上午/下午 h"时"mm"分"ss"秒"', + 'ja-jp': 'm"月"d"日"', + 'ko-kr': 'yyyy-mm-dd' + }, + 36: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 37: { + f: '#,##0 ;(#,##0)' + }, + 38: { + f: '#,##0 ;[Red](#,##0)' + }, + 39: { + f: '#,##0.00 ;(#,##0.00)' + }, + 40: { + f: '#,##0.00 ;[Red](#,##0.00)' + }, + 45: { + f: 'mm:ss' + }, + 46: { + f: '[h]:mm:ss' + }, + 47: { + f: 'mmss.0' + }, + 48: { + f: '##0.0E+0' + }, + 49: { + f: '@' + }, + 50: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 51: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 52: { + 'zh-tw': '上午/下午 hh"時"mm"分"', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': 'yyyy"年"m"月"', + 'ko-kr': 'yyyy-mm-dd' + }, + 53: { + 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': 'm"月"d"日"', + 'ko-kr': 'yyyy-mm-dd' + }, + 54: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 55: { + 'zh-tw': '上午/下午 hh"時"mm"分"', + 'zh-cn': '上午/下午 h"时"mm"分"', + 'ja-jp': 'yyyy"年"m"月"', + 'ko-kr': 'yyyy-mm-dd' + }, + 56: { + 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"', + 'zh-cn': '上午/下午 h"时"mm"分"ss"秒"', + 'ja-jp': 'm"月"d"日"', + 'ko-kr': 'yyyy-mm-dd' + }, + 57: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 58: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 59: { + 'th-th': 't0' + }, + 60: { + 'th-th': 't0.00' + }, + 61: { + 'th-th': 't#,##0' + }, + 62: { + 'th-th': 't#,##0.00' + }, + 67: { + 'th-th': 't0%' + }, + 68: { + 'th-th': 't0.00%' + }, + 69: { + 'th-th': 't# ?/?' + }, + 70: { + 'th-th': 't# ??/??' + }, + 81: { + 'th-th': 'd/m/bb' + } +}; +//# sourceMappingURL=defaultnumformats.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a2dc514bc7c0c3b328cbbe28d63700a5ef057274 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js.map @@ -0,0 +1 @@ +{"version":3,"file":"defaultnumformats.js","names":["module","exports","f"],"sources":["../../../lib/xlsx/defaultnumformats.js"],"sourcesContent":["module.exports = {\n 0: {f: 'General'},\n 1: {f: '0'},\n 2: {f: '0.00'},\n 3: {f: '#,##0'},\n 4: {f: '#,##0.00'},\n 9: {f: '0%'},\n 10: {f: '0.00%'},\n 11: {f: '0.00E+00'},\n 12: {f: '# ?/?'},\n 13: {f: '# ??/??'},\n 14: {f: 'mm-dd-yy'},\n 15: {f: 'd-mmm-yy'},\n 16: {f: 'd-mmm'},\n 17: {f: 'mmm-yy'},\n 18: {f: 'h:mm AM/PM'},\n 19: {f: 'h:mm:ss AM/PM'},\n 20: {f: 'h:mm'},\n 21: {f: 'h:mm:ss'},\n 22: {f: 'm/d/yy \"h\":mm'},\n\n 27: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 28: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 29: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 30: {'zh-tw': 'm/d/yy ', 'zh-cn': 'm-d-yy', 'ja-jp': 'm/d/yy', 'ko-kr': 'mm-dd-yy'},\n 31: {\n 'zh-tw': 'yyyy\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'yyyy\"年\"m\"月\"d\"日\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'yyyy\"년\" mm\"월\" dd\"일\"',\n },\n 32: {\n 'zh-tw': 'hh\"時\"mm\"分\"',\n 'zh-cn': 'h\"时\"mm\"分\"',\n 'ja-jp': 'h\"時\"mm\"分\"',\n 'ko-kr': 'h\"시\" mm\"분\"',\n },\n 33: {\n 'zh-tw': 'hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': 'h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'h\"時\"mm\"分\"ss\"秒\"',\n 'ko-kr': 'h\"시\" mm\"분\" ss\"초\"',\n },\n 34: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 35: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 36: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n\n 37: {f: '#,##0 ;(#,##0)'},\n 38: {f: '#,##0 ;[Red](#,##0)'},\n 39: {f: '#,##0.00 ;(#,##0.00)'},\n 40: {f: '#,##0.00 ;[Red](#,##0.00)'},\n 45: {f: 'mm:ss'},\n 46: {f: '[h]:mm:ss'},\n 47: {f: 'mmss.0'},\n 48: {f: '##0.0E+0'},\n 49: {f: '@'},\n\n 50: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 51: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 52: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 53: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 54: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 55: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 56: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 57: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 58: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n\n 59: {'th-th': 't0'},\n 60: {'th-th': 't0.00'},\n 61: {'th-th': 't#,##0'},\n 62: {'th-th': 't#,##0.00'},\n 67: {'th-th': 't0%'},\n 68: {'th-th': 't0.00%'},\n 69: {'th-th': 't# ?/?'},\n 70: {'th-th': 't# ??/??'},\n\n 81: {'th-th': 'd/m/bb'},\n};\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/rel-type.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/rel-type.js new file mode 100644 index 0000000000000000000000000000000000000000..af200669884b05de4518819e130cef6dccf6946e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/rel-type.js @@ -0,0 +1,18 @@ +'use strict'; + +module.exports = { + OfficeDocument: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', + Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain', + SharedStrings: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', + Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + CoreProperties: 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + ExtenderProperties: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties', + Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', + VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', + Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table' +}; +//# sourceMappingURL=rel-type.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/rel-type.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/rel-type.js.map new file mode 100644 index 0000000000000000000000000000000000000000..64a14eb2d2ce12b40cb64531fb6f43f420577b22 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/rel-type.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rel-type.js","names":["module","exports","OfficeDocument","Worksheet","CalcChain","SharedStrings","Styles","Theme","Hyperlink","Image","CoreProperties","ExtenderProperties","Comments","VmlDrawing","Table"],"sources":["../../../lib/xlsx/rel-type.js"],"sourcesContent":["'use strict';\n\nmodule.exports = {\n OfficeDocument:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\n Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\n CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain',\n SharedStrings:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\n Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\n Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',\n Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n CoreProperties:\n 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\n ExtenderProperties:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',\n VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',\n Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',\n};\n"],"mappings":"AAAA,YAAY;;AAEZA,MAAM,CAACC,OAAO,GAAG;EACfC,cAAc,EACZ,oFAAoF;EACtFC,SAAS,EAAE,+EAA+E;EAC1FC,SAAS,EAAE,+EAA+E;EAC1FC,aAAa,EACX,mFAAmF;EACrFC,MAAM,EAAE,4EAA4E;EACpFC,KAAK,EAAE,2EAA2E;EAClFC,SAAS,EAAE,+EAA+E;EAC1FC,KAAK,EAAE,2EAA2E;EAClFC,cAAc,EACZ,uFAAuF;EACzFC,kBAAkB,EAChB,yFAAyF;EAC3FC,QAAQ,EAAE,8EAA8E;EACxFC,UAAU,EAAE,gFAAgF;EAC5FC,KAAK,EAAE;AACT,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..96d7a39391c4d68fac5c296f4a6f1fd7655f2396 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js @@ -0,0 +1,139 @@ +"use strict"; + +const parseSax = require('../../utils/parse-sax'); +const XmlStream = require('../../utils/xml-stream'); + +/* 'virtual' methods used as a form of documentation */ +/* eslint-disable class-methods-use-this */ + +// Base class for Xforms +class BaseXform { + // constructor(/* model, name */) {} + + // ============================================================ + // Virtual Interface + prepare( /* model, options */ + ) { + // optional preparation (mutation) of model so it is ready for write + } + render( /* xmlStream, model */ + ) { + // convert model to xml + } + parseOpen(node) { + // XML node opened + } + parseText(text) { + // chunk of text encountered for current node + } + parseClose(name) { + // XML node closed + } + reconcile(model, options) { + // optional post-parse step (opposite to prepare) + } + + // ============================================================ + reset() { + // to make sure parses don't bleed to next iteration + this.model = null; + + // if we have a map - reset them too + if (this.map) { + Object.values(this.map).forEach(xform => { + if (xform instanceof BaseXform) { + xform.reset(); + } else if (xform.xform) { + xform.xform.reset(); + } + }); + } + } + mergeModel(obj) { + // set obj's props to this.model + this.model = Object.assign(this.model || {}, obj); + } + async parse(saxParser) { + for await (const events of saxParser) { + for (const { + eventType, + value + } of events) { + if (eventType === 'opentag') { + this.parseOpen(value); + } else if (eventType === 'text') { + this.parseText(value); + } else if (eventType === 'closetag') { + if (!this.parseClose(value.name)) { + return this.model; + } + } + } + } + return this.model; + } + async parseStream(stream) { + return this.parse(parseSax(stream)); + } + get xml() { + // convenience function to get the xml of this.model + // useful for manager types that are built during the prepare phase + return this.toXml(this.model); + } + toXml(model) { + const xmlStream = new XmlStream(); + this.render(xmlStream, model); + return xmlStream.xml; + } + + // ============================================================ + // Useful Utilities + static toAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (value === undefined) { + if (always) { + return dflt; + } + } else if (always || value !== dflt) { + return value.toString(); + } + return undefined; + } + static toStringAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return BaseXform.toAttribute(value, dflt, always); + } + static toStringValue(attr, dflt) { + return attr === undefined ? dflt : attr; + } + static toBoolAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (value === undefined) { + if (always) { + return dflt; + } + } else if (always || value !== dflt) { + return value ? '1' : '0'; + } + return undefined; + } + static toBoolValue(attr, dflt) { + return attr === undefined ? dflt : attr === '1'; + } + static toIntAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return BaseXform.toAttribute(value, dflt, always); + } + static toIntValue(attr, dflt) { + return attr === undefined ? dflt : parseInt(attr, 10); + } + static toFloatAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return BaseXform.toAttribute(value, dflt, always); + } + static toFloatValue(attr, dflt) { + return attr === undefined ? dflt : parseFloat(attr); + } +} +module.exports = BaseXform; +//# sourceMappingURL=base-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0055ceef4a25311c2ea32d7435ea59ce1e3b0011 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-xform.js","names":["parseSax","require","XmlStream","BaseXform","prepare","render","parseOpen","node","parseText","text","parseClose","name","reconcile","model","options","reset","map","Object","values","forEach","xform","mergeModel","obj","assign","parse","saxParser","events","eventType","value","parseStream","stream","xml","toXml","xmlStream","toAttribute","dflt","always","arguments","length","undefined","toString","toStringAttribute","toStringValue","attr","toBoolAttribute","toBoolValue","toIntAttribute","toIntValue","parseInt","toFloatAttribute","toFloatValue","parseFloat","module","exports"],"sources":["../../../../lib/xlsx/xform/base-xform.js"],"sourcesContent":["const parseSax = require('../../utils/parse-sax');\nconst XmlStream = require('../../utils/xml-stream');\n\n/* 'virtual' methods used as a form of documentation */\n/* eslint-disable class-methods-use-this */\n\n// Base class for Xforms\nclass BaseXform {\n // constructor(/* model, name */) {}\n\n // ============================================================\n // Virtual Interface\n prepare(/* model, options */) {\n // optional preparation (mutation) of model so it is ready for write\n }\n\n render(/* xmlStream, model */) {\n // convert model to xml\n }\n\n parseOpen(node) {\n // XML node opened\n }\n\n parseText(text) {\n // chunk of text encountered for current node\n }\n\n parseClose(name) {\n // XML node closed\n }\n\n reconcile(model, options) {\n // optional post-parse step (opposite to prepare)\n }\n\n // ============================================================\n reset() {\n // to make sure parses don't bleed to next iteration\n this.model = null;\n\n // if we have a map - reset them too\n if (this.map) {\n Object.values(this.map).forEach(xform => {\n if (xform instanceof BaseXform) {\n xform.reset();\n } else if (xform.xform) {\n xform.xform.reset();\n }\n });\n }\n }\n\n mergeModel(obj) {\n // set obj's props to this.model\n this.model = Object.assign(this.model || {}, obj);\n }\n\n async parse(saxParser) {\n for await (const events of saxParser) {\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n this.parseOpen(value);\n } else if (eventType === 'text') {\n this.parseText(value);\n } else if (eventType === 'closetag') {\n if (!this.parseClose(value.name)) {\n return this.model;\n }\n }\n }\n }\n return this.model;\n }\n\n async parseStream(stream) {\n return this.parse(parseSax(stream));\n }\n\n get xml() {\n // convenience function to get the xml of this.model\n // useful for manager types that are built during the prepare phase\n return this.toXml(this.model);\n }\n\n toXml(model) {\n const xmlStream = new XmlStream();\n this.render(xmlStream, model);\n return xmlStream.xml;\n }\n\n // ============================================================\n // Useful Utilities\n static toAttribute(value, dflt, always = false) {\n if (value === undefined) {\n if (always) {\n return dflt;\n }\n } else if (always || value !== dflt) {\n return value.toString();\n }\n return undefined;\n }\n\n static toStringAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toStringValue(attr, dflt) {\n return attr === undefined ? dflt : attr;\n }\n\n static toBoolAttribute(value, dflt, always = false) {\n if (value === undefined) {\n if (always) {\n return dflt;\n }\n } else if (always || value !== dflt) {\n return value ? '1' : '0';\n }\n return undefined;\n }\n\n static toBoolValue(attr, dflt) {\n return attr === undefined ? dflt : attr === '1';\n }\n\n static toIntAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toIntValue(attr, dflt) {\n return attr === undefined ? dflt : parseInt(attr, 10);\n }\n\n static toFloatAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toFloatValue(attr, dflt) {\n return attr === undefined ? dflt : parseFloat(attr);\n }\n}\n\nmodule.exports = BaseXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..95f0ee25a9576786992314c68985a9eb7818f034 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js @@ -0,0 +1,85 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const colCache = require('../../../utils/col-cache'); +class DefinedNamesXform extends BaseXform { + render(xmlStream, model) { + // + // name.ranges.join(',') + // name.ranges.join(',') + // + xmlStream.openNode('definedName', { + name: model.name, + localSheetId: model.localSheetId + }); + xmlStream.writeText(model.ranges.join(',')); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case 'definedName': + this._parsedName = node.attributes.name; + this._parsedLocalSheetId = node.attributes.localSheetId; + this._parsedText = []; + return true; + default: + return false; + } + } + parseText(text) { + this._parsedText.push(text); + } + parseClose() { + this.model = { + name: this._parsedName, + ranges: extractRanges(this._parsedText.join('')) + }; + if (this._parsedLocalSheetId !== undefined) { + this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10); + } + return false; + } +} +function isValidRange(range) { + try { + colCache.decodeEx(range); + return true; + } catch (err) { + return false; + } +} +function extractRanges(parsedText) { + const ranges = []; + let quotesOpened = false; + let last = ''; + parsedText.split(',').forEach(item => { + if (!item) { + return; + } + const quotes = (item.match(/'/g) || []).length; + if (!quotes) { + if (quotesOpened) { + last += `${item},`; + } else if (isValidRange(item)) { + ranges.push(item); + } + return; + } + const quotesEven = quotes % 2 === 0; + if (!quotesOpened && quotesEven && isValidRange(item)) { + ranges.push(item); + } else if (quotesOpened && !quotesEven) { + quotesOpened = false; + if (isValidRange(last + item)) { + ranges.push(last + item); + } + last = ''; + } else { + quotesOpened = true; + last += `${item},`; + } + }); + return ranges; +} +module.exports = DefinedNamesXform; +//# sourceMappingURL=defined-name-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..61c28779b9cf06326fef437b88f054648afd436a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"defined-name-xform.js","names":["BaseXform","require","colCache","DefinedNamesXform","render","xmlStream","model","openNode","name","localSheetId","writeText","ranges","join","closeNode","parseOpen","node","_parsedName","attributes","_parsedLocalSheetId","_parsedText","parseText","text","push","parseClose","extractRanges","undefined","parseInt","isValidRange","range","decodeEx","err","parsedText","quotesOpened","last","split","forEach","item","quotes","match","length","quotesEven","module","exports"],"sources":["../../../../../lib/xlsx/xform/book/defined-name-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst colCache = require('../../../utils/col-cache');\n\nclass DefinedNamesXform extends BaseXform {\n render(xmlStream, model) {\n // \n // name.ranges.join(',')\n // name.ranges.join(',')\n // \n xmlStream.openNode('definedName', {\n name: model.name,\n localSheetId: model.localSheetId,\n });\n xmlStream.writeText(model.ranges.join(','));\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'definedName':\n this._parsedName = node.attributes.name;\n this._parsedLocalSheetId = node.attributes.localSheetId;\n this._parsedText = [];\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this._parsedText.push(text);\n }\n\n parseClose() {\n this.model = {\n name: this._parsedName,\n ranges: extractRanges(this._parsedText.join('')),\n };\n if (this._parsedLocalSheetId !== undefined) {\n this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10);\n }\n return false;\n }\n}\n\nfunction isValidRange(range) {\n try {\n colCache.decodeEx(range);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nfunction extractRanges(parsedText) {\n const ranges = [];\n let quotesOpened = false;\n let last = '';\n parsedText.split(',').forEach(item => {\n if (!item) {\n return;\n }\n const quotes = (item.match(/'/g) || []).length;\n\n if (!quotes) {\n if (quotesOpened) {\n last += `${item},`;\n } else if (isValidRange(item)) {\n ranges.push(item);\n }\n return;\n }\n const quotesEven = quotes % 2 === 0;\n\n if (!quotesOpened && quotesEven && isValidRange(item)) {\n ranges.push(item);\n } else if (quotesOpened && !quotesEven) {\n quotesOpened = false;\n if (isValidRange(last + item)) {\n ranges.push(last + item);\n }\n last = '';\n } else {\n quotesOpened = true;\n last += `${item},`;\n }\n });\n return ranges;\n}\n\nmodule.exports = DefinedNamesXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAMC,QAAQ,GAAGD,OAAO,CAAC,0BAA0B,CAAC;AAEpD,MAAME,iBAAiB,SAASH,SAAS,CAAC;EACxCI,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB;IACA;IACA;IACA;IACAD,SAAS,CAACE,QAAQ,CAAC,aAAa,EAAE;MAChCC,IAAI,EAAEF,KAAK,CAACE,IAAI;MAChBC,YAAY,EAAEH,KAAK,CAACG;IACtB,CAAC,CAAC;IACFJ,SAAS,CAACK,SAAS,CAACJ,KAAK,CAACK,MAAM,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3CP,SAAS,CAACQ,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACP,IAAI;MACf,KAAK,aAAa;QAChB,IAAI,CAACQ,WAAW,GAAGD,IAAI,CAACE,UAAU,CAACT,IAAI;QACvC,IAAI,CAACU,mBAAmB,GAAGH,IAAI,CAACE,UAAU,CAACR,YAAY;QACvD,IAAI,CAACU,WAAW,GAAG,EAAE;QACrB,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,CAACF,WAAW,CAACG,IAAI,CAACD,IAAI,CAAC;EAC7B;EAEAE,UAAUA,CAAA,EAAG;IACX,IAAI,CAACjB,KAAK,GAAG;MACXE,IAAI,EAAE,IAAI,CAACQ,WAAW;MACtBL,MAAM,EAAEa,aAAa,CAAC,IAAI,CAACL,WAAW,CAACP,IAAI,CAAC,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAACM,mBAAmB,KAAKO,SAAS,EAAE;MAC1C,IAAI,CAACnB,KAAK,CAACG,YAAY,GAAGiB,QAAQ,CAAC,IAAI,CAACR,mBAAmB,EAAE,EAAE,CAAC;IAClE;IACA,OAAO,KAAK;EACd;AACF;AAEA,SAASS,YAAYA,CAACC,KAAK,EAAE;EAC3B,IAAI;IACF1B,QAAQ,CAAC2B,QAAQ,CAACD,KAAK,CAAC;IACxB,OAAO,IAAI;EACb,CAAC,CAAC,OAAOE,GAAG,EAAE;IACZ,OAAO,KAAK;EACd;AACF;AAEA,SAASN,aAAaA,CAACO,UAAU,EAAE;EACjC,MAAMpB,MAAM,GAAG,EAAE;EACjB,IAAIqB,YAAY,GAAG,KAAK;EACxB,IAAIC,IAAI,GAAG,EAAE;EACbF,UAAU,CAACG,KAAK,CAAC,GAAG,CAAC,CAACC,OAAO,CAACC,IAAI,IAAI;IACpC,IAAI,CAACA,IAAI,EAAE;MACT;IACF;IACA,MAAMC,MAAM,GAAG,CAACD,IAAI,CAACE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAEC,MAAM;IAE9C,IAAI,CAACF,MAAM,EAAE;MACX,IAAIL,YAAY,EAAE;QAChBC,IAAI,IAAK,GAAEG,IAAK,GAAE;MACpB,CAAC,MAAM,IAAIT,YAAY,CAACS,IAAI,CAAC,EAAE;QAC7BzB,MAAM,CAACW,IAAI,CAACc,IAAI,CAAC;MACnB;MACA;IACF;IACA,MAAMI,UAAU,GAAGH,MAAM,GAAG,CAAC,KAAK,CAAC;IAEnC,IAAI,CAACL,YAAY,IAAIQ,UAAU,IAAIb,YAAY,CAACS,IAAI,CAAC,EAAE;MACrDzB,MAAM,CAACW,IAAI,CAACc,IAAI,CAAC;IACnB,CAAC,MAAM,IAAIJ,YAAY,IAAI,CAACQ,UAAU,EAAE;MACtCR,YAAY,GAAG,KAAK;MACpB,IAAIL,YAAY,CAACM,IAAI,GAAGG,IAAI,CAAC,EAAE;QAC7BzB,MAAM,CAACW,IAAI,CAACW,IAAI,GAAGG,IAAI,CAAC;MAC1B;MACAH,IAAI,GAAG,EAAE;IACX,CAAC,MAAM;MACLD,YAAY,GAAG,IAAI;MACnBC,IAAI,IAAK,GAAEG,IAAK,GAAE;IACpB;EACF,CAAC,CAAC;EACF,OAAOzB,MAAM;AACf;AAEA8B,MAAM,CAACC,OAAO,GAAGvC,iBAAiB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..7c7e577259633449fc760fc14587fc558685d407 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js @@ -0,0 +1,32 @@ +"use strict"; + +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +class WorksheetXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('sheet', { + sheetId: model.id, + name: model.name, + state: model.state, + 'r:id': model.rId + }); + } + parseOpen(node) { + if (node.name === 'sheet') { + this.model = { + name: utils.xmlDecode(node.attributes.name), + id: parseInt(node.attributes.sheetId, 10), + state: node.attributes.state, + rId: node.attributes['r:id'] + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorksheetXform; +//# sourceMappingURL=sheet-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..8c07e5fe18838e7d48e395c4193d053e3c983a7a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sheet-xform.js","names":["utils","require","BaseXform","WorksheetXform","render","xmlStream","model","leafNode","sheetId","id","name","state","rId","parseOpen","node","xmlDecode","attributes","parseInt","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/book/sheet-xform.js"],"sourcesContent":["const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nclass WorksheetXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('sheet', {\n sheetId: model.id,\n name: model.name,\n state: model.state,\n 'r:id': model.rId,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'sheet') {\n this.model = {\n name: utils.xmlDecode(node.attributes.name),\n id: parseInt(node.attributes.sheetId, 10),\n state: node.attributes.state,\n rId: node.attributes['r:id'],\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorksheetXform;\n"],"mappings":";;AAAA,MAAMA,KAAK,GAAGC,OAAO,CAAC,sBAAsB,CAAC;AAC7C,MAAMC,SAAS,GAAGD,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAME,cAAc,SAASD,SAAS,CAAC;EACrCE,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,OAAO,EAAE;MAC1BC,OAAO,EAAEF,KAAK,CAACG,EAAE;MACjBC,IAAI,EAAEJ,KAAK,CAACI,IAAI;MAChBC,KAAK,EAAEL,KAAK,CAACK,KAAK;MAClB,MAAM,EAAEL,KAAK,CAACM;IAChB,CAAC,CAAC;EACJ;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACJ,IAAI,KAAK,OAAO,EAAE;MACzB,IAAI,CAACJ,KAAK,GAAG;QACXI,IAAI,EAAEV,KAAK,CAACe,SAAS,CAACD,IAAI,CAACE,UAAU,CAACN,IAAI,CAAC;QAC3CD,EAAE,EAAEQ,QAAQ,CAACH,IAAI,CAACE,UAAU,CAACR,OAAO,EAAE,EAAE,CAAC;QACzCG,KAAK,EAAEG,IAAI,CAACE,UAAU,CAACL,KAAK;QAC5BC,GAAG,EAAEE,IAAI,CAACE,UAAU,CAAC,MAAM;MAC7B,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAE,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGlB,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..d08fb76a76253c26b8e77acac66f2cf6daec6515 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js @@ -0,0 +1,24 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class WorkbookCalcPropertiesXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('calcPr', { + calcId: 171027, + fullCalcOnLoad: model.fullCalcOnLoad ? 1 : undefined + }); + } + parseOpen(node) { + if (node.name === 'calcPr') { + this.model = {}; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorkbookCalcPropertiesXform; +//# sourceMappingURL=workbook-calc-properties-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..65a1ecddcdf4d7ee7c9d9f45a02434da82977e37 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workbook-calc-properties-xform.js","names":["BaseXform","require","WorkbookCalcPropertiesXform","render","xmlStream","model","leafNode","calcId","fullCalcOnLoad","undefined","parseOpen","node","name","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/book/workbook-calc-properties-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass WorkbookCalcPropertiesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('calcPr', {\n calcId: 171027,\n fullCalcOnLoad: model.fullCalcOnLoad ? 1 : undefined,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'calcPr') {\n this.model = {};\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorkbookCalcPropertiesXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,2BAA2B,SAASF,SAAS,CAAC;EAClDG,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,QAAQ,EAAE;MAC3BC,MAAM,EAAE,MAAM;MACdC,cAAc,EAAEH,KAAK,CAACG,cAAc,GAAG,CAAC,GAAGC;IAC7C,CAAC,CAAC;EACJ;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,QAAQ,EAAE;MAC1B,IAAI,CAACP,KAAK,GAAG,CAAC,CAAC;MACf,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAQ,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGd,2BAA2B"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..ee43fc9272950c3f7b77902580f253b502632b20 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js @@ -0,0 +1,27 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class WorksheetPropertiesXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('workbookPr', { + date1904: model.date1904 ? 1 : undefined, + defaultThemeVersion: 164011, + filterPrivacy: 1 + }); + } + parseOpen(node) { + if (node.name === 'workbookPr') { + this.model = { + date1904: node.attributes.date1904 === '1' + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorksheetPropertiesXform; +//# sourceMappingURL=workbook-properties-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..9680c2d599cdb447c745a1744800665ea95158e6 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workbook-properties-xform.js","names":["BaseXform","require","WorksheetPropertiesXform","render","xmlStream","model","leafNode","date1904","undefined","defaultThemeVersion","filterPrivacy","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/book/workbook-properties-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass WorksheetPropertiesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('workbookPr', {\n date1904: model.date1904 ? 1 : undefined,\n defaultThemeVersion: 164011,\n filterPrivacy: 1,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'workbookPr') {\n this.model = {\n date1904: node.attributes.date1904 === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorksheetPropertiesXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,wBAAwB,SAASF,SAAS,CAAC;EAC/CG,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,YAAY,EAAE;MAC/BC,QAAQ,EAAEF,KAAK,CAACE,QAAQ,GAAG,CAAC,GAAGC,SAAS;MACxCC,mBAAmB,EAAE,MAAM;MAC3BC,aAAa,EAAE;IACjB,CAAC,CAAC;EACJ;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,YAAY,EAAE;MAC9B,IAAI,CAACR,KAAK,GAAG;QACXE,QAAQ,EAAEK,IAAI,CAACE,UAAU,CAACP,QAAQ,KAAK;MACzC,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAQ,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGhB,wBAAwB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..78155a5638da61d9e7ae28ee1e674bee220e21a7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js @@ -0,0 +1,51 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class WorkbookViewXform extends BaseXform { + render(xmlStream, model) { + const attributes = { + xWindow: model.x || 0, + yWindow: model.y || 0, + windowWidth: model.width || 12000, + windowHeight: model.height || 24000, + firstSheet: model.firstSheet, + activeTab: model.activeTab + }; + if (model.visibility && model.visibility !== 'visible') { + attributes.visibility = model.visibility; + } + xmlStream.leafNode('workbookView', attributes); + } + parseOpen(node) { + if (node.name === 'workbookView') { + const model = this.model = {}; + const addS = function (name, value, dflt) { + const s = value !== undefined ? model[name] = value : dflt; + if (s !== undefined) { + model[name] = s; + } + }; + const addN = function (name, value, dflt) { + const n = value !== undefined ? model[name] = parseInt(value, 10) : dflt; + if (n !== undefined) { + model[name] = n; + } + }; + addN('x', node.attributes.xWindow, 0); + addN('y', node.attributes.yWindow, 0); + addN('width', node.attributes.windowWidth, 25000); + addN('height', node.attributes.windowHeight, 10000); + addS('visibility', node.attributes.visibility, 'visible'); + addN('activeTab', node.attributes.activeTab, undefined); + addN('firstSheet', node.attributes.firstSheet, undefined); + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorkbookViewXform; +//# sourceMappingURL=workbook-view-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..623e84d2db94320e4fa019590128afa030766cdf --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workbook-view-xform.js","names":["BaseXform","require","WorkbookViewXform","render","xmlStream","model","attributes","xWindow","x","yWindow","y","windowWidth","width","windowHeight","height","firstSheet","activeTab","visibility","leafNode","parseOpen","node","name","addS","value","dflt","s","undefined","addN","n","parseInt","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/book/workbook-view-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass WorkbookViewXform extends BaseXform {\n render(xmlStream, model) {\n const attributes = {\n xWindow: model.x || 0,\n yWindow: model.y || 0,\n windowWidth: model.width || 12000,\n windowHeight: model.height || 24000,\n firstSheet: model.firstSheet,\n activeTab: model.activeTab,\n };\n if (model.visibility && model.visibility !== 'visible') {\n attributes.visibility = model.visibility;\n }\n xmlStream.leafNode('workbookView', attributes);\n }\n\n parseOpen(node) {\n if (node.name === 'workbookView') {\n const model = (this.model = {});\n const addS = function(name, value, dflt) {\n const s = value !== undefined ? (model[name] = value) : dflt;\n if (s !== undefined) {\n model[name] = s;\n }\n };\n const addN = function(name, value, dflt) {\n const n = value !== undefined ? (model[name] = parseInt(value, 10)) : dflt;\n if (n !== undefined) {\n model[name] = n;\n }\n };\n addN('x', node.attributes.xWindow, 0);\n addN('y', node.attributes.yWindow, 0);\n addN('width', node.attributes.windowWidth, 25000);\n addN('height', node.attributes.windowHeight, 10000);\n addS('visibility', node.attributes.visibility, 'visible');\n addN('activeTab', node.attributes.activeTab, undefined);\n addN('firstSheet', node.attributes.firstSheet, undefined);\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorkbookViewXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,iBAAiB,SAASF,SAAS,CAAC;EACxCG,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,MAAMC,UAAU,GAAG;MACjBC,OAAO,EAAEF,KAAK,CAACG,CAAC,IAAI,CAAC;MACrBC,OAAO,EAAEJ,KAAK,CAACK,CAAC,IAAI,CAAC;MACrBC,WAAW,EAAEN,KAAK,CAACO,KAAK,IAAI,KAAK;MACjCC,YAAY,EAAER,KAAK,CAACS,MAAM,IAAI,KAAK;MACnCC,UAAU,EAAEV,KAAK,CAACU,UAAU;MAC5BC,SAAS,EAAEX,KAAK,CAACW;IACnB,CAAC;IACD,IAAIX,KAAK,CAACY,UAAU,IAAIZ,KAAK,CAACY,UAAU,KAAK,SAAS,EAAE;MACtDX,UAAU,CAACW,UAAU,GAAGZ,KAAK,CAACY,UAAU;IAC1C;IACAb,SAAS,CAACc,QAAQ,CAAC,cAAc,EAAEZ,UAAU,CAAC;EAChD;EAEAa,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,cAAc,EAAE;MAChC,MAAMhB,KAAK,GAAI,IAAI,CAACA,KAAK,GAAG,CAAC,CAAE;MAC/B,MAAMiB,IAAI,GAAG,SAAAA,CAASD,IAAI,EAAEE,KAAK,EAAEC,IAAI,EAAE;QACvC,MAAMC,CAAC,GAAGF,KAAK,KAAKG,SAAS,GAAIrB,KAAK,CAACgB,IAAI,CAAC,GAAGE,KAAK,GAAIC,IAAI;QAC5D,IAAIC,CAAC,KAAKC,SAAS,EAAE;UACnBrB,KAAK,CAACgB,IAAI,CAAC,GAAGI,CAAC;QACjB;MACF,CAAC;MACD,MAAME,IAAI,GAAG,SAAAA,CAASN,IAAI,EAAEE,KAAK,EAAEC,IAAI,EAAE;QACvC,MAAMI,CAAC,GAAGL,KAAK,KAAKG,SAAS,GAAIrB,KAAK,CAACgB,IAAI,CAAC,GAAGQ,QAAQ,CAACN,KAAK,EAAE,EAAE,CAAC,GAAIC,IAAI;QAC1E,IAAII,CAAC,KAAKF,SAAS,EAAE;UACnBrB,KAAK,CAACgB,IAAI,CAAC,GAAGO,CAAC;QACjB;MACF,CAAC;MACDD,IAAI,CAAC,GAAG,EAAEP,IAAI,CAACd,UAAU,CAACC,OAAO,EAAE,CAAC,CAAC;MACrCoB,IAAI,CAAC,GAAG,EAAEP,IAAI,CAACd,UAAU,CAACG,OAAO,EAAE,CAAC,CAAC;MACrCkB,IAAI,CAAC,OAAO,EAAEP,IAAI,CAACd,UAAU,CAACK,WAAW,EAAE,KAAK,CAAC;MACjDgB,IAAI,CAAC,QAAQ,EAAEP,IAAI,CAACd,UAAU,CAACO,YAAY,EAAE,KAAK,CAAC;MACnDS,IAAI,CAAC,YAAY,EAAEF,IAAI,CAACd,UAAU,CAACW,UAAU,EAAE,SAAS,CAAC;MACzDU,IAAI,CAAC,WAAW,EAAEP,IAAI,CAACd,UAAU,CAACU,SAAS,EAAEU,SAAS,CAAC;MACvDC,IAAI,CAAC,YAAY,EAAEP,IAAI,CAACd,UAAU,CAACS,UAAU,EAAEW,SAAS,CAAC;MACzD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAI,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAG/B,iBAAiB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..192b2ef0e41eb02357c170008e3b6cbc6ecb6b63 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js @@ -0,0 +1,234 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const colCache = require('../../../utils/col-cache'); +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const StaticXform = require('../static-xform'); +const ListXform = require('../list-xform'); +const DefinedNameXform = require('./defined-name-xform'); +const SheetXform = require('./sheet-xform'); +const WorkbookViewXform = require('./workbook-view-xform'); +const WorkbookPropertiesXform = require('./workbook-properties-xform'); +const WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform'); +class WorkbookXform extends BaseXform { + constructor() { + super(); + this.map = { + fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion, + workbookPr: new WorkbookPropertiesXform(), + bookViews: new ListXform({ + tag: 'bookViews', + count: false, + childXform: new WorkbookViewXform() + }), + sheets: new ListXform({ + tag: 'sheets', + count: false, + childXform: new SheetXform() + }), + definedNames: new ListXform({ + tag: 'definedNames', + count: false, + childXform: new DefinedNameXform() + }), + calcPr: new WorkbookCalcPropertiesXform() + }; + } + prepare(model) { + model.sheets = model.worksheets; + + // collate all the print areas from all of the sheets and add them to the defined names + const printAreas = []; + let index = 0; // sheets is sparse array - calc index manually + model.sheets.forEach(sheet => { + if (sheet.pageSetup && sheet.pageSetup.printArea) { + sheet.pageSetup.printArea.split('&&').forEach(printArea => { + const printAreaComponents = printArea.split(':'); + const definedName = { + name: '_xlnm.Print_Area', + ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`], + localSheetId: index + }; + printAreas.push(definedName); + }); + } + if (sheet.pageSetup && (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)) { + const ranges = []; + if (sheet.pageSetup.printTitlesColumn) { + const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':'); + ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`); + } + if (sheet.pageSetup.printTitlesRow) { + const titlesRows = sheet.pageSetup.printTitlesRow.split(':'); + ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`); + } + const definedName = { + name: '_xlnm.Print_Titles', + ranges, + localSheetId: index + }; + printAreas.push(definedName); + } + index++; + }); + if (printAreas.length) { + model.definedNames = model.definedNames.concat(printAreas); + } + (model.media || []).forEach((medium, i) => { + // assign name + medium.name = medium.type + (i + 1); + }); + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES); + this.map.fileVersion.render(xmlStream); + this.map.workbookPr.render(xmlStream, model.properties); + this.map.bookViews.render(xmlStream, model.views); + this.map.sheets.render(xmlStream, model.sheets); + this.map.definedNames.render(xmlStream, model.definedNames); + this.map.calcPr.render(xmlStream, model.calcProperties); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'workbook': + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + return true; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'workbook': + this.model = { + sheets: this.map.sheets.model, + properties: this.map.workbookPr.model || {}, + views: this.map.bookViews.model, + calcProperties: {} + }; + if (this.map.definedNames.model) { + this.model.definedNames = this.map.definedNames.model; + } + return false; + default: + // not quite sure how we get here! + return true; + } + } + reconcile(model) { + const rels = (model.workbookRels || []).reduce((map, rel) => { + map[rel.Id] = rel; + return map; + }, {}); + + // reconcile sheet ids, rIds and names + const worksheets = []; + let worksheet; + let index = 0; + (model.sheets || []).forEach(sheet => { + const rel = rels[sheet.rId]; + if (!rel) { + return; + } + // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`, + // otherwise it will be spliced directly behind `xl/`. i.g. + worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\s|\/xl\/)+/, '')}`]; + // If there are "chartsheets" in the file, rel.Target will + // come out as chartsheets/sheet1.xml or similar here, and + // that won't be in model.worksheetHash. + // As we don't have the infrastructure to support chartsheets, + // we will ignore them for now: + if (worksheet) { + worksheet.name = sheet.name; + worksheet.id = sheet.id; + worksheet.state = sheet.state; + worksheets[index++] = worksheet; + } + }); + + // reconcile print areas + const definedNames = []; + _.each(model.definedNames, definedName => { + if (definedName.name === '_xlnm.Print_Area') { + worksheet = worksheets[definedName.localSheetId]; + if (worksheet) { + if (!worksheet.pageSetup) { + worksheet.pageSetup = {}; + } + const range = colCache.decodeEx(definedName.ranges[0]); + worksheet.pageSetup.printArea = worksheet.pageSetup.printArea ? `${worksheet.pageSetup.printArea}&&${range.dimensions}` : range.dimensions; + } + } else if (definedName.name === '_xlnm.Print_Titles') { + worksheet = worksheets[definedName.localSheetId]; + if (worksheet) { + if (!worksheet.pageSetup) { + worksheet.pageSetup = {}; + } + const rangeString = definedName.ranges.join(','); + const dollarRegex = /\$/g; + const rowRangeRegex = /\$\d+:\$\d+/; + const rowRangeMatches = rangeString.match(rowRangeRegex); + if (rowRangeMatches && rowRangeMatches.length) { + const range = rowRangeMatches[0]; + worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, ''); + } + const columnRangeRegex = /\$[A-Z]+:\$[A-Z]+/; + const columnRangeMatches = rangeString.match(columnRangeRegex); + if (columnRangeMatches && columnRangeMatches.length) { + const range = columnRangeMatches[0]; + worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, ''); + } + } + } else { + definedNames.push(definedName); + } + }); + model.definedNames = definedNames; + + // used by sheets to build their image models + model.media.forEach((media, i) => { + media.index = i; + }); + } +} +WorkbookXform.WORKBOOK_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'x15', + 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main' +}; +WorkbookXform.STATIC_XFORMS = { + fileVersion: new StaticXform({ + tag: 'fileVersion', + $: { + appName: 'xl', + lastEdited: 5, + lowestEdited: 5, + rupBuild: 9303 + } + }) +}; +module.exports = WorkbookXform; +//# sourceMappingURL=workbook-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e04ea7f8b50e5cac54ca2bbbc3795cddd1a5bdcc --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workbook-xform.js","names":["_","require","colCache","XmlStream","BaseXform","StaticXform","ListXform","DefinedNameXform","SheetXform","WorkbookViewXform","WorkbookPropertiesXform","WorkbookCalcPropertiesXform","WorkbookXform","constructor","map","fileVersion","STATIC_XFORMS","workbookPr","bookViews","tag","count","childXform","sheets","definedNames","calcPr","prepare","model","worksheets","printAreas","index","forEach","sheet","pageSetup","printArea","split","printAreaComponents","definedName","name","ranges","localSheetId","push","printTitlesRow","printTitlesColumn","titlesColumns","titlesRows","length","concat","media","medium","i","type","render","xmlStream","openXml","StdDocAttributes","openNode","WORKBOOK_ATTRIBUTES","properties","views","calcProperties","closeNode","parseOpen","node","parser","parseText","text","parseClose","undefined","reconcile","rels","workbookRels","reduce","rel","Id","worksheet","rId","worksheetHash","Target","replace","id","state","each","range","decodeEx","dimensions","rangeString","join","dollarRegex","rowRangeRegex","rowRangeMatches","match","columnRangeRegex","columnRangeMatches","xmlns","$","appName","lastEdited","lowestEdited","rupBuild","module","exports"],"sources":["../../../../../lib/xlsx/xform/book/workbook-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst DefinedNameXform = require('./defined-name-xform');\nconst SheetXform = require('./sheet-xform');\nconst WorkbookViewXform = require('./workbook-view-xform');\nconst WorkbookPropertiesXform = require('./workbook-properties-xform');\nconst WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform');\n\nclass WorkbookXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion,\n workbookPr: new WorkbookPropertiesXform(),\n bookViews: new ListXform({\n tag: 'bookViews',\n count: false,\n childXform: new WorkbookViewXform(),\n }),\n sheets: new ListXform({tag: 'sheets', count: false, childXform: new SheetXform()}),\n definedNames: new ListXform({\n tag: 'definedNames',\n count: false,\n childXform: new DefinedNameXform(),\n }),\n calcPr: new WorkbookCalcPropertiesXform(),\n };\n }\n\n prepare(model) {\n model.sheets = model.worksheets;\n\n // collate all the print areas from all of the sheets and add them to the defined names\n const printAreas = [];\n let index = 0; // sheets is sparse array - calc index manually\n model.sheets.forEach(sheet => {\n if (sheet.pageSetup && sheet.pageSetup.printArea) {\n sheet.pageSetup.printArea.split('&&').forEach(printArea => {\n const printAreaComponents = printArea.split(':');\n const definedName = {\n name: '_xlnm.Print_Area',\n ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`],\n localSheetId: index,\n };\n printAreas.push(definedName);\n });\n }\n\n if (\n sheet.pageSetup &&\n (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)\n ) {\n const ranges = [];\n\n if (sheet.pageSetup.printTitlesColumn) {\n const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':');\n ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`);\n }\n\n if (sheet.pageSetup.printTitlesRow) {\n const titlesRows = sheet.pageSetup.printTitlesRow.split(':');\n ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`);\n }\n\n const definedName = {\n name: '_xlnm.Print_Titles',\n ranges,\n localSheetId: index,\n };\n\n printAreas.push(definedName);\n }\n index++;\n });\n if (printAreas.length) {\n model.definedNames = model.definedNames.concat(printAreas);\n }\n\n (model.media || []).forEach((medium, i) => {\n // assign name\n medium.name = medium.type + (i + 1);\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES);\n\n this.map.fileVersion.render(xmlStream);\n this.map.workbookPr.render(xmlStream, model.properties);\n this.map.bookViews.render(xmlStream, model.views);\n this.map.sheets.render(xmlStream, model.sheets);\n this.map.definedNames.render(xmlStream, model.definedNames);\n this.map.calcPr.render(xmlStream, model.calcProperties);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'workbook':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'workbook':\n this.model = {\n sheets: this.map.sheets.model,\n properties: this.map.workbookPr.model || {},\n views: this.map.bookViews.model,\n calcProperties: {},\n };\n if (this.map.definedNames.model) {\n this.model.definedNames = this.map.definedNames.model;\n }\n\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model) {\n const rels = (model.workbookRels || []).reduce((map, rel) => {\n map[rel.Id] = rel;\n return map;\n }, {});\n\n // reconcile sheet ids, rIds and names\n const worksheets = [];\n let worksheet;\n let index = 0;\n\n (model.sheets || []).forEach(sheet => {\n const rel = rels[sheet.rId];\n if (!rel) {\n return;\n }\n // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`,\n // otherwise it will be spliced directly behind `xl/`. i.g.\n worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\\s|\\/xl\\/)+/, '')}`];\n // If there are \"chartsheets\" in the file, rel.Target will\n // come out as chartsheets/sheet1.xml or similar here, and\n // that won't be in model.worksheetHash.\n // As we don't have the infrastructure to support chartsheets,\n // we will ignore them for now:\n if (worksheet) {\n worksheet.name = sheet.name;\n worksheet.id = sheet.id;\n worksheet.state = sheet.state;\n worksheets[index++] = worksheet;\n }\n });\n\n // reconcile print areas\n const definedNames = [];\n _.each(model.definedNames, definedName => {\n if (definedName.name === '_xlnm.Print_Area') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n const range = colCache.decodeEx(definedName.ranges[0]);\n worksheet.pageSetup.printArea = worksheet.pageSetup.printArea\n ? `${worksheet.pageSetup.printArea}&&${range.dimensions}`\n : range.dimensions;\n }\n } else if (definedName.name === '_xlnm.Print_Titles') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n\n const rangeString = definedName.ranges.join(',');\n\n const dollarRegex = /\\$/g;\n\n const rowRangeRegex = /\\$\\d+:\\$\\d+/;\n const rowRangeMatches = rangeString.match(rowRangeRegex);\n\n if (rowRangeMatches && rowRangeMatches.length) {\n const range = rowRangeMatches[0];\n worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, '');\n }\n\n const columnRangeRegex = /\\$[A-Z]+:\\$[A-Z]+/;\n const columnRangeMatches = rangeString.match(columnRangeRegex);\n\n if (columnRangeMatches && columnRangeMatches.length) {\n const range = columnRangeMatches[0];\n worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, '');\n }\n }\n } else {\n definedNames.push(definedName);\n }\n });\n model.definedNames = definedNames;\n\n // used by sheets to build their image models\n model.media.forEach((media, i) => {\n media.index = i;\n });\n }\n}\n\nWorkbookXform.WORKBOOK_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x15',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n};\nWorkbookXform.STATIC_XFORMS = {\n fileVersion: new StaticXform({\n tag: 'fileVersion',\n $: {appName: 'xl', lastEdited: 5, lowestEdited: 5, rupBuild: 9303},\n }),\n};\n\nmodule.exports = WorkbookXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..73fa9c84e58ebf32e3f00ad853bd6153385bde46 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js @@ -0,0 +1,103 @@ +"use strict"; + +const RichTextXform = require('../strings/rich-text-xform'); +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); + +/** + + + + + + + + + + 51422: + + + + + + + + test + + + + */ + +const CommentXform = module.exports = function (model) { + this.model = model; +}; +utils.inherits(CommentXform, BaseXform, { + get tag() { + return 'r'; + }, + get richTextXform() { + if (!this._richTextXform) { + this._richTextXform = new RichTextXform(); + } + return this._richTextXform; + }, + render(xmlStream, model) { + model = model || this.model; + xmlStream.openNode('comment', { + ref: model.ref, + authorId: 0 + }); + xmlStream.openNode('text'); + if (model && model.note && model.note.texts) { + model.note.texts.forEach(text => { + this.richTextXform.render(xmlStream, text); + }); + } + xmlStream.closeNode(); + xmlStream.closeNode(); + }, + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'comment': + this.model = { + type: 'note', + note: { + texts: [] + }, + ...node.attributes + }; + return true; + case 'r': + this.parser = this.richTextXform; + this.parser.parseOpen(node); + return true; + default: + return false; + } + }, + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + }, + parseClose(name) { + switch (name) { + case 'comment': + return false; + case 'r': + this.model.note.texts.push(this.parser.model); + this.parser = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + } + return true; + } + } +}); +//# sourceMappingURL=comment-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..7933f79e3a995cd32751c98d64aeb6ec98e17e02 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"comment-xform.js","names":["RichTextXform","require","utils","BaseXform","CommentXform","module","exports","model","inherits","tag","richTextXform","_richTextXform","render","xmlStream","openNode","ref","authorId","note","texts","forEach","text","closeNode","parseOpen","node","parser","name","type","attributes","parseText","parseClose","push","undefined"],"sources":["../../../../../lib/xlsx/xform/comment/comment-xform.js"],"sourcesContent":["const RichTextXform = require('../strings/rich-text-xform');\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\n/**\n \n \n \n \n \n \n \n \n \n 51422:\n \n \n \n \n \n \n \n test\n \n \n \n */\n\nconst CommentXform = (module.exports = function(model) {\n this.model = model;\n});\n\nutils.inherits(CommentXform, BaseXform, {\n get tag() {\n return 'r';\n },\n\n get richTextXform() {\n if (!this._richTextXform) {\n this._richTextXform = new RichTextXform();\n }\n return this._richTextXform;\n },\n\n render(xmlStream, model) {\n model = model || this.model;\n\n xmlStream.openNode('comment', {\n ref: model.ref,\n authorId: 0,\n });\n xmlStream.openNode('text');\n if (model && model.note && model.note.texts) {\n model.note.texts.forEach(text => {\n this.richTextXform.render(xmlStream, text);\n });\n }\n xmlStream.closeNode();\n xmlStream.closeNode();\n },\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'comment':\n this.model = {\n type: 'note',\n note: {\n texts: [],\n },\n ...node.attributes,\n };\n return true;\n case 'r':\n this.parser = this.richTextXform;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n },\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n },\n parseClose(name) {\n switch (name) {\n case 'comment':\n return false;\n case 'r':\n this.model.note.texts.push(this.parser.model);\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n },\n});\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..c35cc1c6ee5406bb09b4a0da9b5cbf98780094a1 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js @@ -0,0 +1,76 @@ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +const CommentXform = require('./comment-xform'); +const CommentsXform = module.exports = function () { + this.map = { + comment: new CommentXform() + }; +}; +utils.inherits(CommentsXform, BaseXform, { + COMMENTS_ATTRIBUTES: { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main' + } +}, { + render(xmlStream, model) { + model = model || this.model; + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('comments', CommentsXform.COMMENTS_ATTRIBUTES); + + // authors + // TODO: support authors properly + xmlStream.openNode('authors'); + xmlStream.leafNode('author', null, 'Author'); + xmlStream.closeNode(); + + // comments + xmlStream.openNode('commentList'); + model.comments.forEach(comment => { + this.map.comment.render(xmlStream, comment); + }); + xmlStream.closeNode(); + xmlStream.closeNode(); + }, + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'commentList': + this.model = { + comments: [] + }; + return true; + case 'comment': + this.parser = this.map.comment; + this.parser.parseOpen(node); + return true; + default: + return false; + } + }, + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + }, + parseClose(name) { + switch (name) { + case 'commentList': + return false; + case 'comment': + this.model.comments.push(this.parser.model); + this.parser = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + } + return true; + } + } +}); +//# sourceMappingURL=comments-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..722d107fe13ad9a66b850c51c7bd47834760005e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"comments-xform.js","names":["XmlStream","require","utils","BaseXform","CommentXform","CommentsXform","module","exports","map","comment","inherits","COMMENTS_ATTRIBUTES","xmlns","render","xmlStream","model","openXml","StdDocAttributes","openNode","leafNode","closeNode","comments","forEach","parseOpen","node","parser","name","parseText","text","parseClose","push","undefined"],"sources":["../../../../../lib/xlsx/xform/comment/comments-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nconst CommentXform = require('./comment-xform');\n\nconst CommentsXform = (module.exports = function() {\n this.map = {\n comment: new CommentXform(),\n };\n});\n\nutils.inherits(\n CommentsXform,\n BaseXform,\n {\n COMMENTS_ATTRIBUTES: {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n },\n },\n {\n render(xmlStream, model) {\n model = model || this.model;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('comments', CommentsXform.COMMENTS_ATTRIBUTES);\n\n // authors\n // TODO: support authors properly\n xmlStream.openNode('authors');\n xmlStream.leafNode('author', null, 'Author');\n xmlStream.closeNode();\n\n // comments\n xmlStream.openNode('commentList');\n model.comments.forEach(comment => {\n this.map.comment.render(xmlStream, comment);\n });\n xmlStream.closeNode();\n xmlStream.closeNode();\n },\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'commentList':\n this.model = {\n comments: [],\n };\n return true;\n case 'comment':\n this.parser = this.map.comment;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n },\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n },\n parseClose(name) {\n switch (name) {\n case 'commentList':\n return false;\n case 'comment':\n this.model.comments.push(this.parser.model);\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n },\n }\n);\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,2BAA2B,CAAC;AACtD,MAAMC,KAAK,GAAGD,OAAO,CAAC,sBAAsB,CAAC;AAC7C,MAAME,SAAS,GAAGF,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMG,YAAY,GAAGH,OAAO,CAAC,iBAAiB,CAAC;AAE/C,MAAMI,aAAa,GAAIC,MAAM,CAACC,OAAO,GAAG,YAAW;EACjD,IAAI,CAACC,GAAG,GAAG;IACTC,OAAO,EAAE,IAAIL,YAAY,CAAC;EAC5B,CAAC;AACH,CAAE;AAEFF,KAAK,CAACQ,QAAQ,CACZL,aAAa,EACbF,SAAS,EACT;EACEQ,mBAAmB,EAAE;IACnBC,KAAK,EAAE;EACT;AACF,CAAC,EACD;EACEC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBA,KAAK,GAAGA,KAAK,IAAI,IAAI,CAACA,KAAK;IAC3BD,SAAS,CAACE,OAAO,CAAChB,SAAS,CAACiB,gBAAgB,CAAC;IAC7CH,SAAS,CAACI,QAAQ,CAAC,UAAU,EAAEb,aAAa,CAACM,mBAAmB,CAAC;;IAEjE;IACA;IACAG,SAAS,CAACI,QAAQ,CAAC,SAAS,CAAC;IAC7BJ,SAAS,CAACK,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC;IAC5CL,SAAS,CAACM,SAAS,CAAC,CAAC;;IAErB;IACAN,SAAS,CAACI,QAAQ,CAAC,aAAa,CAAC;IACjCH,KAAK,CAACM,QAAQ,CAACC,OAAO,CAACb,OAAO,IAAI;MAChC,IAAI,CAACD,GAAG,CAACC,OAAO,CAACI,MAAM,CAACC,SAAS,EAAEL,OAAO,CAAC;IAC7C,CAAC,CAAC;IACFK,SAAS,CAACM,SAAS,CAAC,CAAC;IACrBN,SAAS,CAACM,SAAS,CAAC,CAAC;EACvB,CAAC;EAEDG,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQA,IAAI,CAACE,IAAI;MACf,KAAK,aAAa;QAChB,IAAI,CAACX,KAAK,GAAG;UACXM,QAAQ,EAAE;QACZ,CAAC;QACD,OAAO,IAAI;MACb,KAAK,SAAS;QACZ,IAAI,CAACI,MAAM,GAAG,IAAI,CAACjB,GAAG,CAACC,OAAO;QAC9B,IAAI,CAACgB,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF,CAAC;EACDG,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACH,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACE,SAAS,CAACC,IAAI,CAAC;IAC7B;EACF,CAAC;EACDC,UAAUA,CAACH,IAAI,EAAE;IACf,QAAQA,IAAI;MACV,KAAK,aAAa;QAChB,OAAO,KAAK;MACd,KAAK,SAAS;QACZ,IAAI,CAACX,KAAK,CAACM,QAAQ,CAACS,IAAI,CAAC,IAAI,CAACL,MAAM,CAACV,KAAK,CAAC;QAC3C,IAAI,CAACU,MAAM,GAAGM,SAAS;QACvB,OAAO,IAAI;MACb;QACE,IAAI,IAAI,CAACN,MAAM,EAAE;UACf,IAAI,CAACA,MAAM,CAACI,UAAU,CAACH,IAAI,CAAC;QAC9B;QACA,OAAO,IAAI;IACf;EACF;AACF,CACF,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..ab4dec6017434ad6a18141d556afbd3acb81a89b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js @@ -0,0 +1,35 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +class VmlPositionXform extends BaseXform { + constructor(model) { + super(); + this._model = model; + } + get tag() { + return this._model && this._model.tag; + } + render(xmlStream, model, type) { + if (model === type[2]) { + xmlStream.leafNode(this.tag); + } else if (this.tag === 'x:SizeWithCells' && model === type[1]) { + xmlStream.leafNode(this.tag); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = {}; + this.model[this.tag] = true; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = VmlPositionXform; +//# sourceMappingURL=vml-position-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..47eeefa16317f36a89d8a60af3308108328cb2d4 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vml-position-xform.js","names":["BaseXform","require","VmlPositionXform","constructor","model","_model","tag","render","xmlStream","type","leafNode","parseOpen","node","name","parseText","parseClose","module","exports"],"sources":["../../../../../../lib/xlsx/xform/comment/style/vml-position-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nclass VmlPositionXform extends BaseXform {\n constructor(model) {\n super();\n this._model = model;\n }\n\n get tag() {\n return this._model && this._model.tag;\n }\n\n render(xmlStream, model, type) {\n if (model === type[2]) {\n xmlStream.leafNode(this.tag);\n } else if (this.tag === 'x:SizeWithCells' && model === type[1]) {\n xmlStream.leafNode(this.tag);\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {};\n this.model[this.tag] = true;\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlPositionXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAMC,gBAAgB,SAASF,SAAS,CAAC;EACvCG,WAAWA,CAACC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,MAAM,GAAGD,KAAK;EACrB;EAEA,IAAIE,GAAGA,CAAA,EAAG;IACR,OAAO,IAAI,CAACD,MAAM,IAAI,IAAI,CAACA,MAAM,CAACC,GAAG;EACvC;EAEAC,MAAMA,CAACC,SAAS,EAAEJ,KAAK,EAAEK,IAAI,EAAE;IAC7B,IAAIL,KAAK,KAAKK,IAAI,CAAC,CAAC,CAAC,EAAE;MACrBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,CAAC;IAC9B,CAAC,MAAM,IAAI,IAAI,CAACA,GAAG,KAAK,iBAAiB,IAAIF,KAAK,KAAKK,IAAI,CAAC,CAAC,CAAC,EAAE;MAC9DD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,CAAC;IAC9B;EACF;EAEAK,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACP,GAAG;QACX,IAAI,CAACF,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAACA,KAAK,CAAC,IAAI,CAACE,GAAG,CAAC,GAAG,IAAI;QAC3B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAQ,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGf,gBAAgB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..f9163e6f352f66159c040601662249121aaf501a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js @@ -0,0 +1,32 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +class VmlProtectionXform extends BaseXform { + constructor(model) { + super(); + this._model = model; + } + get tag() { + return this._model && this._model.tag; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.text = ''; + return true; + default: + return false; + } + } + parseText(text) { + this.text = text; + } + parseClose() { + return false; + } +} +module.exports = VmlProtectionXform; +//# sourceMappingURL=vml-protection-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3af7a0fc354c70280ac3898803903b8b7bf178da --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vml-protection-xform.js","names":["BaseXform","require","VmlProtectionXform","constructor","model","_model","tag","render","xmlStream","leafNode","parseOpen","node","name","text","parseText","parseClose","module","exports"],"sources":["../../../../../../lib/xlsx/xform/comment/style/vml-protection-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nclass VmlProtectionXform extends BaseXform {\n constructor(model) {\n super();\n this._model = model;\n }\n\n get tag() {\n return this._model && this._model.tag;\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.text = '';\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this.text = text;\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlProtectionXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAMC,kBAAkB,SAASF,SAAS,CAAC;EACzCG,WAAWA,CAACC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,MAAM,GAAGD,KAAK;EACrB;EAEA,IAAIE,GAAGA,CAAA,EAAG;IACR,OAAO,IAAI,CAACD,MAAM,IAAI,IAAI,CAACA,MAAM,CAACC,GAAG;EACvC;EAEAC,MAAMA,CAACC,SAAS,EAAEJ,KAAK,EAAE;IACvBI,SAAS,CAACC,QAAQ,CAAC,IAAI,CAACH,GAAG,EAAE,IAAI,EAAEF,KAAK,CAAC;EAC3C;EAEAM,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACN,GAAG;QACX,IAAI,CAACO,IAAI,GAAG,EAAE;QACd,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAC,SAASA,CAACD,IAAI,EAAE;IACd,IAAI,CAACA,IAAI,GAAGA,IAAI;EAClB;EAEAE,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGf,kBAAkB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..fd77a210c316a8fca46e9c4bfc72c65f08eaf035 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js @@ -0,0 +1,53 @@ +"use strict"; + +const BaseXform = require('../base-xform'); + +// render the triangle in the cell for the comment +class VmlAnchorXform extends BaseXform { + get tag() { + return 'x:Anchor'; + } + getAnchorRect(anchor) { + const l = Math.floor(anchor.left); + const lf = Math.floor((anchor.left - l) * 68); + const t = Math.floor(anchor.top); + const tf = Math.floor((anchor.top - t) * 18); + const r = Math.floor(anchor.right); + const rf = Math.floor((anchor.right - r) * 68); + const b = Math.floor(anchor.bottom); + const bf = Math.floor((anchor.bottom - b) * 18); + return [l, lf, t, tf, r, rf, b, bf]; + } + getDefaultRect(ref) { + const l = ref.col; + const lf = 6; + const t = Math.max(ref.row - 2, 0); + const tf = 14; + const r = l + 2; + const rf = 2; + const b = t + 4; + const bf = 16; + return [l, lf, t, tf, r, rf, b, bf]; + } + render(xmlStream, model) { + const rect = model.anchor ? this.getAnchorRect(model.anchor) : this.getDefaultRect(model.refAddress); + xmlStream.leafNode('x:Anchor', null, rect.join(', ')); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.text = ''; + return true; + default: + return false; + } + } + parseText(text) { + this.text = text; + } + parseClose() { + return false; + } +} +module.exports = VmlAnchorXform; +//# sourceMappingURL=vml-anchor-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f9790c01c896a46b31661e439cac1dfdb7566942 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vml-anchor-xform.js","names":["BaseXform","require","VmlAnchorXform","tag","getAnchorRect","anchor","l","Math","floor","left","lf","t","top","tf","r","right","rf","b","bottom","bf","getDefaultRect","ref","col","max","row","render","xmlStream","model","rect","refAddress","leafNode","join","parseOpen","node","name","text","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/comment/vml-anchor-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\n// render the triangle in the cell for the comment\nclass VmlAnchorXform extends BaseXform {\n get tag() {\n return 'x:Anchor';\n }\n\n getAnchorRect(anchor) {\n const l = Math.floor(anchor.left);\n const lf = Math.floor((anchor.left - l) * 68);\n const t = Math.floor(anchor.top);\n const tf = Math.floor((anchor.top - t) * 18);\n const r = Math.floor(anchor.right);\n const rf = Math.floor((anchor.right - r) * 68);\n const b = Math.floor(anchor.bottom);\n const bf = Math.floor((anchor.bottom - b) * 18);\n return [l, lf, t, tf, r, rf, b, bf];\n }\n\n getDefaultRect(ref) {\n const l = ref.col;\n const lf = 6;\n const t = Math.max(ref.row - 2, 0);\n const tf = 14;\n const r = l + 2;\n const rf = 2;\n const b = t + 4;\n const bf = 16;\n return [l, lf, t, tf, r, rf, b, bf];\n }\n\n render(xmlStream, model) {\n const rect = model.anchor\n ? this.getAnchorRect(model.anchor)\n : this.getDefaultRect(model.refAddress);\n\n xmlStream.leafNode('x:Anchor', null, rect.join(', '));\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.text = '';\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this.text = text;\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlAnchorXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA,MAAMC,cAAc,SAASF,SAAS,CAAC;EACrC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,UAAU;EACnB;EAEAC,aAAaA,CAACC,MAAM,EAAE;IACpB,MAAMC,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACH,MAAM,CAACI,IAAI,CAAC;IACjC,MAAMC,EAAE,GAAGH,IAAI,CAACC,KAAK,CAAC,CAACH,MAAM,CAACI,IAAI,GAAGH,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAMK,CAAC,GAAGJ,IAAI,CAACC,KAAK,CAACH,MAAM,CAACO,GAAG,CAAC;IAChC,MAAMC,EAAE,GAAGN,IAAI,CAACC,KAAK,CAAC,CAACH,MAAM,CAACO,GAAG,GAAGD,CAAC,IAAI,EAAE,CAAC;IAC5C,MAAMG,CAAC,GAAGP,IAAI,CAACC,KAAK,CAACH,MAAM,CAACU,KAAK,CAAC;IAClC,MAAMC,EAAE,GAAGT,IAAI,CAACC,KAAK,CAAC,CAACH,MAAM,CAACU,KAAK,GAAGD,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAMG,CAAC,GAAGV,IAAI,CAACC,KAAK,CAACH,MAAM,CAACa,MAAM,CAAC;IACnC,MAAMC,EAAE,GAAGZ,IAAI,CAACC,KAAK,CAAC,CAACH,MAAM,CAACa,MAAM,GAAGD,CAAC,IAAI,EAAE,CAAC;IAC/C,OAAO,CAACX,CAAC,EAAEI,EAAE,EAAEC,CAAC,EAAEE,EAAE,EAAEC,CAAC,EAAEE,EAAE,EAAEC,CAAC,EAAEE,EAAE,CAAC;EACrC;EAEAC,cAAcA,CAACC,GAAG,EAAE;IAClB,MAAMf,CAAC,GAAGe,GAAG,CAACC,GAAG;IACjB,MAAMZ,EAAE,GAAG,CAAC;IACZ,MAAMC,CAAC,GAAGJ,IAAI,CAACgB,GAAG,CAACF,GAAG,CAACG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IAClC,MAAMX,EAAE,GAAG,EAAE;IACb,MAAMC,CAAC,GAAGR,CAAC,GAAG,CAAC;IACf,MAAMU,EAAE,GAAG,CAAC;IACZ,MAAMC,CAAC,GAAGN,CAAC,GAAG,CAAC;IACf,MAAMQ,EAAE,GAAG,EAAE;IACb,OAAO,CAACb,CAAC,EAAEI,EAAE,EAAEC,CAAC,EAAEE,EAAE,EAAEC,CAAC,EAAEE,EAAE,EAAEC,CAAC,EAAEE,EAAE,CAAC;EACrC;EAEAM,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,MAAMC,IAAI,GAAGD,KAAK,CAACtB,MAAM,GACrB,IAAI,CAACD,aAAa,CAACuB,KAAK,CAACtB,MAAM,CAAC,GAChC,IAAI,CAACe,cAAc,CAACO,KAAK,CAACE,UAAU,CAAC;IAEzCH,SAAS,CAACI,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAEF,IAAI,CAACG,IAAI,CAAC,IAAI,CAAC,CAAC;EACvD;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAAC/B,GAAG;QACX,IAAI,CAACgC,IAAI,GAAG,EAAE;QACd,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAC,SAASA,CAACD,IAAI,EAAE;IACd,IAAI,CAACA,IAAI,GAAGA,IAAI;EAClB;EAEAE,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGrC,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..53157208a724c6315125527b22c3cd395c0e6627 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js @@ -0,0 +1,97 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const VmlAnchorXform = require('./vml-anchor-xform'); +const VmlProtectionXform = require('./style/vml-protection-xform'); +const VmlPositionXform = require('./style/vml-position-xform'); +const POSITION_TYPE = ['twoCells', 'oneCells', 'absolute']; +class VmlClientDataXform extends BaseXform { + constructor() { + super(); + this.map = { + 'x:Anchor': new VmlAnchorXform(), + 'x:Locked': new VmlProtectionXform({ + tag: 'x:Locked' + }), + 'x:LockText': new VmlProtectionXform({ + tag: 'x:LockText' + }), + 'x:SizeWithCells': new VmlPositionXform({ + tag: 'x:SizeWithCells' + }), + 'x:MoveWithCells': new VmlPositionXform({ + tag: 'x:MoveWithCells' + }) + }; + } + get tag() { + return 'x:ClientData'; + } + render(xmlStream, model) { + const { + protection, + editAs + } = model.note; + xmlStream.openNode(this.tag, { + ObjectType: 'Note' + }); + this.map['x:MoveWithCells'].render(xmlStream, editAs, POSITION_TYPE); + this.map['x:SizeWithCells'].render(xmlStream, editAs, POSITION_TYPE); + this.map['x:Anchor'].render(xmlStream, model); + this.map['x:Locked'].render(xmlStream, protection.locked); + xmlStream.leafNode('x:AutoFill', null, 'False'); + this.map['x:LockText'].render(xmlStream, protection.lockText); + xmlStream.leafNode('x:Row', null, model.refAddress.row - 1); + xmlStream.leafNode('x:Column', null, model.refAddress.col - 1); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + anchor: [], + protection: {}, + editAs: '' + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.normalizeModel(); + return false; + default: + return true; + } + } + normalizeModel() { + const position = Object.assign({}, this.map['x:MoveWithCells'].model, this.map['x:SizeWithCells'].model); + const len = Object.keys(position).length; + this.model.editAs = POSITION_TYPE[len]; + this.model.anchor = this.map['x:Anchor'].text; + this.model.protection.locked = this.map['x:Locked'].text; + this.model.protection.lockText = this.map['x:LockText'].text; + } +} +module.exports = VmlClientDataXform; +//# sourceMappingURL=vml-client-data-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..8a03ab34ba82ea16d2eedf8fe6b159aebf5703fe --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vml-client-data-xform.js","names":["BaseXform","require","VmlAnchorXform","VmlProtectionXform","VmlPositionXform","POSITION_TYPE","VmlClientDataXform","constructor","map","tag","render","xmlStream","model","protection","editAs","note","openNode","ObjectType","locked","leafNode","lockText","refAddress","row","col","closeNode","parseOpen","node","name","reset","anchor","parser","parseText","text","parseClose","undefined","normalizeModel","position","Object","assign","len","keys","length","module","exports"],"sources":["../../../../../lib/xlsx/xform/comment/vml-client-data-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nconst VmlAnchorXform = require('./vml-anchor-xform');\nconst VmlProtectionXform = require('./style/vml-protection-xform');\nconst VmlPositionXform = require('./style/vml-position-xform');\n\nconst POSITION_TYPE = ['twoCells', 'oneCells', 'absolute'];\n\nclass VmlClientDataXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'x:Anchor': new VmlAnchorXform(),\n 'x:Locked': new VmlProtectionXform({tag: 'x:Locked'}),\n 'x:LockText': new VmlProtectionXform({tag: 'x:LockText'}),\n 'x:SizeWithCells': new VmlPositionXform({tag: 'x:SizeWithCells'}),\n 'x:MoveWithCells': new VmlPositionXform({tag: 'x:MoveWithCells'}),\n };\n }\n\n get tag() {\n return 'x:ClientData';\n }\n\n render(xmlStream, model) {\n const {protection, editAs} = model.note;\n xmlStream.openNode(this.tag, {ObjectType: 'Note'});\n this.map['x:MoveWithCells'].render(xmlStream, editAs, POSITION_TYPE);\n this.map['x:SizeWithCells'].render(xmlStream, editAs, POSITION_TYPE);\n this.map['x:Anchor'].render(xmlStream, model);\n this.map['x:Locked'].render(xmlStream, protection.locked);\n xmlStream.leafNode('x:AutoFill', null, 'False');\n this.map['x:LockText'].render(xmlStream, protection.lockText);\n xmlStream.leafNode('x:Row', null, model.refAddress.row - 1);\n xmlStream.leafNode('x:Column', null, model.refAddress.col - 1);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n anchor: [],\n protection: {},\n editAs: '',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.normalizeModel();\n return false;\n default:\n return true;\n }\n }\n\n normalizeModel() {\n const position = Object.assign(\n {},\n this.map['x:MoveWithCells'].model,\n this.map['x:SizeWithCells'].model\n );\n const len = Object.keys(position).length;\n this.model.editAs = POSITION_TYPE[len];\n this.model.anchor = this.map['x:Anchor'].text;\n this.model.protection.locked = this.map['x:Locked'].text;\n this.model.protection.lockText = this.map['x:LockText'].text;\n }\n}\n\nmodule.exports = VmlClientDataXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..86cb683ccd12eb89f1aad649bcde91b7711f0a58 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js @@ -0,0 +1,107 @@ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const VmlShapeXform = require('./vml-shape-xform'); + +// This class is (currently) single purposed to insert the triangle +// drawing icons on commented cells +class VmlNotesXform extends BaseXform { + constructor() { + super(); + this.map = { + 'v:shape': new VmlShapeXform() + }; + } + get tag() { + return 'xml'; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode(this.tag, VmlNotesXform.DRAWING_ATTRIBUTES); + xmlStream.openNode('o:shapelayout', { + 'v:ext': 'edit' + }); + xmlStream.leafNode('o:idmap', { + 'v:ext': 'edit', + data: 1 + }); + xmlStream.closeNode(); + xmlStream.openNode('v:shapetype', { + id: '_x0000_t202', + coordsize: '21600,21600', + 'o:spt': 202, + path: 'm,l,21600r21600,l21600,xe' + }); + xmlStream.leafNode('v:stroke', { + joinstyle: 'miter' + }); + xmlStream.leafNode('v:path', { + gradientshapeok: 't', + 'o:connecttype': 'rect' + }); + xmlStream.closeNode(); + model.comments.forEach((item, index) => { + this.map['v:shape'].render(xmlStream, item, index); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + comments: [] + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.comments.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.anchors.forEach(anchor => { + if (anchor.br) { + this.map['xdr:twoCellAnchor'].reconcile(anchor, options); + } else { + this.map['xdr:oneCellAnchor'].reconcile(anchor, options); + } + }); + } +} +VmlNotesXform.DRAWING_ATTRIBUTES = { + 'xmlns:v': 'urn:schemas-microsoft-com:vml', + 'xmlns:o': 'urn:schemas-microsoft-com:office:office', + 'xmlns:x': 'urn:schemas-microsoft-com:office:excel' +}; +module.exports = VmlNotesXform; +//# sourceMappingURL=vml-notes-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..527e8d43ac8e6dde1249921041d5c01b1dbeead2 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vml-notes-xform.js","names":["XmlStream","require","BaseXform","VmlShapeXform","VmlNotesXform","constructor","map","tag","render","xmlStream","model","openXml","StdDocAttributes","openNode","DRAWING_ATTRIBUTES","leafNode","data","closeNode","id","coordsize","path","joinstyle","gradientshapeok","comments","forEach","item","index","parseOpen","node","parser","name","reset","parseText","text","parseClose","push","undefined","reconcile","options","anchors","anchor","br","module","exports"],"sources":["../../../../../lib/xlsx/xform/comment/vml-notes-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst VmlShapeXform = require('./vml-shape-xform');\n\n// This class is (currently) single purposed to insert the triangle\n// drawing icons on commented cells\nclass VmlNotesXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'v:shape': new VmlShapeXform(),\n };\n }\n\n get tag() {\n return 'xml';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, VmlNotesXform.DRAWING_ATTRIBUTES);\n\n xmlStream.openNode('o:shapelayout', {'v:ext': 'edit'});\n xmlStream.leafNode('o:idmap', {'v:ext': 'edit', data: 1});\n xmlStream.closeNode();\n\n xmlStream.openNode('v:shapetype', {\n id: '_x0000_t202',\n coordsize: '21600,21600',\n 'o:spt': 202,\n path: 'm,l,21600r21600,l21600,xe',\n });\n xmlStream.leafNode('v:stroke', {joinstyle: 'miter'});\n xmlStream.leafNode('v:path', {gradientshapeok: 't', 'o:connecttype': 'rect'});\n xmlStream.closeNode();\n\n model.comments.forEach((item, index) => {\n this.map['v:shape'].render(xmlStream, item, index);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n comments: [],\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.comments.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.anchors.forEach(anchor => {\n if (anchor.br) {\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\n } else {\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\n }\n });\n }\n}\n\nVmlNotesXform.DRAWING_ATTRIBUTES = {\n 'xmlns:v': 'urn:schemas-microsoft-com:vml',\n 'xmlns:o': 'urn:schemas-microsoft-com:office:office',\n 'xmlns:x': 'urn:schemas-microsoft-com:office:excel',\n};\n\nmodule.exports = VmlNotesXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..d2f1d2a4049b8a0f491db69d14b49b23d4c2114d --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js @@ -0,0 +1,92 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const VmlTextboxXform = require('./vml-textbox-xform'); +const VmlClientDataXform = require('./vml-client-data-xform'); +class VmlShapeXform extends BaseXform { + constructor() { + super(); + this.map = { + 'v:textbox': new VmlTextboxXform(), + 'x:ClientData': new VmlClientDataXform() + }; + } + get tag() { + return 'v:shape'; + } + render(xmlStream, model, index) { + xmlStream.openNode('v:shape', VmlShapeXform.V_SHAPE_ATTRIBUTES(model, index)); + xmlStream.leafNode('v:fill', { + color2: 'infoBackground [80]' + }); + xmlStream.leafNode('v:shadow', { + color: 'none [81]', + obscured: 't' + }); + xmlStream.leafNode('v:path', { + 'o:connecttype': 'none' + }); + this.map['v:textbox'].render(xmlStream, model); + this.map['x:ClientData'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + margins: { + insetmode: node.attributes['o:insetmode'] + }, + anchor: '', + editAs: '', + protection: {} + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.margins.inset = this.map['v:textbox'].model && this.map['v:textbox'].model.inset; + this.model.protection = this.map['x:ClientData'].model && this.map['x:ClientData'].model.protection; + this.model.anchor = this.map['x:ClientData'].model && this.map['x:ClientData'].model.anchor; + this.model.editAs = this.map['x:ClientData'].model && this.map['x:ClientData'].model.editAs; + return false; + default: + return true; + } + } +} +VmlShapeXform.V_SHAPE_ATTRIBUTES = (model, index) => ({ + id: `_x0000_s${1025 + index}`, + type: '#_x0000_t202', + style: 'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden', + fillcolor: 'infoBackground [80]', + strokecolor: 'none [81]', + 'o:insetmode': model.note.margins && model.note.margins.insetmode +}); +module.exports = VmlShapeXform; +//# sourceMappingURL=vml-shape-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..9bfc2c54e63f52041cae156f93fa3b1ab149fbc1 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vml-shape-xform.js","names":["BaseXform","require","VmlTextboxXform","VmlClientDataXform","VmlShapeXform","constructor","map","tag","render","xmlStream","model","index","openNode","V_SHAPE_ATTRIBUTES","leafNode","color2","color","obscured","closeNode","parseOpen","node","parser","name","reset","margins","insetmode","attributes","anchor","editAs","protection","parseText","text","parseClose","undefined","inset","id","type","style","fillcolor","strokecolor","note","module","exports"],"sources":["../../../../../lib/xlsx/xform/comment/vml-shape-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst VmlTextboxXform = require('./vml-textbox-xform');\nconst VmlClientDataXform = require('./vml-client-data-xform');\n\nclass VmlShapeXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'v:textbox': new VmlTextboxXform(),\n 'x:ClientData': new VmlClientDataXform(),\n };\n }\n\n get tag() {\n return 'v:shape';\n }\n\n render(xmlStream, model, index) {\n xmlStream.openNode('v:shape', VmlShapeXform.V_SHAPE_ATTRIBUTES(model, index));\n\n xmlStream.leafNode('v:fill', {color2: 'infoBackground [80]'});\n xmlStream.leafNode('v:shadow', {color: 'none [81]', obscured: 't'});\n xmlStream.leafNode('v:path', {'o:connecttype': 'none'});\n this.map['v:textbox'].render(xmlStream, model);\n this.map['x:ClientData'].render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n margins: {\n insetmode: node.attributes['o:insetmode'],\n },\n anchor: '',\n editAs: '',\n protection: {},\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.margins.inset = this.map['v:textbox'].model && this.map['v:textbox'].model.inset;\n this.model.protection =\n this.map['x:ClientData'].model && this.map['x:ClientData'].model.protection;\n this.model.anchor = this.map['x:ClientData'].model && this.map['x:ClientData'].model.anchor;\n this.model.editAs = this.map['x:ClientData'].model && this.map['x:ClientData'].model.editAs;\n return false;\n default:\n return true;\n }\n }\n}\n\nVmlShapeXform.V_SHAPE_ATTRIBUTES = (model, index) => ({\n id: `_x0000_s${1025 + index}`,\n type: '#_x0000_t202',\n style:\n 'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden',\n fillcolor: 'infoBackground [80]',\n strokecolor: 'none [81]',\n 'o:insetmode': model.note.margins && model.note.margins.insetmode,\n});\n\nmodule.exports = VmlShapeXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..6c0711f145a3aaa4912f109807348499e7e95cf3 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js @@ -0,0 +1,61 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class VmlTextboxXform extends BaseXform { + get tag() { + return 'v:textbox'; + } + conversionUnit(value, multiple, unit) { + return `${parseFloat(value) * multiple.toFixed(2)}${unit}`; + } + reverseConversionUnit(inset) { + return (inset || '').split(',').map(margin => { + return Number(parseFloat(this.conversionUnit(parseFloat(margin), 0.1, '')).toFixed(2)); + }); + } + render(xmlStream, model) { + const attributes = { + style: 'mso-direction-alt:auto' + }; + if (model && model.note) { + let { + inset + } = model.note && model.note.margins; + if (Array.isArray(inset)) { + inset = inset.map(margin => { + return this.conversionUnit(margin, 10, 'mm'); + }).join(','); + } + if (inset) { + attributes.inset = inset; + } + } + xmlStream.openNode('v:textbox', attributes); + xmlStream.leafNode('div', { + style: 'text-align:left' + }); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + inset: this.reverseConversionUnit(node.attributes.inset) + }; + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + return true; + } + } +} +module.exports = VmlTextboxXform; +//# sourceMappingURL=vml-textbox-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e81a436287664e3d1d1a7761447169331135a3ec --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vml-textbox-xform.js","names":["BaseXform","require","VmlTextboxXform","tag","conversionUnit","value","multiple","unit","parseFloat","toFixed","reverseConversionUnit","inset","split","map","margin","Number","render","xmlStream","model","attributes","style","note","margins","Array","isArray","join","openNode","leafNode","closeNode","parseOpen","node","name","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/comment/vml-textbox-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass VmlTextboxXform extends BaseXform {\n get tag() {\n return 'v:textbox';\n }\n\n conversionUnit(value, multiple, unit) {\n return `${parseFloat(value) * multiple.toFixed(2)}${unit}`;\n }\n\n reverseConversionUnit(inset) {\n return (inset || '').split(',').map(margin => {\n return Number(parseFloat(this.conversionUnit(parseFloat(margin), 0.1, '')).toFixed(2));\n });\n }\n\n render(xmlStream, model) {\n const attributes = {\n style: 'mso-direction-alt:auto',\n };\n if (model && model.note) {\n let {inset} = model.note && model.note.margins;\n if (Array.isArray(inset)) {\n inset = inset\n .map(margin => {\n return this.conversionUnit(margin, 10, 'mm');\n })\n .join(',');\n }\n if (inset) {\n attributes.inset = inset;\n }\n }\n xmlStream.openNode('v:textbox', attributes);\n xmlStream.leafNode('div', {style: 'text-align:left'});\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n inset: this.reverseConversionUnit(node.attributes.inset),\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = VmlTextboxXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,eAAe,SAASF,SAAS,CAAC;EACtC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEAC,cAAcA,CAACC,KAAK,EAAEC,QAAQ,EAAEC,IAAI,EAAE;IACpC,OAAQ,GAAEC,UAAU,CAACH,KAAK,CAAC,GAAGC,QAAQ,CAACG,OAAO,CAAC,CAAC,CAAE,GAAEF,IAAK,EAAC;EAC5D;EAEAG,qBAAqBA,CAACC,KAAK,EAAE;IAC3B,OAAO,CAACA,KAAK,IAAI,EAAE,EAAEC,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACC,MAAM,IAAI;MAC5C,OAAOC,MAAM,CAACP,UAAU,CAAC,IAAI,CAACJ,cAAc,CAACI,UAAU,CAACM,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAACL,OAAO,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC,CAAC;EACJ;EAEAO,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,MAAMC,UAAU,GAAG;MACjBC,KAAK,EAAE;IACT,CAAC;IACD,IAAIF,KAAK,IAAIA,KAAK,CAACG,IAAI,EAAE;MACvB,IAAI;QAACV;MAAK,CAAC,GAAGO,KAAK,CAACG,IAAI,IAAIH,KAAK,CAACG,IAAI,CAACC,OAAO;MAC9C,IAAIC,KAAK,CAACC,OAAO,CAACb,KAAK,CAAC,EAAE;QACxBA,KAAK,GAAGA,KAAK,CACVE,GAAG,CAACC,MAAM,IAAI;UACb,OAAO,IAAI,CAACV,cAAc,CAACU,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC;QAC9C,CAAC,CAAC,CACDW,IAAI,CAAC,GAAG,CAAC;MACd;MACA,IAAId,KAAK,EAAE;QACTQ,UAAU,CAACR,KAAK,GAAGA,KAAK;MAC1B;IACF;IACAM,SAAS,CAACS,QAAQ,CAAC,WAAW,EAAEP,UAAU,CAAC;IAC3CF,SAAS,CAACU,QAAQ,CAAC,KAAK,EAAE;MAACP,KAAK,EAAE;IAAiB,CAAC,CAAC;IACrDH,SAAS,CAACW,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAAC5B,GAAG;QACX,IAAI,CAACe,KAAK,GAAG;UACXP,KAAK,EAAE,IAAI,CAACD,qBAAqB,CAACoB,IAAI,CAACX,UAAU,CAACR,KAAK;QACzD,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEAqB,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACF,IAAI,EAAE;IACf,QAAQA,IAAI;MACV,KAAK,IAAI,CAAC5B,GAAG;QACX,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA+B,MAAM,CAACC,OAAO,GAAGjC,eAAe"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..4624ba8554daac188f1d3f144a3d2643e5ff4e97 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js @@ -0,0 +1,51 @@ +"use strict"; + +const BaseXform = require('./base-xform'); + +/* 'virtual' methods used as a form of documentation */ +/* eslint-disable class-methods-use-this */ + +// base class for xforms that are composed of other xforms +// offers some default implementations +class CompositeXform extends BaseXform { + createNewModel(node) { + return {}; + } + parseOpen(node) { + // Typical pattern for composite xform + this.parser = this.parser || this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === this.tag) { + this.model = this.createNewModel(node); + return true; + } + return false; + } + parseText(text) { + // Default implementation. Send text to child parser + if (this.parser) { + this.parser.parseText(text); + } + } + onParserClose(name, parser) { + // parseClose has seen a child parser close + // now need to incorporate into this.model somehow + this.model[name] = parser.model; + } + parseClose(name) { + // Default implementation + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.onParserClose(name, this.parser); + this.parser = undefined; + } + return true; + } + return name !== this.tag; + } +} +module.exports = CompositeXform; +//# sourceMappingURL=composite-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1aac604c4188b2f2e5baa5d7f2c1f4ba9aae2a6c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"composite-xform.js","names":["BaseXform","require","CompositeXform","createNewModel","node","parseOpen","parser","map","name","tag","model","parseText","text","onParserClose","parseClose","undefined","module","exports"],"sources":["../../../../lib/xlsx/xform/composite-xform.js"],"sourcesContent":["const BaseXform = require('./base-xform');\n\n/* 'virtual' methods used as a form of documentation */\n/* eslint-disable class-methods-use-this */\n\n// base class for xforms that are composed of other xforms\n// offers some default implementations\nclass CompositeXform extends BaseXform {\n createNewModel(node) {\n return {};\n }\n\n parseOpen(node) {\n // Typical pattern for composite xform\n this.parser = this.parser || this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n if (node.name === this.tag) {\n this.model = this.createNewModel(node);\n return true;\n }\n\n return false;\n }\n\n parseText(text) {\n // Default implementation. Send text to child parser\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n onParserClose(name, parser) {\n // parseClose has seen a child parser close\n // now need to incorporate into this.model somehow\n this.model[name] = parser.model;\n }\n\n parseClose(name) {\n // Default implementation\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.onParserClose(name, this.parser);\n this.parser = undefined;\n }\n return true;\n }\n\n return name !== this.tag;\n }\n}\n\nmodule.exports = CompositeXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,cAAc,CAAC;;AAEzC;AACA;;AAEA;AACA;AACA,MAAMC,cAAc,SAASF,SAAS,CAAC;EACrCG,cAAcA,CAACC,IAAI,EAAE;IACnB,OAAO,CAAC,CAAC;EACX;EAEAC,SAASA,CAACD,IAAI,EAAE;IACd;IACA,IAAI,CAACE,MAAM,GAAG,IAAI,CAACA,MAAM,IAAI,IAAI,CAACC,GAAG,CAACH,IAAI,CAACI,IAAI,CAAC;IAChD,IAAI,IAAI,CAACF,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACD,SAAS,CAACD,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,IAAIA,IAAI,CAACI,IAAI,KAAK,IAAI,CAACC,GAAG,EAAE;MAC1B,IAAI,CAACC,KAAK,GAAG,IAAI,CAACP,cAAc,CAACC,IAAI,CAAC;MACtC,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;EAEAO,SAASA,CAACC,IAAI,EAAE;IACd;IACA,IAAI,IAAI,CAACN,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACK,SAAS,CAACC,IAAI,CAAC;IAC7B;EACF;EAEAC,aAAaA,CAACL,IAAI,EAAEF,MAAM,EAAE;IAC1B;IACA;IACA,IAAI,CAACI,KAAK,CAACF,IAAI,CAAC,GAAGF,MAAM,CAACI,KAAK;EACjC;EAEAI,UAAUA,CAACN,IAAI,EAAE;IACf;IACA,IAAI,IAAI,CAACF,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAACA,MAAM,CAACQ,UAAU,CAACN,IAAI,CAAC,EAAE;QACjC,IAAI,CAACK,aAAa,CAACL,IAAI,EAAE,IAAI,CAACF,MAAM,CAAC;QACrC,IAAI,CAACA,MAAM,GAAGS,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IAEA,OAAOP,IAAI,KAAK,IAAI,CAACC,GAAG;EAC1B;AACF;AAEAO,MAAM,CAACC,OAAO,GAAGf,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..72edbf2cd3199739ea0ae458e29e235455d7434c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js @@ -0,0 +1,30 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class AppHeadingPairsXform extends BaseXform { + render(xmlStream, model) { + xmlStream.openNode('HeadingPairs'); + xmlStream.openNode('vt:vector', { + size: 2, + baseType: 'variant' + }); + xmlStream.openNode('vt:variant'); + xmlStream.leafNode('vt:lpstr', undefined, 'Worksheets'); + xmlStream.closeNode(); + xmlStream.openNode('vt:variant'); + xmlStream.leafNode('vt:i4', undefined, model.length); + xmlStream.closeNode(); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + // no parsing + return node.name === 'HeadingPairs'; + } + parseText() {} + parseClose(name) { + return name !== 'HeadingPairs'; + } +} +module.exports = AppHeadingPairsXform; +//# sourceMappingURL=app-heading-pairs-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..95a322f4f19dbc2b65f061d5983e6f90a4eb2c47 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app-heading-pairs-xform.js","names":["BaseXform","require","AppHeadingPairsXform","render","xmlStream","model","openNode","size","baseType","leafNode","undefined","closeNode","length","parseOpen","node","name","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/core/app-heading-pairs-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass AppHeadingPairsXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openNode('HeadingPairs');\n xmlStream.openNode('vt:vector', {size: 2, baseType: 'variant'});\n\n xmlStream.openNode('vt:variant');\n xmlStream.leafNode('vt:lpstr', undefined, 'Worksheets');\n xmlStream.closeNode();\n\n xmlStream.openNode('vt:variant');\n xmlStream.leafNode('vt:i4', undefined, model.length);\n xmlStream.closeNode();\n\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n // no parsing\n return node.name === 'HeadingPairs';\n }\n\n parseText() {}\n\n parseClose(name) {\n return name !== 'HeadingPairs';\n }\n}\n\nmodule.exports = AppHeadingPairsXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,oBAAoB,SAASF,SAAS,CAAC;EAC3CG,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,cAAc,CAAC;IAClCF,SAAS,CAACE,QAAQ,CAAC,WAAW,EAAE;MAACC,IAAI,EAAE,CAAC;MAAEC,QAAQ,EAAE;IAAS,CAAC,CAAC;IAE/DJ,SAAS,CAACE,QAAQ,CAAC,YAAY,CAAC;IAChCF,SAAS,CAACK,QAAQ,CAAC,UAAU,EAAEC,SAAS,EAAE,YAAY,CAAC;IACvDN,SAAS,CAACO,SAAS,CAAC,CAAC;IAErBP,SAAS,CAACE,QAAQ,CAAC,YAAY,CAAC;IAChCF,SAAS,CAACK,QAAQ,CAAC,OAAO,EAAEC,SAAS,EAAEL,KAAK,CAACO,MAAM,CAAC;IACpDR,SAAS,CAACO,SAAS,CAAC,CAAC;IAErBP,SAAS,CAACO,SAAS,CAAC,CAAC;IACrBP,SAAS,CAACO,SAAS,CAAC,CAAC;EACvB;EAEAE,SAASA,CAACC,IAAI,EAAE;IACd;IACA,OAAOA,IAAI,CAACC,IAAI,KAAK,cAAc;EACrC;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACF,IAAI,EAAE;IACf,OAAOA,IAAI,KAAK,cAAc;EAChC;AACF;AAEAG,MAAM,CAACC,OAAO,GAAGjB,oBAAoB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..830ba987eb31548ba95b2e1aaccb2965a0bc34c9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js @@ -0,0 +1,27 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class AppTitlesOfPartsXform extends BaseXform { + render(xmlStream, model) { + xmlStream.openNode('TitlesOfParts'); + xmlStream.openNode('vt:vector', { + size: model.length, + baseType: 'lpstr' + }); + model.forEach(sheet => { + xmlStream.leafNode('vt:lpstr', undefined, sheet.name); + }); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + // no parsing + return node.name === 'TitlesOfParts'; + } + parseText() {} + parseClose(name) { + return name !== 'TitlesOfParts'; + } +} +module.exports = AppTitlesOfPartsXform; +//# sourceMappingURL=app-titles-of-parts-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..edb4e67c4bb6814980e0a71b9d51d11d7a38399f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app-titles-of-parts-xform.js","names":["BaseXform","require","AppTitlesOfPartsXform","render","xmlStream","model","openNode","size","length","baseType","forEach","sheet","leafNode","undefined","name","closeNode","parseOpen","node","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/core/app-titles-of-parts-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass AppTitlesOfPartsXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openNode('TitlesOfParts');\n xmlStream.openNode('vt:vector', {size: model.length, baseType: 'lpstr'});\n\n model.forEach(sheet => {\n xmlStream.leafNode('vt:lpstr', undefined, sheet.name);\n });\n\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n // no parsing\n return node.name === 'TitlesOfParts';\n }\n\n parseText() {}\n\n parseClose(name) {\n return name !== 'TitlesOfParts';\n }\n}\n\nmodule.exports = AppTitlesOfPartsXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,qBAAqB,SAASF,SAAS,CAAC;EAC5CG,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,eAAe,CAAC;IACnCF,SAAS,CAACE,QAAQ,CAAC,WAAW,EAAE;MAACC,IAAI,EAAEF,KAAK,CAACG,MAAM;MAAEC,QAAQ,EAAE;IAAO,CAAC,CAAC;IAExEJ,KAAK,CAACK,OAAO,CAACC,KAAK,IAAI;MACrBP,SAAS,CAACQ,QAAQ,CAAC,UAAU,EAAEC,SAAS,EAAEF,KAAK,CAACG,IAAI,CAAC;IACvD,CAAC,CAAC;IAEFV,SAAS,CAACW,SAAS,CAAC,CAAC;IACrBX,SAAS,CAACW,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd;IACA,OAAOA,IAAI,CAACH,IAAI,KAAK,eAAe;EACtC;EAEAI,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACL,IAAI,EAAE;IACf,OAAOA,IAAI,KAAK,eAAe;EACjC;AACF;AAEAM,MAAM,CAACC,OAAO,GAAGnB,qBAAqB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..eef9b2d439347859eb50a4461ea16dc5240f88ca --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js @@ -0,0 +1,93 @@ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const StringXform = require('../simple/string-xform'); +const AppHeadingPairsXform = require('./app-heading-pairs-xform'); +const AppTitleOfPartsXform = require('./app-titles-of-parts-xform'); +class AppXform extends BaseXform { + constructor() { + super(); + this.map = { + Company: new StringXform({ + tag: 'Company' + }), + Manager: new StringXform({ + tag: 'Manager' + }), + HeadingPairs: new AppHeadingPairsXform(), + TitleOfParts: new AppTitleOfPartsXform() + }; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('Properties', AppXform.PROPERTY_ATTRIBUTES); + xmlStream.leafNode('Application', undefined, 'Microsoft Excel'); + xmlStream.leafNode('DocSecurity', undefined, '0'); + xmlStream.leafNode('ScaleCrop', undefined, 'false'); + this.map.HeadingPairs.render(xmlStream, model.worksheets); + this.map.TitleOfParts.render(xmlStream, model.worksheets); + this.map.Company.render(xmlStream, model.company || ''); + this.map.Manager.render(xmlStream, model.manager); + xmlStream.leafNode('LinksUpToDate', undefined, 'false'); + xmlStream.leafNode('SharedDoc', undefined, 'false'); + xmlStream.leafNode('HyperlinksChanged', undefined, 'false'); + xmlStream.leafNode('AppVersion', undefined, '16.0300'); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'Properties': + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + + // there's a lot we don't bother to parse + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'Properties': + this.model = { + worksheets: this.map.TitleOfParts.model, + company: this.map.Company.model, + manager: this.map.Manager.model + }; + return false; + default: + return true; + } + } +} +AppXform.DateFormat = function (dt) { + return dt.toISOString().replace(/[.]\d{3,6}/, ''); +}; +AppXform.DateAttrs = { + 'xsi:type': 'dcterms:W3CDTF' +}; +AppXform.PROPERTY_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties', + 'xmlns:vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes' +}; +module.exports = AppXform; +//# sourceMappingURL=app-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..64b4fb481fdc0437bac8655da3733d1601eb35d5 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app-xform.js","names":["XmlStream","require","BaseXform","StringXform","AppHeadingPairsXform","AppTitleOfPartsXform","AppXform","constructor","map","Company","tag","Manager","HeadingPairs","TitleOfParts","render","xmlStream","model","openXml","StdDocAttributes","openNode","PROPERTY_ATTRIBUTES","leafNode","undefined","worksheets","company","manager","closeNode","parseOpen","node","parser","name","parseText","text","parseClose","DateFormat","dt","toISOString","replace","DateAttrs","xmlns","module","exports"],"sources":["../../../../../lib/xlsx/xform/core/app-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst StringXform = require('../simple/string-xform');\n\nconst AppHeadingPairsXform = require('./app-heading-pairs-xform');\nconst AppTitleOfPartsXform = require('./app-titles-of-parts-xform');\n\nclass AppXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n Company: new StringXform({tag: 'Company'}),\n Manager: new StringXform({tag: 'Manager'}),\n HeadingPairs: new AppHeadingPairsXform(),\n TitleOfParts: new AppTitleOfPartsXform(),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('Properties', AppXform.PROPERTY_ATTRIBUTES);\n\n xmlStream.leafNode('Application', undefined, 'Microsoft Excel');\n xmlStream.leafNode('DocSecurity', undefined, '0');\n xmlStream.leafNode('ScaleCrop', undefined, 'false');\n\n this.map.HeadingPairs.render(xmlStream, model.worksheets);\n this.map.TitleOfParts.render(xmlStream, model.worksheets);\n this.map.Company.render(xmlStream, model.company || '');\n this.map.Manager.render(xmlStream, model.manager);\n\n xmlStream.leafNode('LinksUpToDate', undefined, 'false');\n xmlStream.leafNode('SharedDoc', undefined, 'false');\n xmlStream.leafNode('HyperlinksChanged', undefined, 'false');\n xmlStream.leafNode('AppVersion', undefined, '16.0300');\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'Properties':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n // there's a lot we don't bother to parse\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'Properties':\n this.model = {\n worksheets: this.map.TitleOfParts.model,\n company: this.map.Company.model,\n manager: this.map.Manager.model,\n };\n return false;\n default:\n return true;\n }\n }\n}\n\nAppXform.DateFormat = function(dt) {\n return dt.toISOString().replace(/[.]\\d{3,6}/, '');\n};\n\nAppXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\n\nAppXform.PROPERTY_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties',\n 'xmlns:vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n};\n\nmodule.exports = AppXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..54ef9c4e232b20bc34d0264f263c88fb77389a71 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js @@ -0,0 +1,112 @@ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); + +// used for rendering the [Content_Types].xml file +// not used for parsing +class ContentTypesXform extends BaseXform { + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('Types', ContentTypesXform.PROPERTY_ATTRIBUTES); + const mediaHash = {}; + (model.media || []).forEach(medium => { + if (medium.type === 'image') { + const imageType = medium.extension; + if (!mediaHash[imageType]) { + mediaHash[imageType] = true; + xmlStream.leafNode('Default', { + Extension: imageType, + ContentType: `image/${imageType}` + }); + } + } + }); + xmlStream.leafNode('Default', { + Extension: 'rels', + ContentType: 'application/vnd.openxmlformats-package.relationships+xml' + }); + xmlStream.leafNode('Default', { + Extension: 'xml', + ContentType: 'application/xml' + }); + xmlStream.leafNode('Override', { + PartName: '/xl/workbook.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml' + }); + model.worksheets.forEach(worksheet => { + const name = `/xl/worksheets/sheet${worksheet.id}.xml`; + xmlStream.leafNode('Override', { + PartName: name, + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml' + }); + }); + xmlStream.leafNode('Override', { + PartName: '/xl/theme/theme1.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml' + }); + xmlStream.leafNode('Override', { + PartName: '/xl/styles.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml' + }); + const hasSharedStrings = model.sharedStrings && model.sharedStrings.count; + if (hasSharedStrings) { + xmlStream.leafNode('Override', { + PartName: '/xl/sharedStrings.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml' + }); + } + if (model.tables) { + model.tables.forEach(table => { + xmlStream.leafNode('Override', { + PartName: `/xl/tables/${table.target}`, + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml' + }); + }); + } + if (model.drawings) { + model.drawings.forEach(drawing => { + xmlStream.leafNode('Override', { + PartName: `/xl/drawings/${drawing.name}.xml`, + ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml' + }); + }); + } + if (model.commentRefs) { + xmlStream.leafNode('Default', { + Extension: 'vml', + ContentType: 'application/vnd.openxmlformats-officedocument.vmlDrawing' + }); + model.commentRefs.forEach(_ref => { + let { + commentName + } = _ref; + xmlStream.leafNode('Override', { + PartName: `/xl/${commentName}.xml`, + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml' + }); + }); + } + xmlStream.leafNode('Override', { + PartName: '/docProps/core.xml', + ContentType: 'application/vnd.openxmlformats-package.core-properties+xml' + }); + xmlStream.leafNode('Override', { + PartName: '/docProps/app.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.extended-properties+xml' + }); + xmlStream.closeNode(); + } + parseOpen() { + return false; + } + parseText() {} + parseClose() { + return false; + } +} +ContentTypesXform.PROPERTY_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/package/2006/content-types' +}; +module.exports = ContentTypesXform; +//# sourceMappingURL=content-types-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6ff2ad0cd2d182f973f0dbd3dbea1b345e161b0c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"content-types-xform.js","names":["XmlStream","require","BaseXform","ContentTypesXform","render","xmlStream","model","openXml","StdDocAttributes","openNode","PROPERTY_ATTRIBUTES","mediaHash","media","forEach","medium","type","imageType","extension","leafNode","Extension","ContentType","PartName","worksheets","worksheet","name","id","hasSharedStrings","sharedStrings","count","tables","table","target","drawings","drawing","commentRefs","_ref","commentName","closeNode","parseOpen","parseText","parseClose","xmlns","module","exports"],"sources":["../../../../../lib/xlsx/xform/core/content-types-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\n\n// used for rendering the [Content_Types].xml file\n// not used for parsing\nclass ContentTypesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('Types', ContentTypesXform.PROPERTY_ATTRIBUTES);\n\n const mediaHash = {};\n (model.media || []).forEach(medium => {\n if (medium.type === 'image') {\n const imageType = medium.extension;\n if (!mediaHash[imageType]) {\n mediaHash[imageType] = true;\n xmlStream.leafNode('Default', {Extension: imageType, ContentType: `image/${imageType}`});\n }\n }\n });\n\n xmlStream.leafNode('Default', {\n Extension: 'rels',\n ContentType: 'application/vnd.openxmlformats-package.relationships+xml',\n });\n xmlStream.leafNode('Default', {Extension: 'xml', ContentType: 'application/xml'});\n\n xmlStream.leafNode('Override', {\n PartName: '/xl/workbook.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml',\n });\n\n model.worksheets.forEach(worksheet => {\n const name = `/xl/worksheets/sheet${worksheet.id}.xml`;\n xmlStream.leafNode('Override', {\n PartName: name,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml',\n });\n });\n\n xmlStream.leafNode('Override', {\n PartName: '/xl/theme/theme1.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml',\n });\n xmlStream.leafNode('Override', {\n PartName: '/xl/styles.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml',\n });\n\n const hasSharedStrings = model.sharedStrings && model.sharedStrings.count;\n if (hasSharedStrings) {\n xmlStream.leafNode('Override', {\n PartName: '/xl/sharedStrings.xml',\n ContentType:\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml',\n });\n }\n\n if (model.tables) {\n model.tables.forEach(table => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/tables/${table.target}`,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml',\n });\n });\n }\n\n if (model.drawings) {\n model.drawings.forEach(drawing => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/drawings/${drawing.name}.xml`,\n ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml',\n });\n });\n }\n\n if (model.commentRefs) {\n xmlStream.leafNode('Default', {\n Extension: 'vml',\n ContentType: 'application/vnd.openxmlformats-officedocument.vmlDrawing',\n });\n\n model.commentRefs.forEach(({commentName}) => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/${commentName}.xml`,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml',\n });\n });\n }\n\n xmlStream.leafNode('Override', {\n PartName: '/docProps/core.xml',\n ContentType: 'application/vnd.openxmlformats-package.core-properties+xml',\n });\n xmlStream.leafNode('Override', {\n PartName: '/docProps/app.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.extended-properties+xml',\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen() {\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nContentTypesXform.PROPERTY_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/package/2006/content-types',\n};\n\nmodule.exports = ContentTypesXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..873165e1bbdb55808c4ddd0bb7927cd45f3587e8 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js @@ -0,0 +1,158 @@ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const DateXform = require('../simple/date-xform'); +const StringXform = require('../simple/string-xform'); +const IntegerXform = require('../simple/integer-xform'); +class CoreXform extends BaseXform { + constructor() { + super(); + this.map = { + 'dc:creator': new StringXform({ + tag: 'dc:creator' + }), + 'dc:title': new StringXform({ + tag: 'dc:title' + }), + 'dc:subject': new StringXform({ + tag: 'dc:subject' + }), + 'dc:description': new StringXform({ + tag: 'dc:description' + }), + 'dc:identifier': new StringXform({ + tag: 'dc:identifier' + }), + 'dc:language': new StringXform({ + tag: 'dc:language' + }), + 'cp:keywords': new StringXform({ + tag: 'cp:keywords' + }), + 'cp:category': new StringXform({ + tag: 'cp:category' + }), + 'cp:lastModifiedBy': new StringXform({ + tag: 'cp:lastModifiedBy' + }), + 'cp:lastPrinted': new DateXform({ + tag: 'cp:lastPrinted', + format: CoreXform.DateFormat + }), + 'cp:revision': new IntegerXform({ + tag: 'cp:revision' + }), + 'cp:version': new StringXform({ + tag: 'cp:version' + }), + 'cp:contentStatus': new StringXform({ + tag: 'cp:contentStatus' + }), + 'cp:contentType': new StringXform({ + tag: 'cp:contentType' + }), + 'dcterms:created': new DateXform({ + tag: 'dcterms:created', + attrs: CoreXform.DateAttrs, + format: CoreXform.DateFormat + }), + 'dcterms:modified': new DateXform({ + tag: 'dcterms:modified', + attrs: CoreXform.DateAttrs, + format: CoreXform.DateFormat + }) + }; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('cp:coreProperties', CoreXform.CORE_PROPERTY_ATTRIBUTES); + this.map['dc:creator'].render(xmlStream, model.creator); + this.map['dc:title'].render(xmlStream, model.title); + this.map['dc:subject'].render(xmlStream, model.subject); + this.map['dc:description'].render(xmlStream, model.description); + this.map['dc:identifier'].render(xmlStream, model.identifier); + this.map['dc:language'].render(xmlStream, model.language); + this.map['cp:keywords'].render(xmlStream, model.keywords); + this.map['cp:category'].render(xmlStream, model.category); + this.map['cp:lastModifiedBy'].render(xmlStream, model.lastModifiedBy); + this.map['cp:lastPrinted'].render(xmlStream, model.lastPrinted); + this.map['cp:revision'].render(xmlStream, model.revision); + this.map['cp:version'].render(xmlStream, model.version); + this.map['cp:contentStatus'].render(xmlStream, model.contentStatus); + this.map['cp:contentType'].render(xmlStream, model.contentType); + this.map['dcterms:created'].render(xmlStream, model.created); + this.map['dcterms:modified'].render(xmlStream, model.modified); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'cp:coreProperties': + case 'coreProperties': + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'cp:coreProperties': + case 'coreProperties': + this.model = { + creator: this.map['dc:creator'].model, + title: this.map['dc:title'].model, + subject: this.map['dc:subject'].model, + description: this.map['dc:description'].model, + identifier: this.map['dc:identifier'].model, + language: this.map['dc:language'].model, + keywords: this.map['cp:keywords'].model, + category: this.map['cp:category'].model, + lastModifiedBy: this.map['cp:lastModifiedBy'].model, + lastPrinted: this.map['cp:lastPrinted'].model, + revision: this.map['cp:revision'].model, + contentStatus: this.map['cp:contentStatus'].model, + contentType: this.map['cp:contentType'].model, + created: this.map['dcterms:created'].model, + modified: this.map['dcterms:modified'].model + }; + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +CoreXform.DateFormat = function (dt) { + return dt.toISOString().replace(/[.]\d{3}/, ''); +}; +CoreXform.DateAttrs = { + 'xsi:type': 'dcterms:W3CDTF' +}; +CoreXform.CORE_PROPERTY_ATTRIBUTES = { + 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties', + 'xmlns:dc': 'http://purl.org/dc/elements/1.1/', + 'xmlns:dcterms': 'http://purl.org/dc/terms/', + 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/', + 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance' +}; +module.exports = CoreXform; +//# sourceMappingURL=core-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a0aca90f63658bb4ecfae12cd1593b1c026113ac --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core-xform.js","names":["XmlStream","require","BaseXform","DateXform","StringXform","IntegerXform","CoreXform","constructor","map","tag","format","DateFormat","attrs","DateAttrs","render","xmlStream","model","openXml","StdDocAttributes","openNode","CORE_PROPERTY_ATTRIBUTES","creator","title","subject","description","identifier","language","keywords","category","lastModifiedBy","lastPrinted","revision","version","contentStatus","contentType","created","modified","closeNode","parseOpen","node","parser","name","Error","JSON","stringify","parseText","text","parseClose","undefined","dt","toISOString","replace","module","exports"],"sources":["../../../../../lib/xlsx/xform/core/core-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst DateXform = require('../simple/date-xform');\nconst StringXform = require('../simple/string-xform');\nconst IntegerXform = require('../simple/integer-xform');\n\nclass CoreXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'dc:creator': new StringXform({tag: 'dc:creator'}),\n 'dc:title': new StringXform({tag: 'dc:title'}),\n 'dc:subject': new StringXform({tag: 'dc:subject'}),\n 'dc:description': new StringXform({tag: 'dc:description'}),\n 'dc:identifier': new StringXform({tag: 'dc:identifier'}),\n 'dc:language': new StringXform({tag: 'dc:language'}),\n 'cp:keywords': new StringXform({tag: 'cp:keywords'}),\n 'cp:category': new StringXform({tag: 'cp:category'}),\n 'cp:lastModifiedBy': new StringXform({tag: 'cp:lastModifiedBy'}),\n 'cp:lastPrinted': new DateXform({tag: 'cp:lastPrinted', format: CoreXform.DateFormat}),\n 'cp:revision': new IntegerXform({tag: 'cp:revision'}),\n 'cp:version': new StringXform({tag: 'cp:version'}),\n 'cp:contentStatus': new StringXform({tag: 'cp:contentStatus'}),\n 'cp:contentType': new StringXform({tag: 'cp:contentType'}),\n 'dcterms:created': new DateXform({\n tag: 'dcterms:created',\n attrs: CoreXform.DateAttrs,\n format: CoreXform.DateFormat,\n }),\n 'dcterms:modified': new DateXform({\n tag: 'dcterms:modified',\n attrs: CoreXform.DateAttrs,\n format: CoreXform.DateFormat,\n }),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('cp:coreProperties', CoreXform.CORE_PROPERTY_ATTRIBUTES);\n\n this.map['dc:creator'].render(xmlStream, model.creator);\n this.map['dc:title'].render(xmlStream, model.title);\n this.map['dc:subject'].render(xmlStream, model.subject);\n this.map['dc:description'].render(xmlStream, model.description);\n this.map['dc:identifier'].render(xmlStream, model.identifier);\n this.map['dc:language'].render(xmlStream, model.language);\n this.map['cp:keywords'].render(xmlStream, model.keywords);\n this.map['cp:category'].render(xmlStream, model.category);\n this.map['cp:lastModifiedBy'].render(xmlStream, model.lastModifiedBy);\n this.map['cp:lastPrinted'].render(xmlStream, model.lastPrinted);\n this.map['cp:revision'].render(xmlStream, model.revision);\n this.map['cp:version'].render(xmlStream, model.version);\n this.map['cp:contentStatus'].render(xmlStream, model.contentStatus);\n this.map['cp:contentType'].render(xmlStream, model.contentType);\n this.map['dcterms:created'].render(xmlStream, model.created);\n this.map['dcterms:modified'].render(xmlStream, model.modified);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'cp:coreProperties':\n case 'coreProperties':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'cp:coreProperties':\n case 'coreProperties':\n this.model = {\n creator: this.map['dc:creator'].model,\n title: this.map['dc:title'].model,\n subject: this.map['dc:subject'].model,\n description: this.map['dc:description'].model,\n identifier: this.map['dc:identifier'].model,\n language: this.map['dc:language'].model,\n keywords: this.map['cp:keywords'].model,\n category: this.map['cp:category'].model,\n lastModifiedBy: this.map['cp:lastModifiedBy'].model,\n lastPrinted: this.map['cp:lastPrinted'].model,\n revision: this.map['cp:revision'].model,\n contentStatus: this.map['cp:contentStatus'].model,\n contentType: this.map['cp:contentType'].model,\n created: this.map['dcterms:created'].model,\n modified: this.map['dcterms:modified'].model,\n };\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nCoreXform.DateFormat = function(dt) {\n return dt.toISOString().replace(/[.]\\d{3}/, '');\n};\nCoreXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\n\nCoreXform.CORE_PROPERTY_ATTRIBUTES = {\n 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',\n 'xmlns:dcterms': 'http://purl.org/dc/terms/',\n 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/',\n 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n};\n\nmodule.exports = CoreXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..2e52cbb791b48173fd1d14729aec18e66af0674c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js @@ -0,0 +1,23 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class RelationshipXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('Relationship', model); + } + parseOpen(node) { + switch (node.name) { + case 'Relationship': + this.model = node.attributes; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = RelationshipXform; +//# sourceMappingURL=relationship-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6d01776122aa8099656e31834205f24cfa2c13ca --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"relationship-xform.js","names":["BaseXform","require","RelationshipXform","render","xmlStream","model","leafNode","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/core/relationship-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass RelationshipXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('Relationship', model);\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'Relationship':\n this.model = node.attributes;\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = RelationshipXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,iBAAiB,SAASF,SAAS,CAAC;EACxCG,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,cAAc,EAAED,KAAK,CAAC;EAC3C;EAEAE,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,cAAc;QACjB,IAAI,CAACJ,KAAK,GAAGG,IAAI,CAACE,UAAU;QAC5B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGZ,iBAAiB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..17d13990c68d021136da944f43a5a8db2128e270 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js @@ -0,0 +1,65 @@ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const RelationshipXform = require('./relationship-xform'); +class RelationshipsXform extends BaseXform { + constructor() { + super(); + this.map = { + Relationship: new RelationshipXform() + }; + } + render(xmlStream, model) { + model = model || this._values; + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('Relationships', RelationshipsXform.RELATIONSHIPS_ATTRIBUTES); + model.forEach(relationship => { + this.map.Relationship.render(xmlStream, relationship); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'Relationships': + this.model = []; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case 'Relationships': + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +RelationshipsXform.RELATIONSHIPS_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships' +}; +module.exports = RelationshipsXform; +//# sourceMappingURL=relationships-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b08491c447558d5803b532f35ad31db4e15bb757 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"relationships-xform.js","names":["XmlStream","require","BaseXform","RelationshipXform","RelationshipsXform","constructor","map","Relationship","render","xmlStream","model","_values","openXml","StdDocAttributes","openNode","RELATIONSHIPS_ATTRIBUTES","forEach","relationship","closeNode","parseOpen","node","parser","name","Error","JSON","stringify","parseText","text","parseClose","push","undefined","xmlns","module","exports"],"sources":["../../../../../lib/xlsx/xform/core/relationships-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\n\nconst RelationshipXform = require('./relationship-xform');\n\nclass RelationshipsXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n Relationship: new RelationshipXform(),\n };\n }\n\n render(xmlStream, model) {\n model = model || this._values;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('Relationships', RelationshipsXform.RELATIONSHIPS_ATTRIBUTES);\n\n model.forEach(relationship => {\n this.map.Relationship.render(xmlStream, relationship);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'Relationships':\n this.model = [];\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'Relationships':\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nRelationshipsXform.RELATIONSHIPS_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships',\n};\n\nmodule.exports = RelationshipsXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,2BAA2B,CAAC;AACtD,MAAMC,SAAS,GAAGD,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAME,iBAAiB,GAAGF,OAAO,CAAC,sBAAsB,CAAC;AAEzD,MAAMG,kBAAkB,SAASF,SAAS,CAAC;EACzCG,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACTC,YAAY,EAAE,IAAIJ,iBAAiB,CAAC;IACtC,CAAC;EACH;EAEAK,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBA,KAAK,GAAGA,KAAK,IAAI,IAAI,CAACC,OAAO;IAC7BF,SAAS,CAACG,OAAO,CAACZ,SAAS,CAACa,gBAAgB,CAAC;IAC7CJ,SAAS,CAACK,QAAQ,CAAC,eAAe,EAAEV,kBAAkB,CAACW,wBAAwB,CAAC;IAEhFL,KAAK,CAACM,OAAO,CAACC,YAAY,IAAI;MAC5B,IAAI,CAACX,GAAG,CAACC,YAAY,CAACC,MAAM,CAACC,SAAS,EAAEQ,YAAY,CAAC;IACvD,CAAC,CAAC;IAEFR,SAAS,CAACS,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQA,IAAI,CAACE,IAAI;MACf,KAAK,eAAe;QAClB,IAAI,CAACZ,KAAK,GAAG,EAAE;QACf,OAAO,IAAI;MACb;QACE,IAAI,CAACW,MAAM,GAAG,IAAI,CAACf,GAAG,CAACc,IAAI,CAACE,IAAI,CAAC;QACjC,IAAI,IAAI,CAACD,MAAM,EAAE;UACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;UAC3B,OAAO,IAAI;QACb;QACA,MAAM,IAAIG,KAAK,CAAE,qCAAoCC,IAAI,CAACC,SAAS,CAACL,IAAI,CAAE,EAAC,CAAC;IAChF;EACF;EAEAM,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACN,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACK,SAAS,CAACC,IAAI,CAAC;IAC7B;EACF;EAEAC,UAAUA,CAACN,IAAI,EAAE;IACf,IAAI,IAAI,CAACD,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAACA,MAAM,CAACO,UAAU,CAACN,IAAI,CAAC,EAAE;QACjC,IAAI,CAACZ,KAAK,CAACmB,IAAI,CAAC,IAAI,CAACR,MAAM,CAACX,KAAK,CAAC;QAClC,IAAI,CAACW,MAAM,GAAGS,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQR,IAAI;MACV,KAAK,eAAe;QAClB,OAAO,KAAK;MACd;QACE,MAAM,IAAIC,KAAK,CAAE,sCAAqCD,IAAK,EAAC,CAAC;IACjE;EACF;AACF;AAEAlB,kBAAkB,CAACW,wBAAwB,GAAG;EAC5CgB,KAAK,EAAE;AACT,CAAC;AAEDC,MAAM,CAACC,OAAO,GAAG7B,kBAAkB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..71a48a3360d1ca8d551e8321c9e10171a910870a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js @@ -0,0 +1,47 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class BaseCellAnchorXform extends BaseXform { + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + range: { + editAs: node.attributes.editAs || 'oneCell' + } + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + reconcilePicture(model, options) { + if (model && model.rId) { + const rel = options.rels[model.rId]; + const match = rel.Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/); + if (match) { + const name = match[1]; + const mediaId = options.mediaIndex[name]; + return options.media[mediaId]; + } + } + return undefined; + } +} +module.exports = BaseCellAnchorXform; +//# sourceMappingURL=base-cell-anchor-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..154d064079d198cbda6e6fb0ed41feb88d146766 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base-cell-anchor-xform.js","names":["BaseXform","require","BaseCellAnchorXform","parseOpen","node","parser","name","tag","reset","model","range","editAs","attributes","map","parseText","text","reconcilePicture","options","rId","rel","rels","match","Target","mediaId","mediaIndex","media","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/base-cell-anchor-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass BaseCellAnchorXform extends BaseXform {\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n range: {\n editAs: node.attributes.editAs || 'oneCell',\n },\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n reconcilePicture(model, options) {\n if (model && model.rId) {\n const rel = options.rels[model.rId];\n const match = rel.Target.match(/.*\\/media\\/(.+[.][a-zA-Z]{3,4})/);\n if (match) {\n const name = match[1];\n const mediaId = options.mediaIndex[name];\n return options.media[mediaId];\n }\n }\n return undefined;\n }\n}\n\nmodule.exports = BaseCellAnchorXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,mBAAmB,SAASF,SAAS,CAAC;EAC1CG,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQA,IAAI,CAACE,IAAI;MACf,KAAK,IAAI,CAACC,GAAG;QACX,IAAI,CAACC,KAAK,CAAC,CAAC;QACZ,IAAI,CAACC,KAAK,GAAG;UACXC,KAAK,EAAE;YACLC,MAAM,EAAEP,IAAI,CAACQ,UAAU,CAACD,MAAM,IAAI;UACpC;QACF,CAAC;QACD;MACF;QACE,IAAI,CAACN,MAAM,GAAG,IAAI,CAACQ,GAAG,CAACT,IAAI,CAACE,IAAI,CAAC;QACjC,IAAI,IAAI,CAACD,MAAM,EAAE;UACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEAU,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACV,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACS,SAAS,CAACC,IAAI,CAAC;IAC7B;EACF;EAEAC,gBAAgBA,CAACP,KAAK,EAAEQ,OAAO,EAAE;IAC/B,IAAIR,KAAK,IAAIA,KAAK,CAACS,GAAG,EAAE;MACtB,MAAMC,GAAG,GAAGF,OAAO,CAACG,IAAI,CAACX,KAAK,CAACS,GAAG,CAAC;MACnC,MAAMG,KAAK,GAAGF,GAAG,CAACG,MAAM,CAACD,KAAK,CAAC,iCAAiC,CAAC;MACjE,IAAIA,KAAK,EAAE;QACT,MAAMf,IAAI,GAAGe,KAAK,CAAC,CAAC,CAAC;QACrB,MAAME,OAAO,GAAGN,OAAO,CAACO,UAAU,CAAClB,IAAI,CAAC;QACxC,OAAOW,OAAO,CAACQ,KAAK,CAACF,OAAO,CAAC;MAC/B;IACF;IACA,OAAOG,SAAS;EAClB;AACF;AAEAC,MAAM,CAACC,OAAO,GAAG1B,mBAAmB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..f12e579dea171056d3d8232e795005cb0566282c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js @@ -0,0 +1,61 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const BlipXform = require('./blip-xform'); +class BlipFillXform extends BaseXform { + constructor() { + super(); + this.map = { + 'a:blip': new BlipXform() + }; + } + get tag() { + return 'xdr:blipFill'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['a:blip'].render(xmlStream, model); + + // TODO: options for this + parsing + xmlStream.openNode('a:stretch'); + xmlStream.leafNode('a:fillRect'); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = this.map['a:blip'].model; + return false; + default: + return true; + } + } +} +module.exports = BlipFillXform; +//# sourceMappingURL=blip-fill-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..207250fbaf9c22a529dff7d3f40b8957bdfcb7b7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"blip-fill-xform.js","names":["BaseXform","require","BlipXform","BlipFillXform","constructor","map","tag","render","xmlStream","model","openNode","leafNode","closeNode","parseOpen","node","parser","name","reset","parseText","parseClose","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/blip-fill-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst BlipXform = require('./blip-xform');\n\nclass BlipFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'a:blip': new BlipXform(),\n };\n }\n\n get tag() {\n return 'xdr:blipFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['a:blip'].render(xmlStream, model);\n\n // TODO: options for this + parsing\n xmlStream.openNode('a:stretch');\n xmlStream.leafNode('a:fillRect');\n xmlStream.closeNode();\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['a:blip'].model;\n return false;\n\n default:\n return true;\n }\n }\n}\n\nmodule.exports = BlipFillXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAMC,SAAS,GAAGD,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAME,aAAa,SAASH,SAAS,CAAC;EACpCI,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACT,QAAQ,EAAE,IAAIH,SAAS,CAAC;IAC1B,CAAC;EACH;EAEA,IAAII,GAAGA,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,CAAC;IAE5B,IAAI,CAACD,GAAG,CAAC,QAAQ,CAAC,CAACE,MAAM,CAACC,SAAS,EAAEC,KAAK,CAAC;;IAE3C;IACAD,SAAS,CAACE,QAAQ,CAAC,WAAW,CAAC;IAC/BF,SAAS,CAACG,QAAQ,CAAC,YAAY,CAAC;IAChCH,SAAS,CAACI,SAAS,CAAC,CAAC;IAErBJ,SAAS,CAACI,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,QAAQA,IAAI,CAACE,IAAI;MACf,KAAK,IAAI,CAACV,GAAG;QACX,IAAI,CAACW,KAAK,CAAC,CAAC;QACZ;MAEF;QACE,IAAI,CAACF,MAAM,GAAG,IAAI,CAACV,GAAG,CAACS,IAAI,CAACE,IAAI,CAAC;QACjC,IAAI,IAAI,CAACD,MAAM,EAAE;UACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEAI,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACH,IAAI,EAAE;IACf,IAAI,IAAI,CAACD,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAACA,MAAM,CAACI,UAAU,CAACH,IAAI,CAAC,EAAE;QACjC,IAAI,CAACD,MAAM,GAAGK,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQJ,IAAI;MACV,KAAK,IAAI,CAACV,GAAG;QACX,IAAI,CAACG,KAAK,GAAG,IAAI,CAACJ,GAAG,CAAC,QAAQ,CAAC,CAACI,KAAK;QACrC,OAAO,KAAK;MAEd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEAY,MAAM,CAACC,OAAO,GAAGnB,aAAa"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..3a6c0a708400f677e702866525064e2d3a050120 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js @@ -0,0 +1,40 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class BlipXform extends BaseXform { + get tag() { + return 'a:blip'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'r:embed': model.rId, + cstate: 'print' + }); + // TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi + } + + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:embed'] + }; + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + // unprocessed internal nodes + return true; + } + } +} +module.exports = BlipXform; +//# sourceMappingURL=blip-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..59ebd8b88a4418d22d9ba51b19be050532e142e3 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"blip-xform.js","names":["BaseXform","require","BlipXform","tag","render","xmlStream","model","leafNode","rId","cstate","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/blip-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass BlipXform extends BaseXform {\n get tag() {\n return 'a:blip';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'r:embed': model.rId,\n cstate: 'print',\n });\n // TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:embed'],\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = BlipXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,SAAS,SAASF,SAAS,CAAC;EAChC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;MAC3B,SAAS,EAAE,qEAAqE;MAChF,SAAS,EAAEG,KAAK,CAACE,GAAG;MACpBC,MAAM,EAAE;IACV,CAAC,CAAC;IACF;EACF;;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACT,GAAG;QACX,IAAI,CAACG,KAAK,GAAG;UACXE,GAAG,EAAEG,IAAI,CAACE,UAAU,CAAC,SAAS;QAChC,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACH,IAAI,EAAE;IACf,QAAQA,IAAI;MACV,KAAK,IAAI,CAACT,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEAa,MAAM,CAACC,OAAO,GAAGf,SAAS"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..380afaca005f7f3a162940685b46a56cf83763c9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js @@ -0,0 +1,35 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class CNvPicPrXform extends BaseXform { + get tag() { + return 'xdr:cNvPicPr'; + } + render(xmlStream) { + xmlStream.openNode(this.tag); + xmlStream.leafNode('a:picLocks', { + noChangeAspect: '1' + }); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + // unprocessed internal nodes + return true; + } + } +} +module.exports = CNvPicPrXform; +//# sourceMappingURL=c-nv-pic-pr-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..5bacf180a7d52c010e1736e355ee51c61669b8dc --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"c-nv-pic-pr-xform.js","names":["BaseXform","require","CNvPicPrXform","tag","render","xmlStream","openNode","leafNode","noChangeAspect","closeNode","parseOpen","node","name","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass CNvPicPrXform extends BaseXform {\n get tag() {\n return 'xdr:cNvPicPr';\n }\n\n render(xmlStream) {\n xmlStream.openNode(this.tag);\n xmlStream.leafNode('a:picLocks', {\n noChangeAspect: '1',\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = CNvPicPrXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,aAAa,SAASF,SAAS,CAAC;EACpC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEAC,MAAMA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACC,QAAQ,CAAC,IAAI,CAACH,GAAG,CAAC;IAC5BE,SAAS,CAACE,QAAQ,CAAC,YAAY,EAAE;MAC/BC,cAAc,EAAE;IAClB,CAAC,CAAC;IACFH,SAAS,CAACI,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACT,GAAG;QACX,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEAU,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACF,IAAI,EAAE;IACf,QAAQA,IAAI;MACV,KAAK,IAAI,CAACT,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEAY,MAAM,CAACC,OAAO,GAAGd,aAAa"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..da68dbf1daabe6d21e20d9b39d31f148f0fb59cc --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js @@ -0,0 +1,62 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const HlickClickXform = require('./hlink-click-xform'); +const ExtLstXform = require('./ext-lst-xform'); +class CNvPrXform extends BaseXform { + constructor() { + super(); + this.map = { + 'a:hlinkClick': new HlickClickXform(), + 'a:extLst': new ExtLstXform() + }; + } + get tag() { + return 'xdr:cNvPr'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + id: model.index, + name: `Picture ${model.index}` + }); + this.map['a:hlinkClick'].render(xmlStream, model); + this.map['a:extLst'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = this.map['a:hlinkClick'].model; + return false; + default: + return true; + } + } +} +module.exports = CNvPrXform; +//# sourceMappingURL=c-nv-pr-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..faf9ff5f4b5ff9b90e1f7f86ad2ed89bd3664fb1 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"c-nv-pr-xform.js","names":["BaseXform","require","HlickClickXform","ExtLstXform","CNvPrXform","constructor","map","tag","render","xmlStream","model","openNode","id","index","name","closeNode","parseOpen","node","parser","reset","parseText","parseClose","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/c-nv-pr-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst HlickClickXform = require('./hlink-click-xform');\nconst ExtLstXform = require('./ext-lst-xform');\n\nclass CNvPrXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'a:hlinkClick': new HlickClickXform(),\n 'a:extLst': new ExtLstXform(),\n };\n }\n\n get tag() {\n return 'xdr:cNvPr';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n id: model.index,\n name: `Picture ${model.index}`,\n });\n this.map['a:hlinkClick'].render(xmlStream, model);\n this.map['a:extLst'].render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['a:hlinkClick'].model;\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = CNvPrXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAMC,eAAe,GAAGD,OAAO,CAAC,qBAAqB,CAAC;AACtD,MAAME,WAAW,GAAGF,OAAO,CAAC,iBAAiB,CAAC;AAE9C,MAAMG,UAAU,SAASJ,SAAS,CAAC;EACjCK,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACT,cAAc,EAAE,IAAIJ,eAAe,CAAC,CAAC;MACrC,UAAU,EAAE,IAAIC,WAAW,CAAC;IAC9B,CAAC;EACH;EAEA,IAAII,GAAGA,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;MAC3BK,EAAE,EAAEF,KAAK,CAACG,KAAK;MACfC,IAAI,EAAG,WAAUJ,KAAK,CAACG,KAAM;IAC/B,CAAC,CAAC;IACF,IAAI,CAACP,GAAG,CAAC,cAAc,CAAC,CAACE,MAAM,CAACC,SAAS,EAAEC,KAAK,CAAC;IACjD,IAAI,CAACJ,GAAG,CAAC,UAAU,CAAC,CAACE,MAAM,CAACC,SAAS,EAAEC,KAAK,CAAC;IAC7CD,SAAS,CAACM,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,QAAQA,IAAI,CAACH,IAAI;MACf,KAAK,IAAI,CAACP,GAAG;QACX,IAAI,CAACY,KAAK,CAAC,CAAC;QACZ;MACF;QACE,IAAI,CAACD,MAAM,GAAG,IAAI,CAACZ,GAAG,CAACW,IAAI,CAACH,IAAI,CAAC;QACjC,IAAI,IAAI,CAACI,MAAM,EAAE;UACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEAG,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACP,IAAI,EAAE;IACf,IAAI,IAAI,CAACI,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAACA,MAAM,CAACG,UAAU,CAACP,IAAI,CAAC,EAAE;QACjC,IAAI,CAACI,MAAM,GAAGI,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQR,IAAI;MACV,KAAK,IAAI,CAACP,GAAG;QACX,IAAI,CAACG,KAAK,GAAG,IAAI,CAACJ,GAAG,CAAC,cAAc,CAAC,CAACI,KAAK;QAC3C,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEAa,MAAM,CAACC,OAAO,GAAGpB,UAAU"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..7c2c6f752d9c4fc5e1ee37338fb3d8bac10fcf71 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js @@ -0,0 +1,82 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const IntegerXform = require('../simple/integer-xform'); +class CellPositionXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.map = { + 'xdr:col': new IntegerXform({ + tag: 'xdr:col', + zero: true + }), + 'xdr:colOff': new IntegerXform({ + tag: 'xdr:colOff', + zero: true + }), + 'xdr:row': new IntegerXform({ + tag: 'xdr:row', + zero: true + }), + 'xdr:rowOff': new IntegerXform({ + tag: 'xdr:rowOff', + zero: true + }) + }; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['xdr:col'].render(xmlStream, model.nativeCol); + this.map['xdr:colOff'].render(xmlStream, model.nativeColOff); + this.map['xdr:row'].render(xmlStream, model.nativeRow); + this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = { + nativeCol: this.map['xdr:col'].model, + nativeColOff: this.map['xdr:colOff'].model, + nativeRow: this.map['xdr:row'].model, + nativeRowOff: this.map['xdr:rowOff'].model + }; + return false; + default: + // not quite sure how we get here! + return true; + } + } +} +module.exports = CellPositionXform; +//# sourceMappingURL=cell-position-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..735ecd04617f5c252bd4ef7dab670ef072f1a621 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cell-position-xform.js","names":["BaseXform","require","IntegerXform","CellPositionXform","constructor","options","tag","map","zero","render","xmlStream","model","openNode","nativeCol","nativeColOff","nativeRow","nativeRowOff","closeNode","parseOpen","node","parser","name","reset","parseText","text","parseClose","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/cell-position-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst IntegerXform = require('../simple/integer-xform');\n\nclass CellPositionXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.map = {\n 'xdr:col': new IntegerXform({tag: 'xdr:col', zero: true}),\n 'xdr:colOff': new IntegerXform({tag: 'xdr:colOff', zero: true}),\n 'xdr:row': new IntegerXform({tag: 'xdr:row', zero: true}),\n 'xdr:rowOff': new IntegerXform({tag: 'xdr:rowOff', zero: true}),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['xdr:col'].render(xmlStream, model.nativeCol);\n this.map['xdr:colOff'].render(xmlStream, model.nativeColOff);\n\n this.map['xdr:row'].render(xmlStream, model.nativeRow);\n this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = {\n nativeCol: this.map['xdr:col'].model,\n nativeColOff: this.map['xdr:colOff'].model,\n nativeRow: this.map['xdr:row'].model,\n nativeRowOff: this.map['xdr:rowOff'].model,\n };\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n}\n\nmodule.exports = CellPositionXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..a95249ee561338611df82ff6ca6365841e87fc99 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js @@ -0,0 +1,98 @@ +"use strict"; + +const colCache = require('../../../utils/col-cache'); +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const TwoCellAnchorXform = require('./two-cell-anchor-xform'); +const OneCellAnchorXform = require('./one-cell-anchor-xform'); +function getAnchorType(model) { + const range = typeof model.range === 'string' ? colCache.decode(model.range) : model.range; + return range.br ? 'xdr:twoCellAnchor' : 'xdr:oneCellAnchor'; +} +class DrawingXform extends BaseXform { + constructor() { + super(); + this.map = { + 'xdr:twoCellAnchor': new TwoCellAnchorXform(), + 'xdr:oneCellAnchor': new OneCellAnchorXform() + }; + } + prepare(model) { + model.anchors.forEach((item, index) => { + item.anchorType = getAnchorType(item); + const anchor = this.map[item.anchorType]; + anchor.prepare(item, { + index + }); + }); + } + get tag() { + return 'xdr:wsDr'; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode(this.tag, DrawingXform.DRAWING_ATTRIBUTES); + model.anchors.forEach(item => { + const anchor = this.map[item.anchorType]; + anchor.render(xmlStream, item); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + anchors: [] + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.anchors.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.anchors.forEach(anchor => { + if (anchor.br) { + this.map['xdr:twoCellAnchor'].reconcile(anchor, options); + } else { + this.map['xdr:oneCellAnchor'].reconcile(anchor, options); + } + }); + } +} +DrawingXform.DRAWING_ATTRIBUTES = { + 'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', + 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main' +}; +module.exports = DrawingXform; +//# sourceMappingURL=drawing-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..7b35c135bb0639f419ed4a21311a2e817c6e89ef --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"drawing-xform.js","names":["colCache","require","XmlStream","BaseXform","TwoCellAnchorXform","OneCellAnchorXform","getAnchorType","model","range","decode","br","DrawingXform","constructor","map","prepare","anchors","forEach","item","index","anchorType","anchor","tag","render","xmlStream","openXml","StdDocAttributes","openNode","DRAWING_ATTRIBUTES","closeNode","parseOpen","node","parser","name","reset","parseText","text","parseClose","push","undefined","reconcile","options","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/drawing-xform.js"],"sourcesContent":["const colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst TwoCellAnchorXform = require('./two-cell-anchor-xform');\nconst OneCellAnchorXform = require('./one-cell-anchor-xform');\n\nfunction getAnchorType(model) {\n const range = typeof model.range === 'string' ? colCache.decode(model.range) : model.range;\n\n return range.br ? 'xdr:twoCellAnchor' : 'xdr:oneCellAnchor';\n}\n\nclass DrawingXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:twoCellAnchor': new TwoCellAnchorXform(),\n 'xdr:oneCellAnchor': new OneCellAnchorXform(),\n };\n }\n\n prepare(model) {\n model.anchors.forEach((item, index) => {\n item.anchorType = getAnchorType(item);\n const anchor = this.map[item.anchorType];\n anchor.prepare(item, {index});\n });\n }\n\n get tag() {\n return 'xdr:wsDr';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, DrawingXform.DRAWING_ATTRIBUTES);\n\n model.anchors.forEach(item => {\n const anchor = this.map[item.anchorType];\n anchor.render(xmlStream, item);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n anchors: [],\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.anchors.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.anchors.forEach(anchor => {\n if (anchor.br) {\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\n } else {\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\n }\n });\n }\n}\n\nDrawingXform.DRAWING_ATTRIBUTES = {\n 'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing',\n 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\n};\n\nmodule.exports = DrawingXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..8c4709489c8b2e156e572b34a66b0fe0efe0247a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js @@ -0,0 +1,40 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class ExtLstXform extends BaseXform { + get tag() { + return 'a:extLst'; + } + render(xmlStream) { + xmlStream.openNode(this.tag); + xmlStream.openNode('a:ext', { + uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}' + }); + xmlStream.leafNode('a16:creationId', { + 'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main', + id: '{00000000-0008-0000-0000-000002000000}' + }); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + // unprocessed internal nodes + return true; + } + } +} +module.exports = ExtLstXform; +//# sourceMappingURL=ext-lst-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4446b450c3f58cd0f9bad61dfeee4a714c58eb12 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ext-lst-xform.js","names":["BaseXform","require","ExtLstXform","tag","render","xmlStream","openNode","uri","leafNode","id","closeNode","parseOpen","node","name","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/ext-lst-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass ExtLstXform extends BaseXform {\n get tag() {\n return 'a:extLst';\n }\n\n render(xmlStream) {\n xmlStream.openNode(this.tag);\n xmlStream.openNode('a:ext', {\n uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}',\n });\n xmlStream.leafNode('a16:creationId', {\n 'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main',\n id: '{00000000-0008-0000-0000-000002000000}',\n });\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = ExtLstXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,WAAW,SAASF,SAAS,CAAC;EAClC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,UAAU;EACnB;EAEAC,MAAMA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACC,QAAQ,CAAC,IAAI,CAACH,GAAG,CAAC;IAC5BE,SAAS,CAACC,QAAQ,CAAC,OAAO,EAAE;MAC1BC,GAAG,EAAE;IACP,CAAC,CAAC;IACFF,SAAS,CAACG,QAAQ,CAAC,gBAAgB,EAAE;MACnC,WAAW,EAAE,uDAAuD;MACpEC,EAAE,EAAE;IACN,CAAC,CAAC;IACFJ,SAAS,CAACK,SAAS,CAAC,CAAC;IACrBL,SAAS,CAACK,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACV,GAAG;QACX,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEAW,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACF,IAAI,EAAE;IACf,QAAQA,IAAI;MACV,KAAK,IAAI,CAACV,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEAa,MAAM,CAACC,OAAO,GAAGf,WAAW"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..0806a230883c50b15c693fb047e45a5a65571448 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js @@ -0,0 +1,38 @@ +"use strict"; + +const BaseXform = require('../base-xform'); + +/** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */ +const EMU_PER_PIXEL_AT_96_DPI = 9525; +class ExtXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.map = {}; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + const width = Math.floor(model.width * EMU_PER_PIXEL_AT_96_DPI); + const height = Math.floor(model.height * EMU_PER_PIXEL_AT_96_DPI); + xmlStream.addAttribute('cx', width); + xmlStream.addAttribute('cy', height); + xmlStream.closeNode(); + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + width: parseInt(node.attributes.cx || '0', 10) / EMU_PER_PIXEL_AT_96_DPI, + height: parseInt(node.attributes.cy || '0', 10) / EMU_PER_PIXEL_AT_96_DPI + }; + return true; + } + return false; + } + parseText( /* text */) {} + parseClose( /* name */ + ) { + return false; + } +} +module.exports = ExtXform; +//# sourceMappingURL=ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e0926b2d8d7d571cbbd139b5dcac6c1fdecb30eb --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ext-xform.js","names":["BaseXform","require","EMU_PER_PIXEL_AT_96_DPI","ExtXform","constructor","options","tag","map","render","xmlStream","model","openNode","width","Math","floor","height","addAttribute","closeNode","parseOpen","node","name","parseInt","attributes","cx","cy","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/ext-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\n/** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */\nconst EMU_PER_PIXEL_AT_96_DPI = 9525;\n\nclass ExtXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.map = {};\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n const width = Math.floor(model.width * EMU_PER_PIXEL_AT_96_DPI);\n const height = Math.floor(model.height * EMU_PER_PIXEL_AT_96_DPI);\n\n xmlStream.addAttribute('cx', width);\n xmlStream.addAttribute('cy', height);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n width: parseInt(node.attributes.cx || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\n height: parseInt(node.attributes.cy || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\n };\n return true;\n }\n return false;\n }\n\n parseText(/* text */) {}\n\n parseClose(/* name */) {\n return false;\n }\n}\n\nmodule.exports = ExtXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA,MAAMC,uBAAuB,GAAG,IAAI;AAEpC,MAAMC,QAAQ,SAASH,SAAS,CAAC;EAC/BI,WAAWA,CAACC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAGD,OAAO,CAACC,GAAG;IACtB,IAAI,CAACC,GAAG,GAAG,CAAC,CAAC;EACf;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACL,GAAG,CAAC;IAE5B,MAAMM,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACJ,KAAK,CAACE,KAAK,GAAGV,uBAAuB,CAAC;IAC/D,MAAMa,MAAM,GAAGF,IAAI,CAACC,KAAK,CAACJ,KAAK,CAACK,MAAM,GAAGb,uBAAuB,CAAC;IAEjEO,SAAS,CAACO,YAAY,CAAC,IAAI,EAAEJ,KAAK,CAAC;IACnCH,SAAS,CAACO,YAAY,CAAC,IAAI,EAAED,MAAM,CAAC;IAEpCN,SAAS,CAACQ,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACd,GAAG,EAAE;MAC1B,IAAI,CAACI,KAAK,GAAG;QACXE,KAAK,EAAES,QAAQ,CAACF,IAAI,CAACG,UAAU,CAACC,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,GAAGrB,uBAAuB;QACxEa,MAAM,EAAEM,QAAQ,CAACF,IAAI,CAACG,UAAU,CAACE,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,GAAGtB;MACpD,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAuB,SAASA,CAAA,CAAC,YAAY,CAAC;EAEvBC,UAAUA,CAAA,CAAC;EAAA,EAAY;IACrB,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGzB,QAAQ"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..7b0d506f2f2360a27bcbbe24bcee7cce178a0248 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js @@ -0,0 +1,38 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class HLinkClickXform extends BaseXform { + get tag() { + return 'a:hlinkClick'; + } + render(xmlStream, model) { + if (!(model.hyperlinks && model.hyperlinks.rId)) { + return; + } + xmlStream.leafNode(this.tag, { + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'r:id': model.hyperlinks.rId, + tooltip: model.hyperlinks.tooltip + }); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + hyperlinks: { + rId: node.attributes['r:id'], + tooltip: node.attributes.tooltip + } + }; + return true; + default: + return true; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = HLinkClickXform; +//# sourceMappingURL=hlink-click-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..833559c148cb588676791927056e49fadc27a343 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"hlink-click-xform.js","names":["BaseXform","require","HLinkClickXform","tag","render","xmlStream","model","hyperlinks","rId","leafNode","tooltip","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/hlink-click-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass HLinkClickXform extends BaseXform {\n get tag() {\n return 'a:hlinkClick';\n }\n\n render(xmlStream, model) {\n if (!(model.hyperlinks && model.hyperlinks.rId)) {\n return;\n }\n xmlStream.leafNode(this.tag, {\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'r:id': model.hyperlinks.rId,\n tooltip: model.hyperlinks.tooltip,\n });\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n hyperlinks: {\n rId: node.attributes['r:id'],\n tooltip: node.attributes.tooltip,\n },\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = HLinkClickXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,eAAe,SAASF,SAAS,CAAC;EACtC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAI,EAAEA,KAAK,CAACC,UAAU,IAAID,KAAK,CAACC,UAAU,CAACC,GAAG,CAAC,EAAE;MAC/C;IACF;IACAH,SAAS,CAACI,QAAQ,CAAC,IAAI,CAACN,GAAG,EAAE;MAC3B,SAAS,EAAE,qEAAqE;MAChF,MAAM,EAAEG,KAAK,CAACC,UAAU,CAACC,GAAG;MAC5BE,OAAO,EAAEJ,KAAK,CAACC,UAAU,CAACG;IAC5B,CAAC,CAAC;EACJ;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACV,GAAG;QACX,IAAI,CAACG,KAAK,GAAG;UACXC,UAAU,EAAE;YACVC,GAAG,EAAEI,IAAI,CAACE,UAAU,CAAC,MAAM,CAAC;YAC5BJ,OAAO,EAAEE,IAAI,CAACE,UAAU,CAACJ;UAC3B;QACF,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEAK,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGhB,eAAe"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..0a30be7596e54bc4fbc461d99ae08cabd167da6b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js @@ -0,0 +1,59 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const CNvPrXform = require('./c-nv-pr-xform'); +const CNvPicPrXform = require('./c-nv-pic-pr-xform'); +class NvPicPrXform extends BaseXform { + constructor() { + super(); + this.map = { + 'xdr:cNvPr': new CNvPrXform(), + 'xdr:cNvPicPr': new CNvPicPrXform() + }; + } + get tag() { + return 'xdr:nvPicPr'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['xdr:cNvPr'].render(xmlStream, model); + this.map['xdr:cNvPicPr'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = this.map['xdr:cNvPr'].model; + return false; + default: + return true; + } + } +} +module.exports = NvPicPrXform; +//# sourceMappingURL=nv-pic-pr-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..06ec1a96655013dc7a4b8a3c1a5da764de0a5547 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"nv-pic-pr-xform.js","names":["BaseXform","require","CNvPrXform","CNvPicPrXform","NvPicPrXform","constructor","map","tag","render","xmlStream","model","openNode","closeNode","parseOpen","node","parser","name","reset","parseText","parseClose","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/nv-pic-pr-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst CNvPrXform = require('./c-nv-pr-xform');\nconst CNvPicPrXform = require('./c-nv-pic-pr-xform');\n\nclass NvPicPrXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:cNvPr': new CNvPrXform(),\n 'xdr:cNvPicPr': new CNvPicPrXform(),\n };\n }\n\n get tag() {\n return 'xdr:nvPicPr';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n this.map['xdr:cNvPr'].render(xmlStream, model);\n this.map['xdr:cNvPicPr'].render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['xdr:cNvPr'].model;\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = NvPicPrXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAMC,UAAU,GAAGD,OAAO,CAAC,iBAAiB,CAAC;AAC7C,MAAME,aAAa,GAAGF,OAAO,CAAC,qBAAqB,CAAC;AAEpD,MAAMG,YAAY,SAASJ,SAAS,CAAC;EACnCK,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACT,WAAW,EAAE,IAAIJ,UAAU,CAAC,CAAC;MAC7B,cAAc,EAAE,IAAIC,aAAa,CAAC;IACpC,CAAC;EACH;EAEA,IAAII,GAAGA,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,CAAC;IAC5B,IAAI,CAACD,GAAG,CAAC,WAAW,CAAC,CAACE,MAAM,CAACC,SAAS,EAAEC,KAAK,CAAC;IAC9C,IAAI,CAACJ,GAAG,CAAC,cAAc,CAAC,CAACE,MAAM,CAACC,SAAS,EAAEC,KAAK,CAAC;IACjDD,SAAS,CAACG,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,QAAQA,IAAI,CAACE,IAAI;MACf,KAAK,IAAI,CAACT,GAAG;QACX,IAAI,CAACU,KAAK,CAAC,CAAC;QACZ;MACF;QACE,IAAI,CAACF,MAAM,GAAG,IAAI,CAACT,GAAG,CAACQ,IAAI,CAACE,IAAI,CAAC;QACjC,IAAI,IAAI,CAACD,MAAM,EAAE;UACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEAI,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACH,IAAI,EAAE;IACf,IAAI,IAAI,CAACD,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAACA,MAAM,CAACI,UAAU,CAACH,IAAI,CAAC,EAAE;QACjC,IAAI,CAACD,MAAM,GAAGK,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQJ,IAAI;MACV,KAAK,IAAI,CAACT,GAAG;QACX,IAAI,CAACG,KAAK,GAAG,IAAI,CAACJ,GAAG,CAAC,WAAW,CAAC,CAACI,KAAK;QACxC,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEAW,MAAM,CAACC,OAAO,GAAGlB,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..4d95dc7347d10b115674fe3330feab6841b7be18 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js @@ -0,0 +1,63 @@ +"use strict"; + +const BaseCellAnchorXform = require('./base-cell-anchor-xform'); +const StaticXform = require('../static-xform'); +const CellPositionXform = require('./cell-position-xform'); +const ExtXform = require('./ext-xform'); +const PicXform = require('./pic-xform'); +class OneCellAnchorXform extends BaseCellAnchorXform { + constructor() { + super(); + this.map = { + 'xdr:from': new CellPositionXform({ + tag: 'xdr:from' + }), + 'xdr:ext': new ExtXform({ + tag: 'xdr:ext' + }), + 'xdr:pic': new PicXform(), + 'xdr:clientData': new StaticXform({ + tag: 'xdr:clientData' + }) + }; + } + get tag() { + return 'xdr:oneCellAnchor'; + } + prepare(model, options) { + this.map['xdr:pic'].prepare(model.picture, options); + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + editAs: model.range.editAs || 'oneCell' + }); + this.map['xdr:from'].render(xmlStream, model.range.tl); + this.map['xdr:ext'].render(xmlStream, model.range.ext); + this.map['xdr:pic'].render(xmlStream, model.picture); + this.map['xdr:clientData'].render(xmlStream, {}); + xmlStream.closeNode(); + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.range.tl = this.map['xdr:from'].model; + this.model.range.ext = this.map['xdr:ext'].model; + this.model.picture = this.map['xdr:pic'].model; + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.medium = this.reconcilePicture(model.picture, options); + } +} +module.exports = OneCellAnchorXform; +//# sourceMappingURL=one-cell-anchor-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6f3d43d039547a6d91b7a1f6122113570e3d7418 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"one-cell-anchor-xform.js","names":["BaseCellAnchorXform","require","StaticXform","CellPositionXform","ExtXform","PicXform","OneCellAnchorXform","constructor","map","tag","prepare","model","options","picture","render","xmlStream","openNode","editAs","range","tl","ext","closeNode","parseClose","name","parser","undefined","reconcile","medium","reconcilePicture","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/one-cell-anchor-xform.js"],"sourcesContent":["const BaseCellAnchorXform = require('./base-cell-anchor-xform');\nconst StaticXform = require('../static-xform');\n\nconst CellPositionXform = require('./cell-position-xform');\nconst ExtXform = require('./ext-xform');\nconst PicXform = require('./pic-xform');\n\nclass OneCellAnchorXform extends BaseCellAnchorXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\n 'xdr:ext': new ExtXform({tag: 'xdr:ext'}),\n 'xdr:pic': new PicXform(),\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\n };\n }\n\n get tag() {\n return 'xdr:oneCellAnchor';\n }\n\n prepare(model, options) {\n this.map['xdr:pic'].prepare(model.picture, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\n\n this.map['xdr:from'].render(xmlStream, model.range.tl);\n this.map['xdr:ext'].render(xmlStream, model.range.ext);\n this.map['xdr:pic'].render(xmlStream, model.picture);\n this.map['xdr:clientData'].render(xmlStream, {});\n\n xmlStream.closeNode();\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.range.tl = this.map['xdr:from'].model;\n this.model.range.ext = this.map['xdr:ext'].model;\n this.model.picture = this.map['xdr:pic'].model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.medium = this.reconcilePicture(model.picture, options);\n }\n}\n\nmodule.exports = OneCellAnchorXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..1060995fe1e22bdf9d154cf36852265c7ac211c4 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js @@ -0,0 +1,67 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const StaticXform = require('../static-xform'); +const BlipFillXform = require('./blip-fill-xform'); +const NvPicPrXform = require('./nv-pic-pr-xform'); +const spPrJSON = require('./sp-pr'); +class PicXform extends BaseXform { + constructor() { + super(); + this.map = { + 'xdr:nvPicPr': new NvPicPrXform(), + 'xdr:blipFill': new BlipFillXform(), + 'xdr:spPr': new StaticXform(spPrJSON) + }; + } + get tag() { + return 'xdr:pic'; + } + prepare(model, options) { + model.index = options.index + 1; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['xdr:nvPicPr'].render(xmlStream, model); + this.map['xdr:blipFill'].render(xmlStream, model); + this.map['xdr:spPr'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.mergeModel(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + // not quite sure how we get here! + return true; + } + } +} +module.exports = PicXform; +//# sourceMappingURL=pic-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0baa25fd17fb2c74b6d0b06ed6bb62afa603ac8a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pic-xform.js","names":["BaseXform","require","StaticXform","BlipFillXform","NvPicPrXform","spPrJSON","PicXform","constructor","map","tag","prepare","model","options","index","render","xmlStream","openNode","closeNode","parseOpen","node","parser","name","reset","parseText","parseClose","mergeModel","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/pic-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\n\nconst BlipFillXform = require('./blip-fill-xform');\nconst NvPicPrXform = require('./nv-pic-pr-xform');\n\nconst spPrJSON = require('./sp-pr');\n\nclass PicXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:nvPicPr': new NvPicPrXform(),\n 'xdr:blipFill': new BlipFillXform(),\n 'xdr:spPr': new StaticXform(spPrJSON),\n };\n }\n\n get tag() {\n return 'xdr:pic';\n }\n\n prepare(model, options) {\n model.index = options.index + 1;\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['xdr:nvPicPr'].render(xmlStream, model);\n this.map['xdr:blipFill'].render(xmlStream, model);\n this.map['xdr:spPr'].render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.mergeModel(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n}\n\nmodule.exports = PicXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAMC,WAAW,GAAGD,OAAO,CAAC,iBAAiB,CAAC;AAE9C,MAAME,aAAa,GAAGF,OAAO,CAAC,mBAAmB,CAAC;AAClD,MAAMG,YAAY,GAAGH,OAAO,CAAC,mBAAmB,CAAC;AAEjD,MAAMI,QAAQ,GAAGJ,OAAO,CAAC,SAAS,CAAC;AAEnC,MAAMK,QAAQ,SAASN,SAAS,CAAC;EAC/BO,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACT,aAAa,EAAE,IAAIJ,YAAY,CAAC,CAAC;MACjC,cAAc,EAAE,IAAID,aAAa,CAAC,CAAC;MACnC,UAAU,EAAE,IAAID,WAAW,CAACG,QAAQ;IACtC,CAAC;EACH;EAEA,IAAII,GAAGA,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEAC,OAAOA,CAACC,KAAK,EAAEC,OAAO,EAAE;IACtBD,KAAK,CAACE,KAAK,GAAGD,OAAO,CAACC,KAAK,GAAG,CAAC;EACjC;EAEAC,MAAMA,CAACC,SAAS,EAAEJ,KAAK,EAAE;IACvBI,SAAS,CAACC,QAAQ,CAAC,IAAI,CAACP,GAAG,CAAC;IAE5B,IAAI,CAACD,GAAG,CAAC,aAAa,CAAC,CAACM,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAAC;IAChD,IAAI,CAACH,GAAG,CAAC,cAAc,CAAC,CAACM,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAAC;IACjD,IAAI,CAACH,GAAG,CAAC,UAAU,CAAC,CAACM,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAAC;IAE7CI,SAAS,CAACE,SAAS,CAAC,CAAC;EACvB;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQA,IAAI,CAACE,IAAI;MACf,KAAK,IAAI,CAACZ,GAAG;QACX,IAAI,CAACa,KAAK,CAAC,CAAC;QACZ;MACF;QACE,IAAI,CAACF,MAAM,GAAG,IAAI,CAACZ,GAAG,CAACW,IAAI,CAACE,IAAI,CAAC;QACjC,IAAI,IAAI,CAACD,MAAM,EAAE;UACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEAI,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACH,IAAI,EAAE;IACf,IAAI,IAAI,CAACD,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAACA,MAAM,CAACI,UAAU,CAACH,IAAI,CAAC,EAAE;QACjC,IAAI,CAACI,UAAU,CAAC,IAAI,CAACL,MAAM,CAACT,KAAK,CAAC;QAClC,IAAI,CAACS,MAAM,GAAGM,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQL,IAAI;MACV,KAAK,IAAI,CAACZ,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEAkB,MAAM,CAACC,OAAO,GAAGtB,QAAQ"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js new file mode 100644 index 0000000000000000000000000000000000000000..09c4add7ba738a8c1cff359cad90b1c56355360c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js @@ -0,0 +1,30 @@ +"use strict"; + +module.exports = { + tag: 'xdr:spPr', + c: [{ + tag: 'a:xfrm', + c: [{ + tag: 'a:off', + $: { + x: '0', + y: '0' + } + }, { + tag: 'a:ext', + $: { + cx: '0', + cy: '0' + } + }] + }, { + tag: 'a:prstGeom', + $: { + prst: 'rect' + }, + c: [{ + tag: 'a:avLst' + }] + }] +}; +//# sourceMappingURL=sp-pr.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3e86fe892db65c9beeaa60082f468b6fd4f25b90 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sp-pr.js","names":["module","exports","tag","c","$","x","y","cx","cy","prst"],"sources":["../../../../../lib/xlsx/xform/drawing/sp-pr.js"],"sourcesContent":["module.exports = {\n tag: 'xdr:spPr',\n c: [\n {\n tag: 'a:xfrm',\n c: [\n {tag: 'a:off', $: {x: '0', y: '0'}},\n {tag: 'a:ext', $: {cx: '0', cy: '0'}},\n ],\n },\n {\n tag: 'a:prstGeom',\n $: {prst: 'rect'},\n c: [{tag: 'a:avLst'}],\n },\n ],\n};\n"],"mappings":";;AAAAA,MAAM,CAACC,OAAO,GAAG;EACfC,GAAG,EAAE,UAAU;EACfC,CAAC,EAAE,CACD;IACED,GAAG,EAAE,QAAQ;IACbC,CAAC,EAAE,CACD;MAACD,GAAG,EAAE,OAAO;MAAEE,CAAC,EAAE;QAACC,CAAC,EAAE,GAAG;QAAEC,CAAC,EAAE;MAAG;IAAC,CAAC,EACnC;MAACJ,GAAG,EAAE,OAAO;MAAEE,CAAC,EAAE;QAACG,EAAE,EAAE,GAAG;QAAEC,EAAE,EAAE;MAAG;IAAC,CAAC;EAEzC,CAAC,EACD;IACEN,GAAG,EAAE,YAAY;IACjBE,CAAC,EAAE;MAACK,IAAI,EAAE;IAAM,CAAC;IACjBN,CAAC,EAAE,CAAC;MAACD,GAAG,EAAE;IAAS,CAAC;EACtB,CAAC;AAEL,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..b8bfe9658c6763ccafb5eab00481d0843ee84f29 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js @@ -0,0 +1,62 @@ +"use strict"; + +const BaseCellAnchorXform = require('./base-cell-anchor-xform'); +const StaticXform = require('../static-xform'); +const CellPositionXform = require('./cell-position-xform'); +const PicXform = require('./pic-xform'); +class TwoCellAnchorXform extends BaseCellAnchorXform { + constructor() { + super(); + this.map = { + 'xdr:from': new CellPositionXform({ + tag: 'xdr:from' + }), + 'xdr:to': new CellPositionXform({ + tag: 'xdr:to' + }), + 'xdr:pic': new PicXform(), + 'xdr:clientData': new StaticXform({ + tag: 'xdr:clientData' + }) + }; + } + get tag() { + return 'xdr:twoCellAnchor'; + } + prepare(model, options) { + this.map['xdr:pic'].prepare(model.picture, options); + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + editAs: model.range.editAs || 'oneCell' + }); + this.map['xdr:from'].render(xmlStream, model.range.tl); + this.map['xdr:to'].render(xmlStream, model.range.br); + this.map['xdr:pic'].render(xmlStream, model.picture); + this.map['xdr:clientData'].render(xmlStream, {}); + xmlStream.closeNode(); + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.range.tl = this.map['xdr:from'].model; + this.model.range.br = this.map['xdr:to'].model; + this.model.picture = this.map['xdr:pic'].model; + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.medium = this.reconcilePicture(model.picture, options); + } +} +module.exports = TwoCellAnchorXform; +//# sourceMappingURL=two-cell-anchor-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0e9f476d246442da5055639638c2eafd472fa006 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"two-cell-anchor-xform.js","names":["BaseCellAnchorXform","require","StaticXform","CellPositionXform","PicXform","TwoCellAnchorXform","constructor","map","tag","prepare","model","options","picture","render","xmlStream","openNode","editAs","range","tl","br","closeNode","parseClose","name","parser","undefined","reconcile","medium","reconcilePicture","module","exports"],"sources":["../../../../../lib/xlsx/xform/drawing/two-cell-anchor-xform.js"],"sourcesContent":["const BaseCellAnchorXform = require('./base-cell-anchor-xform');\nconst StaticXform = require('../static-xform');\n\nconst CellPositionXform = require('./cell-position-xform');\nconst PicXform = require('./pic-xform');\n\nclass TwoCellAnchorXform extends BaseCellAnchorXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\n 'xdr:to': new CellPositionXform({tag: 'xdr:to'}),\n 'xdr:pic': new PicXform(),\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\n };\n }\n\n get tag() {\n return 'xdr:twoCellAnchor';\n }\n\n prepare(model, options) {\n this.map['xdr:pic'].prepare(model.picture, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\n\n this.map['xdr:from'].render(xmlStream, model.range.tl);\n this.map['xdr:to'].render(xmlStream, model.range.br);\n this.map['xdr:pic'].render(xmlStream, model.picture);\n this.map['xdr:clientData'].render(xmlStream, {});\n\n xmlStream.closeNode();\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.range.tl = this.map['xdr:from'].model;\n this.model.range.br = this.map['xdr:to'].model;\n this.model.picture = this.map['xdr:pic'].model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.medium = this.reconcilePicture(model.picture, options);\n }\n}\n\nmodule.exports = TwoCellAnchorXform;\n"],"mappings":";;AAAA,MAAMA,mBAAmB,GAAGC,OAAO,CAAC,0BAA0B,CAAC;AAC/D,MAAMC,WAAW,GAAGD,OAAO,CAAC,iBAAiB,CAAC;AAE9C,MAAME,iBAAiB,GAAGF,OAAO,CAAC,uBAAuB,CAAC;AAC1D,MAAMG,QAAQ,GAAGH,OAAO,CAAC,aAAa,CAAC;AAEvC,MAAMI,kBAAkB,SAASL,mBAAmB,CAAC;EACnDM,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACT,UAAU,EAAE,IAAIJ,iBAAiB,CAAC;QAACK,GAAG,EAAE;MAAU,CAAC,CAAC;MACpD,QAAQ,EAAE,IAAIL,iBAAiB,CAAC;QAACK,GAAG,EAAE;MAAQ,CAAC,CAAC;MAChD,SAAS,EAAE,IAAIJ,QAAQ,CAAC,CAAC;MACzB,gBAAgB,EAAE,IAAIF,WAAW,CAAC;QAACM,GAAG,EAAE;MAAgB,CAAC;IAC3D,CAAC;EACH;EAEA,IAAIA,GAAGA,CAAA,EAAG;IACR,OAAO,mBAAmB;EAC5B;EAEAC,OAAOA,CAACC,KAAK,EAAEC,OAAO,EAAE;IACtB,IAAI,CAACJ,GAAG,CAAC,SAAS,CAAC,CAACE,OAAO,CAACC,KAAK,CAACE,OAAO,EAAED,OAAO,CAAC;EACrD;EAEAE,MAAMA,CAACC,SAAS,EAAEJ,KAAK,EAAE;IACvBI,SAAS,CAACC,QAAQ,CAAC,IAAI,CAACP,GAAG,EAAE;MAACQ,MAAM,EAAEN,KAAK,CAACO,KAAK,CAACD,MAAM,IAAI;IAAS,CAAC,CAAC;IAEvE,IAAI,CAACT,GAAG,CAAC,UAAU,CAAC,CAACM,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAACO,KAAK,CAACC,EAAE,CAAC;IACtD,IAAI,CAACX,GAAG,CAAC,QAAQ,CAAC,CAACM,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAACO,KAAK,CAACE,EAAE,CAAC;IACpD,IAAI,CAACZ,GAAG,CAAC,SAAS,CAAC,CAACM,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAACE,OAAO,CAAC;IACpD,IAAI,CAACL,GAAG,CAAC,gBAAgB,CAAC,CAACM,MAAM,CAACC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEhDA,SAAS,CAACM,SAAS,CAAC,CAAC;EACvB;EAEAC,UAAUA,CAACC,IAAI,EAAE;IACf,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAACA,MAAM,CAACF,UAAU,CAACC,IAAI,CAAC,EAAE;QACjC,IAAI,CAACC,MAAM,GAAGC,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQF,IAAI;MACV,KAAK,IAAI,CAACd,GAAG;QACX,IAAI,CAACE,KAAK,CAACO,KAAK,CAACC,EAAE,GAAG,IAAI,CAACX,GAAG,CAAC,UAAU,CAAC,CAACG,KAAK;QAChD,IAAI,CAACA,KAAK,CAACO,KAAK,CAACE,EAAE,GAAG,IAAI,CAACZ,GAAG,CAAC,QAAQ,CAAC,CAACG,KAAK;QAC9C,IAAI,CAACA,KAAK,CAACE,OAAO,GAAG,IAAI,CAACL,GAAG,CAAC,SAAS,CAAC,CAACG,KAAK;QAC9C,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;EAEAe,SAASA,CAACf,KAAK,EAAEC,OAAO,EAAE;IACxBD,KAAK,CAACgB,MAAM,GAAG,IAAI,CAACC,gBAAgB,CAACjB,KAAK,CAACE,OAAO,EAAED,OAAO,CAAC;EAC9D;AACF;AAEAiB,MAAM,CAACC,OAAO,GAAGxB,kBAAkB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..f9a70c639b8ed16a5958937af31463f343a00255 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js @@ -0,0 +1,91 @@ +"use strict"; + +const BaseXform = require('./base-xform'); +class ListXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.always = !!options.always; + this.count = options.count; + this.empty = options.empty; + this.$count = options.$count || 'count'; + this.$ = options.$; + this.childXform = options.childXform; + this.maxItems = options.maxItems; + } + prepare(model, options) { + const { + childXform + } = this; + if (model) { + model.forEach((childModel, index) => { + options.index = index; + childXform.prepare(childModel, options); + }); + } + } + render(xmlStream, model) { + if (this.always || model && model.length) { + xmlStream.openNode(this.tag, this.$); + if (this.count) { + xmlStream.addAttribute(this.$count, model && model.length || 0); + } + const { + childXform + } = this; + (model || []).forEach((childModel, index) => { + childXform.render(xmlStream, childModel, index); + }); + xmlStream.closeNode(); + } else if (this.empty) { + xmlStream.leafNode(this.tag); + } + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.model = []; + return true; + default: + if (this.childXform.parseOpen(node)) { + this.parser = this.childXform; + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.push(this.parser.model); + this.parser = undefined; + if (this.maxItems && this.model.length > this.maxItems) { + throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`); + } + } + return true; + } + return false; + } + reconcile(model, options) { + if (model) { + const { + childXform + } = this; + model.forEach(childModel => { + childXform.reconcile(childModel, options); + }); + } + } +} +module.exports = ListXform; +//# sourceMappingURL=list-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..7dc704da62356908b9aa7b165e62d4d1476630d4 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list-xform.js","names":["BaseXform","require","ListXform","constructor","options","tag","always","count","empty","$count","$","childXform","maxItems","prepare","model","forEach","childModel","index","render","xmlStream","length","openNode","addAttribute","closeNode","leafNode","parseOpen","node","parser","name","parseText","text","parseClose","push","undefined","Error","reconcile","module","exports"],"sources":["../../../../lib/xlsx/xform/list-xform.js"],"sourcesContent":["const BaseXform = require('./base-xform');\n\nclass ListXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.always = !!options.always;\n this.count = options.count;\n this.empty = options.empty;\n this.$count = options.$count || 'count';\n this.$ = options.$;\n this.childXform = options.childXform;\n this.maxItems = options.maxItems;\n }\n\n prepare(model, options) {\n const {childXform} = this;\n if (model) {\n model.forEach((childModel, index) => {\n options.index = index;\n childXform.prepare(childModel, options);\n });\n }\n }\n\n render(xmlStream, model) {\n if (this.always || (model && model.length)) {\n xmlStream.openNode(this.tag, this.$);\n if (this.count) {\n xmlStream.addAttribute(this.$count, (model && model.length) || 0);\n }\n\n const {childXform} = this;\n (model || []).forEach((childModel, index) => {\n childXform.render(xmlStream, childModel, index);\n });\n\n xmlStream.closeNode();\n } else if (this.empty) {\n xmlStream.leafNode(this.tag);\n }\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.model = [];\n return true;\n default:\n if (this.childXform.parseOpen(node)) {\n this.parser = this.childXform;\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n\n if (this.maxItems && this.model.length > this.maxItems) {\n throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);\n }\n }\n return true;\n }\n\n return false;\n }\n\n reconcile(model, options) {\n if (model) {\n const {childXform} = this;\n model.forEach(childModel => {\n childXform.reconcile(childModel, options);\n });\n }\n }\n}\n\nmodule.exports = ListXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..4a2729b7a5ad3d7c2f9cc8fbb6fce342d4d27df8 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js @@ -0,0 +1,40 @@ +"use strict"; + +const colCache = require('../../../utils/col-cache'); +const BaseXform = require('../base-xform'); +class AutoFilterXform extends BaseXform { + get tag() { + return 'autoFilter'; + } + render(xmlStream, model) { + if (model) { + if (typeof model === 'string') { + // assume range + xmlStream.leafNode('autoFilter', { + ref: model + }); + } else { + const getAddress = function (addr) { + if (typeof addr === 'string') { + return addr; + } + return colCache.getAddress(addr.row, addr.column).address; + }; + const firstAddress = getAddress(model.from); + const secondAddress = getAddress(model.to); + if (firstAddress && secondAddress) { + xmlStream.leafNode('autoFilter', { + ref: `${firstAddress}:${secondAddress}` + }); + } + } + } + } + parseOpen(node) { + if (node.name === 'autoFilter') { + this.model = node.attributes.ref; + } + } +} +module.exports = AutoFilterXform; +//# sourceMappingURL=auto-filter-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..40f2c6a007dc1fefd853abf323952c4eaf31c16d --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auto-filter-xform.js","names":["colCache","require","BaseXform","AutoFilterXform","tag","render","xmlStream","model","leafNode","ref","getAddress","addr","row","column","address","firstAddress","from","secondAddress","to","parseOpen","node","name","attributes","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/auto-filter-xform.js"],"sourcesContent":["const colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\n\nclass AutoFilterXform extends BaseXform {\n get tag() {\n return 'autoFilter';\n }\n\n render(xmlStream, model) {\n if (model) {\n if (typeof model === 'string') {\n // assume range\n xmlStream.leafNode('autoFilter', {ref: model});\n } else {\n const getAddress = function(addr) {\n if (typeof addr === 'string') {\n return addr;\n }\n return colCache.getAddress(addr.row, addr.column).address;\n };\n\n const firstAddress = getAddress(model.from);\n const secondAddress = getAddress(model.to);\n if (firstAddress && secondAddress) {\n xmlStream.leafNode('autoFilter', {ref: `${firstAddress}:${secondAddress}`});\n }\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'autoFilter') {\n this.model = node.attributes.ref;\n }\n }\n}\n\nmodule.exports = AutoFilterXform;\n"],"mappings":";;AAAA,MAAMA,QAAQ,GAAGC,OAAO,CAAC,0BAA0B,CAAC;AACpD,MAAMC,SAAS,GAAGD,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAME,eAAe,SAASD,SAAS,CAAC;EACtC,IAAIE,GAAGA,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACT,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;QAC7B;QACAD,SAAS,CAACE,QAAQ,CAAC,YAAY,EAAE;UAACC,GAAG,EAAEF;QAAK,CAAC,CAAC;MAChD,CAAC,MAAM;QACL,MAAMG,UAAU,GAAG,SAAAA,CAASC,IAAI,EAAE;UAChC,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;YAC5B,OAAOA,IAAI;UACb;UACA,OAAOX,QAAQ,CAACU,UAAU,CAACC,IAAI,CAACC,GAAG,EAAED,IAAI,CAACE,MAAM,CAAC,CAACC,OAAO;QAC3D,CAAC;QAED,MAAMC,YAAY,GAAGL,UAAU,CAACH,KAAK,CAACS,IAAI,CAAC;QAC3C,MAAMC,aAAa,GAAGP,UAAU,CAACH,KAAK,CAACW,EAAE,CAAC;QAC1C,IAAIH,YAAY,IAAIE,aAAa,EAAE;UACjCX,SAAS,CAACE,QAAQ,CAAC,YAAY,EAAE;YAACC,GAAG,EAAG,GAAEM,YAAa,IAAGE,aAAc;UAAC,CAAC,CAAC;QAC7E;MACF;IACF;EACF;EAEAE,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,YAAY,EAAE;MAC9B,IAAI,CAACd,KAAK,GAAGa,IAAI,CAACE,UAAU,CAACb,GAAG;IAClC;EACF;AACF;AAEAc,MAAM,CAACC,OAAO,GAAGrB,eAAe"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..b1618ab253cdc9fff1705ce1269ee4cc4494f74c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js @@ -0,0 +1,451 @@ +"use strict"; + +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +const Range = require('../../../doc/range'); +const Enums = require('../../../doc/enums'); +const RichTextXform = require('../strings/rich-text-xform'); +function getValueType(v) { + if (v === null || v === undefined) { + return Enums.ValueType.Null; + } + if (v instanceof String || typeof v === 'string') { + return Enums.ValueType.String; + } + if (typeof v === 'number') { + return Enums.ValueType.Number; + } + if (typeof v === 'boolean') { + return Enums.ValueType.Boolean; + } + if (v instanceof Date) { + return Enums.ValueType.Date; + } + if (v.text && v.hyperlink) { + return Enums.ValueType.Hyperlink; + } + if (v.formula) { + return Enums.ValueType.Formula; + } + if (v.error) { + return Enums.ValueType.Error; + } + throw new Error('I could not understand type of value'); +} +function getEffectiveCellType(cell) { + switch (cell.type) { + case Enums.ValueType.Formula: + return getValueType(cell.result); + default: + return cell.type; + } +} +class CellXform extends BaseXform { + constructor() { + super(); + this.richTextXForm = new RichTextXform(); + } + get tag() { + return 'c'; + } + prepare(model, options) { + const styleId = options.styles.addStyleModel(model.style || {}, getEffectiveCellType(model)); + if (styleId) { + model.styleId = styleId; + } + if (model.comment) { + options.comments.push({ + ...model.comment, + ref: model.address + }); + } + switch (model.type) { + case Enums.ValueType.String: + case Enums.ValueType.RichText: + if (options.sharedStrings) { + model.ssId = options.sharedStrings.add(model.value); + } + break; + case Enums.ValueType.Date: + if (options.date1904) { + model.date1904 = true; + } + break; + case Enums.ValueType.Hyperlink: + if (options.sharedStrings && model.text !== undefined && model.text !== null) { + model.ssId = options.sharedStrings.add(model.text); + } + options.hyperlinks.push({ + address: model.address, + target: model.hyperlink, + tooltip: model.tooltip + }); + break; + case Enums.ValueType.Merge: + options.merges.add(model); + break; + case Enums.ValueType.Formula: + if (options.date1904) { + // in case valueType is date + model.date1904 = true; + } + if (model.shareType === 'shared') { + model.si = options.siFormulae++; + } + if (model.formula) { + options.formulae[model.address] = model; + } else if (model.sharedFormula) { + const master = options.formulae[model.sharedFormula]; + if (!master) { + throw new Error(`Shared Formula master must exist above and or left of clone for cell ${model.address}`); + } + if (master.si === undefined) { + master.shareType = 'shared'; + master.si = options.siFormulae++; + master.range = new Range(master.address, model.address); + } else if (master.range) { + master.range.expandToAddress(model.address); + } + model.si = master.si; + } + break; + default: + break; + } + } + renderFormula(xmlStream, model) { + let attrs = null; + switch (model.shareType) { + case 'shared': + attrs = { + t: 'shared', + ref: model.ref || model.range.range, + si: model.si + }; + break; + case 'array': + attrs = { + t: 'array', + ref: model.ref + }; + break; + default: + if (model.si !== undefined) { + attrs = { + t: 'shared', + si: model.si + }; + } + break; + } + switch (getValueType(model.result)) { + case Enums.ValueType.Null: + // ? + xmlStream.leafNode('f', attrs, model.formula); + break; + case Enums.ValueType.String: + // oddly, formula results don't ever use shared strings + xmlStream.addAttribute('t', 'str'); + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result); + break; + case Enums.ValueType.Number: + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result); + break; + case Enums.ValueType.Boolean: + xmlStream.addAttribute('t', 'b'); + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result ? 1 : 0); + break; + case Enums.ValueType.Error: + xmlStream.addAttribute('t', 'e'); + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result.error); + break; + case Enums.ValueType.Date: + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, utils.dateToExcel(model.result, model.date1904)); + break; + + // case Enums.ValueType.Hyperlink: // ?? + // case Enums.ValueType.Formula: + default: + throw new Error('I could not understand type of value'); + } + } + render(xmlStream, model) { + if (model.type === Enums.ValueType.Null && !model.styleId) { + // if null and no style, exit + return; + } + xmlStream.openNode('c'); + xmlStream.addAttribute('r', model.address); + if (model.styleId) { + xmlStream.addAttribute('s', model.styleId); + } + switch (model.type) { + case Enums.ValueType.Null: + break; + case Enums.ValueType.Number: + xmlStream.leafNode('v', null, model.value); + break; + case Enums.ValueType.Boolean: + xmlStream.addAttribute('t', 'b'); + xmlStream.leafNode('v', null, model.value ? '1' : '0'); + break; + case Enums.ValueType.Error: + xmlStream.addAttribute('t', 'e'); + xmlStream.leafNode('v', null, model.value.error); + break; + case Enums.ValueType.String: + case Enums.ValueType.RichText: + if (model.ssId !== undefined) { + xmlStream.addAttribute('t', 's'); + xmlStream.leafNode('v', null, model.ssId); + } else if (model.value && model.value.richText) { + xmlStream.addAttribute('t', 'inlineStr'); + xmlStream.openNode('is'); + model.value.richText.forEach(text => { + this.richTextXForm.render(xmlStream, text); + }); + xmlStream.closeNode('is'); + } else { + xmlStream.addAttribute('t', 'str'); + xmlStream.leafNode('v', null, model.value); + } + break; + case Enums.ValueType.Date: + xmlStream.leafNode('v', null, utils.dateToExcel(model.value, model.date1904)); + break; + case Enums.ValueType.Hyperlink: + if (model.ssId !== undefined) { + xmlStream.addAttribute('t', 's'); + xmlStream.leafNode('v', null, model.ssId); + } else { + xmlStream.addAttribute('t', 'str'); + xmlStream.leafNode('v', null, model.text); + } + break; + case Enums.ValueType.Formula: + this.renderFormula(xmlStream, model); + break; + case Enums.ValueType.Merge: + // nothing to add + break; + default: + break; + } + xmlStream.closeNode(); // + } + + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'c': + // const address = colCache.decodeAddress(node.attributes.r); + this.model = { + address: node.attributes.r + }; + this.t = node.attributes.t; + if (node.attributes.s) { + this.model.styleId = parseInt(node.attributes.s, 10); + } + return true; + case 'f': + this.currentNode = 'f'; + this.model.si = node.attributes.si; + this.model.shareType = node.attributes.t; + this.model.ref = node.attributes.ref; + return true; + case 'v': + this.currentNode = 'v'; + return true; + case 't': + this.currentNode = 't'; + return true; + case 'r': + this.parser = this.richTextXForm; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + return; + } + switch (this.currentNode) { + case 'f': + this.model.formula = this.model.formula ? this.model.formula + text : text; + break; + case 'v': + case 't': + if (this.model.value && this.model.value.richText) { + this.model.value.richText.text = this.model.value.richText.text ? this.model.value.richText.text + text : text; + } else { + this.model.value = this.model.value ? this.model.value + text : text; + } + break; + default: + break; + } + } + parseClose(name) { + switch (name) { + case 'c': + { + const { + model + } = this; + + // first guess on cell type + if (model.formula || model.shareType) { + model.type = Enums.ValueType.Formula; + if (model.value) { + if (this.t === 'str') { + model.result = utils.xmlDecode(model.value); + } else if (this.t === 'b') { + model.result = parseInt(model.value, 10) !== 0; + } else if (this.t === 'e') { + model.result = { + error: model.value + }; + } else { + model.result = parseFloat(model.value); + } + model.value = undefined; + } + } else if (model.value !== undefined) { + switch (this.t) { + case 's': + model.type = Enums.ValueType.String; + model.value = parseInt(model.value, 10); + break; + case 'str': + model.type = Enums.ValueType.String; + model.value = utils.xmlDecode(model.value); + break; + case 'inlineStr': + model.type = Enums.ValueType.String; + break; + case 'b': + model.type = Enums.ValueType.Boolean; + model.value = parseInt(model.value, 10) !== 0; + break; + case 'e': + model.type = Enums.ValueType.Error; + model.value = { + error: model.value + }; + break; + default: + model.type = Enums.ValueType.Number; + model.value = parseFloat(model.value); + break; + } + } else if (model.styleId) { + model.type = Enums.ValueType.Null; + } else { + model.type = Enums.ValueType.Merge; + } + return false; + } + case 'f': + case 'v': + case 'is': + this.currentNode = undefined; + return true; + case 't': + if (this.parser) { + this.parser.parseClose(name); + return true; + } + this.currentNode = undefined; + return true; + case 'r': + this.model.value = this.model.value || {}; + this.model.value.richText = this.model.value.richText || []; + this.model.value.richText.push(this.parser.model); + this.parser = undefined; + this.currentNode = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + return true; + } + return false; + } + } + reconcile(model, options) { + const style = model.styleId && options.styles && options.styles.getStyleModel(model.styleId); + if (style) { + model.style = style; + } + if (model.styleId !== undefined) { + model.styleId = undefined; + } + switch (model.type) { + case Enums.ValueType.String: + if (typeof model.value === 'number') { + if (options.sharedStrings) { + model.value = options.sharedStrings.getString(model.value); + } + } + if (model.value.richText) { + model.type = Enums.ValueType.RichText; + } + break; + case Enums.ValueType.Number: + if (style && utils.isDateFmt(style.numFmt)) { + model.type = Enums.ValueType.Date; + model.value = utils.excelToDate(model.value, options.date1904); + } + break; + case Enums.ValueType.Formula: + if (model.result !== undefined && style && utils.isDateFmt(style.numFmt)) { + model.result = utils.excelToDate(model.result, options.date1904); + } + if (model.shareType === 'shared') { + if (model.ref) { + // master + options.formulae[model.si] = model.address; + } else { + // slave + model.sharedFormula = options.formulae[model.si]; + delete model.shareType; + } + delete model.si; + } + break; + default: + break; + } + + // look for hyperlink + const hyperlink = options.hyperlinkMap[model.address]; + if (hyperlink) { + if (model.type === Enums.ValueType.Formula) { + model.text = model.result; + model.result = undefined; + } else { + model.text = model.value; + model.value = undefined; + } + model.type = Enums.ValueType.Hyperlink; + model.hyperlink = hyperlink; + } + const comment = options.commentsMap && options.commentsMap[model.address]; + if (comment) { + model.comment = comment; + } + } +} +module.exports = CellXform; +//# sourceMappingURL=cell-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f42dab28fbee78c69ea03a0c4adca84d081a6a6f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cell-xform.js","names":["utils","require","BaseXform","Range","Enums","RichTextXform","getValueType","v","undefined","ValueType","Null","String","Number","Boolean","Date","text","hyperlink","Hyperlink","formula","Formula","error","Error","getEffectiveCellType","cell","type","result","CellXform","constructor","richTextXForm","tag","prepare","model","options","styleId","styles","addStyleModel","style","comment","comments","push","ref","address","RichText","sharedStrings","ssId","add","value","date1904","hyperlinks","target","tooltip","Merge","merges","shareType","si","siFormulae","formulae","sharedFormula","master","range","expandToAddress","renderFormula","xmlStream","attrs","t","leafNode","addAttribute","dateToExcel","render","openNode","richText","forEach","closeNode","parseOpen","node","parser","name","attributes","r","s","parseInt","currentNode","parseText","parseClose","xmlDecode","parseFloat","reconcile","getStyleModel","getString","isDateFmt","numFmt","excelToDate","hyperlinkMap","commentsMap","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/cell-xform.js"],"sourcesContent":["const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\nconst Enums = require('../../../doc/enums');\n\nconst RichTextXform = require('../strings/rich-text-xform');\n\nfunction getValueType(v) {\n if (v === null || v === undefined) {\n return Enums.ValueType.Null;\n }\n if (v instanceof String || typeof v === 'string') {\n return Enums.ValueType.String;\n }\n if (typeof v === 'number') {\n return Enums.ValueType.Number;\n }\n if (typeof v === 'boolean') {\n return Enums.ValueType.Boolean;\n }\n if (v instanceof Date) {\n return Enums.ValueType.Date;\n }\n if (v.text && v.hyperlink) {\n return Enums.ValueType.Hyperlink;\n }\n if (v.formula) {\n return Enums.ValueType.Formula;\n }\n if (v.error) {\n return Enums.ValueType.Error;\n }\n throw new Error('I could not understand type of value');\n}\n\nfunction getEffectiveCellType(cell) {\n switch (cell.type) {\n case Enums.ValueType.Formula:\n return getValueType(cell.result);\n default:\n return cell.type;\n }\n}\n\nclass CellXform extends BaseXform {\n constructor() {\n super();\n\n this.richTextXForm = new RichTextXform();\n }\n\n get tag() {\n return 'c';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style || {}, getEffectiveCellType(model));\n if (styleId) {\n model.styleId = styleId;\n }\n\n if (model.comment) {\n options.comments.push({...model.comment, ref: model.address});\n }\n\n switch (model.type) {\n case Enums.ValueType.String:\n case Enums.ValueType.RichText:\n if (options.sharedStrings) {\n model.ssId = options.sharedStrings.add(model.value);\n }\n break;\n\n case Enums.ValueType.Date:\n if (options.date1904) {\n model.date1904 = true;\n }\n break;\n\n case Enums.ValueType.Hyperlink:\n if (options.sharedStrings && model.text !== undefined && model.text !== null) {\n model.ssId = options.sharedStrings.add(model.text);\n }\n options.hyperlinks.push({\n address: model.address,\n target: model.hyperlink,\n tooltip: model.tooltip,\n });\n break;\n\n case Enums.ValueType.Merge:\n options.merges.add(model);\n break;\n\n case Enums.ValueType.Formula:\n if (options.date1904) {\n // in case valueType is date\n model.date1904 = true;\n }\n\n if (model.shareType === 'shared') {\n model.si = options.siFormulae++;\n }\n\n if (model.formula) {\n options.formulae[model.address] = model;\n } else if (model.sharedFormula) {\n const master = options.formulae[model.sharedFormula];\n if (!master) {\n throw new Error(\n `Shared Formula master must exist above and or left of clone for cell ${model.address}`\n );\n }\n if (master.si === undefined) {\n master.shareType = 'shared';\n master.si = options.siFormulae++;\n master.range = new Range(master.address, model.address);\n } else if (master.range) {\n master.range.expandToAddress(model.address);\n }\n model.si = master.si;\n }\n break;\n\n default:\n break;\n }\n }\n\n renderFormula(xmlStream, model) {\n let attrs = null;\n switch (model.shareType) {\n case 'shared':\n attrs = {\n t: 'shared',\n ref: model.ref || model.range.range,\n si: model.si,\n };\n break;\n\n case 'array':\n attrs = {\n t: 'array',\n ref: model.ref,\n };\n break;\n\n default:\n if (model.si !== undefined) {\n attrs = {\n t: 'shared',\n si: model.si,\n };\n }\n break;\n }\n\n switch (getValueType(model.result)) {\n case Enums.ValueType.Null: // ?\n xmlStream.leafNode('f', attrs, model.formula);\n break;\n\n case Enums.ValueType.String:\n // oddly, formula results don't ever use shared strings\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result);\n break;\n\n case Enums.ValueType.Number:\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result);\n break;\n\n case Enums.ValueType.Boolean:\n xmlStream.addAttribute('t', 'b');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result ? 1 : 0);\n break;\n\n case Enums.ValueType.Error:\n xmlStream.addAttribute('t', 'e');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result.error);\n break;\n\n case Enums.ValueType.Date:\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, utils.dateToExcel(model.result, model.date1904));\n break;\n\n // case Enums.ValueType.Hyperlink: // ??\n // case Enums.ValueType.Formula:\n default:\n throw new Error('I could not understand type of value');\n }\n }\n\n render(xmlStream, model) {\n if (model.type === Enums.ValueType.Null && !model.styleId) {\n // if null and no style, exit\n return;\n }\n\n xmlStream.openNode('c');\n xmlStream.addAttribute('r', model.address);\n\n if (model.styleId) {\n xmlStream.addAttribute('s', model.styleId);\n }\n\n switch (model.type) {\n case Enums.ValueType.Null:\n break;\n\n case Enums.ValueType.Number:\n xmlStream.leafNode('v', null, model.value);\n break;\n\n case Enums.ValueType.Boolean:\n xmlStream.addAttribute('t', 'b');\n xmlStream.leafNode('v', null, model.value ? '1' : '0');\n break;\n\n case Enums.ValueType.Error:\n xmlStream.addAttribute('t', 'e');\n xmlStream.leafNode('v', null, model.value.error);\n break;\n\n case Enums.ValueType.String:\n case Enums.ValueType.RichText:\n if (model.ssId !== undefined) {\n xmlStream.addAttribute('t', 's');\n xmlStream.leafNode('v', null, model.ssId);\n } else if (model.value && model.value.richText) {\n xmlStream.addAttribute('t', 'inlineStr');\n xmlStream.openNode('is');\n model.value.richText.forEach(text => {\n this.richTextXForm.render(xmlStream, text);\n });\n xmlStream.closeNode('is');\n } else {\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('v', null, model.value);\n }\n break;\n\n case Enums.ValueType.Date:\n xmlStream.leafNode('v', null, utils.dateToExcel(model.value, model.date1904));\n break;\n\n case Enums.ValueType.Hyperlink:\n if (model.ssId !== undefined) {\n xmlStream.addAttribute('t', 's');\n xmlStream.leafNode('v', null, model.ssId);\n } else {\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('v', null, model.text);\n }\n break;\n\n case Enums.ValueType.Formula:\n this.renderFormula(xmlStream, model);\n break;\n\n case Enums.ValueType.Merge:\n // nothing to add\n break;\n\n default:\n break;\n }\n\n xmlStream.closeNode(); // \n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'c':\n // const address = colCache.decodeAddress(node.attributes.r);\n this.model = {\n address: node.attributes.r,\n };\n this.t = node.attributes.t;\n if (node.attributes.s) {\n this.model.styleId = parseInt(node.attributes.s, 10);\n }\n return true;\n\n case 'f':\n this.currentNode = 'f';\n this.model.si = node.attributes.si;\n this.model.shareType = node.attributes.t;\n this.model.ref = node.attributes.ref;\n return true;\n\n case 'v':\n this.currentNode = 'v';\n return true;\n\n case 't':\n this.currentNode = 't';\n return true;\n\n case 'r':\n this.parser = this.richTextXForm;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n return;\n }\n switch (this.currentNode) {\n case 'f':\n this.model.formula = this.model.formula ? this.model.formula + text : text;\n break;\n case 'v':\n case 't':\n if (this.model.value && this.model.value.richText) {\n this.model.value.richText.text = this.model.value.richText.text\n ? this.model.value.richText.text + text\n : text;\n } else {\n this.model.value = this.model.value ? this.model.value + text : text;\n }\n break;\n default:\n break;\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'c': {\n const {model} = this;\n\n // first guess on cell type\n if (model.formula || model.shareType) {\n model.type = Enums.ValueType.Formula;\n if (model.value) {\n if (this.t === 'str') {\n model.result = utils.xmlDecode(model.value);\n } else if (this.t === 'b') {\n model.result = parseInt(model.value, 10) !== 0;\n } else if (this.t === 'e') {\n model.result = {error: model.value};\n } else {\n model.result = parseFloat(model.value);\n }\n model.value = undefined;\n }\n } else if (model.value !== undefined) {\n switch (this.t) {\n case 's':\n model.type = Enums.ValueType.String;\n model.value = parseInt(model.value, 10);\n break;\n case 'str':\n model.type = Enums.ValueType.String;\n model.value = utils.xmlDecode(model.value);\n break;\n case 'inlineStr':\n model.type = Enums.ValueType.String;\n break;\n case 'b':\n model.type = Enums.ValueType.Boolean;\n model.value = parseInt(model.value, 10) !== 0;\n break;\n case 'e':\n model.type = Enums.ValueType.Error;\n model.value = {error: model.value};\n break;\n default:\n model.type = Enums.ValueType.Number;\n model.value = parseFloat(model.value);\n break;\n }\n } else if (model.styleId) {\n model.type = Enums.ValueType.Null;\n } else {\n model.type = Enums.ValueType.Merge;\n }\n return false;\n }\n\n case 'f':\n case 'v':\n case 'is':\n this.currentNode = undefined;\n return true;\n\n case 't':\n if (this.parser) {\n this.parser.parseClose(name);\n return true;\n }\n this.currentNode = undefined;\n return true;\n\n case 'r':\n this.model.value = this.model.value || {};\n this.model.value.richText = this.model.value.richText || [];\n this.model.value.richText.push(this.parser.model);\n this.parser = undefined;\n this.currentNode = undefined;\n return true;\n\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n return true;\n }\n return false;\n }\n }\n\n reconcile(model, options) {\n const style = model.styleId && options.styles && options.styles.getStyleModel(model.styleId);\n if (style) {\n model.style = style;\n }\n if (model.styleId !== undefined) {\n model.styleId = undefined;\n }\n\n switch (model.type) {\n case Enums.ValueType.String:\n if (typeof model.value === 'number') {\n if (options.sharedStrings) {\n model.value = options.sharedStrings.getString(model.value);\n }\n }\n if (model.value.richText) {\n model.type = Enums.ValueType.RichText;\n }\n break;\n\n case Enums.ValueType.Number:\n if (style && utils.isDateFmt(style.numFmt)) {\n model.type = Enums.ValueType.Date;\n model.value = utils.excelToDate(model.value, options.date1904);\n }\n break;\n\n case Enums.ValueType.Formula:\n if (model.result !== undefined && style && utils.isDateFmt(style.numFmt)) {\n model.result = utils.excelToDate(model.result, options.date1904);\n }\n if (model.shareType === 'shared') {\n if (model.ref) {\n // master\n options.formulae[model.si] = model.address;\n } else {\n // slave\n model.sharedFormula = options.formulae[model.si];\n delete model.shareType;\n }\n delete model.si;\n }\n break;\n\n default:\n break;\n }\n\n // look for hyperlink\n const hyperlink = options.hyperlinkMap[model.address];\n if (hyperlink) {\n if (model.type === Enums.ValueType.Formula) {\n model.text = model.result;\n model.result = undefined;\n } else {\n model.text = model.value;\n model.value = undefined;\n }\n model.type = Enums.ValueType.Hyperlink;\n model.hyperlink = hyperlink;\n }\n\n const comment = options.commentsMap && options.commentsMap[model.address];\n if (comment) {\n model.comment = comment;\n }\n }\n}\n\nmodule.exports = CellXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..a9d565d7a67dbadac76eeccdcdfdd4a2a4ed0696 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js @@ -0,0 +1,28 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +class CfIconExtXform extends BaseXform { + get tag() { + return 'x14:cfIcon'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + iconSet: model.iconSet, + iconId: model.iconId + }); + } + parseOpen(_ref) { + let { + attributes + } = _ref; + this.model = { + iconSet: attributes.iconSet, + iconId: BaseXform.toIntValue(attributes.iconId) + }; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = CfIconExtXform; +//# sourceMappingURL=cf-icon-ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..60e873df94dfa1cc7d5ded820adcc682378a6024 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cf-icon-ext-xform.js","names":["BaseXform","require","CfIconExtXform","tag","render","xmlStream","model","leafNode","iconSet","iconId","parseOpen","_ref","attributes","toIntValue","parseClose","name","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nclass CfIconExtXform extends BaseXform {\n get tag() {\n return 'x14:cfIcon';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n iconSet: model.iconSet,\n iconId: model.iconId,\n });\n }\n\n parseOpen({attributes}) {\n this.model = {\n iconSet: attributes.iconSet,\n iconId: BaseXform.toIntValue(attributes.iconId),\n };\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = CfIconExtXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAMC,cAAc,SAASF,SAAS,CAAC;EACrC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;MAC3BK,OAAO,EAAEF,KAAK,CAACE,OAAO;MACtBC,MAAM,EAAEH,KAAK,CAACG;IAChB,CAAC,CAAC;EACJ;EAEAC,SAASA,CAAAC,IAAA,EAAe;IAAA,IAAd;MAACC;IAAU,CAAC,GAAAD,IAAA;IACpB,IAAI,CAACL,KAAK,GAAG;MACXE,OAAO,EAAEI,UAAU,CAACJ,OAAO;MAC3BC,MAAM,EAAET,SAAS,CAACa,UAAU,CAACD,UAAU,CAACH,MAAM;IAChD,CAAC;EACH;EAEAK,UAAUA,CAACC,IAAI,EAAE;IACf,OAAOA,IAAI,KAAK,IAAI,CAACZ,GAAG;EAC1B;AACF;AAEAa,MAAM,CAACC,OAAO,GAAGf,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..b85279a519d8c9ea32a754611c4ac79b225d3354 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js @@ -0,0 +1,88 @@ +"use strict"; + +const { + v4: uuidv4 +} = require('uuid'); +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const DatabarExtXform = require('./databar-ext-xform'); +const IconSetExtXform = require('./icon-set-ext-xform'); +const extIcons = { + '3Triangles': true, + '3Stars': true, + '5Boxes': true +}; +class CfRuleExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:dataBar': this.databarXform = new DatabarExtXform(), + 'x14:iconSet': this.iconSetXform = new IconSetExtXform() + }; + } + get tag() { + return 'x14:cfRule'; + } + static isExt(rule) { + // is this rule primitive? + if (rule.type === 'dataBar') { + return DatabarExtXform.isExt(rule); + } + if (rule.type === 'iconSet') { + if (rule.custom || extIcons[rule.iconSet]) { + return true; + } + } + return false; + } + prepare(model) { + if (CfRuleExtXform.isExt(model)) { + model.x14Id = `{${uuidv4()}}`.toUpperCase(); + } + } + render(xmlStream, model) { + if (!CfRuleExtXform.isExt(model)) { + return; + } + switch (model.type) { + case 'dataBar': + this.renderDataBar(xmlStream, model); + break; + case 'iconSet': + this.renderIconSet(xmlStream, model); + break; + } + } + renderDataBar(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'dataBar', + id: model.x14Id + }); + this.databarXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderIconSet(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'iconSet', + priority: model.priority, + id: model.x14Id || `{${uuidv4()}}` + }); + this.iconSetXform.render(xmlStream, model); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + type: attributes.type, + x14Id: attributes.id, + priority: BaseXform.toIntValue(attributes.priority) + }; + } + onParserClose(name, parser) { + Object.assign(this.model, parser.model); + } +} +module.exports = CfRuleExtXform; +//# sourceMappingURL=cf-rule-ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..8d89451d1b9b134bf8396fc98aa6198f8a397291 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cf-rule-ext-xform.js","names":["v4","uuidv4","require","BaseXform","CompositeXform","DatabarExtXform","IconSetExtXform","extIcons","CfRuleExtXform","constructor","map","databarXform","iconSetXform","tag","isExt","rule","type","custom","iconSet","prepare","model","x14Id","toUpperCase","render","xmlStream","renderDataBar","renderIconSet","openNode","id","closeNode","priority","createNewModel","_ref","attributes","toIntValue","onParserClose","name","parser","Object","assign","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js"],"sourcesContent":["const {v4: uuidv4} = require('uuid');\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst DatabarExtXform = require('./databar-ext-xform');\nconst IconSetExtXform = require('./icon-set-ext-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nclass CfRuleExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:dataBar': (this.databarXform = new DatabarExtXform()),\n 'x14:iconSet': (this.iconSetXform = new IconSetExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfRule';\n }\n\n static isExt(rule) {\n // is this rule primitive?\n if (rule.type === 'dataBar') {\n return DatabarExtXform.isExt(rule);\n }\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return true;\n }\n }\n return false;\n }\n\n prepare(model) {\n if (CfRuleExtXform.isExt(model)) {\n model.x14Id = `{${uuidv4()}}`.toUpperCase();\n }\n }\n\n render(xmlStream, model) {\n if (!CfRuleExtXform.isExt(model)) {\n return;\n }\n\n switch (model.type) {\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n }\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n id: model.x14Id,\n });\n\n this.databarXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n id: model.x14Id || `{${uuidv4()}}`,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n type: attributes.type,\n x14Id: attributes.id,\n priority: BaseXform.toIntValue(attributes.priority),\n };\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = CfRuleExtXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..f45ac9d26c694780ab5917a06efd298bf52e95f9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js @@ -0,0 +1,38 @@ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const FExtXform = require('./f-ext-xform'); +class CfvoExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'xm:f': this.fExtXform = new FExtXform() + }; + } + get tag() { + return 'x14:cfvo'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: model.type + }); + if (model.value !== undefined) { + this.fExtXform.render(xmlStream, model.value); + } + xmlStream.closeNode(); + } + createNewModel(node) { + return { + type: node.attributes.type + }; + } + onParserClose(name, parser) { + switch (name) { + case 'xm:f': + this.model.value = parser.model ? parseFloat(parser.model) : 0; + break; + } + } +} +module.exports = CfvoExtXform; +//# sourceMappingURL=cfvo-ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..53f3e51dc91013d5684fbe199b9771cd7b20d3d9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cfvo-ext-xform.js","names":["CompositeXform","require","FExtXform","CfvoExtXform","constructor","map","fExtXform","tag","render","xmlStream","model","openNode","type","value","undefined","closeNode","createNewModel","node","attributes","onParserClose","name","parser","parseFloat","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js"],"sourcesContent":["const CompositeXform = require('../../composite-xform');\n\nconst FExtXform = require('./f-ext-xform');\n\nclass CfvoExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'xm:f': (this.fExtXform = new FExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfvo';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.type,\n });\n if (model.value !== undefined) {\n this.fExtXform.render(xmlStream, model.value);\n }\n xmlStream.closeNode();\n }\n\n createNewModel(node) {\n return {\n type: node.attributes.type,\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'xm:f':\n this.model.value = parser.model ? parseFloat(parser.model) : 0;\n break;\n }\n }\n}\n\nmodule.exports = CfvoExtXform;\n"],"mappings":";;AAAA,MAAMA,cAAc,GAAGC,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAMC,SAAS,GAAGD,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAME,YAAY,SAASH,cAAc,CAAC;EACxCI,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACT,MAAM,EAAG,IAAI,CAACC,SAAS,GAAG,IAAIJ,SAAS,CAAC;IAC1C,CAAC;EACH;EAEA,IAAIK,GAAGA,CAAA,EAAG;IACR,OAAO,UAAU;EACnB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;MAC3BK,IAAI,EAAEF,KAAK,CAACE;IACd,CAAC,CAAC;IACF,IAAIF,KAAK,CAACG,KAAK,KAAKC,SAAS,EAAE;MAC7B,IAAI,CAACR,SAAS,CAACE,MAAM,CAACC,SAAS,EAAEC,KAAK,CAACG,KAAK,CAAC;IAC/C;IACAJ,SAAS,CAACM,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAACC,IAAI,EAAE;IACnB,OAAO;MACLL,IAAI,EAAEK,IAAI,CAACC,UAAU,CAACN;IACxB,CAAC;EACH;EAEAO,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1B,QAAQD,IAAI;MACV,KAAK,MAAM;QACT,IAAI,CAACV,KAAK,CAACG,KAAK,GAAGQ,MAAM,CAACX,KAAK,GAAGY,UAAU,CAACD,MAAM,CAACX,KAAK,CAAC,GAAG,CAAC;QAC9D;IACJ;EACF;AACF;AAEAa,MAAM,CAACC,OAAO,GAAGrB,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..d59990c38458bc40898a36a1c59fe166be2f29bc --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js @@ -0,0 +1,52 @@ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const SqRefExtXform = require('./sqref-ext-xform'); +const CfRuleExtXform = require('./cf-rule-ext-xform'); +class ConditionalFormattingExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'xm:sqref': this.sqRef = new SqRefExtXform(), + 'x14:cfRule': this.cfRule = new CfRuleExtXform() + }; + } + get tag() { + return 'x14:conditionalFormatting'; + } + prepare(model, options) { + model.rules.forEach(rule => { + this.cfRule.prepare(rule, options); + }); + } + render(xmlStream, model) { + if (!model.rules.some(CfRuleExtXform.isExt)) { + return; + } + xmlStream.openNode(this.tag, { + 'xmlns:xm': 'http://schemas.microsoft.com/office/excel/2006/main' + }); + model.rules.filter(CfRuleExtXform.isExt).forEach(rule => this.cfRule.render(xmlStream, rule)); + + // for some odd reason, Excel needs the node to be after the rules + this.sqRef.render(xmlStream, model.ref); + xmlStream.closeNode(); + } + createNewModel() { + return { + rules: [] + }; + } + onParserClose(name, parser) { + switch (name) { + case 'xm:sqref': + this.model.ref = parser.model; + break; + case 'x14:cfRule': + this.model.rules.push(parser.model); + break; + } + } +} +module.exports = ConditionalFormattingExtXform; +//# sourceMappingURL=conditional-formatting-ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..8e6806b74cc8868471e3c47af1075c24f3650775 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"conditional-formatting-ext-xform.js","names":["CompositeXform","require","SqRefExtXform","CfRuleExtXform","ConditionalFormattingExtXform","constructor","map","sqRef","cfRule","tag","prepare","model","options","rules","forEach","rule","render","xmlStream","some","isExt","openNode","filter","ref","closeNode","createNewModel","onParserClose","name","parser","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js"],"sourcesContent":["const CompositeXform = require('../../composite-xform');\n\nconst SqRefExtXform = require('./sqref-ext-xform');\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\n\nclass ConditionalFormattingExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'xm:sqref': (this.sqRef = new SqRefExtXform()),\n 'x14:cfRule': (this.cfRule = new CfRuleExtXform()),\n };\n }\n\n get tag() {\n return 'x14:conditionalFormatting';\n }\n\n prepare(model, options) {\n model.rules.forEach(rule => {\n this.cfRule.prepare(rule, options);\n });\n }\n\n render(xmlStream, model) {\n if (!model.rules.some(CfRuleExtXform.isExt)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n 'xmlns:xm': 'http://schemas.microsoft.com/office/excel/2006/main',\n });\n\n model.rules.filter(CfRuleExtXform.isExt).forEach(rule => this.cfRule.render(xmlStream, rule));\n\n // for some odd reason, Excel needs the node to be after the rules\n this.sqRef.render(xmlStream, model.ref);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {\n rules: [],\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'xm:sqref':\n this.model.ref = parser.model;\n break;\n\n case 'x14:cfRule':\n this.model.rules.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = ConditionalFormattingExtXform;\n"],"mappings":";;AAAA,MAAMA,cAAc,GAAGC,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAMC,aAAa,GAAGD,OAAO,CAAC,mBAAmB,CAAC;AAClD,MAAME,cAAc,GAAGF,OAAO,CAAC,qBAAqB,CAAC;AAErD,MAAMG,6BAA6B,SAASJ,cAAc,CAAC;EACzDK,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACT,UAAU,EAAG,IAAI,CAACC,KAAK,GAAG,IAAIL,aAAa,CAAC,CAAE;MAC9C,YAAY,EAAG,IAAI,CAACM,MAAM,GAAG,IAAIL,cAAc,CAAC;IAClD,CAAC;EACH;EAEA,IAAIM,GAAGA,CAAA,EAAG;IACR,OAAO,2BAA2B;EACpC;EAEAC,OAAOA,CAACC,KAAK,EAAEC,OAAO,EAAE;IACtBD,KAAK,CAACE,KAAK,CAACC,OAAO,CAACC,IAAI,IAAI;MAC1B,IAAI,CAACP,MAAM,CAACE,OAAO,CAACK,IAAI,EAAEH,OAAO,CAAC;IACpC,CAAC,CAAC;EACJ;EAEAI,MAAMA,CAACC,SAAS,EAAEN,KAAK,EAAE;IACvB,IAAI,CAACA,KAAK,CAACE,KAAK,CAACK,IAAI,CAACf,cAAc,CAACgB,KAAK,CAAC,EAAE;MAC3C;IACF;IAEAF,SAAS,CAACG,QAAQ,CAAC,IAAI,CAACX,GAAG,EAAE;MAC3B,UAAU,EAAE;IACd,CAAC,CAAC;IAEFE,KAAK,CAACE,KAAK,CAACQ,MAAM,CAAClB,cAAc,CAACgB,KAAK,CAAC,CAACL,OAAO,CAACC,IAAI,IAAI,IAAI,CAACP,MAAM,CAACQ,MAAM,CAACC,SAAS,EAAEF,IAAI,CAAC,CAAC;;IAE7F;IACA,IAAI,CAACR,KAAK,CAACS,MAAM,CAACC,SAAS,EAAEN,KAAK,CAACW,GAAG,CAAC;IAEvCL,SAAS,CAACM,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAAA,EAAG;IACf,OAAO;MACLX,KAAK,EAAE;IACT,CAAC;EACH;EAEAY,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1B,QAAQD,IAAI;MACV,KAAK,UAAU;QACb,IAAI,CAACf,KAAK,CAACW,GAAG,GAAGK,MAAM,CAAChB,KAAK;QAC7B;MAEF,KAAK,YAAY;QACf,IAAI,CAACA,KAAK,CAACE,KAAK,CAACe,IAAI,CAACD,MAAM,CAAChB,KAAK,CAAC;QACnC;IACJ;EACF;AACF;AAEAkB,MAAM,CAACC,OAAO,GAAG1B,6BAA6B"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..82926ca51960bc1a06b8a9eb9e430d8dea833892 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js @@ -0,0 +1,43 @@ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const CfRuleExtXform = require('./cf-rule-ext-xform'); +const ConditionalFormattingExtXform = require('./conditional-formatting-ext-xform'); +class ConditionalFormattingsExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:conditionalFormatting': this.cfXform = new ConditionalFormattingExtXform() + }; + } + get tag() { + return 'x14:conditionalFormattings'; + } + hasContent(model) { + if (model.hasExtContent === undefined) { + model.hasExtContent = model.some(cf => cf.rules.some(CfRuleExtXform.isExt)); + } + return model.hasExtContent; + } + prepare(model, options) { + model.forEach(cf => { + this.cfXform.prepare(cf, options); + }); + } + render(xmlStream, model) { + if (this.hasContent(model)) { + xmlStream.openNode(this.tag); + model.forEach(cf => this.cfXform.render(xmlStream, cf)); + xmlStream.closeNode(); + } + } + createNewModel() { + return []; + } + onParserClose(name, parser) { + // model is array of conditional formatting objects + this.model.push(parser.model); + } +} +module.exports = ConditionalFormattingsExtXform; +//# sourceMappingURL=conditional-formattings-ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..7dc8679cc0923cade84a56713f37dd3576bf0dad --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"conditional-formattings-ext-xform.js","names":["CompositeXform","require","CfRuleExtXform","ConditionalFormattingExtXform","ConditionalFormattingsExtXform","constructor","map","cfXform","tag","hasContent","model","hasExtContent","undefined","some","cf","rules","isExt","prepare","options","forEach","render","xmlStream","openNode","closeNode","createNewModel","onParserClose","name","parser","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js"],"sourcesContent":["const CompositeXform = require('../../composite-xform');\n\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\nconst ConditionalFormattingExtXform = require('./conditional-formatting-ext-xform');\n\nclass ConditionalFormattingsExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:conditionalFormatting': (this.cfXform = new ConditionalFormattingExtXform()),\n };\n }\n\n get tag() {\n return 'x14:conditionalFormattings';\n }\n\n hasContent(model) {\n if (model.hasExtContent === undefined) {\n model.hasExtContent = model.some(cf => cf.rules.some(CfRuleExtXform.isExt));\n }\n return model.hasExtContent;\n }\n\n prepare(model, options) {\n model.forEach(cf => {\n this.cfXform.prepare(cf, options);\n });\n }\n\n render(xmlStream, model) {\n if (this.hasContent(model)) {\n xmlStream.openNode(this.tag);\n model.forEach(cf => this.cfXform.render(xmlStream, cf));\n xmlStream.closeNode();\n }\n }\n\n createNewModel() {\n return [];\n }\n\n onParserClose(name, parser) {\n // model is array of conditional formatting objects\n this.model.push(parser.model);\n }\n}\n\nmodule.exports = ConditionalFormattingsExtXform;\n"],"mappings":";;AAAA,MAAMA,cAAc,GAAGC,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAMC,cAAc,GAAGD,OAAO,CAAC,qBAAqB,CAAC;AACrD,MAAME,6BAA6B,GAAGF,OAAO,CAAC,oCAAoC,CAAC;AAEnF,MAAMG,8BAA8B,SAASJ,cAAc,CAAC;EAC1DK,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACT,2BAA2B,EAAG,IAAI,CAACC,OAAO,GAAG,IAAIJ,6BAA6B,CAAC;IACjF,CAAC;EACH;EAEA,IAAIK,GAAGA,CAAA,EAAG;IACR,OAAO,4BAA4B;EACrC;EAEAC,UAAUA,CAACC,KAAK,EAAE;IAChB,IAAIA,KAAK,CAACC,aAAa,KAAKC,SAAS,EAAE;MACrCF,KAAK,CAACC,aAAa,GAAGD,KAAK,CAACG,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACC,KAAK,CAACF,IAAI,CAACX,cAAc,CAACc,KAAK,CAAC,CAAC;IAC7E;IACA,OAAON,KAAK,CAACC,aAAa;EAC5B;EAEAM,OAAOA,CAACP,KAAK,EAAEQ,OAAO,EAAE;IACtBR,KAAK,CAACS,OAAO,CAACL,EAAE,IAAI;MAClB,IAAI,CAACP,OAAO,CAACU,OAAO,CAACH,EAAE,EAAEI,OAAO,CAAC;IACnC,CAAC,CAAC;EACJ;EAEAE,MAAMA,CAACC,SAAS,EAAEX,KAAK,EAAE;IACvB,IAAI,IAAI,CAACD,UAAU,CAACC,KAAK,CAAC,EAAE;MAC1BW,SAAS,CAACC,QAAQ,CAAC,IAAI,CAACd,GAAG,CAAC;MAC5BE,KAAK,CAACS,OAAO,CAACL,EAAE,IAAI,IAAI,CAACP,OAAO,CAACa,MAAM,CAACC,SAAS,EAAEP,EAAE,CAAC,CAAC;MACvDO,SAAS,CAACE,SAAS,CAAC,CAAC;IACvB;EACF;EAEAC,cAAcA,CAAA,EAAG;IACf,OAAO,EAAE;EACX;EAEAC,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1B;IACA,IAAI,CAACjB,KAAK,CAACkB,IAAI,CAACD,MAAM,CAACjB,KAAK,CAAC;EAC/B;AACF;AAEAmB,MAAM,CAACC,OAAO,GAAG1B,8BAA8B"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..c41da852f4e22efd7950fa710c77c81471c41b0d --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js @@ -0,0 +1,75 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const ColorXform = require('../../style/color-xform'); +const CfvoExtXform = require('./cfvo-ext-xform'); +class DatabarExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:cfvo': this.cfvoXform = new CfvoExtXform(), + 'x14:borderColor': this.borderColorXform = new ColorXform('x14:borderColor'), + 'x14:negativeBorderColor': this.negativeBorderColorXform = new ColorXform('x14:negativeBorderColor'), + 'x14:negativeFillColor': this.negativeFillColorXform = new ColorXform('x14:negativeFillColor'), + 'x14:axisColor': this.axisColorXform = new ColorXform('x14:axisColor') + }; + } + static isExt(rule) { + // not all databars need ext + // TODO: refine this + return !rule.gradient; + } + get tag() { + return 'x14:dataBar'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + minLength: BaseXform.toIntAttribute(model.minLength, 0, true), + maxLength: BaseXform.toIntAttribute(model.maxLength, 100, true), + border: BaseXform.toBoolAttribute(model.border, false), + gradient: BaseXform.toBoolAttribute(model.gradient, true), + negativeBarColorSameAsPositive: BaseXform.toBoolAttribute(model.negativeBarColorSameAsPositive, true), + negativeBarBorderColorSameAsPositive: BaseXform.toBoolAttribute(model.negativeBarBorderColorSameAsPositive, true), + axisPosition: BaseXform.toAttribute(model.axisPosition, 'auto'), + direction: BaseXform.toAttribute(model.direction, 'leftToRight') + }); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + this.borderColorXform.render(xmlStream, model.borderColor); + this.negativeBorderColorXform.render(xmlStream, model.negativeBorderColor); + this.negativeFillColorXform.render(xmlStream, model.negativeFillColor); + this.axisColorXform.render(xmlStream, model.axisColor); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + cfvo: [], + minLength: BaseXform.toIntValue(attributes.minLength, 0), + maxLength: BaseXform.toIntValue(attributes.maxLength, 100), + border: BaseXform.toBoolValue(attributes.border, false), + gradient: BaseXform.toBoolValue(attributes.gradient, true), + negativeBarColorSameAsPositive: BaseXform.toBoolValue(attributes.negativeBarColorSameAsPositive, true), + negativeBarBorderColorSameAsPositive: BaseXform.toBoolValue(attributes.negativeBarBorderColorSameAsPositive, true), + axisPosition: BaseXform.toStringValue(attributes.axisPosition, 'auto'), + direction: BaseXform.toStringValue(attributes.direction, 'leftToRight') + }; + } + onParserClose(name, parser) { + const [, prop] = name.split(':'); + switch (prop) { + case 'cfvo': + this.model.cfvo.push(parser.model); + break; + default: + this.model[prop] = parser.model; + break; + } + } +} +module.exports = DatabarExtXform; +//# sourceMappingURL=databar-ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..d19b0a3899651a0d3e82b02fbafb975206a6e8cc --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"databar-ext-xform.js","names":["BaseXform","require","CompositeXform","ColorXform","CfvoExtXform","DatabarExtXform","constructor","map","cfvoXform","borderColorXform","negativeBorderColorXform","negativeFillColorXform","axisColorXform","isExt","rule","gradient","tag","render","xmlStream","model","openNode","minLength","toIntAttribute","maxLength","border","toBoolAttribute","negativeBarColorSameAsPositive","negativeBarBorderColorSameAsPositive","axisPosition","toAttribute","direction","cfvo","forEach","borderColor","negativeBorderColor","negativeFillColor","axisColor","closeNode","createNewModel","_ref","attributes","toIntValue","toBoolValue","toStringValue","onParserClose","name","parser","prop","split","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoExtXform = require('./cfvo-ext-xform');\n\nclass DatabarExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\n 'x14:borderColor': (this.borderColorXform = new ColorXform('x14:borderColor')),\n 'x14:negativeBorderColor': (this.negativeBorderColorXform = new ColorXform(\n 'x14:negativeBorderColor'\n )),\n 'x14:negativeFillColor': (this.negativeFillColorXform = new ColorXform(\n 'x14:negativeFillColor'\n )),\n 'x14:axisColor': (this.axisColorXform = new ColorXform('x14:axisColor')),\n };\n }\n\n static isExt(rule) {\n // not all databars need ext\n // TODO: refine this\n return !rule.gradient;\n }\n\n get tag() {\n return 'x14:dataBar';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n minLength: BaseXform.toIntAttribute(model.minLength, 0, true),\n maxLength: BaseXform.toIntAttribute(model.maxLength, 100, true),\n border: BaseXform.toBoolAttribute(model.border, false),\n gradient: BaseXform.toBoolAttribute(model.gradient, true),\n negativeBarColorSameAsPositive: BaseXform.toBoolAttribute(\n model.negativeBarColorSameAsPositive,\n true\n ),\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolAttribute(\n model.negativeBarBorderColorSameAsPositive,\n true\n ),\n axisPosition: BaseXform.toAttribute(model.axisPosition, 'auto'),\n direction: BaseXform.toAttribute(model.direction, 'leftToRight'),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n this.borderColorXform.render(xmlStream, model.borderColor);\n this.negativeBorderColorXform.render(xmlStream, model.negativeBorderColor);\n this.negativeFillColorXform.render(xmlStream, model.negativeFillColor);\n this.axisColorXform.render(xmlStream, model.axisColor);\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n cfvo: [],\n minLength: BaseXform.toIntValue(attributes.minLength, 0),\n maxLength: BaseXform.toIntValue(attributes.maxLength, 100),\n border: BaseXform.toBoolValue(attributes.border, false),\n gradient: BaseXform.toBoolValue(attributes.gradient, true),\n negativeBarColorSameAsPositive: BaseXform.toBoolValue(\n attributes.negativeBarColorSameAsPositive,\n true\n ),\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolValue(\n attributes.negativeBarBorderColorSameAsPositive,\n true\n ),\n axisPosition: BaseXform.toStringValue(attributes.axisPosition, 'auto'),\n direction: BaseXform.toStringValue(attributes.direction, 'leftToRight'),\n };\n }\n\n onParserClose(name, parser) {\n const [, prop] = name.split(':');\n switch (prop) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n\n default:\n this.model[prop] = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = DatabarExtXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..dc814f8520a5fd2d05b140b66a1845675116c0ae --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js @@ -0,0 +1,22 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +class FExtXform extends BaseXform { + get tag() { + return 'xm:f'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = FExtXform; +//# sourceMappingURL=f-ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..51fa0dcfdb30de31a2847f6d38d2dbe36191eea5 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"f-ext-xform.js","names":["BaseXform","require","FExtXform","tag","render","xmlStream","model","leafNode","parseOpen","parseText","text","parseClose","name","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nclass FExtXform extends BaseXform {\n get tag() {\n return 'xm:f';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = FExtXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAMC,SAAS,SAASF,SAAS,CAAC;EAChC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,MAAM;EACf;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE,IAAI,EAAEG,KAAK,CAAC;EAC3C;EAEAE,SAASA,CAAA,EAAG;IACV,IAAI,CAACF,KAAK,GAAG,EAAE;EACjB;EAEAG,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,CAACJ,KAAK,IAAII,IAAI;EACpB;EAEAC,UAAUA,CAACC,IAAI,EAAE;IACf,OAAOA,IAAI,KAAK,IAAI,CAACT,GAAG;EAC1B;AACF;AAEAU,MAAM,CAACC,OAAO,GAAGZ,SAAS"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..ce800d25360784cb9b0eeea781a0fc53e9c18d09 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js @@ -0,0 +1,66 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const CfvoExtXform = require('./cfvo-ext-xform'); +const CfIconExtXform = require('./cf-icon-ext-xform'); +class IconSetExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:cfvo': this.cfvoXform = new CfvoExtXform(), + 'x14:cfIcon': this.cfIconXform = new CfIconExtXform() + }; + } + get tag() { + return 'x14:iconSet'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + iconSet: BaseXform.toStringAttribute(model.iconSet), + reverse: BaseXform.toBoolAttribute(model.reverse, false), + showValue: BaseXform.toBoolAttribute(model.showValue, true), + custom: BaseXform.toBoolAttribute(model.icons, false) + }); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + if (model.icons) { + model.icons.forEach((icon, i) => { + icon.iconId = i; + this.cfIconXform.render(xmlStream, icon); + }); + } + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + cfvo: [], + iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'), + reverse: BaseXform.toBoolValue(attributes.reverse, false), + showValue: BaseXform.toBoolValue(attributes.showValue, true) + }; + } + onParserClose(name, parser) { + const [, prop] = name.split(':'); + switch (prop) { + case 'cfvo': + this.model.cfvo.push(parser.model); + break; + case 'cfIcon': + if (!this.model.icons) { + this.model.icons = []; + } + this.model.icons.push(parser.model); + break; + default: + this.model[prop] = parser.model; + break; + } + } +} +module.exports = IconSetExtXform; +//# sourceMappingURL=icon-set-ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..5f864c6861cb7b25b0f941e566135d3cf7f23b8d --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"icon-set-ext-xform.js","names":["BaseXform","require","CompositeXform","CfvoExtXform","CfIconExtXform","IconSetExtXform","constructor","map","cfvoXform","cfIconXform","tag","render","xmlStream","model","openNode","iconSet","toStringAttribute","reverse","toBoolAttribute","showValue","custom","icons","cfvo","forEach","icon","i","iconId","closeNode","createNewModel","_ref","attributes","toStringValue","toBoolValue","onParserClose","name","parser","prop","split","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst CfvoExtXform = require('./cfvo-ext-xform');\nconst CfIconExtXform = require('./cf-icon-ext-xform');\n\nclass IconSetExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\n 'x14:cfIcon': (this.cfIconXform = new CfIconExtXform()),\n };\n }\n\n get tag() {\n return 'x14:iconSet';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n iconSet: BaseXform.toStringAttribute(model.iconSet),\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\n custom: BaseXform.toBoolAttribute(model.icons, false),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n if (model.icons) {\n model.icons.forEach((icon, i) => {\n icon.iconId = i;\n this.cfIconXform.render(xmlStream, icon);\n });\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n cfvo: [],\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolValue(attributes.reverse, false),\n showValue: BaseXform.toBoolValue(attributes.showValue, true),\n };\n }\n\n onParserClose(name, parser) {\n const [, prop] = name.split(':');\n switch (prop) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n\n case 'cfIcon':\n if (!this.model.icons) {\n this.model.icons = [];\n }\n this.model.icons.push(parser.model);\n break;\n\n default:\n this.model[prop] = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = IconSetExtXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..a2ec945f1956d6d5426c6a722561c01850d9f498 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js @@ -0,0 +1,22 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +class SqrefExtXform extends BaseXform { + get tag() { + return 'xm:sqref'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = SqrefExtXform; +//# sourceMappingURL=sqref-ext-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..051ac120b6e05e67ee77858b14637d37a41675a9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sqref-ext-xform.js","names":["BaseXform","require","SqrefExtXform","tag","render","xmlStream","model","leafNode","parseOpen","parseText","text","parseClose","name","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nclass SqrefExtXform extends BaseXform {\n get tag() {\n return 'xm:sqref';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = SqrefExtXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAMC,aAAa,SAASF,SAAS,CAAC;EACpC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,UAAU;EACnB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE,IAAI,EAAEG,KAAK,CAAC;EAC3C;EAEAE,SAASA,CAAA,EAAG;IACV,IAAI,CAACF,KAAK,GAAG,EAAE;EACjB;EAEAG,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,CAACJ,KAAK,IAAII,IAAI;EACpB;EAEAC,UAAUA,CAACC,IAAI,EAAE;IACf,OAAOA,IAAI,KAAK,IAAI,CAACT,GAAG;EAC1B;AACF;AAEAU,MAAM,CAACC,OAAO,GAAGZ,aAAa"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..ec1c8f386c357af76e23701657a560e96caac3c1 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js @@ -0,0 +1,275 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const Range = require('../../../../doc/range'); +const DatabarXform = require('./databar-xform'); +const ExtLstRefXform = require('./ext-lst-ref-xform'); +const FormulaXform = require('./formula-xform'); +const ColorScaleXform = require('./color-scale-xform'); +const IconSetXform = require('./icon-set-xform'); +const extIcons = { + '3Triangles': true, + '3Stars': true, + '5Boxes': true +}; +const getTextFormula = model => { + if (model.formulae && model.formulae[0]) { + return model.formulae[0]; + } + const range = new Range(model.ref); + const { + tl + } = range; + switch (model.operator) { + case 'containsText': + return `NOT(ISERROR(SEARCH("${model.text}",${tl})))`; + case 'containsBlanks': + return `LEN(TRIM(${tl}))=0`; + case 'notContainsBlanks': + return `LEN(TRIM(${tl}))>0`; + case 'containsErrors': + return `ISERROR(${tl})`; + case 'notContainsErrors': + return `NOT(ISERROR(${tl}))`; + default: + return undefined; + } +}; +const getTimePeriodFormula = model => { + if (model.formulae && model.formulae[0]) { + return model.formulae[0]; + } + const range = new Range(model.ref); + const { + tl + } = range; + switch (model.timePeriod) { + case 'thisWeek': + return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`; + case 'lastWeek': + return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`; + case 'nextWeek': + return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`; + case 'yesterday': + return `FLOOR(${tl},1)=TODAY()-1`; + case 'today': + return `FLOOR(${tl},1)=TODAY()`; + case 'tomorrow': + return `FLOOR(${tl},1)=TODAY()+1`; + case 'last7Days': + return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`; + case 'lastMonth': + return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`; + case 'thisMonth': + return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`; + case 'nextMonth': + return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`; + default: + return undefined; + } +}; +const opType = attributes => { + const { + type, + operator + } = attributes; + switch (type) { + case 'containsText': + case 'containsBlanks': + case 'notContainsBlanks': + case 'containsErrors': + case 'notContainsErrors': + return { + type: 'containsText', + operator: type + }; + default: + return { + type, + operator + }; + } +}; +class CfRuleXform extends CompositeXform { + constructor() { + super(); + this.map = { + dataBar: this.databarXform = new DatabarXform(), + extLst: this.extLstRefXform = new ExtLstRefXform(), + formula: this.formulaXform = new FormulaXform(), + colorScale: this.colorScaleXform = new ColorScaleXform(), + iconSet: this.iconSetXform = new IconSetXform() + }; + } + get tag() { + return 'cfRule'; + } + static isPrimitive(rule) { + // is this rule primitive? + if (rule.type === 'iconSet') { + if (rule.custom || extIcons[rule.iconSet]) { + return false; + } + } + return true; + } + render(xmlStream, model) { + switch (model.type) { + case 'expression': + this.renderExpression(xmlStream, model); + break; + case 'cellIs': + this.renderCellIs(xmlStream, model); + break; + case 'top10': + this.renderTop10(xmlStream, model); + break; + case 'aboveAverage': + this.renderAboveAverage(xmlStream, model); + break; + case 'dataBar': + this.renderDataBar(xmlStream, model); + break; + case 'colorScale': + this.renderColorScale(xmlStream, model); + break; + case 'iconSet': + this.renderIconSet(xmlStream, model); + break; + case 'containsText': + this.renderText(xmlStream, model); + break; + case 'timePeriod': + this.renderTimePeriod(xmlStream, model); + break; + } + } + renderExpression(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'expression', + dxfId: model.dxfId, + priority: model.priority + }); + this.formulaXform.render(xmlStream, model.formulae[0]); + xmlStream.closeNode(); + } + renderCellIs(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'cellIs', + dxfId: model.dxfId, + priority: model.priority, + operator: model.operator + }); + model.formulae.forEach(formula => { + this.formulaXform.render(xmlStream, formula); + }); + xmlStream.closeNode(); + } + renderTop10(xmlStream, model) { + xmlStream.leafNode(this.tag, { + type: 'top10', + dxfId: model.dxfId, + priority: model.priority, + percent: BaseXform.toBoolAttribute(model.percent, false), + bottom: BaseXform.toBoolAttribute(model.bottom, false), + rank: BaseXform.toIntValue(model.rank, 10, true) + }); + } + renderAboveAverage(xmlStream, model) { + xmlStream.leafNode(this.tag, { + type: 'aboveAverage', + dxfId: model.dxfId, + priority: model.priority, + aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true) + }); + } + renderDataBar(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'dataBar', + priority: model.priority + }); + this.databarXform.render(xmlStream, model); + this.extLstRefXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderColorScale(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'colorScale', + priority: model.priority + }); + this.colorScaleXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderIconSet(xmlStream, model) { + // iconset is all primitive or all extLst + if (!CfRuleXform.isPrimitive(model)) { + return; + } + xmlStream.openNode(this.tag, { + type: 'iconSet', + priority: model.priority + }); + this.iconSetXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderText(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: model.operator, + dxfId: model.dxfId, + priority: model.priority, + operator: BaseXform.toStringAttribute(model.operator, 'containsText') + }); + const formula = getTextFormula(model); + if (formula) { + this.formulaXform.render(xmlStream, formula); + } + xmlStream.closeNode(); + } + renderTimePeriod(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'timePeriod', + dxfId: model.dxfId, + priority: model.priority, + timePeriod: model.timePeriod + }); + const formula = getTimePeriodFormula(model); + if (formula) { + this.formulaXform.render(xmlStream, formula); + } + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + ...opType(attributes), + dxfId: BaseXform.toIntValue(attributes.dxfId), + priority: BaseXform.toIntValue(attributes.priority), + timePeriod: attributes.timePeriod, + percent: BaseXform.toBoolValue(attributes.percent), + bottom: BaseXform.toBoolValue(attributes.bottom), + rank: BaseXform.toIntValue(attributes.rank), + aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage) + }; + } + onParserClose(name, parser) { + switch (name) { + case 'dataBar': + case 'extLst': + case 'colorScale': + case 'iconSet': + // merge parser model with ours + Object.assign(this.model, parser.model); + break; + case 'formula': + // except - formula is a string and appends to formulae + this.model.formulae = this.model.formulae || []; + this.model.formulae.push(parser.model); + break; + } + } +} +module.exports = CfRuleXform; +//# sourceMappingURL=cf-rule-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..00a52219381db43c7395d0bae9c95de0d0c0994c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cf-rule-xform.js","names":["BaseXform","require","CompositeXform","Range","DatabarXform","ExtLstRefXform","FormulaXform","ColorScaleXform","IconSetXform","extIcons","getTextFormula","model","formulae","range","ref","tl","operator","text","undefined","getTimePeriodFormula","timePeriod","opType","attributes","type","CfRuleXform","constructor","map","dataBar","databarXform","extLst","extLstRefXform","formula","formulaXform","colorScale","colorScaleXform","iconSet","iconSetXform","tag","isPrimitive","rule","custom","render","xmlStream","renderExpression","renderCellIs","renderTop10","renderAboveAverage","renderDataBar","renderColorScale","renderIconSet","renderText","renderTimePeriod","openNode","dxfId","priority","closeNode","forEach","leafNode","percent","toBoolAttribute","bottom","rank","toIntValue","aboveAverage","toStringAttribute","createNewModel","_ref","toBoolValue","onParserClose","name","parser","Object","assign","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/cf-rule-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst Range = require('../../../../doc/range');\n\nconst DatabarXform = require('./databar-xform');\nconst ExtLstRefXform = require('./ext-lst-ref-xform');\nconst FormulaXform = require('./formula-xform');\nconst ColorScaleXform = require('./color-scale-xform');\nconst IconSetXform = require('./icon-set-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nconst getTextFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.operator) {\n case 'containsText':\n return `NOT(ISERROR(SEARCH(\"${model.text}\",${tl})))`;\n case 'containsBlanks':\n return `LEN(TRIM(${tl}))=0`;\n case 'notContainsBlanks':\n return `LEN(TRIM(${tl}))>0`;\n case 'containsErrors':\n return `ISERROR(${tl})`;\n case 'notContainsErrors':\n return `NOT(ISERROR(${tl}))`;\n default:\n return undefined;\n }\n};\n\nconst getTimePeriodFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.timePeriod) {\n case 'thisWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`;\n case 'lastWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`;\n case 'nextWeek':\n return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`;\n case 'yesterday':\n return `FLOOR(${tl},1)=TODAY()-1`;\n case 'today':\n return `FLOOR(${tl},1)=TODAY()`;\n case 'tomorrow':\n return `FLOOR(${tl},1)=TODAY()+1`;\n case 'last7Days':\n return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`;\n case 'lastMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`;\n case 'thisMonth':\n return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`;\n case 'nextMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`;\n default:\n return undefined;\n }\n};\n\nconst opType = attributes => {\n const {type, operator} = attributes;\n switch (type) {\n case 'containsText':\n case 'containsBlanks':\n case 'notContainsBlanks':\n case 'containsErrors':\n case 'notContainsErrors':\n return {\n type: 'containsText',\n operator: type,\n };\n\n default:\n return {type, operator};\n }\n};\n\nclass CfRuleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n dataBar: (this.databarXform = new DatabarXform()),\n extLst: (this.extLstRefXform = new ExtLstRefXform()),\n formula: (this.formulaXform = new FormulaXform()),\n colorScale: (this.colorScaleXform = new ColorScaleXform()),\n iconSet: (this.iconSetXform = new IconSetXform()),\n };\n }\n\n get tag() {\n return 'cfRule';\n }\n\n static isPrimitive(rule) {\n // is this rule primitive?\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return false;\n }\n }\n return true;\n }\n\n render(xmlStream, model) {\n switch (model.type) {\n case 'expression':\n this.renderExpression(xmlStream, model);\n break;\n case 'cellIs':\n this.renderCellIs(xmlStream, model);\n break;\n case 'top10':\n this.renderTop10(xmlStream, model);\n break;\n case 'aboveAverage':\n this.renderAboveAverage(xmlStream, model);\n break;\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'colorScale':\n this.renderColorScale(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n case 'containsText':\n this.renderText(xmlStream, model);\n break;\n case 'timePeriod':\n this.renderTimePeriod(xmlStream, model);\n break;\n }\n }\n\n renderExpression(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'expression',\n dxfId: model.dxfId,\n priority: model.priority,\n });\n\n this.formulaXform.render(xmlStream, model.formulae[0]);\n\n xmlStream.closeNode();\n }\n\n renderCellIs(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'cellIs',\n dxfId: model.dxfId,\n priority: model.priority,\n operator: model.operator,\n });\n\n model.formulae.forEach(formula => {\n this.formulaXform.render(xmlStream, formula);\n });\n\n xmlStream.closeNode();\n }\n\n renderTop10(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'top10',\n dxfId: model.dxfId,\n priority: model.priority,\n percent: BaseXform.toBoolAttribute(model.percent, false),\n bottom: BaseXform.toBoolAttribute(model.bottom, false),\n rank: BaseXform.toIntValue(model.rank, 10, true),\n });\n }\n\n renderAboveAverage(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'aboveAverage',\n dxfId: model.dxfId,\n priority: model.priority,\n aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true),\n });\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n priority: model.priority,\n });\n\n this.databarXform.render(xmlStream, model);\n this.extLstRefXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderColorScale(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'colorScale',\n priority: model.priority,\n });\n\n this.colorScaleXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n // iconset is all primitive or all extLst\n if (!CfRuleXform.isPrimitive(model)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderText(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.operator,\n dxfId: model.dxfId,\n priority: model.priority,\n operator: BaseXform.toStringAttribute(model.operator, 'containsText'),\n });\n\n const formula = getTextFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n renderTimePeriod(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'timePeriod',\n dxfId: model.dxfId,\n priority: model.priority,\n timePeriod: model.timePeriod,\n });\n\n const formula = getTimePeriodFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ...opType(attributes),\n dxfId: BaseXform.toIntValue(attributes.dxfId),\n priority: BaseXform.toIntValue(attributes.priority),\n timePeriod: attributes.timePeriod,\n percent: BaseXform.toBoolValue(attributes.percent),\n bottom: BaseXform.toBoolValue(attributes.bottom),\n rank: BaseXform.toIntValue(attributes.rank),\n aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage),\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'dataBar':\n case 'extLst':\n case 'colorScale':\n case 'iconSet':\n // merge parser model with ours\n Object.assign(this.model, parser.model);\n break;\n\n case 'formula':\n // except - formula is a string and appends to formulae\n this.model.formulae = this.model.formulae || [];\n this.model.formulae.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = CfRuleXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..9fa9d3ba2fb4e7ad9cb64f09439ebb668090b889 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js @@ -0,0 +1,25 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +class CfvoXform extends BaseXform { + get tag() { + return 'cfvo'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + type: model.type, + val: model.value + }); + } + parseOpen(node) { + this.model = { + type: node.attributes.type, + value: BaseXform.toFloatValue(node.attributes.val) + }; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = CfvoXform; +//# sourceMappingURL=cfvo-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..322dcfc394ab70cd7f92b46f1014815b5bbbd8d9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cfvo-xform.js","names":["BaseXform","require","CfvoXform","tag","render","xmlStream","model","leafNode","type","val","value","parseOpen","node","attributes","toFloatValue","parseClose","name","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/cfvo-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nclass CfvoXform extends BaseXform {\n get tag() {\n return 'cfvo';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: model.type,\n val: model.value,\n });\n }\n\n parseOpen(node) {\n this.model = {\n type: node.attributes.type,\n value: BaseXform.toFloatValue(node.attributes.val),\n };\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = CfvoXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAMC,SAAS,SAASF,SAAS,CAAC;EAChC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,MAAM;EACf;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;MAC3BK,IAAI,EAAEF,KAAK,CAACE,IAAI;MAChBC,GAAG,EAAEH,KAAK,CAACI;IACb,CAAC,CAAC;EACJ;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,CAACN,KAAK,GAAG;MACXE,IAAI,EAAEI,IAAI,CAACC,UAAU,CAACL,IAAI;MAC1BE,KAAK,EAAEV,SAAS,CAACc,YAAY,CAACF,IAAI,CAACC,UAAU,CAACJ,GAAG;IACnD,CAAC;EACH;EAEAM,UAAUA,CAACC,IAAI,EAAE;IACf,OAAOA,IAAI,KAAK,IAAI,CAACb,GAAG;EAC1B;AACF;AAEAc,MAAM,CAACC,OAAO,GAAGhB,SAAS"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..26369f87169187e8e20858efdd03cd57dcc00fec --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js @@ -0,0 +1,38 @@ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const ColorXform = require('../../style/color-xform'); +const CfvoXform = require('./cfvo-xform'); +class ColorScaleXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfvo: this.cfvoXform = new CfvoXform(), + color: this.colorXform = new ColorXform() + }; + } + get tag() { + return 'colorScale'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + model.color.forEach(color => { + this.colorXform.render(xmlStream, color); + }); + xmlStream.closeNode(); + } + createNewModel(node) { + return { + cfvo: [], + color: [] + }; + } + onParserClose(name, parser) { + this.model[name].push(parser.model); + } +} +module.exports = ColorScaleXform; +//# sourceMappingURL=color-scale-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3c654e8b9c3f52fcb3443d8b5ffb783ba9158eca --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"color-scale-xform.js","names":["CompositeXform","require","ColorXform","CfvoXform","ColorScaleXform","constructor","map","cfvo","cfvoXform","color","colorXform","tag","render","xmlStream","model","openNode","forEach","closeNode","createNewModel","node","onParserClose","name","parser","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/color-scale-xform.js"],"sourcesContent":["const CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoXform = require('./cfvo-xform');\n\nclass ColorScaleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n color: (this.colorXform = new ColorXform()),\n };\n }\n\n get tag() {\n return 'colorScale';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n model.color.forEach(color => {\n this.colorXform.render(xmlStream, color);\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel(node) {\n return {\n cfvo: [],\n color: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model[name].push(parser.model);\n }\n}\n\nmodule.exports = ColorScaleXform;\n"],"mappings":";;AAAA,MAAMA,cAAc,GAAGC,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAMC,UAAU,GAAGD,OAAO,CAAC,yBAAyB,CAAC;AACrD,MAAME,SAAS,GAAGF,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAMG,eAAe,SAASJ,cAAc,CAAC;EAC3CK,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACTC,IAAI,EAAG,IAAI,CAACC,SAAS,GAAG,IAAIL,SAAS,CAAC,CAAE;MACxCM,KAAK,EAAG,IAAI,CAACC,UAAU,GAAG,IAAIR,UAAU,CAAC;IAC3C,CAAC;EACH;EAEA,IAAIS,GAAGA,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,CAAC;IAE5BG,KAAK,CAACP,IAAI,CAACS,OAAO,CAACT,IAAI,IAAI;MACzB,IAAI,CAACC,SAAS,CAACI,MAAM,CAACC,SAAS,EAAEN,IAAI,CAAC;IACxC,CAAC,CAAC;IACFO,KAAK,CAACL,KAAK,CAACO,OAAO,CAACP,KAAK,IAAI;MAC3B,IAAI,CAACC,UAAU,CAACE,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAAC;IAC1C,CAAC,CAAC;IAEFI,SAAS,CAACI,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAACC,IAAI,EAAE;IACnB,OAAO;MACLZ,IAAI,EAAE,EAAE;MACRE,KAAK,EAAE;IACT,CAAC;EACH;EAEAW,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1B,IAAI,CAACR,KAAK,CAACO,IAAI,CAAC,CAACE,IAAI,CAACD,MAAM,CAACR,KAAK,CAAC;EACrC;AACF;AAEAU,MAAM,CAACC,OAAO,GAAGrB,eAAe"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..8cc9565bf3e9ff9f1da8bb69f44d574fe87d478b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js @@ -0,0 +1,45 @@ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const CfRuleXform = require('./cf-rule-xform'); +class ConditionalFormattingXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfRule: new CfRuleXform() + }; + } + get tag() { + return 'conditionalFormatting'; + } + render(xmlStream, model) { + // if there are no primitive rules, exit now + if (!model.rules.some(CfRuleXform.isPrimitive)) { + return; + } + xmlStream.openNode(this.tag, { + sqref: model.ref + }); + model.rules.forEach(rule => { + if (CfRuleXform.isPrimitive(rule)) { + rule.ref = model.ref; + this.map.cfRule.render(xmlStream, rule); + } + }); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + ref: attributes.sqref, + rules: [] + }; + } + onParserClose(name, parser) { + this.model.rules.push(parser.model); + } +} +module.exports = ConditionalFormattingXform; +//# sourceMappingURL=conditional-formatting-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b5503461cb7ef0ed49006871a5d2271fbea6f73e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"conditional-formatting-xform.js","names":["CompositeXform","require","CfRuleXform","ConditionalFormattingXform","constructor","map","cfRule","tag","render","xmlStream","model","rules","some","isPrimitive","openNode","sqref","ref","forEach","rule","closeNode","createNewModel","_ref","attributes","onParserClose","name","parser","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js"],"sourcesContent":["const CompositeXform = require('../../composite-xform');\n\nconst CfRuleXform = require('./cf-rule-xform');\n\nclass ConditionalFormattingXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfRule: new CfRuleXform(),\n };\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n render(xmlStream, model) {\n // if there are no primitive rules, exit now\n if (!model.rules.some(CfRuleXform.isPrimitive)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {sqref: model.ref});\n\n model.rules.forEach(rule => {\n if (CfRuleXform.isPrimitive(rule)) {\n rule.ref = model.ref;\n this.map.cfRule.render(xmlStream, rule);\n }\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ref: attributes.sqref,\n rules: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model.rules.push(parser.model);\n }\n}\n\nmodule.exports = ConditionalFormattingXform;\n"],"mappings":";;AAAA,MAAMA,cAAc,GAAGC,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAMC,WAAW,GAAGD,OAAO,CAAC,iBAAiB,CAAC;AAE9C,MAAME,0BAA0B,SAASH,cAAc,CAAC;EACtDI,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACTC,MAAM,EAAE,IAAIJ,WAAW,CAAC;IAC1B,CAAC;EACH;EAEA,IAAIK,GAAGA,CAAA,EAAG;IACR,OAAO,uBAAuB;EAChC;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB;IACA,IAAI,CAACA,KAAK,CAACC,KAAK,CAACC,IAAI,CAACV,WAAW,CAACW,WAAW,CAAC,EAAE;MAC9C;IACF;IAEAJ,SAAS,CAACK,QAAQ,CAAC,IAAI,CAACP,GAAG,EAAE;MAACQ,KAAK,EAAEL,KAAK,CAACM;IAAG,CAAC,CAAC;IAEhDN,KAAK,CAACC,KAAK,CAACM,OAAO,CAACC,IAAI,IAAI;MAC1B,IAAIhB,WAAW,CAACW,WAAW,CAACK,IAAI,CAAC,EAAE;QACjCA,IAAI,CAACF,GAAG,GAAGN,KAAK,CAACM,GAAG;QACpB,IAAI,CAACX,GAAG,CAACC,MAAM,CAACE,MAAM,CAACC,SAAS,EAAES,IAAI,CAAC;MACzC;IACF,CAAC,CAAC;IAEFT,SAAS,CAACU,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAAAC,IAAA,EAAe;IAAA,IAAd;MAACC;IAAU,CAAC,GAAAD,IAAA;IACzB,OAAO;MACLL,GAAG,EAAEM,UAAU,CAACP,KAAK;MACrBJ,KAAK,EAAE;IACT,CAAC;EACH;EAEAY,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1B,IAAI,CAACf,KAAK,CAACC,KAAK,CAACe,IAAI,CAACD,MAAM,CAACf,KAAK,CAAC;EACrC;AACF;AAEAiB,MAAM,CAACC,OAAO,GAAGzB,0BAA0B"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..627a0c50b36841b50a3b5ee334d549b8c43b071a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js @@ -0,0 +1,77 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +const ConditionalFormattingXform = require('./conditional-formatting-xform'); +class ConditionalFormattingsXform extends BaseXform { + constructor() { + super(); + this.cfXform = new ConditionalFormattingXform(); + } + get tag() { + return 'conditionalFormatting'; + } + reset() { + this.model = []; + } + prepare(model, options) { + // ensure each rule has a priority value + let nextPriority = model.reduce((p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)), 1); + model.forEach(cf => { + cf.rules.forEach(rule => { + if (!rule.priority) { + rule.priority = nextPriority++; + } + if (rule.style) { + rule.dxfId = options.styles.addDxfStyle(rule.style); + } + }); + }); + } + render(xmlStream, model) { + model.forEach(cf => { + this.cfXform.render(xmlStream, cf); + }); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'conditionalFormatting': + this.parser = this.cfXform; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.push(this.parser.model); + this.parser = undefined; + return false; + } + return true; + } + return false; + } + reconcile(model, options) { + model.forEach(cf => { + cf.rules.forEach(rule => { + if (rule.dxfId !== undefined) { + rule.style = options.styles.getDxfStyle(rule.dxfId); + delete rule.dxfId; + } + }); + }); + } +} +module.exports = ConditionalFormattingsXform; +//# sourceMappingURL=conditional-formattings-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2aa5f5c0ee23a060b4428ef14e42ab02c4eb9093 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"conditional-formattings-xform.js","names":["BaseXform","require","ConditionalFormattingXform","ConditionalFormattingsXform","constructor","cfXform","tag","reset","model","prepare","options","nextPriority","reduce","p","cf","Math","max","rules","map","rule","priority","forEach","style","dxfId","styles","addDxfStyle","render","xmlStream","parseOpen","node","parser","name","parseText","text","parseClose","push","undefined","reconcile","getDxfStyle","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nconst ConditionalFormattingXform = require('./conditional-formatting-xform');\n\nclass ConditionalFormattingsXform extends BaseXform {\n constructor() {\n super();\n\n this.cfXform = new ConditionalFormattingXform();\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n reset() {\n this.model = [];\n }\n\n prepare(model, options) {\n // ensure each rule has a priority value\n let nextPriority = model.reduce(\n (p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)),\n 1\n );\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (!rule.priority) {\n rule.priority = nextPriority++;\n }\n\n if (rule.style) {\n rule.dxfId = options.styles.addDxfStyle(rule.style);\n }\n });\n });\n }\n\n render(xmlStream, model) {\n model.forEach(cf => {\n this.cfXform.render(xmlStream, cf);\n });\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case 'conditionalFormatting':\n this.parser = this.cfXform;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n return false;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (rule.dxfId !== undefined) {\n rule.style = options.styles.getDxfStyle(rule.dxfId);\n delete rule.dxfId;\n }\n });\n });\n }\n}\n\nmodule.exports = ConditionalFormattingsXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..adba60eb308d47f2042ccb81062e82e93a6670b7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js @@ -0,0 +1,42 @@ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const ColorXform = require('../../style/color-xform'); +const CfvoXform = require('./cfvo-xform'); +class DatabarXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfvo: this.cfvoXform = new CfvoXform(), + color: this.colorXform = new ColorXform() + }; + } + get tag() { + return 'dataBar'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + this.colorXform.render(xmlStream, model.color); + xmlStream.closeNode(); + } + createNewModel() { + return { + cfvo: [] + }; + } + onParserClose(name, parser) { + switch (name) { + case 'cfvo': + this.model.cfvo.push(parser.model); + break; + case 'color': + this.model.color = parser.model; + break; + } + } +} +module.exports = DatabarXform; +//# sourceMappingURL=databar-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..55e756b3e91fefef508bdb5b5da73b1d1b5508b9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"databar-xform.js","names":["CompositeXform","require","ColorXform","CfvoXform","DatabarXform","constructor","map","cfvo","cfvoXform","color","colorXform","tag","render","xmlStream","model","openNode","forEach","closeNode","createNewModel","onParserClose","name","parser","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/databar-xform.js"],"sourcesContent":["const CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoXform = require('./cfvo-xform');\n\nclass DatabarXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n color: (this.colorXform = new ColorXform()),\n };\n }\n\n get tag() {\n return 'dataBar';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n this.colorXform.render(xmlStream, model.color);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {\n cfvo: [],\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n case 'color':\n this.model.color = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = DatabarXform;\n"],"mappings":";;AAAA,MAAMA,cAAc,GAAGC,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAMC,UAAU,GAAGD,OAAO,CAAC,yBAAyB,CAAC;AACrD,MAAME,SAAS,GAAGF,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAMG,YAAY,SAASJ,cAAc,CAAC;EACxCK,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACTC,IAAI,EAAG,IAAI,CAACC,SAAS,GAAG,IAAIL,SAAS,CAAC,CAAE;MACxCM,KAAK,EAAG,IAAI,CAACC,UAAU,GAAG,IAAIR,UAAU,CAAC;IAC3C,CAAC;EACH;EAEA,IAAIS,GAAGA,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,CAAC;IAE5BG,KAAK,CAACP,IAAI,CAACS,OAAO,CAACT,IAAI,IAAI;MACzB,IAAI,CAACC,SAAS,CAACI,MAAM,CAACC,SAAS,EAAEN,IAAI,CAAC;IACxC,CAAC,CAAC;IACF,IAAI,CAACG,UAAU,CAACE,MAAM,CAACC,SAAS,EAAEC,KAAK,CAACL,KAAK,CAAC;IAE9CI,SAAS,CAACI,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAAA,EAAG;IACf,OAAO;MACLX,IAAI,EAAE;IACR,CAAC;EACH;EAEAY,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1B,QAAQD,IAAI;MACV,KAAK,MAAM;QACT,IAAI,CAACN,KAAK,CAACP,IAAI,CAACe,IAAI,CAACD,MAAM,CAACP,KAAK,CAAC;QAClC;MACF,KAAK,OAAO;QACV,IAAI,CAACA,KAAK,CAACL,KAAK,GAAGY,MAAM,CAACP,KAAK;QAC/B;IACJ;EACF;AACF;AAEAS,MAAM,CAACC,OAAO,GAAGpB,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..4d4ce74a682255ef28ce30219c21848db905cf61 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js @@ -0,0 +1,71 @@ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +class X14IdXform extends BaseXform { + get tag() { + return 'x14:id'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +class ExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:id': this.idXform = new X14IdXform() + }; + } + get tag() { + return 'ext'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + uri: '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}', + 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main' + }); + this.idXform.render(xmlStream, model.x14Id); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + this.model.x14Id = parser.model; + } +} +class ExtLstRefXform extends CompositeXform { + constructor() { + super(); + this.map = { + ext: new ExtXform() + }; + } + get tag() { + return 'extLst'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map.ext.render(xmlStream, model); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + Object.assign(this.model, parser.model); + } +} +module.exports = ExtLstRefXform; +//# sourceMappingURL=ext-lst-ref-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4f69afcab3434f8b09be5bb402ee4852fe6e784d --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ext-lst-ref-xform.js","names":["BaseXform","require","CompositeXform","X14IdXform","tag","render","xmlStream","model","leafNode","parseOpen","parseText","text","parseClose","name","ExtXform","constructor","map","idXform","openNode","uri","x14Id","closeNode","createNewModel","onParserClose","parser","ExtLstRefXform","ext","Object","assign","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nclass X14IdXform extends BaseXform {\n get tag() {\n return 'x14:id';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nclass ExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:id': (this.idXform = new X14IdXform()),\n };\n }\n\n get tag() {\n return 'ext';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n uri: '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n });\n\n this.idXform.render(xmlStream, model.x14Id);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n this.model.x14Id = parser.model;\n }\n}\n\nclass ExtLstRefXform extends CompositeXform {\n constructor() {\n super();\n this.map = {\n ext: new ExtXform(),\n };\n }\n\n get tag() {\n return 'extLst';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n this.map.ext.render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = ExtLstRefXform;\n"],"mappings":";;AAAA;AACA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAC7C,MAAMC,cAAc,GAAGD,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAME,UAAU,SAASH,SAAS,CAAC;EACjC,IAAII,GAAGA,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE,IAAI,EAAEG,KAAK,CAAC;EAC3C;EAEAE,SAASA,CAAA,EAAG;IACV,IAAI,CAACF,KAAK,GAAG,EAAE;EACjB;EAEAG,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,CAACJ,KAAK,IAAII,IAAI;EACpB;EAEAC,UAAUA,CAACC,IAAI,EAAE;IACf,OAAOA,IAAI,KAAK,IAAI,CAACT,GAAG;EAC1B;AACF;AAEA,MAAMU,QAAQ,SAASZ,cAAc,CAAC;EACpCa,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACT,QAAQ,EAAG,IAAI,CAACC,OAAO,GAAG,IAAId,UAAU,CAAC;IAC3C,CAAC;EACH;EAEA,IAAIC,GAAGA,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACY,QAAQ,CAAC,IAAI,CAACd,GAAG,EAAE;MAC3Be,GAAG,EAAE,wCAAwC;MAC7C,WAAW,EAAE;IACf,CAAC,CAAC;IAEF,IAAI,CAACF,OAAO,CAACZ,MAAM,CAACC,SAAS,EAAEC,KAAK,CAACa,KAAK,CAAC;IAE3Cd,SAAS,CAACe,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAAA,EAAG;IACf,OAAO,CAAC,CAAC;EACX;EAEAC,aAAaA,CAACV,IAAI,EAAEW,MAAM,EAAE;IAC1B,IAAI,CAACjB,KAAK,CAACa,KAAK,GAAGI,MAAM,CAACjB,KAAK;EACjC;AACF;AAEA,MAAMkB,cAAc,SAASvB,cAAc,CAAC;EAC1Ca,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,GAAG,GAAG;MACTU,GAAG,EAAE,IAAIZ,QAAQ,CAAC;IACpB,CAAC;EACH;EAEA,IAAIV,GAAGA,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACY,QAAQ,CAAC,IAAI,CAACd,GAAG,CAAC;IAC5B,IAAI,CAACY,GAAG,CAACU,GAAG,CAACrB,MAAM,CAACC,SAAS,EAAEC,KAAK,CAAC;IACrCD,SAAS,CAACe,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAAA,EAAG;IACf,OAAO,CAAC,CAAC;EACX;EAEAC,aAAaA,CAACV,IAAI,EAAEW,MAAM,EAAE;IAC1BG,MAAM,CAACC,MAAM,CAAC,IAAI,CAACrB,KAAK,EAAEiB,MAAM,CAACjB,KAAK,CAAC;EACzC;AACF;AAEAsB,MAAM,CAACC,OAAO,GAAGL,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..779ca7b086fdc666bf42886746b98d4b55c87312 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js @@ -0,0 +1,22 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +class FormulaXform extends BaseXform { + get tag() { + return 'formula'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = FormulaXform; +//# sourceMappingURL=formula-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1ec9f353539991a74cb45ef1b21af29c93415af9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"formula-xform.js","names":["BaseXform","require","FormulaXform","tag","render","xmlStream","model","leafNode","parseOpen","parseText","text","parseClose","name","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/formula-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nclass FormulaXform extends BaseXform {\n get tag() {\n return 'formula';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = FormulaXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAMC,YAAY,SAASF,SAAS,CAAC;EACnC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE,IAAI,EAAEG,KAAK,CAAC;EAC3C;EAEAE,SAASA,CAAA,EAAG;IACV,IAAI,CAACF,KAAK,GAAG,EAAE;EACjB;EAEAG,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,CAACJ,KAAK,IAAII,IAAI;EACpB;EAEAC,UAAUA,CAACC,IAAI,EAAE;IACf,OAAOA,IAAI,KAAK,IAAI,CAACT,GAAG;EAC1B;AACF;AAEAU,MAAM,CAACC,OAAO,GAAGZ,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..3e9587efcec98739c1fdfb2555b42a8adf9d5d62 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js @@ -0,0 +1,43 @@ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const CfvoXform = require('./cfvo-xform'); +class IconSetXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfvo: this.cfvoXform = new CfvoXform() + }; + } + get tag() { + return 'iconSet'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + iconSet: BaseXform.toStringAttribute(model.iconSet, '3TrafficLights'), + reverse: BaseXform.toBoolAttribute(model.reverse, false), + showValue: BaseXform.toBoolAttribute(model.showValue, true) + }); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'), + reverse: BaseXform.toBoolValue(attributes.reverse), + showValue: BaseXform.toBoolValue(attributes.showValue), + cfvo: [] + }; + } + onParserClose(name, parser) { + this.model[name].push(parser.model); + } +} +module.exports = IconSetXform; +//# sourceMappingURL=icon-set-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..5fdc6d19a5107512685717c265c8e34a312af193 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"icon-set-xform.js","names":["BaseXform","require","CompositeXform","CfvoXform","IconSetXform","constructor","map","cfvo","cfvoXform","tag","render","xmlStream","model","openNode","iconSet","toStringAttribute","reverse","toBoolAttribute","showValue","forEach","closeNode","createNewModel","_ref","attributes","toStringValue","toBoolValue","onParserClose","name","parser","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/icon-set-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst CfvoXform = require('./cfvo-xform');\n\nclass IconSetXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n };\n }\n\n get tag() {\n return 'iconSet';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n iconSet: BaseXform.toStringAttribute(model.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolValue(attributes.reverse),\n showValue: BaseXform.toBoolValue(attributes.showValue),\n cfvo: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model[name].push(parser.model);\n }\n}\n\nmodule.exports = IconSetXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAC7C,MAAMC,cAAc,GAAGD,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAME,SAAS,GAAGF,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAMG,YAAY,SAASF,cAAc,CAAC;EACxCG,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACTC,IAAI,EAAG,IAAI,CAACC,SAAS,GAAG,IAAIL,SAAS,CAAC;IACxC,CAAC;EACH;EAEA,IAAIM,GAAGA,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;MAC3BK,OAAO,EAAEd,SAAS,CAACe,iBAAiB,CAACH,KAAK,CAACE,OAAO,EAAE,gBAAgB,CAAC;MACrEE,OAAO,EAAEhB,SAAS,CAACiB,eAAe,CAACL,KAAK,CAACI,OAAO,EAAE,KAAK,CAAC;MACxDE,SAAS,EAAElB,SAAS,CAACiB,eAAe,CAACL,KAAK,CAACM,SAAS,EAAE,IAAI;IAC5D,CAAC,CAAC;IAEFN,KAAK,CAACL,IAAI,CAACY,OAAO,CAACZ,IAAI,IAAI;MACzB,IAAI,CAACC,SAAS,CAACE,MAAM,CAACC,SAAS,EAAEJ,IAAI,CAAC;IACxC,CAAC,CAAC;IAEFI,SAAS,CAACS,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAAAC,IAAA,EAAe;IAAA,IAAd;MAACC;IAAU,CAAC,GAAAD,IAAA;IACzB,OAAO;MACLR,OAAO,EAAEd,SAAS,CAACwB,aAAa,CAACD,UAAU,CAACT,OAAO,EAAE,gBAAgB,CAAC;MACtEE,OAAO,EAAEhB,SAAS,CAACyB,WAAW,CAACF,UAAU,CAACP,OAAO,CAAC;MAClDE,SAAS,EAAElB,SAAS,CAACyB,WAAW,CAACF,UAAU,CAACL,SAAS,CAAC;MACtDX,IAAI,EAAE;IACR,CAAC;EACH;EAEAmB,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1B,IAAI,CAAChB,KAAK,CAACe,IAAI,CAAC,CAACE,IAAI,CAACD,MAAM,CAAChB,KAAK,CAAC;EACrC;AACF;AAEAkB,MAAM,CAACC,OAAO,GAAG3B,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..1101a6638e97013fd3f88dd71c83a5f9c5e8ee4a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js @@ -0,0 +1,78 @@ +"use strict"; + +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +class ColXform extends BaseXform { + get tag() { + return 'col'; + } + prepare(model, options) { + const styleId = options.styles.addStyleModel(model.style || {}); + if (styleId) { + model.styleId = styleId; + } + } + render(xmlStream, model) { + xmlStream.openNode('col'); + xmlStream.addAttribute('min', model.min); + xmlStream.addAttribute('max', model.max); + if (model.width) { + xmlStream.addAttribute('width', model.width); + } + if (model.styleId) { + xmlStream.addAttribute('style', model.styleId); + } + if (model.hidden) { + xmlStream.addAttribute('hidden', '1'); + } + if (model.bestFit) { + xmlStream.addAttribute('bestFit', '1'); + } + if (model.outlineLevel) { + xmlStream.addAttribute('outlineLevel', model.outlineLevel); + } + if (model.collapsed) { + xmlStream.addAttribute('collapsed', '1'); + } + xmlStream.addAttribute('customWidth', '1'); + xmlStream.closeNode(); + } + parseOpen(node) { + if (node.name === 'col') { + const model = this.model = { + min: parseInt(node.attributes.min || '0', 10), + max: parseInt(node.attributes.max || '0', 10), + width: node.attributes.width === undefined ? undefined : parseFloat(node.attributes.width || '0') + }; + if (node.attributes.style) { + model.styleId = parseInt(node.attributes.style, 10); + } + if (utils.parseBoolean(node.attributes.hidden)) { + model.hidden = true; + } + if (utils.parseBoolean(node.attributes.bestFit)) { + model.bestFit = true; + } + if (node.attributes.outlineLevel) { + model.outlineLevel = parseInt(node.attributes.outlineLevel, 10); + } + if (utils.parseBoolean(node.attributes.collapsed)) { + model.collapsed = true; + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } + reconcile(model, options) { + // reconcile column styles + if (model.styleId) { + model.style = options.styles.getStyleModel(model.styleId); + } + } +} +module.exports = ColXform; +//# sourceMappingURL=col-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..1abbffc70b50737200f5a8493fae76f3cf2ac311 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"col-xform.js","names":["utils","require","BaseXform","ColXform","tag","prepare","model","options","styleId","styles","addStyleModel","style","render","xmlStream","openNode","addAttribute","min","max","width","hidden","bestFit","outlineLevel","collapsed","closeNode","parseOpen","node","name","parseInt","attributes","undefined","parseFloat","parseBoolean","parseText","parseClose","reconcile","getStyleModel","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/col-xform.js"],"sourcesContent":["const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nclass ColXform extends BaseXform {\n get tag() {\n return 'col';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style || {});\n if (styleId) {\n model.styleId = styleId;\n }\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('col');\n xmlStream.addAttribute('min', model.min);\n xmlStream.addAttribute('max', model.max);\n if (model.width) {\n xmlStream.addAttribute('width', model.width);\n }\n if (model.styleId) {\n xmlStream.addAttribute('style', model.styleId);\n }\n if (model.hidden) {\n xmlStream.addAttribute('hidden', '1');\n }\n if (model.bestFit) {\n xmlStream.addAttribute('bestFit', '1');\n }\n if (model.outlineLevel) {\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\n }\n if (model.collapsed) {\n xmlStream.addAttribute('collapsed', '1');\n }\n xmlStream.addAttribute('customWidth', '1');\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (node.name === 'col') {\n const model = (this.model = {\n min: parseInt(node.attributes.min || '0', 10),\n max: parseInt(node.attributes.max || '0', 10),\n width:\n node.attributes.width === undefined\n ? undefined\n : parseFloat(node.attributes.width || '0'),\n });\n if (node.attributes.style) {\n model.styleId = parseInt(node.attributes.style, 10);\n }\n if (utils.parseBoolean(node.attributes.hidden)) {\n model.hidden = true;\n }\n if (utils.parseBoolean(node.attributes.bestFit)) {\n model.bestFit = true;\n }\n if (node.attributes.outlineLevel) {\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\n }\n if (utils.parseBoolean(node.attributes.collapsed)) {\n model.collapsed = true;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n\n reconcile(model, options) {\n // reconcile column styles\n if (model.styleId) {\n model.style = options.styles.getStyleModel(model.styleId);\n }\n }\n}\n\nmodule.exports = ColXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..20a30bb3c8aee252103cce58de9847583c130bc3 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js @@ -0,0 +1,247 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const utils = require('../../../utils/utils'); +const colCache = require('../../../utils/col-cache'); +const BaseXform = require('../base-xform'); +const Range = require('../../../doc/range'); +function assign(definedName, attributes, name, defaultValue) { + const value = attributes[name]; + if (value !== undefined) { + definedName[name] = value; + } else if (defaultValue !== undefined) { + definedName[name] = defaultValue; + } +} +function assignBool(definedName, attributes, name, defaultValue) { + const value = attributes[name]; + if (value !== undefined) { + definedName[name] = utils.parseBoolean(value); + } else if (defaultValue !== undefined) { + definedName[name] = defaultValue; + } +} +function optimiseDataValidations(model) { + // Squeeze alike data validations together into rectangular ranges + // to reduce file size and speed up Excel load time + const dvList = _.map(model, (dataValidation, address) => ({ + address, + dataValidation, + marked: false + })).sort((a, b) => _.strcmp(a.address, b.address)); + const dvMap = _.keyBy(dvList, 'address'); + const matchCol = (addr, height, col) => { + for (let i = 0; i < height; i++) { + const otherAddress = colCache.encodeAddress(addr.row + i, col); + if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) { + return false; + } + } + return true; + }; + return dvList.map(dv => { + if (!dv.marked) { + const addr = colCache.decodeEx(dv.address); + if (addr.dimensions) { + dvMap[addr.dimensions].marked = true; + return { + ...dv.dataValidation, + sqref: dv.address + }; + } + + // iterate downwards - finding matching cells + let height = 1; + let otherAddress = colCache.encodeAddress(addr.row + height, addr.col); + while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) { + height++; + otherAddress = colCache.encodeAddress(addr.row + height, addr.col); + } + + // iterate rightwards... + + let width = 1; + while (matchCol(addr, height, addr.col + width)) { + width++; + } + + // mark all included addresses + for (let i = 0; i < height; i++) { + for (let j = 0; j < width; j++) { + otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j); + dvMap[otherAddress].marked = true; + } + } + if (height > 1 || width > 1) { + const bottom = addr.row + (height - 1); + const right = addr.col + (width - 1); + return { + ...dv.dataValidation, + sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}` + }; + } + return { + ...dv.dataValidation, + sqref: dv.address + }; + } + return null; + }).filter(Boolean); +} +class DataValidationsXform extends BaseXform { + get tag() { + return 'dataValidations'; + } + render(xmlStream, model) { + const optimizedModel = optimiseDataValidations(model); + if (optimizedModel.length) { + xmlStream.openNode('dataValidations', { + count: optimizedModel.length + }); + optimizedModel.forEach(value => { + xmlStream.openNode('dataValidation'); + if (value.type !== 'any') { + xmlStream.addAttribute('type', value.type); + if (value.operator && value.type !== 'list' && value.operator !== 'between') { + xmlStream.addAttribute('operator', value.operator); + } + if (value.allowBlank) { + xmlStream.addAttribute('allowBlank', '1'); + } + } + if (value.showInputMessage) { + xmlStream.addAttribute('showInputMessage', '1'); + } + if (value.promptTitle) { + xmlStream.addAttribute('promptTitle', value.promptTitle); + } + if (value.prompt) { + xmlStream.addAttribute('prompt', value.prompt); + } + if (value.showErrorMessage) { + xmlStream.addAttribute('showErrorMessage', '1'); + } + if (value.errorStyle) { + xmlStream.addAttribute('errorStyle', value.errorStyle); + } + if (value.errorTitle) { + xmlStream.addAttribute('errorTitle', value.errorTitle); + } + if (value.error) { + xmlStream.addAttribute('error', value.error); + } + xmlStream.addAttribute('sqref', value.sqref); + (value.formulae || []).forEach((formula, index) => { + xmlStream.openNode(`formula${index + 1}`); + if (value.type === 'date') { + xmlStream.writeText(utils.dateToExcel(new Date(formula))); + } else { + xmlStream.writeText(formula); + } + xmlStream.closeNode(); + }); + xmlStream.closeNode(); + }); + xmlStream.closeNode(); + } + } + parseOpen(node) { + switch (node.name) { + case 'dataValidations': + this.model = {}; + return true; + case 'dataValidation': + { + this._address = node.attributes.sqref; + const dataValidation = { + type: node.attributes.type || 'any', + formulae: [] + }; + if (node.attributes.type) { + assignBool(dataValidation, node.attributes, 'allowBlank'); + } + assignBool(dataValidation, node.attributes, 'showInputMessage'); + assignBool(dataValidation, node.attributes, 'showErrorMessage'); + switch (dataValidation.type) { + case 'any': + case 'list': + case 'custom': + break; + default: + assign(dataValidation, node.attributes, 'operator', 'between'); + break; + } + assign(dataValidation, node.attributes, 'promptTitle'); + assign(dataValidation, node.attributes, 'prompt'); + assign(dataValidation, node.attributes, 'errorStyle'); + assign(dataValidation, node.attributes, 'errorTitle'); + assign(dataValidation, node.attributes, 'error'); + this._dataValidation = dataValidation; + return true; + } + case 'formula1': + case 'formula2': + this._formula = []; + return true; + default: + return false; + } + } + parseText(text) { + if (this._formula) { + this._formula.push(text); + } + } + parseClose(name) { + switch (name) { + case 'dataValidations': + return false; + case 'dataValidation': + { + if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) { + delete this._dataValidation.formulae; + delete this._dataValidation.operator; + } + // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4 + const list = this._address.split(/\s+/g) || []; + list.forEach(addr => { + if (addr.includes(':')) { + const range = new Range(addr); + range.forEachAddress(address => { + this.model[address] = this._dataValidation; + }); + } else { + this.model[addr] = this._dataValidation; + } + }); + return true; + } + case 'formula1': + case 'formula2': + { + let formula = this._formula.join(''); + switch (this._dataValidation.type) { + case 'whole': + case 'textLength': + formula = parseInt(formula, 10); + break; + case 'decimal': + formula = parseFloat(formula); + break; + case 'date': + formula = utils.excelToDate(parseFloat(formula)); + break; + default: + break; + } + this._dataValidation.formulae.push(formula); + this._formula = undefined; + return true; + } + default: + return true; + } + } +} +module.exports = DataValidationsXform; +//# sourceMappingURL=data-validations-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..adf98474e3aad38cc25f03a6741c9db18df1d3dd --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"data-validations-xform.js","names":["_","require","utils","colCache","BaseXform","Range","assign","definedName","attributes","name","defaultValue","value","undefined","assignBool","parseBoolean","optimiseDataValidations","model","dvList","map","dataValidation","address","marked","sort","a","b","strcmp","dvMap","keyBy","matchCol","addr","height","col","i","otherAddress","encodeAddress","row","isEqual","dv","decodeEx","dimensions","sqref","width","j","bottom","right","filter","Boolean","DataValidationsXform","tag","render","xmlStream","optimizedModel","length","openNode","count","forEach","type","addAttribute","operator","allowBlank","showInputMessage","promptTitle","prompt","showErrorMessage","errorStyle","errorTitle","error","formulae","formula","index","writeText","dateToExcel","Date","closeNode","parseOpen","node","_address","_dataValidation","_formula","parseText","text","push","parseClose","list","split","includes","range","forEachAddress","join","parseInt","parseFloat","excelToDate","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/data-validations-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\nconst utils = require('../../../utils/utils');\nconst colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\n\nfunction assign(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = value;\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction assignBool(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = utils.parseBoolean(value);\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction optimiseDataValidations(model) {\n // Squeeze alike data validations together into rectangular ranges\n // to reduce file size and speed up Excel load time\n const dvList = _.map(model, (dataValidation, address) => ({\n address,\n dataValidation,\n marked: false,\n })).sort((a, b) => _.strcmp(a.address, b.address));\n const dvMap = _.keyBy(dvList, 'address');\n const matchCol = (addr, height, col) => {\n for (let i = 0; i < height; i++) {\n const otherAddress = colCache.encodeAddress(addr.row + i, col);\n if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) {\n return false;\n }\n }\n return true;\n };\n return dvList\n .map(dv => {\n if (!dv.marked) {\n const addr = colCache.decodeEx(dv.address);\n if (addr.dimensions) {\n dvMap[addr.dimensions].marked = true;\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n\n // iterate downwards - finding matching cells\n let height = 1;\n let otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) {\n height++;\n otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n }\n\n // iterate rightwards...\n\n let width = 1;\n while (matchCol(addr, height, addr.col + width)) {\n width++;\n }\n\n // mark all included addresses\n for (let i = 0; i < height; i++) {\n for (let j = 0; j < width; j++) {\n otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j);\n dvMap[otherAddress].marked = true;\n }\n }\n\n if (height > 1 || width > 1) {\n const bottom = addr.row + (height - 1);\n const right = addr.col + (width - 1);\n return {\n ...dv.dataValidation,\n sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}`,\n };\n }\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nclass DataValidationsXform extends BaseXform {\n get tag() {\n return 'dataValidations';\n }\n\n render(xmlStream, model) {\n const optimizedModel = optimiseDataValidations(model);\n if (optimizedModel.length) {\n xmlStream.openNode('dataValidations', {count: optimizedModel.length});\n\n optimizedModel.forEach(value => {\n xmlStream.openNode('dataValidation');\n\n if (value.type !== 'any') {\n xmlStream.addAttribute('type', value.type);\n\n if (value.operator && value.type !== 'list' && value.operator !== 'between') {\n xmlStream.addAttribute('operator', value.operator);\n }\n if (value.allowBlank) {\n xmlStream.addAttribute('allowBlank', '1');\n }\n }\n if (value.showInputMessage) {\n xmlStream.addAttribute('showInputMessage', '1');\n }\n if (value.promptTitle) {\n xmlStream.addAttribute('promptTitle', value.promptTitle);\n }\n if (value.prompt) {\n xmlStream.addAttribute('prompt', value.prompt);\n }\n if (value.showErrorMessage) {\n xmlStream.addAttribute('showErrorMessage', '1');\n }\n if (value.errorStyle) {\n xmlStream.addAttribute('errorStyle', value.errorStyle);\n }\n if (value.errorTitle) {\n xmlStream.addAttribute('errorTitle', value.errorTitle);\n }\n if (value.error) {\n xmlStream.addAttribute('error', value.error);\n }\n xmlStream.addAttribute('sqref', value.sqref);\n (value.formulae || []).forEach((formula, index) => {\n xmlStream.openNode(`formula${index + 1}`);\n if (value.type === 'date') {\n xmlStream.writeText(utils.dateToExcel(new Date(formula)));\n } else {\n xmlStream.writeText(formula);\n }\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'dataValidations':\n this.model = {};\n return true;\n\n case 'dataValidation': {\n this._address = node.attributes.sqref;\n const dataValidation = {type: node.attributes.type || 'any', formulae: []};\n\n if (node.attributes.type) {\n assignBool(dataValidation, node.attributes, 'allowBlank');\n }\n assignBool(dataValidation, node.attributes, 'showInputMessage');\n assignBool(dataValidation, node.attributes, 'showErrorMessage');\n\n switch (dataValidation.type) {\n case 'any':\n case 'list':\n case 'custom':\n break;\n default:\n assign(dataValidation, node.attributes, 'operator', 'between');\n break;\n }\n assign(dataValidation, node.attributes, 'promptTitle');\n assign(dataValidation, node.attributes, 'prompt');\n assign(dataValidation, node.attributes, 'errorStyle');\n assign(dataValidation, node.attributes, 'errorTitle');\n assign(dataValidation, node.attributes, 'error');\n\n this._dataValidation = dataValidation;\n return true;\n }\n\n case 'formula1':\n case 'formula2':\n this._formula = [];\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this._formula) {\n this._formula.push(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'dataValidations':\n return false;\n case 'dataValidation': {\n if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) {\n delete this._dataValidation.formulae;\n delete this._dataValidation.operator;\n }\n // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4\n const list = this._address.split(/\\s+/g) || [];\n list.forEach(addr => {\n if (addr.includes(':')) {\n const range = new Range(addr);\n range.forEachAddress(address => {\n this.model[address] = this._dataValidation;\n });\n } else {\n this.model[addr] = this._dataValidation;\n }\n });\n return true;\n }\n case 'formula1':\n case 'formula2': {\n let formula = this._formula.join('');\n switch (this._dataValidation.type) {\n case 'whole':\n case 'textLength':\n formula = parseInt(formula, 10);\n break;\n case 'decimal':\n formula = parseFloat(formula);\n break;\n case 'date':\n formula = utils.excelToDate(parseFloat(formula));\n break;\n default:\n break;\n }\n this._dataValidation.formulae.push(formula);\n this._formula = undefined;\n return true;\n }\n default:\n return true;\n }\n }\n}\n\nmodule.exports = DataValidationsXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..667a3f991c13c67a388dd934af62378f892e3a6e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js @@ -0,0 +1,28 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class DimensionXform extends BaseXform { + get tag() { + return 'dimension'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode('dimension', { + ref: model + }); + } + } + parseOpen(node) { + if (node.name === 'dimension') { + this.model = node.attributes.ref; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = DimensionXform; +//# sourceMappingURL=dimension-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..8612d3046d677113096dc3106855451057d7d13f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dimension-xform.js","names":["BaseXform","require","DimensionXform","tag","render","xmlStream","model","leafNode","ref","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/dimension-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass DimensionXform extends BaseXform {\n get tag() {\n return 'dimension';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode('dimension', {ref: model});\n }\n }\n\n parseOpen(node) {\n if (node.name === 'dimension') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = DimensionXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,cAAc,SAASF,SAAS,CAAC;EACrC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACTD,SAAS,CAACE,QAAQ,CAAC,WAAW,EAAE;QAACC,GAAG,EAAEF;MAAK,CAAC,CAAC;IAC/C;EACF;EAEAG,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAI,CAACL,KAAK,GAAGI,IAAI,CAACE,UAAU,CAACJ,GAAG;MAChC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAK,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGd,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..36a3f30d8452a2d9bf6aa817c850000107b1656c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js @@ -0,0 +1,32 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class DrawingXform extends BaseXform { + get tag() { + return 'drawing'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode(this.tag, { + 'r:id': model.rId + }); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:id'] + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = DrawingXform; +//# sourceMappingURL=drawing-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..60f210cf814a894741fde6b137e86caedcb53f7a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"drawing-xform.js","names":["BaseXform","require","DrawingXform","tag","render","xmlStream","model","leafNode","rId","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/drawing-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass DrawingXform extends BaseXform {\n get tag() {\n return 'drawing';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = DrawingXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,YAAY,SAASF,SAAS,CAAC;EACnC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACTD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;QAAC,MAAM,EAAEG,KAAK,CAACE;MAAG,CAAC,CAAC;IACnD;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACR,GAAG;QACX,IAAI,CAACG,KAAK,GAAG;UACXE,GAAG,EAAEE,IAAI,CAACE,UAAU,CAAC,MAAM;QAC7B,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGd,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..2025044414852626cd6e35b03d2d713f03a3e2f4 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js @@ -0,0 +1,69 @@ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const CompositeXform = require('../composite-xform'); +const ConditionalFormattingsExt = require('./cf-ext/conditional-formattings-ext-xform'); +class ExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:conditionalFormattings': this.conditionalFormattings = new ConditionalFormattingsExt() + }; + } + get tag() { + return 'ext'; + } + hasContent(model) { + return this.conditionalFormattings.hasContent(model.conditionalFormattings); + } + prepare(model, options) { + this.conditionalFormattings.prepare(model.conditionalFormattings, options); + } + render(xmlStream, model) { + xmlStream.openNode('ext', { + uri: '{78C0D931-6437-407d-A8EE-F0AAD7539E65}', + 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main' + }); + this.conditionalFormattings.render(xmlStream, model.conditionalFormattings); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + this.model[name] = parser.model; + } +} +class ExtLstXform extends CompositeXform { + constructor() { + super(); + this.map = { + ext: this.ext = new ExtXform() + }; + } + get tag() { + return 'extLst'; + } + prepare(model, options) { + this.ext.prepare(model, options); + } + hasContent(model) { + return this.ext.hasContent(model); + } + render(xmlStream, model) { + if (!this.hasContent(model)) { + return; + } + xmlStream.openNode('extLst'); + this.ext.render(xmlStream, model); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + Object.assign(this.model, parser.model); + } +} +module.exports = ExtLstXform; +//# sourceMappingURL=ext-lst-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..c5c7c1363df3d83e915dfd460c24414a3a75dfe7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ext-lst-xform.js","names":["CompositeXform","require","ConditionalFormattingsExt","ExtXform","constructor","map","conditionalFormattings","tag","hasContent","model","prepare","options","render","xmlStream","openNode","uri","closeNode","createNewModel","onParserClose","name","parser","ExtLstXform","ext","Object","assign","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/ext-lst-xform.js"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nconst CompositeXform = require('../composite-xform');\n\nconst ConditionalFormattingsExt = require('./cf-ext/conditional-formattings-ext-xform');\n\nclass ExtXform extends CompositeXform {\n constructor() {\n super();\n this.map = {\n 'x14:conditionalFormattings': (this.conditionalFormattings = new ConditionalFormattingsExt()),\n };\n }\n\n get tag() {\n return 'ext';\n }\n\n hasContent(model) {\n return this.conditionalFormattings.hasContent(model.conditionalFormattings);\n }\n\n prepare(model, options) {\n this.conditionalFormattings.prepare(model.conditionalFormattings, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('ext', {\n uri: '{78C0D931-6437-407d-A8EE-F0AAD7539E65}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n });\n\n this.conditionalFormattings.render(xmlStream, model.conditionalFormattings);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n this.model[name] = parser.model;\n }\n}\n\nclass ExtLstXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n ext: (this.ext = new ExtXform()),\n };\n }\n\n get tag() {\n return 'extLst';\n }\n\n prepare(model, options) {\n this.ext.prepare(model, options);\n }\n\n hasContent(model) {\n return this.ext.hasContent(model);\n }\n\n render(xmlStream, model) {\n if (!this.hasContent(model)) {\n return;\n }\n\n xmlStream.openNode('extLst');\n this.ext.render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = ExtLstXform;\n"],"mappings":";;AAAA;AACA,MAAMA,cAAc,GAAGC,OAAO,CAAC,oBAAoB,CAAC;AAEpD,MAAMC,yBAAyB,GAAGD,OAAO,CAAC,4CAA4C,CAAC;AAEvF,MAAME,QAAQ,SAASH,cAAc,CAAC;EACpCI,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,GAAG,GAAG;MACT,4BAA4B,EAAG,IAAI,CAACC,sBAAsB,GAAG,IAAIJ,yBAAyB,CAAC;IAC7F,CAAC;EACH;EAEA,IAAIK,GAAGA,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEAC,UAAUA,CAACC,KAAK,EAAE;IAChB,OAAO,IAAI,CAACH,sBAAsB,CAACE,UAAU,CAACC,KAAK,CAACH,sBAAsB,CAAC;EAC7E;EAEAI,OAAOA,CAACD,KAAK,EAAEE,OAAO,EAAE;IACtB,IAAI,CAACL,sBAAsB,CAACI,OAAO,CAACD,KAAK,CAACH,sBAAsB,EAAEK,OAAO,CAAC;EAC5E;EAEAC,MAAMA,CAACC,SAAS,EAAEJ,KAAK,EAAE;IACvBI,SAAS,CAACC,QAAQ,CAAC,KAAK,EAAE;MACxBC,GAAG,EAAE,wCAAwC;MAC7C,WAAW,EAAE;IACf,CAAC,CAAC;IAEF,IAAI,CAACT,sBAAsB,CAACM,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAACH,sBAAsB,CAAC;IAE3EO,SAAS,CAACG,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAAA,EAAG;IACf,OAAO,CAAC,CAAC;EACX;EAEAC,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1B,IAAI,CAACX,KAAK,CAACU,IAAI,CAAC,GAAGC,MAAM,CAACX,KAAK;EACjC;AACF;AAEA,MAAMY,WAAW,SAASrB,cAAc,CAAC;EACvCI,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACTiB,GAAG,EAAG,IAAI,CAACA,GAAG,GAAG,IAAInB,QAAQ,CAAC;IAChC,CAAC;EACH;EAEA,IAAII,GAAGA,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEAG,OAAOA,CAACD,KAAK,EAAEE,OAAO,EAAE;IACtB,IAAI,CAACW,GAAG,CAACZ,OAAO,CAACD,KAAK,EAAEE,OAAO,CAAC;EAClC;EAEAH,UAAUA,CAACC,KAAK,EAAE;IAChB,OAAO,IAAI,CAACa,GAAG,CAACd,UAAU,CAACC,KAAK,CAAC;EACnC;EAEAG,MAAMA,CAACC,SAAS,EAAEJ,KAAK,EAAE;IACvB,IAAI,CAAC,IAAI,CAACD,UAAU,CAACC,KAAK,CAAC,EAAE;MAC3B;IACF;IAEAI,SAAS,CAACC,QAAQ,CAAC,QAAQ,CAAC;IAC5B,IAAI,CAACQ,GAAG,CAACV,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAAC;IACjCI,SAAS,CAACG,SAAS,CAAC,CAAC;EACvB;EAEAC,cAAcA,CAAA,EAAG;IACf,OAAO,CAAC,CAAC;EACX;EAEAC,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1BG,MAAM,CAACC,MAAM,CAAC,IAAI,CAACf,KAAK,EAAEW,MAAM,CAACX,KAAK,CAAC;EACzC;AACF;AAEAgB,MAAM,CAACC,OAAO,GAAGL,WAAW"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..2ac3ed1a849628cda9f968658c376e8faebdd103 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js @@ -0,0 +1,126 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class HeaderFooterXform extends BaseXform { + get tag() { + return 'headerFooter'; + } + render(xmlStream, model) { + if (model) { + xmlStream.addRollback(); + let createTag = false; + xmlStream.openNode('headerFooter'); + if (model.differentFirst) { + xmlStream.addAttribute('differentFirst', '1'); + createTag = true; + } + if (model.differentOddEven) { + xmlStream.addAttribute('differentOddEven', '1'); + createTag = true; + } + if (model.oddHeader && typeof model.oddHeader === 'string') { + xmlStream.leafNode('oddHeader', null, model.oddHeader); + createTag = true; + } + if (model.oddFooter && typeof model.oddFooter === 'string') { + xmlStream.leafNode('oddFooter', null, model.oddFooter); + createTag = true; + } + if (model.evenHeader && typeof model.evenHeader === 'string') { + xmlStream.leafNode('evenHeader', null, model.evenHeader); + createTag = true; + } + if (model.evenFooter && typeof model.evenFooter === 'string') { + xmlStream.leafNode('evenFooter', null, model.evenFooter); + createTag = true; + } + if (model.firstHeader && typeof model.firstHeader === 'string') { + xmlStream.leafNode('firstHeader', null, model.firstHeader); + createTag = true; + } + if (model.firstFooter && typeof model.firstFooter === 'string') { + xmlStream.leafNode('firstFooter', null, model.firstFooter); + createTag = true; + } + if (createTag) { + xmlStream.closeNode(); + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + } + parseOpen(node) { + switch (node.name) { + case 'headerFooter': + this.model = {}; + if (node.attributes.differentFirst) { + this.model.differentFirst = parseInt(node.attributes.differentFirst, 0) === 1; + } + if (node.attributes.differentOddEven) { + this.model.differentOddEven = parseInt(node.attributes.differentOddEven, 0) === 1; + } + return true; + case 'oddHeader': + this.currentNode = 'oddHeader'; + return true; + case 'oddFooter': + this.currentNode = 'oddFooter'; + return true; + case 'evenHeader': + this.currentNode = 'evenHeader'; + return true; + case 'evenFooter': + this.currentNode = 'evenFooter'; + return true; + case 'firstHeader': + this.currentNode = 'firstHeader'; + return true; + case 'firstFooter': + this.currentNode = 'firstFooter'; + return true; + default: + return false; + } + } + parseText(text) { + switch (this.currentNode) { + case 'oddHeader': + this.model.oddHeader = text; + break; + case 'oddFooter': + this.model.oddFooter = text; + break; + case 'evenHeader': + this.model.evenHeader = text; + break; + case 'evenFooter': + this.model.evenFooter = text; + break; + case 'firstHeader': + this.model.firstHeader = text; + break; + case 'firstFooter': + this.model.firstFooter = text; + break; + default: + break; + } + } + parseClose() { + switch (this.currentNode) { + case 'oddHeader': + case 'oddFooter': + case 'evenHeader': + case 'evenFooter': + case 'firstHeader': + case 'firstFooter': + this.currentNode = undefined; + return true; + default: + return false; + } + } +} +module.exports = HeaderFooterXform; +//# sourceMappingURL=header-footer-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..51a1ad26d7f2d0f49361e165547e3c6b0b30f3ef --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"header-footer-xform.js","names":["BaseXform","require","HeaderFooterXform","tag","render","xmlStream","model","addRollback","createTag","openNode","differentFirst","addAttribute","differentOddEven","oddHeader","leafNode","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","closeNode","commit","rollback","parseOpen","node","name","attributes","parseInt","currentNode","parseText","text","parseClose","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/header-footer-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass HeaderFooterXform extends BaseXform {\n get tag() {\n return 'headerFooter';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.addRollback();\n\n let createTag = false;\n\n xmlStream.openNode('headerFooter');\n if (model.differentFirst) {\n xmlStream.addAttribute('differentFirst', '1');\n createTag = true;\n }\n if (model.differentOddEven) {\n xmlStream.addAttribute('differentOddEven', '1');\n createTag = true;\n }\n if (model.oddHeader && typeof model.oddHeader === 'string') {\n xmlStream.leafNode('oddHeader', null, model.oddHeader);\n createTag = true;\n }\n if (model.oddFooter && typeof model.oddFooter === 'string') {\n xmlStream.leafNode('oddFooter', null, model.oddFooter);\n createTag = true;\n }\n if (model.evenHeader && typeof model.evenHeader === 'string') {\n xmlStream.leafNode('evenHeader', null, model.evenHeader);\n createTag = true;\n }\n if (model.evenFooter && typeof model.evenFooter === 'string') {\n xmlStream.leafNode('evenFooter', null, model.evenFooter);\n createTag = true;\n }\n if (model.firstHeader && typeof model.firstHeader === 'string') {\n xmlStream.leafNode('firstHeader', null, model.firstHeader);\n createTag = true;\n }\n if (model.firstFooter && typeof model.firstFooter === 'string') {\n xmlStream.leafNode('firstFooter', null, model.firstFooter);\n createTag = true;\n }\n\n if (createTag) {\n xmlStream.closeNode();\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'headerFooter':\n this.model = {};\n if (node.attributes.differentFirst) {\n this.model.differentFirst = parseInt(node.attributes.differentFirst, 0) === 1;\n }\n if (node.attributes.differentOddEven) {\n this.model.differentOddEven = parseInt(node.attributes.differentOddEven, 0) === 1;\n }\n return true;\n\n case 'oddHeader':\n this.currentNode = 'oddHeader';\n return true;\n\n case 'oddFooter':\n this.currentNode = 'oddFooter';\n return true;\n\n case 'evenHeader':\n this.currentNode = 'evenHeader';\n return true;\n\n case 'evenFooter':\n this.currentNode = 'evenFooter';\n return true;\n\n case 'firstHeader':\n this.currentNode = 'firstHeader';\n return true;\n\n case 'firstFooter':\n this.currentNode = 'firstFooter';\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n switch (this.currentNode) {\n case 'oddHeader':\n this.model.oddHeader = text;\n break;\n\n case 'oddFooter':\n this.model.oddFooter = text;\n break;\n\n case 'evenHeader':\n this.model.evenHeader = text;\n break;\n\n case 'evenFooter':\n this.model.evenFooter = text;\n break;\n\n case 'firstHeader':\n this.model.firstHeader = text;\n break;\n\n case 'firstFooter':\n this.model.firstFooter = text;\n break;\n\n default:\n break;\n }\n }\n\n parseClose() {\n switch (this.currentNode) {\n case 'oddHeader':\n case 'oddFooter':\n case 'evenHeader':\n case 'evenFooter':\n case 'firstHeader':\n case 'firstFooter':\n this.currentNode = undefined;\n return true;\n\n default:\n return false;\n }\n }\n}\n\nmodule.exports = HeaderFooterXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..0335644998d34c2c8a32d04d78592f1940c4d8e0 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js @@ -0,0 +1,50 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class HyperlinkXform extends BaseXform { + get tag() { + return 'hyperlink'; + } + render(xmlStream, model) { + if (this.isInternalLink(model)) { + xmlStream.leafNode('hyperlink', { + ref: model.address, + 'r:id': model.rId, + tooltip: model.tooltip, + location: model.target + }); + } else { + xmlStream.leafNode('hyperlink', { + ref: model.address, + 'r:id': model.rId, + tooltip: model.tooltip + }); + } + } + parseOpen(node) { + if (node.name === 'hyperlink') { + this.model = { + address: node.attributes.ref, + rId: node.attributes['r:id'], + tooltip: node.attributes.tooltip + }; + + // This is an internal link + if (node.attributes.location) { + this.model.target = node.attributes.location; + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } + isInternalLink(model) { + // @example: Sheet2!D3, return true + return model.target && /^[^!]+![a-zA-Z]+[\d]+$/.test(model.target); + } +} +module.exports = HyperlinkXform; +//# sourceMappingURL=hyperlink-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6d8defdc5417b83e0d1509505d22a8f803633b0c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"hyperlink-xform.js","names":["BaseXform","require","HyperlinkXform","tag","render","xmlStream","model","isInternalLink","leafNode","ref","address","rId","tooltip","location","target","parseOpen","node","name","attributes","parseText","parseClose","test","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/hyperlink-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass HyperlinkXform extends BaseXform {\n get tag() {\n return 'hyperlink';\n }\n\n render(xmlStream, model) {\n if (this.isInternalLink(model)) {\n xmlStream.leafNode('hyperlink', {\n ref: model.address,\n 'r:id': model.rId,\n tooltip: model.tooltip,\n location: model.target,\n });\n } else {\n xmlStream.leafNode('hyperlink', {\n ref: model.address,\n 'r:id': model.rId,\n tooltip: model.tooltip,\n });\n }\n }\n\n parseOpen(node) {\n if (node.name === 'hyperlink') {\n this.model = {\n address: node.attributes.ref,\n rId: node.attributes['r:id'],\n tooltip: node.attributes.tooltip,\n };\n\n // This is an internal link\n if (node.attributes.location) {\n this.model.target = node.attributes.location;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n\n isInternalLink(model) {\n // @example: Sheet2!D3, return true\n return model.target && /^[^!]+![a-zA-Z]+[\\d]+$/.test(model.target);\n }\n}\n\nmodule.exports = HyperlinkXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,cAAc,SAASF,SAAS,CAAC;EACrC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAI,IAAI,CAACC,cAAc,CAACD,KAAK,CAAC,EAAE;MAC9BD,SAAS,CAACG,QAAQ,CAAC,WAAW,EAAE;QAC9BC,GAAG,EAAEH,KAAK,CAACI,OAAO;QAClB,MAAM,EAAEJ,KAAK,CAACK,GAAG;QACjBC,OAAO,EAAEN,KAAK,CAACM,OAAO;QACtBC,QAAQ,EAAEP,KAAK,CAACQ;MAClB,CAAC,CAAC;IACJ,CAAC,MAAM;MACLT,SAAS,CAACG,QAAQ,CAAC,WAAW,EAAE;QAC9BC,GAAG,EAAEH,KAAK,CAACI,OAAO;QAClB,MAAM,EAAEJ,KAAK,CAACK,GAAG;QACjBC,OAAO,EAAEN,KAAK,CAACM;MACjB,CAAC,CAAC;IACJ;EACF;EAEAG,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAI,CAACX,KAAK,GAAG;QACXI,OAAO,EAAEM,IAAI,CAACE,UAAU,CAACT,GAAG;QAC5BE,GAAG,EAAEK,IAAI,CAACE,UAAU,CAAC,MAAM,CAAC;QAC5BN,OAAO,EAAEI,IAAI,CAACE,UAAU,CAACN;MAC3B,CAAC;;MAED;MACA,IAAII,IAAI,CAACE,UAAU,CAACL,QAAQ,EAAE;QAC5B,IAAI,CAACP,KAAK,CAACQ,MAAM,GAAGE,IAAI,CAACE,UAAU,CAACL,QAAQ;MAC9C;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAM,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;EAEAb,cAAcA,CAACD,KAAK,EAAE;IACpB;IACA,OAAOA,KAAK,CAACQ,MAAM,IAAI,wBAAwB,CAACO,IAAI,CAACf,KAAK,CAACQ,MAAM,CAAC;EACpE;AACF;AAEAQ,MAAM,CAACC,OAAO,GAAGrB,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..5e6dbef9a45ca43deb091f34bbd97a0a0677fd2b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js @@ -0,0 +1,26 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class MergeCellXform extends BaseXform { + get tag() { + return 'mergeCell'; + } + render(xmlStream, model) { + xmlStream.leafNode('mergeCell', { + ref: model + }); + } + parseOpen(node) { + if (node.name === 'mergeCell') { + this.model = node.attributes.ref; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = MergeCellXform; +//# sourceMappingURL=merge-cell-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3783efff2a3b6df9cf59f3576edf1eee77eac788 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"merge-cell-xform.js","names":["BaseXform","require","MergeCellXform","tag","render","xmlStream","model","leafNode","ref","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/merge-cell-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass MergeCellXform extends BaseXform {\n get tag() {\n return 'mergeCell';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('mergeCell', {ref: model});\n }\n\n parseOpen(node) {\n if (node.name === 'mergeCell') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = MergeCellXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,cAAc,SAASF,SAAS,CAAC;EACrC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,WAAW,EAAE;MAACC,GAAG,EAAEF;IAAK,CAAC,CAAC;EAC/C;EAEAG,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAI,CAACL,KAAK,GAAGI,IAAI,CAACE,UAAU,CAACJ,GAAG;MAChC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAK,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGd,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js new file mode 100644 index 0000000000000000000000000000000000000000..29c2e6f0553e4459d62f9e0cf2f1d25ce5512123 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js @@ -0,0 +1,52 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const Range = require('../../../doc/range'); +const colCache = require('../../../utils/col-cache'); +const Enums = require('../../../doc/enums'); +class Merges { + constructor() { + // optional mergeCells is array of ranges (like the xml) + this.merges = {}; + } + add(merge) { + // merge is {address, master} + if (this.merges[merge.master]) { + this.merges[merge.master].expandToAddress(merge.address); + } else { + const range = `${merge.master}:${merge.address}`; + this.merges[merge.master] = new Range(range); + } + } + get mergeCells() { + return _.map(this.merges, merge => merge.range); + } + reconcile(mergeCells, rows) { + // reconcile merge list with merge cells + _.each(mergeCells, merge => { + const dimensions = colCache.decode(merge); + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + const row = rows[i - 1]; + for (let j = dimensions.left; j <= dimensions.right; j++) { + const cell = row.cells[j - 1]; + if (!cell) { + // nulls are not included in document - so if master cell has no value - add a null one here + row.cells[j] = { + type: Enums.ValueType.Null, + address: colCache.encodeAddress(i, j) + }; + } else if (cell.type === Enums.ValueType.Merge) { + cell.master = dimensions.tl; + } + } + } + }); + } + getMasterAddress(address) { + // if address has been merged, return its master's address. Assumes reconcile has been called + const range = this.hash[address]; + return range && range.tl; + } +} +module.exports = Merges; +//# sourceMappingURL=merges.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e1ce891a3348ac6a95b049e5e76b7a8320344d80 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js.map @@ -0,0 +1 @@ +{"version":3,"file":"merges.js","names":["_","require","Range","colCache","Enums","Merges","constructor","merges","add","merge","master","expandToAddress","address","range","mergeCells","map","reconcile","rows","each","dimensions","decode","i","top","bottom","row","j","left","right","cell","cells","type","ValueType","Null","encodeAddress","Merge","tl","getMasterAddress","hash","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/merges.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\n\nconst Range = require('../../../doc/range');\nconst colCache = require('../../../utils/col-cache');\nconst Enums = require('../../../doc/enums');\n\nclass Merges {\n constructor() {\n // optional mergeCells is array of ranges (like the xml)\n this.merges = {};\n }\n\n add(merge) {\n // merge is {address, master}\n if (this.merges[merge.master]) {\n this.merges[merge.master].expandToAddress(merge.address);\n } else {\n const range = `${merge.master}:${merge.address}`;\n this.merges[merge.master] = new Range(range);\n }\n }\n\n get mergeCells() {\n return _.map(this.merges, merge => merge.range);\n }\n\n reconcile(mergeCells, rows) {\n // reconcile merge list with merge cells\n _.each(mergeCells, merge => {\n const dimensions = colCache.decode(merge);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n const row = rows[i - 1];\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = row.cells[j - 1];\n if (!cell) {\n // nulls are not included in document - so if master cell has no value - add a null one here\n row.cells[j] = {\n type: Enums.ValueType.Null,\n address: colCache.encodeAddress(i, j),\n };\n } else if (cell.type === Enums.ValueType.Merge) {\n cell.master = dimensions.tl;\n }\n }\n }\n });\n }\n\n getMasterAddress(address) {\n // if address has been merged, return its master's address. Assumes reconcile has been called\n const range = this.hash[address];\n return range && range.tl;\n }\n}\n\nmodule.exports = Merges;\n"],"mappings":";;AAAA,MAAMA,CAAC,GAAGC,OAAO,CAAC,2BAA2B,CAAC;AAE9C,MAAMC,KAAK,GAAGD,OAAO,CAAC,oBAAoB,CAAC;AAC3C,MAAME,QAAQ,GAAGF,OAAO,CAAC,0BAA0B,CAAC;AACpD,MAAMG,KAAK,GAAGH,OAAO,CAAC,oBAAoB,CAAC;AAE3C,MAAMI,MAAM,CAAC;EACXC,WAAWA,CAAA,EAAG;IACZ;IACA,IAAI,CAACC,MAAM,GAAG,CAAC,CAAC;EAClB;EAEAC,GAAGA,CAACC,KAAK,EAAE;IACT;IACA,IAAI,IAAI,CAACF,MAAM,CAACE,KAAK,CAACC,MAAM,CAAC,EAAE;MAC7B,IAAI,CAACH,MAAM,CAACE,KAAK,CAACC,MAAM,CAAC,CAACC,eAAe,CAACF,KAAK,CAACG,OAAO,CAAC;IAC1D,CAAC,MAAM;MACL,MAAMC,KAAK,GAAI,GAAEJ,KAAK,CAACC,MAAO,IAAGD,KAAK,CAACG,OAAQ,EAAC;MAChD,IAAI,CAACL,MAAM,CAACE,KAAK,CAACC,MAAM,CAAC,GAAG,IAAIR,KAAK,CAACW,KAAK,CAAC;IAC9C;EACF;EAEA,IAAIC,UAAUA,CAAA,EAAG;IACf,OAAOd,CAAC,CAACe,GAAG,CAAC,IAAI,CAACR,MAAM,EAAEE,KAAK,IAAIA,KAAK,CAACI,KAAK,CAAC;EACjD;EAEAG,SAASA,CAACF,UAAU,EAAEG,IAAI,EAAE;IAC1B;IACAjB,CAAC,CAACkB,IAAI,CAACJ,UAAU,EAAEL,KAAK,IAAI;MAC1B,MAAMU,UAAU,GAAGhB,QAAQ,CAACiB,MAAM,CAACX,KAAK,CAAC;MACzC,KAAK,IAAIY,CAAC,GAAGF,UAAU,CAACG,GAAG,EAAED,CAAC,IAAIF,UAAU,CAACI,MAAM,EAAEF,CAAC,EAAE,EAAE;QACxD,MAAMG,GAAG,GAAGP,IAAI,CAACI,CAAC,GAAG,CAAC,CAAC;QACvB,KAAK,IAAII,CAAC,GAAGN,UAAU,CAACO,IAAI,EAAED,CAAC,IAAIN,UAAU,CAACQ,KAAK,EAAEF,CAAC,EAAE,EAAE;UACxD,MAAMG,IAAI,GAAGJ,GAAG,CAACK,KAAK,CAACJ,CAAC,GAAG,CAAC,CAAC;UAC7B,IAAI,CAACG,IAAI,EAAE;YACT;YACAJ,GAAG,CAACK,KAAK,CAACJ,CAAC,CAAC,GAAG;cACbK,IAAI,EAAE1B,KAAK,CAAC2B,SAAS,CAACC,IAAI;cAC1BpB,OAAO,EAAET,QAAQ,CAAC8B,aAAa,CAACZ,CAAC,EAAEI,CAAC;YACtC,CAAC;UACH,CAAC,MAAM,IAAIG,IAAI,CAACE,IAAI,KAAK1B,KAAK,CAAC2B,SAAS,CAACG,KAAK,EAAE;YAC9CN,IAAI,CAAClB,MAAM,GAAGS,UAAU,CAACgB,EAAE;UAC7B;QACF;MACF;IACF,CAAC,CAAC;EACJ;EAEAC,gBAAgBA,CAACxB,OAAO,EAAE;IACxB;IACA,MAAMC,KAAK,GAAG,IAAI,CAACwB,IAAI,CAACzB,OAAO,CAAC;IAChC,OAAOC,KAAK,IAAIA,KAAK,CAACsB,EAAE;EAC1B;AACF;AAEAG,MAAM,CAACC,OAAO,GAAGlC,MAAM"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..af932100a1cc84cb8e927cb1d772a52afc4e3987 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js @@ -0,0 +1,35 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const isDefined = attr => typeof attr !== 'undefined'; +class OutlinePropertiesXform extends BaseXform { + get tag() { + return 'outlinePr'; + } + render(xmlStream, model) { + if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) { + xmlStream.leafNode(this.tag, { + summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined, + summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined + }); + return true; + } + return false; + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + summaryBelow: isDefined(node.attributes.summaryBelow) ? Boolean(Number(node.attributes.summaryBelow)) : undefined, + summaryRight: isDefined(node.attributes.summaryRight) ? Boolean(Number(node.attributes.summaryRight)) : undefined + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = OutlinePropertiesXform; +//# sourceMappingURL=outline-properties-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..cf7caba2def6588348ef993b43607684fc4b2d6f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"outline-properties-xform.js","names":["BaseXform","require","isDefined","attr","OutlinePropertiesXform","tag","render","xmlStream","model","summaryBelow","summaryRight","leafNode","Number","undefined","parseOpen","node","name","attributes","Boolean","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/outline-properties-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nconst isDefined = attr => typeof attr !== 'undefined';\n\nclass OutlinePropertiesXform extends BaseXform {\n get tag() {\n return 'outlinePr';\n }\n\n render(xmlStream, model) {\n if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) {\n xmlStream.leafNode(this.tag, {\n summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined,\n summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined,\n });\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n summaryBelow: isDefined(node.attributes.summaryBelow)\n ? Boolean(Number(node.attributes.summaryBelow))\n : undefined,\n summaryRight: isDefined(node.attributes.summaryRight)\n ? Boolean(Number(node.attributes.summaryRight))\n : undefined,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = OutlinePropertiesXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,SAAS,GAAGC,IAAI,IAAI,OAAOA,IAAI,KAAK,WAAW;AAErD,MAAMC,sBAAsB,SAASJ,SAAS,CAAC;EAC7C,IAAIK,GAAGA,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,KAAKN,SAAS,CAACM,KAAK,CAACC,YAAY,CAAC,IAAIP,SAAS,CAACM,KAAK,CAACE,YAAY,CAAC,CAAC,EAAE;MAC7EH,SAAS,CAACI,QAAQ,CAAC,IAAI,CAACN,GAAG,EAAE;QAC3BI,YAAY,EAAEP,SAAS,CAACM,KAAK,CAACC,YAAY,CAAC,GAAGG,MAAM,CAACJ,KAAK,CAACC,YAAY,CAAC,GAAGI,SAAS;QACpFH,YAAY,EAAER,SAAS,CAACM,KAAK,CAACE,YAAY,CAAC,GAAGE,MAAM,CAACJ,KAAK,CAACE,YAAY,CAAC,GAAGG;MAC7E,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACX,GAAG,EAAE;MAC1B,IAAI,CAACG,KAAK,GAAG;QACXC,YAAY,EAAEP,SAAS,CAACa,IAAI,CAACE,UAAU,CAACR,YAAY,CAAC,GACjDS,OAAO,CAACN,MAAM,CAACG,IAAI,CAACE,UAAU,CAACR,YAAY,CAAC,CAAC,GAC7CI,SAAS;QACbH,YAAY,EAAER,SAAS,CAACa,IAAI,CAACE,UAAU,CAACP,YAAY,CAAC,GACjDQ,OAAO,CAACN,MAAM,CAACG,IAAI,CAACE,UAAU,CAACP,YAAY,CAAC,CAAC,GAC7CG;MACN,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAM,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGlB,sBAAsB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..bb43f1cd1384147dae15298f480b58aedeb7a204 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js @@ -0,0 +1,24 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class PageBreaksXform extends BaseXform { + get tag() { + return 'brk'; + } + render(xmlStream, model) { + xmlStream.leafNode('brk', model); + } + parseOpen(node) { + if (node.name === 'brk') { + this.model = node.attributes.ref; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageBreaksXform; +//# sourceMappingURL=page-breaks-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3e9e9578e7dd141134d1dd86bb1b9f6360b1d61c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"page-breaks-xform.js","names":["BaseXform","require","PageBreaksXform","tag","render","xmlStream","model","leafNode","parseOpen","node","name","attributes","ref","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/page-breaks-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass PageBreaksXform extends BaseXform {\n get tag() {\n return 'brk';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('brk', model);\n }\n\n parseOpen(node) {\n if (node.name === 'brk') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageBreaksXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,eAAe,SAASF,SAAS,CAAC;EACtC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,KAAK,EAAED,KAAK,CAAC;EAClC;EAEAE,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,KAAK,EAAE;MACvB,IAAI,CAACJ,KAAK,GAAGG,IAAI,CAACE,UAAU,CAACC,GAAG;MAChC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGd,eAAe"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..fe2dddb91a49d9d36ef3fd3e4ba32a11afbbe25f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js @@ -0,0 +1,46 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +class PageMarginsXform extends BaseXform { + get tag() { + return 'pageMargins'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + left: model.left, + right: model.right, + top: model.top, + bottom: model.bottom, + header: model.header, + footer: model.footer + }; + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + left: parseFloat(node.attributes.left || 0.7), + right: parseFloat(node.attributes.right || 0.7), + top: parseFloat(node.attributes.top || 0.75), + bottom: parseFloat(node.attributes.bottom || 0.75), + header: parseFloat(node.attributes.header || 0.3), + footer: parseFloat(node.attributes.footer || 0.3) + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageMarginsXform; +//# sourceMappingURL=page-margins-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..fca3c13ea05c9962bf05054e55e36c12447683f4 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"page-margins-xform.js","names":["_","require","BaseXform","PageMarginsXform","tag","render","xmlStream","model","attributes","left","right","top","bottom","header","footer","some","value","undefined","leafNode","parseOpen","node","name","parseFloat","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/page-margins-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nclass PageMarginsXform extends BaseXform {\n get tag() {\n return 'pageMargins';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n left: model.left,\n right: model.right,\n top: model.top,\n bottom: model.bottom,\n header: model.header,\n footer: model.footer,\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n left: parseFloat(node.attributes.left || 0.7),\n right: parseFloat(node.attributes.right || 0.7),\n top: parseFloat(node.attributes.top || 0.75),\n bottom: parseFloat(node.attributes.bottom || 0.75),\n header: parseFloat(node.attributes.header || 0.3),\n footer: parseFloat(node.attributes.footer || 0.3),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageMarginsXform;\n"],"mappings":";;AAAA,MAAMA,CAAC,GAAGC,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAMC,SAAS,GAAGD,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAME,gBAAgB,SAASD,SAAS,CAAC;EACvC,IAAIE,GAAGA,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACT,MAAMC,UAAU,GAAG;QACjBC,IAAI,EAAEF,KAAK,CAACE,IAAI;QAChBC,KAAK,EAAEH,KAAK,CAACG,KAAK;QAClBC,GAAG,EAAEJ,KAAK,CAACI,GAAG;QACdC,MAAM,EAAEL,KAAK,CAACK,MAAM;QACpBC,MAAM,EAAEN,KAAK,CAACM,MAAM;QACpBC,MAAM,EAAEP,KAAK,CAACO;MAChB,CAAC;MACD,IAAId,CAAC,CAACe,IAAI,CAACP,UAAU,EAAEQ,KAAK,IAAIA,KAAK,KAAKC,SAAS,CAAC,EAAE;QACpDX,SAAS,CAACY,QAAQ,CAAC,IAAI,CAACd,GAAG,EAAEI,UAAU,CAAC;MAC1C;IACF;EACF;EAEAW,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACjB,GAAG;QACX,IAAI,CAACG,KAAK,GAAG;UACXE,IAAI,EAAEa,UAAU,CAACF,IAAI,CAACZ,UAAU,CAACC,IAAI,IAAI,GAAG,CAAC;UAC7CC,KAAK,EAAEY,UAAU,CAACF,IAAI,CAACZ,UAAU,CAACE,KAAK,IAAI,GAAG,CAAC;UAC/CC,GAAG,EAAEW,UAAU,CAACF,IAAI,CAACZ,UAAU,CAACG,GAAG,IAAI,IAAI,CAAC;UAC5CC,MAAM,EAAEU,UAAU,CAACF,IAAI,CAACZ,UAAU,CAACI,MAAM,IAAI,IAAI,CAAC;UAClDC,MAAM,EAAES,UAAU,CAACF,IAAI,CAACZ,UAAU,CAACK,MAAM,IAAI,GAAG,CAAC;UACjDC,MAAM,EAAEQ,UAAU,CAACF,IAAI,CAACZ,UAAU,CAACM,MAAM,IAAI,GAAG;QAClD,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAS,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGvB,gBAAgB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..bdb8accae206265ce1b4f2a77112efd18bc3c600 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js @@ -0,0 +1,32 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class PageSetupPropertiesXform extends BaseXform { + get tag() { + return 'pageSetUpPr'; + } + render(xmlStream, model) { + if (model && model.fitToPage) { + xmlStream.leafNode(this.tag, { + fitToPage: model.fitToPage ? '1' : undefined + }); + return true; + } + return false; + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + fitToPage: node.attributes.fitToPage === '1' + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageSetupPropertiesXform; +//# sourceMappingURL=page-setup-properties-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..275f5e155e02048730bbd87166bada75e2ff96cd --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"page-setup-properties-xform.js","names":["BaseXform","require","PageSetupPropertiesXform","tag","render","xmlStream","model","fitToPage","leafNode","undefined","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/page-setup-properties-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass PageSetupPropertiesXform extends BaseXform {\n get tag() {\n return 'pageSetUpPr';\n }\n\n render(xmlStream, model) {\n if (model && model.fitToPage) {\n xmlStream.leafNode(this.tag, {\n fitToPage: model.fitToPage ? '1' : undefined,\n });\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n fitToPage: node.attributes.fitToPage === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageSetupPropertiesXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,wBAAwB,SAASF,SAAS,CAAC;EAC/C,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,IAAIA,KAAK,CAACC,SAAS,EAAE;MAC5BF,SAAS,CAACG,QAAQ,CAAC,IAAI,CAACL,GAAG,EAAE;QAC3BI,SAAS,EAAED,KAAK,CAACC,SAAS,GAAG,GAAG,GAAGE;MACrC,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACT,GAAG,EAAE;MAC1B,IAAI,CAACG,KAAK,GAAG;QACXC,SAAS,EAAEI,IAAI,CAACE,UAAU,CAACN,SAAS,KAAK;MAC3C,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAO,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGf,wBAAwB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..38206df280372d90d388685184d9081e990a9984 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js @@ -0,0 +1,99 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +function booleanToXml(model) { + return model ? '1' : undefined; +} +function pageOrderToXml(model) { + switch (model) { + case 'overThenDown': + return model; + default: + return undefined; + } +} +function cellCommentsToXml(model) { + switch (model) { + case 'atEnd': + case 'asDisplyed': + return model; + default: + return undefined; + } +} +function errorsToXml(model) { + switch (model) { + case 'dash': + case 'blank': + case 'NA': + return model; + default: + return undefined; + } +} +function pageSizeToModel(value) { + return value !== undefined ? parseInt(value, 10) : undefined; +} +class PageSetupXform extends BaseXform { + get tag() { + return 'pageSetup'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + paperSize: model.paperSize, + orientation: model.orientation, + horizontalDpi: model.horizontalDpi, + verticalDpi: model.verticalDpi, + pageOrder: pageOrderToXml(model.pageOrder), + blackAndWhite: booleanToXml(model.blackAndWhite), + draft: booleanToXml(model.draft), + cellComments: cellCommentsToXml(model.cellComments), + errors: errorsToXml(model.errors), + scale: model.scale, + fitToWidth: model.fitToWidth, + fitToHeight: model.fitToHeight, + firstPageNumber: model.firstPageNumber, + useFirstPageNumber: booleanToXml(model.firstPageNumber), + usePrinterDefaults: booleanToXml(model.usePrinterDefaults), + copies: model.copies + }; + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + paperSize: pageSizeToModel(node.attributes.paperSize), + orientation: node.attributes.orientation || 'portrait', + horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10), + verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10), + pageOrder: node.attributes.pageOrder || 'downThenOver', + blackAndWhite: node.attributes.blackAndWhite === '1', + draft: node.attributes.draft === '1', + cellComments: node.attributes.cellComments || 'None', + errors: node.attributes.errors || 'displayed', + scale: parseInt(node.attributes.scale || '100', 10), + fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10), + fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10), + firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10), + useFirstPageNumber: node.attributes.useFirstPageNumber === '1', + usePrinterDefaults: node.attributes.usePrinterDefaults === '1', + copies: parseInt(node.attributes.copies || '1', 10) + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageSetupXform; +//# sourceMappingURL=page-setup-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..664a702d06d057bd66c75f11562f09ab9e13503c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"page-setup-xform.js","names":["_","require","BaseXform","booleanToXml","model","undefined","pageOrderToXml","cellCommentsToXml","errorsToXml","pageSizeToModel","value","parseInt","PageSetupXform","tag","render","xmlStream","attributes","paperSize","orientation","horizontalDpi","verticalDpi","pageOrder","blackAndWhite","draft","cellComments","errors","scale","fitToWidth","fitToHeight","firstPageNumber","useFirstPageNumber","usePrinterDefaults","copies","some","leafNode","parseOpen","node","name","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/page-setup-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model) {\n return model ? '1' : undefined;\n}\nfunction pageOrderToXml(model) {\n switch (model) {\n case 'overThenDown':\n return model;\n default:\n return undefined;\n }\n}\nfunction cellCommentsToXml(model) {\n switch (model) {\n case 'atEnd':\n case 'asDisplyed':\n return model;\n default:\n return undefined;\n }\n}\nfunction errorsToXml(model) {\n switch (model) {\n case 'dash':\n case 'blank':\n case 'NA':\n return model;\n default:\n return undefined;\n }\n}\nfunction pageSizeToModel(value) {\n return value !== undefined ? parseInt(value, 10) : undefined;\n}\n\nclass PageSetupXform extends BaseXform {\n get tag() {\n return 'pageSetup';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n paperSize: model.paperSize,\n orientation: model.orientation,\n horizontalDpi: model.horizontalDpi,\n verticalDpi: model.verticalDpi,\n pageOrder: pageOrderToXml(model.pageOrder),\n blackAndWhite: booleanToXml(model.blackAndWhite),\n draft: booleanToXml(model.draft),\n cellComments: cellCommentsToXml(model.cellComments),\n errors: errorsToXml(model.errors),\n scale: model.scale,\n fitToWidth: model.fitToWidth,\n fitToHeight: model.fitToHeight,\n firstPageNumber: model.firstPageNumber,\n useFirstPageNumber: booleanToXml(model.firstPageNumber),\n usePrinterDefaults: booleanToXml(model.usePrinterDefaults),\n copies: model.copies,\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n paperSize: pageSizeToModel(node.attributes.paperSize),\n orientation: node.attributes.orientation || 'portrait',\n horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10),\n verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10),\n pageOrder: node.attributes.pageOrder || 'downThenOver',\n blackAndWhite: node.attributes.blackAndWhite === '1',\n draft: node.attributes.draft === '1',\n cellComments: node.attributes.cellComments || 'None',\n errors: node.attributes.errors || 'displayed',\n scale: parseInt(node.attributes.scale || '100', 10),\n fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10),\n fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10),\n firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10),\n useFirstPageNumber: node.attributes.useFirstPageNumber === '1',\n usePrinterDefaults: node.attributes.usePrinterDefaults === '1',\n copies: parseInt(node.attributes.copies || '1', 10),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageSetupXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..3b5d3304500ff43b85c88385b8a3bd469ef483a0 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js @@ -0,0 +1,32 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class PictureXform extends BaseXform { + get tag() { + return 'picture'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode(this.tag, { + 'r:id': model.rId + }); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:id'] + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PictureXform; +//# sourceMappingURL=picture-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..fe0e3135405a986f5b44240d1f2ec96d62bbcadf --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"picture-xform.js","names":["BaseXform","require","PictureXform","tag","render","xmlStream","model","leafNode","rId","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/picture-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass PictureXform extends BaseXform {\n get tag() {\n return 'picture';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PictureXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,YAAY,SAASF,SAAS,CAAC;EACnC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACTD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;QAAC,MAAM,EAAEG,KAAK,CAACE;MAAG,CAAC,CAAC;IACnD;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACR,GAAG;QACX,IAAI,CAACG,KAAK,GAAG;UACXE,GAAG,EAAEE,IAAI,CAACE,UAAU,CAAC,MAAM;QAC7B,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGd,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..d4791df8fb3290a3d816003d0fce6826026759af --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js @@ -0,0 +1,45 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +function booleanToXml(model) { + return model ? '1' : undefined; +} +class PrintOptionsXform extends BaseXform { + get tag() { + return 'printOptions'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + headings: booleanToXml(model.showRowColHeaders), + gridLines: booleanToXml(model.showGridLines), + horizontalCentered: booleanToXml(model.horizontalCentered), + verticalCentered: booleanToXml(model.verticalCentered) + }; + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + showRowColHeaders: node.attributes.headings === '1', + showGridLines: node.attributes.gridLines === '1', + horizontalCentered: node.attributes.horizontalCentered === '1', + verticalCentered: node.attributes.verticalCentered === '1' + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PrintOptionsXform; +//# sourceMappingURL=print-options-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..d20935ecbd8bf77b1c711ae6ce73bf8c214db865 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"print-options-xform.js","names":["_","require","BaseXform","booleanToXml","model","undefined","PrintOptionsXform","tag","render","xmlStream","attributes","headings","showRowColHeaders","gridLines","showGridLines","horizontalCentered","verticalCentered","some","value","leafNode","parseOpen","node","name","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/print-options-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model) {\n return model ? '1' : undefined;\n}\n\nclass PrintOptionsXform extends BaseXform {\n get tag() {\n return 'printOptions';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n headings: booleanToXml(model.showRowColHeaders),\n gridLines: booleanToXml(model.showGridLines),\n horizontalCentered: booleanToXml(model.horizontalCentered),\n verticalCentered: booleanToXml(model.verticalCentered),\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n showRowColHeaders: node.attributes.headings === '1',\n showGridLines: node.attributes.gridLines === '1',\n horizontalCentered: node.attributes.horizontalCentered === '1',\n verticalCentered: node.attributes.verticalCentered === '1',\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PrintOptionsXform;\n"],"mappings":";;AAAA,MAAMA,CAAC,GAAGC,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAMC,SAAS,GAAGD,OAAO,CAAC,eAAe,CAAC;AAE1C,SAASE,YAAYA,CAACC,KAAK,EAAE;EAC3B,OAAOA,KAAK,GAAG,GAAG,GAAGC,SAAS;AAChC;AAEA,MAAMC,iBAAiB,SAASJ,SAAS,CAAC;EACxC,IAAIK,GAAGA,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEAC,MAAMA,CAACC,SAAS,EAAEL,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACT,MAAMM,UAAU,GAAG;QACjBC,QAAQ,EAAER,YAAY,CAACC,KAAK,CAACQ,iBAAiB,CAAC;QAC/CC,SAAS,EAAEV,YAAY,CAACC,KAAK,CAACU,aAAa,CAAC;QAC5CC,kBAAkB,EAAEZ,YAAY,CAACC,KAAK,CAACW,kBAAkB,CAAC;QAC1DC,gBAAgB,EAAEb,YAAY,CAACC,KAAK,CAACY,gBAAgB;MACvD,CAAC;MACD,IAAIhB,CAAC,CAACiB,IAAI,CAACP,UAAU,EAAEQ,KAAK,IAAIA,KAAK,KAAKb,SAAS,CAAC,EAAE;QACpDI,SAAS,CAACU,QAAQ,CAAC,IAAI,CAACZ,GAAG,EAAEG,UAAU,CAAC;MAC1C;IACF;EACF;EAEAU,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACf,GAAG;QACX,IAAI,CAACH,KAAK,GAAG;UACXQ,iBAAiB,EAAES,IAAI,CAACX,UAAU,CAACC,QAAQ,KAAK,GAAG;UACnDG,aAAa,EAAEO,IAAI,CAACX,UAAU,CAACG,SAAS,KAAK,GAAG;UAChDE,kBAAkB,EAAEM,IAAI,CAACX,UAAU,CAACK,kBAAkB,KAAK,GAAG;UAC9DC,gBAAgB,EAAEK,IAAI,CAACX,UAAU,CAACM,gBAAgB,KAAK;QACzD,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAO,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGpB,iBAAiB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..fdfa62e41313cd4dc2926df311c0496d16264331 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js @@ -0,0 +1,37 @@ +'use strict'; + +const PageBreaksXform = require('./page-breaks-xform'); +const ListXform = require('../list-xform'); +class RowBreaksXform extends ListXform { + constructor() { + const options = { + tag: 'rowBreaks', + count: true, + childXform: new PageBreaksXform() + }; + super(options); + } + + // get tag() { return 'rowBreaks'; } + + render(xmlStream, model) { + if (model && model.length) { + xmlStream.openNode(this.tag, this.$); + if (this.count) { + xmlStream.addAttribute(this.$count, model.length); + xmlStream.addAttribute('manualBreakCount', model.length); + } + const { + childXform + } = this; + model.forEach(childModel => { + childXform.render(xmlStream, childModel); + }); + xmlStream.closeNode(); + } else if (this.empty) { + xmlStream.leafNode(this.tag); + } + } +} +module.exports = RowBreaksXform; +//# sourceMappingURL=row-breaks-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..3f185274eec6a114dbd7325757f4ec0f4b242a10 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"row-breaks-xform.js","names":["PageBreaksXform","require","ListXform","RowBreaksXform","constructor","options","tag","count","childXform","render","xmlStream","model","length","openNode","$","addAttribute","$count","forEach","childModel","closeNode","empty","leafNode","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/row-breaks-xform.js"],"sourcesContent":["'use strict';\n\nconst PageBreaksXform = require('./page-breaks-xform');\n\nconst ListXform = require('../list-xform');\n\nclass RowBreaksXform extends ListXform {\n constructor() {\n const options = {\n tag: 'rowBreaks',\n count: true,\n childXform: new PageBreaksXform(),\n };\n super(options);\n }\n\n // get tag() { return 'rowBreaks'; }\n\n render(xmlStream, model) {\n if (model && model.length) {\n xmlStream.openNode(this.tag, this.$);\n if (this.count) {\n xmlStream.addAttribute(this.$count, model.length);\n xmlStream.addAttribute('manualBreakCount', model.length);\n }\n\n const {childXform} = this;\n model.forEach(childModel => {\n childXform.render(xmlStream, childModel);\n });\n\n xmlStream.closeNode();\n } else if (this.empty) {\n xmlStream.leafNode(this.tag);\n }\n }\n}\n\nmodule.exports = RowBreaksXform;\n"],"mappings":"AAAA,YAAY;;AAEZ,MAAMA,eAAe,GAAGC,OAAO,CAAC,qBAAqB,CAAC;AAEtD,MAAMC,SAAS,GAAGD,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAME,cAAc,SAASD,SAAS,CAAC;EACrCE,WAAWA,CAAA,EAAG;IACZ,MAAMC,OAAO,GAAG;MACdC,GAAG,EAAE,WAAW;MAChBC,KAAK,EAAE,IAAI;MACXC,UAAU,EAAE,IAAIR,eAAe,CAAC;IAClC,CAAC;IACD,KAAK,CAACK,OAAO,CAAC;EAChB;;EAEA;;EAEAI,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,IAAIA,KAAK,CAACC,MAAM,EAAE;MACzBF,SAAS,CAACG,QAAQ,CAAC,IAAI,CAACP,GAAG,EAAE,IAAI,CAACQ,CAAC,CAAC;MACpC,IAAI,IAAI,CAACP,KAAK,EAAE;QACdG,SAAS,CAACK,YAAY,CAAC,IAAI,CAACC,MAAM,EAAEL,KAAK,CAACC,MAAM,CAAC;QACjDF,SAAS,CAACK,YAAY,CAAC,kBAAkB,EAAEJ,KAAK,CAACC,MAAM,CAAC;MAC1D;MAEA,MAAM;QAACJ;MAAU,CAAC,GAAG,IAAI;MACzBG,KAAK,CAACM,OAAO,CAACC,UAAU,IAAI;QAC1BV,UAAU,CAACC,MAAM,CAACC,SAAS,EAAEQ,UAAU,CAAC;MAC1C,CAAC,CAAC;MAEFR,SAAS,CAACS,SAAS,CAAC,CAAC;IACvB,CAAC,MAAM,IAAI,IAAI,CAACC,KAAK,EAAE;MACrBV,SAAS,CAACW,QAAQ,CAAC,IAAI,CAACf,GAAG,CAAC;IAC9B;EACF;AACF;AAEAgB,MAAM,CAACC,OAAO,GAAGpB,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..5a56b4b648de4ae14236e57b08be7ab110a11e05 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js @@ -0,0 +1,128 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const utils = require('../../../utils/utils'); +const CellXform = require('./cell-xform'); +class RowXform extends BaseXform { + constructor(options) { + super(); + this.maxItems = options && options.maxItems; + this.map = { + c: new CellXform() + }; + } + get tag() { + return 'row'; + } + prepare(model, options) { + const styleId = options.styles.addStyleModel(model.style); + if (styleId) { + model.styleId = styleId; + } + const cellXform = this.map.c; + model.cells.forEach(cellModel => { + cellXform.prepare(cellModel, options); + }); + } + render(xmlStream, model, options) { + xmlStream.openNode('row'); + xmlStream.addAttribute('r', model.number); + if (model.height) { + xmlStream.addAttribute('ht', model.height); + xmlStream.addAttribute('customHeight', '1'); + } + if (model.hidden) { + xmlStream.addAttribute('hidden', '1'); + } + if (model.min > 0 && model.max > 0 && model.min <= model.max) { + xmlStream.addAttribute('spans', `${model.min}:${model.max}`); + } + if (model.styleId) { + xmlStream.addAttribute('s', model.styleId); + xmlStream.addAttribute('customFormat', '1'); + } + xmlStream.addAttribute('x14ac:dyDescent', '0.25'); + if (model.outlineLevel) { + xmlStream.addAttribute('outlineLevel', model.outlineLevel); + } + if (model.collapsed) { + xmlStream.addAttribute('collapsed', '1'); + } + const cellXform = this.map.c; + model.cells.forEach(cellModel => { + cellXform.render(xmlStream, cellModel, options); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === 'row') { + this.numRowsSeen += 1; + const spans = node.attributes.spans ? node.attributes.spans.split(':').map(span => parseInt(span, 10)) : [undefined, undefined]; + const model = this.model = { + number: parseInt(node.attributes.r, 10), + min: spans[0], + max: spans[1], + cells: [] + }; + if (node.attributes.s) { + model.styleId = parseInt(node.attributes.s, 10); + } + if (utils.parseBoolean(node.attributes.hidden)) { + model.hidden = true; + } + if (utils.parseBoolean(node.attributes.bestFit)) { + model.bestFit = true; + } + if (node.attributes.ht) { + model.height = parseFloat(node.attributes.ht); + } + if (node.attributes.outlineLevel) { + model.outlineLevel = parseInt(node.attributes.outlineLevel, 10); + } + if (utils.parseBoolean(node.attributes.collapsed)) { + model.collapsed = true; + } + return true; + } + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.cells.push(this.parser.model); + if (this.maxItems && this.model.cells.length > this.maxItems) { + throw new Error(`Max column count (${this.maxItems}) exceeded`); + } + this.parser = undefined; + } + return true; + } + return false; + } + reconcile(model, options) { + model.style = model.styleId ? options.styles.getStyleModel(model.styleId) : {}; + if (model.styleId !== undefined) { + model.styleId = undefined; + } + const cellXform = this.map.c; + model.cells.forEach(cellModel => { + cellXform.reconcile(cellModel, options); + }); + } +} +module.exports = RowXform; +//# sourceMappingURL=row-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..01c81106512149c7880a42ed7f9d4f311bb3a622 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"row-xform.js","names":["BaseXform","require","utils","CellXform","RowXform","constructor","options","maxItems","map","c","tag","prepare","model","styleId","styles","addStyleModel","style","cellXform","cells","forEach","cellModel","render","xmlStream","openNode","addAttribute","number","height","hidden","min","max","outlineLevel","collapsed","closeNode","parseOpen","node","parser","name","numRowsSeen","spans","attributes","split","span","parseInt","undefined","r","s","parseBoolean","bestFit","ht","parseFloat","parseText","text","parseClose","push","length","Error","reconcile","getStyleModel","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/row-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst utils = require('../../../utils/utils');\n\nconst CellXform = require('./cell-xform');\n\nclass RowXform extends BaseXform {\n constructor(options) {\n super();\n\n this.maxItems = options && options.maxItems;\n this.map = {\n c: new CellXform(),\n };\n }\n\n get tag() {\n return 'row';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style);\n if (styleId) {\n model.styleId = styleId;\n }\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.prepare(cellModel, options);\n });\n }\n\n render(xmlStream, model, options) {\n xmlStream.openNode('row');\n xmlStream.addAttribute('r', model.number);\n if (model.height) {\n xmlStream.addAttribute('ht', model.height);\n xmlStream.addAttribute('customHeight', '1');\n }\n if (model.hidden) {\n xmlStream.addAttribute('hidden', '1');\n }\n if (model.min > 0 && model.max > 0 && model.min <= model.max) {\n xmlStream.addAttribute('spans', `${model.min}:${model.max}`);\n }\n if (model.styleId) {\n xmlStream.addAttribute('s', model.styleId);\n xmlStream.addAttribute('customFormat', '1');\n }\n xmlStream.addAttribute('x14ac:dyDescent', '0.25');\n if (model.outlineLevel) {\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\n }\n if (model.collapsed) {\n xmlStream.addAttribute('collapsed', '1');\n }\n\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.render(xmlStream, cellModel, options);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (node.name === 'row') {\n this.numRowsSeen += 1;\n const spans = node.attributes.spans\n ? node.attributes.spans.split(':').map(span => parseInt(span, 10))\n : [undefined, undefined];\n const model = (this.model = {\n number: parseInt(node.attributes.r, 10),\n min: spans[0],\n max: spans[1],\n cells: [],\n });\n if (node.attributes.s) {\n model.styleId = parseInt(node.attributes.s, 10);\n }\n if (utils.parseBoolean(node.attributes.hidden)) {\n model.hidden = true;\n }\n if (utils.parseBoolean(node.attributes.bestFit)) {\n model.bestFit = true;\n }\n if (node.attributes.ht) {\n model.height = parseFloat(node.attributes.ht);\n }\n if (node.attributes.outlineLevel) {\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\n }\n if (utils.parseBoolean(node.attributes.collapsed)) {\n model.collapsed = true;\n }\n return true;\n }\n\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.cells.push(this.parser.model);\n if (this.maxItems && this.model.cells.length > this.maxItems) {\n throw new Error(`Max column count (${this.maxItems}) exceeded`);\n }\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.style = model.styleId ? options.styles.getStyleModel(model.styleId) : {};\n if (model.styleId !== undefined) {\n model.styleId = undefined;\n }\n\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.reconcile(cellModel, options);\n });\n }\n}\n\nmodule.exports = RowXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..1db7fda092f066adc46e9bcf563f4502b4da4591 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js @@ -0,0 +1,51 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +class SheetFormatPropertiesXform extends BaseXform { + get tag() { + return 'sheetFormatPr'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + defaultRowHeight: model.defaultRowHeight, + outlineLevelRow: model.outlineLevelRow, + outlineLevelCol: model.outlineLevelCol, + 'x14ac:dyDescent': model.dyDescent + }; + if (model.defaultColWidth) { + attributes.defaultColWidth = model.defaultColWidth; + } + + // default value for 'defaultRowHeight' is 15, this should not be 'custom' + if (!model.defaultRowHeight || model.defaultRowHeight !== 15) { + attributes.customHeight = '1'; + } + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode('sheetFormatPr', attributes); + } + } + } + parseOpen(node) { + if (node.name === 'sheetFormatPr') { + this.model = { + defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || '0'), + dyDescent: parseFloat(node.attributes['x14ac:dyDescent'] || '0'), + outlineLevelRow: parseInt(node.attributes.outlineLevelRow || '0', 10), + outlineLevelCol: parseInt(node.attributes.outlineLevelCol || '0', 10) + }; + if (node.attributes.defaultColWidth) { + this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth); + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = SheetFormatPropertiesXform; +//# sourceMappingURL=sheet-format-properties-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..8d79e75c55add40e8f60d73ebc0034bace9f5f2e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sheet-format-properties-xform.js","names":["_","require","BaseXform","SheetFormatPropertiesXform","tag","render","xmlStream","model","attributes","defaultRowHeight","outlineLevelRow","outlineLevelCol","dyDescent","defaultColWidth","customHeight","some","value","undefined","leafNode","parseOpen","node","name","parseFloat","parseInt","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/sheet-format-properties-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nclass SheetFormatPropertiesXform extends BaseXform {\n get tag() {\n return 'sheetFormatPr';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n defaultRowHeight: model.defaultRowHeight,\n outlineLevelRow: model.outlineLevelRow,\n outlineLevelCol: model.outlineLevelCol,\n 'x14ac:dyDescent': model.dyDescent,\n };\n if (model.defaultColWidth) {\n attributes.defaultColWidth = model.defaultColWidth;\n }\n\n // default value for 'defaultRowHeight' is 15, this should not be 'custom'\n if (!model.defaultRowHeight || model.defaultRowHeight !== 15) {\n attributes.customHeight = '1';\n }\n\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode('sheetFormatPr', attributes);\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'sheetFormatPr') {\n this.model = {\n defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || '0'),\n dyDescent: parseFloat(node.attributes['x14ac:dyDescent'] || '0'),\n outlineLevelRow: parseInt(node.attributes.outlineLevelRow || '0', 10),\n outlineLevelCol: parseInt(node.attributes.outlineLevelCol || '0', 10),\n };\n if (node.attributes.defaultColWidth) {\n this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth);\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = SheetFormatPropertiesXform;\n"],"mappings":";;AAAA,MAAMA,CAAC,GAAGC,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAMC,SAAS,GAAGD,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAME,0BAA0B,SAASD,SAAS,CAAC;EACjD,IAAIE,GAAGA,CAAA,EAAG;IACR,OAAO,eAAe;EACxB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACT,MAAMC,UAAU,GAAG;QACjBC,gBAAgB,EAAEF,KAAK,CAACE,gBAAgB;QACxCC,eAAe,EAAEH,KAAK,CAACG,eAAe;QACtCC,eAAe,EAAEJ,KAAK,CAACI,eAAe;QACtC,iBAAiB,EAAEJ,KAAK,CAACK;MAC3B,CAAC;MACD,IAAIL,KAAK,CAACM,eAAe,EAAE;QACzBL,UAAU,CAACK,eAAe,GAAGN,KAAK,CAACM,eAAe;MACpD;;MAEA;MACA,IAAI,CAACN,KAAK,CAACE,gBAAgB,IAAIF,KAAK,CAACE,gBAAgB,KAAK,EAAE,EAAE;QAC5DD,UAAU,CAACM,YAAY,GAAG,GAAG;MAC/B;MAEA,IAAId,CAAC,CAACe,IAAI,CAACP,UAAU,EAAEQ,KAAK,IAAIA,KAAK,KAAKC,SAAS,CAAC,EAAE;QACpDX,SAAS,CAACY,QAAQ,CAAC,eAAe,EAAEV,UAAU,CAAC;MACjD;IACF;EACF;EAEAW,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,eAAe,EAAE;MACjC,IAAI,CAACd,KAAK,GAAG;QACXE,gBAAgB,EAAEa,UAAU,CAACF,IAAI,CAACZ,UAAU,CAACC,gBAAgB,IAAI,GAAG,CAAC;QACrEG,SAAS,EAAEU,UAAU,CAACF,IAAI,CAACZ,UAAU,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;QAChEE,eAAe,EAAEa,QAAQ,CAACH,IAAI,CAACZ,UAAU,CAACE,eAAe,IAAI,GAAG,EAAE,EAAE,CAAC;QACrEC,eAAe,EAAEY,QAAQ,CAACH,IAAI,CAACZ,UAAU,CAACG,eAAe,IAAI,GAAG,EAAE,EAAE;MACtE,CAAC;MACD,IAAIS,IAAI,CAACZ,UAAU,CAACK,eAAe,EAAE;QACnC,IAAI,CAACN,KAAK,CAACM,eAAe,GAAGS,UAAU,CAACF,IAAI,CAACZ,UAAU,CAACK,eAAe,CAAC;MAC1E;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAW,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGxB,0BAA0B"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..eab4b992df7f2b525882f7455a7cd37d4c4952ff --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js @@ -0,0 +1,83 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const ColorXform = require('../style/color-xform'); +const PageSetupPropertiesXform = require('./page-setup-properties-xform'); +const OutlinePropertiesXform = require('./outline-properties-xform'); +class SheetPropertiesXform extends BaseXform { + constructor() { + super(); + this.map = { + tabColor: new ColorXform('tabColor'), + pageSetUpPr: new PageSetupPropertiesXform(), + outlinePr: new OutlinePropertiesXform() + }; + } + get tag() { + return 'sheetPr'; + } + render(xmlStream, model) { + if (model) { + xmlStream.addRollback(); + xmlStream.openNode('sheetPr'); + let inner = false; + inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner; + inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner; + inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner; + if (inner) { + xmlStream.closeNode(); + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === this.tag) { + this.reset(); + return true; + } + if (this.map[node.name]) { + this.parser = this.map[node.name]; + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + return true; + } + return false; + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) { + this.model = {}; + if (this.map.tabColor.model) { + this.model.tabColor = this.map.tabColor.model; + } + if (this.map.pageSetUpPr.model) { + this.model.pageSetup = this.map.pageSetUpPr.model; + } + if (this.map.outlinePr.model) { + this.model.outlineProperties = this.map.outlinePr.model; + } + } else { + this.model = null; + } + return false; + } +} +module.exports = SheetPropertiesXform; +//# sourceMappingURL=sheet-properties-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0ebbbb43e86fc3c86af3db40cdf3d8ad1ef0babb --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sheet-properties-xform.js","names":["BaseXform","require","ColorXform","PageSetupPropertiesXform","OutlinePropertiesXform","SheetPropertiesXform","constructor","map","tabColor","pageSetUpPr","outlinePr","tag","render","xmlStream","model","addRollback","openNode","inner","pageSetup","outlineProperties","closeNode","commit","rollback","parseOpen","node","parser","name","reset","parseText","text","parseClose","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/sheet-properties-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst ColorXform = require('../style/color-xform');\nconst PageSetupPropertiesXform = require('./page-setup-properties-xform');\nconst OutlinePropertiesXform = require('./outline-properties-xform');\n\nclass SheetPropertiesXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n tabColor: new ColorXform('tabColor'),\n pageSetUpPr: new PageSetupPropertiesXform(),\n outlinePr: new OutlinePropertiesXform(),\n };\n }\n\n get tag() {\n return 'sheetPr';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.addRollback();\n xmlStream.openNode('sheetPr');\n\n let inner = false;\n inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner;\n inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner;\n inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner;\n\n if (inner) {\n xmlStream.closeNode();\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (node.name === this.tag) {\n this.reset();\n return true;\n }\n if (this.map[node.name]) {\n this.parser = this.map[node.name];\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n return true;\n }\n return false;\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) {\n this.model = {};\n if (this.map.tabColor.model) {\n this.model.tabColor = this.map.tabColor.model;\n }\n if (this.map.pageSetUpPr.model) {\n this.model.pageSetup = this.map.pageSetUpPr.model;\n }\n if (this.map.outlinePr.model) {\n this.model.outlineProperties = this.map.outlinePr.model;\n }\n } else {\n this.model = null;\n }\n return false;\n }\n}\n\nmodule.exports = SheetPropertiesXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..e117040feefdd14a85faf8041524beec1a54eb49 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js @@ -0,0 +1,84 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +function booleanToXml(model, value) { + return model ? value : undefined; +} +function xmlToBoolean(value, equals) { + return value === equals ? true : undefined; +} +class SheetProtectionXform extends BaseXform { + get tag() { + return 'sheetProtection'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + sheet: booleanToXml(model.sheet, '1'), + selectLockedCells: model.selectLockedCells === false ? '1' : undefined, + selectUnlockedCells: model.selectUnlockedCells === false ? '1' : undefined, + formatCells: booleanToXml(model.formatCells, '0'), + formatColumns: booleanToXml(model.formatColumns, '0'), + formatRows: booleanToXml(model.formatRows, '0'), + insertColumns: booleanToXml(model.insertColumns, '0'), + insertRows: booleanToXml(model.insertRows, '0'), + insertHyperlinks: booleanToXml(model.insertHyperlinks, '0'), + deleteColumns: booleanToXml(model.deleteColumns, '0'), + deleteRows: booleanToXml(model.deleteRows, '0'), + sort: booleanToXml(model.sort, '0'), + autoFilter: booleanToXml(model.autoFilter, '0'), + pivotTables: booleanToXml(model.pivotTables, '0') + }; + if (model.sheet) { + attributes.algorithmName = model.algorithmName; + attributes.hashValue = model.hashValue; + attributes.saltValue = model.saltValue; + attributes.spinCount = model.spinCount; + attributes.objects = booleanToXml(model.objects === false, '1'); + attributes.scenarios = booleanToXml(model.scenarios === false, '1'); + } + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + sheet: xmlToBoolean(node.attributes.sheet, '1'), + objects: node.attributes.objects === '1' ? false : undefined, + scenarios: node.attributes.scenarios === '1' ? false : undefined, + selectLockedCells: node.attributes.selectLockedCells === '1' ? false : undefined, + selectUnlockedCells: node.attributes.selectUnlockedCells === '1' ? false : undefined, + formatCells: xmlToBoolean(node.attributes.formatCells, '0'), + formatColumns: xmlToBoolean(node.attributes.formatColumns, '0'), + formatRows: xmlToBoolean(node.attributes.formatRows, '0'), + insertColumns: xmlToBoolean(node.attributes.insertColumns, '0'), + insertRows: xmlToBoolean(node.attributes.insertRows, '0'), + insertHyperlinks: xmlToBoolean(node.attributes.insertHyperlinks, '0'), + deleteColumns: xmlToBoolean(node.attributes.deleteColumns, '0'), + deleteRows: xmlToBoolean(node.attributes.deleteRows, '0'), + sort: xmlToBoolean(node.attributes.sort, '0'), + autoFilter: xmlToBoolean(node.attributes.autoFilter, '0'), + pivotTables: xmlToBoolean(node.attributes.pivotTables, '0') + }; + if (node.attributes.algorithmName) { + this.model.algorithmName = node.attributes.algorithmName; + this.model.hashValue = node.attributes.hashValue; + this.model.saltValue = node.attributes.saltValue; + this.model.spinCount = parseInt(node.attributes.spinCount, 10); + } + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = SheetProtectionXform; +//# sourceMappingURL=sheet-protection-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..dfa02277eb29fd4fd2a0fd3c1d86d211db46b7d0 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sheet-protection-xform.js","names":["_","require","BaseXform","booleanToXml","model","value","undefined","xmlToBoolean","equals","SheetProtectionXform","tag","render","xmlStream","attributes","sheet","selectLockedCells","selectUnlockedCells","formatCells","formatColumns","formatRows","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables","algorithmName","hashValue","saltValue","spinCount","objects","scenarios","some","leafNode","parseOpen","node","name","parseInt","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/sheet-protection-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model, value) {\n return model ? value : undefined;\n}\n\nfunction xmlToBoolean(value, equals) {\n return value === equals ? true : undefined;\n}\n\nclass SheetProtectionXform extends BaseXform {\n get tag() {\n return 'sheetProtection';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n sheet: booleanToXml(model.sheet, '1'),\n selectLockedCells: model.selectLockedCells === false ? '1' : undefined,\n selectUnlockedCells: model.selectUnlockedCells === false ? '1' : undefined,\n formatCells: booleanToXml(model.formatCells, '0'),\n formatColumns: booleanToXml(model.formatColumns, '0'),\n formatRows: booleanToXml(model.formatRows, '0'),\n insertColumns: booleanToXml(model.insertColumns, '0'),\n insertRows: booleanToXml(model.insertRows, '0'),\n insertHyperlinks: booleanToXml(model.insertHyperlinks, '0'),\n deleteColumns: booleanToXml(model.deleteColumns, '0'),\n deleteRows: booleanToXml(model.deleteRows, '0'),\n sort: booleanToXml(model.sort, '0'),\n autoFilter: booleanToXml(model.autoFilter, '0'),\n pivotTables: booleanToXml(model.pivotTables, '0'),\n };\n if (model.sheet) {\n attributes.algorithmName = model.algorithmName;\n attributes.hashValue = model.hashValue;\n attributes.saltValue = model.saltValue;\n attributes.spinCount = model.spinCount;\n attributes.objects = booleanToXml(model.objects === false, '1');\n attributes.scenarios = booleanToXml(model.scenarios === false, '1');\n }\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n sheet: xmlToBoolean(node.attributes.sheet, '1'),\n objects: node.attributes.objects === '1' ? false : undefined,\n scenarios: node.attributes.scenarios === '1' ? false : undefined,\n selectLockedCells: node.attributes.selectLockedCells === '1' ? false : undefined,\n selectUnlockedCells: node.attributes.selectUnlockedCells === '1' ? false : undefined,\n formatCells: xmlToBoolean(node.attributes.formatCells, '0'),\n formatColumns: xmlToBoolean(node.attributes.formatColumns, '0'),\n formatRows: xmlToBoolean(node.attributes.formatRows, '0'),\n insertColumns: xmlToBoolean(node.attributes.insertColumns, '0'),\n insertRows: xmlToBoolean(node.attributes.insertRows, '0'),\n insertHyperlinks: xmlToBoolean(node.attributes.insertHyperlinks, '0'),\n deleteColumns: xmlToBoolean(node.attributes.deleteColumns, '0'),\n deleteRows: xmlToBoolean(node.attributes.deleteRows, '0'),\n sort: xmlToBoolean(node.attributes.sort, '0'),\n autoFilter: xmlToBoolean(node.attributes.autoFilter, '0'),\n pivotTables: xmlToBoolean(node.attributes.pivotTables, '0'),\n };\n if (node.attributes.algorithmName) {\n this.model.algorithmName = node.attributes.algorithmName;\n this.model.hashValue = node.attributes.hashValue;\n this.model.saltValue = node.attributes.saltValue;\n this.model.spinCount = parseInt(node.attributes.spinCount, 10);\n }\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = SheetProtectionXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..4b79cc8df42de860255ecabbbf0180bfabdecab7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js @@ -0,0 +1,190 @@ +"use strict"; + +const colCache = require('../../../utils/col-cache'); +const BaseXform = require('../base-xform'); +const VIEW_STATES = { + frozen: 'frozen', + frozenSplit: 'frozen', + split: 'split' +}; +class SheetViewXform extends BaseXform { + get tag() { + return 'sheetView'; + } + prepare(model) { + switch (model.state) { + case 'frozen': + case 'split': + break; + default: + model.state = 'normal'; + break; + } + } + render(xmlStream, model) { + xmlStream.openNode('sheetView', { + workbookViewId: model.workbookViewId || 0 + }); + const add = function (name, value, included) { + if (included) { + xmlStream.addAttribute(name, value); + } + }; + add('rightToLeft', '1', model.rightToLeft === true); + add('tabSelected', '1', model.tabSelected); + add('showRuler', '0', model.showRuler === false); + add('showRowColHeaders', '0', model.showRowColHeaders === false); + add('showGridLines', '0', model.showGridLines === false); + add('zoomScale', model.zoomScale, model.zoomScale); + add('zoomScaleNormal', model.zoomScaleNormal, model.zoomScaleNormal); + add('view', model.style, model.style); + let topLeftCell; + let xSplit; + let ySplit; + let activePane; + switch (model.state) { + case 'frozen': + xSplit = model.xSplit || 0; + ySplit = model.ySplit || 0; + topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address; + activePane = model.xSplit && model.ySplit && 'bottomRight' || model.xSplit && 'topRight' || 'bottomLeft'; + xmlStream.leafNode('pane', { + xSplit: model.xSplit || undefined, + ySplit: model.ySplit || undefined, + topLeftCell, + activePane, + state: 'frozen' + }); + xmlStream.leafNode('selection', { + pane: activePane, + activeCell: model.activeCell, + sqref: model.activeCell + }); + break; + case 'split': + if (model.activePane === 'topLeft') { + model.activePane = undefined; + } + xmlStream.leafNode('pane', { + xSplit: model.xSplit || undefined, + ySplit: model.ySplit || undefined, + topLeftCell: model.topLeftCell, + activePane: model.activePane + }); + xmlStream.leafNode('selection', { + pane: model.activePane, + activeCell: model.activeCell, + sqref: model.activeCell + }); + break; + case 'normal': + if (model.activeCell) { + xmlStream.leafNode('selection', { + activeCell: model.activeCell, + sqref: model.activeCell + }); + } + break; + default: + break; + } + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case 'sheetView': + this.sheetView = { + workbookViewId: parseInt(node.attributes.workbookViewId, 10), + rightToLeft: node.attributes.rightToLeft === '1', + tabSelected: node.attributes.tabSelected === '1', + showRuler: !(node.attributes.showRuler === '0'), + showRowColHeaders: !(node.attributes.showRowColHeaders === '0'), + showGridLines: !(node.attributes.showGridLines === '0'), + zoomScale: parseInt(node.attributes.zoomScale || '100', 10), + zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || '100', 10), + style: node.attributes.view + }; + this.pane = undefined; + this.selections = {}; + return true; + case 'pane': + this.pane = { + xSplit: parseInt(node.attributes.xSplit || '0', 10), + ySplit: parseInt(node.attributes.ySplit || '0', 10), + topLeftCell: node.attributes.topLeftCell, + activePane: node.attributes.activePane || 'topLeft', + state: node.attributes.state + }; + return true; + case 'selection': + { + const name = node.attributes.pane || 'topLeft'; + this.selections[name] = { + pane: name, + activeCell: node.attributes.activeCell + }; + return true; + } + default: + return false; + } + } + parseText() {} + parseClose(name) { + let model; + let selection; + switch (name) { + case 'sheetView': + if (this.sheetView && this.pane) { + model = this.model = { + workbookViewId: this.sheetView.workbookViewId, + rightToLeft: this.sheetView.rightToLeft, + state: VIEW_STATES[this.pane.state] || 'split', + // split is default + xSplit: this.pane.xSplit, + ySplit: this.pane.ySplit, + topLeftCell: this.pane.topLeftCell, + showRuler: this.sheetView.showRuler, + showRowColHeaders: this.sheetView.showRowColHeaders, + showGridLines: this.sheetView.showGridLines, + zoomScale: this.sheetView.zoomScale, + zoomScaleNormal: this.sheetView.zoomScaleNormal + }; + if (this.model.state === 'split') { + model.activePane = this.pane.activePane; + } + selection = this.selections[this.pane.activePane]; + if (selection && selection.activeCell) { + model.activeCell = selection.activeCell; + } + if (this.sheetView.style) { + model.style = this.sheetView.style; + } + } else { + model = this.model = { + workbookViewId: this.sheetView.workbookViewId, + rightToLeft: this.sheetView.rightToLeft, + state: 'normal', + showRuler: this.sheetView.showRuler, + showRowColHeaders: this.sheetView.showRowColHeaders, + showGridLines: this.sheetView.showGridLines, + zoomScale: this.sheetView.zoomScale, + zoomScaleNormal: this.sheetView.zoomScaleNormal + }; + selection = this.selections.topLeft; + if (selection && selection.activeCell) { + model.activeCell = selection.activeCell; + } + if (this.sheetView.style) { + model.style = this.sheetView.style; + } + } + return false; + default: + return true; + } + } + reconcile() {} +} +module.exports = SheetViewXform; +//# sourceMappingURL=sheet-view-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..557e1bf129278ad57f2c96f55b28eb27e2e37e35 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sheet-view-xform.js","names":["colCache","require","BaseXform","VIEW_STATES","frozen","frozenSplit","split","SheetViewXform","tag","prepare","model","state","render","xmlStream","openNode","workbookViewId","add","name","value","included","addAttribute","rightToLeft","tabSelected","showRuler","showRowColHeaders","showGridLines","zoomScale","zoomScaleNormal","style","topLeftCell","xSplit","ySplit","activePane","getAddress","address","leafNode","undefined","pane","activeCell","sqref","closeNode","parseOpen","node","sheetView","parseInt","attributes","view","selections","parseText","parseClose","selection","topLeft","reconcile","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/sheet-view-xform.js"],"sourcesContent":["const colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\n\nconst VIEW_STATES = {\n frozen: 'frozen',\n frozenSplit: 'frozen',\n split: 'split',\n};\n\nclass SheetViewXform extends BaseXform {\n get tag() {\n return 'sheetView';\n }\n\n prepare(model) {\n switch (model.state) {\n case 'frozen':\n case 'split':\n break;\n default:\n model.state = 'normal';\n break;\n }\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('sheetView', {\n workbookViewId: model.workbookViewId || 0,\n });\n const add = function(name, value, included) {\n if (included) {\n xmlStream.addAttribute(name, value);\n }\n };\n add('rightToLeft', '1', model.rightToLeft === true);\n add('tabSelected', '1', model.tabSelected);\n add('showRuler', '0', model.showRuler === false);\n add('showRowColHeaders', '0', model.showRowColHeaders === false);\n add('showGridLines', '0', model.showGridLines === false);\n add('zoomScale', model.zoomScale, model.zoomScale);\n add('zoomScaleNormal', model.zoomScaleNormal, model.zoomScaleNormal);\n add('view', model.style, model.style);\n\n let topLeftCell;\n let xSplit;\n let ySplit;\n let activePane;\n switch (model.state) {\n case 'frozen':\n xSplit = model.xSplit || 0;\n ySplit = model.ySplit || 0;\n topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address;\n activePane =\n (model.xSplit && model.ySplit && 'bottomRight') ||\n (model.xSplit && 'topRight') ||\n 'bottomLeft';\n\n xmlStream.leafNode('pane', {\n xSplit: model.xSplit || undefined,\n ySplit: model.ySplit || undefined,\n topLeftCell,\n activePane,\n state: 'frozen',\n });\n xmlStream.leafNode('selection', {\n pane: activePane,\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n break;\n case 'split':\n if (model.activePane === 'topLeft') {\n model.activePane = undefined;\n }\n xmlStream.leafNode('pane', {\n xSplit: model.xSplit || undefined,\n ySplit: model.ySplit || undefined,\n topLeftCell: model.topLeftCell,\n activePane: model.activePane,\n });\n xmlStream.leafNode('selection', {\n pane: model.activePane,\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n break;\n case 'normal':\n if (model.activeCell) {\n xmlStream.leafNode('selection', {\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n }\n break;\n default:\n break;\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'sheetView':\n this.sheetView = {\n workbookViewId: parseInt(node.attributes.workbookViewId, 10),\n rightToLeft: node.attributes.rightToLeft === '1',\n tabSelected: node.attributes.tabSelected === '1',\n showRuler: !(node.attributes.showRuler === '0'),\n showRowColHeaders: !(node.attributes.showRowColHeaders === '0'),\n showGridLines: !(node.attributes.showGridLines === '0'),\n zoomScale: parseInt(node.attributes.zoomScale || '100', 10),\n zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || '100', 10),\n style: node.attributes.view,\n };\n this.pane = undefined;\n this.selections = {};\n return true;\n\n case 'pane':\n this.pane = {\n xSplit: parseInt(node.attributes.xSplit || '0', 10),\n ySplit: parseInt(node.attributes.ySplit || '0', 10),\n topLeftCell: node.attributes.topLeftCell,\n activePane: node.attributes.activePane || 'topLeft',\n state: node.attributes.state,\n };\n return true;\n\n case 'selection': {\n const name = node.attributes.pane || 'topLeft';\n this.selections[name] = {\n pane: name,\n activeCell: node.attributes.activeCell,\n };\n return true;\n }\n\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n let model;\n let selection;\n switch (name) {\n case 'sheetView':\n if (this.sheetView && this.pane) {\n model = this.model = {\n workbookViewId: this.sheetView.workbookViewId,\n rightToLeft: this.sheetView.rightToLeft,\n state: VIEW_STATES[this.pane.state] || 'split', // split is default\n xSplit: this.pane.xSplit,\n ySplit: this.pane.ySplit,\n topLeftCell: this.pane.topLeftCell,\n showRuler: this.sheetView.showRuler,\n showRowColHeaders: this.sheetView.showRowColHeaders,\n showGridLines: this.sheetView.showGridLines,\n zoomScale: this.sheetView.zoomScale,\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\n };\n if (this.model.state === 'split') {\n model.activePane = this.pane.activePane;\n }\n selection = this.selections[this.pane.activePane];\n if (selection && selection.activeCell) {\n model.activeCell = selection.activeCell;\n }\n if (this.sheetView.style) {\n model.style = this.sheetView.style;\n }\n } else {\n model = this.model = {\n workbookViewId: this.sheetView.workbookViewId,\n rightToLeft: this.sheetView.rightToLeft,\n state: 'normal',\n showRuler: this.sheetView.showRuler,\n showRowColHeaders: this.sheetView.showRowColHeaders,\n showGridLines: this.sheetView.showGridLines,\n zoomScale: this.sheetView.zoomScale,\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\n };\n selection = this.selections.topLeft;\n if (selection && selection.activeCell) {\n model.activeCell = selection.activeCell;\n }\n if (this.sheetView.style) {\n model.style = this.sheetView.style;\n }\n }\n return false;\n default:\n return true;\n }\n }\n\n reconcile() {}\n}\n\nmodule.exports = SheetViewXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..1a7f7939a288c08d0556b7921c3d2e5837172f9f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js @@ -0,0 +1,32 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class TablePartXform extends BaseXform { + get tag() { + return 'tablePart'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode(this.tag, { + 'r:id': model.rId + }); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:id'] + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = TablePartXform; +//# sourceMappingURL=table-part-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..cc96238ba24c321a5252677dd6167f447adc6cb9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"table-part-xform.js","names":["BaseXform","require","TablePartXform","tag","render","xmlStream","model","leafNode","rId","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/table-part-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass TablePartXform extends BaseXform {\n get tag() {\n return 'tablePart';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TablePartXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,cAAc,SAASF,SAAS,CAAC;EACrC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACTD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;QAAC,MAAM,EAAEG,KAAK,CAACE;MAAG,CAAC,CAAC;IACnD;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,IAAI,CAACR,GAAG;QACX,IAAI,CAACG,KAAK,GAAG;UACXE,GAAG,EAAEE,IAAI,CAACE,UAAU,CAAC,MAAM;QAC7B,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGd,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..26a6bbf0f645fa45431390251eeb9af78fc66e7a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js @@ -0,0 +1,513 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const colCache = require('../../../utils/col-cache'); +const XmlStream = require('../../../utils/xml-stream'); +const RelType = require('../../rel-type'); +const Merges = require('./merges'); +const BaseXform = require('../base-xform'); +const ListXform = require('../list-xform'); +const RowXform = require('./row-xform'); +const ColXform = require('./col-xform'); +const DimensionXform = require('./dimension-xform'); +const HyperlinkXform = require('./hyperlink-xform'); +const MergeCellXform = require('./merge-cell-xform'); +const DataValidationsXform = require('./data-validations-xform'); +const SheetPropertiesXform = require('./sheet-properties-xform'); +const SheetFormatPropertiesXform = require('./sheet-format-properties-xform'); +const SheetViewXform = require('./sheet-view-xform'); +const SheetProtectionXform = require('./sheet-protection-xform'); +const PageMarginsXform = require('./page-margins-xform'); +const PageSetupXform = require('./page-setup-xform'); +const PrintOptionsXform = require('./print-options-xform'); +const AutoFilterXform = require('./auto-filter-xform'); +const PictureXform = require('./picture-xform'); +const DrawingXform = require('./drawing-xform'); +const TablePartXform = require('./table-part-xform'); +const RowBreaksXform = require('./row-breaks-xform'); +const HeaderFooterXform = require('./header-footer-xform'); +const ConditionalFormattingsXform = require('./cf/conditional-formattings-xform'); +const ExtListXform = require('./ext-lst-xform'); +const mergeRule = (rule, extRule) => { + Object.keys(extRule).forEach(key => { + const value = rule[key]; + const extValue = extRule[key]; + if (value === undefined && extValue !== undefined) { + rule[key] = extValue; + } + }); +}; +const mergeConditionalFormattings = (model, extModel) => { + // conditional formattings are rendered in worksheet.conditionalFormatting and also in + // worksheet.extLst.ext.x14:conditionalFormattings + // some (e.g. dataBar) are even spread across both! + if (!extModel || !extModel.length) { + return model; + } + if (!model || !model.length) { + return extModel; + } + + // index model rules by x14Id + const cfMap = {}; + const ruleMap = {}; + model.forEach(cf => { + cfMap[cf.ref] = cf; + cf.rules.forEach(rule => { + const { + x14Id + } = rule; + if (x14Id) { + ruleMap[x14Id] = rule; + } + }); + }); + extModel.forEach(extCf => { + extCf.rules.forEach(extRule => { + const rule = ruleMap[extRule.x14Id]; + if (rule) { + // merge with matching rule + mergeRule(rule, extRule); + } else if (cfMap[extCf.ref]) { + // reuse existing cf ref + cfMap[extCf.ref].rules.push(extRule); + } else { + // create new cf + model.push({ + ref: extCf.ref, + rules: [extRule] + }); + } + }); + }); + + // need to cope with rules in extModel that don't exist in model + return model; +}; +class WorkSheetXform extends BaseXform { + constructor(options) { + super(); + const { + maxRows, + maxCols, + ignoreNodes + } = options || {}; + this.ignoreNodes = ignoreNodes || []; + this.map = { + sheetPr: new SheetPropertiesXform(), + dimension: new DimensionXform(), + sheetViews: new ListXform({ + tag: 'sheetViews', + count: false, + childXform: new SheetViewXform() + }), + sheetFormatPr: new SheetFormatPropertiesXform(), + cols: new ListXform({ + tag: 'cols', + count: false, + childXform: new ColXform() + }), + sheetData: new ListXform({ + tag: 'sheetData', + count: false, + empty: true, + childXform: new RowXform({ + maxItems: maxCols + }), + maxItems: maxRows + }), + autoFilter: new AutoFilterXform(), + mergeCells: new ListXform({ + tag: 'mergeCells', + count: true, + childXform: new MergeCellXform() + }), + rowBreaks: new RowBreaksXform(), + hyperlinks: new ListXform({ + tag: 'hyperlinks', + count: false, + childXform: new HyperlinkXform() + }), + pageMargins: new PageMarginsXform(), + dataValidations: new DataValidationsXform(), + pageSetup: new PageSetupXform(), + headerFooter: new HeaderFooterXform(), + printOptions: new PrintOptionsXform(), + picture: new PictureXform(), + drawing: new DrawingXform(), + sheetProtection: new SheetProtectionXform(), + tableParts: new ListXform({ + tag: 'tableParts', + count: true, + childXform: new TablePartXform() + }), + conditionalFormatting: new ConditionalFormattingsXform(), + extLst: new ExtListXform() + }; + } + prepare(model, options) { + options.merges = new Merges(); + model.hyperlinks = options.hyperlinks = []; + model.comments = options.comments = []; + options.formulae = {}; + options.siFormulae = 0; + this.map.cols.prepare(model.cols, options); + this.map.sheetData.prepare(model.rows, options); + this.map.conditionalFormatting.prepare(model.conditionalFormattings, options); + model.mergeCells = options.merges.mergeCells; + + // prepare relationships + const rels = model.rels = []; + function nextRid(r) { + return `rId${r.length + 1}`; + } + model.hyperlinks.forEach(hyperlink => { + const rId = nextRid(rels); + hyperlink.rId = rId; + rels.push({ + Id: rId, + Type: RelType.Hyperlink, + Target: hyperlink.target, + TargetMode: 'External' + }); + }); + + // prepare comment relationships + if (model.comments.length > 0) { + const comment = { + Id: nextRid(rels), + Type: RelType.Comments, + Target: `../comments${model.id}.xml` + }; + rels.push(comment); + const vmlDrawing = { + Id: nextRid(rels), + Type: RelType.VmlDrawing, + Target: `../drawings/vmlDrawing${model.id}.vml` + }; + rels.push(vmlDrawing); + model.comments.forEach(item => { + item.refAddress = colCache.decodeAddress(item.ref); + }); + options.commentRefs.push({ + commentName: `comments${model.id}`, + vmlDrawing: `vmlDrawing${model.id}` + }); + } + const drawingRelsHash = []; + let bookImage; + model.media.forEach(medium => { + if (medium.type === 'background') { + const rId = nextRid(rels); + bookImage = options.media[medium.imageId]; + rels.push({ + Id: rId, + Type: RelType.Image, + Target: `../media/${bookImage.name}.${bookImage.extension}` + }); + model.background = { + rId + }; + model.image = options.media[medium.imageId]; + } else if (medium.type === 'image') { + let { + drawing + } = model; + bookImage = options.media[medium.imageId]; + if (!drawing) { + drawing = model.drawing = { + rId: nextRid(rels), + name: `drawing${++options.drawingsCount}`, + anchors: [], + rels: [] + }; + options.drawings.push(drawing); + rels.push({ + Id: drawing.rId, + Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + Target: `../drawings/${drawing.name}.xml` + }); + } + let rIdImage = this.preImageId === medium.imageId ? drawingRelsHash[medium.imageId] : drawingRelsHash[drawing.rels.length]; + if (!rIdImage) { + rIdImage = nextRid(drawing.rels); + drawingRelsHash[drawing.rels.length] = rIdImage; + drawing.rels.push({ + Id: rIdImage, + Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + Target: `../media/${bookImage.name}.${bookImage.extension}` + }); + } + const anchor = { + picture: { + rId: rIdImage + }, + range: medium.range + }; + if (medium.hyperlinks && medium.hyperlinks.hyperlink) { + const rIdHyperLink = nextRid(drawing.rels); + drawingRelsHash[drawing.rels.length] = rIdHyperLink; + anchor.picture.hyperlinks = { + tooltip: medium.hyperlinks.tooltip, + rId: rIdHyperLink + }; + drawing.rels.push({ + Id: rIdHyperLink, + Type: RelType.Hyperlink, + Target: medium.hyperlinks.hyperlink, + TargetMode: 'External' + }); + } + this.preImageId = medium.imageId; + drawing.anchors.push(anchor); + } + }); + + // prepare tables + model.tables.forEach(table => { + // relationships + const rId = nextRid(rels); + table.rId = rId; + rels.push({ + Id: rId, + Type: RelType.Table, + Target: `../tables/${table.target}` + }); + + // dynamic styles + table.columns.forEach(column => { + const { + style + } = column; + if (style) { + column.dxfId = options.styles.addDxfStyle(style); + } + }); + }); + + // prepare ext items + this.map.extLst.prepare(model, options); + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('worksheet', WorkSheetXform.WORKSHEET_ATTRIBUTES); + const sheetFormatPropertiesModel = model.properties ? { + defaultRowHeight: model.properties.defaultRowHeight, + dyDescent: model.properties.dyDescent, + outlineLevelCol: model.properties.outlineLevelCol, + outlineLevelRow: model.properties.outlineLevelRow + } : undefined; + if (model.properties && model.properties.defaultColWidth) { + sheetFormatPropertiesModel.defaultColWidth = model.properties.defaultColWidth; + } + const sheetPropertiesModel = { + outlineProperties: model.properties && model.properties.outlineProperties, + tabColor: model.properties && model.properties.tabColor, + pageSetup: model.pageSetup && model.pageSetup.fitToPage ? { + fitToPage: model.pageSetup.fitToPage + } : undefined + }; + const pageMarginsModel = model.pageSetup && model.pageSetup.margins; + const printOptionsModel = { + showRowColHeaders: model.pageSetup && model.pageSetup.showRowColHeaders, + showGridLines: model.pageSetup && model.pageSetup.showGridLines, + horizontalCentered: model.pageSetup && model.pageSetup.horizontalCentered, + verticalCentered: model.pageSetup && model.pageSetup.verticalCentered + }; + const sheetProtectionModel = model.sheetProtection; + this.map.sheetPr.render(xmlStream, sheetPropertiesModel); + this.map.dimension.render(xmlStream, model.dimensions); + this.map.sheetViews.render(xmlStream, model.views); + this.map.sheetFormatPr.render(xmlStream, sheetFormatPropertiesModel); + this.map.cols.render(xmlStream, model.cols); + this.map.sheetData.render(xmlStream, model.rows); + this.map.sheetProtection.render(xmlStream, sheetProtectionModel); // Note: must be after sheetData and before autoFilter + this.map.autoFilter.render(xmlStream, model.autoFilter); + this.map.mergeCells.render(xmlStream, model.mergeCells); + this.map.conditionalFormatting.render(xmlStream, model.conditionalFormattings); // Note: must be before dataValidations + this.map.dataValidations.render(xmlStream, model.dataValidations); + + // For some reason hyperlinks have to be after the data validations + this.map.hyperlinks.render(xmlStream, model.hyperlinks); + this.map.printOptions.render(xmlStream, printOptionsModel); // Note: must be before pageMargins + this.map.pageMargins.render(xmlStream, pageMarginsModel); + this.map.pageSetup.render(xmlStream, model.pageSetup); + this.map.headerFooter.render(xmlStream, model.headerFooter); + this.map.rowBreaks.render(xmlStream, model.rowBreaks); + this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks + this.map.picture.render(xmlStream, model.background); // Note: must be after drawing + this.map.tableParts.render(xmlStream, model.tables); + this.map.extLst.render(xmlStream, model); + if (model.rels) { + // add a node for each comment + model.rels.forEach(rel => { + if (rel.Type === RelType.VmlDrawing) { + xmlStream.leafNode('legacyDrawing', { + 'r:id': rel.Id + }); + } + }); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === 'worksheet') { + _.each(this.map, xform => { + xform.reset(); + }); + return true; + } + if (this.map[node.name] && !this.ignoreNodes.includes(node.name)) { + this.parser = this.map[node.name]; + this.parser.parseOpen(node); + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'worksheet': + { + const properties = this.map.sheetFormatPr.model || {}; + if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) { + properties.tabColor = this.map.sheetPr.model.tabColor; + } + if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) { + properties.outlineProperties = this.map.sheetPr.model.outlineProperties; + } + const sheetProperties = { + fitToPage: this.map.sheetPr.model && this.map.sheetPr.model.pageSetup && this.map.sheetPr.model.pageSetup.fitToPage || false, + margins: this.map.pageMargins.model + }; + const pageSetup = Object.assign(sheetProperties, this.map.pageSetup.model, this.map.printOptions.model); + const conditionalFormattings = mergeConditionalFormattings(this.map.conditionalFormatting.model, this.map.extLst.model && this.map.extLst.model['x14:conditionalFormattings']); + this.model = { + dimensions: this.map.dimension.model, + cols: this.map.cols.model, + rows: this.map.sheetData.model, + mergeCells: this.map.mergeCells.model, + hyperlinks: this.map.hyperlinks.model, + dataValidations: this.map.dataValidations.model, + properties, + views: this.map.sheetViews.model, + pageSetup, + headerFooter: this.map.headerFooter.model, + background: this.map.picture.model, + drawing: this.map.drawing.model, + tables: this.map.tableParts.model, + conditionalFormattings + }; + if (this.map.autoFilter.model) { + this.model.autoFilter = this.map.autoFilter.model; + } + if (this.map.sheetProtection.model) { + this.model.sheetProtection = this.map.sheetProtection.model; + } + return false; + } + default: + // not quite sure how we get here! + return true; + } + } + reconcile(model, options) { + // options.merges = new Merges(); + // options.merges.reconcile(model.mergeCells, model.rows); + const rels = (model.relationships || []).reduce((h, rel) => { + h[rel.Id] = rel; + if (rel.Type === RelType.Comments) { + model.comments = options.comments[rel.Target].comments; + } + if (rel.Type === RelType.VmlDrawing && model.comments && model.comments.length) { + const vmlComment = options.vmlDrawings[rel.Target].comments; + model.comments.forEach((comment, index) => { + comment.note = Object.assign({}, comment.note, vmlComment[index]); + }); + } + return h; + }, {}); + options.commentsMap = (model.comments || []).reduce((h, comment) => { + if (comment.ref) { + h[comment.ref] = comment; + } + return h; + }, {}); + options.hyperlinkMap = (model.hyperlinks || []).reduce((h, hyperlink) => { + if (hyperlink.rId) { + h[hyperlink.address] = rels[hyperlink.rId].Target; + } + return h; + }, {}); + options.formulae = {}; + + // compact the rows and cells + model.rows = model.rows && model.rows.filter(Boolean) || []; + model.rows.forEach(row => { + row.cells = row.cells && row.cells.filter(Boolean) || []; + }); + this.map.cols.reconcile(model.cols, options); + this.map.sheetData.reconcile(model.rows, options); + this.map.conditionalFormatting.reconcile(model.conditionalFormattings, options); + model.media = []; + if (model.drawing) { + const drawingRel = rels[model.drawing.rId]; + const match = drawingRel.Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/); + if (match) { + const drawingName = match[1]; + const drawing = options.drawings[drawingName]; + drawing.anchors.forEach(anchor => { + if (anchor.medium) { + const image = { + type: 'image', + imageId: anchor.medium.index, + range: anchor.range, + hyperlinks: anchor.picture.hyperlinks + }; + model.media.push(image); + } + }); + } + } + const backgroundRel = model.background && rels[model.background.rId]; + if (backgroundRel) { + const target = backgroundRel.Target.split('/media/')[1]; + const imageId = options.mediaIndex && options.mediaIndex[target]; + if (imageId !== undefined) { + model.media.push({ + type: 'background', + imageId + }); + } + } + model.tables = (model.tables || []).map(tablePart => { + const rel = rels[tablePart.rId]; + return options.tables[rel.Target]; + }); + delete model.relationships; + delete model.hyperlinks; + delete model.comments; + } +} +WorkSheetXform.WORKSHEET_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'x14ac', + 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac' +}; +module.exports = WorkSheetXform; +//# sourceMappingURL=worksheet-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f3c92b62e971985ff4cf12a9e97cdb85baaf9a41 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"worksheet-xform.js","names":["_","require","colCache","XmlStream","RelType","Merges","BaseXform","ListXform","RowXform","ColXform","DimensionXform","HyperlinkXform","MergeCellXform","DataValidationsXform","SheetPropertiesXform","SheetFormatPropertiesXform","SheetViewXform","SheetProtectionXform","PageMarginsXform","PageSetupXform","PrintOptionsXform","AutoFilterXform","PictureXform","DrawingXform","TablePartXform","RowBreaksXform","HeaderFooterXform","ConditionalFormattingsXform","ExtListXform","mergeRule","rule","extRule","Object","keys","forEach","key","value","extValue","undefined","mergeConditionalFormattings","model","extModel","length","cfMap","ruleMap","cf","ref","rules","x14Id","extCf","push","WorkSheetXform","constructor","options","maxRows","maxCols","ignoreNodes","map","sheetPr","dimension","sheetViews","tag","count","childXform","sheetFormatPr","cols","sheetData","empty","maxItems","autoFilter","mergeCells","rowBreaks","hyperlinks","pageMargins","dataValidations","pageSetup","headerFooter","printOptions","picture","drawing","sheetProtection","tableParts","conditionalFormatting","extLst","prepare","merges","comments","formulae","siFormulae","rows","conditionalFormattings","rels","nextRid","r","hyperlink","rId","Id","Type","Hyperlink","Target","target","TargetMode","comment","Comments","id","vmlDrawing","VmlDrawing","item","refAddress","decodeAddress","commentRefs","commentName","drawingRelsHash","bookImage","media","medium","type","imageId","Image","name","extension","background","image","drawingsCount","anchors","drawings","rIdImage","preImageId","anchor","range","rIdHyperLink","tooltip","tables","table","Table","columns","column","style","dxfId","styles","addDxfStyle","render","xmlStream","openXml","StdDocAttributes","openNode","WORKSHEET_ATTRIBUTES","sheetFormatPropertiesModel","properties","defaultRowHeight","dyDescent","outlineLevelCol","outlineLevelRow","defaultColWidth","sheetPropertiesModel","outlineProperties","tabColor","fitToPage","pageMarginsModel","margins","printOptionsModel","showRowColHeaders","showGridLines","horizontalCentered","verticalCentered","sheetProtectionModel","dimensions","views","rel","leafNode","closeNode","parseOpen","node","parser","each","xform","reset","includes","parseText","text","parseClose","sheetProperties","assign","reconcile","relationships","reduce","h","vmlComment","vmlDrawings","index","note","commentsMap","hyperlinkMap","address","filter","Boolean","row","cells","drawingRel","match","drawingName","backgroundRel","split","mediaIndex","tablePart","xmlns","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/worksheet-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst RelType = require('../../rel-type');\n\nconst Merges = require('./merges');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\nconst RowXform = require('./row-xform');\nconst ColXform = require('./col-xform');\nconst DimensionXform = require('./dimension-xform');\nconst HyperlinkXform = require('./hyperlink-xform');\nconst MergeCellXform = require('./merge-cell-xform');\nconst DataValidationsXform = require('./data-validations-xform');\nconst SheetPropertiesXform = require('./sheet-properties-xform');\nconst SheetFormatPropertiesXform = require('./sheet-format-properties-xform');\nconst SheetViewXform = require('./sheet-view-xform');\nconst SheetProtectionXform = require('./sheet-protection-xform');\nconst PageMarginsXform = require('./page-margins-xform');\nconst PageSetupXform = require('./page-setup-xform');\nconst PrintOptionsXform = require('./print-options-xform');\nconst AutoFilterXform = require('./auto-filter-xform');\nconst PictureXform = require('./picture-xform');\nconst DrawingXform = require('./drawing-xform');\nconst TablePartXform = require('./table-part-xform');\nconst RowBreaksXform = require('./row-breaks-xform');\nconst HeaderFooterXform = require('./header-footer-xform');\nconst ConditionalFormattingsXform = require('./cf/conditional-formattings-xform');\nconst ExtListXform = require('./ext-lst-xform');\n\nconst mergeRule = (rule, extRule) => {\n Object.keys(extRule).forEach(key => {\n const value = rule[key];\n const extValue = extRule[key];\n if (value === undefined && extValue !== undefined) {\n rule[key] = extValue;\n }\n });\n};\n\nconst mergeConditionalFormattings = (model, extModel) => {\n // conditional formattings are rendered in worksheet.conditionalFormatting and also in\n // worksheet.extLst.ext.x14:conditionalFormattings\n // some (e.g. dataBar) are even spread across both!\n if (!extModel || !extModel.length) {\n return model;\n }\n if (!model || !model.length) {\n return extModel;\n }\n\n // index model rules by x14Id\n const cfMap = {};\n const ruleMap = {};\n model.forEach(cf => {\n cfMap[cf.ref] = cf;\n cf.rules.forEach(rule => {\n const {x14Id} = rule;\n if (x14Id) {\n ruleMap[x14Id] = rule;\n }\n });\n });\n\n extModel.forEach(extCf => {\n extCf.rules.forEach(extRule => {\n const rule = ruleMap[extRule.x14Id];\n if (rule) {\n // merge with matching rule\n mergeRule(rule, extRule);\n } else if (cfMap[extCf.ref]) {\n // reuse existing cf ref\n cfMap[extCf.ref].rules.push(extRule);\n } else {\n // create new cf\n model.push({\n ref: extCf.ref,\n rules: [extRule],\n });\n }\n });\n });\n\n // need to cope with rules in extModel that don't exist in model\n return model;\n};\n\nclass WorkSheetXform extends BaseXform {\n constructor(options) {\n super();\n\n const {maxRows, maxCols, ignoreNodes} = options || {};\n\n this.ignoreNodes = ignoreNodes || [];\n\n this.map = {\n sheetPr: new SheetPropertiesXform(),\n dimension: new DimensionXform(),\n sheetViews: new ListXform({\n tag: 'sheetViews',\n count: false,\n childXform: new SheetViewXform(),\n }),\n sheetFormatPr: new SheetFormatPropertiesXform(),\n cols: new ListXform({tag: 'cols', count: false, childXform: new ColXform()}),\n sheetData: new ListXform({\n tag: 'sheetData',\n count: false,\n empty: true,\n childXform: new RowXform({maxItems: maxCols}),\n maxItems: maxRows,\n }),\n autoFilter: new AutoFilterXform(),\n mergeCells: new ListXform({tag: 'mergeCells', count: true, childXform: new MergeCellXform()}),\n rowBreaks: new RowBreaksXform(),\n hyperlinks: new ListXform({\n tag: 'hyperlinks',\n count: false,\n childXform: new HyperlinkXform(),\n }),\n pageMargins: new PageMarginsXform(),\n dataValidations: new DataValidationsXform(),\n pageSetup: new PageSetupXform(),\n headerFooter: new HeaderFooterXform(),\n printOptions: new PrintOptionsXform(),\n picture: new PictureXform(),\n drawing: new DrawingXform(),\n sheetProtection: new SheetProtectionXform(),\n tableParts: new ListXform({tag: 'tableParts', count: true, childXform: new TablePartXform()}),\n conditionalFormatting: new ConditionalFormattingsXform(),\n extLst: new ExtListXform(),\n };\n }\n\n prepare(model, options) {\n options.merges = new Merges();\n model.hyperlinks = options.hyperlinks = [];\n model.comments = options.comments = [];\n\n options.formulae = {};\n options.siFormulae = 0;\n this.map.cols.prepare(model.cols, options);\n this.map.sheetData.prepare(model.rows, options);\n this.map.conditionalFormatting.prepare(model.conditionalFormattings, options);\n\n model.mergeCells = options.merges.mergeCells;\n\n // prepare relationships\n const rels = (model.rels = []);\n\n function nextRid(r) {\n return `rId${r.length + 1}`;\n }\n\n model.hyperlinks.forEach(hyperlink => {\n const rId = nextRid(rels);\n hyperlink.rId = rId;\n rels.push({\n Id: rId,\n Type: RelType.Hyperlink,\n Target: hyperlink.target,\n TargetMode: 'External',\n });\n });\n\n // prepare comment relationships\n if (model.comments.length > 0) {\n const comment = {\n Id: nextRid(rels),\n Type: RelType.Comments,\n Target: `../comments${model.id}.xml`,\n };\n rels.push(comment);\n const vmlDrawing = {\n Id: nextRid(rels),\n Type: RelType.VmlDrawing,\n Target: `../drawings/vmlDrawing${model.id}.vml`,\n };\n rels.push(vmlDrawing);\n\n model.comments.forEach(item => {\n item.refAddress = colCache.decodeAddress(item.ref);\n });\n\n options.commentRefs.push({\n commentName: `comments${model.id}`,\n vmlDrawing: `vmlDrawing${model.id}`,\n });\n }\n\n const drawingRelsHash = [];\n let bookImage;\n model.media.forEach(medium => {\n if (medium.type === 'background') {\n const rId = nextRid(rels);\n bookImage = options.media[medium.imageId];\n rels.push({\n Id: rId,\n Type: RelType.Image,\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\n });\n model.background = {\n rId,\n };\n model.image = options.media[medium.imageId];\n } else if (medium.type === 'image') {\n let {drawing} = model;\n bookImage = options.media[medium.imageId];\n if (!drawing) {\n drawing = model.drawing = {\n rId: nextRid(rels),\n name: `drawing${++options.drawingsCount}`,\n anchors: [],\n rels: [],\n };\n options.drawings.push(drawing);\n rels.push({\n Id: drawing.rId,\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',\n Target: `../drawings/${drawing.name}.xml`,\n });\n }\n let rIdImage =\n this.preImageId === medium.imageId ? drawingRelsHash[medium.imageId] : drawingRelsHash[drawing.rels.length];\n if (!rIdImage) {\n rIdImage = nextRid(drawing.rels);\n drawingRelsHash[drawing.rels.length] = rIdImage;\n drawing.rels.push({\n Id: rIdImage,\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\n });\n }\n\n const anchor = {\n picture: {\n rId: rIdImage,\n },\n range: medium.range,\n };\n if (medium.hyperlinks && medium.hyperlinks.hyperlink) {\n const rIdHyperLink = nextRid(drawing.rels);\n drawingRelsHash[drawing.rels.length] = rIdHyperLink;\n anchor.picture.hyperlinks = {\n tooltip: medium.hyperlinks.tooltip,\n rId: rIdHyperLink,\n };\n drawing.rels.push({\n Id: rIdHyperLink,\n Type: RelType.Hyperlink,\n Target: medium.hyperlinks.hyperlink,\n TargetMode: 'External',\n });\n }\n this.preImageId = medium.imageId;\n drawing.anchors.push(anchor);\n }\n });\n\n // prepare tables\n model.tables.forEach(table => {\n // relationships\n const rId = nextRid(rels);\n table.rId = rId;\n rels.push({\n Id: rId,\n Type: RelType.Table,\n Target: `../tables/${table.target}`,\n });\n\n // dynamic styles\n table.columns.forEach(column => {\n const {style} = column;\n if (style) {\n column.dxfId = options.styles.addDxfStyle(style);\n }\n });\n });\n\n // prepare ext items\n this.map.extLst.prepare(model, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('worksheet', WorkSheetXform.WORKSHEET_ATTRIBUTES);\n\n const sheetFormatPropertiesModel = model.properties\n ? {\n defaultRowHeight: model.properties.defaultRowHeight,\n dyDescent: model.properties.dyDescent,\n outlineLevelCol: model.properties.outlineLevelCol,\n outlineLevelRow: model.properties.outlineLevelRow,\n }\n : undefined;\n if (model.properties && model.properties.defaultColWidth) {\n sheetFormatPropertiesModel.defaultColWidth = model.properties.defaultColWidth;\n }\n const sheetPropertiesModel = {\n outlineProperties: model.properties && model.properties.outlineProperties,\n tabColor: model.properties && model.properties.tabColor,\n pageSetup:\n model.pageSetup && model.pageSetup.fitToPage\n ? {\n fitToPage: model.pageSetup.fitToPage,\n }\n : undefined,\n };\n const pageMarginsModel = model.pageSetup && model.pageSetup.margins;\n const printOptionsModel = {\n showRowColHeaders: model.pageSetup && model.pageSetup.showRowColHeaders,\n showGridLines: model.pageSetup && model.pageSetup.showGridLines,\n horizontalCentered: model.pageSetup && model.pageSetup.horizontalCentered,\n verticalCentered: model.pageSetup && model.pageSetup.verticalCentered,\n };\n const sheetProtectionModel = model.sheetProtection;\n\n this.map.sheetPr.render(xmlStream, sheetPropertiesModel);\n this.map.dimension.render(xmlStream, model.dimensions);\n this.map.sheetViews.render(xmlStream, model.views);\n this.map.sheetFormatPr.render(xmlStream, sheetFormatPropertiesModel);\n this.map.cols.render(xmlStream, model.cols);\n this.map.sheetData.render(xmlStream, model.rows);\n this.map.sheetProtection.render(xmlStream, sheetProtectionModel); // Note: must be after sheetData and before autoFilter\n this.map.autoFilter.render(xmlStream, model.autoFilter);\n this.map.mergeCells.render(xmlStream, model.mergeCells);\n this.map.conditionalFormatting.render(xmlStream, model.conditionalFormattings); // Note: must be before dataValidations\n this.map.dataValidations.render(xmlStream, model.dataValidations);\n\n // For some reason hyperlinks have to be after the data validations\n this.map.hyperlinks.render(xmlStream, model.hyperlinks);\n\n this.map.printOptions.render(xmlStream, printOptionsModel); // Note: must be before pageMargins\n this.map.pageMargins.render(xmlStream, pageMarginsModel);\n this.map.pageSetup.render(xmlStream, model.pageSetup);\n this.map.headerFooter.render(xmlStream, model.headerFooter);\n this.map.rowBreaks.render(xmlStream, model.rowBreaks);\n this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks\n this.map.picture.render(xmlStream, model.background); // Note: must be after drawing\n this.map.tableParts.render(xmlStream, model.tables);\n\n this.map.extLst.render(xmlStream, model);\n\n if (model.rels) {\n // add a node for each comment\n model.rels.forEach(rel => {\n if (rel.Type === RelType.VmlDrawing) {\n xmlStream.leafNode('legacyDrawing', {'r:id': rel.Id});\n }\n });\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n if (node.name === 'worksheet') {\n _.each(this.map, xform => {\n xform.reset();\n });\n return true;\n }\n\n if (this.map[node.name] && !this.ignoreNodes.includes(node.name)) {\n this.parser = this.map[node.name];\n this.parser.parseOpen(node);\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'worksheet': {\n const properties = this.map.sheetFormatPr.model || {};\n if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) {\n properties.tabColor = this.map.sheetPr.model.tabColor;\n }\n if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) {\n properties.outlineProperties = this.map.sheetPr.model.outlineProperties;\n }\n const sheetProperties = {\n fitToPage:\n (this.map.sheetPr.model &&\n this.map.sheetPr.model.pageSetup &&\n this.map.sheetPr.model.pageSetup.fitToPage) ||\n false,\n margins: this.map.pageMargins.model,\n };\n const pageSetup = Object.assign(sheetProperties, this.map.pageSetup.model, this.map.printOptions.model);\n const conditionalFormattings = mergeConditionalFormattings(\n this.map.conditionalFormatting.model,\n this.map.extLst.model && this.map.extLst.model['x14:conditionalFormattings']\n );\n this.model = {\n dimensions: this.map.dimension.model,\n cols: this.map.cols.model,\n rows: this.map.sheetData.model,\n mergeCells: this.map.mergeCells.model,\n hyperlinks: this.map.hyperlinks.model,\n dataValidations: this.map.dataValidations.model,\n properties,\n views: this.map.sheetViews.model,\n pageSetup,\n headerFooter: this.map.headerFooter.model,\n background: this.map.picture.model,\n drawing: this.map.drawing.model,\n tables: this.map.tableParts.model,\n conditionalFormattings,\n };\n\n if (this.map.autoFilter.model) {\n this.model.autoFilter = this.map.autoFilter.model;\n }\n if (this.map.sheetProtection.model) {\n this.model.sheetProtection = this.map.sheetProtection.model;\n }\n\n return false;\n }\n\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model, options) {\n // options.merges = new Merges();\n // options.merges.reconcile(model.mergeCells, model.rows);\n const rels = (model.relationships || []).reduce((h, rel) => {\n h[rel.Id] = rel;\n if (rel.Type === RelType.Comments) {\n model.comments = options.comments[rel.Target].comments;\n }\n if (rel.Type === RelType.VmlDrawing && model.comments && model.comments.length) {\n const vmlComment = options.vmlDrawings[rel.Target].comments;\n model.comments.forEach((comment, index) => {\n comment.note = Object.assign({}, comment.note, vmlComment[index]);\n });\n }\n return h;\n }, {});\n options.commentsMap = (model.comments || []).reduce((h, comment) => {\n if (comment.ref) {\n h[comment.ref] = comment;\n }\n return h;\n }, {});\n options.hyperlinkMap = (model.hyperlinks || []).reduce((h, hyperlink) => {\n if (hyperlink.rId) {\n h[hyperlink.address] = rels[hyperlink.rId].Target;\n }\n return h;\n }, {});\n options.formulae = {};\n\n // compact the rows and cells\n model.rows = (model.rows && model.rows.filter(Boolean)) || [];\n model.rows.forEach(row => {\n row.cells = (row.cells && row.cells.filter(Boolean)) || [];\n });\n\n this.map.cols.reconcile(model.cols, options);\n this.map.sheetData.reconcile(model.rows, options);\n this.map.conditionalFormatting.reconcile(model.conditionalFormattings, options);\n\n model.media = [];\n if (model.drawing) {\n const drawingRel = rels[model.drawing.rId];\n const match = drawingRel.Target.match(/\\/drawings\\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);\n if (match) {\n const drawingName = match[1];\n const drawing = options.drawings[drawingName];\n drawing.anchors.forEach(anchor => {\n if (anchor.medium) {\n const image = {\n type: 'image',\n imageId: anchor.medium.index,\n range: anchor.range,\n hyperlinks: anchor.picture.hyperlinks,\n };\n model.media.push(image);\n }\n });\n }\n }\n\n const backgroundRel = model.background && rels[model.background.rId];\n if (backgroundRel) {\n const target = backgroundRel.Target.split('/media/')[1];\n const imageId = options.mediaIndex && options.mediaIndex[target];\n if (imageId !== undefined) {\n model.media.push({\n type: 'background',\n imageId,\n });\n }\n }\n\n model.tables = (model.tables || []).map(tablePart => {\n const rel = rels[tablePart.rId];\n return options.tables[rel.Target];\n });\n\n delete model.relationships;\n delete model.hyperlinks;\n delete model.comments;\n }\n}\n\nWorkSheetXform.WORKSHEET_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x14ac',\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\n};\n\nmodule.exports = WorkSheetXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..0b0cd5b779ba83010c7c6ac69e2b38007749166d --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js @@ -0,0 +1,27 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class BooleanXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + } + render(xmlStream, model) { + if (model) { + xmlStream.openNode(this.tag); + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = true; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = BooleanXform; +//# sourceMappingURL=boolean-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..88dd70bb113bd095e321bde76788b2832dc24391 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"boolean-xform.js","names":["BaseXform","require","BooleanXform","constructor","options","tag","attr","render","xmlStream","model","openNode","closeNode","parseOpen","node","name","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/simple/boolean-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass BooleanXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.tag);\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = BooleanXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,YAAY,SAASF,SAAS,CAAC;EACnCG,WAAWA,CAACC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAGD,OAAO,CAACC,GAAG;IACtB,IAAI,CAACC,IAAI,GAAGF,OAAO,CAACE,IAAI;EAC1B;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACTD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACL,GAAG,CAAC;MAC5BG,SAAS,CAACG,SAAS,CAAC,CAAC;IACvB;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACT,GAAG,EAAE;MAC1B,IAAI,CAACI,KAAK,GAAG,IAAI;IACnB;EACF;EAEAM,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGhB,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..9cc79160ed53a99ff88df4b8f2570c28aca26457 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js @@ -0,0 +1,58 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class DateXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + this._format = options.format || function (dt) { + try { + if (Number.isNaN(dt.getTime())) return ''; + return dt.toISOString(); + } catch (e) { + return ''; + } + }; + this._parse = options.parse || function (str) { + return new Date(str); + }; + } + render(xmlStream, model) { + if (model) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, this._format(model)); + } else { + xmlStream.writeText(this._format(model)); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = this._parse(node.attributes[this.attr]); + } else { + this.text = []; + } + } + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = this._parse(this.text.join('')); + } + return false; + } +} +module.exports = DateXform; +//# sourceMappingURL=date-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..9e655708ae0373810955c8c0c3bcf3138242199e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"date-xform.js","names":["BaseXform","require","DateXform","constructor","options","tag","attr","attrs","_format","format","dt","Number","isNaN","getTime","toISOString","e","_parse","parse","str","Date","render","xmlStream","model","openNode","addAttributes","addAttribute","writeText","closeNode","parseOpen","node","name","attributes","text","parseText","push","parseClose","join","module","exports"],"sources":["../../../../../lib/xlsx/xform/simple/date-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass DateXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n this._format =\n options.format ||\n function(dt) {\n try {\n if (Number.isNaN(dt.getTime())) return '';\n return dt.toISOString();\n } catch (e) {\n return '';\n }\n };\n this._parse =\n options.parse ||\n function(str) {\n return new Date(str);\n };\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, this._format(model));\n } else {\n xmlStream.writeText(this._format(model));\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = this._parse(node.attributes[this.attr]);\n } else {\n this.text = [];\n }\n }\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = this._parse(this.text.join(''));\n }\n return false;\n }\n}\n\nmodule.exports = DateXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,SAAS,SAASF,SAAS,CAAC;EAChCG,WAAWA,CAACC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAGD,OAAO,CAACC,GAAG;IACtB,IAAI,CAACC,IAAI,GAAGF,OAAO,CAACE,IAAI;IACxB,IAAI,CAACC,KAAK,GAAGH,OAAO,CAACG,KAAK;IAC1B,IAAI,CAACC,OAAO,GACVJ,OAAO,CAACK,MAAM,IACd,UAASC,EAAE,EAAE;MACX,IAAI;QACF,IAAIC,MAAM,CAACC,KAAK,CAACF,EAAE,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;QACzC,OAAOH,EAAE,CAACI,WAAW,CAAC,CAAC;MACzB,CAAC,CAAC,OAAOC,CAAC,EAAE;QACV,OAAO,EAAE;MACX;IACF,CAAC;IACH,IAAI,CAACC,MAAM,GACTZ,OAAO,CAACa,KAAK,IACb,UAASC,GAAG,EAAE;MACZ,OAAO,IAAIC,IAAI,CAACD,GAAG,CAAC;IACtB,CAAC;EACL;EAEAE,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACTD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAAClB,GAAG,CAAC;MAC5B,IAAI,IAAI,CAACE,KAAK,EAAE;QACdc,SAAS,CAACG,aAAa,CAAC,IAAI,CAACjB,KAAK,CAAC;MACrC;MACA,IAAI,IAAI,CAACD,IAAI,EAAE;QACbe,SAAS,CAACI,YAAY,CAAC,IAAI,CAACnB,IAAI,EAAE,IAAI,CAACE,OAAO,CAACc,KAAK,CAAC,CAAC;MACxD,CAAC,MAAM;QACLD,SAAS,CAACK,SAAS,CAAC,IAAI,CAAClB,OAAO,CAACc,KAAK,CAAC,CAAC;MAC1C;MACAD,SAAS,CAACM,SAAS,CAAC,CAAC;IACvB;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACzB,GAAG,EAAE;MAC1B,IAAI,IAAI,CAACC,IAAI,EAAE;QACb,IAAI,CAACgB,KAAK,GAAG,IAAI,CAACN,MAAM,CAACa,IAAI,CAACE,UAAU,CAAC,IAAI,CAACzB,IAAI,CAAC,CAAC;MACtD,CAAC,MAAM;QACL,IAAI,CAAC0B,IAAI,GAAG,EAAE;MAChB;IACF;EACF;EAEAC,SAASA,CAACD,IAAI,EAAE;IACd,IAAI,CAAC,IAAI,CAAC1B,IAAI,EAAE;MACd,IAAI,CAAC0B,IAAI,CAACE,IAAI,CAACF,IAAI,CAAC;IACtB;EACF;EAEAG,UAAUA,CAAA,EAAG;IACX,IAAI,CAAC,IAAI,CAAC7B,IAAI,EAAE;MACd,IAAI,CAACgB,KAAK,GAAG,IAAI,CAACN,MAAM,CAAC,IAAI,CAACgB,IAAI,CAACI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C;IACA,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGpC,SAAS"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..1b3843a9a0edb976495bb2d2f6cae60465b3681e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js @@ -0,0 +1,47 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class FloatXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + } + render(xmlStream, model) { + if (model !== undefined) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, model); + } else { + xmlStream.writeText(model); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = parseFloat(node.attributes[this.attr]); + } else { + this.text = []; + } + } + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = parseFloat(this.text.join('')); + } + return false; + } +} +module.exports = FloatXform; +//# sourceMappingURL=float-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..038257676b3b6dc0ecd8e6a7daea0898fa4e65d5 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"float-xform.js","names":["BaseXform","require","FloatXform","constructor","options","tag","attr","attrs","render","xmlStream","model","undefined","openNode","addAttributes","addAttribute","writeText","closeNode","parseOpen","node","name","parseFloat","attributes","text","parseText","push","parseClose","join","module","exports"],"sources":["../../../../../lib/xlsx/xform/simple/float-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass FloatXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n }\n\n render(xmlStream, model) {\n if (model !== undefined) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, model);\n } else {\n xmlStream.writeText(model);\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = parseFloat(node.attributes[this.attr]);\n } else {\n this.text = [];\n }\n }\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = parseFloat(this.text.join(''));\n }\n return false;\n }\n}\n\nmodule.exports = FloatXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,UAAU,SAASF,SAAS,CAAC;EACjCG,WAAWA,CAACC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAGD,OAAO,CAACC,GAAG;IACtB,IAAI,CAACC,IAAI,GAAGF,OAAO,CAACE,IAAI;IACxB,IAAI,CAACC,KAAK,GAAGH,OAAO,CAACG,KAAK;EAC5B;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,KAAKC,SAAS,EAAE;MACvBF,SAAS,CAACG,QAAQ,CAAC,IAAI,CAACP,GAAG,CAAC;MAC5B,IAAI,IAAI,CAACE,KAAK,EAAE;QACdE,SAAS,CAACI,aAAa,CAAC,IAAI,CAACN,KAAK,CAAC;MACrC;MACA,IAAI,IAAI,CAACD,IAAI,EAAE;QACbG,SAAS,CAACK,YAAY,CAAC,IAAI,CAACR,IAAI,EAAEI,KAAK,CAAC;MAC1C,CAAC,MAAM;QACLD,SAAS,CAACM,SAAS,CAACL,KAAK,CAAC;MAC5B;MACAD,SAAS,CAACO,SAAS,CAAC,CAAC;IACvB;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACd,GAAG,EAAE;MAC1B,IAAI,IAAI,CAACC,IAAI,EAAE;QACb,IAAI,CAACI,KAAK,GAAGU,UAAU,CAACF,IAAI,CAACG,UAAU,CAAC,IAAI,CAACf,IAAI,CAAC,CAAC;MACrD,CAAC,MAAM;QACL,IAAI,CAACgB,IAAI,GAAG,EAAE;MAChB;IACF;EACF;EAEAC,SAASA,CAACD,IAAI,EAAE;IACd,IAAI,CAAC,IAAI,CAAChB,IAAI,EAAE;MACd,IAAI,CAACgB,IAAI,CAACE,IAAI,CAACF,IAAI,CAAC;IACtB;EACF;EAEAG,UAAUA,CAAA,EAAG;IACX,IAAI,CAAC,IAAI,CAACnB,IAAI,EAAE;MACd,IAAI,CAACI,KAAK,GAAGU,UAAU,CAAC,IAAI,CAACE,IAAI,CAACI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C;IACA,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAG1B,UAAU"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..5b47cf8727b1868dfbb09af878ec036d18d8314c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js @@ -0,0 +1,53 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class IntegerXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + + // option to render zero + this.zero = options.zero; + } + render(xmlStream, model) { + // int is different to float in that zero is not rendered + if (model || this.zero) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, model); + } else { + xmlStream.writeText(model); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = parseInt(node.attributes[this.attr], 10); + } else { + this.text = []; + } + return true; + } + return false; + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = parseInt(this.text.join('') || 0, 10); + } + return false; + } +} +module.exports = IntegerXform; +//# sourceMappingURL=integer-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..619a3977021e6be005212bb36960b96674fd579e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"integer-xform.js","names":["BaseXform","require","IntegerXform","constructor","options","tag","attr","attrs","zero","render","xmlStream","model","openNode","addAttributes","addAttribute","writeText","closeNode","parseOpen","node","name","parseInt","attributes","text","parseText","push","parseClose","join","module","exports"],"sources":["../../../../../lib/xlsx/xform/simple/integer-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass IntegerXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n\n // option to render zero\n this.zero = options.zero;\n }\n\n render(xmlStream, model) {\n // int is different to float in that zero is not rendered\n if (model || this.zero) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, model);\n } else {\n xmlStream.writeText(model);\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = parseInt(node.attributes[this.attr], 10);\n } else {\n this.text = [];\n }\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = parseInt(this.text.join('') || 0, 10);\n }\n return false;\n }\n}\n\nmodule.exports = IntegerXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,YAAY,SAASF,SAAS,CAAC;EACnCG,WAAWA,CAACC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAGD,OAAO,CAACC,GAAG;IACtB,IAAI,CAACC,IAAI,GAAGF,OAAO,CAACE,IAAI;IACxB,IAAI,CAACC,KAAK,GAAGH,OAAO,CAACG,KAAK;;IAE1B;IACA,IAAI,CAACC,IAAI,GAAGJ,OAAO,CAACI,IAAI;EAC1B;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB;IACA,IAAIA,KAAK,IAAI,IAAI,CAACH,IAAI,EAAE;MACtBE,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACP,GAAG,CAAC;MAC5B,IAAI,IAAI,CAACE,KAAK,EAAE;QACdG,SAAS,CAACG,aAAa,CAAC,IAAI,CAACN,KAAK,CAAC;MACrC;MACA,IAAI,IAAI,CAACD,IAAI,EAAE;QACbI,SAAS,CAACI,YAAY,CAAC,IAAI,CAACR,IAAI,EAAEK,KAAK,CAAC;MAC1C,CAAC,MAAM;QACLD,SAAS,CAACK,SAAS,CAACJ,KAAK,CAAC;MAC5B;MACAD,SAAS,CAACM,SAAS,CAAC,CAAC;IACvB;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACd,GAAG,EAAE;MAC1B,IAAI,IAAI,CAACC,IAAI,EAAE;QACb,IAAI,CAACK,KAAK,GAAGS,QAAQ,CAACF,IAAI,CAACG,UAAU,CAAC,IAAI,CAACf,IAAI,CAAC,EAAE,EAAE,CAAC;MACvD,CAAC,MAAM;QACL,IAAI,CAACgB,IAAI,GAAG,EAAE;MAChB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAC,SAASA,CAACD,IAAI,EAAE;IACd,IAAI,CAAC,IAAI,CAAChB,IAAI,EAAE;MACd,IAAI,CAACgB,IAAI,CAACE,IAAI,CAACF,IAAI,CAAC;IACtB;EACF;EAEAG,UAAUA,CAAA,EAAG;IACX,IAAI,CAAC,IAAI,CAACnB,IAAI,EAAE;MACd,IAAI,CAACK,KAAK,GAAGS,QAAQ,CAAC,IAAI,CAACE,IAAI,CAACI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACpD;IACA,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAG1B,YAAY"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..dc760e60953d4c11537ad3f626911328b0cb559c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js @@ -0,0 +1,47 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class StringXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + } + render(xmlStream, model) { + if (model !== undefined) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, model); + } else { + xmlStream.writeText(model); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = node.attributes[this.attr]; + } else { + this.text = []; + } + } + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = this.text.join(''); + } + return false; + } +} +module.exports = StringXform; +//# sourceMappingURL=string-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a5ffb8aa9bcfd24b2cb7060f91c5b1573c5a4af9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"string-xform.js","names":["BaseXform","require","StringXform","constructor","options","tag","attr","attrs","render","xmlStream","model","undefined","openNode","addAttributes","addAttribute","writeText","closeNode","parseOpen","node","name","attributes","text","parseText","push","parseClose","join","module","exports"],"sources":["../../../../../lib/xlsx/xform/simple/string-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass StringXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n }\n\n render(xmlStream, model) {\n if (model !== undefined) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, model);\n } else {\n xmlStream.writeText(model);\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = node.attributes[this.attr];\n } else {\n this.text = [];\n }\n }\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = this.text.join('');\n }\n return false;\n }\n}\n\nmodule.exports = StringXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,WAAW,SAASF,SAAS,CAAC;EAClCG,WAAWA,CAACC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAGD,OAAO,CAACC,GAAG;IACtB,IAAI,CAACC,IAAI,GAAGF,OAAO,CAACE,IAAI;IACxB,IAAI,CAACC,KAAK,GAAGH,OAAO,CAACG,KAAK;EAC5B;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,KAAKC,SAAS,EAAE;MACvBF,SAAS,CAACG,QAAQ,CAAC,IAAI,CAACP,GAAG,CAAC;MAC5B,IAAI,IAAI,CAACE,KAAK,EAAE;QACdE,SAAS,CAACI,aAAa,CAAC,IAAI,CAACN,KAAK,CAAC;MACrC;MACA,IAAI,IAAI,CAACD,IAAI,EAAE;QACbG,SAAS,CAACK,YAAY,CAAC,IAAI,CAACR,IAAI,EAAEI,KAAK,CAAC;MAC1C,CAAC,MAAM;QACLD,SAAS,CAACM,SAAS,CAACL,KAAK,CAAC;MAC5B;MACAD,SAAS,CAACO,SAAS,CAAC,CAAC;IACvB;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACd,GAAG,EAAE;MAC1B,IAAI,IAAI,CAACC,IAAI,EAAE;QACb,IAAI,CAACI,KAAK,GAAGQ,IAAI,CAACE,UAAU,CAAC,IAAI,CAACd,IAAI,CAAC;MACzC,CAAC,MAAM;QACL,IAAI,CAACe,IAAI,GAAG,EAAE;MAChB;IACF;EACF;EAEAC,SAASA,CAACD,IAAI,EAAE;IACd,IAAI,CAAC,IAAI,CAACf,IAAI,EAAE;MACd,IAAI,CAACe,IAAI,CAACE,IAAI,CAACF,IAAI,CAAC;IACtB;EACF;EAEAG,UAAUA,CAAA,EAAG;IACX,IAAI,CAAC,IAAI,CAAClB,IAAI,EAAE;MACd,IAAI,CAACI,KAAK,GAAG,IAAI,CAACW,IAAI,CAACI,IAAI,CAAC,EAAE,CAAC;IACjC;IACA,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGzB,WAAW"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..80c2951ff31c542ceebef63ae0fc1bf906f7943e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js @@ -0,0 +1,61 @@ +"use strict"; + +const BaseXform = require('./base-xform'); +const XmlStream = require('../../utils/xml-stream'); + +// const model = { +// tag: 'name', +// $: {attr: 'value'}, +// c: [ +// { tag: 'child' } +// ], +// t: 'some text' +// }; + +function build(xmlStream, model) { + xmlStream.openNode(model.tag, model.$); + if (model.c) { + model.c.forEach(child => { + build(xmlStream, child); + }); + } + if (model.t) { + xmlStream.writeText(model.t); + } + xmlStream.closeNode(); +} +class StaticXform extends BaseXform { + constructor(model) { + super(); + + // This class is an optimisation for static (unimportant and unchanging) xml + // It is stateless - apart from its static model and so can be used as a singleton + // Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else + // Known issues: + // since stateless - parseOpen always returns true. Parent xform must know when to start using this xform + // if the root tag is recursive, the parsing will behave unpredictably + this._model = model; + } + render(xmlStream) { + if (!this._xml) { + const stream = new XmlStream(); + build(stream, this._model); + this._xml = stream.xml; + } + xmlStream.writeXml(this._xml); + } + parseOpen() { + return true; + } + parseText() {} + parseClose(name) { + switch (name) { + case this._model.tag: + return false; + default: + return true; + } + } +} +module.exports = StaticXform; +//# sourceMappingURL=static-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..70f9f07ad17077d89673d7caecb796b44bbabf8d --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static-xform.js","names":["BaseXform","require","XmlStream","build","xmlStream","model","openNode","tag","$","c","forEach","child","t","writeText","closeNode","StaticXform","constructor","_model","render","_xml","stream","xml","writeXml","parseOpen","parseText","parseClose","name","module","exports"],"sources":["../../../../lib/xlsx/xform/static-xform.js"],"sourcesContent":["const BaseXform = require('./base-xform');\nconst XmlStream = require('../../utils/xml-stream');\n\n// const model = {\n// tag: 'name',\n// $: {attr: 'value'},\n// c: [\n// { tag: 'child' }\n// ],\n// t: 'some text'\n// };\n\nfunction build(xmlStream, model) {\n xmlStream.openNode(model.tag, model.$);\n if (model.c) {\n model.c.forEach(child => {\n build(xmlStream, child);\n });\n }\n if (model.t) {\n xmlStream.writeText(model.t);\n }\n xmlStream.closeNode();\n}\n\nclass StaticXform extends BaseXform {\n constructor(model) {\n super();\n\n // This class is an optimisation for static (unimportant and unchanging) xml\n // It is stateless - apart from its static model and so can be used as a singleton\n // Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else\n // Known issues:\n // since stateless - parseOpen always returns true. Parent xform must know when to start using this xform\n // if the root tag is recursive, the parsing will behave unpredictably\n this._model = model;\n }\n\n render(xmlStream) {\n if (!this._xml) {\n const stream = new XmlStream();\n build(stream, this._model);\n this._xml = stream.xml;\n }\n xmlStream.writeXml(this._xml);\n }\n\n parseOpen() {\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this._model.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = StaticXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,cAAc,CAAC;AACzC,MAAMC,SAAS,GAAGD,OAAO,CAAC,wBAAwB,CAAC;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASE,KAAKA,CAACC,SAAS,EAAEC,KAAK,EAAE;EAC/BD,SAAS,CAACE,QAAQ,CAACD,KAAK,CAACE,GAAG,EAAEF,KAAK,CAACG,CAAC,CAAC;EACtC,IAAIH,KAAK,CAACI,CAAC,EAAE;IACXJ,KAAK,CAACI,CAAC,CAACC,OAAO,CAACC,KAAK,IAAI;MACvBR,KAAK,CAACC,SAAS,EAAEO,KAAK,CAAC;IACzB,CAAC,CAAC;EACJ;EACA,IAAIN,KAAK,CAACO,CAAC,EAAE;IACXR,SAAS,CAACS,SAAS,CAACR,KAAK,CAACO,CAAC,CAAC;EAC9B;EACAR,SAAS,CAACU,SAAS,CAAC,CAAC;AACvB;AAEA,MAAMC,WAAW,SAASf,SAAS,CAAC;EAClCgB,WAAWA,CAACX,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;;IAEP;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,CAACY,MAAM,GAAGZ,KAAK;EACrB;EAEAa,MAAMA,CAACd,SAAS,EAAE;IAChB,IAAI,CAAC,IAAI,CAACe,IAAI,EAAE;MACd,MAAMC,MAAM,GAAG,IAAIlB,SAAS,CAAC,CAAC;MAC9BC,KAAK,CAACiB,MAAM,EAAE,IAAI,CAACH,MAAM,CAAC;MAC1B,IAAI,CAACE,IAAI,GAAGC,MAAM,CAACC,GAAG;IACxB;IACAjB,SAAS,CAACkB,QAAQ,CAAC,IAAI,CAACH,IAAI,CAAC;EAC/B;EAEAI,SAASA,CAAA,EAAG;IACV,OAAO,IAAI;EACb;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAACC,IAAI,EAAE;IACf,QAAQA,IAAI;MACV,KAAK,IAAI,CAACT,MAAM,CAACV,GAAG;QAClB,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEAoB,MAAM,CAACC,OAAO,GAAGb,WAAW"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..4fb390d03d89c1b6fd363d1b5b055a4ba17091d1 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js @@ -0,0 +1,98 @@ +"use strict"; + +const TextXform = require('./text-xform'); +const RichTextXform = require('./rich-text-xform'); +const BaseXform = require('../base-xform'); + +// +// (its pronounciation in KATAKANA) +// + +class PhoneticTextXform extends BaseXform { + constructor() { + super(); + this.map = { + r: new RichTextXform(), + t: new TextXform() + }; + } + get tag() { + return 'rPh'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + sb: model.sb || 0, + eb: model.eb || 0 + }); + if (model && model.hasOwnProperty('richText') && model.richText) { + const { + r + } = this.map; + model.richText.forEach(text => { + r.render(xmlStream, text); + }); + } else if (model) { + this.map.t.render(xmlStream, model.text); + } + xmlStream.closeNode(); + } + parseOpen(node) { + const { + name + } = node; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (name === this.tag) { + this.model = { + sb: parseInt(node.attributes.sb, 10), + eb: parseInt(node.attributes.eb, 10) + }; + return true; + } + this.parser = this.map[name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + switch (name) { + case 'r': + { + let rt = this.model.richText; + if (!rt) { + rt = this.model.richText = []; + } + rt.push(this.parser.model); + break; + } + case 't': + this.model.text = this.parser.model; + break; + default: + break; + } + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + return true; + } + } +} +module.exports = PhoneticTextXform; +//# sourceMappingURL=phonetic-text-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f7d994c37074b59dc553b5b563ece303b7d4a1aa --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"phonetic-text-xform.js","names":["TextXform","require","RichTextXform","BaseXform","PhoneticTextXform","constructor","map","r","t","tag","render","xmlStream","model","openNode","sb","eb","hasOwnProperty","richText","forEach","text","closeNode","parseOpen","node","name","parser","parseInt","attributes","parseText","parseClose","rt","push","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/strings/phonetic-text-xform.js"],"sourcesContent":["const TextXform = require('./text-xform');\nconst RichTextXform = require('./rich-text-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// (its pronounciation in KATAKANA)\n// \n\nclass PhoneticTextXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n r: new RichTextXform(),\n t: new TextXform(),\n };\n }\n\n get tag() {\n return 'rPh';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n sb: model.sb || 0,\n eb: model.eb || 0,\n });\n if (model && model.hasOwnProperty('richText') && model.richText) {\n const {r} = this.map;\n model.richText.forEach(text => {\n r.render(xmlStream, text);\n });\n } else if (model) {\n this.map.t.render(xmlStream, model.text);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n const {name} = node;\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (name === this.tag) {\n this.model = {\n sb: parseInt(node.attributes.sb, 10),\n eb: parseInt(node.attributes.eb, 10),\n };\n return true;\n }\n this.parser = this.map[name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n switch (name) {\n case 'r': {\n let rt = this.model.richText;\n if (!rt) {\n rt = this.model.richText = [];\n }\n rt.push(this.parser.model);\n break;\n }\n case 't':\n this.model.text = this.parser.model;\n break;\n default:\n break;\n }\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = PhoneticTextXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..f81d51858fe76923995ea347f57401595624ea29 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js @@ -0,0 +1,92 @@ +"use strict"; + +const TextXform = require('./text-xform'); +const FontXform = require('../style/font-xform'); +const BaseXform = require('../base-xform'); + +// +// +// +// +// +// +// +// +// is +// + +class RichTextXform extends BaseXform { + constructor(model) { + super(); + this.model = model; + } + get tag() { + return 'r'; + } + get textXform() { + return this._textXform || (this._textXform = new TextXform()); + } + get fontXform() { + return this._fontXform || (this._fontXform = new FontXform(RichTextXform.FONT_OPTIONS)); + } + render(xmlStream, model) { + model = model || this.model; + xmlStream.openNode('r'); + if (model.font) { + this.fontXform.render(xmlStream, model.font); + } + this.textXform.render(xmlStream, model.text); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'r': + this.model = {}; + return true; + case 't': + this.parser = this.textXform; + this.parser.parseOpen(node); + return true; + case 'rPr': + this.parser = this.fontXform; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + switch (name) { + case 'r': + return false; + case 't': + this.model.text = this.parser.model; + this.parser = undefined; + return true; + case 'rPr': + this.model.font = this.parser.model; + this.parser = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + } + return true; + } + } +} +RichTextXform.FONT_OPTIONS = { + tagName: 'rPr', + fontNameTag: 'rFont' +}; +module.exports = RichTextXform; +//# sourceMappingURL=rich-text-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..e0478295ad7b41ed71ad2d8d883422e7411db7c6 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rich-text-xform.js","names":["TextXform","require","FontXform","BaseXform","RichTextXform","constructor","model","tag","textXform","_textXform","fontXform","_fontXform","FONT_OPTIONS","render","xmlStream","openNode","font","text","closeNode","parseOpen","node","parser","name","parseText","parseClose","undefined","tagName","fontNameTag","module","exports"],"sources":["../../../../../lib/xlsx/xform/strings/rich-text-xform.js"],"sourcesContent":["const TextXform = require('./text-xform');\nconst FontXform = require('../style/font-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// \n// \n// \n// \n// \n// \n// \n// is \n// \n\nclass RichTextXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n }\n\n get tag() {\n return 'r';\n }\n\n get textXform() {\n return this._textXform || (this._textXform = new TextXform());\n }\n\n get fontXform() {\n return this._fontXform || (this._fontXform = new FontXform(RichTextXform.FONT_OPTIONS));\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n\n xmlStream.openNode('r');\n if (model.font) {\n this.fontXform.render(xmlStream, model.font);\n }\n this.textXform.render(xmlStream, model.text);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'r':\n this.model = {};\n return true;\n case 't':\n this.parser = this.textXform;\n this.parser.parseOpen(node);\n return true;\n case 'rPr':\n this.parser = this.fontXform;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'r':\n return false;\n case 't':\n this.model.text = this.parser.model;\n this.parser = undefined;\n return true;\n case 'rPr':\n this.model.font = this.parser.model;\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n }\n}\n\nRichTextXform.FONT_OPTIONS = {\n tagName: 'rPr',\n fontNameTag: 'rFont',\n};\n\nmodule.exports = RichTextXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..7c6fdd6cd01959860c48f16ba7fdebc2db2b90da --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js @@ -0,0 +1,99 @@ +"use strict"; + +const TextXform = require('./text-xform'); +const RichTextXform = require('./rich-text-xform'); +const PhoneticTextXform = require('./phonetic-text-xform'); +const BaseXform = require('../base-xform'); + +// +// ... +// +// +// +// + +class SharedStringXform extends BaseXform { + constructor(model) { + super(); + this.model = model; + this.map = { + r: new RichTextXform(), + t: new TextXform(), + rPh: new PhoneticTextXform() + }; + } + get tag() { + return 'si'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + if (model && model.hasOwnProperty('richText') && model.richText) { + if (model.richText.length) { + model.richText.forEach(text => { + this.map.r.render(xmlStream, text); + }); + } else { + this.map.t.render(xmlStream, ''); + } + } else if (model !== undefined && model !== null) { + this.map.t.render(xmlStream, model); + } + xmlStream.closeNode(); + } + parseOpen(node) { + const { + name + } = node; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (name === this.tag) { + this.model = {}; + return true; + } + this.parser = this.map[name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + switch (name) { + case 'r': + { + let rt = this.model.richText; + if (!rt) { + rt = this.model.richText = []; + } + rt.push(this.parser.model); + break; + } + case 't': + this.model = this.parser.model; + break; + default: + break; + } + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + return true; + } + } +} +module.exports = SharedStringXform; +//# sourceMappingURL=shared-string-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..76d24f777cafa73785bf5903df072b6a4e44ffbd --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-string-xform.js","names":["TextXform","require","RichTextXform","PhoneticTextXform","BaseXform","SharedStringXform","constructor","model","map","r","t","rPh","tag","render","xmlStream","openNode","hasOwnProperty","richText","length","forEach","text","undefined","closeNode","parseOpen","node","name","parser","parseText","parseClose","rt","push","module","exports"],"sources":["../../../../../lib/xlsx/xform/strings/shared-string-xform.js"],"sourcesContent":["const TextXform = require('./text-xform');\nconst RichTextXform = require('./rich-text-xform');\nconst PhoneticTextXform = require('./phonetic-text-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// ...\n// \n// \n// \n// \n\nclass SharedStringXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n\n this.map = {\n r: new RichTextXform(),\n t: new TextXform(),\n rPh: new PhoneticTextXform(),\n };\n }\n\n get tag() {\n return 'si';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n if (model && model.hasOwnProperty('richText') && model.richText) {\n if (model.richText.length) {\n model.richText.forEach(text => {\n this.map.r.render(xmlStream, text);\n });\n } else {\n this.map.t.render(xmlStream, '');\n }\n } else if (model !== undefined && model !== null) {\n this.map.t.render(xmlStream, model);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n const {name} = node;\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (name === this.tag) {\n this.model = {};\n return true;\n }\n this.parser = this.map[name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n switch (name) {\n case 'r': {\n let rt = this.model.richText;\n if (!rt) {\n rt = this.model.richText = [];\n }\n rt.push(this.parser.model);\n break;\n }\n case 't':\n this.model = this.parser.model;\n break;\n default:\n break;\n }\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = SharedStringXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..3f9a7d8978a9588850741cadd1c2f11cdd7eaddb --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js @@ -0,0 +1,114 @@ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const SharedStringXform = require('./shared-string-xform'); +class SharedStringsXform extends BaseXform { + constructor(model) { + super(); + this.model = model || { + values: [], + count: 0 + }; + this.hash = Object.create(null); + this.rich = Object.create(null); + } + get sharedStringXform() { + return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform()); + } + get values() { + return this.model.values; + } + get uniqueCount() { + return this.model.values.length; + } + get count() { + return this.model.count; + } + getString(index) { + return this.model.values[index]; + } + add(value) { + return value.richText ? this.addRichText(value) : this.addText(value); + } + addText(value) { + let index = this.hash[value]; + if (index === undefined) { + index = this.hash[value] = this.model.values.length; + this.model.values.push(value); + } + this.model.count++; + return index; + } + addRichText(value) { + // TODO: add WeakMap here + const xml = this.sharedStringXform.toXml(value); + let index = this.rich[xml]; + if (index === undefined) { + index = this.rich[xml] = this.model.values.length; + this.model.values.push(value); + } + this.model.count++; + return index; + } + + // + // + // <%=text%> + // + // + + render(xmlStream, model) { + model = model || this._values; + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('sst', { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + count: model.count, + uniqueCount: model.values.length + }); + const sx = this.sharedStringXform; + model.values.forEach(sharedString => { + sx.render(xmlStream, sharedString); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'sst': + return true; + case 'si': + this.parser = this.sharedStringXform; + this.parser.parseOpen(node); + return true; + default: + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.values.push(this.parser.model); + this.model.count++; + this.parser = undefined; + } + return true; + } + switch (name) { + case 'sst': + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +module.exports = SharedStringsXform; +//# sourceMappingURL=shared-strings-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6c8ce1db23d3d7707860d74835d0e9304af49cb6 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"shared-strings-xform.js","names":["XmlStream","require","BaseXform","SharedStringXform","SharedStringsXform","constructor","model","values","count","hash","Object","create","rich","sharedStringXform","_sharedStringXform","uniqueCount","length","getString","index","add","value","richText","addRichText","addText","undefined","push","xml","toXml","render","xmlStream","_values","openXml","StdDocAttributes","openNode","xmlns","sx","forEach","sharedString","closeNode","parseOpen","node","parser","name","Error","JSON","stringify","parseText","text","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/strings/shared-strings-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst SharedStringXform = require('./shared-string-xform');\n\nclass SharedStringsXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model || {\n values: [],\n count: 0,\n };\n this.hash = Object.create(null);\n this.rich = Object.create(null);\n }\n\n get sharedStringXform() {\n return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform());\n }\n\n get values() {\n return this.model.values;\n }\n\n get uniqueCount() {\n return this.model.values.length;\n }\n\n get count() {\n return this.model.count;\n }\n\n getString(index) {\n return this.model.values[index];\n }\n\n add(value) {\n return value.richText ? this.addRichText(value) : this.addText(value);\n }\n\n addText(value) {\n let index = this.hash[value];\n if (index === undefined) {\n index = this.hash[value] = this.model.values.length;\n this.model.values.push(value);\n }\n this.model.count++;\n return index;\n }\n\n addRichText(value) {\n // TODO: add WeakMap here\n const xml = this.sharedStringXform.toXml(value);\n let index = this.rich[xml];\n if (index === undefined) {\n index = this.rich[xml] = this.model.values.length;\n this.model.values.push(value);\n }\n this.model.count++;\n return index;\n }\n\n // \n // \" uniqueCount=\"<%=count%>\">\n // <%=text%>\n // \n // \n\n render(xmlStream, model) {\n model = model || this._values;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('sst', {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n count: model.count,\n uniqueCount: model.values.length,\n });\n\n const sx = this.sharedStringXform;\n model.values.forEach(sharedString => {\n sx.render(xmlStream, sharedString);\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'sst':\n return true;\n case 'si':\n this.parser = this.sharedStringXform;\n this.parser.parseOpen(node);\n return true;\n default:\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.values.push(this.parser.model);\n this.model.count++;\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'sst':\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nmodule.exports = SharedStringsXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..e65308366bba4b92f62d3a47e85a9118ad763705 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js @@ -0,0 +1,39 @@ +"use strict"; + +const BaseXform = require('../base-xform'); + +// is + +class TextXform extends BaseXform { + get tag() { + return 't'; + } + render(xmlStream, model) { + xmlStream.openNode('t'); + if (/^\s|\n|\s$/.test(model)) { + xmlStream.addAttribute('xml:space', 'preserve'); + } + xmlStream.writeText(model); + xmlStream.closeNode(); + } + get model() { + return this._text.join('').replace(/_x([0-9A-F]{4})_/g, ($0, $1) => String.fromCharCode(parseInt($1, 16))); + } + parseOpen(node) { + switch (node.name) { + case 't': + this._text = []; + return true; + default: + return false; + } + } + parseText(text) { + this._text.push(text); + } + parseClose() { + return false; + } +} +module.exports = TextXform; +//# sourceMappingURL=text-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b3d8c98b2d48cfc5cd4ddc560a960809dde51e30 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"text-xform.js","names":["BaseXform","require","TextXform","tag","render","xmlStream","model","openNode","test","addAttribute","writeText","closeNode","_text","join","replace","$0","$1","String","fromCharCode","parseInt","parseOpen","node","name","parseText","text","push","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/strings/text-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\n// is \n\nclass TextXform extends BaseXform {\n get tag() {\n return 't';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('t');\n if (/^\\s|\\n|\\s$/.test(model)) {\n xmlStream.addAttribute('xml:space', 'preserve');\n }\n xmlStream.writeText(model);\n xmlStream.closeNode();\n }\n\n get model() {\n return this._text\n .join('')\n .replace(/_x([0-9A-F]{4})_/g, ($0, $1) => String.fromCharCode(parseInt($1, 16)));\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 't':\n this._text = [];\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this._text.push(text);\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TextXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;;AAE1C;;AAEA,MAAMC,SAAS,SAASF,SAAS,CAAC;EAChC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,GAAG;EACZ;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,GAAG,CAAC;IACvB,IAAI,YAAY,CAACC,IAAI,CAACF,KAAK,CAAC,EAAE;MAC5BD,SAAS,CAACI,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC;IACjD;IACAJ,SAAS,CAACK,SAAS,CAACJ,KAAK,CAAC;IAC1BD,SAAS,CAACM,SAAS,CAAC,CAAC;EACvB;EAEA,IAAIL,KAAKA,CAAA,EAAG;IACV,OAAO,IAAI,CAACM,KAAK,CACdC,IAAI,CAAC,EAAE,CAAC,CACRC,OAAO,CAAC,mBAAmB,EAAE,CAACC,EAAE,EAAEC,EAAE,KAAKC,MAAM,CAACC,YAAY,CAACC,QAAQ,CAACH,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EACpF;EAEAI,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,GAAG;QACN,IAAI,CAACV,KAAK,GAAG,EAAE;QACf,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAW,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,CAACZ,KAAK,CAACa,IAAI,CAACD,IAAI,CAAC;EACvB;EAEAE,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAG1B,SAAS"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..1f14fc1fa8263884752c365f63ee7c6194e0d518 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js @@ -0,0 +1,139 @@ +"use strict"; + +const Enums = require('../../../doc/enums'); +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +const validation = { + horizontalValues: ['left', 'center', 'right', 'fill', 'centerContinuous', 'distributed', 'justify'].reduce((p, v) => { + p[v] = true; + return p; + }, {}), + horizontal(value) { + return this.horizontalValues[value] ? value : undefined; + }, + verticalValues: ['top', 'middle', 'bottom', 'distributed', 'justify'].reduce((p, v) => { + p[v] = true; + return p; + }, {}), + vertical(value) { + if (value === 'middle') return 'center'; + return this.verticalValues[value] ? value : undefined; + }, + wrapText(value) { + return value ? true : undefined; + }, + shrinkToFit(value) { + return value ? true : undefined; + }, + textRotation(value) { + switch (value) { + case 'vertical': + return value; + default: + value = utils.validInt(value); + return value >= -90 && value <= 90 ? value : undefined; + } + }, + indent(value) { + value = utils.validInt(value); + return Math.max(0, value); + }, + readingOrder(value) { + switch (value) { + case 'ltr': + return Enums.ReadingOrder.LeftToRight; + case 'rtl': + return Enums.ReadingOrder.RightToLeft; + default: + return undefined; + } + } +}; +const textRotationXform = { + toXml(textRotation) { + textRotation = validation.textRotation(textRotation); + if (textRotation) { + if (textRotation === 'vertical') { + return 255; + } + const tr = Math.round(textRotation); + if (tr >= 0 && tr <= 90) { + return tr; + } + if (tr < 0 && tr >= -90) { + return 90 - tr; + } + } + return undefined; + }, + toModel(textRotation) { + const tr = utils.validInt(textRotation); + if (tr !== undefined) { + if (tr === 255) { + return 'vertical'; + } + if (tr >= 0 && tr <= 90) { + return tr; + } + if (tr > 90 && tr <= 180) { + return 90 - tr; + } + } + return undefined; + } +}; + +// Alignment encapsulates translation from style.alignment model to/from xlsx +class AlignmentXform extends BaseXform { + get tag() { + return 'alignment'; + } + render(xmlStream, model) { + xmlStream.addRollback(); + xmlStream.openNode('alignment'); + let isValid = false; + function add(name, value) { + if (value) { + xmlStream.addAttribute(name, value); + isValid = true; + } + } + add('horizontal', validation.horizontal(model.horizontal)); + add('vertical', validation.vertical(model.vertical)); + add('wrapText', validation.wrapText(model.wrapText) ? '1' : false); + add('shrinkToFit', validation.shrinkToFit(model.shrinkToFit) ? '1' : false); + add('indent', validation.indent(model.indent)); + add('textRotation', textRotationXform.toXml(model.textRotation)); + add('readingOrder', validation.readingOrder(model.readingOrder)); + xmlStream.closeNode(); + if (isValid) { + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + parseOpen(node) { + const model = {}; + let valid = false; + function add(truthy, name, value) { + if (truthy) { + model[name] = value; + valid = true; + } + } + add(node.attributes.horizontal, 'horizontal', node.attributes.horizontal); + add(node.attributes.vertical, 'vertical', node.attributes.vertical === 'center' ? 'middle' : node.attributes.vertical); + add(node.attributes.wrapText, 'wrapText', utils.parseBoolean(node.attributes.wrapText)); + add(node.attributes.shrinkToFit, 'shrinkToFit', utils.parseBoolean(node.attributes.shrinkToFit)); + add(node.attributes.indent, 'indent', parseInt(node.attributes.indent, 10)); + add(node.attributes.textRotation, 'textRotation', textRotationXform.toModel(node.attributes.textRotation)); + add(node.attributes.readingOrder, 'readingOrder', node.attributes.readingOrder === '2' ? 'rtl' : 'ltr'); + this.model = valid ? model : null; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = AlignmentXform; +//# sourceMappingURL=alignment-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a3d360c3e6eef8ded11d8730419f2e2f4ce89f61 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"alignment-xform.js","names":["Enums","require","utils","BaseXform","validation","horizontalValues","reduce","p","v","horizontal","value","undefined","verticalValues","vertical","wrapText","shrinkToFit","textRotation","validInt","indent","Math","max","readingOrder","ReadingOrder","LeftToRight","RightToLeft","textRotationXform","toXml","tr","round","toModel","AlignmentXform","tag","render","xmlStream","model","addRollback","openNode","isValid","add","name","addAttribute","closeNode","commit","rollback","parseOpen","node","valid","truthy","attributes","parseBoolean","parseInt","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/alignment-xform.js"],"sourcesContent":["const Enums = require('../../../doc/enums');\n\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nconst validation = {\n horizontalValues: [\n 'left',\n 'center',\n 'right',\n 'fill',\n 'centerContinuous',\n 'distributed',\n 'justify',\n ].reduce((p, v) => {\n p[v] = true;\n return p;\n }, {}),\n horizontal(value) {\n return this.horizontalValues[value] ? value : undefined;\n },\n\n verticalValues: ['top', 'middle', 'bottom', 'distributed', 'justify'].reduce((p, v) => {\n p[v] = true;\n return p;\n }, {}),\n vertical(value) {\n if (value === 'middle') return 'center';\n return this.verticalValues[value] ? value : undefined;\n },\n wrapText(value) {\n return value ? true : undefined;\n },\n shrinkToFit(value) {\n return value ? true : undefined;\n },\n textRotation(value) {\n switch (value) {\n case 'vertical':\n return value;\n default:\n value = utils.validInt(value);\n return value >= -90 && value <= 90 ? value : undefined;\n }\n },\n indent(value) {\n value = utils.validInt(value);\n return Math.max(0, value);\n },\n readingOrder(value) {\n switch (value) {\n case 'ltr':\n return Enums.ReadingOrder.LeftToRight;\n case 'rtl':\n return Enums.ReadingOrder.RightToLeft;\n default:\n return undefined;\n }\n },\n};\n\nconst textRotationXform = {\n toXml(textRotation) {\n textRotation = validation.textRotation(textRotation);\n if (textRotation) {\n if (textRotation === 'vertical') {\n return 255;\n }\n\n const tr = Math.round(textRotation);\n if (tr >= 0 && tr <= 90) {\n return tr;\n }\n\n if (tr < 0 && tr >= -90) {\n return 90 - tr;\n }\n }\n return undefined;\n },\n toModel(textRotation) {\n const tr = utils.validInt(textRotation);\n if (tr !== undefined) {\n if (tr === 255) {\n return 'vertical';\n }\n if (tr >= 0 && tr <= 90) {\n return tr;\n }\n if (tr > 90 && tr <= 180) {\n return 90 - tr;\n }\n }\n return undefined;\n },\n};\n\n// Alignment encapsulates translation from style.alignment model to/from xlsx\nclass AlignmentXform extends BaseXform {\n get tag() {\n return 'alignment';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('alignment');\n\n let isValid = false;\n function add(name, value) {\n if (value) {\n xmlStream.addAttribute(name, value);\n isValid = true;\n }\n }\n add('horizontal', validation.horizontal(model.horizontal));\n add('vertical', validation.vertical(model.vertical));\n add('wrapText', validation.wrapText(model.wrapText) ? '1' : false);\n add('shrinkToFit', validation.shrinkToFit(model.shrinkToFit) ? '1' : false);\n add('indent', validation.indent(model.indent));\n add('textRotation', textRotationXform.toXml(model.textRotation));\n add('readingOrder', validation.readingOrder(model.readingOrder));\n\n xmlStream.closeNode();\n\n if (isValid) {\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n\n parseOpen(node) {\n const model = {};\n\n let valid = false;\n function add(truthy, name, value) {\n if (truthy) {\n model[name] = value;\n valid = true;\n }\n }\n add(node.attributes.horizontal, 'horizontal', node.attributes.horizontal);\n add(\n node.attributes.vertical,\n 'vertical',\n node.attributes.vertical === 'center' ? 'middle' : node.attributes.vertical\n );\n add(node.attributes.wrapText, 'wrapText', utils.parseBoolean(node.attributes.wrapText));\n add(node.attributes.shrinkToFit, 'shrinkToFit', utils.parseBoolean(node.attributes.shrinkToFit));\n add(node.attributes.indent, 'indent', parseInt(node.attributes.indent, 10));\n add(\n node.attributes.textRotation,\n 'textRotation',\n textRotationXform.toModel(node.attributes.textRotation)\n );\n add(\n node.attributes.readingOrder,\n 'readingOrder',\n node.attributes.readingOrder === '2' ? 'rtl' : 'ltr'\n );\n\n this.model = valid ? model : null;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = AlignmentXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..c9adc82b418e15b05b01f7cf3e9661d793753a8f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js @@ -0,0 +1,185 @@ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const BaseXform = require('../base-xform'); +const utils = require('../../../utils/utils'); +const ColorXform = require('./color-xform'); +class EdgeXform extends BaseXform { + constructor(name) { + super(); + this.name = name; + this.map = { + color: new ColorXform() + }; + } + get tag() { + return this.name; + } + render(xmlStream, model, defaultColor) { + const color = model && model.color || defaultColor || this.defaultColor; + xmlStream.openNode(this.name); + if (model && model.style) { + xmlStream.addAttribute('style', model.style); + if (color) { + this.map.color.render(xmlStream, color); + } + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.name: + { + const { + style + } = node.attributes; + if (style) { + this.model = { + style + }; + } else { + this.model = undefined; + } + return true; + } + case 'color': + this.parser = this.map.color; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (name === this.name) { + if (this.map.color.model) { + if (!this.model) { + this.model = {}; + } + this.model.color = this.map.color.model; + } + } + return false; + } + validStyle(value) { + return EdgeXform.validStyleValues[value]; + } +} +EdgeXform.validStyleValues = ['thin', 'dashed', 'dotted', 'dashDot', 'hair', 'dashDotDot', 'slantDashDot', 'mediumDashed', 'mediumDashDotDot', 'mediumDashDot', 'medium', 'double', 'thick'].reduce((p, v) => { + p[v] = true; + return p; +}, {}); + +// Border encapsulates translation from border model to/from xlsx +class BorderXform extends BaseXform { + constructor() { + super(); + this.map = { + top: new EdgeXform('top'), + left: new EdgeXform('left'), + bottom: new EdgeXform('bottom'), + right: new EdgeXform('right'), + diagonal: new EdgeXform('diagonal') + }; + } + render(xmlStream, model) { + const { + color + } = model; + xmlStream.openNode('border'); + if (model.diagonal && model.diagonal.style) { + if (model.diagonal.up) { + xmlStream.addAttribute('diagonalUp', '1'); + } + if (model.diagonal.down) { + xmlStream.addAttribute('diagonalDown', '1'); + } + } + function add(edgeModel, edgeXform) { + if (edgeModel && !edgeModel.color && model.color) { + // don't mess with incoming models + edgeModel = { + ...edgeModel, + color: model.color + }; + } + edgeXform.render(xmlStream, edgeModel, color); + } + add(model.left, this.map.left); + add(model.right, this.map.right); + add(model.top, this.map.top); + add(model.bottom, this.map.bottom); + add(model.diagonal, this.map.diagonal); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'border': + this.reset(); + this.diagonalUp = utils.parseBoolean(node.attributes.diagonalUp); + this.diagonalDown = utils.parseBoolean(node.attributes.diagonalDown); + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (name === 'border') { + const model = this.model = {}; + const add = function (key, edgeModel, extensions) { + if (edgeModel) { + if (extensions) { + Object.assign(edgeModel, extensions); + } + model[key] = edgeModel; + } + }; + add('left', this.map.left.model); + add('right', this.map.right.model); + add('top', this.map.top.model); + add('bottom', this.map.bottom.model); + add('diagonal', this.map.diagonal.model, { + up: this.diagonalUp, + down: this.diagonalDown + }); + } + return false; + } +} +module.exports = BorderXform; +//# sourceMappingURL=border-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0fa2cf40ca0ccc77ea8b8dcec3b876b22c363e7e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"border-xform.js","names":["BaseXform","require","utils","ColorXform","EdgeXform","constructor","name","map","color","tag","render","xmlStream","model","defaultColor","openNode","style","addAttribute","closeNode","parseOpen","node","parser","attributes","undefined","parseText","text","parseClose","validStyle","value","validStyleValues","reduce","p","v","BorderXform","top","left","bottom","right","diagonal","up","down","add","edgeModel","edgeXform","reset","diagonalUp","parseBoolean","diagonalDown","key","extensions","Object","assign","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/border-xform.js"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../base-xform');\nconst utils = require('../../../utils/utils');\n\nconst ColorXform = require('./color-xform');\n\nclass EdgeXform extends BaseXform {\n constructor(name) {\n super();\n\n this.name = name;\n this.map = {\n color: new ColorXform(),\n };\n }\n\n get tag() {\n return this.name;\n }\n\n render(xmlStream, model, defaultColor) {\n const color = (model && model.color) || defaultColor || this.defaultColor;\n xmlStream.openNode(this.name);\n if (model && model.style) {\n xmlStream.addAttribute('style', model.style);\n if (color) {\n this.map.color.render(xmlStream, color);\n }\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.name: {\n const {style} = node.attributes;\n if (style) {\n this.model = {\n style,\n };\n } else {\n this.model = undefined;\n }\n return true;\n }\n case 'color':\n this.parser = this.map.color;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n\n if (name === this.name) {\n if (this.map.color.model) {\n if (!this.model) {\n this.model = {};\n }\n this.model.color = this.map.color.model;\n }\n }\n\n return false;\n }\n\n validStyle(value) {\n return EdgeXform.validStyleValues[value];\n }\n}\n\nEdgeXform.validStyleValues = [\n 'thin',\n 'dashed',\n 'dotted',\n 'dashDot',\n 'hair',\n 'dashDotDot',\n 'slantDashDot',\n 'mediumDashed',\n 'mediumDashDotDot',\n 'mediumDashDot',\n 'medium',\n 'double',\n 'thick',\n].reduce((p, v) => {\n p[v] = true;\n return p;\n}, {});\n\n// Border encapsulates translation from border model to/from xlsx\nclass BorderXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n top: new EdgeXform('top'),\n left: new EdgeXform('left'),\n bottom: new EdgeXform('bottom'),\n right: new EdgeXform('right'),\n diagonal: new EdgeXform('diagonal'),\n };\n }\n\n render(xmlStream, model) {\n const {color} = model;\n xmlStream.openNode('border');\n if (model.diagonal && model.diagonal.style) {\n if (model.diagonal.up) {\n xmlStream.addAttribute('diagonalUp', '1');\n }\n if (model.diagonal.down) {\n xmlStream.addAttribute('diagonalDown', '1');\n }\n }\n function add(edgeModel, edgeXform) {\n if (edgeModel && !edgeModel.color && model.color) {\n // don't mess with incoming models\n edgeModel = {\n ...edgeModel,\n color: model.color,\n };\n }\n edgeXform.render(xmlStream, edgeModel, color);\n }\n add(model.left, this.map.left);\n add(model.right, this.map.right);\n add(model.top, this.map.top);\n add(model.bottom, this.map.bottom);\n add(model.diagonal, this.map.diagonal);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'border':\n this.reset();\n this.diagonalUp = utils.parseBoolean(node.attributes.diagonalUp);\n this.diagonalDown = utils.parseBoolean(node.attributes.diagonalDown);\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (name === 'border') {\n const model = (this.model = {});\n const add = function(key, edgeModel, extensions) {\n if (edgeModel) {\n if (extensions) {\n Object.assign(edgeModel, extensions);\n }\n model[key] = edgeModel;\n }\n };\n add('left', this.map.left.model);\n add('right', this.map.right.model);\n add('top', this.map.top.model);\n add('bottom', this.map.bottom.model);\n add('diagonal', this.map.diagonal.model, {up: this.diagonalUp, down: this.diagonalDown});\n }\n return false;\n }\n}\n\nmodule.exports = BorderXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..b5a5d32d776e5f53fc913fd5870cc7551f3ce99e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js @@ -0,0 +1,66 @@ +"use strict"; + +const BaseXform = require('../base-xform'); + +// Color encapsulates translation from color model to/from xlsx +class ColorXform extends BaseXform { + constructor(name) { + super(); + + // this.name controls the xm node name + this.name = name || 'color'; + } + get tag() { + return this.name; + } + render(xmlStream, model) { + if (model) { + xmlStream.openNode(this.name); + if (model.argb) { + xmlStream.addAttribute('rgb', model.argb); + } else if (model.theme !== undefined) { + xmlStream.addAttribute('theme', model.theme); + if (model.tint !== undefined) { + xmlStream.addAttribute('tint', model.tint); + } + } else if (model.indexed !== undefined) { + xmlStream.addAttribute('indexed', model.indexed); + } else { + xmlStream.addAttribute('auto', '1'); + } + xmlStream.closeNode(); + return true; + } + return false; + } + parseOpen(node) { + if (node.name === this.name) { + if (node.attributes.rgb) { + this.model = { + argb: node.attributes.rgb + }; + } else if (node.attributes.theme) { + this.model = { + theme: parseInt(node.attributes.theme, 10) + }; + if (node.attributes.tint) { + this.model.tint = parseFloat(node.attributes.tint); + } + } else if (node.attributes.indexed) { + this.model = { + indexed: parseInt(node.attributes.indexed, 10) + }; + } else { + this.model = undefined; + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = ColorXform; +//# sourceMappingURL=color-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0017b878c6d34760dd31bb7ba90487c6f43d0b36 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"color-xform.js","names":["BaseXform","require","ColorXform","constructor","name","tag","render","xmlStream","model","openNode","argb","addAttribute","theme","undefined","tint","indexed","closeNode","parseOpen","node","attributes","rgb","parseInt","parseFloat","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/color-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\n// Color encapsulates translation from color model to/from xlsx\nclass ColorXform extends BaseXform {\n constructor(name) {\n super();\n\n // this.name controls the xm node name\n this.name = name || 'color';\n }\n\n get tag() {\n return this.name;\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.name);\n if (model.argb) {\n xmlStream.addAttribute('rgb', model.argb);\n } else if (model.theme !== undefined) {\n xmlStream.addAttribute('theme', model.theme);\n if (model.tint !== undefined) {\n xmlStream.addAttribute('tint', model.tint);\n }\n } else if (model.indexed !== undefined) {\n xmlStream.addAttribute('indexed', model.indexed);\n } else {\n xmlStream.addAttribute('auto', '1');\n }\n xmlStream.closeNode();\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.name) {\n if (node.attributes.rgb) {\n this.model = {argb: node.attributes.rgb};\n } else if (node.attributes.theme) {\n this.model = {theme: parseInt(node.attributes.theme, 10)};\n if (node.attributes.tint) {\n this.model.tint = parseFloat(node.attributes.tint);\n }\n } else if (node.attributes.indexed) {\n this.model = {indexed: parseInt(node.attributes.indexed, 10)};\n } else {\n this.model = undefined;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = ColorXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA,MAAMC,UAAU,SAASF,SAAS,CAAC;EACjCG,WAAWA,CAACC,IAAI,EAAE;IAChB,KAAK,CAAC,CAAC;;IAEP;IACA,IAAI,CAACA,IAAI,GAAGA,IAAI,IAAI,OAAO;EAC7B;EAEA,IAAIC,GAAGA,CAAA,EAAG;IACR,OAAO,IAAI,CAACD,IAAI;EAClB;EAEAE,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB,IAAIA,KAAK,EAAE;MACTD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACL,IAAI,CAAC;MAC7B,IAAII,KAAK,CAACE,IAAI,EAAE;QACdH,SAAS,CAACI,YAAY,CAAC,KAAK,EAAEH,KAAK,CAACE,IAAI,CAAC;MAC3C,CAAC,MAAM,IAAIF,KAAK,CAACI,KAAK,KAAKC,SAAS,EAAE;QACpCN,SAAS,CAACI,YAAY,CAAC,OAAO,EAAEH,KAAK,CAACI,KAAK,CAAC;QAC5C,IAAIJ,KAAK,CAACM,IAAI,KAAKD,SAAS,EAAE;UAC5BN,SAAS,CAACI,YAAY,CAAC,MAAM,EAAEH,KAAK,CAACM,IAAI,CAAC;QAC5C;MACF,CAAC,MAAM,IAAIN,KAAK,CAACO,OAAO,KAAKF,SAAS,EAAE;QACtCN,SAAS,CAACI,YAAY,CAAC,SAAS,EAAEH,KAAK,CAACO,OAAO,CAAC;MAClD,CAAC,MAAM;QACLR,SAAS,CAACI,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;MACrC;MACAJ,SAAS,CAACS,SAAS,CAAC,CAAC;MACrB,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACd,IAAI,KAAK,IAAI,CAACA,IAAI,EAAE;MAC3B,IAAIc,IAAI,CAACC,UAAU,CAACC,GAAG,EAAE;QACvB,IAAI,CAACZ,KAAK,GAAG;UAACE,IAAI,EAAEQ,IAAI,CAACC,UAAU,CAACC;QAAG,CAAC;MAC1C,CAAC,MAAM,IAAIF,IAAI,CAACC,UAAU,CAACP,KAAK,EAAE;QAChC,IAAI,CAACJ,KAAK,GAAG;UAACI,KAAK,EAAES,QAAQ,CAACH,IAAI,CAACC,UAAU,CAACP,KAAK,EAAE,EAAE;QAAC,CAAC;QACzD,IAAIM,IAAI,CAACC,UAAU,CAACL,IAAI,EAAE;UACxB,IAAI,CAACN,KAAK,CAACM,IAAI,GAAGQ,UAAU,CAACJ,IAAI,CAACC,UAAU,CAACL,IAAI,CAAC;QACpD;MACF,CAAC,MAAM,IAAII,IAAI,CAACC,UAAU,CAACJ,OAAO,EAAE;QAClC,IAAI,CAACP,KAAK,GAAG;UAACO,OAAO,EAAEM,QAAQ,CAACH,IAAI,CAACC,UAAU,CAACJ,OAAO,EAAE,EAAE;QAAC,CAAC;MAC/D,CAAC,MAAM;QACL,IAAI,CAACP,KAAK,GAAGK,SAAS;MACxB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAU,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGxB,UAAU"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..e1f5e7242f4cb23a67ee1a6a4d47de4a7f5e7668 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js @@ -0,0 +1,106 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const AlignmentXform = require('./alignment-xform'); +const BorderXform = require('./border-xform'); +const FillXform = require('./fill-xform'); +const FontXform = require('./font-xform'); +const NumFmtXform = require('./numfmt-xform'); +const ProtectionXform = require('./protection-xform'); + +// +// Optional +// Optional +// + +// Style assists translation from style model to/from xlsx +class DxfXform extends BaseXform { + constructor() { + super(); + this.map = { + alignment: new AlignmentXform(), + border: new BorderXform(), + fill: new FillXform(), + font: new FontXform(), + numFmt: new NumFmtXform(), + protection: new ProtectionXform() + }; + } + get tag() { + return 'dxf'; + } + + // how do we generate dxfid? + + render(xmlStream, model) { + xmlStream.openNode(this.tag); + if (model.font) { + this.map.font.render(xmlStream, model.font); + } + if (model.numFmt && model.numFmtId) { + const numFmtModel = { + id: model.numFmtId, + formatCode: model.numFmt + }; + this.map.numFmt.render(xmlStream, numFmtModel); + } + if (model.fill) { + this.map.fill.render(xmlStream, model.fill); + } + if (model.alignment) { + this.map.alignment.render(xmlStream, model.alignment); + } + if (model.border) { + this.map.border.render(xmlStream, model.border); + } + if (model.protection) { + this.map.protection.render(xmlStream, model.protection); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + // this node is often repeated. Need to reset children + this.reset(); + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + return true; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (name === this.tag) { + this.model = { + alignment: this.map.alignment.model, + border: this.map.border.model, + fill: this.map.fill.model, + font: this.map.font.model, + numFmt: this.map.numFmt.model, + protection: this.map.protection.model + }; + return false; + } + return true; + } +} +module.exports = DxfXform; +//# sourceMappingURL=dxf-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2dbc0858af21875b28694b13841aa427267be40b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dxf-xform.js","names":["BaseXform","require","AlignmentXform","BorderXform","FillXform","FontXform","NumFmtXform","ProtectionXform","DxfXform","constructor","map","alignment","border","fill","font","numFmt","protection","tag","render","xmlStream","model","openNode","numFmtId","numFmtModel","id","formatCode","closeNode","parseOpen","node","parser","name","reset","parseText","text","parseClose","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/dxf-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nconst AlignmentXform = require('./alignment-xform');\nconst BorderXform = require('./border-xform');\nconst FillXform = require('./fill-xform');\nconst FontXform = require('./font-xform');\nconst NumFmtXform = require('./numfmt-xform');\nconst ProtectionXform = require('./protection-xform');\n\n// \n// Optional \n// Optional \n// \n\n// Style assists translation from style model to/from xlsx\nclass DxfXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n alignment: new AlignmentXform(),\n border: new BorderXform(),\n fill: new FillXform(),\n font: new FontXform(),\n numFmt: new NumFmtXform(),\n protection: new ProtectionXform(),\n };\n }\n\n get tag() {\n return 'dxf';\n }\n\n // how do we generate dxfid?\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n if (model.font) {\n this.map.font.render(xmlStream, model.font);\n }\n if (model.numFmt && model.numFmtId) {\n const numFmtModel = {id: model.numFmtId, formatCode: model.numFmt};\n this.map.numFmt.render(xmlStream, numFmtModel);\n }\n if (model.fill) {\n this.map.fill.render(xmlStream, model.fill);\n }\n if (model.alignment) {\n this.map.alignment.render(xmlStream, model.alignment);\n }\n if (model.border) {\n this.map.border.render(xmlStream, model.border);\n }\n if (model.protection) {\n this.map.protection.render(xmlStream, model.protection);\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n // this node is often repeated. Need to reset children\n this.reset();\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (name === this.tag) {\n this.model = {\n alignment: this.map.alignment.model,\n border: this.map.border.model,\n fill: this.map.fill.model,\n font: this.map.font.model,\n numFmt: this.map.numFmt.model,\n protection: this.map.protection.model,\n };\n return false;\n }\n\n return true;\n }\n}\n\nmodule.exports = DxfXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..85479e8723ace3a2c1999424a0fd3a1c3321b45c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js @@ -0,0 +1,308 @@ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const BaseXform = require('../base-xform'); +const ColorXform = require('./color-xform'); +class StopXform extends BaseXform { + constructor() { + super(); + this.map = { + color: new ColorXform() + }; + } + get tag() { + return 'stop'; + } + render(xmlStream, model) { + xmlStream.openNode('stop'); + xmlStream.addAttribute('position', model.position); + this.map.color.render(xmlStream, model.color); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'stop': + this.model = { + position: parseFloat(node.attributes.position) + }; + return true; + case 'color': + this.parser = this.map.color; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.color = this.parser.model; + this.parser = undefined; + } + return true; + } + return false; + } +} +class PatternFillXform extends BaseXform { + constructor() { + super(); + this.map = { + fgColor: new ColorXform('fgColor'), + bgColor: new ColorXform('bgColor') + }; + } + get name() { + return 'pattern'; + } + get tag() { + return 'patternFill'; + } + render(xmlStream, model) { + xmlStream.openNode('patternFill'); + xmlStream.addAttribute('patternType', model.pattern); + if (model.fgColor) { + this.map.fgColor.render(xmlStream, model.fgColor); + } + if (model.bgColor) { + this.map.bgColor.render(xmlStream, model.bgColor); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'patternFill': + this.model = { + type: 'pattern', + pattern: node.attributes.patternType + }; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + if (this.parser.model) { + this.model[name] = this.parser.model; + } + this.parser = undefined; + } + return true; + } + return false; + } +} +class GradientFillXform extends BaseXform { + constructor() { + super(); + this.map = { + stop: new StopXform() + }; + // if (model) { + // this.gradient = model.gradient; + // if (model.center) { + // this.center = model.center; + // } + // if (model.degree !== undefined) { + // this.degree = model.degree; + // } + // this.stops = model.stops.map(function(stop) { return new StopXform(stop); }); + // } else { + // this.stops = []; + // } + } + + get name() { + return 'gradient'; + } + get tag() { + return 'gradientFill'; + } + render(xmlStream, model) { + xmlStream.openNode('gradientFill'); + switch (model.gradient) { + case 'angle': + xmlStream.addAttribute('degree', model.degree); + break; + case 'path': + xmlStream.addAttribute('type', 'path'); + if (model.center.left) { + xmlStream.addAttribute('left', model.center.left); + if (model.center.right === undefined) { + xmlStream.addAttribute('right', model.center.left); + } + } + if (model.center.right) { + xmlStream.addAttribute('right', model.center.right); + } + if (model.center.top) { + xmlStream.addAttribute('top', model.center.top); + if (model.center.bottom === undefined) { + xmlStream.addAttribute('bottom', model.center.top); + } + } + if (model.center.bottom) { + xmlStream.addAttribute('bottom', model.center.bottom); + } + break; + default: + break; + } + const stopXform = this.map.stop; + model.stops.forEach(stopModel => { + stopXform.render(xmlStream, stopModel); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'gradientFill': + { + const model = this.model = { + stops: [] + }; + if (node.attributes.degree) { + model.gradient = 'angle'; + model.degree = parseInt(node.attributes.degree, 10); + } else if (node.attributes.type === 'path') { + model.gradient = 'path'; + model.center = { + left: node.attributes.left ? parseFloat(node.attributes.left) : 0, + top: node.attributes.top ? parseFloat(node.attributes.top) : 0 + }; + if (node.attributes.right !== node.attributes.left) { + model.center.right = node.attributes.right ? parseFloat(node.attributes.right) : 0; + } + if (node.attributes.bottom !== node.attributes.top) { + model.center.bottom = node.attributes.bottom ? parseFloat(node.attributes.bottom) : 0; + } + } + return true; + } + case 'stop': + this.parser = this.map.stop; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.stops.push(this.parser.model); + this.parser = undefined; + } + return true; + } + return false; + } +} + +// Fill encapsulates translation from fill model to/from xlsx +class FillXform extends BaseXform { + constructor() { + super(); + this.map = { + patternFill: new PatternFillXform(), + gradientFill: new GradientFillXform() + }; + } + get tag() { + return 'fill'; + } + render(xmlStream, model) { + xmlStream.addRollback(); + xmlStream.openNode('fill'); + switch (model.type) { + case 'pattern': + this.map.patternFill.render(xmlStream, model); + break; + case 'gradient': + this.map.gradientFill.render(xmlStream, model); + break; + default: + xmlStream.rollback(); + return; + } + xmlStream.closeNode(); + xmlStream.commit(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'fill': + this.model = {}; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model = this.parser.model; + this.model.type = this.parser.name; + this.parser = undefined; + } + return true; + } + return false; + } + validStyle(value) { + return FillXform.validPatternValues[value]; + } +} +FillXform.validPatternValues = ['none', 'solid', 'darkVertical', 'darkGray', 'mediumGray', 'lightGray', 'gray125', 'gray0625', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis', 'lightGrid'].reduce((p, v) => { + p[v] = true; + return p; +}, {}); +FillXform.StopXform = StopXform; +FillXform.PatternFillXform = PatternFillXform; +FillXform.GradientFillXform = GradientFillXform; +module.exports = FillXform; +//# sourceMappingURL=fill-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..6d7c2ca59c3dca2994940b5fce212682b6fb9cfa --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"fill-xform.js","names":["BaseXform","require","ColorXform","StopXform","constructor","map","color","tag","render","xmlStream","model","openNode","addAttribute","position","closeNode","parseOpen","node","parser","name","parseFloat","attributes","parseText","parseClose","undefined","PatternFillXform","fgColor","bgColor","pattern","type","patternType","text","GradientFillXform","stop","gradient","degree","center","left","right","top","bottom","stopXform","stops","forEach","stopModel","parseInt","push","FillXform","patternFill","gradientFill","addRollback","rollback","commit","validStyle","value","validPatternValues","reduce","p","v","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/fill-xform.js"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../base-xform');\n\nconst ColorXform = require('./color-xform');\n\nclass StopXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n color: new ColorXform(),\n };\n }\n\n get tag() {\n return 'stop';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('stop');\n xmlStream.addAttribute('position', model.position);\n this.map.color.render(xmlStream, model.color);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'stop':\n this.model = {\n position: parseFloat(node.attributes.position),\n };\n return true;\n case 'color':\n this.parser = this.map.color;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.color = this.parser.model;\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\nclass PatternFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fgColor: new ColorXform('fgColor'),\n bgColor: new ColorXform('bgColor'),\n };\n }\n\n get name() {\n return 'pattern';\n }\n\n get tag() {\n return 'patternFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('patternFill');\n xmlStream.addAttribute('patternType', model.pattern);\n if (model.fgColor) {\n this.map.fgColor.render(xmlStream, model.fgColor);\n }\n if (model.bgColor) {\n this.map.bgColor.render(xmlStream, model.bgColor);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'patternFill':\n this.model = {\n type: 'pattern',\n pattern: node.attributes.patternType,\n };\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n if (this.parser.model) {\n this.model[name] = this.parser.model;\n }\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\nclass GradientFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n stop: new StopXform(),\n };\n // if (model) {\n // this.gradient = model.gradient;\n // if (model.center) {\n // this.center = model.center;\n // }\n // if (model.degree !== undefined) {\n // this.degree = model.degree;\n // }\n // this.stops = model.stops.map(function(stop) { return new StopXform(stop); });\n // } else {\n // this.stops = [];\n // }\n }\n\n get name() {\n return 'gradient';\n }\n\n get tag() {\n return 'gradientFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('gradientFill');\n switch (model.gradient) {\n case 'angle':\n xmlStream.addAttribute('degree', model.degree);\n break;\n case 'path':\n xmlStream.addAttribute('type', 'path');\n if (model.center.left) {\n xmlStream.addAttribute('left', model.center.left);\n if (model.center.right === undefined) {\n xmlStream.addAttribute('right', model.center.left);\n }\n }\n if (model.center.right) {\n xmlStream.addAttribute('right', model.center.right);\n }\n if (model.center.top) {\n xmlStream.addAttribute('top', model.center.top);\n if (model.center.bottom === undefined) {\n xmlStream.addAttribute('bottom', model.center.top);\n }\n }\n if (model.center.bottom) {\n xmlStream.addAttribute('bottom', model.center.bottom);\n }\n break;\n\n default:\n break;\n }\n\n const stopXform = this.map.stop;\n model.stops.forEach(stopModel => {\n stopXform.render(xmlStream, stopModel);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'gradientFill': {\n const model = (this.model = {\n stops: [],\n });\n if (node.attributes.degree) {\n model.gradient = 'angle';\n model.degree = parseInt(node.attributes.degree, 10);\n } else if (node.attributes.type === 'path') {\n model.gradient = 'path';\n model.center = {\n left: node.attributes.left ? parseFloat(node.attributes.left) : 0,\n top: node.attributes.top ? parseFloat(node.attributes.top) : 0,\n };\n if (node.attributes.right !== node.attributes.left) {\n model.center.right = node.attributes.right ? parseFloat(node.attributes.right) : 0;\n }\n if (node.attributes.bottom !== node.attributes.top) {\n model.center.bottom = node.attributes.bottom ? parseFloat(node.attributes.bottom) : 0;\n }\n }\n return true;\n }\n\n case 'stop':\n this.parser = this.map.stop;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.stops.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\n// Fill encapsulates translation from fill model to/from xlsx\nclass FillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n patternFill: new PatternFillXform(),\n gradientFill: new GradientFillXform(),\n };\n }\n\n get tag() {\n return 'fill';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('fill');\n switch (model.type) {\n case 'pattern':\n this.map.patternFill.render(xmlStream, model);\n break;\n case 'gradient':\n this.map.gradientFill.render(xmlStream, model);\n break;\n default:\n xmlStream.rollback();\n return;\n }\n xmlStream.closeNode();\n xmlStream.commit();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'fill':\n this.model = {};\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model = this.parser.model;\n this.model.type = this.parser.name;\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n\n validStyle(value) {\n return FillXform.validPatternValues[value];\n }\n}\n\nFillXform.validPatternValues = [\n 'none',\n 'solid',\n 'darkVertical',\n 'darkGray',\n 'mediumGray',\n 'lightGray',\n 'gray125',\n 'gray0625',\n 'darkHorizontal',\n 'darkVertical',\n 'darkDown',\n 'darkUp',\n 'darkGrid',\n 'darkTrellis',\n 'lightHorizontal',\n 'lightVertical',\n 'lightDown',\n 'lightUp',\n 'lightGrid',\n 'lightTrellis',\n 'lightGrid',\n].reduce((p, v) => {\n p[v] = true;\n return p;\n}, {});\n\nFillXform.StopXform = StopXform;\nFillXform.PatternFillXform = PatternFillXform;\nFillXform.GradientFillXform = GradientFillXform;\n\nmodule.exports = FillXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..f982078f9d27de6bbe5ab3204ca1a99030d677c6 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js @@ -0,0 +1,175 @@ +'use strict'; + +const ColorXform = require('./color-xform'); +const BooleanXform = require('../simple/boolean-xform'); +const IntegerXform = require('../simple/integer-xform'); +const StringXform = require('../simple/string-xform'); +const UnderlineXform = require('./underline-xform'); +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); + +// Font encapsulates translation from font model to xlsx +class FontXform extends BaseXform { + constructor(options) { + super(); + this.options = options || FontXform.OPTIONS; + this.map = { + b: { + prop: 'bold', + xform: new BooleanXform({ + tag: 'b', + attr: 'val' + }) + }, + i: { + prop: 'italic', + xform: new BooleanXform({ + tag: 'i', + attr: 'val' + }) + }, + u: { + prop: 'underline', + xform: new UnderlineXform() + }, + charset: { + prop: 'charset', + xform: new IntegerXform({ + tag: 'charset', + attr: 'val' + }) + }, + color: { + prop: 'color', + xform: new ColorXform() + }, + condense: { + prop: 'condense', + xform: new BooleanXform({ + tag: 'condense', + attr: 'val' + }) + }, + extend: { + prop: 'extend', + xform: new BooleanXform({ + tag: 'extend', + attr: 'val' + }) + }, + family: { + prop: 'family', + xform: new IntegerXform({ + tag: 'family', + attr: 'val' + }) + }, + outline: { + prop: 'outline', + xform: new BooleanXform({ + tag: 'outline', + attr: 'val' + }) + }, + vertAlign: { + prop: 'vertAlign', + xform: new StringXform({ + tag: 'vertAlign', + attr: 'val' + }) + }, + scheme: { + prop: 'scheme', + xform: new StringXform({ + tag: 'scheme', + attr: 'val' + }) + }, + shadow: { + prop: 'shadow', + xform: new BooleanXform({ + tag: 'shadow', + attr: 'val' + }) + }, + strike: { + prop: 'strike', + xform: new BooleanXform({ + tag: 'strike', + attr: 'val' + }) + }, + sz: { + prop: 'size', + xform: new IntegerXform({ + tag: 'sz', + attr: 'val' + }) + } + }; + this.map[this.options.fontNameTag] = { + prop: 'name', + xform: new StringXform({ + tag: this.options.fontNameTag, + attr: 'val' + }) + }; + } + get tag() { + return this.options.tagName; + } + render(xmlStream, model) { + const { + map + } = this; + xmlStream.openNode(this.options.tagName); + _.each(this.map, (defn, tag) => { + map[tag].xform.render(xmlStream, model[defn.prop]); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (this.map[node.name]) { + this.parser = this.map[node.name].xform; + return this.parser.parseOpen(node); + } + switch (node.name) { + case this.options.tagName: + this.model = {}; + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser && !this.parser.parseClose(name)) { + const item = this.map[name]; + if (this.parser.model) { + this.model[item.prop] = this.parser.model; + } + this.parser = undefined; + return true; + } + switch (name) { + case this.options.tagName: + return false; + default: + return true; + } + } +} +FontXform.OPTIONS = { + tagName: 'font', + fontNameTag: 'name' +}; +module.exports = FontXform; +//# sourceMappingURL=font-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2784b2a815a2c9ad0df4e7321adf001a82d3267b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"font-xform.js","names":["ColorXform","require","BooleanXform","IntegerXform","StringXform","UnderlineXform","_","BaseXform","FontXform","constructor","options","OPTIONS","map","b","prop","xform","tag","attr","i","u","charset","color","condense","extend","family","outline","vertAlign","scheme","shadow","strike","sz","fontNameTag","tagName","render","xmlStream","model","openNode","each","defn","closeNode","parseOpen","node","parser","name","parseText","text","parseClose","item","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/font-xform.js"],"sourcesContent":["'use strict';\n\nconst ColorXform = require('./color-xform');\nconst BooleanXform = require('../simple/boolean-xform');\nconst IntegerXform = require('../simple/integer-xform');\nconst StringXform = require('../simple/string-xform');\nconst UnderlineXform = require('./underline-xform');\n\nconst _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\n// Font encapsulates translation from font model to xlsx\nclass FontXform extends BaseXform {\n constructor(options) {\n super();\n\n this.options = options || FontXform.OPTIONS;\n\n this.map = {\n b: {prop: 'bold', xform: new BooleanXform({tag: 'b', attr: 'val'})},\n i: {prop: 'italic', xform: new BooleanXform({tag: 'i', attr: 'val'})},\n u: {prop: 'underline', xform: new UnderlineXform()},\n charset: {prop: 'charset', xform: new IntegerXform({tag: 'charset', attr: 'val'})},\n color: {prop: 'color', xform: new ColorXform()},\n condense: {prop: 'condense', xform: new BooleanXform({tag: 'condense', attr: 'val'})},\n extend: {prop: 'extend', xform: new BooleanXform({tag: 'extend', attr: 'val'})},\n family: {prop: 'family', xform: new IntegerXform({tag: 'family', attr: 'val'})},\n outline: {prop: 'outline', xform: new BooleanXform({tag: 'outline', attr: 'val'})},\n vertAlign: {prop: 'vertAlign', xform: new StringXform({tag: 'vertAlign', attr: 'val'})},\n scheme: {prop: 'scheme', xform: new StringXform({tag: 'scheme', attr: 'val'})},\n shadow: {prop: 'shadow', xform: new BooleanXform({tag: 'shadow', attr: 'val'})},\n strike: {prop: 'strike', xform: new BooleanXform({tag: 'strike', attr: 'val'})},\n sz: {prop: 'size', xform: new IntegerXform({tag: 'sz', attr: 'val'})},\n };\n this.map[this.options.fontNameTag] = {\n prop: 'name',\n xform: new StringXform({tag: this.options.fontNameTag, attr: 'val'}),\n };\n }\n\n get tag() {\n return this.options.tagName;\n }\n\n render(xmlStream, model) {\n const {map} = this;\n\n xmlStream.openNode(this.options.tagName);\n _.each(this.map, (defn, tag) => {\n map[tag].xform.render(xmlStream, model[defn.prop]);\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (this.map[node.name]) {\n this.parser = this.map[node.name].xform;\n return this.parser.parseOpen(node);\n }\n switch (node.name) {\n case this.options.tagName:\n this.model = {};\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser && !this.parser.parseClose(name)) {\n const item = this.map[name];\n if (this.parser.model) {\n this.model[item.prop] = this.parser.model;\n }\n this.parser = undefined;\n return true;\n }\n switch (name) {\n case this.options.tagName:\n return false;\n default:\n return true;\n }\n }\n}\n\nFontXform.OPTIONS = {\n tagName: 'font',\n fontNameTag: 'name',\n};\n\nmodule.exports = FontXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..86f01bd4cd13817bc26fbcee79a698dbac8048be --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js @@ -0,0 +1,59 @@ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const defaultNumFormats = require('../../defaultnumformats'); +const BaseXform = require('../base-xform'); +function hashDefaultFormats() { + const hash = {}; + _.each(defaultNumFormats, (dnf, id) => { + if (dnf.f) { + hash[dnf.f] = parseInt(id, 10); + } + // at some point, add the other cultures here... + }); + + return hash; +} +const defaultFmtHash = hashDefaultFormats(); + +// NumFmt encapsulates translation between number format and xlsx +class NumFmtXform extends BaseXform { + constructor(id, formatCode) { + super(); + this.id = id; + this.formatCode = formatCode; + } + get tag() { + return 'numFmt'; + } + render(xmlStream, model) { + xmlStream.leafNode('numFmt', { + numFmtId: model.id, + formatCode: model.formatCode + }); + } + parseOpen(node) { + switch (node.name) { + case 'numFmt': + this.model = { + id: parseInt(node.attributes.numFmtId, 10), + formatCode: node.attributes.formatCode.replace(/[\\](.)/g, '$1') + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +NumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) { + return defaultFmtHash[formatCode]; +}; +NumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) { + return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f; +}; +module.exports = NumFmtXform; +//# sourceMappingURL=numfmt-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..45cc7c80b56bde7c9ecbc4aaca8e85f8ec587e9a --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"numfmt-xform.js","names":["_","require","defaultNumFormats","BaseXform","hashDefaultFormats","hash","each","dnf","id","f","parseInt","defaultFmtHash","NumFmtXform","constructor","formatCode","tag","render","xmlStream","model","leafNode","numFmtId","parseOpen","node","name","attributes","replace","parseText","parseClose","getDefaultFmtId","getDefaultFmtCode","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/numfmt-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\nconst defaultNumFormats = require('../../defaultnumformats');\n\nconst BaseXform = require('../base-xform');\n\nfunction hashDefaultFormats() {\n const hash = {};\n _.each(defaultNumFormats, (dnf, id) => {\n if (dnf.f) {\n hash[dnf.f] = parseInt(id, 10);\n }\n // at some point, add the other cultures here...\n });\n return hash;\n}\nconst defaultFmtHash = hashDefaultFormats();\n\n// NumFmt encapsulates translation between number format and xlsx\nclass NumFmtXform extends BaseXform {\n constructor(id, formatCode) {\n super();\n\n this.id = id;\n this.formatCode = formatCode;\n }\n\n get tag() {\n return 'numFmt';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('numFmt', {numFmtId: model.id, formatCode: model.formatCode});\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'numFmt':\n this.model = {\n id: parseInt(node.attributes.numFmtId, 10),\n formatCode: node.attributes.formatCode.replace(/[\\\\](.)/g, '$1'),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nNumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) {\n return defaultFmtHash[formatCode];\n};\n\nNumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) {\n return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f;\n};\n\nmodule.exports = NumFmtXform;\n"],"mappings":";;AAAA,MAAMA,CAAC,GAAGC,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAMC,iBAAiB,GAAGD,OAAO,CAAC,yBAAyB,CAAC;AAE5D,MAAME,SAAS,GAAGF,OAAO,CAAC,eAAe,CAAC;AAE1C,SAASG,kBAAkBA,CAAA,EAAG;EAC5B,MAAMC,IAAI,GAAG,CAAC,CAAC;EACfL,CAAC,CAACM,IAAI,CAACJ,iBAAiB,EAAE,CAACK,GAAG,EAAEC,EAAE,KAAK;IACrC,IAAID,GAAG,CAACE,CAAC,EAAE;MACTJ,IAAI,CAACE,GAAG,CAACE,CAAC,CAAC,GAAGC,QAAQ,CAACF,EAAE,EAAE,EAAE,CAAC;IAChC;IACA;EACF,CAAC,CAAC;;EACF,OAAOH,IAAI;AACb;AACA,MAAMM,cAAc,GAAGP,kBAAkB,CAAC,CAAC;;AAE3C;AACA,MAAMQ,WAAW,SAAST,SAAS,CAAC;EAClCU,WAAWA,CAACL,EAAE,EAAEM,UAAU,EAAE;IAC1B,KAAK,CAAC,CAAC;IAEP,IAAI,CAACN,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACM,UAAU,GAAGA,UAAU;EAC9B;EAEA,IAAIC,GAAGA,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,QAAQ,EAAE;MAACC,QAAQ,EAAEF,KAAK,CAACV,EAAE;MAAEM,UAAU,EAAEI,KAAK,CAACJ;IAAU,CAAC,CAAC;EAClF;EAEAO,SAASA,CAACC,IAAI,EAAE;IACd,QAAQA,IAAI,CAACC,IAAI;MACf,KAAK,QAAQ;QACX,IAAI,CAACL,KAAK,GAAG;UACXV,EAAE,EAAEE,QAAQ,CAACY,IAAI,CAACE,UAAU,CAACJ,QAAQ,EAAE,EAAE,CAAC;UAC1CN,UAAU,EAAEQ,IAAI,CAACE,UAAU,CAACV,UAAU,CAACW,OAAO,CAAC,UAAU,EAAE,IAAI;QACjE,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAf,WAAW,CAACgB,eAAe,GAAG,SAASA,eAAeA,CAACd,UAAU,EAAE;EACjE,OAAOH,cAAc,CAACG,UAAU,CAAC;AACnC,CAAC;AAEDF,WAAW,CAACiB,iBAAiB,GAAG,SAASA,iBAAiBA,CAACT,QAAQ,EAAE;EACnE,OAAOlB,iBAAiB,CAACkB,QAAQ,CAAC,IAAIlB,iBAAiB,CAACkB,QAAQ,CAAC,CAACX,CAAC;AACrE,CAAC;AAEDqB,MAAM,CAACC,OAAO,GAAGnB,WAAW"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..a63b5c6d636cd960138653d286a2f16942824d40 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js @@ -0,0 +1,53 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const validation = { + boolean(value, dflt) { + if (value === undefined) { + return dflt; + } + return value; + } +}; + +// Protection encapsulates translation from style.protection model to/from xlsx +class ProtectionXform extends BaseXform { + get tag() { + return 'protection'; + } + render(xmlStream, model) { + xmlStream.addRollback(); + xmlStream.openNode('protection'); + let isValid = false; + function add(name, value) { + if (value !== undefined) { + xmlStream.addAttribute(name, value); + isValid = true; + } + } + add('locked', validation.boolean(model.locked, true) ? undefined : '0'); + add('hidden', validation.boolean(model.hidden, false) ? '1' : undefined); + xmlStream.closeNode(); + if (isValid) { + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + parseOpen(node) { + const model = { + locked: !(node.attributes.locked === '0'), + hidden: node.attributes.hidden === '1' + }; + + // only want to record models that differ from defaults + const isSignificant = !model.locked || model.hidden; + this.model = isSignificant ? model : null; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = ProtectionXform; +//# sourceMappingURL=protection-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2807cc67d12ee973087534f2c02045025fc001ed --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"protection-xform.js","names":["BaseXform","require","validation","boolean","value","dflt","undefined","ProtectionXform","tag","render","xmlStream","model","addRollback","openNode","isValid","add","name","addAttribute","locked","hidden","closeNode","commit","rollback","parseOpen","node","attributes","isSignificant","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/protection-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nconst validation = {\n boolean(value, dflt) {\n if (value === undefined) {\n return dflt;\n }\n return value;\n },\n};\n\n// Protection encapsulates translation from style.protection model to/from xlsx\nclass ProtectionXform extends BaseXform {\n get tag() {\n return 'protection';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('protection');\n\n let isValid = false;\n function add(name, value) {\n if (value !== undefined) {\n xmlStream.addAttribute(name, value);\n isValid = true;\n }\n }\n add('locked', validation.boolean(model.locked, true) ? undefined : '0');\n add('hidden', validation.boolean(model.hidden, false) ? '1' : undefined);\n\n xmlStream.closeNode();\n\n if (isValid) {\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n\n parseOpen(node) {\n const model = {\n locked: !(node.attributes.locked === '0'),\n hidden: node.attributes.hidden === '1',\n };\n\n // only want to record models that differ from defaults\n const isSignificant = !model.locked || model.hidden;\n\n this.model = isSignificant ? model : null;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = ProtectionXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,UAAU,GAAG;EACjBC,OAAOA,CAACC,KAAK,EAAEC,IAAI,EAAE;IACnB,IAAID,KAAK,KAAKE,SAAS,EAAE;MACvB,OAAOD,IAAI;IACb;IACA,OAAOD,KAAK;EACd;AACF,CAAC;;AAED;AACA,MAAMG,eAAe,SAASP,SAAS,CAAC;EACtC,IAAIQ,GAAGA,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,WAAW,CAAC,CAAC;IACvBF,SAAS,CAACG,QAAQ,CAAC,YAAY,CAAC;IAEhC,IAAIC,OAAO,GAAG,KAAK;IACnB,SAASC,GAAGA,CAACC,IAAI,EAAEZ,KAAK,EAAE;MACxB,IAAIA,KAAK,KAAKE,SAAS,EAAE;QACvBI,SAAS,CAACO,YAAY,CAACD,IAAI,EAAEZ,KAAK,CAAC;QACnCU,OAAO,GAAG,IAAI;MAChB;IACF;IACAC,GAAG,CAAC,QAAQ,EAAEb,UAAU,CAACC,OAAO,CAACQ,KAAK,CAACO,MAAM,EAAE,IAAI,CAAC,GAAGZ,SAAS,GAAG,GAAG,CAAC;IACvES,GAAG,CAAC,QAAQ,EAAEb,UAAU,CAACC,OAAO,CAACQ,KAAK,CAACQ,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,GAAGb,SAAS,CAAC;IAExEI,SAAS,CAACU,SAAS,CAAC,CAAC;IAErB,IAAIN,OAAO,EAAE;MACXJ,SAAS,CAACW,MAAM,CAAC,CAAC;IACpB,CAAC,MAAM;MACLX,SAAS,CAACY,QAAQ,CAAC,CAAC;IACtB;EACF;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,MAAMb,KAAK,GAAG;MACZO,MAAM,EAAE,EAAEM,IAAI,CAACC,UAAU,CAACP,MAAM,KAAK,GAAG,CAAC;MACzCC,MAAM,EAAEK,IAAI,CAACC,UAAU,CAACN,MAAM,KAAK;IACrC,CAAC;;IAED;IACA,MAAMO,aAAa,GAAG,CAACf,KAAK,CAACO,MAAM,IAAIP,KAAK,CAACQ,MAAM;IAEnD,IAAI,CAACR,KAAK,GAAGe,aAAa,GAAGf,KAAK,GAAG,IAAI;EAC3C;EAEAgB,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGvB,eAAe"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..71528bbe2d947f9b3ae9f1f2b0006f5fd861ee1b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js @@ -0,0 +1,118 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const AlignmentXform = require('./alignment-xform'); +const ProtectionXform = require('./protection-xform'); + +// +// Optional +// Optional +// + +// Style assists translation from style model to/from xlsx +class StyleXform extends BaseXform { + constructor(options) { + super(); + this.xfId = !!(options && options.xfId); + this.map = { + alignment: new AlignmentXform(), + protection: new ProtectionXform() + }; + } + get tag() { + return 'xf'; + } + render(xmlStream, model) { + xmlStream.openNode('xf', { + numFmtId: model.numFmtId || 0, + fontId: model.fontId || 0, + fillId: model.fillId || 0, + borderId: model.borderId || 0 + }); + if (this.xfId) { + xmlStream.addAttribute('xfId', model.xfId || 0); + } + if (model.numFmtId) { + xmlStream.addAttribute('applyNumberFormat', '1'); + } + if (model.fontId) { + xmlStream.addAttribute('applyFont', '1'); + } + if (model.fillId) { + xmlStream.addAttribute('applyFill', '1'); + } + if (model.borderId) { + xmlStream.addAttribute('applyBorder', '1'); + } + if (model.alignment) { + xmlStream.addAttribute('applyAlignment', '1'); + } + if (model.protection) { + xmlStream.addAttribute('applyProtection', '1'); + } + + /** + * Rendering tags causes close of XML stream. + * Therefore adding attributes must be done before rendering tags. + */ + + if (model.alignment) { + this.map.alignment.render(xmlStream, model.alignment); + } + if (model.protection) { + this.map.protection.render(xmlStream, model.protection); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + // used during sax parsing of xml to build font object + switch (node.name) { + case 'xf': + this.model = { + numFmtId: parseInt(node.attributes.numFmtId, 10), + fontId: parseInt(node.attributes.fontId, 10), + fillId: parseInt(node.attributes.fillId, 10), + borderId: parseInt(node.attributes.borderId, 10) + }; + if (this.xfId) { + this.model.xfId = parseInt(node.attributes.xfId, 10); + } + return true; + case 'alignment': + this.parser = this.map.alignment; + this.parser.parseOpen(node); + return true; + case 'protection': + this.parser = this.map.protection; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + if (this.map.protection === this.parser) { + this.model.protection = this.parser.model; + } else { + this.model.alignment = this.parser.model; + } + this.parser = undefined; + } + return true; + } + return name !== 'xf'; + } +} +module.exports = StyleXform; +//# sourceMappingURL=style-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..a3fb5e801e1f2dd72186ef24e988ae2423b0fb43 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"style-xform.js","names":["BaseXform","require","AlignmentXform","ProtectionXform","StyleXform","constructor","options","xfId","map","alignment","protection","tag","render","xmlStream","model","openNode","numFmtId","fontId","fillId","borderId","addAttribute","closeNode","parseOpen","node","parser","name","parseInt","attributes","parseText","text","parseClose","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/style-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nconst AlignmentXform = require('./alignment-xform');\nconst ProtectionXform = require('./protection-xform');\n\n// \n// Optional \n// Optional \n// \n\n// Style assists translation from style model to/from xlsx\nclass StyleXform extends BaseXform {\n constructor(options) {\n super();\n\n this.xfId = !!(options && options.xfId);\n this.map = {\n alignment: new AlignmentXform(),\n protection: new ProtectionXform(),\n };\n }\n\n get tag() {\n return 'xf';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('xf', {\n numFmtId: model.numFmtId || 0,\n fontId: model.fontId || 0,\n fillId: model.fillId || 0,\n borderId: model.borderId || 0,\n });\n if (this.xfId) {\n xmlStream.addAttribute('xfId', model.xfId || 0);\n }\n\n if (model.numFmtId) {\n xmlStream.addAttribute('applyNumberFormat', '1');\n }\n if (model.fontId) {\n xmlStream.addAttribute('applyFont', '1');\n }\n if (model.fillId) {\n xmlStream.addAttribute('applyFill', '1');\n }\n if (model.borderId) {\n xmlStream.addAttribute('applyBorder', '1');\n }\n if (model.alignment) {\n xmlStream.addAttribute('applyAlignment', '1');\n }\n if (model.protection) {\n xmlStream.addAttribute('applyProtection', '1');\n }\n\n /**\n * Rendering tags causes close of XML stream.\n * Therefore adding attributes must be done before rendering tags.\n */\n\n if (model.alignment) {\n this.map.alignment.render(xmlStream, model.alignment);\n }\n if (model.protection) {\n this.map.protection.render(xmlStream, model.protection);\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n // used during sax parsing of xml to build font object\n switch (node.name) {\n case 'xf':\n this.model = {\n numFmtId: parseInt(node.attributes.numFmtId, 10),\n fontId: parseInt(node.attributes.fontId, 10),\n fillId: parseInt(node.attributes.fillId, 10),\n borderId: parseInt(node.attributes.borderId, 10),\n };\n if (this.xfId) {\n this.model.xfId = parseInt(node.attributes.xfId, 10);\n }\n return true;\n case 'alignment':\n this.parser = this.map.alignment;\n this.parser.parseOpen(node);\n return true;\n case 'protection':\n this.parser = this.map.protection;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n if (this.map.protection === this.parser) {\n this.model.protection = this.parser.model;\n } else {\n this.model.alignment = this.parser.model;\n }\n this.parser = undefined;\n }\n return true;\n }\n return name !== 'xf';\n }\n}\n\nmodule.exports = StyleXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..100076716204fd89115cb9ae8b282f45757f4752 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js @@ -0,0 +1,612 @@ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const Enums = require('../../../doc/enums'); +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const StaticXform = require('../static-xform'); +const ListXform = require('../list-xform'); +const FontXform = require('./font-xform'); +const FillXform = require('./fill-xform'); +const BorderXform = require('./border-xform'); +const NumFmtXform = require('./numfmt-xform'); +const StyleXform = require('./style-xform'); +const DxfXform = require('./dxf-xform'); + +// custom numfmt ids start here +const NUMFMT_BASE = 164; + +// ============================================================================= +// StylesXform is used to generate and parse the styles.xml file +// it manages the collections of fonts, number formats, alignments, etc +class StylesXform extends BaseXform { + constructor(initialise) { + super(); + this.map = { + numFmts: new ListXform({ + tag: 'numFmts', + count: true, + childXform: new NumFmtXform() + }), + fonts: new ListXform({ + tag: 'fonts', + count: true, + childXform: new FontXform(), + $: { + 'x14ac:knownFonts': 1 + } + }), + fills: new ListXform({ + tag: 'fills', + count: true, + childXform: new FillXform() + }), + borders: new ListXform({ + tag: 'borders', + count: true, + childXform: new BorderXform() + }), + cellStyleXfs: new ListXform({ + tag: 'cellStyleXfs', + count: true, + childXform: new StyleXform() + }), + cellXfs: new ListXform({ + tag: 'cellXfs', + count: true, + childXform: new StyleXform({ + xfId: true + }) + }), + dxfs: new ListXform({ + tag: 'dxfs', + always: true, + count: true, + childXform: new DxfXform() + }), + // for style manager + numFmt: new NumFmtXform(), + font: new FontXform(), + fill: new FillXform(), + border: new BorderXform(), + style: new StyleXform({ + xfId: true + }), + cellStyles: StylesXform.STATIC_XFORMS.cellStyles, + tableStyles: StylesXform.STATIC_XFORMS.tableStyles, + extLst: StylesXform.STATIC_XFORMS.extLst + }; + if (initialise) { + // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing + this.init(); + } + } + initIndex() { + this.index = { + style: {}, + numFmt: {}, + numFmtNextId: 164, + // start custom format ids here + font: {}, + border: {}, + fill: {} + }; + } + init() { + // Prepare for Style Manager role + this.model = { + styles: [], + numFmts: [], + fonts: [], + borders: [], + fills: [], + dxfs: [] + }; + this.initIndex(); + + // default (zero) border + this._addBorder({}); + + // add default (all zero) style + this._addStyle({ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }); + + // add default fills + this._addFill({ + type: 'pattern', + pattern: 'none' + }); + this._addFill({ + type: 'pattern', + pattern: 'gray125' + }); + this.weakMap = new WeakMap(); + } + render(xmlStream, model) { + model = model || this.model; + // + // + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES); + if (this.index) { + // model has been built by style manager role (contains xml) + if (model.numFmts && model.numFmts.length) { + xmlStream.openNode('numFmts', { + count: model.numFmts.length + }); + model.numFmts.forEach(numFmtXml => { + xmlStream.writeXml(numFmtXml); + }); + xmlStream.closeNode(); + } + if (!model.fonts.length) { + // default (zero) font + this._addFont({ + size: 11, + color: { + theme: 1 + }, + name: 'Calibri', + family: 2, + scheme: 'minor' + }); + } + xmlStream.openNode('fonts', { + count: model.fonts.length, + 'x14ac:knownFonts': 1 + }); + model.fonts.forEach(fontXml => { + xmlStream.writeXml(fontXml); + }); + xmlStream.closeNode(); + xmlStream.openNode('fills', { + count: model.fills.length + }); + model.fills.forEach(fillXml => { + xmlStream.writeXml(fillXml); + }); + xmlStream.closeNode(); + xmlStream.openNode('borders', { + count: model.borders.length + }); + model.borders.forEach(borderXml => { + xmlStream.writeXml(borderXml); + }); + xmlStream.closeNode(); + this.map.cellStyleXfs.render(xmlStream, [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }]); + xmlStream.openNode('cellXfs', { + count: model.styles.length + }); + model.styles.forEach(styleXml => { + xmlStream.writeXml(styleXml); + }); + xmlStream.closeNode(); + } else { + // model is plain JSON and needs to be xformed + this.map.numFmts.render(xmlStream, model.numFmts); + this.map.fonts.render(xmlStream, model.fonts); + this.map.fills.render(xmlStream, model.fills); + this.map.borders.render(xmlStream, model.borders); + this.map.cellStyleXfs.render(xmlStream, [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }]); + this.map.cellXfs.render(xmlStream, model.styles); + } + StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream); + this.map.dxfs.render(xmlStream, model.dxfs); + StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream); + StylesXform.STATIC_XFORMS.extLst.render(xmlStream); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'styleSheet': + this.initIndex(); + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + return true; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'styleSheet': + { + this.model = {}; + const add = (propName, xform) => { + if (xform.model && xform.model.length) { + this.model[propName] = xform.model; + } + }; + add('numFmts', this.map.numFmts); + add('fonts', this.map.fonts); + add('fills', this.map.fills); + add('borders', this.map.borders); + add('styles', this.map.cellXfs); + add('dxfs', this.map.dxfs); + + // index numFmts + this.index = { + model: [], + numFmt: [] + }; + if (this.model.numFmts) { + const numFmtIndex = this.index.numFmt; + this.model.numFmts.forEach(numFmt => { + numFmtIndex[numFmt.id] = numFmt.formatCode; + }); + } + return false; + } + default: + // not quite sure how we get here! + return true; + } + } + + // add a cell's style model to the collection + // each style property is processed and cross-referenced, etc. + // the styleId is returned. Note: cellType is used when numFmt not defined + addStyleModel(model, cellType) { + if (!model) { + return 0; + } + + // if we have no default font, add it here now + if (!this.model.fonts.length) { + // default (zero) font + this._addFont({ + size: 11, + color: { + theme: 1 + }, + name: 'Calibri', + family: 2, + scheme: 'minor' + }); + } + + // if we have seen this style object before, assume it has the same styleId + if (this.weakMap && this.weakMap.has(model)) { + return this.weakMap.get(model); + } + const style = {}; + cellType = cellType || Enums.ValueType.Number; + if (model.numFmt) { + style.numFmtId = this._addNumFmtStr(model.numFmt); + } else { + switch (cellType) { + case Enums.ValueType.Number: + style.numFmtId = this._addNumFmtStr('General'); + break; + case Enums.ValueType.Date: + style.numFmtId = this._addNumFmtStr('mm-dd-yy'); + break; + default: + break; + } + } + if (model.font) { + style.fontId = this._addFont(model.font); + } + if (model.border) { + style.borderId = this._addBorder(model.border); + } + if (model.fill) { + style.fillId = this._addFill(model.fill); + } + if (model.alignment) { + style.alignment = model.alignment; + } + if (model.protection) { + style.protection = model.protection; + } + const styleId = this._addStyle(style); + if (this.weakMap) { + this.weakMap.set(model, styleId); + } + return styleId; + } + + // given a styleId (i.e. s="n"), get the cell's style model + // objects are shared where possible. + getStyleModel(id) { + // if the style doesn't exist return null + const style = this.model.styles[id]; + if (!style) return null; + + // have we built this model before? + let model = this.index.model[id]; + if (model) return model; + + // build a new model + model = this.index.model[id] = {}; + + // ------------------------------------------------------- + // number format + if (style.numFmtId) { + const numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId); + if (numFmt) { + model.numFmt = numFmt; + } + } + function addStyle(name, group, styleId) { + if (styleId || styleId === 0) { + const part = group[styleId]; + if (part) { + model[name] = part; + } + } + } + addStyle('font', this.model.fonts, style.fontId); + addStyle('border', this.model.borders, style.borderId); + addStyle('fill', this.model.fills, style.fillId); + + // ------------------------------------------------------- + // alignment + if (style.alignment) { + model.alignment = style.alignment; + } + + // ------------------------------------------------------- + // protection + if (style.protection) { + model.protection = style.protection; + } + return model; + } + addDxfStyle(style) { + if (style.numFmt) { + // register numFmtId to use it during dxf-xform rendering + style.numFmtId = this._addNumFmtStr(style.numFmt); + } + this.model.dxfs.push(style); + return this.model.dxfs.length - 1; + } + getDxfStyle(id) { + return this.model.dxfs[id]; + } + + // ========================================================================= + // Private Interface + _addStyle(style) { + const xml = this.map.style.toXml(style); + let index = this.index.style[xml]; + if (index === undefined) { + index = this.index.style[xml] = this.model.styles.length; + this.model.styles.push(xml); + } + return index; + } + + // ========================================================================= + // Number Formats + _addNumFmtStr(formatCode) { + // check if default format + let index = NumFmtXform.getDefaultFmtId(formatCode); + if (index !== undefined) return index; + + // check if already in + index = this.index.numFmt[formatCode]; + if (index !== undefined) return index; + index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length; + const xml = this.map.numFmt.toXml({ + id: index, + formatCode + }); + this.model.numFmts.push(xml); + return index; + } + + // ========================================================================= + // Fonts + _addFont(font) { + const xml = this.map.font.toXml(font); + let index = this.index.font[xml]; + if (index === undefined) { + index = this.index.font[xml] = this.model.fonts.length; + this.model.fonts.push(xml); + } + return index; + } + + // ========================================================================= + // Borders + _addBorder(border) { + const xml = this.map.border.toXml(border); + let index = this.index.border[xml]; + if (index === undefined) { + index = this.index.border[xml] = this.model.borders.length; + this.model.borders.push(xml); + } + return index; + } + + // ========================================================================= + // Fills + _addFill(fill) { + const xml = this.map.fill.toXml(fill); + let index = this.index.fill[xml]; + if (index === undefined) { + index = this.index.fill[xml] = this.model.fills.length; + this.model.fills.push(xml); + } + return index; + } + + // ========================================================================= +} + +StylesXform.STYLESHEET_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'x14ac x16r2', + 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac', + 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main' +}; +StylesXform.STATIC_XFORMS = { + cellStyles: new StaticXform({ + tag: 'cellStyles', + $: { + count: 1 + }, + c: [{ + tag: 'cellStyle', + $: { + name: 'Normal', + xfId: 0, + builtinId: 0 + } + }] + }), + dxfs: new StaticXform({ + tag: 'dxfs', + $: { + count: 0 + } + }), + tableStyles: new StaticXform({ + tag: 'tableStyles', + $: { + count: 0, + defaultTableStyle: 'TableStyleMedium2', + defaultPivotStyle: 'PivotStyleLight16' + } + }), + extLst: new StaticXform({ + tag: 'extLst', + c: [{ + tag: 'ext', + $: { + uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}', + 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main' + }, + c: [{ + tag: 'x14:slicerStyles', + $: { + defaultSlicerStyle: 'SlicerStyleLight1' + } + }] + }, { + tag: 'ext', + $: { + uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}', + 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main' + }, + c: [{ + tag: 'x15:timelineStyles', + $: { + defaultTimelineStyle: 'TimeSlicerStyleLight1' + } + }] + }] + }) +}; + +// the stylemanager mock acts like StyleManager except that it always returns 0 or {} +class StylesXformMock extends StylesXform { + constructor() { + super(); + this.model = { + styles: [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }], + numFmts: [], + fonts: [{ + size: 11, + color: { + theme: 1 + }, + name: 'Calibri', + family: 2, + scheme: 'minor' + }], + borders: [{}], + fills: [{ + type: 'pattern', + pattern: 'none' + }, { + type: 'pattern', + pattern: 'gray125' + }] + }; + } + + // ========================================================================= + // Style Manager Interface + + // override normal behaviour - consume and dispose + parseStream(stream) { + stream.autodrain(); + return Promise.resolve(); + } + + // add a cell's style model to the collection + // each style property is processed and cross-referenced, etc. + // the styleId is returned. Note: cellType is used when numFmt not defined + addStyleModel(model, cellType) { + switch (cellType) { + case Enums.ValueType.Date: + return this.dateStyleId; + default: + return 0; + } + } + get dateStyleId() { + if (!this._dateStyleId) { + const dateStyle = { + numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy') + }; + this._dateStyleId = this.model.styles.length; + this.model.styles.push(dateStyle); + } + return this._dateStyleId; + } + + // given a styleId (i.e. s="n"), get the cell's style model + // objects are shared where possible. + getStyleModel( /* id */ + ) { + return {}; + } +} +StylesXform.Mock = StylesXformMock; +module.exports = StylesXform; +//# sourceMappingURL=styles-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..eace1a83191d9600836b73478c4c2bcd6e26e55c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"styles-xform.js","names":["Enums","require","XmlStream","BaseXform","StaticXform","ListXform","FontXform","FillXform","BorderXform","NumFmtXform","StyleXform","DxfXform","NUMFMT_BASE","StylesXform","constructor","initialise","map","numFmts","tag","count","childXform","fonts","$","fills","borders","cellStyleXfs","cellXfs","xfId","dxfs","always","numFmt","font","fill","border","style","cellStyles","STATIC_XFORMS","tableStyles","extLst","init","initIndex","index","numFmtNextId","model","styles","_addBorder","_addStyle","numFmtId","fontId","fillId","borderId","_addFill","type","pattern","weakMap","WeakMap","render","xmlStream","openXml","StdDocAttributes","openNode","STYLESHEET_ATTRIBUTES","length","forEach","numFmtXml","writeXml","closeNode","_addFont","size","color","theme","name","family","scheme","fontXml","fillXml","borderXml","styleXml","parseOpen","node","parser","parseText","text","parseClose","undefined","add","propName","xform","numFmtIndex","id","formatCode","addStyleModel","cellType","has","get","ValueType","Number","_addNumFmtStr","Date","alignment","protection","styleId","set","getStyleModel","getDefaultFmtCode","addStyle","group","part","addDxfStyle","push","getDxfStyle","xml","toXml","getDefaultFmtId","xmlns","c","builtinId","defaultTableStyle","defaultPivotStyle","uri","defaultSlicerStyle","defaultTimelineStyle","StylesXformMock","parseStream","stream","autodrain","Promise","resolve","dateStyleId","_dateStyleId","dateStyle","Mock","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/styles-xform.js"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nconst Enums = require('../../../doc/enums');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst FontXform = require('./font-xform');\nconst FillXform = require('./fill-xform');\nconst BorderXform = require('./border-xform');\nconst NumFmtXform = require('./numfmt-xform');\nconst StyleXform = require('./style-xform');\nconst DxfXform = require('./dxf-xform');\n\n// custom numfmt ids start here\nconst NUMFMT_BASE = 164;\n\n// =============================================================================\n// StylesXform is used to generate and parse the styles.xml file\n// it manages the collections of fonts, number formats, alignments, etc\nclass StylesXform extends BaseXform {\n constructor(initialise) {\n super();\n\n this.map = {\n numFmts: new ListXform({tag: 'numFmts', count: true, childXform: new NumFmtXform()}),\n fonts: new ListXform({\n tag: 'fonts',\n count: true,\n childXform: new FontXform(),\n $: {'x14ac:knownFonts': 1},\n }),\n fills: new ListXform({tag: 'fills', count: true, childXform: new FillXform()}),\n borders: new ListXform({tag: 'borders', count: true, childXform: new BorderXform()}),\n cellStyleXfs: new ListXform({tag: 'cellStyleXfs', count: true, childXform: new StyleXform()}),\n cellXfs: new ListXform({\n tag: 'cellXfs',\n count: true,\n childXform: new StyleXform({xfId: true}),\n }),\n dxfs: new ListXform({tag: 'dxfs', always: true, count: true, childXform: new DxfXform()}),\n\n // for style manager\n numFmt: new NumFmtXform(),\n font: new FontXform(),\n fill: new FillXform(),\n border: new BorderXform(),\n style: new StyleXform({xfId: true}),\n\n cellStyles: StylesXform.STATIC_XFORMS.cellStyles,\n tableStyles: StylesXform.STATIC_XFORMS.tableStyles,\n extLst: StylesXform.STATIC_XFORMS.extLst,\n };\n\n if (initialise) {\n // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing\n this.init();\n }\n }\n\n initIndex() {\n this.index = {\n style: {},\n numFmt: {},\n numFmtNextId: 164, // start custom format ids here\n font: {},\n border: {},\n fill: {},\n };\n }\n\n init() {\n // Prepare for Style Manager role\n this.model = {\n styles: [],\n numFmts: [],\n fonts: [],\n borders: [],\n fills: [],\n dxfs: [],\n };\n\n this.initIndex();\n\n // default (zero) border\n this._addBorder({});\n\n // add default (all zero) style\n this._addStyle({numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0});\n\n // add default fills\n this._addFill({type: 'pattern', pattern: 'none'});\n this._addFill({type: 'pattern', pattern: 'gray125'});\n\n this.weakMap = new WeakMap();\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n //\n // \n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES);\n\n if (this.index) {\n // model has been built by style manager role (contains xml)\n if (model.numFmts && model.numFmts.length) {\n xmlStream.openNode('numFmts', {count: model.numFmts.length});\n model.numFmts.forEach(numFmtXml => {\n xmlStream.writeXml(numFmtXml);\n });\n xmlStream.closeNode();\n }\n\n if (!model.fonts.length) {\n // default (zero) font\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\n }\n xmlStream.openNode('fonts', {count: model.fonts.length, 'x14ac:knownFonts': 1});\n model.fonts.forEach(fontXml => {\n xmlStream.writeXml(fontXml);\n });\n xmlStream.closeNode();\n\n xmlStream.openNode('fills', {count: model.fills.length});\n model.fills.forEach(fillXml => {\n xmlStream.writeXml(fillXml);\n });\n xmlStream.closeNode();\n\n xmlStream.openNode('borders', {count: model.borders.length});\n model.borders.forEach(borderXml => {\n xmlStream.writeXml(borderXml);\n });\n xmlStream.closeNode();\n\n this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);\n\n xmlStream.openNode('cellXfs', {count: model.styles.length});\n model.styles.forEach(styleXml => {\n xmlStream.writeXml(styleXml);\n });\n xmlStream.closeNode();\n } else {\n // model is plain JSON and needs to be xformed\n this.map.numFmts.render(xmlStream, model.numFmts);\n this.map.fonts.render(xmlStream, model.fonts);\n this.map.fills.render(xmlStream, model.fills);\n this.map.borders.render(xmlStream, model.borders);\n this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);\n this.map.cellXfs.render(xmlStream, model.styles);\n }\n\n StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream);\n\n this.map.dxfs.render(xmlStream, model.dxfs);\n\n StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream);\n StylesXform.STATIC_XFORMS.extLst.render(xmlStream);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'styleSheet':\n this.initIndex();\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'styleSheet': {\n this.model = {};\n const add = (propName, xform) => {\n if (xform.model && xform.model.length) {\n this.model[propName] = xform.model;\n }\n };\n add('numFmts', this.map.numFmts);\n add('fonts', this.map.fonts);\n add('fills', this.map.fills);\n add('borders', this.map.borders);\n add('styles', this.map.cellXfs);\n add('dxfs', this.map.dxfs);\n\n // index numFmts\n this.index = {\n model: [],\n numFmt: [],\n };\n if (this.model.numFmts) {\n const numFmtIndex = this.index.numFmt;\n this.model.numFmts.forEach(numFmt => {\n numFmtIndex[numFmt.id] = numFmt.formatCode;\n });\n }\n\n return false;\n }\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n // add a cell's style model to the collection\n // each style property is processed and cross-referenced, etc.\n // the styleId is returned. Note: cellType is used when numFmt not defined\n addStyleModel(model, cellType) {\n if (!model) {\n return 0;\n }\n\n // if we have no default font, add it here now\n if (!this.model.fonts.length) {\n // default (zero) font\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\n }\n\n // if we have seen this style object before, assume it has the same styleId\n if (this.weakMap && this.weakMap.has(model)) {\n return this.weakMap.get(model);\n }\n\n const style = {};\n cellType = cellType || Enums.ValueType.Number;\n\n if (model.numFmt) {\n style.numFmtId = this._addNumFmtStr(model.numFmt);\n } else {\n switch (cellType) {\n case Enums.ValueType.Number:\n style.numFmtId = this._addNumFmtStr('General');\n break;\n case Enums.ValueType.Date:\n style.numFmtId = this._addNumFmtStr('mm-dd-yy');\n break;\n default:\n break;\n }\n }\n\n if (model.font) {\n style.fontId = this._addFont(model.font);\n }\n\n if (model.border) {\n style.borderId = this._addBorder(model.border);\n }\n\n if (model.fill) {\n style.fillId = this._addFill(model.fill);\n }\n\n if (model.alignment) {\n style.alignment = model.alignment;\n }\n\n if (model.protection) {\n style.protection = model.protection;\n }\n\n const styleId = this._addStyle(style);\n if (this.weakMap) {\n this.weakMap.set(model, styleId);\n }\n return styleId;\n }\n\n // given a styleId (i.e. s=\"n\"), get the cell's style model\n // objects are shared where possible.\n getStyleModel(id) {\n // if the style doesn't exist return null\n const style = this.model.styles[id];\n if (!style) return null;\n\n // have we built this model before?\n let model = this.index.model[id];\n if (model) return model;\n\n // build a new model\n model = this.index.model[id] = {};\n\n // -------------------------------------------------------\n // number format\n if (style.numFmtId) {\n const numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId);\n if (numFmt) {\n model.numFmt = numFmt;\n }\n }\n\n function addStyle(name, group, styleId) {\n if (styleId || styleId === 0) {\n const part = group[styleId];\n if (part) {\n model[name] = part;\n }\n }\n }\n\n addStyle('font', this.model.fonts, style.fontId);\n addStyle('border', this.model.borders, style.borderId);\n addStyle('fill', this.model.fills, style.fillId);\n\n // -------------------------------------------------------\n // alignment\n if (style.alignment) {\n model.alignment = style.alignment;\n }\n\n // -------------------------------------------------------\n // protection\n if (style.protection) {\n model.protection = style.protection;\n }\n\n return model;\n }\n\n addDxfStyle(style) {\n if (style.numFmt) {\n // register numFmtId to use it during dxf-xform rendering\n style.numFmtId = this._addNumFmtStr(style.numFmt);\n }\n\n this.model.dxfs.push(style);\n return this.model.dxfs.length - 1;\n }\n\n getDxfStyle(id) {\n return this.model.dxfs[id];\n }\n\n // =========================================================================\n // Private Interface\n _addStyle(style) {\n const xml = this.map.style.toXml(style);\n let index = this.index.style[xml];\n if (index === undefined) {\n index = this.index.style[xml] = this.model.styles.length;\n this.model.styles.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Number Formats\n _addNumFmtStr(formatCode) {\n // check if default format\n let index = NumFmtXform.getDefaultFmtId(formatCode);\n if (index !== undefined) return index;\n\n // check if already in\n index = this.index.numFmt[formatCode];\n if (index !== undefined) return index;\n\n index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length;\n const xml = this.map.numFmt.toXml({id: index, formatCode});\n this.model.numFmts.push(xml);\n return index;\n }\n\n // =========================================================================\n // Fonts\n _addFont(font) {\n const xml = this.map.font.toXml(font);\n let index = this.index.font[xml];\n if (index === undefined) {\n index = this.index.font[xml] = this.model.fonts.length;\n this.model.fonts.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Borders\n _addBorder(border) {\n const xml = this.map.border.toXml(border);\n let index = this.index.border[xml];\n if (index === undefined) {\n index = this.index.border[xml] = this.model.borders.length;\n this.model.borders.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Fills\n _addFill(fill) {\n const xml = this.map.fill.toXml(fill);\n let index = this.index.fill[xml];\n if (index === undefined) {\n index = this.index.fill[xml] = this.model.fills.length;\n this.model.fills.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n}\n\nStylesXform.STYLESHEET_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x14ac x16r2',\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\n 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main',\n};\nStylesXform.STATIC_XFORMS = {\n cellStyles: new StaticXform({\n tag: 'cellStyles',\n $: {count: 1},\n c: [{tag: 'cellStyle', $: {name: 'Normal', xfId: 0, builtinId: 0}}],\n }),\n dxfs: new StaticXform({tag: 'dxfs', $: {count: 0}}),\n tableStyles: new StaticXform({\n tag: 'tableStyles',\n $: {count: 0, defaultTableStyle: 'TableStyleMedium2', defaultPivotStyle: 'PivotStyleLight16'},\n }),\n extLst: new StaticXform({\n tag: 'extLst',\n c: [\n {\n tag: 'ext',\n $: {\n uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n },\n c: [{tag: 'x14:slicerStyles', $: {defaultSlicerStyle: 'SlicerStyleLight1'}}],\n },\n {\n tag: 'ext',\n $: {\n uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n },\n c: [{tag: 'x15:timelineStyles', $: {defaultTimelineStyle: 'TimeSlicerStyleLight1'}}],\n },\n ],\n }),\n};\n\n// the stylemanager mock acts like StyleManager except that it always returns 0 or {}\nclass StylesXformMock extends StylesXform {\n constructor() {\n super();\n\n this.model = {\n styles: [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}],\n numFmts: [],\n fonts: [{size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'}],\n borders: [{}],\n fills: [\n {type: 'pattern', pattern: 'none'},\n {type: 'pattern', pattern: 'gray125'},\n ],\n };\n }\n\n // =========================================================================\n // Style Manager Interface\n\n // override normal behaviour - consume and dispose\n parseStream(stream) {\n stream.autodrain();\n return Promise.resolve();\n }\n\n // add a cell's style model to the collection\n // each style property is processed and cross-referenced, etc.\n // the styleId is returned. Note: cellType is used when numFmt not defined\n addStyleModel(model, cellType) {\n switch (cellType) {\n case Enums.ValueType.Date:\n return this.dateStyleId;\n default:\n return 0;\n }\n }\n\n get dateStyleId() {\n if (!this._dateStyleId) {\n const dateStyle = {\n numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy'),\n };\n this._dateStyleId = this.model.styles.length;\n this.model.styles.push(dateStyle);\n }\n return this._dateStyleId;\n }\n\n // given a styleId (i.e. s=\"n\"), get the cell's style model\n // objects are shared where possible.\n getStyleModel(/* id */) {\n return {};\n }\n}\n\nStylesXform.Mock = StylesXformMock;\n\nmodule.exports = StylesXform;\n"],"mappings":";;AAAA;AACA,MAAMA,KAAK,GAAGC,OAAO,CAAC,oBAAoB,CAAC;AAC3C,MAAMC,SAAS,GAAGD,OAAO,CAAC,2BAA2B,CAAC;AAEtD,MAAME,SAAS,GAAGF,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAMG,WAAW,GAAGH,OAAO,CAAC,iBAAiB,CAAC;AAC9C,MAAMI,SAAS,GAAGJ,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAMK,SAAS,GAAGL,OAAO,CAAC,cAAc,CAAC;AACzC,MAAMM,SAAS,GAAGN,OAAO,CAAC,cAAc,CAAC;AACzC,MAAMO,WAAW,GAAGP,OAAO,CAAC,gBAAgB,CAAC;AAC7C,MAAMQ,WAAW,GAAGR,OAAO,CAAC,gBAAgB,CAAC;AAC7C,MAAMS,UAAU,GAAGT,OAAO,CAAC,eAAe,CAAC;AAC3C,MAAMU,QAAQ,GAAGV,OAAO,CAAC,aAAa,CAAC;;AAEvC;AACA,MAAMW,WAAW,GAAG,GAAG;;AAEvB;AACA;AACA;AACA,MAAMC,WAAW,SAASV,SAAS,CAAC;EAClCW,WAAWA,CAACC,UAAU,EAAE;IACtB,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACTC,OAAO,EAAE,IAAIZ,SAAS,CAAC;QAACa,GAAG,EAAE,SAAS;QAAEC,KAAK,EAAE,IAAI;QAAEC,UAAU,EAAE,IAAIX,WAAW,CAAC;MAAC,CAAC,CAAC;MACpFY,KAAK,EAAE,IAAIhB,SAAS,CAAC;QACnBa,GAAG,EAAE,OAAO;QACZC,KAAK,EAAE,IAAI;QACXC,UAAU,EAAE,IAAId,SAAS,CAAC,CAAC;QAC3BgB,CAAC,EAAE;UAAC,kBAAkB,EAAE;QAAC;MAC3B,CAAC,CAAC;MACFC,KAAK,EAAE,IAAIlB,SAAS,CAAC;QAACa,GAAG,EAAE,OAAO;QAAEC,KAAK,EAAE,IAAI;QAAEC,UAAU,EAAE,IAAIb,SAAS,CAAC;MAAC,CAAC,CAAC;MAC9EiB,OAAO,EAAE,IAAInB,SAAS,CAAC;QAACa,GAAG,EAAE,SAAS;QAAEC,KAAK,EAAE,IAAI;QAAEC,UAAU,EAAE,IAAIZ,WAAW,CAAC;MAAC,CAAC,CAAC;MACpFiB,YAAY,EAAE,IAAIpB,SAAS,CAAC;QAACa,GAAG,EAAE,cAAc;QAAEC,KAAK,EAAE,IAAI;QAAEC,UAAU,EAAE,IAAIV,UAAU,CAAC;MAAC,CAAC,CAAC;MAC7FgB,OAAO,EAAE,IAAIrB,SAAS,CAAC;QACrBa,GAAG,EAAE,SAAS;QACdC,KAAK,EAAE,IAAI;QACXC,UAAU,EAAE,IAAIV,UAAU,CAAC;UAACiB,IAAI,EAAE;QAAI,CAAC;MACzC,CAAC,CAAC;MACFC,IAAI,EAAE,IAAIvB,SAAS,CAAC;QAACa,GAAG,EAAE,MAAM;QAAEW,MAAM,EAAE,IAAI;QAAEV,KAAK,EAAE,IAAI;QAAEC,UAAU,EAAE,IAAIT,QAAQ,CAAC;MAAC,CAAC,CAAC;MAEzF;MACAmB,MAAM,EAAE,IAAIrB,WAAW,CAAC,CAAC;MACzBsB,IAAI,EAAE,IAAIzB,SAAS,CAAC,CAAC;MACrB0B,IAAI,EAAE,IAAIzB,SAAS,CAAC,CAAC;MACrB0B,MAAM,EAAE,IAAIzB,WAAW,CAAC,CAAC;MACzB0B,KAAK,EAAE,IAAIxB,UAAU,CAAC;QAACiB,IAAI,EAAE;MAAI,CAAC,CAAC;MAEnCQ,UAAU,EAAEtB,WAAW,CAACuB,aAAa,CAACD,UAAU;MAChDE,WAAW,EAAExB,WAAW,CAACuB,aAAa,CAACC,WAAW;MAClDC,MAAM,EAAEzB,WAAW,CAACuB,aAAa,CAACE;IACpC,CAAC;IAED,IAAIvB,UAAU,EAAE;MACd;MACA,IAAI,CAACwB,IAAI,CAAC,CAAC;IACb;EACF;EAEAC,SAASA,CAAA,EAAG;IACV,IAAI,CAACC,KAAK,GAAG;MACXP,KAAK,EAAE,CAAC,CAAC;MACTJ,MAAM,EAAE,CAAC,CAAC;MACVY,YAAY,EAAE,GAAG;MAAE;MACnBX,IAAI,EAAE,CAAC,CAAC;MACRE,MAAM,EAAE,CAAC,CAAC;MACVD,IAAI,EAAE,CAAC;IACT,CAAC;EACH;EAEAO,IAAIA,CAAA,EAAG;IACL;IACA,IAAI,CAACI,KAAK,GAAG;MACXC,MAAM,EAAE,EAAE;MACV3B,OAAO,EAAE,EAAE;MACXI,KAAK,EAAE,EAAE;MACTG,OAAO,EAAE,EAAE;MACXD,KAAK,EAAE,EAAE;MACTK,IAAI,EAAE;IACR,CAAC;IAED,IAAI,CAACY,SAAS,CAAC,CAAC;;IAEhB;IACA,IAAI,CAACK,UAAU,CAAC,CAAC,CAAC,CAAC;;IAEnB;IACA,IAAI,CAACC,SAAS,CAAC;MAACC,QAAQ,EAAE,CAAC;MAAEC,MAAM,EAAE,CAAC;MAAEC,MAAM,EAAE,CAAC;MAAEC,QAAQ,EAAE,CAAC;MAAEvB,IAAI,EAAE;IAAC,CAAC,CAAC;;IAEzE;IACA,IAAI,CAACwB,QAAQ,CAAC;MAACC,IAAI,EAAE,SAAS;MAAEC,OAAO,EAAE;IAAM,CAAC,CAAC;IACjD,IAAI,CAACF,QAAQ,CAAC;MAACC,IAAI,EAAE,SAAS;MAAEC,OAAO,EAAE;IAAS,CAAC,CAAC;IAEpD,IAAI,CAACC,OAAO,GAAG,IAAIC,OAAO,CAAC,CAAC;EAC9B;EAEAC,MAAMA,CAACC,SAAS,EAAEd,KAAK,EAAE;IACvBA,KAAK,GAAGA,KAAK,IAAI,IAAI,CAACA,KAAK;IAC3B;IACA;IACAc,SAAS,CAACC,OAAO,CAACxD,SAAS,CAACyD,gBAAgB,CAAC;IAE7CF,SAAS,CAACG,QAAQ,CAAC,YAAY,EAAE/C,WAAW,CAACgD,qBAAqB,CAAC;IAEnE,IAAI,IAAI,CAACpB,KAAK,EAAE;MACd;MACA,IAAIE,KAAK,CAAC1B,OAAO,IAAI0B,KAAK,CAAC1B,OAAO,CAAC6C,MAAM,EAAE;QACzCL,SAAS,CAACG,QAAQ,CAAC,SAAS,EAAE;UAACzC,KAAK,EAAEwB,KAAK,CAAC1B,OAAO,CAAC6C;QAAM,CAAC,CAAC;QAC5DnB,KAAK,CAAC1B,OAAO,CAAC8C,OAAO,CAACC,SAAS,IAAI;UACjCP,SAAS,CAACQ,QAAQ,CAACD,SAAS,CAAC;QAC/B,CAAC,CAAC;QACFP,SAAS,CAACS,SAAS,CAAC,CAAC;MACvB;MAEA,IAAI,CAACvB,KAAK,CAACtB,KAAK,CAACyC,MAAM,EAAE;QACvB;QACA,IAAI,CAACK,QAAQ,CAAC;UAACC,IAAI,EAAE,EAAE;UAAEC,KAAK,EAAE;YAACC,KAAK,EAAE;UAAC,CAAC;UAAEC,IAAI,EAAE,SAAS;UAAEC,MAAM,EAAE,CAAC;UAAEC,MAAM,EAAE;QAAO,CAAC,CAAC;MAC3F;MACAhB,SAAS,CAACG,QAAQ,CAAC,OAAO,EAAE;QAACzC,KAAK,EAAEwB,KAAK,CAACtB,KAAK,CAACyC,MAAM;QAAE,kBAAkB,EAAE;MAAC,CAAC,CAAC;MAC/EnB,KAAK,CAACtB,KAAK,CAAC0C,OAAO,CAACW,OAAO,IAAI;QAC7BjB,SAAS,CAACQ,QAAQ,CAACS,OAAO,CAAC;MAC7B,CAAC,CAAC;MACFjB,SAAS,CAACS,SAAS,CAAC,CAAC;MAErBT,SAAS,CAACG,QAAQ,CAAC,OAAO,EAAE;QAACzC,KAAK,EAAEwB,KAAK,CAACpB,KAAK,CAACuC;MAAM,CAAC,CAAC;MACxDnB,KAAK,CAACpB,KAAK,CAACwC,OAAO,CAACY,OAAO,IAAI;QAC7BlB,SAAS,CAACQ,QAAQ,CAACU,OAAO,CAAC;MAC7B,CAAC,CAAC;MACFlB,SAAS,CAACS,SAAS,CAAC,CAAC;MAErBT,SAAS,CAACG,QAAQ,CAAC,SAAS,EAAE;QAACzC,KAAK,EAAEwB,KAAK,CAACnB,OAAO,CAACsC;MAAM,CAAC,CAAC;MAC5DnB,KAAK,CAACnB,OAAO,CAACuC,OAAO,CAACa,SAAS,IAAI;QACjCnB,SAAS,CAACQ,QAAQ,CAACW,SAAS,CAAC;MAC/B,CAAC,CAAC;MACFnB,SAAS,CAACS,SAAS,CAAC,CAAC;MAErB,IAAI,CAAClD,GAAG,CAACS,YAAY,CAAC+B,MAAM,CAACC,SAAS,EAAE,CAAC;QAACV,QAAQ,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;QAAEvB,IAAI,EAAE;MAAC,CAAC,CAAC,CAAC;MAEpG8B,SAAS,CAACG,QAAQ,CAAC,SAAS,EAAE;QAACzC,KAAK,EAAEwB,KAAK,CAACC,MAAM,CAACkB;MAAM,CAAC,CAAC;MAC3DnB,KAAK,CAACC,MAAM,CAACmB,OAAO,CAACc,QAAQ,IAAI;QAC/BpB,SAAS,CAACQ,QAAQ,CAACY,QAAQ,CAAC;MAC9B,CAAC,CAAC;MACFpB,SAAS,CAACS,SAAS,CAAC,CAAC;IACvB,CAAC,MAAM;MACL;MACA,IAAI,CAAClD,GAAG,CAACC,OAAO,CAACuC,MAAM,CAACC,SAAS,EAAEd,KAAK,CAAC1B,OAAO,CAAC;MACjD,IAAI,CAACD,GAAG,CAACK,KAAK,CAACmC,MAAM,CAACC,SAAS,EAAEd,KAAK,CAACtB,KAAK,CAAC;MAC7C,IAAI,CAACL,GAAG,CAACO,KAAK,CAACiC,MAAM,CAACC,SAAS,EAAEd,KAAK,CAACpB,KAAK,CAAC;MAC7C,IAAI,CAACP,GAAG,CAACQ,OAAO,CAACgC,MAAM,CAACC,SAAS,EAAEd,KAAK,CAACnB,OAAO,CAAC;MACjD,IAAI,CAACR,GAAG,CAACS,YAAY,CAAC+B,MAAM,CAACC,SAAS,EAAE,CAAC;QAACV,QAAQ,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;QAAEvB,IAAI,EAAE;MAAC,CAAC,CAAC,CAAC;MACpG,IAAI,CAACX,GAAG,CAACU,OAAO,CAAC8B,MAAM,CAACC,SAAS,EAAEd,KAAK,CAACC,MAAM,CAAC;IAClD;IAEA/B,WAAW,CAACuB,aAAa,CAACD,UAAU,CAACqB,MAAM,CAACC,SAAS,CAAC;IAEtD,IAAI,CAACzC,GAAG,CAACY,IAAI,CAAC4B,MAAM,CAACC,SAAS,EAAEd,KAAK,CAACf,IAAI,CAAC;IAE3Cf,WAAW,CAACuB,aAAa,CAACC,WAAW,CAACmB,MAAM,CAACC,SAAS,CAAC;IACvD5C,WAAW,CAACuB,aAAa,CAACE,MAAM,CAACkB,MAAM,CAACC,SAAS,CAAC;IAElDA,SAAS,CAACS,SAAS,CAAC,CAAC;EACvB;EAEAY,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQA,IAAI,CAACR,IAAI;MACf,KAAK,YAAY;QACf,IAAI,CAAC/B,SAAS,CAAC,CAAC;QAChB,OAAO,IAAI;MACb;QACE,IAAI,CAACwC,MAAM,GAAG,IAAI,CAAChE,GAAG,CAAC+D,IAAI,CAACR,IAAI,CAAC;QACjC,IAAI,IAAI,CAACS,MAAM,EAAE;UACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;QAC7B;QACA,OAAO,IAAI;IACf;EACF;EAEAE,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACF,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACC,SAAS,CAACC,IAAI,CAAC;IAC7B;EACF;EAEAC,UAAUA,CAACZ,IAAI,EAAE;IACf,IAAI,IAAI,CAACS,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAACA,MAAM,CAACG,UAAU,CAACZ,IAAI,CAAC,EAAE;QACjC,IAAI,CAACS,MAAM,GAAGI,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQb,IAAI;MACV,KAAK,YAAY;QAAE;UACjB,IAAI,CAAC5B,KAAK,GAAG,CAAC,CAAC;UACf,MAAM0C,GAAG,GAAGA,CAACC,QAAQ,EAAEC,KAAK,KAAK;YAC/B,IAAIA,KAAK,CAAC5C,KAAK,IAAI4C,KAAK,CAAC5C,KAAK,CAACmB,MAAM,EAAE;cACrC,IAAI,CAACnB,KAAK,CAAC2C,QAAQ,CAAC,GAAGC,KAAK,CAAC5C,KAAK;YACpC;UACF,CAAC;UACD0C,GAAG,CAAC,SAAS,EAAE,IAAI,CAACrE,GAAG,CAACC,OAAO,CAAC;UAChCoE,GAAG,CAAC,OAAO,EAAE,IAAI,CAACrE,GAAG,CAACK,KAAK,CAAC;UAC5BgE,GAAG,CAAC,OAAO,EAAE,IAAI,CAACrE,GAAG,CAACO,KAAK,CAAC;UAC5B8D,GAAG,CAAC,SAAS,EAAE,IAAI,CAACrE,GAAG,CAACQ,OAAO,CAAC;UAChC6D,GAAG,CAAC,QAAQ,EAAE,IAAI,CAACrE,GAAG,CAACU,OAAO,CAAC;UAC/B2D,GAAG,CAAC,MAAM,EAAE,IAAI,CAACrE,GAAG,CAACY,IAAI,CAAC;;UAE1B;UACA,IAAI,CAACa,KAAK,GAAG;YACXE,KAAK,EAAE,EAAE;YACTb,MAAM,EAAE;UACV,CAAC;UACD,IAAI,IAAI,CAACa,KAAK,CAAC1B,OAAO,EAAE;YACtB,MAAMuE,WAAW,GAAG,IAAI,CAAC/C,KAAK,CAACX,MAAM;YACrC,IAAI,CAACa,KAAK,CAAC1B,OAAO,CAAC8C,OAAO,CAACjC,MAAM,IAAI;cACnC0D,WAAW,CAAC1D,MAAM,CAAC2D,EAAE,CAAC,GAAG3D,MAAM,CAAC4D,UAAU;YAC5C,CAAC,CAAC;UACJ;UAEA,OAAO,KAAK;QACd;MACA;QACE;QACA,OAAO,IAAI;IACf;EACF;;EAEA;EACA;EACA;EACAC,aAAaA,CAAChD,KAAK,EAAEiD,QAAQ,EAAE;IAC7B,IAAI,CAACjD,KAAK,EAAE;MACV,OAAO,CAAC;IACV;;IAEA;IACA,IAAI,CAAC,IAAI,CAACA,KAAK,CAACtB,KAAK,CAACyC,MAAM,EAAE;MAC5B;MACA,IAAI,CAACK,QAAQ,CAAC;QAACC,IAAI,EAAE,EAAE;QAAEC,KAAK,EAAE;UAACC,KAAK,EAAE;QAAC,CAAC;QAAEC,IAAI,EAAE,SAAS;QAAEC,MAAM,EAAE,CAAC;QAAEC,MAAM,EAAE;MAAO,CAAC,CAAC;IAC3F;;IAEA;IACA,IAAI,IAAI,CAACnB,OAAO,IAAI,IAAI,CAACA,OAAO,CAACuC,GAAG,CAAClD,KAAK,CAAC,EAAE;MAC3C,OAAO,IAAI,CAACW,OAAO,CAACwC,GAAG,CAACnD,KAAK,CAAC;IAChC;IAEA,MAAMT,KAAK,GAAG,CAAC,CAAC;IAChB0D,QAAQ,GAAGA,QAAQ,IAAI5F,KAAK,CAAC+F,SAAS,CAACC,MAAM;IAE7C,IAAIrD,KAAK,CAACb,MAAM,EAAE;MAChBI,KAAK,CAACa,QAAQ,GAAG,IAAI,CAACkD,aAAa,CAACtD,KAAK,CAACb,MAAM,CAAC;IACnD,CAAC,MAAM;MACL,QAAQ8D,QAAQ;QACd,KAAK5F,KAAK,CAAC+F,SAAS,CAACC,MAAM;UACzB9D,KAAK,CAACa,QAAQ,GAAG,IAAI,CAACkD,aAAa,CAAC,SAAS,CAAC;UAC9C;QACF,KAAKjG,KAAK,CAAC+F,SAAS,CAACG,IAAI;UACvBhE,KAAK,CAACa,QAAQ,GAAG,IAAI,CAACkD,aAAa,CAAC,UAAU,CAAC;UAC/C;QACF;UACE;MACJ;IACF;IAEA,IAAItD,KAAK,CAACZ,IAAI,EAAE;MACdG,KAAK,CAACc,MAAM,GAAG,IAAI,CAACmB,QAAQ,CAACxB,KAAK,CAACZ,IAAI,CAAC;IAC1C;IAEA,IAAIY,KAAK,CAACV,MAAM,EAAE;MAChBC,KAAK,CAACgB,QAAQ,GAAG,IAAI,CAACL,UAAU,CAACF,KAAK,CAACV,MAAM,CAAC;IAChD;IAEA,IAAIU,KAAK,CAACX,IAAI,EAAE;MACdE,KAAK,CAACe,MAAM,GAAG,IAAI,CAACE,QAAQ,CAACR,KAAK,CAACX,IAAI,CAAC;IAC1C;IAEA,IAAIW,KAAK,CAACwD,SAAS,EAAE;MACnBjE,KAAK,CAACiE,SAAS,GAAGxD,KAAK,CAACwD,SAAS;IACnC;IAEA,IAAIxD,KAAK,CAACyD,UAAU,EAAE;MACpBlE,KAAK,CAACkE,UAAU,GAAGzD,KAAK,CAACyD,UAAU;IACrC;IAEA,MAAMC,OAAO,GAAG,IAAI,CAACvD,SAAS,CAACZ,KAAK,CAAC;IACrC,IAAI,IAAI,CAACoB,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAACgD,GAAG,CAAC3D,KAAK,EAAE0D,OAAO,CAAC;IAClC;IACA,OAAOA,OAAO;EAChB;;EAEA;EACA;EACAE,aAAaA,CAACd,EAAE,EAAE;IAChB;IACA,MAAMvD,KAAK,GAAG,IAAI,CAACS,KAAK,CAACC,MAAM,CAAC6C,EAAE,CAAC;IACnC,IAAI,CAACvD,KAAK,EAAE,OAAO,IAAI;;IAEvB;IACA,IAAIS,KAAK,GAAG,IAAI,CAACF,KAAK,CAACE,KAAK,CAAC8C,EAAE,CAAC;IAChC,IAAI9C,KAAK,EAAE,OAAOA,KAAK;;IAEvB;IACAA,KAAK,GAAG,IAAI,CAACF,KAAK,CAACE,KAAK,CAAC8C,EAAE,CAAC,GAAG,CAAC,CAAC;;IAEjC;IACA;IACA,IAAIvD,KAAK,CAACa,QAAQ,EAAE;MAClB,MAAMjB,MAAM,GAAG,IAAI,CAACW,KAAK,CAACX,MAAM,CAACI,KAAK,CAACa,QAAQ,CAAC,IAAItC,WAAW,CAAC+F,iBAAiB,CAACtE,KAAK,CAACa,QAAQ,CAAC;MACjG,IAAIjB,MAAM,EAAE;QACVa,KAAK,CAACb,MAAM,GAAGA,MAAM;MACvB;IACF;IAEA,SAAS2E,QAAQA,CAAClC,IAAI,EAAEmC,KAAK,EAAEL,OAAO,EAAE;MACtC,IAAIA,OAAO,IAAIA,OAAO,KAAK,CAAC,EAAE;QAC5B,MAAMM,IAAI,GAAGD,KAAK,CAACL,OAAO,CAAC;QAC3B,IAAIM,IAAI,EAAE;UACRhE,KAAK,CAAC4B,IAAI,CAAC,GAAGoC,IAAI;QACpB;MACF;IACF;IAEAF,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC9D,KAAK,CAACtB,KAAK,EAAEa,KAAK,CAACc,MAAM,CAAC;IAChDyD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC9D,KAAK,CAACnB,OAAO,EAAEU,KAAK,CAACgB,QAAQ,CAAC;IACtDuD,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC9D,KAAK,CAACpB,KAAK,EAAEW,KAAK,CAACe,MAAM,CAAC;;IAEhD;IACA;IACA,IAAIf,KAAK,CAACiE,SAAS,EAAE;MACnBxD,KAAK,CAACwD,SAAS,GAAGjE,KAAK,CAACiE,SAAS;IACnC;;IAEA;IACA;IACA,IAAIjE,KAAK,CAACkE,UAAU,EAAE;MACpBzD,KAAK,CAACyD,UAAU,GAAGlE,KAAK,CAACkE,UAAU;IACrC;IAEA,OAAOzD,KAAK;EACd;EAEAiE,WAAWA,CAAC1E,KAAK,EAAE;IACjB,IAAIA,KAAK,CAACJ,MAAM,EAAE;MAChB;MACAI,KAAK,CAACa,QAAQ,GAAG,IAAI,CAACkD,aAAa,CAAC/D,KAAK,CAACJ,MAAM,CAAC;IACnD;IAEA,IAAI,CAACa,KAAK,CAACf,IAAI,CAACiF,IAAI,CAAC3E,KAAK,CAAC;IAC3B,OAAO,IAAI,CAACS,KAAK,CAACf,IAAI,CAACkC,MAAM,GAAG,CAAC;EACnC;EAEAgD,WAAWA,CAACrB,EAAE,EAAE;IACd,OAAO,IAAI,CAAC9C,KAAK,CAACf,IAAI,CAAC6D,EAAE,CAAC;EAC5B;;EAEA;EACA;EACA3C,SAASA,CAACZ,KAAK,EAAE;IACf,MAAM6E,GAAG,GAAG,IAAI,CAAC/F,GAAG,CAACkB,KAAK,CAAC8E,KAAK,CAAC9E,KAAK,CAAC;IACvC,IAAIO,KAAK,GAAG,IAAI,CAACA,KAAK,CAACP,KAAK,CAAC6E,GAAG,CAAC;IACjC,IAAItE,KAAK,KAAK2C,SAAS,EAAE;MACvB3C,KAAK,GAAG,IAAI,CAACA,KAAK,CAACP,KAAK,CAAC6E,GAAG,CAAC,GAAG,IAAI,CAACpE,KAAK,CAACC,MAAM,CAACkB,MAAM;MACxD,IAAI,CAACnB,KAAK,CAACC,MAAM,CAACiE,IAAI,CAACE,GAAG,CAAC;IAC7B;IACA,OAAOtE,KAAK;EACd;;EAEA;EACA;EACAwD,aAAaA,CAACP,UAAU,EAAE;IACxB;IACA,IAAIjD,KAAK,GAAGhC,WAAW,CAACwG,eAAe,CAACvB,UAAU,CAAC;IACnD,IAAIjD,KAAK,KAAK2C,SAAS,EAAE,OAAO3C,KAAK;;IAErC;IACAA,KAAK,GAAG,IAAI,CAACA,KAAK,CAACX,MAAM,CAAC4D,UAAU,CAAC;IACrC,IAAIjD,KAAK,KAAK2C,SAAS,EAAE,OAAO3C,KAAK;IAErCA,KAAK,GAAG,IAAI,CAACA,KAAK,CAACX,MAAM,CAAC4D,UAAU,CAAC,GAAG9E,WAAW,GAAG,IAAI,CAAC+B,KAAK,CAAC1B,OAAO,CAAC6C,MAAM;IAC/E,MAAMiD,GAAG,GAAG,IAAI,CAAC/F,GAAG,CAACc,MAAM,CAACkF,KAAK,CAAC;MAACvB,EAAE,EAAEhD,KAAK;MAAEiD;IAAU,CAAC,CAAC;IAC1D,IAAI,CAAC/C,KAAK,CAAC1B,OAAO,CAAC4F,IAAI,CAACE,GAAG,CAAC;IAC5B,OAAOtE,KAAK;EACd;;EAEA;EACA;EACA0B,QAAQA,CAACpC,IAAI,EAAE;IACb,MAAMgF,GAAG,GAAG,IAAI,CAAC/F,GAAG,CAACe,IAAI,CAACiF,KAAK,CAACjF,IAAI,CAAC;IACrC,IAAIU,KAAK,GAAG,IAAI,CAACA,KAAK,CAACV,IAAI,CAACgF,GAAG,CAAC;IAChC,IAAItE,KAAK,KAAK2C,SAAS,EAAE;MACvB3C,KAAK,GAAG,IAAI,CAACA,KAAK,CAACV,IAAI,CAACgF,GAAG,CAAC,GAAG,IAAI,CAACpE,KAAK,CAACtB,KAAK,CAACyC,MAAM;MACtD,IAAI,CAACnB,KAAK,CAACtB,KAAK,CAACwF,IAAI,CAACE,GAAG,CAAC;IAC5B;IACA,OAAOtE,KAAK;EACd;;EAEA;EACA;EACAI,UAAUA,CAACZ,MAAM,EAAE;IACjB,MAAM8E,GAAG,GAAG,IAAI,CAAC/F,GAAG,CAACiB,MAAM,CAAC+E,KAAK,CAAC/E,MAAM,CAAC;IACzC,IAAIQ,KAAK,GAAG,IAAI,CAACA,KAAK,CAACR,MAAM,CAAC8E,GAAG,CAAC;IAClC,IAAItE,KAAK,KAAK2C,SAAS,EAAE;MACvB3C,KAAK,GAAG,IAAI,CAACA,KAAK,CAACR,MAAM,CAAC8E,GAAG,CAAC,GAAG,IAAI,CAACpE,KAAK,CAACnB,OAAO,CAACsC,MAAM;MAC1D,IAAI,CAACnB,KAAK,CAACnB,OAAO,CAACqF,IAAI,CAACE,GAAG,CAAC;IAC9B;IACA,OAAOtE,KAAK;EACd;;EAEA;EACA;EACAU,QAAQA,CAACnB,IAAI,EAAE;IACb,MAAM+E,GAAG,GAAG,IAAI,CAAC/F,GAAG,CAACgB,IAAI,CAACgF,KAAK,CAAChF,IAAI,CAAC;IACrC,IAAIS,KAAK,GAAG,IAAI,CAACA,KAAK,CAACT,IAAI,CAAC+E,GAAG,CAAC;IAChC,IAAItE,KAAK,KAAK2C,SAAS,EAAE;MACvB3C,KAAK,GAAG,IAAI,CAACA,KAAK,CAACT,IAAI,CAAC+E,GAAG,CAAC,GAAG,IAAI,CAACpE,KAAK,CAACpB,KAAK,CAACuC,MAAM;MACtD,IAAI,CAACnB,KAAK,CAACpB,KAAK,CAACsF,IAAI,CAACE,GAAG,CAAC;IAC5B;IACA,OAAOtE,KAAK;EACd;;EAEA;AACF;;AAEA5B,WAAW,CAACgD,qBAAqB,GAAG;EAClCqD,KAAK,EAAE,2DAA2D;EAClE,UAAU,EAAE,6DAA6D;EACzE,cAAc,EAAE,aAAa;EAC7B,aAAa,EAAE,6DAA6D;EAC5E,aAAa,EAAE;AACjB,CAAC;AACDrG,WAAW,CAACuB,aAAa,GAAG;EAC1BD,UAAU,EAAE,IAAI/B,WAAW,CAAC;IAC1Bc,GAAG,EAAE,YAAY;IACjBI,CAAC,EAAE;MAACH,KAAK,EAAE;IAAC,CAAC;IACbgG,CAAC,EAAE,CAAC;MAACjG,GAAG,EAAE,WAAW;MAAEI,CAAC,EAAE;QAACiD,IAAI,EAAE,QAAQ;QAAE5C,IAAI,EAAE,CAAC;QAAEyF,SAAS,EAAE;MAAC;IAAC,CAAC;EACpE,CAAC,CAAC;EACFxF,IAAI,EAAE,IAAIxB,WAAW,CAAC;IAACc,GAAG,EAAE,MAAM;IAAEI,CAAC,EAAE;MAACH,KAAK,EAAE;IAAC;EAAC,CAAC,CAAC;EACnDkB,WAAW,EAAE,IAAIjC,WAAW,CAAC;IAC3Bc,GAAG,EAAE,aAAa;IAClBI,CAAC,EAAE;MAACH,KAAK,EAAE,CAAC;MAAEkG,iBAAiB,EAAE,mBAAmB;MAAEC,iBAAiB,EAAE;IAAmB;EAC9F,CAAC,CAAC;EACFhF,MAAM,EAAE,IAAIlC,WAAW,CAAC;IACtBc,GAAG,EAAE,QAAQ;IACbiG,CAAC,EAAE,CACD;MACEjG,GAAG,EAAE,KAAK;MACVI,CAAC,EAAE;QACDiG,GAAG,EAAE,wCAAwC;QAC7C,WAAW,EAAE;MACf,CAAC;MACDJ,CAAC,EAAE,CAAC;QAACjG,GAAG,EAAE,kBAAkB;QAAEI,CAAC,EAAE;UAACkG,kBAAkB,EAAE;QAAmB;MAAC,CAAC;IAC7E,CAAC,EACD;MACEtG,GAAG,EAAE,KAAK;MACVI,CAAC,EAAE;QACDiG,GAAG,EAAE,wCAAwC;QAC7C,WAAW,EAAE;MACf,CAAC;MACDJ,CAAC,EAAE,CAAC;QAACjG,GAAG,EAAE,oBAAoB;QAAEI,CAAC,EAAE;UAACmG,oBAAoB,EAAE;QAAuB;MAAC,CAAC;IACrF,CAAC;EAEL,CAAC;AACH,CAAC;;AAED;AACA,MAAMC,eAAe,SAAS7G,WAAW,CAAC;EACxCC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC6B,KAAK,GAAG;MACXC,MAAM,EAAE,CAAC;QAACG,QAAQ,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;QAAEC,MAAM,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;QAAEvB,IAAI,EAAE;MAAC,CAAC,CAAC;MACnEV,OAAO,EAAE,EAAE;MACXI,KAAK,EAAE,CAAC;QAAC+C,IAAI,EAAE,EAAE;QAAEC,KAAK,EAAE;UAACC,KAAK,EAAE;QAAC,CAAC;QAAEC,IAAI,EAAE,SAAS;QAAEC,MAAM,EAAE,CAAC;QAAEC,MAAM,EAAE;MAAO,CAAC,CAAC;MACnFjD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;MACbD,KAAK,EAAE,CACL;QAAC6B,IAAI,EAAE,SAAS;QAAEC,OAAO,EAAE;MAAM,CAAC,EAClC;QAACD,IAAI,EAAE,SAAS;QAAEC,OAAO,EAAE;MAAS,CAAC;IAEzC,CAAC;EACH;;EAEA;EACA;;EAEA;EACAsE,WAAWA,CAACC,MAAM,EAAE;IAClBA,MAAM,CAACC,SAAS,CAAC,CAAC;IAClB,OAAOC,OAAO,CAACC,OAAO,CAAC,CAAC;EAC1B;;EAEA;EACA;EACA;EACApC,aAAaA,CAAChD,KAAK,EAAEiD,QAAQ,EAAE;IAC7B,QAAQA,QAAQ;MACd,KAAK5F,KAAK,CAAC+F,SAAS,CAACG,IAAI;QACvB,OAAO,IAAI,CAAC8B,WAAW;MACzB;QACE,OAAO,CAAC;IACZ;EACF;EAEA,IAAIA,WAAWA,CAAA,EAAG;IAChB,IAAI,CAAC,IAAI,CAACC,YAAY,EAAE;MACtB,MAAMC,SAAS,GAAG;QAChBnF,QAAQ,EAAEtC,WAAW,CAACwG,eAAe,CAAC,UAAU;MAClD,CAAC;MACD,IAAI,CAACgB,YAAY,GAAG,IAAI,CAACtF,KAAK,CAACC,MAAM,CAACkB,MAAM;MAC5C,IAAI,CAACnB,KAAK,CAACC,MAAM,CAACiE,IAAI,CAACqB,SAAS,CAAC;IACnC;IACA,OAAO,IAAI,CAACD,YAAY;EAC1B;;EAEA;EACA;EACA1B,aAAaA,CAAA,CAAC;EAAA,EAAU;IACtB,OAAO,CAAC,CAAC;EACX;AACF;AAEA1F,WAAW,CAACsH,IAAI,GAAGT,eAAe;AAElCU,MAAM,CAACC,OAAO,GAAGxH,WAAW"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..5a1f2e22513022e36babaa515f0c78e9e9501dde --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js @@ -0,0 +1,46 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class UnderlineXform extends BaseXform { + constructor(model) { + super(); + this.model = model; + } + get tag() { + return 'u'; + } + render(xmlStream, model) { + model = model || this.model; + if (model === true) { + xmlStream.leafNode('u'); + } else { + const attr = UnderlineXform.Attributes[model]; + if (attr) { + xmlStream.leafNode('u', attr); + } + } + } + parseOpen(node) { + if (node.name === 'u') { + this.model = node.attributes.val || true; + } + } + parseText() {} + parseClose() { + return false; + } +} +UnderlineXform.Attributes = { + single: {}, + double: { + val: 'double' + }, + singleAccounting: { + val: 'singleAccounting' + }, + doubleAccounting: { + val: 'doubleAccounting' + } +}; +module.exports = UnderlineXform; +//# sourceMappingURL=underline-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..dc03ca82f2b1c03f14e61b718d6ef3152e6b6a25 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"underline-xform.js","names":["BaseXform","require","UnderlineXform","constructor","model","tag","render","xmlStream","leafNode","attr","Attributes","parseOpen","node","name","attributes","val","parseText","parseClose","single","double","singleAccounting","doubleAccounting","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/underline-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass UnderlineXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n }\n\n get tag() {\n return 'u';\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n\n if (model === true) {\n xmlStream.leafNode('u');\n } else {\n const attr = UnderlineXform.Attributes[model];\n if (attr) {\n xmlStream.leafNode('u', attr);\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'u') {\n this.model = node.attributes.val || true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nUnderlineXform.Attributes = {\n single: {},\n double: {val: 'double'},\n singleAccounting: {val: 'singleAccounting'},\n doubleAccounting: {val: 'doubleAccounting'},\n};\n\nmodule.exports = UnderlineXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,cAAc,SAASF,SAAS,CAAC;EACrCG,WAAWA,CAACC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;IAEP,IAAI,CAACA,KAAK,GAAGA,KAAK;EACpB;EAEA,IAAIC,GAAGA,CAAA,EAAG;IACR,OAAO,GAAG;EACZ;EAEAC,MAAMA,CAACC,SAAS,EAAEH,KAAK,EAAE;IACvBA,KAAK,GAAGA,KAAK,IAAI,IAAI,CAACA,KAAK;IAE3B,IAAIA,KAAK,KAAK,IAAI,EAAE;MAClBG,SAAS,CAACC,QAAQ,CAAC,GAAG,CAAC;IACzB,CAAC,MAAM;MACL,MAAMC,IAAI,GAAGP,cAAc,CAACQ,UAAU,CAACN,KAAK,CAAC;MAC7C,IAAIK,IAAI,EAAE;QACRF,SAAS,CAACC,QAAQ,CAAC,GAAG,EAAEC,IAAI,CAAC;MAC/B;IACF;EACF;EAEAE,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,GAAG,EAAE;MACrB,IAAI,CAACT,KAAK,GAAGQ,IAAI,CAACE,UAAU,CAACC,GAAG,IAAI,IAAI;IAC1C;EACF;EAEAC,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAf,cAAc,CAACQ,UAAU,GAAG;EAC1BQ,MAAM,EAAE,CAAC,CAAC;EACVC,MAAM,EAAE;IAACJ,GAAG,EAAE;EAAQ,CAAC;EACvBK,gBAAgB,EAAE;IAACL,GAAG,EAAE;EAAkB,CAAC;EAC3CM,gBAAgB,EAAE;IAACN,GAAG,EAAE;EAAkB;AAC5C,CAAC;AAEDO,MAAM,CAACC,OAAO,GAAGrB,cAAc"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..57be781159c3b790caa00b7e2c96b8f8c7d79f0b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js @@ -0,0 +1,75 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const FilterColumnXform = require('./filter-column-xform'); +class AutoFilterXform extends BaseXform { + constructor() { + super(); + this.map = { + filterColumn: new FilterColumnXform() + }; + } + get tag() { + return 'autoFilter'; + } + prepare(model) { + model.columns.forEach((column, index) => { + this.map.filterColumn.prepare(column, { + index + }); + }); + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + ref: model.autoFilterRef + }); + model.columns.forEach(column => { + this.map.filterColumn.render(xmlStream, column); + }); + xmlStream.closeNode(); + return true; + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.model = { + autoFilterRef: node.attributes.ref, + columns: [] + }; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.columns.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +module.exports = AutoFilterXform; +//# sourceMappingURL=auto-filter-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..aea9de2a1c16e76824f84d0c3ee6035bf0472142 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auto-filter-xform.js","names":["BaseXform","require","FilterColumnXform","AutoFilterXform","constructor","map","filterColumn","tag","prepare","model","columns","forEach","column","index","render","xmlStream","openNode","ref","autoFilterRef","closeNode","parseOpen","node","parser","name","attributes","Error","JSON","stringify","parseText","text","parseClose","push","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/table/auto-filter-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nconst FilterColumnXform = require('./filter-column-xform');\n\nclass AutoFilterXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n filterColumn: new FilterColumnXform(),\n };\n }\n\n get tag() {\n return 'autoFilter';\n }\n\n prepare(model) {\n model.columns.forEach((column, index) => {\n this.map.filterColumn.prepare(column, {index});\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {ref: model.autoFilterRef});\n\n model.columns.forEach(column => {\n this.map.filterColumn.render(xmlStream, column);\n });\n\n xmlStream.closeNode();\n return true;\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.model = {\n autoFilterRef: node.attributes.ref,\n columns: [],\n };\n return true;\n\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.columns.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nmodule.exports = AutoFilterXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,iBAAiB,GAAGD,OAAO,CAAC,uBAAuB,CAAC;AAE1D,MAAME,eAAe,SAASH,SAAS,CAAC;EACtCI,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACTC,YAAY,EAAE,IAAIJ,iBAAiB,CAAC;IACtC,CAAC;EACH;EAEA,IAAIK,GAAGA,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEAC,OAAOA,CAACC,KAAK,EAAE;IACbA,KAAK,CAACC,OAAO,CAACC,OAAO,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;MACvC,IAAI,CAACR,GAAG,CAACC,YAAY,CAACE,OAAO,CAACI,MAAM,EAAE;QAACC;MAAK,CAAC,CAAC;IAChD,CAAC,CAAC;EACJ;EAEAC,MAAMA,CAACC,SAAS,EAAEN,KAAK,EAAE;IACvBM,SAAS,CAACC,QAAQ,CAAC,IAAI,CAACT,GAAG,EAAE;MAACU,GAAG,EAAER,KAAK,CAACS;IAAa,CAAC,CAAC;IAExDT,KAAK,CAACC,OAAO,CAACC,OAAO,CAACC,MAAM,IAAI;MAC9B,IAAI,CAACP,GAAG,CAACC,YAAY,CAACQ,MAAM,CAACC,SAAS,EAAEH,MAAM,CAAC;IACjD,CAAC,CAAC;IAEFG,SAAS,CAACI,SAAS,CAAC,CAAC;IACrB,OAAO,IAAI;EACb;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACF,SAAS,CAACC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQA,IAAI,CAACE,IAAI;MACf,KAAK,IAAI,CAAChB,GAAG;QACX,IAAI,CAACE,KAAK,GAAG;UACXS,aAAa,EAAEG,IAAI,CAACG,UAAU,CAACP,GAAG;UAClCP,OAAO,EAAE;QACX,CAAC;QACD,OAAO,IAAI;MAEb;QACE,IAAI,CAACY,MAAM,GAAG,IAAI,CAACjB,GAAG,CAACgB,IAAI,CAACE,IAAI,CAAC;QACjC,IAAI,IAAI,CAACD,MAAM,EAAE;UACf,IAAI,CAACF,SAAS,CAACC,IAAI,CAAC;UACpB,OAAO,IAAI;QACb;QACA,MAAM,IAAII,KAAK,CAAE,qCAAoCC,IAAI,CAACC,SAAS,CAACN,IAAI,CAAE,EAAC,CAAC;IAChF;EACF;EAEAO,SAASA,CAACC,IAAI,EAAE;IACd,IAAI,IAAI,CAACP,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACM,SAAS,CAACC,IAAI,CAAC;IAC7B;EACF;EAEAC,UAAUA,CAACP,IAAI,EAAE;IACf,IAAI,IAAI,CAACD,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAACA,MAAM,CAACQ,UAAU,CAACP,IAAI,CAAC,EAAE;QACjC,IAAI,CAACd,KAAK,CAACC,OAAO,CAACqB,IAAI,CAAC,IAAI,CAACT,MAAM,CAACb,KAAK,CAAC;QAC1C,IAAI,CAACa,MAAM,GAAGU,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQT,IAAI;MACV,KAAK,IAAI,CAAChB,GAAG;QACX,OAAO,KAAK;MACd;QACE,MAAM,IAAIkB,KAAK,CAAE,sCAAqCF,IAAK,EAAC,CAAC;IACjE;EACF;AACF;AAEAU,MAAM,CAACC,OAAO,GAAG/B,eAAe"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..8d8d7c7f466595a327ef6d832e584daf421f1397 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js @@ -0,0 +1,30 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class CustomFilterXform extends BaseXform { + get tag() { + return 'customFilter'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + val: model.val, + operator: model.operator + }); + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + val: node.attributes.val, + operator: node.attributes.operator + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = CustomFilterXform; +//# sourceMappingURL=custom-filter-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..4b9714ea6acd5fed92172a1a8f4c56a5cb66f5af --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"custom-filter-xform.js","names":["BaseXform","require","CustomFilterXform","tag","render","xmlStream","model","leafNode","val","operator","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/table/custom-filter-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass CustomFilterXform extends BaseXform {\n get tag() {\n return 'customFilter';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n val: model.val,\n operator: model.operator,\n });\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n val: node.attributes.val,\n operator: node.attributes.operator,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = CustomFilterXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,iBAAiB,SAASF,SAAS,CAAC;EACxC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;MAC3BK,GAAG,EAAEF,KAAK,CAACE,GAAG;MACdC,QAAQ,EAAEH,KAAK,CAACG;IAClB,CAAC,CAAC;EACJ;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACT,GAAG,EAAE;MAC1B,IAAI,CAACG,KAAK,GAAG;QACXE,GAAG,EAAEG,IAAI,CAACE,UAAU,CAACL,GAAG;QACxBC,QAAQ,EAAEE,IAAI,CAACE,UAAU,CAACJ;MAC5B,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAK,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGf,iBAAiB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..e4c59be695520ebe7aceaa0b6c98da1c9a8689ed --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js @@ -0,0 +1,89 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +const ListXform = require('../list-xform'); +const CustomFilterXform = require('./custom-filter-xform'); +const FilterXform = require('./filter-xform'); +class FilterColumnXform extends BaseXform { + constructor() { + super(); + this.map = { + customFilters: new ListXform({ + tag: 'customFilters', + count: false, + empty: true, + childXform: new CustomFilterXform() + }), + filters: new ListXform({ + tag: 'filters', + count: false, + empty: true, + childXform: new FilterXform() + }) + }; + } + get tag() { + return 'filterColumn'; + } + prepare(model, options) { + model.colId = options.index.toString(); + } + render(xmlStream, model) { + if (model.customFilters) { + xmlStream.openNode(this.tag, { + colId: model.colId, + hiddenButton: model.filterButton ? '0' : '1' + }); + this.map.customFilters.render(xmlStream, model.customFilters); + xmlStream.closeNode(); + return true; + } + xmlStream.leafNode(this.tag, { + colId: model.colId, + hiddenButton: model.filterButton ? '0' : '1' + }); + return true; + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + const { + attributes + } = node; + switch (node.name) { + case this.tag: + this.model = { + filterButton: attributes.hiddenButton === '0' + }; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.customFilters = this.map.customFilters.model; + return false; + default: + // could be some unrecognised tags + return true; + } + } +} +module.exports = FilterColumnXform; +//# sourceMappingURL=filter-column-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2e391a9a133aca27cbb989f6cc83bbeadd52c5ec --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"filter-column-xform.js","names":["BaseXform","require","ListXform","CustomFilterXform","FilterXform","FilterColumnXform","constructor","map","customFilters","tag","count","empty","childXform","filters","prepare","model","options","colId","index","toString","render","xmlStream","openNode","hiddenButton","filterButton","closeNode","leafNode","parseOpen","node","parser","attributes","name","Error","JSON","stringify","parseText","parseClose","undefined","module","exports"],"sources":["../../../../../lib/xlsx/xform/table/filter-column-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst CustomFilterXform = require('./custom-filter-xform');\nconst FilterXform = require('./filter-xform');\n\nclass FilterColumnXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n customFilters: new ListXform({\n tag: 'customFilters',\n count: false,\n empty: true,\n childXform: new CustomFilterXform(),\n }),\n filters: new ListXform({\n tag: 'filters',\n count: false,\n empty: true,\n childXform: new FilterXform(),\n }),\n };\n }\n\n get tag() {\n return 'filterColumn';\n }\n\n prepare(model, options) {\n model.colId = options.index.toString();\n }\n\n render(xmlStream, model) {\n if (model.customFilters) {\n xmlStream.openNode(this.tag, {\n colId: model.colId,\n hiddenButton: model.filterButton ? '0' : '1',\n });\n\n this.map.customFilters.render(xmlStream, model.customFilters);\n\n xmlStream.closeNode();\n return true;\n }\n xmlStream.leafNode(this.tag, {\n colId: model.colId,\n hiddenButton: model.filterButton ? '0' : '1',\n });\n return true;\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {attributes} = node;\n switch (node.name) {\n case this.tag:\n this.model = {\n filterButton: attributes.hiddenButton === '0',\n };\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.customFilters = this.map.customFilters.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n}\n\nmodule.exports = FilterColumnXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..7fff6df119f03dc49fa392e00b9e296b529ccec2 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js @@ -0,0 +1,28 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class FilterXform extends BaseXform { + get tag() { + return 'filter'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + val: model.val + }); + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + val: node.attributes.val + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = FilterXform; +//# sourceMappingURL=filter-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..93dd69c54330ecce398f070c8466e9f77c856e8b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"filter-xform.js","names":["BaseXform","require","FilterXform","tag","render","xmlStream","model","leafNode","val","parseOpen","node","name","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/table/filter-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass FilterXform extends BaseXform {\n get tag() {\n return 'filter';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n val: model.val,\n });\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n val: node.attributes.val,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = FilterXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,WAAW,SAASF,SAAS,CAAC;EAClC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;MAC3BK,GAAG,EAAEF,KAAK,CAACE;IACb,CAAC,CAAC;EACJ;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACR,GAAG,EAAE;MAC1B,IAAI,CAACG,KAAK,GAAG;QACXE,GAAG,EAAEE,IAAI,CAACE,UAAU,CAACJ;MACvB,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAK,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGd,WAAW"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..296b99dbd81f11ea13b017e36f39256eb5478581 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js @@ -0,0 +1,42 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class TableColumnXform extends BaseXform { + get tag() { + return 'tableColumn'; + } + prepare(model, options) { + model.id = options.index + 1; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + id: model.id.toString(), + name: model.name, + totalsRowLabel: model.totalsRowLabel, + totalsRowFunction: model.totalsRowFunction, + dxfId: model.dxfId + }); + return true; + } + parseOpen(node) { + if (node.name === this.tag) { + const { + attributes + } = node; + this.model = { + name: attributes.name, + totalsRowLabel: attributes.totalsRowLabel, + totalsRowFunction: attributes.totalsRowFunction, + dxfId: attributes.dxfId + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = TableColumnXform; +//# sourceMappingURL=table-column-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..50321eed4a8102486dabd6dc0fb5712569ad7fe9 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"table-column-xform.js","names":["BaseXform","require","TableColumnXform","tag","prepare","model","options","id","index","render","xmlStream","leafNode","toString","name","totalsRowLabel","totalsRowFunction","dxfId","parseOpen","node","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/table/table-column-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass TableColumnXform extends BaseXform {\n get tag() {\n return 'tableColumn';\n }\n\n prepare(model, options) {\n model.id = options.index + 1;\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n id: model.id.toString(),\n name: model.name,\n totalsRowLabel: model.totalsRowLabel,\n totalsRowFunction: model.totalsRowFunction,\n dxfId: model.dxfId,\n });\n return true;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n const {attributes} = node;\n this.model = {\n name: attributes.name,\n totalsRowLabel: attributes.totalsRowLabel,\n totalsRowFunction: attributes.totalsRowFunction,\n dxfId: attributes.dxfId,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TableColumnXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,gBAAgB,SAASF,SAAS,CAAC;EACvC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEAC,OAAOA,CAACC,KAAK,EAAEC,OAAO,EAAE;IACtBD,KAAK,CAACE,EAAE,GAAGD,OAAO,CAACE,KAAK,GAAG,CAAC;EAC9B;EAEAC,MAAMA,CAACC,SAAS,EAAEL,KAAK,EAAE;IACvBK,SAAS,CAACC,QAAQ,CAAC,IAAI,CAACR,GAAG,EAAE;MAC3BI,EAAE,EAAEF,KAAK,CAACE,EAAE,CAACK,QAAQ,CAAC,CAAC;MACvBC,IAAI,EAAER,KAAK,CAACQ,IAAI;MAChBC,cAAc,EAAET,KAAK,CAACS,cAAc;MACpCC,iBAAiB,EAAEV,KAAK,CAACU,iBAAiB;MAC1CC,KAAK,EAAEX,KAAK,CAACW;IACf,CAAC,CAAC;IACF,OAAO,IAAI;EACb;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACL,IAAI,KAAK,IAAI,CAACV,GAAG,EAAE;MAC1B,MAAM;QAACgB;MAAU,CAAC,GAAGD,IAAI;MACzB,IAAI,CAACb,KAAK,GAAG;QACXQ,IAAI,EAAEM,UAAU,CAACN,IAAI;QACrBC,cAAc,EAAEK,UAAU,CAACL,cAAc;QACzCC,iBAAiB,EAAEI,UAAU,CAACJ,iBAAiB;QAC/CC,KAAK,EAAEG,UAAU,CAACH;MACpB,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAI,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGrB,gBAAgB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..5f6a78ca51ea9ed53e03f2130183d33c3e22b2f2 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js @@ -0,0 +1,40 @@ +"use strict"; + +const BaseXform = require('../base-xform'); +class TableStyleInfoXform extends BaseXform { + get tag() { + return 'tableStyleInfo'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + name: model.theme ? model.theme : undefined, + showFirstColumn: model.showFirstColumn ? '1' : '0', + showLastColumn: model.showLastColumn ? '1' : '0', + showRowStripes: model.showRowStripes ? '1' : '0', + showColumnStripes: model.showColumnStripes ? '1' : '0' + }); + return true; + } + parseOpen(node) { + if (node.name === this.tag) { + const { + attributes + } = node; + this.model = { + theme: attributes.name ? attributes.name : null, + showFirstColumn: attributes.showFirstColumn === '1', + showLastColumn: attributes.showLastColumn === '1', + showRowStripes: attributes.showRowStripes === '1', + showColumnStripes: attributes.showColumnStripes === '1' + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = TableStyleInfoXform; +//# sourceMappingURL=table-style-info-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..2aa1982f47c9d4ca0d8ea03df591764fddf0cdf1 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"table-style-info-xform.js","names":["BaseXform","require","TableStyleInfoXform","tag","render","xmlStream","model","leafNode","name","theme","undefined","showFirstColumn","showLastColumn","showRowStripes","showColumnStripes","parseOpen","node","attributes","parseText","parseClose","module","exports"],"sources":["../../../../../lib/xlsx/xform/table/table-style-info-xform.js"],"sourcesContent":["const BaseXform = require('../base-xform');\n\nclass TableStyleInfoXform extends BaseXform {\n get tag() {\n return 'tableStyleInfo';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n name: model.theme ? model.theme : undefined,\n showFirstColumn: model.showFirstColumn ? '1' : '0',\n showLastColumn: model.showLastColumn ? '1' : '0',\n showRowStripes: model.showRowStripes ? '1' : '0',\n showColumnStripes: model.showColumnStripes ? '1' : '0',\n });\n return true;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n const {attributes} = node;\n this.model = {\n theme: attributes.name ? attributes.name : null,\n showFirstColumn: attributes.showFirstColumn === '1',\n showLastColumn: attributes.showLastColumn === '1',\n showRowStripes: attributes.showRowStripes === '1',\n showColumnStripes: attributes.showColumnStripes === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TableStyleInfoXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAMC,mBAAmB,SAASF,SAAS,CAAC;EAC1C,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,gBAAgB;EACzB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvBD,SAAS,CAACE,QAAQ,CAAC,IAAI,CAACJ,GAAG,EAAE;MAC3BK,IAAI,EAAEF,KAAK,CAACG,KAAK,GAAGH,KAAK,CAACG,KAAK,GAAGC,SAAS;MAC3CC,eAAe,EAAEL,KAAK,CAACK,eAAe,GAAG,GAAG,GAAG,GAAG;MAClDC,cAAc,EAAEN,KAAK,CAACM,cAAc,GAAG,GAAG,GAAG,GAAG;MAChDC,cAAc,EAAEP,KAAK,CAACO,cAAc,GAAG,GAAG,GAAG,GAAG;MAChDC,iBAAiB,EAAER,KAAK,CAACQ,iBAAiB,GAAG,GAAG,GAAG;IACrD,CAAC,CAAC;IACF,OAAO,IAAI;EACb;EAEAC,SAASA,CAACC,IAAI,EAAE;IACd,IAAIA,IAAI,CAACR,IAAI,KAAK,IAAI,CAACL,GAAG,EAAE;MAC1B,MAAM;QAACc;MAAU,CAAC,GAAGD,IAAI;MACzB,IAAI,CAACV,KAAK,GAAG;QACXG,KAAK,EAAEQ,UAAU,CAACT,IAAI,GAAGS,UAAU,CAACT,IAAI,GAAG,IAAI;QAC/CG,eAAe,EAAEM,UAAU,CAACN,eAAe,KAAK,GAAG;QACnDC,cAAc,EAAEK,UAAU,CAACL,cAAc,KAAK,GAAG;QACjDC,cAAc,EAAEI,UAAU,CAACJ,cAAc,KAAK,GAAG;QACjDC,iBAAiB,EAAEG,UAAU,CAACH,iBAAiB,KAAK;MACtD,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAI,SAASA,CAAA,EAAG,CAAC;EAEbC,UAAUA,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGnB,mBAAmB"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js new file mode 100644 index 0000000000000000000000000000000000000000..3fa5d97e4ea2d7efac6cadcb4bbc16a343e7ef3f --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js @@ -0,0 +1,123 @@ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const ListXform = require('../list-xform'); +const AutoFilterXform = require('./auto-filter-xform'); +const TableColumnXform = require('./table-column-xform'); +const TableStyleInfoXform = require('./table-style-info-xform'); +class TableXform extends BaseXform { + constructor() { + super(); + this.map = { + autoFilter: new AutoFilterXform(), + tableColumns: new ListXform({ + tag: 'tableColumns', + count: true, + empty: true, + childXform: new TableColumnXform() + }), + tableStyleInfo: new TableStyleInfoXform() + }; + } + prepare(model, options) { + this.map.autoFilter.prepare(model); + this.map.tableColumns.prepare(model.columns, options); + } + get tag() { + return 'table'; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode(this.tag, { + ...TableXform.TABLE_ATTRIBUTES, + id: model.id, + name: model.name, + displayName: model.displayName || model.name, + ref: model.tableRef, + totalsRowCount: model.totalsRow ? '1' : undefined, + totalsRowShown: model.totalsRow ? undefined : '1', + headerRowCount: model.headerRow ? '1' : '0' + }); + this.map.autoFilter.render(xmlStream, model); + this.map.tableColumns.render(xmlStream, model.columns); + this.map.tableStyleInfo.render(xmlStream, model.style); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + const { + name, + attributes + } = node; + switch (name) { + case this.tag: + this.reset(); + this.model = { + name: attributes.name, + displayName: attributes.displayName || attributes.name, + tableRef: attributes.ref, + totalsRow: attributes.totalsRowCount === '1', + headerRow: attributes.headerRowCount === '1' + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.columns = this.map.tableColumns.model; + if (this.map.autoFilter.model) { + this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef; + this.map.autoFilter.model.columns.forEach((column, index) => { + this.model.columns[index].filterButton = column.filterButton; + }); + } + this.model.style = this.map.tableStyleInfo.model; + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + // fetch the dfxs from styles + model.columns.forEach(column => { + if (column.dxfId !== undefined) { + column.style = options.styles.getDxfStyle(column.dxfId); + } + }); + } +} +TableXform.TABLE_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'xr xr3', + 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision', + 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3' + // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}', +}; + +module.exports = TableXform; +//# sourceMappingURL=table-xform.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js.map new file mode 100644 index 0000000000000000000000000000000000000000..97d7e025709892efc7ef5c820238895a1a48d65c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"table-xform.js","names":["XmlStream","require","BaseXform","ListXform","AutoFilterXform","TableColumnXform","TableStyleInfoXform","TableXform","constructor","map","autoFilter","tableColumns","tag","count","empty","childXform","tableStyleInfo","prepare","model","options","columns","render","xmlStream","openXml","StdDocAttributes","openNode","TABLE_ATTRIBUTES","id","name","displayName","ref","tableRef","totalsRowCount","totalsRow","undefined","totalsRowShown","headerRowCount","headerRow","style","closeNode","parseOpen","node","parser","attributes","reset","parseText","text","parseClose","autoFilterRef","forEach","column","index","filterButton","reconcile","dxfId","styles","getDxfStyle","xmlns","module","exports"],"sources":["../../../../../lib/xlsx/xform/table/table-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst AutoFilterXform = require('./auto-filter-xform');\nconst TableColumnXform = require('./table-column-xform');\nconst TableStyleInfoXform = require('./table-style-info-xform');\n\nclass TableXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n autoFilter: new AutoFilterXform(),\n tableColumns: new ListXform({\n tag: 'tableColumns',\n count: true,\n empty: true,\n childXform: new TableColumnXform(),\n }),\n tableStyleInfo: new TableStyleInfoXform(),\n };\n }\n\n prepare(model, options) {\n this.map.autoFilter.prepare(model);\n this.map.tableColumns.prepare(model.columns, options);\n }\n\n get tag() {\n return 'table';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, {\n ...TableXform.TABLE_ATTRIBUTES,\n id: model.id,\n name: model.name,\n displayName: model.displayName || model.name,\n ref: model.tableRef,\n totalsRowCount: model.totalsRow ? '1' : undefined,\n totalsRowShown: model.totalsRow ? undefined : '1',\n headerRowCount: model.headerRow ? '1' : '0',\n });\n\n this.map.autoFilter.render(xmlStream, model);\n this.map.tableColumns.render(xmlStream, model.columns);\n this.map.tableStyleInfo.render(xmlStream, model.style);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {name, attributes} = node;\n switch (name) {\n case this.tag:\n this.reset();\n this.model = {\n name: attributes.name,\n displayName: attributes.displayName || attributes.name,\n tableRef: attributes.ref,\n totalsRow: attributes.totalsRowCount === '1',\n headerRow: attributes.headerRowCount === '1',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.columns = this.map.tableColumns.model;\n if (this.map.autoFilter.model) {\n this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef;\n this.map.autoFilter.model.columns.forEach((column, index) => {\n this.model.columns[index].filterButton = column.filterButton;\n });\n }\n this.model.style = this.map.tableStyleInfo.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n // fetch the dfxs from styles\n model.columns.forEach(column => {\n if (column.dxfId !== undefined) {\n column.style = options.styles.getDxfStyle(column.dxfId);\n }\n });\n }\n}\n\nTableXform.TABLE_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'xr xr3',\n 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',\n 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3',\n // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}',\n};\n\nmodule.exports = TableXform;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xlsx.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xlsx.js new file mode 100644 index 0000000000000000000000000000000000000000..fd05bdac9cbeaa6e326b04a0b88d949c8b4d0a41 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xlsx.js @@ -0,0 +1,697 @@ +"use strict"; + +const fs = require('fs'); +const JSZip = require('jszip'); +const { + PassThrough +} = require('readable-stream'); +const ZipStream = require('../utils/zip-stream'); +const StreamBuf = require('../utils/stream-buf'); +const utils = require('../utils/utils'); +const XmlStream = require('../utils/xml-stream'); +const { + bufferToString +} = require('../utils/browser-buffer-decode'); +const StylesXform = require('./xform/style/styles-xform'); +const CoreXform = require('./xform/core/core-xform'); +const SharedStringsXform = require('./xform/strings/shared-strings-xform'); +const RelationshipsXform = require('./xform/core/relationships-xform'); +const ContentTypesXform = require('./xform/core/content-types-xform'); +const AppXform = require('./xform/core/app-xform'); +const WorkbookXform = require('./xform/book/workbook-xform'); +const WorksheetXform = require('./xform/sheet/worksheet-xform'); +const DrawingXform = require('./xform/drawing/drawing-xform'); +const TableXform = require('./xform/table/table-xform'); +const CommentsXform = require('./xform/comment/comments-xform'); +const VmlNotesXform = require('./xform/comment/vml-notes-xform'); +const theme1Xml = require('./xml/theme1'); +function fsReadFileAsync(filename, options) { + return new Promise((resolve, reject) => { + fs.readFile(filename, options, (error, data) => { + if (error) { + reject(error); + } else { + resolve(data); + } + }); + }); +} +class XLSX { + constructor(workbook) { + this.workbook = workbook; + } + + // =============================================================================== + // Workbook + // ========================================================================= + // Read + + async readFile(filename, options) { + if (!(await utils.fs.exists(filename))) { + throw new Error(`File not found: ${filename}`); + } + const stream = fs.createReadStream(filename); + try { + const workbook = await this.read(stream, options); + stream.close(); + return workbook; + } catch (error) { + stream.close(); + throw error; + } + } + parseRels(stream) { + const xform = new RelationshipsXform(); + return xform.parseStream(stream); + } + parseWorkbook(stream) { + const xform = new WorkbookXform(); + return xform.parseStream(stream); + } + parseSharedStrings(stream) { + const xform = new SharedStringsXform(); + return xform.parseStream(stream); + } + reconcile(model, options) { + const workbookXform = new WorkbookXform(); + const worksheetXform = new WorksheetXform(options); + const drawingXform = new DrawingXform(); + const tableXform = new TableXform(); + workbookXform.reconcile(model); + + // reconcile drawings with their rels + const drawingOptions = { + media: model.media, + mediaIndex: model.mediaIndex + }; + Object.keys(model.drawings).forEach(name => { + const drawing = model.drawings[name]; + const drawingRel = model.drawingRels[name]; + if (drawingRel) { + drawingOptions.rels = drawingRel.reduce((o, rel) => { + o[rel.Id] = rel; + return o; + }, {}); + (drawing.anchors || []).forEach(anchor => { + const hyperlinks = anchor.picture && anchor.picture.hyperlinks; + if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) { + hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target; + delete hyperlinks.rId; + } + }); + drawingXform.reconcile(drawing, drawingOptions); + } + }); + + // reconcile tables with the default styles + const tableOptions = { + styles: model.styles + }; + Object.values(model.tables).forEach(table => { + tableXform.reconcile(table, tableOptions); + }); + const sheetOptions = { + styles: model.styles, + sharedStrings: model.sharedStrings, + media: model.media, + mediaIndex: model.mediaIndex, + date1904: model.properties && model.properties.date1904, + drawings: model.drawings, + comments: model.comments, + tables: model.tables, + vmlDrawings: model.vmlDrawings + }; + model.worksheets.forEach(worksheet => { + worksheet.relationships = model.worksheetRels[worksheet.sheetNo]; + worksheetXform.reconcile(worksheet, sheetOptions); + }); + + // delete unnecessary parts + delete model.worksheetHash; + delete model.worksheetRels; + delete model.globalRels; + delete model.sharedStrings; + delete model.workbookRels; + delete model.sheetDefs; + delete model.styles; + delete model.mediaIndex; + delete model.drawings; + delete model.drawingRels; + delete model.vmlDrawings; + } + async _processWorksheetEntry(stream, model, sheetNo, options, path) { + const xform = new WorksheetXform(options); + const worksheet = await xform.parseStream(stream); + worksheet.sheetNo = sheetNo; + model.worksheetHash[path] = worksheet; + model.worksheets.push(worksheet); + } + async _processCommentEntry(stream, model, name) { + const xform = new CommentsXform(); + const comments = await xform.parseStream(stream); + model.comments[`../${name}.xml`] = comments; + } + async _processTableEntry(stream, model, name) { + const xform = new TableXform(); + const table = await xform.parseStream(stream); + model.tables[`../tables/${name}.xml`] = table; + } + async _processWorksheetRelsEntry(stream, model, sheetNo) { + const xform = new RelationshipsXform(); + const relationships = await xform.parseStream(stream); + model.worksheetRels[sheetNo] = relationships; + } + async _processMediaEntry(entry, model, filename) { + const lastDot = filename.lastIndexOf('.'); + // if we can't determine extension, ignore it + if (lastDot >= 1) { + const extension = filename.substr(lastDot + 1); + const name = filename.substr(0, lastDot); + await new Promise((resolve, reject) => { + const streamBuf = new StreamBuf(); + streamBuf.on('finish', () => { + model.mediaIndex[filename] = model.media.length; + model.mediaIndex[name] = model.media.length; + const medium = { + type: 'image', + name, + extension, + buffer: streamBuf.toBuffer() + }; + model.media.push(medium); + resolve(); + }); + entry.on('error', error => { + reject(error); + }); + entry.pipe(streamBuf); + }); + } + } + async _processDrawingEntry(entry, model, name) { + const xform = new DrawingXform(); + const drawing = await xform.parseStream(entry); + model.drawings[name] = drawing; + } + async _processDrawingRelsEntry(entry, model, name) { + const xform = new RelationshipsXform(); + const relationships = await xform.parseStream(entry); + model.drawingRels[name] = relationships; + } + async _processVmlDrawingEntry(entry, model, name) { + const xform = new VmlNotesXform(); + const vmlDrawing = await xform.parseStream(entry); + model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing; + } + async _processThemeEntry(entry, model, name) { + await new Promise((resolve, reject) => { + // TODO: stream entry into buffer and store the xml in the model.themes[] + const stream = new StreamBuf(); + entry.on('error', reject); + stream.on('error', reject); + stream.on('finish', () => { + model.themes[name] = stream.read().toString(); + resolve(); + }); + entry.pipe(stream); + }); + } + + /** + * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md + */ + createInputStream() { + throw new Error('`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'); + } + async read(stream, options) { + // TODO: Remove once node v8 is deprecated + // Detect and upgrade old streams + if (!stream[Symbol.asyncIterator] && stream.pipe) { + stream = stream.pipe(new PassThrough()); + } + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + return this.load(Buffer.concat(chunks), options); + } + async load(data, options) { + let buffer; + if (options && options.base64) { + buffer = Buffer.from(data.toString(), 'base64'); + } else { + buffer = data; + } + const model = { + worksheets: [], + worksheetHash: {}, + worksheetRels: [], + themes: {}, + media: [], + mediaIndex: {}, + drawings: {}, + drawingRels: {}, + comments: {}, + tables: {}, + vmlDrawings: {} + }; + const zip = await JSZip.loadAsync(buffer); + for (const entry of Object.values(zip.files)) { + /* eslint-disable no-await-in-loop */ + if (!entry.dir) { + let entryName = entry.name; + if (entryName[0] === '/') { + entryName = entryName.substr(1); + } + let stream; + if (entryName.match(/xl\/media\//) || + // themes are not parsed as stream + entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/)) { + stream = new PassThrough(); + stream.write(await entry.async('nodebuffer')); + } else { + // use object mode to avoid buffer-string convention + stream = new PassThrough({ + writableObjectMode: true, + readableObjectMode: true + }); + let content; + // https://www.npmjs.com/package/process + if (process.browser) { + // running in browser, use TextDecoder if possible + content = bufferToString(await entry.async('nodebuffer')); + } else { + // running in node.js + content = await entry.async('string'); + } + const chunkSize = 16 * 1024; + for (let i = 0; i < content.length; i += chunkSize) { + stream.write(content.substring(i, i + chunkSize)); + } + } + stream.end(); + switch (entryName) { + case '_rels/.rels': + model.globalRels = await this.parseRels(stream); + break; + case 'xl/workbook.xml': + { + const workbook = await this.parseWorkbook(stream); + model.sheets = workbook.sheets; + model.definedNames = workbook.definedNames; + model.views = workbook.views; + model.properties = workbook.properties; + model.calcProperties = workbook.calcProperties; + break; + } + case 'xl/_rels/workbook.xml.rels': + model.workbookRels = await this.parseRels(stream); + break; + case 'xl/sharedStrings.xml': + model.sharedStrings = new SharedStringsXform(); + await model.sharedStrings.parseStream(stream); + break; + case 'xl/styles.xml': + model.styles = new StylesXform(); + await model.styles.parseStream(stream); + break; + case 'docProps/app.xml': + { + const appXform = new AppXform(); + const appProperties = await appXform.parseStream(stream); + model.company = appProperties.company; + model.manager = appProperties.manager; + break; + } + case 'docProps/core.xml': + { + const coreXform = new CoreXform(); + const coreProperties = await coreXform.parseStream(stream); + Object.assign(model, coreProperties); + break; + } + default: + { + let match = entryName.match(/xl\/worksheets\/sheet(\d+)[.]xml/); + if (match) { + await this._processWorksheetEntry(stream, model, match[1], options, entryName); + break; + } + match = entryName.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/); + if (match) { + await this._processWorksheetRelsEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/); + if (match) { + await this._processThemeEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/media\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/); + if (match) { + await this._processMediaEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/drawings\/([a-zA-Z0-9]+)[.]xml/); + if (match) { + await this._processDrawingEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/(comments\d+)[.]xml/); + if (match) { + await this._processCommentEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/tables\/(table\d+)[.]xml/); + if (match) { + await this._processTableEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/drawings\/_rels\/([a-zA-Z0-9]+)[.]xml[.]rels/); + if (match) { + await this._processDrawingRelsEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/drawings\/(vmlDrawing\d+)[.]vml/); + if (match) { + await this._processVmlDrawingEntry(stream, model, match[1]); + break; + } + } + } + } + } + this.reconcile(model, options); + + // apply model + this.workbook.model = model; + return this.workbook; + } + + // ========================================================================= + // Write + + async addMedia(zip, model) { + await Promise.all(model.media.map(async medium => { + if (medium.type === 'image') { + const filename = `xl/media/${medium.name}.${medium.extension}`; + if (medium.filename) { + const data = await fsReadFileAsync(medium.filename); + return zip.append(data, { + name: filename + }); + } + if (medium.buffer) { + return zip.append(medium.buffer, { + name: filename + }); + } + if (medium.base64) { + const dataimg64 = medium.base64; + const content = dataimg64.substring(dataimg64.indexOf(',') + 1); + return zip.append(content, { + name: filename, + base64: true + }); + } + } + throw new Error('Unsupported media'); + })); + } + addDrawings(zip, model) { + const drawingXform = new DrawingXform(); + const relsXform = new RelationshipsXform(); + model.worksheets.forEach(worksheet => { + const { + drawing + } = worksheet; + if (drawing) { + drawingXform.prepare(drawing, {}); + let xml = drawingXform.toXml(drawing); + zip.append(xml, { + name: `xl/drawings/${drawing.name}.xml` + }); + xml = relsXform.toXml(drawing.rels); + zip.append(xml, { + name: `xl/drawings/_rels/${drawing.name}.xml.rels` + }); + } + }); + } + addTables(zip, model) { + const tableXform = new TableXform(); + model.worksheets.forEach(worksheet => { + const { + tables + } = worksheet; + tables.forEach(table => { + tableXform.prepare(table, {}); + const tableXml = tableXform.toXml(table); + zip.append(tableXml, { + name: `xl/tables/${table.target}` + }); + }); + }); + } + async addContentTypes(zip, model) { + const xform = new ContentTypesXform(); + const xml = xform.toXml(model); + zip.append(xml, { + name: '[Content_Types].xml' + }); + } + async addApp(zip, model) { + const xform = new AppXform(); + const xml = xform.toXml(model); + zip.append(xml, { + name: 'docProps/app.xml' + }); + } + async addCore(zip, model) { + const coreXform = new CoreXform(); + zip.append(coreXform.toXml(model), { + name: 'docProps/core.xml' + }); + } + async addThemes(zip, model) { + const themes = model.themes || { + theme1: theme1Xml + }; + Object.keys(themes).forEach(name => { + const xml = themes[name]; + const path = `xl/theme/${name}.xml`; + zip.append(xml, { + name: path + }); + }); + } + async addOfficeRels(zip) { + const xform = new RelationshipsXform(); + const xml = xform.toXml([{ + Id: 'rId1', + Type: XLSX.RelType.OfficeDocument, + Target: 'xl/workbook.xml' + }, { + Id: 'rId2', + Type: XLSX.RelType.CoreProperties, + Target: 'docProps/core.xml' + }, { + Id: 'rId3', + Type: XLSX.RelType.ExtenderProperties, + Target: 'docProps/app.xml' + }]); + zip.append(xml, { + name: '_rels/.rels' + }); + } + async addWorkbookRels(zip, model) { + let count = 1; + const relationships = [{ + Id: `rId${count++}`, + Type: XLSX.RelType.Styles, + Target: 'styles.xml' + }, { + Id: `rId${count++}`, + Type: XLSX.RelType.Theme, + Target: 'theme/theme1.xml' + }]; + if (model.sharedStrings.count) { + relationships.push({ + Id: `rId${count++}`, + Type: XLSX.RelType.SharedStrings, + Target: 'sharedStrings.xml' + }); + } + model.worksheets.forEach(worksheet => { + worksheet.rId = `rId${count++}`; + relationships.push({ + Id: worksheet.rId, + Type: XLSX.RelType.Worksheet, + Target: `worksheets/sheet${worksheet.id}.xml` + }); + }); + const xform = new RelationshipsXform(); + const xml = xform.toXml(relationships); + zip.append(xml, { + name: 'xl/_rels/workbook.xml.rels' + }); + } + async addSharedStrings(zip, model) { + if (model.sharedStrings && model.sharedStrings.count) { + zip.append(model.sharedStrings.xml, { + name: 'xl/sharedStrings.xml' + }); + } + } + async addStyles(zip, model) { + const { + xml + } = model.styles; + if (xml) { + zip.append(xml, { + name: 'xl/styles.xml' + }); + } + } + async addWorkbook(zip, model) { + const xform = new WorkbookXform(); + zip.append(xform.toXml(model), { + name: 'xl/workbook.xml' + }); + } + async addWorksheets(zip, model) { + // preparation phase + const worksheetXform = new WorksheetXform(); + const relationshipsXform = new RelationshipsXform(); + const commentsXform = new CommentsXform(); + const vmlNotesXform = new VmlNotesXform(); + + // write sheets + model.worksheets.forEach(worksheet => { + let xmlStream = new XmlStream(); + worksheetXform.render(xmlStream, worksheet); + zip.append(xmlStream.xml, { + name: `xl/worksheets/sheet${worksheet.id}.xml` + }); + if (worksheet.rels && worksheet.rels.length) { + xmlStream = new XmlStream(); + relationshipsXform.render(xmlStream, worksheet.rels); + zip.append(xmlStream.xml, { + name: `xl/worksheets/_rels/sheet${worksheet.id}.xml.rels` + }); + } + if (worksheet.comments.length > 0) { + xmlStream = new XmlStream(); + commentsXform.render(xmlStream, worksheet); + zip.append(xmlStream.xml, { + name: `xl/comments${worksheet.id}.xml` + }); + xmlStream = new XmlStream(); + vmlNotesXform.render(xmlStream, worksheet); + zip.append(xmlStream.xml, { + name: `xl/drawings/vmlDrawing${worksheet.id}.vml` + }); + } + }); + } + _finalize(zip) { + return new Promise((resolve, reject) => { + zip.on('finish', () => { + resolve(this); + }); + zip.on('error', reject); + zip.finalize(); + }); + } + prepareModel(model, options) { + // ensure following properties have sane values + model.creator = model.creator || 'ExcelJS'; + model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS'; + model.created = model.created || new Date(); + model.modified = model.modified || new Date(); + model.useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : true; + model.useStyles = options.useStyles !== undefined ? options.useStyles : true; + + // Manage the shared strings + model.sharedStrings = new SharedStringsXform(); + + // add a style manager to handle cell formats, fonts, etc. + model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock(); + + // prepare all of the things before the render + const workbookXform = new WorkbookXform(); + const worksheetXform = new WorksheetXform(); + workbookXform.prepare(model); + const worksheetOptions = { + sharedStrings: model.sharedStrings, + styles: model.styles, + date1904: model.properties.date1904, + drawingsCount: 0, + media: model.media + }; + worksheetOptions.drawings = model.drawings = []; + worksheetOptions.commentRefs = model.commentRefs = []; + let tableCount = 0; + model.tables = []; + model.worksheets.forEach(worksheet => { + // assign unique filenames to tables + worksheet.tables.forEach(table => { + tableCount++; + table.target = `table${tableCount}.xml`; + table.id = tableCount; + model.tables.push(table); + }); + worksheetXform.prepare(worksheet, worksheetOptions); + }); + + // TODO: workbook drawing list + } + + async write(stream, options) { + options = options || {}; + const { + model + } = this.workbook; + const zip = new ZipStream.ZipWriter(options.zip); + zip.pipe(stream); + this.prepareModel(model, options); + + // render + await this.addContentTypes(zip, model); + await this.addOfficeRels(zip, model); + await this.addWorkbookRels(zip, model); + await this.addWorksheets(zip, model); + await this.addSharedStrings(zip, model); // always after worksheets + await this.addDrawings(zip, model); + await this.addTables(zip, model); + await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]); + await this.addMedia(zip, model); + await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]); + await this.addWorkbook(zip, model); + return this._finalize(zip); + } + writeFile(filename, options) { + const stream = fs.createWriteStream(filename); + return new Promise((resolve, reject) => { + stream.on('finish', () => { + resolve(); + }); + stream.on('error', error => { + reject(error); + }); + this.write(stream, options).then(() => { + stream.end(); + }).catch(err => { + reject(err); + }); + }); + } + async writeBuffer(options) { + const stream = new StreamBuf(); + await this.write(stream, options); + return stream.read(); + } +} +XLSX.RelType = require('./rel-type'); +module.exports = XLSX; +//# sourceMappingURL=xlsx.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xlsx.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xlsx.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f4f095976d54f7ef7b1a936e278d0d7ba83f5c11 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xlsx.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xlsx.js","names":["fs","require","JSZip","PassThrough","ZipStream","StreamBuf","utils","XmlStream","bufferToString","StylesXform","CoreXform","SharedStringsXform","RelationshipsXform","ContentTypesXform","AppXform","WorkbookXform","WorksheetXform","DrawingXform","TableXform","CommentsXform","VmlNotesXform","theme1Xml","fsReadFileAsync","filename","options","Promise","resolve","reject","readFile","error","data","XLSX","constructor","workbook","exists","Error","stream","createReadStream","read","close","parseRels","xform","parseStream","parseWorkbook","parseSharedStrings","reconcile","model","workbookXform","worksheetXform","drawingXform","tableXform","drawingOptions","media","mediaIndex","Object","keys","drawings","forEach","name","drawing","drawingRel","drawingRels","rels","reduce","o","rel","Id","anchors","anchor","hyperlinks","picture","rId","hyperlink","Target","tableOptions","styles","values","tables","table","sheetOptions","sharedStrings","date1904","properties","comments","vmlDrawings","worksheets","worksheet","relationships","worksheetRels","sheetNo","worksheetHash","globalRels","workbookRels","sheetDefs","_processWorksheetEntry","path","push","_processCommentEntry","_processTableEntry","_processWorksheetRelsEntry","_processMediaEntry","entry","lastDot","lastIndexOf","extension","substr","streamBuf","on","length","medium","type","buffer","toBuffer","pipe","_processDrawingEntry","_processDrawingRelsEntry","_processVmlDrawingEntry","vmlDrawing","_processThemeEntry","themes","toString","createInputStream","Symbol","asyncIterator","chunks","chunk","load","Buffer","concat","base64","from","zip","loadAsync","files","dir","entryName","match","write","async","writableObjectMode","readableObjectMode","content","process","browser","chunkSize","i","substring","end","sheets","definedNames","views","calcProperties","appXform","appProperties","company","manager","coreXform","coreProperties","assign","addMedia","all","map","append","dataimg64","indexOf","addDrawings","relsXform","prepare","xml","toXml","addTables","tableXml","target","addContentTypes","addApp","addCore","addThemes","theme1","addOfficeRels","Type","RelType","OfficeDocument","CoreProperties","ExtenderProperties","addWorkbookRels","count","Styles","Theme","SharedStrings","Worksheet","id","addSharedStrings","addStyles","addWorkbook","addWorksheets","relationshipsXform","commentsXform","vmlNotesXform","xmlStream","render","_finalize","finalize","prepareModel","creator","lastModifiedBy","created","Date","modified","useSharedStrings","undefined","useStyles","Mock","worksheetOptions","drawingsCount","commentRefs","tableCount","ZipWriter","writeFile","createWriteStream","then","catch","err","writeBuffer","module","exports"],"sources":["../../../lib/xlsx/xlsx.js"],"sourcesContent":["const fs = require('fs');\nconst JSZip = require('jszip');\nconst {PassThrough} = require('readable-stream');\nconst ZipStream = require('../utils/zip-stream');\nconst StreamBuf = require('../utils/stream-buf');\n\nconst utils = require('../utils/utils');\nconst XmlStream = require('../utils/xml-stream');\nconst {bufferToString} = require('../utils/browser-buffer-decode');\n\nconst StylesXform = require('./xform/style/styles-xform');\n\nconst CoreXform = require('./xform/core/core-xform');\nconst SharedStringsXform = require('./xform/strings/shared-strings-xform');\nconst RelationshipsXform = require('./xform/core/relationships-xform');\nconst ContentTypesXform = require('./xform/core/content-types-xform');\nconst AppXform = require('./xform/core/app-xform');\nconst WorkbookXform = require('./xform/book/workbook-xform');\nconst WorksheetXform = require('./xform/sheet/worksheet-xform');\nconst DrawingXform = require('./xform/drawing/drawing-xform');\nconst TableXform = require('./xform/table/table-xform');\nconst CommentsXform = require('./xform/comment/comments-xform');\nconst VmlNotesXform = require('./xform/comment/vml-notes-xform');\n\nconst theme1Xml = require('./xml/theme1');\n\nfunction fsReadFileAsync(filename, options) {\n return new Promise((resolve, reject) => {\n fs.readFile(filename, options, (error, data) => {\n if (error) {\n reject(error);\n } else {\n resolve(data);\n }\n });\n });\n}\n\nclass XLSX {\n constructor(workbook) {\n this.workbook = workbook;\n }\n\n // ===============================================================================\n // Workbook\n // =========================================================================\n // Read\n\n async readFile(filename, options) {\n if (!(await utils.fs.exists(filename))) {\n throw new Error(`File not found: ${filename}`);\n }\n const stream = fs.createReadStream(filename);\n try {\n const workbook = await this.read(stream, options);\n stream.close();\n return workbook;\n } catch (error) {\n stream.close();\n throw error;\n }\n }\n\n parseRels(stream) {\n const xform = new RelationshipsXform();\n return xform.parseStream(stream);\n }\n\n parseWorkbook(stream) {\n const xform = new WorkbookXform();\n return xform.parseStream(stream);\n }\n\n parseSharedStrings(stream) {\n const xform = new SharedStringsXform();\n return xform.parseStream(stream);\n }\n\n reconcile(model, options) {\n const workbookXform = new WorkbookXform();\n const worksheetXform = new WorksheetXform(options);\n const drawingXform = new DrawingXform();\n const tableXform = new TableXform();\n\n workbookXform.reconcile(model);\n\n // reconcile drawings with their rels\n const drawingOptions = {\n media: model.media,\n mediaIndex: model.mediaIndex,\n };\n Object.keys(model.drawings).forEach(name => {\n const drawing = model.drawings[name];\n const drawingRel = model.drawingRels[name];\n if (drawingRel) {\n drawingOptions.rels = drawingRel.reduce((o, rel) => {\n o[rel.Id] = rel;\n return o;\n }, {});\n (drawing.anchors || []).forEach(anchor => {\n const hyperlinks = anchor.picture && anchor.picture.hyperlinks;\n if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) {\n hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target;\n delete hyperlinks.rId;\n }\n });\n drawingXform.reconcile(drawing, drawingOptions);\n }\n });\n\n // reconcile tables with the default styles\n const tableOptions = {\n styles: model.styles,\n };\n Object.values(model.tables).forEach(table => {\n tableXform.reconcile(table, tableOptions);\n });\n\n const sheetOptions = {\n styles: model.styles,\n sharedStrings: model.sharedStrings,\n media: model.media,\n mediaIndex: model.mediaIndex,\n date1904: model.properties && model.properties.date1904,\n drawings: model.drawings,\n comments: model.comments,\n tables: model.tables,\n vmlDrawings: model.vmlDrawings,\n };\n model.worksheets.forEach(worksheet => {\n worksheet.relationships = model.worksheetRels[worksheet.sheetNo];\n worksheetXform.reconcile(worksheet, sheetOptions);\n });\n\n // delete unnecessary parts\n delete model.worksheetHash;\n delete model.worksheetRels;\n delete model.globalRels;\n delete model.sharedStrings;\n delete model.workbookRels;\n delete model.sheetDefs;\n delete model.styles;\n delete model.mediaIndex;\n delete model.drawings;\n delete model.drawingRels;\n delete model.vmlDrawings;\n }\n\n async _processWorksheetEntry(stream, model, sheetNo, options, path) {\n const xform = new WorksheetXform(options);\n const worksheet = await xform.parseStream(stream);\n worksheet.sheetNo = sheetNo;\n model.worksheetHash[path] = worksheet;\n model.worksheets.push(worksheet);\n }\n\n async _processCommentEntry(stream, model, name) {\n const xform = new CommentsXform();\n const comments = await xform.parseStream(stream);\n model.comments[`../${name}.xml`] = comments;\n }\n\n async _processTableEntry(stream, model, name) {\n const xform = new TableXform();\n const table = await xform.parseStream(stream);\n model.tables[`../tables/${name}.xml`] = table;\n }\n\n async _processWorksheetRelsEntry(stream, model, sheetNo) {\n const xform = new RelationshipsXform();\n const relationships = await xform.parseStream(stream);\n model.worksheetRels[sheetNo] = relationships;\n }\n\n async _processMediaEntry(entry, model, filename) {\n const lastDot = filename.lastIndexOf('.');\n // if we can't determine extension, ignore it\n if (lastDot >= 1) {\n const extension = filename.substr(lastDot + 1);\n const name = filename.substr(0, lastDot);\n await new Promise((resolve, reject) => {\n const streamBuf = new StreamBuf();\n streamBuf.on('finish', () => {\n model.mediaIndex[filename] = model.media.length;\n model.mediaIndex[name] = model.media.length;\n const medium = {\n type: 'image',\n name,\n extension,\n buffer: streamBuf.toBuffer(),\n };\n model.media.push(medium);\n resolve();\n });\n entry.on('error', error => {\n reject(error);\n });\n entry.pipe(streamBuf);\n });\n }\n }\n\n async _processDrawingEntry(entry, model, name) {\n const xform = new DrawingXform();\n const drawing = await xform.parseStream(entry);\n model.drawings[name] = drawing;\n }\n\n async _processDrawingRelsEntry(entry, model, name) {\n const xform = new RelationshipsXform();\n const relationships = await xform.parseStream(entry);\n model.drawingRels[name] = relationships;\n }\n\n async _processVmlDrawingEntry(entry, model, name) {\n const xform = new VmlNotesXform();\n const vmlDrawing = await xform.parseStream(entry);\n model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing;\n }\n\n async _processThemeEntry(entry, model, name) {\n await new Promise((resolve, reject) => {\n // TODO: stream entry into buffer and store the xml in the model.themes[]\n const stream = new StreamBuf();\n entry.on('error', reject);\n stream.on('error', reject);\n stream.on('finish', () => {\n model.themes[name] = stream.read().toString();\n resolve();\n });\n entry.pipe(stream);\n });\n }\n\n /**\n * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\n */\n createInputStream() {\n throw new Error(\n '`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\n );\n }\n\n async read(stream, options) {\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old streams\n if (!stream[Symbol.asyncIterator] && stream.pipe) {\n stream = stream.pipe(new PassThrough());\n }\n const chunks = [];\n for await (const chunk of stream) {\n chunks.push(chunk);\n }\n return this.load(Buffer.concat(chunks), options);\n }\n\n async load(data, options) {\n let buffer;\n if (options && options.base64) {\n buffer = Buffer.from(data.toString(), 'base64');\n } else {\n buffer = data;\n }\n\n const model = {\n worksheets: [],\n worksheetHash: {},\n worksheetRels: [],\n themes: {},\n media: [],\n mediaIndex: {},\n drawings: {},\n drawingRels: {},\n comments: {},\n tables: {},\n vmlDrawings: {},\n };\n\n const zip = await JSZip.loadAsync(buffer);\n for (const entry of Object.values(zip.files)) {\n /* eslint-disable no-await-in-loop */\n if (!entry.dir) {\n let entryName = entry.name;\n if (entryName[0] === '/') {\n entryName = entryName.substr(1);\n }\n let stream;\n if (\n entryName.match(/xl\\/media\\//) ||\n // themes are not parsed as stream\n entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/)\n ) {\n stream = new PassThrough();\n stream.write(await entry.async('nodebuffer'));\n } else {\n // use object mode to avoid buffer-string convention\n stream = new PassThrough({\n writableObjectMode: true,\n readableObjectMode: true,\n });\n let content;\n // https://www.npmjs.com/package/process\n if (process.browser) {\n // running in browser, use TextDecoder if possible\n content = bufferToString(await entry.async('nodebuffer'));\n } else {\n // running in node.js\n content = await entry.async('string');\n }\n const chunkSize = 16 * 1024;\n for (let i = 0; i < content.length; i += chunkSize) {\n stream.write(content.substring(i, i + chunkSize));\n }\n }\n stream.end();\n switch (entryName) {\n case '_rels/.rels':\n model.globalRels = await this.parseRels(stream);\n break;\n\n case 'xl/workbook.xml': {\n const workbook = await this.parseWorkbook(stream);\n model.sheets = workbook.sheets;\n model.definedNames = workbook.definedNames;\n model.views = workbook.views;\n model.properties = workbook.properties;\n model.calcProperties = workbook.calcProperties;\n break;\n }\n\n case 'xl/_rels/workbook.xml.rels':\n model.workbookRels = await this.parseRels(stream);\n break;\n\n case 'xl/sharedStrings.xml':\n model.sharedStrings = new SharedStringsXform();\n await model.sharedStrings.parseStream(stream);\n break;\n\n case 'xl/styles.xml':\n model.styles = new StylesXform();\n await model.styles.parseStream(stream);\n break;\n\n case 'docProps/app.xml': {\n const appXform = new AppXform();\n const appProperties = await appXform.parseStream(stream);\n model.company = appProperties.company;\n model.manager = appProperties.manager;\n break;\n }\n\n case 'docProps/core.xml': {\n const coreXform = new CoreXform();\n const coreProperties = await coreXform.parseStream(stream);\n Object.assign(model, coreProperties);\n break;\n }\n\n default: {\n let match = entryName.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/);\n if (match) {\n await this._processWorksheetEntry(stream, model, match[1], options, entryName);\n break;\n }\n match = entryName.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/);\n if (match) {\n await this._processWorksheetRelsEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/);\n if (match) {\n await this._processThemeEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/media\\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/);\n if (match) {\n await this._processMediaEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/([a-zA-Z0-9]+)[.]xml/);\n if (match) {\n await this._processDrawingEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/(comments\\d+)[.]xml/);\n if (match) {\n await this._processCommentEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/tables\\/(table\\d+)[.]xml/);\n if (match) {\n await this._processTableEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/_rels\\/([a-zA-Z0-9]+)[.]xml[.]rels/);\n if (match) {\n await this._processDrawingRelsEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/(vmlDrawing\\d+)[.]vml/);\n if (match) {\n await this._processVmlDrawingEntry(stream, model, match[1]);\n break;\n }\n }\n }\n }\n }\n\n this.reconcile(model, options);\n\n // apply model\n this.workbook.model = model;\n return this.workbook;\n }\n\n // =========================================================================\n // Write\n\n async addMedia(zip, model) {\n await Promise.all(\n model.media.map(async medium => {\n if (medium.type === 'image') {\n const filename = `xl/media/${medium.name}.${medium.extension}`;\n if (medium.filename) {\n const data = await fsReadFileAsync(medium.filename);\n return zip.append(data, {name: filename});\n }\n if (medium.buffer) {\n return zip.append(medium.buffer, {name: filename});\n }\n if (medium.base64) {\n const dataimg64 = medium.base64;\n const content = dataimg64.substring(dataimg64.indexOf(',') + 1);\n return zip.append(content, {name: filename, base64: true});\n }\n }\n throw new Error('Unsupported media');\n })\n );\n }\n\n addDrawings(zip, model) {\n const drawingXform = new DrawingXform();\n const relsXform = new RelationshipsXform();\n\n model.worksheets.forEach(worksheet => {\n const {drawing} = worksheet;\n if (drawing) {\n drawingXform.prepare(drawing, {});\n let xml = drawingXform.toXml(drawing);\n zip.append(xml, {name: `xl/drawings/${drawing.name}.xml`});\n\n xml = relsXform.toXml(drawing.rels);\n zip.append(xml, {name: `xl/drawings/_rels/${drawing.name}.xml.rels`});\n }\n });\n }\n\n addTables(zip, model) {\n const tableXform = new TableXform();\n\n model.worksheets.forEach(worksheet => {\n const {tables} = worksheet;\n tables.forEach(table => {\n tableXform.prepare(table, {});\n const tableXml = tableXform.toXml(table);\n zip.append(tableXml, {name: `xl/tables/${table.target}`});\n });\n });\n }\n\n async addContentTypes(zip, model) {\n const xform = new ContentTypesXform();\n const xml = xform.toXml(model);\n zip.append(xml, {name: '[Content_Types].xml'});\n }\n\n async addApp(zip, model) {\n const xform = new AppXform();\n const xml = xform.toXml(model);\n zip.append(xml, {name: 'docProps/app.xml'});\n }\n\n async addCore(zip, model) {\n const coreXform = new CoreXform();\n zip.append(coreXform.toXml(model), {name: 'docProps/core.xml'});\n }\n\n async addThemes(zip, model) {\n const themes = model.themes || {theme1: theme1Xml};\n Object.keys(themes).forEach(name => {\n const xml = themes[name];\n const path = `xl/theme/${name}.xml`;\n zip.append(xml, {name: path});\n });\n }\n\n async addOfficeRels(zip) {\n const xform = new RelationshipsXform();\n const xml = xform.toXml([\n {Id: 'rId1', Type: XLSX.RelType.OfficeDocument, Target: 'xl/workbook.xml'},\n {Id: 'rId2', Type: XLSX.RelType.CoreProperties, Target: 'docProps/core.xml'},\n {Id: 'rId3', Type: XLSX.RelType.ExtenderProperties, Target: 'docProps/app.xml'},\n ]);\n zip.append(xml, {name: '_rels/.rels'});\n }\n\n async addWorkbookRels(zip, model) {\n let count = 1;\n const relationships = [\n {Id: `rId${count++}`, Type: XLSX.RelType.Styles, Target: 'styles.xml'},\n {Id: `rId${count++}`, Type: XLSX.RelType.Theme, Target: 'theme/theme1.xml'},\n ];\n if (model.sharedStrings.count) {\n relationships.push({\n Id: `rId${count++}`,\n Type: XLSX.RelType.SharedStrings,\n Target: 'sharedStrings.xml',\n });\n }\n model.worksheets.forEach(worksheet => {\n worksheet.rId = `rId${count++}`;\n relationships.push({\n Id: worksheet.rId,\n Type: XLSX.RelType.Worksheet,\n Target: `worksheets/sheet${worksheet.id}.xml`,\n });\n });\n const xform = new RelationshipsXform();\n const xml = xform.toXml(relationships);\n zip.append(xml, {name: 'xl/_rels/workbook.xml.rels'});\n }\n\n async addSharedStrings(zip, model) {\n if (model.sharedStrings && model.sharedStrings.count) {\n zip.append(model.sharedStrings.xml, {name: 'xl/sharedStrings.xml'});\n }\n }\n\n async addStyles(zip, model) {\n const {xml} = model.styles;\n if (xml) {\n zip.append(xml, {name: 'xl/styles.xml'});\n }\n }\n\n async addWorkbook(zip, model) {\n const xform = new WorkbookXform();\n zip.append(xform.toXml(model), {name: 'xl/workbook.xml'});\n }\n\n async addWorksheets(zip, model) {\n // preparation phase\n const worksheetXform = new WorksheetXform();\n const relationshipsXform = new RelationshipsXform();\n const commentsXform = new CommentsXform();\n const vmlNotesXform = new VmlNotesXform();\n\n // write sheets\n model.worksheets.forEach(worksheet => {\n let xmlStream = new XmlStream();\n worksheetXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/worksheets/sheet${worksheet.id}.xml`});\n\n if (worksheet.rels && worksheet.rels.length) {\n xmlStream = new XmlStream();\n relationshipsXform.render(xmlStream, worksheet.rels);\n zip.append(xmlStream.xml, {name: `xl/worksheets/_rels/sheet${worksheet.id}.xml.rels`});\n }\n\n if (worksheet.comments.length > 0) {\n xmlStream = new XmlStream();\n commentsXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/comments${worksheet.id}.xml`});\n\n xmlStream = new XmlStream();\n vmlNotesXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/drawings/vmlDrawing${worksheet.id}.vml`});\n }\n });\n }\n\n _finalize(zip) {\n return new Promise((resolve, reject) => {\n zip.on('finish', () => {\n resolve(this);\n });\n zip.on('error', reject);\n zip.finalize();\n });\n }\n\n prepareModel(model, options) {\n // ensure following properties have sane values\n model.creator = model.creator || 'ExcelJS';\n model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS';\n model.created = model.created || new Date();\n model.modified = model.modified || new Date();\n\n model.useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : true;\n model.useStyles = options.useStyles !== undefined ? options.useStyles : true;\n\n // Manage the shared strings\n model.sharedStrings = new SharedStringsXform();\n\n // add a style manager to handle cell formats, fonts, etc.\n model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock();\n\n // prepare all of the things before the render\n const workbookXform = new WorkbookXform();\n const worksheetXform = new WorksheetXform();\n\n workbookXform.prepare(model);\n\n const worksheetOptions = {\n sharedStrings: model.sharedStrings,\n styles: model.styles,\n date1904: model.properties.date1904,\n drawingsCount: 0,\n media: model.media,\n };\n worksheetOptions.drawings = model.drawings = [];\n worksheetOptions.commentRefs = model.commentRefs = [];\n let tableCount = 0;\n model.tables = [];\n model.worksheets.forEach(worksheet => {\n // assign unique filenames to tables\n worksheet.tables.forEach(table => {\n tableCount++;\n table.target = `table${tableCount}.xml`;\n table.id = tableCount;\n model.tables.push(table);\n });\n\n worksheetXform.prepare(worksheet, worksheetOptions);\n });\n\n // TODO: workbook drawing list\n }\n\n async write(stream, options) {\n options = options || {};\n const {model} = this.workbook;\n const zip = new ZipStream.ZipWriter(options.zip);\n zip.pipe(stream);\n\n this.prepareModel(model, options);\n\n // render\n await this.addContentTypes(zip, model);\n await this.addOfficeRels(zip, model);\n await this.addWorkbookRels(zip, model);\n await this.addWorksheets(zip, model);\n await this.addSharedStrings(zip, model); // always after worksheets\n await this.addDrawings(zip, model);\n await this.addTables(zip, model);\n await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]);\n await this.addMedia(zip, model);\n await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]);\n await this.addWorkbook(zip, model);\n return this._finalize(zip);\n }\n\n writeFile(filename, options) {\n const stream = fs.createWriteStream(filename);\n\n return new Promise((resolve, reject) => {\n stream.on('finish', () => {\n resolve();\n });\n stream.on('error', error => {\n reject(error);\n });\n\n this.write(stream, options).then(() => {\n stream.end();\n }).catch(err=>{\n reject(err);\n });\n });\n }\n\n async writeBuffer(options) {\n const stream = new StreamBuf();\n await this.write(stream, options);\n return stream.read();\n }\n}\n\nXLSX.RelType = require('./rel-type');\n\nmodule.exports = XLSX;\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js b/node_backend/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js new file mode 100644 index 0000000000000000000000000000000000000000..25b0adaa784bdd2f786fd2a3202d87eaa445baad --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js @@ -0,0 +1,5 @@ +"use strict"; + +/* eslint-disable */ +module.exports = '\n '; +//# sourceMappingURL=theme1.js.map diff --git a/node_backend/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js.map b/node_backend/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js.map new file mode 100644 index 0000000000000000000000000000000000000000..f2802300a45ec2e45021a389cd8e4c62013d0f0c --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js.map @@ -0,0 +1 @@ +{"version":3,"file":"theme1.js","names":["module","exports"],"sources":["../../../../lib/xlsx/xml/theme1.js"],"sourcesContent":["/* eslint-disable */\nmodule.exports =\n '\\n ';\n"],"mappings":";;AAAA;AACAA,MAAM,CAACC,OAAO,GACZ,wtPAAwtP"} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/exceljs.bare.js b/node_backend/node_modules/exceljs/dist/exceljs.bare.js new file mode 100644 index 0000000000000000000000000000000000000000..cbca4960becb7bd5d6c43a17457c4159df5cb6d6 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/exceljs.bare.js @@ -0,0 +1,55253 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ExcelJS = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i { + const worksheet = this.workbook.addWorksheet(options.sheetName); + const dateFormats = options.dateFormats || ['YYYY-MM-DD[T]HH:mm:ssZ', 'YYYY-MM-DD[T]HH:mm:ss', 'MM-DD-YYYY', 'YYYY-MM-DD']; + const map = options.map || function (datum) { + if (datum === '') { + return null; + } + const datumNumber = Number(datum); + if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) { + return datumNumber; + } + const dt = dateFormats.reduce((matchingDate, currentDateFormat) => { + if (matchingDate) { + return matchingDate; + } + const dayjsObj = dayjs(datum, currentDateFormat, true); + if (dayjsObj.isValid()) { + return dayjsObj; + } + return null; + }, null); + if (dt) { + return new Date(dt.valueOf()); + } + const special = SpecialValues[datum]; + if (special !== undefined) { + return special; + } + return datum; + }; + const csvStream = fastCsv.parse(options.parserOptions).on('data', data => { + worksheet.addRow(data.map(map)); + }).on('end', () => { + csvStream.emit('worksheet', worksheet); + }); + csvStream.on('worksheet', resolve).on('error', reject); + stream.pipe(csvStream); + }); + } + + /** + * @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md + */ + createInputStream() { + throw new Error('`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'); + } + write(stream, options) { + return new Promise((resolve, reject) => { + options = options || {}; + // const encoding = options.encoding || 'utf8'; + // const separator = options.separator || ','; + // const quoteChar = options.quoteChar || '\''; + + const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId); + const csvStream = fastCsv.format(options.formatterOptions); + stream.on('finish', () => { + resolve(); + }); + csvStream.on('error', reject); + csvStream.pipe(stream); + const { + dateFormat, + dateUTC + } = options; + const map = options.map || (value => { + if (value) { + if (value.text || value.hyperlink) { + return value.hyperlink || value.text || ''; + } + if (value.formula || value.result) { + return value.result || ''; + } + if (value instanceof Date) { + if (dateFormat) { + return dateUTC ? dayjs.utc(value).format(dateFormat) : dayjs(value).format(dateFormat); + } + return dateUTC ? dayjs.utc(value).format() : dayjs(value).format(); + } + if (value.error) { + return value.error; + } + if (typeof value === 'object') { + return JSON.stringify(value); + } + } + return value; + }); + const includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows; + let lastRow = 1; + if (worksheet) { + worksheet.eachRow((row, rowNumber) => { + if (includeEmptyRows) { + while (lastRow++ < rowNumber - 1) { + csvStream.write([]); + } + } + const { + values + } = row; + values.shift(); + csvStream.write(values.map(map)); + lastRow = rowNumber; + }); + } + csvStream.end(); + }); + } + writeFile(filename, options) { + options = options || {}; + const streamOptions = { + encoding: options.encoding || 'utf8' + }; + const stream = fs.createWriteStream(filename, streamOptions); + return this.write(stream, options); + } + async writeBuffer(options) { + const stream = new StreamBuf(); + await this.write(stream, options); + return stream.read(); + } +} +module.exports = CSV; + +},{"../utils/stream-buf":24,"../utils/utils":27,"dayjs":230,"dayjs/plugin/customParseFormat":231,"dayjs/plugin/utc":232,"fast-csv":263,"fs":216}],2:[function(require,module,exports){ +'use strict'; + +const colCache = require('../utils/col-cache'); +class Anchor { + constructor(worksheet, address) { + let offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + this.worksheet = worksheet; + if (!address) { + this.nativeCol = 0; + this.nativeColOff = 0; + this.nativeRow = 0; + this.nativeRowOff = 0; + } else if (typeof address === 'string') { + const decoded = colCache.decodeAddress(address); + this.nativeCol = decoded.col + offset; + this.nativeColOff = 0; + this.nativeRow = decoded.row + offset; + this.nativeRowOff = 0; + } else if (address.nativeCol !== undefined) { + this.nativeCol = address.nativeCol || 0; + this.nativeColOff = address.nativeColOff || 0; + this.nativeRow = address.nativeRow || 0; + this.nativeRowOff = address.nativeRowOff || 0; + } else if (address.col !== undefined) { + this.col = address.col + offset; + this.row = address.row + offset; + } else { + this.nativeCol = 0; + this.nativeColOff = 0; + this.nativeRow = 0; + this.nativeRowOff = 0; + } + } + static asInstance(model) { + return model instanceof Anchor || model == null ? model : new Anchor(model); + } + get col() { + return this.nativeCol + Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth; + } + set col(v) { + this.nativeCol = Math.floor(v); + this.nativeColOff = Math.floor((v - this.nativeCol) * this.colWidth); + } + get row() { + return this.nativeRow + Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight; + } + set row(v) { + this.nativeRow = Math.floor(v); + this.nativeRowOff = Math.floor((v - this.nativeRow) * this.rowHeight); + } + get colWidth() { + return this.worksheet && this.worksheet.getColumn(this.nativeCol + 1) && this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth ? Math.floor(this.worksheet.getColumn(this.nativeCol + 1).width * 10000) : 640000; + } + get rowHeight() { + return this.worksheet && this.worksheet.getRow(this.nativeRow + 1) && this.worksheet.getRow(this.nativeRow + 1).height ? Math.floor(this.worksheet.getRow(this.nativeRow + 1).height * 10000) : 180000; + } + get model() { + return { + nativeCol: this.nativeCol, + nativeColOff: this.nativeColOff, + nativeRow: this.nativeRow, + nativeRowOff: this.nativeRowOff + }; + } + set model(value) { + this.nativeCol = value.nativeCol; + this.nativeColOff = value.nativeColOff; + this.nativeRow = value.nativeRow; + this.nativeRowOff = value.nativeRowOff; + } +} +module.exports = Anchor; + +},{"../utils/col-cache":19}],3:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const colCache = require('../utils/col-cache'); +const _ = require('../utils/under-dash'); +const Enums = require('./enums'); +const { + slideFormula +} = require('../utils/shared-formula'); +const Note = require('./note'); +// Cell requirements +// Operate inside a worksheet +// Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc. +// Manage/use and manipulate cell format either as local to cell or inherited from column or row. + +class Cell { + constructor(row, column, address) { + if (!row || !column) { + throw new Error('A Cell needs a Row'); + } + this._row = row; + this._column = column; + colCache.validateAddress(address); + this._address = address; + + // TODO: lazy evaluation of this._value + this._value = Value.create(Cell.Types.Null, this); + this.style = this._mergeStyle(row.style, column.style, {}); + this._mergeCount = 0; + } + get worksheet() { + return this._row.worksheet; + } + get workbook() { + return this._row.worksheet.workbook; + } + + // help GC by removing cyclic (and other) references + destroy() { + delete this.style; + delete this._value; + delete this._row; + delete this._column; + delete this._address; + } + + // ========================================================================= + // Styles stuff + get numFmt() { + return this.style.numFmt; + } + set numFmt(value) { + this.style.numFmt = value; + } + get font() { + return this.style.font; + } + set font(value) { + this.style.font = value; + } + get alignment() { + return this.style.alignment; + } + set alignment(value) { + this.style.alignment = value; + } + get border() { + return this.style.border; + } + set border(value) { + this.style.border = value; + } + get fill() { + return this.style.fill; + } + set fill(value) { + this.style.fill = value; + } + get protection() { + return this.style.protection; + } + set protection(value) { + this.style.protection = value; + } + _mergeStyle(rowStyle, colStyle, style) { + const numFmt = rowStyle && rowStyle.numFmt || colStyle && colStyle.numFmt; + if (numFmt) style.numFmt = numFmt; + const font = rowStyle && rowStyle.font || colStyle && colStyle.font; + if (font) style.font = font; + const alignment = rowStyle && rowStyle.alignment || colStyle && colStyle.alignment; + if (alignment) style.alignment = alignment; + const border = rowStyle && rowStyle.border || colStyle && colStyle.border; + if (border) style.border = border; + const fill = rowStyle && rowStyle.fill || colStyle && colStyle.fill; + if (fill) style.fill = fill; + const protection = rowStyle && rowStyle.protection || colStyle && colStyle.protection; + if (protection) style.protection = protection; + return style; + } + + // ========================================================================= + // return the address for this cell + get address() { + return this._address; + } + get row() { + return this._row.number; + } + get col() { + return this._column.number; + } + get $col$row() { + return `$${this._column.letter}$${this.row}`; + } + + // ========================================================================= + // Value stuff + + get type() { + return this._value.type; + } + get effectiveType() { + return this._value.effectiveType; + } + toCsvString() { + return this._value.toCsvString(); + } + + // ========================================================================= + // Merge stuff + + addMergeRef() { + this._mergeCount++; + } + releaseMergeRef() { + this._mergeCount--; + } + get isMerged() { + return this._mergeCount > 0 || this.type === Cell.Types.Merge; + } + merge(master, ignoreStyle) { + this._value.release(); + this._value = Value.create(Cell.Types.Merge, this, master); + if (!ignoreStyle) { + this.style = master.style; + } + } + unmerge() { + if (this.type === Cell.Types.Merge) { + this._value.release(); + this._value = Value.create(Cell.Types.Null, this); + this.style = this._mergeStyle(this._row.style, this._column.style, {}); + } + } + isMergedTo(master) { + if (this._value.type !== Cell.Types.Merge) return false; + return this._value.isMergedTo(master); + } + get master() { + if (this.type === Cell.Types.Merge) { + return this._value.master; + } + return this; // an unmerged cell is its own master + } + + get isHyperlink() { + return this._value.type === Cell.Types.Hyperlink; + } + get hyperlink() { + return this._value.hyperlink; + } + + // return the value + get value() { + return this._value.value; + } + + // set the value - can be number, string or raw + set value(v) { + // special case - merge cells set their master's value + if (this.type === Cell.Types.Merge) { + this._value.master.value = v; + return; + } + this._value.release(); + + // assign value + this._value = Value.create(Value.getType(v), this, v); + } + get note() { + return this._comment && this._comment.note; + } + set note(note) { + this._comment = new Note(note); + } + get text() { + return this._value.toString(); + } + get html() { + return _.escapeHtml(this.text); + } + toString() { + return this.text; + } + _upgradeToHyperlink(hyperlink) { + // if this cell is a string, turn it into a Hyperlink + if (this.type === Cell.Types.String) { + this._value = Value.create(Cell.Types.Hyperlink, this, { + text: this._value.value, + hyperlink + }); + } + } + + // ========================================================================= + // Formula stuff + get formula() { + return this._value.formula; + } + get result() { + return this._value.result; + } + get formulaType() { + return this._value.formulaType; + } + + // ========================================================================= + // Name stuff + get fullAddress() { + const { + worksheet + } = this._row; + return { + sheetName: worksheet.name, + address: this.address, + row: this.row, + col: this.col + }; + } + get name() { + return this.names[0]; + } + set name(value) { + this.names = [value]; + } + get names() { + return this.workbook.definedNames.getNamesEx(this.fullAddress); + } + set names(value) { + const { + definedNames + } = this.workbook; + definedNames.removeAllNames(this.fullAddress); + value.forEach(name => { + definedNames.addEx(this.fullAddress, name); + }); + } + addName(name) { + this.workbook.definedNames.addEx(this.fullAddress, name); + } + removeName(name) { + this.workbook.definedNames.removeEx(this.fullAddress, name); + } + removeAllNames() { + this.workbook.definedNames.removeAllNames(this.fullAddress); + } + + // ========================================================================= + // Data Validation stuff + get _dataValidations() { + return this.worksheet.dataValidations; + } + get dataValidation() { + return this._dataValidations.find(this.address); + } + set dataValidation(value) { + this._dataValidations.add(this.address, value); + } + + // ========================================================================= + // Model stuff + + get model() { + const { + model + } = this._value; + model.style = this.style; + if (this._comment) { + model.comment = this._comment.model; + } + return model; + } + set model(value) { + this._value.release(); + this._value = Value.create(value.type, this); + this._value.model = value; + if (value.comment) { + switch (value.comment.type) { + case 'note': + this._comment = Note.fromModel(value.comment); + break; + } + } + if (value.style) { + this.style = value.style; + } else { + this.style = {}; + } + } +} +Cell.Types = Enums.ValueType; + +// ============================================================================= +// Internal Value Types + +class NullValue { + constructor(cell) { + this.model = { + address: cell.address, + type: Cell.Types.Null + }; + } + get value() { + return null; + } + set value(value) { + // nothing to do + } + get type() { + return Cell.Types.Null; + } + get effectiveType() { + return Cell.Types.Null; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return ''; + } + release() {} + toString() { + return ''; + } +} +class NumberValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Number, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Number; + } + get effectiveType() { + return Cell.Types.Number; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value.toString(); + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class StringValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.String, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.String; + } + get effectiveType() { + return Cell.Types.String; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return `"${this.model.value.replace(/"/g, '""')}"`; + } + release() {} + toString() { + return this.model.value; + } +} +class RichTextValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.String, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + toString() { + return this.model.value.richText.map(t => t.text).join(''); + } + get type() { + return Cell.Types.RichText; + } + get effectiveType() { + return Cell.Types.RichText; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return `"${this.text.replace(/"/g, '""')}"`; + } + release() {} +} +class DateValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Date, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Date; + } + get effectiveType() { + return Cell.Types.Date; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value.toISOString(); + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class HyperlinkValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Hyperlink, + text: value ? value.text : undefined, + hyperlink: value ? value.hyperlink : undefined + }; + if (value && value.tooltip) { + this.model.tooltip = value.tooltip; + } + } + get value() { + const v = { + text: this.model.text, + hyperlink: this.model.hyperlink + }; + if (this.model.tooltip) { + v.tooltip = this.model.tooltip; + } + return v; + } + set value(value) { + this.model = { + text: value.text, + hyperlink: value.hyperlink + }; + if (value.tooltip) { + this.model.tooltip = value.tooltip; + } + } + get text() { + return this.model.text; + } + set text(value) { + this.model.text = value; + } + + /* + get tooltip() { + return this.model.tooltip; + } + set tooltip(value) { + this.model.tooltip = value; + } */ + + get hyperlink() { + return this.model.hyperlink; + } + set hyperlink(value) { + this.model.hyperlink = value; + } + get type() { + return Cell.Types.Hyperlink; + } + get effectiveType() { + return Cell.Types.Hyperlink; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.hyperlink; + } + release() {} + toString() { + return this.model.text; + } +} +class MergeValue { + constructor(cell, master) { + this.model = { + address: cell.address, + type: Cell.Types.Merge, + master: master ? master.address : undefined + }; + this._master = master; + if (master) { + master.addMergeRef(); + } + } + get value() { + return this._master.value; + } + set value(value) { + if (value instanceof Cell) { + if (this._master) { + this._master.releaseMergeRef(); + } + value.addMergeRef(); + this._master = value; + } else { + this._master.value = value; + } + } + isMergedTo(master) { + return master === this._master; + } + get master() { + return this._master; + } + get type() { + return Cell.Types.Merge; + } + get effectiveType() { + return this._master.effectiveType; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return ''; + } + release() { + this._master.releaseMergeRef(); + } + toString() { + return this.value.toString(); + } +} +class FormulaValue { + constructor(cell, value) { + this.cell = cell; + this.model = { + address: cell.address, + type: Cell.Types.Formula, + shareType: value ? value.shareType : undefined, + ref: value ? value.ref : undefined, + formula: value ? value.formula : undefined, + sharedFormula: value ? value.sharedFormula : undefined, + result: value ? value.result : undefined + }; + } + _copyModel(model) { + const copy = {}; + const cp = name => { + const value = model[name]; + if (value) { + copy[name] = value; + } + }; + cp('formula'); + cp('result'); + cp('ref'); + cp('shareType'); + cp('sharedFormula'); + return copy; + } + get value() { + return this._copyModel(this.model); + } + set value(value) { + this.model = this._copyModel(value); + } + validate(value) { + switch (Value.getType(value)) { + case Cell.Types.Null: + case Cell.Types.String: + case Cell.Types.Number: + case Cell.Types.Date: + break; + case Cell.Types.Hyperlink: + case Cell.Types.Formula: + default: + throw new Error('Cannot process that type of result value'); + } + } + get dependencies() { + // find all the ranges and cells mentioned in the formula + const ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g); + const cells = this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g, '').match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g); + return { + ranges, + cells + }; + } + get formula() { + return this.model.formula || this._getTranslatedFormula(); + } + set formula(value) { + this.model.formula = value; + } + get formulaType() { + if (this.model.formula) { + return Enums.FormulaType.Master; + } + if (this.model.sharedFormula) { + return Enums.FormulaType.Shared; + } + return Enums.FormulaType.None; + } + get result() { + return this.model.result; + } + set result(value) { + this.model.result = value; + } + get type() { + return Cell.Types.Formula; + } + get effectiveType() { + const v = this.model.result; + if (v === null || v === undefined) { + return Enums.ValueType.Null; + } + if (v instanceof String || typeof v === 'string') { + return Enums.ValueType.String; + } + if (typeof v === 'number') { + return Enums.ValueType.Number; + } + if (v instanceof Date) { + return Enums.ValueType.Date; + } + if (v.text && v.hyperlink) { + return Enums.ValueType.Hyperlink; + } + if (v.formula) { + return Enums.ValueType.Formula; + } + return Enums.ValueType.Null; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + _getTranslatedFormula() { + if (!this._translatedFormula && this.model.sharedFormula) { + const { + worksheet + } = this.cell; + const master = worksheet.findCell(this.model.sharedFormula); + this._translatedFormula = master && slideFormula(master.formula, master.address, this.model.address); + } + return this._translatedFormula; + } + toCsvString() { + return `${this.model.result || ''}`; + } + release() {} + toString() { + return this.model.result ? this.model.result.toString() : ''; + } +} +class SharedStringValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.SharedString, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.SharedString; + } + get effectiveType() { + return Cell.Types.SharedString; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value.toString(); + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class BooleanValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Boolean, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Boolean; + } + get effectiveType() { + return Cell.Types.Boolean; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value ? 1 : 0; + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class ErrorValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Error, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Error; + } + get effectiveType() { + return Cell.Types.Error; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.toString(); + } + release() {} + toString() { + return this.model.value.error.toString(); + } +} +class JSONValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.String, + value: JSON.stringify(value), + rawValue: value + }; + } + get value() { + return this.model.rawValue; + } + set value(value) { + this.model.rawValue = value; + this.model.value = JSON.stringify(value); + } + get type() { + return Cell.Types.String; + } + get effectiveType() { + return Cell.Types.String; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value; + } + release() {} + toString() { + return this.model.value; + } +} + +// Value is a place to hold common static Value type functions +const Value = { + getType(value) { + if (value === null || value === undefined) { + return Cell.Types.Null; + } + if (value instanceof String || typeof value === 'string') { + return Cell.Types.String; + } + if (typeof value === 'number') { + return Cell.Types.Number; + } + if (typeof value === 'boolean') { + return Cell.Types.Boolean; + } + if (value instanceof Date) { + return Cell.Types.Date; + } + if (value.text && value.hyperlink) { + return Cell.Types.Hyperlink; + } + if (value.formula || value.sharedFormula) { + return Cell.Types.Formula; + } + if (value.richText) { + return Cell.Types.RichText; + } + if (value.sharedString) { + return Cell.Types.SharedString; + } + if (value.error) { + return Cell.Types.Error; + } + return Cell.Types.JSON; + }, + // map valueType to constructor + types: [{ + t: Cell.Types.Null, + f: NullValue + }, { + t: Cell.Types.Number, + f: NumberValue + }, { + t: Cell.Types.String, + f: StringValue + }, { + t: Cell.Types.Date, + f: DateValue + }, { + t: Cell.Types.Hyperlink, + f: HyperlinkValue + }, { + t: Cell.Types.Formula, + f: FormulaValue + }, { + t: Cell.Types.Merge, + f: MergeValue + }, { + t: Cell.Types.JSON, + f: JSONValue + }, { + t: Cell.Types.SharedString, + f: SharedStringValue + }, { + t: Cell.Types.RichText, + f: RichTextValue + }, { + t: Cell.Types.Boolean, + f: BooleanValue + }, { + t: Cell.Types.Error, + f: ErrorValue + }].reduce((p, t) => { + p[t.t] = t.f; + return p; + }, []), + create(type, cell, value) { + const T = this.types[type]; + if (!T) { + throw new Error(`Could not create Value of type ${type}`); + } + return new T(cell, value); + } +}; +module.exports = Cell; + +},{"../utils/col-cache":19,"../utils/shared-formula":23,"../utils/under-dash":26,"./enums":7,"./note":9}],4:[function(require,module,exports){ +'use strict'; + +const _ = require('../utils/under-dash'); +const Enums = require('./enums'); +const colCache = require('../utils/col-cache'); +const DEFAULT_COLUMN_WIDTH = 9; + +// Column defines the column properties for 1 column. +// This includes header rows, widths, key, (style), etc. +// Worksheet will condense the columns as appropriate during serialization +class Column { + constructor(worksheet, number, defn) { + this._worksheet = worksheet; + this._number = number; + if (defn !== false) { + // sometimes defn will follow + this.defn = defn; + } + } + get number() { + return this._number; + } + get worksheet() { + return this._worksheet; + } + get letter() { + return colCache.n2l(this._number); + } + get isCustomWidth() { + return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH; + } + get defn() { + return { + header: this._header, + key: this.key, + width: this.width, + style: this.style, + hidden: this.hidden, + outlineLevel: this.outlineLevel + }; + } + set defn(value) { + if (value) { + this.key = value.key; + this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH; + this.outlineLevel = value.outlineLevel; + if (value.style) { + this.style = value.style; + } else { + this.style = {}; + } + + // headers must be set after style + this.header = value.header; + this._hidden = !!value.hidden; + } else { + delete this._header; + delete this._key; + delete this.width; + this.style = {}; + this.outlineLevel = 0; + } + } + get headers() { + return this._header && this._header instanceof Array ? this._header : [this._header]; + } + get header() { + return this._header; + } + set header(value) { + if (value !== undefined) { + this._header = value; + this.headers.forEach((text, index) => { + this._worksheet.getCell(index + 1, this.number).value = text; + }); + } else { + this._header = undefined; + } + } + get key() { + return this._key; + } + set key(value) { + const column = this._key && this._worksheet.getColumnKey(this._key); + if (column === this) { + this._worksheet.deleteColumnKey(this._key); + } + this._key = value; + if (value) { + this._worksheet.setColumnKey(this._key, this); + } + } + get hidden() { + return !!this._hidden; + } + set hidden(value) { + this._hidden = value; + } + get outlineLevel() { + return this._outlineLevel || 0; + } + set outlineLevel(value) { + this._outlineLevel = value; + } + get collapsed() { + return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol); + } + toString() { + return JSON.stringify({ + key: this.key, + width: this.width, + headers: this.headers.length ? this.headers : undefined + }); + } + equivalentTo(other) { + return this.width === other.width && this.hidden === other.hidden && this.outlineLevel === other.outlineLevel && _.isEqual(this.style, other.style); + } + get isDefault() { + if (this.isCustomWidth) { + return false; + } + if (this.hidden) { + return false; + } + if (this.outlineLevel) { + return false; + } + const s = this.style; + if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) { + return false; + } + return true; + } + get headerCount() { + return this.headers.length; + } + eachCell(options, iteratee) { + const colNumber = this.number; + if (!iteratee) { + iteratee = options; + options = null; + } + this._worksheet.eachRow(options, (row, rowNumber) => { + iteratee(row.getCell(colNumber), rowNumber); + }); + } + get values() { + const v = []; + this.eachCell((cell, rowNumber) => { + if (cell && cell.type !== Enums.ValueType.Null) { + v[rowNumber] = cell.value; + } + }); + return v; + } + set values(v) { + if (!v) { + return; + } + const colNumber = this.number; + let offset = 0; + if (v.hasOwnProperty('0')) { + // assume contiguous array, start at row 1 + offset = 1; + } + v.forEach((value, index) => { + this._worksheet.getCell(index + offset, colNumber).value = value; + }); + } + + // ========================================================================= + // styles + _applyStyle(name, value) { + this.style[name] = value; + this.eachCell(cell => { + cell[name] = value; + }); + return value; + } + get numFmt() { + return this.style.numFmt; + } + set numFmt(value) { + this._applyStyle('numFmt', value); + } + get font() { + return this.style.font; + } + set font(value) { + this._applyStyle('font', value); + } + get alignment() { + return this.style.alignment; + } + set alignment(value) { + this._applyStyle('alignment', value); + } + get protection() { + return this.style.protection; + } + set protection(value) { + this._applyStyle('protection', value); + } + get border() { + return this.style.border; + } + set border(value) { + this._applyStyle('border', value); + } + get fill() { + return this.style.fill; + } + set fill(value) { + this._applyStyle('fill', value); + } + + // ============================================================================= + // static functions + + static toModel(columns) { + // Convert array of Column into compressed list cols + const cols = []; + let col = null; + if (columns) { + columns.forEach((column, index) => { + if (column.isDefault) { + if (col) { + col = null; + } + } else if (!col || !column.equivalentTo(col)) { + col = { + min: index + 1, + max: index + 1, + width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH, + style: column.style, + isCustomWidth: column.isCustomWidth, + hidden: column.hidden, + outlineLevel: column.outlineLevel, + collapsed: column.collapsed + }; + cols.push(col); + } else { + col.max = index + 1; + } + }); + } + return cols.length ? cols : undefined; + } + static fromModel(worksheet, cols) { + cols = cols || []; + const columns = []; + let count = 1; + let index = 0; + /** + * sort cols by min + * If it is not sorted, the subsequent column configuration will be overwritten + * */ + cols = cols.sort(function (pre, next) { + return pre.min - next.min; + }); + while (index < cols.length) { + const col = cols[index++]; + while (count < col.min) { + columns.push(new Column(worksheet, count++)); + } + while (count <= col.max) { + columns.push(new Column(worksheet, count++, col)); + } + } + return columns.length ? columns : null; + } +} +module.exports = Column; + +},{"../utils/col-cache":19,"../utils/under-dash":26,"./enums":7}],5:[function(require,module,exports){ +"use strict"; + +class DataValidations { + constructor(model) { + this.model = model || {}; + } + add(address, validation) { + return this.model[address] = validation; + } + find(address) { + return this.model[address]; + } + remove(address) { + this.model[address] = undefined; + } +} +module.exports = DataValidations; + +},{}],6:[function(require,module,exports){ +'use strict'; + +const _ = require('../utils/under-dash'); +const colCache = require('../utils/col-cache'); +const CellMatrix = require('../utils/cell-matrix'); +const Range = require('./range'); +const rangeRegexp = /[$](\w+)[$](\d+)(:[$](\w+)[$](\d+))?/; +class DefinedNames { + constructor() { + this.matrixMap = {}; + } + getMatrix(name) { + const matrix = this.matrixMap[name] || (this.matrixMap[name] = new CellMatrix()); + return matrix; + } + + // add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2 + add(locStr, name) { + const location = colCache.decodeEx(locStr); + this.addEx(location, name); + } + addEx(location, name) { + const matrix = this.getMatrix(name); + if (location.top) { + for (let col = location.left; col <= location.right; col++) { + for (let row = location.top; row <= location.bottom; row++) { + const address = { + sheetName: location.sheetName, + address: colCache.n2l(col) + row, + row, + col + }; + matrix.addCellEx(address); + } + } + } else { + matrix.addCellEx(location); + } + } + remove(locStr, name) { + const location = colCache.decodeEx(locStr); + this.removeEx(location, name); + } + removeEx(location, name) { + const matrix = this.getMatrix(name); + matrix.removeCellEx(location); + } + removeAllNames(location) { + _.each(this.matrixMap, matrix => { + matrix.removeCellEx(location); + }); + } + forEach(callback) { + _.each(this.matrixMap, (matrix, name) => { + matrix.forEach(cell => { + callback(name, cell); + }); + }); + } + + // get all the names of a cell + getNames(addressStr) { + return this.getNamesEx(colCache.decodeEx(addressStr)); + } + getNamesEx(address) { + return _.map(this.matrixMap, (matrix, name) => matrix.findCellEx(address) && name).filter(Boolean); + } + _explore(matrix, cell) { + cell.mark = false; + const { + sheetName + } = cell; + const range = new Range(cell.row, cell.col, cell.row, cell.col, sheetName); + let x; + let y; + + // grow vertical - only one col to worry about + function vGrow(yy, edge) { + const c = matrix.findCellAt(sheetName, yy, cell.col); + if (!c || !c.mark) { + return false; + } + range[edge] = yy; + c.mark = false; + return true; + } + for (y = cell.row - 1; vGrow(y, 'top'); y--); + for (y = cell.row + 1; vGrow(y, 'bottom'); y++); + + // grow horizontal - ensure all rows can grow + function hGrow(xx, edge) { + const cells = []; + for (y = range.top; y <= range.bottom; y++) { + const c = matrix.findCellAt(sheetName, y, xx); + if (c && c.mark) { + cells.push(c); + } else { + return false; + } + } + range[edge] = xx; + for (let i = 0; i < cells.length; i++) { + cells[i].mark = false; + } + return true; + } + for (x = cell.col - 1; hGrow(x, 'left'); x--); + for (x = cell.col + 1; hGrow(x, 'right'); x++); + return range; + } + getRanges(name, matrix) { + matrix = matrix || this.matrixMap[name]; + if (!matrix) { + return { + name, + ranges: [] + }; + } + + // mark and sweep! + matrix.forEach(cell => { + cell.mark = true; + }); + const ranges = matrix.map(cell => cell.mark && this._explore(matrix, cell)).filter(Boolean).map(range => range.$shortRange); + return { + name, + ranges + }; + } + normaliseMatrix(matrix, sheetName) { + // some of the cells might have shifted on specified sheet + // need to reassign rows, cols + matrix.forEachInSheet(sheetName, (cell, row, col) => { + if (cell) { + if (cell.row !== row || cell.col !== col) { + cell.row = row; + cell.col = col; + cell.address = colCache.n2l(col) + row; + } + } + }); + } + spliceRows(sheetName, start, numDelete, numInsert) { + _.each(this.matrixMap, matrix => { + matrix.spliceRows(sheetName, start, numDelete, numInsert); + this.normaliseMatrix(matrix, sheetName); + }); + } + spliceColumns(sheetName, start, numDelete, numInsert) { + _.each(this.matrixMap, matrix => { + matrix.spliceColumns(sheetName, start, numDelete, numInsert); + this.normaliseMatrix(matrix, sheetName); + }); + } + get model() { + // To get names per cell - just iterate over all names finding cells if they exist + return _.map(this.matrixMap, (matrix, name) => this.getRanges(name, matrix)).filter(definedName => definedName.ranges.length); + } + set model(value) { + // value is [ { name, ranges }, ... ] + const matrixMap = this.matrixMap = {}; + value.forEach(definedName => { + const matrix = matrixMap[definedName.name] = new CellMatrix(); + definedName.ranges.forEach(rangeStr => { + if (rangeRegexp.test(rangeStr.split('!').pop() || '')) { + matrix.addCell(rangeStr); + } + }); + }); + } +} +module.exports = DefinedNames; + +},{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":26,"./range":10}],7:[function(require,module,exports){ +'use strict'; + +module.exports = { + ValueType: { + Null: 0, + Merge: 1, + Number: 2, + String: 3, + Date: 4, + Hyperlink: 5, + Formula: 6, + SharedString: 7, + RichText: 8, + Boolean: 9, + Error: 10 + }, + FormulaType: { + None: 0, + Master: 1, + Shared: 2 + }, + RelationshipType: { + None: 0, + OfficeDocument: 1, + Worksheet: 2, + CalcChain: 3, + SharedStrings: 4, + Styles: 5, + Theme: 6, + Hyperlink: 7 + }, + DocumentType: { + Xlsx: 1 + }, + ReadingOrder: { + LeftToRight: 1, + RightToLeft: 2 + }, + ErrorValue: { + NotApplicable: '#N/A', + Ref: '#REF!', + Name: '#NAME?', + DivZero: '#DIV/0!', + Null: '#NULL!', + Value: '#VALUE!', + Num: '#NUM!' + } +}; + +},{}],8:[function(require,module,exports){ +"use strict"; + +const colCache = require('../utils/col-cache'); +const Anchor = require('./anchor'); +class Image { + constructor(worksheet, model) { + this.worksheet = worksheet; + this.model = model; + } + get model() { + switch (this.type) { + case 'background': + return { + type: this.type, + imageId: this.imageId + }; + case 'image': + return { + type: this.type, + imageId: this.imageId, + hyperlinks: this.range.hyperlinks, + range: { + tl: this.range.tl.model, + br: this.range.br && this.range.br.model, + ext: this.range.ext, + editAs: this.range.editAs + } + }; + default: + throw new Error('Invalid Image Type'); + } + } + set model(_ref) { + let { + type, + imageId, + range, + hyperlinks + } = _ref; + this.type = type; + this.imageId = imageId; + if (type === 'image') { + if (typeof range === 'string') { + const decoded = colCache.decode(range); + this.range = { + tl: new Anchor(this.worksheet, { + col: decoded.left, + row: decoded.top + }, -1), + br: new Anchor(this.worksheet, { + col: decoded.right, + row: decoded.bottom + }, 0), + editAs: 'oneCell' + }; + } else { + this.range = { + tl: new Anchor(this.worksheet, range.tl, 0), + br: range.br && new Anchor(this.worksheet, range.br, 0), + ext: range.ext, + editAs: range.editAs, + hyperlinks: hyperlinks || range.hyperlinks + }; + } + } + } +} +module.exports = Image; + +},{"../utils/col-cache":19,"./anchor":2}],9:[function(require,module,exports){ +"use strict"; + +const _ = require('../utils/under-dash'); +class Note { + constructor(note) { + this.note = note; + } + get model() { + let value = null; + switch (typeof this.note) { + case 'string': + value = { + type: 'note', + note: { + texts: [{ + text: this.note + }] + } + }; + break; + default: + value = { + type: 'note', + note: this.note + }; + break; + } + // Suitable for all cell comments + return _.deepMerge({}, Note.DEFAULT_CONFIGS, value); + } + set model(value) { + const { + note + } = value; + const { + texts + } = note; + if (texts.length === 1 && Object.keys(texts[0]).length === 1) { + this.note = texts[0].text; + } else { + this.note = note; + } + } + static fromModel(model) { + const note = new Note(); + note.model = model; + return note; + } +} +Note.DEFAULT_CONFIGS = { + note: { + margins: { + insetmode: 'auto', + inset: [0.13, 0.13, 0.25, 0.25] + }, + protection: { + locked: 'True', + lockText: 'True' + }, + editAs: 'absolute' + } +}; +module.exports = Note; + +},{"../utils/under-dash":26}],10:[function(require,module,exports){ +"use strict"; + +const colCache = require('../utils/col-cache'); + +// used by worksheet to calculate sheet dimensions +class Range { + constructor() { + this.decode(arguments); + } + setTLBR(t, l, b, r, s) { + if (arguments.length < 4) { + // setTLBR(tl, br, s) + const tl = colCache.decodeAddress(t); + const br = colCache.decodeAddress(l); + this.model = { + top: Math.min(tl.row, br.row), + left: Math.min(tl.col, br.col), + bottom: Math.max(tl.row, br.row), + right: Math.max(tl.col, br.col), + sheetName: b + }; + this.setTLBR(tl.row, tl.col, br.row, br.col, s); + } else { + // setTLBR(t, l, b, r, s) + this.model = { + top: Math.min(t, b), + left: Math.min(l, r), + bottom: Math.max(t, b), + right: Math.max(l, r), + sheetName: s + }; + } + } + decode(argv) { + switch (argv.length) { + case 5: + // [t,l,b,r,s] + this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]); + break; + case 4: + // [t,l,b,r] + this.setTLBR(argv[0], argv[1], argv[2], argv[3]); + break; + case 3: + // [tl,br,s] + this.setTLBR(argv[0], argv[1], argv[2]); + break; + case 2: + // [tl,br] + this.setTLBR(argv[0], argv[1]); + break; + case 1: + { + const value = argv[0]; + if (value instanceof Range) { + // copy constructor + this.model = { + top: value.model.top, + left: value.model.left, + bottom: value.model.bottom, + right: value.model.right, + sheetName: value.sheetName + }; + } else if (value instanceof Array) { + // an arguments array + this.decode(value); + } else if (value.top && value.left && value.bottom && value.right) { + // a model + this.model = { + top: value.top, + left: value.left, + bottom: value.bottom, + right: value.right, + sheetName: value.sheetName + }; + } else { + // [sheetName!]tl:br + const tlbr = colCache.decodeEx(value); + if (tlbr.top) { + this.model = { + top: tlbr.top, + left: tlbr.left, + bottom: tlbr.bottom, + right: tlbr.right, + sheetName: tlbr.sheetName + }; + } else { + this.model = { + top: tlbr.row, + left: tlbr.col, + bottom: tlbr.row, + right: tlbr.col, + sheetName: tlbr.sheetName + }; + } + } + break; + } + case 0: + this.model = { + top: 0, + left: 0, + bottom: 0, + right: 0 + }; + break; + default: + throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`); + } + } + get top() { + return this.model.top || 1; + } + set top(value) { + this.model.top = value; + } + get left() { + return this.model.left || 1; + } + set left(value) { + this.model.left = value; + } + get bottom() { + return this.model.bottom || 1; + } + set bottom(value) { + this.model.bottom = value; + } + get right() { + return this.model.right || 1; + } + set right(value) { + this.model.right = value; + } + get sheetName() { + return this.model.sheetName; + } + set sheetName(value) { + this.model.sheetName = value; + } + get _serialisedSheetName() { + const { + sheetName + } = this.model; + if (sheetName) { + if (/^[a-zA-Z0-9]*$/.test(sheetName)) { + return `${sheetName}!`; + } + return `'${sheetName}'!`; + } + return ''; + } + expand(top, left, bottom, right) { + if (!this.model.top || top < this.top) this.top = top; + if (!this.model.left || left < this.left) this.left = left; + if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom; + if (!this.model.right || right > this.right) this.right = right; + } + expandRow(row) { + if (row) { + const { + dimensions, + number + } = row; + if (dimensions) { + this.expand(number, dimensions.min, number, dimensions.max); + } + } + } + expandToAddress(addressStr) { + const address = colCache.decodeEx(addressStr); + this.expand(address.row, address.col, address.row, address.col); + } + get tl() { + return colCache.n2l(this.left) + this.top; + } + get $t$l() { + return `$${colCache.n2l(this.left)}$${this.top}`; + } + get br() { + return colCache.n2l(this.right) + this.bottom; + } + get $b$r() { + return `$${colCache.n2l(this.right)}$${this.bottom}`; + } + get range() { + return `${this._serialisedSheetName + this.tl}:${this.br}`; + } + get $range() { + return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`; + } + get shortRange() { + return this.count > 1 ? this.range : this._serialisedSheetName + this.tl; + } + get $shortRange() { + return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l; + } + get count() { + return (1 + this.bottom - this.top) * (1 + this.right - this.left); + } + toString() { + return this.range; + } + intersects(other) { + if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false; + if (other.bottom < this.top) return false; + if (other.top > this.bottom) return false; + if (other.right < this.left) return false; + if (other.left > this.right) return false; + return true; + } + contains(addressStr) { + const address = colCache.decodeEx(addressStr); + return this.containsEx(address); + } + containsEx(address) { + if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false; + return address.row >= this.top && address.row <= this.bottom && address.col >= this.left && address.col <= this.right; + } + forEachAddress(cb) { + for (let col = this.left; col <= this.right; col++) { + for (let row = this.top; row <= this.bottom; row++) { + cb(colCache.encodeAddress(row, col), row, col); + } + } + } +} +module.exports = Range; + +},{"../utils/col-cache":19}],11:[function(require,module,exports){ +'use strict'; + +const _ = require('../utils/under-dash'); +const Enums = require('./enums'); +const colCache = require('../utils/col-cache'); +const Cell = require('./cell'); +class Row { + constructor(worksheet, number) { + this._worksheet = worksheet; + this._number = number; + this._cells = []; + this.style = {}; + this.outlineLevel = 0; + } + + // return the row number + get number() { + return this._number; + } + get worksheet() { + return this._worksheet; + } + + // Inform Streaming Writer that this row (and all rows before it) are complete + // and ready to write. Has no effect on Worksheet document + commit() { + this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle + } + + // helps GC by breaking cyclic references + destroy() { + delete this._worksheet; + delete this._cells; + delete this.style; + } + findCell(colNumber) { + return this._cells[colNumber - 1]; + } + + // given {address, row, col}, find or create new cell + getCellEx(address) { + let cell = this._cells[address.col - 1]; + if (!cell) { + const column = this._worksheet.getColumn(address.col); + cell = new Cell(this, column, address.address); + this._cells[address.col - 1] = cell; + } + return cell; + } + + // get cell by key, letter or column number + getCell(col) { + if (typeof col === 'string') { + // is it a key? + const column = this._worksheet.getColumnKey(col); + if (column) { + col = column.number; + } else { + col = colCache.l2n(col); + } + } + return this._cells[col - 1] || this.getCellEx({ + address: colCache.encodeAddress(this._number, col), + row: this._number, + col + }); + } + + // remove cell(s) and shift all higher cells down by count + splice(start, count) { + const nKeep = start + count; + for (var _len = arguments.length, inserts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + inserts[_key - 2] = arguments[_key]; + } + const nExpand = inserts.length - count; + const nEnd = this._cells.length; + let i; + let cSrc; + let cDst; + if (nExpand < 0) { + // remove cells + for (i = start + inserts.length; i <= nEnd; i++) { + cDst = this._cells[i - 1]; + cSrc = this._cells[i - nExpand - 1]; + if (cSrc) { + cDst = this.getCell(i); + cDst.value = cSrc.value; + cDst.style = cSrc.style; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = cSrc._comment; + } else if (cDst) { + cDst.value = null; + cDst.style = {}; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = undefined; + } + } + } else if (nExpand > 0) { + // insert new cells + for (i = nEnd; i >= nKeep; i--) { + cSrc = this._cells[i - 1]; + if (cSrc) { + cDst = this.getCell(i + nExpand); + cDst.value = cSrc.value; + cDst.style = cSrc.style; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = cSrc._comment; + } else { + this._cells[i + nExpand - 1] = undefined; + } + } + } + + // now add the new values + for (i = 0; i < inserts.length; i++) { + cDst = this.getCell(start + i); + cDst.value = inserts[i]; + cDst.style = {}; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = undefined; + } + } + + // Iterate over all non-null cells in this row + eachCell(options, iteratee) { + if (!iteratee) { + iteratee = options; + options = null; + } + if (options && options.includeEmpty) { + const n = this._cells.length; + for (let i = 1; i <= n; i++) { + iteratee(this.getCell(i), i); + } + } else { + this._cells.forEach((cell, index) => { + if (cell && cell.type !== Enums.ValueType.Null) { + iteratee(cell, index + 1); + } + }); + } + } + + // =========================================================================== + // Page Breaks + addPageBreak(lft, rght) { + const ws = this._worksheet; + const left = Math.max(0, lft - 1) || 0; + const right = Math.max(0, rght - 1) || 16838; + const pb = { + id: this._number, + max: right, + man: 1 + }; + if (left) pb.min = left; + ws.rowBreaks.push(pb); + } + + // return a sparse array of cell values + get values() { + const values = []; + this._cells.forEach(cell => { + if (cell && cell.type !== Enums.ValueType.Null) { + values[cell.col] = cell.value; + } + }); + return values; + } + + // set the values by contiguous or sparse array, or by key'd object literal + set values(value) { + // this operation is not additive - any prior cells are removed + this._cells = []; + if (!value) { + // empty row + } else if (value instanceof Array) { + let offset = 0; + if (value.hasOwnProperty('0')) { + // contiguous array - start at column 1 + offset = 1; + } + value.forEach((item, index) => { + if (item !== undefined) { + this.getCellEx({ + address: colCache.encodeAddress(this._number, index + offset), + row: this._number, + col: index + offset + }).value = item; + } + }); + } else { + // assume object with column keys + this._worksheet.eachColumnKey((column, key) => { + if (value[key] !== undefined) { + this.getCellEx({ + address: colCache.encodeAddress(this._number, column.number), + row: this._number, + col: column.number + }).value = value[key]; + } + }); + } + } + + // returns true if the row includes at least one cell with a value + get hasValues() { + return _.some(this._cells, cell => cell && cell.type !== Enums.ValueType.Null); + } + get cellCount() { + return this._cells.length; + } + get actualCellCount() { + let count = 0; + this.eachCell(() => { + count++; + }); + return count; + } + + // get the min and max column number for the non-null cells in this row or null + get dimensions() { + let min = 0; + let max = 0; + this._cells.forEach(cell => { + if (cell && cell.type !== Enums.ValueType.Null) { + if (!min || min > cell.col) { + min = cell.col; + } + if (max < cell.col) { + max = cell.col; + } + } + }); + return min > 0 ? { + min, + max + } : null; + } + + // ========================================================================= + // styles + _applyStyle(name, value) { + this.style[name] = value; + this._cells.forEach(cell => { + if (cell) { + cell[name] = value; + } + }); + return value; + } + get numFmt() { + return this.style.numFmt; + } + set numFmt(value) { + this._applyStyle('numFmt', value); + } + get font() { + return this.style.font; + } + set font(value) { + this._applyStyle('font', value); + } + get alignment() { + return this.style.alignment; + } + set alignment(value) { + this._applyStyle('alignment', value); + } + get protection() { + return this.style.protection; + } + set protection(value) { + this._applyStyle('protection', value); + } + get border() { + return this.style.border; + } + set border(value) { + this._applyStyle('border', value); + } + get fill() { + return this.style.fill; + } + set fill(value) { + this._applyStyle('fill', value); + } + get hidden() { + return !!this._hidden; + } + set hidden(value) { + this._hidden = value; + } + get outlineLevel() { + return this._outlineLevel || 0; + } + set outlineLevel(value) { + this._outlineLevel = value; + } + get collapsed() { + return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow); + } + + // ========================================================================= + get model() { + const cells = []; + let min = 0; + let max = 0; + this._cells.forEach(cell => { + if (cell) { + const cellModel = cell.model; + if (cellModel) { + if (!min || min > cell.col) { + min = cell.col; + } + if (max < cell.col) { + max = cell.col; + } + cells.push(cellModel); + } + } + }); + return this.height || cells.length ? { + cells, + number: this.number, + min, + max, + height: this.height, + style: this.style, + hidden: this.hidden, + outlineLevel: this.outlineLevel, + collapsed: this.collapsed + } : null; + } + set model(value) { + if (value.number !== this._number) { + throw new Error('Invalid row number in model'); + } + this._cells = []; + let previousAddress; + value.cells.forEach(cellModel => { + switch (cellModel.type) { + case Cell.Types.Merge: + // special case - don't add this types + break; + default: + { + let address; + if (cellModel.address) { + address = colCache.decodeAddress(cellModel.address); + } else if (previousAddress) { + // This is a element without an r attribute + // Assume that it's the cell for the next column + const { + row + } = previousAddress; + const col = previousAddress.col + 1; + address = { + row, + col, + address: colCache.encodeAddress(row, col), + $col$row: `$${colCache.n2l(col)}$${row}` + }; + } + previousAddress = address; + const cell = this.getCellEx(address); + cell.model = cellModel; + break; + } + } + }); + if (value.height) { + this.height = value.height; + } else { + delete this.height; + } + this.hidden = value.hidden; + this.outlineLevel = value.outlineLevel || 0; + this.style = value.style && JSON.parse(JSON.stringify(value.style)) || {}; + } +} +module.exports = Row; + +},{"../utils/col-cache":19,"../utils/under-dash":26,"./cell":3,"./enums":7}],12:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const colCache = require('../utils/col-cache'); +class Column { + // wrapper around column model, allowing access and manipulation + constructor(table, column, index) { + this.table = table; + this.column = column; + this.index = index; + } + _set(name, value) { + this.table.cacheState(); + this.column[name] = value; + } + + /* eslint-disable lines-between-class-members */ + get name() { + return this.column.name; + } + set name(value) { + this._set('name', value); + } + get filterButton() { + return this.column.filterButton; + } + set filterButton(value) { + this.column.filterButton = value; + } + get style() { + return this.column.style; + } + set style(value) { + this.column.style = value; + } + get totalsRowLabel() { + return this.column.totalsRowLabel; + } + set totalsRowLabel(value) { + this._set('totalsRowLabel', value); + } + get totalsRowFunction() { + return this.column.totalsRowFunction; + } + set totalsRowFunction(value) { + this._set('totalsRowFunction', value); + } + get totalsRowResult() { + return this.column.totalsRowResult; + } + set totalsRowResult(value) { + this._set('totalsRowResult', value); + } + get totalsRowFormula() { + return this.column.totalsRowFormula; + } + set totalsRowFormula(value) { + this._set('totalsRowFormula', value); + } + /* eslint-enable lines-between-class-members */ +} + +class Table { + constructor(worksheet, table) { + this.worksheet = worksheet; + if (table) { + this.table = table; + // check things are ok first + this.validate(); + this.store(); + } + } + getFormula(column) { + // get the correct formula to apply to the totals row + switch (column.totalsRowFunction) { + case 'none': + return null; + case 'average': + return `SUBTOTAL(101,${this.table.name}[${column.name}])`; + case 'countNums': + return `SUBTOTAL(102,${this.table.name}[${column.name}])`; + case 'count': + return `SUBTOTAL(103,${this.table.name}[${column.name}])`; + case 'max': + return `SUBTOTAL(104,${this.table.name}[${column.name}])`; + case 'min': + return `SUBTOTAL(105,${this.table.name}[${column.name}])`; + case 'stdDev': + return `SUBTOTAL(106,${this.table.name}[${column.name}])`; + case 'var': + return `SUBTOTAL(107,${this.table.name}[${column.name}])`; + case 'sum': + return `SUBTOTAL(109,${this.table.name}[${column.name}])`; + case 'custom': + return column.totalsRowFormula; + default: + throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`); + } + } + get width() { + // width of the table + return this.table.columns.length; + } + get height() { + // height of the table data + return this.table.rows.length; + } + get filterHeight() { + // height of the table data plus optional header row + return this.height + (this.table.headerRow ? 1 : 0); + } + get tableHeight() { + // full height of the table on the sheet + return this.filterHeight + (this.table.totalsRow ? 1 : 0); + } + validate() { + const { + table + } = this; + // set defaults and check is valid + const assign = (o, name, dflt) => { + if (o[name] === undefined) { + o[name] = dflt; + } + }; + assign(table, 'headerRow', true); + assign(table, 'totalsRow', false); + assign(table, 'style', {}); + assign(table.style, 'theme', 'TableStyleMedium2'); + assign(table.style, 'showFirstColumn', false); + assign(table.style, 'showLastColumn', false); + assign(table.style, 'showRowStripes', false); + assign(table.style, 'showColumnStripes', false); + const assert = (test, message) => { + if (!test) { + throw new Error(message); + } + }; + assert(table.ref, 'Table must have ref'); + assert(table.columns, 'Table must have column definitions'); + assert(table.rows, 'Table must have row definitions'); + table.tl = colCache.decodeAddress(table.ref); + const { + row, + col + } = table.tl; + assert(row > 0, 'Table must be on valid row'); + assert(col > 0, 'Table must be on valid col'); + const { + width, + filterHeight, + tableHeight + } = this; + + // autoFilterRef is a range that includes optional headers only + table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1); + + // tableRef is a range that includes optional headers and totals + table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1); + table.columns.forEach((column, i) => { + assert(column.name, `Column ${i} must have a name`); + if (i === 0) { + assign(column, 'totalsRowLabel', 'Total'); + } else { + assign(column, 'totalsRowFunction', 'none'); + column.totalsRowFormula = this.getFormula(column); + } + }); + } + store() { + // where the table needs to store table data, headers, footers in + // the sheet... + const assignStyle = (cell, style) => { + if (style) { + Object.keys(style).forEach(key => { + cell[key] = style[key]; + }); + } + }; + const { + worksheet, + table + } = this; + const { + row, + col + } = table.tl; + let count = 0; + if (table.headerRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const { + style, + name + } = column; + const cell = r.getCell(col + j); + cell.value = name; + assignStyle(cell, style); + }); + } + table.rows.forEach(data => { + const r = worksheet.getRow(row + count++); + data.forEach((value, j) => { + const cell = r.getCell(col + j); + cell.value = value; + assignStyle(cell, table.columns[j].style); + }); + }); + if (table.totalsRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const cell = r.getCell(col + j); + if (j === 0) { + cell.value = column.totalsRowLabel; + } else { + const formula = this.getFormula(column); + if (formula) { + cell.value = { + formula: column.totalsRowFormula, + result: column.totalsRowResult + }; + } else { + cell.value = null; + } + } + assignStyle(cell, column.style); + }); + } + } + load(worksheet) { + // where the table will read necessary features from a loaded sheet + const { + table + } = this; + const { + row, + col + } = table.tl; + let count = 0; + if (table.headerRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const cell = r.getCell(col + j); + cell.value = column.name; + }); + } + table.rows.forEach(data => { + const r = worksheet.getRow(row + count++); + data.forEach((value, j) => { + const cell = r.getCell(col + j); + cell.value = value; + }); + }); + if (table.totalsRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const cell = r.getCell(col + j); + if (j === 0) { + cell.value = column.totalsRowLabel; + } else { + const formula = this.getFormula(column); + if (formula) { + cell.value = { + formula: column.totalsRowFormula, + result: column.totalsRowResult + }; + } + } + }); + } + } + get model() { + return this.table; + } + set model(value) { + this.table = value; + } + + // ================================================================ + // TODO: Mutating methods + cacheState() { + if (!this._cache) { + this._cache = { + ref: this.ref, + width: this.width, + tableHeight: this.tableHeight + }; + } + } + commit() { + // changes may have been made that might have on-sheet effects + if (!this._cache) { + return; + } + + // check things are ok first + this.validate(); + const ref = colCache.decodeAddress(this._cache.ref); + if (this.ref !== this._cache.ref) { + // wipe out whole table footprint at previous location + for (let i = 0; i < this._cache.tableHeight; i++) { + const row = this.worksheet.getRow(ref.row + i); + for (let j = 0; j < this._cache.width; j++) { + const cell = row.getCell(ref.col + j); + cell.value = null; + } + } + } else { + // clear out below table if it has shrunk + for (let i = this.tableHeight; i < this._cache.tableHeight; i++) { + const row = this.worksheet.getRow(ref.row + i); + for (let j = 0; j < this._cache.width; j++) { + const cell = row.getCell(ref.col + j); + cell.value = null; + } + } + + // clear out to right of table if it has lost columns + for (let i = 0; i < this.tableHeight; i++) { + const row = this.worksheet.getRow(ref.row + i); + for (let j = this.width; j < this._cache.width; j++) { + const cell = row.getCell(ref.col + j); + cell.value = null; + } + } + } + this.store(); + } + addRow(values, rowNumber) { + // Add a row of data, either insert at rowNumber or append + this.cacheState(); + if (rowNumber === undefined) { + this.table.rows.push(values); + } else { + this.table.rows.splice(rowNumber, 0, values); + } + } + removeRows(rowIndex) { + let count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + // Remove a rows of data + this.cacheState(); + this.table.rows.splice(rowIndex, count); + } + getColumn(colIndex) { + const column = this.table.columns[colIndex]; + return new Column(this, column, colIndex); + } + addColumn(column, values, colIndex) { + // Add a new column, including column defn and values + // Inserts at colNumber or adds to the right + this.cacheState(); + if (colIndex === undefined) { + this.table.columns.push(column); + this.table.rows.forEach((row, i) => { + row.push(values[i]); + }); + } else { + this.table.columns.splice(colIndex, 0, column); + this.table.rows.forEach((row, i) => { + row.splice(colIndex, 0, values[i]); + }); + } + } + removeColumns(colIndex) { + let count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + // Remove a column with data + this.cacheState(); + this.table.columns.splice(colIndex, count); + this.table.rows.forEach(row => { + row.splice(colIndex, count); + }); + } + _assign(target, prop, value) { + this.cacheState(); + target[prop] = value; + } + + /* eslint-disable lines-between-class-members */ + get ref() { + return this.table.ref; + } + set ref(value) { + this._assign(this.table, 'ref', value); + } + get name() { + return this.table.name; + } + set name(value) { + this.table.name = value; + } + get displayName() { + return this.table.displyName || this.table.name; + } + set displayNamename(value) { + this.table.displayName = value; + } + get headerRow() { + return this.table.headerRow; + } + set headerRow(value) { + this._assign(this.table, 'headerRow', value); + } + get totalsRow() { + return this.table.totalsRow; + } + set totalsRow(value) { + this._assign(this.table, 'totalsRow', value); + } + get theme() { + return this.table.style.name; + } + set theme(value) { + this.table.style.name = value; + } + get showFirstColumn() { + return this.table.style.showFirstColumn; + } + set showFirstColumn(value) { + this.table.style.showFirstColumn = value; + } + get showLastColumn() { + return this.table.style.showLastColumn; + } + set showLastColumn(value) { + this.table.style.showLastColumn = value; + } + get showRowStripes() { + return this.table.style.showRowStripes; + } + set showRowStripes(value) { + this.table.style.showRowStripes = value; + } + get showColumnStripes() { + return this.table.style.showColumnStripes; + } + set showColumnStripes(value) { + this.table.style.showColumnStripes = value; + } + /* eslint-enable lines-between-class-members */ +} + +module.exports = Table; + +},{"../utils/col-cache":19}],13:[function(require,module,exports){ +'use strict'; + +const Worksheet = require('./worksheet'); +const DefinedNames = require('./defined-names'); +const XLSX = require('../xlsx/xlsx'); +const CSV = require('../csv/csv'); + +// Workbook requirements +// Load and Save from file and stream +// Access/Add/Delete individual worksheets +// Manage String table, Hyperlink table, etc. +// Manage scaffolding for contained objects to write to/read from + +class Workbook { + constructor() { + this.category = ''; + this.company = ''; + this.created = new Date(); + this.description = ''; + this.keywords = ''; + this.manager = ''; + this.modified = this.created; + this.properties = {}; + this.calcProperties = {}; + this._worksheets = []; + this.subject = ''; + this.title = ''; + this.views = []; + this.media = []; + this._definedNames = new DefinedNames(); + } + get xlsx() { + if (!this._xlsx) this._xlsx = new XLSX(this); + return this._xlsx; + } + get csv() { + if (!this._csv) this._csv = new CSV(this); + return this._csv; + } + get nextId() { + // find the next unique spot to add worksheet + for (let i = 1; i < this._worksheets.length; i++) { + if (!this._worksheets[i]) { + return i; + } + } + return this._worksheets.length || 1; + } + addWorksheet(name, options) { + const id = this.nextId; + + // if options is a color, call it tabColor (and signal deprecated message) + if (options) { + if (typeof options === 'string') { + // eslint-disable-next-line no-console + console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: "rbg value" } }'); + options = { + properties: { + tabColor: { + argb: options + } + } + }; + } else if (options.argb || options.theme || options.indexed) { + // eslint-disable-next-line no-console + console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }'); + options = { + properties: { + tabColor: options + } + }; + } + } + const lastOrderNo = this._worksheets.reduce((acc, ws) => (ws && ws.orderNo) > acc ? ws.orderNo : acc, 0); + const worksheetOptions = Object.assign({}, options, { + id, + name, + orderNo: lastOrderNo + 1, + workbook: this + }); + const worksheet = new Worksheet(worksheetOptions); + this._worksheets[id] = worksheet; + return worksheet; + } + removeWorksheetEx(worksheet) { + delete this._worksheets[worksheet.id]; + } + removeWorksheet(id) { + const worksheet = this.getWorksheet(id); + if (worksheet) { + worksheet.destroy(); + } + } + getWorksheet(id) { + if (id === undefined) { + return this._worksheets.find(Boolean); + } + if (typeof id === 'number') { + return this._worksheets[id]; + } + if (typeof id === 'string') { + return this._worksheets.find(worksheet => worksheet && worksheet.name === id); + } + return undefined; + } + get worksheets() { + // return a clone of _worksheets + return this._worksheets.slice(1).sort((a, b) => a.orderNo - b.orderNo).filter(Boolean); + } + eachSheet(iteratee) { + this.worksheets.forEach(sheet => { + iteratee(sheet, sheet.id); + }); + } + get definedNames() { + return this._definedNames; + } + clearThemes() { + // Note: themes are not an exposed feature, meddle at your peril! + this._themes = undefined; + } + addImage(image) { + // TODO: validation? + const id = this.media.length; + this.media.push(Object.assign({}, image, { + type: 'image' + })); + return id; + } + getImage(id) { + return this.media[id]; + } + get model() { + return { + creator: this.creator || 'Unknown', + lastModifiedBy: this.lastModifiedBy || 'Unknown', + lastPrinted: this.lastPrinted, + created: this.created, + modified: this.modified, + properties: this.properties, + worksheets: this.worksheets.map(worksheet => worksheet.model), + sheets: this.worksheets.map(ws => ws.model).filter(Boolean), + definedNames: this._definedNames.model, + views: this.views, + company: this.company, + manager: this.manager, + title: this.title, + subject: this.subject, + keywords: this.keywords, + category: this.category, + description: this.description, + language: this.language, + revision: this.revision, + contentStatus: this.contentStatus, + themes: this._themes, + media: this.media, + calcProperties: this.calcProperties + }; + } + set model(value) { + this.creator = value.creator; + this.lastModifiedBy = value.lastModifiedBy; + this.lastPrinted = value.lastPrinted; + this.created = value.created; + this.modified = value.modified; + this.company = value.company; + this.manager = value.manager; + this.title = value.title; + this.subject = value.subject; + this.keywords = value.keywords; + this.category = value.category; + this.description = value.description; + this.language = value.language; + this.revision = value.revision; + this.contentStatus = value.contentStatus; + this.properties = value.properties; + this.calcProperties = value.calcProperties; + this._worksheets = []; + value.worksheets.forEach(worksheetModel => { + const { + id, + name, + state + } = worksheetModel; + const orderNo = value.sheets && value.sheets.findIndex(ws => ws.id === id); + const worksheet = this._worksheets[id] = new Worksheet({ + id, + name, + orderNo, + state, + workbook: this + }); + worksheet.model = worksheetModel; + }); + this._definedNames.model = value.definedNames; + this.views = value.views; + this._themes = value.themes; + this.media = value.media || []; + } +} +module.exports = Workbook; + +},{"../csv/csv":1,"../xlsx/xlsx":144,"./defined-names":6,"./worksheet":14}],14:[function(require,module,exports){ +"use strict"; + +const _ = require('../utils/under-dash'); +const colCache = require('../utils/col-cache'); +const Range = require('./range'); +const Row = require('./row'); +const Column = require('./column'); +const Enums = require('./enums'); +const Image = require('./image'); +const Table = require('./table'); +const DataValidations = require('./data-validations'); +const Encryptor = require('../utils/encryptor'); +const { + copyStyle +} = require('../utils/copy-style'); + +// Worksheet requirements +// Operate as sheet inside workbook or standalone +// Load and Save from file and stream +// Access/Add/Delete individual cells +// Manage column widths and row heights + +class Worksheet { + constructor(options) { + options = options || {}; + this._workbook = options.workbook; + + // in a workbook, each sheet will have a number + this.id = options.id; + this.orderNo = options.orderNo; + + // and a name + this.name = options.name; + + // add a state + this.state = options.state || 'visible'; + + // rows allows access organised by row. Sparse array of arrays indexed by row-1, col + // Note: _rows is zero based. Must subtract 1 to go from cell.row to index + this._rows = []; + + // column definitions + this._columns = null; + + // column keys (addRow convenience): key ==> this._collumns index + this._keys = {}; + + // keep record of all merges + this._merges = {}; + + // record of all row and column pageBreaks + this.rowBreaks = []; + + // for tabColor, default row height, outline levels, etc + this.properties = Object.assign({}, { + defaultRowHeight: 15, + dyDescent: 55, + outlineLevelCol: 0, + outlineLevelRow: 0 + }, options.properties); + + // for all things printing + this.pageSetup = Object.assign({}, { + margins: { + left: 0.7, + right: 0.7, + top: 0.75, + bottom: 0.75, + header: 0.3, + footer: 0.3 + }, + orientation: 'portrait', + horizontalDpi: 4294967295, + verticalDpi: 4294967295, + fitToPage: !!(options.pageSetup && (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) && !options.pageSetup.scale), + pageOrder: 'downThenOver', + blackAndWhite: false, + draft: false, + cellComments: 'None', + errors: 'displayed', + scale: 100, + fitToWidth: 1, + fitToHeight: 1, + paperSize: undefined, + showRowColHeaders: false, + showGridLines: false, + firstPageNumber: undefined, + horizontalCentered: false, + verticalCentered: false, + rowBreaks: null, + colBreaks: null + }, options.pageSetup); + this.headerFooter = Object.assign({}, { + differentFirst: false, + differentOddEven: false, + oddHeader: null, + oddFooter: null, + evenHeader: null, + evenFooter: null, + firstHeader: null, + firstFooter: null + }, options.headerFooter); + this.dataValidations = new DataValidations(); + + // for freezepanes, split, zoom, gridlines, etc + this.views = options.views || []; + this.autoFilter = options.autoFilter || null; + + // for images, etc + this._media = []; + + // worksheet protection + this.sheetProtection = null; + + // for tables + this.tables = {}; + this.conditionalFormattings = []; + } + get name() { + return this._name; + } + set name(name) { + if (name === undefined) { + name = `sheet${this.id}`; + } + if (this._name === name) return; + if (typeof name !== 'string') { + throw new Error('The name has to be a string.'); + } + if (name === '') { + throw new Error('The name can\'t be empty.'); + } + if (name === 'History') { + throw new Error('The name "History" is protected. Please use a different name.'); + } + + // Illegal character in worksheet name: asterisk (*), question mark (?), + // colon (:), forward slash (/ \), or bracket ([]) + if (/[*?:/\\[\]]/.test(name)) { + throw new Error(`Worksheet name ${name} cannot include any of the following characters: * ? : \\ / [ ]`); + } + if (/(^')|('$)/.test(name)) { + throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${name}`); + } + if (name && name.length > 31) { + // eslint-disable-next-line no-console + console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`); + name = name.substring(0, 31); + } + if (this._workbook._worksheets.find(ws => ws && ws.name.toLowerCase() === name.toLowerCase())) { + throw new Error(`Worksheet name already exists: ${name}`); + } + this._name = name; + } + get workbook() { + return this._workbook; + } + + // when you're done with this worksheet, call this to remove from workbook + destroy() { + this._workbook.removeWorksheetEx(this); + } + + // Get the bounding range of the cells in this worksheet + get dimensions() { + const dimensions = new Range(); + this._rows.forEach(row => { + if (row) { + const rowDims = row.dimensions; + if (rowDims) { + dimensions.expand(row.number, rowDims.min, row.number, rowDims.max); + } + } + }); + return dimensions; + } + + // ========================================================================= + // Columns + + // get the current columns array. + get columns() { + return this._columns; + } + + // set the columns from an array of column definitions. + // Note: any headers defined will overwrite existing values. + set columns(value) { + // calculate max header row count + this._headerRowCount = value.reduce((pv, cv) => { + const headerCount = cv.header && 1 || cv.headers && cv.headers.length || 0; + return Math.max(pv, headerCount); + }, 0); + + // construct Column objects + let count = 1; + const columns = this._columns = []; + value.forEach(defn => { + const column = new Column(this, count++, false); + columns.push(column); + column.defn = defn; + }); + } + getColumnKey(key) { + return this._keys[key]; + } + setColumnKey(key, value) { + this._keys[key] = value; + } + deleteColumnKey(key) { + delete this._keys[key]; + } + eachColumnKey(f) { + _.each(this._keys, f); + } + + // get a single column by col number. If it doesn't exist, create it and any gaps before it + getColumn(c) { + if (typeof c === 'string') { + // if it matches a key'd column, return that + const col = this._keys[c]; + if (col) return col; + + // otherwise, assume letter + c = colCache.l2n(c); + } + if (!this._columns) { + this._columns = []; + } + if (c > this._columns.length) { + let n = this._columns.length + 1; + while (n <= c) { + this._columns.push(new Column(this, n++)); + } + } + return this._columns[c - 1]; + } + spliceColumns(start, count) { + const rows = this._rows; + const nRows = rows.length; + for (var _len = arguments.length, inserts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + inserts[_key - 2] = arguments[_key]; + } + if (inserts.length > 0) { + // must iterate over all rows whether they exist yet or not + for (let i = 0; i < nRows; i++) { + const rowArguments = [start, count]; + // eslint-disable-next-line no-loop-func + inserts.forEach(insert => { + rowArguments.push(insert[i] || null); + }); + const row = this.getRow(i + 1); + // eslint-disable-next-line prefer-spread + row.splice.apply(row, rowArguments); + } + } else { + // nothing to insert, so just splice all rows + this._rows.forEach(r => { + if (r) { + r.splice(start, count); + } + }); + } + + // splice column definitions + const nExpand = inserts.length - count; + const nKeep = start + count; + const nEnd = this._columns.length; + if (nExpand < 0) { + for (let i = start + inserts.length; i <= nEnd; i++) { + this.getColumn(i).defn = this.getColumn(i - nExpand).defn; + } + } else if (nExpand > 0) { + for (let i = nEnd; i >= nKeep; i--) { + this.getColumn(i + nExpand).defn = this.getColumn(i).defn; + } + } + for (let i = start; i < start + inserts.length; i++) { + this.getColumn(i).defn = null; + } + + // account for defined names + this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length); + } + get lastColumn() { + return this.getColumn(this.columnCount); + } + get columnCount() { + let maxCount = 0; + this.eachRow(row => { + maxCount = Math.max(maxCount, row.cellCount); + }); + return maxCount; + } + get actualColumnCount() { + // performance nightmare - for each row, counts all the columns used + const counts = []; + let count = 0; + this.eachRow(row => { + row.eachCell(_ref => { + let { + col + } = _ref; + if (!counts[col]) { + counts[col] = true; + count++; + } + }); + }); + return count; + } + + // ========================================================================= + // Rows + + _commitRow() { + // nop - allows streaming reader to fill a document + } + get _lastRowNumber() { + // need to cope with results of splice + const rows = this._rows; + let n = rows.length; + while (n > 0 && rows[n - 1] === undefined) { + n--; + } + return n; + } + get _nextRow() { + return this._lastRowNumber + 1; + } + get lastRow() { + if (this._rows.length) { + return this._rows[this._rows.length - 1]; + } + return undefined; + } + + // find a row (if exists) by row number + findRow(r) { + return this._rows[r - 1]; + } + + // find multiple rows (if exists) by row number + findRows(start, length) { + return this._rows.slice(start - 1, start - 1 + length); + } + get rowCount() { + return this._lastRowNumber; + } + get actualRowCount() { + // counts actual rows that have actual data + let count = 0; + this.eachRow(() => { + count++; + }); + return count; + } + + // get a row by row number. + getRow(r) { + let row = this._rows[r - 1]; + if (!row) { + row = this._rows[r - 1] = new Row(this, r); + } + return row; + } + + // get multiple rows by row number. + getRows(start, length) { + if (length < 1) return undefined; + const rows = []; + for (let i = start; i < start + length; i++) { + rows.push(this.getRow(i)); + } + return rows; + } + addRow(value) { + let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n'; + const rowNo = this._nextRow; + const row = this.getRow(rowNo); + row.values = value; + this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n'); + return row; + } + addRows(value) { + let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n'; + const rows = []; + value.forEach(row => { + rows.push(this.addRow(row, style)); + }); + return rows; + } + insertRow(pos, value) { + let style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'n'; + this.spliceRows(pos, 0, value); + this._setStyleOption(pos, style); + return this.getRow(pos); + } + insertRows(pos, values) { + let style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'n'; + this.spliceRows(pos, 0, ...values); + if (style !== 'n') { + // copy over the styles + for (let i = 0; i < values.length; i++) { + if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) { + this._copyStyle(values.length + pos + i, pos + i, style[1] === '+'); + } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) { + this._copyStyle(pos - 1, pos + i, style[1] === '+'); + } + } + } + return this.getRows(pos, values.length); + } + + // set row at position to same style as of either pervious row (option 'i') or next row (option 'o') + _setStyleOption(pos) { + let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n'; + if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) { + this._copyStyle(pos + 1, pos, style[1] === '+'); + } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) { + this._copyStyle(pos - 1, pos, style[1] === '+'); + } + } + _copyStyle(src, dest) { + let styleEmpty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + const rSrc = this.getRow(src); + const rDst = this.getRow(dest); + rDst.style = copyStyle(rSrc.style); + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: styleEmpty + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = copyStyle(cell.style); + }); + rDst.height = rSrc.height; + } + duplicateRow(rowNum, count) { + let insert = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + // create count duplicates of rowNum + // either inserting new or overwriting existing rows + + const rSrc = this._rows[rowNum - 1]; + const inserts = new Array(count).fill(rSrc.values); + this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts); + + // now copy styles... + for (let i = 0; i < count; i++) { + const rDst = this._rows[rowNum + i]; + rDst.style = rSrc.style; + rDst.height = rSrc.height; + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: true + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = cell.style; + }); + } + } + spliceRows(start, count) { + // same problem as row.splice, except worse. + const nKeep = start + count; + for (var _len2 = arguments.length, inserts = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + inserts[_key2 - 2] = arguments[_key2]; + } + const nInserts = inserts.length; + const nExpand = nInserts - count; + const nEnd = this._rows.length; + let i; + let rSrc; + if (nExpand < 0) { + // remove rows + if (start === nEnd) { + this._rows[nEnd - 1] = undefined; + } + for (i = nKeep; i <= nEnd; i++) { + rSrc = this._rows[i - 1]; + if (rSrc) { + const rDst = this.getRow(i + nExpand); + rDst.values = rSrc.values; + rDst.style = rSrc.style; + rDst.height = rSrc.height; + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: true + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = cell.style; + }); + this._rows[i - 1] = undefined; + } else { + this._rows[i + nExpand - 1] = undefined; + } + } + } else if (nExpand > 0) { + // insert new cells + for (i = nEnd; i >= nKeep; i--) { + rSrc = this._rows[i - 1]; + if (rSrc) { + const rDst = this.getRow(i + nExpand); + rDst.values = rSrc.values; + rDst.style = rSrc.style; + rDst.height = rSrc.height; + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: true + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = cell.style; + + // remerge cells accounting for insert offset + if (cell._value.constructor.name === 'MergeValue') { + const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber); + const prevMaster = cell._value._master; + const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number); + cellToBeMerged.merge(newMaster); + } + }); + } else { + this._rows[i + nExpand - 1] = undefined; + } + } + } + + // now copy over the new values + for (i = 0; i < nInserts; i++) { + const rDst = this.getRow(start + i); + rDst.style = {}; + rDst.values = inserts[i]; + } + + // account for defined names + this.workbook.definedNames.spliceRows(this.name, start, count, nInserts); + } + + // iterate over every row in the worksheet, including maybe empty rows + eachRow(options, iteratee) { + if (!iteratee) { + iteratee = options; + options = undefined; + } + if (options && options.includeEmpty) { + const n = this._rows.length; + for (let i = 1; i <= n; i++) { + iteratee(this.getRow(i), i); + } + } else { + this._rows.forEach(row => { + if (row && row.hasValues) { + iteratee(row, row.number); + } + }); + } + } + + // return all rows as sparse array + getSheetValues() { + const rows = []; + this._rows.forEach(row => { + if (row) { + rows[row.number] = row.values; + } + }); + return rows; + } + + // ========================================================================= + // Cells + + // returns the cell at [r,c] or address given by r. If not found, return undefined + findCell(r, c) { + const address = colCache.getAddress(r, c); + const row = this._rows[address.row - 1]; + return row ? row.findCell(address.col) : undefined; + } + + // return the cell at [r,c] or address given by r. If not found, create a new one. + getCell(r, c) { + const address = colCache.getAddress(r, c); + const row = this.getRow(address.row); + return row.getCellEx(address); + } + + // ========================================================================= + // Merge + + // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell + mergeCells() { + for (var _len3 = arguments.length, cells = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + cells[_key3] = arguments[_key3]; + } + const dimensions = new Range(cells); + this._mergeCellsInternal(dimensions); + } + mergeCellsWithoutStyle() { + for (var _len4 = arguments.length, cells = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + cells[_key4] = arguments[_key4]; + } + const dimensions = new Range(cells); + this._mergeCellsInternal(dimensions, true); + } + _mergeCellsInternal(dimensions, ignoreStyle) { + // check cells aren't already merged + _.each(this._merges, merge => { + if (merge.intersects(dimensions)) { + throw new Error('Cannot merge already merged cells'); + } + }); + + // apply merge + const master = this.getCell(dimensions.top, dimensions.left); + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + for (let j = dimensions.left; j <= dimensions.right; j++) { + // merge all but the master cell + if (i > dimensions.top || j > dimensions.left) { + this.getCell(i, j).merge(master, ignoreStyle); + } + } + } + + // index merge + this._merges[master.address] = dimensions; + } + _unMergeMaster(master) { + // master is always top left of a rectangle + const merge = this._merges[master.address]; + if (merge) { + for (let i = merge.top; i <= merge.bottom; i++) { + for (let j = merge.left; j <= merge.right; j++) { + this.getCell(i, j).unmerge(); + } + } + delete this._merges[master.address]; + } + } + get hasMerges() { + // return true if this._merges has a merge object + return _.some(this._merges, Boolean); + } + + // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge, + // un-merge the group. Note this function can affect multiple merges and merge-blocks are + // atomic - either they're all merged or all un-merged. + unMergeCells() { + for (var _len5 = arguments.length, cells = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + cells[_key5] = arguments[_key5]; + } + const dimensions = new Range(cells); + + // find any cells in that range and unmerge them + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + for (let j = dimensions.left; j <= dimensions.right; j++) { + const cell = this.findCell(i, j); + if (cell) { + if (cell.type === Enums.ValueType.Merge) { + // this cell merges to another master + this._unMergeMaster(cell.master); + } else if (this._merges[cell.address]) { + // this cell is a master + this._unMergeMaster(cell); + } + } + } + } + } + + // =========================================================================== + // Shared/Array Formula + fillFormula(range, formula, results) { + let shareType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'shared'; + // Define formula for top-left cell and share to rest + const decoded = colCache.decode(range); + const { + top, + left, + bottom, + right + } = decoded; + const width = right - left + 1; + const masterAddress = colCache.encodeAddress(top, left); + const isShared = shareType === 'shared'; + + // work out result accessor + let getResult; + if (typeof results === 'function') { + getResult = results; + } else if (Array.isArray(results)) { + if (Array.isArray(results[0])) { + getResult = (row, col) => results[row - top][col - left]; + } else { + // eslint-disable-next-line no-mixed-operators + getResult = (row, col) => results[(row - top) * width + (col - left)]; + } + } else { + getResult = () => undefined; + } + let first = true; + for (let r = top; r <= bottom; r++) { + for (let c = left; c <= right; c++) { + if (first) { + this.getCell(r, c).value = { + shareType, + formula, + ref: range, + result: getResult(r, c) + }; + first = false; + } else { + this.getCell(r, c).value = isShared ? { + sharedFormula: masterAddress, + result: getResult(r, c) + } : getResult(r, c); + } + } + } + } + + // ========================================================================= + // Images + addImage(imageId, range) { + const model = { + type: 'image', + imageId, + range + }; + this._media.push(new Image(this, model)); + } + getImages() { + return this._media.filter(m => m.type === 'image'); + } + addBackgroundImage(imageId) { + const model = { + type: 'background', + imageId + }; + this._media.push(new Image(this, model)); + } + getBackgroundImageId() { + const image = this._media.find(m => m.type === 'background'); + return image && image.imageId; + } + + // ========================================================================= + // Worksheet Protection + protect(password, options) { + // TODO: make this function truly async + // perhaps marshal to worker thread or something + return new Promise(resolve => { + this.sheetProtection = { + sheet: true + }; + if (options && 'spinCount' in options) { + // force spinCount to be integer >= 0 + options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000; + } + if (password) { + this.sheetProtection.algorithmName = 'SHA-512'; + this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64'); + this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount + this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(password, 'SHA512', this.sheetProtection.saltValue, this.sheetProtection.spinCount); + } + if (options) { + this.sheetProtection = Object.assign(this.sheetProtection, options); + if (!password && 'spinCount' in options) { + delete this.sheetProtection.spinCount; + } + } + resolve(); + }); + } + unprotect() { + this.sheetProtection = null; + } + + // ========================================================================= + // Tables + addTable(model) { + const table = new Table(this, model); + this.tables[model.name] = table; + return table; + } + getTable(name) { + return this.tables[name]; + } + removeTable(name) { + delete this.tables[name]; + } + getTables() { + return Object.values(this.tables); + } + + // =========================================================================== + // Conditional Formatting + addConditionalFormatting(cf) { + this.conditionalFormattings.push(cf); + } + removeConditionalFormatting(filter) { + if (typeof filter === 'number') { + this.conditionalFormattings.splice(filter, 1); + } else if (filter instanceof Function) { + this.conditionalFormattings = this.conditionalFormattings.filter(filter); + } else { + this.conditionalFormattings = []; + } + } + + // =========================================================================== + // Deprecated + get tabColor() { + // eslint-disable-next-line no-console + console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor'); + return this.properties.tabColor; + } + set tabColor(value) { + // eslint-disable-next-line no-console + console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor'); + this.properties.tabColor = value; + } + + // =========================================================================== + // Model + + get model() { + const model = { + id: this.id, + name: this.name, + dataValidations: this.dataValidations.model, + properties: this.properties, + state: this.state, + pageSetup: this.pageSetup, + headerFooter: this.headerFooter, + rowBreaks: this.rowBreaks, + views: this.views, + autoFilter: this.autoFilter, + media: this._media.map(medium => medium.model), + sheetProtection: this.sheetProtection, + tables: Object.values(this.tables).map(table => table.model), + conditionalFormattings: this.conditionalFormattings + }; + + // ================================================= + // columns + model.cols = Column.toModel(this.columns); + + // ========================================================== + // Rows + const rows = model.rows = []; + const dimensions = model.dimensions = new Range(); + this._rows.forEach(row => { + const rowModel = row && row.model; + if (rowModel) { + dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max); + rows.push(rowModel); + } + }); + + // ========================================================== + // Merges + model.merges = []; + _.each(this._merges, merge => { + model.merges.push(merge.range); + }); + return model; + } + _parseRows(model) { + this._rows = []; + model.rows.forEach(rowModel => { + const row = new Row(this, rowModel.number); + this._rows[row.number - 1] = row; + row.model = rowModel; + }); + } + _parseMergeCells(model) { + _.each(model.mergeCells, merge => { + // Do not merge styles when importing an Excel file + // since each cell may have different styles intentionally. + this.mergeCellsWithoutStyle(merge); + }); + } + set model(value) { + this.name = value.name; + this._columns = Column.fromModel(this, value.cols); + this._parseRows(value); + this._parseMergeCells(value); + this.dataValidations = new DataValidations(value.dataValidations); + this.properties = value.properties; + this.pageSetup = value.pageSetup; + this.headerFooter = value.headerFooter; + this.views = value.views; + this.autoFilter = value.autoFilter; + this._media = value.media.map(medium => new Image(this, medium)); + this.sheetProtection = value.sheetProtection; + this.tables = value.tables.reduce((tables, table) => { + const t = new Table(); + t.model = table; + tables[table.name] = t; + return tables; + }, {}); + this.conditionalFormattings = value.conditionalFormattings; + } +} +module.exports = Worksheet; + +},{"../utils/col-cache":19,"../utils/copy-style":20,"../utils/encryptor":21,"../utils/under-dash":26,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(require,module,exports){ +"use strict"; + +// this bundle is built without polyfill leaving apps the freedom to add their own +const ExcelJS = { + Workbook: require('./doc/workbook') +}; + +// Object.assign mono-fill +const Enums = require('./doc/enums'); +Object.keys(Enums).forEach(key => { + ExcelJS[key] = Enums[key]; +}); +module.exports = ExcelJS; + +},{"./doc/enums":7,"./doc/workbook":13}],16:[function(require,module,exports){ +"use strict"; + +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8'); +function bufferToString(chunk) { + if (typeof chunk === 'string') { + return chunk; + } + if (textDecoder) { + return textDecoder.decode(chunk); + } + return chunk.toString(); +} +exports.bufferToString = bufferToString; + +},{}],17:[function(require,module,exports){ +"use strict"; + +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8'); +const { + Buffer +} = require('buffer'); +function stringToBuffer(str) { + if (typeof str !== 'string') { + return str; + } + if (textEncoder) { + return Buffer.from(textEncoder.encode(str).buffer); + } + return Buffer.from(str); +} +exports.stringToBuffer = stringToBuffer; + +},{"buffer":220}],18:[function(require,module,exports){ +"use strict"; + +const _ = require('./under-dash'); +const colCache = require('./col-cache'); +class CellMatrix { + constructor(template) { + this.template = template; + this.sheets = {}; + } + addCell(addressStr) { + this.addCellEx(colCache.decodeEx(addressStr)); + } + getCell(addressStr) { + return this.findCellEx(colCache.decodeEx(addressStr), true); + } + findCell(addressStr) { + return this.findCellEx(colCache.decodeEx(addressStr), false); + } + findCellAt(sheetName, rowNumber, colNumber) { + const sheet = this.sheets[sheetName]; + const row = sheet && sheet[rowNumber]; + return row && row[colNumber]; + } + addCellEx(address) { + if (address.top) { + for (let row = address.top; row <= address.bottom; row++) { + for (let col = address.left; col <= address.right; col++) { + this.getCellAt(address.sheetName, row, col); + } + } + } else { + this.findCellEx(address, true); + } + } + getCellEx(address) { + return this.findCellEx(address, true); + } + findCellEx(address, create) { + const sheet = this.findSheet(address, create); + const row = this.findSheetRow(sheet, address, create); + return this.findRowCell(row, address, create); + } + getCellAt(sheetName, rowNumber, colNumber) { + const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []); + const row = sheet[rowNumber] || (sheet[rowNumber] = []); + const cell = row[colNumber] || (row[colNumber] = { + sheetName, + address: colCache.n2l(colNumber) + rowNumber, + row: rowNumber, + col: colNumber + }); + return cell; + } + removeCellEx(address) { + const sheet = this.findSheet(address); + if (!sheet) { + return; + } + const row = this.findSheetRow(sheet, address); + if (!row) { + return; + } + delete row[address.col]; + } + forEachInSheet(sheetName, callback) { + const sheet = this.sheets[sheetName]; + if (sheet) { + sheet.forEach((row, rowNumber) => { + if (row) { + row.forEach((cell, colNumber) => { + if (cell) { + callback(cell, rowNumber, colNumber); + } + }); + } + }); + } + } + forEach(callback) { + _.each(this.sheets, (sheet, sheetName) => { + this.forEachInSheet(sheetName, callback); + }); + } + map(callback) { + const results = []; + this.forEach(cell => { + results.push(callback(cell)); + }); + return results; + } + findSheet(address, create) { + const name = address.sheetName; + if (this.sheets[name]) { + return this.sheets[name]; + } + if (create) { + return this.sheets[name] = []; + } + return undefined; + } + findSheetRow(sheet, address, create) { + const { + row + } = address; + if (sheet && sheet[row]) { + return sheet[row]; + } + if (create) { + return sheet[row] = []; + } + return undefined; + } + findRowCell(row, address, create) { + const { + col + } = address; + if (row && row[col]) { + return row[col]; + } + if (create) { + return row[col] = this.template ? Object.assign(address, JSON.parse(JSON.stringify(this.template))) : address; + } + return undefined; + } + spliceRows(sheetName, start, numDelete, numInsert) { + const sheet = this.sheets[sheetName]; + if (sheet) { + const inserts = []; + for (let i = 0; i < numInsert; i++) { + inserts.push([]); + } + sheet.splice(start, numDelete, ...inserts); + } + } + spliceColumns(sheetName, start, numDelete, numInsert) { + const sheet = this.sheets[sheetName]; + if (sheet) { + const inserts = []; + for (let i = 0; i < numInsert; i++) { + inserts.push(null); + } + _.each(sheet, row => { + row.splice(start, numDelete, ...inserts); + }); + } + } +} +module.exports = CellMatrix; + +},{"./col-cache":19,"./under-dash":26}],19:[function(require,module,exports){ +"use strict"; + +const addressRegex = /^[A-Z]+\d+$/; +// ========================================================================= +// Column Letter to Number conversion +const colCache = { + _dictionary: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'], + _l2nFill: 0, + _l2n: {}, + _n2l: [], + _level(n) { + if (n <= 26) { + return 1; + } + if (n <= 26 * 26) { + return 2; + } + return 3; + }, + _fill(level) { + let c; + let v; + let l1; + let l2; + let l3; + let n = 1; + if (level >= 4) { + throw new Error('Out of bounds. Excel supports columns from 1 to 16384'); + } + if (this._l2nFill < 1 && level >= 1) { + while (n <= 26) { + c = this._dictionary[n - 1]; + this._n2l[n] = c; + this._l2n[c] = n; + n++; + } + this._l2nFill = 1; + } + if (this._l2nFill < 2 && level >= 2) { + n = 27; + while (n <= 26 + 26 * 26) { + v = n - (26 + 1); + l1 = v % 26; + l2 = Math.floor(v / 26); + c = this._dictionary[l2] + this._dictionary[l1]; + this._n2l[n] = c; + this._l2n[c] = n; + n++; + } + this._l2nFill = 2; + } + if (this._l2nFill < 3 && level >= 3) { + n = 26 + 26 * 26 + 1; + while (n <= 16384) { + v = n - (26 * 26 + 26 + 1); + l1 = v % 26; + l2 = Math.floor(v / 26) % 26; + l3 = Math.floor(v / (26 * 26)); + c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1]; + this._n2l[n] = c; + this._l2n[c] = n; + n++; + } + this._l2nFill = 3; + } + }, + l2n(l) { + if (!this._l2n[l]) { + this._fill(l.length); + } + if (!this._l2n[l]) { + throw new Error(`Out of bounds. Invalid column letter: ${l}`); + } + return this._l2n[l]; + }, + n2l(n) { + if (n < 1 || n > 16384) { + throw new Error(`${n} is out of bounds. Excel supports columns from 1 to 16384`); + } + if (!this._n2l[n]) { + this._fill(this._level(n)); + } + return this._n2l[n]; + }, + // ========================================================================= + // Address processing + _hash: {}, + // check if value looks like an address + validateAddress(value) { + if (!addressRegex.test(value)) { + throw new Error(`Invalid Address: ${value}`); + } + return true; + }, + // convert address string into structure + decodeAddress(value) { + const addr = value.length < 5 && this._hash[value]; + if (addr) { + return addr; + } + let hasCol = false; + let col = ''; + let colNumber = 0; + let hasRow = false; + let row = ''; + let rowNumber = 0; + for (let i = 0, char; i < value.length; i++) { + char = value.charCodeAt(i); + // col should before row + if (!hasRow && char >= 65 && char <= 90) { + // 65 = 'A'.charCodeAt(0) + // 90 = 'Z'.charCodeAt(0) + hasCol = true; + col += value[i]; + // colNumber starts from 1 + colNumber = colNumber * 26 + char - 64; + } else if (char >= 48 && char <= 57) { + // 48 = '0'.charCodeAt(0) + // 57 = '9'.charCodeAt(0) + hasRow = true; + row += value[i]; + // rowNumber starts from 0 + rowNumber = rowNumber * 10 + char - 48; + } else if (hasRow && hasCol && char !== 36) { + // 36 = '$'.charCodeAt(0) + break; + } + } + if (!hasCol) { + colNumber = undefined; + } else if (colNumber > 16384) { + throw new Error(`Out of bounds. Invalid column letter: ${col}`); + } + if (!hasRow) { + rowNumber = undefined; + } + + // in case $row$col + value = col + row; + const address = { + address: value, + col: colNumber, + row: rowNumber, + $col$row: `$${col}$${row}` + }; + + // mem fix - cache only the tl 100x100 square + if (colNumber <= 100 && rowNumber <= 100) { + this._hash[value] = address; + this._hash[address.$col$row] = address; + } + return address; + }, + // convert r,c into structure (if only 1 arg, assume r is address string) + getAddress(r, c) { + if (c) { + const address = this.n2l(c) + r; + return this.decodeAddress(address); + } + return this.decodeAddress(r); + }, + // convert [address], [tl:br] into address structures + decode(value) { + const parts = value.split(':'); + if (parts.length === 2) { + const tl = this.decodeAddress(parts[0]); + const br = this.decodeAddress(parts[1]); + const result = { + top: Math.min(tl.row, br.row), + left: Math.min(tl.col, br.col), + bottom: Math.max(tl.row, br.row), + right: Math.max(tl.col, br.col) + }; + // reconstruct tl, br and dimensions + result.tl = this.n2l(result.left) + result.top; + result.br = this.n2l(result.right) + result.bottom; + result.dimensions = `${result.tl}:${result.br}`; + return result; + } + return this.decodeAddress(value); + }, + // convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures + decodeEx(value) { + const groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/); + const sheetName = groups[1] || groups[2]; // Qouted and unqouted groups + const reference = groups[3]; // Remaining address + + const parts = reference.split(':'); + if (parts.length > 1) { + let tl = this.decodeAddress(parts[0]); + let br = this.decodeAddress(parts[1]); + const top = Math.min(tl.row, br.row); + const left = Math.min(tl.col, br.col); + const bottom = Math.max(tl.row, br.row); + const right = Math.max(tl.col, br.col); + tl = this.n2l(left) + top; + br = this.n2l(right) + bottom; + return { + top, + left, + bottom, + right, + sheetName, + tl: { + address: tl, + col: left, + row: top, + $col$row: `$${this.n2l(left)}$${top}`, + sheetName + }, + br: { + address: br, + col: right, + row: bottom, + $col$row: `$${this.n2l(right)}$${bottom}`, + sheetName + }, + dimensions: `${tl}:${br}` + }; + } + if (reference.startsWith('#')) { + return sheetName ? { + sheetName, + error: reference + } : { + error: reference + }; + } + const address = this.decodeAddress(reference); + return sheetName ? { + sheetName, + ...address + } : address; + }, + // convert row,col into address string + encodeAddress(row, col) { + return colCache.n2l(col) + row; + }, + // convert row,col into string address or t,l,b,r into range + encode() { + switch (arguments.length) { + case 2: + return colCache.encodeAddress(arguments[0], arguments[1]); + case 4: + return `${colCache.encodeAddress(arguments[0], arguments[1])}:${colCache.encodeAddress(arguments[2], arguments[3])}`; + default: + throw new Error('Can only encode with 2 or 4 arguments'); + } + }, + // return true if address is contained within range + inRange(range, address) { + const [left, top,, right, bottom] = range; + const [col, row] = address; + return col >= left && col <= right && row >= top && row <= bottom; + } +}; +module.exports = colCache; + +},{}],20:[function(require,module,exports){ +"use strict"; + +const oneDepthCopy = (obj, nestKeys) => ({ + ...obj, + ...nestKeys.reduce((memo, key) => { + if (obj[key]) memo[key] = { + ...obj[key] + }; + return memo; + }, {}) +}); +const setIfExists = function (src, dst, key) { + let nestKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + if (src[key]) dst[key] = oneDepthCopy(src[key], nestKeys); +}; +const isEmptyObj = obj => Object.keys(obj).length === 0; +const copyStyle = style => { + if (!style) return style; + if (isEmptyObj(style)) return {}; + const copied = { + ...style + }; + setIfExists(style, copied, 'font', ['color']); + setIfExists(style, copied, 'alignment'); + setIfExists(style, copied, 'protection'); + if (style.border) { + setIfExists(style, copied, 'border'); + setIfExists(style.border, copied.border, 'top', ['color']); + setIfExists(style.border, copied.border, 'left', ['color']); + setIfExists(style.border, copied.border, 'bottom', ['color']); + setIfExists(style.border, copied.border, 'right', ['color']); + setIfExists(style.border, copied.border, 'diagonal', ['color']); + } + if (style.fill) { + setIfExists(style, copied, 'fill', ['fgColor', 'bgColor', 'center']); + if (style.fill.stops) { + copied.fill.stops = style.fill.stops.map(s => oneDepthCopy(s, ['color'])); + } + } + return copied; +}; +exports.copyStyle = copyStyle; + +},{}],21:[function(require,module,exports){ +(function (Buffer){(function (){ +'use strict'; + +const crypto = require('crypto'); +const Encryptor = { + /** + * Calculate a hash of the concatenated buffers with the given algorithm. + * @param {string} algorithm - The hash algorithm. + * @returns {Buffer} The hash + */ + hash(algorithm) { + const hash = crypto.createHash(algorithm); + for (var _len = arguments.length, buffers = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + buffers[_key - 1] = arguments[_key]; + } + hash.update(Buffer.concat(buffers)); + return hash.digest(); + }, + /** + * Convert a password into an encryption key + * @param {string} password - The password + * @param {string} hashAlgorithm - The hash algoritm + * @param {string} saltValue - The salt value + * @param {number} spinCount - The spin count + * @param {number} keyBits - The length of the key in bits + * @param {Buffer} blockKey - The block key + * @returns {Buffer} The encryption key + */ + convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) { + hashAlgorithm = hashAlgorithm.toLowerCase(); + const hashes = crypto.getHashes(); + if (hashes.indexOf(hashAlgorithm) < 0) { + throw new Error(`Hash algorithm '${hashAlgorithm}' not supported!`); + } + + // Password must be in unicode buffer + const passwordBuffer = Buffer.from(password, 'utf16le'); + // Generate the initial hash + let key = this.hash(hashAlgorithm, Buffer.from(saltValue, 'base64'), passwordBuffer); + // Now regenerate until spin count + for (let i = 0; i < spinCount; i++) { + const iterator = Buffer.alloc(4); + // this is the 'special' element of Excel password hashing + // that stops us from using crypto.pbkdf2() + iterator.writeUInt32LE(i, 0); + key = this.hash(hashAlgorithm, key, iterator); + } + return key.toString('base64'); + }, + /** + * Generates cryptographically strong pseudo-random data. + * @param size The size argument is a number indicating the number of bytes to generate. + */ + randomBytes(size) { + return crypto.randomBytes(size); + } +}; +module.exports = Encryptor; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"buffer":220,"crypto":229}],22:[function(require,module,exports){ +"use strict"; + +const { + SaxesParser +} = require('saxes'); +const { + PassThrough +} = require('readable-stream'); +const { + bufferToString +} = require('./browser-buffer-decode'); +module.exports = async function* (iterable) { + // TODO: Remove once node v8 is deprecated + // Detect and upgrade old streams + if (iterable.pipe && !iterable[Symbol.asyncIterator]) { + iterable = iterable.pipe(new PassThrough()); + } + const saxesParser = new SaxesParser(); + let error; + saxesParser.on('error', err => { + error = err; + }); + let events = []; + saxesParser.on('opentag', value => events.push({ + eventType: 'opentag', + value + })); + saxesParser.on('text', value => events.push({ + eventType: 'text', + value + })); + saxesParser.on('closetag', value => events.push({ + eventType: 'closetag', + value + })); + for await (const chunk of iterable) { + saxesParser.write(bufferToString(chunk)); + // saxesParser.write and saxesParser.on() are synchronous, + // so we can only reach the below line once all events have been emitted + if (error) throw error; + // As a performance optimization, we gather all events instead of passing + // them one by one, which would cause each event to go through the event queue + yield events; + events = []; + } +}; + +},{"./browser-buffer-decode":16,"readable-stream":330,"saxes":334}],23:[function(require,module,exports){ +"use strict"; + +const colCache = require('./col-cache'); + +// const cellRefRegex = /(([a-z_\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i; +const replacementCandidateRx = /(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi; +const CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i; +function slideFormula(formula, fromCell, toCell) { + const offset = colCache.decode(fromCell); + const to = colCache.decode(toCell); + return formula.replace(replacementCandidateRx, (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => { + if (trailingParen) { + return refMatch; + } + const match = CRrx.exec(addrPart); + if (match) { + const colDollar = match[1]; + const colStr = match[2].toUpperCase(); + const rowDollar = match[3]; + const rowStr = match[4]; + if (colStr.length > 3 || colStr.length === 3 && colStr > 'XFD') { + // > XFD is the highest col number in excel 2007 and beyond, so this is a named range + return refMatch; + } + let col = colCache.l2n(colStr); + let row = parseInt(rowStr, 10); + if (!colDollar) { + col += to.col - offset.col; + } + if (!rowDollar) { + row += to.row - offset.row; + } + const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row; + return res; + } + return refMatch; + }); +} +module.exports = { + slideFormula +}; + +},{"./col-cache":19}],24:[function(require,module,exports){ +(function (process,Buffer){(function (){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const Stream = require('readable-stream'); +const utils = require('./utils'); +const StringBuf = require('./string-buf'); + +// ============================================================================= +// data chunks - encapsulating incoming data +class StringChunk { + constructor(data, encoding) { + this._data = data; + this._encoding = encoding; + } + get length() { + return this.toBuffer().length; + } + + // copy to target buffer + copy(target, targetOffset, offset, length) { + return this.toBuffer().copy(target, targetOffset, offset, length); + } + toBuffer() { + if (!this._buffer) { + this._buffer = Buffer.from(this._data, this._encoding); + } + return this._buffer; + } +} +class StringBufChunk { + constructor(data) { + this._data = data; + } + get length() { + return this._data.length; + } + + // copy to target buffer + copy(target, targetOffset, offset, length) { + // eslint-disable-next-line no-underscore-dangle + return this._data._buf.copy(target, targetOffset, offset, length); + } + toBuffer() { + return this._data.toBuffer(); + } +} +class BufferChunk { + constructor(data) { + this._data = data; + } + get length() { + return this._data.length; + } + + // copy to target buffer + copy(target, targetOffset, offset, length) { + this._data.copy(target, targetOffset, offset, length); + } + toBuffer() { + return this._data; + } +} + +// ============================================================================= +// ReadWriteBuf - a single buffer supporting simple read-write +class ReadWriteBuf { + constructor(size) { + this.size = size; + // the buffer + this.buffer = Buffer.alloc(size); + // read index + this.iRead = 0; + // write index + this.iWrite = 0; + } + toBuffer() { + if (this.iRead === 0 && this.iWrite === this.size) { + return this.buffer; + } + const buf = Buffer.alloc(this.iWrite - this.iRead); + this.buffer.copy(buf, 0, this.iRead, this.iWrite); + return buf; + } + get length() { + return this.iWrite - this.iRead; + } + get eod() { + return this.iRead === this.iWrite; + } + get full() { + return this.iWrite === this.size; + } + read(size) { + let buf; + // read size bytes from buffer and return buffer + if (size === 0) { + // special case - return null if no data requested + return null; + } + if (size === undefined || size >= this.length) { + // if no size specified or size is at least what we have then return all of the bytes + buf = this.toBuffer(); + this.iRead = this.iWrite; + return buf; + } + + // otherwise return a chunk + buf = Buffer.alloc(size); + this.buffer.copy(buf, 0, this.iRead, size); + this.iRead += size; + return buf; + } + write(chunk, offset, length) { + // write as many bytes from data from optional source offset + // and return number of bytes written + const size = Math.min(length, this.size - this.iWrite); + chunk.copy(this.buffer, this.iWrite, offset, offset + size); + this.iWrite += size; + return size; + } +} + +// ============================================================================= +// StreamBuf - a multi-purpose read-write stream +// As MemBuf - write as much data as you like. Then call toBuffer() to consolidate +// As StreamHub - pipe to multiple writables +// As readable stream - feed data into the writable part and have some other code read from it. + +// Note: Not sure why but StreamBuf does not like JS "class" sugar. It fails the +// integration tests +const StreamBuf = function (options) { + options = options || {}; + this.bufSize = options.bufSize || 1024 * 1024; + this.buffers = []; + + // batch mode fills a buffer completely before passing the data on + // to pipes or 'readable' event listeners + this.batch = options.batch || false; + this.corked = false; + // where in the current writable buffer we're up to + this.inPos = 0; + + // where in the current readable buffer we've read up to + this.outPos = 0; + + // consuming pipe streams go here + this.pipes = []; + + // controls emit('data') + this.paused = false; + this.encoding = null; +}; +utils.inherits(StreamBuf, Stream.Duplex, { + toBuffer() { + switch (this.buffers.length) { + case 0: + return null; + case 1: + return this.buffers[0].toBuffer(); + default: + return Buffer.concat(this.buffers.map(rwBuf => rwBuf.toBuffer())); + } + }, + // writable + // event drain - if write returns false (which it won't), indicates when safe to write again. + // finish - end() has been called + // pipe(src) - pipe() has been called on readable + // unpipe(src) - unpipe() has been called on readable + // error - duh + + _getWritableBuffer() { + if (this.buffers.length) { + const last = this.buffers[this.buffers.length - 1]; + if (!last.full) { + return last; + } + } + const buf = new ReadWriteBuf(this.bufSize); + this.buffers.push(buf); + return buf; + }, + async _pipe(chunk) { + const write = function (pipe) { + return new Promise(resolve => { + pipe.write(chunk.toBuffer(), () => { + resolve(); + }); + }); + }; + await Promise.all(this.pipes.map(write)); + }, + _writeToBuffers(chunk) { + let inPos = 0; + const inLen = chunk.length; + while (inPos < inLen) { + // find writable buffer + const buffer = this._getWritableBuffer(); + + // write some data + inPos += buffer.write(chunk, inPos, inLen - inPos); + } + }, + async write(data, encoding, callback) { + if (encoding instanceof Function) { + callback = encoding; + encoding = 'utf8'; + } + callback = callback || utils.nop; + + // encapsulate data into a chunk + let chunk; + if (data instanceof StringBuf) { + chunk = new StringBufChunk(data); + } else if (data instanceof Buffer) { + chunk = new BufferChunk(data); + } else if (typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer) { + chunk = new StringChunk(data, encoding); + } else { + throw new Error('Chunk must be one of type String, Buffer or StringBuf.'); + } + + // now, do something with the chunk + if (this.pipes.length) { + if (this.batch) { + this._writeToBuffers(chunk); + while (!this.corked && this.buffers.length > 1) { + this._pipe(this.buffers.shift()); + } + } else if (!this.corked) { + await this._pipe(chunk); + callback(); + } else { + this._writeToBuffers(chunk); + process.nextTick(callback); + } + } else { + if (!this.paused) { + this.emit('data', chunk.toBuffer()); + } + this._writeToBuffers(chunk); + this.emit('readable'); + } + return true; + }, + cork() { + this.corked = true; + }, + _flush( /* destination */ + ) { + // if we have comsumers... + if (this.pipes.length) { + // and there's stuff not written + while (this.buffers.length) { + this._pipe(this.buffers.shift()); + } + } + }, + uncork() { + this.corked = false; + this._flush(); + }, + end(chunk, encoding, callback) { + const writeComplete = error => { + if (error) { + callback(error); + } else { + this._flush(); + this.pipes.forEach(pipe => { + pipe.end(); + }); + this.emit('finish'); + } + }; + if (chunk) { + this.write(chunk, encoding, writeComplete); + } else { + writeComplete(); + } + }, + // readable + // event readable - some data is now available + // event data - switch to flowing mode - feeds chunks to handler + // event end - no more data + // event close - optional, indicates upstream close + // event error - duh + read(size) { + let buffers; + // read min(buffer, size || infinity) + if (size) { + buffers = []; + while (size && this.buffers.length && !this.buffers[0].eod) { + const first = this.buffers[0]; + const buffer = first.read(size); + size -= buffer.length; + buffers.push(buffer); + if (first.eod && first.full) { + this.buffers.shift(); + } + } + return Buffer.concat(buffers); + } + buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean); + this.buffers = []; + return Buffer.concat(buffers); + }, + setEncoding(encoding) { + // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects + this.encoding = encoding; + }, + pause() { + this.paused = true; + }, + resume() { + this.paused = false; + }, + isPaused() { + return !!this.paused; + }, + pipe(destination) { + // add destination to pipe list & write current buffer + this.pipes.push(destination); + if (!this.paused && this.buffers.length) { + this.end(); + } + }, + unpipe(destination) { + // remove destination from pipe list + this.pipes = this.pipes.filter(pipe => pipe !== destination); + }, + unshift( /* chunk */ + ) { + // some numpty has read some data that's not for them and they want to put it back! + // Might implement this some day + throw new Error('Not Implemented'); + }, + wrap( /* stream */ + ) { + // not implemented + throw new Error('Not Implemented'); + } +}); +module.exports = StreamBuf; + +}).call(this)}).call(this,require('_process'),require("buffer").Buffer) + +},{"./string-buf":25,"./utils":27,"_process":306,"buffer":220,"readable-stream":330}],25:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +// StringBuf - a way to keep string memory operations to a minimum +// while building the strings for the xml files +class StringBuf { + constructor(options) { + this._buf = Buffer.alloc(options && options.size || 16384); + this._encoding = options && options.encoding || 'utf8'; + + // where in the buffer we are at + this._inPos = 0; + + // for use by toBuffer() + this._buffer = undefined; + } + get length() { + return this._inPos; + } + get capacity() { + return this._buf.length; + } + get buffer() { + return this._buf; + } + toBuffer() { + // return the current data as a single enclosing buffer + if (!this._buffer) { + this._buffer = Buffer.alloc(this.length); + this._buf.copy(this._buffer, 0, 0, this.length); + } + return this._buffer; + } + reset(position) { + position = position || 0; + this._buffer = undefined; + this._inPos = position; + } + _grow(min) { + let size = this._buf.length * 2; + while (size < min) { + size *= 2; + } + const buf = Buffer.alloc(size); + this._buf.copy(buf, 0); + this._buf = buf; + } + addText(text) { + this._buffer = undefined; + let inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding); + + // if we've hit (or nearing capacity), grow the buf + while (inPos >= this._buf.length - 4) { + this._grow(this._inPos + text.length); + + // keep trying to write until we've completely written the text + inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding); + } + this._inPos = inPos; + } + addStringBuf(inBuf) { + if (inBuf.length) { + this._buffer = undefined; + if (this.length + inBuf.length > this.capacity) { + this._grow(this.length + inBuf.length); + } + // eslint-disable-next-line no-underscore-dangle + inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length); + this._inPos += inBuf.length; + } + } +} +module.exports = StringBuf; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"buffer":220}],26:[function(require,module,exports){ +"use strict"; + +const { + toString +} = Object.prototype; +const escapeHtmlRegex = /["&<>]/; +const _ = { + each: function each(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + obj.forEach(cb); + } else { + Object.keys(obj).forEach(key => { + cb(obj[key], key); + }); + } + } + }, + some: function some(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + return obj.some(cb); + } + return Object.keys(obj).some(key => cb(obj[key], key)); + } + return false; + }, + every: function every(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + return obj.every(cb); + } + return Object.keys(obj).every(key => cb(obj[key], key)); + } + return true; + }, + map: function map(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + return obj.map(cb); + } + return Object.keys(obj).map(key => cb(obj[key], key)); + } + return []; + }, + keyBy(a, p) { + return a.reduce((o, v) => { + o[v[p]] = v; + return o; + }, {}); + }, + isEqual: function isEqual(a, b) { + const aType = typeof a; + const bType = typeof b; + const aArray = Array.isArray(a); + const bArray = Array.isArray(b); + let keys; + if (aType !== bType) { + return false; + } + switch (typeof a) { + case 'object': + if (aArray || bArray) { + if (aArray && bArray) { + return a.length === b.length && a.every((aValue, index) => { + const bValue = b[index]; + return _.isEqual(aValue, bValue); + }); + } + return false; + } + if (a === null || b === null) { + return a === b; + } + + // Compare object keys and values + keys = Object.keys(a); + if (Object.keys(b).length !== keys.length) { + return false; + } + for (const key of keys) { + if (!b.hasOwnProperty(key)) { + return false; + } + } + return _.every(a, (aValue, key) => { + const bValue = b[key]; + return _.isEqual(aValue, bValue); + }); + default: + return a === b; + } + }, + escapeHtml(html) { + const regexResult = escapeHtmlRegex.exec(html); + if (!regexResult) return html; + let result = ''; + let escape = ''; + let lastIndex = 0; + let i = regexResult.index; + for (; i < html.length; i++) { + switch (html.charAt(i)) { + case '"': + escape = '"'; + break; + case '&': + escape = '&'; + break; + case '\'': + escape = '''; + break; + case '<': + escape = '<'; + break; + case '>': + escape = '>'; + break; + default: + continue; + } + if (lastIndex !== i) result += html.substring(lastIndex, i); + lastIndex = i + 1; + result += escape; + } + if (lastIndex !== i) return result + html.substring(lastIndex, i); + return result; + }, + strcmp(a, b) { + if (a < b) return -1; + if (a > b) return 1; + return 0; + }, + isUndefined(val) { + return toString.call(val) === '[object Undefined]'; + }, + isObject(val) { + return toString.call(val) === '[object Object]'; + }, + deepMerge() { + const target = arguments[0] || {}; + const { + length + } = arguments; + // eslint-disable-next-line one-var + let src, clone, copyIsArray; + function assignValue(val, key) { + src = target[key]; + copyIsArray = Array.isArray(val); + if (_.isObject(val) || copyIsArray) { + if (copyIsArray) { + copyIsArray = false; + clone = src && Array.isArray(src) ? src : []; + } else { + clone = src && _.isObject(src) ? src : {}; + } + target[key] = _.deepMerge(clone, val); + } else if (!_.isUndefined(val)) { + target[key] = val; + } + } + for (let i = 0; i < length; i++) { + _.each(arguments[i], assignValue); + } + return target; + } +}; +module.exports = _; + +},{}],27:[function(require,module,exports){ +(function (global,setImmediate){(function (){ +"use strict"; + +const fs = require('fs'); + +// useful stuff +const inherits = function (cls, superCtor, statics, prototype) { + // eslint-disable-next-line no-underscore-dangle + cls.super_ = superCtor; + if (!prototype) { + prototype = statics; + statics = null; + } + if (statics) { + Object.keys(statics).forEach(i => { + Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i)); + }); + } + const properties = { + constructor: { + value: cls, + enumerable: false, + writable: false, + configurable: true + } + }; + if (prototype) { + Object.keys(prototype).forEach(i => { + properties[i] = Object.getOwnPropertyDescriptor(prototype, i); + }); + } + cls.prototype = Object.create(superCtor.prototype, properties); +}; + +// eslint-disable-next-line no-control-regex +const xmlDecodeRegex = /[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/; +const utils = { + nop() {}, + promiseImmediate(value) { + return new Promise(resolve => { + if (global.setImmediate) { + setImmediate(() => { + resolve(value); + }); + } else { + // poorman's setImmediate - must wait at least 1ms + setTimeout(() => { + resolve(value); + }, 1); + } + }); + }, + inherits, + dateToExcel(d, date1904) { + return 25569 + d.getTime() / (24 * 3600 * 1000) - (date1904 ? 1462 : 0); + }, + excelToDate(v, date1904) { + const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000); + return new Date(millisecondSinceEpoch); + }, + parsePath(filepath) { + const last = filepath.lastIndexOf('/'); + return { + path: filepath.substring(0, last), + name: filepath.substring(last + 1) + }; + }, + getRelsPath(filepath) { + const path = utils.parsePath(filepath); + return `${path.path}/_rels/${path.name}.rels`; + }, + xmlEncode(text) { + const regexResult = xmlDecodeRegex.exec(text); + if (!regexResult) return text; + let result = ''; + let escape = ''; + let lastIndex = 0; + let i = regexResult.index; + for (; i < text.length; i++) { + const charCode = text.charCodeAt(i); + switch (charCode) { + case 34: + // " + escape = '"'; + break; + case 38: + // & + escape = '&'; + break; + case 39: + // ' + escape = '''; + break; + case 60: + // < + escape = '<'; + break; + case 62: + // > + escape = '>'; + break; + case 127: + escape = ''; + break; + default: + { + if (charCode <= 31 && (charCode <= 8 || charCode >= 11 && charCode !== 13)) { + escape = ''; + break; + } + continue; + } + } + if (lastIndex !== i) result += text.substring(lastIndex, i); + lastIndex = i + 1; + if (escape) result += escape; + } + if (lastIndex !== i) return result + text.substring(lastIndex, i); + return result; + }, + xmlDecode(text) { + return text.replace(/&([a-z]*);/g, c => { + switch (c) { + case '<': + return '<'; + case '>': + return '>'; + case '&': + return '&'; + case ''': + return '\''; + case '"': + return '"'; + default: + return c; + } + }); + }, + validInt(value) { + const i = parseInt(value, 10); + return !Number.isNaN(i) ? i : 0; + }, + isDateFmt(fmt) { + if (!fmt) { + return false; + } + + // must remove all chars inside quotes and [] + fmt = fmt.replace(/\[[^\]]*]/g, ''); + fmt = fmt.replace(/"[^"]*"/g, ''); + // then check for date formatting chars + const result = fmt.match(/[ymdhMsb]+/) !== null; + return result; + }, + fs: { + exists(path) { + return new Promise(resolve => { + fs.access(path, fs.constants.F_OK, err => { + resolve(!err); + }); + }); + } + }, + toIsoDateString(dt) { + return dt.toIsoString().subsstr(0, 10); + }, + parseBoolean(value) { + return value === true || value === 'true' || value === 1 || value === '1'; + } +}; +module.exports = utils; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) + +},{"fs":216,"timers":361}],28:[function(require,module,exports){ +"use strict"; + +const _ = require('./under-dash'); +const utils = require('./utils'); + +// constants +const OPEN_ANGLE = '<'; +const CLOSE_ANGLE = '>'; +const OPEN_ANGLE_SLASH = ''; +function pushAttribute(xml, name, value) { + xml.push(` ${name}="${utils.xmlEncode(value.toString())}"`); +} +function pushAttributes(xml, attributes) { + if (attributes) { + const tmp = []; + _.each(attributes, (value, name) => { + if (value !== undefined) { + pushAttribute(tmp, name, value); + } + }); + xml.push(tmp.join("")); + } +} +class XmlStream { + constructor() { + this._xml = []; + this._stack = []; + this._rollbacks = []; + } + get tos() { + return this._stack.length ? this._stack[this._stack.length - 1] : undefined; + } + get cursor() { + // handy way to track whether anything has been added + return this._xml.length; + } + openXml(docAttributes) { + const xml = this._xml; + // + xml.push('\n'); + } + openNode(name, attributes) { + const parent = this.tos; + const xml = this._xml; + if (parent && this.open) { + xml.push(CLOSE_ANGLE); + } + this._stack.push(name); + + // start streaming node + xml.push(OPEN_ANGLE); + xml.push(name); + pushAttributes(xml, attributes); + this.leaf = true; + this.open = true; + } + addAttribute(name, value) { + if (!this.open) { + throw new Error('Cannot write attributes to node if it is not open'); + } + if (value !== undefined) { + pushAttribute(this._xml, name, value); + } + } + addAttributes(attrs) { + if (!this.open) { + throw new Error('Cannot write attributes to node if it is not open'); + } + pushAttributes(this._xml, attrs); + } + writeText(text) { + const xml = this._xml; + if (this.open) { + xml.push(CLOSE_ANGLE); + this.open = false; + } + this.leaf = false; + xml.push(utils.xmlEncode(text.toString())); + } + writeXml(xml) { + if (this.open) { + this._xml.push(CLOSE_ANGLE); + this.open = false; + } + this.leaf = false; + this._xml.push(xml); + } + closeNode() { + const node = this._stack.pop(); + const xml = this._xml; + if (this.leaf) { + xml.push(CLOSE_SLASH_ANGLE); + } else { + xml.push(OPEN_ANGLE_SLASH); + xml.push(node); + xml.push(CLOSE_ANGLE); + } + this.open = false; + this.leaf = false; + } + leafNode(name, attributes, text) { + this.openNode(name, attributes); + if (text !== undefined) { + // zeros need to be written + this.writeText(text); + } + this.closeNode(); + } + closeAll() { + while (this._stack.length) { + this.closeNode(); + } + } + addRollback() { + this._rollbacks.push({ + xml: this._xml.length, + stack: this._stack.length, + leaf: this.leaf, + open: this.open + }); + return this.cursor; + } + commit() { + this._rollbacks.pop(); + } + rollback() { + const r = this._rollbacks.pop(); + if (this._xml.length > r.xml) { + this._xml.splice(r.xml, this._xml.length - r.xml); + } + if (this._stack.length > r.stack) { + this._stack.splice(r.stack, this._stack.length - r.stack); + } + this.leaf = r.leaf; + this.open = r.open; + } + get xml() { + this.closeAll(); + return this._xml.join(''); + } +} +XmlStream.StdDocAttributes = { + version: '1.0', + encoding: 'UTF-8', + standalone: 'yes' +}; +module.exports = XmlStream; + +},{"./under-dash":26,"./utils":27}],29:[function(require,module,exports){ +(function (process){(function (){ +"use strict"; + +const events = require('events'); +const JSZip = require('jszip'); +const StreamBuf = require('./stream-buf'); +const { + stringToBuffer +} = require('./browser-buffer-encode'); + +// ============================================================================= +// The ZipWriter class +// Packs streamed data into an output zip stream +class ZipWriter extends events.EventEmitter { + constructor(options) { + super(); + this.options = Object.assign({ + type: 'nodebuffer', + compression: 'DEFLATE' + }, options); + this.zip = new JSZip(); + this.stream = new StreamBuf(); + } + append(data, options) { + if (options.hasOwnProperty('base64') && options.base64) { + this.zip.file(options.name, data, { + base64: true + }); + } else { + // https://www.npmjs.com/package/process + if (process.browser && typeof data === 'string') { + // use TextEncoder in browser + data = stringToBuffer(data); + } + this.zip.file(options.name, data); + } + } + async finalize() { + const content = await this.zip.generateAsync(this.options); + this.stream.end(content); + this.emit('finish'); + } + + // ========================================================================== + // Stream.Readable interface + read(size) { + return this.stream.read(size); + } + setEncoding(encoding) { + return this.stream.setEncoding(encoding); + } + pause() { + return this.stream.pause(); + } + resume() { + return this.stream.resume(); + } + isPaused() { + return this.stream.isPaused(); + } + pipe(destination, options) { + return this.stream.pipe(destination, options); + } + unpipe(destination) { + return this.stream.unpipe(destination); + } + unshift(chunk) { + return this.stream.unshift(chunk); + } + wrap(stream) { + return this.stream.wrap(stream); + } +} + +// ============================================================================= + +module.exports = { + ZipWriter +}; + +}).call(this)}).call(this,require('_process')) + +},{"./browser-buffer-encode":17,"./stream-buf":24,"_process":306,"events":261,"jszip":280}],30:[function(require,module,exports){ +"use strict"; + +module.exports = { + 0: { + f: 'General' + }, + 1: { + f: '0' + }, + 2: { + f: '0.00' + }, + 3: { + f: '#,##0' + }, + 4: { + f: '#,##0.00' + }, + 9: { + f: '0%' + }, + 10: { + f: '0.00%' + }, + 11: { + f: '0.00E+00' + }, + 12: { + f: '# ?/?' + }, + 13: { + f: '# ??/??' + }, + 14: { + f: 'mm-dd-yy' + }, + 15: { + f: 'd-mmm-yy' + }, + 16: { + f: 'd-mmm' + }, + 17: { + f: 'mmm-yy' + }, + 18: { + f: 'h:mm AM/PM' + }, + 19: { + f: 'h:mm:ss AM/PM' + }, + 20: { + f: 'h:mm' + }, + 21: { + f: 'h:mm:ss' + }, + 22: { + f: 'm/d/yy "h":mm' + }, + 27: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 28: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 29: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 30: { + 'zh-tw': 'm/d/yy ', + 'zh-cn': 'm-d-yy', + 'ja-jp': 'm/d/yy', + 'ko-kr': 'mm-dd-yy' + }, + 31: { + 'zh-tw': 'yyyy"年"m"月"d"日"', + 'zh-cn': 'yyyy"年"m"月"d"日"', + 'ja-jp': 'yyyy"年"m"月"d"日"', + 'ko-kr': 'yyyy"년" mm"월" dd"일"' + }, + 32: { + 'zh-tw': 'hh"時"mm"分"', + 'zh-cn': 'h"时"mm"分"', + 'ja-jp': 'h"時"mm"分"', + 'ko-kr': 'h"시" mm"분"' + }, + 33: { + 'zh-tw': 'hh"時"mm"分"ss"秒"', + 'zh-cn': 'h"时"mm"分"ss"秒"', + 'ja-jp': 'h"時"mm"分"ss"秒"', + 'ko-kr': 'h"시" mm"분" ss"초"' + }, + 34: { + 'zh-tw': '上午/下午 hh"時"mm"分"', + 'zh-cn': '上午/下午 h"时"mm"分"', + 'ja-jp': 'yyyy"年"m"月"', + 'ko-kr': 'yyyy-mm-dd' + }, + 35: { + 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"', + 'zh-cn': '上午/下午 h"时"mm"分"ss"秒"', + 'ja-jp': 'm"月"d"日"', + 'ko-kr': 'yyyy-mm-dd' + }, + 36: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 37: { + f: '#,##0 ;(#,##0)' + }, + 38: { + f: '#,##0 ;[Red](#,##0)' + }, + 39: { + f: '#,##0.00 ;(#,##0.00)' + }, + 40: { + f: '#,##0.00 ;[Red](#,##0.00)' + }, + 45: { + f: 'mm:ss' + }, + 46: { + f: '[h]:mm:ss' + }, + 47: { + f: 'mmss.0' + }, + 48: { + f: '##0.0E+0' + }, + 49: { + f: '@' + }, + 50: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 51: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 52: { + 'zh-tw': '上午/下午 hh"時"mm"分"', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': 'yyyy"年"m"月"', + 'ko-kr': 'yyyy-mm-dd' + }, + 53: { + 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': 'm"月"d"日"', + 'ko-kr': 'yyyy-mm-dd' + }, + 54: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 55: { + 'zh-tw': '上午/下午 hh"時"mm"分"', + 'zh-cn': '上午/下午 h"时"mm"分"', + 'ja-jp': 'yyyy"年"m"月"', + 'ko-kr': 'yyyy-mm-dd' + }, + 56: { + 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"', + 'zh-cn': '上午/下午 h"时"mm"分"ss"秒"', + 'ja-jp': 'm"月"d"日"', + 'ko-kr': 'yyyy-mm-dd' + }, + 57: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 58: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 59: { + 'th-th': 't0' + }, + 60: { + 'th-th': 't0.00' + }, + 61: { + 'th-th': 't#,##0' + }, + 62: { + 'th-th': 't#,##0.00' + }, + 67: { + 'th-th': 't0%' + }, + 68: { + 'th-th': 't0.00%' + }, + 69: { + 'th-th': 't# ?/?' + }, + 70: { + 'th-th': 't# ??/??' + }, + 81: { + 'th-th': 'd/m/bb' + } +}; + +},{}],31:[function(require,module,exports){ +'use strict'; + +module.exports = { + OfficeDocument: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', + Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain', + SharedStrings: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', + Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + CoreProperties: 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + ExtenderProperties: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties', + Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', + VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', + Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table' +}; + +},{}],32:[function(require,module,exports){ +"use strict"; + +const parseSax = require('../../utils/parse-sax'); +const XmlStream = require('../../utils/xml-stream'); + +/* 'virtual' methods used as a form of documentation */ +/* eslint-disable class-methods-use-this */ + +// Base class for Xforms +class BaseXform { + // constructor(/* model, name */) {} + + // ============================================================ + // Virtual Interface + prepare( /* model, options */ + ) { + // optional preparation (mutation) of model so it is ready for write + } + render( /* xmlStream, model */ + ) { + // convert model to xml + } + parseOpen(node) { + // XML node opened + } + parseText(text) { + // chunk of text encountered for current node + } + parseClose(name) { + // XML node closed + } + reconcile(model, options) { + // optional post-parse step (opposite to prepare) + } + + // ============================================================ + reset() { + // to make sure parses don't bleed to next iteration + this.model = null; + + // if we have a map - reset them too + if (this.map) { + Object.values(this.map).forEach(xform => { + if (xform instanceof BaseXform) { + xform.reset(); + } else if (xform.xform) { + xform.xform.reset(); + } + }); + } + } + mergeModel(obj) { + // set obj's props to this.model + this.model = Object.assign(this.model || {}, obj); + } + async parse(saxParser) { + for await (const events of saxParser) { + for (const { + eventType, + value + } of events) { + if (eventType === 'opentag') { + this.parseOpen(value); + } else if (eventType === 'text') { + this.parseText(value); + } else if (eventType === 'closetag') { + if (!this.parseClose(value.name)) { + return this.model; + } + } + } + } + return this.model; + } + async parseStream(stream) { + return this.parse(parseSax(stream)); + } + get xml() { + // convenience function to get the xml of this.model + // useful for manager types that are built during the prepare phase + return this.toXml(this.model); + } + toXml(model) { + const xmlStream = new XmlStream(); + this.render(xmlStream, model); + return xmlStream.xml; + } + + // ============================================================ + // Useful Utilities + static toAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (value === undefined) { + if (always) { + return dflt; + } + } else if (always || value !== dflt) { + return value.toString(); + } + return undefined; + } + static toStringAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return BaseXform.toAttribute(value, dflt, always); + } + static toStringValue(attr, dflt) { + return attr === undefined ? dflt : attr; + } + static toBoolAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (value === undefined) { + if (always) { + return dflt; + } + } else if (always || value !== dflt) { + return value ? '1' : '0'; + } + return undefined; + } + static toBoolValue(attr, dflt) { + return attr === undefined ? dflt : attr === '1'; + } + static toIntAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return BaseXform.toAttribute(value, dflt, always); + } + static toIntValue(attr, dflt) { + return attr === undefined ? dflt : parseInt(attr, 10); + } + static toFloatAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return BaseXform.toAttribute(value, dflt, always); + } + static toFloatValue(attr, dflt) { + return attr === undefined ? dflt : parseFloat(attr); + } +} +module.exports = BaseXform; + +},{"../../utils/parse-sax":22,"../../utils/xml-stream":28}],33:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const colCache = require('../../../utils/col-cache'); +class DefinedNamesXform extends BaseXform { + render(xmlStream, model) { + // + // name.ranges.join(',') + // name.ranges.join(',') + // + xmlStream.openNode('definedName', { + name: model.name, + localSheetId: model.localSheetId + }); + xmlStream.writeText(model.ranges.join(',')); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case 'definedName': + this._parsedName = node.attributes.name; + this._parsedLocalSheetId = node.attributes.localSheetId; + this._parsedText = []; + return true; + default: + return false; + } + } + parseText(text) { + this._parsedText.push(text); + } + parseClose() { + this.model = { + name: this._parsedName, + ranges: extractRanges(this._parsedText.join('')) + }; + if (this._parsedLocalSheetId !== undefined) { + this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10); + } + return false; + } +} +function isValidRange(range) { + try { + colCache.decodeEx(range); + return true; + } catch (err) { + return false; + } +} +function extractRanges(parsedText) { + const ranges = []; + let quotesOpened = false; + let last = ''; + parsedText.split(',').forEach(item => { + if (!item) { + return; + } + const quotes = (item.match(/'/g) || []).length; + if (!quotes) { + if (quotesOpened) { + last += `${item},`; + } else if (isValidRange(item)) { + ranges.push(item); + } + return; + } + const quotesEven = quotes % 2 === 0; + if (!quotesOpened && quotesEven && isValidRange(item)) { + ranges.push(item); + } else if (quotesOpened && !quotesEven) { + quotesOpened = false; + if (isValidRange(last + item)) { + ranges.push(last + item); + } + last = ''; + } else { + quotesOpened = true; + last += `${item},`; + } + }); + return ranges; +} +module.exports = DefinedNamesXform; + +},{"../../../utils/col-cache":19,"../base-xform":32}],34:[function(require,module,exports){ +"use strict"; + +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +class WorksheetXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('sheet', { + sheetId: model.id, + name: model.name, + state: model.state, + 'r:id': model.rId + }); + } + parseOpen(node) { + if (node.name === 'sheet') { + this.model = { + name: utils.xmlDecode(node.attributes.name), + id: parseInt(node.attributes.sheetId, 10), + state: node.attributes.state, + rId: node.attributes['r:id'] + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorksheetXform; + +},{"../../../utils/utils":27,"../base-xform":32}],35:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class WorkbookCalcPropertiesXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('calcPr', { + calcId: 171027, + fullCalcOnLoad: model.fullCalcOnLoad ? 1 : undefined + }); + } + parseOpen(node) { + if (node.name === 'calcPr') { + this.model = {}; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorkbookCalcPropertiesXform; + +},{"../base-xform":32}],36:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class WorksheetPropertiesXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('workbookPr', { + date1904: model.date1904 ? 1 : undefined, + defaultThemeVersion: 164011, + filterPrivacy: 1 + }); + } + parseOpen(node) { + if (node.name === 'workbookPr') { + this.model = { + date1904: node.attributes.date1904 === '1' + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorksheetPropertiesXform; + +},{"../base-xform":32}],37:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class WorkbookViewXform extends BaseXform { + render(xmlStream, model) { + const attributes = { + xWindow: model.x || 0, + yWindow: model.y || 0, + windowWidth: model.width || 12000, + windowHeight: model.height || 24000, + firstSheet: model.firstSheet, + activeTab: model.activeTab + }; + if (model.visibility && model.visibility !== 'visible') { + attributes.visibility = model.visibility; + } + xmlStream.leafNode('workbookView', attributes); + } + parseOpen(node) { + if (node.name === 'workbookView') { + const model = this.model = {}; + const addS = function (name, value, dflt) { + const s = value !== undefined ? model[name] = value : dflt; + if (s !== undefined) { + model[name] = s; + } + }; + const addN = function (name, value, dflt) { + const n = value !== undefined ? model[name] = parseInt(value, 10) : dflt; + if (n !== undefined) { + model[name] = n; + } + }; + addN('x', node.attributes.xWindow, 0); + addN('y', node.attributes.yWindow, 0); + addN('width', node.attributes.windowWidth, 25000); + addN('height', node.attributes.windowHeight, 10000); + addS('visibility', node.attributes.visibility, 'visible'); + addN('activeTab', node.attributes.activeTab, undefined); + addN('firstSheet', node.attributes.firstSheet, undefined); + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorkbookViewXform; + +},{"../base-xform":32}],38:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const colCache = require('../../../utils/col-cache'); +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const StaticXform = require('../static-xform'); +const ListXform = require('../list-xform'); +const DefinedNameXform = require('./defined-name-xform'); +const SheetXform = require('./sheet-xform'); +const WorkbookViewXform = require('./workbook-view-xform'); +const WorkbookPropertiesXform = require('./workbook-properties-xform'); +const WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform'); +class WorkbookXform extends BaseXform { + constructor() { + super(); + this.map = { + fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion, + workbookPr: new WorkbookPropertiesXform(), + bookViews: new ListXform({ + tag: 'bookViews', + count: false, + childXform: new WorkbookViewXform() + }), + sheets: new ListXform({ + tag: 'sheets', + count: false, + childXform: new SheetXform() + }), + definedNames: new ListXform({ + tag: 'definedNames', + count: false, + childXform: new DefinedNameXform() + }), + calcPr: new WorkbookCalcPropertiesXform() + }; + } + prepare(model) { + model.sheets = model.worksheets; + + // collate all the print areas from all of the sheets and add them to the defined names + const printAreas = []; + let index = 0; // sheets is sparse array - calc index manually + model.sheets.forEach(sheet => { + if (sheet.pageSetup && sheet.pageSetup.printArea) { + sheet.pageSetup.printArea.split('&&').forEach(printArea => { + const printAreaComponents = printArea.split(':'); + const definedName = { + name: '_xlnm.Print_Area', + ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`], + localSheetId: index + }; + printAreas.push(definedName); + }); + } + if (sheet.pageSetup && (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)) { + const ranges = []; + if (sheet.pageSetup.printTitlesColumn) { + const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':'); + ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`); + } + if (sheet.pageSetup.printTitlesRow) { + const titlesRows = sheet.pageSetup.printTitlesRow.split(':'); + ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`); + } + const definedName = { + name: '_xlnm.Print_Titles', + ranges, + localSheetId: index + }; + printAreas.push(definedName); + } + index++; + }); + if (printAreas.length) { + model.definedNames = model.definedNames.concat(printAreas); + } + (model.media || []).forEach((medium, i) => { + // assign name + medium.name = medium.type + (i + 1); + }); + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES); + this.map.fileVersion.render(xmlStream); + this.map.workbookPr.render(xmlStream, model.properties); + this.map.bookViews.render(xmlStream, model.views); + this.map.sheets.render(xmlStream, model.sheets); + this.map.definedNames.render(xmlStream, model.definedNames); + this.map.calcPr.render(xmlStream, model.calcProperties); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'workbook': + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + return true; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'workbook': + this.model = { + sheets: this.map.sheets.model, + properties: this.map.workbookPr.model || {}, + views: this.map.bookViews.model, + calcProperties: {} + }; + if (this.map.definedNames.model) { + this.model.definedNames = this.map.definedNames.model; + } + return false; + default: + // not quite sure how we get here! + return true; + } + } + reconcile(model) { + const rels = (model.workbookRels || []).reduce((map, rel) => { + map[rel.Id] = rel; + return map; + }, {}); + + // reconcile sheet ids, rIds and names + const worksheets = []; + let worksheet; + let index = 0; + (model.sheets || []).forEach(sheet => { + const rel = rels[sheet.rId]; + if (!rel) { + return; + } + // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`, + // otherwise it will be spliced directly behind `xl/`. i.g. + worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\s|\/xl\/)+/, '')}`]; + // If there are "chartsheets" in the file, rel.Target will + // come out as chartsheets/sheet1.xml or similar here, and + // that won't be in model.worksheetHash. + // As we don't have the infrastructure to support chartsheets, + // we will ignore them for now: + if (worksheet) { + worksheet.name = sheet.name; + worksheet.id = sheet.id; + worksheet.state = sheet.state; + worksheets[index++] = worksheet; + } + }); + + // reconcile print areas + const definedNames = []; + _.each(model.definedNames, definedName => { + if (definedName.name === '_xlnm.Print_Area') { + worksheet = worksheets[definedName.localSheetId]; + if (worksheet) { + if (!worksheet.pageSetup) { + worksheet.pageSetup = {}; + } + const range = colCache.decodeEx(definedName.ranges[0]); + worksheet.pageSetup.printArea = worksheet.pageSetup.printArea ? `${worksheet.pageSetup.printArea}&&${range.dimensions}` : range.dimensions; + } + } else if (definedName.name === '_xlnm.Print_Titles') { + worksheet = worksheets[definedName.localSheetId]; + if (worksheet) { + if (!worksheet.pageSetup) { + worksheet.pageSetup = {}; + } + const rangeString = definedName.ranges.join(','); + const dollarRegex = /\$/g; + const rowRangeRegex = /\$\d+:\$\d+/; + const rowRangeMatches = rangeString.match(rowRangeRegex); + if (rowRangeMatches && rowRangeMatches.length) { + const range = rowRangeMatches[0]; + worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, ''); + } + const columnRangeRegex = /\$[A-Z]+:\$[A-Z]+/; + const columnRangeMatches = rangeString.match(columnRangeRegex); + if (columnRangeMatches && columnRangeMatches.length) { + const range = columnRangeMatches[0]; + worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, ''); + } + } + } else { + definedNames.push(definedName); + } + }); + model.definedNames = definedNames; + + // used by sheets to build their image models + model.media.forEach((media, i) => { + media.index = i; + }); + } +} +WorkbookXform.WORKBOOK_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'x15', + 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main' +}; +WorkbookXform.STATIC_XFORMS = { + fileVersion: new StaticXform({ + tag: 'fileVersion', + $: { + appName: 'xl', + lastEdited: 5, + lowestEdited: 5, + rupBuild: 9303 + } + }) +}; +module.exports = WorkbookXform; + +},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./defined-name-xform":33,"./sheet-xform":34,"./workbook-calc-properties-xform":35,"./workbook-properties-xform":36,"./workbook-view-xform":37}],39:[function(require,module,exports){ +"use strict"; + +const RichTextXform = require('../strings/rich-text-xform'); +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); + +/** + + + + + + + + + + 51422: + + + + + + + + test + + + + */ + +const CommentXform = module.exports = function (model) { + this.model = model; +}; +utils.inherits(CommentXform, BaseXform, { + get tag() { + return 'r'; + }, + get richTextXform() { + if (!this._richTextXform) { + this._richTextXform = new RichTextXform(); + } + return this._richTextXform; + }, + render(xmlStream, model) { + model = model || this.model; + xmlStream.openNode('comment', { + ref: model.ref, + authorId: 0 + }); + xmlStream.openNode('text'); + if (model && model.note && model.note.texts) { + model.note.texts.forEach(text => { + this.richTextXform.render(xmlStream, text); + }); + } + xmlStream.closeNode(); + xmlStream.closeNode(); + }, + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'comment': + this.model = { + type: 'note', + note: { + texts: [] + }, + ...node.attributes + }; + return true; + case 'r': + this.parser = this.richTextXform; + this.parser.parseOpen(node); + return true; + default: + return false; + } + }, + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + }, + parseClose(name) { + switch (name) { + case 'comment': + return false; + case 'r': + this.model.note.texts.push(this.parser.model); + this.parser = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + } + return true; + } + } +}); + +},{"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],40:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +const CommentXform = require('./comment-xform'); +const CommentsXform = module.exports = function () { + this.map = { + comment: new CommentXform() + }; +}; +utils.inherits(CommentsXform, BaseXform, { + COMMENTS_ATTRIBUTES: { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main' + } +}, { + render(xmlStream, model) { + model = model || this.model; + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('comments', CommentsXform.COMMENTS_ATTRIBUTES); + + // authors + // TODO: support authors properly + xmlStream.openNode('authors'); + xmlStream.leafNode('author', null, 'Author'); + xmlStream.closeNode(); + + // comments + xmlStream.openNode('commentList'); + model.comments.forEach(comment => { + this.map.comment.render(xmlStream, comment); + }); + xmlStream.closeNode(); + xmlStream.closeNode(); + }, + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'commentList': + this.model = { + comments: [] + }; + return true; + case 'comment': + this.parser = this.map.comment; + this.parser.parseOpen(node); + return true; + default: + return false; + } + }, + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + }, + parseClose(name) { + switch (name) { + case 'commentList': + return false; + case 'comment': + this.model.comments.push(this.parser.model); + this.parser = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + } + return true; + } + } +}); + +},{"../../../utils/utils":27,"../../../utils/xml-stream":28,"../base-xform":32,"./comment-xform":39}],41:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class VmlPositionXform extends BaseXform { + constructor(model) { + super(); + this._model = model; + } + get tag() { + return this._model && this._model.tag; + } + render(xmlStream, model, type) { + if (model === type[2]) { + xmlStream.leafNode(this.tag); + } else if (this.tag === 'x:SizeWithCells' && model === type[1]) { + xmlStream.leafNode(this.tag); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = {}; + this.model[this.tag] = true; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = VmlPositionXform; + +},{"../../base-xform":32}],42:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class VmlProtectionXform extends BaseXform { + constructor(model) { + super(); + this._model = model; + } + get tag() { + return this._model && this._model.tag; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.text = ''; + return true; + default: + return false; + } + } + parseText(text) { + this.text = text; + } + parseClose() { + return false; + } +} +module.exports = VmlProtectionXform; + +},{"../../base-xform":32}],43:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); + +// render the triangle in the cell for the comment +class VmlAnchorXform extends BaseXform { + get tag() { + return 'x:Anchor'; + } + getAnchorRect(anchor) { + const l = Math.floor(anchor.left); + const lf = Math.floor((anchor.left - l) * 68); + const t = Math.floor(anchor.top); + const tf = Math.floor((anchor.top - t) * 18); + const r = Math.floor(anchor.right); + const rf = Math.floor((anchor.right - r) * 68); + const b = Math.floor(anchor.bottom); + const bf = Math.floor((anchor.bottom - b) * 18); + return [l, lf, t, tf, r, rf, b, bf]; + } + getDefaultRect(ref) { + const l = ref.col; + const lf = 6; + const t = Math.max(ref.row - 2, 0); + const tf = 14; + const r = l + 2; + const rf = 2; + const b = t + 4; + const bf = 16; + return [l, lf, t, tf, r, rf, b, bf]; + } + render(xmlStream, model) { + const rect = model.anchor ? this.getAnchorRect(model.anchor) : this.getDefaultRect(model.refAddress); + xmlStream.leafNode('x:Anchor', null, rect.join(', ')); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.text = ''; + return true; + default: + return false; + } + } + parseText(text) { + this.text = text; + } + parseClose() { + return false; + } +} +module.exports = VmlAnchorXform; + +},{"../base-xform":32}],44:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const VmlAnchorXform = require('./vml-anchor-xform'); +const VmlProtectionXform = require('./style/vml-protection-xform'); +const VmlPositionXform = require('./style/vml-position-xform'); +const POSITION_TYPE = ['twoCells', 'oneCells', 'absolute']; +class VmlClientDataXform extends BaseXform { + constructor() { + super(); + this.map = { + 'x:Anchor': new VmlAnchorXform(), + 'x:Locked': new VmlProtectionXform({ + tag: 'x:Locked' + }), + 'x:LockText': new VmlProtectionXform({ + tag: 'x:LockText' + }), + 'x:SizeWithCells': new VmlPositionXform({ + tag: 'x:SizeWithCells' + }), + 'x:MoveWithCells': new VmlPositionXform({ + tag: 'x:MoveWithCells' + }) + }; + } + get tag() { + return 'x:ClientData'; + } + render(xmlStream, model) { + const { + protection, + editAs + } = model.note; + xmlStream.openNode(this.tag, { + ObjectType: 'Note' + }); + this.map['x:MoveWithCells'].render(xmlStream, editAs, POSITION_TYPE); + this.map['x:SizeWithCells'].render(xmlStream, editAs, POSITION_TYPE); + this.map['x:Anchor'].render(xmlStream, model); + this.map['x:Locked'].render(xmlStream, protection.locked); + xmlStream.leafNode('x:AutoFill', null, 'False'); + this.map['x:LockText'].render(xmlStream, protection.lockText); + xmlStream.leafNode('x:Row', null, model.refAddress.row - 1); + xmlStream.leafNode('x:Column', null, model.refAddress.col - 1); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + anchor: [], + protection: {}, + editAs: '' + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.normalizeModel(); + return false; + default: + return true; + } + } + normalizeModel() { + const position = Object.assign({}, this.map['x:MoveWithCells'].model, this.map['x:SizeWithCells'].model); + const len = Object.keys(position).length; + this.model.editAs = POSITION_TYPE[len]; + this.model.anchor = this.map['x:Anchor'].text; + this.model.protection.locked = this.map['x:Locked'].text; + this.model.protection.lockText = this.map['x:LockText'].text; + } +} +module.exports = VmlClientDataXform; + +},{"../base-xform":32,"./style/vml-position-xform":41,"./style/vml-protection-xform":42,"./vml-anchor-xform":43}],45:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const VmlShapeXform = require('./vml-shape-xform'); + +// This class is (currently) single purposed to insert the triangle +// drawing icons on commented cells +class VmlNotesXform extends BaseXform { + constructor() { + super(); + this.map = { + 'v:shape': new VmlShapeXform() + }; + } + get tag() { + return 'xml'; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode(this.tag, VmlNotesXform.DRAWING_ATTRIBUTES); + xmlStream.openNode('o:shapelayout', { + 'v:ext': 'edit' + }); + xmlStream.leafNode('o:idmap', { + 'v:ext': 'edit', + data: 1 + }); + xmlStream.closeNode(); + xmlStream.openNode('v:shapetype', { + id: '_x0000_t202', + coordsize: '21600,21600', + 'o:spt': 202, + path: 'm,l,21600r21600,l21600,xe' + }); + xmlStream.leafNode('v:stroke', { + joinstyle: 'miter' + }); + xmlStream.leafNode('v:path', { + gradientshapeok: 't', + 'o:connecttype': 'rect' + }); + xmlStream.closeNode(); + model.comments.forEach((item, index) => { + this.map['v:shape'].render(xmlStream, item, index); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + comments: [] + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.comments.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.anchors.forEach(anchor => { + if (anchor.br) { + this.map['xdr:twoCellAnchor'].reconcile(anchor, options); + } else { + this.map['xdr:oneCellAnchor'].reconcile(anchor, options); + } + }); + } +} +VmlNotesXform.DRAWING_ATTRIBUTES = { + 'xmlns:v': 'urn:schemas-microsoft-com:vml', + 'xmlns:o': 'urn:schemas-microsoft-com:office:office', + 'xmlns:x': 'urn:schemas-microsoft-com:office:excel' +}; +module.exports = VmlNotesXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"./vml-shape-xform":46}],46:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const VmlTextboxXform = require('./vml-textbox-xform'); +const VmlClientDataXform = require('./vml-client-data-xform'); +class VmlShapeXform extends BaseXform { + constructor() { + super(); + this.map = { + 'v:textbox': new VmlTextboxXform(), + 'x:ClientData': new VmlClientDataXform() + }; + } + get tag() { + return 'v:shape'; + } + render(xmlStream, model, index) { + xmlStream.openNode('v:shape', VmlShapeXform.V_SHAPE_ATTRIBUTES(model, index)); + xmlStream.leafNode('v:fill', { + color2: 'infoBackground [80]' + }); + xmlStream.leafNode('v:shadow', { + color: 'none [81]', + obscured: 't' + }); + xmlStream.leafNode('v:path', { + 'o:connecttype': 'none' + }); + this.map['v:textbox'].render(xmlStream, model); + this.map['x:ClientData'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + margins: { + insetmode: node.attributes['o:insetmode'] + }, + anchor: '', + editAs: '', + protection: {} + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.margins.inset = this.map['v:textbox'].model && this.map['v:textbox'].model.inset; + this.model.protection = this.map['x:ClientData'].model && this.map['x:ClientData'].model.protection; + this.model.anchor = this.map['x:ClientData'].model && this.map['x:ClientData'].model.anchor; + this.model.editAs = this.map['x:ClientData'].model && this.map['x:ClientData'].model.editAs; + return false; + default: + return true; + } + } +} +VmlShapeXform.V_SHAPE_ATTRIBUTES = (model, index) => ({ + id: `_x0000_s${1025 + index}`, + type: '#_x0000_t202', + style: 'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden', + fillcolor: 'infoBackground [80]', + strokecolor: 'none [81]', + 'o:insetmode': model.note.margins && model.note.margins.insetmode +}); +module.exports = VmlShapeXform; + +},{"../base-xform":32,"./vml-client-data-xform":44,"./vml-textbox-xform":47}],47:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class VmlTextboxXform extends BaseXform { + get tag() { + return 'v:textbox'; + } + conversionUnit(value, multiple, unit) { + return `${parseFloat(value) * multiple.toFixed(2)}${unit}`; + } + reverseConversionUnit(inset) { + return (inset || '').split(',').map(margin => { + return Number(parseFloat(this.conversionUnit(parseFloat(margin), 0.1, '')).toFixed(2)); + }); + } + render(xmlStream, model) { + const attributes = { + style: 'mso-direction-alt:auto' + }; + if (model && model.note) { + let { + inset + } = model.note && model.note.margins; + if (Array.isArray(inset)) { + inset = inset.map(margin => { + return this.conversionUnit(margin, 10, 'mm'); + }).join(','); + } + if (inset) { + attributes.inset = inset; + } + } + xmlStream.openNode('v:textbox', attributes); + xmlStream.leafNode('div', { + style: 'text-align:left' + }); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + inset: this.reverseConversionUnit(node.attributes.inset) + }; + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + return true; + } + } +} +module.exports = VmlTextboxXform; + +},{"../base-xform":32}],48:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('./base-xform'); + +/* 'virtual' methods used as a form of documentation */ +/* eslint-disable class-methods-use-this */ + +// base class for xforms that are composed of other xforms +// offers some default implementations +class CompositeXform extends BaseXform { + createNewModel(node) { + return {}; + } + parseOpen(node) { + // Typical pattern for composite xform + this.parser = this.parser || this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === this.tag) { + this.model = this.createNewModel(node); + return true; + } + return false; + } + parseText(text) { + // Default implementation. Send text to child parser + if (this.parser) { + this.parser.parseText(text); + } + } + onParserClose(name, parser) { + // parseClose has seen a child parser close + // now need to incorporate into this.model somehow + this.model[name] = parser.model; + } + parseClose(name) { + // Default implementation + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.onParserClose(name, this.parser); + this.parser = undefined; + } + return true; + } + return name !== this.tag; + } +} +module.exports = CompositeXform; + +},{"./base-xform":32}],49:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class AppHeadingPairsXform extends BaseXform { + render(xmlStream, model) { + xmlStream.openNode('HeadingPairs'); + xmlStream.openNode('vt:vector', { + size: 2, + baseType: 'variant' + }); + xmlStream.openNode('vt:variant'); + xmlStream.leafNode('vt:lpstr', undefined, 'Worksheets'); + xmlStream.closeNode(); + xmlStream.openNode('vt:variant'); + xmlStream.leafNode('vt:i4', undefined, model.length); + xmlStream.closeNode(); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + // no parsing + return node.name === 'HeadingPairs'; + } + parseText() {} + parseClose(name) { + return name !== 'HeadingPairs'; + } +} +module.exports = AppHeadingPairsXform; + +},{"../base-xform":32}],50:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class AppTitlesOfPartsXform extends BaseXform { + render(xmlStream, model) { + xmlStream.openNode('TitlesOfParts'); + xmlStream.openNode('vt:vector', { + size: model.length, + baseType: 'lpstr' + }); + model.forEach(sheet => { + xmlStream.leafNode('vt:lpstr', undefined, sheet.name); + }); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + // no parsing + return node.name === 'TitlesOfParts'; + } + parseText() {} + parseClose(name) { + return name !== 'TitlesOfParts'; + } +} +module.exports = AppTitlesOfPartsXform; + +},{"../base-xform":32}],51:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const StringXform = require('../simple/string-xform'); +const AppHeadingPairsXform = require('./app-heading-pairs-xform'); +const AppTitleOfPartsXform = require('./app-titles-of-parts-xform'); +class AppXform extends BaseXform { + constructor() { + super(); + this.map = { + Company: new StringXform({ + tag: 'Company' + }), + Manager: new StringXform({ + tag: 'Manager' + }), + HeadingPairs: new AppHeadingPairsXform(), + TitleOfParts: new AppTitleOfPartsXform() + }; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('Properties', AppXform.PROPERTY_ATTRIBUTES); + xmlStream.leafNode('Application', undefined, 'Microsoft Excel'); + xmlStream.leafNode('DocSecurity', undefined, '0'); + xmlStream.leafNode('ScaleCrop', undefined, 'false'); + this.map.HeadingPairs.render(xmlStream, model.worksheets); + this.map.TitleOfParts.render(xmlStream, model.worksheets); + this.map.Company.render(xmlStream, model.company || ''); + this.map.Manager.render(xmlStream, model.manager); + xmlStream.leafNode('LinksUpToDate', undefined, 'false'); + xmlStream.leafNode('SharedDoc', undefined, 'false'); + xmlStream.leafNode('HyperlinksChanged', undefined, 'false'); + xmlStream.leafNode('AppVersion', undefined, '16.0300'); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'Properties': + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + + // there's a lot we don't bother to parse + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'Properties': + this.model = { + worksheets: this.map.TitleOfParts.model, + company: this.map.Company.model, + manager: this.map.Manager.model + }; + return false; + default: + return true; + } + } +} +AppXform.DateFormat = function (dt) { + return dt.toISOString().replace(/[.]\d{3,6}/, ''); +}; +AppXform.DateAttrs = { + 'xsi:type': 'dcterms:W3CDTF' +}; +AppXform.PROPERTY_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties', + 'xmlns:vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes' +}; +module.exports = AppXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/string-xform":119,"./app-heading-pairs-xform":49,"./app-titles-of-parts-xform":50}],52:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); + +// used for rendering the [Content_Types].xml file +// not used for parsing +class ContentTypesXform extends BaseXform { + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('Types', ContentTypesXform.PROPERTY_ATTRIBUTES); + const mediaHash = {}; + (model.media || []).forEach(medium => { + if (medium.type === 'image') { + const imageType = medium.extension; + if (!mediaHash[imageType]) { + mediaHash[imageType] = true; + xmlStream.leafNode('Default', { + Extension: imageType, + ContentType: `image/${imageType}` + }); + } + } + }); + xmlStream.leafNode('Default', { + Extension: 'rels', + ContentType: 'application/vnd.openxmlformats-package.relationships+xml' + }); + xmlStream.leafNode('Default', { + Extension: 'xml', + ContentType: 'application/xml' + }); + xmlStream.leafNode('Override', { + PartName: '/xl/workbook.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml' + }); + model.worksheets.forEach(worksheet => { + const name = `/xl/worksheets/sheet${worksheet.id}.xml`; + xmlStream.leafNode('Override', { + PartName: name, + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml' + }); + }); + xmlStream.leafNode('Override', { + PartName: '/xl/theme/theme1.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml' + }); + xmlStream.leafNode('Override', { + PartName: '/xl/styles.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml' + }); + const hasSharedStrings = model.sharedStrings && model.sharedStrings.count; + if (hasSharedStrings) { + xmlStream.leafNode('Override', { + PartName: '/xl/sharedStrings.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml' + }); + } + if (model.tables) { + model.tables.forEach(table => { + xmlStream.leafNode('Override', { + PartName: `/xl/tables/${table.target}`, + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml' + }); + }); + } + if (model.drawings) { + model.drawings.forEach(drawing => { + xmlStream.leafNode('Override', { + PartName: `/xl/drawings/${drawing.name}.xml`, + ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml' + }); + }); + } + if (model.commentRefs) { + xmlStream.leafNode('Default', { + Extension: 'vml', + ContentType: 'application/vnd.openxmlformats-officedocument.vmlDrawing' + }); + model.commentRefs.forEach(_ref => { + let { + commentName + } = _ref; + xmlStream.leafNode('Override', { + PartName: `/xl/${commentName}.xml`, + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml' + }); + }); + } + xmlStream.leafNode('Override', { + PartName: '/docProps/core.xml', + ContentType: 'application/vnd.openxmlformats-package.core-properties+xml' + }); + xmlStream.leafNode('Override', { + PartName: '/docProps/app.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.extended-properties+xml' + }); + xmlStream.closeNode(); + } + parseOpen() { + return false; + } + parseText() {} + parseClose() { + return false; + } +} +ContentTypesXform.PROPERTY_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/package/2006/content-types' +}; +module.exports = ContentTypesXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32}],53:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const DateXform = require('../simple/date-xform'); +const StringXform = require('../simple/string-xform'); +const IntegerXform = require('../simple/integer-xform'); +class CoreXform extends BaseXform { + constructor() { + super(); + this.map = { + 'dc:creator': new StringXform({ + tag: 'dc:creator' + }), + 'dc:title': new StringXform({ + tag: 'dc:title' + }), + 'dc:subject': new StringXform({ + tag: 'dc:subject' + }), + 'dc:description': new StringXform({ + tag: 'dc:description' + }), + 'dc:identifier': new StringXform({ + tag: 'dc:identifier' + }), + 'dc:language': new StringXform({ + tag: 'dc:language' + }), + 'cp:keywords': new StringXform({ + tag: 'cp:keywords' + }), + 'cp:category': new StringXform({ + tag: 'cp:category' + }), + 'cp:lastModifiedBy': new StringXform({ + tag: 'cp:lastModifiedBy' + }), + 'cp:lastPrinted': new DateXform({ + tag: 'cp:lastPrinted', + format: CoreXform.DateFormat + }), + 'cp:revision': new IntegerXform({ + tag: 'cp:revision' + }), + 'cp:version': new StringXform({ + tag: 'cp:version' + }), + 'cp:contentStatus': new StringXform({ + tag: 'cp:contentStatus' + }), + 'cp:contentType': new StringXform({ + tag: 'cp:contentType' + }), + 'dcterms:created': new DateXform({ + tag: 'dcterms:created', + attrs: CoreXform.DateAttrs, + format: CoreXform.DateFormat + }), + 'dcterms:modified': new DateXform({ + tag: 'dcterms:modified', + attrs: CoreXform.DateAttrs, + format: CoreXform.DateFormat + }) + }; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('cp:coreProperties', CoreXform.CORE_PROPERTY_ATTRIBUTES); + this.map['dc:creator'].render(xmlStream, model.creator); + this.map['dc:title'].render(xmlStream, model.title); + this.map['dc:subject'].render(xmlStream, model.subject); + this.map['dc:description'].render(xmlStream, model.description); + this.map['dc:identifier'].render(xmlStream, model.identifier); + this.map['dc:language'].render(xmlStream, model.language); + this.map['cp:keywords'].render(xmlStream, model.keywords); + this.map['cp:category'].render(xmlStream, model.category); + this.map['cp:lastModifiedBy'].render(xmlStream, model.lastModifiedBy); + this.map['cp:lastPrinted'].render(xmlStream, model.lastPrinted); + this.map['cp:revision'].render(xmlStream, model.revision); + this.map['cp:version'].render(xmlStream, model.version); + this.map['cp:contentStatus'].render(xmlStream, model.contentStatus); + this.map['cp:contentType'].render(xmlStream, model.contentType); + this.map['dcterms:created'].render(xmlStream, model.created); + this.map['dcterms:modified'].render(xmlStream, model.modified); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'cp:coreProperties': + case 'coreProperties': + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'cp:coreProperties': + case 'coreProperties': + this.model = { + creator: this.map['dc:creator'].model, + title: this.map['dc:title'].model, + subject: this.map['dc:subject'].model, + description: this.map['dc:description'].model, + identifier: this.map['dc:identifier'].model, + language: this.map['dc:language'].model, + keywords: this.map['cp:keywords'].model, + category: this.map['cp:category'].model, + lastModifiedBy: this.map['cp:lastModifiedBy'].model, + lastPrinted: this.map['cp:lastPrinted'].model, + revision: this.map['cp:revision'].model, + contentStatus: this.map['cp:contentStatus'].model, + contentType: this.map['cp:contentType'].model, + created: this.map['dcterms:created'].model, + modified: this.map['dcterms:modified'].model + }; + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +CoreXform.DateFormat = function (dt) { + return dt.toISOString().replace(/[.]\d{3}/, ''); +}; +CoreXform.DateAttrs = { + 'xsi:type': 'dcterms:W3CDTF' +}; +CoreXform.CORE_PROPERTY_ATTRIBUTES = { + 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties', + 'xmlns:dc': 'http://purl.org/dc/elements/1.1/', + 'xmlns:dcterms': 'http://purl.org/dc/terms/', + 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/', + 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance' +}; +module.exports = CoreXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/date-xform":117,"../simple/integer-xform":118,"../simple/string-xform":119}],54:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class RelationshipXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('Relationship', model); + } + parseOpen(node) { + switch (node.name) { + case 'Relationship': + this.model = node.attributes; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = RelationshipXform; + +},{"../base-xform":32}],55:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const RelationshipXform = require('./relationship-xform'); +class RelationshipsXform extends BaseXform { + constructor() { + super(); + this.map = { + Relationship: new RelationshipXform() + }; + } + render(xmlStream, model) { + model = model || this._values; + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('Relationships', RelationshipsXform.RELATIONSHIPS_ATTRIBUTES); + model.forEach(relationship => { + this.map.Relationship.render(xmlStream, relationship); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'Relationships': + this.model = []; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case 'Relationships': + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +RelationshipsXform.RELATIONSHIPS_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships' +}; +module.exports = RelationshipsXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"./relationship-xform":54}],56:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class BaseCellAnchorXform extends BaseXform { + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + range: { + editAs: node.attributes.editAs || 'oneCell' + } + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + reconcilePicture(model, options) { + if (model && model.rId) { + const rel = options.rels[model.rId]; + const match = rel.Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/); + if (match) { + const name = match[1]; + const mediaId = options.mediaIndex[name]; + return options.media[mediaId]; + } + } + return undefined; + } +} +module.exports = BaseCellAnchorXform; + +},{"../base-xform":32}],57:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const BlipXform = require('./blip-xform'); +class BlipFillXform extends BaseXform { + constructor() { + super(); + this.map = { + 'a:blip': new BlipXform() + }; + } + get tag() { + return 'xdr:blipFill'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['a:blip'].render(xmlStream, model); + + // TODO: options for this + parsing + xmlStream.openNode('a:stretch'); + xmlStream.leafNode('a:fillRect'); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = this.map['a:blip'].model; + return false; + default: + return true; + } + } +} +module.exports = BlipFillXform; + +},{"../base-xform":32,"./blip-xform":58}],58:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class BlipXform extends BaseXform { + get tag() { + return 'a:blip'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'r:embed': model.rId, + cstate: 'print' + }); + // TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi + } + + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:embed'] + }; + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + // unprocessed internal nodes + return true; + } + } +} +module.exports = BlipXform; + +},{"../base-xform":32}],59:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class CNvPicPrXform extends BaseXform { + get tag() { + return 'xdr:cNvPicPr'; + } + render(xmlStream) { + xmlStream.openNode(this.tag); + xmlStream.leafNode('a:picLocks', { + noChangeAspect: '1' + }); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + // unprocessed internal nodes + return true; + } + } +} +module.exports = CNvPicPrXform; + +},{"../base-xform":32}],60:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const HlickClickXform = require('./hlink-click-xform'); +const ExtLstXform = require('./ext-lst-xform'); +class CNvPrXform extends BaseXform { + constructor() { + super(); + this.map = { + 'a:hlinkClick': new HlickClickXform(), + 'a:extLst': new ExtLstXform() + }; + } + get tag() { + return 'xdr:cNvPr'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + id: model.index, + name: `Picture ${model.index}` + }); + this.map['a:hlinkClick'].render(xmlStream, model); + this.map['a:extLst'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = this.map['a:hlinkClick'].model; + return false; + default: + return true; + } + } +} +module.exports = CNvPrXform; + +},{"../base-xform":32,"./ext-lst-xform":63,"./hlink-click-xform":65}],61:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const IntegerXform = require('../simple/integer-xform'); +class CellPositionXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.map = { + 'xdr:col': new IntegerXform({ + tag: 'xdr:col', + zero: true + }), + 'xdr:colOff': new IntegerXform({ + tag: 'xdr:colOff', + zero: true + }), + 'xdr:row': new IntegerXform({ + tag: 'xdr:row', + zero: true + }), + 'xdr:rowOff': new IntegerXform({ + tag: 'xdr:rowOff', + zero: true + }) + }; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['xdr:col'].render(xmlStream, model.nativeCol); + this.map['xdr:colOff'].render(xmlStream, model.nativeColOff); + this.map['xdr:row'].render(xmlStream, model.nativeRow); + this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = { + nativeCol: this.map['xdr:col'].model, + nativeColOff: this.map['xdr:colOff'].model, + nativeRow: this.map['xdr:row'].model, + nativeRowOff: this.map['xdr:rowOff'].model + }; + return false; + default: + // not quite sure how we get here! + return true; + } + } +} +module.exports = CellPositionXform; + +},{"../base-xform":32,"../simple/integer-xform":118}],62:[function(require,module,exports){ +"use strict"; + +const colCache = require('../../../utils/col-cache'); +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const TwoCellAnchorXform = require('./two-cell-anchor-xform'); +const OneCellAnchorXform = require('./one-cell-anchor-xform'); +function getAnchorType(model) { + const range = typeof model.range === 'string' ? colCache.decode(model.range) : model.range; + return range.br ? 'xdr:twoCellAnchor' : 'xdr:oneCellAnchor'; +} +class DrawingXform extends BaseXform { + constructor() { + super(); + this.map = { + 'xdr:twoCellAnchor': new TwoCellAnchorXform(), + 'xdr:oneCellAnchor': new OneCellAnchorXform() + }; + } + prepare(model) { + model.anchors.forEach((item, index) => { + item.anchorType = getAnchorType(item); + const anchor = this.map[item.anchorType]; + anchor.prepare(item, { + index + }); + }); + } + get tag() { + return 'xdr:wsDr'; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode(this.tag, DrawingXform.DRAWING_ATTRIBUTES); + model.anchors.forEach(item => { + const anchor = this.map[item.anchorType]; + anchor.render(xmlStream, item); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + anchors: [] + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.anchors.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.anchors.forEach(anchor => { + if (anchor.br) { + this.map['xdr:twoCellAnchor'].reconcile(anchor, options); + } else { + this.map['xdr:oneCellAnchor'].reconcile(anchor, options); + } + }); + } +} +DrawingXform.DRAWING_ATTRIBUTES = { + 'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', + 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main' +}; +module.exports = DrawingXform; + +},{"../../../utils/col-cache":19,"../../../utils/xml-stream":28,"../base-xform":32,"./one-cell-anchor-xform":67,"./two-cell-anchor-xform":70}],63:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class ExtLstXform extends BaseXform { + get tag() { + return 'a:extLst'; + } + render(xmlStream) { + xmlStream.openNode(this.tag); + xmlStream.openNode('a:ext', { + uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}' + }); + xmlStream.leafNode('a16:creationId', { + 'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main', + id: '{00000000-0008-0000-0000-000002000000}' + }); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + // unprocessed internal nodes + return true; + } + } +} +module.exports = ExtLstXform; + +},{"../base-xform":32}],64:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); + +/** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */ +const EMU_PER_PIXEL_AT_96_DPI = 9525; +class ExtXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.map = {}; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + const width = Math.floor(model.width * EMU_PER_PIXEL_AT_96_DPI); + const height = Math.floor(model.height * EMU_PER_PIXEL_AT_96_DPI); + xmlStream.addAttribute('cx', width); + xmlStream.addAttribute('cy', height); + xmlStream.closeNode(); + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + width: parseInt(node.attributes.cx || '0', 10) / EMU_PER_PIXEL_AT_96_DPI, + height: parseInt(node.attributes.cy || '0', 10) / EMU_PER_PIXEL_AT_96_DPI + }; + return true; + } + return false; + } + parseText( /* text */) {} + parseClose( /* name */ + ) { + return false; + } +} +module.exports = ExtXform; + +},{"../base-xform":32}],65:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class HLinkClickXform extends BaseXform { + get tag() { + return 'a:hlinkClick'; + } + render(xmlStream, model) { + if (!(model.hyperlinks && model.hyperlinks.rId)) { + return; + } + xmlStream.leafNode(this.tag, { + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'r:id': model.hyperlinks.rId, + tooltip: model.hyperlinks.tooltip + }); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + hyperlinks: { + rId: node.attributes['r:id'], + tooltip: node.attributes.tooltip + } + }; + return true; + default: + return true; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = HLinkClickXform; + +},{"../base-xform":32}],66:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const CNvPrXform = require('./c-nv-pr-xform'); +const CNvPicPrXform = require('./c-nv-pic-pr-xform'); +class NvPicPrXform extends BaseXform { + constructor() { + super(); + this.map = { + 'xdr:cNvPr': new CNvPrXform(), + 'xdr:cNvPicPr': new CNvPicPrXform() + }; + } + get tag() { + return 'xdr:nvPicPr'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['xdr:cNvPr'].render(xmlStream, model); + this.map['xdr:cNvPicPr'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = this.map['xdr:cNvPr'].model; + return false; + default: + return true; + } + } +} +module.exports = NvPicPrXform; + +},{"../base-xform":32,"./c-nv-pic-pr-xform":59,"./c-nv-pr-xform":60}],67:[function(require,module,exports){ +"use strict"; + +const BaseCellAnchorXform = require('./base-cell-anchor-xform'); +const StaticXform = require('../static-xform'); +const CellPositionXform = require('./cell-position-xform'); +const ExtXform = require('./ext-xform'); +const PicXform = require('./pic-xform'); +class OneCellAnchorXform extends BaseCellAnchorXform { + constructor() { + super(); + this.map = { + 'xdr:from': new CellPositionXform({ + tag: 'xdr:from' + }), + 'xdr:ext': new ExtXform({ + tag: 'xdr:ext' + }), + 'xdr:pic': new PicXform(), + 'xdr:clientData': new StaticXform({ + tag: 'xdr:clientData' + }) + }; + } + get tag() { + return 'xdr:oneCellAnchor'; + } + prepare(model, options) { + this.map['xdr:pic'].prepare(model.picture, options); + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + editAs: model.range.editAs || 'oneCell' + }); + this.map['xdr:from'].render(xmlStream, model.range.tl); + this.map['xdr:ext'].render(xmlStream, model.range.ext); + this.map['xdr:pic'].render(xmlStream, model.picture); + this.map['xdr:clientData'].render(xmlStream, {}); + xmlStream.closeNode(); + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.range.tl = this.map['xdr:from'].model; + this.model.range.ext = this.map['xdr:ext'].model; + this.model.picture = this.map['xdr:pic'].model; + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.medium = this.reconcilePicture(model.picture, options); + } +} +module.exports = OneCellAnchorXform; + +},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./ext-xform":64,"./pic-xform":68}],68:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const StaticXform = require('../static-xform'); +const BlipFillXform = require('./blip-fill-xform'); +const NvPicPrXform = require('./nv-pic-pr-xform'); +const spPrJSON = require('./sp-pr'); +class PicXform extends BaseXform { + constructor() { + super(); + this.map = { + 'xdr:nvPicPr': new NvPicPrXform(), + 'xdr:blipFill': new BlipFillXform(), + 'xdr:spPr': new StaticXform(spPrJSON) + }; + } + get tag() { + return 'xdr:pic'; + } + prepare(model, options) { + model.index = options.index + 1; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['xdr:nvPicPr'].render(xmlStream, model); + this.map['xdr:blipFill'].render(xmlStream, model); + this.map['xdr:spPr'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.mergeModel(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + // not quite sure how we get here! + return true; + } + } +} +module.exports = PicXform; + +},{"../base-xform":32,"../static-xform":120,"./blip-fill-xform":57,"./nv-pic-pr-xform":66,"./sp-pr":69}],69:[function(require,module,exports){ +"use strict"; + +module.exports = { + tag: 'xdr:spPr', + c: [{ + tag: 'a:xfrm', + c: [{ + tag: 'a:off', + $: { + x: '0', + y: '0' + } + }, { + tag: 'a:ext', + $: { + cx: '0', + cy: '0' + } + }] + }, { + tag: 'a:prstGeom', + $: { + prst: 'rect' + }, + c: [{ + tag: 'a:avLst' + }] + }] +}; + +},{}],70:[function(require,module,exports){ +"use strict"; + +const BaseCellAnchorXform = require('./base-cell-anchor-xform'); +const StaticXform = require('../static-xform'); +const CellPositionXform = require('./cell-position-xform'); +const PicXform = require('./pic-xform'); +class TwoCellAnchorXform extends BaseCellAnchorXform { + constructor() { + super(); + this.map = { + 'xdr:from': new CellPositionXform({ + tag: 'xdr:from' + }), + 'xdr:to': new CellPositionXform({ + tag: 'xdr:to' + }), + 'xdr:pic': new PicXform(), + 'xdr:clientData': new StaticXform({ + tag: 'xdr:clientData' + }) + }; + } + get tag() { + return 'xdr:twoCellAnchor'; + } + prepare(model, options) { + this.map['xdr:pic'].prepare(model.picture, options); + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + editAs: model.range.editAs || 'oneCell' + }); + this.map['xdr:from'].render(xmlStream, model.range.tl); + this.map['xdr:to'].render(xmlStream, model.range.br); + this.map['xdr:pic'].render(xmlStream, model.picture); + this.map['xdr:clientData'].render(xmlStream, {}); + xmlStream.closeNode(); + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.range.tl = this.map['xdr:from'].model; + this.model.range.br = this.map['xdr:to'].model; + this.model.picture = this.map['xdr:pic'].model; + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.medium = this.reconcilePicture(model.picture, options); + } +} +module.exports = TwoCellAnchorXform; + +},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./pic-xform":68}],71:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('./base-xform'); +class ListXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.always = !!options.always; + this.count = options.count; + this.empty = options.empty; + this.$count = options.$count || 'count'; + this.$ = options.$; + this.childXform = options.childXform; + this.maxItems = options.maxItems; + } + prepare(model, options) { + const { + childXform + } = this; + if (model) { + model.forEach((childModel, index) => { + options.index = index; + childXform.prepare(childModel, options); + }); + } + } + render(xmlStream, model) { + if (this.always || model && model.length) { + xmlStream.openNode(this.tag, this.$); + if (this.count) { + xmlStream.addAttribute(this.$count, model && model.length || 0); + } + const { + childXform + } = this; + (model || []).forEach((childModel, index) => { + childXform.render(xmlStream, childModel, index); + }); + xmlStream.closeNode(); + } else if (this.empty) { + xmlStream.leafNode(this.tag); + } + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.model = []; + return true; + default: + if (this.childXform.parseOpen(node)) { + this.parser = this.childXform; + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.push(this.parser.model); + this.parser = undefined; + if (this.maxItems && this.model.length > this.maxItems) { + throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`); + } + } + return true; + } + return false; + } + reconcile(model, options) { + if (model) { + const { + childXform + } = this; + model.forEach(childModel => { + childXform.reconcile(childModel, options); + }); + } + } +} +module.exports = ListXform; + +},{"./base-xform":32}],72:[function(require,module,exports){ +"use strict"; + +const colCache = require('../../../utils/col-cache'); +const BaseXform = require('../base-xform'); +class AutoFilterXform extends BaseXform { + get tag() { + return 'autoFilter'; + } + render(xmlStream, model) { + if (model) { + if (typeof model === 'string') { + // assume range + xmlStream.leafNode('autoFilter', { + ref: model + }); + } else { + const getAddress = function (addr) { + if (typeof addr === 'string') { + return addr; + } + return colCache.getAddress(addr.row, addr.column).address; + }; + const firstAddress = getAddress(model.from); + const secondAddress = getAddress(model.to); + if (firstAddress && secondAddress) { + xmlStream.leafNode('autoFilter', { + ref: `${firstAddress}:${secondAddress}` + }); + } + } + } + } + parseOpen(node) { + if (node.name === 'autoFilter') { + this.model = node.attributes.ref; + } + } +} +module.exports = AutoFilterXform; + +},{"../../../utils/col-cache":19,"../base-xform":32}],73:[function(require,module,exports){ +"use strict"; + +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +const Range = require('../../../doc/range'); +const Enums = require('../../../doc/enums'); +const RichTextXform = require('../strings/rich-text-xform'); +function getValueType(v) { + if (v === null || v === undefined) { + return Enums.ValueType.Null; + } + if (v instanceof String || typeof v === 'string') { + return Enums.ValueType.String; + } + if (typeof v === 'number') { + return Enums.ValueType.Number; + } + if (typeof v === 'boolean') { + return Enums.ValueType.Boolean; + } + if (v instanceof Date) { + return Enums.ValueType.Date; + } + if (v.text && v.hyperlink) { + return Enums.ValueType.Hyperlink; + } + if (v.formula) { + return Enums.ValueType.Formula; + } + if (v.error) { + return Enums.ValueType.Error; + } + throw new Error('I could not understand type of value'); +} +function getEffectiveCellType(cell) { + switch (cell.type) { + case Enums.ValueType.Formula: + return getValueType(cell.result); + default: + return cell.type; + } +} +class CellXform extends BaseXform { + constructor() { + super(); + this.richTextXForm = new RichTextXform(); + } + get tag() { + return 'c'; + } + prepare(model, options) { + const styleId = options.styles.addStyleModel(model.style || {}, getEffectiveCellType(model)); + if (styleId) { + model.styleId = styleId; + } + if (model.comment) { + options.comments.push({ + ...model.comment, + ref: model.address + }); + } + switch (model.type) { + case Enums.ValueType.String: + case Enums.ValueType.RichText: + if (options.sharedStrings) { + model.ssId = options.sharedStrings.add(model.value); + } + break; + case Enums.ValueType.Date: + if (options.date1904) { + model.date1904 = true; + } + break; + case Enums.ValueType.Hyperlink: + if (options.sharedStrings && model.text !== undefined && model.text !== null) { + model.ssId = options.sharedStrings.add(model.text); + } + options.hyperlinks.push({ + address: model.address, + target: model.hyperlink, + tooltip: model.tooltip + }); + break; + case Enums.ValueType.Merge: + options.merges.add(model); + break; + case Enums.ValueType.Formula: + if (options.date1904) { + // in case valueType is date + model.date1904 = true; + } + if (model.shareType === 'shared') { + model.si = options.siFormulae++; + } + if (model.formula) { + options.formulae[model.address] = model; + } else if (model.sharedFormula) { + const master = options.formulae[model.sharedFormula]; + if (!master) { + throw new Error(`Shared Formula master must exist above and or left of clone for cell ${model.address}`); + } + if (master.si === undefined) { + master.shareType = 'shared'; + master.si = options.siFormulae++; + master.range = new Range(master.address, model.address); + } else if (master.range) { + master.range.expandToAddress(model.address); + } + model.si = master.si; + } + break; + default: + break; + } + } + renderFormula(xmlStream, model) { + let attrs = null; + switch (model.shareType) { + case 'shared': + attrs = { + t: 'shared', + ref: model.ref || model.range.range, + si: model.si + }; + break; + case 'array': + attrs = { + t: 'array', + ref: model.ref + }; + break; + default: + if (model.si !== undefined) { + attrs = { + t: 'shared', + si: model.si + }; + } + break; + } + switch (getValueType(model.result)) { + case Enums.ValueType.Null: + // ? + xmlStream.leafNode('f', attrs, model.formula); + break; + case Enums.ValueType.String: + // oddly, formula results don't ever use shared strings + xmlStream.addAttribute('t', 'str'); + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result); + break; + case Enums.ValueType.Number: + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result); + break; + case Enums.ValueType.Boolean: + xmlStream.addAttribute('t', 'b'); + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result ? 1 : 0); + break; + case Enums.ValueType.Error: + xmlStream.addAttribute('t', 'e'); + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result.error); + break; + case Enums.ValueType.Date: + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, utils.dateToExcel(model.result, model.date1904)); + break; + + // case Enums.ValueType.Hyperlink: // ?? + // case Enums.ValueType.Formula: + default: + throw new Error('I could not understand type of value'); + } + } + render(xmlStream, model) { + if (model.type === Enums.ValueType.Null && !model.styleId) { + // if null and no style, exit + return; + } + xmlStream.openNode('c'); + xmlStream.addAttribute('r', model.address); + if (model.styleId) { + xmlStream.addAttribute('s', model.styleId); + } + switch (model.type) { + case Enums.ValueType.Null: + break; + case Enums.ValueType.Number: + xmlStream.leafNode('v', null, model.value); + break; + case Enums.ValueType.Boolean: + xmlStream.addAttribute('t', 'b'); + xmlStream.leafNode('v', null, model.value ? '1' : '0'); + break; + case Enums.ValueType.Error: + xmlStream.addAttribute('t', 'e'); + xmlStream.leafNode('v', null, model.value.error); + break; + case Enums.ValueType.String: + case Enums.ValueType.RichText: + if (model.ssId !== undefined) { + xmlStream.addAttribute('t', 's'); + xmlStream.leafNode('v', null, model.ssId); + } else if (model.value && model.value.richText) { + xmlStream.addAttribute('t', 'inlineStr'); + xmlStream.openNode('is'); + model.value.richText.forEach(text => { + this.richTextXForm.render(xmlStream, text); + }); + xmlStream.closeNode('is'); + } else { + xmlStream.addAttribute('t', 'str'); + xmlStream.leafNode('v', null, model.value); + } + break; + case Enums.ValueType.Date: + xmlStream.leafNode('v', null, utils.dateToExcel(model.value, model.date1904)); + break; + case Enums.ValueType.Hyperlink: + if (model.ssId !== undefined) { + xmlStream.addAttribute('t', 's'); + xmlStream.leafNode('v', null, model.ssId); + } else { + xmlStream.addAttribute('t', 'str'); + xmlStream.leafNode('v', null, model.text); + } + break; + case Enums.ValueType.Formula: + this.renderFormula(xmlStream, model); + break; + case Enums.ValueType.Merge: + // nothing to add + break; + default: + break; + } + xmlStream.closeNode(); // + } + + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'c': + // const address = colCache.decodeAddress(node.attributes.r); + this.model = { + address: node.attributes.r + }; + this.t = node.attributes.t; + if (node.attributes.s) { + this.model.styleId = parseInt(node.attributes.s, 10); + } + return true; + case 'f': + this.currentNode = 'f'; + this.model.si = node.attributes.si; + this.model.shareType = node.attributes.t; + this.model.ref = node.attributes.ref; + return true; + case 'v': + this.currentNode = 'v'; + return true; + case 't': + this.currentNode = 't'; + return true; + case 'r': + this.parser = this.richTextXForm; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + return; + } + switch (this.currentNode) { + case 'f': + this.model.formula = this.model.formula ? this.model.formula + text : text; + break; + case 'v': + case 't': + if (this.model.value && this.model.value.richText) { + this.model.value.richText.text = this.model.value.richText.text ? this.model.value.richText.text + text : text; + } else { + this.model.value = this.model.value ? this.model.value + text : text; + } + break; + default: + break; + } + } + parseClose(name) { + switch (name) { + case 'c': + { + const { + model + } = this; + + // first guess on cell type + if (model.formula || model.shareType) { + model.type = Enums.ValueType.Formula; + if (model.value) { + if (this.t === 'str') { + model.result = utils.xmlDecode(model.value); + } else if (this.t === 'b') { + model.result = parseInt(model.value, 10) !== 0; + } else if (this.t === 'e') { + model.result = { + error: model.value + }; + } else { + model.result = parseFloat(model.value); + } + model.value = undefined; + } + } else if (model.value !== undefined) { + switch (this.t) { + case 's': + model.type = Enums.ValueType.String; + model.value = parseInt(model.value, 10); + break; + case 'str': + model.type = Enums.ValueType.String; + model.value = utils.xmlDecode(model.value); + break; + case 'inlineStr': + model.type = Enums.ValueType.String; + break; + case 'b': + model.type = Enums.ValueType.Boolean; + model.value = parseInt(model.value, 10) !== 0; + break; + case 'e': + model.type = Enums.ValueType.Error; + model.value = { + error: model.value + }; + break; + default: + model.type = Enums.ValueType.Number; + model.value = parseFloat(model.value); + break; + } + } else if (model.styleId) { + model.type = Enums.ValueType.Null; + } else { + model.type = Enums.ValueType.Merge; + } + return false; + } + case 'f': + case 'v': + case 'is': + this.currentNode = undefined; + return true; + case 't': + if (this.parser) { + this.parser.parseClose(name); + return true; + } + this.currentNode = undefined; + return true; + case 'r': + this.model.value = this.model.value || {}; + this.model.value.richText = this.model.value.richText || []; + this.model.value.richText.push(this.parser.model); + this.parser = undefined; + this.currentNode = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + return true; + } + return false; + } + } + reconcile(model, options) { + const style = model.styleId && options.styles && options.styles.getStyleModel(model.styleId); + if (style) { + model.style = style; + } + if (model.styleId !== undefined) { + model.styleId = undefined; + } + switch (model.type) { + case Enums.ValueType.String: + if (typeof model.value === 'number') { + if (options.sharedStrings) { + model.value = options.sharedStrings.getString(model.value); + } + } + if (model.value.richText) { + model.type = Enums.ValueType.RichText; + } + break; + case Enums.ValueType.Number: + if (style && utils.isDateFmt(style.numFmt)) { + model.type = Enums.ValueType.Date; + model.value = utils.excelToDate(model.value, options.date1904); + } + break; + case Enums.ValueType.Formula: + if (model.result !== undefined && style && utils.isDateFmt(style.numFmt)) { + model.result = utils.excelToDate(model.result, options.date1904); + } + if (model.shareType === 'shared') { + if (model.ref) { + // master + options.formulae[model.si] = model.address; + } else { + // slave + model.sharedFormula = options.formulae[model.si]; + delete model.shareType; + } + delete model.si; + } + break; + default: + break; + } + + // look for hyperlink + const hyperlink = options.hyperlinkMap[model.address]; + if (hyperlink) { + if (model.type === Enums.ValueType.Formula) { + model.text = model.result; + model.result = undefined; + } else { + model.text = model.value; + model.value = undefined; + } + model.type = Enums.ValueType.Hyperlink; + model.hyperlink = hyperlink; + } + const comment = options.commentsMap && options.commentsMap[model.address]; + if (comment) { + model.comment = comment; + } + } +} +module.exports = CellXform; + +},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],74:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class CfIconExtXform extends BaseXform { + get tag() { + return 'x14:cfIcon'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + iconSet: model.iconSet, + iconId: model.iconId + }); + } + parseOpen(_ref) { + let { + attributes + } = _ref; + this.model = { + iconSet: attributes.iconSet, + iconId: BaseXform.toIntValue(attributes.iconId) + }; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = CfIconExtXform; + +},{"../../base-xform":32}],75:[function(require,module,exports){ +"use strict"; + +const { + v4: uuidv4 +} = require('uuid'); +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const DatabarExtXform = require('./databar-ext-xform'); +const IconSetExtXform = require('./icon-set-ext-xform'); +const extIcons = { + '3Triangles': true, + '3Stars': true, + '5Boxes': true +}; +class CfRuleExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:dataBar': this.databarXform = new DatabarExtXform(), + 'x14:iconSet': this.iconSetXform = new IconSetExtXform() + }; + } + get tag() { + return 'x14:cfRule'; + } + static isExt(rule) { + // is this rule primitive? + if (rule.type === 'dataBar') { + return DatabarExtXform.isExt(rule); + } + if (rule.type === 'iconSet') { + if (rule.custom || extIcons[rule.iconSet]) { + return true; + } + } + return false; + } + prepare(model) { + if (CfRuleExtXform.isExt(model)) { + model.x14Id = `{${uuidv4()}}`.toUpperCase(); + } + } + render(xmlStream, model) { + if (!CfRuleExtXform.isExt(model)) { + return; + } + switch (model.type) { + case 'dataBar': + this.renderDataBar(xmlStream, model); + break; + case 'iconSet': + this.renderIconSet(xmlStream, model); + break; + } + } + renderDataBar(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'dataBar', + id: model.x14Id + }); + this.databarXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderIconSet(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'iconSet', + priority: model.priority, + id: model.x14Id || `{${uuidv4()}}` + }); + this.iconSetXform.render(xmlStream, model); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + type: attributes.type, + x14Id: attributes.id, + priority: BaseXform.toIntValue(attributes.priority) + }; + } + onParserClose(name, parser) { + Object.assign(this.model, parser.model); + } +} +module.exports = CfRuleExtXform; + +},{"../../base-xform":32,"../../composite-xform":48,"./databar-ext-xform":79,"./icon-set-ext-xform":81,"uuid":366}],76:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const FExtXform = require('./f-ext-xform'); +class CfvoExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'xm:f': this.fExtXform = new FExtXform() + }; + } + get tag() { + return 'x14:cfvo'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: model.type + }); + if (model.value !== undefined) { + this.fExtXform.render(xmlStream, model.value); + } + xmlStream.closeNode(); + } + createNewModel(node) { + return { + type: node.attributes.type + }; + } + onParserClose(name, parser) { + switch (name) { + case 'xm:f': + this.model.value = parser.model ? parseFloat(parser.model) : 0; + break; + } + } +} +module.exports = CfvoExtXform; + +},{"../../composite-xform":48,"./f-ext-xform":80}],77:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const SqRefExtXform = require('./sqref-ext-xform'); +const CfRuleExtXform = require('./cf-rule-ext-xform'); +class ConditionalFormattingExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'xm:sqref': this.sqRef = new SqRefExtXform(), + 'x14:cfRule': this.cfRule = new CfRuleExtXform() + }; + } + get tag() { + return 'x14:conditionalFormatting'; + } + prepare(model, options) { + model.rules.forEach(rule => { + this.cfRule.prepare(rule, options); + }); + } + render(xmlStream, model) { + if (!model.rules.some(CfRuleExtXform.isExt)) { + return; + } + xmlStream.openNode(this.tag, { + 'xmlns:xm': 'http://schemas.microsoft.com/office/excel/2006/main' + }); + model.rules.filter(CfRuleExtXform.isExt).forEach(rule => this.cfRule.render(xmlStream, rule)); + + // for some odd reason, Excel needs the node to be after the rules + this.sqRef.render(xmlStream, model.ref); + xmlStream.closeNode(); + } + createNewModel() { + return { + rules: [] + }; + } + onParserClose(name, parser) { + switch (name) { + case 'xm:sqref': + this.model.ref = parser.model; + break; + case 'x14:cfRule': + this.model.rules.push(parser.model); + break; + } + } +} +module.exports = ConditionalFormattingExtXform; + +},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./sqref-ext-xform":82}],78:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const CfRuleExtXform = require('./cf-rule-ext-xform'); +const ConditionalFormattingExtXform = require('./conditional-formatting-ext-xform'); +class ConditionalFormattingsExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:conditionalFormatting': this.cfXform = new ConditionalFormattingExtXform() + }; + } + get tag() { + return 'x14:conditionalFormattings'; + } + hasContent(model) { + if (model.hasExtContent === undefined) { + model.hasExtContent = model.some(cf => cf.rules.some(CfRuleExtXform.isExt)); + } + return model.hasExtContent; + } + prepare(model, options) { + model.forEach(cf => { + this.cfXform.prepare(cf, options); + }); + } + render(xmlStream, model) { + if (this.hasContent(model)) { + xmlStream.openNode(this.tag); + model.forEach(cf => this.cfXform.render(xmlStream, cf)); + xmlStream.closeNode(); + } + } + createNewModel() { + return []; + } + onParserClose(name, parser) { + // model is array of conditional formatting objects + this.model.push(parser.model); + } +} +module.exports = ConditionalFormattingsExtXform; + +},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./conditional-formatting-ext-xform":77}],79:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const ColorXform = require('../../style/color-xform'); +const CfvoExtXform = require('./cfvo-ext-xform'); +class DatabarExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:cfvo': this.cfvoXform = new CfvoExtXform(), + 'x14:borderColor': this.borderColorXform = new ColorXform('x14:borderColor'), + 'x14:negativeBorderColor': this.negativeBorderColorXform = new ColorXform('x14:negativeBorderColor'), + 'x14:negativeFillColor': this.negativeFillColorXform = new ColorXform('x14:negativeFillColor'), + 'x14:axisColor': this.axisColorXform = new ColorXform('x14:axisColor') + }; + } + static isExt(rule) { + // not all databars need ext + // TODO: refine this + return !rule.gradient; + } + get tag() { + return 'x14:dataBar'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + minLength: BaseXform.toIntAttribute(model.minLength, 0, true), + maxLength: BaseXform.toIntAttribute(model.maxLength, 100, true), + border: BaseXform.toBoolAttribute(model.border, false), + gradient: BaseXform.toBoolAttribute(model.gradient, true), + negativeBarColorSameAsPositive: BaseXform.toBoolAttribute(model.negativeBarColorSameAsPositive, true), + negativeBarBorderColorSameAsPositive: BaseXform.toBoolAttribute(model.negativeBarBorderColorSameAsPositive, true), + axisPosition: BaseXform.toAttribute(model.axisPosition, 'auto'), + direction: BaseXform.toAttribute(model.direction, 'leftToRight') + }); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + this.borderColorXform.render(xmlStream, model.borderColor); + this.negativeBorderColorXform.render(xmlStream, model.negativeBorderColor); + this.negativeFillColorXform.render(xmlStream, model.negativeFillColor); + this.axisColorXform.render(xmlStream, model.axisColor); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + cfvo: [], + minLength: BaseXform.toIntValue(attributes.minLength, 0), + maxLength: BaseXform.toIntValue(attributes.maxLength, 100), + border: BaseXform.toBoolValue(attributes.border, false), + gradient: BaseXform.toBoolValue(attributes.gradient, true), + negativeBarColorSameAsPositive: BaseXform.toBoolValue(attributes.negativeBarColorSameAsPositive, true), + negativeBarBorderColorSameAsPositive: BaseXform.toBoolValue(attributes.negativeBarBorderColorSameAsPositive, true), + axisPosition: BaseXform.toStringValue(attributes.axisPosition, 'auto'), + direction: BaseXform.toStringValue(attributes.direction, 'leftToRight') + }; + } + onParserClose(name, parser) { + const [, prop] = name.split(':'); + switch (prop) { + case 'cfvo': + this.model.cfvo.push(parser.model); + break; + default: + this.model[prop] = parser.model; + break; + } + } +} +module.exports = DatabarExtXform; + +},{"../../base-xform":32,"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-ext-xform":76}],80:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class FExtXform extends BaseXform { + get tag() { + return 'xm:f'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = FExtXform; + +},{"../../base-xform":32}],81:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const CfvoExtXform = require('./cfvo-ext-xform'); +const CfIconExtXform = require('./cf-icon-ext-xform'); +class IconSetExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:cfvo': this.cfvoXform = new CfvoExtXform(), + 'x14:cfIcon': this.cfIconXform = new CfIconExtXform() + }; + } + get tag() { + return 'x14:iconSet'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + iconSet: BaseXform.toStringAttribute(model.iconSet), + reverse: BaseXform.toBoolAttribute(model.reverse, false), + showValue: BaseXform.toBoolAttribute(model.showValue, true), + custom: BaseXform.toBoolAttribute(model.icons, false) + }); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + if (model.icons) { + model.icons.forEach((icon, i) => { + icon.iconId = i; + this.cfIconXform.render(xmlStream, icon); + }); + } + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + cfvo: [], + iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'), + reverse: BaseXform.toBoolValue(attributes.reverse, false), + showValue: BaseXform.toBoolValue(attributes.showValue, true) + }; + } + onParserClose(name, parser) { + const [, prop] = name.split(':'); + switch (prop) { + case 'cfvo': + this.model.cfvo.push(parser.model); + break; + case 'cfIcon': + if (!this.model.icons) { + this.model.icons = []; + } + this.model.icons.push(parser.model); + break; + default: + this.model[prop] = parser.model; + break; + } + } +} +module.exports = IconSetExtXform; + +},{"../../base-xform":32,"../../composite-xform":48,"./cf-icon-ext-xform":74,"./cfvo-ext-xform":76}],82:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class SqrefExtXform extends BaseXform { + get tag() { + return 'xm:sqref'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = SqrefExtXform; + +},{"../../base-xform":32}],83:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const Range = require('../../../../doc/range'); +const DatabarXform = require('./databar-xform'); +const ExtLstRefXform = require('./ext-lst-ref-xform'); +const FormulaXform = require('./formula-xform'); +const ColorScaleXform = require('./color-scale-xform'); +const IconSetXform = require('./icon-set-xform'); +const extIcons = { + '3Triangles': true, + '3Stars': true, + '5Boxes': true +}; +const getTextFormula = model => { + if (model.formulae && model.formulae[0]) { + return model.formulae[0]; + } + const range = new Range(model.ref); + const { + tl + } = range; + switch (model.operator) { + case 'containsText': + return `NOT(ISERROR(SEARCH("${model.text}",${tl})))`; + case 'containsBlanks': + return `LEN(TRIM(${tl}))=0`; + case 'notContainsBlanks': + return `LEN(TRIM(${tl}))>0`; + case 'containsErrors': + return `ISERROR(${tl})`; + case 'notContainsErrors': + return `NOT(ISERROR(${tl}))`; + default: + return undefined; + } +}; +const getTimePeriodFormula = model => { + if (model.formulae && model.formulae[0]) { + return model.formulae[0]; + } + const range = new Range(model.ref); + const { + tl + } = range; + switch (model.timePeriod) { + case 'thisWeek': + return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`; + case 'lastWeek': + return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`; + case 'nextWeek': + return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`; + case 'yesterday': + return `FLOOR(${tl},1)=TODAY()-1`; + case 'today': + return `FLOOR(${tl},1)=TODAY()`; + case 'tomorrow': + return `FLOOR(${tl},1)=TODAY()+1`; + case 'last7Days': + return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`; + case 'lastMonth': + return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`; + case 'thisMonth': + return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`; + case 'nextMonth': + return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`; + default: + return undefined; + } +}; +const opType = attributes => { + const { + type, + operator + } = attributes; + switch (type) { + case 'containsText': + case 'containsBlanks': + case 'notContainsBlanks': + case 'containsErrors': + case 'notContainsErrors': + return { + type: 'containsText', + operator: type + }; + default: + return { + type, + operator + }; + } +}; +class CfRuleXform extends CompositeXform { + constructor() { + super(); + this.map = { + dataBar: this.databarXform = new DatabarXform(), + extLst: this.extLstRefXform = new ExtLstRefXform(), + formula: this.formulaXform = new FormulaXform(), + colorScale: this.colorScaleXform = new ColorScaleXform(), + iconSet: this.iconSetXform = new IconSetXform() + }; + } + get tag() { + return 'cfRule'; + } + static isPrimitive(rule) { + // is this rule primitive? + if (rule.type === 'iconSet') { + if (rule.custom || extIcons[rule.iconSet]) { + return false; + } + } + return true; + } + render(xmlStream, model) { + switch (model.type) { + case 'expression': + this.renderExpression(xmlStream, model); + break; + case 'cellIs': + this.renderCellIs(xmlStream, model); + break; + case 'top10': + this.renderTop10(xmlStream, model); + break; + case 'aboveAverage': + this.renderAboveAverage(xmlStream, model); + break; + case 'dataBar': + this.renderDataBar(xmlStream, model); + break; + case 'colorScale': + this.renderColorScale(xmlStream, model); + break; + case 'iconSet': + this.renderIconSet(xmlStream, model); + break; + case 'containsText': + this.renderText(xmlStream, model); + break; + case 'timePeriod': + this.renderTimePeriod(xmlStream, model); + break; + } + } + renderExpression(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'expression', + dxfId: model.dxfId, + priority: model.priority + }); + this.formulaXform.render(xmlStream, model.formulae[0]); + xmlStream.closeNode(); + } + renderCellIs(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'cellIs', + dxfId: model.dxfId, + priority: model.priority, + operator: model.operator + }); + model.formulae.forEach(formula => { + this.formulaXform.render(xmlStream, formula); + }); + xmlStream.closeNode(); + } + renderTop10(xmlStream, model) { + xmlStream.leafNode(this.tag, { + type: 'top10', + dxfId: model.dxfId, + priority: model.priority, + percent: BaseXform.toBoolAttribute(model.percent, false), + bottom: BaseXform.toBoolAttribute(model.bottom, false), + rank: BaseXform.toIntValue(model.rank, 10, true) + }); + } + renderAboveAverage(xmlStream, model) { + xmlStream.leafNode(this.tag, { + type: 'aboveAverage', + dxfId: model.dxfId, + priority: model.priority, + aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true) + }); + } + renderDataBar(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'dataBar', + priority: model.priority + }); + this.databarXform.render(xmlStream, model); + this.extLstRefXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderColorScale(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'colorScale', + priority: model.priority + }); + this.colorScaleXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderIconSet(xmlStream, model) { + // iconset is all primitive or all extLst + if (!CfRuleXform.isPrimitive(model)) { + return; + } + xmlStream.openNode(this.tag, { + type: 'iconSet', + priority: model.priority + }); + this.iconSetXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderText(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: model.operator, + dxfId: model.dxfId, + priority: model.priority, + operator: BaseXform.toStringAttribute(model.operator, 'containsText') + }); + const formula = getTextFormula(model); + if (formula) { + this.formulaXform.render(xmlStream, formula); + } + xmlStream.closeNode(); + } + renderTimePeriod(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'timePeriod', + dxfId: model.dxfId, + priority: model.priority, + timePeriod: model.timePeriod + }); + const formula = getTimePeriodFormula(model); + if (formula) { + this.formulaXform.render(xmlStream, formula); + } + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + ...opType(attributes), + dxfId: BaseXform.toIntValue(attributes.dxfId), + priority: BaseXform.toIntValue(attributes.priority), + timePeriod: attributes.timePeriod, + percent: BaseXform.toBoolValue(attributes.percent), + bottom: BaseXform.toBoolValue(attributes.bottom), + rank: BaseXform.toIntValue(attributes.rank), + aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage) + }; + } + onParserClose(name, parser) { + switch (name) { + case 'dataBar': + case 'extLst': + case 'colorScale': + case 'iconSet': + // merge parser model with ours + Object.assign(this.model, parser.model); + break; + case 'formula': + // except - formula is a string and appends to formulae + this.model.formulae = this.model.formulae || []; + this.model.formulae.push(parser.model); + break; + } + } +} +module.exports = CfRuleXform; + +},{"../../../../doc/range":10,"../../base-xform":32,"../../composite-xform":48,"./color-scale-xform":85,"./databar-xform":88,"./ext-lst-ref-xform":89,"./formula-xform":90,"./icon-set-xform":91}],84:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class CfvoXform extends BaseXform { + get tag() { + return 'cfvo'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + type: model.type, + val: model.value + }); + } + parseOpen(node) { + this.model = { + type: node.attributes.type, + value: BaseXform.toFloatValue(node.attributes.val) + }; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = CfvoXform; + +},{"../../base-xform":32}],85:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const ColorXform = require('../../style/color-xform'); +const CfvoXform = require('./cfvo-xform'); +class ColorScaleXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfvo: this.cfvoXform = new CfvoXform(), + color: this.colorXform = new ColorXform() + }; + } + get tag() { + return 'colorScale'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + model.color.forEach(color => { + this.colorXform.render(xmlStream, color); + }); + xmlStream.closeNode(); + } + createNewModel(node) { + return { + cfvo: [], + color: [] + }; + } + onParserClose(name, parser) { + this.model[name].push(parser.model); + } +} +module.exports = ColorScaleXform; + +},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],86:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const CfRuleXform = require('./cf-rule-xform'); +class ConditionalFormattingXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfRule: new CfRuleXform() + }; + } + get tag() { + return 'conditionalFormatting'; + } + render(xmlStream, model) { + // if there are no primitive rules, exit now + if (!model.rules.some(CfRuleXform.isPrimitive)) { + return; + } + xmlStream.openNode(this.tag, { + sqref: model.ref + }); + model.rules.forEach(rule => { + if (CfRuleXform.isPrimitive(rule)) { + rule.ref = model.ref; + this.map.cfRule.render(xmlStream, rule); + } + }); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + ref: attributes.sqref, + rules: [] + }; + } + onParserClose(name, parser) { + this.model.rules.push(parser.model); + } +} +module.exports = ConditionalFormattingXform; + +},{"../../composite-xform":48,"./cf-rule-xform":83}],87:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const ConditionalFormattingXform = require('./conditional-formatting-xform'); +class ConditionalFormattingsXform extends BaseXform { + constructor() { + super(); + this.cfXform = new ConditionalFormattingXform(); + } + get tag() { + return 'conditionalFormatting'; + } + reset() { + this.model = []; + } + prepare(model, options) { + // ensure each rule has a priority value + let nextPriority = model.reduce((p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)), 1); + model.forEach(cf => { + cf.rules.forEach(rule => { + if (!rule.priority) { + rule.priority = nextPriority++; + } + if (rule.style) { + rule.dxfId = options.styles.addDxfStyle(rule.style); + } + }); + }); + } + render(xmlStream, model) { + model.forEach(cf => { + this.cfXform.render(xmlStream, cf); + }); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'conditionalFormatting': + this.parser = this.cfXform; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.push(this.parser.model); + this.parser = undefined; + return false; + } + return true; + } + return false; + } + reconcile(model, options) { + model.forEach(cf => { + cf.rules.forEach(rule => { + if (rule.dxfId !== undefined) { + rule.style = options.styles.getDxfStyle(rule.dxfId); + delete rule.dxfId; + } + }); + }); + } +} +module.exports = ConditionalFormattingsXform; + +},{"../../base-xform":32,"./conditional-formatting-xform":86}],88:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const ColorXform = require('../../style/color-xform'); +const CfvoXform = require('./cfvo-xform'); +class DatabarXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfvo: this.cfvoXform = new CfvoXform(), + color: this.colorXform = new ColorXform() + }; + } + get tag() { + return 'dataBar'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + this.colorXform.render(xmlStream, model.color); + xmlStream.closeNode(); + } + createNewModel() { + return { + cfvo: [] + }; + } + onParserClose(name, parser) { + switch (name) { + case 'cfvo': + this.model.cfvo.push(parser.model); + break; + case 'color': + this.model.color = parser.model; + break; + } + } +} +module.exports = DatabarXform; + +},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],89:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +class X14IdXform extends BaseXform { + get tag() { + return 'x14:id'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +class ExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:id': this.idXform = new X14IdXform() + }; + } + get tag() { + return 'ext'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + uri: '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}', + 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main' + }); + this.idXform.render(xmlStream, model.x14Id); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + this.model.x14Id = parser.model; + } +} +class ExtLstRefXform extends CompositeXform { + constructor() { + super(); + this.map = { + ext: new ExtXform() + }; + } + get tag() { + return 'extLst'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map.ext.render(xmlStream, model); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + Object.assign(this.model, parser.model); + } +} +module.exports = ExtLstRefXform; + +},{"../../base-xform":32,"../../composite-xform":48}],90:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class FormulaXform extends BaseXform { + get tag() { + return 'formula'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = FormulaXform; + +},{"../../base-xform":32}],91:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const CfvoXform = require('./cfvo-xform'); +class IconSetXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfvo: this.cfvoXform = new CfvoXform() + }; + } + get tag() { + return 'iconSet'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + iconSet: BaseXform.toStringAttribute(model.iconSet, '3TrafficLights'), + reverse: BaseXform.toBoolAttribute(model.reverse, false), + showValue: BaseXform.toBoolAttribute(model.showValue, true) + }); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'), + reverse: BaseXform.toBoolValue(attributes.reverse), + showValue: BaseXform.toBoolValue(attributes.showValue), + cfvo: [] + }; + } + onParserClose(name, parser) { + this.model[name].push(parser.model); + } +} +module.exports = IconSetXform; + +},{"../../base-xform":32,"../../composite-xform":48,"./cfvo-xform":84}],92:[function(require,module,exports){ +"use strict"; + +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +class ColXform extends BaseXform { + get tag() { + return 'col'; + } + prepare(model, options) { + const styleId = options.styles.addStyleModel(model.style || {}); + if (styleId) { + model.styleId = styleId; + } + } + render(xmlStream, model) { + xmlStream.openNode('col'); + xmlStream.addAttribute('min', model.min); + xmlStream.addAttribute('max', model.max); + if (model.width) { + xmlStream.addAttribute('width', model.width); + } + if (model.styleId) { + xmlStream.addAttribute('style', model.styleId); + } + if (model.hidden) { + xmlStream.addAttribute('hidden', '1'); + } + if (model.bestFit) { + xmlStream.addAttribute('bestFit', '1'); + } + if (model.outlineLevel) { + xmlStream.addAttribute('outlineLevel', model.outlineLevel); + } + if (model.collapsed) { + xmlStream.addAttribute('collapsed', '1'); + } + xmlStream.addAttribute('customWidth', '1'); + xmlStream.closeNode(); + } + parseOpen(node) { + if (node.name === 'col') { + const model = this.model = { + min: parseInt(node.attributes.min || '0', 10), + max: parseInt(node.attributes.max || '0', 10), + width: node.attributes.width === undefined ? undefined : parseFloat(node.attributes.width || '0') + }; + if (node.attributes.style) { + model.styleId = parseInt(node.attributes.style, 10); + } + if (utils.parseBoolean(node.attributes.hidden)) { + model.hidden = true; + } + if (utils.parseBoolean(node.attributes.bestFit)) { + model.bestFit = true; + } + if (node.attributes.outlineLevel) { + model.outlineLevel = parseInt(node.attributes.outlineLevel, 10); + } + if (utils.parseBoolean(node.attributes.collapsed)) { + model.collapsed = true; + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } + reconcile(model, options) { + // reconcile column styles + if (model.styleId) { + model.style = options.styles.getStyleModel(model.styleId); + } + } +} +module.exports = ColXform; + +},{"../../../utils/utils":27,"../base-xform":32}],93:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const utils = require('../../../utils/utils'); +const colCache = require('../../../utils/col-cache'); +const BaseXform = require('../base-xform'); +const Range = require('../../../doc/range'); +function assign(definedName, attributes, name, defaultValue) { + const value = attributes[name]; + if (value !== undefined) { + definedName[name] = value; + } else if (defaultValue !== undefined) { + definedName[name] = defaultValue; + } +} +function assignBool(definedName, attributes, name, defaultValue) { + const value = attributes[name]; + if (value !== undefined) { + definedName[name] = utils.parseBoolean(value); + } else if (defaultValue !== undefined) { + definedName[name] = defaultValue; + } +} +function optimiseDataValidations(model) { + // Squeeze alike data validations together into rectangular ranges + // to reduce file size and speed up Excel load time + const dvList = _.map(model, (dataValidation, address) => ({ + address, + dataValidation, + marked: false + })).sort((a, b) => _.strcmp(a.address, b.address)); + const dvMap = _.keyBy(dvList, 'address'); + const matchCol = (addr, height, col) => { + for (let i = 0; i < height; i++) { + const otherAddress = colCache.encodeAddress(addr.row + i, col); + if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) { + return false; + } + } + return true; + }; + return dvList.map(dv => { + if (!dv.marked) { + const addr = colCache.decodeEx(dv.address); + if (addr.dimensions) { + dvMap[addr.dimensions].marked = true; + return { + ...dv.dataValidation, + sqref: dv.address + }; + } + + // iterate downwards - finding matching cells + let height = 1; + let otherAddress = colCache.encodeAddress(addr.row + height, addr.col); + while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) { + height++; + otherAddress = colCache.encodeAddress(addr.row + height, addr.col); + } + + // iterate rightwards... + + let width = 1; + while (matchCol(addr, height, addr.col + width)) { + width++; + } + + // mark all included addresses + for (let i = 0; i < height; i++) { + for (let j = 0; j < width; j++) { + otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j); + dvMap[otherAddress].marked = true; + } + } + if (height > 1 || width > 1) { + const bottom = addr.row + (height - 1); + const right = addr.col + (width - 1); + return { + ...dv.dataValidation, + sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}` + }; + } + return { + ...dv.dataValidation, + sqref: dv.address + }; + } + return null; + }).filter(Boolean); +} +class DataValidationsXform extends BaseXform { + get tag() { + return 'dataValidations'; + } + render(xmlStream, model) { + const optimizedModel = optimiseDataValidations(model); + if (optimizedModel.length) { + xmlStream.openNode('dataValidations', { + count: optimizedModel.length + }); + optimizedModel.forEach(value => { + xmlStream.openNode('dataValidation'); + if (value.type !== 'any') { + xmlStream.addAttribute('type', value.type); + if (value.operator && value.type !== 'list' && value.operator !== 'between') { + xmlStream.addAttribute('operator', value.operator); + } + if (value.allowBlank) { + xmlStream.addAttribute('allowBlank', '1'); + } + } + if (value.showInputMessage) { + xmlStream.addAttribute('showInputMessage', '1'); + } + if (value.promptTitle) { + xmlStream.addAttribute('promptTitle', value.promptTitle); + } + if (value.prompt) { + xmlStream.addAttribute('prompt', value.prompt); + } + if (value.showErrorMessage) { + xmlStream.addAttribute('showErrorMessage', '1'); + } + if (value.errorStyle) { + xmlStream.addAttribute('errorStyle', value.errorStyle); + } + if (value.errorTitle) { + xmlStream.addAttribute('errorTitle', value.errorTitle); + } + if (value.error) { + xmlStream.addAttribute('error', value.error); + } + xmlStream.addAttribute('sqref', value.sqref); + (value.formulae || []).forEach((formula, index) => { + xmlStream.openNode(`formula${index + 1}`); + if (value.type === 'date') { + xmlStream.writeText(utils.dateToExcel(new Date(formula))); + } else { + xmlStream.writeText(formula); + } + xmlStream.closeNode(); + }); + xmlStream.closeNode(); + }); + xmlStream.closeNode(); + } + } + parseOpen(node) { + switch (node.name) { + case 'dataValidations': + this.model = {}; + return true; + case 'dataValidation': + { + this._address = node.attributes.sqref; + const dataValidation = { + type: node.attributes.type || 'any', + formulae: [] + }; + if (node.attributes.type) { + assignBool(dataValidation, node.attributes, 'allowBlank'); + } + assignBool(dataValidation, node.attributes, 'showInputMessage'); + assignBool(dataValidation, node.attributes, 'showErrorMessage'); + switch (dataValidation.type) { + case 'any': + case 'list': + case 'custom': + break; + default: + assign(dataValidation, node.attributes, 'operator', 'between'); + break; + } + assign(dataValidation, node.attributes, 'promptTitle'); + assign(dataValidation, node.attributes, 'prompt'); + assign(dataValidation, node.attributes, 'errorStyle'); + assign(dataValidation, node.attributes, 'errorTitle'); + assign(dataValidation, node.attributes, 'error'); + this._dataValidation = dataValidation; + return true; + } + case 'formula1': + case 'formula2': + this._formula = []; + return true; + default: + return false; + } + } + parseText(text) { + if (this._formula) { + this._formula.push(text); + } + } + parseClose(name) { + switch (name) { + case 'dataValidations': + return false; + case 'dataValidation': + { + if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) { + delete this._dataValidation.formulae; + delete this._dataValidation.operator; + } + // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4 + const list = this._address.split(/\s+/g) || []; + list.forEach(addr => { + if (addr.includes(':')) { + const range = new Range(addr); + range.forEachAddress(address => { + this.model[address] = this._dataValidation; + }); + } else { + this.model[addr] = this._dataValidation; + } + }); + return true; + } + case 'formula1': + case 'formula2': + { + let formula = this._formula.join(''); + switch (this._dataValidation.type) { + case 'whole': + case 'textLength': + formula = parseInt(formula, 10); + break; + case 'decimal': + formula = parseFloat(formula); + break; + case 'date': + formula = utils.excelToDate(parseFloat(formula)); + break; + default: + break; + } + this._dataValidation.formulae.push(formula); + this._formula = undefined; + return true; + } + default: + return true; + } + } +} +module.exports = DataValidationsXform; + +},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/utils":27,"../base-xform":32}],94:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class DimensionXform extends BaseXform { + get tag() { + return 'dimension'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode('dimension', { + ref: model + }); + } + } + parseOpen(node) { + if (node.name === 'dimension') { + this.model = node.attributes.ref; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = DimensionXform; + +},{"../base-xform":32}],95:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class DrawingXform extends BaseXform { + get tag() { + return 'drawing'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode(this.tag, { + 'r:id': model.rId + }); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:id'] + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = DrawingXform; + +},{"../base-xform":32}],96:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const CompositeXform = require('../composite-xform'); +const ConditionalFormattingsExt = require('./cf-ext/conditional-formattings-ext-xform'); +class ExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:conditionalFormattings': this.conditionalFormattings = new ConditionalFormattingsExt() + }; + } + get tag() { + return 'ext'; + } + hasContent(model) { + return this.conditionalFormattings.hasContent(model.conditionalFormattings); + } + prepare(model, options) { + this.conditionalFormattings.prepare(model.conditionalFormattings, options); + } + render(xmlStream, model) { + xmlStream.openNode('ext', { + uri: '{78C0D931-6437-407d-A8EE-F0AAD7539E65}', + 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main' + }); + this.conditionalFormattings.render(xmlStream, model.conditionalFormattings); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + this.model[name] = parser.model; + } +} +class ExtLstXform extends CompositeXform { + constructor() { + super(); + this.map = { + ext: this.ext = new ExtXform() + }; + } + get tag() { + return 'extLst'; + } + prepare(model, options) { + this.ext.prepare(model, options); + } + hasContent(model) { + return this.ext.hasContent(model); + } + render(xmlStream, model) { + if (!this.hasContent(model)) { + return; + } + xmlStream.openNode('extLst'); + this.ext.render(xmlStream, model); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + Object.assign(this.model, parser.model); + } +} +module.exports = ExtLstXform; + +},{"../composite-xform":48,"./cf-ext/conditional-formattings-ext-xform":78}],97:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class HeaderFooterXform extends BaseXform { + get tag() { + return 'headerFooter'; + } + render(xmlStream, model) { + if (model) { + xmlStream.addRollback(); + let createTag = false; + xmlStream.openNode('headerFooter'); + if (model.differentFirst) { + xmlStream.addAttribute('differentFirst', '1'); + createTag = true; + } + if (model.differentOddEven) { + xmlStream.addAttribute('differentOddEven', '1'); + createTag = true; + } + if (model.oddHeader && typeof model.oddHeader === 'string') { + xmlStream.leafNode('oddHeader', null, model.oddHeader); + createTag = true; + } + if (model.oddFooter && typeof model.oddFooter === 'string') { + xmlStream.leafNode('oddFooter', null, model.oddFooter); + createTag = true; + } + if (model.evenHeader && typeof model.evenHeader === 'string') { + xmlStream.leafNode('evenHeader', null, model.evenHeader); + createTag = true; + } + if (model.evenFooter && typeof model.evenFooter === 'string') { + xmlStream.leafNode('evenFooter', null, model.evenFooter); + createTag = true; + } + if (model.firstHeader && typeof model.firstHeader === 'string') { + xmlStream.leafNode('firstHeader', null, model.firstHeader); + createTag = true; + } + if (model.firstFooter && typeof model.firstFooter === 'string') { + xmlStream.leafNode('firstFooter', null, model.firstFooter); + createTag = true; + } + if (createTag) { + xmlStream.closeNode(); + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + } + parseOpen(node) { + switch (node.name) { + case 'headerFooter': + this.model = {}; + if (node.attributes.differentFirst) { + this.model.differentFirst = parseInt(node.attributes.differentFirst, 0) === 1; + } + if (node.attributes.differentOddEven) { + this.model.differentOddEven = parseInt(node.attributes.differentOddEven, 0) === 1; + } + return true; + case 'oddHeader': + this.currentNode = 'oddHeader'; + return true; + case 'oddFooter': + this.currentNode = 'oddFooter'; + return true; + case 'evenHeader': + this.currentNode = 'evenHeader'; + return true; + case 'evenFooter': + this.currentNode = 'evenFooter'; + return true; + case 'firstHeader': + this.currentNode = 'firstHeader'; + return true; + case 'firstFooter': + this.currentNode = 'firstFooter'; + return true; + default: + return false; + } + } + parseText(text) { + switch (this.currentNode) { + case 'oddHeader': + this.model.oddHeader = text; + break; + case 'oddFooter': + this.model.oddFooter = text; + break; + case 'evenHeader': + this.model.evenHeader = text; + break; + case 'evenFooter': + this.model.evenFooter = text; + break; + case 'firstHeader': + this.model.firstHeader = text; + break; + case 'firstFooter': + this.model.firstFooter = text; + break; + default: + break; + } + } + parseClose() { + switch (this.currentNode) { + case 'oddHeader': + case 'oddFooter': + case 'evenHeader': + case 'evenFooter': + case 'firstHeader': + case 'firstFooter': + this.currentNode = undefined; + return true; + default: + return false; + } + } +} +module.exports = HeaderFooterXform; + +},{"../base-xform":32}],98:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class HyperlinkXform extends BaseXform { + get tag() { + return 'hyperlink'; + } + render(xmlStream, model) { + if (this.isInternalLink(model)) { + xmlStream.leafNode('hyperlink', { + ref: model.address, + 'r:id': model.rId, + tooltip: model.tooltip, + location: model.target + }); + } else { + xmlStream.leafNode('hyperlink', { + ref: model.address, + 'r:id': model.rId, + tooltip: model.tooltip + }); + } + } + parseOpen(node) { + if (node.name === 'hyperlink') { + this.model = { + address: node.attributes.ref, + rId: node.attributes['r:id'], + tooltip: node.attributes.tooltip + }; + + // This is an internal link + if (node.attributes.location) { + this.model.target = node.attributes.location; + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } + isInternalLink(model) { + // @example: Sheet2!D3, return true + return model.target && /^[^!]+![a-zA-Z]+[\d]+$/.test(model.target); + } +} +module.exports = HyperlinkXform; + +},{"../base-xform":32}],99:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class MergeCellXform extends BaseXform { + get tag() { + return 'mergeCell'; + } + render(xmlStream, model) { + xmlStream.leafNode('mergeCell', { + ref: model + }); + } + parseOpen(node) { + if (node.name === 'mergeCell') { + this.model = node.attributes.ref; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = MergeCellXform; + +},{"../base-xform":32}],100:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const Range = require('../../../doc/range'); +const colCache = require('../../../utils/col-cache'); +const Enums = require('../../../doc/enums'); +class Merges { + constructor() { + // optional mergeCells is array of ranges (like the xml) + this.merges = {}; + } + add(merge) { + // merge is {address, master} + if (this.merges[merge.master]) { + this.merges[merge.master].expandToAddress(merge.address); + } else { + const range = `${merge.master}:${merge.address}`; + this.merges[merge.master] = new Range(range); + } + } + get mergeCells() { + return _.map(this.merges, merge => merge.range); + } + reconcile(mergeCells, rows) { + // reconcile merge list with merge cells + _.each(mergeCells, merge => { + const dimensions = colCache.decode(merge); + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + const row = rows[i - 1]; + for (let j = dimensions.left; j <= dimensions.right; j++) { + const cell = row.cells[j - 1]; + if (!cell) { + // nulls are not included in document - so if master cell has no value - add a null one here + row.cells[j] = { + type: Enums.ValueType.Null, + address: colCache.encodeAddress(i, j) + }; + } else if (cell.type === Enums.ValueType.Merge) { + cell.master = dimensions.tl; + } + } + } + }); + } + getMasterAddress(address) { + // if address has been merged, return its master's address. Assumes reconcile has been called + const range = this.hash[address]; + return range && range.tl; + } +} +module.exports = Merges; + +},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26}],101:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const isDefined = attr => typeof attr !== 'undefined'; +class OutlinePropertiesXform extends BaseXform { + get tag() { + return 'outlinePr'; + } + render(xmlStream, model) { + if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) { + xmlStream.leafNode(this.tag, { + summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined, + summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined + }); + return true; + } + return false; + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + summaryBelow: isDefined(node.attributes.summaryBelow) ? Boolean(Number(node.attributes.summaryBelow)) : undefined, + summaryRight: isDefined(node.attributes.summaryRight) ? Boolean(Number(node.attributes.summaryRight)) : undefined + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = OutlinePropertiesXform; + +},{"../base-xform":32}],102:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class PageBreaksXform extends BaseXform { + get tag() { + return 'brk'; + } + render(xmlStream, model) { + xmlStream.leafNode('brk', model); + } + parseOpen(node) { + if (node.name === 'brk') { + this.model = node.attributes.ref; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageBreaksXform; + +},{"../base-xform":32}],103:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +class PageMarginsXform extends BaseXform { + get tag() { + return 'pageMargins'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + left: model.left, + right: model.right, + top: model.top, + bottom: model.bottom, + header: model.header, + footer: model.footer + }; + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + left: parseFloat(node.attributes.left || 0.7), + right: parseFloat(node.attributes.right || 0.7), + top: parseFloat(node.attributes.top || 0.75), + bottom: parseFloat(node.attributes.bottom || 0.75), + header: parseFloat(node.attributes.header || 0.3), + footer: parseFloat(node.attributes.footer || 0.3) + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageMarginsXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],104:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class PageSetupPropertiesXform extends BaseXform { + get tag() { + return 'pageSetUpPr'; + } + render(xmlStream, model) { + if (model && model.fitToPage) { + xmlStream.leafNode(this.tag, { + fitToPage: model.fitToPage ? '1' : undefined + }); + return true; + } + return false; + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + fitToPage: node.attributes.fitToPage === '1' + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageSetupPropertiesXform; + +},{"../base-xform":32}],105:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +function booleanToXml(model) { + return model ? '1' : undefined; +} +function pageOrderToXml(model) { + switch (model) { + case 'overThenDown': + return model; + default: + return undefined; + } +} +function cellCommentsToXml(model) { + switch (model) { + case 'atEnd': + case 'asDisplyed': + return model; + default: + return undefined; + } +} +function errorsToXml(model) { + switch (model) { + case 'dash': + case 'blank': + case 'NA': + return model; + default: + return undefined; + } +} +function pageSizeToModel(value) { + return value !== undefined ? parseInt(value, 10) : undefined; +} +class PageSetupXform extends BaseXform { + get tag() { + return 'pageSetup'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + paperSize: model.paperSize, + orientation: model.orientation, + horizontalDpi: model.horizontalDpi, + verticalDpi: model.verticalDpi, + pageOrder: pageOrderToXml(model.pageOrder), + blackAndWhite: booleanToXml(model.blackAndWhite), + draft: booleanToXml(model.draft), + cellComments: cellCommentsToXml(model.cellComments), + errors: errorsToXml(model.errors), + scale: model.scale, + fitToWidth: model.fitToWidth, + fitToHeight: model.fitToHeight, + firstPageNumber: model.firstPageNumber, + useFirstPageNumber: booleanToXml(model.firstPageNumber), + usePrinterDefaults: booleanToXml(model.usePrinterDefaults), + copies: model.copies + }; + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + paperSize: pageSizeToModel(node.attributes.paperSize), + orientation: node.attributes.orientation || 'portrait', + horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10), + verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10), + pageOrder: node.attributes.pageOrder || 'downThenOver', + blackAndWhite: node.attributes.blackAndWhite === '1', + draft: node.attributes.draft === '1', + cellComments: node.attributes.cellComments || 'None', + errors: node.attributes.errors || 'displayed', + scale: parseInt(node.attributes.scale || '100', 10), + fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10), + fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10), + firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10), + useFirstPageNumber: node.attributes.useFirstPageNumber === '1', + usePrinterDefaults: node.attributes.usePrinterDefaults === '1', + copies: parseInt(node.attributes.copies || '1', 10) + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageSetupXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],106:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class PictureXform extends BaseXform { + get tag() { + return 'picture'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode(this.tag, { + 'r:id': model.rId + }); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:id'] + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PictureXform; + +},{"../base-xform":32}],107:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +function booleanToXml(model) { + return model ? '1' : undefined; +} +class PrintOptionsXform extends BaseXform { + get tag() { + return 'printOptions'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + headings: booleanToXml(model.showRowColHeaders), + gridLines: booleanToXml(model.showGridLines), + horizontalCentered: booleanToXml(model.horizontalCentered), + verticalCentered: booleanToXml(model.verticalCentered) + }; + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + showRowColHeaders: node.attributes.headings === '1', + showGridLines: node.attributes.gridLines === '1', + horizontalCentered: node.attributes.horizontalCentered === '1', + verticalCentered: node.attributes.verticalCentered === '1' + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PrintOptionsXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],108:[function(require,module,exports){ +'use strict'; + +const PageBreaksXform = require('./page-breaks-xform'); +const ListXform = require('../list-xform'); +class RowBreaksXform extends ListXform { + constructor() { + const options = { + tag: 'rowBreaks', + count: true, + childXform: new PageBreaksXform() + }; + super(options); + } + + // get tag() { return 'rowBreaks'; } + + render(xmlStream, model) { + if (model && model.length) { + xmlStream.openNode(this.tag, this.$); + if (this.count) { + xmlStream.addAttribute(this.$count, model.length); + xmlStream.addAttribute('manualBreakCount', model.length); + } + const { + childXform + } = this; + model.forEach(childModel => { + childXform.render(xmlStream, childModel); + }); + xmlStream.closeNode(); + } else if (this.empty) { + xmlStream.leafNode(this.tag); + } + } +} +module.exports = RowBreaksXform; + +},{"../list-xform":71,"./page-breaks-xform":102}],109:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const utils = require('../../../utils/utils'); +const CellXform = require('./cell-xform'); +class RowXform extends BaseXform { + constructor(options) { + super(); + this.maxItems = options && options.maxItems; + this.map = { + c: new CellXform() + }; + } + get tag() { + return 'row'; + } + prepare(model, options) { + const styleId = options.styles.addStyleModel(model.style); + if (styleId) { + model.styleId = styleId; + } + const cellXform = this.map.c; + model.cells.forEach(cellModel => { + cellXform.prepare(cellModel, options); + }); + } + render(xmlStream, model, options) { + xmlStream.openNode('row'); + xmlStream.addAttribute('r', model.number); + if (model.height) { + xmlStream.addAttribute('ht', model.height); + xmlStream.addAttribute('customHeight', '1'); + } + if (model.hidden) { + xmlStream.addAttribute('hidden', '1'); + } + if (model.min > 0 && model.max > 0 && model.min <= model.max) { + xmlStream.addAttribute('spans', `${model.min}:${model.max}`); + } + if (model.styleId) { + xmlStream.addAttribute('s', model.styleId); + xmlStream.addAttribute('customFormat', '1'); + } + xmlStream.addAttribute('x14ac:dyDescent', '0.25'); + if (model.outlineLevel) { + xmlStream.addAttribute('outlineLevel', model.outlineLevel); + } + if (model.collapsed) { + xmlStream.addAttribute('collapsed', '1'); + } + const cellXform = this.map.c; + model.cells.forEach(cellModel => { + cellXform.render(xmlStream, cellModel, options); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === 'row') { + this.numRowsSeen += 1; + const spans = node.attributes.spans ? node.attributes.spans.split(':').map(span => parseInt(span, 10)) : [undefined, undefined]; + const model = this.model = { + number: parseInt(node.attributes.r, 10), + min: spans[0], + max: spans[1], + cells: [] + }; + if (node.attributes.s) { + model.styleId = parseInt(node.attributes.s, 10); + } + if (utils.parseBoolean(node.attributes.hidden)) { + model.hidden = true; + } + if (utils.parseBoolean(node.attributes.bestFit)) { + model.bestFit = true; + } + if (node.attributes.ht) { + model.height = parseFloat(node.attributes.ht); + } + if (node.attributes.outlineLevel) { + model.outlineLevel = parseInt(node.attributes.outlineLevel, 10); + } + if (utils.parseBoolean(node.attributes.collapsed)) { + model.collapsed = true; + } + return true; + } + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.cells.push(this.parser.model); + if (this.maxItems && this.model.cells.length > this.maxItems) { + throw new Error(`Max column count (${this.maxItems}) exceeded`); + } + this.parser = undefined; + } + return true; + } + return false; + } + reconcile(model, options) { + model.style = model.styleId ? options.styles.getStyleModel(model.styleId) : {}; + if (model.styleId !== undefined) { + model.styleId = undefined; + } + const cellXform = this.map.c; + model.cells.forEach(cellModel => { + cellXform.reconcile(cellModel, options); + }); + } +} +module.exports = RowXform; + +},{"../../../utils/utils":27,"../base-xform":32,"./cell-xform":73}],110:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +class SheetFormatPropertiesXform extends BaseXform { + get tag() { + return 'sheetFormatPr'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + defaultRowHeight: model.defaultRowHeight, + outlineLevelRow: model.outlineLevelRow, + outlineLevelCol: model.outlineLevelCol, + 'x14ac:dyDescent': model.dyDescent + }; + if (model.defaultColWidth) { + attributes.defaultColWidth = model.defaultColWidth; + } + + // default value for 'defaultRowHeight' is 15, this should not be 'custom' + if (!model.defaultRowHeight || model.defaultRowHeight !== 15) { + attributes.customHeight = '1'; + } + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode('sheetFormatPr', attributes); + } + } + } + parseOpen(node) { + if (node.name === 'sheetFormatPr') { + this.model = { + defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || '0'), + dyDescent: parseFloat(node.attributes['x14ac:dyDescent'] || '0'), + outlineLevelRow: parseInt(node.attributes.outlineLevelRow || '0', 10), + outlineLevelCol: parseInt(node.attributes.outlineLevelCol || '0', 10) + }; + if (node.attributes.defaultColWidth) { + this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth); + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = SheetFormatPropertiesXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],111:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const ColorXform = require('../style/color-xform'); +const PageSetupPropertiesXform = require('./page-setup-properties-xform'); +const OutlinePropertiesXform = require('./outline-properties-xform'); +class SheetPropertiesXform extends BaseXform { + constructor() { + super(); + this.map = { + tabColor: new ColorXform('tabColor'), + pageSetUpPr: new PageSetupPropertiesXform(), + outlinePr: new OutlinePropertiesXform() + }; + } + get tag() { + return 'sheetPr'; + } + render(xmlStream, model) { + if (model) { + xmlStream.addRollback(); + xmlStream.openNode('sheetPr'); + let inner = false; + inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner; + inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner; + inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner; + if (inner) { + xmlStream.closeNode(); + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === this.tag) { + this.reset(); + return true; + } + if (this.map[node.name]) { + this.parser = this.map[node.name]; + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + return true; + } + return false; + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) { + this.model = {}; + if (this.map.tabColor.model) { + this.model.tabColor = this.map.tabColor.model; + } + if (this.map.pageSetUpPr.model) { + this.model.pageSetup = this.map.pageSetUpPr.model; + } + if (this.map.outlinePr.model) { + this.model.outlineProperties = this.map.outlinePr.model; + } + } else { + this.model = null; + } + return false; + } +} +module.exports = SheetPropertiesXform; + +},{"../base-xform":32,"../style/color-xform":128,"./outline-properties-xform":101,"./page-setup-properties-xform":104}],112:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +function booleanToXml(model, value) { + return model ? value : undefined; +} +function xmlToBoolean(value, equals) { + return value === equals ? true : undefined; +} +class SheetProtectionXform extends BaseXform { + get tag() { + return 'sheetProtection'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + sheet: booleanToXml(model.sheet, '1'), + selectLockedCells: model.selectLockedCells === false ? '1' : undefined, + selectUnlockedCells: model.selectUnlockedCells === false ? '1' : undefined, + formatCells: booleanToXml(model.formatCells, '0'), + formatColumns: booleanToXml(model.formatColumns, '0'), + formatRows: booleanToXml(model.formatRows, '0'), + insertColumns: booleanToXml(model.insertColumns, '0'), + insertRows: booleanToXml(model.insertRows, '0'), + insertHyperlinks: booleanToXml(model.insertHyperlinks, '0'), + deleteColumns: booleanToXml(model.deleteColumns, '0'), + deleteRows: booleanToXml(model.deleteRows, '0'), + sort: booleanToXml(model.sort, '0'), + autoFilter: booleanToXml(model.autoFilter, '0'), + pivotTables: booleanToXml(model.pivotTables, '0') + }; + if (model.sheet) { + attributes.algorithmName = model.algorithmName; + attributes.hashValue = model.hashValue; + attributes.saltValue = model.saltValue; + attributes.spinCount = model.spinCount; + attributes.objects = booleanToXml(model.objects === false, '1'); + attributes.scenarios = booleanToXml(model.scenarios === false, '1'); + } + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + sheet: xmlToBoolean(node.attributes.sheet, '1'), + objects: node.attributes.objects === '1' ? false : undefined, + scenarios: node.attributes.scenarios === '1' ? false : undefined, + selectLockedCells: node.attributes.selectLockedCells === '1' ? false : undefined, + selectUnlockedCells: node.attributes.selectUnlockedCells === '1' ? false : undefined, + formatCells: xmlToBoolean(node.attributes.formatCells, '0'), + formatColumns: xmlToBoolean(node.attributes.formatColumns, '0'), + formatRows: xmlToBoolean(node.attributes.formatRows, '0'), + insertColumns: xmlToBoolean(node.attributes.insertColumns, '0'), + insertRows: xmlToBoolean(node.attributes.insertRows, '0'), + insertHyperlinks: xmlToBoolean(node.attributes.insertHyperlinks, '0'), + deleteColumns: xmlToBoolean(node.attributes.deleteColumns, '0'), + deleteRows: xmlToBoolean(node.attributes.deleteRows, '0'), + sort: xmlToBoolean(node.attributes.sort, '0'), + autoFilter: xmlToBoolean(node.attributes.autoFilter, '0'), + pivotTables: xmlToBoolean(node.attributes.pivotTables, '0') + }; + if (node.attributes.algorithmName) { + this.model.algorithmName = node.attributes.algorithmName; + this.model.hashValue = node.attributes.hashValue; + this.model.saltValue = node.attributes.saltValue; + this.model.spinCount = parseInt(node.attributes.spinCount, 10); + } + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = SheetProtectionXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],113:[function(require,module,exports){ +"use strict"; + +const colCache = require('../../../utils/col-cache'); +const BaseXform = require('../base-xform'); +const VIEW_STATES = { + frozen: 'frozen', + frozenSplit: 'frozen', + split: 'split' +}; +class SheetViewXform extends BaseXform { + get tag() { + return 'sheetView'; + } + prepare(model) { + switch (model.state) { + case 'frozen': + case 'split': + break; + default: + model.state = 'normal'; + break; + } + } + render(xmlStream, model) { + xmlStream.openNode('sheetView', { + workbookViewId: model.workbookViewId || 0 + }); + const add = function (name, value, included) { + if (included) { + xmlStream.addAttribute(name, value); + } + }; + add('rightToLeft', '1', model.rightToLeft === true); + add('tabSelected', '1', model.tabSelected); + add('showRuler', '0', model.showRuler === false); + add('showRowColHeaders', '0', model.showRowColHeaders === false); + add('showGridLines', '0', model.showGridLines === false); + add('zoomScale', model.zoomScale, model.zoomScale); + add('zoomScaleNormal', model.zoomScaleNormal, model.zoomScaleNormal); + add('view', model.style, model.style); + let topLeftCell; + let xSplit; + let ySplit; + let activePane; + switch (model.state) { + case 'frozen': + xSplit = model.xSplit || 0; + ySplit = model.ySplit || 0; + topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address; + activePane = model.xSplit && model.ySplit && 'bottomRight' || model.xSplit && 'topRight' || 'bottomLeft'; + xmlStream.leafNode('pane', { + xSplit: model.xSplit || undefined, + ySplit: model.ySplit || undefined, + topLeftCell, + activePane, + state: 'frozen' + }); + xmlStream.leafNode('selection', { + pane: activePane, + activeCell: model.activeCell, + sqref: model.activeCell + }); + break; + case 'split': + if (model.activePane === 'topLeft') { + model.activePane = undefined; + } + xmlStream.leafNode('pane', { + xSplit: model.xSplit || undefined, + ySplit: model.ySplit || undefined, + topLeftCell: model.topLeftCell, + activePane: model.activePane + }); + xmlStream.leafNode('selection', { + pane: model.activePane, + activeCell: model.activeCell, + sqref: model.activeCell + }); + break; + case 'normal': + if (model.activeCell) { + xmlStream.leafNode('selection', { + activeCell: model.activeCell, + sqref: model.activeCell + }); + } + break; + default: + break; + } + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case 'sheetView': + this.sheetView = { + workbookViewId: parseInt(node.attributes.workbookViewId, 10), + rightToLeft: node.attributes.rightToLeft === '1', + tabSelected: node.attributes.tabSelected === '1', + showRuler: !(node.attributes.showRuler === '0'), + showRowColHeaders: !(node.attributes.showRowColHeaders === '0'), + showGridLines: !(node.attributes.showGridLines === '0'), + zoomScale: parseInt(node.attributes.zoomScale || '100', 10), + zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || '100', 10), + style: node.attributes.view + }; + this.pane = undefined; + this.selections = {}; + return true; + case 'pane': + this.pane = { + xSplit: parseInt(node.attributes.xSplit || '0', 10), + ySplit: parseInt(node.attributes.ySplit || '0', 10), + topLeftCell: node.attributes.topLeftCell, + activePane: node.attributes.activePane || 'topLeft', + state: node.attributes.state + }; + return true; + case 'selection': + { + const name = node.attributes.pane || 'topLeft'; + this.selections[name] = { + pane: name, + activeCell: node.attributes.activeCell + }; + return true; + } + default: + return false; + } + } + parseText() {} + parseClose(name) { + let model; + let selection; + switch (name) { + case 'sheetView': + if (this.sheetView && this.pane) { + model = this.model = { + workbookViewId: this.sheetView.workbookViewId, + rightToLeft: this.sheetView.rightToLeft, + state: VIEW_STATES[this.pane.state] || 'split', + // split is default + xSplit: this.pane.xSplit, + ySplit: this.pane.ySplit, + topLeftCell: this.pane.topLeftCell, + showRuler: this.sheetView.showRuler, + showRowColHeaders: this.sheetView.showRowColHeaders, + showGridLines: this.sheetView.showGridLines, + zoomScale: this.sheetView.zoomScale, + zoomScaleNormal: this.sheetView.zoomScaleNormal + }; + if (this.model.state === 'split') { + model.activePane = this.pane.activePane; + } + selection = this.selections[this.pane.activePane]; + if (selection && selection.activeCell) { + model.activeCell = selection.activeCell; + } + if (this.sheetView.style) { + model.style = this.sheetView.style; + } + } else { + model = this.model = { + workbookViewId: this.sheetView.workbookViewId, + rightToLeft: this.sheetView.rightToLeft, + state: 'normal', + showRuler: this.sheetView.showRuler, + showRowColHeaders: this.sheetView.showRowColHeaders, + showGridLines: this.sheetView.showGridLines, + zoomScale: this.sheetView.zoomScale, + zoomScaleNormal: this.sheetView.zoomScaleNormal + }; + selection = this.selections.topLeft; + if (selection && selection.activeCell) { + model.activeCell = selection.activeCell; + } + if (this.sheetView.style) { + model.style = this.sheetView.style; + } + } + return false; + default: + return true; + } + } + reconcile() {} +} +module.exports = SheetViewXform; + +},{"../../../utils/col-cache":19,"../base-xform":32}],114:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class TablePartXform extends BaseXform { + get tag() { + return 'tablePart'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode(this.tag, { + 'r:id': model.rId + }); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:id'] + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = TablePartXform; + +},{"../base-xform":32}],115:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const colCache = require('../../../utils/col-cache'); +const XmlStream = require('../../../utils/xml-stream'); +const RelType = require('../../rel-type'); +const Merges = require('./merges'); +const BaseXform = require('../base-xform'); +const ListXform = require('../list-xform'); +const RowXform = require('./row-xform'); +const ColXform = require('./col-xform'); +const DimensionXform = require('./dimension-xform'); +const HyperlinkXform = require('./hyperlink-xform'); +const MergeCellXform = require('./merge-cell-xform'); +const DataValidationsXform = require('./data-validations-xform'); +const SheetPropertiesXform = require('./sheet-properties-xform'); +const SheetFormatPropertiesXform = require('./sheet-format-properties-xform'); +const SheetViewXform = require('./sheet-view-xform'); +const SheetProtectionXform = require('./sheet-protection-xform'); +const PageMarginsXform = require('./page-margins-xform'); +const PageSetupXform = require('./page-setup-xform'); +const PrintOptionsXform = require('./print-options-xform'); +const AutoFilterXform = require('./auto-filter-xform'); +const PictureXform = require('./picture-xform'); +const DrawingXform = require('./drawing-xform'); +const TablePartXform = require('./table-part-xform'); +const RowBreaksXform = require('./row-breaks-xform'); +const HeaderFooterXform = require('./header-footer-xform'); +const ConditionalFormattingsXform = require('./cf/conditional-formattings-xform'); +const ExtListXform = require('./ext-lst-xform'); +const mergeRule = (rule, extRule) => { + Object.keys(extRule).forEach(key => { + const value = rule[key]; + const extValue = extRule[key]; + if (value === undefined && extValue !== undefined) { + rule[key] = extValue; + } + }); +}; +const mergeConditionalFormattings = (model, extModel) => { + // conditional formattings are rendered in worksheet.conditionalFormatting and also in + // worksheet.extLst.ext.x14:conditionalFormattings + // some (e.g. dataBar) are even spread across both! + if (!extModel || !extModel.length) { + return model; + } + if (!model || !model.length) { + return extModel; + } + + // index model rules by x14Id + const cfMap = {}; + const ruleMap = {}; + model.forEach(cf => { + cfMap[cf.ref] = cf; + cf.rules.forEach(rule => { + const { + x14Id + } = rule; + if (x14Id) { + ruleMap[x14Id] = rule; + } + }); + }); + extModel.forEach(extCf => { + extCf.rules.forEach(extRule => { + const rule = ruleMap[extRule.x14Id]; + if (rule) { + // merge with matching rule + mergeRule(rule, extRule); + } else if (cfMap[extCf.ref]) { + // reuse existing cf ref + cfMap[extCf.ref].rules.push(extRule); + } else { + // create new cf + model.push({ + ref: extCf.ref, + rules: [extRule] + }); + } + }); + }); + + // need to cope with rules in extModel that don't exist in model + return model; +}; +class WorkSheetXform extends BaseXform { + constructor(options) { + super(); + const { + maxRows, + maxCols, + ignoreNodes + } = options || {}; + this.ignoreNodes = ignoreNodes || []; + this.map = { + sheetPr: new SheetPropertiesXform(), + dimension: new DimensionXform(), + sheetViews: new ListXform({ + tag: 'sheetViews', + count: false, + childXform: new SheetViewXform() + }), + sheetFormatPr: new SheetFormatPropertiesXform(), + cols: new ListXform({ + tag: 'cols', + count: false, + childXform: new ColXform() + }), + sheetData: new ListXform({ + tag: 'sheetData', + count: false, + empty: true, + childXform: new RowXform({ + maxItems: maxCols + }), + maxItems: maxRows + }), + autoFilter: new AutoFilterXform(), + mergeCells: new ListXform({ + tag: 'mergeCells', + count: true, + childXform: new MergeCellXform() + }), + rowBreaks: new RowBreaksXform(), + hyperlinks: new ListXform({ + tag: 'hyperlinks', + count: false, + childXform: new HyperlinkXform() + }), + pageMargins: new PageMarginsXform(), + dataValidations: new DataValidationsXform(), + pageSetup: new PageSetupXform(), + headerFooter: new HeaderFooterXform(), + printOptions: new PrintOptionsXform(), + picture: new PictureXform(), + drawing: new DrawingXform(), + sheetProtection: new SheetProtectionXform(), + tableParts: new ListXform({ + tag: 'tableParts', + count: true, + childXform: new TablePartXform() + }), + conditionalFormatting: new ConditionalFormattingsXform(), + extLst: new ExtListXform() + }; + } + prepare(model, options) { + options.merges = new Merges(); + model.hyperlinks = options.hyperlinks = []; + model.comments = options.comments = []; + options.formulae = {}; + options.siFormulae = 0; + this.map.cols.prepare(model.cols, options); + this.map.sheetData.prepare(model.rows, options); + this.map.conditionalFormatting.prepare(model.conditionalFormattings, options); + model.mergeCells = options.merges.mergeCells; + + // prepare relationships + const rels = model.rels = []; + function nextRid(r) { + return `rId${r.length + 1}`; + } + model.hyperlinks.forEach(hyperlink => { + const rId = nextRid(rels); + hyperlink.rId = rId; + rels.push({ + Id: rId, + Type: RelType.Hyperlink, + Target: hyperlink.target, + TargetMode: 'External' + }); + }); + + // prepare comment relationships + if (model.comments.length > 0) { + const comment = { + Id: nextRid(rels), + Type: RelType.Comments, + Target: `../comments${model.id}.xml` + }; + rels.push(comment); + const vmlDrawing = { + Id: nextRid(rels), + Type: RelType.VmlDrawing, + Target: `../drawings/vmlDrawing${model.id}.vml` + }; + rels.push(vmlDrawing); + model.comments.forEach(item => { + item.refAddress = colCache.decodeAddress(item.ref); + }); + options.commentRefs.push({ + commentName: `comments${model.id}`, + vmlDrawing: `vmlDrawing${model.id}` + }); + } + const drawingRelsHash = []; + let bookImage; + model.media.forEach(medium => { + if (medium.type === 'background') { + const rId = nextRid(rels); + bookImage = options.media[medium.imageId]; + rels.push({ + Id: rId, + Type: RelType.Image, + Target: `../media/${bookImage.name}.${bookImage.extension}` + }); + model.background = { + rId + }; + model.image = options.media[medium.imageId]; + } else if (medium.type === 'image') { + let { + drawing + } = model; + bookImage = options.media[medium.imageId]; + if (!drawing) { + drawing = model.drawing = { + rId: nextRid(rels), + name: `drawing${++options.drawingsCount}`, + anchors: [], + rels: [] + }; + options.drawings.push(drawing); + rels.push({ + Id: drawing.rId, + Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + Target: `../drawings/${drawing.name}.xml` + }); + } + let rIdImage = this.preImageId === medium.imageId ? drawingRelsHash[medium.imageId] : drawingRelsHash[drawing.rels.length]; + if (!rIdImage) { + rIdImage = nextRid(drawing.rels); + drawingRelsHash[drawing.rels.length] = rIdImage; + drawing.rels.push({ + Id: rIdImage, + Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + Target: `../media/${bookImage.name}.${bookImage.extension}` + }); + } + const anchor = { + picture: { + rId: rIdImage + }, + range: medium.range + }; + if (medium.hyperlinks && medium.hyperlinks.hyperlink) { + const rIdHyperLink = nextRid(drawing.rels); + drawingRelsHash[drawing.rels.length] = rIdHyperLink; + anchor.picture.hyperlinks = { + tooltip: medium.hyperlinks.tooltip, + rId: rIdHyperLink + }; + drawing.rels.push({ + Id: rIdHyperLink, + Type: RelType.Hyperlink, + Target: medium.hyperlinks.hyperlink, + TargetMode: 'External' + }); + } + this.preImageId = medium.imageId; + drawing.anchors.push(anchor); + } + }); + + // prepare tables + model.tables.forEach(table => { + // relationships + const rId = nextRid(rels); + table.rId = rId; + rels.push({ + Id: rId, + Type: RelType.Table, + Target: `../tables/${table.target}` + }); + + // dynamic styles + table.columns.forEach(column => { + const { + style + } = column; + if (style) { + column.dxfId = options.styles.addDxfStyle(style); + } + }); + }); + + // prepare ext items + this.map.extLst.prepare(model, options); + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('worksheet', WorkSheetXform.WORKSHEET_ATTRIBUTES); + const sheetFormatPropertiesModel = model.properties ? { + defaultRowHeight: model.properties.defaultRowHeight, + dyDescent: model.properties.dyDescent, + outlineLevelCol: model.properties.outlineLevelCol, + outlineLevelRow: model.properties.outlineLevelRow + } : undefined; + if (model.properties && model.properties.defaultColWidth) { + sheetFormatPropertiesModel.defaultColWidth = model.properties.defaultColWidth; + } + const sheetPropertiesModel = { + outlineProperties: model.properties && model.properties.outlineProperties, + tabColor: model.properties && model.properties.tabColor, + pageSetup: model.pageSetup && model.pageSetup.fitToPage ? { + fitToPage: model.pageSetup.fitToPage + } : undefined + }; + const pageMarginsModel = model.pageSetup && model.pageSetup.margins; + const printOptionsModel = { + showRowColHeaders: model.pageSetup && model.pageSetup.showRowColHeaders, + showGridLines: model.pageSetup && model.pageSetup.showGridLines, + horizontalCentered: model.pageSetup && model.pageSetup.horizontalCentered, + verticalCentered: model.pageSetup && model.pageSetup.verticalCentered + }; + const sheetProtectionModel = model.sheetProtection; + this.map.sheetPr.render(xmlStream, sheetPropertiesModel); + this.map.dimension.render(xmlStream, model.dimensions); + this.map.sheetViews.render(xmlStream, model.views); + this.map.sheetFormatPr.render(xmlStream, sheetFormatPropertiesModel); + this.map.cols.render(xmlStream, model.cols); + this.map.sheetData.render(xmlStream, model.rows); + this.map.sheetProtection.render(xmlStream, sheetProtectionModel); // Note: must be after sheetData and before autoFilter + this.map.autoFilter.render(xmlStream, model.autoFilter); + this.map.mergeCells.render(xmlStream, model.mergeCells); + this.map.conditionalFormatting.render(xmlStream, model.conditionalFormattings); // Note: must be before dataValidations + this.map.dataValidations.render(xmlStream, model.dataValidations); + + // For some reason hyperlinks have to be after the data validations + this.map.hyperlinks.render(xmlStream, model.hyperlinks); + this.map.printOptions.render(xmlStream, printOptionsModel); // Note: must be before pageMargins + this.map.pageMargins.render(xmlStream, pageMarginsModel); + this.map.pageSetup.render(xmlStream, model.pageSetup); + this.map.headerFooter.render(xmlStream, model.headerFooter); + this.map.rowBreaks.render(xmlStream, model.rowBreaks); + this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks + this.map.picture.render(xmlStream, model.background); // Note: must be after drawing + this.map.tableParts.render(xmlStream, model.tables); + this.map.extLst.render(xmlStream, model); + if (model.rels) { + // add a node for each comment + model.rels.forEach(rel => { + if (rel.Type === RelType.VmlDrawing) { + xmlStream.leafNode('legacyDrawing', { + 'r:id': rel.Id + }); + } + }); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === 'worksheet') { + _.each(this.map, xform => { + xform.reset(); + }); + return true; + } + if (this.map[node.name] && !this.ignoreNodes.includes(node.name)) { + this.parser = this.map[node.name]; + this.parser.parseOpen(node); + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'worksheet': + { + const properties = this.map.sheetFormatPr.model || {}; + if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) { + properties.tabColor = this.map.sheetPr.model.tabColor; + } + if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) { + properties.outlineProperties = this.map.sheetPr.model.outlineProperties; + } + const sheetProperties = { + fitToPage: this.map.sheetPr.model && this.map.sheetPr.model.pageSetup && this.map.sheetPr.model.pageSetup.fitToPage || false, + margins: this.map.pageMargins.model + }; + const pageSetup = Object.assign(sheetProperties, this.map.pageSetup.model, this.map.printOptions.model); + const conditionalFormattings = mergeConditionalFormattings(this.map.conditionalFormatting.model, this.map.extLst.model && this.map.extLst.model['x14:conditionalFormattings']); + this.model = { + dimensions: this.map.dimension.model, + cols: this.map.cols.model, + rows: this.map.sheetData.model, + mergeCells: this.map.mergeCells.model, + hyperlinks: this.map.hyperlinks.model, + dataValidations: this.map.dataValidations.model, + properties, + views: this.map.sheetViews.model, + pageSetup, + headerFooter: this.map.headerFooter.model, + background: this.map.picture.model, + drawing: this.map.drawing.model, + tables: this.map.tableParts.model, + conditionalFormattings + }; + if (this.map.autoFilter.model) { + this.model.autoFilter = this.map.autoFilter.model; + } + if (this.map.sheetProtection.model) { + this.model.sheetProtection = this.map.sheetProtection.model; + } + return false; + } + default: + // not quite sure how we get here! + return true; + } + } + reconcile(model, options) { + // options.merges = new Merges(); + // options.merges.reconcile(model.mergeCells, model.rows); + const rels = (model.relationships || []).reduce((h, rel) => { + h[rel.Id] = rel; + if (rel.Type === RelType.Comments) { + model.comments = options.comments[rel.Target].comments; + } + if (rel.Type === RelType.VmlDrawing && model.comments && model.comments.length) { + const vmlComment = options.vmlDrawings[rel.Target].comments; + model.comments.forEach((comment, index) => { + comment.note = Object.assign({}, comment.note, vmlComment[index]); + }); + } + return h; + }, {}); + options.commentsMap = (model.comments || []).reduce((h, comment) => { + if (comment.ref) { + h[comment.ref] = comment; + } + return h; + }, {}); + options.hyperlinkMap = (model.hyperlinks || []).reduce((h, hyperlink) => { + if (hyperlink.rId) { + h[hyperlink.address] = rels[hyperlink.rId].Target; + } + return h; + }, {}); + options.formulae = {}; + + // compact the rows and cells + model.rows = model.rows && model.rows.filter(Boolean) || []; + model.rows.forEach(row => { + row.cells = row.cells && row.cells.filter(Boolean) || []; + }); + this.map.cols.reconcile(model.cols, options); + this.map.sheetData.reconcile(model.rows, options); + this.map.conditionalFormatting.reconcile(model.conditionalFormattings, options); + model.media = []; + if (model.drawing) { + const drawingRel = rels[model.drawing.rId]; + const match = drawingRel.Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/); + if (match) { + const drawingName = match[1]; + const drawing = options.drawings[drawingName]; + drawing.anchors.forEach(anchor => { + if (anchor.medium) { + const image = { + type: 'image', + imageId: anchor.medium.index, + range: anchor.range, + hyperlinks: anchor.picture.hyperlinks + }; + model.media.push(image); + } + }); + } + } + const backgroundRel = model.background && rels[model.background.rId]; + if (backgroundRel) { + const target = backgroundRel.Target.split('/media/')[1]; + const imageId = options.mediaIndex && options.mediaIndex[target]; + if (imageId !== undefined) { + model.media.push({ + type: 'background', + imageId + }); + } + } + model.tables = (model.tables || []).map(tablePart => { + const rel = rels[tablePart.rId]; + return options.tables[rel.Target]; + }); + delete model.relationships; + delete model.hyperlinks; + delete model.comments; + } +} +WorkSheetXform.WORKSHEET_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'x14ac', + 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac' +}; +module.exports = WorkSheetXform; + +},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../../rel-type":31,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":72,"./cf/conditional-formattings-xform":87,"./col-xform":92,"./data-validations-xform":93,"./dimension-xform":94,"./drawing-xform":95,"./ext-lst-xform":96,"./header-footer-xform":97,"./hyperlink-xform":98,"./merge-cell-xform":99,"./merges":100,"./page-margins-xform":103,"./page-setup-xform":105,"./picture-xform":106,"./print-options-xform":107,"./row-breaks-xform":108,"./row-xform":109,"./sheet-format-properties-xform":110,"./sheet-properties-xform":111,"./sheet-protection-xform":112,"./sheet-view-xform":113,"./table-part-xform":114}],116:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class BooleanXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + } + render(xmlStream, model) { + if (model) { + xmlStream.openNode(this.tag); + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = true; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = BooleanXform; + +},{"../base-xform":32}],117:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class DateXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + this._format = options.format || function (dt) { + try { + if (Number.isNaN(dt.getTime())) return ''; + return dt.toISOString(); + } catch (e) { + return ''; + } + }; + this._parse = options.parse || function (str) { + return new Date(str); + }; + } + render(xmlStream, model) { + if (model) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, this._format(model)); + } else { + xmlStream.writeText(this._format(model)); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = this._parse(node.attributes[this.attr]); + } else { + this.text = []; + } + } + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = this._parse(this.text.join('')); + } + return false; + } +} +module.exports = DateXform; + +},{"../base-xform":32}],118:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class IntegerXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + + // option to render zero + this.zero = options.zero; + } + render(xmlStream, model) { + // int is different to float in that zero is not rendered + if (model || this.zero) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, model); + } else { + xmlStream.writeText(model); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = parseInt(node.attributes[this.attr], 10); + } else { + this.text = []; + } + return true; + } + return false; + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = parseInt(this.text.join('') || 0, 10); + } + return false; + } +} +module.exports = IntegerXform; + +},{"../base-xform":32}],119:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class StringXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + } + render(xmlStream, model) { + if (model !== undefined) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, model); + } else { + xmlStream.writeText(model); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = node.attributes[this.attr]; + } else { + this.text = []; + } + } + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = this.text.join(''); + } + return false; + } +} +module.exports = StringXform; + +},{"../base-xform":32}],120:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('./base-xform'); +const XmlStream = require('../../utils/xml-stream'); + +// const model = { +// tag: 'name', +// $: {attr: 'value'}, +// c: [ +// { tag: 'child' } +// ], +// t: 'some text' +// }; + +function build(xmlStream, model) { + xmlStream.openNode(model.tag, model.$); + if (model.c) { + model.c.forEach(child => { + build(xmlStream, child); + }); + } + if (model.t) { + xmlStream.writeText(model.t); + } + xmlStream.closeNode(); +} +class StaticXform extends BaseXform { + constructor(model) { + super(); + + // This class is an optimisation for static (unimportant and unchanging) xml + // It is stateless - apart from its static model and so can be used as a singleton + // Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else + // Known issues: + // since stateless - parseOpen always returns true. Parent xform must know when to start using this xform + // if the root tag is recursive, the parsing will behave unpredictably + this._model = model; + } + render(xmlStream) { + if (!this._xml) { + const stream = new XmlStream(); + build(stream, this._model); + this._xml = stream.xml; + } + xmlStream.writeXml(this._xml); + } + parseOpen() { + return true; + } + parseText() {} + parseClose(name) { + switch (name) { + case this._model.tag: + return false; + default: + return true; + } + } +} +module.exports = StaticXform; + +},{"../../utils/xml-stream":28,"./base-xform":32}],121:[function(require,module,exports){ +"use strict"; + +const TextXform = require('./text-xform'); +const RichTextXform = require('./rich-text-xform'); +const BaseXform = require('../base-xform'); + +// +// (its pronounciation in KATAKANA) +// + +class PhoneticTextXform extends BaseXform { + constructor() { + super(); + this.map = { + r: new RichTextXform(), + t: new TextXform() + }; + } + get tag() { + return 'rPh'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + sb: model.sb || 0, + eb: model.eb || 0 + }); + if (model && model.hasOwnProperty('richText') && model.richText) { + const { + r + } = this.map; + model.richText.forEach(text => { + r.render(xmlStream, text); + }); + } else if (model) { + this.map.t.render(xmlStream, model.text); + } + xmlStream.closeNode(); + } + parseOpen(node) { + const { + name + } = node; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (name === this.tag) { + this.model = { + sb: parseInt(node.attributes.sb, 10), + eb: parseInt(node.attributes.eb, 10) + }; + return true; + } + this.parser = this.map[name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + switch (name) { + case 'r': + { + let rt = this.model.richText; + if (!rt) { + rt = this.model.richText = []; + } + rt.push(this.parser.model); + break; + } + case 't': + this.model.text = this.parser.model; + break; + default: + break; + } + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + return true; + } + } +} +module.exports = PhoneticTextXform; + +},{"../base-xform":32,"./rich-text-xform":122,"./text-xform":125}],122:[function(require,module,exports){ +"use strict"; + +const TextXform = require('./text-xform'); +const FontXform = require('../style/font-xform'); +const BaseXform = require('../base-xform'); + +// +// +// +// +// +// +// +// +// is +// + +class RichTextXform extends BaseXform { + constructor(model) { + super(); + this.model = model; + } + get tag() { + return 'r'; + } + get textXform() { + return this._textXform || (this._textXform = new TextXform()); + } + get fontXform() { + return this._fontXform || (this._fontXform = new FontXform(RichTextXform.FONT_OPTIONS)); + } + render(xmlStream, model) { + model = model || this.model; + xmlStream.openNode('r'); + if (model.font) { + this.fontXform.render(xmlStream, model.font); + } + this.textXform.render(xmlStream, model.text); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'r': + this.model = {}; + return true; + case 't': + this.parser = this.textXform; + this.parser.parseOpen(node); + return true; + case 'rPr': + this.parser = this.fontXform; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + switch (name) { + case 'r': + return false; + case 't': + this.model.text = this.parser.model; + this.parser = undefined; + return true; + case 'rPr': + this.model.font = this.parser.model; + this.parser = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + } + return true; + } + } +} +RichTextXform.FONT_OPTIONS = { + tagName: 'rPr', + fontNameTag: 'rFont' +}; +module.exports = RichTextXform; + +},{"../base-xform":32,"../style/font-xform":131,"./text-xform":125}],123:[function(require,module,exports){ +"use strict"; + +const TextXform = require('./text-xform'); +const RichTextXform = require('./rich-text-xform'); +const PhoneticTextXform = require('./phonetic-text-xform'); +const BaseXform = require('../base-xform'); + +// +// ... +// +// +// +// + +class SharedStringXform extends BaseXform { + constructor(model) { + super(); + this.model = model; + this.map = { + r: new RichTextXform(), + t: new TextXform(), + rPh: new PhoneticTextXform() + }; + } + get tag() { + return 'si'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + if (model && model.hasOwnProperty('richText') && model.richText) { + if (model.richText.length) { + model.richText.forEach(text => { + this.map.r.render(xmlStream, text); + }); + } else { + this.map.t.render(xmlStream, ''); + } + } else if (model !== undefined && model !== null) { + this.map.t.render(xmlStream, model); + } + xmlStream.closeNode(); + } + parseOpen(node) { + const { + name + } = node; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (name === this.tag) { + this.model = {}; + return true; + } + this.parser = this.map[name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + switch (name) { + case 'r': + { + let rt = this.model.richText; + if (!rt) { + rt = this.model.richText = []; + } + rt.push(this.parser.model); + break; + } + case 't': + this.model = this.parser.model; + break; + default: + break; + } + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + return true; + } + } +} +module.exports = SharedStringXform; + +},{"../base-xform":32,"./phonetic-text-xform":121,"./rich-text-xform":122,"./text-xform":125}],124:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const SharedStringXform = require('./shared-string-xform'); +class SharedStringsXform extends BaseXform { + constructor(model) { + super(); + this.model = model || { + values: [], + count: 0 + }; + this.hash = Object.create(null); + this.rich = Object.create(null); + } + get sharedStringXform() { + return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform()); + } + get values() { + return this.model.values; + } + get uniqueCount() { + return this.model.values.length; + } + get count() { + return this.model.count; + } + getString(index) { + return this.model.values[index]; + } + add(value) { + return value.richText ? this.addRichText(value) : this.addText(value); + } + addText(value) { + let index = this.hash[value]; + if (index === undefined) { + index = this.hash[value] = this.model.values.length; + this.model.values.push(value); + } + this.model.count++; + return index; + } + addRichText(value) { + // TODO: add WeakMap here + const xml = this.sharedStringXform.toXml(value); + let index = this.rich[xml]; + if (index === undefined) { + index = this.rich[xml] = this.model.values.length; + this.model.values.push(value); + } + this.model.count++; + return index; + } + + // + // + // <%=text%> + // + // + + render(xmlStream, model) { + model = model || this._values; + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('sst', { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + count: model.count, + uniqueCount: model.values.length + }); + const sx = this.sharedStringXform; + model.values.forEach(sharedString => { + sx.render(xmlStream, sharedString); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'sst': + return true; + case 'si': + this.parser = this.sharedStringXform; + this.parser.parseOpen(node); + return true; + default: + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.values.push(this.parser.model); + this.model.count++; + this.parser = undefined; + } + return true; + } + switch (name) { + case 'sst': + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +module.exports = SharedStringsXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"./shared-string-xform":123}],125:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); + +// is + +class TextXform extends BaseXform { + get tag() { + return 't'; + } + render(xmlStream, model) { + xmlStream.openNode('t'); + if (/^\s|\n|\s$/.test(model)) { + xmlStream.addAttribute('xml:space', 'preserve'); + } + xmlStream.writeText(model); + xmlStream.closeNode(); + } + get model() { + return this._text.join('').replace(/_x([0-9A-F]{4})_/g, ($0, $1) => String.fromCharCode(parseInt($1, 16))); + } + parseOpen(node) { + switch (node.name) { + case 't': + this._text = []; + return true; + default: + return false; + } + } + parseText(text) { + this._text.push(text); + } + parseClose() { + return false; + } +} +module.exports = TextXform; + +},{"../base-xform":32}],126:[function(require,module,exports){ +"use strict"; + +const Enums = require('../../../doc/enums'); +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +const validation = { + horizontalValues: ['left', 'center', 'right', 'fill', 'centerContinuous', 'distributed', 'justify'].reduce((p, v) => { + p[v] = true; + return p; + }, {}), + horizontal(value) { + return this.horizontalValues[value] ? value : undefined; + }, + verticalValues: ['top', 'middle', 'bottom', 'distributed', 'justify'].reduce((p, v) => { + p[v] = true; + return p; + }, {}), + vertical(value) { + if (value === 'middle') return 'center'; + return this.verticalValues[value] ? value : undefined; + }, + wrapText(value) { + return value ? true : undefined; + }, + shrinkToFit(value) { + return value ? true : undefined; + }, + textRotation(value) { + switch (value) { + case 'vertical': + return value; + default: + value = utils.validInt(value); + return value >= -90 && value <= 90 ? value : undefined; + } + }, + indent(value) { + value = utils.validInt(value); + return Math.max(0, value); + }, + readingOrder(value) { + switch (value) { + case 'ltr': + return Enums.ReadingOrder.LeftToRight; + case 'rtl': + return Enums.ReadingOrder.RightToLeft; + default: + return undefined; + } + } +}; +const textRotationXform = { + toXml(textRotation) { + textRotation = validation.textRotation(textRotation); + if (textRotation) { + if (textRotation === 'vertical') { + return 255; + } + const tr = Math.round(textRotation); + if (tr >= 0 && tr <= 90) { + return tr; + } + if (tr < 0 && tr >= -90) { + return 90 - tr; + } + } + return undefined; + }, + toModel(textRotation) { + const tr = utils.validInt(textRotation); + if (tr !== undefined) { + if (tr === 255) { + return 'vertical'; + } + if (tr >= 0 && tr <= 90) { + return tr; + } + if (tr > 90 && tr <= 180) { + return 90 - tr; + } + } + return undefined; + } +}; + +// Alignment encapsulates translation from style.alignment model to/from xlsx +class AlignmentXform extends BaseXform { + get tag() { + return 'alignment'; + } + render(xmlStream, model) { + xmlStream.addRollback(); + xmlStream.openNode('alignment'); + let isValid = false; + function add(name, value) { + if (value) { + xmlStream.addAttribute(name, value); + isValid = true; + } + } + add('horizontal', validation.horizontal(model.horizontal)); + add('vertical', validation.vertical(model.vertical)); + add('wrapText', validation.wrapText(model.wrapText) ? '1' : false); + add('shrinkToFit', validation.shrinkToFit(model.shrinkToFit) ? '1' : false); + add('indent', validation.indent(model.indent)); + add('textRotation', textRotationXform.toXml(model.textRotation)); + add('readingOrder', validation.readingOrder(model.readingOrder)); + xmlStream.closeNode(); + if (isValid) { + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + parseOpen(node) { + const model = {}; + let valid = false; + function add(truthy, name, value) { + if (truthy) { + model[name] = value; + valid = true; + } + } + add(node.attributes.horizontal, 'horizontal', node.attributes.horizontal); + add(node.attributes.vertical, 'vertical', node.attributes.vertical === 'center' ? 'middle' : node.attributes.vertical); + add(node.attributes.wrapText, 'wrapText', utils.parseBoolean(node.attributes.wrapText)); + add(node.attributes.shrinkToFit, 'shrinkToFit', utils.parseBoolean(node.attributes.shrinkToFit)); + add(node.attributes.indent, 'indent', parseInt(node.attributes.indent, 10)); + add(node.attributes.textRotation, 'textRotation', textRotationXform.toModel(node.attributes.textRotation)); + add(node.attributes.readingOrder, 'readingOrder', node.attributes.readingOrder === '2' ? 'rtl' : 'ltr'); + this.model = valid ? model : null; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = AlignmentXform; + +},{"../../../doc/enums":7,"../../../utils/utils":27,"../base-xform":32}],127:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const BaseXform = require('../base-xform'); +const utils = require('../../../utils/utils'); +const ColorXform = require('./color-xform'); +class EdgeXform extends BaseXform { + constructor(name) { + super(); + this.name = name; + this.map = { + color: new ColorXform() + }; + } + get tag() { + return this.name; + } + render(xmlStream, model, defaultColor) { + const color = model && model.color || defaultColor || this.defaultColor; + xmlStream.openNode(this.name); + if (model && model.style) { + xmlStream.addAttribute('style', model.style); + if (color) { + this.map.color.render(xmlStream, color); + } + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.name: + { + const { + style + } = node.attributes; + if (style) { + this.model = { + style + }; + } else { + this.model = undefined; + } + return true; + } + case 'color': + this.parser = this.map.color; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (name === this.name) { + if (this.map.color.model) { + if (!this.model) { + this.model = {}; + } + this.model.color = this.map.color.model; + } + } + return false; + } + validStyle(value) { + return EdgeXform.validStyleValues[value]; + } +} +EdgeXform.validStyleValues = ['thin', 'dashed', 'dotted', 'dashDot', 'hair', 'dashDotDot', 'slantDashDot', 'mediumDashed', 'mediumDashDotDot', 'mediumDashDot', 'medium', 'double', 'thick'].reduce((p, v) => { + p[v] = true; + return p; +}, {}); + +// Border encapsulates translation from border model to/from xlsx +class BorderXform extends BaseXform { + constructor() { + super(); + this.map = { + top: new EdgeXform('top'), + left: new EdgeXform('left'), + bottom: new EdgeXform('bottom'), + right: new EdgeXform('right'), + diagonal: new EdgeXform('diagonal') + }; + } + render(xmlStream, model) { + const { + color + } = model; + xmlStream.openNode('border'); + if (model.diagonal && model.diagonal.style) { + if (model.diagonal.up) { + xmlStream.addAttribute('diagonalUp', '1'); + } + if (model.diagonal.down) { + xmlStream.addAttribute('diagonalDown', '1'); + } + } + function add(edgeModel, edgeXform) { + if (edgeModel && !edgeModel.color && model.color) { + // don't mess with incoming models + edgeModel = { + ...edgeModel, + color: model.color + }; + } + edgeXform.render(xmlStream, edgeModel, color); + } + add(model.left, this.map.left); + add(model.right, this.map.right); + add(model.top, this.map.top); + add(model.bottom, this.map.bottom); + add(model.diagonal, this.map.diagonal); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'border': + this.reset(); + this.diagonalUp = utils.parseBoolean(node.attributes.diagonalUp); + this.diagonalDown = utils.parseBoolean(node.attributes.diagonalDown); + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (name === 'border') { + const model = this.model = {}; + const add = function (key, edgeModel, extensions) { + if (edgeModel) { + if (extensions) { + Object.assign(edgeModel, extensions); + } + model[key] = edgeModel; + } + }; + add('left', this.map.left.model); + add('right', this.map.right.model); + add('top', this.map.top.model); + add('bottom', this.map.bottom.model); + add('diagonal', this.map.diagonal.model, { + up: this.diagonalUp, + down: this.diagonalDown + }); + } + return false; + } +} +module.exports = BorderXform; + +},{"../../../utils/utils":27,"../base-xform":32,"./color-xform":128}],128:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); + +// Color encapsulates translation from color model to/from xlsx +class ColorXform extends BaseXform { + constructor(name) { + super(); + + // this.name controls the xm node name + this.name = name || 'color'; + } + get tag() { + return this.name; + } + render(xmlStream, model) { + if (model) { + xmlStream.openNode(this.name); + if (model.argb) { + xmlStream.addAttribute('rgb', model.argb); + } else if (model.theme !== undefined) { + xmlStream.addAttribute('theme', model.theme); + if (model.tint !== undefined) { + xmlStream.addAttribute('tint', model.tint); + } + } else if (model.indexed !== undefined) { + xmlStream.addAttribute('indexed', model.indexed); + } else { + xmlStream.addAttribute('auto', '1'); + } + xmlStream.closeNode(); + return true; + } + return false; + } + parseOpen(node) { + if (node.name === this.name) { + if (node.attributes.rgb) { + this.model = { + argb: node.attributes.rgb + }; + } else if (node.attributes.theme) { + this.model = { + theme: parseInt(node.attributes.theme, 10) + }; + if (node.attributes.tint) { + this.model.tint = parseFloat(node.attributes.tint); + } + } else if (node.attributes.indexed) { + this.model = { + indexed: parseInt(node.attributes.indexed, 10) + }; + } else { + this.model = undefined; + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = ColorXform; + +},{"../base-xform":32}],129:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const AlignmentXform = require('./alignment-xform'); +const BorderXform = require('./border-xform'); +const FillXform = require('./fill-xform'); +const FontXform = require('./font-xform'); +const NumFmtXform = require('./numfmt-xform'); +const ProtectionXform = require('./protection-xform'); + +// +// Optional +// Optional +// + +// Style assists translation from style model to/from xlsx +class DxfXform extends BaseXform { + constructor() { + super(); + this.map = { + alignment: new AlignmentXform(), + border: new BorderXform(), + fill: new FillXform(), + font: new FontXform(), + numFmt: new NumFmtXform(), + protection: new ProtectionXform() + }; + } + get tag() { + return 'dxf'; + } + + // how do we generate dxfid? + + render(xmlStream, model) { + xmlStream.openNode(this.tag); + if (model.font) { + this.map.font.render(xmlStream, model.font); + } + if (model.numFmt && model.numFmtId) { + const numFmtModel = { + id: model.numFmtId, + formatCode: model.numFmt + }; + this.map.numFmt.render(xmlStream, numFmtModel); + } + if (model.fill) { + this.map.fill.render(xmlStream, model.fill); + } + if (model.alignment) { + this.map.alignment.render(xmlStream, model.alignment); + } + if (model.border) { + this.map.border.render(xmlStream, model.border); + } + if (model.protection) { + this.map.protection.render(xmlStream, model.protection); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + // this node is often repeated. Need to reset children + this.reset(); + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + return true; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (name === this.tag) { + this.model = { + alignment: this.map.alignment.model, + border: this.map.border.model, + fill: this.map.fill.model, + font: this.map.font.model, + numFmt: this.map.numFmt.model, + protection: this.map.protection.model + }; + return false; + } + return true; + } +} +module.exports = DxfXform; + +},{"../base-xform":32,"./alignment-xform":126,"./border-xform":127,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./protection-xform":133}],130:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const BaseXform = require('../base-xform'); +const ColorXform = require('./color-xform'); +class StopXform extends BaseXform { + constructor() { + super(); + this.map = { + color: new ColorXform() + }; + } + get tag() { + return 'stop'; + } + render(xmlStream, model) { + xmlStream.openNode('stop'); + xmlStream.addAttribute('position', model.position); + this.map.color.render(xmlStream, model.color); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'stop': + this.model = { + position: parseFloat(node.attributes.position) + }; + return true; + case 'color': + this.parser = this.map.color; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.color = this.parser.model; + this.parser = undefined; + } + return true; + } + return false; + } +} +class PatternFillXform extends BaseXform { + constructor() { + super(); + this.map = { + fgColor: new ColorXform('fgColor'), + bgColor: new ColorXform('bgColor') + }; + } + get name() { + return 'pattern'; + } + get tag() { + return 'patternFill'; + } + render(xmlStream, model) { + xmlStream.openNode('patternFill'); + xmlStream.addAttribute('patternType', model.pattern); + if (model.fgColor) { + this.map.fgColor.render(xmlStream, model.fgColor); + } + if (model.bgColor) { + this.map.bgColor.render(xmlStream, model.bgColor); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'patternFill': + this.model = { + type: 'pattern', + pattern: node.attributes.patternType + }; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + if (this.parser.model) { + this.model[name] = this.parser.model; + } + this.parser = undefined; + } + return true; + } + return false; + } +} +class GradientFillXform extends BaseXform { + constructor() { + super(); + this.map = { + stop: new StopXform() + }; + // if (model) { + // this.gradient = model.gradient; + // if (model.center) { + // this.center = model.center; + // } + // if (model.degree !== undefined) { + // this.degree = model.degree; + // } + // this.stops = model.stops.map(function(stop) { return new StopXform(stop); }); + // } else { + // this.stops = []; + // } + } + + get name() { + return 'gradient'; + } + get tag() { + return 'gradientFill'; + } + render(xmlStream, model) { + xmlStream.openNode('gradientFill'); + switch (model.gradient) { + case 'angle': + xmlStream.addAttribute('degree', model.degree); + break; + case 'path': + xmlStream.addAttribute('type', 'path'); + if (model.center.left) { + xmlStream.addAttribute('left', model.center.left); + if (model.center.right === undefined) { + xmlStream.addAttribute('right', model.center.left); + } + } + if (model.center.right) { + xmlStream.addAttribute('right', model.center.right); + } + if (model.center.top) { + xmlStream.addAttribute('top', model.center.top); + if (model.center.bottom === undefined) { + xmlStream.addAttribute('bottom', model.center.top); + } + } + if (model.center.bottom) { + xmlStream.addAttribute('bottom', model.center.bottom); + } + break; + default: + break; + } + const stopXform = this.map.stop; + model.stops.forEach(stopModel => { + stopXform.render(xmlStream, stopModel); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'gradientFill': + { + const model = this.model = { + stops: [] + }; + if (node.attributes.degree) { + model.gradient = 'angle'; + model.degree = parseInt(node.attributes.degree, 10); + } else if (node.attributes.type === 'path') { + model.gradient = 'path'; + model.center = { + left: node.attributes.left ? parseFloat(node.attributes.left) : 0, + top: node.attributes.top ? parseFloat(node.attributes.top) : 0 + }; + if (node.attributes.right !== node.attributes.left) { + model.center.right = node.attributes.right ? parseFloat(node.attributes.right) : 0; + } + if (node.attributes.bottom !== node.attributes.top) { + model.center.bottom = node.attributes.bottom ? parseFloat(node.attributes.bottom) : 0; + } + } + return true; + } + case 'stop': + this.parser = this.map.stop; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.stops.push(this.parser.model); + this.parser = undefined; + } + return true; + } + return false; + } +} + +// Fill encapsulates translation from fill model to/from xlsx +class FillXform extends BaseXform { + constructor() { + super(); + this.map = { + patternFill: new PatternFillXform(), + gradientFill: new GradientFillXform() + }; + } + get tag() { + return 'fill'; + } + render(xmlStream, model) { + xmlStream.addRollback(); + xmlStream.openNode('fill'); + switch (model.type) { + case 'pattern': + this.map.patternFill.render(xmlStream, model); + break; + case 'gradient': + this.map.gradientFill.render(xmlStream, model); + break; + default: + xmlStream.rollback(); + return; + } + xmlStream.closeNode(); + xmlStream.commit(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'fill': + this.model = {}; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model = this.parser.model; + this.model.type = this.parser.name; + this.parser = undefined; + } + return true; + } + return false; + } + validStyle(value) { + return FillXform.validPatternValues[value]; + } +} +FillXform.validPatternValues = ['none', 'solid', 'darkVertical', 'darkGray', 'mediumGray', 'lightGray', 'gray125', 'gray0625', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis', 'lightGrid'].reduce((p, v) => { + p[v] = true; + return p; +}, {}); +FillXform.StopXform = StopXform; +FillXform.PatternFillXform = PatternFillXform; +FillXform.GradientFillXform = GradientFillXform; +module.exports = FillXform; + +},{"../base-xform":32,"./color-xform":128}],131:[function(require,module,exports){ +'use strict'; + +const ColorXform = require('./color-xform'); +const BooleanXform = require('../simple/boolean-xform'); +const IntegerXform = require('../simple/integer-xform'); +const StringXform = require('../simple/string-xform'); +const UnderlineXform = require('./underline-xform'); +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); + +// Font encapsulates translation from font model to xlsx +class FontXform extends BaseXform { + constructor(options) { + super(); + this.options = options || FontXform.OPTIONS; + this.map = { + b: { + prop: 'bold', + xform: new BooleanXform({ + tag: 'b', + attr: 'val' + }) + }, + i: { + prop: 'italic', + xform: new BooleanXform({ + tag: 'i', + attr: 'val' + }) + }, + u: { + prop: 'underline', + xform: new UnderlineXform() + }, + charset: { + prop: 'charset', + xform: new IntegerXform({ + tag: 'charset', + attr: 'val' + }) + }, + color: { + prop: 'color', + xform: new ColorXform() + }, + condense: { + prop: 'condense', + xform: new BooleanXform({ + tag: 'condense', + attr: 'val' + }) + }, + extend: { + prop: 'extend', + xform: new BooleanXform({ + tag: 'extend', + attr: 'val' + }) + }, + family: { + prop: 'family', + xform: new IntegerXform({ + tag: 'family', + attr: 'val' + }) + }, + outline: { + prop: 'outline', + xform: new BooleanXform({ + tag: 'outline', + attr: 'val' + }) + }, + vertAlign: { + prop: 'vertAlign', + xform: new StringXform({ + tag: 'vertAlign', + attr: 'val' + }) + }, + scheme: { + prop: 'scheme', + xform: new StringXform({ + tag: 'scheme', + attr: 'val' + }) + }, + shadow: { + prop: 'shadow', + xform: new BooleanXform({ + tag: 'shadow', + attr: 'val' + }) + }, + strike: { + prop: 'strike', + xform: new BooleanXform({ + tag: 'strike', + attr: 'val' + }) + }, + sz: { + prop: 'size', + xform: new IntegerXform({ + tag: 'sz', + attr: 'val' + }) + } + }; + this.map[this.options.fontNameTag] = { + prop: 'name', + xform: new StringXform({ + tag: this.options.fontNameTag, + attr: 'val' + }) + }; + } + get tag() { + return this.options.tagName; + } + render(xmlStream, model) { + const { + map + } = this; + xmlStream.openNode(this.options.tagName); + _.each(this.map, (defn, tag) => { + map[tag].xform.render(xmlStream, model[defn.prop]); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (this.map[node.name]) { + this.parser = this.map[node.name].xform; + return this.parser.parseOpen(node); + } + switch (node.name) { + case this.options.tagName: + this.model = {}; + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser && !this.parser.parseClose(name)) { + const item = this.map[name]; + if (this.parser.model) { + this.model[item.prop] = this.parser.model; + } + this.parser = undefined; + return true; + } + switch (name) { + case this.options.tagName: + return false; + default: + return true; + } + } +} +FontXform.OPTIONS = { + tagName: 'font', + fontNameTag: 'name' +}; +module.exports = FontXform; + +},{"../../../utils/under-dash":26,"../base-xform":32,"../simple/boolean-xform":116,"../simple/integer-xform":118,"../simple/string-xform":119,"./color-xform":128,"./underline-xform":136}],132:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const defaultNumFormats = require('../../defaultnumformats'); +const BaseXform = require('../base-xform'); +function hashDefaultFormats() { + const hash = {}; + _.each(defaultNumFormats, (dnf, id) => { + if (dnf.f) { + hash[dnf.f] = parseInt(id, 10); + } + // at some point, add the other cultures here... + }); + + return hash; +} +const defaultFmtHash = hashDefaultFormats(); + +// NumFmt encapsulates translation between number format and xlsx +class NumFmtXform extends BaseXform { + constructor(id, formatCode) { + super(); + this.id = id; + this.formatCode = formatCode; + } + get tag() { + return 'numFmt'; + } + render(xmlStream, model) { + xmlStream.leafNode('numFmt', { + numFmtId: model.id, + formatCode: model.formatCode + }); + } + parseOpen(node) { + switch (node.name) { + case 'numFmt': + this.model = { + id: parseInt(node.attributes.numFmtId, 10), + formatCode: node.attributes.formatCode.replace(/[\\](.)/g, '$1') + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +NumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) { + return defaultFmtHash[formatCode]; +}; +NumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) { + return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f; +}; +module.exports = NumFmtXform; + +},{"../../../utils/under-dash":26,"../../defaultnumformats":30,"../base-xform":32}],133:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const validation = { + boolean(value, dflt) { + if (value === undefined) { + return dflt; + } + return value; + } +}; + +// Protection encapsulates translation from style.protection model to/from xlsx +class ProtectionXform extends BaseXform { + get tag() { + return 'protection'; + } + render(xmlStream, model) { + xmlStream.addRollback(); + xmlStream.openNode('protection'); + let isValid = false; + function add(name, value) { + if (value !== undefined) { + xmlStream.addAttribute(name, value); + isValid = true; + } + } + add('locked', validation.boolean(model.locked, true) ? undefined : '0'); + add('hidden', validation.boolean(model.hidden, false) ? '1' : undefined); + xmlStream.closeNode(); + if (isValid) { + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + parseOpen(node) { + const model = { + locked: !(node.attributes.locked === '0'), + hidden: node.attributes.hidden === '1' + }; + + // only want to record models that differ from defaults + const isSignificant = !model.locked || model.hidden; + this.model = isSignificant ? model : null; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = ProtectionXform; + +},{"../base-xform":32}],134:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const AlignmentXform = require('./alignment-xform'); +const ProtectionXform = require('./protection-xform'); + +// +// Optional +// Optional +// + +// Style assists translation from style model to/from xlsx +class StyleXform extends BaseXform { + constructor(options) { + super(); + this.xfId = !!(options && options.xfId); + this.map = { + alignment: new AlignmentXform(), + protection: new ProtectionXform() + }; + } + get tag() { + return 'xf'; + } + render(xmlStream, model) { + xmlStream.openNode('xf', { + numFmtId: model.numFmtId || 0, + fontId: model.fontId || 0, + fillId: model.fillId || 0, + borderId: model.borderId || 0 + }); + if (this.xfId) { + xmlStream.addAttribute('xfId', model.xfId || 0); + } + if (model.numFmtId) { + xmlStream.addAttribute('applyNumberFormat', '1'); + } + if (model.fontId) { + xmlStream.addAttribute('applyFont', '1'); + } + if (model.fillId) { + xmlStream.addAttribute('applyFill', '1'); + } + if (model.borderId) { + xmlStream.addAttribute('applyBorder', '1'); + } + if (model.alignment) { + xmlStream.addAttribute('applyAlignment', '1'); + } + if (model.protection) { + xmlStream.addAttribute('applyProtection', '1'); + } + + /** + * Rendering tags causes close of XML stream. + * Therefore adding attributes must be done before rendering tags. + */ + + if (model.alignment) { + this.map.alignment.render(xmlStream, model.alignment); + } + if (model.protection) { + this.map.protection.render(xmlStream, model.protection); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + // used during sax parsing of xml to build font object + switch (node.name) { + case 'xf': + this.model = { + numFmtId: parseInt(node.attributes.numFmtId, 10), + fontId: parseInt(node.attributes.fontId, 10), + fillId: parseInt(node.attributes.fillId, 10), + borderId: parseInt(node.attributes.borderId, 10) + }; + if (this.xfId) { + this.model.xfId = parseInt(node.attributes.xfId, 10); + } + return true; + case 'alignment': + this.parser = this.map.alignment; + this.parser.parseOpen(node); + return true; + case 'protection': + this.parser = this.map.protection; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + if (this.map.protection === this.parser) { + this.model.protection = this.parser.model; + } else { + this.model.alignment = this.parser.model; + } + this.parser = undefined; + } + return true; + } + return name !== 'xf'; + } +} +module.exports = StyleXform; + +},{"../base-xform":32,"./alignment-xform":126,"./protection-xform":133}],135:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const Enums = require('../../../doc/enums'); +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const StaticXform = require('../static-xform'); +const ListXform = require('../list-xform'); +const FontXform = require('./font-xform'); +const FillXform = require('./fill-xform'); +const BorderXform = require('./border-xform'); +const NumFmtXform = require('./numfmt-xform'); +const StyleXform = require('./style-xform'); +const DxfXform = require('./dxf-xform'); + +// custom numfmt ids start here +const NUMFMT_BASE = 164; + +// ============================================================================= +// StylesXform is used to generate and parse the styles.xml file +// it manages the collections of fonts, number formats, alignments, etc +class StylesXform extends BaseXform { + constructor(initialise) { + super(); + this.map = { + numFmts: new ListXform({ + tag: 'numFmts', + count: true, + childXform: new NumFmtXform() + }), + fonts: new ListXform({ + tag: 'fonts', + count: true, + childXform: new FontXform(), + $: { + 'x14ac:knownFonts': 1 + } + }), + fills: new ListXform({ + tag: 'fills', + count: true, + childXform: new FillXform() + }), + borders: new ListXform({ + tag: 'borders', + count: true, + childXform: new BorderXform() + }), + cellStyleXfs: new ListXform({ + tag: 'cellStyleXfs', + count: true, + childXform: new StyleXform() + }), + cellXfs: new ListXform({ + tag: 'cellXfs', + count: true, + childXform: new StyleXform({ + xfId: true + }) + }), + dxfs: new ListXform({ + tag: 'dxfs', + always: true, + count: true, + childXform: new DxfXform() + }), + // for style manager + numFmt: new NumFmtXform(), + font: new FontXform(), + fill: new FillXform(), + border: new BorderXform(), + style: new StyleXform({ + xfId: true + }), + cellStyles: StylesXform.STATIC_XFORMS.cellStyles, + tableStyles: StylesXform.STATIC_XFORMS.tableStyles, + extLst: StylesXform.STATIC_XFORMS.extLst + }; + if (initialise) { + // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing + this.init(); + } + } + initIndex() { + this.index = { + style: {}, + numFmt: {}, + numFmtNextId: 164, + // start custom format ids here + font: {}, + border: {}, + fill: {} + }; + } + init() { + // Prepare for Style Manager role + this.model = { + styles: [], + numFmts: [], + fonts: [], + borders: [], + fills: [], + dxfs: [] + }; + this.initIndex(); + + // default (zero) border + this._addBorder({}); + + // add default (all zero) style + this._addStyle({ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }); + + // add default fills + this._addFill({ + type: 'pattern', + pattern: 'none' + }); + this._addFill({ + type: 'pattern', + pattern: 'gray125' + }); + this.weakMap = new WeakMap(); + } + render(xmlStream, model) { + model = model || this.model; + // + // + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES); + if (this.index) { + // model has been built by style manager role (contains xml) + if (model.numFmts && model.numFmts.length) { + xmlStream.openNode('numFmts', { + count: model.numFmts.length + }); + model.numFmts.forEach(numFmtXml => { + xmlStream.writeXml(numFmtXml); + }); + xmlStream.closeNode(); + } + if (!model.fonts.length) { + // default (zero) font + this._addFont({ + size: 11, + color: { + theme: 1 + }, + name: 'Calibri', + family: 2, + scheme: 'minor' + }); + } + xmlStream.openNode('fonts', { + count: model.fonts.length, + 'x14ac:knownFonts': 1 + }); + model.fonts.forEach(fontXml => { + xmlStream.writeXml(fontXml); + }); + xmlStream.closeNode(); + xmlStream.openNode('fills', { + count: model.fills.length + }); + model.fills.forEach(fillXml => { + xmlStream.writeXml(fillXml); + }); + xmlStream.closeNode(); + xmlStream.openNode('borders', { + count: model.borders.length + }); + model.borders.forEach(borderXml => { + xmlStream.writeXml(borderXml); + }); + xmlStream.closeNode(); + this.map.cellStyleXfs.render(xmlStream, [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }]); + xmlStream.openNode('cellXfs', { + count: model.styles.length + }); + model.styles.forEach(styleXml => { + xmlStream.writeXml(styleXml); + }); + xmlStream.closeNode(); + } else { + // model is plain JSON and needs to be xformed + this.map.numFmts.render(xmlStream, model.numFmts); + this.map.fonts.render(xmlStream, model.fonts); + this.map.fills.render(xmlStream, model.fills); + this.map.borders.render(xmlStream, model.borders); + this.map.cellStyleXfs.render(xmlStream, [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }]); + this.map.cellXfs.render(xmlStream, model.styles); + } + StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream); + this.map.dxfs.render(xmlStream, model.dxfs); + StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream); + StylesXform.STATIC_XFORMS.extLst.render(xmlStream); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'styleSheet': + this.initIndex(); + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + return true; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'styleSheet': + { + this.model = {}; + const add = (propName, xform) => { + if (xform.model && xform.model.length) { + this.model[propName] = xform.model; + } + }; + add('numFmts', this.map.numFmts); + add('fonts', this.map.fonts); + add('fills', this.map.fills); + add('borders', this.map.borders); + add('styles', this.map.cellXfs); + add('dxfs', this.map.dxfs); + + // index numFmts + this.index = { + model: [], + numFmt: [] + }; + if (this.model.numFmts) { + const numFmtIndex = this.index.numFmt; + this.model.numFmts.forEach(numFmt => { + numFmtIndex[numFmt.id] = numFmt.formatCode; + }); + } + return false; + } + default: + // not quite sure how we get here! + return true; + } + } + + // add a cell's style model to the collection + // each style property is processed and cross-referenced, etc. + // the styleId is returned. Note: cellType is used when numFmt not defined + addStyleModel(model, cellType) { + if (!model) { + return 0; + } + + // if we have no default font, add it here now + if (!this.model.fonts.length) { + // default (zero) font + this._addFont({ + size: 11, + color: { + theme: 1 + }, + name: 'Calibri', + family: 2, + scheme: 'minor' + }); + } + + // if we have seen this style object before, assume it has the same styleId + if (this.weakMap && this.weakMap.has(model)) { + return this.weakMap.get(model); + } + const style = {}; + cellType = cellType || Enums.ValueType.Number; + if (model.numFmt) { + style.numFmtId = this._addNumFmtStr(model.numFmt); + } else { + switch (cellType) { + case Enums.ValueType.Number: + style.numFmtId = this._addNumFmtStr('General'); + break; + case Enums.ValueType.Date: + style.numFmtId = this._addNumFmtStr('mm-dd-yy'); + break; + default: + break; + } + } + if (model.font) { + style.fontId = this._addFont(model.font); + } + if (model.border) { + style.borderId = this._addBorder(model.border); + } + if (model.fill) { + style.fillId = this._addFill(model.fill); + } + if (model.alignment) { + style.alignment = model.alignment; + } + if (model.protection) { + style.protection = model.protection; + } + const styleId = this._addStyle(style); + if (this.weakMap) { + this.weakMap.set(model, styleId); + } + return styleId; + } + + // given a styleId (i.e. s="n"), get the cell's style model + // objects are shared where possible. + getStyleModel(id) { + // if the style doesn't exist return null + const style = this.model.styles[id]; + if (!style) return null; + + // have we built this model before? + let model = this.index.model[id]; + if (model) return model; + + // build a new model + model = this.index.model[id] = {}; + + // ------------------------------------------------------- + // number format + if (style.numFmtId) { + const numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId); + if (numFmt) { + model.numFmt = numFmt; + } + } + function addStyle(name, group, styleId) { + if (styleId || styleId === 0) { + const part = group[styleId]; + if (part) { + model[name] = part; + } + } + } + addStyle('font', this.model.fonts, style.fontId); + addStyle('border', this.model.borders, style.borderId); + addStyle('fill', this.model.fills, style.fillId); + + // ------------------------------------------------------- + // alignment + if (style.alignment) { + model.alignment = style.alignment; + } + + // ------------------------------------------------------- + // protection + if (style.protection) { + model.protection = style.protection; + } + return model; + } + addDxfStyle(style) { + if (style.numFmt) { + // register numFmtId to use it during dxf-xform rendering + style.numFmtId = this._addNumFmtStr(style.numFmt); + } + this.model.dxfs.push(style); + return this.model.dxfs.length - 1; + } + getDxfStyle(id) { + return this.model.dxfs[id]; + } + + // ========================================================================= + // Private Interface + _addStyle(style) { + const xml = this.map.style.toXml(style); + let index = this.index.style[xml]; + if (index === undefined) { + index = this.index.style[xml] = this.model.styles.length; + this.model.styles.push(xml); + } + return index; + } + + // ========================================================================= + // Number Formats + _addNumFmtStr(formatCode) { + // check if default format + let index = NumFmtXform.getDefaultFmtId(formatCode); + if (index !== undefined) return index; + + // check if already in + index = this.index.numFmt[formatCode]; + if (index !== undefined) return index; + index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length; + const xml = this.map.numFmt.toXml({ + id: index, + formatCode + }); + this.model.numFmts.push(xml); + return index; + } + + // ========================================================================= + // Fonts + _addFont(font) { + const xml = this.map.font.toXml(font); + let index = this.index.font[xml]; + if (index === undefined) { + index = this.index.font[xml] = this.model.fonts.length; + this.model.fonts.push(xml); + } + return index; + } + + // ========================================================================= + // Borders + _addBorder(border) { + const xml = this.map.border.toXml(border); + let index = this.index.border[xml]; + if (index === undefined) { + index = this.index.border[xml] = this.model.borders.length; + this.model.borders.push(xml); + } + return index; + } + + // ========================================================================= + // Fills + _addFill(fill) { + const xml = this.map.fill.toXml(fill); + let index = this.index.fill[xml]; + if (index === undefined) { + index = this.index.fill[xml] = this.model.fills.length; + this.model.fills.push(xml); + } + return index; + } + + // ========================================================================= +} + +StylesXform.STYLESHEET_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'x14ac x16r2', + 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac', + 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main' +}; +StylesXform.STATIC_XFORMS = { + cellStyles: new StaticXform({ + tag: 'cellStyles', + $: { + count: 1 + }, + c: [{ + tag: 'cellStyle', + $: { + name: 'Normal', + xfId: 0, + builtinId: 0 + } + }] + }), + dxfs: new StaticXform({ + tag: 'dxfs', + $: { + count: 0 + } + }), + tableStyles: new StaticXform({ + tag: 'tableStyles', + $: { + count: 0, + defaultTableStyle: 'TableStyleMedium2', + defaultPivotStyle: 'PivotStyleLight16' + } + }), + extLst: new StaticXform({ + tag: 'extLst', + c: [{ + tag: 'ext', + $: { + uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}', + 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main' + }, + c: [{ + tag: 'x14:slicerStyles', + $: { + defaultSlicerStyle: 'SlicerStyleLight1' + } + }] + }, { + tag: 'ext', + $: { + uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}', + 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main' + }, + c: [{ + tag: 'x15:timelineStyles', + $: { + defaultTimelineStyle: 'TimeSlicerStyleLight1' + } + }] + }] + }) +}; + +// the stylemanager mock acts like StyleManager except that it always returns 0 or {} +class StylesXformMock extends StylesXform { + constructor() { + super(); + this.model = { + styles: [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }], + numFmts: [], + fonts: [{ + size: 11, + color: { + theme: 1 + }, + name: 'Calibri', + family: 2, + scheme: 'minor' + }], + borders: [{}], + fills: [{ + type: 'pattern', + pattern: 'none' + }, { + type: 'pattern', + pattern: 'gray125' + }] + }; + } + + // ========================================================================= + // Style Manager Interface + + // override normal behaviour - consume and dispose + parseStream(stream) { + stream.autodrain(); + return Promise.resolve(); + } + + // add a cell's style model to the collection + // each style property is processed and cross-referenced, etc. + // the styleId is returned. Note: cellType is used when numFmt not defined + addStyleModel(model, cellType) { + switch (cellType) { + case Enums.ValueType.Date: + return this.dateStyleId; + default: + return 0; + } + } + get dateStyleId() { + if (!this._dateStyleId) { + const dateStyle = { + numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy') + }; + this._dateStyleId = this.model.styles.length; + this.model.styles.push(dateStyle); + } + return this._dateStyleId; + } + + // given a styleId (i.e. s="n"), get the cell's style model + // objects are shared where possible. + getStyleModel( /* id */ + ) { + return {}; + } +} +StylesXform.Mock = StylesXformMock; +module.exports = StylesXform; + +},{"../../../doc/enums":7,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./border-xform":127,"./dxf-xform":129,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./style-xform":134}],136:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class UnderlineXform extends BaseXform { + constructor(model) { + super(); + this.model = model; + } + get tag() { + return 'u'; + } + render(xmlStream, model) { + model = model || this.model; + if (model === true) { + xmlStream.leafNode('u'); + } else { + const attr = UnderlineXform.Attributes[model]; + if (attr) { + xmlStream.leafNode('u', attr); + } + } + } + parseOpen(node) { + if (node.name === 'u') { + this.model = node.attributes.val || true; + } + } + parseText() {} + parseClose() { + return false; + } +} +UnderlineXform.Attributes = { + single: {}, + double: { + val: 'double' + }, + singleAccounting: { + val: 'singleAccounting' + }, + doubleAccounting: { + val: 'doubleAccounting' + } +}; +module.exports = UnderlineXform; + +},{"../base-xform":32}],137:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const FilterColumnXform = require('./filter-column-xform'); +class AutoFilterXform extends BaseXform { + constructor() { + super(); + this.map = { + filterColumn: new FilterColumnXform() + }; + } + get tag() { + return 'autoFilter'; + } + prepare(model) { + model.columns.forEach((column, index) => { + this.map.filterColumn.prepare(column, { + index + }); + }); + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + ref: model.autoFilterRef + }); + model.columns.forEach(column => { + this.map.filterColumn.render(xmlStream, column); + }); + xmlStream.closeNode(); + return true; + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.model = { + autoFilterRef: node.attributes.ref, + columns: [] + }; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.columns.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +module.exports = AutoFilterXform; + +},{"../base-xform":32,"./filter-column-xform":139}],138:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class CustomFilterXform extends BaseXform { + get tag() { + return 'customFilter'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + val: model.val, + operator: model.operator + }); + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + val: node.attributes.val, + operator: node.attributes.operator + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = CustomFilterXform; + +},{"../base-xform":32}],139:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const ListXform = require('../list-xform'); +const CustomFilterXform = require('./custom-filter-xform'); +const FilterXform = require('./filter-xform'); +class FilterColumnXform extends BaseXform { + constructor() { + super(); + this.map = { + customFilters: new ListXform({ + tag: 'customFilters', + count: false, + empty: true, + childXform: new CustomFilterXform() + }), + filters: new ListXform({ + tag: 'filters', + count: false, + empty: true, + childXform: new FilterXform() + }) + }; + } + get tag() { + return 'filterColumn'; + } + prepare(model, options) { + model.colId = options.index.toString(); + } + render(xmlStream, model) { + if (model.customFilters) { + xmlStream.openNode(this.tag, { + colId: model.colId, + hiddenButton: model.filterButton ? '0' : '1' + }); + this.map.customFilters.render(xmlStream, model.customFilters); + xmlStream.closeNode(); + return true; + } + xmlStream.leafNode(this.tag, { + colId: model.colId, + hiddenButton: model.filterButton ? '0' : '1' + }); + return true; + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + const { + attributes + } = node; + switch (node.name) { + case this.tag: + this.model = { + filterButton: attributes.hiddenButton === '0' + }; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.customFilters = this.map.customFilters.model; + return false; + default: + // could be some unrecognised tags + return true; + } + } +} +module.exports = FilterColumnXform; + +},{"../base-xform":32,"../list-xform":71,"./custom-filter-xform":138,"./filter-xform":140}],140:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class FilterXform extends BaseXform { + get tag() { + return 'filter'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + val: model.val + }); + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + val: node.attributes.val + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = FilterXform; + +},{"../base-xform":32}],141:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class TableColumnXform extends BaseXform { + get tag() { + return 'tableColumn'; + } + prepare(model, options) { + model.id = options.index + 1; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + id: model.id.toString(), + name: model.name, + totalsRowLabel: model.totalsRowLabel, + totalsRowFunction: model.totalsRowFunction, + dxfId: model.dxfId + }); + return true; + } + parseOpen(node) { + if (node.name === this.tag) { + const { + attributes + } = node; + this.model = { + name: attributes.name, + totalsRowLabel: attributes.totalsRowLabel, + totalsRowFunction: attributes.totalsRowFunction, + dxfId: attributes.dxfId + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = TableColumnXform; + +},{"../base-xform":32}],142:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class TableStyleInfoXform extends BaseXform { + get tag() { + return 'tableStyleInfo'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + name: model.theme ? model.theme : undefined, + showFirstColumn: model.showFirstColumn ? '1' : '0', + showLastColumn: model.showLastColumn ? '1' : '0', + showRowStripes: model.showRowStripes ? '1' : '0', + showColumnStripes: model.showColumnStripes ? '1' : '0' + }); + return true; + } + parseOpen(node) { + if (node.name === this.tag) { + const { + attributes + } = node; + this.model = { + theme: attributes.name ? attributes.name : null, + showFirstColumn: attributes.showFirstColumn === '1', + showLastColumn: attributes.showLastColumn === '1', + showRowStripes: attributes.showRowStripes === '1', + showColumnStripes: attributes.showColumnStripes === '1' + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = TableStyleInfoXform; + +},{"../base-xform":32}],143:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const ListXform = require('../list-xform'); +const AutoFilterXform = require('./auto-filter-xform'); +const TableColumnXform = require('./table-column-xform'); +const TableStyleInfoXform = require('./table-style-info-xform'); +class TableXform extends BaseXform { + constructor() { + super(); + this.map = { + autoFilter: new AutoFilterXform(), + tableColumns: new ListXform({ + tag: 'tableColumns', + count: true, + empty: true, + childXform: new TableColumnXform() + }), + tableStyleInfo: new TableStyleInfoXform() + }; + } + prepare(model, options) { + this.map.autoFilter.prepare(model); + this.map.tableColumns.prepare(model.columns, options); + } + get tag() { + return 'table'; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode(this.tag, { + ...TableXform.TABLE_ATTRIBUTES, + id: model.id, + name: model.name, + displayName: model.displayName || model.name, + ref: model.tableRef, + totalsRowCount: model.totalsRow ? '1' : undefined, + totalsRowShown: model.totalsRow ? undefined : '1', + headerRowCount: model.headerRow ? '1' : '0' + }); + this.map.autoFilter.render(xmlStream, model); + this.map.tableColumns.render(xmlStream, model.columns); + this.map.tableStyleInfo.render(xmlStream, model.style); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + const { + name, + attributes + } = node; + switch (name) { + case this.tag: + this.reset(); + this.model = { + name: attributes.name, + displayName: attributes.displayName || attributes.name, + tableRef: attributes.ref, + totalsRow: attributes.totalsRowCount === '1', + headerRow: attributes.headerRowCount === '1' + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.columns = this.map.tableColumns.model; + if (this.map.autoFilter.model) { + this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef; + this.map.autoFilter.model.columns.forEach((column, index) => { + this.model.columns[index].filterButton = column.filterButton; + }); + } + this.model.style = this.map.tableStyleInfo.model; + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + // fetch the dfxs from styles + model.columns.forEach(column => { + if (column.dxfId !== undefined) { + column.style = options.styles.getDxfStyle(column.dxfId); + } + }); + } +} +TableXform.TABLE_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'xr xr3', + 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision', + 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3' + // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}', +}; + +module.exports = TableXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":137,"./table-column-xform":141,"./table-style-info-xform":142}],144:[function(require,module,exports){ +(function (process,Buffer){(function (){ +"use strict"; + +const fs = require('fs'); +const JSZip = require('jszip'); +const { + PassThrough +} = require('readable-stream'); +const ZipStream = require('../utils/zip-stream'); +const StreamBuf = require('../utils/stream-buf'); +const utils = require('../utils/utils'); +const XmlStream = require('../utils/xml-stream'); +const { + bufferToString +} = require('../utils/browser-buffer-decode'); +const StylesXform = require('./xform/style/styles-xform'); +const CoreXform = require('./xform/core/core-xform'); +const SharedStringsXform = require('./xform/strings/shared-strings-xform'); +const RelationshipsXform = require('./xform/core/relationships-xform'); +const ContentTypesXform = require('./xform/core/content-types-xform'); +const AppXform = require('./xform/core/app-xform'); +const WorkbookXform = require('./xform/book/workbook-xform'); +const WorksheetXform = require('./xform/sheet/worksheet-xform'); +const DrawingXform = require('./xform/drawing/drawing-xform'); +const TableXform = require('./xform/table/table-xform'); +const CommentsXform = require('./xform/comment/comments-xform'); +const VmlNotesXform = require('./xform/comment/vml-notes-xform'); +const theme1Xml = require('./xml/theme1'); +function fsReadFileAsync(filename, options) { + return new Promise((resolve, reject) => { + fs.readFile(filename, options, (error, data) => { + if (error) { + reject(error); + } else { + resolve(data); + } + }); + }); +} +class XLSX { + constructor(workbook) { + this.workbook = workbook; + } + + // =============================================================================== + // Workbook + // ========================================================================= + // Read + + async readFile(filename, options) { + if (!(await utils.fs.exists(filename))) { + throw new Error(`File not found: ${filename}`); + } + const stream = fs.createReadStream(filename); + try { + const workbook = await this.read(stream, options); + stream.close(); + return workbook; + } catch (error) { + stream.close(); + throw error; + } + } + parseRels(stream) { + const xform = new RelationshipsXform(); + return xform.parseStream(stream); + } + parseWorkbook(stream) { + const xform = new WorkbookXform(); + return xform.parseStream(stream); + } + parseSharedStrings(stream) { + const xform = new SharedStringsXform(); + return xform.parseStream(stream); + } + reconcile(model, options) { + const workbookXform = new WorkbookXform(); + const worksheetXform = new WorksheetXform(options); + const drawingXform = new DrawingXform(); + const tableXform = new TableXform(); + workbookXform.reconcile(model); + + // reconcile drawings with their rels + const drawingOptions = { + media: model.media, + mediaIndex: model.mediaIndex + }; + Object.keys(model.drawings).forEach(name => { + const drawing = model.drawings[name]; + const drawingRel = model.drawingRels[name]; + if (drawingRel) { + drawingOptions.rels = drawingRel.reduce((o, rel) => { + o[rel.Id] = rel; + return o; + }, {}); + (drawing.anchors || []).forEach(anchor => { + const hyperlinks = anchor.picture && anchor.picture.hyperlinks; + if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) { + hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target; + delete hyperlinks.rId; + } + }); + drawingXform.reconcile(drawing, drawingOptions); + } + }); + + // reconcile tables with the default styles + const tableOptions = { + styles: model.styles + }; + Object.values(model.tables).forEach(table => { + tableXform.reconcile(table, tableOptions); + }); + const sheetOptions = { + styles: model.styles, + sharedStrings: model.sharedStrings, + media: model.media, + mediaIndex: model.mediaIndex, + date1904: model.properties && model.properties.date1904, + drawings: model.drawings, + comments: model.comments, + tables: model.tables, + vmlDrawings: model.vmlDrawings + }; + model.worksheets.forEach(worksheet => { + worksheet.relationships = model.worksheetRels[worksheet.sheetNo]; + worksheetXform.reconcile(worksheet, sheetOptions); + }); + + // delete unnecessary parts + delete model.worksheetHash; + delete model.worksheetRels; + delete model.globalRels; + delete model.sharedStrings; + delete model.workbookRels; + delete model.sheetDefs; + delete model.styles; + delete model.mediaIndex; + delete model.drawings; + delete model.drawingRels; + delete model.vmlDrawings; + } + async _processWorksheetEntry(stream, model, sheetNo, options, path) { + const xform = new WorksheetXform(options); + const worksheet = await xform.parseStream(stream); + worksheet.sheetNo = sheetNo; + model.worksheetHash[path] = worksheet; + model.worksheets.push(worksheet); + } + async _processCommentEntry(stream, model, name) { + const xform = new CommentsXform(); + const comments = await xform.parseStream(stream); + model.comments[`../${name}.xml`] = comments; + } + async _processTableEntry(stream, model, name) { + const xform = new TableXform(); + const table = await xform.parseStream(stream); + model.tables[`../tables/${name}.xml`] = table; + } + async _processWorksheetRelsEntry(stream, model, sheetNo) { + const xform = new RelationshipsXform(); + const relationships = await xform.parseStream(stream); + model.worksheetRels[sheetNo] = relationships; + } + async _processMediaEntry(entry, model, filename) { + const lastDot = filename.lastIndexOf('.'); + // if we can't determine extension, ignore it + if (lastDot >= 1) { + const extension = filename.substr(lastDot + 1); + const name = filename.substr(0, lastDot); + await new Promise((resolve, reject) => { + const streamBuf = new StreamBuf(); + streamBuf.on('finish', () => { + model.mediaIndex[filename] = model.media.length; + model.mediaIndex[name] = model.media.length; + const medium = { + type: 'image', + name, + extension, + buffer: streamBuf.toBuffer() + }; + model.media.push(medium); + resolve(); + }); + entry.on('error', error => { + reject(error); + }); + entry.pipe(streamBuf); + }); + } + } + async _processDrawingEntry(entry, model, name) { + const xform = new DrawingXform(); + const drawing = await xform.parseStream(entry); + model.drawings[name] = drawing; + } + async _processDrawingRelsEntry(entry, model, name) { + const xform = new RelationshipsXform(); + const relationships = await xform.parseStream(entry); + model.drawingRels[name] = relationships; + } + async _processVmlDrawingEntry(entry, model, name) { + const xform = new VmlNotesXform(); + const vmlDrawing = await xform.parseStream(entry); + model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing; + } + async _processThemeEntry(entry, model, name) { + await new Promise((resolve, reject) => { + // TODO: stream entry into buffer and store the xml in the model.themes[] + const stream = new StreamBuf(); + entry.on('error', reject); + stream.on('error', reject); + stream.on('finish', () => { + model.themes[name] = stream.read().toString(); + resolve(); + }); + entry.pipe(stream); + }); + } + + /** + * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md + */ + createInputStream() { + throw new Error('`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'); + } + async read(stream, options) { + // TODO: Remove once node v8 is deprecated + // Detect and upgrade old streams + if (!stream[Symbol.asyncIterator] && stream.pipe) { + stream = stream.pipe(new PassThrough()); + } + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + return this.load(Buffer.concat(chunks), options); + } + async load(data, options) { + let buffer; + if (options && options.base64) { + buffer = Buffer.from(data.toString(), 'base64'); + } else { + buffer = data; + } + const model = { + worksheets: [], + worksheetHash: {}, + worksheetRels: [], + themes: {}, + media: [], + mediaIndex: {}, + drawings: {}, + drawingRels: {}, + comments: {}, + tables: {}, + vmlDrawings: {} + }; + const zip = await JSZip.loadAsync(buffer); + for (const entry of Object.values(zip.files)) { + /* eslint-disable no-await-in-loop */ + if (!entry.dir) { + let entryName = entry.name; + if (entryName[0] === '/') { + entryName = entryName.substr(1); + } + let stream; + if (entryName.match(/xl\/media\//) || + // themes are not parsed as stream + entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/)) { + stream = new PassThrough(); + stream.write(await entry.async('nodebuffer')); + } else { + // use object mode to avoid buffer-string convention + stream = new PassThrough({ + writableObjectMode: true, + readableObjectMode: true + }); + let content; + // https://www.npmjs.com/package/process + if (process.browser) { + // running in browser, use TextDecoder if possible + content = bufferToString(await entry.async('nodebuffer')); + } else { + // running in node.js + content = await entry.async('string'); + } + const chunkSize = 16 * 1024; + for (let i = 0; i < content.length; i += chunkSize) { + stream.write(content.substring(i, i + chunkSize)); + } + } + stream.end(); + switch (entryName) { + case '_rels/.rels': + model.globalRels = await this.parseRels(stream); + break; + case 'xl/workbook.xml': + { + const workbook = await this.parseWorkbook(stream); + model.sheets = workbook.sheets; + model.definedNames = workbook.definedNames; + model.views = workbook.views; + model.properties = workbook.properties; + model.calcProperties = workbook.calcProperties; + break; + } + case 'xl/_rels/workbook.xml.rels': + model.workbookRels = await this.parseRels(stream); + break; + case 'xl/sharedStrings.xml': + model.sharedStrings = new SharedStringsXform(); + await model.sharedStrings.parseStream(stream); + break; + case 'xl/styles.xml': + model.styles = new StylesXform(); + await model.styles.parseStream(stream); + break; + case 'docProps/app.xml': + { + const appXform = new AppXform(); + const appProperties = await appXform.parseStream(stream); + model.company = appProperties.company; + model.manager = appProperties.manager; + break; + } + case 'docProps/core.xml': + { + const coreXform = new CoreXform(); + const coreProperties = await coreXform.parseStream(stream); + Object.assign(model, coreProperties); + break; + } + default: + { + let match = entryName.match(/xl\/worksheets\/sheet(\d+)[.]xml/); + if (match) { + await this._processWorksheetEntry(stream, model, match[1], options, entryName); + break; + } + match = entryName.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/); + if (match) { + await this._processWorksheetRelsEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/); + if (match) { + await this._processThemeEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/media\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/); + if (match) { + await this._processMediaEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/drawings\/([a-zA-Z0-9]+)[.]xml/); + if (match) { + await this._processDrawingEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/(comments\d+)[.]xml/); + if (match) { + await this._processCommentEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/tables\/(table\d+)[.]xml/); + if (match) { + await this._processTableEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/drawings\/_rels\/([a-zA-Z0-9]+)[.]xml[.]rels/); + if (match) { + await this._processDrawingRelsEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/drawings\/(vmlDrawing\d+)[.]vml/); + if (match) { + await this._processVmlDrawingEntry(stream, model, match[1]); + break; + } + } + } + } + } + this.reconcile(model, options); + + // apply model + this.workbook.model = model; + return this.workbook; + } + + // ========================================================================= + // Write + + async addMedia(zip, model) { + await Promise.all(model.media.map(async medium => { + if (medium.type === 'image') { + const filename = `xl/media/${medium.name}.${medium.extension}`; + if (medium.filename) { + const data = await fsReadFileAsync(medium.filename); + return zip.append(data, { + name: filename + }); + } + if (medium.buffer) { + return zip.append(medium.buffer, { + name: filename + }); + } + if (medium.base64) { + const dataimg64 = medium.base64; + const content = dataimg64.substring(dataimg64.indexOf(',') + 1); + return zip.append(content, { + name: filename, + base64: true + }); + } + } + throw new Error('Unsupported media'); + })); + } + addDrawings(zip, model) { + const drawingXform = new DrawingXform(); + const relsXform = new RelationshipsXform(); + model.worksheets.forEach(worksheet => { + const { + drawing + } = worksheet; + if (drawing) { + drawingXform.prepare(drawing, {}); + let xml = drawingXform.toXml(drawing); + zip.append(xml, { + name: `xl/drawings/${drawing.name}.xml` + }); + xml = relsXform.toXml(drawing.rels); + zip.append(xml, { + name: `xl/drawings/_rels/${drawing.name}.xml.rels` + }); + } + }); + } + addTables(zip, model) { + const tableXform = new TableXform(); + model.worksheets.forEach(worksheet => { + const { + tables + } = worksheet; + tables.forEach(table => { + tableXform.prepare(table, {}); + const tableXml = tableXform.toXml(table); + zip.append(tableXml, { + name: `xl/tables/${table.target}` + }); + }); + }); + } + async addContentTypes(zip, model) { + const xform = new ContentTypesXform(); + const xml = xform.toXml(model); + zip.append(xml, { + name: '[Content_Types].xml' + }); + } + async addApp(zip, model) { + const xform = new AppXform(); + const xml = xform.toXml(model); + zip.append(xml, { + name: 'docProps/app.xml' + }); + } + async addCore(zip, model) { + const coreXform = new CoreXform(); + zip.append(coreXform.toXml(model), { + name: 'docProps/core.xml' + }); + } + async addThemes(zip, model) { + const themes = model.themes || { + theme1: theme1Xml + }; + Object.keys(themes).forEach(name => { + const xml = themes[name]; + const path = `xl/theme/${name}.xml`; + zip.append(xml, { + name: path + }); + }); + } + async addOfficeRels(zip) { + const xform = new RelationshipsXform(); + const xml = xform.toXml([{ + Id: 'rId1', + Type: XLSX.RelType.OfficeDocument, + Target: 'xl/workbook.xml' + }, { + Id: 'rId2', + Type: XLSX.RelType.CoreProperties, + Target: 'docProps/core.xml' + }, { + Id: 'rId3', + Type: XLSX.RelType.ExtenderProperties, + Target: 'docProps/app.xml' + }]); + zip.append(xml, { + name: '_rels/.rels' + }); + } + async addWorkbookRels(zip, model) { + let count = 1; + const relationships = [{ + Id: `rId${count++}`, + Type: XLSX.RelType.Styles, + Target: 'styles.xml' + }, { + Id: `rId${count++}`, + Type: XLSX.RelType.Theme, + Target: 'theme/theme1.xml' + }]; + if (model.sharedStrings.count) { + relationships.push({ + Id: `rId${count++}`, + Type: XLSX.RelType.SharedStrings, + Target: 'sharedStrings.xml' + }); + } + model.worksheets.forEach(worksheet => { + worksheet.rId = `rId${count++}`; + relationships.push({ + Id: worksheet.rId, + Type: XLSX.RelType.Worksheet, + Target: `worksheets/sheet${worksheet.id}.xml` + }); + }); + const xform = new RelationshipsXform(); + const xml = xform.toXml(relationships); + zip.append(xml, { + name: 'xl/_rels/workbook.xml.rels' + }); + } + async addSharedStrings(zip, model) { + if (model.sharedStrings && model.sharedStrings.count) { + zip.append(model.sharedStrings.xml, { + name: 'xl/sharedStrings.xml' + }); + } + } + async addStyles(zip, model) { + const { + xml + } = model.styles; + if (xml) { + zip.append(xml, { + name: 'xl/styles.xml' + }); + } + } + async addWorkbook(zip, model) { + const xform = new WorkbookXform(); + zip.append(xform.toXml(model), { + name: 'xl/workbook.xml' + }); + } + async addWorksheets(zip, model) { + // preparation phase + const worksheetXform = new WorksheetXform(); + const relationshipsXform = new RelationshipsXform(); + const commentsXform = new CommentsXform(); + const vmlNotesXform = new VmlNotesXform(); + + // write sheets + model.worksheets.forEach(worksheet => { + let xmlStream = new XmlStream(); + worksheetXform.render(xmlStream, worksheet); + zip.append(xmlStream.xml, { + name: `xl/worksheets/sheet${worksheet.id}.xml` + }); + if (worksheet.rels && worksheet.rels.length) { + xmlStream = new XmlStream(); + relationshipsXform.render(xmlStream, worksheet.rels); + zip.append(xmlStream.xml, { + name: `xl/worksheets/_rels/sheet${worksheet.id}.xml.rels` + }); + } + if (worksheet.comments.length > 0) { + xmlStream = new XmlStream(); + commentsXform.render(xmlStream, worksheet); + zip.append(xmlStream.xml, { + name: `xl/comments${worksheet.id}.xml` + }); + xmlStream = new XmlStream(); + vmlNotesXform.render(xmlStream, worksheet); + zip.append(xmlStream.xml, { + name: `xl/drawings/vmlDrawing${worksheet.id}.vml` + }); + } + }); + } + _finalize(zip) { + return new Promise((resolve, reject) => { + zip.on('finish', () => { + resolve(this); + }); + zip.on('error', reject); + zip.finalize(); + }); + } + prepareModel(model, options) { + // ensure following properties have sane values + model.creator = model.creator || 'ExcelJS'; + model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS'; + model.created = model.created || new Date(); + model.modified = model.modified || new Date(); + model.useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : true; + model.useStyles = options.useStyles !== undefined ? options.useStyles : true; + + // Manage the shared strings + model.sharedStrings = new SharedStringsXform(); + + // add a style manager to handle cell formats, fonts, etc. + model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock(); + + // prepare all of the things before the render + const workbookXform = new WorkbookXform(); + const worksheetXform = new WorksheetXform(); + workbookXform.prepare(model); + const worksheetOptions = { + sharedStrings: model.sharedStrings, + styles: model.styles, + date1904: model.properties.date1904, + drawingsCount: 0, + media: model.media + }; + worksheetOptions.drawings = model.drawings = []; + worksheetOptions.commentRefs = model.commentRefs = []; + let tableCount = 0; + model.tables = []; + model.worksheets.forEach(worksheet => { + // assign unique filenames to tables + worksheet.tables.forEach(table => { + tableCount++; + table.target = `table${tableCount}.xml`; + table.id = tableCount; + model.tables.push(table); + }); + worksheetXform.prepare(worksheet, worksheetOptions); + }); + + // TODO: workbook drawing list + } + + async write(stream, options) { + options = options || {}; + const { + model + } = this.workbook; + const zip = new ZipStream.ZipWriter(options.zip); + zip.pipe(stream); + this.prepareModel(model, options); + + // render + await this.addContentTypes(zip, model); + await this.addOfficeRels(zip, model); + await this.addWorkbookRels(zip, model); + await this.addWorksheets(zip, model); + await this.addSharedStrings(zip, model); // always after worksheets + await this.addDrawings(zip, model); + await this.addTables(zip, model); + await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]); + await this.addMedia(zip, model); + await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]); + await this.addWorkbook(zip, model); + return this._finalize(zip); + } + writeFile(filename, options) { + const stream = fs.createWriteStream(filename); + return new Promise((resolve, reject) => { + stream.on('finish', () => { + resolve(); + }); + stream.on('error', error => { + reject(error); + }); + this.write(stream, options).then(() => { + stream.end(); + }).catch(err => { + reject(err); + }); + }); + } + async writeBuffer(options) { + const stream = new StreamBuf(); + await this.write(stream, options); + return stream.read(); + } +} +XLSX.RelType = require('./rel-type'); +module.exports = XLSX; + +}).call(this)}).call(this,require('_process'),require("buffer").Buffer) + +},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":24,"../utils/utils":27,"../utils/xml-stream":28,"../utils/zip-stream":29,"./rel-type":31,"./xform/book/workbook-xform":38,"./xform/comment/comments-xform":40,"./xform/comment/vml-notes-xform":45,"./xform/core/app-xform":51,"./xform/core/content-types-xform":52,"./xform/core/core-xform":53,"./xform/core/relationships-xform":55,"./xform/drawing/drawing-xform":62,"./xform/sheet/worksheet-xform":115,"./xform/strings/shared-strings-xform":124,"./xform/style/styles-xform":135,"./xform/table/table-xform":143,"./xml/theme1":145,"_process":306,"buffer":220,"fs":216,"jszip":280,"readable-stream":330}],145:[function(require,module,exports){ +"use strict"; + +/* eslint-disable */ +module.exports = '\n '; + +},{}],146:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CsvFormatterStream = void 0; +const stream_1 = require("stream"); +const formatter_1 = require("./formatter"); +class CsvFormatterStream extends stream_1.Transform { + constructor(formatterOptions) { + super({ + writableObjectMode: formatterOptions.objectMode + }); + this.hasWrittenBOM = false; + this.formatterOptions = formatterOptions; + this.rowFormatter = new formatter_1.RowFormatter(formatterOptions); + // if writeBOM is false then set to true + // if writeBOM is true then set to false by default so it is written out + this.hasWrittenBOM = !formatterOptions.writeBOM; + } + transform(transformFunction) { + this.rowFormatter.rowTransform = transformFunction; + return this; + } + _transform(row, encoding, cb) { + let cbCalled = false; + try { + if (!this.hasWrittenBOM) { + this.push(this.formatterOptions.BOM); + this.hasWrittenBOM = true; + } + this.rowFormatter.format(row, (err, rows) => { + if (err) { + cbCalled = true; + return cb(err); + } + if (rows) { + rows.forEach(r => { + this.push(Buffer.from(r, 'utf8')); + }); + } + cbCalled = true; + return cb(); + }); + } catch (e) { + if (cbCalled) { + throw e; + } + cb(e); + } + } + _flush(cb) { + this.rowFormatter.finish((err, rows) => { + if (err) { + return cb(err); + } + if (rows) { + rows.forEach(r => { + this.push(Buffer.from(r, 'utf8')); + }); + } + return cb(); + }); + } +} +exports.CsvFormatterStream = CsvFormatterStream; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"./formatter":150,"buffer":220,"stream":343}],147:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FormatterOptions = void 0; +class FormatterOptions { + constructor() { + let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var _a; + this.objectMode = true; + this.delimiter = ','; + this.rowDelimiter = '\n'; + this.quote = '"'; + this.escape = this.quote; + this.quoteColumns = false; + this.quoteHeaders = this.quoteColumns; + this.headers = null; + this.includeEndRowDelimiter = false; + this.writeBOM = false; + this.BOM = '\ufeff'; + this.alwaysWriteHeaders = false; + Object.assign(this, opts || {}); + if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') { + this.quoteHeaders = this.quoteColumns; + } + if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) { + this.quote = '"'; + } else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) { + this.quote = ''; + } + if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') { + this.escape = this.quote; + } + this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true); + this.headers = Array.isArray(this.headers) ? this.headers : null; + this.escapedQuote = `${this.escape}${this.quote}`; + } +} +exports.FormatterOptions = FormatterOptions; + +},{}],148:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FieldFormatter = void 0; +const lodash_isboolean_1 = __importDefault(require("lodash.isboolean")); +const lodash_isnil_1 = __importDefault(require("lodash.isnil")); +const lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp")); +class FieldFormatter { + constructor(formatterOptions) { + this._headers = null; + this.formatterOptions = formatterOptions; + if (formatterOptions.headers !== null) { + this.headers = formatterOptions.headers; + } + this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g'); + const escapePattern = `[${formatterOptions.delimiter}${lodash_escaperegexp_1.default(formatterOptions.rowDelimiter)}|\r|\n]`; + this.ESCAPE_REGEXP = new RegExp(escapePattern); + } + set headers(headers) { + this._headers = headers; + } + shouldQuote(fieldIndex, isHeader) { + const quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns; + if (lodash_isboolean_1.default(quoteConfig)) { + return quoteConfig; + } + if (Array.isArray(quoteConfig)) { + return quoteConfig[fieldIndex]; + } + if (this._headers !== null) { + return quoteConfig[this._headers[fieldIndex]]; + } + return false; + } + format(field, fieldIndex, isHeader) { + const preparedField = `${lodash_isnil_1.default(field) ? '' : field}`.replace(/\0/g, ''); + const { + formatterOptions + } = this; + if (formatterOptions.quote !== '') { + const shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1; + if (shouldEscape) { + return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote)); + } + } + const hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1; + if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) { + return this.quoteField(preparedField); + } + return preparedField; + } + quoteField(field) { + const { + quote + } = this.formatterOptions; + return `${quote}${field}${quote}`; + } +} +exports.FieldFormatter = FieldFormatter; + +},{"lodash.escaperegexp":281,"lodash.isboolean":283,"lodash.isnil":286}],149:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.RowFormatter = void 0; +const lodash_isfunction_1 = __importDefault(require("lodash.isfunction")); +const lodash_isequal_1 = __importDefault(require("lodash.isequal")); +const FieldFormatter_1 = require("./FieldFormatter"); +const types_1 = require("../types"); +class RowFormatter { + constructor(formatterOptions) { + this.rowCount = 0; + this.formatterOptions = formatterOptions; + this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions); + this.headers = formatterOptions.headers; + this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders; + this.hasWrittenHeaders = false; + if (this.headers !== null) { + this.fieldFormatter.headers = this.headers; + } + if (formatterOptions.transform) { + this.rowTransform = formatterOptions.transform; + } + } + static isRowHashArray(row) { + if (Array.isArray(row)) { + return Array.isArray(row[0]) && row[0].length === 2; + } + return false; + } + static isRowArray(row) { + return Array.isArray(row) && !this.isRowHashArray(row); + } + // get headers from a row item + static gatherHeaders(row) { + if (RowFormatter.isRowHashArray(row)) { + // lets assume a multi-dimesional array with item 0 being the header + return row.map(it => it[0]); + } + if (Array.isArray(row)) { + return row; + } + return Object.keys(row); + } + // eslint-disable-next-line @typescript-eslint/no-shadow + static createTransform(transformFunction) { + if (types_1.isSyncTransform(transformFunction)) { + return (row, cb) => { + let transformedRow = null; + try { + transformedRow = transformFunction(row); + } catch (e) { + return cb(e); + } + return cb(null, transformedRow); + }; + } + return (row, cb) => { + transformFunction(row, cb); + }; + } + set rowTransform(transformFunction) { + if (!lodash_isfunction_1.default(transformFunction)) { + throw new TypeError('The transform should be a function'); + } + this._rowTransform = RowFormatter.createTransform(transformFunction); + } + format(row, cb) { + this.callTransformer(row, (err, transformedRow) => { + if (err) { + return cb(err); + } + if (!row) { + return cb(null); + } + const rows = []; + if (transformedRow) { + const { + shouldFormatColumns, + headers + } = this.checkHeaders(transformedRow); + if (this.shouldWriteHeaders && headers && !this.hasWrittenHeaders) { + rows.push(this.formatColumns(headers, true)); + this.hasWrittenHeaders = true; + } + if (shouldFormatColumns) { + const columns = this.gatherColumns(transformedRow); + rows.push(this.formatColumns(columns, false)); + } + } + return cb(null, rows); + }); + } + finish(cb) { + const rows = []; + // check if we should write headers and we didnt get any rows + if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) { + if (!this.headers) { + return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.')); + } + rows.push(this.formatColumns(this.headers, true)); + } + if (this.formatterOptions.includeEndRowDelimiter) { + rows.push(this.formatterOptions.rowDelimiter); + } + return cb(null, rows); + } + // check if we need to write header return true if we should also write a row + // could be false if headers is true and the header row(first item) is passed in + checkHeaders(row) { + if (this.headers) { + // either the headers were provided by the user or we have already gathered them. + return { + shouldFormatColumns: true, + headers: this.headers + }; + } + const headers = RowFormatter.gatherHeaders(row); + this.headers = headers; + this.fieldFormatter.headers = headers; + if (!this.shouldWriteHeaders) { + // if we are not supposed to write the headers then + // always format the columns + return { + shouldFormatColumns: true, + headers: null + }; + } + // if the row is equal to headers dont format + return { + shouldFormatColumns: !lodash_isequal_1.default(headers, row), + headers + }; + } + // todo change this method to unknown[] + gatherColumns(row) { + if (this.headers === null) { + throw new Error('Headers is currently null'); + } + if (!Array.isArray(row)) { + return this.headers.map(header => row[header]); + } + if (RowFormatter.isRowHashArray(row)) { + return this.headers.map((header, i) => { + const col = row[i]; + if (col) { + return col[1]; + } + return ''; + }); + } + // if its a one dimensional array and headers were not provided + // then just return the row + if (RowFormatter.isRowArray(row) && !this.shouldWriteHeaders) { + return row; + } + return this.headers.map((header, i) => row[i]); + } + callTransformer(row, cb) { + if (!this._rowTransform) { + return cb(null, row); + } + return this._rowTransform(row, cb); + } + formatColumns(columns, isHeadersRow) { + const formattedCols = columns.map((field, i) => this.fieldFormatter.format(field, i, isHeadersRow)).join(this.formatterOptions.delimiter); + const { + rowCount + } = this; + this.rowCount += 1; + if (rowCount) { + return [this.formatterOptions.rowDelimiter, formattedCols].join(''); + } + return formattedCols; + } +} +exports.RowFormatter = RowFormatter; + +},{"../types":152,"./FieldFormatter":148,"lodash.isequal":284,"lodash.isfunction":285}],150:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FieldFormatter = exports.RowFormatter = void 0; +var RowFormatter_1 = require("./RowFormatter"); +Object.defineProperty(exports, "RowFormatter", { + enumerable: true, + get: function () { + return RowFormatter_1.RowFormatter; + } +}); +var FieldFormatter_1 = require("./FieldFormatter"); +Object.defineProperty(exports, "FieldFormatter", { + enumerable: true, + get: function () { + return FieldFormatter_1.FieldFormatter; + } +}); + +},{"./FieldFormatter":148,"./RowFormatter":149}],151:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + } + }); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = void 0 && (void 0).__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = exports.FormatterOptions = exports.CsvFormatterStream = void 0; +const util_1 = require("util"); +const stream_1 = require("stream"); +const fs = __importStar(require("fs")); +const FormatterOptions_1 = require("./FormatterOptions"); +const CsvFormatterStream_1 = require("./CsvFormatterStream"); +__exportStar(require("./types"), exports); +var CsvFormatterStream_2 = require("./CsvFormatterStream"); +Object.defineProperty(exports, "CsvFormatterStream", { + enumerable: true, + get: function () { + return CsvFormatterStream_2.CsvFormatterStream; + } +}); +var FormatterOptions_2 = require("./FormatterOptions"); +Object.defineProperty(exports, "FormatterOptions", { + enumerable: true, + get: function () { + return FormatterOptions_2.FormatterOptions; + } +}); +exports.format = options => new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options)); +exports.write = (rows, options) => { + const csvStream = exports.format(options); + const promiseWrite = util_1.promisify((row, cb) => { + csvStream.write(row, undefined, cb); + }); + rows.reduce((prev, row) => prev.then(() => promiseWrite(row)), Promise.resolve()).then(() => csvStream.end()).catch(err => { + csvStream.emit('error', err); + }); + return csvStream; +}; +exports.writeToStream = (ws, rows, options) => exports.write(rows, options).pipe(ws); +exports.writeToBuffer = function (rows) { + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + const buffers = []; + const ws = new stream_1.Writable({ + write(data, enc, writeCb) { + buffers.push(data); + writeCb(); + } + }); + return new Promise((res, rej) => { + ws.on('error', rej).on('finish', () => res(Buffer.concat(buffers))); + exports.write(rows, opts).pipe(ws); + }); +}; +exports.writeToString = (rows, options) => exports.writeToBuffer(rows, options).then(buffer => buffer.toString()); +exports.writeToPath = (path, rows, options) => { + const stream = fs.createWriteStream(path, { + encoding: 'utf8' + }); + return exports.write(rows, options).pipe(stream); +}; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"./CsvFormatterStream":146,"./FormatterOptions":147,"./types":152,"buffer":220,"fs":216,"stream":343,"util":365}],152:[function(require,module,exports){ +"use strict"; + +/* eslint-disable @typescript-eslint/no-explicit-any */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isSyncTransform = void 0; +exports.isSyncTransform = transform => transform.length === 1; + +},{}],153:[function(require,module,exports){ +(function (setImmediate){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CsvParserStream = void 0; +const string_decoder_1 = require("string_decoder"); +const stream_1 = require("stream"); +const transforms_1 = require("./transforms"); +const parser_1 = require("./parser"); +class CsvParserStream extends stream_1.Transform { + constructor(parserOptions) { + super({ + objectMode: parserOptions.objectMode + }); + this.lines = ''; + this.rowCount = 0; + this.parsedRowCount = 0; + this.parsedLineCount = 0; + this.endEmitted = false; + this.headersEmitted = false; + this.parserOptions = parserOptions; + this.parser = new parser_1.Parser(parserOptions); + this.headerTransformer = new transforms_1.HeaderTransformer(parserOptions); + this.decoder = new string_decoder_1.StringDecoder(parserOptions.encoding); + this.rowTransformerValidator = new transforms_1.RowTransformerValidator(); + } + get hasHitRowLimit() { + return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows; + } + get shouldEmitRows() { + return this.parsedRowCount > this.parserOptions.skipRows; + } + get shouldSkipLine() { + return this.parsedLineCount <= this.parserOptions.skipLines; + } + transform(transformFunction) { + this.rowTransformerValidator.rowTransform = transformFunction; + return this; + } + validate(validateFunction) { + this.rowTransformerValidator.rowValidator = validateFunction; + return this; + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + emit(event) { + if (event === 'end') { + if (!this.endEmitted) { + this.endEmitted = true; + super.emit('end', this.rowCount); + } + return false; + } + for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + rest[_key - 1] = arguments[_key]; + } + return super.emit(event, ...rest); + } + _transform(data, encoding, done) { + // if we have hit our maxRows parsing limit then skip parsing + if (this.hasHitRowLimit) { + return done(); + } + const wrappedCallback = CsvParserStream.wrapDoneCallback(done); + try { + const { + lines + } = this; + const newLine = lines + this.decoder.write(data); + const rows = this.parse(newLine, true); + return this.processRows(rows, wrappedCallback); + } catch (e) { + return wrappedCallback(e); + } + } + _flush(done) { + const wrappedCallback = CsvParserStream.wrapDoneCallback(done); + // if we have hit our maxRows parsing limit then skip parsing + if (this.hasHitRowLimit) { + return wrappedCallback(); + } + try { + const newLine = this.lines + this.decoder.end(); + const rows = this.parse(newLine, false); + return this.processRows(rows, wrappedCallback); + } catch (e) { + return wrappedCallback(e); + } + } + parse(data, hasMoreData) { + if (!data) { + return []; + } + const { + line, + rows + } = this.parser.parse(data, hasMoreData); + this.lines = line; + return rows; + } + processRows(rows, cb) { + const rowsLength = rows.length; + const iterate = i => { + const callNext = err => { + if (err) { + return cb(err); + } + if (i % 100 === 0) { + // incase the transform are sync insert a next tick to prevent stack overflow + setImmediate(() => iterate(i + 1)); + return undefined; + } + return iterate(i + 1); + }; + this.checkAndEmitHeaders(); + // if we have emitted all rows or we have hit the maxRows limit option + // then end + if (i >= rowsLength || this.hasHitRowLimit) { + return cb(); + } + this.parsedLineCount += 1; + if (this.shouldSkipLine) { + return callNext(); + } + const row = rows[i]; + this.rowCount += 1; + this.parsedRowCount += 1; + const nextRowCount = this.rowCount; + return this.transformRow(row, (err, transformResult) => { + if (err) { + this.rowCount -= 1; + return callNext(err); + } + if (!transformResult) { + return callNext(new Error('expected transform result')); + } + if (!transformResult.isValid) { + this.emit('data-invalid', transformResult.row, nextRowCount, transformResult.reason); + } else if (transformResult.row) { + return this.pushRow(transformResult.row, callNext); + } + return callNext(); + }); + }; + iterate(0); + } + transformRow(parsedRow, cb) { + try { + this.headerTransformer.transform(parsedRow, (err, withHeaders) => { + if (err) { + return cb(err); + } + if (!withHeaders) { + return cb(new Error('Expected result from header transform')); + } + if (!withHeaders.isValid) { + if (this.shouldEmitRows) { + return cb(null, { + isValid: false, + row: parsedRow + }); + } + // skipped because of skipRows option remove from total row count + return this.skipRow(cb); + } + if (withHeaders.row) { + if (this.shouldEmitRows) { + return this.rowTransformerValidator.transformAndValidate(withHeaders.row, cb); + } + // skipped because of skipRows option remove from total row count + return this.skipRow(cb); + } + // this is a header row dont include in the rowCount or parsedRowCount + this.rowCount -= 1; + this.parsedRowCount -= 1; + return cb(null, { + row: null, + isValid: true + }); + }); + } catch (e) { + cb(e); + } + } + checkAndEmitHeaders() { + if (!this.headersEmitted && this.headerTransformer.headers) { + this.headersEmitted = true; + this.emit('headers', this.headerTransformer.headers); + } + } + skipRow(cb) { + // skipped because of skipRows option remove from total row count + this.rowCount -= 1; + return cb(null, { + row: null, + isValid: true + }); + } + pushRow(row, cb) { + try { + if (!this.parserOptions.objectMode) { + this.push(JSON.stringify(row)); + } else { + this.push(row); + } + cb(); + } catch (e) { + cb(e); + } + } + static wrapDoneCallback(done) { + let errorCalled = false; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return function (err) { + if (err) { + if (errorCalled) { + throw err; + } + errorCalled = true; + done(err); + return; + } + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + done(...args); + }; + } +} +exports.CsvParserStream = CsvParserStream; + +}).call(this)}).call(this,require("timers").setImmediate) + +},{"./parser":165,"./transforms":168,"stream":343,"string_decoder":218,"timers":361}],154:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ParserOptions = void 0; +const lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp")); +const lodash_isnil_1 = __importDefault(require("lodash.isnil")); +class ParserOptions { + constructor(opts) { + var _a; + this.objectMode = true; + this.delimiter = ','; + this.ignoreEmpty = false; + this.quote = '"'; + this.escape = null; + this.escapeChar = this.quote; + this.comment = null; + this.supportsComments = false; + this.ltrim = false; + this.rtrim = false; + this.trim = false; + this.headers = null; + this.renameHeaders = false; + this.strictColumnHandling = false; + this.discardUnmappedColumns = false; + this.carriageReturn = '\r'; + this.encoding = 'utf8'; + this.limitRows = false; + this.maxRows = 0; + this.skipLines = 0; + this.skipRows = 0; + Object.assign(this, opts || {}); + if (this.delimiter.length > 1) { + throw new Error('delimiter option must be one character long'); + } + this.escapedDelimiter = lodash_escaperegexp_1.default(this.delimiter); + this.escapeChar = (_a = this.escape) !== null && _a !== void 0 ? _a : this.quote; + this.supportsComments = !lodash_isnil_1.default(this.comment); + this.NEXT_TOKEN_REGEXP = new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`); + if (this.maxRows > 0) { + this.limitRows = true; + } + } +} +exports.ParserOptions = ParserOptions; + +},{"lodash.escaperegexp":281,"lodash.isnil":286}],155:[function(require,module,exports){ +"use strict"; + +var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + } + }); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = void 0 && (void 0).__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parseString = exports.parseFile = exports.parseStream = exports.parse = exports.ParserOptions = exports.CsvParserStream = void 0; +const fs = __importStar(require("fs")); +const stream_1 = require("stream"); +const ParserOptions_1 = require("./ParserOptions"); +const CsvParserStream_1 = require("./CsvParserStream"); +__exportStar(require("./types"), exports); +var CsvParserStream_2 = require("./CsvParserStream"); +Object.defineProperty(exports, "CsvParserStream", { + enumerable: true, + get: function () { + return CsvParserStream_2.CsvParserStream; + } +}); +var ParserOptions_2 = require("./ParserOptions"); +Object.defineProperty(exports, "ParserOptions", { + enumerable: true, + get: function () { + return ParserOptions_2.ParserOptions; + } +}); +exports.parse = args => new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args)); +exports.parseStream = (stream, options) => stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options))); +exports.parseFile = function (location) { + let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + return fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options))); +}; +exports.parseString = (string, options) => { + const rs = new stream_1.Readable(); + rs.push(string); + rs.push(null); + return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options))); +}; + +},{"./CsvParserStream":153,"./ParserOptions":154,"./types":169,"fs":216,"stream":343}],156:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Parser = void 0; +const Scanner_1 = require("./Scanner"); +const RowParser_1 = require("./RowParser"); +const Token_1 = require("./Token"); +class Parser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.rowParser = new RowParser_1.RowParser(this.parserOptions); + } + static removeBOM(line) { + // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string + // conversion translates it to FEFF (UTF-16 BOM) + if (line && line.charCodeAt(0) === 0xfeff) { + return line.slice(1); + } + return line; + } + parse(line, hasMoreData) { + const scanner = new Scanner_1.Scanner({ + line: Parser.removeBOM(line), + parserOptions: this.parserOptions, + hasMoreData + }); + if (this.parserOptions.supportsComments) { + return this.parseWithComments(scanner); + } + return this.parseWithoutComments(scanner); + } + parseWithoutComments(scanner) { + const rows = []; + let shouldContinue = true; + while (shouldContinue) { + shouldContinue = this.parseRow(scanner, rows); + } + return { + line: scanner.line, + rows + }; + } + parseWithComments(scanner) { + const { + parserOptions + } = this; + const rows = []; + for (let nextToken = scanner.nextCharacterToken; nextToken !== null; nextToken = scanner.nextCharacterToken) { + if (Token_1.Token.isTokenComment(nextToken, parserOptions)) { + const cursor = scanner.advancePastLine(); + if (cursor === null) { + return { + line: scanner.lineFromCursor, + rows + }; + } + if (!scanner.hasMoreCharacters) { + return { + line: scanner.lineFromCursor, + rows + }; + } + scanner.truncateToCursor(); + } else if (!this.parseRow(scanner, rows)) { + break; + } + } + return { + line: scanner.line, + rows + }; + } + parseRow(scanner, rows) { + const nextToken = scanner.nextNonSpaceToken; + if (!nextToken) { + return false; + } + const row = this.rowParser.parse(scanner); + if (row === null) { + return false; + } + if (this.parserOptions.ignoreEmpty && RowParser_1.RowParser.isEmptyRow(row)) { + return true; + } + rows.push(row); + return true; + } +} +exports.Parser = Parser; + +},{"./RowParser":157,"./Scanner":158,"./Token":159}],157:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.RowParser = void 0; +const column_1 = require("./column"); +const Token_1 = require("./Token"); +const EMPTY_STRING = ''; +class RowParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.columnParser = new column_1.ColumnParser(parserOptions); + } + static isEmptyRow(row) { + return row.join(EMPTY_STRING).replace(/\s+/g, EMPTY_STRING) === EMPTY_STRING; + } + parse(scanner) { + const { + parserOptions + } = this; + const { + hasMoreData + } = scanner; + const currentScanner = scanner; + const columns = []; + let currentToken = this.getStartToken(currentScanner, columns); + while (currentToken) { + if (Token_1.Token.isTokenRowDelimiter(currentToken)) { + currentScanner.advancePastToken(currentToken); + // if ends with CR and there is more data, keep unparsed due to possible + // coming LF in CRLF + if (!currentScanner.hasMoreCharacters && Token_1.Token.isTokenCarriageReturn(currentToken, parserOptions) && hasMoreData) { + return null; + } + currentScanner.truncateToCursor(); + return columns; + } + if (!this.shouldSkipColumnParse(currentScanner, currentToken, columns)) { + const item = this.columnParser.parse(currentScanner); + if (item === null) { + return null; + } + columns.push(item); + } + currentToken = currentScanner.nextNonSpaceToken; + } + if (!hasMoreData) { + currentScanner.truncateToCursor(); + return columns; + } + return null; + } + getStartToken(scanner, columns) { + const currentToken = scanner.nextNonSpaceToken; + if (currentToken !== null && Token_1.Token.isTokenDelimiter(currentToken, this.parserOptions)) { + columns.push(''); + return scanner.nextNonSpaceToken; + } + return currentToken; + } + shouldSkipColumnParse(scanner, currentToken, columns) { + const { + parserOptions + } = this; + if (Token_1.Token.isTokenDelimiter(currentToken, parserOptions)) { + scanner.advancePastToken(currentToken); + // if the delimiter is at the end of a line + const nextToken = scanner.nextCharacterToken; + if (!scanner.hasMoreCharacters || nextToken !== null && Token_1.Token.isTokenRowDelimiter(nextToken)) { + columns.push(''); + return true; + } + if (nextToken !== null && Token_1.Token.isTokenDelimiter(nextToken, parserOptions)) { + columns.push(''); + return true; + } + } + return false; + } +} +exports.RowParser = RowParser; + +},{"./Token":159,"./column":164}],158:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Scanner = void 0; +const Token_1 = require("./Token"); +const ROW_DELIMITER = /((?:\r\n)|\n|\r)/; +class Scanner { + constructor(args) { + this.cursor = 0; + this.line = args.line; + this.lineLength = this.line.length; + this.parserOptions = args.parserOptions; + this.hasMoreData = args.hasMoreData; + this.cursor = args.cursor || 0; + } + get hasMoreCharacters() { + return this.lineLength > this.cursor; + } + get nextNonSpaceToken() { + const { + lineFromCursor + } = this; + const regex = this.parserOptions.NEXT_TOKEN_REGEXP; + if (lineFromCursor.search(regex) === -1) { + return null; + } + const match = regex.exec(lineFromCursor); + if (match == null) { + return null; + } + const token = match[1]; + const startCursor = this.cursor + (match.index || 0); + return new Token_1.Token({ + token, + startCursor, + endCursor: startCursor + token.length - 1 + }); + } + get nextCharacterToken() { + const { + cursor, + lineLength + } = this; + if (lineLength <= cursor) { + return null; + } + return new Token_1.Token({ + token: this.line[cursor], + startCursor: cursor, + endCursor: cursor + }); + } + get lineFromCursor() { + return this.line.substr(this.cursor); + } + advancePastLine() { + const match = ROW_DELIMITER.exec(this.lineFromCursor); + if (!match) { + if (this.hasMoreData) { + return null; + } + this.cursor = this.lineLength; + return this; + } + this.cursor += (match.index || 0) + match[0].length; + return this; + } + advanceTo(cursor) { + this.cursor = cursor; + return this; + } + advanceToToken(token) { + this.cursor = token.startCursor; + return this; + } + advancePastToken(token) { + this.cursor = token.endCursor + 1; + return this; + } + truncateToCursor() { + this.line = this.lineFromCursor; + this.lineLength = this.line.length; + this.cursor = 0; + return this; + } +} +exports.Scanner = Scanner; + +},{"./Token":159}],159:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Token = void 0; +class Token { + constructor(tokenArgs) { + this.token = tokenArgs.token; + this.startCursor = tokenArgs.startCursor; + this.endCursor = tokenArgs.endCursor; + } + static isTokenRowDelimiter(token) { + const content = token.token; + return content === '\r' || content === '\n' || content === '\r\n'; + } + static isTokenCarriageReturn(token, parserOptions) { + return token.token === parserOptions.carriageReturn; + } + static isTokenComment(token, parserOptions) { + return parserOptions.supportsComments && !!token && token.token === parserOptions.comment; + } + static isTokenEscapeCharacter(token, parserOptions) { + return token.token === parserOptions.escapeChar; + } + static isTokenQuote(token, parserOptions) { + return token.token === parserOptions.quote; + } + static isTokenDelimiter(token, parserOptions) { + return token.token === parserOptions.delimiter; + } +} +exports.Token = Token; + +},{}],160:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ColumnFormatter = void 0; +class ColumnFormatter { + constructor(parserOptions) { + if (parserOptions.trim) { + this.format = col => col.trim(); + } else if (parserOptions.ltrim) { + this.format = col => col.trimLeft(); + } else if (parserOptions.rtrim) { + this.format = col => col.trimRight(); + } else { + this.format = col => col; + } + } +} +exports.ColumnFormatter = ColumnFormatter; + +},{}],161:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ColumnParser = void 0; +const NonQuotedColumnParser_1 = require("./NonQuotedColumnParser"); +const QuotedColumnParser_1 = require("./QuotedColumnParser"); +const Token_1 = require("../Token"); +class ColumnParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.quotedColumnParser = new QuotedColumnParser_1.QuotedColumnParser(parserOptions); + this.nonQuotedColumnParser = new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions); + } + parse(scanner) { + const { + nextNonSpaceToken + } = scanner; + if (nextNonSpaceToken !== null && Token_1.Token.isTokenQuote(nextNonSpaceToken, this.parserOptions)) { + scanner.advanceToToken(nextNonSpaceToken); + return this.quotedColumnParser.parse(scanner); + } + return this.nonQuotedColumnParser.parse(scanner); + } +} +exports.ColumnParser = ColumnParser; + +},{"../Token":159,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],162:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.NonQuotedColumnParser = void 0; +const ColumnFormatter_1 = require("./ColumnFormatter"); +const Token_1 = require("../Token"); +class NonQuotedColumnParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions); + } + parse(scanner) { + if (!scanner.hasMoreCharacters) { + return null; + } + const { + parserOptions + } = this; + const characters = []; + let nextToken = scanner.nextCharacterToken; + for (; nextToken; nextToken = scanner.nextCharacterToken) { + if (Token_1.Token.isTokenDelimiter(nextToken, parserOptions) || Token_1.Token.isTokenRowDelimiter(nextToken)) { + break; + } + characters.push(nextToken.token); + scanner.advancePastToken(nextToken); + } + return this.columnFormatter.format(characters.join('')); + } +} +exports.NonQuotedColumnParser = NonQuotedColumnParser; + +},{"../Token":159,"./ColumnFormatter":160}],163:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.QuotedColumnParser = void 0; +const ColumnFormatter_1 = require("./ColumnFormatter"); +const Token_1 = require("../Token"); +class QuotedColumnParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions); + } + parse(scanner) { + if (!scanner.hasMoreCharacters) { + return null; + } + const originalCursor = scanner.cursor; + const { + foundClosingQuote, + col + } = this.gatherDataBetweenQuotes(scanner); + if (!foundClosingQuote) { + // reset the cursor to the original + scanner.advanceTo(originalCursor); + // if we didnt find a closing quote but we potentially have more data then skip the parsing + // and return the original scanner. + if (!scanner.hasMoreData) { + throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote || ''}' in line: at '${scanner.lineFromCursor.replace(/[\r\n]/g, "\\n'")}'`); + } + return null; + } + this.checkForMalformedColumn(scanner); + return col; + } + gatherDataBetweenQuotes(scanner) { + const { + parserOptions + } = this; + let foundStartingQuote = false; + let foundClosingQuote = false; + const characters = []; + let nextToken = scanner.nextCharacterToken; + for (; !foundClosingQuote && nextToken !== null; nextToken = scanner.nextCharacterToken) { + const isQuote = Token_1.Token.isTokenQuote(nextToken, parserOptions); + // ignore first quote + if (!foundStartingQuote && isQuote) { + foundStartingQuote = true; + } else if (foundStartingQuote) { + if (Token_1.Token.isTokenEscapeCharacter(nextToken, parserOptions)) { + // advance past the escape character so we can get the next one in line + scanner.advancePastToken(nextToken); + const tokenFollowingEscape = scanner.nextCharacterToken; + // if the character following the escape is a quote character then just add + // the quote and advance to that character + if (tokenFollowingEscape !== null && (Token_1.Token.isTokenQuote(tokenFollowingEscape, parserOptions) || Token_1.Token.isTokenEscapeCharacter(tokenFollowingEscape, parserOptions))) { + characters.push(tokenFollowingEscape.token); + nextToken = tokenFollowingEscape; + } else if (isQuote) { + // if the escape is also a quote then we found our closing quote and finish early + foundClosingQuote = true; + } else { + // other wise add the escape token to the characters since it wast escaping anything + characters.push(nextToken.token); + } + } else if (isQuote) { + // we found our closing quote! + foundClosingQuote = true; + } else { + // add the token to the characters + characters.push(nextToken.token); + } + } + scanner.advancePastToken(nextToken); + } + return { + col: this.columnFormatter.format(characters.join('')), + foundClosingQuote + }; + } + checkForMalformedColumn(scanner) { + const { + parserOptions + } = this; + const { + nextNonSpaceToken + } = scanner; + if (nextNonSpaceToken) { + const isNextTokenADelimiter = Token_1.Token.isTokenDelimiter(nextNonSpaceToken, parserOptions); + const isNextTokenARowDelimiter = Token_1.Token.isTokenRowDelimiter(nextNonSpaceToken); + if (!(isNextTokenADelimiter || isNextTokenARowDelimiter)) { + // if the final quote was NOT followed by a column (,) or row(\n) delimiter then its a bad column + // tldr: only part of the column was quoted + const linePreview = scanner.lineFromCursor.substr(0, 10).replace(/[\r\n]/g, "\\n'"); + throw new Error(`Parse Error: expected: '${parserOptions.escapedDelimiter}' OR new line got: '${nextNonSpaceToken.token}'. at '${linePreview}`); + } + scanner.advanceToToken(nextNonSpaceToken); + } else if (!scanner.hasMoreData) { + scanner.advancePastLine(); + } + } +} +exports.QuotedColumnParser = QuotedColumnParser; + +},{"../Token":159,"./ColumnFormatter":160}],164:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ColumnFormatter = exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = void 0; +var ColumnParser_1 = require("./ColumnParser"); +Object.defineProperty(exports, "ColumnParser", { + enumerable: true, + get: function () { + return ColumnParser_1.ColumnParser; + } +}); +var NonQuotedColumnParser_1 = require("./NonQuotedColumnParser"); +Object.defineProperty(exports, "NonQuotedColumnParser", { + enumerable: true, + get: function () { + return NonQuotedColumnParser_1.NonQuotedColumnParser; + } +}); +var QuotedColumnParser_1 = require("./QuotedColumnParser"); +Object.defineProperty(exports, "QuotedColumnParser", { + enumerable: true, + get: function () { + return QuotedColumnParser_1.QuotedColumnParser; + } +}); +var ColumnFormatter_1 = require("./ColumnFormatter"); +Object.defineProperty(exports, "ColumnFormatter", { + enumerable: true, + get: function () { + return ColumnFormatter_1.ColumnFormatter; + } +}); + +},{"./ColumnFormatter":160,"./ColumnParser":161,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],165:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = exports.Token = exports.Scanner = exports.RowParser = exports.Parser = void 0; +var Parser_1 = require("./Parser"); +Object.defineProperty(exports, "Parser", { + enumerable: true, + get: function () { + return Parser_1.Parser; + } +}); +var RowParser_1 = require("./RowParser"); +Object.defineProperty(exports, "RowParser", { + enumerable: true, + get: function () { + return RowParser_1.RowParser; + } +}); +var Scanner_1 = require("./Scanner"); +Object.defineProperty(exports, "Scanner", { + enumerable: true, + get: function () { + return Scanner_1.Scanner; + } +}); +var Token_1 = require("./Token"); +Object.defineProperty(exports, "Token", { + enumerable: true, + get: function () { + return Token_1.Token; + } +}); +var column_1 = require("./column"); +Object.defineProperty(exports, "ColumnParser", { + enumerable: true, + get: function () { + return column_1.ColumnParser; + } +}); +Object.defineProperty(exports, "NonQuotedColumnParser", { + enumerable: true, + get: function () { + return column_1.NonQuotedColumnParser; + } +}); +Object.defineProperty(exports, "QuotedColumnParser", { + enumerable: true, + get: function () { + return column_1.QuotedColumnParser; + } +}); + +},{"./Parser":156,"./RowParser":157,"./Scanner":158,"./Token":159,"./column":164}],166:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.HeaderTransformer = void 0; +const lodash_isundefined_1 = __importDefault(require("lodash.isundefined")); +const lodash_isfunction_1 = __importDefault(require("lodash.isfunction")); +const lodash_uniq_1 = __importDefault(require("lodash.uniq")); +const lodash_groupby_1 = __importDefault(require("lodash.groupby")); +class HeaderTransformer { + constructor(parserOptions) { + this.headers = null; + this.receivedHeaders = false; + this.shouldUseFirstRow = false; + this.processedFirstRow = false; + this.headersLength = 0; + this.parserOptions = parserOptions; + if (parserOptions.headers === true) { + this.shouldUseFirstRow = true; + } else if (Array.isArray(parserOptions.headers)) { + this.setHeaders(parserOptions.headers); + } else if (lodash_isfunction_1.default(parserOptions.headers)) { + this.headersTransform = parserOptions.headers; + } + } + transform(row, cb) { + if (!this.shouldMapRow(row)) { + return cb(null, { + row: null, + isValid: true + }); + } + return cb(null, this.processRow(row)); + } + shouldMapRow(row) { + const { + parserOptions + } = this; + if (!this.headersTransform && parserOptions.renameHeaders && !this.processedFirstRow) { + if (!this.receivedHeaders) { + throw new Error('Error renaming headers: new headers must be provided in an array'); + } + this.processedFirstRow = true; + return false; + } + if (!this.receivedHeaders && Array.isArray(row)) { + if (this.headersTransform) { + this.setHeaders(this.headersTransform(row)); + } else if (this.shouldUseFirstRow) { + this.setHeaders(row); + } else { + // dont do anything with the headers if we didnt receive a transform or shouldnt use the first row. + return true; + } + return false; + } + return true; + } + processRow(row) { + if (!this.headers) { + return { + row: row, + isValid: true + }; + } + const { + parserOptions + } = this; + if (!parserOptions.discardUnmappedColumns && row.length > this.headersLength) { + if (!parserOptions.strictColumnHandling) { + throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${row.length}`); + } + return { + row: row, + isValid: false, + reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}` + }; + } + if (parserOptions.strictColumnHandling && row.length < this.headersLength) { + return { + row: row, + isValid: false, + reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}` + }; + } + return { + row: this.mapHeaders(row), + isValid: true + }; + } + mapHeaders(row) { + const rowMap = {}; + const { + headers, + headersLength + } = this; + for (let i = 0; i < headersLength; i += 1) { + const header = headers[i]; + if (!lodash_isundefined_1.default(header)) { + const val = row[i]; + // eslint-disable-next-line no-param-reassign + if (lodash_isundefined_1.default(val)) { + rowMap[header] = ''; + } else { + rowMap[header] = val; + } + } + } + return rowMap; + } + setHeaders(headers) { + var _a; + const filteredHeaders = headers.filter(h => !!h); + if (lodash_uniq_1.default(filteredHeaders).length !== filteredHeaders.length) { + const grouped = lodash_groupby_1.default(filteredHeaders); + const duplicates = Object.keys(grouped).filter(dup => grouped[dup].length > 1); + throw new Error(`Duplicate headers found ${JSON.stringify(duplicates)}`); + } + this.headers = headers; + this.receivedHeaders = true; + this.headersLength = ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.length) || 0; + } +} +exports.HeaderTransformer = HeaderTransformer; + +},{"lodash.groupby":282,"lodash.isfunction":285,"lodash.isundefined":287,"lodash.uniq":288}],167:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.RowTransformerValidator = void 0; +const lodash_isfunction_1 = __importDefault(require("lodash.isfunction")); +const types_1 = require("../types"); +class RowTransformerValidator { + constructor() { + this._rowTransform = null; + this._rowValidator = null; + } + // eslint-disable-next-line @typescript-eslint/no-shadow + static createTransform(transformFunction) { + if (types_1.isSyncTransform(transformFunction)) { + return (row, cb) => { + let transformed = null; + try { + transformed = transformFunction(row); + } catch (e) { + return cb(e); + } + return cb(null, transformed); + }; + } + return transformFunction; + } + static createValidator(validateFunction) { + if (types_1.isSyncValidate(validateFunction)) { + return (row, cb) => { + cb(null, { + row, + isValid: validateFunction(row) + }); + }; + } + return (row, cb) => { + validateFunction(row, (err, isValid, reason) => { + if (err) { + return cb(err); + } + if (isValid) { + return cb(null, { + row, + isValid, + reason + }); + } + return cb(null, { + row, + isValid: false, + reason + }); + }); + }; + } + set rowTransform(transformFunction) { + if (!lodash_isfunction_1.default(transformFunction)) { + throw new TypeError('The transform should be a function'); + } + this._rowTransform = RowTransformerValidator.createTransform(transformFunction); + } + set rowValidator(validateFunction) { + if (!lodash_isfunction_1.default(validateFunction)) { + throw new TypeError('The validate should be a function'); + } + this._rowValidator = RowTransformerValidator.createValidator(validateFunction); + } + transformAndValidate(row, cb) { + return this.callTransformer(row, (transformErr, transformedRow) => { + if (transformErr) { + return cb(transformErr); + } + if (!transformedRow) { + return cb(null, { + row: null, + isValid: true + }); + } + return this.callValidator(transformedRow, (validateErr, validationResult) => { + if (validateErr) { + return cb(validateErr); + } + if (validationResult && !validationResult.isValid) { + return cb(null, { + row: transformedRow, + isValid: false, + reason: validationResult.reason + }); + } + return cb(null, { + row: transformedRow, + isValid: true + }); + }); + }); + } + callTransformer(row, cb) { + if (!this._rowTransform) { + return cb(null, row); + } + return this._rowTransform(row, cb); + } + callValidator(row, cb) { + if (!this._rowValidator) { + return cb(null, { + row, + isValid: true + }); + } + return this._rowValidator(row, cb); + } +} +exports.RowTransformerValidator = RowTransformerValidator; + +},{"../types":169,"lodash.isfunction":285}],168:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.HeaderTransformer = exports.RowTransformerValidator = void 0; +var RowTransformerValidator_1 = require("./RowTransformerValidator"); +Object.defineProperty(exports, "RowTransformerValidator", { + enumerable: true, + get: function () { + return RowTransformerValidator_1.RowTransformerValidator; + } +}); +var HeaderTransformer_1 = require("./HeaderTransformer"); +Object.defineProperty(exports, "HeaderTransformer", { + enumerable: true, + get: function () { + return HeaderTransformer_1.HeaderTransformer; + } +}); + +},{"./HeaderTransformer":166,"./RowTransformerValidator":167}],169:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isSyncValidate = exports.isSyncTransform = void 0; +exports.isSyncTransform = transform => transform.length === 1; +exports.isSyncValidate = validate => validate.length === 1; + +},{}],170:[function(require,module,exports){ +'use strict'; + +const asn1 = exports; +asn1.bignum = require('bn.js'); +asn1.define = require('./asn1/api').define; +asn1.base = require('./asn1/base'); +asn1.constants = require('./asn1/constants'); +asn1.decoders = require('./asn1/decoders'); +asn1.encoders = require('./asn1/encoders'); + +},{"./asn1/api":171,"./asn1/base":173,"./asn1/constants":177,"./asn1/decoders":179,"./asn1/encoders":182,"bn.js":184}],171:[function(require,module,exports){ +'use strict'; + +const encoders = require('./encoders'); +const decoders = require('./decoders'); +const inherits = require('inherits'); +const api = exports; +api.define = function define(name, body) { + return new Entity(name, body); +}; +function Entity(name, body) { + this.name = name; + this.body = body; + this.decoders = {}; + this.encoders = {}; +} +Entity.prototype._createNamed = function createNamed(Base) { + const name = this.name; + function Generated(entity) { + this._initNamed(entity, name); + } + inherits(Generated, Base); + Generated.prototype._initNamed = function _initNamed(entity, name) { + Base.call(this, entity, name); + }; + return new Generated(this); +}; +Entity.prototype._getDecoder = function _getDecoder(enc) { + enc = enc || 'der'; + // Lazily create decoder + if (!this.decoders.hasOwnProperty(enc)) this.decoders[enc] = this._createNamed(decoders[enc]); + return this.decoders[enc]; +}; +Entity.prototype.decode = function decode(data, enc, options) { + return this._getDecoder(enc).decode(data, options); +}; +Entity.prototype._getEncoder = function _getEncoder(enc) { + enc = enc || 'der'; + // Lazily create encoder + if (!this.encoders.hasOwnProperty(enc)) this.encoders[enc] = this._createNamed(encoders[enc]); + return this.encoders[enc]; +}; +Entity.prototype.encode = function encode(data, enc, /* internal */reporter) { + return this._getEncoder(enc).encode(data, reporter); +}; + +},{"./decoders":179,"./encoders":182,"inherits":279}],172:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const Reporter = require('../base/reporter').Reporter; +const Buffer = require('safer-buffer').Buffer; +function DecoderBuffer(base, options) { + Reporter.call(this, options); + if (!Buffer.isBuffer(base)) { + this.error('Input not Buffer'); + return; + } + this.base = base; + this.offset = 0; + this.length = base.length; +} +inherits(DecoderBuffer, Reporter); +exports.DecoderBuffer = DecoderBuffer; +DecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) { + if (data instanceof DecoderBuffer) { + return true; + } + + // Or accept compatible API + const isCompatible = typeof data === 'object' && Buffer.isBuffer(data.base) && data.constructor.name === 'DecoderBuffer' && typeof data.offset === 'number' && typeof data.length === 'number' && typeof data.save === 'function' && typeof data.restore === 'function' && typeof data.isEmpty === 'function' && typeof data.readUInt8 === 'function' && typeof data.skip === 'function' && typeof data.raw === 'function'; + return isCompatible; +}; +DecoderBuffer.prototype.save = function save() { + return { + offset: this.offset, + reporter: Reporter.prototype.save.call(this) + }; +}; +DecoderBuffer.prototype.restore = function restore(save) { + // Return skipped data + const res = new DecoderBuffer(this.base); + res.offset = save.offset; + res.length = this.offset; + this.offset = save.offset; + Reporter.prototype.restore.call(this, save.reporter); + return res; +}; +DecoderBuffer.prototype.isEmpty = function isEmpty() { + return this.offset === this.length; +}; +DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { + if (this.offset + 1 <= this.length) return this.base.readUInt8(this.offset++, true);else return this.error(fail || 'DecoderBuffer overrun'); +}; +DecoderBuffer.prototype.skip = function skip(bytes, fail) { + if (!(this.offset + bytes <= this.length)) return this.error(fail || 'DecoderBuffer overrun'); + const res = new DecoderBuffer(this.base); + + // Share reporter state + res._reporterState = this._reporterState; + res.offset = this.offset; + res.length = this.offset + bytes; + this.offset += bytes; + return res; +}; +DecoderBuffer.prototype.raw = function raw(save) { + return this.base.slice(save ? save.offset : this.offset, this.length); +}; +function EncoderBuffer(value, reporter) { + if (Array.isArray(value)) { + this.length = 0; + this.value = value.map(function (item) { + if (!EncoderBuffer.isEncoderBuffer(item)) item = new EncoderBuffer(item, reporter); + this.length += item.length; + return item; + }, this); + } else if (typeof value === 'number') { + if (!(0 <= value && value <= 0xff)) return reporter.error('non-byte EncoderBuffer value'); + this.value = value; + this.length = 1; + } else if (typeof value === 'string') { + this.value = value; + this.length = Buffer.byteLength(value); + } else if (Buffer.isBuffer(value)) { + this.value = value; + this.length = value.length; + } else { + return reporter.error('Unsupported type: ' + typeof value); + } +} +exports.EncoderBuffer = EncoderBuffer; +EncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) { + if (data instanceof EncoderBuffer) { + return true; + } + + // Or accept compatible API + const isCompatible = typeof data === 'object' && data.constructor.name === 'EncoderBuffer' && typeof data.length === 'number' && typeof data.join === 'function'; + return isCompatible; +}; +EncoderBuffer.prototype.join = function join(out, offset) { + if (!out) out = Buffer.alloc(this.length); + if (!offset) offset = 0; + if (this.length === 0) return out; + if (Array.isArray(this.value)) { + this.value.forEach(function (item) { + item.join(out, offset); + offset += item.length; + }); + } else { + if (typeof this.value === 'number') out[offset] = this.value;else if (typeof this.value === 'string') out.write(this.value, offset);else if (Buffer.isBuffer(this.value)) this.value.copy(out, offset); + offset += this.length; + } + return out; +}; + +},{"../base/reporter":175,"inherits":279,"safer-buffer":333}],173:[function(require,module,exports){ +'use strict'; + +const base = exports; +base.Reporter = require('./reporter').Reporter; +base.DecoderBuffer = require('./buffer').DecoderBuffer; +base.EncoderBuffer = require('./buffer').EncoderBuffer; +base.Node = require('./node'); + +},{"./buffer":172,"./node":174,"./reporter":175}],174:[function(require,module,exports){ +'use strict'; + +const Reporter = require('../base/reporter').Reporter; +const EncoderBuffer = require('../base/buffer').EncoderBuffer; +const DecoderBuffer = require('../base/buffer').DecoderBuffer; +const assert = require('minimalistic-assert'); + +// Supported tags +const tags = ['seq', 'seqof', 'set', 'setof', 'objid', 'bool', 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr']; + +// Public methods list +const methods = ['key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', 'any', 'contains'].concat(tags); + +// Overrided methods list +const overrided = ['_peekTag', '_decodeTag', '_use', '_decodeStr', '_decodeObjid', '_decodeTime', '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', '_encodeNull', '_encodeInt', '_encodeBool']; +function Node(enc, parent, name) { + const state = {}; + this._baseState = state; + state.name = name; + state.enc = enc; + state.parent = parent || null; + state.children = null; + + // State + state.tag = null; + state.args = null; + state.reverseArgs = null; + state.choice = null; + state.optional = false; + state.any = false; + state.obj = false; + state.use = null; + state.useDecoder = null; + state.key = null; + state['default'] = null; + state.explicit = null; + state.implicit = null; + state.contains = null; + + // Should create new instance on each method + if (!state.parent) { + state.children = []; + this._wrap(); + } +} +module.exports = Node; +const stateProps = ['enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', 'implicit', 'contains']; +Node.prototype.clone = function clone() { + const state = this._baseState; + const cstate = {}; + stateProps.forEach(function (prop) { + cstate[prop] = state[prop]; + }); + const res = new this.constructor(cstate.parent); + res._baseState = cstate; + return res; +}; +Node.prototype._wrap = function wrap() { + const state = this._baseState; + methods.forEach(function (method) { + this[method] = function _wrappedMethod() { + const clone = new this.constructor(this); + state.children.push(clone); + return clone[method].apply(clone, arguments); + }; + }, this); +}; +Node.prototype._init = function init(body) { + const state = this._baseState; + assert(state.parent === null); + body.call(this); + + // Filter children + state.children = state.children.filter(function (child) { + return child._baseState.parent === this; + }, this); + assert.equal(state.children.length, 1, 'Root node can have only one child'); +}; +Node.prototype._useArgs = function useArgs(args) { + const state = this._baseState; + + // Filter children and args + const children = args.filter(function (arg) { + return arg instanceof this.constructor; + }, this); + args = args.filter(function (arg) { + return !(arg instanceof this.constructor); + }, this); + if (children.length !== 0) { + assert(state.children === null); + state.children = children; + + // Replace parent to maintain backward link + children.forEach(function (child) { + child._baseState.parent = this; + }, this); + } + if (args.length !== 0) { + assert(state.args === null); + state.args = args; + state.reverseArgs = args.map(function (arg) { + if (typeof arg !== 'object' || arg.constructor !== Object) return arg; + const res = {}; + Object.keys(arg).forEach(function (key) { + if (key == (key | 0)) key |= 0; + const value = arg[key]; + res[value] = key; + }); + return res; + }); + } +}; + +// +// Overrided methods +// + +overrided.forEach(function (method) { + Node.prototype[method] = function _overrided() { + const state = this._baseState; + throw new Error(method + ' not implemented for encoding: ' + state.enc); + }; +}); + +// +// Public methods +// + +tags.forEach(function (tag) { + Node.prototype[tag] = function _tagMethod() { + const state = this._baseState; + const args = Array.prototype.slice.call(arguments); + assert(state.tag === null); + state.tag = tag; + this._useArgs(args); + return this; + }; +}); +Node.prototype.use = function use(item) { + assert(item); + const state = this._baseState; + assert(state.use === null); + state.use = item; + return this; +}; +Node.prototype.optional = function optional() { + const state = this._baseState; + state.optional = true; + return this; +}; +Node.prototype.def = function def(val) { + const state = this._baseState; + assert(state['default'] === null); + state['default'] = val; + state.optional = true; + return this; +}; +Node.prototype.explicit = function explicit(num) { + const state = this._baseState; + assert(state.explicit === null && state.implicit === null); + state.explicit = num; + return this; +}; +Node.prototype.implicit = function implicit(num) { + const state = this._baseState; + assert(state.explicit === null && state.implicit === null); + state.implicit = num; + return this; +}; +Node.prototype.obj = function obj() { + const state = this._baseState; + const args = Array.prototype.slice.call(arguments); + state.obj = true; + if (args.length !== 0) this._useArgs(args); + return this; +}; +Node.prototype.key = function key(newKey) { + const state = this._baseState; + assert(state.key === null); + state.key = newKey; + return this; +}; +Node.prototype.any = function any() { + const state = this._baseState; + state.any = true; + return this; +}; +Node.prototype.choice = function choice(obj) { + const state = this._baseState; + assert(state.choice === null); + state.choice = obj; + this._useArgs(Object.keys(obj).map(function (key) { + return obj[key]; + })); + return this; +}; +Node.prototype.contains = function contains(item) { + const state = this._baseState; + assert(state.use === null); + state.contains = item; + return this; +}; + +// +// Decoding +// + +Node.prototype._decode = function decode(input, options) { + const state = this._baseState; + + // Decode root node + if (state.parent === null) return input.wrapResult(state.children[0]._decode(input, options)); + let result = state['default']; + let present = true; + let prevKey = null; + if (state.key !== null) prevKey = input.enterKey(state.key); + + // Check if tag is there + if (state.optional) { + let tag = null; + if (state.explicit !== null) tag = state.explicit;else if (state.implicit !== null) tag = state.implicit;else if (state.tag !== null) tag = state.tag; + if (tag === null && !state.any) { + // Trial and Error + const save = input.save(); + try { + if (state.choice === null) this._decodeGeneric(state.tag, input, options);else this._decodeChoice(input, options); + present = true; + } catch (e) { + present = false; + } + input.restore(save); + } else { + present = this._peekTag(input, tag, state.any); + if (input.isError(present)) return present; + } + } + + // Push object on stack + let prevObj; + if (state.obj && present) prevObj = input.enterObject(); + if (present) { + // Unwrap explicit values + if (state.explicit !== null) { + const explicit = this._decodeTag(input, state.explicit); + if (input.isError(explicit)) return explicit; + input = explicit; + } + const start = input.offset; + + // Unwrap implicit and normal values + if (state.use === null && state.choice === null) { + let save; + if (state.any) save = input.save(); + const body = this._decodeTag(input, state.implicit !== null ? state.implicit : state.tag, state.any); + if (input.isError(body)) return body; + if (state.any) result = input.raw(save);else input = body; + } + if (options && options.track && state.tag !== null) options.track(input.path(), start, input.length, 'tagged'); + if (options && options.track && state.tag !== null) options.track(input.path(), input.offset, input.length, 'content'); + + // Select proper method for tag + if (state.any) { + // no-op + } else if (state.choice === null) { + result = this._decodeGeneric(state.tag, input, options); + } else { + result = this._decodeChoice(input, options); + } + if (input.isError(result)) return result; + + // Decode children + if (!state.any && state.choice === null && state.children !== null) { + state.children.forEach(function decodeChildren(child) { + // NOTE: We are ignoring errors here, to let parser continue with other + // parts of encoded data + child._decode(input, options); + }); + } + + // Decode contained/encoded by schema, only in bit or octet strings + if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { + const data = new DecoderBuffer(result); + result = this._getUse(state.contains, input._reporterState.obj)._decode(data, options); + } + } + + // Pop object + if (state.obj && present) result = input.leaveObject(prevObj); + + // Set key + if (state.key !== null && (result !== null || present === true)) input.leaveKey(prevKey, state.key, result);else if (prevKey !== null) input.exitKey(prevKey); + return result; +}; +Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { + const state = this._baseState; + if (tag === 'seq' || tag === 'set') return null; + if (tag === 'seqof' || tag === 'setof') return this._decodeList(input, tag, state.args[0], options);else if (/str$/.test(tag)) return this._decodeStr(input, tag, options);else if (tag === 'objid' && state.args) return this._decodeObjid(input, state.args[0], state.args[1], options);else if (tag === 'objid') return this._decodeObjid(input, null, null, options);else if (tag === 'gentime' || tag === 'utctime') return this._decodeTime(input, tag, options);else if (tag === 'null_') return this._decodeNull(input, options);else if (tag === 'bool') return this._decodeBool(input, options);else if (tag === 'objDesc') return this._decodeStr(input, tag, options);else if (tag === 'int' || tag === 'enum') return this._decodeInt(input, state.args && state.args[0], options); + if (state.use !== null) { + return this._getUse(state.use, input._reporterState.obj)._decode(input, options); + } else { + return input.error('unknown tag: ' + tag); + } +}; +Node.prototype._getUse = function _getUse(entity, obj) { + const state = this._baseState; + // Create altered use decoder if implicit is set + state.useDecoder = this._use(entity, obj); + assert(state.useDecoder._baseState.parent === null); + state.useDecoder = state.useDecoder._baseState.children[0]; + if (state.implicit !== state.useDecoder._baseState.implicit) { + state.useDecoder = state.useDecoder.clone(); + state.useDecoder._baseState.implicit = state.implicit; + } + return state.useDecoder; +}; +Node.prototype._decodeChoice = function decodeChoice(input, options) { + const state = this._baseState; + let result = null; + let match = false; + Object.keys(state.choice).some(function (key) { + const save = input.save(); + const node = state.choice[key]; + try { + const value = node._decode(input, options); + if (input.isError(value)) return false; + result = { + type: key, + value: value + }; + match = true; + } catch (e) { + input.restore(save); + return false; + } + return true; + }, this); + if (!match) return input.error('Choice not matched'); + return result; +}; + +// +// Encoding +// + +Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { + return new EncoderBuffer(data, this.reporter); +}; +Node.prototype._encode = function encode(data, reporter, parent) { + const state = this._baseState; + if (state['default'] !== null && state['default'] === data) return; + const result = this._encodeValue(data, reporter, parent); + if (result === undefined) return; + if (this._skipDefault(result, reporter, parent)) return; + return result; +}; +Node.prototype._encodeValue = function encode(data, reporter, parent) { + const state = this._baseState; + + // Decode root node + if (state.parent === null) return state.children[0]._encode(data, reporter || new Reporter()); + let result = null; + + // Set reporter to share it with a child class + this.reporter = reporter; + + // Check if data is there + if (state.optional && data === undefined) { + if (state['default'] !== null) data = state['default'];else return; + } + + // Encode children first + let content = null; + let primitive = false; + if (state.any) { + // Anything that was given is translated to buffer + result = this._createEncoderBuffer(data); + } else if (state.choice) { + result = this._encodeChoice(data, reporter); + } else if (state.contains) { + content = this._getUse(state.contains, parent)._encode(data, reporter); + primitive = true; + } else if (state.children) { + content = state.children.map(function (child) { + if (child._baseState.tag === 'null_') return child._encode(null, reporter, data); + if (child._baseState.key === null) return reporter.error('Child should have a key'); + const prevKey = reporter.enterKey(child._baseState.key); + if (typeof data !== 'object') return reporter.error('Child expected, but input is not object'); + const res = child._encode(data[child._baseState.key], reporter, data); + reporter.leaveKey(prevKey); + return res; + }, this).filter(function (child) { + return child; + }); + content = this._createEncoderBuffer(content); + } else { + if (state.tag === 'seqof' || state.tag === 'setof') { + // TODO(indutny): this should be thrown on DSL level + if (!(state.args && state.args.length === 1)) return reporter.error('Too many args for : ' + state.tag); + if (!Array.isArray(data)) return reporter.error('seqof/setof, but data is not Array'); + const child = this.clone(); + child._baseState.implicit = null; + content = this._createEncoderBuffer(data.map(function (item) { + const state = this._baseState; + return this._getUse(state.args[0], data)._encode(item, reporter); + }, child)); + } else if (state.use !== null) { + result = this._getUse(state.use, parent)._encode(data, reporter); + } else { + content = this._encodePrimitive(state.tag, data); + primitive = true; + } + } + + // Encode data itself + if (!state.any && state.choice === null) { + const tag = state.implicit !== null ? state.implicit : state.tag; + const cls = state.implicit === null ? 'universal' : 'context'; + if (tag === null) { + if (state.use === null) reporter.error('Tag could be omitted only for .use()'); + } else { + if (state.use === null) result = this._encodeComposite(tag, primitive, cls, content); + } + } + + // Wrap in explicit + if (state.explicit !== null) result = this._encodeComposite(state.explicit, false, 'context', result); + return result; +}; +Node.prototype._encodeChoice = function encodeChoice(data, reporter) { + const state = this._baseState; + const node = state.choice[data.type]; + if (!node) { + assert(false, data.type + ' not found in ' + JSON.stringify(Object.keys(state.choice))); + } + return node._encode(data.value, reporter); +}; +Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { + const state = this._baseState; + if (/str$/.test(tag)) return this._encodeStr(data, tag);else if (tag === 'objid' && state.args) return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);else if (tag === 'objid') return this._encodeObjid(data, null, null);else if (tag === 'gentime' || tag === 'utctime') return this._encodeTime(data, tag);else if (tag === 'null_') return this._encodeNull();else if (tag === 'int' || tag === 'enum') return this._encodeInt(data, state.args && state.reverseArgs[0]);else if (tag === 'bool') return this._encodeBool(data);else if (tag === 'objDesc') return this._encodeStr(data, tag);else throw new Error('Unsupported tag: ' + tag); +}; +Node.prototype._isNumstr = function isNumstr(str) { + return /^[0-9 ]*$/.test(str); +}; +Node.prototype._isPrintstr = function isPrintstr(str) { + return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str); +}; + +},{"../base/buffer":172,"../base/reporter":175,"minimalistic-assert":292}],175:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +function Reporter(options) { + this._reporterState = { + obj: null, + path: [], + options: options || {}, + errors: [] + }; +} +exports.Reporter = Reporter; +Reporter.prototype.isError = function isError(obj) { + return obj instanceof ReporterError; +}; +Reporter.prototype.save = function save() { + const state = this._reporterState; + return { + obj: state.obj, + pathLen: state.path.length + }; +}; +Reporter.prototype.restore = function restore(data) { + const state = this._reporterState; + state.obj = data.obj; + state.path = state.path.slice(0, data.pathLen); +}; +Reporter.prototype.enterKey = function enterKey(key) { + return this._reporterState.path.push(key); +}; +Reporter.prototype.exitKey = function exitKey(index) { + const state = this._reporterState; + state.path = state.path.slice(0, index - 1); +}; +Reporter.prototype.leaveKey = function leaveKey(index, key, value) { + const state = this._reporterState; + this.exitKey(index); + if (state.obj !== null) state.obj[key] = value; +}; +Reporter.prototype.path = function path() { + return this._reporterState.path.join('/'); +}; +Reporter.prototype.enterObject = function enterObject() { + const state = this._reporterState; + const prev = state.obj; + state.obj = {}; + return prev; +}; +Reporter.prototype.leaveObject = function leaveObject(prev) { + const state = this._reporterState; + const now = state.obj; + state.obj = prev; + return now; +}; +Reporter.prototype.error = function error(msg) { + let err; + const state = this._reporterState; + const inherited = msg instanceof ReporterError; + if (inherited) { + err = msg; + } else { + err = new ReporterError(state.path.map(function (elem) { + return '[' + JSON.stringify(elem) + ']'; + }).join(''), msg.message || msg, msg.stack); + } + if (!state.options.partial) throw err; + if (!inherited) state.errors.push(err); + return err; +}; +Reporter.prototype.wrapResult = function wrapResult(result) { + const state = this._reporterState; + if (!state.options.partial) return result; + return { + result: this.isError(result) ? null : result, + errors: state.errors + }; +}; +function ReporterError(path, msg) { + this.path = path; + this.rethrow(msg); +} +inherits(ReporterError, Error); +ReporterError.prototype.rethrow = function rethrow(msg) { + this.message = msg + ' at: ' + (this.path || '(shallow)'); + if (Error.captureStackTrace) Error.captureStackTrace(this, ReporterError); + if (!this.stack) { + try { + // IE only adds stack when thrown + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; + } + } + return this; +}; + +},{"inherits":279}],176:[function(require,module,exports){ +'use strict'; + +// Helper +function reverse(map) { + const res = {}; + Object.keys(map).forEach(function (key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) key = key | 0; + const value = map[key]; + res[value] = key; + }); + return res; +} +exports.tagClass = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private' +}; +exports.tagClassByName = reverse(exports.tagClass); +exports.tag = { + 0x00: 'end', + 0x01: 'bool', + 0x02: 'int', + 0x03: 'bitstr', + 0x04: 'octstr', + 0x05: 'null_', + 0x06: 'objid', + 0x07: 'objDesc', + 0x08: 'external', + 0x09: 'real', + 0x0a: 'enum', + 0x0b: 'embed', + 0x0c: 'utf8str', + 0x0d: 'relativeOid', + 0x10: 'seq', + 0x11: 'set', + 0x12: 'numstr', + 0x13: 'printstr', + 0x14: 't61str', + 0x15: 'videostr', + 0x16: 'ia5str', + 0x17: 'utctime', + 0x18: 'gentime', + 0x19: 'graphstr', + 0x1a: 'iso646str', + 0x1b: 'genstr', + 0x1c: 'unistr', + 0x1d: 'charstr', + 0x1e: 'bmpstr' +}; +exports.tagByName = reverse(exports.tag); + +},{}],177:[function(require,module,exports){ +'use strict'; + +const constants = exports; + +// Helper +constants._reverse = function reverse(map) { + const res = {}; + Object.keys(map).forEach(function (key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) key = key | 0; + const value = map[key]; + res[value] = key; + }); + return res; +}; +constants.der = require('./der'); + +},{"./der":176}],178:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const bignum = require('bn.js'); +const DecoderBuffer = require('../base/buffer').DecoderBuffer; +const Node = require('../base/node'); + +// Import DER constants +const der = require('../constants/der'); +function DERDecoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +} +module.exports = DERDecoder; +DERDecoder.prototype.decode = function decode(data, options) { + if (!DecoderBuffer.isDecoderBuffer(data)) { + data = new DecoderBuffer(data, options); + } + return this.tree._decode(data, options); +}; + +// Tree methods + +function DERNode(parent) { + Node.call(this, 'der', parent); +} +inherits(DERNode, Node); +DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { + if (buffer.isEmpty()) return false; + const state = buffer.save(); + const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); + if (buffer.isError(decodedTag)) return decodedTag; + buffer.restore(state); + return decodedTag.tag === tag || decodedTag.tagStr === tag || decodedTag.tagStr + 'of' === tag || any; +}; +DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { + const decodedTag = derDecodeTag(buffer, 'Failed to decode tag of "' + tag + '"'); + if (buffer.isError(decodedTag)) return decodedTag; + let len = derDecodeLen(buffer, decodedTag.primitive, 'Failed to get length of "' + tag + '"'); + + // Failure + if (buffer.isError(len)) return len; + if (!any && decodedTag.tag !== tag && decodedTag.tagStr !== tag && decodedTag.tagStr + 'of' !== tag) { + return buffer.error('Failed to match tag: "' + tag + '"'); + } + if (decodedTag.primitive || len !== null) return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); + + // Indefinite length... find END tag + const state = buffer.save(); + const res = this._skipUntilEnd(buffer, 'Failed to skip indefinite length body: "' + this.tag + '"'); + if (buffer.isError(res)) return res; + len = buffer.offset - state.offset; + buffer.restore(state); + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +}; +DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { + for (;;) { + const tag = derDecodeTag(buffer, fail); + if (buffer.isError(tag)) return tag; + const len = derDecodeLen(buffer, tag.primitive, fail); + if (buffer.isError(len)) return len; + let res; + if (tag.primitive || len !== null) res = buffer.skip(len);else res = this._skipUntilEnd(buffer, fail); + + // Failure + if (buffer.isError(res)) return res; + if (tag.tagStr === 'end') break; + } +}; +DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, options) { + const result = []; + while (!buffer.isEmpty()) { + const possibleEnd = this._peekTag(buffer, 'end'); + if (buffer.isError(possibleEnd)) return possibleEnd; + const res = decoder.decode(buffer, 'der', options); + if (buffer.isError(res) && possibleEnd) break; + result.push(res); + } + return result; +}; +DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { + if (tag === 'bitstr') { + const unused = buffer.readUInt8(); + if (buffer.isError(unused)) return unused; + return { + unused: unused, + data: buffer.raw() + }; + } else if (tag === 'bmpstr') { + const raw = buffer.raw(); + if (raw.length % 2 === 1) return buffer.error('Decoding of string type: bmpstr length mismatch'); + let str = ''; + for (let i = 0; i < raw.length / 2; i++) { + str += String.fromCharCode(raw.readUInt16BE(i * 2)); + } + return str; + } else if (tag === 'numstr') { + const numstr = buffer.raw().toString('ascii'); + if (!this._isNumstr(numstr)) { + return buffer.error('Decoding of string type: ' + 'numstr unsupported characters'); + } + return numstr; + } else if (tag === 'octstr') { + return buffer.raw(); + } else if (tag === 'objDesc') { + return buffer.raw(); + } else if (tag === 'printstr') { + const printstr = buffer.raw().toString('ascii'); + if (!this._isPrintstr(printstr)) { + return buffer.error('Decoding of string type: ' + 'printstr unsupported characters'); + } + return printstr; + } else if (/str$/.test(tag)) { + return buffer.raw().toString(); + } else { + return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + } +}; +DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { + let result; + const identifiers = []; + let ident = 0; + let subident = 0; + while (!buffer.isEmpty()) { + subident = buffer.readUInt8(); + ident <<= 7; + ident |= subident & 0x7f; + if ((subident & 0x80) === 0) { + identifiers.push(ident); + ident = 0; + } + } + if (subident & 0x80) identifiers.push(ident); + const first = identifiers[0] / 40 | 0; + const second = identifiers[0] % 40; + if (relative) result = identifiers;else result = [first, second].concat(identifiers.slice(1)); + if (values) { + let tmp = values[result.join(' ')]; + if (tmp === undefined) tmp = values[result.join('.')]; + if (tmp !== undefined) result = tmp; + } + return result; +}; +DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { + const str = buffer.raw().toString(); + let year; + let mon; + let day; + let hour; + let min; + let sec; + if (tag === 'gentime') { + year = str.slice(0, 4) | 0; + mon = str.slice(4, 6) | 0; + day = str.slice(6, 8) | 0; + hour = str.slice(8, 10) | 0; + min = str.slice(10, 12) | 0; + sec = str.slice(12, 14) | 0; + } else if (tag === 'utctime') { + year = str.slice(0, 2) | 0; + mon = str.slice(2, 4) | 0; + day = str.slice(4, 6) | 0; + hour = str.slice(6, 8) | 0; + min = str.slice(8, 10) | 0; + sec = str.slice(10, 12) | 0; + if (year < 70) year = 2000 + year;else year = 1900 + year; + } else { + return buffer.error('Decoding ' + tag + ' time is not supported yet'); + } + return Date.UTC(year, mon - 1, day, hour, min, sec, 0); +}; +DERNode.prototype._decodeNull = function decodeNull() { + return null; +}; +DERNode.prototype._decodeBool = function decodeBool(buffer) { + const res = buffer.readUInt8(); + if (buffer.isError(res)) return res;else return res !== 0; +}; +DERNode.prototype._decodeInt = function decodeInt(buffer, values) { + // Bigint, return as it is (assume big endian) + const raw = buffer.raw(); + let res = new bignum(raw); + if (values) res = values[res.toString(10)] || res; + return res; +}; +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') entity = entity(obj); + return entity._getDecoder('der').tree; +}; + +// Utility methods + +function derDecodeTag(buf, fail) { + let tag = buf.readUInt8(fail); + if (buf.isError(tag)) return tag; + const cls = der.tagClass[tag >> 6]; + const primitive = (tag & 0x20) === 0; + + // Multi-octet tag - load + if ((tag & 0x1f) === 0x1f) { + let oct = tag; + tag = 0; + while ((oct & 0x80) === 0x80) { + oct = buf.readUInt8(fail); + if (buf.isError(oct)) return oct; + tag <<= 7; + tag |= oct & 0x7f; + } + } else { + tag &= 0x1f; + } + const tagStr = der.tag[tag]; + return { + cls: cls, + primitive: primitive, + tag: tag, + tagStr: tagStr + }; +} +function derDecodeLen(buf, primitive, fail) { + let len = buf.readUInt8(fail); + if (buf.isError(len)) return len; + + // Indefinite form + if (!primitive && len === 0x80) return null; + + // Definite form + if ((len & 0x80) === 0) { + // Short form + return len; + } + + // Long form + const num = len & 0x7f; + if (num > 4) return buf.error('length octect is too long'); + len = 0; + for (let i = 0; i < num; i++) { + len <<= 8; + const j = buf.readUInt8(fail); + if (buf.isError(j)) return j; + len |= j; + } + return len; +} + +},{"../base/buffer":172,"../base/node":174,"../constants/der":176,"bn.js":184,"inherits":279}],179:[function(require,module,exports){ +'use strict'; + +const decoders = exports; +decoders.der = require('./der'); +decoders.pem = require('./pem'); + +},{"./der":178,"./pem":180}],180:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const Buffer = require('safer-buffer').Buffer; +const DERDecoder = require('./der'); +function PEMDecoder(entity) { + DERDecoder.call(this, entity); + this.enc = 'pem'; +} +inherits(PEMDecoder, DERDecoder); +module.exports = PEMDecoder; +PEMDecoder.prototype.decode = function decode(data, options) { + const lines = data.toString().split(/[\r\n]+/g); + const label = options.label.toUpperCase(); + const re = /^-----(BEGIN|END) ([^-]+)-----$/; + let start = -1; + let end = -1; + for (let i = 0; i < lines.length; i++) { + const match = lines[i].match(re); + if (match === null) continue; + if (match[2] !== label) continue; + if (start === -1) { + if (match[1] !== 'BEGIN') break; + start = i; + } else { + if (match[1] !== 'END') break; + end = i; + break; + } + } + if (start === -1 || end === -1) throw new Error('PEM section not found for: ' + label); + const base64 = lines.slice(start + 1, end).join(''); + // Remove excessive symbols + base64.replace(/[^a-z0-9+/=]+/gi, ''); + const input = Buffer.from(base64, 'base64'); + return DERDecoder.prototype.decode.call(this, input, options); +}; + +},{"./der":178,"inherits":279,"safer-buffer":333}],181:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const Buffer = require('safer-buffer').Buffer; +const Node = require('../base/node'); + +// Import DER constants +const der = require('../constants/der'); +function DEREncoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +} +module.exports = DEREncoder; +DEREncoder.prototype.encode = function encode(data, reporter) { + return this.tree._encode(data, reporter).join(); +}; + +// Tree methods + +function DERNode(parent) { + Node.call(this, 'der', parent); +} +inherits(DERNode, Node); +DERNode.prototype._encodeComposite = function encodeComposite(tag, primitive, cls, content) { + const encodedTag = encodeTag(tag, primitive, cls, this.reporter); + + // Short form + if (content.length < 0x80) { + const header = Buffer.alloc(2); + header[0] = encodedTag; + header[1] = content.length; + return this._createEncoderBuffer([header, content]); + } + + // Long form + // Count octets required to store length + let lenOctets = 1; + for (let i = content.length; i >= 0x100; i >>= 8) lenOctets++; + const header = Buffer.alloc(1 + 1 + lenOctets); + header[0] = encodedTag; + header[1] = 0x80 | lenOctets; + for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) header[i] = j & 0xff; + return this._createEncoderBuffer([header, content]); +}; +DERNode.prototype._encodeStr = function encodeStr(str, tag) { + if (tag === 'bitstr') { + return this._createEncoderBuffer([str.unused | 0, str.data]); + } else if (tag === 'bmpstr') { + const buf = Buffer.alloc(str.length * 2); + for (let i = 0; i < str.length; i++) { + buf.writeUInt16BE(str.charCodeAt(i), i * 2); + } + return this._createEncoderBuffer(buf); + } else if (tag === 'numstr') { + if (!this._isNumstr(str)) { + return this.reporter.error('Encoding of string type: numstr supports ' + 'only digits and space'); + } + return this._createEncoderBuffer(str); + } else if (tag === 'printstr') { + if (!this._isPrintstr(str)) { + return this.reporter.error('Encoding of string type: printstr supports ' + 'only latin upper and lower case letters, ' + 'digits, space, apostrophe, left and rigth ' + 'parenthesis, plus sign, comma, hyphen, ' + 'dot, slash, colon, equal sign, ' + 'question mark'); + } + return this._createEncoderBuffer(str); + } else if (/str$/.test(tag)) { + return this._createEncoderBuffer(str); + } else if (tag === 'objDesc') { + return this._createEncoderBuffer(str); + } else { + return this.reporter.error('Encoding of string type: ' + tag + ' unsupported'); + } +}; +DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { + if (typeof id === 'string') { + if (!values) return this.reporter.error('string objid given, but no values map found'); + if (!values.hasOwnProperty(id)) return this.reporter.error('objid not found in values map'); + id = values[id].split(/[\s.]+/g); + for (let i = 0; i < id.length; i++) id[i] |= 0; + } else if (Array.isArray(id)) { + id = id.slice(); + for (let i = 0; i < id.length; i++) id[i] |= 0; + } + if (!Array.isArray(id)) { + return this.reporter.error('objid() should be either array or string, ' + 'got: ' + JSON.stringify(id)); + } + if (!relative) { + if (id[1] >= 40) return this.reporter.error('Second objid identifier OOB'); + id.splice(0, 2, id[0] * 40 + id[1]); + } + + // Count number of octets + let size = 0; + for (let i = 0; i < id.length; i++) { + let ident = id[i]; + for (size++; ident >= 0x80; ident >>= 7) size++; + } + const objid = Buffer.alloc(size); + let offset = objid.length - 1; + for (let i = id.length - 1; i >= 0; i--) { + let ident = id[i]; + objid[offset--] = ident & 0x7f; + while ((ident >>= 7) > 0) objid[offset--] = 0x80 | ident & 0x7f; + } + return this._createEncoderBuffer(objid); +}; +function two(num) { + if (num < 10) return '0' + num;else return num; +} +DERNode.prototype._encodeTime = function encodeTime(time, tag) { + let str; + const date = new Date(time); + if (tag === 'gentime') { + str = [two(date.getUTCFullYear()), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join(''); + } else if (tag === 'utctime') { + str = [two(date.getUTCFullYear() % 100), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join(''); + } else { + this.reporter.error('Encoding ' + tag + ' time is not supported yet'); + } + return this._encodeStr(str, 'octstr'); +}; +DERNode.prototype._encodeNull = function encodeNull() { + return this._createEncoderBuffer(''); +}; +DERNode.prototype._encodeInt = function encodeInt(num, values) { + if (typeof num === 'string') { + if (!values) return this.reporter.error('String int or enum given, but no values map'); + if (!values.hasOwnProperty(num)) { + return this.reporter.error('Values map doesn\'t contain: ' + JSON.stringify(num)); + } + num = values[num]; + } + + // Bignum, assume big endian + if (typeof num !== 'number' && !Buffer.isBuffer(num)) { + const numArray = num.toArray(); + if (!num.sign && numArray[0] & 0x80) { + numArray.unshift(0); + } + num = Buffer.from(numArray); + } + if (Buffer.isBuffer(num)) { + let size = num.length; + if (num.length === 0) size++; + const out = Buffer.alloc(size); + num.copy(out); + if (num.length === 0) out[0] = 0; + return this._createEncoderBuffer(out); + } + if (num < 0x80) return this._createEncoderBuffer(num); + if (num < 0x100) return this._createEncoderBuffer([0, num]); + let size = 1; + for (let i = num; i >= 0x100; i >>= 8) size++; + const out = new Array(size); + for (let i = out.length - 1; i >= 0; i--) { + out[i] = num & 0xff; + num >>= 8; + } + if (out[0] & 0x80) { + out.unshift(0); + } + return this._createEncoderBuffer(Buffer.from(out)); +}; +DERNode.prototype._encodeBool = function encodeBool(value) { + return this._createEncoderBuffer(value ? 0xff : 0); +}; +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') entity = entity(obj); + return entity._getEncoder('der').tree; +}; +DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { + const state = this._baseState; + let i; + if (state['default'] === null) return false; + const data = dataBuffer.join(); + if (state.defaultBuffer === undefined) state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); + if (data.length !== state.defaultBuffer.length) return false; + for (i = 0; i < data.length; i++) if (data[i] !== state.defaultBuffer[i]) return false; + return true; +}; + +// Utility methods + +function encodeTag(tag, primitive, cls, reporter) { + let res; + if (tag === 'seqof') tag = 'seq';else if (tag === 'setof') tag = 'set'; + if (der.tagByName.hasOwnProperty(tag)) res = der.tagByName[tag];else if (typeof tag === 'number' && (tag | 0) === tag) res = tag;else return reporter.error('Unknown tag: ' + tag); + if (res >= 0x1f) return reporter.error('Multi-octet tag encoding unsupported'); + if (!primitive) res |= 0x20; + res |= der.tagClassByName[cls || 'universal'] << 6; + return res; +} + +},{"../base/node":174,"../constants/der":176,"inherits":279,"safer-buffer":333}],182:[function(require,module,exports){ +'use strict'; + +const encoders = exports; +encoders.der = require('./der'); +encoders.pem = require('./pem'); + +},{"./der":181,"./pem":183}],183:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const DEREncoder = require('./der'); +function PEMEncoder(entity) { + DEREncoder.call(this, entity); + this.enc = 'pem'; +} +inherits(PEMEncoder, DEREncoder); +module.exports = PEMEncoder; +PEMEncoder.prototype.encode = function encode(data, options) { + const buf = DEREncoder.prototype.encode.call(this, data); + const p = buf.toString('base64'); + const out = ['-----BEGIN ' + options.label + '-----']; + for (let i = 0; i < p.length; i += 64) out.push(p.slice(i, i + 64)); + out.push('-----END ' + options.label + '-----'); + return out.join('\n'); +}; + +},{"./der":181,"inherits":279}],184:[function(require,module,exports){ +"use strict"; + +(function (module, exports) { + 'use strict'; + + // Utils + function assert(val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN(number, base, endian) { + if (BN.isBN(number)) { + return number; + } + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + BN.BN = BN; + BN.wordSize = 26; + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = require('buffer').Buffer; + } + } catch (e) {} + BN.isBN = function isBN(num) { + if (num instanceof BN) { + return true; + } + return num !== null && typeof num === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + BN.max = function max(left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + BN.min = function min(left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + BN.prototype._init = function init(number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); + } + } + } + }; + BN.prototype._initNumber = function _initNumber(number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [number & 0x3ffffff]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1]; + this.length = 3; + } + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + BN.prototype._initArray = function _initArray(number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [0]; + this.length = 1; + return this; + } + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | number[i - 1] << 8 | number[i - 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | number[i + 1] << 8 | number[i + 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this.strip(); + }; + function parseHex4Bits(string, index) { + var c = string.charCodeAt(index); + // 'A' - 'F' + if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return c - 48 & 0xf; + } + } + function parseHexByte(string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + BN.prototype._parseHex = function _parseHex(number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } + this.strip(); + }; + function parseBase(str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + BN.prototype._parseBase = function _parseBase(number, base, start) { + // Initialize as zero + this.words = [0]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = limbPow / base | 0; + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + for (i = 0; i < mod; i++) { + pow *= base; + } + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + this.strip(); + }; + BN.prototype.copy = function copy(dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + BN.prototype.clone = function clone() { + var r = new BN(null); + this.copy(r); + return r; + }; + BN.prototype._expand = function _expand(size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip() { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + BN.prototype._normSign = function _normSign() { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + BN.prototype.inspect = function inspect() { + return (this.red ? ''; + }; + + /* + var zeros = []; + var groupSizes = []; + var groupBases = []; + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + */ + + var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000']; + var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]; + var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176]; + BN.prototype.toString = function toString(base, padding) { + base = base || 10; + padding = padding | 0 || 1; + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = ((w << off | carry) & 0xffffff).toString(16); + carry = w >>> 24 - off & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + assert(false, 'Base should be between 2 and 36'); + }; + BN.prototype.toNumber = function toNumber() { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + this.words[1] * 0x4000000; + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return this.negative !== 0 ? -ret : ret; + }; + BN.prototype.toJSON = function toJSON() { + return this.toString(16); + }; + BN.prototype.toBuffer = function toBuffer(endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + BN.prototype.toArray = function toArray(endian, length) { + return this.toArrayLike(Array, endian, length); + }; + BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + res[i] = b; + } + for (; i < reqLength; i++) { + res[i] = 0; + } + } + return res; + }; + if (Math.clz32) { + BN.prototype._countBits = function _countBits(w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits(w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + BN.prototype._zeroBits = function _zeroBits(w) { + // Short-cut + if (w === 0) return 26; + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength() { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + function toBitArray(num) { + var w = new Array(num.bitLength()); + for (var bit = 0; bit < w.length; bit++) { + var off = bit / 26 | 0; + var wbit = bit % 26; + w[bit] = (num.words[off] & 1 << wbit) >>> wbit; + } + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits() { + if (this.isZero()) return 0; + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + BN.prototype.byteLength = function byteLength() { + return Math.ceil(this.bitLength() / 8); + }; + BN.prototype.toTwos = function toTwos(width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + BN.prototype.fromTwos = function fromTwos(width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + BN.prototype.isNeg = function isNeg() { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg() { + return this.clone().ineg(); + }; + BN.prototype.ineg = function ineg() { + if (!this.isZero()) { + this.negative ^= 1; + } + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor(num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + return this.strip(); + }; + BN.prototype.ior = function ior(num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or(num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + BN.prototype.uor = function uor(num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand(num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + this.length = b.length; + return this.strip(); + }; + BN.prototype.iand = function iand(num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and(num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + BN.prototype.uand = function uand(num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor(num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + this.length = a.length; + return this.strip(); + }; + BN.prototype.ixor = function ixor(num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor(num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + BN.prototype.uxor = function uxor(num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn(width) { + assert(typeof width === 'number' && width >= 0); + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft; + } + + // And remove leading zeroes + return this.strip(); + }; + BN.prototype.notn = function notn(width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn(bit, val) { + assert(typeof bit === 'number' && bit >= 0); + var off = bit / 26 | 0; + var wbit = bit % 26; + this._expand(off + 1); + if (val) { + this.words[off] = this.words[off] | 1 << wbit; + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd(num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add(num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + if (this.length > num.length) return this.clone().iadd(num); + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub(num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + this.length = Math.max(this.length, i); + if (a !== this) { + this.negative = 1; + } + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub(num) { + return this.clone().isub(num); + }; + function smallMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + var len = self.length + num.length | 0; + out.length = len; + len = len - 1 | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + var carry = r / 0x4000000 | 0; + out.words[0] = lo; + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += r / 0x4000000 | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo(self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = mid + Math.imul(ah0, bl0) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = mid + Math.imul(ah1, bl0) | 0; + hi = Math.imul(ah1, bh0); + lo = lo + Math.imul(al0, bl1) | 0; + mid = mid + Math.imul(al0, bh1) | 0; + mid = mid + Math.imul(ah0, bl1) | 0; + hi = hi + Math.imul(ah0, bh1) | 0; + var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = mid + Math.imul(ah2, bl0) | 0; + hi = Math.imul(ah2, bh0); + lo = lo + Math.imul(al1, bl1) | 0; + mid = mid + Math.imul(al1, bh1) | 0; + mid = mid + Math.imul(ah1, bl1) | 0; + hi = hi + Math.imul(ah1, bh1) | 0; + lo = lo + Math.imul(al0, bl2) | 0; + mid = mid + Math.imul(al0, bh2) | 0; + mid = mid + Math.imul(ah0, bl2) | 0; + hi = hi + Math.imul(ah0, bh2) | 0; + var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = mid + Math.imul(ah3, bl0) | 0; + hi = Math.imul(ah3, bh0); + lo = lo + Math.imul(al2, bl1) | 0; + mid = mid + Math.imul(al2, bh1) | 0; + mid = mid + Math.imul(ah2, bl1) | 0; + hi = hi + Math.imul(ah2, bh1) | 0; + lo = lo + Math.imul(al1, bl2) | 0; + mid = mid + Math.imul(al1, bh2) | 0; + mid = mid + Math.imul(ah1, bl2) | 0; + hi = hi + Math.imul(ah1, bh2) | 0; + lo = lo + Math.imul(al0, bl3) | 0; + mid = mid + Math.imul(al0, bh3) | 0; + mid = mid + Math.imul(ah0, bl3) | 0; + hi = hi + Math.imul(ah0, bh3) | 0; + var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = mid + Math.imul(ah4, bl0) | 0; + hi = Math.imul(ah4, bh0); + lo = lo + Math.imul(al3, bl1) | 0; + mid = mid + Math.imul(al3, bh1) | 0; + mid = mid + Math.imul(ah3, bl1) | 0; + hi = hi + Math.imul(ah3, bh1) | 0; + lo = lo + Math.imul(al2, bl2) | 0; + mid = mid + Math.imul(al2, bh2) | 0; + mid = mid + Math.imul(ah2, bl2) | 0; + hi = hi + Math.imul(ah2, bh2) | 0; + lo = lo + Math.imul(al1, bl3) | 0; + mid = mid + Math.imul(al1, bh3) | 0; + mid = mid + Math.imul(ah1, bl3) | 0; + hi = hi + Math.imul(ah1, bh3) | 0; + lo = lo + Math.imul(al0, bl4) | 0; + mid = mid + Math.imul(al0, bh4) | 0; + mid = mid + Math.imul(ah0, bl4) | 0; + hi = hi + Math.imul(ah0, bh4) | 0; + var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = mid + Math.imul(ah5, bl0) | 0; + hi = Math.imul(ah5, bh0); + lo = lo + Math.imul(al4, bl1) | 0; + mid = mid + Math.imul(al4, bh1) | 0; + mid = mid + Math.imul(ah4, bl1) | 0; + hi = hi + Math.imul(ah4, bh1) | 0; + lo = lo + Math.imul(al3, bl2) | 0; + mid = mid + Math.imul(al3, bh2) | 0; + mid = mid + Math.imul(ah3, bl2) | 0; + hi = hi + Math.imul(ah3, bh2) | 0; + lo = lo + Math.imul(al2, bl3) | 0; + mid = mid + Math.imul(al2, bh3) | 0; + mid = mid + Math.imul(ah2, bl3) | 0; + hi = hi + Math.imul(ah2, bh3) | 0; + lo = lo + Math.imul(al1, bl4) | 0; + mid = mid + Math.imul(al1, bh4) | 0; + mid = mid + Math.imul(ah1, bl4) | 0; + hi = hi + Math.imul(ah1, bh4) | 0; + lo = lo + Math.imul(al0, bl5) | 0; + mid = mid + Math.imul(al0, bh5) | 0; + mid = mid + Math.imul(ah0, bl5) | 0; + hi = hi + Math.imul(ah0, bh5) | 0; + var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = mid + Math.imul(ah6, bl0) | 0; + hi = Math.imul(ah6, bh0); + lo = lo + Math.imul(al5, bl1) | 0; + mid = mid + Math.imul(al5, bh1) | 0; + mid = mid + Math.imul(ah5, bl1) | 0; + hi = hi + Math.imul(ah5, bh1) | 0; + lo = lo + Math.imul(al4, bl2) | 0; + mid = mid + Math.imul(al4, bh2) | 0; + mid = mid + Math.imul(ah4, bl2) | 0; + hi = hi + Math.imul(ah4, bh2) | 0; + lo = lo + Math.imul(al3, bl3) | 0; + mid = mid + Math.imul(al3, bh3) | 0; + mid = mid + Math.imul(ah3, bl3) | 0; + hi = hi + Math.imul(ah3, bh3) | 0; + lo = lo + Math.imul(al2, bl4) | 0; + mid = mid + Math.imul(al2, bh4) | 0; + mid = mid + Math.imul(ah2, bl4) | 0; + hi = hi + Math.imul(ah2, bh4) | 0; + lo = lo + Math.imul(al1, bl5) | 0; + mid = mid + Math.imul(al1, bh5) | 0; + mid = mid + Math.imul(ah1, bl5) | 0; + hi = hi + Math.imul(ah1, bh5) | 0; + lo = lo + Math.imul(al0, bl6) | 0; + mid = mid + Math.imul(al0, bh6) | 0; + mid = mid + Math.imul(ah0, bl6) | 0; + hi = hi + Math.imul(ah0, bh6) | 0; + var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = mid + Math.imul(ah7, bl0) | 0; + hi = Math.imul(ah7, bh0); + lo = lo + Math.imul(al6, bl1) | 0; + mid = mid + Math.imul(al6, bh1) | 0; + mid = mid + Math.imul(ah6, bl1) | 0; + hi = hi + Math.imul(ah6, bh1) | 0; + lo = lo + Math.imul(al5, bl2) | 0; + mid = mid + Math.imul(al5, bh2) | 0; + mid = mid + Math.imul(ah5, bl2) | 0; + hi = hi + Math.imul(ah5, bh2) | 0; + lo = lo + Math.imul(al4, bl3) | 0; + mid = mid + Math.imul(al4, bh3) | 0; + mid = mid + Math.imul(ah4, bl3) | 0; + hi = hi + Math.imul(ah4, bh3) | 0; + lo = lo + Math.imul(al3, bl4) | 0; + mid = mid + Math.imul(al3, bh4) | 0; + mid = mid + Math.imul(ah3, bl4) | 0; + hi = hi + Math.imul(ah3, bh4) | 0; + lo = lo + Math.imul(al2, bl5) | 0; + mid = mid + Math.imul(al2, bh5) | 0; + mid = mid + Math.imul(ah2, bl5) | 0; + hi = hi + Math.imul(ah2, bh5) | 0; + lo = lo + Math.imul(al1, bl6) | 0; + mid = mid + Math.imul(al1, bh6) | 0; + mid = mid + Math.imul(ah1, bl6) | 0; + hi = hi + Math.imul(ah1, bh6) | 0; + lo = lo + Math.imul(al0, bl7) | 0; + mid = mid + Math.imul(al0, bh7) | 0; + mid = mid + Math.imul(ah0, bl7) | 0; + hi = hi + Math.imul(ah0, bh7) | 0; + var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = mid + Math.imul(ah8, bl0) | 0; + hi = Math.imul(ah8, bh0); + lo = lo + Math.imul(al7, bl1) | 0; + mid = mid + Math.imul(al7, bh1) | 0; + mid = mid + Math.imul(ah7, bl1) | 0; + hi = hi + Math.imul(ah7, bh1) | 0; + lo = lo + Math.imul(al6, bl2) | 0; + mid = mid + Math.imul(al6, bh2) | 0; + mid = mid + Math.imul(ah6, bl2) | 0; + hi = hi + Math.imul(ah6, bh2) | 0; + lo = lo + Math.imul(al5, bl3) | 0; + mid = mid + Math.imul(al5, bh3) | 0; + mid = mid + Math.imul(ah5, bl3) | 0; + hi = hi + Math.imul(ah5, bh3) | 0; + lo = lo + Math.imul(al4, bl4) | 0; + mid = mid + Math.imul(al4, bh4) | 0; + mid = mid + Math.imul(ah4, bl4) | 0; + hi = hi + Math.imul(ah4, bh4) | 0; + lo = lo + Math.imul(al3, bl5) | 0; + mid = mid + Math.imul(al3, bh5) | 0; + mid = mid + Math.imul(ah3, bl5) | 0; + hi = hi + Math.imul(ah3, bh5) | 0; + lo = lo + Math.imul(al2, bl6) | 0; + mid = mid + Math.imul(al2, bh6) | 0; + mid = mid + Math.imul(ah2, bl6) | 0; + hi = hi + Math.imul(ah2, bh6) | 0; + lo = lo + Math.imul(al1, bl7) | 0; + mid = mid + Math.imul(al1, bh7) | 0; + mid = mid + Math.imul(ah1, bl7) | 0; + hi = hi + Math.imul(ah1, bh7) | 0; + lo = lo + Math.imul(al0, bl8) | 0; + mid = mid + Math.imul(al0, bh8) | 0; + mid = mid + Math.imul(ah0, bl8) | 0; + hi = hi + Math.imul(ah0, bh8) | 0; + var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = mid + Math.imul(ah9, bl0) | 0; + hi = Math.imul(ah9, bh0); + lo = lo + Math.imul(al8, bl1) | 0; + mid = mid + Math.imul(al8, bh1) | 0; + mid = mid + Math.imul(ah8, bl1) | 0; + hi = hi + Math.imul(ah8, bh1) | 0; + lo = lo + Math.imul(al7, bl2) | 0; + mid = mid + Math.imul(al7, bh2) | 0; + mid = mid + Math.imul(ah7, bl2) | 0; + hi = hi + Math.imul(ah7, bh2) | 0; + lo = lo + Math.imul(al6, bl3) | 0; + mid = mid + Math.imul(al6, bh3) | 0; + mid = mid + Math.imul(ah6, bl3) | 0; + hi = hi + Math.imul(ah6, bh3) | 0; + lo = lo + Math.imul(al5, bl4) | 0; + mid = mid + Math.imul(al5, bh4) | 0; + mid = mid + Math.imul(ah5, bl4) | 0; + hi = hi + Math.imul(ah5, bh4) | 0; + lo = lo + Math.imul(al4, bl5) | 0; + mid = mid + Math.imul(al4, bh5) | 0; + mid = mid + Math.imul(ah4, bl5) | 0; + hi = hi + Math.imul(ah4, bh5) | 0; + lo = lo + Math.imul(al3, bl6) | 0; + mid = mid + Math.imul(al3, bh6) | 0; + mid = mid + Math.imul(ah3, bl6) | 0; + hi = hi + Math.imul(ah3, bh6) | 0; + lo = lo + Math.imul(al2, bl7) | 0; + mid = mid + Math.imul(al2, bh7) | 0; + mid = mid + Math.imul(ah2, bl7) | 0; + hi = hi + Math.imul(ah2, bh7) | 0; + lo = lo + Math.imul(al1, bl8) | 0; + mid = mid + Math.imul(al1, bh8) | 0; + mid = mid + Math.imul(ah1, bl8) | 0; + hi = hi + Math.imul(ah1, bh8) | 0; + lo = lo + Math.imul(al0, bl9) | 0; + mid = mid + Math.imul(al0, bh9) | 0; + mid = mid + Math.imul(ah0, bl9) | 0; + hi = hi + Math.imul(ah0, bh9) | 0; + var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = mid + Math.imul(ah9, bl1) | 0; + hi = Math.imul(ah9, bh1); + lo = lo + Math.imul(al8, bl2) | 0; + mid = mid + Math.imul(al8, bh2) | 0; + mid = mid + Math.imul(ah8, bl2) | 0; + hi = hi + Math.imul(ah8, bh2) | 0; + lo = lo + Math.imul(al7, bl3) | 0; + mid = mid + Math.imul(al7, bh3) | 0; + mid = mid + Math.imul(ah7, bl3) | 0; + hi = hi + Math.imul(ah7, bh3) | 0; + lo = lo + Math.imul(al6, bl4) | 0; + mid = mid + Math.imul(al6, bh4) | 0; + mid = mid + Math.imul(ah6, bl4) | 0; + hi = hi + Math.imul(ah6, bh4) | 0; + lo = lo + Math.imul(al5, bl5) | 0; + mid = mid + Math.imul(al5, bh5) | 0; + mid = mid + Math.imul(ah5, bl5) | 0; + hi = hi + Math.imul(ah5, bh5) | 0; + lo = lo + Math.imul(al4, bl6) | 0; + mid = mid + Math.imul(al4, bh6) | 0; + mid = mid + Math.imul(ah4, bl6) | 0; + hi = hi + Math.imul(ah4, bh6) | 0; + lo = lo + Math.imul(al3, bl7) | 0; + mid = mid + Math.imul(al3, bh7) | 0; + mid = mid + Math.imul(ah3, bl7) | 0; + hi = hi + Math.imul(ah3, bh7) | 0; + lo = lo + Math.imul(al2, bl8) | 0; + mid = mid + Math.imul(al2, bh8) | 0; + mid = mid + Math.imul(ah2, bl8) | 0; + hi = hi + Math.imul(ah2, bh8) | 0; + lo = lo + Math.imul(al1, bl9) | 0; + mid = mid + Math.imul(al1, bh9) | 0; + mid = mid + Math.imul(ah1, bl9) | 0; + hi = hi + Math.imul(ah1, bh9) | 0; + var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = mid + Math.imul(ah9, bl2) | 0; + hi = Math.imul(ah9, bh2); + lo = lo + Math.imul(al8, bl3) | 0; + mid = mid + Math.imul(al8, bh3) | 0; + mid = mid + Math.imul(ah8, bl3) | 0; + hi = hi + Math.imul(ah8, bh3) | 0; + lo = lo + Math.imul(al7, bl4) | 0; + mid = mid + Math.imul(al7, bh4) | 0; + mid = mid + Math.imul(ah7, bl4) | 0; + hi = hi + Math.imul(ah7, bh4) | 0; + lo = lo + Math.imul(al6, bl5) | 0; + mid = mid + Math.imul(al6, bh5) | 0; + mid = mid + Math.imul(ah6, bl5) | 0; + hi = hi + Math.imul(ah6, bh5) | 0; + lo = lo + Math.imul(al5, bl6) | 0; + mid = mid + Math.imul(al5, bh6) | 0; + mid = mid + Math.imul(ah5, bl6) | 0; + hi = hi + Math.imul(ah5, bh6) | 0; + lo = lo + Math.imul(al4, bl7) | 0; + mid = mid + Math.imul(al4, bh7) | 0; + mid = mid + Math.imul(ah4, bl7) | 0; + hi = hi + Math.imul(ah4, bh7) | 0; + lo = lo + Math.imul(al3, bl8) | 0; + mid = mid + Math.imul(al3, bh8) | 0; + mid = mid + Math.imul(ah3, bl8) | 0; + hi = hi + Math.imul(ah3, bh8) | 0; + lo = lo + Math.imul(al2, bl9) | 0; + mid = mid + Math.imul(al2, bh9) | 0; + mid = mid + Math.imul(ah2, bl9) | 0; + hi = hi + Math.imul(ah2, bh9) | 0; + var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = mid + Math.imul(ah9, bl3) | 0; + hi = Math.imul(ah9, bh3); + lo = lo + Math.imul(al8, bl4) | 0; + mid = mid + Math.imul(al8, bh4) | 0; + mid = mid + Math.imul(ah8, bl4) | 0; + hi = hi + Math.imul(ah8, bh4) | 0; + lo = lo + Math.imul(al7, bl5) | 0; + mid = mid + Math.imul(al7, bh5) | 0; + mid = mid + Math.imul(ah7, bl5) | 0; + hi = hi + Math.imul(ah7, bh5) | 0; + lo = lo + Math.imul(al6, bl6) | 0; + mid = mid + Math.imul(al6, bh6) | 0; + mid = mid + Math.imul(ah6, bl6) | 0; + hi = hi + Math.imul(ah6, bh6) | 0; + lo = lo + Math.imul(al5, bl7) | 0; + mid = mid + Math.imul(al5, bh7) | 0; + mid = mid + Math.imul(ah5, bl7) | 0; + hi = hi + Math.imul(ah5, bh7) | 0; + lo = lo + Math.imul(al4, bl8) | 0; + mid = mid + Math.imul(al4, bh8) | 0; + mid = mid + Math.imul(ah4, bl8) | 0; + hi = hi + Math.imul(ah4, bh8) | 0; + lo = lo + Math.imul(al3, bl9) | 0; + mid = mid + Math.imul(al3, bh9) | 0; + mid = mid + Math.imul(ah3, bl9) | 0; + hi = hi + Math.imul(ah3, bh9) | 0; + var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = mid + Math.imul(ah9, bl4) | 0; + hi = Math.imul(ah9, bh4); + lo = lo + Math.imul(al8, bl5) | 0; + mid = mid + Math.imul(al8, bh5) | 0; + mid = mid + Math.imul(ah8, bl5) | 0; + hi = hi + Math.imul(ah8, bh5) | 0; + lo = lo + Math.imul(al7, bl6) | 0; + mid = mid + Math.imul(al7, bh6) | 0; + mid = mid + Math.imul(ah7, bl6) | 0; + hi = hi + Math.imul(ah7, bh6) | 0; + lo = lo + Math.imul(al6, bl7) | 0; + mid = mid + Math.imul(al6, bh7) | 0; + mid = mid + Math.imul(ah6, bl7) | 0; + hi = hi + Math.imul(ah6, bh7) | 0; + lo = lo + Math.imul(al5, bl8) | 0; + mid = mid + Math.imul(al5, bh8) | 0; + mid = mid + Math.imul(ah5, bl8) | 0; + hi = hi + Math.imul(ah5, bh8) | 0; + lo = lo + Math.imul(al4, bl9) | 0; + mid = mid + Math.imul(al4, bh9) | 0; + mid = mid + Math.imul(ah4, bl9) | 0; + hi = hi + Math.imul(ah4, bh9) | 0; + var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = mid + Math.imul(ah9, bl5) | 0; + hi = Math.imul(ah9, bh5); + lo = lo + Math.imul(al8, bl6) | 0; + mid = mid + Math.imul(al8, bh6) | 0; + mid = mid + Math.imul(ah8, bl6) | 0; + hi = hi + Math.imul(ah8, bh6) | 0; + lo = lo + Math.imul(al7, bl7) | 0; + mid = mid + Math.imul(al7, bh7) | 0; + mid = mid + Math.imul(ah7, bl7) | 0; + hi = hi + Math.imul(ah7, bh7) | 0; + lo = lo + Math.imul(al6, bl8) | 0; + mid = mid + Math.imul(al6, bh8) | 0; + mid = mid + Math.imul(ah6, bl8) | 0; + hi = hi + Math.imul(ah6, bh8) | 0; + lo = lo + Math.imul(al5, bl9) | 0; + mid = mid + Math.imul(al5, bh9) | 0; + mid = mid + Math.imul(ah5, bl9) | 0; + hi = hi + Math.imul(ah5, bh9) | 0; + var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = mid + Math.imul(ah9, bl6) | 0; + hi = Math.imul(ah9, bh6); + lo = lo + Math.imul(al8, bl7) | 0; + mid = mid + Math.imul(al8, bh7) | 0; + mid = mid + Math.imul(ah8, bl7) | 0; + hi = hi + Math.imul(ah8, bh7) | 0; + lo = lo + Math.imul(al7, bl8) | 0; + mid = mid + Math.imul(al7, bh8) | 0; + mid = mid + Math.imul(ah7, bl8) | 0; + hi = hi + Math.imul(ah7, bh8) | 0; + lo = lo + Math.imul(al6, bl9) | 0; + mid = mid + Math.imul(al6, bh9) | 0; + mid = mid + Math.imul(ah6, bl9) | 0; + hi = hi + Math.imul(ah6, bh9) | 0; + var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = mid + Math.imul(ah9, bl7) | 0; + hi = Math.imul(ah9, bh7); + lo = lo + Math.imul(al8, bl8) | 0; + mid = mid + Math.imul(al8, bh8) | 0; + mid = mid + Math.imul(ah8, bl8) | 0; + hi = hi + Math.imul(ah8, bh8) | 0; + lo = lo + Math.imul(al7, bl9) | 0; + mid = mid + Math.imul(al7, bh9) | 0; + mid = mid + Math.imul(ah7, bl9) | 0; + hi = hi + Math.imul(ah7, bh9) | 0; + var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = mid + Math.imul(ah9, bl8) | 0; + hi = Math.imul(ah9, bh8); + lo = lo + Math.imul(al8, bl9) | 0; + mid = mid + Math.imul(al8, bh9) | 0; + mid = mid + Math.imul(ah8, bl9) | 0; + hi = hi + Math.imul(ah8, bh9) | 0; + var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = mid + Math.imul(ah9, bl9) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + function bigMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + ncarry = ncarry + (r / 0x4000000 | 0) | 0; + lo = lo + rword | 0; + rword = lo & 0x3ffffff; + ncarry = ncarry + (lo >>> 26) | 0; + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + return out.strip(); + } + function jumboMulTo(self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + BN.prototype.mulTo = function mulTo(num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM(x, y) { + this.x = x; + this.y = y; + } + FFTM.prototype.makeRBT = function makeRBT(N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin(x, l, N) { + if (x === 0 || x === N - 1) return x; + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << l - i - 1; + x >>= 1; + } + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + var rx = rtwdf_ * ro - itwdf_ * io; + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + FFTM.prototype.guessLen13b = function guessLen13b(n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + return 1 << i + 1 + odd; + }; + FFTM.prototype.conjugate = function conjugate(rws, iws, N) { + if (N <= 1) return; + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + t = iws[i]; + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + FFTM.prototype.normalize13b = function normalize13b(ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry; + ws[i] = w & 0x3ffffff; + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + return ws; + }; + FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + rws[2 * i] = carry & 0x1fff; + carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; + carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + FFTM.prototype.stub = function stub(N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + return ph; + }; + FFTM.prototype.mulp = function mulp(x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + var rbt = this.makeRBT(N); + var _ = this.stub(N); + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + var rmws = out.words; + rmws.length = N; + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul(num) { + return this.clone().mulTo(num, this); + }; + BN.prototype.imuln = function imuln(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += w / 0x4000000 | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + BN.prototype.muln = function muln(num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr() { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr() { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow(num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + res = res.mul(q); + } + } + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = 0x3ffffff >>> 26 - r << 26 - r; + var i; + if (r !== 0) { + var carry = 0; + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = (this.words[i] | 0) - newCarry << r; + this.words[i] = c | carry; + carry = newCarry >>> 26 - r; + } + if (carry) { + this.words[i] = carry; + this.length++; + } + } + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + this.length += s; + } + return this.strip(); + }; + BN.prototype.ishln = function ishln(bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn(bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - hint % 26) / 26; + } else { + h = 0; + } + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + var maskedWords = extended; + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = carry << 26 - r | word >>> r; + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + return this.strip(); + }; + BN.prototype.ishrn = function ishrn(bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln(bits) { + return this.clone().ishln(bits); + }; + BN.prototype.ushln = function ushln(bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn(bits) { + return this.clone().ishrn(bits); + }; + BN.prototype.ushrn = function ushrn(bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn(bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + assert(this.negative === 0, 'imaskn works only with positive numbers'); + if (this.length <= s) { + return this; + } + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + if (r !== 0) { + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + this.words[this.length - 1] &= mask; + } + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn(bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + BN.prototype._iaddn = function _iaddn(num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + this.words[0] -= num; + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + return this.strip(); + }; + BN.prototype.addn = function addn(num) { + return this.clone().iaddn(num); + }; + BN.prototype.subn = function subn(num) { + return this.clone().isubn(num); + }; + BN.prototype.iabs = function iabs() { + this.negative = 0; + return this; + }; + BN.prototype.abs = function abs() { + return this.clone().iabs(); + }; + BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) { + var len = num.length + shift; + var i; + this._expand(len); + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - (right / 0x4000000 | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + return this.strip(); + }; + BN.prototype._wordDiv = function _wordDiv(num, mode) { + var shift = this.length - num.length; + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min(qj / bhi | 0, 0x3ffffff); + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod(num, mode, positive) { + assert(!num.isZero()); + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + if (mode !== 'mod') { + div = res.div.neg(); + } + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + return { + div: div, + mod: mod + }; + } + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + if (mode !== 'mod') { + div = res.div.neg(); + } + return { + div: div, + mod: res.mod + }; + } + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div(num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod(num) { + return this.divmod(num, 'mod', false).mod; + }; + BN.prototype.umod = function umod(num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound(num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + BN.prototype.modn = function modn(num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn(num) { + assert(num <= 0x3ffffff); + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = w / num | 0; + carry = w % num; + } + return this.strip(); + }; + BN.prototype.divn = function divn(num) { + return this.clone().idivn(num); + }; + BN.prototype.egcd = function egcd(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var x = this; + var y = p.clone(); + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + var g = 0; + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + var yp = y.clone(); + var xp = x.clone(); + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + A.iushrn(1); + B.iushrn(1); + } + } + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + C.iushrn(1); + D.iushrn(1); + } + } + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var a = this; + var b = p.clone(); + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + var x1 = new BN(1); + var x2 = new BN(0); + var delta = b.clone(); + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + x1.iushrn(1); + } + } + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + x2.iushrn(1); + } + } + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + if (res.cmpn(0) < 0) { + res.iadd(p); + } + return res; + }; + BN.prototype.gcd = function gcd(num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + a.isub(b); + } while (true); + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm(num) { + return this.egcd(num).a.umod(num); + }; + BN.prototype.isEven = function isEven() { + return (this.words[0] & 1) === 0; + }; + BN.prototype.isOdd = function isOdd() { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln(num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn(bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + BN.prototype.isZero = function isZero() { + return this.length === 1 && this.words[0] === 0; + }; + BN.prototype.cmpn = function cmpn(num) { + var negative = num < 0; + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + this.strip(); + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + assert(num <= 0x3ffffff, 'Number is too big'); + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp(num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp(num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + BN.prototype.gtn = function gtn(num) { + return this.cmpn(num) === 1; + }; + BN.prototype.gt = function gt(num) { + return this.cmp(num) === 1; + }; + BN.prototype.gten = function gten(num) { + return this.cmpn(num) >= 0; + }; + BN.prototype.gte = function gte(num) { + return this.cmp(num) >= 0; + }; + BN.prototype.ltn = function ltn(num) { + return this.cmpn(num) === -1; + }; + BN.prototype.lt = function lt(num) { + return this.cmp(num) === -1; + }; + BN.prototype.lten = function lten(num) { + return this.cmpn(num) <= 0; + }; + BN.prototype.lte = function lte(num) { + return this.cmp(num) <= 0; + }; + BN.prototype.eqn = function eqn(num) { + return this.cmpn(num) === 0; + }; + BN.prototype.eq = function eq(num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red(num) { + return new Red(num); + }; + BN.prototype.toRed = function toRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + BN.prototype.fromRed = function fromRed() { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + BN.prototype._forceRed = function _forceRed(ctx) { + this.red = ctx; + return this; + }; + BN.prototype.forceRed = function forceRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + BN.prototype.redAdd = function redAdd(num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + BN.prototype.redIAdd = function redIAdd(num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + BN.prototype.redSub = function redSub(num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + BN.prototype.redISub = function redISub(num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + BN.prototype.redShl = function redShl(num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + BN.prototype.redMul = function redMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + BN.prototype.redIMul = function redIMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + BN.prototype.redSqr = function redSqr() { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + BN.prototype.redISqr = function redISqr() { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt() { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + BN.prototype.redInvm = function redInvm() { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg() { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + BN.prototype.redPow = function redPow(num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime(name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + this.tmp = this._tmp(); + } + MPrime.prototype._tmp = function _tmp() { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + MPrime.prototype.ireduce = function ireduce(num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is BN v4 instance + r.strip(); + } else { + // r is BN v5 instance + r._strip(); + } + } + return r; + }; + MPrime.prototype.split = function split(input, out) { + input.iushrn(this.n, 0, out); + }; + MPrime.prototype.imulK = function imulK(num) { + return num.imul(this.k); + }; + function K256() { + MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + K256.prototype.split = function split(input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = (next & mask) << 4 | prev >>> 22; + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + K256.prototype.imulK = function imulK(num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + (lo / 0x4000000 | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + function P224() { + MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + function P192() { + MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + function P25519() { + // 2 ^ 255 - 19 + MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + P25519.prototype.imulK = function imulK(num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime(name) { + // Cached version of prime + if (primes[name]) return primes[name]; + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + return prime; + }; + + // + // Base reduction engine + // + function Red(m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + Red.prototype._verify1 = function _verify1(a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + Red.prototype._verify2 = function _verify2(a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, 'red works only with red numbers'); + }; + Red.prototype.imod = function imod(a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + Red.prototype.neg = function neg(a) { + if (a.isZero()) { + return a.clone(); + } + return this.m.sub(a)._forceRed(this); + }; + Red.prototype.add = function add(a, b) { + this._verify2(a, b); + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + Red.prototype.iadd = function iadd(a, b) { + this._verify2(a, b); + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + Red.prototype.sub = function sub(a, b) { + this._verify2(a, b); + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + Red.prototype.isub = function isub(a, b) { + this._verify2(a, b); + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + Red.prototype.shl = function shl(a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + Red.prototype.imul = function imul(a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + Red.prototype.mul = function mul(a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + Red.prototype.isqr = function isqr(a) { + return this.imul(a, a.clone()); + }; + Red.prototype.sqr = function sqr(a) { + return this.mul(a, a); + }; + Red.prototype.sqrt = function sqrt(a) { + if (a.isZero()) return a.clone(); + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + return r; + }; + Red.prototype.invm = function invm(a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + Red.prototype.pow = function pow(a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = word >> j & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + return res; + }; + Red.prototype.convertTo = function convertTo(num) { + var r = num.umod(this.m); + return r === num ? r.clone() : r; + }; + Red.prototype.convertFrom = function convertFrom(num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont(num) { + return new Mont(num); + }; + function Mont(m) { + Red.call(this, m); + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - this.shift % 26; + } + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + Mont.prototype.convertTo = function convertTo(num) { + return this.imod(num.ushln(this.shift)); + }; + Mont.prototype.convertFrom = function convertFrom(num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + Mont.prototype.imul = function imul(a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + return res._forceRed(this); + }; + Mont.prototype.mul = function mul(a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + return res._forceRed(this); + }; + Mont.prototype.invm = function invm(a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})(typeof module === 'undefined' || module, void 0); + +},{"buffer":188}],185:[function(require,module,exports){ +'use strict'; + +exports.byteLength = byteLength; +exports.toByteArray = toByteArray; +exports.fromByteArray = fromByteArray; +var lookup = []; +var revLookup = []; +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i]; + revLookup[code.charCodeAt(i)] = i; +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62; +revLookup['_'.charCodeAt(0)] = 63; +function getLens(b64) { + var len = b64.length; + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4'); + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('='); + if (validLen === -1) validLen = len; + var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4; + return [validLen, placeHoldersLen]; +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength(b64) { + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; +} +function _byteLength(b64, validLen, placeHoldersLen) { + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; +} +function toByteArray(b64) { + var tmp; + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); + var curByte = 0; + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 ? validLen - 4 : validLen; + var i; + for (i = 0; i < len; i += 4) { + tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)]; + arr[curByte++] = tmp >> 16 & 0xFF; + arr[curByte++] = tmp >> 8 & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + if (placeHoldersLen === 2) { + tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4; + arr[curByte++] = tmp & 0xFF; + } + if (placeHoldersLen === 1) { + tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2; + arr[curByte++] = tmp >> 8 & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + return arr; +} +function tripletToBase64(num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]; +} +function encodeChunk(uint8, start, end) { + var tmp; + var output = []; + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF); + output.push(tripletToBase64(tmp)); + } + return output.join(''); +} +function fromByteArray(uint8) { + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength)); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1]; + parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '=='); + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1]; + parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '='); + } + return parts.join(''); +} + +},{}],186:[function(require,module,exports){ +"use strict"; + +(function (module, exports) { + 'use strict'; + + // Utils + function assert(val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN(number, base, endian) { + if (BN.isBN(number)) { + return number; + } + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + BN.BN = BN; + BN.wordSize = 26; + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = require('buffer').Buffer; + } + } catch (e) {} + BN.isBN = function isBN(num) { + if (num instanceof BN) { + return true; + } + return num !== null && typeof num === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + BN.max = function max(left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + BN.min = function min(left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + BN.prototype._init = function init(number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); + } + } + } + }; + BN.prototype._initNumber = function _initNumber(number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [number & 0x3ffffff]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1]; + this.length = 3; + } + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + BN.prototype._initArray = function _initArray(number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [0]; + this.length = 1; + return this; + } + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | number[i - 1] << 8 | number[i - 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | number[i + 1] << 8 | number[i + 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this._strip(); + }; + function parseHex4Bits(string, index) { + var c = string.charCodeAt(index); + // '0' - '9' + if (c >= 48 && c <= 57) { + return c - 48; + // 'A' - 'F' + } else if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + } else { + assert(false, 'Invalid character in ' + string); + } + } + function parseHexByte(string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + BN.prototype._parseHex = function _parseHex(number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } + this._strip(); + }; + function parseBase(str, start, end, mul) { + var r = 0; + var b = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + r *= mul; + + // 'a' + if (c >= 49) { + b = c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + b = c - 17 + 0xa; + + // '0' - '9' + } else { + b = c; + } + assert(c >= 0 && b < mul, 'Invalid character'); + r += b; + } + return r; + } + BN.prototype._parseBase = function _parseBase(number, base, start) { + // Initialize as zero + this.words = [0]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = limbPow / base | 0; + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + for (i = 0; i < mod; i++) { + pow *= base; + } + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + this._strip(); + }; + BN.prototype.copy = function copy(dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + function move(dest, src) { + dest.words = src.words; + dest.length = src.length; + dest.negative = src.negative; + dest.red = src.red; + } + BN.prototype._move = function _move(dest) { + move(dest, this); + }; + BN.prototype.clone = function clone() { + var r = new BN(null); + this.copy(r); + return r; + }; + BN.prototype._expand = function _expand(size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype._strip = function strip() { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + BN.prototype._normSign = function _normSign() { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + // Check Symbol.for because not everywhere where Symbol defined + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility + if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') { + try { + BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect; + } catch (e) { + BN.prototype.inspect = inspect; + } + } else { + BN.prototype.inspect = inspect; + } + function inspect() { + return (this.red ? ''; + } + + /* + var zeros = []; + var groupSizes = []; + var groupBases = []; + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + */ + + var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000']; + var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]; + var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176]; + BN.prototype.toString = function toString(base, padding) { + base = base || 10; + padding = padding | 0 || 1; + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = ((w << off | carry) & 0xffffff).toString(16); + carry = w >>> 24 - off & 0xffffff; + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modrn(groupBase).toString(base); + c = c.idivn(groupBase); + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + assert(false, 'Base should be between 2 and 36'); + }; + BN.prototype.toNumber = function toNumber() { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + this.words[1] * 0x4000000; + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return this.negative !== 0 ? -ret : ret; + }; + BN.prototype.toJSON = function toJSON() { + return this.toString(16, 2); + }; + if (Buffer) { + BN.prototype.toBuffer = function toBuffer(endian, length) { + return this.toArrayLike(Buffer, endian, length); + }; + } + BN.prototype.toArray = function toArray(endian, length) { + return this.toArrayLike(Array, endian, length); + }; + var allocate = function allocate(ArrayType, size) { + if (ArrayType.allocUnsafe) { + return ArrayType.allocUnsafe(size); + } + return new ArrayType(size); + }; + BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) { + this._strip(); + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + var res = allocate(ArrayType, reqLength); + var postfix = endian === 'le' ? 'LE' : 'BE'; + this['_toArrayLike' + postfix](res, byteLength); + return res; + }; + BN.prototype._toArrayLikeLE = function _toArrayLikeLE(res, byteLength) { + var position = 0; + var carry = 0; + for (var i = 0, shift = 0; i < this.length; i++) { + var word = this.words[i] << shift | carry; + res[position++] = word & 0xff; + if (position < res.length) { + res[position++] = word >> 8 & 0xff; + } + if (position < res.length) { + res[position++] = word >> 16 & 0xff; + } + if (shift === 6) { + if (position < res.length) { + res[position++] = word >> 24 & 0xff; + } + carry = 0; + shift = 0; + } else { + carry = word >>> 24; + shift += 2; + } + } + if (position < res.length) { + res[position++] = carry; + while (position < res.length) { + res[position++] = 0; + } + } + }; + BN.prototype._toArrayLikeBE = function _toArrayLikeBE(res, byteLength) { + var position = res.length - 1; + var carry = 0; + for (var i = 0, shift = 0; i < this.length; i++) { + var word = this.words[i] << shift | carry; + res[position--] = word & 0xff; + if (position >= 0) { + res[position--] = word >> 8 & 0xff; + } + if (position >= 0) { + res[position--] = word >> 16 & 0xff; + } + if (shift === 6) { + if (position >= 0) { + res[position--] = word >> 24 & 0xff; + } + carry = 0; + shift = 0; + } else { + carry = word >>> 24; + shift += 2; + } + } + if (position >= 0) { + res[position--] = carry; + while (position >= 0) { + res[position--] = 0; + } + } + }; + if (Math.clz32) { + BN.prototype._countBits = function _countBits(w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits(w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + BN.prototype._zeroBits = function _zeroBits(w) { + // Short-cut + if (w === 0) return 26; + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength() { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + function toBitArray(num) { + var w = new Array(num.bitLength()); + for (var bit = 0; bit < w.length; bit++) { + var off = bit / 26 | 0; + var wbit = bit % 26; + w[bit] = num.words[off] >>> wbit & 0x01; + } + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits() { + if (this.isZero()) return 0; + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + BN.prototype.byteLength = function byteLength() { + return Math.ceil(this.bitLength() / 8); + }; + BN.prototype.toTwos = function toTwos(width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + BN.prototype.fromTwos = function fromTwos(width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + BN.prototype.isNeg = function isNeg() { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg() { + return this.clone().ineg(); + }; + BN.prototype.ineg = function ineg() { + if (!this.isZero()) { + this.negative ^= 1; + } + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor(num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + return this._strip(); + }; + BN.prototype.ior = function ior(num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or(num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + BN.prototype.uor = function uor(num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand(num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + this.length = b.length; + return this._strip(); + }; + BN.prototype.iand = function iand(num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and(num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + BN.prototype.uand = function uand(num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor(num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + this.length = a.length; + return this._strip(); + }; + BN.prototype.ixor = function ixor(num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor(num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + BN.prototype.uxor = function uxor(num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn(width) { + assert(typeof width === 'number' && width >= 0); + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft; + } + + // And remove leading zeroes + return this._strip(); + }; + BN.prototype.notn = function notn(width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn(bit, val) { + assert(typeof bit === 'number' && bit >= 0); + var off = bit / 26 | 0; + var wbit = bit % 26; + this._expand(off + 1); + if (val) { + this.words[off] = this.words[off] | 1 << wbit; + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + return this._strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd(num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add(num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + if (this.length > num.length) return this.clone().iadd(num); + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub(num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + this.length = Math.max(this.length, i); + if (a !== this) { + this.negative = 1; + } + return this._strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub(num) { + return this.clone().isub(num); + }; + function smallMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + var len = self.length + num.length | 0; + out.length = len; + len = len - 1 | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + var carry = r / 0x4000000 | 0; + out.words[0] = lo; + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += r / 0x4000000 | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + return out._strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo(self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = mid + Math.imul(ah0, bl0) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = mid + Math.imul(ah1, bl0) | 0; + hi = Math.imul(ah1, bh0); + lo = lo + Math.imul(al0, bl1) | 0; + mid = mid + Math.imul(al0, bh1) | 0; + mid = mid + Math.imul(ah0, bl1) | 0; + hi = hi + Math.imul(ah0, bh1) | 0; + var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = mid + Math.imul(ah2, bl0) | 0; + hi = Math.imul(ah2, bh0); + lo = lo + Math.imul(al1, bl1) | 0; + mid = mid + Math.imul(al1, bh1) | 0; + mid = mid + Math.imul(ah1, bl1) | 0; + hi = hi + Math.imul(ah1, bh1) | 0; + lo = lo + Math.imul(al0, bl2) | 0; + mid = mid + Math.imul(al0, bh2) | 0; + mid = mid + Math.imul(ah0, bl2) | 0; + hi = hi + Math.imul(ah0, bh2) | 0; + var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = mid + Math.imul(ah3, bl0) | 0; + hi = Math.imul(ah3, bh0); + lo = lo + Math.imul(al2, bl1) | 0; + mid = mid + Math.imul(al2, bh1) | 0; + mid = mid + Math.imul(ah2, bl1) | 0; + hi = hi + Math.imul(ah2, bh1) | 0; + lo = lo + Math.imul(al1, bl2) | 0; + mid = mid + Math.imul(al1, bh2) | 0; + mid = mid + Math.imul(ah1, bl2) | 0; + hi = hi + Math.imul(ah1, bh2) | 0; + lo = lo + Math.imul(al0, bl3) | 0; + mid = mid + Math.imul(al0, bh3) | 0; + mid = mid + Math.imul(ah0, bl3) | 0; + hi = hi + Math.imul(ah0, bh3) | 0; + var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = mid + Math.imul(ah4, bl0) | 0; + hi = Math.imul(ah4, bh0); + lo = lo + Math.imul(al3, bl1) | 0; + mid = mid + Math.imul(al3, bh1) | 0; + mid = mid + Math.imul(ah3, bl1) | 0; + hi = hi + Math.imul(ah3, bh1) | 0; + lo = lo + Math.imul(al2, bl2) | 0; + mid = mid + Math.imul(al2, bh2) | 0; + mid = mid + Math.imul(ah2, bl2) | 0; + hi = hi + Math.imul(ah2, bh2) | 0; + lo = lo + Math.imul(al1, bl3) | 0; + mid = mid + Math.imul(al1, bh3) | 0; + mid = mid + Math.imul(ah1, bl3) | 0; + hi = hi + Math.imul(ah1, bh3) | 0; + lo = lo + Math.imul(al0, bl4) | 0; + mid = mid + Math.imul(al0, bh4) | 0; + mid = mid + Math.imul(ah0, bl4) | 0; + hi = hi + Math.imul(ah0, bh4) | 0; + var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = mid + Math.imul(ah5, bl0) | 0; + hi = Math.imul(ah5, bh0); + lo = lo + Math.imul(al4, bl1) | 0; + mid = mid + Math.imul(al4, bh1) | 0; + mid = mid + Math.imul(ah4, bl1) | 0; + hi = hi + Math.imul(ah4, bh1) | 0; + lo = lo + Math.imul(al3, bl2) | 0; + mid = mid + Math.imul(al3, bh2) | 0; + mid = mid + Math.imul(ah3, bl2) | 0; + hi = hi + Math.imul(ah3, bh2) | 0; + lo = lo + Math.imul(al2, bl3) | 0; + mid = mid + Math.imul(al2, bh3) | 0; + mid = mid + Math.imul(ah2, bl3) | 0; + hi = hi + Math.imul(ah2, bh3) | 0; + lo = lo + Math.imul(al1, bl4) | 0; + mid = mid + Math.imul(al1, bh4) | 0; + mid = mid + Math.imul(ah1, bl4) | 0; + hi = hi + Math.imul(ah1, bh4) | 0; + lo = lo + Math.imul(al0, bl5) | 0; + mid = mid + Math.imul(al0, bh5) | 0; + mid = mid + Math.imul(ah0, bl5) | 0; + hi = hi + Math.imul(ah0, bh5) | 0; + var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = mid + Math.imul(ah6, bl0) | 0; + hi = Math.imul(ah6, bh0); + lo = lo + Math.imul(al5, bl1) | 0; + mid = mid + Math.imul(al5, bh1) | 0; + mid = mid + Math.imul(ah5, bl1) | 0; + hi = hi + Math.imul(ah5, bh1) | 0; + lo = lo + Math.imul(al4, bl2) | 0; + mid = mid + Math.imul(al4, bh2) | 0; + mid = mid + Math.imul(ah4, bl2) | 0; + hi = hi + Math.imul(ah4, bh2) | 0; + lo = lo + Math.imul(al3, bl3) | 0; + mid = mid + Math.imul(al3, bh3) | 0; + mid = mid + Math.imul(ah3, bl3) | 0; + hi = hi + Math.imul(ah3, bh3) | 0; + lo = lo + Math.imul(al2, bl4) | 0; + mid = mid + Math.imul(al2, bh4) | 0; + mid = mid + Math.imul(ah2, bl4) | 0; + hi = hi + Math.imul(ah2, bh4) | 0; + lo = lo + Math.imul(al1, bl5) | 0; + mid = mid + Math.imul(al1, bh5) | 0; + mid = mid + Math.imul(ah1, bl5) | 0; + hi = hi + Math.imul(ah1, bh5) | 0; + lo = lo + Math.imul(al0, bl6) | 0; + mid = mid + Math.imul(al0, bh6) | 0; + mid = mid + Math.imul(ah0, bl6) | 0; + hi = hi + Math.imul(ah0, bh6) | 0; + var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = mid + Math.imul(ah7, bl0) | 0; + hi = Math.imul(ah7, bh0); + lo = lo + Math.imul(al6, bl1) | 0; + mid = mid + Math.imul(al6, bh1) | 0; + mid = mid + Math.imul(ah6, bl1) | 0; + hi = hi + Math.imul(ah6, bh1) | 0; + lo = lo + Math.imul(al5, bl2) | 0; + mid = mid + Math.imul(al5, bh2) | 0; + mid = mid + Math.imul(ah5, bl2) | 0; + hi = hi + Math.imul(ah5, bh2) | 0; + lo = lo + Math.imul(al4, bl3) | 0; + mid = mid + Math.imul(al4, bh3) | 0; + mid = mid + Math.imul(ah4, bl3) | 0; + hi = hi + Math.imul(ah4, bh3) | 0; + lo = lo + Math.imul(al3, bl4) | 0; + mid = mid + Math.imul(al3, bh4) | 0; + mid = mid + Math.imul(ah3, bl4) | 0; + hi = hi + Math.imul(ah3, bh4) | 0; + lo = lo + Math.imul(al2, bl5) | 0; + mid = mid + Math.imul(al2, bh5) | 0; + mid = mid + Math.imul(ah2, bl5) | 0; + hi = hi + Math.imul(ah2, bh5) | 0; + lo = lo + Math.imul(al1, bl6) | 0; + mid = mid + Math.imul(al1, bh6) | 0; + mid = mid + Math.imul(ah1, bl6) | 0; + hi = hi + Math.imul(ah1, bh6) | 0; + lo = lo + Math.imul(al0, bl7) | 0; + mid = mid + Math.imul(al0, bh7) | 0; + mid = mid + Math.imul(ah0, bl7) | 0; + hi = hi + Math.imul(ah0, bh7) | 0; + var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = mid + Math.imul(ah8, bl0) | 0; + hi = Math.imul(ah8, bh0); + lo = lo + Math.imul(al7, bl1) | 0; + mid = mid + Math.imul(al7, bh1) | 0; + mid = mid + Math.imul(ah7, bl1) | 0; + hi = hi + Math.imul(ah7, bh1) | 0; + lo = lo + Math.imul(al6, bl2) | 0; + mid = mid + Math.imul(al6, bh2) | 0; + mid = mid + Math.imul(ah6, bl2) | 0; + hi = hi + Math.imul(ah6, bh2) | 0; + lo = lo + Math.imul(al5, bl3) | 0; + mid = mid + Math.imul(al5, bh3) | 0; + mid = mid + Math.imul(ah5, bl3) | 0; + hi = hi + Math.imul(ah5, bh3) | 0; + lo = lo + Math.imul(al4, bl4) | 0; + mid = mid + Math.imul(al4, bh4) | 0; + mid = mid + Math.imul(ah4, bl4) | 0; + hi = hi + Math.imul(ah4, bh4) | 0; + lo = lo + Math.imul(al3, bl5) | 0; + mid = mid + Math.imul(al3, bh5) | 0; + mid = mid + Math.imul(ah3, bl5) | 0; + hi = hi + Math.imul(ah3, bh5) | 0; + lo = lo + Math.imul(al2, bl6) | 0; + mid = mid + Math.imul(al2, bh6) | 0; + mid = mid + Math.imul(ah2, bl6) | 0; + hi = hi + Math.imul(ah2, bh6) | 0; + lo = lo + Math.imul(al1, bl7) | 0; + mid = mid + Math.imul(al1, bh7) | 0; + mid = mid + Math.imul(ah1, bl7) | 0; + hi = hi + Math.imul(ah1, bh7) | 0; + lo = lo + Math.imul(al0, bl8) | 0; + mid = mid + Math.imul(al0, bh8) | 0; + mid = mid + Math.imul(ah0, bl8) | 0; + hi = hi + Math.imul(ah0, bh8) | 0; + var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = mid + Math.imul(ah9, bl0) | 0; + hi = Math.imul(ah9, bh0); + lo = lo + Math.imul(al8, bl1) | 0; + mid = mid + Math.imul(al8, bh1) | 0; + mid = mid + Math.imul(ah8, bl1) | 0; + hi = hi + Math.imul(ah8, bh1) | 0; + lo = lo + Math.imul(al7, bl2) | 0; + mid = mid + Math.imul(al7, bh2) | 0; + mid = mid + Math.imul(ah7, bl2) | 0; + hi = hi + Math.imul(ah7, bh2) | 0; + lo = lo + Math.imul(al6, bl3) | 0; + mid = mid + Math.imul(al6, bh3) | 0; + mid = mid + Math.imul(ah6, bl3) | 0; + hi = hi + Math.imul(ah6, bh3) | 0; + lo = lo + Math.imul(al5, bl4) | 0; + mid = mid + Math.imul(al5, bh4) | 0; + mid = mid + Math.imul(ah5, bl4) | 0; + hi = hi + Math.imul(ah5, bh4) | 0; + lo = lo + Math.imul(al4, bl5) | 0; + mid = mid + Math.imul(al4, bh5) | 0; + mid = mid + Math.imul(ah4, bl5) | 0; + hi = hi + Math.imul(ah4, bh5) | 0; + lo = lo + Math.imul(al3, bl6) | 0; + mid = mid + Math.imul(al3, bh6) | 0; + mid = mid + Math.imul(ah3, bl6) | 0; + hi = hi + Math.imul(ah3, bh6) | 0; + lo = lo + Math.imul(al2, bl7) | 0; + mid = mid + Math.imul(al2, bh7) | 0; + mid = mid + Math.imul(ah2, bl7) | 0; + hi = hi + Math.imul(ah2, bh7) | 0; + lo = lo + Math.imul(al1, bl8) | 0; + mid = mid + Math.imul(al1, bh8) | 0; + mid = mid + Math.imul(ah1, bl8) | 0; + hi = hi + Math.imul(ah1, bh8) | 0; + lo = lo + Math.imul(al0, bl9) | 0; + mid = mid + Math.imul(al0, bh9) | 0; + mid = mid + Math.imul(ah0, bl9) | 0; + hi = hi + Math.imul(ah0, bh9) | 0; + var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = mid + Math.imul(ah9, bl1) | 0; + hi = Math.imul(ah9, bh1); + lo = lo + Math.imul(al8, bl2) | 0; + mid = mid + Math.imul(al8, bh2) | 0; + mid = mid + Math.imul(ah8, bl2) | 0; + hi = hi + Math.imul(ah8, bh2) | 0; + lo = lo + Math.imul(al7, bl3) | 0; + mid = mid + Math.imul(al7, bh3) | 0; + mid = mid + Math.imul(ah7, bl3) | 0; + hi = hi + Math.imul(ah7, bh3) | 0; + lo = lo + Math.imul(al6, bl4) | 0; + mid = mid + Math.imul(al6, bh4) | 0; + mid = mid + Math.imul(ah6, bl4) | 0; + hi = hi + Math.imul(ah6, bh4) | 0; + lo = lo + Math.imul(al5, bl5) | 0; + mid = mid + Math.imul(al5, bh5) | 0; + mid = mid + Math.imul(ah5, bl5) | 0; + hi = hi + Math.imul(ah5, bh5) | 0; + lo = lo + Math.imul(al4, bl6) | 0; + mid = mid + Math.imul(al4, bh6) | 0; + mid = mid + Math.imul(ah4, bl6) | 0; + hi = hi + Math.imul(ah4, bh6) | 0; + lo = lo + Math.imul(al3, bl7) | 0; + mid = mid + Math.imul(al3, bh7) | 0; + mid = mid + Math.imul(ah3, bl7) | 0; + hi = hi + Math.imul(ah3, bh7) | 0; + lo = lo + Math.imul(al2, bl8) | 0; + mid = mid + Math.imul(al2, bh8) | 0; + mid = mid + Math.imul(ah2, bl8) | 0; + hi = hi + Math.imul(ah2, bh8) | 0; + lo = lo + Math.imul(al1, bl9) | 0; + mid = mid + Math.imul(al1, bh9) | 0; + mid = mid + Math.imul(ah1, bl9) | 0; + hi = hi + Math.imul(ah1, bh9) | 0; + var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = mid + Math.imul(ah9, bl2) | 0; + hi = Math.imul(ah9, bh2); + lo = lo + Math.imul(al8, bl3) | 0; + mid = mid + Math.imul(al8, bh3) | 0; + mid = mid + Math.imul(ah8, bl3) | 0; + hi = hi + Math.imul(ah8, bh3) | 0; + lo = lo + Math.imul(al7, bl4) | 0; + mid = mid + Math.imul(al7, bh4) | 0; + mid = mid + Math.imul(ah7, bl4) | 0; + hi = hi + Math.imul(ah7, bh4) | 0; + lo = lo + Math.imul(al6, bl5) | 0; + mid = mid + Math.imul(al6, bh5) | 0; + mid = mid + Math.imul(ah6, bl5) | 0; + hi = hi + Math.imul(ah6, bh5) | 0; + lo = lo + Math.imul(al5, bl6) | 0; + mid = mid + Math.imul(al5, bh6) | 0; + mid = mid + Math.imul(ah5, bl6) | 0; + hi = hi + Math.imul(ah5, bh6) | 0; + lo = lo + Math.imul(al4, bl7) | 0; + mid = mid + Math.imul(al4, bh7) | 0; + mid = mid + Math.imul(ah4, bl7) | 0; + hi = hi + Math.imul(ah4, bh7) | 0; + lo = lo + Math.imul(al3, bl8) | 0; + mid = mid + Math.imul(al3, bh8) | 0; + mid = mid + Math.imul(ah3, bl8) | 0; + hi = hi + Math.imul(ah3, bh8) | 0; + lo = lo + Math.imul(al2, bl9) | 0; + mid = mid + Math.imul(al2, bh9) | 0; + mid = mid + Math.imul(ah2, bl9) | 0; + hi = hi + Math.imul(ah2, bh9) | 0; + var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = mid + Math.imul(ah9, bl3) | 0; + hi = Math.imul(ah9, bh3); + lo = lo + Math.imul(al8, bl4) | 0; + mid = mid + Math.imul(al8, bh4) | 0; + mid = mid + Math.imul(ah8, bl4) | 0; + hi = hi + Math.imul(ah8, bh4) | 0; + lo = lo + Math.imul(al7, bl5) | 0; + mid = mid + Math.imul(al7, bh5) | 0; + mid = mid + Math.imul(ah7, bl5) | 0; + hi = hi + Math.imul(ah7, bh5) | 0; + lo = lo + Math.imul(al6, bl6) | 0; + mid = mid + Math.imul(al6, bh6) | 0; + mid = mid + Math.imul(ah6, bl6) | 0; + hi = hi + Math.imul(ah6, bh6) | 0; + lo = lo + Math.imul(al5, bl7) | 0; + mid = mid + Math.imul(al5, bh7) | 0; + mid = mid + Math.imul(ah5, bl7) | 0; + hi = hi + Math.imul(ah5, bh7) | 0; + lo = lo + Math.imul(al4, bl8) | 0; + mid = mid + Math.imul(al4, bh8) | 0; + mid = mid + Math.imul(ah4, bl8) | 0; + hi = hi + Math.imul(ah4, bh8) | 0; + lo = lo + Math.imul(al3, bl9) | 0; + mid = mid + Math.imul(al3, bh9) | 0; + mid = mid + Math.imul(ah3, bl9) | 0; + hi = hi + Math.imul(ah3, bh9) | 0; + var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = mid + Math.imul(ah9, bl4) | 0; + hi = Math.imul(ah9, bh4); + lo = lo + Math.imul(al8, bl5) | 0; + mid = mid + Math.imul(al8, bh5) | 0; + mid = mid + Math.imul(ah8, bl5) | 0; + hi = hi + Math.imul(ah8, bh5) | 0; + lo = lo + Math.imul(al7, bl6) | 0; + mid = mid + Math.imul(al7, bh6) | 0; + mid = mid + Math.imul(ah7, bl6) | 0; + hi = hi + Math.imul(ah7, bh6) | 0; + lo = lo + Math.imul(al6, bl7) | 0; + mid = mid + Math.imul(al6, bh7) | 0; + mid = mid + Math.imul(ah6, bl7) | 0; + hi = hi + Math.imul(ah6, bh7) | 0; + lo = lo + Math.imul(al5, bl8) | 0; + mid = mid + Math.imul(al5, bh8) | 0; + mid = mid + Math.imul(ah5, bl8) | 0; + hi = hi + Math.imul(ah5, bh8) | 0; + lo = lo + Math.imul(al4, bl9) | 0; + mid = mid + Math.imul(al4, bh9) | 0; + mid = mid + Math.imul(ah4, bl9) | 0; + hi = hi + Math.imul(ah4, bh9) | 0; + var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = mid + Math.imul(ah9, bl5) | 0; + hi = Math.imul(ah9, bh5); + lo = lo + Math.imul(al8, bl6) | 0; + mid = mid + Math.imul(al8, bh6) | 0; + mid = mid + Math.imul(ah8, bl6) | 0; + hi = hi + Math.imul(ah8, bh6) | 0; + lo = lo + Math.imul(al7, bl7) | 0; + mid = mid + Math.imul(al7, bh7) | 0; + mid = mid + Math.imul(ah7, bl7) | 0; + hi = hi + Math.imul(ah7, bh7) | 0; + lo = lo + Math.imul(al6, bl8) | 0; + mid = mid + Math.imul(al6, bh8) | 0; + mid = mid + Math.imul(ah6, bl8) | 0; + hi = hi + Math.imul(ah6, bh8) | 0; + lo = lo + Math.imul(al5, bl9) | 0; + mid = mid + Math.imul(al5, bh9) | 0; + mid = mid + Math.imul(ah5, bl9) | 0; + hi = hi + Math.imul(ah5, bh9) | 0; + var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = mid + Math.imul(ah9, bl6) | 0; + hi = Math.imul(ah9, bh6); + lo = lo + Math.imul(al8, bl7) | 0; + mid = mid + Math.imul(al8, bh7) | 0; + mid = mid + Math.imul(ah8, bl7) | 0; + hi = hi + Math.imul(ah8, bh7) | 0; + lo = lo + Math.imul(al7, bl8) | 0; + mid = mid + Math.imul(al7, bh8) | 0; + mid = mid + Math.imul(ah7, bl8) | 0; + hi = hi + Math.imul(ah7, bh8) | 0; + lo = lo + Math.imul(al6, bl9) | 0; + mid = mid + Math.imul(al6, bh9) | 0; + mid = mid + Math.imul(ah6, bl9) | 0; + hi = hi + Math.imul(ah6, bh9) | 0; + var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = mid + Math.imul(ah9, bl7) | 0; + hi = Math.imul(ah9, bh7); + lo = lo + Math.imul(al8, bl8) | 0; + mid = mid + Math.imul(al8, bh8) | 0; + mid = mid + Math.imul(ah8, bl8) | 0; + hi = hi + Math.imul(ah8, bh8) | 0; + lo = lo + Math.imul(al7, bl9) | 0; + mid = mid + Math.imul(al7, bh9) | 0; + mid = mid + Math.imul(ah7, bl9) | 0; + hi = hi + Math.imul(ah7, bh9) | 0; + var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = mid + Math.imul(ah9, bl8) | 0; + hi = Math.imul(ah9, bh8); + lo = lo + Math.imul(al8, bl9) | 0; + mid = mid + Math.imul(al8, bh9) | 0; + mid = mid + Math.imul(ah8, bl9) | 0; + hi = hi + Math.imul(ah8, bh9) | 0; + var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = mid + Math.imul(ah9, bl9) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + function bigMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + ncarry = ncarry + (r / 0x4000000 | 0) | 0; + lo = lo + rword | 0; + rword = lo & 0x3ffffff; + ncarry = ncarry + (lo >>> 26) | 0; + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + return out._strip(); + } + function jumboMulTo(self, num, out) { + // Temporary disable, see https://github.com/indutny/bn.js/issues/211 + // var fftm = new FFTM(); + // return fftm.mulp(self, num, out); + return bigMulTo(self, num, out); + } + BN.prototype.mulTo = function mulTo(num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM(x, y) { + this.x = x; + this.y = y; + } + FFTM.prototype.makeRBT = function makeRBT(N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin(x, l, N) { + if (x === 0 || x === N - 1) return x; + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << l - i - 1; + x >>= 1; + } + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + var rx = rtwdf_ * ro - itwdf_ * io; + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + FFTM.prototype.guessLen13b = function guessLen13b(n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + return 1 << i + 1 + odd; + }; + FFTM.prototype.conjugate = function conjugate(rws, iws, N) { + if (N <= 1) return; + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + t = iws[i]; + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + FFTM.prototype.normalize13b = function normalize13b(ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry; + ws[i] = w & 0x3ffffff; + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + return ws; + }; + FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + rws[2 * i] = carry & 0x1fff; + carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; + carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + FFTM.prototype.stub = function stub(N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + return ph; + }; + FFTM.prototype.mulp = function mulp(x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + var rbt = this.makeRBT(N); + var _ = this.stub(N); + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + var rmws = out.words; + rmws.length = N; + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out._strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul(num) { + return this.clone().mulTo(num, this); + }; + BN.prototype.imuln = function imuln(num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += w / 0x4000000 | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return isNegNum ? this.ineg() : this; + }; + BN.prototype.muln = function muln(num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr() { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr() { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow(num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + res = res.mul(q); + } + } + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = 0x3ffffff >>> 26 - r << 26 - r; + var i; + if (r !== 0) { + var carry = 0; + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = (this.words[i] | 0) - newCarry << r; + this.words[i] = c | carry; + carry = newCarry >>> 26 - r; + } + if (carry) { + this.words[i] = carry; + this.length++; + } + } + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + this.length += s; + } + return this._strip(); + }; + BN.prototype.ishln = function ishln(bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn(bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - hint % 26) / 26; + } else { + h = 0; + } + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + var maskedWords = extended; + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = carry << 26 - r | word >>> r; + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + return this._strip(); + }; + BN.prototype.ishrn = function ishrn(bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln(bits) { + return this.clone().ishln(bits); + }; + BN.prototype.ushln = function ushln(bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn(bits) { + return this.clone().ishrn(bits); + }; + BN.prototype.ushrn = function ushrn(bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn(bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + assert(this.negative === 0, 'imaskn works only with positive numbers'); + if (this.length <= s) { + return this; + } + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + if (r !== 0) { + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + this.words[this.length - 1] &= mask; + } + return this._strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn(bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) <= num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + BN.prototype._iaddn = function _iaddn(num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + this.words[0] -= num; + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + return this._strip(); + }; + BN.prototype.addn = function addn(num) { + return this.clone().iaddn(num); + }; + BN.prototype.subn = function subn(num) { + return this.clone().isubn(num); + }; + BN.prototype.iabs = function iabs() { + this.negative = 0; + return this; + }; + BN.prototype.abs = function abs() { + return this.clone().iabs(); + }; + BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) { + var len = num.length + shift; + var i; + this._expand(len); + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - (right / 0x4000000 | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + if (carry === 0) return this._strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + return this._strip(); + }; + BN.prototype._wordDiv = function _wordDiv(num, mode) { + var shift = this.length - num.length; + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min(qj / bhi | 0, 0x3ffffff); + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q._strip(); + } + a._strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod(num, mode, positive) { + assert(!num.isZero()); + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + if (mode !== 'mod') { + div = res.div.neg(); + } + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + return { + div: div, + mod: mod + }; + } + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + if (mode !== 'mod') { + div = res.div.neg(); + } + return { + div: div, + mod: res.mod + }; + } + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modrn(num.words[0])) + }; + } + return { + div: this.divn(num.words[0]), + mod: new BN(this.modrn(num.words[0])) + }; + } + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div(num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod(num) { + return this.divmod(num, 'mod', false).mod; + }; + BN.prototype.umod = function umod(num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound(num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + BN.prototype.modrn = function modrn(num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + return isNegNum ? -acc : acc; + }; + + // WARNING: DEPRECATED + BN.prototype.modn = function modn(num) { + return this.modrn(num); + }; + + // In-place division by number + BN.prototype.idivn = function idivn(num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + assert(num <= 0x3ffffff); + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = w / num | 0; + carry = w % num; + } + this._strip(); + return isNegNum ? this.ineg() : this; + }; + BN.prototype.divn = function divn(num) { + return this.clone().idivn(num); + }; + BN.prototype.egcd = function egcd(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var x = this; + var y = p.clone(); + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + var g = 0; + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + var yp = y.clone(); + var xp = x.clone(); + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + A.iushrn(1); + B.iushrn(1); + } + } + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + C.iushrn(1); + D.iushrn(1); + } + } + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var a = this; + var b = p.clone(); + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + var x1 = new BN(1); + var x2 = new BN(0); + var delta = b.clone(); + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + x1.iushrn(1); + } + } + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + x2.iushrn(1); + } + } + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + if (res.cmpn(0) < 0) { + res.iadd(p); + } + return res; + }; + BN.prototype.gcd = function gcd(num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + a.isub(b); + } while (true); + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm(num) { + return this.egcd(num).a.umod(num); + }; + BN.prototype.isEven = function isEven() { + return (this.words[0] & 1) === 0; + }; + BN.prototype.isOdd = function isOdd() { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln(num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn(bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + BN.prototype.isZero = function isZero() { + return this.length === 1 && this.words[0] === 0; + }; + BN.prototype.cmpn = function cmpn(num) { + var negative = num < 0; + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + this._strip(); + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + assert(num <= 0x3ffffff, 'Number is too big'); + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp(num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp(num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + BN.prototype.gtn = function gtn(num) { + return this.cmpn(num) === 1; + }; + BN.prototype.gt = function gt(num) { + return this.cmp(num) === 1; + }; + BN.prototype.gten = function gten(num) { + return this.cmpn(num) >= 0; + }; + BN.prototype.gte = function gte(num) { + return this.cmp(num) >= 0; + }; + BN.prototype.ltn = function ltn(num) { + return this.cmpn(num) === -1; + }; + BN.prototype.lt = function lt(num) { + return this.cmp(num) === -1; + }; + BN.prototype.lten = function lten(num) { + return this.cmpn(num) <= 0; + }; + BN.prototype.lte = function lte(num) { + return this.cmp(num) <= 0; + }; + BN.prototype.eqn = function eqn(num) { + return this.cmpn(num) === 0; + }; + BN.prototype.eq = function eq(num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red(num) { + return new Red(num); + }; + BN.prototype.toRed = function toRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + BN.prototype.fromRed = function fromRed() { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + BN.prototype._forceRed = function _forceRed(ctx) { + this.red = ctx; + return this; + }; + BN.prototype.forceRed = function forceRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + BN.prototype.redAdd = function redAdd(num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + BN.prototype.redIAdd = function redIAdd(num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + BN.prototype.redSub = function redSub(num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + BN.prototype.redISub = function redISub(num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + BN.prototype.redShl = function redShl(num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + BN.prototype.redMul = function redMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + BN.prototype.redIMul = function redIMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + BN.prototype.redSqr = function redSqr() { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + BN.prototype.redISqr = function redISqr() { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt() { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + BN.prototype.redInvm = function redInvm() { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg() { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + BN.prototype.redPow = function redPow(num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime(name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + this.tmp = this._tmp(); + } + MPrime.prototype._tmp = function _tmp() { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + MPrime.prototype.ireduce = function ireduce(num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is a BN v4 instance + r.strip(); + } else { + // r is a BN v5 instance + r._strip(); + } + } + return r; + }; + MPrime.prototype.split = function split(input, out) { + input.iushrn(this.n, 0, out); + }; + MPrime.prototype.imulK = function imulK(num) { + return num.imul(this.k); + }; + function K256() { + MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + K256.prototype.split = function split(input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = (next & mask) << 4 | prev >>> 22; + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + K256.prototype.imulK = function imulK(num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + (lo / 0x4000000 | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + function P224() { + MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + function P192() { + MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + function P25519() { + // 2 ^ 255 - 19 + MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + P25519.prototype.imulK = function imulK(num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime(name) { + // Cached version of prime + if (primes[name]) return primes[name]; + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + return prime; + }; + + // + // Base reduction engine + // + function Red(m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + Red.prototype._verify1 = function _verify1(a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + Red.prototype._verify2 = function _verify2(a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, 'red works only with red numbers'); + }; + Red.prototype.imod = function imod(a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + move(a, a.umod(this.m)._forceRed(this)); + return a; + }; + Red.prototype.neg = function neg(a) { + if (a.isZero()) { + return a.clone(); + } + return this.m.sub(a)._forceRed(this); + }; + Red.prototype.add = function add(a, b) { + this._verify2(a, b); + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + Red.prototype.iadd = function iadd(a, b) { + this._verify2(a, b); + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + Red.prototype.sub = function sub(a, b) { + this._verify2(a, b); + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + Red.prototype.isub = function isub(a, b) { + this._verify2(a, b); + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + Red.prototype.shl = function shl(a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + Red.prototype.imul = function imul(a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + Red.prototype.mul = function mul(a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + Red.prototype.isqr = function isqr(a) { + return this.imul(a, a.clone()); + }; + Red.prototype.sqr = function sqr(a) { + return this.mul(a, a); + }; + Red.prototype.sqrt = function sqrt(a) { + if (a.isZero()) return a.clone(); + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + return r; + }; + Red.prototype.invm = function invm(a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + Red.prototype.pow = function pow(a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = word >> j & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + return res; + }; + Red.prototype.convertTo = function convertTo(num) { + var r = num.umod(this.m); + return r === num ? r.clone() : r; + }; + Red.prototype.convertFrom = function convertFrom(num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont(num) { + return new Mont(num); + }; + function Mont(m) { + Red.call(this, m); + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - this.shift % 26; + } + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + Mont.prototype.convertTo = function convertTo(num) { + return this.imod(num.ushln(this.shift)); + }; + Mont.prototype.convertFrom = function convertFrom(num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + Mont.prototype.imul = function imul(a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + return res._forceRed(this); + }; + Mont.prototype.mul = function mul(a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + return res._forceRed(this); + }; + Mont.prototype.invm = function invm(a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})(typeof module === 'undefined' || module, void 0); + +},{"buffer":188}],187:[function(require,module,exports){ +"use strict"; + +var r; +module.exports = function rand(len) { + if (!r) r = new Rand(null); + return r.generate(len); +}; +function Rand(rand) { + this.rand = rand; +} +module.exports.Rand = Rand; +Rand.prototype.generate = function generate(len) { + return this._rand(len); +}; + +// Emulate crypto API using randy +Rand.prototype._rand = function _rand(n) { + if (this.rand.getBytes) return this.rand.getBytes(n); + var res = new Uint8Array(n); + for (var i = 0; i < res.length; i++) res[i] = this.rand.getByte(); + return res; +}; +if (typeof self === 'object') { + if (self.crypto && self.crypto.getRandomValues) { + // Modern browsers + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.crypto.getRandomValues(arr); + return arr; + }; + } else if (self.msCrypto && self.msCrypto.getRandomValues) { + // IE + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.msCrypto.getRandomValues(arr); + return arr; + }; + + // Safari's WebWorkers do not have `crypto` + } else if (typeof window === 'object') { + // Old junk + Rand.prototype._rand = function () { + throw new Error('Not implemented yet'); + }; + } +} else { + // Node.js or Web worker with no crypto support + try { + var crypto = require('crypto'); + if (typeof crypto.randomBytes !== 'function') throw new Error('Not supported'); + Rand.prototype._rand = function _rand(n) { + return crypto.randomBytes(n); + }; + } catch (e) {} +} + +},{"crypto":188}],188:[function(require,module,exports){ +"use strict"; + +},{}],189:[function(require,module,exports){ +"use strict"; + +// based on the aes implimentation in triple sec +// https://github.com/keybase/triplesec +// which is in turn based on the one from crypto-js +// https://code.google.com/p/crypto-js/ + +var Buffer = require('safe-buffer').Buffer; +function asUInt32Array(buf) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf); + var len = buf.length / 4 | 0; + var out = new Array(len); + for (var i = 0; i < len; i++) { + out[i] = buf.readUInt32BE(i * 4); + } + return out; +} +function scrubVec(v) { + for (var i = 0; i < v.length; v++) { + v[i] = 0; + } +} +function cryptBlock(M, keySchedule, SUB_MIX, SBOX, nRounds) { + var SUB_MIX0 = SUB_MIX[0]; + var SUB_MIX1 = SUB_MIX[1]; + var SUB_MIX2 = SUB_MIX[2]; + var SUB_MIX3 = SUB_MIX[3]; + var s0 = M[0] ^ keySchedule[0]; + var s1 = M[1] ^ keySchedule[1]; + var s2 = M[2] ^ keySchedule[2]; + var s3 = M[3] ^ keySchedule[3]; + var t0, t1, t2, t3; + var ksRow = 4; + for (var round = 1; round < nRounds; round++) { + t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[s1 >>> 16 & 0xff] ^ SUB_MIX2[s2 >>> 8 & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]; + t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[s2 >>> 16 & 0xff] ^ SUB_MIX2[s3 >>> 8 & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]; + t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[s3 >>> 16 & 0xff] ^ SUB_MIX2[s0 >>> 8 & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]; + t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[s0 >>> 16 & 0xff] ^ SUB_MIX2[s1 >>> 8 & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]; + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + t0 = t0 >>> 0; + t1 = t1 >>> 0; + t2 = t2 >>> 0; + t3 = t3 >>> 0; + return [t0, t1, t2, t3]; +} + +// AES constants +var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; +var G = function () { + // Compute double table + var d = new Array(256); + for (var j = 0; j < 256; j++) { + if (j < 128) { + d[j] = j << 1; + } else { + d[j] = j << 1 ^ 0x11b; + } + } + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX = [[], [], [], []]; + var INV_SUB_MIX = [[], [], [], []]; + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; ++i) { + // Compute sbox + var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4; + sx = sx >>> 8 ^ sx & 0xff ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = d[sx] * 0x101 ^ sx * 0x1010100; + SUB_MIX[0][x] = t << 24 | t >>> 8; + SUB_MIX[1][x] = t << 16 | t >>> 16; + SUB_MIX[2][x] = t << 8 | t >>> 24; + SUB_MIX[3][x] = t; + + // Compute inv sub bytes, inv mix columns tables + t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100; + INV_SUB_MIX[0][sx] = t << 24 | t >>> 8; + INV_SUB_MIX[1][sx] = t << 16 | t >>> 16; + INV_SUB_MIX[2][sx] = t << 8 | t >>> 24; + INV_SUB_MIX[3][sx] = t; + if (x === 0) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + return { + SBOX: SBOX, + INV_SBOX: INV_SBOX, + SUB_MIX: SUB_MIX, + INV_SUB_MIX: INV_SUB_MIX + }; +}(); +function AES(key) { + this._key = asUInt32Array(key); + this._reset(); +} +AES.blockSize = 4 * 4; +AES.keySize = 256 / 8; +AES.prototype.blockSize = AES.blockSize; +AES.prototype.keySize = AES.keySize; +AES.prototype._reset = function () { + var keyWords = this._key; + var keySize = keyWords.length; + var nRounds = keySize + 6; + var ksRows = (nRounds + 1) * 4; + var keySchedule = []; + for (var k = 0; k < keySize; k++) { + keySchedule[k] = keyWords[k]; + } + for (k = keySize; k < ksRows; k++) { + var t = keySchedule[k - 1]; + if (k % keySize === 0) { + t = t << 8 | t >>> 24; + t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff]; + t ^= RCON[k / keySize | 0] << 24; + } else if (keySize > 6 && k % keySize === 4) { + t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff]; + } + keySchedule[k] = keySchedule[k - keySize] ^ t; + } + var invKeySchedule = []; + for (var ik = 0; ik < ksRows; ik++) { + var ksR = ksRows - ik; + var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]; + if (ik < 4 || ksR <= 4) { + invKeySchedule[ik] = tt; + } else { + invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[tt >>> 16 & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[tt >>> 8 & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]; + } + } + this._nRounds = nRounds; + this._keySchedule = keySchedule; + this._invKeySchedule = invKeySchedule; +}; +AES.prototype.encryptBlockRaw = function (M) { + M = asUInt32Array(M); + return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds); +}; +AES.prototype.encryptBlock = function (M) { + var out = this.encryptBlockRaw(M); + var buf = Buffer.allocUnsafe(16); + buf.writeUInt32BE(out[0], 0); + buf.writeUInt32BE(out[1], 4); + buf.writeUInt32BE(out[2], 8); + buf.writeUInt32BE(out[3], 12); + return buf; +}; +AES.prototype.decryptBlock = function (M) { + M = asUInt32Array(M); + + // swap + var m1 = M[1]; + M[1] = M[3]; + M[3] = m1; + var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds); + var buf = Buffer.allocUnsafe(16); + buf.writeUInt32BE(out[0], 0); + buf.writeUInt32BE(out[3], 4); + buf.writeUInt32BE(out[2], 8); + buf.writeUInt32BE(out[1], 12); + return buf; +}; +AES.prototype.scrub = function () { + scrubVec(this._keySchedule); + scrubVec(this._invKeySchedule); + scrubVec(this._key); +}; +module.exports.AES = AES; + +},{"safe-buffer":332}],190:[function(require,module,exports){ +"use strict"; + +var aes = require('./aes'); +var Buffer = require('safe-buffer').Buffer; +var Transform = require('cipher-base'); +var inherits = require('inherits'); +var GHASH = require('./ghash'); +var xor = require('buffer-xor'); +var incr32 = require('./incr32'); +function xorTest(a, b) { + var out = 0; + if (a.length !== b.length) out++; + var len = Math.min(a.length, b.length); + for (var i = 0; i < len; ++i) { + out += a[i] ^ b[i]; + } + return out; +} +function calcIv(self, iv, ck) { + if (iv.length === 12) { + self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]); + return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]); + } + var ghash = new GHASH(ck); + var len = iv.length; + var toPad = len % 16; + ghash.update(iv); + if (toPad) { + toPad = 16 - toPad; + ghash.update(Buffer.alloc(toPad, 0)); + } + ghash.update(Buffer.alloc(8, 0)); + var ivBits = len * 8; + var tail = Buffer.alloc(8); + tail.writeUIntBE(ivBits, 0, 8); + ghash.update(tail); + self._finID = ghash.state; + var out = Buffer.from(self._finID); + incr32(out); + return out; +} +function StreamCipher(mode, key, iv, decrypt) { + Transform.call(this); + var h = Buffer.alloc(4, 0); + this._cipher = new aes.AES(key); + var ck = this._cipher.encryptBlock(h); + this._ghash = new GHASH(ck); + iv = calcIv(this, iv, ck); + this._prev = Buffer.from(iv); + this._cache = Buffer.allocUnsafe(0); + this._secCache = Buffer.allocUnsafe(0); + this._decrypt = decrypt; + this._alen = 0; + this._len = 0; + this._mode = mode; + this._authTag = null; + this._called = false; +} +inherits(StreamCipher, Transform); +StreamCipher.prototype._update = function (chunk) { + if (!this._called && this._alen) { + var rump = 16 - this._alen % 16; + if (rump < 16) { + rump = Buffer.alloc(rump, 0); + this._ghash.update(rump); + } + } + this._called = true; + var out = this._mode.encrypt(this, chunk); + if (this._decrypt) { + this._ghash.update(chunk); + } else { + this._ghash.update(out); + } + this._len += chunk.length; + return out; +}; +StreamCipher.prototype._final = function () { + if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data'); + var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)); + if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data'); + this._authTag = tag; + this._cipher.scrub(); +}; +StreamCipher.prototype.getAuthTag = function getAuthTag() { + if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state'); + return this._authTag; +}; +StreamCipher.prototype.setAuthTag = function setAuthTag(tag) { + if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state'); + this._authTag = tag; +}; +StreamCipher.prototype.setAAD = function setAAD(buf) { + if (this._called) throw new Error('Attempting to set AAD in unsupported state'); + this._ghash.update(buf); + this._alen += buf.length; +}; +module.exports = StreamCipher; + +},{"./aes":189,"./ghash":194,"./incr32":195,"buffer-xor":219,"cipher-base":221,"inherits":279,"safe-buffer":332}],191:[function(require,module,exports){ +"use strict"; + +var ciphers = require('./encrypter'); +var deciphers = require('./decrypter'); +var modes = require('./modes/list.json'); +function getCiphers() { + return Object.keys(modes); +} +exports.createCipher = exports.Cipher = ciphers.createCipher; +exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv; +exports.createDecipher = exports.Decipher = deciphers.createDecipher; +exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv; +exports.listCiphers = exports.getCiphers = getCiphers; + +},{"./decrypter":192,"./encrypter":193,"./modes/list.json":203}],192:[function(require,module,exports){ +"use strict"; + +var AuthCipher = require('./authCipher'); +var Buffer = require('safe-buffer').Buffer; +var MODES = require('./modes'); +var StreamCipher = require('./streamCipher'); +var Transform = require('cipher-base'); +var aes = require('./aes'); +var ebtk = require('evp_bytestokey'); +var inherits = require('inherits'); +function Decipher(mode, key, iv) { + Transform.call(this); + this._cache = new Splitter(); + this._last = void 0; + this._cipher = new aes.AES(key); + this._prev = Buffer.from(iv); + this._mode = mode; + this._autopadding = true; +} +inherits(Decipher, Transform); +Decipher.prototype._update = function (data) { + this._cache.add(data); + var chunk; + var thing; + var out = []; + while (chunk = this._cache.get(this._autopadding)) { + thing = this._mode.decrypt(this, chunk); + out.push(thing); + } + return Buffer.concat(out); +}; +Decipher.prototype._final = function () { + var chunk = this._cache.flush(); + if (this._autopadding) { + return unpad(this._mode.decrypt(this, chunk)); + } else if (chunk) { + throw new Error('data not multiple of block length'); + } +}; +Decipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo; + return this; +}; +function Splitter() { + this.cache = Buffer.allocUnsafe(0); +} +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]); +}; +Splitter.prototype.get = function (autoPadding) { + var out; + if (autoPadding) { + if (this.cache.length > 16) { + out = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + return out; + } + } else { + if (this.cache.length >= 16) { + out = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + return out; + } + } + return null; +}; +Splitter.prototype.flush = function () { + if (this.cache.length) return this.cache; +}; +function unpad(last) { + var padded = last[15]; + if (padded < 1 || padded > 16) { + throw new Error('unable to decrypt data'); + } + var i = -1; + while (++i < padded) { + if (last[i + (16 - padded)] !== padded) { + throw new Error('unable to decrypt data'); + } + } + if (padded === 16) return; + return last.slice(0, 16 - padded); +} +function createDecipheriv(suite, password, iv) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + if (typeof iv === 'string') iv = Buffer.from(iv); + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length); + if (typeof password === 'string') password = Buffer.from(password); + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length); + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv, true); + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv, true); + } + return new Decipher(config.module, password, iv); +} +function createDecipher(suite, password) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + var keys = ebtk(password, false, config.key, config.iv); + return createDecipheriv(suite, keys.key, keys.iv); +} +exports.createDecipher = createDecipher; +exports.createDecipheriv = createDecipheriv; + +},{"./aes":189,"./authCipher":190,"./modes":202,"./streamCipher":205,"cipher-base":221,"evp_bytestokey":262,"inherits":279,"safe-buffer":332}],193:[function(require,module,exports){ +"use strict"; + +var MODES = require('./modes'); +var AuthCipher = require('./authCipher'); +var Buffer = require('safe-buffer').Buffer; +var StreamCipher = require('./streamCipher'); +var Transform = require('cipher-base'); +var aes = require('./aes'); +var ebtk = require('evp_bytestokey'); +var inherits = require('inherits'); +function Cipher(mode, key, iv) { + Transform.call(this); + this._cache = new Splitter(); + this._cipher = new aes.AES(key); + this._prev = Buffer.from(iv); + this._mode = mode; + this._autopadding = true; +} +inherits(Cipher, Transform); +Cipher.prototype._update = function (data) { + this._cache.add(data); + var chunk; + var thing; + var out = []; + while (chunk = this._cache.get()) { + thing = this._mode.encrypt(this, chunk); + out.push(thing); + } + return Buffer.concat(out); +}; +var PADDING = Buffer.alloc(16, 0x10); +Cipher.prototype._final = function () { + var chunk = this._cache.flush(); + if (this._autopadding) { + chunk = this._mode.encrypt(this, chunk); + this._cipher.scrub(); + return chunk; + } + if (!chunk.equals(PADDING)) { + this._cipher.scrub(); + throw new Error('data not multiple of block length'); + } +}; +Cipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo; + return this; +}; +function Splitter() { + this.cache = Buffer.allocUnsafe(0); +} +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]); +}; +Splitter.prototype.get = function () { + if (this.cache.length > 15) { + var out = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + return out; + } + return null; +}; +Splitter.prototype.flush = function () { + var len = 16 - this.cache.length; + var padBuff = Buffer.allocUnsafe(len); + var i = -1; + while (++i < len) { + padBuff.writeUInt8(len, i); + } + return Buffer.concat([this.cache, padBuff]); +}; +function createCipheriv(suite, password, iv) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + if (typeof password === 'string') password = Buffer.from(password); + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length); + if (typeof iv === 'string') iv = Buffer.from(iv); + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length); + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv); + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv); + } + return new Cipher(config.module, password, iv); +} +function createCipher(suite, password) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + var keys = ebtk(password, false, config.key, config.iv); + return createCipheriv(suite, keys.key, keys.iv); +} +exports.createCipheriv = createCipheriv; +exports.createCipher = createCipher; + +},{"./aes":189,"./authCipher":190,"./modes":202,"./streamCipher":205,"cipher-base":221,"evp_bytestokey":262,"inherits":279,"safe-buffer":332}],194:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var ZEROES = Buffer.alloc(16, 0); +function toArray(buf) { + return [buf.readUInt32BE(0), buf.readUInt32BE(4), buf.readUInt32BE(8), buf.readUInt32BE(12)]; +} +function fromArray(out) { + var buf = Buffer.allocUnsafe(16); + buf.writeUInt32BE(out[0] >>> 0, 0); + buf.writeUInt32BE(out[1] >>> 0, 4); + buf.writeUInt32BE(out[2] >>> 0, 8); + buf.writeUInt32BE(out[3] >>> 0, 12); + return buf; +} +function GHASH(key) { + this.h = key; + this.state = Buffer.alloc(16, 0); + this.cache = Buffer.allocUnsafe(0); +} + +// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html +// by Juho Vähä-Herttua +GHASH.prototype.ghash = function (block) { + var i = -1; + while (++i < block.length) { + this.state[i] ^= block[i]; + } + this._multiply(); +}; +GHASH.prototype._multiply = function () { + var Vi = toArray(this.h); + var Zi = [0, 0, 0, 0]; + var j, xi, lsbVi; + var i = -1; + while (++i < 128) { + xi = (this.state[~~(i / 8)] & 1 << 7 - i % 8) !== 0; + if (xi) { + // Z_i+1 = Z_i ^ V_i + Zi[0] ^= Vi[0]; + Zi[1] ^= Vi[1]; + Zi[2] ^= Vi[2]; + Zi[3] ^= Vi[3]; + } + + // Store the value of LSB(V_i) + lsbVi = (Vi[3] & 1) !== 0; + + // V_i+1 = V_i >> 1 + for (j = 3; j > 0; j--) { + Vi[j] = Vi[j] >>> 1 | (Vi[j - 1] & 1) << 31; + } + Vi[0] = Vi[0] >>> 1; + + // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R + if (lsbVi) { + Vi[0] = Vi[0] ^ 0xe1 << 24; + } + } + this.state = fromArray(Zi); +}; +GHASH.prototype.update = function (buf) { + this.cache = Buffer.concat([this.cache, buf]); + var chunk; + while (this.cache.length >= 16) { + chunk = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + this.ghash(chunk); + } +}; +GHASH.prototype.final = function (abl, bl) { + if (this.cache.length) { + this.ghash(Buffer.concat([this.cache, ZEROES], 16)); + } + this.ghash(fromArray([0, abl, 0, bl])); + return this.state; +}; +module.exports = GHASH; + +},{"safe-buffer":332}],195:[function(require,module,exports){ +"use strict"; + +function incr32(iv) { + var len = iv.length; + var item; + while (len--) { + item = iv.readUInt8(len); + if (item === 255) { + iv.writeUInt8(0, len); + } else { + item++; + iv.writeUInt8(item, len); + break; + } + } +} +module.exports = incr32; + +},{}],196:[function(require,module,exports){ +"use strict"; + +var xor = require('buffer-xor'); +exports.encrypt = function (self, block) { + var data = xor(block, self._prev); + self._prev = self._cipher.encryptBlock(data); + return self._prev; +}; +exports.decrypt = function (self, block) { + var pad = self._prev; + self._prev = block; + var out = self._cipher.decryptBlock(block); + return xor(out, pad); +}; + +},{"buffer-xor":219}],197:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var xor = require('buffer-xor'); +function encryptStart(self, data, decrypt) { + var len = data.length; + var out = xor(data, self._cache); + self._cache = self._cache.slice(len); + self._prev = Buffer.concat([self._prev, decrypt ? data : out]); + return out; +} +exports.encrypt = function (self, data, decrypt) { + var out = Buffer.allocUnsafe(0); + var len; + while (data.length) { + if (self._cache.length === 0) { + self._cache = self._cipher.encryptBlock(self._prev); + self._prev = Buffer.allocUnsafe(0); + } + if (self._cache.length <= data.length) { + len = self._cache.length; + out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]); + data = data.slice(len); + } else { + out = Buffer.concat([out, encryptStart(self, data, decrypt)]); + break; + } + } + return out; +}; + +},{"buffer-xor":219,"safe-buffer":332}],198:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +function encryptByte(self, byteParam, decrypt) { + var pad; + var i = -1; + var len = 8; + var out = 0; + var bit, value; + while (++i < len) { + pad = self._cipher.encryptBlock(self._prev); + bit = byteParam & 1 << 7 - i ? 0x80 : 0; + value = pad[0] ^ bit; + out += (value & 0x80) >> i % 8; + self._prev = shiftIn(self._prev, decrypt ? bit : value); + } + return out; +} +function shiftIn(buffer, value) { + var len = buffer.length; + var i = -1; + var out = Buffer.allocUnsafe(buffer.length); + buffer = Buffer.concat([buffer, Buffer.from([value])]); + while (++i < len) { + out[i] = buffer[i] << 1 | buffer[i + 1] >> 7; + } + return out; +} +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length; + var out = Buffer.allocUnsafe(len); + var i = -1; + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt); + } + return out; +}; + +},{"safe-buffer":332}],199:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +function encryptByte(self, byteParam, decrypt) { + var pad = self._cipher.encryptBlock(self._prev); + var out = pad[0] ^ byteParam; + self._prev = Buffer.concat([self._prev.slice(1), Buffer.from([decrypt ? byteParam : out])]); + return out; +} +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length; + var out = Buffer.allocUnsafe(len); + var i = -1; + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt); + } + return out; +}; + +},{"safe-buffer":332}],200:[function(require,module,exports){ +"use strict"; + +var xor = require('buffer-xor'); +var Buffer = require('safe-buffer').Buffer; +var incr32 = require('../incr32'); +function getBlock(self) { + var out = self._cipher.encryptBlockRaw(self._prev); + incr32(self._prev); + return out; +} +var blockSize = 16; +exports.encrypt = function (self, chunk) { + var chunkNum = Math.ceil(chunk.length / blockSize); + var start = self._cache.length; + self._cache = Buffer.concat([self._cache, Buffer.allocUnsafe(chunkNum * blockSize)]); + for (var i = 0; i < chunkNum; i++) { + var out = getBlock(self); + var offset = start + i * blockSize; + self._cache.writeUInt32BE(out[0], offset + 0); + self._cache.writeUInt32BE(out[1], offset + 4); + self._cache.writeUInt32BE(out[2], offset + 8); + self._cache.writeUInt32BE(out[3], offset + 12); + } + var pad = self._cache.slice(0, chunk.length); + self._cache = self._cache.slice(chunk.length); + return xor(chunk, pad); +}; + +},{"../incr32":195,"buffer-xor":219,"safe-buffer":332}],201:[function(require,module,exports){ +"use strict"; + +exports.encrypt = function (self, block) { + return self._cipher.encryptBlock(block); +}; +exports.decrypt = function (self, block) { + return self._cipher.decryptBlock(block); +}; + +},{}],202:[function(require,module,exports){ +"use strict"; + +var modeModules = { + ECB: require('./ecb'), + CBC: require('./cbc'), + CFB: require('./cfb'), + CFB8: require('./cfb8'), + CFB1: require('./cfb1'), + OFB: require('./ofb'), + CTR: require('./ctr'), + GCM: require('./ctr') +}; +var modes = require('./list.json'); +for (var key in modes) { + modes[key].module = modeModules[modes[key].mode]; +} +module.exports = modes; + +},{"./cbc":196,"./cfb":197,"./cfb1":198,"./cfb8":199,"./ctr":200,"./ecb":201,"./list.json":203,"./ofb":204}],203:[function(require,module,exports){ +module.exports={ + "aes-128-ecb": { + "cipher": "AES", + "key": 128, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-192-ecb": { + "cipher": "AES", + "key": 192, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-256-ecb": { + "cipher": "AES", + "key": 256, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-128-cbc": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-192-cbc": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-256-cbc": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes128": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes192": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes256": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-128-cfb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-192-cfb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-256-cfb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-128-cfb8": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-192-cfb8": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-256-cfb8": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-128-cfb1": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-192-cfb1": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-256-cfb1": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-128-ofb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-192-ofb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-256-ofb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-128-ctr": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-192-ctr": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-256-ctr": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-128-gcm": { + "cipher": "AES", + "key": 128, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-192-gcm": { + "cipher": "AES", + "key": 192, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-256-gcm": { + "cipher": "AES", + "key": 256, + "iv": 12, + "mode": "GCM", + "type": "auth" + } +} + +},{}],204:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var xor = require('buffer-xor'); +function getBlock(self) { + self._prev = self._cipher.encryptBlock(self._prev); + return self._prev; +} +exports.encrypt = function (self, chunk) { + while (self._cache.length < chunk.length) { + self._cache = Buffer.concat([self._cache, getBlock(self)]); + } + var pad = self._cache.slice(0, chunk.length); + self._cache = self._cache.slice(chunk.length); + return xor(chunk, pad); +}; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"buffer":220,"buffer-xor":219}],205:[function(require,module,exports){ +"use strict"; + +var aes = require('./aes'); +var Buffer = require('safe-buffer').Buffer; +var Transform = require('cipher-base'); +var inherits = require('inherits'); +function StreamCipher(mode, key, iv, decrypt) { + Transform.call(this); + this._cipher = new aes.AES(key); + this._prev = Buffer.from(iv); + this._cache = Buffer.allocUnsafe(0); + this._secCache = Buffer.allocUnsafe(0); + this._decrypt = decrypt; + this._mode = mode; +} +inherits(StreamCipher, Transform); +StreamCipher.prototype._update = function (chunk) { + return this._mode.encrypt(this, chunk, this._decrypt); +}; +StreamCipher.prototype._final = function () { + this._cipher.scrub(); +}; +module.exports = StreamCipher; + +},{"./aes":189,"cipher-base":221,"inherits":279,"safe-buffer":332}],206:[function(require,module,exports){ +"use strict"; + +var DES = require('browserify-des'); +var aes = require('browserify-aes/browser'); +var aesModes = require('browserify-aes/modes'); +var desModes = require('browserify-des/modes'); +var ebtk = require('evp_bytestokey'); +function createCipher(suite, password) { + suite = suite.toLowerCase(); + var keyLen, ivLen; + if (aesModes[suite]) { + keyLen = aesModes[suite].key; + ivLen = aesModes[suite].iv; + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8; + ivLen = desModes[suite].iv; + } else { + throw new TypeError('invalid suite type'); + } + var keys = ebtk(password, false, keyLen, ivLen); + return createCipheriv(suite, keys.key, keys.iv); +} +function createDecipher(suite, password) { + suite = suite.toLowerCase(); + var keyLen, ivLen; + if (aesModes[suite]) { + keyLen = aesModes[suite].key; + ivLen = aesModes[suite].iv; + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8; + ivLen = desModes[suite].iv; + } else { + throw new TypeError('invalid suite type'); + } + var keys = ebtk(password, false, keyLen, ivLen); + return createDecipheriv(suite, keys.key, keys.iv); +} +function createCipheriv(suite, key, iv) { + suite = suite.toLowerCase(); + if (aesModes[suite]) return aes.createCipheriv(suite, key, iv); + if (desModes[suite]) return new DES({ + key: key, + iv: iv, + mode: suite + }); + throw new TypeError('invalid suite type'); +} +function createDecipheriv(suite, key, iv) { + suite = suite.toLowerCase(); + if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv); + if (desModes[suite]) return new DES({ + key: key, + iv: iv, + mode: suite, + decrypt: true + }); + throw new TypeError('invalid suite type'); +} +function getCiphers() { + return Object.keys(desModes).concat(aes.getCiphers()); +} +exports.createCipher = exports.Cipher = createCipher; +exports.createCipheriv = exports.Cipheriv = createCipheriv; +exports.createDecipher = exports.Decipher = createDecipher; +exports.createDecipheriv = exports.Decipheriv = createDecipheriv; +exports.listCiphers = exports.getCiphers = getCiphers; + +},{"browserify-aes/browser":191,"browserify-aes/modes":202,"browserify-des":207,"browserify-des/modes":208,"evp_bytestokey":262}],207:[function(require,module,exports){ +"use strict"; + +var CipherBase = require('cipher-base'); +var des = require('des.js'); +var inherits = require('inherits'); +var Buffer = require('safe-buffer').Buffer; +var modes = { + 'des-ede3-cbc': des.CBC.instantiate(des.EDE), + 'des-ede3': des.EDE, + 'des-ede-cbc': des.CBC.instantiate(des.EDE), + 'des-ede': des.EDE, + 'des-cbc': des.CBC.instantiate(des.DES), + 'des-ecb': des.DES +}; +modes.des = modes['des-cbc']; +modes.des3 = modes['des-ede3-cbc']; +module.exports = DES; +inherits(DES, CipherBase); +function DES(opts) { + CipherBase.call(this); + var modeName = opts.mode.toLowerCase(); + var mode = modes[modeName]; + var type; + if (opts.decrypt) { + type = 'decrypt'; + } else { + type = 'encrypt'; + } + var key = opts.key; + if (!Buffer.isBuffer(key)) { + key = Buffer.from(key); + } + if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { + key = Buffer.concat([key, key.slice(0, 8)]); + } + var iv = opts.iv; + if (!Buffer.isBuffer(iv)) { + iv = Buffer.from(iv); + } + this._des = mode.create({ + key: key, + iv: iv, + type: type + }); +} +DES.prototype._update = function (data) { + return Buffer.from(this._des.update(data)); +}; +DES.prototype._final = function () { + return Buffer.from(this._des.final()); +}; + +},{"cipher-base":221,"des.js":233,"inherits":279,"safe-buffer":332}],208:[function(require,module,exports){ +"use strict"; + +exports['des-ecb'] = { + key: 8, + iv: 0 +}; +exports['des-cbc'] = exports.des = { + key: 8, + iv: 8 +}; +exports['des-ede3-cbc'] = exports.des3 = { + key: 24, + iv: 8 +}; +exports['des-ede3'] = { + key: 24, + iv: 0 +}; +exports['des-ede-cbc'] = { + key: 16, + iv: 8 +}; +exports['des-ede'] = { + key: 16, + iv: 0 +}; + +},{}],209:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var BN = require('bn.js'); +var randomBytes = require('randombytes'); +function blind(priv) { + var r = getr(priv); + var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed(); + return { + blinder: blinder, + unblinder: r.invm(priv.modulus) + }; +} +function getr(priv) { + var len = priv.modulus.byteLength(); + var r; + do { + r = new BN(randomBytes(len)); + } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)); + return r; +} +function crt(msg, priv) { + var blinds = blind(priv); + var len = priv.modulus.byteLength(); + var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus); + var c1 = blinded.toRed(BN.mont(priv.prime1)); + var c2 = blinded.toRed(BN.mont(priv.prime2)); + var qinv = priv.coefficient; + var p = priv.prime1; + var q = priv.prime2; + var m1 = c1.redPow(priv.exponent1).fromRed(); + var m2 = c2.redPow(priv.exponent2).fromRed(); + var h = m1.isub(m2).imul(qinv).umod(p).imul(q); + return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len); +} +crt.getr = getr; +module.exports = crt; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"bn.js":186,"buffer":220,"randombytes":314}],210:[function(require,module,exports){ +"use strict"; + +module.exports = require('./browser/algorithms.json'); + +},{"./browser/algorithms.json":211}],211:[function(require,module,exports){ +module.exports={ + "sha224WithRSAEncryption": { + "sign": "rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "RSA-SHA224": { + "sign": "ecdsa/rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "sha256WithRSAEncryption": { + "sign": "rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "RSA-SHA256": { + "sign": "ecdsa/rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "sha384WithRSAEncryption": { + "sign": "rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "RSA-SHA384": { + "sign": "ecdsa/rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "sha512WithRSAEncryption": { + "sign": "rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA512": { + "sign": "ecdsa/rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA1": { + "sign": "rsa", + "hash": "sha1", + "id": "3021300906052b0e03021a05000414" + }, + "ecdsa-with-SHA1": { + "sign": "ecdsa", + "hash": "sha1", + "id": "" + }, + "sha256": { + "sign": "ecdsa", + "hash": "sha256", + "id": "" + }, + "sha224": { + "sign": "ecdsa", + "hash": "sha224", + "id": "" + }, + "sha384": { + "sign": "ecdsa", + "hash": "sha384", + "id": "" + }, + "sha512": { + "sign": "ecdsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-SHA1": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-WITH-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-WITH-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-WITH-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-WITH-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-RIPEMD160": { + "sign": "dsa", + "hash": "rmd160", + "id": "" + }, + "ripemd160WithRSA": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "RSA-RIPEMD160": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "md5WithRSAEncryption": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + }, + "RSA-MD5": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + } +} + +},{}],212:[function(require,module,exports){ +module.exports={ + "1.3.132.0.10": "secp256k1", + "1.3.132.0.33": "p224", + "1.2.840.10045.3.1.1": "p192", + "1.2.840.10045.3.1.7": "p256", + "1.3.132.0.34": "p384", + "1.3.132.0.35": "p521" +} + +},{}],213:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var createHash = require('create-hash'); +var stream = require('readable-stream'); +var inherits = require('inherits'); +var sign = require('./sign'); +var verify = require('./verify'); +var algorithms = require('./algorithms.json'); +Object.keys(algorithms).forEach(function (key) { + algorithms[key].id = Buffer.from(algorithms[key].id, 'hex'); + algorithms[key.toLowerCase()] = algorithms[key]; +}); +function Sign(algorithm) { + stream.Writable.call(this); + var data = algorithms[algorithm]; + if (!data) throw new Error('Unknown message digest'); + this._hashType = data.hash; + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} +inherits(Sign, stream.Writable); +Sign.prototype._write = function _write(data, _, done) { + this._hash.update(data); + done(); +}; +Sign.prototype.update = function update(data, enc) { + if (typeof data === 'string') data = Buffer.from(data, enc); + this._hash.update(data); + return this; +}; +Sign.prototype.sign = function signMethod(key, enc) { + this.end(); + var hash = this._hash.digest(); + var sig = sign(hash, key, this._hashType, this._signType, this._tag); + return enc ? sig.toString(enc) : sig; +}; +function Verify(algorithm) { + stream.Writable.call(this); + var data = algorithms[algorithm]; + if (!data) throw new Error('Unknown message digest'); + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} +inherits(Verify, stream.Writable); +Verify.prototype._write = function _write(data, _, done) { + this._hash.update(data); + done(); +}; +Verify.prototype.update = function update(data, enc) { + if (typeof data === 'string') data = Buffer.from(data, enc); + this._hash.update(data); + return this; +}; +Verify.prototype.verify = function verifyMethod(key, sig, enc) { + if (typeof sig === 'string') sig = Buffer.from(sig, enc); + this.end(); + var hash = this._hash.digest(); + return verify(sig, hash, key, this._signType, this._tag); +}; +function createSign(algorithm) { + return new Sign(algorithm); +} +function createVerify(algorithm) { + return new Verify(algorithm); +} +module.exports = { + Sign: createSign, + Verify: createVerify, + createSign: createSign, + createVerify: createVerify +}; + +},{"./algorithms.json":211,"./sign":214,"./verify":215,"create-hash":225,"inherits":279,"readable-stream":330,"safe-buffer":332}],214:[function(require,module,exports){ +"use strict"; + +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var Buffer = require('safe-buffer').Buffer; +var createHmac = require('create-hmac'); +var crt = require('browserify-rsa'); +var EC = require('elliptic').ec; +var BN = require('bn.js'); +var parseKeys = require('parse-asn1'); +var curves = require('./curves.json'); +function sign(hash, key, hashType, signType, tag) { + var priv = parseKeys(key); + if (priv.curve) { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type'); + return ecSign(hash, priv); + } else if (priv.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong private key type'); + return dsaSign(hash, priv, hashType); + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type'); + } + hash = Buffer.concat([tag, hash]); + var len = priv.modulus.byteLength(); + var pad = [0, 1]; + while (hash.length + pad.length + 1 < len) pad.push(0xff); + pad.push(0x00); + var i = -1; + while (++i < hash.length) pad.push(hash[i]); + var out = crt(pad, priv); + return out; +} +function ecSign(hash, priv) { + var curveId = curves[priv.curve.join('.')]; + if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')); + var curve = new EC(curveId); + var key = curve.keyFromPrivate(priv.privateKey); + var out = key.sign(hash); + return Buffer.from(out.toDER()); +} +function dsaSign(hash, priv, algo) { + var x = priv.params.priv_key; + var p = priv.params.p; + var q = priv.params.q; + var g = priv.params.g; + var r = new BN(0); + var k; + var H = bits2int(hash, q).mod(q); + var s = false; + var kv = getKey(x, q, hash, algo); + while (s === false) { + k = makeKey(q, kv, algo); + r = makeR(g, k, p, q); + s = k.invm(q).imul(H.add(x.mul(r))).mod(q); + if (s.cmpn(0) === 0) { + s = false; + r = new BN(0); + } + } + return toDER(r, s); +} +function toDER(r, s) { + r = r.toArray(); + s = s.toArray(); + + // Pad values + if (r[0] & 0x80) r = [0].concat(r); + if (s[0] & 0x80) s = [0].concat(s); + var total = r.length + s.length + 4; + var res = [0x30, total, 0x02, r.length]; + res = res.concat(r, [0x02, s.length], s); + return Buffer.from(res); +} +function getKey(x, q, hash, algo) { + x = Buffer.from(x.toArray()); + if (x.length < q.byteLength()) { + var zeros = Buffer.alloc(q.byteLength() - x.length); + x = Buffer.concat([zeros, x]); + } + var hlen = hash.length; + var hbits = bits2octets(hash, q); + var v = Buffer.alloc(hlen); + v.fill(1); + var k = Buffer.alloc(hlen); + k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + return { + k: k, + v: v + }; +} +function bits2int(obits, q) { + var bits = new BN(obits); + var shift = (obits.length << 3) - q.bitLength(); + if (shift > 0) bits.ishrn(shift); + return bits; +} +function bits2octets(bits, q) { + bits = bits2int(bits, q); + bits = bits.mod(q); + var out = Buffer.from(bits.toArray()); + if (out.length < q.byteLength()) { + var zeros = Buffer.alloc(q.byteLength() - out.length); + out = Buffer.concat([zeros, out]); + } + return out; +} +function makeKey(q, kv, algo) { + var t; + var k; + do { + t = Buffer.alloc(0); + while (t.length * 8 < q.bitLength()) { + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + t = Buffer.concat([t, kv.v]); + } + k = bits2int(t, q); + kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest(); + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + } while (k.cmp(q) !== -1); + return k; +} +function makeR(g, k, p, q) { + return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); +} +module.exports = sign; +module.exports.getKey = getKey; +module.exports.makeKey = makeKey; + +},{"./curves.json":212,"bn.js":186,"browserify-rsa":209,"create-hmac":227,"elliptic":244,"parse-asn1":298,"safe-buffer":332}],215:[function(require,module,exports){ +"use strict"; + +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var Buffer = require('safe-buffer').Buffer; +var BN = require('bn.js'); +var EC = require('elliptic').ec; +var parseKeys = require('parse-asn1'); +var curves = require('./curves.json'); +function verify(sig, hash, key, signType, tag) { + var pub = parseKeys(key); + if (pub.type === 'ec') { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type'); + return ecVerify(sig, hash, pub); + } else if (pub.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong public key type'); + return dsaVerify(sig, hash, pub); + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type'); + } + hash = Buffer.concat([tag, hash]); + var len = pub.modulus.byteLength(); + var pad = [1]; + var padNum = 0; + while (hash.length + pad.length + 2 < len) { + pad.push(0xff); + padNum++; + } + pad.push(0x00); + var i = -1; + while (++i < hash.length) { + pad.push(hash[i]); + } + pad = Buffer.from(pad); + var red = BN.mont(pub.modulus); + sig = new BN(sig).toRed(red); + sig = sig.redPow(new BN(pub.publicExponent)); + sig = Buffer.from(sig.fromRed().toArray()); + var out = padNum < 8 ? 1 : 0; + len = Math.min(sig.length, pad.length); + if (sig.length !== pad.length) out = 1; + i = -1; + while (++i < len) out |= sig[i] ^ pad[i]; + return out === 0; +} +function ecVerify(sig, hash, pub) { + var curveId = curves[pub.data.algorithm.curve.join('.')]; + if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); + var curve = new EC(curveId); + var pubkey = pub.data.subjectPrivateKey.data; + return curve.verify(hash, sig, pubkey); +} +function dsaVerify(sig, hash, pub) { + var p = pub.data.p; + var q = pub.data.q; + var g = pub.data.g; + var y = pub.data.pub_key; + var unpacked = parseKeys.signature.decode(sig, 'der'); + var s = unpacked.s; + var r = unpacked.r; + checkValue(s, q); + checkValue(r, q); + var montp = BN.mont(p); + var w = s.invm(q); + var v = g.toRed(montp).redPow(new BN(hash).mul(w).mod(q)).fromRed().mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()).mod(p).mod(q); + return v.cmp(r) === 0; +} +function checkValue(b, q) { + if (b.cmpn(0) <= 0) throw new Error('invalid sig'); + if (b.cmp(q) >= q) throw new Error('invalid sig'); +} +module.exports = verify; + +},{"./curves.json":212,"bn.js":186,"elliptic":244,"parse-asn1":298,"safe-buffer":332}],216:[function(require,module,exports){ +"use strict"; + +},{}],217:[function(require,module,exports){ +"use strict"; + +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer'); +var Buffer = buffer.Buffer; + +// alternative to using Object.keys for old browsers +function copyProps(src, dst) { + for (var key in src) { + dst[key] = src[key]; + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer; +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports); + exports.Buffer = SafeBuffer; +} +function SafeBuffer(arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length); +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer); +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number'); + } + return Buffer(arg, encodingOrOffset, length); +}; +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + var buf = Buffer(size); + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + } else { + buf.fill(0); + } + return buf; +}; +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + return Buffer(size); +}; +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + return buffer.SlowBuffer(size); +}; + +},{"buffer":220}],218:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ +var Buffer = require('safe-buffer').Buffer; +/**/ + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + case 'raw': + return true; + default: + return false; + } +}; +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +} +; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. If an invalid byte is detected, -2 is returned. +function utf8CheckByte(byte) { + if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; + return byte >> 6 === 0x02 ? -1 : -2; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character is added when ending on a partial +// character. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} + +},{"safe-buffer":217}],219:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +module.exports = function xor(a, b) { + var length = Math.min(a.length, b.length); + var buffer = new Buffer(length); + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i]; + } + return buffer; +}; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"buffer":220}],220:[function(require,module,exports){ +(function (Buffer){(function (){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict'; + +var base64 = require('base64-js'); +var ieee754 = require('ieee754'); +exports.Buffer = Buffer; +exports.SlowBuffer = SlowBuffer; +exports.INSPECT_MAX_BYTES = 50; +var K_MAX_LENGTH = 0x7fffffff; +exports.kMaxLength = K_MAX_LENGTH; + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport(); +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') { + console.error('This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'); +} +function typedArraySupport() { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1); + arr.__proto__ = { + __proto__: Uint8Array.prototype, + foo: function () { + return 42; + } + }; + return arr.foo() === 42; + } catch (e) { + return false; + } +} +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined; + return this.buffer; + } +}); +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined; + return this.byteOffset; + } +}); +function createBuffer(length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"'); + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length); + buf.__proto__ = Buffer.prototype; + return buf; +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer(arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError('The "string" argument must be of type string. Received type number'); + } + return allocUnsafe(arg); + } + return from(arg, encodingOrOffset, length); +} + +// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 +if (typeof Symbol !== 'undefined' && Symbol.species != null && Buffer[Symbol.species] === Buffer) { + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true, + enumerable: false, + writable: false + }); +} +Buffer.poolSize = 8192; // not used by this implementation + +function from(value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset); + } + if (ArrayBuffer.isView(value)) { + return fromArrayLike(value); + } + if (value == null) { + throw TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value); + } + if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) { + return fromArrayBuffer(value, encodingOrOffset, length); + } + if (typeof value === 'number') { + throw new TypeError('The "value" argument must not be of type number. Received type number'); + } + var valueOf = value.valueOf && value.valueOf(); + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length); + } + var b = fromObject(value); + if (b) return b; + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length); + } + throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value); +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length); +}; + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Buffer.prototype.__proto__ = Uint8Array.prototype; +Buffer.__proto__ = Uint8Array; +function assertSize(size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number'); + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"'); + } +} +function alloc(size, fill, encoding) { + assertSize(size); + if (size <= 0) { + return createBuffer(size); + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill); + } + return createBuffer(size); +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding); +}; +function allocUnsafe(size) { + assertSize(size); + return createBuffer(size < 0 ? 0 : checked(size) | 0); +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size); +}; +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size); +}; +function fromString(string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8'; + } + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding); + } + var length = byteLength(string, encoding) | 0; + var buf = createBuffer(length); + var actual = buf.write(string, encoding); + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual); + } + return buf; +} +function fromArrayLike(array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0; + var buf = createBuffer(length); + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255; + } + return buf; +} +function fromArrayBuffer(array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds'); + } + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds'); + } + var buf; + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array); + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset); + } else { + buf = new Uint8Array(array, byteOffset, length); + } + + // Return an augmented `Uint8Array` instance + buf.__proto__ = Buffer.prototype; + return buf; +} +function fromObject(obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0; + var buf = createBuffer(len); + if (buf.length === 0) { + return buf; + } + obj.copy(buf, 0, 0, len); + return buf; + } + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0); + } + return fromArrayLike(obj); + } + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data); + } +} +function checked(length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes'); + } + return length | 0; +} +function SlowBuffer(length) { + if (+length != length) { + // eslint-disable-line eqeqeq + length = 0; + } + return Buffer.alloc(+length); +} +Buffer.isBuffer = function isBuffer(b) { + return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false +}; + +Buffer.compare = function compare(a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength); + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength); + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'); + } + if (a === b) return 0; + var x = a.length; + var y = b.length; + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break; + } + } + if (x < y) return -1; + if (y < x) return 1; + return 0; +}; +Buffer.isEncoding = function isEncoding(encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true; + default: + return false; + } +}; +Buffer.concat = function concat(list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + if (list.length === 0) { + return Buffer.alloc(0); + } + var i; + if (length === undefined) { + length = 0; + for (i = 0; i < list.length; ++i) { + length += list[i].length; + } + } + var buffer = Buffer.allocUnsafe(length); + var pos = 0; + for (i = 0; i < list.length; ++i) { + var buf = list[i]; + if (isInstance(buf, Uint8Array)) { + buf = Buffer.from(buf); + } + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + buf.copy(buffer, pos); + pos += buf.length; + } + return buffer; +}; +function byteLength(string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length; + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength; + } + if (typeof string !== 'string') { + throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + typeof string); + } + var len = string.length; + var mustMatch = arguments.length > 2 && arguments[2] === true; + if (!mustMatch && len === 0) return 0; + + // Use a for loop to avoid recursion + var loweredCase = false; + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len; + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2; + case 'hex': + return len >>> 1; + case 'base64': + return base64ToBytes(string).length; + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8 + } + + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } +} +Buffer.byteLength = byteLength; +function slowToString(encoding, start, end) { + var loweredCase = false; + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0; + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return ''; + } + if (end === undefined || end > this.length) { + end = this.length; + } + if (end <= 0) { + return ''; + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0; + start >>>= 0; + if (end <= start) { + return ''; + } + if (!encoding) encoding = 'utf8'; + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end); + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end); + case 'ascii': + return asciiSlice(this, start, end); + case 'latin1': + case 'binary': + return latin1Slice(this, start, end); + case 'base64': + return base64Slice(this, start, end); + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end); + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = (encoding + '').toLowerCase(); + loweredCase = true; + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true; +function swap(b, n, m) { + var i = b[n]; + b[n] = b[m]; + b[m] = i; +} +Buffer.prototype.swap16 = function swap16() { + var len = this.length; + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits'); + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1); + } + return this; +}; +Buffer.prototype.swap32 = function swap32() { + var len = this.length; + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits'); + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3); + swap(this, i + 1, i + 2); + } + return this; +}; +Buffer.prototype.swap64 = function swap64() { + var len = this.length; + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits'); + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7); + swap(this, i + 1, i + 6); + swap(this, i + 2, i + 5); + swap(this, i + 3, i + 4); + } + return this; +}; +Buffer.prototype.toString = function toString() { + var length = this.length; + if (length === 0) return ''; + if (arguments.length === 0) return utf8Slice(this, 0, length); + return slowToString.apply(this, arguments); +}; +Buffer.prototype.toLocaleString = Buffer.prototype.toString; +Buffer.prototype.equals = function equals(b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer'); + if (this === b) return true; + return Buffer.compare(this, b) === 0; +}; +Buffer.prototype.inspect = function inspect() { + var str = ''; + var max = exports.INSPECT_MAX_BYTES; + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim(); + if (this.length > max) str += ' ... '; + return ''; +}; +Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength); + } + if (!Buffer.isBuffer(target)) { + throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + typeof target); + } + if (start === undefined) { + start = 0; + } + if (end === undefined) { + end = target ? target.length : 0; + } + if (thisStart === undefined) { + thisStart = 0; + } + if (thisEnd === undefined) { + thisEnd = this.length; + } + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index'); + } + if (thisStart >= thisEnd && start >= end) { + return 0; + } + if (thisStart >= thisEnd) { + return -1; + } + if (start >= end) { + return 1; + } + start >>>= 0; + end >>>= 0; + thisStart >>>= 0; + thisEnd >>>= 0; + if (this === target) return 0; + var x = thisEnd - thisStart; + var y = end - start; + var len = Math.min(x, y); + var thisCopy = this.slice(thisStart, thisEnd); + var targetCopy = target.slice(start, end); + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i]; + y = targetCopy[i]; + break; + } + } + if (x < y) return -1; + if (y < x) return 1; + return 0; +}; + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1; + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset; + byteOffset = 0; + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff; + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000; + } + byteOffset = +byteOffset; // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : buffer.length - 1; + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset; + if (byteOffset >= buffer.length) { + if (dir) return -1;else byteOffset = buffer.length - 1; + } else if (byteOffset < 0) { + if (dir) byteOffset = 0;else return -1; + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding); + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1; + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir); + } else if (typeof val === 'number') { + val = val & 0xFF; // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset); + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset); + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir); + } + throw new TypeError('val must be string, number or Buffer'); +} +function arrayIndexOf(arr, val, byteOffset, encoding, dir) { + var indexSize = 1; + var arrLength = arr.length; + var valLength = val.length; + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase(); + if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1; + } + indexSize = 2; + arrLength /= 2; + valLength /= 2; + byteOffset /= 2; + } + } + function read(buf, i) { + if (indexSize === 1) { + return buf[i]; + } else { + return buf.readUInt16BE(i * indexSize); + } + } + var i; + if (dir) { + var foundIndex = -1; + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i; + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize; + } else { + if (foundIndex !== -1) i -= i - foundIndex; + foundIndex = -1; + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; + for (i = byteOffset; i >= 0; i--) { + var found = true; + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false; + break; + } + } + if (found) return i; + } + } + return -1; +} +Buffer.prototype.includes = function includes(val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1; +}; +Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true); +}; +Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false); +}; +function hexWrite(buf, string, offset, length) { + offset = Number(offset) || 0; + var remaining = buf.length - offset; + if (!length) { + length = remaining; + } else { + length = Number(length); + if (length > remaining) { + length = remaining; + } + } + var strLen = string.length; + if (length > strLen / 2) { + length = strLen / 2; + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16); + if (numberIsNaN(parsed)) return i; + buf[offset + i] = parsed; + } + return i; +} +function utf8Write(buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); +} +function asciiWrite(buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length); +} +function latin1Write(buf, string, offset, length) { + return asciiWrite(buf, string, offset, length); +} +function base64Write(buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length); +} +function ucs2Write(buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); +} +Buffer.prototype.write = function write(string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8'; + length = this.length; + offset = 0; + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset; + length = this.length; + offset = 0; + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0; + if (isFinite(length)) { + length = length >>> 0; + if (encoding === undefined) encoding = 'utf8'; + } else { + encoding = length; + length = undefined; + } + } else { + throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported'); + } + var remaining = this.length - offset; + if (length === undefined || length > remaining) length = remaining; + if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds'); + } + if (!encoding) encoding = 'utf8'; + var loweredCase = false; + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length); + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length); + case 'ascii': + return asciiWrite(this, string, offset, length); + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length); + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length); + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length); + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } +}; +Buffer.prototype.toJSON = function toJSON() { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + }; +}; +function base64Slice(buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf); + } else { + return base64.fromByteArray(buf.slice(start, end)); + } +} +function utf8Slice(buf, start, end) { + end = Math.min(buf.length, end); + var res = []; + var i = start; + while (i < end) { + var firstByte = buf[i]; + var codePoint = null; + var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1; + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint; + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte; + } + break; + case 2: + secondByte = buf[i + 1]; + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F; + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint; + } + } + break; + case 3: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F; + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint; + } + } + break; + case 4: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + fourthByte = buf[i + 3]; + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F; + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint; + } + } + } + } + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD; + bytesPerSequence = 1; + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000; + res.push(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + res.push(codePoint); + i += bytesPerSequence; + } + return decodeCodePointsArray(res); +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000; +function decodeCodePointsArray(codePoints) { + var len = codePoints.length; + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints); // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = ''; + var i = 0; + while (i < len) { + res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)); + } + return res; +} +function asciiSlice(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F); + } + return ret; +} +function latin1Slice(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]); + } + return ret; +} +function hexSlice(buf, start, end) { + var len = buf.length; + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + var out = ''; + for (var i = start; i < end; ++i) { + out += toHex(buf[i]); + } + return out; +} +function utf16leSlice(buf, start, end) { + var bytes = buf.slice(start, end); + var res = ''; + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); + } + return res; +} +Buffer.prototype.slice = function slice(start, end) { + var len = this.length; + start = ~~start; + end = end === undefined ? len : ~~end; + if (start < 0) { + start += len; + if (start < 0) start = 0; + } else if (start > len) { + start = len; + } + if (end < 0) { + end += len; + if (end < 0) end = 0; + } else if (end > len) { + end = len; + } + if (end < start) end = start; + var newBuf = this.subarray(start, end); + // Return an augmented `Uint8Array` instance + newBuf.__proto__ = Buffer.prototype; + return newBuf; +}; + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset(offset, ext, length) { + if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint'); + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length'); +} +Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) { + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + return val; +}; +Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) { + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) { + checkOffset(offset, byteLength, this.length); + } + var val = this[offset + --byteLength]; + var mul = 1; + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul; + } + return val; +}; +Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 1, this.length); + return this[offset]; +}; +Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] | this[offset + 1] << 8; +}; +Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] << 8 | this[offset + 1]; +}; +Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000; +}; +Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); +}; +Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) { + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; +}; +Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) { + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var i = byteLength; + var mul = 1; + var val = this[offset + --i]; + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul; + } + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; +}; +Buffer.prototype.readInt8 = function readInt8(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 1, this.length); + if (!(this[offset] & 0x80)) return this[offset]; + return (0xff - this[offset] + 1) * -1; +}; +Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset] | this[offset + 1] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; +}; +Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset + 1] | this[offset] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; +}; +Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; +}; +Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; +}; +Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return ieee754.read(this, offset, true, 23, 4); +}; +Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return ieee754.read(this, offset, false, 23, 4); +}; +Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 8, this.length); + return ieee754.read(this, offset, true, 52, 8); +}; +Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 8, this.length); + return ieee754.read(this, offset, false, 52, 8); +}; +function checkInt(buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds'); + if (offset + ext > buf.length) throw new RangeError('Index out of range'); +} +Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + var mul = 1; + var i = 0; + this[offset] = value & 0xFF; + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + return offset + byteLength; +}; +Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + var i = byteLength - 1; + var mul = 1; + this[offset + i] = value & 0xFF; + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + return offset + byteLength; +}; +Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0); + this[offset] = value & 0xff; + return offset + 1; +}; +Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + return offset + 2; +}; +Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + return offset + 2; +}; +Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + this[offset + 3] = value >>> 24; + this[offset + 2] = value >>> 16; + this[offset + 1] = value >>> 8; + this[offset] = value & 0xff; + return offset + 4; +}; +Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + return offset + 4; +}; +Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + var i = 0; + var mul = 1; + var sub = 0; + this[offset] = value & 0xFF; + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1; + } + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + return offset + byteLength; +}; +Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + var i = byteLength - 1; + var mul = 1; + var sub = 0; + this[offset + i] = value & 0xFF; + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1; + } + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + return offset + byteLength; +}; +Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (value < 0) value = 0xff + value + 1; + this[offset] = value & 0xff; + return offset + 1; +}; +Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + return offset + 2; +}; +Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + return offset + 2; +}; +Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + this[offset + 2] = value >>> 16; + this[offset + 3] = value >>> 24; + return offset + 4; +}; +Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (value < 0) value = 0xffffffff + value + 1; + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + return offset + 4; +}; +function checkIEEE754(buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range'); + if (offset < 0) throw new RangeError('Index out of range'); +} +function writeFloat(buf, value, offset, littleEndian, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38); + } + ieee754.write(buf, value, offset, littleEndian, 23, 4); + return offset + 4; +} +Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert); +}; +Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert); +}; +function writeDouble(buf, value, offset, littleEndian, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308); + } + ieee754.write(buf, value, offset, littleEndian, 52, 8); + return offset + 8; +} +Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert); +}; +Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert); +}; + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy(target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer'); + if (!start) start = 0; + if (!end && end !== 0) end = this.length; + if (targetStart >= target.length) targetStart = target.length; + if (!targetStart) targetStart = 0; + if (end > 0 && end < start) end = start; + + // Copy 0 bytes; we're done + if (end === start) return 0; + if (target.length === 0 || this.length === 0) return 0; + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds'); + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range'); + if (end < 0) throw new RangeError('sourceEnd out of bounds'); + + // Are we oob? + if (end > this.length) end = this.length; + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start; + } + var len = end - start; + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end); + } else if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (var i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start]; + } + } else { + Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart); + } + return len; +}; + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill(val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start; + start = 0; + end = this.length; + } else if (typeof end === 'string') { + encoding = end; + end = this.length; + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string'); + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding); + } + if (val.length === 1) { + var code = val.charCodeAt(0); + if (encoding === 'utf8' && code < 128 || encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code; + } + } + } else if (typeof val === 'number') { + val = val & 255; + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index'); + } + if (end <= start) { + return this; + } + start = start >>> 0; + end = end === undefined ? this.length : end >>> 0; + if (!val) val = 0; + var i; + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val; + } + } else { + var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding); + var len = bytes.length; + if (len === 0) { + throw new TypeError('The value "' + val + '" is invalid for argument "value"'); + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len]; + } + } + return this; +}; + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g; +function base64clean(str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0]; + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, ''); + // Node converts strings with length < 2 to '' + if (str.length < 2) return ''; + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '='; + } + return str; +} +function toHex(n) { + if (n < 16) return '0' + n.toString(16); + return n.toString(16); +} +function utf8ToBytes(string, units) { + units = units || Infinity; + var codePoint; + var length = string.length; + var leadSurrogate = null; + var bytes = []; + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i); + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } + + // valid lead + leadSurrogate = codePoint; + continue; + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + leadSurrogate = codePoint; + continue; + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + } + leadSurrogate = null; + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break; + bytes.push(codePoint); + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break; + bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break; + bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break; + bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else { + throw new Error('Invalid code point'); + } + } + return bytes; +} +function asciiToBytes(str) { + var byteArray = []; + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF); + } + return byteArray; +} +function utf16leToBytes(str, units) { + var c, hi, lo; + var byteArray = []; + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break; + c = str.charCodeAt(i); + hi = c >> 8; + lo = c % 256; + byteArray.push(lo); + byteArray.push(hi); + } + return byteArray; +} +function base64ToBytes(str) { + return base64.toByteArray(base64clean(str)); +} +function blitBuffer(src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if (i + offset >= dst.length || i >= src.length) break; + dst[i + offset] = src[i]; + } + return i; +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance(obj, type) { + return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name; +} +function numberIsNaN(obj) { + // For IE11 support + return obj !== obj; // eslint-disable-line no-self-compare +} + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"base64-js":185,"buffer":220,"ieee754":278}],221:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var Transform = require('stream').Transform; +var StringDecoder = require('string_decoder').StringDecoder; +var inherits = require('inherits'); +function CipherBase(hashMode) { + Transform.call(this); + this.hashMode = typeof hashMode === 'string'; + if (this.hashMode) { + this[hashMode] = this._finalOrDigest; + } else { + this.final = this._finalOrDigest; + } + if (this._final) { + this.__final = this._final; + this._final = null; + } + this._decoder = null; + this._encoding = null; +} +inherits(CipherBase, Transform); +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + if (typeof data === 'string') { + data = Buffer.from(data, inputEnc); + } + var outData = this._update(data); + if (this.hashMode) return this; + if (outputEnc) { + outData = this._toString(outData, outputEnc); + } + return outData; +}; +CipherBase.prototype.setAutoPadding = function () {}; +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state'); +}; +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state'); +}; +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state'); +}; +CipherBase.prototype._transform = function (data, _, next) { + var err; + try { + if (this.hashMode) { + this._update(data); + } else { + this.push(this._update(data)); + } + } catch (e) { + err = e; + } finally { + next(err); + } +}; +CipherBase.prototype._flush = function (done) { + var err; + try { + this.push(this.__final()); + } catch (e) { + err = e; + } + done(err); +}; +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this.__final() || Buffer.alloc(0); + if (outputEnc) { + outData = this._toString(outData, outputEnc, true); + } + return outData; +}; +CipherBase.prototype._toString = function (value, enc, fin) { + if (!this._decoder) { + this._decoder = new StringDecoder(enc); + this._encoding = enc; + } + if (this._encoding !== enc) throw new Error('can\'t switch encodings'); + var out = this._decoder.write(value); + if (fin) { + out += this._decoder.end(); + } + return out; +}; +module.exports = CipherBase; + +},{"inherits":279,"safe-buffer":332,"stream":343,"string_decoder":218}],222:[function(require,module,exports){ +"use strict"; + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; +function isError(e) { + return objectToString(e) === '[object Error]' || e instanceof Error; +} +exports.isError = isError; +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; +function isPrimitive(arg) { + return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || + // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; +exports.isBuffer = require('buffer').Buffer.isBuffer; +function objectToString(o) { + return Object.prototype.toString.call(o); +} + +},{"buffer":220}],223:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var elliptic = require('elliptic'); +var BN = require('bn.js'); +module.exports = function createECDH(curve) { + return new ECDH(curve); +}; +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +}; +aliases.p224 = aliases.secp224r1; +aliases.p256 = aliases.secp256r1 = aliases.prime256v1; +aliases.p192 = aliases.secp192r1 = aliases.prime192v1; +aliases.p384 = aliases.secp384r1; +aliases.p521 = aliases.secp521r1; +function ECDH(curve) { + this.curveType = aliases[curve]; + if (!this.curveType) { + this.curveType = { + name: curve + }; + } + this.curve = new elliptic.ec(this.curveType.name); // eslint-disable-line new-cap + this.keys = void 0; +} +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair(); + return this.getPublicKey(enc, format); +}; +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8'; + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc); + } + var otherPub = this.curve.keyFromPublic(other).getPublic(); + var out = otherPub.mul(this.keys.getPrivate()).getX(); + return formatReturnValue(out, enc, this.curveType.byteLength); +}; +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true); + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7; + } else { + key[0] = 6; + } + } + return formatReturnValue(key, enc); +}; +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc); +}; +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this.keys._importPublic(pub); + return this; +}; +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + var _priv = new BN(priv); + _priv = _priv.toString(16); + this.keys = this.curve.genKeyPair(); + this.keys._importPrivate(_priv); + return this; +}; +function formatReturnValue(bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray(); + } + var buf = new Buffer(bn); + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length); + zeros.fill(0); + buf = Buffer.concat([zeros, buf]); + } + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"bn.js":224,"buffer":220,"elliptic":244}],224:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],225:[function(require,module,exports){ +'use strict'; + +var inherits = require('inherits'); +var MD5 = require('md5.js'); +var RIPEMD160 = require('ripemd160'); +var sha = require('sha.js'); +var Base = require('cipher-base'); +function Hash(hash) { + Base.call(this, 'digest'); + this._hash = hash; +} +inherits(Hash, Base); +Hash.prototype._update = function (data) { + this._hash.update(data); +}; +Hash.prototype._final = function () { + return this._hash.digest(); +}; +module.exports = function createHash(alg) { + alg = alg.toLowerCase(); + if (alg === 'md5') return new MD5(); + if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160(); + return new Hash(sha(alg)); +}; + +},{"cipher-base":221,"inherits":279,"md5.js":289,"ripemd160":331,"sha.js":336}],226:[function(require,module,exports){ +"use strict"; + +var MD5 = require('md5.js'); +module.exports = function (buffer) { + return new MD5().update(buffer).digest(); +}; + +},{"md5.js":289}],227:[function(require,module,exports){ +'use strict'; + +var inherits = require('inherits'); +var Legacy = require('./legacy'); +var Base = require('cipher-base'); +var Buffer = require('safe-buffer').Buffer; +var md5 = require('create-hash/md5'); +var RIPEMD160 = require('ripemd160'); +var sha = require('sha.js'); +var ZEROS = Buffer.alloc(128); +function Hmac(alg, key) { + Base.call(this, 'digest'); + if (typeof key === 'string') { + key = Buffer.from(key); + } + var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64; + this._alg = alg; + this._key = key; + if (key.length > blocksize) { + var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg); + key = hash.update(key).digest(); + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize); + } + var ipad = this._ipad = Buffer.allocUnsafe(blocksize); + var opad = this._opad = Buffer.allocUnsafe(blocksize); + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36; + opad[i] = key[i] ^ 0x5C; + } + this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg); + this._hash.update(ipad); +} +inherits(Hmac, Base); +Hmac.prototype._update = function (data) { + this._hash.update(data); +}; +Hmac.prototype._final = function () { + var h = this._hash.digest(); + var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg); + return hash.update(this._opad).update(h).digest(); +}; +module.exports = function createHmac(alg, key) { + alg = alg.toLowerCase(); + if (alg === 'rmd160' || alg === 'ripemd160') { + return new Hmac('rmd160', key); + } + if (alg === 'md5') { + return new Legacy(md5, key); + } + return new Hmac(alg, key); +}; + +},{"./legacy":228,"cipher-base":221,"create-hash/md5":226,"inherits":279,"ripemd160":331,"safe-buffer":332,"sha.js":336}],228:[function(require,module,exports){ +'use strict'; + +var inherits = require('inherits'); +var Buffer = require('safe-buffer').Buffer; +var Base = require('cipher-base'); +var ZEROS = Buffer.alloc(128); +var blocksize = 64; +function Hmac(alg, key) { + Base.call(this, 'digest'); + if (typeof key === 'string') { + key = Buffer.from(key); + } + this._alg = alg; + this._key = key; + if (key.length > blocksize) { + key = alg(key); + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize); + } + var ipad = this._ipad = Buffer.allocUnsafe(blocksize); + var opad = this._opad = Buffer.allocUnsafe(blocksize); + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36; + opad[i] = key[i] ^ 0x5C; + } + this._hash = [ipad]; +} +inherits(Hmac, Base); +Hmac.prototype._update = function (data) { + this._hash.push(data); +}; +Hmac.prototype._final = function () { + var h = this._alg(Buffer.concat(this._hash)); + return this._alg(Buffer.concat([this._opad, h])); +}; +module.exports = Hmac; + +},{"cipher-base":221,"inherits":279,"safe-buffer":332}],229:[function(require,module,exports){ +'use strict'; + +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes'); +exports.createHash = exports.Hash = require('create-hash'); +exports.createHmac = exports.Hmac = require('create-hmac'); +var algos = require('browserify-sign/algos'); +var algoKeys = Object.keys(algos); +var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys); +exports.getHashes = function () { + return hashes; +}; +var p = require('pbkdf2'); +exports.pbkdf2 = p.pbkdf2; +exports.pbkdf2Sync = p.pbkdf2Sync; +var aes = require('browserify-cipher'); +exports.Cipher = aes.Cipher; +exports.createCipher = aes.createCipher; +exports.Cipheriv = aes.Cipheriv; +exports.createCipheriv = aes.createCipheriv; +exports.Decipher = aes.Decipher; +exports.createDecipher = aes.createDecipher; +exports.Decipheriv = aes.Decipheriv; +exports.createDecipheriv = aes.createDecipheriv; +exports.getCiphers = aes.getCiphers; +exports.listCiphers = aes.listCiphers; +var dh = require('diffie-hellman'); +exports.DiffieHellmanGroup = dh.DiffieHellmanGroup; +exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup; +exports.getDiffieHellman = dh.getDiffieHellman; +exports.createDiffieHellman = dh.createDiffieHellman; +exports.DiffieHellman = dh.DiffieHellman; +var sign = require('browserify-sign'); +exports.createSign = sign.createSign; +exports.Sign = sign.Sign; +exports.createVerify = sign.createVerify; +exports.Verify = sign.Verify; +exports.createECDH = require('create-ecdh'); +var publicEncrypt = require('public-encrypt'); +exports.publicEncrypt = publicEncrypt.publicEncrypt; +exports.privateEncrypt = publicEncrypt.privateEncrypt; +exports.publicDecrypt = publicEncrypt.publicDecrypt; +exports.privateDecrypt = publicEncrypt.privateDecrypt; + +// the least I can do is make error messages for the rest of the node.js/crypto api. +// ;[ +// 'createCredentials' +// ].forEach(function (name) { +// exports[name] = function () { +// throw new Error([ +// 'sorry, ' + name + ' is not implemented yet', +// 'we accept pull requests', +// 'https://github.com/crypto-browserify/crypto-browserify' +// ].join('\n')) +// } +// }) + +var rf = require('randomfill'); +exports.randomFill = rf.randomFill; +exports.randomFillSync = rf.randomFillSync; +exports.createCredentials = function () { + throw new Error(['sorry, createCredentials is not implemented yet', 'we accept pull requests', 'https://github.com/crypto-browserify/crypto-browserify'].join('\n')); +}; +exports.constants = { + 'DH_CHECK_P_NOT_SAFE_PRIME': 2, + 'DH_CHECK_P_NOT_PRIME': 1, + 'DH_UNABLE_TO_CHECK_GENERATOR': 4, + 'DH_NOT_SUITABLE_GENERATOR': 8, + 'NPN_ENABLED': 1, + 'ALPN_ENABLED': 1, + 'RSA_PKCS1_PADDING': 1, + 'RSA_SSLV23_PADDING': 2, + 'RSA_NO_PADDING': 3, + 'RSA_PKCS1_OAEP_PADDING': 4, + 'RSA_X931_PADDING': 5, + 'RSA_PKCS1_PSS_PADDING': 6, + 'POINT_CONVERSION_COMPRESSED': 2, + 'POINT_CONVERSION_UNCOMPRESSED': 4, + 'POINT_CONVERSION_HYBRID': 6 +}; + +},{"browserify-cipher":206,"browserify-sign":213,"browserify-sign/algos":210,"create-ecdh":223,"create-hash":225,"create-hmac":227,"diffie-hellman":239,"pbkdf2":299,"public-encrypt":307,"randombytes":314,"randomfill":315}],230:[function(require,module,exports){ +"use strict"; + +!function (t, e) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs = e(); +}(void 0, function () { + "use strict"; + + var t = 1e3, + e = 6e4, + n = 36e5, + r = "millisecond", + i = "second", + s = "minute", + u = "hour", + a = "day", + o = "week", + c = "month", + f = "quarter", + h = "year", + d = "date", + l = "Invalid Date", + $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, + y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, + M = { + name: "en", + weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), + months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), + ordinal: function (t) { + var e = ["th", "st", "nd", "rd"], + n = t % 100; + return "[" + t + (e[(n - 20) % 10] || e[n] || e[0]) + "]"; + } + }, + m = function (t, e, n) { + var r = String(t); + return !r || r.length >= e ? t : "" + Array(e + 1 - r.length).join(n) + t; + }, + v = { + s: m, + z: function (t) { + var e = -t.utcOffset(), + n = Math.abs(e), + r = Math.floor(n / 60), + i = n % 60; + return (e <= 0 ? "+" : "-") + m(r, 2, "0") + ":" + m(i, 2, "0"); + }, + m: function t(e, n) { + if (e.date() < n.date()) return -t(n, e); + var r = 12 * (n.year() - e.year()) + (n.month() - e.month()), + i = e.clone().add(r, c), + s = n - i < 0, + u = e.clone().add(r + (s ? -1 : 1), c); + return +(-(r + (n - i) / (s ? i - u : u - i)) || 0); + }, + a: function (t) { + return t < 0 ? Math.ceil(t) || 0 : Math.floor(t); + }, + p: function (t) { + return { + M: c, + y: h, + w: o, + d: a, + D: d, + h: u, + m: s, + s: i, + ms: r, + Q: f + }[t] || String(t || "").toLowerCase().replace(/s$/, ""); + }, + u: function (t) { + return void 0 === t; + } + }, + g = "en", + D = {}; + D[g] = M; + var p = "$isDayjsObject", + S = function (t) { + return t instanceof _ || !(!t || !t[p]); + }, + w = function t(e, n, r) { + var i; + if (!e) return g; + if ("string" == typeof e) { + var s = e.toLowerCase(); + D[s] && (i = s), n && (D[s] = n, i = s); + var u = e.split("-"); + if (!i && u.length > 1) return t(u[0]); + } else { + var a = e.name; + D[a] = e, i = a; + } + return !r && i && (g = i), i || !r && g; + }, + O = function (t, e) { + if (S(t)) return t.clone(); + var n = "object" == typeof e ? e : {}; + return n.date = t, n.args = arguments, new _(n); + }, + b = v; + b.l = w, b.i = S, b.w = function (t, e) { + return O(t, { + locale: e.$L, + utc: e.$u, + x: e.$x, + $offset: e.$offset + }); + }; + var _ = function () { + function M(t) { + this.$L = w(t.locale, null, !0), this.parse(t), this.$x = this.$x || t.x || {}, this[p] = !0; + } + var m = M.prototype; + return m.parse = function (t) { + this.$d = function (t) { + var e = t.date, + n = t.utc; + if (null === e) return new Date(NaN); + if (b.u(e)) return new Date(); + if (e instanceof Date) return new Date(e); + if ("string" == typeof e && !/Z$/i.test(e)) { + var r = e.match($); + if (r) { + var i = r[2] - 1 || 0, + s = (r[7] || "0").substring(0, 3); + return n ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)) : new Date(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s); + } + } + return new Date(e); + }(t), this.init(); + }, m.init = function () { + var t = this.$d; + this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(), this.$H = t.getHours(), this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t.getMilliseconds(); + }, m.$utils = function () { + return b; + }, m.isValid = function () { + return !(this.$d.toString() === l); + }, m.isSame = function (t, e) { + var n = O(t); + return this.startOf(e) <= n && n <= this.endOf(e); + }, m.isAfter = function (t, e) { + return O(t) < this.startOf(e); + }, m.isBefore = function (t, e) { + return this.endOf(e) < O(t); + }, m.$g = function (t, e, n) { + return b.u(t) ? this[e] : this.set(n, t); + }, m.unix = function () { + return Math.floor(this.valueOf() / 1e3); + }, m.valueOf = function () { + return this.$d.getTime(); + }, m.startOf = function (t, e) { + var n = this, + r = !!b.u(e) || e, + f = b.p(t), + l = function (t, e) { + var i = b.w(n.$u ? Date.UTC(n.$y, e, t) : new Date(n.$y, e, t), n); + return r ? i : i.endOf(a); + }, + $ = function (t, e) { + return b.w(n.toDate()[t].apply(n.toDate("s"), (r ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e)), n); + }, + y = this.$W, + M = this.$M, + m = this.$D, + v = "set" + (this.$u ? "UTC" : ""); + switch (f) { + case h: + return r ? l(1, 0) : l(31, 11); + case c: + return r ? l(1, M) : l(0, M + 1); + case o: + var g = this.$locale().weekStart || 0, + D = (y < g ? y + 7 : y) - g; + return l(r ? m - D : m + (6 - D), M); + case a: + case d: + return $(v + "Hours", 0); + case u: + return $(v + "Minutes", 1); + case s: + return $(v + "Seconds", 2); + case i: + return $(v + "Milliseconds", 3); + default: + return this.clone(); + } + }, m.endOf = function (t) { + return this.startOf(t, !1); + }, m.$set = function (t, e) { + var n, + o = b.p(t), + f = "set" + (this.$u ? "UTC" : ""), + l = (n = {}, n[a] = f + "Date", n[d] = f + "Date", n[c] = f + "Month", n[h] = f + "FullYear", n[u] = f + "Hours", n[s] = f + "Minutes", n[i] = f + "Seconds", n[r] = f + "Milliseconds", n)[o], + $ = o === a ? this.$D + (e - this.$W) : e; + if (o === c || o === h) { + var y = this.clone().set(d, 1); + y.$d[l]($), y.init(), this.$d = y.set(d, Math.min(this.$D, y.daysInMonth())).$d; + } else l && this.$d[l]($); + return this.init(), this; + }, m.set = function (t, e) { + return this.clone().$set(t, e); + }, m.get = function (t) { + return this[b.p(t)](); + }, m.add = function (r, f) { + var d, + l = this; + r = Number(r); + var $ = b.p(f), + y = function (t) { + var e = O(l); + return b.w(e.date(e.date() + Math.round(t * r)), l); + }; + if ($ === c) return this.set(c, this.$M + r); + if ($ === h) return this.set(h, this.$y + r); + if ($ === a) return y(1); + if ($ === o) return y(7); + var M = (d = {}, d[s] = e, d[u] = n, d[i] = t, d)[$] || 1, + m = this.$d.getTime() + r * M; + return b.w(m, this); + }, m.subtract = function (t, e) { + return this.add(-1 * t, e); + }, m.format = function (t) { + var e = this, + n = this.$locale(); + if (!this.isValid()) return n.invalidDate || l; + var r = t || "YYYY-MM-DDTHH:mm:ssZ", + i = b.z(this), + s = this.$H, + u = this.$m, + a = this.$M, + o = n.weekdays, + c = n.months, + f = n.meridiem, + h = function (t, n, i, s) { + return t && (t[n] || t(e, r)) || i[n].slice(0, s); + }, + d = function (t) { + return b.s(s % 12 || 12, t, "0"); + }, + $ = f || function (t, e, n) { + var r = t < 12 ? "AM" : "PM"; + return n ? r.toLowerCase() : r; + }; + return r.replace(y, function (t, r) { + return r || function (t) { + switch (t) { + case "YY": + return String(e.$y).slice(-2); + case "YYYY": + return b.s(e.$y, 4, "0"); + case "M": + return a + 1; + case "MM": + return b.s(a + 1, 2, "0"); + case "MMM": + return h(n.monthsShort, a, c, 3); + case "MMMM": + return h(c, a); + case "D": + return e.$D; + case "DD": + return b.s(e.$D, 2, "0"); + case "d": + return String(e.$W); + case "dd": + return h(n.weekdaysMin, e.$W, o, 2); + case "ddd": + return h(n.weekdaysShort, e.$W, o, 3); + case "dddd": + return o[e.$W]; + case "H": + return String(s); + case "HH": + return b.s(s, 2, "0"); + case "h": + return d(1); + case "hh": + return d(2); + case "a": + return $(s, u, !0); + case "A": + return $(s, u, !1); + case "m": + return String(u); + case "mm": + return b.s(u, 2, "0"); + case "s": + return String(e.$s); + case "ss": + return b.s(e.$s, 2, "0"); + case "SSS": + return b.s(e.$ms, 3, "0"); + case "Z": + return i; + } + return null; + }(t) || i.replace(":", ""); + }); + }, m.utcOffset = function () { + return 15 * -Math.round(this.$d.getTimezoneOffset() / 15); + }, m.diff = function (r, d, l) { + var $, + y = this, + M = b.p(d), + m = O(r), + v = (m.utcOffset() - this.utcOffset()) * e, + g = this - m, + D = function () { + return b.m(y, m); + }; + switch (M) { + case h: + $ = D() / 12; + break; + case c: + $ = D(); + break; + case f: + $ = D() / 3; + break; + case o: + $ = (g - v) / 6048e5; + break; + case a: + $ = (g - v) / 864e5; + break; + case u: + $ = g / n; + break; + case s: + $ = g / e; + break; + case i: + $ = g / t; + break; + default: + $ = g; + } + return l ? $ : b.a($); + }, m.daysInMonth = function () { + return this.endOf(c).$D; + }, m.$locale = function () { + return D[this.$L]; + }, m.locale = function (t, e) { + if (!t) return this.$L; + var n = this.clone(), + r = w(t, e, !0); + return r && (n.$L = r), n; + }, m.clone = function () { + return b.w(this.$d, this); + }, m.toDate = function () { + return new Date(this.valueOf()); + }, m.toJSON = function () { + return this.isValid() ? this.toISOString() : null; + }, m.toISOString = function () { + return this.$d.toISOString(); + }, m.toString = function () { + return this.$d.toUTCString(); + }, M; + }(), + k = _.prototype; + return O.prototype = k, [["$ms", r], ["$s", i], ["$m", s], ["$H", u], ["$W", a], ["$M", c], ["$y", h], ["$D", d]].forEach(function (t) { + k[t[1]] = function (e) { + return this.$g(e, t[0], t[1]); + }; + }), O.extend = function (t, e) { + return t.$i || (t(e, _, O), t.$i = !0), O; + }, O.locale = w, O.isDayjs = S, O.unix = function (t) { + return O(1e3 * t); + }, O.en = D[g], O.Ls = D, O.p = {}, O; +}); + +},{}],231:[function(require,module,exports){ +"use strict"; + +!function (e, t) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_customParseFormat = t(); +}(void 0, function () { + "use strict"; + + var e = { + LTS: "h:mm:ss A", + LT: "h:mm A", + L: "MM/DD/YYYY", + LL: "MMMM D, YYYY", + LLL: "MMMM D, YYYY h:mm A", + LLLL: "dddd, MMMM D, YYYY h:mm A" + }, + t = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, + n = /\d\d/, + r = /\d\d?/, + i = /\d*[^-_:/,()\s\d]+/, + o = {}, + s = function (e) { + return (e = +e) + (e > 68 ? 1900 : 2e3); + }; + var a = function (e) { + return function (t) { + this[e] = +t; + }; + }, + f = [/[+-]\d\d:?(\d\d)?|Z/, function (e) { + (this.zone || (this.zone = {})).offset = function (e) { + if (!e) return 0; + if ("Z" === e) return 0; + var t = e.match(/([+-]|\d\d)/g), + n = 60 * t[1] + (+t[2] || 0); + return 0 === n ? 0 : "+" === t[0] ? -n : n; + }(e); + }], + h = function (e) { + var t = o[e]; + return t && (t.indexOf ? t : t.s.concat(t.f)); + }, + u = function (e, t) { + var n, + r = o.meridiem; + if (r) { + for (var i = 1; i <= 24; i += 1) if (e.indexOf(r(i, 0, t)) > -1) { + n = i > 12; + break; + } + } else n = e === (t ? "pm" : "PM"); + return n; + }, + d = { + A: [i, function (e) { + this.afternoon = u(e, !1); + }], + a: [i, function (e) { + this.afternoon = u(e, !0); + }], + S: [/\d/, function (e) { + this.milliseconds = 100 * +e; + }], + SS: [n, function (e) { + this.milliseconds = 10 * +e; + }], + SSS: [/\d{3}/, function (e) { + this.milliseconds = +e; + }], + s: [r, a("seconds")], + ss: [r, a("seconds")], + m: [r, a("minutes")], + mm: [r, a("minutes")], + H: [r, a("hours")], + h: [r, a("hours")], + HH: [r, a("hours")], + hh: [r, a("hours")], + D: [r, a("day")], + DD: [n, a("day")], + Do: [i, function (e) { + var t = o.ordinal, + n = e.match(/\d+/); + if (this.day = n[0], t) for (var r = 1; r <= 31; r += 1) t(r).replace(/\[|\]/g, "") === e && (this.day = r); + }], + M: [r, a("month")], + MM: [n, a("month")], + MMM: [i, function (e) { + var t = h("months"), + n = (h("monthsShort") || t.map(function (e) { + return e.slice(0, 3); + })).indexOf(e) + 1; + if (n < 1) throw new Error(); + this.month = n % 12 || n; + }], + MMMM: [i, function (e) { + var t = h("months").indexOf(e) + 1; + if (t < 1) throw new Error(); + this.month = t % 12 || t; + }], + Y: [/[+-]?\d+/, a("year")], + YY: [n, function (e) { + this.year = s(e); + }], + YYYY: [/\d{4}/, a("year")], + Z: f, + ZZ: f + }; + function c(n) { + var r, i; + r = n, i = o && o.formats; + for (var s = (n = r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, function (t, n, r) { + var o = r && r.toUpperCase(); + return n || i[r] || e[r] || i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function (e, t, n) { + return t || n.slice(1); + }); + })).match(t), a = s.length, f = 0; f < a; f += 1) { + var h = s[f], + u = d[h], + c = u && u[0], + l = u && u[1]; + s[f] = l ? { + regex: c, + parser: l + } : h.replace(/^\[|\]$/g, ""); + } + return function (e) { + for (var t = {}, n = 0, r = 0; n < a; n += 1) { + var i = s[n]; + if ("string" == typeof i) r += i.length;else { + var o = i.regex, + f = i.parser, + h = e.slice(r), + u = o.exec(h)[0]; + f.call(t, u), e = e.replace(u, ""); + } + } + return function (e) { + var t = e.afternoon; + if (void 0 !== t) { + var n = e.hours; + t ? n < 12 && (e.hours += 12) : 12 === n && (e.hours = 0), delete e.afternoon; + } + }(t), t; + }; + } + return function (e, t, n) { + n.p.customParseFormat = !0, e && e.parseTwoDigitYear && (s = e.parseTwoDigitYear); + var r = t.prototype, + i = r.parse; + r.parse = function (e) { + var t = e.date, + r = e.utc, + s = e.args; + this.$u = r; + var a = s[1]; + if ("string" == typeof a) { + var f = !0 === s[2], + h = !0 === s[3], + u = f || h, + d = s[2]; + h && (d = s[2]), o = this.$locale(), !f && d && (o = n.Ls[d]), this.$d = function (e, t, n) { + try { + if (["x", "X"].indexOf(t) > -1) return new Date(("X" === t ? 1e3 : 1) * e); + var r = c(t)(e), + i = r.year, + o = r.month, + s = r.day, + a = r.hours, + f = r.minutes, + h = r.seconds, + u = r.milliseconds, + d = r.zone, + l = new Date(), + m = s || (i || o ? 1 : l.getDate()), + M = i || l.getFullYear(), + Y = 0; + i && !o || (Y = o > 0 ? o - 1 : l.getMonth()); + var p = a || 0, + v = f || 0, + D = h || 0, + g = u || 0; + return d ? new Date(Date.UTC(M, Y, m, p, v, D, g + 60 * d.offset * 1e3)) : n ? new Date(Date.UTC(M, Y, m, p, v, D, g)) : new Date(M, Y, m, p, v, D, g); + } catch (e) { + return new Date(""); + } + }(t, a, r), this.init(), d && !0 !== d && (this.$L = this.locale(d).$L), u && t != this.format(a) && (this.$d = new Date("")), o = {}; + } else if (a instanceof Array) for (var l = a.length, m = 1; m <= l; m += 1) { + s[1] = a[m - 1]; + var M = n.apply(this, s); + if (M.isValid()) { + this.$d = M.$d, this.$L = M.$L, this.init(); + break; + } + m === l && (this.$d = new Date("")); + } else i.call(this, e); + }; + }; +}); + +},{}],232:[function(require,module,exports){ +"use strict"; + +!function (t, i) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = i() : "function" == typeof define && define.amd ? define(i) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs_plugin_utc = i(); +}(void 0, function () { + "use strict"; + + var t = "minute", + i = /[+-]\d\d(?::?\d\d)?/g, + e = /([+-]|\d\d)/g; + return function (s, f, n) { + var u = f.prototype; + n.utc = function (t) { + var i = { + date: t, + utc: !0, + args: arguments + }; + return new f(i); + }, u.utc = function (i) { + var e = n(this.toDate(), { + locale: this.$L, + utc: !0 + }); + return i ? e.add(this.utcOffset(), t) : e; + }, u.local = function () { + return n(this.toDate(), { + locale: this.$L, + utc: !1 + }); + }; + var o = u.parse; + u.parse = function (t) { + t.utc && (this.$u = !0), this.$utils().u(t.$offset) || (this.$offset = t.$offset), o.call(this, t); + }; + var r = u.init; + u.init = function () { + if (this.$u) { + var t = this.$d; + this.$y = t.getUTCFullYear(), this.$M = t.getUTCMonth(), this.$D = t.getUTCDate(), this.$W = t.getUTCDay(), this.$H = t.getUTCHours(), this.$m = t.getUTCMinutes(), this.$s = t.getUTCSeconds(), this.$ms = t.getUTCMilliseconds(); + } else r.call(this); + }; + var a = u.utcOffset; + u.utcOffset = function (s, f) { + var n = this.$utils().u; + if (n(s)) return this.$u ? 0 : n(this.$offset) ? a.call(this) : this.$offset; + if ("string" == typeof s && (s = function (t) { + void 0 === t && (t = ""); + var s = t.match(i); + if (!s) return null; + var f = ("" + s[0]).match(e) || ["-", 0, 0], + n = f[0], + u = 60 * +f[1] + +f[2]; + return 0 === u ? 0 : "+" === n ? u : -u; + }(s), null === s)) return this; + var u = Math.abs(s) <= 16 ? 60 * s : s, + o = this; + if (f) return o.$offset = u, o.$u = 0 === s, o; + if (0 !== s) { + var r = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset(); + (o = this.local().add(u + r, t)).$offset = u, o.$x.$localOffset = r; + } else o = this.utc(); + return o; + }; + var h = u.format; + u.format = function (t) { + var i = t || (this.$u ? "YYYY-MM-DDTHH:mm:ss[Z]" : ""); + return h.call(this, i); + }, u.valueOf = function () { + var t = this.$utils().u(this.$offset) ? 0 : this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset()); + return this.$d.valueOf() - 6e4 * t; + }, u.isUTC = function () { + return !!this.$u; + }, u.toISOString = function () { + return this.toDate().toISOString(); + }, u.toString = function () { + return this.toDate().toUTCString(); + }; + var l = u.toDate; + u.toDate = function (t) { + return "s" === t && this.$offset ? n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate() : l.call(this); + }; + var c = u.diff; + u.diff = function (t, i, e) { + if (t && this.$u === t.$u) return c.call(this, t, i, e); + var s = this.local(), + f = n(t).local(); + return c.call(s, f, i, e); + }; + }; +}); + +},{}],233:[function(require,module,exports){ +'use strict'; + +exports.utils = require('./des/utils'); +exports.Cipher = require('./des/cipher'); +exports.DES = require('./des/des'); +exports.CBC = require('./des/cbc'); +exports.EDE = require('./des/ede'); + +},{"./des/cbc":234,"./des/cipher":235,"./des/des":236,"./des/ede":237,"./des/utils":238}],234:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); +var proto = {}; +function CBCState(iv) { + assert.equal(iv.length, 8, 'Invalid IV length'); + this.iv = new Array(8); + for (var i = 0; i < this.iv.length; i++) this.iv[i] = iv[i]; +} +function instantiate(Base) { + function CBC(options) { + Base.call(this, options); + this._cbcInit(); + } + inherits(CBC, Base); + var keys = Object.keys(proto); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + CBC.prototype[key] = proto[key]; + } + CBC.create = function create(options) { + return new CBC(options); + }; + return CBC; +} +exports.instantiate = instantiate; +proto._cbcInit = function _cbcInit() { + var state = new CBCState(this.options.iv); + this._cbcState = state; +}; +proto._update = function _update(inp, inOff, out, outOff) { + var state = this._cbcState; + var superProto = this.constructor.super_.prototype; + var iv = state.iv; + if (this.type === 'encrypt') { + for (var i = 0; i < this.blockSize; i++) iv[i] ^= inp[inOff + i]; + superProto._update.call(this, iv, 0, out, outOff); + for (var i = 0; i < this.blockSize; i++) iv[i] = out[outOff + i]; + } else { + superProto._update.call(this, inp, inOff, out, outOff); + for (var i = 0; i < this.blockSize; i++) out[outOff + i] ^= iv[i]; + for (var i = 0; i < this.blockSize; i++) iv[i] = inp[inOff + i]; + } +}; + +},{"inherits":279,"minimalistic-assert":292}],235:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +function Cipher(options) { + this.options = options; + this.type = this.options.type; + this.blockSize = 8; + this._init(); + this.buffer = new Array(this.blockSize); + this.bufferOff = 0; + this.padding = options.padding !== false; +} +module.exports = Cipher; +Cipher.prototype._init = function _init() { + // Might be overrided +}; +Cipher.prototype.update = function update(data) { + if (data.length === 0) return []; + if (this.type === 'decrypt') return this._updateDecrypt(data);else return this._updateEncrypt(data); +}; +Cipher.prototype._buffer = function _buffer(data, off) { + // Append data to buffer + var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); + for (var i = 0; i < min; i++) this.buffer[this.bufferOff + i] = data[off + i]; + this.bufferOff += min; + + // Shift next + return min; +}; +Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { + this._update(this.buffer, 0, out, off); + this.bufferOff = 0; + return this.blockSize; +}; +Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { + var inputOff = 0; + var outputOff = 0; + var count = (this.bufferOff + data.length) / this.blockSize | 0; + var out = new Array(count * this.blockSize); + if (this.bufferOff !== 0) { + inputOff += this._buffer(data, inputOff); + if (this.bufferOff === this.buffer.length) outputOff += this._flushBuffer(out, outputOff); + } + + // Write blocks + var max = data.length - (data.length - inputOff) % this.blockSize; + for (; inputOff < max; inputOff += this.blockSize) { + this._update(data, inputOff, out, outputOff); + outputOff += this.blockSize; + } + + // Queue rest + for (; inputOff < data.length; inputOff++, this.bufferOff++) this.buffer[this.bufferOff] = data[inputOff]; + return out; +}; +Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { + var inputOff = 0; + var outputOff = 0; + var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; + var out = new Array(count * this.blockSize); + + // TODO(indutny): optimize it, this is far from optimal + for (; count > 0; count--) { + inputOff += this._buffer(data, inputOff); + outputOff += this._flushBuffer(out, outputOff); + } + + // Buffer rest of the input + inputOff += this._buffer(data, inputOff); + return out; +}; +Cipher.prototype.final = function final(buffer) { + var first; + if (buffer) first = this.update(buffer); + var last; + if (this.type === 'encrypt') last = this._finalEncrypt();else last = this._finalDecrypt(); + if (first) return first.concat(last);else return last; +}; +Cipher.prototype._pad = function _pad(buffer, off) { + if (off === 0) return false; + while (off < buffer.length) buffer[off++] = 0; + return true; +}; +Cipher.prototype._finalEncrypt = function _finalEncrypt() { + if (!this._pad(this.buffer, this.bufferOff)) return []; + var out = new Array(this.blockSize); + this._update(this.buffer, 0, out, 0); + return out; +}; +Cipher.prototype._unpad = function _unpad(buffer) { + return buffer; +}; +Cipher.prototype._finalDecrypt = function _finalDecrypt() { + assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); + var out = new Array(this.blockSize); + this._flushBuffer(out, 0); + return this._unpad(out); +}; + +},{"minimalistic-assert":292}],236:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); +var utils = require('./utils'); +var Cipher = require('./cipher'); +function DESState() { + this.tmp = new Array(2); + this.keys = null; +} +function DES(options) { + Cipher.call(this, options); + var state = new DESState(); + this._desState = state; + this.deriveKeys(state, options.key); +} +inherits(DES, Cipher); +module.exports = DES; +DES.create = function create(options) { + return new DES(options); +}; +var shiftTable = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]; +DES.prototype.deriveKeys = function deriveKeys(state, key) { + state.keys = new Array(16 * 2); + assert.equal(key.length, this.blockSize, 'Invalid key length'); + var kL = utils.readUInt32BE(key, 0); + var kR = utils.readUInt32BE(key, 4); + utils.pc1(kL, kR, state.tmp, 0); + kL = state.tmp[0]; + kR = state.tmp[1]; + for (var i = 0; i < state.keys.length; i += 2) { + var shift = shiftTable[i >>> 1]; + kL = utils.r28shl(kL, shift); + kR = utils.r28shl(kR, shift); + utils.pc2(kL, kR, state.keys, i); + } +}; +DES.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._desState; + var l = utils.readUInt32BE(inp, inOff); + var r = utils.readUInt32BE(inp, inOff + 4); + + // Initial Permutation + utils.ip(l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + if (this.type === 'encrypt') this._encrypt(state, l, r, state.tmp, 0);else this._decrypt(state, l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + utils.writeUInt32BE(out, l, outOff); + utils.writeUInt32BE(out, r, outOff + 4); +}; +DES.prototype._pad = function _pad(buffer, off) { + if (this.padding === false) { + return false; + } + var value = buffer.length - off; + for (var i = off; i < buffer.length; i++) buffer[i] = value; + return true; +}; +DES.prototype._unpad = function _unpad(buffer) { + if (this.padding === false) { + return buffer; + } + var pad = buffer[buffer.length - 1]; + for (var i = buffer.length - pad; i < buffer.length; i++) assert.equal(buffer[i], pad); + return buffer.slice(0, buffer.length - pad); +}; +DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { + var l = lStart; + var r = rStart; + + // Apply f() x16 times + for (var i = 0; i < state.keys.length; i += 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(r, state.tmp, 0); + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + var t = r; + r = (l ^ f) >>> 0; + l = t; + } + + // Reverse Initial Permutation + utils.rip(r, l, out, off); +}; +DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { + var l = rStart; + var r = lStart; + + // Apply f() x16 times + for (var i = state.keys.length - 2; i >= 0; i -= 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(l, state.tmp, 0); + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + var t = l; + l = (r ^ f) >>> 0; + r = t; + } + + // Reverse Initial Permutation + utils.rip(l, r, out, off); +}; + +},{"./cipher":235,"./utils":238,"inherits":279,"minimalistic-assert":292}],237:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); +var Cipher = require('./cipher'); +var DES = require('./des'); +function EDEState(type, key) { + assert.equal(key.length, 24, 'Invalid key length'); + var k1 = key.slice(0, 8); + var k2 = key.slice(8, 16); + var k3 = key.slice(16, 24); + if (type === 'encrypt') { + this.ciphers = [DES.create({ + type: 'encrypt', + key: k1 + }), DES.create({ + type: 'decrypt', + key: k2 + }), DES.create({ + type: 'encrypt', + key: k3 + })]; + } else { + this.ciphers = [DES.create({ + type: 'decrypt', + key: k3 + }), DES.create({ + type: 'encrypt', + key: k2 + }), DES.create({ + type: 'decrypt', + key: k1 + })]; + } +} +function EDE(options) { + Cipher.call(this, options); + var state = new EDEState(this.type, this.options.key); + this._edeState = state; +} +inherits(EDE, Cipher); +module.exports = EDE; +EDE.create = function create(options) { + return new EDE(options); +}; +EDE.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._edeState; + state.ciphers[0]._update(inp, inOff, out, outOff); + state.ciphers[1]._update(out, outOff, out, outOff); + state.ciphers[2]._update(out, outOff, out, outOff); +}; +EDE.prototype._pad = DES.prototype._pad; +EDE.prototype._unpad = DES.prototype._unpad; + +},{"./cipher":235,"./des":236,"inherits":279,"minimalistic-assert":292}],238:[function(require,module,exports){ +'use strict'; + +exports.readUInt32BE = function readUInt32BE(bytes, off) { + var res = bytes[0 + off] << 24 | bytes[1 + off] << 16 | bytes[2 + off] << 8 | bytes[3 + off]; + return res >>> 0; +}; +exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { + bytes[0 + off] = value >>> 24; + bytes[1 + off] = value >>> 16 & 0xff; + bytes[2 + off] = value >>> 8 & 0xff; + bytes[3 + off] = value & 0xff; +}; +exports.ip = function ip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + for (var i = 6; i >= 0; i -= 2) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inR >>> j + i & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inL >>> j + i & 1; + } + } + for (var i = 6; i >= 0; i -= 2) { + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= inR >>> j + i & 1; + } + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= inL >>> j + i & 1; + } + } + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +exports.rip = function rip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + for (var i = 0; i < 4; i++) { + for (var j = 24; j >= 0; j -= 8) { + outL <<= 1; + outL |= inR >>> j + i & 1; + outL <<= 1; + outL |= inL >>> j + i & 1; + } + } + for (var i = 4; i < 8; i++) { + for (var j = 24; j >= 0; j -= 8) { + outR <<= 1; + outR |= inR >>> j + i & 1; + outR <<= 1; + outR |= inL >>> j + i & 1; + } + } + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +exports.pc1 = function pc1(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + // 7, 15, 23, 31, 39, 47, 55, 63 + // 6, 14, 22, 30, 39, 47, 55, 63 + // 5, 13, 21, 29, 39, 47, 55, 63 + // 4, 12, 20, 28 + for (var i = 7; i >= 5; i--) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inR >> j + i & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inL >> j + i & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inR >> j + i & 1; + } + + // 1, 9, 17, 25, 33, 41, 49, 57 + // 2, 10, 18, 26, 34, 42, 50, 58 + // 3, 11, 19, 27, 35, 43, 51, 59 + // 36, 44, 52, 60 + for (var i = 1; i <= 3; i++) { + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= inR >> j + i & 1; + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= inL >> j + i & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= inL >> j + i & 1; + } + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +exports.r28shl = function r28shl(num, shift) { + return num << shift & 0xfffffff | num >>> 28 - shift; +}; +var pc2table = [ +// inL => outL +14, 11, 17, 4, 27, 23, 25, 0, 13, 22, 7, 18, 5, 9, 16, 24, 2, 20, 12, 21, 1, 8, 15, 26, +// inR => outR +15, 4, 25, 19, 9, 1, 26, 16, 5, 11, 23, 8, 12, 7, 17, 0, 22, 3, 10, 14, 6, 20, 27, 24]; +exports.pc2 = function pc2(inL, inR, out, off) { + var outL = 0; + var outR = 0; + var len = pc2table.length >>> 1; + for (var i = 0; i < len; i++) { + outL <<= 1; + outL |= inL >>> pc2table[i] & 0x1; + } + for (var i = len; i < pc2table.length; i++) { + outR <<= 1; + outR |= inR >>> pc2table[i] & 0x1; + } + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +exports.expand = function expand(r, out, off) { + var outL = 0; + var outR = 0; + outL = (r & 1) << 5 | r >>> 27; + for (var i = 23; i >= 15; i -= 4) { + outL <<= 6; + outL |= r >>> i & 0x3f; + } + for (var i = 11; i >= 3; i -= 4) { + outR |= r >>> i & 0x3f; + outR <<= 6; + } + outR |= (r & 0x1f) << 1 | r >>> 31; + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +var sTable = [14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11]; +exports.substitute = function substitute(inL, inR) { + var out = 0; + for (var i = 0; i < 4; i++) { + var b = inL >>> 18 - i * 6 & 0x3f; + var sb = sTable[i * 0x40 + b]; + out <<= 4; + out |= sb; + } + for (var i = 0; i < 4; i++) { + var b = inR >>> 18 - i * 6 & 0x3f; + var sb = sTable[4 * 0x40 + i * 0x40 + b]; + out <<= 4; + out |= sb; + } + return out >>> 0; +}; +var permuteTable = [16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7]; +exports.permute = function permute(num) { + var out = 0; + for (var i = 0; i < permuteTable.length; i++) { + out <<= 1; + out |= num >>> permuteTable[i] & 0x1; + } + return out >>> 0; +}; +exports.padSplit = function padSplit(num, size, group) { + var str = num.toString(2); + while (str.length < size) str = '0' + str; + var out = []; + for (var i = 0; i < size; i += group) out.push(str.slice(i, i + group)); + return out.join(' '); +}; + +},{}],239:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var generatePrime = require('./lib/generatePrime'); +var primes = require('./lib/primes.json'); +var DH = require('./lib/dh'); +function getDiffieHellman(mod) { + var prime = new Buffer(primes[mod].prime, 'hex'); + var gen = new Buffer(primes[mod].gen, 'hex'); + return new DH(prime, gen); +} +var ENCODINGS = { + 'binary': true, + 'hex': true, + 'base64': true +}; +function createDiffieHellman(prime, enc, generator, genc) { + if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { + return createDiffieHellman(prime, 'binary', enc, generator); + } + enc = enc || 'binary'; + genc = genc || 'binary'; + generator = generator || new Buffer([2]); + if (!Buffer.isBuffer(generator)) { + generator = new Buffer(generator, genc); + } + if (typeof prime === 'number') { + return new DH(generatePrime(prime, generator), generator, true); + } + if (!Buffer.isBuffer(prime)) { + prime = new Buffer(prime, enc); + } + return new DH(prime, generator, true); +} +exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman; +exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"./lib/dh":240,"./lib/generatePrime":241,"./lib/primes.json":242,"buffer":220}],240:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var BN = require('bn.js'); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var TWENTYFOUR = new BN(24); +var ELEVEN = new BN(11); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var primes = require('./generatePrime'); +var randomBytes = require('randombytes'); +module.exports = DH; +function setPublicKey(pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this._pub = new BN(pub); + return this; +} +function setPrivateKey(priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + this._priv = new BN(priv); + return this; +} +var primeCache = {}; +function checkPrime(prime, generator) { + var gen = generator.toString('hex'); + var hex = [gen, prime.toString(16)].join('_'); + if (hex in primeCache) { + return primeCache[hex]; + } + var error = 0; + if (prime.isEven() || !primes.simpleSieve || !primes.fermatTest(prime) || !millerRabin.test(prime)) { + //not a prime so +1 + error += 1; + if (gen === '02' || gen === '05') { + // we'd be able to check the generator + // it would fail so +8 + error += 8; + } else { + //we wouldn't be able to test the generator + // so +4 + error += 4; + } + primeCache[hex] = error; + return error; + } + if (!millerRabin.test(prime.shrn(1))) { + //not a safe prime + error += 2; + } + var rem; + switch (gen) { + case '02': + if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { + // unsuidable generator + error += 8; + } + break; + case '05': + rem = prime.mod(TEN); + if (rem.cmp(THREE) && rem.cmp(SEVEN)) { + // prime mod 10 needs to equal 3 or 7 + error += 8; + } + break; + default: + error += 4; + } + primeCache[hex] = error; + return error; +} +function DH(prime, generator, malleable) { + this.setGenerator(generator); + this.__prime = new BN(prime); + this._prime = BN.mont(this.__prime); + this._primeLen = prime.length; + this._pub = undefined; + this._priv = undefined; + this._primeCode = undefined; + if (malleable) { + this.setPublicKey = setPublicKey; + this.setPrivateKey = setPrivateKey; + } else { + this._primeCode = 8; + } +} +Object.defineProperty(DH.prototype, 'verifyError', { + enumerable: true, + get: function () { + if (typeof this._primeCode !== 'number') { + this._primeCode = checkPrime(this.__prime, this.__gen); + } + return this._primeCode; + } +}); +DH.prototype.generateKeys = function () { + if (!this._priv) { + this._priv = new BN(randomBytes(this._primeLen)); + } + this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); + return this.getPublicKey(); +}; +DH.prototype.computeSecret = function (other) { + other = new BN(other); + other = other.toRed(this._prime); + var secret = other.redPow(this._priv).fromRed(); + var out = new Buffer(secret.toArray()); + var prime = this.getPrime(); + if (out.length < prime.length) { + var front = new Buffer(prime.length - out.length); + front.fill(0); + out = Buffer.concat([front, out]); + } + return out; +}; +DH.prototype.getPublicKey = function getPublicKey(enc) { + return formatReturnValue(this._pub, enc); +}; +DH.prototype.getPrivateKey = function getPrivateKey(enc) { + return formatReturnValue(this._priv, enc); +}; +DH.prototype.getPrime = function (enc) { + return formatReturnValue(this.__prime, enc); +}; +DH.prototype.getGenerator = function (enc) { + return formatReturnValue(this._gen, enc); +}; +DH.prototype.setGenerator = function (gen, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(gen)) { + gen = new Buffer(gen, enc); + } + this.__gen = gen; + this._gen = new BN(gen); + return this; +}; +function formatReturnValue(bn, enc) { + var buf = new Buffer(bn.toArray()); + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"./generatePrime":241,"bn.js":243,"buffer":220,"miller-rabin":290,"randombytes":314}],241:[function(require,module,exports){ +"use strict"; + +var randomBytes = require('randombytes'); +module.exports = findPrime; +findPrime.simpleSieve = simpleSieve; +findPrime.fermatTest = fermatTest; +var BN = require('bn.js'); +var TWENTYFOUR = new BN(24); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var ONE = new BN(1); +var TWO = new BN(2); +var FIVE = new BN(5); +var SIXTEEN = new BN(16); +var EIGHT = new BN(8); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var ELEVEN = new BN(11); +var FOUR = new BN(4); +var TWELVE = new BN(12); +var primes = null; +function _getPrimes() { + if (primes !== null) return primes; + var limit = 0x100000; + var res = []; + res[0] = 2; + for (var i = 1, k = 3; k < limit; k += 2) { + var sqrt = Math.ceil(Math.sqrt(k)); + for (var j = 0; j < i && res[j] <= sqrt; j++) if (k % res[j] === 0) break; + if (i !== j && res[j] <= sqrt) continue; + res[i++] = k; + } + primes = res; + return res; +} +function simpleSieve(p) { + var primes = _getPrimes(); + for (var i = 0; i < primes.length; i++) if (p.modn(primes[i]) === 0) { + if (p.cmpn(primes[i]) === 0) { + return true; + } else { + return false; + } + } + return true; +} +function fermatTest(p) { + var red = BN.mont(p); + return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +} +function findPrime(bits, gen) { + if (bits < 16) { + // this is what openssl does + if (gen === 2 || gen === 5) { + return new BN([0x8c, 0x7b]); + } else { + return new BN([0x8c, 0x27]); + } + } + gen = new BN(gen); + var num, n2; + while (true) { + num = new BN(randomBytes(Math.ceil(bits / 8))); + while (num.bitLength() > bits) { + num.ishrn(1); + } + if (num.isEven()) { + num.iadd(ONE); + } + if (!num.testn(1)) { + num.iadd(TWO); + } + if (!gen.cmp(TWO)) { + while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { + num.iadd(FOUR); + } + } else if (!gen.cmp(FIVE)) { + while (num.mod(TEN).cmp(THREE)) { + num.iadd(FOUR); + } + } + n2 = num.shrn(1); + if (simpleSieve(n2) && simpleSieve(num) && fermatTest(n2) && fermatTest(num) && millerRabin.test(n2) && millerRabin.test(num)) { + return num; + } + } +} + +},{"bn.js":243,"miller-rabin":290,"randombytes":314}],242:[function(require,module,exports){ +module.exports={ + "modp1": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" + }, + "modp2": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" + }, + "modp5": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" + }, + "modp14": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" + }, + "modp15": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" + }, + "modp16": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" + }, + "modp17": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" + }, + "modp18": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" + } +} +},{}],243:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],244:[function(require,module,exports){ +'use strict'; + +var elliptic = exports; +elliptic.version = require('../package.json').version; +elliptic.utils = require('./elliptic/utils'); +elliptic.rand = require('brorand'); +elliptic.curve = require('./elliptic/curve'); +elliptic.curves = require('./elliptic/curves'); + +// Protocols +elliptic.ec = require('./elliptic/ec'); +elliptic.eddsa = require('./elliptic/eddsa'); + +},{"../package.json":260,"./elliptic/curve":247,"./elliptic/curves":250,"./elliptic/ec":251,"./elliptic/eddsa":254,"./elliptic/utils":258,"brorand":187}],245:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); + + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); + + // Useful for many curves + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); + + // Curve configuration, optional + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); + + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); + this._bitLength = this.n ? this.n.bitLength() : 0; + + // Generalized Greg Maxwell's trick + var adjustCount = this.n && this.p.div(this.n); + if (!adjustCount || adjustCount.cmpn(100) > 0) { + this.redN = null; + } else { + this._maxwellTrick = true; + this.redN = this.n.toRed(this.red); + } +} +module.exports = BaseCurve; +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); + var naf = getNAF(k, 1, this._bitLength); + var I = (1 << doubles.step + 1) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; + + // Translate into more windowed form + var repr = []; + var j; + var nafW; + for (j = 0; j < naf.length; j += doubles.step) { + nafW = 0; + for (var l = j + doubles.step - 1; l >= j; l--) nafW = (nafW << 1) + naf[l]; + repr.push(nafW); + } + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (j = 0; j < repr.length; j++) { + nafW = repr[j]; + if (nafW === i) b = b.mixedAdd(doubles.points[j]);else if (nafW === -i) b = b.mixedAdd(doubles.points[j].neg()); + } + a = a.add(b); + } + return a.toP(); +}; +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; + + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; + + // Get NAF form + var naf = getNAF(k, w, this._bitLength); + + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var l = 0; i >= 0 && naf[i] === 0; i--) l++; + if (i >= 0) l++; + acc = acc.dblp(l); + if (i < 0) break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) acc = acc.mixedAdd(wnd[z - 1 >> 1]);else acc = acc.mixedAdd(wnd[-z - 1 >> 1].neg()); + } else { + // J +- J + if (z > 0) acc = acc.add(wnd[z - 1 >> 1]);else acc = acc.add(wnd[-z - 1 >> 1].neg()); + } + } + return p.type === 'affine' ? acc.toP() : acc; +}; +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, points, coeffs, len, jacobianResult) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; + + // Fill all arrays + var max = 0; + var i; + var j; + var p; + for (i = 0; i < len; i++) { + p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } + + // Comb small window NAFs + for (i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength); + naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } + var comb = [points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b] /* 7 */]; + + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } + var index = [-3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3 /* 1 1 */]; + + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (i = max; i >= 0; i--) { + var k = 0; + while (i >= 0) { + var zero = true; + for (j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) zero = false; + } + if (!zero) break; + k++; + i--; + } + if (i >= 0) k++; + acc = acc.dblp(k); + if (i < 0) break; + for (j = 0; j < len; j++) { + var z = tmp[j]; + p; + if (z === 0) continue;else if (z > 0) p = wnd[j][z - 1 >> 1];else if (z < 0) p = wnd[j][-z - 1 >> 1].neg(); + if (p.type === 'affine') acc = acc.mixedAdd(p);else acc = acc.add(p); + } + } + // Zeroify references + for (i = 0; i < len; i++) wnd[i] = null; + if (jacobianResult) return acc;else return acc.toP(); +}; +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; +BasePoint.prototype.eq = function eq( /*other*/ +) { + throw new Error('Not implemented'); +}; +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); + var len = this.p.byteLength(); + + // uncompressed, hybrid-odd, hybrid-even + if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && bytes.length - 1 === 2 * len) { + if (bytes[0] === 0x06) assert(bytes[bytes.length - 1] % 2 === 0);else if (bytes[0] === 0x07) assert(bytes[bytes.length - 1] % 2 === 1); + var res = this.point(bytes.slice(1, 1 + len), bytes.slice(1 + len, 1 + 2 * len)); + return res; + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + throw new Error('Unknown point format'); +}; +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); + if (compact) return [this.getY().isEven() ? 0x02 : 0x03].concat(x); + return [0x04].concat(x, this.getY().toArray('be', len)); +}; +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) return this; + var precomputed = { + doubles: null, + naf: null, + beta: null + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; + return this; +}; +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) return false; + var doubles = this.precomputed.doubles; + if (!doubles) return false; + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) return this.precomputed.doubles; + var doubles = [this]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) acc = acc.dbl(); + doubles.push(acc); + } + return { + step: step, + points: doubles + }; +}; +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) return this.precomputed.naf; + var res = [this]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res + }; +}; +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) r = r.dbl(); + return r; +}; + +},{"../utils":258,"bn.js":259}],246:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); +var assert = utils.assert; +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + Base.call(this, 'edwards', conf); + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) return num.redNeg();else return this.a.redMul(num); +}; +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) return num;else return this.c.redMul(num); +}; + +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) x = x.toRed(this.red); + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) y = y.redNeg(); + return this.point(x, y); +}; +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) y = y.toRed(this.red); + + // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.c2); + var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); + var x2 = lhs.redMul(rhs.redInvm()); + if (x2.cmp(this.zero) === 0) { + if (odd) throw new Error('invalid point');else return this.point(this.zero, y); + } + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) throw new Error('invalid point'); + if (x.fromRed().isOdd() !== odd) x = x.redNeg(); + return this.point(x, y); +}; +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) return true; + + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + return lhs.cmp(rhs) === 0; +}; +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.y.red) this.y = this.y.toRed(this.curve.red); + if (!this.z.red) this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; + + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && (this.y.cmp(this.z) === 0 || this.zOne && this.y.cmp(this.curve.c) === 0); +}; +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); + var nx; + var ny; + var nz; + var e; + var h; + var j; + if (this.curve.twisted) { + // E = a * C + e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + h = this.z.redSqr(); + // J = F - 2 * H + j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + e = c.redAdd(d); + // H = (c * Z1)^2 + h = this.curve._mulC(this.z).redSqr(); + // J = E - 2 * H + j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) return this; + + // Double in extended coordinates + if (this.curve.extended) return this._extDbl();else return this._projDbl(); +}; +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; +Point.prototype.add = function add(p) { + if (this.isInfinity()) return p; + if (p.isInfinity()) return this; + if (this.curve.extended) return this._extAdd(p);else return this._projAdd(p); +}; +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else return this.curve._wnafMul(this, k); +}; +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, false); +}; +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, true); +}; +Point.prototype.normalize = function normalize() { + if (this.zOne) return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), this.y, this.z, this.t && this.t.redNeg()); +}; +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; +Point.prototype.eq = function eq(other) { + return this === other || this.getX().cmp(other.getX()) === 0 && this.getY().cmp(other.getY()) === 0; +}; +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) return true; + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) return false; + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) return true; + } +}; + +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; + +},{"../utils":258,"./base":245,"bn.js":259,"inherits":279}],247:[function(require,module,exports){ +'use strict'; + +var curve = exports; +curve.base = require('./base'); +curve.short = require('./short'); +curve.mont = require('./mont'); +curve.edwards = require('./edwards'); + +},{"./base":245,"./edwards":246,"./mont":248,"./short":249}],248:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); +var utils = require('../utils'); +function MontCurve(conf) { + Base.call(this, 'mont', conf); + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); +} +inherits(MontCurve, Base); +module.exports = MontCurve; +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); + return y.redSqr().cmp(rhs) === 0; +}; +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.z.red) this.z = this.z.toRed(this.curve.red); + } +} +inherits(Point, Base.BasePoint); +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); +}; +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; +Point.prototype.precompute = function precompute() { + // No-op +}; +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); +}; +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); +}; +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + + // A = X1 + Z1 + var a = this.x.redAdd(this.z); + // AA = A^2 + var aa = a.redSqr(); + // B = X1 - Z1 + var b = this.x.redSub(this.z); + // BB = B^2 + var bb = b.redSqr(); + // C = AA - BB + var c = aa.redSub(bb); + // X3 = AA * BB + var nx = aa.redMul(bb); + // Z3 = C * (BB + A24 * C) + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); +}; +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); +}; +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + + // A = X2 + Z2 + var a = this.x.redAdd(this.z); + // B = X2 - Z2 + var b = this.x.redSub(this.z); + // C = X3 + Z3 + var c = p.x.redAdd(p.z); + // D = X3 - Z3 + var d = p.x.redSub(p.z); + // DA = D * A + var da = d.redMul(a); + // CB = C * B + var cb = c.redMul(b); + // X5 = Z1 * (DA + CB)^2 + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); + // Z5 = X1 * (DA - CB)^2 + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); +}; +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + var b = this.curve.point(null, null); // (N / 2) * Q + var c = this; // Q + + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) bits.push(t.andln(1)); + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); + // N * Q = 2 * ((N / 2) * Q + Q)) + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); + // N * Q + Q = 2 * ((N / 2) * Q + Q) + a = a.dbl(); + } + } + return b; +}; +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); +}; +Point.prototype.jumlAdd = function jumlAdd() { + throw new Error('Not supported on Montgomery curve'); +}; +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; +}; +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; +}; +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); + return this.x.fromRed(); +}; + +},{"../utils":258,"./base":245,"bn.js":259,"inherits":279}],249:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); +var assert = utils.assert; +function ShortCurve(conf) { + Base.call(this, 'short', conf); + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) return; + + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } + + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function (vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + return { + beta: beta, + lambda: lambda, + basis: basis + }; +}; +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [l1, l2]; +}; +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); + + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } + + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + return [{ + a: a1, + b: b1 + }, { + a: a2, + b: b2 + }]; +}; +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); + + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { + k1: k1, + k2: k2 + }; +}; +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) x = x.toRed(this.red); + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); + + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) y = y.redNeg(); + return this.point(x, y); +}; +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) return true; + var x = point.x; + var y = point.y; + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; +ShortCurve.prototype._endoWnafMulAdd = function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); + } + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); + + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + return res; +}; +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.y.red) this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} +inherits(Point, Base.BasePoint); +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) return; + var pre = this.precomputed; + if (pre && pre.beta) return pre.beta; + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function (p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; + } + return beta; +}; +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) return [this.x, this.y]; + return [this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) + } + }]; +}; +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) return res; + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [res].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [res].concat(pre.naf.points.map(obj2point)) + } + }; + return res; +}; +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) return p; + + // P + O = P + if (p.inf) return this; + + // P + P = 2P + if (this.eq(p)) return this.dbl(); + + // P + (-P) = O + if (this.neg().eq(p)) return this.curve.point(null, null); + + // P + Q = O + if (this.x.cmp(p.x) === 0) return this.curve.point(null, null); + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; +Point.prototype.dbl = function dbl() { + if (this.inf) return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) return this.curve.point(null, null); + var a = this.curve.a; + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + if (this.isInfinity()) return this;else if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else if (this.curve.endo) return this.curve._endoWnafMulAdd([this], [k]);else return this.curve._wnafMul(this, k); +}; +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [this, p2]; + var coeffs = [k1, k2]; + if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs);else return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [this, p2]; + var coeffs = [k1, k2]; + if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs, true);else return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; +Point.prototype.eq = function eq(p) { + return this === p || this.inf === p.inf && (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; +Point.prototype.neg = function neg(_precompute) { + if (this.inf) return this; + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function (p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } + }; + } + return res; +}; +Point.prototype.toJ = function toJ() { + if (this.inf) return this.curve.jpoint(null, null, null); + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.y.red) this.y = this.y.toRed(this.curve.red); + if (!this.z.red) this.z = this.z.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) return this.curve.point(null, null); + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + return this.curve.point(ax, ay); +}; +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) return p; + + // P + O = P + if (p.isInfinity()) return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl(); + } + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) return p.toJ(); + + // P + O = P + if (p.isInfinity()) return this; + + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl(); + } + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) return this; + if (this.isInfinity()) return this; + if (!pow) return this.dbl(); + var i; + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (i = 0; i < pow; i++) r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) jz4 = jz4.redMul(jyd4); + jx = nx; + jz = nz; + jyd = dny; + } + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) return this; + if (this.curve.zeroA) return this._zeroDbl();else if (this.curve.threeA) return this._threeDbl();else return this._dbl(); +}; +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + return this.curve._wnafMul(this, k); +}; +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') return this.eq(p.toJ()); + if (this === p) return true; + + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) return false; + + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) return true; + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) return false; + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) return true; + } +}; +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +},{"../utils":258,"./base":245,"bn.js":259,"inherits":279}],250:[function(require,module,exports){ +'use strict'; + +var curves = exports; +var hash = require('hash.js'); +var curve = require('./curve'); +var utils = require('./utils'); +var assert = utils.assert; +function PresetCurve(options) { + if (options.type === 'short') this.curve = new curve.short(options);else if (options.type === 'edwards') this.curve = new curve.edwards(options);else this.curve = new curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} +curves.PresetCurve = PresetCurve; +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function () { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve + }); + return curve; + } + }); +} +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: ['188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'] +}); +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: ['b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'] +}); +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: ['6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'] +}); +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: ['aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + '5502f25d bf55296c 3a545e38 72760ab7', '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'] +}); +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: ['000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + '3fad0761 353c7086 a272c240 88be9476 9fd16650'] +}); +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '1', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: ['9'] +}); +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: ['216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', + // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658'] +}); +var pre; +try { + pre = require('./precomputed/secp256k1'); +} catch (e) { + pre = undefined; +} +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [{ + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3' + }, { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15' + }], + gRed: false, + g: ['79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', pre] +}); + +},{"./curve":247,"./precomputed/secp256k1":257,"./utils":258,"hash.js":265}],251:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var HmacDRBG = require('hmac-drbg'); +var utils = require('../utils'); +var curves = require('../curves'); +var rand = require('brorand'); +var assert = utils.assert; +var KeyPair = require('./key'); +var Signature = require('./signature'); +function EC(options) { + if (!(this instanceof EC)) return new EC(options); + + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(Object.prototype.hasOwnProperty.call(curves, options), 'Unknown curve ' + options); + options = curves[options]; + } + + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof curves.PresetCurve) options = { + curve: options + }; + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; + + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); + + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) options = {}; + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + entropy: options.entropy || rand(this.hash.hmacStrength), + entropyEnc: options.entropy && options.entropyEnc || 'utf8', + nonce: this.n.toArray() + }); + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + for (;;) { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) continue; + priv.iaddn(1); + return this.keyFromPrivate(priv); + } +}; +EC.prototype._truncateToN = function _truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) return msg.sub(this.n);else return msg; +}; +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) options = {}; + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); + + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); + + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc || 'utf8' + }); + + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); + for (var iter = 0;; iter++) { + var k = options.k ? options.k(iter) : new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) continue; + var kp = this.g.mul(k); + if (kp.isInfinity()) continue; + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) continue; + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) continue; + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | (kpX.cmp(r) !== 0 ? 2 : 0); + + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + return new Signature({ + r: r, + s: s, + recoveryParam: recoveryParam + }); + } +}; +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) return false; + + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + var p; + if (!this.curve._maxwellTrick) { + p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) return false; + return p.getX().umod(this.n).cmp(r) === 0; + } + + // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) return false; + + // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + return p.eqXToP(r); +}; +EC.prototype.recoverPubKey = function (msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; + + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) throw new Error('Unable to find sencond key candinate'); + + // 1.1. Let x = r + jn. + if (isSecondKey) r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);else r = this.curve.pointFromX(r, isYOdd); + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); + + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + return this.g.mulAdd(s1, r, s2); +}; +EC.prototype.getKeyRecoveryParam = function (e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) return signature.recoveryParam; + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + if (Qprime.eq(Q)) return i; + } + throw new Error('Unable to find valid recovery factor'); +}; + +},{"../curves":250,"../utils":258,"./key":252,"./signature":253,"bn.js":259,"brorand":187,"hmac-drbg":277}],252:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; + + // KeyPair(ec, { priv: ..., pub: ... }) + if (options.priv) this._importPrivate(options.priv, options.privEnc); + if (options.pub) this._importPublic(options.pub, options.pubEnc); +} +module.exports = KeyPair; +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) return pub; + return new KeyPair(ec, { + pub: pub, + pubEnc: enc + }); +}; +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) return priv; + return new KeyPair(ec, { + priv: priv, + privEnc: enc + }); +}; +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); + if (pub.isInfinity()) return { + result: false, + reason: 'Invalid public key' + }; + if (!pub.validate()) return { + result: false, + reason: 'Public key is not a point' + }; + if (!pub.mul(this.ec.curve.n).isInfinity()) return { + result: false, + reason: 'Public key * N != O' + }; + return { + result: true, + reason: null + }; +}; +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } + if (!this.pub) this.pub = this.ec.g.mul(this.priv); + if (!enc) return this.pub; + return this.pub.encode(enc, compact); +}; +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') return this.priv.toString(16, 2);else return this.priv; +}; +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); + + // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + this.priv = this.priv.umod(this.ec.curve.n); +}; +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + // Montgomery points only have an `x` coordinate. + // Weierstrass/Edwards points on the other hand have both `x` and + // `y` coordinates. + if (this.ec.curve.type === 'mont') { + assert(key.x, 'Need x coordinate'); + } else if (this.ec.curve.type === 'short' || this.ec.curve.type === 'edwards') { + assert(key.x && key.y, 'Need both x and y coordinate'); + } + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + this.pub = this.ec.curve.decodePoint(key, enc); +}; + +// ECDH +KeyPair.prototype.derive = function derive(pub) { + if (!pub.validate()) { + assert(pub.validate(), 'public point not validated'); + } + return pub.mul(this.priv).getX(); +}; + +// ECDSA +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); +}; +KeyPair.prototype.verify = function verify(msg, signature) { + return this.ec.verify(msg, signature, this); +}; +KeyPair.prototype.inspect = function inspect() { + return ''; +}; + +},{"../utils":258,"bn.js":259}],253:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; +function Signature(options, enc) { + if (options instanceof Signature) return options; + if (this._importDER(options, enc)) return; + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) this.recoveryParam = null;else this.recoveryParam = options.recoveryParam; +} +module.exports = Signature; +function Position() { + this.place = 0; +} +function getLength(buf, p) { + var initial = buf[p.place++]; + if (!(initial & 0x80)) { + return initial; + } + var octetLen = initial & 0xf; + + // Indefinite length or overflow + if (octetLen === 0 || octetLen > 4) { + return false; + } + var val = 0; + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + val >>>= 0; + } + + // Leading zeroes + if (val <= 0x7f) { + return false; + } + p.place = off; + return val; +} +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; + } + if (i === 0) { + return buf; + } + return buf.slice(i); +} +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + if (data[p.place++] !== 0x30) { + return false; + } + var len = getLength(data, p); + if (len === false) { + return false; + } + if (len + p.place !== data.length) { + return false; + } + if (data[p.place++] !== 0x02) { + return false; + } + var rlen = getLength(data, p); + if (rlen === false) { + return false; + } + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + if (data[p.place++] !== 0x02) { + return false; + } + var slen = getLength(data, p); + if (slen === false) { + return false; + } + if (data.length !== slen + p.place) { + return false; + } + var s = data.slice(p.place, slen + p.place); + if (r[0] === 0) { + if (r[1] & 0x80) { + r = r.slice(1); + } else { + // Leading zeroes + return false; + } + } + if (s[0] === 0) { + if (s[1] & 0x80) { + s = s.slice(1); + } else { + // Leading zeroes + return false; + } + } + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; + return true; +}; +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; + } + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + while (--octets) { + arr.push(len >>> (octets << 3) & 0xff); + } + arr.push(len); +} +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); + + // Pad values + if (r[0] & 0x80) r = [0].concat(r); + // Pad values + if (s[0] & 0x80) s = [0].concat(s); + r = rmPadding(r); + s = rmPadding(s); + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); + } + var arr = [0x02]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [0x30]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); +}; + +},{"../utils":258,"bn.js":259}],254:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var curves = require('../curves'); +var utils = require('../utils'); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var KeyPair = require('./key'); +var Signature = require('./signature'); +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); + if (!(this instanceof EDDSA)) return new EDDSA(curve); + curve = curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} +module.exports = EDDSA; + +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message).mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ + R: R, + S: S, + Rencoded: Rencoded + }); +}; + +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); +}; +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + for (var i = 0; i < arguments.length; i++) hash.update(arguments[i]); + return utils.intFromLE(hash.digest()).umod(this.curve.n); +}; +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); +}; +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) return sig; + return new Signature(this, sig); +}; + +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; + +},{"../curves":250,"../utils":258,"./key":255,"./signature":256,"hash.js":265}],255:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; + +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) this._pub = params.pub;else this._pubBytes = parseBytes(params.pub); +} +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) return pub; + return new KeyPair(eddsa, { + pub: pub + }); +}; +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) return secret; + return new KeyPair(eddsa, { + secret: secret + }); +}; +KeyPair.prototype.secret = function secret() { + return this._secret; +}; +cachedProperty(KeyPair, 'pubBytes', function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); +cachedProperty(KeyPair, 'pub', function pub() { + if (this._pubBytes) return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); +cachedProperty(KeyPair, 'privBytes', function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; + return a; +}); +cachedProperty(KeyPair, 'priv', function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); +cachedProperty(KeyPair, 'hash', function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); +cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); +}; +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); +}; +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; +module.exports = KeyPair; + +},{"../utils":258}],256:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; + +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ +function Signature(eddsa, sig) { + this.eddsa = eddsa; + if (typeof sig !== 'object') sig = parseBytes(sig); + if (Array.isArray(sig)) { + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength) + }; + } + assert(sig.R && sig.S, 'Signature without R or S'); + if (eddsa.isPoint(sig.R)) this._R = sig.R; + if (sig.S instanceof BN) this._S = sig.S; + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} +cachedProperty(Signature, 'S', function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); +cachedProperty(Signature, 'R', function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); +cachedProperty(Signature, 'Rencoded', function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); +cachedProperty(Signature, 'Sencoded', function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); +}; +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); +}; +module.exports = Signature; + +},{"../utils":258,"bn.js":259}],257:[function(require,module,exports){ +"use strict"; + +module.exports = { + doubles: { + step: 4, + points: [['e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'], ['8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'], ['175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'], ['363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'], ['8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'], ['723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'], ['eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'], ['100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'], ['e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'], ['feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'], ['da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'], ['53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'], ['8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'], ['385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'], ['6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'], ['3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'], ['85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'], ['948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'], ['6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'], ['e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'], ['e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'], ['213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'], ['4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'], ['fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'], ['76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'], ['c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'], ['d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'], ['b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'], ['e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'], ['a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'], ['90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'], ['8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'], ['e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'], ['8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'], ['e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'], ['b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'], ['d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'], ['324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'], ['4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'], ['9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'], ['6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'], ['a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'], ['7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'], ['928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'], ['85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'], ['ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'], ['827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'], ['eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'], ['e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'], ['1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'], ['146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'], ['fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'], ['da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'], ['a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'], ['174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'], ['959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'], ['d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'], ['64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'], ['8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'], ['13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'], ['bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'], ['8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'], ['8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'], ['dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'], ['f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82']] + }, + naf: { + wnd: 7, + points: [['f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'], ['2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'], ['5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'], ['acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'], ['774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'], ['f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'], ['d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'], ['defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'], ['2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'], ['352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'], ['2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'], ['9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'], ['daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'], ['c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'], ['6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'], ['1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'], ['605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'], ['62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'], ['80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'], ['7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'], ['d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'], ['49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'], ['77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'], ['f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'], ['463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'], ['f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'], ['caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'], ['2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'], ['7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'], ['754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'], ['e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'], ['186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'], ['df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'], ['5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'], ['290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'], ['af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'], ['766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'], ['59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'], ['f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'], ['7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'], ['948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'], ['7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'], ['3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'], ['d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'], ['1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'], ['733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'], ['15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'], ['a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'], ['e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'], ['311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'], ['34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'], ['f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'], ['d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'], ['32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'], ['7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'], ['ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'], ['16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'], ['eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'], ['78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'], ['494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'], ['a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'], ['c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'], ['841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'], ['5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'], ['36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'], ['336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'], ['8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'], ['1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'], ['85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'], ['29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'], ['a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'], ['4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'], ['d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'], ['ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'], ['af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'], ['e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'], ['591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'], ['11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'], ['3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'], ['cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'], ['c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'], ['c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'], ['a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'], ['347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'], ['da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'], ['c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'], ['4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'], ['3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'], ['cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'], ['b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'], ['d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'], ['48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'], ['dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'], ['6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'], ['e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'], ['eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'], ['13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'], ['ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'], ['b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'], ['ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'], ['8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'], ['52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'], ['e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'], ['7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'], ['5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'], ['32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'], ['e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'], ['8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'], ['4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'], ['3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'], ['674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'], ['d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'], ['30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'], ['be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'], ['93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'], ['b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'], ['d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'], ['d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'], ['463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'], ['7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'], ['74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'], ['30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'], ['9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'], ['176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'], ['75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'], ['809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'], ['1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9']] + } +}; + +},{}],258:[function(require,module,exports){ +'use strict'; + +var utils = exports; +var BN = require('bn.js'); +var minAssert = require('minimalistic-assert'); +var minUtils = require('minimalistic-crypto-utils'); +utils.assert = minAssert; +utils.toArray = minUtils.toArray; +utils.zero2 = minUtils.zero2; +utils.toHex = minUtils.toHex; +utils.encode = minUtils.encode; + +// Represent num in a w-NAF form +function getNAF(num, w, bits) { + var naf = new Array(Math.max(num.bitLength(), bits) + 1); + naf.fill(0); + var ws = 1 << w + 1; + var k = num.clone(); + for (var i = 0; i < naf.length; i++) { + var z; + var mod = k.andln(ws - 1); + if (k.isOdd()) { + if (mod > (ws >> 1) - 1) z = (ws >> 1) - mod;else z = mod; + k.isubn(z); + } else { + z = 0; + } + naf[i] = z; + k.iushrn(1); + } + return naf; +} +utils.getNAF = getNAF; + +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [[], []]; + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + var m8; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + // First phase + var m14 = k1.andln(3) + d1 & 3; + var m24 = k2.andln(3) + d2 & 3; + if (m14 === 3) m14 = -1; + if (m24 === 3) m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + m8 = k1.andln(7) + d1 & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) u1 = -m14;else u1 = m14; + } + jsf[0].push(u1); + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + m8 = k2.andln(7) + d2 & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) u2 = -m24;else u2 = m24; + } + jsf[1].push(u2); + + // Second phase + if (2 * d1 === u1 + 1) d1 = 1 - d1; + if (2 * d2 === u2 + 1) d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + return jsf; +} +utils.getJSF = getJSF; +function cachedProperty(obj, name, computer) { + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : bytes; +} +utils.parseBytes = parseBytes; +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; + +},{"bn.js":259,"minimalistic-assert":292,"minimalistic-crypto-utils":293}],259:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],260:[function(require,module,exports){ +module.exports={ + "name": "elliptic", + "version": "6.5.4", + "description": "EC cryptography", + "main": "lib/elliptic.js", + "files": [ + "lib" + ], + "scripts": { + "lint": "eslint lib test", + "lint:fix": "npm run lint -- --fix", + "unit": "istanbul test _mocha --reporter=spec test/index.js", + "test": "npm run lint && npm run unit", + "version": "grunt dist && git add dist/" + }, + "repository": { + "type": "git", + "url": "git@github.com:indutny/elliptic" + }, + "keywords": [ + "EC", + "Elliptic", + "curve", + "Cryptography" + ], + "author": "Fedor Indutny ", + "license": "MIT", + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "homepage": "https://github.com/indutny/elliptic", + "devDependencies": { + "brfs": "^2.0.2", + "coveralls": "^3.1.0", + "eslint": "^7.6.0", + "grunt": "^1.2.1", + "grunt-browserify": "^5.3.0", + "grunt-cli": "^1.3.2", + "grunt-contrib-connect": "^3.0.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-uglify": "^5.0.0", + "grunt-mocha-istanbul": "^5.0.2", + "grunt-saucelabs": "^9.0.1", + "istanbul": "^0.4.5", + "mocha": "^8.0.1" + }, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } +} + +},{}],261:[function(require,module,exports){ +"use strict"; + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var objectCreate = Object.create || objectCreatePolyfill; +var objectKeys = Object.keys || objectKeysPolyfill; +var bind = Function.prototype.bind || functionBindPolyfill; +function EventEmitter() { + if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) { + this._events = objectCreate(null); + this._eventsCount = 0; + } + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; +var hasDefineProperty; +try { + var o = {}; + if (Object.defineProperty) Object.defineProperty(o, 'x', { + value: 0 + }); + hasDefineProperty = o.x === 0; +} catch (err) { + hasDefineProperty = false; +} +if (hasDefineProperty) { + Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function () { + return defaultMaxListeners; + }, + set: function (arg) { + // check whether the input is a positive number (whose value is zero or + // greater and not a NaN). + if (typeof arg !== 'number' || arg < 0 || arg !== arg) throw new TypeError('"defaultMaxListeners" must be a positive number'); + defaultMaxListeners = arg; + } + }); +} else { + EventEmitter.defaultMaxListeners = defaultMaxListeners; +} + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || isNaN(n)) throw new TypeError('"n" argument must be a positive number'); + this._maxListeners = n; + return this; +}; +function $getMaxListeners(that) { + if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return $getMaxListeners(this); +}; + +// These standalone emit* functions are used to optimize calling of event +// handlers for fast cases because emit() itself often has a variable number of +// arguments and can be deoptimized because of that. These functions always have +// the same number of arguments and thus do not get deoptimized, so the code +// inside them can execute faster. +function emitNone(handler, isFn, self) { + if (isFn) handler.call(self);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].call(self); + } +} +function emitOne(handler, isFn, self, arg1) { + if (isFn) handler.call(self, arg1);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].call(self, arg1); + } +} +function emitTwo(handler, isFn, self, arg1, arg2) { + if (isFn) handler.call(self, arg1, arg2);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].call(self, arg1, arg2); + } +} +function emitThree(handler, isFn, self, arg1, arg2, arg3) { + if (isFn) handler.call(self, arg1, arg2, arg3);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].call(self, arg1, arg2, arg3); + } +} +function emitMany(handler, isFn, self, args) { + if (isFn) handler.apply(self, args);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].apply(self, args); + } +} +EventEmitter.prototype.emit = function emit(type) { + var er, handler, len, args, i, events; + var doError = type === 'error'; + events = this._events; + if (events) doError = doError && events.error == null;else if (!doError) return false; + + // If there is no 'error' event listener then throw. + if (doError) { + if (arguments.length > 1) er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Unhandled "error" event. (' + er + ')'); + err.context = er; + throw err; + } + return false; + } + handler = events[type]; + if (!handler) return false; + var isFn = typeof handler === 'function'; + len = arguments.length; + switch (len) { + // fast cases + case 1: + emitNone(handler, isFn, this); + break; + case 2: + emitOne(handler, isFn, this, arguments[1]); + break; + case 3: + emitTwo(handler, isFn, this, arguments[1], arguments[2]); + break; + case 4: + emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]); + break; + // slower + default: + args = new Array(len - 1); + for (i = 1; i < len; i++) args[i - 1] = arguments[i]; + emitMany(handler, isFn, this, args); + } + return true; +}; +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + events = target._events; + if (!events) { + events = target._events = objectCreate(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener) { + target.emit('newListener', type, listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + if (!existing) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = prepend ? [listener, existing] : [existing, listener]; + } else { + // If we've already got an array, just append. + if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + } + + // Check for listener leak + if (!existing.warned) { + m = $getMaxListeners(target); + if (m && m > 0 && existing.length > m) { + existing.warned = true; + var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' "' + String(type) + '" listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit.'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + if (typeof console === 'object' && console.warn) { + console.warn('%s: %s', w.name, w.message); + } + } + } + } + return target; +} +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; +EventEmitter.prototype.on = EventEmitter.prototype.addListener; +EventEmitter.prototype.prependListener = function prependListener(type, listener) { + return _addListener(this, type, listener, true); +}; +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + switch (arguments.length) { + case 0: + return this.listener.call(this.target); + case 1: + return this.listener.call(this.target, arguments[0]); + case 2: + return this.listener.call(this.target, arguments[0], arguments[1]); + case 3: + return this.listener.call(this.target, arguments[0], arguments[1], arguments[2]); + default: + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) args[i] = arguments[i]; + this.listener.apply(this.target, args); + } + } +} +function _onceWrap(target, type, listener) { + var state = { + fired: false, + wrapFn: undefined, + target: target, + type: type, + listener: listener + }; + var wrapped = bind.call(onceWrapper, state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} +EventEmitter.prototype.once = function once(type, listener) { + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; +EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) { + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; +}; + +// Emits a 'removeListener' event if and only if the listener was removed. +EventEmitter.prototype.removeListener = function removeListener(type, listener) { + var list, events, position, i, originalListener; + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + events = this._events; + if (!events) return this; + list = events[type]; + if (!list) return this; + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) this._events = objectCreate(null);else { + delete events[type]; + if (events.removeListener) this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + if (position < 0) return this; + if (position === 0) list.shift();else spliceOne(list, position); + if (list.length === 1) events[type] = list[0]; + if (events.removeListener) this.emit('removeListener', type, originalListener || listener); + } + return this; +}; +EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { + var listeners, events, i; + events = this._events; + if (!events) return this; + + // not listening for removeListener, no need to emit + if (!events.removeListener) { + if (arguments.length === 0) { + this._events = objectCreate(null); + this._eventsCount = 0; + } else if (events[type]) { + if (--this._eventsCount === 0) this._events = objectCreate(null);else delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = objectKeys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = objectCreate(null); + this._eventsCount = 0; + return this; + } + listeners = events[type]; + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + return this; +}; +function _listeners(target, type, unwrap) { + var events = target._events; + if (!events) return []; + var evlistener = events[type]; + if (!evlistener) return []; + if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; +EventEmitter.listenerCount = function (emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; +EventEmitter.prototype.listenerCount = listenerCount; +function listenerCount(type) { + var events = this._events; + if (events) { + var evlistener = events[type]; + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener) { + return evlistener.length; + } + } + return 0; +} +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; +}; + +// About 1.5x faster than the two-arg version of Array#splice(). +function spliceOne(list, index) { + for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) list[i] = list[k]; + list.pop(); +} +function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) copy[i] = arr[i]; + return copy; +} +function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; +} +function objectCreatePolyfill(proto) { + var F = function () {}; + F.prototype = proto; + return new F(); +} +function objectKeysPolyfill(obj) { + var keys = []; + for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) { + keys.push(k); + } + return k; +} +function functionBindPolyfill(context) { + var fn = this; + return function () { + return fn.apply(context, arguments); + }; +} + +},{}],262:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var MD5 = require('md5.js'); + +/* eslint-disable camelcase */ +function EVP_BytesToKey(password, salt, keyBits, ivLen) { + if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary'); + if (salt) { + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary'); + if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length'); + } + var keyLen = keyBits / 8; + var key = Buffer.alloc(keyLen); + var iv = Buffer.alloc(ivLen || 0); + var tmp = Buffer.alloc(0); + while (keyLen > 0 || ivLen > 0) { + var hash = new MD5(); + hash.update(tmp); + hash.update(password); + if (salt) hash.update(salt); + tmp = hash.digest(); + var used = 0; + if (keyLen > 0) { + var keyStart = key.length - keyLen; + used = Math.min(keyLen, tmp.length); + tmp.copy(key, keyStart, 0, used); + keyLen -= used; + } + if (used < tmp.length && ivLen > 0) { + var ivStart = iv.length - ivLen; + var length = Math.min(ivLen, tmp.length - used); + tmp.copy(iv, ivStart, used, used + length); + ivLen -= length; + } + } + tmp.fill(0); + return { + key: key, + iv: iv + }; +} +module.exports = EVP_BytesToKey; + +},{"md5.js":289,"safe-buffer":332}],263:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CsvParserStream = exports.ParserOptions = exports.parseFile = exports.parseStream = exports.parseString = exports.parse = exports.FormatterOptions = exports.CsvFormatterStream = exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = void 0; +var format_1 = require("@fast-csv/format"); +Object.defineProperty(exports, "format", { + enumerable: true, + get: function () { + return format_1.format; + } +}); +Object.defineProperty(exports, "write", { + enumerable: true, + get: function () { + return format_1.write; + } +}); +Object.defineProperty(exports, "writeToStream", { + enumerable: true, + get: function () { + return format_1.writeToStream; + } +}); +Object.defineProperty(exports, "writeToBuffer", { + enumerable: true, + get: function () { + return format_1.writeToBuffer; + } +}); +Object.defineProperty(exports, "writeToString", { + enumerable: true, + get: function () { + return format_1.writeToString; + } +}); +Object.defineProperty(exports, "writeToPath", { + enumerable: true, + get: function () { + return format_1.writeToPath; + } +}); +Object.defineProperty(exports, "CsvFormatterStream", { + enumerable: true, + get: function () { + return format_1.CsvFormatterStream; + } +}); +Object.defineProperty(exports, "FormatterOptions", { + enumerable: true, + get: function () { + return format_1.FormatterOptions; + } +}); +var parse_1 = require("@fast-csv/parse"); +Object.defineProperty(exports, "parse", { + enumerable: true, + get: function () { + return parse_1.parse; + } +}); +Object.defineProperty(exports, "parseString", { + enumerable: true, + get: function () { + return parse_1.parseString; + } +}); +Object.defineProperty(exports, "parseStream", { + enumerable: true, + get: function () { + return parse_1.parseStream; + } +}); +Object.defineProperty(exports, "parseFile", { + enumerable: true, + get: function () { + return parse_1.parseFile; + } +}); +Object.defineProperty(exports, "ParserOptions", { + enumerable: true, + get: function () { + return parse_1.ParserOptions; + } +}); +Object.defineProperty(exports, "CsvParserStream", { + enumerable: true, + get: function () { + return parse_1.CsvParserStream; + } +}); + +},{"@fast-csv/format":151,"@fast-csv/parse":155}],264:[function(require,module,exports){ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; +var Transform = require('readable-stream').Transform; +var inherits = require('inherits'); +function throwIfNotStringOrBuffer(val, prefix) { + if (!Buffer.isBuffer(val) && typeof val !== 'string') { + throw new TypeError(prefix + ' must be a string or a buffer'); + } +} +function HashBase(blockSize) { + Transform.call(this); + this._block = Buffer.allocUnsafe(blockSize); + this._blockSize = blockSize; + this._blockOffset = 0; + this._length = [0, 0, 0, 0]; + this._finalized = false; +} +inherits(HashBase, Transform); +HashBase.prototype._transform = function (chunk, encoding, callback) { + var error = null; + try { + this.update(chunk, encoding); + } catch (err) { + error = err; + } + callback(error); +}; +HashBase.prototype._flush = function (callback) { + var error = null; + try { + this.push(this.digest()); + } catch (err) { + error = err; + } + callback(error); +}; +HashBase.prototype.update = function (data, encoding) { + throwIfNotStringOrBuffer(data, 'Data'); + if (this._finalized) throw new Error('Digest already called'); + if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding); + + // consume data + var block = this._block; + var offset = 0; + while (this._blockOffset + data.length - offset >= this._blockSize) { + for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]; + this._update(); + this._blockOffset = 0; + } + while (offset < data.length) block[this._blockOffset++] = data[offset++]; + + // update length + for (var j = 0, carry = data.length * 8; carry > 0; ++j) { + this._length[j] += carry; + carry = this._length[j] / 0x0100000000 | 0; + if (carry > 0) this._length[j] -= 0x0100000000 * carry; + } + return this; +}; +HashBase.prototype._update = function () { + throw new Error('_update is not implemented'); +}; +HashBase.prototype.digest = function (encoding) { + if (this._finalized) throw new Error('Digest already called'); + this._finalized = true; + var digest = this._digest(); + if (encoding !== undefined) digest = digest.toString(encoding); + + // reset state + this._block.fill(0); + this._blockOffset = 0; + for (var i = 0; i < 4; ++i) this._length[i] = 0; + return digest; +}; +HashBase.prototype._digest = function () { + throw new Error('_digest is not implemented'); +}; +module.exports = HashBase; + +},{"inherits":279,"readable-stream":330,"safe-buffer":332}],265:[function(require,module,exports){ +"use strict"; + +var hash = exports; +hash.utils = require('./hash/utils'); +hash.common = require('./hash/common'); +hash.sha = require('./hash/sha'); +hash.ripemd = require('./hash/ripemd'); +hash.hmac = require('./hash/hmac'); + +// Proxy hash functions to the main object +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; + +},{"./hash/common":266,"./hash/hmac":267,"./hash/ripemd":268,"./hash/sha":269,"./hash/utils":276}],266:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; +} +exports.BlockHash = BlockHash; +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) this.pending = msg;else this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; + + // Enough data, try updating + if (this.pending.length >= this._delta8) { + msg = this.pending; + + // Process pending data in blocks + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) this.pending = null; + msg = utils.join32(msg, 0, msg.length - r, this.endian); + for (var i = 0; i < msg.length; i += this._delta32) this._update(msg, i, i + this._delta32); + } + return this; +}; +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); + return this._digest(enc); +}; +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - (len + this.padLength) % bytes; + var res = new Array(k + this.padLength); + res[0] = 0x80; + for (var i = 1; i < k; i++) res[i] = 0; + + // Append length + len <<= 3; + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = len >>> 24 & 0xff; + res[i++] = len >>> 16 & 0xff; + res[i++] = len >>> 8 & 0xff; + res[i++] = len & 0xff; + } else { + res[i++] = len & 0xff; + res[i++] = len >>> 8 & 0xff; + res[i++] = len >>> 16 & 0xff; + res[i++] = len >>> 24 & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + for (t = 8; t < this.padLength; t++) res[i++] = 0; + } + return res; +}; + +},{"./utils":276,"minimalistic-assert":292}],267:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; + this._init(utils.toArray(key, enc)); +} +module.exports = Hmac; +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); + + // Add padding to key + for (var i = key.length; i < this.blockSize; i++) key.push(0); + for (i = 0; i < key.length; i++) key[i] ^= 0x36; + this.inner = new this.Hash().update(key); + + // 0x36 ^ 0x5c = 0x6a + for (i = 0; i < key.length; i++) key[i] ^= 0x6a; + this.outer = new this.Hash().update(key); +}; +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; +}; +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; + +},{"./utils":276,"minimalistic-assert":292}],268:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var common = require('./common'); +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = common.BlockHash; +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) return new RIPEMD160(); + BlockHash.call(this); + this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + this.endian = 'little'; +} +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + for (var j = 0; j < 80; j++) { + var T = sum32(rotl32(sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), s[j]), E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32(rotl32(sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), sh[j]), Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; + } + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'little');else return utils.split32(this.h, 'little'); +}; +function f(j, x, y, z) { + if (j <= 15) return x ^ y ^ z;else if (j <= 31) return x & y | ~x & z;else if (j <= 47) return (x | ~y) ^ z;else if (j <= 63) return x & z | y & ~z;else return x ^ (y | ~z); +} +function K(j) { + if (j <= 15) return 0x00000000;else if (j <= 31) return 0x5a827999;else if (j <= 47) return 0x6ed9eba1;else if (j <= 63) return 0x8f1bbcdc;else return 0xa953fd4e; +} +function Kh(j) { + if (j <= 15) return 0x50a28be6;else if (j <= 31) return 0x5c4dd124;else if (j <= 47) return 0x6d703ef3;else if (j <= 63) return 0x7a6d76e9;else return 0x00000000; +} +var r = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]; +var rh = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]; +var s = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]; +var sh = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]; + +},{"./common":266,"./utils":276}],269:[function(require,module,exports){ +'use strict'; + +exports.sha1 = require('./sha/1'); +exports.sha224 = require('./sha/224'); +exports.sha256 = require('./sha/256'); +exports.sha384 = require('./sha/384'); +exports.sha512 = require('./sha/512'); + +},{"./sha/1":270,"./sha/224":271,"./sha/256":272,"./sha/384":273,"./sha/512":274}],270:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_5 = utils.sum32_5; +var ft_1 = shaCommon.ft_1; +var BlockHash = common.BlockHash; +var sha1_K = [0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6]; +function SHA1() { + if (!(this instanceof SHA1)) return new SHA1(); + BlockHash.call(this); + this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + this.W = new Array(80); +} +utils.inherits(SHA1, BlockHash); +module.exports = SHA1; +SHA1.blockSize = 512; +SHA1.outSize = 160; +SHA1.hmacStrength = 80; +SHA1.padLength = 64; +SHA1.prototype._update = function _update(msg, start) { + var W = this.W; + for (var i = 0; i < 16; i++) W[i] = msg[start + i]; + for (; i < W.length; i++) W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + for (i = 0; i < W.length; i++) { + var s = ~~(i / 20); + var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); + e = d; + d = c; + c = rotl32(b, 30); + b = a; + a = t; + } + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); +}; +SHA1.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big'); +}; + +},{"../common":266,"../utils":276,"./common":275}],271:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var SHA256 = require('./256'); +function SHA224() { + if (!(this instanceof SHA224)) return new SHA224(); + SHA256.call(this); + this.h = [0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]; +} +utils.inherits(SHA224, SHA256); +module.exports = SHA224; +SHA224.blockSize = 512; +SHA224.outSize = 224; +SHA224.hmacStrength = 192; +SHA224.padLength = 64; +SHA224.prototype._digest = function digest(enc) { + // Just truncate output + if (enc === 'hex') return utils.toHex32(this.h.slice(0, 7), 'big');else return utils.split32(this.h.slice(0, 7), 'big'); +}; + +},{"../utils":276,"./256":272}],272:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); +var assert = require('minimalistic-assert'); +var sum32 = utils.sum32; +var sum32_4 = utils.sum32_4; +var sum32_5 = utils.sum32_5; +var ch32 = shaCommon.ch32; +var maj32 = shaCommon.maj32; +var s0_256 = shaCommon.s0_256; +var s1_256 = shaCommon.s1_256; +var g0_256 = shaCommon.g0_256; +var g1_256 = shaCommon.g1_256; +var BlockHash = common.BlockHash; +var sha256_K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; +function SHA256() { + if (!(this instanceof SHA256)) return new SHA256(); + BlockHash.call(this); + this.h = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]; + this.k = sha256_K; + this.W = new Array(64); +} +utils.inherits(SHA256, BlockHash); +module.exports = SHA256; +SHA256.blockSize = 512; +SHA256.outSize = 256; +SHA256.hmacStrength = 192; +SHA256.padLength = 64; +SHA256.prototype._update = function _update(msg, start) { + var W = this.W; + for (var i = 0; i < 16; i++) W[i] = msg[start + i]; + for (; i < W.length; i++) W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + var f = this.h[5]; + var g = this.h[6]; + var h = this.h[7]; + assert(this.k.length === W.length); + for (i = 0; i < W.length; i++) { + var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); + var T2 = sum32(s0_256(a), maj32(a, b, c)); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); + this.h[5] = sum32(this.h[5], f); + this.h[6] = sum32(this.h[6], g); + this.h[7] = sum32(this.h[7], h); +}; +SHA256.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big'); +}; + +},{"../common":266,"../utils":276,"./common":275,"minimalistic-assert":292}],273:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var SHA512 = require('./512'); +function SHA384() { + if (!(this instanceof SHA384)) return new SHA384(); + SHA512.call(this); + this.h = [0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939, 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4]; +} +utils.inherits(SHA384, SHA512); +module.exports = SHA384; +SHA384.blockSize = 1024; +SHA384.outSize = 384; +SHA384.hmacStrength = 192; +SHA384.padLength = 128; +SHA384.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h.slice(0, 12), 'big');else return utils.split32(this.h.slice(0, 12), 'big'); +}; + +},{"../utils":276,"./512":274}],274:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var assert = require('minimalistic-assert'); +var rotr64_hi = utils.rotr64_hi; +var rotr64_lo = utils.rotr64_lo; +var shr64_hi = utils.shr64_hi; +var shr64_lo = utils.shr64_lo; +var sum64 = utils.sum64; +var sum64_hi = utils.sum64_hi; +var sum64_lo = utils.sum64_lo; +var sum64_4_hi = utils.sum64_4_hi; +var sum64_4_lo = utils.sum64_4_lo; +var sum64_5_hi = utils.sum64_5_hi; +var sum64_5_lo = utils.sum64_5_lo; +var BlockHash = common.BlockHash; +var sha512_K = [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817]; +function SHA512() { + if (!(this instanceof SHA512)) return new SHA512(); + BlockHash.call(this); + this.h = [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1, 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179]; + this.k = sha512_K; + this.W = new Array(160); +} +utils.inherits(SHA512, BlockHash); +module.exports = SHA512; +SHA512.blockSize = 1024; +SHA512.outSize = 512; +SHA512.hmacStrength = 192; +SHA512.padLength = 128; +SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { + var W = this.W; + + // 32 x 32bit words + for (var i = 0; i < 32; i++) W[i] = msg[start + i]; + for (; i < W.length; i += 2) { + var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 + var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); + var c1_hi = W[i - 14]; // i - 7 + var c1_lo = W[i - 13]; + var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 + var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); + var c3_hi = W[i - 32]; // i - 16 + var c3_lo = W[i - 31]; + W[i] = sum64_4_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); + W[i + 1] = sum64_4_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); + } +}; +SHA512.prototype._update = function _update(msg, start) { + this._prepareBlock(msg, start); + var W = this.W; + var ah = this.h[0]; + var al = this.h[1]; + var bh = this.h[2]; + var bl = this.h[3]; + var ch = this.h[4]; + var cl = this.h[5]; + var dh = this.h[6]; + var dl = this.h[7]; + var eh = this.h[8]; + var el = this.h[9]; + var fh = this.h[10]; + var fl = this.h[11]; + var gh = this.h[12]; + var gl = this.h[13]; + var hh = this.h[14]; + var hl = this.h[15]; + assert(this.k.length === W.length); + for (var i = 0; i < W.length; i += 2) { + var c0_hi = hh; + var c0_lo = hl; + var c1_hi = s1_512_hi(eh, el); + var c1_lo = s1_512_lo(eh, el); + var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); + var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); + var c3_hi = this.k[i]; + var c3_lo = this.k[i + 1]; + var c4_hi = W[i]; + var c4_lo = W[i + 1]; + var T1_hi = sum64_5_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); + var T1_lo = sum64_5_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); + c0_hi = s0_512_hi(ah, al); + c0_lo = s0_512_lo(ah, al); + c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); + c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); + var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); + var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + eh = sum64_hi(dh, dl, T1_hi, T1_lo); + el = sum64_lo(dl, dl, T1_hi, T1_lo); + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); + al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); + } + sum64(this.h, 0, ah, al); + sum64(this.h, 2, bh, bl); + sum64(this.h, 4, ch, cl); + sum64(this.h, 6, dh, dl); + sum64(this.h, 8, eh, el); + sum64(this.h, 10, fh, fl); + sum64(this.h, 12, gh, gl); + sum64(this.h, 14, hh, hl); +}; +SHA512.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big'); +}; +function ch64_hi(xh, xl, yh, yl, zh) { + var r = xh & yh ^ ~xh & zh; + if (r < 0) r += 0x100000000; + return r; +} +function ch64_lo(xh, xl, yh, yl, zh, zl) { + var r = xl & yl ^ ~xl & zl; + if (r < 0) r += 0x100000000; + return r; +} +function maj64_hi(xh, xl, yh, yl, zh) { + var r = xh & yh ^ xh & zh ^ yh & zh; + if (r < 0) r += 0x100000000; + return r; +} +function maj64_lo(xh, xl, yh, yl, zh, zl) { + var r = xl & yl ^ xl & zl ^ yl & zl; + if (r < 0) r += 0x100000000; + return r; +} +function s0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 28); + var c1_hi = rotr64_hi(xl, xh, 2); // 34 + var c2_hi = rotr64_hi(xl, xh, 7); // 39 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} +function s0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 28); + var c1_lo = rotr64_lo(xl, xh, 2); // 34 + var c2_lo = rotr64_lo(xl, xh, 7); // 39 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} +function s1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 14); + var c1_hi = rotr64_hi(xh, xl, 18); + var c2_hi = rotr64_hi(xl, xh, 9); // 41 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} +function s1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 14); + var c1_lo = rotr64_lo(xh, xl, 18); + var c2_lo = rotr64_lo(xl, xh, 9); // 41 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} +function g0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 1); + var c1_hi = rotr64_hi(xh, xl, 8); + var c2_hi = shr64_hi(xh, xl, 7); + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} +function g0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 1); + var c1_lo = rotr64_lo(xh, xl, 8); + var c2_lo = shr64_lo(xh, xl, 7); + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} +function g1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 19); + var c1_hi = rotr64_hi(xl, xh, 29); // 61 + var c2_hi = shr64_hi(xh, xl, 6); + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} +function g1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 19); + var c1_lo = rotr64_lo(xl, xh, 29); // 61 + var c2_lo = shr64_lo(xh, xl, 6); + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} + +},{"../common":266,"../utils":276,"minimalistic-assert":292}],275:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var rotr32 = utils.rotr32; +function ft_1(s, x, y, z) { + if (s === 0) return ch32(x, y, z); + if (s === 1 || s === 3) return p32(x, y, z); + if (s === 2) return maj32(x, y, z); +} +exports.ft_1 = ft_1; +function ch32(x, y, z) { + return x & y ^ ~x & z; +} +exports.ch32 = ch32; +function maj32(x, y, z) { + return x & y ^ x & z ^ y & z; +} +exports.maj32 = maj32; +function p32(x, y, z) { + return x ^ y ^ z; +} +exports.p32 = p32; +function s0_256(x) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} +exports.s0_256 = s0_256; +function s1_256(x) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} +exports.s1_256 = s1_256; +function g0_256(x) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ x >>> 3; +} +exports.g0_256 = g0_256; +function g1_256(x) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ x >>> 10; +} +exports.g1_256 = g1_256; + +},{"../utils":276}],276:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); +exports.inherits = inherits; +function isSurrogatePair(msg, i) { + if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { + return false; + } + if (i < 0 || i + 1 >= msg.length) { + return false; + } + return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; +} +function toArray(msg, enc) { + if (Array.isArray(msg)) return msg.slice(); + if (!msg) return []; + var res = []; + if (typeof msg === 'string') { + if (!enc) { + // Inspired by stringToUtf8ByteArray() in closure-library by Google + // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 + // Apache License 2.0 + // https://github.com/google/closure-library/blob/master/LICENSE + var p = 0; + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + if (c < 128) { + res[p++] = c; + } else if (c < 2048) { + res[p++] = c >> 6 | 192; + res[p++] = c & 63 | 128; + } else if (isSurrogatePair(msg, i)) { + c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); + res[p++] = c >> 18 | 240; + res[p++] = c >> 12 & 63 | 128; + res[p++] = c >> 6 & 63 | 128; + res[p++] = c & 63 | 128; + } else { + res[p++] = c >> 12 | 224; + res[p++] = c >> 6 & 63 | 128; + res[p++] = c & 63 | 128; + } + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) msg = '0' + msg; + for (i = 0; i < msg.length; i += 2) res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + } else { + for (i = 0; i < msg.length; i++) res[i] = msg[i] | 0; + } + return res; +} +exports.toArray = toArray; +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) res += zero2(msg[i].toString(16)); + return res; +} +exports.toHex = toHex; +function htonl(w) { + var res = w >>> 24 | w >>> 8 & 0xff00 | w << 8 & 0xff0000 | (w & 0xff) << 24; + return res >>> 0; +} +exports.htonl = htonl; +function toHex32(msg, endian) { + var res = ''; + for (var i = 0; i < msg.length; i++) { + var w = msg[i]; + if (endian === 'little') w = htonl(w); + res += zero8(w.toString(16)); + } + return res; +} +exports.toHex32 = toHex32; +function zero2(word) { + if (word.length === 1) return '0' + word;else return word; +} +exports.zero2 = zero2; +function zero8(word) { + if (word.length === 7) return '0' + word;else if (word.length === 6) return '00' + word;else if (word.length === 5) return '000' + word;else if (word.length === 4) return '0000' + word;else if (word.length === 3) return '00000' + word;else if (word.length === 2) return '000000' + word;else if (word.length === 1) return '0000000' + word;else return word; +} +exports.zero8 = zero8; +function join32(msg, start, end, endian) { + var len = end - start; + assert(len % 4 === 0); + var res = new Array(len / 4); + for (var i = 0, k = start; i < res.length; i++, k += 4) { + var w; + if (endian === 'big') w = msg[k] << 24 | msg[k + 1] << 16 | msg[k + 2] << 8 | msg[k + 3];else w = msg[k + 3] << 24 | msg[k + 2] << 16 | msg[k + 1] << 8 | msg[k]; + res[i] = w >>> 0; + } + return res; +} +exports.join32 = join32; +function split32(msg, endian) { + var res = new Array(msg.length * 4); + for (var i = 0, k = 0; i < msg.length; i++, k += 4) { + var m = msg[i]; + if (endian === 'big') { + res[k] = m >>> 24; + res[k + 1] = m >>> 16 & 0xff; + res[k + 2] = m >>> 8 & 0xff; + res[k + 3] = m & 0xff; + } else { + res[k + 3] = m >>> 24; + res[k + 2] = m >>> 16 & 0xff; + res[k + 1] = m >>> 8 & 0xff; + res[k] = m & 0xff; + } + } + return res; +} +exports.split32 = split32; +function rotr32(w, b) { + return w >>> b | w << 32 - b; +} +exports.rotr32 = rotr32; +function rotl32(w, b) { + return w << b | w >>> 32 - b; +} +exports.rotl32 = rotl32; +function sum32(a, b) { + return a + b >>> 0; +} +exports.sum32 = sum32; +function sum32_3(a, b, c) { + return a + b + c >>> 0; +} +exports.sum32_3 = sum32_3; +function sum32_4(a, b, c, d) { + return a + b + c + d >>> 0; +} +exports.sum32_4 = sum32_4; +function sum32_5(a, b, c, d, e) { + return a + b + c + d + e >>> 0; +} +exports.sum32_5 = sum32_5; +function sum64(buf, pos, ah, al) { + var bh = buf[pos]; + var bl = buf[pos + 1]; + var lo = al + bl >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + buf[pos] = hi >>> 0; + buf[pos + 1] = lo; +} +exports.sum64 = sum64; +function sum64_hi(ah, al, bh, bl) { + var lo = al + bl >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + return hi >>> 0; +} +exports.sum64_hi = sum64_hi; +function sum64_lo(ah, al, bh, bl) { + var lo = al + bl; + return lo >>> 0; +} +exports.sum64_lo = sum64_lo; +function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { + var carry = 0; + var lo = al; + lo = lo + bl >>> 0; + carry += lo < al ? 1 : 0; + lo = lo + cl >>> 0; + carry += lo < cl ? 1 : 0; + lo = lo + dl >>> 0; + carry += lo < dl ? 1 : 0; + var hi = ah + bh + ch + dh + carry; + return hi >>> 0; +} +exports.sum64_4_hi = sum64_4_hi; +function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { + var lo = al + bl + cl + dl; + return lo >>> 0; +} +exports.sum64_4_lo = sum64_4_lo; +function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var carry = 0; + var lo = al; + lo = lo + bl >>> 0; + carry += lo < al ? 1 : 0; + lo = lo + cl >>> 0; + carry += lo < cl ? 1 : 0; + lo = lo + dl >>> 0; + carry += lo < dl ? 1 : 0; + lo = lo + el >>> 0; + carry += lo < el ? 1 : 0; + var hi = ah + bh + ch + dh + eh + carry; + return hi >>> 0; +} +exports.sum64_5_hi = sum64_5_hi; +function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var lo = al + bl + cl + dl + el; + return lo >>> 0; +} +exports.sum64_5_lo = sum64_5_lo; +function rotr64_hi(ah, al, num) { + var r = al << 32 - num | ah >>> num; + return r >>> 0; +} +exports.rotr64_hi = rotr64_hi; +function rotr64_lo(ah, al, num) { + var r = ah << 32 - num | al >>> num; + return r >>> 0; +} +exports.rotr64_lo = rotr64_lo; +function shr64_hi(ah, al, num) { + return ah >>> num; +} +exports.shr64_hi = shr64_hi; +function shr64_lo(ah, al, num) { + var r = ah << 32 - num | al >>> num; + return r >>> 0; +} +exports.shr64_lo = shr64_lo; + +},{"inherits":279,"minimalistic-assert":292}],277:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var utils = require('minimalistic-crypto-utils'); +var assert = require('minimalistic-assert'); +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; + this._reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; + var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); + var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); + var pers = utils.toArray(options.pers, options.persEnc || 'hex'); + assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._init(entropy, nonce, pers); +} +module.exports = HmacDRBG; +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; + } + this._update(seed); + this._reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 +}; + +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); +}; +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac().update(this.V).update([0x00]); + if (seed) kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) return; + this.K = this._hmac().update(this.V).update([0x01]).update(seed).digest(); + this.V = this._hmac().update(this.V).digest(); +}; +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; + } + entropy = utils.toArray(entropy, entropyEnc); + add = utils.toArray(add, addEnc); + assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._update(entropy.concat(add || [])); + this._reseed = 1; +}; +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this._reseed > this.reseedInterval) throw new Error('Reseed is required'); + + // Optional encoding + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } + + // Optional additional data + if (add) { + add = utils.toArray(add, addEnc || 'hex'); + this._update(add); + } + var temp = []; + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); + } + var res = temp.slice(0, len); + this._update(add); + this._reseed++; + return utils.encode(res, enc); +}; + +},{"hash.js":265,"minimalistic-assert":292,"minimalistic-crypto-utils":293}],278:[function(require,module,exports){ +"use strict"; + +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? nBytes - 1 : 0; + var d = isLE ? -1 : 1; + var s = buffer[offset + i]; + i += d; + e = s & (1 << -nBits) - 1; + s >>= -nBits; + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : (s ? -1 : 1) * Infinity; + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; + var i = isLE ? 0 : nBytes - 1; + var d = isLE ? 1 : -1; + var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + value = Math.abs(value); + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + e = e << mLen | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + buffer[offset + i - d] |= s * 128; +}; + +},{}],279:[function(require,module,exports){ +"use strict"; + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + }; +} + +},{}],280:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,setImmediate){(function (){ +"use strict"; + +/*! + +JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/main/LICENSE +*/ + +!function (e) { + if ("object" == typeof exports && "undefined" != typeof module) module.exports = e();else if ("function" == typeof define && define.amd) define([], e);else { + ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).JSZip = e(); + } +}(function () { + return function s(a, o, h) { + function u(r, e) { + if (!o[r]) { + if (!a[r]) { + var t = "function" == typeof require && require; + if (!e && t) return t(r, !0); + if (l) return l(r, !0); + var n = new Error("Cannot find module '" + r + "'"); + throw n.code = "MODULE_NOT_FOUND", n; + } + var i = o[r] = { + exports: {} + }; + a[r][0].call(i.exports, function (e) { + var t = a[r][1][e]; + return u(t || e); + }, i, i.exports, s, a, o, h); + } + return o[r].exports; + } + for (var l = "function" == typeof require && require, e = 0; e < h.length; e++) u(h[e]); + return u; + }({ + 1: [function (e, t, r) { + "use strict"; + + var d = e("./utils"), + c = e("./support"), + p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + r.encode = function (e) { + for (var t, r, n, i, s, a, o, h = [], u = 0, l = e.length, f = l, c = "string" !== d.getTypeOf(e); u < e.length;) f = l - u, n = c ? (t = e[u++], r = u < l ? e[u++] : 0, u < l ? e[u++] : 0) : (t = e.charCodeAt(u++), r = u < l ? e.charCodeAt(u++) : 0, u < l ? e.charCodeAt(u++) : 0), i = t >> 2, s = (3 & t) << 4 | r >> 4, a = 1 < f ? (15 & r) << 2 | n >> 6 : 64, o = 2 < f ? 63 & n : 64, h.push(p.charAt(i) + p.charAt(s) + p.charAt(a) + p.charAt(o)); + return h.join(""); + }, r.decode = function (e) { + var t, + r, + n, + i, + s, + a, + o = 0, + h = 0, + u = "data:"; + if (e.substr(0, u.length) === u) throw new Error("Invalid base64 input, it looks like a data url."); + var l, + f = 3 * (e = e.replace(/[^A-Za-z0-9+/=]/g, "")).length / 4; + if (e.charAt(e.length - 1) === p.charAt(64) && f--, e.charAt(e.length - 2) === p.charAt(64) && f--, f % 1 != 0) throw new Error("Invalid base64 input, bad content length."); + for (l = c.uint8array ? new Uint8Array(0 | f) : new Array(0 | f); o < e.length;) t = p.indexOf(e.charAt(o++)) << 2 | (i = p.indexOf(e.charAt(o++))) >> 4, r = (15 & i) << 4 | (s = p.indexOf(e.charAt(o++))) >> 2, n = (3 & s) << 6 | (a = p.indexOf(e.charAt(o++))), l[h++] = t, 64 !== s && (l[h++] = r), 64 !== a && (l[h++] = n); + return l; + }; + }, { + "./support": 30, + "./utils": 32 + }], + 2: [function (e, t, r) { + "use strict"; + + var n = e("./external"), + i = e("./stream/DataWorker"), + s = e("./stream/Crc32Probe"), + a = e("./stream/DataLengthProbe"); + function o(e, t, r, n, i) { + this.compressedSize = e, this.uncompressedSize = t, this.crc32 = r, this.compression = n, this.compressedContent = i; + } + o.prototype = { + getContentWorker: function () { + var e = new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")), + t = this; + return e.on("end", function () { + if (this.streamInfo.data_length !== t.uncompressedSize) throw new Error("Bug : uncompressed data size mismatch"); + }), e; + }, + getCompressedWorker: function () { + return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize", this.compressedSize).withStreamInfo("uncompressedSize", this.uncompressedSize).withStreamInfo("crc32", this.crc32).withStreamInfo("compression", this.compression); + } + }, o.createWorkerFrom = function (e, t, r) { + return e.pipe(new s()).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression", t); + }, t.exports = o; + }, { + "./external": 6, + "./stream/Crc32Probe": 25, + "./stream/DataLengthProbe": 26, + "./stream/DataWorker": 27 + }], + 3: [function (e, t, r) { + "use strict"; + + var n = e("./stream/GenericWorker"); + r.STORE = { + magic: "\0\0", + compressWorker: function () { + return new n("STORE compression"); + }, + uncompressWorker: function () { + return new n("STORE decompression"); + } + }, r.DEFLATE = e("./flate"); + }, { + "./flate": 7, + "./stream/GenericWorker": 28 + }], + 4: [function (e, t, r) { + "use strict"; + + var n = e("./utils"); + var o = function () { + for (var e, t = [], r = 0; r < 256; r++) { + e = r; + for (var n = 0; n < 8; n++) e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; + t[r] = e; + } + return t; + }(); + t.exports = function (e, t) { + return void 0 !== e && e.length ? "string" !== n.getTypeOf(e) ? function (e, t, r, n) { + var i = o, + s = n + r; + e ^= -1; + for (var a = n; a < s; a++) e = e >>> 8 ^ i[255 & (e ^ t[a])]; + return -1 ^ e; + }(0 | t, e, e.length, 0) : function (e, t, r, n) { + var i = o, + s = n + r; + e ^= -1; + for (var a = n; a < s; a++) e = e >>> 8 ^ i[255 & (e ^ t.charCodeAt(a))]; + return -1 ^ e; + }(0 | t, e, e.length, 0) : 0; + }; + }, { + "./utils": 32 + }], + 5: [function (e, t, r) { + "use strict"; + + r.base64 = !1, r.binary = !1, r.dir = !1, r.createFolders = !0, r.date = null, r.compression = null, r.compressionOptions = null, r.comment = null, r.unixPermissions = null, r.dosPermissions = null; + }, {}], + 6: [function (e, t, r) { + "use strict"; + + var n = null; + n = "undefined" != typeof Promise ? Promise : e("lie"), t.exports = { + Promise: n + }; + }, { + lie: 37 + }], + 7: [function (e, t, r) { + "use strict"; + + var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array, + i = e("pako"), + s = e("./utils"), + a = e("./stream/GenericWorker"), + o = n ? "uint8array" : "array"; + function h(e, t) { + a.call(this, "FlateWorker/" + e), this._pako = null, this._pakoAction = e, this._pakoOptions = t, this.meta = {}; + } + r.magic = "\b\0", s.inherits(h, a), h.prototype.processChunk = function (e) { + this.meta = e.meta, null === this._pako && this._createPako(), this._pako.push(s.transformTo(o, e.data), !1); + }, h.prototype.flush = function () { + a.prototype.flush.call(this), null === this._pako && this._createPako(), this._pako.push([], !0); + }, h.prototype.cleanUp = function () { + a.prototype.cleanUp.call(this), this._pako = null; + }, h.prototype._createPako = function () { + this._pako = new i[this._pakoAction]({ + raw: !0, + level: this._pakoOptions.level || -1 + }); + var t = this; + this._pako.onData = function (e) { + t.push({ + data: e, + meta: t.meta + }); + }; + }, r.compressWorker = function (e) { + return new h("Deflate", e); + }, r.uncompressWorker = function () { + return new h("Inflate", {}); + }; + }, { + "./stream/GenericWorker": 28, + "./utils": 32, + pako: 38 + }], + 8: [function (e, t, r) { + "use strict"; + + function A(e, t) { + var r, + n = ""; + for (r = 0; r < t; r++) n += String.fromCharCode(255 & e), e >>>= 8; + return n; + } + function n(e, t, r, n, i, s) { + var a, + o, + h = e.file, + u = e.compression, + l = s !== O.utf8encode, + f = I.transformTo("string", s(h.name)), + c = I.transformTo("string", O.utf8encode(h.name)), + d = h.comment, + p = I.transformTo("string", s(d)), + m = I.transformTo("string", O.utf8encode(d)), + _ = c.length !== h.name.length, + g = m.length !== d.length, + b = "", + v = "", + y = "", + w = h.dir, + k = h.date, + x = { + crc32: 0, + compressedSize: 0, + uncompressedSize: 0 + }; + t && !r || (x.crc32 = e.crc32, x.compressedSize = e.compressedSize, x.uncompressedSize = e.uncompressedSize); + var S = 0; + t && (S |= 8), l || !_ && !g || (S |= 2048); + var z = 0, + C = 0; + w && (z |= 16), "UNIX" === i ? (C = 798, z |= function (e, t) { + var r = e; + return e || (r = t ? 16893 : 33204), (65535 & r) << 16; + }(h.unixPermissions, w)) : (C = 20, z |= function (e) { + return 63 & (e || 0); + }(h.dosPermissions)), a = k.getUTCHours(), a <<= 6, a |= k.getUTCMinutes(), a <<= 5, a |= k.getUTCSeconds() / 2, o = k.getUTCFullYear() - 1980, o <<= 4, o |= k.getUTCMonth() + 1, o <<= 5, o |= k.getUTCDate(), _ && (v = A(1, 1) + A(B(f), 4) + c, b += "up" + A(v.length, 2) + v), g && (y = A(1, 1) + A(B(p), 4) + m, b += "uc" + A(y.length, 2) + y); + var E = ""; + return E += "\n\0", E += A(S, 2), E += u.magic, E += A(a, 2), E += A(o, 2), E += A(x.crc32, 4), E += A(x.compressedSize, 4), E += A(x.uncompressedSize, 4), E += A(f.length, 2), E += A(b.length, 2), { + fileRecord: R.LOCAL_FILE_HEADER + E + f + b, + dirRecord: R.CENTRAL_FILE_HEADER + A(C, 2) + E + A(p.length, 2) + "\0\0\0\0" + A(z, 4) + A(n, 4) + f + b + p + }; + } + var I = e("../utils"), + i = e("../stream/GenericWorker"), + O = e("../utf8"), + B = e("../crc32"), + R = e("../signature"); + function s(e, t, r, n) { + i.call(this, "ZipFileWorker"), this.bytesWritten = 0, this.zipComment = t, this.zipPlatform = r, this.encodeFileName = n, this.streamFiles = e, this.accumulate = !1, this.contentBuffer = [], this.dirRecords = [], this.currentSourceOffset = 0, this.entriesCount = 0, this.currentFile = null, this._sources = []; + } + I.inherits(s, i), s.prototype.push = function (e) { + var t = e.meta.percent || 0, + r = this.entriesCount, + n = this._sources.length; + this.accumulate ? this.contentBuffer.push(e) : (this.bytesWritten += e.data.length, i.prototype.push.call(this, { + data: e.data, + meta: { + currentFile: this.currentFile, + percent: r ? (t + 100 * (r - n - 1)) / r : 100 + } + })); + }, s.prototype.openedSource = function (e) { + this.currentSourceOffset = this.bytesWritten, this.currentFile = e.file.name; + var t = this.streamFiles && !e.file.dir; + if (t) { + var r = n(e, t, !1, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data: r.fileRecord, + meta: { + percent: 0 + } + }); + } else this.accumulate = !0; + }, s.prototype.closedSource = function (e) { + this.accumulate = !1; + var t = this.streamFiles && !e.file.dir, + r = n(e, t, !0, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + if (this.dirRecords.push(r.dirRecord), t) this.push({ + data: function (e) { + return R.DATA_DESCRIPTOR + A(e.crc32, 4) + A(e.compressedSize, 4) + A(e.uncompressedSize, 4); + }(e), + meta: { + percent: 100 + } + });else for (this.push({ + data: r.fileRecord, + meta: { + percent: 0 + } + }); this.contentBuffer.length;) this.push(this.contentBuffer.shift()); + this.currentFile = null; + }, s.prototype.flush = function () { + for (var e = this.bytesWritten, t = 0; t < this.dirRecords.length; t++) this.push({ + data: this.dirRecords[t], + meta: { + percent: 100 + } + }); + var r = this.bytesWritten - e, + n = function (e, t, r, n, i) { + var s = I.transformTo("string", i(n)); + return R.CENTRAL_DIRECTORY_END + "\0\0\0\0" + A(e, 2) + A(e, 2) + A(t, 4) + A(r, 4) + A(s.length, 2) + s; + }(this.dirRecords.length, r, e, this.zipComment, this.encodeFileName); + this.push({ + data: n, + meta: { + percent: 100 + } + }); + }, s.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(), this.openedSource(this.previous.streamInfo), this.isPaused ? this.previous.pause() : this.previous.resume(); + }, s.prototype.registerPrevious = function (e) { + this._sources.push(e); + var t = this; + return e.on("data", function (e) { + t.processChunk(e); + }), e.on("end", function () { + t.closedSource(t.previous.streamInfo), t._sources.length ? t.prepareNextSource() : t.end(); + }), e.on("error", function (e) { + t.error(e); + }), this; + }, s.prototype.resume = function () { + return !!i.prototype.resume.call(this) && (!this.previous && this._sources.length ? (this.prepareNextSource(), !0) : this.previous || this._sources.length || this.generatedError ? void 0 : (this.end(), !0)); + }, s.prototype.error = function (e) { + var t = this._sources; + if (!i.prototype.error.call(this, e)) return !1; + for (var r = 0; r < t.length; r++) try { + t[r].error(e); + } catch (e) {} + return !0; + }, s.prototype.lock = function () { + i.prototype.lock.call(this); + for (var e = this._sources, t = 0; t < e.length; t++) e[t].lock(); + }, t.exports = s; + }, { + "../crc32": 4, + "../signature": 23, + "../stream/GenericWorker": 28, + "../utf8": 31, + "../utils": 32 + }], + 9: [function (e, t, r) { + "use strict"; + + var u = e("../compressions"), + n = e("./ZipFileWorker"); + r.generateWorker = function (e, a, t) { + var o = new n(a.streamFiles, t, a.platform, a.encodeFileName), + h = 0; + try { + e.forEach(function (e, t) { + h++; + var r = function (e, t) { + var r = e || t, + n = u[r]; + if (!n) throw new Error(r + " is not a valid compression method !"); + return n; + }(t.options.compression, a.compression), + n = t.options.compressionOptions || a.compressionOptions || {}, + i = t.dir, + s = t.date; + t._compressWorker(r, n).withStreamInfo("file", { + name: e, + dir: i, + date: s, + comment: t.comment || "", + unixPermissions: t.unixPermissions, + dosPermissions: t.dosPermissions + }).pipe(o); + }), o.entriesCount = h; + } catch (e) { + o.error(e); + } + return o; + }; + }, { + "../compressions": 3, + "./ZipFileWorker": 8 + }], + 10: [function (e, t, r) { + "use strict"; + + function n() { + if (!(this instanceof n)) return new n(); + if (arguments.length) throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + this.files = Object.create(null), this.comment = null, this.root = "", this.clone = function () { + var e = new n(); + for (var t in this) "function" != typeof this[t] && (e[t] = this[t]); + return e; + }; + } + (n.prototype = e("./object")).loadAsync = e("./load"), n.support = e("./support"), n.defaults = e("./defaults"), n.version = "3.10.1", n.loadAsync = function (e, t) { + return new n().loadAsync(e, t); + }, n.external = e("./external"), t.exports = n; + }, { + "./defaults": 5, + "./external": 6, + "./load": 11, + "./object": 15, + "./support": 30 + }], + 11: [function (e, t, r) { + "use strict"; + + var u = e("./utils"), + i = e("./external"), + n = e("./utf8"), + s = e("./zipEntries"), + a = e("./stream/Crc32Probe"), + l = e("./nodejsUtils"); + function f(n) { + return new i.Promise(function (e, t) { + var r = n.decompressed.getContentWorker().pipe(new a()); + r.on("error", function (e) { + t(e); + }).on("end", function () { + r.streamInfo.crc32 !== n.decompressed.crc32 ? t(new Error("Corrupted zip : CRC32 mismatch")) : e(); + }).resume(); + }); + } + t.exports = function (e, o) { + var h = this; + return o = u.extend(o || {}, { + base64: !1, + checkCRC32: !1, + optimizedBinaryString: !1, + createFolders: !1, + decodeFileName: n.utf8decode + }), l.isNode && l.isStream(e) ? i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")) : u.prepareContent("the loaded zip file", e, !0, o.optimizedBinaryString, o.base64).then(function (e) { + var t = new s(o); + return t.load(e), t; + }).then(function (e) { + var t = [i.Promise.resolve(e)], + r = e.files; + if (o.checkCRC32) for (var n = 0; n < r.length; n++) t.push(f(r[n])); + return i.Promise.all(t); + }).then(function (e) { + for (var t = e.shift(), r = t.files, n = 0; n < r.length; n++) { + var i = r[n], + s = i.fileNameStr, + a = u.resolve(i.fileNameStr); + h.file(a, i.decompressed, { + binary: !0, + optimizedBinaryString: !0, + date: i.date, + dir: i.dir, + comment: i.fileCommentStr.length ? i.fileCommentStr : null, + unixPermissions: i.unixPermissions, + dosPermissions: i.dosPermissions, + createFolders: o.createFolders + }), i.dir || (h.file(a).unsafeOriginalName = s); + } + return t.zipComment.length && (h.comment = t.zipComment), h; + }); + }; + }, { + "./external": 6, + "./nodejsUtils": 14, + "./stream/Crc32Probe": 25, + "./utf8": 31, + "./utils": 32, + "./zipEntries": 33 + }], + 12: [function (e, t, r) { + "use strict"; + + var n = e("../utils"), + i = e("../stream/GenericWorker"); + function s(e, t) { + i.call(this, "Nodejs stream input adapter for " + e), this._upstreamEnded = !1, this._bindStream(t); + } + n.inherits(s, i), s.prototype._bindStream = function (e) { + var t = this; + (this._stream = e).pause(), e.on("data", function (e) { + t.push({ + data: e, + meta: { + percent: 0 + } + }); + }).on("error", function (e) { + t.isPaused ? this.generatedError = e : t.error(e); + }).on("end", function () { + t.isPaused ? t._upstreamEnded = !0 : t.end(); + }); + }, s.prototype.pause = function () { + return !!i.prototype.pause.call(this) && (this._stream.pause(), !0); + }, s.prototype.resume = function () { + return !!i.prototype.resume.call(this) && (this._upstreamEnded ? this.end() : this._stream.resume(), !0); + }, t.exports = s; + }, { + "../stream/GenericWorker": 28, + "../utils": 32 + }], + 13: [function (e, t, r) { + "use strict"; + + var i = e("readable-stream").Readable; + function n(e, t, r) { + i.call(this, t), this._helper = e; + var n = this; + e.on("data", function (e, t) { + n.push(e) || n._helper.pause(), r && r(t); + }).on("error", function (e) { + n.emit("error", e); + }).on("end", function () { + n.push(null); + }); + } + e("../utils").inherits(n, i), n.prototype._read = function () { + this._helper.resume(); + }, t.exports = n; + }, { + "../utils": 32, + "readable-stream": 16 + }], + 14: [function (e, t, r) { + "use strict"; + + t.exports = { + isNode: "undefined" != typeof Buffer, + newBufferFrom: function (e, t) { + if (Buffer.from && Buffer.from !== Uint8Array.from) return Buffer.from(e, t); + if ("number" == typeof e) throw new Error('The "data" argument must not be a number'); + return new Buffer(e, t); + }, + allocBuffer: function (e) { + if (Buffer.alloc) return Buffer.alloc(e); + var t = new Buffer(e); + return t.fill(0), t; + }, + isBuffer: function (e) { + return Buffer.isBuffer(e); + }, + isStream: function (e) { + return e && "function" == typeof e.on && "function" == typeof e.pause && "function" == typeof e.resume; + } + }; + }, {}], + 15: [function (e, t, r) { + "use strict"; + + function s(e, t, r) { + var n, + i = u.getTypeOf(t), + s = u.extend(r || {}, f); + s.date = s.date || new Date(), null !== s.compression && (s.compression = s.compression.toUpperCase()), "string" == typeof s.unixPermissions && (s.unixPermissions = parseInt(s.unixPermissions, 8)), s.unixPermissions && 16384 & s.unixPermissions && (s.dir = !0), s.dosPermissions && 16 & s.dosPermissions && (s.dir = !0), s.dir && (e = g(e)), s.createFolders && (n = _(e)) && b.call(this, n, !0); + var a = "string" === i && !1 === s.binary && !1 === s.base64; + r && void 0 !== r.binary || (s.binary = !a), (t instanceof c && 0 === t.uncompressedSize || s.dir || !t || 0 === t.length) && (s.base64 = !1, s.binary = !0, t = "", s.compression = "STORE", i = "string"); + var o = null; + o = t instanceof c || t instanceof l ? t : p.isNode && p.isStream(t) ? new m(e, t) : u.prepareContent(e, t, s.binary, s.optimizedBinaryString, s.base64); + var h = new d(e, o, s); + this.files[e] = h; + } + var i = e("./utf8"), + u = e("./utils"), + l = e("./stream/GenericWorker"), + a = e("./stream/StreamHelper"), + f = e("./defaults"), + c = e("./compressedObject"), + d = e("./zipObject"), + o = e("./generate"), + p = e("./nodejsUtils"), + m = e("./nodejs/NodejsStreamInputAdapter"), + _ = function (e) { + "/" === e.slice(-1) && (e = e.substring(0, e.length - 1)); + var t = e.lastIndexOf("/"); + return 0 < t ? e.substring(0, t) : ""; + }, + g = function (e) { + return "/" !== e.slice(-1) && (e += "/"), e; + }, + b = function (e, t) { + return t = void 0 !== t ? t : f.createFolders, e = g(e), this.files[e] || s.call(this, e, null, { + dir: !0, + createFolders: t + }), this.files[e]; + }; + function h(e) { + return "[object RegExp]" === Object.prototype.toString.call(e); + } + var n = { + load: function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + forEach: function (e) { + var t, r, n; + for (t in this.files) n = this.files[t], (r = t.slice(this.root.length, t.length)) && t.slice(0, this.root.length) === this.root && e(r, n); + }, + filter: function (r) { + var n = []; + return this.forEach(function (e, t) { + r(e, t) && n.push(t); + }), n; + }, + file: function (e, t, r) { + if (1 !== arguments.length) return e = this.root + e, s.call(this, e, t, r), this; + if (h(e)) { + var n = e; + return this.filter(function (e, t) { + return !t.dir && n.test(e); + }); + } + var i = this.files[this.root + e]; + return i && !i.dir ? i : null; + }, + folder: function (r) { + if (!r) return this; + if (h(r)) return this.filter(function (e, t) { + return t.dir && r.test(e); + }); + var e = this.root + r, + t = b.call(this, e), + n = this.clone(); + return n.root = t.name, n; + }, + remove: function (r) { + r = this.root + r; + var e = this.files[r]; + if (e || ("/" !== r.slice(-1) && (r += "/"), e = this.files[r]), e && !e.dir) delete this.files[r];else for (var t = this.filter(function (e, t) { + return t.name.slice(0, r.length) === r; + }), n = 0; n < t.length; n++) delete this.files[t[n].name]; + return this; + }, + generate: function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + generateInternalStream: function (e) { + var t, + r = {}; + try { + if ((r = u.extend(e || {}, { + streamFiles: !1, + compression: "STORE", + compressionOptions: null, + type: "", + platform: "DOS", + comment: null, + mimeType: "application/zip", + encodeFileName: i.utf8encode + })).type = r.type.toLowerCase(), r.compression = r.compression.toUpperCase(), "binarystring" === r.type && (r.type = "string"), !r.type) throw new Error("No output type specified."); + u.checkSupport(r.type), "darwin" !== r.platform && "freebsd" !== r.platform && "linux" !== r.platform && "sunos" !== r.platform || (r.platform = "UNIX"), "win32" === r.platform && (r.platform = "DOS"); + var n = r.comment || this.comment || ""; + t = o.generateWorker(this, r, n); + } catch (e) { + (t = new l("error")).error(e); + } + return new a(t, r.type || "string", r.mimeType); + }, + generateAsync: function (e, t) { + return this.generateInternalStream(e).accumulate(t); + }, + generateNodeStream: function (e, t) { + return (e = e || {}).type || (e.type = "nodebuffer"), this.generateInternalStream(e).toNodejsStream(t); + } + }; + t.exports = n; + }, { + "./compressedObject": 2, + "./defaults": 5, + "./generate": 9, + "./nodejs/NodejsStreamInputAdapter": 12, + "./nodejsUtils": 14, + "./stream/GenericWorker": 28, + "./stream/StreamHelper": 29, + "./utf8": 31, + "./utils": 32, + "./zipObject": 35 + }], + 16: [function (e, t, r) { + "use strict"; + + t.exports = e("stream"); + }, { + stream: void 0 + }], + 17: [function (e, t, r) { + "use strict"; + + var n = e("./DataReader"); + function i(e) { + n.call(this, e); + for (var t = 0; t < this.data.length; t++) e[t] = 255 & e[t]; + } + e("../utils").inherits(i, n), i.prototype.byteAt = function (e) { + return this.data[this.zero + e]; + }, i.prototype.lastIndexOfSignature = function (e) { + for (var t = e.charCodeAt(0), r = e.charCodeAt(1), n = e.charCodeAt(2), i = e.charCodeAt(3), s = this.length - 4; 0 <= s; --s) if (this.data[s] === t && this.data[s + 1] === r && this.data[s + 2] === n && this.data[s + 3] === i) return s - this.zero; + return -1; + }, i.prototype.readAndCheckSignature = function (e) { + var t = e.charCodeAt(0), + r = e.charCodeAt(1), + n = e.charCodeAt(2), + i = e.charCodeAt(3), + s = this.readData(4); + return t === s[0] && r === s[1] && n === s[2] && i === s[3]; + }, i.prototype.readData = function (e) { + if (this.checkOffset(e), 0 === e) return []; + var t = this.data.slice(this.zero + this.index, this.zero + this.index + e); + return this.index += e, t; + }, t.exports = i; + }, { + "../utils": 32, + "./DataReader": 18 + }], + 18: [function (e, t, r) { + "use strict"; + + var n = e("../utils"); + function i(e) { + this.data = e, this.length = e.length, this.index = 0, this.zero = 0; + } + i.prototype = { + checkOffset: function (e) { + this.checkIndex(this.index + e); + }, + checkIndex: function (e) { + if (this.length < this.zero + e || e < 0) throw new Error("End of data reached (data length = " + this.length + ", asked index = " + e + "). Corrupted zip ?"); + }, + setIndex: function (e) { + this.checkIndex(e), this.index = e; + }, + skip: function (e) { + this.setIndex(this.index + e); + }, + byteAt: function () {}, + readInt: function (e) { + var t, + r = 0; + for (this.checkOffset(e), t = this.index + e - 1; t >= this.index; t--) r = (r << 8) + this.byteAt(t); + return this.index += e, r; + }, + readString: function (e) { + return n.transformTo("string", this.readData(e)); + }, + readData: function () {}, + lastIndexOfSignature: function () {}, + readAndCheckSignature: function () {}, + readDate: function () { + var e = this.readInt(4); + return new Date(Date.UTC(1980 + (e >> 25 & 127), (e >> 21 & 15) - 1, e >> 16 & 31, e >> 11 & 31, e >> 5 & 63, (31 & e) << 1)); + } + }, t.exports = i; + }, { + "../utils": 32 + }], + 19: [function (e, t, r) { + "use strict"; + + var n = e("./Uint8ArrayReader"); + function i(e) { + n.call(this, e); + } + e("../utils").inherits(i, n), i.prototype.readData = function (e) { + this.checkOffset(e); + var t = this.data.slice(this.zero + this.index, this.zero + this.index + e); + return this.index += e, t; + }, t.exports = i; + }, { + "../utils": 32, + "./Uint8ArrayReader": 21 + }], + 20: [function (e, t, r) { + "use strict"; + + var n = e("./DataReader"); + function i(e) { + n.call(this, e); + } + e("../utils").inherits(i, n), i.prototype.byteAt = function (e) { + return this.data.charCodeAt(this.zero + e); + }, i.prototype.lastIndexOfSignature = function (e) { + return this.data.lastIndexOf(e) - this.zero; + }, i.prototype.readAndCheckSignature = function (e) { + return e === this.readData(4); + }, i.prototype.readData = function (e) { + this.checkOffset(e); + var t = this.data.slice(this.zero + this.index, this.zero + this.index + e); + return this.index += e, t; + }, t.exports = i; + }, { + "../utils": 32, + "./DataReader": 18 + }], + 21: [function (e, t, r) { + "use strict"; + + var n = e("./ArrayReader"); + function i(e) { + n.call(this, e); + } + e("../utils").inherits(i, n), i.prototype.readData = function (e) { + if (this.checkOffset(e), 0 === e) return new Uint8Array(0); + var t = this.data.subarray(this.zero + this.index, this.zero + this.index + e); + return this.index += e, t; + }, t.exports = i; + }, { + "../utils": 32, + "./ArrayReader": 17 + }], + 22: [function (e, t, r) { + "use strict"; + + var n = e("../utils"), + i = e("../support"), + s = e("./ArrayReader"), + a = e("./StringReader"), + o = e("./NodeBufferReader"), + h = e("./Uint8ArrayReader"); + t.exports = function (e) { + var t = n.getTypeOf(e); + return n.checkSupport(t), "string" !== t || i.uint8array ? "nodebuffer" === t ? new o(e) : i.uint8array ? new h(n.transformTo("uint8array", e)) : new s(n.transformTo("array", e)) : new a(e); + }; + }, { + "../support": 30, + "../utils": 32, + "./ArrayReader": 17, + "./NodeBufferReader": 19, + "./StringReader": 20, + "./Uint8ArrayReader": 21 + }], + 23: [function (e, t, r) { + "use strict"; + + r.LOCAL_FILE_HEADER = "PK", r.CENTRAL_FILE_HEADER = "PK", r.CENTRAL_DIRECTORY_END = "PK", r.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK", r.ZIP64_CENTRAL_DIRECTORY_END = "PK", r.DATA_DESCRIPTOR = "PK\b"; + }, {}], + 24: [function (e, t, r) { + "use strict"; + + var n = e("./GenericWorker"), + i = e("../utils"); + function s(e) { + n.call(this, "ConvertWorker to " + e), this.destType = e; + } + i.inherits(s, n), s.prototype.processChunk = function (e) { + this.push({ + data: i.transformTo(this.destType, e.data), + meta: e.meta + }); + }, t.exports = s; + }, { + "../utils": 32, + "./GenericWorker": 28 + }], + 25: [function (e, t, r) { + "use strict"; + + var n = e("./GenericWorker"), + i = e("../crc32"); + function s() { + n.call(this, "Crc32Probe"), this.withStreamInfo("crc32", 0); + } + e("../utils").inherits(s, n), s.prototype.processChunk = function (e) { + this.streamInfo.crc32 = i(e.data, this.streamInfo.crc32 || 0), this.push(e); + }, t.exports = s; + }, { + "../crc32": 4, + "../utils": 32, + "./GenericWorker": 28 + }], + 26: [function (e, t, r) { + "use strict"; + + var n = e("../utils"), + i = e("./GenericWorker"); + function s(e) { + i.call(this, "DataLengthProbe for " + e), this.propName = e, this.withStreamInfo(e, 0); + } + n.inherits(s, i), s.prototype.processChunk = function (e) { + if (e) { + var t = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = t + e.data.length; + } + i.prototype.processChunk.call(this, e); + }, t.exports = s; + }, { + "../utils": 32, + "./GenericWorker": 28 + }], + 27: [function (e, t, r) { + "use strict"; + + var n = e("../utils"), + i = e("./GenericWorker"); + function s(e) { + i.call(this, "DataWorker"); + var t = this; + this.dataIsReady = !1, this.index = 0, this.max = 0, this.data = null, this.type = "", this._tickScheduled = !1, e.then(function (e) { + t.dataIsReady = !0, t.data = e, t.max = e && e.length || 0, t.type = n.getTypeOf(e), t.isPaused || t._tickAndRepeat(); + }, function (e) { + t.error(e); + }); + } + n.inherits(s, i), s.prototype.cleanUp = function () { + i.prototype.cleanUp.call(this), this.data = null; + }, s.prototype.resume = function () { + return !!i.prototype.resume.call(this) && (!this._tickScheduled && this.dataIsReady && (this._tickScheduled = !0, n.delay(this._tickAndRepeat, [], this)), !0); + }, s.prototype._tickAndRepeat = function () { + this._tickScheduled = !1, this.isPaused || this.isFinished || (this._tick(), this.isFinished || (n.delay(this._tickAndRepeat, [], this), this._tickScheduled = !0)); + }, s.prototype._tick = function () { + if (this.isPaused || this.isFinished) return !1; + var e = null, + t = Math.min(this.max, this.index + 16384); + if (this.index >= this.max) return this.end(); + switch (this.type) { + case "string": + e = this.data.substring(this.index, t); + break; + case "uint8array": + e = this.data.subarray(this.index, t); + break; + case "array": + case "nodebuffer": + e = this.data.slice(this.index, t); + } + return this.index = t, this.push({ + data: e, + meta: { + percent: this.max ? this.index / this.max * 100 : 0 + } + }); + }, t.exports = s; + }, { + "../utils": 32, + "./GenericWorker": 28 + }], + 28: [function (e, t, r) { + "use strict"; + + function n(e) { + this.name = e || "default", this.streamInfo = {}, this.generatedError = null, this.extraStreamInfo = {}, this.isPaused = !0, this.isFinished = !1, this.isLocked = !1, this._listeners = { + data: [], + end: [], + error: [] + }, this.previous = null; + } + n.prototype = { + push: function (e) { + this.emit("data", e); + }, + end: function () { + if (this.isFinished) return !1; + this.flush(); + try { + this.emit("end"), this.cleanUp(), this.isFinished = !0; + } catch (e) { + this.emit("error", e); + } + return !0; + }, + error: function (e) { + return !this.isFinished && (this.isPaused ? this.generatedError = e : (this.isFinished = !0, this.emit("error", e), this.previous && this.previous.error(e), this.cleanUp()), !0); + }, + on: function (e, t) { + return this._listeners[e].push(t), this; + }, + cleanUp: function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null, this._listeners = []; + }, + emit: function (e, t) { + if (this._listeners[e]) for (var r = 0; r < this._listeners[e].length; r++) this._listeners[e][r].call(this, t); + }, + pipe: function (e) { + return e.registerPrevious(this); + }, + registerPrevious: function (e) { + if (this.isLocked) throw new Error("The stream '" + this + "' has already been used."); + this.streamInfo = e.streamInfo, this.mergeStreamInfo(), this.previous = e; + var t = this; + return e.on("data", function (e) { + t.processChunk(e); + }), e.on("end", function () { + t.end(); + }), e.on("error", function (e) { + t.error(e); + }), this; + }, + pause: function () { + return !this.isPaused && !this.isFinished && (this.isPaused = !0, this.previous && this.previous.pause(), !0); + }, + resume: function () { + if (!this.isPaused || this.isFinished) return !1; + var e = this.isPaused = !1; + return this.generatedError && (this.error(this.generatedError), e = !0), this.previous && this.previous.resume(), !e; + }, + flush: function () {}, + processChunk: function (e) { + this.push(e); + }, + withStreamInfo: function (e, t) { + return this.extraStreamInfo[e] = t, this.mergeStreamInfo(), this; + }, + mergeStreamInfo: function () { + for (var e in this.extraStreamInfo) Object.prototype.hasOwnProperty.call(this.extraStreamInfo, e) && (this.streamInfo[e] = this.extraStreamInfo[e]); + }, + lock: function () { + if (this.isLocked) throw new Error("The stream '" + this + "' has already been used."); + this.isLocked = !0, this.previous && this.previous.lock(); + }, + toString: function () { + var e = "Worker " + this.name; + return this.previous ? this.previous + " -> " + e : e; + } + }, t.exports = n; + }, {}], + 29: [function (e, t, r) { + "use strict"; + + var h = e("../utils"), + i = e("./ConvertWorker"), + s = e("./GenericWorker"), + u = e("../base64"), + n = e("../support"), + a = e("../external"), + o = null; + if (n.nodestream) try { + o = e("../nodejs/NodejsStreamOutputAdapter"); + } catch (e) {} + function l(e, o) { + return new a.Promise(function (t, r) { + var n = [], + i = e._internalType, + s = e._outputType, + a = e._mimeType; + e.on("data", function (e, t) { + n.push(e), o && o(t); + }).on("error", function (e) { + n = [], r(e); + }).on("end", function () { + try { + var e = function (e, t, r) { + switch (e) { + case "blob": + return h.newBlob(h.transformTo("arraybuffer", t), r); + case "base64": + return u.encode(t); + default: + return h.transformTo(e, t); + } + }(s, function (e, t) { + var r, + n = 0, + i = null, + s = 0; + for (r = 0; r < t.length; r++) s += t[r].length; + switch (e) { + case "string": + return t.join(""); + case "array": + return Array.prototype.concat.apply([], t); + case "uint8array": + for (i = new Uint8Array(s), r = 0; r < t.length; r++) i.set(t[r], n), n += t[r].length; + return i; + case "nodebuffer": + return Buffer.concat(t); + default: + throw new Error("concat : unsupported type '" + e + "'"); + } + }(i, n), a); + t(e); + } catch (e) { + r(e); + } + n = []; + }).resume(); + }); + } + function f(e, t, r) { + var n = t; + switch (t) { + case "blob": + case "arraybuffer": + n = "uint8array"; + break; + case "base64": + n = "string"; + } + try { + this._internalType = n, this._outputType = t, this._mimeType = r, h.checkSupport(n), this._worker = e.pipe(new i(n)), e.lock(); + } catch (e) { + this._worker = new s("error"), this._worker.error(e); + } + } + f.prototype = { + accumulate: function (e) { + return l(this, e); + }, + on: function (e, t) { + var r = this; + return "data" === e ? this._worker.on(e, function (e) { + t.call(r, e.data, e.meta); + }) : this._worker.on(e, function () { + h.delay(t, arguments, r); + }), this; + }, + resume: function () { + return h.delay(this._worker.resume, [], this._worker), this; + }, + pause: function () { + return this._worker.pause(), this; + }, + toNodejsStream: function (e) { + if (h.checkSupport("nodestream"), "nodebuffer" !== this._outputType) throw new Error(this._outputType + " is not supported by this method"); + return new o(this, { + objectMode: "nodebuffer" !== this._outputType + }, e); + } + }, t.exports = f; + }, { + "../base64": 1, + "../external": 6, + "../nodejs/NodejsStreamOutputAdapter": 13, + "../support": 30, + "../utils": 32, + "./ConvertWorker": 24, + "./GenericWorker": 28 + }], + 30: [function (e, t, r) { + "use strict"; + + if (r.base64 = !0, r.array = !0, r.string = !0, r.arraybuffer = "undefined" != typeof ArrayBuffer && "undefined" != typeof Uint8Array, r.nodebuffer = "undefined" != typeof Buffer, r.uint8array = "undefined" != typeof Uint8Array, "undefined" == typeof ArrayBuffer) r.blob = !1;else { + var n = new ArrayBuffer(0); + try { + r.blob = 0 === new Blob([n], { + type: "application/zip" + }).size; + } catch (e) { + try { + var i = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)(); + i.append(n), r.blob = 0 === i.getBlob("application/zip").size; + } catch (e) { + r.blob = !1; + } + } + } + try { + r.nodestream = !!e("readable-stream").Readable; + } catch (e) { + r.nodestream = !1; + } + }, { + "readable-stream": 16 + }], + 31: [function (e, t, s) { + "use strict"; + + for (var o = e("./utils"), h = e("./support"), r = e("./nodejsUtils"), n = e("./stream/GenericWorker"), u = new Array(256), i = 0; i < 256; i++) u[i] = 252 <= i ? 6 : 248 <= i ? 5 : 240 <= i ? 4 : 224 <= i ? 3 : 192 <= i ? 2 : 1; + u[254] = u[254] = 1; + function a() { + n.call(this, "utf-8 decode"), this.leftOver = null; + } + function l() { + n.call(this, "utf-8 encode"); + } + s.utf8encode = function (e) { + return h.nodebuffer ? r.newBufferFrom(e, "utf-8") : function (e) { + var t, + r, + n, + i, + s, + a = e.length, + o = 0; + for (i = 0; i < a; i++) 55296 == (64512 & (r = e.charCodeAt(i))) && i + 1 < a && 56320 == (64512 & (n = e.charCodeAt(i + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), i++), o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4; + for (t = h.uint8array ? new Uint8Array(o) : new Array(o), i = s = 0; s < o; i++) 55296 == (64512 & (r = e.charCodeAt(i))) && i + 1 < a && 56320 == (64512 & (n = e.charCodeAt(i + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), i++), r < 128 ? t[s++] = r : (r < 2048 ? t[s++] = 192 | r >>> 6 : (r < 65536 ? t[s++] = 224 | r >>> 12 : (t[s++] = 240 | r >>> 18, t[s++] = 128 | r >>> 12 & 63), t[s++] = 128 | r >>> 6 & 63), t[s++] = 128 | 63 & r); + return t; + }(e); + }, s.utf8decode = function (e) { + return h.nodebuffer ? o.transformTo("nodebuffer", e).toString("utf-8") : function (e) { + var t, + r, + n, + i, + s = e.length, + a = new Array(2 * s); + for (t = r = 0; t < s;) if ((n = e[t++]) < 128) a[r++] = n;else if (4 < (i = u[n])) a[r++] = 65533, t += i - 1;else { + for (n &= 2 === i ? 31 : 3 === i ? 15 : 7; 1 < i && t < s;) n = n << 6 | 63 & e[t++], i--; + 1 < i ? a[r++] = 65533 : n < 65536 ? a[r++] = n : (n -= 65536, a[r++] = 55296 | n >> 10 & 1023, a[r++] = 56320 | 1023 & n); + } + return a.length !== r && (a.subarray ? a = a.subarray(0, r) : a.length = r), o.applyFromCharCode(a); + }(e = o.transformTo(h.uint8array ? "uint8array" : "array", e)); + }, o.inherits(a, n), a.prototype.processChunk = function (e) { + var t = o.transformTo(h.uint8array ? "uint8array" : "array", e.data); + if (this.leftOver && this.leftOver.length) { + if (h.uint8array) { + var r = t; + (t = new Uint8Array(r.length + this.leftOver.length)).set(this.leftOver, 0), t.set(r, this.leftOver.length); + } else t = this.leftOver.concat(t); + this.leftOver = null; + } + var n = function (e, t) { + var r; + for ((t = t || e.length) > e.length && (t = e.length), r = t - 1; 0 <= r && 128 == (192 & e[r]);) r--; + return r < 0 ? t : 0 === r ? t : r + u[e[r]] > t ? r : t; + }(t), + i = t; + n !== t.length && (h.uint8array ? (i = t.subarray(0, n), this.leftOver = t.subarray(n, t.length)) : (i = t.slice(0, n), this.leftOver = t.slice(n, t.length))), this.push({ + data: s.utf8decode(i), + meta: e.meta + }); + }, a.prototype.flush = function () { + this.leftOver && this.leftOver.length && (this.push({ + data: s.utf8decode(this.leftOver), + meta: {} + }), this.leftOver = null); + }, s.Utf8DecodeWorker = a, o.inherits(l, n), l.prototype.processChunk = function (e) { + this.push({ + data: s.utf8encode(e.data), + meta: e.meta + }); + }, s.Utf8EncodeWorker = l; + }, { + "./nodejsUtils": 14, + "./stream/GenericWorker": 28, + "./support": 30, + "./utils": 32 + }], + 32: [function (e, t, a) { + "use strict"; + + var o = e("./support"), + h = e("./base64"), + r = e("./nodejsUtils"), + u = e("./external"); + function n(e) { + return e; + } + function l(e, t) { + for (var r = 0; r < e.length; ++r) t[r] = 255 & e.charCodeAt(r); + return t; + } + e("setimmediate"), a.newBlob = function (t, r) { + a.checkSupport("blob"); + try { + return new Blob([t], { + type: r + }); + } catch (e) { + try { + var n = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)(); + return n.append(t), n.getBlob(r); + } catch (e) { + throw new Error("Bug : can't construct the Blob."); + } + } + }; + var i = { + stringifyByChunk: function (e, t, r) { + var n = [], + i = 0, + s = e.length; + if (s <= r) return String.fromCharCode.apply(null, e); + for (; i < s;) "array" === t || "nodebuffer" === t ? n.push(String.fromCharCode.apply(null, e.slice(i, Math.min(i + r, s)))) : n.push(String.fromCharCode.apply(null, e.subarray(i, Math.min(i + r, s)))), i += r; + return n.join(""); + }, + stringifyByChar: function (e) { + for (var t = "", r = 0; r < e.length; r++) t += String.fromCharCode(e[r]); + return t; + }, + applyCanBeUsed: { + uint8array: function () { + try { + return o.uint8array && 1 === String.fromCharCode.apply(null, new Uint8Array(1)).length; + } catch (e) { + return !1; + } + }(), + nodebuffer: function () { + try { + return o.nodebuffer && 1 === String.fromCharCode.apply(null, r.allocBuffer(1)).length; + } catch (e) { + return !1; + } + }() + } + }; + function s(e) { + var t = 65536, + r = a.getTypeOf(e), + n = !0; + if ("uint8array" === r ? n = i.applyCanBeUsed.uint8array : "nodebuffer" === r && (n = i.applyCanBeUsed.nodebuffer), n) for (; 1 < t;) try { + return i.stringifyByChunk(e, r, t); + } catch (e) { + t = Math.floor(t / 2); + } + return i.stringifyByChar(e); + } + function f(e, t) { + for (var r = 0; r < e.length; r++) t[r] = e[r]; + return t; + } + a.applyFromCharCode = s; + var c = {}; + c.string = { + string: n, + array: function (e) { + return l(e, new Array(e.length)); + }, + arraybuffer: function (e) { + return c.string.uint8array(e).buffer; + }, + uint8array: function (e) { + return l(e, new Uint8Array(e.length)); + }, + nodebuffer: function (e) { + return l(e, r.allocBuffer(e.length)); + } + }, c.array = { + string: s, + array: n, + arraybuffer: function (e) { + return new Uint8Array(e).buffer; + }, + uint8array: function (e) { + return new Uint8Array(e); + }, + nodebuffer: function (e) { + return r.newBufferFrom(e); + } + }, c.arraybuffer = { + string: function (e) { + return s(new Uint8Array(e)); + }, + array: function (e) { + return f(new Uint8Array(e), new Array(e.byteLength)); + }, + arraybuffer: n, + uint8array: function (e) { + return new Uint8Array(e); + }, + nodebuffer: function (e) { + return r.newBufferFrom(new Uint8Array(e)); + } + }, c.uint8array = { + string: s, + array: function (e) { + return f(e, new Array(e.length)); + }, + arraybuffer: function (e) { + return e.buffer; + }, + uint8array: n, + nodebuffer: function (e) { + return r.newBufferFrom(e); + } + }, c.nodebuffer = { + string: s, + array: function (e) { + return f(e, new Array(e.length)); + }, + arraybuffer: function (e) { + return c.nodebuffer.uint8array(e).buffer; + }, + uint8array: function (e) { + return f(e, new Uint8Array(e.length)); + }, + nodebuffer: n + }, a.transformTo = function (e, t) { + if (t = t || "", !e) return t; + a.checkSupport(e); + var r = a.getTypeOf(t); + return c[r][e](t); + }, a.resolve = function (e) { + for (var t = e.split("/"), r = [], n = 0; n < t.length; n++) { + var i = t[n]; + "." === i || "" === i && 0 !== n && n !== t.length - 1 || (".." === i ? r.pop() : r.push(i)); + } + return r.join("/"); + }, a.getTypeOf = function (e) { + return "string" == typeof e ? "string" : "[object Array]" === Object.prototype.toString.call(e) ? "array" : o.nodebuffer && r.isBuffer(e) ? "nodebuffer" : o.uint8array && e instanceof Uint8Array ? "uint8array" : o.arraybuffer && e instanceof ArrayBuffer ? "arraybuffer" : void 0; + }, a.checkSupport = function (e) { + if (!o[e.toLowerCase()]) throw new Error(e + " is not supported by this platform"); + }, a.MAX_VALUE_16BITS = 65535, a.MAX_VALUE_32BITS = -1, a.pretty = function (e) { + var t, + r, + n = ""; + for (r = 0; r < (e || "").length; r++) n += "\\x" + ((t = e.charCodeAt(r)) < 16 ? "0" : "") + t.toString(16).toUpperCase(); + return n; + }, a.delay = function (e, t, r) { + setImmediate(function () { + e.apply(r || null, t || []); + }); + }, a.inherits = function (e, t) { + function r() {} + r.prototype = t.prototype, e.prototype = new r(); + }, a.extend = function () { + var e, + t, + r = {}; + for (e = 0; e < arguments.length; e++) for (t in arguments[e]) Object.prototype.hasOwnProperty.call(arguments[e], t) && void 0 === r[t] && (r[t] = arguments[e][t]); + return r; + }, a.prepareContent = function (r, e, n, i, s) { + return u.Promise.resolve(e).then(function (n) { + return o.blob && (n instanceof Blob || -1 !== ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(n))) && "undefined" != typeof FileReader ? new u.Promise(function (t, r) { + var e = new FileReader(); + e.onload = function (e) { + t(e.target.result); + }, e.onerror = function (e) { + r(e.target.error); + }, e.readAsArrayBuffer(n); + }) : n; + }).then(function (e) { + var t = a.getTypeOf(e); + return t ? ("arraybuffer" === t ? e = a.transformTo("uint8array", e) : "string" === t && (s ? e = h.decode(e) : n && !0 !== i && (e = function (e) { + return l(e, o.uint8array ? new Uint8Array(e.length) : new Array(e.length)); + }(e))), e) : u.Promise.reject(new Error("Can't read the data of '" + r + "'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?")); + }); + }; + }, { + "./base64": 1, + "./external": 6, + "./nodejsUtils": 14, + "./support": 30, + setimmediate: 54 + }], + 33: [function (e, t, r) { + "use strict"; + + var n = e("./reader/readerFor"), + i = e("./utils"), + s = e("./signature"), + a = e("./zipEntry"), + o = e("./support"); + function h(e) { + this.files = [], this.loadOptions = e; + } + h.prototype = { + checkSignature: function (e) { + if (!this.reader.readAndCheckSignature(e)) { + this.reader.index -= 4; + var t = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature (" + i.pretty(t) + ", expected " + i.pretty(e) + ")"); + } + }, + isSignature: function (e, t) { + var r = this.reader.index; + this.reader.setIndex(e); + var n = this.reader.readString(4) === t; + return this.reader.setIndex(r), n; + }, + readBlockEndOfCentral: function () { + this.diskNumber = this.reader.readInt(2), this.diskWithCentralDirStart = this.reader.readInt(2), this.centralDirRecordsOnThisDisk = this.reader.readInt(2), this.centralDirRecords = this.reader.readInt(2), this.centralDirSize = this.reader.readInt(4), this.centralDirOffset = this.reader.readInt(4), this.zipCommentLength = this.reader.readInt(2); + var e = this.reader.readData(this.zipCommentLength), + t = o.uint8array ? "uint8array" : "array", + r = i.transformTo(t, e); + this.zipComment = this.loadOptions.decodeFileName(r); + }, + readBlockZip64EndOfCentral: function () { + this.zip64EndOfCentralSize = this.reader.readInt(8), this.reader.skip(4), this.diskNumber = this.reader.readInt(4), this.diskWithCentralDirStart = this.reader.readInt(4), this.centralDirRecordsOnThisDisk = this.reader.readInt(8), this.centralDirRecords = this.reader.readInt(8), this.centralDirSize = this.reader.readInt(8), this.centralDirOffset = this.reader.readInt(8), this.zip64ExtensibleData = {}; + for (var e, t, r, n = this.zip64EndOfCentralSize - 44; 0 < n;) e = this.reader.readInt(2), t = this.reader.readInt(4), r = this.reader.readData(t), this.zip64ExtensibleData[e] = { + id: e, + length: t, + value: r + }; + }, + readBlockZip64EndOfCentralLocator: function () { + if (this.diskWithZip64CentralDirStart = this.reader.readInt(4), this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8), this.disksCount = this.reader.readInt(4), 1 < this.disksCount) throw new Error("Multi-volumes zip are not supported"); + }, + readLocalFiles: function () { + var e, t; + for (e = 0; e < this.files.length; e++) t = this.files[e], this.reader.setIndex(t.localHeaderOffset), this.checkSignature(s.LOCAL_FILE_HEADER), t.readLocalPart(this.reader), t.handleUTF8(), t.processAttributes(); + }, + readCentralDir: function () { + var e; + for (this.reader.setIndex(this.centralDirOffset); this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);) (e = new a({ + zip64: this.zip64 + }, this.loadOptions)).readCentralPart(this.reader), this.files.push(e); + if (this.centralDirRecords !== this.files.length && 0 !== this.centralDirRecords && 0 === this.files.length) throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + }, + readEndOfCentral: function () { + var e = this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END); + if (e < 0) throw !this.isSignature(0, s.LOCAL_FILE_HEADER) ? new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html") : new Error("Corrupted zip: can't find end of central directory"); + this.reader.setIndex(e); + var t = e; + if (this.checkSignature(s.CENTRAL_DIRECTORY_END), this.readBlockEndOfCentral(), this.diskNumber === i.MAX_VALUE_16BITS || this.diskWithCentralDirStart === i.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === i.MAX_VALUE_16BITS || this.centralDirRecords === i.MAX_VALUE_16BITS || this.centralDirSize === i.MAX_VALUE_32BITS || this.centralDirOffset === i.MAX_VALUE_32BITS) { + if (this.zip64 = !0, (e = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR)) < 0) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + if (this.reader.setIndex(e), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR), this.readBlockZip64EndOfCentralLocator(), !this.isSignature(this.relativeOffsetEndOfZip64CentralDir, s.ZIP64_CENTRAL_DIRECTORY_END) && (this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.relativeOffsetEndOfZip64CentralDir < 0)) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.readBlockZip64EndOfCentral(); + } + var r = this.centralDirOffset + this.centralDirSize; + this.zip64 && (r += 20, r += 12 + this.zip64EndOfCentralSize); + var n = t - r; + if (0 < n) this.isSignature(t, s.CENTRAL_FILE_HEADER) || (this.reader.zero = n);else if (n < 0) throw new Error("Corrupted zip: missing " + Math.abs(n) + " bytes."); + }, + prepareReader: function (e) { + this.reader = n(e); + }, + load: function (e) { + this.prepareReader(e), this.readEndOfCentral(), this.readCentralDir(), this.readLocalFiles(); + } + }, t.exports = h; + }, { + "./reader/readerFor": 22, + "./signature": 23, + "./support": 30, + "./utils": 32, + "./zipEntry": 34 + }], + 34: [function (e, t, r) { + "use strict"; + + var n = e("./reader/readerFor"), + s = e("./utils"), + i = e("./compressedObject"), + a = e("./crc32"), + o = e("./utf8"), + h = e("./compressions"), + u = e("./support"); + function l(e, t) { + this.options = e, this.loadOptions = t; + } + l.prototype = { + isEncrypted: function () { + return 1 == (1 & this.bitFlag); + }, + useUTF8: function () { + return 2048 == (2048 & this.bitFlag); + }, + readLocalPart: function (e) { + var t, r; + if (e.skip(22), this.fileNameLength = e.readInt(2), r = e.readInt(2), this.fileName = e.readData(this.fileNameLength), e.skip(r), -1 === this.compressedSize || -1 === this.uncompressedSize) throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)"); + if (null === (t = function (e) { + for (var t in h) if (Object.prototype.hasOwnProperty.call(h, t) && h[t].magic === e) return h[t]; + return null; + }(this.compressionMethod))) throw new Error("Corrupted zip : compression " + s.pretty(this.compressionMethod) + " unknown (inner file : " + s.transformTo("string", this.fileName) + ")"); + this.decompressed = new i(this.compressedSize, this.uncompressedSize, this.crc32, t, e.readData(this.compressedSize)); + }, + readCentralPart: function (e) { + this.versionMadeBy = e.readInt(2), e.skip(2), this.bitFlag = e.readInt(2), this.compressionMethod = e.readString(2), this.date = e.readDate(), this.crc32 = e.readInt(4), this.compressedSize = e.readInt(4), this.uncompressedSize = e.readInt(4); + var t = e.readInt(2); + if (this.extraFieldsLength = e.readInt(2), this.fileCommentLength = e.readInt(2), this.diskNumberStart = e.readInt(2), this.internalFileAttributes = e.readInt(2), this.externalFileAttributes = e.readInt(4), this.localHeaderOffset = e.readInt(4), this.isEncrypted()) throw new Error("Encrypted zip are not supported"); + e.skip(t), this.readExtraFields(e), this.parseZIP64ExtraField(e), this.fileComment = e.readData(this.fileCommentLength); + }, + processAttributes: function () { + this.unixPermissions = null, this.dosPermissions = null; + var e = this.versionMadeBy >> 8; + this.dir = !!(16 & this.externalFileAttributes), 0 == e && (this.dosPermissions = 63 & this.externalFileAttributes), 3 == e && (this.unixPermissions = this.externalFileAttributes >> 16 & 65535), this.dir || "/" !== this.fileNameStr.slice(-1) || (this.dir = !0); + }, + parseZIP64ExtraField: function () { + if (this.extraFields[1]) { + var e = n(this.extraFields[1].value); + this.uncompressedSize === s.MAX_VALUE_32BITS && (this.uncompressedSize = e.readInt(8)), this.compressedSize === s.MAX_VALUE_32BITS && (this.compressedSize = e.readInt(8)), this.localHeaderOffset === s.MAX_VALUE_32BITS && (this.localHeaderOffset = e.readInt(8)), this.diskNumberStart === s.MAX_VALUE_32BITS && (this.diskNumberStart = e.readInt(4)); + } + }, + readExtraFields: function (e) { + var t, + r, + n, + i = e.index + this.extraFieldsLength; + for (this.extraFields || (this.extraFields = {}); e.index + 4 < i;) t = e.readInt(2), r = e.readInt(2), n = e.readData(r), this.extraFields[t] = { + id: t, + length: r, + value: n + }; + e.setIndex(i); + }, + handleUTF8: function () { + var e = u.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) this.fileNameStr = o.utf8decode(this.fileName), this.fileCommentStr = o.utf8decode(this.fileComment);else { + var t = this.findExtraFieldUnicodePath(); + if (null !== t) this.fileNameStr = t;else { + var r = s.transformTo(e, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(r); + } + var n = this.findExtraFieldUnicodeComment(); + if (null !== n) this.fileCommentStr = n;else { + var i = s.transformTo(e, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(i); + } + } + }, + findExtraFieldUnicodePath: function () { + var e = this.extraFields[28789]; + if (e) { + var t = n(e.value); + return 1 !== t.readInt(1) ? null : a(this.fileName) !== t.readInt(4) ? null : o.utf8decode(t.readData(e.length - 5)); + } + return null; + }, + findExtraFieldUnicodeComment: function () { + var e = this.extraFields[25461]; + if (e) { + var t = n(e.value); + return 1 !== t.readInt(1) ? null : a(this.fileComment) !== t.readInt(4) ? null : o.utf8decode(t.readData(e.length - 5)); + } + return null; + } + }, t.exports = l; + }, { + "./compressedObject": 2, + "./compressions": 3, + "./crc32": 4, + "./reader/readerFor": 22, + "./support": 30, + "./utf8": 31, + "./utils": 32 + }], + 35: [function (e, t, r) { + "use strict"; + + function n(e, t, r) { + this.name = e, this.dir = r.dir, this.date = r.date, this.comment = r.comment, this.unixPermissions = r.unixPermissions, this.dosPermissions = r.dosPermissions, this._data = t, this._dataBinary = r.binary, this.options = { + compression: r.compression, + compressionOptions: r.compressionOptions + }; + } + var s = e("./stream/StreamHelper"), + i = e("./stream/DataWorker"), + a = e("./utf8"), + o = e("./compressedObject"), + h = e("./stream/GenericWorker"); + n.prototype = { + internalStream: function (e) { + var t = null, + r = "string"; + try { + if (!e) throw new Error("No output type specified."); + var n = "string" === (r = e.toLowerCase()) || "text" === r; + "binarystring" !== r && "text" !== r || (r = "string"), t = this._decompressWorker(); + var i = !this._dataBinary; + i && !n && (t = t.pipe(new a.Utf8EncodeWorker())), !i && n && (t = t.pipe(new a.Utf8DecodeWorker())); + } catch (e) { + (t = new h("error")).error(e); + } + return new s(t, r, ""); + }, + async: function (e, t) { + return this.internalStream(e).accumulate(t); + }, + nodeStream: function (e, t) { + return this.internalStream(e || "nodebuffer").toNodejsStream(t); + }, + _compressWorker: function (e, t) { + if (this._data instanceof o && this._data.compression.magic === e.magic) return this._data.getCompressedWorker(); + var r = this._decompressWorker(); + return this._dataBinary || (r = r.pipe(new a.Utf8EncodeWorker())), o.createWorkerFrom(r, e, t); + }, + _decompressWorker: function () { + return this._data instanceof o ? this._data.getContentWorker() : this._data instanceof h ? this._data : new i(this._data); + } + }; + for (var u = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"], l = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, f = 0; f < u.length; f++) n.prototype[u[f]] = l; + t.exports = n; + }, { + "./compressedObject": 2, + "./stream/DataWorker": 27, + "./stream/GenericWorker": 28, + "./stream/StreamHelper": 29, + "./utf8": 31 + }], + 36: [function (e, l, t) { + (function (t) { + "use strict"; + + var r, + n, + e = t.MutationObserver || t.WebKitMutationObserver; + if (e) { + var i = 0, + s = new e(u), + a = t.document.createTextNode(""); + s.observe(a, { + characterData: !0 + }), r = function () { + a.data = i = ++i % 2; + }; + } else if (t.setImmediate || void 0 === t.MessageChannel) r = "document" in t && "onreadystatechange" in t.document.createElement("script") ? function () { + var e = t.document.createElement("script"); + e.onreadystatechange = function () { + u(), e.onreadystatechange = null, e.parentNode.removeChild(e), e = null; + }, t.document.documentElement.appendChild(e); + } : function () { + setTimeout(u, 0); + };else { + var o = new t.MessageChannel(); + o.port1.onmessage = u, r = function () { + o.port2.postMessage(0); + }; + } + var h = []; + function u() { + var e, t; + n = !0; + for (var r = h.length; r;) { + for (t = h, h = [], e = -1; ++e < r;) t[e](); + r = h.length; + } + n = !1; + } + l.exports = function (e) { + 1 !== h.push(e) || n || r(); + }; + }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); + }, {}], + 37: [function (e, t, r) { + "use strict"; + + var i = e("immediate"); + function u() {} + var l = {}, + s = ["REJECTED"], + a = ["FULFILLED"], + n = ["PENDING"]; + function o(e) { + if ("function" != typeof e) throw new TypeError("resolver must be a function"); + this.state = n, this.queue = [], this.outcome = void 0, e !== u && d(this, e); + } + function h(e, t, r) { + this.promise = e, "function" == typeof t && (this.onFulfilled = t, this.callFulfilled = this.otherCallFulfilled), "function" == typeof r && (this.onRejected = r, this.callRejected = this.otherCallRejected); + } + function f(t, r, n) { + i(function () { + var e; + try { + e = r(n); + } catch (e) { + return l.reject(t, e); + } + e === t ? l.reject(t, new TypeError("Cannot resolve promise with itself")) : l.resolve(t, e); + }); + } + function c(e) { + var t = e && e.then; + if (e && ("object" == typeof e || "function" == typeof e) && "function" == typeof t) return function () { + t.apply(e, arguments); + }; + } + function d(t, e) { + var r = !1; + function n(e) { + r || (r = !0, l.reject(t, e)); + } + function i(e) { + r || (r = !0, l.resolve(t, e)); + } + var s = p(function () { + e(i, n); + }); + "error" === s.status && n(s.value); + } + function p(e, t) { + var r = {}; + try { + r.value = e(t), r.status = "success"; + } catch (e) { + r.status = "error", r.value = e; + } + return r; + } + (t.exports = o).prototype.finally = function (t) { + if ("function" != typeof t) return this; + var r = this.constructor; + return this.then(function (e) { + return r.resolve(t()).then(function () { + return e; + }); + }, function (e) { + return r.resolve(t()).then(function () { + throw e; + }); + }); + }, o.prototype.catch = function (e) { + return this.then(null, e); + }, o.prototype.then = function (e, t) { + if ("function" != typeof e && this.state === a || "function" != typeof t && this.state === s) return this; + var r = new this.constructor(u); + this.state !== n ? f(r, this.state === a ? e : t, this.outcome) : this.queue.push(new h(r, e, t)); + return r; + }, h.prototype.callFulfilled = function (e) { + l.resolve(this.promise, e); + }, h.prototype.otherCallFulfilled = function (e) { + f(this.promise, this.onFulfilled, e); + }, h.prototype.callRejected = function (e) { + l.reject(this.promise, e); + }, h.prototype.otherCallRejected = function (e) { + f(this.promise, this.onRejected, e); + }, l.resolve = function (e, t) { + var r = p(c, t); + if ("error" === r.status) return l.reject(e, r.value); + var n = r.value; + if (n) d(e, n);else { + e.state = a, e.outcome = t; + for (var i = -1, s = e.queue.length; ++i < s;) e.queue[i].callFulfilled(t); + } + return e; + }, l.reject = function (e, t) { + e.state = s, e.outcome = t; + for (var r = -1, n = e.queue.length; ++r < n;) e.queue[r].callRejected(t); + return e; + }, o.resolve = function (e) { + if (e instanceof this) return e; + return l.resolve(new this(u), e); + }, o.reject = function (e) { + var t = new this(u); + return l.reject(t, e); + }, o.all = function (e) { + var r = this; + if ("[object Array]" !== Object.prototype.toString.call(e)) return this.reject(new TypeError("must be an array")); + var n = e.length, + i = !1; + if (!n) return this.resolve([]); + var s = new Array(n), + a = 0, + t = -1, + o = new this(u); + for (; ++t < n;) h(e[t], t); + return o; + function h(e, t) { + r.resolve(e).then(function (e) { + s[t] = e, ++a !== n || i || (i = !0, l.resolve(o, s)); + }, function (e) { + i || (i = !0, l.reject(o, e)); + }); + } + }, o.race = function (e) { + var t = this; + if ("[object Array]" !== Object.prototype.toString.call(e)) return this.reject(new TypeError("must be an array")); + var r = e.length, + n = !1; + if (!r) return this.resolve([]); + var i = -1, + s = new this(u); + for (; ++i < r;) a = e[i], t.resolve(a).then(function (e) { + n || (n = !0, l.resolve(s, e)); + }, function (e) { + n || (n = !0, l.reject(s, e)); + }); + var a; + return s; + }; + }, { + immediate: 36 + }], + 38: [function (e, t, r) { + "use strict"; + + var n = {}; + (0, e("./lib/utils/common").assign)(n, e("./lib/deflate"), e("./lib/inflate"), e("./lib/zlib/constants")), t.exports = n; + }, { + "./lib/deflate": 39, + "./lib/inflate": 40, + "./lib/utils/common": 41, + "./lib/zlib/constants": 44 + }], + 39: [function (e, t, r) { + "use strict"; + + var a = e("./zlib/deflate"), + o = e("./utils/common"), + h = e("./utils/strings"), + i = e("./zlib/messages"), + s = e("./zlib/zstream"), + u = Object.prototype.toString, + l = 0, + f = -1, + c = 0, + d = 8; + function p(e) { + if (!(this instanceof p)) return new p(e); + this.options = o.assign({ + level: f, + method: d, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: c, + to: "" + }, e || {}); + var t = this.options; + t.raw && 0 < t.windowBits ? t.windowBits = -t.windowBits : t.gzip && 0 < t.windowBits && t.windowBits < 16 && (t.windowBits += 16), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new s(), this.strm.avail_out = 0; + var r = a.deflateInit2(this.strm, t.level, t.method, t.windowBits, t.memLevel, t.strategy); + if (r !== l) throw new Error(i[r]); + if (t.header && a.deflateSetHeader(this.strm, t.header), t.dictionary) { + var n; + if (n = "string" == typeof t.dictionary ? h.string2buf(t.dictionary) : "[object ArrayBuffer]" === u.call(t.dictionary) ? new Uint8Array(t.dictionary) : t.dictionary, (r = a.deflateSetDictionary(this.strm, n)) !== l) throw new Error(i[r]); + this._dict_set = !0; + } + } + function n(e, t) { + var r = new p(t); + if (r.push(e, !0), r.err) throw r.msg || i[r.err]; + return r.result; + } + p.prototype.push = function (e, t) { + var r, + n, + i = this.strm, + s = this.options.chunkSize; + if (this.ended) return !1; + n = t === ~~t ? t : !0 === t ? 4 : 0, "string" == typeof e ? i.input = h.string2buf(e) : "[object ArrayBuffer]" === u.call(e) ? i.input = new Uint8Array(e) : i.input = e, i.next_in = 0, i.avail_in = i.input.length; + do { + if (0 === i.avail_out && (i.output = new o.Buf8(s), i.next_out = 0, i.avail_out = s), 1 !== (r = a.deflate(i, n)) && r !== l) return this.onEnd(r), !(this.ended = !0); + 0 !== i.avail_out && (0 !== i.avail_in || 4 !== n && 2 !== n) || ("string" === this.options.to ? this.onData(h.buf2binstring(o.shrinkBuf(i.output, i.next_out))) : this.onData(o.shrinkBuf(i.output, i.next_out))); + } while ((0 < i.avail_in || 0 === i.avail_out) && 1 !== r); + return 4 === n ? (r = a.deflateEnd(this.strm), this.onEnd(r), this.ended = !0, r === l) : 2 !== n || (this.onEnd(l), !(i.avail_out = 0)); + }, p.prototype.onData = function (e) { + this.chunks.push(e); + }, p.prototype.onEnd = function (e) { + e === l && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = o.flattenChunks(this.chunks)), this.chunks = [], this.err = e, this.msg = this.strm.msg; + }, r.Deflate = p, r.deflate = n, r.deflateRaw = function (e, t) { + return (t = t || {}).raw = !0, n(e, t); + }, r.gzip = function (e, t) { + return (t = t || {}).gzip = !0, n(e, t); + }; + }, { + "./utils/common": 41, + "./utils/strings": 42, + "./zlib/deflate": 46, + "./zlib/messages": 51, + "./zlib/zstream": 53 + }], + 40: [function (e, t, r) { + "use strict"; + + var c = e("./zlib/inflate"), + d = e("./utils/common"), + p = e("./utils/strings"), + m = e("./zlib/constants"), + n = e("./zlib/messages"), + i = e("./zlib/zstream"), + s = e("./zlib/gzheader"), + _ = Object.prototype.toString; + function a(e) { + if (!(this instanceof a)) return new a(e); + this.options = d.assign({ + chunkSize: 16384, + windowBits: 0, + to: "" + }, e || {}); + var t = this.options; + t.raw && 0 <= t.windowBits && t.windowBits < 16 && (t.windowBits = -t.windowBits, 0 === t.windowBits && (t.windowBits = -15)), !(0 <= t.windowBits && t.windowBits < 16) || e && e.windowBits || (t.windowBits += 32), 15 < t.windowBits && t.windowBits < 48 && 0 == (15 & t.windowBits) && (t.windowBits |= 15), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new i(), this.strm.avail_out = 0; + var r = c.inflateInit2(this.strm, t.windowBits); + if (r !== m.Z_OK) throw new Error(n[r]); + this.header = new s(), c.inflateGetHeader(this.strm, this.header); + } + function o(e, t) { + var r = new a(t); + if (r.push(e, !0), r.err) throw r.msg || n[r.err]; + return r.result; + } + a.prototype.push = function (e, t) { + var r, + n, + i, + s, + a, + o, + h = this.strm, + u = this.options.chunkSize, + l = this.options.dictionary, + f = !1; + if (this.ended) return !1; + n = t === ~~t ? t : !0 === t ? m.Z_FINISH : m.Z_NO_FLUSH, "string" == typeof e ? h.input = p.binstring2buf(e) : "[object ArrayBuffer]" === _.call(e) ? h.input = new Uint8Array(e) : h.input = e, h.next_in = 0, h.avail_in = h.input.length; + do { + if (0 === h.avail_out && (h.output = new d.Buf8(u), h.next_out = 0, h.avail_out = u), (r = c.inflate(h, m.Z_NO_FLUSH)) === m.Z_NEED_DICT && l && (o = "string" == typeof l ? p.string2buf(l) : "[object ArrayBuffer]" === _.call(l) ? new Uint8Array(l) : l, r = c.inflateSetDictionary(this.strm, o)), r === m.Z_BUF_ERROR && !0 === f && (r = m.Z_OK, f = !1), r !== m.Z_STREAM_END && r !== m.Z_OK) return this.onEnd(r), !(this.ended = !0); + h.next_out && (0 !== h.avail_out && r !== m.Z_STREAM_END && (0 !== h.avail_in || n !== m.Z_FINISH && n !== m.Z_SYNC_FLUSH) || ("string" === this.options.to ? (i = p.utf8border(h.output, h.next_out), s = h.next_out - i, a = p.buf2string(h.output, i), h.next_out = s, h.avail_out = u - s, s && d.arraySet(h.output, h.output, i, s, 0), this.onData(a)) : this.onData(d.shrinkBuf(h.output, h.next_out)))), 0 === h.avail_in && 0 === h.avail_out && (f = !0); + } while ((0 < h.avail_in || 0 === h.avail_out) && r !== m.Z_STREAM_END); + return r === m.Z_STREAM_END && (n = m.Z_FINISH), n === m.Z_FINISH ? (r = c.inflateEnd(this.strm), this.onEnd(r), this.ended = !0, r === m.Z_OK) : n !== m.Z_SYNC_FLUSH || (this.onEnd(m.Z_OK), !(h.avail_out = 0)); + }, a.prototype.onData = function (e) { + this.chunks.push(e); + }, a.prototype.onEnd = function (e) { + e === m.Z_OK && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = d.flattenChunks(this.chunks)), this.chunks = [], this.err = e, this.msg = this.strm.msg; + }, r.Inflate = a, r.inflate = o, r.inflateRaw = function (e, t) { + return (t = t || {}).raw = !0, o(e, t); + }, r.ungzip = o; + }, { + "./utils/common": 41, + "./utils/strings": 42, + "./zlib/constants": 44, + "./zlib/gzheader": 47, + "./zlib/inflate": 49, + "./zlib/messages": 51, + "./zlib/zstream": 53 + }], + 41: [function (e, t, r) { + "use strict"; + + var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array; + r.assign = function (e) { + for (var t = Array.prototype.slice.call(arguments, 1); t.length;) { + var r = t.shift(); + if (r) { + if ("object" != typeof r) throw new TypeError(r + "must be non-object"); + for (var n in r) r.hasOwnProperty(n) && (e[n] = r[n]); + } + } + return e; + }, r.shrinkBuf = function (e, t) { + return e.length === t ? e : e.subarray ? e.subarray(0, t) : (e.length = t, e); + }; + var i = { + arraySet: function (e, t, r, n, i) { + if (t.subarray && e.subarray) e.set(t.subarray(r, r + n), i);else for (var s = 0; s < n; s++) e[i + s] = t[r + s]; + }, + flattenChunks: function (e) { + var t, r, n, i, s, a; + for (t = n = 0, r = e.length; t < r; t++) n += e[t].length; + for (a = new Uint8Array(n), t = i = 0, r = e.length; t < r; t++) s = e[t], a.set(s, i), i += s.length; + return a; + } + }, + s = { + arraySet: function (e, t, r, n, i) { + for (var s = 0; s < n; s++) e[i + s] = t[r + s]; + }, + flattenChunks: function (e) { + return [].concat.apply([], e); + } + }; + r.setTyped = function (e) { + e ? (r.Buf8 = Uint8Array, r.Buf16 = Uint16Array, r.Buf32 = Int32Array, r.assign(r, i)) : (r.Buf8 = Array, r.Buf16 = Array, r.Buf32 = Array, r.assign(r, s)); + }, r.setTyped(n); + }, {}], + 42: [function (e, t, r) { + "use strict"; + + var h = e("./common"), + i = !0, + s = !0; + try { + String.fromCharCode.apply(null, [0]); + } catch (e) { + i = !1; + } + try { + String.fromCharCode.apply(null, new Uint8Array(1)); + } catch (e) { + s = !1; + } + for (var u = new h.Buf8(256), n = 0; n < 256; n++) u[n] = 252 <= n ? 6 : 248 <= n ? 5 : 240 <= n ? 4 : 224 <= n ? 3 : 192 <= n ? 2 : 1; + function l(e, t) { + if (t < 65537 && (e.subarray && s || !e.subarray && i)) return String.fromCharCode.apply(null, h.shrinkBuf(e, t)); + for (var r = "", n = 0; n < t; n++) r += String.fromCharCode(e[n]); + return r; + } + u[254] = u[254] = 1, r.string2buf = function (e) { + var t, + r, + n, + i, + s, + a = e.length, + o = 0; + for (i = 0; i < a; i++) 55296 == (64512 & (r = e.charCodeAt(i))) && i + 1 < a && 56320 == (64512 & (n = e.charCodeAt(i + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), i++), o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4; + for (t = new h.Buf8(o), i = s = 0; s < o; i++) 55296 == (64512 & (r = e.charCodeAt(i))) && i + 1 < a && 56320 == (64512 & (n = e.charCodeAt(i + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), i++), r < 128 ? t[s++] = r : (r < 2048 ? t[s++] = 192 | r >>> 6 : (r < 65536 ? t[s++] = 224 | r >>> 12 : (t[s++] = 240 | r >>> 18, t[s++] = 128 | r >>> 12 & 63), t[s++] = 128 | r >>> 6 & 63), t[s++] = 128 | 63 & r); + return t; + }, r.buf2binstring = function (e) { + return l(e, e.length); + }, r.binstring2buf = function (e) { + for (var t = new h.Buf8(e.length), r = 0, n = t.length; r < n; r++) t[r] = e.charCodeAt(r); + return t; + }, r.buf2string = function (e, t) { + var r, + n, + i, + s, + a = t || e.length, + o = new Array(2 * a); + for (r = n = 0; r < a;) if ((i = e[r++]) < 128) o[n++] = i;else if (4 < (s = u[i])) o[n++] = 65533, r += s - 1;else { + for (i &= 2 === s ? 31 : 3 === s ? 15 : 7; 1 < s && r < a;) i = i << 6 | 63 & e[r++], s--; + 1 < s ? o[n++] = 65533 : i < 65536 ? o[n++] = i : (i -= 65536, o[n++] = 55296 | i >> 10 & 1023, o[n++] = 56320 | 1023 & i); + } + return l(o, n); + }, r.utf8border = function (e, t) { + var r; + for ((t = t || e.length) > e.length && (t = e.length), r = t - 1; 0 <= r && 128 == (192 & e[r]);) r--; + return r < 0 ? t : 0 === r ? t : r + u[e[r]] > t ? r : t; + }; + }, { + "./common": 41 + }], + 43: [function (e, t, r) { + "use strict"; + + t.exports = function (e, t, r, n) { + for (var i = 65535 & e | 0, s = e >>> 16 & 65535 | 0, a = 0; 0 !== r;) { + for (r -= a = 2e3 < r ? 2e3 : r; s = s + (i = i + t[n++] | 0) | 0, --a;); + i %= 65521, s %= 65521; + } + return i | s << 16 | 0; + }; + }, {}], + 44: [function (e, t, r) { + "use strict"; + + t.exports = { + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + Z_BUF_ERROR: -5, + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + Z_BINARY: 0, + Z_TEXT: 1, + Z_UNKNOWN: 2, + Z_DEFLATED: 8 + }; + }, {}], + 45: [function (e, t, r) { + "use strict"; + + var o = function () { + for (var e, t = [], r = 0; r < 256; r++) { + e = r; + for (var n = 0; n < 8; n++) e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; + t[r] = e; + } + return t; + }(); + t.exports = function (e, t, r, n) { + var i = o, + s = n + r; + e ^= -1; + for (var a = n; a < s; a++) e = e >>> 8 ^ i[255 & (e ^ t[a])]; + return -1 ^ e; + }; + }, {}], + 46: [function (e, t, r) { + "use strict"; + + var h, + c = e("../utils/common"), + u = e("./trees"), + d = e("./adler32"), + p = e("./crc32"), + n = e("./messages"), + l = 0, + f = 4, + m = 0, + _ = -2, + g = -1, + b = 4, + i = 2, + v = 8, + y = 9, + s = 286, + a = 30, + o = 19, + w = 2 * s + 1, + k = 15, + x = 3, + S = 258, + z = S + x + 1, + C = 42, + E = 113, + A = 1, + I = 2, + O = 3, + B = 4; + function R(e, t) { + return e.msg = n[t], t; + } + function T(e) { + return (e << 1) - (4 < e ? 9 : 0); + } + function D(e) { + for (var t = e.length; 0 <= --t;) e[t] = 0; + } + function F(e) { + var t = e.state, + r = t.pending; + r > e.avail_out && (r = e.avail_out), 0 !== r && (c.arraySet(e.output, t.pending_buf, t.pending_out, r, e.next_out), e.next_out += r, t.pending_out += r, e.total_out += r, e.avail_out -= r, t.pending -= r, 0 === t.pending && (t.pending_out = 0)); + } + function N(e, t) { + u._tr_flush_block(e, 0 <= e.block_start ? e.block_start : -1, e.strstart - e.block_start, t), e.block_start = e.strstart, F(e.strm); + } + function U(e, t) { + e.pending_buf[e.pending++] = t; + } + function P(e, t) { + e.pending_buf[e.pending++] = t >>> 8 & 255, e.pending_buf[e.pending++] = 255 & t; + } + function L(e, t) { + var r, + n, + i = e.max_chain_length, + s = e.strstart, + a = e.prev_length, + o = e.nice_match, + h = e.strstart > e.w_size - z ? e.strstart - (e.w_size - z) : 0, + u = e.window, + l = e.w_mask, + f = e.prev, + c = e.strstart + S, + d = u[s + a - 1], + p = u[s + a]; + e.prev_length >= e.good_match && (i >>= 2), o > e.lookahead && (o = e.lookahead); + do { + if (u[(r = t) + a] === p && u[r + a - 1] === d && u[r] === u[s] && u[++r] === u[s + 1]) { + s += 2, r++; + do {} while (u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && s < c); + if (n = S - (c - s), s = c - S, a < n) { + if (e.match_start = t, o <= (a = n)) break; + d = u[s + a - 1], p = u[s + a]; + } + } + } while ((t = f[t & l]) > h && 0 != --i); + return a <= e.lookahead ? a : e.lookahead; + } + function j(e) { + var t, + r, + n, + i, + s, + a, + o, + h, + u, + l, + f = e.w_size; + do { + if (i = e.window_size - e.lookahead - e.strstart, e.strstart >= f + (f - z)) { + for (c.arraySet(e.window, e.window, f, f, 0), e.match_start -= f, e.strstart -= f, e.block_start -= f, t = r = e.hash_size; n = e.head[--t], e.head[t] = f <= n ? n - f : 0, --r;); + for (t = r = f; n = e.prev[--t], e.prev[t] = f <= n ? n - f : 0, --r;); + i += f; + } + if (0 === e.strm.avail_in) break; + if (a = e.strm, o = e.window, h = e.strstart + e.lookahead, u = i, l = void 0, l = a.avail_in, u < l && (l = u), r = 0 === l ? 0 : (a.avail_in -= l, c.arraySet(o, a.input, a.next_in, l, h), 1 === a.state.wrap ? a.adler = d(a.adler, o, l, h) : 2 === a.state.wrap && (a.adler = p(a.adler, o, l, h)), a.next_in += l, a.total_in += l, l), e.lookahead += r, e.lookahead + e.insert >= x) for (s = e.strstart - e.insert, e.ins_h = e.window[s], e.ins_h = (e.ins_h << e.hash_shift ^ e.window[s + 1]) & e.hash_mask; e.insert && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[s + x - 1]) & e.hash_mask, e.prev[s & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = s, s++, e.insert--, !(e.lookahead + e.insert < x));); + } while (e.lookahead < z && 0 !== e.strm.avail_in); + } + function Z(e, t) { + for (var r, n;;) { + if (e.lookahead < z) { + if (j(e), e.lookahead < z && t === l) return A; + if (0 === e.lookahead) break; + } + if (r = 0, e.lookahead >= x && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + x - 1]) & e.hash_mask, r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), 0 !== r && e.strstart - r <= e.w_size - z && (e.match_length = L(e, r)), e.match_length >= x) { + if (n = u._tr_tally(e, e.strstart - e.match_start, e.match_length - x), e.lookahead -= e.match_length, e.match_length <= e.max_lazy_match && e.lookahead >= x) { + for (e.match_length--; e.strstart++, e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + x - 1]) & e.hash_mask, r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart, 0 != --e.match_length;); + e.strstart++; + } else e.strstart += e.match_length, e.match_length = 0, e.ins_h = e.window[e.strstart], e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + 1]) & e.hash_mask; + } else n = u._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++; + if (n && (N(e, !1), 0 === e.strm.avail_out)) return A; + } + return e.insert = e.strstart < x - 1 ? e.strstart : x - 1, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? A : I; + } + function W(e, t) { + for (var r, n, i;;) { + if (e.lookahead < z) { + if (j(e), e.lookahead < z && t === l) return A; + if (0 === e.lookahead) break; + } + if (r = 0, e.lookahead >= x && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + x - 1]) & e.hash_mask, r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), e.prev_length = e.match_length, e.prev_match = e.match_start, e.match_length = x - 1, 0 !== r && e.prev_length < e.max_lazy_match && e.strstart - r <= e.w_size - z && (e.match_length = L(e, r), e.match_length <= 5 && (1 === e.strategy || e.match_length === x && 4096 < e.strstart - e.match_start) && (e.match_length = x - 1)), e.prev_length >= x && e.match_length <= e.prev_length) { + for (i = e.strstart + e.lookahead - x, n = u._tr_tally(e, e.strstart - 1 - e.prev_match, e.prev_length - x), e.lookahead -= e.prev_length - 1, e.prev_length -= 2; ++e.strstart <= i && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + x - 1]) & e.hash_mask, r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), 0 != --e.prev_length;); + if (e.match_available = 0, e.match_length = x - 1, e.strstart++, n && (N(e, !1), 0 === e.strm.avail_out)) return A; + } else if (e.match_available) { + if ((n = u._tr_tally(e, 0, e.window[e.strstart - 1])) && N(e, !1), e.strstart++, e.lookahead--, 0 === e.strm.avail_out) return A; + } else e.match_available = 1, e.strstart++, e.lookahead--; + } + return e.match_available && (n = u._tr_tally(e, 0, e.window[e.strstart - 1]), e.match_available = 0), e.insert = e.strstart < x - 1 ? e.strstart : x - 1, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? A : I; + } + function M(e, t, r, n, i) { + this.good_length = e, this.max_lazy = t, this.nice_length = r, this.max_chain = n, this.func = i; + } + function H() { + this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = v, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new c.Buf16(2 * w), this.dyn_dtree = new c.Buf16(2 * (2 * a + 1)), this.bl_tree = new c.Buf16(2 * (2 * o + 1)), D(this.dyn_ltree), D(this.dyn_dtree), D(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new c.Buf16(k + 1), this.heap = new c.Buf16(2 * s + 1), D(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new c.Buf16(2 * s + 1), D(this.depth), this.l_buf = 0, this.lit_bufsize = 0, this.last_lit = 0, this.d_buf = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0; + } + function G(e) { + var t; + return e && e.state ? (e.total_in = e.total_out = 0, e.data_type = i, (t = e.state).pending = 0, t.pending_out = 0, t.wrap < 0 && (t.wrap = -t.wrap), t.status = t.wrap ? C : E, e.adler = 2 === t.wrap ? 0 : 1, t.last_flush = l, u._tr_init(t), m) : R(e, _); + } + function K(e) { + var t = G(e); + return t === m && function (e) { + e.window_size = 2 * e.w_size, D(e.head), e.max_lazy_match = h[e.level].max_lazy, e.good_match = h[e.level].good_length, e.nice_match = h[e.level].nice_length, e.max_chain_length = h[e.level].max_chain, e.strstart = 0, e.block_start = 0, e.lookahead = 0, e.insert = 0, e.match_length = e.prev_length = x - 1, e.match_available = 0, e.ins_h = 0; + }(e.state), t; + } + function Y(e, t, r, n, i, s) { + if (!e) return _; + var a = 1; + if (t === g && (t = 6), n < 0 ? (a = 0, n = -n) : 15 < n && (a = 2, n -= 16), i < 1 || y < i || r !== v || n < 8 || 15 < n || t < 0 || 9 < t || s < 0 || b < s) return R(e, _); + 8 === n && (n = 9); + var o = new H(); + return (e.state = o).strm = e, o.wrap = a, o.gzhead = null, o.w_bits = n, o.w_size = 1 << o.w_bits, o.w_mask = o.w_size - 1, o.hash_bits = i + 7, o.hash_size = 1 << o.hash_bits, o.hash_mask = o.hash_size - 1, o.hash_shift = ~~((o.hash_bits + x - 1) / x), o.window = new c.Buf8(2 * o.w_size), o.head = new c.Buf16(o.hash_size), o.prev = new c.Buf16(o.w_size), o.lit_bufsize = 1 << i + 6, o.pending_buf_size = 4 * o.lit_bufsize, o.pending_buf = new c.Buf8(o.pending_buf_size), o.d_buf = 1 * o.lit_bufsize, o.l_buf = 3 * o.lit_bufsize, o.level = t, o.strategy = s, o.method = r, K(e); + } + h = [new M(0, 0, 0, 0, function (e, t) { + var r = 65535; + for (r > e.pending_buf_size - 5 && (r = e.pending_buf_size - 5);;) { + if (e.lookahead <= 1) { + if (j(e), 0 === e.lookahead && t === l) return A; + if (0 === e.lookahead) break; + } + e.strstart += e.lookahead, e.lookahead = 0; + var n = e.block_start + r; + if ((0 === e.strstart || e.strstart >= n) && (e.lookahead = e.strstart - n, e.strstart = n, N(e, !1), 0 === e.strm.avail_out)) return A; + if (e.strstart - e.block_start >= e.w_size - z && (N(e, !1), 0 === e.strm.avail_out)) return A; + } + return e.insert = 0, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : (e.strstart > e.block_start && (N(e, !1), e.strm.avail_out), A); + }), new M(4, 4, 8, 4, Z), new M(4, 5, 16, 8, Z), new M(4, 6, 32, 32, Z), new M(4, 4, 16, 16, W), new M(8, 16, 32, 32, W), new M(8, 16, 128, 128, W), new M(8, 32, 128, 256, W), new M(32, 128, 258, 1024, W), new M(32, 258, 258, 4096, W)], r.deflateInit = function (e, t) { + return Y(e, t, v, 15, 8, 0); + }, r.deflateInit2 = Y, r.deflateReset = K, r.deflateResetKeep = G, r.deflateSetHeader = function (e, t) { + return e && e.state ? 2 !== e.state.wrap ? _ : (e.state.gzhead = t, m) : _; + }, r.deflate = function (e, t) { + var r, n, i, s; + if (!e || !e.state || 5 < t || t < 0) return e ? R(e, _) : _; + if (n = e.state, !e.output || !e.input && 0 !== e.avail_in || 666 === n.status && t !== f) return R(e, 0 === e.avail_out ? -5 : _); + if (n.strm = e, r = n.last_flush, n.last_flush = t, n.status === C) if (2 === n.wrap) e.adler = 0, U(n, 31), U(n, 139), U(n, 8), n.gzhead ? (U(n, (n.gzhead.text ? 1 : 0) + (n.gzhead.hcrc ? 2 : 0) + (n.gzhead.extra ? 4 : 0) + (n.gzhead.name ? 8 : 0) + (n.gzhead.comment ? 16 : 0)), U(n, 255 & n.gzhead.time), U(n, n.gzhead.time >> 8 & 255), U(n, n.gzhead.time >> 16 & 255), U(n, n.gzhead.time >> 24 & 255), U(n, 9 === n.level ? 2 : 2 <= n.strategy || n.level < 2 ? 4 : 0), U(n, 255 & n.gzhead.os), n.gzhead.extra && n.gzhead.extra.length && (U(n, 255 & n.gzhead.extra.length), U(n, n.gzhead.extra.length >> 8 & 255)), n.gzhead.hcrc && (e.adler = p(e.adler, n.pending_buf, n.pending, 0)), n.gzindex = 0, n.status = 69) : (U(n, 0), U(n, 0), U(n, 0), U(n, 0), U(n, 0), U(n, 9 === n.level ? 2 : 2 <= n.strategy || n.level < 2 ? 4 : 0), U(n, 3), n.status = E);else { + var a = v + (n.w_bits - 8 << 4) << 8; + a |= (2 <= n.strategy || n.level < 2 ? 0 : n.level < 6 ? 1 : 6 === n.level ? 2 : 3) << 6, 0 !== n.strstart && (a |= 32), a += 31 - a % 31, n.status = E, P(n, a), 0 !== n.strstart && (P(n, e.adler >>> 16), P(n, 65535 & e.adler)), e.adler = 1; + } + if (69 === n.status) if (n.gzhead.extra) { + for (i = n.pending; n.gzindex < (65535 & n.gzhead.extra.length) && (n.pending !== n.pending_buf_size || (n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), F(e), i = n.pending, n.pending !== n.pending_buf_size));) U(n, 255 & n.gzhead.extra[n.gzindex]), n.gzindex++; + n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), n.gzindex === n.gzhead.extra.length && (n.gzindex = 0, n.status = 73); + } else n.status = 73; + if (73 === n.status) if (n.gzhead.name) { + i = n.pending; + do { + if (n.pending === n.pending_buf_size && (n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), F(e), i = n.pending, n.pending === n.pending_buf_size)) { + s = 1; + break; + } + s = n.gzindex < n.gzhead.name.length ? 255 & n.gzhead.name.charCodeAt(n.gzindex++) : 0, U(n, s); + } while (0 !== s); + n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), 0 === s && (n.gzindex = 0, n.status = 91); + } else n.status = 91; + if (91 === n.status) if (n.gzhead.comment) { + i = n.pending; + do { + if (n.pending === n.pending_buf_size && (n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), F(e), i = n.pending, n.pending === n.pending_buf_size)) { + s = 1; + break; + } + s = n.gzindex < n.gzhead.comment.length ? 255 & n.gzhead.comment.charCodeAt(n.gzindex++) : 0, U(n, s); + } while (0 !== s); + n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), 0 === s && (n.status = 103); + } else n.status = 103; + if (103 === n.status && (n.gzhead.hcrc ? (n.pending + 2 > n.pending_buf_size && F(e), n.pending + 2 <= n.pending_buf_size && (U(n, 255 & e.adler), U(n, e.adler >> 8 & 255), e.adler = 0, n.status = E)) : n.status = E), 0 !== n.pending) { + if (F(e), 0 === e.avail_out) return n.last_flush = -1, m; + } else if (0 === e.avail_in && T(t) <= T(r) && t !== f) return R(e, -5); + if (666 === n.status && 0 !== e.avail_in) return R(e, -5); + if (0 !== e.avail_in || 0 !== n.lookahead || t !== l && 666 !== n.status) { + var o = 2 === n.strategy ? function (e, t) { + for (var r;;) { + if (0 === e.lookahead && (j(e), 0 === e.lookahead)) { + if (t === l) return A; + break; + } + if (e.match_length = 0, r = u._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++, r && (N(e, !1), 0 === e.strm.avail_out)) return A; + } + return e.insert = 0, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? A : I; + }(n, t) : 3 === n.strategy ? function (e, t) { + for (var r, n, i, s, a = e.window;;) { + if (e.lookahead <= S) { + if (j(e), e.lookahead <= S && t === l) return A; + if (0 === e.lookahead) break; + } + if (e.match_length = 0, e.lookahead >= x && 0 < e.strstart && (n = a[i = e.strstart - 1]) === a[++i] && n === a[++i] && n === a[++i]) { + s = e.strstart + S; + do {} while (n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && i < s); + e.match_length = S - (s - i), e.match_length > e.lookahead && (e.match_length = e.lookahead); + } + if (e.match_length >= x ? (r = u._tr_tally(e, 1, e.match_length - x), e.lookahead -= e.match_length, e.strstart += e.match_length, e.match_length = 0) : (r = u._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++), r && (N(e, !1), 0 === e.strm.avail_out)) return A; + } + return e.insert = 0, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? A : I; + }(n, t) : h[n.level].func(n, t); + if (o !== O && o !== B || (n.status = 666), o === A || o === O) return 0 === e.avail_out && (n.last_flush = -1), m; + if (o === I && (1 === t ? u._tr_align(n) : 5 !== t && (u._tr_stored_block(n, 0, 0, !1), 3 === t && (D(n.head), 0 === n.lookahead && (n.strstart = 0, n.block_start = 0, n.insert = 0))), F(e), 0 === e.avail_out)) return n.last_flush = -1, m; + } + return t !== f ? m : n.wrap <= 0 ? 1 : (2 === n.wrap ? (U(n, 255 & e.adler), U(n, e.adler >> 8 & 255), U(n, e.adler >> 16 & 255), U(n, e.adler >> 24 & 255), U(n, 255 & e.total_in), U(n, e.total_in >> 8 & 255), U(n, e.total_in >> 16 & 255), U(n, e.total_in >> 24 & 255)) : (P(n, e.adler >>> 16), P(n, 65535 & e.adler)), F(e), 0 < n.wrap && (n.wrap = -n.wrap), 0 !== n.pending ? m : 1); + }, r.deflateEnd = function (e) { + var t; + return e && e.state ? (t = e.state.status) !== C && 69 !== t && 73 !== t && 91 !== t && 103 !== t && t !== E && 666 !== t ? R(e, _) : (e.state = null, t === E ? R(e, -3) : m) : _; + }, r.deflateSetDictionary = function (e, t) { + var r, + n, + i, + s, + a, + o, + h, + u, + l = t.length; + if (!e || !e.state) return _; + if (2 === (s = (r = e.state).wrap) || 1 === s && r.status !== C || r.lookahead) return _; + for (1 === s && (e.adler = d(e.adler, t, l, 0)), r.wrap = 0, l >= r.w_size && (0 === s && (D(r.head), r.strstart = 0, r.block_start = 0, r.insert = 0), u = new c.Buf8(r.w_size), c.arraySet(u, t, l - r.w_size, r.w_size, 0), t = u, l = r.w_size), a = e.avail_in, o = e.next_in, h = e.input, e.avail_in = l, e.next_in = 0, e.input = t, j(r); r.lookahead >= x;) { + for (n = r.strstart, i = r.lookahead - (x - 1); r.ins_h = (r.ins_h << r.hash_shift ^ r.window[n + x - 1]) & r.hash_mask, r.prev[n & r.w_mask] = r.head[r.ins_h], r.head[r.ins_h] = n, n++, --i;); + r.strstart = n, r.lookahead = x - 1, j(r); + } + return r.strstart += r.lookahead, r.block_start = r.strstart, r.insert = r.lookahead, r.lookahead = 0, r.match_length = r.prev_length = x - 1, r.match_available = 0, e.next_in = o, e.input = h, e.avail_in = a, r.wrap = s, m; + }, r.deflateInfo = "pako deflate (from Nodeca project)"; + }, { + "../utils/common": 41, + "./adler32": 43, + "./crc32": 45, + "./messages": 51, + "./trees": 52 + }], + 47: [function (e, t, r) { + "use strict"; + + t.exports = function () { + this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = !1; + }; + }, {}], + 48: [function (e, t, r) { + "use strict"; + + t.exports = function (e, t) { + var r, n, i, s, a, o, h, u, l, f, c, d, p, m, _, g, b, v, y, w, k, x, S, z, C; + r = e.state, n = e.next_in, z = e.input, i = n + (e.avail_in - 5), s = e.next_out, C = e.output, a = s - (t - e.avail_out), o = s + (e.avail_out - 257), h = r.dmax, u = r.wsize, l = r.whave, f = r.wnext, c = r.window, d = r.hold, p = r.bits, m = r.lencode, _ = r.distcode, g = (1 << r.lenbits) - 1, b = (1 << r.distbits) - 1; + e: do { + p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = m[d & g]; + t: for (;;) { + if (d >>>= y = v >>> 24, p -= y, 0 === (y = v >>> 16 & 255)) C[s++] = 65535 & v;else { + if (!(16 & y)) { + if (0 == (64 & y)) { + v = m[(65535 & v) + (d & (1 << y) - 1)]; + continue t; + } + if (32 & y) { + r.mode = 12; + break e; + } + e.msg = "invalid literal/length code", r.mode = 30; + break e; + } + w = 65535 & v, (y &= 15) && (p < y && (d += z[n++] << p, p += 8), w += d & (1 << y) - 1, d >>>= y, p -= y), p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = _[d & b]; + r: for (;;) { + if (d >>>= y = v >>> 24, p -= y, !(16 & (y = v >>> 16 & 255))) { + if (0 == (64 & y)) { + v = _[(65535 & v) + (d & (1 << y) - 1)]; + continue r; + } + e.msg = "invalid distance code", r.mode = 30; + break e; + } + if (k = 65535 & v, p < (y &= 15) && (d += z[n++] << p, (p += 8) < y && (d += z[n++] << p, p += 8)), h < (k += d & (1 << y) - 1)) { + e.msg = "invalid distance too far back", r.mode = 30; + break e; + } + if (d >>>= y, p -= y, (y = s - a) < k) { + if (l < (y = k - y) && r.sane) { + e.msg = "invalid distance too far back", r.mode = 30; + break e; + } + if (S = c, (x = 0) === f) { + if (x += u - y, y < w) { + for (w -= y; C[s++] = c[x++], --y;); + x = s - k, S = C; + } + } else if (f < y) { + if (x += u + f - y, (y -= f) < w) { + for (w -= y; C[s++] = c[x++], --y;); + if (x = 0, f < w) { + for (w -= y = f; C[s++] = c[x++], --y;); + x = s - k, S = C; + } + } + } else if (x += f - y, y < w) { + for (w -= y; C[s++] = c[x++], --y;); + x = s - k, S = C; + } + for (; 2 < w;) C[s++] = S[x++], C[s++] = S[x++], C[s++] = S[x++], w -= 3; + w && (C[s++] = S[x++], 1 < w && (C[s++] = S[x++])); + } else { + for (x = s - k; C[s++] = C[x++], C[s++] = C[x++], C[s++] = C[x++], 2 < (w -= 3);); + w && (C[s++] = C[x++], 1 < w && (C[s++] = C[x++])); + } + break; + } + } + break; + } + } while (n < i && s < o); + n -= w = p >> 3, d &= (1 << (p -= w << 3)) - 1, e.next_in = n, e.next_out = s, e.avail_in = n < i ? i - n + 5 : 5 - (n - i), e.avail_out = s < o ? o - s + 257 : 257 - (s - o), r.hold = d, r.bits = p; + }; + }, {}], + 49: [function (e, t, r) { + "use strict"; + + var I = e("../utils/common"), + O = e("./adler32"), + B = e("./crc32"), + R = e("./inffast"), + T = e("./inftrees"), + D = 1, + F = 2, + N = 0, + U = -2, + P = 1, + n = 852, + i = 592; + function L(e) { + return (e >>> 24 & 255) + (e >>> 8 & 65280) + ((65280 & e) << 8) + ((255 & e) << 24); + } + function s() { + this.mode = 0, this.last = !1, this.wrap = 0, this.havedict = !1, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new I.Buf16(320), this.work = new I.Buf16(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0; + } + function a(e) { + var t; + return e && e.state ? (t = e.state, e.total_in = e.total_out = t.total = 0, e.msg = "", t.wrap && (e.adler = 1 & t.wrap), t.mode = P, t.last = 0, t.havedict = 0, t.dmax = 32768, t.head = null, t.hold = 0, t.bits = 0, t.lencode = t.lendyn = new I.Buf32(n), t.distcode = t.distdyn = new I.Buf32(i), t.sane = 1, t.back = -1, N) : U; + } + function o(e) { + var t; + return e && e.state ? ((t = e.state).wsize = 0, t.whave = 0, t.wnext = 0, a(e)) : U; + } + function h(e, t) { + var r, n; + return e && e.state ? (n = e.state, t < 0 ? (r = 0, t = -t) : (r = 1 + (t >> 4), t < 48 && (t &= 15)), t && (t < 8 || 15 < t) ? U : (null !== n.window && n.wbits !== t && (n.window = null), n.wrap = r, n.wbits = t, o(e))) : U; + } + function u(e, t) { + var r, n; + return e ? (n = new s(), (e.state = n).window = null, (r = h(e, t)) !== N && (e.state = null), r) : U; + } + var l, + f, + c = !0; + function j(e) { + if (c) { + var t; + for (l = new I.Buf32(512), f = new I.Buf32(32), t = 0; t < 144;) e.lens[t++] = 8; + for (; t < 256;) e.lens[t++] = 9; + for (; t < 280;) e.lens[t++] = 7; + for (; t < 288;) e.lens[t++] = 8; + for (T(D, e.lens, 0, 288, l, 0, e.work, { + bits: 9 + }), t = 0; t < 32;) e.lens[t++] = 5; + T(F, e.lens, 0, 32, f, 0, e.work, { + bits: 5 + }), c = !1; + } + e.lencode = l, e.lenbits = 9, e.distcode = f, e.distbits = 5; + } + function Z(e, t, r, n) { + var i, + s = e.state; + return null === s.window && (s.wsize = 1 << s.wbits, s.wnext = 0, s.whave = 0, s.window = new I.Buf8(s.wsize)), n >= s.wsize ? (I.arraySet(s.window, t, r - s.wsize, s.wsize, 0), s.wnext = 0, s.whave = s.wsize) : (n < (i = s.wsize - s.wnext) && (i = n), I.arraySet(s.window, t, r - n, i, s.wnext), (n -= i) ? (I.arraySet(s.window, t, r - n, n, 0), s.wnext = n, s.whave = s.wsize) : (s.wnext += i, s.wnext === s.wsize && (s.wnext = 0), s.whave < s.wsize && (s.whave += i))), 0; + } + r.inflateReset = o, r.inflateReset2 = h, r.inflateResetKeep = a, r.inflateInit = function (e) { + return u(e, 15); + }, r.inflateInit2 = u, r.inflate = function (e, t) { + var r, + n, + i, + s, + a, + o, + h, + u, + l, + f, + c, + d, + p, + m, + _, + g, + b, + v, + y, + w, + k, + x, + S, + z, + C = 0, + E = new I.Buf8(4), + A = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + if (!e || !e.state || !e.output || !e.input && 0 !== e.avail_in) return U; + 12 === (r = e.state).mode && (r.mode = 13), a = e.next_out, i = e.output, h = e.avail_out, s = e.next_in, n = e.input, o = e.avail_in, u = r.hold, l = r.bits, f = o, c = h, x = N; + e: for (;;) switch (r.mode) { + case P: + if (0 === r.wrap) { + r.mode = 13; + break; + } + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (2 & r.wrap && 35615 === u) { + E[r.check = 0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0), l = u = 0, r.mode = 2; + break; + } + if (r.flags = 0, r.head && (r.head.done = !1), !(1 & r.wrap) || (((255 & u) << 8) + (u >> 8)) % 31) { + e.msg = "incorrect header check", r.mode = 30; + break; + } + if (8 != (15 & u)) { + e.msg = "unknown compression method", r.mode = 30; + break; + } + if (l -= 4, k = 8 + (15 & (u >>>= 4)), 0 === r.wbits) r.wbits = k;else if (k > r.wbits) { + e.msg = "invalid window size", r.mode = 30; + break; + } + r.dmax = 1 << k, e.adler = r.check = 1, r.mode = 512 & u ? 10 : 12, l = u = 0; + break; + case 2: + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (r.flags = u, 8 != (255 & r.flags)) { + e.msg = "unknown compression method", r.mode = 30; + break; + } + if (57344 & r.flags) { + e.msg = "unknown header flags set", r.mode = 30; + break; + } + r.head && (r.head.text = u >> 8 & 1), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0)), l = u = 0, r.mode = 3; + case 3: + for (; l < 32;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.head && (r.head.time = u), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, E[2] = u >>> 16 & 255, E[3] = u >>> 24 & 255, r.check = B(r.check, E, 4, 0)), l = u = 0, r.mode = 4; + case 4: + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.head && (r.head.xflags = 255 & u, r.head.os = u >> 8), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0)), l = u = 0, r.mode = 5; + case 5: + if (1024 & r.flags) { + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.length = u, r.head && (r.head.extra_len = u), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0)), l = u = 0; + } else r.head && (r.head.extra = null); + r.mode = 6; + case 6: + if (1024 & r.flags && (o < (d = r.length) && (d = o), d && (r.head && (k = r.head.extra_len - r.length, r.head.extra || (r.head.extra = new Array(r.head.extra_len)), I.arraySet(r.head.extra, n, s, d, k)), 512 & r.flags && (r.check = B(r.check, n, d, s)), o -= d, s += d, r.length -= d), r.length)) break e; + r.length = 0, r.mode = 7; + case 7: + if (2048 & r.flags) { + if (0 === o) break e; + for (d = 0; k = n[s + d++], r.head && k && r.length < 65536 && (r.head.name += String.fromCharCode(k)), k && d < o;); + if (512 & r.flags && (r.check = B(r.check, n, d, s)), o -= d, s += d, k) break e; + } else r.head && (r.head.name = null); + r.length = 0, r.mode = 8; + case 8: + if (4096 & r.flags) { + if (0 === o) break e; + for (d = 0; k = n[s + d++], r.head && k && r.length < 65536 && (r.head.comment += String.fromCharCode(k)), k && d < o;); + if (512 & r.flags && (r.check = B(r.check, n, d, s)), o -= d, s += d, k) break e; + } else r.head && (r.head.comment = null); + r.mode = 9; + case 9: + if (512 & r.flags) { + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (u !== (65535 & r.check)) { + e.msg = "header crc mismatch", r.mode = 30; + break; + } + l = u = 0; + } + r.head && (r.head.hcrc = r.flags >> 9 & 1, r.head.done = !0), e.adler = r.check = 0, r.mode = 12; + break; + case 10: + for (; l < 32;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + e.adler = r.check = L(u), l = u = 0, r.mode = 11; + case 11: + if (0 === r.havedict) return e.next_out = a, e.avail_out = h, e.next_in = s, e.avail_in = o, r.hold = u, r.bits = l, 2; + e.adler = r.check = 1, r.mode = 12; + case 12: + if (5 === t || 6 === t) break e; + case 13: + if (r.last) { + u >>>= 7 & l, l -= 7 & l, r.mode = 27; + break; + } + for (; l < 3;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + switch (r.last = 1 & u, l -= 1, 3 & (u >>>= 1)) { + case 0: + r.mode = 14; + break; + case 1: + if (j(r), r.mode = 20, 6 !== t) break; + u >>>= 2, l -= 2; + break e; + case 2: + r.mode = 17; + break; + case 3: + e.msg = "invalid block type", r.mode = 30; + } + u >>>= 2, l -= 2; + break; + case 14: + for (u >>>= 7 & l, l -= 7 & l; l < 32;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if ((65535 & u) != (u >>> 16 ^ 65535)) { + e.msg = "invalid stored block lengths", r.mode = 30; + break; + } + if (r.length = 65535 & u, l = u = 0, r.mode = 15, 6 === t) break e; + case 15: + r.mode = 16; + case 16: + if (d = r.length) { + if (o < d && (d = o), h < d && (d = h), 0 === d) break e; + I.arraySet(i, n, s, d, a), o -= d, s += d, h -= d, a += d, r.length -= d; + break; + } + r.mode = 12; + break; + case 17: + for (; l < 14;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (r.nlen = 257 + (31 & u), u >>>= 5, l -= 5, r.ndist = 1 + (31 & u), u >>>= 5, l -= 5, r.ncode = 4 + (15 & u), u >>>= 4, l -= 4, 286 < r.nlen || 30 < r.ndist) { + e.msg = "too many length or distance symbols", r.mode = 30; + break; + } + r.have = 0, r.mode = 18; + case 18: + for (; r.have < r.ncode;) { + for (; l < 3;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.lens[A[r.have++]] = 7 & u, u >>>= 3, l -= 3; + } + for (; r.have < 19;) r.lens[A[r.have++]] = 0; + if (r.lencode = r.lendyn, r.lenbits = 7, S = { + bits: r.lenbits + }, x = T(0, r.lens, 0, 19, r.lencode, 0, r.work, S), r.lenbits = S.bits, x) { + e.msg = "invalid code lengths set", r.mode = 30; + break; + } + r.have = 0, r.mode = 19; + case 19: + for (; r.have < r.nlen + r.ndist;) { + for (; g = (C = r.lencode[u & (1 << r.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (b < 16) u >>>= _, l -= _, r.lens[r.have++] = b;else { + if (16 === b) { + for (z = _ + 2; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (u >>>= _, l -= _, 0 === r.have) { + e.msg = "invalid bit length repeat", r.mode = 30; + break; + } + k = r.lens[r.have - 1], d = 3 + (3 & u), u >>>= 2, l -= 2; + } else if (17 === b) { + for (z = _ + 3; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + l -= _, k = 0, d = 3 + (7 & (u >>>= _)), u >>>= 3, l -= 3; + } else { + for (z = _ + 7; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + l -= _, k = 0, d = 11 + (127 & (u >>>= _)), u >>>= 7, l -= 7; + } + if (r.have + d > r.nlen + r.ndist) { + e.msg = "invalid bit length repeat", r.mode = 30; + break; + } + for (; d--;) r.lens[r.have++] = k; + } + } + if (30 === r.mode) break; + if (0 === r.lens[256]) { + e.msg = "invalid code -- missing end-of-block", r.mode = 30; + break; + } + if (r.lenbits = 9, S = { + bits: r.lenbits + }, x = T(D, r.lens, 0, r.nlen, r.lencode, 0, r.work, S), r.lenbits = S.bits, x) { + e.msg = "invalid literal/lengths set", r.mode = 30; + break; + } + if (r.distbits = 6, r.distcode = r.distdyn, S = { + bits: r.distbits + }, x = T(F, r.lens, r.nlen, r.ndist, r.distcode, 0, r.work, S), r.distbits = S.bits, x) { + e.msg = "invalid distances set", r.mode = 30; + break; + } + if (r.mode = 20, 6 === t) break e; + case 20: + r.mode = 21; + case 21: + if (6 <= o && 258 <= h) { + e.next_out = a, e.avail_out = h, e.next_in = s, e.avail_in = o, r.hold = u, r.bits = l, R(e, c), a = e.next_out, i = e.output, h = e.avail_out, s = e.next_in, n = e.input, o = e.avail_in, u = r.hold, l = r.bits, 12 === r.mode && (r.back = -1); + break; + } + for (r.back = 0; g = (C = r.lencode[u & (1 << r.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (g && 0 == (240 & g)) { + for (v = _, y = g, w = b; g = (C = r.lencode[w + ((u & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + u >>>= v, l -= v, r.back += v; + } + if (u >>>= _, l -= _, r.back += _, r.length = b, 0 === g) { + r.mode = 26; + break; + } + if (32 & g) { + r.back = -1, r.mode = 12; + break; + } + if (64 & g) { + e.msg = "invalid literal/length code", r.mode = 30; + break; + } + r.extra = 15 & g, r.mode = 22; + case 22: + if (r.extra) { + for (z = r.extra; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.length += u & (1 << r.extra) - 1, u >>>= r.extra, l -= r.extra, r.back += r.extra; + } + r.was = r.length, r.mode = 23; + case 23: + for (; g = (C = r.distcode[u & (1 << r.distbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (0 == (240 & g)) { + for (v = _, y = g, w = b; g = (C = r.distcode[w + ((u & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + u >>>= v, l -= v, r.back += v; + } + if (u >>>= _, l -= _, r.back += _, 64 & g) { + e.msg = "invalid distance code", r.mode = 30; + break; + } + r.offset = b, r.extra = 15 & g, r.mode = 24; + case 24: + if (r.extra) { + for (z = r.extra; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.offset += u & (1 << r.extra) - 1, u >>>= r.extra, l -= r.extra, r.back += r.extra; + } + if (r.offset > r.dmax) { + e.msg = "invalid distance too far back", r.mode = 30; + break; + } + r.mode = 25; + case 25: + if (0 === h) break e; + if (d = c - h, r.offset > d) { + if ((d = r.offset - d) > r.whave && r.sane) { + e.msg = "invalid distance too far back", r.mode = 30; + break; + } + p = d > r.wnext ? (d -= r.wnext, r.wsize - d) : r.wnext - d, d > r.length && (d = r.length), m = r.window; + } else m = i, p = a - r.offset, d = r.length; + for (h < d && (d = h), h -= d, r.length -= d; i[a++] = m[p++], --d;); + 0 === r.length && (r.mode = 21); + break; + case 26: + if (0 === h) break e; + i[a++] = r.length, h--, r.mode = 21; + break; + case 27: + if (r.wrap) { + for (; l < 32;) { + if (0 === o) break e; + o--, u |= n[s++] << l, l += 8; + } + if (c -= h, e.total_out += c, r.total += c, c && (e.adler = r.check = r.flags ? B(r.check, i, c, a - c) : O(r.check, i, c, a - c)), c = h, (r.flags ? u : L(u)) !== r.check) { + e.msg = "incorrect data check", r.mode = 30; + break; + } + l = u = 0; + } + r.mode = 28; + case 28: + if (r.wrap && r.flags) { + for (; l < 32;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (u !== (4294967295 & r.total)) { + e.msg = "incorrect length check", r.mode = 30; + break; + } + l = u = 0; + } + r.mode = 29; + case 29: + x = 1; + break e; + case 30: + x = -3; + break e; + case 31: + return -4; + case 32: + default: + return U; + } + return e.next_out = a, e.avail_out = h, e.next_in = s, e.avail_in = o, r.hold = u, r.bits = l, (r.wsize || c !== e.avail_out && r.mode < 30 && (r.mode < 27 || 4 !== t)) && Z(e, e.output, e.next_out, c - e.avail_out) ? (r.mode = 31, -4) : (f -= e.avail_in, c -= e.avail_out, e.total_in += f, e.total_out += c, r.total += c, r.wrap && c && (e.adler = r.check = r.flags ? B(r.check, i, c, e.next_out - c) : O(r.check, i, c, e.next_out - c)), e.data_type = r.bits + (r.last ? 64 : 0) + (12 === r.mode ? 128 : 0) + (20 === r.mode || 15 === r.mode ? 256 : 0), (0 == f && 0 === c || 4 === t) && x === N && (x = -5), x); + }, r.inflateEnd = function (e) { + if (!e || !e.state) return U; + var t = e.state; + return t.window && (t.window = null), e.state = null, N; + }, r.inflateGetHeader = function (e, t) { + var r; + return e && e.state ? 0 == (2 & (r = e.state).wrap) ? U : ((r.head = t).done = !1, N) : U; + }, r.inflateSetDictionary = function (e, t) { + var r, + n = t.length; + return e && e.state ? 0 !== (r = e.state).wrap && 11 !== r.mode ? U : 11 === r.mode && O(1, t, n, 0) !== r.check ? -3 : Z(e, t, n, n) ? (r.mode = 31, -4) : (r.havedict = 1, N) : U; + }, r.inflateInfo = "pako inflate (from Nodeca project)"; + }, { + "../utils/common": 41, + "./adler32": 43, + "./crc32": 45, + "./inffast": 48, + "./inftrees": 50 + }], + 50: [function (e, t, r) { + "use strict"; + + var D = e("../utils/common"), + F = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], + N = [16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78], + U = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0], + P = [16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64]; + t.exports = function (e, t, r, n, i, s, a, o) { + var h, + u, + l, + f, + c, + d, + p, + m, + _, + g = o.bits, + b = 0, + v = 0, + y = 0, + w = 0, + k = 0, + x = 0, + S = 0, + z = 0, + C = 0, + E = 0, + A = null, + I = 0, + O = new D.Buf16(16), + B = new D.Buf16(16), + R = null, + T = 0; + for (b = 0; b <= 15; b++) O[b] = 0; + for (v = 0; v < n; v++) O[t[r + v]]++; + for (k = g, w = 15; 1 <= w && 0 === O[w]; w--); + if (w < k && (k = w), 0 === w) return i[s++] = 20971520, i[s++] = 20971520, o.bits = 1, 0; + for (y = 1; y < w && 0 === O[y]; y++); + for (k < y && (k = y), b = z = 1; b <= 15; b++) if (z <<= 1, (z -= O[b]) < 0) return -1; + if (0 < z && (0 === e || 1 !== w)) return -1; + for (B[1] = 0, b = 1; b < 15; b++) B[b + 1] = B[b] + O[b]; + for (v = 0; v < n; v++) 0 !== t[r + v] && (a[B[t[r + v]]++] = v); + if (d = 0 === e ? (A = R = a, 19) : 1 === e ? (A = F, I -= 257, R = N, T -= 257, 256) : (A = U, R = P, -1), b = y, c = s, S = v = E = 0, l = -1, f = (C = 1 << (x = k)) - 1, 1 === e && 852 < C || 2 === e && 592 < C) return 1; + for (;;) { + for (p = b - S, _ = a[v] < d ? (m = 0, a[v]) : a[v] > d ? (m = R[T + a[v]], A[I + a[v]]) : (m = 96, 0), h = 1 << b - S, y = u = 1 << x; i[c + (E >> S) + (u -= h)] = p << 24 | m << 16 | _ | 0, 0 !== u;); + for (h = 1 << b - 1; E & h;) h >>= 1; + if (0 !== h ? (E &= h - 1, E += h) : E = 0, v++, 0 == --O[b]) { + if (b === w) break; + b = t[r + a[v]]; + } + if (k < b && (E & f) !== l) { + for (0 === S && (S = k), c += y, z = 1 << (x = b - S); x + S < w && !((z -= O[x + S]) <= 0);) x++, z <<= 1; + if (C += 1 << x, 1 === e && 852 < C || 2 === e && 592 < C) return 1; + i[l = E & f] = k << 24 | x << 16 | c - s | 0; + } + } + return 0 !== E && (i[c + E] = b - S << 24 | 64 << 16 | 0), o.bits = k, 0; + }; + }, { + "../utils/common": 41 + }], + 51: [function (e, t, r) { + "use strict"; + + t.exports = { + 2: "need dictionary", + 1: "stream end", + 0: "", + "-1": "file error", + "-2": "stream error", + "-3": "data error", + "-4": "insufficient memory", + "-5": "buffer error", + "-6": "incompatible version" + }; + }, {}], + 52: [function (e, t, r) { + "use strict"; + + var i = e("../utils/common"), + o = 0, + h = 1; + function n(e) { + for (var t = e.length; 0 <= --t;) e[t] = 0; + } + var s = 0, + a = 29, + u = 256, + l = u + 1 + a, + f = 30, + c = 19, + _ = 2 * l + 1, + g = 15, + d = 16, + p = 7, + m = 256, + b = 16, + v = 17, + y = 18, + w = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], + k = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], + x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], + S = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], + z = new Array(2 * (l + 2)); + n(z); + var C = new Array(2 * f); + n(C); + var E = new Array(512); + n(E); + var A = new Array(256); + n(A); + var I = new Array(a); + n(I); + var O, + B, + R, + T = new Array(f); + function D(e, t, r, n, i) { + this.static_tree = e, this.extra_bits = t, this.extra_base = r, this.elems = n, this.max_length = i, this.has_stree = e && e.length; + } + function F(e, t) { + this.dyn_tree = e, this.max_code = 0, this.stat_desc = t; + } + function N(e) { + return e < 256 ? E[e] : E[256 + (e >>> 7)]; + } + function U(e, t) { + e.pending_buf[e.pending++] = 255 & t, e.pending_buf[e.pending++] = t >>> 8 & 255; + } + function P(e, t, r) { + e.bi_valid > d - r ? (e.bi_buf |= t << e.bi_valid & 65535, U(e, e.bi_buf), e.bi_buf = t >> d - e.bi_valid, e.bi_valid += r - d) : (e.bi_buf |= t << e.bi_valid & 65535, e.bi_valid += r); + } + function L(e, t, r) { + P(e, r[2 * t], r[2 * t + 1]); + } + function j(e, t) { + for (var r = 0; r |= 1 & e, e >>>= 1, r <<= 1, 0 < --t;); + return r >>> 1; + } + function Z(e, t, r) { + var n, + i, + s = new Array(g + 1), + a = 0; + for (n = 1; n <= g; n++) s[n] = a = a + r[n - 1] << 1; + for (i = 0; i <= t; i++) { + var o = e[2 * i + 1]; + 0 !== o && (e[2 * i] = j(s[o]++, o)); + } + } + function W(e) { + var t; + for (t = 0; t < l; t++) e.dyn_ltree[2 * t] = 0; + for (t = 0; t < f; t++) e.dyn_dtree[2 * t] = 0; + for (t = 0; t < c; t++) e.bl_tree[2 * t] = 0; + e.dyn_ltree[2 * m] = 1, e.opt_len = e.static_len = 0, e.last_lit = e.matches = 0; + } + function M(e) { + 8 < e.bi_valid ? U(e, e.bi_buf) : 0 < e.bi_valid && (e.pending_buf[e.pending++] = e.bi_buf), e.bi_buf = 0, e.bi_valid = 0; + } + function H(e, t, r, n) { + var i = 2 * t, + s = 2 * r; + return e[i] < e[s] || e[i] === e[s] && n[t] <= n[r]; + } + function G(e, t, r) { + for (var n = e.heap[r], i = r << 1; i <= e.heap_len && (i < e.heap_len && H(t, e.heap[i + 1], e.heap[i], e.depth) && i++, !H(t, n, e.heap[i], e.depth));) e.heap[r] = e.heap[i], r = i, i <<= 1; + e.heap[r] = n; + } + function K(e, t, r) { + var n, + i, + s, + a, + o = 0; + if (0 !== e.last_lit) for (; n = e.pending_buf[e.d_buf + 2 * o] << 8 | e.pending_buf[e.d_buf + 2 * o + 1], i = e.pending_buf[e.l_buf + o], o++, 0 === n ? L(e, i, t) : (L(e, (s = A[i]) + u + 1, t), 0 !== (a = w[s]) && P(e, i -= I[s], a), L(e, s = N(--n), r), 0 !== (a = k[s]) && P(e, n -= T[s], a)), o < e.last_lit;); + L(e, m, t); + } + function Y(e, t) { + var r, + n, + i, + s = t.dyn_tree, + a = t.stat_desc.static_tree, + o = t.stat_desc.has_stree, + h = t.stat_desc.elems, + u = -1; + for (e.heap_len = 0, e.heap_max = _, r = 0; r < h; r++) 0 !== s[2 * r] ? (e.heap[++e.heap_len] = u = r, e.depth[r] = 0) : s[2 * r + 1] = 0; + for (; e.heap_len < 2;) s[2 * (i = e.heap[++e.heap_len] = u < 2 ? ++u : 0)] = 1, e.depth[i] = 0, e.opt_len--, o && (e.static_len -= a[2 * i + 1]); + for (t.max_code = u, r = e.heap_len >> 1; 1 <= r; r--) G(e, s, r); + for (i = h; r = e.heap[1], e.heap[1] = e.heap[e.heap_len--], G(e, s, 1), n = e.heap[1], e.heap[--e.heap_max] = r, e.heap[--e.heap_max] = n, s[2 * i] = s[2 * r] + s[2 * n], e.depth[i] = (e.depth[r] >= e.depth[n] ? e.depth[r] : e.depth[n]) + 1, s[2 * r + 1] = s[2 * n + 1] = i, e.heap[1] = i++, G(e, s, 1), 2 <= e.heap_len;); + e.heap[--e.heap_max] = e.heap[1], function (e, t) { + var r, + n, + i, + s, + a, + o, + h = t.dyn_tree, + u = t.max_code, + l = t.stat_desc.static_tree, + f = t.stat_desc.has_stree, + c = t.stat_desc.extra_bits, + d = t.stat_desc.extra_base, + p = t.stat_desc.max_length, + m = 0; + for (s = 0; s <= g; s++) e.bl_count[s] = 0; + for (h[2 * e.heap[e.heap_max] + 1] = 0, r = e.heap_max + 1; r < _; r++) p < (s = h[2 * h[2 * (n = e.heap[r]) + 1] + 1] + 1) && (s = p, m++), h[2 * n + 1] = s, u < n || (e.bl_count[s]++, a = 0, d <= n && (a = c[n - d]), o = h[2 * n], e.opt_len += o * (s + a), f && (e.static_len += o * (l[2 * n + 1] + a))); + if (0 !== m) { + do { + for (s = p - 1; 0 === e.bl_count[s];) s--; + e.bl_count[s]--, e.bl_count[s + 1] += 2, e.bl_count[p]--, m -= 2; + } while (0 < m); + for (s = p; 0 !== s; s--) for (n = e.bl_count[s]; 0 !== n;) u < (i = e.heap[--r]) || (h[2 * i + 1] !== s && (e.opt_len += (s - h[2 * i + 1]) * h[2 * i], h[2 * i + 1] = s), n--); + } + }(e, t), Z(s, u, e.bl_count); + } + function X(e, t, r) { + var n, + i, + s = -1, + a = t[1], + o = 0, + h = 7, + u = 4; + for (0 === a && (h = 138, u = 3), t[2 * (r + 1) + 1] = 65535, n = 0; n <= r; n++) i = a, a = t[2 * (n + 1) + 1], ++o < h && i === a || (o < u ? e.bl_tree[2 * i] += o : 0 !== i ? (i !== s && e.bl_tree[2 * i]++, e.bl_tree[2 * b]++) : o <= 10 ? e.bl_tree[2 * v]++ : e.bl_tree[2 * y]++, s = i, u = (o = 0) === a ? (h = 138, 3) : i === a ? (h = 6, 3) : (h = 7, 4)); + } + function V(e, t, r) { + var n, + i, + s = -1, + a = t[1], + o = 0, + h = 7, + u = 4; + for (0 === a && (h = 138, u = 3), n = 0; n <= r; n++) if (i = a, a = t[2 * (n + 1) + 1], !(++o < h && i === a)) { + if (o < u) for (; L(e, i, e.bl_tree), 0 != --o;);else 0 !== i ? (i !== s && (L(e, i, e.bl_tree), o--), L(e, b, e.bl_tree), P(e, o - 3, 2)) : o <= 10 ? (L(e, v, e.bl_tree), P(e, o - 3, 3)) : (L(e, y, e.bl_tree), P(e, o - 11, 7)); + s = i, u = (o = 0) === a ? (h = 138, 3) : i === a ? (h = 6, 3) : (h = 7, 4); + } + } + n(T); + var q = !1; + function J(e, t, r, n) { + P(e, (s << 1) + (n ? 1 : 0), 3), function (e, t, r, n) { + M(e), n && (U(e, r), U(e, ~r)), i.arraySet(e.pending_buf, e.window, t, r, e.pending), e.pending += r; + }(e, t, r, !0); + } + r._tr_init = function (e) { + q || (function () { + var e, + t, + r, + n, + i, + s = new Array(g + 1); + for (n = r = 0; n < a - 1; n++) for (I[n] = r, e = 0; e < 1 << w[n]; e++) A[r++] = n; + for (A[r - 1] = n, n = i = 0; n < 16; n++) for (T[n] = i, e = 0; e < 1 << k[n]; e++) E[i++] = n; + for (i >>= 7; n < f; n++) for (T[n] = i << 7, e = 0; e < 1 << k[n] - 7; e++) E[256 + i++] = n; + for (t = 0; t <= g; t++) s[t] = 0; + for (e = 0; e <= 143;) z[2 * e + 1] = 8, e++, s[8]++; + for (; e <= 255;) z[2 * e + 1] = 9, e++, s[9]++; + for (; e <= 279;) z[2 * e + 1] = 7, e++, s[7]++; + for (; e <= 287;) z[2 * e + 1] = 8, e++, s[8]++; + for (Z(z, l + 1, s), e = 0; e < f; e++) C[2 * e + 1] = 5, C[2 * e] = j(e, 5); + O = new D(z, w, u + 1, l, g), B = new D(C, k, 0, f, g), R = new D(new Array(0), x, 0, c, p); + }(), q = !0), e.l_desc = new F(e.dyn_ltree, O), e.d_desc = new F(e.dyn_dtree, B), e.bl_desc = new F(e.bl_tree, R), e.bi_buf = 0, e.bi_valid = 0, W(e); + }, r._tr_stored_block = J, r._tr_flush_block = function (e, t, r, n) { + var i, + s, + a = 0; + 0 < e.level ? (2 === e.strm.data_type && (e.strm.data_type = function (e) { + var t, + r = 4093624447; + for (t = 0; t <= 31; t++, r >>>= 1) if (1 & r && 0 !== e.dyn_ltree[2 * t]) return o; + if (0 !== e.dyn_ltree[18] || 0 !== e.dyn_ltree[20] || 0 !== e.dyn_ltree[26]) return h; + for (t = 32; t < u; t++) if (0 !== e.dyn_ltree[2 * t]) return h; + return o; + }(e)), Y(e, e.l_desc), Y(e, e.d_desc), a = function (e) { + var t; + for (X(e, e.dyn_ltree, e.l_desc.max_code), X(e, e.dyn_dtree, e.d_desc.max_code), Y(e, e.bl_desc), t = c - 1; 3 <= t && 0 === e.bl_tree[2 * S[t] + 1]; t--); + return e.opt_len += 3 * (t + 1) + 5 + 5 + 4, t; + }(e), i = e.opt_len + 3 + 7 >>> 3, (s = e.static_len + 3 + 7 >>> 3) <= i && (i = s)) : i = s = r + 5, r + 4 <= i && -1 !== t ? J(e, t, r, n) : 4 === e.strategy || s === i ? (P(e, 2 + (n ? 1 : 0), 3), K(e, z, C)) : (P(e, 4 + (n ? 1 : 0), 3), function (e, t, r, n) { + var i; + for (P(e, t - 257, 5), P(e, r - 1, 5), P(e, n - 4, 4), i = 0; i < n; i++) P(e, e.bl_tree[2 * S[i] + 1], 3); + V(e, e.dyn_ltree, t - 1), V(e, e.dyn_dtree, r - 1); + }(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, a + 1), K(e, e.dyn_ltree, e.dyn_dtree)), W(e), n && M(e); + }, r._tr_tally = function (e, t, r) { + return e.pending_buf[e.d_buf + 2 * e.last_lit] = t >>> 8 & 255, e.pending_buf[e.d_buf + 2 * e.last_lit + 1] = 255 & t, e.pending_buf[e.l_buf + e.last_lit] = 255 & r, e.last_lit++, 0 === t ? e.dyn_ltree[2 * r]++ : (e.matches++, t--, e.dyn_ltree[2 * (A[r] + u + 1)]++, e.dyn_dtree[2 * N(t)]++), e.last_lit === e.lit_bufsize - 1; + }, r._tr_align = function (e) { + P(e, 2, 3), L(e, m, z), function (e) { + 16 === e.bi_valid ? (U(e, e.bi_buf), e.bi_buf = 0, e.bi_valid = 0) : 8 <= e.bi_valid && (e.pending_buf[e.pending++] = 255 & e.bi_buf, e.bi_buf >>= 8, e.bi_valid -= 8); + }(e); + }; + }, { + "../utils/common": 41 + }], + 53: [function (e, t, r) { + "use strict"; + + t.exports = function () { + this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0; + }; + }, {}], + 54: [function (e, t, r) { + (function (e) { + !function (r, n) { + "use strict"; + + if (!r.setImmediate) { + var i, + s, + t, + a, + o = 1, + h = {}, + u = !1, + l = r.document, + e = Object.getPrototypeOf && Object.getPrototypeOf(r); + e = e && e.setTimeout ? e : r, i = "[object process]" === {}.toString.call(r.process) ? function (e) { + process.nextTick(function () { + c(e); + }); + } : function () { + if (r.postMessage && !r.importScripts) { + var e = !0, + t = r.onmessage; + return r.onmessage = function () { + e = !1; + }, r.postMessage("", "*"), r.onmessage = t, e; + } + }() ? (a = "setImmediate$" + Math.random() + "$", r.addEventListener ? r.addEventListener("message", d, !1) : r.attachEvent("onmessage", d), function (e) { + r.postMessage(a + e, "*"); + }) : r.MessageChannel ? ((t = new MessageChannel()).port1.onmessage = function (e) { + c(e.data); + }, function (e) { + t.port2.postMessage(e); + }) : l && "onreadystatechange" in l.createElement("script") ? (s = l.documentElement, function (e) { + var t = l.createElement("script"); + t.onreadystatechange = function () { + c(e), t.onreadystatechange = null, s.removeChild(t), t = null; + }, s.appendChild(t); + }) : function (e) { + setTimeout(c, 0, e); + }, e.setImmediate = function (e) { + "function" != typeof e && (e = new Function("" + e)); + for (var t = new Array(arguments.length - 1), r = 0; r < t.length; r++) t[r] = arguments[r + 1]; + var n = { + callback: e, + args: t + }; + return h[o] = n, i(o), o++; + }, e.clearImmediate = f; + } + function f(e) { + delete h[e]; + } + function c(e) { + if (u) setTimeout(c, 0, e);else { + var t = h[e]; + if (t) { + u = !0; + try { + !function (e) { + var t = e.callback, + r = e.args; + switch (r.length) { + case 0: + t(); + break; + case 1: + t(r[0]); + break; + case 2: + t(r[0], r[1]); + break; + case 3: + t(r[0], r[1], r[2]); + break; + default: + t.apply(n, r); + } + }(t); + } finally { + f(e), u = !1; + } + } + } + } + function d(e) { + e.source === r && "string" == typeof e.data && 0 === e.data.indexOf(a) && c(+e.data.slice(a.length)); + } + }("undefined" == typeof self ? void 0 === e ? this : e : self); + }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); + }, {}] + }, {}, [10])(10); +}); + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],require("timers").setImmediate) + +},{"_process":306,"buffer":220,"timers":361}],281:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var Symbol = root.Symbol; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = value + ''; + return result == '0' && 1 / value == -INFINITY ? '-0' : result; +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag; +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ +function escapeRegExp(string) { + string = toString(string); + return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\$&') : string; +} +module.exports = escapeRegExp; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],282:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = function () { + try { + return freeProcess && freeProcess.binding('util'); + } catch (e) {} +}(); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array ? array.length : 0; + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; +} + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array ? array.length : 0; + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function (object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function (value) { + return func(value); + }; +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + map.forEach(function (value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function (arg) { + return func(transform(arg)); + }; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + set.forEach(function (value) { + result[++index] = value; + }); + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = function () { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? 'Symbol(src)_1.' + uid : ''; +}(); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); + +/** Built-in value references. */ +var Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'), + Map = getNative(root, 'Map'), + Promise = getNative(root, 'Promise'), + Set = getNative(root, 'Set'), + WeakMap = getNative(root, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash(), + 'map': new (Map || ListCache)(), + 'string': new Hash() + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + this.__data__ = new MapCache(); + while (++index < length) { + this.add(values[index]); + } +} + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + this.__data__ = new ListCache(entries); +} + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache(); +} + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + return this.__data__['delete'](key); +} + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var cache = this.__data__; + if (cache instanceof ListCache) { + var pairs = cache.__data__; + if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { + pairs.push([key, value]); + return this; + } + cache = this.__data__ = new MapCache(pairs); + } + cache.set(key, value); + return this; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + // Safari 9 makes `arguments.length` enumerable in strict mode. + var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : []; + var length = result.length, + skipIndexes = !!length; + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || isIndex(key, length)))) { + result.push(key); + } + } + return result; +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function (value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; +} + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + var index = 0, + length = path.length; + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return index && index == length ? object : undefined; +} + +/** + * The base implementation of `getTag`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + return objectToString.call(value); +} + +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || !isObject(value) && !isObjectLike(other)) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); +} + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + if (!objIsArr) { + objTag = getTag(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = getTag(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; + if (isSameTag && !objIsObj) { + stack || (stack = new Stack()); + return objIsArr || isTypedArray(object) ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + stack || (stack = new Stack()); + return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack()); + return equalObjects(object, other, equalFunc, customizer, bitmask, stack); +} + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack(); + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) : result)) { + return false; + } + } + } + return true; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; +} + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); + } + return property(value); +} + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function (object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function (object) { + var objValue = get(object, path); + return objValue === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); + }; +} + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function (object) { + return baseGet(object, path); + }; +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = value + ''; + return result == '0' && 1 / value == -INFINITY ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ +function createAggregator(setter, initializer) { + return function (collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + return func(collection, setter, baseIteratee(iteratee, 2), accumulator); + }; +} + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function (collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + while (fromRight ? index-- : ++index < length) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function (object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = bitmask & UNORDERED_COMPARE_FLAG ? new SetCache() : undefined; + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + if (customizer) { + var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function (othValue, othIndex) { + if (!seen.has(othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + return seen.add(othIndex); + } + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + case dataViewTag: + if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { + return false; + } + object = object.buffer; + other = other.buffer; + case arrayBufferTag: + if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + case errorTag: + return object.name == other.name && object.message == other.message; + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == other + ''; + case mapTag: + var convert = mapToArray; + case setTag: + var isPartial = bitmask & PARTIAL_COMPARE_FLAG; + convert || (convert = setToArray); + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= UNORDERED_COMPARE_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); + stack['delete'](object); + return result; + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + if (customizer) { + var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack) : compared)) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; +} + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys(object), + length = result.length; + while (length--) { + var key = result[length], + value = object[key]; + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11, +// for data views in Edge < 14, and promises in Node.js. +if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) { + getTag = function (value) { + var result = objectToString.call(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : undefined; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: + return dataViewTag; + case mapCtorString: + return mapTag; + case promiseCtorString: + return promiseTag; + case setCtorString: + return setTag; + case weakMapCtorString: + return weakMapTag; + } + } + return result; + }; +} + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = isKey(path, object) ? [path] : castPath(path); + var result, + index = -1, + length = path.length; + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result) { + return result; + } + var length = object ? object.length : 0; + return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null; +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && maskSrcKey in func; +} + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = typeof Ctor == 'function' && Ctor.prototype || objectProto; + return value === proto; +} + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function (object) { + if (object == null) { + return false; + } + return object[key] === srcValue && (srcValue !== undefined || key in Object(object)); + }; +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function (string) { + string = toString(string); + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function (match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : number || match); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = value + ''; + return result == '0' && 1 / value == -INFINITY ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return func + ''; + } catch (e) {} + } + return ''; +} + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] + * The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function (result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } +}); + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || resolver && typeof resolver != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function () { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache)(); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || value !== value && other !== other; +} + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag; +} + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +} +module.exports = groupBy; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],283:[function(require,module,exports){ +"use strict"; + +/** + * lodash 3.0.3 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { + return value === true || value === false || isObjectLike(value) && objectToString.call(value) == boolTag; +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} +module.exports = isBoolean; + +},{}],284:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * Lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]'; +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = function () { + try { + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}(); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function (value) { + return func(value); + }; +} + +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + map.forEach(function (value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function (arg) { + return func(transform(arg)); + }; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + set.forEach(function (value) { + result[++index] = value; + }); + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = function () { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? 'Symbol(src)_1.' + uid : ''; +}(); + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, + Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeKeys = overArg(Object.keys, Object); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'), + Map = getNative(root, 'Map'), + Promise = getNative(root, 'Promise'), + Set = getNative(root, 'Set'), + WeakMap = getNative(root, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash(), + 'map': new (Map || ListCache)(), + 'string': new Hash() + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + this.__data__ = new MapCache(); + while (++index < length) { + this.add(values[index]); + } +} + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache(); + this.size = 0; +} + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + this.size = data.size; + return result; +} + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + isBuff && (key == 'offset' || key == 'parent') || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || + // Skip index properties. + isIndex(key, length)))) { + result.push(key); + } + } + return result; +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); +} + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack()); + return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + stack || (stack = new Stack()); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack()); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined; + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + if (customizer) { + var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function (othValue, othIndex) { + if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { + return false; + } + object = object.buffer; + other = other.buffer; + case arrayBufferTag: + if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + case errorTag: + return object.name == other.name && object.message == other.message; + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == other + ''; + case mapTag: + var convert = mapToArray; + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + if (customizer) { + var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function (object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function (symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) { + getTag = function (value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: + return dataViewTag; + case mapCtorString: + return mapTag; + case promiseCtorString: + return promiseTag; + case setCtorString: + return setTag; + case weakMapCtorString: + return weakMapTag; + } + } + return result; + }; +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null; +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && maskSrcKey in func; +} + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = typeof Ctor == 'function' && Ctor.prototype || objectProto; + return value === proto; +} + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return func + ''; + } catch (e) {} + } + return ''; +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || value !== value && other !== other; +} + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function () { + return arguments; +}()) ? baseIsArguments : function (value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); +}; + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return baseIsEqual(value, other); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} +module.exports = isEqual; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],285:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * Lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + nullTag = '[object Null]', + proxyTag = '[object Proxy]', + undefinedTag = '[object Undefined]'; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var Symbol = root.Symbol, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); +} + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} +module.exports = isFunction; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],286:[function(require,module,exports){ +"use strict"; + +/** + * lodash 4.0.0 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ +function isNil(value) { + return value == null; +} +module.exports = isNil; + +},{}],287:[function(require,module,exports){ +"use strict"; + +/** + * lodash 3.0.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} +module.exports = isUndefined; + +},{}],288:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array ? array.length : 0; + return !!length && baseIndexOf(array, value, 0) > -1; +} + +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array ? array.length : 0; + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + while (fromRight ? index-- : ++index < length) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return baseFindIndex(array, baseIsNaN, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/** + * Checks if a cache value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + set.forEach(function (value) { + result[++index] = value; + }); + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = function () { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? 'Symbol(src)_1.' + uid : ''; +}(); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + Set = getNative(root, 'Set'), + nativeCreate = getNative(Object, 'create'); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash(), + 'map': new (Map || ListCache)(), + 'string': new Hash() + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + this.__data__ = new MapCache(); + while (++index < length) { + this.add(values[index]); + } +} + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache(); + } else { + seen = iteratee ? [] : result; + } + outer: while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + value = comparator || value !== 0 ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(Set && 1 / setToArray(new Set([, -0]))[1] == INFINITY) ? noop : function (values) { + return new Set(values); +}; + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null; +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && maskSrcKey in func; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return func + ''; + } catch (e) {} + } + return ''; +} + +/** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each + * element is kept. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ +function uniq(array) { + return array && array.length ? baseUniq(array) : []; +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || value !== value && other !== other; +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} +module.exports = uniq; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],289:[function(require,module,exports){ +'use strict'; + +var inherits = require('inherits'); +var HashBase = require('hash-base'); +var Buffer = require('safe-buffer').Buffer; +var ARRAY16 = new Array(16); +function MD5() { + HashBase.call(this, 64); + + // state + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; +} +inherits(MD5, HashBase); +MD5.prototype._update = function () { + var M = ARRAY16; + for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4); + var a = this._a; + var b = this._b; + var c = this._c; + var d = this._d; + a = fnF(a, b, c, d, M[0], 0xd76aa478, 7); + d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12); + c = fnF(c, d, a, b, M[2], 0x242070db, 17); + b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22); + a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7); + d = fnF(d, a, b, c, M[5], 0x4787c62a, 12); + c = fnF(c, d, a, b, M[6], 0xa8304613, 17); + b = fnF(b, c, d, a, M[7], 0xfd469501, 22); + a = fnF(a, b, c, d, M[8], 0x698098d8, 7); + d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12); + c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17); + b = fnF(b, c, d, a, M[11], 0x895cd7be, 22); + a = fnF(a, b, c, d, M[12], 0x6b901122, 7); + d = fnF(d, a, b, c, M[13], 0xfd987193, 12); + c = fnF(c, d, a, b, M[14], 0xa679438e, 17); + b = fnF(b, c, d, a, M[15], 0x49b40821, 22); + a = fnG(a, b, c, d, M[1], 0xf61e2562, 5); + d = fnG(d, a, b, c, M[6], 0xc040b340, 9); + c = fnG(c, d, a, b, M[11], 0x265e5a51, 14); + b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20); + a = fnG(a, b, c, d, M[5], 0xd62f105d, 5); + d = fnG(d, a, b, c, M[10], 0x02441453, 9); + c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14); + b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20); + a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5); + d = fnG(d, a, b, c, M[14], 0xc33707d6, 9); + c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14); + b = fnG(b, c, d, a, M[8], 0x455a14ed, 20); + a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5); + d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9); + c = fnG(c, d, a, b, M[7], 0x676f02d9, 14); + b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20); + a = fnH(a, b, c, d, M[5], 0xfffa3942, 4); + d = fnH(d, a, b, c, M[8], 0x8771f681, 11); + c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16); + b = fnH(b, c, d, a, M[14], 0xfde5380c, 23); + a = fnH(a, b, c, d, M[1], 0xa4beea44, 4); + d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11); + c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16); + b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23); + a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4); + d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11); + c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16); + b = fnH(b, c, d, a, M[6], 0x04881d05, 23); + a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4); + d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11); + c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16); + b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23); + a = fnI(a, b, c, d, M[0], 0xf4292244, 6); + d = fnI(d, a, b, c, M[7], 0x432aff97, 10); + c = fnI(c, d, a, b, M[14], 0xab9423a7, 15); + b = fnI(b, c, d, a, M[5], 0xfc93a039, 21); + a = fnI(a, b, c, d, M[12], 0x655b59c3, 6); + d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10); + c = fnI(c, d, a, b, M[10], 0xffeff47d, 15); + b = fnI(b, c, d, a, M[1], 0x85845dd1, 21); + a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6); + d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10); + c = fnI(c, d, a, b, M[6], 0xa3014314, 15); + b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21); + a = fnI(a, b, c, d, M[4], 0xf7537e82, 6); + d = fnI(d, a, b, c, M[11], 0xbd3af235, 10); + c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15); + b = fnI(b, c, d, a, M[9], 0xeb86d391, 21); + this._a = this._a + a | 0; + this._b = this._b + b | 0; + this._c = this._c + c | 0; + this._d = this._d + d | 0; +}; +MD5.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80; + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64); + this._update(); + this._blockOffset = 0; + } + this._block.fill(0, this._blockOffset, 56); + this._block.writeUInt32LE(this._length[0], 56); + this._block.writeUInt32LE(this._length[1], 60); + this._update(); + + // produce result + var buffer = Buffer.allocUnsafe(16); + buffer.writeInt32LE(this._a, 0); + buffer.writeInt32LE(this._b, 4); + buffer.writeInt32LE(this._c, 8); + buffer.writeInt32LE(this._d, 12); + return buffer; +}; +function rotl(x, n) { + return x << n | x >>> 32 - n; +} +function fnF(a, b, c, d, m, k, s) { + return rotl(a + (b & c | ~b & d) + m + k | 0, s) + b | 0; +} +function fnG(a, b, c, d, m, k, s) { + return rotl(a + (b & d | c & ~d) + m + k | 0, s) + b | 0; +} +function fnH(a, b, c, d, m, k, s) { + return rotl(a + (b ^ c ^ d) + m + k | 0, s) + b | 0; +} +function fnI(a, b, c, d, m, k, s) { + return rotl(a + (c ^ (b | ~d)) + m + k | 0, s) + b | 0; +} +module.exports = MD5; + +},{"hash-base":264,"inherits":279,"safe-buffer":332}],290:[function(require,module,exports){ +"use strict"; + +var bn = require('bn.js'); +var brorand = require('brorand'); +function MillerRabin(rand) { + this.rand = rand || new brorand.Rand(); +} +module.exports = MillerRabin; +MillerRabin.create = function create(rand) { + return new MillerRabin(rand); +}; +MillerRabin.prototype._randbelow = function _randbelow(n) { + var len = n.bitLength(); + var min_bytes = Math.ceil(len / 8); + + // Generage random bytes until a number less than n is found. + // This ensures that 0..n-1 have an equal probability of being selected. + do var a = new bn(this.rand.generate(min_bytes)); while (a.cmp(n) >= 0); + return a; +}; +MillerRabin.prototype._randrange = function _randrange(start, stop) { + // Generate a random number greater than or equal to start and less than stop. + var size = stop.sub(start); + return start.add(this._randbelow(size)); +}; +MillerRabin.prototype.test = function test(n, k, cb) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + if (!k) k = Math.max(1, len / 48 | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + var rn1 = n1.toRed(red); + var prime = true; + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + if (cb) cb(a); + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue; + for (var i = 1; i < s; i++) { + x = x.redSqr(); + if (x.cmp(rone) === 0) return false; + if (x.cmp(rn1) === 0) break; + } + if (i === s) return false; + } + return prime; +}; +MillerRabin.prototype.getDivisor = function getDivisor(n, k) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + if (!k) k = Math.max(1, len / 48 | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + var rn1 = n1.toRed(red); + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + var g = n.gcd(a); + if (g.cmpn(1) !== 0) return g; + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue; + for (var i = 1; i < s; i++) { + x = x.redSqr(); + if (x.cmp(rone) === 0) return x.fromRed().subn(1).gcd(n); + if (x.cmp(rn1) === 0) break; + } + if (i === s) { + x = x.redSqr(); + return x.fromRed().subn(1).gcd(n); + } + } + return false; +}; + +},{"bn.js":291,"brorand":187}],291:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],292:[function(require,module,exports){ +"use strict"; + +module.exports = assert; +function assert(val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); +} +assert.equal = function assertEqual(l, r, msg) { + if (l != r) throw new Error(msg || 'Assertion failed: ' + l + ' != ' + r); +}; + +},{}],293:[function(require,module,exports){ +'use strict'; + +var utils = exports; +function toArray(msg, enc) { + if (Array.isArray(msg)) return msg.slice(); + if (!msg) return []; + var res = []; + if (typeof msg !== 'string') { + for (var i = 0; i < msg.length; i++) res[i] = msg[i] | 0; + return res; + } + if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) msg = '0' + msg; + for (var i = 0; i < msg.length; i += 2) res.push(parseInt(msg[i] + msg[i + 1], 16)); + } else { + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + var hi = c >> 8; + var lo = c & 0xff; + if (hi) res.push(hi, lo);else res.push(lo); + } + } + return res; +} +utils.toArray = toArray; +function zero2(word) { + if (word.length === 1) return '0' + word;else return word; +} +utils.zero2 = zero2; +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) res += zero2(msg[i].toString(16)); + return res; +} +utils.toHex = toHex; +utils.encode = function encode(arr, enc) { + if (enc === 'hex') return toHex(arr);else return arr; +}; + +},{}],294:[function(require,module,exports){ +module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", +"2.16.840.1.101.3.4.1.2": "aes-128-cbc", +"2.16.840.1.101.3.4.1.3": "aes-128-ofb", +"2.16.840.1.101.3.4.1.4": "aes-128-cfb", +"2.16.840.1.101.3.4.1.21": "aes-192-ecb", +"2.16.840.1.101.3.4.1.22": "aes-192-cbc", +"2.16.840.1.101.3.4.1.23": "aes-192-ofb", +"2.16.840.1.101.3.4.1.24": "aes-192-cfb", +"2.16.840.1.101.3.4.1.41": "aes-256-ecb", +"2.16.840.1.101.3.4.1.42": "aes-256-cbc", +"2.16.840.1.101.3.4.1.43": "aes-256-ofb", +"2.16.840.1.101.3.4.1.44": "aes-256-cfb" +} +},{}],295:[function(require,module,exports){ +// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js +// Fedor, you are amazing. +'use strict'; + +var asn1 = require('asn1.js'); +exports.certificate = require('./certificate'); +var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { + this.seq().obj(this.key('version').int(), this.key('modulus').int(), this.key('publicExponent').int(), this.key('privateExponent').int(), this.key('prime1').int(), this.key('prime2').int(), this.key('exponent1').int(), this.key('exponent2').int(), this.key('coefficient').int()); +}); +exports.RSAPrivateKey = RSAPrivateKey; +var RSAPublicKey = asn1.define('RSAPublicKey', function () { + this.seq().obj(this.key('modulus').int(), this.key('publicExponent').int()); +}); +exports.RSAPublicKey = RSAPublicKey; +var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { + this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr()); +}); +exports.PublicKey = PublicKey; +var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { + this.seq().obj(this.key('algorithm').objid(), this.key('none').null_().optional(), this.key('curve').objid().optional(), this.key('params').seq().obj(this.key('p').int(), this.key('q').int(), this.key('g').int()).optional()); +}); +var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { + this.seq().obj(this.key('version').int(), this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPrivateKey').octstr()); +}); +exports.PrivateKey = PrivateKeyInfo; +var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { + this.seq().obj(this.key('algorithm').seq().obj(this.key('id').objid(), this.key('decrypt').seq().obj(this.key('kde').seq().obj(this.key('id').objid(), this.key('kdeparams').seq().obj(this.key('salt').octstr(), this.key('iters').int())), this.key('cipher').seq().obj(this.key('algo').objid(), this.key('iv').octstr()))), this.key('subjectPrivateKey').octstr()); +}); +exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo; +var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { + this.seq().obj(this.key('version').int(), this.key('p').int(), this.key('q').int(), this.key('g').int(), this.key('pub_key').int(), this.key('priv_key').int()); +}); +exports.DSAPrivateKey = DSAPrivateKey; +exports.DSAparam = asn1.define('DSAparam', function () { + this.int(); +}); +var ECPrivateKey = asn1.define('ECPrivateKey', function () { + this.seq().obj(this.key('version').int(), this.key('privateKey').octstr(), this.key('parameters').optional().explicit(0).use(ECParameters), this.key('publicKey').optional().explicit(1).bitstr()); +}); +exports.ECPrivateKey = ECPrivateKey; +var ECParameters = asn1.define('ECParameters', function () { + this.choice({ + namedCurve: this.objid() + }); +}); +exports.signature = asn1.define('signature', function () { + this.seq().obj(this.key('r').int(), this.key('s').int()); +}); + +},{"./certificate":296,"asn1.js":170}],296:[function(require,module,exports){ +// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js +// thanks to @Rantanen + +'use strict'; + +var asn = require('asn1.js'); +var Time = asn.define('Time', function () { + this.choice({ + utcTime: this.utctime(), + generalTime: this.gentime() + }); +}); +var AttributeTypeValue = asn.define('AttributeTypeValue', function () { + this.seq().obj(this.key('type').objid(), this.key('value').any()); +}); +var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { + this.seq().obj(this.key('algorithm').objid(), this.key('parameters').optional(), this.key('curve').objid().optional()); +}); +var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { + this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr()); +}); +var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { + this.setof(AttributeTypeValue); +}); +var RDNSequence = asn.define('RDNSequence', function () { + this.seqof(RelativeDistinguishedName); +}); +var Name = asn.define('Name', function () { + this.choice({ + rdnSequence: this.use(RDNSequence) + }); +}); +var Validity = asn.define('Validity', function () { + this.seq().obj(this.key('notBefore').use(Time), this.key('notAfter').use(Time)); +}); +var Extension = asn.define('Extension', function () { + this.seq().obj(this.key('extnID').objid(), this.key('critical').bool().def(false), this.key('extnValue').octstr()); +}); +var TBSCertificate = asn.define('TBSCertificate', function () { + this.seq().obj(this.key('version').explicit(0).int().optional(), this.key('serialNumber').int(), this.key('signature').use(AlgorithmIdentifier), this.key('issuer').use(Name), this.key('validity').use(Validity), this.key('subject').use(Name), this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), this.key('issuerUniqueID').implicit(1).bitstr().optional(), this.key('subjectUniqueID').implicit(2).bitstr().optional(), this.key('extensions').explicit(3).seqof(Extension).optional()); +}); +var X509Certificate = asn.define('X509Certificate', function () { + this.seq().obj(this.key('tbsCertificate').use(TBSCertificate), this.key('signatureAlgorithm').use(AlgorithmIdentifier), this.key('signatureValue').bitstr()); +}); +module.exports = X509Certificate; + +},{"asn1.js":170}],297:[function(require,module,exports){ +"use strict"; + +// adapted from https://github.com/apatil/pemstrip +var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m; +var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m; +var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m; +var evp = require('evp_bytestokey'); +var ciphers = require('browserify-aes'); +var Buffer = require('safe-buffer').Buffer; +module.exports = function (okey, password) { + var key = okey.toString(); + var match = key.match(findProc); + var decrypted; + if (!match) { + var match2 = key.match(fullRegex); + decrypted = Buffer.from(match2[2].replace(/[\r\n]/g, ''), 'base64'); + } else { + var suite = 'aes' + match[1]; + var iv = Buffer.from(match[2], 'hex'); + var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64'); + var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key; + var out = []; + var cipher = ciphers.createDecipheriv(suite, cipherKey, iv); + out.push(cipher.update(cipherText)); + out.push(cipher.final()); + decrypted = Buffer.concat(out); + } + var tag = key.match(startRegex)[1]; + return { + tag: tag, + data: decrypted + }; +}; + +},{"browserify-aes":191,"evp_bytestokey":262,"safe-buffer":332}],298:[function(require,module,exports){ +"use strict"; + +var asn1 = require('./asn1'); +var aesid = require('./aesid.json'); +var fixProc = require('./fixProc'); +var ciphers = require('browserify-aes'); +var compat = require('pbkdf2'); +var Buffer = require('safe-buffer').Buffer; +module.exports = parseKeys; +function parseKeys(buffer) { + var password; + if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { + password = buffer.passphrase; + buffer = buffer.key; + } + if (typeof buffer === 'string') { + buffer = Buffer.from(buffer); + } + var stripped = fixProc(buffer, password); + var type = stripped.tag; + var data = stripped.data; + var subtype, ndata; + switch (type) { + case 'CERTIFICATE': + ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo; + // falls through + case 'PUBLIC KEY': + if (!ndata) { + ndata = asn1.PublicKey.decode(data, 'der'); + } + subtype = ndata.algorithm.algorithm.join('.'); + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der'); + case '1.2.840.10045.2.1': + ndata.subjectPrivateKey = ndata.subjectPublicKey; + return { + type: 'ec', + data: ndata + }; + case '1.2.840.10040.4.1': + ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der'); + return { + type: 'dsa', + data: ndata.algorithm.params + }; + default: + throw new Error('unknown key id ' + subtype); + } + // throw new Error('unknown key type ' + type) + case 'ENCRYPTED PRIVATE KEY': + data = asn1.EncryptedPrivateKey.decode(data, 'der'); + data = decrypt(data, password); + // falls through + case 'PRIVATE KEY': + ndata = asn1.PrivateKey.decode(data, 'der'); + subtype = ndata.algorithm.algorithm.join('.'); + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der'); + case '1.2.840.10045.2.1': + return { + curve: ndata.algorithm.curve, + privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey + }; + case '1.2.840.10040.4.1': + ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der'); + return { + type: 'dsa', + params: ndata.algorithm.params + }; + default: + throw new Error('unknown key id ' + subtype); + } + // throw new Error('unknown key type ' + type) + case 'RSA PUBLIC KEY': + return asn1.RSAPublicKey.decode(data, 'der'); + case 'RSA PRIVATE KEY': + return asn1.RSAPrivateKey.decode(data, 'der'); + case 'DSA PRIVATE KEY': + return { + type: 'dsa', + params: asn1.DSAPrivateKey.decode(data, 'der') + }; + case 'EC PRIVATE KEY': + data = asn1.ECPrivateKey.decode(data, 'der'); + return { + curve: data.parameters.value, + privateKey: data.privateKey + }; + default: + throw new Error('unknown key type ' + type); + } +} +parseKeys.signature = asn1.signature; +function decrypt(data, password) { + var salt = data.algorithm.decrypt.kde.kdeparams.salt; + var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10); + var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]; + var iv = data.algorithm.decrypt.cipher.iv; + var cipherText = data.subjectPrivateKey; + var keylen = parseInt(algo.split('-')[1], 10) / 8; + var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1'); + var cipher = ciphers.createDecipheriv(algo, key, iv); + var out = []; + out.push(cipher.update(cipherText)); + out.push(cipher.final()); + return Buffer.concat(out); +} + +},{"./aesid.json":294,"./asn1":295,"./fixProc":297,"browserify-aes":191,"pbkdf2":299,"safe-buffer":332}],299:[function(require,module,exports){ +"use strict"; + +exports.pbkdf2 = require('./lib/async'); +exports.pbkdf2Sync = require('./lib/sync'); + +},{"./lib/async":300,"./lib/sync":303}],300:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var checkParameters = require('./precondition'); +var defaultEncoding = require('./default-encoding'); +var sync = require('./sync'); +var toBuffer = require('./to-buffer'); +var ZERO_BUF; +var subtle = global.crypto && global.crypto.subtle; +var toBrowser = { + sha: 'SHA-1', + 'sha-1': 'SHA-1', + sha1: 'SHA-1', + sha256: 'SHA-256', + 'sha-256': 'SHA-256', + sha384: 'SHA-384', + 'sha-384': 'SHA-384', + 'sha-512': 'SHA-512', + sha512: 'SHA-512' +}; +var checks = []; +function checkNative(algo) { + if (global.process && !global.process.browser) { + return Promise.resolve(false); + } + if (!subtle || !subtle.importKey || !subtle.deriveBits) { + return Promise.resolve(false); + } + if (checks[algo] !== undefined) { + return checks[algo]; + } + ZERO_BUF = ZERO_BUF || Buffer.alloc(8); + var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo).then(function () { + return true; + }).catch(function () { + return false; + }); + checks[algo] = prom; + return prom; +} +var nextTick; +function getNextTick() { + if (nextTick) { + return nextTick; + } + if (global.process && global.process.nextTick) { + nextTick = global.process.nextTick; + } else if (global.queueMicrotask) { + nextTick = global.queueMicrotask; + } else if (global.setImmediate) { + nextTick = global.setImmediate; + } else { + nextTick = global.setTimeout; + } + return nextTick; +} +function browserPbkdf2(password, salt, iterations, length, algo) { + return subtle.importKey('raw', password, { + name: 'PBKDF2' + }, false, ['deriveBits']).then(function (key) { + return subtle.deriveBits({ + name: 'PBKDF2', + salt: salt, + iterations: iterations, + hash: { + name: algo + } + }, key, length << 3); + }).then(function (res) { + return Buffer.from(res); + }); +} +function resolvePromise(promise, callback) { + promise.then(function (out) { + getNextTick()(function () { + callback(null, out); + }); + }, function (e) { + getNextTick()(function () { + callback(e); + }); + }); +} +module.exports = function (password, salt, iterations, keylen, digest, callback) { + if (typeof digest === 'function') { + callback = digest; + digest = undefined; + } + digest = digest || 'sha1'; + var algo = toBrowser[digest.toLowerCase()]; + if (!algo || typeof global.Promise !== 'function') { + getNextTick()(function () { + var out; + try { + out = sync(password, salt, iterations, keylen, digest); + } catch (e) { + return callback(e); + } + callback(null, out); + }); + return; + } + checkParameters(iterations, keylen); + password = toBuffer(password, defaultEncoding, 'Password'); + salt = toBuffer(salt, defaultEncoding, 'Salt'); + if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2'); + resolvePromise(checkNative(algo).then(function (resp) { + if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo); + return sync(password, salt, iterations, keylen, digest); + }), callback); +}; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./default-encoding":301,"./precondition":302,"./sync":303,"./to-buffer":304,"safe-buffer":332}],301:[function(require,module,exports){ +(function (process,global){(function (){ +"use strict"; + +var defaultEncoding; +/* istanbul ignore next */ +if (global.process && global.process.browser) { + defaultEncoding = 'utf-8'; +} else if (global.process && global.process.version) { + var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10); + defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'; +} else { + defaultEncoding = 'utf-8'; +} +module.exports = defaultEncoding; + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"_process":306}],302:[function(require,module,exports){ +"use strict"; + +var MAX_ALLOC = Math.pow(2, 30) - 1; // default in iojs + +module.exports = function (iterations, keylen) { + if (typeof iterations !== 'number') { + throw new TypeError('Iterations not a number'); + } + if (iterations < 0) { + throw new TypeError('Bad iterations'); + } + if (typeof keylen !== 'number') { + throw new TypeError('Key length not a number'); + } + if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { + /* eslint no-self-compare: 0 */ + throw new TypeError('Bad key length'); + } +}; + +},{}],303:[function(require,module,exports){ +"use strict"; + +var md5 = require('create-hash/md5'); +var RIPEMD160 = require('ripemd160'); +var sha = require('sha.js'); +var Buffer = require('safe-buffer').Buffer; +var checkParameters = require('./precondition'); +var defaultEncoding = require('./default-encoding'); +var toBuffer = require('./to-buffer'); +var ZEROS = Buffer.alloc(128); +var sizes = { + md5: 16, + sha1: 20, + sha224: 28, + sha256: 32, + sha384: 48, + sha512: 64, + rmd160: 20, + ripemd160: 20 +}; +function Hmac(alg, key, saltLen) { + var hash = getDigest(alg); + var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64; + if (key.length > blocksize) { + key = hash(key); + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize); + } + var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]); + var opad = Buffer.allocUnsafe(blocksize + sizes[alg]); + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36; + opad[i] = key[i] ^ 0x5C; + } + var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4); + ipad.copy(ipad1, 0, 0, blocksize); + this.ipad1 = ipad1; + this.ipad2 = ipad; + this.opad = opad; + this.alg = alg; + this.blocksize = blocksize; + this.hash = hash; + this.size = sizes[alg]; +} +Hmac.prototype.run = function (data, ipad) { + data.copy(ipad, this.blocksize); + var h = this.hash(ipad); + h.copy(this.opad, this.blocksize); + return this.hash(this.opad); +}; +function getDigest(alg) { + function shaFunc(data) { + return sha(alg).update(data).digest(); + } + function rmd160Func(data) { + return new RIPEMD160().update(data).digest(); + } + if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func; + if (alg === 'md5') return md5; + return shaFunc; +} +function pbkdf2(password, salt, iterations, keylen, digest) { + checkParameters(iterations, keylen); + password = toBuffer(password, defaultEncoding, 'Password'); + salt = toBuffer(salt, defaultEncoding, 'Salt'); + digest = digest || 'sha1'; + var hmac = new Hmac(digest, password, salt.length); + var DK = Buffer.allocUnsafe(keylen); + var block1 = Buffer.allocUnsafe(salt.length + 4); + salt.copy(block1, 0, 0, salt.length); + var destPos = 0; + var hLen = sizes[digest]; + var l = Math.ceil(keylen / hLen); + for (var i = 1; i <= l; i++) { + block1.writeUInt32BE(i, salt.length); + var T = hmac.run(block1, hmac.ipad1); + var U = T; + for (var j = 1; j < iterations; j++) { + U = hmac.run(U, hmac.ipad2); + for (var k = 0; k < hLen; k++) T[k] ^= U[k]; + } + T.copy(DK, destPos); + destPos += hLen; + } + return DK; +} +module.exports = pbkdf2; + +},{"./default-encoding":301,"./precondition":302,"./to-buffer":304,"create-hash/md5":226,"ripemd160":331,"safe-buffer":332,"sha.js":336}],304:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +module.exports = function (thing, encoding, name) { + if (Buffer.isBuffer(thing)) { + return thing; + } else if (typeof thing === 'string') { + return Buffer.from(thing, encoding); + } else if (ArrayBuffer.isView(thing)) { + return Buffer.from(thing.buffer); + } else { + throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView'); + } +}; + +},{"safe-buffer":332}],305:[function(require,module,exports){ +(function (process){(function (){ +'use strict'; + +if (typeof process === 'undefined' || !process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { + module.exports = { + nextTick: nextTick + }; +} else { + module.exports = process; +} +function nextTick(fn, arg1, arg2, arg3) { + if (typeof fn !== 'function') { + throw new TypeError('"callback" argument must be a function'); + } + var len = arguments.length; + var args, i; + switch (len) { + case 0: + case 1: + return process.nextTick(fn); + case 2: + return process.nextTick(function afterTickOne() { + fn.call(null, arg1); + }); + case 3: + return process.nextTick(function afterTickTwo() { + fn.call(null, arg1, arg2); + }); + case 4: + return process.nextTick(function afterTickThree() { + fn.call(null, arg1, arg2, arg3); + }); + default: + args = new Array(len - 1); + i = 0; + while (i < args.length) { + args[i++] = arguments[i]; + } + return process.nextTick(function afterTick() { + fn.apply(null, args); + }); + } +} + +}).call(this)}).call(this,require('_process')) + +},{"_process":306}],306:[function(require,module,exports){ +"use strict"; + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +})(); +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue.length; + while (len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; +function noop() {} +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; +process.listeners = function (name) { + return []; +}; +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; +process.cwd = function () { + return '/'; +}; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function () { + return 0; +}; + +},{}],307:[function(require,module,exports){ +"use strict"; + +exports.publicEncrypt = require('./publicEncrypt'); +exports.privateDecrypt = require('./privateDecrypt'); +exports.privateEncrypt = function privateEncrypt(key, buf) { + return exports.publicEncrypt(key, buf, true); +}; +exports.publicDecrypt = function publicDecrypt(key, buf) { + return exports.privateDecrypt(key, buf, true); +}; + +},{"./privateDecrypt":310,"./publicEncrypt":311}],308:[function(require,module,exports){ +"use strict"; + +var createHash = require('create-hash'); +var Buffer = require('safe-buffer').Buffer; +module.exports = function (seed, len) { + var t = Buffer.alloc(0); + var i = 0; + var c; + while (t.length < len) { + c = i2ops(i++); + t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]); + } + return t.slice(0, len); +}; +function i2ops(c) { + var out = Buffer.allocUnsafe(4); + out.writeUInt32BE(c, 0); + return out; +} + +},{"create-hash":225,"safe-buffer":332}],309:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],310:[function(require,module,exports){ +"use strict"; + +var parseKeys = require('parse-asn1'); +var mgf = require('./mgf'); +var xor = require('./xor'); +var BN = require('bn.js'); +var crt = require('browserify-rsa'); +var createHash = require('create-hash'); +var withPublic = require('./withPublic'); +var Buffer = require('safe-buffer').Buffer; +module.exports = function privateDecrypt(privateKey, enc, reverse) { + var padding; + if (privateKey.padding) { + padding = privateKey.padding; + } else if (reverse) { + padding = 1; + } else { + padding = 4; + } + var key = parseKeys(privateKey); + var k = key.modulus.byteLength(); + if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { + throw new Error('decryption error'); + } + var msg; + if (reverse) { + msg = withPublic(new BN(enc), key); + } else { + msg = crt(enc, key); + } + var zBuffer = Buffer.alloc(k - msg.length); + msg = Buffer.concat([zBuffer, msg], k); + if (padding === 4) { + return oaep(key, msg); + } else if (padding === 1) { + return pkcs1(key, msg, reverse); + } else if (padding === 3) { + return msg; + } else { + throw new Error('unknown padding'); + } +}; +function oaep(key, msg) { + var k = key.modulus.byteLength(); + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest(); + var hLen = iHash.length; + if (msg[0] !== 0) { + throw new Error('decryption error'); + } + var maskedSeed = msg.slice(1, hLen + 1); + var maskedDb = msg.slice(hLen + 1); + var seed = xor(maskedSeed, mgf(maskedDb, hLen)); + var db = xor(maskedDb, mgf(seed, k - hLen - 1)); + if (compare(iHash, db.slice(0, hLen))) { + throw new Error('decryption error'); + } + var i = hLen; + while (db[i] === 0) { + i++; + } + if (db[i++] !== 1) { + throw new Error('decryption error'); + } + return db.slice(i); +} +function pkcs1(key, msg, reverse) { + var p1 = msg.slice(0, 2); + var i = 2; + var status = 0; + while (msg[i++] !== 0) { + if (i >= msg.length) { + status++; + break; + } + } + var ps = msg.slice(2, i - 1); + if (p1.toString('hex') !== '0002' && !reverse || p1.toString('hex') !== '0001' && reverse) { + status++; + } + if (ps.length < 8) { + status++; + } + if (status) { + throw new Error('decryption error'); + } + return msg.slice(i); +} +function compare(a, b) { + a = Buffer.from(a); + b = Buffer.from(b); + var dif = 0; + var len = a.length; + if (a.length !== b.length) { + dif++; + len = Math.min(a.length, b.length); + } + var i = -1; + while (++i < len) { + dif += a[i] ^ b[i]; + } + return dif; +} + +},{"./mgf":308,"./withPublic":312,"./xor":313,"bn.js":309,"browserify-rsa":209,"create-hash":225,"parse-asn1":298,"safe-buffer":332}],311:[function(require,module,exports){ +"use strict"; + +var parseKeys = require('parse-asn1'); +var randomBytes = require('randombytes'); +var createHash = require('create-hash'); +var mgf = require('./mgf'); +var xor = require('./xor'); +var BN = require('bn.js'); +var withPublic = require('./withPublic'); +var crt = require('browserify-rsa'); +var Buffer = require('safe-buffer').Buffer; +module.exports = function publicEncrypt(publicKey, msg, reverse) { + var padding; + if (publicKey.padding) { + padding = publicKey.padding; + } else if (reverse) { + padding = 1; + } else { + padding = 4; + } + var key = parseKeys(publicKey); + var paddedMsg; + if (padding === 4) { + paddedMsg = oaep(key, msg); + } else if (padding === 1) { + paddedMsg = pkcs1(key, msg, reverse); + } else if (padding === 3) { + paddedMsg = new BN(msg); + if (paddedMsg.cmp(key.modulus) >= 0) { + throw new Error('data too long for modulus'); + } + } else { + throw new Error('unknown padding'); + } + if (reverse) { + return crt(paddedMsg, key); + } else { + return withPublic(paddedMsg, key); + } +}; +function oaep(key, msg) { + var k = key.modulus.byteLength(); + var mLen = msg.length; + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest(); + var hLen = iHash.length; + var hLen2 = 2 * hLen; + if (mLen > k - hLen2 - 2) { + throw new Error('message too long'); + } + var ps = Buffer.alloc(k - mLen - hLen2 - 2); + var dblen = k - hLen - 1; + var seed = randomBytes(hLen); + var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)); + var maskedSeed = xor(seed, mgf(maskedDb, hLen)); + return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)); +} +function pkcs1(key, msg, reverse) { + var mLen = msg.length; + var k = key.modulus.byteLength(); + if (mLen > k - 11) { + throw new Error('message too long'); + } + var ps; + if (reverse) { + ps = Buffer.alloc(k - mLen - 3, 0xff); + } else { + ps = nonZero(k - mLen - 3); + } + return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)); +} +function nonZero(len) { + var out = Buffer.allocUnsafe(len); + var i = 0; + var cache = randomBytes(len * 2); + var cur = 0; + var num; + while (i < len) { + if (cur === cache.length) { + cache = randomBytes(len * 2); + cur = 0; + } + num = cache[cur++]; + if (num) { + out[i++] = num; + } + } + return out; +} + +},{"./mgf":308,"./withPublic":312,"./xor":313,"bn.js":309,"browserify-rsa":209,"create-hash":225,"parse-asn1":298,"randombytes":314,"safe-buffer":332}],312:[function(require,module,exports){ +"use strict"; + +var BN = require('bn.js'); +var Buffer = require('safe-buffer').Buffer; +function withPublic(paddedMsg, key) { + return Buffer.from(paddedMsg.toRed(BN.mont(key.modulus)).redPow(new BN(key.publicExponent)).fromRed().toArray()); +} +module.exports = withPublic; + +},{"bn.js":309,"safe-buffer":332}],313:[function(require,module,exports){ +"use strict"; + +module.exports = function xor(a, b) { + var len = a.length; + var i = -1; + while (++i < len) { + a[i] ^= b[i]; + } + return a; +}; + +},{}],314:[function(require,module,exports){ +(function (process,global){(function (){ +'use strict'; + +// limit of Crypto.getRandomValues() +// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues +var MAX_BYTES = 65536; + +// Node supports requesting up to this number of bytes +// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 +var MAX_UINT32 = 4294967295; +function oldBrowser() { + throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11'); +} +var Buffer = require('safe-buffer').Buffer; +var crypto = global.crypto || global.msCrypto; +if (crypto && crypto.getRandomValues) { + module.exports = randomBytes; +} else { + module.exports = oldBrowser; +} +function randomBytes(size, cb) { + // phantomjs needs to throw + if (size > MAX_UINT32) throw new RangeError('requested too many random bytes'); + var bytes = Buffer.allocUnsafe(size); + if (size > 0) { + // getRandomValues fails on IE if size == 0 + if (size > MAX_BYTES) { + // this is the max bytes crypto.getRandomValues + // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + for (var generated = 0; generated < size; generated += MAX_BYTES) { + // buffer.slice automatically checks if the end is past the end of + // the buffer so we don't have to here + crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)); + } + } else { + crypto.getRandomValues(bytes); + } + } + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes); + }); + } + return bytes; +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"_process":306,"safe-buffer":332}],315:[function(require,module,exports){ +(function (process,global){(function (){ +'use strict'; + +function oldBrowser() { + throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11'); +} +var safeBuffer = require('safe-buffer'); +var randombytes = require('randombytes'); +var Buffer = safeBuffer.Buffer; +var kBufferMaxLength = safeBuffer.kMaxLength; +var crypto = global.crypto || global.msCrypto; +var kMaxUint32 = Math.pow(2, 32) - 1; +function assertOffset(offset, length) { + if (typeof offset !== 'number' || offset !== offset) { + // eslint-disable-line no-self-compare + throw new TypeError('offset must be a number'); + } + if (offset > kMaxUint32 || offset < 0) { + throw new TypeError('offset must be a uint32'); + } + if (offset > kBufferMaxLength || offset > length) { + throw new RangeError('offset out of range'); + } +} +function assertSize(size, offset, length) { + if (typeof size !== 'number' || size !== size) { + // eslint-disable-line no-self-compare + throw new TypeError('size must be a number'); + } + if (size > kMaxUint32 || size < 0) { + throw new TypeError('size must be a uint32'); + } + if (size + offset > length || size > kBufferMaxLength) { + throw new RangeError('buffer too small'); + } +} +if (crypto && crypto.getRandomValues || !process.browser) { + exports.randomFill = randomFill; + exports.randomFillSync = randomFillSync; +} else { + exports.randomFill = oldBrowser; + exports.randomFillSync = oldBrowser; +} +function randomFill(buf, offset, size, cb) { + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); + } + if (typeof offset === 'function') { + cb = offset; + offset = 0; + size = buf.length; + } else if (typeof size === 'function') { + cb = size; + size = buf.length - offset; + } else if (typeof cb !== 'function') { + throw new TypeError('"cb" argument must be a function'); + } + assertOffset(offset, buf.length); + assertSize(size, offset, buf.length); + return actualFill(buf, offset, size, cb); +} +function actualFill(buf, offset, size, cb) { + if (process.browser) { + var ourBuf = buf.buffer; + var uint = new Uint8Array(ourBuf, offset, size); + crypto.getRandomValues(uint); + if (cb) { + process.nextTick(function () { + cb(null, buf); + }); + return; + } + return buf; + } + if (cb) { + randombytes(size, function (err, bytes) { + if (err) { + return cb(err); + } + bytes.copy(buf, offset); + cb(null, buf); + }); + return; + } + var bytes = randombytes(size); + bytes.copy(buf, offset); + return buf; +} +function randomFillSync(buf, offset, size) { + if (typeof offset === 'undefined') { + offset = 0; + } + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); + } + assertOffset(offset, buf.length); + if (size === undefined) size = buf.length - offset; + assertSize(size, offset, buf.length); + return actualFill(buf, offset, size); +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"_process":306,"randombytes":314,"safe-buffer":332}],316:[function(require,module,exports){ +'use strict'; + +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; +} +var codes = {}; +function createErrorType(code, message, Base) { + if (!Base) { + Base = Error; + } + function getMessage(arg1, arg2, arg3) { + if (typeof message === 'string') { + return message; + } else { + return message(arg1, arg2, arg3); + } + } + var NodeError = /*#__PURE__*/ + function (_Base) { + _inheritsLoose(NodeError, _Base); + function NodeError(arg1, arg2, arg3) { + return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; + } + return NodeError; + }(Base); + NodeError.prototype.name = Base.name; + NodeError.prototype.code = code; + codes[code] = NodeError; +} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js + +function oneOf(expected, thing) { + if (Array.isArray(expected)) { + var len = expected.length; + expected = expected.map(function (i) { + return String(i); + }); + if (len > 2) { + return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; + } else if (len === 2) { + return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); + } else { + return "of ".concat(thing, " ").concat(expected[0]); + } + } else { + return "of ".concat(thing, " ").concat(String(expected)); + } +} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith + +function startsWith(str, search, pos) { + return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; +} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith + +function endsWith(str, search, this_len) { + if (this_len === undefined || this_len > str.length) { + this_len = str.length; + } + return str.substring(this_len - search.length, this_len) === search; +} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes + +function includes(str, search, start) { + if (typeof start !== 'number') { + start = 0; + } + if (start + search.length > str.length) { + return false; + } else { + return str.indexOf(search, start) !== -1; + } +} +createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { + return 'The value "' + value + '" is invalid for option "' + name + '"'; +}, TypeError); +createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { + // determiner: 'must be' or 'must not be' + var determiner; + if (typeof expected === 'string' && startsWith(expected, 'not ')) { + determiner = 'must not be'; + expected = expected.replace(/^not /, ''); + } else { + determiner = 'must be'; + } + var msg; + if (endsWith(name, ' argument')) { + // For cases like 'first argument' + msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } else { + var type = includes(name, '.') ? 'property' : 'argument'; + msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } + msg += ". Received type ".concat(typeof actual); + return msg; +}, TypeError); +createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); +createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { + return 'The ' + name + ' method is not implemented'; +}); +createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); +createErrorType('ERR_STREAM_DESTROYED', function (name) { + return 'Cannot call ' + name + ' after a stream was destroyed'; +}); +createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); +createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); +createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); +createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); +createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { + return 'Unknown encoding: ' + arg; +}, TypeError); +createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); +module.exports.codes = codes; + +},{}],317:[function(require,module,exports){ +(function (process){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; +}; +/**/ + +module.exports = Duplex; +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); +require('inherits')(Duplex, Readable); +{ + // Allow the keys array to be GC'ed. + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + this.allowHalfOpen = true; + if (options) { + if (options.readable === false) this.readable = false; + if (options.writable === false) this.writable = false; + if (options.allowHalfOpen === false) { + this.allowHalfOpen = false; + this.once('end', onend); + } + } +} +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); +Object.defineProperty(Duplex.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } +}); +Object.defineProperty(Duplex.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } +}); + +// the no-half-open enforcer +function onend() { + // If the writable side ended, then we're ok. + if (this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + process.nextTick(onEndNT, this); +} +function onEndNT(self) { + self.end(); +} +Object.defineProperty(Duplex.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +}).call(this)}).call(this,require('_process')) + +},{"./_stream_readable":319,"./_stream_writable":321,"_process":306,"inherits":279}],318:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; +var Transform = require('./_stream_transform'); +require('inherits')(PassThrough, Transform); +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + Transform.call(this, options); +} +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; + +},{"./_stream_transform":320,"inherits":279}],319:[function(require,module,exports){ +(function (process,global){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +module.exports = Readable; + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; +var EElistenerCount = function EElistenerCount(emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +var Buffer = require('buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ +var debugUtil = require('util'); +var debug; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function debug() {}; +} +/**/ + +var BufferList = require('./internal/streams/buffer_list'); +var destroyImpl = require('./internal/streams/destroy'); +var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; +var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; + +// Lazy loaded to improve the startup performance. +var StringDecoder; +var createReadableStreamAsyncIterator; +var from; +require('inherits')(Readable, Stream); +var errorOrDestroy = destroyImpl.errorOrDestroy; +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} +function ReadableState(options, stream, isDuplex) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + this.paused = true; + + // Should close be emitted on destroy. Defaults to true. + this.emitClose = options.emitClose !== false; + + // Should .destroy() be called after 'end' (and potentially 'finish') + this.autoDestroy = !!options.autoDestroy; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + if (!(this instanceof Readable)) return new Readable(options); + + // Checking for a Stream.Duplex instance is faster here instead of inside + // the ReadableState constructor, at least with V8 6.5 + var isDuplex = this instanceof Duplex; + this._readableState = new ReadableState(options, this, isDuplex); + + // legacy + this.readable = true; + if (options) { + if (typeof options.read === 'function') this._read = options.read; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + Stream.call(this); +} +Object.defineProperty(Readable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + debug('readableAddChunk', chunk); + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + errorOrDestroy(stream, er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (addToFront) { + if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); + } else if (state.ended) { + errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); + } else if (state.destroyed) { + return false; + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + maybeReadMore(stream, state); + } + } + + // We can push more data if we are below the highWaterMark. + // Also, if we have no data yet, we can stand some more bytes. + // This is to work around cases where hwm=0, such as the repl. + return !state.ended && (state.length < state.highWaterMark || state.length === 0); +} +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + state.awaitDrain = 0; + stream.emit('data', chunk); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); + } + return er; +} +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + var decoder = new StringDecoder(enc); + this._readableState.decoder = decoder; + // If setEncoding(null), decoder.encoding equals utf8 + this._readableState.encoding = this._readableState.decoder.encoding; + + // Iterate over current buffer to convert already stored Buffers: + var p = this._readableState.buffer.head; + var content = ''; + while (p !== null) { + content += decoder.write(p.data); + p = p.next; + } + this._readableState.buffer.clear(); + if (content !== '') this._readableState.buffer.push(content); + this._readableState.length = content.length; + return this; +}; + +// Don't raise the hwm > 1GB +var MAX_HWM = 0x40000000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + if (ret === null) { + state.needReadable = state.length <= state.highWaterMark; + n = 0; + } else { + state.length -= n; + state.awaitDrain = 0; + } + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + if (ret !== null) this.emit('data', ret); + return ret; +}; +function onEofChunk(stream, state) { + debug('onEofChunk'); + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + if (state.sync) { + // if we are sync, wait until next tick to emit the data. + // Otherwise we risk emitting data in the flow() + // the readable code triggers during a read() call + emitReadable(stream); + } else { + // emit 'readable' now to make sure it gets picked up. + state.needReadable = false; + if (!state.emittedReadable) { + state.emittedReadable = true; + emitReadable_(stream); + } + } +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + debug('emitReadable', state.needReadable, state.emittedReadable); + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + process.nextTick(emitReadable_, stream); + } +} +function emitReadable_(stream) { + var state = stream._readableState; + debug('emitReadable_', state.destroyed, state.length, state.ended); + if (!state.destroyed && (state.length || state.ended)) { + stream.emit('readable'); + state.emittedReadable = false; + } + + // The stream needs another readable event if + // 1. It is not flowing, as the flow mechanism will take + // care of it. + // 2. It is not ended. + // 3. It is below the highWaterMark, so we can schedule + // another readable later. + state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(maybeReadMore_, stream, state); + } +} +function maybeReadMore_(stream, state) { + // Attempt to read more data if we should. + // + // The conditions for reading more data are (one of): + // - Not enough data buffered (state.length < state.highWaterMark). The loop + // is responsible for filling the buffer with enough data if such data + // is available. If highWaterMark is 0 and we are not in the flowing mode + // we should _not_ attempt to buffer any extra data. We'll get more data + // when the stream consumer calls read() instead. + // - No data in the buffer, and the stream is in flowing mode. In this mode + // the loop below is responsible for ensuring read() is called. Failing to + // call read here would abort the flow and there's no other mechanism for + // continuing the flow if the stream consumer has just subscribed to the + // 'data' event. + // + // In addition to the above conditions to keep reading data, the following + // conditions prevent the data from being read: + // - The stream has ended (state.ended). + // - There is already a pending 'read' operation (state.reading). This is a + // case where the the stream has called the implementation defined _read() + // method, but they are processing the call asynchronously and have _not_ + // called push() with new data. In this case we skip performing more + // read()s. The execution ends in this method again after the _read() ends + // up calling push() with more data. + while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { + var len = state.length; + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); +}; +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + var ret = dest.write(chunk); + debug('dest.write', ret); + if (ret === false) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + return dest; +}; +function pipeOnDrain(src) { + return function pipeOnDrainFunctionResult() { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, { + hasUnpiped: false + }); + return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this, unpipeInfo); + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + var state = this._readableState; + if (ev === 'data') { + // update readableListening so that resume() may be a no-op + // a few lines down. This is needed to support once('readable'). + state.readableListening = this.listenerCount('readable') > 0; + + // Try start flowing on next tick if stream isn't explicitly paused + if (state.flowing !== false) this.resume(); + } else if (ev === 'readable') { + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.flowing = false; + state.emittedReadable = false; + debug('on readable', state.length, state.reading); + if (state.length) { + emitReadable(this); + } else if (!state.reading) { + process.nextTick(nReadingNextTick, this); + } + } + } + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; +Readable.prototype.removeListener = function (ev, fn) { + var res = Stream.prototype.removeListener.call(this, ev, fn); + if (ev === 'readable') { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + return res; +}; +Readable.prototype.removeAllListeners = function (ev) { + var res = Stream.prototype.removeAllListeners.apply(this, arguments); + if (ev === 'readable' || ev === undefined) { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + return res; +}; +function updateReadableListening(self) { + var state = self._readableState; + state.readableListening = self.listenerCount('readable') > 0; + if (state.resumeScheduled && !state.paused) { + // flowing needs to be set to true now, otherwise + // the upcoming resume will not flow. + state.flowing = true; + + // crude way to check if we should resume + } else if (self.listenerCount('data') > 0) { + self.resume(); + } +} +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + // we flow only if there is no one listening + // for readable, but we still have to call + // resume() + state.flowing = !state.readableListening; + resume(this, state); + } + state.paused = false; + return this; +}; +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + process.nextTick(resume_, stream, state); + } +} +function resume_(stream, state) { + debug('resume', state.reading); + if (!state.reading) { + stream.read(0); + } + state.resumeScheduled = false; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (this._readableState.flowing !== false) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + this._readableState.paused = true; + return this; +}; +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null); +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + var state = this._readableState; + var paused = false; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + _this.push(null); + }); + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function methodWrap(method) { + return function methodWrapReturnFunction() { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + return this; +}; +if (typeof Symbol === 'function') { + Readable.prototype[Symbol.asyncIterator] = function () { + if (createReadableStreamAsyncIterator === undefined) { + createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); + } + return createReadableStreamAsyncIterator(this); + }; +} +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.highWaterMark; + } +}); +Object.defineProperty(Readable.prototype, 'readableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState && this._readableState.buffer; + } +}); +Object.defineProperty(Readable.prototype, 'readableFlowing', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.flowing; + }, + set: function set(state) { + if (this._readableState) { + this._readableState.flowing = state; + } + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; +Object.defineProperty(Readable.prototype, 'readableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.length; + } +}); + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = state.buffer.consume(n, state.decoder); + } + return ret; +} +function endReadable(stream) { + var state = stream._readableState; + debug('endReadable', state.endEmitted); + if (!state.endEmitted) { + state.ended = true; + process.nextTick(endReadableNT, state, stream); + } +} +function endReadableNT(state, stream) { + debug('endReadableNT', state.endEmitted, state.length); + + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the writable side is ready for autoDestroy as well + var wState = stream._writableState; + if (!wState || wState.autoDestroy && wState.finished) { + stream.destroy(); + } + } + } +} +if (typeof Symbol === 'function') { + Readable.from = function (iterable, opts) { + if (from === undefined) { + from = require('./internal/streams/from'); + } + return from(Readable, iterable, opts); + }; +} +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"../errors":316,"./_stream_duplex":317,"./internal/streams/async_iterator":322,"./internal/streams/buffer_list":323,"./internal/streams/destroy":324,"./internal/streams/from":326,"./internal/streams/state":328,"./internal/streams/stream":329,"_process":306,"buffer":220,"events":261,"inherits":279,"string_decoder/":360,"util":188}],320:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; +var _require$codes = require('../errors').codes, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, + ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; +var Duplex = require('./_stream_duplex'); +require('inherits')(Transform, Duplex); +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + var cb = ts.writecb; + if (cb === null) { + return this.emit('error', new ERR_MULTIPLE_CALLBACK()); + } + ts.writechunk = null; + ts.writecb = null; + if (data != null) + // single equals check for both `null` and `undefined` + this.push(data); + cb(er); + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + Duplex.call(this, options); + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} +function prefinish() { + var _this = this; + if (typeof this._flush === 'function' && !this._readableState.destroyed) { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); +}; +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + if (ts.writechunk !== null && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; +Transform.prototype._destroy = function (err, cb) { + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + }); +}; +function done(stream, er, data) { + if (er) return stream.emit('error', er); + if (data != null) + // single equals check for both `null` and `undefined` + stream.push(data); + + // TODO(BridgeAR): Write a test for these two error cases + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); + if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); + return stream.push(null); +} + +},{"../errors":316,"./_stream_duplex":317,"inherits":279}],321:[function(require,module,exports){ +(function (process,global){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +var Buffer = require('buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +var destroyImpl = require('./internal/streams/destroy'); +var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; +var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, + ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, + ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, + ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; +var errorOrDestroy = destroyImpl.errorOrDestroy; +require('inherits')(Writable, Stream); +function nop() {} +function WritableState(options, stream, isDuplex) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream, + // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // Should close be emitted on destroy. Defaults to true. + this.emitClose = options.emitClose !== false; + + // Should .destroy() be called after 'finish' (and potentially 'end') + this.autoDestroy = !!options.autoDestroy; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function writableStateBufferGetter() { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function value(object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function realHasInstance(object) { + return object instanceof this; + }; +} +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + + // Checking for a Stream.Duplex instance is faster here instead of inside + // the WritableState constructor, at least with V8 6.5 + var isDuplex = this instanceof Duplex; + if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); + this._writableState = new WritableState(options, this, isDuplex); + + // legacy. + this.writable = true; + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + if (typeof options.final === 'function') this._final = options.final; + } + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); +}; +function writeAfterEnd(stream, cb) { + var er = new ERR_STREAM_WRITE_AFTER_END(); + // TODO: defer error events consistently everywhere, not just the cb + errorOrDestroy(stream, er); + process.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var er; + if (chunk === null) { + er = new ERR_STREAM_NULL_VALUES(); + } else if (typeof chunk !== 'string' && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); + } + if (er) { + errorOrDestroy(stream, er); + process.nextTick(cb, er); + return false; + } + return true; +} +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; +}; +Writable.prototype.cork = function () { + this._writableState.corked++; +}; +Writable.prototype.uncork = function () { + var state = this._writableState; + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; +Object.defineProperty(Writable.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } +}); +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + return ret; +} +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + process.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + process.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state) || stream.destroyed; + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + if (sync) { + process.nextTick(afterWrite, stream, state, finished, cb); + } else { + afterWrite(stream, state, finished, cb); + } + } +} +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + if (entry === null) state.lastBufferedRequest = null; + } + state.bufferedRequest = entry; + state.bufferProcessing = false; +} +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); +}; +Writable.prototype._writev = null; +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending) endWritable(this, state, cb); + return this; +}; +Object.defineProperty(Writable.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } +}); +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + errorOrDestroy(stream, err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function' && !state.destroyed) { + state.pendingcb++; + state.finalCalled = true; + process.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the readable side is ready for autoDestroy as well + var rState = stream._readableState; + if (!rState || rState.autoDestroy && rState.endEmitted) { + stream.destroy(); + } + } + } + } + return need; +} +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) process.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + // reuse the free corkReq. + state.corkedRequestsFree.next = corkReq; +} +Object.defineProperty(Writable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + cb(err); +}; + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"../errors":316,"./_stream_duplex":317,"./internal/streams/destroy":324,"./internal/streams/state":328,"./internal/streams/stream":329,"_process":306,"buffer":220,"inherits":279,"util-deprecate":362}],322:[function(require,module,exports){ +(function (process){(function (){ +'use strict'; + +var _Object$setPrototypeO; +function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; +} +function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); +} +function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); +} +var finished = require('./end-of-stream'); +var kLastResolve = Symbol('lastResolve'); +var kLastReject = Symbol('lastReject'); +var kError = Symbol('error'); +var kEnded = Symbol('ended'); +var kLastPromise = Symbol('lastPromise'); +var kHandlePromise = Symbol('handlePromise'); +var kStream = Symbol('stream'); +function createIterResult(value, done) { + return { + value: value, + done: done + }; +} +function readAndResolve(iter) { + var resolve = iter[kLastResolve]; + if (resolve !== null) { + var data = iter[kStream].read(); + // we defer if data is null + // we can be expecting either 'end' or + // 'error' + if (data !== null) { + iter[kLastPromise] = null; + iter[kLastResolve] = null; + iter[kLastReject] = null; + resolve(createIterResult(data, false)); + } + } +} +function onReadable(iter) { + // we wait for the next tick, because it might + // emit an error with process.nextTick + process.nextTick(readAndResolve, iter); +} +function wrapForNext(lastPromise, iter) { + return function (resolve, reject) { + lastPromise.then(function () { + if (iter[kEnded]) { + resolve(createIterResult(undefined, true)); + return; + } + iter[kHandlePromise](resolve, reject); + }, reject); + }; +} +var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); +var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { + get stream() { + return this[kStream]; + }, + next: function next() { + var _this = this; + // if we have detected an error in the meanwhile + // reject straight away + var error = this[kError]; + if (error !== null) { + return Promise.reject(error); + } + if (this[kEnded]) { + return Promise.resolve(createIterResult(undefined, true)); + } + if (this[kStream].destroyed) { + // We need to defer via nextTick because if .destroy(err) is + // called, the error will be emitted via nextTick, and + // we cannot guarantee that there is no error lingering around + // waiting to be emitted. + return new Promise(function (resolve, reject) { + process.nextTick(function () { + if (_this[kError]) { + reject(_this[kError]); + } else { + resolve(createIterResult(undefined, true)); + } + }); + }); + } + + // if we have multiple next() calls + // we will wait for the previous Promise to finish + // this logic is optimized to support for await loops, + // where next() is only called once at a time + var lastPromise = this[kLastPromise]; + var promise; + if (lastPromise) { + promise = new Promise(wrapForNext(lastPromise, this)); + } else { + // fast path needed to support multiple this.push() + // without triggering the next() queue + var data = this[kStream].read(); + if (data !== null) { + return Promise.resolve(createIterResult(data, false)); + } + promise = new Promise(this[kHandlePromise]); + } + this[kLastPromise] = promise; + return promise; + } +}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { + return this; +}), _defineProperty(_Object$setPrototypeO, "return", function _return() { + var _this2 = this; + // destroy(err, cb) is a private API + // we can guarantee we have that here, because we control the + // Readable class this is attached to + return new Promise(function (resolve, reject) { + _this2[kStream].destroy(null, function (err) { + if (err) { + reject(err); + return; + } + resolve(createIterResult(undefined, true)); + }); + }); +}), _Object$setPrototypeO), AsyncIteratorPrototype); +var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { + var _Object$create; + var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { + value: stream, + writable: true + }), _defineProperty(_Object$create, kLastResolve, { + value: null, + writable: true + }), _defineProperty(_Object$create, kLastReject, { + value: null, + writable: true + }), _defineProperty(_Object$create, kError, { + value: null, + writable: true + }), _defineProperty(_Object$create, kEnded, { + value: stream._readableState.endEmitted, + writable: true + }), _defineProperty(_Object$create, kHandlePromise, { + value: function value(resolve, reject) { + var data = iterator[kStream].read(); + if (data) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(data, false)); + } else { + iterator[kLastResolve] = resolve; + iterator[kLastReject] = reject; + } + }, + writable: true + }), _Object$create)); + iterator[kLastPromise] = null; + finished(stream, function (err) { + if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { + var reject = iterator[kLastReject]; + // reject if we are waiting for data in the Promise + // returned by next() and store the error + if (reject !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + reject(err); + } + iterator[kError] = err; + return; + } + var resolve = iterator[kLastResolve]; + if (resolve !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(undefined, true)); + } + iterator[kEnded] = true; + }); + stream.on('readable', onReadable.bind(null, iterator)); + return iterator; +}; +module.exports = createReadableStreamAsyncIterator; + +}).call(this)}).call(this,require('_process')) + +},{"./end-of-stream":325,"_process":306}],323:[function(require,module,exports){ +'use strict'; + +function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + return keys; +} +function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { + _defineProperty(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + return target; +} +function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; +} +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } +} +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} +function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); +} +function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); +} +var _require = require('buffer'), + Buffer = _require.Buffer; +var _require2 = require('util'), + inspect = _require2.inspect; +var custom = inspect && inspect.custom || 'inspect'; +function copyBuffer(src, target, offset) { + Buffer.prototype.copy.call(src, target, offset); +} +module.exports = /*#__PURE__*/function () { + function BufferList() { + _classCallCheck(this, BufferList); + this.head = null; + this.tail = null; + this.length = 0; + } + _createClass(BufferList, [{ + key: "push", + value: function push(v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + } + }, { + key: "unshift", + value: function unshift(v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + } + }, { + key: "shift", + value: function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + } + }, { + key: "clear", + value: function clear() { + this.head = this.tail = null; + this.length = 0; + } + }, { + key: "join", + value: function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) ret += s + p.data; + return ret; + } + }, { + key: "concat", + value: function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + } + + // Consumes a specified amount of bytes or characters from the buffered data. + }, { + key: "consume", + value: function consume(n, hasStrings) { + var ret; + if (n < this.head.data.length) { + // `slice` is the same for buffers and strings. + ret = this.head.data.slice(0, n); + this.head.data = this.head.data.slice(n); + } else if (n === this.head.data.length) { + // First chunk is a perfect match. + ret = this.shift(); + } else { + // Result spans more than one buffer. + ret = hasStrings ? this._getString(n) : this._getBuffer(n); + } + return ret; + } + }, { + key: "first", + value: function first() { + return this.head.data; + } + + // Consumes a specified amount of characters from the buffered data. + }, { + key: "_getString", + value: function _getString(n) { + var p = this.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) this.head = p.next;else this.head = this.tail = null; + } else { + this.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + this.length -= c; + return ret; + } + + // Consumes a specified amount of bytes from the buffered data. + }, { + key: "_getBuffer", + value: function _getBuffer(n) { + var ret = Buffer.allocUnsafe(n); + var p = this.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) this.head = p.next;else this.head = this.tail = null; + } else { + this.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + this.length -= c; + return ret; + } + + // Make sure the linked list only shows the minimal necessary information. + }, { + key: custom, + value: function value(_, options) { + return inspect(this, _objectSpread(_objectSpread({}, options), {}, { + // Only inspect one level. + depth: 0, + // It should not recurse. + customInspect: false + })); + } + }]); + return BufferList; +}(); + +},{"buffer":220,"util":188}],324:[function(require,module,exports){ +(function (process){(function (){ +'use strict'; + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + process.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + process.nextTick(emitErrorNT, this, err); + } + } + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + process.nextTick(emitErrorAndCloseNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + process.nextTick(emitErrorAndCloseNT, _this, err); + } else { + process.nextTick(emitCloseNT, _this); + } + } else if (cb) { + process.nextTick(emitCloseNT, _this); + cb(err); + } else { + process.nextTick(emitCloseNT, _this); + } + }); + return this; +} +function emitErrorAndCloseNT(self, err) { + emitErrorNT(self, err); + emitCloseNT(self); +} +function emitCloseNT(self) { + if (self._writableState && !self._writableState.emitClose) return; + if (self._readableState && !self._readableState.emitClose) return; + self.emit('close'); +} +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} +function emitErrorNT(self, err) { + self.emit('error', err); +} +function errorOrDestroy(stream, err) { + // We have tests that rely on errors being emitted + // in the same tick, so changing this is semver major. + // For now when you opt-in to autoDestroy we allow + // the error to be emitted nextTick. In a future + // semver major update we should change the default to this. + + var rState = stream._readableState; + var wState = stream._writableState; + if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); +} +module.exports = { + destroy: destroy, + undestroy: undestroy, + errorOrDestroy: errorOrDestroy +}; + +}).call(this)}).call(this,require('_process')) + +},{"_process":306}],325:[function(require,module,exports){ +// Ported from https://github.com/mafintosh/end-of-stream with +// permission from the author, Mathias Buus (@mafintosh). + +'use strict'; + +var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE; +function once(callback) { + var called = false; + return function () { + if (called) return; + called = true; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + callback.apply(this, args); + }; +} +function noop() {} +function isRequest(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +} +function eos(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + callback = once(callback || noop); + var readable = opts.readable || opts.readable !== false && stream.readable; + var writable = opts.writable || opts.writable !== false && stream.writable; + var onlegacyfinish = function onlegacyfinish() { + if (!stream.writable) onfinish(); + }; + var writableEnded = stream._writableState && stream._writableState.finished; + var onfinish = function onfinish() { + writable = false; + writableEnded = true; + if (!readable) callback.call(stream); + }; + var readableEnded = stream._readableState && stream._readableState.endEmitted; + var onend = function onend() { + readable = false; + readableEnded = true; + if (!writable) callback.call(stream); + }; + var onerror = function onerror(err) { + callback.call(stream, err); + }; + var onclose = function onclose() { + var err; + if (readable && !readableEnded) { + if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + if (writable && !writableEnded) { + if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + }; + var onrequest = function onrequest() { + stream.req.on('finish', onfinish); + }; + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest();else stream.on('request', onrequest); + } else if (writable && !stream._writableState) { + // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); + return function () { + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; +} +module.exports = eos; + +},{"../../../errors":316}],326:[function(require,module,exports){ +"use strict"; + +module.exports = function () { + throw new Error('Readable.from is not available in the browser'); +}; + +},{}],327:[function(require,module,exports){ +// Ported from https://github.com/mafintosh/pump with +// permission from the author, Mathias Buus (@mafintosh). + +'use strict'; + +var eos; +function once(callback) { + var called = false; + return function () { + if (called) return; + called = true; + callback.apply(void 0, arguments); + }; +} +var _require$codes = require('../../../errors').codes, + ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; +function noop(err) { + // Rethrow the error if it exists to avoid swallowing it + if (err) throw err; +} +function isRequest(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +} +function destroyer(stream, reading, writing, callback) { + callback = once(callback); + var closed = false; + stream.on('close', function () { + closed = true; + }); + if (eos === undefined) eos = require('./end-of-stream'); + eos(stream, { + readable: reading, + writable: writing + }, function (err) { + if (err) return callback(err); + closed = true; + callback(); + }); + var destroyed = false; + return function (err) { + if (closed) return; + if (destroyed) return; + destroyed = true; + + // request.destroy just do .end - .abort is what we want + if (isRequest(stream)) return stream.abort(); + if (typeof stream.destroy === 'function') return stream.destroy(); + callback(err || new ERR_STREAM_DESTROYED('pipe')); + }; +} +function call(fn) { + fn(); +} +function pipe(from, to) { + return from.pipe(to); +} +function popCallback(streams) { + if (!streams.length) return noop; + if (typeof streams[streams.length - 1] !== 'function') return noop; + return streams.pop(); +} +function pipeline() { + for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { + streams[_key] = arguments[_key]; + } + var callback = popCallback(streams); + if (Array.isArray(streams[0])) streams = streams[0]; + if (streams.length < 2) { + throw new ERR_MISSING_ARGS('streams'); + } + var error; + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1; + var writing = i > 0; + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err; + if (err) destroys.forEach(call); + if (reading) return; + destroys.forEach(call); + callback(error); + }); + }); + return streams.reduce(pipe); +} +module.exports = pipeline; + +},{"../../../errors":316,"./end-of-stream":325}],328:[function(require,module,exports){ +'use strict'; + +var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE; +function highWaterMarkFrom(options, isDuplex, duplexKey) { + return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; +} +function getHighWaterMark(state, options, duplexKey, isDuplex) { + var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); + if (hwm != null) { + if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { + var name = isDuplex ? duplexKey : 'highWaterMark'; + throw new ERR_INVALID_OPT_VALUE(name, hwm); + } + return Math.floor(hwm); + } + + // Default value + return state.objectMode ? 16 : 16 * 1024; +} +module.exports = { + getHighWaterMark: getHighWaterMark +}; + +},{"../../../errors":316}],329:[function(require,module,exports){ +"use strict"; + +module.exports = require('events').EventEmitter; + +},{"events":261}],330:[function(require,module,exports){ +"use strict"; + +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); +exports.finished = require('./lib/internal/streams/end-of-stream.js'); +exports.pipeline = require('./lib/internal/streams/pipeline.js'); + +},{"./lib/_stream_duplex.js":317,"./lib/_stream_passthrough.js":318,"./lib/_stream_readable.js":319,"./lib/_stream_transform.js":320,"./lib/_stream_writable.js":321,"./lib/internal/streams/end-of-stream.js":325,"./lib/internal/streams/pipeline.js":327}],331:[function(require,module,exports){ +'use strict'; + +var Buffer = require('buffer').Buffer; +var inherits = require('inherits'); +var HashBase = require('hash-base'); +var ARRAY16 = new Array(16); +var zl = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]; +var zr = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]; +var sl = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]; +var sr = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]; +var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]; +var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]; +function RIPEMD160() { + HashBase.call(this, 64); + + // state + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; + this._e = 0xc3d2e1f0; +} +inherits(RIPEMD160, HashBase); +RIPEMD160.prototype._update = function () { + var words = ARRAY16; + for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4); + var al = this._a | 0; + var bl = this._b | 0; + var cl = this._c | 0; + var dl = this._d | 0; + var el = this._e | 0; + var ar = this._a | 0; + var br = this._b | 0; + var cr = this._c | 0; + var dr = this._d | 0; + var er = this._e | 0; + + // computation + for (var i = 0; i < 80; i += 1) { + var tl; + var tr; + if (i < 16) { + tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]); + tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]); + } else if (i < 32) { + tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]); + tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]); + } else if (i < 48) { + tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]); + tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]); + } else if (i < 64) { + tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]); + tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]); + } else { + // if (i<80) { + tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]); + tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]); + } + al = el; + el = dl; + dl = rotl(cl, 10); + cl = bl; + bl = tl; + ar = er; + er = dr; + dr = rotl(cr, 10); + cr = br; + br = tr; + } + + // update state + var t = this._b + cl + dr | 0; + this._b = this._c + dl + er | 0; + this._c = this._d + el + ar | 0; + this._d = this._e + al + br | 0; + this._e = this._a + bl + cr | 0; + this._a = t; +}; +RIPEMD160.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80; + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64); + this._update(); + this._blockOffset = 0; + } + this._block.fill(0, this._blockOffset, 56); + this._block.writeUInt32LE(this._length[0], 56); + this._block.writeUInt32LE(this._length[1], 60); + this._update(); + + // produce result + var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20); + buffer.writeInt32LE(this._a, 0); + buffer.writeInt32LE(this._b, 4); + buffer.writeInt32LE(this._c, 8); + buffer.writeInt32LE(this._d, 12); + buffer.writeInt32LE(this._e, 16); + return buffer; +}; +function rotl(x, n) { + return x << n | x >>> 32 - n; +} +function fn1(a, b, c, d, e, m, k, s) { + return rotl(a + (b ^ c ^ d) + m + k | 0, s) + e | 0; +} +function fn2(a, b, c, d, e, m, k, s) { + return rotl(a + (b & c | ~b & d) + m + k | 0, s) + e | 0; +} +function fn3(a, b, c, d, e, m, k, s) { + return rotl(a + ((b | ~c) ^ d) + m + k | 0, s) + e | 0; +} +function fn4(a, b, c, d, e, m, k, s) { + return rotl(a + (b & d | c & ~d) + m + k | 0, s) + e | 0; +} +function fn5(a, b, c, d, e, m, k, s) { + return rotl(a + (b ^ (c | ~d)) + m + k | 0, s) + e | 0; +} +module.exports = RIPEMD160; + +},{"buffer":220,"hash-base":264,"inherits":279}],332:[function(require,module,exports){ +"use strict"; + +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer'); +var Buffer = buffer.Buffer; + +// alternative to using Object.keys for old browsers +function copyProps(src, dst) { + for (var key in src) { + dst[key] = src[key]; + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer; +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports); + exports.Buffer = SafeBuffer; +} +function SafeBuffer(arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length); +} +SafeBuffer.prototype = Object.create(Buffer.prototype); + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer); +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number'); + } + return Buffer(arg, encodingOrOffset, length); +}; +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + var buf = Buffer(size); + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + } else { + buf.fill(0); + } + return buf; +}; +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + return Buffer(size); +}; +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + return buffer.SlowBuffer(size); +}; + +},{"buffer":220}],333:[function(require,module,exports){ +(function (process){(function (){ +/* eslint-disable node/no-deprecated-api */ + +'use strict'; + +var buffer = require('buffer'); +var Buffer = buffer.Buffer; +var safer = {}; +var key; +for (key in buffer) { + if (!buffer.hasOwnProperty(key)) continue; + if (key === 'SlowBuffer' || key === 'Buffer') continue; + safer[key] = buffer[key]; +} +var Safer = safer.Buffer = {}; +for (key in Buffer) { + if (!Buffer.hasOwnProperty(key)) continue; + if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue; + Safer[key] = Buffer[key]; +} +safer.Buffer.prototype = Buffer.prototype; +if (!Safer.from || Safer.from === Uint8Array.from) { + Safer.from = function (value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value); + } + if (value && typeof value.length === 'undefined') { + throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value); + } + return Buffer(value, encodingOrOffset, length); + }; +} +if (!Safer.alloc) { + Safer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size); + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"'); + } + var buf = Buffer(size); + if (!fill || fill.length === 0) { + buf.fill(0); + } else if (typeof encoding === 'string') { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + return buf; + }; +} +if (!safer.kStringMaxLength) { + try { + safer.kStringMaxLength = process.binding('buffer').kStringMaxLength; + } catch (e) { + // we can't determine kStringMaxLength in environments where process.binding + // is unsupported, so let's not set it + } +} +if (!safer.constants) { + safer.constants = { + MAX_LENGTH: safer.kMaxLength + }; + if (safer.kStringMaxLength) { + safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength; + } +} +module.exports = safer; + +}).call(this)}).call(this,require('_process')) + +},{"_process":306,"buffer":220}],334:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +const ed5 = require("xmlchars/xml/1.0/ed5"); +const ed2 = require("xmlchars/xml/1.1/ed2"); +const NSed3 = require("xmlchars/xmlns/1.0/ed3"); +var isS = ed5.isS; +var isChar10 = ed5.isChar; +var isNameStartChar = ed5.isNameStartChar; +var isNameChar = ed5.isNameChar; +var S_LIST = ed5.S_LIST; +var NAME_RE = ed5.NAME_RE; +var isChar11 = ed2.isChar; +var isNCNameStartChar = NSed3.isNCNameStartChar; +var isNCNameChar = NSed3.isNCNameChar; +var NC_NAME_RE = NSed3.NC_NAME_RE; +const XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"; +const XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/"; +const rootNS = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + __proto__: null, + xml: XML_NAMESPACE, + xmlns: XMLNS_NAMESPACE +}; +const XML_ENTITIES = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + __proto__: null, + amp: "&", + gt: ">", + lt: "<", + quot: "\"", + apos: "'" +}; +// EOC: end-of-chunk +const EOC = -1; +const NL_LIKE = -2; +const S_BEGIN = 0; // Initial state. +const S_BEGIN_WHITESPACE = 1; // leading whitespace +const S_DOCTYPE = 2; // +const TAB = 9; +const NL = 0xA; +const CR = 0xD; +const SPACE = 0x20; +const BANG = 0x21; +const DQUOTE = 0x22; +const AMP = 0x26; +const SQUOTE = 0x27; +const MINUS = 0x2D; +const FORWARD_SLASH = 0x2F; +const SEMICOLON = 0x3B; +const LESS = 0x3C; +const EQUAL = 0x3D; +const GREATER = 0x3E; +const QUESTION = 0x3F; +const OPEN_BRACKET = 0x5B; +const CLOSE_BRACKET = 0x5D; +const NEL = 0x85; +const LS = 0x2028; // Line Separator +const isQuote = c => c === DQUOTE || c === SQUOTE; +const QUOTES = [DQUOTE, SQUOTE]; +const DOCTYPE_TERMINATOR = [...QUOTES, OPEN_BRACKET, GREATER]; +const DTD_TERMINATOR = [...QUOTES, LESS, CLOSE_BRACKET]; +const XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION, ...S_LIST]; +const ATTRIB_VALUE_UNQUOTED_TERMINATOR = [...S_LIST, GREATER, AMP, LESS]; +function nsPairCheck(parser, prefix, uri) { + switch (prefix) { + case "xml": + if (uri !== XML_NAMESPACE) { + parser.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`); + } + break; + case "xmlns": + if (uri !== XMLNS_NAMESPACE) { + parser.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`); + } + break; + default: + } + switch (uri) { + case XMLNS_NAMESPACE: + parser.fail(prefix === "" ? `the default namespace may not be set to ${uri}.` : `may not assign a prefix (even "xmlns") to the URI \ +${XMLNS_NAMESPACE}.`); + break; + case XML_NAMESPACE: + switch (prefix) { + case "xml": + // Assinging the XML namespace to "xml" is fine. + break; + case "": + parser.fail(`the default namespace may not be set to ${uri}.`); + break; + default: + parser.fail("may not assign the xml namespace to another prefix."); + } + break; + default: + } +} +function nsMappingCheck(parser, mapping) { + for (const local of Object.keys(mapping)) { + nsPairCheck(parser, local, mapping[local]); + } +} +const isNCName = name => NC_NAME_RE.test(name); +const isName = name => NAME_RE.test(name); +const FORBIDDEN_START = 0; +const FORBIDDEN_BRACKET = 1; +const FORBIDDEN_BRACKET_BRACKET = 2; +/** + * The list of supported events. + */ +exports.EVENTS = ["xmldecl", "text", "processinginstruction", "doctype", "comment", "opentagstart", "attribute", "opentag", "closetag", "cdata", "error", "end", "ready"]; +const EVENT_NAME_TO_HANDLER_NAME = { + xmldecl: "xmldeclHandler", + text: "textHandler", + processinginstruction: "piHandler", + doctype: "doctypeHandler", + comment: "commentHandler", + opentagstart: "openTagStartHandler", + attribute: "attributeHandler", + opentag: "openTagHandler", + closetag: "closeTagHandler", + cdata: "cdataHandler", + error: "errorHandler", + end: "endHandler", + ready: "readyHandler" +}; +class SaxesParser { + /** + * @param opt The parser options. + */ + constructor(opt) { + this.opt = opt !== null && opt !== void 0 ? opt : {}; + this.fragmentOpt = !!this.opt.fragment; + const xmlnsOpt = this.xmlnsOpt = !!this.opt.xmlns; + this.trackPosition = this.opt.position !== false; + this.fileName = this.opt.fileName; + if (xmlnsOpt) { + // This is the function we use to perform name checks on PIs and entities. + // When namespaces are used, colons are not allowed in PI target names or + // entity names. So the check depends on whether namespaces are used. See: + // + // https://www.w3.org/XML/xml-names-19990114-errata.html + // NE08 + // + this.nameStartCheck = isNCNameStartChar; + this.nameCheck = isNCNameChar; + this.isName = isNCName; + // eslint-disable-next-line @typescript-eslint/unbound-method + this.processAttribs = this.processAttribsNS; + // eslint-disable-next-line @typescript-eslint/unbound-method + this.pushAttrib = this.pushAttribNS; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.ns = Object.assign({ + __proto__: null + }, rootNS); + const additional = this.opt.additionalNamespaces; + if (additional != null) { + nsMappingCheck(this, additional); + Object.assign(this.ns, additional); + } + } else { + this.nameStartCheck = isNameStartChar; + this.nameCheck = isNameChar; + this.isName = isName; + // eslint-disable-next-line @typescript-eslint/unbound-method + this.processAttribs = this.processAttribsPlain; + // eslint-disable-next-line @typescript-eslint/unbound-method + this.pushAttrib = this.pushAttribPlain; + } + // + // The order of the members in this table needs to correspond to the state + // numbers given to the states that correspond to the methods being recorded + // here. + // + this.stateTable = [/* eslint-disable @typescript-eslint/unbound-method */ + this.sBegin, this.sBeginWhitespace, this.sDoctype, this.sDoctypeQuote, this.sDTD, this.sDTDQuoted, this.sDTDOpenWaka, this.sDTDOpenWakaBang, this.sDTDComment, this.sDTDCommentEnding, this.sDTDCommentEnded, this.sDTDPI, this.sDTDPIEnding, this.sText, this.sEntity, this.sOpenWaka, this.sOpenWakaBang, this.sComment, this.sCommentEnding, this.sCommentEnded, this.sCData, this.sCDataEnding, this.sCDataEnding2, this.sPIFirstChar, this.sPIRest, this.sPIBody, this.sPIEnding, this.sXMLDeclNameStart, this.sXMLDeclName, this.sXMLDeclEq, this.sXMLDeclValueStart, this.sXMLDeclValue, this.sXMLDeclSeparator, this.sXMLDeclEnding, this.sOpenTag, this.sOpenTagSlash, this.sAttrib, this.sAttribName, this.sAttribNameSawWhite, this.sAttribValue, this.sAttribValueQuoted, this.sAttribValueClosed, this.sAttribValueUnquoted, this.sCloseTag, this.sCloseTagSawWhite]; + this._init(); + } + /** + * Indicates whether or not the parser is closed. If ``true``, wait for + * the ``ready`` event to write again. + */ + get closed() { + return this._closed; + } + _init() { + var _a; + this.openWakaBang = ""; + this.text = ""; + this.name = ""; + this.piTarget = ""; + this.entity = ""; + this.q = null; + this.tags = []; + this.tag = null; + this.topNS = null; + this.chunk = ""; + this.chunkPosition = 0; + this.i = 0; + this.prevI = 0; + this.carriedFromPrevious = undefined; + this.forbiddenState = FORBIDDEN_START; + this.attribList = []; + // The logic is organized so as to minimize the need to check + // this.opt.fragment while parsing. + const { + fragmentOpt + } = this; + this.state = fragmentOpt ? S_TEXT : S_BEGIN; + // We want these to be all true if we are dealing with a fragment. + this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot = this.sawRoot = fragmentOpt; + // An XML declaration is intially possible only when parsing whole + // documents. + this.xmlDeclPossible = !fragmentOpt; + this.xmlDeclExpects = ["version"]; + this.entityReturnState = undefined; + let { + defaultXMLVersion + } = this.opt; + if (defaultXMLVersion === undefined) { + if (this.opt.forceXMLVersion === true) { + throw new Error("forceXMLVersion set but defaultXMLVersion is not set"); + } + defaultXMLVersion = "1.0"; + } + this.setXMLVersion(defaultXMLVersion); + this.positionAtNewLine = 0; + this.doctype = false; + this._closed = false; + this.xmlDecl = { + version: undefined, + encoding: undefined, + standalone: undefined + }; + this.line = 1; + this.column = 0; + this.ENTITIES = Object.create(XML_ENTITIES); + // eslint-disable-next-line no-unused-expressions + (_a = this.readyHandler) === null || _a === void 0 ? void 0 : _a.call(this); + } + /** + * The stream position the parser is currently looking at. This field is + * zero-based. + * + * This field is not based on counting Unicode characters but is to be + * interpreted as a plain index into a JavaScript string. + */ + get position() { + return this.chunkPosition + this.i; + } + /** + * The column number of the next character to be read by the parser. * + * This field is zero-based. (The first column in a line is 0.) + * + * This field reports the index at which the next character would be in the + * line if the line were represented as a JavaScript string. Note that this + * *can* be different to a count based on the number of *Unicode characters* + * due to how JavaScript handles astral plane characters. + * + * See [[column]] for a number that corresponds to a count of Unicode + * characters. + */ + get columnIndex() { + return this.position - this.positionAtNewLine; + } + /** + * Set an event listener on an event. The parser supports one handler per + * event type. If you try to set an event handler over an existing handler, + * the old handler is silently overwritten. + * + * @param name The event to listen to. + * + * @param handler The handler to set. + */ + on(name, handler) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this[EVENT_NAME_TO_HANDLER_NAME[name]] = handler; + } + /** + * Unset an event handler. + * + * @parma name The event to stop listening to. + */ + off(name) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this[EVENT_NAME_TO_HANDLER_NAME[name]] = undefined; + } + /** + * Make an error object. The error object will have a message that contains + * the ``fileName`` option passed at the creation of the parser. If position + * tracking was turned on, it will also have line and column number + * information. + * + * @param message The message describing the error to report. + * + * @returns An error object with a properly formatted message. + */ + makeError(message) { + var _a; + let msg = (_a = this.fileName) !== null && _a !== void 0 ? _a : ""; + if (this.trackPosition) { + if (msg.length > 0) { + msg += ":"; + } + msg += `${this.line}:${this.column}`; + } + if (msg.length > 0) { + msg += ": "; + } + return new Error(msg + message); + } + /** + * Report a parsing error. This method is made public so that client code may + * check for issues that are outside the scope of this project and can report + * errors. + * + * @param message The error to report. + * + * @returns this + */ + fail(message) { + const err = this.makeError(message); + const handler = this.errorHandler; + if (handler === undefined) { + throw err; + } else { + handler(err); + } + return this; + } + /** + * Write a XML data to the parser. + * + * @param chunk The XML data to write. + * + * @returns this + */ + write(chunk) { + if (this.closed) { + return this.fail("cannot write after close; assign an onready handler."); + } + let end = false; + if (chunk === null) { + // We cannot return immediately because carriedFromPrevious may need + // processing. + end = true; + chunk = ""; + } else if (typeof chunk === "object") { + chunk = chunk.toString(); + } + // We checked if performing a pre-decomposition of the string into an array + // of single complete characters (``Array.from(chunk)``) would be faster + // than the current repeated calls to ``charCodeAt``. As of August 2018, it + // isn't. (There may be Node-specific code that would perform faster than + // ``Array.from`` but don't want to be dependent on Node.) + if (this.carriedFromPrevious !== undefined) { + // The previous chunk had char we must carry over. + chunk = `${this.carriedFromPrevious}${chunk}`; + this.carriedFromPrevious = undefined; + } + let limit = chunk.length; + const lastCode = chunk.charCodeAt(limit - 1); + if (!end && ( + // A trailing CR or surrogate must be carried over to the next + // chunk. + lastCode === CR || lastCode >= 0xD800 && lastCode <= 0xDBFF)) { + // The chunk ends with a character that must be carried over. We cannot + // know how to handle it until we get the next chunk or the end of the + // stream. So save it for later. + this.carriedFromPrevious = chunk[limit - 1]; + limit--; + chunk = chunk.slice(0, limit); + } + const { + stateTable + } = this; + this.chunk = chunk; + this.i = 0; + while (this.i < limit) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + stateTable[this.state].call(this); + } + this.chunkPosition += limit; + return end ? this.end() : this; + } + /** + * Close the current stream. Perform final well-formedness checks and reset + * the parser tstate. + * + * @returns this + */ + close() { + return this.write(null); + } + /** + * Get a single code point out of the current chunk. This updates the current + * position if we do position tracking. + * + * This is the algorithm to use for XML 1.0. + * + * @returns The character read. + */ + getCode10() { + const { + chunk, + i + } = this; + this.prevI = i; + // Yes, we do this instead of doing this.i++. Doing it this way, we do not + // read this.i again, which is a bit faster. + this.i = i + 1; + if (i >= chunk.length) { + return EOC; + } + // Using charCodeAt and handling the surrogates ourselves is faster + // than using codePointAt. + const code = chunk.charCodeAt(i); + this.column++; + if (code < 0xD800) { + if (code >= SPACE || code === TAB) { + return code; + } + switch (code) { + case NL: + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL; + case CR: + // We may get NaN if we read past the end of the chunk, which is fine. + if (chunk.charCodeAt(i + 1) === NL) { + // A \r\n sequence is converted to \n so we have to skip over the + // next character. We already know it has a size of 1 so ++ is fine + // here. + this.i = i + 2; + } + // Otherwise, a \r is just converted to \n, so we don't have to skip + // ahead. + // In either case, \r becomes \n. + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL_LIKE; + default: + // If we get here, then code < SPACE and it is not NL CR or TAB. + this.fail("disallowed character."); + return code; + } + } + if (code > 0xDBFF) { + // This is a specialized version of isChar10 that takes into account + // that in this context code > 0xDBFF and code <= 0xFFFF. So it does not + // test cases that don't need testing. + if (!(code >= 0xE000 && code <= 0xFFFD)) { + this.fail("disallowed character."); + } + return code; + } + const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00); + this.i = i + 2; + // This is a specialized version of isChar10 that takes into account that in + // this context necessarily final >= 0x10000. + if (final > 0x10FFFF) { + this.fail("disallowed character."); + } + return final; + } + /** + * Get a single code point out of the current chunk. This updates the current + * position if we do position tracking. + * + * This is the algorithm to use for XML 1.1. + * + * @returns {number} The character read. + */ + getCode11() { + const { + chunk, + i + } = this; + this.prevI = i; + // Yes, we do this instead of doing this.i++. Doing it this way, we do not + // read this.i again, which is a bit faster. + this.i = i + 1; + if (i >= chunk.length) { + return EOC; + } + // Using charCodeAt and handling the surrogates ourselves is faster + // than using codePointAt. + const code = chunk.charCodeAt(i); + this.column++; + if (code < 0xD800) { + if (code > 0x1F && code < 0x7F || code > 0x9F && code !== LS || code === TAB) { + return code; + } + switch (code) { + case NL: + // 0xA + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL; + case CR: + { + // 0xD + // We may get NaN if we read past the end of the chunk, which is + // fine. + const next = chunk.charCodeAt(i + 1); + if (next === NL || next === NEL) { + // A CR NL or CR NEL sequence is converted to NL so we have to skip + // over the next character. We already know it has a size of 1. + this.i = i + 2; + } + // Otherwise, a CR is just converted to NL, no skip. + } + /* yes, fall through */ + case NEL: // 0x85 + case LS: + // Ox2028 + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL_LIKE; + default: + this.fail("disallowed character."); + return code; + } + } + if (code > 0xDBFF) { + // This is a specialized version of isCharAndNotRestricted that takes into + // account that in this context code > 0xDBFF and code <= 0xFFFF. So it + // does not test cases that don't need testing. + if (!(code >= 0xE000 && code <= 0xFFFD)) { + this.fail("disallowed character."); + } + return code; + } + const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00); + this.i = i + 2; + // This is a specialized version of isCharAndNotRestricted that takes into + // account that in this context necessarily final >= 0x10000. + if (final > 0x10FFFF) { + this.fail("disallowed character."); + } + return final; + } + /** + * Like ``getCode`` but with the return value normalized so that ``NL`` is + * returned for ``NL_LIKE``. + */ + getCodeNorm() { + const c = this.getCode(); + return c === NL_LIKE ? NL : c; + } + unget() { + this.i = this.prevI; + this.column--; + } + /** + * Capture characters into a buffer until encountering one of a set of + * characters. + * + * @param chars An array of codepoints. Encountering a character in the array + * ends the capture. (``chars`` may safely contain ``NL``.) + * + * @return The character code that made the capture end, or ``EOC`` if we hit + * the end of the chunk. The return value cannot be NL_LIKE: NL is returned + * instead. + */ + captureTo(chars) { + let { + i: start + } = this; + const { + chunk + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + const c = this.getCode(); + const isNLLike = c === NL_LIKE; + const final = isNLLike ? NL : c; + if (final === EOC || chars.includes(final)) { + this.text += chunk.slice(start, this.prevI); + return final; + } + if (isNLLike) { + this.text += `${chunk.slice(start, this.prevI)}\n`; + start = this.i; + } + } + } + /** + * Capture characters into a buffer until encountering a character. + * + * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT + * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior. + * + * @return ``true`` if we ran into the character. Otherwise, we ran into the + * end of the current chunk. + */ + captureToChar(char) { + let { + i: start + } = this; + const { + chunk + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + let c = this.getCode(); + switch (c) { + case NL_LIKE: + this.text += `${chunk.slice(start, this.prevI)}\n`; + start = this.i; + c = NL; + break; + case EOC: + this.text += chunk.slice(start); + return false; + default: + } + if (c === char) { + this.text += chunk.slice(start, this.prevI); + return true; + } + } + } + /** + * Capture characters that satisfy ``isNameChar`` into the ``name`` field of + * this parser. + * + * @return The character code that made the test fail, or ``EOC`` if we hit + * the end of the chunk. The return value cannot be NL_LIKE: NL is returned + * instead. + */ + captureNameChars() { + const { + chunk, + i: start + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + const c = this.getCode(); + if (c === EOC) { + this.name += chunk.slice(start); + return EOC; + } + // NL is not a name char so we don't have to test specifically for it. + if (!isNameChar(c)) { + this.name += chunk.slice(start, this.prevI); + return c === NL_LIKE ? NL : c; + } + } + } + /** + * Skip white spaces. + * + * @return The character that ended the skip, or ``EOC`` if we hit + * the end of the chunk. The return value cannot be NL_LIKE: NL is returned + * instead. + */ + skipSpaces() { + // eslint-disable-next-line no-constant-condition + while (true) { + const c = this.getCodeNorm(); + if (c === EOC || !isS(c)) { + return c; + } + } + } + setXMLVersion(version) { + this.currentXMLVersion = version; + /* eslint-disable @typescript-eslint/unbound-method */ + if (version === "1.0") { + this.isChar = isChar10; + this.getCode = this.getCode10; + } else { + this.isChar = isChar11; + this.getCode = this.getCode11; + } + /* eslint-enable @typescript-eslint/unbound-method */ + } + // STATE ENGINE METHODS + // This needs to be a state separate from S_BEGIN_WHITESPACE because we want + // to be sure never to come back to this state later. + sBegin() { + // We are essentially peeking at the first character of the chunk. Since + // S_BEGIN can be in effect only when we start working on the first chunk, + // the index at which we must look is necessarily 0. Note also that the + // following test does not depend on decoding surrogates. + // If the initial character is 0xFEFF, ignore it. + if (this.chunk.charCodeAt(0) === 0xFEFF) { + this.i++; + this.column++; + } + this.state = S_BEGIN_WHITESPACE; + } + sBeginWhitespace() { + // We need to know whether we've encountered spaces or not because as soon + // as we run into a space, an XML declaration is no longer possible. Rather + // than slow down skipSpaces even in places where we don't care whether it + // skipped anything or not, we check whether prevI is equal to the value of + // i from before we skip spaces. + const iBefore = this.i; + const c = this.skipSpaces(); + if (this.prevI !== iBefore) { + this.xmlDeclPossible = false; + } + switch (c) { + case LESS: + this.state = S_OPEN_WAKA; + // We could naively call closeText but in this state, it is not normal + // to have text be filled with any data. + if (this.text.length !== 0) { + throw new Error("no-empty text at start"); + } + break; + case EOC: + break; + default: + this.unget(); + this.state = S_TEXT; + this.xmlDeclPossible = false; + } + } + sDoctype() { + var _a; + const c = this.captureTo(DOCTYPE_TERMINATOR); + switch (c) { + case GREATER: + { + // eslint-disable-next-line no-unused-expressions + (_a = this.doctypeHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text); + this.text = ""; + this.state = S_TEXT; + this.doctype = true; // just remember that we saw it. + break; + } + case EOC: + break; + default: + this.text += String.fromCodePoint(c); + if (c === OPEN_BRACKET) { + this.state = S_DTD; + } else if (isQuote(c)) { + this.state = S_DOCTYPE_QUOTE; + this.q = c; + } + } + } + sDoctypeQuote() { + const q = this.q; + if (this.captureToChar(q)) { + this.text += String.fromCodePoint(q); + this.q = null; + this.state = S_DOCTYPE; + } + } + sDTD() { + const c = this.captureTo(DTD_TERMINATOR); + if (c === EOC) { + return; + } + this.text += String.fromCodePoint(c); + if (c === CLOSE_BRACKET) { + this.state = S_DOCTYPE; + } else if (c === LESS) { + this.state = S_DTD_OPEN_WAKA; + } else if (isQuote(c)) { + this.state = S_DTD_QUOTED; + this.q = c; + } + } + sDTDQuoted() { + const q = this.q; + if (this.captureToChar(q)) { + this.text += String.fromCodePoint(q); + this.state = S_DTD; + this.q = null; + } + } + sDTDOpenWaka() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + switch (c) { + case BANG: + this.state = S_DTD_OPEN_WAKA_BANG; + this.openWakaBang = ""; + break; + case QUESTION: + this.state = S_DTD_PI; + break; + default: + this.state = S_DTD; + } + } + sDTDOpenWakaBang() { + const char = String.fromCodePoint(this.getCodeNorm()); + const owb = this.openWakaBang += char; + this.text += char; + if (owb !== "-") { + this.state = owb === "--" ? S_DTD_COMMENT : S_DTD; + this.openWakaBang = ""; + } + } + sDTDComment() { + if (this.captureToChar(MINUS)) { + this.text += "-"; + this.state = S_DTD_COMMENT_ENDING; + } + } + sDTDCommentEnding() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT; + } + sDTDCommentEnded() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + if (c === GREATER) { + this.state = S_DTD; + } else { + this.fail("malformed comment."); + // will be recorded as + // a comment of " blah -- bloo " + this.state = S_DTD_COMMENT; + } + } + sDTDPI() { + if (this.captureToChar(QUESTION)) { + this.text += "?"; + this.state = S_DTD_PI_ENDING; + } + } + sDTDPIEnding() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + if (c === GREATER) { + this.state = S_DTD; + } + } + sText() { + // + // We did try a version of saxes where the S_TEXT state was split in two + // states: one for text inside the root element, and one for text + // outside. This was avoiding having to test this.tags.length to decide + // what implementation to actually use. + // + // Peformance testing on gigabyte-size files did not show any advantage to + // using the two states solution instead of the current one. Conversely, it + // made the code a bit more complicated elsewhere. For instance, a comment + // can appear before the root element so when a comment ended it was + // necessary to determine whether to return to the S_TEXT state or to the + // new text-outside-root state. + // + if (this.tags.length !== 0) { + this.handleTextInRoot(); + } else { + this.handleTextOutsideRoot(); + } + } + sEntity() { + // This is essentially a specialized version of captureToChar(SEMICOLON...) + let { + i: start + } = this; + const { + chunk + } = this; + // eslint-disable-next-line no-labels, no-restricted-syntax + loop: + // eslint-disable-next-line no-constant-condition + while (true) { + switch (this.getCode()) { + case NL_LIKE: + this.entity += `${chunk.slice(start, this.prevI)}\n`; + start = this.i; + break; + case SEMICOLON: + { + const { + entityReturnState + } = this; + const entity = this.entity + chunk.slice(start, this.prevI); + this.state = entityReturnState; + let parsed; + if (entity === "") { + this.fail("empty entity name."); + parsed = "&;"; + } else { + parsed = this.parseEntity(entity); + this.entity = ""; + } + if (entityReturnState !== S_TEXT || this.textHandler !== undefined) { + this.text += parsed; + } + // eslint-disable-next-line no-labels + break loop; + } + case EOC: + this.entity += chunk.slice(start); + // eslint-disable-next-line no-labels + break loop; + default: + } + } + } + sOpenWaka() { + // Reminder: a state handler is called with at least one character + // available in the current chunk. So the first call to get code inside of + // a state handler cannot return ``EOC``. That's why we don't test + // for it. + const c = this.getCode(); + // either a /, ?, !, or text is coming next. + if (isNameStartChar(c)) { + this.state = S_OPEN_TAG; + this.unget(); + this.xmlDeclPossible = false; + } else { + switch (c) { + case FORWARD_SLASH: + this.state = S_CLOSE_TAG; + this.xmlDeclPossible = false; + break; + case BANG: + this.state = S_OPEN_WAKA_BANG; + this.openWakaBang = ""; + this.xmlDeclPossible = false; + break; + case QUESTION: + this.state = S_PI_FIRST_CHAR; + break; + default: + this.fail("disallowed character in tag name"); + this.state = S_TEXT; + this.xmlDeclPossible = false; + } + } + } + sOpenWakaBang() { + this.openWakaBang += String.fromCodePoint(this.getCodeNorm()); + switch (this.openWakaBang) { + case "[CDATA[": + if (!this.sawRoot && !this.reportedTextBeforeRoot) { + this.fail("text data outside of root node."); + this.reportedTextBeforeRoot = true; + } + if (this.closedRoot && !this.reportedTextAfterRoot) { + this.fail("text data outside of root node."); + this.reportedTextAfterRoot = true; + } + this.state = S_CDATA; + this.openWakaBang = ""; + break; + case "--": + this.state = S_COMMENT; + this.openWakaBang = ""; + break; + case "DOCTYPE": + this.state = S_DOCTYPE; + if (this.doctype || this.sawRoot) { + this.fail("inappropriately located doctype declaration."); + } + this.openWakaBang = ""; + break; + default: + // 7 happens to be the maximum length of the string that can possibly + // match one of the cases above. + if (this.openWakaBang.length >= 7) { + this.fail("incorrect syntax."); + } + } + } + sComment() { + if (this.captureToChar(MINUS)) { + this.state = S_COMMENT_ENDING; + } + } + sCommentEnding() { + var _a; + const c = this.getCodeNorm(); + if (c === MINUS) { + this.state = S_COMMENT_ENDED; + // eslint-disable-next-line no-unused-expressions + (_a = this.commentHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text); + this.text = ""; + } else { + this.text += `-${String.fromCodePoint(c)}`; + this.state = S_COMMENT; + } + } + sCommentEnded() { + const c = this.getCodeNorm(); + if (c !== GREATER) { + this.fail("malformed comment."); + // will be recorded as + // a comment of " blah -- bloo " + this.text += `--${String.fromCodePoint(c)}`; + this.state = S_COMMENT; + } else { + this.state = S_TEXT; + } + } + sCData() { + if (this.captureToChar(CLOSE_BRACKET)) { + this.state = S_CDATA_ENDING; + } + } + sCDataEnding() { + const c = this.getCodeNorm(); + if (c === CLOSE_BRACKET) { + this.state = S_CDATA_ENDING_2; + } else { + this.text += `]${String.fromCodePoint(c)}`; + this.state = S_CDATA; + } + } + sCDataEnding2() { + var _a; + const c = this.getCodeNorm(); + switch (c) { + case GREATER: + { + // eslint-disable-next-line no-unused-expressions + (_a = this.cdataHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text); + this.text = ""; + this.state = S_TEXT; + break; + } + case CLOSE_BRACKET: + this.text += "]"; + break; + default: + this.text += `]]${String.fromCodePoint(c)}`; + this.state = S_CDATA; + } + } + // We need this separate state to check the first character fo the pi target + // with this.nameStartCheck which allows less characters than this.nameCheck. + sPIFirstChar() { + const c = this.getCodeNorm(); + // This is first because in the case where the file is well-formed this is + // the branch taken. We optimize for well-formedness. + if (this.nameStartCheck(c)) { + this.piTarget += String.fromCodePoint(c); + this.state = S_PI_REST; + } else if (c === QUESTION || isS(c)) { + this.fail("processing instruction without a target."); + this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY; + } else { + this.fail("disallowed character in processing instruction name."); + this.piTarget += String.fromCodePoint(c); + this.state = S_PI_REST; + } + } + sPIRest() { + // Capture characters into a piTarget while ``this.nameCheck`` run on the + // character read returns true. + const { + chunk, + i: start + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + const c = this.getCodeNorm(); + if (c === EOC) { + this.piTarget += chunk.slice(start); + return; + } + // NL cannot satisfy this.nameCheck so we don't have to test specifically + // for it. + if (!this.nameCheck(c)) { + this.piTarget += chunk.slice(start, this.prevI); + const isQuestion = c === QUESTION; + if (isQuestion || isS(c)) { + if (this.piTarget === "xml") { + if (!this.xmlDeclPossible) { + this.fail("an XML declaration must be at the start of the document."); + } + this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START; + } else { + this.state = isQuestion ? S_PI_ENDING : S_PI_BODY; + } + } else { + this.fail("disallowed character in processing instruction name."); + this.piTarget += String.fromCodePoint(c); + } + break; + } + } + } + sPIBody() { + if (this.text.length === 0) { + const c = this.getCodeNorm(); + if (c === QUESTION) { + this.state = S_PI_ENDING; + } else if (!isS(c)) { + this.text = String.fromCodePoint(c); + } + } + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + else if (this.captureToChar(QUESTION)) { + this.state = S_PI_ENDING; + } + } + sPIEnding() { + var _a; + const c = this.getCodeNorm(); + if (c === GREATER) { + const { + piTarget + } = this; + if (piTarget.toLowerCase() === "xml") { + this.fail("the XML declaration must appear at the start of the document."); + } + // eslint-disable-next-line no-unused-expressions + (_a = this.piHandler) === null || _a === void 0 ? void 0 : _a.call(this, { + target: piTarget, + body: this.text + }); + this.piTarget = this.text = ""; + this.state = S_TEXT; + } else if (c === QUESTION) { + // We ran into ?? as part of a processing instruction. We initially took + // the first ? as a sign that the PI was ending, but it is not. So we have + // to add it to the body but we take the new ? as a sign that the PI is + // ending. + this.text += "?"; + } else { + this.text += `?${String.fromCodePoint(c)}`; + this.state = S_PI_BODY; + } + this.xmlDeclPossible = false; + } + sXMLDeclNameStart() { + const c = this.skipSpaces(); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + // It is valid to go to S_XML_DECL_ENDING from this state. + this.state = S_XML_DECL_ENDING; + return; + } + if (c !== EOC) { + this.state = S_XML_DECL_NAME; + this.name = String.fromCodePoint(c); + } + } + sXMLDeclName() { + const c = this.captureTo(XML_DECL_NAME_TERMINATOR); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.name += this.text; + this.text = ""; + this.fail("XML declaration is incomplete."); + return; + } + if (!(isS(c) || c === EQUAL)) { + return; + } + this.name += this.text; + this.text = ""; + if (!this.xmlDeclExpects.includes(this.name)) { + switch (this.name.length) { + case 0: + this.fail("did not expect any more name/value pairs."); + break; + case 1: + this.fail(`expected the name ${this.xmlDeclExpects[0]}.`); + break; + default: + this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`); + } + } + this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ; + } + sXMLDeclEq() { + const c = this.getCodeNorm(); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.fail("XML declaration is incomplete."); + return; + } + if (isS(c)) { + return; + } + if (c !== EQUAL) { + this.fail("value required."); + } + this.state = S_XML_DECL_VALUE_START; + } + sXMLDeclValueStart() { + const c = this.getCodeNorm(); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.fail("XML declaration is incomplete."); + return; + } + if (isS(c)) { + return; + } + if (!isQuote(c)) { + this.fail("value must be quoted."); + this.q = SPACE; + } else { + this.q = c; + } + this.state = S_XML_DECL_VALUE; + } + sXMLDeclValue() { + const c = this.captureTo([this.q, QUESTION]); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.text = ""; + this.fail("XML declaration is incomplete."); + return; + } + if (c === EOC) { + return; + } + const value = this.text; + this.text = ""; + switch (this.name) { + case "version": + { + this.xmlDeclExpects = ["encoding", "standalone"]; + const version = value; + this.xmlDecl.version = version; + // This is the test specified by XML 1.0 but it is fine for XML 1.1. + if (!/^1\.[0-9]+$/.test(version)) { + this.fail("version number must match /^1\\.[0-9]+$/."); + } + // When forceXMLVersion is set, the XML declaration is ignored. + else if (!this.opt.forceXMLVersion) { + this.setXMLVersion(version); + } + break; + } + case "encoding": + if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) { + this.fail("encoding value must match \ +/^[A-Za-z0-9][A-Za-z0-9._-]*$/."); + } + this.xmlDeclExpects = ["standalone"]; + this.xmlDecl.encoding = value; + break; + case "standalone": + if (value !== "yes" && value !== "no") { + this.fail("standalone value must match \"yes\" or \"no\"."); + } + this.xmlDeclExpects = []; + this.xmlDecl.standalone = value; + break; + default: + // We don't need to raise an error here since we've already raised one + // when checking what name was expected. + } + + this.name = ""; + this.state = S_XML_DECL_SEPARATOR; + } + sXMLDeclSeparator() { + const c = this.getCodeNorm(); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + // It is valid to go to S_XML_DECL_ENDING from this state. + this.state = S_XML_DECL_ENDING; + return; + } + if (!isS(c)) { + this.fail("whitespace required."); + this.unget(); + } + this.state = S_XML_DECL_NAME_START; + } + sXMLDeclEnding() { + var _a; + const c = this.getCodeNorm(); + if (c === GREATER) { + if (this.piTarget !== "xml") { + this.fail("processing instructions are not allowed before root."); + } else if (this.name !== "version" && this.xmlDeclExpects.includes("version")) { + this.fail("XML declaration must contain a version."); + } + // eslint-disable-next-line no-unused-expressions + (_a = this.xmldeclHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.xmlDecl); + this.name = ""; + this.piTarget = this.text = ""; + this.state = S_TEXT; + } else { + // We got here because the previous character was a ?, but the question + // mark character is not valid inside any of the XML declaration + // name/value pairs. + this.fail("The character ? is disallowed anywhere in XML declarations."); + } + this.xmlDeclPossible = false; + } + sOpenTag() { + var _a; + const c = this.captureNameChars(); + if (c === EOC) { + return; + } + const tag = this.tag = { + name: this.name, + attributes: Object.create(null) + }; + this.name = ""; + if (this.xmlnsOpt) { + this.topNS = tag.ns = Object.create(null); + } + // eslint-disable-next-line no-unused-expressions + (_a = this.openTagStartHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag); + this.sawRoot = true; + if (!this.fragmentOpt && this.closedRoot) { + this.fail("documents may contain only one root."); + } + switch (c) { + case GREATER: + this.openTag(); + break; + case FORWARD_SLASH: + this.state = S_OPEN_TAG_SLASH; + break; + default: + if (!isS(c)) { + this.fail("disallowed character in tag name."); + } + this.state = S_ATTRIB; + } + } + sOpenTagSlash() { + if (this.getCode() === GREATER) { + this.openSelfClosingTag(); + } else { + this.fail("forward-slash in opening tag not followed by >."); + this.state = S_ATTRIB; + } + } + sAttrib() { + const c = this.skipSpaces(); + if (c === EOC) { + return; + } + if (isNameStartChar(c)) { + this.unget(); + this.state = S_ATTRIB_NAME; + } else if (c === GREATER) { + this.openTag(); + } else if (c === FORWARD_SLASH) { + this.state = S_OPEN_TAG_SLASH; + } else { + this.fail("disallowed character in attribute name."); + } + } + sAttribName() { + const c = this.captureNameChars(); + if (c === EQUAL) { + this.state = S_ATTRIB_VALUE; + } else if (isS(c)) { + this.state = S_ATTRIB_NAME_SAW_WHITE; + } else if (c === GREATER) { + this.fail("attribute without value."); + this.pushAttrib(this.name, this.name); + this.name = this.text = ""; + this.openTag(); + } else if (c !== EOC) { + this.fail("disallowed character in attribute name."); + } + } + sAttribNameSawWhite() { + const c = this.skipSpaces(); + switch (c) { + case EOC: + return; + case EQUAL: + this.state = S_ATTRIB_VALUE; + break; + default: + this.fail("attribute without value."); + // Should we do this??? + // this.tag.attributes[this.name] = ""; + this.text = ""; + this.name = ""; + if (c === GREATER) { + this.openTag(); + } else if (isNameStartChar(c)) { + this.unget(); + this.state = S_ATTRIB_NAME; + } else { + this.fail("disallowed character in attribute name."); + this.state = S_ATTRIB; + } + } + } + sAttribValue() { + const c = this.getCodeNorm(); + if (isQuote(c)) { + this.q = c; + this.state = S_ATTRIB_VALUE_QUOTED; + } else if (!isS(c)) { + this.fail("unquoted attribute value."); + this.state = S_ATTRIB_VALUE_UNQUOTED; + this.unget(); + } + } + sAttribValueQuoted() { + // We deliberately do not use captureTo here. The specialized code we use + // here is faster than using captureTo. + const { + q, + chunk + } = this; + let { + i: start + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + switch (this.getCode()) { + case q: + this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI)); + this.name = this.text = ""; + this.q = null; + this.state = S_ATTRIB_VALUE_CLOSED; + return; + case AMP: + this.text += chunk.slice(start, this.prevI); + this.state = S_ENTITY; + this.entityReturnState = S_ATTRIB_VALUE_QUOTED; + return; + case NL: + case NL_LIKE: + case TAB: + this.text += `${chunk.slice(start, this.prevI)} `; + start = this.i; + break; + case LESS: + this.text += chunk.slice(start, this.prevI); + this.fail("disallowed character."); + return; + case EOC: + this.text += chunk.slice(start); + return; + default: + } + } + } + sAttribValueClosed() { + const c = this.getCodeNorm(); + if (isS(c)) { + this.state = S_ATTRIB; + } else if (c === GREATER) { + this.openTag(); + } else if (c === FORWARD_SLASH) { + this.state = S_OPEN_TAG_SLASH; + } else if (isNameStartChar(c)) { + this.fail("no whitespace between attributes."); + this.unget(); + this.state = S_ATTRIB_NAME; + } else { + this.fail("disallowed character in attribute name."); + } + } + sAttribValueUnquoted() { + // We don't do anything regarding EOL or space handling for unquoted + // attributes. We already have failed by the time we get here, and the + // contract that saxes upholds states that upon failure, it is not safe to + // rely on the data passed to event handlers (other than + // ``onerror``). Passing "bad" data is not a problem. + const c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR); + switch (c) { + case AMP: + this.state = S_ENTITY; + this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED; + break; + case LESS: + this.fail("disallowed character."); + break; + case EOC: + break; + default: + if (this.text.includes("]]>")) { + this.fail("the string \"]]>\" is disallowed in char data."); + } + this.pushAttrib(this.name, this.text); + this.name = this.text = ""; + if (c === GREATER) { + this.openTag(); + } else { + this.state = S_ATTRIB; + } + } + } + sCloseTag() { + const c = this.captureNameChars(); + if (c === GREATER) { + this.closeTag(); + } else if (isS(c)) { + this.state = S_CLOSE_TAG_SAW_WHITE; + } else if (c !== EOC) { + this.fail("disallowed character in closing tag."); + } + } + sCloseTagSawWhite() { + switch (this.skipSpaces()) { + case GREATER: + this.closeTag(); + break; + case EOC: + break; + default: + this.fail("disallowed character in closing tag."); + } + } + // END OF STATE ENGINE METHODS + handleTextInRoot() { + // This is essentially a specialized version of captureTo which is optimized + // for performing the ]]> check. A previous version of this code, checked + // ``this.text`` for the presence of ]]>. It simplified the code but was + // very costly when character data contained a lot of entities to be parsed. + // + // Since we are using a specialized loop, we also keep track of the presence + // of ]]> in text data. The sequence ]]> is forbidden to appear as-is. + // + let { + i: start, + forbiddenState + } = this; + const { + chunk, + textHandler: handler + } = this; + // eslint-disable-next-line no-labels, no-restricted-syntax + scanLoop: + // eslint-disable-next-line no-constant-condition + while (true) { + switch (this.getCode()) { + case LESS: + { + this.state = S_OPEN_WAKA; + if (handler !== undefined) { + const { + text + } = this; + const slice = chunk.slice(start, this.prevI); + if (text.length !== 0) { + handler(text + slice); + this.text = ""; + } else if (slice.length !== 0) { + handler(slice); + } + } + forbiddenState = FORBIDDEN_START; + // eslint-disable-next-line no-labels + break scanLoop; + } + case AMP: + this.state = S_ENTITY; + this.entityReturnState = S_TEXT; + if (handler !== undefined) { + this.text += chunk.slice(start, this.prevI); + } + forbiddenState = FORBIDDEN_START; + // eslint-disable-next-line no-labels + break scanLoop; + case CLOSE_BRACKET: + switch (forbiddenState) { + case FORBIDDEN_START: + forbiddenState = FORBIDDEN_BRACKET; + break; + case FORBIDDEN_BRACKET: + forbiddenState = FORBIDDEN_BRACKET_BRACKET; + break; + case FORBIDDEN_BRACKET_BRACKET: + break; + default: + throw new Error("impossible state"); + } + break; + case GREATER: + if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) { + this.fail("the string \"]]>\" is disallowed in char data."); + } + forbiddenState = FORBIDDEN_START; + break; + case NL_LIKE: + if (handler !== undefined) { + this.text += `${chunk.slice(start, this.prevI)}\n`; + } + start = this.i; + forbiddenState = FORBIDDEN_START; + break; + case EOC: + if (handler !== undefined) { + this.text += chunk.slice(start); + } + // eslint-disable-next-line no-labels + break scanLoop; + default: + forbiddenState = FORBIDDEN_START; + } + } + this.forbiddenState = forbiddenState; + } + handleTextOutsideRoot() { + // This is essentially a specialized version of captureTo which is optimized + // for a specialized task. We keep track of the presence of non-space + // characters in the text since these are errors when appearing outside the + // document root element. + let { + i: start + } = this; + const { + chunk, + textHandler: handler + } = this; + let nonSpace = false; + // eslint-disable-next-line no-labels, no-restricted-syntax + outRootLoop: + // eslint-disable-next-line no-constant-condition + while (true) { + const code = this.getCode(); + switch (code) { + case LESS: + { + this.state = S_OPEN_WAKA; + if (handler !== undefined) { + const { + text + } = this; + const slice = chunk.slice(start, this.prevI); + if (text.length !== 0) { + handler(text + slice); + this.text = ""; + } else if (slice.length !== 0) { + handler(slice); + } + } + // eslint-disable-next-line no-labels + break outRootLoop; + } + case AMP: + this.state = S_ENTITY; + this.entityReturnState = S_TEXT; + if (handler !== undefined) { + this.text += chunk.slice(start, this.prevI); + } + nonSpace = true; + // eslint-disable-next-line no-labels + break outRootLoop; + case NL_LIKE: + if (handler !== undefined) { + this.text += `${chunk.slice(start, this.prevI)}\n`; + } + start = this.i; + break; + case EOC: + if (handler !== undefined) { + this.text += chunk.slice(start); + } + // eslint-disable-next-line no-labels + break outRootLoop; + default: + if (!isS(code)) { + nonSpace = true; + } + } + } + if (!nonSpace) { + return; + } + // We use the reportedTextBeforeRoot and reportedTextAfterRoot flags + // to avoid reporting errors for every single character that is out of + // place. + if (!this.sawRoot && !this.reportedTextBeforeRoot) { + this.fail("text data outside of root node."); + this.reportedTextBeforeRoot = true; + } + if (this.closedRoot && !this.reportedTextAfterRoot) { + this.fail("text data outside of root node."); + this.reportedTextAfterRoot = true; + } + } + pushAttribNS(name, value) { + var _a; + const { + prefix, + local + } = this.qname(name); + const attr = { + name, + prefix, + local, + value + }; + this.attribList.push(attr); + // eslint-disable-next-line no-unused-expressions + (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr); + if (prefix === "xmlns") { + const trimmed = value.trim(); + if (this.currentXMLVersion === "1.0" && trimmed === "") { + this.fail("invalid attempt to undefine prefix in XML 1.0"); + } + this.topNS[local] = trimmed; + nsPairCheck(this, local, trimmed); + } else if (name === "xmlns") { + const trimmed = value.trim(); + this.topNS[""] = trimmed; + nsPairCheck(this, "", trimmed); + } + } + pushAttribPlain(name, value) { + var _a; + const attr = { + name, + value + }; + this.attribList.push(attr); + // eslint-disable-next-line no-unused-expressions + (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr); + } + /** + * End parsing. This performs final well-formedness checks and resets the + * parser to a clean state. + * + * @returns this + */ + end() { + var _a, _b; + if (!this.sawRoot) { + this.fail("document must contain a root element."); + } + const { + tags + } = this; + while (tags.length > 0) { + const tag = tags.pop(); + this.fail(`unclosed tag: ${tag.name}`); + } + if (this.state !== S_BEGIN && this.state !== S_TEXT) { + this.fail("unexpected end."); + } + const { + text + } = this; + if (text.length !== 0) { + // eslint-disable-next-line no-unused-expressions + (_a = this.textHandler) === null || _a === void 0 ? void 0 : _a.call(this, text); + this.text = ""; + } + this._closed = true; + // eslint-disable-next-line no-unused-expressions + (_b = this.endHandler) === null || _b === void 0 ? void 0 : _b.call(this); + this._init(); + return this; + } + /** + * Resolve a namespace prefix. + * + * @param prefix The prefix to resolve. + * + * @returns The namespace URI or ``undefined`` if the prefix is not defined. + */ + resolve(prefix) { + var _a, _b; + let uri = this.topNS[prefix]; + if (uri !== undefined) { + return uri; + } + const { + tags + } = this; + for (let index = tags.length - 1; index >= 0; index--) { + uri = tags[index].ns[prefix]; + if (uri !== undefined) { + return uri; + } + } + uri = this.ns[prefix]; + if (uri !== undefined) { + return uri; + } + return (_b = (_a = this.opt).resolvePrefix) === null || _b === void 0 ? void 0 : _b.call(_a, prefix); + } + /** + * Parse a qname into its prefix and local name parts. + * + * @param name The name to parse + * + * @returns + */ + qname(name) { + // This is faster than using name.split(":"). + const colon = name.indexOf(":"); + if (colon === -1) { + return { + prefix: "", + local: name + }; + } + const local = name.slice(colon + 1); + const prefix = name.slice(0, colon); + if (prefix === "" || local === "" || local.includes(":")) { + this.fail(`malformed name: ${name}.`); + } + return { + prefix, + local + }; + } + processAttribsNS() { + var _a; + const { + attribList + } = this; + const tag = this.tag; + { + // add namespace info to tag + const { + prefix, + local + } = this.qname(tag.name); + tag.prefix = prefix; + tag.local = local; + const uri = tag.uri = (_a = this.resolve(prefix)) !== null && _a !== void 0 ? _a : ""; + if (prefix !== "") { + if (prefix === "xmlns") { + this.fail("tags may not have \"xmlns\" as prefix."); + } + if (uri === "") { + this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`); + tag.uri = prefix; + } + } + } + if (attribList.length === 0) { + return; + } + const { + attributes + } = tag; + const seen = new Set(); + // Note: do not apply default ns to attributes: + // http://www.w3.org/TR/REC-xml-names/#defaulting + for (const attr of attribList) { + const { + name, + prefix, + local + } = attr; + let uri; + let eqname; + if (prefix === "") { + uri = name === "xmlns" ? XMLNS_NAMESPACE : ""; + eqname = name; + } else { + uri = this.resolve(prefix); + // if there's any attributes with an undefined namespace, + // then fail on them now. + if (uri === undefined) { + this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`); + uri = prefix; + } + eqname = `{${uri}}${local}`; + } + if (seen.has(eqname)) { + this.fail(`duplicate attribute: ${eqname}.`); + } + seen.add(eqname); + attr.uri = uri; + attributes[name] = attr; + } + this.attribList = []; + } + processAttribsPlain() { + const { + attribList + } = this; + // eslint-disable-next-line prefer-destructuring + const attributes = this.tag.attributes; + for (const { + name, + value + } of attribList) { + if (attributes[name] !== undefined) { + this.fail(`duplicate attribute: ${name}.`); + } + attributes[name] = value; + } + this.attribList = []; + } + /** + * Handle a complete open tag. This parser code calls this once it has seen + * the whole tag. This method checks for well-formeness and then emits + * ``onopentag``. + */ + openTag() { + var _a; + this.processAttribs(); + const { + tags + } = this; + const tag = this.tag; + tag.isSelfClosing = false; + // There cannot be any pending text here due to the onopentagstart that was + // necessarily emitted before we get here. So we do not check text. + // eslint-disable-next-line no-unused-expressions + (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag); + tags.push(tag); + this.state = S_TEXT; + this.name = ""; + } + /** + * Handle a complete self-closing tag. This parser code calls this once it has + * seen the whole tag. This method checks for well-formeness and then emits + * ``onopentag`` and ``onclosetag``. + */ + openSelfClosingTag() { + var _a, _b, _c; + this.processAttribs(); + const { + tags + } = this; + const tag = this.tag; + tag.isSelfClosing = true; + // There cannot be any pending text here due to the onopentagstart that was + // necessarily emitted before we get here. So we do not check text. + // eslint-disable-next-line no-unused-expressions + (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag); + // eslint-disable-next-line no-unused-expressions + (_b = this.closeTagHandler) === null || _b === void 0 ? void 0 : _b.call(this, tag); + const top = this.tag = (_c = tags[tags.length - 1]) !== null && _c !== void 0 ? _c : null; + if (top === null) { + this.closedRoot = true; + } + this.state = S_TEXT; + this.name = ""; + } + /** + * Handle a complete close tag. This parser code calls this once it has seen + * the whole tag. This method checks for well-formeness and then emits + * ``onclosetag``. + */ + closeTag() { + const { + tags, + name + } = this; + // Our state after this will be S_TEXT, no matter what, and we can clear + // tagName now. + this.state = S_TEXT; + this.name = ""; + if (name === "") { + this.fail("weird empty close tag."); + this.text += ""; + return; + } + const handler = this.closeTagHandler; + let l = tags.length; + while (l-- > 0) { + const tag = this.tag = tags.pop(); + this.topNS = tag.ns; + // eslint-disable-next-line no-unused-expressions + handler === null || handler === void 0 ? void 0 : handler(tag); + if (tag.name === name) { + break; + } + this.fail("unexpected close tag."); + } + if (l === 0) { + this.closedRoot = true; + } else if (l < 0) { + this.fail(`unmatched closing tag: ${name}.`); + this.text += ``; + } + } + /** + * Resolves an entity. Makes any necessary well-formedness checks. + * + * @param entity The entity to resolve. + * + * @returns The parsed entity. + */ + parseEntity(entity) { + // startsWith would be significantly slower for this test. + // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with + if (entity[0] !== "#") { + const defined = this.ENTITIES[entity]; + if (defined !== undefined) { + return defined; + } + this.fail(this.isName(entity) ? "undefined entity." : "disallowed character in entity name."); + return `&${entity};`; + } + let num = NaN; + if (entity[1] === "x" && /^#x[0-9a-f]+$/i.test(entity)) { + num = parseInt(entity.slice(2), 16); + } else if (/^#[0-9]+$/.test(entity)) { + num = parseInt(entity.slice(1), 10); + } + // The character reference is required to match the CHAR production. + if (!this.isChar(num)) { + this.fail("malformed character entity."); + return `&${entity};`; + } + return String.fromCodePoint(num); + } +} +exports.SaxesParser = SaxesParser; + +},{"xmlchars/xml/1.0/ed5":381,"xmlchars/xml/1.1/ed2":382,"xmlchars/xmlns/1.0/ed3":383}],335:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; + +// prototype class for hash functions +function Hash(blockSize, finalSize) { + this._block = Buffer.alloc(blockSize); + this._finalSize = finalSize; + this._blockSize = blockSize; + this._len = 0; +} +Hash.prototype.update = function (data, enc) { + if (typeof data === 'string') { + enc = enc || 'utf8'; + data = Buffer.from(data, enc); + } + var block = this._block; + var blockSize = this._blockSize; + var length = data.length; + var accum = this._len; + for (var offset = 0; offset < length;) { + var assigned = accum % blockSize; + var remainder = Math.min(length - offset, blockSize - assigned); + for (var i = 0; i < remainder; i++) { + block[assigned + i] = data[offset + i]; + } + accum += remainder; + offset += remainder; + if (accum % blockSize === 0) { + this._update(block); + } + } + this._len += length; + return this; +}; +Hash.prototype.digest = function (enc) { + var rem = this._len % this._blockSize; + this._block[rem] = 0x80; + + // zero (rem + 1) trailing bits, where (rem + 1) is the smallest + // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize + this._block.fill(0, rem + 1); + if (rem >= this._finalSize) { + this._update(this._block); + this._block.fill(0); + } + var bits = this._len * 8; + + // uint32 + if (bits <= 0xffffffff) { + this._block.writeUInt32BE(bits, this._blockSize - 4); + + // uint64 + } else { + var lowBits = (bits & 0xffffffff) >>> 0; + var highBits = (bits - lowBits) / 0x100000000; + this._block.writeUInt32BE(highBits, this._blockSize - 8); + this._block.writeUInt32BE(lowBits, this._blockSize - 4); + } + this._update(this._block); + var hash = this._hash(); + return enc ? hash.toString(enc) : hash; +}; +Hash.prototype._update = function () { + throw new Error('_update must be implemented by subclass'); +}; +module.exports = Hash; + +},{"safe-buffer":332}],336:[function(require,module,exports){ +"use strict"; + +var _exports = module.exports = function SHA(algorithm) { + algorithm = algorithm.toLowerCase(); + var Algorithm = _exports[algorithm]; + if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)'); + return new Algorithm(); +}; +_exports.sha = require('./sha'); +_exports.sha1 = require('./sha1'); +_exports.sha224 = require('./sha224'); +_exports.sha256 = require('./sha256'); +_exports.sha384 = require('./sha384'); +_exports.sha512 = require('./sha512'); + +},{"./sha":337,"./sha1":338,"./sha224":339,"./sha256":340,"./sha384":341,"./sha512":342}],337:[function(require,module,exports){ +"use strict"; + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined + * in FIPS PUB 180-1 + * This source code is derived from sha1.js of the same repository. + * The difference between SHA-0 and SHA-1 is just a bitwise rotate left + * operation was added. + */ + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0]; +var W = new Array(80); +function Sha() { + this.init(); + this._w = W; + Hash.call(this, 64, 56); +} +inherits(Sha, Hash); +Sha.prototype.init = function () { + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; + this._e = 0xc3d2e1f0; + return this; +}; +function rotl5(num) { + return num << 5 | num >>> 27; +} +function rotl30(num) { + return num << 30 | num >>> 2; +} +function ft(s, b, c, d) { + if (s === 0) return b & c | ~b & d; + if (s === 2) return b & c | b & d | c & d; + return b ^ c ^ d; +} +Sha.prototype._update = function (M) { + var W = this._w; + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4); + for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20); + var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0; + e = d; + d = c; + c = rotl30(b); + b = a; + a = t; + } + this._a = a + this._a | 0; + this._b = b + this._b | 0; + this._c = c + this._c | 0; + this._d = d + this._d | 0; + this._e = e + this._e | 0; +}; +Sha.prototype._hash = function () { + var H = Buffer.allocUnsafe(20); + H.writeInt32BE(this._a | 0, 0); + H.writeInt32BE(this._b | 0, 4); + H.writeInt32BE(this._c | 0, 8); + H.writeInt32BE(this._d | 0, 12); + H.writeInt32BE(this._e | 0, 16); + return H; +}; +module.exports = Sha; + +},{"./hash":335,"inherits":279,"safe-buffer":332}],338:[function(require,module,exports){ +"use strict"; + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0]; +var W = new Array(80); +function Sha1() { + this.init(); + this._w = W; + Hash.call(this, 64, 56); +} +inherits(Sha1, Hash); +Sha1.prototype.init = function () { + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; + this._e = 0xc3d2e1f0; + return this; +}; +function rotl1(num) { + return num << 1 | num >>> 31; +} +function rotl5(num) { + return num << 5 | num >>> 27; +} +function rotl30(num) { + return num << 30 | num >>> 2; +} +function ft(s, b, c, d) { + if (s === 0) return b & c | ~b & d; + if (s === 2) return b & c | b & d | c & d; + return b ^ c ^ d; +} +Sha1.prototype._update = function (M) { + var W = this._w; + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4); + for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]); + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20); + var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0; + e = d; + d = c; + c = rotl30(b); + b = a; + a = t; + } + this._a = a + this._a | 0; + this._b = b + this._b | 0; + this._c = c + this._c | 0; + this._d = d + this._d | 0; + this._e = e + this._e | 0; +}; +Sha1.prototype._hash = function () { + var H = Buffer.allocUnsafe(20); + H.writeInt32BE(this._a | 0, 0); + H.writeInt32BE(this._b | 0, 4); + H.writeInt32BE(this._c | 0, 8); + H.writeInt32BE(this._d | 0, 12); + H.writeInt32BE(this._e | 0, 16); + return H; +}; +module.exports = Sha1; + +},{"./hash":335,"inherits":279,"safe-buffer":332}],339:[function(require,module,exports){ +"use strict"; + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits'); +var Sha256 = require('./sha256'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var W = new Array(64); +function Sha224() { + this.init(); + this._w = W; // new Array(64) + + Hash.call(this, 64, 56); +} +inherits(Sha224, Sha256); +Sha224.prototype.init = function () { + this._a = 0xc1059ed8; + this._b = 0x367cd507; + this._c = 0x3070dd17; + this._d = 0xf70e5939; + this._e = 0xffc00b31; + this._f = 0x68581511; + this._g = 0x64f98fa7; + this._h = 0xbefa4fa4; + return this; +}; +Sha224.prototype._hash = function () { + var H = Buffer.allocUnsafe(28); + H.writeInt32BE(this._a, 0); + H.writeInt32BE(this._b, 4); + H.writeInt32BE(this._c, 8); + H.writeInt32BE(this._d, 12); + H.writeInt32BE(this._e, 16); + H.writeInt32BE(this._f, 20); + H.writeInt32BE(this._g, 24); + return H; +}; +module.exports = Sha224; + +},{"./hash":335,"./sha256":340,"inherits":279,"safe-buffer":332}],340:[function(require,module,exports){ +"use strict"; + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var K = [0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2]; +var W = new Array(64); +function Sha256() { + this.init(); + this._w = W; // new Array(64) + + Hash.call(this, 64, 56); +} +inherits(Sha256, Hash); +Sha256.prototype.init = function () { + this._a = 0x6a09e667; + this._b = 0xbb67ae85; + this._c = 0x3c6ef372; + this._d = 0xa54ff53a; + this._e = 0x510e527f; + this._f = 0x9b05688c; + this._g = 0x1f83d9ab; + this._h = 0x5be0cd19; + return this; +}; +function ch(x, y, z) { + return z ^ x & (y ^ z); +} +function maj(x, y, z) { + return x & y | z & (x | y); +} +function sigma0(x) { + return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10); +} +function sigma1(x) { + return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7); +} +function gamma0(x) { + return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ x >>> 3; +} +function gamma1(x) { + return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ x >>> 10; +} +Sha256.prototype._update = function (M) { + var W = this._w; + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + var f = this._f | 0; + var g = this._g | 0; + var h = this._h | 0; + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4); + for (; i < 64; ++i) W[i] = gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16] | 0; + for (var j = 0; j < 64; ++j) { + var T1 = h + sigma1(e) + ch(e, f, g) + K[j] + W[j] | 0; + var T2 = sigma0(a) + maj(a, b, c) | 0; + h = g; + g = f; + f = e; + e = d + T1 | 0; + d = c; + c = b; + b = a; + a = T1 + T2 | 0; + } + this._a = a + this._a | 0; + this._b = b + this._b | 0; + this._c = c + this._c | 0; + this._d = d + this._d | 0; + this._e = e + this._e | 0; + this._f = f + this._f | 0; + this._g = g + this._g | 0; + this._h = h + this._h | 0; +}; +Sha256.prototype._hash = function () { + var H = Buffer.allocUnsafe(32); + H.writeInt32BE(this._a, 0); + H.writeInt32BE(this._b, 4); + H.writeInt32BE(this._c, 8); + H.writeInt32BE(this._d, 12); + H.writeInt32BE(this._e, 16); + H.writeInt32BE(this._f, 20); + H.writeInt32BE(this._g, 24); + H.writeInt32BE(this._h, 28); + return H; +}; +module.exports = Sha256; + +},{"./hash":335,"inherits":279,"safe-buffer":332}],341:[function(require,module,exports){ +"use strict"; + +var inherits = require('inherits'); +var SHA512 = require('./sha512'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var W = new Array(160); +function Sha384() { + this.init(); + this._w = W; + Hash.call(this, 128, 112); +} +inherits(Sha384, SHA512); +Sha384.prototype.init = function () { + this._ah = 0xcbbb9d5d; + this._bh = 0x629a292a; + this._ch = 0x9159015a; + this._dh = 0x152fecd8; + this._eh = 0x67332667; + this._fh = 0x8eb44a87; + this._gh = 0xdb0c2e0d; + this._hh = 0x47b5481d; + this._al = 0xc1059ed8; + this._bl = 0x367cd507; + this._cl = 0x3070dd17; + this._dl = 0xf70e5939; + this._el = 0xffc00b31; + this._fl = 0x68581511; + this._gl = 0x64f98fa7; + this._hl = 0xbefa4fa4; + return this; +}; +Sha384.prototype._hash = function () { + var H = Buffer.allocUnsafe(48); + function writeInt64BE(h, l, offset) { + H.writeInt32BE(h, offset); + H.writeInt32BE(l, offset + 4); + } + writeInt64BE(this._ah, this._al, 0); + writeInt64BE(this._bh, this._bl, 8); + writeInt64BE(this._ch, this._cl, 16); + writeInt64BE(this._dh, this._dl, 24); + writeInt64BE(this._eh, this._el, 32); + writeInt64BE(this._fh, this._fl, 40); + return H; +}; +module.exports = Sha384; + +},{"./hash":335,"./sha512":342,"inherits":279,"safe-buffer":332}],342:[function(require,module,exports){ +"use strict"; + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var K = [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817]; +var W = new Array(160); +function Sha512() { + this.init(); + this._w = W; + Hash.call(this, 128, 112); +} +inherits(Sha512, Hash); +Sha512.prototype.init = function () { + this._ah = 0x6a09e667; + this._bh = 0xbb67ae85; + this._ch = 0x3c6ef372; + this._dh = 0xa54ff53a; + this._eh = 0x510e527f; + this._fh = 0x9b05688c; + this._gh = 0x1f83d9ab; + this._hh = 0x5be0cd19; + this._al = 0xf3bcc908; + this._bl = 0x84caa73b; + this._cl = 0xfe94f82b; + this._dl = 0x5f1d36f1; + this._el = 0xade682d1; + this._fl = 0x2b3e6c1f; + this._gl = 0xfb41bd6b; + this._hl = 0x137e2179; + return this; +}; +function Ch(x, y, z) { + return z ^ x & (y ^ z); +} +function maj(x, y, z) { + return x & y | z & (x | y); +} +function sigma0(x, xl) { + return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25); +} +function sigma1(x, xl) { + return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23); +} +function Gamma0(x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ x >>> 7; +} +function Gamma0l(x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25); +} +function Gamma1(x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ x >>> 6; +} +function Gamma1l(x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26); +} +function getCarry(a, b) { + return a >>> 0 < b >>> 0 ? 1 : 0; +} +Sha512.prototype._update = function (M) { + var W = this._w; + var ah = this._ah | 0; + var bh = this._bh | 0; + var ch = this._ch | 0; + var dh = this._dh | 0; + var eh = this._eh | 0; + var fh = this._fh | 0; + var gh = this._gh | 0; + var hh = this._hh | 0; + var al = this._al | 0; + var bl = this._bl | 0; + var cl = this._cl | 0; + var dl = this._dl | 0; + var el = this._el | 0; + var fl = this._fl | 0; + var gl = this._gl | 0; + var hl = this._hl | 0; + for (var i = 0; i < 32; i += 2) { + W[i] = M.readInt32BE(i * 4); + W[i + 1] = M.readInt32BE(i * 4 + 4); + } + for (; i < 160; i += 2) { + var xh = W[i - 15 * 2]; + var xl = W[i - 15 * 2 + 1]; + var gamma0 = Gamma0(xh, xl); + var gamma0l = Gamma0l(xl, xh); + xh = W[i - 2 * 2]; + xl = W[i - 2 * 2 + 1]; + var gamma1 = Gamma1(xh, xl); + var gamma1l = Gamma1l(xl, xh); + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7h = W[i - 7 * 2]; + var Wi7l = W[i - 7 * 2 + 1]; + var Wi16h = W[i - 16 * 2]; + var Wi16l = W[i - 16 * 2 + 1]; + var Wil = gamma0l + Wi7l | 0; + var Wih = gamma0 + Wi7h + getCarry(Wil, gamma0l) | 0; + Wil = Wil + gamma1l | 0; + Wih = Wih + gamma1 + getCarry(Wil, gamma1l) | 0; + Wil = Wil + Wi16l | 0; + Wih = Wih + Wi16h + getCarry(Wil, Wi16l) | 0; + W[i] = Wih; + W[i + 1] = Wil; + } + for (var j = 0; j < 160; j += 2) { + Wih = W[j]; + Wil = W[j + 1]; + var majh = maj(ah, bh, ch); + var majl = maj(al, bl, cl); + var sigma0h = sigma0(ah, al); + var sigma0l = sigma0(al, ah); + var sigma1h = sigma1(eh, el); + var sigma1l = sigma1(el, eh); + + // t1 = h + sigma1 + ch + K[j] + W[j] + var Kih = K[j]; + var Kil = K[j + 1]; + var chh = Ch(eh, fh, gh); + var chl = Ch(el, fl, gl); + var t1l = hl + sigma1l | 0; + var t1h = hh + sigma1h + getCarry(t1l, hl) | 0; + t1l = t1l + chl | 0; + t1h = t1h + chh + getCarry(t1l, chl) | 0; + t1l = t1l + Kil | 0; + t1h = t1h + Kih + getCarry(t1l, Kil) | 0; + t1l = t1l + Wil | 0; + t1h = t1h + Wih + getCarry(t1l, Wil) | 0; + + // t2 = sigma0 + maj + var t2l = sigma0l + majl | 0; + var t2h = sigma0h + majh + getCarry(t2l, sigma0l) | 0; + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + el = dl + t1l | 0; + eh = dh + t1h + getCarry(el, dl) | 0; + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + al = t1l + t2l | 0; + ah = t1h + t2h + getCarry(al, t1l) | 0; + } + this._al = this._al + al | 0; + this._bl = this._bl + bl | 0; + this._cl = this._cl + cl | 0; + this._dl = this._dl + dl | 0; + this._el = this._el + el | 0; + this._fl = this._fl + fl | 0; + this._gl = this._gl + gl | 0; + this._hl = this._hl + hl | 0; + this._ah = this._ah + ah + getCarry(this._al, al) | 0; + this._bh = this._bh + bh + getCarry(this._bl, bl) | 0; + this._ch = this._ch + ch + getCarry(this._cl, cl) | 0; + this._dh = this._dh + dh + getCarry(this._dl, dl) | 0; + this._eh = this._eh + eh + getCarry(this._el, el) | 0; + this._fh = this._fh + fh + getCarry(this._fl, fl) | 0; + this._gh = this._gh + gh + getCarry(this._gl, gl) | 0; + this._hh = this._hh + hh + getCarry(this._hl, hl) | 0; +}; +Sha512.prototype._hash = function () { + var H = Buffer.allocUnsafe(64); + function writeInt64BE(h, l, offset) { + H.writeInt32BE(h, offset); + H.writeInt32BE(l, offset + 4); + } + writeInt64BE(this._ah, this._al, 0); + writeInt64BE(this._bh, this._bl, 8); + writeInt64BE(this._ch, this._cl, 16); + writeInt64BE(this._dh, this._dl, 24); + writeInt64BE(this._eh, this._el, 32); + writeInt64BE(this._fh, this._fl, 40); + writeInt64BE(this._gh, this._gl, 48); + writeInt64BE(this._hh, this._hl, 56); + return H; +}; +module.exports = Sha512; + +},{"./hash":335,"inherits":279,"safe-buffer":332}],343:[function(require,module,exports){ +"use strict"; + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +module.exports = Stream; +var EE = require('events').EventEmitter; +var inherits = require('inherits'); +inherits(Stream, EE); +Stream.Readable = require('readable-stream/readable.js'); +Stream.Writable = require('readable-stream/writable.js'); +Stream.Duplex = require('readable-stream/duplex.js'); +Stream.Transform = require('readable-stream/transform.js'); +Stream.PassThrough = require('readable-stream/passthrough.js'); + +// Backwards-compat with node 0.4.x +Stream.Stream = Stream; + +// old-style streams. Note that the pipe method (the only relevant +// part of this class) is overridden in the Readable class. + +function Stream() { + EE.call(this); +} +Stream.prototype.pipe = function (dest, options) { + var source = this; + function ondata(chunk) { + if (dest.writable) { + if (false === dest.write(chunk) && source.pause) { + source.pause(); + } + } + } + source.on('data', ondata); + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } + dest.on('drain', ondrain); + + // If the 'end' option is not supplied, dest.end() will be called when + // source gets the 'end' or 'close' events. Only dest.end() once. + if (!dest._isStdio && (!options || options.end !== false)) { + source.on('end', onend); + source.on('close', onclose); + } + var didOnEnd = false; + function onend() { + if (didOnEnd) return; + didOnEnd = true; + dest.end(); + } + function onclose() { + if (didOnEnd) return; + didOnEnd = true; + if (typeof dest.destroy === 'function') dest.destroy(); + } + + // don't leave dangling pipes when there are errors. + function onerror(er) { + cleanup(); + if (EE.listenerCount(this, 'error') === 0) { + throw er; // Unhandled stream error in pipe. + } + } + + source.on('error', onerror); + dest.on('error', onerror); + + // remove all the event listeners that were added. + function cleanup() { + source.removeListener('data', ondata); + dest.removeListener('drain', ondrain); + source.removeListener('end', onend); + source.removeListener('close', onclose); + source.removeListener('error', onerror); + dest.removeListener('error', onerror); + source.removeListener('end', cleanup); + source.removeListener('close', cleanup); + dest.removeListener('close', cleanup); + } + source.on('end', cleanup); + source.on('close', cleanup); + dest.on('close', cleanup); + dest.emit('pipe', source); + + // Allow for unix-like usage: A.pipe(B).pipe(C) + return dest; +}; + +},{"events":261,"inherits":279,"readable-stream/duplex.js":345,"readable-stream/passthrough.js":354,"readable-stream/readable.js":355,"readable-stream/transform.js":356,"readable-stream/writable.js":357}],344:[function(require,module,exports){ +"use strict"; + +var toString = {}.toString; +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +},{}],345:[function(require,module,exports){ +"use strict"; + +module.exports = require('./lib/_stream_duplex.js'); + +},{"./lib/_stream_duplex.js":346}],346:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ +var pna = require('process-nextick-args'); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + } + return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); +util.inherits(Duplex, Readable); +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + if (options && options.readable === false) this.readable = false; + if (options && options.writable === false) this.writable = false; + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + this.once('end', onend); +} +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + pna.nextTick(onEndNT, this); +} +function onEndNT(self) { + self.end(); +} +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + pna.nextTick(cb, err); +}; + +},{"./_stream_readable":348,"./_stream_writable":350,"core-util-is":222,"inherits":279,"process-nextick-args":305}],347:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; +var Transform = require('./_stream_transform'); + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + Transform.call(this, options); +} +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; + +},{"./_stream_transform":349,"core-util-is":222,"inherits":279}],348:[function(require,module,exports){ +(function (process,global){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ +var pna = require('process-nextick-args'); +/**/ + +module.exports = Readable; + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = require('./internal/streams/BufferList'); +var destroyImpl = require('./internal/streams/destroy'); +var StringDecoder; +util.inherits(Readable, Stream); +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + if (!(this instanceof Readable)) return new Readable(options); + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + if (options) { + if (typeof options.read === 'function') this._read = options.read; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + Stream.call(this); +} +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + return needMoreData(state); +} +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + if (ret !== null) this.emit('data', ret); + return ret; +}; +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + return dest; +}; +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, { + hasUnpiped: false + }); + } + return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this, unpipeInfo); + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + var state = this._readableState; + var paused = false; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + _this.push(null); + }); + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + return this; +}; +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._readableState.highWaterMark; + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./_stream_duplex":346,"./internal/streams/BufferList":351,"./internal/streams/destroy":352,"./internal/streams/stream":353,"_process":306,"core-util-is":222,"events":261,"inherits":279,"isarray":344,"process-nextick-args":305,"safe-buffer":358,"string_decoder/":359,"util":188}],349:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; +var Duplex = require('./_stream_duplex'); + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + var cb = ts.writecb; + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + ts.writechunk = null; + ts.writecb = null; + if (data != null) + // single equals check for both `null` and `undefined` + this.push(data); + cb(er); + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + Duplex.call(this, options); + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} +function prefinish() { + var _this = this; + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this2.emit('close'); + }); +}; +function done(stream, er, data) { + if (er) return stream.emit('error', er); + if (data != null) + // single equals check for both `null` and `undefined` + stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + return stream.push(null); +} + +},{"./_stream_duplex":346,"core-util-is":222,"inherits":279}],350:[function(require,module,exports){ +(function (process,global,setImmediate){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +/**/ +var pna = require('process-nextick-args'); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +var destroyImpl = require('./internal/streams/destroy'); +util.inherits(Writable, Stream); +function nop() {} +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + if (typeof options.final === 'function') this._final = options.final; + } + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + pna.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + return valid; +} +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; +}; +Writable.prototype.cork = function () { + var state = this._writableState; + state.corked++; +}; +Writable.prototype.uncork = function () { + var state = this._writableState; + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + return ret; +} +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + if (entry === null) state.lastBufferedRequest = null; + } + state.bufferedRequest = entry; + state.bufferProcessing = false; +} +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; +Writable.prototype._writev = null; +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending) endWritable(this, state, cb); +}; +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + // reuse the free corkReq. + state.corkedRequestsFree.next = corkReq; +} +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) + +},{"./_stream_duplex":346,"./internal/streams/destroy":352,"./internal/streams/stream":353,"_process":306,"core-util-is":222,"inherits":279,"process-nextick-args":305,"safe-buffer":358,"timers":361,"util-deprecate":362}],351:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} +var Buffer = require('safe-buffer').Buffer; +var util = require('util'); +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + this.head = null; + this.tail = null; + this.length = 0; + } + BufferList.prototype.push = function push(v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + BufferList.prototype.unshift = function unshift(v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + } + return ret; + }; + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + return BufferList; +}(); +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ + length: this.length + }); + return this.constructor.name + ' ' + obj; + }; +} + +},{"safe-buffer":358,"util":188}],352:[function(require,module,exports){ +'use strict'; + +/**/ +var pna = require('process-nextick-args'); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + pna.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, this, err); + } + } + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + pna.nextTick(emitErrorNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, _this, err); + } + } else if (cb) { + cb(err); + } + }); + return this; +} +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} +function emitErrorNT(self, err) { + self.emit('error', err); +} +module.exports = { + destroy: destroy, + undestroy: undestroy +}; + +},{"process-nextick-args":305}],353:[function(require,module,exports){ +arguments[4][329][0].apply(exports,arguments) +},{"dup":329,"events":261}],354:[function(require,module,exports){ +"use strict"; + +module.exports = require('./readable').PassThrough; + +},{"./readable":355}],355:[function(require,module,exports){ +"use strict"; + +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); + +},{"./lib/_stream_duplex.js":346,"./lib/_stream_passthrough.js":347,"./lib/_stream_readable.js":348,"./lib/_stream_transform.js":349,"./lib/_stream_writable.js":350}],356:[function(require,module,exports){ +"use strict"; + +module.exports = require('./readable').Transform; + +},{"./readable":355}],357:[function(require,module,exports){ +"use strict"; + +module.exports = require('./lib/_stream_writable.js'); + +},{"./lib/_stream_writable.js":350}],358:[function(require,module,exports){ +arguments[4][217][0].apply(exports,arguments) +},{"buffer":220,"dup":217}],359:[function(require,module,exports){ +arguments[4][218][0].apply(exports,arguments) +},{"dup":218,"safe-buffer":358}],360:[function(require,module,exports){ +arguments[4][218][0].apply(exports,arguments) +},{"dup":218,"safe-buffer":332}],361:[function(require,module,exports){ +(function (setImmediate,clearImmediate){(function (){ +"use strict"; + +var nextTick = require('process/browser.js').nextTick; +var apply = Function.prototype.apply; +var slice = Array.prototype.slice; +var immediateIds = {}; +var nextImmediateId = 0; + +// DOM APIs, for completeness + +exports.setTimeout = function () { + return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); +}; +exports.setInterval = function () { + return new Timeout(apply.call(setInterval, window, arguments), clearInterval); +}; +exports.clearTimeout = exports.clearInterval = function (timeout) { + timeout.close(); +}; +function Timeout(id, clearFn) { + this._id = id; + this._clearFn = clearFn; +} +Timeout.prototype.unref = Timeout.prototype.ref = function () {}; +Timeout.prototype.close = function () { + this._clearFn.call(window, this._id); +}; + +// Does not start the time, just sets up the members needed. +exports.enroll = function (item, msecs) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = msecs; +}; +exports.unenroll = function (item) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = -1; +}; +exports._unrefActive = exports.active = function (item) { + clearTimeout(item._idleTimeoutId); + var msecs = item._idleTimeout; + if (msecs >= 0) { + item._idleTimeoutId = setTimeout(function onTimeout() { + if (item._onTimeout) item._onTimeout(); + }, msecs); + } +}; + +// That's not how node.js implements it but the exposed api is the same. +exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function (fn) { + var id = nextImmediateId++; + var args = arguments.length < 2 ? false : slice.call(arguments, 1); + immediateIds[id] = true; + nextTick(function onNextTick() { + if (immediateIds[id]) { + // fn.call() is faster so we optimize for the common use-case + // @see http://jsperf.com/call-apply-segu + if (args) { + fn.apply(null, args); + } else { + fn.call(null); + } + // Prevent ids from leaking + exports.clearImmediate(id); + } + }); + return id; +}; +exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function (id) { + delete immediateIds[id]; +}; + +}).call(this)}).call(this,require("timers").setImmediate,require("timers").clearImmediate) + +},{"process/browser.js":306,"timers":361}],362:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate(fn, msg) { + if (config('noDeprecation')) { + return fn; + } + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config(name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],363:[function(require,module,exports){ +"use strict"; + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + }; +} + +},{}],364:[function(require,module,exports){ +"use strict"; + +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; +}; + +},{}],365:[function(require,module,exports){ +(function (process,global){(function (){ +"use strict"; + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function (f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function (x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': + return String(args[i++]); + case '%d': + return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function (fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function () { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + if (process.noDeprecation === true) { + return fn; + } + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + return deprecated; +}; +var debugs = {}; +var debugEnviron; +exports.debuglog = function (set) { + if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function () { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function () {}; + } + } + return debugs[set]; +}; + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold': [1, 22], + 'italic': [3, 23], + 'underline': [4, 24], + 'inverse': [7, 27], + 'white': [37, 39], + 'grey': [90, 39], + 'black': [30, 39], + 'blue': [34, 39], + 'cyan': [36, 39], + 'green': [32, 39], + 'magenta': [35, 39], + 'red': [31, 39], + 'yellow': [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} +function stylizeNoColor(str, styleType) { + return str; +} +function arrayToHash(array) { + var hash = {}; + array.forEach(function (val, idx) { + hash[val] = true; + }); + return hash; +} +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && value && isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + var base = '', + array = false, + braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + ctx.seen.push(value); + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function (key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + ctx.seen.pop(); + return reduceToSingleString(output, base, braces); +} +function formatPrimitive(ctx, value) { + if (isUndefined(value)) return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) return ctx.stylize('null', 'null'); +} +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function (key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); + } + }); + return output; +} +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { + value: value[key] + }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function (line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function (line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + return name + ': ' + str; +} +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function (prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + if (length > 60) { + return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1]; + } + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; +function isError(e) { + return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; +function isPrimitive(arg) { + return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || + // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; +exports.isBuffer = require('./support/isBuffer'); +function objectToString(o) { + return Object.prototype.toString.call(o); +} +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function () { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); +exports._extend = function (origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./support/isBuffer":364,"_process":306,"inherits":363}],366:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "v1", { + enumerable: true, + get: function () { + return _v.default; + } +}); +Object.defineProperty(exports, "v3", { + enumerable: true, + get: function () { + return _v2.default; + } +}); +Object.defineProperty(exports, "v4", { + enumerable: true, + get: function () { + return _v3.default; + } +}); +Object.defineProperty(exports, "v5", { + enumerable: true, + get: function () { + return _v4.default; + } +}); +Object.defineProperty(exports, "NIL", { + enumerable: true, + get: function () { + return _nil.default; + } +}); +Object.defineProperty(exports, "version", { + enumerable: true, + get: function () { + return _version.default; + } +}); +Object.defineProperty(exports, "validate", { + enumerable: true, + get: function () { + return _validate.default; + } +}); +Object.defineProperty(exports, "stringify", { + enumerable: true, + get: function () { + return _stringify.default; + } +}); +Object.defineProperty(exports, "parse", { + enumerable: true, + get: function () { + return _parse.default; + } +}); +var _v = _interopRequireDefault(require("./v1.js")); +var _v2 = _interopRequireDefault(require("./v3.js")); +var _v3 = _interopRequireDefault(require("./v4.js")); +var _v4 = _interopRequireDefault(require("./v5.js")); +var _nil = _interopRequireDefault(require("./nil.js")); +var _version = _interopRequireDefault(require("./version.js")); +var _validate = _interopRequireDefault(require("./validate.js")); +var _stringify = _interopRequireDefault(require("./stringify.js")); +var _parse = _interopRequireDefault(require("./parse.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} + +},{"./nil.js":368,"./parse.js":369,"./stringify.js":373,"./v1.js":374,"./v3.js":375,"./v4.js":377,"./v5.js":378,"./validate.js":379,"./version.js":380}],367:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + for (let i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + +function md5ToHexEncodedArray(input) { + const output = []; + const length32 = input.length * 32; + const hexTab = '0123456789abcdef'; + for (let i = 0; i < length32; i += 8) { + const x = input[i >> 5] >>> i % 32 & 0xff; + const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + return output; +} +/** + * Calculate output length with padding and bit length + */ + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + let a = 1732584193; + let b = -271733879; + let c = -1732584194; + let d = 271733878; + for (let i = 0; i < x.length; i += 16) { + const olda = a; + const oldb = b; + const oldc = c; + const oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + const length8 = input.length * 8; + const output = new Uint32Array(getOutputLength(length8)); + for (let i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + +function safeAdd(x, y) { + const lsw = (x & 0xffff) + (y & 0xffff); + const msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} +var _default = md5; +exports.default = _default; + +},{}],368:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = '00000000-0000-0000-0000-000000000000'; +exports.default = _default; + +},{}],369:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _validate = _interopRequireDefault(require("./validate.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function parse(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} +var _default = parse; +exports.default = _default; + +},{"./validate.js":379}],370:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; +exports.default = _default; + +},{}],371:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = rng; +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +let getRandomValues; +const rnds8 = new Uint8Array(16); +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + return getRandomValues(rnds8); +} + +},{}],372:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + case 1: + return x ^ y ^ z; + case 2: + return x & y ^ x & z ^ y & z; + case 3: + return x ^ y ^ z; + } +} +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} +function sha1(bytes) { + const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + for (let i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + bytes.push(0x80); + const l = bytes.length / 4 + 2; + const N = Math.ceil(l / 16); + const M = new Array(N); + for (let i = 0; i < N; ++i) { + const arr = new Uint32Array(16); + for (let j = 0; j < 16; ++j) { + arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3]; + } + M[i] = arr; + } + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + for (let i = 0; i < N; ++i) { + const W = new Uint32Array(80); + for (let t = 0; t < 16; ++t) { + W[t] = M[i][t]; + } + for (let t = 16; t < 80; ++t) { + W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); + } + let a = H[0]; + let b = H[1]; + let c = H[2]; + let d = H[3]; + let e = H[4]; + for (let t = 0; t < 80; ++t) { + const s = Math.floor(t / 20); + const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} +var _default = sha1; +exports.default = _default; + +},{}],373:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _validate = _interopRequireDefault(require("./validate.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +const byteToHex = []; +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} +function stringify(arr) { + let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!(0, _validate.default)(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + return uuid; +} +var _default = stringify; +exports.default = _default; + +},{"./validate.js":379}],374:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _rng = _interopRequireDefault(require("./rng.js")); +var _stringify = _interopRequireDefault(require("./stringify.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html +let _nodeId; +let _clockseq; // Previous uuid creation time + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || _rng.default)(); + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + return buf || (0, _stringify.default)(b); +} +var _default = v1; +exports.default = _default; + +},{"./rng.js":371,"./stringify.js":373}],375:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _v = _interopRequireDefault(require("./v35.js")); +var _md = _interopRequireDefault(require("./md5.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const v3 = (0, _v.default)('v3', 0x30, _md.default); +var _default = v3; +exports.default = _default; + +},{"./md5.js":367,"./v35.js":376}],376:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _default; +exports.URL = exports.DNS = void 0; +var _stringify = _interopRequireDefault(require("./stringify.js")); +var _parse = _interopRequireDefault(require("./parse.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + return bytes; +} +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +exports.DNS = DNS; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +exports.URL = URL; +function _default(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + if (typeof namespace === 'string') { + namespace = (0, _parse.default)(namespace); + } + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + if (buf) { + offset = offset || 0; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + return buf; + } + return (0, _stringify.default)(bytes); + } // Function#name is not settable on some platforms (#270) + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} + +},{"./parse.js":369,"./stringify.js":373}],377:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _rng = _interopRequireDefault(require("./rng.js")); +var _stringify = _interopRequireDefault(require("./stringify.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + return buf; + } + return (0, _stringify.default)(rnds); +} +var _default = v4; +exports.default = _default; + +},{"./rng.js":371,"./stringify.js":373}],378:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _v = _interopRequireDefault(require("./v35.js")); +var _sha = _interopRequireDefault(require("./sha1.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const v5 = (0, _v.default)('v5', 0x50, _sha.default); +var _default = v5; +exports.default = _default; + +},{"./sha1.js":372,"./v35.js":376}],379:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _regex = _interopRequireDefault(require("./regex.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function validate(uuid) { + return typeof uuid === 'string' && _regex.default.test(uuid); +} +var _default = validate; +exports.default = _default; + +},{"./regex.js":370}],380:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _validate = _interopRequireDefault(require("./validate.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function version(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + return parseInt(uuid.substr(14, 1), 16); +} +var _default = version; +exports.default = _default; + +},{"./validate.js":379}],381:[function(require,module,exports){ +"use strict"; + +/** + * Character classes and associated utilities for the 5th edition of XML 1.0. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +// +// Fragments. +// +exports.CHAR = "\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +exports.S = " \t\r\n"; +// tslint:disable-next-line:max-line-length +exports.NAME_START_CHAR = ":A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\u00B7\u0300-\u036F\u203F-\u2040"; +// +// Regular expressions. +// +exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u"); +exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u"); +exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u"); +exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u"); +exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u"); +exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u"); +var TAB = 9; +var NL = 0xA; +var CR = 0xD; +var SPACE = 0x20; +// +// Lists. +// +/** All characters in the ``S`` production. */ +exports.S_LIST = [SPACE, NL, CR, TAB]; +/** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ +function isChar(c) { + return c >= SPACE && c <= 0xD7FF || c === NL || c === CR || c === TAB || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF; +} +exports.isChar = isChar; +/** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ +function isS(c) { + return c === SPACE || c === NL || c === CR || c === TAB; +} +exports.isS = isS; +/** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ +function isNameStartChar(c) { + return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF; +} +exports.isNameStartChar = isNameStartChar; +/** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ +function isNameChar(c) { + return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040; +} +exports.isNameChar = isNameChar; + +},{}],382:[function(require,module,exports){ +"use strict"; + +/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +// +// Fragments. +// +exports.CHAR = "\u0001-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +exports.RESTRICTED_CHAR = "\u0001-\u0008\u000B\u000C\u000E-\u001F\u007F-\u0084\u0086-\u009F"; +exports.S = " \t\r\n"; +// tslint:disable-next-line:max-line-length +exports.NAME_START_CHAR = ":A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\u00B7\u0300-\u036F\u203F-\u2040"; +// +// Regular expressions. +// +exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u"); +exports.RESTRICTED_CHAR_RE = new RegExp("^[" + exports.RESTRICTED_CHAR + "]$", "u"); +exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u"); +exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u"); +exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u"); +exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u"); +exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u"); +var TAB = 9; +var NL = 0xA; +var CR = 0xD; +var SPACE = 0x20; +// +// Lists. +// +/** All characters in the ``S`` production. */ +exports.S_LIST = [SPACE, NL, CR, TAB]; +/** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ +function isChar(c) { + return c >= 0x0001 && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF; +} +exports.isChar = isChar; +/** + * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``. + */ +function isRestrictedChar(c) { + return c >= 0x1 && c <= 0x8 || c === 0xB || c === 0xC || c >= 0xE && c <= 0x1F || c >= 0x7F && c <= 0x84 || c >= 0x86 && c <= 0x9F; +} +exports.isRestrictedChar = isRestrictedChar; +/** + * Determines whether a codepoint matches the ``CHAR`` production and does not + * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is + * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster + * than running the two-call equivalent. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR`` and does not match + * ``RESTRICTED_CHAR``. + */ +function isCharAndNotRestricted(c) { + return c === 0x9 || c === 0xA || c === 0xD || c > 0x1F && c < 0x7F || c === 0x85 || c > 0x9F && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF; +} +exports.isCharAndNotRestricted = isCharAndNotRestricted; +/** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ +function isS(c) { + return c === SPACE || c === NL || c === CR || c === TAB; +} +exports.isS = isS; +/** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ +// tslint:disable-next-line:cyclomatic-complexity +function isNameStartChar(c) { + return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF; +} +exports.isNameStartChar = isNameStartChar; +/** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ +function isNameChar(c) { + return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040; +} +exports.isNameChar = isNameChar; + +},{}],383:[function(require,module,exports){ +"use strict"; + +/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +// +// Fragments. +// +// tslint:disable-next-line:max-line-length +exports.NC_NAME_START_CHAR = "A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +exports.NC_NAME_CHAR = "-" + exports.NC_NAME_START_CHAR + ".0-9\u00B7\u0300-\u036F\u203F-\u2040"; +// +// Regular expressions. +// +exports.NC_NAME_START_CHAR_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "]$", "u"); +exports.NC_NAME_CHAR_RE = new RegExp("^[" + exports.NC_NAME_CHAR + "]$", "u"); +exports.NC_NAME_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "][" + exports.NC_NAME_CHAR + "]*$", "u"); +/** + * Determines whether a codepoint matches [[NC_NAME_START_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ +// tslint:disable-next-line:cyclomatic-complexity +function isNCNameStartChar(c) { + return c >= 0x41 && c <= 0x5A || c === 0x5F || c >= 0x61 && c <= 0x7A || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x200C && c <= 0x200D || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF; +} +exports.isNCNameStartChar = isNCNameStartChar; +/** + * Determines whether a codepoint matches [[NC_NAME_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ +function isNCNameChar(c) { + return isNCNameStartChar(c) || c === 0x2D || c === 0x2E || c >= 0x30 && c <= 0x39 || c === 0x00B7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040; +} +exports.isNCNameChar = isNCNameChar; + +},{}]},{},[15])(15) +}); +//# sourceMappingURL=exceljs.bare.js.map diff --git a/node_backend/node_modules/exceljs/dist/exceljs.bare.js.map b/node_backend/node_modules/exceljs/dist/exceljs.bare.js.map new file mode 100644 index 0000000000000000000000000000000000000000..d95f90b3a5a703090804c74720c920c6598f83a2 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/exceljs.bare.js.map @@ -0,0 +1,761 @@ +{ + "version": 3, + "sources": [ + "node_modules/browser-pack/_prelude.js", + "lib/csv/csv.js", + "lib/doc/anchor.js", + "lib/doc/cell.js", + "lib/doc/column.js", + "lib/doc/data-validations.js", + "lib/doc/defined-names.js", + "lib/doc/enums.js", + "lib/doc/image.js", + "lib/doc/note.js", + "lib/doc/range.js", + "lib/doc/row.js", + "lib/doc/table.js", + "lib/doc/workbook.js", + "lib/doc/worksheet.js", + "lib/exceljs.bare.js", + "lib/utils/browser-buffer-decode.js", + "lib/utils/browser-buffer-encode.js", + "lib/utils/cell-matrix.js", + "lib/utils/col-cache.js", + "lib/utils/copy-style.js", + "lib/utils/encryptor.js", + "lib/utils/parse-sax.js", + "lib/utils/shared-formula.js", + "lib/utils/stream-buf.js", + "lib/utils/string-buf.js", + "lib/utils/under-dash.js", + "lib/utils/utils.js", + "lib/utils/xml-stream.js", + "lib/utils/zip-stream.js", + "lib/xlsx/defaultnumformats.js", + "lib/xlsx/rel-type.js", + "lib/xlsx/xform/base-xform.js", + "lib/xlsx/xform/book/defined-name-xform.js", + "lib/xlsx/xform/book/sheet-xform.js", + "lib/xlsx/xform/book/workbook-calc-properties-xform.js", + "lib/xlsx/xform/book/workbook-properties-xform.js", + "lib/xlsx/xform/book/workbook-view-xform.js", + "lib/xlsx/xform/book/workbook-xform.js", + "lib/xlsx/xform/comment/comment-xform.js", + "lib/xlsx/xform/comment/comments-xform.js", + "lib/xlsx/xform/comment/style/vml-position-xform.js", + "lib/xlsx/xform/comment/style/vml-protection-xform.js", + "lib/xlsx/xform/comment/vml-anchor-xform.js", + "lib/xlsx/xform/comment/vml-client-data-xform.js", + "lib/xlsx/xform/comment/vml-notes-xform.js", + "lib/xlsx/xform/comment/vml-shape-xform.js", + "lib/xlsx/xform/comment/vml-textbox-xform.js", + "lib/xlsx/xform/composite-xform.js", + "lib/xlsx/xform/core/app-heading-pairs-xform.js", + "lib/xlsx/xform/core/app-titles-of-parts-xform.js", + "lib/xlsx/xform/core/app-xform.js", + "lib/xlsx/xform/core/content-types-xform.js", + "lib/xlsx/xform/core/core-xform.js", + "lib/xlsx/xform/core/relationship-xform.js", + "lib/xlsx/xform/core/relationships-xform.js", + "lib/xlsx/xform/drawing/base-cell-anchor-xform.js", + "lib/xlsx/xform/drawing/blip-fill-xform.js", + "lib/xlsx/xform/drawing/blip-xform.js", + "lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js", + "lib/xlsx/xform/drawing/c-nv-pr-xform.js", + "lib/xlsx/xform/drawing/cell-position-xform.js", + "lib/xlsx/xform/drawing/drawing-xform.js", + "lib/xlsx/xform/drawing/ext-lst-xform.js", + "lib/xlsx/xform/drawing/ext-xform.js", + "lib/xlsx/xform/drawing/hlink-click-xform.js", + "lib/xlsx/xform/drawing/nv-pic-pr-xform.js", + "lib/xlsx/xform/drawing/one-cell-anchor-xform.js", + "lib/xlsx/xform/drawing/pic-xform.js", + "lib/xlsx/xform/drawing/sp-pr.js", + "lib/xlsx/xform/drawing/two-cell-anchor-xform.js", + "lib/xlsx/xform/list-xform.js", + "lib/xlsx/xform/sheet/auto-filter-xform.js", + "lib/xlsx/xform/sheet/cell-xform.js", + "lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js", + "lib/xlsx/xform/sheet/cf/cf-rule-xform.js", + "lib/xlsx/xform/sheet/cf/cfvo-xform.js", + "lib/xlsx/xform/sheet/cf/color-scale-xform.js", + "lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js", + "lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js", + "lib/xlsx/xform/sheet/cf/databar-xform.js", + "lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js", + "lib/xlsx/xform/sheet/cf/formula-xform.js", + "lib/xlsx/xform/sheet/cf/icon-set-xform.js", + "lib/xlsx/xform/sheet/col-xform.js", + "lib/xlsx/xform/sheet/data-validations-xform.js", + "lib/xlsx/xform/sheet/dimension-xform.js", + "lib/xlsx/xform/sheet/drawing-xform.js", + "lib/xlsx/xform/sheet/ext-lst-xform.js", + "lib/xlsx/xform/sheet/header-footer-xform.js", + "lib/xlsx/xform/sheet/hyperlink-xform.js", + "lib/xlsx/xform/sheet/merge-cell-xform.js", + "lib/xlsx/xform/sheet/merges.js", + "lib/xlsx/xform/sheet/outline-properties-xform.js", + "lib/xlsx/xform/sheet/page-breaks-xform.js", + "lib/xlsx/xform/sheet/page-margins-xform.js", + "lib/xlsx/xform/sheet/page-setup-properties-xform.js", + "lib/xlsx/xform/sheet/page-setup-xform.js", + "lib/xlsx/xform/sheet/picture-xform.js", + "lib/xlsx/xform/sheet/print-options-xform.js", + "lib/xlsx/xform/sheet/row-breaks-xform.js", + "lib/xlsx/xform/sheet/row-xform.js", + "lib/xlsx/xform/sheet/sheet-format-properties-xform.js", + "lib/xlsx/xform/sheet/sheet-properties-xform.js", + "lib/xlsx/xform/sheet/sheet-protection-xform.js", + "lib/xlsx/xform/sheet/sheet-view-xform.js", + "lib/xlsx/xform/sheet/table-part-xform.js", + "lib/xlsx/xform/sheet/worksheet-xform.js", + "lib/xlsx/xform/simple/boolean-xform.js", + "lib/xlsx/xform/simple/date-xform.js", + "lib/xlsx/xform/simple/integer-xform.js", + "lib/xlsx/xform/simple/string-xform.js", + "lib/xlsx/xform/static-xform.js", + "lib/xlsx/xform/strings/phonetic-text-xform.js", + "lib/xlsx/xform/strings/rich-text-xform.js", + "lib/xlsx/xform/strings/shared-string-xform.js", + "lib/xlsx/xform/strings/shared-strings-xform.js", + "lib/xlsx/xform/strings/text-xform.js", + "lib/xlsx/xform/style/alignment-xform.js", + "lib/xlsx/xform/style/border-xform.js", + "lib/xlsx/xform/style/color-xform.js", + "lib/xlsx/xform/style/dxf-xform.js", + "lib/xlsx/xform/style/fill-xform.js", + "lib/xlsx/xform/style/font-xform.js", + "lib/xlsx/xform/style/numfmt-xform.js", + "lib/xlsx/xform/style/protection-xform.js", + "lib/xlsx/xform/style/style-xform.js", + "lib/xlsx/xform/style/styles-xform.js", + "lib/xlsx/xform/style/underline-xform.js", + "lib/xlsx/xform/table/auto-filter-xform.js", + "lib/xlsx/xform/table/custom-filter-xform.js", + "lib/xlsx/xform/table/filter-column-xform.js", + "lib/xlsx/xform/table/filter-xform.js", + "lib/xlsx/xform/table/table-column-xform.js", + "lib/xlsx/xform/table/table-style-info-xform.js", + "lib/xlsx/xform/table/table-xform.js", + "lib/xlsx/xlsx.js", + "lib/xlsx/xml/theme1.js", + "node_modules/@fast-csv/format/build/src/CsvFormatterStream.js", + "node_modules/@fast-csv/format/build/src/FormatterOptions.js", + "node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js", + "node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js", + "node_modules/@fast-csv/format/build/src/formatter/index.js", + "node_modules/@fast-csv/format/build/src/index.js", + "node_modules/@fast-csv/format/build/src/types.js", + "node_modules/@fast-csv/parse/build/src/CsvParserStream.js", + "node_modules/@fast-csv/parse/build/src/ParserOptions.js", + "node_modules/@fast-csv/parse/build/src/index.js", + "node_modules/@fast-csv/parse/build/src/parser/Parser.js", + "node_modules/@fast-csv/parse/build/src/parser/RowParser.js", + "node_modules/@fast-csv/parse/build/src/parser/Scanner.js", + "node_modules/@fast-csv/parse/build/src/parser/Token.js", + "node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js", + "node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js", + "node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js", + "node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js", + "node_modules/@fast-csv/parse/build/src/parser/column/index.js", + "node_modules/@fast-csv/parse/build/src/parser/index.js", + "node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js", + "node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js", + "node_modules/@fast-csv/parse/build/src/transforms/index.js", + "node_modules/@fast-csv/parse/build/src/types.js", + "node_modules/asn1.js/lib/asn1.js", + "node_modules/asn1.js/lib/asn1/api.js", + "node_modules/asn1.js/lib/asn1/base/buffer.js", + "node_modules/asn1.js/lib/asn1/base/index.js", + "node_modules/asn1.js/lib/asn1/base/node.js", + "node_modules/asn1.js/lib/asn1/base/reporter.js", + "node_modules/asn1.js/lib/asn1/constants/der.js", + "node_modules/asn1.js/lib/asn1/constants/index.js", + "node_modules/asn1.js/lib/asn1/decoders/der.js", + "node_modules/asn1.js/lib/asn1/decoders/index.js", + "node_modules/asn1.js/lib/asn1/decoders/pem.js", + "node_modules/asn1.js/lib/asn1/encoders/der.js", + "node_modules/asn1.js/lib/asn1/encoders/index.js", + "node_modules/asn1.js/lib/asn1/encoders/pem.js", + "node_modules/asn1.js/node_modules/bn.js/lib/bn.js", + "node_modules/base64-js/index.js", + "node_modules/bn.js/lib/bn.js", + "node_modules/brorand/index.js", + "node_modules/browser-resolve/empty.js", + "node_modules/browserify-aes/aes.js", + "node_modules/browserify-aes/authCipher.js", + "node_modules/browserify-aes/browser.js", + "node_modules/browserify-aes/decrypter.js", + "node_modules/browserify-aes/encrypter.js", + "node_modules/browserify-aes/ghash.js", + "node_modules/browserify-aes/incr32.js", + "node_modules/browserify-aes/modes/cbc.js", + "node_modules/browserify-aes/modes/cfb.js", + "node_modules/browserify-aes/modes/cfb1.js", + "node_modules/browserify-aes/modes/cfb8.js", + "node_modules/browserify-aes/modes/ctr.js", + "node_modules/browserify-aes/modes/ecb.js", + "node_modules/browserify-aes/modes/index.js", + "node_modules/browserify-aes/modes/list.json", + "node_modules/browserify-aes/modes/ofb.js", + "node_modules/browserify-aes/streamCipher.js", + "node_modules/browserify-cipher/browser.js", + "node_modules/browserify-des/index.js", + "node_modules/browserify-des/modes.js", + "node_modules/browserify-rsa/index.js", + "node_modules/browserify-sign/algos.js", + "node_modules/browserify-sign/browser/algorithms.json", + "node_modules/browserify-sign/browser/curves.json", + "node_modules/browserify-sign/browser/index.js", + "node_modules/browserify-sign/browser/sign.js", + "node_modules/browserify-sign/browser/verify.js", + "node_modules/browserify/lib/_empty.js", + "node_modules/browserify/node_modules/safe-buffer/index.js", + "node_modules/browserify/node_modules/string_decoder/lib/string_decoder.js", + "node_modules/buffer-xor/index.js", + "node_modules/buffer/index.js", + "node_modules/cipher-base/index.js", + "node_modules/core-util-is/lib/util.js", + "node_modules/create-ecdh/browser.js", + "node_modules/create-hash/browser.js", + "node_modules/create-hash/md5.js", + "node_modules/create-hmac/browser.js", + "node_modules/create-hmac/legacy.js", + "node_modules/crypto-browserify/index.js", + "node_modules/dayjs/dayjs.min.js", + "node_modules/dayjs/plugin/customParseFormat.js", + "node_modules/dayjs/plugin/utc.js", + "node_modules/des.js/lib/des.js", + "node_modules/des.js/lib/des/cbc.js", + "node_modules/des.js/lib/des/cipher.js", + "node_modules/des.js/lib/des/des.js", + "node_modules/des.js/lib/des/ede.js", + "node_modules/des.js/lib/des/utils.js", + "node_modules/diffie-hellman/browser.js", + "node_modules/diffie-hellman/lib/dh.js", + "node_modules/diffie-hellman/lib/generatePrime.js", + "node_modules/diffie-hellman/lib/primes.json", + "node_modules/elliptic/lib/elliptic.js", + "node_modules/elliptic/lib/elliptic/curve/base.js", + "node_modules/elliptic/lib/elliptic/curve/edwards.js", + "node_modules/elliptic/lib/elliptic/curve/index.js", + "node_modules/elliptic/lib/elliptic/curve/mont.js", + "node_modules/elliptic/lib/elliptic/curve/short.js", + "node_modules/elliptic/lib/elliptic/curves.js", + "node_modules/elliptic/lib/elliptic/ec/index.js", + "node_modules/elliptic/lib/elliptic/ec/key.js", + "node_modules/elliptic/lib/elliptic/ec/signature.js", + "node_modules/elliptic/lib/elliptic/eddsa/index.js", + "node_modules/elliptic/lib/elliptic/eddsa/key.js", + "node_modules/elliptic/lib/elliptic/eddsa/signature.js", + "node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js", + "node_modules/elliptic/lib/elliptic/utils.js", + "node_modules/elliptic/package.json", + "node_modules/events/events.js", + "node_modules/evp_bytestokey/index.js", + "node_modules/fast-csv/build/src/index.js", + "node_modules/hash-base/index.js", + "node_modules/hash.js/lib/hash.js", + "node_modules/hash.js/lib/hash/common.js", + "node_modules/hash.js/lib/hash/hmac.js", + "node_modules/hash.js/lib/hash/ripemd.js", + "node_modules/hash.js/lib/hash/sha.js", + "node_modules/hash.js/lib/hash/sha/1.js", + "node_modules/hash.js/lib/hash/sha/224.js", + "node_modules/hash.js/lib/hash/sha/256.js", + "node_modules/hash.js/lib/hash/sha/384.js", + "node_modules/hash.js/lib/hash/sha/512.js", + "node_modules/hash.js/lib/hash/sha/common.js", + "node_modules/hash.js/lib/hash/utils.js", + "node_modules/hmac-drbg/lib/hmac-drbg.js", + "node_modules/ieee754/index.js", + "node_modules/inherits/inherits_browser.js", + "node_modules/jszip/dist/jszip.min.js", + "node_modules/lodash.escaperegexp/index.js", + "node_modules/lodash.groupby/index.js", + "node_modules/lodash.isboolean/index.js", + "node_modules/lodash.isequal/index.js", + "node_modules/lodash.isfunction/index.js", + "node_modules/lodash.isnil/index.js", + "node_modules/lodash.isundefined/index.js", + "node_modules/lodash.uniq/index.js", + "node_modules/md5.js/index.js", + "node_modules/miller-rabin/lib/mr.js", + "node_modules/minimalistic-assert/index.js", + "node_modules/minimalistic-crypto-utils/lib/utils.js", + "node_modules/parse-asn1/aesid.json", + "node_modules/parse-asn1/asn1.js", + "node_modules/parse-asn1/certificate.js", + "node_modules/parse-asn1/fixProc.js", + "node_modules/parse-asn1/index.js", + "node_modules/pbkdf2/browser.js", + "node_modules/pbkdf2/lib/async.js", + "node_modules/pbkdf2/lib/default-encoding.js", + "node_modules/pbkdf2/lib/precondition.js", + "node_modules/pbkdf2/lib/sync-browser.js", + "node_modules/pbkdf2/lib/to-buffer.js", + "node_modules/process-nextick-args/index.js", + "node_modules/process/browser.js", + "node_modules/public-encrypt/browser.js", + "node_modules/public-encrypt/mgf.js", + "node_modules/public-encrypt/privateDecrypt.js", + "node_modules/public-encrypt/publicEncrypt.js", + "node_modules/public-encrypt/withPublic.js", + "node_modules/public-encrypt/xor.js", + "node_modules/randombytes/browser.js", + "node_modules/randomfill/browser.js", + "node_modules/readable-stream/errors-browser.js", + "node_modules/readable-stream/lib/_stream_duplex.js", + "node_modules/readable-stream/lib/_stream_passthrough.js", + "node_modules/readable-stream/lib/_stream_readable.js", + "node_modules/readable-stream/lib/_stream_transform.js", + "node_modules/readable-stream/lib/_stream_writable.js", + "node_modules/readable-stream/lib/internal/streams/async_iterator.js", + "node_modules/readable-stream/lib/internal/streams/buffer_list.js", + "node_modules/readable-stream/lib/internal/streams/destroy.js", + "node_modules/readable-stream/lib/internal/streams/end-of-stream.js", + "node_modules/readable-stream/lib/internal/streams/from-browser.js", + "node_modules/readable-stream/lib/internal/streams/pipeline.js", + "node_modules/readable-stream/lib/internal/streams/state.js", + "node_modules/readable-stream/lib/internal/streams/stream-browser.js", + "node_modules/readable-stream/readable-browser.js", + "node_modules/ripemd160/index.js", + "node_modules/safe-buffer/index.js", + "node_modules/safer-buffer/safer.js", + "node_modules/saxes/saxes.js", + "node_modules/sha.js/hash.js", + "node_modules/sha.js/index.js", + "node_modules/sha.js/sha.js", + "node_modules/sha.js/sha1.js", + "node_modules/sha.js/sha224.js", + "node_modules/sha.js/sha256.js", + "node_modules/sha.js/sha384.js", + "node_modules/sha.js/sha512.js", + "node_modules/stream-browserify/index.js", + "node_modules/stream-browserify/node_modules/isarray/index.js", + "node_modules/stream-browserify/node_modules/readable-stream/duplex-browser.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/BufferList.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js", + "node_modules/stream-browserify/node_modules/readable-stream/passthrough.js", + "node_modules/stream-browserify/node_modules/readable-stream/readable-browser.js", + "node_modules/stream-browserify/node_modules/readable-stream/transform.js", + "node_modules/stream-browserify/node_modules/readable-stream/writable-browser.js", + "node_modules/timers-browserify/main.js", + "node_modules/util-deprecate/browser.js", + "node_modules/util/node_modules/inherits/inherits_browser.js", + "node_modules/util/support/isBufferBrowser.js", + "node_modules/util/util.js", + "node_modules/uuid/dist/index.js", + "node_modules/uuid/dist/md5-browser.js", + "node_modules/uuid/dist/nil.js", + "node_modules/uuid/dist/parse.js", + "node_modules/uuid/dist/regex.js", + "node_modules/uuid/dist/rng-browser.js", + "node_modules/uuid/dist/sha1-browser.js", + "node_modules/uuid/dist/stringify.js", + "node_modules/uuid/dist/v1.js", + "node_modules/uuid/dist/v3.js", + "node_modules/uuid/dist/v35.js", + "node_modules/uuid/dist/v4.js", + "node_modules/uuid/dist/v5.js", + "node_modules/uuid/dist/validate.js", + "node_modules/uuid/dist/version.js", + "node_modules/xmlchars/xml/1.0/ed5.js", + "node_modules/xmlchars/xml/1.1/ed2.js", + "node_modules/xmlchars/xmlns/1.0/ed3.js" + ], + "names": [], + "mappings": "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Y,CAAC;AAEpC,MAAM,CAAC,OAAO,GAAG,IAAI;;;;;;;ACrrBrB;AACA,MAAM,CAAC,OAAO,GACZ,wtPAAwtP;;;;ACF1tP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,G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,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,G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IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IAEnB,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;IAC3C,GAAG,CAAC,MAAM,GAAG,EAAE;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CA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AC,KAAK,CAAC;AACzC,CAAC;;;;;ACND,IAAI,WAAW,GAAG;EAChB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;EACvB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;EACvB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,GAAG,EAAE,OAAO,CAAC,OAAO;AACtB,CAAC;AAED,IAAI,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;AAElC,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;EACrB,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAClD;AAEA,MAAM,CAAC,OAAO,GAAG,KAAK;;;ACjBtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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;;;ACArD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACRA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;AACvC,IAAI,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;AACvC,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAClC,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;AAC5B,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AAEhC,IAAI,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAC7C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC7C,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC;EAC3D,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;AACjD,CAAC,CAAC;AAEF,SAAS,IAAI,CAAE,SAAS,EAAE;EACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;EAE1B,IAAI,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC;EAChC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;EAEpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;EAC1B,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;EAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;EACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;AAC5B;AACA,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;AAE/B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;EACtD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;EACvB,IAAI,CAAC,CAAC;AACR,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,IAAI,EAAE,GAAG,EAAE;EAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;EAE3D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;EACvB,OAAO,IAAI;AACb,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,UAAU,CAAE,GAAG,EAAE,GAAG,EAAE;EACnD,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EAC9B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;EAEpE,OAAO,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG;AACtC,CAAC;AAED,SAAS,MAAM,CAAE,SAAS,EAAE;EAC1B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;EAE1B,IAAI,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC;EAChC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;EAEpD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;EAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;EACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;AAC5B;AACA,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;AAEjC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;EACxD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;EACvB,IAAI,CAAC,CAAC;AACR,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,IAAI,EAAE,GAAG,EAAE;EACpD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;EAE3D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;EACvB,OAAO,IAAI;AACb,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,YAAY,CAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EAC9D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;EAExD,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EAC9B,OAAO,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,SAAS,UAAU,CAAE,SAAS,EAAE;EAC9B,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC;AAC5B;AAEA,SAAS,YAAY,CAAE,SAAS,EAAE;EAChC,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC;AAC9B;AAEA,MAAM,CAAC,OAAO,GAAG;EACf,IAAI,EAAE,UAAU;EAChB,MAAM,EAAE,YAAY;EACpB,UAAU,EAAE,UAAU;EACtB,YAAY,EAAE;AAChB,CAAC;;;;;AC3FD;AACA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;AACvC,IAAI,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACnC,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE;AAC/B,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;AACzB,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;AACrC,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;AAErC,SAAS,IAAI,CAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE;EACjD,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC;EACzB,IAAI,IAAI,CAAC,KAAK,EAAE;IACd;IACA,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,WAAW,EAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;IAC/F,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;EAC3B,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;IAC9B,IAAI,QAAQ,KAAK,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;IACjE,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;EACtC,CAAC,MAAM;IACL,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,WAAW,EAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;EAC/F;EACA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;EACjC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;EACnC,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;EAChB,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EACzD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EACd,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAE3C,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;EACxB,OAAO,GAAG;AACZ;AAEA,SAAS,MAAM,CAAE,IAAI,EAAE,IAAI,EAAE;EAC3B,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC1C,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAEtE,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC;EAC3B,IAAI,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;EAC/C,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EAExB,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC;AAEA,SAAS,OAAO,CAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;EAClC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;EAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;EACrB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;EACrB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;EACrB,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC;EACL,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAChC,IAAI,CAAC,GAAG,KAAK;EACb,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;EACjC,OAAO,CAAC,KAAK,KAAK,EAAE;IAClB,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;IACxB,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;MACnB,CAAC,GAAG,KAAK;MACT,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACf;EACF;EACA,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACpB;AAEA,SAAS,KAAK,CAAE,CAAC,EAAE,CAAC,EAAE;EACpB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;EACf,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;;EAEf;EACA,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;EAClC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;EAElC,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;EACnC,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;EACvC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EACxC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACzB;AAEA,SAAS,MAAM,CAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;EACjC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;EAC5B,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE;IAC7B,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;EAC/B;EACA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM;EACtB,IAAI,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;EAChC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;EAC1B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACT,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;EAC1B,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;EAC3F,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EAC1C,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;EAC3F,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EAC1C,OAAO;IAAE,CAAC,EAAE,CAAC;IAAE,CAAC,EAAE;EAAE,CAAC;AACvB;AAEA,SAAS,QAAQ,CAAE,KAAK,EAAE,CAAC,EAAE;EAC3B,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;EACxB,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;EAC/C,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;EAChC,OAAO,IAAI;AACb;AAEA,SAAS,WAAW,CAAE,IAAI,EAAE,CAAC,EAAE;EAC7B,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;EACxB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;EAClB,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;EACrC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE;IAC/B,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACrD,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EACnC;EACA,OAAO,GAAG;AACZ;AAEA,SAAS,OAAO,CAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE;EAC7B,IAAI,CAAC;EACL,IAAI,CAAC;EAEL,GAAG;IACD,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnB,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE;MACnC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;MACnD,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B;IAEA,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5E,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EACrD,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;EAExB,OAAO,CAAC;AACV;AAEA,SAAS,KAAK,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EAC1B,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD;AAEA,MAAM,CAAC,OAAO,GAAG,IAAI;AACrB,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM;AAC9B,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO;;;;;AC9IhC;AACA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;AACzB,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE;AAC/B,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;AACrC,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;AAErC,SAAS,MAAM,CAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE;EAC9C,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;EACxB,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE;IACrB;IACA,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,WAAW,EAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;IAC9F,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;EACjC,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE;IAC7B,IAAI,QAAQ,KAAK,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;IAChE,OAAO,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;EAClC,CAAC,MAAM;IACL,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,WAAW,EAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;EAC9F;EACA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;EACjC,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;EAClC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;EACb,IAAI,MAAM,GAAG,CAAC;EACd,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,EAAE;IACzC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACd,MAAM,EAAE;EACV;EACA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EACd,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;IACxB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACnB;EACA,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;EACtB,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;EAC9B,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EAE5B,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;EAC5C,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;EAC1C,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;EAC5B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;EACtC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;EAEtC,CAAC,GAAG,CAAC,CAAC;EACN,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxC,OAAO,GAAG,KAAK,CAAC;AAClB;AAEA,SAAS,QAAQ,CAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;EACjC,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACxD,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAEpF,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC;EAC3B,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI;EAE5C,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC;AACxC;AAEA,SAAS,SAAS,CAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;EAClC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;EAClB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;EAClB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;EAClB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO;EACxB,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;EACrD,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;EAClB,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;EAClB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;EAChB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;EAChB,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;EACtB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CACnB,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAClC,OAAO,CAAC,CAAC,CACT,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACrD,GAAG,CAAC,CAAC,CAAC,CACN,GAAG,CAAC,CAAC,CAAC;EACT,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB;AAEA,SAAS,UAAU,CAAE,CAAC,EAAE,CAAC,EAAE;EACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC;EAClD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC;AACnD;AAEA,MAAM,CAAC,OAAO,GAAG,MAAM;;;ACnFvB;AACA;;;;ACDA;AACA,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;AAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;;AAE1B;AACA,SAAS,SAAS,CAAE,GAAG,EAAE,GAAG,EAAE;EAC5B,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;IACnB,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;EACrB;AACF;AACA,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE;EAC/E,MAAM,CAAC,OAAO,GAAG,MAAM;AACzB,CAAC,MAAM;EACL;EACA,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;EAC1B,OAAO,CAAC,MAAM,GAAG,UAAU;AAC7B;AAEA,SAAS,UAAU,CAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE;EAClD,OAAO,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC;AAC9C;;AAEA;AACA,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;AAE7B,UAAU,CAAC,IAAI,GAAG,UAAU,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE;EACzD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC;EACtD;EACA,OAAO,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC;AAC9C,CAAC;AAED,UAAU,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;EACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC5B,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;EAClD;EACA,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;EACtB,IAAI,IAAI,KAAK,SAAS,EAAE;IACtB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;MAChC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC1B,CAAC,MAAM;MACL,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IAChB;EACF,CAAC,MAAM;IACL,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;EACb;EACA,OAAO,GAAG;AACZ,CAAC;AAED,UAAU,CAAC,WAAW,GAAG,UAAU,IAAI,EAAE;EACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC5B,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;EAClD;EACA,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,UAAU,CAAC,eAAe,GAAG,UAAU,IAAI,EAAE;EAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC5B,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;EAClD;EACA,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;AAChC,CAAC;;;AC7DD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;;AAEZ;AAEA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C;;AAEA,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,UAAU,QAAQ,EAAE;EACxD,QAAQ,GAAG,EAAE,GAAG,QAAQ;EACxB,QAAQ,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxC,KAAK,KAAK;IAAC,KAAK,MAAM;IAAC,KAAK,OAAO;IAAC,KAAK,OAAO;IAAC,KAAK,QAAQ;IAAC,KAAK,QAAQ;IAAC,KAAK,MAAM;IAAC,KAAK,OAAO;IAAC,KAAK,SAAS;IAAC,KAAK,UAAU;IAAC,KAAK,KAAK;MAC7I,OAAO,IAAI;IACb;MACE,OAAO,KAAK;EAChB;AACF,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAG,EAAE;EAC/B,IAAI,CAAC,GAAG,EAAE,OAAO,MAAM;EACvB,IAAI,OAAO;EACX,OAAO,IAAI,EAAE;IACX,QAAQ,GAAG;MACT,KAAK,MAAM;MACX,KAAK,OAAO;QACV,OAAO,MAAM;MACf,KAAK,MAAM;MACX,KAAK,OAAO;MACZ,KAAK,SAAS;MACd,KAAK,UAAU;QACb,OAAO,SAAS;MAClB,KAAK,QAAQ;MACb,KAAK,QAAQ;QACX,OAAO,QAAQ;MACjB,KAAK,QAAQ;MACb,KAAK,OAAO;MACZ,KAAK,KAAK;QACR,OAAO,GAAG;MACZ;QACE,IAAI,OAAO,EAAE,OAAO,CAAC;QACrB,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC;QAC9B,OAAO,GAAG,IAAI;IAClB;EACF;AACF;AAAC;;AAED;AACA;AACA,SAAS,iBAAiB,CAAC,GAAG,EAAE;EAC9B,IAAI,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC;EAClC,IAAI,OAAO,IAAI,KAAK,QAAQ,KAAK,MAAM,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC;EACnI,OAAO,IAAI,IAAI,GAAG;AACpB;;AAEA;AACA;AACA;AACA,OAAO,CAAC,aAAa,GAAG,aAAa;AACrC,SAAS,aAAa,CAAC,QAAQ,EAAE;EAC/B,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;EAC3C,IAAI,EAAE;EACN,QAAQ,IAAI,CAAC,QAAQ;IACnB,KAAK,SAAS;MACZ,IAAI,CAAC,IAAI,GAAG,SAAS;MACrB,IAAI,CAAC,GAAG,GAAG,QAAQ;MACnB,EAAE,GAAG,CAAC;MACN;IACF,KAAK,MAAM;MACT,IAAI,CAAC,QAAQ,GAAG,YAAY;MAC5B,EAAE,GAAG,CAAC;MACN;IACF,KAAK,QAAQ;MACX,IAAI,CAAC,IAAI,GAAG,UAAU;MACtB,IAAI,CAAC,GAAG,GAAG,SAAS;MACpB,EAAE,GAAG,CAAC;MACN;IACF;MACE,IAAI,CAAC,KAAK,GAAG,WAAW;MACxB,IAAI,CAAC,GAAG,GAAG,SAAS;MACpB;EACJ;EACA,IAAI,CAAC,QAAQ,GAAG,CAAC;EACjB,IAAI,CAAC,SAAS,GAAG,CAAC;EAClB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;AACxC;AAEA,aAAa,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAG,EAAE;EAC7C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE;EAC/B,IAAI,CAAC;EACL,IAAI,CAAC;EACL,IAAI,IAAI,CAAC,QAAQ,EAAE;IACjB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,KAAK,SAAS,EAAE,OAAO,EAAE;IAC9B,CAAC,GAAG,IAAI,CAAC,QAAQ;IACjB,IAAI,CAAC,QAAQ,GAAG,CAAC;EACnB,CAAC,MAAM;IACL,CAAC,GAAG,CAAC;EACP;EACA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;EACxE,OAAO,CAAC,IAAI,EAAE;AAChB,CAAC;AAED,aAAa,CAAC,SAAS,CAAC,GAAG,GAAG,OAAO;;AAErC;AACA,aAAa,CAAC,SAAS,CAAC,IAAI,GAAG,QAAQ;;AAEvC;AACA,aAAa,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,GAAG,EAAE;EAChD,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE;IAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACzE,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;EACjE;EACA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;EACtE,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM;AAC7B,CAAC;;AAED;AACA;AACA,SAAS,aAAa,CAAC,IAAI,EAAE;EAC3B,IAAI,IAAI,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC;EAC5I,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACrC;;AAEA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;EACzC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;EACtB,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;EACnB,IAAI,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC9B,IAAI,EAAE,IAAI,CAAC,EAAE;IACX,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC;IAClC,OAAO,EAAE;EACX;EACA,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;EAClC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC1B,IAAI,EAAE,IAAI,CAAC,EAAE;IACX,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC;IAClC,OAAO,EAAE;EACX;EACA,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;EAClC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC1B,IAAI,EAAE,IAAI,CAAC,EAAE;IACX,IAAI,EAAE,GAAG,CAAC,EAAE;MACV,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC;IAClD;IACA,OAAO,EAAE;EACX;EACA,OAAO,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;EACzC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;IAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC;IACjB,OAAO,QAAQ;EACjB;EACA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;IACvC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;MAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC;MACjB,OAAO,QAAQ;IACjB;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;MACvC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC;QACjB,OAAO,QAAQ;MACjB;IACF;EACF;AACF;;AAEA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE;EACzB,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ;EACtC,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EACzC,IAAI,CAAC,KAAK,SAAS,EAAE,OAAO,CAAC;EAC7B,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE;IAC/B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;EACjE;EACA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;EACzC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM;AAC7B;;AAEA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE;EACxB,IAAI,KAAK,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;EAClD,IAAI,CAAC,SAAS,GAAG,KAAK;EACtB,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;EAC9C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC;EAC/B,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC;AACrC;;AAEA;AACA;AACA,SAAS,OAAO,CAAC,GAAG,EAAE;EACpB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;EAChD,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,QAAQ;EACtC,OAAO,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE;EACzB,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IAC9B,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE;MACL,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;MAClC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE;QAC9B,IAAI,CAAC,QAAQ,GAAG,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MACvB;IACF;IACA,OAAO,CAAC;EACV;EACA,IAAI,CAAC,QAAQ,GAAG,CAAC;EACjB,IAAI,CAAC,SAAS,GAAG,CAAC;EAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;EACtC,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD;;AAEA;AACA;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE;EACrB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;EAChD,IAAI,IAAI,CAAC,QAAQ,EAAE;IACjB,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ;IACxC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC;EACtD;EACA,OAAO,CAAC;AACV;AAEA,SAAS,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE;EAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;EAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;EAC7C,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC;EACrB,IAAI,CAAC,SAAS,GAAG,CAAC;EAClB,IAAI,CAAC,KAAK,CAAC,EAAE;IACX,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;EACxC,CAAC,MAAM;IACL,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;EACxC;EACA,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD;AAEA,SAAS,SAAS,CAAC,GAAG,EAAE;EACtB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;EAChD,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;EACpF,OAAO,CAAC;AACV;;AAEA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE;EACxB,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpC;AAEA,SAAS,SAAS,CAAC,GAAG,EAAE;EACtB,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;AACjD;;;;;;ACvSA,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,CAAE,CAAC,EAAE,CAAC,EAAE;EACnC,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;EACzC,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC;EAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;IAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACzB;EAEA,OAAO,MAAM;AACf,CAAC;;;;;;ACTD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;;AAEZ,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;AACjC,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;AAEhC,OAAO,CAAC,MAAM,GAAG,MAAM;AACvB,OAAO,CAAC,UAAU,GAAG,UAAU;AAC/B,OAAO,CAAC,iBAAiB,GAAG,EAAE;AAE9B,IAAI,YAAY,GAAG,UAAU;AAC7B,OAAO,CAAC,UAAU,GAAG,YAAY;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,CAAC;AAEhD,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,OAAO,OAAO,KAAK,WAAW,IAC7D,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;EACvC,OAAO,CAAC,KAAK,CACX,2EAA2E,GAC3E,sEACF,CAAC;AACH;AAEA,SAAS,iBAAiB,CAAA,EAAI;EAC5B;EACA,IAAI;IACF,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;IAC3B,GAAG,CAAC,SAAS,GAAG;MAAE,SAAS,EAAE,UAAU,CAAC,SAAS;MAAE,GAAG,EAAE,SAAA,CAAA,EAAY;QAAE,OAAO,EAAE;MAAC;IAAE,CAAC;IACnF,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;EACzB,CAAC,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE;EAChD,UAAU,EAAE,IAAI;EAChB,GAAG,EAAE,SAAA,CAAA,EAAY;IACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,SAAS;IAC5C,OAAO,IAAI,CAAC,MAAM;EACpB;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE;EAChD,UAAU,EAAE,IAAI;EAChB,GAAG,EAAE,SAAA,CAAA,EAAY;IACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,SAAS;IAC5C,OAAO,IAAI,CAAC,UAAU;EACxB;AACF,CAAC,CAAC;AAEF,SAAS,YAAY,CAAE,MAAM,EAAE;EAC7B,IAAI,MAAM,GAAG,YAAY,EAAE;IACzB,MAAM,IAAI,UAAU,CAAC,aAAa,GAAG,MAAM,GAAG,gCAAgC,CAAC;EACjF;EACA;EACA,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;EAChC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;EAChC,OAAO,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,MAAM,CAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE;EAC9C;EACA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;MACxC,MAAM,IAAI,SAAS,CACjB,oEACF,CAAC;IACH;IACA,OAAO,WAAW,CAAC,GAAG,CAAC;EACzB;EACA,OAAO,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC;AAC5C;;AAEA;AACA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,IACvD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE;EACrC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;IAC5C,KAAK,EAAE,IAAI;IACX,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE;EACZ,CAAC,CAAC;AACJ;AAEA,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAC;;AAEvB,SAAS,IAAI,CAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE;EAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC;EAC5C;EAEA,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;IAC7B,OAAO,aAAa,CAAC,KAAK,CAAC;EAC7B;EAEA,IAAI,KAAK,IAAI,IAAI,EAAE;IACjB,MAAM,SAAS,CACb,6EAA6E,GAC7E,sCAAsC,GAAI,OAAO,KACnD,CAAC;EACH;EAEA,IAAI,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,IAC7B,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAE,EAAE;IACpD,OAAO,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC;EACzD;EAEA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;IAC7B,MAAM,IAAI,SAAS,CACjB,uEACF,CAAC;EACH;EAEA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;EAC9C,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,EAAE;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC;EACvD;EAEA,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;EACzB,IAAI,CAAC,EAAE,OAAO,CAAC;EAEf,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,IAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE;IACnD,OAAO,MAAM,CAAC,IAAI,CAChB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,MACzD,CAAC;EACH;EAEA,MAAM,IAAI,SAAS,CACjB,6EAA6E,GAC7E,sCAAsC,GAAI,OAAO,KACnD,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE;EACvD,OAAO,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC;AAC9C,CAAC;;AAED;AACA;AACA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS;AACjD,MAAM,CAAC,SAAS,GAAG,UAAU;AAE7B,SAAS,UAAU,CAAE,IAAI,EAAE;EACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC5B,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;EAC/D,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE;IACnB,MAAM,IAAI,UAAU,CAAC,aAAa,GAAG,IAAI,GAAG,gCAAgC,CAAC;EAC/E;AACF;AAEA,SAAS,KAAK,CAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;EACpC,UAAU,CAAC,IAAI,CAAC;EAChB,IAAI,IAAI,IAAI,CAAC,EAAE;IACb,OAAO,YAAY,CAAC,IAAI,CAAC;EAC3B;EACA,IAAI,IAAI,KAAK,SAAS,EAAE;IACtB;IACA;IACA;IACA,OAAO,OAAO,QAAQ,KAAK,QAAQ,GAC/B,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,GACvC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EACnC;EACA,OAAO,YAAY,CAAC,IAAI,CAAC;AAC3B;;AAEA;AACA;AACA;AACA;AACA,MAAM,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;EAC7C,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAE,IAAI,EAAE;EAC1B,UAAU,CAAC,IAAI,CAAC;EAChB,OAAO,YAAY,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD;;AAEA;AACA;AACA;AACA,MAAM,CAAC,WAAW,GAAG,UAAU,IAAI,EAAE;EACnC,OAAO,WAAW,CAAC,IAAI,CAAC;AAC1B,CAAC;AACD;AACA;AACA;AACA,MAAM,CAAC,eAAe,GAAG,UAAU,IAAI,EAAE;EACvC,OAAO,WAAW,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAE,MAAM,EAAE,QAAQ,EAAE;EACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE;IACnD,QAAQ,GAAG,MAAM;EACnB;EAEA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;IAChC,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;EACtD;EAEA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC;EAC7C,IAAI,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;EAE9B,IAAI,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;EAExC,IAAI,MAAM,KAAK,MAAM,EAAE;IACrB;IACA;IACA;IACA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;EAC5B;EAEA,OAAO,GAAG;AACZ;AAEA,SAAS,aAAa,CAAE,KAAK,EAAE;EAC7B,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;EAC7D,IAAI,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;EAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;IAClC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;EACzB;EACA,OAAO,GAAG;AACZ;AAEA,SAAS,eAAe,CAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE;EACnD,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE;IACnD,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC;EAC9D;EAEA,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE;IACjD,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC;EAC9D;EAEA,IAAI,GAAG;EACP,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;IACpD,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC;EAC7B,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE;IAC/B,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC;EACzC,CAAC,MAAM;IACL,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC;EACjD;;EAEA;EACA,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;EAChC,OAAO,GAAG;AACZ;AAEA,SAAS,UAAU,CAAE,GAAG,EAAE;EACxB,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACxB,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;IACjC,IAAI,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;IAE3B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;MACpB,OAAO,GAAG;IACZ;IAEA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACxB,OAAO,GAAG;EACZ;EAEA,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;IAC5B,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;MAC7D,OAAO,YAAY,CAAC,CAAC,CAAC;IACxB;IACA,OAAO,aAAa,CAAC,GAAG,CAAC;EAC3B;EAEA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IACpD,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;EAChC;AACF;AAEA,SAAS,OAAO,CAAE,MAAM,EAAE;EACxB;EACA;EACA,IAAI,MAAM,IAAI,YAAY,EAAE;IAC1B,MAAM,IAAI,UAAU,CAAC,iDAAiD,GACjD,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;EACzE;EACA,OAAO,MAAM,GAAG,CAAC;AACnB;AAEA,SAAS,UAAU,CAAE,MAAM,EAAE;EAC3B,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE;IAAE;IACvB,MAAM,GAAG,CAAC;EACZ;EACA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAC9B;AAEA,MAAM,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAE,CAAC,EAAE;EACtC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,IACtC,CAAC,KAAK,MAAM,CAAC,SAAS,EAAC;AAC3B,CAAC;;AAED,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,CAAE,CAAC,EAAE,CAAC,EAAE;EACvC,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;EACzE,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC;EACzE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;IAC9C,MAAM,IAAI,SAAS,CACjB,uEACF,CAAC;EACH;EAEA,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;EAErB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;EAChB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;EAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;IAClD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;MACjB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MACR,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MACR;IACF;EACF;EAEA,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;EACpB,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;EACnB,OAAO,CAAC;AACV,CAAC;AAED,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CAAE,QAAQ,EAAE;EACjD,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC;IACpC,KAAK,KAAK;IACV,KAAK,MAAM;IACX,KAAK,OAAO;IACZ,KAAK,OAAO;IACZ,KAAK,QAAQ;IACb,KAAK,QAAQ;IACb,KAAK,QAAQ;IACb,KAAK,MAAM;IACX,KAAK,OAAO;IACZ,KAAK,SAAS;IACd,KAAK,UAAU;MACb,OAAO,IAAI;IACb;MACE,OAAO,KAAK;EAChB;AACF,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,IAAI,EAAE,MAAM,EAAE;EAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;IACxB,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC;EACpE;EAEA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;IACrB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EACxB;EAEA,IAAI,CAAC;EACL,IAAI,MAAM,KAAK,SAAS,EAAE;IACxB,MAAM,GAAG,CAAC;IACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;MAChC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;IAC1B;EACF;EAEA,IAAI,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;EACvC,IAAI,GAAG,GAAG,CAAC;EACX,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;IAChC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;IACjB,IAAI,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;MAC/B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB;IACA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;MACzB,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC;IACpE;IACA,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,GAAG,IAAI,GAAG,CAAC,MAAM;EACnB;EACA,OAAO,MAAM;AACf,CAAC;AAED,SAAS,UAAU,CAAE,MAAM,EAAE,QAAQ,EAAE;EACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC3B,OAAO,MAAM,CAAC,MAAM;EACtB;EACA,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;IACjE,OAAO,MAAM,CAAC,UAAU;EAC1B;EACA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IAC9B,MAAM,IAAI,SAAS,CACjB,4EAA4E,GAC5E,gBAAgB,GAAG,OAAO,MAC5B,CAAC;EACH;EAEA,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM;EACvB,IAAI,SAAS,GAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAK;EAC/D,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,CAAC,EAAE,OAAO,CAAC;;EAErC;EACA,IAAI,WAAW,GAAG,KAAK;EACvB,SAAS;IACP,QAAQ,QAAQ;MACd,KAAK,OAAO;MACZ,KAAK,QAAQ;MACb,KAAK,QAAQ;QACX,OAAO,GAAG;MACZ,KAAK,MAAM;MACX,KAAK,OAAO;QACV,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM;MACnC,KAAK,MAAM;MACX,KAAK,OAAO;MACZ,KAAK,SAAS;MACd,KAAK,UAAU;QACb,OAAO,GAAG,GAAG,CAAC;MAChB,KAAK,KAAK;QACR,OAAO,GAAG,KAAK,CAAC;MAClB,KAAK,QAAQ;QACX,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM;MACrC;QACE,IAAI,WAAW,EAAE;UACf,OAAO,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAC;QACrD;;QACA,QAAQ,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,WAAW,CAAC,CAAC;QACxC,WAAW,GAAG,IAAI;IACtB;EACF;AACF;AACA,MAAM,CAAC,UAAU,GAAG,UAAU;AAE9B,SAAS,YAAY,CAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;EAC3C,IAAI,WAAW,GAAG,KAAK;;EAEvB;EACA;;EAEA;EACA;EACA;EACA;EACA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE;IACpC,KAAK,GAAG,CAAC;EACX;EACA;EACA;EACA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE;EACX;EAEA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;IAC1C,GAAG,GAAG,IAAI,CAAC,MAAM;EACnB;EAEA,IAAI,GAAG,IAAI,CAAC,EAAE;IACZ,OAAO,EAAE;EACX;;EAEA;EACA,GAAG,MAAM,CAAC;EACV,KAAK,MAAM,CAAC;EAEZ,IAAI,GAAG,IAAI,KAAK,EAAE;IAChB,OAAO,EAAE;EACX;EAEA,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;EAEhC,OAAO,IAAI,EAAE;IACX,QAAQ,QAAQ;MACd,KAAK,KAAK;QACR,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;MAEnC,KAAK,MAAM;MACX,KAAK,OAAO;QACV,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;MAEpC,KAAK,OAAO;QACV,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;MAErC,KAAK,QAAQ;MACb,KAAK,QAAQ;QACX,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;MAEtC,KAAK,QAAQ;QACX,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;MAEtC,KAAK,MAAM;MACX,KAAK,OAAO;MACZ,KAAK,SAAS;MACd,KAAK,UAAU;QACb,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;MAEvC;QACE,IAAI,WAAW,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;QACrE,QAAQ,GAAG,CAAC,QAAQ,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;QACxC,WAAW,GAAG,IAAI;IACtB;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI;AAEjC,SAAS,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EACtB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACZ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACX,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACV;AAEA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAA,EAAI;EAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;EACrB,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;IACjB,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC;EACnE;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACtB;EACA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAA,EAAI;EAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;EACrB,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;IACjB,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC;EACnE;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EAC1B;EACA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAA,EAAI;EAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;EACrB,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;IACjB,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC;EACnE;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EAC1B;EACA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAA,EAAI;EAC/C,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;EACxB,IAAI,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE;EAC3B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC;EAC7D,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ;AAE3D,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,CAAC,EAAE;EAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;EACzE,IAAI,IAAI,KAAK,CAAC,EAAE,OAAO,IAAI;EAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAA,EAAI;EAC7C,IAAI,GAAG,GAAG,EAAE;EACZ,IAAI,GAAG,GAAG,OAAO,CAAC,iBAAiB;EACnC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;EACnE,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,OAAO;EACrC,OAAO,UAAU,GAAG,GAAG,GAAG,GAAG;AAC/B,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE;EACnF,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;IAClC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;EAChE;EACA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC5B,MAAM,IAAI,SAAS,CACjB,kEAAkE,GAClE,gBAAgB,GAAI,OAAO,MAC7B,CAAC;EACH;EAEA,IAAI,KAAK,KAAK,SAAS,EAAE;IACvB,KAAK,GAAG,CAAC;EACX;EACA,IAAI,GAAG,KAAK,SAAS,EAAE;IACrB,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;EAClC;EACA,IAAI,SAAS,KAAK,SAAS,EAAE;IAC3B,SAAS,GAAG,CAAC;EACf;EACA,IAAI,OAAO,KAAK,SAAS,EAAE;IACzB,OAAO,GAAG,IAAI,CAAC,MAAM;EACvB;EAEA,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;IAC9E,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC;EAC5C;EAEA,IAAI,SAAS,IAAI,OAAO,IAAI,KAAK,IAAI,GAAG,EAAE;IACxC,OAAO,CAAC;EACV;EACA,IAAI,SAAS,IAAI,OAAO,EAAE;IACxB,OAAO,CAAC,CAAC;EACX;EACA,IAAI,KAAK,IAAI,GAAG,EAAE;IAChB,OAAO,CAAC;EACV;EAEA,KAAK,MAAM,CAAC;EACZ,GAAG,MAAM,CAAC;EACV,SAAS,MAAM,CAAC;EAChB,OAAO,MAAM,CAAC;EAEd,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO,CAAC;EAE7B,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS;EAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,KAAK;EACnB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;EAExB,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;EAC7C,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;EAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;IAC5B,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE;MACjC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;MACf,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;MACjB;IACF;EACF;EAEA,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;EACpB,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;EACnB,OAAO,CAAC;AACV,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE;EACrE;EACA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;;EAElC;EACA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;IAClC,QAAQ,GAAG,UAAU;IACrB,UAAU,GAAG,CAAC;EAChB,CAAC,MAAM,IAAI,UAAU,GAAG,UAAU,EAAE;IAClC,UAAU,GAAG,UAAU;EACzB,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC,UAAU,EAAE;IACnC,UAAU,GAAG,CAAC,UAAU;EAC1B;EACA,UAAU,GAAG,CAAC,UAAU,EAAC;EACzB,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;IAC3B;IACA,UAAU,GAAG,GAAG,GAAG,CAAC,GAAI,MAAM,CAAC,MAAM,GAAG,CAAE;EAC5C;;EAEA;EACA,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU;EAC3D,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE;IAC/B,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC,MACb,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;EACrC,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC,EAAE;IACzB,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,MAClB,OAAO,CAAC,CAAC;EAChB;;EAEA;EACA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;EAClC;;EAEA;EACA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACxB;IACA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;MACpB,OAAO,CAAC,CAAC;IACX;IACA,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC;EAC7D,CAAC,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAClC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAC;IACjB,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,KAAK,UAAU,EAAE;MACtD,IAAI,GAAG,EAAE;QACP,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC;MACnE,CAAC,MAAM;QACL,OAAO,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC;MACvE;IACF;IACA,OAAO,YAAY,CAAC,MAAM,EAAE,CAAE,GAAG,CAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC;EACjE;EAEA,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC;AAC7D;AAEA,SAAS,YAAY,CAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE;EAC1D,IAAI,SAAS,GAAG,CAAC;EACjB,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM;EAC1B,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM;EAE1B,IAAI,QAAQ,KAAK,SAAS,EAAE;IAC1B,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,IAC3C,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,UAAU,EAAE;MACrD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;QACpC,OAAO,CAAC,CAAC;MACX;MACA,SAAS,GAAG,CAAC;MACb,SAAS,IAAI,CAAC;MACd,SAAS,IAAI,CAAC;MACd,UAAU,IAAI,CAAC;IACjB;EACF;EAEA,SAAS,IAAI,CAAE,GAAG,EAAE,CAAC,EAAE;IACrB,IAAI,SAAS,KAAK,CAAC,EAAE;MACnB,OAAO,GAAG,CAAC,CAAC,CAAC;IACf,CAAC,MAAM;MACL,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,CAAC;IACxC;EACF;EAEA,IAAI,CAAC;EACL,IAAI,GAAG,EAAE;IACP,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;MACvC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,UAAU,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE;QACtE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC;QACrC,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,KAAK,SAAS,EAAE,OAAO,UAAU,GAAG,SAAS;MACrE,CAAC,MAAM;QACL,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,UAAU;QAC1C,UAAU,GAAG,CAAC,CAAC;MACjB;IACF;EACF,CAAC,MAAM;IACL,IAAI,UAAU,GAAG,SAAS,GAAG,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;IAC1E,KAAK,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;MAChC,IAAI,KAAK,GAAG,IAAI;MAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;QAClC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;UACrC,KAAK,GAAG,KAAK;UACb;QACF;MACF;MACA,IAAI,KAAK,EAAE,OAAO,CAAC;IACrB;EACF;EAEA,OAAO,CAAC,CAAC;AACX;AAEA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE;EACxE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE;EACtE,OAAO,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE;EAC9E,OAAO,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;EAC9C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;EAC5B,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM;EACnC,IAAI,CAAC,MAAM,EAAE;IACX,MAAM,GAAG,SAAS;EACpB,CAAC,MAAM;IACL,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACvB,IAAI,MAAM,GAAG,SAAS,EAAE;MACtB,MAAM,GAAG,SAAS;IACpB;EACF;EAEA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;EAE1B,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE;IACvB,MAAM,GAAG,MAAM,GAAG,CAAC;EACrB;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;IAC/B,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAClD,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM;EAC1B;EACA,OAAO,CAAC;AACV;AAEA,SAAS,SAAS,CAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;EAC/C,OAAO,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;AAClF;AAEA,SAAS,UAAU,CAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;EAChD,OAAO,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;AAC9D;AAEA,SAAS,WAAW,CAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;EACjD,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAChD;AAEA,SAAS,WAAW,CAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;EACjD,OAAO,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;AAC/D;AAEA,SAAS,SAAS,CAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;EAC/C,OAAO,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;AACrF;AAEA,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;EACzE;EACA,IAAI,MAAM,KAAK,SAAS,EAAE;IACxB,QAAQ,GAAG,MAAM;IACjB,MAAM,GAAG,IAAI,CAAC,MAAM;IACpB,MAAM,GAAG,CAAC;IACZ;EACA,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IAC7D,QAAQ,GAAG,MAAM;IACjB,MAAM,GAAG,IAAI,CAAC,MAAM;IACpB,MAAM,GAAG,CAAC;IACZ;EACA,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC3B,MAAM,GAAG,MAAM,KAAK,CAAC;IACrB,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;MACpB,MAAM,GAAG,MAAM,KAAK,CAAC;MACrB,IAAI,QAAQ,KAAK,SAAS,EAAE,QAAQ,GAAG,MAAM;IAC/C,CAAC,MAAM;MACL,QAAQ,GAAG,MAAM;MACjB,MAAM,GAAG,SAAS;IACpB;EACF,CAAC,MAAM;IACL,MAAM,IAAI,KAAK,CACb,yEACF,CAAC;EACH;EAEA,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM;EACpC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS;EAElE,IAAK,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,IAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;IAC7E,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC;EAChE;EAEA,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;EAEhC,IAAI,WAAW,GAAG,KAAK;EACvB,SAAS;IACP,QAAQ,QAAQ;MACd,KAAK,KAAK;QACR,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;MAE/C,KAAK,MAAM;MACX,KAAK,OAAO;QACV,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;MAEhD,KAAK,OAAO;QACV,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;MAEjD,KAAK,QAAQ;MACb,KAAK,QAAQ;QACX,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;MAElD,KAAK,QAAQ;QACX;QACA,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;MAElD,KAAK,MAAM;MACX,KAAK,OAAO;MACZ,KAAK,SAAS;MACd,KAAK,UAAU;QACb,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;MAEhD;QACE,IAAI,WAAW,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;QACrE,QAAQ,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,WAAW,CAAC,CAAC;QACxC,WAAW,GAAG,IAAI;IACtB;EACF;AACF,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAA,EAAI;EAC3C,OAAO;IACL,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;EACvD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;EACrC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,EAAE;IACrC,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;EAClC,CAAC,MAAM;IACL,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EACpD;AACF;AAEA,SAAS,SAAS,CAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;EACnC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;EAC/B,IAAI,GAAG,GAAG,EAAE;EAEZ,IAAI,CAAC,GAAG,KAAK;EACb,OAAO,CAAC,GAAG,GAAG,EAAE;IACd,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,SAAS,GAAG,IAAI;IACpB,IAAI,gBAAgB,GAAI,SAAS,GAAG,IAAI,GAAI,CAAC,GACxC,SAAS,GAAG,IAAI,GAAI,CAAC,GACnB,SAAS,GAAG,IAAI,GAAI,CAAC,GACpB,CAAC;IAET,IAAI,CAAC,GAAG,gBAAgB,IAAI,GAAG,EAAE;MAC/B,IAAI,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa;MAEpD,QAAQ,gBAAgB;QACtB,KAAK,CAAC;UACJ,IAAI,SAAS,GAAG,IAAI,EAAE;YACpB,SAAS,GAAG,SAAS;UACvB;UACA;QACF,KAAK,CAAC;UACJ,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;UACvB,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,EAAE;YAChC,aAAa,GAAG,CAAC,SAAS,GAAG,IAAI,KAAK,GAAG,GAAI,UAAU,GAAG,IAAK;YAC/D,IAAI,aAAa,GAAG,IAAI,EAAE;cACxB,SAAS,GAAG,aAAa;YAC3B;UACF;UACA;QACF,KAAK,CAAC;UACJ,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;UACvB,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;UACtB,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,IAAI,EAAE;YAC/D,aAAa,GAAG,CAAC,SAAS,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI,KAAK,GAAG,GAAI,SAAS,GAAG,IAAK;YAC1F,IAAI,aAAa,GAAG,KAAK,KAAK,aAAa,GAAG,MAAM,IAAI,aAAa,GAAG,MAAM,CAAC,EAAE;cAC/E,SAAS,GAAG,aAAa;YAC3B;UACF;UACA;QACF,KAAK,CAAC;UACJ,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;UACvB,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;UACtB,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;UACvB,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,EAAE;YAC/F,aAAa,GAAG,CAAC,SAAS,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,KAAK,GAAG,GAAI,UAAU,GAAG,IAAK;YACxH,IAAI,aAAa,GAAG,MAAM,IAAI,aAAa,GAAG,QAAQ,EAAE;cACtD,SAAS,GAAG,aAAa;YAC3B;UACF;MACJ;IACF;IAEA,IAAI,SAAS,KAAK,IAAI,EAAE;MACtB;MACA;MACA,SAAS,GAAG,MAAM;MAClB,gBAAgB,GAAG,CAAC;IACtB,CAAC,MAAM,IAAI,SAAS,GAAG,MAAM,EAAE;MAC7B;MACA,SAAS,IAAI,OAAO;MACpB,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,GAAG,KAAK,GAAG,MAAM,CAAC;MAC3C,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK;IACxC;IAEA,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;IACnB,CAAC,IAAI,gBAAgB;EACvB;EAEA,OAAO,qBAAqB,CAAC,GAAG,CAAC;AACnC;;AAEA;AACA;AACA;AACA,IAAI,oBAAoB,GAAG,MAAM;AAEjC,SAAS,qBAAqB,CAAE,UAAU,EAAE;EAC1C,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM;EAC3B,IAAI,GAAG,IAAI,oBAAoB,EAAE;IAC/B,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,EAAC;EACvD;;EAEA;EACA,IAAI,GAAG,GAAG,EAAE;EACZ,IAAI,CAAC,GAAG,CAAC;EACT,OAAO,CAAC,GAAG,GAAG,EAAE;IACd,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAC9B,MAAM,EACN,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,oBAAoB,CAC/C,CAAC;EACH;EACA,OAAO,GAAG;AACZ;AAEA,SAAS,UAAU,CAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;EACpC,IAAI,GAAG,GAAG,EAAE;EACZ,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;EAE/B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;IAChC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;EAC3C;EACA,OAAO,GAAG;AACZ;AAEA,SAAS,WAAW,CAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;EACrC,IAAI,GAAG,GAAG,EAAE;EACZ,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;EAE/B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;IAChC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACpC;EACA,OAAO,GAAG;AACZ;AAEA,SAAS,QAAQ,CAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;EAClC,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM;EAEpB,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;EAClC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG;EAE3C,IAAI,GAAG,GAAG,EAAE;EACZ,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;IAChC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACtB;EACA,OAAO,GAAG;AACZ;AAEA,SAAS,YAAY,CAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;EACtC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;EACjC,IAAI,GAAG,GAAG,EAAE;EACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;IACxC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,GAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAI,CAAC;EAC7D;EACA,OAAO,GAAG;AACZ;AAEA,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,KAAK,EAAE,GAAG,EAAE;EACnD,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;EACrB,KAAK,GAAG,CAAC,CAAC,KAAK;EACf,GAAG,GAAG,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG;EAErC,IAAI,KAAK,GAAG,CAAC,EAAE;IACb,KAAK,IAAI,GAAG;IACZ,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;EAC1B,CAAC,MAAM,IAAI,KAAK,GAAG,GAAG,EAAE;IACtB,KAAK,GAAG,GAAG;EACb;EAEA,IAAI,GAAG,GAAG,CAAC,EAAE;IACX,GAAG,IAAI,GAAG;IACV,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;EACtB,CAAC,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE;IACpB,GAAG,GAAG,GAAG;EACX;EAEA,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK;EAE5B,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;EACtC;EACA,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;EACnC,OAAO,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA,SAAS,WAAW,CAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;EACzC,IAAK,MAAM,GAAG,CAAC,KAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC;EAChF,IAAI,MAAM,GAAG,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC;AAC1F;AAEA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;EAC/E,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,UAAU,GAAG,UAAU,KAAK,CAAC;EAC7B,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;EAE3D,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;EACtB,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,CAAC,GAAG,CAAC;EACT,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;IACzC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;EAC/B;EAEA,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;EAC/E,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,UAAU,GAAG,UAAU,KAAK,CAAC;EAC7B,IAAI,CAAC,QAAQ,EAAE;IACb,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;EAC9C;EAEA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,UAAU,CAAC;EACrC,IAAI,GAAG,GAAG,CAAC;EACX,OAAO,UAAU,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;IACvC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,UAAU,CAAC,GAAG,GAAG;EAC1C;EAEA,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAE,MAAM,EAAE,QAAQ,EAAE;EACjE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,MAAM,EAAE,QAAQ,EAAE;EACvE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE;AAC/C,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,MAAM,EAAE,QAAQ,EAAE;EACvE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,OAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,MAAM,EAAE,QAAQ,EAAE;EACvE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAElD,OAAO,CAAE,IAAI,CAAC,MAAM,CAAC,GAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAG,IACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAU;AACpC,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,MAAM,EAAE,QAAQ,EAAE;EACvE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAElD,OAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS,IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,GACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;EAC7E,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,UAAU,GAAG,UAAU,KAAK,CAAC;EAC7B,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;EAE3D,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;EACtB,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,CAAC,GAAG,CAAC;EACT,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;IACzC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;EAC/B;EACA,GAAG,IAAI,IAAI;EAEX,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;EAElD,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;EAC7E,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,UAAU,GAAG,UAAU,KAAK,CAAC;EAC7B,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;EAE3D,IAAI,CAAC,GAAG,UAAU;EAClB,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;EAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;IAC9B,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG;EACjC;EACA,GAAG,IAAI,IAAI;EAEX,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;EAElD,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAE,MAAM,EAAE,QAAQ,EAAE;EAC/D,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,OAAQ,IAAI,CAAC,MAAM,CAAC;EAChD,OAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,MAAM,EAAE,QAAQ,EAAE;EACrE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE;EAChD,OAAQ,GAAG,GAAG,MAAM,GAAI,GAAG,GAAG,UAAU,GAAG,GAAG;AAChD,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,MAAM,EAAE,QAAQ,EAAE;EACrE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAE;EAChD,OAAQ,GAAG,GAAG,MAAM,GAAI,GAAG,GAAG,UAAU,GAAG,GAAG;AAChD,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,MAAM,EAAE,QAAQ,EAAE;EACrE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAElD,OAAQ,IAAI,CAAC,MAAM,CAAC,GACjB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAG,GACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAG;AAC5B,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,MAAM,EAAE,QAAQ,EAAE;EACrE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAElD,OAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAG,GACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAE,GACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE;AACtB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,MAAM,EAAE,QAAQ,EAAE;EACrE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,MAAM,EAAE,QAAQ,EAAE;EACrE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,MAAM,EAAE,QAAQ,EAAE;EACvE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,MAAM,EAAE,QAAQ,EAAE;EACvE,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;EAClD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC;EAC7F,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC;EACzF,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC;AAC3E;AAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;EACxF,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,UAAU,GAAG,UAAU,KAAK,CAAC;EAC7B,IAAI,CAAC,QAAQ,EAAE;IACb,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;EACxD;EAEA,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,CAAC,GAAG,CAAC;EACT,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI;EAC3B,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;IACzC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,GAAG,GAAG,GAAI,IAAI;EACzC;EAEA,OAAO,MAAM,GAAG,UAAU;AAC5B,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;EACxF,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,UAAU,GAAG,UAAU,KAAK,CAAC;EAC7B,IAAI,CAAC,QAAQ,EAAE;IACb,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;EACxD;EAEA,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC;EACtB,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI;EAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;IACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,GAAG,GAAG,GAAI,IAAI;EACzC;EAEA,OAAO,MAAM,GAAG,UAAU;AAC5B,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAC1E,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;EACxD,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,GAAG,IAAK;EAC7B,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAChF,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;EAC1D,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,GAAG,IAAK;EAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,CAAE;EAChC,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAChF,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;EAC1D,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,KAAK,CAAE;EAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,GAAG,IAAK;EACjC,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAChF,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EAC9D,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,EAAG;EACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,EAAG;EACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,CAAE;EAChC,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,GAAG,IAAK;EAC7B,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAChF,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EAC9D,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,KAAK,EAAG;EAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,EAAG;EACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,CAAE;EAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,GAAG,IAAK;EACjC,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;EACtF,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE;IACb,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAG,CAAC,GAAG,UAAU,GAAI,CAAC,CAAC;IAE7C,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;EAC9D;EAEA,IAAI,CAAC,GAAG,CAAC;EACT,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI;EAC3B,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;IACzC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;MACxD,GAAG,GAAG,CAAC;IACT;IACA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAE,KAAK,GAAG,GAAG,IAAK,CAAC,IAAI,GAAG,GAAG,IAAI;EACtD;EAEA,OAAO,MAAM,GAAG,UAAU;AAC5B,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;EACtF,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE;IACb,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAG,CAAC,GAAG,UAAU,GAAI,CAAC,CAAC;IAE7C,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;EAC9D;EAEA,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC;EACtB,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI;EAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;IACjC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;MACxD,GAAG,GAAG,CAAC;IACT;IACA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAE,KAAK,GAAG,GAAG,IAAK,CAAC,IAAI,GAAG,GAAG,IAAI;EACtD;EAEA,OAAO,MAAM,GAAG,UAAU;AAC5B,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EACxE,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC;EAC5D,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC;EACvC,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,GAAG,IAAK;EAC7B,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAC9E,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC;EAChE,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,GAAG,IAAK;EAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,CAAE;EAChC,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAC9E,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC;EAChE,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,KAAK,CAAE;EAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,GAAG,IAAK;EACjC,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAC9E,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC;EACxE,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,GAAG,IAAK;EAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,CAAE;EAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,EAAG;EACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,EAAG;EACjC,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAC9E,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC;EACxE,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,CAAC;EAC7C,IAAI,CAAC,MAAM,CAAC,GAAI,KAAK,KAAK,EAAG;EAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,EAAG;EACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,KAAK,CAAE;EAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAI,KAAK,GAAG,IAAK;EACjC,OAAO,MAAM,GAAG,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EACxD,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC;EACzE,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC;AAC5D;AAEA,SAAS,UAAU,CAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE;EAC/D,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE;IACb,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,sBAAsB,EAAE,CAAC,sBAAsB,CAAC;EACtF;EACA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;EACtD,OAAO,MAAM,GAAG,CAAC;AACnB;AAEA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAC9E,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAC9E,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE;EAChE,KAAK,GAAG,CAAC,KAAK;EACd,MAAM,GAAG,MAAM,KAAK,CAAC;EACrB,IAAI,CAAC,QAAQ,EAAE;IACb,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,uBAAuB,CAAC;EACxF;EACA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;EACtD,OAAO,MAAM,GAAG,CAAC;AACnB;AAEA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAChF,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAChF,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC;AAC1D,CAAC;;AAED;AACA,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE;EACtE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC;EAChF,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC;EACrB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM;EACxC,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM;EAC7D,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,CAAC;EACjC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK;;EAEvC;EACA,IAAI,GAAG,KAAK,KAAK,EAAE,OAAO,CAAC;EAC3B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC;;EAEtD;EACA,IAAI,WAAW,GAAG,CAAC,EAAE;IACnB,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC;EACnD;EACA,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC;EACjF,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,CAAC;;EAE5D;EACA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM;EACxC,IAAI,MAAM,CAAC,MAAM,GAAG,WAAW,GAAG,GAAG,GAAG,KAAK,EAAE;IAC7C,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,WAAW,GAAG,KAAK;EAC3C;EAEA,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK;EAErB,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC,UAAU,KAAK,UAAU,EAAE;IAC5E;IACA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC;EAC1C,CAAC,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,GAAG,WAAW,IAAI,WAAW,GAAG,GAAG,EAAE;IACtE;IACA,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;MACjC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;IAC3C;EACF,CAAC,MAAM;IACL,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAC3B,MAAM,EACN,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,EACzB,WACF,CAAC;EACH;EAEA,OAAO,GAAG;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE;EAChE;EACA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MAC7B,QAAQ,GAAG,KAAK;MAChB,KAAK,GAAG,CAAC;MACT,GAAG,GAAG,IAAI,CAAC,MAAM;IACnB,CAAC,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;MAClC,QAAQ,GAAG,GAAG;MACd,GAAG,GAAG,IAAI,CAAC,MAAM;IACnB;IACA,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;MAC1D,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC;IAClD;IACA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;MAChE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;IACtD;IACA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;MACpB,IAAI,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;MAC5B,IAAK,QAAQ,KAAK,MAAM,IAAI,IAAI,GAAG,GAAG,IAClC,QAAQ,KAAK,QAAQ,EAAE;QACzB;QACA,GAAG,GAAG,IAAI;MACZ;IACF;EACF,CAAC,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAClC,GAAG,GAAG,GAAG,GAAG,GAAG;EACjB;;EAEA;EACA,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;IACzD,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC;EAC5C;EAEA,IAAI,GAAG,IAAI,KAAK,EAAE;IAChB,OAAO,IAAI;EACb;EAEA,KAAK,GAAG,KAAK,KAAK,CAAC;EACnB,GAAG,GAAG,GAAG,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC;EAEjD,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;EAEjB,IAAI,CAAC;EACL,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;IACf;EACF,CAAC,MAAM;IACL,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAC5B,GAAG,GACH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;IAC9B,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM;IACtB,IAAI,GAAG,KAAK,CAAC,EAAE;MACb,MAAM,IAAI,SAAS,CAAC,aAAa,GAAG,GAAG,GACrC,mCAAmC,CAAC;IACxC;IACA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC,EAAE;MAChC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;IAClC;EACF;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;;AAEA,IAAI,iBAAiB,GAAG,mBAAmB;AAE3C,SAAS,WAAW,CAAE,GAAG,EAAE;EACzB;EACA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACvB;EACA,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;EAC/C;EACA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE;EAC7B;EACA,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;IAC3B,GAAG,GAAG,GAAG,GAAG,GAAG;EACjB;EACA,OAAO,GAAG;AACZ;AAEA,SAAS,KAAK,CAAE,CAAC,EAAE;EACjB,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;EACvC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvB;AAEA,SAAS,WAAW,CAAE,MAAM,EAAE,KAAK,EAAE;EACnC,KAAK,GAAG,KAAK,IAAI,QAAQ;EACzB,IAAI,SAAS;EACb,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;EAC1B,IAAI,aAAa,GAAG,IAAI;EACxB,IAAI,KAAK,GAAG,EAAE;EAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;IAC/B,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;;IAEhC;IACA,IAAI,SAAS,GAAG,MAAM,IAAI,SAAS,GAAG,MAAM,EAAE;MAC5C;MACA,IAAI,CAAC,aAAa,EAAE;QAClB;QACA,IAAI,SAAS,GAAG,MAAM,EAAE;UACtB;UACA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;UACnD;QACF,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE;UAC3B;UACA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;UACnD;QACF;;QAEA;QACA,aAAa,GAAG,SAAS;QAEzB;MACF;;MAEA;MACA,IAAI,SAAS,GAAG,MAAM,EAAE;QACtB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACnD,aAAa,GAAG,SAAS;QACzB;MACF;;MAEA;MACA,SAAS,GAAG,CAAC,aAAa,GAAG,MAAM,IAAI,EAAE,GAAG,SAAS,GAAG,MAAM,IAAI,OAAO;IAC3E,CAAC,MAAM,IAAI,aAAa,EAAE;MACxB;MACA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACrD;IAEA,aAAa,GAAG,IAAI;;IAEpB;IACA,IAAI,SAAS,GAAG,IAAI,EAAE;MACpB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;MACtB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC,MAAM,IAAI,SAAS,GAAG,KAAK,EAAE;MAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;MACtB,KAAK,CAAC,IAAI,CACR,SAAS,IAAI,GAAG,GAAG,IAAI,EACvB,SAAS,GAAG,IAAI,GAAG,IACrB,CAAC;IACH,CAAC,MAAM,IAAI,SAAS,GAAG,OAAO,EAAE;MAC9B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;MACtB,KAAK,CAAC,IAAI,CACR,SAAS,IAAI,GAAG,GAAG,IAAI,EACvB,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,EAC9B,SAAS,GAAG,IAAI,GAAG,IACrB,CAAC;IACH,CAAC,MAAM,IAAI,SAAS,GAAG,QAAQ,EAAE;MAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;MACtB,KAAK,CAAC,IAAI,CACR,SAAS,IAAI,IAAI,GAAG,IAAI,EACxB,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,EAC9B,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,EAC9B,SAAS,GAAG,IAAI,GAAG,IACrB,CAAC;IACH,CAAC,MAAM;MACL,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;IACvC;EACF;EAEA,OAAO,KAAK;AACd;AAEA,SAAS,YAAY,CAAE,GAAG,EAAE;EAC1B,IAAI,SAAS,GAAG,EAAE;EAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;IACnC;IACA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;EAC1C;EACA,OAAO,SAAS;AAClB;AAEA,SAAS,cAAc,CAAE,GAAG,EAAE,KAAK,EAAE;EACnC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE;EACb,IAAI,SAAS,GAAG,EAAE;EAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;IACnC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;IAEtB,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IACrB,EAAE,GAAG,CAAC,IAAI,CAAC;IACX,EAAE,GAAG,CAAC,GAAG,GAAG;IACZ,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAClB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;EACpB;EAEA,OAAO,SAAS;AAClB;AAEA,SAAS,aAAa,CAAE,GAAG,EAAE;EAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC7C;AAEA,SAAS,UAAU,CAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;EAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;IAC/B,IAAK,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,IAAM,CAAC,IAAI,GAAG,CAAC,MAAO,EAAE;IACrD,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC1B;EACA,OAAO,CAAC;AACV;;AAEA;AACA;AACA;AACA,SAAS,UAAU,CAAE,GAAG,EAAE,IAAI,EAAE;EAC9B,OAAO,GAAG,YAAY,IAAI,IACvB,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,IACrE,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,IAAK;AACzC;AACA,SAAS,WAAW,CAAE,GAAG,EAAE;EACzB;EACA,OAAO,GAAG,KAAK,GAAG,EAAC;AACrB;;;;;;;AChvDA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS;AAC3C,IAAI,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,aAAa;AAC3D,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,SAAS,UAAU,CAAE,QAAQ,EAAE;EAC7B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,QAAQ,KAAK,QAAQ;EAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE;IACjB,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,cAAc;EACtC,CAAC,MAAM;IACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;EAClC;EACA,IAAI,IAAI,CAAC,MAAM,EAAE;IACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;IAC1B,IAAI,CAAC,MAAM,GAAG,IAAI;EACpB;EACA,IAAI,CAAC,QAAQ,GAAG,IAAI;EACpB,IAAI,CAAC,SAAS,GAAG,IAAI;AACvB;AACA,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;AAE/B,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE;EACjE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC5B,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;EACpC;EAEA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;EAChC,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI;EAE9B,IAAI,SAAS,EAAE;IACb,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC;EAC9C;EAEA,OAAO,OAAO;AAChB,CAAC;AAED,UAAU,CAAC,SAAS,CAAC,cAAc,GAAG,YAAY,CAAC,CAAC;AACpD,UAAU,CAAC,SAAS,CAAC,UAAU,GAAG,YAAY;EAC5C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAChE,CAAC;AAED,UAAU,CAAC,SAAS,CAAC,UAAU,GAAG,YAAY;EAC5C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAChE,CAAC;AAED,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EACxC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;AAC3D,CAAC;AAED,UAAU,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;EACzD,IAAI,GAAG;EACP,IAAI;IACF,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACpB,CAAC,MAAM;MACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B;EACF,CAAC,CAAC,OAAO,CAAC,EAAE;IACV,GAAG,GAAG,CAAC;EACT,CAAC,SAAS;IACR,IAAI,CAAC,GAAG,CAAC;EACX;AACF,CAAC;AACD,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE;EAC5C,IAAI,GAAG;EACP,IAAI;IACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;EAC3B,CAAC,CAAC,OAAO,CAAC,EAAE;IACV,GAAG,GAAG,CAAC;EACT;EAEA,IAAI,CAAC,GAAG,CAAC;AACX,CAAC;AACD,UAAU,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,SAAS,EAAE;EACzD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/C,IAAI,SAAS,EAAE;IACb,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC;EACpD;EACA,OAAO,OAAO;AAChB,CAAC;AAED,UAAU,CAAC,SAAS,CAAC,SAAS,GAAG,UAAU,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;EAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;IAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC;IACtC,IAAI,CAAC,SAAS,GAAG,GAAG;EACtB;EAEA,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;EAEtE,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;EACpC,IAAI,GAAG,EAAE;IACP,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;EAC5B;EAEA,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,UAAU;;;;;AClG3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,SAAS,OAAO,CAAC,GAAG,EAAE;EACpB,IAAI,KAAK,CAAC,OAAO,EAAE;IACjB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;EAC3B;EACA,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,gBAAgB;AACjD;AACA,OAAO,CAAC,OAAO,GAAG,OAAO;AAEzB,SAAS,SAAS,CAAC,GAAG,EAAE;EACtB,OAAO,OAAO,GAAG,KAAK,SAAS;AACjC;AACA,OAAO,CAAC,SAAS,GAAG,SAAS;AAE7B,SAAS,MAAM,CAAC,GAAG,EAAE;EACnB,OAAO,GAAG,KAAK,IAAI;AACrB;AACA,OAAO,CAAC,MAAM,GAAG,MAAM;AAEvB,SAAS,iBAAiB,CAAC,GAAG,EAAE;EAC9B,OAAO,GAAG,IAAI,IAAI;AACpB;AACA,OAAO,CAAC,iBAAiB,GAAG,iBAAiB;AAE7C,SAAS,QAAQ,CAAC,GAAG,EAAE;EACrB,OAAO,OAAO,GAAG,KAAK,QAAQ;AAChC;AACA,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAE3B,SAAS,QAAQ,CAAC,GAAG,EAAE;EACrB,OAAO,OAAO,GAAG,KAAK,QAAQ;AAChC;AACA,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAE3B,SAAS,QAAQ,CAAC,GAAG,EAAE;EACrB,OAAO,OAAO,GAAG,KAAK,QAAQ;AAChC;AACA,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAE3B,SAAS,WAAW,CAAC,GAAG,EAAE;EACxB,OAAO,GAAG,KAAK,KAAK,CAAC;AACvB;AACA,OAAO,CAAC,WAAW,GAAG,WAAW;AAEjC,SAAS,QAAQ,CAAC,EAAE,EAAE;EACpB,OAAO,cAAc,CAAC,EAAE,CAAC,KAAK,iBAAiB;AACjD;AACA,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAE3B,SAAS,QAAQ,CAAC,GAAG,EAAE;EACrB,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;AAChD;AACA,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAE3B,SAAS,MAAM,CAAC,CAAC,EAAE;EACjB,OAAO,cAAc,CAAC,CAAC,CAAC,KAAK,eAAe;AAC9C;AACA,OAAO,CAAC,MAAM,GAAG,MAAM;AAEvB,SAAS,OAAO,CAAC,CAAC,EAAE;EAClB,OAAQ,cAAc,CAAC,CAAC,CAAC,KAAK,gBAAgB,IAAI,CAAC,YAAY,KAAK;AACtE;AACA,OAAO,CAAC,OAAO,GAAG,OAAO;AAEzB,SAAS,UAAU,CAAC,GAAG,EAAE;EACvB,OAAO,OAAO,GAAG,KAAK,UAAU;AAClC;AACA,OAAO,CAAC,UAAU,GAAG,UAAU;AAE/B,SAAS,WAAW,CAAC,GAAG,EAAE;EACxB,OAAO,GAAG,KAAK,IAAI,IACZ,OAAO,GAAG,KAAK,SAAS,IACxB,OAAO,GAAG,KAAK,QAAQ,IACvB,OAAO,GAAG,KAAK,QAAQ,IACvB,OAAO,GAAG,KAAK,QAAQ;EAAK;EAC5B,OAAO,GAAG,KAAK,WAAW;AACnC;AACA,OAAO,CAAC,WAAW,GAAG,WAAW;AAEjC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ;AAEpD,SAAS,cAAc,CAAC,CAAC,EAAE;EACzB,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C;;;;;;AC1GA,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAClC,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;AAEzB,MAAM,CAAC,OAAO,GAAG,SAAS,UAAU,CAAE,KAAK,EAAE;EAC3C,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;AACxB,CAAC;AAED,IAAI,OAAO,GAAG;EACZ,SAAS,EAAE;IACT,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE;EACd,CAAC;EACD,SAAS,EAAE;IACT,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE;EACd,CAAC;EACD,UAAU,EAAE;IACV,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE;EACd,CAAC;EACD,UAAU,EAAE;IACV,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE;EACd,CAAC;EACD,OAAO,EAAE;IACP,IAAI,EAAE,SAAS;IACf,UAAU,EAAE;EACd,CAAC;EACD,SAAS,EAAE;IACT,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE;EACd,CAAC;EACD,SAAS,EAAE;IACT,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE;EACd;AACF,CAAC;AAED,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS;AAChC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU;AACrD,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU;AACrD,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS;AAChC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS;AAEhC,SAAS,IAAI,CAAE,KAAK,EAAE;EACpB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;EAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;IACnB,IAAI,CAAC,SAAS,GAAG;MACf,IAAI,EAAE;IACR,CAAC;EACH;EACA,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC;EAClD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AACpB;AAEA,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,GAAG,EAAE,MAAM,EAAE;EACnD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;EACnC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;AACvC,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;EAC1D,KAAK,GAAG,KAAK,IAAI,MAAM;EACvB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC3B,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;EAClC;EACA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;EAC1D,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EACrD,OAAO,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAC/D,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,GAAG,EAAE,MAAM,EAAE;EACnD,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,YAAY,EAAE,IAAI,CAAC;EAC5D,IAAI,MAAM,KAAK,QAAQ,EAAE;IACvB,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;MAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACZ,CAAC,MAAM;MACL,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACZ;EACF;EACA,OAAO,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;AACpC,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,GAAG,EAAE;EAC5C,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC;AACvD,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE;EAChD,GAAG,GAAG,GAAG,IAAI,MAAM;EACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACzB,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;EAC5B;EACA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;EAC5B,OAAO,IAAI;AACb,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,IAAI,EAAE,GAAG,EAAE;EAClD,GAAG,GAAG,GAAG,IAAI,MAAM;EACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC1B,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;EAC9B;EAEA,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;EACxB,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;EAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;EACnC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;EAC/B,OAAO,IAAI;AACb,CAAC;AAED,SAAS,iBAAiB,CAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;EACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;IACtB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;EACnB;EACA,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;EACxB,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;IAC3B,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACb,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EACnC;EACA,IAAI,CAAC,GAAG,EAAE;IACR,OAAO,GAAG;EACZ,CAAC,MAAM;IACL,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;EAC1B;AACF;;;;;;;AC3HA,YAAY;;AACZ,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAClC,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;AAC3B,IAAI,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;AACpC,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;AAC3B,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;AAEjC,SAAS,IAAI,CAAE,IAAI,EAAE;EACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;EAEzB,IAAI,CAAC,KAAK,GAAG,IAAI;AACnB;AAEA,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AAEpB,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE;EACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACzB,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EAClC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,SAAS,UAAU,CAAE,GAAG,EAAE;EACzC,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;EACvB,IAAI,GAAG,KAAK,KAAK,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;EACnC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,WAAW,EAAE,OAAO,IAAI,SAAS,CAAC,CAAC;EAEnE,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;;;;;AC7BD,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;AAE3B,MAAM,CAAC,OAAO,GAAG,UAAU,MAAM,EAAE;EACjC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;;;ACJD,YAAY;;AACZ,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAClC,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AAChC,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;AACjC,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;AACpC,IAAI,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;AAEpC,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;AAE3B,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAE7B,SAAS,IAAI,CAAE,GAAG,EAAE,GAAG,EAAE;EACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;EACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;EACxB;EAEA,IAAI,SAAS,GAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,GAAI,GAAG,GAAG,EAAE;EAEjE,IAAI,CAAC,IAAI,GAAG,GAAG;EACf,IAAI,CAAC,IAAI,GAAG,GAAG;EACf,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE;IAC1B,IAAI,IAAI,GAAG,GAAG,KAAK,QAAQ,GAAG,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;IACxD,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;EACjC,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE;IACjC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC;EAC9C;EAEA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;EACrD,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;EAErD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;IAClC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;IACvB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;EACzB;EACA,IAAI,CAAC,KAAK,GAAG,GAAG,KAAK,QAAQ,GAAG,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;EAC1D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACzB;AAEA,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AAEpB,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE;EACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACzB,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EAClC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EACpE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,SAAS,UAAU,CAAE,GAAG,EAAE,GAAG,EAAE;EAC9C,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;EACvB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,WAAW,EAAE;IAC3C,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;EAChC;EACA,IAAI,GAAG,KAAK,KAAK,EAAE;IACjB,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;EAC7B;EACA,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;AAC3B,CAAC;;;AC7DD,YAAY;;AACZ,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAClC,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAE1C,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;AAEjC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,IAAI,SAAS,GAAG,EAAE;AAElB,SAAS,IAAI,CAAE,GAAG,EAAE,GAAG,EAAE;EACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;EACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;EACxB;EAEA,IAAI,CAAC,IAAI,GAAG,GAAG;EACf,IAAI,CAAC,IAAI,GAAG,GAAG;EAEf,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE;IAC1B,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;EAChB,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE;IACjC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC;EAC9C;EAEA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;EACrD,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;EAErD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;IAClC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;IACvB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;EACzB;EAEA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;AACrB;AAEA,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AAEpB,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE;EACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EAClC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AACD,MAAM,CAAC,OAAO,GAAG,IAAI;;;AC7CrB,YAAY;;AAEZ,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;AACrG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;AAC1D,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;AAE1D,IAAI,KAAK,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC5C,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,IAAI,MAAM,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/F,OAAO,CAAC,SAAS,GAAG,YAAY;EAC9B,OAAO,MAAM;AACf,CAAC;AAED,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;AACzB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACzB,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;AAEjC,IAAI,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAEtC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AAC3B,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY;AACvC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAC/B,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc;AAC3C,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAC/B,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc;AAC3C,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;AACnC,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB;AAC/C,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;AACnC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW;AAErC,IAAI,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAElC,OAAO,CAAC,kBAAkB,GAAG,EAAE,CAAC,kBAAkB;AAClD,OAAO,CAAC,wBAAwB,GAAG,EAAE,CAAC,wBAAwB;AAC9D,OAAO,CAAC,gBAAgB,GAAG,EAAE,CAAC,gBAAgB;AAC9C,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB;AACpD,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC,aAAa;AAExC,IAAI,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAErC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACpC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACxB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AACxC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAE5B,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;AAE3C,IAAI,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAE7C,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC,aAAa;AACnD,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,cAAc;AACrD,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC,aAAa;AACnD,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,cAAc;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;AAE9B,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;AAClC,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC,cAAc;AAE1C,OAAO,CAAC,iBAAiB,GAAG,YAAY;EACtC,MAAM,IAAI,KAAK,CAAC,CACd,iDAAiD,EACjD,yBAAyB,EACzB,wDAAwD,CACzD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,OAAO,CAAC,SAAS,GAAG;EAClB,2BAA2B,EAAE,CAAC;EAC9B,sBAAsB,EAAE,CAAC;EACzB,8BAA8B,EAAE,CAAC;EACjC,2BAA2B,EAAE,CAAC;EAC9B,aAAa,EAAE,CAAC;EAChB,cAAc,EAAE,CAAC;EACjB,mBAAmB,EAAE,CAAC;EACtB,oBAAoB,EAAE,CAAC;EACvB,gBAAgB,EAAE,CAAC;EACnB,wBAAwB,EAAE,CAAC;EAC3B,kBAAkB,EAAE,CAAC;EACrB,uBAAuB,EAAE,CAAC;EAC1B,6BAA6B,EAAE,CAAC;EAChC,+BAA+B,EAAE,CAAC;EAClC,yBAAyB,EAAE;AAC7B,CAAC;;;;;AChGD,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;EAAC,QAAQ,IAAE,OAAO,OAAO,IAAE,WAAW,IAAE,OAAO,MAAM,GAAC,MAAM,CAAC,OAAO,GAAC,CAAC,CAAC,CAAC,GAAC,UAAU,IAAE,OAAO,MAAM,IAAE,MAAM,CAAC,GAAG,GAAC,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,WAAW,IAAE,OAAO,UAAU,GAAC,UAAU,GAAC,CAAC,IAAE,IAAI,EAAE,KAAK,GAAC,CAAC,CAAC,CAAC;AAAA,CAAC,SAAO,YAAU;EAAC,YAAY;;EAAC,IAAI,CAAC,GAAC,GAAG;IAAC,CAAC,GAAC,GAAG;IAAC,CAAC,GAAC,IAAI;IAAC,CAAC,GAAC,aAAa;IAAC,CAAC,GAAC,QAAQ;IAAC,CAAC,GAAC,QAAQ;IAAC,CAAC,GAAC,MAAM;IAAC,CAAC,GAAC,KAAK;IAAC,CAAC,GAAC,MAAM;IAAC,CAAC,GAAC,OAAO;IAAC,CAAC,GAAC,SAAS;IAAC,CAAC,GAAC,MAAM;IAAC,CAAC,GAAC,MAAM;IAAC,CAAC,GAAC,cAAc;IAAC,CAAC,GAAC,4FAA4F;IAAC,CAAC,GAAC,qFAAqF;IAAC,CAAC,GAAC;MAAC,IAAI,EAAC,IAAI;MAAC,QAAQ,EAAC,0DAA0D,CAAC,KAAK,CAAC,GAAG,CAAC;MAAC,MAAM,EAAC,uFAAuF,CAAC,KAAK,CAAC,GAAG,CAAC;MAAC,OAAO,EAAC,SAAA,CAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,CAAC;UAAC,CAAC,GAAC,CAAC,GAAC,GAAG;QAAC,OAAM,GAAG,GAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,GAAC,EAAE,IAAE,EAAE,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,GAAG;MAAA;IAAC,CAAC;IAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC,MAAM,CAAC,CAAC,CAAC;MAAC,OAAM,CAAC,CAAC,IAAE,CAAC,CAAC,MAAM,IAAE,CAAC,GAAC,CAAC,GAAC,EAAE,GAAC,KAAK,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC;IAAA,CAAC;IAAC,CAAC,GAAC;MAAC,CAAC,EAAC,CAAC;MAAC,CAAC,EAAC,SAAA,CAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAC,EAAE,CAAC;UAAC,CAAC,GAAC,CAAC,GAAC,EAAE;QAAC,OAAM,CAAC,CAAC,IAAE,CAAC,GAAC,GAAG,GAAC,GAAG,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,GAAG,CAAC,GAAC,GAAG,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,GAAG,CAAC;MAAA,CAAC;MAAC,CAAC,EAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,OAAM,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,EAAE,IAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC;QAAC,OAAM,EAAE,EAAE,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC;MAAA,CAAC;MAAC,CAAC,EAAC,SAAA,CAAS,CAAC,EAAC;QAAC,OAAO,CAAC,GAAC,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;MAAA,CAAC;MAAC,CAAC,EAAC,SAAA,CAAS,CAAC,EAAC;QAAC,OAAM;UAAC,CAAC,EAAC,CAAC;UAAC,CAAC,EAAC,CAAC;UAAC,CAAC,EAAC,CAAC;UAAC,CAAC,EAAC,CAAC;UAAC,CAAC,EAAC,CAAC;UAAC,CAAC,EAAC,CAAC;UAAC,CAAC,EAAC,CAAC;UAAC,CAAC,EAAC,CAAC;UAAC,EAAE,EAAC,CAAC;UAAC,CAAC,EAAC;QAAC,CAAC,CAAC,CAAC,CAAC,IAAE,MAAM,CAAC,CAAC,IAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAC,EAAE,CAAC;MAAA,CAAC;MAAC,CAAC,EAAC,SAAA,CAAS,CAAC,EAAC;QAAC,OAAO,KAAK,CAAC,KAAG,CAAC;MAAA;IAAC,CAAC;IAAC,CAAC,GAAC,IAAI;IAAC,CAAC,GAAC,CAAC,CAAC;EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC;EAAC,IAAI,CAAC,GAAC,gBAAgB;IAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC;MAAC,OAAO,CAAC,YAAY,CAAC,IAAE,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC;IAAC,CAAC,GAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,IAAI,CAAC;MAAC,IAAG,CAAC,CAAC,EAAC,OAAO,CAAC;MAAC,IAAG,QAAQ,IAAE,OAAO,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAAC,IAAG,CAAC,CAAC,IAAE,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,MAAI;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,IAAI;QAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC;MAAA;MAAC,OAAM,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,IAAE,CAAC;IAAA,CAAC;IAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;MAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;MAAC,IAAI,CAAC,GAAC,QAAQ,IAAE,OAAO,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC;MAAC,OAAO,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,SAAS,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC;IAAC,CAAC,GAAC,CAAC;EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;IAAC,OAAO,CAAC,CAAC,CAAC,EAAC;MAAC,MAAM,EAAC,CAAC,CAAC,EAAE;MAAC,GAAG,EAAC,CAAC,CAAC,EAAE;MAAC,CAAC,EAAC,CAAC,CAAC,EAAE;MAAC,OAAO,EAAC,CAAC,CAAC;IAAO,CAAC,CAAC;EAAA,CAAC;EAAC,IAAI,CAAC,GAAC,YAAU;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,IAAI,CAAC,EAAE,IAAE,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;MAAA;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS;MAAC,OAAO,CAAC,CAAC,KAAK,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,EAAE,GAAC,UAAS,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,IAAI;YAAC,CAAC,GAAC,CAAC,CAAC,GAAG;UAAC,IAAG,IAAI,KAAG,CAAC,EAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC;UAAC,IAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,OAAO,IAAI,IAAI,CAAD,CAAC;UAAC,IAAG,CAAC,YAAY,IAAI,EAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC;UAAC,IAAG,QAAQ,IAAE,OAAO,CAAC,IAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAAC,IAAG,CAAC,EAAC;cAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC;gBAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,GAAG,EAAE,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC;cAAC,OAAO,CAAC,GAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC;YAAA;UAAC;UAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,YAAU;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,eAAe,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,YAAU;QAAC,OAAO,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,YAAU;QAAC,OAAM,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAG,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,IAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,EAAE,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,YAAU;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAC,GAAG,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,YAAU;QAAC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC,GAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;YAAC,OAAO,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;UAAA,CAAC;UAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;YAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;UAAA,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,EAAE;UAAC,CAAC,GAAC,IAAI,CAAC,EAAE;UAAC,CAAC,GAAC,IAAI,CAAC,EAAE;UAAC,CAAC,GAAC,KAAK,IAAE,IAAI,CAAC,EAAE,GAAC,KAAK,GAAC,EAAE,CAAC;QAAC,QAAO,CAAC;UAAE,KAAK,CAAC;YAAC,OAAO,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,EAAC,EAAE,CAAC;UAAC,KAAK,CAAC;YAAC,OAAO,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC;UAAC,KAAK,CAAC;YAAC,IAAI,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAE,CAAC;cAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC;YAAC,OAAO,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC;UAAC,KAAK,CAAC;UAAC,KAAK,CAAC;YAAC,OAAO,CAAC,CAAC,CAAC,GAAC,OAAO,EAAC,CAAC,CAAC;UAAC,KAAK,CAAC;YAAC,OAAO,CAAC,CAAC,CAAC,GAAC,SAAS,EAAC,CAAC,CAAC;UAAC,KAAK,CAAC;YAAC,OAAO,CAAC,CAAC,CAAC,GAAC,SAAS,EAAC,CAAC,CAAC;UAAC,KAAK,CAAC;YAAC,OAAO,CAAC,CAAC,CAAC,GAAC,cAAc,EAAC,CAAC,CAAC;UAAC;YAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,KAAK,IAAE,IAAI,CAAC,EAAE,GAAC,KAAK,GAAC,EAAE,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,MAAM,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,MAAM,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,OAAO,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,UAAU,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,OAAO,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,SAAS,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,SAAS,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,cAAc,EAAC,CAAC,EAAE,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,IAAI,CAAC,EAAE,IAAE,CAAC,GAAC,IAAI,CAAC,EAAE,CAAC,GAAC,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC;UAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAAA,CAAC,MAAK,CAAC,IAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI;MAAA,CAAC,EAAC,CAAC,CAAC,GAAG,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,GAAG,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,GAAG,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC,GAAC,IAAI;QAAC,CAAC,GAAC,MAAM,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;UAAA,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,EAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,EAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC;QAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI;UAAC,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAC,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAC,OAAO,CAAC,CAAC,WAAW,IAAE,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,IAAE,sBAAsB;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,EAAE;UAAC,CAAC,GAAC,IAAI,CAAC,EAAE;UAAC,CAAC,GAAC,IAAI,CAAC,EAAE;UAAC,CAAC,GAAC,CAAC,CAAC,QAAQ;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM;UAAC,CAAC,GAAC,CAAC,CAAC,QAAQ;UAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;YAAC,OAAO,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC;UAAA,CAAC;UAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC;YAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,EAAE,IAAE,EAAE,EAAC,CAAC,EAAC,GAAG,CAAC;UAAA,CAAC;UAAC,CAAC,GAAC,CAAC,IAAE,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC,GAAC,EAAE,GAAC,IAAI,GAAC,IAAI;YAAC,OAAO,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAC,CAAC;UAAA,CAAC;QAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAS,CAAC,EAAC,CAAC,EAAC;UAAC,OAAO,CAAC,IAAE,UAAS,CAAC,EAAC;YAAC,QAAO,CAAC;cAAE,KAAI,IAAI;gBAAC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;cAAC,KAAI,MAAM;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,EAAC,GAAG,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,CAAC,GAAC,CAAC;cAAC,KAAI,IAAI;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAC,GAAG,CAAC;cAAC,KAAI,KAAK;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;cAAC,KAAI,MAAM;gBAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,CAAC,CAAC,EAAE;cAAC,KAAI,IAAI;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,EAAC,GAAG,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;cAAC,KAAI,IAAI;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC;cAAC,KAAI,KAAK;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,EAAC,CAAC,CAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC;cAAC,KAAI,MAAM;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,MAAM,CAAC,CAAC,CAAC;cAAC,KAAI,IAAI;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,GAAG,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC;cAAC,KAAI,IAAI;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,MAAM,CAAC,CAAC,CAAC;cAAC,KAAI,IAAI;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,GAAG,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;cAAC,KAAI,IAAI;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,EAAC,GAAG,CAAC;cAAC,KAAI,KAAK;gBAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAC,CAAC,EAAC,GAAG,CAAC;cAAC,KAAI,GAAG;gBAAC,OAAO,CAAC;YAAA;YAAC,OAAO,IAAI;UAAA,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAC,EAAE,CAAC;QAAA,CAAE,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,YAAU;QAAC,OAAO,EAAE,GAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,GAAC,EAAE,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC,GAAC,IAAI;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAE,CAAC;UAAC,CAAC,GAAC,IAAI,GAAC,CAAC;UAAC,CAAC,GAAC,SAAA,CAAA,EAAU;YAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;UAAA,CAAC;QAAC,QAAO,CAAC;UAAE,KAAK,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,EAAE;YAAC;UAAM,KAAK,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,CAAC;YAAC;UAAM,KAAK,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC;YAAC;UAAM,KAAK,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,IAAE,MAAM;YAAC;UAAM,KAAK,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,IAAE,KAAK;YAAC;UAAM,KAAK,CAAC;YAAC,CAAC,GAAC,CAAC,GAAC,CAAC;YAAC;UAAM,KAAK,CAAC;YAAC,CAAC,GAAC,CAAC,GAAC,CAAC;YAAC;UAAM,KAAK,CAAC;YAAC,CAAC,GAAC,CAAC,GAAC,CAAC;YAAC;UAAM;YAAQ,CAAC,GAAC,CAAC;QAAA;QAAC,OAAO,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,YAAU;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,YAAU;QAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAG,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,EAAE;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,KAAG,CAAC,CAAC,EAAE,GAAC,CAAC,CAAC,EAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,YAAU;QAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAC,IAAI,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,YAAU;QAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,YAAU;QAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAC,IAAI;MAAA,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,YAAU;QAAC,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,YAAU;QAAC,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC;IAAA,CAAC,CAAC,CAAC;IAAC,CAAC,GAAC,CAAC,CAAC,SAAS;EAAC,OAAO,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,EAAC,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAE,UAAS,CAAC,EAAC;IAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,UAAS,CAAC,EAAC;MAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC;EAAA,CAAE,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;IAAC,OAAO,CAAC,CAAC,EAAE,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC;EAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC;IAAC,OAAO,CAAC,CAAC,GAAG,GAAC,CAAC,CAAC;EAAA,CAAC,EAAC,CAAC,CAAC,EAAE,GAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC;AAAA,CAAE,CAAC;;;;;ACAv/N,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;EAAC,QAAQ,IAAE,OAAO,OAAO,IAAE,WAAW,IAAE,OAAO,MAAM,GAAC,MAAM,CAAC,OAAO,GAAC,CAAC,CAAC,CAAC,GAAC,UAAU,IAAE,OAAO,MAAM,IAAE,MAAM,CAAC,GAAG,GAAC,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,WAAW,IAAE,OAAO,UAAU,GAAC,UAAU,GAAC,CAAC,IAAE,IAAI,EAAE,8BAA8B,GAAC,CAAC,CAAC,CAAC;AAAA,CAAC,SAAO,YAAU;EAAC,YAAY;;EAAC,IAAI,CAAC,GAAC;MAAC,GAAG,EAAC,WAAW;MAAC,EAAE,EAAC,QAAQ;MAAC,CAAC,EAAC,YAAY;MAAC,EAAE,EAAC,cAAc;MAAC,GAAG,EAAC,qBAAqB;MAAC,IAAI,EAAC;IAA2B,CAAC;IAAC,CAAC,GAAC,yFAAyF;IAAC,CAAC,GAAC,MAAM;IAAC,CAAC,GAAC,OAAO;IAAC,CAAC,GAAC,oBAAoB;IAAC,CAAC,GAAC,CAAC,CAAC;IAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC;MAAC,OAAM,CAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,GAAC,EAAE,GAAC,IAAI,GAAC,GAAG,CAAC;IAAA,CAAC;EAAC,IAAI,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC;MAAC,OAAO,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;MAAA,CAAC;IAAA,CAAC;IAAC,CAAC,GAAC,CAAC,qBAAqB,EAAC,UAAS,CAAC,EAAC;MAAC,CAAC,IAAI,CAAC,IAAI,KAAG,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,IAAG,CAAC,CAAC,EAAC,OAAO,CAAC;QAAC,IAAG,GAAG,KAAG,CAAC,EAAC,OAAO,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;UAAC,CAAC,GAAC,EAAE,GAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC;QAAC,OAAO,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,GAAG,KAAG,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC;MAAA,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC,CAAC;IAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;MAAC,OAAO,CAAC,KAAG,CAAC,CAAC,OAAO,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC;IAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;MAAC,IAAI,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,QAAQ;MAAC,IAAG,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,EAAE,EAAC,CAAC,IAAE,CAAC,EAAC,IAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC;UAAC,CAAC,GAAC,CAAC,GAAC,EAAE;UAAC;QAAK;MAAC,CAAC,MAAK,CAAC,GAAC,CAAC,MAAI,CAAC,GAAC,IAAI,GAAC,IAAI,CAAC;MAAC,OAAO,CAAC;IAAA,CAAC;IAAC,CAAC,GAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,SAAS,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,SAAS,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,IAAI,EAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,YAAY,GAAC,GAAG,GAAC,CAAC,CAAC;MAAA,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,YAAY,GAAC,EAAE,GAAC,CAAC,CAAC;MAAA,CAAC,CAAC;MAAC,GAAG,EAAC,CAAC,OAAO,EAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,YAAY,GAAC,CAAC,CAAC;MAAA,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,OAAO;UAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAAC,IAAG,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,EAAE,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAC,EAAE,CAAC,KAAG,CAAC,KAAG,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC;MAAA,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAE,CAAC,CAAC,GAAG,CAAE,UAAS,CAAC,EAAC;YAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC;UAAA,CAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAC,CAAC;QAAC,IAAG,CAAC,GAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAD,CAAC;QAAC,IAAI,CAAC,KAAK,GAAC,CAAC,GAAC,EAAE,IAAE,CAAC;MAAA,CAAC,CAAC;MAAC,IAAI,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAC,CAAC;QAAC,IAAG,CAAC,GAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAD,CAAC;QAAC,IAAI,CAAC,KAAK,GAAC,CAAC,GAAC,EAAE,IAAE,CAAC;MAAA,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,UAAU,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,CAAC;MAAC,IAAI,EAAC,CAAC,OAAO,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC;MAAC,EAAE,EAAC;IAAC,CAAC;EAAC,SAAS,CAAC,CAAC,CAAC,EAAC;IAAC,IAAI,CAAC,EAAC,CAAC;IAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,OAAO;IAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,EAAE,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAAC,OAAO,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gCAAgC,EAAE,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;UAAC,OAAO,CAAC,IAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAAA,CAAE,CAAC;MAAA,CAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC;MAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC;QAAC,KAAK,EAAC,CAAC;QAAC,MAAM,EAAC;MAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAC,EAAE,CAAC;IAAA;IAAC,OAAO,UAAS,CAAC,EAAC;MAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;QAAC,IAAG,QAAQ,IAAE,OAAO,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,MAAM,CAAC,KAAI;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK;YAAC,CAAC,GAAC,CAAC,CAAC,MAAM;YAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,EAAE,CAAC;QAAA;MAAC;MAAC,OAAO,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS;QAAC,IAAG,KAAK,CAAC,KAAG,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK;UAAC,CAAC,GAAC,CAAC,GAAC,EAAE,KAAG,CAAC,CAAC,KAAK,IAAE,EAAE,CAAC,GAAC,EAAE,KAAG,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,OAAO,CAAC,CAAC,SAAS;QAAA;MAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC;IAAA,CAAC;EAAA;EAAC,OAAO,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;IAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,iBAAiB,KAAG,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;IAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS;MAAC,CAAC,GAAC,CAAC,CAAC,KAAK;IAAC,CAAC,CAAC,KAAK,GAAC,UAAS,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,IAAI;QAAC,CAAC,GAAC,CAAC,CAAC,GAAG;QAAC,CAAC,GAAC,CAAC,CAAC,IAAI;MAAC,IAAI,CAAC,EAAE,GAAC,CAAC;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;MAAC,IAAG,QAAQ,IAAE,OAAO,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,IAAE,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;UAAC,IAAG;YAAC,IAAG,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,KAAG,CAAC,GAAC,GAAG,GAAC,CAAC,IAAE,CAAC,CAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;cAAC,CAAC,GAAC,CAAC,CAAC,IAAI;cAAC,CAAC,GAAC,CAAC,CAAC,KAAK;cAAC,CAAC,GAAC,CAAC,CAAC,GAAG;cAAC,CAAC,GAAC,CAAC,CAAC,KAAK;cAAC,CAAC,GAAC,CAAC,CAAC,OAAO;cAAC,CAAC,GAAC,CAAC,CAAC,OAAO;cAAC,CAAC,GAAC,CAAC,CAAC,YAAY;cAAC,CAAC,GAAC,CAAC,CAAC,IAAI;cAAC,CAAC,GAAC,IAAI,IAAI,CAAD,CAAC;cAAC,CAAC,GAAC,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;cAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,WAAW,CAAC,CAAC;cAAC,CAAC,GAAC,CAAC;YAAC,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC,GAAC,CAAC,IAAE,CAAC;cAAC,CAAC,GAAC,CAAC,IAAE,CAAC;cAAC,CAAC,GAAC,CAAC,IAAE,CAAC;cAAC,CAAC,GAAC,CAAC,IAAE,CAAC;YAAC,OAAO,CAAC,GAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,GAAC,EAAE,GAAC,CAAC,CAAC,MAAM,GAAC,GAAG,CAAC,CAAC,GAAC,CAAC,GAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,IAAI,IAAI,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;UAAA,CAAC,QAAM,CAAC,EAAC;YAAC,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC;UAAA;QAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,KAAG,IAAI,CAAC,EAAE,GAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,IAAE,CAAC,IAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAG,IAAI,CAAC,EAAE,GAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC;MAAA,CAAC,MAAK,IAAG,CAAC,YAAY,KAAK,EAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC;QAAC,IAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC;UAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,EAAE,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,EAAE,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;UAAC;QAAK;QAAC,CAAC,KAAG,CAAC,KAAG,IAAI,CAAC,EAAE,GAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;MAAA,CAAC,MAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;IAAA,CAAC;EAAA,CAAC;AAAA,CAAE,CAAC;;;;;ACAjqH,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;EAAC,QAAQ,IAAE,OAAO,OAAO,IAAE,WAAW,IAAE,OAAO,MAAM,GAAC,MAAM,CAAC,OAAO,GAAC,CAAC,CAAC,CAAC,GAAC,UAAU,IAAE,OAAO,MAAM,IAAE,MAAM,CAAC,GAAG,GAAC,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,WAAW,IAAE,OAAO,UAAU,GAAC,UAAU,GAAC,CAAC,IAAE,IAAI,EAAE,gBAAgB,GAAC,CAAC,CAAC,CAAC;AAAA,CAAC,SAAO,YAAU;EAAC,YAAY;;EAAC,IAAI,CAAC,GAAC,QAAQ;IAAC,CAAC,GAAC,sBAAsB;IAAC,CAAC,GAAC,cAAc;EAAC,OAAO,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;IAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS;IAAC,CAAC,CAAC,GAAG,GAAC,UAAS,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC;QAAC,IAAI,EAAC,CAAC;QAAC,GAAG,EAAC,CAAC,CAAC;QAAC,IAAI,EAAC;MAAS,CAAC;MAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,GAAG,GAAC,UAAS,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAC;QAAC,MAAM,EAAC,IAAI,CAAC,EAAE;QAAC,GAAG,EAAC,CAAC;MAAC,CAAC,CAAC;MAAC,OAAO,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,YAAU;MAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAC;QAAC,MAAM,EAAC,IAAI,CAAC,EAAE;QAAC,GAAG,EAAC,CAAC;MAAC,CAAC,CAAC;IAAA,CAAC;IAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK;IAAC,CAAC,CAAC,KAAK,GAAC,UAAS,CAAC,EAAC;MAAC,CAAC,CAAC,GAAG,KAAG,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAG,IAAI,CAAC,OAAO,GAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;IAAA,CAAC;IAAC,IAAI,CAAC,GAAC,CAAC,CAAC,IAAI;IAAC,CAAC,CAAC,IAAI,GAAC,YAAU;MAAC,IAAG,IAAI,CAAC,EAAE,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;MAAA,CAAC,MAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAAA,CAAC;IAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS;IAAC,CAAC,CAAC,SAAS,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;MAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,EAAE,GAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAC,IAAI,CAAC,OAAO;MAAC,IAAG,QAAQ,IAAE,OAAO,CAAC,KAAG,CAAC,GAAC,UAAS,CAAC,EAAC;QAAC,KAAK,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,EAAE,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,IAAG,CAAC,CAAC,EAAC,OAAO,IAAI;QAAC,IAAI,CAAC,GAAC,CAAC,EAAE,GAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAE,CAAC,GAAG,EAAC,CAAC,EAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,EAAE,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,GAAG,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC;MAAA,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,KAAG,CAAC,CAAC,EAAC,OAAO,IAAI;MAAC,IAAI,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAE,EAAE,GAAC,EAAE,GAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,IAAI;MAAC,IAAG,CAAC,EAAC,OAAO,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,EAAE,GAAC,CAAC,KAAG,CAAC,EAAC,CAAC;MAAC,IAAG,CAAC,KAAG,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,EAAE,GAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,EAAE,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,YAAY,GAAC,CAAC;MAAA,CAAC,MAAK,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC;MAAC,OAAO,CAAC;IAAA,CAAC;IAAC,IAAI,CAAC,GAAC,CAAC,CAAC,MAAM;IAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;MAAC,IAAI,CAAC,GAAC,CAAC,KAAG,IAAI,CAAC,EAAE,GAAC,wBAAwB,GAAC,EAAE,CAAC;MAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,YAAU;MAAC,IAAI,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAC,CAAC,GAAC,IAAI,CAAC,OAAO,IAAE,IAAI,CAAC,EAAE,CAAC,YAAY,IAAE,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;MAAC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAC,GAAG,GAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,YAAU;MAAC,OAAM,CAAC,CAAC,IAAI,CAAC,EAAE;IAAA,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,YAAU;MAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,YAAU;MAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAAA,CAAC;IAAC,IAAI,CAAC,GAAC,CAAC,CAAC,MAAM;IAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;MAAC,OAAM,GAAG,KAAG,CAAC,IAAE,IAAI,CAAC,OAAO,GAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAAA,CAAC;IAAC,IAAI,CAAC,GAAC,CAAC,CAAC,IAAI;IAAC,CAAC,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,IAAG,CAAC,IAAE,IAAI,CAAC,EAAE,KAAG,CAAC,CAAC,EAAE,EAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;MAAC,IAAI,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;MAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;IAAA,CAAC;EAAA,CAAC;AAAA,CAAE,CAAC;;;ACA5sE,YAAY;;AAEZ,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;AACtC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;AACxC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;AAClC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;AAClC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;;;ACNlC,YAAY;;AAEZ,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAC3C,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,IAAI,KAAK,GAAG,CAAC,CAAC;AAEd,SAAS,QAAQ,CAAC,EAAE,EAAE;EACpB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,mBAAmB,CAAC;EAE/C,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;EACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EACrC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACtB;AAEA,SAAS,WAAW,CAAC,IAAI,EAAE;EACzB,SAAS,GAAG,CAAC,OAAO,EAAE;IACpB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,QAAQ,CAAC,CAAC;EACjB;EACA,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;EAEnB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;EAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACpC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;IACjB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;EACjC;EAEA,GAAG,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,OAAO,EAAE;IACpC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;EACzB,CAAC;EAED,OAAO,GAAG;AACZ;AAEA,OAAO,CAAC,WAAW,GAAG,WAAW;AAEjC,KAAK,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAA,EAAG;EACnC,IAAI,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;EACzC,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,CAAC;AAED,KAAK,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;EACxD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS;EAC1B,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS;EAElD,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE;EACjB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EACrC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAEzB,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC;IAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EACrC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;EAC3B,CAAC,MAAM;IACL,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC;IAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EACrC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EACrC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;EAC1B;AACF,CAAC;;;AChED,YAAY;;AAEZ,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAE3C,SAAS,MAAM,CAAC,OAAO,EAAE;EACvB,IAAI,CAAC,OAAO,GAAG,OAAO;EAEtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;EAC7B,IAAI,CAAC,SAAS,GAAG,CAAC;EAClB,IAAI,CAAC,KAAK,CAAC,CAAC;EAEZ,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;EACvC,IAAI,CAAC,SAAS,GAAG,CAAC;EAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK;AAC1C;AACA,MAAM,CAAC,OAAO,GAAG,MAAM;AAEvB,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAA,EAAG;EACxC;AAAA,CACD;AAED,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,IAAI,EAAE;EAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACnB,OAAO,EAAE;EAEX,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EACzB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAEjC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;EACrD;EACA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;EAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;EACjD,IAAI,CAAC,SAAS,IAAI,GAAG;;EAErB;EACA,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE;EAC9D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;EACtC,IAAI,CAAC,SAAS,GAAG,CAAC;EAClB,OAAO,IAAI,CAAC,SAAS;AACvB,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,IAAI,EAAE;EAC9D,IAAI,QAAQ,GAAG,CAAC;EAChB,IAAI,SAAS,GAAG,CAAC;EAEjB,IAAI,KAAK,GAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,GAAI,CAAC;EACjE,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;EAE3C,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;IACxB,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IAExC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EACvC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC;EAClD;;EAEA;EACA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,SAAU;EACnE,OAAO,QAAQ,GAAG,GAAG,EAAE,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;IACjD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC;IAC5C,SAAS,IAAI,IAAI,CAAC,SAAS;EAC7B;;EAEA;EACA,OAAO,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;EAE9C,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,IAAI,EAAE;EAC9D,IAAI,QAAQ,GAAG,CAAC;EAChB,IAAI,SAAS,GAAG,CAAC;EAEjB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;EAC1E,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;;EAE3C;EACA,OAAO,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE;IACzB,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC;EAChD;;EAEA;EACA,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;EAExC,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,MAAM,EAAE;EAC9C,IAAI,KAAK;EACT,IAAI,MAAM,EACR,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;EAE7B,IAAI,IAAI;EACR,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EACzB,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAE5B,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;EAE7B,IAAI,KAAK,EACP,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAE1B,OAAO,IAAI;AACf,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;EACjD,IAAI,GAAG,KAAK,CAAC,EACX,OAAO,KAAK;EAEd,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,EACxB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;EAEnB,OAAO,IAAI;AACb,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAA,EAAG;EACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EACzC,OAAO,EAAE;EAEX,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;EACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;EACpC,OAAO,GAAG;AACZ,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE;EAChD,OAAO,MAAM;AACf,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAA,EAAG;EACxD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,4BAA4B,CAAC;EAC1E,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;EACnC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;EAEzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACzB,CAAC;;;AC7ID,YAAY;;AAEZ,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAC3C,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAC9B,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AAEhC,SAAS,QAAQ,CAAA,EAAG;EAClB,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;EACvB,IAAI,CAAC,IAAI,GAAG,IAAI;AAClB;AAEA,SAAS,GAAG,CAAC,OAAO,EAAE;EACpB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;EAE1B,IAAI,KAAK,GAAG,IAAI,QAAQ,CAAC,CAAC;EAC1B,IAAI,CAAC,SAAS,GAAG,KAAK;EAEtB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;AACrC;AACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;AACrB,MAAM,CAAC,OAAO,GAAG,GAAG;AAEpB,GAAG,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,OAAO,EAAE;EACpC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;AACzB,CAAC;AAED,IAAI,UAAU,GAAG,CACf,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACvB;AAED,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;EACzD,KAAK,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;EAE9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC;EAE9D,IAAI,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;EACnC,IAAI,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;EAEnC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;EAC/B,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;EACjB,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;EACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;IAC7C,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/B,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;IAC5B,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;IAC5B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;EAClC;AACF,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;EAChE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS;EAE1B,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;EACtC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC;;EAE1C;EACA,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;EAC5B,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;EAChB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;EAEhB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAEzC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;EAE1C,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;EAChB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;EAEhB,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC;EACnC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;EAC9C,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;IAC1B,OAAO,KAAK;EACd;EAEA,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG;EAC/B,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACtC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK;EAEnB,OAAO,IAAI;AACb,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE;EAC7C,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;IAC1B,OAAO,MAAM;EACf;EAEA,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;EACnC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;EAE9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;AAC7C,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;EAC1E,IAAI,CAAC,GAAG,MAAM;EACd,IAAI,CAAC,GAAG,MAAM;;EAEd;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;IAC7C,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACxB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;;IAE5B;IACA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAE7B,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;IACpC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,GAAG,CAAC;IACT,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IACjB,CAAC,GAAG,CAAC;EACP;;EAEA;EACA,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;EAC1E,IAAI,CAAC,GAAG,MAAM;EACd,IAAI,CAAC,GAAG,MAAM;;EAEd;EACA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;IAClD,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACxB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;;IAE5B;IACA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IAE7B,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;IACpC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,GAAG,CAAC;IACT,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IACjB,CAAC,GAAG,CAAC;EACP;;EAEA;EACA,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,CAAC;;;ACrJD,YAAY;;AAEZ,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAC3C,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AAChC,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;AAE1B,SAAS,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;EAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,oBAAoB,CAAC;EAElD,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;EACxB,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;EACzB,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;EAE1B,IAAI,IAAI,KAAK,SAAS,EAAE;IACtB,IAAI,CAAC,OAAO,GAAG,CACb,GAAG,CAAC,MAAM,CAAC;MAAE,IAAI,EAAE,SAAS;MAAE,GAAG,EAAE;IAAG,CAAC,CAAC,EACxC,GAAG,CAAC,MAAM,CAAC;MAAE,IAAI,EAAE,SAAS;MAAE,GAAG,EAAE;IAAG,CAAC,CAAC,EACxC,GAAG,CAAC,MAAM,CAAC;MAAE,IAAI,EAAE,SAAS;MAAE,GAAG,EAAE;IAAG,CAAC,CAAC,CACzC;EACH,CAAC,MAAM;IACL,IAAI,CAAC,OAAO,GAAG,CACb,GAAG,CAAC,MAAM,CAAC;MAAE,IAAI,EAAE,SAAS;MAAE,GAAG,EAAE;IAAG,CAAC,CAAC,EACxC,GAAG,CAAC,MAAM,CAAC;MAAE,IAAI,EAAE,SAAS;MAAE,GAAG,EAAE;IAAG,CAAC,CAAC,EACxC,GAAG,CAAC,MAAM,CAAC;MAAE,IAAI,EAAE,SAAS;MAAE,GAAG,EAAE;IAAG,CAAC,CAAC,CACzC;EACH;AACF;AAEA,SAAS,GAAG,CAAC,OAAO,EAAE;EACpB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;EAE1B,IAAI,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;EACrD,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB;AACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;AAErB,MAAM,CAAC,OAAO,GAAG,GAAG;AAEpB,GAAG,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,OAAO,EAAE;EACpC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;AACzB,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;EAChE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS;EAE1B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC;EACjD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;EAClD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;AACpD,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI;AACvC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM;;;ACrD3C,YAAY;;AAEZ,OAAO,CAAC,YAAY,GAAG,SAAS,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE;EACvD,IAAI,GAAG,GAAK,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GACpB,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAG,GACrB,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAE,GACrB,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,aAAa,GAAG,SAAS,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;EAChE,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE;EAC7B,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAI,KAAK,KAAK,EAAE,GAAI,IAAI;EACtC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAI,KAAK,KAAK,CAAC,GAAI,IAAI;EACrC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI;AAC/B,CAAC;AAED,OAAO,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EAC3C,IAAI,IAAI,GAAG,CAAC;EACZ,IAAI,IAAI,GAAG,CAAC;EAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,KAAM,CAAC,GAAG,CAAE,GAAI,CAAC;IAC/B;IACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,KAAM,CAAC,GAAG,CAAE,GAAI,CAAC;IAC/B;EACF;EAEA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,KAAM,CAAC,GAAG,CAAE,GAAI,CAAC;IAC/B;IACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,KAAM,CAAC,GAAG,CAAE,GAAI,CAAC;IAC/B;EACF;EAEA,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;EACzB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;AAC3B,CAAC;AAED,OAAO,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EAC7C,IAAI,IAAI,GAAG,CAAC;EACZ,IAAI,IAAI,GAAG,CAAC;EAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IAC1B,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,KAAM,CAAC,GAAG,CAAE,GAAI,CAAC;MAC7B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,KAAM,CAAC,GAAG,CAAE,GAAI,CAAC;IAC/B;EACF;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IAC1B,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,KAAM,CAAC,GAAG,CAAE,GAAI,CAAC;MAC7B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,KAAM,CAAC,GAAG,CAAE,GAAI,CAAC;IAC/B;EACF;EAEA,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;EACzB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;AAC3B,CAAC;AAED,OAAO,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EAC7C,IAAI,IAAI,GAAG,CAAC;EACZ,IAAI,IAAI,GAAG,CAAC;;EAEZ;EACA;EACA;EACA;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,IAAK,CAAC,GAAG,CAAE,GAAI,CAAC;IAC9B;IACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,IAAK,CAAC,GAAG,CAAE,GAAI,CAAC;IAC9B;EACF;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;IAC/B,IAAI,KAAK,CAAC;IACV,IAAI,IAAK,GAAG,IAAK,CAAC,GAAG,CAAE,GAAI,CAAC;EAC9B;;EAEA;EACA;EACA;EACA;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,IAAK,CAAC,GAAG,CAAE,GAAI,CAAC;IAC9B;IACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,KAAK,CAAC;MACV,IAAI,IAAK,GAAG,IAAK,CAAC,GAAG,CAAE,GAAI,CAAC;IAC9B;EACF;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;IAC/B,IAAI,KAAK,CAAC;IACV,IAAI,IAAK,GAAG,IAAK,CAAC,GAAG,CAAE,GAAI,CAAC;EAC9B;EAEA,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;EACzB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;AAC3B,CAAC;AAED,OAAO,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE;EAC3C,OAAS,GAAG,IAAI,KAAK,GAAI,SAAS,GAAK,GAAG,KAAM,EAAE,GAAG,KAAO;AAC9D,CAAC;AAED,IAAI,QAAQ,GAAG;AACb;AACA,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC5B,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAC3B,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE;AAE3B;AACA,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAC3B,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC1B,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAC7B;AAED,OAAO,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EAC7C,IAAI,IAAI,GAAG,CAAC;EACZ,IAAI,IAAI,GAAG,CAAC;EAEZ,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC;EAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC5B,IAAI,KAAK,CAAC;IACV,IAAI,IAAK,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAI,GAAG;EACrC;EACA,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC1C,IAAI,KAAK,CAAC;IACV,IAAI,IAAK,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAI,GAAG;EACrC;EAEA,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;EACzB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;AAC3B,CAAC;AAED,OAAO,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE;EAC5C,IAAI,IAAI,GAAG,CAAC;EACZ,IAAI,IAAI,GAAG,CAAC;EAEZ,IAAI,GAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAK,CAAC,KAAK,EAAG;EAClC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;IAChC,IAAI,KAAK,CAAC;IACV,IAAI,IAAK,CAAC,KAAK,CAAC,GAAI,IAAI;EAC1B;EACA,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;IAC/B,IAAI,IAAK,CAAC,KAAK,CAAC,GAAI,IAAI;IACxB,IAAI,KAAK,CAAC;EACZ;EACA,IAAI,IAAK,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,GAAK,CAAC,KAAK,EAAG;EAEtC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;EACzB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;AAC3B,CAAC;AAED,IAAI,MAAM,GAAG,CACX,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAErD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAEnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAEtD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAEnD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAEnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAEpD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACrD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAEnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAA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CD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,gEAAgE,CACjE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE;EAEL,CAAC;EACD,GAAG,EAAE;IACH,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CACN,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,gEAAgE,EAChE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EA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E,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CACrD;AAED,IAAI,EAAE,GAAG,CACP,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACpD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CACrD;AAED,IAAI,CAAC,GAAG,CACN,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACtD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACtD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACvD;AAED,IAAI,EAAE,GAAG,CACP,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CACvD;;;ACjJD,YAAY;;AAEZ,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;AACjC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;AACrC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;AACrC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;AACrC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;;;ACNrC,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;AACjC,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;AAEnC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;AACvB,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;AAC3B,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI;AACzB,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS;AAEhC,IAAI,MAAM,GAAG,CACX,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,CACvB;AAED,SAAS,IAAI,CAAA,EAAG;EACd,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC,EACzB,OAAO,IAAI,IAAI,CAAC,CAAC;EAEnB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EACpB,IAAI,CAAC,CAAC,GAAG,CACP,UAAU,EAAE,UAAU,EAAE,UAAU,EAClC,UAAU,EAAE,UAAU,CAAE;EAC1B,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;AACxB;AAEA,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;AAC/B,MAAM,CAAC,OAAO,GAAG,IAAI;AAErB,IAAI,CAAC,SAAS,GAAG,GAAG;AACpB,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,IAAI,CAAC,SAAS,GAAG,EAAE;AAEnB,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;EACpD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;EAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EACzB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;EAEvB,OAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EACrB,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;EAE/D,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAEjB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;IACjB,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;EACP;EAEA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;EAC5C,IAAI,GAAG,KAAK,KAAK,EACf,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAEpC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AACvC,CAAC;;;ACzED,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;AAE7B,SAAS,MAAM,CAAA,EAAG;EAChB,IAAI,EAAE,IAAI,YAAY,MAAM,CAAC,EAC3B,OAAO,IAAI,MAAM,CAAC,CAAC;EAErB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;EACjB,IAAI,CAAC,CAAC,GAAG,CACP,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAE;AACpD;AACA,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;AAC9B,MAAM,CAAC,OAAO,GAAG,MAAM;AAEvB,MAAM,CAAC,SAAS,GAAG,GAAG;AACtB,MAAM,CAAC,OAAO,GAAG,GAAG;AACpB,MAAM,CAAC,YAAY,GAAG,GAAG;AACzB,MAAM,CAAC,SAAS,GAAG,EAAE;AAErB,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;EAC9C;EACA,IAAI,GAAG,KAAK,KAAK,EACf,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAEhD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;AACnD,CAAC;;;AC5BD,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;AACjC,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;AACnC,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAE3C,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;AACvB,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;AAC3B,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;AAC3B,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI;AACzB,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK;AAC3B,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;AAC7B,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;AAC7B,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;AAC7B,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;AAE7B,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS;AAEhC,IAAI,QAAQ,GAAG,CACb,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAC/C;AAED,SAAS,MAAM,CAAA,EAAG;EAChB,IAAI,EAAE,IAAI,YAAY,MAAM,CAAC,EAC3B,OAAO,IAAI,MAAM,CAAC,CAAC;EAErB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EACpB,IAAI,CAAC,CAAC,GAAG,CACP,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAC/C;EACD,IAAI,CAAC,CAAC,GAAG,QAAQ;EACjB,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;AACxB;AACA,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;AACjC,MAAM,CAAC,OAAO,GAAG,MAAM;AAEvB,MAAM,CAAC,SAAS,GAAG,GAAG;AACtB,MAAM,CAAC,OAAO,GAAG,GAAG;AACpB,MAAM,CAAC,YAAY,GAAG,GAAG;AACzB,MAAM,CAAC,SAAS,GAAG,EAAE;AAErB,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;EACtD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;EAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EACzB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;EACvB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EACtB,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;EAE1E,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAEjB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC;EAClC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC7B,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IAChB,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;EACnB;EAEA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;EAC9C,IAAI,GAAG,KAAK,KAAK,EACf,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAEpC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AACvC,CAAC;;;ACxGD,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;AAE/B,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;AAE7B,SAAS,MAAM,CAAA,EAAG;EAChB,IAAI,EAAE,IAAI,YAAY,MAAM,CAAC,EAC3B,OAAO,IAAI,MAAM,CAAC,CAAC;EAErB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;EACjB,IAAI,CAAC,CAAC,GAAG,CACP,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,CAAE;AAC5B;AACA,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;AAC9B,MAAM,CAAC,OAAO,GAAG,MAAM;AAEvB,MAAM,CAAC,SAAS,GAAG,IAAI;AACvB,MAAM,CAAC,OAAO,GAAG,GAAG;AACpB,MAAM,CAAC,YAAY,GAAG,GAAG;AACzB,MAAM,CAAC,SAAS,GAAG,GAAG;AAEtB,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;EAC9C,IAAI,GAAG,KAAK,KAAK,EACf,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,KAEjD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;AACpD,CAAC;;;AClCD,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;AACjC,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAE3C,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS;AAC/B,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS;AAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAC7B,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAC7B,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;AACvB,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAC7B,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAC7B,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU;AACjC,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU;AACjC,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU;AACjC,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU;AAEjC,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS;AAEhC,IAAI,QAAQ,GAAG,CACb,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAC/C;AAED,SAAS,MAAM,CAAA,EAAG;EAChB,IAAI,EAAE,IAAI,YAAY,MAAM,CAAC,EAC3B,OAAO,IAAI,MAAM,CAAC,CAAC;EAErB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EACpB,IAAI,CAAC,CAAC,GAAG,CACP,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,CAAE;EAC1B,IAAI,CAAC,CAAC,GAAG,QAAQ;EACjB,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;AACzB;AACA,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;AACjC,MAAM,CAAC,OAAO,GAAG,MAAM;AAEvB,MAAM,CAAC,SAAS,GAAG,IAAI;AACvB,MAAM,CAAC,OAAO,GAAG,GAAG;AACpB,MAAM,CAAC,YAAY,GAAG,GAAG;AACzB,MAAM,CAAC,SAAS,GAAG,GAAG;AAEtB,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;EAClE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;;EAEd;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EACzB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;EACvB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;IAC3B,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE;IAC5C,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE;IACxB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrB,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE;IAC9C,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE;IACxB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAErB,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CACf,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,CAAC;IACf,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CACnB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,CAAC;EACjB;AACF,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;EACtD,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;EAE9B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;EAEd,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAClB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;EACnB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;EACnB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;EACnB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;EACnB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;EACnB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;EAEnB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC;EAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;IACpC,IAAI,KAAK,GAAG,EAAE;IACd,IAAI,KAAK,GAAG,EAAE;IACd,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC3C,IAAI,KAAK,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEpB,IAAI,KAAK,GAAG,UAAU,CACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,CAAC;IACf,IAAI,KAAK,GAAG,UAAU,CACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,CAAC;IAEf,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IACzB,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IACzB,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACxC,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAExC,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAChD,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAEhD,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;IAEP,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;IAEP,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;IAEP,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC;IACnC,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC;IAEnC,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;IAEP,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;IAEP,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;IAEP,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACzC,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;EAC3C;EAEA,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;EACxB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;EACxB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;EACxB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;EACxB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;EACxB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACzB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACzB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;EAC9C,IAAI,GAAG,KAAK,KAAK,EACf,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAEpC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;AACvC,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EACnC,IAAI,CAAC,GAAI,EAAE,GAAG,EAAE,GAAM,CAAC,EAAE,GAAI,EAAG;EAChC,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EACvC,IAAI,CAAC,GAAI,EAAE,GAAG,EAAE,GAAM,CAAC,EAAE,GAAI,EAAG;EAChC,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EACpC,IAAI,CAAC,GAAI,EAAE,GAAG,EAAE,GAAK,EAAE,GAAG,EAAG,GAAI,EAAE,GAAG,EAAG;EACzC,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EACxC,IAAI,CAAC,GAAI,EAAE,GAAG,EAAE,GAAK,EAAE,GAAG,EAAG,GAAI,EAAE,GAAG,EAAG;EACzC,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;EACzB,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACjC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE;EACnC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE;;EAEnC,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;EAC7B,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;EACzB,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACjC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE;EACnC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE;;EAEnC,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;EAC7B,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;EACzB,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACjC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACjC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE;;EAEnC,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;EAC7B,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;EACzB,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACjC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACjC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE;;EAEnC,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;EAC7B,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;EACzB,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EAChC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EAChC,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EAE/B,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;EAC7B,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;EACzB,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EAChC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EAChC,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EAE/B,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;EAC7B,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;EACzB,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACjC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAE;EACpC,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EAE/B,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;EAC7B,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;AAEA,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;EACzB,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EACjC,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAE;EACpC,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;EAE/B,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;EAC7B,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,IAAI,WAAW;EAClB,OAAO,CAAC;AACV;;;ACzUA,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;AAC/B,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AAEzB,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EACxB,IAAI,CAAC,KAAK,CAAC,EACT,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EACpB,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACrB,IAAI,CAAC,KAAK,CAAC,EACT,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzB;AACA,OAAO,CAAC,IAAI,GAAG,IAAI;AAEnB,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EACrB,OAAQ,CAAC,GAAG,CAAC,GAAM,CAAC,CAAC,GAAI,CAAE;AAC7B;AACA,OAAO,CAAC,IAAI,GAAG,IAAI;AAEnB,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EACtB,OAAQ,CAAC,GAAG,CAAC,GAAK,CAAC,GAAG,CAAE,GAAI,CAAC,GAAG,CAAE;AACpC;AACA,OAAO,CAAC,KAAK,GAAG,KAAK;AAErB,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EACpB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAClB;AACA,OAAO,CAAC,GAAG,GAAG,GAAG;AAEjB,SAAS,MAAM,CAAC,CAAC,EAAE;EACjB,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;AACrD;AACA,OAAO,CAAC,MAAM,GAAG,MAAM;AAEvB,SAAS,MAAM,CAAC,CAAC,EAAE;EACjB,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;AACrD;AACA,OAAO,CAAC,MAAM,GAAG,MAAM;AAEvB,SAAS,MAAM,CAAC,CAAC,EAAE;EACjB,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAI,CAAC,KAAK,CAAE;AACjD;AACA,OAAO,CAAC,MAAM,GAAG,MAAM;AAEvB,SAAS,MAAM,CAAC,CAAC,EAAE;EACjB,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAI,CAAC,KAAK,EAAG;AACnD;AACA,OAAO,CAAC,MAAM,GAAG,MAAM;;;AChDvB,YAAY;;AAEZ,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAC3C,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAE3B,SAAS,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE;EAC/B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,MAAM,EAAE;IAC3C,OAAO,KAAK;EACd;EACA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE;IAChC,OAAO,KAAK;EACd;EACA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,MAAM,MAAM;AACpD;AAEA,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE;EACzB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EACpB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;EACpB,IAAI,CAAC,GAAG,EACN,OAAO,EAAE;EACX,IAAI,GAAG,GAAG,EAAE;EACZ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,IAAI,CAAC,GAAG,EAAE;MACR;MACA;MACA;MACA;MACA,IAAI,CAAC,GAAG,CAAC;MACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,EAAE;UACX,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;QACd,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,EAAE;UACnB,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,CAAC,IAAI,CAAC,GAAI,GAAG;UACzB,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,CAAC,GAAG,EAAE,GAAI,GAAG;QAC3B,CAAC,MAAM,IAAI,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;UAClC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,GAAG,MAAM,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;UACnE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,CAAC,IAAI,EAAE,GAAI,GAAG;UAC1B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAK,CAAC,IAAI,EAAE,GAAI,EAAE,GAAI,GAAG;UACjC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAK,CAAC,IAAI,CAAC,GAAI,EAAE,GAAI,GAAG;UAChC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,CAAC,GAAG,EAAE,GAAI,GAAG;QAC3B,CAAC,MAAM;UACL,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,CAAC,IAAI,EAAE,GAAI,GAAG;UAC1B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAK,CAAC,IAAI,CAAC,GAAI,EAAE,GAAI,GAAG;UAChC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,CAAC,GAAG,EAAE,GAAI,GAAG;QAC3B;MACF;IACF,CAAC,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE;MACxB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;MACrC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EACtB,GAAG,GAAG,GAAG,GAAG,GAAG;MACjB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAChC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C;EACF,CAAC,MAAM;IACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;EACvB;EACA,OAAO,GAAG;AACZ;AACA,OAAO,CAAC,OAAO,GAAG,OAAO;AAEzB,SAAS,KAAK,CAAC,GAAG,EAAE;EAClB,IAAI,GAAG,GAAG,EAAE;EACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACjC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACnC,OAAO,GAAG;AACZ;AACA,OAAO,CAAC,KAAK,GAAG,KAAK;AAErB,SAAS,KAAK,CAAC,CAAC,EAAE;EAChB,IAAI,GAAG,GAAI,CAAC,KAAK,EAAE,GACP,CAAC,KAAK,CAAC,GAAI,MAAO,GAClB,CAAC,IAAI,CAAC,GAAI,QAAS,GACpB,CAAC,CAAC,GAAG,IAAI,KAAK,EAAG;EAC5B,OAAO,GAAG,KAAK,CAAC;AAClB;AACA,OAAO,CAAC,KAAK,GAAG,KAAK;AAErB,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE;EAC5B,IAAI,GAAG,GAAG,EAAE;EACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACnC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACd,IAAI,MAAM,KAAK,QAAQ,EACrB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACd,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC9B;EACA,OAAO,GAAG;AACZ;AACA,OAAO,CAAC,OAAO,GAAG,OAAO;AAEzB,SAAS,KAAK,CAAC,IAAI,EAAE;EACnB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACnB,OAAO,GAAG,GAAG,IAAI,CAAC,KAElB,OAAO,IAAI;AACf;AACA,OAAO,CAAC,KAAK,GAAG,KAAK;AAErB,SAAS,KAAK,CAAC,IAAI,EAAE;EACnB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACnB,OAAO,GAAG,GAAG,IAAI,CAAC,KACf,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACxB,OAAO,IAAI,GAAG,IAAI,CAAC,KAChB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACxB,OAAO,KAAK,GAAG,IAAI,CAAC,KACjB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACxB,OAAO,MAAM,GAAG,IAAI,CAAC,KAClB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACxB,OAAO,OAAO,GAAG,IAAI,CAAC,KACnB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACxB,OAAO,QAAQ,GAAG,IAAI,CAAC,KACpB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACxB,OAAO,SAAS,GAAG,IAAI,CAAC,KAExB,OAAO,IAAI;AACf;AACA,OAAO,CAAC,KAAK,GAAG,KAAK;AAErB,SAAS,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;EACvC,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK;EACrB,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;EACrB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;EAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;IACtD,IAAI,CAAC;IACL,IAAI,MAAM,KAAK,KAAK,EAClB,CAAC,GAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAG,GAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAEzE,CAAC,GAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAG,GAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1E,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;EAClB;EACA,OAAO,GAAG;AACZ;AACA,OAAO,CAAC,MAAM,GAAG,MAAM;AAEvB,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE;EAC5B,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;EACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;IAClD,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACd,IAAI,MAAM,KAAK,KAAK,EAAE;MACpB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;MACjB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI,CAAC,KAAK,EAAE,GAAI,IAAI;MAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI,CAAC,KAAK,CAAC,GAAI,IAAI;MAC7B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IACvB,CAAC,MAAM;MACL,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;MACrB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI,CAAC,KAAK,EAAE,GAAI,IAAI;MAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI,CAAC,KAAK,CAAC,GAAI,IAAI;MAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IACnB;EACF;EACA,OAAO,GAAG;AACZ;AACA,OAAO,CAAC,OAAO,GAAG,OAAO;AAEzB,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;EACpB,OAAQ,CAAC,KAAK,CAAC,GAAK,CAAC,IAAK,EAAE,GAAG,CAAG;AACpC;AACA,OAAO,CAAC,MAAM,GAAG,MAAM;AAEvB,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;EACpB,OAAQ,CAAC,IAAI,CAAC,GAAK,CAAC,KAAM,EAAE,GAAG,CAAG;AACpC;AACA,OAAO,CAAC,MAAM,GAAG,MAAM;AAEvB,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;EACnB,OAAQ,CAAC,GAAG,CAAC,KAAM,CAAC;AACtB;AACA,OAAO,CAAC,KAAK,GAAG,KAAK;AAErB,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EACxB,OAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAM,CAAC;AAC1B;AACA,OAAO,CAAC,OAAO,GAAG,OAAO;AAEzB,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EAC3B,OAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAM,CAAC;AAC9B;AACA,OAAO,CAAC,OAAO,GAAG,OAAO;AAEzB,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EAC9B,OAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAM,CAAC;AAClC;AACA,OAAO,CAAC,OAAO,GAAG,OAAO;AAEzB,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;EAC/B,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;EACjB,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;EAErB,IAAI,EAAE,GAAI,EAAE,GAAG,EAAE,KAAM,CAAC;EACxB,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;EACpC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;EACnB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE;AACnB;AACA,OAAO,CAAC,KAAK,GAAG,KAAK;AAErB,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EAChC,IAAI,EAAE,GAAI,EAAE,GAAG,EAAE,KAAM,CAAC;EACxB,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;EACpC,OAAO,EAAE,KAAK,CAAC;AACjB;AACA,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAE3B,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EAChC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;EAChB,OAAO,EAAE,KAAK,CAAC;AACjB;AACA,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAE3B,SAAS,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EAClD,IAAI,KAAK,GAAG,CAAC;EACb,IAAI,EAAE,GAAG,EAAE;EACX,EAAE,GAAI,EAAE,GAAG,EAAE,KAAM,CAAC;EACpB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;EACxB,EAAE,GAAI,EAAE,GAAG,EAAE,KAAM,CAAC;EACpB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;EACxB,EAAE,GAAI,EAAE,GAAG,EAAE,KAAM,CAAC;EACpB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;EAExB,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK;EAClC,OAAO,EAAE,KAAK,CAAC;AACjB;AACA,OAAO,CAAC,UAAU,GAAG,UAAU;AAE/B,SAAS,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EAClD,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EAC1B,OAAO,EAAE,KAAK,CAAC;AACjB;AACA,OAAO,CAAC,UAAU,GAAG,UAAU;AAE/B,SAAS,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EAC1D,IAAI,KAAK,GAAG,CAAC;EACb,IAAI,EAAE,GAAG,EAAE;EACX,EAAE,GAAI,EAAE,GAAG,EAAE,KAAM,CAAC;EACpB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;EACxB,EAAE,GAAI,EAAE,GAAG,EAAE,KAAM,CAAC;EACpB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;EACxB,EAAE,GAAI,EAAE,GAAG,EAAE,KAAM,CAAC;EACpB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;EACxB,EAAE,GAAI,EAAE,GAAG,EAAE,KAAM,CAAC;EACpB,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;EAExB,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK;EACvC,OAAO,EAAE,KAAK,CAAC;AACjB;AACA,OAAO,CAAC,UAAU,GAAG,UAAU;AAE/B,SAAS,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EAC1D,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;EAE/B,OAAO,EAAE,KAAK,CAAC;AACjB;AACA,OAAO,CAAC,UAAU,GAAG,UAAU;AAE/B,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;EAC9B,IAAI,CAAC,GAAI,EAAE,IAAK,EAAE,GAAG,GAAI,GAAK,EAAE,KAAK,GAAI;EACzC,OAAO,CAAC,KAAK,CAAC;AAChB;AACA,OAAO,CAAC,SAAS,GAAG,SAAS;AAE7B,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;EAC9B,IAAI,CAAC,GAAI,EAAE,IAAK,EAAE,GAAG,GAAI,GAAK,EAAE,KAAK,GAAI;EACzC,OAAO,CAAC,KAAK,CAAC;AAChB;AACA,OAAO,CAAC,SAAS,GAAG,SAAS;AAE7B,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;EAC7B,OAAO,EAAE,KAAK,GAAG;AACnB;AACA,OAAO,CAAC,QAAQ,GAAG,QAAQ;AAE3B,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;EAC7B,IAAI,CAAC,GAAI,EAAE,IAAK,EAAE,GAAG,GAAI,GAAK,EAAE,KAAK,GAAI;EACzC,OAAO,CAAC,KAAK,CAAC;AAChB;AACA,OAAO,CAAC,QAAQ,GAAG,QAAQ;;;ACrR3B,YAAY;;AAEZ,IAAI,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;AAC7B,IAAI,KAAK,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAChD,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAE3C,SAAS,QAAQ,CAAC,OAAO,EAAE;EACzB,IAAI,EAAE,IAAI,YAAY,QAAQ,CAAC,EAC7B,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC;EAC9B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;EACxB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU;EAEtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;EAC/B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY;EAE9D,IAAI,CAAC,OAAO,GAAG,IAAI;EACnB,IAAI,CAAC,cAAc,GAAG,IAAI;EAC1B,IAAI,CAAC,CAAC,GAAG,IAAI;EACb,IAAI,CAAC,CAAC,GAAG,IAAI;EAEb,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;EACzE,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;EACnE,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;EAChE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAK,IAAI,CAAC,UAAU,GAAG,CAAE,EACvC,kCAAkC,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;EACtE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAClC;AACA,MAAM,CAAC,OAAO,GAAG,QAAQ;AAEzB,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;EAC7D,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;EAE7C,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;EACnC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;EACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACtC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAChB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;EAClB;EAEA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;EAClB,IAAI,CAAC,OAAO,GAAG,CAAC;EAChB,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAE;AAC1C,CAAC;;AAED,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,IAAI,CAAA,EAAG;EACzC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,IAAI,EAAE;EACjD,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CACP,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CACd,MAAM,CAAC,CAAE,IAAI,CAAE,CAAC;EAChC,IAAI,IAAI,EACN,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;EAC1B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;EACtB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EAC7C,IAAI,CAAC,IAAI,EACP;EAEF,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CACP,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CACd,MAAM,CAAC,CAAE,IAAI,CAAE,CAAC,CAChB,MAAM,CAAC,IAAI,CAAC,CACZ,MAAM,CAAC,CAAC;EACtB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE;EAC5E;EACA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;IAClC,MAAM,GAAG,GAAG;IACZ,GAAG,GAAG,UAAU;IAChB,UAAU,GAAG,IAAI;EACnB;EAEA,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;EAC5C,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;EAEhC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAK,IAAI,CAAC,UAAU,GAAG,CAAE,EACvC,kCAAkC,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;EAEtE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;EACvC,IAAI,CAAC,OAAO,GAAG,CAAC;AAClB,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE;EACrE,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EACpC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;;EAEvC;EACA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,MAAM,GAAG,GAAG;IACZ,GAAG,GAAG,GAAG;IACT,GAAG,GAAG,IAAI;EACZ;;EAEA;EACA,IAAI,GAAG,EAAE;IACP,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;EACnB;EAEA,IAAI,IAAI,GAAG,EAAE;EACb,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;IACxB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;EAC5B;EAEA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;EAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;EACjB,IAAI,CAAC,OAAO,EAAE;EACd,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;AAC/B,CAAC;;;;;AChHD;AACA,OAAO,CAAC,IAAI,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;EAC3D,IAAI,CAAC,EAAE,CAAC;EACR,IAAI,IAAI,GAAI,MAAM,GAAG,CAAC,GAAI,IAAI,GAAG,CAAC;EAClC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;EAC1B,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC;EACrB,IAAI,KAAK,GAAG,CAAC,CAAC;EACd,IAAI,CAAC,GAAG,IAAI,GAAI,MAAM,GAAG,CAAC,GAAI,CAAC;EAC/B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;EACrB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;EAE1B,CAAC,IAAI,CAAC;EAEN,CAAC,GAAG,CAAC,GAAI,CAAC,CAAC,IAAK,CAAC,KAAM,IAAI,CAAE;EAC7B,CAAC,KAAM,CAAC,KAAM;EACd,KAAK,IAAI,IAAI;EACb,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAI,CAAC,GAAG,GAAG,GAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;EAE3E,CAAC,GAAG,CAAC,GAAI,CAAC,CAAC,IAAK,CAAC,KAAM,IAAI,CAAE;EAC7B,CAAC,KAAM,CAAC,KAAM;EACd,KAAK,IAAI,IAAI;EACb,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAI,CAAC,GAAG,GAAG,GAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;EAE3E,IAAI,CAAC,KAAK,CAAC,EAAE;IACX,CAAC,GAAG,CAAC,GAAG,KAAK;EACf,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;IACrB,OAAO,CAAC,GAAG,GAAG,GAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,QAAS;EAC5C,CAAC,MAAM;IACL,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;IACzB,CAAC,GAAG,CAAC,GAAG,KAAK;EACf;EACA,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AACjD,CAAC;AAED,OAAO,CAAC,KAAK,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;EACnE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;EACX,IAAI,IAAI,GAAI,MAAM,GAAG,CAAC,GAAI,IAAI,GAAG,CAAC;EAClC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;EAC1B,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC;EACrB,IAAI,EAAE,GAAI,IAAI,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAE;EAChE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAI,MAAM,GAAG,CAAE;EAC/B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;EACrB,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,IAAK,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAE,GAAG,CAAC,GAAG,CAAC;EAE3D,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;EAEvB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;IACtC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACxB,CAAC,GAAG,IAAI;EACV,CAAC,MAAM;IACL,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IAC1C,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MACrC,CAAC,EAAE;MACH,CAAC,IAAI,CAAC;IACR;IACA,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;MAClB,KAAK,IAAI,EAAE,GAAG,CAAC;IACjB,CAAC,MAAM;MACL,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtC;IACA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;MAClB,CAAC,EAAE;MACH,CAAC,IAAI,CAAC;IACR;IAEA,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE;MACrB,CAAC,GAAG,CAAC;MACL,CAAC,GAAG,IAAI;IACV,CAAC,MAAM,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;MACzB,CAAC,GAAG,CAAE,KAAK,GAAG,CAAC,GAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;MACzC,CAAC,GAAG,CAAC,GAAG,KAAK;IACf,CAAC,MAAM;MACL,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;MACtD,CAAC,GAAG,CAAC;IACP;EACF;EAEA,OAAO,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;EAE/E,CAAC,GAAI,CAAC,IAAI,IAAI,GAAI,CAAC;EACnB,IAAI,IAAI,IAAI;EACZ,OAAO,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;EAE9E,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG;AACnC,CAAC;;;;;ACpFD,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;EACvC;EACA,MAAM,CAAC,OAAO,GAAG,SAAS,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE;IAClD,IAAI,SAAS,EAAE;MACb,IAAI,CAAC,MAAM,GAAG,SAAS;MACvB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE;QAClD,WAAW,EAAE;UACX,KAAK,EAAE,IAAI;UACX,UAAU,EAAE,KAAK;UACjB,QAAQ,EAAE,IAAI;UACd,YAAY,EAAE;QAChB;MACF,CAAC,CAAC;IACJ;EACF,CAAC;AACH,CAAC,MAAM;EACL;EACA,MAAM,CAAC,OAAO,GAAG,SAAS,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE;IAClD,IAAI,SAAS,EAAE;MACb,IAAI,CAAC,MAAM,GAAG,SAAS;MACvB,IAAI,QAAQ,GAAG,SAAA,CAAA,EAAY,CAAC,CAAC;MAC7B,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS;MACxC,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC,CAAC;MAC/B,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI;IACnC;EACF,CAAC;AACH;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,UAAS,CAAC,EAAC;EAAC,IAAG,QAAQ,IAAE,OAAO,OAAO,IAAE,WAAW,IAAE,OAAO,MAAM,EAAC,MAAM,CAAC,OAAO,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAG,UAAU,IAAE,OAAO,MAAM,IAAE,MAAM,CAAC,GAAG,EAAC,MAAM,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,KAAI;IAAC,CAAC,WAAW,IAAE,OAAO,MAAM,GAAC,MAAM,GAAC,WAAW,IAAE,OAAO,MAAM,GAAC,MAAM,GAAC,WAAW,IAAE,OAAO,IAAI,GAAC,IAAI,GAAC,IAAI,EAAE,KAAK,GAAC,CAAC,CAAC,CAAC;EAAA;AAAC,CAAC,CAAC,YAAU;EAAC,OAAO,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;IAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;MAAC,IAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC;QAAC,IAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,UAAU,IAAE,OAAO,OAAO,IAAE,OAAO;UAAC,IAAG,CAAC,CAAC,IAAE,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;UAAC,IAAG,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,IAAI,KAAK,CAAC,sBAAsB,GAAC,CAAC,GAAC,GAAG,CAAC;UAAC,MAAM,CAAC,CAAC,IAAI,GAAC,kBAAkB,EAAC,CAAC;QAAA;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC;UAAC,OAAO,EAAC,CAAC;QAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAC,UAAS,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,OAAO,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC;QAAA,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;MAAA;MAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;IAAA;IAAC,KAAI,IAAI,CAAC,GAAC,UAAU,IAAE,OAAO,OAAO,IAAE,OAAO,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,OAAO,CAAC;EAAA,CAAC,CAAC;IAAC,CAAC,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC;QAAC,CAAC,GAAC,mEAAmE;MAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,QAAQ,KAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,GAAE,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,IAAE,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAE,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,EAAE,GAAC,CAAC,GAAC,EAAE,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,OAAO;QAAC,IAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,KAAG,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;QAAC,IAAI,CAAC;UAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAC,EAAE,CAAC,EAAE,MAAM,GAAC,CAAC;QAAC,IAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,KAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAE,CAAC,EAAE,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,KAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAE,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,CAAC,UAAU,GAAC,IAAI,UAAU,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,GAAE,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,EAAC,CAAC,GAAC,CAAC,EAAE,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,EAAC,EAAE,KAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,EAAC,EAAE,KAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,WAAW,EAAC,EAAE;MAAC,SAAS,EAAC;IAAE,CAAC,CAAC;IAAC,CAAC,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,qBAAqB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,qBAAqB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,0BAA0B,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,cAAc,GAAC,CAAC,EAAC,IAAI,CAAC,gBAAgB,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,iBAAiB,GAAC,CAAC;MAAA;MAAC,CAAC,CAAC,SAAS,GAAC;QAAC,gBAAgB,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;YAAC,CAAC,GAAC,IAAI;UAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,EAAC,YAAU;YAAC,IAAG,IAAI,CAAC,UAAU,CAAC,WAAW,KAAG,CAAC,CAAC,gBAAgB,EAAC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;UAAA,CAAC,CAAC,EAAC,CAAC;QAAA,CAAC;QAAC,mBAAmB,EAAC,SAAA,CAAA,EAAU;UAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,kBAAkB,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,cAAc,CAAC,OAAO,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,aAAa,EAAC,IAAI,CAAC,WAAW,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,YAAY,EAAC,CAAC;MAAC,qBAAqB,EAAC,EAAE;MAAC,0BAA0B,EAAC,EAAE;MAAC,qBAAqB,EAAC;IAAE,CAAC,CAAC;IAAC,CAAC,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,wBAAwB,CAAC;MAAC,CAAC,CAAC,KAAK,GAAC;QAAC,KAAK,EAAC,MAAM;QAAC,cAAc,EAAC,SAAA,CAAA,EAAU;UAAC,OAAO,IAAI,CAAC,CAAC,mBAAmB,CAAC;QAAA,CAAC;QAAC,gBAAgB,EAAC,SAAA,CAAA,EAAU;UAAC,OAAO,IAAI,CAAC,CAAC,qBAAqB,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,SAAS,CAAC;IAAA,CAAC,EAAC;MAAC,SAAS,EAAC,CAAC;MAAC,wBAAwB,EAAC;IAAE,CAAC,CAAC;IAAC,CAAC,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;MAAC,IAAI,CAAC,GAAC,YAAU;QAAC,KAAI,IAAI,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,GAAG,EAAC,CAAC,EAAE,EAAC;UAAC,CAAC,GAAC,CAAC;UAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,UAAU,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,KAAG,CAAC;UAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC;QAAA;QAAC,OAAO,CAAC;MAAA,CAAC,CAAC,CAAC;MAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,KAAK,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,MAAM,GAAC,QAAQ,KAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC;YAAC,CAAC,GAAC,CAAC,GAAC,CAAC;UAAC,CAAC,IAAE,CAAC,CAAC;UAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,GAAG,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,OAAM,CAAC,CAAC,GAAC,CAAC;QAAA,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC;YAAC,CAAC,GAAC,CAAC,GAAC,CAAC;UAAC,CAAC,IAAE,CAAC,CAAC;UAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,GAAG,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,OAAM,CAAC,CAAC,GAAC,CAAC;QAAA,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,GAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,SAAS,EAAC;IAAE,CAAC,CAAC;IAAC,CAAC,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,aAAa,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,IAAI,EAAC,CAAC,CAAC,WAAW,GAAC,IAAI,EAAC,CAAC,CAAC,kBAAkB,GAAC,IAAI,EAAC,CAAC,CAAC,OAAO,GAAC,IAAI,EAAC,CAAC,CAAC,eAAe,GAAC,IAAI,EAAC,CAAC,CAAC,cAAc,GAAC,IAAI;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,CAAC,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,IAAI;MAAC,CAAC,GAAC,WAAW,IAAE,OAAO,OAAO,GAAC,OAAO,GAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC;QAAC,OAAO,EAAC;MAAC,CAAC;IAAA,CAAC,EAAC;MAAC,GAAG,EAAC;IAAE,CAAC,CAAC;IAAC,CAAC,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,WAAW,IAAE,OAAO,UAAU,IAAE,WAAW,IAAE,OAAO,WAAW,IAAE,WAAW,IAAE,OAAO,WAAW;QAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,wBAAwB,CAAC;QAAC,CAAC,GAAC,CAAC,GAAC,YAAY,GAAC,OAAO;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,cAAc,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,IAAI,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,YAAY,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,KAAK,GAAC,MAAM,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,IAAI,EAAC,IAAI,KAAG,IAAI,CAAC,KAAK,IAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,YAAU;QAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,KAAG,IAAI,CAAC,KAAK,IAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAC,YAAU;QAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,IAAI;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,WAAW,GAAC,YAAU;QAAC,IAAI,CAAC,KAAK,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;UAAC,GAAG,EAAC,CAAC,CAAC;UAAC,KAAK,EAAC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAE,CAAC;QAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI;QAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;UAAC,CAAC,CAAC,IAAI,CAAC;YAAC,IAAI,EAAC,CAAC;YAAC,IAAI,EAAC,CAAC,CAAC;UAAI,CAAC,CAAC;QAAA,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,cAAc,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,YAAU;QAAC,OAAO,IAAI,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,wBAAwB,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,IAAI,EAAC;IAAE,CAAC,CAAC;IAAC,CAAC,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC,GAAC,EAAE;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,IAAE,MAAM,CAAC,YAAY,CAAC,GAAG,GAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC;QAAC,OAAO,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,IAAI;UAAC,CAAC,GAAC,CAAC,CAAC,WAAW;UAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,UAAU;UAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,OAAO;UAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM,KAAG,CAAC,CAAC,IAAI,CAAC,MAAM;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM,KAAG,CAAC,CAAC,MAAM;UAAC,CAAC,GAAC,EAAE;UAAC,CAAC,GAAC,EAAE;UAAC,CAAC,GAAC,EAAE;UAAC,CAAC,GAAC,CAAC,CAAC,GAAG;UAAC,CAAC,GAAC,CAAC,CAAC,IAAI;UAAC,CAAC,GAAC;YAAC,KAAK,EAAC,CAAC;YAAC,cAAc,EAAC,CAAC;YAAC,gBAAgB,EAAC;UAAC,CAAC;QAAC,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,cAAc,GAAC,CAAC,CAAC,cAAc,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,CAAC,gBAAgB,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC;QAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,IAAE,IAAI,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;QAAC,CAAC,KAAG,CAAC,IAAE,EAAE,CAAC,EAAC,MAAM,KAAG,CAAC,IAAE,CAAC,GAAC,GAAG,EAAC,CAAC,IAAE,UAAS,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC;UAAC,OAAO,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,KAAK,GAAC,KAAK,CAAC,EAAC,CAAC,KAAK,GAAC,CAAC,KAAG,EAAE;QAAA,CAAC,CAAC,CAAC,CAAC,eAAe,EAAC,CAAC,CAAC,KAAG,CAAC,GAAC,EAAE,EAAC,CAAC,IAAE,UAAS,CAAC,EAAC;UAAC,OAAO,EAAE,IAAE,CAAC,IAAE,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,aAAa,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,aAAa,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC,CAAC,GAAC,IAAI,EAAC,CAAC,KAAG,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,WAAW,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,UAAU,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,IAAI,GAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,IAAI,GAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,EAAE;QAAC,OAAO,CAAC,IAAE,MAAM,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,KAAK,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,cAAc,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,EAAC;UAAC,UAAU,EAAC,CAAC,CAAC,iBAAiB,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC;UAAC,SAAS,EAAC,CAAC,CAAC,mBAAmB,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,GAAC,UAAU,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC;QAAC,CAAC;MAAA;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,yBAAyB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,eAAe,CAAC,EAAC,IAAI,CAAC,YAAY,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,aAAa,GAAC,EAAE,EAAC,IAAI,CAAC,UAAU,GAAC,EAAE,EAAC,IAAI,CAAC,mBAAmB,GAAC,CAAC,EAAC,IAAI,CAAC,YAAY,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,IAAI,EAAC,IAAI,CAAC,QAAQ,GAAC,EAAE;MAAA;MAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAE,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,YAAY;UAAC,CAAC,GAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAC,IAAI,CAAC,UAAU,GAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAE,IAAI,CAAC,YAAY,IAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;UAAC,IAAI,EAAC,CAAC,CAAC,IAAI;UAAC,IAAI,EAAC;YAAC,WAAW,EAAC,IAAI,CAAC,WAAW;YAAC,OAAO,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,GAAC;UAAG;QAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,mBAAmB,GAAC,IAAI,CAAC,YAAY,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,WAAW,IAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;QAAC,IAAG,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,mBAAmB,EAAC,IAAI,CAAC,WAAW,EAAC,IAAI,CAAC,cAAc,CAAC;UAAC,IAAI,CAAC,IAAI,CAAC;YAAC,IAAI,EAAC,CAAC,CAAC,UAAU;YAAC,IAAI,EAAC;cAAC,OAAO,EAAC;YAAC;UAAC,CAAC,CAAC;QAAA,CAAC,MAAK,IAAI,CAAC,UAAU,GAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,UAAU,GAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,WAAW,IAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,mBAAmB,EAAC,IAAI,CAAC,WAAW,EAAC,IAAI,CAAC,cAAc,CAAC;QAAC,IAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,UAAS,CAAC,EAAC;YAAC,OAAO,CAAC,CAAC,eAAe,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAC,CAAC,CAAC;UAAA,CAAC,CAAC,CAAC,CAAC;UAAC,IAAI,EAAC;YAAC,OAAO,EAAC;UAAG;QAAC,CAAC,CAAC,CAAC,KAAK,KAAI,IAAI,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,CAAC,CAAC,UAAU;UAAC,IAAI,EAAC;YAAC,OAAO,EAAC;UAAC;QAAC,CAAC,CAAC,EAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,WAAW,GAAC,IAAI;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,YAAU;QAAC,KAAI,IAAI,CAAC,GAAC,IAAI,CAAC,YAAY,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,IAAI,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;UAAC,IAAI,EAAC;YAAC,OAAO,EAAC;UAAG;QAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,YAAY,GAAC,CAAC;UAAC,CAAC,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC,qBAAqB,GAAC,UAAU,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,GAAC,CAAC;UAAA,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,CAAC,UAAU,EAAC,IAAI,CAAC,cAAc,CAAC;QAAC,IAAI,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,CAAC;UAAC,IAAI,EAAC;YAAC,OAAO,EAAC;UAAG;QAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,GAAC,YAAU;QAAC,IAAI,CAAC,QAAQ,GAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI;QAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAC,UAAS,CAAC,EAAC;UAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAAA,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAC,YAAU;UAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAA,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAC,UAAS,CAAC,EAAC;UAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAAA,CAAC,CAAC,EAAC,IAAI;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAC,YAAU;QAAC,OAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAG,CAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAE,IAAI,CAAC,cAAc,GAAC,KAAK,CAAC,IAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,QAAQ;QAAC,IAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,OAAM,CAAC,CAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,IAAG;UAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAAA,CAAC,QAAM,CAAC,EAAC,CAAC;QAAC,OAAM,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,IAAI,GAAC,YAAU;QAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAC,KAAI,IAAI,CAAC,GAAC,IAAI,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,CAAC;MAAC,cAAc,EAAC,EAAE;MAAC,yBAAyB,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,UAAU,EAAC;IAAE,CAAC,CAAC;IAAC,CAAC,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;MAAC,CAAC,CAAC,cAAc,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,CAAC,cAAc,CAAC;UAAC,CAAC,GAAC,CAAC;QAAC,IAAG;UAAC,CAAC,CAAC,OAAO,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;YAAC,CAAC,EAAE;YAAC,IAAI,CAAC,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;gBAAC,IAAI,CAAC,GAAC,CAAC,IAAE,CAAC;kBAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAG,CAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,CAAC,GAAC,sCAAsC,CAAC;gBAAC,OAAO,CAAC;cAAA,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAC,CAAC,CAAC,WAAW,CAAC;cAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,IAAE,CAAC,CAAC,kBAAkB,IAAE,CAAC,CAAC;cAAC,CAAC,GAAC,CAAC,CAAC,GAAG;cAAC,CAAC,GAAC,CAAC,CAAC,IAAI;YAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAC;cAAC,IAAI,EAAC,CAAC;cAAC,GAAG,EAAC,CAAC;cAAC,IAAI,EAAC,CAAC;cAAC,OAAO,EAAC,CAAC,CAAC,OAAO,IAAE,EAAE;cAAC,eAAe,EAAC,CAAC,CAAC,eAAe;cAAC,cAAc,EAAC,CAAC,CAAC;YAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC;QAAA,CAAC,QAAM,CAAC,EAAC;UAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAAA;QAAC,OAAO,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,iBAAiB,EAAC,CAAC;MAAC,iBAAiB,EAAC;IAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,SAAS,CAAC,CAAA,EAAE;QAAC,IAAG,EAAE,IAAI,YAAY,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,CAAD,CAAC;QAAC,IAAG,SAAS,CAAC,MAAM,EAAC,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC;QAAC,IAAI,CAAC,KAAK,GAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,CAAC,OAAO,GAAC,IAAI,EAAC,IAAI,CAAC,IAAI,GAAC,EAAE,EAAC,IAAI,CAAC,KAAK,GAAC,YAAU;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,CAAD,CAAC;UAAC,KAAI,IAAI,CAAC,IAAI,IAAI,EAAC,UAAU,IAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC;UAAC,OAAO,CAAC;QAAA,CAAC;MAAA;MAAC,CAAC,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,GAAC,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,WAAW,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,YAAY,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,QAAQ,EAAC,CAAC,CAAC,SAAS,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,CAAD,CAAC,CAAE,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,YAAY,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,YAAY,EAAC,CAAC;MAAC,YAAY,EAAC,CAAC;MAAC,QAAQ,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,WAAW,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,qBAAqB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,eAAe,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAD,CAAC,CAAC;UAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAC,UAAS,CAAC,EAAC;YAAC,CAAC,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAC,YAAU;YAAC,CAAC,CAAC,UAAU,CAAC,KAAK,KAAG,CAAC,CAAC,YAAY,CAAC,KAAK,GAAC,CAAC,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAA,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI;QAAC,OAAO,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAE,CAAC,CAAC,EAAC;UAAC,MAAM,EAAC,CAAC,CAAC;UAAC,UAAU,EAAC,CAAC,CAAC;UAAC,qBAAqB,EAAC,CAAC,CAAC;UAAC,aAAa,EAAC,CAAC,CAAC;UAAC,cAAc,EAAC,CAAC,CAAC;QAAU,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC,qBAAqB,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,qBAAqB,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC;UAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC;QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,KAAK;UAAC,IAAG,CAAC,CAAC,UAAU,EAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,EAAC;UAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;cAAC,CAAC,GAAC,CAAC,CAAC,WAAW;cAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;YAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,YAAY,EAAC;cAAC,MAAM,EAAC,CAAC,CAAC;cAAC,qBAAqB,EAAC,CAAC,CAAC;cAAC,IAAI,EAAC,CAAC,CAAC,IAAI;cAAC,GAAG,EAAC,CAAC,CAAC,GAAG;cAAC,OAAO,EAAC,CAAC,CAAC,cAAc,CAAC,MAAM,GAAC,CAAC,CAAC,cAAc,GAAC,IAAI;cAAC,eAAe,EAAC,CAAC,CAAC,eAAe;cAAC,cAAc,EAAC,CAAC,CAAC,cAAc;cAAC,aAAa,EAAC,CAAC,CAAC;YAAa,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,KAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAC,CAAC,CAAC;UAAA;UAAC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,KAAG,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,UAAU,CAAC,EAAC,CAAC;QAAA,CAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,YAAY,EAAC,CAAC;MAAC,eAAe,EAAC,EAAE;MAAC,qBAAqB,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,cAAc,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,yBAAyB,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,kCAAkC,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,WAAW,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI;QAAC,CAAC,IAAI,CAAC,OAAO,GAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAC,UAAS,CAAC,EAAC;UAAC,CAAC,CAAC,IAAI,CAAC;YAAC,IAAI,EAAC,CAAC;YAAC,IAAI,EAAC;cAAC,OAAO,EAAC;YAAC;UAAC,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAC,UAAS,CAAC,EAAC;UAAC,CAAC,CAAC,QAAQ,GAAC,IAAI,CAAC,cAAc,GAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAC,YAAU;UAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,cAAc,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAAA,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,YAAU;QAAC,OAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAC,YAAU;QAAC,OAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAG,IAAI,CAAC,cAAc,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,yBAAyB,EAAC,EAAE;MAAC,UAAU,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,QAAQ;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI;QAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAC,UAAS,CAAC,EAAC,CAAC,EAAC;UAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAC,UAAS,CAAC,EAAC;UAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAC,YAAU;UAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAA,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,YAAU;QAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,EAAE;MAAC,iBAAiB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,OAAO,GAAC;QAAC,MAAM,EAAC,WAAW,IAAE,OAAO,MAAM;QAAC,aAAa,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,IAAG,MAAM,CAAC,IAAI,IAAE,MAAM,CAAC,IAAI,KAAG,UAAU,CAAC,IAAI,EAAC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC;UAAC,IAAG,QAAQ,IAAE,OAAO,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;UAAC,OAAO,IAAI,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC;QAAA,CAAC;QAAC,WAAW,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAG,MAAM,CAAC,KAAK,EAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,IAAI,MAAM,CAAC,CAAC,CAAC;UAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC;QAAA,CAAC;QAAC,QAAQ,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,QAAQ,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,IAAE,UAAU,IAAE,OAAO,CAAC,CAAC,EAAE,IAAE,UAAU,IAAE,OAAO,CAAC,CAAC,KAAK,IAAE,UAAU,IAAE,OAAO,CAAC,CAAC,MAAM;QAAA;MAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAE,CAAC,CAAC,EAAC,CAAC,CAAC;QAAC,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,IAAI,IAAE,IAAI,IAAI,CAAD,CAAC,EAAC,IAAI,KAAG,CAAC,CAAC,WAAW,KAAG,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,QAAQ,IAAE,OAAO,CAAC,CAAC,eAAe,KAAG,CAAC,CAAC,eAAe,GAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,eAAe,IAAE,KAAK,GAAC,CAAC,CAAC,eAAe,KAAG,CAAC,CAAC,GAAG,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,cAAc,IAAE,EAAE,GAAC,CAAC,CAAC,cAAc,KAAG,CAAC,CAAC,GAAG,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,aAAa,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,QAAQ,KAAG,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,KAAG,CAAC,CAAC,MAAM;QAAC,CAAC,IAAE,KAAK,CAAC,KAAG,CAAC,CAAC,MAAM,KAAG,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,YAAY,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,gBAAgB,IAAE,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,MAAM,MAAI,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,CAAC,WAAW,GAAC,OAAO,EAAC,CAAC,GAAC,QAAQ,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI;QAAC,CAAC,GAAC,CAAC,YAAY,CAAC,IAAE,CAAC,YAAY,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,qBAAqB,EAAC,CAAC,CAAC,MAAM,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC;MAAA;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,wBAAwB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,uBAAuB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,aAAa,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,eAAe,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,mCAAmC,CAAC;QAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC;UAAC,GAAG,KAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;UAAC,OAAO,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,EAAE;QAAA,CAAC;QAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAM,GAAG,KAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,IAAE,GAAG,CAAC,EAAC,CAAC;QAAA,CAAC;QAAC,CAAC,GAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,OAAO,CAAC,GAAC,KAAK,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,aAAa,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC;YAAC,GAAG,EAAC,CAAC,CAAC;YAAC,aAAa,EAAC;UAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAA,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,OAAM,iBAAiB,KAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;MAAA;MAAC,IAAI,CAAC,GAAC;QAAC,IAAI,EAAC,SAAA,CAAA,EAAU;UAAC,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC;QAAA,CAAC;QAAC,OAAO,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC;UAAC,KAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC,MAAM,CAAC,KAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAG,IAAI,CAAC,IAAI,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;QAAA,CAAC;QAAC,MAAM,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,EAAE;UAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;YAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC,EAAC,CAAC;QAAA,CAAC;QAAC,IAAI,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;UAAC,IAAG,CAAC,KAAG,SAAS,CAAC,MAAM,EAAC,OAAO,CAAC,GAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,IAAI;UAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC;YAAC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;cAAC,OAAM,CAAC,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAAA,CAAC,CAAC;UAAA;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC;UAAC,OAAO,CAAC,IAAE,CAAC,CAAC,CAAC,GAAG,GAAC,CAAC,GAAC,IAAI;QAAA,CAAC;QAAC,MAAM,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAG,CAAC,CAAC,EAAC,OAAO,IAAI;UAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;YAAC,OAAO,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,IAAI,GAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;YAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC;UAAC,OAAO,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC;QAAA,CAAC;QAAC,MAAM,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,CAAC,GAAC,IAAI,CAAC,IAAI,GAAC,CAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;UAAC,IAAG,CAAC,KAAG,GAAG,KAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,IAAE,GAAG,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,GAAG,EAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAI,IAAI,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;cAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,KAAG,CAAC;YAAA,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;UAAC,OAAO,IAAI;QAAA,CAAC;QAAC,QAAQ,EAAC,SAAA,CAAA,EAAU;UAAC,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC;QAAA,CAAC;QAAC,sBAAsB,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC;UAAC,IAAG;YAAC,IAAG,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAE,CAAC,CAAC,EAAC;cAAC,WAAW,EAAC,CAAC,CAAC;cAAC,WAAW,EAAC,OAAO;cAAC,kBAAkB,EAAC,IAAI;cAAC,IAAI,EAAC,EAAE;cAAC,QAAQ,EAAC,KAAK;cAAC,OAAO,EAAC,IAAI;cAAC,QAAQ,EAAC,iBAAiB;cAAC,cAAc,EAAC,CAAC,CAAC;YAAU,CAAC,CAAC,EAAE,IAAI,GAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EAAC,cAAc,KAAG,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,GAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,CAAC,IAAI,EAAC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;YAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAC,QAAQ,KAAG,CAAC,CAAC,QAAQ,IAAE,SAAS,KAAG,CAAC,CAAC,QAAQ,IAAE,OAAO,KAAG,CAAC,CAAC,QAAQ,IAAE,OAAO,KAAG,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,QAAQ,GAAC,MAAM,CAAC,EAAC,OAAO,KAAG,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,QAAQ,GAAC,KAAK,CAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,OAAO,IAAE,IAAI,CAAC,OAAO,IAAE,EAAE;YAAC,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAC,CAAC,EAAC,CAAC,CAAC;UAAA,CAAC,QAAM,CAAC,EAAC;YAAC,CAAC,CAAC,GAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;UAAA;UAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,IAAE,QAAQ,EAAC,CAAC,CAAC,QAAQ,CAAC;QAAA,CAAC;QAAC,aAAa,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,OAAO,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,kBAAkB,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,OAAM,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,EAAE,IAAI,KAAG,CAAC,CAAC,IAAI,GAAC,YAAY,CAAC,EAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAAA;MAAC,CAAC;MAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,oBAAoB,EAAC,CAAC;MAAC,YAAY,EAAC,CAAC;MAAC,YAAY,EAAC,CAAC;MAAC,mCAAmC,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,wBAAwB,EAAC,EAAE;MAAC,uBAAuB,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,aAAa,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,QAAQ,CAAC;IAAA,CAAC,EAAC;MAAC,MAAM,EAAC,KAAK;IAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,GAAG,GAAC,CAAC,CAAC,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,GAAC,UAAS,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,EAAE,CAAC,EAAC,IAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAG,CAAC,IAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,IAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,IAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC,GAAC,IAAI,CAAC,IAAI;QAAC,OAAM,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,qBAAqB,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC;QAAC,IAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC,OAAM,EAAE;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,KAAK,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,EAAE;MAAC,cAAc,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,CAAC,MAAM,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC;MAAA;MAAC,CAAC,CAAC,SAAS,GAAC;QAAC,WAAW,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAG,IAAI,CAAC,MAAM,GAAC,IAAI,CAAC,IAAI,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAC,IAAI,CAAC,MAAM,GAAC,kBAAkB,GAAC,CAAC,GAAC,oBAAoB,CAAC;QAAA,CAAC;QAAC,QAAQ,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC;QAAA,CAAC;QAAC,IAAI,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC;QAAA,CAAC;QAAC,MAAM,EAAC,SAAA,CAAA,EAAU,CAAC,CAAC;QAAC,OAAO,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC;YAAC,CAAC,GAAC,CAAC;UAAC,KAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,IAAI,CAAC,KAAK,EAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,IAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;UAAC,OAAO,IAAI,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,QAAQ,EAAC,SAAA,CAAA,EAAU,CAAC,CAAC;QAAC,oBAAoB,EAAC,SAAA,CAAA,EAAU,CAAC,CAAC;QAAC,qBAAqB,EAAC,SAAA,CAAA,EAAU,CAAC,CAAC;QAAC,QAAQ,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;UAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAE,CAAC,IAAE,EAAE,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,IAAE,EAAE,GAAC,EAAE,IAAE,CAAC,EAAC,CAAC,IAAE,EAAE,GAAC,EAAE,EAAC,CAAC,IAAE,EAAE,GAAC,EAAE,EAAC,CAAC,IAAE,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,GAAC,CAAC,KAAG,CAAC,CAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,KAAK,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,EAAE;MAAC,oBAAoB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,IAAI;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,qBAAqB,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,CAAC,KAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,KAAK,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,EAAE;MAAC,cAAc,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,eAAe,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC;QAAC,IAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,KAAK,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,EAAE;MAAC,eAAe,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,eAAe,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,gBAAgB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC;MAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAC,QAAQ,KAAG,CAAC,IAAE,CAAC,CAAC,UAAU,GAAC,YAAY,KAAG,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,UAAU,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,EAAC,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,YAAY,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,oBAAoB,EAAC,EAAE;MAAC,gBAAgB,EAAC,EAAE;MAAC,oBAAoB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,iBAAiB,GAAC,MAAM,EAAC,CAAC,CAAC,mBAAmB,GAAC,MAAM,EAAC,CAAC,CAAC,qBAAqB,GAAC,MAAM,EAAC,CAAC,CAAC,+BAA+B,GAAC,MAAM,EAAC,CAAC,CAAC,2BAA2B,GAAC,MAAM,EAAC,CAAC,CAAC,eAAe,GAAC,OAAO;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,mBAAmB,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC;MAAA;MAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAC,CAAC,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,CAAC,CAAC;QAAI,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,EAAE;MAAC,iBAAiB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;MAAC,SAAS,CAAC,CAAA,EAAE;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,YAAY,CAAC,EAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAC,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAE,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,CAAC;MAAC,UAAU,EAAC,EAAE;MAAC,iBAAiB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,sBAAsB,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,IAAG,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAE,CAAC;UAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,MAAM;QAAA;QAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,EAAE;MAAC,iBAAiB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,YAAY,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI;QAAC,IAAI,CAAC,WAAW,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,EAAC,IAAI,CAAC,IAAI,GAAC,EAAE,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,EAAC;UAAC,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,GAAG,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM,IAAE,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,cAAc,CAAC,CAAC;QAAA,CAAC,EAAC,UAAS,CAAC,EAAC;UAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAAA,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAC,YAAU;QAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAC,YAAU;QAAC,OAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAG,CAAC,IAAI,CAAC,cAAc,IAAE,IAAI,CAAC,WAAW,KAAG,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAC,EAAE,EAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,cAAc,GAAC,YAAU;QAAC,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,UAAU,KAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI,CAAC,UAAU,KAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAC,EAAE,EAAC,IAAI,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,YAAU;QAAC,IAAG,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,UAAU,EAAC,OAAM,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI;UAAC,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAC,IAAI,CAAC,KAAK,GAAC,KAAK,CAAC;QAAC,IAAG,IAAI,CAAC,KAAK,IAAE,IAAI,CAAC,GAAG,EAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAAC,QAAO,IAAI,CAAC,IAAI;UAAE,KAAI,QAAQ;YAAC,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;YAAC;UAAM,KAAI,YAAY;YAAC,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;YAAC;UAAM,KAAI,OAAO;UAAC,KAAI,YAAY;YAAC,CAAC,GAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;QAAA;QAAC,OAAO,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,CAAC;UAAC,IAAI,EAAC;YAAC,OAAO,EAAC,IAAI,CAAC,GAAG,GAAC,IAAI,CAAC,KAAK,GAAC,IAAI,CAAC,GAAG,GAAC,GAAG,GAAC;UAAC;QAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,EAAE;MAAC,iBAAiB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC,IAAI,GAAC,CAAC,IAAE,SAAS,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,IAAI,EAAC,IAAI,CAAC,eAAe,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC;UAAC,IAAI,EAAC,EAAE;UAAC,GAAG,EAAC,EAAE;UAAC,KAAK,EAAC;QAAE,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,IAAI;MAAA;MAAC,CAAC,CAAC,SAAS,GAAC;QAAC,IAAI,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAC,CAAC,CAAC;QAAA,CAAC;QAAC,GAAG,EAAC,SAAA,CAAA,EAAU;UAAC,IAAG,IAAI,CAAC,UAAU,EAAC,OAAM,CAAC,CAAC;UAAC,IAAI,CAAC,KAAK,CAAC,CAAC;UAAC,IAAG;YAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,CAAC;UAAA,CAAC,QAAM,CAAC,EAAC;YAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC;UAAA;UAAC,OAAM,CAAC,CAAC;QAAA,CAAC;QAAC,KAAK,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAM,CAAC,IAAI,CAAC,UAAU,KAAG,IAAI,CAAC,QAAQ,GAAC,IAAI,CAAC,cAAc,GAAC,CAAC,IAAE,IAAI,CAAC,UAAU,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,EAAE,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,IAAI;QAAA,CAAC;QAAC,OAAO,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,UAAU,GAAC,IAAI,CAAC,cAAc,GAAC,IAAI,CAAC,eAAe,GAAC,IAAI,EAAC,IAAI,CAAC,UAAU,GAAC,EAAE;QAAA,CAAC;QAAC,IAAI,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,IAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;QAAA,CAAC;QAAC,IAAI,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAA,CAAC;QAAC,gBAAgB,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAG,IAAI,CAAC,QAAQ,EAAC,MAAM,IAAI,KAAK,CAAC,cAAc,GAAC,IAAI,GAAC,0BAA0B,CAAC;UAAC,IAAI,CAAC,UAAU,GAAC,CAAC,CAAC,UAAU,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC;UAAC,IAAI,CAAC,GAAC,IAAI;UAAC,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAC,UAAS,CAAC,EAAC;YAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAC,YAAU;YAAC,CAAC,CAAC,GAAG,CAAC,CAAC;UAAA,CAAC,CAAC,EAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAC,UAAS,CAAC,EAAC;YAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC,EAAC,IAAI;QAAA,CAAC;QAAC,KAAK,EAAC,SAAA,CAAA,EAAU;UAAC,OAAM,CAAC,IAAI,CAAC,QAAQ,IAAE,CAAC,IAAI,CAAC,UAAU,KAAG,IAAI,CAAC,QAAQ,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,MAAM,EAAC,SAAA,CAAA,EAAU;UAAC,IAAG,CAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,UAAU,EAAC,OAAM,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,CAAC;UAAC,OAAO,IAAI,CAAC,cAAc,KAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC;QAAA,CAAC;QAAC,KAAK,EAAC,SAAA,CAAA,EAAU,CAAC,CAAC;QAAC,YAAY,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,cAAc,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAC,IAAI;QAAA,CAAC;QAAC,eAAe,EAAC,SAAA,CAAA,EAAU;UAAC,KAAI,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAC,CAAC,CAAC,KAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,IAAI,EAAC,SAAA,CAAA,EAAU;UAAC,IAAG,IAAI,CAAC,QAAQ,EAAC,MAAM,IAAI,KAAK,CAAC,cAAc,GAAC,IAAI,GAAC,0BAA0B,CAAC;UAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAA,CAAC;QAAC,QAAQ,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,GAAC,SAAS,GAAC,IAAI,CAAC,IAAI;UAAC,OAAO,IAAI,CAAC,QAAQ,GAAC,IAAI,CAAC,QAAQ,GAAC,MAAM,GAAC,CAAC,GAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,aAAa,CAAC;QAAC,CAAC,GAAC,IAAI;MAAC,IAAG,CAAC,CAAC,UAAU,EAAC,IAAG;QAAC,CAAC,GAAC,CAAC,CAAC,qCAAqC,CAAC;MAAA,CAAC,QAAM,CAAC,EAAC,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,EAAE;YAAC,CAAC,GAAC,CAAC,CAAC,aAAa;YAAC,CAAC,GAAC,CAAC,CAAC,WAAW;YAAC,CAAC,GAAC,CAAC,CAAC,SAAS;UAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAC,UAAS,CAAC,EAAC,CAAC,EAAC;YAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAC,UAAS,CAAC,EAAC;YAAC,CAAC,GAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAC,YAAU;YAAC,IAAG;cAAC,IAAI,CAAC,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;gBAAC,QAAO,CAAC;kBAAE,KAAI,MAAM;oBAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;kBAAC,KAAI,QAAQ;oBAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;kBAAC;oBAAQ,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,EAAC,CAAC,CAAC;gBAAA;cAAC,CAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC,CAAC,EAAC;gBAAC,IAAI,CAAC;kBAAC,CAAC,GAAC,CAAC;kBAAC,CAAC,GAAC,IAAI;kBAAC,CAAC,GAAC,CAAC;gBAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;gBAAC,QAAO,CAAC;kBAAE,KAAI,QAAQ;oBAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;kBAAC,KAAI,OAAO;oBAAC,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAC,CAAC,CAAC;kBAAC,KAAI,YAAY;oBAAC,KAAI,CAAC,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;oBAAC,OAAO,CAAC;kBAAC,KAAI,YAAY;oBAAC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;kBAAC;oBAAQ,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAC,CAAC,GAAC,GAAG,CAAC;gBAAA;cAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;cAAC,CAAC,CAAC,CAAC,CAAC;YAAA,CAAC,QAAM,CAAC,EAAC;cAAC,CAAC,CAAC,CAAC,CAAC;YAAA;YAAC,CAAC,GAAC,EAAE;UAAA,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAA,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC;QAAC,QAAO,CAAC;UAAE,KAAI,MAAM;UAAC,KAAI,aAAa;YAAC,CAAC,GAAC,YAAY;YAAC;UAAM,KAAI,QAAQ;YAAC,CAAC,GAAC,QAAQ;QAAA;QAAC,IAAG;UAAC,IAAI,CAAC,aAAa,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAAA,CAAC,QAAM,CAAC,EAAC;UAAC,IAAI,CAAC,OAAO,GAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAAA;MAAC;MAAC,CAAC,CAAC,SAAS,GAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC;QAAA,CAAC;QAAC,EAAE,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,IAAI;UAAC,OAAM,MAAM,KAAG,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;YAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC,IAAI,CAAC;UAAA,CAAC,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAC,YAAU;YAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,SAAS,EAAC,CAAC,CAAC;UAAA,CAAC,CAAC,EAAC,IAAI;QAAA,CAAC;QAAC,MAAM,EAAC,SAAA,CAAA,EAAU;UAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAC,EAAE,EAAC,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI;QAAA,CAAC;QAAC,KAAK,EAAC,SAAA,CAAA,EAAU;UAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI;QAAA,CAAC;QAAC,cAAc,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAG,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,EAAC,YAAY,KAAG,IAAI,CAAC,WAAW,EAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,GAAC,kCAAkC,CAAC;UAAC,OAAO,IAAI,CAAC,CAAC,IAAI,EAAC;YAAC,UAAU,EAAC,YAAY,KAAG,IAAI,CAAC;UAAW,CAAC,EAAC,CAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,WAAW,EAAC,CAAC;MAAC,aAAa,EAAC,CAAC;MAAC,qCAAqC,EAAC,EAAE;MAAC,YAAY,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,iBAAiB,EAAC,EAAE;MAAC,iBAAiB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAG,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,WAAW,IAAE,OAAO,WAAW,IAAE,WAAW,IAAE,OAAO,UAAU,EAAC,CAAC,CAAC,UAAU,GAAC,WAAW,IAAE,OAAO,MAAM,EAAC,CAAC,CAAC,UAAU,GAAC,WAAW,IAAE,OAAO,UAAU,EAAC,WAAW,IAAE,OAAO,WAAW,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,KAAI;QAAC,IAAI,CAAC,GAAC,IAAI,WAAW,CAAC,CAAC,CAAC;QAAC,IAAG;UAAC,CAAC,CAAC,IAAI,GAAC,CAAC,KAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC;YAAC,IAAI,EAAC;UAAiB,CAAC,CAAC,CAAC,IAAI;QAAA,CAAC,QAAM,CAAC,EAAC;UAAC,IAAG;YAAC,IAAI,CAAC,GAAC,KAAI,IAAI,CAAC,WAAW,IAAE,IAAI,CAAC,iBAAiB,IAAE,IAAI,CAAC,cAAc,IAAE,IAAI,CAAC,aAAa,GAAC;YAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,KAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI;UAAA,CAAC,QAAM,CAAC,EAAC;YAAC,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC;UAAA;QAAC;MAAC;MAAC,IAAG;QAAC,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,QAAQ;MAAA,CAAC,QAAM,CAAC,EAAC;QAAC,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC;MAAA;IAAC,CAAC,EAAC;MAAC,iBAAiB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,eAAe,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,wBAAwB,CAAC,EAAC,CAAC,GAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,GAAG,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC;MAAC,CAAC,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,GAAC,CAAC;MAAC,SAAS,CAAC,CAAA,EAAE;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,cAAc,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,IAAI;MAAA;MAAC,SAAS,CAAC,CAAA,EAAE;QAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAC,cAAc,CAAC;MAAA;MAAC,CAAC,CAAC,UAAU,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAC,OAAO,CAAC,GAAC,UAAS,CAAC,EAAC;UAAC,IAAI,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,MAAM;YAAC,CAAC,GAAC,CAAC;UAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,KAAK,KAAG,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,KAAK,KAAG,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,GAAC,KAAK,IAAE,CAAC,GAAC,KAAK,IAAE,EAAE,CAAC,IAAE,CAAC,GAAC,KAAK,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,GAAG,GAAC,CAAC,GAAC,CAAC,GAAC,IAAI,GAAC,CAAC,GAAC,CAAC,GAAC,KAAK,GAAC,CAAC,GAAC,CAAC;UAAC,KAAI,CAAC,GAAC,CAAC,CAAC,UAAU,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,KAAK,KAAG,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,KAAK,KAAG,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,GAAC,KAAK,IAAE,CAAC,GAAC,KAAK,IAAE,EAAE,CAAC,IAAE,CAAC,GAAC,KAAK,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,GAAC,GAAG,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,IAAI,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,KAAK,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,EAAE,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,EAAE,GAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,CAAC,GAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,EAAE,GAAC,CAAC,CAAC;UAAC,OAAO,CAAC;QAAA,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,WAAW,CAAC,YAAY,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAC,UAAS,CAAC,EAAC;UAAC,IAAI,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,MAAM;YAAC,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC;UAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAE,IAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,KAAK,IAAG,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,KAAI;YAAC,KAAI,CAAC,IAAE,CAAC,KAAG,CAAC,GAAC,EAAE,GAAC,CAAC,KAAG,CAAC,GAAC,EAAE,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAE,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,EAAE,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAE;YAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,GAAC,CAAC,GAAC,KAAK,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,IAAE,CAAC,IAAE,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,GAAC,CAAC,IAAE,EAAE,GAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,GAAC,IAAI,GAAC,CAAC,CAAC;UAAA;UAAC,OAAO,CAAC,CAAC,MAAM,KAAG,CAAC,KAAG,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,GAAC,YAAY,GAAC,OAAO,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,GAAC,YAAY,GAAC,OAAO,EAAC,CAAC,CAAC,IAAI,CAAC;QAAC,IAAG,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAC;UAAC,IAAG,CAAC,CAAC,UAAU,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC;YAAC,CAAC,CAAC,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;UAAA,CAAC,MAAK,CAAC,GAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;UAAC,IAAI,CAAC,QAAQ,GAAC,IAAI;QAAA;QAAC,IAAI,CAAC,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;YAAC,IAAI,CAAC;YAAC,KAAI,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,MAAM,KAAG,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,IAAE,GAAG,KAAG,GAAG,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,EAAE;YAAC,OAAO,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC;UAAA,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC;QAAC,CAAC,KAAG,CAAC,CAAC,MAAM,KAAG,CAAC,CAAC,UAAU,IAAE,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;UAAC,IAAI,EAAC,CAAC,CAAC;QAAI,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,YAAU;QAAC,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAG,IAAI,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;UAAC,IAAI,EAAC,CAAC;QAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,IAAI,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;UAAC,IAAI,EAAC,CAAC,CAAC;QAAI,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,eAAe,EAAC,EAAE;MAAC,wBAAwB,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,SAAS,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,eAAe,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,OAAO,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,GAAG,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA;MAAC,CAAC,CAAC,cAAc,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;QAAC,IAAG;UAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC;YAAC,IAAI,EAAC;UAAC,CAAC,CAAC;QAAA,CAAC,QAAM,CAAC,EAAC;UAAC,IAAG;YAAC,IAAI,CAAC,GAAC,KAAI,IAAI,CAAC,WAAW,IAAE,IAAI,CAAC,iBAAiB,IAAE,IAAI,CAAC,cAAc,IAAE,IAAI,CAAC,aAAa,GAAC;YAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;UAAA,CAAC,QAAM,CAAC,EAAC;YAAC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;UAAA;QAAC;MAAC,CAAC;MAAC,IAAI,CAAC,GAAC;QAAC,gBAAgB,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,EAAE;YAAC,CAAC,GAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,MAAM;UAAC,IAAG,CAAC,IAAE,CAAC,EAAC,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC;UAAC,OAAK,CAAC,GAAC,CAAC,GAAE,OAAO,KAAG,CAAC,IAAE,YAAY,KAAG,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC;UAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAA,CAAC;QAAC,eAAe,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,KAAI,IAAI,CAAC,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,IAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,OAAO,CAAC;QAAA,CAAC;QAAC,cAAc,EAAC;UAAC,UAAU,EAAC,YAAU;YAAC,IAAG;cAAC,OAAO,CAAC,CAAC,UAAU,IAAE,CAAC,KAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;YAAA,CAAC,QAAM,CAAC,EAAC;cAAC,OAAM,CAAC,CAAC;YAAA;UAAC,CAAC,CAAC,CAAC;UAAC,UAAU,EAAC,YAAU;YAAC,IAAG;cAAC,OAAO,CAAC,CAAC,UAAU,IAAE,CAAC,KAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;YAAA,CAAC,QAAM,CAAC,EAAC;cAAC,OAAM,CAAC,CAAC;YAAA;UAAC,CAAC,CAAC;QAAC;MAAC,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,KAAK;UAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC;QAAC,IAAG,YAAY,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC,UAAU,GAAC,YAAY,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAC,CAAC,EAAC,OAAK,CAAC,GAAC,CAAC,GAAE,IAAG;UAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAAA,CAAC,QAAM,CAAC,EAAC;UAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC;QAAA;QAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA;MAAC,CAAC,CAAC,iBAAiB,GAAC,CAAC;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC;MAAC,CAAC,CAAC,MAAM,GAAC;QAAC,MAAM,EAAC,CAAC;QAAC,KAAK,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAA,CAAC;QAAC,WAAW,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC;QAAC,MAAM,EAAC,CAAC;QAAC,KAAK,EAAC,CAAC;QAAC,WAAW,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC;QAAC,MAAM,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,KAAK,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,IAAI,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAAA,CAAC;QAAC,WAAW,EAAC,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC;QAAC,MAAM,EAAC,CAAC;QAAC,KAAK,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAA,CAAC;QAAC,WAAW,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,MAAM;QAAA,CAAC;QAAC,UAAU,EAAC,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC;QAAC,MAAM,EAAC,CAAC;QAAC,KAAK,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAA,CAAC;QAAC,WAAW,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAA,CAAC;QAAC,UAAU,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAG,CAAC,GAAC,CAAC,IAAE,EAAE,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC;QAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;UAAC,GAAG,KAAG,CAAC,IAAE,EAAE,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,MAAM,GAAC,CAAC,KAAG,IAAI,KAAG,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAA;QAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,UAAS,CAAC,EAAC;QAAC,OAAM,QAAQ,IAAE,OAAO,CAAC,GAAC,QAAQ,GAAC,gBAAgB,KAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,OAAO,GAAC,CAAC,CAAC,UAAU,IAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAC,YAAY,GAAC,CAAC,CAAC,UAAU,IAAE,CAAC,YAAY,UAAU,GAAC,YAAY,GAAC,CAAC,CAAC,WAAW,IAAE,CAAC,YAAY,WAAW,GAAC,aAAa,GAAC,KAAK,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,IAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,CAAC,GAAC,oCAAoC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,KAAK,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,EAAE;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,IAAE,EAAE,EAAE,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,IAAE,KAAK,IAAE,CAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAE,EAAE,GAAC,GAAG,GAAC,EAAE,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,YAAY,CAAC,YAAU;UAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAE,IAAI,EAAC,CAAC,IAAE,EAAE,CAAC;QAAA,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,SAAS,CAAC,CAAA,EAAE,CAAC;QAAC,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,SAAS,GAAC,IAAI,CAAC,CAAD,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,YAAU;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,SAAS,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,KAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,KAAK,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,GAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,cAAc,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,IAAI,KAAG,CAAC,YAAY,IAAI,IAAE,CAAC,CAAC,KAAG,CAAC,eAAe,EAAC,eAAe,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,WAAW,IAAE,OAAO,UAAU,GAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,IAAI,UAAU,CAAD,CAAC;YAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;cAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC;cAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAAA,CAAC,EAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC,GAAC,CAAC;QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;UAAC,OAAO,CAAC,IAAE,aAAa,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,YAAY,EAAC,CAAC,CAAC,GAAC,QAAQ,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,UAAS,CAAC,EAAC;YAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;UAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,GAAC,CAAC,GAAC,4EAA4E,CAAC,CAAC;QAAA,CAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC,CAAC;MAAC,YAAY,EAAC,CAAC;MAAC,eAAe,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,YAAY,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,aAAa,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC,KAAK,GAAC,EAAE,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC;MAAA;MAAC,CAAC,CAAC,SAAS,GAAC;QAAC,cAAc,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAG,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAC;YAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAE,CAAC;YAAC,IAAI,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,8CAA8C,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAC,aAAa,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAC,GAAG,CAAC;UAAA;QAAC,CAAC;QAAC,WAAW,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,KAAK;UAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAG,CAAC;UAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAC;QAAA,CAAC;QAAC,qBAAqB,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,UAAU,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,uBAAuB,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,2BAA2B,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,iBAAiB,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,gBAAgB,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,gBAAgB,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,UAAU,GAAC,YAAY,GAAC,OAAO;YAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAC,CAAC,CAAC;UAAC,IAAI,CAAC,UAAU,GAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,0BAA0B,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,qBAAqB,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,uBAAuB,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,2BAA2B,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,iBAAiB,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,gBAAgB,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,mBAAmB,GAAC,CAAC,CAAC;UAAC,KAAI,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,qBAAqB,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,GAAE,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAC;YAAC,EAAE,EAAC,CAAC;YAAC,MAAM,EAAC,CAAC;YAAC,KAAK,EAAC;UAAC,CAAC;QAAA,CAAC;QAAC,iCAAiC,EAAC,SAAA,CAAA,EAAU;UAAC,IAAG,IAAI,CAAC,4BAA4B,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,kCAAkC,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,UAAU,EAAC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;QAAA,CAAC;QAAC,cAAc,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,EAAC,CAAC;UAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAAA,CAAC;QAAC,cAAc,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC;UAAC,KAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAC,IAAI,CAAC,CAAC;YAAC,KAAK,EAAC,IAAI,CAAC;UAAK,CAAC,EAAC,IAAI,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;UAAC,IAAG,IAAI,CAAC,iBAAiB,KAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAE,CAAC,KAAG,IAAI,CAAC,iBAAiB,IAAE,CAAC,KAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAC,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAC,IAAI,CAAC,iBAAiB,GAAC,+BAA+B,GAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAAA,CAAC;QAAC,gBAAgB,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,qBAAqB,CAAC;UAAC,IAAG,CAAC,GAAC,CAAC,EAAC,MAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAC,CAAC,CAAC,iBAAiB,CAAC,GAAC,IAAI,KAAK,CAAC,yIAAyI,CAAC,GAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC;UAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,CAAC;UAAC,IAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAC,IAAI,CAAC,UAAU,KAAG,CAAC,CAAC,gBAAgB,IAAE,IAAI,CAAC,uBAAuB,KAAG,CAAC,CAAC,gBAAgB,IAAE,IAAI,CAAC,2BAA2B,KAAG,CAAC,CAAC,gBAAgB,IAAE,IAAI,CAAC,iBAAiB,KAAG,CAAC,CAAC,gBAAgB,IAAE,IAAI,CAAC,cAAc,KAAG,CAAC,CAAC,gBAAgB,IAAE,IAAI,CAAC,gBAAgB,KAAG,CAAC,CAAC,gBAAgB,EAAC;YAAC,IAAG,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,+BAA+B,CAAC,IAAE,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC;YAAC,IAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,+BAA+B,CAAC,EAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,EAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kCAAkC,EAAC,CAAC,CAAC,2BAA2B,CAAC,KAAG,IAAI,CAAC,kCAAkC,GAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,2BAA2B,CAAC,EAAC,IAAI,CAAC,kCAAkC,GAAC,CAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,2BAA2B,CAAC,EAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;UAAA;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,gBAAgB,GAAC,IAAI,CAAC,cAAc;UAAC,IAAI,CAAC,KAAK,KAAG,CAAC,IAAE,EAAE,EAAC,CAAC,IAAE,EAAE,GAAC,IAAI,CAAC,qBAAqB,CAAC;UAAC,IAAI,CAAC,GAAC,CAAC,GAAC,CAAC;UAAC,IAAG,CAAC,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAC,CAAC,CAAC,mBAAmB,CAAC,KAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,KAAK,IAAG,CAAC,GAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAC,SAAS,CAAC;QAAA,CAAC;QAAC,aAAa,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,IAAI,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,oBAAoB,EAAC,EAAE;MAAC,aAAa,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,YAAY,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,gBAAgB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,OAAO,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC;MAAA;MAAC,CAAC,CAAC,SAAS,GAAC;QAAC,WAAW,EAAC,SAAA,CAAA,EAAU;UAAC,OAAO,CAAC,KAAG,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC;QAAA,CAAC;QAAC,OAAO,EAAC,SAAA,CAAA,EAAU;UAAC,OAAO,IAAI,KAAG,IAAI,GAAC,IAAI,CAAC,OAAO,CAAC;QAAA,CAAC;QAAC,aAAa,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,EAAC,CAAC;UAAC,IAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAG,IAAI,CAAC,cAAc,IAAE,CAAC,CAAC,KAAG,IAAI,CAAC,gBAAgB,EAAC,MAAM,IAAI,KAAK,CAAC,oIAAoI,CAAC;UAAC,IAAG,IAAI,MAAI,CAAC,GAAC,UAAS,CAAC,EAAC;YAAC,KAAI,IAAI,CAAC,IAAI,CAAC,EAAC,IAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAG,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,IAAI;UAAA,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAC,yBAAyB,GAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAC,IAAI,CAAC,QAAQ,CAAC,GAAC,GAAG,CAAC;UAAC,IAAI,CAAC,YAAY,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,EAAC,IAAI,CAAC,gBAAgB,EAAC,IAAI,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAAA,CAAC;QAAC,eAAe,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,aAAa,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,iBAAiB,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,gBAAgB,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;UAAC,IAAG,IAAI,CAAC,iBAAiB,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,iBAAiB,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,eAAe,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,sBAAsB,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,sBAAsB,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,iBAAiB,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;UAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAAA,CAAC;QAAC,iBAAiB,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,eAAe,GAAC,IAAI,EAAC,IAAI,CAAC,cAAc,GAAC,IAAI;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,aAAa,IAAE,CAAC;UAAC,IAAI,CAAC,GAAG,GAAC,CAAC,EAAE,EAAE,GAAC,IAAI,CAAC,sBAAsB,CAAC,EAAC,CAAC,IAAE,CAAC,KAAG,IAAI,CAAC,cAAc,GAAC,EAAE,GAAC,IAAI,CAAC,sBAAsB,CAAC,EAAC,CAAC,IAAE,CAAC,KAAG,IAAI,CAAC,eAAe,GAAC,IAAI,CAAC,sBAAsB,IAAE,EAAE,GAAC,KAAK,CAAC,EAAC,IAAI,CAAC,GAAG,IAAE,GAAG,KAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAG,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,oBAAoB,EAAC,SAAA,CAAA,EAAU;UAAC,IAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAAC,IAAI,CAAC,gBAAgB,KAAG,CAAC,CAAC,gBAAgB,KAAG,IAAI,CAAC,gBAAgB,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,cAAc,KAAG,CAAC,CAAC,gBAAgB,KAAG,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,iBAAiB,KAAG,CAAC,CAAC,gBAAgB,KAAG,IAAI,CAAC,iBAAiB,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,eAAe,KAAG,CAAC,CAAC,gBAAgB,KAAG,IAAI,CAAC,eAAe,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;UAAA;QAAC,CAAC;QAAC,eAAe,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,KAAK,GAAC,IAAI,CAAC,iBAAiB;UAAC,KAAI,IAAI,CAAC,WAAW,KAAG,IAAI,CAAC,WAAW,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,GAAE,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAC;YAAC,EAAE,EAAC,CAAC;YAAC,MAAM,EAAC,CAAC;YAAC,KAAK,EAAC;UAAC,CAAC;UAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,GAAC,YAAY,GAAC,OAAO;UAAC,IAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAI;YAAC,IAAI,CAAC,GAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAAC,IAAG,IAAI,KAAG,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,CAAC,KAAI;cAAC,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,CAAC;cAAC,IAAI,CAAC,WAAW,GAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;YAAA;YAAC,IAAI,CAAC,GAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAAC,IAAG,IAAI,KAAG,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,KAAI;cAAC,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAC,IAAI,CAAC,WAAW,CAAC;cAAC,IAAI,CAAC,cAAc,GAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;YAAA;UAAC;QAAC,CAAC;QAAC,yBAAyB,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;UAAC,IAAG,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAAC,OAAO,CAAC,KAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAC,IAAI,GAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAC,IAAI,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC;UAAA;UAAC,OAAO,IAAI;QAAA,CAAC;QAAC,4BAA4B,EAAC,SAAA,CAAA,EAAU;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;UAAC,IAAG,CAAC,EAAC;YAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAAC,OAAO,CAAC,KAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAC,IAAI,GAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAC,IAAI,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC;UAAA;UAAC,OAAO,IAAI;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,oBAAoB,EAAC,CAAC;MAAC,gBAAgB,EAAC,CAAC;MAAC,SAAS,EAAC,CAAC;MAAC,oBAAoB,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,SAAS,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,GAAG,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,IAAI,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC,CAAC,OAAO,EAAC,IAAI,CAAC,eAAe,GAAC,CAAC,CAAC,eAAe,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,CAAC,cAAc,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,CAAC,MAAM,EAAC,IAAI,CAAC,OAAO,GAAC;UAAC,WAAW,EAAC,CAAC,CAAC,WAAW;UAAC,kBAAkB,EAAC,CAAC,CAAC;QAAkB,CAAC;MAAA;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,uBAAuB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,qBAAqB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,wBAAwB,CAAC;MAAC,CAAC,CAAC,SAAS,GAAC;QAAC,cAAc,EAAC,SAAA,CAAS,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,IAAI;YAAC,CAAC,GAAC,QAAQ;UAAC,IAAG;YAAC,IAAG,CAAC,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;YAAC,IAAI,CAAC,GAAC,QAAQ,MAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAE,MAAM,KAAG,CAAC;YAAC,cAAc,KAAG,CAAC,IAAE,MAAM,KAAG,CAAC,KAAG,CAAC,GAAC,QAAQ,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAAC,IAAI,CAAC,GAAC,CAAC,IAAI,CAAC,WAAW;YAAC,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAD,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAD,CAAC,CAAC,CAAC;UAAA,CAAC,QAAM,CAAC,EAAC;YAAC,CAAC,CAAC,GAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;UAAA;UAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAC;QAAA,CAAC;QAAC,KAAK,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,UAAU,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,IAAE,YAAY,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAAA,CAAC;QAAC,eAAe,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC;UAAC,IAAG,IAAI,CAAC,KAAK,YAAY,CAAC,IAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,KAAG,CAAC,CAAC,KAAK,EAAC,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;UAAC,OAAO,IAAI,CAAC,WAAW,KAAG,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAD,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAAA,CAAC;QAAC,iBAAiB,EAAC,SAAA,CAAA,EAAU;UAAC,OAAO,IAAI,CAAC,KAAK,YAAY,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAC,IAAI,CAAC,KAAK,YAAY,CAAC,GAAC,IAAI,CAAC,KAAK,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAA;MAAC,CAAC;MAAC,KAAI,IAAI,CAAC,GAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,cAAc,EAAC,cAAc,EAAC,eAAe,CAAC,EAAC,CAAC,GAAC,SAAA,CAAA,EAAU;UAAC,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC;QAAA,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC;MAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,oBAAoB,EAAC,CAAC;MAAC,qBAAqB,EAAC,EAAE;MAAC,wBAAwB,EAAC,EAAE;MAAC,uBAAuB,EAAC,EAAE;MAAC,QAAQ,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,CAAC,UAAS,CAAC,EAAC;QAAC,YAAY;;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,gBAAgB,IAAE,CAAC,CAAC,sBAAsB;QAAC,IAAG,CAAC,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC;YAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;UAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC;YAAC,aAAa,EAAC,CAAC;UAAC,CAAC,CAAC,EAAC,CAAC,GAAC,SAAA,CAAA,EAAU;YAAC,CAAC,CAAC,IAAI,GAAC,CAAC,GAAC,EAAE,CAAC,GAAC,CAAC;UAAA,CAAC;QAAA,CAAC,MAAK,IAAG,CAAC,CAAC,YAAY,IAAE,KAAK,CAAC,KAAG,CAAC,CAAC,cAAc,EAAC,CAAC,GAAC,UAAU,IAAG,CAAC,IAAE,oBAAoB,IAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAC,YAAU;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;UAAC,CAAC,CAAC,kBAAkB,GAAC,YAAU;YAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,kBAAkB,GAAC,IAAI,EAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI;UAAA,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;QAAA,CAAC,GAAC,YAAU;UAAC,UAAU,CAAC,CAAC,EAAC,CAAC,CAAC;QAAA,CAAC,CAAC,KAAI;UAAC,IAAI,CAAC,GAAC,IAAI,CAAC,CAAC,cAAc,CAAD,CAAC;UAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,GAAC,SAAA,CAAA,EAAU;YAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;UAAA,CAAC;QAAA;QAAC,IAAI,CAAC,GAAC,EAAE;QAAC,SAAS,CAAC,CAAA,EAAE;UAAC,IAAI,CAAC,EAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC;UAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAE;YAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC,GAAC,CAAC,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,MAAM;UAAA;UAAC,CAAC,GAAC,CAAC,CAAC;QAAA;QAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC;UAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,CAAC;QAAA,CAAC;MAAA,CAAC,EAAE,IAAI,CAAC,IAAI,EAAC,WAAW,IAAE,OAAO,MAAM,GAAC,MAAM,GAAC,WAAW,IAAE,OAAO,IAAI,GAAC,IAAI,GAAC,WAAW,IAAE,OAAO,MAAM,GAAC,MAAM,GAAC,CAAC,CAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC;MAAC,SAAS,CAAC,CAAA,EAAE,CAAC;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,WAAW,CAAC;QAAC,CAAC,GAAC,CAAC,SAAS,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAG,UAAU,IAAE,OAAO,CAAC,EAAC,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC;QAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,EAAE,EAAC,IAAI,CAAC,OAAO,GAAC,KAAK,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,OAAO,GAAC,CAAC,EAAC,UAAU,IAAE,OAAO,CAAC,KAAG,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,aAAa,GAAC,IAAI,CAAC,kBAAkB,CAAC,EAAC,UAAU,IAAE,OAAO,CAAC,KAAG,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,YAAY,GAAC,IAAI,CAAC,iBAAiB,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,YAAU;UAAC,IAAI,CAAC;UAAC,IAAG;YAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;UAAA,CAAC,QAAM,CAAC,EAAC;YAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC;UAAA;UAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC;QAAA,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,IAAI;QAAC,IAAG,CAAC,KAAG,QAAQ,IAAE,OAAO,CAAC,IAAE,UAAU,IAAE,OAAO,CAAC,CAAC,IAAE,UAAU,IAAE,OAAO,CAAC,EAAC,OAAO,YAAU;UAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,SAAS,CAAC;QAAA,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC;QAAC,SAAS,CAAC,CAAC,CAAC,EAAC;UAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAA;QAAC,SAAS,CAAC,CAAC,CAAC,EAAC;UAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAA;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,YAAU;UAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;QAAA,CAAC,CAAC;QAAC,OAAO,KAAG,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC;QAAC,IAAG;UAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,SAAS;QAAA,CAAC,QAAM,CAAC,EAAC;UAAC,CAAC,CAAC,MAAM,GAAC,OAAO,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC;QAAA;QAAC,OAAO,CAAC;MAAA;MAAC,CAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAE,SAAS,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC;QAAC,IAAG,UAAU,IAAE,OAAO,CAAC,EAAC,OAAO,IAAI;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,WAAW;QAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAU;YAAC,OAAO,CAAC;UAAA,CAAC,CAAC;QAAA,CAAC,EAAC,UAAS,CAAC,EAAC;UAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAU;YAAC,MAAM,CAAC;UAAA,CAAC,CAAC;QAAA,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAG,UAAU,IAAE,OAAO,CAAC,IAAE,IAAI,CAAC,KAAK,KAAG,CAAC,IAAE,UAAU,IAAE,OAAO,CAAC,IAAE,IAAI,CAAC,KAAK,KAAG,CAAC,EAAC,OAAO,IAAI;QAAC,IAAI,CAAC,GAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,IAAI,CAAC,OAAO,CAAC,GAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,aAAa,GAAC,UAAS,CAAC,EAAC;QAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,GAAC,UAAS,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAC,IAAI,CAAC,WAAW,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;QAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,GAAC,UAAS,CAAC,EAAC;QAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAC,IAAI,CAAC,UAAU,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;QAAC,IAAG,OAAO,KAAG,CAAC,CAAC,MAAM,EAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK;QAAC,IAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAI;UAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;UAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAC,EAAE,CAAC,GAAC,CAAC,GAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QAAA;QAAC,OAAO,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAC,EAAE,CAAC,GAAC,CAAC,GAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC;QAAC,IAAG,CAAC,YAAY,IAAI,EAAC,OAAO,CAAC;QAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,GAAG,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI;QAAC,IAAG,gBAAgB,KAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,MAAM;UAAC,CAAC,GAAC,CAAC,CAAC;QAAC,IAAG,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC;UAAC,CAAC,GAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAAC,OAAK,EAAE,CAAC,GAAC,CAAC,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;QAAC,OAAO,CAAC;QAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;UAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,EAAC;YAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,EAAE,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;UAAA,CAAC,EAAC,UAAS,CAAC,EAAC;YAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;UAAA,CAAC,CAAC;QAAA;MAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI;QAAC,IAAG,gBAAgB,KAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,MAAM;UAAC,CAAC,GAAC,CAAC,CAAC;QAAC,IAAG,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC;UAAC,CAAC,GAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAAC,OAAK,EAAE,CAAC,GAAC,CAAC,GAAE,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,EAAC;UAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAA,CAAC,EAAC,UAAS,CAAC,EAAC;UAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAA,CAAC,CAAC;QAAC,IAAI,CAAC;QAAC,OAAO,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,SAAS,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC;MAAC,CAAC,CAAC,EAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC,eAAe,CAAC,EAAC,CAAC,CAAC,eAAe,CAAC,EAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,eAAe,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,oBAAoB,EAAC,EAAE;MAAC,sBAAsB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,gBAAgB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,gBAAgB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,gBAAgB,CAAC;QAAC,CAAC,GAAC,MAAM,CAAC,SAAS,CAAC,QAAQ;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAG,EAAE,IAAI,YAAY,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,OAAO,GAAC,CAAC,CAAC,MAAM,CAAC;UAAC,KAAK,EAAC,CAAC;UAAC,MAAM,EAAC,CAAC;UAAC,SAAS,EAAC,KAAK;UAAC,UAAU,EAAC,EAAE;UAAC,QAAQ,EAAC,CAAC;UAAC,QAAQ,EAAC,CAAC;UAAC,EAAE,EAAC;QAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,OAAO;QAAC,CAAC,CAAC,GAAG,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,IAAI,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,IAAE,CAAC,CAAC,UAAU,GAAC,EAAE,KAAG,CAAC,CAAC,UAAU,IAAE,EAAE,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,EAAE,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,EAAE,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,CAAD,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAC,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,UAAU,EAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,IAAG,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,UAAU,EAAC;UAAC,IAAI,CAAC;UAAC,IAAG,CAAC,GAAC,QAAQ,IAAE,OAAO,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAC,sBAAsB,KAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAC,CAAC,CAAC,UAAU,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,MAAI,CAAC,EAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAC,IAAI,CAAC,SAAS,GAAC,CAAC,CAAC;QAAA;MAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,IAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,MAAM,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAAC,OAAO,CAAC,CAAC,MAAM;MAAA;MAAC,CAAC,CAAC,SAAS,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,IAAI;UAAC,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,SAAS;QAAC,IAAG,IAAI,CAAC,KAAK,EAAC,OAAM,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,QAAQ,IAAE,OAAO,CAAC,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAC,sBAAsB,KAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,KAAK,CAAC,MAAM;QAAC,GAAE;UAAC,IAAG,CAAC,KAAG,CAAC,CAAC,SAAS,KAAG,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,EAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,EAAE,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC;UAAC,CAAC,KAAG,CAAC,CAAC,SAAS,KAAG,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,KAAG,QAAQ,KAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAA,CAAC,QAAM,CAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,KAAG,CAAC,CAAC,SAAS,KAAG,CAAC,KAAG,CAAC;QAAE,OAAO,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,KAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,UAAS,CAAC,EAAC;QAAC,CAAC,KAAG,CAAC,KAAG,QAAQ,KAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAC,IAAI,CAAC,MAAM,GAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,MAAM,GAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,EAAE,EAAC,IAAI,CAAC,GAAG,GAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,IAAI,CAAC,IAAI,CAAC,GAAG;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAM,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,EAAE,GAAG,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAM,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,EAAE,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,gBAAgB,EAAC,EAAE;MAAC,iBAAiB,EAAC,EAAE;MAAC,gBAAgB,EAAC,EAAE;MAAC,iBAAiB,EAAC,EAAE;MAAC,gBAAgB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,gBAAgB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,gBAAgB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,kBAAkB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,gBAAgB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,MAAM,CAAC,SAAS,CAAC,QAAQ;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAG,EAAE,IAAI,YAAY,CAAC,CAAC,EAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,OAAO,GAAC,CAAC,CAAC,MAAM,CAAC;UAAC,SAAS,EAAC,KAAK;UAAC,UAAU,EAAC,CAAC;UAAC,EAAE,EAAC;QAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,OAAO;QAAC,CAAC,CAAC,GAAG,IAAE,CAAC,IAAE,CAAC,CAAC,UAAU,IAAE,CAAC,CAAC,UAAU,GAAC,EAAE,KAAG,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,CAAC,UAAU,EAAC,CAAC,KAAG,CAAC,CAAC,UAAU,KAAG,CAAC,CAAC,UAAU,GAAC,CAAC,EAAE,CAAC,CAAC,EAAC,EAAE,CAAC,IAAE,CAAC,CAAC,UAAU,IAAE,CAAC,CAAC,UAAU,GAAC,EAAE,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,UAAU,KAAG,CAAC,CAAC,UAAU,IAAE,EAAE,CAAC,EAAC,EAAE,GAAC,CAAC,CAAC,UAAU,IAAE,CAAC,CAAC,UAAU,GAAC,EAAE,IAAE,CAAC,KAAG,EAAE,GAAC,CAAC,CAAC,UAAU,CAAC,KAAG,CAAC,CAAC,UAAU,IAAE,EAAE,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,EAAE,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,EAAE,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,CAAD,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAC,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,UAAU,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,CAAC,IAAI,EAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,MAAM,GAAC,IAAI,CAAC,CAAD,CAAC,EAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAC,IAAI,CAAC,MAAM,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,IAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAC,MAAM,CAAC,CAAC,GAAG,IAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAAC,OAAO,CAAC,CAAC,MAAM;MAAA;MAAC,CAAC,CAAC,SAAS,CAAC,IAAI,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,IAAI;UAAC,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,SAAS;UAAC,CAAC,GAAC,IAAI,CAAC,OAAO,CAAC,UAAU;UAAC,CAAC,GAAC,CAAC,CAAC;QAAC,IAAG,IAAI,CAAC,KAAK,EAAC,OAAM,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,UAAU,EAAC,QAAQ,IAAE,OAAO,CAAC,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAC,sBAAsB,KAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,KAAK,CAAC,MAAM;QAAC,GAAE;UAAC,IAAG,CAAC,KAAG,CAAC,CAAC,SAAS,KAAG,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,UAAU,CAAC,MAAI,CAAC,CAAC,WAAW,IAAE,CAAC,KAAG,CAAC,GAAC,QAAQ,IAAE,OAAO,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAC,sBAAsB,KAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,WAAW,IAAE,CAAC,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,YAAY,IAAE,CAAC,KAAG,CAAC,CAAC,IAAI,EAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,EAAE,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC;UAAC,CAAC,CAAC,QAAQ,KAAG,CAAC,KAAG,CAAC,CAAC,SAAS,IAAE,CAAC,KAAG,CAAC,CAAC,YAAY,KAAG,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,KAAG,CAAC,CAAC,YAAY,CAAC,KAAG,QAAQ,KAAG,IAAI,CAAC,OAAO,CAAC,EAAE,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,KAAG,CAAC,CAAC,SAAS,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC;QAAA,CAAC,QAAM,CAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,KAAG,CAAC,CAAC,SAAS,KAAG,CAAC,KAAG,CAAC,CAAC,YAAY;QAAE,OAAO,CAAC,KAAG,CAAC,CAAC,YAAY,KAAG,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,IAAE,CAAC,KAAG,CAAC,CAAC,YAAY,KAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAC,EAAE,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAC,UAAS,CAAC,EAAC;QAAC,CAAC,KAAG,CAAC,CAAC,IAAI,KAAG,QAAQ,KAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAC,IAAI,CAAC,MAAM,GAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,MAAM,GAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,EAAE,EAAC,IAAI,CAAC,GAAG,GAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,IAAI,CAAC,IAAI,CAAC,GAAG;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAM,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,EAAE,GAAG,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC;IAAA,CAAC,EAAC;MAAC,gBAAgB,EAAC,EAAE;MAAC,iBAAiB,EAAC,EAAE;MAAC,kBAAkB,EAAC,EAAE;MAAC,iBAAiB,EAAC,EAAE;MAAC,gBAAgB,EAAC,EAAE;MAAC,iBAAiB,EAAC,EAAE;MAAC,gBAAgB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,WAAW,IAAE,OAAO,UAAU,IAAE,WAAW,IAAE,OAAO,WAAW,IAAE,WAAW,IAAE,OAAO,UAAU;MAAC,CAAC,CAAC,MAAM,GAAC,UAAS,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAE;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC;UAAC,IAAG,CAAC,EAAC;YAAC,IAAG,QAAQ,IAAE,OAAO,CAAC,EAAC,MAAM,IAAI,SAAS,CAAC,CAAC,GAAC,oBAAoB,CAAC;YAAC,KAAI,IAAI,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAA;QAAC;QAAC,OAAO,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,MAAM,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC;MAAC,IAAI,CAAC,GAAC;UAAC,QAAQ,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;YAAC,IAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,QAAQ,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAK,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;UAAA,CAAC;UAAC,aAAa,EAAC,SAAA,CAAS,CAAC,EAAC;YAAC,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC;YAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;YAAC,KAAI,CAAC,GAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,MAAM;YAAC,OAAO,CAAC;UAAA;QAAC,CAAC;QAAC,CAAC,GAAC;UAAC,QAAQ,EAAC,SAAA,CAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;YAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;UAAA,CAAC;UAAC,aAAa,EAAC,SAAA,CAAS,CAAC,EAAC;YAAC,OAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAC,CAAC,CAAC;UAAA;QAAC,CAAC;MAAC,CAAC,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC;QAAC,CAAC,IAAE,CAAC,CAAC,IAAI,GAAC,UAAU,EAAC,CAAC,CAAC,KAAK,GAAC,WAAW,EAAC,CAAC,CAAC,KAAK,GAAC,UAAU,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,KAAG,CAAC,CAAC,IAAI,GAAC,KAAK,EAAC,CAAC,CAAC,KAAK,GAAC,KAAK,EAAC,CAAC,CAAC,KAAK,GAAC,KAAK,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC;MAAC,IAAG;QAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,QAAM,CAAC,EAAC;QAAC,CAAC,GAAC,CAAC,CAAC;MAAA;MAAC,IAAG;QAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,QAAM,CAAC,EAAC;QAAC,CAAC,GAAC,CAAC,CAAC;MAAA;MAAC,KAAI,IAAI,CAAC,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,GAAG,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAG,CAAC,GAAC,KAAK,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,IAAE,CAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,EAAC,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAC,KAAI,IAAI,CAAC,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,IAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA;MAAC,CAAC,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM;UAAC,CAAC,GAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,KAAK,KAAG,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,KAAK,KAAG,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,GAAC,KAAK,IAAE,CAAC,GAAC,KAAK,IAAE,EAAE,CAAC,IAAE,CAAC,GAAC,KAAK,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,GAAG,GAAC,CAAC,GAAC,CAAC,GAAC,IAAI,GAAC,CAAC,GAAC,CAAC,GAAC,KAAK,GAAC,CAAC,GAAC,CAAC;QAAC,KAAI,CAAC,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,KAAK,KAAG,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,KAAK,KAAG,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,GAAC,KAAK,IAAE,CAAC,GAAC,KAAK,IAAE,EAAE,CAAC,IAAE,CAAC,GAAC,KAAK,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,GAAC,GAAG,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,IAAI,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,KAAK,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,EAAE,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,EAAE,GAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,KAAG,CAAC,GAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,GAAG,GAAC,EAAE,GAAC,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,aAAa,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,aAAa,GAAC,UAAS,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM;UAAC,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAE,IAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,KAAK,IAAG,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,KAAI;UAAC,KAAI,CAAC,IAAE,CAAC,KAAG,CAAC,GAAC,EAAE,GAAC,CAAC,KAAG,CAAC,GAAC,EAAE,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAE,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,EAAE,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,EAAE;UAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,GAAC,CAAC,GAAC,KAAK,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,IAAE,CAAC,IAAE,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,GAAC,CAAC,IAAE,EAAE,GAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,GAAC,IAAI,GAAC,CAAC,CAAC;QAAA;QAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;QAAC,KAAI,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,MAAM,KAAG,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,IAAE,GAAG,KAAG,GAAG,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,EAAE;QAAC,OAAO,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,UAAU,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,KAAK,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,KAAG,EAAE,GAAC,KAAK,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,GAAE;UAAC,KAAI,CAAC,IAAE,CAAC,GAAC,GAAG,GAAC,CAAC,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,EAAE,CAAC,EAAE;UAAC,CAAC,IAAE,KAAK,EAAC,CAAC,IAAE,KAAK;QAAA;QAAC,OAAO,CAAC,GAAC,CAAC,IAAE,EAAE,GAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,OAAO,GAAC;QAAC,UAAU,EAAC,CAAC;QAAC,eAAe,EAAC,CAAC;QAAC,YAAY,EAAC,CAAC;QAAC,YAAY,EAAC,CAAC;QAAC,QAAQ,EAAC,CAAC;QAAC,OAAO,EAAC,CAAC;QAAC,OAAO,EAAC,CAAC;QAAC,IAAI,EAAC,CAAC;QAAC,YAAY,EAAC,CAAC;QAAC,WAAW,EAAC,CAAC;QAAC,OAAO,EAAC,CAAC,CAAC;QAAC,cAAc,EAAC,CAAC,CAAC;QAAC,YAAY,EAAC,CAAC,CAAC;QAAC,WAAW,EAAC,CAAC,CAAC;QAAC,gBAAgB,EAAC,CAAC;QAAC,YAAY,EAAC,CAAC;QAAC,kBAAkB,EAAC,CAAC;QAAC,qBAAqB,EAAC,CAAC,CAAC;QAAC,UAAU,EAAC,CAAC;QAAC,cAAc,EAAC,CAAC;QAAC,KAAK,EAAC,CAAC;QAAC,OAAO,EAAC,CAAC;QAAC,kBAAkB,EAAC,CAAC;QAAC,QAAQ,EAAC,CAAC;QAAC,MAAM,EAAC,CAAC;QAAC,SAAS,EAAC,CAAC;QAAC,UAAU,EAAC;MAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,YAAU;QAAC,KAAI,IAAI,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,GAAG,EAAC,CAAC,EAAE,EAAC;UAAC,CAAC,GAAC,CAAC;UAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,UAAU,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,KAAG,CAAC;UAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC;QAAA;QAAC,OAAO,CAAC;MAAA,CAAC,CAAC,CAAC;MAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC,GAAC,CAAC;QAAC,CAAC,IAAE,CAAC,CAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,GAAG,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAM,CAAC,CAAC,GAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,GAAG;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,GAAG;QAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,GAAG;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,GAAG,GAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,OAAM,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,IAAE,EAAE,CAAC,GAAE,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK;UAAC,CAAC,GAAC,CAAC,CAAC,OAAO;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,KAAG,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,EAAC,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,EAAC,CAAC,CAAC,WAAW,IAAE,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,EAAC,CAAC,CAAC,OAAO,IAAE,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,OAAO,KAAG,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,GAAG,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,gBAAgB;UAAC,CAAC,GAAC,CAAC,CAAC,QAAQ;UAAC,CAAC,GAAC,CAAC,CAAC,WAAW;UAAC,CAAC,GAAC,CAAC,CAAC,UAAU;UAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,MAAM,GAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM;UAAC,CAAC,GAAC,CAAC,CAAC,IAAI;UAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;QAAC,CAAC,CAAC,WAAW,IAAE,CAAC,CAAC,UAAU,KAAG,CAAC,KAAG,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,SAAS,KAAG,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,GAAE;UAAC,IAAG,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC;YAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAE;YAAC,GAAE,CAAC,CAAC,QAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC;YAAE,IAAG,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC;cAAC,IAAG,CAAC,CAAC,WAAW,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC;cAAM,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;YAAA;UAAC;QAAC,CAAC,QAAM,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,IAAE,EAAE,CAAC;QAAE,OAAO,CAAC,IAAE,CAAC,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,CAAC,SAAS;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM;QAAC,GAAE;UAAC,IAAG,CAAC,GAAC,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC;YAAC,KAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,WAAW,IAAE,CAAC,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,EAAC,CAAC,CAAC,WAAW,IAAE,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,EAAE,CAAC,EAAE;YAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,EAAE,CAAC,EAAE;YAAC,CAAC,IAAE,CAAC;UAAA;UAAC,IAAG,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAC;UAAM,IAAG,CAAC,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,KAAK,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,IAAE,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,KAAK,CAAC,IAAI,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,IAAE,CAAC,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,MAAM,IAAE,CAAC,EAAC,KAAI,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,MAAM,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,MAAM,EAAE,EAAC,EAAE,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC,EAAE;QAAC,CAAC,QAAM,CAAC,CAAC,SAAS,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,QAAQ;MAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,EAAC,CAAC,IAAG;UAAC,IAAG,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC;YAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC;YAAC,IAAG,CAAC,KAAG,CAAC,CAAC,SAAS,EAAC;UAAK;UAAC,IAAG,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,QAAQ,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM,GAAC,CAAC,KAAG,CAAC,CAAC,YAAY,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,YAAY,IAAE,CAAC;YAAC,IAAG,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,CAAC,YAAY,EAAC,CAAC,CAAC,YAAY,IAAE,CAAC,CAAC,cAAc,IAAE,CAAC,CAAC,SAAS,IAAE,CAAC,EAAC;cAAC,KAAI,CAAC,CAAC,YAAY,EAAE,EAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,IAAE,EAAE,CAAC,CAAC,YAAY,EAAE;cAAC,CAAC,CAAC,QAAQ,EAAE;YAAA,CAAC,MAAK,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,YAAY,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,SAAS;UAAC,OAAK,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAE,EAAC,CAAC,CAAC,QAAQ,EAAE;UAAC,IAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,CAAC;QAAA;QAAC,OAAO,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAC,CAAC,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,IAAG;UAAC,IAAG,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC;YAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC;YAAC,IAAG,CAAC,KAAG,CAAC,CAAC,SAAS,EAAC;UAAK;UAAC,IAAG,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,YAAY,EAAC,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,cAAc,IAAE,CAAC,CAAC,QAAQ,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM,GAAC,CAAC,KAAG,CAAC,CAAC,YAAY,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,YAAY,IAAE,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,YAAY,KAAG,CAAC,IAAE,IAAI,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,WAAW,CAAC,KAAG,CAAC,CAAC,YAAY,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,WAAW,IAAE,CAAC,IAAE,CAAC,CAAC,YAAY,IAAE,CAAC,CAAC,WAAW,EAAC;YAAC,KAAI,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,CAAC,UAAU,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,CAAC,WAAW,GAAC,CAAC,EAAC,CAAC,CAAC,WAAW,IAAE,CAAC,EAAC,EAAE,CAAC,CAAC,QAAQ,IAAE,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,IAAE,EAAE,CAAC,CAAC,WAAW,EAAE;YAAC,IAAG,CAAC,CAAC,eAAe,GAAC,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,CAAC;UAAA,CAAC,MAAK,IAAG,CAAC,CAAC,eAAe,EAAC;YAAC,IAAG,CAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC,SAAS,EAAE,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAC,OAAO,CAAC;UAAA,CAAC,MAAK,CAAC,CAAC,eAAe,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC,SAAS,EAAE;QAAA;QAAC,OAAO,CAAC,CAAC,eAAe,KAAG,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,eAAe,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAC,CAAC,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAA,EAAE;QAAC,IAAI,CAAC,IAAI,GAAC,IAAI,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,IAAI,EAAC,IAAI,CAAC,gBAAgB,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,IAAI,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,IAAI,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,YAAY,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,eAAe,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,gBAAgB,GAAC,CAAC,EAAC,IAAI,CAAC,cAAc,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,OAAO,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,IAAI,EAAC,IAAI,CAAC,MAAM,GAAC,IAAI,EAAC,IAAI,CAAC,OAAO,GAAC,IAAI,EAAC,IAAI,CAAC,QAAQ,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC;QAAC,OAAO,CAAC,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAE,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,KAAG,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,IAAI,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,KAAG,CAAC,CAAC,IAAI,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,KAAG,CAAC,IAAE,UAAS,CAAC,EAAC;UAAC,CAAC,CAAC,WAAW,GAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,cAAc,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAC,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,CAAC,WAAW,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,eAAe,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC;QAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAG,CAAC,CAAC,EAAC,OAAO,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,IAAE,EAAE,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,EAAE,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,IAAE,EAAE,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;QAAC,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAC,IAAI,CAAC,CAAD,CAAC;QAAC,OAAM,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAE,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,IAAI,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,GAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,WAAW,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;MAAA;MAAC,CAAC,GAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,KAAK;QAAC,KAAI,CAAC,GAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,CAAC,IAAG;UAAC,IAAG,CAAC,CAAC,SAAS,IAAE,CAAC,EAAC;YAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,SAAS,IAAE,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC;YAAC,IAAG,CAAC,KAAG,CAAC,CAAC,SAAS,EAAC;UAAK;UAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,GAAC,CAAC;UAAC,IAAG,CAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,QAAQ,IAAE,CAAC,MAAI,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,CAAC;UAAC,IAAG,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,WAAW,IAAE,CAAC,CAAC,MAAM,GAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,CAAC;QAAA;QAAC,OAAO,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,WAAW,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,CAAC,IAAE,CAAC,CAAC,KAAK,GAAC,CAAC,KAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAC,CAAC,IAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC;QAAC,IAAG,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,OAAO,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC;QAAC,IAAG,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,GAAG,KAAG,CAAC,CAAC,MAAM,IAAE,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC;QAAC,IAAG,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,UAAU,EAAC,CAAC,CAAC,UAAU,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,KAAG,CAAC,EAAC,IAAG,CAAC,KAAG,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,MAAM,CAAC,IAAI,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,MAAM,CAAC,IAAI,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,MAAM,CAAC,OAAO,GAAC,EAAE,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,CAAC,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,EAAE,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,EAAE,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAG,CAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAE,CAAC,GAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,EAAE,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC,KAAI;UAAC,IAAI,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM,GAAC,CAAC,IAAE,CAAC,CAAC,IAAE,CAAC;UAAC,CAAC,IAAE,CAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,KAAG,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,KAAG,CAAC,IAAE,EAAE,CAAC,EAAC,CAAC,IAAE,EAAE,GAAC,CAAC,GAAC,EAAE,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,KAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,KAAK,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC;QAAA;QAAC,IAAG,EAAE,KAAG,CAAC,CAAC,MAAM,EAAC,IAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAC;UAAC,KAAI,CAAC,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC,OAAO,IAAE,KAAK,GAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAG,CAAC,CAAC,OAAO,KAAG,CAAC,CAAC,gBAAgB,KAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,CAAC,CAAC,OAAO,GAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC,OAAO,KAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,EAAE;UAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,CAAC,CAAC,OAAO,GAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,KAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAG,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,EAAE,CAAC;QAAA,CAAC,MAAK,CAAC,CAAC,MAAM,GAAC,EAAE;QAAC,IAAG,EAAE,KAAG,CAAC,CAAC,MAAM,EAAC,IAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAC;UAAC,CAAC,GAAC,CAAC,CAAC,OAAO;UAAC,GAAE;YAAC,IAAG,CAAC,CAAC,OAAO,KAAG,CAAC,CAAC,gBAAgB,KAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,CAAC,CAAC,OAAO,GAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC,OAAO,KAAG,CAAC,CAAC,gBAAgB,CAAC,EAAC;cAAC,CAAC,GAAC,CAAC;cAAC;YAAK;YAAC,CAAC,GAAC,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAC,GAAG,GAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;UAAA,CAAC,QAAM,CAAC,KAAG,CAAC;UAAE,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,CAAC,CAAC,OAAO,GAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,EAAE,CAAC;QAAA,CAAC,MAAK,CAAC,CAAC,MAAM,GAAC,EAAE;QAAC,IAAG,EAAE,KAAG,CAAC,CAAC,MAAM,EAAC,IAAG,CAAC,CAAC,MAAM,CAAC,OAAO,EAAC;UAAC,CAAC,GAAC,CAAC,CAAC,OAAO;UAAC,GAAE;YAAC,IAAG,CAAC,CAAC,OAAO,KAAG,CAAC,CAAC,gBAAgB,KAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,CAAC,CAAC,OAAO,GAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC,OAAO,KAAG,CAAC,CAAC,gBAAgB,CAAC,EAAC;cAAC,CAAC,GAAC,CAAC;cAAC;YAAK;YAAC,CAAC,GAAC,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAC,GAAG,GAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;UAAA,CAAC,QAAM,CAAC,KAAG,CAAC;UAAE,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,CAAC,CAAC,OAAO,GAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,MAAM,GAAC,GAAG,CAAC;QAAA,CAAC,MAAK,CAAC,CAAC,MAAM,GAAC,GAAG;QAAC,IAAG,GAAG,KAAG,CAAC,CAAC,MAAM,KAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAE,CAAC,CAAC,OAAO,GAAC,CAAC,GAAC,CAAC,CAAC,gBAAgB,IAAE,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,IAAE,CAAC,CAAC,gBAAgB,KAAG,CAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,IAAE,CAAC,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,OAAO,EAAC;UAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,SAAS,EAAC,OAAO,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,EAAC,CAAC;QAAA,CAAC,MAAK,IAAG,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAC,IAAG,GAAG,KAAG,CAAC,CAAC,MAAM,IAAE,CAAC,KAAG,CAAC,CAAC,QAAQ,EAAC,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,KAAG,CAAC,CAAC,SAAS,IAAE,CAAC,KAAG,CAAC,IAAE,GAAG,KAAG,CAAC,CAAC,MAAM,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;YAAC,KAAI,IAAI,CAAC,IAAG;cAAC,IAAG,CAAC,KAAG,CAAC,CAAC,SAAS,KAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,SAAS,CAAC,EAAC;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC;gBAAC;cAAK;cAAC,IAAG,CAAC,CAAC,YAAY,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAE,EAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,CAAC;YAAA;YAAC,OAAO,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAC,CAAC,GAAC,CAAC;UAAA,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;YAAC,KAAI,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,IAAG;cAAC,IAAG,CAAC,CAAC,SAAS,IAAE,CAAC,EAAC;gBAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,IAAE,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC;gBAAC,IAAG,CAAC,KAAG,CAAC,CAAC,SAAS,EAAC;cAAK;cAAC,IAAG,CAAC,CAAC,YAAY,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,MAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;gBAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC;gBAAC,GAAE,CAAC,CAAC,QAAM,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC;gBAAE,CAAC,CAAC,YAAY,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,CAAC,SAAS,KAAG,CAAC,CAAC,YAAY,GAAC,CAAC,CAAC,SAAS,CAAC;cAAA;cAAC,IAAG,CAAC,CAAC,YAAY,IAAE,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,CAAC,YAAY,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,YAAY,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAE,EAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,CAAC;YAAA;YAAC,OAAO,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAC,CAAC,GAAC,CAAC;UAAA,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC;UAAC,IAAG,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,MAAM,GAAC,GAAG,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC,KAAG,CAAC,CAAC,SAAS,KAAG,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC;UAAC,IAAG,CAAC,KAAG,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,SAAS,KAAG,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,SAAS,CAAC,EAAC,OAAO,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,EAAC,CAAC;QAAA;QAAC,OAAO,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,IAAI,IAAE,CAAC,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,IAAI,IAAE,CAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,IAAE,CAAC,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,IAAE,EAAE,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,IAAE,EAAE,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,IAAE,EAAE,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,IAAE,EAAE,GAAC,GAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,KAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,KAAK,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,OAAO,GAAC,CAAC,GAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,UAAS,CAAC,EAAC;QAAC,IAAI,CAAC;QAAC,OAAO,CAAC,IAAE,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,MAAM,MAAI,CAAC,IAAE,EAAE,KAAG,CAAC,IAAE,EAAE,KAAG,CAAC,IAAE,EAAE,KAAG,CAAC,IAAE,GAAG,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,GAAG,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,CAAC,KAAK,GAAC,IAAI,EAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,oBAAoB,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM;QAAC,IAAG,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,KAAK,EAAC,OAAO,CAAC;QAAC,IAAG,CAAC,MAAI,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,MAAM,KAAG,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,OAAO,CAAC;QAAC,KAAI,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,MAAM,KAAG,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,GAAE;UAAC,KAAI,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,CAAC,SAAS,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,UAAU,GAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,CAAC,EAAE;UAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;QAAA;QAAC,OAAO,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,WAAW,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,CAAC,WAAW,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,eAAe,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,oCAAoC;IAAA,CAAC,EAAC;MAAC,iBAAiB,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,YAAY,EAAC,EAAE;MAAC,SAAS,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,OAAO,GAAC,YAAU;QAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,EAAE,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,IAAI,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,EAAE,EAAC,IAAI,CAAC,OAAO,GAAC,EAAE,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,SAAS,GAAC,GAAG,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,OAAO,IAAE,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,IAAE,CAAC;QAAC,CAAC,EAAC,GAAE;UAAC,CAAC,GAAC,EAAE,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;UAAC,CAAC,EAAC,SAAO;YAAC,IAAG,CAAC,MAAI,CAAC,GAAC,CAAC,KAAG,EAAE,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,MAAI,CAAC,GAAC,CAAC,KAAG,EAAE,GAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,GAAC,CAAC,CAAC,KAAI;cAAC,IAAG,EAAE,EAAE,GAAC,CAAC,CAAC,EAAC;gBAAC,IAAG,CAAC,KAAG,EAAE,GAAC,CAAC,CAAC,EAAC;kBAAC,CAAC,GAAC,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,CAAC;kBAAC,SAAS,CAAC;gBAAA;gBAAC,IAAG,EAAE,GAAC,CAAC,EAAC;kBAAC,CAAC,CAAC,IAAI,GAAC,EAAE;kBAAC,MAAM,CAAC;gBAAA;gBAAC,CAAC,CAAC,GAAG,GAAC,6BAA6B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;gBAAC,MAAM,CAAC;cAAA;cAAC,CAAC,GAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,IAAE,EAAE,MAAI,CAAC,GAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,EAAC,CAAC,GAAC,EAAE,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;cAAC,CAAC,EAAC,SAAO;gBAAC,IAAG,CAAC,MAAI,CAAC,GAAC,CAAC,KAAG,EAAE,EAAC,CAAC,IAAE,CAAC,EAAC,EAAE,EAAE,IAAE,CAAC,GAAC,CAAC,KAAG,EAAE,GAAC,GAAG,CAAC,CAAC,EAAC;kBAAC,IAAG,CAAC,KAAG,EAAE,GAAC,CAAC,CAAC,EAAC;oBAAC,CAAC,GAAC,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,CAAC;oBAAC,SAAS,CAAC;kBAAA;kBAAC,CAAC,CAAC,GAAG,GAAC,uBAAuB,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;kBAAC,MAAM,CAAC;gBAAA;gBAAC,IAAG,CAAC,GAAC,KAAK,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,IAAE,EAAE,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,EAAC;kBAAC,CAAC,CAAC,GAAG,GAAC,+BAA+B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;kBAAC,MAAM,CAAC;gBAAA;gBAAC,IAAG,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,EAAC;kBAAC,IAAG,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,IAAI,EAAC;oBAAC,CAAC,CAAC,GAAG,GAAC,+BAA+B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;oBAAC,MAAM,CAAC;kBAAA;kBAAC,IAAG,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,MAAI,CAAC,EAAC;oBAAC,IAAG,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC;sBAAC,KAAI,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,EAAE,CAAC,EAAE;sBAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC;oBAAA;kBAAC,CAAC,MAAK,IAAG,CAAC,GAAC,CAAC,EAAC;oBAAC,IAAG,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,EAAC;sBAAC,KAAI,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,EAAE,CAAC,EAAE;sBAAC,IAAG,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC;wBAAC,KAAI,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,EAAE,CAAC,EAAE;wBAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC;sBAAA;oBAAC;kBAAC,CAAC,MAAK,IAAG,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC;oBAAC,KAAI,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,EAAE,CAAC,EAAE;oBAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC;kBAAA;kBAAC,OAAK,CAAC,GAAC,CAAC,GAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,IAAE,CAAC;kBAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAAA,CAAC,MAAI;kBAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,EAAE;kBAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAAA;gBAAC;cAAK;YAAC;YAAC;UAAK;QAAC,CAAC,QAAM,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC;QAAE,CAAC,IAAE,CAAC,GAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,GAAG,GAAC,GAAG,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,GAAG;QAAC,CAAC,GAAC,GAAG;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,OAAM,CAAC,CAAC,KAAG,EAAE,GAAC,GAAG,KAAG,CAAC,KAAG,CAAC,GAAC,KAAK,CAAC,IAAE,CAAC,KAAK,GAAC,CAAC,KAAG,CAAC,CAAC,IAAE,CAAC,GAAG,GAAC,CAAC,KAAG,EAAE,CAAC;MAAA;MAAC,SAAS,CAAC,CAAA,EAAE;QAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,IAAI,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,OAAO,GAAC,IAAI,EAAC,IAAI,CAAC,QAAQ,GAAC,IAAI,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,IAAI,EAAC,IAAI,CAAC,OAAO,GAAC,IAAI,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC;QAAC,OAAO,CAAC,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,GAAG,GAAC,EAAE,EAAC,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,KAAK,EAAC,CAAC,CAAC,IAAI,GAAC,IAAI,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,OAAO,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC;QAAC,OAAO,CAAC,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAE,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,EAAC,CAAC;QAAC,OAAO,CAAC,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,GAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,EAAC,CAAC,GAAC,EAAE,KAAG,CAAC,IAAE,EAAE,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,GAAC,CAAC,IAAE,EAAE,GAAC,CAAC,CAAC,GAAC,CAAC,IAAE,IAAI,KAAG,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,KAAK,KAAG,CAAC,KAAG,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,EAAC,CAAC;QAAC,OAAO,CAAC,IAAE,CAAC,GAAC,IAAI,CAAC,CAAD,CAAC,EAAC,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAE,MAAM,GAAC,IAAI,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAI,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,IAAI,CAAC,EAAC,CAAC,IAAE,CAAC;MAAA;MAAC,IAAI,CAAC;QAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAG,CAAC,EAAC;UAAC,IAAI,CAAC;UAAC,KAAI,CAAC,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,GAAG,GAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC;UAAC,OAAK,CAAC,GAAC,GAAG,GAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC;UAAC,OAAK,CAAC,GAAC,GAAG,GAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC;UAAC,OAAK,CAAC,GAAC,GAAG,GAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC;UAAC,KAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC;YAAC,IAAI,EAAC;UAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,GAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC;UAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC;YAAC,IAAI,EAAC;UAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC;QAAA;QAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,KAAK;QAAC,OAAO,IAAI,KAAG,CAAC,CAAC,MAAM,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,IAAE,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC;MAAA;MAAC,CAAC,CAAC,YAAY,GAAC,CAAC,EAAC,CAAC,CAAC,aAAa,GAAC,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,UAAS,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,CAAC;QAAC,IAAG,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,KAAG,CAAC,CAAC,QAAQ,EAAC,OAAO,CAAC;QAAC,EAAE,KAAG,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAE,IAAI,KAAG,CAAC,CAAC,IAAI,GAAC,EAAE,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC;QAAC,CAAC,EAAC,SAAO,QAAO,CAAC,CAAC,IAAI;UAAE,KAAK,CAAC;YAAC,IAAG,CAAC,KAAG,CAAC,CAAC,IAAI,EAAC;cAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,OAAK,CAAC,GAAC,EAAE,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,IAAG,CAAC,GAAC,CAAC,CAAC,IAAI,IAAE,KAAK,KAAG,CAAC,EAAC;cAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,GAAG,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC;cAAC;YAAK;YAAC,IAAG,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,IAAE,CAAC,CAAC,CAAC,GAAG,GAAC,CAAC,KAAG,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,IAAE,EAAE,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,wBAAwB,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,IAAG,CAAC,KAAG,EAAE,GAAC,CAAC,CAAC,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,4BAA4B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,IAAG,CAAC,IAAE,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,EAAE,IAAE,CAAC,MAAI,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,IAAG,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,qBAAqB,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,CAAC,CAAC,IAAI,GAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,GAAG,GAAC,CAAC,GAAC,EAAE,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC;YAAC;UAAM,KAAK,CAAC;YAAC,OAAK,CAAC,GAAC,EAAE,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,IAAG,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,KAAG,GAAG,GAAC,CAAC,CAAC,KAAK,CAAC,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,4BAA4B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,IAAG,KAAK,GAAC,CAAC,CAAC,KAAK,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,0BAA0B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,CAAC,CAAC,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,GAAG,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC;UAAC,KAAK,CAAC;YAAC,OAAK,CAAC,GAAC,EAAE,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,CAAC,CAAC,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,GAAG,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,KAAG,EAAE,GAAC,GAAG,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,KAAG,EAAE,GAAC,GAAG,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC;UAAC,KAAK,CAAC;YAAC,OAAK,CAAC,GAAC,EAAE,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAC,CAAC,IAAE,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,CAAC,CAAC,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,GAAG,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC;UAAC,KAAK,CAAC;YAAC,IAAG,IAAI,GAAC,CAAC,CAAC,KAAK,EAAC;cAAC,OAAK,CAAC,GAAC,EAAE,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,CAAC,CAAC,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,GAAG,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC;YAAA,CAAC,MAAK,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,CAAC,KAAK,GAAC,IAAI,CAAC;YAAC,CAAC,CAAC,IAAI,GAAC,CAAC;UAAC,KAAK,CAAC;YAAC,IAAG,IAAI,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,KAAG,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAG,CAAC,CAAC,IAAI,CAAC,KAAK,GAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,MAAM,IAAE,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,EAAC,MAAM,CAAC;YAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC;UAAC,KAAK,CAAC;YAAC,IAAG,IAAI,GAAC,CAAC,CAAC,KAAK,EAAC;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,IAAI,IAAE,CAAC,IAAE,CAAC,CAAC,MAAM,GAAC,KAAK,KAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAE;cAAC,IAAG,GAAG,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,MAAK,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC;YAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC;UAAC,KAAK,CAAC;YAAC,IAAG,IAAI,GAAC,CAAC,CAAC,KAAK,EAAC;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,IAAI,IAAE,CAAC,IAAE,CAAC,CAAC,MAAM,GAAC,KAAK,KAAG,CAAC,CAAC,IAAI,CAAC,OAAO,IAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAE;cAAC,IAAG,GAAG,GAAC,CAAC,CAAC,KAAK,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,MAAK,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,CAAC,OAAO,GAAC,IAAI,CAAC;YAAC,CAAC,CAAC,IAAI,GAAC,CAAC;UAAC,KAAK,CAAC;YAAC,IAAG,GAAG,GAAC,CAAC,CAAC,KAAK,EAAC;cAAC,OAAK,CAAC,GAAC,EAAE,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,IAAG,CAAC,MAAI,KAAK,GAAC,CAAC,CAAC,KAAK,CAAC,EAAC;gBAAC,CAAC,CAAC,GAAG,GAAC,qBAAqB,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;gBAAC;cAAK;cAAC,CAAC,GAAC,CAAC,GAAC,CAAC;YAAA;YAAC,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,KAAK,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;YAAC;UAAM,KAAK,EAAE;YAAC,OAAK,CAAC,GAAC,EAAE,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,IAAG,CAAC,KAAG,CAAC,CAAC,QAAQ,EAAC,OAAO,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC;YAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,IAAG,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;UAAC,KAAK,EAAE;YAAC,IAAG,CAAC,CAAC,IAAI,EAAC;cAAC,CAAC,MAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,OAAK,CAAC,GAAC,CAAC,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,QAAO,CAAC,CAAC,IAAI,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,MAAI,CAAC,CAAC;cAAE,KAAK,CAAC;gBAAC,CAAC,CAAC,IAAI,GAAC,EAAE;gBAAC;cAAM,KAAK,CAAC;gBAAC,IAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE,EAAC,CAAC,KAAG,CAAC,EAAC;gBAAM,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC;gBAAC,MAAM,CAAC;cAAC,KAAK,CAAC;gBAAC,CAAC,CAAC,IAAI,GAAC,EAAE;gBAAC;cAAM,KAAK,CAAC;gBAAC,CAAC,CAAC,GAAG,GAAC,oBAAoB,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;YAAA;YAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC;YAAC;UAAM,KAAK,EAAE;YAAC,KAAI,CAAC,MAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,IAAG,CAAC,KAAK,GAAC,CAAC,MAAI,CAAC,KAAG,EAAE,GAAC,KAAK,CAAC,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,8BAA8B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,IAAG,CAAC,CAAC,MAAM,GAAC,KAAK,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE,EAAC,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;UAAC,KAAK,EAAE;YAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,IAAG,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC;cAAC,IAAG,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,MAAM,IAAE,CAAC;cAAC;YAAK;YAAC,CAAC,CAAC,IAAI,GAAC,EAAE;YAAC;UAAM,KAAK,EAAE;YAAC,OAAK,CAAC,GAAC,EAAE,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,IAAG,CAAC,CAAC,IAAI,GAAC,GAAG,IAAE,EAAE,GAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,IAAE,EAAE,GAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,IAAE,EAAE,GAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,GAAG,GAAC,CAAC,CAAC,IAAI,IAAE,EAAE,GAAC,CAAC,CAAC,KAAK,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,qCAAqC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,OAAK,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,KAAK,GAAE;cAAC,OAAK,CAAC,GAAC,CAAC,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,OAAK,CAAC,CAAC,IAAI,GAAC,EAAE,GAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAC,CAAC;YAAC,IAAG,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,GAAC;cAAC,IAAI,EAAC,CAAC,CAAC;YAAO,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,0BAA0B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,OAAK,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,KAAK,GAAE;cAAC,OAAK,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,OAAO,IAAE,CAAC,CAAC,MAAI,EAAE,GAAC,GAAG,EAAC,CAAC,GAAC,KAAK,GAAC,CAAC,EAAC,EAAE,CAAC,CAAC,GAAC,CAAC,KAAG,EAAE,KAAG,CAAC,CAAC,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,IAAG,CAAC,GAAC,EAAE,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAC,CAAC,CAAC,KAAI;gBAAC,IAAG,EAAE,KAAG,CAAC,EAAC;kBAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAE;oBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;oBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;kBAAA;kBAAC,IAAG,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,IAAI,EAAC;oBAAC,CAAC,CAAC,GAAG,GAAC,2BAA2B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;oBAAC;kBAAK;kBAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC;gBAAA,CAAC,MAAK,IAAG,EAAE,KAAG,CAAC,EAAC;kBAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAE;oBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;oBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;kBAAA;kBAAC,CAAC,IAAE,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,IAAE,CAAC,MAAI,CAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC;gBAAA,CAAC,MAAI;kBAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAE;oBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;oBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;kBAAA;kBAAC,CAAC,IAAE,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,IAAE,GAAG,IAAE,CAAC,MAAI,CAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC;gBAAA;gBAAC,IAAG,CAAC,CAAC,IAAI,GAAC,CAAC,GAAC,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,KAAK,EAAC;kBAAC,CAAC,CAAC,GAAG,GAAC,2BAA2B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;kBAAC;gBAAK;gBAAC,OAAK,CAAC,EAAE,GAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAC,CAAC;cAAA;YAAC;YAAC,IAAG,EAAE,KAAG,CAAC,CAAC,IAAI,EAAC;YAAM,IAAG,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,sCAAsC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,IAAG,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,GAAC;cAAC,IAAI,EAAC,CAAC,CAAC;YAAO,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC,OAAO,EAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,6BAA6B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,IAAG,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,GAAC;cAAC,IAAI,EAAC,CAAC,CAAC;YAAQ,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,uBAAuB,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,IAAG,CAAC,CAAC,IAAI,GAAC,EAAE,EAAC,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;UAAC,KAAK,EAAE;YAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,IAAG,CAAC,IAAE,CAAC,IAAE,GAAG,IAAE,CAAC,EAAC;cAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,EAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,EAAC,EAAE,KAAG,CAAC,CAAC,IAAI,KAAG,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC;cAAC;YAAK;YAAC,KAAI,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,OAAO,IAAE,CAAC,CAAC,MAAI,EAAE,GAAC,GAAG,EAAC,CAAC,GAAC,KAAK,GAAC,CAAC,EAAC,EAAE,CAAC,CAAC,GAAC,CAAC,KAAG,EAAE,KAAG,CAAC,CAAC,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,IAAG,CAAC,IAAE,CAAC,KAAG,GAAG,GAAC,CAAC,CAAC,EAAC;cAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAE,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,CAAC,MAAI,EAAE,GAAC,GAAG,EAAC,CAAC,GAAC,KAAK,GAAC,CAAC,EAAC,EAAE,CAAC,IAAE,CAAC,GAAC,CAAC,KAAG,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,IAAI,IAAE,CAAC;YAAA;YAAC,IAAG,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,IAAI,IAAE,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC;cAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,IAAG,EAAE,GAAC,CAAC,EAAC;cAAC,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,IAAG,EAAE,GAAC,CAAC,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,6BAA6B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,CAAC,CAAC,KAAK,GAAC,EAAE,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,IAAG,CAAC,CAAC,KAAK,EAAC;cAAC,KAAI,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,CAAC,CAAC,MAAM,IAAE,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC,MAAI,CAAC,CAAC,KAAK,EAAC,CAAC,IAAE,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,IAAI,IAAE,CAAC,CAAC,KAAK;YAAA;YAAC,CAAC,CAAC,GAAG,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,OAAK,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,MAAI,EAAE,GAAC,GAAG,EAAC,CAAC,GAAC,KAAK,GAAC,CAAC,EAAC,EAAE,CAAC,CAAC,GAAC,CAAC,KAAG,EAAE,KAAG,CAAC,CAAC,GAAE;cAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;cAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;YAAA;YAAC,IAAG,CAAC,KAAG,GAAG,GAAC,CAAC,CAAC,EAAC;cAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAE,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,CAAC,MAAI,EAAE,GAAC,GAAG,EAAC,CAAC,GAAC,KAAK,GAAC,CAAC,EAAC,EAAE,CAAC,IAAE,CAAC,GAAC,CAAC,KAAG,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,IAAI,IAAE,CAAC;YAAA;YAAC,IAAG,CAAC,MAAI,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,IAAI,IAAE,CAAC,EAAC,EAAE,GAAC,CAAC,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,uBAAuB,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,EAAE,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,IAAG,CAAC,CAAC,KAAK,EAAC;cAAC,KAAI,CAAC,GAAC,CAAC,CAAC,KAAK,EAAC,CAAC,GAAC,CAAC,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,CAAC,CAAC,MAAM,IAAE,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC,MAAI,CAAC,CAAC,KAAK,EAAC,CAAC,IAAE,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,IAAI,IAAE,CAAC,CAAC,KAAK;YAAA;YAAC,IAAG,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,IAAI,EAAC;cAAC,CAAC,CAAC,GAAG,GAAC,+BAA+B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;cAAC;YAAK;YAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;YAAC,IAAG,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC;cAAC,IAAG,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,GAAC,CAAC,IAAE,CAAC,CAAC,KAAK,IAAE,CAAC,CAAC,IAAI,EAAC;gBAAC,CAAC,CAAC,GAAG,GAAC,+BAA+B,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;gBAAC;cAAK;cAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,KAAK,IAAE,CAAC,IAAE,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,KAAK,GAAC,CAAC,IAAE,CAAC,CAAC,KAAK,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,KAAG,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM;YAAA,CAAC,MAAK,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM;YAAC,KAAI,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,MAAM,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,EAAE,CAAC,EAAE;YAAC,CAAC,KAAG,CAAC,CAAC,MAAM,KAAG,CAAC,CAAC,IAAI,GAAC,EAAE,CAAC;YAAC;UAAM,KAAK,EAAE;YAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;YAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;YAAC;UAAM,KAAK,EAAE;YAAC,IAAG,CAAC,CAAC,IAAI,EAAC;cAAC,OAAK,CAAC,GAAC,EAAE,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,IAAG,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,EAAC,CAAC,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,MAAI,CAAC,CAAC,KAAK,EAAC;gBAAC,CAAC,CAAC,GAAG,GAAC,sBAAsB,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;gBAAC;cAAK;cAAC,CAAC,GAAC,CAAC,GAAC,CAAC;YAAA;YAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,IAAG,CAAC,CAAC,IAAI,IAAE,CAAC,CAAC,KAAK,EAAC;cAAC,OAAK,CAAC,GAAC,EAAE,GAAE;gBAAC,IAAG,CAAC,KAAG,CAAC,EAAC,MAAM,CAAC;gBAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC;cAAA;cAAC,IAAG,CAAC,MAAI,UAAU,GAAC,CAAC,CAAC,KAAK,CAAC,EAAC;gBAAC,CAAC,CAAC,GAAG,GAAC,wBAAwB,EAAC,CAAC,CAAC,IAAI,GAAC,EAAE;gBAAC;cAAK;cAAC,CAAC,GAAC,CAAC,GAAC,CAAC;YAAA;YAAC,CAAC,CAAC,IAAI,GAAC,EAAE;UAAC,KAAK,EAAE;YAAC,CAAC,GAAC,CAAC;YAAC,MAAM,CAAC;UAAC,KAAK,EAAE;YAAC,CAAC,GAAC,CAAC,CAAC;YAAC,MAAM,CAAC;UAAC,KAAK,EAAE;YAAC,OAAM,CAAC,CAAC;UAAC,KAAK,EAAE;UAAC;YAAQ,OAAO,CAAC;QAAA;QAAC,OAAO,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,KAAG,CAAC,CAAC,SAAS,IAAE,CAAC,CAAC,IAAI,GAAC,EAAE,KAAG,CAAC,CAAC,IAAI,GAAC,EAAE,IAAE,CAAC,KAAG,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,IAAE,CAAC,CAAC,IAAI,GAAC,EAAE,EAAC,CAAC,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,QAAQ,EAAC,CAAC,IAAE,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,EAAC,CAAC,CAAC,SAAS,IAAE,CAAC,EAAC,CAAC,CAAC,KAAK,IAAE,CAAC,EAAC,CAAC,CAAC,IAAI,IAAE,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,IAAI,IAAE,CAAC,CAAC,IAAI,GAAC,EAAE,GAAC,CAAC,CAAC,IAAE,EAAE,KAAG,CAAC,CAAC,IAAI,GAAC,GAAG,GAAC,CAAC,CAAC,IAAE,EAAE,KAAG,CAAC,CAAC,IAAI,IAAE,EAAE,KAAG,CAAC,CAAC,IAAI,GAAC,GAAG,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,KAAG,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,UAAU,GAAC,UAAS,CAAC,EAAC;QAAC,IAAG,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,KAAK,EAAC,OAAO,CAAC;QAAC,IAAI,CAAC,GAAC,CAAC,CAAC,KAAK;QAAC,OAAO,CAAC,CAAC,MAAM,KAAG,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,EAAC,CAAC,CAAC,KAAK,GAAC,IAAI,EAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;QAAC,OAAO,CAAC,IAAE,CAAC,CAAC,KAAK,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAE,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,oBAAoB,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,MAAM;QAAC,OAAO,CAAC,IAAE,CAAC,CAAC,KAAK,GAAC,CAAC,KAAG,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,EAAE,IAAI,IAAE,EAAE,KAAG,CAAC,CAAC,IAAI,GAAC,CAAC,GAAC,EAAE,KAAG,CAAC,CAAC,IAAI,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,KAAG,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,CAAC,IAAI,GAAC,EAAE,EAAC,CAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,WAAW,GAAC,oCAAoC;IAAA,CAAC,EAAC;MAAC,iBAAiB,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,YAAY,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAC,CAAC,EAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC;MAAC,CAAC,CAAC,OAAO,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,IAAI;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,IAAI;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;UAAC,CAAC,GAAC,IAAI;UAAC,CAAC,GAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,EAAE,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,IAAE,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,CAAC;QAAC,IAAG,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,QAAQ,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,EAAE,EAAC,CAAC,EAAE,EAAC,IAAG,CAAC,KAAG,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,OAAM,CAAC,CAAC;QAAC,IAAG,CAAC,GAAC,CAAC,KAAG,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAC,OAAM,CAAC,CAAC;QAAC,KAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,KAAG,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC;QAAC,IAAG,CAAC,GAAC,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,EAAE,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,GAAG,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,GAAG,EAAC,GAAG,KAAG,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,GAAG,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,GAAG,GAAC,CAAC,EAAC,OAAO,CAAC;QAAC,SAAO;UAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,GAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,EAAE,GAAC,CAAC,IAAE,EAAE,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAE;UAAC,KAAI,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAE,CAAC,KAAG,CAAC;UAAC,IAAG,CAAC,KAAG,CAAC,IAAE,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,IAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAC;YAAC,IAAG,CAAC,KAAG,CAAC,EAAC;YAAM,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UAAA;UAAC,IAAG,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,GAAC,CAAC,MAAI,CAAC,EAAC;YAAC,KAAI,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,CAAC,GAAE,CAAC,EAAE,EAAC,CAAC,KAAG,CAAC;YAAC,IAAG,CAAC,IAAE,CAAC,IAAE,CAAC,EAAC,CAAC,KAAG,CAAC,IAAE,GAAG,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,GAAG,GAAC,CAAC,EAAC,OAAO,CAAC;YAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,IAAE,EAAE,GAAC,CAAC,IAAE,EAAE,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC;UAAA;QAAC;QAAC,OAAO,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,EAAE,GAAC,EAAE,IAAE,EAAE,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAC,CAAC,EAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,iBAAiB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,OAAO,GAAC;QAAC,CAAC,EAAC,iBAAiB;QAAC,CAAC,EAAC,YAAY;QAAC,CAAC,EAAC,EAAE;QAAC,IAAI,EAAC,YAAY;QAAC,IAAI,EAAC,cAAc;QAAC,IAAI,EAAC,YAAY;QAAC,IAAI,EAAC,qBAAqB;QAAC,IAAI,EAAC,cAAc;QAAC,IAAI,EAAC;MAAsB,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC,iBAAiB,CAAC;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,IAAE,EAAE,CAAC,GAAE,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC;MAAA;MAAC,IAAI,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,GAAG;QAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,GAAG;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,EAAE;QAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,CAAC;QAAC,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC;MAAC,CAAC,CAAC,CAAC,CAAC;MAAC,IAAI,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC;MAAC,CAAC,CAAC,CAAC,CAAC;MAAC,IAAI,CAAC,GAAC,IAAI,KAAK,CAAC,GAAG,CAAC;MAAC,CAAC,CAAC,CAAC,CAAC;MAAC,IAAI,CAAC,GAAC,IAAI,KAAK,CAAC,GAAG,CAAC;MAAC,CAAC,CAAC,CAAC,CAAC;MAAC,IAAI,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,CAAC;MAAC,CAAC,CAAC,CAAC,CAAC;MAAC,IAAI,CAAC;QAAC,CAAC;QAAC,CAAC;QAAC,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,WAAW,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC,EAAC,IAAI,CAAC,UAAU,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,OAAO,CAAC,GAAC,GAAG,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,IAAE,CAAC,KAAG,CAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,GAAG;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,MAAM,IAAE,CAAC,IAAE,CAAC,CAAC,QAAQ,GAAC,KAAK,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,MAAM,IAAE,CAAC,IAAE,CAAC,CAAC,QAAQ,GAAC,KAAK,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,MAAI,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC,CAAC,GAAC,EAAE,CAAC,EAAE;QAAC,OAAO,CAAC,KAAG,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAE,EAAC;UAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC;UAAC,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC;QAAA;MAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,IAAI,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC;QAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,CAAC,CAAC,UAAU,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,OAAO,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC;QAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC,GAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC,GAAC,CAAC;QAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,KAAI,IAAI,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,KAAG,CAAC,GAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,IAAE,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC;QAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC;QAAC,IAAG,CAAC,KAAG,CAAC,CAAC,QAAQ,EAAC,OAAK,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,MAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAE;QAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,QAAQ;UAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,WAAW;UAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,SAAS;UAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,KAAK;UAAC,CAAC,GAAC,CAAC,CAAC;QAAC,KAAI,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,KAAG,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC;QAAC,OAAK,CAAC,CAAC,QAAQ,GAAC,CAAC,GAAE,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,EAAE,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,OAAO,EAAE,EAAC,CAAC,KAAG,CAAC,CAAC,UAAU,IAAE,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC;QAAC,KAAI,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,EAAE;QAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC,GAAC,CAAC,CAAC,QAAQ;YAAC,CAAC,GAAC,CAAC,CAAC,QAAQ;YAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,WAAW;YAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,SAAS;YAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,UAAU;YAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,UAAU;YAAC,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,UAAU;YAAC,CAAC,GAAC,CAAC;UAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAC,CAAC;UAAC,KAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,IAAE,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,UAAU,IAAE,CAAC,IAAE,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;UAAC,IAAG,CAAC,KAAG,CAAC,EAAC;YAAC,GAAE;cAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAE,CAAC,EAAE;cAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,IAAE,CAAC;YAAA,CAAC,QAAM,CAAC,GAAC,CAAC;YAAE,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,EAAC,CAAC,EAAE,EAAC,KAAI,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,GAAE,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,OAAO,IAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAE,CAAC;UAAA;QAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;QAAC,KAAI,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,GAAG,EAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,KAAK,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,IAAE,CAAC,IAAE,EAAE,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,GAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,MAAI,CAAC,IAAE,CAAC,GAAC,GAAG,EAAC,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;UAAC,CAAC,GAAC,CAAC;QAAC,KAAI,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,GAAG,EAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAE,EAAC,IAAG,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,EAAE,EAAE,CAAC,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,EAAC;UAAC,IAAG,CAAC,GAAC,CAAC,EAAC,OAAK,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAG,CAAC,IAAE,CAAC,KAAG,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,CAAC,CAAC;UAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,MAAI,CAAC,IAAE,CAAC,GAAC,GAAG,EAAC,CAAC,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,GAAC,CAAC,EAAC,CAAC,KAAG,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC;QAAA;MAAC;MAAC,CAAC,CAAC,CAAC,CAAC;MAAC,IAAI,CAAC,GAAC,CAAC,CAAC;MAAC,SAAS,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,IAAE,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;UAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,OAAO,IAAE,CAAC;QAAA,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;MAAA;MAAC,CAAC,CAAC,QAAQ,GAAC,UAAS,CAAC,EAAC;QAAC,CAAC,KAAG,YAAU;UAAC,IAAI,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC;YAAC,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC;UAAC,KAAI,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,KAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC;UAAC,KAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAC,KAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC;UAAC,KAAI,CAAC,KAAG,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,KAAI,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,IAAE,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,GAAG,GAAC,CAAC,EAAE,CAAC,GAAC,CAAC;UAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC;UAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,GAAG,GAAE,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE;UAAC,OAAK,CAAC,IAAE,GAAG,GAAE,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE;UAAC,OAAK,CAAC,IAAE,GAAG,GAAE,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE;UAAC,OAAK,CAAC,IAAE,GAAG,GAAE,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE;UAAC,KAAI,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;UAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,EAAC,CAAC,CAAC,eAAe,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,IAAI,CAAC;UAAC,CAAC;UAAC,CAAC,GAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,KAAK,IAAE,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,KAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAC,UAAS,CAAC,EAAC;UAAC,IAAI,CAAC;YAAC,CAAC,GAAC,UAAU;UAAC,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,EAAE,EAAC,CAAC,EAAE,EAAC,CAAC,MAAI,CAAC,EAAC,IAAG,CAAC,GAAC,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,OAAO,CAAC;UAAC,IAAG,CAAC,KAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAC,OAAO,CAAC;UAAC,KAAI,CAAC,GAAC,EAAE,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,IAAG,CAAC,KAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,OAAO,CAAC;UAAC,OAAO,CAAC;QAAA,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,GAAC,UAAS,CAAC,EAAC;UAAC,IAAI,CAAC;UAAC,KAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,EAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,IAAE,CAAC,IAAE,CAAC,KAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAE,CAAC;UAAC,OAAO,CAAC,CAAC,OAAO,IAAE,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC;QAAA,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,OAAO,GAAC,CAAC,GAAC,CAAC,KAAG,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,CAAC,UAAU,GAAC,CAAC,GAAC,CAAC,KAAG,CAAC,KAAG,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,GAAC,CAAC,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,KAAG,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;UAAC,IAAI,CAAC;UAAC,KAAI,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,GAAG,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC;UAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;QAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,GAAC,CAAC,KAAG,CAAC,GAAC,GAAG,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,QAAQ,CAAC,GAAC,GAAG,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,KAAG,CAAC,GAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,IAAE,CAAC,CAAC,OAAO,EAAE,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,WAAW,GAAC,CAAC;MAAA,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,UAAS,CAAC,EAAC;QAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;UAAC,EAAE,KAAG,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,EAAC,CAAC,CAAC,MAAM,GAAC,CAAC,EAAC,CAAC,CAAC,QAAQ,GAAC,CAAC,IAAE,CAAC,IAAE,CAAC,CAAC,QAAQ,KAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAC,GAAG,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,MAAM,KAAG,CAAC,EAAC,CAAC,CAAC,QAAQ,IAAE,CAAC,CAAC;QAAA,CAAC,CAAC,CAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC;MAAC,iBAAiB,EAAC;IAAE,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,YAAY;;MAAC,CAAC,CAAC,OAAO,GAAC,YAAU;QAAC,IAAI,CAAC,KAAK,GAAC,IAAI,EAAC,IAAI,CAAC,OAAO,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,MAAM,GAAC,IAAI,EAAC,IAAI,CAAC,QAAQ,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,IAAI,CAAC,GAAG,GAAC,EAAE,EAAC,IAAI,CAAC,KAAK,GAAC,IAAI,EAAC,IAAI,CAAC,SAAS,GAAC,CAAC,EAAC,IAAI,CAAC,KAAK,GAAC,CAAC;MAAA,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IAAC,EAAE,EAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;MAAC,CAAC,UAAS,CAAC,EAAC;QAAC,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC;UAAC,YAAY;;UAAC,IAAG,CAAC,CAAC,CAAC,YAAY,EAAC;YAAC,IAAI,CAAC;cAAC,CAAC;cAAC,CAAC;cAAC,CAAC;cAAC,CAAC,GAAC,CAAC;cAAC,CAAC,GAAC,CAAC,CAAC;cAAC,CAAC,GAAC,CAAC,CAAC;cAAC,CAAC,GAAC,CAAC,CAAC,QAAQ;cAAC,CAAC,GAAC,MAAM,CAAC,cAAc,IAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAAC,CAAC,GAAC,CAAC,IAAE,CAAC,CAAC,UAAU,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,kBAAkB,KAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAC,UAAS,CAAC,EAAC;cAAC,OAAO,CAAC,QAAQ,CAAC,YAAU;gBAAC,CAAC,CAAC,CAAC,CAAC;cAAA,CAAC,CAAC;YAAA,CAAC,GAAC,YAAU;cAAC,IAAG,CAAC,CAAC,WAAW,IAAE,CAAC,CAAC,CAAC,aAAa,EAAC;gBAAC,IAAI,CAAC,GAAC,CAAC,CAAC;kBAAC,CAAC,GAAC,CAAC,CAAC,SAAS;gBAAC,OAAO,CAAC,CAAC,SAAS,GAAC,YAAU;kBAAC,CAAC,GAAC,CAAC,CAAC;gBAAA,CAAC,EAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAC,GAAG,CAAC,EAAC,CAAC,CAAC,SAAS,GAAC,CAAC,EAAC,CAAC;cAAA;YAAC,CAAC,CAAC,CAAC,IAAE,CAAC,GAAC,eAAe,GAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAC,GAAG,EAAC,CAAC,CAAC,gBAAgB,GAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAC,CAAC,CAAC,EAAC,UAAS,CAAC,EAAC;cAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAC,CAAC,EAAC,GAAG,CAAC;YAAA,CAAC,IAAE,CAAC,CAAC,cAAc,IAAE,CAAC,CAAC,GAAC,IAAI,cAAc,CAAD,CAAC,EAAE,KAAK,CAAC,SAAS,GAAC,UAAS,CAAC,EAAC;cAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAAA,CAAC,EAAC,UAAS,CAAC,EAAC;cAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;YAAA,CAAC,IAAE,CAAC,IAAE,oBAAoB,IAAG,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,eAAe,EAAC,UAAS,CAAC,EAAC;cAAC,IAAI,CAAC,GAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC;cAAC,CAAC,CAAC,kBAAkB,GAAC,YAAU;gBAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,kBAAkB,GAAC,IAAI,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,IAAI;cAAA,CAAC,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAAA,CAAC,IAAE,UAAS,CAAC,EAAC;cAAC,UAAU,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;YAAA,CAAC,EAAC,CAAC,CAAC,YAAY,GAAC,UAAS,CAAC,EAAC;cAAC,UAAU,IAAE,OAAO,CAAC,KAAG,CAAC,GAAC,IAAI,QAAQ,CAAC,EAAE,GAAC,CAAC,CAAC,CAAC;cAAC,KAAI,IAAI,CAAC,GAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,GAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC;cAAC,IAAI,CAAC,GAAC;gBAAC,QAAQ,EAAC,CAAC;gBAAC,IAAI,EAAC;cAAC,CAAC;cAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE;YAAA,CAAC,EAAC,CAAC,CAAC,cAAc,GAAC,CAAC;UAAA;UAAC,SAAS,CAAC,CAAC,CAAC,EAAC;YAAC,OAAO,CAAC,CAAC,CAAC,CAAC;UAAA;UAAC,SAAS,CAAC,CAAC,CAAC,EAAC;YAAC,IAAG,CAAC,EAAC,UAAU,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAI;cAAC,IAAI,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;cAAC,IAAG,CAAC,EAAC;gBAAC,CAAC,GAAC,CAAC,CAAC;gBAAC,IAAG;kBAAC,CAAC,UAAS,CAAC,EAAC;oBAAC,IAAI,CAAC,GAAC,CAAC,CAAC,QAAQ;sBAAC,CAAC,GAAC,CAAC,CAAC,IAAI;oBAAC,QAAO,CAAC,CAAC,MAAM;sBAAE,KAAK,CAAC;wBAAC,CAAC,CAAC,CAAC;wBAAC;sBAAM,KAAK,CAAC;wBAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAC;sBAAM,KAAK,CAAC;wBAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAC;sBAAM,KAAK,CAAC;wBAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAC;sBAAM;wBAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC;oBAAA;kBAAC,CAAC,CAAC,CAAC,CAAC;gBAAA,CAAC,SAAO;kBAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC;gBAAA;cAAC;YAAC;UAAC;UAAC,SAAS,CAAC,CAAC,CAAC,EAAC;YAAC,CAAC,CAAC,MAAM,KAAG,CAAC,IAAE,QAAQ,IAAE,OAAO,CAAC,CAAC,IAAI,IAAE,CAAC,KAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;UAAA;QAAC,CAAC,CAAC,WAAW,IAAE,OAAO,IAAI,GAAC,KAAK,CAAC,KAAG,CAAC,GAAC,IAAI,GAAC,CAAC,GAAC,IAAI,CAAC;MAAA,CAAC,EAAE,IAAI,CAAC,IAAI,EAAC,WAAW,IAAE,OAAO,MAAM,GAAC,MAAM,GAAC,WAAW,IAAE,OAAO,IAAI,GAAC,IAAI,GAAC,WAAW,IAAE,OAAO,MAAM,GAAC,MAAM,GAAC,CAAC,CAAC,CAAC;IAAA,CAAC,EAAC,CAAC,CAAC;EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAAA,CAAC,CAAC;;;;;;;;ACZ799F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC;;AAEpB;AACA,IAAI,SAAS,GAAG,iBAAiB;;AAEjC;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,qBAAqB;EACpC,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;;AAEjD;AACA,IAAI,UAAU,GAAG,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM;;AAE1F;AACA,IAAI,QAAQ,GAAG,OAAO,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI;;AAEhF;AACA,IAAI,IAAI,GAAG,UAAU,IAAI,QAAQ,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;;AAE9D;AACA,IAAI,WAAW,GAAG,MAAM,CAAC,SAAS;;AAElC;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG,WAAW,CAAC,QAAQ;;AAEzC;AACA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;;AAExB;AACA,IAAI,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS;EACnD,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC,QAAQ,GAAG,SAAS;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B;EACA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;IAC5B,OAAO,KAAK;EACd;EACA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACnB,OAAO,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;EACzD;EACA,IAAI,MAAM,GAAI,KAAK,GAAG,EAAG;EACzB,OAAQ,MAAM,IAAI,GAAG,IAAK,CAAC,GAAG,KAAK,IAAK,CAAC,QAAQ,GAAI,IAAI,GAAG,MAAM;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,OAAO,KAAK,IAAI,QAAQ,IAC5B,YAAY,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAU;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,MAAM,EAAE;EAC5B,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EACzB,OAAQ,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,GAC1C,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GACpC,MAAM;AACZ;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;;;;ACrK7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,gBAAgB,GAAG,GAAG;;AAE1B;AACA,IAAI,eAAe,GAAG,qBAAqB;;AAE3C;AACA,IAAI,cAAc,GAAG,2BAA2B;;AAEhD;AACA,IAAI,sBAAsB,GAAG,CAAC;EAC1B,oBAAoB,GAAG,CAAC;;AAE5B;AACA,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC;EAChB,gBAAgB,GAAG,gBAAgB;;AAEvC;AACA,IAAI,OAAO,GAAG,oBAAoB;EAC9B,QAAQ,GAAG,gBAAgB;EAC3B,OAAO,GAAG,kBAAkB;EAC5B,OAAO,GAAG,eAAe;EACzB,QAAQ,GAAG,gBAAgB;EAC3B,OAAO,GAAG,mBAAmB;EAC7B,MAAM,GAAG,4BAA4B;EACrC,MAAM,GAAG,cAAc;EACvB,SAAS,GAAG,iBAAiB;EAC7B,SAAS,GAAG,iBAAiB;EAC7B,UAAU,GAAG,kBAAkB;EAC/B,SAAS,GAAG,iBAAiB;EAC7B,MAAM,GAAG,cAAc;EACvB,SAAS,GAAG,iBAAiB;EAC7B,SAAS,GAAG,iBAAiB;EAC7B,UAAU,GAAG,kBAAkB;AAEnC,IAAI,cAAc,GAAG,sBAAsB;EACvC,WAAW,GAAG,mBAAmB;EACjC,UAAU,GAAG,uBAAuB;EACpC,UAAU,GAAG,uBAAuB;EACpC,OAAO,GAAG,oBAAoB;EAC9B,QAAQ,GAAG,qBAAqB;EAChC,QAAQ,GAAG,qBAAqB;EAChC,QAAQ,GAAG,qBAAqB;EAChC,eAAe,GAAG,4BAA4B;EAC9C,SAAS,GAAG,sBAAsB;EAClC,SAAS,GAAG,sBAAsB;;AAEtC;AACA,IAAI,YAAY,GAAG,kDAAkD;EACjE,aAAa,GAAG,OAAO;EACvB,YAAY,GAAG,KAAK;EACpB,UAAU,GAAG,kGAAkG;;AAEnH;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,qBAAqB;;AAExC;AACA,IAAI,YAAY,GAAG,UAAU;;AAE7B;AACA,IAAI,YAAY,GAAG,6BAA6B;;AAEhD;AACA,IAAI,QAAQ,GAAG,kBAAkB;;AAEjC;AACA,IAAI,cAAc,GAAG,CAAC,CAAC;AACvB,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,GACvD,cAAc,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,GAClD,cAAc,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,GACnD,cAAc,CAAC,eAAe,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,GAC3D,cAAc,CAAC,SAAS,CAAC,GAAG,IAAI;AAChC,cAAc,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,GAClD,cAAc,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,GACxD,cAAc,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,GACrD,cAAc,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,GAClD,cAAc,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,GAClD,cAAc,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,GACrD,cAAc,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,GAClD,cAAc,CAAC,UAAU,CAAC,GAAG,KAAK;;AAElC;AACA,IAAI,UAAU,GAAG,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM;;AAE1F;AACA,IAAI,QAAQ,GAAG,OAAO,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI;;AAEhF;AACA,IAAI,IAAI,GAAG,UAAU,IAAI,QAAQ,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;;AAE9D;AACA,IAAI,WAAW,GAAG,OAAO,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO;;AAEvF;AACA,IAAI,UAAU,GAAG,WAAW,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM;;AAEjG;AACA,IAAI,aAAa,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,KAAK,WAAW;;AAEpE;AACA,IAAI,WAAW,GAAG,aAAa,IAAI,UAAU,CAAC,OAAO;;AAErD;AACA,IAAI,QAAQ,GAAI,YAAW;EACzB,IAAI;IACF,OAAO,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;EACnD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;AACf,CAAC,CAAC,CAAE;;AAEJ;AACA,IAAI,gBAAgB,GAAG,QAAQ,IAAI,QAAQ,CAAC,YAAY;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE;EAC7D,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;EAErC,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACxB,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;EACpD;EACA,OAAO,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE;EACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;EAErC,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;MACzC,OAAO,IAAI;IACb;EACF;EACA,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE;EACzB,OAAO,UAAS,MAAM,EAAE;IACtB,OAAO,MAAM,IAAI,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;EACjD,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE;EAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;EAErB,OAAO,EAAE,KAAK,GAAG,CAAC,EAAE;IAClB,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;EACjC;EACA,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACvB,OAAO,UAAS,KAAK,EAAE;IACrB,OAAO,IAAI,CAAC,KAAK,CAAC;EACpB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;EAC7B,OAAO,MAAM,IAAI,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B;EACA;EACA,IAAI,MAAM,GAAG,KAAK;EAClB,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,QAAQ,IAAI,UAAU,EAAE;IACxD,IAAI;MACF,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;IACzB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;EACf;EACA,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,GAAG,EAAE;EACvB,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;EAE5B,GAAG,CAAC,OAAO,CAAC,UAAS,KAAK,EAAE,GAAG,EAAE;IAC/B,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;EAChC,CAAC,CAAC;EACF,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE;EAChC,OAAO,UAAS,GAAG,EAAE;IACnB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;EAC7B,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,GAAG,EAAE;EACvB,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;EAE5B,GAAG,CAAC,OAAO,CAAC,UAAS,KAAK,EAAE;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK;EACzB,CAAC,CAAC;EACF,OAAO,MAAM;AACf;;AAEA;AACA,IAAI,UAAU,GAAG,KAAK,CAAC,SAAS;EAC5B,SAAS,GAAG,QAAQ,CAAC,SAAS;EAC9B,WAAW,GAAG,MAAM,CAAC,SAAS;;AAElC;AACA,IAAI,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC;;AAE3C;AACA,IAAI,UAAU,GAAI,YAAW;EAC3B,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;EACxF,OAAO,GAAG,GAAI,gBAAgB,GAAG,GAAG,GAAI,EAAE;AAC5C,CAAC,CAAC,CAAE;;AAEJ;AACA,IAAI,YAAY,GAAG,SAAS,CAAC,QAAQ;;AAErC;AACA,IAAI,cAAc,GAAG,WAAW,CAAC,cAAc;;AAE/C;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG,WAAW,CAAC,QAAQ;;AAEzC;AACA,IAAI,UAAU,GAAG,MAAM,CAAC,GAAG,GACzB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAC9D,OAAO,CAAC,wDAAwD,EAAE,OAAO,CAAC,GAAG,GAChF,CAAC;;AAED;AACA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;EACpB,UAAU,GAAG,IAAI,CAAC,UAAU;EAC5B,oBAAoB,GAAG,WAAW,CAAC,oBAAoB;EACvD,MAAM,GAAG,UAAU,CAAC,MAAM;;AAE9B;AACA,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;;AAE7C;AACA,IAAI,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;EACtC,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;EAC5B,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;EACpC,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;EAC5B,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;EACpC,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;;AAE9C;AACA,IAAI,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC;EACvC,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC;EAC7B,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC;EACrC,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC;EAC7B,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC;;AAEzC;AACA,IAAI,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,SAAS;EACnD,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC,OAAO,GAAG,SAAS;EAC7D,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC,QAAQ,GAAG,SAAS;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,OAAO,EAAE;EACrB,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;EAEzC,IAAI,CAAC,KAAK,CAAC,CAAC;EACZ,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;EAC9B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAA,EAAG;EACnB,IAAI,CAAC,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,GAAG,EAAE;EACvB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,GAAG,EAAE;EACpB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ;EACxB,IAAI,YAAY,EAAE;IAChB,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;IACtB,OAAO,MAAM,KAAK,cAAc,GAAG,SAAS,GAAG,MAAM;EACvD;EACA,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,GAAG,EAAE;EACpB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ;EACxB,OAAO,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;AAChF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;EAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ;EACxB,IAAI,CAAC,GAAG,CAAC,GAAI,YAAY,IAAI,KAAK,KAAK,SAAS,GAAI,cAAc,GAAG,KAAK;EAC1E,OAAO,IAAI;AACb;;AAEA;AACA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS;AAChC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,UAAU;AACrC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,OAAO;AAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,OAAO;AAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,OAAO;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,OAAO,EAAE;EAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;EAEzC,IAAI,CAAC,KAAK,CAAC,CAAC;EACZ,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;EAC9B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAA,EAAG;EACxB,IAAI,CAAC,QAAQ,GAAG,EAAE;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,GAAG,EAAE;EAC5B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ;IACpB,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;EAEnC,IAAI,KAAK,GAAG,CAAC,EAAE;IACb,OAAO,KAAK;EACd;EACA,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;EAC/B,IAAI,KAAK,IAAI,SAAS,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC,CAAC;EACZ,CAAC,MAAM;IACL,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;EAC7B;EACA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE;EACzB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ;IACpB,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;EAEnC,OAAO,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE;EACzB,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE;EAChC,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ;IACpB,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;EAEnC,IAAI,KAAK,GAAG,CAAC,EAAE;IACb,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;EACzB,CAAC,MAAM;IACL,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;EACxB;EACA,OAAO,IAAI;AACb;;AAEA;AACA,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG,cAAc;AAC1C,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,eAAe;AAC/C,SAAS,CAAC,SAAS,CAAC,GAAG,GAAG,YAAY;AACtC,SAAS,CAAC,SAAS,CAAC,GAAG,GAAG,YAAY;AACtC,SAAS,CAAC,SAAS,CAAC,GAAG,GAAG,YAAY;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,OAAO,EAAE;EACzB,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;EAEzC,IAAI,CAAC,KAAK,CAAC,CAAC;EACZ,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;EAC9B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAA,EAAG;EACvB,IAAI,CAAC,QAAQ,GAAG;IACd,MAAM,EAAE,IAAI,IAAI,CAAD,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,IAAI,SAAS,GAAC;IAC7B,QAAQ,EAAE,IAAI,IAAI,CAAD;EACnB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,GAAG,EAAE;EAC3B,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE;EACxB,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE;EACxB,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE;EAC/B,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;EACrC,OAAO,IAAI;AACb;;AAEA;AACA,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,aAAa;AACxC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,cAAc;AAC7C,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,WAAW;AACpC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,WAAW;AACpC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,WAAW;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,MAAM,EAAE;EACxB,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;EAEvC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAD,CAAC;EAC5B,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;EACzB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC;EACxC,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC;;AAEA;AACA,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,WAAW;AAC9D,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,WAAW;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,CAAC,OAAO,EAAE;EACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAA,EAAG;EACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,SAAS,CAAD,CAAC;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE;EACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;AACrC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE;EACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE;EACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE;EAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ;EACzB,IAAI,KAAK,YAAY,SAAS,EAAE;IAC9B,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ;IAC1B,IAAI,CAAC,GAAG,IAAK,KAAK,CAAC,MAAM,GAAG,gBAAgB,GAAG,CAAE,EAAE;MACjD,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;MACxB,OAAO,IAAI;IACb;IACA,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC;EAC7C;EACA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;EACrB,OAAO,IAAI;AACb;;AAEA;AACA,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU;AAClC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,WAAW;AACvC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,QAAQ;AAC9B,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,QAAQ;AAC9B,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,QAAQ;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE;EACvC;EACA;EACA,IAAI,MAAM,GAAI,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,GAC9C,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,EAAE;EAEN,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;IACtB,WAAW,GAAG,CAAC,CAAC,MAAM;EAE1B,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;IACrB,IAAI,CAAC,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAC7C,EAAE,WAAW,KAAK,GAAG,IAAI,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;MAC/D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAClB;EACF;EACA,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE;EAChC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;EACzB,OAAO,MAAM,EAAE,EAAE;IACf,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;MAC7B,OAAO,MAAM;IACf;EACF;EACA,OAAO,CAAC,CAAC;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE;EACjE,QAAQ,CAAC,UAAU,EAAE,UAAS,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE;IACpD,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;EACzD,CAAC,CAAC;EACF,OAAO,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,GAAG,aAAa,CAAC,CAAC;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE;EACpC,OAAO,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE;EAC7B,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;EAEpD,IAAI,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,IAAI,CAAC,MAAM;EAExB,OAAO,MAAM,IAAI,IAAI,IAAI,KAAK,GAAG,MAAM,EAAE;IACvC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;EACvC;EACA,OAAQ,KAAK,IAAI,KAAK,IAAI,MAAM,GAAI,MAAM,GAAG,SAAS;AACxD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,KAAK,EAAE;EACzB,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE;EAC9B,OAAO,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;EAC7D,IAAI,KAAK,KAAK,KAAK,EAAE;IACnB,OAAO,IAAI;EACb;EACA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAE,EAAE;IAChF,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;EAC3C;EACA,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC;AAC/E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;EAC7E,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAC1B,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IACzB,MAAM,GAAG,QAAQ;IACjB,MAAM,GAAG,QAAQ;EAErB,IAAI,CAAC,QAAQ,EAAE;IACb,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACvB,MAAM,GAAG,MAAM,IAAI,OAAO,GAAG,SAAS,GAAG,MAAM;EACjD;EACA,IAAI,CAAC,QAAQ,EAAE;IACb,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;IACtB,MAAM,GAAG,MAAM,IAAI,OAAO,GAAG,SAAS,GAAG,MAAM;EACjD;EACA,IAAI,QAAQ,GAAG,MAAM,IAAI,SAAS,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACvD,QAAQ,GAAG,MAAM,IAAI,SAAS,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACtD,SAAS,GAAG,MAAM,IAAI,MAAM;EAEhC,IAAI,SAAS,IAAI,CAAC,QAAQ,EAAE;IAC1B,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,CAAD,CAAC,CAAC;IAC5B,OAAQ,QAAQ,IAAI,YAAY,CAAC,MAAM,CAAC,GACpC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,GACjE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC;EAC9E;EACA,IAAI,EAAE,OAAO,GAAG,oBAAoB,CAAC,EAAE;IACrC,IAAI,YAAY,GAAG,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;MACrE,YAAY,GAAG,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC;IAExE,IAAI,YAAY,IAAI,YAAY,EAAE;MAChC,IAAI,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM;QACrD,YAAY,GAAG,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;MAEvD,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,CAAD,CAAC,CAAC;MAC5B,OAAO,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC;IAC1E;EACF;EACA,IAAI,CAAC,SAAS,EAAE;IACd,OAAO,KAAK;EACd;EACA,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,CAAD,CAAC,CAAC;EAC5B,OAAO,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC;AAC3E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE;EAC1D,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM;IACxB,MAAM,GAAG,KAAK;IACd,YAAY,GAAG,CAAC,UAAU;EAE9B,IAAI,MAAM,IAAI,IAAI,EAAE;IAClB,OAAO,CAAC,MAAM;EAChB;EACA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;EACvB,OAAO,KAAK,EAAE,EAAE;IACd,IAAI,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;IAC3B,IAAK,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,GACpB,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAC3B,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EACtB;MACJ,OAAO,KAAK;IACd;EACF;EACA,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;IACvB,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;MACb,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;MACtB,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;IAEtB,IAAI,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;MAC3B,IAAI,QAAQ,KAAK,SAAS,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE;QAC9C,OAAO,KAAK;MACd;IACF,CAAC,MAAM;MACL,IAAI,KAAK,GAAG,IAAI,KAAK,CAAD,CAAC;MACrB,IAAI,UAAU,EAAE;QACd,IAAI,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;MACzE;MACA,IAAI,EAAE,MAAM,KAAK,SAAS,GAClB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,sBAAsB,GAAG,oBAAoB,EAAE,KAAK,CAAC,GACjG,MAAM,CACT,EAAE;QACL,OAAO,KAAK;MACd;IACF;EACF;EACA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACvC,OAAO,KAAK;EACd;EACA,IAAI,OAAO,GAAI,UAAU,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,GAAI,UAAU,GAAG,YAAY;EACpF,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,KAAK,EAAE;EAC/B,OAAO,YAAY,CAAC,KAAK,CAAC,IACxB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B;EACA;EACA,IAAI,OAAO,KAAK,IAAI,UAAU,EAAE;IAC9B,OAAO,KAAK;EACd;EACA,IAAI,KAAK,IAAI,IAAI,EAAE;IACjB,OAAO,QAAQ;EACjB;EACA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;IAC5B,OAAO,OAAO,CAAC,KAAK,CAAC,GACjB,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GACvC,WAAW,CAAC,KAAK,CAAC;EACxB;EACA,OAAO,QAAQ,CAAC,KAAK,CAAC;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,MAAM,EAAE;EACxB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;IACxB,OAAO,UAAU,CAAC,MAAM,CAAC;EAC3B;EACA,IAAI,MAAM,GAAG,EAAE;EACf,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;IAC9B,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,aAAa,EAAE;MAC5D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAClB;EACF;EACA,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,MAAM,EAAE;EAC3B,IAAI,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC;EACpC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IAC5C,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAClE;EACA,OAAO,UAAS,MAAM,EAAE;IACtB,OAAO,MAAM,KAAK,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;EACpE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE;EAC3C,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE;IAC/C,OAAO,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;EACvD;EACA,OAAO,UAAS,MAAM,EAAE;IACtB,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;IAChC,OAAQ,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,GACnD,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GACnB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,sBAAsB,GAAG,oBAAoB,CAAC;EAC/F,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,IAAI,EAAE;EAC9B,OAAO,UAAS,MAAM,EAAE;IACtB,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;EAC9B,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B;EACA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;IAC5B,OAAO,KAAK;EACd;EACA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACnB,OAAO,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;EACzD;EACA,IAAI,MAAM,GAAI,KAAK,GAAG,EAAG;EACzB,OAAQ,MAAM,IAAI,GAAG,IAAK,CAAC,GAAG,KAAK,IAAK,CAAC,QAAQ,GAAI,IAAI,GAAG,MAAM;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE;EAC7C,OAAO,UAAS,UAAU,EAAE,QAAQ,EAAE;IACpC,IAAI,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,eAAe,GAAG,cAAc;MAC7D,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;IAElD,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC;EACzE,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE;EAC3C,OAAO,UAAS,UAAU,EAAE,QAAQ,EAAE;IACpC,IAAI,UAAU,IAAI,IAAI,EAAE;MACtB,OAAO,UAAU;IACnB;IACA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;MAC5B,OAAO,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IACvC;IACA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM;MAC1B,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;MAC/B,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;IAEjC,OAAQ,SAAS,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,MAAM,EAAG;MAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,KAAK,EAAE;QACxD;MACF;IACF;IACA,OAAO,UAAU;EACnB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,SAAS,EAAE;EAChC,OAAO,UAAS,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;MACV,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;MACzB,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;MACxB,MAAM,GAAG,KAAK,CAAC,MAAM;IAEzB,OAAO,MAAM,EAAE,EAAE;MACf,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,MAAM,GAAG,EAAE,KAAK,CAAC;MAC7C,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK,EAAE;QACpD;MACF;IACF;IACA,OAAO,MAAM;EACf,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;EACxE,IAAI,SAAS,GAAG,OAAO,GAAG,oBAAoB;IAC1C,SAAS,GAAG,KAAK,CAAC,MAAM;IACxB,SAAS,GAAG,KAAK,CAAC,MAAM;EAE5B,IAAI,SAAS,IAAI,SAAS,IAAI,EAAE,SAAS,IAAI,SAAS,GAAG,SAAS,CAAC,EAAE;IACnE,OAAO,KAAK;EACd;EACA;EACA,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;EAC9B,IAAI,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;IAC/B,OAAO,OAAO,IAAI,KAAK;EACzB;EACA,IAAI,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,IAAI;IACb,IAAI,GAAI,OAAO,GAAG,sBAAsB,GAAI,IAAI,QAAQ,CAAD,CAAC,GAAG,SAAS;EAExE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;EACvB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;;EAEvB;EACA,OAAO,EAAE,KAAK,GAAG,SAAS,EAAE;IAC1B,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;MACvB,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;IAE3B,IAAI,UAAU,EAAE;MACd,IAAI,QAAQ,GAAG,SAAS,GACpB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAC1D,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAChE;IACA,IAAI,QAAQ,KAAK,SAAS,EAAE;MAC1B,IAAI,QAAQ,EAAE;QACZ;MACF;MACA,MAAM,GAAG,KAAK;MACd;IACF;IACA;IACA,IAAI,IAAI,EAAE;MACR,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,UAAS,QAAQ,EAAE,QAAQ,EAAE;QAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAClB,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE;UACxF,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3B;MACF,CAAC,CAAC,EAAE;QACN,MAAM,GAAG,KAAK;QACd;MACF;IACF,CAAC,MAAM,IAAI,EACL,QAAQ,KAAK,QAAQ,IACnB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAC5D,EAAE;MACL,MAAM,GAAG,KAAK;MACd;IACF;EACF;EACA,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;EACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;EACtB,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;EAC7E,QAAQ,GAAG;IACT,KAAK,WAAW;MACd,IAAK,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,IACrC,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,UAAW,EAAE;QAC3C,OAAO,KAAK;MACd;MACA,MAAM,GAAG,MAAM,CAAC,MAAM;MACtB,KAAK,GAAG,KAAK,CAAC,MAAM;IAEtB,KAAK,cAAc;MACjB,IAAK,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,IACtC,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;QAC7D,OAAO,KAAK;MACd;MACA,OAAO,IAAI;IAEb,KAAK,OAAO;IACZ,KAAK,OAAO;IACZ,KAAK,SAAS;MACZ;MACA;MACA,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;IAE5B,KAAK,QAAQ;MACX,OAAO,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;IAErE,KAAK,SAAS;IACd,KAAK,SAAS;MACZ;MACA;MACA;MACA,OAAO,MAAM,IAAK,KAAK,GAAG,EAAG;IAE/B,KAAK,MAAM;MACT,IAAI,OAAO,GAAG,UAAU;IAE1B,KAAK,MAAM;MACT,IAAI,SAAS,GAAG,OAAO,GAAG,oBAAoB;MAC9C,OAAO,KAAK,OAAO,GAAG,UAAU,CAAC;MAEjC,IAAI,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;QAC3C,OAAO,KAAK;MACd;MACA;MACA,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;MAC/B,IAAI,OAAO,EAAE;QACX,OAAO,OAAO,IAAI,KAAK;MACzB;MACA,OAAO,IAAI,sBAAsB;;MAEjC;MACA,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;MACxB,IAAI,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC;MAChG,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;MACvB,OAAO,MAAM;IAEf,KAAK,SAAS;MACZ,IAAI,aAAa,EAAE;QACjB,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;MAChE;EACJ;EACA,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;EAC1E,IAAI,SAAS,GAAG,OAAO,GAAG,oBAAoB;IAC1C,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IACvB,SAAS,GAAG,QAAQ,CAAC,MAAM;IAC3B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;IACtB,SAAS,GAAG,QAAQ,CAAC,MAAM;EAE/B,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE;IACxC,OAAO,KAAK;EACd;EACA,IAAI,KAAK,GAAG,SAAS;EACrB,OAAO,KAAK,EAAE,EAAE;IACd,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;IACzB,IAAI,EAAE,SAAS,GAAG,GAAG,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE;MACjE,OAAO,KAAK;IACd;EACF;EACA;EACA,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;EAC/B,IAAI,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;IAC/B,OAAO,OAAO,IAAI,KAAK;EACzB;EACA,IAAI,MAAM,GAAG,IAAI;EACjB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;EACxB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC;EAExB,IAAI,QAAQ,GAAG,SAAS;EACxB,OAAO,EAAE,KAAK,GAAG,SAAS,EAAE;IAC1B,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;MACtB,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;IAEzB,IAAI,UAAU,EAAE;MACd,IAAI,QAAQ,GAAG,SAAS,GACpB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GACzD,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;IAC/D;IACA;IACA,IAAI,EAAE,QAAQ,KAAK,SAAS,GACnB,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,GACnF,QAAQ,CACX,EAAE;MACL,MAAM,GAAG,KAAK;MACd;IACF;IACA,QAAQ,KAAK,QAAQ,GAAG,GAAG,IAAI,aAAa,CAAC;EAC/C;EACA,IAAI,MAAM,IAAI,CAAC,QAAQ,EAAE;IACvB,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW;MAC5B,OAAO,GAAG,KAAK,CAAC,WAAW;;IAE/B;IACA,IAAI,OAAO,IAAI,OAAO,IACjB,aAAa,IAAI,MAAM,IAAI,aAAa,IAAI,KAAM,IACnD,EAAE,OAAO,OAAO,IAAI,UAAU,IAAI,OAAO,YAAY,OAAO,IAC1D,OAAO,OAAO,IAAI,UAAU,IAAI,OAAO,YAAY,OAAO,CAAC,EAAE;MACjE,MAAM,GAAG,KAAK;IAChB;EACF;EACA,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;EACvB,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;EACtB,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE;EAC5B,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ;EACvB,OAAO,SAAS,CAAC,GAAG,CAAC,GACjB,IAAI,CAAC,OAAO,GAAG,IAAI,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,GAChD,IAAI,CAAC,GAAG;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,MAAM,EAAE;EAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACrB,MAAM,GAAG,MAAM,CAAC,MAAM;EAE1B,OAAO,MAAM,EAAE,EAAE;IACf,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;MACpB,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;IAEvB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;EAC1D;EACA,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE;EAC9B,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;EACjC,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,SAAS;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG,UAAU;;AAEvB;AACA;AACA,IAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,IACnE,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAD,CAAC,CAAC,IAAI,MAAO,IACjC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,UAAW,IACnD,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAD,CAAC,CAAC,IAAI,MAAO,IACjC,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,CAAD,CAAC,CAAC,IAAI,UAAW,EAAE;EAClD,MAAM,GAAG,SAAA,CAAS,KAAK,EAAE;IACvB,IAAI,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;MACnC,IAAI,GAAG,MAAM,IAAI,SAAS,GAAG,KAAK,CAAC,WAAW,GAAG,SAAS;MAC1D,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS;IAElD,IAAI,UAAU,EAAE;MACd,QAAQ,UAAU;QAChB,KAAK,kBAAkB;UAAE,OAAO,WAAW;QAC3C,KAAK,aAAa;UAAE,OAAO,MAAM;QACjC,KAAK,iBAAiB;UAAE,OAAO,UAAU;QACzC,KAAK,aAAa;UAAE,OAAO,MAAM;QACjC,KAAK,iBAAiB;UAAE,OAAO,UAAU;MAC3C;IACF;IACA,OAAO,MAAM;EACf,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;EACtC,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;EAEpD,IAAI,MAAM;IACN,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,IAAI,CAAC,MAAM;EAExB,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;IACvB,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE;MACtD;IACF;IACA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;EACtB;EACA,IAAI,MAAM,EAAE;IACV,OAAO,MAAM;EACf;EACA,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;EACvC,OAAO,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KACxD,OAAO,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;EAC9B,MAAM,GAAG,MAAM,IAAI,IAAI,GAAG,gBAAgB,GAAG,MAAM;EACnD,OAAO,CAAC,CAAC,MAAM,KACZ,OAAO,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IACjD,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,MAAO;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE;EAC5B,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;IAClB,OAAO,KAAK;EACd;EACA,IAAI,IAAI,GAAG,OAAO,KAAK;EACvB,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,IACzD,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IACpC,OAAO,IAAI;EACb;EACA,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAC1D,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,CAAE;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,KAAK,EAAE;EACxB,IAAI,IAAI,GAAG,OAAO,KAAK;EACvB,OAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,GAChF,KAAK,KAAK,WAAW,GACrB,KAAK,KAAK,IAAK;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,IAAI,EAAE;EACtB,OAAO,CAAC,CAAC,UAAU,IAAK,UAAU,IAAI,IAAK;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC1B,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,WAAW;IACjC,KAAK,GAAI,OAAO,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS,IAAK,WAAW;EAExE,OAAO,KAAK,KAAK,KAAK;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,KAAK,EAAE;EACjC,OAAO,KAAK,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,GAAG,EAAE,QAAQ,EAAE;EAC9C,OAAO,UAAS,MAAM,EAAE;IACtB,IAAI,MAAM,IAAI,IAAI,EAAE;MAClB,OAAO,KAAK;IACd;IACA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,KAC5B,QAAQ,KAAK,SAAS,IAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAE,CAAC;EACvD,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,OAAO,CAAC,UAAS,MAAM,EAAE;EAC1C,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAEzB,IAAI,MAAM,GAAG,EAAE;EACf,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;IAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;EACjB;EACA,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,UAAS,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAChE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,GAAI,MAAM,IAAI,KAAM,CAAC;EAC7E,CAAC,CAAC;EACF,OAAO,MAAM;AACf,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,CAAC,KAAK,EAAE;EACpB,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC/C,OAAO,KAAK;EACd;EACA,IAAI,MAAM,GAAI,KAAK,GAAG,EAAG;EACzB,OAAQ,MAAM,IAAI,GAAG,IAAK,CAAC,GAAG,KAAK,IAAK,CAAC,QAAQ,GAAI,IAAI,GAAG,MAAM;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,IAAI,EAAE;EACtB,IAAI,IAAI,IAAI,IAAI,EAAE;IAChB,IAAI;MACF,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACb,IAAI;MACF,OAAQ,IAAI,GAAG,EAAE;IACnB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;EACf;EACA,OAAO,EAAE;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,GAAG,gBAAgB,CAAC,UAAS,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;EAC1D,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;IACpC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;EACzB,CAAC,MAAM;IACL,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;EACvB;AACF,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE;EAC/B,IAAI,OAAO,IAAI,IAAI,UAAU,IAAK,QAAQ,IAAI,OAAO,QAAQ,IAAI,UAAW,EAAE;IAC5E,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC;EACtC;EACA,IAAI,QAAQ,GAAG,SAAA,CAAA,EAAW;IACxB,IAAI,IAAI,GAAG,SAAS;MAChB,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;MACrD,KAAK,GAAG,QAAQ,CAAC,KAAK;IAE1B,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;MAClB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACvB;IACA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;IACvC,OAAO,MAAM;EACf,CAAC;EACD,QAAQ,CAAC,KAAK,GAAG,KAAK,OAAO,CAAC,KAAK,IAAI,QAAQ,GAAC;EAChD,OAAO,QAAQ;AACjB;;AAEA;AACA,OAAO,CAAC,KAAK,GAAG,QAAQ;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE;EACxB,OAAO,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAM;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC1B;EACA,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,KACpE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC;AAC1F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC1B,OAAO,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;EAChC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,KAAK,EAAE;EACzB;EACA;EACA,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;EAC3D,OAAO,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,MAAM;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,OAAO,KAAK,IAAI,QAAQ,IAC7B,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,gBAAgB;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,IAAI,IAAI,GAAG,OAAO,KAAK;EACvB,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,UAAU,CAAC;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,OAAO,KAAK,IAAI,QAAQ,IAC5B,YAAY,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAU;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC,GAAG,gBAAgB;;AAEpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;EACvC,IAAI,MAAM,GAAG,MAAM,IAAI,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;EAC/D,OAAO,MAAM,KAAK,SAAS,GAAG,YAAY,GAAG,MAAM;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;EAC3B,OAAO,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,MAAM,EAAE;EACpB,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CA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AACA;AACA,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE;EACxB,OAAO,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAM;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG,eAAe,CAAC,YAAW;EAAE,OAAO,SAAS;AAAE,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,GAAG,UAAS,KAAK,EAAE;EACxG,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAChE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC/C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC1B,OAAO,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG,cAAc,IAAI,SAAS;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE;EAC7B,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,KAAK,EAAE;EACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACpB,OAAO,KAAK;EACd;EACA;EACA;EACA,IAAI,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC;EAC3B,OAAO,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ;AAC9E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,OAAO,KAAK,IAAI,QAAQ,IAC7B,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,gBAAgB;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,IAAI,IAAI,GAAG,OAAO,KAAK;EACvB,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,UAAU,CAAC;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,IAAI,QAAQ;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,gBAAgB,GAAG,SAAS,C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C,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAE1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAE1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAEzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC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E,EAAE,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CACrD;AAED,IAAI,EAAE,GAAG,CACP,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACpD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CACrD;AAED,IAAI,EAAE,GAAG,CACP,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACtD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACtD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACvD;AAED,IAAI,EAAE,GAAG,CACP,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAA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AO,QAAQ,KAAK,QAAQ,EAAE;MACvC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC1B,CAAC,MAAM;MACL,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IAChB;IACA,OAAO,GAAG;EACZ,CAAC;AACH;AAEA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;EAC3B,IAAI;IACF,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,gBAAgB;EACrE,CAAC,CAAC,OAAO,CAAC,EAAE;IACV;IACA;EAAA;AAEJ;AAEA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;EACpB,KAAK,CAAC,SAAS,GAAG;IAChB,UAAU,EAAE,KAAK,CAAC;EACpB,CAAC;EACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;IAC1B,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,CAAC,gBAAgB;EAC5D;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,KAAK;;;;;AC5EtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,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Q,GAAG,QAAQ;AACvB,OAAO,CAAC,OAAO,GAAG,QAAQ;;;AChB1B,YAAY;;AAEZ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE;EAC3C,KAAK,EAAE;AACT,CAAC,CAAC;AACF,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;AAExB,IAAI,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAEhE,SAAS,sBAAsB,CAAC,GAAG,EAAE;EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,GAAG;IAAE,OAAO,EAAE;EAAI,CAAC;AAAE;AAE9F,SAAS,OAAO,CAAC,IAAI,EAAE;EACrB,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;IACjC,MAAM,SAAS,CAAC,cAAc,CAAC;EACjC;EAEA,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACzC;AAEA,IAAI,QAAQ,GAAG,OAAO;AACtB,OAAO,CAAC,OAAO,GAAG,QAAQ;;;ACpB1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", + "file": "generated.js", + "sourceRoot": "", + "sourcesContent": [ + "(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i {\n const worksheet = this.workbook.addWorksheet(options.sheetName);\n\n const dateFormats = options.dateFormats || [\n 'YYYY-MM-DD[T]HH:mm:ssZ',\n 'YYYY-MM-DD[T]HH:mm:ss',\n 'MM-DD-YYYY',\n 'YYYY-MM-DD',\n ];\n const map =\n options.map ||\n function(datum) {\n if (datum === '') {\n return null;\n }\n const datumNumber = Number(datum);\n if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) {\n return datumNumber;\n }\n const dt = dateFormats.reduce((matchingDate, currentDateFormat) => {\n if (matchingDate) {\n return matchingDate;\n }\n const dayjsObj = dayjs(datum, currentDateFormat, true);\n if (dayjsObj.isValid()) {\n return dayjsObj;\n }\n return null;\n }, null);\n if (dt) {\n return new Date(dt.valueOf());\n }\n const special = SpecialValues[datum];\n if (special !== undefined) {\n return special;\n }\n return datum;\n };\n\n const csvStream = fastCsv\n .parse(options.parserOptions)\n .on('data', data => {\n worksheet.addRow(data.map(map));\n })\n .on('end', () => {\n csvStream.emit('worksheet', worksheet);\n });\n\n csvStream.on('worksheet', resolve).on('error', reject);\n\n stream.pipe(csvStream);\n });\n }\n\n /**\n * @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\n */\n createInputStream() {\n throw new Error(\n '`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\n );\n }\n\n write(stream, options) {\n return new Promise((resolve, reject) => {\n options = options || {};\n // const encoding = options.encoding || 'utf8';\n // const separator = options.separator || ',';\n // const quoteChar = options.quoteChar || '\\'';\n\n const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId);\n\n const csvStream = fastCsv.format(options.formatterOptions);\n stream.on('finish', () => {\n resolve();\n });\n csvStream.on('error', reject);\n csvStream.pipe(stream);\n\n const {dateFormat, dateUTC} = options;\n const map =\n options.map ||\n (value => {\n if (value) {\n if (value.text || value.hyperlink) {\n return value.hyperlink || value.text || '';\n }\n if (value.formula || value.result) {\n return value.result || '';\n }\n if (value instanceof Date) {\n if (dateFormat) {\n return dateUTC\n ? dayjs.utc(value).format(dateFormat)\n : dayjs(value).format(dateFormat);\n }\n return dateUTC ? dayjs.utc(value).format() : dayjs(value).format();\n }\n if (value.error) {\n return value.error;\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n }\n return value;\n });\n\n const includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows;\n let lastRow = 1;\n if (worksheet) {\n worksheet.eachRow((row, rowNumber) => {\n if (includeEmptyRows) {\n while (lastRow++ < rowNumber - 1) {\n csvStream.write([]);\n }\n }\n const {values} = row;\n values.shift();\n csvStream.write(values.map(map));\n lastRow = rowNumber;\n });\n }\n csvStream.end();\n });\n }\n\n writeFile(filename, options) {\n options = options || {};\n\n const streamOptions = {\n encoding: options.encoding || 'utf8',\n };\n const stream = fs.createWriteStream(filename, streamOptions);\n\n return this.write(stream, options);\n }\n\n async writeBuffer(options) {\n const stream = new StreamBuf();\n await this.write(stream, options);\n return stream.read();\n }\n}\n\nmodule.exports = CSV;\n", + "'use strict';\n\nconst colCache = require('../utils/col-cache');\n\nclass Anchor {\n constructor(worksheet, address, offset = 0) {\n this.worksheet = worksheet;\n\n if (!address) {\n this.nativeCol = 0;\n this.nativeColOff = 0;\n this.nativeRow = 0;\n this.nativeRowOff = 0;\n } else if (typeof address === 'string') {\n const decoded = colCache.decodeAddress(address);\n this.nativeCol = decoded.col + offset;\n this.nativeColOff = 0;\n this.nativeRow = decoded.row + offset;\n this.nativeRowOff = 0;\n } else if (address.nativeCol !== undefined) {\n this.nativeCol = address.nativeCol || 0;\n this.nativeColOff = address.nativeColOff || 0;\n this.nativeRow = address.nativeRow || 0;\n this.nativeRowOff = address.nativeRowOff || 0;\n } else if (address.col !== undefined) {\n this.col = address.col + offset;\n this.row = address.row + offset;\n } else {\n this.nativeCol = 0;\n this.nativeColOff = 0;\n this.nativeRow = 0;\n this.nativeRowOff = 0;\n }\n }\n\n static asInstance(model) {\n return model instanceof Anchor || model == null ? model : new Anchor(model);\n }\n\n get col() {\n return this.nativeCol + (Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth);\n }\n\n set col(v) {\n this.nativeCol = Math.floor(v);\n this.nativeColOff = Math.floor((v - this.nativeCol) * this.colWidth);\n }\n\n get row() {\n return this.nativeRow + (Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight);\n }\n\n set row(v) {\n this.nativeRow = Math.floor(v);\n this.nativeRowOff = Math.floor((v - this.nativeRow) * this.rowHeight);\n }\n\n get colWidth() {\n return this.worksheet &&\n this.worksheet.getColumn(this.nativeCol + 1) &&\n this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth\n ? Math.floor(this.worksheet.getColumn(this.nativeCol + 1).width * 10000)\n : 640000;\n }\n\n get rowHeight() {\n return this.worksheet &&\n this.worksheet.getRow(this.nativeRow + 1) &&\n this.worksheet.getRow(this.nativeRow + 1).height\n ? Math.floor(this.worksheet.getRow(this.nativeRow + 1).height * 10000)\n : 180000;\n }\n\n get model() {\n return {\n nativeCol: this.nativeCol,\n nativeColOff: this.nativeColOff,\n nativeRow: this.nativeRow,\n nativeRowOff: this.nativeRowOff,\n };\n }\n\n set model(value) {\n this.nativeCol = value.nativeCol;\n this.nativeColOff = value.nativeColOff;\n this.nativeRow = value.nativeRow;\n this.nativeRowOff = value.nativeRowOff;\n }\n}\n\nmodule.exports = Anchor;\n", + "/* eslint-disable max-classes-per-file */\nconst colCache = require('../utils/col-cache');\nconst _ = require('../utils/under-dash');\nconst Enums = require('./enums');\nconst {slideFormula} = require('../utils/shared-formula');\nconst Note = require('./note');\n// Cell requirements\n// Operate inside a worksheet\n// Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc.\n// Manage/use and manipulate cell format either as local to cell or inherited from column or row.\n\nclass Cell {\n constructor(row, column, address) {\n if (!row || !column) {\n throw new Error('A Cell needs a Row');\n }\n\n this._row = row;\n this._column = column;\n\n colCache.validateAddress(address);\n this._address = address;\n\n // TODO: lazy evaluation of this._value\n this._value = Value.create(Cell.Types.Null, this);\n\n this.style = this._mergeStyle(row.style, column.style, {});\n\n this._mergeCount = 0;\n }\n\n get worksheet() {\n return this._row.worksheet;\n }\n\n get workbook() {\n return this._row.worksheet.workbook;\n }\n\n // help GC by removing cyclic (and other) references\n destroy() {\n delete this.style;\n delete this._value;\n delete this._row;\n delete this._column;\n delete this._address;\n }\n\n // =========================================================================\n // Styles stuff\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this.style.numFmt = value;\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this.style.font = value;\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this.style.alignment = value;\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this.style.border = value;\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this.style.fill = value;\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this.style.protection = value;\n }\n\n _mergeStyle(rowStyle, colStyle, style) {\n const numFmt = (rowStyle && rowStyle.numFmt) || (colStyle && colStyle.numFmt);\n if (numFmt) style.numFmt = numFmt;\n\n const font = (rowStyle && rowStyle.font) || (colStyle && colStyle.font);\n if (font) style.font = font;\n\n const alignment = (rowStyle && rowStyle.alignment) || (colStyle && colStyle.alignment);\n if (alignment) style.alignment = alignment;\n\n const border = (rowStyle && rowStyle.border) || (colStyle && colStyle.border);\n if (border) style.border = border;\n\n const fill = (rowStyle && rowStyle.fill) || (colStyle && colStyle.fill);\n if (fill) style.fill = fill;\n\n const protection = (rowStyle && rowStyle.protection) || (colStyle && colStyle.protection);\n if (protection) style.protection = protection;\n\n return style;\n }\n\n // =========================================================================\n // return the address for this cell\n get address() {\n return this._address;\n }\n\n get row() {\n return this._row.number;\n }\n\n get col() {\n return this._column.number;\n }\n\n get $col$row() {\n return `$${this._column.letter}$${this.row}`;\n }\n\n // =========================================================================\n // Value stuff\n\n get type() {\n return this._value.type;\n }\n\n get effectiveType() {\n return this._value.effectiveType;\n }\n\n toCsvString() {\n return this._value.toCsvString();\n }\n\n // =========================================================================\n // Merge stuff\n\n addMergeRef() {\n this._mergeCount++;\n }\n\n releaseMergeRef() {\n this._mergeCount--;\n }\n\n get isMerged() {\n return this._mergeCount > 0 || this.type === Cell.Types.Merge;\n }\n\n merge(master, ignoreStyle) {\n this._value.release();\n this._value = Value.create(Cell.Types.Merge, this, master);\n if (!ignoreStyle) {\n this.style = master.style;\n }\n }\n\n unmerge() {\n if (this.type === Cell.Types.Merge) {\n this._value.release();\n this._value = Value.create(Cell.Types.Null, this);\n this.style = this._mergeStyle(this._row.style, this._column.style, {});\n }\n }\n\n isMergedTo(master) {\n if (this._value.type !== Cell.Types.Merge) return false;\n return this._value.isMergedTo(master);\n }\n\n get master() {\n if (this.type === Cell.Types.Merge) {\n return this._value.master;\n }\n return this; // an unmerged cell is its own master\n }\n\n get isHyperlink() {\n return this._value.type === Cell.Types.Hyperlink;\n }\n\n get hyperlink() {\n return this._value.hyperlink;\n }\n\n // return the value\n get value() {\n return this._value.value;\n }\n\n // set the value - can be number, string or raw\n set value(v) {\n // special case - merge cells set their master's value\n if (this.type === Cell.Types.Merge) {\n this._value.master.value = v;\n return;\n }\n\n this._value.release();\n\n // assign value\n this._value = Value.create(Value.getType(v), this, v);\n }\n\n get note() {\n return this._comment && this._comment.note;\n }\n\n set note(note) {\n this._comment = new Note(note);\n }\n\n get text() {\n return this._value.toString();\n }\n\n get html() {\n return _.escapeHtml(this.text);\n }\n\n toString() {\n return this.text;\n }\n\n _upgradeToHyperlink(hyperlink) {\n // if this cell is a string, turn it into a Hyperlink\n if (this.type === Cell.Types.String) {\n this._value = Value.create(Cell.Types.Hyperlink, this, {\n text: this._value.value,\n hyperlink,\n });\n }\n }\n\n // =========================================================================\n // Formula stuff\n get formula() {\n return this._value.formula;\n }\n\n get result() {\n return this._value.result;\n }\n\n get formulaType() {\n return this._value.formulaType;\n }\n\n // =========================================================================\n // Name stuff\n get fullAddress() {\n const {worksheet} = this._row;\n return {\n sheetName: worksheet.name,\n address: this.address,\n row: this.row,\n col: this.col,\n };\n }\n\n get name() {\n return this.names[0];\n }\n\n set name(value) {\n this.names = [value];\n }\n\n get names() {\n return this.workbook.definedNames.getNamesEx(this.fullAddress);\n }\n\n set names(value) {\n const {definedNames} = this.workbook;\n definedNames.removeAllNames(this.fullAddress);\n value.forEach(name => {\n definedNames.addEx(this.fullAddress, name);\n });\n }\n\n addName(name) {\n this.workbook.definedNames.addEx(this.fullAddress, name);\n }\n\n removeName(name) {\n this.workbook.definedNames.removeEx(this.fullAddress, name);\n }\n\n removeAllNames() {\n this.workbook.definedNames.removeAllNames(this.fullAddress);\n }\n\n // =========================================================================\n // Data Validation stuff\n get _dataValidations() {\n return this.worksheet.dataValidations;\n }\n\n get dataValidation() {\n return this._dataValidations.find(this.address);\n }\n\n set dataValidation(value) {\n this._dataValidations.add(this.address, value);\n }\n\n // =========================================================================\n // Model stuff\n\n get model() {\n const {model} = this._value;\n model.style = this.style;\n if (this._comment) {\n model.comment = this._comment.model;\n }\n return model;\n }\n\n set model(value) {\n this._value.release();\n this._value = Value.create(value.type, this);\n this._value.model = value;\n\n if (value.comment) {\n switch (value.comment.type) {\n case 'note':\n this._comment = Note.fromModel(value.comment);\n break;\n }\n }\n\n if (value.style) {\n this.style = value.style;\n } else {\n this.style = {};\n }\n }\n}\nCell.Types = Enums.ValueType;\n\n// =============================================================================\n// Internal Value Types\n\nclass NullValue {\n constructor(cell) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Null,\n };\n }\n\n get value() {\n return null;\n }\n\n set value(value) {\n // nothing to do\n }\n\n get type() {\n return Cell.Types.Null;\n }\n\n get effectiveType() {\n return Cell.Types.Null;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return '';\n }\n\n release() {}\n\n toString() {\n return '';\n }\n}\n\nclass NumberValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Number,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Number;\n }\n\n get effectiveType() {\n return Cell.Types.Number;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass StringValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.String;\n }\n\n get effectiveType() {\n return Cell.Types.String;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return `\"${this.model.value.replace(/\"/g, '\"\"')}\"`;\n }\n\n release() {}\n\n toString() {\n return this.model.value;\n }\n}\n\nclass RichTextValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n toString() {\n return this.model.value.richText.map(t => t.text).join('');\n }\n\n get type() {\n return Cell.Types.RichText;\n }\n\n get effectiveType() {\n return Cell.Types.RichText;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return `\"${this.text.replace(/\"/g, '\"\"')}\"`;\n }\n\n release() {}\n}\n\nclass DateValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Date,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Date;\n }\n\n get effectiveType() {\n return Cell.Types.Date;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toISOString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass HyperlinkValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Hyperlink,\n text: value ? value.text : undefined,\n hyperlink: value ? value.hyperlink : undefined,\n };\n if (value && value.tooltip) {\n this.model.tooltip = value.tooltip;\n }\n }\n\n get value() {\n const v = {\n text: this.model.text,\n hyperlink: this.model.hyperlink,\n };\n if (this.model.tooltip) {\n v.tooltip = this.model.tooltip;\n }\n return v;\n }\n\n set value(value) {\n this.model = {\n text: value.text,\n hyperlink: value.hyperlink,\n };\n if (value.tooltip) {\n this.model.tooltip = value.tooltip;\n }\n }\n\n get text() {\n return this.model.text;\n }\n\n set text(value) {\n this.model.text = value;\n }\n\n /*\n get tooltip() {\n return this.model.tooltip;\n }\n\n set tooltip(value) {\n this.model.tooltip = value;\n } */\n\n get hyperlink() {\n return this.model.hyperlink;\n }\n\n set hyperlink(value) {\n this.model.hyperlink = value;\n }\n\n get type() {\n return Cell.Types.Hyperlink;\n }\n\n get effectiveType() {\n return Cell.Types.Hyperlink;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.hyperlink;\n }\n\n release() {}\n\n toString() {\n return this.model.text;\n }\n}\n\nclass MergeValue {\n constructor(cell, master) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Merge,\n master: master ? master.address : undefined,\n };\n this._master = master;\n if (master) {\n master.addMergeRef();\n }\n }\n\n get value() {\n return this._master.value;\n }\n\n set value(value) {\n if (value instanceof Cell) {\n if (this._master) {\n this._master.releaseMergeRef();\n }\n value.addMergeRef();\n this._master = value;\n } else {\n this._master.value = value;\n }\n }\n\n isMergedTo(master) {\n return master === this._master;\n }\n\n get master() {\n return this._master;\n }\n\n get type() {\n return Cell.Types.Merge;\n }\n\n get effectiveType() {\n return this._master.effectiveType;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return '';\n }\n\n release() {\n this._master.releaseMergeRef();\n }\n\n toString() {\n return this.value.toString();\n }\n}\n\nclass FormulaValue {\n constructor(cell, value) {\n this.cell = cell;\n\n this.model = {\n address: cell.address,\n type: Cell.Types.Formula,\n shareType: value ? value.shareType : undefined,\n ref: value ? value.ref : undefined,\n formula: value ? value.formula : undefined,\n sharedFormula: value ? value.sharedFormula : undefined,\n result: value ? value.result : undefined,\n };\n }\n\n _copyModel(model) {\n const copy = {};\n const cp = name => {\n const value = model[name];\n if (value) {\n copy[name] = value;\n }\n };\n cp('formula');\n cp('result');\n cp('ref');\n cp('shareType');\n cp('sharedFormula');\n return copy;\n }\n\n get value() {\n return this._copyModel(this.model);\n }\n\n set value(value) {\n this.model = this._copyModel(value);\n }\n\n validate(value) {\n switch (Value.getType(value)) {\n case Cell.Types.Null:\n case Cell.Types.String:\n case Cell.Types.Number:\n case Cell.Types.Date:\n break;\n case Cell.Types.Hyperlink:\n case Cell.Types.Formula:\n default:\n throw new Error('Cannot process that type of result value');\n }\n }\n\n get dependencies() {\n // find all the ranges and cells mentioned in the formula\n const ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g);\n const cells = this.formula\n .replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g, '')\n .match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}/g);\n return {\n ranges,\n cells,\n };\n }\n\n get formula() {\n return this.model.formula || this._getTranslatedFormula();\n }\n\n set formula(value) {\n this.model.formula = value;\n }\n\n get formulaType() {\n if (this.model.formula) {\n return Enums.FormulaType.Master;\n }\n if (this.model.sharedFormula) {\n return Enums.FormulaType.Shared;\n }\n return Enums.FormulaType.None;\n }\n\n get result() {\n return this.model.result;\n }\n\n set result(value) {\n this.model.result = value;\n }\n\n get type() {\n return Cell.Types.Formula;\n }\n\n get effectiveType() {\n const v = this.model.result;\n if (v === null || v === undefined) {\n return Enums.ValueType.Null;\n }\n if (v instanceof String || typeof v === 'string') {\n return Enums.ValueType.String;\n }\n if (typeof v === 'number') {\n return Enums.ValueType.Number;\n }\n if (v instanceof Date) {\n return Enums.ValueType.Date;\n }\n if (v.text && v.hyperlink) {\n return Enums.ValueType.Hyperlink;\n }\n if (v.formula) {\n return Enums.ValueType.Formula;\n }\n\n return Enums.ValueType.Null;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n _getTranslatedFormula() {\n if (!this._translatedFormula && this.model.sharedFormula) {\n const {worksheet} = this.cell;\n const master = worksheet.findCell(this.model.sharedFormula);\n this._translatedFormula =\n master && slideFormula(master.formula, master.address, this.model.address);\n }\n return this._translatedFormula;\n }\n\n toCsvString() {\n return `${this.model.result || ''}`;\n }\n\n release() {}\n\n toString() {\n return this.model.result ? this.model.result.toString() : '';\n }\n}\n\nclass SharedStringValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.SharedString,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.SharedString;\n }\n\n get effectiveType() {\n return Cell.Types.SharedString;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass BooleanValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Boolean,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Boolean;\n }\n\n get effectiveType() {\n return Cell.Types.Boolean;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value ? 1 : 0;\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass ErrorValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Error,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Error;\n }\n\n get effectiveType() {\n return Cell.Types.Error;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.error.toString();\n }\n}\n\nclass JSONValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value: JSON.stringify(value),\n rawValue: value,\n };\n }\n\n get value() {\n return this.model.rawValue;\n }\n\n set value(value) {\n this.model.rawValue = value;\n this.model.value = JSON.stringify(value);\n }\n\n get type() {\n return Cell.Types.String;\n }\n\n get effectiveType() {\n return Cell.Types.String;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value;\n }\n\n release() {}\n\n toString() {\n return this.model.value;\n }\n}\n\n// Value is a place to hold common static Value type functions\nconst Value = {\n getType(value) {\n if (value === null || value === undefined) {\n return Cell.Types.Null;\n }\n if (value instanceof String || typeof value === 'string') {\n return Cell.Types.String;\n }\n if (typeof value === 'number') {\n return Cell.Types.Number;\n }\n if (typeof value === 'boolean') {\n return Cell.Types.Boolean;\n }\n if (value instanceof Date) {\n return Cell.Types.Date;\n }\n if (value.text && value.hyperlink) {\n return Cell.Types.Hyperlink;\n }\n if (value.formula || value.sharedFormula) {\n return Cell.Types.Formula;\n }\n if (value.richText) {\n return Cell.Types.RichText;\n }\n if (value.sharedString) {\n return Cell.Types.SharedString;\n }\n if (value.error) {\n return Cell.Types.Error;\n }\n return Cell.Types.JSON;\n },\n\n // map valueType to constructor\n types: [\n {t: Cell.Types.Null, f: NullValue},\n {t: Cell.Types.Number, f: NumberValue},\n {t: Cell.Types.String, f: StringValue},\n {t: Cell.Types.Date, f: DateValue},\n {t: Cell.Types.Hyperlink, f: HyperlinkValue},\n {t: Cell.Types.Formula, f: FormulaValue},\n {t: Cell.Types.Merge, f: MergeValue},\n {t: Cell.Types.JSON, f: JSONValue},\n {t: Cell.Types.SharedString, f: SharedStringValue},\n {t: Cell.Types.RichText, f: RichTextValue},\n {t: Cell.Types.Boolean, f: BooleanValue},\n {t: Cell.Types.Error, f: ErrorValue},\n ].reduce((p, t) => {\n p[t.t] = t.f;\n return p;\n }, []),\n\n create(type, cell, value) {\n const T = this.types[type];\n if (!T) {\n throw new Error(`Could not create Value of type ${type}`);\n }\n return new T(cell, value);\n },\n};\n\nmodule.exports = Cell;\n", + "'use strict';\n\nconst _ = require('../utils/under-dash');\n\nconst Enums = require('./enums');\nconst colCache = require('../utils/col-cache');\n\nconst DEFAULT_COLUMN_WIDTH = 9;\n\n// Column defines the column properties for 1 column.\n// This includes header rows, widths, key, (style), etc.\n// Worksheet will condense the columns as appropriate during serialization\nclass Column {\n constructor(worksheet, number, defn) {\n this._worksheet = worksheet;\n this._number = number;\n if (defn !== false) {\n // sometimes defn will follow\n this.defn = defn;\n }\n }\n\n get number() {\n return this._number;\n }\n\n get worksheet() {\n return this._worksheet;\n }\n\n get letter() {\n return colCache.n2l(this._number);\n }\n\n get isCustomWidth() {\n return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH;\n }\n\n get defn() {\n return {\n header: this._header,\n key: this.key,\n width: this.width,\n style: this.style,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n };\n }\n\n set defn(value) {\n if (value) {\n this.key = value.key;\n this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH;\n this.outlineLevel = value.outlineLevel;\n if (value.style) {\n this.style = value.style;\n } else {\n this.style = {};\n }\n\n // headers must be set after style\n this.header = value.header;\n this._hidden = !!value.hidden;\n } else {\n delete this._header;\n delete this._key;\n delete this.width;\n this.style = {};\n this.outlineLevel = 0;\n }\n }\n\n get headers() {\n return this._header && this._header instanceof Array ? this._header : [this._header];\n }\n\n get header() {\n return this._header;\n }\n\n set header(value) {\n if (value !== undefined) {\n this._header = value;\n this.headers.forEach((text, index) => {\n this._worksheet.getCell(index + 1, this.number).value = text;\n });\n } else {\n this._header = undefined;\n }\n }\n\n get key() {\n return this._key;\n }\n\n set key(value) {\n const column = this._key && this._worksheet.getColumnKey(this._key);\n if (column === this) {\n this._worksheet.deleteColumnKey(this._key);\n }\n\n this._key = value;\n if (value) {\n this._worksheet.setColumnKey(this._key, this);\n }\n }\n\n get hidden() {\n return !!this._hidden;\n }\n\n set hidden(value) {\n this._hidden = value;\n }\n\n get outlineLevel() {\n return this._outlineLevel || 0;\n }\n\n set outlineLevel(value) {\n this._outlineLevel = value;\n }\n\n get collapsed() {\n return !!(\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol\n );\n }\n\n toString() {\n return JSON.stringify({\n key: this.key,\n width: this.width,\n headers: this.headers.length ? this.headers : undefined,\n });\n }\n\n equivalentTo(other) {\n return (\n this.width === other.width &&\n this.hidden === other.hidden &&\n this.outlineLevel === other.outlineLevel &&\n _.isEqual(this.style, other.style)\n );\n }\n\n get isDefault() {\n if (this.isCustomWidth) {\n return false;\n }\n if (this.hidden) {\n return false;\n }\n if (this.outlineLevel) {\n return false;\n }\n const s = this.style;\n if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) {\n return false;\n }\n return true;\n }\n\n get headerCount() {\n return this.headers.length;\n }\n\n eachCell(options, iteratee) {\n const colNumber = this.number;\n if (!iteratee) {\n iteratee = options;\n options = null;\n }\n this._worksheet.eachRow(options, (row, rowNumber) => {\n iteratee(row.getCell(colNumber), rowNumber);\n });\n }\n\n get values() {\n const v = [];\n this.eachCell((cell, rowNumber) => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n v[rowNumber] = cell.value;\n }\n });\n return v;\n }\n\n set values(v) {\n if (!v) {\n return;\n }\n const colNumber = this.number;\n let offset = 0;\n if (v.hasOwnProperty('0')) {\n // assume contiguous array, start at row 1\n offset = 1;\n }\n v.forEach((value, index) => {\n this._worksheet.getCell(index + offset, colNumber).value = value;\n });\n }\n\n // =========================================================================\n // styles\n _applyStyle(name, value) {\n this.style[name] = value;\n this.eachCell(cell => {\n cell[name] = value;\n });\n return value;\n }\n\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this._applyStyle('numFmt', value);\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this._applyStyle('font', value);\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this._applyStyle('alignment', value);\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this._applyStyle('protection', value);\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this._applyStyle('border', value);\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this._applyStyle('fill', value);\n }\n\n // =============================================================================\n // static functions\n\n static toModel(columns) {\n // Convert array of Column into compressed list cols\n const cols = [];\n let col = null;\n if (columns) {\n columns.forEach((column, index) => {\n if (column.isDefault) {\n if (col) {\n col = null;\n }\n } else if (!col || !column.equivalentTo(col)) {\n col = {\n min: index + 1,\n max: index + 1,\n width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH,\n style: column.style,\n isCustomWidth: column.isCustomWidth,\n hidden: column.hidden,\n outlineLevel: column.outlineLevel,\n collapsed: column.collapsed,\n };\n cols.push(col);\n } else {\n col.max = index + 1;\n }\n });\n }\n return cols.length ? cols : undefined;\n }\n\n static fromModel(worksheet, cols) {\n cols = cols || [];\n const columns = [];\n let count = 1;\n let index = 0;\n /**\n * sort cols by min\n * If it is not sorted, the subsequent column configuration will be overwritten\n * */\n cols = cols.sort(function(pre, next) {\n return pre.min - next.min;\n });\n while (index < cols.length) {\n const col = cols[index++];\n while (count < col.min) {\n columns.push(new Column(worksheet, count++));\n }\n while (count <= col.max) {\n columns.push(new Column(worksheet, count++, col));\n }\n }\n return columns.length ? columns : null;\n }\n}\n\nmodule.exports = Column;\n", + "class DataValidations {\n constructor(model) {\n this.model = model || {};\n }\n\n add(address, validation) {\n return (this.model[address] = validation);\n }\n\n find(address) {\n return this.model[address];\n }\n\n remove(address) {\n this.model[address] = undefined;\n }\n}\n\nmodule.exports = DataValidations;\n", + "'use strict';\n\nconst _ = require('../utils/under-dash');\nconst colCache = require('../utils/col-cache');\nconst CellMatrix = require('../utils/cell-matrix');\nconst Range = require('./range');\n\nconst rangeRegexp = /[$](\\w+)[$](\\d+)(:[$](\\w+)[$](\\d+))?/;\n\nclass DefinedNames {\n constructor() {\n this.matrixMap = {};\n }\n\n getMatrix(name) {\n const matrix = this.matrixMap[name] || (this.matrixMap[name] = new CellMatrix());\n return matrix;\n }\n\n // add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2\n add(locStr, name) {\n const location = colCache.decodeEx(locStr);\n this.addEx(location, name);\n }\n\n addEx(location, name) {\n const matrix = this.getMatrix(name);\n if (location.top) {\n for (let col = location.left; col <= location.right; col++) {\n for (let row = location.top; row <= location.bottom; row++) {\n const address = {\n sheetName: location.sheetName,\n address: colCache.n2l(col) + row,\n row,\n col,\n };\n\n matrix.addCellEx(address);\n }\n }\n } else {\n matrix.addCellEx(location);\n }\n }\n\n remove(locStr, name) {\n const location = colCache.decodeEx(locStr);\n this.removeEx(location, name);\n }\n\n removeEx(location, name) {\n const matrix = this.getMatrix(name);\n matrix.removeCellEx(location);\n }\n\n removeAllNames(location) {\n _.each(this.matrixMap, matrix => {\n matrix.removeCellEx(location);\n });\n }\n\n forEach(callback) {\n _.each(this.matrixMap, (matrix, name) => {\n matrix.forEach(cell => {\n callback(name, cell);\n });\n });\n }\n\n // get all the names of a cell\n getNames(addressStr) {\n return this.getNamesEx(colCache.decodeEx(addressStr));\n }\n\n getNamesEx(address) {\n return _.map(this.matrixMap, (matrix, name) => matrix.findCellEx(address) && name).filter(\n Boolean\n );\n }\n\n _explore(matrix, cell) {\n cell.mark = false;\n const {sheetName} = cell;\n\n const range = new Range(cell.row, cell.col, cell.row, cell.col, sheetName);\n let x;\n let y;\n\n // grow vertical - only one col to worry about\n function vGrow(yy, edge) {\n const c = matrix.findCellAt(sheetName, yy, cell.col);\n if (!c || !c.mark) {\n return false;\n }\n range[edge] = yy;\n c.mark = false;\n return true;\n }\n for (y = cell.row - 1; vGrow(y, 'top'); y--);\n for (y = cell.row + 1; vGrow(y, 'bottom'); y++);\n\n // grow horizontal - ensure all rows can grow\n function hGrow(xx, edge) {\n const cells = [];\n for (y = range.top; y <= range.bottom; y++) {\n const c = matrix.findCellAt(sheetName, y, xx);\n if (c && c.mark) {\n cells.push(c);\n } else {\n return false;\n }\n }\n range[edge] = xx;\n for (let i = 0; i < cells.length; i++) {\n cells[i].mark = false;\n }\n return true;\n }\n for (x = cell.col - 1; hGrow(x, 'left'); x--);\n for (x = cell.col + 1; hGrow(x, 'right'); x++);\n\n return range;\n }\n\n getRanges(name, matrix) {\n matrix = matrix || this.matrixMap[name];\n\n if (!matrix) {\n return {name, ranges: []};\n }\n\n // mark and sweep!\n matrix.forEach(cell => {\n cell.mark = true;\n });\n const ranges = matrix\n .map(cell => cell.mark && this._explore(matrix, cell))\n .filter(Boolean)\n .map(range => range.$shortRange);\n\n return {\n name,\n ranges,\n };\n }\n\n normaliseMatrix(matrix, sheetName) {\n // some of the cells might have shifted on specified sheet\n // need to reassign rows, cols\n matrix.forEachInSheet(sheetName, (cell, row, col) => {\n if (cell) {\n if (cell.row !== row || cell.col !== col) {\n cell.row = row;\n cell.col = col;\n cell.address = colCache.n2l(col) + row;\n }\n }\n });\n }\n\n spliceRows(sheetName, start, numDelete, numInsert) {\n _.each(this.matrixMap, matrix => {\n matrix.spliceRows(sheetName, start, numDelete, numInsert);\n this.normaliseMatrix(matrix, sheetName);\n });\n }\n\n spliceColumns(sheetName, start, numDelete, numInsert) {\n _.each(this.matrixMap, matrix => {\n matrix.spliceColumns(sheetName, start, numDelete, numInsert);\n this.normaliseMatrix(matrix, sheetName);\n });\n }\n\n get model() {\n // To get names per cell - just iterate over all names finding cells if they exist\n return _.map(this.matrixMap, (matrix, name) => this.getRanges(name, matrix)).filter(\n definedName => definedName.ranges.length\n );\n }\n\n set model(value) {\n // value is [ { name, ranges }, ... ]\n const matrixMap = (this.matrixMap = {});\n value.forEach(definedName => {\n const matrix = (matrixMap[definedName.name] = new CellMatrix());\n definedName.ranges.forEach(rangeStr => {\n if (rangeRegexp.test(rangeStr.split('!').pop() || '')) {\n matrix.addCell(rangeStr);\n }\n });\n });\n }\n}\n\nmodule.exports = DefinedNames;\n", + "'use strict';\n\nmodule.exports = {\n ValueType: {\n Null: 0,\n Merge: 1,\n Number: 2,\n String: 3,\n Date: 4,\n Hyperlink: 5,\n Formula: 6,\n SharedString: 7,\n RichText: 8,\n Boolean: 9,\n Error: 10,\n },\n FormulaType: {\n None: 0,\n Master: 1,\n Shared: 2,\n },\n RelationshipType: {\n None: 0,\n OfficeDocument: 1,\n Worksheet: 2,\n CalcChain: 3,\n SharedStrings: 4,\n Styles: 5,\n Theme: 6,\n Hyperlink: 7,\n },\n DocumentType: {\n Xlsx: 1,\n },\n ReadingOrder: {\n LeftToRight: 1,\n RightToLeft: 2,\n },\n ErrorValue: {\n NotApplicable: '#N/A',\n Ref: '#REF!',\n Name: '#NAME?',\n DivZero: '#DIV/0!',\n Null: '#NULL!',\n Value: '#VALUE!',\n Num: '#NUM!',\n },\n};\n", + "const colCache = require('../utils/col-cache');\nconst Anchor = require('./anchor');\n\nclass Image {\n constructor(worksheet, model) {\n this.worksheet = worksheet;\n this.model = model;\n }\n\n get model() {\n switch (this.type) {\n case 'background':\n return {\n type: this.type,\n imageId: this.imageId,\n };\n case 'image':\n return {\n type: this.type,\n imageId: this.imageId,\n hyperlinks: this.range.hyperlinks,\n range: {\n tl: this.range.tl.model,\n br: this.range.br && this.range.br.model,\n ext: this.range.ext,\n editAs: this.range.editAs,\n },\n };\n default:\n throw new Error('Invalid Image Type');\n }\n }\n\n set model({type, imageId, range, hyperlinks}) {\n this.type = type;\n this.imageId = imageId;\n\n if (type === 'image') {\n if (typeof range === 'string') {\n const decoded = colCache.decode(range);\n this.range = {\n tl: new Anchor(this.worksheet, {col: decoded.left, row: decoded.top}, -1),\n br: new Anchor(this.worksheet, {col: decoded.right, row: decoded.bottom}, 0),\n editAs: 'oneCell',\n };\n } else {\n this.range = {\n tl: new Anchor(this.worksheet, range.tl, 0),\n br: range.br && new Anchor(this.worksheet, range.br, 0),\n ext: range.ext,\n editAs: range.editAs,\n hyperlinks: hyperlinks || range.hyperlinks,\n };\n }\n }\n }\n}\n\nmodule.exports = Image;\n", + "const _ = require('../utils/under-dash');\n\nclass Note {\n constructor(note) {\n this.note = note;\n }\n\n get model() {\n let value = null;\n switch (typeof this.note) {\n case 'string':\n value = {\n type: 'note',\n note: {\n texts: [\n {\n text: this.note,\n },\n ],\n },\n };\n break;\n default:\n value = {\n type: 'note',\n note: this.note,\n };\n break;\n }\n // Suitable for all cell comments\n return _.deepMerge({}, Note.DEFAULT_CONFIGS, value);\n }\n\n set model(value) {\n const {note} = value;\n const {texts} = note;\n if (texts.length === 1 && Object.keys(texts[0]).length === 1) {\n this.note = texts[0].text;\n } else {\n this.note = note;\n }\n }\n\n static fromModel(model) {\n const note = new Note();\n note.model = model;\n return note;\n }\n}\n\nNote.DEFAULT_CONFIGS = {\n note: {\n margins: {\n insetmode: 'auto',\n inset: [0.13, 0.13, 0.25, 0.25],\n },\n protection: {\n locked: 'True',\n lockText: 'True',\n },\n editAs: 'absolute',\n },\n};\n\nmodule.exports = Note;\n", + "const colCache = require('../utils/col-cache');\n\n// used by worksheet to calculate sheet dimensions\nclass Range {\n constructor() {\n this.decode(arguments);\n }\n\n setTLBR(t, l, b, r, s) {\n if (arguments.length < 4) {\n // setTLBR(tl, br, s)\n const tl = colCache.decodeAddress(t);\n const br = colCache.decodeAddress(l);\n this.model = {\n top: Math.min(tl.row, br.row),\n left: Math.min(tl.col, br.col),\n bottom: Math.max(tl.row, br.row),\n right: Math.max(tl.col, br.col),\n sheetName: b,\n };\n\n this.setTLBR(tl.row, tl.col, br.row, br.col, s);\n } else {\n // setTLBR(t, l, b, r, s)\n this.model = {\n top: Math.min(t, b),\n left: Math.min(l, r),\n bottom: Math.max(t, b),\n right: Math.max(l, r),\n sheetName: s,\n };\n }\n }\n\n decode(argv) {\n switch (argv.length) {\n case 5: // [t,l,b,r,s]\n this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);\n break;\n case 4: // [t,l,b,r]\n this.setTLBR(argv[0], argv[1], argv[2], argv[3]);\n break;\n\n case 3: // [tl,br,s]\n this.setTLBR(argv[0], argv[1], argv[2]);\n break;\n case 2: // [tl,br]\n this.setTLBR(argv[0], argv[1]);\n break;\n\n case 1: {\n const value = argv[0];\n if (value instanceof Range) {\n // copy constructor\n this.model = {\n top: value.model.top,\n left: value.model.left,\n bottom: value.model.bottom,\n right: value.model.right,\n sheetName: value.sheetName,\n };\n } else if (value instanceof Array) {\n // an arguments array\n this.decode(value);\n } else if (value.top && value.left && value.bottom && value.right) {\n // a model\n this.model = {\n top: value.top,\n left: value.left,\n bottom: value.bottom,\n right: value.right,\n sheetName: value.sheetName,\n };\n } else {\n // [sheetName!]tl:br\n const tlbr = colCache.decodeEx(value);\n if (tlbr.top) {\n this.model = {\n top: tlbr.top,\n left: tlbr.left,\n bottom: tlbr.bottom,\n right: tlbr.right,\n sheetName: tlbr.sheetName,\n };\n } else {\n this.model = {\n top: tlbr.row,\n left: tlbr.col,\n bottom: tlbr.row,\n right: tlbr.col,\n sheetName: tlbr.sheetName,\n };\n }\n }\n break;\n }\n\n case 0:\n this.model = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n };\n break;\n\n default:\n throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`);\n }\n }\n\n get top() {\n return this.model.top || 1;\n }\n\n set top(value) {\n this.model.top = value;\n }\n\n get left() {\n return this.model.left || 1;\n }\n\n set left(value) {\n this.model.left = value;\n }\n\n get bottom() {\n return this.model.bottom || 1;\n }\n\n set bottom(value) {\n this.model.bottom = value;\n }\n\n get right() {\n return this.model.right || 1;\n }\n\n set right(value) {\n this.model.right = value;\n }\n\n get sheetName() {\n return this.model.sheetName;\n }\n\n set sheetName(value) {\n this.model.sheetName = value;\n }\n\n get _serialisedSheetName() {\n const {sheetName} = this.model;\n if (sheetName) {\n if (/^[a-zA-Z0-9]*$/.test(sheetName)) {\n return `${sheetName}!`;\n }\n return `'${sheetName}'!`;\n }\n return '';\n }\n\n expand(top, left, bottom, right) {\n if (!this.model.top || top < this.top) this.top = top;\n if (!this.model.left || left < this.left) this.left = left;\n if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;\n if (!this.model.right || right > this.right) this.right = right;\n }\n\n expandRow(row) {\n if (row) {\n const {dimensions, number} = row;\n if (dimensions) {\n this.expand(number, dimensions.min, number, dimensions.max);\n }\n }\n }\n\n expandToAddress(addressStr) {\n const address = colCache.decodeEx(addressStr);\n this.expand(address.row, address.col, address.row, address.col);\n }\n\n get tl() {\n return colCache.n2l(this.left) + this.top;\n }\n\n get $t$l() {\n return `$${colCache.n2l(this.left)}$${this.top}`;\n }\n\n get br() {\n return colCache.n2l(this.right) + this.bottom;\n }\n\n get $b$r() {\n return `$${colCache.n2l(this.right)}$${this.bottom}`;\n }\n\n get range() {\n return `${this._serialisedSheetName + this.tl}:${this.br}`;\n }\n\n get $range() {\n return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`;\n }\n\n get shortRange() {\n return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;\n }\n\n get $shortRange() {\n return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;\n }\n\n get count() {\n return (1 + this.bottom - this.top) * (1 + this.right - this.left);\n }\n\n toString() {\n return this.range;\n }\n\n intersects(other) {\n if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;\n if (other.bottom < this.top) return false;\n if (other.top > this.bottom) return false;\n if (other.right < this.left) return false;\n if (other.left > this.right) return false;\n return true;\n }\n\n contains(addressStr) {\n const address = colCache.decodeEx(addressStr);\n return this.containsEx(address);\n }\n\n containsEx(address) {\n if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;\n return (\n address.row >= this.top &&\n address.row <= this.bottom &&\n address.col >= this.left &&\n address.col <= this.right\n );\n }\n\n forEachAddress(cb) {\n for (let col = this.left; col <= this.right; col++) {\n for (let row = this.top; row <= this.bottom; row++) {\n cb(colCache.encodeAddress(row, col), row, col);\n }\n }\n }\n}\n\nmodule.exports = Range;\n", + "'use strict';\n\nconst _ = require('../utils/under-dash');\n\nconst Enums = require('./enums');\nconst colCache = require('../utils/col-cache');\nconst Cell = require('./cell');\n\nclass Row {\n constructor(worksheet, number) {\n this._worksheet = worksheet;\n this._number = number;\n this._cells = [];\n this.style = {};\n this.outlineLevel = 0;\n }\n\n // return the row number\n get number() {\n return this._number;\n }\n\n get worksheet() {\n return this._worksheet;\n }\n\n // Inform Streaming Writer that this row (and all rows before it) are complete\n // and ready to write. Has no effect on Worksheet document\n commit() {\n this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle\n }\n\n // helps GC by breaking cyclic references\n destroy() {\n delete this._worksheet;\n delete this._cells;\n delete this.style;\n }\n\n findCell(colNumber) {\n return this._cells[colNumber - 1];\n }\n\n // given {address, row, col}, find or create new cell\n getCellEx(address) {\n let cell = this._cells[address.col - 1];\n if (!cell) {\n const column = this._worksheet.getColumn(address.col);\n cell = new Cell(this, column, address.address);\n this._cells[address.col - 1] = cell;\n }\n return cell;\n }\n\n // get cell by key, letter or column number\n getCell(col) {\n if (typeof col === 'string') {\n // is it a key?\n const column = this._worksheet.getColumnKey(col);\n if (column) {\n col = column.number;\n } else {\n col = colCache.l2n(col);\n }\n }\n return (\n this._cells[col - 1] ||\n this.getCellEx({\n address: colCache.encodeAddress(this._number, col),\n row: this._number,\n col,\n })\n );\n }\n\n // remove cell(s) and shift all higher cells down by count\n splice(start, count, ...inserts) {\n const nKeep = start + count;\n const nExpand = inserts.length - count;\n const nEnd = this._cells.length;\n let i;\n let cSrc;\n let cDst;\n\n if (nExpand < 0) {\n // remove cells\n for (i = start + inserts.length; i <= nEnd; i++) {\n cDst = this._cells[i - 1];\n cSrc = this._cells[i - nExpand - 1];\n if (cSrc) {\n cDst = this.getCell(i);\n cDst.value = cSrc.value;\n cDst.style = cSrc.style;\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = cSrc._comment;\n } else if (cDst) {\n cDst.value = null;\n cDst.style = {};\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = undefined;\n }\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n cSrc = this._cells[i - 1];\n if (cSrc) {\n cDst = this.getCell(i + nExpand);\n cDst.value = cSrc.value;\n cDst.style = cSrc.style;\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = cSrc._comment;\n } else {\n this._cells[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now add the new values\n for (i = 0; i < inserts.length; i++) {\n cDst = this.getCell(start + i);\n cDst.value = inserts[i];\n cDst.style = {};\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = undefined;\n }\n }\n\n // Iterate over all non-null cells in this row\n eachCell(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = null;\n }\n if (options && options.includeEmpty) {\n const n = this._cells.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getCell(i), i);\n }\n } else {\n this._cells.forEach((cell, index) => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n iteratee(cell, index + 1);\n }\n });\n }\n }\n\n // ===========================================================================\n // Page Breaks\n addPageBreak(lft, rght) {\n const ws = this._worksheet;\n const left = Math.max(0, lft - 1) || 0;\n const right = Math.max(0, rght - 1) || 16838;\n const pb = {\n id: this._number,\n max: right,\n man: 1,\n };\n if (left) pb.min = left;\n\n ws.rowBreaks.push(pb);\n }\n\n // return a sparse array of cell values\n get values() {\n const values = [];\n this._cells.forEach(cell => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n values[cell.col] = cell.value;\n }\n });\n return values;\n }\n\n // set the values by contiguous or sparse array, or by key'd object literal\n set values(value) {\n // this operation is not additive - any prior cells are removed\n this._cells = [];\n if (!value) {\n // empty row\n } else if (value instanceof Array) {\n let offset = 0;\n if (value.hasOwnProperty('0')) {\n // contiguous array - start at column 1\n offset = 1;\n }\n value.forEach((item, index) => {\n if (item !== undefined) {\n this.getCellEx({\n address: colCache.encodeAddress(this._number, index + offset),\n row: this._number,\n col: index + offset,\n }).value = item;\n }\n });\n } else {\n // assume object with column keys\n this._worksheet.eachColumnKey((column, key) => {\n if (value[key] !== undefined) {\n this.getCellEx({\n address: colCache.encodeAddress(this._number, column.number),\n row: this._number,\n col: column.number,\n }).value = value[key];\n }\n });\n }\n }\n\n // returns true if the row includes at least one cell with a value\n get hasValues() {\n return _.some(this._cells, cell => cell && cell.type !== Enums.ValueType.Null);\n }\n\n get cellCount() {\n return this._cells.length;\n }\n\n get actualCellCount() {\n let count = 0;\n this.eachCell(() => {\n count++;\n });\n return count;\n }\n\n // get the min and max column number for the non-null cells in this row or null\n get dimensions() {\n let min = 0;\n let max = 0;\n this._cells.forEach(cell => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n if (!min || min > cell.col) {\n min = cell.col;\n }\n if (max < cell.col) {\n max = cell.col;\n }\n }\n });\n return min > 0\n ? {\n min,\n max,\n }\n : null;\n }\n\n // =========================================================================\n // styles\n _applyStyle(name, value) {\n this.style[name] = value;\n this._cells.forEach(cell => {\n if (cell) {\n cell[name] = value;\n }\n });\n return value;\n }\n\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this._applyStyle('numFmt', value);\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this._applyStyle('font', value);\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this._applyStyle('alignment', value);\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this._applyStyle('protection', value);\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this._applyStyle('border', value);\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this._applyStyle('fill', value);\n }\n\n get hidden() {\n return !!this._hidden;\n }\n\n set hidden(value) {\n this._hidden = value;\n }\n\n get outlineLevel() {\n return this._outlineLevel || 0;\n }\n\n set outlineLevel(value) {\n this._outlineLevel = value;\n }\n\n get collapsed() {\n return !!(\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow\n );\n }\n\n // =========================================================================\n get model() {\n const cells = [];\n let min = 0;\n let max = 0;\n this._cells.forEach(cell => {\n if (cell) {\n const cellModel = cell.model;\n if (cellModel) {\n if (!min || min > cell.col) {\n min = cell.col;\n }\n if (max < cell.col) {\n max = cell.col;\n }\n cells.push(cellModel);\n }\n }\n });\n\n return this.height || cells.length\n ? {\n cells,\n number: this.number,\n min,\n max,\n height: this.height,\n style: this.style,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n collapsed: this.collapsed,\n }\n : null;\n }\n\n set model(value) {\n if (value.number !== this._number) {\n throw new Error('Invalid row number in model');\n }\n this._cells = [];\n let previousAddress;\n value.cells.forEach(cellModel => {\n switch (cellModel.type) {\n case Cell.Types.Merge:\n // special case - don't add this types\n break;\n default: {\n let address;\n if (cellModel.address) {\n address = colCache.decodeAddress(cellModel.address);\n } else if (previousAddress) {\n // This is a element without an r attribute\n // Assume that it's the cell for the next column\n const {row} = previousAddress;\n const col = previousAddress.col + 1;\n address = {\n row,\n col,\n address: colCache.encodeAddress(row, col),\n $col$row: `$${colCache.n2l(col)}$${row}`,\n };\n }\n previousAddress = address;\n const cell = this.getCellEx(address);\n cell.model = cellModel;\n break;\n }\n }\n });\n\n if (value.height) {\n this.height = value.height;\n } else {\n delete this.height;\n }\n\n this.hidden = value.hidden;\n this.outlineLevel = value.outlineLevel || 0;\n\n this.style = (value.style && JSON.parse(JSON.stringify(value.style))) || {};\n }\n}\n\nmodule.exports = Row;\n", + "/* eslint-disable max-classes-per-file */\nconst colCache = require('../utils/col-cache');\n\nclass Column {\n // wrapper around column model, allowing access and manipulation\n constructor(table, column, index) {\n this.table = table;\n this.column = column;\n this.index = index;\n }\n\n _set(name, value) {\n this.table.cacheState();\n this.column[name] = value;\n }\n\n /* eslint-disable lines-between-class-members */\n get name() {\n return this.column.name;\n }\n set name(value) {\n this._set('name', value);\n }\n\n get filterButton() {\n return this.column.filterButton;\n }\n set filterButton(value) {\n this.column.filterButton = value;\n }\n\n get style() {\n return this.column.style;\n }\n set style(value) {\n this.column.style = value;\n }\n\n get totalsRowLabel() {\n return this.column.totalsRowLabel;\n }\n set totalsRowLabel(value) {\n this._set('totalsRowLabel', value);\n }\n\n get totalsRowFunction() {\n return this.column.totalsRowFunction;\n }\n set totalsRowFunction(value) {\n this._set('totalsRowFunction', value);\n }\n\n get totalsRowResult() {\n return this.column.totalsRowResult;\n }\n set totalsRowResult(value) {\n this._set('totalsRowResult', value);\n }\n\n get totalsRowFormula() {\n return this.column.totalsRowFormula;\n }\n set totalsRowFormula(value) {\n this._set('totalsRowFormula', value);\n }\n /* eslint-enable lines-between-class-members */\n}\n\nclass Table {\n constructor(worksheet, table) {\n this.worksheet = worksheet;\n if (table) {\n this.table = table;\n // check things are ok first\n this.validate();\n\n this.store();\n }\n }\n\n getFormula(column) {\n // get the correct formula to apply to the totals row\n switch (column.totalsRowFunction) {\n case 'none':\n return null;\n case 'average':\n return `SUBTOTAL(101,${this.table.name}[${column.name}])`;\n case 'countNums':\n return `SUBTOTAL(102,${this.table.name}[${column.name}])`;\n case 'count':\n return `SUBTOTAL(103,${this.table.name}[${column.name}])`;\n case 'max':\n return `SUBTOTAL(104,${this.table.name}[${column.name}])`;\n case 'min':\n return `SUBTOTAL(105,${this.table.name}[${column.name}])`;\n case 'stdDev':\n return `SUBTOTAL(106,${this.table.name}[${column.name}])`;\n case 'var':\n return `SUBTOTAL(107,${this.table.name}[${column.name}])`;\n case 'sum':\n return `SUBTOTAL(109,${this.table.name}[${column.name}])`;\n case 'custom':\n return column.totalsRowFormula;\n default:\n throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`);\n }\n }\n\n get width() {\n // width of the table\n return this.table.columns.length;\n }\n\n get height() {\n // height of the table data\n return this.table.rows.length;\n }\n\n get filterHeight() {\n // height of the table data plus optional header row\n return this.height + (this.table.headerRow ? 1 : 0);\n }\n\n get tableHeight() {\n // full height of the table on the sheet\n return this.filterHeight + (this.table.totalsRow ? 1 : 0);\n }\n\n validate() {\n const {table} = this;\n // set defaults and check is valid\n const assign = (o, name, dflt) => {\n if (o[name] === undefined) {\n o[name] = dflt;\n }\n };\n assign(table, 'headerRow', true);\n assign(table, 'totalsRow', false);\n\n assign(table, 'style', {});\n assign(table.style, 'theme', 'TableStyleMedium2');\n assign(table.style, 'showFirstColumn', false);\n assign(table.style, 'showLastColumn', false);\n assign(table.style, 'showRowStripes', false);\n assign(table.style, 'showColumnStripes', false);\n\n const assert = (test, message) => {\n if (!test) {\n throw new Error(message);\n }\n };\n assert(table.ref, 'Table must have ref');\n assert(table.columns, 'Table must have column definitions');\n assert(table.rows, 'Table must have row definitions');\n\n table.tl = colCache.decodeAddress(table.ref);\n const {row, col} = table.tl;\n assert(row > 0, 'Table must be on valid row');\n assert(col > 0, 'Table must be on valid col');\n\n const {width, filterHeight, tableHeight} = this;\n\n // autoFilterRef is a range that includes optional headers only\n table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1);\n\n // tableRef is a range that includes optional headers and totals\n table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1);\n\n table.columns.forEach((column, i) => {\n assert(column.name, `Column ${i} must have a name`);\n if (i === 0) {\n assign(column, 'totalsRowLabel', 'Total');\n } else {\n assign(column, 'totalsRowFunction', 'none');\n column.totalsRowFormula = this.getFormula(column);\n }\n });\n }\n\n store() {\n // where the table needs to store table data, headers, footers in\n // the sheet...\n const assignStyle = (cell, style) => {\n if (style) {\n Object.keys(style).forEach(key => {\n cell[key] = style[key];\n });\n }\n };\n\n const {worksheet, table} = this;\n const {row, col} = table.tl;\n let count = 0;\n if (table.headerRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const {style, name} = column;\n const cell = r.getCell(col + j);\n cell.value = name;\n assignStyle(cell, style);\n });\n }\n table.rows.forEach(data => {\n const r = worksheet.getRow(row + count++);\n data.forEach((value, j) => {\n const cell = r.getCell(col + j);\n cell.value = value;\n\n assignStyle(cell, table.columns[j].style);\n });\n });\n\n if (table.totalsRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n if (j === 0) {\n cell.value = column.totalsRowLabel;\n } else {\n const formula = this.getFormula(column);\n if (formula) {\n cell.value = {\n formula: column.totalsRowFormula,\n result: column.totalsRowResult,\n };\n } else {\n cell.value = null;\n }\n }\n\n assignStyle(cell, column.style);\n });\n }\n }\n\n load(worksheet) {\n // where the table will read necessary features from a loaded sheet\n const {table} = this;\n const {row, col} = table.tl;\n let count = 0;\n if (table.headerRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n cell.value = column.name;\n });\n }\n table.rows.forEach(data => {\n const r = worksheet.getRow(row + count++);\n data.forEach((value, j) => {\n const cell = r.getCell(col + j);\n cell.value = value;\n });\n });\n\n if (table.totalsRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n if (j === 0) {\n cell.value = column.totalsRowLabel;\n } else {\n const formula = this.getFormula(column);\n if (formula) {\n cell.value = {\n formula: column.totalsRowFormula,\n result: column.totalsRowResult,\n };\n }\n }\n });\n }\n }\n\n get model() {\n return this.table;\n }\n\n set model(value) {\n this.table = value;\n }\n\n // ================================================================\n // TODO: Mutating methods\n cacheState() {\n if (!this._cache) {\n this._cache = {\n ref: this.ref,\n width: this.width,\n tableHeight: this.tableHeight,\n };\n }\n }\n\n commit() {\n // changes may have been made that might have on-sheet effects\n if (!this._cache) {\n return;\n }\n\n // check things are ok first\n this.validate();\n\n const ref = colCache.decodeAddress(this._cache.ref);\n if (this.ref !== this._cache.ref) {\n // wipe out whole table footprint at previous location\n for (let i = 0; i < this._cache.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = 0; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n } else {\n // clear out below table if it has shrunk\n for (let i = this.tableHeight; i < this._cache.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = 0; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n\n // clear out to right of table if it has lost columns\n for (let i = 0; i < this.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = this.width; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n }\n\n this.store();\n }\n\n addRow(values, rowNumber) {\n // Add a row of data, either insert at rowNumber or append\n this.cacheState();\n\n if (rowNumber === undefined) {\n this.table.rows.push(values);\n } else {\n this.table.rows.splice(rowNumber, 0, values);\n }\n }\n\n removeRows(rowIndex, count = 1) {\n // Remove a rows of data\n this.cacheState();\n this.table.rows.splice(rowIndex, count);\n }\n\n getColumn(colIndex) {\n const column = this.table.columns[colIndex];\n return new Column(this, column, colIndex);\n }\n\n addColumn(column, values, colIndex) {\n // Add a new column, including column defn and values\n // Inserts at colNumber or adds to the right\n this.cacheState();\n\n if (colIndex === undefined) {\n this.table.columns.push(column);\n this.table.rows.forEach((row, i) => {\n row.push(values[i]);\n });\n } else {\n this.table.columns.splice(colIndex, 0, column);\n this.table.rows.forEach((row, i) => {\n row.splice(colIndex, 0, values[i]);\n });\n }\n }\n\n removeColumns(colIndex, count = 1) {\n // Remove a column with data\n this.cacheState();\n\n this.table.columns.splice(colIndex, count);\n this.table.rows.forEach(row => {\n row.splice(colIndex, count);\n });\n }\n\n _assign(target, prop, value) {\n this.cacheState();\n target[prop] = value;\n }\n\n /* eslint-disable lines-between-class-members */\n get ref() {\n return this.table.ref;\n }\n set ref(value) {\n this._assign(this.table, 'ref', value);\n }\n\n get name() {\n return this.table.name;\n }\n set name(value) {\n this.table.name = value;\n }\n\n get displayName() {\n return this.table.displyName || this.table.name;\n }\n set displayNamename(value) {\n this.table.displayName = value;\n }\n\n get headerRow() {\n return this.table.headerRow;\n }\n set headerRow(value) {\n this._assign(this.table, 'headerRow', value);\n }\n\n get totalsRow() {\n return this.table.totalsRow;\n }\n set totalsRow(value) {\n this._assign(this.table, 'totalsRow', value);\n }\n\n get theme() {\n return this.table.style.name;\n }\n set theme(value) {\n this.table.style.name = value;\n }\n\n get showFirstColumn() {\n return this.table.style.showFirstColumn;\n }\n set showFirstColumn(value) {\n this.table.style.showFirstColumn = value;\n }\n\n get showLastColumn() {\n return this.table.style.showLastColumn;\n }\n set showLastColumn(value) {\n this.table.style.showLastColumn = value;\n }\n\n get showRowStripes() {\n return this.table.style.showRowStripes;\n }\n set showRowStripes(value) {\n this.table.style.showRowStripes = value;\n }\n\n get showColumnStripes() {\n return this.table.style.showColumnStripes;\n }\n set showColumnStripes(value) {\n this.table.style.showColumnStripes = value;\n }\n /* eslint-enable lines-between-class-members */\n}\n\nmodule.exports = Table;\n", + "'use strict';\n\nconst Worksheet = require('./worksheet');\nconst DefinedNames = require('./defined-names');\nconst XLSX = require('../xlsx/xlsx');\nconst CSV = require('../csv/csv');\n\n// Workbook requirements\n// Load and Save from file and stream\n// Access/Add/Delete individual worksheets\n// Manage String table, Hyperlink table, etc.\n// Manage scaffolding for contained objects to write to/read from\n\nclass Workbook {\n constructor() {\n this.category = '';\n this.company = '';\n this.created = new Date();\n this.description = '';\n this.keywords = '';\n this.manager = '';\n this.modified = this.created;\n this.properties = {};\n this.calcProperties = {};\n this._worksheets = [];\n this.subject = '';\n this.title = '';\n this.views = [];\n this.media = [];\n this._definedNames = new DefinedNames();\n }\n\n get xlsx() {\n if (!this._xlsx) this._xlsx = new XLSX(this);\n return this._xlsx;\n }\n\n get csv() {\n if (!this._csv) this._csv = new CSV(this);\n return this._csv;\n }\n\n get nextId() {\n // find the next unique spot to add worksheet\n for (let i = 1; i < this._worksheets.length; i++) {\n if (!this._worksheets[i]) {\n return i;\n }\n }\n return this._worksheets.length || 1;\n }\n\n addWorksheet(name, options) {\n const id = this.nextId;\n\n // if options is a color, call it tabColor (and signal deprecated message)\n if (options) {\n if (typeof options === 'string') {\n // eslint-disable-next-line no-console\n console.trace(\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: \"rbg value\" } }'\n );\n options = {\n properties: {\n tabColor: {argb: options},\n },\n };\n } else if (options.argb || options.theme || options.indexed) {\n // eslint-disable-next-line no-console\n console.trace(\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }'\n );\n options = {\n properties: {\n tabColor: options,\n },\n };\n }\n }\n\n const lastOrderNo = this._worksheets.reduce((acc, ws) => ((ws && ws.orderNo) > acc ? ws.orderNo : acc), 0);\n const worksheetOptions = Object.assign({}, options, {\n id,\n name,\n orderNo: lastOrderNo + 1,\n workbook: this,\n });\n\n const worksheet = new Worksheet(worksheetOptions);\n\n this._worksheets[id] = worksheet;\n return worksheet;\n }\n\n removeWorksheetEx(worksheet) {\n delete this._worksheets[worksheet.id];\n }\n\n removeWorksheet(id) {\n const worksheet = this.getWorksheet(id);\n if (worksheet) {\n worksheet.destroy();\n }\n }\n\n getWorksheet(id) {\n if (id === undefined) {\n return this._worksheets.find(Boolean);\n }\n if (typeof id === 'number') {\n return this._worksheets[id];\n }\n if (typeof id === 'string') {\n return this._worksheets.find(worksheet => worksheet && worksheet.name === id);\n }\n return undefined;\n }\n\n get worksheets() {\n // return a clone of _worksheets\n return this._worksheets\n .slice(1)\n .sort((a, b) => a.orderNo - b.orderNo)\n .filter(Boolean);\n }\n\n eachSheet(iteratee) {\n this.worksheets.forEach(sheet => {\n iteratee(sheet, sheet.id);\n });\n }\n\n get definedNames() {\n return this._definedNames;\n }\n\n clearThemes() {\n // Note: themes are not an exposed feature, meddle at your peril!\n this._themes = undefined;\n }\n\n addImage(image) {\n // TODO: validation?\n const id = this.media.length;\n this.media.push(Object.assign({}, image, {type: 'image'}));\n return id;\n }\n\n getImage(id) {\n return this.media[id];\n }\n\n get model() {\n return {\n creator: this.creator || 'Unknown',\n lastModifiedBy: this.lastModifiedBy || 'Unknown',\n lastPrinted: this.lastPrinted,\n created: this.created,\n modified: this.modified,\n properties: this.properties,\n worksheets: this.worksheets.map(worksheet => worksheet.model),\n sheets: this.worksheets.map(ws => ws.model).filter(Boolean),\n definedNames: this._definedNames.model,\n views: this.views,\n company: this.company,\n manager: this.manager,\n title: this.title,\n subject: this.subject,\n keywords: this.keywords,\n category: this.category,\n description: this.description,\n language: this.language,\n revision: this.revision,\n contentStatus: this.contentStatus,\n themes: this._themes,\n media: this.media,\n calcProperties: this.calcProperties,\n };\n }\n\n set model(value) {\n this.creator = value.creator;\n this.lastModifiedBy = value.lastModifiedBy;\n this.lastPrinted = value.lastPrinted;\n this.created = value.created;\n this.modified = value.modified;\n this.company = value.company;\n this.manager = value.manager;\n this.title = value.title;\n this.subject = value.subject;\n this.keywords = value.keywords;\n this.category = value.category;\n this.description = value.description;\n this.language = value.language;\n this.revision = value.revision;\n this.contentStatus = value.contentStatus;\n\n this.properties = value.properties;\n this.calcProperties = value.calcProperties;\n this._worksheets = [];\n value.worksheets.forEach(worksheetModel => {\n const {id, name, state} = worksheetModel;\n const orderNo = value.sheets && value.sheets.findIndex(ws => ws.id === id);\n const worksheet = (this._worksheets[id] = new Worksheet({\n id,\n name,\n orderNo,\n state,\n workbook: this,\n }));\n worksheet.model = worksheetModel;\n });\n\n this._definedNames.model = value.definedNames;\n this.views = value.views;\n this._themes = value.themes;\n this.media = value.media || [];\n }\n}\n\nmodule.exports = Workbook;\n", + "const _ = require('../utils/under-dash');\n\nconst colCache = require('../utils/col-cache');\nconst Range = require('./range');\nconst Row = require('./row');\nconst Column = require('./column');\nconst Enums = require('./enums');\nconst Image = require('./image');\nconst Table = require('./table');\nconst DataValidations = require('./data-validations');\nconst Encryptor = require('../utils/encryptor');\nconst {copyStyle} = require('../utils/copy-style');\n\n// Worksheet requirements\n// Operate as sheet inside workbook or standalone\n// Load and Save from file and stream\n// Access/Add/Delete individual cells\n// Manage column widths and row heights\n\nclass Worksheet {\n constructor(options) {\n options = options || {};\n this._workbook = options.workbook;\n\n // in a workbook, each sheet will have a number\n this.id = options.id;\n this.orderNo = options.orderNo;\n\n // and a name\n this.name = options.name;\n\n // add a state\n this.state = options.state || 'visible';\n\n // rows allows access organised by row. Sparse array of arrays indexed by row-1, col\n // Note: _rows is zero based. Must subtract 1 to go from cell.row to index\n this._rows = [];\n\n // column definitions\n this._columns = null;\n\n // column keys (addRow convenience): key ==> this._collumns index\n this._keys = {};\n\n // keep record of all merges\n this._merges = {};\n\n // record of all row and column pageBreaks\n this.rowBreaks = [];\n\n // for tabColor, default row height, outline levels, etc\n this.properties = Object.assign(\n {},\n {\n defaultRowHeight: 15,\n dyDescent: 55,\n outlineLevelCol: 0,\n outlineLevelRow: 0,\n },\n options.properties\n );\n\n // for all things printing\n this.pageSetup = Object.assign(\n {},\n {\n margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3},\n orientation: 'portrait',\n horizontalDpi: 4294967295,\n verticalDpi: 4294967295,\n fitToPage: !!(\n options.pageSetup &&\n (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) &&\n !options.pageSetup.scale\n ),\n pageOrder: 'downThenOver',\n blackAndWhite: false,\n draft: false,\n cellComments: 'None',\n errors: 'displayed',\n scale: 100,\n fitToWidth: 1,\n fitToHeight: 1,\n paperSize: undefined,\n showRowColHeaders: false,\n showGridLines: false,\n firstPageNumber: undefined,\n horizontalCentered: false,\n verticalCentered: false,\n rowBreaks: null,\n colBreaks: null,\n },\n options.pageSetup\n );\n\n this.headerFooter = Object.assign(\n {},\n {\n differentFirst: false,\n differentOddEven: false,\n oddHeader: null,\n oddFooter: null,\n evenHeader: null,\n evenFooter: null,\n firstHeader: null,\n firstFooter: null,\n },\n options.headerFooter\n );\n\n this.dataValidations = new DataValidations();\n\n // for freezepanes, split, zoom, gridlines, etc\n this.views = options.views || [];\n\n this.autoFilter = options.autoFilter || null;\n\n // for images, etc\n this._media = [];\n\n // worksheet protection\n this.sheetProtection = null;\n\n // for tables\n this.tables = {};\n\n this.conditionalFormattings = [];\n }\n\n get name() {\n return this._name;\n }\n\n set name(name) {\n if (name === undefined) {\n name = `sheet${this.id}`;\n }\n\n if (this._name === name) return;\n\n if (typeof name !== 'string') {\n throw new Error('The name has to be a string.');\n }\n\n if (name === '') {\n throw new Error('The name can\\'t be empty.');\n }\n\n if (name === 'History') {\n throw new Error('The name \"History\" is protected. Please use a different name.');\n }\n\n // Illegal character in worksheet name: asterisk (*), question mark (?),\n // colon (:), forward slash (/ \\), or bracket ([])\n if (/[*?:/\\\\[\\]]/.test(name)) {\n throw new Error(`Worksheet name ${name} cannot include any of the following characters: * ? : \\\\ / [ ]`);\n }\n\n if (/(^')|('$)/.test(name)) {\n throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${name}`);\n }\n\n if (name && name.length > 31) {\n // eslint-disable-next-line no-console\n console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`);\n name = name.substring(0, 31);\n }\n\n if (this._workbook._worksheets.find(ws => ws && ws.name.toLowerCase() === name.toLowerCase())) {\n throw new Error(`Worksheet name already exists: ${name}`);\n }\n\n this._name = name;\n }\n\n get workbook() {\n return this._workbook;\n }\n\n // when you're done with this worksheet, call this to remove from workbook\n destroy() {\n this._workbook.removeWorksheetEx(this);\n }\n\n // Get the bounding range of the cells in this worksheet\n get dimensions() {\n const dimensions = new Range();\n this._rows.forEach(row => {\n if (row) {\n const rowDims = row.dimensions;\n if (rowDims) {\n dimensions.expand(row.number, rowDims.min, row.number, rowDims.max);\n }\n }\n });\n return dimensions;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\n }\n\n // set the columns from an array of column definitions.\n // Note: any headers defined will overwrite existing values.\n set columns(value) {\n // calculate max header row count\n this._headerRowCount = value.reduce((pv, cv) => {\n const headerCount = (cv.header && 1) || (cv.headers && cv.headers.length) || 0;\n return Math.max(pv, headerCount);\n }, 0);\n\n // construct Column objects\n let count = 1;\n const columns = (this._columns = []);\n value.forEach(defn => {\n const column = new Column(this, count++, false);\n columns.push(column);\n column.defn = defn;\n });\n }\n\n getColumnKey(key) {\n return this._keys[key];\n }\n\n setColumnKey(key, value) {\n this._keys[key] = value;\n }\n\n deleteColumnKey(key) {\n delete this._keys[key];\n }\n\n eachColumnKey(f) {\n _.each(this._keys, f);\n }\n\n // get a single column by col number. If it doesn't exist, create it and any gaps before it\n getColumn(c) {\n if (typeof c === 'string') {\n // if it matches a key'd column, return that\n const col = this._keys[c];\n if (col) return col;\n\n // otherwise, assume letter\n c = colCache.l2n(c);\n }\n if (!this._columns) {\n this._columns = [];\n }\n if (c > this._columns.length) {\n let n = this._columns.length + 1;\n while (n <= c) {\n this._columns.push(new Column(this, n++));\n }\n }\n return this._columns[c - 1];\n }\n\n spliceColumns(start, count, ...inserts) {\n const rows = this._rows;\n const nRows = rows.length;\n if (inserts.length > 0) {\n // must iterate over all rows whether they exist yet or not\n for (let i = 0; i < nRows; i++) {\n const rowArguments = [start, count];\n // eslint-disable-next-line no-loop-func\n inserts.forEach(insert => {\n rowArguments.push(insert[i] || null);\n });\n const row = this.getRow(i + 1);\n // eslint-disable-next-line prefer-spread\n row.splice.apply(row, rowArguments);\n }\n } else {\n // nothing to insert, so just splice all rows\n this._rows.forEach(r => {\n if (r) {\n r.splice(start, count);\n }\n });\n }\n\n // splice column definitions\n const nExpand = inserts.length - count;\n const nKeep = start + count;\n const nEnd = this._columns.length;\n if (nExpand < 0) {\n for (let i = start + inserts.length; i <= nEnd; i++) {\n this.getColumn(i).defn = this.getColumn(i - nExpand).defn;\n }\n } else if (nExpand > 0) {\n for (let i = nEnd; i >= nKeep; i--) {\n this.getColumn(i + nExpand).defn = this.getColumn(i).defn;\n }\n }\n for (let i = start; i < start + inserts.length; i++) {\n this.getColumn(i).defn = null;\n }\n\n // account for defined names\n this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length);\n }\n\n get lastColumn() {\n return this.getColumn(this.columnCount);\n }\n\n get columnCount() {\n let maxCount = 0;\n this.eachRow(row => {\n maxCount = Math.max(maxCount, row.cellCount);\n });\n return maxCount;\n }\n\n get actualColumnCount() {\n // performance nightmare - for each row, counts all the columns used\n const counts = [];\n let count = 0;\n this.eachRow(row => {\n row.eachCell(({col}) => {\n if (!counts[col]) {\n counts[col] = true;\n count++;\n }\n });\n });\n return count;\n }\n\n // =========================================================================\n // Rows\n\n _commitRow() {\n // nop - allows streaming reader to fill a document\n }\n\n get _lastRowNumber() {\n // need to cope with results of splice\n const rows = this._rows;\n let n = rows.length;\n while (n > 0 && rows[n - 1] === undefined) {\n n--;\n }\n return n;\n }\n\n get _nextRow() {\n return this._lastRowNumber + 1;\n }\n\n get lastRow() {\n if (this._rows.length) {\n return this._rows[this._rows.length - 1];\n }\n return undefined;\n }\n\n // find a row (if exists) by row number\n findRow(r) {\n return this._rows[r - 1];\n }\n\n // find multiple rows (if exists) by row number\n findRows(start, length) {\n return this._rows.slice(start - 1, start - 1 + length);\n }\n\n get rowCount() {\n return this._lastRowNumber;\n }\n\n get actualRowCount() {\n // counts actual rows that have actual data\n let count = 0;\n this.eachRow(() => {\n count++;\n });\n return count;\n }\n\n // get a row by row number.\n getRow(r) {\n let row = this._rows[r - 1];\n if (!row) {\n row = this._rows[r - 1] = new Row(this, r);\n }\n return row;\n }\n\n // get multiple rows by row number.\n getRows(start, length) {\n if (length < 1) return undefined;\n const rows = [];\n for (let i = start; i < start + length; i++) {\n rows.push(this.getRow(i));\n }\n return rows;\n }\n\n addRow(value, style = 'n') {\n const rowNo = this._nextRow;\n const row = this.getRow(rowNo);\n row.values = value;\n this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n');\n return row;\n }\n\n addRows(value, style = 'n') {\n const rows = [];\n value.forEach(row => {\n rows.push(this.addRow(row, style));\n });\n return rows;\n }\n\n insertRow(pos, value, style = 'n') {\n this.spliceRows(pos, 0, value);\n this._setStyleOption(pos, style);\n return this.getRow(pos);\n }\n\n insertRows(pos, values, style = 'n') {\n this.spliceRows(pos, 0, ...values);\n if (style !== 'n') {\n // copy over the styles\n for (let i = 0; i < values.length; i++) {\n if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) {\n this._copyStyle(values.length + pos + i, pos + i, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos + i, style[1] === '+');\n }\n }\n }\n return this.getRows(pos, values.length);\n }\n\n // set row at position to same style as of either pervious row (option 'i') or next row (option 'o')\n _setStyleOption(pos, style = 'n') {\n if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) {\n this._copyStyle(pos + 1, pos, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos, style[1] === '+');\n }\n }\n\n _copyStyle(src, dest, styleEmpty = false) {\n const rSrc = this.getRow(src);\n const rDst = this.getRow(dest);\n rDst.style = copyStyle(rSrc.style);\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: styleEmpty}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = copyStyle(cell.style);\n });\n rDst.height = rSrc.height;\n }\n\n duplicateRow(rowNum, count, insert = false) {\n // create count duplicates of rowNum\n // either inserting new or overwriting existing rows\n\n const rSrc = this._rows[rowNum - 1];\n const inserts = new Array(count).fill(rSrc.values);\n this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts);\n\n // now copy styles...\n for (let i = 0; i < count; i++) {\n const rDst = this._rows[rowNum + i];\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n }\n }\n\n spliceRows(start, count, ...inserts) {\n // same problem as row.splice, except worse.\n const nKeep = start + count;\n const nInserts = inserts.length;\n const nExpand = nInserts - count;\n const nEnd = this._rows.length;\n let i;\n let rSrc;\n if (nExpand < 0) {\n // remove rows\n if (start === nEnd) {\n this._rows[nEnd - 1] = undefined;\n }\n for (i = nKeep; i <= nEnd; i++) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n this._rows[i - 1] = undefined;\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n\n // remerge cells accounting for insert offset\n if (cell._value.constructor.name === 'MergeValue') {\n const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber);\n const prevMaster = cell._value._master;\n const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number);\n cellToBeMerged.merge(newMaster);\n }\n });\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now copy over the new values\n for (i = 0; i < nInserts; i++) {\n const rDst = this.getRow(start + i);\n rDst.style = {};\n rDst.values = inserts[i];\n }\n\n // account for defined names\n this.workbook.definedNames.spliceRows(this.name, start, count, nInserts);\n }\n\n // iterate over every row in the worksheet, including maybe empty rows\n eachRow(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = undefined;\n }\n if (options && options.includeEmpty) {\n const n = this._rows.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getRow(i), i);\n }\n } else {\n this._rows.forEach(row => {\n if (row && row.hasValues) {\n iteratee(row, row.number);\n }\n });\n }\n }\n\n // return all rows as sparse array\n getSheetValues() {\n const rows = [];\n this._rows.forEach(row => {\n if (row) {\n rows[row.number] = row.values;\n }\n });\n return rows;\n }\n\n // =========================================================================\n // Cells\n\n // returns the cell at [r,c] or address given by r. If not found, return undefined\n findCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this._rows[address.row - 1];\n return row ? row.findCell(address.col) : undefined;\n }\n\n // return the cell at [r,c] or address given by r. If not found, create a new one.\n getCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this.getRow(address.row);\n return row.getCellEx(address);\n }\n\n // =========================================================================\n // Merge\n\n // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell\n mergeCells(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions);\n }\n\n mergeCellsWithoutStyle(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions, true);\n }\n\n _mergeCellsInternal(dimensions, ignoreStyle) {\n // check cells aren't already merged\n _.each(this._merges, merge => {\n if (merge.intersects(dimensions)) {\n throw new Error('Cannot merge already merged cells');\n }\n });\n\n // apply merge\n const master = this.getCell(dimensions.top, dimensions.left);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n // merge all but the master cell\n if (i > dimensions.top || j > dimensions.left) {\n this.getCell(i, j).merge(master, ignoreStyle);\n }\n }\n }\n\n // index merge\n this._merges[master.address] = dimensions;\n }\n\n _unMergeMaster(master) {\n // master is always top left of a rectangle\n const merge = this._merges[master.address];\n if (merge) {\n for (let i = merge.top; i <= merge.bottom; i++) {\n for (let j = merge.left; j <= merge.right; j++) {\n this.getCell(i, j).unmerge();\n }\n }\n delete this._merges[master.address];\n }\n }\n\n get hasMerges() {\n // return true if this._merges has a merge object\n return _.some(this._merges, Boolean);\n }\n\n // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge,\n // un-merge the group. Note this function can affect multiple merges and merge-blocks are\n // atomic - either they're all merged or all un-merged.\n unMergeCells(...cells) {\n const dimensions = new Range(cells);\n\n // find any cells in that range and unmerge them\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = this.findCell(i, j);\n if (cell) {\n if (cell.type === Enums.ValueType.Merge) {\n // this cell merges to another master\n this._unMergeMaster(cell.master);\n } else if (this._merges[cell.address]) {\n // this cell is a master\n this._unMergeMaster(cell);\n }\n }\n }\n }\n }\n\n // ===========================================================================\n // Shared/Array Formula\n fillFormula(range, formula, results, shareType = 'shared') {\n // Define formula for top-left cell and share to rest\n const decoded = colCache.decode(range);\n const {top, left, bottom, right} = decoded;\n const width = right - left + 1;\n const masterAddress = colCache.encodeAddress(top, left);\n const isShared = shareType === 'shared';\n\n // work out result accessor\n let getResult;\n if (typeof results === 'function') {\n getResult = results;\n } else if (Array.isArray(results)) {\n if (Array.isArray(results[0])) {\n getResult = (row, col) => results[row - top][col - left];\n } else {\n // eslint-disable-next-line no-mixed-operators\n getResult = (row, col) => results[(row - top) * width + (col - left)];\n }\n } else {\n getResult = () => undefined;\n }\n let first = true;\n for (let r = top; r <= bottom; r++) {\n for (let c = left; c <= right; c++) {\n if (first) {\n this.getCell(r, c).value = {\n shareType,\n formula,\n ref: range,\n result: getResult(r, c),\n };\n first = false;\n } else {\n this.getCell(r, c).value = isShared\n ? {\n sharedFormula: masterAddress,\n result: getResult(r, c),\n }\n : getResult(r, c);\n }\n }\n }\n }\n\n // =========================================================================\n // Images\n addImage(imageId, range) {\n const model = {\n type: 'image',\n imageId,\n range,\n };\n this._media.push(new Image(this, model));\n }\n\n getImages() {\n return this._media.filter(m => m.type === 'image');\n }\n\n addBackgroundImage(imageId) {\n const model = {\n type: 'background',\n imageId,\n };\n this._media.push(new Image(this, model));\n }\n\n getBackgroundImageId() {\n const image = this._media.find(m => m.type === 'background');\n return image && image.imageId;\n }\n\n // =========================================================================\n // Worksheet Protection\n protect(password, options) {\n // TODO: make this function truly async\n // perhaps marshal to worker thread or something\n return new Promise(resolve => {\n this.sheetProtection = {\n sheet: true,\n };\n if (options && 'spinCount' in options) {\n // force spinCount to be integer >= 0\n options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;\n }\n if (password) {\n this.sheetProtection.algorithmName = 'SHA-512';\n this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');\n this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount\n this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(\n password,\n 'SHA512',\n this.sheetProtection.saltValue,\n this.sheetProtection.spinCount\n );\n }\n if (options) {\n this.sheetProtection = Object.assign(this.sheetProtection, options);\n if (!password && 'spinCount' in options) {\n delete this.sheetProtection.spinCount;\n }\n }\n resolve();\n });\n }\n\n unprotect() {\n this.sheetProtection = null;\n }\n\n // =========================================================================\n // Tables\n addTable(model) {\n const table = new Table(this, model);\n this.tables[model.name] = table;\n return table;\n }\n\n getTable(name) {\n return this.tables[name];\n }\n\n removeTable(name) {\n delete this.tables[name];\n }\n\n getTables() {\n return Object.values(this.tables);\n }\n\n // ===========================================================================\n // Conditional Formatting\n addConditionalFormatting(cf) {\n this.conditionalFormattings.push(cf);\n }\n\n removeConditionalFormatting(filter) {\n if (typeof filter === 'number') {\n this.conditionalFormattings.splice(filter, 1);\n } else if (filter instanceof Function) {\n this.conditionalFormattings = this.conditionalFormattings.filter(filter);\n } else {\n this.conditionalFormattings = [];\n }\n }\n\n // ===========================================================================\n // Deprecated\n get tabColor() {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n return this.properties.tabColor;\n }\n\n set tabColor(value) {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n this.properties.tabColor = value;\n }\n\n // ===========================================================================\n // Model\n\n get model() {\n const model = {\n id: this.id,\n name: this.name,\n dataValidations: this.dataValidations.model,\n properties: this.properties,\n state: this.state,\n pageSetup: this.pageSetup,\n headerFooter: this.headerFooter,\n rowBreaks: this.rowBreaks,\n views: this.views,\n autoFilter: this.autoFilter,\n media: this._media.map(medium => medium.model),\n sheetProtection: this.sheetProtection,\n tables: Object.values(this.tables).map(table => table.model),\n conditionalFormattings: this.conditionalFormattings,\n };\n\n // =================================================\n // columns\n model.cols = Column.toModel(this.columns);\n\n // ==========================================================\n // Rows\n const rows = (model.rows = []);\n const dimensions = (model.dimensions = new Range());\n this._rows.forEach(row => {\n const rowModel = row && row.model;\n if (rowModel) {\n dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max);\n rows.push(rowModel);\n }\n });\n\n // ==========================================================\n // Merges\n model.merges = [];\n _.each(this._merges, merge => {\n model.merges.push(merge.range);\n });\n\n return model;\n }\n\n _parseRows(model) {\n this._rows = [];\n model.rows.forEach(rowModel => {\n const row = new Row(this, rowModel.number);\n this._rows[row.number - 1] = row;\n row.model = rowModel;\n });\n }\n\n _parseMergeCells(model) {\n _.each(model.mergeCells, merge => {\n // Do not merge styles when importing an Excel file\n // since each cell may have different styles intentionally.\n this.mergeCellsWithoutStyle(merge);\n });\n }\n\n set model(value) {\n this.name = value.name;\n this._columns = Column.fromModel(this, value.cols);\n this._parseRows(value);\n\n this._parseMergeCells(value);\n this.dataValidations = new DataValidations(value.dataValidations);\n this.properties = value.properties;\n this.pageSetup = value.pageSetup;\n this.headerFooter = value.headerFooter;\n this.views = value.views;\n this.autoFilter = value.autoFilter;\n this._media = value.media.map(medium => new Image(this, medium));\n this.sheetProtection = value.sheetProtection;\n this.tables = value.tables.reduce((tables, table) => {\n const t = new Table();\n t.model = table;\n tables[table.name] = t;\n return tables;\n }, {});\n this.conditionalFormattings = value.conditionalFormattings;\n }\n}\n\nmodule.exports = Worksheet;\n", + "// this bundle is built without polyfill leaving apps the freedom to add their own\nconst ExcelJS = {\n Workbook: require('./doc/workbook'),\n};\n\n// Object.assign mono-fill\nconst Enums = require('./doc/enums');\n\nObject.keys(Enums).forEach(key => {\n ExcelJS[key] = Enums[key];\n});\n\nmodule.exports = ExcelJS;\n", + "// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');\n\nfunction bufferToString(chunk) {\n if (typeof chunk === 'string') {\n return chunk;\n }\n if (textDecoder) {\n return textDecoder.decode(chunk);\n }\n return chunk.toString();\n}\n\nexports.bufferToString = bufferToString;\n", + "// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8');\nconst {Buffer} = require('buffer');\n\nfunction stringToBuffer(str) {\n if (typeof str !== 'string') {\n return str;\n }\n if (textEncoder) {\n return Buffer.from(textEncoder.encode(str).buffer);\n }\n return Buffer.from(str);\n}\n\nexports.stringToBuffer = stringToBuffer;\n", + "const _ = require('./under-dash');\nconst colCache = require('./col-cache');\n\nclass CellMatrix {\n constructor(template) {\n this.template = template;\n this.sheets = {};\n }\n\n addCell(addressStr) {\n this.addCellEx(colCache.decodeEx(addressStr));\n }\n\n getCell(addressStr) {\n return this.findCellEx(colCache.decodeEx(addressStr), true);\n }\n\n findCell(addressStr) {\n return this.findCellEx(colCache.decodeEx(addressStr), false);\n }\n\n findCellAt(sheetName, rowNumber, colNumber) {\n const sheet = this.sheets[sheetName];\n const row = sheet && sheet[rowNumber];\n return row && row[colNumber];\n }\n\n addCellEx(address) {\n if (address.top) {\n for (let row = address.top; row <= address.bottom; row++) {\n for (let col = address.left; col <= address.right; col++) {\n this.getCellAt(address.sheetName, row, col);\n }\n }\n } else {\n this.findCellEx(address, true);\n }\n }\n\n getCellEx(address) {\n return this.findCellEx(address, true);\n }\n\n findCellEx(address, create) {\n const sheet = this.findSheet(address, create);\n const row = this.findSheetRow(sheet, address, create);\n return this.findRowCell(row, address, create);\n }\n\n getCellAt(sheetName, rowNumber, colNumber) {\n const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []);\n const row = sheet[rowNumber] || (sheet[rowNumber] = []);\n const cell =\n row[colNumber] ||\n (row[colNumber] = {\n sheetName,\n address: colCache.n2l(colNumber) + rowNumber,\n row: rowNumber,\n col: colNumber,\n });\n return cell;\n }\n\n removeCellEx(address) {\n const sheet = this.findSheet(address);\n if (!sheet) {\n return;\n }\n const row = this.findSheetRow(sheet, address);\n if (!row) {\n return;\n }\n delete row[address.col];\n }\n\n forEachInSheet(sheetName, callback) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n sheet.forEach((row, rowNumber) => {\n if (row) {\n row.forEach((cell, colNumber) => {\n if (cell) {\n callback(cell, rowNumber, colNumber);\n }\n });\n }\n });\n }\n }\n\n forEach(callback) {\n _.each(this.sheets, (sheet, sheetName) => {\n this.forEachInSheet(sheetName, callback);\n });\n }\n\n map(callback) {\n const results = [];\n this.forEach(cell => {\n results.push(callback(cell));\n });\n return results;\n }\n\n findSheet(address, create) {\n const name = address.sheetName;\n if (this.sheets[name]) {\n return this.sheets[name];\n }\n if (create) {\n return (this.sheets[name] = []);\n }\n return undefined;\n }\n\n findSheetRow(sheet, address, create) {\n const {row} = address;\n if (sheet && sheet[row]) {\n return sheet[row];\n }\n if (create) {\n return (sheet[row] = []);\n }\n return undefined;\n }\n\n findRowCell(row, address, create) {\n const {col} = address;\n if (row && row[col]) {\n return row[col];\n }\n if (create) {\n return (row[col] = this.template\n ? Object.assign(address, JSON.parse(JSON.stringify(this.template)))\n : address);\n }\n return undefined;\n }\n\n spliceRows(sheetName, start, numDelete, numInsert) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n const inserts = [];\n for (let i = 0; i < numInsert; i++) {\n inserts.push([]);\n }\n sheet.splice(start, numDelete, ...inserts);\n }\n }\n\n spliceColumns(sheetName, start, numDelete, numInsert) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n const inserts = [];\n for (let i = 0; i < numInsert; i++) {\n inserts.push(null);\n }\n _.each(sheet, row => {\n row.splice(start, numDelete, ...inserts);\n });\n }\n }\n}\n\nmodule.exports = CellMatrix;\n", + "const addressRegex = /^[A-Z]+\\d+$/;\n// =========================================================================\n// Column Letter to Number conversion\nconst colCache = {\n _dictionary: [\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'F',\n 'G',\n 'H',\n 'I',\n 'J',\n 'K',\n 'L',\n 'M',\n 'N',\n 'O',\n 'P',\n 'Q',\n 'R',\n 'S',\n 'T',\n 'U',\n 'V',\n 'W',\n 'X',\n 'Y',\n 'Z',\n ],\n _l2nFill: 0,\n _l2n: {},\n _n2l: [],\n _level(n) {\n if (n <= 26) {\n return 1;\n }\n if (n <= 26 * 26) {\n return 2;\n }\n return 3;\n },\n _fill(level) {\n let c;\n let v;\n let l1;\n let l2;\n let l3;\n let n = 1;\n if (level >= 4) {\n throw new Error('Out of bounds. Excel supports columns from 1 to 16384');\n }\n if (this._l2nFill < 1 && level >= 1) {\n while (n <= 26) {\n c = this._dictionary[n - 1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 1;\n }\n if (this._l2nFill < 2 && level >= 2) {\n n = 27;\n while (n <= 26 + (26 * 26)) {\n v = n - (26 + 1);\n l1 = v % 26;\n l2 = Math.floor(v / 26);\n c = this._dictionary[l2] + this._dictionary[l1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 2;\n }\n if (this._l2nFill < 3 && level >= 3) {\n n = 26 + (26 * 26) + 1;\n while (n <= 16384) {\n v = n - ((26 * 26) + 26 + 1);\n l1 = v % 26;\n l2 = Math.floor(v / 26) % 26;\n l3 = Math.floor(v / (26 * 26));\n c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 3;\n }\n },\n l2n(l) {\n if (!this._l2n[l]) {\n this._fill(l.length);\n }\n if (!this._l2n[l]) {\n throw new Error(`Out of bounds. Invalid column letter: ${l}`);\n }\n return this._l2n[l];\n },\n n2l(n) {\n if (n < 1 || n > 16384) {\n throw new Error(`${n} is out of bounds. Excel supports columns from 1 to 16384`);\n }\n if (!this._n2l[n]) {\n this._fill(this._level(n));\n }\n return this._n2l[n];\n },\n\n // =========================================================================\n // Address processing\n _hash: {},\n\n // check if value looks like an address\n validateAddress(value) {\n if (!addressRegex.test(value)) {\n throw new Error(`Invalid Address: ${value}`);\n }\n return true;\n },\n\n // convert address string into structure\n decodeAddress(value) {\n const addr = value.length < 5 && this._hash[value];\n if (addr) {\n return addr;\n }\n let hasCol = false;\n let col = '';\n let colNumber = 0;\n let hasRow = false;\n let row = '';\n let rowNumber = 0;\n for (let i = 0, char; i < value.length; i++) {\n char = value.charCodeAt(i);\n // col should before row\n if (!hasRow && char >= 65 && char <= 90) {\n // 65 = 'A'.charCodeAt(0)\n // 90 = 'Z'.charCodeAt(0)\n hasCol = true;\n col += value[i];\n // colNumber starts from 1\n colNumber = (colNumber * 26) + char - 64;\n } else if (char >= 48 && char <= 57) {\n // 48 = '0'.charCodeAt(0)\n // 57 = '9'.charCodeAt(0)\n hasRow = true;\n row += value[i];\n // rowNumber starts from 0\n rowNumber = (rowNumber * 10) + char - 48;\n } else if (hasRow && hasCol && char !== 36) {\n // 36 = '$'.charCodeAt(0)\n break;\n }\n }\n if (!hasCol) {\n colNumber = undefined;\n } else if (colNumber > 16384) {\n throw new Error(`Out of bounds. Invalid column letter: ${col}`);\n }\n if (!hasRow) {\n rowNumber = undefined;\n }\n\n // in case $row$col\n value = col + row;\n\n const address = {\n address: value,\n col: colNumber,\n row: rowNumber,\n $col$row: `$${col}$${row}`,\n };\n\n // mem fix - cache only the tl 100x100 square\n if (colNumber <= 100 && rowNumber <= 100) {\n this._hash[value] = address;\n this._hash[address.$col$row] = address;\n }\n\n return address;\n },\n\n // convert r,c into structure (if only 1 arg, assume r is address string)\n getAddress(r, c) {\n if (c) {\n const address = this.n2l(c) + r;\n return this.decodeAddress(address);\n }\n return this.decodeAddress(r);\n },\n\n // convert [address], [tl:br] into address structures\n decode(value) {\n const parts = value.split(':');\n if (parts.length === 2) {\n const tl = this.decodeAddress(parts[0]);\n const br = this.decodeAddress(parts[1]);\n const result = {\n top: Math.min(tl.row, br.row),\n left: Math.min(tl.col, br.col),\n bottom: Math.max(tl.row, br.row),\n right: Math.max(tl.col, br.col),\n };\n // reconstruct tl, br and dimensions\n result.tl = this.n2l(result.left) + result.top;\n result.br = this.n2l(result.right) + result.bottom;\n result.dimensions = `${result.tl}:${result.br}`;\n return result;\n }\n return this.decodeAddress(value);\n },\n\n // convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures\n decodeEx(value) {\n const groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/);\n\n const sheetName = groups[1] || groups[2]; // Qouted and unqouted groups\n const reference = groups[3]; // Remaining address\n\n const parts = reference.split(':');\n if (parts.length > 1) {\n let tl = this.decodeAddress(parts[0]);\n let br = this.decodeAddress(parts[1]);\n const top = Math.min(tl.row, br.row);\n const left = Math.min(tl.col, br.col);\n const bottom = Math.max(tl.row, br.row);\n const right = Math.max(tl.col, br.col);\n\n tl = this.n2l(left) + top;\n br = this.n2l(right) + bottom;\n\n return {\n top,\n left,\n bottom,\n right,\n sheetName,\n tl: {address: tl, col: left, row: top, $col$row: `$${this.n2l(left)}$${top}`, sheetName},\n br: {\n address: br,\n col: right,\n row: bottom,\n $col$row: `$${this.n2l(right)}$${bottom}`,\n sheetName,\n },\n dimensions: `${tl}:${br}`,\n };\n }\n if (reference.startsWith('#')) {\n return sheetName ? {sheetName, error: reference} : {error: reference};\n }\n\n const address = this.decodeAddress(reference);\n return sheetName ? {sheetName, ...address} : address;\n },\n\n // convert row,col into address string\n encodeAddress(row, col) {\n return colCache.n2l(col) + row;\n },\n\n // convert row,col into string address or t,l,b,r into range\n encode() {\n switch (arguments.length) {\n case 2:\n return colCache.encodeAddress(arguments[0], arguments[1]);\n case 4:\n return `${colCache.encodeAddress(arguments[0], arguments[1])}:${colCache.encodeAddress(\n arguments[2],\n arguments[3]\n )}`;\n default:\n throw new Error('Can only encode with 2 or 4 arguments');\n }\n },\n\n // return true if address is contained within range\n inRange(range, address) {\n const [left, top, , right, bottom] = range;\n const [col, row] = address;\n return col >= left && col <= right && row >= top && row <= bottom;\n },\n};\n\nmodule.exports = colCache;\n", + "const oneDepthCopy = (obj, nestKeys) => ({\n ...obj,\n ...nestKeys.reduce((memo, key) => {\n if (obj[key]) memo[key] = {...obj[key]};\n return memo;\n }, {}),\n});\n\nconst setIfExists = (src, dst, key, nestKeys = []) => {\n if (src[key]) dst[key] = oneDepthCopy(src[key], nestKeys);\n};\n\nconst isEmptyObj = obj => Object.keys(obj).length === 0;\n\nconst copyStyle = style => {\n if (!style) return style;\n if (isEmptyObj(style)) return {};\n\n const copied = {...style};\n\n setIfExists(style, copied, 'font', ['color']);\n setIfExists(style, copied, 'alignment');\n setIfExists(style, copied, 'protection');\n if (style.border) {\n setIfExists(style, copied, 'border');\n setIfExists(style.border, copied.border, 'top', ['color']);\n setIfExists(style.border, copied.border, 'left', ['color']);\n setIfExists(style.border, copied.border, 'bottom', ['color']);\n setIfExists(style.border, copied.border, 'right', ['color']);\n setIfExists(style.border, copied.border, 'diagonal', ['color']);\n }\n\n if (style.fill) {\n setIfExists(style, copied, 'fill', ['fgColor', 'bgColor', 'center']);\n if (style.fill.stops) {\n copied.fill.stops = style.fill.stops.map(s => oneDepthCopy(s, ['color']));\n }\n }\n\n return copied;\n};\n\nexports.copyStyle = copyStyle;\n", + "'use strict';\n\nconst crypto = require('crypto');\n\nconst Encryptor = {\n /**\n * Calculate a hash of the concatenated buffers with the given algorithm.\n * @param {string} algorithm - The hash algorithm.\n * @returns {Buffer} The hash\n */\n hash(algorithm, ...buffers) {\n const hash = crypto.createHash(algorithm);\n hash.update(Buffer.concat(buffers));\n return hash.digest();\n },\n /**\n * Convert a password into an encryption key\n * @param {string} password - The password\n * @param {string} hashAlgorithm - The hash algoritm\n * @param {string} saltValue - The salt value\n * @param {number} spinCount - The spin count\n * @param {number} keyBits - The length of the key in bits\n * @param {Buffer} blockKey - The block key\n * @returns {Buffer} The encryption key\n */\n convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) {\n hashAlgorithm = hashAlgorithm.toLowerCase();\n const hashes = crypto.getHashes();\n if (hashes.indexOf(hashAlgorithm) < 0) {\n throw new Error(`Hash algorithm '${hashAlgorithm}' not supported!`);\n }\n\n // Password must be in unicode buffer\n const passwordBuffer = Buffer.from(password, 'utf16le');\n // Generate the initial hash\n let key = this.hash(hashAlgorithm, Buffer.from(saltValue, 'base64'), passwordBuffer);\n // Now regenerate until spin count\n for (let i = 0; i < spinCount; i++) {\n const iterator = Buffer.alloc(4);\n // this is the 'special' element of Excel password hashing\n // that stops us from using crypto.pbkdf2()\n iterator.writeUInt32LE(i, 0);\n key = this.hash(hashAlgorithm, key, iterator);\n }\n return key.toString('base64');\n },\n /**\n * Generates cryptographically strong pseudo-random data.\n * @param size The size argument is a number indicating the number of bytes to generate.\n */\n randomBytes(size) {\n return crypto.randomBytes(size);\n },\n};\nmodule.exports = Encryptor;\n", + "const {SaxesParser} = require('saxes');\nconst {PassThrough} = require('readable-stream');\nconst {bufferToString} = require('./browser-buffer-decode');\n\nmodule.exports = async function* (iterable) {\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old streams\n if (iterable.pipe && !iterable[Symbol.asyncIterator]) {\n iterable = iterable.pipe(new PassThrough());\n }\n const saxesParser = new SaxesParser();\n let error;\n saxesParser.on('error', err => {\n error = err;\n });\n let events = [];\n saxesParser.on('opentag', value => events.push({eventType: 'opentag', value}));\n saxesParser.on('text', value => events.push({eventType: 'text', value}));\n saxesParser.on('closetag', value => events.push({eventType: 'closetag', value}));\n for await (const chunk of iterable) {\n saxesParser.write(bufferToString(chunk));\n // saxesParser.write and saxesParser.on() are synchronous,\n // so we can only reach the below line once all events have been emitted\n if (error) throw error;\n // As a performance optimization, we gather all events instead of passing\n // them one by one, which would cause each event to go through the event queue\n yield events;\n events = [];\n }\n};\n", + "const colCache = require('./col-cache');\n\n// const cellRefRegex = /(([a-z_\\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i;\nconst replacementCandidateRx = /(([a-z_\\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;\nconst CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;\n\nfunction slideFormula(formula, fromCell, toCell) {\n const offset = colCache.decode(fromCell);\n const to = colCache.decode(toCell);\n return formula.replace(\n replacementCandidateRx,\n (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => {\n if (trailingParen) {\n return refMatch;\n }\n const match = CRrx.exec(addrPart);\n if (match) {\n const colDollar = match[1];\n const colStr = match[2].toUpperCase();\n const rowDollar = match[3];\n const rowStr = match[4];\n if (colStr.length > 3 || (colStr.length === 3 && colStr > 'XFD')) {\n // > XFD is the highest col number in excel 2007 and beyond, so this is a named range\n return refMatch;\n }\n let col = colCache.l2n(colStr);\n let row = parseInt(rowStr, 10);\n if (!colDollar) {\n col += to.col - offset.col;\n }\n if (!rowDollar) {\n row += to.row - offset.row;\n }\n const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row;\n return res;\n }\n return refMatch;\n }\n );\n}\n\nmodule.exports = {\n slideFormula,\n};\n", + "/* eslint-disable max-classes-per-file */\nconst Stream = require('readable-stream');\n\nconst utils = require('./utils');\nconst StringBuf = require('./string-buf');\n\n// =============================================================================\n// data chunks - encapsulating incoming data\nclass StringChunk {\n constructor(data, encoding) {\n this._data = data;\n this._encoding = encoding;\n }\n\n get length() {\n return this.toBuffer().length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n return this.toBuffer().copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n if (!this._buffer) {\n this._buffer = Buffer.from(this._data, this._encoding);\n }\n return this._buffer;\n }\n}\n\nclass StringBufChunk {\n constructor(data) {\n this._data = data;\n }\n\n get length() {\n return this._data.length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n // eslint-disable-next-line no-underscore-dangle\n return this._data._buf.copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n return this._data.toBuffer();\n }\n}\n\nclass BufferChunk {\n constructor(data) {\n this._data = data;\n }\n\n get length() {\n return this._data.length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n this._data.copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n return this._data;\n }\n}\n\n// =============================================================================\n// ReadWriteBuf - a single buffer supporting simple read-write\nclass ReadWriteBuf {\n constructor(size) {\n this.size = size;\n // the buffer\n this.buffer = Buffer.alloc(size);\n // read index\n this.iRead = 0;\n // write index\n this.iWrite = 0;\n }\n\n toBuffer() {\n if (this.iRead === 0 && this.iWrite === this.size) {\n return this.buffer;\n }\n\n const buf = Buffer.alloc(this.iWrite - this.iRead);\n this.buffer.copy(buf, 0, this.iRead, this.iWrite);\n return buf;\n }\n\n get length() {\n return this.iWrite - this.iRead;\n }\n\n get eod() {\n return this.iRead === this.iWrite;\n }\n\n get full() {\n return this.iWrite === this.size;\n }\n\n read(size) {\n let buf;\n // read size bytes from buffer and return buffer\n if (size === 0) {\n // special case - return null if no data requested\n return null;\n }\n\n if (size === undefined || size >= this.length) {\n // if no size specified or size is at least what we have then return all of the bytes\n buf = this.toBuffer();\n this.iRead = this.iWrite;\n return buf;\n }\n\n // otherwise return a chunk\n buf = Buffer.alloc(size);\n this.buffer.copy(buf, 0, this.iRead, size);\n this.iRead += size;\n return buf;\n }\n\n write(chunk, offset, length) {\n // write as many bytes from data from optional source offset\n // and return number of bytes written\n const size = Math.min(length, this.size - this.iWrite);\n chunk.copy(this.buffer, this.iWrite, offset, offset + size);\n this.iWrite += size;\n return size;\n }\n}\n\n// =============================================================================\n// StreamBuf - a multi-purpose read-write stream\n// As MemBuf - write as much data as you like. Then call toBuffer() to consolidate\n// As StreamHub - pipe to multiple writables\n// As readable stream - feed data into the writable part and have some other code read from it.\n\n// Note: Not sure why but StreamBuf does not like JS \"class\" sugar. It fails the\n// integration tests\nconst StreamBuf = function(options) {\n options = options || {};\n this.bufSize = options.bufSize || 1024 * 1024;\n this.buffers = [];\n\n // batch mode fills a buffer completely before passing the data on\n // to pipes or 'readable' event listeners\n this.batch = options.batch || false;\n\n this.corked = false;\n // where in the current writable buffer we're up to\n this.inPos = 0;\n\n // where in the current readable buffer we've read up to\n this.outPos = 0;\n\n // consuming pipe streams go here\n this.pipes = [];\n\n // controls emit('data')\n this.paused = false;\n\n this.encoding = null;\n};\n\nutils.inherits(StreamBuf, Stream.Duplex, {\n toBuffer() {\n switch (this.buffers.length) {\n case 0:\n return null;\n case 1:\n return this.buffers[0].toBuffer();\n default:\n return Buffer.concat(this.buffers.map(rwBuf => rwBuf.toBuffer()));\n }\n },\n\n // writable\n // event drain - if write returns false (which it won't), indicates when safe to write again.\n // finish - end() has been called\n // pipe(src) - pipe() has been called on readable\n // unpipe(src) - unpipe() has been called on readable\n // error - duh\n\n _getWritableBuffer() {\n if (this.buffers.length) {\n const last = this.buffers[this.buffers.length - 1];\n if (!last.full) {\n return last;\n }\n }\n const buf = new ReadWriteBuf(this.bufSize);\n this.buffers.push(buf);\n return buf;\n },\n\n async _pipe(chunk) {\n const write = function(pipe) {\n return new Promise(resolve => {\n pipe.write(chunk.toBuffer(), () => {\n resolve();\n });\n });\n };\n await Promise.all(this.pipes.map(write));\n },\n _writeToBuffers(chunk) {\n let inPos = 0;\n const inLen = chunk.length;\n while (inPos < inLen) {\n // find writable buffer\n const buffer = this._getWritableBuffer();\n\n // write some data\n inPos += buffer.write(chunk, inPos, inLen - inPos);\n }\n },\n async write(data, encoding, callback) {\n if (encoding instanceof Function) {\n callback = encoding;\n encoding = 'utf8';\n }\n callback = callback || utils.nop;\n\n // encapsulate data into a chunk\n let chunk;\n if (data instanceof StringBuf) {\n chunk = new StringBufChunk(data);\n } else if (data instanceof Buffer) {\n chunk = new BufferChunk(data);\n } else if (typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer) {\n chunk = new StringChunk(data, encoding);\n } else {\n throw new Error('Chunk must be one of type String, Buffer or StringBuf.');\n }\n\n // now, do something with the chunk\n if (this.pipes.length) {\n if (this.batch) {\n this._writeToBuffers(chunk);\n while (!this.corked && this.buffers.length > 1) {\n this._pipe(this.buffers.shift());\n }\n } else if (!this.corked) {\n await this._pipe(chunk);\n callback();\n } else {\n this._writeToBuffers(chunk);\n process.nextTick(callback);\n }\n } else {\n if (!this.paused) {\n this.emit('data', chunk.toBuffer());\n }\n\n this._writeToBuffers(chunk);\n this.emit('readable');\n }\n\n return true;\n },\n cork() {\n this.corked = true;\n },\n _flush(/* destination */) {\n // if we have comsumers...\n if (this.pipes.length) {\n // and there's stuff not written\n while (this.buffers.length) {\n this._pipe(this.buffers.shift());\n }\n }\n },\n uncork() {\n this.corked = false;\n this._flush();\n },\n end(chunk, encoding, callback) {\n const writeComplete = error => {\n if (error) {\n callback(error);\n } else {\n this._flush();\n this.pipes.forEach(pipe => {\n pipe.end();\n });\n this.emit('finish');\n }\n };\n if (chunk) {\n this.write(chunk, encoding, writeComplete);\n } else {\n writeComplete();\n }\n },\n\n // readable\n // event readable - some data is now available\n // event data - switch to flowing mode - feeds chunks to handler\n // event end - no more data\n // event close - optional, indicates upstream close\n // event error - duh\n read(size) {\n let buffers;\n // read min(buffer, size || infinity)\n if (size) {\n buffers = [];\n while (size && this.buffers.length && !this.buffers[0].eod) {\n const first = this.buffers[0];\n const buffer = first.read(size);\n size -= buffer.length;\n buffers.push(buffer);\n if (first.eod && first.full) {\n this.buffers.shift();\n }\n }\n return Buffer.concat(buffers);\n }\n\n buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean);\n this.buffers = [];\n return Buffer.concat(buffers);\n },\n setEncoding(encoding) {\n // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects\n this.encoding = encoding;\n },\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n isPaused() {\n return !!this.paused;\n },\n pipe(destination) {\n // add destination to pipe list & write current buffer\n this.pipes.push(destination);\n if (!this.paused && this.buffers.length) {\n this.end();\n }\n },\n unpipe(destination) {\n // remove destination from pipe list\n this.pipes = this.pipes.filter(pipe => pipe !== destination);\n },\n unshift(/* chunk */) {\n // some numpty has read some data that's not for them and they want to put it back!\n // Might implement this some day\n throw new Error('Not Implemented');\n },\n wrap(/* stream */) {\n // not implemented\n throw new Error('Not Implemented');\n },\n});\n\nmodule.exports = StreamBuf;\n", + "// StringBuf - a way to keep string memory operations to a minimum\n// while building the strings for the xml files\nclass StringBuf {\n constructor(options) {\n this._buf = Buffer.alloc((options && options.size) || 16384);\n this._encoding = (options && options.encoding) || 'utf8';\n\n // where in the buffer we are at\n this._inPos = 0;\n\n // for use by toBuffer()\n this._buffer = undefined;\n }\n\n get length() {\n return this._inPos;\n }\n\n get capacity() {\n return this._buf.length;\n }\n\n get buffer() {\n return this._buf;\n }\n\n toBuffer() {\n // return the current data as a single enclosing buffer\n if (!this._buffer) {\n this._buffer = Buffer.alloc(this.length);\n this._buf.copy(this._buffer, 0, 0, this.length);\n }\n return this._buffer;\n }\n\n reset(position) {\n position = position || 0;\n this._buffer = undefined;\n this._inPos = position;\n }\n\n _grow(min) {\n let size = this._buf.length * 2;\n while (size < min) {\n size *= 2;\n }\n const buf = Buffer.alloc(size);\n this._buf.copy(buf, 0);\n this._buf = buf;\n }\n\n addText(text) {\n this._buffer = undefined;\n\n let inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\n\n // if we've hit (or nearing capacity), grow the buf\n while (inPos >= this._buf.length - 4) {\n this._grow(this._inPos + text.length);\n\n // keep trying to write until we've completely written the text\n inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\n }\n\n this._inPos = inPos;\n }\n\n addStringBuf(inBuf) {\n if (inBuf.length) {\n this._buffer = undefined;\n\n if (this.length + inBuf.length > this.capacity) {\n this._grow(this.length + inBuf.length);\n }\n // eslint-disable-next-line no-underscore-dangle\n inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length);\n this._inPos += inBuf.length;\n }\n }\n}\n\nmodule.exports = StringBuf;\n", + "const {toString} = Object.prototype;\nconst escapeHtmlRegex = /[\"&<>]/;\nconst _ = {\n each: function each(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n obj.forEach(cb);\n } else {\n Object.keys(obj).forEach(key => {\n cb(obj[key], key);\n });\n }\n }\n },\n\n some: function some(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.some(cb);\n }\n return Object.keys(obj).some(key => cb(obj[key], key));\n }\n return false;\n },\n\n every: function every(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.every(cb);\n }\n return Object.keys(obj).every(key => cb(obj[key], key));\n }\n return true;\n },\n\n map: function map(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.map(cb);\n }\n return Object.keys(obj).map(key => cb(obj[key], key));\n }\n return [];\n },\n\n keyBy(a, p) {\n return a.reduce((o, v) => {\n o[v[p]] = v;\n return o;\n }, {});\n },\n\n isEqual: function isEqual(a, b) {\n const aType = typeof a;\n const bType = typeof b;\n const aArray = Array.isArray(a);\n const bArray = Array.isArray(b);\n let keys;\n\n if (aType !== bType) {\n return false;\n }\n switch (typeof a) {\n case 'object':\n if (aArray || bArray) {\n if (aArray && bArray) {\n return (\n a.length === b.length &&\n a.every((aValue, index) => {\n const bValue = b[index];\n return _.isEqual(aValue, bValue);\n })\n );\n }\n return false;\n }\n\n if (a === null || b === null) {\n return a === b;\n }\n\n // Compare object keys and values\n keys = Object.keys(a);\n\n if (Object.keys(b).length !== keys.length) {\n return false;\n }\n\n for (const key of keys) {\n if (!b.hasOwnProperty(key)) {\n return false;\n }\n }\n\n return _.every(a, (aValue, key) => {\n const bValue = b[key];\n return _.isEqual(aValue, bValue);\n });\n\n default:\n return a === b;\n }\n },\n\n escapeHtml(html) {\n const regexResult = escapeHtmlRegex.exec(html);\n if (!regexResult) return html;\n\n let result = '';\n let escape = '';\n let lastIndex = 0;\n let i = regexResult.index;\n for (; i < html.length; i++) {\n switch (html.charAt(i)) {\n case '\"':\n escape = '"';\n break;\n case '&':\n escape = '&';\n break;\n case '\\'':\n escape = ''';\n break;\n case '<':\n escape = '<';\n break;\n case '>':\n escape = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== i) result += html.substring(lastIndex, i);\n lastIndex = i + 1;\n result += escape;\n }\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\n return result;\n },\n\n strcmp(a, b) {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n },\n\n isUndefined(val) {\n return toString.call(val) === '[object Undefined]';\n },\n\n isObject(val) {\n return toString.call(val) === '[object Object]';\n },\n\n deepMerge() {\n const target = arguments[0] || {};\n const {length} = arguments;\n // eslint-disable-next-line one-var\n let src, clone, copyIsArray;\n\n function assignValue(val, key) {\n src = target[key];\n copyIsArray = Array.isArray(val);\n if (_.isObject(val) || copyIsArray) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && Array.isArray(src) ? src : [];\n } else {\n clone = src && _.isObject(src) ? src : {};\n }\n target[key] = _.deepMerge(clone, val);\n } else if (!_.isUndefined(val)) {\n target[key] = val;\n }\n }\n\n for (let i = 0; i < length; i++) {\n _.each(arguments[i], assignValue);\n }\n return target;\n },\n};\n\nmodule.exports = _;\n", + "const fs = require('fs');\n\n// useful stuff\nconst inherits = function(cls, superCtor, statics, prototype) {\n // eslint-disable-next-line no-underscore-dangle\n cls.super_ = superCtor;\n\n if (!prototype) {\n prototype = statics;\n statics = null;\n }\n\n if (statics) {\n Object.keys(statics).forEach(i => {\n Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));\n });\n }\n\n const properties = {\n constructor: {\n value: cls,\n enumerable: false,\n writable: false,\n configurable: true,\n },\n };\n if (prototype) {\n Object.keys(prototype).forEach(i => {\n properties[i] = Object.getOwnPropertyDescriptor(prototype, i);\n });\n }\n\n cls.prototype = Object.create(superCtor.prototype, properties);\n};\n\n// eslint-disable-next-line no-control-regex\nconst xmlDecodeRegex = /[<>&'\"\\x7F\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]/;\nconst utils = {\n nop() {},\n promiseImmediate(value) {\n return new Promise(resolve => {\n if (global.setImmediate) {\n setImmediate(() => {\n resolve(value);\n });\n } else {\n // poorman's setImmediate - must wait at least 1ms\n setTimeout(() => {\n resolve(value);\n }, 1);\n }\n });\n },\n inherits,\n dateToExcel(d, date1904) {\n return 25569 + ( d.getTime() / (24 * 3600 * 1000) ) - (date1904 ? 1462 : 0);\n },\n excelToDate(v, date1904) {\n const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);\n return new Date(millisecondSinceEpoch);\n },\n parsePath(filepath) {\n const last = filepath.lastIndexOf('/');\n return {\n path: filepath.substring(0, last),\n name: filepath.substring(last + 1),\n };\n },\n getRelsPath(filepath) {\n const path = utils.parsePath(filepath);\n return `${path.path}/_rels/${path.name}.rels`;\n },\n xmlEncode(text) {\n const regexResult = xmlDecodeRegex.exec(text);\n if (!regexResult) return text;\n\n let result = '';\n let escape = '';\n let lastIndex = 0;\n let i = regexResult.index;\n for (; i < text.length; i++) {\n const charCode = text.charCodeAt(i);\n switch (charCode) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n case 127:\n escape = '';\n break;\n default: {\n if (charCode <= 31 && (charCode <= 8 || (charCode >= 11 && charCode !== 13))) {\n escape = '';\n break;\n }\n continue;\n }\n }\n if (lastIndex !== i) result += text.substring(lastIndex, i);\n lastIndex = i + 1;\n if (escape) result += escape;\n }\n if (lastIndex !== i) return result + text.substring(lastIndex, i);\n return result;\n },\n xmlDecode(text) {\n return text.replace(/&([a-z]*);/g, c => {\n switch (c) {\n case '<':\n return '<';\n case '>':\n return '>';\n case '&':\n return '&';\n case ''':\n return '\\'';\n case '"':\n return '\"';\n default:\n return c;\n }\n });\n },\n validInt(value) {\n const i = parseInt(value, 10);\n return !Number.isNaN(i) ? i : 0;\n },\n\n isDateFmt(fmt) {\n if (!fmt) {\n return false;\n }\n\n // must remove all chars inside quotes and []\n fmt = fmt.replace(/\\[[^\\]]*]/g, '');\n fmt = fmt.replace(/\"[^\"]*\"/g, '');\n // then check for date formatting chars\n const result = fmt.match(/[ymdhMsb]+/) !== null;\n return result;\n },\n\n fs: {\n exists(path) {\n return new Promise(resolve => {\n fs.access(path, fs.constants.F_OK, err => {\n resolve(!err);\n });\n });\n },\n },\n\n toIsoDateString(dt) {\n return dt.toIsoString().subsstr(0, 10);\n },\n\n parseBoolean(value) {\n return value === true || value === 'true' || value === 1 || value === '1';\n },\n};\n\nmodule.exports = utils;\n", + "const _ = require('./under-dash');\n\nconst utils = require('./utils');\n\n// constants\nconst OPEN_ANGLE = '<';\nconst CLOSE_ANGLE = '>';\nconst OPEN_ANGLE_SLASH = '';\n\nfunction pushAttribute(xml, name, value) {\n xml.push(` ${name}=\"${utils.xmlEncode(value.toString())}\"`);\n}\nfunction pushAttributes(xml, attributes) {\n if (attributes) {\n const tmp = [];\n _.each(attributes, (value, name) => {\n if (value !== undefined) {\n pushAttribute(tmp, name, value);\n }\n });\n xml.push(tmp.join(\"\"));\n }\n}\n\nclass XmlStream {\n constructor() {\n this._xml = [];\n this._stack = [];\n this._rollbacks = [];\n }\n\n get tos() {\n return this._stack.length ? this._stack[this._stack.length - 1] : undefined;\n }\n\n get cursor() {\n // handy way to track whether anything has been added\n return this._xml.length;\n }\n\n openXml(docAttributes) {\n const xml = this._xml;\n // \n xml.push('\\n');\n }\n\n openNode(name, attributes) {\n const parent = this.tos;\n const xml = this._xml;\n if (parent && this.open) {\n xml.push(CLOSE_ANGLE);\n }\n\n this._stack.push(name);\n\n // start streaming node\n xml.push(OPEN_ANGLE);\n xml.push(name);\n pushAttributes(xml, attributes);\n this.leaf = true;\n this.open = true;\n }\n\n addAttribute(name, value) {\n if (!this.open) {\n throw new Error('Cannot write attributes to node if it is not open');\n }\n if (value !== undefined) {\n pushAttribute(this._xml, name, value);\n }\n }\n\n addAttributes(attrs) {\n if (!this.open) {\n throw new Error('Cannot write attributes to node if it is not open');\n }\n pushAttributes(this._xml, attrs);\n }\n\n writeText(text) {\n const xml = this._xml;\n if (this.open) {\n xml.push(CLOSE_ANGLE);\n this.open = false;\n }\n this.leaf = false;\n xml.push(utils.xmlEncode(text.toString()));\n }\n\n writeXml(xml) {\n if (this.open) {\n this._xml.push(CLOSE_ANGLE);\n this.open = false;\n }\n this.leaf = false;\n this._xml.push(xml);\n }\n\n closeNode() {\n const node = this._stack.pop();\n const xml = this._xml;\n if (this.leaf) {\n xml.push(CLOSE_SLASH_ANGLE);\n } else {\n xml.push(OPEN_ANGLE_SLASH);\n xml.push(node);\n xml.push(CLOSE_ANGLE);\n }\n this.open = false;\n this.leaf = false;\n }\n\n leafNode(name, attributes, text) {\n this.openNode(name, attributes);\n if (text !== undefined) {\n // zeros need to be written\n this.writeText(text);\n }\n this.closeNode();\n }\n\n closeAll() {\n while (this._stack.length) {\n this.closeNode();\n }\n }\n\n addRollback() {\n this._rollbacks.push({\n xml: this._xml.length,\n stack: this._stack.length,\n leaf: this.leaf,\n open: this.open,\n });\n return this.cursor;\n }\n\n commit() {\n this._rollbacks.pop();\n }\n\n rollback() {\n const r = this._rollbacks.pop();\n if (this._xml.length > r.xml) {\n this._xml.splice(r.xml, this._xml.length - r.xml);\n }\n if (this._stack.length > r.stack) {\n this._stack.splice(r.stack, this._stack.length - r.stack);\n }\n this.leaf = r.leaf;\n this.open = r.open;\n }\n\n get xml() {\n this.closeAll();\n return this._xml.join('');\n }\n}\n\nXmlStream.StdDocAttributes = {\n version: '1.0',\n encoding: 'UTF-8',\n standalone: 'yes',\n};\n\nmodule.exports = XmlStream;\n", + "const events = require('events');\nconst JSZip = require('jszip');\n\nconst StreamBuf = require('./stream-buf');\nconst {stringToBuffer} = require('./browser-buffer-encode');\n\n// =============================================================================\n// The ZipWriter class\n// Packs streamed data into an output zip stream\nclass ZipWriter extends events.EventEmitter {\n constructor(options) {\n super();\n this.options = Object.assign(\n {\n type: 'nodebuffer',\n compression: 'DEFLATE',\n },\n options\n );\n\n this.zip = new JSZip();\n this.stream = new StreamBuf();\n }\n\n append(data, options) {\n if (options.hasOwnProperty('base64') && options.base64) {\n this.zip.file(options.name, data, {base64: true});\n } else {\n // https://www.npmjs.com/package/process\n if (process.browser && typeof data === 'string') {\n // use TextEncoder in browser\n data = stringToBuffer(data);\n }\n this.zip.file(options.name, data);\n }\n }\n\n async finalize() {\n const content = await this.zip.generateAsync(this.options);\n this.stream.end(content);\n this.emit('finish');\n }\n\n // ==========================================================================\n // Stream.Readable interface\n read(size) {\n return this.stream.read(size);\n }\n\n setEncoding(encoding) {\n return this.stream.setEncoding(encoding);\n }\n\n pause() {\n return this.stream.pause();\n }\n\n resume() {\n return this.stream.resume();\n }\n\n isPaused() {\n return this.stream.isPaused();\n }\n\n pipe(destination, options) {\n return this.stream.pipe(destination, options);\n }\n\n unpipe(destination) {\n return this.stream.unpipe(destination);\n }\n\n unshift(chunk) {\n return this.stream.unshift(chunk);\n }\n\n wrap(stream) {\n return this.stream.wrap(stream);\n }\n}\n\n// =============================================================================\n\nmodule.exports = {\n ZipWriter,\n};\n", + "module.exports = {\n 0: {f: 'General'},\n 1: {f: '0'},\n 2: {f: '0.00'},\n 3: {f: '#,##0'},\n 4: {f: '#,##0.00'},\n 9: {f: '0%'},\n 10: {f: '0.00%'},\n 11: {f: '0.00E+00'},\n 12: {f: '# ?/?'},\n 13: {f: '# ??/??'},\n 14: {f: 'mm-dd-yy'},\n 15: {f: 'd-mmm-yy'},\n 16: {f: 'd-mmm'},\n 17: {f: 'mmm-yy'},\n 18: {f: 'h:mm AM/PM'},\n 19: {f: 'h:mm:ss AM/PM'},\n 20: {f: 'h:mm'},\n 21: {f: 'h:mm:ss'},\n 22: {f: 'm/d/yy \"h\":mm'},\n\n 27: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 28: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 29: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 30: {'zh-tw': 'm/d/yy ', 'zh-cn': 'm-d-yy', 'ja-jp': 'm/d/yy', 'ko-kr': 'mm-dd-yy'},\n 31: {\n 'zh-tw': 'yyyy\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'yyyy\"年\"m\"月\"d\"日\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'yyyy\"년\" mm\"월\" dd\"일\"',\n },\n 32: {\n 'zh-tw': 'hh\"時\"mm\"分\"',\n 'zh-cn': 'h\"时\"mm\"分\"',\n 'ja-jp': 'h\"時\"mm\"分\"',\n 'ko-kr': 'h\"시\" mm\"분\"',\n },\n 33: {\n 'zh-tw': 'hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': 'h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'h\"時\"mm\"分\"ss\"秒\"',\n 'ko-kr': 'h\"시\" mm\"분\" ss\"초\"',\n },\n 34: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 35: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 36: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n\n 37: {f: '#,##0 ;(#,##0)'},\n 38: {f: '#,##0 ;[Red](#,##0)'},\n 39: {f: '#,##0.00 ;(#,##0.00)'},\n 40: {f: '#,##0.00 ;[Red](#,##0.00)'},\n 45: {f: 'mm:ss'},\n 46: {f: '[h]:mm:ss'},\n 47: {f: 'mmss.0'},\n 48: {f: '##0.0E+0'},\n 49: {f: '@'},\n\n 50: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 51: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 52: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 53: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 54: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 55: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 56: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 57: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 58: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n\n 59: {'th-th': 't0'},\n 60: {'th-th': 't0.00'},\n 61: {'th-th': 't#,##0'},\n 62: {'th-th': 't#,##0.00'},\n 67: {'th-th': 't0%'},\n 68: {'th-th': 't0.00%'},\n 69: {'th-th': 't# ?/?'},\n 70: {'th-th': 't# ??/??'},\n\n 81: {'th-th': 'd/m/bb'},\n};\n", + "'use strict';\n\nmodule.exports = {\n OfficeDocument:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\n Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\n CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain',\n SharedStrings:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\n Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\n Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',\n Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n CoreProperties:\n 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\n ExtenderProperties:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',\n VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',\n Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',\n};\n", + "const parseSax = require('../../utils/parse-sax');\nconst XmlStream = require('../../utils/xml-stream');\n\n/* 'virtual' methods used as a form of documentation */\n/* eslint-disable class-methods-use-this */\n\n// Base class for Xforms\nclass BaseXform {\n // constructor(/* model, name */) {}\n\n // ============================================================\n // Virtual Interface\n prepare(/* model, options */) {\n // optional preparation (mutation) of model so it is ready for write\n }\n\n render(/* xmlStream, model */) {\n // convert model to xml\n }\n\n parseOpen(node) {\n // XML node opened\n }\n\n parseText(text) {\n // chunk of text encountered for current node\n }\n\n parseClose(name) {\n // XML node closed\n }\n\n reconcile(model, options) {\n // optional post-parse step (opposite to prepare)\n }\n\n // ============================================================\n reset() {\n // to make sure parses don't bleed to next iteration\n this.model = null;\n\n // if we have a map - reset them too\n if (this.map) {\n Object.values(this.map).forEach(xform => {\n if (xform instanceof BaseXform) {\n xform.reset();\n } else if (xform.xform) {\n xform.xform.reset();\n }\n });\n }\n }\n\n mergeModel(obj) {\n // set obj's props to this.model\n this.model = Object.assign(this.model || {}, obj);\n }\n\n async parse(saxParser) {\n for await (const events of saxParser) {\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n this.parseOpen(value);\n } else if (eventType === 'text') {\n this.parseText(value);\n } else if (eventType === 'closetag') {\n if (!this.parseClose(value.name)) {\n return this.model;\n }\n }\n }\n }\n return this.model;\n }\n\n async parseStream(stream) {\n return this.parse(parseSax(stream));\n }\n\n get xml() {\n // convenience function to get the xml of this.model\n // useful for manager types that are built during the prepare phase\n return this.toXml(this.model);\n }\n\n toXml(model) {\n const xmlStream = new XmlStream();\n this.render(xmlStream, model);\n return xmlStream.xml;\n }\n\n // ============================================================\n // Useful Utilities\n static toAttribute(value, dflt, always = false) {\n if (value === undefined) {\n if (always) {\n return dflt;\n }\n } else if (always || value !== dflt) {\n return value.toString();\n }\n return undefined;\n }\n\n static toStringAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toStringValue(attr, dflt) {\n return attr === undefined ? dflt : attr;\n }\n\n static toBoolAttribute(value, dflt, always = false) {\n if (value === undefined) {\n if (always) {\n return dflt;\n }\n } else if (always || value !== dflt) {\n return value ? '1' : '0';\n }\n return undefined;\n }\n\n static toBoolValue(attr, dflt) {\n return attr === undefined ? dflt : attr === '1';\n }\n\n static toIntAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toIntValue(attr, dflt) {\n return attr === undefined ? dflt : parseInt(attr, 10);\n }\n\n static toFloatAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toFloatValue(attr, dflt) {\n return attr === undefined ? dflt : parseFloat(attr);\n }\n}\n\nmodule.exports = BaseXform;\n", + "const BaseXform = require('../base-xform');\nconst colCache = require('../../../utils/col-cache');\n\nclass DefinedNamesXform extends BaseXform {\n render(xmlStream, model) {\n // \n // name.ranges.join(',')\n // name.ranges.join(',')\n // \n xmlStream.openNode('definedName', {\n name: model.name,\n localSheetId: model.localSheetId,\n });\n xmlStream.writeText(model.ranges.join(','));\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'definedName':\n this._parsedName = node.attributes.name;\n this._parsedLocalSheetId = node.attributes.localSheetId;\n this._parsedText = [];\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this._parsedText.push(text);\n }\n\n parseClose() {\n this.model = {\n name: this._parsedName,\n ranges: extractRanges(this._parsedText.join('')),\n };\n if (this._parsedLocalSheetId !== undefined) {\n this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10);\n }\n return false;\n }\n}\n\nfunction isValidRange(range) {\n try {\n colCache.decodeEx(range);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nfunction extractRanges(parsedText) {\n const ranges = [];\n let quotesOpened = false;\n let last = '';\n parsedText.split(',').forEach(item => {\n if (!item) {\n return;\n }\n const quotes = (item.match(/'/g) || []).length;\n\n if (!quotes) {\n if (quotesOpened) {\n last += `${item},`;\n } else if (isValidRange(item)) {\n ranges.push(item);\n }\n return;\n }\n const quotesEven = quotes % 2 === 0;\n\n if (!quotesOpened && quotesEven && isValidRange(item)) {\n ranges.push(item);\n } else if (quotesOpened && !quotesEven) {\n quotesOpened = false;\n if (isValidRange(last + item)) {\n ranges.push(last + item);\n }\n last = '';\n } else {\n quotesOpened = true;\n last += `${item},`;\n }\n });\n return ranges;\n}\n\nmodule.exports = DefinedNamesXform;\n", + "const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nclass WorksheetXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('sheet', {\n sheetId: model.id,\n name: model.name,\n state: model.state,\n 'r:id': model.rId,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'sheet') {\n this.model = {\n name: utils.xmlDecode(node.attributes.name),\n id: parseInt(node.attributes.sheetId, 10),\n state: node.attributes.state,\n rId: node.attributes['r:id'],\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorksheetXform;\n", + "const BaseXform = require('../base-xform');\n\nclass WorkbookCalcPropertiesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('calcPr', {\n calcId: 171027,\n fullCalcOnLoad: model.fullCalcOnLoad ? 1 : undefined,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'calcPr') {\n this.model = {};\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorkbookCalcPropertiesXform;\n", + "const BaseXform = require('../base-xform');\n\nclass WorksheetPropertiesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('workbookPr', {\n date1904: model.date1904 ? 1 : undefined,\n defaultThemeVersion: 164011,\n filterPrivacy: 1,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'workbookPr') {\n this.model = {\n date1904: node.attributes.date1904 === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorksheetPropertiesXform;\n", + "const BaseXform = require('../base-xform');\n\nclass WorkbookViewXform extends BaseXform {\n render(xmlStream, model) {\n const attributes = {\n xWindow: model.x || 0,\n yWindow: model.y || 0,\n windowWidth: model.width || 12000,\n windowHeight: model.height || 24000,\n firstSheet: model.firstSheet,\n activeTab: model.activeTab,\n };\n if (model.visibility && model.visibility !== 'visible') {\n attributes.visibility = model.visibility;\n }\n xmlStream.leafNode('workbookView', attributes);\n }\n\n parseOpen(node) {\n if (node.name === 'workbookView') {\n const model = (this.model = {});\n const addS = function(name, value, dflt) {\n const s = value !== undefined ? (model[name] = value) : dflt;\n if (s !== undefined) {\n model[name] = s;\n }\n };\n const addN = function(name, value, dflt) {\n const n = value !== undefined ? (model[name] = parseInt(value, 10)) : dflt;\n if (n !== undefined) {\n model[name] = n;\n }\n };\n addN('x', node.attributes.xWindow, 0);\n addN('y', node.attributes.yWindow, 0);\n addN('width', node.attributes.windowWidth, 25000);\n addN('height', node.attributes.windowHeight, 10000);\n addS('visibility', node.attributes.visibility, 'visible');\n addN('activeTab', node.attributes.activeTab, undefined);\n addN('firstSheet', node.attributes.firstSheet, undefined);\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorkbookViewXform;\n", + "const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst DefinedNameXform = require('./defined-name-xform');\nconst SheetXform = require('./sheet-xform');\nconst WorkbookViewXform = require('./workbook-view-xform');\nconst WorkbookPropertiesXform = require('./workbook-properties-xform');\nconst WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform');\n\nclass WorkbookXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion,\n workbookPr: new WorkbookPropertiesXform(),\n bookViews: new ListXform({\n tag: 'bookViews',\n count: false,\n childXform: new WorkbookViewXform(),\n }),\n sheets: new ListXform({tag: 'sheets', count: false, childXform: new SheetXform()}),\n definedNames: new ListXform({\n tag: 'definedNames',\n count: false,\n childXform: new DefinedNameXform(),\n }),\n calcPr: new WorkbookCalcPropertiesXform(),\n };\n }\n\n prepare(model) {\n model.sheets = model.worksheets;\n\n // collate all the print areas from all of the sheets and add them to the defined names\n const printAreas = [];\n let index = 0; // sheets is sparse array - calc index manually\n model.sheets.forEach(sheet => {\n if (sheet.pageSetup && sheet.pageSetup.printArea) {\n sheet.pageSetup.printArea.split('&&').forEach(printArea => {\n const printAreaComponents = printArea.split(':');\n const definedName = {\n name: '_xlnm.Print_Area',\n ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`],\n localSheetId: index,\n };\n printAreas.push(definedName);\n });\n }\n\n if (\n sheet.pageSetup &&\n (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)\n ) {\n const ranges = [];\n\n if (sheet.pageSetup.printTitlesColumn) {\n const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':');\n ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`);\n }\n\n if (sheet.pageSetup.printTitlesRow) {\n const titlesRows = sheet.pageSetup.printTitlesRow.split(':');\n ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`);\n }\n\n const definedName = {\n name: '_xlnm.Print_Titles',\n ranges,\n localSheetId: index,\n };\n\n printAreas.push(definedName);\n }\n index++;\n });\n if (printAreas.length) {\n model.definedNames = model.definedNames.concat(printAreas);\n }\n\n (model.media || []).forEach((medium, i) => {\n // assign name\n medium.name = medium.type + (i + 1);\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES);\n\n this.map.fileVersion.render(xmlStream);\n this.map.workbookPr.render(xmlStream, model.properties);\n this.map.bookViews.render(xmlStream, model.views);\n this.map.sheets.render(xmlStream, model.sheets);\n this.map.definedNames.render(xmlStream, model.definedNames);\n this.map.calcPr.render(xmlStream, model.calcProperties);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'workbook':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'workbook':\n this.model = {\n sheets: this.map.sheets.model,\n properties: this.map.workbookPr.model || {},\n views: this.map.bookViews.model,\n calcProperties: {},\n };\n if (this.map.definedNames.model) {\n this.model.definedNames = this.map.definedNames.model;\n }\n\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model) {\n const rels = (model.workbookRels || []).reduce((map, rel) => {\n map[rel.Id] = rel;\n return map;\n }, {});\n\n // reconcile sheet ids, rIds and names\n const worksheets = [];\n let worksheet;\n let index = 0;\n\n (model.sheets || []).forEach(sheet => {\n const rel = rels[sheet.rId];\n if (!rel) {\n return;\n }\n // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`,\n // otherwise it will be spliced directly behind `xl/`. i.g.\n worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\\s|\\/xl\\/)+/, '')}`];\n // If there are \"chartsheets\" in the file, rel.Target will\n // come out as chartsheets/sheet1.xml or similar here, and\n // that won't be in model.worksheetHash.\n // As we don't have the infrastructure to support chartsheets,\n // we will ignore them for now:\n if (worksheet) {\n worksheet.name = sheet.name;\n worksheet.id = sheet.id;\n worksheet.state = sheet.state;\n worksheets[index++] = worksheet;\n }\n });\n\n // reconcile print areas\n const definedNames = [];\n _.each(model.definedNames, definedName => {\n if (definedName.name === '_xlnm.Print_Area') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n const range = colCache.decodeEx(definedName.ranges[0]);\n worksheet.pageSetup.printArea = worksheet.pageSetup.printArea\n ? `${worksheet.pageSetup.printArea}&&${range.dimensions}`\n : range.dimensions;\n }\n } else if (definedName.name === '_xlnm.Print_Titles') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n\n const rangeString = definedName.ranges.join(',');\n\n const dollarRegex = /\\$/g;\n\n const rowRangeRegex = /\\$\\d+:\\$\\d+/;\n const rowRangeMatches = rangeString.match(rowRangeRegex);\n\n if (rowRangeMatches && rowRangeMatches.length) {\n const range = rowRangeMatches[0];\n worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, '');\n }\n\n const columnRangeRegex = /\\$[A-Z]+:\\$[A-Z]+/;\n const columnRangeMatches = rangeString.match(columnRangeRegex);\n\n if (columnRangeMatches && columnRangeMatches.length) {\n const range = columnRangeMatches[0];\n worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, '');\n }\n }\n } else {\n definedNames.push(definedName);\n }\n });\n model.definedNames = definedNames;\n\n // used by sheets to build their image models\n model.media.forEach((media, i) => {\n media.index = i;\n });\n }\n}\n\nWorkbookXform.WORKBOOK_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x15',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n};\nWorkbookXform.STATIC_XFORMS = {\n fileVersion: new StaticXform({\n tag: 'fileVersion',\n $: {appName: 'xl', lastEdited: 5, lowestEdited: 5, rupBuild: 9303},\n }),\n};\n\nmodule.exports = WorkbookXform;\n", + "const RichTextXform = require('../strings/rich-text-xform');\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\n/**\n \n \n \n \n \n \n \n \n \n 51422:\n \n \n \n \n \n \n \n test\n \n \n \n */\n\nconst CommentXform = (module.exports = function(model) {\n this.model = model;\n});\n\nutils.inherits(CommentXform, BaseXform, {\n get tag() {\n return 'r';\n },\n\n get richTextXform() {\n if (!this._richTextXform) {\n this._richTextXform = new RichTextXform();\n }\n return this._richTextXform;\n },\n\n render(xmlStream, model) {\n model = model || this.model;\n\n xmlStream.openNode('comment', {\n ref: model.ref,\n authorId: 0,\n });\n xmlStream.openNode('text');\n if (model && model.note && model.note.texts) {\n model.note.texts.forEach(text => {\n this.richTextXform.render(xmlStream, text);\n });\n }\n xmlStream.closeNode();\n xmlStream.closeNode();\n },\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'comment':\n this.model = {\n type: 'note',\n note: {\n texts: [],\n },\n ...node.attributes,\n };\n return true;\n case 'r':\n this.parser = this.richTextXform;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n },\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n },\n parseClose(name) {\n switch (name) {\n case 'comment':\n return false;\n case 'r':\n this.model.note.texts.push(this.parser.model);\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n },\n});\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nconst CommentXform = require('./comment-xform');\n\nconst CommentsXform = (module.exports = function() {\n this.map = {\n comment: new CommentXform(),\n };\n});\n\nutils.inherits(\n CommentsXform,\n BaseXform,\n {\n COMMENTS_ATTRIBUTES: {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n },\n },\n {\n render(xmlStream, model) {\n model = model || this.model;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('comments', CommentsXform.COMMENTS_ATTRIBUTES);\n\n // authors\n // TODO: support authors properly\n xmlStream.openNode('authors');\n xmlStream.leafNode('author', null, 'Author');\n xmlStream.closeNode();\n\n // comments\n xmlStream.openNode('commentList');\n model.comments.forEach(comment => {\n this.map.comment.render(xmlStream, comment);\n });\n xmlStream.closeNode();\n xmlStream.closeNode();\n },\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'commentList':\n this.model = {\n comments: [],\n };\n return true;\n case 'comment':\n this.parser = this.map.comment;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n },\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n },\n parseClose(name) {\n switch (name) {\n case 'commentList':\n return false;\n case 'comment':\n this.model.comments.push(this.parser.model);\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n },\n }\n);\n", + "const BaseXform = require('../../base-xform');\n\nclass VmlPositionXform extends BaseXform {\n constructor(model) {\n super();\n this._model = model;\n }\n\n get tag() {\n return this._model && this._model.tag;\n }\n\n render(xmlStream, model, type) {\n if (model === type[2]) {\n xmlStream.leafNode(this.tag);\n } else if (this.tag === 'x:SizeWithCells' && model === type[1]) {\n xmlStream.leafNode(this.tag);\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {};\n this.model[this.tag] = true;\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlPositionXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass VmlProtectionXform extends BaseXform {\n constructor(model) {\n super();\n this._model = model;\n }\n\n get tag() {\n return this._model && this._model.tag;\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.text = '';\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this.text = text;\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlProtectionXform;\n", + "const BaseXform = require('../base-xform');\n\n// render the triangle in the cell for the comment\nclass VmlAnchorXform extends BaseXform {\n get tag() {\n return 'x:Anchor';\n }\n\n getAnchorRect(anchor) {\n const l = Math.floor(anchor.left);\n const lf = Math.floor((anchor.left - l) * 68);\n const t = Math.floor(anchor.top);\n const tf = Math.floor((anchor.top - t) * 18);\n const r = Math.floor(anchor.right);\n const rf = Math.floor((anchor.right - r) * 68);\n const b = Math.floor(anchor.bottom);\n const bf = Math.floor((anchor.bottom - b) * 18);\n return [l, lf, t, tf, r, rf, b, bf];\n }\n\n getDefaultRect(ref) {\n const l = ref.col;\n const lf = 6;\n const t = Math.max(ref.row - 2, 0);\n const tf = 14;\n const r = l + 2;\n const rf = 2;\n const b = t + 4;\n const bf = 16;\n return [l, lf, t, tf, r, rf, b, bf];\n }\n\n render(xmlStream, model) {\n const rect = model.anchor\n ? this.getAnchorRect(model.anchor)\n : this.getDefaultRect(model.refAddress);\n\n xmlStream.leafNode('x:Anchor', null, rect.join(', '));\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.text = '';\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this.text = text;\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlAnchorXform;\n", + "const BaseXform = require('../base-xform');\n\nconst VmlAnchorXform = require('./vml-anchor-xform');\nconst VmlProtectionXform = require('./style/vml-protection-xform');\nconst VmlPositionXform = require('./style/vml-position-xform');\n\nconst POSITION_TYPE = ['twoCells', 'oneCells', 'absolute'];\n\nclass VmlClientDataXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'x:Anchor': new VmlAnchorXform(),\n 'x:Locked': new VmlProtectionXform({tag: 'x:Locked'}),\n 'x:LockText': new VmlProtectionXform({tag: 'x:LockText'}),\n 'x:SizeWithCells': new VmlPositionXform({tag: 'x:SizeWithCells'}),\n 'x:MoveWithCells': new VmlPositionXform({tag: 'x:MoveWithCells'}),\n };\n }\n\n get tag() {\n return 'x:ClientData';\n }\n\n render(xmlStream, model) {\n const {protection, editAs} = model.note;\n xmlStream.openNode(this.tag, {ObjectType: 'Note'});\n this.map['x:MoveWithCells'].render(xmlStream, editAs, POSITION_TYPE);\n this.map['x:SizeWithCells'].render(xmlStream, editAs, POSITION_TYPE);\n this.map['x:Anchor'].render(xmlStream, model);\n this.map['x:Locked'].render(xmlStream, protection.locked);\n xmlStream.leafNode('x:AutoFill', null, 'False');\n this.map['x:LockText'].render(xmlStream, protection.lockText);\n xmlStream.leafNode('x:Row', null, model.refAddress.row - 1);\n xmlStream.leafNode('x:Column', null, model.refAddress.col - 1);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n anchor: [],\n protection: {},\n editAs: '',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.normalizeModel();\n return false;\n default:\n return true;\n }\n }\n\n normalizeModel() {\n const position = Object.assign(\n {},\n this.map['x:MoveWithCells'].model,\n this.map['x:SizeWithCells'].model\n );\n const len = Object.keys(position).length;\n this.model.editAs = POSITION_TYPE[len];\n this.model.anchor = this.map['x:Anchor'].text;\n this.model.protection.locked = this.map['x:Locked'].text;\n this.model.protection.lockText = this.map['x:LockText'].text;\n }\n}\n\nmodule.exports = VmlClientDataXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst VmlShapeXform = require('./vml-shape-xform');\n\n// This class is (currently) single purposed to insert the triangle\n// drawing icons on commented cells\nclass VmlNotesXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'v:shape': new VmlShapeXform(),\n };\n }\n\n get tag() {\n return 'xml';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, VmlNotesXform.DRAWING_ATTRIBUTES);\n\n xmlStream.openNode('o:shapelayout', {'v:ext': 'edit'});\n xmlStream.leafNode('o:idmap', {'v:ext': 'edit', data: 1});\n xmlStream.closeNode();\n\n xmlStream.openNode('v:shapetype', {\n id: '_x0000_t202',\n coordsize: '21600,21600',\n 'o:spt': 202,\n path: 'm,l,21600r21600,l21600,xe',\n });\n xmlStream.leafNode('v:stroke', {joinstyle: 'miter'});\n xmlStream.leafNode('v:path', {gradientshapeok: 't', 'o:connecttype': 'rect'});\n xmlStream.closeNode();\n\n model.comments.forEach((item, index) => {\n this.map['v:shape'].render(xmlStream, item, index);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n comments: [],\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.comments.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.anchors.forEach(anchor => {\n if (anchor.br) {\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\n } else {\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\n }\n });\n }\n}\n\nVmlNotesXform.DRAWING_ATTRIBUTES = {\n 'xmlns:v': 'urn:schemas-microsoft-com:vml',\n 'xmlns:o': 'urn:schemas-microsoft-com:office:office',\n 'xmlns:x': 'urn:schemas-microsoft-com:office:excel',\n};\n\nmodule.exports = VmlNotesXform;\n", + "const BaseXform = require('../base-xform');\nconst VmlTextboxXform = require('./vml-textbox-xform');\nconst VmlClientDataXform = require('./vml-client-data-xform');\n\nclass VmlShapeXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'v:textbox': new VmlTextboxXform(),\n 'x:ClientData': new VmlClientDataXform(),\n };\n }\n\n get tag() {\n return 'v:shape';\n }\n\n render(xmlStream, model, index) {\n xmlStream.openNode('v:shape', VmlShapeXform.V_SHAPE_ATTRIBUTES(model, index));\n\n xmlStream.leafNode('v:fill', {color2: 'infoBackground [80]'});\n xmlStream.leafNode('v:shadow', {color: 'none [81]', obscured: 't'});\n xmlStream.leafNode('v:path', {'o:connecttype': 'none'});\n this.map['v:textbox'].render(xmlStream, model);\n this.map['x:ClientData'].render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n margins: {\n insetmode: node.attributes['o:insetmode'],\n },\n anchor: '',\n editAs: '',\n protection: {},\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.margins.inset = this.map['v:textbox'].model && this.map['v:textbox'].model.inset;\n this.model.protection =\n this.map['x:ClientData'].model && this.map['x:ClientData'].model.protection;\n this.model.anchor = this.map['x:ClientData'].model && this.map['x:ClientData'].model.anchor;\n this.model.editAs = this.map['x:ClientData'].model && this.map['x:ClientData'].model.editAs;\n return false;\n default:\n return true;\n }\n }\n}\n\nVmlShapeXform.V_SHAPE_ATTRIBUTES = (model, index) => ({\n id: `_x0000_s${1025 + index}`,\n type: '#_x0000_t202',\n style:\n 'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden',\n fillcolor: 'infoBackground [80]',\n strokecolor: 'none [81]',\n 'o:insetmode': model.note.margins && model.note.margins.insetmode,\n});\n\nmodule.exports = VmlShapeXform;\n", + "const BaseXform = require('../base-xform');\n\nclass VmlTextboxXform extends BaseXform {\n get tag() {\n return 'v:textbox';\n }\n\n conversionUnit(value, multiple, unit) {\n return `${parseFloat(value) * multiple.toFixed(2)}${unit}`;\n }\n\n reverseConversionUnit(inset) {\n return (inset || '').split(',').map(margin => {\n return Number(parseFloat(this.conversionUnit(parseFloat(margin), 0.1, '')).toFixed(2));\n });\n }\n\n render(xmlStream, model) {\n const attributes = {\n style: 'mso-direction-alt:auto',\n };\n if (model && model.note) {\n let {inset} = model.note && model.note.margins;\n if (Array.isArray(inset)) {\n inset = inset\n .map(margin => {\n return this.conversionUnit(margin, 10, 'mm');\n })\n .join(',');\n }\n if (inset) {\n attributes.inset = inset;\n }\n }\n xmlStream.openNode('v:textbox', attributes);\n xmlStream.leafNode('div', {style: 'text-align:left'});\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n inset: this.reverseConversionUnit(node.attributes.inset),\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = VmlTextboxXform;\n", + "const BaseXform = require('./base-xform');\n\n/* 'virtual' methods used as a form of documentation */\n/* eslint-disable class-methods-use-this */\n\n// base class for xforms that are composed of other xforms\n// offers some default implementations\nclass CompositeXform extends BaseXform {\n createNewModel(node) {\n return {};\n }\n\n parseOpen(node) {\n // Typical pattern for composite xform\n this.parser = this.parser || this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n if (node.name === this.tag) {\n this.model = this.createNewModel(node);\n return true;\n }\n\n return false;\n }\n\n parseText(text) {\n // Default implementation. Send text to child parser\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n onParserClose(name, parser) {\n // parseClose has seen a child parser close\n // now need to incorporate into this.model somehow\n this.model[name] = parser.model;\n }\n\n parseClose(name) {\n // Default implementation\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.onParserClose(name, this.parser);\n this.parser = undefined;\n }\n return true;\n }\n\n return name !== this.tag;\n }\n}\n\nmodule.exports = CompositeXform;\n", + "const BaseXform = require('../base-xform');\n\nclass AppHeadingPairsXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openNode('HeadingPairs');\n xmlStream.openNode('vt:vector', {size: 2, baseType: 'variant'});\n\n xmlStream.openNode('vt:variant');\n xmlStream.leafNode('vt:lpstr', undefined, 'Worksheets');\n xmlStream.closeNode();\n\n xmlStream.openNode('vt:variant');\n xmlStream.leafNode('vt:i4', undefined, model.length);\n xmlStream.closeNode();\n\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n // no parsing\n return node.name === 'HeadingPairs';\n }\n\n parseText() {}\n\n parseClose(name) {\n return name !== 'HeadingPairs';\n }\n}\n\nmodule.exports = AppHeadingPairsXform;\n", + "const BaseXform = require('../base-xform');\n\nclass AppTitlesOfPartsXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openNode('TitlesOfParts');\n xmlStream.openNode('vt:vector', {size: model.length, baseType: 'lpstr'});\n\n model.forEach(sheet => {\n xmlStream.leafNode('vt:lpstr', undefined, sheet.name);\n });\n\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n // no parsing\n return node.name === 'TitlesOfParts';\n }\n\n parseText() {}\n\n parseClose(name) {\n return name !== 'TitlesOfParts';\n }\n}\n\nmodule.exports = AppTitlesOfPartsXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst StringXform = require('../simple/string-xform');\n\nconst AppHeadingPairsXform = require('./app-heading-pairs-xform');\nconst AppTitleOfPartsXform = require('./app-titles-of-parts-xform');\n\nclass AppXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n Company: new StringXform({tag: 'Company'}),\n Manager: new StringXform({tag: 'Manager'}),\n HeadingPairs: new AppHeadingPairsXform(),\n TitleOfParts: new AppTitleOfPartsXform(),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('Properties', AppXform.PROPERTY_ATTRIBUTES);\n\n xmlStream.leafNode('Application', undefined, 'Microsoft Excel');\n xmlStream.leafNode('DocSecurity', undefined, '0');\n xmlStream.leafNode('ScaleCrop', undefined, 'false');\n\n this.map.HeadingPairs.render(xmlStream, model.worksheets);\n this.map.TitleOfParts.render(xmlStream, model.worksheets);\n this.map.Company.render(xmlStream, model.company || '');\n this.map.Manager.render(xmlStream, model.manager);\n\n xmlStream.leafNode('LinksUpToDate', undefined, 'false');\n xmlStream.leafNode('SharedDoc', undefined, 'false');\n xmlStream.leafNode('HyperlinksChanged', undefined, 'false');\n xmlStream.leafNode('AppVersion', undefined, '16.0300');\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'Properties':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n // there's a lot we don't bother to parse\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'Properties':\n this.model = {\n worksheets: this.map.TitleOfParts.model,\n company: this.map.Company.model,\n manager: this.map.Manager.model,\n };\n return false;\n default:\n return true;\n }\n }\n}\n\nAppXform.DateFormat = function(dt) {\n return dt.toISOString().replace(/[.]\\d{3,6}/, '');\n};\n\nAppXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\n\nAppXform.PROPERTY_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties',\n 'xmlns:vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n};\n\nmodule.exports = AppXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\n\n// used for rendering the [Content_Types].xml file\n// not used for parsing\nclass ContentTypesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('Types', ContentTypesXform.PROPERTY_ATTRIBUTES);\n\n const mediaHash = {};\n (model.media || []).forEach(medium => {\n if (medium.type === 'image') {\n const imageType = medium.extension;\n if (!mediaHash[imageType]) {\n mediaHash[imageType] = true;\n xmlStream.leafNode('Default', {Extension: imageType, ContentType: `image/${imageType}`});\n }\n }\n });\n\n xmlStream.leafNode('Default', {\n Extension: 'rels',\n ContentType: 'application/vnd.openxmlformats-package.relationships+xml',\n });\n xmlStream.leafNode('Default', {Extension: 'xml', ContentType: 'application/xml'});\n\n xmlStream.leafNode('Override', {\n PartName: '/xl/workbook.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml',\n });\n\n model.worksheets.forEach(worksheet => {\n const name = `/xl/worksheets/sheet${worksheet.id}.xml`;\n xmlStream.leafNode('Override', {\n PartName: name,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml',\n });\n });\n\n xmlStream.leafNode('Override', {\n PartName: '/xl/theme/theme1.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml',\n });\n xmlStream.leafNode('Override', {\n PartName: '/xl/styles.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml',\n });\n\n const hasSharedStrings = model.sharedStrings && model.sharedStrings.count;\n if (hasSharedStrings) {\n xmlStream.leafNode('Override', {\n PartName: '/xl/sharedStrings.xml',\n ContentType:\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml',\n });\n }\n\n if (model.tables) {\n model.tables.forEach(table => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/tables/${table.target}`,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml',\n });\n });\n }\n\n if (model.drawings) {\n model.drawings.forEach(drawing => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/drawings/${drawing.name}.xml`,\n ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml',\n });\n });\n }\n\n if (model.commentRefs) {\n xmlStream.leafNode('Default', {\n Extension: 'vml',\n ContentType: 'application/vnd.openxmlformats-officedocument.vmlDrawing',\n });\n\n model.commentRefs.forEach(({commentName}) => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/${commentName}.xml`,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml',\n });\n });\n }\n\n xmlStream.leafNode('Override', {\n PartName: '/docProps/core.xml',\n ContentType: 'application/vnd.openxmlformats-package.core-properties+xml',\n });\n xmlStream.leafNode('Override', {\n PartName: '/docProps/app.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.extended-properties+xml',\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen() {\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nContentTypesXform.PROPERTY_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/package/2006/content-types',\n};\n\nmodule.exports = ContentTypesXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst DateXform = require('../simple/date-xform');\nconst StringXform = require('../simple/string-xform');\nconst IntegerXform = require('../simple/integer-xform');\n\nclass CoreXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'dc:creator': new StringXform({tag: 'dc:creator'}),\n 'dc:title': new StringXform({tag: 'dc:title'}),\n 'dc:subject': new StringXform({tag: 'dc:subject'}),\n 'dc:description': new StringXform({tag: 'dc:description'}),\n 'dc:identifier': new StringXform({tag: 'dc:identifier'}),\n 'dc:language': new StringXform({tag: 'dc:language'}),\n 'cp:keywords': new StringXform({tag: 'cp:keywords'}),\n 'cp:category': new StringXform({tag: 'cp:category'}),\n 'cp:lastModifiedBy': new StringXform({tag: 'cp:lastModifiedBy'}),\n 'cp:lastPrinted': new DateXform({tag: 'cp:lastPrinted', format: CoreXform.DateFormat}),\n 'cp:revision': new IntegerXform({tag: 'cp:revision'}),\n 'cp:version': new StringXform({tag: 'cp:version'}),\n 'cp:contentStatus': new StringXform({tag: 'cp:contentStatus'}),\n 'cp:contentType': new StringXform({tag: 'cp:contentType'}),\n 'dcterms:created': new DateXform({\n tag: 'dcterms:created',\n attrs: CoreXform.DateAttrs,\n format: CoreXform.DateFormat,\n }),\n 'dcterms:modified': new DateXform({\n tag: 'dcterms:modified',\n attrs: CoreXform.DateAttrs,\n format: CoreXform.DateFormat,\n }),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('cp:coreProperties', CoreXform.CORE_PROPERTY_ATTRIBUTES);\n\n this.map['dc:creator'].render(xmlStream, model.creator);\n this.map['dc:title'].render(xmlStream, model.title);\n this.map['dc:subject'].render(xmlStream, model.subject);\n this.map['dc:description'].render(xmlStream, model.description);\n this.map['dc:identifier'].render(xmlStream, model.identifier);\n this.map['dc:language'].render(xmlStream, model.language);\n this.map['cp:keywords'].render(xmlStream, model.keywords);\n this.map['cp:category'].render(xmlStream, model.category);\n this.map['cp:lastModifiedBy'].render(xmlStream, model.lastModifiedBy);\n this.map['cp:lastPrinted'].render(xmlStream, model.lastPrinted);\n this.map['cp:revision'].render(xmlStream, model.revision);\n this.map['cp:version'].render(xmlStream, model.version);\n this.map['cp:contentStatus'].render(xmlStream, model.contentStatus);\n this.map['cp:contentType'].render(xmlStream, model.contentType);\n this.map['dcterms:created'].render(xmlStream, model.created);\n this.map['dcterms:modified'].render(xmlStream, model.modified);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'cp:coreProperties':\n case 'coreProperties':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'cp:coreProperties':\n case 'coreProperties':\n this.model = {\n creator: this.map['dc:creator'].model,\n title: this.map['dc:title'].model,\n subject: this.map['dc:subject'].model,\n description: this.map['dc:description'].model,\n identifier: this.map['dc:identifier'].model,\n language: this.map['dc:language'].model,\n keywords: this.map['cp:keywords'].model,\n category: this.map['cp:category'].model,\n lastModifiedBy: this.map['cp:lastModifiedBy'].model,\n lastPrinted: this.map['cp:lastPrinted'].model,\n revision: this.map['cp:revision'].model,\n contentStatus: this.map['cp:contentStatus'].model,\n contentType: this.map['cp:contentType'].model,\n created: this.map['dcterms:created'].model,\n modified: this.map['dcterms:modified'].model,\n };\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nCoreXform.DateFormat = function(dt) {\n return dt.toISOString().replace(/[.]\\d{3}/, '');\n};\nCoreXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\n\nCoreXform.CORE_PROPERTY_ATTRIBUTES = {\n 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',\n 'xmlns:dcterms': 'http://purl.org/dc/terms/',\n 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/',\n 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n};\n\nmodule.exports = CoreXform;\n", + "const BaseXform = require('../base-xform');\n\nclass RelationshipXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('Relationship', model);\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'Relationship':\n this.model = node.attributes;\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = RelationshipXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\n\nconst RelationshipXform = require('./relationship-xform');\n\nclass RelationshipsXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n Relationship: new RelationshipXform(),\n };\n }\n\n render(xmlStream, model) {\n model = model || this._values;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('Relationships', RelationshipsXform.RELATIONSHIPS_ATTRIBUTES);\n\n model.forEach(relationship => {\n this.map.Relationship.render(xmlStream, relationship);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'Relationships':\n this.model = [];\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'Relationships':\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nRelationshipsXform.RELATIONSHIPS_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships',\n};\n\nmodule.exports = RelationshipsXform;\n", + "const BaseXform = require('../base-xform');\n\nclass BaseCellAnchorXform extends BaseXform {\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n range: {\n editAs: node.attributes.editAs || 'oneCell',\n },\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n reconcilePicture(model, options) {\n if (model && model.rId) {\n const rel = options.rels[model.rId];\n const match = rel.Target.match(/.*\\/media\\/(.+[.][a-zA-Z]{3,4})/);\n if (match) {\n const name = match[1];\n const mediaId = options.mediaIndex[name];\n return options.media[mediaId];\n }\n }\n return undefined;\n }\n}\n\nmodule.exports = BaseCellAnchorXform;\n", + "const BaseXform = require('../base-xform');\nconst BlipXform = require('./blip-xform');\n\nclass BlipFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'a:blip': new BlipXform(),\n };\n }\n\n get tag() {\n return 'xdr:blipFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['a:blip'].render(xmlStream, model);\n\n // TODO: options for this + parsing\n xmlStream.openNode('a:stretch');\n xmlStream.leafNode('a:fillRect');\n xmlStream.closeNode();\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['a:blip'].model;\n return false;\n\n default:\n return true;\n }\n }\n}\n\nmodule.exports = BlipFillXform;\n", + "const BaseXform = require('../base-xform');\n\nclass BlipXform extends BaseXform {\n get tag() {\n return 'a:blip';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'r:embed': model.rId,\n cstate: 'print',\n });\n // TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:embed'],\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = BlipXform;\n", + "const BaseXform = require('../base-xform');\n\nclass CNvPicPrXform extends BaseXform {\n get tag() {\n return 'xdr:cNvPicPr';\n }\n\n render(xmlStream) {\n xmlStream.openNode(this.tag);\n xmlStream.leafNode('a:picLocks', {\n noChangeAspect: '1',\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = CNvPicPrXform;\n", + "const BaseXform = require('../base-xform');\nconst HlickClickXform = require('./hlink-click-xform');\nconst ExtLstXform = require('./ext-lst-xform');\n\nclass CNvPrXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'a:hlinkClick': new HlickClickXform(),\n 'a:extLst': new ExtLstXform(),\n };\n }\n\n get tag() {\n return 'xdr:cNvPr';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n id: model.index,\n name: `Picture ${model.index}`,\n });\n this.map['a:hlinkClick'].render(xmlStream, model);\n this.map['a:extLst'].render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['a:hlinkClick'].model;\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = CNvPrXform;\n", + "const BaseXform = require('../base-xform');\nconst IntegerXform = require('../simple/integer-xform');\n\nclass CellPositionXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.map = {\n 'xdr:col': new IntegerXform({tag: 'xdr:col', zero: true}),\n 'xdr:colOff': new IntegerXform({tag: 'xdr:colOff', zero: true}),\n 'xdr:row': new IntegerXform({tag: 'xdr:row', zero: true}),\n 'xdr:rowOff': new IntegerXform({tag: 'xdr:rowOff', zero: true}),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['xdr:col'].render(xmlStream, model.nativeCol);\n this.map['xdr:colOff'].render(xmlStream, model.nativeColOff);\n\n this.map['xdr:row'].render(xmlStream, model.nativeRow);\n this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = {\n nativeCol: this.map['xdr:col'].model,\n nativeColOff: this.map['xdr:colOff'].model,\n nativeRow: this.map['xdr:row'].model,\n nativeRowOff: this.map['xdr:rowOff'].model,\n };\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n}\n\nmodule.exports = CellPositionXform;\n", + "const colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst TwoCellAnchorXform = require('./two-cell-anchor-xform');\nconst OneCellAnchorXform = require('./one-cell-anchor-xform');\n\nfunction getAnchorType(model) {\n const range = typeof model.range === 'string' ? colCache.decode(model.range) : model.range;\n\n return range.br ? 'xdr:twoCellAnchor' : 'xdr:oneCellAnchor';\n}\n\nclass DrawingXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:twoCellAnchor': new TwoCellAnchorXform(),\n 'xdr:oneCellAnchor': new OneCellAnchorXform(),\n };\n }\n\n prepare(model) {\n model.anchors.forEach((item, index) => {\n item.anchorType = getAnchorType(item);\n const anchor = this.map[item.anchorType];\n anchor.prepare(item, {index});\n });\n }\n\n get tag() {\n return 'xdr:wsDr';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, DrawingXform.DRAWING_ATTRIBUTES);\n\n model.anchors.forEach(item => {\n const anchor = this.map[item.anchorType];\n anchor.render(xmlStream, item);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n anchors: [],\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.anchors.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.anchors.forEach(anchor => {\n if (anchor.br) {\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\n } else {\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\n }\n });\n }\n}\n\nDrawingXform.DRAWING_ATTRIBUTES = {\n 'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing',\n 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\n};\n\nmodule.exports = DrawingXform;\n", + "const BaseXform = require('../base-xform');\n\nclass ExtLstXform extends BaseXform {\n get tag() {\n return 'a:extLst';\n }\n\n render(xmlStream) {\n xmlStream.openNode(this.tag);\n xmlStream.openNode('a:ext', {\n uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}',\n });\n xmlStream.leafNode('a16:creationId', {\n 'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main',\n id: '{00000000-0008-0000-0000-000002000000}',\n });\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = ExtLstXform;\n", + "const BaseXform = require('../base-xform');\n\n/** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */\nconst EMU_PER_PIXEL_AT_96_DPI = 9525;\n\nclass ExtXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.map = {};\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n const width = Math.floor(model.width * EMU_PER_PIXEL_AT_96_DPI);\n const height = Math.floor(model.height * EMU_PER_PIXEL_AT_96_DPI);\n\n xmlStream.addAttribute('cx', width);\n xmlStream.addAttribute('cy', height);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n width: parseInt(node.attributes.cx || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\n height: parseInt(node.attributes.cy || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\n };\n return true;\n }\n return false;\n }\n\n parseText(/* text */) {}\n\n parseClose(/* name */) {\n return false;\n }\n}\n\nmodule.exports = ExtXform;\n", + "const BaseXform = require('../base-xform');\n\nclass HLinkClickXform extends BaseXform {\n get tag() {\n return 'a:hlinkClick';\n }\n\n render(xmlStream, model) {\n if (!(model.hyperlinks && model.hyperlinks.rId)) {\n return;\n }\n xmlStream.leafNode(this.tag, {\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'r:id': model.hyperlinks.rId,\n tooltip: model.hyperlinks.tooltip,\n });\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n hyperlinks: {\n rId: node.attributes['r:id'],\n tooltip: node.attributes.tooltip,\n },\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = HLinkClickXform;\n", + "const BaseXform = require('../base-xform');\nconst CNvPrXform = require('./c-nv-pr-xform');\nconst CNvPicPrXform = require('./c-nv-pic-pr-xform');\n\nclass NvPicPrXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:cNvPr': new CNvPrXform(),\n 'xdr:cNvPicPr': new CNvPicPrXform(),\n };\n }\n\n get tag() {\n return 'xdr:nvPicPr';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n this.map['xdr:cNvPr'].render(xmlStream, model);\n this.map['xdr:cNvPicPr'].render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['xdr:cNvPr'].model;\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = NvPicPrXform;\n", + "const BaseCellAnchorXform = require('./base-cell-anchor-xform');\nconst StaticXform = require('../static-xform');\n\nconst CellPositionXform = require('./cell-position-xform');\nconst ExtXform = require('./ext-xform');\nconst PicXform = require('./pic-xform');\n\nclass OneCellAnchorXform extends BaseCellAnchorXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\n 'xdr:ext': new ExtXform({tag: 'xdr:ext'}),\n 'xdr:pic': new PicXform(),\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\n };\n }\n\n get tag() {\n return 'xdr:oneCellAnchor';\n }\n\n prepare(model, options) {\n this.map['xdr:pic'].prepare(model.picture, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\n\n this.map['xdr:from'].render(xmlStream, model.range.tl);\n this.map['xdr:ext'].render(xmlStream, model.range.ext);\n this.map['xdr:pic'].render(xmlStream, model.picture);\n this.map['xdr:clientData'].render(xmlStream, {});\n\n xmlStream.closeNode();\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.range.tl = this.map['xdr:from'].model;\n this.model.range.ext = this.map['xdr:ext'].model;\n this.model.picture = this.map['xdr:pic'].model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.medium = this.reconcilePicture(model.picture, options);\n }\n}\n\nmodule.exports = OneCellAnchorXform;\n", + "const BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\n\nconst BlipFillXform = require('./blip-fill-xform');\nconst NvPicPrXform = require('./nv-pic-pr-xform');\n\nconst spPrJSON = require('./sp-pr');\n\nclass PicXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:nvPicPr': new NvPicPrXform(),\n 'xdr:blipFill': new BlipFillXform(),\n 'xdr:spPr': new StaticXform(spPrJSON),\n };\n }\n\n get tag() {\n return 'xdr:pic';\n }\n\n prepare(model, options) {\n model.index = options.index + 1;\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['xdr:nvPicPr'].render(xmlStream, model);\n this.map['xdr:blipFill'].render(xmlStream, model);\n this.map['xdr:spPr'].render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.mergeModel(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n}\n\nmodule.exports = PicXform;\n", + "module.exports = {\n tag: 'xdr:spPr',\n c: [\n {\n tag: 'a:xfrm',\n c: [\n {tag: 'a:off', $: {x: '0', y: '0'}},\n {tag: 'a:ext', $: {cx: '0', cy: '0'}},\n ],\n },\n {\n tag: 'a:prstGeom',\n $: {prst: 'rect'},\n c: [{tag: 'a:avLst'}],\n },\n ],\n};\n", + "const BaseCellAnchorXform = require('./base-cell-anchor-xform');\nconst StaticXform = require('../static-xform');\n\nconst CellPositionXform = require('./cell-position-xform');\nconst PicXform = require('./pic-xform');\n\nclass TwoCellAnchorXform extends BaseCellAnchorXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\n 'xdr:to': new CellPositionXform({tag: 'xdr:to'}),\n 'xdr:pic': new PicXform(),\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\n };\n }\n\n get tag() {\n return 'xdr:twoCellAnchor';\n }\n\n prepare(model, options) {\n this.map['xdr:pic'].prepare(model.picture, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\n\n this.map['xdr:from'].render(xmlStream, model.range.tl);\n this.map['xdr:to'].render(xmlStream, model.range.br);\n this.map['xdr:pic'].render(xmlStream, model.picture);\n this.map['xdr:clientData'].render(xmlStream, {});\n\n xmlStream.closeNode();\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.range.tl = this.map['xdr:from'].model;\n this.model.range.br = this.map['xdr:to'].model;\n this.model.picture = this.map['xdr:pic'].model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.medium = this.reconcilePicture(model.picture, options);\n }\n}\n\nmodule.exports = TwoCellAnchorXform;\n", + "const BaseXform = require('./base-xform');\n\nclass ListXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.always = !!options.always;\n this.count = options.count;\n this.empty = options.empty;\n this.$count = options.$count || 'count';\n this.$ = options.$;\n this.childXform = options.childXform;\n this.maxItems = options.maxItems;\n }\n\n prepare(model, options) {\n const {childXform} = this;\n if (model) {\n model.forEach((childModel, index) => {\n options.index = index;\n childXform.prepare(childModel, options);\n });\n }\n }\n\n render(xmlStream, model) {\n if (this.always || (model && model.length)) {\n xmlStream.openNode(this.tag, this.$);\n if (this.count) {\n xmlStream.addAttribute(this.$count, (model && model.length) || 0);\n }\n\n const {childXform} = this;\n (model || []).forEach((childModel, index) => {\n childXform.render(xmlStream, childModel, index);\n });\n\n xmlStream.closeNode();\n } else if (this.empty) {\n xmlStream.leafNode(this.tag);\n }\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.model = [];\n return true;\n default:\n if (this.childXform.parseOpen(node)) {\n this.parser = this.childXform;\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n\n if (this.maxItems && this.model.length > this.maxItems) {\n throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);\n }\n }\n return true;\n }\n\n return false;\n }\n\n reconcile(model, options) {\n if (model) {\n const {childXform} = this;\n model.forEach(childModel => {\n childXform.reconcile(childModel, options);\n });\n }\n }\n}\n\nmodule.exports = ListXform;\n", + "const colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\n\nclass AutoFilterXform extends BaseXform {\n get tag() {\n return 'autoFilter';\n }\n\n render(xmlStream, model) {\n if (model) {\n if (typeof model === 'string') {\n // assume range\n xmlStream.leafNode('autoFilter', {ref: model});\n } else {\n const getAddress = function(addr) {\n if (typeof addr === 'string') {\n return addr;\n }\n return colCache.getAddress(addr.row, addr.column).address;\n };\n\n const firstAddress = getAddress(model.from);\n const secondAddress = getAddress(model.to);\n if (firstAddress && secondAddress) {\n xmlStream.leafNode('autoFilter', {ref: `${firstAddress}:${secondAddress}`});\n }\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'autoFilter') {\n this.model = node.attributes.ref;\n }\n }\n}\n\nmodule.exports = AutoFilterXform;\n", + "const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\nconst Enums = require('../../../doc/enums');\n\nconst RichTextXform = require('../strings/rich-text-xform');\n\nfunction getValueType(v) {\n if (v === null || v === undefined) {\n return Enums.ValueType.Null;\n }\n if (v instanceof String || typeof v === 'string') {\n return Enums.ValueType.String;\n }\n if (typeof v === 'number') {\n return Enums.ValueType.Number;\n }\n if (typeof v === 'boolean') {\n return Enums.ValueType.Boolean;\n }\n if (v instanceof Date) {\n return Enums.ValueType.Date;\n }\n if (v.text && v.hyperlink) {\n return Enums.ValueType.Hyperlink;\n }\n if (v.formula) {\n return Enums.ValueType.Formula;\n }\n if (v.error) {\n return Enums.ValueType.Error;\n }\n throw new Error('I could not understand type of value');\n}\n\nfunction getEffectiveCellType(cell) {\n switch (cell.type) {\n case Enums.ValueType.Formula:\n return getValueType(cell.result);\n default:\n return cell.type;\n }\n}\n\nclass CellXform extends BaseXform {\n constructor() {\n super();\n\n this.richTextXForm = new RichTextXform();\n }\n\n get tag() {\n return 'c';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style || {}, getEffectiveCellType(model));\n if (styleId) {\n model.styleId = styleId;\n }\n\n if (model.comment) {\n options.comments.push({...model.comment, ref: model.address});\n }\n\n switch (model.type) {\n case Enums.ValueType.String:\n case Enums.ValueType.RichText:\n if (options.sharedStrings) {\n model.ssId = options.sharedStrings.add(model.value);\n }\n break;\n\n case Enums.ValueType.Date:\n if (options.date1904) {\n model.date1904 = true;\n }\n break;\n\n case Enums.ValueType.Hyperlink:\n if (options.sharedStrings && model.text !== undefined && model.text !== null) {\n model.ssId = options.sharedStrings.add(model.text);\n }\n options.hyperlinks.push({\n address: model.address,\n target: model.hyperlink,\n tooltip: model.tooltip,\n });\n break;\n\n case Enums.ValueType.Merge:\n options.merges.add(model);\n break;\n\n case Enums.ValueType.Formula:\n if (options.date1904) {\n // in case valueType is date\n model.date1904 = true;\n }\n\n if (model.shareType === 'shared') {\n model.si = options.siFormulae++;\n }\n\n if (model.formula) {\n options.formulae[model.address] = model;\n } else if (model.sharedFormula) {\n const master = options.formulae[model.sharedFormula];\n if (!master) {\n throw new Error(\n `Shared Formula master must exist above and or left of clone for cell ${model.address}`\n );\n }\n if (master.si === undefined) {\n master.shareType = 'shared';\n master.si = options.siFormulae++;\n master.range = new Range(master.address, model.address);\n } else if (master.range) {\n master.range.expandToAddress(model.address);\n }\n model.si = master.si;\n }\n break;\n\n default:\n break;\n }\n }\n\n renderFormula(xmlStream, model) {\n let attrs = null;\n switch (model.shareType) {\n case 'shared':\n attrs = {\n t: 'shared',\n ref: model.ref || model.range.range,\n si: model.si,\n };\n break;\n\n case 'array':\n attrs = {\n t: 'array',\n ref: model.ref,\n };\n break;\n\n default:\n if (model.si !== undefined) {\n attrs = {\n t: 'shared',\n si: model.si,\n };\n }\n break;\n }\n\n switch (getValueType(model.result)) {\n case Enums.ValueType.Null: // ?\n xmlStream.leafNode('f', attrs, model.formula);\n break;\n\n case Enums.ValueType.String:\n // oddly, formula results don't ever use shared strings\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result);\n break;\n\n case Enums.ValueType.Number:\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result);\n break;\n\n case Enums.ValueType.Boolean:\n xmlStream.addAttribute('t', 'b');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result ? 1 : 0);\n break;\n\n case Enums.ValueType.Error:\n xmlStream.addAttribute('t', 'e');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result.error);\n break;\n\n case Enums.ValueType.Date:\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, utils.dateToExcel(model.result, model.date1904));\n break;\n\n // case Enums.ValueType.Hyperlink: // ??\n // case Enums.ValueType.Formula:\n default:\n throw new Error('I could not understand type of value');\n }\n }\n\n render(xmlStream, model) {\n if (model.type === Enums.ValueType.Null && !model.styleId) {\n // if null and no style, exit\n return;\n }\n\n xmlStream.openNode('c');\n xmlStream.addAttribute('r', model.address);\n\n if (model.styleId) {\n xmlStream.addAttribute('s', model.styleId);\n }\n\n switch (model.type) {\n case Enums.ValueType.Null:\n break;\n\n case Enums.ValueType.Number:\n xmlStream.leafNode('v', null, model.value);\n break;\n\n case Enums.ValueType.Boolean:\n xmlStream.addAttribute('t', 'b');\n xmlStream.leafNode('v', null, model.value ? '1' : '0');\n break;\n\n case Enums.ValueType.Error:\n xmlStream.addAttribute('t', 'e');\n xmlStream.leafNode('v', null, model.value.error);\n break;\n\n case Enums.ValueType.String:\n case Enums.ValueType.RichText:\n if (model.ssId !== undefined) {\n xmlStream.addAttribute('t', 's');\n xmlStream.leafNode('v', null, model.ssId);\n } else if (model.value && model.value.richText) {\n xmlStream.addAttribute('t', 'inlineStr');\n xmlStream.openNode('is');\n model.value.richText.forEach(text => {\n this.richTextXForm.render(xmlStream, text);\n });\n xmlStream.closeNode('is');\n } else {\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('v', null, model.value);\n }\n break;\n\n case Enums.ValueType.Date:\n xmlStream.leafNode('v', null, utils.dateToExcel(model.value, model.date1904));\n break;\n\n case Enums.ValueType.Hyperlink:\n if (model.ssId !== undefined) {\n xmlStream.addAttribute('t', 's');\n xmlStream.leafNode('v', null, model.ssId);\n } else {\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('v', null, model.text);\n }\n break;\n\n case Enums.ValueType.Formula:\n this.renderFormula(xmlStream, model);\n break;\n\n case Enums.ValueType.Merge:\n // nothing to add\n break;\n\n default:\n break;\n }\n\n xmlStream.closeNode(); // \n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'c':\n // const address = colCache.decodeAddress(node.attributes.r);\n this.model = {\n address: node.attributes.r,\n };\n this.t = node.attributes.t;\n if (node.attributes.s) {\n this.model.styleId = parseInt(node.attributes.s, 10);\n }\n return true;\n\n case 'f':\n this.currentNode = 'f';\n this.model.si = node.attributes.si;\n this.model.shareType = node.attributes.t;\n this.model.ref = node.attributes.ref;\n return true;\n\n case 'v':\n this.currentNode = 'v';\n return true;\n\n case 't':\n this.currentNode = 't';\n return true;\n\n case 'r':\n this.parser = this.richTextXForm;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n return;\n }\n switch (this.currentNode) {\n case 'f':\n this.model.formula = this.model.formula ? this.model.formula + text : text;\n break;\n case 'v':\n case 't':\n if (this.model.value && this.model.value.richText) {\n this.model.value.richText.text = this.model.value.richText.text\n ? this.model.value.richText.text + text\n : text;\n } else {\n this.model.value = this.model.value ? this.model.value + text : text;\n }\n break;\n default:\n break;\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'c': {\n const {model} = this;\n\n // first guess on cell type\n if (model.formula || model.shareType) {\n model.type = Enums.ValueType.Formula;\n if (model.value) {\n if (this.t === 'str') {\n model.result = utils.xmlDecode(model.value);\n } else if (this.t === 'b') {\n model.result = parseInt(model.value, 10) !== 0;\n } else if (this.t === 'e') {\n model.result = {error: model.value};\n } else {\n model.result = parseFloat(model.value);\n }\n model.value = undefined;\n }\n } else if (model.value !== undefined) {\n switch (this.t) {\n case 's':\n model.type = Enums.ValueType.String;\n model.value = parseInt(model.value, 10);\n break;\n case 'str':\n model.type = Enums.ValueType.String;\n model.value = utils.xmlDecode(model.value);\n break;\n case 'inlineStr':\n model.type = Enums.ValueType.String;\n break;\n case 'b':\n model.type = Enums.ValueType.Boolean;\n model.value = parseInt(model.value, 10) !== 0;\n break;\n case 'e':\n model.type = Enums.ValueType.Error;\n model.value = {error: model.value};\n break;\n default:\n model.type = Enums.ValueType.Number;\n model.value = parseFloat(model.value);\n break;\n }\n } else if (model.styleId) {\n model.type = Enums.ValueType.Null;\n } else {\n model.type = Enums.ValueType.Merge;\n }\n return false;\n }\n\n case 'f':\n case 'v':\n case 'is':\n this.currentNode = undefined;\n return true;\n\n case 't':\n if (this.parser) {\n this.parser.parseClose(name);\n return true;\n }\n this.currentNode = undefined;\n return true;\n\n case 'r':\n this.model.value = this.model.value || {};\n this.model.value.richText = this.model.value.richText || [];\n this.model.value.richText.push(this.parser.model);\n this.parser = undefined;\n this.currentNode = undefined;\n return true;\n\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n return true;\n }\n return false;\n }\n }\n\n reconcile(model, options) {\n const style = model.styleId && options.styles && options.styles.getStyleModel(model.styleId);\n if (style) {\n model.style = style;\n }\n if (model.styleId !== undefined) {\n model.styleId = undefined;\n }\n\n switch (model.type) {\n case Enums.ValueType.String:\n if (typeof model.value === 'number') {\n if (options.sharedStrings) {\n model.value = options.sharedStrings.getString(model.value);\n }\n }\n if (model.value.richText) {\n model.type = Enums.ValueType.RichText;\n }\n break;\n\n case Enums.ValueType.Number:\n if (style && utils.isDateFmt(style.numFmt)) {\n model.type = Enums.ValueType.Date;\n model.value = utils.excelToDate(model.value, options.date1904);\n }\n break;\n\n case Enums.ValueType.Formula:\n if (model.result !== undefined && style && utils.isDateFmt(style.numFmt)) {\n model.result = utils.excelToDate(model.result, options.date1904);\n }\n if (model.shareType === 'shared') {\n if (model.ref) {\n // master\n options.formulae[model.si] = model.address;\n } else {\n // slave\n model.sharedFormula = options.formulae[model.si];\n delete model.shareType;\n }\n delete model.si;\n }\n break;\n\n default:\n break;\n }\n\n // look for hyperlink\n const hyperlink = options.hyperlinkMap[model.address];\n if (hyperlink) {\n if (model.type === Enums.ValueType.Formula) {\n model.text = model.result;\n model.result = undefined;\n } else {\n model.text = model.value;\n model.value = undefined;\n }\n model.type = Enums.ValueType.Hyperlink;\n model.hyperlink = hyperlink;\n }\n\n const comment = options.commentsMap && options.commentsMap[model.address];\n if (comment) {\n model.comment = comment;\n }\n }\n}\n\nmodule.exports = CellXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass CfIconExtXform extends BaseXform {\n get tag() {\n return 'x14:cfIcon';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n iconSet: model.iconSet,\n iconId: model.iconId,\n });\n }\n\n parseOpen({attributes}) {\n this.model = {\n iconSet: attributes.iconSet,\n iconId: BaseXform.toIntValue(attributes.iconId),\n };\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = CfIconExtXform;\n", + "const {v4: uuidv4} = require('uuid');\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst DatabarExtXform = require('./databar-ext-xform');\nconst IconSetExtXform = require('./icon-set-ext-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nclass CfRuleExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:dataBar': (this.databarXform = new DatabarExtXform()),\n 'x14:iconSet': (this.iconSetXform = new IconSetExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfRule';\n }\n\n static isExt(rule) {\n // is this rule primitive?\n if (rule.type === 'dataBar') {\n return DatabarExtXform.isExt(rule);\n }\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return true;\n }\n }\n return false;\n }\n\n prepare(model) {\n if (CfRuleExtXform.isExt(model)) {\n model.x14Id = `{${uuidv4()}}`.toUpperCase();\n }\n }\n\n render(xmlStream, model) {\n if (!CfRuleExtXform.isExt(model)) {\n return;\n }\n\n switch (model.type) {\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n }\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n id: model.x14Id,\n });\n\n this.databarXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n id: model.x14Id || `{${uuidv4()}}`,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n type: attributes.type,\n x14Id: attributes.id,\n priority: BaseXform.toIntValue(attributes.priority),\n };\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = CfRuleExtXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst FExtXform = require('./f-ext-xform');\n\nclass CfvoExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'xm:f': (this.fExtXform = new FExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfvo';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.type,\n });\n if (model.value !== undefined) {\n this.fExtXform.render(xmlStream, model.value);\n }\n xmlStream.closeNode();\n }\n\n createNewModel(node) {\n return {\n type: node.attributes.type,\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'xm:f':\n this.model.value = parser.model ? parseFloat(parser.model) : 0;\n break;\n }\n }\n}\n\nmodule.exports = CfvoExtXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst SqRefExtXform = require('./sqref-ext-xform');\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\n\nclass ConditionalFormattingExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'xm:sqref': (this.sqRef = new SqRefExtXform()),\n 'x14:cfRule': (this.cfRule = new CfRuleExtXform()),\n };\n }\n\n get tag() {\n return 'x14:conditionalFormatting';\n }\n\n prepare(model, options) {\n model.rules.forEach(rule => {\n this.cfRule.prepare(rule, options);\n });\n }\n\n render(xmlStream, model) {\n if (!model.rules.some(CfRuleExtXform.isExt)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n 'xmlns:xm': 'http://schemas.microsoft.com/office/excel/2006/main',\n });\n\n model.rules.filter(CfRuleExtXform.isExt).forEach(rule => this.cfRule.render(xmlStream, rule));\n\n // for some odd reason, Excel needs the node to be after the rules\n this.sqRef.render(xmlStream, model.ref);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {\n rules: [],\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'xm:sqref':\n this.model.ref = parser.model;\n break;\n\n case 'x14:cfRule':\n this.model.rules.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = ConditionalFormattingExtXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\nconst ConditionalFormattingExtXform = require('./conditional-formatting-ext-xform');\n\nclass ConditionalFormattingsExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:conditionalFormatting': (this.cfXform = new ConditionalFormattingExtXform()),\n };\n }\n\n get tag() {\n return 'x14:conditionalFormattings';\n }\n\n hasContent(model) {\n if (model.hasExtContent === undefined) {\n model.hasExtContent = model.some(cf => cf.rules.some(CfRuleExtXform.isExt));\n }\n return model.hasExtContent;\n }\n\n prepare(model, options) {\n model.forEach(cf => {\n this.cfXform.prepare(cf, options);\n });\n }\n\n render(xmlStream, model) {\n if (this.hasContent(model)) {\n xmlStream.openNode(this.tag);\n model.forEach(cf => this.cfXform.render(xmlStream, cf));\n xmlStream.closeNode();\n }\n }\n\n createNewModel() {\n return [];\n }\n\n onParserClose(name, parser) {\n // model is array of conditional formatting objects\n this.model.push(parser.model);\n }\n}\n\nmodule.exports = ConditionalFormattingsExtXform;\n", + "const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoExtXform = require('./cfvo-ext-xform');\n\nclass DatabarExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\n 'x14:borderColor': (this.borderColorXform = new ColorXform('x14:borderColor')),\n 'x14:negativeBorderColor': (this.negativeBorderColorXform = new ColorXform(\n 'x14:negativeBorderColor'\n )),\n 'x14:negativeFillColor': (this.negativeFillColorXform = new ColorXform(\n 'x14:negativeFillColor'\n )),\n 'x14:axisColor': (this.axisColorXform = new ColorXform('x14:axisColor')),\n };\n }\n\n static isExt(rule) {\n // not all databars need ext\n // TODO: refine this\n return !rule.gradient;\n }\n\n get tag() {\n return 'x14:dataBar';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n minLength: BaseXform.toIntAttribute(model.minLength, 0, true),\n maxLength: BaseXform.toIntAttribute(model.maxLength, 100, true),\n border: BaseXform.toBoolAttribute(model.border, false),\n gradient: BaseXform.toBoolAttribute(model.gradient, true),\n negativeBarColorSameAsPositive: BaseXform.toBoolAttribute(\n model.negativeBarColorSameAsPositive,\n true\n ),\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolAttribute(\n model.negativeBarBorderColorSameAsPositive,\n true\n ),\n axisPosition: BaseXform.toAttribute(model.axisPosition, 'auto'),\n direction: BaseXform.toAttribute(model.direction, 'leftToRight'),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n this.borderColorXform.render(xmlStream, model.borderColor);\n this.negativeBorderColorXform.render(xmlStream, model.negativeBorderColor);\n this.negativeFillColorXform.render(xmlStream, model.negativeFillColor);\n this.axisColorXform.render(xmlStream, model.axisColor);\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n cfvo: [],\n minLength: BaseXform.toIntValue(attributes.minLength, 0),\n maxLength: BaseXform.toIntValue(attributes.maxLength, 100),\n border: BaseXform.toBoolValue(attributes.border, false),\n gradient: BaseXform.toBoolValue(attributes.gradient, true),\n negativeBarColorSameAsPositive: BaseXform.toBoolValue(\n attributes.negativeBarColorSameAsPositive,\n true\n ),\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolValue(\n attributes.negativeBarBorderColorSameAsPositive,\n true\n ),\n axisPosition: BaseXform.toStringValue(attributes.axisPosition, 'auto'),\n direction: BaseXform.toStringValue(attributes.direction, 'leftToRight'),\n };\n }\n\n onParserClose(name, parser) {\n const [, prop] = name.split(':');\n switch (prop) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n\n default:\n this.model[prop] = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = DatabarExtXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass FExtXform extends BaseXform {\n get tag() {\n return 'xm:f';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = FExtXform;\n", + "const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst CfvoExtXform = require('./cfvo-ext-xform');\nconst CfIconExtXform = require('./cf-icon-ext-xform');\n\nclass IconSetExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\n 'x14:cfIcon': (this.cfIconXform = new CfIconExtXform()),\n };\n }\n\n get tag() {\n return 'x14:iconSet';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n iconSet: BaseXform.toStringAttribute(model.iconSet),\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\n custom: BaseXform.toBoolAttribute(model.icons, false),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n if (model.icons) {\n model.icons.forEach((icon, i) => {\n icon.iconId = i;\n this.cfIconXform.render(xmlStream, icon);\n });\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n cfvo: [],\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolValue(attributes.reverse, false),\n showValue: BaseXform.toBoolValue(attributes.showValue, true),\n };\n }\n\n onParserClose(name, parser) {\n const [, prop] = name.split(':');\n switch (prop) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n\n case 'cfIcon':\n if (!this.model.icons) {\n this.model.icons = [];\n }\n this.model.icons.push(parser.model);\n break;\n\n default:\n this.model[prop] = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = IconSetExtXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass SqrefExtXform extends BaseXform {\n get tag() {\n return 'xm:sqref';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = SqrefExtXform;\n", + "const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst Range = require('../../../../doc/range');\n\nconst DatabarXform = require('./databar-xform');\nconst ExtLstRefXform = require('./ext-lst-ref-xform');\nconst FormulaXform = require('./formula-xform');\nconst ColorScaleXform = require('./color-scale-xform');\nconst IconSetXform = require('./icon-set-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nconst getTextFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.operator) {\n case 'containsText':\n return `NOT(ISERROR(SEARCH(\"${model.text}\",${tl})))`;\n case 'containsBlanks':\n return `LEN(TRIM(${tl}))=0`;\n case 'notContainsBlanks':\n return `LEN(TRIM(${tl}))>0`;\n case 'containsErrors':\n return `ISERROR(${tl})`;\n case 'notContainsErrors':\n return `NOT(ISERROR(${tl}))`;\n default:\n return undefined;\n }\n};\n\nconst getTimePeriodFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.timePeriod) {\n case 'thisWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`;\n case 'lastWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`;\n case 'nextWeek':\n return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`;\n case 'yesterday':\n return `FLOOR(${tl},1)=TODAY()-1`;\n case 'today':\n return `FLOOR(${tl},1)=TODAY()`;\n case 'tomorrow':\n return `FLOOR(${tl},1)=TODAY()+1`;\n case 'last7Days':\n return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`;\n case 'lastMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`;\n case 'thisMonth':\n return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`;\n case 'nextMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`;\n default:\n return undefined;\n }\n};\n\nconst opType = attributes => {\n const {type, operator} = attributes;\n switch (type) {\n case 'containsText':\n case 'containsBlanks':\n case 'notContainsBlanks':\n case 'containsErrors':\n case 'notContainsErrors':\n return {\n type: 'containsText',\n operator: type,\n };\n\n default:\n return {type, operator};\n }\n};\n\nclass CfRuleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n dataBar: (this.databarXform = new DatabarXform()),\n extLst: (this.extLstRefXform = new ExtLstRefXform()),\n formula: (this.formulaXform = new FormulaXform()),\n colorScale: (this.colorScaleXform = new ColorScaleXform()),\n iconSet: (this.iconSetXform = new IconSetXform()),\n };\n }\n\n get tag() {\n return 'cfRule';\n }\n\n static isPrimitive(rule) {\n // is this rule primitive?\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return false;\n }\n }\n return true;\n }\n\n render(xmlStream, model) {\n switch (model.type) {\n case 'expression':\n this.renderExpression(xmlStream, model);\n break;\n case 'cellIs':\n this.renderCellIs(xmlStream, model);\n break;\n case 'top10':\n this.renderTop10(xmlStream, model);\n break;\n case 'aboveAverage':\n this.renderAboveAverage(xmlStream, model);\n break;\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'colorScale':\n this.renderColorScale(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n case 'containsText':\n this.renderText(xmlStream, model);\n break;\n case 'timePeriod':\n this.renderTimePeriod(xmlStream, model);\n break;\n }\n }\n\n renderExpression(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'expression',\n dxfId: model.dxfId,\n priority: model.priority,\n });\n\n this.formulaXform.render(xmlStream, model.formulae[0]);\n\n xmlStream.closeNode();\n }\n\n renderCellIs(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'cellIs',\n dxfId: model.dxfId,\n priority: model.priority,\n operator: model.operator,\n });\n\n model.formulae.forEach(formula => {\n this.formulaXform.render(xmlStream, formula);\n });\n\n xmlStream.closeNode();\n }\n\n renderTop10(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'top10',\n dxfId: model.dxfId,\n priority: model.priority,\n percent: BaseXform.toBoolAttribute(model.percent, false),\n bottom: BaseXform.toBoolAttribute(model.bottom, false),\n rank: BaseXform.toIntValue(model.rank, 10, true),\n });\n }\n\n renderAboveAverage(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'aboveAverage',\n dxfId: model.dxfId,\n priority: model.priority,\n aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true),\n });\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n priority: model.priority,\n });\n\n this.databarXform.render(xmlStream, model);\n this.extLstRefXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderColorScale(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'colorScale',\n priority: model.priority,\n });\n\n this.colorScaleXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n // iconset is all primitive or all extLst\n if (!CfRuleXform.isPrimitive(model)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderText(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.operator,\n dxfId: model.dxfId,\n priority: model.priority,\n operator: BaseXform.toStringAttribute(model.operator, 'containsText'),\n });\n\n const formula = getTextFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n renderTimePeriod(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'timePeriod',\n dxfId: model.dxfId,\n priority: model.priority,\n timePeriod: model.timePeriod,\n });\n\n const formula = getTimePeriodFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ...opType(attributes),\n dxfId: BaseXform.toIntValue(attributes.dxfId),\n priority: BaseXform.toIntValue(attributes.priority),\n timePeriod: attributes.timePeriod,\n percent: BaseXform.toBoolValue(attributes.percent),\n bottom: BaseXform.toBoolValue(attributes.bottom),\n rank: BaseXform.toIntValue(attributes.rank),\n aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage),\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'dataBar':\n case 'extLst':\n case 'colorScale':\n case 'iconSet':\n // merge parser model with ours\n Object.assign(this.model, parser.model);\n break;\n\n case 'formula':\n // except - formula is a string and appends to formulae\n this.model.formulae = this.model.formulae || [];\n this.model.formulae.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = CfRuleXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass CfvoXform extends BaseXform {\n get tag() {\n return 'cfvo';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: model.type,\n val: model.value,\n });\n }\n\n parseOpen(node) {\n this.model = {\n type: node.attributes.type,\n value: BaseXform.toFloatValue(node.attributes.val),\n };\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = CfvoXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoXform = require('./cfvo-xform');\n\nclass ColorScaleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n color: (this.colorXform = new ColorXform()),\n };\n }\n\n get tag() {\n return 'colorScale';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n model.color.forEach(color => {\n this.colorXform.render(xmlStream, color);\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel(node) {\n return {\n cfvo: [],\n color: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model[name].push(parser.model);\n }\n}\n\nmodule.exports = ColorScaleXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst CfRuleXform = require('./cf-rule-xform');\n\nclass ConditionalFormattingXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfRule: new CfRuleXform(),\n };\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n render(xmlStream, model) {\n // if there are no primitive rules, exit now\n if (!model.rules.some(CfRuleXform.isPrimitive)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {sqref: model.ref});\n\n model.rules.forEach(rule => {\n if (CfRuleXform.isPrimitive(rule)) {\n rule.ref = model.ref;\n this.map.cfRule.render(xmlStream, rule);\n }\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ref: attributes.sqref,\n rules: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model.rules.push(parser.model);\n }\n}\n\nmodule.exports = ConditionalFormattingXform;\n", + "const BaseXform = require('../../base-xform');\n\nconst ConditionalFormattingXform = require('./conditional-formatting-xform');\n\nclass ConditionalFormattingsXform extends BaseXform {\n constructor() {\n super();\n\n this.cfXform = new ConditionalFormattingXform();\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n reset() {\n this.model = [];\n }\n\n prepare(model, options) {\n // ensure each rule has a priority value\n let nextPriority = model.reduce(\n (p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)),\n 1\n );\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (!rule.priority) {\n rule.priority = nextPriority++;\n }\n\n if (rule.style) {\n rule.dxfId = options.styles.addDxfStyle(rule.style);\n }\n });\n });\n }\n\n render(xmlStream, model) {\n model.forEach(cf => {\n this.cfXform.render(xmlStream, cf);\n });\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case 'conditionalFormatting':\n this.parser = this.cfXform;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n return false;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (rule.dxfId !== undefined) {\n rule.style = options.styles.getDxfStyle(rule.dxfId);\n delete rule.dxfId;\n }\n });\n });\n }\n}\n\nmodule.exports = ConditionalFormattingsXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoXform = require('./cfvo-xform');\n\nclass DatabarXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n color: (this.colorXform = new ColorXform()),\n };\n }\n\n get tag() {\n return 'dataBar';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n this.colorXform.render(xmlStream, model.color);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {\n cfvo: [],\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n case 'color':\n this.model.color = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = DatabarXform;\n", + "/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nclass X14IdXform extends BaseXform {\n get tag() {\n return 'x14:id';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nclass ExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:id': (this.idXform = new X14IdXform()),\n };\n }\n\n get tag() {\n return 'ext';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n uri: '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n });\n\n this.idXform.render(xmlStream, model.x14Id);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n this.model.x14Id = parser.model;\n }\n}\n\nclass ExtLstRefXform extends CompositeXform {\n constructor() {\n super();\n this.map = {\n ext: new ExtXform(),\n };\n }\n\n get tag() {\n return 'extLst';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n this.map.ext.render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = ExtLstRefXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass FormulaXform extends BaseXform {\n get tag() {\n return 'formula';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = FormulaXform;\n", + "const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst CfvoXform = require('./cfvo-xform');\n\nclass IconSetXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n };\n }\n\n get tag() {\n return 'iconSet';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n iconSet: BaseXform.toStringAttribute(model.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolValue(attributes.reverse),\n showValue: BaseXform.toBoolValue(attributes.showValue),\n cfvo: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model[name].push(parser.model);\n }\n}\n\nmodule.exports = IconSetXform;\n", + "const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nclass ColXform extends BaseXform {\n get tag() {\n return 'col';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style || {});\n if (styleId) {\n model.styleId = styleId;\n }\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('col');\n xmlStream.addAttribute('min', model.min);\n xmlStream.addAttribute('max', model.max);\n if (model.width) {\n xmlStream.addAttribute('width', model.width);\n }\n if (model.styleId) {\n xmlStream.addAttribute('style', model.styleId);\n }\n if (model.hidden) {\n xmlStream.addAttribute('hidden', '1');\n }\n if (model.bestFit) {\n xmlStream.addAttribute('bestFit', '1');\n }\n if (model.outlineLevel) {\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\n }\n if (model.collapsed) {\n xmlStream.addAttribute('collapsed', '1');\n }\n xmlStream.addAttribute('customWidth', '1');\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (node.name === 'col') {\n const model = (this.model = {\n min: parseInt(node.attributes.min || '0', 10),\n max: parseInt(node.attributes.max || '0', 10),\n width:\n node.attributes.width === undefined\n ? undefined\n : parseFloat(node.attributes.width || '0'),\n });\n if (node.attributes.style) {\n model.styleId = parseInt(node.attributes.style, 10);\n }\n if (utils.parseBoolean(node.attributes.hidden)) {\n model.hidden = true;\n }\n if (utils.parseBoolean(node.attributes.bestFit)) {\n model.bestFit = true;\n }\n if (node.attributes.outlineLevel) {\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\n }\n if (utils.parseBoolean(node.attributes.collapsed)) {\n model.collapsed = true;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n\n reconcile(model, options) {\n // reconcile column styles\n if (model.styleId) {\n model.style = options.styles.getStyleModel(model.styleId);\n }\n }\n}\n\nmodule.exports = ColXform;\n", + "const _ = require('../../../utils/under-dash');\nconst utils = require('../../../utils/utils');\nconst colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\n\nfunction assign(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = value;\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction assignBool(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = utils.parseBoolean(value);\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction optimiseDataValidations(model) {\n // Squeeze alike data validations together into rectangular ranges\n // to reduce file size and speed up Excel load time\n const dvList = _.map(model, (dataValidation, address) => ({\n address,\n dataValidation,\n marked: false,\n })).sort((a, b) => _.strcmp(a.address, b.address));\n const dvMap = _.keyBy(dvList, 'address');\n const matchCol = (addr, height, col) => {\n for (let i = 0; i < height; i++) {\n const otherAddress = colCache.encodeAddress(addr.row + i, col);\n if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) {\n return false;\n }\n }\n return true;\n };\n return dvList\n .map(dv => {\n if (!dv.marked) {\n const addr = colCache.decodeEx(dv.address);\n if (addr.dimensions) {\n dvMap[addr.dimensions].marked = true;\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n\n // iterate downwards - finding matching cells\n let height = 1;\n let otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) {\n height++;\n otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n }\n\n // iterate rightwards...\n\n let width = 1;\n while (matchCol(addr, height, addr.col + width)) {\n width++;\n }\n\n // mark all included addresses\n for (let i = 0; i < height; i++) {\n for (let j = 0; j < width; j++) {\n otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j);\n dvMap[otherAddress].marked = true;\n }\n }\n\n if (height > 1 || width > 1) {\n const bottom = addr.row + (height - 1);\n const right = addr.col + (width - 1);\n return {\n ...dv.dataValidation,\n sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}`,\n };\n }\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nclass DataValidationsXform extends BaseXform {\n get tag() {\n return 'dataValidations';\n }\n\n render(xmlStream, model) {\n const optimizedModel = optimiseDataValidations(model);\n if (optimizedModel.length) {\n xmlStream.openNode('dataValidations', {count: optimizedModel.length});\n\n optimizedModel.forEach(value => {\n xmlStream.openNode('dataValidation');\n\n if (value.type !== 'any') {\n xmlStream.addAttribute('type', value.type);\n\n if (value.operator && value.type !== 'list' && value.operator !== 'between') {\n xmlStream.addAttribute('operator', value.operator);\n }\n if (value.allowBlank) {\n xmlStream.addAttribute('allowBlank', '1');\n }\n }\n if (value.showInputMessage) {\n xmlStream.addAttribute('showInputMessage', '1');\n }\n if (value.promptTitle) {\n xmlStream.addAttribute('promptTitle', value.promptTitle);\n }\n if (value.prompt) {\n xmlStream.addAttribute('prompt', value.prompt);\n }\n if (value.showErrorMessage) {\n xmlStream.addAttribute('showErrorMessage', '1');\n }\n if (value.errorStyle) {\n xmlStream.addAttribute('errorStyle', value.errorStyle);\n }\n if (value.errorTitle) {\n xmlStream.addAttribute('errorTitle', value.errorTitle);\n }\n if (value.error) {\n xmlStream.addAttribute('error', value.error);\n }\n xmlStream.addAttribute('sqref', value.sqref);\n (value.formulae || []).forEach((formula, index) => {\n xmlStream.openNode(`formula${index + 1}`);\n if (value.type === 'date') {\n xmlStream.writeText(utils.dateToExcel(new Date(formula)));\n } else {\n xmlStream.writeText(formula);\n }\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'dataValidations':\n this.model = {};\n return true;\n\n case 'dataValidation': {\n this._address = node.attributes.sqref;\n const dataValidation = {type: node.attributes.type || 'any', formulae: []};\n\n if (node.attributes.type) {\n assignBool(dataValidation, node.attributes, 'allowBlank');\n }\n assignBool(dataValidation, node.attributes, 'showInputMessage');\n assignBool(dataValidation, node.attributes, 'showErrorMessage');\n\n switch (dataValidation.type) {\n case 'any':\n case 'list':\n case 'custom':\n break;\n default:\n assign(dataValidation, node.attributes, 'operator', 'between');\n break;\n }\n assign(dataValidation, node.attributes, 'promptTitle');\n assign(dataValidation, node.attributes, 'prompt');\n assign(dataValidation, node.attributes, 'errorStyle');\n assign(dataValidation, node.attributes, 'errorTitle');\n assign(dataValidation, node.attributes, 'error');\n\n this._dataValidation = dataValidation;\n return true;\n }\n\n case 'formula1':\n case 'formula2':\n this._formula = [];\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this._formula) {\n this._formula.push(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'dataValidations':\n return false;\n case 'dataValidation': {\n if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) {\n delete this._dataValidation.formulae;\n delete this._dataValidation.operator;\n }\n // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4\n const list = this._address.split(/\\s+/g) || [];\n list.forEach(addr => {\n if (addr.includes(':')) {\n const range = new Range(addr);\n range.forEachAddress(address => {\n this.model[address] = this._dataValidation;\n });\n } else {\n this.model[addr] = this._dataValidation;\n }\n });\n return true;\n }\n case 'formula1':\n case 'formula2': {\n let formula = this._formula.join('');\n switch (this._dataValidation.type) {\n case 'whole':\n case 'textLength':\n formula = parseInt(formula, 10);\n break;\n case 'decimal':\n formula = parseFloat(formula);\n break;\n case 'date':\n formula = utils.excelToDate(parseFloat(formula));\n break;\n default:\n break;\n }\n this._dataValidation.formulae.push(formula);\n this._formula = undefined;\n return true;\n }\n default:\n return true;\n }\n }\n}\n\nmodule.exports = DataValidationsXform;\n", + "const BaseXform = require('../base-xform');\n\nclass DimensionXform extends BaseXform {\n get tag() {\n return 'dimension';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode('dimension', {ref: model});\n }\n }\n\n parseOpen(node) {\n if (node.name === 'dimension') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = DimensionXform;\n", + "const BaseXform = require('../base-xform');\n\nclass DrawingXform extends BaseXform {\n get tag() {\n return 'drawing';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = DrawingXform;\n", + "/* eslint-disable max-classes-per-file */\nconst CompositeXform = require('../composite-xform');\n\nconst ConditionalFormattingsExt = require('./cf-ext/conditional-formattings-ext-xform');\n\nclass ExtXform extends CompositeXform {\n constructor() {\n super();\n this.map = {\n 'x14:conditionalFormattings': (this.conditionalFormattings = new ConditionalFormattingsExt()),\n };\n }\n\n get tag() {\n return 'ext';\n }\n\n hasContent(model) {\n return this.conditionalFormattings.hasContent(model.conditionalFormattings);\n }\n\n prepare(model, options) {\n this.conditionalFormattings.prepare(model.conditionalFormattings, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('ext', {\n uri: '{78C0D931-6437-407d-A8EE-F0AAD7539E65}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n });\n\n this.conditionalFormattings.render(xmlStream, model.conditionalFormattings);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n this.model[name] = parser.model;\n }\n}\n\nclass ExtLstXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n ext: (this.ext = new ExtXform()),\n };\n }\n\n get tag() {\n return 'extLst';\n }\n\n prepare(model, options) {\n this.ext.prepare(model, options);\n }\n\n hasContent(model) {\n return this.ext.hasContent(model);\n }\n\n render(xmlStream, model) {\n if (!this.hasContent(model)) {\n return;\n }\n\n xmlStream.openNode('extLst');\n this.ext.render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = ExtLstXform;\n", + "const BaseXform = require('../base-xform');\n\nclass HeaderFooterXform extends BaseXform {\n get tag() {\n return 'headerFooter';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.addRollback();\n\n let createTag = false;\n\n xmlStream.openNode('headerFooter');\n if (model.differentFirst) {\n xmlStream.addAttribute('differentFirst', '1');\n createTag = true;\n }\n if (model.differentOddEven) {\n xmlStream.addAttribute('differentOddEven', '1');\n createTag = true;\n }\n if (model.oddHeader && typeof model.oddHeader === 'string') {\n xmlStream.leafNode('oddHeader', null, model.oddHeader);\n createTag = true;\n }\n if (model.oddFooter && typeof model.oddFooter === 'string') {\n xmlStream.leafNode('oddFooter', null, model.oddFooter);\n createTag = true;\n }\n if (model.evenHeader && typeof model.evenHeader === 'string') {\n xmlStream.leafNode('evenHeader', null, model.evenHeader);\n createTag = true;\n }\n if (model.evenFooter && typeof model.evenFooter === 'string') {\n xmlStream.leafNode('evenFooter', null, model.evenFooter);\n createTag = true;\n }\n if (model.firstHeader && typeof model.firstHeader === 'string') {\n xmlStream.leafNode('firstHeader', null, model.firstHeader);\n createTag = true;\n }\n if (model.firstFooter && typeof model.firstFooter === 'string') {\n xmlStream.leafNode('firstFooter', null, model.firstFooter);\n createTag = true;\n }\n\n if (createTag) {\n xmlStream.closeNode();\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'headerFooter':\n this.model = {};\n if (node.attributes.differentFirst) {\n this.model.differentFirst = parseInt(node.attributes.differentFirst, 0) === 1;\n }\n if (node.attributes.differentOddEven) {\n this.model.differentOddEven = parseInt(node.attributes.differentOddEven, 0) === 1;\n }\n return true;\n\n case 'oddHeader':\n this.currentNode = 'oddHeader';\n return true;\n\n case 'oddFooter':\n this.currentNode = 'oddFooter';\n return true;\n\n case 'evenHeader':\n this.currentNode = 'evenHeader';\n return true;\n\n case 'evenFooter':\n this.currentNode = 'evenFooter';\n return true;\n\n case 'firstHeader':\n this.currentNode = 'firstHeader';\n return true;\n\n case 'firstFooter':\n this.currentNode = 'firstFooter';\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n switch (this.currentNode) {\n case 'oddHeader':\n this.model.oddHeader = text;\n break;\n\n case 'oddFooter':\n this.model.oddFooter = text;\n break;\n\n case 'evenHeader':\n this.model.evenHeader = text;\n break;\n\n case 'evenFooter':\n this.model.evenFooter = text;\n break;\n\n case 'firstHeader':\n this.model.firstHeader = text;\n break;\n\n case 'firstFooter':\n this.model.firstFooter = text;\n break;\n\n default:\n break;\n }\n }\n\n parseClose() {\n switch (this.currentNode) {\n case 'oddHeader':\n case 'oddFooter':\n case 'evenHeader':\n case 'evenFooter':\n case 'firstHeader':\n case 'firstFooter':\n this.currentNode = undefined;\n return true;\n\n default:\n return false;\n }\n }\n}\n\nmodule.exports = HeaderFooterXform;\n", + "const BaseXform = require('../base-xform');\n\nclass HyperlinkXform extends BaseXform {\n get tag() {\n return 'hyperlink';\n }\n\n render(xmlStream, model) {\n if (this.isInternalLink(model)) {\n xmlStream.leafNode('hyperlink', {\n ref: model.address,\n 'r:id': model.rId,\n tooltip: model.tooltip,\n location: model.target,\n });\n } else {\n xmlStream.leafNode('hyperlink', {\n ref: model.address,\n 'r:id': model.rId,\n tooltip: model.tooltip,\n });\n }\n }\n\n parseOpen(node) {\n if (node.name === 'hyperlink') {\n this.model = {\n address: node.attributes.ref,\n rId: node.attributes['r:id'],\n tooltip: node.attributes.tooltip,\n };\n\n // This is an internal link\n if (node.attributes.location) {\n this.model.target = node.attributes.location;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n\n isInternalLink(model) {\n // @example: Sheet2!D3, return true\n return model.target && /^[^!]+![a-zA-Z]+[\\d]+$/.test(model.target);\n }\n}\n\nmodule.exports = HyperlinkXform;\n", + "const BaseXform = require('../base-xform');\n\nclass MergeCellXform extends BaseXform {\n get tag() {\n return 'mergeCell';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('mergeCell', {ref: model});\n }\n\n parseOpen(node) {\n if (node.name === 'mergeCell') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = MergeCellXform;\n", + "const _ = require('../../../utils/under-dash');\n\nconst Range = require('../../../doc/range');\nconst colCache = require('../../../utils/col-cache');\nconst Enums = require('../../../doc/enums');\n\nclass Merges {\n constructor() {\n // optional mergeCells is array of ranges (like the xml)\n this.merges = {};\n }\n\n add(merge) {\n // merge is {address, master}\n if (this.merges[merge.master]) {\n this.merges[merge.master].expandToAddress(merge.address);\n } else {\n const range = `${merge.master}:${merge.address}`;\n this.merges[merge.master] = new Range(range);\n }\n }\n\n get mergeCells() {\n return _.map(this.merges, merge => merge.range);\n }\n\n reconcile(mergeCells, rows) {\n // reconcile merge list with merge cells\n _.each(mergeCells, merge => {\n const dimensions = colCache.decode(merge);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n const row = rows[i - 1];\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = row.cells[j - 1];\n if (!cell) {\n // nulls are not included in document - so if master cell has no value - add a null one here\n row.cells[j] = {\n type: Enums.ValueType.Null,\n address: colCache.encodeAddress(i, j),\n };\n } else if (cell.type === Enums.ValueType.Merge) {\n cell.master = dimensions.tl;\n }\n }\n }\n });\n }\n\n getMasterAddress(address) {\n // if address has been merged, return its master's address. Assumes reconcile has been called\n const range = this.hash[address];\n return range && range.tl;\n }\n}\n\nmodule.exports = Merges;\n", + "const BaseXform = require('../base-xform');\n\nconst isDefined = attr => typeof attr !== 'undefined';\n\nclass OutlinePropertiesXform extends BaseXform {\n get tag() {\n return 'outlinePr';\n }\n\n render(xmlStream, model) {\n if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) {\n xmlStream.leafNode(this.tag, {\n summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined,\n summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined,\n });\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n summaryBelow: isDefined(node.attributes.summaryBelow)\n ? Boolean(Number(node.attributes.summaryBelow))\n : undefined,\n summaryRight: isDefined(node.attributes.summaryRight)\n ? Boolean(Number(node.attributes.summaryRight))\n : undefined,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = OutlinePropertiesXform;\n", + "const BaseXform = require('../base-xform');\n\nclass PageBreaksXform extends BaseXform {\n get tag() {\n return 'brk';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('brk', model);\n }\n\n parseOpen(node) {\n if (node.name === 'brk') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageBreaksXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nclass PageMarginsXform extends BaseXform {\n get tag() {\n return 'pageMargins';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n left: model.left,\n right: model.right,\n top: model.top,\n bottom: model.bottom,\n header: model.header,\n footer: model.footer,\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n left: parseFloat(node.attributes.left || 0.7),\n right: parseFloat(node.attributes.right || 0.7),\n top: parseFloat(node.attributes.top || 0.75),\n bottom: parseFloat(node.attributes.bottom || 0.75),\n header: parseFloat(node.attributes.header || 0.3),\n footer: parseFloat(node.attributes.footer || 0.3),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageMarginsXform;\n", + "const BaseXform = require('../base-xform');\n\nclass PageSetupPropertiesXform extends BaseXform {\n get tag() {\n return 'pageSetUpPr';\n }\n\n render(xmlStream, model) {\n if (model && model.fitToPage) {\n xmlStream.leafNode(this.tag, {\n fitToPage: model.fitToPage ? '1' : undefined,\n });\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n fitToPage: node.attributes.fitToPage === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageSetupPropertiesXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model) {\n return model ? '1' : undefined;\n}\nfunction pageOrderToXml(model) {\n switch (model) {\n case 'overThenDown':\n return model;\n default:\n return undefined;\n }\n}\nfunction cellCommentsToXml(model) {\n switch (model) {\n case 'atEnd':\n case 'asDisplyed':\n return model;\n default:\n return undefined;\n }\n}\nfunction errorsToXml(model) {\n switch (model) {\n case 'dash':\n case 'blank':\n case 'NA':\n return model;\n default:\n return undefined;\n }\n}\nfunction pageSizeToModel(value) {\n return value !== undefined ? parseInt(value, 10) : undefined;\n}\n\nclass PageSetupXform extends BaseXform {\n get tag() {\n return 'pageSetup';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n paperSize: model.paperSize,\n orientation: model.orientation,\n horizontalDpi: model.horizontalDpi,\n verticalDpi: model.verticalDpi,\n pageOrder: pageOrderToXml(model.pageOrder),\n blackAndWhite: booleanToXml(model.blackAndWhite),\n draft: booleanToXml(model.draft),\n cellComments: cellCommentsToXml(model.cellComments),\n errors: errorsToXml(model.errors),\n scale: model.scale,\n fitToWidth: model.fitToWidth,\n fitToHeight: model.fitToHeight,\n firstPageNumber: model.firstPageNumber,\n useFirstPageNumber: booleanToXml(model.firstPageNumber),\n usePrinterDefaults: booleanToXml(model.usePrinterDefaults),\n copies: model.copies,\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n paperSize: pageSizeToModel(node.attributes.paperSize),\n orientation: node.attributes.orientation || 'portrait',\n horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10),\n verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10),\n pageOrder: node.attributes.pageOrder || 'downThenOver',\n blackAndWhite: node.attributes.blackAndWhite === '1',\n draft: node.attributes.draft === '1',\n cellComments: node.attributes.cellComments || 'None',\n errors: node.attributes.errors || 'displayed',\n scale: parseInt(node.attributes.scale || '100', 10),\n fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10),\n fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10),\n firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10),\n useFirstPageNumber: node.attributes.useFirstPageNumber === '1',\n usePrinterDefaults: node.attributes.usePrinterDefaults === '1',\n copies: parseInt(node.attributes.copies || '1', 10),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageSetupXform;\n", + "const BaseXform = require('../base-xform');\n\nclass PictureXform extends BaseXform {\n get tag() {\n return 'picture';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PictureXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model) {\n return model ? '1' : undefined;\n}\n\nclass PrintOptionsXform extends BaseXform {\n get tag() {\n return 'printOptions';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n headings: booleanToXml(model.showRowColHeaders),\n gridLines: booleanToXml(model.showGridLines),\n horizontalCentered: booleanToXml(model.horizontalCentered),\n verticalCentered: booleanToXml(model.verticalCentered),\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n showRowColHeaders: node.attributes.headings === '1',\n showGridLines: node.attributes.gridLines === '1',\n horizontalCentered: node.attributes.horizontalCentered === '1',\n verticalCentered: node.attributes.verticalCentered === '1',\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PrintOptionsXform;\n", + "'use strict';\n\nconst PageBreaksXform = require('./page-breaks-xform');\n\nconst ListXform = require('../list-xform');\n\nclass RowBreaksXform extends ListXform {\n constructor() {\n const options = {\n tag: 'rowBreaks',\n count: true,\n childXform: new PageBreaksXform(),\n };\n super(options);\n }\n\n // get tag() { return 'rowBreaks'; }\n\n render(xmlStream, model) {\n if (model && model.length) {\n xmlStream.openNode(this.tag, this.$);\n if (this.count) {\n xmlStream.addAttribute(this.$count, model.length);\n xmlStream.addAttribute('manualBreakCount', model.length);\n }\n\n const {childXform} = this;\n model.forEach(childModel => {\n childXform.render(xmlStream, childModel);\n });\n\n xmlStream.closeNode();\n } else if (this.empty) {\n xmlStream.leafNode(this.tag);\n }\n }\n}\n\nmodule.exports = RowBreaksXform;\n", + "const BaseXform = require('../base-xform');\nconst utils = require('../../../utils/utils');\n\nconst CellXform = require('./cell-xform');\n\nclass RowXform extends BaseXform {\n constructor(options) {\n super();\n\n this.maxItems = options && options.maxItems;\n this.map = {\n c: new CellXform(),\n };\n }\n\n get tag() {\n return 'row';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style);\n if (styleId) {\n model.styleId = styleId;\n }\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.prepare(cellModel, options);\n });\n }\n\n render(xmlStream, model, options) {\n xmlStream.openNode('row');\n xmlStream.addAttribute('r', model.number);\n if (model.height) {\n xmlStream.addAttribute('ht', model.height);\n xmlStream.addAttribute('customHeight', '1');\n }\n if (model.hidden) {\n xmlStream.addAttribute('hidden', '1');\n }\n if (model.min > 0 && model.max > 0 && model.min <= model.max) {\n xmlStream.addAttribute('spans', `${model.min}:${model.max}`);\n }\n if (model.styleId) {\n xmlStream.addAttribute('s', model.styleId);\n xmlStream.addAttribute('customFormat', '1');\n }\n xmlStream.addAttribute('x14ac:dyDescent', '0.25');\n if (model.outlineLevel) {\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\n }\n if (model.collapsed) {\n xmlStream.addAttribute('collapsed', '1');\n }\n\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.render(xmlStream, cellModel, options);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (node.name === 'row') {\n this.numRowsSeen += 1;\n const spans = node.attributes.spans\n ? node.attributes.spans.split(':').map(span => parseInt(span, 10))\n : [undefined, undefined];\n const model = (this.model = {\n number: parseInt(node.attributes.r, 10),\n min: spans[0],\n max: spans[1],\n cells: [],\n });\n if (node.attributes.s) {\n model.styleId = parseInt(node.attributes.s, 10);\n }\n if (utils.parseBoolean(node.attributes.hidden)) {\n model.hidden = true;\n }\n if (utils.parseBoolean(node.attributes.bestFit)) {\n model.bestFit = true;\n }\n if (node.attributes.ht) {\n model.height = parseFloat(node.attributes.ht);\n }\n if (node.attributes.outlineLevel) {\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\n }\n if (utils.parseBoolean(node.attributes.collapsed)) {\n model.collapsed = true;\n }\n return true;\n }\n\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.cells.push(this.parser.model);\n if (this.maxItems && this.model.cells.length > this.maxItems) {\n throw new Error(`Max column count (${this.maxItems}) exceeded`);\n }\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.style = model.styleId ? options.styles.getStyleModel(model.styleId) : {};\n if (model.styleId !== undefined) {\n model.styleId = undefined;\n }\n\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.reconcile(cellModel, options);\n });\n }\n}\n\nmodule.exports = RowXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nclass SheetFormatPropertiesXform extends BaseXform {\n get tag() {\n return 'sheetFormatPr';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n defaultRowHeight: model.defaultRowHeight,\n outlineLevelRow: model.outlineLevelRow,\n outlineLevelCol: model.outlineLevelCol,\n 'x14ac:dyDescent': model.dyDescent,\n };\n if (model.defaultColWidth) {\n attributes.defaultColWidth = model.defaultColWidth;\n }\n\n // default value for 'defaultRowHeight' is 15, this should not be 'custom'\n if (!model.defaultRowHeight || model.defaultRowHeight !== 15) {\n attributes.customHeight = '1';\n }\n\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode('sheetFormatPr', attributes);\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'sheetFormatPr') {\n this.model = {\n defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || '0'),\n dyDescent: parseFloat(node.attributes['x14ac:dyDescent'] || '0'),\n outlineLevelRow: parseInt(node.attributes.outlineLevelRow || '0', 10),\n outlineLevelCol: parseInt(node.attributes.outlineLevelCol || '0', 10),\n };\n if (node.attributes.defaultColWidth) {\n this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth);\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = SheetFormatPropertiesXform;\n", + "const BaseXform = require('../base-xform');\nconst ColorXform = require('../style/color-xform');\nconst PageSetupPropertiesXform = require('./page-setup-properties-xform');\nconst OutlinePropertiesXform = require('./outline-properties-xform');\n\nclass SheetPropertiesXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n tabColor: new ColorXform('tabColor'),\n pageSetUpPr: new PageSetupPropertiesXform(),\n outlinePr: new OutlinePropertiesXform(),\n };\n }\n\n get tag() {\n return 'sheetPr';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.addRollback();\n xmlStream.openNode('sheetPr');\n\n let inner = false;\n inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner;\n inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner;\n inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner;\n\n if (inner) {\n xmlStream.closeNode();\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (node.name === this.tag) {\n this.reset();\n return true;\n }\n if (this.map[node.name]) {\n this.parser = this.map[node.name];\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n return true;\n }\n return false;\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) {\n this.model = {};\n if (this.map.tabColor.model) {\n this.model.tabColor = this.map.tabColor.model;\n }\n if (this.map.pageSetUpPr.model) {\n this.model.pageSetup = this.map.pageSetUpPr.model;\n }\n if (this.map.outlinePr.model) {\n this.model.outlineProperties = this.map.outlinePr.model;\n }\n } else {\n this.model = null;\n }\n return false;\n }\n}\n\nmodule.exports = SheetPropertiesXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model, value) {\n return model ? value : undefined;\n}\n\nfunction xmlToBoolean(value, equals) {\n return value === equals ? true : undefined;\n}\n\nclass SheetProtectionXform extends BaseXform {\n get tag() {\n return 'sheetProtection';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n sheet: booleanToXml(model.sheet, '1'),\n selectLockedCells: model.selectLockedCells === false ? '1' : undefined,\n selectUnlockedCells: model.selectUnlockedCells === false ? '1' : undefined,\n formatCells: booleanToXml(model.formatCells, '0'),\n formatColumns: booleanToXml(model.formatColumns, '0'),\n formatRows: booleanToXml(model.formatRows, '0'),\n insertColumns: booleanToXml(model.insertColumns, '0'),\n insertRows: booleanToXml(model.insertRows, '0'),\n insertHyperlinks: booleanToXml(model.insertHyperlinks, '0'),\n deleteColumns: booleanToXml(model.deleteColumns, '0'),\n deleteRows: booleanToXml(model.deleteRows, '0'),\n sort: booleanToXml(model.sort, '0'),\n autoFilter: booleanToXml(model.autoFilter, '0'),\n pivotTables: booleanToXml(model.pivotTables, '0'),\n };\n if (model.sheet) {\n attributes.algorithmName = model.algorithmName;\n attributes.hashValue = model.hashValue;\n attributes.saltValue = model.saltValue;\n attributes.spinCount = model.spinCount;\n attributes.objects = booleanToXml(model.objects === false, '1');\n attributes.scenarios = booleanToXml(model.scenarios === false, '1');\n }\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n sheet: xmlToBoolean(node.attributes.sheet, '1'),\n objects: node.attributes.objects === '1' ? false : undefined,\n scenarios: node.attributes.scenarios === '1' ? false : undefined,\n selectLockedCells: node.attributes.selectLockedCells === '1' ? false : undefined,\n selectUnlockedCells: node.attributes.selectUnlockedCells === '1' ? false : undefined,\n formatCells: xmlToBoolean(node.attributes.formatCells, '0'),\n formatColumns: xmlToBoolean(node.attributes.formatColumns, '0'),\n formatRows: xmlToBoolean(node.attributes.formatRows, '0'),\n insertColumns: xmlToBoolean(node.attributes.insertColumns, '0'),\n insertRows: xmlToBoolean(node.attributes.insertRows, '0'),\n insertHyperlinks: xmlToBoolean(node.attributes.insertHyperlinks, '0'),\n deleteColumns: xmlToBoolean(node.attributes.deleteColumns, '0'),\n deleteRows: xmlToBoolean(node.attributes.deleteRows, '0'),\n sort: xmlToBoolean(node.attributes.sort, '0'),\n autoFilter: xmlToBoolean(node.attributes.autoFilter, '0'),\n pivotTables: xmlToBoolean(node.attributes.pivotTables, '0'),\n };\n if (node.attributes.algorithmName) {\n this.model.algorithmName = node.attributes.algorithmName;\n this.model.hashValue = node.attributes.hashValue;\n this.model.saltValue = node.attributes.saltValue;\n this.model.spinCount = parseInt(node.attributes.spinCount, 10);\n }\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = SheetProtectionXform;\n", + "const colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\n\nconst VIEW_STATES = {\n frozen: 'frozen',\n frozenSplit: 'frozen',\n split: 'split',\n};\n\nclass SheetViewXform extends BaseXform {\n get tag() {\n return 'sheetView';\n }\n\n prepare(model) {\n switch (model.state) {\n case 'frozen':\n case 'split':\n break;\n default:\n model.state = 'normal';\n break;\n }\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('sheetView', {\n workbookViewId: model.workbookViewId || 0,\n });\n const add = function(name, value, included) {\n if (included) {\n xmlStream.addAttribute(name, value);\n }\n };\n add('rightToLeft', '1', model.rightToLeft === true);\n add('tabSelected', '1', model.tabSelected);\n add('showRuler', '0', model.showRuler === false);\n add('showRowColHeaders', '0', model.showRowColHeaders === false);\n add('showGridLines', '0', model.showGridLines === false);\n add('zoomScale', model.zoomScale, model.zoomScale);\n add('zoomScaleNormal', model.zoomScaleNormal, model.zoomScaleNormal);\n add('view', model.style, model.style);\n\n let topLeftCell;\n let xSplit;\n let ySplit;\n let activePane;\n switch (model.state) {\n case 'frozen':\n xSplit = model.xSplit || 0;\n ySplit = model.ySplit || 0;\n topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address;\n activePane =\n (model.xSplit && model.ySplit && 'bottomRight') ||\n (model.xSplit && 'topRight') ||\n 'bottomLeft';\n\n xmlStream.leafNode('pane', {\n xSplit: model.xSplit || undefined,\n ySplit: model.ySplit || undefined,\n topLeftCell,\n activePane,\n state: 'frozen',\n });\n xmlStream.leafNode('selection', {\n pane: activePane,\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n break;\n case 'split':\n if (model.activePane === 'topLeft') {\n model.activePane = undefined;\n }\n xmlStream.leafNode('pane', {\n xSplit: model.xSplit || undefined,\n ySplit: model.ySplit || undefined,\n topLeftCell: model.topLeftCell,\n activePane: model.activePane,\n });\n xmlStream.leafNode('selection', {\n pane: model.activePane,\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n break;\n case 'normal':\n if (model.activeCell) {\n xmlStream.leafNode('selection', {\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n }\n break;\n default:\n break;\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'sheetView':\n this.sheetView = {\n workbookViewId: parseInt(node.attributes.workbookViewId, 10),\n rightToLeft: node.attributes.rightToLeft === '1',\n tabSelected: node.attributes.tabSelected === '1',\n showRuler: !(node.attributes.showRuler === '0'),\n showRowColHeaders: !(node.attributes.showRowColHeaders === '0'),\n showGridLines: !(node.attributes.showGridLines === '0'),\n zoomScale: parseInt(node.attributes.zoomScale || '100', 10),\n zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || '100', 10),\n style: node.attributes.view,\n };\n this.pane = undefined;\n this.selections = {};\n return true;\n\n case 'pane':\n this.pane = {\n xSplit: parseInt(node.attributes.xSplit || '0', 10),\n ySplit: parseInt(node.attributes.ySplit || '0', 10),\n topLeftCell: node.attributes.topLeftCell,\n activePane: node.attributes.activePane || 'topLeft',\n state: node.attributes.state,\n };\n return true;\n\n case 'selection': {\n const name = node.attributes.pane || 'topLeft';\n this.selections[name] = {\n pane: name,\n activeCell: node.attributes.activeCell,\n };\n return true;\n }\n\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n let model;\n let selection;\n switch (name) {\n case 'sheetView':\n if (this.sheetView && this.pane) {\n model = this.model = {\n workbookViewId: this.sheetView.workbookViewId,\n rightToLeft: this.sheetView.rightToLeft,\n state: VIEW_STATES[this.pane.state] || 'split', // split is default\n xSplit: this.pane.xSplit,\n ySplit: this.pane.ySplit,\n topLeftCell: this.pane.topLeftCell,\n showRuler: this.sheetView.showRuler,\n showRowColHeaders: this.sheetView.showRowColHeaders,\n showGridLines: this.sheetView.showGridLines,\n zoomScale: this.sheetView.zoomScale,\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\n };\n if (this.model.state === 'split') {\n model.activePane = this.pane.activePane;\n }\n selection = this.selections[this.pane.activePane];\n if (selection && selection.activeCell) {\n model.activeCell = selection.activeCell;\n }\n if (this.sheetView.style) {\n model.style = this.sheetView.style;\n }\n } else {\n model = this.model = {\n workbookViewId: this.sheetView.workbookViewId,\n rightToLeft: this.sheetView.rightToLeft,\n state: 'normal',\n showRuler: this.sheetView.showRuler,\n showRowColHeaders: this.sheetView.showRowColHeaders,\n showGridLines: this.sheetView.showGridLines,\n zoomScale: this.sheetView.zoomScale,\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\n };\n selection = this.selections.topLeft;\n if (selection && selection.activeCell) {\n model.activeCell = selection.activeCell;\n }\n if (this.sheetView.style) {\n model.style = this.sheetView.style;\n }\n }\n return false;\n default:\n return true;\n }\n }\n\n reconcile() {}\n}\n\nmodule.exports = SheetViewXform;\n", + "const BaseXform = require('../base-xform');\n\nclass TablePartXform extends BaseXform {\n get tag() {\n return 'tablePart';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TablePartXform;\n", + "const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst RelType = require('../../rel-type');\n\nconst Merges = require('./merges');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\nconst RowXform = require('./row-xform');\nconst ColXform = require('./col-xform');\nconst DimensionXform = require('./dimension-xform');\nconst HyperlinkXform = require('./hyperlink-xform');\nconst MergeCellXform = require('./merge-cell-xform');\nconst DataValidationsXform = require('./data-validations-xform');\nconst SheetPropertiesXform = require('./sheet-properties-xform');\nconst SheetFormatPropertiesXform = require('./sheet-format-properties-xform');\nconst SheetViewXform = require('./sheet-view-xform');\nconst SheetProtectionXform = require('./sheet-protection-xform');\nconst PageMarginsXform = require('./page-margins-xform');\nconst PageSetupXform = require('./page-setup-xform');\nconst PrintOptionsXform = require('./print-options-xform');\nconst AutoFilterXform = require('./auto-filter-xform');\nconst PictureXform = require('./picture-xform');\nconst DrawingXform = require('./drawing-xform');\nconst TablePartXform = require('./table-part-xform');\nconst RowBreaksXform = require('./row-breaks-xform');\nconst HeaderFooterXform = require('./header-footer-xform');\nconst ConditionalFormattingsXform = require('./cf/conditional-formattings-xform');\nconst ExtListXform = require('./ext-lst-xform');\n\nconst mergeRule = (rule, extRule) => {\n Object.keys(extRule).forEach(key => {\n const value = rule[key];\n const extValue = extRule[key];\n if (value === undefined && extValue !== undefined) {\n rule[key] = extValue;\n }\n });\n};\n\nconst mergeConditionalFormattings = (model, extModel) => {\n // conditional formattings are rendered in worksheet.conditionalFormatting and also in\n // worksheet.extLst.ext.x14:conditionalFormattings\n // some (e.g. dataBar) are even spread across both!\n if (!extModel || !extModel.length) {\n return model;\n }\n if (!model || !model.length) {\n return extModel;\n }\n\n // index model rules by x14Id\n const cfMap = {};\n const ruleMap = {};\n model.forEach(cf => {\n cfMap[cf.ref] = cf;\n cf.rules.forEach(rule => {\n const {x14Id} = rule;\n if (x14Id) {\n ruleMap[x14Id] = rule;\n }\n });\n });\n\n extModel.forEach(extCf => {\n extCf.rules.forEach(extRule => {\n const rule = ruleMap[extRule.x14Id];\n if (rule) {\n // merge with matching rule\n mergeRule(rule, extRule);\n } else if (cfMap[extCf.ref]) {\n // reuse existing cf ref\n cfMap[extCf.ref].rules.push(extRule);\n } else {\n // create new cf\n model.push({\n ref: extCf.ref,\n rules: [extRule],\n });\n }\n });\n });\n\n // need to cope with rules in extModel that don't exist in model\n return model;\n};\n\nclass WorkSheetXform extends BaseXform {\n constructor(options) {\n super();\n\n const {maxRows, maxCols, ignoreNodes} = options || {};\n\n this.ignoreNodes = ignoreNodes || [];\n\n this.map = {\n sheetPr: new SheetPropertiesXform(),\n dimension: new DimensionXform(),\n sheetViews: new ListXform({\n tag: 'sheetViews',\n count: false,\n childXform: new SheetViewXform(),\n }),\n sheetFormatPr: new SheetFormatPropertiesXform(),\n cols: new ListXform({tag: 'cols', count: false, childXform: new ColXform()}),\n sheetData: new ListXform({\n tag: 'sheetData',\n count: false,\n empty: true,\n childXform: new RowXform({maxItems: maxCols}),\n maxItems: maxRows,\n }),\n autoFilter: new AutoFilterXform(),\n mergeCells: new ListXform({tag: 'mergeCells', count: true, childXform: new MergeCellXform()}),\n rowBreaks: new RowBreaksXform(),\n hyperlinks: new ListXform({\n tag: 'hyperlinks',\n count: false,\n childXform: new HyperlinkXform(),\n }),\n pageMargins: new PageMarginsXform(),\n dataValidations: new DataValidationsXform(),\n pageSetup: new PageSetupXform(),\n headerFooter: new HeaderFooterXform(),\n printOptions: new PrintOptionsXform(),\n picture: new PictureXform(),\n drawing: new DrawingXform(),\n sheetProtection: new SheetProtectionXform(),\n tableParts: new ListXform({tag: 'tableParts', count: true, childXform: new TablePartXform()}),\n conditionalFormatting: new ConditionalFormattingsXform(),\n extLst: new ExtListXform(),\n };\n }\n\n prepare(model, options) {\n options.merges = new Merges();\n model.hyperlinks = options.hyperlinks = [];\n model.comments = options.comments = [];\n\n options.formulae = {};\n options.siFormulae = 0;\n this.map.cols.prepare(model.cols, options);\n this.map.sheetData.prepare(model.rows, options);\n this.map.conditionalFormatting.prepare(model.conditionalFormattings, options);\n\n model.mergeCells = options.merges.mergeCells;\n\n // prepare relationships\n const rels = (model.rels = []);\n\n function nextRid(r) {\n return `rId${r.length + 1}`;\n }\n\n model.hyperlinks.forEach(hyperlink => {\n const rId = nextRid(rels);\n hyperlink.rId = rId;\n rels.push({\n Id: rId,\n Type: RelType.Hyperlink,\n Target: hyperlink.target,\n TargetMode: 'External',\n });\n });\n\n // prepare comment relationships\n if (model.comments.length > 0) {\n const comment = {\n Id: nextRid(rels),\n Type: RelType.Comments,\n Target: `../comments${model.id}.xml`,\n };\n rels.push(comment);\n const vmlDrawing = {\n Id: nextRid(rels),\n Type: RelType.VmlDrawing,\n Target: `../drawings/vmlDrawing${model.id}.vml`,\n };\n rels.push(vmlDrawing);\n\n model.comments.forEach(item => {\n item.refAddress = colCache.decodeAddress(item.ref);\n });\n\n options.commentRefs.push({\n commentName: `comments${model.id}`,\n vmlDrawing: `vmlDrawing${model.id}`,\n });\n }\n\n const drawingRelsHash = [];\n let bookImage;\n model.media.forEach(medium => {\n if (medium.type === 'background') {\n const rId = nextRid(rels);\n bookImage = options.media[medium.imageId];\n rels.push({\n Id: rId,\n Type: RelType.Image,\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\n });\n model.background = {\n rId,\n };\n model.image = options.media[medium.imageId];\n } else if (medium.type === 'image') {\n let {drawing} = model;\n bookImage = options.media[medium.imageId];\n if (!drawing) {\n drawing = model.drawing = {\n rId: nextRid(rels),\n name: `drawing${++options.drawingsCount}`,\n anchors: [],\n rels: [],\n };\n options.drawings.push(drawing);\n rels.push({\n Id: drawing.rId,\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',\n Target: `../drawings/${drawing.name}.xml`,\n });\n }\n let rIdImage =\n this.preImageId === medium.imageId ? drawingRelsHash[medium.imageId] : drawingRelsHash[drawing.rels.length];\n if (!rIdImage) {\n rIdImage = nextRid(drawing.rels);\n drawingRelsHash[drawing.rels.length] = rIdImage;\n drawing.rels.push({\n Id: rIdImage,\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\n });\n }\n\n const anchor = {\n picture: {\n rId: rIdImage,\n },\n range: medium.range,\n };\n if (medium.hyperlinks && medium.hyperlinks.hyperlink) {\n const rIdHyperLink = nextRid(drawing.rels);\n drawingRelsHash[drawing.rels.length] = rIdHyperLink;\n anchor.picture.hyperlinks = {\n tooltip: medium.hyperlinks.tooltip,\n rId: rIdHyperLink,\n };\n drawing.rels.push({\n Id: rIdHyperLink,\n Type: RelType.Hyperlink,\n Target: medium.hyperlinks.hyperlink,\n TargetMode: 'External',\n });\n }\n this.preImageId = medium.imageId;\n drawing.anchors.push(anchor);\n }\n });\n\n // prepare tables\n model.tables.forEach(table => {\n // relationships\n const rId = nextRid(rels);\n table.rId = rId;\n rels.push({\n Id: rId,\n Type: RelType.Table,\n Target: `../tables/${table.target}`,\n });\n\n // dynamic styles\n table.columns.forEach(column => {\n const {style} = column;\n if (style) {\n column.dxfId = options.styles.addDxfStyle(style);\n }\n });\n });\n\n // prepare ext items\n this.map.extLst.prepare(model, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('worksheet', WorkSheetXform.WORKSHEET_ATTRIBUTES);\n\n const sheetFormatPropertiesModel = model.properties\n ? {\n defaultRowHeight: model.properties.defaultRowHeight,\n dyDescent: model.properties.dyDescent,\n outlineLevelCol: model.properties.outlineLevelCol,\n outlineLevelRow: model.properties.outlineLevelRow,\n }\n : undefined;\n if (model.properties && model.properties.defaultColWidth) {\n sheetFormatPropertiesModel.defaultColWidth = model.properties.defaultColWidth;\n }\n const sheetPropertiesModel = {\n outlineProperties: model.properties && model.properties.outlineProperties,\n tabColor: model.properties && model.properties.tabColor,\n pageSetup:\n model.pageSetup && model.pageSetup.fitToPage\n ? {\n fitToPage: model.pageSetup.fitToPage,\n }\n : undefined,\n };\n const pageMarginsModel = model.pageSetup && model.pageSetup.margins;\n const printOptionsModel = {\n showRowColHeaders: model.pageSetup && model.pageSetup.showRowColHeaders,\n showGridLines: model.pageSetup && model.pageSetup.showGridLines,\n horizontalCentered: model.pageSetup && model.pageSetup.horizontalCentered,\n verticalCentered: model.pageSetup && model.pageSetup.verticalCentered,\n };\n const sheetProtectionModel = model.sheetProtection;\n\n this.map.sheetPr.render(xmlStream, sheetPropertiesModel);\n this.map.dimension.render(xmlStream, model.dimensions);\n this.map.sheetViews.render(xmlStream, model.views);\n this.map.sheetFormatPr.render(xmlStream, sheetFormatPropertiesModel);\n this.map.cols.render(xmlStream, model.cols);\n this.map.sheetData.render(xmlStream, model.rows);\n this.map.sheetProtection.render(xmlStream, sheetProtectionModel); // Note: must be after sheetData and before autoFilter\n this.map.autoFilter.render(xmlStream, model.autoFilter);\n this.map.mergeCells.render(xmlStream, model.mergeCells);\n this.map.conditionalFormatting.render(xmlStream, model.conditionalFormattings); // Note: must be before dataValidations\n this.map.dataValidations.render(xmlStream, model.dataValidations);\n\n // For some reason hyperlinks have to be after the data validations\n this.map.hyperlinks.render(xmlStream, model.hyperlinks);\n\n this.map.printOptions.render(xmlStream, printOptionsModel); // Note: must be before pageMargins\n this.map.pageMargins.render(xmlStream, pageMarginsModel);\n this.map.pageSetup.render(xmlStream, model.pageSetup);\n this.map.headerFooter.render(xmlStream, model.headerFooter);\n this.map.rowBreaks.render(xmlStream, model.rowBreaks);\n this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks\n this.map.picture.render(xmlStream, model.background); // Note: must be after drawing\n this.map.tableParts.render(xmlStream, model.tables);\n\n this.map.extLst.render(xmlStream, model);\n\n if (model.rels) {\n // add a node for each comment\n model.rels.forEach(rel => {\n if (rel.Type === RelType.VmlDrawing) {\n xmlStream.leafNode('legacyDrawing', {'r:id': rel.Id});\n }\n });\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n if (node.name === 'worksheet') {\n _.each(this.map, xform => {\n xform.reset();\n });\n return true;\n }\n\n if (this.map[node.name] && !this.ignoreNodes.includes(node.name)) {\n this.parser = this.map[node.name];\n this.parser.parseOpen(node);\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'worksheet': {\n const properties = this.map.sheetFormatPr.model || {};\n if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) {\n properties.tabColor = this.map.sheetPr.model.tabColor;\n }\n if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) {\n properties.outlineProperties = this.map.sheetPr.model.outlineProperties;\n }\n const sheetProperties = {\n fitToPage:\n (this.map.sheetPr.model &&\n this.map.sheetPr.model.pageSetup &&\n this.map.sheetPr.model.pageSetup.fitToPage) ||\n false,\n margins: this.map.pageMargins.model,\n };\n const pageSetup = Object.assign(sheetProperties, this.map.pageSetup.model, this.map.printOptions.model);\n const conditionalFormattings = mergeConditionalFormattings(\n this.map.conditionalFormatting.model,\n this.map.extLst.model && this.map.extLst.model['x14:conditionalFormattings']\n );\n this.model = {\n dimensions: this.map.dimension.model,\n cols: this.map.cols.model,\n rows: this.map.sheetData.model,\n mergeCells: this.map.mergeCells.model,\n hyperlinks: this.map.hyperlinks.model,\n dataValidations: this.map.dataValidations.model,\n properties,\n views: this.map.sheetViews.model,\n pageSetup,\n headerFooter: this.map.headerFooter.model,\n background: this.map.picture.model,\n drawing: this.map.drawing.model,\n tables: this.map.tableParts.model,\n conditionalFormattings,\n };\n\n if (this.map.autoFilter.model) {\n this.model.autoFilter = this.map.autoFilter.model;\n }\n if (this.map.sheetProtection.model) {\n this.model.sheetProtection = this.map.sheetProtection.model;\n }\n\n return false;\n }\n\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model, options) {\n // options.merges = new Merges();\n // options.merges.reconcile(model.mergeCells, model.rows);\n const rels = (model.relationships || []).reduce((h, rel) => {\n h[rel.Id] = rel;\n if (rel.Type === RelType.Comments) {\n model.comments = options.comments[rel.Target].comments;\n }\n if (rel.Type === RelType.VmlDrawing && model.comments && model.comments.length) {\n const vmlComment = options.vmlDrawings[rel.Target].comments;\n model.comments.forEach((comment, index) => {\n comment.note = Object.assign({}, comment.note, vmlComment[index]);\n });\n }\n return h;\n }, {});\n options.commentsMap = (model.comments || []).reduce((h, comment) => {\n if (comment.ref) {\n h[comment.ref] = comment;\n }\n return h;\n }, {});\n options.hyperlinkMap = (model.hyperlinks || []).reduce((h, hyperlink) => {\n if (hyperlink.rId) {\n h[hyperlink.address] = rels[hyperlink.rId].Target;\n }\n return h;\n }, {});\n options.formulae = {};\n\n // compact the rows and cells\n model.rows = (model.rows && model.rows.filter(Boolean)) || [];\n model.rows.forEach(row => {\n row.cells = (row.cells && row.cells.filter(Boolean)) || [];\n });\n\n this.map.cols.reconcile(model.cols, options);\n this.map.sheetData.reconcile(model.rows, options);\n this.map.conditionalFormatting.reconcile(model.conditionalFormattings, options);\n\n model.media = [];\n if (model.drawing) {\n const drawingRel = rels[model.drawing.rId];\n const match = drawingRel.Target.match(/\\/drawings\\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);\n if (match) {\n const drawingName = match[1];\n const drawing = options.drawings[drawingName];\n drawing.anchors.forEach(anchor => {\n if (anchor.medium) {\n const image = {\n type: 'image',\n imageId: anchor.medium.index,\n range: anchor.range,\n hyperlinks: anchor.picture.hyperlinks,\n };\n model.media.push(image);\n }\n });\n }\n }\n\n const backgroundRel = model.background && rels[model.background.rId];\n if (backgroundRel) {\n const target = backgroundRel.Target.split('/media/')[1];\n const imageId = options.mediaIndex && options.mediaIndex[target];\n if (imageId !== undefined) {\n model.media.push({\n type: 'background',\n imageId,\n });\n }\n }\n\n model.tables = (model.tables || []).map(tablePart => {\n const rel = rels[tablePart.rId];\n return options.tables[rel.Target];\n });\n\n delete model.relationships;\n delete model.hyperlinks;\n delete model.comments;\n }\n}\n\nWorkSheetXform.WORKSHEET_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x14ac',\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\n};\n\nmodule.exports = WorkSheetXform;\n", + "const BaseXform = require('../base-xform');\n\nclass BooleanXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.tag);\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = BooleanXform;\n", + "const BaseXform = require('../base-xform');\n\nclass DateXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n this._format =\n options.format ||\n function(dt) {\n try {\n if (Number.isNaN(dt.getTime())) return '';\n return dt.toISOString();\n } catch (e) {\n return '';\n }\n };\n this._parse =\n options.parse ||\n function(str) {\n return new Date(str);\n };\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, this._format(model));\n } else {\n xmlStream.writeText(this._format(model));\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = this._parse(node.attributes[this.attr]);\n } else {\n this.text = [];\n }\n }\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = this._parse(this.text.join(''));\n }\n return false;\n }\n}\n\nmodule.exports = DateXform;\n", + "const BaseXform = require('../base-xform');\n\nclass IntegerXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n\n // option to render zero\n this.zero = options.zero;\n }\n\n render(xmlStream, model) {\n // int is different to float in that zero is not rendered\n if (model || this.zero) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, model);\n } else {\n xmlStream.writeText(model);\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = parseInt(node.attributes[this.attr], 10);\n } else {\n this.text = [];\n }\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = parseInt(this.text.join('') || 0, 10);\n }\n return false;\n }\n}\n\nmodule.exports = IntegerXform;\n", + "const BaseXform = require('../base-xform');\n\nclass StringXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n }\n\n render(xmlStream, model) {\n if (model !== undefined) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, model);\n } else {\n xmlStream.writeText(model);\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = node.attributes[this.attr];\n } else {\n this.text = [];\n }\n }\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = this.text.join('');\n }\n return false;\n }\n}\n\nmodule.exports = StringXform;\n", + "const BaseXform = require('./base-xform');\nconst XmlStream = require('../../utils/xml-stream');\n\n// const model = {\n// tag: 'name',\n// $: {attr: 'value'},\n// c: [\n// { tag: 'child' }\n// ],\n// t: 'some text'\n// };\n\nfunction build(xmlStream, model) {\n xmlStream.openNode(model.tag, model.$);\n if (model.c) {\n model.c.forEach(child => {\n build(xmlStream, child);\n });\n }\n if (model.t) {\n xmlStream.writeText(model.t);\n }\n xmlStream.closeNode();\n}\n\nclass StaticXform extends BaseXform {\n constructor(model) {\n super();\n\n // This class is an optimisation for static (unimportant and unchanging) xml\n // It is stateless - apart from its static model and so can be used as a singleton\n // Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else\n // Known issues:\n // since stateless - parseOpen always returns true. Parent xform must know when to start using this xform\n // if the root tag is recursive, the parsing will behave unpredictably\n this._model = model;\n }\n\n render(xmlStream) {\n if (!this._xml) {\n const stream = new XmlStream();\n build(stream, this._model);\n this._xml = stream.xml;\n }\n xmlStream.writeXml(this._xml);\n }\n\n parseOpen() {\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this._model.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = StaticXform;\n", + "const TextXform = require('./text-xform');\nconst RichTextXform = require('./rich-text-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// (its pronounciation in KATAKANA)\n// \n\nclass PhoneticTextXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n r: new RichTextXform(),\n t: new TextXform(),\n };\n }\n\n get tag() {\n return 'rPh';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n sb: model.sb || 0,\n eb: model.eb || 0,\n });\n if (model && model.hasOwnProperty('richText') && model.richText) {\n const {r} = this.map;\n model.richText.forEach(text => {\n r.render(xmlStream, text);\n });\n } else if (model) {\n this.map.t.render(xmlStream, model.text);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n const {name} = node;\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (name === this.tag) {\n this.model = {\n sb: parseInt(node.attributes.sb, 10),\n eb: parseInt(node.attributes.eb, 10),\n };\n return true;\n }\n this.parser = this.map[name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n switch (name) {\n case 'r': {\n let rt = this.model.richText;\n if (!rt) {\n rt = this.model.richText = [];\n }\n rt.push(this.parser.model);\n break;\n }\n case 't':\n this.model.text = this.parser.model;\n break;\n default:\n break;\n }\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = PhoneticTextXform;\n", + "const TextXform = require('./text-xform');\nconst FontXform = require('../style/font-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// \n// \n// \n// \n// \n// \n// \n// is \n// \n\nclass RichTextXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n }\n\n get tag() {\n return 'r';\n }\n\n get textXform() {\n return this._textXform || (this._textXform = new TextXform());\n }\n\n get fontXform() {\n return this._fontXform || (this._fontXform = new FontXform(RichTextXform.FONT_OPTIONS));\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n\n xmlStream.openNode('r');\n if (model.font) {\n this.fontXform.render(xmlStream, model.font);\n }\n this.textXform.render(xmlStream, model.text);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'r':\n this.model = {};\n return true;\n case 't':\n this.parser = this.textXform;\n this.parser.parseOpen(node);\n return true;\n case 'rPr':\n this.parser = this.fontXform;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'r':\n return false;\n case 't':\n this.model.text = this.parser.model;\n this.parser = undefined;\n return true;\n case 'rPr':\n this.model.font = this.parser.model;\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n }\n}\n\nRichTextXform.FONT_OPTIONS = {\n tagName: 'rPr',\n fontNameTag: 'rFont',\n};\n\nmodule.exports = RichTextXform;\n", + "const TextXform = require('./text-xform');\nconst RichTextXform = require('./rich-text-xform');\nconst PhoneticTextXform = require('./phonetic-text-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// ...\n// \n// \n// \n// \n\nclass SharedStringXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n\n this.map = {\n r: new RichTextXform(),\n t: new TextXform(),\n rPh: new PhoneticTextXform(),\n };\n }\n\n get tag() {\n return 'si';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n if (model && model.hasOwnProperty('richText') && model.richText) {\n if (model.richText.length) {\n model.richText.forEach(text => {\n this.map.r.render(xmlStream, text);\n });\n } else {\n this.map.t.render(xmlStream, '');\n }\n } else if (model !== undefined && model !== null) {\n this.map.t.render(xmlStream, model);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n const {name} = node;\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (name === this.tag) {\n this.model = {};\n return true;\n }\n this.parser = this.map[name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n switch (name) {\n case 'r': {\n let rt = this.model.richText;\n if (!rt) {\n rt = this.model.richText = [];\n }\n rt.push(this.parser.model);\n break;\n }\n case 't':\n this.model = this.parser.model;\n break;\n default:\n break;\n }\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = SharedStringXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst SharedStringXform = require('./shared-string-xform');\n\nclass SharedStringsXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model || {\n values: [],\n count: 0,\n };\n this.hash = Object.create(null);\n this.rich = Object.create(null);\n }\n\n get sharedStringXform() {\n return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform());\n }\n\n get values() {\n return this.model.values;\n }\n\n get uniqueCount() {\n return this.model.values.length;\n }\n\n get count() {\n return this.model.count;\n }\n\n getString(index) {\n return this.model.values[index];\n }\n\n add(value) {\n return value.richText ? this.addRichText(value) : this.addText(value);\n }\n\n addText(value) {\n let index = this.hash[value];\n if (index === undefined) {\n index = this.hash[value] = this.model.values.length;\n this.model.values.push(value);\n }\n this.model.count++;\n return index;\n }\n\n addRichText(value) {\n // TODO: add WeakMap here\n const xml = this.sharedStringXform.toXml(value);\n let index = this.rich[xml];\n if (index === undefined) {\n index = this.rich[xml] = this.model.values.length;\n this.model.values.push(value);\n }\n this.model.count++;\n return index;\n }\n\n // \n // \" uniqueCount=\"<%=count%>\">\n // <%=text%>\n // \n // \n\n render(xmlStream, model) {\n model = model || this._values;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('sst', {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n count: model.count,\n uniqueCount: model.values.length,\n });\n\n const sx = this.sharedStringXform;\n model.values.forEach(sharedString => {\n sx.render(xmlStream, sharedString);\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'sst':\n return true;\n case 'si':\n this.parser = this.sharedStringXform;\n this.parser.parseOpen(node);\n return true;\n default:\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.values.push(this.parser.model);\n this.model.count++;\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'sst':\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nmodule.exports = SharedStringsXform;\n", + "const BaseXform = require('../base-xform');\n\n// is \n\nclass TextXform extends BaseXform {\n get tag() {\n return 't';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('t');\n if (/^\\s|\\n|\\s$/.test(model)) {\n xmlStream.addAttribute('xml:space', 'preserve');\n }\n xmlStream.writeText(model);\n xmlStream.closeNode();\n }\n\n get model() {\n return this._text\n .join('')\n .replace(/_x([0-9A-F]{4})_/g, ($0, $1) => String.fromCharCode(parseInt($1, 16)));\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 't':\n this._text = [];\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this._text.push(text);\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TextXform;\n", + "const Enums = require('../../../doc/enums');\n\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nconst validation = {\n horizontalValues: [\n 'left',\n 'center',\n 'right',\n 'fill',\n 'centerContinuous',\n 'distributed',\n 'justify',\n ].reduce((p, v) => {\n p[v] = true;\n return p;\n }, {}),\n horizontal(value) {\n return this.horizontalValues[value] ? value : undefined;\n },\n\n verticalValues: ['top', 'middle', 'bottom', 'distributed', 'justify'].reduce((p, v) => {\n p[v] = true;\n return p;\n }, {}),\n vertical(value) {\n if (value === 'middle') return 'center';\n return this.verticalValues[value] ? value : undefined;\n },\n wrapText(value) {\n return value ? true : undefined;\n },\n shrinkToFit(value) {\n return value ? true : undefined;\n },\n textRotation(value) {\n switch (value) {\n case 'vertical':\n return value;\n default:\n value = utils.validInt(value);\n return value >= -90 && value <= 90 ? value : undefined;\n }\n },\n indent(value) {\n value = utils.validInt(value);\n return Math.max(0, value);\n },\n readingOrder(value) {\n switch (value) {\n case 'ltr':\n return Enums.ReadingOrder.LeftToRight;\n case 'rtl':\n return Enums.ReadingOrder.RightToLeft;\n default:\n return undefined;\n }\n },\n};\n\nconst textRotationXform = {\n toXml(textRotation) {\n textRotation = validation.textRotation(textRotation);\n if (textRotation) {\n if (textRotation === 'vertical') {\n return 255;\n }\n\n const tr = Math.round(textRotation);\n if (tr >= 0 && tr <= 90) {\n return tr;\n }\n\n if (tr < 0 && tr >= -90) {\n return 90 - tr;\n }\n }\n return undefined;\n },\n toModel(textRotation) {\n const tr = utils.validInt(textRotation);\n if (tr !== undefined) {\n if (tr === 255) {\n return 'vertical';\n }\n if (tr >= 0 && tr <= 90) {\n return tr;\n }\n if (tr > 90 && tr <= 180) {\n return 90 - tr;\n }\n }\n return undefined;\n },\n};\n\n// Alignment encapsulates translation from style.alignment model to/from xlsx\nclass AlignmentXform extends BaseXform {\n get tag() {\n return 'alignment';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('alignment');\n\n let isValid = false;\n function add(name, value) {\n if (value) {\n xmlStream.addAttribute(name, value);\n isValid = true;\n }\n }\n add('horizontal', validation.horizontal(model.horizontal));\n add('vertical', validation.vertical(model.vertical));\n add('wrapText', validation.wrapText(model.wrapText) ? '1' : false);\n add('shrinkToFit', validation.shrinkToFit(model.shrinkToFit) ? '1' : false);\n add('indent', validation.indent(model.indent));\n add('textRotation', textRotationXform.toXml(model.textRotation));\n add('readingOrder', validation.readingOrder(model.readingOrder));\n\n xmlStream.closeNode();\n\n if (isValid) {\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n\n parseOpen(node) {\n const model = {};\n\n let valid = false;\n function add(truthy, name, value) {\n if (truthy) {\n model[name] = value;\n valid = true;\n }\n }\n add(node.attributes.horizontal, 'horizontal', node.attributes.horizontal);\n add(\n node.attributes.vertical,\n 'vertical',\n node.attributes.vertical === 'center' ? 'middle' : node.attributes.vertical\n );\n add(node.attributes.wrapText, 'wrapText', utils.parseBoolean(node.attributes.wrapText));\n add(node.attributes.shrinkToFit, 'shrinkToFit', utils.parseBoolean(node.attributes.shrinkToFit));\n add(node.attributes.indent, 'indent', parseInt(node.attributes.indent, 10));\n add(\n node.attributes.textRotation,\n 'textRotation',\n textRotationXform.toModel(node.attributes.textRotation)\n );\n add(\n node.attributes.readingOrder,\n 'readingOrder',\n node.attributes.readingOrder === '2' ? 'rtl' : 'ltr'\n );\n\n this.model = valid ? model : null;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = AlignmentXform;\n", + "/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../base-xform');\nconst utils = require('../../../utils/utils');\n\nconst ColorXform = require('./color-xform');\n\nclass EdgeXform extends BaseXform {\n constructor(name) {\n super();\n\n this.name = name;\n this.map = {\n color: new ColorXform(),\n };\n }\n\n get tag() {\n return this.name;\n }\n\n render(xmlStream, model, defaultColor) {\n const color = (model && model.color) || defaultColor || this.defaultColor;\n xmlStream.openNode(this.name);\n if (model && model.style) {\n xmlStream.addAttribute('style', model.style);\n if (color) {\n this.map.color.render(xmlStream, color);\n }\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.name: {\n const {style} = node.attributes;\n if (style) {\n this.model = {\n style,\n };\n } else {\n this.model = undefined;\n }\n return true;\n }\n case 'color':\n this.parser = this.map.color;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n\n if (name === this.name) {\n if (this.map.color.model) {\n if (!this.model) {\n this.model = {};\n }\n this.model.color = this.map.color.model;\n }\n }\n\n return false;\n }\n\n validStyle(value) {\n return EdgeXform.validStyleValues[value];\n }\n}\n\nEdgeXform.validStyleValues = [\n 'thin',\n 'dashed',\n 'dotted',\n 'dashDot',\n 'hair',\n 'dashDotDot',\n 'slantDashDot',\n 'mediumDashed',\n 'mediumDashDotDot',\n 'mediumDashDot',\n 'medium',\n 'double',\n 'thick',\n].reduce((p, v) => {\n p[v] = true;\n return p;\n}, {});\n\n// Border encapsulates translation from border model to/from xlsx\nclass BorderXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n top: new EdgeXform('top'),\n left: new EdgeXform('left'),\n bottom: new EdgeXform('bottom'),\n right: new EdgeXform('right'),\n diagonal: new EdgeXform('diagonal'),\n };\n }\n\n render(xmlStream, model) {\n const {color} = model;\n xmlStream.openNode('border');\n if (model.diagonal && model.diagonal.style) {\n if (model.diagonal.up) {\n xmlStream.addAttribute('diagonalUp', '1');\n }\n if (model.diagonal.down) {\n xmlStream.addAttribute('diagonalDown', '1');\n }\n }\n function add(edgeModel, edgeXform) {\n if (edgeModel && !edgeModel.color && model.color) {\n // don't mess with incoming models\n edgeModel = {\n ...edgeModel,\n color: model.color,\n };\n }\n edgeXform.render(xmlStream, edgeModel, color);\n }\n add(model.left, this.map.left);\n add(model.right, this.map.right);\n add(model.top, this.map.top);\n add(model.bottom, this.map.bottom);\n add(model.diagonal, this.map.diagonal);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'border':\n this.reset();\n this.diagonalUp = utils.parseBoolean(node.attributes.diagonalUp);\n this.diagonalDown = utils.parseBoolean(node.attributes.diagonalDown);\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (name === 'border') {\n const model = (this.model = {});\n const add = function(key, edgeModel, extensions) {\n if (edgeModel) {\n if (extensions) {\n Object.assign(edgeModel, extensions);\n }\n model[key] = edgeModel;\n }\n };\n add('left', this.map.left.model);\n add('right', this.map.right.model);\n add('top', this.map.top.model);\n add('bottom', this.map.bottom.model);\n add('diagonal', this.map.diagonal.model, {up: this.diagonalUp, down: this.diagonalDown});\n }\n return false;\n }\n}\n\nmodule.exports = BorderXform;\n", + "const BaseXform = require('../base-xform');\n\n// Color encapsulates translation from color model to/from xlsx\nclass ColorXform extends BaseXform {\n constructor(name) {\n super();\n\n // this.name controls the xm node name\n this.name = name || 'color';\n }\n\n get tag() {\n return this.name;\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.name);\n if (model.argb) {\n xmlStream.addAttribute('rgb', model.argb);\n } else if (model.theme !== undefined) {\n xmlStream.addAttribute('theme', model.theme);\n if (model.tint !== undefined) {\n xmlStream.addAttribute('tint', model.tint);\n }\n } else if (model.indexed !== undefined) {\n xmlStream.addAttribute('indexed', model.indexed);\n } else {\n xmlStream.addAttribute('auto', '1');\n }\n xmlStream.closeNode();\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.name) {\n if (node.attributes.rgb) {\n this.model = {argb: node.attributes.rgb};\n } else if (node.attributes.theme) {\n this.model = {theme: parseInt(node.attributes.theme, 10)};\n if (node.attributes.tint) {\n this.model.tint = parseFloat(node.attributes.tint);\n }\n } else if (node.attributes.indexed) {\n this.model = {indexed: parseInt(node.attributes.indexed, 10)};\n } else {\n this.model = undefined;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = ColorXform;\n", + "const BaseXform = require('../base-xform');\n\nconst AlignmentXform = require('./alignment-xform');\nconst BorderXform = require('./border-xform');\nconst FillXform = require('./fill-xform');\nconst FontXform = require('./font-xform');\nconst NumFmtXform = require('./numfmt-xform');\nconst ProtectionXform = require('./protection-xform');\n\n// \n// Optional \n// Optional \n// \n\n// Style assists translation from style model to/from xlsx\nclass DxfXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n alignment: new AlignmentXform(),\n border: new BorderXform(),\n fill: new FillXform(),\n font: new FontXform(),\n numFmt: new NumFmtXform(),\n protection: new ProtectionXform(),\n };\n }\n\n get tag() {\n return 'dxf';\n }\n\n // how do we generate dxfid?\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n if (model.font) {\n this.map.font.render(xmlStream, model.font);\n }\n if (model.numFmt && model.numFmtId) {\n const numFmtModel = {id: model.numFmtId, formatCode: model.numFmt};\n this.map.numFmt.render(xmlStream, numFmtModel);\n }\n if (model.fill) {\n this.map.fill.render(xmlStream, model.fill);\n }\n if (model.alignment) {\n this.map.alignment.render(xmlStream, model.alignment);\n }\n if (model.border) {\n this.map.border.render(xmlStream, model.border);\n }\n if (model.protection) {\n this.map.protection.render(xmlStream, model.protection);\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n // this node is often repeated. Need to reset children\n this.reset();\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (name === this.tag) {\n this.model = {\n alignment: this.map.alignment.model,\n border: this.map.border.model,\n fill: this.map.fill.model,\n font: this.map.font.model,\n numFmt: this.map.numFmt.model,\n protection: this.map.protection.model,\n };\n return false;\n }\n\n return true;\n }\n}\n\nmodule.exports = DxfXform;\n", + "/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../base-xform');\n\nconst ColorXform = require('./color-xform');\n\nclass StopXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n color: new ColorXform(),\n };\n }\n\n get tag() {\n return 'stop';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('stop');\n xmlStream.addAttribute('position', model.position);\n this.map.color.render(xmlStream, model.color);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'stop':\n this.model = {\n position: parseFloat(node.attributes.position),\n };\n return true;\n case 'color':\n this.parser = this.map.color;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.color = this.parser.model;\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\nclass PatternFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fgColor: new ColorXform('fgColor'),\n bgColor: new ColorXform('bgColor'),\n };\n }\n\n get name() {\n return 'pattern';\n }\n\n get tag() {\n return 'patternFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('patternFill');\n xmlStream.addAttribute('patternType', model.pattern);\n if (model.fgColor) {\n this.map.fgColor.render(xmlStream, model.fgColor);\n }\n if (model.bgColor) {\n this.map.bgColor.render(xmlStream, model.bgColor);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'patternFill':\n this.model = {\n type: 'pattern',\n pattern: node.attributes.patternType,\n };\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n if (this.parser.model) {\n this.model[name] = this.parser.model;\n }\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\nclass GradientFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n stop: new StopXform(),\n };\n // if (model) {\n // this.gradient = model.gradient;\n // if (model.center) {\n // this.center = model.center;\n // }\n // if (model.degree !== undefined) {\n // this.degree = model.degree;\n // }\n // this.stops = model.stops.map(function(stop) { return new StopXform(stop); });\n // } else {\n // this.stops = [];\n // }\n }\n\n get name() {\n return 'gradient';\n }\n\n get tag() {\n return 'gradientFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('gradientFill');\n switch (model.gradient) {\n case 'angle':\n xmlStream.addAttribute('degree', model.degree);\n break;\n case 'path':\n xmlStream.addAttribute('type', 'path');\n if (model.center.left) {\n xmlStream.addAttribute('left', model.center.left);\n if (model.center.right === undefined) {\n xmlStream.addAttribute('right', model.center.left);\n }\n }\n if (model.center.right) {\n xmlStream.addAttribute('right', model.center.right);\n }\n if (model.center.top) {\n xmlStream.addAttribute('top', model.center.top);\n if (model.center.bottom === undefined) {\n xmlStream.addAttribute('bottom', model.center.top);\n }\n }\n if (model.center.bottom) {\n xmlStream.addAttribute('bottom', model.center.bottom);\n }\n break;\n\n default:\n break;\n }\n\n const stopXform = this.map.stop;\n model.stops.forEach(stopModel => {\n stopXform.render(xmlStream, stopModel);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'gradientFill': {\n const model = (this.model = {\n stops: [],\n });\n if (node.attributes.degree) {\n model.gradient = 'angle';\n model.degree = parseInt(node.attributes.degree, 10);\n } else if (node.attributes.type === 'path') {\n model.gradient = 'path';\n model.center = {\n left: node.attributes.left ? parseFloat(node.attributes.left) : 0,\n top: node.attributes.top ? parseFloat(node.attributes.top) : 0,\n };\n if (node.attributes.right !== node.attributes.left) {\n model.center.right = node.attributes.right ? parseFloat(node.attributes.right) : 0;\n }\n if (node.attributes.bottom !== node.attributes.top) {\n model.center.bottom = node.attributes.bottom ? parseFloat(node.attributes.bottom) : 0;\n }\n }\n return true;\n }\n\n case 'stop':\n this.parser = this.map.stop;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.stops.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\n// Fill encapsulates translation from fill model to/from xlsx\nclass FillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n patternFill: new PatternFillXform(),\n gradientFill: new GradientFillXform(),\n };\n }\n\n get tag() {\n return 'fill';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('fill');\n switch (model.type) {\n case 'pattern':\n this.map.patternFill.render(xmlStream, model);\n break;\n case 'gradient':\n this.map.gradientFill.render(xmlStream, model);\n break;\n default:\n xmlStream.rollback();\n return;\n }\n xmlStream.closeNode();\n xmlStream.commit();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'fill':\n this.model = {};\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model = this.parser.model;\n this.model.type = this.parser.name;\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n\n validStyle(value) {\n return FillXform.validPatternValues[value];\n }\n}\n\nFillXform.validPatternValues = [\n 'none',\n 'solid',\n 'darkVertical',\n 'darkGray',\n 'mediumGray',\n 'lightGray',\n 'gray125',\n 'gray0625',\n 'darkHorizontal',\n 'darkVertical',\n 'darkDown',\n 'darkUp',\n 'darkGrid',\n 'darkTrellis',\n 'lightHorizontal',\n 'lightVertical',\n 'lightDown',\n 'lightUp',\n 'lightGrid',\n 'lightTrellis',\n 'lightGrid',\n].reduce((p, v) => {\n p[v] = true;\n return p;\n}, {});\n\nFillXform.StopXform = StopXform;\nFillXform.PatternFillXform = PatternFillXform;\nFillXform.GradientFillXform = GradientFillXform;\n\nmodule.exports = FillXform;\n", + "'use strict';\n\nconst ColorXform = require('./color-xform');\nconst BooleanXform = require('../simple/boolean-xform');\nconst IntegerXform = require('../simple/integer-xform');\nconst StringXform = require('../simple/string-xform');\nconst UnderlineXform = require('./underline-xform');\n\nconst _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\n// Font encapsulates translation from font model to xlsx\nclass FontXform extends BaseXform {\n constructor(options) {\n super();\n\n this.options = options || FontXform.OPTIONS;\n\n this.map = {\n b: {prop: 'bold', xform: new BooleanXform({tag: 'b', attr: 'val'})},\n i: {prop: 'italic', xform: new BooleanXform({tag: 'i', attr: 'val'})},\n u: {prop: 'underline', xform: new UnderlineXform()},\n charset: {prop: 'charset', xform: new IntegerXform({tag: 'charset', attr: 'val'})},\n color: {prop: 'color', xform: new ColorXform()},\n condense: {prop: 'condense', xform: new BooleanXform({tag: 'condense', attr: 'val'})},\n extend: {prop: 'extend', xform: new BooleanXform({tag: 'extend', attr: 'val'})},\n family: {prop: 'family', xform: new IntegerXform({tag: 'family', attr: 'val'})},\n outline: {prop: 'outline', xform: new BooleanXform({tag: 'outline', attr: 'val'})},\n vertAlign: {prop: 'vertAlign', xform: new StringXform({tag: 'vertAlign', attr: 'val'})},\n scheme: {prop: 'scheme', xform: new StringXform({tag: 'scheme', attr: 'val'})},\n shadow: {prop: 'shadow', xform: new BooleanXform({tag: 'shadow', attr: 'val'})},\n strike: {prop: 'strike', xform: new BooleanXform({tag: 'strike', attr: 'val'})},\n sz: {prop: 'size', xform: new IntegerXform({tag: 'sz', attr: 'val'})},\n };\n this.map[this.options.fontNameTag] = {\n prop: 'name',\n xform: new StringXform({tag: this.options.fontNameTag, attr: 'val'}),\n };\n }\n\n get tag() {\n return this.options.tagName;\n }\n\n render(xmlStream, model) {\n const {map} = this;\n\n xmlStream.openNode(this.options.tagName);\n _.each(this.map, (defn, tag) => {\n map[tag].xform.render(xmlStream, model[defn.prop]);\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (this.map[node.name]) {\n this.parser = this.map[node.name].xform;\n return this.parser.parseOpen(node);\n }\n switch (node.name) {\n case this.options.tagName:\n this.model = {};\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser && !this.parser.parseClose(name)) {\n const item = this.map[name];\n if (this.parser.model) {\n this.model[item.prop] = this.parser.model;\n }\n this.parser = undefined;\n return true;\n }\n switch (name) {\n case this.options.tagName:\n return false;\n default:\n return true;\n }\n }\n}\n\nFontXform.OPTIONS = {\n tagName: 'font',\n fontNameTag: 'name',\n};\n\nmodule.exports = FontXform;\n", + "const _ = require('../../../utils/under-dash');\nconst defaultNumFormats = require('../../defaultnumformats');\n\nconst BaseXform = require('../base-xform');\n\nfunction hashDefaultFormats() {\n const hash = {};\n _.each(defaultNumFormats, (dnf, id) => {\n if (dnf.f) {\n hash[dnf.f] = parseInt(id, 10);\n }\n // at some point, add the other cultures here...\n });\n return hash;\n}\nconst defaultFmtHash = hashDefaultFormats();\n\n// NumFmt encapsulates translation between number format and xlsx\nclass NumFmtXform extends BaseXform {\n constructor(id, formatCode) {\n super();\n\n this.id = id;\n this.formatCode = formatCode;\n }\n\n get tag() {\n return 'numFmt';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('numFmt', {numFmtId: model.id, formatCode: model.formatCode});\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'numFmt':\n this.model = {\n id: parseInt(node.attributes.numFmtId, 10),\n formatCode: node.attributes.formatCode.replace(/[\\\\](.)/g, '$1'),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nNumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) {\n return defaultFmtHash[formatCode];\n};\n\nNumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) {\n return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f;\n};\n\nmodule.exports = NumFmtXform;\n", + "const BaseXform = require('../base-xform');\n\nconst validation = {\n boolean(value, dflt) {\n if (value === undefined) {\n return dflt;\n }\n return value;\n },\n};\n\n// Protection encapsulates translation from style.protection model to/from xlsx\nclass ProtectionXform extends BaseXform {\n get tag() {\n return 'protection';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('protection');\n\n let isValid = false;\n function add(name, value) {\n if (value !== undefined) {\n xmlStream.addAttribute(name, value);\n isValid = true;\n }\n }\n add('locked', validation.boolean(model.locked, true) ? undefined : '0');\n add('hidden', validation.boolean(model.hidden, false) ? '1' : undefined);\n\n xmlStream.closeNode();\n\n if (isValid) {\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n\n parseOpen(node) {\n const model = {\n locked: !(node.attributes.locked === '0'),\n hidden: node.attributes.hidden === '1',\n };\n\n // only want to record models that differ from defaults\n const isSignificant = !model.locked || model.hidden;\n\n this.model = isSignificant ? model : null;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = ProtectionXform;\n", + "const BaseXform = require('../base-xform');\n\nconst AlignmentXform = require('./alignment-xform');\nconst ProtectionXform = require('./protection-xform');\n\n// \n// Optional \n// Optional \n// \n\n// Style assists translation from style model to/from xlsx\nclass StyleXform extends BaseXform {\n constructor(options) {\n super();\n\n this.xfId = !!(options && options.xfId);\n this.map = {\n alignment: new AlignmentXform(),\n protection: new ProtectionXform(),\n };\n }\n\n get tag() {\n return 'xf';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('xf', {\n numFmtId: model.numFmtId || 0,\n fontId: model.fontId || 0,\n fillId: model.fillId || 0,\n borderId: model.borderId || 0,\n });\n if (this.xfId) {\n xmlStream.addAttribute('xfId', model.xfId || 0);\n }\n\n if (model.numFmtId) {\n xmlStream.addAttribute('applyNumberFormat', '1');\n }\n if (model.fontId) {\n xmlStream.addAttribute('applyFont', '1');\n }\n if (model.fillId) {\n xmlStream.addAttribute('applyFill', '1');\n }\n if (model.borderId) {\n xmlStream.addAttribute('applyBorder', '1');\n }\n if (model.alignment) {\n xmlStream.addAttribute('applyAlignment', '1');\n }\n if (model.protection) {\n xmlStream.addAttribute('applyProtection', '1');\n }\n\n /**\n * Rendering tags causes close of XML stream.\n * Therefore adding attributes must be done before rendering tags.\n */\n\n if (model.alignment) {\n this.map.alignment.render(xmlStream, model.alignment);\n }\n if (model.protection) {\n this.map.protection.render(xmlStream, model.protection);\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n // used during sax parsing of xml to build font object\n switch (node.name) {\n case 'xf':\n this.model = {\n numFmtId: parseInt(node.attributes.numFmtId, 10),\n fontId: parseInt(node.attributes.fontId, 10),\n fillId: parseInt(node.attributes.fillId, 10),\n borderId: parseInt(node.attributes.borderId, 10),\n };\n if (this.xfId) {\n this.model.xfId = parseInt(node.attributes.xfId, 10);\n }\n return true;\n case 'alignment':\n this.parser = this.map.alignment;\n this.parser.parseOpen(node);\n return true;\n case 'protection':\n this.parser = this.map.protection;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n if (this.map.protection === this.parser) {\n this.model.protection = this.parser.model;\n } else {\n this.model.alignment = this.parser.model;\n }\n this.parser = undefined;\n }\n return true;\n }\n return name !== 'xf';\n }\n}\n\nmodule.exports = StyleXform;\n", + "/* eslint-disable max-classes-per-file */\nconst Enums = require('../../../doc/enums');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst FontXform = require('./font-xform');\nconst FillXform = require('./fill-xform');\nconst BorderXform = require('./border-xform');\nconst NumFmtXform = require('./numfmt-xform');\nconst StyleXform = require('./style-xform');\nconst DxfXform = require('./dxf-xform');\n\n// custom numfmt ids start here\nconst NUMFMT_BASE = 164;\n\n// =============================================================================\n// StylesXform is used to generate and parse the styles.xml file\n// it manages the collections of fonts, number formats, alignments, etc\nclass StylesXform extends BaseXform {\n constructor(initialise) {\n super();\n\n this.map = {\n numFmts: new ListXform({tag: 'numFmts', count: true, childXform: new NumFmtXform()}),\n fonts: new ListXform({\n tag: 'fonts',\n count: true,\n childXform: new FontXform(),\n $: {'x14ac:knownFonts': 1},\n }),\n fills: new ListXform({tag: 'fills', count: true, childXform: new FillXform()}),\n borders: new ListXform({tag: 'borders', count: true, childXform: new BorderXform()}),\n cellStyleXfs: new ListXform({tag: 'cellStyleXfs', count: true, childXform: new StyleXform()}),\n cellXfs: new ListXform({\n tag: 'cellXfs',\n count: true,\n childXform: new StyleXform({xfId: true}),\n }),\n dxfs: new ListXform({tag: 'dxfs', always: true, count: true, childXform: new DxfXform()}),\n\n // for style manager\n numFmt: new NumFmtXform(),\n font: new FontXform(),\n fill: new FillXform(),\n border: new BorderXform(),\n style: new StyleXform({xfId: true}),\n\n cellStyles: StylesXform.STATIC_XFORMS.cellStyles,\n tableStyles: StylesXform.STATIC_XFORMS.tableStyles,\n extLst: StylesXform.STATIC_XFORMS.extLst,\n };\n\n if (initialise) {\n // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing\n this.init();\n }\n }\n\n initIndex() {\n this.index = {\n style: {},\n numFmt: {},\n numFmtNextId: 164, // start custom format ids here\n font: {},\n border: {},\n fill: {},\n };\n }\n\n init() {\n // Prepare for Style Manager role\n this.model = {\n styles: [],\n numFmts: [],\n fonts: [],\n borders: [],\n fills: [],\n dxfs: [],\n };\n\n this.initIndex();\n\n // default (zero) border\n this._addBorder({});\n\n // add default (all zero) style\n this._addStyle({numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0});\n\n // add default fills\n this._addFill({type: 'pattern', pattern: 'none'});\n this._addFill({type: 'pattern', pattern: 'gray125'});\n\n this.weakMap = new WeakMap();\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n //\n // \n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES);\n\n if (this.index) {\n // model has been built by style manager role (contains xml)\n if (model.numFmts && model.numFmts.length) {\n xmlStream.openNode('numFmts', {count: model.numFmts.length});\n model.numFmts.forEach(numFmtXml => {\n xmlStream.writeXml(numFmtXml);\n });\n xmlStream.closeNode();\n }\n\n if (!model.fonts.length) {\n // default (zero) font\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\n }\n xmlStream.openNode('fonts', {count: model.fonts.length, 'x14ac:knownFonts': 1});\n model.fonts.forEach(fontXml => {\n xmlStream.writeXml(fontXml);\n });\n xmlStream.closeNode();\n\n xmlStream.openNode('fills', {count: model.fills.length});\n model.fills.forEach(fillXml => {\n xmlStream.writeXml(fillXml);\n });\n xmlStream.closeNode();\n\n xmlStream.openNode('borders', {count: model.borders.length});\n model.borders.forEach(borderXml => {\n xmlStream.writeXml(borderXml);\n });\n xmlStream.closeNode();\n\n this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);\n\n xmlStream.openNode('cellXfs', {count: model.styles.length});\n model.styles.forEach(styleXml => {\n xmlStream.writeXml(styleXml);\n });\n xmlStream.closeNode();\n } else {\n // model is plain JSON and needs to be xformed\n this.map.numFmts.render(xmlStream, model.numFmts);\n this.map.fonts.render(xmlStream, model.fonts);\n this.map.fills.render(xmlStream, model.fills);\n this.map.borders.render(xmlStream, model.borders);\n this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);\n this.map.cellXfs.render(xmlStream, model.styles);\n }\n\n StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream);\n\n this.map.dxfs.render(xmlStream, model.dxfs);\n\n StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream);\n StylesXform.STATIC_XFORMS.extLst.render(xmlStream);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'styleSheet':\n this.initIndex();\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'styleSheet': {\n this.model = {};\n const add = (propName, xform) => {\n if (xform.model && xform.model.length) {\n this.model[propName] = xform.model;\n }\n };\n add('numFmts', this.map.numFmts);\n add('fonts', this.map.fonts);\n add('fills', this.map.fills);\n add('borders', this.map.borders);\n add('styles', this.map.cellXfs);\n add('dxfs', this.map.dxfs);\n\n // index numFmts\n this.index = {\n model: [],\n numFmt: [],\n };\n if (this.model.numFmts) {\n const numFmtIndex = this.index.numFmt;\n this.model.numFmts.forEach(numFmt => {\n numFmtIndex[numFmt.id] = numFmt.formatCode;\n });\n }\n\n return false;\n }\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n // add a cell's style model to the collection\n // each style property is processed and cross-referenced, etc.\n // the styleId is returned. Note: cellType is used when numFmt not defined\n addStyleModel(model, cellType) {\n if (!model) {\n return 0;\n }\n\n // if we have no default font, add it here now\n if (!this.model.fonts.length) {\n // default (zero) font\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\n }\n\n // if we have seen this style object before, assume it has the same styleId\n if (this.weakMap && this.weakMap.has(model)) {\n return this.weakMap.get(model);\n }\n\n const style = {};\n cellType = cellType || Enums.ValueType.Number;\n\n if (model.numFmt) {\n style.numFmtId = this._addNumFmtStr(model.numFmt);\n } else {\n switch (cellType) {\n case Enums.ValueType.Number:\n style.numFmtId = this._addNumFmtStr('General');\n break;\n case Enums.ValueType.Date:\n style.numFmtId = this._addNumFmtStr('mm-dd-yy');\n break;\n default:\n break;\n }\n }\n\n if (model.font) {\n style.fontId = this._addFont(model.font);\n }\n\n if (model.border) {\n style.borderId = this._addBorder(model.border);\n }\n\n if (model.fill) {\n style.fillId = this._addFill(model.fill);\n }\n\n if (model.alignment) {\n style.alignment = model.alignment;\n }\n\n if (model.protection) {\n style.protection = model.protection;\n }\n\n const styleId = this._addStyle(style);\n if (this.weakMap) {\n this.weakMap.set(model, styleId);\n }\n return styleId;\n }\n\n // given a styleId (i.e. s=\"n\"), get the cell's style model\n // objects are shared where possible.\n getStyleModel(id) {\n // if the style doesn't exist return null\n const style = this.model.styles[id];\n if (!style) return null;\n\n // have we built this model before?\n let model = this.index.model[id];\n if (model) return model;\n\n // build a new model\n model = this.index.model[id] = {};\n\n // -------------------------------------------------------\n // number format\n if (style.numFmtId) {\n const numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId);\n if (numFmt) {\n model.numFmt = numFmt;\n }\n }\n\n function addStyle(name, group, styleId) {\n if (styleId || styleId === 0) {\n const part = group[styleId];\n if (part) {\n model[name] = part;\n }\n }\n }\n\n addStyle('font', this.model.fonts, style.fontId);\n addStyle('border', this.model.borders, style.borderId);\n addStyle('fill', this.model.fills, style.fillId);\n\n // -------------------------------------------------------\n // alignment\n if (style.alignment) {\n model.alignment = style.alignment;\n }\n\n // -------------------------------------------------------\n // protection\n if (style.protection) {\n model.protection = style.protection;\n }\n\n return model;\n }\n\n addDxfStyle(style) {\n if (style.numFmt) {\n // register numFmtId to use it during dxf-xform rendering\n style.numFmtId = this._addNumFmtStr(style.numFmt);\n }\n\n this.model.dxfs.push(style);\n return this.model.dxfs.length - 1;\n }\n\n getDxfStyle(id) {\n return this.model.dxfs[id];\n }\n\n // =========================================================================\n // Private Interface\n _addStyle(style) {\n const xml = this.map.style.toXml(style);\n let index = this.index.style[xml];\n if (index === undefined) {\n index = this.index.style[xml] = this.model.styles.length;\n this.model.styles.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Number Formats\n _addNumFmtStr(formatCode) {\n // check if default format\n let index = NumFmtXform.getDefaultFmtId(formatCode);\n if (index !== undefined) return index;\n\n // check if already in\n index = this.index.numFmt[formatCode];\n if (index !== undefined) return index;\n\n index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length;\n const xml = this.map.numFmt.toXml({id: index, formatCode});\n this.model.numFmts.push(xml);\n return index;\n }\n\n // =========================================================================\n // Fonts\n _addFont(font) {\n const xml = this.map.font.toXml(font);\n let index = this.index.font[xml];\n if (index === undefined) {\n index = this.index.font[xml] = this.model.fonts.length;\n this.model.fonts.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Borders\n _addBorder(border) {\n const xml = this.map.border.toXml(border);\n let index = this.index.border[xml];\n if (index === undefined) {\n index = this.index.border[xml] = this.model.borders.length;\n this.model.borders.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Fills\n _addFill(fill) {\n const xml = this.map.fill.toXml(fill);\n let index = this.index.fill[xml];\n if (index === undefined) {\n index = this.index.fill[xml] = this.model.fills.length;\n this.model.fills.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n}\n\nStylesXform.STYLESHEET_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x14ac x16r2',\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\n 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main',\n};\nStylesXform.STATIC_XFORMS = {\n cellStyles: new StaticXform({\n tag: 'cellStyles',\n $: {count: 1},\n c: [{tag: 'cellStyle', $: {name: 'Normal', xfId: 0, builtinId: 0}}],\n }),\n dxfs: new StaticXform({tag: 'dxfs', $: {count: 0}}),\n tableStyles: new StaticXform({\n tag: 'tableStyles',\n $: {count: 0, defaultTableStyle: 'TableStyleMedium2', defaultPivotStyle: 'PivotStyleLight16'},\n }),\n extLst: new StaticXform({\n tag: 'extLst',\n c: [\n {\n tag: 'ext',\n $: {\n uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n },\n c: [{tag: 'x14:slicerStyles', $: {defaultSlicerStyle: 'SlicerStyleLight1'}}],\n },\n {\n tag: 'ext',\n $: {\n uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n },\n c: [{tag: 'x15:timelineStyles', $: {defaultTimelineStyle: 'TimeSlicerStyleLight1'}}],\n },\n ],\n }),\n};\n\n// the stylemanager mock acts like StyleManager except that it always returns 0 or {}\nclass StylesXformMock extends StylesXform {\n constructor() {\n super();\n\n this.model = {\n styles: [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}],\n numFmts: [],\n fonts: [{size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'}],\n borders: [{}],\n fills: [\n {type: 'pattern', pattern: 'none'},\n {type: 'pattern', pattern: 'gray125'},\n ],\n };\n }\n\n // =========================================================================\n // Style Manager Interface\n\n // override normal behaviour - consume and dispose\n parseStream(stream) {\n stream.autodrain();\n return Promise.resolve();\n }\n\n // add a cell's style model to the collection\n // each style property is processed and cross-referenced, etc.\n // the styleId is returned. Note: cellType is used when numFmt not defined\n addStyleModel(model, cellType) {\n switch (cellType) {\n case Enums.ValueType.Date:\n return this.dateStyleId;\n default:\n return 0;\n }\n }\n\n get dateStyleId() {\n if (!this._dateStyleId) {\n const dateStyle = {\n numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy'),\n };\n this._dateStyleId = this.model.styles.length;\n this.model.styles.push(dateStyle);\n }\n return this._dateStyleId;\n }\n\n // given a styleId (i.e. s=\"n\"), get the cell's style model\n // objects are shared where possible.\n getStyleModel(/* id */) {\n return {};\n }\n}\n\nStylesXform.Mock = StylesXformMock;\n\nmodule.exports = StylesXform;\n", + "const BaseXform = require('../base-xform');\n\nclass UnderlineXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n }\n\n get tag() {\n return 'u';\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n\n if (model === true) {\n xmlStream.leafNode('u');\n } else {\n const attr = UnderlineXform.Attributes[model];\n if (attr) {\n xmlStream.leafNode('u', attr);\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'u') {\n this.model = node.attributes.val || true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nUnderlineXform.Attributes = {\n single: {},\n double: {val: 'double'},\n singleAccounting: {val: 'singleAccounting'},\n doubleAccounting: {val: 'doubleAccounting'},\n};\n\nmodule.exports = UnderlineXform;\n", + "const BaseXform = require('../base-xform');\n\nconst FilterColumnXform = require('./filter-column-xform');\n\nclass AutoFilterXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n filterColumn: new FilterColumnXform(),\n };\n }\n\n get tag() {\n return 'autoFilter';\n }\n\n prepare(model) {\n model.columns.forEach((column, index) => {\n this.map.filterColumn.prepare(column, {index});\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {ref: model.autoFilterRef});\n\n model.columns.forEach(column => {\n this.map.filterColumn.render(xmlStream, column);\n });\n\n xmlStream.closeNode();\n return true;\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.model = {\n autoFilterRef: node.attributes.ref,\n columns: [],\n };\n return true;\n\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.columns.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nmodule.exports = AutoFilterXform;\n", + "const BaseXform = require('../base-xform');\n\nclass CustomFilterXform extends BaseXform {\n get tag() {\n return 'customFilter';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n val: model.val,\n operator: model.operator,\n });\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n val: node.attributes.val,\n operator: node.attributes.operator,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = CustomFilterXform;\n", + "const BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst CustomFilterXform = require('./custom-filter-xform');\nconst FilterXform = require('./filter-xform');\n\nclass FilterColumnXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n customFilters: new ListXform({\n tag: 'customFilters',\n count: false,\n empty: true,\n childXform: new CustomFilterXform(),\n }),\n filters: new ListXform({\n tag: 'filters',\n count: false,\n empty: true,\n childXform: new FilterXform(),\n }),\n };\n }\n\n get tag() {\n return 'filterColumn';\n }\n\n prepare(model, options) {\n model.colId = options.index.toString();\n }\n\n render(xmlStream, model) {\n if (model.customFilters) {\n xmlStream.openNode(this.tag, {\n colId: model.colId,\n hiddenButton: model.filterButton ? '0' : '1',\n });\n\n this.map.customFilters.render(xmlStream, model.customFilters);\n\n xmlStream.closeNode();\n return true;\n }\n xmlStream.leafNode(this.tag, {\n colId: model.colId,\n hiddenButton: model.filterButton ? '0' : '1',\n });\n return true;\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {attributes} = node;\n switch (node.name) {\n case this.tag:\n this.model = {\n filterButton: attributes.hiddenButton === '0',\n };\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.customFilters = this.map.customFilters.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n}\n\nmodule.exports = FilterColumnXform;\n", + "const BaseXform = require('../base-xform');\n\nclass FilterXform extends BaseXform {\n get tag() {\n return 'filter';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n val: model.val,\n });\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n val: node.attributes.val,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = FilterXform;\n", + "const BaseXform = require('../base-xform');\n\nclass TableColumnXform extends BaseXform {\n get tag() {\n return 'tableColumn';\n }\n\n prepare(model, options) {\n model.id = options.index + 1;\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n id: model.id.toString(),\n name: model.name,\n totalsRowLabel: model.totalsRowLabel,\n totalsRowFunction: model.totalsRowFunction,\n dxfId: model.dxfId,\n });\n return true;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n const {attributes} = node;\n this.model = {\n name: attributes.name,\n totalsRowLabel: attributes.totalsRowLabel,\n totalsRowFunction: attributes.totalsRowFunction,\n dxfId: attributes.dxfId,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TableColumnXform;\n", + "const BaseXform = require('../base-xform');\n\nclass TableStyleInfoXform extends BaseXform {\n get tag() {\n return 'tableStyleInfo';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n name: model.theme ? model.theme : undefined,\n showFirstColumn: model.showFirstColumn ? '1' : '0',\n showLastColumn: model.showLastColumn ? '1' : '0',\n showRowStripes: model.showRowStripes ? '1' : '0',\n showColumnStripes: model.showColumnStripes ? '1' : '0',\n });\n return true;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n const {attributes} = node;\n this.model = {\n theme: attributes.name ? attributes.name : null,\n showFirstColumn: attributes.showFirstColumn === '1',\n showLastColumn: attributes.showLastColumn === '1',\n showRowStripes: attributes.showRowStripes === '1',\n showColumnStripes: attributes.showColumnStripes === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TableStyleInfoXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst AutoFilterXform = require('./auto-filter-xform');\nconst TableColumnXform = require('./table-column-xform');\nconst TableStyleInfoXform = require('./table-style-info-xform');\n\nclass TableXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n autoFilter: new AutoFilterXform(),\n tableColumns: new ListXform({\n tag: 'tableColumns',\n count: true,\n empty: true,\n childXform: new TableColumnXform(),\n }),\n tableStyleInfo: new TableStyleInfoXform(),\n };\n }\n\n prepare(model, options) {\n this.map.autoFilter.prepare(model);\n this.map.tableColumns.prepare(model.columns, options);\n }\n\n get tag() {\n return 'table';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, {\n ...TableXform.TABLE_ATTRIBUTES,\n id: model.id,\n name: model.name,\n displayName: model.displayName || model.name,\n ref: model.tableRef,\n totalsRowCount: model.totalsRow ? '1' : undefined,\n totalsRowShown: model.totalsRow ? undefined : '1',\n headerRowCount: model.headerRow ? '1' : '0',\n });\n\n this.map.autoFilter.render(xmlStream, model);\n this.map.tableColumns.render(xmlStream, model.columns);\n this.map.tableStyleInfo.render(xmlStream, model.style);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {name, attributes} = node;\n switch (name) {\n case this.tag:\n this.reset();\n this.model = {\n name: attributes.name,\n displayName: attributes.displayName || attributes.name,\n tableRef: attributes.ref,\n totalsRow: attributes.totalsRowCount === '1',\n headerRow: attributes.headerRowCount === '1',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.columns = this.map.tableColumns.model;\n if (this.map.autoFilter.model) {\n this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef;\n this.map.autoFilter.model.columns.forEach((column, index) => {\n this.model.columns[index].filterButton = column.filterButton;\n });\n }\n this.model.style = this.map.tableStyleInfo.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n // fetch the dfxs from styles\n model.columns.forEach(column => {\n if (column.dxfId !== undefined) {\n column.style = options.styles.getDxfStyle(column.dxfId);\n }\n });\n }\n}\n\nTableXform.TABLE_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'xr xr3',\n 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',\n 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3',\n // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}',\n};\n\nmodule.exports = TableXform;\n", + "const fs = require('fs');\nconst JSZip = require('jszip');\nconst {PassThrough} = require('readable-stream');\nconst ZipStream = require('../utils/zip-stream');\nconst StreamBuf = require('../utils/stream-buf');\n\nconst utils = require('../utils/utils');\nconst XmlStream = require('../utils/xml-stream');\nconst {bufferToString} = require('../utils/browser-buffer-decode');\n\nconst StylesXform = require('./xform/style/styles-xform');\n\nconst CoreXform = require('./xform/core/core-xform');\nconst SharedStringsXform = require('./xform/strings/shared-strings-xform');\nconst RelationshipsXform = require('./xform/core/relationships-xform');\nconst ContentTypesXform = require('./xform/core/content-types-xform');\nconst AppXform = require('./xform/core/app-xform');\nconst WorkbookXform = require('./xform/book/workbook-xform');\nconst WorksheetXform = require('./xform/sheet/worksheet-xform');\nconst DrawingXform = require('./xform/drawing/drawing-xform');\nconst TableXform = require('./xform/table/table-xform');\nconst CommentsXform = require('./xform/comment/comments-xform');\nconst VmlNotesXform = require('./xform/comment/vml-notes-xform');\n\nconst theme1Xml = require('./xml/theme1');\n\nfunction fsReadFileAsync(filename, options) {\n return new Promise((resolve, reject) => {\n fs.readFile(filename, options, (error, data) => {\n if (error) {\n reject(error);\n } else {\n resolve(data);\n }\n });\n });\n}\n\nclass XLSX {\n constructor(workbook) {\n this.workbook = workbook;\n }\n\n // ===============================================================================\n // Workbook\n // =========================================================================\n // Read\n\n async readFile(filename, options) {\n if (!(await utils.fs.exists(filename))) {\n throw new Error(`File not found: ${filename}`);\n }\n const stream = fs.createReadStream(filename);\n try {\n const workbook = await this.read(stream, options);\n stream.close();\n return workbook;\n } catch (error) {\n stream.close();\n throw error;\n }\n }\n\n parseRels(stream) {\n const xform = new RelationshipsXform();\n return xform.parseStream(stream);\n }\n\n parseWorkbook(stream) {\n const xform = new WorkbookXform();\n return xform.parseStream(stream);\n }\n\n parseSharedStrings(stream) {\n const xform = new SharedStringsXform();\n return xform.parseStream(stream);\n }\n\n reconcile(model, options) {\n const workbookXform = new WorkbookXform();\n const worksheetXform = new WorksheetXform(options);\n const drawingXform = new DrawingXform();\n const tableXform = new TableXform();\n\n workbookXform.reconcile(model);\n\n // reconcile drawings with their rels\n const drawingOptions = {\n media: model.media,\n mediaIndex: model.mediaIndex,\n };\n Object.keys(model.drawings).forEach(name => {\n const drawing = model.drawings[name];\n const drawingRel = model.drawingRels[name];\n if (drawingRel) {\n drawingOptions.rels = drawingRel.reduce((o, rel) => {\n o[rel.Id] = rel;\n return o;\n }, {});\n (drawing.anchors || []).forEach(anchor => {\n const hyperlinks = anchor.picture && anchor.picture.hyperlinks;\n if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) {\n hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target;\n delete hyperlinks.rId;\n }\n });\n drawingXform.reconcile(drawing, drawingOptions);\n }\n });\n\n // reconcile tables with the default styles\n const tableOptions = {\n styles: model.styles,\n };\n Object.values(model.tables).forEach(table => {\n tableXform.reconcile(table, tableOptions);\n });\n\n const sheetOptions = {\n styles: model.styles,\n sharedStrings: model.sharedStrings,\n media: model.media,\n mediaIndex: model.mediaIndex,\n date1904: model.properties && model.properties.date1904,\n drawings: model.drawings,\n comments: model.comments,\n tables: model.tables,\n vmlDrawings: model.vmlDrawings,\n };\n model.worksheets.forEach(worksheet => {\n worksheet.relationships = model.worksheetRels[worksheet.sheetNo];\n worksheetXform.reconcile(worksheet, sheetOptions);\n });\n\n // delete unnecessary parts\n delete model.worksheetHash;\n delete model.worksheetRels;\n delete model.globalRels;\n delete model.sharedStrings;\n delete model.workbookRels;\n delete model.sheetDefs;\n delete model.styles;\n delete model.mediaIndex;\n delete model.drawings;\n delete model.drawingRels;\n delete model.vmlDrawings;\n }\n\n async _processWorksheetEntry(stream, model, sheetNo, options, path) {\n const xform = new WorksheetXform(options);\n const worksheet = await xform.parseStream(stream);\n worksheet.sheetNo = sheetNo;\n model.worksheetHash[path] = worksheet;\n model.worksheets.push(worksheet);\n }\n\n async _processCommentEntry(stream, model, name) {\n const xform = new CommentsXform();\n const comments = await xform.parseStream(stream);\n model.comments[`../${name}.xml`] = comments;\n }\n\n async _processTableEntry(stream, model, name) {\n const xform = new TableXform();\n const table = await xform.parseStream(stream);\n model.tables[`../tables/${name}.xml`] = table;\n }\n\n async _processWorksheetRelsEntry(stream, model, sheetNo) {\n const xform = new RelationshipsXform();\n const relationships = await xform.parseStream(stream);\n model.worksheetRels[sheetNo] = relationships;\n }\n\n async _processMediaEntry(entry, model, filename) {\n const lastDot = filename.lastIndexOf('.');\n // if we can't determine extension, ignore it\n if (lastDot >= 1) {\n const extension = filename.substr(lastDot + 1);\n const name = filename.substr(0, lastDot);\n await new Promise((resolve, reject) => {\n const streamBuf = new StreamBuf();\n streamBuf.on('finish', () => {\n model.mediaIndex[filename] = model.media.length;\n model.mediaIndex[name] = model.media.length;\n const medium = {\n type: 'image',\n name,\n extension,\n buffer: streamBuf.toBuffer(),\n };\n model.media.push(medium);\n resolve();\n });\n entry.on('error', error => {\n reject(error);\n });\n entry.pipe(streamBuf);\n });\n }\n }\n\n async _processDrawingEntry(entry, model, name) {\n const xform = new DrawingXform();\n const drawing = await xform.parseStream(entry);\n model.drawings[name] = drawing;\n }\n\n async _processDrawingRelsEntry(entry, model, name) {\n const xform = new RelationshipsXform();\n const relationships = await xform.parseStream(entry);\n model.drawingRels[name] = relationships;\n }\n\n async _processVmlDrawingEntry(entry, model, name) {\n const xform = new VmlNotesXform();\n const vmlDrawing = await xform.parseStream(entry);\n model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing;\n }\n\n async _processThemeEntry(entry, model, name) {\n await new Promise((resolve, reject) => {\n // TODO: stream entry into buffer and store the xml in the model.themes[]\n const stream = new StreamBuf();\n entry.on('error', reject);\n stream.on('error', reject);\n stream.on('finish', () => {\n model.themes[name] = stream.read().toString();\n resolve();\n });\n entry.pipe(stream);\n });\n }\n\n /**\n * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\n */\n createInputStream() {\n throw new Error(\n '`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\n );\n }\n\n async read(stream, options) {\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old streams\n if (!stream[Symbol.asyncIterator] && stream.pipe) {\n stream = stream.pipe(new PassThrough());\n }\n const chunks = [];\n for await (const chunk of stream) {\n chunks.push(chunk);\n }\n return this.load(Buffer.concat(chunks), options);\n }\n\n async load(data, options) {\n let buffer;\n if (options && options.base64) {\n buffer = Buffer.from(data.toString(), 'base64');\n } else {\n buffer = data;\n }\n\n const model = {\n worksheets: [],\n worksheetHash: {},\n worksheetRels: [],\n themes: {},\n media: [],\n mediaIndex: {},\n drawings: {},\n drawingRels: {},\n comments: {},\n tables: {},\n vmlDrawings: {},\n };\n\n const zip = await JSZip.loadAsync(buffer);\n for (const entry of Object.values(zip.files)) {\n /* eslint-disable no-await-in-loop */\n if (!entry.dir) {\n let entryName = entry.name;\n if (entryName[0] === '/') {\n entryName = entryName.substr(1);\n }\n let stream;\n if (\n entryName.match(/xl\\/media\\//) ||\n // themes are not parsed as stream\n entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/)\n ) {\n stream = new PassThrough();\n stream.write(await entry.async('nodebuffer'));\n } else {\n // use object mode to avoid buffer-string convention\n stream = new PassThrough({\n writableObjectMode: true,\n readableObjectMode: true,\n });\n let content;\n // https://www.npmjs.com/package/process\n if (process.browser) {\n // running in browser, use TextDecoder if possible\n content = bufferToString(await entry.async('nodebuffer'));\n } else {\n // running in node.js\n content = await entry.async('string');\n }\n const chunkSize = 16 * 1024;\n for (let i = 0; i < content.length; i += chunkSize) {\n stream.write(content.substring(i, i + chunkSize));\n }\n }\n stream.end();\n switch (entryName) {\n case '_rels/.rels':\n model.globalRels = await this.parseRels(stream);\n break;\n\n case 'xl/workbook.xml': {\n const workbook = await this.parseWorkbook(stream);\n model.sheets = workbook.sheets;\n model.definedNames = workbook.definedNames;\n model.views = workbook.views;\n model.properties = workbook.properties;\n model.calcProperties = workbook.calcProperties;\n break;\n }\n\n case 'xl/_rels/workbook.xml.rels':\n model.workbookRels = await this.parseRels(stream);\n break;\n\n case 'xl/sharedStrings.xml':\n model.sharedStrings = new SharedStringsXform();\n await model.sharedStrings.parseStream(stream);\n break;\n\n case 'xl/styles.xml':\n model.styles = new StylesXform();\n await model.styles.parseStream(stream);\n break;\n\n case 'docProps/app.xml': {\n const appXform = new AppXform();\n const appProperties = await appXform.parseStream(stream);\n model.company = appProperties.company;\n model.manager = appProperties.manager;\n break;\n }\n\n case 'docProps/core.xml': {\n const coreXform = new CoreXform();\n const coreProperties = await coreXform.parseStream(stream);\n Object.assign(model, coreProperties);\n break;\n }\n\n default: {\n let match = entryName.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/);\n if (match) {\n await this._processWorksheetEntry(stream, model, match[1], options, entryName);\n break;\n }\n match = entryName.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/);\n if (match) {\n await this._processWorksheetRelsEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/);\n if (match) {\n await this._processThemeEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/media\\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/);\n if (match) {\n await this._processMediaEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/([a-zA-Z0-9]+)[.]xml/);\n if (match) {\n await this._processDrawingEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/(comments\\d+)[.]xml/);\n if (match) {\n await this._processCommentEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/tables\\/(table\\d+)[.]xml/);\n if (match) {\n await this._processTableEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/_rels\\/([a-zA-Z0-9]+)[.]xml[.]rels/);\n if (match) {\n await this._processDrawingRelsEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/(vmlDrawing\\d+)[.]vml/);\n if (match) {\n await this._processVmlDrawingEntry(stream, model, match[1]);\n break;\n }\n }\n }\n }\n }\n\n this.reconcile(model, options);\n\n // apply model\n this.workbook.model = model;\n return this.workbook;\n }\n\n // =========================================================================\n // Write\n\n async addMedia(zip, model) {\n await Promise.all(\n model.media.map(async medium => {\n if (medium.type === 'image') {\n const filename = `xl/media/${medium.name}.${medium.extension}`;\n if (medium.filename) {\n const data = await fsReadFileAsync(medium.filename);\n return zip.append(data, {name: filename});\n }\n if (medium.buffer) {\n return zip.append(medium.buffer, {name: filename});\n }\n if (medium.base64) {\n const dataimg64 = medium.base64;\n const content = dataimg64.substring(dataimg64.indexOf(',') + 1);\n return zip.append(content, {name: filename, base64: true});\n }\n }\n throw new Error('Unsupported media');\n })\n );\n }\n\n addDrawings(zip, model) {\n const drawingXform = new DrawingXform();\n const relsXform = new RelationshipsXform();\n\n model.worksheets.forEach(worksheet => {\n const {drawing} = worksheet;\n if (drawing) {\n drawingXform.prepare(drawing, {});\n let xml = drawingXform.toXml(drawing);\n zip.append(xml, {name: `xl/drawings/${drawing.name}.xml`});\n\n xml = relsXform.toXml(drawing.rels);\n zip.append(xml, {name: `xl/drawings/_rels/${drawing.name}.xml.rels`});\n }\n });\n }\n\n addTables(zip, model) {\n const tableXform = new TableXform();\n\n model.worksheets.forEach(worksheet => {\n const {tables} = worksheet;\n tables.forEach(table => {\n tableXform.prepare(table, {});\n const tableXml = tableXform.toXml(table);\n zip.append(tableXml, {name: `xl/tables/${table.target}`});\n });\n });\n }\n\n async addContentTypes(zip, model) {\n const xform = new ContentTypesXform();\n const xml = xform.toXml(model);\n zip.append(xml, {name: '[Content_Types].xml'});\n }\n\n async addApp(zip, model) {\n const xform = new AppXform();\n const xml = xform.toXml(model);\n zip.append(xml, {name: 'docProps/app.xml'});\n }\n\n async addCore(zip, model) {\n const coreXform = new CoreXform();\n zip.append(coreXform.toXml(model), {name: 'docProps/core.xml'});\n }\n\n async addThemes(zip, model) {\n const themes = model.themes || {theme1: theme1Xml};\n Object.keys(themes).forEach(name => {\n const xml = themes[name];\n const path = `xl/theme/${name}.xml`;\n zip.append(xml, {name: path});\n });\n }\n\n async addOfficeRels(zip) {\n const xform = new RelationshipsXform();\n const xml = xform.toXml([\n {Id: 'rId1', Type: XLSX.RelType.OfficeDocument, Target: 'xl/workbook.xml'},\n {Id: 'rId2', Type: XLSX.RelType.CoreProperties, Target: 'docProps/core.xml'},\n {Id: 'rId3', Type: XLSX.RelType.ExtenderProperties, Target: 'docProps/app.xml'},\n ]);\n zip.append(xml, {name: '_rels/.rels'});\n }\n\n async addWorkbookRels(zip, model) {\n let count = 1;\n const relationships = [\n {Id: `rId${count++}`, Type: XLSX.RelType.Styles, Target: 'styles.xml'},\n {Id: `rId${count++}`, Type: XLSX.RelType.Theme, Target: 'theme/theme1.xml'},\n ];\n if (model.sharedStrings.count) {\n relationships.push({\n Id: `rId${count++}`,\n Type: XLSX.RelType.SharedStrings,\n Target: 'sharedStrings.xml',\n });\n }\n model.worksheets.forEach(worksheet => {\n worksheet.rId = `rId${count++}`;\n relationships.push({\n Id: worksheet.rId,\n Type: XLSX.RelType.Worksheet,\n Target: `worksheets/sheet${worksheet.id}.xml`,\n });\n });\n const xform = new RelationshipsXform();\n const xml = xform.toXml(relationships);\n zip.append(xml, {name: 'xl/_rels/workbook.xml.rels'});\n }\n\n async addSharedStrings(zip, model) {\n if (model.sharedStrings && model.sharedStrings.count) {\n zip.append(model.sharedStrings.xml, {name: 'xl/sharedStrings.xml'});\n }\n }\n\n async addStyles(zip, model) {\n const {xml} = model.styles;\n if (xml) {\n zip.append(xml, {name: 'xl/styles.xml'});\n }\n }\n\n async addWorkbook(zip, model) {\n const xform = new WorkbookXform();\n zip.append(xform.toXml(model), {name: 'xl/workbook.xml'});\n }\n\n async addWorksheets(zip, model) {\n // preparation phase\n const worksheetXform = new WorksheetXform();\n const relationshipsXform = new RelationshipsXform();\n const commentsXform = new CommentsXform();\n const vmlNotesXform = new VmlNotesXform();\n\n // write sheets\n model.worksheets.forEach(worksheet => {\n let xmlStream = new XmlStream();\n worksheetXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/worksheets/sheet${worksheet.id}.xml`});\n\n if (worksheet.rels && worksheet.rels.length) {\n xmlStream = new XmlStream();\n relationshipsXform.render(xmlStream, worksheet.rels);\n zip.append(xmlStream.xml, {name: `xl/worksheets/_rels/sheet${worksheet.id}.xml.rels`});\n }\n\n if (worksheet.comments.length > 0) {\n xmlStream = new XmlStream();\n commentsXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/comments${worksheet.id}.xml`});\n\n xmlStream = new XmlStream();\n vmlNotesXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/drawings/vmlDrawing${worksheet.id}.vml`});\n }\n });\n }\n\n _finalize(zip) {\n return new Promise((resolve, reject) => {\n zip.on('finish', () => {\n resolve(this);\n });\n zip.on('error', reject);\n zip.finalize();\n });\n }\n\n prepareModel(model, options) {\n // ensure following properties have sane values\n model.creator = model.creator || 'ExcelJS';\n model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS';\n model.created = model.created || new Date();\n model.modified = model.modified || new Date();\n\n model.useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : true;\n model.useStyles = options.useStyles !== undefined ? options.useStyles : true;\n\n // Manage the shared strings\n model.sharedStrings = new SharedStringsXform();\n\n // add a style manager to handle cell formats, fonts, etc.\n model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock();\n\n // prepare all of the things before the render\n const workbookXform = new WorkbookXform();\n const worksheetXform = new WorksheetXform();\n\n workbookXform.prepare(model);\n\n const worksheetOptions = {\n sharedStrings: model.sharedStrings,\n styles: model.styles,\n date1904: model.properties.date1904,\n drawingsCount: 0,\n media: model.media,\n };\n worksheetOptions.drawings = model.drawings = [];\n worksheetOptions.commentRefs = model.commentRefs = [];\n let tableCount = 0;\n model.tables = [];\n model.worksheets.forEach(worksheet => {\n // assign unique filenames to tables\n worksheet.tables.forEach(table => {\n tableCount++;\n table.target = `table${tableCount}.xml`;\n table.id = tableCount;\n model.tables.push(table);\n });\n\n worksheetXform.prepare(worksheet, worksheetOptions);\n });\n\n // TODO: workbook drawing list\n }\n\n async write(stream, options) {\n options = options || {};\n const {model} = this.workbook;\n const zip = new ZipStream.ZipWriter(options.zip);\n zip.pipe(stream);\n\n this.prepareModel(model, options);\n\n // render\n await this.addContentTypes(zip, model);\n await this.addOfficeRels(zip, model);\n await this.addWorkbookRels(zip, model);\n await this.addWorksheets(zip, model);\n await this.addSharedStrings(zip, model); // always after worksheets\n await this.addDrawings(zip, model);\n await this.addTables(zip, model);\n await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]);\n await this.addMedia(zip, model);\n await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]);\n await this.addWorkbook(zip, model);\n return this._finalize(zip);\n }\n\n writeFile(filename, options) {\n const stream = fs.createWriteStream(filename);\n\n return new Promise((resolve, reject) => {\n stream.on('finish', () => {\n resolve();\n });\n stream.on('error', error => {\n reject(error);\n });\n\n this.write(stream, options).then(() => {\n stream.end();\n }).catch(err=>{\n reject(err);\n });\n });\n }\n\n async writeBuffer(options) {\n const stream = new StreamBuf();\n await this.write(stream, options);\n return stream.read();\n }\n}\n\nXLSX.RelType = require('./rel-type');\n\nmodule.exports = XLSX;\n", + "/* eslint-disable */\nmodule.exports =\n '\\n ';\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvFormatterStream = void 0;\nconst stream_1 = require(\"stream\");\nconst formatter_1 = require(\"./formatter\");\nclass CsvFormatterStream extends stream_1.Transform {\n constructor(formatterOptions) {\n super({\n writableObjectMode: formatterOptions.objectMode\n });\n this.hasWrittenBOM = false;\n this.formatterOptions = formatterOptions;\n this.rowFormatter = new formatter_1.RowFormatter(formatterOptions);\n // if writeBOM is false then set to true\n // if writeBOM is true then set to false by default so it is written out\n this.hasWrittenBOM = !formatterOptions.writeBOM;\n }\n transform(transformFunction) {\n this.rowFormatter.rowTransform = transformFunction;\n return this;\n }\n _transform(row, encoding, cb) {\n let cbCalled = false;\n try {\n if (!this.hasWrittenBOM) {\n this.push(this.formatterOptions.BOM);\n this.hasWrittenBOM = true;\n }\n this.rowFormatter.format(row, (err, rows) => {\n if (err) {\n cbCalled = true;\n return cb(err);\n }\n if (rows) {\n rows.forEach(r => {\n this.push(Buffer.from(r, 'utf8'));\n });\n }\n cbCalled = true;\n return cb();\n });\n } catch (e) {\n if (cbCalled) {\n throw e;\n }\n cb(e);\n }\n }\n _flush(cb) {\n this.rowFormatter.finish((err, rows) => {\n if (err) {\n return cb(err);\n }\n if (rows) {\n rows.forEach(r => {\n this.push(Buffer.from(r, 'utf8'));\n });\n }\n return cb();\n });\n }\n}\nexports.CsvFormatterStream = CsvFormatterStream;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHJlYW1fMSIsInJlcXVpcmUiLCJmb3JtYXR0ZXJfMSIsIkNzdkZvcm1hdHRlclN0cmVhbSIsIlRyYW5zZm9ybSIsImNvbnN0cnVjdG9yIiwiZm9ybWF0dGVyT3B0aW9ucyIsIndyaXRhYmxlT2JqZWN0TW9kZSIsIm9iamVjdE1vZGUiLCJoYXNXcml0dGVuQk9NIiwicm93Rm9ybWF0dGVyIiwiUm93Rm9ybWF0dGVyIiwid3JpdGVCT00iLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsInJvd1RyYW5zZm9ybSIsIl90cmFuc2Zvcm0iLCJyb3ciLCJlbmNvZGluZyIsImNiIiwiY2JDYWxsZWQiLCJwdXNoIiwiQk9NIiwiZm9ybWF0IiwiZXJyIiwicm93cyIsImZvckVhY2giLCJyIiwiQnVmZmVyIiwiZnJvbSIsImUiLCJfZmx1c2giLCJmaW5pc2giLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NzdkZvcm1hdHRlclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBR0EsTUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBRUEsTUFBYUUsa0JBQWlELFNBQVFILFFBQUEsQ0FBQUksU0FBUztFQU8zRUMsWUFBbUJDLGdCQUF3QztJQUN2RCxLQUFLLENBQUM7TUFBRUMsa0JBQWtCLEVBQUVELGdCQUFnQixDQUFDRTtJQUFVLENBQUUsQ0FBQztJQUh0RCxLQUFBQyxhQUFhLEdBQUcsS0FBSztJQUl6QixJQUFJLENBQUNILGdCQUFnQixHQUFHQSxnQkFBZ0I7SUFDeEMsSUFBSSxDQUFDSSxZQUFZLEdBQUcsSUFBSVIsV0FBQSxDQUFBUyxZQUFZLENBQUNMLGdCQUFnQixDQUFDO0lBQ3REO0lBQ0E7SUFDQSxJQUFJLENBQUNHLGFBQWEsR0FBRyxDQUFDSCxnQkFBZ0IsQ0FBQ00sUUFBUTtFQUNuRDtFQUVPQyxTQUFTQSxDQUFDQyxpQkFBNkM7SUFDMUQsSUFBSSxDQUFDSixZQUFZLENBQUNLLFlBQVksR0FBR0QsaUJBQWlCO0lBQ2xELE9BQU8sSUFBSTtFQUNmO0VBRU9FLFVBQVVBLENBQUNDLEdBQU0sRUFBRUMsUUFBZ0IsRUFBRUMsRUFBcUI7SUFDN0QsSUFBSUMsUUFBUSxHQUFHLEtBQUs7SUFDcEIsSUFBSTtNQUNBLElBQUksQ0FBQyxJQUFJLENBQUNYLGFBQWEsRUFBRTtRQUNyQixJQUFJLENBQUNZLElBQUksQ0FBQyxJQUFJLENBQUNmLGdCQUFnQixDQUFDZ0IsR0FBRyxDQUFDO1FBQ3BDLElBQUksQ0FBQ2IsYUFBYSxHQUFHLElBQUk7O01BRTdCLElBQUksQ0FBQ0MsWUFBWSxDQUFDYSxNQUFNLENBQUNOLEdBQUcsRUFBRSxDQUFDTyxHQUFHLEVBQUVDLElBQUksS0FBVTtRQUM5QyxJQUFJRCxHQUFHLEVBQUU7VUFDTEosUUFBUSxHQUFHLElBQUk7VUFDZixPQUFPRCxFQUFFLENBQUNLLEdBQUcsQ0FBQzs7UUFFbEIsSUFBSUMsSUFBSSxFQUFFO1VBQ05BLElBQUksQ0FBQ0MsT0FBTyxDQUFFQyxDQUFDLElBQVU7WUFDckIsSUFBSSxDQUFDTixJQUFJLENBQUNPLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDckMsQ0FBQyxDQUFDOztRQUVOUCxRQUFRLEdBQUcsSUFBSTtRQUNmLE9BQU9ELEVBQUUsRUFBRTtNQUNmLENBQUMsQ0FBQztLQUNMLENBQUMsT0FBT1csQ0FBQyxFQUFFO01BQ1IsSUFBSVYsUUFBUSxFQUFFO1FBQ1YsTUFBTVUsQ0FBQzs7TUFFWFgsRUFBRSxDQUFDVyxDQUFDLENBQUM7O0VBRWI7RUFFT0MsTUFBTUEsQ0FBQ1osRUFBcUI7SUFDL0IsSUFBSSxDQUFDVCxZQUFZLENBQUNzQixNQUFNLENBQUMsQ0FBQ1IsR0FBRyxFQUFFQyxJQUFJLEtBQVU7TUFDekMsSUFBSUQsR0FBRyxFQUFFO1FBQ0wsT0FBT0wsRUFBRSxDQUFDSyxHQUFHLENBQUM7O01BRWxCLElBQUlDLElBQUksRUFBRTtRQUNOQSxJQUFJLENBQUNDLE9BQU8sQ0FBRUMsQ0FBQyxJQUFVO1VBQ3JCLElBQUksQ0FBQ04sSUFBSSxDQUFDTyxNQUFNLENBQUNDLElBQUksQ0FBQ0YsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQzs7TUFFTixPQUFPUixFQUFFLEVBQUU7SUFDZixDQUFDLENBQUM7RUFDTjs7QUE3REpjLE9BQUEsQ0FBQTlCLGtCQUFBLEdBQUFBLGtCQUFBIn0=", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FormatterOptions = void 0;\nclass FormatterOptions {\n constructor() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _a;\n this.objectMode = true;\n this.delimiter = ',';\n this.rowDelimiter = '\\n';\n this.quote = '\"';\n this.escape = this.quote;\n this.quoteColumns = false;\n this.quoteHeaders = this.quoteColumns;\n this.headers = null;\n this.includeEndRowDelimiter = false;\n this.writeBOM = false;\n this.BOM = '\\ufeff';\n this.alwaysWriteHeaders = false;\n Object.assign(this, opts || {});\n if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') {\n this.quoteHeaders = this.quoteColumns;\n }\n if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) {\n this.quote = '\"';\n } else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) {\n this.quote = '';\n }\n if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') {\n this.escape = this.quote;\n }\n this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true);\n this.headers = Array.isArray(this.headers) ? this.headers : null;\n this.escapedQuote = `${this.escape}${this.quote}`;\n }\n}\nexports.FormatterOptions = FormatterOptions;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtYXR0ZXJPcHRpb25zIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib2JqZWN0TW9kZSIsImRlbGltaXRlciIsInJvd0RlbGltaXRlciIsInF1b3RlIiwiZXNjYXBlIiwicXVvdGVDb2x1bW5zIiwicXVvdGVIZWFkZXJzIiwiaGVhZGVycyIsImluY2x1ZGVFbmRSb3dEZWxpbWl0ZXIiLCJ3cml0ZUJPTSIsIkJPTSIsImFsd2F5c1dyaXRlSGVhZGVycyIsIk9iamVjdCIsImFzc2lnbiIsInNob3VsZFdyaXRlSGVhZGVycyIsIl9hIiwid3JpdGVIZWFkZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwiZXNjYXBlZFF1b3RlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Gb3JtYXR0ZXJPcHRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3QkEsTUFBYUEsZ0JBQWdCO0VBK0J6QkMsWUFBQSxFQUF3RDtJQUFBLElBQXJDQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFtQyxFQUFFOztJQTlCeEMsS0FBQUcsVUFBVSxHQUFZLElBQUk7SUFFMUIsS0FBQUMsU0FBUyxHQUFXLEdBQUc7SUFFdkIsS0FBQUMsWUFBWSxHQUFXLElBQUk7SUFFM0IsS0FBQUMsS0FBSyxHQUFXLEdBQUc7SUFFbkIsS0FBQUMsTUFBTSxHQUFXLElBQUksQ0FBQ0QsS0FBSztJQUUzQixLQUFBRSxZQUFZLEdBQWlCLEtBQUs7SUFFbEMsS0FBQUMsWUFBWSxHQUFpQixJQUFJLENBQUNELFlBQVk7SUFFOUMsS0FBQUUsT0FBTyxHQUFvQixJQUFJO0lBRS9CLEtBQUFDLHNCQUFzQixHQUFZLEtBQUs7SUFNdkMsS0FBQUMsUUFBUSxHQUFZLEtBQUs7SUFJekIsS0FBQUMsR0FBRyxHQUFXLFFBQVE7SUFFdEIsS0FBQUMsa0JBQWtCLEdBQVksS0FBSztJQUcvQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxFQUFFakIsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUUvQixJQUFJLFFBQU9BLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFVSxZQUFZLE1BQUssV0FBVyxFQUFFO01BQzNDLElBQUksQ0FBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQ0QsWUFBWTs7SUFFekMsSUFBSSxDQUFBVCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRU8sS0FBSyxNQUFLLElBQUksRUFBRTtNQUN0QixJQUFJLENBQUNBLEtBQUssR0FBRyxHQUFHO0tBQ25CLE1BQU0sSUFBSSxDQUFBUCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRU8sS0FBSyxNQUFLLEtBQUssRUFBRTtNQUM5QixJQUFJLENBQUNBLEtBQUssR0FBRyxFQUFFOztJQUVuQixJQUFJLFFBQU9QLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFUSxNQUFNLE1BQUssUUFBUSxFQUFFO01BQ2xDLElBQUksQ0FBQ0EsTUFBTSxHQUFHLElBQUksQ0FBQ0QsS0FBSzs7SUFFNUIsSUFBSSxDQUFDVyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDUCxPQUFPLEtBQUksQ0FBQVEsRUFBQSxHQUFDbkIsSUFBSSxDQUFDb0IsWUFBWSxjQUFBRCxFQUFBLGNBQUFBLEVBQUEsR0FBSSxJQUFJLENBQUM7SUFDdkUsSUFBSSxDQUFDUixPQUFPLEdBQUdVLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ1gsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDQSxPQUFPLEdBQUcsSUFBSTtJQUNoRSxJQUFJLENBQUNZLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQ0QsS0FBSyxFQUFFO0VBQ3JEOztBQWhESmlCLE9BQUEsQ0FBQTFCLGdCQUFBLEdBQUFBLGdCQUFBIn0=", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldFormatter = void 0;\nconst lodash_isboolean_1 = __importDefault(require(\"lodash.isboolean\"));\nconst lodash_isnil_1 = __importDefault(require(\"lodash.isnil\"));\nconst lodash_escaperegexp_1 = __importDefault(require(\"lodash.escaperegexp\"));\nclass FieldFormatter {\n constructor(formatterOptions) {\n this._headers = null;\n this.formatterOptions = formatterOptions;\n if (formatterOptions.headers !== null) {\n this.headers = formatterOptions.headers;\n }\n this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g');\n const escapePattern = `[${formatterOptions.delimiter}${lodash_escaperegexp_1.default(formatterOptions.rowDelimiter)}|\\r|\\n]`;\n this.ESCAPE_REGEXP = new RegExp(escapePattern);\n }\n set headers(headers) {\n this._headers = headers;\n }\n shouldQuote(fieldIndex, isHeader) {\n const quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns;\n if (lodash_isboolean_1.default(quoteConfig)) {\n return quoteConfig;\n }\n if (Array.isArray(quoteConfig)) {\n return quoteConfig[fieldIndex];\n }\n if (this._headers !== null) {\n return quoteConfig[this._headers[fieldIndex]];\n }\n return false;\n }\n format(field, fieldIndex, isHeader) {\n const preparedField = `${lodash_isnil_1.default(field) ? '' : field}`.replace(/\\0/g, '');\n const {\n formatterOptions\n } = this;\n if (formatterOptions.quote !== '') {\n const shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1;\n if (shouldEscape) {\n return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote));\n }\n }\n const hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1;\n if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) {\n return this.quoteField(preparedField);\n }\n return preparedField;\n }\n quoteField(field) {\n const {\n quote\n } = this.formatterOptions;\n return `${quote}${field}${quote}`;\n }\n}\nexports.FieldFormatter = FieldFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXNib29sZWFuXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZXF1aXJlIiwibG9kYXNoX2lzbmlsXzEiLCJsb2Rhc2hfZXNjYXBlcmVnZXhwXzEiLCJGaWVsZEZvcm1hdHRlciIsImNvbnN0cnVjdG9yIiwiZm9ybWF0dGVyT3B0aW9ucyIsIl9oZWFkZXJzIiwiaGVhZGVycyIsIlJFUExBQ0VfUkVHRVhQIiwiUmVnRXhwIiwicXVvdGUiLCJlc2NhcGVQYXR0ZXJuIiwiZGVsaW1pdGVyIiwiZGVmYXVsdCIsInJvd0RlbGltaXRlciIsIkVTQ0FQRV9SRUdFWFAiLCJzaG91bGRRdW90ZSIsImZpZWxkSW5kZXgiLCJpc0hlYWRlciIsInF1b3RlQ29uZmlnIiwicXVvdGVIZWFkZXJzIiwicXVvdGVDb2x1bW5zIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwiZmllbGQiLCJwcmVwYXJlZEZpZWxkIiwicmVwbGFjZSIsInNob3VsZEVzY2FwZSIsImluZGV4T2YiLCJxdW90ZUZpZWxkIiwiZXNjYXBlZFF1b3RlIiwiaGFzRXNjYXBlQ2hhcmFjdGVycyIsInNlYXJjaCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZm9ybWF0dGVyL0ZpZWxkRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE1BQUFBLGtCQUFBLEdBQUFDLGVBQUEsQ0FBQUMsT0FBQTtBQUNBLE1BQUFDLGNBQUEsR0FBQUYsZUFBQSxDQUFBQyxPQUFBO0FBQ0EsTUFBQUUscUJBQUEsR0FBQUgsZUFBQSxDQUFBQyxPQUFBO0FBSUEsTUFBYUcsY0FBYztFQVN2QkMsWUFBbUJDLGdCQUF3QztJQU5uRCxLQUFBQyxRQUFRLEdBQW9CLElBQUk7SUFPcEMsSUFBSSxDQUFDRCxnQkFBZ0IsR0FBR0EsZ0JBQWdCO0lBQ3hDLElBQUlBLGdCQUFnQixDQUFDRSxPQUFPLEtBQUssSUFBSSxFQUFFO01BQ25DLElBQUks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", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowFormatter = void 0;\nconst lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\nconst lodash_isequal_1 = __importDefault(require(\"lodash.isequal\"));\nconst FieldFormatter_1 = require(\"./FieldFormatter\");\nconst types_1 = require(\"../types\");\nclass RowFormatter {\n constructor(formatterOptions) {\n this.rowCount = 0;\n this.formatterOptions = formatterOptions;\n this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions);\n this.headers = formatterOptions.headers;\n this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders;\n this.hasWrittenHeaders = false;\n if (this.headers !== null) {\n this.fieldFormatter.headers = this.headers;\n }\n if (formatterOptions.transform) {\n this.rowTransform = formatterOptions.transform;\n }\n }\n static isRowHashArray(row) {\n if (Array.isArray(row)) {\n return Array.isArray(row[0]) && row[0].length === 2;\n }\n return false;\n }\n static isRowArray(row) {\n return Array.isArray(row) && !this.isRowHashArray(row);\n }\n // get headers from a row item\n static gatherHeaders(row) {\n if (RowFormatter.isRowHashArray(row)) {\n // lets assume a multi-dimesional array with item 0 being the header\n return row.map(it => it[0]);\n }\n if (Array.isArray(row)) {\n return row;\n }\n return Object.keys(row);\n }\n // eslint-disable-next-line @typescript-eslint/no-shadow\n static createTransform(transformFunction) {\n if (types_1.isSyncTransform(transformFunction)) {\n return (row, cb) => {\n let transformedRow = null;\n try {\n transformedRow = transformFunction(row);\n } catch (e) {\n return cb(e);\n }\n return cb(null, transformedRow);\n };\n }\n return (row, cb) => {\n transformFunction(row, cb);\n };\n }\n set rowTransform(transformFunction) {\n if (!lodash_isfunction_1.default(transformFunction)) {\n throw new TypeError('The transform should be a function');\n }\n this._rowTransform = RowFormatter.createTransform(transformFunction);\n }\n format(row, cb) {\n this.callTransformer(row, (err, transformedRow) => {\n if (err) {\n return cb(err);\n }\n if (!row) {\n return cb(null);\n }\n const rows = [];\n if (transformedRow) {\n const {\n shouldFormatColumns,\n headers\n } = this.checkHeaders(transformedRow);\n if (this.shouldWriteHeaders && headers && !this.hasWrittenHeaders) {\n rows.push(this.formatColumns(headers, true));\n this.hasWrittenHeaders = true;\n }\n if (shouldFormatColumns) {\n const columns = this.gatherColumns(transformedRow);\n rows.push(this.formatColumns(columns, false));\n }\n }\n return cb(null, rows);\n });\n }\n finish(cb) {\n const rows = [];\n // check if we should write headers and we didnt get any rows\n if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) {\n if (!this.headers) {\n return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.'));\n }\n rows.push(this.formatColumns(this.headers, true));\n }\n if (this.formatterOptions.includeEndRowDelimiter) {\n rows.push(this.formatterOptions.rowDelimiter);\n }\n return cb(null, rows);\n }\n // check if we need to write header return true if we should also write a row\n // could be false if headers is true and the header row(first item) is passed in\n checkHeaders(row) {\n if (this.headers) {\n // either the headers were provided by the user or we have already gathered them.\n return {\n shouldFormatColumns: true,\n headers: this.headers\n };\n }\n const headers = RowFormatter.gatherHeaders(row);\n this.headers = headers;\n this.fieldFormatter.headers = headers;\n if (!this.shouldWriteHeaders) {\n // if we are not supposed to write the headers then\n // always format the columns\n return {\n shouldFormatColumns: true,\n headers: null\n };\n }\n // if the row is equal to headers dont format\n return {\n shouldFormatColumns: !lodash_isequal_1.default(headers, row),\n headers\n };\n }\n // todo change this method to unknown[]\n gatherColumns(row) {\n if (this.headers === null) {\n throw new Error('Headers is currently null');\n }\n if (!Array.isArray(row)) {\n return this.headers.map(header => row[header]);\n }\n if (RowFormatter.isRowHashArray(row)) {\n return this.headers.map((header, i) => {\n const col = row[i];\n if (col) {\n return col[1];\n }\n return '';\n });\n }\n // if its a one dimensional array and headers were not provided\n // then just return the row\n if (RowFormatter.isRowArray(row) && !this.shouldWriteHeaders) {\n return row;\n }\n return this.headers.map((header, i) => row[i]);\n }\n callTransformer(row, cb) {\n if (!this._rowTransform) {\n return cb(null, row);\n }\n return this._rowTransform(row, cb);\n }\n formatColumns(columns, isHeadersRow) {\n const formattedCols = columns.map((field, i) => this.fieldFormatter.format(field, i, isHeadersRow)).join(this.formatterOptions.delimiter);\n const {\n rowCount\n } = this;\n this.rowCount += 1;\n if (rowCount) {\n return [this.formatterOptions.rowDelimiter, formattedCols].join('');\n }\n return formattedCols;\n }\n}\nexports.RowFormatter = RowFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXNmdW5jdGlvbl8xIiwiX19pbXBvcnREZWZhdWx0IiwicmVxdWlyZSIsImxvZGFzaF9pc2VxdWFsXzEiLCJGaWVsZEZvcm1hdHRlcl8xIiwidHlwZXNfMSIsIlJvd0Zvcm1hdHRlciIsImNvbnN0cnVjdG9yIiwiZm9ybWF0dGVyT3B0aW9ucyIsInJvd0NvdW50IiwiZmllbGRGb3JtYXR0ZXIiLCJGaWVsZEZvcm1hdHRlciIsImhlYWRlcnMiLCJzaG91bGRXcml0ZUhlYWRlcnMiLCJoYXNXcml0dGVuSGVhZGVycyIsInRyYW5zZm9ybSIsInJvd1RyYW5zZm9ybSIsImlzUm93SGFzaEFycmF5Iiwicm93IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNSb3dBcnJheSIsImdhdGhlckhlYWRlcnMiLCJtYXAiLCJpdCIsIk9iamVjdCIsImtleXMiLCJjcmVhdGVUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsImlzU3luY1RyYW5zZm9ybSIsImNiIiwidHJhbnNmb3JtZWRSb3ciLCJlIiwiZGVmYXVsdCIsIlR5cGVFcnJvciIsIl9yb3dUcmFuc2Zvcm0iLCJmb3JtYXQiLCJjYWxsVHJhbnNmb3JtZXIiLCJlcnIiLCJyb3dzIiwic2hvdWxkRm9ybWF0Q29sdW1ucyIsImNoZWNrSGVhZGVycyIsInB1c2giLCJmb3JtYXRDb2x1bW5zIiwiY29sdW1ucyIsImdhdGhlckNvbHVtbnMiLCJmaW5pc2giLCJhbHdheXNXcml0ZUhlYWRlcnMiLCJFcnJvciIsImluY2x1ZGVFbmRSb3dEZWxpbWl0ZXIiLCJyb3dEZWxpbWl0ZXIiLCJoZWFkZXIiLCJpIiwiY29sIiwiaXNIZWFkZXJzUm93IiwiZm9ybWF0dGVkQ29scyIsImZpZWxkIiwiam9pbiIsImRlbGltaXRlciIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZm9ybWF0dGVyL1Jvd0Zvcm1hdHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldFormatter = exports.RowFormatter = void 0;\nvar RowFormatter_1 = require(\"./RowFormatter\");\nObject.defineProperty(exports, \"RowFormatter\", {\n enumerable: true,\n get: function () {\n return RowFormatter_1.RowFormatter;\n }\n});\nvar FieldFormatter_1 = require(\"./FieldFormatter\");\nObject.defineProperty(exports, \"FieldFormatter\", {\n enumerable: true,\n get: function () {\n return FieldFormatter_1.FieldFormatter;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3dGb3JtYXR0ZXJfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUm93Rm9ybWF0dGVyIiwiRmllbGRGb3JtYXR0ZXJfMSIsIkZpZWxkRm9ybWF0dGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zvcm1hdHRlci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sY0FBQSxDQUFBTyxZQUFZO0VBQUE7QUFBQTtBQUNyQixJQUFBQyxnQkFBQSxHQUFBUCxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsZ0JBQUEsQ0FBQUMsY0FBYztFQUFBO0FBQUEifQ==", + "\"use strict\";\n\nvar __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\nvar __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = void 0 && (void 0).__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = exports.FormatterOptions = exports.CsvFormatterStream = void 0;\nconst util_1 = require(\"util\");\nconst stream_1 = require(\"stream\");\nconst fs = __importStar(require(\"fs\"));\nconst FormatterOptions_1 = require(\"./FormatterOptions\");\nconst CsvFormatterStream_1 = require(\"./CsvFormatterStream\");\n__exportStar(require(\"./types\"), exports);\nvar CsvFormatterStream_2 = require(\"./CsvFormatterStream\");\nObject.defineProperty(exports, \"CsvFormatterStream\", {\n enumerable: true,\n get: function () {\n return CsvFormatterStream_2.CsvFormatterStream;\n }\n});\nvar FormatterOptions_2 = require(\"./FormatterOptions\");\nObject.defineProperty(exports, \"FormatterOptions\", {\n enumerable: true,\n get: function () {\n return FormatterOptions_2.FormatterOptions;\n }\n});\nexports.format = options => new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options));\nexports.write = (rows, options) => {\n const csvStream = exports.format(options);\n const promiseWrite = util_1.promisify((row, cb) => {\n csvStream.write(row, undefined, cb);\n });\n rows.reduce((prev, row) => prev.then(() => promiseWrite(row)), Promise.resolve()).then(() => csvStream.end()).catch(err => {\n csvStream.emit('error', err);\n });\n return csvStream;\n};\nexports.writeToStream = (ws, rows, options) => exports.write(rows, options).pipe(ws);\nexports.writeToBuffer = function (rows) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const buffers = [];\n const ws = new stream_1.Writable({\n write(data, enc, writeCb) {\n buffers.push(data);\n writeCb();\n }\n });\n return new Promise((res, rej) => {\n ws.on('error', rej).on('finish', () => res(Buffer.concat(buffers)));\n exports.write(rows, opts).pipe(ws);\n });\n};\nexports.writeToString = (rows, options) => exports.writeToBuffer(rows, options).then(buffer => buffer.toString());\nexports.writeToPath = (path, rows, options) => {\n const stream = fs.createWriteStream(path, {\n encoding: 'utf8'\n });\n return exports.write(rows, options).pipe(stream);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlsXzEiLCJyZXF1aXJlIiwic3RyZWFtXzEiLCJmcyIsIl9faW1wb3J0U3RhciIsIkZvcm1hdHRlck9wdGlvbnNfMSIsIkNzdkZvcm1hdHRlclN0cmVhbV8xIiwiX19leHBvcnRTdGFyIiwiZXhwb3J0cyIsIkNzdkZvcm1hdHRlclN0cmVhbV8yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ3N2Rm9ybWF0dGVyU3RyZWFtIiwiRm9ybWF0dGVyT3B0aW9uc18yIiwiRm9ybWF0dGVyT3B0aW9ucyIsImZvcm1hdCIsIm9wdGlvbnMiLCJ3cml0ZSIsInJvd3MiLCJjc3ZTdHJlYW0iLCJwcm9taXNlV3JpdGUiLCJwcm9taXNpZnkiLCJyb3ciLCJjYiIsInVuZGVmaW5lZCIsInJlZHVjZSIsInByZXYiLCJ0aGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJlbmQiLCJjYXRjaCIsImVyciIsImVtaXQiLCJ3cml0ZVRvU3RyZWFtIiwid3MiLCJwaXBlIiwid3JpdGVUb0J1ZmZlciIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJidWZmZXJzIiwiV3JpdGFibGUiLCJkYXRhIiwiZW5jIiwid3JpdGVDYiIsInB1c2giLCJyZXMiLCJyZWoiLCJvbiIsIkJ1ZmZlciIsImNvbmNhdCIsIndyaXRlVG9TdHJpbmciLCJidWZmZXIiLCJ0b1N0cmluZyIsIndyaXRlVG9QYXRoIiwicGF0aCIsInN0cmVhbSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZW5jb2RpbmciXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE1BQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLE1BQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLE1BQUFFLEVBQUEsR0FBQUMsWUFBQSxDQUFBSCxPQUFBO0FBRUEsTUFBQUks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", + "\"use strict\";\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isSyncTransform = void 0;\nexports.isSyncTransform = transform => transform.length === 1;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiaXNTeW5jVHJhbnNmb3JtIiwidHJhbnNmb3JtIiwibGVuZ3RoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOztBQUFBOzs7OztBQVlhQSxPQUFBLENBQUFDLGVBQWUsR0FDeEJDLFNBQXFDLElBQ0NBLFNBQVMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMifQ==", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvParserStream = void 0;\nconst string_decoder_1 = require(\"string_decoder\");\nconst stream_1 = require(\"stream\");\nconst transforms_1 = require(\"./transforms\");\nconst parser_1 = require(\"./parser\");\nclass CsvParserStream extends stream_1.Transform {\n constructor(parserOptions) {\n super({\n objectMode: parserOptions.objectMode\n });\n this.lines = '';\n this.rowCount = 0;\n this.parsedRowCount = 0;\n this.parsedLineCount = 0;\n this.endEmitted = false;\n this.headersEmitted = false;\n this.parserOptions = parserOptions;\n this.parser = new parser_1.Parser(parserOptions);\n this.headerTransformer = new transforms_1.HeaderTransformer(parserOptions);\n this.decoder = new string_decoder_1.StringDecoder(parserOptions.encoding);\n this.rowTransformerValidator = new transforms_1.RowTransformerValidator();\n }\n get hasHitRowLimit() {\n return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows;\n }\n get shouldEmitRows() {\n return this.parsedRowCount > this.parserOptions.skipRows;\n }\n get shouldSkipLine() {\n return this.parsedLineCount <= this.parserOptions.skipLines;\n }\n transform(transformFunction) {\n this.rowTransformerValidator.rowTransform = transformFunction;\n return this;\n }\n validate(validateFunction) {\n this.rowTransformerValidator.rowValidator = validateFunction;\n return this;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n emit(event) {\n if (event === 'end') {\n if (!this.endEmitted) {\n this.endEmitted = true;\n super.emit('end', this.rowCount);\n }\n return false;\n }\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n return super.emit(event, ...rest);\n }\n _transform(data, encoding, done) {\n // if we have hit our maxRows parsing limit then skip parsing\n if (this.hasHitRowLimit) {\n return done();\n }\n const wrappedCallback = CsvParserStream.wrapDoneCallback(done);\n try {\n const {\n lines\n } = this;\n const newLine = lines + this.decoder.write(data);\n const rows = this.parse(newLine, true);\n return this.processRows(rows, wrappedCallback);\n } catch (e) {\n return wrappedCallback(e);\n }\n }\n _flush(done) {\n const wrappedCallback = CsvParserStream.wrapDoneCallback(done);\n // if we have hit our maxRows parsing limit then skip parsing\n if (this.hasHitRowLimit) {\n return wrappedCallback();\n }\n try {\n const newLine = this.lines + this.decoder.end();\n const rows = this.parse(newLine, false);\n return this.processRows(rows, wrappedCallback);\n } catch (e) {\n return wrappedCallback(e);\n }\n }\n parse(data, hasMoreData) {\n if (!data) {\n return [];\n }\n const {\n line,\n rows\n } = this.parser.parse(data, hasMoreData);\n this.lines = line;\n return rows;\n }\n processRows(rows, cb) {\n const rowsLength = rows.length;\n const iterate = i => {\n const callNext = err => {\n if (err) {\n return cb(err);\n }\n if (i % 100 === 0) {\n // incase the transform are sync insert a next tick to prevent stack overflow\n setImmediate(() => iterate(i + 1));\n return undefined;\n }\n return iterate(i + 1);\n };\n this.checkAndEmitHeaders();\n // if we have emitted all rows or we have hit the maxRows limit option\n // then end\n if (i >= rowsLength || this.hasHitRowLimit) {\n return cb();\n }\n this.parsedLineCount += 1;\n if (this.shouldSkipLine) {\n return callNext();\n }\n const row = rows[i];\n this.rowCount += 1;\n this.parsedRowCount += 1;\n const nextRowCount = this.rowCount;\n return this.transformRow(row, (err, transformResult) => {\n if (err) {\n this.rowCount -= 1;\n return callNext(err);\n }\n if (!transformResult) {\n return callNext(new Error('expected transform result'));\n }\n if (!transformResult.isValid) {\n this.emit('data-invalid', transformResult.row, nextRowCount, transformResult.reason);\n } else if (transformResult.row) {\n return this.pushRow(transformResult.row, callNext);\n }\n return callNext();\n });\n };\n iterate(0);\n }\n transformRow(parsedRow, cb) {\n try {\n this.headerTransformer.transform(parsedRow, (err, withHeaders) => {\n if (err) {\n return cb(err);\n }\n if (!withHeaders) {\n return cb(new Error('Expected result from header transform'));\n }\n if (!withHeaders.isValid) {\n if (this.shouldEmitRows) {\n return cb(null, {\n isValid: false,\n row: parsedRow\n });\n }\n // skipped because of skipRows option remove from total row count\n return this.skipRow(cb);\n }\n if (withHeaders.row) {\n if (this.shouldEmitRows) {\n return this.rowTransformerValidator.transformAndValidate(withHeaders.row, cb);\n }\n // skipped because of skipRows option remove from total row count\n return this.skipRow(cb);\n }\n // this is a header row dont include in the rowCount or parsedRowCount\n this.rowCount -= 1;\n this.parsedRowCount -= 1;\n return cb(null, {\n row: null,\n isValid: true\n });\n });\n } catch (e) {\n cb(e);\n }\n }\n checkAndEmitHeaders() {\n if (!this.headersEmitted && this.headerTransformer.headers) {\n this.headersEmitted = true;\n this.emit('headers', this.headerTransformer.headers);\n }\n }\n skipRow(cb) {\n // skipped because of skipRows option remove from total row count\n this.rowCount -= 1;\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n pushRow(row, cb) {\n try {\n if (!this.parserOptions.objectMode) {\n this.push(JSON.stringify(row));\n } else {\n this.push(row);\n }\n cb();\n } catch (e) {\n cb(e);\n }\n }\n static wrapDoneCallback(done) {\n let errorCalled = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (err) {\n if (err) {\n if (errorCalled) {\n throw err;\n }\n errorCalled = true;\n done(err);\n return;\n }\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n done(...args);\n };\n }\n}\nexports.CsvParserStream = CsvParserStream;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHJpbmdfZGVjb2Rlcl8xIiwicmVxdWlyZSIsInN0cmVhbV8xIiwidHJhbnNmb3Jtc18xIiwicGFyc2VyXzEiLCJDc3ZQYXJzZXJTdHJlYW0iLCJUcmFuc2Zvcm0iLCJjb25zdHJ1Y3RvciIsInBhcnNlck9wdGlvbnMiLCJvYmplY3RNb2RlIiwibGluZXMiLCJyb3dDb3VudCIsInBhcnNlZFJvd0NvdW50IiwicGFyc2VkTGluZUNvdW50IiwiZW5kRW1pdHRlZCIsImhlYWRlcnNFbWl0dGVkIiwicGFyc2VyIiwiUGFyc2VyIiwiaGVhZGVyVHJhbnNmb3JtZXIiLCJIZWFkZXJUcmFuc2Zvcm1lciIsImRlY29kZXIiLCJTdHJpbmdEZWNvZGVyIiwiZW5jb2RpbmciLCJyb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIsIlJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yIiwiaGFzSGl0Um93TGltaXQiLCJsaW1pdFJvd3MiLCJtYXhSb3dzIiwic2hvdWxkRW1pdFJvd3MiLCJza2lwUm93cyIsInNob3VsZFNraXBMaW5lIiwic2tpcExpbmVzIiwidHJhbnNmb3JtIiwidHJhbnNmb3JtRnVuY3Rpb24iLCJyb3dUcmFuc2Zvcm0iLCJ2YWxpZGF0ZSIsInZhbGlkYXRlRnVuY3Rpb24iLCJyb3dWYWxpZGF0b3IiLCJlbWl0IiwiZXZlbnQiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwicmVzdCIsIkFycmF5IiwiX2tleSIsIl90cmFuc2Zvcm0iLCJkYXRhIiwiZG9uZSIsIndyYXBwZWRDYWxsYmFjayIsIndyYXBEb25lQ2FsbGJhY2siLCJuZXdMaW5lIiwid3JpdGUiLCJyb3dzIiwicGFyc2UiLCJwcm9jZXNzUm93cyIsImUiLCJfZmx1c2giLCJlbmQiLCJoYXNNb3JlRGF0YSIsImxpbmUiLCJjYiIsInJvd3NMZW5ndGgiLCJpdGVyYXRlIiwiaSIsImNhbGxOZXh0IiwiZXJyIiwic2V0SW1tZWRpYXRlIiwidW5kZWZpbmVkIiwiY2hlY2tBbmRFbWl0SGVhZGVycyIsInJvdyIsIm5leHRSb3dDb3VudCIsInRyYW5zZm9ybVJvdyIsInRyYW5zZm9ybVJlc3VsdCIsIkVycm9yIiwiaXNWYWxpZCIsInJlYXNvbiIsInB1c2hSb3ciLCJwYXJzZWRSb3ciLCJ3aXRoSGVhZGVycyIsInNraXBSb3ciLCJ0cmFuc2Zvcm1BbmRWYWxpZGF0ZSIsImhlYWRlcnMiLCJwdXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImVycm9yQ2FsbGVkIiwiX2xlbjIiLCJhcmdzIiwiX2tleTIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NzdlBhcnNlclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBQUEsZ0JBQUEsR0FBQUMsT0FBQTtBQUNBLE1BQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUVBLE1BQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUNBLE1BQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUdBLE1BQWFJLGVBQThDLFNBQVFILFFBQUEsQ0FBQUksU0FBUztFQXVCeEVDLFlBQW1CQyxhQUE0QjtJQUMzQyxLQUFLLENBQUM7TUFBRUMsVUFBVSxFQUFFRCxhQUFhLENBQUNDO0lBQVUsQ0FBRSxDQUFDO0lBYjNDLEtBQUFDLEtBQUssR0FBRyxFQUFFO0lBRVYsS0FBQUMsUUFBUSxHQUFHLENBQUM7SUFFWixLQUFBQyxjQUFjLEdBQUcsQ0FBQztJQUVsQixLQUFBQyxlQUFlLEdBQUcsQ0FBQztJQUVuQixLQUFBQyxVQUFVLEdBQUcsS0FBSztJQUVsQixLQUFBQyxjQUFjLEdBQUcsS0FBSztJQUkxQixJQUFJLENBQUNQLGFBQWEsR0FBR0EsYUFBYTtJQUNsQyxJQUFJLENBQUNRLE1BQU0sR0FBRyxJQUFJWixRQUFBLENBQUFhLE1BQU0sQ0FBQ1QsYUFBYSxDQUFDO0lBQ3ZDLElBQUksQ0FBQ1UsaUJBQWlCLEdBQUcsSUFBSWYsWUFBQSxDQUFBZ0IsaUJBQWlCLENBQUNYLGFBQWEsQ0FBQztJQUM3RCxJQUFJLENBQUNZLE9BQU8sR0FBRyxJQUFJ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", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ParserOptions = void 0;\nconst lodash_escaperegexp_1 = __importDefault(require(\"lodash.escaperegexp\"));\nconst lodash_isnil_1 = __importDefault(require(\"lodash.isnil\"));\nclass ParserOptions {\n constructor(opts) {\n var _a;\n this.objectMode = true;\n this.delimiter = ',';\n this.ignoreEmpty = false;\n this.quote = '\"';\n this.escape = null;\n this.escapeChar = this.quote;\n this.comment = null;\n this.supportsComments = false;\n this.ltrim = false;\n this.rtrim = false;\n this.trim = false;\n this.headers = null;\n this.renameHeaders = false;\n this.strictColumnHandling = false;\n this.discardUnmappedColumns = false;\n this.carriageReturn = '\\r';\n this.encoding = 'utf8';\n this.limitRows = false;\n this.maxRows = 0;\n this.skipLines = 0;\n this.skipRows = 0;\n Object.assign(this, opts || {});\n if (this.delimiter.length > 1) {\n throw new Error('delimiter option must be one character long');\n }\n this.escapedDelimiter = lodash_escaperegexp_1.default(this.delimiter);\n this.escapeChar = (_a = this.escape) !== null && _a !== void 0 ? _a : this.quote;\n this.supportsComments = !lodash_isnil_1.default(this.comment);\n this.NEXT_TOKEN_REGEXP = new RegExp(`([^\\\\s]|\\\\r\\\\n|\\\\n|\\\\r|${this.escapedDelimiter})`);\n if (this.maxRows > 0) {\n this.limitRows = true;\n }\n }\n}\nexports.ParserOptions = ParserOptions;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfZXNjYXBlcmVnZXhwXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZXF1aXJlIiwibG9kYXNoX2lzbmlsXzEiLCJQYXJzZXJPcHRpb25zIiwiY29uc3RydWN0b3IiLCJvcHRzIiwib2JqZWN0TW9kZSIsImRlbGltaXRlciIsImlnbm9yZUVtcHR5IiwicXVvdGUiLCJlc2NhcGUiLCJlc2NhcGVDaGFyIiwiY29tbWVudCIsInN1cHBvcnRzQ29tbWVudHMiLCJsdHJpbSIsInJ0cmltIiwidHJpbSIsImhlYWRlcnMiLCJyZW5hbWVIZWFkZXJzIiwic3RyaWN0Q29sdW1uSGFuZGxpbmciLCJkaXNjYXJkVW5tYXBwZWRDb2x1bW5zIiwiY2FycmlhZ2VSZXR1cm4iLCJlbmNvZGluZyIsImxpbWl0Um93cyIsIm1heFJvd3MiLCJza2lwTGluZXMiLCJza2lwUm93cyIsIk9iamVjdCIsImFzc2lnbiIsImxlbmd0aCIsIkVycm9yIiwiZXNjYXBlZERlbGltaXRlciIsImRlZmF1bHQiLCJfYSIsIk5FWFRfVE9LRU5fUkVHRVhQIiwiUmVnRXhwIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QYXJzZXJPcHRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE1BQUFBLHFCQUFBLEdBQUFDLGVBQUEsQ0FBQUMsT0FBQTtBQUNBLE1BQUFDLGNBQUEsR0FBQUYsZUFBQSxDQUFBQyxPQUFBO0FBdUJBLE1BQWFFLGFBQWE7RUErQ3RCQyxZQUFtQkMsSUFBd0I7O0lBNUMzQixLQUFBQyxVQUFVLEdBQVksSUFBSTtJQUUxQixLQUFBQyxTQUFTLEdBQVcsR0FBRztJQUV2QixLQUFBQyxXQUFXLEdBQVksS0FBSztJQUU1QixLQUFBQyxLQUFLLEdBQWtCLEdBQUc7SUFFMUIsS0FBQUMsTUFBTSxHQUFrQixJQUFJO0lBRTVCLEtBQUFDLFVBQVUsR0FBa0IsSUFBSSxDQUFDRixLQUFLO0lBRXRDLEtBQUFHLE9BQU8sR0FBa0IsSUFBSTtJQUU3QixLQUFBQyxnQkFBZ0IsR0FBWSxLQUFLO0lBRWpDLEtBQUFDLEtBQUssR0FBWSxLQUFLO0lBRXRCLEtBQUFDLEtBQUssR0FBWSxLQUFLO0lBRXRCLEtBQUFDLElBQUksR0FBWSxLQUFLO0lBRXJCLEtBQUFDLE9BQU8sR0FBMkQsSUFBSTtJQUV0RSxLQUFBQyxhQUFhLEdBQVksS0FBSztJQUU5QixLQUFBQyxvQkFBb0IsR0FBWSxLQUFLO0lBRXJDLEtBQUFDLHNCQUFzQixHQUFZLEtBQUs7SUFFdkMsS0FBQUMsY0FBYyxHQUFXLElBQUk7SUFJN0IsS0FBQUMsUUFBUSxHQUFtQixNQUFNO0lBRWpDLEtBQUFDLFNBQVMsR0FBWSxLQUFLO0lBRTFCLEtBQUFDLE9BQU8sR0FBVyxDQUFDO0lBRW5CLEtBQUFDLFNBQVMsR0FBVyxDQUFDO0lBRXJCLEtBQUFDLFFBQVEsR0FBVyxDQUFDO0lBR2hDQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLEVBQUV2QixJQUFJLElBQUksRUFBRSxDQUFDO0lBQy9CLElBQUksSUFBSSxDQUFDRSxTQUFTLENBQUNzQixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzNCLE1BQU0sSUFBSUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDOztJQUVsRSxJQUFJLENBQUNDLGdCQUFnQixHQUFHaEMscUJBQUEsQ0FBQWlDLE9BQVksQ0FBQyxJQUFJLENBQUN6QixTQUFTLENBQUM7SUFDcEQsSUFBSSxDQUFDSSxVQUFVLElBQUFzQixFQUFBLEdBQUcsSUFBSSxDQUFDdkIsTUFBTSxjQUFBdUIsRUFBQSxjQUFBQSxFQUFBLEdBQUksSUFBSSxDQUFDeEIsS0FBSztJQUMzQyxJQUFJLENBQUNJLGdCQUFnQixHQUFHLENBQUNYLGNBQUEsQ0FBQThCLE9BQUssQ0FBQyxJQUFJLENBQUNwQixPQUFPLENBQUM7SUFDNUMsSUFBSSxDQUFDc0IsaUJBQWlCLEdBQUcsSUFBSUMsTUFBTSxDQUFDLDBCQUEwQixJQUFJLENBQUNKLGdCQUFnQixHQUFHLENBQUM7SUFFdkYsSUFBSSxJQUFJLENBQUNQLE9BQU8sR0FBRyxDQUFDLEVBQUU7TUFDbEIsSUFBSSxDQUFDRCxTQUFTLEdBQUcsSUFBSTs7RUFFN0I7O0FBNURKYSxPQUFBLENBQUFqQyxhQUFBLEdBQUFBLGFBQUEifQ==", + "\"use strict\";\n\nvar __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\nvar __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = void 0 && (void 0).__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseString = exports.parseFile = exports.parseStream = exports.parse = exports.ParserOptions = exports.CsvParserStream = void 0;\nconst fs = __importStar(require(\"fs\"));\nconst stream_1 = require(\"stream\");\nconst ParserOptions_1 = require(\"./ParserOptions\");\nconst CsvParserStream_1 = require(\"./CsvParserStream\");\n__exportStar(require(\"./types\"), exports);\nvar CsvParserStream_2 = require(\"./CsvParserStream\");\nObject.defineProperty(exports, \"CsvParserStream\", {\n enumerable: true,\n get: function () {\n return CsvParserStream_2.CsvParserStream;\n }\n});\nvar ParserOptions_2 = require(\"./ParserOptions\");\nObject.defineProperty(exports, \"ParserOptions\", {\n enumerable: true,\n get: function () {\n return ParserOptions_2.ParserOptions;\n }\n});\nexports.parse = args => new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args));\nexports.parseStream = (stream, options) => stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\nexports.parseFile = function (location) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\n};\nexports.parseString = (string, options) => {\n const rs = new stream_1.Readable();\n rs.push(string);\n rs.push(null);\n return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsIl9faW1wb3J0U3RhciIsInJlcXVpcmUiLCJzdHJlYW1fMSIsIlBhcnNlck9wdGlvbnNfMSIsIkNzdlBhcnNlclN0cmVhbV8xIiwiX19leHBvcnRTdGFyIiwiZXhwb3J0cyIsIkNzdlBhcnNlclN0cmVhbV8yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ3N2UGFyc2VyU3RyZWFtIiwiUGFyc2VyT3B0aW9uc18yIiwiUGFyc2VyT3B0aW9ucyIsInBhcnNlIiwiYXJncyIsInBhcnNlU3RyZWFtIiwic3RyZWFtIiwib3B0aW9ucyIsInBpcGUiLCJwYXJzZUZpbGUiLCJsb2NhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJwYXJzZVN0cmluZyIsInN0cmluZyIsInJzIiwiUmVhZGFibGUiLCJwdXNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFBQSxFQUFBLEdBQUFDLFlBQUEsQ0FBQUMsT0FBQTtBQUNBLE1BQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLE1BQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUNBLE1BQUFHLGlCQUFBLEdBQUFILE9BQUE7QUFHQUksWUFBQSxDQUFBSixPQUFBLGFBQUFLLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBTixPQUFBO0FBQVNPLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxPQUFBO0VBQUFJLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUosaUJBQUEsQ0FBQUssZUFBZTtFQUFBO0FBQUE7QUFDeEIsSUFBQUMsZUFBQSxHQUFBWixPQUFBO0FBQVNPLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxPQUFBO0VBQUFJLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsZUFBQSxDQUFBQyxhQUFhO0VBQUE7QUFBQTtBQUVUUixPQUFBLENBQUFTLEtBQUssR0FBa0NDLElBQXdCLElBQ3hFLElBQUlaLGlCQUFBLENBQUFRLGVBQWUsQ0FBQyxJQUFJVCxlQUFBLENBQUFXLGFBQWEsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7QUFFbkNWLE9BQUEsQ0FBQVcsV0FBVyxHQUFHLENBQ3ZCQyxNQUE2QixFQUM3QkMsT0FBMkIsS0FDSEQsTUFBTSxDQUFDRSxJQUFJLENBQUMsSUFBSWhCLGlCQUFBLENBQUFRLGVBQWUsQ0FBQyxJQUFJVCxlQUFBLENBQUFXLGFBQWEsQ0FBQ0ssT0FBTyxDQUFDLENBQUMsQ0FBQztBQUUzRWIsT0FBQSxDQUFBZSxTQUFTLEdBQUcsVUFDckJDLFFBQWdCO0VBQUEsSUFDaEJILE9BQUEsR0FBQUksU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQTZCLEVBQUU7RUFBQSxPQUNQeEIsRUFBRSxDQUFDMkIsZ0JBQWdCLENBQUNKLFFBQVEsQ0FBQyxDQUFDRixJQUFJLENBQUMsSUFBSWhCLGlCQUFBLENBQUFRLGVBQWUsQ0FBQyxJQUFJVCxlQUFBLENBQUFXLGFBQWEsQ0FBQ0ssT0FBTyxDQUFDLENBQUMsQ0FBQztBQUFBO0FBRWxHYixPQUFBLENBQUFxQixXQUFXLEdBQUcsQ0FDdkJDLE1BQWMsRUFDZFQsT0FBMkIsS0FDSjtFQUN2QixNQUFNVSxFQUFFLEdBQUcsSUFBSTNCLFFBQUEsQ0FBQTRCLFFBQVEsRUFBRTtFQUN6QkQsRUFBRSxDQUFDRSxJQUFJLENBQUNILE1BQU0sQ0FBQztFQUNmQyxFQUFFLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDYixPQUFPRixFQUFFLENBQUNULElBQUksQ0FBQyxJQUFJaEIsaUJBQUEsQ0FBQVEsZUFBZSxDQUFDLElBQUlULGVBQUEsQ0FBQVcsYUFBYSxDQUFDSyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUMifQ==", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Parser = void 0;\nconst Scanner_1 = require(\"./Scanner\");\nconst RowParser_1 = require(\"./RowParser\");\nconst Token_1 = require(\"./Token\");\nclass Parser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.rowParser = new RowParser_1.RowParser(this.parserOptions);\n }\n static removeBOM(line) {\n // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string\n // conversion translates it to FEFF (UTF-16 BOM)\n if (line && line.charCodeAt(0) === 0xfeff) {\n return line.slice(1);\n }\n return line;\n }\n parse(line, hasMoreData) {\n const scanner = new Scanner_1.Scanner({\n line: Parser.removeBOM(line),\n parserOptions: this.parserOptions,\n hasMoreData\n });\n if (this.parserOptions.supportsComments) {\n return this.parseWithComments(scanner);\n }\n return this.parseWithoutComments(scanner);\n }\n parseWithoutComments(scanner) {\n const rows = [];\n let shouldContinue = true;\n while (shouldContinue) {\n shouldContinue = this.parseRow(scanner, rows);\n }\n return {\n line: scanner.line,\n rows\n };\n }\n parseWithComments(scanner) {\n const {\n parserOptions\n } = this;\n const rows = [];\n for (let nextToken = scanner.nextCharacterToken; nextToken !== null; nextToken = scanner.nextCharacterToken) {\n if (Token_1.Token.isTokenComment(nextToken, parserOptions)) {\n const cursor = scanner.advancePastLine();\n if (cursor === null) {\n return {\n line: scanner.lineFromCursor,\n rows\n };\n }\n if (!scanner.hasMoreCharacters) {\n return {\n line: scanner.lineFromCursor,\n rows\n };\n }\n scanner.truncateToCursor();\n } else if (!this.parseRow(scanner, rows)) {\n break;\n }\n }\n return {\n line: scanner.line,\n rows\n };\n }\n parseRow(scanner, rows) {\n const nextToken = scanner.nextNonSpaceToken;\n if (!nextToken) {\n return false;\n }\n const row = this.rowParser.parse(scanner);\n if (row === null) {\n return false;\n }\n if (this.parserOptions.ignoreEmpty && RowParser_1.RowParser.isEmptyRow(row)) {\n return true;\n }\n rows.push(row);\n return true;\n }\n}\nexports.Parser = Parser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTY2FubmVyXzEiLCJyZXF1aXJlIiwiUm93UGFyc2VyXzEiLCJUb2tlbl8xIiwiUGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwicm93UGFyc2VyIiwiUm93UGFyc2VyIiwicmVtb3ZlQk9NIiwibGluZSIsImNoYXJDb2RlQXQiLCJzbGljZSIsInBhcnNlIiwiaGFzTW9yZURhdGEiLCJzY2FubmVyIiwiU2Nhbm5lciIsInN1cHBvcnRzQ29tbWVudHMiLCJwYXJzZVdpdGhDb21tZW50cyIsInBhcnNlV2l0aG91dENvbW1lbnRzIiwicm93cyIsInNob3VsZENvbnRpbnVlIiwicGFyc2VSb3ciLCJuZXh0VG9rZW4iLCJuZXh0Q2hhcmFjdGVyVG9rZW4iLCJUb2tlbiIsImlzVG9rZW5Db21tZW50IiwiY3Vyc29yIiwiYWR2YW5jZVBhc3RMaW5lIiwibGluZUZyb21DdXJzb3IiLCJoYXNNb3JlQ2hhcmFjdGVycyIsInRydW5jYXRlVG9DdXJzb3IiLCJuZXh0Tm9uU3BhY2VUb2tlbiIsInJvdyIsImlnbm9yZUVtcHR5IiwiaXNFbXB0eVJvdyIsInB1c2giLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhcnNlci9QYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQUFBLFNBQUEsR0FBQUMsT0FBQTtBQUNBLE1BQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUdBLE1BQUFFLE9BQUEsR0FBQUYsT0FBQTtBQU1BLE1BQWFHLE1BQU07RUFjZkMsWUFBbUJDLGFBQTRCO0lBQzNDLElBQUksQ0FBQ0EsYUFBYSxHQUFHQSxhQUFhO0lBQ2xDLElBQUksQ0FBQ0MsU0FBUyxHQUFHLElBQUlMLFdBQUEsQ0FBQU0sU0FBUyxDQUFDLElBQUksQ0FBQ0YsYUFBYSxDQUFDO0VBQ3REO0VBaEJRLE9BQU9HLFNBQVNBLENBQUNDLElBQVk7SUFDakM7SUFDQTtJQUNBLElBQUlBLElBQUksSUFBSUEs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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowParser = void 0;\nconst column_1 = require(\"./column\");\nconst Token_1 = require(\"./Token\");\nconst EMPTY_STRING = '';\nclass RowParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.columnParser = new column_1.ColumnParser(parserOptions);\n }\n static isEmptyRow(row) {\n return row.join(EMPTY_STRING).replace(/\\s+/g, EMPTY_STRING) === EMPTY_STRING;\n }\n parse(scanner) {\n const {\n parserOptions\n } = this;\n const {\n hasMoreData\n } = scanner;\n const currentScanner = scanner;\n const columns = [];\n let currentToken = this.getStartToken(currentScanner, columns);\n while (currentToken) {\n if (Token_1.Token.isTokenRowDelimiter(currentToken)) {\n currentScanner.advancePastToken(currentToken);\n // if ends with CR and there is more data, keep unparsed due to possible\n // coming LF in CRLF\n if (!currentScanner.hasMoreCharacters && Token_1.Token.isTokenCarriageReturn(currentToken, parserOptions) && hasMoreData) {\n return null;\n }\n currentScanner.truncateToCursor();\n return columns;\n }\n if (!this.shouldSkipColumnParse(currentScanner, currentToken, columns)) {\n const item = this.columnParser.parse(currentScanner);\n if (item === null) {\n return null;\n }\n columns.push(item);\n }\n currentToken = currentScanner.nextNonSpaceToken;\n }\n if (!hasMoreData) {\n currentScanner.truncateToCursor();\n return columns;\n }\n return null;\n }\n getStartToken(scanner, columns) {\n const currentToken = scanner.nextNonSpaceToken;\n if (currentToken !== null && Token_1.Token.isTokenDelimiter(currentToken, this.parserOptions)) {\n columns.push('');\n return scanner.nextNonSpaceToken;\n }\n return currentToken;\n }\n shouldSkipColumnParse(scanner, currentToken, columns) {\n const {\n parserOptions\n } = this;\n if (Token_1.Token.isTokenDelimiter(currentToken, parserOptions)) {\n scanner.advancePastToken(currentToken);\n // if the delimiter is at the end of a line\n const nextToken = scanner.nextCharacterToken;\n if (!scanner.hasMoreCharacters || nextToken !== null && Token_1.Token.isTokenRowDelimiter(nextToken)) {\n columns.push('');\n return true;\n }\n if (nextToken !== null && Token_1.Token.isTokenDelimiter(nextToken, parserOptions)) {\n columns.push('');\n return true;\n }\n }\n return false;\n }\n}\nexports.RowParser = RowParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5fMSIsInJlcXVpcmUiLCJUb2tlbl8xIiwiRU1QVFlfU1RSSU5HIiwiUm93UGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwiY29sdW1uUGFyc2VyIiwiQ29sdW1uUGFyc2VyIiwiaXNFbXB0eVJvdyIsInJvdyIsImpvaW4iLCJyZXBsYWNlIiwicGFyc2UiLCJzY2FubmVyIiwiaGFzTW9yZURhdGEiLCJjdXJyZW50U2Nhbm5lciIsImNvbHVtbnMiLCJjdXJyZW50VG9rZW4iLCJnZXRTdGFydFRva2VuIiwiVG9rZW4iLCJpc1Rva2VuUm93RGVsaW1pdGVyIiwiYWR2YW5jZVBhc3RUb2tlbiIsImhhc01vcmVDaGFyYWN0ZXJzIiwiaXNUb2tlbkNhcnJpYWdlUmV0dXJuIiwidHJ1bmNhdGVUb0N1cnNvciIsInNob3VsZFNraXBDb2x1bW5QYXJzZSIsIml0ZW0iLCJwdXNoIiwibmV4dE5vblNwYWNlVG9rZW4iLCJpc1Rva2VuRGVsaW1pdGVyIiwibmV4dFRva2VuIiwibmV4dENoYXJhY3RlclRva2VuIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvUm93UGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxNQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFHQSxNQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxNQUFNRSxZQUFZLEdBQUcsRUFBRTtBQUV2QixNQUFhQyxTQUFTO0VBU2xCQyxZQUFtQkMsYUFBNEI7SUFDM0MsSUFBSSxDQUFDQSxhQUFhLEdBQUdBLGFBQWE7SUFDbEMsSUFBSSxDQUFDQyxZQUFZLEdBQUcsSUFBSVAsUUFBQSxDQUFBUSxZQUFZLENBQUNGLGFBQWEsQ0FBQztFQUN2RDtFQVhBLE9BQU9HLFVBQVVBLENBQUNDLEdBQWE7SUFDM0IsT0FBT0EsR0FBRyxDQUFDQyxJQUFJLENBQUNSLFlBQVksQ0FBQyxDQUFDUyxPQUFPLENBQUMsTUFB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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scanner = void 0;\nconst Token_1 = require(\"./Token\");\nconst ROW_DELIMITER = /((?:\\r\\n)|\\n|\\r)/;\nclass Scanner {\n constructor(args) {\n this.cursor = 0;\n this.line = args.line;\n this.lineLength = this.line.length;\n this.parserOptions = args.parserOptions;\n this.hasMoreData = args.hasMoreData;\n this.cursor = args.cursor || 0;\n }\n get hasMoreCharacters() {\n return this.lineLength > this.cursor;\n }\n get nextNonSpaceToken() {\n const {\n lineFromCursor\n } = this;\n const regex = this.parserOptions.NEXT_TOKEN_REGEXP;\n if (lineFromCursor.search(regex) === -1) {\n return null;\n }\n const match = regex.exec(lineFromCursor);\n if (match == null) {\n return null;\n }\n const token = match[1];\n const startCursor = this.cursor + (match.index || 0);\n return new Token_1.Token({\n token,\n startCursor,\n endCursor: startCursor + token.length - 1\n });\n }\n get nextCharacterToken() {\n const {\n cursor,\n lineLength\n } = this;\n if (lineLength <= cursor) {\n return null;\n }\n return new Token_1.Token({\n token: this.line[cursor],\n startCursor: cursor,\n endCursor: cursor\n });\n }\n get lineFromCursor() {\n return this.line.substr(this.cursor);\n }\n advancePastLine() {\n const match = ROW_DELIMITER.exec(this.lineFromCursor);\n if (!match) {\n if (this.hasMoreData) {\n return null;\n }\n this.cursor = this.lineLength;\n return this;\n }\n this.cursor += (match.index || 0) + match[0].length;\n return this;\n }\n advanceTo(cursor) {\n this.cursor = cursor;\n return this;\n }\n advanceToToken(token) {\n this.cursor = token.startCursor;\n return this;\n }\n advancePastToken(token) {\n this.cursor = token.endCursor + 1;\n return this;\n }\n truncateToCursor() {\n this.line = this.lineFromCursor;\n this.lineLength = this.line.length;\n this.cursor = 0;\n return this;\n }\n}\nexports.Scanner = Scanner;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb2tlbl8xIiwicmVxdWlyZSIsIlJPV19ERUxJTUlURVIiLCJTY2FubmVyIiwiY29uc3RydWN0b3IiLCJhcmdzIiwiY3Vyc29yIiwibGluZSIsImxpbmVMZW5ndGgiLCJsZW5ndGgiLCJwYXJzZXJPcHRpb25zIiwiaGFzTW9yZURhdGEiLCJoYXNNb3JlQ2hhcmFjdGVycyIsIm5leHROb25TcGFjZVRva2VuIiwibGluZUZyb21DdXJzb3IiLCJyZWdleCIsIk5FWFRfVE9LRU5fUkVHRVhQIiwic2VhcmNoIiwibWF0Y2giLCJleGVjIiwidG9rZW4iLCJzdGFydEN1cnNvciIsImluZGV4IiwiVG9rZW4iLCJlbmRDdXJzb3IiLCJuZXh0Q2hhcmFjdGVyVG9rZW4iLCJzdWJzdHIiLCJhZHZhbmNlUGFzdExpbmUiLCJhZHZhbmNlVG8iLCJhZHZhbmNlVG9Ub2tlbiIsImFkdmFuY2VQYXN0VG9rZW4iLCJ0cnVuY2F0ZVRvQ3Vyc29yIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvU2Nhbm5lci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBRUEsTUFBTUMsYUFBYSxHQUFHLGtCQUFrQjtBQVN4QyxNQUFhQyxPQUFPO0VBV2hCQyxZQUFtQkMsSUFBaUI7SUFGN0IsS0FBQUMsTUFBTSxHQUFHLENBQUM7SUFHYixJQUFJLENBQUNDLElBQUksR0FBR0YsSUFBSSxDQUFDRSxJQUFJO0lBQ3JCLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUksQ0FBQ0QsSUFBSSxDQUFDRSxNQUFNO0lBQ2xDLElBQUksQ0FBQ0MsYUFBYSxHQUFHTCxJQUFJLENBQUNLLGFBQWE7SUFDdkMsSUFBSSxDQUFDQyxXQUFXLEdBQUdOLElBQUksQ0FBQ00sV0FBVztJQUNuQyxJQUFJLENBQUNMLE1BQU0sR0FBR0QsSUFBSSxDQUFDQyxNQUFNLElBQUksQ0FBQztFQUNsQztFQUVBLElB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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Token = void 0;\nclass Token {\n constructor(tokenArgs) {\n this.token = tokenArgs.token;\n this.startCursor = tokenArgs.startCursor;\n this.endCursor = tokenArgs.endCursor;\n }\n static isTokenRowDelimiter(token) {\n const content = token.token;\n return content === '\\r' || content === '\\n' || content === '\\r\\n';\n }\n static isTokenCarriageReturn(token, parserOptions) {\n return token.token === parserOptions.carriageReturn;\n }\n static isTokenComment(token, parserOptions) {\n return parserOptions.supportsComments && !!token && token.token === parserOptions.comment;\n }\n static isTokenEscapeCharacter(token, parserOptions) {\n return token.token === parserOptions.escapeChar;\n }\n static isTokenQuote(token, parserOptions) {\n return token.token === parserOptions.quote;\n }\n static isTokenDelimiter(token, parserOptions) {\n return token.token === parserOptions.delimiter;\n }\n}\nexports.Token = Token;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb2tlbiIsImNvbnN0cnVjdG9yIiwidG9rZW5BcmdzIiwidG9rZW4iLCJzdGFydEN1cnNvciIsImVuZEN1cnNvciIsImlzVG9rZW5Sb3dEZWxpbWl0ZXIiLCJjb250ZW50IiwiaXNUb2tlbkNhcnJpYWdlUmV0dXJuIiwicGFyc2VyT3B0aW9ucyIsImNhcnJpYWdlUmV0dXJuIiwiaXNUb2tlbkNvbW1lbnQiLCJzdXBwb3J0c0NvbW1lbnRzIiwiY29tbWVudCIsImlzVG9rZW5Fc2NhcGVDaGFyYWN0ZXIiLCJlc2NhcGVDaGFyIiwiaXNUb2tlblF1b3RlIiwicXVvdGUiLCJpc1Rva2VuRGVsaW1pdGVyIiwiZGVsaW1pdGVyIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvVG9rZW4udHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQVVBLE1BQWFBLEtBQUs7RUFnQ2RDLFlBQW1CQyxTQUFvQjtJQUNuQyxJQUFJLENBQUNDLEtBQUssR0FBR0QsU0FBUyxDQUFDQyxLQUFLO0lBQzVCLElBQUksQ0FBQ0MsV0FBVyxHQUFHRixTQUFTLENBQUNFLFdBQVc7SUFDeEMsSUFBSSxDQUFDQyxTQUFTLEdBQUdILFNBQVMsQ0FBQ0csU0FBUztFQUN4QztFQW5DTyxPQUFPQyxtQkFBbUJBLENBQUNILEtBQVk7SUFDMUMsTUFBTUksT0FBTyxHQUFHSixLQUFLLENBQUNBLEtBQUs7SUFDM0IsT0FBT0ksT0FBTyxLQUFLLElBQUksSUFBSUEsT0FBTyxLQUFLLElBQUksSUFBSUEsT0FBTyxLQUFLLE1BQU07RUFDckU7RUFFTyxPQUFPQyxxQkFBcUJBLENBQUNMLEtBQVksRUFBRU0sYUFBNEI7SUFDMUUsT0FBT04sS0FBSyxDQUFDQSxLQUFLLEtBQUtNLGFBQWEsQ0FBQ0MsY0FBYztFQUN2RDtFQUVPLE9BQU9DLGNBQWNBLENBQUNSLEtBQVksRUFBRU0sYUFBNEI7SUFDbkUsT0FBT0EsYUFBYSxDQUFDRyxnQkFBZ0IsSUFBSSxDQUFDLENBQUNULEtBQUssSUFBSUEsS0FBSyxDQUFDQSxLQUFLLEtBQUtNLGFBQWEsQ0FBQ0ksT0FBTztFQUM3RjtFQUVPLE9BQU9DLHNCQUFzQkEsQ0FBQ1gsS0FBWSxFQUFFTSxhQUE0QjtJQUMzRSxPQUFPTixLQUFLLENBQUNBLEtBQUssS0FBS00sYUFBYSxDQUFDTSxVQUFVO0VBQ25EO0VBRU8sT0FBT0MsWUFBWUEsQ0FBQ2IsS0FBWSxFQUFFTSxhQUE0QjtJQUNqRSxPQUFPTixLQUFLLENBQUNBLEtBQUssS0FBS00sYUFBYSxDQUFDUSxLQUFLO0VBQzlDO0VBRU8sT0FBT0MsZ0JBQWdCQSxDQUFDZixLQUFZLEVBQUVNLGFBQTRCO0lBQ3JFLE9BQU9OLEtBQUssQ0FBQ0EsS0FBSyxLQUFLTSxhQUFhLENBQUNVLFNBQVM7RUFDbEQ7O0FBeEJKQyxPQUFBLENBQUFwQixLQUFBLEdBQUFBLEtBQUEifQ==", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnFormatter = void 0;\nclass ColumnFormatter {\n constructor(parserOptions) {\n if (parserOptions.trim) {\n this.format = col => col.trim();\n } else if (parserOptions.ltrim) {\n this.format = col => col.trimLeft();\n } else if (parserOptions.rtrim) {\n this.format = col => col.trimRight();\n } else {\n this.format = col => col;\n }\n }\n}\nexports.ColumnFormatter = ColumnFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5Gb3JtYXR0ZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlck9wdGlvbnMiLCJ0cmltIiwiZm9ybWF0IiwiY29sIiwibHRyaW0iLCJ0cmltTGVmdCIsInJ0cmltIiwidHJpbVJpZ2h0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL0NvbHVtbkZvcm1hdHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsTUFBYUEsZUFBZTtFQUd4QkMsWUFBbUJDLGFBQTRCO0lBQzNDLElBQUlBLGFBQWEsQ0FBQ0MsSUFBSSxFQUFFO01BQ3BCLElBQUksQ0FBQ0MsTUFBTSxHQUFJQyxHQUFXLElBQWFBLEdBQUcsQ0FBQ0YsSUFBSSxFQUFFO0tBQ3BELE1BQU0sSUFBSUQsYUFBYSxDQUFDSSxLQUFLLEVBQUU7TUFDNUIsSUFBSSxDQUFDRixNQUFNLEdBQUlDLEdBQVcsSUFBYUEsR0FBRyxDQUFDRSxRQUFRLEVBQUU7S0FDeEQsTUFBTSxJQUFJTCxhQUFhLENBQUNNLEtBQUssRUFBRTtNQUM1QixJQUFJLENBQUNKLE1BQU0sR0FBSUMsR0FBVyxJQUFhQSxHQUFHLENBQUNJLFNBQVMsRUFBRTtLQUN6RCxNQUFNO01BQ0gsSUFBSSxDQUFDTCxNQUFNLEdBQUlDLEdBQVcsSUFBYUEsR0FBRzs7RUFFbEQ7O0FBYkpLLE9BQUEsQ0FBQVYsZUFBQSxHQUFBQSxlQUFBIn0=", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnParser = void 0;\nconst NonQuotedColumnParser_1 = require(\"./NonQuotedColumnParser\");\nconst QuotedColumnParser_1 = require(\"./QuotedColumnParser\");\nconst Token_1 = require(\"../Token\");\nclass ColumnParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.quotedColumnParser = new QuotedColumnParser_1.QuotedColumnParser(parserOptions);\n this.nonQuotedColumnParser = new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions);\n }\n parse(scanner) {\n const {\n nextNonSpaceToken\n } = scanner;\n if (nextNonSpaceToken !== null && Token_1.Token.isTokenQuote(nextNonSpaceToken, this.parserOptions)) {\n scanner.advanceToToken(nextNonSpaceToken);\n return this.quotedColumnParser.parse(scanner);\n }\n return this.nonQuotedColumnParser.parse(scanner);\n }\n}\nexports.ColumnParser = ColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOb25RdW90ZWRDb2x1bW5QYXJzZXJfMSIsInJlcXVpcmUiLCJRdW90ZWRDb2x1bW5QYXJzZXJfMSIsIlRva2VuXzEiLCJDb2x1bW5QYXJzZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlck9wdGlvbnMiLCJxdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXIiLCJub25RdW90ZWRDb2x1bW5QYXJzZXIiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJwYXJzZSIsInNjYW5uZXIiLCJuZXh0Tm9uU3BhY2VUb2tlbiIsIlRva2VuIiwiaXNUb2tlblF1b3RlIiwiYWR2YW5jZVRvVG9rZW4iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhcnNlci9jb2x1bW4vQ29sdW1uUGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxNQUFBQSx1QkFBQSxHQUFBQyxPQUFBO0FBQ0EsTUFBQUMsb0JBQUEsR0FBQUQsT0FBQTtBQUVBLE1BQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLE1BQWFHLFlBQVk7RUFPckJDLFlBQW1CQyxhQUE0QjtJQUMzQyxJQUFJLENBQUNBLGFBQWEsR0FBR0EsYUFBYTtJQUNsQyxJQUFJLENBQUNDLGtCQUFrQixHQUFHLElBQUlMLG9CQUFBLENBQUFNLGtCQUFrQixDQUFDRixhQUFhLENBQUM7SUFDL0QsSUFBSSxDQUFDRyxxQkFBcUIsR0FBRyxJQUFJVCx1QkFBQSxDQUFBVSxxQkFBcUIsQ0FBQ0osYUFBYSxDQUFDO0VBQ3pFO0VBRU9LLEtBQUtBLENBQUNDLE9BQWdCO0lBQ3pCLE1BQU07TUFBRUM7SUFBaUIsQ0FBRSxHQUFHRCxPQUFPO0lBQ3JDLElBQUlDLGlCQUFpQixLQUFLLElBQUksSUFBSVYsT0FBQSxDQUFBVyxLQUFLLENBQUNDLFlBQVksQ0FBQ0YsaUJBQWlCLEVBQUUsSUFBSSxDQUFDUCxhQUFhLENBQUMsRUFBRTtNQUN6Rk0sT0FBTyxDQUFDSSxjQUFjLENBQUNILGlCQUFpQixDQUFDO01BQ3pDLE9BQU8sSUFBSSxDQUFDTixrQkFBa0IsQ0FBQ0ksS0FBSyxDQUFDQyxPQUFPLENBQUM7O0lBRWpELE9BQU8sSUFBSSxDQUFDSCxxQkFBcUIsQ0FBQ0UsS0FBSyxDQUFDQyxPQUFPLENBQUM7RUFDcEQ7O0FBcEJKSyxPQUFBLENBQUFiLFlBQUEsR0FBQUEsWUFBQSJ9", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.NonQuotedColumnParser = void 0;\nconst ColumnFormatter_1 = require(\"./ColumnFormatter\");\nconst Token_1 = require(\"../Token\");\nclass NonQuotedColumnParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);\n }\n parse(scanner) {\n if (!scanner.hasMoreCharacters) {\n return null;\n }\n const {\n parserOptions\n } = this;\n const characters = [];\n let nextToken = scanner.nextCharacterToken;\n for (; nextToken; nextToken = scanner.nextCharacterToken) {\n if (Token_1.Token.isTokenDelimiter(nextToken, parserOptions) || Token_1.Token.isTokenRowDelimiter(nextToken)) {\n break;\n }\n characters.push(nextToken.token);\n scanner.advancePastToken(nextToken);\n }\n return this.columnFormatter.format(characters.join(''));\n }\n}\nexports.NonQuotedColumnParser = NonQuotedColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5Gb3JtYXR0ZXJfMSIsInJlcXVpcmUiLCJUb2tlbl8xIiwiTm9uUXVvdGVkQ29sdW1uUGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwiY29sdW1uRm9ybWF0dGVyIiwiQ29sdW1uRm9ybWF0dGVyIiwicGFyc2UiLCJzY2FubmVyIiwiaGFzTW9yZUNoYXJhY3RlcnMiLCJjaGFyYWN0ZXJzIiwibmV4dFRva2VuIiwibmV4dENoYXJhY3RlclRva2VuIiwiVG9rZW4iLCJpc1Rva2VuRGVsaW1pdGVyIiwiaXNUb2tlblJvd0RlbGltaXRlciIsInB1c2giLCJ0b2tlbiIsImFkdmFuY2VQYXN0VG9rZW4iLCJmb3JtYXQiLCJqb2luIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL05vblF1b3RlZENvbHVtblBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBQUEsaUJBQUEsR0FBQUMsT0FBQTtBQUVBLE1BQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUVBLE1BQWFFLHFCQUFxQjtFQUs5QkMsWUFBbUJDLGFBQTRCO0lBQzNDLElBQUksQ0FBQ0EsYUFBYSxHQUFHQSxhQUFhO0lBQ2xDLElBQUksQ0FBQ0MsZUFBZSxHQUFHLElBQUlOLGlCQUFBLENBQUFPLGVBQWUsQ0FBQ0YsYUFBYSxDQUFDO0VBQzdEO0VBRU9HLEtBQUtBLENBQUNDLE9BQWdCO0lBQ3pCLElBQUksQ0FBQ0EsT0FBTyxDQUFDQyxpQkFBaUIsRUFBRTtNQUM1QixPQUFPLElBQUk7O0lBRWYsTUFBTTtNQUFFTDtJQUFhLENBQUUsR0FBRyxJQUFJO0lBQzlCLE1BQU1NLFVBQVUsR0FBRyxFQUFFO0lBQ3JCLElBQUlDLFNBQVMsR0FBR0gsT0FBTyxDQUFDSSxrQkFBa0I7SUFDMUMsT0FBT0QsU0FBUyxFQUFFQSxTQUFTLEdBQUdILE9BQU8sQ0FBQ0ksa0JBQWtCLEVBQUU7TUFDdEQsSUFBSVgsT0FBQSxDQUFBWSxLQUFLLENBQUNDLGdCQUFnQixDQUFDSCxTQUFTLEVBQUVQLGFBQWEsQ0FBQyxJQUFJSCxPQUFBLENBQUFZLEtBQUssQ0FBQ0UsbUJBQW1CLENBQUNKLFNBQVMsQ0FBQyxFQUFFO1FBQzFGOztNQUVKRCxVQUFVLENBQUNNLElBQUksQ0FBQ0wsU0FBUyxDQUFDTSxLQUFLLENBQUM7TUFDaENULE9BQU8sQ0FBQ1UsZ0JBQWdCLENBQUNQLFNBQVMsQ0FBQzs7SUFFdkMsT0FBTyxJQUFJLENBQUNOLGVBQWUsQ0FBQ2MsTUFBTSxDQUFDVCxVQUFVLENBQUNVLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMzRDs7QUF6QkpDLE9BQUEsQ0FBQW5CLHFCQUFBLEdBQUFBLHFCQUFBIn0=", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QuotedColumnParser = void 0;\nconst ColumnFormatter_1 = require(\"./ColumnFormatter\");\nconst Token_1 = require(\"../Token\");\nclass QuotedColumnParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);\n }\n parse(scanner) {\n if (!scanner.hasMoreCharacters) {\n return null;\n }\n const originalCursor = scanner.cursor;\n const {\n foundClosingQuote,\n col\n } = this.gatherDataBetweenQuotes(scanner);\n if (!foundClosingQuote) {\n // reset the cursor to the original\n scanner.advanceTo(originalCursor);\n // if we didnt find a closing quote but we potentially have more data then skip the parsing\n // and return the original scanner.\n if (!scanner.hasMoreData) {\n throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote || ''}' in line: at '${scanner.lineFromCursor.replace(/[\\r\\n]/g, \"\\\\n'\")}'`);\n }\n return null;\n }\n this.checkForMalformedColumn(scanner);\n return col;\n }\n gatherDataBetweenQuotes(scanner) {\n const {\n parserOptions\n } = this;\n let foundStartingQuote = false;\n let foundClosingQuote = false;\n const characters = [];\n let nextToken = scanner.nextCharacterToken;\n for (; !foundClosingQuote && nextToken !== null; nextToken = scanner.nextCharacterToken) {\n const isQuote = Token_1.Token.isTokenQuote(nextToken, parserOptions);\n // ignore first quote\n if (!foundStartingQuote && isQuote) {\n foundStartingQuote = true;\n } else if (foundStartingQuote) {\n if (Token_1.Token.isTokenEscapeCharacter(nextToken, parserOptions)) {\n // advance past the escape character so we can get the next one in line\n scanner.advancePastToken(nextToken);\n const tokenFollowingEscape = scanner.nextCharacterToken;\n // if the character following the escape is a quote character then just add\n // the quote and advance to that character\n if (tokenFollowingEscape !== null && (Token_1.Token.isTokenQuote(tokenFollowingEscape, parserOptions) || Token_1.Token.isTokenEscapeCharacter(tokenFollowingEscape, parserOptions))) {\n characters.push(tokenFollowingEscape.token);\n nextToken = tokenFollowingEscape;\n } else if (isQuote) {\n // if the escape is also a quote then we found our closing quote and finish early\n foundClosingQuote = true;\n } else {\n // other wise add the escape token to the characters since it wast escaping anything\n characters.push(nextToken.token);\n }\n } else if (isQuote) {\n // we found our closing quote!\n foundClosingQuote = true;\n } else {\n // add the token to the characters\n characters.push(nextToken.token);\n }\n }\n scanner.advancePastToken(nextToken);\n }\n return {\n col: this.columnFormatter.format(characters.join('')),\n foundClosingQuote\n };\n }\n checkForMalformedColumn(scanner) {\n const {\n parserOptions\n } = this;\n const {\n nextNonSpaceToken\n } = scanner;\n if (nextNonSpaceToken) {\n const isNextTokenADelimiter = Token_1.Token.isTokenDelimiter(nextNonSpaceToken, parserOptions);\n const isNextTokenARowDelimiter = Token_1.Token.isTokenRowDelimiter(nextNonSpaceToken);\n if (!(isNextTokenADelimiter || isNextTokenARowDelimiter)) {\n // if the final quote was NOT followed by a column (,) or row(\\n) delimiter then its a bad column\n // tldr: only part of the column was quoted\n const linePreview = scanner.lineFromCursor.substr(0, 10).replace(/[\\r\\n]/g, \"\\\\n'\");\n throw new Error(`Parse Error: expected: '${parserOptions.escapedDelimiter}' OR new line got: '${nextNonSpaceToken.token}'. at '${linePreview}`);\n }\n scanner.advanceToToken(nextNonSpaceToken);\n } else if (!scanner.hasMoreData) {\n scanner.advancePastLine();\n }\n }\n}\nexports.QuotedColumnParser = QuotedColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5Gb3JtYXR0ZXJfMSIsInJlcXVpcmUiLCJUb2tlbl8xIiwiUXVvdGVkQ29sdW1uUGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwiY29sdW1uRm9ybWF0dGVyIiwiQ29sdW1uRm9ybWF0dGVyIiwicGFyc2UiLCJzY2FubmVyIiwiaGFzTW9yZUNoYXJhY3RlcnMiLCJvcmlnaW5hbEN1cnNvciIsImN1cnNvciIsImZvdW5kQ2xvc2luZ1F1b3RlIiwiY29sIiwiZ2F0aGVyRGF0YUJldHdlZW5RdW90ZXMiLCJhZHZhbmNlVG8iLCJoYXNNb3JlRGF0YSIsIkVycm9yIiwicXVvdGUiLCJsaW5lRnJvbUN1cnNvciIsInJlcGxhY2UiLCJjaGVja0Zvck1hbGZvcm1lZENvbHVtbiIsImZvdW5kU3RhcnRpbmdRdW90ZSIsImNoYXJhY3RlcnMiLCJuZXh0VG9rZW4iLCJuZXh0Q2hhcmFjdGVyVG9rZW4iLCJpc1F1b3RlIiwiVG9rZW4iLCJpc1Rva2VuUXVvdGUiLCJpc1Rva2VuRXNjYXBlQ2hhcmFjdGVyIiwiYWR2YW5jZVBhc3RUb2tlbiIsInRva2VuRm9sbG93aW5nRXNjYXBlIiwicHVzaCIsInRva2VuIiwiZm9ybWF0Iiwiam9pbiIsIm5leHROb25TcGFjZVRva2VuIiwiaXNOZXh0VG9rZW5BRGVsaW1pdGVyIiwiaXNUb2tlbkRlbGltaXRlciIsImlzTmV4dFRva2VuQVJvd0RlbGltaXRlciIsImlzVG9rZW5Sb3dEZWxpbWl0ZXIiLCJsaW5lUHJldmlldyIsInN1YnN0ciIsImVzY2FwZWREZWxpbWl0ZXIiLCJhZHZhbmNlVG9Ub2tlbiIsImFkdmFuY2VQYXN0TGluZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGFyc2VyL2NvbHVtbi9RdW90ZWRDb2x1bW5QYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQUFBLGlCQUFBLEdBQUFDLE9BQUE7QUFHQSxNQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFPQSxNQUFhRSxrQkFBa0I7RUFLM0JDLFlBQW1CQyxhQUE0QjtJQUMzQyxJQUFJLENBQUNBLGFBQWEsR0FBR0EsYUFBYTtJQUNsQyxJQUFJLENBQUNDLGVBQWUsR0FBRyxJQUFJTixpQkFBQSxDQUFBTyxlQUFlLENBQUNGLGFBQWEsQ0FBQztFQUM3RDtFQUVPRyxLQUFLQSxDQUFDQyxPQUFnQjtJQUN6QixJQUFJLENBQUNBLE9BQU8sQ0FBQ0MsaUJBQWlCLEVBQUU7TUFDNUIsT0FBTyxJQUFJOztJQUVmLE1BQU1DLGNBQWMsR0FBR0YsT0FBTyxDQUFDRyxNQUFNO0lBQ3JDLE1BQU07TUFBRUMsaUJBQWlCO01BQUVDO0lBQUcsQ0FBRSxHQUFHLElBQUksQ0FBQ0MsdUJBQXVCLENBQUNOLE9BQU8sQ0FBQztJQUN4RSxJQUFJLENBQUNJLGlCQUFpQixFQUFFO01BQ3BCO01BQ0FKLE9BQU8sQ0FBQ08sU0FBUyxDQUFDTCxjQUFjLENBQUM7TUFDakM7TUFDQTtNQUNBLElBQUksQ0FBQ0YsT0FBTyxDQUFDUSxXQUFXLEVBQUU7UUFDdEIsTUFBTSxJQUFJQyxLQUFLLENBQ1gsa0NBQ0ksSUFBSSxDQUFDYixhQUFhLENBQUNjLEtBQUssSUFBSSxFQUNoQyxrQkFBa0JWLE9BQU8sQ0FBQ1csY0FBYyxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQ3pFOztNQUVMLE9BQU8sSUFBSTs7SUFFZixJQUFJLENBQUNDLHVCQUF1QixDQUFDYixPQUFPLENBQUM7SUFDckMsT0FBT0ssR0FBRztFQUNkO0VBRVFDLHVCQUF1QkEsQ0FBQ04sT0FBZ0I7SUFDNUMsTUFBTTtNQUFFSjtJQUFhLENBQUUsR0FBRyxJQUFJO0lBQzlCLElBQUlrQixrQkFBa0IsR0FBRyxLQUFLO0lBQzlCLElBQUlWLGlCQUFpQixHQUFHLEtBQUs7SUFDN0IsTUFBTVcsVUFBVSxHQUFHLEVBQUU7SUFDckIsSUFBSUMsU0FBUyxHQUFpQmhCLE9BQU8sQ0FBQ2lCLGtCQUFrQjtJQUN4RCxPQUFPLENBQUNiLGlCQUFpQixJQUFJWSxTQUFTLEtBQUssSUFBSSxFQUFFQSxTQUFTLEdBQUdoQixPQUFPLENBQUNpQixrQkFBa0IsRUFBRTtNQUNyRixNQUFNQyxPQUFPLEdBQUd6QixPQUFBLENBQUEwQixLQUFLLENBQUNDLFlBQVksQ0FBQ0osU0FBUyxFQUFFcEIsYUFBYSxDQUFDO01BQzVEO01BQ0EsSUFBSSxDQUFDa0Isa0JBQWtCLElBQUlJLE9BQU8sRUFBRTtRQUNoQ0osa0JBQWtCLEdBQUcsSUFBSTtPQUM1QixNQUFNLElBQUlBLGtCQUFrQixFQUFFO1FBQzNCLElBQUlyQixPQUFBLENBQUEwQixLQUFLLENBQUNFLHNCQUFzQixDQUFDTCxTQUFTLEVBQUVwQixhQUFhLENBQUMsRUFBRTtVQUN4RDtVQUNBSSxPQUFPLENBQUNzQixnQkFBZ0IsQ0FBQ04sU0FBUyxDQUFDO1VBQ25DLE1BQU1PLG9CQUFvQixHQUFHdkIsT0FBTyxDQUFDaUIsa0JBQWtCO1VBQ3ZEO1VBQ0E7VUFDQSxJQUNJTSxvQkFBb0IsS0FBSyxJQUFJLEtBQzVCOUIsT0FBQSxDQUFBMEIsS0FBSyxDQUFDQyxZQUFZLENBQUNHLG9CQUFvQixFQUFFM0IsYUFBYSxDQUFDLElBQ3BESCxPQUFBLENBQUEwQixLQUFLLENBQUNFLHNCQUFzQixDQUFDRSxvQkFBb0IsRUFBRTNCLGFBQWEsQ0FBQyxDQUFDLEVBQ3hFO1lBQ0VtQixVQUFVLENBQUNTLElBQUksQ0FBQ0Qsb0JBQW9CLENBQUNFLEtBQUssQ0FBQztZQUMzQ1QsU0FBUyxHQUFHTyxvQkFBb0I7V0FDbkMsTUFBTSxJQUFJTCxPQUFPLEVBQUU7WUFDaEI7WUFDQWQsaUJBQWlCLEdBQUcsSUFBSTtXQUMzQixNQUFNO1lBQ0g7WUFDQVcsVUFBVSxDQUFDUyxJQUFJLENBQUNSLFNBQVMsQ0FBQ1MsS0FBSyxDQUFDOztTQUV2QyxNQUFNLElBQUlQLE9BQU8sRUFBRTtVQUNoQjtVQUNBZCxpQkFBaUIsR0FBRyxJQUFJO1NBQzNCLE1BQU07VUFDSDtVQUNBVyxVQUFVLENBQUNTLElBQUksQ0FBQ1IsU0FBUyxDQUFDUyxLQUFLLENBQUM7OztNQUd4Q3pCLE9BQU8sQ0FBQ3NCLGdCQUFnQixDQUFDTixTQUFTLENBQUM7O0lBRXZDLE9BQU87TUFBRVgsR0FBRyxFQUFFLElBQUksQ0FBQ1IsZUFBZSxDQUFDNkIsTUFBTSxDQUFDWCxVQUFVLENBQUNZLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUFFdkI7SUFBaUIsQ0FBRTtFQUN2RjtFQUVRUyx1QkFBdUJBLENBQUNiLE9BQWdCO0lBQzVDLE1BQU07TUFBRUo7SUFBYSxDQUFFLEdBQUcsSUFBSTtJQUM5QixNQUFNO01BQUVnQztJQUFpQixDQUFFLEdBQUc1QixPQUFPO0lBQ3JDLElBQUk0QixpQkFBaUIsRUFBRTtNQUNuQixNQUFNQyxxQkFBcUIsR0FBR3BDLE9BQUEsQ0FBQTBCLEtBQUssQ0FBQ1csZ0JBQWdCLENBQUNGLGlCQUFpQixFQUFFaEMsYUFBYSxDQUFDO01BQ3RGLE1BQU1tQyx3QkFBd0IsR0FBR3RDLE9BQUEsQ0FBQTBCLEtBQUssQ0FBQ2EsbUJBQW1CLENBQUNKLGlCQUFpQixDQUFDO01BQzdFLElBQUksRUFBRUMscUJBQXFCLElBQUlFLHdCQUF3QixDQUFDLEVBQUU7UUFDdEQ7UUFDQTtRQUNBLE1BQU1FLFdBQVcsR0FBR2pDLE9BQU8sQ0FBQ1csY0FBYyxDQUFDdUIsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQ3RCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQ25GLE1BQU0sSUFBSUgsS0FBSyxDQUNYLDJCQUEyQmIsYUFBYSxDQUFDdUMsZ0JBQWdCLHVCQUF1QlAsaUJBQWlCLENBQUNILEtBQUssVUFBVVEsV0FBVyxFQUFFLENBQ2pJOztNQUVMakMsT0FBTyxDQUFDb0MsY0FBYyxDQUFDUixpQkFBaUIsQ0FBQztLQUM1QyxNQUFNLElBQUksQ0FBQzVCLE9BQU8sQ0FBQ1EsV0FBVyxFQUFFO01BQzdCUixPQUFPLENBQUNxQyxlQUFlLEVBQUU7O0VBRWpDOztBQWpHSkMsT0FBQSxDQUFBNUMsa0JBQUEsR0FBQUEsa0JBQUEifQ==", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnFormatter = exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = void 0;\nvar ColumnParser_1 = require(\"./ColumnParser\");\nObject.defineProperty(exports, \"ColumnParser\", {\n enumerable: true,\n get: function () {\n return ColumnParser_1.ColumnParser;\n }\n});\nvar NonQuotedColumnParser_1 = require(\"./NonQuotedColumnParser\");\nObject.defineProperty(exports, \"NonQuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return NonQuotedColumnParser_1.NonQuotedColumnParser;\n }\n});\nvar QuotedColumnParser_1 = require(\"./QuotedColumnParser\");\nObject.defineProperty(exports, \"QuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return QuotedColumnParser_1.QuotedColumnParser;\n }\n});\nvar ColumnFormatter_1 = require(\"./ColumnFormatter\");\nObject.defineProperty(exports, \"ColumnFormatter\", {\n enumerable: true,\n get: function () {\n return ColumnFormatter_1.ColumnFormatter;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5QYXJzZXJfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ29sdW1uUGFyc2VyIiwiTm9uUXVvdGVkQ29sdW1uUGFyc2VyXzEiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXJfMSIsIlF1b3RlZENvbHVtblBhcnNlciIsIkNvbHVtbkZvcm1hdHRlcl8xIiwiQ29sdW1uRm9ybWF0dGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhcnNlci9jb2x1bW4vaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGNBQUEsR0FBQUMsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLGNBQUEsQ0FBQU8sWUFBWTtFQUFBO0FBQUE7QUFDckIsSUFBQUMsdUJBQUEsR0FBQVAsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFFLHVCQUFBLENBQUFDLHFCQUFxQjtFQUFBO0FBQUE7QUFDOUIsSUFBQUMsb0JBQUEsR0FBQVQsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFJLG9CQUFBLENBQUFDLGtCQUFrQjtFQUFBO0FBQUE7QUFDM0IsSUFBQUMsaUJBQUEsR0FBQVgsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFNLGlCQUFBLENBQUFDLGVBQWU7RUFBQTtBQUFBIn0=", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = exports.Token = exports.Scanner = exports.RowParser = exports.Parser = void 0;\nvar Parser_1 = require(\"./Parser\");\nObject.defineProperty(exports, \"Parser\", {\n enumerable: true,\n get: function () {\n return Parser_1.Parser;\n }\n});\nvar RowParser_1 = require(\"./RowParser\");\nObject.defineProperty(exports, \"RowParser\", {\n enumerable: true,\n get: function () {\n return RowParser_1.RowParser;\n }\n});\nvar Scanner_1 = require(\"./Scanner\");\nObject.defineProperty(exports, \"Scanner\", {\n enumerable: true,\n get: function () {\n return Scanner_1.Scanner;\n }\n});\nvar Token_1 = require(\"./Token\");\nObject.defineProperty(exports, \"Token\", {\n enumerable: true,\n get: function () {\n return Token_1.Token;\n }\n});\nvar column_1 = require(\"./column\");\nObject.defineProperty(exports, \"ColumnParser\", {\n enumerable: true,\n get: function () {\n return column_1.ColumnParser;\n }\n});\nObject.defineProperty(exports, \"NonQuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return column_1.NonQuotedColumnParser;\n }\n});\nObject.defineProperty(exports, \"QuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return column_1.QuotedColumnParser;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZXJfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUGFyc2VyIiwiUm93UGFyc2VyXzEiLCJSb3dQYXJzZXIiLCJTY2FubmVyXzEiLCJTY2FubmVyIiwiVG9rZW5fMSIsIlRva2VuIiwiY29sdW1uXzEiLCJDb2x1bW5QYXJzZXIiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFyc2VyL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFBU0MsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBTixRQUFBLENBQUFPLE1BQU07RUFBQTtBQUFBO0FBQ2YsSUFBQUMsV0FBQSxHQUFBUCxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsV0FBQSxDQUFBQyxTQUFTO0VBQUE7QUFBQTtBQUNsQixJQUFBQyxTQUFBLEdBQUFULE9BQUE7QUFBU0MsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBSSxTQUFBLENBQUFDLE9BQU87RUFBQTtBQUFBO0FBQ2hCLElBQUFDLE9BQUEsR0FBQVgsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFNLE9BQUEsQ0FBQUMsS0FBSztFQUFBO0FBQUE7QUFDZCxJQUFBQyxRQUFBLEdBQUFiLE9BQUE7QUFBU0MsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBUSxRQUFBLENBQUFDLFlBQVk7RUFBQTtBQUFBO0FBQUViLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVEsUUFBQSxDQUFBRSxxQkFBcUI7RUFBQTtBQUFBO0FBQUVkLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVEsUUFBQSxDQUFBRyxrQkFBa0I7RUFBQTtBQUFBIn0=", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HeaderTransformer = void 0;\nconst lodash_isundefined_1 = __importDefault(require(\"lodash.isundefined\"));\nconst lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\nconst lodash_uniq_1 = __importDefault(require(\"lodash.uniq\"));\nconst lodash_groupby_1 = __importDefault(require(\"lodash.groupby\"));\nclass HeaderTransformer {\n constructor(parserOptions) {\n this.headers = null;\n this.receivedHeaders = false;\n this.shouldUseFirstRow = false;\n this.processedFirstRow = false;\n this.headersLength = 0;\n this.parserOptions = parserOptions;\n if (parserOptions.headers === true) {\n this.shouldUseFirstRow = true;\n } else if (Array.isArray(parserOptions.headers)) {\n this.setHeaders(parserOptions.headers);\n } else if (lodash_isfunction_1.default(parserOptions.headers)) {\n this.headersTransform = parserOptions.headers;\n }\n }\n transform(row, cb) {\n if (!this.shouldMapRow(row)) {\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n return cb(null, this.processRow(row));\n }\n shouldMapRow(row) {\n const {\n parserOptions\n } = this;\n if (!this.headersTransform && parserOptions.renameHeaders && !this.processedFirstRow) {\n if (!this.receivedHeaders) {\n throw new Error('Error renaming headers: new headers must be provided in an array');\n }\n this.processedFirstRow = true;\n return false;\n }\n if (!this.receivedHeaders && Array.isArray(row)) {\n if (this.headersTransform) {\n this.setHeaders(this.headersTransform(row));\n } else if (this.shouldUseFirstRow) {\n this.setHeaders(row);\n } else {\n // dont do anything with the headers if we didnt receive a transform or shouldnt use the first row.\n return true;\n }\n return false;\n }\n return true;\n }\n processRow(row) {\n if (!this.headers) {\n return {\n row: row,\n isValid: true\n };\n }\n const {\n parserOptions\n } = this;\n if (!parserOptions.discardUnmappedColumns && row.length > this.headersLength) {\n if (!parserOptions.strictColumnHandling) {\n throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${row.length}`);\n }\n return {\n row: row,\n isValid: false,\n reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`\n };\n }\n if (parserOptions.strictColumnHandling && row.length < this.headersLength) {\n return {\n row: row,\n isValid: false,\n reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`\n };\n }\n return {\n row: this.mapHeaders(row),\n isValid: true\n };\n }\n mapHeaders(row) {\n const rowMap = {};\n const {\n headers,\n headersLength\n } = this;\n for (let i = 0; i < headersLength; i += 1) {\n const header = headers[i];\n if (!lodash_isundefined_1.default(header)) {\n const val = row[i];\n // eslint-disable-next-line no-param-reassign\n if (lodash_isundefined_1.default(val)) {\n rowMap[header] = '';\n } else {\n rowMap[header] = val;\n }\n }\n }\n return rowMap;\n }\n setHeaders(headers) {\n var _a;\n const filteredHeaders = headers.filter(h => !!h);\n if (lodash_uniq_1.default(filteredHeaders).length !== filteredHeaders.length) {\n const grouped = lodash_groupby_1.default(filteredHeaders);\n const duplicates = Object.keys(grouped).filter(dup => grouped[dup].length > 1);\n throw new Error(`Duplicate headers found ${JSON.stringify(duplicates)}`);\n }\n this.headers = headers;\n this.receivedHeaders = true;\n this.headersLength = ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.length) || 0;\n }\n}\nexports.HeaderTransformer = HeaderTransformer;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXN1bmRlZmluZWRfMSIsIl9faW1wb3J0RGVmYXVsdCIsInJlcXVpcmUiLCJsb2Rhc2hfaXNmdW5jdGlvbl8xIiwibG9kYXNoX3VuaXFfMSIsImxvZGFzaF9ncm91cGJ5XzEiLCJIZWFkZXJUcmFuc2Zvcm1lciIsImNvbnN0cnVjdG9yIiwicGFyc2VyT3B0aW9ucyIsImhlYWRlcnMiLCJyZWNlaXZlZEhlYWRlcnMiLCJzaG91bGRVc2VGaXJzdFJvdyIsInByb2Nlc3NlZEZpcnN0Um93IiwiaGVhZGVyc0xlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsInNldEhlYWRlcnMiLCJkZWZhdWx0IiwiaGVhZGVyc1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsInJvdyIsImNiIiwic2hvdWxkTWFwUm93IiwiaXNWYWxpZCIsInByb2Nlc3NSb3ciLCJyZW5hbWVIZWFkZXJzIiwiRXJyb3IiLCJkaXNjYXJkVW5tYXBwZWRDb2x1bW5zIiwibGVuZ3RoIiwic3RyaWN0Q29sdW1uSGFuZGxpbmciLCJyZWFzb24iLCJtYXBIZWFkZXJzIiwicm93TWFwIiwiaSIsImhlYWRlciIsInZhbCIsImZpbHRlcmVkSGVhZGVycyIsImZpbHRlciIsImgiLCJncm91cGVkIiwiZHVwbGljYXRlcyIsIk9iamVjdCIsImtleXMiLCJkdXAiLCJKU09OIiwic3RyaW5naWZ5IiwiX2EiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zZm9ybXMvSGVhZGVyVHJhbnNmb3JtZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBQUEsb0JBQUEsR0FBQUMsZUFBQSxDQUFBQyxPQUFBO0FBQ0EsTUFBQUMsbUJBQUEsR0FBQUYsZUFBQSxDQUFBQyxPQUFBO0FBQ0EsTUFBQUUsYUFBQSxHQUFBSCxlQUFBLENBQUFDLE9BQUE7QUFDQSxNQUFBRyxnQkFBQSxHQUFBSixlQUFBLENBQUFDLE9BQUE7QUFZQSxNQUFhSSxp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", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowTransformerValidator = void 0;\nconst lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\nconst types_1 = require(\"../types\");\nclass RowTransformerValidator {\n constructor() {\n this._rowTransform = null;\n this._rowValidator = null;\n }\n // eslint-disable-next-line @typescript-eslint/no-shadow\n static createTransform(transformFunction) {\n if (types_1.isSyncTransform(transformFunction)) {\n return (row, cb) => {\n let transformed = null;\n try {\n transformed = transformFunction(row);\n } catch (e) {\n return cb(e);\n }\n return cb(null, transformed);\n };\n }\n return transformFunction;\n }\n static createValidator(validateFunction) {\n if (types_1.isSyncValidate(validateFunction)) {\n return (row, cb) => {\n cb(null, {\n row,\n isValid: validateFunction(row)\n });\n };\n }\n return (row, cb) => {\n validateFunction(row, (err, isValid, reason) => {\n if (err) {\n return cb(err);\n }\n if (isValid) {\n return cb(null, {\n row,\n isValid,\n reason\n });\n }\n return cb(null, {\n row,\n isValid: false,\n reason\n });\n });\n };\n }\n set rowTransform(transformFunction) {\n if (!lodash_isfunction_1.default(transformFunction)) {\n throw new TypeError('The transform should be a function');\n }\n this._rowTransform = RowTransformerValidator.createTransform(transformFunction);\n }\n set rowValidator(validateFunction) {\n if (!lodash_isfunction_1.default(validateFunction)) {\n throw new TypeError('The validate should be a function');\n }\n this._rowValidator = RowTransformerValidator.createValidator(validateFunction);\n }\n transformAndValidate(row, cb) {\n return this.callTransformer(row, (transformErr, transformedRow) => {\n if (transformErr) {\n return cb(transformErr);\n }\n if (!transformedRow) {\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n return this.callValidator(transformedRow, (validateErr, validationResult) => {\n if (validateErr) {\n return cb(validateErr);\n }\n if (validationResult && !validationResult.isValid) {\n return cb(null, {\n row: transformedRow,\n isValid: false,\n reason: validationResult.reason\n });\n }\n return cb(null, {\n row: transformedRow,\n isValid: true\n });\n });\n });\n }\n callTransformer(row, cb) {\n if (!this._rowTransform) {\n return cb(null, row);\n }\n return this._rowTransform(row, cb);\n }\n callValidator(row, cb) {\n if (!this._rowValidator) {\n return cb(null, {\n row,\n isValid: true\n });\n }\n return this._rowValidator(row, cb);\n }\n}\nexports.RowTransformerValidator = RowTransformerValidator;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXNmdW5jdGlvbl8xIiwiX19pbXBvcnREZWZhdWx0IiwicmVxdWlyZSIsInR5cGVzXzEiLCJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIsImNvbnN0cnVjdG9yIiwiX3Jvd1RyYW5zZm9ybSIsIl9yb3dWYWxpZGF0b3IiLCJjcmVhdGVUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsImlzU3luY1RyYW5zZm9ybSIsInJvdyIsImNiIiwidHJhbnNmb3JtZWQiLCJlIiwiY3JlYXRlVmFsaWRhdG9yIiwidmFsaWRhdGVGdW5jdGlvbiIsImlzU3luY1ZhbGlkYXRlIiwiaXNWYWxpZCIsImVyciIsInJlYXNvbiIsInJvd1RyYW5zZm9ybSIsImRlZmF1bHQiLCJUeXBlRXJyb3IiLCJyb3dWYWxpZGF0b3IiLCJ0cmFuc2Zvcm1BbmRWYWxpZGF0ZSIsImNhbGxUcmFuc2Zvcm1lciIsInRyYW5zZm9ybUVyciIsInRyYW5zZm9ybWVkUm93IiwiY2FsbFZhbGlkYXRvciIsInZhbGlkYXRlRXJyIiwidmFsaWRhdGlvblJlc3VsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNmb3Jtcy9Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxNQUFBQSxtQkFBQSxHQUFBQyxlQUFBLENBQUFDLE9BQUE7QUFDQSxNQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFhQSxNQUFhRSx1QkFBdUI7RUFBcENDLFlBQUE7SUFzQ1ksS0FBQUMsYUFBYSxHQUFtQyxJQUFJO0lBRXBELEtBQUFDLGFBQWEsR0FBMkIsSUFBSTtFQWlEeEQ7RUF4Rkk7RUFDUSxPQUFPQyxlQUFlQSxDQUMxQkMsaUJBQTZDO0lBRTdDLElBQUlOLE9BQUEsQ0FBQU8sZUFBZSxDQUFDRCxpQkFBaUIsQ0FBQyxFQUFFO01BQ3BDLE9BQU8sQ0FBQ0UsR0FBTSxFQUFFQyxFQUEyQixLQUFV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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HeaderTransformer = exports.RowTransformerValidator = void 0;\nvar RowTransformerValidator_1 = require(\"./RowTransformerValidator\");\nObject.defineProperty(exports, \"RowTransformerValidator\", {\n enumerable: true,\n get: function () {\n return RowTransformerValidator_1.RowTransformerValidator;\n }\n});\nvar HeaderTransformer_1 = require(\"./HeaderTransformer\");\nObject.defineProperty(exports, \"HeaderTransformer\", {\n enumerable: true,\n get: function () {\n return HeaderTransformer_1.HeaderTransformer;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvcl8xIiwicmVxdWlyZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsImVudW1lcmFibGUiLCJnZXQiLCJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIsIkhlYWRlclRyYW5zZm9ybWVyXzEiLCJIZWFkZXJUcmFuc2Zvcm1lciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2Zvcm1zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSx5QkFBQSxHQUFBQyxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4seUJBQUEsQ0FBQU8sdUJBQXVCO0VBQUE7QUFBQTtBQUNoQyxJQUFBQyxtQkFBQSxHQUFBUCxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsbUJBQUEsQ0FBQUMsaUJBQWlCO0VBQUE7QUFBQSJ9", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isSyncValidate = exports.isSyncTransform = void 0;\nexports.isSyncTransform = transform => transform.length === 1;\nexports.isSyncValidate = validate => validate.length === 1;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiaXNTeW5jVHJhbnNmb3JtIiwidHJhbnNmb3JtIiwibGVuZ3RoIiwiaXNTeW5jVmFsaWRhdGUiLCJ2YWxpZGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBb0JhQSxPQUFBLENBQUFDLGVBQWUsR0FDeEJDLFNBQXFDLElBQ0NBLFNBQVMsQ0FBQ0MsTUFBTSxLQUFLLENBQUM7QUFRbkRILE9BQUEsQ0FBQUksY0FBYyxHQUFtQkMsUUFBd0IsSUFDbEVBLFFBQVEsQ0FBQ0YsTUFBTSxLQUFLLENBQUMifQ==", + "'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n", + "'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n", + "'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n", + "'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n", + "'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n", + "'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n", + "'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n", + "'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n", + "'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n", + "'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n", + "'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n", + "'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n", + "'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n", + "'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n", + "(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n", + "'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n", + "(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n", + "var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n", + "\"use strict\";\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiZW1wdHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiIl0sIm1hcHBpbmdzIjoiIn0=", + "// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n", + "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n", + "var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", + "var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n", + "var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n", + "var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n", + "function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n", + "var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n", + "var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n", + "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n", + "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n", + "var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n", + "exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n", + "var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n", + "module.exports={\n \"aes-128-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-192-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-256-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-128-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-192-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-256-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes128\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes192\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes256\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-128-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-128-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-128-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-128-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-192-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-256-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-128-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-192-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-256-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-128-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n },\n \"aes-192-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n },\n \"aes-256-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n }\n}\n", + "var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n", + "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n", + "var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", + "var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n", + "exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n", + "var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n", + "module.exports = require('./browser/algorithms.json')\n", + "module.exports={\n \"sha224WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha224\",\n \"id\": \"302d300d06096086480165030402040500041c\"\n },\n \"RSA-SHA224\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha224\",\n \"id\": \"302d300d06096086480165030402040500041c\"\n },\n \"sha256WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha256\",\n \"id\": \"3031300d060960864801650304020105000420\"\n },\n \"RSA-SHA256\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha256\",\n \"id\": \"3031300d060960864801650304020105000420\"\n },\n \"sha384WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha384\",\n \"id\": \"3041300d060960864801650304020205000430\"\n },\n \"RSA-SHA384\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha384\",\n \"id\": \"3041300d060960864801650304020205000430\"\n },\n \"sha512WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha512\",\n \"id\": \"3051300d060960864801650304020305000440\"\n },\n \"RSA-SHA512\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha512\",\n \"id\": \"3051300d060960864801650304020305000440\"\n },\n \"RSA-SHA1\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha1\",\n \"id\": \"3021300906052b0e03021a05000414\"\n },\n \"ecdsa-with-SHA1\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"sha256\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"sha224\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"sha384\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"sha512\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-SHA\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA-SHA1\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA224\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"DSA-SHA224\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA256\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"DSA-SHA256\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA384\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"DSA-SHA384\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA512\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-SHA512\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-RIPEMD160\": {\n \"sign\": \"dsa\",\n \"hash\": \"rmd160\",\n \"id\": \"\"\n },\n \"ripemd160WithRSA\": {\n \"sign\": \"rsa\",\n \"hash\": \"rmd160\",\n \"id\": \"3021300906052b2403020105000414\"\n },\n \"RSA-RIPEMD160\": {\n \"sign\": \"rsa\",\n \"hash\": \"rmd160\",\n \"id\": \"3021300906052b2403020105000414\"\n },\n \"md5WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"md5\",\n \"id\": \"3020300c06082a864886f70d020505000410\"\n },\n \"RSA-MD5\": {\n \"sign\": \"rsa\",\n \"hash\": \"md5\",\n \"id\": \"3020300c06082a864886f70d020505000410\"\n }\n}\n", + "module.exports={\n \"1.3.132.0.10\": \"secp256k1\",\n \"1.3.132.0.33\": \"p224\",\n \"1.2.840.10045.3.1.1\": \"p192\",\n \"1.2.840.10045.3.1.7\": \"p256\",\n \"1.3.132.0.34\": \"p384\",\n \"1.3.132.0.35\": \"p521\"\n}\n", + "var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n", + "// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n", + "// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [1]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = Buffer.from(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = Buffer.from(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n", + "\"use strict\";\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiX2VtcHR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIiJdLCJtYXBwaW5ncyI6IiJ9", + "/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}", + "module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n", + "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayLike(value)\n }\n\n if (value == null) {\n throw TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n buf = Buffer.from(buf)\n }\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (var i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n", + "var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n", + "var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n", + "'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n", + "var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n", + "'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n", + "'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n", + "'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n", + "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));", + "!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));", + "'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n if (this.padding === false) {\n return false;\n }\n\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n if (this.padding === false) {\n return buffer;\n }\n\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n", + "'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n", + "var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n", + "var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n", + "var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n", + "module.exports={\n \"modp1\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n },\n \"modp2\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n },\n \"modp5\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n },\n \"modp14\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n },\n \"modp15\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n },\n \"modp16\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n },\n \"modp17\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n },\n \"modp18\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n }\n}", + "'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n", + "'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n", + "'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n", + "'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n", + "'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n", + "module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n", + "'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n", + "module.exports={\n \"name\": \"elliptic\",\n \"version\": \"6.5.4\",\n \"description\": \"EC cryptography\",\n \"main\": \"lib/elliptic.js\",\n \"files\": [\n \"lib\"\n ],\n \"scripts\": {\n \"lint\": \"eslint lib test\",\n \"lint:fix\": \"npm run lint -- --fix\",\n \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n \"test\": \"npm run lint && npm run unit\",\n \"version\": \"grunt dist && git add dist/\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git@github.com:indutny/elliptic\"\n },\n \"keywords\": [\n \"EC\",\n \"Elliptic\",\n \"curve\",\n \"Cryptography\"\n ],\n \"author\": \"Fedor Indutny \",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/indutny/elliptic/issues\"\n },\n \"homepage\": \"https://github.com/indutny/elliptic\",\n \"devDependencies\": {\n \"brfs\": \"^2.0.2\",\n \"coveralls\": \"^3.1.0\",\n \"eslint\": \"^7.6.0\",\n \"grunt\": \"^1.2.1\",\n \"grunt-browserify\": \"^5.3.0\",\n \"grunt-cli\": \"^1.3.2\",\n \"grunt-contrib-connect\": \"^3.0.0\",\n \"grunt-contrib-copy\": \"^1.0.0\",\n \"grunt-contrib-uglify\": \"^5.0.0\",\n \"grunt-mocha-istanbul\": \"^5.0.2\",\n \"grunt-saucelabs\": \"^9.0.1\",\n \"istanbul\": \"^0.4.5\",\n \"mocha\": \"^8.0.1\"\n },\n \"dependencies\": {\n \"bn.js\": \"^4.11.9\",\n \"brorand\": \"^1.1.0\",\n \"hash.js\": \"^1.0.0\",\n \"hmac-drbg\": \"^1.0.1\",\n \"inherits\": \"^2.0.4\",\n \"minimalistic-assert\": \"^1.0.1\",\n \"minimalistic-crypto-utils\": \"^1.0.1\"\n }\n}\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar objectCreate = Object.create || objectCreatePolyfill\nvar objectKeys = Object.keys || objectKeysPolyfill\nvar bind = Function.prototype.bind || functionBindPolyfill\n\nfunction EventEmitter() {\n if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {\n this._events = objectCreate(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nvar hasDefineProperty;\ntry {\n var o = {};\n if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });\n hasDefineProperty = o.x === 0;\n} catch (err) { hasDefineProperty = false }\nif (hasDefineProperty) {\n Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n // check whether the input is a positive number (whose value is zero or\n // greater and not a NaN).\n if (typeof arg !== 'number' || arg < 0 || arg !== arg)\n throw new TypeError('\"defaultMaxListeners\" must be a positive number');\n defaultMaxListeners = arg;\n }\n });\n} else {\n EventEmitter.defaultMaxListeners = defaultMaxListeners;\n}\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n if (arguments.length > 1)\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Unhandled \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = objectCreate(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' \"' + String(type) + '\" listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit.');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n if (typeof console === 'object' && console.warn) {\n console.warn('%s: %s', w.name, w.message);\n }\n }\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n switch (arguments.length) {\n case 0:\n return this.listener.call(this.target);\n case 1:\n return this.listener.call(this.target, arguments[0]);\n case 2:\n return this.listener.call(this.target, arguments[0], arguments[1]);\n case 3:\n return this.listener.call(this.target, arguments[0], arguments[1],\n arguments[2]);\n default:\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i)\n args[i] = arguments[i];\n this.listener.apply(this.target, args);\n }\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = bind.call(onceWrapper, state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = objectCreate(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else\n spliceOne(list, position);\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = objectCreate(null);\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = objectCreate(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = objectKeys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = objectCreate(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (!events)\n return [];\n\n var evlistener = events[type];\n if (!evlistener)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction objectCreatePolyfill(proto) {\n var F = function() {};\n F.prototype = proto;\n return new F;\n}\nfunction objectKeysPolyfill(obj) {\n var keys = [];\n for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n return k;\n}\nfunction functionBindPolyfill(context) {\n var fn = this;\n return function () {\n return fn.apply(context, arguments);\n };\n}\n", + "var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvParserStream = exports.ParserOptions = exports.parseFile = exports.parseStream = exports.parseString = exports.parse = exports.FormatterOptions = exports.CsvFormatterStream = exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = void 0;\nvar format_1 = require(\"@fast-csv/format\");\nObject.defineProperty(exports, \"format\", {\n enumerable: true,\n get: function () {\n return format_1.format;\n }\n});\nObject.defineProperty(exports, \"write\", {\n enumerable: true,\n get: function () {\n return format_1.write;\n }\n});\nObject.defineProperty(exports, \"writeToStream\", {\n enumerable: true,\n get: function () {\n return format_1.writeToStream;\n }\n});\nObject.defineProperty(exports, \"writeToBuffer\", {\n enumerable: true,\n get: function () {\n return format_1.writeToBuffer;\n }\n});\nObject.defineProperty(exports, \"writeToString\", {\n enumerable: true,\n get: function () {\n return format_1.writeToString;\n }\n});\nObject.defineProperty(exports, \"writeToPath\", {\n enumerable: true,\n get: function () {\n return format_1.writeToPath;\n }\n});\nObject.defineProperty(exports, \"CsvFormatterStream\", {\n enumerable: true,\n get: function () {\n return format_1.CsvFormatterStream;\n }\n});\nObject.defineProperty(exports, \"FormatterOptions\", {\n enumerable: true,\n get: function () {\n return format_1.FormatterOptions;\n }\n});\nvar parse_1 = require(\"@fast-csv/parse\");\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return parse_1.parse;\n }\n});\nObject.defineProperty(exports, \"parseString\", {\n enumerable: true,\n get: function () {\n return parse_1.parseString;\n }\n});\nObject.defineProperty(exports, \"parseStream\", {\n enumerable: true,\n get: function () {\n return parse_1.parseStream;\n }\n});\nObject.defineProperty(exports, \"parseFile\", {\n enumerable: true,\n get: function () {\n return parse_1.parseFile;\n }\n});\nObject.defineProperty(exports, \"ParserOptions\", {\n enumerable: true,\n get: function () {\n return parse_1.ParserOptions;\n }\n});\nObject.defineProperty(exports, \"CsvParserStream\", {\n enumerable: true,\n get: function () {\n return parse_1.CsvParserStream;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZm9ybWF0Iiwid3JpdGUiLCJ3cml0ZVRvU3RyZWFtIiwid3JpdGVUb0J1ZmZlciIsIndyaXRlVG9TdHJpbmciLCJ3cml0ZVRvUGF0aCIsIkNzdkZvcm1hdHRlclN0cmVhbSIsIkZvcm1hdHRlck9wdGlvbnMiLCJwYXJzZV8xIiwicGFyc2UiLCJwYXJzZVN0cmluZyIsInBhcnNlU3RyZWFtIiwicGFyc2VGaWxlIiwiUGFyc2VyT3B0aW9ucyIsIkNzdlBhcnNlclN0cmVhbSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0lDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sUUFBQSxDQUFBTyxNQUFNO0VBQUE7QUFBQTtBQUNOTCxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLFFBQUEsQ0FBQVEsS0FBSztFQUFBO0FBQUE7QUFDTE4sTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBTixRQUFBLENBQUFTLGFBQWE7RUFBQTtBQUFBO0FBQ2JQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sUUFBQSxDQUFBVSxhQUFhO0VBQUE7QUFBQTtBQUNiUixNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLFFBQUEsQ0FBQVcsYUFBYTtFQUFBO0FBQUE7QUFDYlQsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBTixRQUFBLENBQUFZLFdBQVc7RUFBQTtBQUFBO0FBQ1hWLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sUUFBQSxDQUFBYSxrQkFBa0I7RUFBQTtBQUFBO0FBQ2xCWCxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLFFBQUEsQ0FBQWMsZ0JBQWdCO0VBQUE7QUFBQTtBQVVwQixJQUFBQyxPQUFBLEdBQUFkLE9BQUE7QUFDSUMsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBUyxPQUFBLENBQUFDLEtBQUs7RUFBQTtBQUFBO0FBQ0xkLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVMsT0FBQSxDQUFBRSxXQUFXO0VBQUE7QUFBQTtBQUNYZixNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFTLE9BQUEsQ0FBQUcsV0FBVztFQUFBO0FBQUE7QUFDWGhCLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVMsT0FBQSxDQUFBSSxTQUFTO0VBQUE7QUFBQTtBQUNUakIsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBUyxPQUFBLENBQUFLLGFBQWE7RUFBQTtBQUFBO0FBQ2JsQixNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFTLE9BQUEsQ0FBQU0sZUFBZTtFQUFBO0FBQUEifQ==", + "'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n", + "var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n", + "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n", + "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n", + "'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n", + "'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n", + "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n", + "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n", + "'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n", + "'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n", + "'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n", + "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", + "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n", + "/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n}\n\nmodule.exports = escapeRegExp;\n", + "/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var result,\n index = -1,\n length = path.length;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result) {\n return result;\n }\n var length = object ? object.length : 0;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n * The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n result[key] = [value];\n }\n});\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = groupBy;\n", + "/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && objectToString.call(value) == boolTag);\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isBoolean;\n", + "/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n", + "/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n nullTag = '[object Null]',\n proxyTag = '[object Proxy]',\n undefinedTag = '[object Undefined]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isFunction;\n", + "/**\n * lodash 4.0.0 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nmodule.exports = isNil;\n", + "/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nmodule.exports = isUndefined;\n", + "/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n Set = getNative(root, 'Set'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each\n * element is kept.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length)\n ? baseUniq(array)\n : [];\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = uniq;\n", + "'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n", + "var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n", + "module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n", + "'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n", + "module.exports={\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}", + "// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n", + "// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n", + "// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n", + "var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n", + "exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n", + "var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n", + "var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n", + "var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n", + "var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n", + "var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n", + "'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n", + "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", + "exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n", + "var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n", + "var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n", + "var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n", + "var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n", + "module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n", + "'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n", + "'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n", + "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};", + "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", + "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();", + "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};", + "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;", + "module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n", + "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", + "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};", + "module.exports = require('events').EventEmitter;\n", + "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n", + "'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n", + "/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", + "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst ed5 = require(\"xmlchars/xml/1.0/ed5\");\nconst ed2 = require(\"xmlchars/xml/1.1/ed2\");\nconst NSed3 = require(\"xmlchars/xmlns/1.0/ed3\");\nvar isS = ed5.isS;\nvar isChar10 = ed5.isChar;\nvar isNameStartChar = ed5.isNameStartChar;\nvar isNameChar = ed5.isNameChar;\nvar S_LIST = ed5.S_LIST;\nvar NAME_RE = ed5.NAME_RE;\nvar isChar11 = ed2.isChar;\nvar isNCNameStartChar = NSed3.isNCNameStartChar;\nvar isNCNameChar = NSed3.isNCNameChar;\nvar NC_NAME_RE = NSed3.NC_NAME_RE;\nconst XML_NAMESPACE = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE = \"http://www.w3.org/2000/xmlns/\";\nconst rootNS = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __proto__: null,\n xml: XML_NAMESPACE,\n xmlns: XMLNS_NAMESPACE\n};\nconst XML_ENTITIES = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __proto__: null,\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: \"\\\"\",\n apos: \"'\"\n};\n// EOC: end-of-chunk\nconst EOC = -1;\nconst NL_LIKE = -2;\nconst S_BEGIN = 0; // Initial state.\nconst S_BEGIN_WHITESPACE = 1; // leading whitespace\nconst S_DOCTYPE = 2; // \nconst TAB = 9;\nconst NL = 0xA;\nconst CR = 0xD;\nconst SPACE = 0x20;\nconst BANG = 0x21;\nconst DQUOTE = 0x22;\nconst AMP = 0x26;\nconst SQUOTE = 0x27;\nconst MINUS = 0x2D;\nconst FORWARD_SLASH = 0x2F;\nconst SEMICOLON = 0x3B;\nconst LESS = 0x3C;\nconst EQUAL = 0x3D;\nconst GREATER = 0x3E;\nconst QUESTION = 0x3F;\nconst OPEN_BRACKET = 0x5B;\nconst CLOSE_BRACKET = 0x5D;\nconst NEL = 0x85;\nconst LS = 0x2028; // Line Separator\nconst isQuote = c => c === DQUOTE || c === SQUOTE;\nconst QUOTES = [DQUOTE, SQUOTE];\nconst DOCTYPE_TERMINATOR = [...QUOTES, OPEN_BRACKET, GREATER];\nconst DTD_TERMINATOR = [...QUOTES, LESS, CLOSE_BRACKET];\nconst XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION, ...S_LIST];\nconst ATTRIB_VALUE_UNQUOTED_TERMINATOR = [...S_LIST, GREATER, AMP, LESS];\nfunction nsPairCheck(parser, prefix, uri) {\n switch (prefix) {\n case \"xml\":\n if (uri !== XML_NAMESPACE) {\n parser.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`);\n }\n break;\n case \"xmlns\":\n if (uri !== XMLNS_NAMESPACE) {\n parser.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`);\n }\n break;\n default:\n }\n switch (uri) {\n case XMLNS_NAMESPACE:\n parser.fail(prefix === \"\" ? `the default namespace may not be set to ${uri}.` : `may not assign a prefix (even \"xmlns\") to the URI \\\n${XMLNS_NAMESPACE}.`);\n break;\n case XML_NAMESPACE:\n switch (prefix) {\n case \"xml\":\n // Assinging the XML namespace to \"xml\" is fine.\n break;\n case \"\":\n parser.fail(`the default namespace may not be set to ${uri}.`);\n break;\n default:\n parser.fail(\"may not assign the xml namespace to another prefix.\");\n }\n break;\n default:\n }\n}\nfunction nsMappingCheck(parser, mapping) {\n for (const local of Object.keys(mapping)) {\n nsPairCheck(parser, local, mapping[local]);\n }\n}\nconst isNCName = name => NC_NAME_RE.test(name);\nconst isName = name => NAME_RE.test(name);\nconst FORBIDDEN_START = 0;\nconst FORBIDDEN_BRACKET = 1;\nconst FORBIDDEN_BRACKET_BRACKET = 2;\n/**\n * The list of supported events.\n */\nexports.EVENTS = [\"xmldecl\", \"text\", \"processinginstruction\", \"doctype\", \"comment\", \"opentagstart\", \"attribute\", \"opentag\", \"closetag\", \"cdata\", \"error\", \"end\", \"ready\"];\nconst EVENT_NAME_TO_HANDLER_NAME = {\n xmldecl: \"xmldeclHandler\",\n text: \"textHandler\",\n processinginstruction: \"piHandler\",\n doctype: \"doctypeHandler\",\n comment: \"commentHandler\",\n opentagstart: \"openTagStartHandler\",\n attribute: \"attributeHandler\",\n opentag: \"openTagHandler\",\n closetag: \"closeTagHandler\",\n cdata: \"cdataHandler\",\n error: \"errorHandler\",\n end: \"endHandler\",\n ready: \"readyHandler\"\n};\nclass SaxesParser {\n /**\n * @param opt The parser options.\n */\n constructor(opt) {\n this.opt = opt !== null && opt !== void 0 ? opt : {};\n this.fragmentOpt = !!this.opt.fragment;\n const xmlnsOpt = this.xmlnsOpt = !!this.opt.xmlns;\n this.trackPosition = this.opt.position !== false;\n this.fileName = this.opt.fileName;\n if (xmlnsOpt) {\n // This is the function we use to perform name checks on PIs and entities.\n // When namespaces are used, colons are not allowed in PI target names or\n // entity names. So the check depends on whether namespaces are used. See:\n //\n // https://www.w3.org/XML/xml-names-19990114-errata.html\n // NE08\n //\n this.nameStartCheck = isNCNameStartChar;\n this.nameCheck = isNCNameChar;\n this.isName = isNCName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsNS;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribNS;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.ns = Object.assign({\n __proto__: null\n }, rootNS);\n const additional = this.opt.additionalNamespaces;\n if (additional != null) {\n nsMappingCheck(this, additional);\n Object.assign(this.ns, additional);\n }\n } else {\n this.nameStartCheck = isNameStartChar;\n this.nameCheck = isNameChar;\n this.isName = isName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsPlain;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribPlain;\n }\n //\n // The order of the members in this table needs to correspond to the state\n // numbers given to the states that correspond to the methods being recorded\n // here.\n //\n this.stateTable = [/* eslint-disable @typescript-eslint/unbound-method */\n this.sBegin, this.sBeginWhitespace, this.sDoctype, this.sDoctypeQuote, this.sDTD, this.sDTDQuoted, this.sDTDOpenWaka, this.sDTDOpenWakaBang, this.sDTDComment, this.sDTDCommentEnding, this.sDTDCommentEnded, this.sDTDPI, this.sDTDPIEnding, this.sText, this.sEntity, this.sOpenWaka, this.sOpenWakaBang, this.sComment, this.sCommentEnding, this.sCommentEnded, this.sCData, this.sCDataEnding, this.sCDataEnding2, this.sPIFirstChar, this.sPIRest, this.sPIBody, this.sPIEnding, this.sXMLDeclNameStart, this.sXMLDeclName, this.sXMLDeclEq, this.sXMLDeclValueStart, this.sXMLDeclValue, this.sXMLDeclSeparator, this.sXMLDeclEnding, this.sOpenTag, this.sOpenTagSlash, this.sAttrib, this.sAttribName, this.sAttribNameSawWhite, this.sAttribValue, this.sAttribValueQuoted, this.sAttribValueClosed, this.sAttribValueUnquoted, this.sCloseTag, this.sCloseTagSawWhite];\n this._init();\n }\n /**\n * Indicates whether or not the parser is closed. If ``true``, wait for\n * the ``ready`` event to write again.\n */\n get closed() {\n return this._closed;\n }\n _init() {\n var _a;\n this.openWakaBang = \"\";\n this.text = \"\";\n this.name = \"\";\n this.piTarget = \"\";\n this.entity = \"\";\n this.q = null;\n this.tags = [];\n this.tag = null;\n this.topNS = null;\n this.chunk = \"\";\n this.chunkPosition = 0;\n this.i = 0;\n this.prevI = 0;\n this.carriedFromPrevious = undefined;\n this.forbiddenState = FORBIDDEN_START;\n this.attribList = [];\n // The logic is organized so as to minimize the need to check\n // this.opt.fragment while parsing.\n const {\n fragmentOpt\n } = this;\n this.state = fragmentOpt ? S_TEXT : S_BEGIN;\n // We want these to be all true if we are dealing with a fragment.\n this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot = this.sawRoot = fragmentOpt;\n // An XML declaration is intially possible only when parsing whole\n // documents.\n this.xmlDeclPossible = !fragmentOpt;\n this.xmlDeclExpects = [\"version\"];\n this.entityReturnState = undefined;\n let {\n defaultXMLVersion\n } = this.opt;\n if (defaultXMLVersion === undefined) {\n if (this.opt.forceXMLVersion === true) {\n throw new Error(\"forceXMLVersion set but defaultXMLVersion is not set\");\n }\n defaultXMLVersion = \"1.0\";\n }\n this.setXMLVersion(defaultXMLVersion);\n this.positionAtNewLine = 0;\n this.doctype = false;\n this._closed = false;\n this.xmlDecl = {\n version: undefined,\n encoding: undefined,\n standalone: undefined\n };\n this.line = 1;\n this.column = 0;\n this.ENTITIES = Object.create(XML_ENTITIES);\n // eslint-disable-next-line no-unused-expressions\n (_a = this.readyHandler) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n /**\n * The stream position the parser is currently looking at. This field is\n * zero-based.\n *\n * This field is not based on counting Unicode characters but is to be\n * interpreted as a plain index into a JavaScript string.\n */\n get position() {\n return this.chunkPosition + this.i;\n }\n /**\n * The column number of the next character to be read by the parser. *\n * This field is zero-based. (The first column in a line is 0.)\n *\n * This field reports the index at which the next character would be in the\n * line if the line were represented as a JavaScript string. Note that this\n * *can* be different to a count based on the number of *Unicode characters*\n * due to how JavaScript handles astral plane characters.\n *\n * See [[column]] for a number that corresponds to a count of Unicode\n * characters.\n */\n get columnIndex() {\n return this.position - this.positionAtNewLine;\n }\n /**\n * Set an event listener on an event. The parser supports one handler per\n * event type. If you try to set an event handler over an existing handler,\n * the old handler is silently overwritten.\n *\n * @param name The event to listen to.\n *\n * @param handler The handler to set.\n */\n on(name, handler) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = handler;\n }\n /**\n * Unset an event handler.\n *\n * @parma name The event to stop listening to.\n */\n off(name) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = undefined;\n }\n /**\n * Make an error object. The error object will have a message that contains\n * the ``fileName`` option passed at the creation of the parser. If position\n * tracking was turned on, it will also have line and column number\n * information.\n *\n * @param message The message describing the error to report.\n *\n * @returns An error object with a properly formatted message.\n */\n makeError(message) {\n var _a;\n let msg = (_a = this.fileName) !== null && _a !== void 0 ? _a : \"\";\n if (this.trackPosition) {\n if (msg.length > 0) {\n msg += \":\";\n }\n msg += `${this.line}:${this.column}`;\n }\n if (msg.length > 0) {\n msg += \": \";\n }\n return new Error(msg + message);\n }\n /**\n * Report a parsing error. This method is made public so that client code may\n * check for issues that are outside the scope of this project and can report\n * errors.\n *\n * @param message The error to report.\n *\n * @returns this\n */\n fail(message) {\n const err = this.makeError(message);\n const handler = this.errorHandler;\n if (handler === undefined) {\n throw err;\n } else {\n handler(err);\n }\n return this;\n }\n /**\n * Write a XML data to the parser.\n *\n * @param chunk The XML data to write.\n *\n * @returns this\n */\n write(chunk) {\n if (this.closed) {\n return this.fail(\"cannot write after close; assign an onready handler.\");\n }\n let end = false;\n if (chunk === null) {\n // We cannot return immediately because carriedFromPrevious may need\n // processing.\n end = true;\n chunk = \"\";\n } else if (typeof chunk === \"object\") {\n chunk = chunk.toString();\n }\n // We checked if performing a pre-decomposition of the string into an array\n // of single complete characters (``Array.from(chunk)``) would be faster\n // than the current repeated calls to ``charCodeAt``. As of August 2018, it\n // isn't. (There may be Node-specific code that would perform faster than\n // ``Array.from`` but don't want to be dependent on Node.)\n if (this.carriedFromPrevious !== undefined) {\n // The previous chunk had char we must carry over.\n chunk = `${this.carriedFromPrevious}${chunk}`;\n this.carriedFromPrevious = undefined;\n }\n let limit = chunk.length;\n const lastCode = chunk.charCodeAt(limit - 1);\n if (!end && (\n // A trailing CR or surrogate must be carried over to the next\n // chunk.\n lastCode === CR || lastCode >= 0xD800 && lastCode <= 0xDBFF)) {\n // The chunk ends with a character that must be carried over. We cannot\n // know how to handle it until we get the next chunk or the end of the\n // stream. So save it for later.\n this.carriedFromPrevious = chunk[limit - 1];\n limit--;\n chunk = chunk.slice(0, limit);\n }\n const {\n stateTable\n } = this;\n this.chunk = chunk;\n this.i = 0;\n while (this.i < limit) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stateTable[this.state].call(this);\n }\n this.chunkPosition += limit;\n return end ? this.end() : this;\n }\n /**\n * Close the current stream. Perform final well-formedness checks and reset\n * the parser tstate.\n *\n * @returns this\n */\n close() {\n return this.write(null);\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.0.\n *\n * @returns The character read.\n */\n getCode10() {\n const {\n chunk,\n i\n } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if (code >= SPACE || code === TAB) {\n return code;\n }\n switch (code) {\n case NL:\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR:\n // We may get NaN if we read past the end of the chunk, which is fine.\n if (chunk.charCodeAt(i + 1) === NL) {\n // A \\r\\n sequence is converted to \\n so we have to skip over the\n // next character. We already know it has a size of 1 so ++ is fine\n // here.\n this.i = i + 2;\n }\n // Otherwise, a \\r is just converted to \\n, so we don't have to skip\n // ahead.\n // In either case, \\r becomes \\n.\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n // If we get here, then code < SPACE and it is not NL CR or TAB.\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isChar10 that takes into account\n // that in this context code > 0xDBFF and code <= 0xFFFF. So it does not\n // test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isChar10 that takes into account that in\n // this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.1.\n *\n * @returns {number} The character read.\n */\n getCode11() {\n const {\n chunk,\n i\n } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if (code > 0x1F && code < 0x7F || code > 0x9F && code !== LS || code === TAB) {\n return code;\n }\n switch (code) {\n case NL:\n // 0xA\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR:\n {\n // 0xD\n // We may get NaN if we read past the end of the chunk, which is\n // fine.\n const next = chunk.charCodeAt(i + 1);\n if (next === NL || next === NEL) {\n // A CR NL or CR NEL sequence is converted to NL so we have to skip\n // over the next character. We already know it has a size of 1.\n this.i = i + 2;\n }\n // Otherwise, a CR is just converted to NL, no skip.\n }\n /* yes, fall through */\n case NEL: // 0x85\n case LS:\n // Ox2028\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context code > 0xDBFF and code <= 0xFFFF. So it\n // does not test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Like ``getCode`` but with the return value normalized so that ``NL`` is\n * returned for ``NL_LIKE``.\n */\n getCodeNorm() {\n const c = this.getCode();\n return c === NL_LIKE ? NL : c;\n }\n unget() {\n this.i = this.prevI;\n this.column--;\n }\n /**\n * Capture characters into a buffer until encountering one of a set of\n * characters.\n *\n * @param chars An array of codepoints. Encountering a character in the array\n * ends the capture. (``chars`` may safely contain ``NL``.)\n *\n * @return The character code that made the capture end, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureTo(chars) {\n let {\n i: start\n } = this;\n const {\n chunk\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n const isNLLike = c === NL_LIKE;\n const final = isNLLike ? NL : c;\n if (final === EOC || chars.includes(final)) {\n this.text += chunk.slice(start, this.prevI);\n return final;\n }\n if (isNLLike) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n }\n }\n }\n /**\n * Capture characters into a buffer until encountering a character.\n *\n * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT\n * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior.\n *\n * @return ``true`` if we ran into the character. Otherwise, we ran into the\n * end of the current chunk.\n */\n captureToChar(char) {\n let {\n i: start\n } = this;\n const {\n chunk\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let c = this.getCode();\n switch (c) {\n case NL_LIKE:\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n c = NL;\n break;\n case EOC:\n this.text += chunk.slice(start);\n return false;\n default:\n }\n if (c === char) {\n this.text += chunk.slice(start, this.prevI);\n return true;\n }\n }\n }\n /**\n * Capture characters that satisfy ``isNameChar`` into the ``name`` field of\n * this parser.\n *\n * @return The character code that made the test fail, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureNameChars() {\n const {\n chunk,\n i: start\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n if (c === EOC) {\n this.name += chunk.slice(start);\n return EOC;\n }\n // NL is not a name char so we don't have to test specifically for it.\n if (!isNameChar(c)) {\n this.name += chunk.slice(start, this.prevI);\n return c === NL_LIKE ? NL : c;\n }\n }\n }\n /**\n * Skip white spaces.\n *\n * @return The character that ended the skip, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n skipSpaces() {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC || !isS(c)) {\n return c;\n }\n }\n }\n setXMLVersion(version) {\n this.currentXMLVersion = version;\n /* eslint-disable @typescript-eslint/unbound-method */\n if (version === \"1.0\") {\n this.isChar = isChar10;\n this.getCode = this.getCode10;\n } else {\n this.isChar = isChar11;\n this.getCode = this.getCode11;\n }\n /* eslint-enable @typescript-eslint/unbound-method */\n }\n // STATE ENGINE METHODS\n // This needs to be a state separate from S_BEGIN_WHITESPACE because we want\n // to be sure never to come back to this state later.\n sBegin() {\n // We are essentially peeking at the first character of the chunk. Since\n // S_BEGIN can be in effect only when we start working on the first chunk,\n // the index at which we must look is necessarily 0. Note also that the\n // following test does not depend on decoding surrogates.\n // If the initial character is 0xFEFF, ignore it.\n if (this.chunk.charCodeAt(0) === 0xFEFF) {\n this.i++;\n this.column++;\n }\n this.state = S_BEGIN_WHITESPACE;\n }\n sBeginWhitespace() {\n // We need to know whether we've encountered spaces or not because as soon\n // as we run into a space, an XML declaration is no longer possible. Rather\n // than slow down skipSpaces even in places where we don't care whether it\n // skipped anything or not, we check whether prevI is equal to the value of\n // i from before we skip spaces.\n const iBefore = this.i;\n const c = this.skipSpaces();\n if (this.prevI !== iBefore) {\n this.xmlDeclPossible = false;\n }\n switch (c) {\n case LESS:\n this.state = S_OPEN_WAKA;\n // We could naively call closeText but in this state, it is not normal\n // to have text be filled with any data.\n if (this.text.length !== 0) {\n throw new Error(\"no-empty text at start\");\n }\n break;\n case EOC:\n break;\n default:\n this.unget();\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n sDoctype() {\n var _a;\n const c = this.captureTo(DOCTYPE_TERMINATOR);\n switch (c) {\n case GREATER:\n {\n // eslint-disable-next-line no-unused-expressions\n (_a = this.doctypeHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n this.doctype = true; // just remember that we saw it.\n break;\n }\n case EOC:\n break;\n default:\n this.text += String.fromCodePoint(c);\n if (c === OPEN_BRACKET) {\n this.state = S_DTD;\n } else if (isQuote(c)) {\n this.state = S_DOCTYPE_QUOTE;\n this.q = c;\n }\n }\n }\n sDoctypeQuote() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.q = null;\n this.state = S_DOCTYPE;\n }\n }\n sDTD() {\n const c = this.captureTo(DTD_TERMINATOR);\n if (c === EOC) {\n return;\n }\n this.text += String.fromCodePoint(c);\n if (c === CLOSE_BRACKET) {\n this.state = S_DOCTYPE;\n } else if (c === LESS) {\n this.state = S_DTD_OPEN_WAKA;\n } else if (isQuote(c)) {\n this.state = S_DTD_QUOTED;\n this.q = c;\n }\n }\n sDTDQuoted() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.state = S_DTD;\n this.q = null;\n }\n }\n sDTDOpenWaka() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n switch (c) {\n case BANG:\n this.state = S_DTD_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n break;\n case QUESTION:\n this.state = S_DTD_PI;\n break;\n default:\n this.state = S_DTD;\n }\n }\n sDTDOpenWakaBang() {\n const char = String.fromCodePoint(this.getCodeNorm());\n const owb = this.openWakaBang += char;\n this.text += char;\n if (owb !== \"-\") {\n this.state = owb === \"--\" ? S_DTD_COMMENT : S_DTD;\n this.openWakaBang = \"\";\n }\n }\n sDTDComment() {\n if (this.captureToChar(MINUS)) {\n this.text += \"-\";\n this.state = S_DTD_COMMENT_ENDING;\n }\n }\n sDTDCommentEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT;\n }\n sDTDCommentEnded() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n } else {\n this.fail(\"malformed comment.\");\n // will be recorded as\n // a comment of \" blah -- bloo \"\n this.state = S_DTD_COMMENT;\n }\n }\n sDTDPI() {\n if (this.captureToChar(QUESTION)) {\n this.text += \"?\";\n this.state = S_DTD_PI_ENDING;\n }\n }\n sDTDPIEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n }\n }\n sText() {\n //\n // We did try a version of saxes where the S_TEXT state was split in two\n // states: one for text inside the root element, and one for text\n // outside. This was avoiding having to test this.tags.length to decide\n // what implementation to actually use.\n //\n // Peformance testing on gigabyte-size files did not show any advantage to\n // using the two states solution instead of the current one. Conversely, it\n // made the code a bit more complicated elsewhere. For instance, a comment\n // can appear before the root element so when a comment ended it was\n // necessary to determine whether to return to the S_TEXT state or to the\n // new text-outside-root state.\n //\n if (this.tags.length !== 0) {\n this.handleTextInRoot();\n } else {\n this.handleTextOutsideRoot();\n }\n }\n sEntity() {\n // This is essentially a specialized version of captureToChar(SEMICOLON...)\n let {\n i: start\n } = this;\n const {\n chunk\n } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n loop:\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case NL_LIKE:\n this.entity += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n break;\n case SEMICOLON:\n {\n const {\n entityReturnState\n } = this;\n const entity = this.entity + chunk.slice(start, this.prevI);\n this.state = entityReturnState;\n let parsed;\n if (entity === \"\") {\n this.fail(\"empty entity name.\");\n parsed = \"&;\";\n } else {\n parsed = this.parseEntity(entity);\n this.entity = \"\";\n }\n if (entityReturnState !== S_TEXT || this.textHandler !== undefined) {\n this.text += parsed;\n }\n // eslint-disable-next-line no-labels\n break loop;\n }\n case EOC:\n this.entity += chunk.slice(start);\n // eslint-disable-next-line no-labels\n break loop;\n default:\n }\n }\n }\n sOpenWaka() {\n // Reminder: a state handler is called with at least one character\n // available in the current chunk. So the first call to get code inside of\n // a state handler cannot return ``EOC``. That's why we don't test\n // for it.\n const c = this.getCode();\n // either a /, ?, !, or text is coming next.\n if (isNameStartChar(c)) {\n this.state = S_OPEN_TAG;\n this.unget();\n this.xmlDeclPossible = false;\n } else {\n switch (c) {\n case FORWARD_SLASH:\n this.state = S_CLOSE_TAG;\n this.xmlDeclPossible = false;\n break;\n case BANG:\n this.state = S_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n this.xmlDeclPossible = false;\n break;\n case QUESTION:\n this.state = S_PI_FIRST_CHAR;\n break;\n default:\n this.fail(\"disallowed character in tag name\");\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n }\n sOpenWakaBang() {\n this.openWakaBang += String.fromCodePoint(this.getCodeNorm());\n switch (this.openWakaBang) {\n case \"[CDATA[\":\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n this.state = S_CDATA;\n this.openWakaBang = \"\";\n break;\n case \"--\":\n this.state = S_COMMENT;\n this.openWakaBang = \"\";\n break;\n case \"DOCTYPE\":\n this.state = S_DOCTYPE;\n if (this.doctype || this.sawRoot) {\n this.fail(\"inappropriately located doctype declaration.\");\n }\n this.openWakaBang = \"\";\n break;\n default:\n // 7 happens to be the maximum length of the string that can possibly\n // match one of the cases above.\n if (this.openWakaBang.length >= 7) {\n this.fail(\"incorrect syntax.\");\n }\n }\n }\n sComment() {\n if (this.captureToChar(MINUS)) {\n this.state = S_COMMENT_ENDING;\n }\n }\n sCommentEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === MINUS) {\n this.state = S_COMMENT_ENDED;\n // eslint-disable-next-line no-unused-expressions\n (_a = this.commentHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n } else {\n this.text += `-${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n }\n }\n sCommentEnded() {\n const c = this.getCodeNorm();\n if (c !== GREATER) {\n this.fail(\"malformed comment.\");\n // will be recorded as\n // a comment of \" blah -- bloo \"\n this.text += `--${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n } else {\n this.state = S_TEXT;\n }\n }\n sCData() {\n if (this.captureToChar(CLOSE_BRACKET)) {\n this.state = S_CDATA_ENDING;\n }\n }\n sCDataEnding() {\n const c = this.getCodeNorm();\n if (c === CLOSE_BRACKET) {\n this.state = S_CDATA_ENDING_2;\n } else {\n this.text += `]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n sCDataEnding2() {\n var _a;\n const c = this.getCodeNorm();\n switch (c) {\n case GREATER:\n {\n // eslint-disable-next-line no-unused-expressions\n (_a = this.cdataHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n break;\n }\n case CLOSE_BRACKET:\n this.text += \"]\";\n break;\n default:\n this.text += `]]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n // We need this separate state to check the first character fo the pi target\n // with this.nameStartCheck which allows less characters than this.nameCheck.\n sPIFirstChar() {\n const c = this.getCodeNorm();\n // This is first because in the case where the file is well-formed this is\n // the branch taken. We optimize for well-formedness.\n if (this.nameStartCheck(c)) {\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n } else if (c === QUESTION || isS(c)) {\n this.fail(\"processing instruction without a target.\");\n this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY;\n } else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n }\n }\n sPIRest() {\n // Capture characters into a piTarget while ``this.nameCheck`` run on the\n // character read returns true.\n const {\n chunk,\n i: start\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC) {\n this.piTarget += chunk.slice(start);\n return;\n }\n // NL cannot satisfy this.nameCheck so we don't have to test specifically\n // for it.\n if (!this.nameCheck(c)) {\n this.piTarget += chunk.slice(start, this.prevI);\n const isQuestion = c === QUESTION;\n if (isQuestion || isS(c)) {\n if (this.piTarget === \"xml\") {\n if (!this.xmlDeclPossible) {\n this.fail(\"an XML declaration must be at the start of the document.\");\n }\n this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START;\n } else {\n this.state = isQuestion ? S_PI_ENDING : S_PI_BODY;\n }\n } else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n }\n break;\n }\n }\n }\n sPIBody() {\n if (this.text.length === 0) {\n const c = this.getCodeNorm();\n if (c === QUESTION) {\n this.state = S_PI_ENDING;\n } else if (!isS(c)) {\n this.text = String.fromCodePoint(c);\n }\n }\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n else if (this.captureToChar(QUESTION)) {\n this.state = S_PI_ENDING;\n }\n }\n sPIEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n const {\n piTarget\n } = this;\n if (piTarget.toLowerCase() === \"xml\") {\n this.fail(\"the XML declaration must appear at the start of the document.\");\n }\n // eslint-disable-next-line no-unused-expressions\n (_a = this.piHandler) === null || _a === void 0 ? void 0 : _a.call(this, {\n target: piTarget,\n body: this.text\n });\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n } else if (c === QUESTION) {\n // We ran into ?? as part of a processing instruction. We initially took\n // the first ? as a sign that the PI was ending, but it is not. So we have\n // to add it to the body but we take the new ? as a sign that the PI is\n // ending.\n this.text += \"?\";\n } else {\n this.text += `?${String.fromCodePoint(c)}`;\n this.state = S_PI_BODY;\n }\n this.xmlDeclPossible = false;\n }\n sXMLDeclNameStart() {\n const c = this.skipSpaces();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (c !== EOC) {\n this.state = S_XML_DECL_NAME;\n this.name = String.fromCodePoint(c);\n }\n }\n sXMLDeclName() {\n const c = this.captureTo(XML_DECL_NAME_TERMINATOR);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.name += this.text;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (!(isS(c) || c === EQUAL)) {\n return;\n }\n this.name += this.text;\n this.text = \"\";\n if (!this.xmlDeclExpects.includes(this.name)) {\n switch (this.name.length) {\n case 0:\n this.fail(\"did not expect any more name/value pairs.\");\n break;\n case 1:\n this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);\n break;\n default:\n this.fail(`expected one of ${this.xmlDeclExpects.join(\", \")}`);\n }\n }\n this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ;\n }\n sXMLDeclEq() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (c !== EQUAL) {\n this.fail(\"value required.\");\n }\n this.state = S_XML_DECL_VALUE_START;\n }\n sXMLDeclValueStart() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (!isQuote(c)) {\n this.fail(\"value must be quoted.\");\n this.q = SPACE;\n } else {\n this.q = c;\n }\n this.state = S_XML_DECL_VALUE;\n }\n sXMLDeclValue() {\n const c = this.captureTo([this.q, QUESTION]);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (c === EOC) {\n return;\n }\n const value = this.text;\n this.text = \"\";\n switch (this.name) {\n case \"version\":\n {\n this.xmlDeclExpects = [\"encoding\", \"standalone\"];\n const version = value;\n this.xmlDecl.version = version;\n // This is the test specified by XML 1.0 but it is fine for XML 1.1.\n if (!/^1\\.[0-9]+$/.test(version)) {\n this.fail(\"version number must match /^1\\\\.[0-9]+$/.\");\n }\n // When forceXMLVersion is set, the XML declaration is ignored.\n else if (!this.opt.forceXMLVersion) {\n this.setXMLVersion(version);\n }\n break;\n }\n case \"encoding\":\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) {\n this.fail(\"encoding value must match \\\n/^[A-Za-z0-9][A-Za-z0-9._-]*$/.\");\n }\n this.xmlDeclExpects = [\"standalone\"];\n this.xmlDecl.encoding = value;\n break;\n case \"standalone\":\n if (value !== \"yes\" && value !== \"no\") {\n this.fail(\"standalone value must match \\\"yes\\\" or \\\"no\\\".\");\n }\n this.xmlDeclExpects = [];\n this.xmlDecl.standalone = value;\n break;\n default:\n // We don't need to raise an error here since we've already raised one\n // when checking what name was expected.\n }\n\n this.name = \"\";\n this.state = S_XML_DECL_SEPARATOR;\n }\n sXMLDeclSeparator() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (!isS(c)) {\n this.fail(\"whitespace required.\");\n this.unget();\n }\n this.state = S_XML_DECL_NAME_START;\n }\n sXMLDeclEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n if (this.piTarget !== \"xml\") {\n this.fail(\"processing instructions are not allowed before root.\");\n } else if (this.name !== \"version\" && this.xmlDeclExpects.includes(\"version\")) {\n this.fail(\"XML declaration must contain a version.\");\n }\n // eslint-disable-next-line no-unused-expressions\n (_a = this.xmldeclHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.xmlDecl);\n this.name = \"\";\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n } else {\n // We got here because the previous character was a ?, but the question\n // mark character is not valid inside any of the XML declaration\n // name/value pairs.\n this.fail(\"The character ? is disallowed anywhere in XML declarations.\");\n }\n this.xmlDeclPossible = false;\n }\n sOpenTag() {\n var _a;\n const c = this.captureNameChars();\n if (c === EOC) {\n return;\n }\n const tag = this.tag = {\n name: this.name,\n attributes: Object.create(null)\n };\n this.name = \"\";\n if (this.xmlnsOpt) {\n this.topNS = tag.ns = Object.create(null);\n }\n // eslint-disable-next-line no-unused-expressions\n (_a = this.openTagStartHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n this.sawRoot = true;\n if (!this.fragmentOpt && this.closedRoot) {\n this.fail(\"documents may contain only one root.\");\n }\n switch (c) {\n case GREATER:\n this.openTag();\n break;\n case FORWARD_SLASH:\n this.state = S_OPEN_TAG_SLASH;\n break;\n default:\n if (!isS(c)) {\n this.fail(\"disallowed character in tag name.\");\n }\n this.state = S_ATTRIB;\n }\n }\n sOpenTagSlash() {\n if (this.getCode() === GREATER) {\n this.openSelfClosingTag();\n } else {\n this.fail(\"forward-slash in opening tag not followed by >.\");\n this.state = S_ATTRIB;\n }\n }\n sAttrib() {\n const c = this.skipSpaces();\n if (c === EOC) {\n return;\n }\n if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n } else if (c === GREATER) {\n this.openTag();\n } else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n } else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribName() {\n const c = this.captureNameChars();\n if (c === EQUAL) {\n this.state = S_ATTRIB_VALUE;\n } else if (isS(c)) {\n this.state = S_ATTRIB_NAME_SAW_WHITE;\n } else if (c === GREATER) {\n this.fail(\"attribute without value.\");\n this.pushAttrib(this.name, this.name);\n this.name = this.text = \"\";\n this.openTag();\n } else if (c !== EOC) {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribNameSawWhite() {\n const c = this.skipSpaces();\n switch (c) {\n case EOC:\n return;\n case EQUAL:\n this.state = S_ATTRIB_VALUE;\n break;\n default:\n this.fail(\"attribute without value.\");\n // Should we do this???\n // this.tag.attributes[this.name] = \"\";\n this.text = \"\";\n this.name = \"\";\n if (c === GREATER) {\n this.openTag();\n } else if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n } else {\n this.fail(\"disallowed character in attribute name.\");\n this.state = S_ATTRIB;\n }\n }\n }\n sAttribValue() {\n const c = this.getCodeNorm();\n if (isQuote(c)) {\n this.q = c;\n this.state = S_ATTRIB_VALUE_QUOTED;\n } else if (!isS(c)) {\n this.fail(\"unquoted attribute value.\");\n this.state = S_ATTRIB_VALUE_UNQUOTED;\n this.unget();\n }\n }\n sAttribValueQuoted() {\n // We deliberately do not use captureTo here. The specialized code we use\n // here is faster than using captureTo.\n const {\n q,\n chunk\n } = this;\n let {\n i: start\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case q:\n this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI));\n this.name = this.text = \"\";\n this.q = null;\n this.state = S_ATTRIB_VALUE_CLOSED;\n return;\n case AMP:\n this.text += chunk.slice(start, this.prevI);\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_QUOTED;\n return;\n case NL:\n case NL_LIKE:\n case TAB:\n this.text += `${chunk.slice(start, this.prevI)} `;\n start = this.i;\n break;\n case LESS:\n this.text += chunk.slice(start, this.prevI);\n this.fail(\"disallowed character.\");\n return;\n case EOC:\n this.text += chunk.slice(start);\n return;\n default:\n }\n }\n }\n sAttribValueClosed() {\n const c = this.getCodeNorm();\n if (isS(c)) {\n this.state = S_ATTRIB;\n } else if (c === GREATER) {\n this.openTag();\n } else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n } else if (isNameStartChar(c)) {\n this.fail(\"no whitespace between attributes.\");\n this.unget();\n this.state = S_ATTRIB_NAME;\n } else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribValueUnquoted() {\n // We don't do anything regarding EOL or space handling for unquoted\n // attributes. We already have failed by the time we get here, and the\n // contract that saxes upholds states that upon failure, it is not safe to\n // rely on the data passed to event handlers (other than\n // ``onerror``). Passing \"bad\" data is not a problem.\n const c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);\n switch (c) {\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED;\n break;\n case LESS:\n this.fail(\"disallowed character.\");\n break;\n case EOC:\n break;\n default:\n if (this.text.includes(\"]]>\")) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n this.pushAttrib(this.name, this.text);\n this.name = this.text = \"\";\n if (c === GREATER) {\n this.openTag();\n } else {\n this.state = S_ATTRIB;\n }\n }\n }\n sCloseTag() {\n const c = this.captureNameChars();\n if (c === GREATER) {\n this.closeTag();\n } else if (isS(c)) {\n this.state = S_CLOSE_TAG_SAW_WHITE;\n } else if (c !== EOC) {\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n sCloseTagSawWhite() {\n switch (this.skipSpaces()) {\n case GREATER:\n this.closeTag();\n break;\n case EOC:\n break;\n default:\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n // END OF STATE ENGINE METHODS\n handleTextInRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for performing the ]]> check. A previous version of this code, checked\n // ``this.text`` for the presence of ]]>. It simplified the code but was\n // very costly when character data contained a lot of entities to be parsed.\n //\n // Since we are using a specialized loop, we also keep track of the presence\n // of ]]> in text data. The sequence ]]> is forbidden to appear as-is.\n //\n let {\n i: start,\n forbiddenState\n } = this;\n const {\n chunk,\n textHandler: handler\n } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n scanLoop:\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case LESS:\n {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const {\n text\n } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n } else if (slice.length !== 0) {\n handler(slice);\n }\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n case CLOSE_BRACKET:\n switch (forbiddenState) {\n case FORBIDDEN_START:\n forbiddenState = FORBIDDEN_BRACKET;\n break;\n case FORBIDDEN_BRACKET:\n forbiddenState = FORBIDDEN_BRACKET_BRACKET;\n break;\n case FORBIDDEN_BRACKET_BRACKET:\n break;\n default:\n throw new Error(\"impossible state\");\n }\n break;\n case GREATER:\n if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n forbiddenState = FORBIDDEN_START;\n break;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n forbiddenState = FORBIDDEN_START;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break scanLoop;\n default:\n forbiddenState = FORBIDDEN_START;\n }\n }\n this.forbiddenState = forbiddenState;\n }\n handleTextOutsideRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for a specialized task. We keep track of the presence of non-space\n // characters in the text since these are errors when appearing outside the\n // document root element.\n let {\n i: start\n } = this;\n const {\n chunk,\n textHandler: handler\n } = this;\n let nonSpace = false;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n outRootLoop:\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const code = this.getCode();\n switch (code) {\n case LESS:\n {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const {\n text\n } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n } else if (slice.length !== 0) {\n handler(slice);\n }\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n nonSpace = true;\n // eslint-disable-next-line no-labels\n break outRootLoop;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n default:\n if (!isS(code)) {\n nonSpace = true;\n }\n }\n }\n if (!nonSpace) {\n return;\n }\n // We use the reportedTextBeforeRoot and reportedTextAfterRoot flags\n // to avoid reporting errors for every single character that is out of\n // place.\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n }\n pushAttribNS(name, value) {\n var _a;\n const {\n prefix,\n local\n } = this.qname(name);\n const attr = {\n name,\n prefix,\n local,\n value\n };\n this.attribList.push(attr);\n // eslint-disable-next-line no-unused-expressions\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n if (prefix === \"xmlns\") {\n const trimmed = value.trim();\n if (this.currentXMLVersion === \"1.0\" && trimmed === \"\") {\n this.fail(\"invalid attempt to undefine prefix in XML 1.0\");\n }\n this.topNS[local] = trimmed;\n nsPairCheck(this, local, trimmed);\n } else if (name === \"xmlns\") {\n const trimmed = value.trim();\n this.topNS[\"\"] = trimmed;\n nsPairCheck(this, \"\", trimmed);\n }\n }\n pushAttribPlain(name, value) {\n var _a;\n const attr = {\n name,\n value\n };\n this.attribList.push(attr);\n // eslint-disable-next-line no-unused-expressions\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n }\n /**\n * End parsing. This performs final well-formedness checks and resets the\n * parser to a clean state.\n *\n * @returns this\n */\n end() {\n var _a, _b;\n if (!this.sawRoot) {\n this.fail(\"document must contain a root element.\");\n }\n const {\n tags\n } = this;\n while (tags.length > 0) {\n const tag = tags.pop();\n this.fail(`unclosed tag: ${tag.name}`);\n }\n if (this.state !== S_BEGIN && this.state !== S_TEXT) {\n this.fail(\"unexpected end.\");\n }\n const {\n text\n } = this;\n if (text.length !== 0) {\n // eslint-disable-next-line no-unused-expressions\n (_a = this.textHandler) === null || _a === void 0 ? void 0 : _a.call(this, text);\n this.text = \"\";\n }\n this._closed = true;\n // eslint-disable-next-line no-unused-expressions\n (_b = this.endHandler) === null || _b === void 0 ? void 0 : _b.call(this);\n this._init();\n return this;\n }\n /**\n * Resolve a namespace prefix.\n *\n * @param prefix The prefix to resolve.\n *\n * @returns The namespace URI or ``undefined`` if the prefix is not defined.\n */\n resolve(prefix) {\n var _a, _b;\n let uri = this.topNS[prefix];\n if (uri !== undefined) {\n return uri;\n }\n const {\n tags\n } = this;\n for (let index = tags.length - 1; index >= 0; index--) {\n uri = tags[index].ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n }\n uri = this.ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n return (_b = (_a = this.opt).resolvePrefix) === null || _b === void 0 ? void 0 : _b.call(_a, prefix);\n }\n /**\n * Parse a qname into its prefix and local name parts.\n *\n * @param name The name to parse\n *\n * @returns\n */\n qname(name) {\n // This is faster than using name.split(\":\").\n const colon = name.indexOf(\":\");\n if (colon === -1) {\n return {\n prefix: \"\",\n local: name\n };\n }\n const local = name.slice(colon + 1);\n const prefix = name.slice(0, colon);\n if (prefix === \"\" || local === \"\" || local.includes(\":\")) {\n this.fail(`malformed name: ${name}.`);\n }\n return {\n prefix,\n local\n };\n }\n processAttribsNS() {\n var _a;\n const {\n attribList\n } = this;\n const tag = this.tag;\n {\n // add namespace info to tag\n const {\n prefix,\n local\n } = this.qname(tag.name);\n tag.prefix = prefix;\n tag.local = local;\n const uri = tag.uri = (_a = this.resolve(prefix)) !== null && _a !== void 0 ? _a : \"\";\n if (prefix !== \"\") {\n if (prefix === \"xmlns\") {\n this.fail(\"tags may not have \\\"xmlns\\\" as prefix.\");\n }\n if (uri === \"\") {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n tag.uri = prefix;\n }\n }\n }\n if (attribList.length === 0) {\n return;\n }\n const {\n attributes\n } = tag;\n const seen = new Set();\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (const attr of attribList) {\n const {\n name,\n prefix,\n local\n } = attr;\n let uri;\n let eqname;\n if (prefix === \"\") {\n uri = name === \"xmlns\" ? XMLNS_NAMESPACE : \"\";\n eqname = name;\n } else {\n uri = this.resolve(prefix);\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (uri === undefined) {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n uri = prefix;\n }\n eqname = `{${uri}}${local}`;\n }\n if (seen.has(eqname)) {\n this.fail(`duplicate attribute: ${eqname}.`);\n }\n seen.add(eqname);\n attr.uri = uri;\n attributes[name] = attr;\n }\n this.attribList = [];\n }\n processAttribsPlain() {\n const {\n attribList\n } = this;\n // eslint-disable-next-line prefer-destructuring\n const attributes = this.tag.attributes;\n for (const {\n name,\n value\n } of attribList) {\n if (attributes[name] !== undefined) {\n this.fail(`duplicate attribute: ${name}.`);\n }\n attributes[name] = value;\n }\n this.attribList = [];\n }\n /**\n * Handle a complete open tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onopentag``.\n */\n openTag() {\n var _a;\n this.processAttribs();\n const {\n tags\n } = this;\n const tag = this.tag;\n tag.isSelfClosing = false;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n // eslint-disable-next-line no-unused-expressions\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n tags.push(tag);\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete self-closing tag. This parser code calls this once it has\n * seen the whole tag. This method checks for well-formeness and then emits\n * ``onopentag`` and ``onclosetag``.\n */\n openSelfClosingTag() {\n var _a, _b, _c;\n this.processAttribs();\n const {\n tags\n } = this;\n const tag = this.tag;\n tag.isSelfClosing = true;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n // eslint-disable-next-line no-unused-expressions\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n // eslint-disable-next-line no-unused-expressions\n (_b = this.closeTagHandler) === null || _b === void 0 ? void 0 : _b.call(this, tag);\n const top = this.tag = (_c = tags[tags.length - 1]) !== null && _c !== void 0 ? _c : null;\n if (top === null) {\n this.closedRoot = true;\n }\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete close tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onclosetag``.\n */\n closeTag() {\n const {\n tags,\n name\n } = this;\n // Our state after this will be S_TEXT, no matter what, and we can clear\n // tagName now.\n this.state = S_TEXT;\n this.name = \"\";\n if (name === \"\") {\n this.fail(\"weird empty close tag.\");\n this.text += \"\";\n return;\n }\n const handler = this.closeTagHandler;\n let l = tags.length;\n while (l-- > 0) {\n const tag = this.tag = tags.pop();\n this.topNS = tag.ns;\n // eslint-disable-next-line no-unused-expressions\n handler === null || handler === void 0 ? void 0 : handler(tag);\n if (tag.name === name) {\n break;\n }\n this.fail(\"unexpected close tag.\");\n }\n if (l === 0) {\n this.closedRoot = true;\n } else if (l < 0) {\n this.fail(`unmatched closing tag: ${name}.`);\n this.text += ``;\n }\n }\n /**\n * Resolves an entity. Makes any necessary well-formedness checks.\n *\n * @param entity The entity to resolve.\n *\n * @returns The parsed entity.\n */\n parseEntity(entity) {\n // startsWith would be significantly slower for this test.\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (entity[0] !== \"#\") {\n const defined = this.ENTITIES[entity];\n if (defined !== undefined) {\n return defined;\n }\n this.fail(this.isName(entity) ? \"undefined entity.\" : \"disallowed character in entity name.\");\n return `&${entity};`;\n }\n let num = NaN;\n if (entity[1] === \"x\" && /^#x[0-9a-f]+$/i.test(entity)) {\n num = parseInt(entity.slice(2), 16);\n } else if (/^#[0-9]+$/.test(entity)) {\n num = parseInt(entity.slice(1), 10);\n }\n // The character reference is required to match the CHAR production.\n if (!this.isChar(num)) {\n this.fail(\"malformed character entity.\");\n return `&${entity};`;\n }\n return String.fromCodePoint(num);\n }\n}\nexports.SaxesParser = SaxesParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlZDUiLCJyZXF1aXJlIiwiZWQyIiwiTlNlZDMiLCJpc1MiLCJpc0NoYXIxMCIsImlzQ2hhciIsImlzTmFtZVN0YXJ0Q2hhciIsImlzTmFtZUNoYXIiLCJTX0xJU1QiLCJOQU1FX1JFIiwiaXNDaGFyMTEiLCJpc05DTmFtZVN0YXJ0Q2hhciIsImlzTkNOYW1lQ2hhciIsIk5DX05BTUVfUkUiLCJYTUxfTkFNRVNQQUNFIiwiWE1MTlNfTkFNRVNQQUNFIiwicm9vdE5TIiwiX19wcm90b19fIiwieG1sIiwieG1sbnMiLCJYTUxfRU5USVRJRVMiLCJhbXAiLCJndCIsImx0IiwicXVvdCIsImFwb3MiLCJFT0MiLCJOTF9MSUtFIiwiU19CRUdJTiIsIlNfQkVHSU5fV0hJVEVTUEFDRSIsIlNfRE9DVFlQRSIsIlNfRE9DVFlQRV9RVU9URSIsIlNfRFREIiwiU19EVERfUVVPVEVEIiwiU19EVERfT1BFTl9XQUtBIiwiU19EVERfT1BFTl9XQUtBX0JBTkciLCJTX0RURF9DT01NRU5UIiwiU19EVERfQ09NTUVOVF9FTkRJTkciLCJTX0RURF9DT01NRU5UX0VOREVEIiwiU19EVERfUEkiLCJTX0RURF9QSV9FTkRJTkciLCJTX1RFWFQiLCJTX0VOVElUWSIsIlNfT1BFTl9XQUtBIiwiU19PUEVOX1dBS0FfQkFORyIsIlNfQ09NTUVOVCIsIlNfQ09NTUVOVF9FTkRJTkciLCJTX0NPTU1FTlRfRU5ERUQiLCJTX0NEQVRBIiwiU19DREFUQV9FTkRJTkciLCJTX0NEQVRBX0VORElOR18yIiwiU19QSV9GSVJTVF9DSEFSIiwiU19QSV9SRVNUIiwiU19QSV9CT0RZIiwiU19QSV9FTkRJTkciLCJTX1hNTF9ERUNMX05BTUVfU1RBUlQiLCJTX1hNTF9ERUNMX05BTUUiLCJTX1hNTF9ERUNMX0VRIiwiU19YTUxfREVDTF9WQUxVRV9TVEFSVCIsIlNfWE1MX0RFQ0xfVkFMVUUiLCJTX1hNTF9ERUNMX1NFUEFSQVRPUiIsIlNfWE1MX0RFQ0xfRU5ESU5HIiwiU19PUEVOX1RBRyIsIlNfT1BFTl9UQUdfU0xBU0giLCJTX0FUVFJJQiIsIlNfQVRUUklCX05BTUUiLCJTX0FUVFJJQl9OQU1FX1NBV19XSElURSIsIlNfQVRUUklCX1ZBTFVFIiwiU19BVFRSSUJfVkFMVUVfUVVPVEVEIiwiU19BVFRSSUJfVkFMVUVfQ0xPU0VEIiwiU19BVFRSSUJfVkFMVUVfVU5RVU9URUQiLCJTX0NMT1NFX1RBRyIsIlNfQ0xPU0VfVEFHX1NBV19XSElURSIsIlRBQiIsIk5MIiwiQ1IiLCJTUEFDRSIsIkJBTkciLCJEUVVPVEUiLCJBTVAiLCJTUVVPVEUiLCJNSU5VUyIsIkZPUldBUkRfU0xBU0giLCJTRU1JQ09MT04iLCJMRVNTIiwiRVFVQUwiLCJHUkVBVEVSIiwiUVVFU1RJT04iLCJPUEVOX0JSQUNLRVQiLCJDTE9TRV9CUkFDS0VUIiwiTkVMIiwiTFMiLCJpc1F1b3RlIiwiYyIsIlFVT1RFUyIsIkRPQ1RZUEVfVEVSTUlOQVRPUiIsIkRURF9URVJNSU5BVE9SIiwiWE1MX0RFQ0xfTkFNRV9URVJNSU5BVE9SIiwiQVRUUklCX1ZBTFVFX1VOUVVPVEVEX1RFUk1JTkFUT1IiLCJuc1BhaXJDaGVjayIsInBhcnNlciIsInByZWZpeCIsInVyaSIsImZhaWwiLCJuc01hcHBpbmdDaGVjayIsIm1hcHBpbmciLCJsb2NhbCIsIk9iamVjdCIsImtleXMiLCJpc05DTmFtZSIsIm5hbWUiLCJ0ZXN0IiwiaXNOYW1lIiwiRk9SQklEREVOX1NUQVJUIiwiRk9SQklEREVOX0JSQUNLRVQiLCJGT1JCSURERU5fQlJBQ0tFVF9CUkFDS0VUIiwiZXhwb3J0cyIsIkVWRU5UUyIsIkVWRU5UX05BTUVfVE9fSEFORExFUl9OQU1FIiwieG1sZGVjbCIsInRleHQiLCJwcm9jZXNzaW5naW5zdHJ1Y3Rpb24iLCJkb2N0eXBlIiwiY29tbWVudCIsIm9wZW50YWdzdGFydCIsImF0dHJpYnV0ZSIsIm9wZW50YWciLCJjbG9zZXRhZyIsImNkYXRhIiwiZXJyb3IiLCJlbmQiLCJyZWFkeSIsIlNheGVzUGFyc2VyIiwiY29uc3RydWN0b3IiLCJvcHQiLCJmcmFnbWVudE9wdCIsImZyYWdtZW50IiwieG1sbnNPcHQiLCJ0cmFja1Bvc2l0aW9uIiwicG9zaXRpb24iLCJmaWxlTmFtZSIsIm5hbWVTdGFydENoZWNrIiwibmFtZUNoZWNrIiwicHJvY2Vzc0F0dHJpYnMiLCJwcm9jZXNzQXR0cmlic05TIiwicHVzaEF0dHJpYiIsInB1c2hBdHRyaWJOUyIsIm5zIiwiYXNzaWduIiwiYWRkaXRpb25hbCIsImFkZGl0aW9uYWxOYW1lc3BhY2VzIiwicHJvY2Vzc0F0dHJpYnNQbGFpbiIsInB1c2hBdHRyaWJQbGFpbiIsInN0YXRlVGFibGUiLCJzQmVnaW4iLCJzQmVnaW5XaGl0ZXNwYWNlIiwic0RvY3R5cGUiLCJzRG9jdHlwZVF1b3RlIiwic0RURCIsInNEVERRdW90ZWQiLCJzRFRET3Blbldha2EiLCJzRFRET3Blbldha2FCYW5nIiwic0RURENvbW1lbnQiLCJzRFREQ29tbWVudEVuZGluZyIsInNEVERDb21tZW50RW5kZWQiLCJzRFREUEkiLCJzRFREUElFbmRpbmciLCJzVGV4dCIsInNFbnRpdHkiLCJzT3Blbldha2EiLCJzT3Blbldha2FCYW5nIiwic0NvbW1lbnQiLCJzQ29tbWVudEVuZGluZyIsInNDb21tZW50RW5kZWQiLCJzQ0RhdGEiLCJzQ0RhdGFFbmRpbmciLCJzQ0RhdGFFbmRpbmcyIiwic1BJRmlyc3RDaGFyIiwic1BJUmVzdCIsInNQSUJvZHkiLCJzUElFbmRpbmciLCJzWE1MRGVjbE5hbWVTdGFydCIsInNYTUxEZWNsTmFtZSIsInNYTUxEZWNsRXEiLCJzWE1MRGVjbFZhbHVlU3RhcnQiLCJzWE1MRGVjbFZhbHVlIiwic1hNTERlY2xTZXBhcmF0b3IiLCJzWE1MRGVjbEVuZGluZyIsInNPcGVuVGFnIiwic09wZW5UYWdTbGFzaCIsInNBdHRyaWIiLCJzQXR0cmliTmFtZSIsInNBdHRyaWJOYW1lU2F3V2hpdGUiLCJzQXR0cmliVmFsdWUiLCJzQXR0cmliVmFsdWVRdW90ZWQiLCJzQXR0cmliVmFsdWVDbG9zZWQiLCJzQXR0cmliVmFsdWVVbnF1b3RlZCIsInNDbG9zZVRhZyIsInNDbG9zZVRhZ1Nhd1doaXRlIiwiX2luaXQiLCJjbG9zZWQiLCJfY2xvc2VkIiwib3Blbldha2FCYW5nIiwicGlUYXJnZXQiLCJlbnRpdHkiLCJxIiwidGFncyIsInRhZyIsInRvcE5TIiwiY2h1bmsiLCJjaHVua1Bvc2l0aW9uIiwiaSIsInByZXZJIiwiY2FycmllZEZyb21QcmV2aW91cyIsInVuZGVmaW5lZCIsImZvcmJpZGRlblN0YXRlIiwiYXR0cmliTGlzdCIsInN0YXRlIiwicmVwb3J0ZWRUZXh0QmVmb3JlUm9vdCIsInJlcG9ydGVkVGV4dEFmdGVyUm9vdCIsImNsb3NlZFJvb3QiLCJzYXdSb290IiwieG1sRGVjbFBvc3NpYmxlIiwieG1sRGVjbEV4cGVjdHMiLCJlbnRpdHlSZXR1cm5TdGF0ZSIsImRlZmF1bHRYTUxWZXJzaW9uIiwiZm9yY2VYTUxWZXJzaW9uIiwiRXJyb3IiLCJzZXRYTUxWZXJzaW9uIiwicG9zaXRpb25BdE5ld0xpbmUiLCJ4bWxEZWNsIiwidmVyc2lvbiIsImVuY29kaW5nIiwic3RhbmRhbG9uZSIsImxpbmUiLCJjb2x1bW4iLCJFTlRJVElFUyIsImNyZWF0ZSIsIl9hIiwicmVhZHlIYW5kbGVyIiwiY2FsbCIsImNvbHVtbkluZGV4Iiwib24iLCJoYW5kbGVyIiwib2ZmIiwibWFrZUVycm9yIiwibWVzc2FnZSIsIm1zZyIsImxlbmd0aCIsImVyciIsImVycm9ySGFuZGxlciIsIndyaXRlIiwidG9TdHJpbmciLCJsaW1pdCIsImxhc3RDb2RlIiwiY2hhckNvZGVBdCIsInNsaWNlIiwiY2xvc2UiLCJnZXRDb2RlMTAiLCJjb2RlIiwiZmluYWwiLCJnZXRDb2RlMTEiLCJuZXh0IiwiZ2V0Q29kZU5vcm0iLCJnZXRDb2RlIiwidW5nZXQiLCJjYXB0dXJlVG8iLCJjaGFycyIsInN0YXJ0IiwiaXNOTExpa2UiLCJpbmNsdWRlcyIsImNhcHR1cmVUb0NoYXIiLCJjaGFyIiwiY2FwdHVyZU5hbWVDaGFycyIsInNraXBTcGFjZXMiLCJjdXJyZW50WE1MVmVyc2lvbiIsImlCZWZvcmUiLCJkb2N0eXBlSGFuZGxlciIsIlN0cmluZyIsImZyb21Db2RlUG9pbnQiLCJvd2IiLCJoYW5kbGVUZXh0SW5Sb290IiwiaGFuZGxlVGV4dE91dHNpZGVSb290IiwibG9vcCIsInBhcnNlZCIsInBhcnNlRW50aXR5IiwidGV4dEhhbmRsZXIiLCJjb21tZW50SGFuZGxlciIsImNkYXRhSGFuZGxlciIsImlzUXVlc3Rpb24iLCJ0b0xvd2VyQ2FzZSIsInBpSGFuZGxlciIsInRhcmdldCIsImJvZHkiLCJqb2luIiwidmFsdWUiLCJ4bWxkZWNsSGFuZGxlciIsImF0dHJpYnV0ZXMiLCJvcGVuVGFnU3RhcnRIYW5kbGVyIiwib3BlblRhZyIsIm9wZW5TZWxmQ2xvc2luZ1RhZyIsImNsb3NlVGFnIiwic2Nhbkxvb3AiLCJub25TcGFjZSIsIm91dFJvb3RMb29wIiwicW5hbWUiLCJhdHRyIiwicHVzaCIsImF0dHJpYnV0ZUhhbmRsZXIiLCJ0cmltbWVkIiwidHJpbSIsInBvcCIsIl9iIiwiZW5kSGFuZGxlciIsInJlc29sdmUiLCJpbmRleCIsInJlc29sdmVQcmVmaXgiLCJjb2xvbiIsImluZGV4T2YiLCJKU09OIiwic3RyaW5naWZ5Iiwic2VlbiIsIlNldCIsImVxbmFtZSIsImhhcyIsImFkZCIsImlzU2VsZkNsb3NpbmciLCJvcGVuVGFnSGFuZGxlciIsImNsb3NlVGFnSGFuZGxlciIsInRvcCIsIl9jIiwibCIsImRlZmluZWQiLCJudW0iLCJOYU4iLCJwYXJzZUludCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zYXhlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxNQUFBQSxHQUFBLEdBQUFDLE9BQUE7QUFDQSxNQUFBQyxHQUFBLEdBQUFELE9BQUE7QUFDQSxNQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFPRyxHQUFHLEdBQUdKLEdBQUcsQ0FBQ0ksR0FBRztBQUNwQixJQUFPQyxRQUFRLEdBQUdMLEdB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", + "var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n", + "var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n", + "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n", + "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n", + "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n", + "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n", + "var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n", + "var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n", + "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n", + "module.exports = require('./lib/_stream_duplex.js');\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};", + "'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}", + "'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};", + "module.exports = require('./readable').PassThrough\n", + "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n", + "module.exports = require('./readable').Transform\n", + "module.exports = require('./lib/_stream_writable.js');\n", + "var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};", + "\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n", + "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n", + "module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"v1\", {\n enumerable: true,\n get: function () {\n return _v.default;\n }\n});\nObject.defineProperty(exports, \"v3\", {\n enumerable: true,\n get: function () {\n return _v2.default;\n }\n});\nObject.defineProperty(exports, \"v4\", {\n enumerable: true,\n get: function () {\n return _v3.default;\n }\n});\nObject.defineProperty(exports, \"v5\", {\n enumerable: true,\n get: function () {\n return _v4.default;\n }\n});\nObject.defineProperty(exports, \"NIL\", {\n enumerable: true,\n get: function () {\n return _nil.default;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function () {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"stringify\", {\n enumerable: true,\n get: function () {\n return _stringify.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return _parse.default;\n }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (let i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n const output = [];\n const length32 = input.length * 32;\n const hexTab = '0123456789abcdef';\n\n for (let i = 0; i < length32; i += 8) {\n const x = input[i >> 5] >>> i % 32 & 0xff;\n const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n let a = 1732584193;\n let b = -271733879;\n let c = -1732584194;\n let d = 271733878;\n\n for (let i = 0; i < x.length; i += 16) {\n const olda = a;\n const oldb = b;\n const oldc = c;\n const oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n const length8 = input.length * 8;\n const output = new Uint32Array(getOutputLength(length8));\n\n for (let i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n const lsw = (x & 0xffff) + (y & 0xffff);\n const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nvar _default = md5;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nvar _default = parse;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rng;\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\n\nfunction rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nvar _default = sha1;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || _rng.default)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || (0, _stringify.default)(b);\n}\n\nvar _default = v1;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.URL = exports.DNS = void 0;\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction _default(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0, _parse.default)(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n options = options || {};\n\n const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nvar _default = version;\nexports.default = _default;", + "\"use strict\";\n\n/**\n * Character classes and associated utilities for the 5th edition of XML 1.0.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//\n// Fragments.\n//\nexports.CHAR = \"\\t\\n\\r -\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return c >= SPACE && c <= 0xD7FF || c === NL || c === CR || c === TAB || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\nfunction isNameStartChar(c) {\n return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiQ0hBUiIsIlMiLCJOQU1FX1NUQVJUX0NIQVIiLCJOQU1FX0NIQVIiLCJDSEFSX1JFIiwiUmVnRXhwIiwiU19SRSIsIk5BTUVfU1RBUlRfQ0hBUl9SRSIsIk5BTUVfQ0hBUl9SRSIsIk5BTUVfUkUiLCJOTVRPS0VOX1JFIiwiVEFCIiwiTkwiLCJDUiIsIlNQQUNFIiwiU19MSVNUIiwiaXNDaGFyIiwiYyIsImlzUyIsImlzTmFtZVN0YXJ0Q2hhciIsImlzTmFtZUNoYXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMveG1sLzEuMC9lZDUudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDYUEsT0FBQSxDQUFBQyxJQUFJLEdBQUcsc0RBQXNEO0FBRTdERCxPQUFBLENBQUFFLENBQUMsR0FBRyxTQUFTO0FBRTFCO0FBQ2FGLE9BQUEsQ0FBQUcsZUFBZSxHQUFHLGlMQUEySztBQUU3TEgsT0FBQSxDQUFBSSxTQUFTLEdBQ3BCLE1BQUlKLE9BQUEsQ0FBQUcsZUFBZSx5Q0FBc0M7QUFFM0Q7QUFDQTtBQUNBO0FBRWFILE9BQUEsQ0FBQUssT0FBTyxHQUFHLElBQUlDLE1BQU0sQ0FBQyxPQUFLTixPQUFBLENBQUFDLElBQUksT0FBSSxFQUFFLEdBQUcsQ0FBQztBQUV4Q0QsT0FBQSxDQUFBTyxJQUFJLEdBQUcsSUFBSUQsTUFBTSxDQUFDLE9BQUtOLE9BQUEsQ0FBQUUsQ0FBQyxRQUFLLEVBQUUsR0FBRyxDQUFDO0FBRW5DRixPQUFBLENBQUFRLGtCQUFrQixHQUFHLElBQUlGLE1BQU0sQ0FBQyxPQUFLTixPQUFBLENBQUFHLGVBQWUsT0FBSSxFQUFFLEdBQUcsQ0FBQztBQUU5REgsT0FBQSxDQUFBUyxZQUFZLEdBQUcsSUFBSUgsTUFBTSxDQUFDLE9BQUtOLE9BQUEsQ0FBQUksU0FBUyxPQUFJLEVBQUUsR0FBRyxDQUFDO0FBRWxESixPQUFBLENBQUFVLE9BQU8sR0FBRyxJQUFJSixNQUFNLENBQUMsT0FBS04sT0FBQSxDQUFBRyxlQUFlLFVBQUtILE9BQUEsQ0FBQUksU0FBUyxRQUFLLEVBQUUsR0FBRyxDQUFDO0FBRWxFSixPQUFBLENBQUFXLFVBQVUsR0FBRyxJQUFJTCxNQUFNLENBQUMsT0FBS04sT0FBQSxDQUFBSSxTQUFTLFFBQUssRUFBRSxHQUFHLENBQUM7QUFFOUQsSUFBTVEsR0FBRyxHQUFHLENBQUM7QUFDYixJQUFNQyxFQUFFLEdBQUcsR0FBRztBQUNkLElBQU1DLEVBQUUsR0FBRyxHQUFHO0FBQ2QsSUFBTUMsS0FBSyxHQUFHLElBQUk7QUFFbEI7QUFDQTtBQUNBO0FBRUE7QUFDYWYsT0FBQSxDQUFBZ0IsTUFBTSxHQUFHLENBQUNELEtBQUssRUFBRUYsRUFBRSxFQUFFQyxFQUFFLEVBQUVGLEdBQUcsQ0FBQztBQUUxQzs7Ozs7OztBQU9BLFNBQWdCSyxNQUFNQSxDQUFDQyxDQUFTO0VBQzlCLE9BQVFBLENBQUMsSUFBSUgsS0FBSyxJQUFJRyxDQUFDLElBQUksTUFBTSxJQUMvQkEsQ0FBQyxLQUFLTCxFQUFFLElBQUlLLENBQUMsS0FBS0osRUFBRSxJQUFJSSxDQUFDLEtBQUtOLEdBQUcsSUFDaENNLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksT0FBTyxJQUFJQSxDQUFDLElBQUksUUFBUztBQUNuQztBQUxBbEIsT0FBQSxDQUFBaUIsTUFBQSxHQUFBQSxNQUFBO0FBT0E7Ozs7Ozs7QUFPQSxTQUFnQkUsR0FBR0EsQ0FBQ0QsQ0FBUztFQUMzQixPQUFPQSxDQUFDLEtBQUtILEtBQUssSUFBSUcsQ0FBQyxLQUFLTCxFQUFFLElBQUlLLENBQUMsS0FBS0osRUFBRSxJQUFJSSxDQUFDLEtBQUtOLEdBQUc7QUFDekQ7QUFGQVosT0FBQSxDQUFBbUIsR0FBQSxHQUFBQSxHQUFBO0FBSUE7Ozs7Ozs7QUFPQSxTQUFnQkMsZUFBZUEsQ0FBQ0YsQ0FBUztFQUN2QyxPQUFTQSxDQUFDLElBQUksSUFBSSxJQUFJQSxDQUFDLElBQUksSUFBSSxJQUN0QkEsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUssSUFDeEJBLENBQUMsS0FBSyxJQUFJLElBQ1ZBLENBQUMsS0FBSyxJQUFJLElBQ1ZBLENBQUMsS0FBSyxNQUFNLElBQ1pBLENBQUMsS0FBSyxNQUFNLElBQ1hBLENBQUMsSUFBSSxJQUFJLElBQUlBLENBQUMsSUFBSSxJQUFLLElBQ3ZCQSxDQUFDLElBQUksSUFBSSxJQUFJQSxDQUFDLElBQUksSUFBSyxJQUN2QkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksT0FBTyxJQUFJQSxDQUFDLElBQUksT0FBUTtBQUN4QztBQWxCQWxCLE9BQUEsQ0FBQW9CLGVBQUEsR0FBQUEsZUFBQTtBQW9CQTs7Ozs7OztBQU9BLFNBQWdCQyxVQUFVQSxDQUFDSCxDQUFTO0VBQ2xDLE9BQU9FLGVBQWUsQ0FBQ0YsQ0FBQyxDQUFDLElBQ3RCQSxDQUFDLElBQUksSUFBSSxJQUFJQSxDQUFDLElBQUksSUFBSyxJQUN4QkEsQ0FBQyxLQUFLLElBQUksSUFDVkEsQ0FBQyxLQUFLLElBQUksSUFDVkEsQ0FBQyxLQUFLLElBQUksSUFDVEEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPO0FBQ2hDO0FBUkFsQixPQUFBLENBQUFxQixVQUFBLEdBQUFBLFVBQUEifQ==", + "\"use strict\";\n\n/**\n * Character classes and associated utilities for the 2nd edition of XML 1.1.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//\n// Fragments.\n//\nexports.CHAR = \"\\u0001-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.RESTRICTED_CHAR = \"\\u0001-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u0084\\u0086-\\u009F\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.RESTRICTED_CHAR_RE = new RegExp(\"^[\" + exports.RESTRICTED_CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return c >= 0x0001 && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``.\n */\nfunction isRestrictedChar(c) {\n return c >= 0x1 && c <= 0x8 || c === 0xB || c === 0xC || c >= 0xE && c <= 0x1F || c >= 0x7F && c <= 0x84 || c >= 0x86 && c <= 0x9F;\n}\nexports.isRestrictedChar = isRestrictedChar;\n/**\n * Determines whether a codepoint matches the ``CHAR`` production and does not\n * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is\n * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster\n * than running the two-call equivalent.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR`` and does not match\n * ``RESTRICTED_CHAR``.\n */\nfunction isCharAndNotRestricted(c) {\n return c === 0x9 || c === 0xA || c === 0xD || c > 0x1F && c < 0x7F || c === 0x85 || c > 0x9F && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;\n}\nexports.isCharAndNotRestricted = isCharAndNotRestricted;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNameStartChar(c) {\n return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiQ0hBUiIsIlJFU1RSSUNURURfQ0hBUiIsIlMiLCJOQU1FX1NUQVJUX0NIQVIiLCJOQU1FX0NIQVIiLCJDSEFSX1JFIiwiUmVnRXhwIiwiUkVTVFJJQ1RFRF9DSEFSX1JFIiwiU19SRSIsIk5BTUVfU1RBUlRfQ0hBUl9SRSIsIk5BTUVfQ0hBUl9SRSIsIk5BTUVfUkUiLCJOTVRPS0VOX1JFIiwiVEFCIiwiTkwiLCJDUiIsIlNQQUNFIiwiU19MSVNUIiwiaXNDaGFyIiwiYyIsImlzUmVzdHJpY3RlZENoYXIiLCJpc0NoYXJBbmROb3RSZXN0cmljdGVkIiwiaXNTIiwiaXNOYW1lU3RhcnRDaGFyIiwiaXNOYW1lQ2hhciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy94bWwvMS4xL2VkMi50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNhQSxPQUFBLENBQUFDLElBQUksR0FBRyxxREFBZ0Q7QUFFdkRELE9BQUEsQ0FBQUUsZUFBZSxHQUMxQixrRUFBa0U7QUFFdkRGLE9BQUEsQ0FBQUcsQ0FBQyxHQUFHLFNBQVM7QUFFMUI7QUFDYUgsT0FBQSxDQUFBSSxlQUFlLEdBQUcsaUxBQTJLO0FBRTdMSixPQUFBLENBQUFLLFNBQVMsR0FDcEIsTUFBSUwsT0FBQSxDQUFBSSxlQUFlLHlDQUFzQztBQUUzRDtBQUNBO0FBQ0E7QUFFYUosT0FBQSxDQUFBTSxPQUFPLEdBQUcsSUFBSUMsTUFBTSxDQUFDLE9BQUtQLE9BQUEsQ0FBQUMsSUFBSSxPQUFJLEVBQUUsR0FBRyxDQUFDO0FBRXhDRCxPQUFBLENBQUFRLGtCQUFrQixHQUFHLElBQUlELE1BQU0sQ0FBQyxPQUFLUCxPQUFBLENBQUFFLGVBQWUsT0FBSSxFQUFFLEdBQUcsQ0FBQztBQUU5REYsT0FBQSxDQUFBUyxJQUFJLEdBQUcsSUFBSUYsTUFBTSxDQUFDLE9BQUtQLE9BQUEsQ0FBQUcsQ0FBQyxRQUFLLEVB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", + "\"use strict\";\n\n/**\n * Character class utilities for XML NS 1.0 edition 3.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//\n// Fragments.\n//\n// tslint:disable-next-line:max-line-length\nexports.NC_NAME_START_CHAR = \"A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NC_NAME_CHAR = \"-\" + exports.NC_NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.NC_NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"]$\", \"u\");\nexports.NC_NAME_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_CHAR + \"]$\", \"u\");\nexports.NC_NAME_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"][\" + exports.NC_NAME_CHAR + \"]*$\", \"u\");\n/**\n * Determines whether a codepoint matches [[NC_NAME_START_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNCNameStartChar(c) {\n return c >= 0x41 && c <= 0x5A || c === 0x5F || c >= 0x61 && c <= 0x7A || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x200C && c <= 0x200D || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;\n}\nexports.isNCNameStartChar = isNCNameStartChar;\n/**\n * Determines whether a codepoint matches [[NC_NAME_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\nfunction isNCNameChar(c) {\n return isNCNameStartChar(c) || c === 0x2D || c === 0x2E || c >= 0x30 && c <= 0x39 || c === 0x00B7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;\n}\nexports.isNCNameChar = isNCNameChar;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiTkNfTkFNRV9TVEFSVF9DSEFSIiwiTkNfTkFNRV9DSEFSIiwiTkNfTkFNRV9TVEFSVF9DSEFSX1JFIiwiUmVnRXhwIiwiTkNfTkFNRV9DSEFSX1JFIiwiTkNfTkFNRV9SRSIsImlzTkNOYW1lU3RhcnRDaGFyIiwiYyIsImlzTkNOYW1lQ2hhciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy94bWxucy8xLjAvZWQzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDYUEsT0FBQSxDQUFBQyxrQkFBa0IsR0FBRyxpTEFBMks7QUFFaE1ELE9BQUEsQ0FBQUUsWUFBWSxHQUN2QixNQUFJRixPQUFBLENBQUFDLGtCQUFrQix5Q0FBc0M7QUFFOUQ7QUFDQTtBQUNBO0FBRWFELE9BQUEsQ0FBQUcscUJBQXFCLEdBQ2hDLElBQUlDLE1BQU0sQ0FBQyxPQUFLSixPQUFBLENBQUFDLGtCQUFrQixPQUFJLEVBQUUsR0FBRyxDQUFDO0FBRWpDRCxPQUFBLENBQUFLLGVBQWUsR0FBRyxJQUFJRCxNQUFNLENBQUMsT0FBS0osT0FBQSxDQUFBRSxZQUFZLE9BQUksRUFBRSxHQUFHLENBQUM7QUFFeERGLE9BQUEsQ0FBQU0sVUFBVSxHQUNyQixJQUFJRixNQUFNLENBQUMsT0FBS0osT0FBQSxDQUFBQyxrQkFBa0IsVUFBS0QsT0FBQSxDQUFBRSxZQUFZLFFBQUssRUFBRSxHQUFHLENBQUM7QUFFaEU7Ozs7Ozs7QUFPQTtBQUNBLFNBQWdCSyxpQkFBaUJBLENBQUNDLENBQVM7RUFDekMsT0FBU0EsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUksSUFDdkJBLENBQUMsS0FBSyxJQUFJLElBQ1RBLENBQUMsSUFBSSxJQUFJLElBQUlBLENBQUMsSUFBSSxJQUFLLElBQ3ZCQSxDQUFDLElBQUksSUFBSSxJQUFJQSxDQUFDLElBQUksSUFBSyxJQUN2QkEsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUssSUFDdkJBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxPQUFPLElBQUlBLENBQUMsSUFBSSxPQUFRO0FBQ3hDO0FBaEJBUixPQUFBLENBQUFPLGlCQUFBLEdBQUFBLGlCQUFBO0FBa0JBOzs7Ozs7O0FBT0EsU0FBZ0JFLFlBQVlBLENBQUNELENBQVM7RUFDcEMsT0FBT0QsaUJBQWlCLENBQUNDLENBQUMsQ0FBQyxJQUN4QkEsQ0FBQyxLQUFLLElBQUksSUFDVkEsQ0FBQyxLQUFLLElBQUksSUFDVEEsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUssSUFDeEJBLENBQUMsS0FBSyxNQUFNLElBQ1hBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBUTtBQUNsQztBQVJBUixPQUFBLENBQUFTLFlBQUEsR0FBQUEsWUFBQSJ9" + ] +} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/exceljs.bare.min.js b/node_backend/node_modules/exceljs/dist/exceljs.bare.min.js new file mode 100644 index 0000000000000000000000000000000000000000..3838ffb977c6c8300d1aa77aadf9f02036c49423 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/exceljs.bare.min.js @@ -0,0 +1,45 @@ +/*! ExcelJS 19-10-2023 */ + +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).ExcelJS=e()}}((function(){return function e(t,r,i){function s(o,a){if(!r[o]){if(!t[o]){var h="function"==typeof require&&require;if(!a&&h)return h(o,!0);if(n)return n(o,!0);var l=new Error("Cannot find module '"+o+"'");throw l.code="MODULE_NOT_FOUND",l}var c=r[o]={exports:{}};t[o][0].call(c.exports,(function(e){return s(t[o][1][e]||e)}),c,c.exports,e,t,r,i)}return r[o].exports}for(var n="function"==typeof require&&require,o=0;o{const n=this.workbook.addWorksheet(t.sheetName),o=t.dateFormats||["YYYY-MM-DD[T]HH:mm:ssZ","YYYY-MM-DD[T]HH:mm:ss","MM-DD-YYYY","YYYY-MM-DD"],h=t.map||function(e){if(""===e)return null;const t=Number(e);if(!Number.isNaN(t)&&t!==1/0)return t;const r=o.reduce((t,r)=>{if(t)return t;const i=a(e,r,!0);return i.isValid()?i:null},null);if(r)return new Date(r.valueOf());const i=c[e];return void 0!==i?i:e},l=s.parse(t.parserOptions).on("data",e=>{n.addRow(e.map(h))}).on("end",()=>{l.emit("worksheet",n)});l.on("worksheet",r).on("error",i),e.pipe(l)})}createInputStream(){throw new Error("`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}write(e,t){return new Promise((r,i)=>{t=t||{};const n=this.workbook.getWorksheet(t.sheetName||t.sheetId),o=s.format(t.formatterOptions);e.on("finish",()=>{r()}),o.on("error",i),o.pipe(e);const{dateFormat:h,dateUTC:l}=t,c=t.map||(e=>{if(e){if(e.text||e.hyperlink)return e.hyperlink||e.text||"";if(e.formula||e.result)return e.result||"";if(e instanceof Date)return h?l?a.utc(e).format(h):a(e).format(h):l?a.utc(e).format():a(e).format();if(e.error)return e.error;if("object"==typeof e)return JSON.stringify(e)}return e}),u=void 0===t.includeEmptyRows||t.includeEmptyRows;let f=1;n&&n.eachRow((e,t)=>{if(u)for(;f++2&&void 0!==arguments[2]?arguments[2]:0;if(this.worksheet=e,t)if("string"==typeof t){const e=i.decodeAddress(t);this.nativeCol=e.col+r,this.nativeColOff=0,this.nativeRow=e.row+r,this.nativeRowOff=0}else void 0!==t.nativeCol?(this.nativeCol=t.nativeCol||0,this.nativeColOff=t.nativeColOff||0,this.nativeRow=t.nativeRow||0,this.nativeRowOff=t.nativeRowOff||0):void 0!==t.col?(this.col=t.col+r,this.row=t.row+r):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0);else this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0}static asInstance(e){return e instanceof s||null==e?e:new s(e)}get col(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth}set col(e){this.nativeCol=Math.floor(e),this.nativeColOff=Math.floor((e-this.nativeCol)*this.colWidth)}get row(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight}set row(e){this.nativeRow=Math.floor(e),this.nativeRowOff=Math.floor((e-this.nativeRow)*this.rowHeight)}get colWidth(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(1e4*this.worksheet.getColumn(this.nativeCol+1).width):64e4}get rowHeight(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(1e4*this.worksheet.getRow(this.nativeRow+1).height):18e4}get model(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}}set model(e){this.nativeCol=e.nativeCol,this.nativeColOff=e.nativeColOff,this.nativeRow=e.nativeRow,this.nativeRowOff=e.nativeRowOff}}t.exports=s},{"../utils/col-cache":19}],3:[function(e,t,r){"use strict";const i=e("../utils/col-cache"),s=e("../utils/under-dash"),n=e("./enums"),{slideFormula:o}=e("../utils/shared-formula"),a=e("./note");class h{constructor(e,t,r){if(!e||!t)throw new Error("A Cell needs a Row");this._row=e,this._column=t,i.validateAddress(r),this._address=r,this._value=l.create(h.Types.Null,this),this.style=this._mergeStyle(e.style,t.style,{}),this._mergeCount=0}get worksheet(){return this._row.worksheet}get workbook(){return this._row.worksheet.workbook}destroy(){delete this.style,delete this._value,delete this._row,delete this._column,delete this._address}get numFmt(){return this.style.numFmt}set numFmt(e){this.style.numFmt=e}get font(){return this.style.font}set font(e){this.style.font=e}get alignment(){return this.style.alignment}set alignment(e){this.style.alignment=e}get border(){return this.style.border}set border(e){this.style.border=e}get fill(){return this.style.fill}set fill(e){this.style.fill=e}get protection(){return this.style.protection}set protection(e){this.style.protection=e}_mergeStyle(e,t,r){const i=e&&e.numFmt||t&&t.numFmt;i&&(r.numFmt=i);const s=e&&e.font||t&&t.font;s&&(r.font=s);const n=e&&e.alignment||t&&t.alignment;n&&(r.alignment=n);const o=e&&e.border||t&&t.border;o&&(r.border=o);const a=e&&e.fill||t&&t.fill;a&&(r.fill=a);const h=e&&e.protection||t&&t.protection;return h&&(r.protection=h),r}get address(){return this._address}get row(){return this._row.number}get col(){return this._column.number}get $col$row(){return`$${this._column.letter}$${this.row}`}get type(){return this._value.type}get effectiveType(){return this._value.effectiveType}toCsvString(){return this._value.toCsvString()}addMergeRef(){this._mergeCount++}releaseMergeRef(){this._mergeCount--}get isMerged(){return this._mergeCount>0||this.type===h.Types.Merge}merge(e,t){this._value.release(),this._value=l.create(h.Types.Merge,this,e),t||(this.style=e.style)}unmerge(){this.type===h.Types.Merge&&(this._value.release(),this._value=l.create(h.Types.Null,this),this.style=this._mergeStyle(this._row.style,this._column.style,{}))}isMergedTo(e){return this._value.type===h.Types.Merge&&this._value.isMergedTo(e)}get master(){return this.type===h.Types.Merge?this._value.master:this}get isHyperlink(){return this._value.type===h.Types.Hyperlink}get hyperlink(){return this._value.hyperlink}get value(){return this._value.value}set value(e){this.type!==h.Types.Merge?(this._value.release(),this._value=l.create(l.getType(e),this,e)):this._value.master.value=e}get note(){return this._comment&&this._comment.note}set note(e){this._comment=new a(e)}get text(){return this._value.toString()}get html(){return s.escapeHtml(this.text)}toString(){return this.text}_upgradeToHyperlink(e){this.type===h.Types.String&&(this._value=l.create(h.Types.Hyperlink,this,{text:this._value.value,hyperlink:e}))}get formula(){return this._value.formula}get result(){return this._value.result}get formulaType(){return this._value.formulaType}get fullAddress(){const{worksheet:e}=this._row;return{sheetName:e.name,address:this.address,row:this.row,col:this.col}}get name(){return this.names[0]}set name(e){this.names=[e]}get names(){return this.workbook.definedNames.getNamesEx(this.fullAddress)}set names(e){const{definedNames:t}=this.workbook;t.removeAllNames(this.fullAddress),e.forEach(e=>{t.addEx(this.fullAddress,e)})}addName(e){this.workbook.definedNames.addEx(this.fullAddress,e)}removeName(e){this.workbook.definedNames.removeEx(this.fullAddress,e)}removeAllNames(){this.workbook.definedNames.removeAllNames(this.fullAddress)}get _dataValidations(){return this.worksheet.dataValidations}get dataValidation(){return this._dataValidations.find(this.address)}set dataValidation(e){this._dataValidations.add(this.address,e)}get model(){const{model:e}=this._value;return e.style=this.style,this._comment&&(e.comment=this._comment.model),e}set model(e){if(this._value.release(),this._value=l.create(e.type,this),this._value.model=e,e.comment)switch(e.comment.type){case"note":this._comment=a.fromModel(e.comment)}e.style?this.style=e.style:this.style={}}}h.Types=n.ValueType;const l={getType:e=>null==e?h.Types.Null:e instanceof String||"string"==typeof e?h.Types.String:"number"==typeof e?h.Types.Number:"boolean"==typeof e?h.Types.Boolean:e instanceof Date?h.Types.Date:e.text&&e.hyperlink?h.Types.Hyperlink:e.formula||e.sharedFormula?h.Types.Formula:e.richText?h.Types.RichText:e.sharedString?h.Types.SharedString:e.error?h.Types.Error:h.Types.JSON,types:[{t:h.Types.Null,f:class{constructor(e){this.model={address:e.address,type:h.Types.Null}}get value(){return null}set value(e){}get type(){return h.Types.Null}get effectiveType(){return h.Types.Null}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return""}release(){}toString(){return""}}},{t:h.Types.Number,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.Number,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return h.Types.Number}get effectiveType(){return h.Types.Number}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}},{t:h.Types.String,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.String,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return h.Types.String}get effectiveType(){return h.Types.String}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return`"${this.model.value.replace(/"/g,'""')}"`}release(){}toString(){return this.model.value}}},{t:h.Types.Date,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.Date,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return h.Types.Date}get effectiveType(){return h.Types.Date}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value.toISOString()}release(){}toString(){return this.model.value.toString()}}},{t:h.Types.Hyperlink,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.Hyperlink,text:t?t.text:void 0,hyperlink:t?t.hyperlink:void 0},t&&t.tooltip&&(this.model.tooltip=t.tooltip)}get value(){const e={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(e.tooltip=this.model.tooltip),e}set value(e){this.model={text:e.text,hyperlink:e.hyperlink},e.tooltip&&(this.model.tooltip=e.tooltip)}get text(){return this.model.text}set text(e){this.model.text=e}get hyperlink(){return this.model.hyperlink}set hyperlink(e){this.model.hyperlink=e}get type(){return h.Types.Hyperlink}get effectiveType(){return h.Types.Hyperlink}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.hyperlink}release(){}toString(){return this.model.text}}},{t:h.Types.Formula,f:class{constructor(e,t){this.cell=e,this.model={address:e.address,type:h.Types.Formula,shareType:t?t.shareType:void 0,ref:t?t.ref:void 0,formula:t?t.formula:void 0,sharedFormula:t?t.sharedFormula:void 0,result:t?t.result:void 0}}_copyModel(e){const t={},r=r=>{const i=e[r];i&&(t[r]=i)};return r("formula"),r("result"),r("ref"),r("shareType"),r("sharedFormula"),t}get value(){return this._copyModel(this.model)}set value(e){this.model=this._copyModel(e)}validate(e){switch(l.getType(e)){case h.Types.Null:case h.Types.String:case h.Types.Number:case h.Types.Date:break;case h.Types.Hyperlink:case h.Types.Formula:default:throw new Error("Cannot process that type of result value")}}get dependencies(){return{ranges:this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g),cells:this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g,"").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g)}}get formula(){return this.model.formula||this._getTranslatedFormula()}set formula(e){this.model.formula=e}get formulaType(){return this.model.formula?n.FormulaType.Master:this.model.sharedFormula?n.FormulaType.Shared:n.FormulaType.None}get result(){return this.model.result}set result(e){this.model.result=e}get type(){return h.Types.Formula}get effectiveType(){const e=this.model.result;return null==e?n.ValueType.Null:e instanceof String||"string"==typeof e?n.ValueType.String:"number"==typeof e?n.ValueType.Number:e instanceof Date?n.ValueType.Date:e.text&&e.hyperlink?n.ValueType.Hyperlink:e.formula?n.ValueType.Formula:n.ValueType.Null}get address(){return this.model.address}set address(e){this.model.address=e}_getTranslatedFormula(){if(!this._translatedFormula&&this.model.sharedFormula){const{worksheet:e}=this.cell,t=e.findCell(this.model.sharedFormula);this._translatedFormula=t&&o(t.formula,t.address,this.model.address)}return this._translatedFormula}toCsvString(){return""+(this.model.result||"")}release(){}toString(){return this.model.result?this.model.result.toString():""}}},{t:h.Types.Merge,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.Merge,master:t?t.address:void 0},this._master=t,t&&t.addMergeRef()}get value(){return this._master.value}set value(e){e instanceof h?(this._master&&this._master.releaseMergeRef(),e.addMergeRef(),this._master=e):this._master.value=e}isMergedTo(e){return e===this._master}get master(){return this._master}get type(){return h.Types.Merge}get effectiveType(){return this._master.effectiveType}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return""}release(){this._master.releaseMergeRef()}toString(){return this.value.toString()}}},{t:h.Types.JSON,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.String,value:JSON.stringify(t),rawValue:t}}get value(){return this.model.rawValue}set value(e){this.model.rawValue=e,this.model.value=JSON.stringify(e)}get type(){return h.Types.String}get effectiveType(){return h.Types.String}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value}release(){}toString(){return this.model.value}}},{t:h.Types.SharedString,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.SharedString,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return h.Types.SharedString}get effectiveType(){return h.Types.SharedString}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}},{t:h.Types.RichText,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.String,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}toString(){return this.model.value.richText.map(e=>e.text).join("")}get type(){return h.Types.RichText}get effectiveType(){return h.Types.RichText}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return`"${this.text.replace(/"/g,'""')}"`}release(){}}},{t:h.Types.Boolean,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.Boolean,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return h.Types.Boolean}get effectiveType(){return h.Types.Boolean}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value?1:0}release(){}toString(){return this.model.value.toString()}}},{t:h.Types.Error,f:class{constructor(e,t){this.model={address:e.address,type:h.Types.Error,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return h.Types.Error}get effectiveType(){return h.Types.Error}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.toString()}release(){}toString(){return this.model.value.error.toString()}}}].reduce((e,t)=>(e[t.t]=t.f,e),[]),create(e,t,r){const i=this.types[e];if(!i)throw new Error("Could not create Value of type "+e);return new i(t,r)}};t.exports=h},{"../utils/col-cache":19,"../utils/shared-formula":23,"../utils/under-dash":26,"./enums":7,"./note":9}],4:[function(e,t,r){"use strict";const i=e("../utils/under-dash"),s=e("./enums"),n=e("../utils/col-cache");class o{constructor(e,t,r){this._worksheet=e,this._number=t,!1!==r&&(this.defn=r)}get number(){return this._number}get worksheet(){return this._worksheet}get letter(){return n.n2l(this._number)}get isCustomWidth(){return void 0!==this.width&&9!==this.width}get defn(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel}}set defn(e){e?(this.key=e.key,this.width=void 0!==e.width?e.width:9,this.outlineLevel=e.outlineLevel,e.style?this.style=e.style:this.style={},this.header=e.header,this._hidden=!!e.hidden):(delete this._header,delete this._key,delete this.width,this.style={},this.outlineLevel=0)}get headers(){return this._header&&this._header instanceof Array?this._header:[this._header]}get header(){return this._header}set header(e){void 0!==e?(this._header=e,this.headers.forEach((e,t)=>{this._worksheet.getCell(t+1,this.number).value=e})):this._header=void 0}get key(){return this._key}set key(e){(this._key&&this._worksheet.getColumnKey(this._key))===this&&this._worksheet.deleteColumnKey(this._key),this._key=e,e&&this._worksheet.setColumnKey(this._key,this)}get hidden(){return!!this._hidden}set hidden(e){this._hidden=e}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(e){this._outlineLevel=e}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol)}toString(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:void 0})}equivalentTo(e){return this.width===e.width&&this.hidden===e.hidden&&this.outlineLevel===e.outlineLevel&&i.isEqual(this.style,e.style)}get isDefault(){if(this.isCustomWidth)return!1;if(this.hidden)return!1;if(this.outlineLevel)return!1;const e=this.style;return!e||!(e.font||e.numFmt||e.alignment||e.border||e.fill||e.protection)}get headerCount(){return this.headers.length}eachCell(e,t){const r=this.number;t||(t=e,e=null),this._worksheet.eachRow(e,(e,i)=>{t(e.getCell(r),i)})}get values(){const e=[];return this.eachCell((t,r)=>{t&&t.type!==s.ValueType.Null&&(e[r]=t.value)}),e}set values(e){if(!e)return;const t=this.number;let r=0;e.hasOwnProperty("0")&&(r=1),e.forEach((e,i)=>{this._worksheet.getCell(i+r,t).value=e})}_applyStyle(e,t){return this.style[e]=t,this.eachCell(r=>{r[e]=t}),t}get numFmt(){return this.style.numFmt}set numFmt(e){this._applyStyle("numFmt",e)}get font(){return this.style.font}set font(e){this._applyStyle("font",e)}get alignment(){return this.style.alignment}set alignment(e){this._applyStyle("alignment",e)}get protection(){return this.style.protection}set protection(e){this._applyStyle("protection",e)}get border(){return this.style.border}set border(e){this._applyStyle("border",e)}get fill(){return this.style.fill}set fill(e){this._applyStyle("fill",e)}static toModel(e){const t=[];let r=null;return e&&e.forEach((e,i)=>{e.isDefault?r&&(r=null):r&&e.equivalentTo(r)?r.max=i+1:(r={min:i+1,max:i+1,width:void 0!==e.width?e.width:9,style:e.style,isCustomWidth:e.isCustomWidth,hidden:e.hidden,outlineLevel:e.outlineLevel,collapsed:e.collapsed},t.push(r))}),t.length?t:void 0}static fromModel(e,t){const r=[];let i=1,s=0;for(t=(t=t||[]).sort((function(e,t){return e.min-t.min}));s{t.removeCellEx(e)})}forEach(e){i.each(this.matrixMap,(t,r)=>{t.forEach(t=>{e(r,t)})})}getNames(e){return this.getNamesEx(s.decodeEx(e))}getNamesEx(e){return i.map(this.matrixMap,(t,r)=>t.findCellEx(e)&&r).filter(Boolean)}_explore(e,t){t.mark=!1;const{sheetName:r}=t,i=new o(t.row,t.col,t.row,t.col,r);let s,n;function a(s,n){const o=e.findCellAt(r,s,t.col);return!(!o||!o.mark)&&(i[n]=s,o.mark=!1,!0)}for(n=t.row-1;a(n,"top");n--);for(n=t.row+1;a(n,"bottom");n++);function h(t,s){const o=[];for(n=i.top;n<=i.bottom;n++){const i=e.findCellAt(r,n,t);if(!i||!i.mark)return!1;o.push(i)}i[s]=t;for(let e=0;e{e.mark=!0});return{name:e,ranges:t.map(e=>e.mark&&this._explore(t,e)).filter(Boolean).map(e=>e.$shortRange)}}normaliseMatrix(e,t){e.forEachInSheet(t,(e,t,r)=>{e&&(e.row===t&&e.col===r||(e.row=t,e.col=r,e.address=s.n2l(r)+t))})}spliceRows(e,t,r,s){i.each(this.matrixMap,i=>{i.spliceRows(e,t,r,s),this.normaliseMatrix(i,e)})}spliceColumns(e,t,r,s){i.each(this.matrixMap,i=>{i.spliceColumns(e,t,r,s),this.normaliseMatrix(i,e)})}get model(){return i.map(this.matrixMap,(e,t)=>this.getRanges(t,e)).filter(e=>e.ranges.length)}set model(e){const t=this.matrixMap={};e.forEach(e=>{const r=t[e.name]=new n;e.ranges.forEach(e=>{a.test(e.split("!").pop()||"")&&r.addCell(e)})})}}},{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":26,"./range":10}],7:[function(e,t,r){"use strict";t.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:"#N/A",Ref:"#REF!",Name:"#NAME?",DivZero:"#DIV/0!",Null:"#NULL!",Value:"#VALUE!",Num:"#NUM!"}}},{}],8:[function(e,t,r){"use strict";const i=e("../utils/col-cache"),s=e("./anchor");t.exports=class{constructor(e,t){this.worksheet=e,this.model=t}get model(){switch(this.type){case"background":return{type:this.type,imageId:this.imageId};case"image":return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error("Invalid Image Type")}}set model(e){let{type:t,imageId:r,range:n,hyperlinks:o}=e;if(this.type=t,this.imageId=r,"image"===t)if("string"==typeof n){const e=i.decode(n);this.range={tl:new s(this.worksheet,{col:e.left,row:e.top},-1),br:new s(this.worksheet,{col:e.right,row:e.bottom},0),editAs:"oneCell"}}else this.range={tl:new s(this.worksheet,n.tl,0),br:n.br&&new s(this.worksheet,n.br,0),ext:n.ext,editAs:n.editAs,hyperlinks:o||n.hyperlinks}}}},{"../utils/col-cache":19,"./anchor":2}],9:[function(e,t,r){"use strict";const i=e("../utils/under-dash");class s{constructor(e){this.note=e}get model(){let e=null;switch(typeof this.note){case"string":e={type:"note",note:{texts:[{text:this.note}]}};break;default:e={type:"note",note:this.note}}return i.deepMerge({},s.DEFAULT_CONFIGS,e)}set model(e){const{note:t}=e,{texts:r}=t;1===r.length&&1===Object.keys(r[0]).length?this.note=r[0].text:this.note=t}static fromModel(e){const t=new s;return t.model=e,t}}s.DEFAULT_CONFIGS={note:{margins:{insetmode:"auto",inset:[.13,.13,.25,.25]},protection:{locked:"True",lockText:"True"},editAs:"absolute"}},t.exports=s},{"../utils/under-dash":26}],10:[function(e,t,r){"use strict";const i=e("../utils/col-cache");class s{constructor(){this.decode(arguments)}setTLBR(e,t,r,s,n){if(arguments.length<4){const s=i.decodeAddress(e),o=i.decodeAddress(t);this.model={top:Math.min(s.row,o.row),left:Math.min(s.col,o.col),bottom:Math.max(s.row,o.row),right:Math.max(s.col,o.col),sheetName:r},this.setTLBR(s.row,s.col,o.row,o.col,n)}else this.model={top:Math.min(e,r),left:Math.min(t,s),bottom:Math.max(e,r),right:Math.max(t,s),sheetName:n}}decode(e){switch(e.length){case 5:this.setTLBR(e[0],e[1],e[2],e[3],e[4]);break;case 4:this.setTLBR(e[0],e[1],e[2],e[3]);break;case 3:this.setTLBR(e[0],e[1],e[2]);break;case 2:this.setTLBR(e[0],e[1]);break;case 1:{const t=e[0];if(t instanceof s)this.model={top:t.model.top,left:t.model.left,bottom:t.model.bottom,right:t.model.right,sheetName:t.sheetName};else if(t instanceof Array)this.decode(t);else if(t.top&&t.left&&t.bottom&&t.right)this.model={top:t.top,left:t.left,bottom:t.bottom,right:t.right,sheetName:t.sheetName};else{const e=i.decodeEx(t);e.top?this.model={top:e.top,left:e.left,bottom:e.bottom,right:e.right,sheetName:e.sheetName}:this.model={top:e.row,left:e.col,bottom:e.row,right:e.col,sheetName:e.sheetName}}break}case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error("Invalid number of arguments to _getDimensions() - "+e.length)}}get top(){return this.model.top||1}set top(e){this.model.top=e}get left(){return this.model.left||1}set left(e){this.model.left=e}get bottom(){return this.model.bottom||1}set bottom(e){this.model.bottom=e}get right(){return this.model.right||1}set right(e){this.model.right=e}get sheetName(){return this.model.sheetName}set sheetName(e){this.model.sheetName=e}get _serialisedSheetName(){const{sheetName:e}=this.model;return e?/^[a-zA-Z0-9]*$/.test(e)?e+"!":`'${e}'!`:""}expand(e,t,r,i){(!this.model.top||ethis.bottom)&&(this.bottom=r),(!this.model.right||i>this.right)&&(this.right=i)}expandRow(e){if(e){const{dimensions:t,number:r}=e;t&&this.expand(r,t.min,r,t.max)}}expandToAddress(e){const t=i.decodeEx(e);this.expand(t.row,t.col,t.row,t.col)}get tl(){return i.n2l(this.left)+this.top}get $t$l(){return`$${i.n2l(this.left)}$${this.top}`}get br(){return i.n2l(this.right)+this.bottom}get $b$r(){return`$${i.n2l(this.right)}$${this.bottom}`}get range(){return`${this._serialisedSheetName+this.tl}:${this.br}`}get $range(){return`${this._serialisedSheetName+this.$t$l}:${this.$b$r}`}get shortRange(){return this.count>1?this.range:this._serialisedSheetName+this.tl}get $shortRange(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}get count(){return(1+this.bottom-this.top)*(1+this.right-this.left)}toString(){return this.range}intersects(e){return(!e.sheetName||!this.sheetName||e.sheetName===this.sheetName)&&(!(e.bottomthis.bottom)&&(!(e.rightthis.right))))}contains(e){const t=i.decodeEx(e);return this.containsEx(t)}containsEx(e){return(!e.sheetName||!this.sheetName||e.sheetName===this.sheetName)&&(e.row>=this.top&&e.row<=this.bottom&&e.col>=this.left&&e.col<=this.right)}forEachAddress(e){for(let t=this.left;t<=this.right;t++)for(let r=this.top;r<=this.bottom;r++)e(i.encodeAddress(r,t),r,t)}}t.exports=s},{"../utils/col-cache":19}],11:[function(e,t,r){"use strict";const i=e("../utils/under-dash"),s=e("./enums"),n=e("../utils/col-cache"),o=e("./cell");t.exports=class{constructor(e,t){this._worksheet=e,this._number=t,this._cells=[],this.style={},this.outlineLevel=0}get number(){return this._number}get worksheet(){return this._worksheet}commit(){this._worksheet._commitRow(this)}destroy(){delete this._worksheet,delete this._cells,delete this.style}findCell(e){return this._cells[e-1]}getCellEx(e){let t=this._cells[e.col-1];if(!t){const r=this._worksheet.getColumn(e.col);t=new o(this,r,e.address),this._cells[e.col-1]=t}return t}getCell(e){if("string"==typeof e){const t=this._worksheet.getColumnKey(e);e=t?t.number:n.l2n(e)}return this._cells[e-1]||this.getCellEx({address:n.encodeAddress(this._number,e),row:this._number,col:e})}splice(e,t){const r=e+t;for(var i=arguments.length,s=new Array(i>2?i-2:0),n=2;n0)for(h=a;h>=r;h--)l=this._cells[h-1],l?(c=this.getCell(h+o),c.value=l.value,c.style=l.style,c._comment=l._comment):this._cells[h+o-1]=void 0;for(h=0;h{e&&e.type!==s.ValueType.Null&&t(e,r+1)})}addPageBreak(e,t){const r=this._worksheet,i=Math.max(0,e-1)||0,s=Math.max(0,t-1)||16838,n={id:this._number,max:s,man:1};i&&(n.min=i),r.rowBreaks.push(n)}get values(){const e=[];return this._cells.forEach(t=>{t&&t.type!==s.ValueType.Null&&(e[t.col]=t.value)}),e}set values(e){if(this._cells=[],e)if(e instanceof Array){let t=0;e.hasOwnProperty("0")&&(t=1),e.forEach((e,r)=>{void 0!==e&&(this.getCellEx({address:n.encodeAddress(this._number,r+t),row:this._number,col:r+t}).value=e)})}else this._worksheet.eachColumnKey((t,r)=>{void 0!==e[r]&&(this.getCellEx({address:n.encodeAddress(this._number,t.number),row:this._number,col:t.number}).value=e[r])});else;}get hasValues(){return i.some(this._cells,e=>e&&e.type!==s.ValueType.Null)}get cellCount(){return this._cells.length}get actualCellCount(){let e=0;return this.eachCell(()=>{e++}),e}get dimensions(){let e=0,t=0;return this._cells.forEach(r=>{r&&r.type!==s.ValueType.Null&&((!e||e>r.col)&&(e=r.col),t0?{min:e,max:t}:null}_applyStyle(e,t){return this.style[e]=t,this._cells.forEach(r=>{r&&(r[e]=t)}),t}get numFmt(){return this.style.numFmt}set numFmt(e){this._applyStyle("numFmt",e)}get font(){return this.style.font}set font(e){this._applyStyle("font",e)}get alignment(){return this.style.alignment}set alignment(e){this._applyStyle("alignment",e)}get protection(){return this.style.protection}set protection(e){this._applyStyle("protection",e)}get border(){return this.style.border}set border(e){this._applyStyle("border",e)}get fill(){return this.style.fill}set fill(e){this._applyStyle("fill",e)}get hidden(){return!!this._hidden}set hidden(e){this._hidden=e}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(e){this._outlineLevel=e}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}get model(){const e=[];let t=0,r=0;return this._cells.forEach(i=>{if(i){const s=i.model;s&&((!t||t>i.col)&&(t=i.col),r{switch(e.type){case o.Types.Merge:break;default:{let r;if(e.address)r=n.decodeAddress(e.address);else if(t){const{row:e}=t,i=t.col+1;r={row:e,col:i,address:n.encodeAddress(e,i),$col$row:`$${n.n2l(i)}$${e}`}}t=r;this.getCellEx(r).model=e;break}}}),e.height?this.height=e.height:delete this.height,this.hidden=e.hidden,this.outlineLevel=e.outlineLevel||0,this.style=e.style&&JSON.parse(JSON.stringify(e.style))||{}}}},{"../utils/col-cache":19,"../utils/under-dash":26,"./cell":3,"./enums":7}],12:[function(e,t,r){"use strict";const i=e("../utils/col-cache");class s{constructor(e,t,r){this.table=e,this.column=t,this.index=r}_set(e,t){this.table.cacheState(),this.column[e]=t}get name(){return this.column.name}set name(e){this._set("name",e)}get filterButton(){return this.column.filterButton}set filterButton(e){this.column.filterButton=e}get style(){return this.column.style}set style(e){this.column.style=e}get totalsRowLabel(){return this.column.totalsRowLabel}set totalsRowLabel(e){this._set("totalsRowLabel",e)}get totalsRowFunction(){return this.column.totalsRowFunction}set totalsRowFunction(e){this._set("totalsRowFunction",e)}get totalsRowResult(){return this.column.totalsRowResult}set totalsRowResult(e){this._set("totalsRowResult",e)}get totalsRowFormula(){return this.column.totalsRowFormula}set totalsRowFormula(e){this._set("totalsRowFormula",e)}}t.exports=class{constructor(e,t){this.worksheet=e,t&&(this.table=t,this.validate(),this.store())}getFormula(e){switch(e.totalsRowFunction){case"none":return null;case"average":return`SUBTOTAL(101,${this.table.name}[${e.name}])`;case"countNums":return`SUBTOTAL(102,${this.table.name}[${e.name}])`;case"count":return`SUBTOTAL(103,${this.table.name}[${e.name}])`;case"max":return`SUBTOTAL(104,${this.table.name}[${e.name}])`;case"min":return`SUBTOTAL(105,${this.table.name}[${e.name}])`;case"stdDev":return`SUBTOTAL(106,${this.table.name}[${e.name}])`;case"var":return`SUBTOTAL(107,${this.table.name}[${e.name}])`;case"sum":return`SUBTOTAL(109,${this.table.name}[${e.name}])`;case"custom":return e.totalsRowFormula;default:throw new Error("Invalid Totals Row Function: "+e.totalsRowFunction)}}get width(){return this.table.columns.length}get height(){return this.table.rows.length}get filterHeight(){return this.height+(this.table.headerRow?1:0)}get tableHeight(){return this.filterHeight+(this.table.totalsRow?1:0)}validate(){const{table:e}=this,t=(e,t,r)=>{void 0===e[t]&&(e[t]=r)};t(e,"headerRow",!0),t(e,"totalsRow",!1),t(e,"style",{}),t(e.style,"theme","TableStyleMedium2"),t(e.style,"showFirstColumn",!1),t(e.style,"showLastColumn",!1),t(e.style,"showRowStripes",!1),t(e.style,"showColumnStripes",!1);const r=(e,t)=>{if(!e)throw new Error(t)};r(e.ref,"Table must have ref"),r(e.columns,"Table must have column definitions"),r(e.rows,"Table must have row definitions"),e.tl=i.decodeAddress(e.ref);const{row:s,col:n}=e.tl;r(s>0,"Table must be on valid row"),r(n>0,"Table must be on valid col");const{width:o,filterHeight:a,tableHeight:h}=this;e.autoFilterRef=i.encode(s,n,s+a-1,n+o-1),e.tableRef=i.encode(s,n,s+h-1,n+o-1),e.columns.forEach((e,i)=>{r(e.name,`Column ${i} must have a name`),0===i?t(e,"totalsRowLabel","Total"):(t(e,"totalsRowFunction","none"),e.totalsRowFormula=this.getFormula(e))})}store(){const e=(e,t)=>{t&&Object.keys(t).forEach(r=>{e[r]=t[r]})},{worksheet:t,table:r}=this,{row:i,col:s}=r.tl;let n=0;if(r.headerRow){const o=t.getRow(i+n++);r.columns.forEach((t,r)=>{const{style:i,name:n}=t,a=o.getCell(s+r);a.value=n,e(a,i)})}if(r.rows.forEach(o=>{const a=t.getRow(i+n++);o.forEach((t,i)=>{const n=a.getCell(s+i);n.value=t,e(n,r.columns[i].style)})}),r.totalsRow){const o=t.getRow(i+n++);r.columns.forEach((t,r)=>{const i=o.getCell(s+r);if(0===r)i.value=t.totalsRowLabel;else{const e=this.getFormula(t);i.value=e?{formula:t.totalsRowFormula,result:t.totalsRowResult}:null}e(i,t.style)})}}load(e){const{table:t}=this,{row:r,col:i}=t.tl;let s=0;if(t.headerRow){const n=e.getRow(r+s++);t.columns.forEach((e,t)=>{n.getCell(i+t).value=e.name})}if(t.rows.forEach(t=>{const n=e.getRow(r+s++);t.forEach((e,t)=>{n.getCell(i+t).value=e})}),t.totalsRow){const n=e.getRow(r+s++);t.columns.forEach((e,t)=>{const r=n.getCell(i+t);if(0===t)r.value=e.totalsRowLabel;else{this.getFormula(e)&&(r.value={formula:e.totalsRowFormula,result:e.totalsRowResult})}})}}get model(){return this.table}set model(e){this.table=e}cacheState(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}commit(){if(!this._cache)return;this.validate();const e=i.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.rows.splice(e,t)}getColumn(e){const t=this.table.columns[e];return new s(this,t,e)}addColumn(e,t,r){this.cacheState(),void 0===r?(this.table.columns.push(e),this.table.rows.forEach((e,r)=>{e.push(t[r])})):(this.table.columns.splice(r,0,e),this.table.rows.forEach((e,i)=>{e.splice(r,0,t[i])}))}removeColumns(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.columns.splice(e,t),this.table.rows.forEach(r=>{r.splice(e,t)})}_assign(e,t,r){this.cacheState(),e[t]=r}get ref(){return this.table.ref}set ref(e){this._assign(this.table,"ref",e)}get name(){return this.table.name}set name(e){this.table.name=e}get displayName(){return this.table.displyName||this.table.name}set displayNamename(e){this.table.displayName=e}get headerRow(){return this.table.headerRow}set headerRow(e){this._assign(this.table,"headerRow",e)}get totalsRow(){return this.table.totalsRow}set totalsRow(e){this._assign(this.table,"totalsRow",e)}get theme(){return this.table.style.name}set theme(e){this.table.style.name=e}get showFirstColumn(){return this.table.style.showFirstColumn}set showFirstColumn(e){this.table.style.showFirstColumn=e}get showLastColumn(){return this.table.style.showLastColumn}set showLastColumn(e){this.table.style.showLastColumn=e}get showRowStripes(){return this.table.style.showRowStripes}set showRowStripes(e){this.table.style.showRowStripes=e}get showColumnStripes(){return this.table.style.showColumnStripes}set showColumnStripes(e){this.table.style.showColumnStripes=e}}},{"../utils/col-cache":19}],13:[function(e,t,r){"use strict";const i=e("./worksheet"),s=e("./defined-names"),n=e("../xlsx/xlsx"),o=e("../csv/csv");t.exports=class{constructor(){this.category="",this.company="",this.created=new Date,this.description="",this.keywords="",this.manager="",this.modified=this.created,this.properties={},this.calcProperties={},this._worksheets=[],this.subject="",this.title="",this.views=[],this.media=[],this._definedNames=new s}get xlsx(){return this._xlsx||(this._xlsx=new n(this)),this._xlsx}get csv(){return this._csv||(this._csv=new o(this)),this._csv}get nextId(){for(let e=1;e(t&&t.orderNo)>e?t.orderNo:e,0),n=Object.assign({},t,{id:r,name:e,orderNo:s+1,workbook:this}),o=new i(n);return this._worksheets[r]=o,o}removeWorksheetEx(e){delete this._worksheets[e.id]}removeWorksheet(e){const t=this.getWorksheet(e);t&&t.destroy()}getWorksheet(e){return void 0===e?this._worksheets.find(Boolean):"number"==typeof e?this._worksheets[e]:"string"==typeof e?this._worksheets.find(t=>t&&t.name===e):void 0}get worksheets(){return this._worksheets.slice(1).sort((e,t)=>e.orderNo-t.orderNo).filter(Boolean)}eachSheet(e){this.worksheets.forEach(t=>{e(t,t.id)})}get definedNames(){return this._definedNames}clearThemes(){this._themes=void 0}addImage(e){const t=this.media.length;return this.media.push(Object.assign({},e,{type:"image"})),t}getImage(e){return this.media[e]}get model(){return{creator:this.creator||"Unknown",lastModifiedBy:this.lastModifiedBy||"Unknown",lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map(e=>e.model),sheets:this.worksheets.map(e=>e.model).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties}}set model(e){this.creator=e.creator,this.lastModifiedBy=e.lastModifiedBy,this.lastPrinted=e.lastPrinted,this.created=e.created,this.modified=e.modified,this.company=e.company,this.manager=e.manager,this.title=e.title,this.subject=e.subject,this.keywords=e.keywords,this.category=e.category,this.description=e.description,this.language=e.language,this.revision=e.revision,this.contentStatus=e.contentStatus,this.properties=e.properties,this.calcProperties=e.calcProperties,this._worksheets=[],e.worksheets.forEach(t=>{const{id:r,name:s,state:n}=t,o=e.sheets&&e.sheets.findIndex(e=>e.id===r);(this._worksheets[r]=new i({id:r,name:s,orderNo:o,state:n,workbook:this})).model=t}),this._definedNames.model=e.definedNames,this.views=e.views,this._themes=e.themes,this.media=e.media||[]}}},{"../csv/csv":1,"../xlsx/xlsx":144,"./defined-names":6,"./worksheet":14}],14:[function(e,t,r){"use strict";const i=e("../utils/under-dash"),s=e("../utils/col-cache"),n=e("./range"),o=e("./row"),a=e("./column"),h=e("./enums"),l=e("./image"),c=e("./table"),u=e("./data-validations"),f=e("../utils/encryptor"),{copyStyle:d}=e("../utils/copy-style");t.exports=class{constructor(e){e=e||{},this._workbook=e.workbook,this.id=e.id,this.orderNo=e.orderNo,this.name=e.name,this.state=e.state||"visible",this._rows=[],this._columns=null,this._keys={},this._merges={},this.rowBreaks=[],this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},e.properties),this.pageSetup=Object.assign({},{margins:{left:.7,right:.7,top:.75,bottom:.75,header:.3,footer:.3},orientation:"portrait",horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!(!e.pageSetup||!e.pageSetup.fitToWidth&&!e.pageSetup.fitToHeight||e.pageSetup.scale),pageOrder:"downThenOver",blackAndWhite:!1,draft:!1,cellComments:"None",errors:"displayed",scale:100,fitToWidth:1,fitToHeight:1,paperSize:void 0,showRowColHeaders:!1,showGridLines:!1,firstPageNumber:void 0,horizontalCentered:!1,verticalCentered:!1,rowBreaks:null,colBreaks:null},e.pageSetup),this.headerFooter=Object.assign({},{differentFirst:!1,differentOddEven:!1,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},e.headerFooter),this.dataValidations=new u,this.views=e.views||[],this.autoFilter=e.autoFilter||null,this._media=[],this.sheetProtection=null,this.tables={},this.conditionalFormattings=[]}get name(){return this._name}set name(e){if(void 0===e&&(e="sheet"+this.id),this._name!==e){if("string"!=typeof e)throw new Error("The name has to be a string.");if(""===e)throw new Error("The name can't be empty.");if("History"===e)throw new Error('The name "History" is protected. Please use a different name.');if(/[*?:/\\[\]]/.test(e))throw new Error(`Worksheet name ${e} cannot include any of the following characters: * ? : \\ / [ ]`);if(/(^')|('$)/.test(e))throw new Error("The first or last character of worksheet name cannot be a single quotation mark: "+e);if(e&&e.length>31&&(console.warn(`Worksheet name ${e} exceeds 31 chars. This will be truncated`),e=e.substring(0,31)),this._workbook._worksheets.find(t=>t&&t.name.toLowerCase()===e.toLowerCase()))throw new Error("Worksheet name already exists: "+e);this._name=e}}get workbook(){return this._workbook}destroy(){this._workbook.removeWorksheetEx(this)}get dimensions(){const e=new n;return this._rows.forEach(t=>{if(t){const r=t.dimensions;r&&e.expand(t.number,r.min,t.number,r.max)}}),e}get columns(){return this._columns}set columns(e){this._headerRowCount=e.reduce((e,t)=>{const r=(t.header?1:t.headers&&t.headers.length)||0;return Math.max(e,r)},0);let t=1;const r=this._columns=[];e.forEach(e=>{const i=new a(this,t++,!1);r.push(i),i.defn=e})}getColumnKey(e){return this._keys[e]}setColumnKey(e,t){this._keys[e]=t}deleteColumnKey(e){delete this._keys[e]}eachColumnKey(e){i.each(this._keys,e)}getColumn(e){if("string"==typeof e){const t=this._keys[e];if(t)return t;e=s.l2n(e)}if(this._columns||(this._columns=[]),e>this._columns.length){let t=this._columns.length+1;for(;t<=e;)this._columns.push(new a(this,t++))}return this._columns[e-1]}spliceColumns(e,t){const r=this._rows.length;for(var i=arguments.length,s=new Array(i>2?i-2:0),n=2;n0)for(let i=0;i{r.push(e[i]||null)});const n=this.getRow(i+1);n.splice.apply(n,r)}else this._rows.forEach(r=>{r&&r.splice(e,t)});const o=s.length-t,a=e+t,h=this._columns.length;if(o<0)for(let t=e+s.length;t<=h;t++)this.getColumn(t).defn=this.getColumn(t-o).defn;else if(o>0)for(let e=h;e>=a;e--)this.getColumn(e+o).defn=this.getColumn(e).defn;for(let t=e;t{e=Math.max(e,t.cellCount)}),e}get actualColumnCount(){const e=[];let t=0;return this.eachRow(r=>{r.eachCell(r=>{let{col:i}=r;e[i]||(e[i]=!0,t++)})}),t}_commitRow(){}get _lastRowNumber(){const e=this._rows;let t=e.length;for(;t>0&&void 0===e[t-1];)t--;return t}get _nextRow(){return this._lastRowNumber+1}get lastRow(){if(this._rows.length)return this._rows[this._rows.length-1]}findRow(e){return this._rows[e-1]}findRows(e,t){return this._rows.slice(e-1,e-1+t)}get rowCount(){return this._lastRowNumber}get actualRowCount(){let e=0;return this.eachRow(()=>{e++}),e}getRow(e){let t=this._rows[e-1];return t||(t=this._rows[e-1]=new o(this,e)),t}getRows(e,t){if(t<1)return;const r=[];for(let i=e;i1&&void 0!==arguments[1]?arguments[1]:"n";const r=this._nextRow,i=this.getRow(r);return i.values=e,this._setStyleOption(r,"i"===t[0]?t:"n"),i}addRows(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"n";const r=[];return e.forEach(e=>{r.push(this.addRow(e,t))}),r}insertRow(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"n";return this.spliceRows(e,0,t),this._setStyleOption(e,r),this.getRow(e)}insertRows(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"n";if(this.spliceRows(e,0,...t),"n"!==r)for(let i=0;i1&&void 0!==arguments[1]?arguments[1]:"n";"o"===t[0]&&void 0!==this.findRow(e+1)?this._copyStyle(e+1,e,"+"===t[1]):"i"===t[0]&&void 0!==this.findRow(e-1)&&this._copyStyle(e-1,e,"+"===t[1])}_copyStyle(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=this.getRow(e),s=this.getRow(t);s.style=d(i.style),i.eachCell({includeEmpty:r},(e,t)=>{s.getCell(t).style=d(e.style)}),s.height=i.height}duplicateRow(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=this._rows[e-1],s=new Array(t).fill(i.values);this.spliceRows(e+1,r?0:t,...s);for(let r=0;r{t.getCell(r).style=e.style})}}spliceRows(e,t){const r=e+t;for(var i=arguments.length,s=new Array(i>2?i-2:0),n=2;n{e.getCell(r).style=t.style}),this._rows[l-1]=void 0}else this._rows[l+a-1]=void 0;else if(a>0)for(l=h;l>=r;l--)if(c=this._rows[l-1],c){const e=this.getRow(l+a);e.values=c.values,e.style=c.style,e.height=c.height,c.eachCell({includeEmpty:!0},(t,r)=>{if(e.getCell(r).style=t.style,"MergeValue"===t._value.constructor.name){const e=this.getRow(t._row._number+o).getCell(r),i=t._value._master,s=this.getRow(i._row._number+o).getCell(i._column._number);e.merge(s)}})}else this._rows[l+a-1]=void 0;for(l=0;l{e&&e.hasValues&&t(e,e.number)})}getSheetValues(){const e=[];return this._rows.forEach(t=>{t&&(e[t.number]=t.values)}),e}findCell(e,t){const r=s.getAddress(e,t),i=this._rows[r.row-1];return i?i.findCell(r.col):void 0}getCell(e,t){const r=s.getAddress(e,t);return this.getRow(r.row).getCellEx(r)}mergeCells(){for(var e=arguments.length,t=new Array(e),r=0;r{if(t.intersects(e))throw new Error("Cannot merge already merged cells")});const r=this.getCell(e.top,e.left);for(let i=e.top;i<=e.bottom;i++)for(let s=e.left;s<=e.right;s++)(i>e.top||s>e.left)&&this.getCell(i,s).merge(r,t);this._merges[r.address]=e}_unMergeMaster(e){const t=this._merges[e.address];if(t){for(let e=t.top;e<=t.bottom;e++)for(let r=t.left;r<=t.right;r++)this.getCell(e,r).unmerge();delete this._merges[e.address]}}get hasMerges(){return i.some(this._merges,Boolean)}unMergeCells(){for(var e=arguments.length,t=new Array(e),r=0;r3&&void 0!==arguments[3]?arguments[3]:"shared";const n=s.decode(e),{top:o,left:a,bottom:h,right:l}=n,c=l-a+1,u=s.encodeAddress(o,a),f="shared"===i;let d;d="function"==typeof r?r:Array.isArray(r)?Array.isArray(r[0])?(e,t)=>r[e-o][t-a]:(e,t)=>r[(e-o)*c+(t-a)]:()=>{};let p=!0;for(let r=o;r<=h;r++)for(let s=a;s<=l;s++)p?(this.getCell(r,s).value={shareType:i,formula:t,ref:e,result:d(r,s)},p=!1):this.getCell(r,s).value=f?{sharedFormula:u,result:d(r,s)}:d(r,s)}addImage(e,t){const r={type:"image",imageId:e,range:t};this._media.push(new l(this,r))}getImages(){return this._media.filter(e=>"image"===e.type)}addBackgroundImage(e){const t={type:"background",imageId:e};this._media.push(new l(this,t))}getBackgroundImageId(){const e=this._media.find(e=>"background"===e.type);return e&&e.imageId}protect(e,t){return new Promise(r=>{this.sheetProtection={sheet:!0},t&&"spinCount"in t&&(t.spinCount=Number.isFinite(t.spinCount)?Math.round(Math.max(0,t.spinCount)):1e5),e&&(this.sheetProtection.algorithmName="SHA-512",this.sheetProtection.saltValue=f.randomBytes(16).toString("base64"),this.sheetProtection.spinCount=t&&"spinCount"in t?t.spinCount:1e5,this.sheetProtection.hashValue=f.convertPasswordToHash(e,"SHA512",this.sheetProtection.saltValue,this.sheetProtection.spinCount)),t&&(this.sheetProtection=Object.assign(this.sheetProtection,t),!e&&"spinCount"in t&&delete this.sheetProtection.spinCount),r()})}unprotect(){this.sheetProtection=null}addTable(e){const t=new c(this,e);return this.tables[e.name]=t,t}getTable(e){return this.tables[e]}removeTable(e){delete this.tables[e]}getTables(){return Object.values(this.tables)}addConditionalFormatting(e){this.conditionalFormattings.push(e)}removeConditionalFormatting(e){"number"==typeof e?this.conditionalFormattings.splice(e,1):this.conditionalFormattings=e instanceof Function?this.conditionalFormattings.filter(e):[]}get tabColor(){return console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor}set tabColor(e){console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor=e}get model(){const e={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map(e=>e.model),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map(e=>e.model),conditionalFormattings:this.conditionalFormattings};e.cols=a.toModel(this.columns);const t=e.rows=[],r=e.dimensions=new n;return this._rows.forEach(e=>{const i=e&&e.model;i&&(r.expand(i.number,i.min,i.number,i.max),t.push(i))}),e.merges=[],i.each(this._merges,t=>{e.merges.push(t.range)}),e}_parseRows(e){this._rows=[],e.rows.forEach(e=>{const t=new o(this,e.number);this._rows[t.number-1]=t,t.model=e})}_parseMergeCells(e){i.each(e.mergeCells,e=>{this.mergeCellsWithoutStyle(e)})}set model(e){this.name=e.name,this._columns=a.fromModel(this,e.cols),this._parseRows(e),this._parseMergeCells(e),this.dataValidations=new u(e.dataValidations),this.properties=e.properties,this.pageSetup=e.pageSetup,this.headerFooter=e.headerFooter,this.views=e.views,this.autoFilter=e.autoFilter,this._media=e.media.map(e=>new l(this,e)),this.sheetProtection=e.sheetProtection,this.tables=e.tables.reduce((e,t)=>{const r=new c;return r.model=t,e[t.name]=r,e},{}),this.conditionalFormattings=e.conditionalFormattings}}},{"../utils/col-cache":19,"../utils/copy-style":20,"../utils/encryptor":21,"../utils/under-dash":26,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(e,t,r){"use strict";const i={Workbook:e("./doc/workbook")},s=e("./doc/enums");Object.keys(s).forEach(e=>{i[e]=s[e]}),t.exports=i},{"./doc/enums":7,"./doc/workbook":13}],16:[function(e,t,r){"use strict";const i="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8");r.bufferToString=function(e){return"string"==typeof e?e:i?i.decode(e):e.toString()}},{}],17:[function(e,t,r){"use strict";const i="undefined"==typeof TextEncoder?null:new TextEncoder("utf-8"),{Buffer:s}=e("buffer");r.stringToBuffer=function(e){return"string"!=typeof e?e:i?s.from(i.encode(e).buffer):s.from(e)}},{buffer:220}],18:[function(e,t,r){"use strict";const i=e("./under-dash"),s=e("./col-cache");t.exports=class{constructor(e){this.template=e,this.sheets={}}addCell(e){this.addCellEx(s.decodeEx(e))}getCell(e){return this.findCellEx(s.decodeEx(e),!0)}findCell(e){return this.findCellEx(s.decodeEx(e),!1)}findCellAt(e,t,r){const i=this.sheets[e],s=i&&i[t];return s&&s[r]}addCellEx(e){if(e.top)for(let t=e.top;t<=e.bottom;t++)for(let r=e.left;r<=e.right;r++)this.getCellAt(e.sheetName,t,r);else this.findCellEx(e,!0)}getCellEx(e){return this.findCellEx(e,!0)}findCellEx(e,t){const r=this.findSheet(e,t),i=this.findSheetRow(r,e,t);return this.findRowCell(i,e,t)}getCellAt(e,t,r){const i=this.sheets[e]||(this.sheets[e]=[]),n=i[t]||(i[t]=[]);return n[r]||(n[r]={sheetName:e,address:s.n2l(r)+t,row:t,col:r})}removeCellEx(e){const t=this.findSheet(e);if(!t)return;const r=this.findSheetRow(t,e);r&&delete r[e.col]}forEachInSheet(e,t){const r=this.sheets[e];r&&r.forEach((e,r)=>{e&&e.forEach((e,i)=>{e&&t(e,r,i)})})}forEach(e){i.each(this.sheets,(t,r)=>{this.forEachInSheet(r,e)})}map(e){const t=[];return this.forEach(r=>{t.push(e(r))}),t}findSheet(e,t){const r=e.sheetName;return this.sheets[r]?this.sheets[r]:t?this.sheets[r]=[]:void 0}findSheetRow(e,t,r){const{row:i}=t;return e&&e[i]?e[i]:r?e[i]=[]:void 0}findRowCell(e,t,r){const{col:i}=t;return e&&e[i]?e[i]:r?e[i]=this.template?Object.assign(t,JSON.parse(JSON.stringify(this.template))):t:void 0}spliceRows(e,t,r,i){const s=this.sheets[e];if(s){const e=[];for(let t=0;t{i.splice(t,r,...e)})}}}},{"./col-cache":19,"./under-dash":26}],19:[function(e,t,r){"use strict";const i=/^[A-Z]+\d+$/,s={_dictionary:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],_l2nFill:0,_l2n:{},_n2l:[],_level:e=>e<=26?1:e<=676?2:3,_fill(e){let t,r,i,s,n,o=1;if(e>=4)throw new Error("Out of bounds. Excel supports columns from 1 to 16384");if(this._l2nFill<1&&e>=1){for(;o<=26;)t=this._dictionary[o-1],this._n2l[o]=t,this._l2n[t]=o,o++;this._l2nFill=1}if(this._l2nFill<2&&e>=2){for(o=27;o<=702;)r=o-27,i=r%26,s=Math.floor(r/26),t=this._dictionary[s]+this._dictionary[i],this._n2l[o]=t,this._l2n[t]=o,o++;this._l2nFill=2}if(this._l2nFill<3&&e>=3){for(o=703;o<=16384;)r=o-703,i=r%26,s=Math.floor(r/26)%26,n=Math.floor(r/676),t=this._dictionary[n]+this._dictionary[s]+this._dictionary[i],this._n2l[o]=t,this._l2n[t]=o,o++;this._l2nFill=3}},l2n(e){if(this._l2n[e]||this._fill(e.length),!this._l2n[e])throw new Error("Out of bounds. Invalid column letter: "+e);return this._l2n[e]},n2l(e){if(e<1||e>16384)throw new Error(e+" is out of bounds. Excel supports columns from 1 to 16384");return this._n2l[e]||this._fill(this._level(e)),this._n2l[e]},_hash:{},validateAddress(e){if(!i.test(e))throw new Error("Invalid Address: "+e);return!0},decodeAddress(e){const t=e.length<5&&this._hash[e];if(t)return t;let r=!1,i="",s=0,n=!1,o="",a=0;for(let t,h=0;h=65&&t<=90)r=!0,i+=e[h],s=26*s+t-64;else if(t>=48&&t<=57)n=!0,o+=e[h],a=10*a+t-48;else if(n&&r&&36!==t)break;if(r){if(s>16384)throw new Error("Out of bounds. Invalid column letter: "+i)}else s=void 0;n||(a=void 0);const h={address:e=i+o,col:s,row:a,$col$row:`$${i}$${o}`};return s<=100&&a<=100&&(this._hash[e]=h,this._hash[h.$col$row]=h),h},getAddress(e,t){if(t){const r=this.n2l(t)+e;return this.decodeAddress(r)}return this.decodeAddress(e)},decode(e){const t=e.split(":");if(2===t.length){const e=this.decodeAddress(t[0]),r=this.decodeAddress(t[1]),i={top:Math.min(e.row,r.row),left:Math.min(e.col,r.col),bottom:Math.max(e.row,r.row),right:Math.max(e.col,r.col)};return i.tl=this.n2l(i.left)+i.top,i.br=this.n2l(i.right)+i.bottom,i.dimensions=`${i.tl}:${i.br}`,i}return this.decodeAddress(e)},decodeEx(e){const t=e.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),r=t[1]||t[2],i=t[3],s=i.split(":");if(s.length>1){let e=this.decodeAddress(s[0]),t=this.decodeAddress(s[1]);const i=Math.min(e.row,t.row),n=Math.min(e.col,t.col),o=Math.max(e.row,t.row),a=Math.max(e.col,t.col);return e=this.n2l(n)+i,t=this.n2l(a)+o,{top:i,left:n,bottom:o,right:a,sheetName:r,tl:{address:e,col:n,row:i,$col$row:`$${this.n2l(n)}$${i}`,sheetName:r},br:{address:t,col:a,row:o,$col$row:`$${this.n2l(a)}$${o}`,sheetName:r},dimensions:`${e}:${t}`}}if(i.startsWith("#"))return r?{sheetName:r,error:i}:{error:i};const n=this.decodeAddress(i);return r?{sheetName:r,...n}:n},encodeAddress:(e,t)=>s.n2l(t)+e,encode(){switch(arguments.length){case 2:return s.encodeAddress(arguments[0],arguments[1]);case 4:return`${s.encodeAddress(arguments[0],arguments[1])}:${s.encodeAddress(arguments[2],arguments[3])}`;default:throw new Error("Can only encode with 2 or 4 arguments")}},inRange(e,t){const[r,i,,s,n]=e,[o,a]=t;return o>=r&&o<=s&&a>=i&&a<=n}};t.exports=s},{}],20:[function(e,t,r){"use strict";const i=(e,t)=>({...e,...t.reduce((t,r)=>(e[r]&&(t[r]={...e[r]}),t),{})}),s=function(e,t,r){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];e[r]&&(t[r]=i(e[r],s))};r.copyStyle=e=>{if(!e)return e;if(t=e,0===Object.keys(t).length)return{};var t;const r={...e};return s(e,r,"font",["color"]),s(e,r,"alignment"),s(e,r,"protection"),e.border&&(s(e,r,"border"),s(e.border,r.border,"top",["color"]),s(e.border,r.border,"left",["color"]),s(e.border,r.border,"bottom",["color"]),s(e.border,r.border,"right",["color"]),s(e.border,r.border,"diagonal",["color"])),e.fill&&(s(e,r,"fill",["fgColor","bgColor","center"]),e.fill.stops&&(r.fill.stops=e.fill.stops.map(e=>i(e,["color"])))),r}},{}],21:[function(e,t,r){(function(r){(function(){"use strict";const i=e("crypto"),s={hash(e){const t=i.createHash(e);for(var s=arguments.length,n=new Array(s>1?s-1:0),o=1;oi.randomBytes(e)};t.exports=s}).call(this)}).call(this,e("buffer").Buffer)},{buffer:220,crypto:229}],22:[function(e,t,r){"use strict";const{SaxesParser:i}=e("saxes"),{PassThrough:s}=e("readable-stream"),{bufferToString:n}=e("./browser-buffer-decode");t.exports=async function*(e){e.pipe&&!e[Symbol.asyncIterator]&&(e=e.pipe(new s));const t=new i;let r;t.on("error",e=>{r=e});let o=[];t.on("opentag",e=>o.push({eventType:"opentag",value:e})),t.on("text",e=>o.push({eventType:"text",value:e})),t.on("closetag",e=>o.push({eventType:"closetag",value:e}));for await(const i of e){if(t.write(n(i)),r)throw r;yield o,o=[]}}},{"./browser-buffer-decode":16,"readable-stream":330,saxes:334}],23:[function(e,t,r){"use strict";const i=e("./col-cache"),s=/(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi,n=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;t.exports={slideFormula:function(e,t,r){const o=i.decode(t),a=i.decode(r);return e.replace(s,(e,t,r,s,h)=>{if(h)return e;const l=n.exec(s);if(l){const r=l[1],s=l[2].toUpperCase(),n=l[3],h=l[4];if(s.length>3||3===s.length&&s>"XFD")return e;let c=i.l2n(s),u=parseInt(h,10);r||(c+=a.col-o.col),n||(u+=a.row-o.row);return(t||"")+(r||"")+i.n2l(c)+(n||"")+u}return e})}}},{"./col-cache":19}],24:[function(e,t,r){(function(r,i){(function(){"use strict";const s=e("readable-stream"),n=e("./utils"),o=e("./string-buf");class a{constructor(e,t){this._data=e,this._encoding=t}get length(){return this.toBuffer().length}copy(e,t,r,i){return this.toBuffer().copy(e,t,r,i)}toBuffer(){return this._buffer||(this._buffer=i.from(this._data,this._encoding)),this._buffer}}class h{constructor(e){this._data=e}get length(){return this._data.length}copy(e,t,r,i){return this._data._buf.copy(e,t,r,i)}toBuffer(){return this._data.toBuffer()}}class l{constructor(e){this._data=e}get length(){return this._data.length}copy(e,t,r,i){this._data.copy(e,t,r,i)}toBuffer(){return this._data}}class c{constructor(e){this.size=e,this.buffer=i.alloc(e),this.iRead=0,this.iWrite=0}toBuffer(){if(0===this.iRead&&this.iWrite===this.size)return this.buffer;const e=i.alloc(this.iWrite-this.iRead);return this.buffer.copy(e,0,this.iRead,this.iWrite),e}get length(){return this.iWrite-this.iRead}get eod(){return this.iRead===this.iWrite}get full(){return this.iWrite===this.size}read(e){let t;return 0===e?null:void 0===e||e>=this.length?(t=this.toBuffer(),this.iRead=this.iWrite,t):(t=i.alloc(e),this.buffer.copy(t,0,this.iRead,e),this.iRead+=e,t)}write(e,t,r){const i=Math.min(r,this.size-this.iWrite);return e.copy(this.buffer,this.iWrite,t,t+i),this.iWrite+=i,i}}const u=function(e){e=e||{},this.bufSize=e.bufSize||1048576,this.buffers=[],this.batch=e.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};n.inherits(u,s.Duplex,{toBuffer(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return i.concat(this.buffers.map(e=>e.toBuffer()))}},_getWritableBuffer(){if(this.buffers.length){const e=this.buffers[this.buffers.length-1];if(!e.full)return e}const e=new c(this.bufSize);return this.buffers.push(e),e},async _pipe(e){await Promise.all(this.pipes.map((function(t){return new Promise(r=>{t.write(e.toBuffer(),()=>{r()})})})))},_writeToBuffers(e){let t=0;const r=e.length;for(;t1;)this._pipe(this.buffers.shift());else this.corked?(this._writeToBuffers(c),r.nextTick(s)):(await this._pipe(c),s());else this.paused||this.emit("data",c.toBuffer()),this._writeToBuffers(c),this.emit("readable");return!0},cork(){this.corked=!0},_flush(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork(){this.corked=!1,this._flush()},end(e,t,r){const i=e=>{e?r(e):(this._flush(),this.pipes.forEach(e=>{e.end()}),this.emit("finish"))};e?this.write(e,t,i):i()},read(e){let t;if(e){for(t=[];e&&this.buffers.length&&!this.buffers[0].eod;){const r=this.buffers[0],i=r.read(e);e-=i.length,t.push(i),r.eod&&r.full&&this.buffers.shift()}return i.concat(t)}return t=this.buffers.map(e=>e.toBuffer()).filter(Boolean),this.buffers=[],i.concat(t)},setEncoding(e){this.encoding=e},pause(){this.paused=!0},resume(){this.paused=!1},isPaused(){return!!this.paused},pipe(e){this.pipes.push(e),!this.paused&&this.buffers.length&&this.end()},unpipe(e){this.pipes=this.pipes.filter(t=>t!==e)},unshift(){throw new Error("Not Implemented")},wrap(){throw new Error("Not Implemented")}}),t.exports=u}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"./string-buf":25,"./utils":27,_process:306,buffer:220,"readable-stream":330}],25:[function(e,t,r){(function(e){(function(){"use strict";t.exports=class{constructor(t){this._buf=e.alloc(t&&t.size||16384),this._encoding=t&&t.encoding||"utf8",this._inPos=0,this._buffer=void 0}get length(){return this._inPos}get capacity(){return this._buf.length}get buffer(){return this._buf}toBuffer(){return this._buffer||(this._buffer=e.alloc(this.length),this._buf.copy(this._buffer,0,0,this.length)),this._buffer}reset(e){e=e||0,this._buffer=void 0,this._inPos=e}_grow(t){let r=2*this._buf.length;for(;r=this._buf.length-4;)this._grow(this._inPos+e.length),t=this._inPos+this._buf.write(e,this._inPos,this._encoding);this._inPos=t}addStringBuf(e){e.length&&(this._buffer=void 0,this.length+e.length>this.capacity&&this._grow(this.length+e.length),e._buf.copy(this._buf,this._inPos,0,e.length),this._inPos+=e.length)}}}).call(this)}).call(this,e("buffer").Buffer)},{buffer:220}],26:[function(e,t,r){"use strict";const{toString:i}=Object.prototype,s=/["&<>]/,n={each:function(e,t){e&&(Array.isArray(e)?e.forEach(t):Object.keys(e).forEach(r=>{t(e[r],r)}))},some:function(e,t){return!!e&&(Array.isArray(e)?e.some(t):Object.keys(e).some(r=>t(e[r],r)))},every:function(e,t){return!e||(Array.isArray(e)?e.every(t):Object.keys(e).every(r=>t(e[r],r)))},map:function(e,t){return e?Array.isArray(e)?e.map(t):Object.keys(e).map(r=>t(e[r],r)):[]},keyBy:(e,t)=>e.reduce((e,r)=>(e[r[t]]=r,e),{}),isEqual:function(e,t){const r=typeof e,i=typeof t,s=Array.isArray(e),o=Array.isArray(t);let a;if(r!==i)return!1;switch(typeof e){case"object":if(s||o)return!(!s||!o)&&(e.length===t.length&&e.every((e,r)=>{const i=t[r];return n.isEqual(e,i)}));if(null===e||null===t)return e===t;if(a=Object.keys(e),Object.keys(t).length!==a.length)return!1;for(const e of a)if(!t.hasOwnProperty(e))return!1;return n.every(e,(e,r)=>{const i=t[r];return n.isEqual(e,i)});default:return e===t}},escapeHtml(e){const t=s.exec(e);if(!t)return e;let r="",i="",n=0,o=t.index;for(;o":i=">";break;default:continue}n!==o&&(r+=e.substring(n,o)),n=o+1,r+=i}return n!==o?r+e.substring(n,o):r},strcmp:(e,t)=>et?1:0,isUndefined:e=>"[object Undefined]"===i.call(e),isObject:e=>"[object Object]"===i.call(e),deepMerge(){const e=arguments[0]||{},{length:t}=arguments;let r,i,s;function o(t,o){r=e[o],s=Array.isArray(t),n.isObject(t)||s?(s?(s=!1,i=r&&Array.isArray(r)?r:[]):i=r&&n.isObject(r)?r:{},e[o]=n.deepMerge(i,t)):n.isUndefined(t)||(e[o]=t)}for(let e=0;e&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/,o={nop(){},promiseImmediate:e=>new Promise(t=>{r.setImmediate?i(()=>{t(e)}):setTimeout(()=>{t(e)},1)}),inherits:function(e,t,r,i){e.super_=t,i||(i=r,r=null),r&&Object.keys(r).forEach(t=>{Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))});const s={constructor:{value:e,enumerable:!1,writable:!1,configurable:!0}};i&&Object.keys(i).forEach(e=>{s[e]=Object.getOwnPropertyDescriptor(i,e)}),e.prototype=Object.create(t.prototype,s)},dateToExcel:(e,t)=>25569+e.getTime()/864e5-(t?1462:0),excelToDate(e,t){const r=Math.round(24*(e-25569+(t?1462:0))*3600*1e3);return new Date(r)},parsePath(e){const t=e.lastIndexOf("/");return{path:e.substring(0,t),name:e.substring(t+1)}},getRelsPath(e){const t=o.parsePath(e);return`${t.path}/_rels/${t.name}.rels`},xmlEncode(e){const t=n.exec(e);if(!t)return e;let r="",i="",s=0,o=t.index;for(;o=11&&13!==t)){i="";break}continue}s!==o&&(r+=e.substring(s,o)),s=o+1,i&&(r+=i)}return s!==o?r+e.substring(s,o):r},xmlDecode:e=>e.replace(/&([a-z]*);/g,e=>{switch(e){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case""":return'"';default:return e}}),validInt(e){const t=parseInt(e,10);return Number.isNaN(t)?0:t},isDateFmt(e){if(!e)return!1;return null!==(e=(e=e.replace(/\[[^\]]*]/g,"")).replace(/"[^"]*"/g,"")).match(/[ymdhMsb]+/)},fs:{exists:e=>new Promise(t=>{s.access(e,s.constants.F_OK,e=>{t(!e)})})},toIsoDateString:e=>e.toIsoString().subsstr(0,10),parseBoolean:e=>!0===e||"true"===e||1===e||"1"===e};t.exports=o}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("timers").setImmediate)},{fs:216,timers:361}],28:[function(e,t,r){"use strict";const i=e("./under-dash"),s=e("./utils");function n(e,t,r){e.push(` ${t}="${s.xmlEncode(r.toString())}"`)}function o(e,t){if(t){const r=[];i.each(t,(e,t)=>{void 0!==e&&n(r,t,e)}),e.push(r.join(""))}}class a{constructor(){this._xml=[],this._stack=[],this._rollbacks=[]}get tos(){return this._stack.length?this._stack[this._stack.length-1]:void 0}get cursor(){return this._xml.length}openXml(e){const t=this._xml;t.push("\n")}openNode(e,t){const r=this.tos,i=this._xml;r&&this.open&&i.push(">"),this._stack.push(e),i.push("<"),i.push(e),o(i,t),this.leaf=!0,this.open=!0}addAttribute(e,t){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");void 0!==t&&n(this._xml,e,t)}addAttributes(e){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");o(this._xml,e)}writeText(e){const t=this._xml;this.open&&(t.push(">"),this.open=!1),this.leaf=!1,t.push(s.xmlEncode(e.toString()))}writeXml(e){this.open&&(this._xml.push(">"),this.open=!1),this.leaf=!1,this._xml.push(e)}closeNode(){const e=this._stack.pop(),t=this._xml;this.leaf?t.push("/>"):(t.push("")),this.open=!1,this.leaf=!1}leafNode(e,t,r){this.openNode(e,t),void 0!==r&&this.writeText(r),this.closeNode()}closeAll(){for(;this._stack.length;)this.closeNode()}addRollback(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}commit(){this._rollbacks.pop()}rollback(){const e=this._rollbacks.pop();this._xml.length>e.xml&&this._xml.splice(e.xml,this._xml.length-e.xml),this._stack.length>e.stack&&this._stack.splice(e.stack,this._stack.length-e.stack),this.leaf=e.leaf,this.open=e.open}get xml(){return this.closeAll(),this._xml.join("")}}a.StdDocAttributes={version:"1.0",encoding:"UTF-8",standalone:"yes"},t.exports=a},{"./under-dash":26,"./utils":27}],29:[function(e,t,r){(function(r){(function(){"use strict";const i=e("events"),s=e("jszip"),n=e("./stream-buf"),{stringToBuffer:o}=e("./browser-buffer-encode");class a extends i.EventEmitter{constructor(e){super(),this.options=Object.assign({type:"nodebuffer",compression:"DEFLATE"},e),this.zip=new s,this.stream=new n}append(e,t){t.hasOwnProperty("base64")&&t.base64?this.zip.file(t.name,e,{base64:!0}):(r.browser&&"string"==typeof e&&(e=o(e)),this.zip.file(t.name,e))}async finalize(){const e=await this.zip.generateAsync(this.options);this.stream.end(e),this.emit("finish")}read(e){return this.stream.read(e)}setEncoding(e){return this.stream.setEncoding(e)}pause(){return this.stream.pause()}resume(){return this.stream.resume()}isPaused(){return this.stream.isPaused()}pipe(e,t){return this.stream.pipe(e,t)}unpipe(e){return this.stream.unpipe(e)}unshift(e){return this.stream.unshift(e)}wrap(e){return this.stream.wrap(e)}}t.exports={ZipWriter:a}}).call(this)}).call(this,e("_process"))},{"./browser-buffer-encode":17,"./stream-buf":24,_process:306,events:261,jszip:280}],30:[function(e,t,r){"use strict";t.exports={0:{f:"General"},1:{f:"0"},2:{f:"0.00"},3:{f:"#,##0"},4:{f:"#,##0.00"},9:{f:"0%"},10:{f:"0.00%"},11:{f:"0.00E+00"},12:{f:"# ?/?"},13:{f:"# ??/??"},14:{f:"mm-dd-yy"},15:{f:"d-mmm-yy"},16:{f:"d-mmm"},17:{f:"mmm-yy"},18:{f:"h:mm AM/PM"},19:{f:"h:mm:ss AM/PM"},20:{f:"h:mm"},21:{f:"h:mm:ss"},22:{f:'m/d/yy "h":mm'},27:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"\u5e74" mm"\u6708" dd"\u65e5"'},28:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},29:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},30:{"zh-tw":"m/d/yy ","zh-cn":"m-d-yy","ja-jp":"m/d/yy","ko-kr":"mm-dd-yy"},31:{"zh-tw":'yyyy"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'yyyy"\u5e74"m"\u6708"d"\u65e5"',"ja-jp":'yyyy"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":'yyyy"\ub144" mm"\uc6d4" dd"\uc77c"'},32:{"zh-tw":'hh"\u6642"mm"\u5206"',"zh-cn":'h"\u65f6"mm"\u5206"',"ja-jp":'h"\u6642"mm"\u5206"',"ko-kr":'h"\uc2dc" mm"\ubd84"'},33:{"zh-tw":'hh"\u6642"mm"\u5206"ss"\u79d2"',"zh-cn":'h"\u65f6"mm"\u5206"ss"\u79d2"',"ja-jp":'h"\u6642"mm"\u5206"ss"\u79d2"',"ko-kr":'h"\uc2dc" mm"\ubd84" ss"\ucd08"'},34:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"',"zh-cn":'\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"',"ja-jp":'yyyy"\u5e74"m"\u6708"',"ko-kr":"yyyy-mm-dd"},35:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"ss"\u79d2"',"zh-cn":'\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"ss"\u79d2"',"ja-jp":'m"\u6708"d"\u65e5"',"ko-kr":"yyyy-mm-dd"},36:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"\u5e74" mm"\u6708" dd"\u65e5"'},37:{f:"#,##0 ;(#,##0)"},38:{f:"#,##0 ;[Red](#,##0)"},39:{f:"#,##0.00 ;(#,##0.00)"},40:{f:"#,##0.00 ;[Red](#,##0.00)"},45:{f:"mm:ss"},46:{f:"[h]:mm:ss"},47:{f:"mmss.0"},48:{f:"##0.0E+0"},49:{f:"@"},50:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"\u5e74" mm"\u6708" dd"\u65e5"'},51:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},52:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"',"zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":'yyyy"\u5e74"m"\u6708"',"ko-kr":"yyyy-mm-dd"},53:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"ss"\u79d2"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'m"\u6708"d"\u65e5"',"ko-kr":"yyyy-mm-dd"},54:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},55:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"',"zh-cn":'\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"',"ja-jp":'yyyy"\u5e74"m"\u6708"',"ko-kr":"yyyy-mm-dd"},56:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"ss"\u79d2"',"zh-cn":'\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"ss"\u79d2"',"ja-jp":'m"\u6708"d"\u65e5"',"ko-kr":"yyyy-mm-dd"},57:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"\u5e74" mm"\u6708" dd"\u65e5"'},58:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},59:{"th-th":"t0"},60:{"th-th":"t0.00"},61:{"th-th":"t#,##0"},62:{"th-th":"t#,##0.00"},67:{"th-th":"t0%"},68:{"th-th":"t0.00%"},69:{"th-th":"t# ?/?"},70:{"th-th":"t# ??/??"},81:{"th-th":"d/m/bb"}}},{}],31:[function(e,t,r){"use strict";t.exports={OfficeDocument:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",Worksheet:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",CalcChain:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain",SharedStrings:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",Styles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",Theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",Hyperlink:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",Image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",CoreProperties:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",ExtenderProperties:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",Comments:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",VmlDrawing:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",Table:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table"}},{}],32:[function(e,t,r){"use strict";const i=e("../../utils/parse-sax"),s=e("../../utils/xml-stream");class n{prepare(){}render(){}parseOpen(e){}parseText(e){}parseClose(e){}reconcile(e,t){}reset(){this.model=null,this.map&&Object.values(this.map).forEach(e=>{e instanceof n?e.reset():e.xform&&e.xform.reset()})}mergeModel(e){this.model=Object.assign(this.model||{},e)}async parse(e){for await(const t of e)for(const{eventType:e,value:r}of t)if("opentag"===e)this.parseOpen(r);else if("text"===e)this.parseText(r);else if("closetag"===e&&!this.parseClose(r.name))return this.model;return this.model}async parseStream(e){return this.parse(i(e))}get xml(){return this.toXml(this.model)}toXml(e){const t=new s;return this.render(t,e),t.xml}static toAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e.toString()}static toStringAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return n.toAttribute(e,t,r)}static toStringValue(e,t){return void 0===e?t:e}static toBoolAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e?"1":"0"}static toBoolValue(e,t){return void 0===e?t:"1"===e}static toIntAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return n.toAttribute(e,t,r)}static toIntValue(e,t){return void 0===e?t:parseInt(e,10)}static toFloatAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return n.toAttribute(e,t,r)}static toFloatValue(e,t){return void 0===e?t:parseFloat(e)}}t.exports=n},{"../../utils/parse-sax":22,"../../utils/xml-stream":28}],33:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("../../../utils/col-cache");function n(e){try{return s.decodeEx(e),!0}catch(e){return!1}}function o(e){const t=[];let r=!1,i="";return e.split(",").forEach(e=>{if(!e)return;const s=(e.match(/'/g)||[]).length;if(!s)return void(r?i+=e+",":n(e)&&t.push(e));const o=s%2==0;!r&&o&&n(e)?t.push(e):r&&!o?(r=!1,n(i+e)&&t.push(i+e),i=""):(r=!0,i+=e+",")}),t}t.exports=class extends i{render(e,t){e.openNode("definedName",{name:t.name,localSheetId:t.localSheetId}),e.writeText(t.ranges.join(",")),e.closeNode()}parseOpen(e){switch(e.name){case"definedName":return this._parsedName=e.attributes.name,this._parsedLocalSheetId=e.attributes.localSheetId,this._parsedText=[],!0;default:return!1}}parseText(e){this._parsedText.push(e)}parseClose(){return this.model={name:this._parsedName,ranges:o(this._parsedText.join(""))},void 0!==this._parsedLocalSheetId&&(this.model.localSheetId=parseInt(this._parsedLocalSheetId,10)),!1}}},{"../../../utils/col-cache":19,"../base-xform":32}],34:[function(e,t,r){"use strict";const i=e("../../../utils/utils"),s=e("../base-xform");t.exports=class extends s{render(e,t){e.leafNode("sheet",{sheetId:t.id,name:t.name,state:t.state,"r:id":t.rId})}parseOpen(e){return"sheet"===e.name&&(this.model={name:i.xmlDecode(e.attributes.name),id:parseInt(e.attributes.sheetId,10),state:e.attributes.state,rId:e.attributes["r:id"]},!0)}parseText(){}parseClose(){return!1}}},{"../../../utils/utils":27,"../base-xform":32}],35:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{render(e,t){e.leafNode("calcPr",{calcId:171027,fullCalcOnLoad:t.fullCalcOnLoad?1:void 0})}parseOpen(e){return"calcPr"===e.name&&(this.model={},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],36:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{render(e,t){e.leafNode("workbookPr",{date1904:t.date1904?1:void 0,defaultThemeVersion:164011,filterPrivacy:1})}parseOpen(e){return"workbookPr"===e.name&&(this.model={date1904:"1"===e.attributes.date1904},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],37:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{render(e,t){const r={xWindow:t.x||0,yWindow:t.y||0,windowWidth:t.width||12e3,windowHeight:t.height||24e3,firstSheet:t.firstSheet,activeTab:t.activeTab};t.visibility&&"visible"!==t.visibility&&(r.visibility=t.visibility),e.leafNode("workbookView",r)}parseOpen(e){if("workbookView"===e.name){const t=this.model={},r=function(e,r,i){const s=void 0!==r?t[e]=r:i;void 0!==s&&(t[e]=s)},i=function(e,r,i){const s=void 0!==r?t[e]=parseInt(r,10):i;void 0!==s&&(t[e]=s)};return i("x",e.attributes.xWindow,0),i("y",e.attributes.yWindow,0),i("width",e.attributes.windowWidth,25e3),i("height",e.attributes.windowHeight,1e4),r("visibility",e.attributes.visibility,"visible"),i("activeTab",e.attributes.activeTab,void 0),i("firstSheet",e.attributes.firstSheet,void 0),!0}return!1}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],38:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../../../utils/col-cache"),n=e("../../../utils/xml-stream"),o=e("../base-xform"),a=e("../static-xform"),h=e("../list-xform"),l=e("./defined-name-xform"),c=e("./sheet-xform"),u=e("./workbook-view-xform"),f=e("./workbook-properties-xform"),d=e("./workbook-calc-properties-xform");class p extends o{constructor(){super(),this.map={fileVersion:p.STATIC_XFORMS.fileVersion,workbookPr:new f,bookViews:new h({tag:"bookViews",count:!1,childXform:new u}),sheets:new h({tag:"sheets",count:!1,childXform:new c}),definedNames:new h({tag:"definedNames",count:!1,childXform:new l}),calcPr:new d}}prepare(e){e.sheets=e.worksheets;const t=[];let r=0;e.sheets.forEach(e=>{if(e.pageSetup&&e.pageSetup.printArea&&e.pageSetup.printArea.split("&&").forEach(i=>{const s=i.split(":"),n={name:"_xlnm.Print_Area",ranges:[`'${e.name}'!$${s[0]}:$${s[1]}`],localSheetId:r};t.push(n)}),e.pageSetup&&(e.pageSetup.printTitlesRow||e.pageSetup.printTitlesColumn)){const i=[];if(e.pageSetup.printTitlesColumn){const t=e.pageSetup.printTitlesColumn.split(":");i.push(`'${e.name}'!$${t[0]}:$${t[1]}`)}if(e.pageSetup.printTitlesRow){const t=e.pageSetup.printTitlesRow.split(":");i.push(`'${e.name}'!$${t[0]}:$${t[1]}`)}const s={name:"_xlnm.Print_Titles",ranges:i,localSheetId:r};t.push(s)}r++}),t.length&&(e.definedNames=e.definedNames.concat(t)),(e.media||[]).forEach((e,t)=>{e.name=e.type+(t+1)})}render(e,t){e.openXml(n.StdDocAttributes),e.openNode("workbook",p.WORKBOOK_ATTRIBUTES),this.map.fileVersion.render(e),this.map.workbookPr.render(e,t.properties),this.map.bookViews.render(e,t.views),this.map.sheets.render(e,t.sheets),this.map.definedNames.render(e,t.definedNames),this.map.calcPr.render(e,t.calcProperties),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"workbook":return!0;default:return this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"workbook":return this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}},this.map.definedNames.model&&(this.model.definedNames=this.map.definedNames.model),!1;default:return!0}}reconcile(e){const t=(e.workbookRels||[]).reduce((e,t)=>(e[t.Id]=t,e),{}),r=[];let n,o=0;(e.sheets||[]).forEach(i=>{const s=t[i.rId];s&&(n=e.worksheetHash["xl/"+s.Target.replace(/^(\s|\/xl\/)+/,"")],n&&(n.name=i.name,n.id=i.id,n.state=i.state,r[o++]=n))});const a=[];i.each(e.definedNames,e=>{if("_xlnm.Print_Area"===e.name){if(n=r[e.localSheetId],n){n.pageSetup||(n.pageSetup={});const t=s.decodeEx(e.ranges[0]);n.pageSetup.printArea=n.pageSetup.printArea?`${n.pageSetup.printArea}&&${t.dimensions}`:t.dimensions}}else if("_xlnm.Print_Titles"===e.name){if(n=r[e.localSheetId],n){n.pageSetup||(n.pageSetup={});const t=e.ranges.join(","),r=/\$/g,i=/\$\d+:\$\d+/,s=t.match(i);if(s&&s.length){const e=s[0];n.pageSetup.printTitlesRow=e.replace(r,"")}const o=/\$[A-Z]+:\$[A-Z]+/,a=t.match(o);if(a&&a.length){const e=a[0];n.pageSetup.printTitlesColumn=e.replace(r,"")}}}else a.push(e)}),e.definedNames=a,e.media.forEach((e,t)=>{e.index=t})}}p.WORKBOOK_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x15","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},p.STATIC_XFORMS={fileVersion:new a({tag:"fileVersion",$:{appName:"xl",lastEdited:5,lowestEdited:5,rupBuild:9303}})},t.exports=p},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./defined-name-xform":33,"./sheet-xform":34,"./workbook-calc-properties-xform":35,"./workbook-properties-xform":36,"./workbook-view-xform":37}],39:[function(e,t,r){"use strict";const i=e("../strings/rich-text-xform"),s=e("../../../utils/utils"),n=e("../base-xform"),o=t.exports=function(e){this.model=e};s.inherits(o,n,{get tag(){return"r"},get richTextXform(){return this._richTextXform||(this._richTextXform=new i),this._richTextXform},render(e,t){t=t||this.model,e.openNode("comment",{ref:t.ref,authorId:0}),e.openNode("text"),t&&t.note&&t.note.texts&&t.note.texts.forEach(t=>{this.richTextXform.render(e,t)}),e.closeNode(),e.closeNode()},parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"comment":return this.model={type:"note",note:{texts:[]},...e.attributes},!0;case"r":return this.parser=this.richTextXform,this.parser.parseOpen(e),!0;default:return!1}},parseText(e){this.parser&&this.parser.parseText(e)},parseClose(e){switch(e){case"comment":return!1;case"r":return this.model.note.texts.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}})},{"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],40:[function(e,t,r){"use strict";const i=e("../../../utils/xml-stream"),s=e("../../../utils/utils"),n=e("../base-xform"),o=e("./comment-xform"),a=t.exports=function(){this.map={comment:new o}};s.inherits(a,n,{COMMENTS_ATTRIBUTES:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},{render(e,t){t=t||this.model,e.openXml(i.StdDocAttributes),e.openNode("comments",a.COMMENTS_ATTRIBUTES),e.openNode("authors"),e.leafNode("author",null,"Author"),e.closeNode(),e.openNode("commentList"),t.comments.forEach(t=>{this.map.comment.render(e,t)}),e.closeNode(),e.closeNode()},parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"commentList":return this.model={comments:[]},!0;case"comment":return this.parser=this.map.comment,this.parser.parseOpen(e),!0;default:return!1}},parseText(e){this.parser&&this.parser.parseText(e)},parseClose(e){switch(e){case"commentList":return!1;case"comment":return this.model.comments.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}})},{"../../../utils/utils":27,"../../../utils/xml-stream":28,"../base-xform":32,"./comment-xform":39}],41:[function(e,t,r){"use strict";const i=e("../../base-xform");t.exports=class extends i{constructor(e){super(),this._model=e}get tag(){return this._model&&this._model.tag}render(e,t,r){(t===r[2]||"x:SizeWithCells"===this.tag&&t===r[1])&&e.leafNode(this.tag)}parseOpen(e){switch(e.name){case this.tag:return this.model={},this.model[this.tag]=!0,!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../base-xform":32}],42:[function(e,t,r){"use strict";const i=e("../../base-xform");t.exports=class extends i{constructor(e){super(),this._model=e}get tag(){return this._model&&this._model.tag}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(e){switch(e.name){case this.tag:return this.text="",!0;default:return!1}}parseText(e){this.text=e}parseClose(){return!1}}},{"../../base-xform":32}],43:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"x:Anchor"}getAnchorRect(e){const t=Math.floor(e.left),r=Math.floor(68*(e.left-t)),i=Math.floor(e.top),s=Math.floor(18*(e.top-i)),n=Math.floor(e.right),o=Math.floor(68*(e.right-n)),a=Math.floor(e.bottom);return[t,r,i,s,n,o,a,Math.floor(18*(e.bottom-a))]}getDefaultRect(e){const t=e.col,r=Math.max(e.row-2,0);return[t,6,r,14,t+2,2,r+4,16]}render(e,t){const r=t.anchor?this.getAnchorRect(t.anchor):this.getDefaultRect(t.refAddress);e.leafNode("x:Anchor",null,r.join(", "))}parseOpen(e){switch(e.name){case this.tag:return this.text="",!0;default:return!1}}parseText(e){this.text=e}parseClose(){return!1}}},{"../base-xform":32}],44:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("./vml-anchor-xform"),n=e("./style/vml-protection-xform"),o=e("./style/vml-position-xform"),a=["twoCells","oneCells","absolute"];t.exports=class extends i{constructor(){super(),this.map={"x:Anchor":new s,"x:Locked":new n({tag:"x:Locked"}),"x:LockText":new n({tag:"x:LockText"}),"x:SizeWithCells":new o({tag:"x:SizeWithCells"}),"x:MoveWithCells":new o({tag:"x:MoveWithCells"})}}get tag(){return"x:ClientData"}render(e,t){const{protection:r,editAs:i}=t.note;e.openNode(this.tag,{ObjectType:"Note"}),this.map["x:MoveWithCells"].render(e,i,a),this.map["x:SizeWithCells"].render(e,i,a),this.map["x:Anchor"].render(e,t),this.map["x:Locked"].render(e,r.locked),e.leafNode("x:AutoFill",null,"False"),this.map["x:LockText"].render(e,r.lockText),e.leafNode("x:Row",null,t.refAddress.row-1),e.leafNode("x:Column",null,t.refAddress.col-1),e.closeNode()}parseOpen(e){switch(e.name){case this.tag:this.reset(),this.model={anchor:[],protection:{},editAs:""};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.normalizeModel(),!1;default:return!0}}normalizeModel(){const e=Object.assign({},this.map["x:MoveWithCells"].model,this.map["x:SizeWithCells"].model),t=Object.keys(e).length;this.model.editAs=a[t],this.model.anchor=this.map["x:Anchor"].text,this.model.protection.locked=this.map["x:Locked"].text,this.model.protection.lockText=this.map["x:LockText"].text}}},{"../base-xform":32,"./style/vml-position-xform":41,"./style/vml-protection-xform":42,"./vml-anchor-xform":43}],45:[function(e,t,r){"use strict";const i=e("../../../utils/xml-stream"),s=e("../base-xform"),n=e("./vml-shape-xform");class o extends s{constructor(){super(),this.map={"v:shape":new n}}get tag(){return"xml"}render(e,t){e.openXml(i.StdDocAttributes),e.openNode(this.tag,o.DRAWING_ATTRIBUTES),e.openNode("o:shapelayout",{"v:ext":"edit"}),e.leafNode("o:idmap",{"v:ext":"edit",data:1}),e.closeNode(),e.openNode("v:shapetype",{id:"_x0000_t202",coordsize:"21600,21600","o:spt":202,path:"m,l,21600r21600,l21600,xe"}),e.leafNode("v:stroke",{joinstyle:"miter"}),e.leafNode("v:path",{gradientshapeok:"t","o:connecttype":"rect"}),e.closeNode(),t.comments.forEach((t,r)=>{this.map["v:shape"].render(e,t,r)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={comments:[]};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.comments.push(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:return!0}}reconcile(e,t){e.anchors.forEach(e=>{e.br?this.map["xdr:twoCellAnchor"].reconcile(e,t):this.map["xdr:oneCellAnchor"].reconcile(e,t)})}}o.DRAWING_ATTRIBUTES={"xmlns:v":"urn:schemas-microsoft-com:vml","xmlns:o":"urn:schemas-microsoft-com:office:office","xmlns:x":"urn:schemas-microsoft-com:office:excel"},t.exports=o},{"../../../utils/xml-stream":28,"../base-xform":32,"./vml-shape-xform":46}],46:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("./vml-textbox-xform"),n=e("./vml-client-data-xform");class o extends i{constructor(){super(),this.map={"v:textbox":new s,"x:ClientData":new n}}get tag(){return"v:shape"}render(e,t,r){e.openNode("v:shape",o.V_SHAPE_ATTRIBUTES(t,r)),e.leafNode("v:fill",{color2:"infoBackground [80]"}),e.leafNode("v:shadow",{color:"none [81]",obscured:"t"}),e.leafNode("v:path",{"o:connecttype":"none"}),this.map["v:textbox"].render(e,t),this.map["x:ClientData"].render(e,t),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={margins:{insetmode:e.attributes["o:insetmode"]},anchor:"",editAs:"",protection:{}};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.margins.inset=this.map["v:textbox"].model&&this.map["v:textbox"].model.inset,this.model.protection=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.protection,this.model.anchor=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.anchor,this.model.editAs=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.editAs,!1;default:return!0}}}o.V_SHAPE_ATTRIBUTES=(e,t)=>({id:"_x0000_s"+(1025+t),type:"#_x0000_t202",style:"position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden",fillcolor:"infoBackground [80]",strokecolor:"none [81]","o:insetmode":e.note.margins&&e.note.margins.insetmode}),t.exports=o},{"../base-xform":32,"./vml-client-data-xform":44,"./vml-textbox-xform":47}],47:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"v:textbox"}conversionUnit(e,t,r){return`${parseFloat(e)*t.toFixed(2)}${r}`}reverseConversionUnit(e){return(e||"").split(",").map(e=>Number(parseFloat(this.conversionUnit(parseFloat(e),.1,"")).toFixed(2)))}render(e,t){const r={style:"mso-direction-alt:auto"};if(t&&t.note){let{inset:e}=t.note&&t.note.margins;Array.isArray(e)&&(e=e.map(e=>this.conversionUnit(e,10,"mm")).join(",")),e&&(r.inset=e)}e.openNode("v:textbox",r),e.leafNode("div",{style:"text-align:left"}),e.closeNode()}parseOpen(e){switch(e.name){case this.tag:return this.model={inset:this.reverseConversionUnit(e.attributes.inset)},!0;default:return!0}}parseText(){}parseClose(e){switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],48:[function(e,t,r){"use strict";const i=e("./base-xform");t.exports=class extends i{createNewModel(e){return{}}parseOpen(e){return this.parser=this.parser||this.map[e.name],this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag&&(this.model=this.createNewModel(e),!0)}parseText(e){this.parser&&this.parser.parseText(e)}onParserClose(e,t){this.model[e]=t.model}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.onParserClose(e,this.parser),this.parser=void 0),!0):e!==this.tag}}},{"./base-xform":32}],49:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{render(e,t){e.openNode("HeadingPairs"),e.openNode("vt:vector",{size:2,baseType:"variant"}),e.openNode("vt:variant"),e.leafNode("vt:lpstr",void 0,"Worksheets"),e.closeNode(),e.openNode("vt:variant"),e.leafNode("vt:i4",void 0,t.length),e.closeNode(),e.closeNode(),e.closeNode()}parseOpen(e){return"HeadingPairs"===e.name}parseText(){}parseClose(e){return"HeadingPairs"!==e}}},{"../base-xform":32}],50:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{render(e,t){e.openNode("TitlesOfParts"),e.openNode("vt:vector",{size:t.length,baseType:"lpstr"}),t.forEach(t=>{e.leafNode("vt:lpstr",void 0,t.name)}),e.closeNode(),e.closeNode()}parseOpen(e){return"TitlesOfParts"===e.name}parseText(){}parseClose(e){return"TitlesOfParts"!==e}}},{"../base-xform":32}],51:[function(e,t,r){"use strict";const i=e("../../../utils/xml-stream"),s=e("../base-xform"),n=e("../simple/string-xform"),o=e("./app-heading-pairs-xform"),a=e("./app-titles-of-parts-xform");class h extends s{constructor(){super(),this.map={Company:new n({tag:"Company"}),Manager:new n({tag:"Manager"}),HeadingPairs:new o,TitleOfParts:new a}}render(e,t){e.openXml(i.StdDocAttributes),e.openNode("Properties",h.PROPERTY_ATTRIBUTES),e.leafNode("Application",void 0,"Microsoft Excel"),e.leafNode("DocSecurity",void 0,"0"),e.leafNode("ScaleCrop",void 0,"false"),this.map.HeadingPairs.render(e,t.worksheets),this.map.TitleOfParts.render(e,t.worksheets),this.map.Company.render(e,t.company||""),this.map.Manager.render(e,t.manager),e.leafNode("LinksUpToDate",void 0,"false"),e.leafNode("SharedDoc",void 0,"false"),e.leafNode("HyperlinksChanged",void 0,"false"),e.leafNode("AppVersion",void 0,"16.0300"),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"Properties":return!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"Properties":return this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model},!1;default:return!0}}}h.DateFormat=function(e){return e.toISOString().replace(/[.]\d{3,6}/,"")},h.DateAttrs={"xsi:type":"dcterms:W3CDTF"},h.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties","xmlns:vt":"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"},t.exports=h},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/string-xform":119,"./app-heading-pairs-xform":49,"./app-titles-of-parts-xform":50}],52:[function(e,t,r){"use strict";const i=e("../../../utils/xml-stream"),s=e("../base-xform");class n extends s{render(e,t){e.openXml(i.StdDocAttributes),e.openNode("Types",n.PROPERTY_ATTRIBUTES);const r={};(t.media||[]).forEach(t=>{if("image"===t.type){const i=t.extension;r[i]||(r[i]=!0,e.leafNode("Default",{Extension:i,ContentType:"image/"+i}))}}),e.leafNode("Default",{Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"}),e.leafNode("Default",{Extension:"xml",ContentType:"application/xml"}),e.leafNode("Override",{PartName:"/xl/workbook.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}),t.worksheets.forEach(t=>{const r=`/xl/worksheets/sheet${t.id}.xml`;e.leafNode("Override",{PartName:r,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"})}),e.leafNode("Override",{PartName:"/xl/theme/theme1.xml",ContentType:"application/vnd.openxmlformats-officedocument.theme+xml"}),e.leafNode("Override",{PartName:"/xl/styles.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"});t.sharedStrings&&t.sharedStrings.count&&e.leafNode("Override",{PartName:"/xl/sharedStrings.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"}),t.tables&&t.tables.forEach(t=>{e.leafNode("Override",{PartName:"/xl/tables/"+t.target,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"})}),t.drawings&&t.drawings.forEach(t=>{e.leafNode("Override",{PartName:`/xl/drawings/${t.name}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.drawing+xml"})}),t.commentRefs&&(e.leafNode("Default",{Extension:"vml",ContentType:"application/vnd.openxmlformats-officedocument.vmlDrawing"}),t.commentRefs.forEach(t=>{let{commentName:r}=t;e.leafNode("Override",{PartName:`/xl/${r}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"})})),e.leafNode("Override",{PartName:"/docProps/core.xml",ContentType:"application/vnd.openxmlformats-package.core-properties+xml"}),e.leafNode("Override",{PartName:"/docProps/app.xml",ContentType:"application/vnd.openxmlformats-officedocument.extended-properties+xml"}),e.closeNode()}parseOpen(){return!1}parseText(){}parseClose(){return!1}}n.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"},t.exports=n},{"../../../utils/xml-stream":28,"../base-xform":32}],53:[function(e,t,r){"use strict";const i=e("../../../utils/xml-stream"),s=e("../base-xform"),n=e("../simple/date-xform"),o=e("../simple/string-xform"),a=e("../simple/integer-xform");class h extends s{constructor(){super(),this.map={"dc:creator":new o({tag:"dc:creator"}),"dc:title":new o({tag:"dc:title"}),"dc:subject":new o({tag:"dc:subject"}),"dc:description":new o({tag:"dc:description"}),"dc:identifier":new o({tag:"dc:identifier"}),"dc:language":new o({tag:"dc:language"}),"cp:keywords":new o({tag:"cp:keywords"}),"cp:category":new o({tag:"cp:category"}),"cp:lastModifiedBy":new o({tag:"cp:lastModifiedBy"}),"cp:lastPrinted":new n({tag:"cp:lastPrinted",format:h.DateFormat}),"cp:revision":new a({tag:"cp:revision"}),"cp:version":new o({tag:"cp:version"}),"cp:contentStatus":new o({tag:"cp:contentStatus"}),"cp:contentType":new o({tag:"cp:contentType"}),"dcterms:created":new n({tag:"dcterms:created",attrs:h.DateAttrs,format:h.DateFormat}),"dcterms:modified":new n({tag:"dcterms:modified",attrs:h.DateAttrs,format:h.DateFormat})}}render(e,t){e.openXml(i.StdDocAttributes),e.openNode("cp:coreProperties",h.CORE_PROPERTY_ATTRIBUTES),this.map["dc:creator"].render(e,t.creator),this.map["dc:title"].render(e,t.title),this.map["dc:subject"].render(e,t.subject),this.map["dc:description"].render(e,t.description),this.map["dc:identifier"].render(e,t.identifier),this.map["dc:language"].render(e,t.language),this.map["cp:keywords"].render(e,t.keywords),this.map["cp:category"].render(e,t.category),this.map["cp:lastModifiedBy"].render(e,t.lastModifiedBy),this.map["cp:lastPrinted"].render(e,t.lastPrinted),this.map["cp:revision"].render(e,t.revision),this.map["cp:version"].render(e,t.version),this.map["cp:contentStatus"].render(e,t.contentStatus),this.map["cp:contentType"].render(e,t.contentType),this.map["dcterms:created"].render(e,t.created),this.map["dcterms:modified"].render(e,t.modified),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"cp:coreProperties":case"coreProperties":return!0;default:if(this.parser=this.map[e.name],this.parser)return this.parser.parseOpen(e),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"cp:coreProperties":case"coreProperties":return this.model={creator:this.map["dc:creator"].model,title:this.map["dc:title"].model,subject:this.map["dc:subject"].model,description:this.map["dc:description"].model,identifier:this.map["dc:identifier"].model,language:this.map["dc:language"].model,keywords:this.map["cp:keywords"].model,category:this.map["cp:category"].model,lastModifiedBy:this.map["cp:lastModifiedBy"].model,lastPrinted:this.map["cp:lastPrinted"].model,revision:this.map["cp:revision"].model,contentStatus:this.map["cp:contentStatus"].model,contentType:this.map["cp:contentType"].model,created:this.map["dcterms:created"].model,modified:this.map["dcterms:modified"].model},!1;default:throw new Error("Unexpected xml node in parseClose: "+e)}}}h.DateFormat=function(e){return e.toISOString().replace(/[.]\d{3}/,"")},h.DateAttrs={"xsi:type":"dcterms:W3CDTF"},h.CORE_PROPERTY_ATTRIBUTES={"xmlns:cp":"http://schemas.openxmlformats.org/package/2006/metadata/core-properties","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:dcterms":"http://purl.org/dc/terms/","xmlns:dcmitype":"http://purl.org/dc/dcmitype/","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance"},t.exports=h},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/date-xform":117,"../simple/integer-xform":118,"../simple/string-xform":119}],54:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{render(e,t){e.leafNode("Relationship",t)}parseOpen(e){switch(e.name){case"Relationship":return this.model=e.attributes,!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],55:[function(e,t,r){"use strict";const i=e("../../../utils/xml-stream"),s=e("../base-xform"),n=e("./relationship-xform");class o extends s{constructor(){super(),this.map={Relationship:new n}}render(e,t){t=t||this._values,e.openXml(i.StdDocAttributes),e.openNode("Relationships",o.RELATIONSHIPS_ATTRIBUTES),t.forEach(t=>{this.map.Relationship.render(e,t)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"Relationships":return this.model=[],!0;default:if(this.parser=this.map[e.name],this.parser)return this.parser.parseOpen(e),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.push(this.parser.model),this.parser=void 0),!0;switch(e){case"Relationships":return!1;default:throw new Error("Unexpected xml node in parseClose: "+e)}}}o.RELATIONSHIPS_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"},t.exports=o},{"../../../utils/xml-stream":28,"../base-xform":32,"./relationship-xform":54}],56:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={range:{editAs:e.attributes.editAs||"oneCell"}};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}reconcilePicture(e,t){if(e&&e.rId){const r=t.rels[e.rId].Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/);if(r){const e=r[1],i=t.mediaIndex[e];return t.media[i]}}}}},{"../base-xform":32}],57:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("./blip-xform");t.exports=class extends i{constructor(){super(),this.map={"a:blip":new s}}get tag(){return"xdr:blipFill"}render(e,t){e.openNode(this.tag),this.map["a:blip"].render(e,t),e.openNode("a:stretch"),e.leafNode("a:fillRect"),e.closeNode(),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model=this.map["a:blip"].model,!1;default:return!0}}}},{"../base-xform":32,"./blip-xform":58}],58:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"a:blip"}render(e,t){e.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:embed":t.rId,cstate:"print"})}parseOpen(e){switch(e.name){case this.tag:return this.model={rId:e.attributes["r:embed"]},!0;default:return!0}}parseText(){}parseClose(e){switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],59:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"xdr:cNvPicPr"}render(e){e.openNode(this.tag),e.leafNode("a:picLocks",{noChangeAspect:"1"}),e.closeNode()}parseOpen(e){switch(e.name){case this.tag:default:return!0}}parseText(){}parseClose(e){switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],60:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("./hlink-click-xform"),n=e("./ext-lst-xform");t.exports=class extends i{constructor(){super(),this.map={"a:hlinkClick":new s,"a:extLst":new n}}get tag(){return"xdr:cNvPr"}render(e,t){e.openNode(this.tag,{id:t.index,name:"Picture "+t.index}),this.map["a:hlinkClick"].render(e,t),this.map["a:extLst"].render(e,t),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model=this.map["a:hlinkClick"].model,!1;default:return!0}}}},{"../base-xform":32,"./ext-lst-xform":63,"./hlink-click-xform":65}],61:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("../simple/integer-xform");t.exports=class extends i{constructor(e){super(),this.tag=e.tag,this.map={"xdr:col":new s({tag:"xdr:col",zero:!0}),"xdr:colOff":new s({tag:"xdr:colOff",zero:!0}),"xdr:row":new s({tag:"xdr:row",zero:!0}),"xdr:rowOff":new s({tag:"xdr:rowOff",zero:!0})}}render(e,t){e.openNode(this.tag),this.map["xdr:col"].render(e,t.nativeCol),this.map["xdr:colOff"].render(e,t.nativeColOff),this.map["xdr:row"].render(e,t.nativeRow),this.map["xdr:rowOff"].render(e,t.nativeRowOff),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model={nativeCol:this.map["xdr:col"].model,nativeColOff:this.map["xdr:colOff"].model,nativeRow:this.map["xdr:row"].model,nativeRowOff:this.map["xdr:rowOff"].model},!1;default:return!0}}}},{"../base-xform":32,"../simple/integer-xform":118}],62:[function(e,t,r){"use strict";const i=e("../../../utils/col-cache"),s=e("../../../utils/xml-stream"),n=e("../base-xform"),o=e("./two-cell-anchor-xform"),a=e("./one-cell-anchor-xform");class h extends n{constructor(){super(),this.map={"xdr:twoCellAnchor":new o,"xdr:oneCellAnchor":new a}}prepare(e){e.anchors.forEach((e,t)=>{e.anchorType=function(e){return("string"==typeof e.range?i.decode(e.range):e.range).br?"xdr:twoCellAnchor":"xdr:oneCellAnchor"}(e);this.map[e.anchorType].prepare(e,{index:t})})}get tag(){return"xdr:wsDr"}render(e,t){e.openXml(s.StdDocAttributes),e.openNode(this.tag,h.DRAWING_ATTRIBUTES),t.anchors.forEach(t=>{this.map[t.anchorType].render(e,t)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={anchors:[]};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.anchors.push(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:return!0}}reconcile(e,t){e.anchors.forEach(e=>{e.br?this.map["xdr:twoCellAnchor"].reconcile(e,t):this.map["xdr:oneCellAnchor"].reconcile(e,t)})}}h.DRAWING_ATTRIBUTES={"xmlns:xdr":"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing","xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main"},t.exports=h},{"../../../utils/col-cache":19,"../../../utils/xml-stream":28,"../base-xform":32,"./one-cell-anchor-xform":67,"./two-cell-anchor-xform":70}],63:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"a:extLst"}render(e){e.openNode(this.tag),e.openNode("a:ext",{uri:"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"}),e.leafNode("a16:creationId",{"xmlns:a16":"http://schemas.microsoft.com/office/drawing/2014/main",id:"{00000000-0008-0000-0000-000002000000}"}),e.closeNode(),e.closeNode()}parseOpen(e){switch(e.name){case this.tag:default:return!0}}parseText(){}parseClose(e){switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],64:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{constructor(e){super(),this.tag=e.tag,this.map={}}render(e,t){e.openNode(this.tag);const r=Math.floor(9525*t.width),i=Math.floor(9525*t.height);e.addAttribute("cx",r),e.addAttribute("cy",i),e.closeNode()}parseOpen(e){return e.name===this.tag&&(this.model={width:parseInt(e.attributes.cx||"0",10)/9525,height:parseInt(e.attributes.cy||"0",10)/9525},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],65:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"a:hlinkClick"}render(e,t){t.hyperlinks&&t.hyperlinks.rId&&e.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:id":t.hyperlinks.rId,tooltip:t.hyperlinks.tooltip})}parseOpen(e){switch(e.name){case this.tag:return this.model={hyperlinks:{rId:e.attributes["r:id"],tooltip:e.attributes.tooltip}},!0;default:return!0}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],66:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("./c-nv-pr-xform"),n=e("./c-nv-pic-pr-xform");t.exports=class extends i{constructor(){super(),this.map={"xdr:cNvPr":new s,"xdr:cNvPicPr":new n}}get tag(){return"xdr:nvPicPr"}render(e,t){e.openNode(this.tag),this.map["xdr:cNvPr"].render(e,t),this.map["xdr:cNvPicPr"].render(e,t),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model=this.map["xdr:cNvPr"].model,!1;default:return!0}}}},{"../base-xform":32,"./c-nv-pic-pr-xform":59,"./c-nv-pr-xform":60}],67:[function(e,t,r){"use strict";const i=e("./base-cell-anchor-xform"),s=e("../static-xform"),n=e("./cell-position-xform"),o=e("./ext-xform"),a=e("./pic-xform");t.exports=class extends i{constructor(){super(),this.map={"xdr:from":new n({tag:"xdr:from"}),"xdr:ext":new o({tag:"xdr:ext"}),"xdr:pic":new a,"xdr:clientData":new s({tag:"xdr:clientData"})}}get tag(){return"xdr:oneCellAnchor"}prepare(e,t){this.map["xdr:pic"].prepare(e.picture,t)}render(e,t){e.openNode(this.tag,{editAs:t.range.editAs||"oneCell"}),this.map["xdr:from"].render(e,t.range.tl),this.map["xdr:ext"].render(e,t.range.ext),this.map["xdr:pic"].render(e,t.picture),this.map["xdr:clientData"].render(e,{}),e.closeNode()}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.ext=this.map["xdr:ext"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(e,t){e.medium=this.reconcilePicture(e.picture,t)}}},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./ext-xform":64,"./pic-xform":68}],68:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("../static-xform"),n=e("./blip-fill-xform"),o=e("./nv-pic-pr-xform"),a=e("./sp-pr");t.exports=class extends i{constructor(){super(),this.map={"xdr:nvPicPr":new o,"xdr:blipFill":new n,"xdr:spPr":new s(a)}}get tag(){return"xdr:pic"}prepare(e,t){e.index=t.index+1}render(e,t){e.openNode(this.tag),this.map["xdr:nvPicPr"].render(e,t),this.map["xdr:blipFill"].render(e,t),this.map["xdr:spPr"].render(e,t),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.mergeModel(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32,"../static-xform":120,"./blip-fill-xform":57,"./nv-pic-pr-xform":66,"./sp-pr":69}],69:[function(e,t,r){"use strict";t.exports={tag:"xdr:spPr",c:[{tag:"a:xfrm",c:[{tag:"a:off",$:{x:"0",y:"0"}},{tag:"a:ext",$:{cx:"0",cy:"0"}}]},{tag:"a:prstGeom",$:{prst:"rect"},c:[{tag:"a:avLst"}]}]}},{}],70:[function(e,t,r){"use strict";const i=e("./base-cell-anchor-xform"),s=e("../static-xform"),n=e("./cell-position-xform"),o=e("./pic-xform");t.exports=class extends i{constructor(){super(),this.map={"xdr:from":new n({tag:"xdr:from"}),"xdr:to":new n({tag:"xdr:to"}),"xdr:pic":new o,"xdr:clientData":new s({tag:"xdr:clientData"})}}get tag(){return"xdr:twoCellAnchor"}prepare(e,t){this.map["xdr:pic"].prepare(e.picture,t)}render(e,t){e.openNode(this.tag,{editAs:t.range.editAs||"oneCell"}),this.map["xdr:from"].render(e,t.range.tl),this.map["xdr:to"].render(e,t.range.br),this.map["xdr:pic"].render(e,t.picture),this.map["xdr:clientData"].render(e,{}),e.closeNode()}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.br=this.map["xdr:to"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(e,t){e.medium=this.reconcilePicture(e.picture,t)}}},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./pic-xform":68}],71:[function(e,t,r){"use strict";const i=e("./base-xform");t.exports=class extends i{constructor(e){super(),this.tag=e.tag,this.always=!!e.always,this.count=e.count,this.empty=e.empty,this.$count=e.$count||"count",this.$=e.$,this.childXform=e.childXform,this.maxItems=e.maxItems}prepare(e,t){const{childXform:r}=this;e&&e.forEach((e,i)=>{t.index=i,r.prepare(e,t)})}render(e,t){if(this.always||t&&t.length){e.openNode(this.tag,this.$),this.count&&e.addAttribute(this.$count,t&&t.length||0);const{childXform:r}=this;(t||[]).forEach((t,i)=>{r.render(e,t,i)}),e.closeNode()}else this.empty&&e.leafNode(this.tag)}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:return this.model=[],!0;default:return!!this.childXform.parseOpen(e)&&(this.parser=this.childXform,!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)&&(this.model.push(this.parser.model),this.parser=void 0,this.maxItems&&this.model.length>this.maxItems))throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);return!0}return!1}reconcile(e,t){if(e){const{childXform:r}=this;e.forEach(e=>{r.reconcile(e,t)})}}}},{"./base-xform":32}],72:[function(e,t,r){"use strict";const i=e("../../../utils/col-cache"),s=e("../base-xform");t.exports=class extends s{get tag(){return"autoFilter"}render(e,t){if(t)if("string"==typeof t)e.leafNode("autoFilter",{ref:t});else{const r=function(e){return"string"==typeof e?e:i.getAddress(e.row,e.column).address},s=r(t.from),n=r(t.to);s&&n&&e.leafNode("autoFilter",{ref:`${s}:${n}`})}}parseOpen(e){"autoFilter"===e.name&&(this.model=e.attributes.ref)}}},{"../../../utils/col-cache":19,"../base-xform":32}],73:[function(e,t,r){"use strict";const i=e("../../../utils/utils"),s=e("../base-xform"),n=e("../../../doc/range"),o=e("../../../doc/enums"),a=e("../strings/rich-text-xform");function h(e){if(null==e)return o.ValueType.Null;if(e instanceof String||"string"==typeof e)return o.ValueType.String;if("number"==typeof e)return o.ValueType.Number;if("boolean"==typeof e)return o.ValueType.Boolean;if(e instanceof Date)return o.ValueType.Date;if(e.text&&e.hyperlink)return o.ValueType.Hyperlink;if(e.formula)return o.ValueType.Formula;if(e.error)return o.ValueType.Error;throw new Error("I could not understand type of value")}t.exports=class extends s{constructor(){super(),this.richTextXForm=new a}get tag(){return"c"}prepare(e,t){const r=t.styles.addStyleModel(e.style||{},function(e){switch(e.type){case o.ValueType.Formula:return h(e.result);default:return e.type}}(e));switch(r&&(e.styleId=r),e.comment&&t.comments.push({...e.comment,ref:e.address}),e.type){case o.ValueType.String:case o.ValueType.RichText:t.sharedStrings&&(e.ssId=t.sharedStrings.add(e.value));break;case o.ValueType.Date:t.date1904&&(e.date1904=!0);break;case o.ValueType.Hyperlink:t.sharedStrings&&void 0!==e.text&&null!==e.text&&(e.ssId=t.sharedStrings.add(e.text)),t.hyperlinks.push({address:e.address,target:e.hyperlink,tooltip:e.tooltip});break;case o.ValueType.Merge:t.merges.add(e);break;case o.ValueType.Formula:if(t.date1904&&(e.date1904=!0),"shared"===e.shareType&&(e.si=t.siFormulae++),e.formula)t.formulae[e.address]=e;else if(e.sharedFormula){const r=t.formulae[e.sharedFormula];if(!r)throw new Error("Shared Formula master must exist above and or left of clone for cell "+e.address);void 0===r.si?(r.shareType="shared",r.si=t.siFormulae++,r.range=new n(r.address,e.address)):r.range&&r.range.expandToAddress(e.address),e.si=r.si}}}renderFormula(e,t){let r=null;switch(t.shareType){case"shared":r={t:"shared",ref:t.ref||t.range.range,si:t.si};break;case"array":r={t:"array",ref:t.ref};break;default:void 0!==t.si&&(r={t:"shared",si:t.si})}switch(h(t.result)){case o.ValueType.Null:e.leafNode("f",r,t.formula);break;case o.ValueType.String:e.addAttribute("t","str"),e.leafNode("f",r,t.formula),e.leafNode("v",null,t.result);break;case o.ValueType.Number:e.leafNode("f",r,t.formula),e.leafNode("v",null,t.result);break;case o.ValueType.Boolean:e.addAttribute("t","b"),e.leafNode("f",r,t.formula),e.leafNode("v",null,t.result?1:0);break;case o.ValueType.Error:e.addAttribute("t","e"),e.leafNode("f",r,t.formula),e.leafNode("v",null,t.result.error);break;case o.ValueType.Date:e.leafNode("f",r,t.formula),e.leafNode("v",null,i.dateToExcel(t.result,t.date1904));break;default:throw new Error("I could not understand type of value")}}render(e,t){if(t.type!==o.ValueType.Null||t.styleId){switch(e.openNode("c"),e.addAttribute("r",t.address),t.styleId&&e.addAttribute("s",t.styleId),t.type){case o.ValueType.Null:break;case o.ValueType.Number:e.leafNode("v",null,t.value);break;case o.ValueType.Boolean:e.addAttribute("t","b"),e.leafNode("v",null,t.value?"1":"0");break;case o.ValueType.Error:e.addAttribute("t","e"),e.leafNode("v",null,t.value.error);break;case o.ValueType.String:case o.ValueType.RichText:void 0!==t.ssId?(e.addAttribute("t","s"),e.leafNode("v",null,t.ssId)):t.value&&t.value.richText?(e.addAttribute("t","inlineStr"),e.openNode("is"),t.value.richText.forEach(t=>{this.richTextXForm.render(e,t)}),e.closeNode("is")):(e.addAttribute("t","str"),e.leafNode("v",null,t.value));break;case o.ValueType.Date:e.leafNode("v",null,i.dateToExcel(t.value,t.date1904));break;case o.ValueType.Hyperlink:void 0!==t.ssId?(e.addAttribute("t","s"),e.leafNode("v",null,t.ssId)):(e.addAttribute("t","str"),e.leafNode("v",null,t.text));break;case o.ValueType.Formula:this.renderFormula(e,t);break;case o.ValueType.Merge:}e.closeNode()}}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"c":return this.model={address:e.attributes.r},this.t=e.attributes.t,e.attributes.s&&(this.model.styleId=parseInt(e.attributes.s,10)),!0;case"f":return this.currentNode="f",this.model.si=e.attributes.si,this.model.shareType=e.attributes.t,this.model.ref=e.attributes.ref,!0;case"v":return this.currentNode="v",!0;case"t":return this.currentNode="t",!0;case"r":return this.parser=this.richTextXForm,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){if(this.parser)this.parser.parseText(e);else switch(this.currentNode){case"f":this.model.formula=this.model.formula?this.model.formula+e:e;break;case"v":case"t":this.model.value&&this.model.value.richText?this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+e:e:this.model.value=this.model.value?this.model.value+e:e}}parseClose(e){switch(e){case"c":{const{model:e}=this;if(e.formula||e.shareType)e.type=o.ValueType.Formula,e.value&&("str"===this.t?e.result=i.xmlDecode(e.value):"b"===this.t?e.result=0!==parseInt(e.value,10):"e"===this.t?e.result={error:e.value}:e.result=parseFloat(e.value),e.value=void 0);else if(void 0!==e.value)switch(this.t){case"s":e.type=o.ValueType.String,e.value=parseInt(e.value,10);break;case"str":e.type=o.ValueType.String,e.value=i.xmlDecode(e.value);break;case"inlineStr":e.type=o.ValueType.String;break;case"b":e.type=o.ValueType.Boolean,e.value=0!==parseInt(e.value,10);break;case"e":e.type=o.ValueType.Error,e.value={error:e.value};break;default:e.type=o.ValueType.Number,e.value=parseFloat(e.value)}else e.styleId?e.type=o.ValueType.Null:e.type=o.ValueType.Merge;return!1}case"f":case"v":case"is":return this.currentNode=void 0,!0;case"t":return this.parser?(this.parser.parseClose(e),!0):(this.currentNode=void 0,!0);case"r":return this.model.value=this.model.value||{},this.model.value.richText=this.model.value.richText||[],this.model.value.richText.push(this.parser.model),this.parser=void 0,this.currentNode=void 0,!0;default:return!!this.parser&&(this.parser.parseClose(e),!0)}}reconcile(e,t){const r=e.styleId&&t.styles&&t.styles.getStyleModel(e.styleId);switch(r&&(e.style=r),void 0!==e.styleId&&(e.styleId=void 0),e.type){case o.ValueType.String:"number"==typeof e.value&&t.sharedStrings&&(e.value=t.sharedStrings.getString(e.value)),e.value.richText&&(e.type=o.ValueType.RichText);break;case o.ValueType.Number:r&&i.isDateFmt(r.numFmt)&&(e.type=o.ValueType.Date,e.value=i.excelToDate(e.value,t.date1904));break;case o.ValueType.Formula:void 0!==e.result&&r&&i.isDateFmt(r.numFmt)&&(e.result=i.excelToDate(e.result,t.date1904)),"shared"===e.shareType&&(e.ref?t.formulae[e.si]=e.address:(e.sharedFormula=t.formulae[e.si],delete e.shareType),delete e.si)}const s=t.hyperlinkMap[e.address];s&&(e.type===o.ValueType.Formula?(e.text=e.result,e.result=void 0):(e.text=e.value,e.value=void 0),e.type=o.ValueType.Hyperlink,e.hyperlink=s);const n=t.commentsMap&&t.commentsMap[e.address];n&&(e.comment=n)}}},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],74:[function(e,t,r){"use strict";const i=e("../../base-xform");t.exports=class extends i{get tag(){return"x14:cfIcon"}render(e,t){e.leafNode(this.tag,{iconSet:t.iconSet,iconId:t.iconId})}parseOpen(e){let{attributes:t}=e;this.model={iconSet:t.iconSet,iconId:i.toIntValue(t.iconId)}}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],75:[function(e,t,r){"use strict";const{v4:i}=e("uuid"),s=e("../../base-xform"),n=e("../../composite-xform"),o=e("./databar-ext-xform"),a=e("./icon-set-ext-xform"),h={"3Triangles":!0,"3Stars":!0,"5Boxes":!0};class l extends n{constructor(){super(),this.map={"x14:dataBar":this.databarXform=new o,"x14:iconSet":this.iconSetXform=new a}}get tag(){return"x14:cfRule"}static isExt(e){return"dataBar"===e.type?o.isExt(e):!("iconSet"!==e.type||!e.custom&&!h[e.iconSet])}prepare(e){l.isExt(e)&&(e.x14Id=`{${i()}}`.toUpperCase())}render(e,t){if(l.isExt(t))switch(t.type){case"dataBar":this.renderDataBar(e,t);break;case"iconSet":this.renderIconSet(e,t)}}renderDataBar(e,t){e.openNode(this.tag,{type:"dataBar",id:t.x14Id}),this.databarXform.render(e,t),e.closeNode()}renderIconSet(e,t){e.openNode(this.tag,{type:"iconSet",priority:t.priority,id:t.x14Id||`{${i()}}`}),this.iconSetXform.render(e,t),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{type:t.type,x14Id:t.id,priority:s.toIntValue(t.priority)}}onParserClose(e,t){Object.assign(this.model,t.model)}}t.exports=l},{"../../base-xform":32,"../../composite-xform":48,"./databar-ext-xform":79,"./icon-set-ext-xform":81,uuid:366}],76:[function(e,t,r){"use strict";const i=e("../../composite-xform"),s=e("./f-ext-xform");t.exports=class extends i{constructor(){super(),this.map={"xm:f":this.fExtXform=new s}}get tag(){return"x14:cfvo"}render(e,t){e.openNode(this.tag,{type:t.type}),void 0!==t.value&&this.fExtXform.render(e,t.value),e.closeNode()}createNewModel(e){return{type:e.attributes.type}}onParserClose(e,t){switch(e){case"xm:f":this.model.value=t.model?parseFloat(t.model):0}}}},{"../../composite-xform":48,"./f-ext-xform":80}],77:[function(e,t,r){"use strict";const i=e("../../composite-xform"),s=e("./sqref-ext-xform"),n=e("./cf-rule-ext-xform");t.exports=class extends i{constructor(){super(),this.map={"xm:sqref":this.sqRef=new s,"x14:cfRule":this.cfRule=new n}}get tag(){return"x14:conditionalFormatting"}prepare(e,t){e.rules.forEach(e=>{this.cfRule.prepare(e,t)})}render(e,t){t.rules.some(n.isExt)&&(e.openNode(this.tag,{"xmlns:xm":"http://schemas.microsoft.com/office/excel/2006/main"}),t.rules.filter(n.isExt).forEach(t=>this.cfRule.render(e,t)),this.sqRef.render(e,t.ref),e.closeNode())}createNewModel(){return{rules:[]}}onParserClose(e,t){switch(e){case"xm:sqref":this.model.ref=t.model;break;case"x14:cfRule":this.model.rules.push(t.model)}}}},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./sqref-ext-xform":82}],78:[function(e,t,r){"use strict";const i=e("../../composite-xform"),s=e("./cf-rule-ext-xform"),n=e("./conditional-formatting-ext-xform");t.exports=class extends i{constructor(){super(),this.map={"x14:conditionalFormatting":this.cfXform=new n}}get tag(){return"x14:conditionalFormattings"}hasContent(e){return void 0===e.hasExtContent&&(e.hasExtContent=e.some(e=>e.rules.some(s.isExt))),e.hasExtContent}prepare(e,t){e.forEach(e=>{this.cfXform.prepare(e,t)})}render(e,t){this.hasContent(t)&&(e.openNode(this.tag),t.forEach(t=>this.cfXform.render(e,t)),e.closeNode())}createNewModel(){return[]}onParserClose(e,t){this.model.push(t.model)}}},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./conditional-formatting-ext-xform":77}],79:[function(e,t,r){"use strict";const i=e("../../base-xform"),s=e("../../composite-xform"),n=e("../../style/color-xform"),o=e("./cfvo-ext-xform");t.exports=class extends s{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new o,"x14:borderColor":this.borderColorXform=new n("x14:borderColor"),"x14:negativeBorderColor":this.negativeBorderColorXform=new n("x14:negativeBorderColor"),"x14:negativeFillColor":this.negativeFillColorXform=new n("x14:negativeFillColor"),"x14:axisColor":this.axisColorXform=new n("x14:axisColor")}}static isExt(e){return!e.gradient}get tag(){return"x14:dataBar"}render(e,t){e.openNode(this.tag,{minLength:i.toIntAttribute(t.minLength,0,!0),maxLength:i.toIntAttribute(t.maxLength,100,!0),border:i.toBoolAttribute(t.border,!1),gradient:i.toBoolAttribute(t.gradient,!0),negativeBarColorSameAsPositive:i.toBoolAttribute(t.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:i.toBoolAttribute(t.negativeBarBorderColorSameAsPositive,!0),axisPosition:i.toAttribute(t.axisPosition,"auto"),direction:i.toAttribute(t.direction,"leftToRight")}),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),this.borderColorXform.render(e,t.borderColor),this.negativeBorderColorXform.render(e,t.negativeBorderColor),this.negativeFillColorXform.render(e,t.negativeFillColor),this.axisColorXform.render(e,t.axisColor),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{cfvo:[],minLength:i.toIntValue(t.minLength,0),maxLength:i.toIntValue(t.maxLength,100),border:i.toBoolValue(t.border,!1),gradient:i.toBoolValue(t.gradient,!0),negativeBarColorSameAsPositive:i.toBoolValue(t.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:i.toBoolValue(t.negativeBarBorderColorSameAsPositive,!0),axisPosition:i.toStringValue(t.axisPosition,"auto"),direction:i.toStringValue(t.direction,"leftToRight")}}onParserClose(e,t){const[,r]=e.split(":");switch(r){case"cfvo":this.model.cfvo.push(t.model);break;default:this.model[r]=t.model}}}},{"../../base-xform":32,"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-ext-xform":76}],80:[function(e,t,r){"use strict";const i=e("../../base-xform");t.exports=class extends i{get tag(){return"xm:f"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],81:[function(e,t,r){"use strict";const i=e("../../base-xform"),s=e("../../composite-xform"),n=e("./cfvo-ext-xform"),o=e("./cf-icon-ext-xform");t.exports=class extends s{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new n,"x14:cfIcon":this.cfIconXform=new o}}get tag(){return"x14:iconSet"}render(e,t){e.openNode(this.tag,{iconSet:i.toStringAttribute(t.iconSet),reverse:i.toBoolAttribute(t.reverse,!1),showValue:i.toBoolAttribute(t.showValue,!0),custom:i.toBoolAttribute(t.icons,!1)}),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),t.icons&&t.icons.forEach((t,r)=>{t.iconId=r,this.cfIconXform.render(e,t)}),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{cfvo:[],iconSet:i.toStringValue(t.iconSet,"3TrafficLights"),reverse:i.toBoolValue(t.reverse,!1),showValue:i.toBoolValue(t.showValue,!0)}}onParserClose(e,t){const[,r]=e.split(":");switch(r){case"cfvo":this.model.cfvo.push(t.model);break;case"cfIcon":this.model.icons||(this.model.icons=[]),this.model.icons.push(t.model);break;default:this.model[r]=t.model}}}},{"../../base-xform":32,"../../composite-xform":48,"./cf-icon-ext-xform":74,"./cfvo-ext-xform":76}],82:[function(e,t,r){"use strict";const i=e("../../base-xform");t.exports=class extends i{get tag(){return"xm:sqref"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],83:[function(e,t,r){"use strict";const i=e("../../base-xform"),s=e("../../composite-xform"),n=e("../../../../doc/range"),o=e("./databar-xform"),a=e("./ext-lst-ref-xform"),h=e("./formula-xform"),l=e("./color-scale-xform"),c=e("./icon-set-xform"),u={"3Triangles":!0,"3Stars":!0,"5Boxes":!0},f=e=>{const{type:t,operator:r}=e;switch(t){case"containsText":case"containsBlanks":case"notContainsBlanks":case"containsErrors":case"notContainsErrors":return{type:"containsText",operator:t};default:return{type:t,operator:r}}};class d extends s{constructor(){super(),this.map={dataBar:this.databarXform=new o,extLst:this.extLstRefXform=new a,formula:this.formulaXform=new h,colorScale:this.colorScaleXform=new l,iconSet:this.iconSetXform=new c}}get tag(){return"cfRule"}static isPrimitive(e){return"iconSet"!==e.type||!e.custom&&!u[e.iconSet]}render(e,t){switch(t.type){case"expression":this.renderExpression(e,t);break;case"cellIs":this.renderCellIs(e,t);break;case"top10":this.renderTop10(e,t);break;case"aboveAverage":this.renderAboveAverage(e,t);break;case"dataBar":this.renderDataBar(e,t);break;case"colorScale":this.renderColorScale(e,t);break;case"iconSet":this.renderIconSet(e,t);break;case"containsText":this.renderText(e,t);break;case"timePeriod":this.renderTimePeriod(e,t)}}renderExpression(e,t){e.openNode(this.tag,{type:"expression",dxfId:t.dxfId,priority:t.priority}),this.formulaXform.render(e,t.formulae[0]),e.closeNode()}renderCellIs(e,t){e.openNode(this.tag,{type:"cellIs",dxfId:t.dxfId,priority:t.priority,operator:t.operator}),t.formulae.forEach(t=>{this.formulaXform.render(e,t)}),e.closeNode()}renderTop10(e,t){e.leafNode(this.tag,{type:"top10",dxfId:t.dxfId,priority:t.priority,percent:i.toBoolAttribute(t.percent,!1),bottom:i.toBoolAttribute(t.bottom,!1),rank:i.toIntValue(t.rank,10,!0)})}renderAboveAverage(e,t){e.leafNode(this.tag,{type:"aboveAverage",dxfId:t.dxfId,priority:t.priority,aboveAverage:i.toBoolAttribute(t.aboveAverage,!0)})}renderDataBar(e,t){e.openNode(this.tag,{type:"dataBar",priority:t.priority}),this.databarXform.render(e,t),this.extLstRefXform.render(e,t),e.closeNode()}renderColorScale(e,t){e.openNode(this.tag,{type:"colorScale",priority:t.priority}),this.colorScaleXform.render(e,t),e.closeNode()}renderIconSet(e,t){d.isPrimitive(t)&&(e.openNode(this.tag,{type:"iconSet",priority:t.priority}),this.iconSetXform.render(e,t),e.closeNode())}renderText(e,t){e.openNode(this.tag,{type:t.operator,dxfId:t.dxfId,priority:t.priority,operator:i.toStringAttribute(t.operator,"containsText")});const r=(e=>{if(e.formulae&&e.formulae[0])return e.formulae[0];const t=new n(e.ref),{tl:r}=t;switch(e.operator){case"containsText":return`NOT(ISERROR(SEARCH("${e.text}",${r})))`;case"containsBlanks":return`LEN(TRIM(${r}))=0`;case"notContainsBlanks":return`LEN(TRIM(${r}))>0`;case"containsErrors":return`ISERROR(${r})`;case"notContainsErrors":return`NOT(ISERROR(${r}))`;default:return}})(t);r&&this.formulaXform.render(e,r),e.closeNode()}renderTimePeriod(e,t){e.openNode(this.tag,{type:"timePeriod",dxfId:t.dxfId,priority:t.priority,timePeriod:t.timePeriod});const r=(e=>{if(e.formulae&&e.formulae[0])return e.formulae[0];const t=new n(e.ref),{tl:r}=t;switch(e.timePeriod){case"thisWeek":return`AND(TODAY()-ROUNDDOWN(${r},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${r},0)-TODAY()<=7-WEEKDAY(TODAY()))`;case"lastWeek":return`AND(TODAY()-ROUNDDOWN(${r},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${r},0)<(WEEKDAY(TODAY())+7))`;case"nextWeek":return`AND(ROUNDDOWN(${r},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${r},0)-TODAY()<(15-WEEKDAY(TODAY())))`;case"yesterday":return`FLOOR(${r},1)=TODAY()-1`;case"today":return`FLOOR(${r},1)=TODAY()`;case"tomorrow":return`FLOOR(${r},1)=TODAY()+1`;case"last7Days":return`AND(TODAY()-FLOOR(${r},1)<=6,FLOOR(${r},1)<=TODAY())`;case"lastMonth":return`AND(MONTH(${r})=MONTH(EDATE(TODAY(),0-1)),YEAR(${r})=YEAR(EDATE(TODAY(),0-1)))`;case"thisMonth":return`AND(MONTH(${r})=MONTH(TODAY()),YEAR(${r})=YEAR(TODAY()))`;case"nextMonth":return`AND(MONTH(${r})=MONTH(EDATE(TODAY(),0+1)),YEAR(${r})=YEAR(EDATE(TODAY(),0+1)))`;default:return}})(t);r&&this.formulaXform.render(e,r),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{...f(t),dxfId:i.toIntValue(t.dxfId),priority:i.toIntValue(t.priority),timePeriod:t.timePeriod,percent:i.toBoolValue(t.percent),bottom:i.toBoolValue(t.bottom),rank:i.toIntValue(t.rank),aboveAverage:i.toBoolValue(t.aboveAverage)}}onParserClose(e,t){switch(e){case"dataBar":case"extLst":case"colorScale":case"iconSet":Object.assign(this.model,t.model);break;case"formula":this.model.formulae=this.model.formulae||[],this.model.formulae.push(t.model)}}}t.exports=d},{"../../../../doc/range":10,"../../base-xform":32,"../../composite-xform":48,"./color-scale-xform":85,"./databar-xform":88,"./ext-lst-ref-xform":89,"./formula-xform":90,"./icon-set-xform":91}],84:[function(e,t,r){"use strict";const i=e("../../base-xform");t.exports=class extends i{get tag(){return"cfvo"}render(e,t){e.leafNode(this.tag,{type:t.type,val:t.value})}parseOpen(e){this.model={type:e.attributes.type,value:i.toFloatValue(e.attributes.val)}}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],85:[function(e,t,r){"use strict";const i=e("../../composite-xform"),s=e("../../style/color-xform"),n=e("./cfvo-xform");t.exports=class extends i{constructor(){super(),this.map={cfvo:this.cfvoXform=new n,color:this.colorXform=new s}}get tag(){return"colorScale"}render(e,t){e.openNode(this.tag),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),t.color.forEach(t=>{this.colorXform.render(e,t)}),e.closeNode()}createNewModel(e){return{cfvo:[],color:[]}}onParserClose(e,t){this.model[e].push(t.model)}}},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],86:[function(e,t,r){"use strict";const i=e("../../composite-xform"),s=e("./cf-rule-xform");t.exports=class extends i{constructor(){super(),this.map={cfRule:new s}}get tag(){return"conditionalFormatting"}render(e,t){t.rules.some(s.isPrimitive)&&(e.openNode(this.tag,{sqref:t.ref}),t.rules.forEach(r=>{s.isPrimitive(r)&&(r.ref=t.ref,this.map.cfRule.render(e,r))}),e.closeNode())}createNewModel(e){let{attributes:t}=e;return{ref:t.sqref,rules:[]}}onParserClose(e,t){this.model.rules.push(t.model)}}},{"../../composite-xform":48,"./cf-rule-xform":83}],87:[function(e,t,r){"use strict";const i=e("../../base-xform"),s=e("./conditional-formatting-xform");t.exports=class extends i{constructor(){super(),this.cfXform=new s}get tag(){return"conditionalFormatting"}reset(){this.model=[]}prepare(e,t){let r=e.reduce((e,t)=>Math.max(e,...t.rules.map(e=>e.priority||0)),1);e.forEach(e=>{e.rules.forEach(e=>{e.priority||(e.priority=r++),e.style&&(e.dxfId=t.styles.addDxfStyle(e.style))})})}render(e,t){t.forEach(t=>{this.cfXform.render(e,t)})}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"conditionalFormatting":return this.parser=this.cfXform,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(!!this.parser.parseClose(e)||(this.model.push(this.parser.model),this.parser=void 0,!1))}reconcile(e,t){e.forEach(e=>{e.rules.forEach(e=>{void 0!==e.dxfId&&(e.style=t.styles.getDxfStyle(e.dxfId),delete e.dxfId)})})}}},{"../../base-xform":32,"./conditional-formatting-xform":86}],88:[function(e,t,r){"use strict";const i=e("../../composite-xform"),s=e("../../style/color-xform"),n=e("./cfvo-xform");t.exports=class extends i{constructor(){super(),this.map={cfvo:this.cfvoXform=new n,color:this.colorXform=new s}}get tag(){return"dataBar"}render(e,t){e.openNode(this.tag),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),this.colorXform.render(e,t.color),e.closeNode()}createNewModel(){return{cfvo:[]}}onParserClose(e,t){switch(e){case"cfvo":this.model.cfvo.push(t.model);break;case"color":this.model.color=t.model}}}},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],89:[function(e,t,r){"use strict";const i=e("../../base-xform"),s=e("../../composite-xform");class n extends i{get tag(){return"x14:id"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}class o extends s{constructor(){super(),this.map={"x14:id":this.idXform=new n}}get tag(){return"ext"}render(e,t){e.openNode(this.tag,{uri:"{B025F937-C7B1-47D3-B67F-A62EFF666E3E}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.idXform.render(e,t.x14Id),e.closeNode()}createNewModel(){return{}}onParserClose(e,t){this.model.x14Id=t.model}}t.exports=class extends s{constructor(){super(),this.map={ext:new o}}get tag(){return"extLst"}render(e,t){e.openNode(this.tag),this.map.ext.render(e,t),e.closeNode()}createNewModel(){return{}}onParserClose(e,t){Object.assign(this.model,t.model)}}},{"../../base-xform":32,"../../composite-xform":48}],90:[function(e,t,r){"use strict";const i=e("../../base-xform");t.exports=class extends i{get tag(){return"formula"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],91:[function(e,t,r){"use strict";const i=e("../../base-xform"),s=e("../../composite-xform"),n=e("./cfvo-xform");t.exports=class extends s{constructor(){super(),this.map={cfvo:this.cfvoXform=new n}}get tag(){return"iconSet"}render(e,t){e.openNode(this.tag,{iconSet:i.toStringAttribute(t.iconSet,"3TrafficLights"),reverse:i.toBoolAttribute(t.reverse,!1),showValue:i.toBoolAttribute(t.showValue,!0)}),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{iconSet:i.toStringValue(t.iconSet,"3TrafficLights"),reverse:i.toBoolValue(t.reverse),showValue:i.toBoolValue(t.showValue),cfvo:[]}}onParserClose(e,t){this.model[e].push(t.model)}}},{"../../base-xform":32,"../../composite-xform":48,"./cfvo-xform":84}],92:[function(e,t,r){"use strict";const i=e("../../../utils/utils"),s=e("../base-xform");t.exports=class extends s{get tag(){return"col"}prepare(e,t){const r=t.styles.addStyleModel(e.style||{});r&&(e.styleId=r)}render(e,t){e.openNode("col"),e.addAttribute("min",t.min),e.addAttribute("max",t.max),t.width&&e.addAttribute("width",t.width),t.styleId&&e.addAttribute("style",t.styleId),t.hidden&&e.addAttribute("hidden","1"),t.bestFit&&e.addAttribute("bestFit","1"),t.outlineLevel&&e.addAttribute("outlineLevel",t.outlineLevel),t.collapsed&&e.addAttribute("collapsed","1"),e.addAttribute("customWidth","1"),e.closeNode()}parseOpen(e){if("col"===e.name){const t=this.model={min:parseInt(e.attributes.min||"0",10),max:parseInt(e.attributes.max||"0",10),width:void 0===e.attributes.width?void 0:parseFloat(e.attributes.width||"0")};return e.attributes.style&&(t.styleId=parseInt(e.attributes.style,10)),i.parseBoolean(e.attributes.hidden)&&(t.hidden=!0),i.parseBoolean(e.attributes.bestFit)&&(t.bestFit=!0),e.attributes.outlineLevel&&(t.outlineLevel=parseInt(e.attributes.outlineLevel,10)),i.parseBoolean(e.attributes.collapsed)&&(t.collapsed=!0),!0}return!1}parseText(){}parseClose(){return!1}reconcile(e,t){e.styleId&&(e.style=t.styles.getStyleModel(e.styleId))}}},{"../../../utils/utils":27,"../base-xform":32}],93:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../../../utils/utils"),n=e("../../../utils/col-cache"),o=e("../base-xform"),a=e("../../../doc/range");function h(e,t,r,i){const s=t[r];void 0!==s?e[r]=s:void 0!==i&&(e[r]=i)}function l(e,t,r,i){const n=t[r];void 0!==n?e[r]=s.parseBoolean(n):void 0!==i&&(e[r]=i)}t.exports=class extends o{get tag(){return"dataValidations"}render(e,t){const r=function(e){const t=i.map(e,(e,t)=>({address:t,dataValidation:e,marked:!1})).sort((e,t)=>i.strcmp(e.address,t.address)),r=i.keyBy(t,"address"),s=(t,r,s)=>{for(let o=0;o{if(!t.marked){const o=n.decodeEx(t.address);if(o.dimensions)return r[o.dimensions].marked=!0,{...t.dataValidation,sqref:t.address};let a=1,h=n.encodeAddress(o.row+a,o.col);for(;e[h]&&i.isEqual(t.dataValidation,e[h]);)a++,h=n.encodeAddress(o.row+a,o.col);let l=1;for(;s(o,a,o.col+l);)l++;for(let e=0;e1||l>1){const e=o.row+(a-1),r=o.col+(l-1);return{...t.dataValidation,sqref:`${t.address}:${n.encodeAddress(e,r)}`}}return{...t.dataValidation,sqref:t.address}}return null}).filter(Boolean)}(t);r.length&&(e.openNode("dataValidations",{count:r.length}),r.forEach(t=>{e.openNode("dataValidation"),"any"!==t.type&&(e.addAttribute("type",t.type),t.operator&&"list"!==t.type&&"between"!==t.operator&&e.addAttribute("operator",t.operator),t.allowBlank&&e.addAttribute("allowBlank","1")),t.showInputMessage&&e.addAttribute("showInputMessage","1"),t.promptTitle&&e.addAttribute("promptTitle",t.promptTitle),t.prompt&&e.addAttribute("prompt",t.prompt),t.showErrorMessage&&e.addAttribute("showErrorMessage","1"),t.errorStyle&&e.addAttribute("errorStyle",t.errorStyle),t.errorTitle&&e.addAttribute("errorTitle",t.errorTitle),t.error&&e.addAttribute("error",t.error),e.addAttribute("sqref",t.sqref),(t.formulae||[]).forEach((r,i)=>{e.openNode("formula"+(i+1)),"date"===t.type?e.writeText(s.dateToExcel(new Date(r))):e.writeText(r),e.closeNode()}),e.closeNode()}),e.closeNode())}parseOpen(e){switch(e.name){case"dataValidations":return this.model={},!0;case"dataValidation":{this._address=e.attributes.sqref;const t={type:e.attributes.type||"any",formulae:[]};switch(e.attributes.type&&l(t,e.attributes,"allowBlank"),l(t,e.attributes,"showInputMessage"),l(t,e.attributes,"showErrorMessage"),t.type){case"any":case"list":case"custom":break;default:h(t,e.attributes,"operator","between")}return h(t,e.attributes,"promptTitle"),h(t,e.attributes,"prompt"),h(t,e.attributes,"errorStyle"),h(t,e.attributes,"errorTitle"),h(t,e.attributes,"error"),this._dataValidation=t,!0}case"formula1":case"formula2":return this._formula=[],!0;default:return!1}}parseText(e){this._formula&&this._formula.push(e)}parseClose(e){switch(e){case"dataValidations":return!1;case"dataValidation":this._dataValidation.formulae&&this._dataValidation.formulae.length||(delete this._dataValidation.formulae,delete this._dataValidation.operator);return(this._address.split(/\s+/g)||[]).forEach(e=>{if(e.includes(":")){new a(e).forEachAddress(e=>{this.model[e]=this._dataValidation})}else this.model[e]=this._dataValidation}),!0;case"formula1":case"formula2":{let e=this._formula.join("");switch(this._dataValidation.type){case"whole":case"textLength":e=parseInt(e,10);break;case"decimal":e=parseFloat(e);break;case"date":e=s.excelToDate(parseFloat(e))}return this._dataValidation.formulae.push(e),this._formula=void 0,!0}default:return!0}}}},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/utils":27,"../base-xform":32}],94:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"dimension"}render(e,t){t&&e.leafNode("dimension",{ref:t})}parseOpen(e){return"dimension"===e.name&&(this.model=e.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],95:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"drawing"}render(e,t){t&&e.leafNode(this.tag,{"r:id":t.rId})}parseOpen(e){switch(e.name){case this.tag:return this.model={rId:e.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],96:[function(e,t,r){"use strict";const i=e("../composite-xform"),s=e("./cf-ext/conditional-formattings-ext-xform");class n extends i{constructor(){super(),this.map={"x14:conditionalFormattings":this.conditionalFormattings=new s}}get tag(){return"ext"}hasContent(e){return this.conditionalFormattings.hasContent(e.conditionalFormattings)}prepare(e,t){this.conditionalFormattings.prepare(e.conditionalFormattings,t)}render(e,t){e.openNode("ext",{uri:"{78C0D931-6437-407d-A8EE-F0AAD7539E65}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.conditionalFormattings.render(e,t.conditionalFormattings),e.closeNode()}createNewModel(){return{}}onParserClose(e,t){this.model[e]=t.model}}t.exports=class extends i{constructor(){super(),this.map={ext:this.ext=new n}}get tag(){return"extLst"}prepare(e,t){this.ext.prepare(e,t)}hasContent(e){return this.ext.hasContent(e)}render(e,t){this.hasContent(t)&&(e.openNode("extLst"),this.ext.render(e,t),e.closeNode())}createNewModel(){return{}}onParserClose(e,t){Object.assign(this.model,t.model)}}},{"../composite-xform":48,"./cf-ext/conditional-formattings-ext-xform":78}],97:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"headerFooter"}render(e,t){if(t){e.addRollback();let r=!1;e.openNode("headerFooter"),t.differentFirst&&(e.addAttribute("differentFirst","1"),r=!0),t.differentOddEven&&(e.addAttribute("differentOddEven","1"),r=!0),t.oddHeader&&"string"==typeof t.oddHeader&&(e.leafNode("oddHeader",null,t.oddHeader),r=!0),t.oddFooter&&"string"==typeof t.oddFooter&&(e.leafNode("oddFooter",null,t.oddFooter),r=!0),t.evenHeader&&"string"==typeof t.evenHeader&&(e.leafNode("evenHeader",null,t.evenHeader),r=!0),t.evenFooter&&"string"==typeof t.evenFooter&&(e.leafNode("evenFooter",null,t.evenFooter),r=!0),t.firstHeader&&"string"==typeof t.firstHeader&&(e.leafNode("firstHeader",null,t.firstHeader),r=!0),t.firstFooter&&"string"==typeof t.firstFooter&&(e.leafNode("firstFooter",null,t.firstFooter),r=!0),r?(e.closeNode(),e.commit()):e.rollback()}}parseOpen(e){switch(e.name){case"headerFooter":return this.model={},e.attributes.differentFirst&&(this.model.differentFirst=1===parseInt(e.attributes.differentFirst,0)),e.attributes.differentOddEven&&(this.model.differentOddEven=1===parseInt(e.attributes.differentOddEven,0)),!0;case"oddHeader":return this.currentNode="oddHeader",!0;case"oddFooter":return this.currentNode="oddFooter",!0;case"evenHeader":return this.currentNode="evenHeader",!0;case"evenFooter":return this.currentNode="evenFooter",!0;case"firstHeader":return this.currentNode="firstHeader",!0;case"firstFooter":return this.currentNode="firstFooter",!0;default:return!1}}parseText(e){switch(this.currentNode){case"oddHeader":this.model.oddHeader=e;break;case"oddFooter":this.model.oddFooter=e;break;case"evenHeader":this.model.evenHeader=e;break;case"evenFooter":this.model.evenFooter=e;break;case"firstHeader":this.model.firstHeader=e;break;case"firstFooter":this.model.firstFooter=e}}parseClose(){switch(this.currentNode){case"oddHeader":case"oddFooter":case"evenHeader":case"evenFooter":case"firstHeader":case"firstFooter":return this.currentNode=void 0,!0;default:return!1}}}},{"../base-xform":32}],98:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"hyperlink"}render(e,t){this.isInternalLink(t)?e.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip,location:t.target}):e.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip})}parseOpen(e){return"hyperlink"===e.name&&(this.model={address:e.attributes.ref,rId:e.attributes["r:id"],tooltip:e.attributes.tooltip},e.attributes.location&&(this.model.target=e.attributes.location),!0)}parseText(){}parseClose(){return!1}isInternalLink(e){return e.target&&/^[^!]+![a-zA-Z]+[\d]+$/.test(e.target)}}},{"../base-xform":32}],99:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"mergeCell"}render(e,t){e.leafNode("mergeCell",{ref:t})}parseOpen(e){return"mergeCell"===e.name&&(this.model=e.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],100:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../../../doc/range"),n=e("../../../utils/col-cache"),o=e("../../../doc/enums");t.exports=class{constructor(){this.merges={}}add(e){if(this.merges[e.master])this.merges[e.master].expandToAddress(e.address);else{const t=`${e.master}:${e.address}`;this.merges[e.master]=new s(t)}}get mergeCells(){return i.map(this.merges,e=>e.range)}reconcile(e,t){i.each(e,e=>{const r=n.decode(e);for(let e=r.top;e<=r.bottom;e++){const i=t[e-1];for(let t=r.left;t<=r.right;t++){const s=i.cells[t-1];s?s.type===o.ValueType.Merge&&(s.master=r.tl):i.cells[t]={type:o.ValueType.Null,address:n.encodeAddress(e,t)}}}})}getMasterAddress(e){const t=this.hash[e];return t&&t.tl}}},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26}],101:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e=>void 0!==e;t.exports=class extends i{get tag(){return"outlinePr"}render(e,t){return!(!t||!s(t.summaryBelow)&&!s(t.summaryRight))&&(e.leafNode(this.tag,{summaryBelow:s(t.summaryBelow)?Number(t.summaryBelow):void 0,summaryRight:s(t.summaryRight)?Number(t.summaryRight):void 0}),!0)}parseOpen(e){return e.name===this.tag&&(this.model={summaryBelow:s(e.attributes.summaryBelow)?Boolean(Number(e.attributes.summaryBelow)):void 0,summaryRight:s(e.attributes.summaryRight)?Boolean(Number(e.attributes.summaryRight)):void 0},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],102:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"brk"}render(e,t){e.leafNode("brk",t)}parseOpen(e){return"brk"===e.name&&(this.model=e.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],103:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../base-xform");t.exports=class extends s{get tag(){return"pageMargins"}render(e,t){if(t){const r={left:t.left,right:t.right,top:t.top,bottom:t.bottom,header:t.header,footer:t.footer};i.some(r,e=>void 0!==e)&&e.leafNode(this.tag,r)}}parseOpen(e){switch(e.name){case this.tag:return this.model={left:parseFloat(e.attributes.left||.7),right:parseFloat(e.attributes.right||.7),top:parseFloat(e.attributes.top||.75),bottom:parseFloat(e.attributes.bottom||.75),header:parseFloat(e.attributes.header||.3),footer:parseFloat(e.attributes.footer||.3)},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],104:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"pageSetUpPr"}render(e,t){return!(!t||!t.fitToPage)&&(e.leafNode(this.tag,{fitToPage:t.fitToPage?"1":void 0}),!0)}parseOpen(e){return e.name===this.tag&&(this.model={fitToPage:"1"===e.attributes.fitToPage},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],105:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../base-xform");function n(e){return e?"1":void 0}function o(e){switch(e){case"overThenDown":return e;default:return}}function a(e){switch(e){case"atEnd":case"asDisplyed":return e;default:return}}function h(e){switch(e){case"dash":case"blank":case"NA":return e;default:return}}t.exports=class extends s{get tag(){return"pageSetup"}render(e,t){if(t){const r={paperSize:t.paperSize,orientation:t.orientation,horizontalDpi:t.horizontalDpi,verticalDpi:t.verticalDpi,pageOrder:o(t.pageOrder),blackAndWhite:n(t.blackAndWhite),draft:n(t.draft),cellComments:a(t.cellComments),errors:h(t.errors),scale:t.scale,fitToWidth:t.fitToWidth,fitToHeight:t.fitToHeight,firstPageNumber:t.firstPageNumber,useFirstPageNumber:n(t.firstPageNumber),usePrinterDefaults:n(t.usePrinterDefaults),copies:t.copies};i.some(r,e=>void 0!==e)&&e.leafNode(this.tag,r)}}parseOpen(e){switch(e.name){case this.tag:return this.model={paperSize:(t=e.attributes.paperSize,void 0!==t?parseInt(t,10):void 0),orientation:e.attributes.orientation||"portrait",horizontalDpi:parseInt(e.attributes.horizontalDpi||"4294967295",10),verticalDpi:parseInt(e.attributes.verticalDpi||"4294967295",10),pageOrder:e.attributes.pageOrder||"downThenOver",blackAndWhite:"1"===e.attributes.blackAndWhite,draft:"1"===e.attributes.draft,cellComments:e.attributes.cellComments||"None",errors:e.attributes.errors||"displayed",scale:parseInt(e.attributes.scale||"100",10),fitToWidth:parseInt(e.attributes.fitToWidth||"1",10),fitToHeight:parseInt(e.attributes.fitToHeight||"1",10),firstPageNumber:parseInt(e.attributes.firstPageNumber||"1",10),useFirstPageNumber:"1"===e.attributes.useFirstPageNumber,usePrinterDefaults:"1"===e.attributes.usePrinterDefaults,copies:parseInt(e.attributes.copies||"1",10)},!0;default:return!1}var t}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],106:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"picture"}render(e,t){t&&e.leafNode(this.tag,{"r:id":t.rId})}parseOpen(e){switch(e.name){case this.tag:return this.model={rId:e.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],107:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../base-xform");function n(e){return e?"1":void 0}t.exports=class extends s{get tag(){return"printOptions"}render(e,t){if(t){const r={headings:n(t.showRowColHeaders),gridLines:n(t.showGridLines),horizontalCentered:n(t.horizontalCentered),verticalCentered:n(t.verticalCentered)};i.some(r,e=>void 0!==e)&&e.leafNode(this.tag,r)}}parseOpen(e){switch(e.name){case this.tag:return this.model={showRowColHeaders:"1"===e.attributes.headings,showGridLines:"1"===e.attributes.gridLines,horizontalCentered:"1"===e.attributes.horizontalCentered,verticalCentered:"1"===e.attributes.verticalCentered},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],108:[function(e,t,r){"use strict";const i=e("./page-breaks-xform"),s=e("../list-xform");t.exports=class extends s{constructor(){super({tag:"rowBreaks",count:!0,childXform:new i})}render(e,t){if(t&&t.length){e.openNode(this.tag,this.$),this.count&&(e.addAttribute(this.$count,t.length),e.addAttribute("manualBreakCount",t.length));const{childXform:r}=this;t.forEach(t=>{r.render(e,t)}),e.closeNode()}else this.empty&&e.leafNode(this.tag)}}},{"../list-xform":71,"./page-breaks-xform":102}],109:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("../../../utils/utils"),n=e("./cell-xform");t.exports=class extends i{constructor(e){super(),this.maxItems=e&&e.maxItems,this.map={c:new n}}get tag(){return"row"}prepare(e,t){const r=t.styles.addStyleModel(e.style);r&&(e.styleId=r);const i=this.map.c;e.cells.forEach(e=>{i.prepare(e,t)})}render(e,t,r){e.openNode("row"),e.addAttribute("r",t.number),t.height&&(e.addAttribute("ht",t.height),e.addAttribute("customHeight","1")),t.hidden&&e.addAttribute("hidden","1"),t.min>0&&t.max>0&&t.min<=t.max&&e.addAttribute("spans",`${t.min}:${t.max}`),t.styleId&&(e.addAttribute("s",t.styleId),e.addAttribute("customFormat","1")),e.addAttribute("x14ac:dyDescent","0.25"),t.outlineLevel&&e.addAttribute("outlineLevel",t.outlineLevel),t.collapsed&&e.addAttribute("collapsed","1");const i=this.map.c;t.cells.forEach(t=>{i.render(e,t,r)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;if("row"===e.name){this.numRowsSeen+=1;const t=e.attributes.spans?e.attributes.spans.split(":").map(e=>parseInt(e,10)):[void 0,void 0],r=this.model={number:parseInt(e.attributes.r,10),min:t[0],max:t[1],cells:[]};return e.attributes.s&&(r.styleId=parseInt(e.attributes.s,10)),s.parseBoolean(e.attributes.hidden)&&(r.hidden=!0),s.parseBoolean(e.attributes.bestFit)&&(r.bestFit=!0),e.attributes.ht&&(r.height=parseFloat(e.attributes.ht)),e.attributes.outlineLevel&&(r.outlineLevel=parseInt(e.attributes.outlineLevel,10)),s.parseBoolean(e.attributes.collapsed)&&(r.collapsed=!0),!0}return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(`Max column count (${this.maxItems}) exceeded`);this.parser=void 0}return!0}return!1}reconcile(e,t){e.style=e.styleId?t.styles.getStyleModel(e.styleId):{},void 0!==e.styleId&&(e.styleId=void 0);const r=this.map.c;e.cells.forEach(e=>{r.reconcile(e,t)})}}},{"../../../utils/utils":27,"../base-xform":32,"./cell-xform":73}],110:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../base-xform");t.exports=class extends s{get tag(){return"sheetFormatPr"}render(e,t){if(t){const r={defaultRowHeight:t.defaultRowHeight,outlineLevelRow:t.outlineLevelRow,outlineLevelCol:t.outlineLevelCol,"x14ac:dyDescent":t.dyDescent};t.defaultColWidth&&(r.defaultColWidth=t.defaultColWidth),t.defaultRowHeight&&15===t.defaultRowHeight||(r.customHeight="1"),i.some(r,e=>void 0!==e)&&e.leafNode("sheetFormatPr",r)}}parseOpen(e){return"sheetFormatPr"===e.name&&(this.model={defaultRowHeight:parseFloat(e.attributes.defaultRowHeight||"0"),dyDescent:parseFloat(e.attributes["x14ac:dyDescent"]||"0"),outlineLevelRow:parseInt(e.attributes.outlineLevelRow||"0",10),outlineLevelCol:parseInt(e.attributes.outlineLevelCol||"0",10)},e.attributes.defaultColWidth&&(this.model.defaultColWidth=parseFloat(e.attributes.defaultColWidth)),!0)}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],111:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("../style/color-xform"),n=e("./page-setup-properties-xform"),o=e("./outline-properties-xform");t.exports=class extends i{constructor(){super(),this.map={tabColor:new s("tabColor"),pageSetUpPr:new n,outlinePr:new o}}get tag(){return"sheetPr"}render(e,t){if(t){e.addRollback(),e.openNode("sheetPr");let r=!1;r=this.map.tabColor.render(e,t.tabColor)||r,r=this.map.pageSetUpPr.render(e,t.pageSetup)||r,r=this.map.outlinePr.render(e,t.outlineProperties)||r,r?(e.closeNode(),e.commit()):e.rollback()}}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag?(this.reset(),!0):!!this.map[e.name]&&(this.parser=this.map[e.name],this.parser.parseOpen(e),!0)}parseText(e){return!!this.parser&&(this.parser.parseText(e),!0)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model?(this.model={},this.map.tabColor.model&&(this.model.tabColor=this.map.tabColor.model),this.map.pageSetUpPr.model&&(this.model.pageSetup=this.map.pageSetUpPr.model),this.map.outlinePr.model&&(this.model.outlineProperties=this.map.outlinePr.model)):this.model=null,!1)}}},{"../base-xform":32,"../style/color-xform":128,"./outline-properties-xform":101,"./page-setup-properties-xform":104}],112:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../base-xform");function n(e,t){return e?t:void 0}function o(e,t){return e===t||void 0}t.exports=class extends s{get tag(){return"sheetProtection"}render(e,t){if(t){const r={sheet:n(t.sheet,"1"),selectLockedCells:!1===t.selectLockedCells?"1":void 0,selectUnlockedCells:!1===t.selectUnlockedCells?"1":void 0,formatCells:n(t.formatCells,"0"),formatColumns:n(t.formatColumns,"0"),formatRows:n(t.formatRows,"0"),insertColumns:n(t.insertColumns,"0"),insertRows:n(t.insertRows,"0"),insertHyperlinks:n(t.insertHyperlinks,"0"),deleteColumns:n(t.deleteColumns,"0"),deleteRows:n(t.deleteRows,"0"),sort:n(t.sort,"0"),autoFilter:n(t.autoFilter,"0"),pivotTables:n(t.pivotTables,"0")};t.sheet&&(r.algorithmName=t.algorithmName,r.hashValue=t.hashValue,r.saltValue=t.saltValue,r.spinCount=t.spinCount,r.objects=n(!1===t.objects,"1"),r.scenarios=n(!1===t.scenarios,"1")),i.some(r,e=>void 0!==e)&&e.leafNode(this.tag,r)}}parseOpen(e){switch(e.name){case this.tag:return this.model={sheet:o(e.attributes.sheet,"1"),objects:"1"!==e.attributes.objects&&void 0,scenarios:"1"!==e.attributes.scenarios&&void 0,selectLockedCells:"1"!==e.attributes.selectLockedCells&&void 0,selectUnlockedCells:"1"!==e.attributes.selectUnlockedCells&&void 0,formatCells:o(e.attributes.formatCells,"0"),formatColumns:o(e.attributes.formatColumns,"0"),formatRows:o(e.attributes.formatRows,"0"),insertColumns:o(e.attributes.insertColumns,"0"),insertRows:o(e.attributes.insertRows,"0"),insertHyperlinks:o(e.attributes.insertHyperlinks,"0"),deleteColumns:o(e.attributes.deleteColumns,"0"),deleteRows:o(e.attributes.deleteRows,"0"),sort:o(e.attributes.sort,"0"),autoFilter:o(e.attributes.autoFilter,"0"),pivotTables:o(e.attributes.pivotTables,"0")},e.attributes.algorithmName&&(this.model.algorithmName=e.attributes.algorithmName,this.model.hashValue=e.attributes.hashValue,this.model.saltValue=e.attributes.saltValue,this.model.spinCount=parseInt(e.attributes.spinCount,10)),!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],113:[function(e,t,r){"use strict";const i=e("../../../utils/col-cache"),s=e("../base-xform"),n={frozen:"frozen",frozenSplit:"frozen",split:"split"};t.exports=class extends s{get tag(){return"sheetView"}prepare(e){switch(e.state){case"frozen":case"split":break;default:e.state="normal"}}render(e,t){e.openNode("sheetView",{workbookViewId:t.workbookViewId||0});const r=function(t,r,i){i&&e.addAttribute(t,r)};let s,n,o,a;switch(r("rightToLeft","1",!0===t.rightToLeft),r("tabSelected","1",t.tabSelected),r("showRuler","0",!1===t.showRuler),r("showRowColHeaders","0",!1===t.showRowColHeaders),r("showGridLines","0",!1===t.showGridLines),r("zoomScale",t.zoomScale,t.zoomScale),r("zoomScaleNormal",t.zoomScaleNormal,t.zoomScaleNormal),r("view",t.style,t.style),t.state){case"frozen":n=t.xSplit||0,o=t.ySplit||0,s=t.topLeftCell||i.getAddress(o+1,n+1).address,a=(t.xSplit&&t.ySplit?"bottomRight":t.xSplit&&"topRight")||"bottomLeft",e.leafNode("pane",{xSplit:t.xSplit||void 0,ySplit:t.ySplit||void 0,topLeftCell:s,activePane:a,state:"frozen"}),e.leafNode("selection",{pane:a,activeCell:t.activeCell,sqref:t.activeCell});break;case"split":"topLeft"===t.activePane&&(t.activePane=void 0),e.leafNode("pane",{xSplit:t.xSplit||void 0,ySplit:t.ySplit||void 0,topLeftCell:t.topLeftCell,activePane:t.activePane}),e.leafNode("selection",{pane:t.activePane,activeCell:t.activeCell,sqref:t.activeCell});break;case"normal":t.activeCell&&e.leafNode("selection",{activeCell:t.activeCell,sqref:t.activeCell})}e.closeNode()}parseOpen(e){switch(e.name){case"sheetView":return this.sheetView={workbookViewId:parseInt(e.attributes.workbookViewId,10),rightToLeft:"1"===e.attributes.rightToLeft,tabSelected:"1"===e.attributes.tabSelected,showRuler:!("0"===e.attributes.showRuler),showRowColHeaders:!("0"===e.attributes.showRowColHeaders),showGridLines:!("0"===e.attributes.showGridLines),zoomScale:parseInt(e.attributes.zoomScale||"100",10),zoomScaleNormal:parseInt(e.attributes.zoomScaleNormal||"100",10),style:e.attributes.view},this.pane=void 0,this.selections={},!0;case"pane":return this.pane={xSplit:parseInt(e.attributes.xSplit||"0",10),ySplit:parseInt(e.attributes.ySplit||"0",10),topLeftCell:e.attributes.topLeftCell,activePane:e.attributes.activePane||"topLeft",state:e.attributes.state},!0;case"selection":{const t=e.attributes.pane||"topLeft";return this.selections[t]={pane:t,activeCell:e.attributes.activeCell},!0}default:return!1}}parseText(){}parseClose(e){let t,r;switch(e){case"sheetView":return this.sheetView&&this.pane?(t=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:n[this.pane.state]||"split",xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},"split"===this.model.state&&(t.activePane=this.pane.activePane),r=this.selections[this.pane.activePane],r&&r.activeCell&&(t.activeCell=r.activeCell),this.sheetView.style&&(t.style=this.sheetView.style)):(t=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:"normal",showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},r=this.selections.topLeft,r&&r.activeCell&&(t.activeCell=r.activeCell),this.sheetView.style&&(t.style=this.sheetView.style)),!1;default:return!0}}reconcile(){}}},{"../../../utils/col-cache":19,"../base-xform":32}],114:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"tablePart"}render(e,t){t&&e.leafNode(this.tag,{"r:id":t.rId})}parseOpen(e){switch(e.name){case this.tag:return this.model={rId:e.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],115:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../../../utils/col-cache"),n=e("../../../utils/xml-stream"),o=e("../../rel-type"),a=e("./merges"),h=e("../base-xform"),l=e("../list-xform"),c=e("./row-xform"),u=e("./col-xform"),f=e("./dimension-xform"),d=e("./hyperlink-xform"),p=e("./merge-cell-xform"),m=e("./data-validations-xform"),b=e("./sheet-properties-xform"),g=e("./sheet-format-properties-xform"),y=e("./sheet-view-xform"),v=e("./sheet-protection-xform"),w=e("./page-margins-xform"),_=e("./page-setup-xform"),x=e("./print-options-xform"),S=e("./auto-filter-xform"),k=e("./picture-xform"),M=e("./drawing-xform"),C=e("./table-part-xform"),T=e("./row-breaks-xform"),E=e("./header-footer-xform"),A=e("./cf/conditional-formattings-xform"),R=e("./ext-lst-xform"),O=(e,t)=>{if(!t||!t.length)return e;if(!e||!e.length)return t;const r={},i={};return e.forEach(e=>{r[e.ref]=e,e.rules.forEach(e=>{const{x14Id:t}=e;t&&(i[t]=e)})}),t.forEach(t=>{t.rules.forEach(s=>{const n=i[s.x14Id];n?((e,t)=>{Object.keys(t).forEach(r=>{const i=e[r],s=t[r];void 0===i&&void 0!==s&&(e[r]=s)})})(n,s):r[t.ref]?r[t.ref].rules.push(s):e.push({ref:t.ref,rules:[s]})})}),e};class I extends h{constructor(e){super();const{maxRows:t,maxCols:r,ignoreNodes:i}=e||{};this.ignoreNodes=i||[],this.map={sheetPr:new b,dimension:new f,sheetViews:new l({tag:"sheetViews",count:!1,childXform:new y}),sheetFormatPr:new g,cols:new l({tag:"cols",count:!1,childXform:new u}),sheetData:new l({tag:"sheetData",count:!1,empty:!0,childXform:new c({maxItems:r}),maxItems:t}),autoFilter:new S,mergeCells:new l({tag:"mergeCells",count:!0,childXform:new p}),rowBreaks:new T,hyperlinks:new l({tag:"hyperlinks",count:!1,childXform:new d}),pageMargins:new w,dataValidations:new m,pageSetup:new _,headerFooter:new E,printOptions:new x,picture:new k,drawing:new M,sheetProtection:new v,tableParts:new l({tag:"tableParts",count:!0,childXform:new C}),conditionalFormatting:new A,extLst:new R}}prepare(e,t){t.merges=new a,e.hyperlinks=t.hyperlinks=[],e.comments=t.comments=[],t.formulae={},t.siFormulae=0,this.map.cols.prepare(e.cols,t),this.map.sheetData.prepare(e.rows,t),this.map.conditionalFormatting.prepare(e.conditionalFormattings,t),e.mergeCells=t.merges.mergeCells;const r=e.rels=[];function i(e){return"rId"+(e.length+1)}if(e.hyperlinks.forEach(e=>{const t=i(r);e.rId=t,r.push({Id:t,Type:o.Hyperlink,Target:e.target,TargetMode:"External"})}),e.comments.length>0){const n={Id:i(r),Type:o.Comments,Target:`../comments${e.id}.xml`};r.push(n);const a={Id:i(r),Type:o.VmlDrawing,Target:`../drawings/vmlDrawing${e.id}.vml`};r.push(a),e.comments.forEach(e=>{e.refAddress=s.decodeAddress(e.ref)}),t.commentRefs.push({commentName:"comments"+e.id,vmlDrawing:"vmlDrawing"+e.id})}const n=[];let h;e.media.forEach(s=>{if("background"===s.type){const n=i(r);h=t.media[s.imageId],r.push({Id:n,Type:o.Image,Target:`../media/${h.name}.${h.extension}`}),e.background={rId:n},e.image=t.media[s.imageId]}else if("image"===s.type){let{drawing:a}=e;h=t.media[s.imageId],a||(a=e.drawing={rId:i(r),name:"drawing"+ ++t.drawingsCount,anchors:[],rels:[]},t.drawings.push(a),r.push({Id:a.rId,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",Target:`../drawings/${a.name}.xml`}));let l=this.preImageId===s.imageId?n[s.imageId]:n[a.rels.length];l||(l=i(a.rels),n[a.rels.length]=l,a.rels.push({Id:l,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:`../media/${h.name}.${h.extension}`}));const c={picture:{rId:l},range:s.range};if(s.hyperlinks&&s.hyperlinks.hyperlink){const e=i(a.rels);n[a.rels.length]=e,c.picture.hyperlinks={tooltip:s.hyperlinks.tooltip,rId:e},a.rels.push({Id:e,Type:o.Hyperlink,Target:s.hyperlinks.hyperlink,TargetMode:"External"})}this.preImageId=s.imageId,a.anchors.push(c)}}),e.tables.forEach(e=>{const s=i(r);e.rId=s,r.push({Id:s,Type:o.Table,Target:"../tables/"+e.target}),e.columns.forEach(e=>{const{style:r}=e;r&&(e.dxfId=t.styles.addDxfStyle(r))})}),this.map.extLst.prepare(e,t)}render(e,t){e.openXml(n.StdDocAttributes),e.openNode("worksheet",I.WORKSHEET_ATTRIBUTES);const r=t.properties?{defaultRowHeight:t.properties.defaultRowHeight,dyDescent:t.properties.dyDescent,outlineLevelCol:t.properties.outlineLevelCol,outlineLevelRow:t.properties.outlineLevelRow}:void 0;t.properties&&t.properties.defaultColWidth&&(r.defaultColWidth=t.properties.defaultColWidth);const i={outlineProperties:t.properties&&t.properties.outlineProperties,tabColor:t.properties&&t.properties.tabColor,pageSetup:t.pageSetup&&t.pageSetup.fitToPage?{fitToPage:t.pageSetup.fitToPage}:void 0},s=t.pageSetup&&t.pageSetup.margins,a={showRowColHeaders:t.pageSetup&&t.pageSetup.showRowColHeaders,showGridLines:t.pageSetup&&t.pageSetup.showGridLines,horizontalCentered:t.pageSetup&&t.pageSetup.horizontalCentered,verticalCentered:t.pageSetup&&t.pageSetup.verticalCentered},h=t.sheetProtection;this.map.sheetPr.render(e,i),this.map.dimension.render(e,t.dimensions),this.map.sheetViews.render(e,t.views),this.map.sheetFormatPr.render(e,r),this.map.cols.render(e,t.cols),this.map.sheetData.render(e,t.rows),this.map.sheetProtection.render(e,h),this.map.autoFilter.render(e,t.autoFilter),this.map.mergeCells.render(e,t.mergeCells),this.map.conditionalFormatting.render(e,t.conditionalFormattings),this.map.dataValidations.render(e,t.dataValidations),this.map.hyperlinks.render(e,t.hyperlinks),this.map.printOptions.render(e,a),this.map.pageMargins.render(e,s),this.map.pageSetup.render(e,t.pageSetup),this.map.headerFooter.render(e,t.headerFooter),this.map.rowBreaks.render(e,t.rowBreaks),this.map.drawing.render(e,t.drawing),this.map.picture.render(e,t.background),this.map.tableParts.render(e,t.tables),this.map.extLst.render(e,t),t.rels&&t.rels.forEach(t=>{t.Type===o.VmlDrawing&&e.leafNode("legacyDrawing",{"r:id":t.Id})}),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):"worksheet"===e.name?(i.each(this.map,e=>{e.reset()}),!0):(this.map[e.name]&&!this.ignoreNodes.includes(e.name)&&(this.parser=this.map[e.name],this.parser.parseOpen(e)),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"worksheet":{const e=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&(e.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&(e.outlineProperties=this.map.sheetPr.model.outlineProperties);const t={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},r=Object.assign(t,this.map.pageSetup.model,this.map.printOptions.model),i=O(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model["x14:conditionalFormattings"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:e,views:this.map.sheetViews.model,pageSetup:r,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:i},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1}default:return!0}}reconcile(e,t){const r=(e.relationships||[]).reduce((r,i)=>{if(r[i.Id]=i,i.Type===o.Comments&&(e.comments=t.comments[i.Target].comments),i.Type===o.VmlDrawing&&e.comments&&e.comments.length){const r=t.vmlDrawings[i.Target].comments;e.comments.forEach((e,t)=>{e.note=Object.assign({},e.note,r[t])})}return r},{});if(t.commentsMap=(e.comments||[]).reduce((e,t)=>(t.ref&&(e[t.ref]=t),e),{}),t.hyperlinkMap=(e.hyperlinks||[]).reduce((e,t)=>(t.rId&&(e[t.address]=r[t.rId].Target),e),{}),t.formulae={},e.rows=e.rows&&e.rows.filter(Boolean)||[],e.rows.forEach(e=>{e.cells=e.cells&&e.cells.filter(Boolean)||[]}),this.map.cols.reconcile(e.cols,t),this.map.sheetData.reconcile(e.rows,t),this.map.conditionalFormatting.reconcile(e.conditionalFormattings,t),e.media=[],e.drawing){const i=r[e.drawing.rId].Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(i){const r=i[1];t.drawings[r].anchors.forEach(t=>{if(t.medium){const r={type:"image",imageId:t.medium.index,range:t.range,hyperlinks:t.picture.hyperlinks};e.media.push(r)}})}}const i=e.background&&r[e.background.rId];if(i){const r=i.Target.split("/media/")[1],s=t.mediaIndex&&t.mediaIndex[r];void 0!==s&&e.media.push({type:"background",imageId:s})}e.tables=(e.tables||[]).map(e=>{const i=r[e.rId];return t.tables[i.Target]}),delete e.relationships,delete e.hyperlinks,delete e.comments}}I.WORKSHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"},t.exports=I},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../../rel-type":31,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":72,"./cf/conditional-formattings-xform":87,"./col-xform":92,"./data-validations-xform":93,"./dimension-xform":94,"./drawing-xform":95,"./ext-lst-xform":96,"./header-footer-xform":97,"./hyperlink-xform":98,"./merge-cell-xform":99,"./merges":100,"./page-margins-xform":103,"./page-setup-xform":105,"./picture-xform":106,"./print-options-xform":107,"./row-breaks-xform":108,"./row-xform":109,"./sheet-format-properties-xform":110,"./sheet-properties-xform":111,"./sheet-protection-xform":112,"./sheet-view-xform":113,"./table-part-xform":114}],116:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{constructor(e){super(),this.tag=e.tag,this.attr=e.attr}render(e,t){t&&(e.openNode(this.tag),e.closeNode())}parseOpen(e){e.name===this.tag&&(this.model=!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],117:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{constructor(e){super(),this.tag=e.tag,this.attr=e.attr,this.attrs=e.attrs,this._format=e.format||function(e){try{return Number.isNaN(e.getTime())?"":e.toISOString()}catch(e){return""}},this._parse=e.parse||function(e){return new Date(e)}}render(e,t){t&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,this._format(t)):e.writeText(this._format(t)),e.closeNode())}parseOpen(e){e.name===this.tag&&(this.attr?this.model=this._parse(e.attributes[this.attr]):this.text=[])}parseText(e){this.attr||this.text.push(e)}parseClose(){return this.attr||(this.model=this._parse(this.text.join(""))),!1}}},{"../base-xform":32}],118:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{constructor(e){super(),this.tag=e.tag,this.attr=e.attr,this.attrs=e.attrs,this.zero=e.zero}render(e,t){(t||this.zero)&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,t):e.writeText(t),e.closeNode())}parseOpen(e){return e.name===this.tag&&(this.attr?this.model=parseInt(e.attributes[this.attr],10):this.text=[],!0)}parseText(e){this.attr||this.text.push(e)}parseClose(){return this.attr||(this.model=parseInt(this.text.join("")||0,10)),!1}}},{"../base-xform":32}],119:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{constructor(e){super(),this.tag=e.tag,this.attr=e.attr,this.attrs=e.attrs}render(e,t){void 0!==t&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,t):e.writeText(t),e.closeNode())}parseOpen(e){e.name===this.tag&&(this.attr?this.model=e.attributes[this.attr]:this.text=[])}parseText(e){this.attr||this.text.push(e)}parseClose(){return this.attr||(this.model=this.text.join("")),!1}}},{"../base-xform":32}],120:[function(e,t,r){"use strict";const i=e("./base-xform"),s=e("../../utils/xml-stream");t.exports=class extends i{constructor(e){super(),this._model=e}render(e){if(!this._xml){const e=new s;!function e(t,r){t.openNode(r.tag,r.$),r.c&&r.c.forEach(r=>{e(t,r)}),r.t&&t.writeText(r.t),t.closeNode()}(e,this._model),this._xml=e.xml}e.writeXml(this._xml)}parseOpen(){return!0}parseText(){}parseClose(e){switch(e){case this._model.tag:return!1;default:return!0}}}},{"../../utils/xml-stream":28,"./base-xform":32}],121:[function(e,t,r){"use strict";const i=e("./text-xform"),s=e("./rich-text-xform"),n=e("../base-xform");t.exports=class extends n{constructor(){super(),this.map={r:new s,t:new i}}get tag(){return"rPh"}render(e,t){if(e.openNode(this.tag,{sb:t.sb||0,eb:t.eb||0}),t&&t.hasOwnProperty("richText")&&t.richText){const{r:r}=this.map;t.richText.forEach(t=>{r.render(e,t)})}else t&&this.map.t.render(e,t.text);e.closeNode()}parseOpen(e){const{name:t}=e;return this.parser?(this.parser.parseOpen(e),!0):t===this.tag?(this.model={sb:parseInt(e.attributes.sb,10),eb:parseInt(e.attributes.eb,10)},!0):(this.parser=this.map[t],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)){switch(e){case"r":{let e=this.model.richText;e||(e=this.model.richText=[]),e.push(this.parser.model);break}case"t":this.model.text=this.parser.model}this.parser=void 0}return!0}switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32,"./rich-text-xform":122,"./text-xform":125}],122:[function(e,t,r){"use strict";const i=e("./text-xform"),s=e("../style/font-xform"),n=e("../base-xform");class o extends n{constructor(e){super(),this.model=e}get tag(){return"r"}get textXform(){return this._textXform||(this._textXform=new i)}get fontXform(){return this._fontXform||(this._fontXform=new s(o.FONT_OPTIONS))}render(e,t){t=t||this.model,e.openNode("r"),t.font&&this.fontXform.render(e,t.font),this.textXform.render(e,t.text),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"r":return this.model={},!0;case"t":return this.parser=this.textXform,this.parser.parseOpen(e),!0;case"rPr":return this.parser=this.fontXform,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){switch(e){case"r":return!1;case"t":return this.model.text=this.parser.model,this.parser=void 0,!0;case"rPr":return this.model.font=this.parser.model,this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}}o.FONT_OPTIONS={tagName:"rPr",fontNameTag:"rFont"},t.exports=o},{"../base-xform":32,"../style/font-xform":131,"./text-xform":125}],123:[function(e,t,r){"use strict";const i=e("./text-xform"),s=e("./rich-text-xform"),n=e("./phonetic-text-xform"),o=e("../base-xform");t.exports=class extends o{constructor(e){super(),this.model=e,this.map={r:new s,t:new i,rPh:new n}}get tag(){return"si"}render(e,t){e.openNode(this.tag),t&&t.hasOwnProperty("richText")&&t.richText?t.richText.length?t.richText.forEach(t=>{this.map.r.render(e,t)}):this.map.t.render(e,""):null!=t&&this.map.t.render(e,t),e.closeNode()}parseOpen(e){const{name:t}=e;return this.parser?(this.parser.parseOpen(e),!0):t===this.tag?(this.model={},!0):(this.parser=this.map[t],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)){switch(e){case"r":{let e=this.model.richText;e||(e=this.model.richText=[]),e.push(this.parser.model);break}case"t":this.model=this.parser.model}this.parser=void 0}return!0}switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32,"./phonetic-text-xform":121,"./rich-text-xform":122,"./text-xform":125}],124:[function(e,t,r){"use strict";const i=e("../../../utils/xml-stream"),s=e("../base-xform"),n=e("./shared-string-xform");t.exports=class extends s{constructor(e){super(),this.model=e||{values:[],count:0},this.hash=Object.create(null),this.rich=Object.create(null)}get sharedStringXform(){return this._sharedStringXform||(this._sharedStringXform=new n)}get values(){return this.model.values}get uniqueCount(){return this.model.values.length}get count(){return this.model.count}getString(e){return this.model.values[e]}add(e){return e.richText?this.addRichText(e):this.addText(e)}addText(e){let t=this.hash[e];return void 0===t&&(t=this.hash[e]=this.model.values.length,this.model.values.push(e)),this.model.count++,t}addRichText(e){const t=this.sharedStringXform.toXml(e);let r=this.rich[t];return void 0===r&&(r=this.rich[t]=this.model.values.length,this.model.values.push(e)),this.model.count++,r}render(e,t){t=t||this._values,e.openXml(i.StdDocAttributes),e.openNode("sst",{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",count:t.count,uniqueCount:t.values.length});const r=this.sharedStringXform;t.values.forEach(t=>{r.render(e,t)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"sst":return!0;case"si":return this.parser=this.sharedStringXform,this.parser.parseOpen(e),!0;default:throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.values.push(this.parser.model),this.model.count++,this.parser=void 0),!0;switch(e){case"sst":return!1;default:throw new Error("Unexpected xml node in parseClose: "+e)}}}},{"../../../utils/xml-stream":28,"../base-xform":32,"./shared-string-xform":123}],125:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"t"}render(e,t){e.openNode("t"),/^\s|\n|\s$/.test(t)&&e.addAttribute("xml:space","preserve"),e.writeText(t),e.closeNode()}get model(){return this._text.join("").replace(/_x([0-9A-F]{4})_/g,(e,t)=>String.fromCharCode(parseInt(t,16)))}parseOpen(e){switch(e.name){case"t":return this._text=[],!0;default:return!1}}parseText(e){this._text.push(e)}parseClose(){return!1}}},{"../base-xform":32}],126:[function(e,t,r){"use strict";const i=e("../../../doc/enums"),s=e("../../../utils/utils"),n=e("../base-xform"),o={horizontalValues:["left","center","right","fill","centerContinuous","distributed","justify"].reduce((e,t)=>(e[t]=!0,e),{}),horizontal(e){return this.horizontalValues[e]?e:void 0},verticalValues:["top","middle","bottom","distributed","justify"].reduce((e,t)=>(e[t]=!0,e),{}),vertical(e){return"middle"===e?"center":this.verticalValues[e]?e:void 0},wrapText:e=>!!e||void 0,shrinkToFit:e=>!!e||void 0,textRotation(e){switch(e){case"vertical":return e;default:return(e=s.validInt(e))>=-90&&e<=90?e:void 0}},indent:e=>(e=s.validInt(e),Math.max(0,e)),readingOrder(e){switch(e){case"ltr":return i.ReadingOrder.LeftToRight;case"rtl":return i.ReadingOrder.RightToLeft;default:return}}},a={toXml(e){if(e=o.textRotation(e)){if("vertical"===e)return 255;const t=Math.round(e);if(t>=0&&t<=90)return t;if(t<0&&t>=-90)return 90-t}},toModel(e){const t=s.validInt(e);if(void 0!==t){if(255===t)return"vertical";if(t>=0&&t<=90)return t;if(t>90&&t<=180)return 90-t}}};t.exports=class extends n{get tag(){return"alignment"}render(e,t){e.addRollback(),e.openNode("alignment");let r=!1;function i(t,i){i&&(e.addAttribute(t,i),r=!0)}i("horizontal",o.horizontal(t.horizontal)),i("vertical",o.vertical(t.vertical)),i("wrapText",!!o.wrapText(t.wrapText)&&"1"),i("shrinkToFit",!!o.shrinkToFit(t.shrinkToFit)&&"1"),i("indent",o.indent(t.indent)),i("textRotation",a.toXml(t.textRotation)),i("readingOrder",o.readingOrder(t.readingOrder)),e.closeNode(),r?e.commit():e.rollback()}parseOpen(e){const t={};let r=!1;function i(e,i,s){e&&(t[i]=s,r=!0)}i(e.attributes.horizontal,"horizontal",e.attributes.horizontal),i(e.attributes.vertical,"vertical","center"===e.attributes.vertical?"middle":e.attributes.vertical),i(e.attributes.wrapText,"wrapText",s.parseBoolean(e.attributes.wrapText)),i(e.attributes.shrinkToFit,"shrinkToFit",s.parseBoolean(e.attributes.shrinkToFit)),i(e.attributes.indent,"indent",parseInt(e.attributes.indent,10)),i(e.attributes.textRotation,"textRotation",a.toModel(e.attributes.textRotation)),i(e.attributes.readingOrder,"readingOrder","2"===e.attributes.readingOrder?"rtl":"ltr"),this.model=r?t:null}parseText(){}parseClose(){return!1}}},{"../../../doc/enums":7,"../../../utils/utils":27,"../base-xform":32}],127:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("../../../utils/utils"),n=e("./color-xform");class o extends i{constructor(e){super(),this.name=e,this.map={color:new n}}get tag(){return this.name}render(e,t,r){const i=t&&t.color||r||this.defaultColor;e.openNode(this.name),t&&t.style&&(e.addAttribute("style",t.style),i&&this.map.color.render(e,i)),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.name:{const{style:t}=e.attributes;return this.model=t?{style:t}:void 0,!0}case"color":return this.parser=this.map.color,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):(e===this.name&&this.map.color.model&&(this.model||(this.model={}),this.model.color=this.map.color.model),!1)}validStyle(e){return o.validStyleValues[e]}}o.validStyleValues=["thin","dashed","dotted","dashDot","hair","dashDotDot","slantDashDot","mediumDashed","mediumDashDotDot","mediumDashDot","medium","double","thick"].reduce((e,t)=>(e[t]=!0,e),{});t.exports=class extends i{constructor(){super(),this.map={top:new o("top"),left:new o("left"),bottom:new o("bottom"),right:new o("right"),diagonal:new o("diagonal")}}render(e,t){const{color:r}=t;function i(i,s){i&&!i.color&&t.color&&(i={...i,color:t.color}),s.render(e,i,r)}e.openNode("border"),t.diagonal&&t.diagonal.style&&(t.diagonal.up&&e.addAttribute("diagonalUp","1"),t.diagonal.down&&e.addAttribute("diagonalDown","1")),i(t.left,this.map.left),i(t.right,this.map.right),i(t.top,this.map.top),i(t.bottom,this.map.bottom),i(t.diagonal,this.map.diagonal),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"border":return this.reset(),this.diagonalUp=s.parseBoolean(e.attributes.diagonalUp),this.diagonalDown=s.parseBoolean(e.attributes.diagonalDown),!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;if("border"===e){const e=this.model={},t=function(t,r,i){r&&(i&&Object.assign(r,i),e[t]=r)};t("left",this.map.left.model),t("right",this.map.right.model),t("top",this.map.top.model),t("bottom",this.map.bottom.model),t("diagonal",this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown})}return!1}}},{"../../../utils/utils":27,"../base-xform":32,"./color-xform":128}],128:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{constructor(e){super(),this.name=e||"color"}get tag(){return this.name}render(e,t){return!!t&&(e.openNode(this.name),t.argb?e.addAttribute("rgb",t.argb):void 0!==t.theme?(e.addAttribute("theme",t.theme),void 0!==t.tint&&e.addAttribute("tint",t.tint)):void 0!==t.indexed?e.addAttribute("indexed",t.indexed):e.addAttribute("auto","1"),e.closeNode(),!0)}parseOpen(e){return e.name===this.name&&(e.attributes.rgb?this.model={argb:e.attributes.rgb}:e.attributes.theme?(this.model={theme:parseInt(e.attributes.theme,10)},e.attributes.tint&&(this.model.tint=parseFloat(e.attributes.tint))):e.attributes.indexed?this.model={indexed:parseInt(e.attributes.indexed,10)}:this.model=void 0,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],129:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("./alignment-xform"),n=e("./border-xform"),o=e("./fill-xform"),a=e("./font-xform"),h=e("./numfmt-xform"),l=e("./protection-xform");t.exports=class extends i{constructor(){super(),this.map={alignment:new s,border:new n,fill:new o,font:new a,numFmt:new h,protection:new l}}get tag(){return"dxf"}render(e,t){if(e.openNode(this.tag),t.font&&this.map.font.render(e,t.font),t.numFmt&&t.numFmtId){const r={id:t.numFmtId,formatCode:t.numFmt};this.map.numFmt.render(e,r)}t.fill&&this.map.fill.render(e,t.fill),t.alignment&&this.map.alignment.render(e,t.alignment),t.border&&this.map.border.render(e,t.border),t.protection&&this.map.protection.render(e,t.protection),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:return this.reset(),!0;default:return this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model},!1)}}},{"../base-xform":32,"./alignment-xform":126,"./border-xform":127,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./protection-xform":133}],130:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("./color-xform");class n extends i{constructor(){super(),this.map={color:new s}}get tag(){return"stop"}render(e,t){e.openNode("stop"),e.addAttribute("position",t.position),this.map.color.render(e,t.color),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"stop":return this.model={position:parseFloat(e.attributes.position)},!0;case"color":return this.parser=this.map.color,this.parser.parseOpen(e),!0;default:return!1}}parseText(){}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model.color=this.parser.model,this.parser=void 0),!0)}}class o extends i{constructor(){super(),this.map={fgColor:new s("fgColor"),bgColor:new s("bgColor")}}get name(){return"pattern"}get tag(){return"patternFill"}render(e,t){e.openNode("patternFill"),e.addAttribute("patternType",t.pattern),t.fgColor&&this.map.fgColor.render(e,t.fgColor),t.bgColor&&this.map.bgColor.render(e,t.bgColor),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"patternFill":return this.model={type:"pattern",pattern:e.attributes.patternType},!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.parser.model&&(this.model[e]=this.parser.model),this.parser=void 0),!0)}}class a extends i{constructor(){super(),this.map={stop:new n}}get name(){return"gradient"}get tag(){return"gradientFill"}render(e,t){switch(e.openNode("gradientFill"),t.gradient){case"angle":e.addAttribute("degree",t.degree);break;case"path":e.addAttribute("type","path"),t.center.left&&(e.addAttribute("left",t.center.left),void 0===t.center.right&&e.addAttribute("right",t.center.left)),t.center.right&&e.addAttribute("right",t.center.right),t.center.top&&(e.addAttribute("top",t.center.top),void 0===t.center.bottom&&e.addAttribute("bottom",t.center.top)),t.center.bottom&&e.addAttribute("bottom",t.center.bottom)}const r=this.map.stop;t.stops.forEach(t=>{r.render(e,t)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"gradientFill":{const t=this.model={stops:[]};return e.attributes.degree?(t.gradient="angle",t.degree=parseInt(e.attributes.degree,10)):"path"===e.attributes.type&&(t.gradient="path",t.center={left:e.attributes.left?parseFloat(e.attributes.left):0,top:e.attributes.top?parseFloat(e.attributes.top):0},e.attributes.right!==e.attributes.left&&(t.center.right=e.attributes.right?parseFloat(e.attributes.right):0),e.attributes.bottom!==e.attributes.top&&(t.center.bottom=e.attributes.bottom?parseFloat(e.attributes.bottom):0)),!0}case"stop":return this.parser=this.map.stop,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model.stops.push(this.parser.model),this.parser=void 0),!0)}}class h extends i{constructor(){super(),this.map={patternFill:new o,gradientFill:new a}}get tag(){return"fill"}render(e,t){switch(e.addRollback(),e.openNode("fill"),t.type){case"pattern":this.map.patternFill.render(e,t);break;case"gradient":this.map.gradientFill.render(e,t);break;default:return void e.rollback()}e.closeNode(),e.commit()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"fill":return this.model={},!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model=this.parser.model,this.model.type=this.parser.name,this.parser=void 0),!0)}validStyle(e){return h.validPatternValues[e]}}h.validPatternValues=["none","solid","darkVertical","darkGray","mediumGray","lightGray","gray125","gray0625","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","lightGrid"].reduce((e,t)=>(e[t]=!0,e),{}),h.StopXform=n,h.PatternFillXform=o,h.GradientFillXform=a,t.exports=h},{"../base-xform":32,"./color-xform":128}],131:[function(e,t,r){"use strict";const i=e("./color-xform"),s=e("../simple/boolean-xform"),n=e("../simple/integer-xform"),o=e("../simple/string-xform"),a=e("./underline-xform"),h=e("../../../utils/under-dash"),l=e("../base-xform");class c extends l{constructor(e){super(),this.options=e||c.OPTIONS,this.map={b:{prop:"bold",xform:new s({tag:"b",attr:"val"})},i:{prop:"italic",xform:new s({tag:"i",attr:"val"})},u:{prop:"underline",xform:new a},charset:{prop:"charset",xform:new n({tag:"charset",attr:"val"})},color:{prop:"color",xform:new i},condense:{prop:"condense",xform:new s({tag:"condense",attr:"val"})},extend:{prop:"extend",xform:new s({tag:"extend",attr:"val"})},family:{prop:"family",xform:new n({tag:"family",attr:"val"})},outline:{prop:"outline",xform:new s({tag:"outline",attr:"val"})},vertAlign:{prop:"vertAlign",xform:new o({tag:"vertAlign",attr:"val"})},scheme:{prop:"scheme",xform:new o({tag:"scheme",attr:"val"})},shadow:{prop:"shadow",xform:new s({tag:"shadow",attr:"val"})},strike:{prop:"strike",xform:new s({tag:"strike",attr:"val"})},sz:{prop:"size",xform:new n({tag:"sz",attr:"val"})}},this.map[this.options.fontNameTag]={prop:"name",xform:new o({tag:this.options.fontNameTag,attr:"val"})}}get tag(){return this.options.tagName}render(e,t){const{map:r}=this;e.openNode(this.options.tagName),h.each(this.map,(i,s)=>{r[s].xform.render(e,t[i.prop])}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;if(this.map[e.name])return this.parser=this.map[e.name].xform,this.parser.parseOpen(e);switch(e.name){case this.options.tagName:return this.model={},!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser&&!this.parser.parseClose(e)){const t=this.map[e];return this.parser.model&&(this.model[t.prop]=this.parser.model),this.parser=void 0,!0}switch(e){case this.options.tagName:return!1;default:return!0}}}c.OPTIONS={tagName:"font",fontNameTag:"name"},t.exports=c},{"../../../utils/under-dash":26,"../base-xform":32,"../simple/boolean-xform":116,"../simple/integer-xform":118,"../simple/string-xform":119,"./color-xform":128,"./underline-xform":136}],132:[function(e,t,r){"use strict";const i=e("../../../utils/under-dash"),s=e("../../defaultnumformats"),n=e("../base-xform");const o=function(){const e={};return i.each(s,(t,r)=>{t.f&&(e[t.f]=parseInt(r,10))}),e}();class a extends n{constructor(e,t){super(),this.id=e,this.formatCode=t}get tag(){return"numFmt"}render(e,t){e.leafNode("numFmt",{numFmtId:t.id,formatCode:t.formatCode})}parseOpen(e){switch(e.name){case"numFmt":return this.model={id:parseInt(e.attributes.numFmtId,10),formatCode:e.attributes.formatCode.replace(/[\\](.)/g,"$1")},!0;default:return!1}}parseText(){}parseClose(){return!1}}a.getDefaultFmtId=function(e){return o[e]},a.getDefaultFmtCode=function(e){return s[e]&&s[e].f},t.exports=a},{"../../../utils/under-dash":26,"../../defaultnumformats":30,"../base-xform":32}],133:[function(e,t,r){"use strict";const i=e("../base-xform"),s={boolean:(e,t)=>void 0===e?t:e};t.exports=class extends i{get tag(){return"protection"}render(e,t){e.addRollback(),e.openNode("protection");let r=!1;function i(t,i){void 0!==i&&(e.addAttribute(t,i),r=!0)}i("locked",s.boolean(t.locked,!0)?void 0:"0"),i("hidden",s.boolean(t.hidden,!1)?"1":void 0),e.closeNode(),r?e.commit():e.rollback()}parseOpen(e){const t={locked:!("0"===e.attributes.locked),hidden:"1"===e.attributes.hidden},r=!t.locked||t.hidden;this.model=r?t:null}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],134:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("./alignment-xform"),n=e("./protection-xform");t.exports=class extends i{constructor(e){super(),this.xfId=!(!e||!e.xfId),this.map={alignment:new s,protection:new n}}get tag(){return"xf"}render(e,t){e.openNode("xf",{numFmtId:t.numFmtId||0,fontId:t.fontId||0,fillId:t.fillId||0,borderId:t.borderId||0}),this.xfId&&e.addAttribute("xfId",t.xfId||0),t.numFmtId&&e.addAttribute("applyNumberFormat","1"),t.fontId&&e.addAttribute("applyFont","1"),t.fillId&&e.addAttribute("applyFill","1"),t.borderId&&e.addAttribute("applyBorder","1"),t.alignment&&e.addAttribute("applyAlignment","1"),t.protection&&e.addAttribute("applyProtection","1"),t.alignment&&this.map.alignment.render(e,t.alignment),t.protection&&this.map.protection.render(e,t.protection),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"xf":return this.model={numFmtId:parseInt(e.attributes.numFmtId,10),fontId:parseInt(e.attributes.fontId,10),fillId:parseInt(e.attributes.fillId,10),borderId:parseInt(e.attributes.borderId,10)},this.xfId&&(this.model.xfId=parseInt(e.attributes.xfId,10)),!0;case"alignment":return this.parser=this.map.alignment,this.parser.parseOpen(e),!0;case"protection":return this.parser=this.map.protection,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.map.protection===this.parser?this.model.protection=this.parser.model:this.model.alignment=this.parser.model,this.parser=void 0),!0):"xf"!==e}}},{"../base-xform":32,"./alignment-xform":126,"./protection-xform":133}],135:[function(e,t,r){"use strict";const i=e("../../../doc/enums"),s=e("../../../utils/xml-stream"),n=e("../base-xform"),o=e("../static-xform"),a=e("../list-xform"),h=e("./font-xform"),l=e("./fill-xform"),c=e("./border-xform"),u=e("./numfmt-xform"),f=e("./style-xform"),d=e("./dxf-xform");class p extends n{constructor(e){super(),this.map={numFmts:new a({tag:"numFmts",count:!0,childXform:new u}),fonts:new a({tag:"fonts",count:!0,childXform:new h,$:{"x14ac:knownFonts":1}}),fills:new a({tag:"fills",count:!0,childXform:new l}),borders:new a({tag:"borders",count:!0,childXform:new c}),cellStyleXfs:new a({tag:"cellStyleXfs",count:!0,childXform:new f}),cellXfs:new a({tag:"cellXfs",count:!0,childXform:new f({xfId:!0})}),dxfs:new a({tag:"dxfs",always:!0,count:!0,childXform:new d}),numFmt:new u,font:new h,fill:new l,border:new c,style:new f({xfId:!0}),cellStyles:p.STATIC_XFORMS.cellStyles,tableStyles:p.STATIC_XFORMS.tableStyles,extLst:p.STATIC_XFORMS.extLst},e&&this.init()}initIndex(){this.index={style:{},numFmt:{},numFmtNextId:164,font:{},border:{},fill:{}}}init(){this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]},this.initIndex(),this._addBorder({}),this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}),this._addFill({type:"pattern",pattern:"none"}),this._addFill({type:"pattern",pattern:"gray125"}),this.weakMap=new WeakMap}render(e,t){t=t||this.model,e.openXml(s.StdDocAttributes),e.openNode("styleSheet",p.STYLESHEET_ATTRIBUTES),this.index?(t.numFmts&&t.numFmts.length&&(e.openNode("numFmts",{count:t.numFmts.length}),t.numFmts.forEach(t=>{e.writeXml(t)}),e.closeNode()),t.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),e.openNode("fonts",{count:t.fonts.length,"x14ac:knownFonts":1}),t.fonts.forEach(t=>{e.writeXml(t)}),e.closeNode(),e.openNode("fills",{count:t.fills.length}),t.fills.forEach(t=>{e.writeXml(t)}),e.closeNode(),e.openNode("borders",{count:t.borders.length}),t.borders.forEach(t=>{e.writeXml(t)}),e.closeNode(),this.map.cellStyleXfs.render(e,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),e.openNode("cellXfs",{count:t.styles.length}),t.styles.forEach(t=>{e.writeXml(t)}),e.closeNode()):(this.map.numFmts.render(e,t.numFmts),this.map.fonts.render(e,t.fonts),this.map.fills.render(e,t.fills),this.map.borders.render(e,t.borders),this.map.cellStyleXfs.render(e,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),this.map.cellXfs.render(e,t.styles)),p.STATIC_XFORMS.cellStyles.render(e),this.map.dxfs.render(e,t.dxfs),p.STATIC_XFORMS.tableStyles.render(e),p.STATIC_XFORMS.extLst.render(e),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"styleSheet":return this.initIndex(),!0;default:return this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"styleSheet":{this.model={};const e=(e,t)=>{t.model&&t.model.length&&(this.model[e]=t.model)};if(e("numFmts",this.map.numFmts),e("fonts",this.map.fonts),e("fills",this.map.fills),e("borders",this.map.borders),e("styles",this.map.cellXfs),e("dxfs",this.map.dxfs),this.index={model:[],numFmt:[]},this.model.numFmts){const e=this.index.numFmt;this.model.numFmts.forEach(t=>{e[t.id]=t.formatCode})}return!1}default:return!0}}addStyleModel(e,t){if(!e)return 0;if(this.model.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),this.weakMap&&this.weakMap.has(e))return this.weakMap.get(e);const r={};if(t=t||i.ValueType.Number,e.numFmt)r.numFmtId=this._addNumFmtStr(e.numFmt);else switch(t){case i.ValueType.Number:r.numFmtId=this._addNumFmtStr("General");break;case i.ValueType.Date:r.numFmtId=this._addNumFmtStr("mm-dd-yy")}e.font&&(r.fontId=this._addFont(e.font)),e.border&&(r.borderId=this._addBorder(e.border)),e.fill&&(r.fillId=this._addFill(e.fill)),e.alignment&&(r.alignment=e.alignment),e.protection&&(r.protection=e.protection);const s=this._addStyle(r);return this.weakMap&&this.weakMap.set(e,s),s}getStyleModel(e){const t=this.model.styles[e];if(!t)return null;let r=this.index.model[e];if(r)return r;if(r=this.index.model[e]={},t.numFmtId){const e=this.index.numFmt[t.numFmtId]||u.getDefaultFmtCode(t.numFmtId);e&&(r.numFmt=e)}function i(e,t,i){if(i||0===i){const s=t[i];s&&(r[e]=s)}}return i("font",this.model.fonts,t.fontId),i("border",this.model.borders,t.borderId),i("fill",this.model.fills,t.fillId),t.alignment&&(r.alignment=t.alignment),t.protection&&(r.protection=t.protection),r}addDxfStyle(e){return e.numFmt&&(e.numFmtId=this._addNumFmtStr(e.numFmt)),this.model.dxfs.push(e),this.model.dxfs.length-1}getDxfStyle(e){return this.model.dxfs[e]}_addStyle(e){const t=this.map.style.toXml(e);let r=this.index.style[t];return void 0===r&&(r=this.index.style[t]=this.model.styles.length,this.model.styles.push(t)),r}_addNumFmtStr(e){let t=u.getDefaultFmtId(e);if(void 0!==t)return t;if(t=this.index.numFmt[e],void 0!==t)return t;t=this.index.numFmt[e]=164+this.model.numFmts.length;const r=this.map.numFmt.toXml({id:t,formatCode:e});return this.model.numFmts.push(r),t}_addFont(e){const t=this.map.font.toXml(e);let r=this.index.font[t];return void 0===r&&(r=this.index.font[t]=this.model.fonts.length,this.model.fonts.push(t)),r}_addBorder(e){const t=this.map.border.toXml(e);let r=this.index.border[t];return void 0===r&&(r=this.index.border[t]=this.model.borders.length,this.model.borders.push(t)),r}_addFill(e){const t=this.map.fill.toXml(e);let r=this.index.fill[t];return void 0===r&&(r=this.index.fill[t]=this.model.fills.length,this.model.fills.push(t)),r}}p.STYLESHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac x16r2","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac","xmlns:x16r2":"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"},p.STATIC_XFORMS={cellStyles:new o({tag:"cellStyles",$:{count:1},c:[{tag:"cellStyle",$:{name:"Normal",xfId:0,builtinId:0}}]}),dxfs:new o({tag:"dxfs",$:{count:0}}),tableStyles:new o({tag:"tableStyles",$:{count:0,defaultTableStyle:"TableStyleMedium2",defaultPivotStyle:"PivotStyleLight16"}}),extLst:new o({tag:"extLst",c:[{tag:"ext",$:{uri:"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"},c:[{tag:"x14:slicerStyles",$:{defaultSlicerStyle:"SlicerStyleLight1"}}]},{tag:"ext",$:{uri:"{9260A510-F301-46a8-8635-F512D64BE5F5}","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},c:[{tag:"x15:timelineStyles",$:{defaultTimelineStyle:"TimeSlicerStyleLight1"}}]}]})};p.Mock=class extends p{constructor(){super(),this.model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}],borders:[{}],fills:[{type:"pattern",pattern:"none"},{type:"pattern",pattern:"gray125"}]}}parseStream(e){return e.autodrain(),Promise.resolve()}addStyleModel(e,t){switch(t){case i.ValueType.Date:return this.dateStyleId;default:return 0}}get dateStyleId(){if(!this._dateStyleId){const e={numFmtId:u.getDefaultFmtId("mm-dd-yy")};this._dateStyleId=this.model.styles.length,this.model.styles.push(e)}return this._dateStyleId}getStyleModel(){return{}}},t.exports=p},{"../../../doc/enums":7,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./border-xform":127,"./dxf-xform":129,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./style-xform":134}],136:[function(e,t,r){"use strict";const i=e("../base-xform");class s extends i{constructor(e){super(),this.model=e}get tag(){return"u"}render(e,t){if(!0===(t=t||this.model))e.leafNode("u");else{const r=s.Attributes[t];r&&e.leafNode("u",r)}}parseOpen(e){"u"===e.name&&(this.model=e.attributes.val||!0)}parseText(){}parseClose(){return!1}}s.Attributes={single:{},double:{val:"double"},singleAccounting:{val:"singleAccounting"},doubleAccounting:{val:"doubleAccounting"}},t.exports=s},{"../base-xform":32}],137:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("./filter-column-xform");t.exports=class extends i{constructor(){super(),this.map={filterColumn:new s}}get tag(){return"autoFilter"}prepare(e){e.columns.forEach((e,t)=>{this.map.filterColumn.prepare(e,{index:t})})}render(e,t){return e.openNode(this.tag,{ref:t.autoFilterRef}),t.columns.forEach(t=>{this.map.filterColumn.render(e,t)}),e.closeNode(),!0}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:return this.model={autoFilterRef:e.attributes.ref,columns:[]},!0;default:if(this.parser=this.map[e.name],this.parser)return this.parseOpen(e),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.columns.push(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:throw new Error("Unexpected xml node in parseClose: "+e)}}}},{"../base-xform":32,"./filter-column-xform":139}],138:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"customFilter"}render(e,t){e.leafNode(this.tag,{val:t.val,operator:t.operator})}parseOpen(e){return e.name===this.tag&&(this.model={val:e.attributes.val,operator:e.attributes.operator},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],139:[function(e,t,r){"use strict";const i=e("../base-xform"),s=e("../list-xform"),n=e("./custom-filter-xform"),o=e("./filter-xform");t.exports=class extends i{constructor(){super(),this.map={customFilters:new s({tag:"customFilters",count:!1,empty:!0,childXform:new n}),filters:new s({tag:"filters",count:!1,empty:!0,childXform:new o})}}get tag(){return"filterColumn"}prepare(e,t){e.colId=t.index.toString()}render(e,t){return t.customFilters?(e.openNode(this.tag,{colId:t.colId,hiddenButton:t.filterButton?"0":"1"}),this.map.customFilters.render(e,t.customFilters),e.closeNode(),!0):(e.leafNode(this.tag,{colId:t.colId,hiddenButton:t.filterButton?"0":"1"}),!0)}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;const{attributes:t}=e;switch(e.name){case this.tag:return this.model={filterButton:"0"===t.hiddenButton},!0;default:if(this.parser=this.map[e.name],this.parser)return this.parseOpen(e),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.customFilters=this.map.customFilters.model,!1;default:return!0}}}},{"../base-xform":32,"../list-xform":71,"./custom-filter-xform":138,"./filter-xform":140}],140:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"filter"}render(e,t){e.leafNode(this.tag,{val:t.val})}parseOpen(e){return e.name===this.tag&&(this.model={val:e.attributes.val},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],141:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"tableColumn"}prepare(e,t){e.id=t.index+1}render(e,t){return e.leafNode(this.tag,{id:t.id.toString(),name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId}),!0}parseOpen(e){if(e.name===this.tag){const{attributes:t}=e;return this.model={name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId},!0}return!1}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],142:[function(e,t,r){"use strict";const i=e("../base-xform");t.exports=class extends i{get tag(){return"tableStyleInfo"}render(e,t){return e.leafNode(this.tag,{name:t.theme?t.theme:void 0,showFirstColumn:t.showFirstColumn?"1":"0",showLastColumn:t.showLastColumn?"1":"0",showRowStripes:t.showRowStripes?"1":"0",showColumnStripes:t.showColumnStripes?"1":"0"}),!0}parseOpen(e){if(e.name===this.tag){const{attributes:t}=e;return this.model={theme:t.name?t.name:null,showFirstColumn:"1"===t.showFirstColumn,showLastColumn:"1"===t.showLastColumn,showRowStripes:"1"===t.showRowStripes,showColumnStripes:"1"===t.showColumnStripes},!0}return!1}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],143:[function(e,t,r){"use strict";const i=e("../../../utils/xml-stream"),s=e("../base-xform"),n=e("../list-xform"),o=e("./auto-filter-xform"),a=e("./table-column-xform"),h=e("./table-style-info-xform");class l extends s{constructor(){super(),this.map={autoFilter:new o,tableColumns:new n({tag:"tableColumns",count:!0,empty:!0,childXform:new a}),tableStyleInfo:new h}}prepare(e,t){this.map.autoFilter.prepare(e),this.map.tableColumns.prepare(e.columns,t)}get tag(){return"table"}render(e,t){e.openXml(i.StdDocAttributes),e.openNode(this.tag,{...l.TABLE_ATTRIBUTES,id:t.id,name:t.name,displayName:t.displayName||t.name,ref:t.tableRef,totalsRowCount:t.totalsRow?"1":void 0,totalsRowShown:t.totalsRow?void 0:"1",headerRowCount:t.headerRow?"1":"0"}),this.map.autoFilter.render(e,t),this.map.tableColumns.render(e,t.columns),this.map.tableStyleInfo.render(e,t.style),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;const{name:t,attributes:r}=e;switch(t){case this.tag:this.reset(),this.model={name:r.name,displayName:r.displayName||r.name,tableRef:r.ref,totalsRow:"1"===r.totalsRowCount,headerRow:"1"===r.headerRowCount};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.columns=this.map.tableColumns.model,this.map.autoFilter.model&&(this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef,this.map.autoFilter.model.columns.forEach((e,t)=>{this.model.columns[t].filterButton=e.filterButton})),this.model.style=this.map.tableStyleInfo.model,!1;default:return!0}}reconcile(e,t){e.columns.forEach(e=>{void 0!==e.dxfId&&(e.style=t.styles.getDxfStyle(e.dxfId))})}}l.TABLE_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"xr xr3","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision","xmlns:xr3":"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3"},t.exports=l},{"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":137,"./table-column-xform":141,"./table-style-info-xform":142}],144:[function(e,t,r){(function(r,i){(function(){"use strict";const s=e("fs"),n=e("jszip"),{PassThrough:o}=e("readable-stream"),a=e("../utils/zip-stream"),h=e("../utils/stream-buf"),l=e("../utils/utils"),c=e("../utils/xml-stream"),{bufferToString:u}=e("../utils/browser-buffer-decode"),f=e("./xform/style/styles-xform"),d=e("./xform/core/core-xform"),p=e("./xform/strings/shared-strings-xform"),m=e("./xform/core/relationships-xform"),b=e("./xform/core/content-types-xform"),g=e("./xform/core/app-xform"),y=e("./xform/book/workbook-xform"),v=e("./xform/sheet/worksheet-xform"),w=e("./xform/drawing/drawing-xform"),_=e("./xform/table/table-xform"),x=e("./xform/comment/comments-xform"),S=e("./xform/comment/vml-notes-xform"),k=e("./xml/theme1");class M{constructor(e){this.workbook=e}async readFile(e,t){if(!await l.fs.exists(e))throw new Error("File not found: "+e);const r=s.createReadStream(e);try{const e=await this.read(r,t);return r.close(),e}catch(e){throw r.close(),e}}parseRels(e){return(new m).parseStream(e)}parseWorkbook(e){return(new y).parseStream(e)}parseSharedStrings(e){return(new p).parseStream(e)}reconcile(e,t){const r=new y,i=new v(t),s=new w,n=new _;r.reconcile(e);const o={media:e.media,mediaIndex:e.mediaIndex};Object.keys(e.drawings).forEach(t=>{const r=e.drawings[t],i=e.drawingRels[t];i&&(o.rels=i.reduce((e,t)=>(e[t.Id]=t,e),{}),(r.anchors||[]).forEach(e=>{const t=e.picture&&e.picture.hyperlinks;t&&o.rels[t.rId]&&(t.hyperlink=o.rels[t.rId].Target,delete t.rId)}),s.reconcile(r,o))});const a={styles:e.styles};Object.values(e.tables).forEach(e=>{n.reconcile(e,a)});const h={styles:e.styles,sharedStrings:e.sharedStrings,media:e.media,mediaIndex:e.mediaIndex,date1904:e.properties&&e.properties.date1904,drawings:e.drawings,comments:e.comments,tables:e.tables,vmlDrawings:e.vmlDrawings};e.worksheets.forEach(t=>{t.relationships=e.worksheetRels[t.sheetNo],i.reconcile(t,h)}),delete e.worksheetHash,delete e.worksheetRels,delete e.globalRels,delete e.sharedStrings,delete e.workbookRels,delete e.sheetDefs,delete e.styles,delete e.mediaIndex,delete e.drawings,delete e.drawingRels,delete e.vmlDrawings}async _processWorksheetEntry(e,t,r,i,s){const n=new v(i),o=await n.parseStream(e);o.sheetNo=r,t.worksheetHash[s]=o,t.worksheets.push(o)}async _processCommentEntry(e,t,r){const i=new x,s=await i.parseStream(e);t.comments[`../${r}.xml`]=s}async _processTableEntry(e,t,r){const i=new _,s=await i.parseStream(e);t.tables[`../tables/${r}.xml`]=s}async _processWorksheetRelsEntry(e,t,r){const i=new m,s=await i.parseStream(e);t.worksheetRels[r]=s}async _processMediaEntry(e,t,r){const i=r.lastIndexOf(".");if(i>=1){const s=r.substr(i+1),n=r.substr(0,i);await new Promise((i,o)=>{const a=new h;a.on("finish",()=>{t.mediaIndex[r]=t.media.length,t.mediaIndex[n]=t.media.length;const e={type:"image",name:n,extension:s,buffer:a.toBuffer()};t.media.push(e),i()}),e.on("error",e=>{o(e)}),e.pipe(a)})}}async _processDrawingEntry(e,t,r){const i=new w,s=await i.parseStream(e);t.drawings[r]=s}async _processDrawingRelsEntry(e,t,r){const i=new m,s=await i.parseStream(e);t.drawingRels[r]=s}async _processVmlDrawingEntry(e,t,r){const i=new S,s=await i.parseStream(e);t.vmlDrawings[`../drawings/${r}.vml`]=s}async _processThemeEntry(e,t,r){await new Promise((i,s)=>{const n=new h;e.on("error",s),n.on("error",s),n.on("finish",()=>{t.themes[r]=n.read().toString(),i()}),e.pipe(n)})}createInputStream(){throw new Error("`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}async read(e,t){!e[Symbol.asyncIterator]&&e.pipe&&(e=e.pipe(new o));const r=[];for await(const t of e)r.push(t);return this.load(i.concat(r),t)}async load(e,t){let s;s=t&&t.base64?i.from(e.toString(),"base64"):e;const a={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},h=await n.loadAsync(s);for(const e of Object.values(h.files))if(!e.dir){let i,s=e.name;if("/"===s[0]&&(s=s.substr(1)),s.match(/xl\/media\//)||s.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/))i=new o,i.write(await e.async("nodebuffer"));else{let t;i=new o({writableObjectMode:!0,readableObjectMode:!0}),t=r.browser?u(await e.async("nodebuffer")):await e.async("string");const s=16384;for(let e=0;e{if("image"===t.type){const r=`xl/media/${t.name}.${t.extension}`;if(t.filename){const i=await function(e,t){return new Promise((r,i)=>{s.readFile(e,t,(e,t)=>{e?i(e):r(t)})})}(t.filename);return e.append(i,{name:r})}if(t.buffer)return e.append(t.buffer,{name:r});if(t.base64){const i=t.base64,s=i.substring(i.indexOf(",")+1);return e.append(s,{name:r,base64:!0})}}throw new Error("Unsupported media")}))}addDrawings(e,t){const r=new w,i=new m;t.worksheets.forEach(t=>{const{drawing:s}=t;if(s){r.prepare(s,{});let t=r.toXml(s);e.append(t,{name:`xl/drawings/${s.name}.xml`}),t=i.toXml(s.rels),e.append(t,{name:`xl/drawings/_rels/${s.name}.xml.rels`})}})}addTables(e,t){const r=new _;t.worksheets.forEach(t=>{const{tables:i}=t;i.forEach(t=>{r.prepare(t,{});const i=r.toXml(t);e.append(i,{name:"xl/tables/"+t.target})})})}async addContentTypes(e,t){const r=(new b).toXml(t);e.append(r,{name:"[Content_Types].xml"})}async addApp(e,t){const r=(new g).toXml(t);e.append(r,{name:"docProps/app.xml"})}async addCore(e,t){const r=new d;e.append(r.toXml(t),{name:"docProps/core.xml"})}async addThemes(e,t){const r=t.themes||{theme1:k};Object.keys(r).forEach(t=>{const i=r[t],s=`xl/theme/${t}.xml`;e.append(i,{name:s})})}async addOfficeRels(e){const t=(new m).toXml([{Id:"rId1",Type:M.RelType.OfficeDocument,Target:"xl/workbook.xml"},{Id:"rId2",Type:M.RelType.CoreProperties,Target:"docProps/core.xml"},{Id:"rId3",Type:M.RelType.ExtenderProperties,Target:"docProps/app.xml"}]);e.append(t,{name:"_rels/.rels"})}async addWorkbookRels(e,t){let r=1;const i=[{Id:"rId"+r++,Type:M.RelType.Styles,Target:"styles.xml"},{Id:"rId"+r++,Type:M.RelType.Theme,Target:"theme/theme1.xml"}];t.sharedStrings.count&&i.push({Id:"rId"+r++,Type:M.RelType.SharedStrings,Target:"sharedStrings.xml"}),t.worksheets.forEach(e=>{e.rId="rId"+r++,i.push({Id:e.rId,Type:M.RelType.Worksheet,Target:`worksheets/sheet${e.id}.xml`})});const s=(new m).toXml(i);e.append(s,{name:"xl/_rels/workbook.xml.rels"})}async addSharedStrings(e,t){t.sharedStrings&&t.sharedStrings.count&&e.append(t.sharedStrings.xml,{name:"xl/sharedStrings.xml"})}async addStyles(e,t){const{xml:r}=t.styles;r&&e.append(r,{name:"xl/styles.xml"})}async addWorkbook(e,t){const r=new y;e.append(r.toXml(t),{name:"xl/workbook.xml"})}async addWorksheets(e,t){const r=new v,i=new m,s=new x,n=new S;t.worksheets.forEach(t=>{let o=new c;r.render(o,t),e.append(o.xml,{name:`xl/worksheets/sheet${t.id}.xml`}),t.rels&&t.rels.length&&(o=new c,i.render(o,t.rels),e.append(o.xml,{name:`xl/worksheets/_rels/sheet${t.id}.xml.rels`})),t.comments.length>0&&(o=new c,s.render(o,t),e.append(o.xml,{name:`xl/comments${t.id}.xml`}),o=new c,n.render(o,t),e.append(o.xml,{name:`xl/drawings/vmlDrawing${t.id}.vml`}))})}_finalize(e){return new Promise((t,r)=>{e.on("finish",()=>{t(this)}),e.on("error",r),e.finalize()})}prepareModel(e,t){e.creator=e.creator||"ExcelJS",e.lastModifiedBy=e.lastModifiedBy||"ExcelJS",e.created=e.created||new Date,e.modified=e.modified||new Date,e.useSharedStrings=void 0===t.useSharedStrings||t.useSharedStrings,e.useStyles=void 0===t.useStyles||t.useStyles,e.sharedStrings=new p,e.styles=e.useStyles?new f(!0):new f.Mock;const r=new y,i=new v;r.prepare(e);const s={sharedStrings:e.sharedStrings,styles:e.styles,date1904:e.properties.date1904,drawingsCount:0,media:e.media};s.drawings=e.drawings=[],s.commentRefs=e.commentRefs=[];let n=0;e.tables=[],e.worksheets.forEach(t=>{t.tables.forEach(t=>{n++,t.target=`table${n}.xml`,t.id=n,e.tables.push(t)}),i.prepare(t,s)})}async write(e,t){t=t||{};const{model:r}=this.workbook,i=new a.ZipWriter(t.zip);return i.pipe(e),this.prepareModel(r,t),await this.addContentTypes(i,r),await this.addOfficeRels(i,r),await this.addWorkbookRels(i,r),await this.addWorksheets(i,r),await this.addSharedStrings(i,r),await this.addDrawings(i,r),await this.addTables(i,r),await Promise.all([this.addThemes(i,r),this.addStyles(i,r)]),await this.addMedia(i,r),await Promise.all([this.addApp(i,r),this.addCore(i,r)]),await this.addWorkbook(i,r),this._finalize(i)}writeFile(e,t){const r=s.createWriteStream(e);return new Promise((e,i)=>{r.on("finish",()=>{e()}),r.on("error",e=>{i(e)}),this.write(r,t).then(()=>{r.end()}).catch(e=>{i(e)})})}async writeBuffer(e){const t=new h;return await this.write(t,e),t.read()}}M.RelType=e("./rel-type"),t.exports=M}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":24,"../utils/utils":27,"../utils/xml-stream":28,"../utils/zip-stream":29,"./rel-type":31,"./xform/book/workbook-xform":38,"./xform/comment/comments-xform":40,"./xform/comment/vml-notes-xform":45,"./xform/core/app-xform":51,"./xform/core/content-types-xform":52,"./xform/core/core-xform":53,"./xform/core/relationships-xform":55,"./xform/drawing/drawing-xform":62,"./xform/sheet/worksheet-xform":115,"./xform/strings/shared-strings-xform":124,"./xform/style/styles-xform":135,"./xform/table/table-xform":143,"./xml/theme1":145,_process:306,buffer:220,fs:216,jszip:280,"readable-stream":330}],145:[function(e,t,r){"use strict";t.exports='\n '},{}],146:[function(e,t,r){(function(t){(function(){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.CsvFormatterStream=void 0;const i=e("stream"),s=e("./formatter");class n extends i.Transform{constructor(e){super({writableObjectMode:e.objectMode}),this.hasWrittenBOM=!1,this.formatterOptions=e,this.rowFormatter=new s.RowFormatter(e),this.hasWrittenBOM=!e.writeBOM}transform(e){return this.rowFormatter.rowTransform=e,this}_transform(e,r,i){let s=!1;try{this.hasWrittenBOM||(this.push(this.formatterOptions.BOM),this.hasWrittenBOM=!0),this.rowFormatter.format(e,(e,r)=>e?(s=!0,i(e)):(r&&r.forEach(e=>{this.push(t.from(e,"utf8"))}),s=!0,i()))}catch(e){if(s)throw e;i(e)}}_flush(e){this.rowFormatter.finish((r,i)=>r?e(r):(i&&i.forEach(e=>{this.push(t.from(e,"utf8"))}),e()))}}r.CsvFormatterStream=n}).call(this)}).call(this,e("buffer").Buffer)},{"./formatter":150,buffer:220,stream:343}],147:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.FormatterOptions=void 0;r.FormatterOptions=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var t;this.objectMode=!0,this.delimiter=",",this.rowDelimiter="\n",this.quote='"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.writeBOM=!1,this.BOM="\ufeff",this.alwaysWriteHeaders=!1,Object.assign(this,e||{}),void 0===(null==e?void 0:e.quoteHeaders)&&(this.quoteHeaders=this.quoteColumns),!0===(null==e?void 0:e.quote)?this.quote='"':!1===(null==e?void 0:e.quote)&&(this.quote=""),"string"!=typeof(null==e?void 0:e.escape)&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers&&(null===(t=e.writeHeaders)||void 0===t||t),this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=`${this.escape}${this.quote}`}}},{}],148:[function(e,t,r){"use strict";var i=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.FieldFormatter=void 0;const s=i(e("lodash.isboolean")),n=i(e("lodash.isnil")),o=i(e("lodash.escaperegexp"));r.FieldFormatter=class{constructor(e){this._headers=null,this.formatterOptions=e,null!==e.headers&&(this.headers=e.headers),this.REPLACE_REGEXP=new RegExp(e.quote,"g");const t=`[${e.delimiter}${o.default(e.rowDelimiter)}|\r|\n]`;this.ESCAPE_REGEXP=new RegExp(t)}set headers(e){this._headers=e}shouldQuote(e,t){const r=t?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;return s.default(r)?r:Array.isArray(r)?r[e]:null!==this._headers&&r[this._headers[e]]}format(e,t,r){const i=(""+(n.default(e)?"":e)).replace(/\0/g,""),{formatterOptions:s}=this;if(""!==s.quote){if(-1!==i.indexOf(s.quote))return this.quoteField(i.replace(this.REPLACE_REGEXP,s.escapedQuote))}return-1!==i.search(this.ESCAPE_REGEXP)||this.shouldQuote(t,r)?this.quoteField(i):i}quoteField(e){const{quote:t}=this.formatterOptions;return`${t}${e}${t}`}}},{"lodash.escaperegexp":281,"lodash.isboolean":283,"lodash.isnil":286}],149:[function(e,t,r){"use strict";var i=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.RowFormatter=void 0;const s=i(e("lodash.isfunction")),n=i(e("lodash.isequal")),o=e("./FieldFormatter"),a=e("../types");class h{constructor(e){this.rowCount=0,this.formatterOptions=e,this.fieldFormatter=new o.FieldFormatter(e),this.headers=e.headers,this.shouldWriteHeaders=e.shouldWriteHeaders,this.hasWrittenHeaders=!1,null!==this.headers&&(this.fieldFormatter.headers=this.headers),e.transform&&(this.rowTransform=e.transform)}static isRowHashArray(e){return!!Array.isArray(e)&&(Array.isArray(e[0])&&2===e[0].length)}static isRowArray(e){return Array.isArray(e)&&!this.isRowHashArray(e)}static gatherHeaders(e){return h.isRowHashArray(e)?e.map(e=>e[0]):Array.isArray(e)?e:Object.keys(e)}static createTransform(e){return a.isSyncTransform(e)?(t,r)=>{let i=null;try{i=e(t)}catch(e){return r(e)}return r(null,i)}:(t,r)=>{e(t,r)}}set rowTransform(e){if(!s.default(e))throw new TypeError("The transform should be a function");this._rowTransform=h.createTransform(e)}format(e,t){this.callTransformer(e,(r,i)=>{if(r)return t(r);if(!e)return t(null);const s=[];if(i){const{shouldFormatColumns:e,headers:t}=this.checkHeaders(i);if(this.shouldWriteHeaders&&t&&!this.hasWrittenHeaders&&(s.push(this.formatColumns(t,!0)),this.hasWrittenHeaders=!0),e){const e=this.gatherColumns(i);s.push(this.formatColumns(e,!1))}}return t(null,s)})}finish(e){const t=[];if(this.formatterOptions.alwaysWriteHeaders&&0===this.rowCount){if(!this.headers)return e(new Error("`alwaysWriteHeaders` option is set to true but `headers` option not provided."));t.push(this.formatColumns(this.headers,!0))}return this.formatterOptions.includeEndRowDelimiter&&t.push(this.formatterOptions.rowDelimiter),e(null,t)}checkHeaders(e){if(this.headers)return{shouldFormatColumns:!0,headers:this.headers};const t=h.gatherHeaders(e);return this.headers=t,this.fieldFormatter.headers=t,this.shouldWriteHeaders?{shouldFormatColumns:!n.default(t,e),headers:t}:{shouldFormatColumns:!0,headers:null}}gatherColumns(e){if(null===this.headers)throw new Error("Headers is currently null");return Array.isArray(e)?h.isRowHashArray(e)?this.headers.map((t,r)=>{const i=e[r];return i?i[1]:""}):h.isRowArray(e)&&!this.shouldWriteHeaders?e:this.headers.map((t,r)=>e[r]):this.headers.map(t=>e[t])}callTransformer(e,t){return this._rowTransform?this._rowTransform(e,t):t(null,e)}formatColumns(e,t){const r=e.map((e,r)=>this.fieldFormatter.format(e,r,t)).join(this.formatterOptions.delimiter),{rowCount:i}=this;return this.rowCount+=1,i?[this.formatterOptions.rowDelimiter,r].join(""):r}}r.RowFormatter=h},{"../types":152,"./FieldFormatter":148,"lodash.isequal":284,"lodash.isfunction":285}],150:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.FieldFormatter=r.RowFormatter=void 0;var i=e("./RowFormatter");Object.defineProperty(r,"RowFormatter",{enumerable:!0,get:function(){return i.RowFormatter}});var s=e("./FieldFormatter");Object.defineProperty(r,"FieldFormatter",{enumerable:!0,get:function(){return s.FieldFormatter}})},{"./FieldFormatter":148,"./RowFormatter":149}],151:[function(e,t,r){(function(t){(function(){"use strict";var i=Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]},s=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},n=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&i(t,e,r);return s(t,e),t},o=function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||i(t,e,r)};Object.defineProperty(r,"__esModule",{value:!0}),r.writeToPath=r.writeToString=r.writeToBuffer=r.writeToStream=r.write=r.format=r.FormatterOptions=r.CsvFormatterStream=void 0;const a=e("util"),h=e("stream"),l=n(e("fs")),c=e("./FormatterOptions"),u=e("./CsvFormatterStream");o(e("./types"),r);var f=e("./CsvFormatterStream");Object.defineProperty(r,"CsvFormatterStream",{enumerable:!0,get:function(){return f.CsvFormatterStream}});var d=e("./FormatterOptions");Object.defineProperty(r,"FormatterOptions",{enumerable:!0,get:function(){return d.FormatterOptions}}),r.format=e=>new u.CsvFormatterStream(new c.FormatterOptions(e)),r.write=(e,t)=>{const i=r.format(t),s=a.promisify((e,t)=>{i.write(e,void 0,t)});return e.reduce((e,t)=>e.then(()=>s(t)),Promise.resolve()).then(()=>i.end()).catch(e=>{i.emit("error",e)}),i},r.writeToStream=(e,t,i)=>r.write(t,i).pipe(e),r.writeToBuffer=function(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[],n=new h.Writable({write(e,t,r){s.push(e),r()}});return new Promise((o,a)=>{n.on("error",a).on("finish",()=>o(t.concat(s))),r.write(e,i).pipe(n)})},r.writeToString=(e,t)=>r.writeToBuffer(e,t).then(e=>e.toString()),r.writeToPath=(e,t,i)=>{const s=l.createWriteStream(e,{encoding:"utf8"});return r.write(t,i).pipe(s)}}).call(this)}).call(this,e("buffer").Buffer)},{"./CsvFormatterStream":146,"./FormatterOptions":147,"./types":152,buffer:220,fs:216,stream:343,util:365}],152:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.isSyncTransform=void 0,r.isSyncTransform=e=>1===e.length},{}],153:[function(e,t,r){(function(t){(function(){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.CsvParserStream=void 0;const i=e("string_decoder"),s=e("stream"),n=e("./transforms"),o=e("./parser");class a extends s.Transform{constructor(e){super({objectMode:e.objectMode}),this.lines="",this.rowCount=0,this.parsedRowCount=0,this.parsedLineCount=0,this.endEmitted=!1,this.headersEmitted=!1,this.parserOptions=e,this.parser=new o.Parser(e),this.headerTransformer=new n.HeaderTransformer(e),this.decoder=new i.StringDecoder(e.encoding),this.rowTransformerValidator=new n.RowTransformerValidator}get hasHitRowLimit(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}get shouldEmitRows(){return this.parsedRowCount>this.parserOptions.skipRows}get shouldSkipLine(){return this.parsedLineCount<=this.parserOptions.skipLines}transform(e){return this.rowTransformerValidator.rowTransform=e,this}validate(e){return this.rowTransformerValidator.rowValidator=e,this}emit(e){if("end"===e)return this.endEmitted||(this.endEmitted=!0,super.emit("end",this.rowCount)),!1;for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i{const o=e=>e?r(e):n%100!=0?s(n+1):void t(()=>s(n+1));if(this.checkAndEmitHeaders(),n>=i||this.hasHitRowLimit)return r();if(this.parsedLineCount+=1,this.shouldSkipLine)return o();const a=e[n];this.rowCount+=1,this.parsedRowCount+=1;const h=this.rowCount;return this.transformRow(a,(e,t)=>{if(e)return this.rowCount-=1,o(e);if(!t)return o(new Error("expected transform result"));if(t.isValid){if(t.row)return this.pushRow(t.row,o)}else this.emit("data-invalid",t.row,h,t.reason);return o()})};s(0)}transformRow(e,t){try{this.headerTransformer.transform(e,(r,i)=>r?t(r):i?i.isValid?i.row?this.shouldEmitRows?this.rowTransformerValidator.transformAndValidate(i.row,t):this.skipRow(t):(this.rowCount-=1,this.parsedRowCount-=1,t(null,{row:null,isValid:!0})):this.shouldEmitRows?t(null,{isValid:!1,row:e}):this.skipRow(t):t(new Error("Expected result from header transform")))}catch(e){t(e)}}checkAndEmitHeaders(){!this.headersEmitted&&this.headerTransformer.headers&&(this.headersEmitted=!0,this.emit("headers",this.headerTransformer.headers))}skipRow(e){return this.rowCount-=1,e(null,{row:null,isValid:!0})}pushRow(e,t){try{this.parserOptions.objectMode?this.push(e):this.push(JSON.stringify(e)),t()}catch(e){t(e)}}static wrapDoneCallback(e){let t=!1;return function(r){if(r){if(t)throw r;return t=!0,void e(r)}for(var i=arguments.length,s=new Array(i>1?i-1:0),n=1;n1)throw new Error("delimiter option must be one character long");this.escapedDelimiter=s.default(this.delimiter),this.escapeChar=null!==(t=this.escape)&&void 0!==t?t:this.quote,this.supportsComments=!n.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`),this.maxRows>0&&(this.limitRows=!0)}}},{"lodash.escaperegexp":281,"lodash.isnil":286}],155:[function(e,t,r){"use strict";var i=Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]},s=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},n=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&i(t,e,r);return s(t,e),t},o=function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||i(t,e,r)};Object.defineProperty(r,"__esModule",{value:!0}),r.parseString=r.parseFile=r.parseStream=r.parse=r.ParserOptions=r.CsvParserStream=void 0;const a=n(e("fs")),h=e("stream"),l=e("./ParserOptions"),c=e("./CsvParserStream");o(e("./types"),r);var u=e("./CsvParserStream");Object.defineProperty(r,"CsvParserStream",{enumerable:!0,get:function(){return u.CsvParserStream}});var f=e("./ParserOptions");Object.defineProperty(r,"ParserOptions",{enumerable:!0,get:function(){return f.ParserOptions}}),r.parse=e=>new c.CsvParserStream(new l.ParserOptions(e)),r.parseStream=(e,t)=>e.pipe(new c.CsvParserStream(new l.ParserOptions(t))),r.parseFile=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return a.createReadStream(e).pipe(new c.CsvParserStream(new l.ParserOptions(t)))},r.parseString=(e,t)=>{const r=new h.Readable;return r.push(e),r.push(null),r.pipe(new c.CsvParserStream(new l.ParserOptions(t)))}},{"./CsvParserStream":153,"./ParserOptions":154,"./types":169,fs:216,stream:343}],156:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Parser=void 0;const i=e("./Scanner"),s=e("./RowParser"),n=e("./Token");class o{constructor(e){this.parserOptions=e,this.rowParser=new s.RowParser(this.parserOptions)}static removeBOM(e){return e&&65279===e.charCodeAt(0)?e.slice(1):e}parse(e,t){const r=new i.Scanner({line:o.removeBOM(e),parserOptions:this.parserOptions,hasMoreData:t});return this.parserOptions.supportsComments?this.parseWithComments(r):this.parseWithoutComments(r)}parseWithoutComments(e){const t=[];let r=!0;for(;r;)r=this.parseRow(e,t);return{line:e.line,rows:t}}parseWithComments(e){const{parserOptions:t}=this,r=[];for(let i=e.nextCharacterToken;null!==i;i=e.nextCharacterToken)if(n.Token.isTokenComment(i,t)){if(null===e.advancePastLine())return{line:e.lineFromCursor,rows:r};if(!e.hasMoreCharacters)return{line:e.lineFromCursor,rows:r};e.truncateToCursor()}else if(!this.parseRow(e,r))break;return{line:e.line,rows:r}}parseRow(e,t){if(!e.nextNonSpaceToken)return!1;const r=this.rowParser.parse(e);return null!==r&&(this.parserOptions.ignoreEmpty&&s.RowParser.isEmptyRow(r)||t.push(r),!0)}}r.Parser=o},{"./RowParser":157,"./Scanner":158,"./Token":159}],157:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.RowParser=void 0;const i=e("./column"),s=e("./Token");r.RowParser=class{constructor(e){this.parserOptions=e,this.columnParser=new i.ColumnParser(e)}static isEmptyRow(e){return""===e.join("").replace(/\s+/g,"")}parse(e){const{parserOptions:t}=this,{hasMoreData:r}=e,i=e,n=[];let o=this.getStartToken(i,n);for(;o;){if(s.Token.isTokenRowDelimiter(o))return i.advancePastToken(o),!i.hasMoreCharacters&&s.Token.isTokenCarriageReturn(o,t)&&r?null:(i.truncateToCursor(),n);if(!this.shouldSkipColumnParse(i,o,n)){const e=this.columnParser.parse(i);if(null===e)return null;n.push(e)}o=i.nextNonSpaceToken}return r?null:(i.truncateToCursor(),n)}getStartToken(e,t){const r=e.nextNonSpaceToken;return null!==r&&s.Token.isTokenDelimiter(r,this.parserOptions)?(t.push(""),e.nextNonSpaceToken):r}shouldSkipColumnParse(e,t,r){const{parserOptions:i}=this;if(s.Token.isTokenDelimiter(t,i)){e.advancePastToken(t);const n=e.nextCharacterToken;if(!e.hasMoreCharacters||null!==n&&s.Token.isTokenRowDelimiter(n))return r.push(""),!0;if(null!==n&&s.Token.isTokenDelimiter(n,i))return r.push(""),!0}return!1}}},{"./Token":159,"./column":164}],158:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Scanner=void 0;const i=e("./Token"),s=/((?:\r\n)|\n|\r)/;r.Scanner=class{constructor(e){this.cursor=0,this.line=e.line,this.lineLength=this.line.length,this.parserOptions=e.parserOptions,this.hasMoreData=e.hasMoreData,this.cursor=e.cursor||0}get hasMoreCharacters(){return this.lineLength>this.cursor}get nextNonSpaceToken(){const{lineFromCursor:e}=this,t=this.parserOptions.NEXT_TOKEN_REGEXP;if(-1===e.search(t))return null;const r=t.exec(e);if(null==r)return null;const s=r[1],n=this.cursor+(r.index||0);return new i.Token({token:s,startCursor:n,endCursor:n+s.length-1})}get nextCharacterToken(){const{cursor:e,lineLength:t}=this;return t<=e?null:new i.Token({token:this.line[e],startCursor:e,endCursor:e})}get lineFromCursor(){return this.line.substr(this.cursor)}advancePastLine(){const e=s.exec(this.lineFromCursor);return e?(this.cursor+=(e.index||0)+e[0].length,this):this.hasMoreData?null:(this.cursor=this.lineLength,this)}advanceTo(e){return this.cursor=e,this}advanceToToken(e){return this.cursor=e.startCursor,this}advancePastToken(e){return this.cursor=e.endCursor+1,this}truncateToCursor(){return this.line=this.lineFromCursor,this.lineLength=this.line.length,this.cursor=0,this}}},{"./Token":159}],159:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Token=void 0;r.Token=class{constructor(e){this.token=e.token,this.startCursor=e.startCursor,this.endCursor=e.endCursor}static isTokenRowDelimiter(e){const t=e.token;return"\r"===t||"\n"===t||"\r\n"===t}static isTokenCarriageReturn(e,t){return e.token===t.carriageReturn}static isTokenComment(e,t){return t.supportsComments&&!!e&&e.token===t.comment}static isTokenEscapeCharacter(e,t){return e.token===t.escapeChar}static isTokenQuote(e,t){return e.token===t.quote}static isTokenDelimiter(e,t){return e.token===t.delimiter}}},{}],160:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ColumnFormatter=void 0;r.ColumnFormatter=class{constructor(e){e.trim?this.format=e=>e.trim():e.ltrim?this.format=e=>e.trimLeft():e.rtrim?this.format=e=>e.trimRight():this.format=e=>e}}},{}],161:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ColumnParser=void 0;const i=e("./NonQuotedColumnParser"),s=e("./QuotedColumnParser"),n=e("../Token");r.ColumnParser=class{constructor(e){this.parserOptions=e,this.quotedColumnParser=new s.QuotedColumnParser(e),this.nonQuotedColumnParser=new i.NonQuotedColumnParser(e)}parse(e){const{nextNonSpaceToken:t}=e;return null!==t&&n.Token.isTokenQuote(t,this.parserOptions)?(e.advanceToToken(t),this.quotedColumnParser.parse(e)):this.nonQuotedColumnParser.parse(e)}}},{"../Token":159,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],162:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.NonQuotedColumnParser=void 0;const i=e("./ColumnFormatter"),s=e("../Token");r.NonQuotedColumnParser=class{constructor(e){this.parserOptions=e,this.columnFormatter=new i.ColumnFormatter(e)}parse(e){if(!e.hasMoreCharacters)return null;const{parserOptions:t}=this,r=[];let i=e.nextCharacterToken;for(;i&&(!s.Token.isTokenDelimiter(i,t)&&!s.Token.isTokenRowDelimiter(i));i=e.nextCharacterToken)r.push(i.token),e.advancePastToken(i);return this.columnFormatter.format(r.join(""))}}},{"../Token":159,"./ColumnFormatter":160}],163:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.QuotedColumnParser=void 0;const i=e("./ColumnFormatter"),s=e("../Token");r.QuotedColumnParser=class{constructor(e){this.parserOptions=e,this.columnFormatter=new i.ColumnFormatter(e)}parse(e){if(!e.hasMoreCharacters)return null;const t=e.cursor,{foundClosingQuote:r,col:i}=this.gatherDataBetweenQuotes(e);if(!r){if(e.advanceTo(t),!e.hasMoreData)throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote||""}' in line: at '${e.lineFromCursor.replace(/[\r\n]/g,"\\n'")}'`);return null}return this.checkForMalformedColumn(e),i}gatherDataBetweenQuotes(e){const{parserOptions:t}=this;let r=!1,i=!1;const n=[];let o=e.nextCharacterToken;for(;!i&&null!==o;o=e.nextCharacterToken){const a=s.Token.isTokenQuote(o,t);if(!r&&a)r=!0;else if(r)if(s.Token.isTokenEscapeCharacter(o,t)){e.advancePastToken(o);const r=e.nextCharacterToken;null!==r&&(s.Token.isTokenQuote(r,t)||s.Token.isTokenEscapeCharacter(r,t))?(n.push(r.token),o=r):a?i=!0:n.push(o.token)}else a?i=!0:n.push(o.token);e.advancePastToken(o)}return{col:this.columnFormatter.format(n.join("")),foundClosingQuote:i}}checkForMalformedColumn(e){const{parserOptions:t}=this,{nextNonSpaceToken:r}=e;if(r){const i=s.Token.isTokenDelimiter(r,t),n=s.Token.isTokenRowDelimiter(r);if(!i&&!n){const i=e.lineFromCursor.substr(0,10).replace(/[\r\n]/g,"\\n'");throw new Error(`Parse Error: expected: '${t.escapedDelimiter}' OR new line got: '${r.token}'. at '${i}`)}e.advanceToToken(r)}else e.hasMoreData||e.advancePastLine()}}},{"../Token":159,"./ColumnFormatter":160}],164:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ColumnFormatter=r.QuotedColumnParser=r.NonQuotedColumnParser=r.ColumnParser=void 0;var i=e("./ColumnParser");Object.defineProperty(r,"ColumnParser",{enumerable:!0,get:function(){return i.ColumnParser}});var s=e("./NonQuotedColumnParser");Object.defineProperty(r,"NonQuotedColumnParser",{enumerable:!0,get:function(){return s.NonQuotedColumnParser}});var n=e("./QuotedColumnParser");Object.defineProperty(r,"QuotedColumnParser",{enumerable:!0,get:function(){return n.QuotedColumnParser}});var o=e("./ColumnFormatter");Object.defineProperty(r,"ColumnFormatter",{enumerable:!0,get:function(){return o.ColumnFormatter}})},{"./ColumnFormatter":160,"./ColumnParser":161,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],165:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.QuotedColumnParser=r.NonQuotedColumnParser=r.ColumnParser=r.Token=r.Scanner=r.RowParser=r.Parser=void 0;var i=e("./Parser");Object.defineProperty(r,"Parser",{enumerable:!0,get:function(){return i.Parser}});var s=e("./RowParser");Object.defineProperty(r,"RowParser",{enumerable:!0,get:function(){return s.RowParser}});var n=e("./Scanner");Object.defineProperty(r,"Scanner",{enumerable:!0,get:function(){return n.Scanner}});var o=e("./Token");Object.defineProperty(r,"Token",{enumerable:!0,get:function(){return o.Token}});var a=e("./column");Object.defineProperty(r,"ColumnParser",{enumerable:!0,get:function(){return a.ColumnParser}}),Object.defineProperty(r,"NonQuotedColumnParser",{enumerable:!0,get:function(){return a.NonQuotedColumnParser}}),Object.defineProperty(r,"QuotedColumnParser",{enumerable:!0,get:function(){return a.QuotedColumnParser}})},{"./Parser":156,"./RowParser":157,"./Scanner":158,"./Token":159,"./column":164}],166:[function(e,t,r){"use strict";var i=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.HeaderTransformer=void 0;const s=i(e("lodash.isundefined")),n=i(e("lodash.isfunction")),o=i(e("lodash.uniq")),a=i(e("lodash.groupby"));r.HeaderTransformer=class{constructor(e){this.headers=null,this.receivedHeaders=!1,this.shouldUseFirstRow=!1,this.processedFirstRow=!1,this.headersLength=0,this.parserOptions=e,!0===e.headers?this.shouldUseFirstRow=!0:Array.isArray(e.headers)?this.setHeaders(e.headers):n.default(e.headers)&&(this.headersTransform=e.headers)}transform(e,t){return this.shouldMapRow(e)?t(null,this.processRow(e)):t(null,{row:null,isValid:!0})}shouldMapRow(e){const{parserOptions:t}=this;if(!this.headersTransform&&t.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders)throw new Error("Error renaming headers: new headers must be provided in an array");return this.processedFirstRow=!0,!1}if(!this.receivedHeaders&&Array.isArray(e)){if(this.headersTransform)this.setHeaders(this.headersTransform(e));else{if(!this.shouldUseFirstRow)return!0;this.setHeaders(e)}return!1}return!0}processRow(e){if(!this.headers)return{row:e,isValid:!0};const{parserOptions:t}=this;if(!t.discardUnmappedColumns&&e.length>this.headersLength){if(!t.strictColumnHandling)throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${e.length}`);return{row:e,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${e.length}`}}return t.strictColumnHandling&&e.length!!e);if(o.default(r).length!==r.length){const e=a.default(r),t=Object.keys(e).filter(t=>e[t].length>1);throw new Error("Duplicate headers found "+JSON.stringify(t))}this.headers=e,this.receivedHeaders=!0,this.headersLength=(null===(t=this.headers)||void 0===t?void 0:t.length)||0}}},{"lodash.groupby":282,"lodash.isfunction":285,"lodash.isundefined":287,"lodash.uniq":288}],167:[function(e,t,r){"use strict";var i=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.RowTransformerValidator=void 0;const s=i(e("lodash.isfunction")),n=e("../types");class o{constructor(){this._rowTransform=null,this._rowValidator=null}static createTransform(e){return n.isSyncTransform(e)?(t,r)=>{let i=null;try{i=e(t)}catch(e){return r(e)}return r(null,i)}:e}static createValidator(e){return n.isSyncValidate(e)?(t,r)=>{r(null,{row:t,isValid:e(t)})}:(t,r)=>{e(t,(e,i,s)=>e?r(e):r(null,i?{row:t,isValid:i,reason:s}:{row:t,isValid:!1,reason:s}))}}set rowTransform(e){if(!s.default(e))throw new TypeError("The transform should be a function");this._rowTransform=o.createTransform(e)}set rowValidator(e){if(!s.default(e))throw new TypeError("The validate should be a function");this._rowValidator=o.createValidator(e)}transformAndValidate(e,t){return this.callTransformer(e,(e,r)=>e?t(e):r?this.callValidator(r,(e,i)=>e?t(e):i&&!i.isValid?t(null,{row:r,isValid:!1,reason:i.reason}):t(null,{row:r,isValid:!0})):t(null,{row:null,isValid:!0}))}callTransformer(e,t){return this._rowTransform?this._rowTransform(e,t):t(null,e)}callValidator(e,t){return this._rowValidator?this._rowValidator(e,t):t(null,{row:e,isValid:!0})}}r.RowTransformerValidator=o},{"../types":169,"lodash.isfunction":285}],168:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.HeaderTransformer=r.RowTransformerValidator=void 0;var i=e("./RowTransformerValidator");Object.defineProperty(r,"RowTransformerValidator",{enumerable:!0,get:function(){return i.RowTransformerValidator}});var s=e("./HeaderTransformer");Object.defineProperty(r,"HeaderTransformer",{enumerable:!0,get:function(){return s.HeaderTransformer}})},{"./HeaderTransformer":166,"./RowTransformerValidator":167}],169:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.isSyncValidate=r.isSyncTransform=void 0,r.isSyncTransform=e=>1===e.length,r.isSyncValidate=e=>1===e.length},{}],170:[function(e,t,r){"use strict";const i=r;i.bignum=e("bn.js"),i.define=e("./asn1/api").define,i.base=e("./asn1/base"),i.constants=e("./asn1/constants"),i.decoders=e("./asn1/decoders"),i.encoders=e("./asn1/encoders")},{"./asn1/api":171,"./asn1/base":173,"./asn1/constants":177,"./asn1/decoders":179,"./asn1/encoders":182,"bn.js":184}],171:[function(e,t,r){"use strict";const i=e("./encoders"),s=e("./decoders"),n=e("inherits");function o(e,t){this.name=e,this.body=t,this.decoders={},this.encoders={}}r.define=function(e,t){return new o(e,t)},o.prototype._createNamed=function(e){const t=this.name;function r(e){this._initNamed(e,t)}return n(r,e),r.prototype._initNamed=function(t,r){e.call(this,t,r)},new r(this)},o.prototype._getDecoder=function(e){return e=e||"der",this.decoders.hasOwnProperty(e)||(this.decoders[e]=this._createNamed(s[e])),this.decoders[e]},o.prototype.decode=function(e,t,r){return this._getDecoder(t).decode(e,r)},o.prototype._getEncoder=function(e){return e=e||"der",this.encoders.hasOwnProperty(e)||(this.encoders[e]=this._createNamed(i[e])),this.encoders[e]},o.prototype.encode=function(e,t,r){return this._getEncoder(t).encode(e,r)}},{"./decoders":179,"./encoders":182,inherits:279}],172:[function(e,t,r){"use strict";const i=e("inherits"),s=e("../base/reporter").Reporter,n=e("safer-buffer").Buffer;function o(e,t){s.call(this,t),n.isBuffer(e)?(this.base=e,this.offset=0,this.length=e.length):this.error("Input not Buffer")}function a(e,t){if(Array.isArray(e))this.length=0,this.value=e.map((function(e){return a.isEncoderBuffer(e)||(e=new a(e,t)),this.length+=e.length,e}),this);else if("number"==typeof e){if(!(0<=e&&e<=255))return t.error("non-byte EncoderBuffer value");this.value=e,this.length=1}else if("string"==typeof e)this.value=e,this.length=n.byteLength(e);else{if(!n.isBuffer(e))return t.error("Unsupported type: "+typeof e);this.value=e,this.length=e.length}}i(o,s),r.DecoderBuffer=o,o.isDecoderBuffer=function(e){if(e instanceof o)return!0;return"object"==typeof e&&n.isBuffer(e.base)&&"DecoderBuffer"===e.constructor.name&&"number"==typeof e.offset&&"number"==typeof e.length&&"function"==typeof e.save&&"function"==typeof e.restore&&"function"==typeof e.isEmpty&&"function"==typeof e.readUInt8&&"function"==typeof e.skip&&"function"==typeof e.raw},o.prototype.save=function(){return{offset:this.offset,reporter:s.prototype.save.call(this)}},o.prototype.restore=function(e){const t=new o(this.base);return t.offset=e.offset,t.length=this.offset,this.offset=e.offset,s.prototype.restore.call(this,e.reporter),t},o.prototype.isEmpty=function(){return this.offset===this.length},o.prototype.readUInt8=function(e){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(e||"DecoderBuffer overrun")},o.prototype.skip=function(e,t){if(!(this.offset+e<=this.length))return this.error(t||"DecoderBuffer overrun");const r=new o(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+e,this.offset+=e,r},o.prototype.raw=function(e){return this.base.slice(e?e.offset:this.offset,this.length)},r.EncoderBuffer=a,a.isEncoderBuffer=function(e){if(e instanceof a)return!0;return"object"==typeof e&&"EncoderBuffer"===e.constructor.name&&"number"==typeof e.length&&"function"==typeof e.join},a.prototype.join=function(e,t){return e||(e=n.alloc(this.length)),t||(t=0),0===this.length||(Array.isArray(this.value)?this.value.forEach((function(r){r.join(e,t),t+=r.length})):("number"==typeof this.value?e[t]=this.value:"string"==typeof this.value?e.write(this.value,t):n.isBuffer(this.value)&&this.value.copy(e,t),t+=this.length)),e}},{"../base/reporter":175,inherits:279,"safer-buffer":333}],173:[function(e,t,r){"use strict";const i=r;i.Reporter=e("./reporter").Reporter,i.DecoderBuffer=e("./buffer").DecoderBuffer,i.EncoderBuffer=e("./buffer").EncoderBuffer,i.Node=e("./node")},{"./buffer":172,"./node":174,"./reporter":175}],174:[function(e,t,r){"use strict";const i=e("../base/reporter").Reporter,s=e("../base/buffer").EncoderBuffer,n=e("../base/buffer").DecoderBuffer,o=e("minimalistic-assert"),a=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],h=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(a);function l(e,t,r){const i={};this._baseState=i,i.name=r,i.enc=e,i.parent=t||null,i.children=null,i.tag=null,i.args=null,i.reverseArgs=null,i.choice=null,i.optional=!1,i.any=!1,i.obj=!1,i.use=null,i.useDecoder=null,i.key=null,i.default=null,i.explicit=null,i.implicit=null,i.contains=null,i.parent||(i.children=[],this._wrap())}t.exports=l;const c=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];l.prototype.clone=function(){const e=this._baseState,t={};c.forEach((function(r){t[r]=e[r]}));const r=new this.constructor(t.parent);return r._baseState=t,r},l.prototype._wrap=function(){const e=this._baseState;h.forEach((function(t){this[t]=function(){const r=new this.constructor(this);return e.children.push(r),r[t].apply(r,arguments)}}),this)},l.prototype._init=function(e){const t=this._baseState;o(null===t.parent),e.call(this),t.children=t.children.filter((function(e){return e._baseState.parent===this}),this),o.equal(t.children.length,1,"Root node can have only one child")},l.prototype._useArgs=function(e){const t=this._baseState,r=e.filter((function(e){return e instanceof this.constructor}),this);e=e.filter((function(e){return!(e instanceof this.constructor)}),this),0!==r.length&&(o(null===t.children),t.children=r,r.forEach((function(e){e._baseState.parent=this}),this)),0!==e.length&&(o(null===t.args),t.args=e,t.reverseArgs=e.map((function(e){if("object"!=typeof e||e.constructor!==Object)return e;const t={};return Object.keys(e).forEach((function(r){r==(0|r)&&(r|=0);const i=e[r];t[i]=r})),t})))},["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"].forEach((function(e){l.prototype[e]=function(){const t=this._baseState;throw new Error(e+" not implemented for encoding: "+t.enc)}})),a.forEach((function(e){l.prototype[e]=function(){const t=this._baseState,r=Array.prototype.slice.call(arguments);return o(null===t.tag),t.tag=e,this._useArgs(r),this}})),l.prototype.use=function(e){o(e);const t=this._baseState;return o(null===t.use),t.use=e,this},l.prototype.optional=function(){return this._baseState.optional=!0,this},l.prototype.def=function(e){const t=this._baseState;return o(null===t.default),t.default=e,t.optional=!0,this},l.prototype.explicit=function(e){const t=this._baseState;return o(null===t.explicit&&null===t.implicit),t.explicit=e,this},l.prototype.implicit=function(e){const t=this._baseState;return o(null===t.explicit&&null===t.implicit),t.implicit=e,this},l.prototype.obj=function(){const e=this._baseState,t=Array.prototype.slice.call(arguments);return e.obj=!0,0!==t.length&&this._useArgs(t),this},l.prototype.key=function(e){const t=this._baseState;return o(null===t.key),t.key=e,this},l.prototype.any=function(){return this._baseState.any=!0,this},l.prototype.choice=function(e){const t=this._baseState;return o(null===t.choice),t.choice=e,this._useArgs(Object.keys(e).map((function(t){return e[t]}))),this},l.prototype.contains=function(e){const t=this._baseState;return o(null===t.use),t.contains=e,this},l.prototype._decode=function(e,t){const r=this._baseState;if(null===r.parent)return e.wrapResult(r.children[0]._decode(e,t));let i,s=r.default,o=!0,a=null;if(null!==r.key&&(a=e.enterKey(r.key)),r.optional){let i=null;if(null!==r.explicit?i=r.explicit:null!==r.implicit?i=r.implicit:null!==r.tag&&(i=r.tag),null!==i||r.any){if(o=this._peekTag(e,i,r.any),e.isError(o))return o}else{const i=e.save();try{null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t),o=!0}catch(e){o=!1}e.restore(i)}}if(r.obj&&o&&(i=e.enterObject()),o){if(null!==r.explicit){const t=this._decodeTag(e,r.explicit);if(e.isError(t))return t;e=t}const i=e.offset;if(null===r.use&&null===r.choice){let t;r.any&&(t=e.save());const i=this._decodeTag(e,null!==r.implicit?r.implicit:r.tag,r.any);if(e.isError(i))return i;r.any?s=e.raw(t):e=i}if(t&&t.track&&null!==r.tag&&t.track(e.path(),i,e.length,"tagged"),t&&t.track&&null!==r.tag&&t.track(e.path(),e.offset,e.length,"content"),r.any||(s=null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t)),e.isError(s))return s;if(r.any||null!==r.choice||null===r.children||r.children.forEach((function(r){r._decode(e,t)})),r.contains&&("octstr"===r.tag||"bitstr"===r.tag)){const i=new n(s);s=this._getUse(r.contains,e._reporterState.obj)._decode(i,t)}}return r.obj&&o&&(s=e.leaveObject(i)),null===r.key||null===s&&!0!==o?null!==a&&e.exitKey(a):e.leaveKey(a,r.key,s),s},l.prototype._decodeGeneric=function(e,t,r){const i=this._baseState;return"seq"===e||"set"===e?null:"seqof"===e||"setof"===e?this._decodeList(t,e,i.args[0],r):/str$/.test(e)?this._decodeStr(t,e,r):"objid"===e&&i.args?this._decodeObjid(t,i.args[0],i.args[1],r):"objid"===e?this._decodeObjid(t,null,null,r):"gentime"===e||"utctime"===e?this._decodeTime(t,e,r):"null_"===e?this._decodeNull(t,r):"bool"===e?this._decodeBool(t,r):"objDesc"===e?this._decodeStr(t,e,r):"int"===e||"enum"===e?this._decodeInt(t,i.args&&i.args[0],r):null!==i.use?this._getUse(i.use,t._reporterState.obj)._decode(t,r):t.error("unknown tag: "+e)},l.prototype._getUse=function(e,t){const r=this._baseState;return r.useDecoder=this._use(e,t),o(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},l.prototype._decodeChoice=function(e,t){const r=this._baseState;let i=null,s=!1;return Object.keys(r.choice).some((function(n){const o=e.save(),a=r.choice[n];try{const r=a._decode(e,t);if(e.isError(r))return!1;i={type:n,value:r},s=!0}catch(t){return e.restore(o),!1}return!0}),this),s?i:e.error("Choice not matched")},l.prototype._createEncoderBuffer=function(e){return new s(e,this.reporter)},l.prototype._encode=function(e,t,r){const i=this._baseState;if(null!==i.default&&i.default===e)return;const s=this._encodeValue(e,t,r);return void 0===s||this._skipDefault(s,t,r)?void 0:s},l.prototype._encodeValue=function(e,t,r){const s=this._baseState;if(null===s.parent)return s.children[0]._encode(e,t||new i);let n=null;if(this.reporter=t,s.optional&&void 0===e){if(null===s.default)return;e=s.default}let o=null,a=!1;if(s.any)n=this._createEncoderBuffer(e);else if(s.choice)n=this._encodeChoice(e,t);else if(s.contains)o=this._getUse(s.contains,r)._encode(e,t),a=!0;else if(s.children)o=s.children.map((function(r){if("null_"===r._baseState.tag)return r._encode(null,t,e);if(null===r._baseState.key)return t.error("Child should have a key");const i=t.enterKey(r._baseState.key);if("object"!=typeof e)return t.error("Child expected, but input is not object");const s=r._encode(e[r._baseState.key],t,e);return t.leaveKey(i),s}),this).filter((function(e){return e})),o=this._createEncoderBuffer(o);else if("seqof"===s.tag||"setof"===s.tag){if(!s.args||1!==s.args.length)return t.error("Too many args for : "+s.tag);if(!Array.isArray(e))return t.error("seqof/setof, but data is not Array");const r=this.clone();r._baseState.implicit=null,o=this._createEncoderBuffer(e.map((function(r){const i=this._baseState;return this._getUse(i.args[0],e)._encode(r,t)}),r))}else null!==s.use?n=this._getUse(s.use,r)._encode(e,t):(o=this._encodePrimitive(s.tag,e),a=!0);if(!s.any&&null===s.choice){const e=null!==s.implicit?s.implicit:s.tag,r=null===s.implicit?"universal":"context";null===e?null===s.use&&t.error("Tag could be omitted only for .use()"):null===s.use&&(n=this._encodeComposite(e,a,r,o))}return null!==s.explicit&&(n=this._encodeComposite(s.explicit,!1,"context",n)),n},l.prototype._encodeChoice=function(e,t){const r=this._baseState,i=r.choice[e.type];return i||o(!1,e.type+" not found in "+JSON.stringify(Object.keys(r.choice))),i._encode(e.value,t)},l.prototype._encodePrimitive=function(e,t){const r=this._baseState;if(/str$/.test(e))return this._encodeStr(t,e);if("objid"===e&&r.args)return this._encodeObjid(t,r.reverseArgs[0],r.args[1]);if("objid"===e)return this._encodeObjid(t,null,null);if("gentime"===e||"utctime"===e)return this._encodeTime(t,e);if("null_"===e)return this._encodeNull();if("int"===e||"enum"===e)return this._encodeInt(t,r.args&&r.reverseArgs[0]);if("bool"===e)return this._encodeBool(t);if("objDesc"===e)return this._encodeStr(t,e);throw new Error("Unsupported tag: "+e)},l.prototype._isNumstr=function(e){return/^[0-9 ]*$/.test(e)},l.prototype._isPrintstr=function(e){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(e)}},{"../base/buffer":172,"../base/reporter":175,"minimalistic-assert":292}],175:[function(e,t,r){"use strict";const i=e("inherits");function s(e){this._reporterState={obj:null,path:[],options:e||{},errors:[]}}function n(e,t){this.path=e,this.rethrow(t)}r.Reporter=s,s.prototype.isError=function(e){return e instanceof n},s.prototype.save=function(){const e=this._reporterState;return{obj:e.obj,pathLen:e.path.length}},s.prototype.restore=function(e){const t=this._reporterState;t.obj=e.obj,t.path=t.path.slice(0,e.pathLen)},s.prototype.enterKey=function(e){return this._reporterState.path.push(e)},s.prototype.exitKey=function(e){const t=this._reporterState;t.path=t.path.slice(0,e-1)},s.prototype.leaveKey=function(e,t,r){const i=this._reporterState;this.exitKey(e),null!==i.obj&&(i.obj[t]=r)},s.prototype.path=function(){return this._reporterState.path.join("/")},s.prototype.enterObject=function(){const e=this._reporterState,t=e.obj;return e.obj={},t},s.prototype.leaveObject=function(e){const t=this._reporterState,r=t.obj;return t.obj=e,r},s.prototype.error=function(e){let t;const r=this._reporterState,i=e instanceof n;if(t=i?e:new n(r.path.map((function(e){return"["+JSON.stringify(e)+"]"})).join(""),e.message||e,e.stack),!r.options.partial)throw t;return i||r.errors.push(t),t},s.prototype.wrapResult=function(e){const t=this._reporterState;return t.options.partial?{result:this.isError(e)?null:e,errors:t.errors}:e},i(n,Error),n.prototype.rethrow=function(e){if(this.message=e+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,n),!this.stack)try{throw new Error(this.message)}catch(e){this.stack=e.stack}return this}},{inherits:279}],176:[function(e,t,r){"use strict";function i(e){const t={};return Object.keys(e).forEach((function(r){(0|r)==r&&(r|=0);const i=e[r];t[i]=r})),t}r.tagClass={0:"universal",1:"application",2:"context",3:"private"},r.tagClassByName=i(r.tagClass),r.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},r.tagByName=i(r.tag)},{}],177:[function(e,t,r){"use strict";const i=r;i._reverse=function(e){const t={};return Object.keys(e).forEach((function(r){(0|r)==r&&(r|=0);const i=e[r];t[i]=r})),t},i.der=e("./der")},{"./der":176}],178:[function(e,t,r){"use strict";const i=e("inherits"),s=e("bn.js"),n=e("../base/buffer").DecoderBuffer,o=e("../base/node"),a=e("../constants/der");function h(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=new l,this.tree._init(e.body)}function l(e){o.call(this,"der",e)}function c(e,t){let r=e.readUInt8(t);if(e.isError(r))return r;const i=a.tagClass[r>>6],s=0==(32&r);if(31==(31&r)){let i=r;for(r=0;128==(128&i);){if(i=e.readUInt8(t),e.isError(i))return i;r<<=7,r|=127&i}}else r&=31;return{cls:i,primitive:s,tag:r,tagStr:a.tag[r]}}function u(e,t,r){let i=e.readUInt8(r);if(e.isError(i))return i;if(!t&&128===i)return null;if(0==(128&i))return i;const s=127&i;if(s>4)return e.error("length octect is too long");i=0;for(let t=0;t=31)return i.error("Multi-octet tag encoding unsupported");t||(s|=32);return s|=o.tagClassByName[r||"universal"]<<6,s}(e,t,r,this.reporter);if(i.length<128){const e=s.alloc(2);return e[0]=n,e[1]=i.length,this._createEncoderBuffer([e,i])}let a=1;for(let e=i.length;e>=256;e>>=8)a++;const h=s.alloc(2+a);h[0]=n,h[1]=128|a;for(let e=1+a,t=i.length;t>0;e--,t>>=8)h[e]=255&t;return this._createEncoderBuffer([h,i])},h.prototype._encodeStr=function(e,t){if("bitstr"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if("bmpstr"===t){const t=s.alloc(2*e.length);for(let r=0;r=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}let i=0;for(let t=0;t=128;r>>=7)i++}const n=s.alloc(i);let o=n.length-1;for(let t=e.length-1;t>=0;t--){let r=e[t];for(n[o--]=127&r;(r>>=7)>0;)n[o--]=128|127&r}return this._createEncoderBuffer(n)},h.prototype._encodeTime=function(e,t){let r;const i=new Date(e);return"gentime"===t?r=[l(i.getUTCFullYear()),l(i.getUTCMonth()+1),l(i.getUTCDate()),l(i.getUTCHours()),l(i.getUTCMinutes()),l(i.getUTCSeconds()),"Z"].join(""):"utctime"===t?r=[l(i.getUTCFullYear()%100),l(i.getUTCMonth()+1),l(i.getUTCDate()),l(i.getUTCHours()),l(i.getUTCMinutes()),l(i.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+t+" time is not supported yet"),this._encodeStr(r,"octstr")},h.prototype._encodeNull=function(){return this._createEncoderBuffer("")},h.prototype._encodeInt=function(e,t){if("string"==typeof e){if(!t)return this.reporter.error("String int or enum given, but no values map");if(!t.hasOwnProperty(e))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(e));e=t[e]}if("number"!=typeof e&&!s.isBuffer(e)){const t=e.toArray();!e.sign&&128&t[0]&&t.unshift(0),e=s.from(t)}if(s.isBuffer(e)){let t=e.length;0===e.length&&t++;const r=s.alloc(t);return e.copy(r),0===e.length&&(r[0]=0),this._createEncoderBuffer(r)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);let r=1;for(let t=e;t>=256;t>>=8)r++;const i=new Array(r);for(let t=i.length-1;t>=0;t--)i[t]=255&e,e>>=8;return 128&i[0]&&i.unshift(0),this._createEncoderBuffer(s.from(i))},h.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},h.prototype._use=function(e,t){return"function"==typeof e&&(e=e(t)),e._getEncoder("der").tree},h.prototype._skipDefault=function(e,t,r){const i=this._baseState;let s;if(null===i.default)return!1;const n=e.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i.default,t,r).join()),n.length!==i.defaultBuffer.length)return!1;for(s=0;s=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function h(e,t,r){var i=a(e,r);return r-1>=t&&(i|=a(e,r-1)<<4),i}function l(e,t,r,i){for(var s=0,n=Math.min(e.length,r),o=t;o=49?a-49+10:a>=17?a-17+10:a}return s}n.isBN=function(e){return e instanceof n||null!==e&&"object"==typeof e&&e.constructor.wordSize===n.wordSize&&Array.isArray(e.words)},n.max=function(e,t){return e.cmp(t)>0?e:t},n.min=function(e,t){return e.cmp(t)<0?e:t},n.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"==typeof e)return this._initArray(e,t,r);"hex"===t&&(t=16),i(t===(0|t)&&t>=2&&t<=36);var s=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&(s++,this.negative=1),s=0;s-=3)o=e[s]|e[s-1]<<8|e[s-2]<<16,this.words[n]|=o<>>26-a&67108863,(a+=24)>=26&&(a-=26,n++);else if("le"===r)for(s=0,n=0;s>>26-a&67108863,(a+=24)>=26&&(a-=26,n++);return this.strip()},n.prototype._parseHex=function(e,t,r){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var i=0;i=t;i-=2)s=h(e,t,i)<=18?(n-=18,o+=1,this.words[o]|=s>>>26):n+=8;else for(i=(e.length-t)%2==0?t+1:t;i=18?(n-=18,o+=1,this.words[o]|=s>>>26):n+=8;this.strip()},n.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var i=0,s=1;s<=67108863;s*=t)i++;i--,s=s/t|0;for(var n=e.length-r,o=n%i,a=Math.min(n,n-o)+r,h=0,c=r;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?""};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],u=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],f=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(e,t,r){r.negative=t.negative^e.negative;var i=e.length+t.length|0;r.length=i,i=i-1|0;var s=0|e.words[0],n=0|t.words[0],o=s*n,a=67108863&o,h=o/67108864|0;r.words[0]=a;for(var l=1;l>>26,u=67108863&h,f=Math.min(l,t.length-1),d=Math.max(0,l-e.length+1);d<=f;d++){var p=l-d|0;c+=(o=(s=0|e.words[p])*(n=0|t.words[d])+u)/67108864|0,u=67108863&o}r.words[l]=0|u,h=0|c}return 0!==h?r.words[l]=0|h:r.length--,r.strip()}n.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var s=0,n=0,o=0;o>>24-s&16777215)||o!==this.length-1?c[6-h.length]+h+r:h+r,(s+=2)>=26&&(s-=26,o--)}for(0!==n&&(r=n.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var l=u[e],d=f[e];r="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(d).toString(e);r=(p=p.idivn(d)).isZero()?m+r:c[l-m.length]+m+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}i(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(e,t){return i(void 0!==o),this.toArrayLike(o,e,t)},n.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},n.prototype.toArrayLike=function(e,t,r){var s=this.byteLength(),n=r||Math.max(1,s);i(s<=n,"byte array longer than desired length"),i(n>0,"Requested array length <= 0"),this.strip();var o,a,h="le"===t,l=new e(n),c=this.clone();if(h){for(a=0;!c.isZero();a++)o=c.andln(255),c.iushrn(8),l[a]=o;for(;a=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},n.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},n.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},n.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},n.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},n.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},n.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var i=0;ie.length?this.clone().ixor(e):e.clone().ixor(this)},n.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},n.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var s=0;s0&&(this.words[s]=~this.words[s]&67108863>>26-r),this.strip()},n.prototype.notn=function(e){return this.clone().inotn(e)},n.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var r=e/26|0,s=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,i=e):(r=e,i=this);for(var s=0,n=0;n>>26;for(;0!==s&&n>>26;if(this.length=r.length,0!==s)this.words[this.length]=s,this.length++;else if(r!==this)for(;ne.length?this.clone().iadd(e):e.clone().iadd(this)},n.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,i,s=this.cmp(e);if(0===s)return this.negative=0,this.length=1,this.words[0]=0,this;s>0?(r=this,i=e):(r=e,i=this);for(var n=0,o=0;o>26,this.words[o]=67108863&t;for(;0!==n&&o>26,this.words[o]=67108863&t;if(0===n&&o>>13,d=0|o[1],p=8191&d,m=d>>>13,b=0|o[2],g=8191&b,y=b>>>13,v=0|o[3],w=8191&v,_=v>>>13,x=0|o[4],S=8191&x,k=x>>>13,M=0|o[5],C=8191&M,T=M>>>13,E=0|o[6],A=8191&E,R=E>>>13,O=0|o[7],I=8191&O,N=O>>>13,P=0|o[8],j=8191&P,B=P>>>13,D=0|o[9],F=8191&D,L=D>>>13,z=0|a[0],U=8191&z,$=z>>>13,H=0|a[1],V=8191&H,q=H>>>13,W=0|a[2],X=8191&W,K=W>>>13,Z=0|a[3],Y=8191&Z,G=Z>>>13,J=0|a[4],Q=8191&J,ee=J>>>13,te=0|a[5],re=8191&te,ie=te>>>13,se=0|a[6],ne=8191&se,oe=se>>>13,ae=0|a[7],he=8191&ae,le=ae>>>13,ce=0|a[8],ue=8191&ce,fe=ce>>>13,de=0|a[9],pe=8191&de,me=de>>>13;r.negative=e.negative^t.negative,r.length=19;var be=(l+(i=Math.imul(u,U))|0)+((8191&(s=(s=Math.imul(u,$))+Math.imul(f,U)|0))<<13)|0;l=((n=Math.imul(f,$))+(s>>>13)|0)+(be>>>26)|0,be&=67108863,i=Math.imul(p,U),s=(s=Math.imul(p,$))+Math.imul(m,U)|0,n=Math.imul(m,$);var ge=(l+(i=i+Math.imul(u,V)|0)|0)+((8191&(s=(s=s+Math.imul(u,q)|0)+Math.imul(f,V)|0))<<13)|0;l=((n=n+Math.imul(f,q)|0)+(s>>>13)|0)+(ge>>>26)|0,ge&=67108863,i=Math.imul(g,U),s=(s=Math.imul(g,$))+Math.imul(y,U)|0,n=Math.imul(y,$),i=i+Math.imul(p,V)|0,s=(s=s+Math.imul(p,q)|0)+Math.imul(m,V)|0,n=n+Math.imul(m,q)|0;var ye=(l+(i=i+Math.imul(u,X)|0)|0)+((8191&(s=(s=s+Math.imul(u,K)|0)+Math.imul(f,X)|0))<<13)|0;l=((n=n+Math.imul(f,K)|0)+(s>>>13)|0)+(ye>>>26)|0,ye&=67108863,i=Math.imul(w,U),s=(s=Math.imul(w,$))+Math.imul(_,U)|0,n=Math.imul(_,$),i=i+Math.imul(g,V)|0,s=(s=s+Math.imul(g,q)|0)+Math.imul(y,V)|0,n=n+Math.imul(y,q)|0,i=i+Math.imul(p,X)|0,s=(s=s+Math.imul(p,K)|0)+Math.imul(m,X)|0,n=n+Math.imul(m,K)|0;var ve=(l+(i=i+Math.imul(u,Y)|0)|0)+((8191&(s=(s=s+Math.imul(u,G)|0)+Math.imul(f,Y)|0))<<13)|0;l=((n=n+Math.imul(f,G)|0)+(s>>>13)|0)+(ve>>>26)|0,ve&=67108863,i=Math.imul(S,U),s=(s=Math.imul(S,$))+Math.imul(k,U)|0,n=Math.imul(k,$),i=i+Math.imul(w,V)|0,s=(s=s+Math.imul(w,q)|0)+Math.imul(_,V)|0,n=n+Math.imul(_,q)|0,i=i+Math.imul(g,X)|0,s=(s=s+Math.imul(g,K)|0)+Math.imul(y,X)|0,n=n+Math.imul(y,K)|0,i=i+Math.imul(p,Y)|0,s=(s=s+Math.imul(p,G)|0)+Math.imul(m,Y)|0,n=n+Math.imul(m,G)|0;var we=(l+(i=i+Math.imul(u,Q)|0)|0)+((8191&(s=(s=s+Math.imul(u,ee)|0)+Math.imul(f,Q)|0))<<13)|0;l=((n=n+Math.imul(f,ee)|0)+(s>>>13)|0)+(we>>>26)|0,we&=67108863,i=Math.imul(C,U),s=(s=Math.imul(C,$))+Math.imul(T,U)|0,n=Math.imul(T,$),i=i+Math.imul(S,V)|0,s=(s=s+Math.imul(S,q)|0)+Math.imul(k,V)|0,n=n+Math.imul(k,q)|0,i=i+Math.imul(w,X)|0,s=(s=s+Math.imul(w,K)|0)+Math.imul(_,X)|0,n=n+Math.imul(_,K)|0,i=i+Math.imul(g,Y)|0,s=(s=s+Math.imul(g,G)|0)+Math.imul(y,Y)|0,n=n+Math.imul(y,G)|0,i=i+Math.imul(p,Q)|0,s=(s=s+Math.imul(p,ee)|0)+Math.imul(m,Q)|0,n=n+Math.imul(m,ee)|0;var _e=(l+(i=i+Math.imul(u,re)|0)|0)+((8191&(s=(s=s+Math.imul(u,ie)|0)+Math.imul(f,re)|0))<<13)|0;l=((n=n+Math.imul(f,ie)|0)+(s>>>13)|0)+(_e>>>26)|0,_e&=67108863,i=Math.imul(A,U),s=(s=Math.imul(A,$))+Math.imul(R,U)|0,n=Math.imul(R,$),i=i+Math.imul(C,V)|0,s=(s=s+Math.imul(C,q)|0)+Math.imul(T,V)|0,n=n+Math.imul(T,q)|0,i=i+Math.imul(S,X)|0,s=(s=s+Math.imul(S,K)|0)+Math.imul(k,X)|0,n=n+Math.imul(k,K)|0,i=i+Math.imul(w,Y)|0,s=(s=s+Math.imul(w,G)|0)+Math.imul(_,Y)|0,n=n+Math.imul(_,G)|0,i=i+Math.imul(g,Q)|0,s=(s=s+Math.imul(g,ee)|0)+Math.imul(y,Q)|0,n=n+Math.imul(y,ee)|0,i=i+Math.imul(p,re)|0,s=(s=s+Math.imul(p,ie)|0)+Math.imul(m,re)|0,n=n+Math.imul(m,ie)|0;var xe=(l+(i=i+Math.imul(u,ne)|0)|0)+((8191&(s=(s=s+Math.imul(u,oe)|0)+Math.imul(f,ne)|0))<<13)|0;l=((n=n+Math.imul(f,oe)|0)+(s>>>13)|0)+(xe>>>26)|0,xe&=67108863,i=Math.imul(I,U),s=(s=Math.imul(I,$))+Math.imul(N,U)|0,n=Math.imul(N,$),i=i+Math.imul(A,V)|0,s=(s=s+Math.imul(A,q)|0)+Math.imul(R,V)|0,n=n+Math.imul(R,q)|0,i=i+Math.imul(C,X)|0,s=(s=s+Math.imul(C,K)|0)+Math.imul(T,X)|0,n=n+Math.imul(T,K)|0,i=i+Math.imul(S,Y)|0,s=(s=s+Math.imul(S,G)|0)+Math.imul(k,Y)|0,n=n+Math.imul(k,G)|0,i=i+Math.imul(w,Q)|0,s=(s=s+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,n=n+Math.imul(_,ee)|0,i=i+Math.imul(g,re)|0,s=(s=s+Math.imul(g,ie)|0)+Math.imul(y,re)|0,n=n+Math.imul(y,ie)|0,i=i+Math.imul(p,ne)|0,s=(s=s+Math.imul(p,oe)|0)+Math.imul(m,ne)|0,n=n+Math.imul(m,oe)|0;var Se=(l+(i=i+Math.imul(u,he)|0)|0)+((8191&(s=(s=s+Math.imul(u,le)|0)+Math.imul(f,he)|0))<<13)|0;l=((n=n+Math.imul(f,le)|0)+(s>>>13)|0)+(Se>>>26)|0,Se&=67108863,i=Math.imul(j,U),s=(s=Math.imul(j,$))+Math.imul(B,U)|0,n=Math.imul(B,$),i=i+Math.imul(I,V)|0,s=(s=s+Math.imul(I,q)|0)+Math.imul(N,V)|0,n=n+Math.imul(N,q)|0,i=i+Math.imul(A,X)|0,s=(s=s+Math.imul(A,K)|0)+Math.imul(R,X)|0,n=n+Math.imul(R,K)|0,i=i+Math.imul(C,Y)|0,s=(s=s+Math.imul(C,G)|0)+Math.imul(T,Y)|0,n=n+Math.imul(T,G)|0,i=i+Math.imul(S,Q)|0,s=(s=s+Math.imul(S,ee)|0)+Math.imul(k,Q)|0,n=n+Math.imul(k,ee)|0,i=i+Math.imul(w,re)|0,s=(s=s+Math.imul(w,ie)|0)+Math.imul(_,re)|0,n=n+Math.imul(_,ie)|0,i=i+Math.imul(g,ne)|0,s=(s=s+Math.imul(g,oe)|0)+Math.imul(y,ne)|0,n=n+Math.imul(y,oe)|0,i=i+Math.imul(p,he)|0,s=(s=s+Math.imul(p,le)|0)+Math.imul(m,he)|0,n=n+Math.imul(m,le)|0;var ke=(l+(i=i+Math.imul(u,ue)|0)|0)+((8191&(s=(s=s+Math.imul(u,fe)|0)+Math.imul(f,ue)|0))<<13)|0;l=((n=n+Math.imul(f,fe)|0)+(s>>>13)|0)+(ke>>>26)|0,ke&=67108863,i=Math.imul(F,U),s=(s=Math.imul(F,$))+Math.imul(L,U)|0,n=Math.imul(L,$),i=i+Math.imul(j,V)|0,s=(s=s+Math.imul(j,q)|0)+Math.imul(B,V)|0,n=n+Math.imul(B,q)|0,i=i+Math.imul(I,X)|0,s=(s=s+Math.imul(I,K)|0)+Math.imul(N,X)|0,n=n+Math.imul(N,K)|0,i=i+Math.imul(A,Y)|0,s=(s=s+Math.imul(A,G)|0)+Math.imul(R,Y)|0,n=n+Math.imul(R,G)|0,i=i+Math.imul(C,Q)|0,s=(s=s+Math.imul(C,ee)|0)+Math.imul(T,Q)|0,n=n+Math.imul(T,ee)|0,i=i+Math.imul(S,re)|0,s=(s=s+Math.imul(S,ie)|0)+Math.imul(k,re)|0,n=n+Math.imul(k,ie)|0,i=i+Math.imul(w,ne)|0,s=(s=s+Math.imul(w,oe)|0)+Math.imul(_,ne)|0,n=n+Math.imul(_,oe)|0,i=i+Math.imul(g,he)|0,s=(s=s+Math.imul(g,le)|0)+Math.imul(y,he)|0,n=n+Math.imul(y,le)|0,i=i+Math.imul(p,ue)|0,s=(s=s+Math.imul(p,fe)|0)+Math.imul(m,ue)|0,n=n+Math.imul(m,fe)|0;var Me=(l+(i=i+Math.imul(u,pe)|0)|0)+((8191&(s=(s=s+Math.imul(u,me)|0)+Math.imul(f,pe)|0))<<13)|0;l=((n=n+Math.imul(f,me)|0)+(s>>>13)|0)+(Me>>>26)|0,Me&=67108863,i=Math.imul(F,V),s=(s=Math.imul(F,q))+Math.imul(L,V)|0,n=Math.imul(L,q),i=i+Math.imul(j,X)|0,s=(s=s+Math.imul(j,K)|0)+Math.imul(B,X)|0,n=n+Math.imul(B,K)|0,i=i+Math.imul(I,Y)|0,s=(s=s+Math.imul(I,G)|0)+Math.imul(N,Y)|0,n=n+Math.imul(N,G)|0,i=i+Math.imul(A,Q)|0,s=(s=s+Math.imul(A,ee)|0)+Math.imul(R,Q)|0,n=n+Math.imul(R,ee)|0,i=i+Math.imul(C,re)|0,s=(s=s+Math.imul(C,ie)|0)+Math.imul(T,re)|0,n=n+Math.imul(T,ie)|0,i=i+Math.imul(S,ne)|0,s=(s=s+Math.imul(S,oe)|0)+Math.imul(k,ne)|0,n=n+Math.imul(k,oe)|0,i=i+Math.imul(w,he)|0,s=(s=s+Math.imul(w,le)|0)+Math.imul(_,he)|0,n=n+Math.imul(_,le)|0,i=i+Math.imul(g,ue)|0,s=(s=s+Math.imul(g,fe)|0)+Math.imul(y,ue)|0,n=n+Math.imul(y,fe)|0;var Ce=(l+(i=i+Math.imul(p,pe)|0)|0)+((8191&(s=(s=s+Math.imul(p,me)|0)+Math.imul(m,pe)|0))<<13)|0;l=((n=n+Math.imul(m,me)|0)+(s>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,i=Math.imul(F,X),s=(s=Math.imul(F,K))+Math.imul(L,X)|0,n=Math.imul(L,K),i=i+Math.imul(j,Y)|0,s=(s=s+Math.imul(j,G)|0)+Math.imul(B,Y)|0,n=n+Math.imul(B,G)|0,i=i+Math.imul(I,Q)|0,s=(s=s+Math.imul(I,ee)|0)+Math.imul(N,Q)|0,n=n+Math.imul(N,ee)|0,i=i+Math.imul(A,re)|0,s=(s=s+Math.imul(A,ie)|0)+Math.imul(R,re)|0,n=n+Math.imul(R,ie)|0,i=i+Math.imul(C,ne)|0,s=(s=s+Math.imul(C,oe)|0)+Math.imul(T,ne)|0,n=n+Math.imul(T,oe)|0,i=i+Math.imul(S,he)|0,s=(s=s+Math.imul(S,le)|0)+Math.imul(k,he)|0,n=n+Math.imul(k,le)|0,i=i+Math.imul(w,ue)|0,s=(s=s+Math.imul(w,fe)|0)+Math.imul(_,ue)|0,n=n+Math.imul(_,fe)|0;var Te=(l+(i=i+Math.imul(g,pe)|0)|0)+((8191&(s=(s=s+Math.imul(g,me)|0)+Math.imul(y,pe)|0))<<13)|0;l=((n=n+Math.imul(y,me)|0)+(s>>>13)|0)+(Te>>>26)|0,Te&=67108863,i=Math.imul(F,Y),s=(s=Math.imul(F,G))+Math.imul(L,Y)|0,n=Math.imul(L,G),i=i+Math.imul(j,Q)|0,s=(s=s+Math.imul(j,ee)|0)+Math.imul(B,Q)|0,n=n+Math.imul(B,ee)|0,i=i+Math.imul(I,re)|0,s=(s=s+Math.imul(I,ie)|0)+Math.imul(N,re)|0,n=n+Math.imul(N,ie)|0,i=i+Math.imul(A,ne)|0,s=(s=s+Math.imul(A,oe)|0)+Math.imul(R,ne)|0,n=n+Math.imul(R,oe)|0,i=i+Math.imul(C,he)|0,s=(s=s+Math.imul(C,le)|0)+Math.imul(T,he)|0,n=n+Math.imul(T,le)|0,i=i+Math.imul(S,ue)|0,s=(s=s+Math.imul(S,fe)|0)+Math.imul(k,ue)|0,n=n+Math.imul(k,fe)|0;var Ee=(l+(i=i+Math.imul(w,pe)|0)|0)+((8191&(s=(s=s+Math.imul(w,me)|0)+Math.imul(_,pe)|0))<<13)|0;l=((n=n+Math.imul(_,me)|0)+(s>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,i=Math.imul(F,Q),s=(s=Math.imul(F,ee))+Math.imul(L,Q)|0,n=Math.imul(L,ee),i=i+Math.imul(j,re)|0,s=(s=s+Math.imul(j,ie)|0)+Math.imul(B,re)|0,n=n+Math.imul(B,ie)|0,i=i+Math.imul(I,ne)|0,s=(s=s+Math.imul(I,oe)|0)+Math.imul(N,ne)|0,n=n+Math.imul(N,oe)|0,i=i+Math.imul(A,he)|0,s=(s=s+Math.imul(A,le)|0)+Math.imul(R,he)|0,n=n+Math.imul(R,le)|0,i=i+Math.imul(C,ue)|0,s=(s=s+Math.imul(C,fe)|0)+Math.imul(T,ue)|0,n=n+Math.imul(T,fe)|0;var Ae=(l+(i=i+Math.imul(S,pe)|0)|0)+((8191&(s=(s=s+Math.imul(S,me)|0)+Math.imul(k,pe)|0))<<13)|0;l=((n=n+Math.imul(k,me)|0)+(s>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,i=Math.imul(F,re),s=(s=Math.imul(F,ie))+Math.imul(L,re)|0,n=Math.imul(L,ie),i=i+Math.imul(j,ne)|0,s=(s=s+Math.imul(j,oe)|0)+Math.imul(B,ne)|0,n=n+Math.imul(B,oe)|0,i=i+Math.imul(I,he)|0,s=(s=s+Math.imul(I,le)|0)+Math.imul(N,he)|0,n=n+Math.imul(N,le)|0,i=i+Math.imul(A,ue)|0,s=(s=s+Math.imul(A,fe)|0)+Math.imul(R,ue)|0,n=n+Math.imul(R,fe)|0;var Re=(l+(i=i+Math.imul(C,pe)|0)|0)+((8191&(s=(s=s+Math.imul(C,me)|0)+Math.imul(T,pe)|0))<<13)|0;l=((n=n+Math.imul(T,me)|0)+(s>>>13)|0)+(Re>>>26)|0,Re&=67108863,i=Math.imul(F,ne),s=(s=Math.imul(F,oe))+Math.imul(L,ne)|0,n=Math.imul(L,oe),i=i+Math.imul(j,he)|0,s=(s=s+Math.imul(j,le)|0)+Math.imul(B,he)|0,n=n+Math.imul(B,le)|0,i=i+Math.imul(I,ue)|0,s=(s=s+Math.imul(I,fe)|0)+Math.imul(N,ue)|0,n=n+Math.imul(N,fe)|0;var Oe=(l+(i=i+Math.imul(A,pe)|0)|0)+((8191&(s=(s=s+Math.imul(A,me)|0)+Math.imul(R,pe)|0))<<13)|0;l=((n=n+Math.imul(R,me)|0)+(s>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,i=Math.imul(F,he),s=(s=Math.imul(F,le))+Math.imul(L,he)|0,n=Math.imul(L,le),i=i+Math.imul(j,ue)|0,s=(s=s+Math.imul(j,fe)|0)+Math.imul(B,ue)|0,n=n+Math.imul(B,fe)|0;var Ie=(l+(i=i+Math.imul(I,pe)|0)|0)+((8191&(s=(s=s+Math.imul(I,me)|0)+Math.imul(N,pe)|0))<<13)|0;l=((n=n+Math.imul(N,me)|0)+(s>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,i=Math.imul(F,ue),s=(s=Math.imul(F,fe))+Math.imul(L,ue)|0,n=Math.imul(L,fe);var Ne=(l+(i=i+Math.imul(j,pe)|0)|0)+((8191&(s=(s=s+Math.imul(j,me)|0)+Math.imul(B,pe)|0))<<13)|0;l=((n=n+Math.imul(B,me)|0)+(s>>>13)|0)+(Ne>>>26)|0,Ne&=67108863;var Pe=(l+(i=Math.imul(F,pe))|0)+((8191&(s=(s=Math.imul(F,me))+Math.imul(L,pe)|0))<<13)|0;return l=((n=Math.imul(L,me))+(s>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,h[0]=be,h[1]=ge,h[2]=ye,h[3]=ve,h[4]=we,h[5]=_e,h[6]=xe,h[7]=Se,h[8]=ke,h[9]=Me,h[10]=Ce,h[11]=Te,h[12]=Ee,h[13]=Ae,h[14]=Re,h[15]=Oe,h[16]=Ie,h[17]=Ne,h[18]=Pe,0!==l&&(h[19]=l,r.length++),r};function m(e,t,r){return(new b).mulp(e,t,r)}function b(e,t){this.x=e,this.y=t}Math.imul||(p=d),n.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?p(this,e,t):r<63?d(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var i=0,s=0,n=0;n>>26)|0)>>>26,o&=67108863}r.words[n]=a,i=o,o=s}return 0!==i?r.words[n]=i:r.length--,r.strip()}(this,e,t):m(this,e,t)},b.prototype.makeRBT=function(e){for(var t=new Array(e),r=n.prototype._countBits(e)-1,i=0;i>=1;return i},b.prototype.permute=function(e,t,r,i,s,n){for(var o=0;o>>=1)s++;return 1<>>=13,r[2*o+1]=8191&n,n>>>=13;for(o=2*t;o>=26,t+=s/67108864|0,t+=n>>>26,this.words[r]=67108863&n}return 0!==t&&(this.words[r]=t,this.length++),this},n.prototype.muln=function(e){return this.clone().imuln(e)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r>>s}return t}(e);if(0===t.length)return new n(1);for(var r=this,i=0;i=0);var t,r=e%26,s=(e-r)/26,n=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(t=0;t>>26-r}o&&(this.words[t]=o,this.length++)}if(0!==s){for(t=this.length-1;t>=0;t--)this.words[t+s]=this.words[t];for(t=0;t=0),s=t?(t-t%26)/26:0;var n=e%26,o=Math.min((e-n)/26,this.length),a=67108863^67108863>>>n<o)for(this.length-=o,l=0;l=0&&(0!==c||l>=s);l--){var u=0|this.words[l];this.words[l]=c<<26-n|u>>>n,c=u&a}return h&&0!==c&&(h.words[h.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(e,t,r){return i(0===this.negative),this.iushrn(e,t,r)},n.prototype.shln=function(e){return this.clone().ishln(e)},n.prototype.ushln=function(e){return this.clone().iushln(e)},n.prototype.shrn=function(e){return this.clone().ishrn(e)},n.prototype.ushrn=function(e){return this.clone().iushrn(e)},n.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,s=1<=0);var t=e%26,r=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var s=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},n.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(h/67108864|0),this.words[s+r]=67108863&n}for(;s>26,this.words[s+r]=67108863&n;if(0===a)return this.strip();for(i(-1===a),a=0,s=0;s>26,this.words[s]=67108863&n;return this.negative=1,this.strip()},n.prototype._wordDiv=function(e,t){var r=(this.length,e.length),i=this.clone(),s=e,o=0|s.words[s.length-1];0!==(r=26-this._countBits(o))&&(s=s.ushln(r),i.iushln(r),o=0|s.words[s.length-1]);var a,h=i.length-s.length;if("mod"!==t){(a=new n(null)).length=h+1,a.words=new Array(a.length);for(var l=0;l=0;u--){var f=67108864*(0|i.words[s.length+u])+(0|i.words[s.length+u-1]);for(f=Math.min(f/o|0,67108863),i._ishlnsubmul(s,f,u);0!==i.negative;)f--,i.negative=0,i._ishlnsubmul(s,1,u),i.isZero()||(i.negative^=1);a&&(a.words[u]=f)}return a&&a.strip(),i.strip(),"div"!==t&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(e,t,r){return i(!e.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===e.negative?(a=this.neg().divmod(e,t),"mod"!==t&&(s=a.div.neg()),"div"!==t&&(o=a.mod.neg(),r&&0!==o.negative&&o.iadd(e)),{div:s,mod:o}):0===this.negative&&0!==e.negative?(a=this.divmod(e.neg(),t),"mod"!==t&&(s=a.div.neg()),{div:s,mod:a.mod}):0!=(this.negative&e.negative)?(a=this.neg().divmod(e.neg(),t),"div"!==t&&(o=a.mod.neg(),r&&0!==o.negative&&o.isub(e)),{div:a.div,mod:o}):e.length>this.length||this.cmp(e)<0?{div:new n(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new n(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new n(this.modn(e.words[0]))}:this._wordDiv(e,t);var s,o,a},n.prototype.div=function(e){return this.divmod(e,"div",!1).div},n.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},n.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},n.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,i=e.ushrn(1),s=e.andln(1),n=r.cmp(i);return n<0||1===s&&0===n?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},n.prototype.modn=function(e){i(e<=67108863);for(var t=(1<<26)%e,r=0,s=this.length-1;s>=0;s--)r=(t*r+(0|this.words[s]))%e;return r},n.prototype.idivn=function(e){i(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var s=(0|this.words[r])+67108864*t;this.words[r]=s/e|0,t=s%e}return this.strip()},n.prototype.divn=function(e){return this.clone().idivn(e)},n.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var s=new n(1),o=new n(0),a=new n(0),h=new n(1),l=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++l;for(var c=r.clone(),u=t.clone();!t.isZero();){for(var f=0,d=1;0==(t.words[0]&d)&&f<26;++f,d<<=1);if(f>0)for(t.iushrn(f);f-- >0;)(s.isOdd()||o.isOdd())&&(s.iadd(c),o.isub(u)),s.iushrn(1),o.iushrn(1);for(var p=0,m=1;0==(r.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(a.isOdd()||h.isOdd())&&(a.iadd(c),h.isub(u)),a.iushrn(1),h.iushrn(1);t.cmp(r)>=0?(t.isub(r),s.isub(a),o.isub(h)):(r.isub(t),a.isub(s),h.isub(o))}return{a:a,b:h,gcd:r.iushln(l)}},n.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var s,o=new n(1),a=new n(0),h=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var l=0,c=1;0==(t.words[0]&c)&&l<26;++l,c<<=1);if(l>0)for(t.iushrn(l);l-- >0;)o.isOdd()&&o.iadd(h),o.iushrn(1);for(var u=0,f=1;0==(r.words[0]&f)&&u<26;++u,f<<=1);if(u>0)for(r.iushrn(u);u-- >0;)a.isOdd()&&a.iadd(h),a.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(a)):(r.isub(t),a.isub(o))}return(s=0===t.cmpn(1)?o:a).cmpn(0)<0&&s.iadd(e),s},n.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var i=0;t.isEven()&&r.isEven();i++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var s=t.cmp(r);if(s<0){var n=t;t=r,r=n}else if(0===s||0===r.cmpn(1))break;t.isub(r)}return r.iushln(i)},n.prototype.invm=function(e){return this.egcd(e).a.umod(e)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(e){return this.words[0]&e},n.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,r=(e-t)/26,s=1<>>26,a&=67108863,this.words[o]=a}return 0!==n&&(this.words[o]=n,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),i(e<=67108863,"Number is too big");var s=0|this.words[0];t=s===e?0:se.length)return 1;if(this.length=0;r--){var i=0|this.words[r],s=0|e.words[r];if(i!==s){is&&(t=1);break}}return t},n.prototype.gtn=function(e){return 1===this.cmpn(e)},n.prototype.gt=function(e){return 1===this.cmp(e)},n.prototype.gten=function(e){return this.cmpn(e)>=0},n.prototype.gte=function(e){return this.cmp(e)>=0},n.prototype.ltn=function(e){return-1===this.cmpn(e)},n.prototype.lt=function(e){return-1===this.cmp(e)},n.prototype.lten=function(e){return this.cmpn(e)<=0},n.prototype.lte=function(e){return this.cmp(e)<=0},n.prototype.eqn=function(e){return 0===this.cmpn(e)},n.prototype.eq=function(e){return 0===this.cmp(e)},n.red=function(e){return new S(e)},n.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},n.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(e){return this.red=e,this},n.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},n.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},n.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},n.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},n.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},n.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},n.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},n.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},n.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function y(e,t){this.name=e,this.p=new n(t,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){y.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function w(){y.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){y.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function x(){y.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function S(e){if("string"==typeof e){var t=n._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function k(e){S.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}y.prototype._tmp=function(){var e=new n(null);return e.words=new Array(Math.ceil(this.n/13)),e},y.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var i=t0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},y.prototype.split=function(e,t){e.iushrn(this.n,0,t)},y.prototype.imulK=function(e){return e.imul(this.k)},s(v,y),v.prototype.split=function(e,t){for(var r=Math.min(e.length,9),i=0;i>>22,s=n}s>>>=22,e.words[i-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},v.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=s,t=i}return 0!==t&&(e.words[e.length++]=t),e},n._prime=function(e){if(g[e])return g[e];var t;if("k256"===e)t=new v;else if("p224"===e)t=new w;else if("p192"===e)t=new _;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new x}return g[e]=t,t},S.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},S.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},S.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},S.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},S.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},S.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},S.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},S.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},S.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},S.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},S.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},S.prototype.isqr=function(e){return this.imul(e,e.clone())},S.prototype.sqr=function(e){return this.mul(e,e)},S.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var r=this.m.add(new n(1)).iushrn(2);return this.pow(e,r)}for(var s=this.m.subn(1),o=0;!s.isZero()&&0===s.andln(1);)o++,s.iushrn(1);i(!s.isZero());var a=new n(1).toRed(this),h=a.redNeg(),l=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new n(2*c*c).toRed(this);0!==this.pow(c,l).cmp(h);)c.redIAdd(h);for(var u=this.pow(c,s),f=this.pow(e,s.addn(1).iushrn(1)),d=this.pow(e,s),p=o;0!==d.cmp(a);){for(var m=d,b=0;0!==m.cmp(a);b++)m=m.redSqr();i(b=0;i--){for(var l=t.words[i],c=h-1;c>=0;c--){var u=l>>c&1;s!==r[0]&&(s=this.sqr(s)),0!==u||0!==o?(o<<=1,o|=u,(4===++a||0===i&&0===c)&&(s=this.mul(s,r[o]),a=0,o=0)):a=0}h=26}return s},S.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},S.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},n.mont=function(e){return new k(e)},s(k,S),k.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},k.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},k.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=r.isub(i).iushrn(this.shift),n=s;return s.cmp(this.m)>=0?n=s.isub(this.m):s.cmpn(0)<0&&(n=s.iadd(this.m)),n._forceRed(this)},k.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new n(0)._forceRed(this);var r=e.mul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=r.isub(i).iushrn(this.shift),o=s;return s.cmp(this.m)>=0?o=s.isub(this.m):s.cmpn(0)<0&&(o=s.iadd(this.m)),o._forceRed(this)},k.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t)},{buffer:188}],185:[function(e,t,r){"use strict";r.byteLength=function(e){var t=l(e),r=t[0],i=t[1];return 3*(r+i)/4-i},r.toByteArray=function(e){var t,r,i=l(e),o=i[0],a=i[1],h=new n(function(e,t,r){return 3*(t+r)/4-r}(0,o,a)),c=0,u=a>0?o-4:o;for(r=0;r>16&255,h[c++]=t>>8&255,h[c++]=255&t;2===a&&(t=s[e.charCodeAt(r)]<<2|s[e.charCodeAt(r+1)]>>4,h[c++]=255&t);1===a&&(t=s[e.charCodeAt(r)]<<10|s[e.charCodeAt(r+1)]<<4|s[e.charCodeAt(r+2)]>>2,h[c++]=t>>8&255,h[c++]=255&t);return h},r.fromByteArray=function(e){for(var t,r=e.length,s=r%3,n=[],o=0,a=r-s;oa?a:o+16383));1===s?(t=e[r-1],n.push(i[t>>2]+i[t<<4&63]+"==")):2===s&&(t=(e[r-2]<<8)+e[r-1],n.push(i[t>>10]+i[t>>4&63]+i[t<<2&63]+"="));return n.join("")};for(var i=[],s=[],n="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,h=o.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function c(e,t,r){for(var s,n,o=[],a=t;a>18&63]+i[n>>12&63]+i[n>>6&63]+i[63&n]);return o.join("")}s["-".charCodeAt(0)]=62,s["_".charCodeAt(0)]=63},{}],186:[function(e,t,r){"use strict";!function(t,r){function i(e,t){if(!e)throw new Error(t||"Assertion failed")}function s(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function n(e,t,r){if(n.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(r=t,t=10),this._init(e||0,t||10,r||"be"))}var o;"object"==typeof t?t.exports=n:(void 0).BN=n,n.BN=n,n.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:e("buffer").Buffer}catch(e){}function a(e,t){var r=e.charCodeAt(t);return r>=48&&r<=57?r-48:r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:void i(!1,"Invalid character in "+e)}function h(e,t,r){var i=a(e,r);return r-1>=t&&(i|=a(e,r-1)<<4),i}function l(e,t,r,s){for(var n=0,o=0,a=Math.min(e.length,r),h=t;h=49?l-49+10:l>=17?l-17+10:l,i(l>=0&&o0?e:t},n.min=function(e,t){return e.cmp(t)<0?e:t},n.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"==typeof e)return this._initArray(e,t,r);"hex"===t&&(t=16),i(t===(0|t)&&t>=2&&t<=36);var s=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&(s++,this.negative=1),s=0;s-=3)o=e[s]|e[s-1]<<8|e[s-2]<<16,this.words[n]|=o<>>26-a&67108863,(a+=24)>=26&&(a-=26,n++);else if("le"===r)for(s=0,n=0;s>>26-a&67108863,(a+=24)>=26&&(a-=26,n++);return this._strip()},n.prototype._parseHex=function(e,t,r){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var i=0;i=t;i-=2)s=h(e,t,i)<=18?(n-=18,o+=1,this.words[o]|=s>>>26):n+=8;else for(i=(e.length-t)%2==0?t+1:t;i=18?(n-=18,o+=1,this.words[o]|=s>>>26):n+=8;this._strip()},n.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var i=0,s=1;s<=67108863;s*=t)i++;i--,s=s/t|0;for(var n=e.length-r,o=n%i,a=Math.min(n,n-o)+r,h=0,c=r;c1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},"undefined"!=typeof Symbol&&"function"==typeof Symbol.for)try{n.prototype[Symbol.for("nodejs.util.inspect.custom")]=u}catch(e){n.prototype.inspect=u}else n.prototype.inspect=u;function u(){return(this.red?""}var f=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],p=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];n.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var s=0,n=0,o=0;o>>24-s&16777215,(s+=2)>=26&&(s-=26,o--),r=0!==n||o!==this.length-1?f[6-h.length]+h+r:h+r}for(0!==n&&(r=n.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var l=d[e],c=p[e];r="";var u=this.clone();for(u.negative=0;!u.isZero();){var m=u.modrn(c).toString(e);r=(u=u.idivn(c)).isZero()?m+r:f[l-m.length]+m+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}i(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},n.prototype.toJSON=function(){return this.toString(16,2)},o&&(n.prototype.toBuffer=function(e,t){return this.toArrayLike(o,e,t)}),n.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)};function m(e,t,r){r.negative=t.negative^e.negative;var i=e.length+t.length|0;r.length=i,i=i-1|0;var s=0|e.words[0],n=0|t.words[0],o=s*n,a=67108863&o,h=o/67108864|0;r.words[0]=a;for(var l=1;l>>26,u=67108863&h,f=Math.min(l,t.length-1),d=Math.max(0,l-e.length+1);d<=f;d++){var p=l-d|0;c+=(o=(s=0|e.words[p])*(n=0|t.words[d])+u)/67108864|0,u=67108863&o}r.words[l]=0|u,h=0|c}return 0!==h?r.words[l]=0|h:r.length--,r._strip()}n.prototype.toArrayLike=function(e,t,r){this._strip();var s=this.byteLength(),n=r||Math.max(1,s);i(s<=n,"byte array longer than desired length"),i(n>0,"Requested array length <= 0");var o=function(e,t){return e.allocUnsafe?e.allocUnsafe(t):new e(t)}(e,n);return this["_toArrayLike"+("le"===t?"LE":"BE")](o,s),o},n.prototype._toArrayLikeLE=function(e,t){for(var r=0,i=0,s=0,n=0;s>8&255),r>16&255),6===n?(r>24&255),i=0,n=0):(i=o>>>24,n+=2)}if(r=0&&(e[r--]=o>>8&255),r>=0&&(e[r--]=o>>16&255),6===n?(r>=0&&(e[r--]=o>>24&255),i=0,n=0):(i=o>>>24,n+=2)}if(r>=0)for(e[r--]=i;r>=0;)e[r--]=0},Math.clz32?n.prototype._countBits=function(e){return 32-Math.clz32(e)}:n.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},n.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},n.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},n.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},n.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},n.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},n.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var i=0;ie.length?this.clone().ixor(e):e.clone().ixor(this)},n.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},n.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var s=0;s0&&(this.words[s]=~this.words[s]&67108863>>26-r),this._strip()},n.prototype.notn=function(e){return this.clone().inotn(e)},n.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var r=e/26|0,s=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,i=e):(r=e,i=this);for(var s=0,n=0;n>>26;for(;0!==s&&n>>26;if(this.length=r.length,0!==s)this.words[this.length]=s,this.length++;else if(r!==this)for(;ne.length?this.clone().iadd(e):e.clone().iadd(this)},n.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,i,s=this.cmp(e);if(0===s)return this.negative=0,this.length=1,this.words[0]=0,this;s>0?(r=this,i=e):(r=e,i=this);for(var n=0,o=0;o>26,this.words[o]=67108863&t;for(;0!==n&&o>26,this.words[o]=67108863&t;if(0===n&&o>>13,d=0|o[1],p=8191&d,m=d>>>13,b=0|o[2],g=8191&b,y=b>>>13,v=0|o[3],w=8191&v,_=v>>>13,x=0|o[4],S=8191&x,k=x>>>13,M=0|o[5],C=8191&M,T=M>>>13,E=0|o[6],A=8191&E,R=E>>>13,O=0|o[7],I=8191&O,N=O>>>13,P=0|o[8],j=8191&P,B=P>>>13,D=0|o[9],F=8191&D,L=D>>>13,z=0|a[0],U=8191&z,$=z>>>13,H=0|a[1],V=8191&H,q=H>>>13,W=0|a[2],X=8191&W,K=W>>>13,Z=0|a[3],Y=8191&Z,G=Z>>>13,J=0|a[4],Q=8191&J,ee=J>>>13,te=0|a[5],re=8191&te,ie=te>>>13,se=0|a[6],ne=8191&se,oe=se>>>13,ae=0|a[7],he=8191&ae,le=ae>>>13,ce=0|a[8],ue=8191&ce,fe=ce>>>13,de=0|a[9],pe=8191&de,me=de>>>13;r.negative=e.negative^t.negative,r.length=19;var be=(l+(i=Math.imul(u,U))|0)+((8191&(s=(s=Math.imul(u,$))+Math.imul(f,U)|0))<<13)|0;l=((n=Math.imul(f,$))+(s>>>13)|0)+(be>>>26)|0,be&=67108863,i=Math.imul(p,U),s=(s=Math.imul(p,$))+Math.imul(m,U)|0,n=Math.imul(m,$);var ge=(l+(i=i+Math.imul(u,V)|0)|0)+((8191&(s=(s=s+Math.imul(u,q)|0)+Math.imul(f,V)|0))<<13)|0;l=((n=n+Math.imul(f,q)|0)+(s>>>13)|0)+(ge>>>26)|0,ge&=67108863,i=Math.imul(g,U),s=(s=Math.imul(g,$))+Math.imul(y,U)|0,n=Math.imul(y,$),i=i+Math.imul(p,V)|0,s=(s=s+Math.imul(p,q)|0)+Math.imul(m,V)|0,n=n+Math.imul(m,q)|0;var ye=(l+(i=i+Math.imul(u,X)|0)|0)+((8191&(s=(s=s+Math.imul(u,K)|0)+Math.imul(f,X)|0))<<13)|0;l=((n=n+Math.imul(f,K)|0)+(s>>>13)|0)+(ye>>>26)|0,ye&=67108863,i=Math.imul(w,U),s=(s=Math.imul(w,$))+Math.imul(_,U)|0,n=Math.imul(_,$),i=i+Math.imul(g,V)|0,s=(s=s+Math.imul(g,q)|0)+Math.imul(y,V)|0,n=n+Math.imul(y,q)|0,i=i+Math.imul(p,X)|0,s=(s=s+Math.imul(p,K)|0)+Math.imul(m,X)|0,n=n+Math.imul(m,K)|0;var ve=(l+(i=i+Math.imul(u,Y)|0)|0)+((8191&(s=(s=s+Math.imul(u,G)|0)+Math.imul(f,Y)|0))<<13)|0;l=((n=n+Math.imul(f,G)|0)+(s>>>13)|0)+(ve>>>26)|0,ve&=67108863,i=Math.imul(S,U),s=(s=Math.imul(S,$))+Math.imul(k,U)|0,n=Math.imul(k,$),i=i+Math.imul(w,V)|0,s=(s=s+Math.imul(w,q)|0)+Math.imul(_,V)|0,n=n+Math.imul(_,q)|0,i=i+Math.imul(g,X)|0,s=(s=s+Math.imul(g,K)|0)+Math.imul(y,X)|0,n=n+Math.imul(y,K)|0,i=i+Math.imul(p,Y)|0,s=(s=s+Math.imul(p,G)|0)+Math.imul(m,Y)|0,n=n+Math.imul(m,G)|0;var we=(l+(i=i+Math.imul(u,Q)|0)|0)+((8191&(s=(s=s+Math.imul(u,ee)|0)+Math.imul(f,Q)|0))<<13)|0;l=((n=n+Math.imul(f,ee)|0)+(s>>>13)|0)+(we>>>26)|0,we&=67108863,i=Math.imul(C,U),s=(s=Math.imul(C,$))+Math.imul(T,U)|0,n=Math.imul(T,$),i=i+Math.imul(S,V)|0,s=(s=s+Math.imul(S,q)|0)+Math.imul(k,V)|0,n=n+Math.imul(k,q)|0,i=i+Math.imul(w,X)|0,s=(s=s+Math.imul(w,K)|0)+Math.imul(_,X)|0,n=n+Math.imul(_,K)|0,i=i+Math.imul(g,Y)|0,s=(s=s+Math.imul(g,G)|0)+Math.imul(y,Y)|0,n=n+Math.imul(y,G)|0,i=i+Math.imul(p,Q)|0,s=(s=s+Math.imul(p,ee)|0)+Math.imul(m,Q)|0,n=n+Math.imul(m,ee)|0;var _e=(l+(i=i+Math.imul(u,re)|0)|0)+((8191&(s=(s=s+Math.imul(u,ie)|0)+Math.imul(f,re)|0))<<13)|0;l=((n=n+Math.imul(f,ie)|0)+(s>>>13)|0)+(_e>>>26)|0,_e&=67108863,i=Math.imul(A,U),s=(s=Math.imul(A,$))+Math.imul(R,U)|0,n=Math.imul(R,$),i=i+Math.imul(C,V)|0,s=(s=s+Math.imul(C,q)|0)+Math.imul(T,V)|0,n=n+Math.imul(T,q)|0,i=i+Math.imul(S,X)|0,s=(s=s+Math.imul(S,K)|0)+Math.imul(k,X)|0,n=n+Math.imul(k,K)|0,i=i+Math.imul(w,Y)|0,s=(s=s+Math.imul(w,G)|0)+Math.imul(_,Y)|0,n=n+Math.imul(_,G)|0,i=i+Math.imul(g,Q)|0,s=(s=s+Math.imul(g,ee)|0)+Math.imul(y,Q)|0,n=n+Math.imul(y,ee)|0,i=i+Math.imul(p,re)|0,s=(s=s+Math.imul(p,ie)|0)+Math.imul(m,re)|0,n=n+Math.imul(m,ie)|0;var xe=(l+(i=i+Math.imul(u,ne)|0)|0)+((8191&(s=(s=s+Math.imul(u,oe)|0)+Math.imul(f,ne)|0))<<13)|0;l=((n=n+Math.imul(f,oe)|0)+(s>>>13)|0)+(xe>>>26)|0,xe&=67108863,i=Math.imul(I,U),s=(s=Math.imul(I,$))+Math.imul(N,U)|0,n=Math.imul(N,$),i=i+Math.imul(A,V)|0,s=(s=s+Math.imul(A,q)|0)+Math.imul(R,V)|0,n=n+Math.imul(R,q)|0,i=i+Math.imul(C,X)|0,s=(s=s+Math.imul(C,K)|0)+Math.imul(T,X)|0,n=n+Math.imul(T,K)|0,i=i+Math.imul(S,Y)|0,s=(s=s+Math.imul(S,G)|0)+Math.imul(k,Y)|0,n=n+Math.imul(k,G)|0,i=i+Math.imul(w,Q)|0,s=(s=s+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,n=n+Math.imul(_,ee)|0,i=i+Math.imul(g,re)|0,s=(s=s+Math.imul(g,ie)|0)+Math.imul(y,re)|0,n=n+Math.imul(y,ie)|0,i=i+Math.imul(p,ne)|0,s=(s=s+Math.imul(p,oe)|0)+Math.imul(m,ne)|0,n=n+Math.imul(m,oe)|0;var Se=(l+(i=i+Math.imul(u,he)|0)|0)+((8191&(s=(s=s+Math.imul(u,le)|0)+Math.imul(f,he)|0))<<13)|0;l=((n=n+Math.imul(f,le)|0)+(s>>>13)|0)+(Se>>>26)|0,Se&=67108863,i=Math.imul(j,U),s=(s=Math.imul(j,$))+Math.imul(B,U)|0,n=Math.imul(B,$),i=i+Math.imul(I,V)|0,s=(s=s+Math.imul(I,q)|0)+Math.imul(N,V)|0,n=n+Math.imul(N,q)|0,i=i+Math.imul(A,X)|0,s=(s=s+Math.imul(A,K)|0)+Math.imul(R,X)|0,n=n+Math.imul(R,K)|0,i=i+Math.imul(C,Y)|0,s=(s=s+Math.imul(C,G)|0)+Math.imul(T,Y)|0,n=n+Math.imul(T,G)|0,i=i+Math.imul(S,Q)|0,s=(s=s+Math.imul(S,ee)|0)+Math.imul(k,Q)|0,n=n+Math.imul(k,ee)|0,i=i+Math.imul(w,re)|0,s=(s=s+Math.imul(w,ie)|0)+Math.imul(_,re)|0,n=n+Math.imul(_,ie)|0,i=i+Math.imul(g,ne)|0,s=(s=s+Math.imul(g,oe)|0)+Math.imul(y,ne)|0,n=n+Math.imul(y,oe)|0,i=i+Math.imul(p,he)|0,s=(s=s+Math.imul(p,le)|0)+Math.imul(m,he)|0,n=n+Math.imul(m,le)|0;var ke=(l+(i=i+Math.imul(u,ue)|0)|0)+((8191&(s=(s=s+Math.imul(u,fe)|0)+Math.imul(f,ue)|0))<<13)|0;l=((n=n+Math.imul(f,fe)|0)+(s>>>13)|0)+(ke>>>26)|0,ke&=67108863,i=Math.imul(F,U),s=(s=Math.imul(F,$))+Math.imul(L,U)|0,n=Math.imul(L,$),i=i+Math.imul(j,V)|0,s=(s=s+Math.imul(j,q)|0)+Math.imul(B,V)|0,n=n+Math.imul(B,q)|0,i=i+Math.imul(I,X)|0,s=(s=s+Math.imul(I,K)|0)+Math.imul(N,X)|0,n=n+Math.imul(N,K)|0,i=i+Math.imul(A,Y)|0,s=(s=s+Math.imul(A,G)|0)+Math.imul(R,Y)|0,n=n+Math.imul(R,G)|0,i=i+Math.imul(C,Q)|0,s=(s=s+Math.imul(C,ee)|0)+Math.imul(T,Q)|0,n=n+Math.imul(T,ee)|0,i=i+Math.imul(S,re)|0,s=(s=s+Math.imul(S,ie)|0)+Math.imul(k,re)|0,n=n+Math.imul(k,ie)|0,i=i+Math.imul(w,ne)|0,s=(s=s+Math.imul(w,oe)|0)+Math.imul(_,ne)|0,n=n+Math.imul(_,oe)|0,i=i+Math.imul(g,he)|0,s=(s=s+Math.imul(g,le)|0)+Math.imul(y,he)|0,n=n+Math.imul(y,le)|0,i=i+Math.imul(p,ue)|0,s=(s=s+Math.imul(p,fe)|0)+Math.imul(m,ue)|0,n=n+Math.imul(m,fe)|0;var Me=(l+(i=i+Math.imul(u,pe)|0)|0)+((8191&(s=(s=s+Math.imul(u,me)|0)+Math.imul(f,pe)|0))<<13)|0;l=((n=n+Math.imul(f,me)|0)+(s>>>13)|0)+(Me>>>26)|0,Me&=67108863,i=Math.imul(F,V),s=(s=Math.imul(F,q))+Math.imul(L,V)|0,n=Math.imul(L,q),i=i+Math.imul(j,X)|0,s=(s=s+Math.imul(j,K)|0)+Math.imul(B,X)|0,n=n+Math.imul(B,K)|0,i=i+Math.imul(I,Y)|0,s=(s=s+Math.imul(I,G)|0)+Math.imul(N,Y)|0,n=n+Math.imul(N,G)|0,i=i+Math.imul(A,Q)|0,s=(s=s+Math.imul(A,ee)|0)+Math.imul(R,Q)|0,n=n+Math.imul(R,ee)|0,i=i+Math.imul(C,re)|0,s=(s=s+Math.imul(C,ie)|0)+Math.imul(T,re)|0,n=n+Math.imul(T,ie)|0,i=i+Math.imul(S,ne)|0,s=(s=s+Math.imul(S,oe)|0)+Math.imul(k,ne)|0,n=n+Math.imul(k,oe)|0,i=i+Math.imul(w,he)|0,s=(s=s+Math.imul(w,le)|0)+Math.imul(_,he)|0,n=n+Math.imul(_,le)|0,i=i+Math.imul(g,ue)|0,s=(s=s+Math.imul(g,fe)|0)+Math.imul(y,ue)|0,n=n+Math.imul(y,fe)|0;var Ce=(l+(i=i+Math.imul(p,pe)|0)|0)+((8191&(s=(s=s+Math.imul(p,me)|0)+Math.imul(m,pe)|0))<<13)|0;l=((n=n+Math.imul(m,me)|0)+(s>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,i=Math.imul(F,X),s=(s=Math.imul(F,K))+Math.imul(L,X)|0,n=Math.imul(L,K),i=i+Math.imul(j,Y)|0,s=(s=s+Math.imul(j,G)|0)+Math.imul(B,Y)|0,n=n+Math.imul(B,G)|0,i=i+Math.imul(I,Q)|0,s=(s=s+Math.imul(I,ee)|0)+Math.imul(N,Q)|0,n=n+Math.imul(N,ee)|0,i=i+Math.imul(A,re)|0,s=(s=s+Math.imul(A,ie)|0)+Math.imul(R,re)|0,n=n+Math.imul(R,ie)|0,i=i+Math.imul(C,ne)|0,s=(s=s+Math.imul(C,oe)|0)+Math.imul(T,ne)|0,n=n+Math.imul(T,oe)|0,i=i+Math.imul(S,he)|0,s=(s=s+Math.imul(S,le)|0)+Math.imul(k,he)|0,n=n+Math.imul(k,le)|0,i=i+Math.imul(w,ue)|0,s=(s=s+Math.imul(w,fe)|0)+Math.imul(_,ue)|0,n=n+Math.imul(_,fe)|0;var Te=(l+(i=i+Math.imul(g,pe)|0)|0)+((8191&(s=(s=s+Math.imul(g,me)|0)+Math.imul(y,pe)|0))<<13)|0;l=((n=n+Math.imul(y,me)|0)+(s>>>13)|0)+(Te>>>26)|0,Te&=67108863,i=Math.imul(F,Y),s=(s=Math.imul(F,G))+Math.imul(L,Y)|0,n=Math.imul(L,G),i=i+Math.imul(j,Q)|0,s=(s=s+Math.imul(j,ee)|0)+Math.imul(B,Q)|0,n=n+Math.imul(B,ee)|0,i=i+Math.imul(I,re)|0,s=(s=s+Math.imul(I,ie)|0)+Math.imul(N,re)|0,n=n+Math.imul(N,ie)|0,i=i+Math.imul(A,ne)|0,s=(s=s+Math.imul(A,oe)|0)+Math.imul(R,ne)|0,n=n+Math.imul(R,oe)|0,i=i+Math.imul(C,he)|0,s=(s=s+Math.imul(C,le)|0)+Math.imul(T,he)|0,n=n+Math.imul(T,le)|0,i=i+Math.imul(S,ue)|0,s=(s=s+Math.imul(S,fe)|0)+Math.imul(k,ue)|0,n=n+Math.imul(k,fe)|0;var Ee=(l+(i=i+Math.imul(w,pe)|0)|0)+((8191&(s=(s=s+Math.imul(w,me)|0)+Math.imul(_,pe)|0))<<13)|0;l=((n=n+Math.imul(_,me)|0)+(s>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,i=Math.imul(F,Q),s=(s=Math.imul(F,ee))+Math.imul(L,Q)|0,n=Math.imul(L,ee),i=i+Math.imul(j,re)|0,s=(s=s+Math.imul(j,ie)|0)+Math.imul(B,re)|0,n=n+Math.imul(B,ie)|0,i=i+Math.imul(I,ne)|0,s=(s=s+Math.imul(I,oe)|0)+Math.imul(N,ne)|0,n=n+Math.imul(N,oe)|0,i=i+Math.imul(A,he)|0,s=(s=s+Math.imul(A,le)|0)+Math.imul(R,he)|0,n=n+Math.imul(R,le)|0,i=i+Math.imul(C,ue)|0,s=(s=s+Math.imul(C,fe)|0)+Math.imul(T,ue)|0,n=n+Math.imul(T,fe)|0;var Ae=(l+(i=i+Math.imul(S,pe)|0)|0)+((8191&(s=(s=s+Math.imul(S,me)|0)+Math.imul(k,pe)|0))<<13)|0;l=((n=n+Math.imul(k,me)|0)+(s>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,i=Math.imul(F,re),s=(s=Math.imul(F,ie))+Math.imul(L,re)|0,n=Math.imul(L,ie),i=i+Math.imul(j,ne)|0,s=(s=s+Math.imul(j,oe)|0)+Math.imul(B,ne)|0,n=n+Math.imul(B,oe)|0,i=i+Math.imul(I,he)|0,s=(s=s+Math.imul(I,le)|0)+Math.imul(N,he)|0,n=n+Math.imul(N,le)|0,i=i+Math.imul(A,ue)|0,s=(s=s+Math.imul(A,fe)|0)+Math.imul(R,ue)|0,n=n+Math.imul(R,fe)|0;var Re=(l+(i=i+Math.imul(C,pe)|0)|0)+((8191&(s=(s=s+Math.imul(C,me)|0)+Math.imul(T,pe)|0))<<13)|0;l=((n=n+Math.imul(T,me)|0)+(s>>>13)|0)+(Re>>>26)|0,Re&=67108863,i=Math.imul(F,ne),s=(s=Math.imul(F,oe))+Math.imul(L,ne)|0,n=Math.imul(L,oe),i=i+Math.imul(j,he)|0,s=(s=s+Math.imul(j,le)|0)+Math.imul(B,he)|0,n=n+Math.imul(B,le)|0,i=i+Math.imul(I,ue)|0,s=(s=s+Math.imul(I,fe)|0)+Math.imul(N,ue)|0,n=n+Math.imul(N,fe)|0;var Oe=(l+(i=i+Math.imul(A,pe)|0)|0)+((8191&(s=(s=s+Math.imul(A,me)|0)+Math.imul(R,pe)|0))<<13)|0;l=((n=n+Math.imul(R,me)|0)+(s>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,i=Math.imul(F,he),s=(s=Math.imul(F,le))+Math.imul(L,he)|0,n=Math.imul(L,le),i=i+Math.imul(j,ue)|0,s=(s=s+Math.imul(j,fe)|0)+Math.imul(B,ue)|0,n=n+Math.imul(B,fe)|0;var Ie=(l+(i=i+Math.imul(I,pe)|0)|0)+((8191&(s=(s=s+Math.imul(I,me)|0)+Math.imul(N,pe)|0))<<13)|0;l=((n=n+Math.imul(N,me)|0)+(s>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,i=Math.imul(F,ue),s=(s=Math.imul(F,fe))+Math.imul(L,ue)|0,n=Math.imul(L,fe);var Ne=(l+(i=i+Math.imul(j,pe)|0)|0)+((8191&(s=(s=s+Math.imul(j,me)|0)+Math.imul(B,pe)|0))<<13)|0;l=((n=n+Math.imul(B,me)|0)+(s>>>13)|0)+(Ne>>>26)|0,Ne&=67108863;var Pe=(l+(i=Math.imul(F,pe))|0)+((8191&(s=(s=Math.imul(F,me))+Math.imul(L,pe)|0))<<13)|0;return l=((n=Math.imul(L,me))+(s>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,h[0]=be,h[1]=ge,h[2]=ye,h[3]=ve,h[4]=we,h[5]=_e,h[6]=xe,h[7]=Se,h[8]=ke,h[9]=Me,h[10]=Ce,h[11]=Te,h[12]=Ee,h[13]=Ae,h[14]=Re,h[15]=Oe,h[16]=Ie,h[17]=Ne,h[18]=Pe,0!==l&&(h[19]=l,r.length++),r};function g(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var i=0,s=0,n=0;n>>26)|0)>>>26,o&=67108863}r.words[n]=a,i=o,o=s}return 0!==i?r.words[n]=i:r.length--,r._strip()}function y(e,t,r){return g(e,t,r)}function v(e,t){this.x=e,this.y=t}Math.imul||(b=m),n.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?b(this,e,t):r<63?m(this,e,t):r<1024?g(this,e,t):y(this,e,t)},v.prototype.makeRBT=function(e){for(var t=new Array(e),r=n.prototype._countBits(e)-1,i=0;i>=1;return i},v.prototype.permute=function(e,t,r,i,s,n){for(var o=0;o>>=1)s++;return 1<>>=13,r[2*o+1]=8191&n,n>>>=13;for(o=2*t;o>=26,r+=n/67108864|0,r+=o>>>26,this.words[s]=67108863&o}return 0!==r&&(this.words[s]=r,this.length++),t?this.ineg():this},n.prototype.muln=function(e){return this.clone().imuln(e)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r>>s&1}return t}(e);if(0===t.length)return new n(1);for(var r=this,i=0;i=0);var t,r=e%26,s=(e-r)/26,n=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(t=0;t>>26-r}o&&(this.words[t]=o,this.length++)}if(0!==s){for(t=this.length-1;t>=0;t--)this.words[t+s]=this.words[t];for(t=0;t=0),s=t?(t-t%26)/26:0;var n=e%26,o=Math.min((e-n)/26,this.length),a=67108863^67108863>>>n<o)for(this.length-=o,l=0;l=0&&(0!==c||l>=s);l--){var u=0|this.words[l];this.words[l]=c<<26-n|u>>>n,c=u&a}return h&&0!==c&&(h.words[h.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this._strip()},n.prototype.ishrn=function(e,t,r){return i(0===this.negative),this.iushrn(e,t,r)},n.prototype.shln=function(e){return this.clone().ishln(e)},n.prototype.ushln=function(e){return this.clone().iushln(e)},n.prototype.shrn=function(e){return this.clone().ishrn(e)},n.prototype.ushrn=function(e){return this.clone().iushrn(e)},n.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,s=1<=0);var t=e%26,r=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var s=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},n.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(h/67108864|0),this.words[s+r]=67108863&n}for(;s>26,this.words[s+r]=67108863&n;if(0===a)return this._strip();for(i(-1===a),a=0,s=0;s>26,this.words[s]=67108863&n;return this.negative=1,this._strip()},n.prototype._wordDiv=function(e,t){var r=(this.length,e.length),i=this.clone(),s=e,o=0|s.words[s.length-1];0!==(r=26-this._countBits(o))&&(s=s.ushln(r),i.iushln(r),o=0|s.words[s.length-1]);var a,h=i.length-s.length;if("mod"!==t){(a=new n(null)).length=h+1,a.words=new Array(a.length);for(var l=0;l=0;u--){var f=67108864*(0|i.words[s.length+u])+(0|i.words[s.length+u-1]);for(f=Math.min(f/o|0,67108863),i._ishlnsubmul(s,f,u);0!==i.negative;)f--,i.negative=0,i._ishlnsubmul(s,1,u),i.isZero()||(i.negative^=1);a&&(a.words[u]=f)}return a&&a._strip(),i._strip(),"div"!==t&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(e,t,r){return i(!e.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===e.negative?(a=this.neg().divmod(e,t),"mod"!==t&&(s=a.div.neg()),"div"!==t&&(o=a.mod.neg(),r&&0!==o.negative&&o.iadd(e)),{div:s,mod:o}):0===this.negative&&0!==e.negative?(a=this.divmod(e.neg(),t),"mod"!==t&&(s=a.div.neg()),{div:s,mod:a.mod}):0!=(this.negative&e.negative)?(a=this.neg().divmod(e.neg(),t),"div"!==t&&(o=a.mod.neg(),r&&0!==o.negative&&o.isub(e)),{div:a.div,mod:o}):e.length>this.length||this.cmp(e)<0?{div:new n(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new n(this.modrn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new n(this.modrn(e.words[0]))}:this._wordDiv(e,t);var s,o,a},n.prototype.div=function(e){return this.divmod(e,"div",!1).div},n.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},n.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},n.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,i=e.ushrn(1),s=e.andln(1),n=r.cmp(i);return n<0||1===s&&0===n?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},n.prototype.modrn=function(e){var t=e<0;t&&(e=-e),i(e<=67108863);for(var r=(1<<26)%e,s=0,n=this.length-1;n>=0;n--)s=(r*s+(0|this.words[n]))%e;return t?-s:s},n.prototype.modn=function(e){return this.modrn(e)},n.prototype.idivn=function(e){var t=e<0;t&&(e=-e),i(e<=67108863);for(var r=0,s=this.length-1;s>=0;s--){var n=(0|this.words[s])+67108864*r;this.words[s]=n/e|0,r=n%e}return this._strip(),t?this.ineg():this},n.prototype.divn=function(e){return this.clone().idivn(e)},n.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var s=new n(1),o=new n(0),a=new n(0),h=new n(1),l=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++l;for(var c=r.clone(),u=t.clone();!t.isZero();){for(var f=0,d=1;0==(t.words[0]&d)&&f<26;++f,d<<=1);if(f>0)for(t.iushrn(f);f-- >0;)(s.isOdd()||o.isOdd())&&(s.iadd(c),o.isub(u)),s.iushrn(1),o.iushrn(1);for(var p=0,m=1;0==(r.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(a.isOdd()||h.isOdd())&&(a.iadd(c),h.isub(u)),a.iushrn(1),h.iushrn(1);t.cmp(r)>=0?(t.isub(r),s.isub(a),o.isub(h)):(r.isub(t),a.isub(s),h.isub(o))}return{a:a,b:h,gcd:r.iushln(l)}},n.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var s,o=new n(1),a=new n(0),h=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var l=0,c=1;0==(t.words[0]&c)&&l<26;++l,c<<=1);if(l>0)for(t.iushrn(l);l-- >0;)o.isOdd()&&o.iadd(h),o.iushrn(1);for(var u=0,f=1;0==(r.words[0]&f)&&u<26;++u,f<<=1);if(u>0)for(r.iushrn(u);u-- >0;)a.isOdd()&&a.iadd(h),a.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(a)):(r.isub(t),a.isub(o))}return(s=0===t.cmpn(1)?o:a).cmpn(0)<0&&s.iadd(e),s},n.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var i=0;t.isEven()&&r.isEven();i++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var s=t.cmp(r);if(s<0){var n=t;t=r,r=n}else if(0===s||0===r.cmpn(1))break;t.isub(r)}return r.iushln(i)},n.prototype.invm=function(e){return this.egcd(e).a.umod(e)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(e){return this.words[0]&e},n.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,r=(e-t)/26,s=1<>>26,a&=67108863,this.words[o]=a}return 0!==n&&(this.words[o]=n,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this._strip(),this.length>1)t=1;else{r&&(e=-e),i(e<=67108863,"Number is too big");var s=0|this.words[0];t=s===e?0:se.length)return 1;if(this.length=0;r--){var i=0|this.words[r],s=0|e.words[r];if(i!==s){is&&(t=1);break}}return t},n.prototype.gtn=function(e){return 1===this.cmpn(e)},n.prototype.gt=function(e){return 1===this.cmp(e)},n.prototype.gten=function(e){return this.cmpn(e)>=0},n.prototype.gte=function(e){return this.cmp(e)>=0},n.prototype.ltn=function(e){return-1===this.cmpn(e)},n.prototype.lt=function(e){return-1===this.cmp(e)},n.prototype.lten=function(e){return this.cmpn(e)<=0},n.prototype.lte=function(e){return this.cmp(e)<=0},n.prototype.eqn=function(e){return 0===this.cmpn(e)},n.prototype.eq=function(e){return 0===this.cmp(e)},n.red=function(e){return new C(e)},n.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},n.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(e){return this.red=e,this},n.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},n.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},n.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},n.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},n.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},n.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},n.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},n.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},n.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var w={k256:null,p224:null,p192:null,p25519:null};function _(e,t){this.name=e,this.p=new n(t,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function x(){_.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function S(){_.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function k(){_.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){_.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function C(e){if("string"==typeof e){var t=n._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function T(e){C.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}_.prototype._tmp=function(){var e=new n(null);return e.words=new Array(Math.ceil(this.n/13)),e},_.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var i=t0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},_.prototype.split=function(e,t){e.iushrn(this.n,0,t)},_.prototype.imulK=function(e){return e.imul(this.k)},s(x,_),x.prototype.split=function(e,t){for(var r=Math.min(e.length,9),i=0;i>>22,s=n}s>>>=22,e.words[i-10]=s,0===s&&e.length>10?e.length-=10:e.length-=9},x.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=s,t=i}return 0!==t&&(e.words[e.length++]=t),e},n._prime=function(e){if(w[e])return w[e];var t;if("k256"===e)t=new x;else if("p224"===e)t=new S;else if("p192"===e)t=new k;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new M}return w[e]=t,t},C.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},C.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},C.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):(c(e,e.umod(this.m)._forceRed(this)),e)},C.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},C.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},C.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},C.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},C.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},C.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},C.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},C.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},C.prototype.isqr=function(e){return this.imul(e,e.clone())},C.prototype.sqr=function(e){return this.mul(e,e)},C.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var r=this.m.add(new n(1)).iushrn(2);return this.pow(e,r)}for(var s=this.m.subn(1),o=0;!s.isZero()&&0===s.andln(1);)o++,s.iushrn(1);i(!s.isZero());var a=new n(1).toRed(this),h=a.redNeg(),l=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new n(2*c*c).toRed(this);0!==this.pow(c,l).cmp(h);)c.redIAdd(h);for(var u=this.pow(c,s),f=this.pow(e,s.addn(1).iushrn(1)),d=this.pow(e,s),p=o;0!==d.cmp(a);){for(var m=d,b=0;0!==m.cmp(a);b++)m=m.redSqr();i(b=0;i--){for(var l=t.words[i],c=h-1;c>=0;c--){var u=l>>c&1;s!==r[0]&&(s=this.sqr(s)),0!==u||0!==o?(o<<=1,o|=u,(4===++a||0===i&&0===c)&&(s=this.mul(s,r[o]),a=0,o=0)):a=0}h=26}return s},C.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},C.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},n.mont=function(e){return new T(e)},s(T,C),T.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},T.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},T.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=r.isub(i).iushrn(this.shift),n=s;return s.cmp(this.m)>=0?n=s.isub(this.m):s.cmpn(0)<0&&(n=s.iadd(this.m)),n._forceRed(this)},T.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new n(0)._forceRed(this);var r=e.mul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),s=r.isub(i).iushrn(this.shift),o=s;return s.cmp(this.m)>=0?o=s.isub(this.m):s.cmpn(0)<0&&(o=s.iadd(this.m)),o._forceRed(this)},T.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t)},{buffer:188}],187:[function(e,t,r){"use strict";var i;function s(e){this.rand=e}if(t.exports=function(e){return i||(i=new s(null)),i.generate(e)},t.exports.Rand=s,s.prototype.generate=function(e){return this._rand(e)},s.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r>>24]^c[p>>>16&255]^u[m>>>8&255]^f[255&b]^t[g++],o=l[p>>>24]^c[m>>>16&255]^u[b>>>8&255]^f[255&d]^t[g++],a=l[m>>>24]^c[b>>>16&255]^u[d>>>8&255]^f[255&p]^t[g++],h=l[b>>>24]^c[d>>>16&255]^u[p>>>8&255]^f[255&m]^t[g++],d=n,p=o,m=a,b=h;return n=(i[d>>>24]<<24|i[p>>>16&255]<<16|i[m>>>8&255]<<8|i[255&b])^t[g++],o=(i[p>>>24]<<24|i[m>>>16&255]<<16|i[b>>>8&255]<<8|i[255&d])^t[g++],a=(i[m>>>24]<<24|i[b>>>16&255]<<16|i[d>>>8&255]<<8|i[255&p])^t[g++],h=(i[b>>>24]<<24|i[d>>>16&255]<<16|i[p>>>8&255]<<8|i[255&m])^t[g++],[n>>>=0,o>>>=0,a>>>=0,h>>>=0]}var a=[0,1,2,4,8,16,32,64,128,27,54],h=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var r=[],i=[],s=[[],[],[],[]],n=[[],[],[],[]],o=0,a=0,h=0;h<256;++h){var l=a^a<<1^a<<2^a<<3^a<<4;l=l>>>8^255&l^99,r[o]=l,i[l]=o;var c=e[o],u=e[c],f=e[u],d=257*e[l]^16843008*l;s[0][o]=d<<24|d>>>8,s[1][o]=d<<16|d>>>16,s[2][o]=d<<8|d>>>24,s[3][o]=d,d=16843009*f^65537*u^257*c^16843008*o,n[0][l]=d<<24|d>>>8,n[1][l]=d<<16|d>>>16,n[2][l]=d<<8|d>>>24,n[3][l]=d,0===o?o=a=1:(o=c^e[e[e[f^c]]],a^=e[e[a]])}return{SBOX:r,INV_SBOX:i,SUB_MIX:s,INV_SUB_MIX:n}}();function l(e){this._key=s(e),this._reset()}l.blockSize=16,l.keySize=32,l.prototype.blockSize=l.blockSize,l.prototype.keySize=l.keySize,l.prototype._reset=function(){for(var e=this._key,t=e.length,r=t+6,i=4*(r+1),s=[],n=0;n>>24,o=h.SBOX[o>>>24]<<24|h.SBOX[o>>>16&255]<<16|h.SBOX[o>>>8&255]<<8|h.SBOX[255&o],o^=a[n/t|0]<<24):t>6&&n%t==4&&(o=h.SBOX[o>>>24]<<24|h.SBOX[o>>>16&255]<<16|h.SBOX[o>>>8&255]<<8|h.SBOX[255&o]),s[n]=s[n-t]^o}for(var l=[],c=0;c>>24]]^h.INV_SUB_MIX[1][h.SBOX[f>>>16&255]]^h.INV_SUB_MIX[2][h.SBOX[f>>>8&255]]^h.INV_SUB_MIX[3][h.SBOX[255&f]]}this._nRounds=r,this._keySchedule=s,this._invKeySchedule=l},l.prototype.encryptBlockRaw=function(e){return o(e=s(e),this._keySchedule,h.SUB_MIX,h.SBOX,this._nRounds)},l.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),r=i.allocUnsafe(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r},l.prototype.decryptBlock=function(e){var t=(e=s(e))[1];e[1]=e[3],e[3]=t;var r=o(e,this._invKeySchedule,h.INV_SUB_MIX,h.INV_SBOX,this._nRounds),n=i.allocUnsafe(16);return n.writeUInt32BE(r[0],0),n.writeUInt32BE(r[3],4),n.writeUInt32BE(r[2],8),n.writeUInt32BE(r[1],12),n},l.prototype.scrub=function(){n(this._keySchedule),n(this._invKeySchedule),n(this._key)},t.exports.AES=l},{"safe-buffer":332}],190:[function(e,t,r){"use strict";var i=e("./aes"),s=e("safe-buffer").Buffer,n=e("cipher-base"),o=e("inherits"),a=e("./ghash"),h=e("buffer-xor"),l=e("./incr32");function c(e,t,r,o){n.call(this);var h=s.alloc(4,0);this._cipher=new i.AES(t);var c=this._cipher.encryptBlock(h);this._ghash=new a(c),r=function(e,t,r){if(12===t.length)return e._finID=s.concat([t,s.from([0,0,0,1])]),s.concat([t,s.from([0,0,0,2])]);var i=new a(r),n=t.length,o=n%16;i.update(t),o&&(o=16-o,i.update(s.alloc(o,0))),i.update(s.alloc(8,0));var h=8*n,c=s.alloc(8);c.writeUIntBE(h,0,8),i.update(c),e._finID=i.state;var u=s.from(e._finID);return l(u),u}(this,r,c),this._prev=s.from(r),this._cache=s.allocUnsafe(0),this._secCache=s.allocUnsafe(0),this._decrypt=o,this._alen=0,this._len=0,this._mode=e,this._authTag=null,this._called=!1}o(c,n),c.prototype._update=function(e){if(!this._called&&this._alen){var t=16-this._alen%16;t<16&&(t=s.alloc(t,0),this._ghash.update(t))}this._called=!0;var r=this._mode.encrypt(this,e);return this._decrypt?this._ghash.update(e):this._ghash.update(r),this._len+=e.length,r},c.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var e=h(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(e,t){var r=0;e.length!==t.length&&r++;for(var i=Math.min(e.length,t.length),s=0;s16)throw new Error("unable to decrypt data");var r=-1;for(;++r16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},u.prototype.flush=function(){if(this.cache.length)return this.cache},r.createDecipher=function(e,t){var r=n[e.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var i=l(t,!1,r.key,r.iv);return f(e,i.key,i.iv)},r.createDecipheriv=f},{"./aes":189,"./authCipher":190,"./modes":202,"./streamCipher":205,"cipher-base":221,evp_bytestokey:262,inherits:279,"safe-buffer":332}],193:[function(e,t,r){"use strict";var i=e("./modes"),s=e("./authCipher"),n=e("safe-buffer").Buffer,o=e("./streamCipher"),a=e("cipher-base"),h=e("./aes"),l=e("evp_bytestokey");function c(e,t,r){a.call(this),this._cache=new f,this._cipher=new h.AES(t),this._prev=n.from(r),this._mode=e,this._autopadding=!0}e("inherits")(c,a),c.prototype._update=function(e){var t,r;this._cache.add(e);for(var i=[];t=this._cache.get();)r=this._mode.encrypt(this,t),i.push(r);return n.concat(i)};var u=n.alloc(16,16);function f(){this.cache=n.allocUnsafe(0)}function d(e,t,r){var a=i[e.toLowerCase()];if(!a)throw new TypeError("invalid suite type");if("string"==typeof t&&(t=n.from(t)),t.length!==a.key/8)throw new TypeError("invalid key length "+t.length);if("string"==typeof r&&(r=n.from(r)),"GCM"!==a.mode&&r.length!==a.iv)throw new TypeError("invalid iv length "+r.length);return"stream"===a.type?new o(a.module,t,r):"auth"===a.type?new s(a.module,t,r):new c(a.module,t,r)}c.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if(!e.equals(u))throw this._cipher.scrub(),new Error("data not multiple of block length")},c.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},f.prototype.add=function(e){this.cache=n.concat([this.cache,e])},f.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},f.prototype.flush=function(){for(var e=16-this.cache.length,t=n.allocUnsafe(e),r=-1;++r>>0,0),t.writeUInt32BE(e[1]>>>0,4),t.writeUInt32BE(e[2]>>>0,8),t.writeUInt32BE(e[3]>>>0,12),t}function o(e){this.h=e,this.state=i.alloc(16,0),this.cache=i.allocUnsafe(0)}o.prototype.ghash=function(e){for(var t=-1;++t0;t--)i[t]=i[t]>>>1|(1&i[t-1])<<31;i[0]=i[0]>>>1,r&&(i[0]=i[0]^225<<24)}this.state=n(s)},o.prototype.update=function(e){var t;for(this.cache=i.concat([this.cache,e]);this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},o.prototype.final=function(e,t){return this.cache.length&&this.ghash(i.concat([this.cache,s],16)),this.ghash(n([0,e,0,t])),this.state},t.exports=o},{"safe-buffer":332}],195:[function(e,t,r){"use strict";t.exports=function(e){for(var t,r=e.length;r--;){if(255!==(t=e.readUInt8(r))){t++,e.writeUInt8(t,r);break}e.writeUInt8(0,r)}}},{}],196:[function(e,t,r){"use strict";var i=e("buffer-xor");r.encrypt=function(e,t){var r=i(t,e._prev);return e._prev=e._cipher.encryptBlock(r),e._prev},r.decrypt=function(e,t){var r=e._prev;e._prev=t;var s=e._cipher.decryptBlock(t);return i(s,r)}},{"buffer-xor":219}],197:[function(e,t,r){"use strict";var i=e("safe-buffer").Buffer,s=e("buffer-xor");function n(e,t,r){var n=t.length,o=s(t,e._cache);return e._cache=e._cache.slice(n),e._prev=i.concat([e._prev,r?t:o]),o}r.encrypt=function(e,t,r){for(var s,o=i.allocUnsafe(0);t.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=i.allocUnsafe(0)),!(e._cache.length<=t.length)){o=i.concat([o,n(e,t,r)]);break}s=e._cache.length,o=i.concat([o,n(e,t.slice(0,s),r)]),t=t.slice(s)}return o}},{"buffer-xor":219,"safe-buffer":332}],198:[function(e,t,r){"use strict";var i=e("safe-buffer").Buffer;function s(e,t,r){for(var i,s,o=-1,a=0;++o<8;)i=t&1<<7-o?128:0,a+=(128&(s=e._cipher.encryptBlock(e._prev)[0]^i))>>o%8,e._prev=n(e._prev,r?i:s);return a}function n(e,t){var r=e.length,s=-1,n=i.allocUnsafe(e.length);for(e=i.concat([e,i.from([t])]);++s>7;return n}r.encrypt=function(e,t,r){for(var n=t.length,o=i.allocUnsafe(n),a=-1;++a=0||!t.umod(e.prime1)||!t.umod(e.prime2));return t}function o(e,t){var s=function(e){var t=n(e);return{blinder:t.toRed(i.mont(e.modulus)).redPow(new i(e.publicExponent)).fromRed(),unblinder:t.invm(e.modulus)}}(t),o=t.modulus.byteLength(),a=new i(e).mul(s.blinder).umod(t.modulus),h=a.toRed(i.mont(t.prime1)),l=a.toRed(i.mont(t.prime2)),c=t.coefficient,u=t.prime1,f=t.prime2,d=h.redPow(t.exponent1).fromRed(),p=l.redPow(t.exponent2).fromRed(),m=d.isub(p).imul(c).umod(u).imul(f);return p.iadd(m).imul(s.unblinder).umod(t.modulus).toArrayLike(r,"be",o)}o.getr=n,t.exports=o}).call(this)}).call(this,e("buffer").Buffer)},{"bn.js":186,buffer:220,randombytes:314}],210:[function(e,t,r){"use strict";t.exports=e("./browser/algorithms.json")},{"./browser/algorithms.json":211}],211:[function(e,t,r){t.exports={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}}},{}],212:[function(e,t,r){t.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}},{}],213:[function(e,t,r){"use strict";var i=e("safe-buffer").Buffer,s=e("create-hash"),n=e("readable-stream"),o=e("inherits"),a=e("./sign"),h=e("./verify"),l=e("./algorithms.json");function c(e){n.Writable.call(this);var t=l[e];if(!t)throw new Error("Unknown message digest");this._hashType=t.hash,this._hash=s(t.hash),this._tag=t.id,this._signType=t.sign}function u(e){n.Writable.call(this);var t=l[e];if(!t)throw new Error("Unknown message digest");this._hash=s(t.hash),this._tag=t.id,this._signType=t.sign}function f(e){return new c(e)}function d(e){return new u(e)}Object.keys(l).forEach((function(e){l[e].id=i.from(l[e].id,"hex"),l[e.toLowerCase()]=l[e]})),o(c,n.Writable),c.prototype._write=function(e,t,r){this._hash.update(e),r()},c.prototype.update=function(e,t){return"string"==typeof e&&(e=i.from(e,t)),this._hash.update(e),this},c.prototype.sign=function(e,t){this.end();var r=this._hash.digest(),i=a(r,e,this._hashType,this._signType,this._tag);return t?i.toString(t):i},o(u,n.Writable),u.prototype._write=function(e,t,r){this._hash.update(e),r()},u.prototype.update=function(e,t){return"string"==typeof e&&(e=i.from(e,t)),this._hash.update(e),this},u.prototype.verify=function(e,t,r){"string"==typeof t&&(t=i.from(t,r)),this.end();var s=this._hash.digest();return h(t,s,e,this._signType,this._tag)},t.exports={Sign:f,Verify:d,createSign:f,createVerify:d}},{"./algorithms.json":211,"./sign":214,"./verify":215,"create-hash":225,inherits:279,"readable-stream":330,"safe-buffer":332}],214:[function(e,t,r){"use strict";var i=e("safe-buffer").Buffer,s=e("create-hmac"),n=e("browserify-rsa"),o=e("elliptic").ec,a=e("bn.js"),h=e("parse-asn1"),l=e("./curves.json");function c(e,t,r,n){if((e=i.from(e.toArray())).length0&&r.ishrn(i),r}function f(e,t,r){var n,o;do{for(n=i.alloc(0);8*n.length=t)throw new Error("invalid sig")}t.exports=function(e,t,r,l,c){var u=o(r);if("ec"===u.type){if("ecdsa"!==l&&"ecdsa/rsa"!==l)throw new Error("wrong public key type");return function(e,t,r){var i=a[r.data.algorithm.curve.join(".")];if(!i)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var s=new n(i),o=r.data.subjectPrivateKey.data;return s.verify(t,e,o)}(e,t,u)}if("dsa"===u.type){if("dsa"!==l)throw new Error("wrong public key type");return function(e,t,r){var i=r.data.p,n=r.data.q,a=r.data.g,l=r.data.pub_key,c=o.signature.decode(e,"der"),u=c.s,f=c.r;h(u,n),h(f,n);var d=s.mont(i),p=u.invm(n);return 0===a.toRed(d).redPow(new s(t).mul(p).mod(n)).fromRed().mul(l.toRed(d).redPow(f.mul(p).mod(n)).fromRed()).mod(i).mod(n).cmp(f)}(e,t,u)}if("rsa"!==l&&"ecdsa/rsa"!==l)throw new Error("wrong public key type");t=i.concat([c,t]);for(var f=u.modulus.byteLength(),d=[1],p=0;t.length+d.length+2>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function a(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"\ufffd";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"\ufffd";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"\ufffd"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function h(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function l(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function c(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function u(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function f(e){return e.toString(this.encoding)}function d(e){return e&&e.length?this.write(e):""}r.StringDecoder=n,n.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return s>0&&(e.lastNeed=s-1),s;if(--i=0)return s>0&&(e.lastNeed=s-2),s;if(--i=0)return s>0&&(2===s?s=0:e.lastNeed=s-3),s;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var i=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,i),e.toString("utf8",t,i)},n.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},{"safe-buffer":217}],219:[function(e,t,r){(function(e){(function(){"use strict";t.exports=function(t,r){for(var i=Math.min(t.length,r.length),s=new e(i),n=0;n + * @license MIT + */ +"use strict";var t=e("base64-js"),i=e("ieee754");r.Buffer=n,r.SlowBuffer=function(e){+e!=e&&(e=0);return n.alloc(+e)},r.INSPECT_MAX_BYTES=50;function s(e){if(e>2147483647)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return t.__proto__=n.prototype,t}function n(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return h(e)}return o(e,t,r)}function o(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!n.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|u(e,t),i=s(r),o=i.write(e,t);o!==r&&(i=i.slice(0,o));return i}(e,t);if(ArrayBuffer.isView(e))return l(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(F(e,ArrayBuffer)||e&&F(e.buffer,ArrayBuffer))return function(e,t,r){if(t<0||e.byteLength=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+2147483647..toString(16)+" bytes");return 0|e}function u(e,t){if(n.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||F(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===r)return 0;for(var s=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return j(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return B(e).length;default:if(s)return i?-1:j(e).length;t=(""+t).toLowerCase(),s=!0}}function f(e,t,r){var i=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return C(this,t,r);case"utf8":case"utf-8":return S(this,t,r);case"ascii":return k(this,t,r);case"latin1":case"binary":return M(this,t,r);case"base64":return x(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,r);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}function d(e,t,r){var i=e[t];e[t]=e[r],e[r]=i}function p(e,t,r,i,s){if(0===e.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),L(r=+r)&&(r=s?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(s)return-1;r=e.length-1}else if(r<0){if(!s)return-1;r=0}if("string"==typeof t&&(t=n.from(t,i)),n.isBuffer(t))return 0===t.length?-1:m(e,t,r,i,s);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):m(e,[t],r,i,s);throw new TypeError("val must be string, number or Buffer")}function m(e,t,r,i,s){var n,o=1,a=e.length,h=t.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(e.length<2||t.length<2)return-1;o=2,a/=2,h/=2,r/=2}function l(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(s){var c=-1;for(n=r;na&&(r=a-h),n=r;n>=0;n--){for(var u=!0,f=0;fs&&(i=s):i=s;var n=t.length;i>n/2&&(i=n/2);for(var o=0;o>8,s=r%256,n.push(s),n.push(i);return n}(t,e.length-r),e,r,i)}function x(e,r,i){return 0===r&&i===e.length?t.fromByteArray(e):t.fromByteArray(e.slice(r,i))}function S(e,t,r){r=Math.min(e.length,r);for(var i=[],s=t;s239?4:l>223?3:l>191?2:1;if(s+u<=r)switch(u){case 1:l<128&&(c=l);break;case 2:128==(192&(n=e[s+1]))&&(h=(31&l)<<6|63&n)>127&&(c=h);break;case 3:n=e[s+1],o=e[s+2],128==(192&n)&&128==(192&o)&&(h=(15&l)<<12|(63&n)<<6|63&o)>2047&&(h<55296||h>57343)&&(c=h);break;case 4:n=e[s+1],o=e[s+2],a=e[s+3],128==(192&n)&&128==(192&o)&&128==(192&a)&&(h=(15&l)<<18|(63&n)<<12|(63&o)<<6|63&a)>65535&&h<1114112&&(c=h)}null===c?(c=65533,u=1):c>65535&&(c-=65536,i.push(c>>>10&1023|55296),c=56320|1023&c),i.push(c),s+=u}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var r="",i=0;for(;it&&(e+=" ... "),""},n.prototype.compare=function(e,t,r,i,s){if(F(e,Uint8Array)&&(e=n.from(e,e.offset,e.byteLength)),!n.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===i&&(i=0),void 0===s&&(s=this.length),t<0||r>e.length||i<0||s>this.length)throw new RangeError("out of range index");if(i>=s&&t>=r)return 0;if(i>=s)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(s>>>=0)-(i>>>=0),a=(r>>>=0)-(t>>>=0),h=Math.min(o,a),l=this.slice(i,s),c=e.slice(t,r),u=0;u>>=0,isFinite(r)?(r>>>=0,void 0===i&&(i="utf8")):(i=r,r=void 0)}var s=this.length-t;if((void 0===r||r>s)&&(r=s),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var n=!1;;)switch(i){case"hex":return b(this,e,t,r);case"utf8":case"utf-8":return g(this,e,t,r);case"ascii":return y(this,e,t,r);case"latin1":case"binary":return v(this,e,t,r);case"base64":return w(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,e,t,r);default:if(n)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),n=!0}},n.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function k(e,t,r){var i="";r=Math.min(e.length,r);for(var s=t;si)&&(r=i);for(var s="",n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function A(e,t,r,i,s,o){if(!n.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>s||te.length)throw new RangeError("Index out of range")}function R(e,t,r,i,s,n){if(r+i>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function O(e,t,r,s,n){return t=+t,r>>>=0,n||R(e,0,r,4),i.write(e,t,r,s,23,4),r+4}function I(e,t,r,s,n){return t=+t,r>>>=0,n||R(e,0,r,8),i.write(e,t,r,s,52,8),r+8}n.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||E(e,t,this.length);for(var i=this[e],s=1,n=0;++n>>=0,t>>>=0,r||E(e,t,this.length);for(var i=this[e+--t],s=1;t>0&&(s*=256);)i+=this[e+--t]*s;return i},n.prototype.readUInt8=function(e,t){return e>>>=0,t||E(e,1,this.length),this[e]},n.prototype.readUInt16LE=function(e,t){return e>>>=0,t||E(e,2,this.length),this[e]|this[e+1]<<8},n.prototype.readUInt16BE=function(e,t){return e>>>=0,t||E(e,2,this.length),this[e]<<8|this[e+1]},n.prototype.readUInt32LE=function(e,t){return e>>>=0,t||E(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},n.prototype.readUInt32BE=function(e,t){return e>>>=0,t||E(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},n.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||E(e,t,this.length);for(var i=this[e],s=1,n=0;++n=(s*=128)&&(i-=Math.pow(2,8*t)),i},n.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||E(e,t,this.length);for(var i=t,s=1,n=this[e+--i];i>0&&(s*=256);)n+=this[e+--i]*s;return n>=(s*=128)&&(n-=Math.pow(2,8*t)),n},n.prototype.readInt8=function(e,t){return e>>>=0,t||E(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},n.prototype.readInt16LE=function(e,t){e>>>=0,t||E(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},n.prototype.readInt16BE=function(e,t){e>>>=0,t||E(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},n.prototype.readInt32LE=function(e,t){return e>>>=0,t||E(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},n.prototype.readInt32BE=function(e,t){return e>>>=0,t||E(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},n.prototype.readFloatLE=function(e,t){return e>>>=0,t||E(e,4,this.length),i.read(this,e,!0,23,4)},n.prototype.readFloatBE=function(e,t){return e>>>=0,t||E(e,4,this.length),i.read(this,e,!1,23,4)},n.prototype.readDoubleLE=function(e,t){return e>>>=0,t||E(e,8,this.length),i.read(this,e,!0,52,8)},n.prototype.readDoubleBE=function(e,t){return e>>>=0,t||E(e,8,this.length),i.read(this,e,!1,52,8)},n.prototype.writeUIntLE=function(e,t,r,i){(e=+e,t>>>=0,r>>>=0,i)||A(this,e,t,r,Math.pow(2,8*r)-1,0);var s=1,n=0;for(this[t]=255&e;++n>>=0,r>>>=0,i)||A(this,e,t,r,Math.pow(2,8*r)-1,0);var s=r-1,n=1;for(this[t+s]=255&e;--s>=0&&(n*=256);)this[t+s]=e/n&255;return t+r},n.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,1,255,0),this[t]=255&e,t+1},n.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},n.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},n.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},n.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},n.prototype.writeIntLE=function(e,t,r,i){if(e=+e,t>>>=0,!i){var s=Math.pow(2,8*r-1);A(this,e,t,r,s-1,-s)}var n=0,o=1,a=0;for(this[t]=255&e;++n>0)-a&255;return t+r},n.prototype.writeIntBE=function(e,t,r,i){if(e=+e,t>>>=0,!i){var s=Math.pow(2,8*r-1);A(this,e,t,r,s-1,-s)}var n=r-1,o=1,a=0;for(this[t+n]=255&e;--n>=0&&(o*=256);)e<0&&0===a&&0!==this[t+n+1]&&(a=1),this[t+n]=(e/o>>0)-a&255;return t+r},n.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},n.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},n.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},n.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},n.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},n.prototype.writeFloatLE=function(e,t,r){return O(this,e,t,!0,r)},n.prototype.writeFloatBE=function(e,t,r){return O(this,e,t,!1,r)},n.prototype.writeDoubleLE=function(e,t,r){return I(this,e,t,!0,r)},n.prototype.writeDoubleBE=function(e,t,r){return I(this,e,t,!1,r)},n.prototype.copy=function(e,t,r,i){if(!n.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-t=0;--o)e[o+t]=this[o+r];else Uint8Array.prototype.set.call(e,this.subarray(r,i),t);return s},n.prototype.fill=function(e,t,r,i){if("string"==typeof e){if("string"==typeof t?(i=t,t=0,r=this.length):"string"==typeof r&&(i=r,r=this.length),void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!n.isEncoding(i))throw new TypeError("Unknown encoding: "+i);if(1===e.length){var s=e.charCodeAt(0);("utf8"===i&&s<128||"latin1"===i)&&(e=s)}}else"number"==typeof e&&(e&=255);if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!s){if(r>56319){(t-=3)>-1&&n.push(239,191,189);continue}if(o+1===i){(t-=3)>-1&&n.push(239,191,189);continue}s=r;continue}if(r<56320){(t-=3)>-1&&n.push(239,191,189),s=r;continue}r=65536+(s-55296<<10|r-56320)}else s&&(t-=3)>-1&&n.push(239,191,189);if(s=null,r<128){if((t-=1)<0)break;n.push(r)}else if(r<2048){if((t-=2)<0)break;n.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;n.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;n.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return n}function B(e){return t.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function D(e,t,r,i){for(var s=0;s=t.length||s>=e.length);++s)t[s+r]=e[s];return s}function F(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function L(e){return e!=e}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":185,buffer:220,ieee754:278}],221:[function(e,t,r){"use strict";var i=e("safe-buffer").Buffer,s=e("stream").Transform,n=e("string_decoder").StringDecoder;function o(e){s.call(this),this.hashMode="string"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}e("inherits")(o,s),o.prototype.update=function(e,t,r){"string"==typeof e&&(e=i.from(e,t));var s=this._update(e);return this.hashMode?this:(r&&(s=this._toString(s,r)),s)},o.prototype.setAutoPadding=function(){},o.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},o.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},o.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},o.prototype._transform=function(e,t,r){var i;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){i=e}finally{r(i)}},o.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},o.prototype._finalOrDigest=function(e){var t=this.__final()||i.alloc(0);return e&&(t=this._toString(t,e,!0)),t},o.prototype._toString=function(e,t,r){if(this._decoder||(this._decoder=new n(t),this._encoding=t),this._encoding!==t)throw new Error("can't switch encodings");var i=this._decoder.write(e);return r&&(i+=this._decoder.end()),i},t.exports=o},{inherits:279,"safe-buffer":332,stream:343,string_decoder:218}],222:[function(e,t,r){"use strict";function i(e){return Object.prototype.toString.call(e)}r.isArray=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===i(e)},r.isBoolean=function(e){return"boolean"==typeof e},r.isNull=function(e){return null===e},r.isNullOrUndefined=function(e){return null==e},r.isNumber=function(e){return"number"==typeof e},r.isString=function(e){return"string"==typeof e},r.isSymbol=function(e){return"symbol"==typeof e},r.isUndefined=function(e){return void 0===e},r.isRegExp=function(e){return"[object RegExp]"===i(e)},r.isObject=function(e){return"object"==typeof e&&null!==e},r.isDate=function(e){return"[object Date]"===i(e)},r.isError=function(e){return"[object Error]"===i(e)||e instanceof Error},r.isFunction=function(e){return"function"==typeof e},r.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},r.isBuffer=e("buffer").Buffer.isBuffer},{buffer:220}],223:[function(e,t,r){(function(r){(function(){"use strict";var i=e("elliptic"),s=e("bn.js");t.exports=function(e){return new o(e)};var n={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};function o(e){this.curveType=n[e],this.curveType||(this.curveType={name:e}),this.curve=new i.ec(this.curveType.name),this.keys=void 0}function a(e,t,i){Array.isArray(e)||(e=e.toArray());var s=new r(e);if(i&&s.lengthr)?t=("rmd160"===e?new h:l(e)).update(t).digest():t.length64?t=e(t):t.length<64&&(t=s.concat([t,o],64));for(var r=this._ipad=s.allocUnsafe(64),i=this._opad=s.allocUnsafe(64),a=0;a<64;a++)r[a]=54^t[a],i[a]=92^t[a];this._hash=[r]}i(a,n),a.prototype._update=function(e){this._hash.push(e)},a.prototype._final=function(){var e=this._alg(s.concat(this._hash));return this._alg(s.concat([this._opad,e]))},t.exports=a},{"cipher-base":221,inherits:279,"safe-buffer":332}],229:[function(e,t,r){"use strict";r.randomBytes=r.rng=r.pseudoRandomBytes=r.prng=e("randombytes"),r.createHash=r.Hash=e("create-hash"),r.createHmac=r.Hmac=e("create-hmac");var i=e("browserify-sign/algos"),s=Object.keys(i),n=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(s);r.getHashes=function(){return n};var o=e("pbkdf2");r.pbkdf2=o.pbkdf2,r.pbkdf2Sync=o.pbkdf2Sync;var a=e("browserify-cipher");r.Cipher=a.Cipher,r.createCipher=a.createCipher,r.Cipheriv=a.Cipheriv,r.createCipheriv=a.createCipheriv,r.Decipher=a.Decipher,r.createDecipher=a.createDecipher,r.Decipheriv=a.Decipheriv,r.createDecipheriv=a.createDecipheriv,r.getCiphers=a.getCiphers,r.listCiphers=a.listCiphers;var h=e("diffie-hellman");r.DiffieHellmanGroup=h.DiffieHellmanGroup,r.createDiffieHellmanGroup=h.createDiffieHellmanGroup,r.getDiffieHellman=h.getDiffieHellman,r.createDiffieHellman=h.createDiffieHellman,r.DiffieHellman=h.DiffieHellman;var l=e("browserify-sign");r.createSign=l.createSign,r.Sign=l.Sign,r.createVerify=l.createVerify,r.Verify=l.Verify,r.createECDH=e("create-ecdh");var c=e("public-encrypt");r.publicEncrypt=c.publicEncrypt,r.privateEncrypt=c.privateEncrypt,r.publicDecrypt=c.publicDecrypt,r.privateDecrypt=c.privateDecrypt;var u=e("randomfill");r.randomFill=u.randomFill,r.randomFillSync=u.randomFillSync,r.createCredentials=function(){throw new Error(["sorry, createCredentials is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))},r.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}},{"browserify-cipher":206,"browserify-sign":213,"browserify-sign/algos":210,"create-ecdh":223,"create-hash":225,"create-hmac":227,"diffie-hellman":239,pbkdf2:299,"public-encrypt":307,randombytes:314,randomfill:315}],230:[function(e,t,r){"use strict";!function(e,i){"object"==typeof r&&void 0!==t?t.exports=i():(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs=i()}(void 0,(function(){var e=6e4,t=36e5,r="millisecond",i="second",s="minute",n="hour",o="day",a="week",h="month",l="quarter",c="year",u="date",f="Invalid Date",d=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],r=e%100;return"["+e+(t[(r-20)%10]||t[r]||t[0])+"]"}},b=function(e,t,r){var i=String(e);return!i||i.length>=t?e:""+Array(t+1-i.length).join(r)+e},g={s:b,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),i=Math.floor(r/60),s=r%60;return(t<=0?"+":"-")+b(i,2,"0")+":"+b(s,2,"0")},m:function e(t,r){if(t.date()1)return e(o[0])}else{var a=t.name;v[a]=t,s=a}return!i&&s&&(y=s),s||!i&&y},S=function(e,t){if(_(e))return e.clone();var r="object"==typeof t?t:{};return r.date=e,r.args=arguments,new M(r)},k=g;k.l=x,k.i=_,k.w=function(e,t){return S(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var M=function(){function m(e){this.$L=x(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[w]=!0}var b=m.prototype;return b.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(k.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var i=t.match(d);if(i){var s=i[2]-1||0,n=(i[7]||"0").substring(0,3);return r?new Date(Date.UTC(i[1],s,i[3]||1,i[4]||0,i[5]||0,i[6]||0,n)):new Date(i[1],s,i[3]||1,i[4]||0,i[5]||0,i[6]||0,n)}}return new Date(t)}(e),this.init()},b.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},b.$utils=function(){return k},b.isValid=function(){return!(this.$d.toString()===f)},b.isSame=function(e,t){var r=S(e);return this.startOf(t)<=r&&r<=this.endOf(t)},b.isAfter=function(e,t){return S(e)68?1900:2e3)},a=function(e){return function(t){this[e]=+t}},h=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),r=60*t[1]+(+t[2]||0);return 0===r?0:"+"===t[0]?-r:r}(e)}],l=function(e){var t=n[e];return t&&(t.indexOf?t:t.s.concat(t.f))},c=function(e,t){var r,i=n.meridiem;if(i){for(var s=1;s<=24;s+=1)if(e.indexOf(i(s,0,t))>-1){r=s>12;break}}else r=e===(t?"pm":"PM");return r},u={A:[s,function(e){this.afternoon=c(e,!1)}],a:[s,function(e){this.afternoon=c(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[i,a("seconds")],ss:[i,a("seconds")],m:[i,a("minutes")],mm:[i,a("minutes")],H:[i,a("hours")],h:[i,a("hours")],HH:[i,a("hours")],hh:[i,a("hours")],D:[i,a("day")],DD:[r,a("day")],Do:[s,function(e){var t=n.ordinal,r=e.match(/\d+/);if(this.day=r[0],t)for(var i=1;i<=31;i+=1)t(i).replace(/\[|\]/g,"")===e&&(this.day=i)}],M:[i,a("month")],MM:[r,a("month")],MMM:[s,function(e){var t=l("months"),r=(l("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(r<1)throw new Error;this.month=r%12||r}],MMMM:[s,function(e){var t=l("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,a("year")],YY:[r,function(e){this.year=o(e)}],YYYY:[/\d{4}/,a("year")],Z:h,ZZ:h};function f(r){var i,s;i=r,s=n&&n.formats;for(var o=(r=i.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,r,i){var n=i&&i.toUpperCase();return r||s[i]||e[i]||s[n].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,r){return t||r.slice(1)}))}))).match(t),a=o.length,h=0;h-1)return new Date(("X"===t?1e3:1)*e);var i=f(t)(e),s=i.year,n=i.month,o=i.day,a=i.hours,h=i.minutes,l=i.seconds,c=i.milliseconds,u=i.zone,d=new Date,p=o||(s||n?1:d.getDate()),m=s||d.getFullYear(),b=0;s&&!n||(b=n>0?n-1:d.getMonth());var g=a||0,y=h||0,v=l||0,w=c||0;return u?new Date(Date.UTC(m,b,p,g,y,v,w+60*u.offset*1e3)):r?new Date(Date.UTC(m,b,p,g,y,v,w)):new Date(m,b,p,g,y,v,w)}catch(e){return new Date("")}}(t,a,i),this.init(),u&&!0!==u&&(this.$L=this.locale(u).$L),c&&t!=this.format(a)&&(this.$d=new Date("")),n={}}else if(a instanceof Array)for(var d=a.length,p=1;p<=d;p+=1){o[1]=a[p-1];var m=r.apply(this,o);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}p===d&&(this.$d=new Date(""))}else s.call(this,e)}}}))},{}],232:[function(e,t,r){"use strict";!function(e,i){"object"==typeof r&&void 0!==t?t.exports=i():(e="undefined"!=typeof globalThis?globalThis:e||self).dayjs_plugin_utc=i()}(void 0,(function(){var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,r=/([+-]|\d\d)/g;return function(i,s,n){var o=s.prototype;n.utc=function(e){var t={date:e,utc:!0,args:arguments};return new s(t)},o.utc=function(t){var r=n(this.toDate(),{locale:this.$L,utc:!0});return t?r.add(this.utcOffset(),e):r},o.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var a=o.parse;o.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),a.call(this,e)};var h=o.init;o.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else h.call(this)};var l=o.utcOffset;o.utcOffset=function(i,s){var n=this.$utils().u;if(n(i))return this.$u?0:n(this.$offset)?l.call(this):this.$offset;if("string"==typeof i&&null===(i=function(e){void 0===e&&(e="");var i=e.match(t);if(!i)return null;var s=(""+i[0]).match(r)||["-",0,0],n=s[0],o=60*+s[1]+ +s[2];return 0===o?0:"+"===n?o:-o}(i)))return this;var o=Math.abs(i)<=16?60*i:i,a=this;if(s)return a.$offset=o,a.$u=0===i,a;if(0!==i){var h=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(a=this.local().add(o+h,e)).$offset=o,a.$x.$localOffset=h}else a=this.utc();return a};var c=o.format;o.format=function(e){var t=e||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return c.call(this,t)},o.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*e},o.isUTC=function(){return!!this.$u},o.toISOString=function(){return this.toDate().toISOString()},o.toString=function(){return this.toDate().toUTCString()};var u=o.toDate;o.toDate=function(e){return"s"===e&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():u.call(this)};var f=o.diff;o.diff=function(e,t,r){if(e&&this.$u===e.$u)return f.call(this,e,t,r);var i=this.local(),s=n(e).local();return f.call(i,s,t,r)}}}))},{}],233:[function(e,t,r){"use strict";r.utils=e("./des/utils"),r.Cipher=e("./des/cipher"),r.DES=e("./des/des"),r.CBC=e("./des/cbc"),r.EDE=e("./des/ede")},{"./des/cbc":234,"./des/cipher":235,"./des/des":236,"./des/ede":237,"./des/utils":238}],234:[function(e,t,r){"use strict";var i=e("minimalistic-assert"),s=e("inherits"),n={};function o(e){i.equal(e.length,8,"Invalid IV length"),this.iv=new Array(8);for(var t=0;t0;i--)t+=this._buffer(e,t),r+=this._flushBuffer(s,r);return t+=this._buffer(e,t),s},s.prototype.final=function(e){var t,r;return e&&(t=this.update(e)),r="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(r):r},s.prototype._pad=function(e,t){if(0===t)return!1;for(;t>>1];r=n.r28shl(r,a),s=n.r28shl(s,a),n.pc2(r,s,e.keys,o)}},h.prototype._update=function(e,t,r,i){var s=this._desState,o=n.readUInt32BE(e,t),a=n.readUInt32BE(e,t+4);n.ip(o,a,s.tmp,0),o=s.tmp[0],a=s.tmp[1],"encrypt"===this.type?this._encrypt(s,o,a,s.tmp,0):this._decrypt(s,o,a,s.tmp,0),o=s.tmp[0],a=s.tmp[1],n.writeUInt32BE(r,o,i),n.writeUInt32BE(r,a,i+4)},h.prototype._pad=function(e,t){if(!1===this.padding)return!1;for(var r=e.length-t,i=t;i>>0,o=f}n.rip(a,o,i,s)},h.prototype._decrypt=function(e,t,r,i,s){for(var o=r,a=t,h=e.keys.length-2;h>=0;h-=2){var l=e.keys[h],c=e.keys[h+1];n.expand(o,e.tmp,0),l^=e.tmp[0],c^=e.tmp[1];var u=n.substitute(l,c),f=o;o=(a^n.permute(u))>>>0,a=f}n.rip(o,a,i,s)}},{"./cipher":235,"./utils":238,inherits:279,"minimalistic-assert":292}],237:[function(e,t,r){"use strict";var i=e("minimalistic-assert"),s=e("inherits"),n=e("./cipher"),o=e("./des");function a(e,t){i.equal(t.length,24,"Invalid key length");var r=t.slice(0,8),s=t.slice(8,16),n=t.slice(16,24);this.ciphers="encrypt"===e?[o.create({type:"encrypt",key:r}),o.create({type:"decrypt",key:s}),o.create({type:"encrypt",key:n})]:[o.create({type:"decrypt",key:n}),o.create({type:"encrypt",key:s}),o.create({type:"decrypt",key:r})]}function h(e){n.call(this,e);var t=new a(this.type,this.options.key);this._edeState=t}s(h,n),t.exports=h,h.create=function(e){return new h(e)},h.prototype._update=function(e,t,r,i){var s=this._edeState;s.ciphers[0]._update(e,t,r,i),s.ciphers[1]._update(r,i,r,i),s.ciphers[2]._update(r,i,r,i)},h.prototype._pad=o.prototype._pad,h.prototype._unpad=o.prototype._unpad},{"./cipher":235,"./des":236,inherits:279,"minimalistic-assert":292}],238:[function(e,t,r){"use strict";r.readUInt32BE=function(e,t){return(e[0+t]<<24|e[1+t]<<16|e[2+t]<<8|e[3+t])>>>0},r.writeUInt32BE=function(e,t,r){e[0+r]=t>>>24,e[1+r]=t>>>16&255,e[2+r]=t>>>8&255,e[3+r]=255&t},r.ip=function(e,t,r,i){for(var s=0,n=0,o=6;o>=0;o-=2){for(var a=0;a<=24;a+=8)s<<=1,s|=t>>>a+o&1;for(a=0;a<=24;a+=8)s<<=1,s|=e>>>a+o&1}for(o=6;o>=0;o-=2){for(a=1;a<=25;a+=8)n<<=1,n|=t>>>a+o&1;for(a=1;a<=25;a+=8)n<<=1,n|=e>>>a+o&1}r[i+0]=s>>>0,r[i+1]=n>>>0},r.rip=function(e,t,r,i){for(var s=0,n=0,o=0;o<4;o++)for(var a=24;a>=0;a-=8)s<<=1,s|=t>>>a+o&1,s<<=1,s|=e>>>a+o&1;for(o=4;o<8;o++)for(a=24;a>=0;a-=8)n<<=1,n|=t>>>a+o&1,n<<=1,n|=e>>>a+o&1;r[i+0]=s>>>0,r[i+1]=n>>>0},r.pc1=function(e,t,r,i){for(var s=0,n=0,o=7;o>=5;o--){for(var a=0;a<=24;a+=8)s<<=1,s|=t>>a+o&1;for(a=0;a<=24;a+=8)s<<=1,s|=e>>a+o&1}for(a=0;a<=24;a+=8)s<<=1,s|=t>>a+o&1;for(o=1;o<=3;o++){for(a=0;a<=24;a+=8)n<<=1,n|=t>>a+o&1;for(a=0;a<=24;a+=8)n<<=1,n|=e>>a+o&1}for(a=0;a<=24;a+=8)n<<=1,n|=e>>a+o&1;r[i+0]=s>>>0,r[i+1]=n>>>0},r.r28shl=function(e,t){return e<>>28-t};var i=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];r.pc2=function(e,t,r,s){for(var n=0,o=0,a=i.length>>>1,h=0;h>>i[h]&1;for(h=a;h>>i[h]&1;r[s+0]=n>>>0,r[s+1]=o>>>0},r.expand=function(e,t,r){var i=0,s=0;i=(1&e)<<5|e>>>27;for(var n=23;n>=15;n-=4)i<<=6,i|=e>>>n&63;for(n=11;n>=3;n-=4)s|=e>>>n&63,s<<=6;s|=(31&e)<<1|e>>>31,t[r+0]=i>>>0,t[r+1]=s>>>0};var s=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];r.substitute=function(e,t){for(var r=0,i=0;i<4;i++){r<<=4,r|=s[64*i+(e>>>18-6*i&63)]}for(i=0;i<4;i++){r<<=4,r|=s[256+64*i+(t>>>18-6*i&63)]}return r>>>0};var n=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];r.permute=function(e){for(var t=0,r=0;r>>n[r]&1;return t>>>0},r.padSplit=function(e,t,r){for(var i=e.toString(2);i.lengthe;)r.ishrn(1);if(r.isEven()&&r.iadd(a),r.testn(1)||r.iadd(h),t.cmp(h)){if(!t.cmp(l))for(;r.mod(c).cmp(u);)r.iadd(d)}else for(;r.mod(n).cmp(f);)r.iadd(d);if(b(p=r.shrn(1))&&b(r)&&g(p)&&g(r)&&o.test(p)&&o.test(r))return r}}},{"bn.js":243,"miller-rabin":290,randombytes:314}],242:[function(e,t,r){t.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],243:[function(e,t,r){arguments[4][184][0].apply(r,arguments)},{buffer:188,dup:184}],244:[function(e,t,r){"use strict";var i=r;i.version=e("../package.json").version,i.utils=e("./elliptic/utils"),i.rand=e("brorand"),i.curve=e("./elliptic/curve"),i.curves=e("./elliptic/curves"),i.ec=e("./elliptic/ec"),i.eddsa=e("./elliptic/eddsa")},{"../package.json":260,"./elliptic/curve":247,"./elliptic/curves":250,"./elliptic/ec":251,"./elliptic/eddsa":254,"./elliptic/utils":258,brorand:187}],245:[function(e,t,r){"use strict";var i=e("bn.js"),s=e("../utils"),n=s.getNAF,o=s.getJSF,a=s.assert;function h(e,t){this.type=e,this.p=new i(t.p,16),this.red=t.prime?i.red(t.prime):i.mont(this.p),this.zero=new i(0).toRed(this.red),this.one=new i(1).toRed(this.red),this.two=new i(2).toRed(this.red),this.n=t.n&&new i(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function l(e,t){this.curve=e,this.type=t,this.precomputed=null}t.exports=h,h.prototype.point=function(){throw new Error("Not implemented")},h.prototype.validate=function(){throw new Error("Not implemented")},h.prototype._fixedNafMul=function(e,t){a(e.precomputed);var r=e._getDoubles(),i=n(t,1,this._bitLength),s=(1<=o;c--)h=(h<<1)+i[c];l.push(h)}for(var u=this.jpoint(null,null,null),f=this.jpoint(null,null,null),d=s;d>0;d--){for(o=0;o=0;l--){for(var c=0;l>=0&&0===o[l];l--)c++;if(l>=0&&c++,h=h.dblp(c),l<0)break;var u=o[l];a(0!==u),h="affine"===e.type?u>0?h.mixedAdd(s[u-1>>1]):h.mixedAdd(s[-u-1>>1].neg()):u>0?h.add(s[u-1>>1]):h.add(s[-u-1>>1].neg())}return"affine"===e.type?h.toP():h},h.prototype._wnafMulAdd=function(e,t,r,i,s){var a,h,l,c=this._wnafT1,u=this._wnafT2,f=this._wnafT3,d=0;for(a=0;a=1;a-=2){var m=a-1,b=a;if(1===c[m]&&1===c[b]){var g=[t[m],null,null,t[b]];0===t[m].y.cmp(t[b].y)?(g[1]=t[m].add(t[b]),g[2]=t[m].toJ().mixedAdd(t[b].neg())):0===t[m].y.cmp(t[b].y.redNeg())?(g[1]=t[m].toJ().mixedAdd(t[b]),g[2]=t[m].add(t[b].neg())):(g[1]=t[m].toJ().mixedAdd(t[b]),g[2]=t[m].toJ().mixedAdd(t[b].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],v=o(r[m],r[b]);for(d=Math.max(v[0].length,d),f[m]=new Array(d),f[b]=new Array(d),h=0;h=0;a--){for(var k=0;a>=0;){var M=!0;for(h=0;h=0&&k++,x=x.dblp(k),a<0)break;for(h=0;h0?l=u[h][C-1>>1]:C<0&&(l=u[h][-C-1>>1].neg()),x="affine"===l.type?x.mixedAdd(l):x.add(l))}}for(a=0;a=Math.ceil((e.bitLength()+1)/t.step)},l.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],i=this,s=0;s":""},l.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},l.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var i=this.curve._mulA(e),s=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),n=i.redAdd(t),o=n.redSub(r),a=i.redSub(t),h=s.redMul(o),l=n.redMul(a),c=s.redMul(a),u=o.redMul(n);return this.curve.point(h,l,u,c)},l.prototype._projDbl=function(){var e,t,r,i,s,n,o=this.x.redAdd(this.y).redSqr(),a=this.x.redSqr(),h=this.y.redSqr();if(this.curve.twisted){var l=(i=this.curve._mulA(a)).redAdd(h);this.zOne?(e=o.redSub(a).redSub(h).redMul(l.redSub(this.curve.two)),t=l.redMul(i.redSub(h)),r=l.redSqr().redSub(l).redSub(l)):(s=this.z.redSqr(),n=l.redSub(s).redISub(s),e=o.redSub(a).redISub(h).redMul(n),t=l.redMul(i.redSub(h)),r=l.redMul(n))}else i=a.redAdd(h),s=this.curve._mulC(this.z).redSqr(),n=i.redSub(s).redSub(s),e=this.curve._mulC(o.redISub(i)).redMul(n),t=this.curve._mulC(i).redMul(a.redISub(h)),r=i.redMul(n);return this.curve.point(e,t,r)},l.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},l.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),i=this.t.redMul(this.curve.dd).redMul(e.t),s=this.z.redMul(e.z.redAdd(e.z)),n=r.redSub(t),o=s.redSub(i),a=s.redAdd(i),h=r.redAdd(t),l=n.redMul(o),c=a.redMul(h),u=n.redMul(h),f=o.redMul(a);return this.curve.point(l,c,f,u)},l.prototype._projAdd=function(e){var t,r,i=this.z.redMul(e.z),s=i.redSqr(),n=this.x.redMul(e.x),o=this.y.redMul(e.y),a=this.curve.d.redMul(n).redMul(o),h=s.redSub(a),l=s.redAdd(a),c=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(n).redISub(o),u=i.redMul(h).redMul(c);return this.curve.twisted?(t=i.redMul(l).redMul(o.redSub(this.curve._mulA(n))),r=h.redMul(l)):(t=i.redMul(l).redMul(o.redSub(n)),r=this.curve._mulC(h).redMul(l)),this.curve.point(u,t,r)},l.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},l.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},l.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},l.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},l.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},l.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},l.prototype.getX=function(){return this.normalize(),this.x.fromRed()},l.prototype.getY=function(){return this.normalize(),this.y.fromRed()},l.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},l.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),i=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(i),0===this.x.cmp(t))return!0}},l.prototype.toP=l.prototype.normalize,l.prototype.mixedAdd=l.prototype.add},{"../utils":258,"./base":245,"bn.js":259,inherits:279}],247:[function(e,t,r){"use strict";var i=r;i.base=e("./base"),i.short=e("./short"),i.mont=e("./mont"),i.edwards=e("./edwards")},{"./base":245,"./edwards":246,"./mont":248,"./short":249}],248:[function(e,t,r){"use strict";var i=e("bn.js"),s=e("inherits"),n=e("./base"),o=e("../utils");function a(e){n.call(this,"mont",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function h(e,t,r){n.BasePoint.call(this,e,"projective"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(t,16),this.z=new i(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}s(a,n),t.exports=a,a.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),i=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===i.redSqrt().redSqr().cmp(i)},s(h,n.BasePoint),a.prototype.decodePoint=function(e,t){return this.point(o.toArray(e,t),1)},a.prototype.point=function(e,t){return new h(this,e,t)},a.prototype.pointFromJSON=function(e){return h.fromJSON(this,e)},h.prototype.precompute=function(){},h.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},h.fromJSON=function(e,t){return new h(e,t[0],t[1]||e.one)},h.prototype.inspect=function(){return this.isInfinity()?"":""},h.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},h.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),i=e.redMul(t),s=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(i,s)},h.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},h.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),i=this.x.redSub(this.z),s=e.x.redAdd(e.z),n=e.x.redSub(e.z).redMul(r),o=s.redMul(i),a=t.z.redMul(n.redAdd(o).redSqr()),h=t.x.redMul(n.redISub(o).redSqr());return this.curve.point(a,h)},h.prototype.mul=function(e){for(var t=e.clone(),r=this,i=this.curve.point(null,null),s=[];0!==t.cmpn(0);t.iushrn(1))s.push(t.andln(1));for(var n=s.length-1;n>=0;n--)0===s[n]?(r=r.diffAdd(i,this),i=i.dbl()):(i=r.diffAdd(i,this),r=r.dbl());return i},h.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},h.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},h.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},h.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},h.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../utils":258,"./base":245,"bn.js":259,inherits:279}],249:[function(e,t,r){"use strict";var i=e("../utils"),s=e("bn.js"),n=e("inherits"),o=e("./base"),a=i.assert;function h(e){o.call(this,"short",e),this.a=new s(e.a,16).toRed(this.red),this.b=new s(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function l(e,t,r,i){o.BasePoint.call(this,e,"affine"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new s(t,16),this.y=new s(r,16),i&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function c(e,t,r,i){o.BasePoint.call(this,e,"jacobian"),null===t&&null===r&&null===i?(this.x=this.curve.one,this.y=this.curve.one,this.z=new s(0)):(this.x=new s(t,16),this.y=new s(r,16),this.z=new s(i,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}n(h,o),t.exports=h,h.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new s(e.beta,16).toRed(this.red);else{var i=this._getEndoRoots(this.p);t=(t=i[0].cmp(i[1])<0?i[0]:i[1]).toRed(this.red)}if(e.lambda)r=new s(e.lambda,16);else{var n=this._getEndoRoots(this.n);0===this.g.mul(n[0]).x.cmp(this.g.x.redMul(t))?r=n[0]:(r=n[1],a(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:r,basis:e.basis?e.basis.map((function(e){return{a:new s(e.a,16),b:new s(e.b,16)}})):this._getEndoBasis(r)}}},h.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:s.mont(e),r=new s(2).toRed(t).redInvm(),i=r.redNeg(),n=new s(3).toRed(t).redNeg().redSqrt().redMul(r);return[i.redAdd(n).fromRed(),i.redSub(n).fromRed()]},h.prototype._getEndoBasis=function(e){for(var t,r,i,n,o,a,h,l,c,u=this.n.ushrn(Math.floor(this.n.bitLength()/2)),f=e,d=this.n.clone(),p=new s(1),m=new s(0),b=new s(0),g=new s(1),y=0;0!==f.cmpn(0);){var v=d.div(f);l=d.sub(v.mul(f)),c=b.sub(v.mul(p));var w=g.sub(v.mul(m));if(!i&&l.cmp(u)<0)t=h.neg(),r=p,i=l.neg(),n=c;else if(i&&2==++y)break;h=l,d=f,f=l,b=p,p=c,g=m,m=w}o=l.neg(),a=c;var _=i.sqr().add(n.sqr());return o.sqr().add(a.sqr()).cmp(_)>=0&&(o=t,a=r),i.negative&&(i=i.neg(),n=n.neg()),o.negative&&(o=o.neg(),a=a.neg()),[{a:i,b:n},{a:o,b:a}]},h.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],i=t[1],s=i.b.mul(e).divRound(this.n),n=r.b.neg().mul(e).divRound(this.n),o=s.mul(r.a),a=n.mul(i.a),h=s.mul(r.b),l=n.mul(i.b);return{k1:e.sub(o).sub(a),k2:h.add(l).neg()}},h.prototype.pointFromX=function(e,t){(e=new s(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),i=r.redSqrt();if(0!==i.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var n=i.fromRed().isOdd();return(t&&!n||!t&&n)&&(i=i.redNeg()),this.point(e,i)},h.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,i=this.a.redMul(t),s=t.redSqr().redMul(t).redIAdd(i).redIAdd(this.b);return 0===r.redSqr().redISub(s).cmpn(0)},h.prototype._endoWnafMulAdd=function(e,t,r){for(var i=this._endoWnafT1,s=this._endoWnafT2,n=0;n":""},l.prototype.isInfinity=function(){return this.inf},l.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),i=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,i)},l.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),i=e.redInvm(),s=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(i),n=s.redSqr().redISub(this.x.redAdd(this.x)),o=s.redMul(this.x.redSub(n)).redISub(this.y);return this.curve.point(n,o)},l.prototype.getX=function(){return this.x.fromRed()},l.prototype.getY=function(){return this.y.fromRed()},l.prototype.mul=function(e){return e=new s(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},l.prototype.mulAdd=function(e,t,r){var i=[this,t],s=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,s):this.curve._wnafMulAdd(1,i,s,2)},l.prototype.jmulAdd=function(e,t,r){var i=[this,t],s=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,s,!0):this.curve._wnafMulAdd(1,i,s,2,!0)},l.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},l.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,i=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(i)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(i)}}}return t},l.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},n(c,o.BasePoint),h.prototype.jpoint=function(e,t,r){return new c(this,e,t,r)},c.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),i=this.y.redMul(t).redMul(e);return this.curve.point(r,i)},c.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},c.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),i=this.x.redMul(t),s=e.x.redMul(r),n=this.y.redMul(t.redMul(e.z)),o=e.y.redMul(r.redMul(this.z)),a=i.redSub(s),h=n.redSub(o);if(0===a.cmpn(0))return 0!==h.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var l=a.redSqr(),c=l.redMul(a),u=i.redMul(l),f=h.redSqr().redIAdd(c).redISub(u).redISub(u),d=h.redMul(u.redISub(f)).redISub(n.redMul(c)),p=this.z.redMul(e.z).redMul(a);return this.curve.jpoint(f,d,p)},c.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,i=e.x.redMul(t),s=this.y,n=e.y.redMul(t).redMul(this.z),o=r.redSub(i),a=s.redSub(n);if(0===o.cmpn(0))return 0!==a.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var h=o.redSqr(),l=h.redMul(o),c=r.redMul(h),u=a.redSqr().redIAdd(l).redISub(c).redISub(c),f=a.redMul(c.redISub(u)).redISub(s.redMul(l)),d=this.z.redMul(o);return this.curve.jpoint(u,f,d)},c.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();var t;if(this.curve.zeroA||this.curve.threeA){var r=this;for(t=0;t=0)return!1;if(r.redIAdd(s),0===this.x.cmp(r))return!0}},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../utils":258,"./base":245,"bn.js":259,inherits:279}],250:[function(e,t,r){"use strict";var i,s=r,n=e("hash.js"),o=e("./curve"),a=e("./utils").assert;function h(e){"short"===e.type?this.curve=new o.short(e):"edwards"===e.type?this.curve=new o.edwards(e):this.curve=new o.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,a(this.g.validate(),"Invalid curve"),a(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function l(e,t){Object.defineProperty(s,e,{configurable:!0,enumerable:!0,get:function(){var r=new h(t);return Object.defineProperty(s,e,{configurable:!0,enumerable:!0,value:r}),r}})}s.PresetCurve=h,l("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:n.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),l("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:n.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),l("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:n.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),l("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:n.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),l("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:n.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),l("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:n.sha256,gRed:!1,g:["9"]}),l("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:n.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{i=e("./precomputed/secp256k1")}catch(e){i=void 0}l("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:n.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",i]})},{"./curve":247,"./precomputed/secp256k1":257,"./utils":258,"hash.js":265}],251:[function(e,t,r){"use strict";var i=e("bn.js"),s=e("hmac-drbg"),n=e("../utils"),o=e("../curves"),a=e("brorand"),h=n.assert,l=e("./key"),c=e("./signature");function u(e){if(!(this instanceof u))return new u(e);"string"==typeof e&&(h(Object.prototype.hasOwnProperty.call(o,e),"Unknown curve "+e),e=o[e]),e instanceof o.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}t.exports=u,u.prototype.keyPair=function(e){return new l(this,e)},u.prototype.keyFromPrivate=function(e,t){return l.fromPrivate(this,e,t)},u.prototype.keyFromPublic=function(e,t){return l.fromPublic(this,e,t)},u.prototype.genKeyPair=function(e){e||(e={});for(var t=new s({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||a(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var o=new i(t.generate(r));if(!(o.cmp(n)>0))return o.iaddn(1),this.keyFromPrivate(o)}},u.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},u.prototype.sign=function(e,t,r,n){"object"==typeof r&&(n=r,r=null),n||(n={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new i(e,16));for(var o=this.n.byteLength(),a=t.getPrivate().toArray("be",o),h=e.toArray("be",o),l=new s({hash:this.hash,entropy:a,nonce:h,pers:n.pers,persEnc:n.persEnc||"utf8"}),u=this.n.sub(new i(1)),f=0;;f++){var d=n.k?n.k(f):new i(l.generate(this.n.byteLength()));if(!((d=this._truncateToN(d,!0)).cmpn(1)<=0||d.cmp(u)>=0)){var p=this.g.mul(d);if(!p.isInfinity()){var m=p.getX(),b=m.umod(this.n);if(0!==b.cmpn(0)){var g=d.invm(this.n).mul(b.mul(t.getPrivate()).iadd(e));if(0!==(g=g.umod(this.n)).cmpn(0)){var y=(p.getY().isOdd()?1:0)|(0!==m.cmp(b)?2:0);return n.canonical&&g.cmp(this.nh)>0&&(g=this.n.sub(g),y^=1),new c({r:b,s:g,recoveryParam:y})}}}}}},u.prototype.verify=function(e,t,r,s){e=this._truncateToN(new i(e,16)),r=this.keyFromPublic(r,s);var n=(t=new c(t,"hex")).r,o=t.s;if(n.cmpn(1)<0||n.cmp(this.n)>=0)return!1;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;var a,h=o.invm(this.n),l=h.mul(e).umod(this.n),u=h.mul(n).umod(this.n);return this.curve._maxwellTrick?!(a=this.g.jmulAdd(l,r.getPublic(),u)).isInfinity()&&a.eqXToP(n):!(a=this.g.mulAdd(l,r.getPublic(),u)).isInfinity()&&0===a.getX().umod(this.n).cmp(n)},u.prototype.recoverPubKey=function(e,t,r,s){h((3&r)===r,"The recovery param is more than two bits"),t=new c(t,s);var n=this.n,o=new i(e),a=t.r,l=t.s,u=1&r,f=r>>1;if(a.cmp(this.curve.p.umod(this.curve.n))>=0&&f)throw new Error("Unable to find sencond key candinate");a=f?this.curve.pointFromX(a.add(this.curve.n),u):this.curve.pointFromX(a,u);var d=t.r.invm(n),p=n.sub(o).mul(d).umod(n),m=l.mul(d).umod(n);return this.g.mulAdd(p,a,m)},u.prototype.getKeyRecoveryParam=function(e,t,r,i){if(null!==(t=new c(t,i)).recoveryParam)return t.recoveryParam;for(var s=0;s<4;s++){var n;try{n=this.recoverPubKey(e,t,s)}catch(e){continue}if(n.eq(r))return s}throw new Error("Unable to find valid recovery factor")}},{"../curves":250,"../utils":258,"./key":252,"./signature":253,"bn.js":259,brorand:187,"hmac-drbg":277}],252:[function(e,t,r){"use strict";var i=e("bn.js"),s=e("../utils").assert;function n(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}t.exports=n,n.fromPublic=function(e,t,r){return t instanceof n?t:new n(e,{pub:t,pubEnc:r})},n.fromPrivate=function(e,t,r){return t instanceof n?t:new n(e,{priv:t,privEnc:r})},n.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},n.prototype.getPublic=function(e,t){return"string"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},n.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},n.prototype._importPrivate=function(e,t){this.priv=new i(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},n.prototype._importPublic=function(e,t){if(e.x||e.y)return"mont"===this.ec.curve.type?s(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||s(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},n.prototype.derive=function(e){return e.validate()||s(e.validate(),"public point not validated"),e.mul(this.priv).getX()},n.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},n.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},n.prototype.inspect=function(){return""}},{"../utils":258,"bn.js":259}],253:[function(e,t,r){"use strict";var i=e("bn.js"),s=e("../utils"),n=s.assert;function o(e,t){if(e instanceof o)return e;this._importDER(e,t)||(n(e.r&&e.s,"Signature without r or s"),this.r=new i(e.r,16),this.s=new i(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function a(){this.place=0}function h(e,t){var r=e[t.place++];if(!(128&r))return r;var i=15&r;if(0===i||i>4)return!1;for(var s=0,n=0,o=t.place;n>>=0;return!(s<=127)&&(t.place=o,s)}function l(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&t>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}t.exports=o,o.prototype._importDER=function(e,t){e=s.toArray(e,t);var r=new a;if(48!==e[r.place++])return!1;var n=h(e,r);if(!1===n)return!1;if(n+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var o=h(e,r);if(!1===o)return!1;var l=e.slice(r.place,o+r.place);if(r.place+=o,2!==e[r.place++])return!1;var c=h(e,r);if(!1===c)return!1;if(e.length!==c+r.place)return!1;var u=e.slice(r.place,c+r.place);if(0===l[0]){if(!(128&l[1]))return!1;l=l.slice(1)}if(0===u[0]){if(!(128&u[1]))return!1;u=u.slice(1)}return this.r=new i(l),this.s=new i(u),this.recoveryParam=null,!0},o.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=l(t),r=l(r);!(r[0]||128&r[1]);)r=r.slice(1);var i=[2];c(i,t.length),(i=i.concat(t)).push(2),c(i,r.length);var n=i.concat(r),o=[48];return c(o,n.length),o=o.concat(n),s.encode(o,e)}},{"../utils":258,"bn.js":259}],254:[function(e,t,r){"use strict";var i=e("hash.js"),s=e("../curves"),n=e("../utils"),o=n.assert,a=n.parseBytes,h=e("./key"),l=e("./signature");function c(e){if(o("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof c))return new c(e);e=s[e].curve,this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=i.sha512}t.exports=c,c.prototype.sign=function(e,t){e=a(e);var r=this.keyFromSecret(t),i=this.hashInt(r.messagePrefix(),e),s=this.g.mul(i),n=this.encodePoint(s),o=this.hashInt(n,r.pubBytes(),e).mul(r.priv()),h=i.add(o).umod(this.curve.n);return this.makeSignature({R:s,S:h,Rencoded:n})},c.prototype.verify=function(e,t,r){e=a(e),t=this.makeSignature(t);var i=this.keyFromPublic(r),s=this.hashInt(t.Rencoded(),i.pubBytes(),e),n=this.g.mul(t.S());return t.R().add(i.pub().mul(s)).eq(n)},c.prototype.hashInt=function(){for(var e=this.hash(),t=0;t(s>>1)-1?(s>>1)-h:h,n.isubn(a)):a=0,i[o]=a,n.iushrn(1)}return i},i.getJSF=function(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var i,s=0,n=0;e.cmpn(-s)>0||t.cmpn(-n)>0;){var o,a,h=e.andln(3)+s&3,l=t.andln(3)+n&3;3===h&&(h=-1),3===l&&(l=-1),o=0==(1&h)?0:3!==(i=e.andln(7)+s&7)&&5!==i||2!==l?h:-h,r[0].push(o),a=0==(1&l)?0:3!==(i=t.andln(7)+n&7)&&5!==i||2!==h?l:-l,r[1].push(a),2*s===o+1&&(s=1-s),2*n===a+1&&(n=1-n),e.iushrn(1),t.iushrn(1)}return r},i.cachedProperty=function(e,t,r){var i="_"+t;e.prototype[t]=function(){return void 0!==this[i]?this[i]:this[i]=r.call(this)}},i.parseBytes=function(e){return"string"==typeof e?i.toArray(e,"hex"):e},i.intFromLE=function(e){return new s(e,"hex","le")}},{"bn.js":259,"minimalistic-assert":292,"minimalistic-crypto-utils":293}],259:[function(e,t,r){arguments[4][184][0].apply(r,arguments)},{buffer:188,dup:184}],260:[function(e,t,r){t.exports={name:"elliptic",version:"6.5.4",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny ",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies:{"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}}},{}],261:[function(e,t,r){"use strict";var i=Object.create||function(e){var t=function(){};return t.prototype=e,new t},s=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return r},n=Function.prototype.bind||function(e){var t=this;return function(){return t.apply(e,arguments)}};function o(){this._events&&Object.prototype.hasOwnProperty.call(this,"_events")||(this._events=i(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}t.exports=o,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._maxListeners=void 0;var a,h=10;try{var l={};Object.defineProperty&&Object.defineProperty(l,"x",{value:0}),a=0===l.x}catch(e){a=!1}function c(e){return void 0===e._maxListeners?o.defaultMaxListeners:e._maxListeners}function u(e,t,r){if(t)e.call(r);else for(var i=e.length,s=_(e,i),n=0;n0&&a.length>n){a.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+a.length+' "'+String(t)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=a.length,"object"==typeof console&&console.warn&&console.warn("%s: %s",h.name,h.message)}}else a=o[t]=r,++e._eventsCount;return e}function g(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),t=0;t1&&(t=arguments[1]),t instanceof Error)throw t;var h=new Error('Unhandled "error" event. ('+t+")");throw h.context=t,h}if(!(r=o[e]))return!1;var l="function"==typeof r;switch(i=arguments.length){case 1:u(r,l,this);break;case 2:f(r,l,this,arguments[1]);break;case 3:d(r,l,this,arguments[1],arguments[2]);break;case 4:p(r,l,this,arguments[1],arguments[2],arguments[3]);break;default:for(s=new Array(i-1),n=1;n=0;o--)if(r[o]===t||r[o].listener===t){a=r[o].listener,n=o;break}if(n<0)return this;0===n?r.shift():function(e,t){for(var r=t,i=r+1,s=e.length;i=0;n--)this.removeListener(e,t[n]);return this},o.prototype.listeners=function(e){return v(this,e,!0)},o.prototype.rawListeners=function(e){return v(this,e,!1)},o.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):w.call(e,t)},o.prototype.listenerCount=w,o.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],262:[function(e,t,r){"use strict";var i=e("safe-buffer").Buffer,s=e("md5.js");t.exports=function(e,t,r,n){if(i.isBuffer(e)||(e=i.from(e,"binary")),t&&(i.isBuffer(t)||(t=i.from(t,"binary")),8!==t.length))throw new RangeError("salt should be Buffer with 8 byte length");for(var o=r/8,a=i.alloc(o),h=i.alloc(n||0),l=i.alloc(0);o>0||n>0;){var c=new s;c.update(l),c.update(e),t&&c.update(t),l=c.digest();var u=0;if(o>0){var f=a.length-o;u=Math.min(o,l.length),l.copy(a,f,0,u),o-=u}if(u0){var d=h.length-n,p=Math.min(n,l.length-u);l.copy(h,d,u,u+p),n-=p}}return l.fill(0),{key:a,iv:h}}},{"md5.js":289,"safe-buffer":332}],263:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.CsvParserStream=r.ParserOptions=r.parseFile=r.parseStream=r.parseString=r.parse=r.FormatterOptions=r.CsvFormatterStream=r.writeToPath=r.writeToString=r.writeToBuffer=r.writeToStream=r.write=r.format=void 0;var i=e("@fast-csv/format");Object.defineProperty(r,"format",{enumerable:!0,get:function(){return i.format}}),Object.defineProperty(r,"write",{enumerable:!0,get:function(){return i.write}}),Object.defineProperty(r,"writeToStream",{enumerable:!0,get:function(){return i.writeToStream}}),Object.defineProperty(r,"writeToBuffer",{enumerable:!0,get:function(){return i.writeToBuffer}}),Object.defineProperty(r,"writeToString",{enumerable:!0,get:function(){return i.writeToString}}),Object.defineProperty(r,"writeToPath",{enumerable:!0,get:function(){return i.writeToPath}}),Object.defineProperty(r,"CsvFormatterStream",{enumerable:!0,get:function(){return i.CsvFormatterStream}}),Object.defineProperty(r,"FormatterOptions",{enumerable:!0,get:function(){return i.FormatterOptions}});var s=e("@fast-csv/parse");Object.defineProperty(r,"parse",{enumerable:!0,get:function(){return s.parse}}),Object.defineProperty(r,"parseString",{enumerable:!0,get:function(){return s.parseString}}),Object.defineProperty(r,"parseStream",{enumerable:!0,get:function(){return s.parseStream}}),Object.defineProperty(r,"parseFile",{enumerable:!0,get:function(){return s.parseFile}}),Object.defineProperty(r,"ParserOptions",{enumerable:!0,get:function(){return s.ParserOptions}}),Object.defineProperty(r,"CsvParserStream",{enumerable:!0,get:function(){return s.CsvParserStream}})},{"@fast-csv/format":151,"@fast-csv/parse":155}],264:[function(e,t,r){"use strict";var i=e("safe-buffer").Buffer,s=e("readable-stream").Transform;function n(e){s.call(this),this._block=i.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}e("inherits")(n,s),n.prototype._transform=function(e,t,r){var i=null;try{this.update(e,t)}catch(e){i=e}r(i)},n.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},n.prototype.update=function(e,t){if(function(e,t){if(!i.isBuffer(e)&&"string"!=typeof e)throw new TypeError(t+" must be a string or a buffer")}(e,"Data"),this._finalized)throw new Error("Digest already called");i.isBuffer(e)||(e=i.from(e,t));for(var r=this._block,s=0;this._blockOffset+e.length-s>=this._blockSize;){for(var n=this._blockOffset;n0;++o)this._length[o]+=a,(a=this._length[o]/4294967296|0)>0&&(this._length[o]-=4294967296*a);return this},n.prototype._update=function(){throw new Error("_update is not implemented")},n.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return t},n.prototype._digest=function(){throw new Error("_digest is not implemented")},t.exports=n},{inherits:279,"readable-stream":330,"safe-buffer":332}],265:[function(e,t,r){"use strict";var i=r;i.utils=e("./hash/utils"),i.common=e("./hash/common"),i.sha=e("./hash/sha"),i.ripemd=e("./hash/ripemd"),i.hmac=e("./hash/hmac"),i.sha1=i.sha.sha1,i.sha256=i.sha.sha256,i.sha224=i.sha.sha224,i.sha384=i.sha.sha384,i.sha512=i.sha.sha512,i.ripemd160=i.ripemd.ripemd160},{"./hash/common":266,"./hash/hmac":267,"./hash/ripemd":268,"./hash/sha":269,"./hash/utils":276}],266:[function(e,t,r){"use strict";var i=e("./utils"),s=e("minimalistic-assert");function n(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}r.BlockHash=n,n.prototype.update=function(e,t){if(e=i.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=i.join32(e,0,e.length-r,this.endian);for(var s=0;s>>24&255,i[s++]=e>>>16&255,i[s++]=e>>>8&255,i[s++]=255&e}else for(i[s++]=255&e,i[s++]=e>>>8&255,i[s++]=e>>>16&255,i[s++]=e>>>24&255,i[s++]=0,i[s++]=0,i[s++]=0,i[s++]=0,n=8;nthis.blockSize&&(e=(new this.Hash).update(e).digest()),s(e.length<=this.blockSize);for(var t=e.length;t>>3},r.g1_256=function(e){return i(e,17)^i(e,19)^e>>>10}},{"../utils":276}],276:[function(e,t,r){"use strict";var i=e("minimalistic-assert"),s=e("inherits");function n(e,t){return 55296==(64512&e.charCodeAt(t))&&(!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1)))}function o(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function a(e){return 1===e.length?"0"+e:e}function h(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length?"000"+e:4===e.length?"0000"+e:3===e.length?"00000"+e:2===e.length?"000000"+e:1===e.length?"0000000"+e:e}r.inherits=s,r.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if("string"==typeof e)if(t){if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),s=0;s>6|192,r[i++]=63&o|128):n(e,s)?(o=65536+((1023&o)<<10)+(1023&e.charCodeAt(++s)),r[i++]=o>>18|240,r[i++]=o>>12&63|128,r[i++]=o>>6&63|128,r[i++]=63&o|128):(r[i++]=o>>12|224,r[i++]=o>>6&63|128,r[i++]=63&o|128)}else for(s=0;s>>0}return o},r.split32=function(e,t){for(var r=new Array(4*e.length),i=0,s=0;i>>24,r[s+1]=n>>>16&255,r[s+2]=n>>>8&255,r[s+3]=255&n):(r[s+3]=n>>>24,r[s+2]=n>>>16&255,r[s+1]=n>>>8&255,r[s]=255&n)}return r},r.rotr32=function(e,t){return e>>>t|e<<32-t},r.rotl32=function(e,t){return e<>>32-t},r.sum32=function(e,t){return e+t>>>0},r.sum32_3=function(e,t,r){return e+t+r>>>0},r.sum32_4=function(e,t,r,i){return e+t+r+i>>>0},r.sum32_5=function(e,t,r,i,s){return e+t+r+i+s>>>0},r.sum64=function(e,t,r,i){var s=e[t],n=i+e[t+1]>>>0,o=(n>>0,e[t+1]=n},r.sum64_hi=function(e,t,r,i){return(t+i>>>0>>0},r.sum64_lo=function(e,t,r,i){return t+i>>>0},r.sum64_4_hi=function(e,t,r,i,s,n,o,a){var h=0,l=t;return h+=(l=l+i>>>0)>>0)>>0)>>0},r.sum64_4_lo=function(e,t,r,i,s,n,o,a){return t+i+n+a>>>0},r.sum64_5_hi=function(e,t,r,i,s,n,o,a,h,l){var c=0,u=t;return c+=(u=u+i>>>0)>>0)>>0)>>0)>>0},r.sum64_5_lo=function(e,t,r,i,s,n,o,a,h,l){return t+i+n+a+l>>>0},r.rotr64_hi=function(e,t,r){return(t<<32-r|e>>>r)>>>0},r.rotr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0},r.shr64_hi=function(e,t,r){return e>>>r},r.shr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0}},{inherits:279,"minimalistic-assert":292}],277:[function(e,t,r){"use strict";var i=e("hash.js"),s=e("minimalistic-crypto-utils"),n=e("minimalistic-assert");function o(e){if(!(this instanceof o))return new o(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=s.toArray(e.entropy,e.entropyEnc||"hex"),r=s.toArray(e.nonce,e.nonceEnc||"hex"),i=s.toArray(e.pers,e.persEnc||"hex");n(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,r,i)}t.exports=o,o.prototype._init=function(e,t,r){var i=e.concat(t).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var s=0;s=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(r||[])),this._reseed=1},o.prototype.generate=function(e,t,r,i){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof t&&(i=r,r=t,t=null),r&&(r=s.toArray(r,i||"hex"),this._update(r));for(var n=[];n.length */r.read=function(e,t,r,i,s){var n,o,a=8*s-i-1,h=(1<>1,c=-7,u=r?s-1:0,f=r?-1:1,d=e[t+u];for(u+=f,n=d&(1<<-c)-1,d>>=-c,c+=a;c>0;n=256*n+e[t+u],u+=f,c-=8);for(o=n&(1<<-c)-1,n>>=-c,c+=i;c>0;o=256*o+e[t+u],u+=f,c-=8);if(0===n)n=1-l;else{if(n===h)return o?NaN:1/0*(d?-1:1);o+=Math.pow(2,i),n-=l}return(d?-1:1)*o*Math.pow(2,n-i)},r.write=function(e,t,r,i,s,n){var o,a,h,l=8*n-s-1,c=(1<>1,f=23===s?Math.pow(2,-24)-Math.pow(2,-77):0,d=i?0:n-1,p=i?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,o=c):(o=Math.floor(Math.log(t)/Math.LN2),t*(h=Math.pow(2,-o))<1&&(o--,h*=2),(t+=o+u>=1?f/h:f*Math.pow(2,1-u))*h>=2&&(o++,h/=2),o+u>=c?(a=0,o=c):o+u>=1?(a=(t*h-1)*Math.pow(2,s),o+=u):(a=t*Math.pow(2,u-1)*Math.pow(2,s),o=0));s>=8;e[r+d]=255&a,d+=p,a/=256,s-=8);for(o=o<0;e[r+d]=255&o,d+=p,o/=256,l-=8);e[r+d-p]|=128*m}},{}],279:[function(e,t,r){"use strict";"function"==typeof Object.create?t.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},{}],280:[function(e,t,r){(function(i,s,n,o,a,h,l,c){(function(){"use strict"; +/*! + +JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/main/LICENSE +*/!function(e){"object"==typeof r&&void 0!==t?t.exports=e():("undefined"!=typeof window?window:void 0!==s?s:"undefined"!=typeof self?self:this).JSZip=e()}((function(){return function t(r,i,s){function n(a,h){if(!i[a]){if(!r[a]){var l="function"==typeof e&&e;if(!h&&l)return l(a,!0);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var u=i[a]={exports:{}};r[a][0].call(u.exports,(function(e){return n(r[a][1][e]||e)}),u,u.exports,t,r,i,s)}return i[a].exports}for(var o="function"==typeof e&&e,a=0;a>2,a=(3&t)<<4|r>>4,h=1>6:64,l=2>4,r=(15&o)<<4|(a=n.indexOf(e.charAt(l++)))>>2,i=(3&a)<<6|(h=n.indexOf(e.charAt(l++))),f[c++]=t,64!==a&&(f[c++]=r),64!==h&&(f[c++]=i);return f}},{"./support":30,"./utils":32}],2:[function(e,t,r){var i=e("./external"),s=e("./stream/DataWorker"),n=e("./stream/Crc32Probe"),o=e("./stream/DataLengthProbe");function a(e,t,r,i,s){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=i,this.compressedContent=s}a.prototype={getContentWorker:function(){var e=new s(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new o("data_length")),t=this;return e.on("end",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),e},getCompressedWorker:function(){return new s(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},a.createWorkerFrom=function(e,t,r){return e.pipe(new n).pipe(new o("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new o("compressedSize")).withStreamInfo("compression",t)},t.exports=a},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){var i=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){var i=e("./utils"),s=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var i=0;i<8;i++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==i.getTypeOf(e)?function(e,t,r,i){var n=s,o=0+r;e^=-1;for(var a=0;a>>8^n[255&(e^t[a])];return-1^e}(0|t,e,e.length):function(e,t,r,i){var n=s,o=0+r;e^=-1;for(var a=0;a>>8^n[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length):0}},{"./utils":32}],5:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){var i;i="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:i}},{lie:37}],7:[function(e,t,r){var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,s=e("pako"),n=e("./utils"),o=e("./stream/GenericWorker"),a=i?"uint8array":"array";function h(e,t){o.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",n.inherits(h,o),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(n.transformTo(a,e.data),!1)},h.prototype.flush=function(){o.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){o.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new s[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(e){return new h("Deflate",e)},r.uncompressWorker=function(){return new h("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){function i(e,t){var r,i="";for(r=0;r>>=8;return i}function s(e,t,r,s,o,c){var u,f,d=e.file,p=e.compression,m=c!==a.utf8encode,b=n.transformTo("string",c(d.name)),g=n.transformTo("string",a.utf8encode(d.name)),y=d.comment,v=n.transformTo("string",c(y)),w=n.transformTo("string",a.utf8encode(y)),_=g.length!==d.name.length,x=w.length!==y.length,S="",k="",M="",C=d.dir,T=d.date,E={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(E.crc32=e.crc32,E.compressedSize=e.compressedSize,E.uncompressedSize=e.uncompressedSize);var A=0;t&&(A|=8),m||!_&&!x||(A|=2048);var R=0,O=0;C&&(R|=16),"UNIX"===o?(O=798,R|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(d.unixPermissions,C)):(O=20,R|=function(e){return 63&(e||0)}(d.dosPermissions)),u=T.getUTCHours(),u<<=6,u|=T.getUTCMinutes(),u<<=5,u|=T.getUTCSeconds()/2,f=T.getUTCFullYear()-1980,f<<=4,f|=T.getUTCMonth()+1,f<<=5,f|=T.getUTCDate(),_&&(k=i(1,1)+i(h(b),4)+g,S+="up"+i(k.length,2)+k),x&&(M=i(1,1)+i(h(v),4)+w,S+="uc"+i(M.length,2)+M);var I="";return I+="\n\0",I+=i(A,2),I+=p.magic,I+=i(u,2),I+=i(f,2),I+=i(E.crc32,4),I+=i(E.compressedSize,4),I+=i(E.uncompressedSize,4),I+=i(b.length,2),I+=i(S.length,2),{fileRecord:l.LOCAL_FILE_HEADER+I+b+S,dirRecord:l.CENTRAL_FILE_HEADER+i(O,2)+I+i(v.length,2)+"\0\0\0\0"+i(R,4)+i(s,4)+b+S+v}}var n=e("../utils"),o=e("../stream/GenericWorker"),a=e("../utf8"),h=e("../crc32"),l=e("../signature");function c(e,t,r,i){o.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=i,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}n.inherits(c,o),c.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,o.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-i-1))/r:100}}))},c.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=s(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},c.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=s(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return l.DATA_DESCRIPTOR+i(e.crc32,4)+i(e.compressedSize,4)+i(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},c.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return i.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=s},{"../utils":32}],19:[function(e,t,r){var i=e("./Uint8ArrayReader");function s(e){i.call(this,e)}e("../utils").inherits(s,i),s.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=s},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){var i=e("./DataReader");function s(e){i.call(this,e)}e("../utils").inherits(s,i),s.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},s.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},s.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},s.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=s},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){var i=e("./ArrayReader");function s(e){i.call(this,e)}e("../utils").inherits(s,i),s.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=s},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){var i=e("../utils"),s=e("../support"),n=e("./ArrayReader"),o=e("./StringReader"),a=e("./NodeBufferReader"),h=e("./Uint8ArrayReader");t.exports=function(e){var t=i.getTypeOf(e);return i.checkSupport(t),"string"!==t||s.uint8array?"nodebuffer"===t?new a(e):s.uint8array?new h(i.transformTo("uint8array",e)):new n(i.transformTo("array",e)):new o(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){r.LOCAL_FILE_HEADER="PK\x03\x04",r.CENTRAL_FILE_HEADER="PK\x01\x02",r.CENTRAL_DIRECTORY_END="PK\x05\x06",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x06\x07",r.ZIP64_CENTRAL_DIRECTORY_END="PK\x06\x06",r.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(e,t,r){var i=e("./GenericWorker"),s=e("../utils");function n(e){i.call(this,"ConvertWorker to "+e),this.destType=e}s.inherits(n,i),n.prototype.processChunk=function(e){this.push({data:s.transformTo(this.destType,e.data),meta:e.meta})},t.exports=n},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){var i=e("./GenericWorker"),s=e("../crc32");function n(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(n,i),n.prototype.processChunk=function(e){this.streamInfo.crc32=s(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=n},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){var i=e("../utils"),s=e("./GenericWorker");function n(e){s.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}i.inherits(n,s),n.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}s.prototype.processChunk.call(this,e)},t.exports=n},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){var i=e("../utils"),s=e("./GenericWorker");function n(e){s.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=i.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}i.inherits(n,s),n.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this.data=null},n.prototype.resume=function(){return!!s.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},n.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},n.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=n},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){function i(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=i},{}],29:[function(e,t,r){var i=e("../utils"),s=e("./ConvertWorker"),o=e("./GenericWorker"),a=e("../base64"),h=e("../support"),l=e("../external"),c=null;if(h.nodestream)try{c=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function u(e,t,r){var n=t;switch(t){case"blob":case"arraybuffer":n="uint8array";break;case"base64":n="string"}try{this._internalType=n,this._outputType=t,this._mimeType=r,i.checkSupport(n),this._worker=e.pipe(new s(n)),e.lock()}catch(e){this._worker=new o("error"),this._worker.error(e)}}u.prototype={accumulate:function(e){return function(e,t){return new l.Promise((function(r,s){var o=[],h=e._internalType,l=e._outputType,c=e._mimeType;e.on("data",(function(e,r){o.push(e),t&&t(r)})).on("error",(function(e){o=[],s(e)})).on("end",(function(){try{var e=function(e,t,r){switch(e){case"blob":return i.newBlob(i.transformTo("arraybuffer",t),r);case"base64":return a.encode(t);default:return i.transformTo(e,t)}}(l,function(e,t){var r,i=0,s=null,o=0;for(r=0;r>>6:(r<65536?t[o++]=224|r>>>12:(t[o++]=240|r>>>18,t[o++]=128|r>>>12&63),t[o++]=128|r>>>6&63),t[o++]=128|63&r);return t}(e)},r.utf8decode=function(e){return s.nodebuffer?i.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,s,n,o=e.length,h=new Array(2*o);for(t=r=0;t>10&1023,h[r++]=56320|1023&s)}return h.length!==r&&(h.subarray?h=h.subarray(0,r):h.length=r),i.applyFromCharCode(h)}(e=i.transformTo(s.uint8array?"uint8array":"array",e))},i.inherits(l,o),l.prototype.processChunk=function(e){var t=i.transformTo(s.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(s.uint8array){var n=t;(t=new Uint8Array(n.length+this.leftOver.length)).set(this.leftOver,0),t.set(n,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var o=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+a[e[r]]>t?r:t}(t),h=t;o!==t.length&&(s.uint8array?(h=t.subarray(0,o),this.leftOver=t.subarray(o,t.length)):(h=t.slice(0,o),this.leftOver=t.slice(o,t.length))),this.push({data:r.utf8decode(h),meta:e.meta})},l.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=l,i.inherits(c,o),c.prototype.processChunk=function(e){this.push({data:r.utf8encode(e.data),meta:e.meta})},r.Utf8EncodeWorker=c},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,r){var i=e("./support"),s=e("./base64"),n=e("./nodejsUtils"),o=e("./external");function a(e){return e}function h(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,i,s=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[o++]=224|r>>>12:(t[o++]=240|r>>>18,t[o++]=128|r>>>12&63),t[o++]=128|r>>>6&63),t[o++]=128|63&r);return t},r.buf2binstring=function(e){return h(e,e.length)},r.binstring2buf=function(e){for(var t=new i.Buf8(e.length),r=0,s=t.length;r>10&1023,l[i++]=56320|1023&s)}return h(l,i)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+o[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){t.exports=function(e,t,r,i){for(var s=65535&e|0,n=e>>>16&65535|0,o=0;0!==r;){for(r-=o=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,s){var n=i,o=s+r;e^=-1;for(var a=s;a>>8^n[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){var i,s=e("../utils/common"),n=e("./trees"),o=e("./adler32"),a=e("./crc32"),h=e("./messages"),l=-2,c=258,u=262,f=113;function d(e,t){return e.msg=h[t],t}function p(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(s.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function g(e,t){n._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,b(e.strm)}function y(e,t){e.pending_buf[e.pending++]=t}function v(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function w(e,t){var r,i,s=e.max_chain_length,n=e.strstart,o=e.prev_length,a=e.nice_match,h=e.strstart>e.w_size-u?e.strstart-(e.w_size-u):0,l=e.window,f=e.w_mask,d=e.prev,p=e.strstart+c,m=l[n+o-1],b=l[n+o];e.prev_length>=e.good_match&&(s>>=2),a>e.lookahead&&(a=e.lookahead);do{if(l[(r=t)+o]===b&&l[r+o-1]===m&&l[r]===l[n]&&l[++r]===l[n+1]){n+=2,r++;do{}while(l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&nh&&0!=--s);return o<=e.lookahead?o:e.lookahead}function _(e){var t,r,i,n,h,l,c,f,d,p,m=e.w_size;do{if(n=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-u)){for(s.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=r=e.hash_size;i=e.head[--t],e.head[t]=m<=i?i-m:0,--r;);for(t=r=m;i=e.prev[--t],e.prev[t]=m<=i?i-m:0,--r;);n+=m}if(0===e.strm.avail_in)break;if(l=e.strm,c=e.window,f=e.strstart+e.lookahead,p=void 0,(d=n)<(p=l.avail_in)&&(p=d),r=0===p?0:(l.avail_in-=p,s.arraySet(c,l.input,l.next_in,p,f),1===l.state.wrap?l.adler=o(l.adler,c,p,f):2===l.state.wrap&&(l.adler=a(l.adler,c,p,f)),l.next_in+=p,l.total_in+=p,p),e.lookahead+=r,e.lookahead+e.insert>=3)for(h=e.strstart-e.insert,e.ins_h=e.window[h],e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3)if(i=n._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3&&e.match_length<=e.prev_length){for(s=e.strstart+e.lookahead-3,i=n._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=s&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(_(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var i=e.block_start+r;if((0===e.strstart||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,g(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-u&&(g(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(g(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(g(e,!1),e.strm.avail_out),1)})),new k(4,4,8,4,x),new k(4,5,16,8,x),new k(4,6,32,32,x),new k(4,4,16,16,S),new k(8,16,32,32,S),new k(8,16,128,128,S),new k(8,32,128,256,S),new k(32,128,258,1024,S),new k(32,258,258,4096,S)],r.deflateInit=function(e,t){return E(e,t,8,15,8,0)},r.deflateInit2=E,r.deflateReset=T,r.deflateResetKeep=C,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?l:(e.state.gzhead=t,0):l},r.deflate=function(e,t){var r,s,o,h;if(!e||!e.state||5>8&255),y(s,s.gzhead.time>>16&255),y(s,s.gzhead.time>>24&255),y(s,9===s.level?2:2<=s.strategy||s.level<2?4:0),y(s,255&s.gzhead.os),s.gzhead.extra&&s.gzhead.extra.length&&(y(s,255&s.gzhead.extra.length),y(s,s.gzhead.extra.length>>8&255)),s.gzhead.hcrc&&(e.adler=a(e.adler,s.pending_buf,s.pending,0)),s.gzindex=0,s.status=69):(y(s,0),y(s,0),y(s,0),y(s,0),y(s,0),y(s,9===s.level?2:2<=s.strategy||s.level<2?4:0),y(s,3),s.status=f);else{var u=8+(s.w_bits-8<<4)<<8;u|=(2<=s.strategy||s.level<2?0:s.level<6?1:6===s.level?2:3)<<6,0!==s.strstart&&(u|=32),u+=31-u%31,s.status=f,v(s,u),0!==s.strstart&&(v(s,e.adler>>>16),v(s,65535&e.adler)),e.adler=1}if(69===s.status)if(s.gzhead.extra){for(o=s.pending;s.gzindex<(65535&s.gzhead.extra.length)&&(s.pending!==s.pending_buf_size||(s.gzhead.hcrc&&s.pending>o&&(e.adler=a(e.adler,s.pending_buf,s.pending-o,o)),b(e),o=s.pending,s.pending!==s.pending_buf_size));)y(s,255&s.gzhead.extra[s.gzindex]),s.gzindex++;s.gzhead.hcrc&&s.pending>o&&(e.adler=a(e.adler,s.pending_buf,s.pending-o,o)),s.gzindex===s.gzhead.extra.length&&(s.gzindex=0,s.status=73)}else s.status=73;if(73===s.status)if(s.gzhead.name){o=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>o&&(e.adler=a(e.adler,s.pending_buf,s.pending-o,o)),b(e),o=s.pending,s.pending===s.pending_buf_size)){h=1;break}h=s.gzindexo&&(e.adler=a(e.adler,s.pending_buf,s.pending-o,o)),0===h&&(s.gzindex=0,s.status=91)}else s.status=91;if(91===s.status)if(s.gzhead.comment){o=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>o&&(e.adler=a(e.adler,s.pending_buf,s.pending-o,o)),b(e),o=s.pending,s.pending===s.pending_buf_size)){h=1;break}h=s.gzindexo&&(e.adler=a(e.adler,s.pending_buf,s.pending-o,o)),0===h&&(s.status=103)}else s.status=103;if(103===s.status&&(s.gzhead.hcrc?(s.pending+2>s.pending_buf_size&&b(e),s.pending+2<=s.pending_buf_size&&(y(s,255&e.adler),y(s,e.adler>>8&255),e.adler=0,s.status=f)):s.status=f),0!==s.pending){if(b(e),0===e.avail_out)return s.last_flush=-1,0}else if(0===e.avail_in&&p(t)<=p(r)&&4!==t)return d(e,-5);if(666===s.status&&0!==e.avail_in)return d(e,-5);if(0!==e.avail_in||0!==s.lookahead||0!==t&&666!==s.status){var w=2===s.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(_(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=n._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(g(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(g(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(g(e,!1),0===e.strm.avail_out)?1:2}(s,t):3===s.strategy?function(e,t){for(var r,i,s,o,a=e.window;;){if(e.lookahead<=c){if(_(e),e.lookahead<=c&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=n._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=n._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(g(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(g(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(g(e,!1),0===e.strm.avail_out)?1:2}(s,t):i[s.level].func(s,t);if(3!==w&&4!==w||(s.status=666),1===w||3===w)return 0===e.avail_out&&(s.last_flush=-1),0;if(2===w&&(1===t?n._tr_align(s):5!==t&&(n._tr_stored_block(s,0,0,!1),3===t&&(m(s.head),0===s.lookahead&&(s.strstart=0,s.block_start=0,s.insert=0))),b(e),0===e.avail_out))return s.last_flush=-1,0}return 4!==t?0:s.wrap<=0?1:(2===s.wrap?(y(s,255&e.adler),y(s,e.adler>>8&255),y(s,e.adler>>16&255),y(s,e.adler>>24&255),y(s,255&e.total_in),y(s,e.total_in>>8&255),y(s,e.total_in>>16&255),y(s,e.total_in>>24&255)):(v(s,e.adler>>>16),v(s,65535&e.adler)),b(e),0=r.w_size&&(0===a&&(m(r.head),r.strstart=0,r.block_start=0,r.insert=0),f=new s.Buf8(r.w_size),s.arraySet(f,t,d-r.w_size,r.w_size,0),t=f,d=r.w_size),h=e.avail_in,c=e.next_in,u=e.input,e.avail_in=d,e.next_in=0,e.input=t,_(r);r.lookahead>=3;){for(i=r.strstart,n=r.lookahead-2;r.ins_h=(r.ins_h<>>=w=v>>>24,p-=w,0==(w=v>>>16&255))C[n++]=65535&v;else{if(!(16&w)){if(0==(64&w)){v=m[(65535&v)+(d&(1<>>=w,p-=w),p<15&&(d+=M[i++]<>>=w=v>>>24,p-=w,!(16&(w=v>>>16&255))){if(0==(64&w)){v=b[(65535&v)+(d&(1<>>=w,p-=w,(w=n-o)>3,d&=(1<<(p-=_<<3))-1,e.next_in=i,e.next_out=n,e.avail_in=i>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function c(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function u(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(852),t.distcode=t.distdyn=new i.Buf32(592),t.sane=1,t.back=-1,0):h}function f(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,u(e)):h}function d(e,t){var r,i;return e&&e.state?(i=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=o.wsize?(i.arraySet(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(s<(n=o.wsize-o.wnext)&&(n=s),i.arraySet(o.window,t,r-s,n,o.wnext),(s-=n)?(i.arraySet(o.window,t,r-s,s,0),o.wnext=s,o.whave=o.wsize):(o.wnext+=n,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,r.check=n(r.check,B,2,0),g=b=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&b)<<8)+(b>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&b)){e.msg="unknown compression method",r.mode=30;break}if(g-=4,O=8+(15&(b>>>=4)),0===r.wbits)r.wbits=O;else if(O>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(B[0]=255&b,B[1]=b>>>8&255,r.check=n(r.check,B,2,0)),g=b=0,r.mode=3;case 3:for(;g<32;){if(0===p)break e;p--,b+=c[f++]<>>8&255,B[2]=b>>>16&255,B[3]=b>>>24&255,r.check=n(r.check,B,4,0)),g=b=0,r.mode=4;case 4:for(;g<16;){if(0===p)break e;p--,b+=c[f++]<>8),512&r.flags&&(B[0]=255&b,B[1]=b>>>8&255,r.check=n(r.check,B,2,0)),g=b=0,r.mode=5;case 5:if(1024&r.flags){for(;g<16;){if(0===p)break e;p--,b+=c[f++]<>>8&255,r.check=n(r.check,B,2,0)),g=b=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(p<(x=r.length)&&(x=p),x&&(r.head&&(O=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),i.arraySet(r.head.extra,c,f,x,O)),512&r.flags&&(r.check=n(r.check,c,x,f)),p-=x,f+=x,r.length-=x),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===p)break e;for(x=0;O=c[f+x++],r.head&&O&&r.length<65536&&(r.head.name+=String.fromCharCode(O)),O&&x>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;g<32;){if(0===p)break e;p--,b+=c[f++]<>>=7&g,g-=7&g,r.mode=27;break}for(;g<3;){if(0===p)break e;p--,b+=c[f++]<>>=1)){case 0:r.mode=14;break;case 1:if(y(r),r.mode=20,6!==t)break;b>>>=2,g-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}b>>>=2,g-=2;break;case 14:for(b>>>=7&g,g-=7&g;g<32;){if(0===p)break e;p--,b+=c[f++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&b,g=b=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(x=r.length){if(p>>=5,g-=5,r.ndist=1+(31&b),b>>>=5,g-=5,r.ncode=4+(15&b),b>>>=4,g-=4,286>>=3,g-=3}for(;r.have<19;)r.lens[D[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,N={bits:r.lenbits},I=a(0,r.lens,0,19,r.lencode,0,r.work,N),r.lenbits=N.bits,I){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,T=65535&j,!((M=j>>>24)<=g);){if(0===p)break e;p--,b+=c[f++]<>>=M,g-=M,r.lens[r.have++]=T;else{if(16===T){for(P=M+2;g>>=M,g-=M,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}O=r.lens[r.have-1],x=3+(3&b),b>>>=2,g-=2}else if(17===T){for(P=M+3;g>>=M)),b>>>=3,g-=3}else{for(P=M+7;g>>=M)),b>>>=7,g-=7}if(r.have+x>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;x--;)r.lens[r.have++]=O}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,N={bits:r.lenbits},I=a(1,r.lens,0,r.nlen,r.lencode,0,r.work,N),r.lenbits=N.bits,I){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,N={bits:r.distbits},I=a(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,N),r.distbits=N.bits,I){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=p&&258<=m){e.next_out=d,e.avail_out=m,e.next_in=f,e.avail_in=p,r.hold=b,r.bits=g,o(e,_),d=e.next_out,u=e.output,m=e.avail_out,f=e.next_in,c=e.input,p=e.avail_in,b=r.hold,g=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;C=(j=r.lencode[b&(1<>>16&255,T=65535&j,!((M=j>>>24)<=g);){if(0===p)break e;p--,b+=c[f++]<>E)])>>>16&255,T=65535&j,!(E+(M=j>>>24)<=g);){if(0===p)break e;p--,b+=c[f++]<>>=E,g-=E,r.back+=E}if(b>>>=M,g-=M,r.back+=M,r.length=T,0===C){r.mode=26;break}if(32&C){r.back=-1,r.mode=12;break}if(64&C){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&C,r.mode=22;case 22:if(r.extra){for(P=r.extra;g>>=r.extra,g-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;C=(j=r.distcode[b&(1<>>16&255,T=65535&j,!((M=j>>>24)<=g);){if(0===p)break e;p--,b+=c[f++]<>E)])>>>16&255,T=65535&j,!(E+(M=j>>>24)<=g);){if(0===p)break e;p--,b+=c[f++]<>>=E,g-=E,r.back+=E}if(b>>>=M,g-=M,r.back+=M,64&C){e.msg="invalid distance code",r.mode=30;break}r.offset=T,r.extra=15&C,r.mode=24;case 24:if(r.extra){for(P=r.extra;g>>=r.extra,g-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===m)break e;if(x=_-m,r.offset>x){if((x=r.offset-x)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}S=x>r.wnext?(x-=r.wnext,r.wsize-x):r.wnext-x,x>r.length&&(x=r.length),k=r.window}else k=u,S=d-r.offset,x=r.length;for(my?(w=D[F+u[k]],N[P+u[k]]):(w=96,0),d=1<>A)+(p-=d)]=v<<24|w<<16|_|0,0!==p;);for(d=1<>=1;if(0!==d?(I&=d-1,I+=d):I=0,k++,0==--j[S]){if(S===C)break;S=t[r+u[k]]}if(T>>7)]}function M(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function A(e,t,r){var i,s,n=new Array(16),o=0;for(i=1;i<=h;i++)n[i]=o=o+r[i-1]<<1;for(s=0;s<=t;s++){var a=e[2*s+1];0!==a&&(e[2*s]=E(n[a]++,a))}}function R(e){var t;for(t=0;t>1;1<=r;r--)N(e,n,r);for(s=l;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],N(e,n,1),i=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=i,n[2*s]=n[2*r]+n[2*i],e.depth[s]=(e.depth[r]>=e.depth[i]?e.depth[r]:e.depth[i])+1,n[2*r+1]=n[2*i+1]=s,e.heap[1]=s++,N(e,n,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,i,s,n,o,a,l=t.dyn_tree,c=t.max_code,u=t.stat_desc.static_tree,f=t.stat_desc.has_stree,d=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,m=t.stat_desc.max_length,b=0;for(n=0;n<=h;n++)e.bl_count[n]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<573;r++)m<(n=l[2*l[2*(i=e.heap[r])+1]+1]+1)&&(n=m,b++),l[2*i+1]=n,c>=7;i>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t>>3,(o=e.static_len+3+7>>>3)<=s&&(s=o)):s=o=r+5,r+4<=s&&-1!==t?L(e,t,r,i):4===e.strategy||o===s?(C(e,2+(i?1:0),3),P(e,d,p)):(C(e,4+(i?1:0),3),function(e,t,r,i){var s;for(C(e,t-257,5),C(e,r-1,5),C(e,i-4,4),s=0;s>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(b[r]+n+1)]++,e.dyn_dtree[2*k(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){C(e,2,3),T(e,256,d),function(e){16===e.bi_valid?(M(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,r){t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(e,t){if(!e.setImmediate){var r,s,n,o,a=1,h={},l=!1,c=e.document,u=Object.getPrototypeOf&&Object.getPrototypeOf(e);u=u&&u.setTimeout?u:e,r="[object process]"==={}.toString.call(e.process)?function(e){i.nextTick((function(){d(e)}))}:function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=r,t}}()?(o="setImmediate$"+Math.random()+"$",e.addEventListener?e.addEventListener("message",p,!1):e.attachEvent("onmessage",p),function(t){e.postMessage(o+t,"*")}):e.MessageChannel?((n=new MessageChannel).port1.onmessage=function(e){d(e.data)},function(e){n.port2.postMessage(e)}):c&&"onreadystatechange"in c.createElement("script")?(s=c.documentElement,function(e){var t=c.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(d,0,e)},u.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),i=0;i-1},oe.prototype.set=function(e,t){var r=this.__data__,i=ue(r,e);return i<0?r.push([e,t]):r[i][1]=t,this},ae.prototype.clear=function(){this.__data__={hash:new ne,map:new(W||oe),string:new ne}},ae.prototype.delete=function(e){return Me(this,e).delete(e)},ae.prototype.get=function(e){return Me(this,e).get(e)},ae.prototype.has=function(e){return Me(this,e).has(e)},ae.prototype.set=function(e,t){return Me(this,e).set(e,t),this},he.prototype.add=he.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},he.prototype.has=function(e){return this.__data__.has(e)},le.prototype.clear=function(){this.__data__=new oe},le.prototype.delete=function(e){return this.__data__.delete(e)},le.prototype.get=function(e){return this.__data__.get(e)},le.prototype.has=function(e){return this.__data__.has(e)},le.prototype.set=function(e,t){var r=this.__data__;if(r instanceof oe){var i=r.__data__;if(!W||i.length<199)return i.push([e,t]),this;r=this.__data__=new ae(i)}return r.set(e,t),this};var de,pe,me=(de=function(e,t){return e&&be(e,t,Ze)},function(e,t){if(null==e)return e;if(!$e(e))return de(e,t);for(var r=e.length,i=pe?r:-1,s=Object(e);(pe?i--:++ia))return!1;var l=n.get(e);if(l&&n.get(t))return l==t;var c=-1,u=!0,f=1&s?new he:void 0;for(n.set(e,t),n.set(t,e);++c-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function qe(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function We(e){return!!e&&"object"==typeof e}function Xe(e){return"symbol"==typeof e||We(e)&&"[object Symbol]"==F.call(e)}var Ke=x?function(e){return function(t){return e(t)}}(x):function(e){return We(e)&&Ve(e.length)&&!!p[F.call(e)]};function Ze(e){return $e(e)?ce(e):xe(e)}function Ye(e){return e}t.exports=De}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],283:[function(e,t,r){"use strict";var i=Object.prototype.toString;t.exports=function(e){return!0===e||!1===e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Boolean]"==i.call(e)}},{}],284:[function(e,t,r){(function(e){(function(){"use strict";var i="[object Arguments]",s="[object Map]",n="[object Object]",o="[object Set]",a=/^\[object .+?Constructor\]$/,h=/^(?:0|[1-9]\d*)$/,l={};l["[object Float32Array]"]=l["[object Float64Array]"]=l["[object Int8Array]"]=l["[object Int16Array]"]=l["[object Int32Array]"]=l["[object Uint8Array]"]=l["[object Uint8ClampedArray]"]=l["[object Uint16Array]"]=l["[object Uint32Array]"]=!0,l[i]=l["[object Array]"]=l["[object ArrayBuffer]"]=l["[object Boolean]"]=l["[object DataView]"]=l["[object Date]"]=l["[object Error]"]=l["[object Function]"]=l[s]=l["[object Number]"]=l[n]=l["[object RegExp]"]=l[o]=l["[object String]"]=l["[object WeakMap]"]=!1;var c="object"==typeof e&&e&&e.Object===Object&&e,u="object"==typeof self&&self&&self.Object===Object&&self,f=c||u||Function("return this")(),d="object"==typeof r&&r&&!r.nodeType&&r,p=d&&"object"==typeof t&&t&&!t.nodeType&&t,m=p&&p.exports===d,b=m&&c.process,g=function(){try{return b&&b.binding&&b.binding("util")}catch(e){}}(),y=g&&g.isTypedArray;function v(e,t){for(var r=-1,i=null==e?0:e.length;++ra))return!1;var l=n.get(e);if(l&&n.get(t))return l==t;var c=-1,u=!0,f=2&r?new ne:void 0;for(n.set(e,t),n.set(t,e);++c-1},ie.prototype.set=function(e,t){var r=this.__data__,i=he(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this},se.prototype.clear=function(){this.size=0,this.__data__={hash:new re,map:new(V||ie),string:new re}},se.prototype.delete=function(e){var t=be(this,e).delete(e);return this.size-=t?1:0,t},se.prototype.get=function(e){return be(this,e).get(e)},se.prototype.has=function(e){return be(this,e).has(e)},se.prototype.set=function(e,t){var r=be(this,e),i=r.size;return r.set(e,t),this.size+=r.size==i?0:1,this},ne.prototype.add=ne.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},ne.prototype.has=function(e){return this.__data__.has(e)},oe.prototype.clear=function(){this.__data__=new ie,this.size=0},oe.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},oe.prototype.get=function(e){return this.__data__.get(e)},oe.prototype.has=function(e){return this.__data__.has(e)},oe.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ie){var i=r.__data__;if(!V||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new se(i)}return r.set(e,t),this.size=r.size,this};var ye=z?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var r=-1,i=null==e?0:e.length,s=0,n=[];++r-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function Ee(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Ae(e){return null!=e&&"object"==typeof e}var Re=y?function(e){return function(t){return e(t)}}(y):function(e){return Ae(e)&&Te(e.length)&&!!l[le(e)]};function Oe(e){return null!=(t=e)&&Te(t.length)&&!Ce(t)?ae(e):de(e);var t}t.exports=function(e,t){return ue(e,t)}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],285:[function(e,t,r){(function(e){(function(){"use strict";var r="object"==typeof e&&e&&e.Object===Object&&e,i="object"==typeof self&&self&&self.Object===Object&&self,s=r||i||Function("return this")(),n=Object.prototype,o=n.hasOwnProperty,a=n.toString,h=s.Symbol,l=h?h.toStringTag:void 0;function c(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":l&&l in Object(e)?function(e){var t=o.call(e,l),r=e[l];try{e[l]=void 0;var i=!0}catch(e){}var s=a.call(e);i&&(t?e[l]=r:delete e[l]);return s}(e):function(e){return a.call(e)}(e)}t.exports=function(e){if(!function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}(e))return!1;var t=c(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],286:[function(e,t,r){"use strict";t.exports=function(e){return null==e}},{}],287:[function(e,t,r){"use strict";t.exports=function(e){return void 0===e}},{}],288:[function(e,t,r){(function(e){(function(){"use strict";var r=/^\[object .+?Constructor\]$/,i="object"==typeof e&&e&&e.Object===Object&&e,s="object"==typeof self&&self&&self.Object===Object&&self,n=i||s||Function("return this")();function o(e,t){return!!(e?e.length:0)&&function(e,t,r){if(t!=t)return function(e,t,r,i){var s=e.length,n=r+(i?1:-1);for(;i?n--:++n-1}function a(e,t,r){for(var i=-1,s=e?e.length:0;++i-1},C.prototype.set=function(e,t){var r=this.__data__,i=A(r,e);return i<0?r.push([e,t]):r[i][1]=t,this},T.prototype.clear=function(){this.__data__={hash:new M,map:new(x||C),string:new M}},T.prototype.delete=function(e){return I(this,e).delete(e)},T.prototype.get=function(e){return I(this,e).get(e)},T.prototype.has=function(e){return I(this,e).has(e)},T.prototype.set=function(e,t){return I(this,e).set(e,t),this},E.prototype.add=E.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},E.prototype.has=function(e){return this.__data__.has(e)};var O=S&&1/c(new S([,-0]))[1]==1/0?function(e){return new S(e)}:function(){};function I(e,t){var r,i,s=e.__data__;return("string"==(i=typeof(r=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==r:null===r)?s["string"==typeof t?"string":"hash"]:s.map}function N(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return R(r)?r:void 0}function P(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}t.exports=function(e){return e&&e.length?function(e,t,r){var i=-1,s=o,n=e.length,h=!0,u=[],f=u;if(r)h=!1,s=a;else if(n>=200){var d=t?null:O(e);if(d)return c(d);h=!1,s=l,f=new E}else f=t?[]:u;e:for(;++i>>32-t}function l(e,t,r,i,s,n,o){return h(e+(t&r|~t&i)+s+n|0,o)+t|0}function c(e,t,r,i,s,n,o){return h(e+(t&i|r&~i)+s+n|0,o)+t|0}function u(e,t,r,i,s,n,o){return h(e+(t^r^i)+s+n|0,o)+t|0}function f(e,t,r,i,s,n,o){return h(e+(r^(t|~i))+s+n|0,o)+t|0}i(a,s),a.prototype._update=function(){for(var e=o,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var r=this._a,i=this._b,s=this._c,n=this._d;r=l(r,i,s,n,e[0],3614090360,7),n=l(n,r,i,s,e[1],3905402710,12),s=l(s,n,r,i,e[2],606105819,17),i=l(i,s,n,r,e[3],3250441966,22),r=l(r,i,s,n,e[4],4118548399,7),n=l(n,r,i,s,e[5],1200080426,12),s=l(s,n,r,i,e[6],2821735955,17),i=l(i,s,n,r,e[7],4249261313,22),r=l(r,i,s,n,e[8],1770035416,7),n=l(n,r,i,s,e[9],2336552879,12),s=l(s,n,r,i,e[10],4294925233,17),i=l(i,s,n,r,e[11],2304563134,22),r=l(r,i,s,n,e[12],1804603682,7),n=l(n,r,i,s,e[13],4254626195,12),s=l(s,n,r,i,e[14],2792965006,17),r=c(r,i=l(i,s,n,r,e[15],1236535329,22),s,n,e[1],4129170786,5),n=c(n,r,i,s,e[6],3225465664,9),s=c(s,n,r,i,e[11],643717713,14),i=c(i,s,n,r,e[0],3921069994,20),r=c(r,i,s,n,e[5],3593408605,5),n=c(n,r,i,s,e[10],38016083,9),s=c(s,n,r,i,e[15],3634488961,14),i=c(i,s,n,r,e[4],3889429448,20),r=c(r,i,s,n,e[9],568446438,5),n=c(n,r,i,s,e[14],3275163606,9),s=c(s,n,r,i,e[3],4107603335,14),i=c(i,s,n,r,e[8],1163531501,20),r=c(r,i,s,n,e[13],2850285829,5),n=c(n,r,i,s,e[2],4243563512,9),s=c(s,n,r,i,e[7],1735328473,14),r=u(r,i=c(i,s,n,r,e[12],2368359562,20),s,n,e[5],4294588738,4),n=u(n,r,i,s,e[8],2272392833,11),s=u(s,n,r,i,e[11],1839030562,16),i=u(i,s,n,r,e[14],4259657740,23),r=u(r,i,s,n,e[1],2763975236,4),n=u(n,r,i,s,e[4],1272893353,11),s=u(s,n,r,i,e[7],4139469664,16),i=u(i,s,n,r,e[10],3200236656,23),r=u(r,i,s,n,e[13],681279174,4),n=u(n,r,i,s,e[0],3936430074,11),s=u(s,n,r,i,e[3],3572445317,16),i=u(i,s,n,r,e[6],76029189,23),r=u(r,i,s,n,e[9],3654602809,4),n=u(n,r,i,s,e[12],3873151461,11),s=u(s,n,r,i,e[15],530742520,16),r=f(r,i=u(i,s,n,r,e[2],3299628645,23),s,n,e[0],4096336452,6),n=f(n,r,i,s,e[7],1126891415,10),s=f(s,n,r,i,e[14],2878612391,15),i=f(i,s,n,r,e[5],4237533241,21),r=f(r,i,s,n,e[12],1700485571,6),n=f(n,r,i,s,e[3],2399980690,10),s=f(s,n,r,i,e[10],4293915773,15),i=f(i,s,n,r,e[1],2240044497,21),r=f(r,i,s,n,e[8],1873313359,6),n=f(n,r,i,s,e[15],4264355552,10),s=f(s,n,r,i,e[6],2734768916,15),i=f(i,s,n,r,e[13],1309151649,21),r=f(r,i,s,n,e[4],4149444226,6),n=f(n,r,i,s,e[11],3174756917,10),s=f(s,n,r,i,e[2],718787259,15),i=f(i,s,n,r,e[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+i|0,this._c=this._c+s|0,this._d=this._d+n|0},a.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=n.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},t.exports=a},{"hash-base":264,inherits:279,"safe-buffer":332}],290:[function(e,t,r){"use strict";var i=e("bn.js"),s=e("brorand");function n(e){this.rand=e||new s.Rand}t.exports=n,n.create=function(e){return new n(e)},n.prototype._randbelow=function(e){var t=e.bitLength(),r=Math.ceil(t/8);do{var s=new i(this.rand.generate(r))}while(s.cmp(e)>=0);return s},n.prototype._randrange=function(e,t){var r=t.sub(e);return e.add(this._randbelow(r))},n.prototype.test=function(e,t,r){var s=e.bitLength(),n=i.mont(e),o=new i(1).toRed(n);t||(t=Math.max(1,s/48|0));for(var a=e.subn(1),h=0;!a.testn(h);h++);for(var l=e.shrn(h),c=a.toRed(n);t>0;t--){var u=this._randrange(new i(2),a);r&&r(u);var f=u.toRed(n).redPow(l);if(0!==f.cmp(o)&&0!==f.cmp(c)){for(var d=1;d0;t--){var c=this._randrange(new i(2),o),u=e.gcd(c);if(0!==u.cmpn(1))return u;var f=c.toRed(s).redPow(h);if(0!==f.cmp(n)&&0!==f.cmp(l)){for(var d=1;d>8,o=255&s;n?r.push(n,o):r.push(o)}return r},i.zero2=s,i.toHex=n,i.encode=function(e,t){return"hex"===t?n(e):e}},{}],294:[function(e,t,r){t.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},{}],295:[function(e,t,r){"use strict";var i=e("asn1.js");r.certificate=e("./certificate");var s=i.define("RSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())}));r.RSAPrivateKey=s;var n=i.define("RSAPublicKey",(function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())}));r.RSAPublicKey=n;var o=i.define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(a),this.key("subjectPublicKey").bitstr())}));r.PublicKey=o;var a=i.define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())})),h=i.define("PrivateKeyInfo",(function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(a),this.key("subjectPrivateKey").octstr())}));r.PrivateKey=h;var l=i.define("EncryptedPrivateKeyInfo",(function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())}));r.EncryptedPrivateKey=l;var c=i.define("DSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())}));r.DSAPrivateKey=c,r.DSAparam=i.define("DSAparam",(function(){this.int()}));var u=i.define("ECPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(f),this.key("publicKey").optional().explicit(1).bitstr())}));r.ECPrivateKey=u;var f=i.define("ECParameters",(function(){this.choice({namedCurve:this.objid()})}));r.signature=i.define("signature",(function(){this.seq().obj(this.key("r").int(),this.key("s").int())}))},{"./certificate":296,"asn1.js":170}],296:[function(e,t,r){"use strict";var i=e("asn1.js"),s=i.define("Time",(function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})})),n=i.define("AttributeTypeValue",(function(){this.seq().obj(this.key("type").objid(),this.key("value").any())})),o=i.define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("parameters").optional(),this.key("curve").objid().optional())})),a=i.define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(o),this.key("subjectPublicKey").bitstr())})),h=i.define("RelativeDistinguishedName",(function(){this.setof(n)})),l=i.define("RDNSequence",(function(){this.seqof(h)})),c=i.define("Name",(function(){this.choice({rdnSequence:this.use(l)})})),u=i.define("Validity",(function(){this.seq().obj(this.key("notBefore").use(s),this.key("notAfter").use(s))})),f=i.define("Extension",(function(){this.seq().obj(this.key("extnID").objid(),this.key("critical").bool().def(!1),this.key("extnValue").octstr())})),d=i.define("TBSCertificate",(function(){this.seq().obj(this.key("version").explicit(0).int().optional(),this.key("serialNumber").int(),this.key("signature").use(o),this.key("issuer").use(c),this.key("validity").use(u),this.key("subject").use(c),this.key("subjectPublicKeyInfo").use(a),this.key("issuerUniqueID").implicit(1).bitstr().optional(),this.key("subjectUniqueID").implicit(2).bitstr().optional(),this.key("extensions").explicit(3).seqof(f).optional())})),p=i.define("X509Certificate",(function(){this.seq().obj(this.key("tbsCertificate").use(d),this.key("signatureAlgorithm").use(o),this.key("signatureValue").bitstr())}));t.exports=p},{"asn1.js":170}],297:[function(e,t,r){"use strict";var i=/Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m,s=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m,n=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m,o=e("evp_bytestokey"),a=e("browserify-aes"),h=e("safe-buffer").Buffer;t.exports=function(e,t){var r,l=e.toString(),c=l.match(i);if(c){var u="aes"+c[1],f=h.from(c[2],"hex"),d=h.from(c[3].replace(/[\r\n]/g,""),"base64"),p=o(t,f.slice(0,8),parseInt(c[1],10)).key,m=[],b=a.createDecipheriv(u,p,f);m.push(b.update(d)),m.push(b.final()),r=h.concat(m)}else{var g=l.match(n);r=h.from(g[2].replace(/[\r\n]/g,""),"base64")}return{tag:l.match(s)[1],data:r}}},{"browserify-aes":191,evp_bytestokey:262,"safe-buffer":332}],298:[function(e,t,r){"use strict";var i=e("./asn1"),s=e("./aesid.json"),n=e("./fixProc"),o=e("browserify-aes"),a=e("pbkdf2"),h=e("safe-buffer").Buffer;function l(e){var t;"object"!=typeof e||h.isBuffer(e)||(t=e.passphrase,e=e.key),"string"==typeof e&&(e=h.from(e));var r,l,c=n(e,t),u=c.tag,f=c.data;switch(u){case"CERTIFICATE":l=i.certificate.decode(f,"der").tbsCertificate.subjectPublicKeyInfo;case"PUBLIC KEY":switch(l||(l=i.PublicKey.decode(f,"der")),r=l.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return i.RSAPublicKey.decode(l.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return l.subjectPrivateKey=l.subjectPublicKey,{type:"ec",data:l};case"1.2.840.10040.4.1":return l.algorithm.params.pub_key=i.DSAparam.decode(l.subjectPublicKey.data,"der"),{type:"dsa",data:l.algorithm.params};default:throw new Error("unknown key id "+r)}case"ENCRYPTED PRIVATE KEY":f=function(e,t){var r=e.algorithm.decrypt.kde.kdeparams.salt,i=parseInt(e.algorithm.decrypt.kde.kdeparams.iters.toString(),10),n=s[e.algorithm.decrypt.cipher.algo.join(".")],l=e.algorithm.decrypt.cipher.iv,c=e.subjectPrivateKey,u=parseInt(n.split("-")[1],10)/8,f=a.pbkdf2Sync(t,r,i,u,"sha1"),d=o.createDecipheriv(n,f,l),p=[];return p.push(d.update(c)),p.push(d.final()),h.concat(p)}(f=i.EncryptedPrivateKey.decode(f,"der"),t);case"PRIVATE KEY":switch(r=(l=i.PrivateKey.decode(f,"der")).algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return i.RSAPrivateKey.decode(l.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:l.algorithm.curve,privateKey:i.ECPrivateKey.decode(l.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return l.algorithm.params.priv_key=i.DSAparam.decode(l.subjectPrivateKey,"der"),{type:"dsa",params:l.algorithm.params};default:throw new Error("unknown key id "+r)}case"RSA PUBLIC KEY":return i.RSAPublicKey.decode(f,"der");case"RSA PRIVATE KEY":return i.RSAPrivateKey.decode(f,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:i.DSAPrivateKey.decode(f,"der")};case"EC PRIVATE KEY":return{curve:(f=i.ECPrivateKey.decode(f,"der")).parameters.value,privateKey:f.privateKey};default:throw new Error("unknown key type "+u)}}t.exports=l,l.signature=i.signature},{"./aesid.json":294,"./asn1":295,"./fixProc":297,"browserify-aes":191,pbkdf2:299,"safe-buffer":332}],299:[function(e,t,r){"use strict";r.pbkdf2=e("./lib/async"),r.pbkdf2Sync=e("./lib/sync")},{"./lib/async":300,"./lib/sync":303}],300:[function(e,t,r){(function(r){(function(){"use strict";var i,s,n=e("safe-buffer").Buffer,o=e("./precondition"),a=e("./default-encoding"),h=e("./sync"),l=e("./to-buffer"),c=r.crypto&&r.crypto.subtle,u={sha:"SHA-1","sha-1":"SHA-1",sha1:"SHA-1",sha256:"SHA-256","sha-256":"SHA-256",sha384:"SHA-384","sha-384":"SHA-384","sha-512":"SHA-512",sha512:"SHA-512"},f=[];function d(){return s||(s=r.process&&r.process.nextTick?r.process.nextTick:r.queueMicrotask?r.queueMicrotask:r.setImmediate?r.setImmediate:r.setTimeout)}function p(e,t,r,i,s){return c.importKey("raw",e,{name:"PBKDF2"},!1,["deriveBits"]).then((function(e){return c.deriveBits({name:"PBKDF2",salt:t,iterations:r,hash:{name:s}},e,i<<3)})).then((function(e){return n.from(e)}))}t.exports=function(e,t,s,m,b,g){"function"==typeof b&&(g=b,b=void 0);var y=u[(b=b||"sha1").toLowerCase()];if(y&&"function"==typeof r.Promise){if(o(s,m),e=l(e,a,"Password"),t=l(t,a,"Salt"),"function"!=typeof g)throw new Error("No callback provided to pbkdf2");!function(e,t){e.then((function(e){d()((function(){t(null,e)}))}),(function(e){d()((function(){t(e)}))}))}(function(e){if(r.process&&!r.process.browser)return Promise.resolve(!1);if(!c||!c.importKey||!c.deriveBits)return Promise.resolve(!1);if(void 0!==f[e])return f[e];var t=p(i=i||n.alloc(8),i,10,128,e).then((function(){return!0})).catch((function(){return!1}));return f[e]=t,t}(y).then((function(r){return r?p(e,t,s,m,y):h(e,t,s,m,b)})),g)}else d()((function(){var r;try{r=h(e,t,s,m,b)}catch(e){return g(e)}g(null,r)}))}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./default-encoding":301,"./precondition":302,"./sync":303,"./to-buffer":304,"safe-buffer":332}],301:[function(e,t,r){(function(e,r){(function(){"use strict";var i;if(r.process&&r.process.browser)i="utf-8";else if(r.process&&r.process.version){i=parseInt(e.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary"}else i="utf-8";t.exports=i}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:306}],302:[function(e,t,r){"use strict";var i=Math.pow(2,30)-1;t.exports=function(e,t){if("number"!=typeof e)throw new TypeError("Iterations not a number");if(e<0)throw new TypeError("Bad iterations");if("number"!=typeof t)throw new TypeError("Key length not a number");if(t<0||t>i||t!=t)throw new TypeError("Bad key length")}},{}],303:[function(e,t,r){"use strict";var i=e("create-hash/md5"),s=e("ripemd160"),n=e("sha.js"),o=e("safe-buffer").Buffer,a=e("./precondition"),h=e("./default-encoding"),l=e("./to-buffer"),c=o.alloc(128),u={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function f(e,t,r){var a=function(e){function t(t){return n(e).update(t).digest()}return"rmd160"===e||"ripemd160"===e?function(e){return(new s).update(e).digest()}:"md5"===e?i:t}(e),h="sha512"===e||"sha384"===e?128:64;t.length>h?t=a(t):t.length1)for(var r=1;rp||new o(t).cmp(d.modulus)>=0)throw new Error("decryption error");f=r?l(new o(t),d):a(t,d);var m=c.alloc(p-f.length);if(f=c.concat([m,f],p),4===u)return function(e,t){var r=e.modulus.byteLength(),i=h("sha1").update(c.alloc(0)).digest(),o=i.length;if(0!==t[0])throw new Error("decryption error");var a=t.slice(1,o+1),l=t.slice(o+1),u=n(a,s(l,o)),f=n(l,s(u,r-o-1));if(function(e,t){e=c.from(e),t=c.from(t);var r=0,i=e.length;e.length!==t.length&&(r++,i=Math.min(e.length,t.length));var s=-1;for(;++s=t.length){n++;break}var o=t.slice(2,s-1);("0002"!==i.toString("hex")&&!r||"0001"!==i.toString("hex")&&r)&&n++;o.length<8&&n++;if(n)throw new Error("decryption error");return t.slice(s)}(0,f,r);if(3===u)return f;throw new Error("unknown padding")}},{"./mgf":308,"./withPublic":312,"./xor":313,"bn.js":309,"browserify-rsa":209,"create-hash":225,"parse-asn1":298,"safe-buffer":332}],311:[function(e,t,r){"use strict";var i=e("parse-asn1"),s=e("randombytes"),n=e("create-hash"),o=e("./mgf"),a=e("./xor"),h=e("bn.js"),l=e("./withPublic"),c=e("browserify-rsa"),u=e("safe-buffer").Buffer;t.exports=function(e,t,r){var f;f=e.padding?e.padding:r?1:4;var d,p=i(e);if(4===f)d=function(e,t){var r=e.modulus.byteLength(),i=t.length,l=n("sha1").update(u.alloc(0)).digest(),c=l.length,f=2*c;if(i>r-f-2)throw new Error("message too long");var d=u.alloc(r-i-f-2),p=r-c-1,m=s(c),b=a(u.concat([l,d,u.alloc(1,1),t],p),o(m,p)),g=a(m,o(b,c));return new h(u.concat([u.alloc(1),g,b],r))}(p,t);else if(1===f)d=function(e,t,r){var i,n=t.length,o=e.modulus.byteLength();if(n>o-11)throw new Error("message too long");i=r?u.alloc(o-n-3,255):function(e){var t,r=u.allocUnsafe(e),i=0,n=s(2*e),o=0;for(;i=0)throw new Error("data too long for modulus")}return r?c(d,p):l(d,p)}},{"./mgf":308,"./withPublic":312,"./xor":313,"bn.js":309,"browserify-rsa":209,"create-hash":225,"parse-asn1":298,randombytes:314,"safe-buffer":332}],312:[function(e,t,r){"use strict";var i=e("bn.js"),s=e("safe-buffer").Buffer;t.exports=function(e,t){return s.from(e.toRed(i.mont(t.modulus)).redPow(new i(t.publicExponent)).fromRed().toArray())}},{"bn.js":309,"safe-buffer":332}],313:[function(e,t,r){"use strict";t.exports=function(e,t){for(var r=e.length,i=-1;++i4294967295)throw new RangeError("requested too many random bytes");var i=s.allocUnsafe(e);if(e>0)if(e>65536)for(var o=0;oc||e<0)throw new TypeError("offset must be a uint32");if(e>h||e>t)throw new RangeError("offset out of range")}function f(e,t,r){if("number"!=typeof e||e!=e)throw new TypeError("size must be a number");if(e>c||e<0)throw new TypeError("size must be a uint32");if(e+t>r||e>h)throw new RangeError("buffer too small")}function d(e,r,i,s){if(t.browser){var n=e.buffer,a=new Uint8Array(n,r,i);return l.getRandomValues(a),s?void t.nextTick((function(){s(null,e)})):e}if(!s)return o(i).copy(e,r),e;o(i,(function(t,i){if(t)return s(t);i.copy(e,r),s(null,e)}))}l&&l.getRandomValues||!t.browser?(r.randomFill=function(e,t,r,s){if(!(a.isBuffer(e)||e instanceof i.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof t)s=t,t=0,r=e.length;else if("function"==typeof r)s=r,r=e.length-t;else if("function"!=typeof s)throw new TypeError('"cb" argument must be a function');return u(t,e.length),f(r,t,e.length),d(e,t,r,s)},r.randomFillSync=function(e,t,r){void 0===t&&(t=0);if(!(a.isBuffer(e)||e instanceof i.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');u(t,e.length),void 0===r&&(r=e.length-t);return f(r,t,e.length),d(e,t,r)}):(r.randomFill=s,r.randomFillSync=s)}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:306,randombytes:314,"safe-buffer":332}],316:[function(e,t,r){"use strict";var i={};function s(e,t,r){r||(r=Error);var s=function(e){var r,i;function s(r,i,s){return e.call(this,function(e,r,i){return"string"==typeof t?t:t(e,r,i)}(r,i,s))||this}return i=e,(r=s).prototype=Object.create(i.prototype),r.prototype.constructor=r,r.__proto__=i,s}(r);s.prototype.name=r.name,s.prototype.code=e,i[e]=s}function n(e,t){if(Array.isArray(e)){var r=e.length;return e=e.map((function(e){return String(e)})),r>2?"one of ".concat(t," ").concat(e.slice(0,r-1).join(", "),", or ")+e[r-1]:2===r?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}return"of ".concat(t," ").concat(String(e))}s("ERR_INVALID_OPT_VALUE",(function(e,t){return'The value "'+t+'" is invalid for option "'+e+'"'}),TypeError),s("ERR_INVALID_ARG_TYPE",(function(e,t,r){var i,s,o,a;if("string"==typeof t&&(s="not ",t.substr(!o||o<0?0:+o,s.length)===s)?(i="must not be",t=t.replace(/^not /,"")):i="must be",function(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}(e," argument"))a="The ".concat(e," ").concat(i," ").concat(n(t,"type"));else{var h=function(e,t,r){return"number"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}(e,".")?"property":"argument";a='The "'.concat(e,'" ').concat(h," ").concat(i," ").concat(n(t,"type"))}return a+=". Received type ".concat(typeof r)}),TypeError),s("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),s("ERR_METHOD_NOT_IMPLEMENTED",(function(e){return"The "+e+" method is not implemented"})),s("ERR_STREAM_PREMATURE_CLOSE","Premature close"),s("ERR_STREAM_DESTROYED",(function(e){return"Cannot call "+e+" after a stream was destroyed"})),s("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),s("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),s("ERR_STREAM_WRITE_AFTER_END","write after end"),s("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),s("ERR_UNKNOWN_ENCODING",(function(e){return"Unknown encoding: "+e}),TypeError),s("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),t.exports.codes=i},{}],317:[function(e,t,r){(function(r){(function(){"use strict";var i=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=l;var s=e("./_stream_readable"),n=e("./_stream_writable");e("inherits")(l,s);for(var o=i(n.prototype),a=0;a0)if("string"==typeof t||o.objectMode||Object.getPrototypeOf(t)===a.prototype||(t=function(e){return a.from(e)}(t)),i)o.endEmitted?x(e,new _):T(e,o,t,!0);else if(o.ended)x(e,new v);else{if(o.destroyed)return!1;o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?T(e,o,t,!1):O(e,o)):T(e,o,t,!1)}else i||(o.reading=!1,O(e,o));return!o.ended&&(o.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=1073741824?e=1073741824:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function A(e){var t=e._readableState;l("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(l("emitReadable",t.flowing),t.emittedReadable=!0,r.nextTick(R,e))}function R(e){var t=e._readableState;l("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,B(e)}function O(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(I,e,t))}function I(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount("data")>0&&e.resume()}function P(e){l("readable nexttick read 0"),e.read(0)}function j(e,t){l("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),B(e),t.flowing&&!t.reading&&e.read(0)}function B(e){var t=e._readableState;for(l("flow",t.flowing);t.flowing&&null!==e.read(););}function D(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function F(e){var t=e._readableState;l("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(L,t,e))}function L(e,t){if(l("endReadableNT",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit("end"),e.autoDestroy)){var r=t._writableState;(!r||r.autoDestroy&&r.finished)&&t.destroy()}}function z(e,t){for(var r=0,i=e.length;r=t.highWaterMark:t.length>0)||t.ended))return l("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?F(this):A(this),null;if(0===(e=E(e,t))&&t.ended)return 0===t.length&&F(this),null;var i,s=t.needReadable;return l("need readable",s),(0===t.length||t.length-e0?D(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&F(this)),null!==i&&this.emit("data",i),i},M.prototype._read=function(e){x(this,new w("_read()"))},M.prototype.pipe=function(e,t){var i=this,s=this._readableState;switch(s.pipesCount){case 0:s.pipes=e;break;case 1:s.pipes=[s.pipes,e];break;default:s.pipes.push(e)}s.pipesCount+=1,l("pipe count=%d opts=%j",s.pipesCount,t);var o=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?h:b;function a(t,r){l("onunpipe"),t===i&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,l("cleanup"),e.removeListener("close",p),e.removeListener("finish",m),e.removeListener("drain",c),e.removeListener("error",d),e.removeListener("unpipe",a),i.removeListener("end",h),i.removeListener("end",b),i.removeListener("data",f),u=!0,!s.awaitDrain||e._writableState&&!e._writableState.needDrain||c())}function h(){l("onend"),e.end()}s.endEmitted?r.nextTick(o):i.once("end",o),e.on("unpipe",a);var c=function(e){return function(){var t=e._readableState;l("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&n(e,"data")&&(t.flowing=!0,B(e))}}(i);e.on("drain",c);var u=!1;function f(t){l("ondata");var r=e.write(t);l("dest.write",r),!1===r&&((1===s.pipesCount&&s.pipes===e||s.pipesCount>1&&-1!==z(s.pipes,e))&&!u&&(l("false write response, pause",s.awaitDrain),s.awaitDrain++),i.pause())}function d(t){l("onerror",t),b(),e.removeListener("error",d),0===n(e,"error")&&x(e,t)}function p(){e.removeListener("finish",m),b()}function m(){l("onfinish"),e.removeListener("close",p),b()}function b(){l("unpipe"),i.unpipe(e)}return i.on("data",f),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",d),e.once("close",p),e.once("finish",m),e.emit("pipe",i),s.flowing||(l("pipe resume"),i.resume()),e},M.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var i=t.pipes,s=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var n=0;n0,!1!==s.flowing&&this.resume()):"readable"===e&&(s.endEmitted||s.readableListening||(s.readableListening=s.needReadable=!0,s.flowing=!1,s.emittedReadable=!1,l("on readable",s.length,s.reading),s.length?A(this):s.reading||r.nextTick(P,this))),i},M.prototype.addListener=M.prototype.on,M.prototype.removeListener=function(e,t){var i=o.prototype.removeListener.call(this,e,t);return"readable"===e&&r.nextTick(N,this),i},M.prototype.removeAllListeners=function(e){var t=o.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||r.nextTick(N,this),t},M.prototype.resume=function(){var e=this._readableState;return e.flowing||(l("resume"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(j,e,t))}(this,e)),e.paused=!1,this},M.prototype.pause=function(){return l("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(l("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},M.prototype.wrap=function(e){var t=this,r=this._readableState,i=!1;for(var s in e.on("end",(function(){if(l("wrapped end"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(s){(l("wrapped data"),r.decoder&&(s=r.decoder.write(s)),r.objectMode&&null==s)||(r.objectMode||s&&s.length)&&(t.push(s)||(i=!0,e.pause()))})),e)void 0===this[s]&&"function"==typeof e[s]&&(this[s]=function(t){return function(){return e[t].apply(e,arguments)}}(s));for(var n=0;n-1))throw new _(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(M.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(M.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),M.prototype._write=function(e,t,r){r(new m("_write()"))},M.prototype._writev=null,M.prototype.end=function(e,t,i){var s=this._writableState;return"function"==typeof e?(i=e,e=null,t=null):"function"==typeof t&&(i=t,t=null),null!=e&&this.write(e,t),s.corked&&(s.corked=1,this.uncork()),s.ending||function(e,t,i){t.ending=!0,O(e,t),i&&(t.finished?r.nextTick(i):e.once("finish",i));t.ended=!0,e.writable=!1}(this,s,i),this},Object.defineProperty(M.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(M.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),M.prototype.destroy=u.destroy,M.prototype._undestroy=u.undestroy,M.prototype._destroy=function(e,t){t(e)}}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../errors":316,"./_stream_duplex":317,"./internal/streams/destroy":324,"./internal/streams/state":328,"./internal/streams/stream":329,_process:306,buffer:220,inherits:279,"util-deprecate":362}],322:[function(e,t,r){(function(r){(function(){"use strict";var i;function s(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,t||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var n=e("./end-of-stream"),o=Symbol("lastResolve"),a=Symbol("lastReject"),h=Symbol("error"),l=Symbol("ended"),c=Symbol("lastPromise"),u=Symbol("handlePromise"),f=Symbol("stream");function d(e,t){return{value:e,done:t}}function p(e){var t=e[o];if(null!==t){var r=e[f].read();null!==r&&(e[c]=null,e[o]=null,e[a]=null,t(d(r,!1)))}}function m(e){r.nextTick(p,e)}var b=Object.getPrototypeOf((function(){})),g=Object.setPrototypeOf((s(i={get stream(){return this[f]},next:function(){var e=this,t=this[h];if(null!==t)return Promise.reject(t);if(this[l])return Promise.resolve(d(void 0,!0));if(this[f].destroyed)return new Promise((function(t,i){r.nextTick((function(){e[h]?i(e[h]):t(d(void 0,!0))}))}));var i,s=this[c];if(s)i=new Promise(function(e,t){return function(r,i){e.then((function(){t[l]?r(d(void 0,!0)):t[u](r,i)}),i)}}(s,this));else{var n=this[f].read();if(null!==n)return Promise.resolve(d(n,!1));i=new Promise(this[u])}return this[c]=i,i}},Symbol.asyncIterator,(function(){return this})),s(i,"return",(function(){var e=this;return new Promise((function(t,r){e[f].destroy(null,(function(e){e?r(e):t(d(void 0,!0))}))}))})),i),b);t.exports=function(e){var t,r=Object.create(g,(s(t={},f,{value:e,writable:!0}),s(t,o,{value:null,writable:!0}),s(t,a,{value:null,writable:!0}),s(t,h,{value:null,writable:!0}),s(t,l,{value:e._readableState.endEmitted,writable:!0}),s(t,u,{value:function(e,t){var i=r[f].read();i?(r[c]=null,r[o]=null,r[a]=null,e(d(i,!1))):(r[o]=e,r[a]=t)},writable:!0}),t));return r[c]=null,n(e,(function(e){if(e&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code){var t=r[a];return null!==t&&(r[c]=null,r[o]=null,r[a]=null,t(e)),void(r[h]=e)}var i=r[o];null!==i&&(r[c]=null,r[o]=null,r[a]=null,i(d(void 0,!0))),r[l]=!0})),e.on("readable",m.bind(null,r)),r}}).call(this)}).call(this,e("_process"))},{"./end-of-stream":325,_process:306}],323:[function(e,t,r){"use strict";function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function s(e){for(var t=1;t0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:"unshift",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:"shift",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r}},{key:"concat",value:function(e){if(0===this.length)return h.alloc(0);for(var t,r,i,s=h.allocUnsafe(e>>>0),n=this.head,o=0;n;)t=n.data,r=s,i=o,h.prototype.copy.call(t,r,i),o+=n.data.length,n=n.next;return s}},{key:"consume",value:function(e,t){var r;return es.length?s.length:e;if(n===s.length?i+=s:i+=s.slice(0,e),0==(e-=n)){n===s.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=s.slice(n));break}++r}return this.length-=r,i}},{key:"_getBuffer",value:function(e){var t=h.allocUnsafe(e),r=this.head,i=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var s=r.data,n=e>s.length?s.length:e;if(s.copy(t,t.length-e,0,n),0==(e-=n)){n===s.length?(++i,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=s.slice(n));break}++i}return this.length-=i,t}},{key:c,value:function(e,t){return l(this,s(s({},t),{},{depth:0,customInspect:!1}))}}])&&o(t.prototype,r),i&&o(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}()},{buffer:220,util:188}],324:[function(e,t,r){(function(e){(function(){"use strict";function r(e,t){s(e,t),i(e)}function i(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}function s(e,t){e.emit("error",t)}t.exports={destroy:function(t,n){var o=this,a=this._readableState&&this._readableState.destroyed,h=this._writableState&&this._writableState.destroyed;return a||h?(n?n(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,e.nextTick(s,this,t)):e.nextTick(s,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!n&&t?o._writableState?o._writableState.errorEmitted?e.nextTick(i,o):(o._writableState.errorEmitted=!0,e.nextTick(r,o,t)):e.nextTick(r,o,t):n?(e.nextTick(i,o),n(t)):e.nextTick(i,o)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(e,t){var r=e._readableState,i=e._writableState;r&&r.autoDestroy||i&&i.autoDestroy?e.destroy(t):e.emit("error",t)}}}).call(this)}).call(this,e("_process"))},{_process:306}],325:[function(e,t,r){"use strict";var i=e("../../../errors").codes.ERR_STREAM_PREMATURE_CLOSE;function s(){}t.exports=function e(t,r,n){if("function"==typeof r)return e(t,null,r);r||(r={}),n=function(e){var t=!1;return function(){if(!t){t=!0;for(var r=arguments.length,i=new Array(r),s=0;s0,(function(e){i||(i=e),e&&o.forEach(l),n||(o.forEach(l),s(i))}))}));return t.reduce(c)}},{"../../../errors":316,"./end-of-stream":325}],328:[function(e,t,r){"use strict";var i=e("../../../errors").codes.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(e,t,r,s){var n=function(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,s,r);if(null!=n){if(!isFinite(n)||Math.floor(n)!==n||n<0)throw new i(s?r:"highWaterMark",n);return Math.floor(n)}return e.objectMode?16:16384}}},{"../../../errors":316}],329:[function(e,t,r){"use strict";t.exports=e("events").EventEmitter},{events:261}],330:[function(e,t,r){"use strict";(r=t.exports=e("./lib/_stream_readable.js")).Stream=r,r.Readable=r,r.Writable=e("./lib/_stream_writable.js"),r.Duplex=e("./lib/_stream_duplex.js"),r.Transform=e("./lib/_stream_transform.js"),r.PassThrough=e("./lib/_stream_passthrough.js"),r.finished=e("./lib/internal/streams/end-of-stream.js"),r.pipeline=e("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":317,"./lib/_stream_passthrough.js":318,"./lib/_stream_readable.js":319,"./lib/_stream_transform.js":320,"./lib/_stream_writable.js":321,"./lib/internal/streams/end-of-stream.js":325,"./lib/internal/streams/pipeline.js":327}],331:[function(e,t,r){"use strict";var i=e("buffer").Buffer,s=e("inherits"),n=e("hash-base"),o=new Array(16),a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],h=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],l=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],c=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],u=[0,1518500249,1859775393,2400959708,2840853838],f=[1352829926,1548603684,1836072691,2053994217,0];function d(){n.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(e,t){return e<>>32-t}function m(e,t,r,i,s,n,o,a){return p(e+(t^r^i)+n+o|0,a)+s|0}function b(e,t,r,i,s,n,o,a){return p(e+(t&r|~t&i)+n+o|0,a)+s|0}function g(e,t,r,i,s,n,o,a){return p(e+((t|~r)^i)+n+o|0,a)+s|0}function y(e,t,r,i,s,n,o,a){return p(e+(t&i|r&~i)+n+o|0,a)+s|0}function v(e,t,r,i,s,n,o,a){return p(e+(t^(r|~i))+n+o|0,a)+s|0}s(d,n),d.prototype._update=function(){for(var e=o,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var r=0|this._a,i=0|this._b,s=0|this._c,n=0|this._d,d=0|this._e,w=0|this._a,_=0|this._b,x=0|this._c,S=0|this._d,k=0|this._e,M=0;M<80;M+=1){var C,T;M<16?(C=m(r,i,s,n,d,e[a[M]],u[0],l[M]),T=v(w,_,x,S,k,e[h[M]],f[0],c[M])):M<32?(C=b(r,i,s,n,d,e[a[M]],u[1],l[M]),T=y(w,_,x,S,k,e[h[M]],f[1],c[M])):M<48?(C=g(r,i,s,n,d,e[a[M]],u[2],l[M]),T=g(w,_,x,S,k,e[h[M]],f[2],c[M])):M<64?(C=y(r,i,s,n,d,e[a[M]],u[3],l[M]),T=b(w,_,x,S,k,e[h[M]],f[3],c[M])):(C=v(r,i,s,n,d,e[a[M]],u[4],l[M]),T=m(w,_,x,S,k,e[h[M]],f[4],c[M])),r=d,d=n,n=p(s,10),s=i,i=C,w=k,k=S,S=p(x,10),x=_,_=T}var E=this._b+s+S|0;this._b=this._c+n+k|0,this._c=this._d+d+w|0,this._d=this._e+r+_|0,this._e=this._a+i+x|0,this._a=E},d.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=i.alloc?i.alloc(20):new i(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},t.exports=d},{buffer:220,"hash-base":264,inherits:279}],332:[function(e,t,r){"use strict"; +/*! safe-buffer. MIT License. Feross Aboukhadijeh */var i=e("buffer"),s=i.Buffer;function n(e,t){for(var r in e)t[r]=e[r]}function o(e,t,r){return s(e,t,r)}s.from&&s.alloc&&s.allocUnsafe&&s.allocUnsafeSlow?t.exports=i:(n(i,r),r.Buffer=o),o.prototype=Object.create(s.prototype),n(s,o),o.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return s(e,t,r)},o.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var i=s(e);return void 0!==t?"string"==typeof r?i.fill(t,r):i.fill(t):i.fill(0),i},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return s(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}},{buffer:220}],333:[function(e,t,r){(function(r){(function(){"use strict";var i,s=e("buffer"),n=s.Buffer,o={};for(i in s)s.hasOwnProperty(i)&&"SlowBuffer"!==i&&"Buffer"!==i&&(o[i]=s[i]);var a=o.Buffer={};for(i in n)n.hasOwnProperty(i)&&"allocUnsafe"!==i&&"allocUnsafeSlow"!==i&&(a[i]=n[i]);if(o.Buffer.prototype=n.prototype,a.from&&a.from!==Uint8Array.from||(a.from=function(e,t,r){if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type '+typeof e);if(e&&void 0===e.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);return n(e,t,r)}),a.alloc||(a.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError('The "size" argument must be of type number. Received type '+typeof e);if(e<0||e>=2*(1<<30))throw new RangeError('The value "'+e+'" is invalid for option "size"');var i=n(e);return t&&0!==t.length?"string"==typeof r?i.fill(t,r):i.fill(t):i.fill(0),i}),!o.kStringMaxLength)try{o.kStringMaxLength=r.binding("buffer").kStringMaxLength}catch(e){}o.constants||(o.constants={MAX_LENGTH:o.kMaxLength},o.kStringMaxLength&&(o.constants.MAX_STRING_LENGTH=o.kStringMaxLength)),t.exports=o}).call(this)}).call(this,e("_process"))},{_process:306,buffer:220}],334:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});const i=e("xmlchars/xml/1.0/ed5"),s=e("xmlchars/xml/1.1/ed2"),n=e("xmlchars/xmlns/1.0/ed3");var o=i.isS,a=i.isChar,h=i.isNameStartChar,l=i.isNameChar,c=i.S_LIST,u=i.NAME_RE,f=s.isChar,d=n.isNCNameStartChar,p=n.isNCNameChar,m=n.NC_NAME_RE;const b="http://www.w3.org/XML/1998/namespace",g="http://www.w3.org/2000/xmlns/",y={__proto__:null,xml:b,xmlns:g},v={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},w=e=>34===e||39===e,_=[34,39],x=[..._,91,62],S=[..._,60,93],k=[61,63,...c],M=[...c,62,38,60];function C(e,t,r){switch(t){case"xml":r!==b&&e.fail(`xml prefix must be bound to ${b}.`);break;case"xmlns":r!==g&&e.fail(`xmlns prefix must be bound to ${g}.`)}switch(r){case g:e.fail(""===t?`the default namespace may not be set to ${r}.`:`may not assign a prefix (even "xmlns") to the URI ${g}.`);break;case b:switch(t){case"xml":break;case"":e.fail(`the default namespace may not be set to ${r}.`);break;default:e.fail("may not assign the xml namespace to another prefix.")}}}const T=e=>m.test(e),E=e=>u.test(e);r.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const A={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};r.SaxesParser=class{constructor(e){this.opt=null!=e?e:{},this.fragmentOpt=!!this.opt.fragment;const t=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=!1!==this.opt.position,this.fileName=this.opt.fileName,t){this.nameStartCheck=d,this.nameCheck=p,this.isName=T,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},y);const e=this.opt.additionalNamespaces;null!=e&&(!function(e,t){for(const r of Object.keys(t))C(e,r,t[r])}(this,e),Object.assign(this.ns,e))}else this.nameStartCheck=h,this.nameCheck=l,this.isName=E,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var e;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=0,this.attribList=[];const{fragmentOpt:t}=this;this.state=t?13:0,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=t,this.xmlDeclPossible=!t,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:r}=this.opt;if(void 0===r){if(!0===this.opt.forceXMLVersion)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");r="1.0"}this.setXMLVersion(r),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(v),null===(e=this.readyHandler)||void 0===e||e.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(e,t){this[A[e]]=t}off(e){this[A[e]]=void 0}makeError(e){var t;let r=null!==(t=this.fileName)&&void 0!==t?t:"";return this.trackPosition&&(r.length>0&&(r+=":"),r+=`${this.line}:${this.column}`),r.length>0&&(r+=": "),new Error(r+e)}fail(e){const t=this.makeError(e),r=this.errorHandler;if(void 0===r)throw t;return r(t),this}write(e){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let t=!1;null===e?(t=!0,e=""):"object"==typeof e&&(e=e.toString()),void 0!==this.carriedFromPrevious&&(e=`${this.carriedFromPrevious}${e}`,this.carriedFromPrevious=void 0);let r=e.length;const i=e.charCodeAt(r-1);!t&&(13===i||i>=55296&&i<=56319)&&(this.carriedFromPrevious=e[r-1],r--,e=e.slice(0,r));const{stateTable:s}=this;for(this.chunk=e,this.i=0;this.i=e.length)return-1;const r=e.charCodeAt(t);if(this.column++,r<55296){if(r>=32||9===r)return r;switch(r){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:return 10===e.charCodeAt(t+1)&&(this.i=t+2),this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail("disallowed character."),r}}if(r>56319)return r>=57344&&r<=65533||this.fail("disallowed character."),r;const i=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,i>1114111&&this.fail("disallowed character."),i}getCode11(){const{chunk:e,i:t}=this;if(this.prevI=t,this.i=t+1,t>=e.length)return-1;const r=e.charCodeAt(t);if(this.column++,r<55296){if(r>31&&r<127||r>159&&8232!==r||9===r)return r;switch(r){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:{const r=e.charCodeAt(t+1);10!==r&&133!==r||(this.i=t+2)}case 133:case 8232:return this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail("disallowed character."),r}}if(r>56319)return r>=57344&&r<=65533||this.fail("disallowed character."),r;const i=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,i>1114111&&this.fail("disallowed character."),i}getCodeNorm(){const e=this.getCode();return-2===e?10:e}unget(){this.i=this.prevI,this.column--}captureTo(e){let{i:t}=this;const{chunk:r}=this;for(;;){const i=this.getCode(),s=-2===i,n=s?10:i;if(-1===n||e.includes(n))return this.text+=r.slice(t,this.prevI),n;s&&(this.text+=r.slice(t,this.prevI)+"\n",t=this.i)}}captureToChar(e){let{i:t}=this;const{chunk:r}=this;for(;;){let i=this.getCode();switch(i){case-2:this.text+=r.slice(t,this.prevI)+"\n",t=this.i,i=10;break;case-1:return this.text+=r.slice(t),!1}if(i===e)return this.text+=r.slice(t,this.prevI),!0}}captureNameChars(){const{chunk:e,i:t}=this;for(;;){const r=this.getCode();if(-1===r)return this.name+=e.slice(t),-1;if(!l(r))return this.name+=e.slice(t,this.prevI),-2===r?10:r}}skipSpaces(){for(;;){const e=this.getCodeNorm();if(-1===e||!o(e))return e}}setXMLVersion(e){this.currentXMLVersion=e,"1.0"===e?(this.isChar=a,this.getCode=this.getCode10):(this.isChar=f,this.getCode=this.getCode11)}sBegin(){65279===this.chunk.charCodeAt(0)&&(this.i++,this.column++),this.state=1}sBeginWhitespace(){const e=this.i,t=this.skipSpaces();switch(this.prevI!==e&&(this.xmlDeclPossible=!1),t){case 60:if(this.state=15,0!==this.text.length)throw new Error("no-empty text at start");break;case-1:break;default:this.unget(),this.state=13,this.xmlDeclPossible=!1}}sDoctype(){var e;const t=this.captureTo(x);switch(t){case 62:null===(e=this.doctypeHandler)||void 0===e||e.call(this,this.text),this.text="",this.state=13,this.doctype=!0;break;case-1:break;default:this.text+=String.fromCodePoint(t),91===t?this.state=4:w(t)&&(this.state=3,this.q=t)}}sDoctypeQuote(){const e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.q=null,this.state=2)}sDTD(){const e=this.captureTo(S);-1!==e&&(this.text+=String.fromCodePoint(e),93===e?this.state=2:60===e?this.state=6:w(e)&&(this.state=5,this.q=e))}sDTDQuoted(){const e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.state=4,this.q=null)}sDTDOpenWaka(){const e=this.getCodeNorm();switch(this.text+=String.fromCodePoint(e),e){case 33:this.state=7,this.openWakaBang="";break;case 63:this.state=11;break;default:this.state=4}}sDTDOpenWakaBang(){const e=String.fromCodePoint(this.getCodeNorm()),t=this.openWakaBang+=e;this.text+=e,"-"!==t&&(this.state="--"===t?8:4,this.openWakaBang="")}sDTDComment(){this.captureToChar(45)&&(this.text+="-",this.state=9)}sDTDCommentEnding(){const e=this.getCodeNorm();this.text+=String.fromCodePoint(e),this.state=45===e?10:8}sDTDCommentEnded(){const e=this.getCodeNorm();this.text+=String.fromCodePoint(e),62===e?this.state=4:(this.fail("malformed comment."),this.state=8)}sDTDPI(){this.captureToChar(63)&&(this.text+="?",this.state=12)}sDTDPIEnding(){const e=this.getCodeNorm();this.text+=String.fromCodePoint(e),62===e&&(this.state=4)}sText(){0!==this.tags.length?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:e}=this;const{chunk:t}=this;e:for(;;)switch(this.getCode()){case-2:this.entity+=t.slice(e,this.prevI)+"\n",e=this.i;break;case 59:{const{entityReturnState:r}=this,i=this.entity+t.slice(e,this.prevI);let s;this.state=r,""===i?(this.fail("empty entity name."),s="&;"):(s=this.parseEntity(i),this.entity=""),13===r&&void 0===this.textHandler||(this.text+=s);break e}case-1:this.entity+=t.slice(e);break e}}sOpenWaka(){const e=this.getCode();if(h(e))this.state=34,this.unget(),this.xmlDeclPossible=!1;else switch(e){case 47:this.state=43,this.xmlDeclPossible=!1;break;case 33:this.state=16,this.openWakaBang="",this.xmlDeclPossible=!1;break;case 63:this.state=23;break;default:this.fail("disallowed character in tag name"),this.state=13,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=20,this.openWakaBang="";break;case"--":this.state=17,this.openWakaBang="";break;case"DOCTYPE":this.state=2,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(45)&&(this.state=18)}sCommentEnding(){var e;const t=this.getCodeNorm();45===t?(this.state=19,null===(e=this.commentHandler)||void 0===e||e.call(this,this.text),this.text=""):(this.text+="-"+String.fromCodePoint(t),this.state=17)}sCommentEnded(){const e=this.getCodeNorm();62!==e?(this.fail("malformed comment."),this.text+="--"+String.fromCodePoint(e),this.state=17):this.state=13}sCData(){this.captureToChar(93)&&(this.state=21)}sCDataEnding(){const e=this.getCodeNorm();93===e?this.state=22:(this.text+="]"+String.fromCodePoint(e),this.state=20)}sCDataEnding2(){var e;const t=this.getCodeNorm();switch(t){case 62:null===(e=this.cdataHandler)||void 0===e||e.call(this,this.text),this.text="",this.state=13;break;case 93:this.text+="]";break;default:this.text+="]]"+String.fromCodePoint(t),this.state=20}}sPIFirstChar(){const e=this.getCodeNorm();this.nameStartCheck(e)?(this.piTarget+=String.fromCodePoint(e),this.state=24):63===e||o(e)?(this.fail("processing instruction without a target."),this.state=63===e?26:25):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(e),this.state=24)}sPIRest(){const{chunk:e,i:t}=this;for(;;){const r=this.getCodeNorm();if(-1===r)return void(this.piTarget+=e.slice(t));if(!this.nameCheck(r)){this.piTarget+=e.slice(t,this.prevI);const i=63===r;i||o(r)?"xml"===this.piTarget?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=i?33:27):this.state=i?26:25:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(r));break}}}sPIBody(){if(0===this.text.length){const e=this.getCodeNorm();63===e?this.state=26:o(e)||(this.text=String.fromCodePoint(e))}else this.captureToChar(63)&&(this.state=26)}sPIEnding(){var e;const t=this.getCodeNorm();if(62===t){const{piTarget:t}=this;"xml"===t.toLowerCase()&&this.fail("the XML declaration must appear at the start of the document."),null===(e=this.piHandler)||void 0===e||e.call(this,{target:t,body:this.text}),this.piTarget=this.text="",this.state=13}else 63===t?this.text+="?":(this.text+="?"+String.fromCodePoint(t),this.state=25);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const e=this.skipSpaces();63!==e?-1!==e&&(this.state=28,this.name=String.fromCodePoint(e)):this.state=33}sXMLDeclName(){const e=this.captureTo(k);if(63===e)return this.state=33,this.name+=this.text,this.text="",void this.fail("XML declaration is incomplete.");if(o(e)||61===e){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail("expected one of "+this.xmlDeclExpects.join(", "))}this.state=61===e?30:29}}sXMLDeclEq(){const e=this.getCodeNorm();if(63===e)return this.state=33,void this.fail("XML declaration is incomplete.");o(e)||(61!==e&&this.fail("value required."),this.state=30)}sXMLDeclValueStart(){const e=this.getCodeNorm();if(63===e)return this.state=33,void this.fail("XML declaration is incomplete.");o(e)||(w(e)?this.q=e:(this.fail("value must be quoted."),this.q=32),this.state=31)}sXMLDeclValue(){const e=this.captureTo([this.q,63]);if(63===e)return this.state=33,this.text="",void this.fail("XML declaration is incomplete.");if(-1===e)return;const t=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const e=t;this.xmlDecl.version=e,/^1\.[0-9]+$/.test(e)?this.opt.forceXMLVersion||this.setXMLVersion(e):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(t)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=t;break;case"standalone":"yes"!==t&&"no"!==t&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=t}this.name="",this.state=32}sXMLDeclSeparator(){const e=this.getCodeNorm();63!==e?(o(e)||(this.fail("whitespace required."),this.unget()),this.state=27):this.state=33}sXMLDeclEnding(){var e;62===this.getCodeNorm()?("xml"!==this.piTarget?this.fail("processing instructions are not allowed before root."):"version"!==this.name&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),null===(e=this.xmldeclHandler)||void 0===e||e.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=13):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var e;const t=this.captureNameChars();if(-1===t)return;const r=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=r.ns=Object.create(null)),null===(e=this.openTagStartHandler)||void 0===e||e.call(this,r),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),t){case 62:this.openTag();break;case 47:this.state=35;break;default:o(t)||this.fail("disallowed character in tag name."),this.state=36}}sOpenTagSlash(){62===this.getCode()?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=36)}sAttrib(){const e=this.skipSpaces();-1!==e&&(h(e)?(this.unget(),this.state=37):62===e?this.openTag():47===e?this.state=35:this.fail("disallowed character in attribute name."))}sAttribName(){const e=this.captureNameChars();61===e?this.state=39:o(e)?this.state=38:62===e?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):-1!==e&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const e=this.skipSpaces();switch(e){case-1:return;case 61:this.state=39;break;default:this.fail("attribute without value."),this.text="",this.name="",62===e?this.openTag():h(e)?(this.unget(),this.state=37):(this.fail("disallowed character in attribute name."),this.state=36)}}sAttribValue(){const e=this.getCodeNorm();w(e)?(this.q=e,this.state=40):o(e)||(this.fail("unquoted attribute value."),this.state=42,this.unget())}sAttribValueQuoted(){const{q:e,chunk:t}=this;let{i:r}=this;for(;;)switch(this.getCode()){case e:return this.pushAttrib(this.name,this.text+t.slice(r,this.prevI)),this.name=this.text="",this.q=null,void(this.state=41);case 38:return this.text+=t.slice(r,this.prevI),this.state=14,void(this.entityReturnState=40);case 10:case-2:case 9:this.text+=t.slice(r,this.prevI)+" ",r=this.i;break;case 60:return this.text+=t.slice(r,this.prevI),void this.fail("disallowed character.");case-1:return void(this.text+=t.slice(r))}}sAttribValueClosed(){const e=this.getCodeNorm();o(e)?this.state=36:62===e?this.openTag():47===e?this.state=35:h(e)?(this.fail("no whitespace between attributes."),this.unget(),this.state=37):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const e=this.captureTo(M);switch(e){case 38:this.state=14,this.entityReturnState=42;break;case 60:this.fail("disallowed character.");break;case-1:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",62===e?this.openTag():this.state=36}}sCloseTag(){const e=this.captureNameChars();62===e?this.closeTag():o(e)?this.state=44:-1!==e&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case 62:this.closeTag();break;case-1:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:e,forbiddenState:t}=this;const{chunk:r,textHandler:i}=this;e:for(;;)switch(this.getCode()){case 60:if(this.state=15,void 0!==i){const{text:t}=this,s=r.slice(e,this.prevI);0!==t.length?(i(t+s),this.text=""):0!==s.length&&i(s)}t=0;break e;case 38:this.state=14,this.entityReturnState=13,void 0!==i&&(this.text+=r.slice(e,this.prevI)),t=0;break e;case 93:switch(t){case 0:t=1;break;case 1:t=2;break;case 2:break;default:throw new Error("impossible state")}break;case 62:2===t&&this.fail('the string "]]>" is disallowed in char data.'),t=0;break;case-2:void 0!==i&&(this.text+=r.slice(e,this.prevI)+"\n"),e=this.i,t=0;break;case-1:void 0!==i&&(this.text+=r.slice(e));break e;default:t=0}this.forbiddenState=t}handleTextOutsideRoot(){let{i:e}=this;const{chunk:t,textHandler:r}=this;let i=!1;e:for(;;){const s=this.getCode();switch(s){case 60:if(this.state=15,void 0!==r){const{text:i}=this,s=t.slice(e,this.prevI);0!==i.length?(r(i+s),this.text=""):0!==s.length&&r(s)}break e;case 38:this.state=14,this.entityReturnState=13,void 0!==r&&(this.text+=t.slice(e,this.prevI)),i=!0;break e;case-2:void 0!==r&&(this.text+=t.slice(e,this.prevI)+"\n"),e=this.i;break;case-1:void 0!==r&&(this.text+=t.slice(e));break e;default:o(s)||(i=!0)}}i&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(e,t){var r;const{prefix:i,local:s}=this.qname(e),n={name:e,prefix:i,local:s,value:t};if(this.attribList.push(n),null===(r=this.attributeHandler)||void 0===r||r.call(this,n),"xmlns"===i){const e=t.trim();"1.0"===this.currentXMLVersion&&""===e&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[s]=e,C(this,s,e)}else if("xmlns"===e){const e=t.trim();this.topNS[""]=e,C(this,"",e)}}pushAttribPlain(e,t){var r;const i={name:e,value:t};this.attribList.push(i),null===(r=this.attributeHandler)||void 0===r||r.call(this,i)}end(){var e,t;this.sawRoot||this.fail("document must contain a root element.");const{tags:r}=this;for(;r.length>0;){const e=r.pop();this.fail("unclosed tag: "+e.name)}0!==this.state&&13!==this.state&&this.fail("unexpected end.");const{text:i}=this;return 0!==i.length&&(null===(e=this.textHandler)||void 0===e||e.call(this,i),this.text=""),this._closed=!0,null===(t=this.endHandler)||void 0===t||t.call(this),this._init(),this}resolve(e){var t,r;let i=this.topNS[e];if(void 0!==i)return i;const{tags:s}=this;for(let t=s.length-1;t>=0;t--)if(i=s[t].ns[e],void 0!==i)return i;return i=this.ns[e],void 0!==i?i:null===(r=(t=this.opt).resolvePrefix)||void 0===r?void 0:r.call(t,e)}qname(e){const t=e.indexOf(":");if(-1===t)return{prefix:"",local:e};const r=e.slice(t+1),i=e.slice(0,t);return(""===i||""===r||r.includes(":"))&&this.fail(`malformed name: ${e}.`),{prefix:i,local:r}}processAttribsNS(){var e;const{attribList:t}=this,r=this.tag;{const{prefix:t,local:i}=this.qname(r.name);r.prefix=t,r.local=i;const s=r.uri=null!==(e=this.resolve(t))&&void 0!==e?e:"";""!==t&&("xmlns"===t&&this.fail('tags may not have "xmlns" as prefix.'),""===s&&(this.fail(`unbound namespace prefix: ${JSON.stringify(t)}.`),r.uri=t))}if(0===t.length)return;const{attributes:i}=r,s=new Set;for(const e of t){const{name:t,prefix:r,local:n}=e;let o,a;""===r?(o="xmlns"===t?g:"",a=t):(o=this.resolve(r),void 0===o&&(this.fail(`unbound namespace prefix: ${JSON.stringify(r)}.`),o=r),a=`{${o}}${n}`),s.has(a)&&this.fail(`duplicate attribute: ${a}.`),s.add(a),e.uri=o,i[t]=e}this.attribList=[]}processAttribsPlain(){const{attribList:e}=this,t=this.tag.attributes;for(const{name:r,value:i}of e)void 0!==t[r]&&this.fail(`duplicate attribute: ${r}.`),t[r]=i;this.attribList=[]}openTag(){var e;this.processAttribs();const{tags:t}=this,r=this.tag;r.isSelfClosing=!1,null===(e=this.openTagHandler)||void 0===e||e.call(this,r),t.push(r),this.state=13,this.name=""}openSelfClosingTag(){var e,t,r;this.processAttribs();const{tags:i}=this,s=this.tag;s.isSelfClosing=!0,null===(e=this.openTagHandler)||void 0===e||e.call(this,s),null===(t=this.closeTagHandler)||void 0===t||t.call(this,s);null===(this.tag=null!==(r=i[i.length-1])&&void 0!==r?r:null)&&(this.closedRoot=!0),this.state=13,this.name=""}closeTag(){const{tags:e,name:t}=this;if(this.state=13,this.name="",""===t)return this.fail("weird empty close tag."),void(this.text+="");const r=this.closeTagHandler;let i=e.length;for(;i-- >0;){const i=this.tag=e.pop();if(this.topNS=i.ns,null==r||r(i),i.name===t)break;this.fail("unexpected close tag.")}0===i?this.closedRoot=!0:i<0&&(this.fail(`unmatched closing tag: ${t}.`),this.text+=``)}parseEntity(e){if("#"!==e[0]){const t=this.ENTITIES[e];return void 0!==t?t:(this.fail(this.isName(e)?"undefined entity.":"disallowed character in entity name."),`&${e};`)}let t=NaN;return"x"===e[1]&&/^#x[0-9a-f]+$/i.test(e)?t=parseInt(e.slice(2),16):/^#[0-9]+$/.test(e)&&(t=parseInt(e.slice(1),10)),this.isChar(t)?String.fromCodePoint(t):(this.fail("malformed character entity."),`&${e};`)}}},{"xmlchars/xml/1.0/ed5":381,"xmlchars/xml/1.1/ed2":382,"xmlchars/xmlns/1.0/ed3":383}],335:[function(e,t,r){"use strict";var i=e("safe-buffer").Buffer;function s(e,t){this._block=i.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}s.prototype.update=function(e,t){"string"==typeof e&&(t=t||"utf8",e=i.from(e,t));for(var r=this._block,s=this._blockSize,n=e.length,o=this._len,a=0;a=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var i=(4294967295&r)>>>0,s=(r-i)/4294967296;this._block.writeUInt32BE(s,this._blockSize-8),this._block.writeUInt32BE(i,this._blockSize-4)}this._update(this._block);var n=this._hash();return e?n.toString(e):n},s.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=s},{"safe-buffer":332}],336:[function(e,t,r){"use strict";var i=t.exports=function(e){e=e.toLowerCase();var t=i[e];if(!t)throw new Error(e+" is not supported (we accept pull requests)");return new t};i.sha=e("./sha"),i.sha1=e("./sha1"),i.sha224=e("./sha224"),i.sha256=e("./sha256"),i.sha384=e("./sha384"),i.sha512=e("./sha512")},{"./sha":337,"./sha1":338,"./sha224":339,"./sha256":340,"./sha384":341,"./sha512":342}],337:[function(e,t,r){"use strict";var i=e("inherits"),s=e("./hash"),n=e("safe-buffer").Buffer,o=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function h(){this.init(),this._w=a,s.call(this,64,56)}function l(e){return e<<30|e>>>2}function c(e,t,r,i){return 0===e?t&r|~t&i:2===e?t&r|t&i|r&i:t^r^i}i(h,s),h.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},h.prototype._update=function(e){for(var t,r=this._w,i=0|this._a,s=0|this._b,n=0|this._c,a=0|this._d,h=0|this._e,u=0;u<16;++u)r[u]=e.readInt32BE(4*u);for(;u<80;++u)r[u]=r[u-3]^r[u-8]^r[u-14]^r[u-16];for(var f=0;f<80;++f){var d=~~(f/20),p=0|((t=i)<<5|t>>>27)+c(d,s,n,a)+h+r[f]+o[d];h=a,a=n,n=l(s),s=i,i=p}this._a=i+this._a|0,this._b=s+this._b|0,this._c=n+this._c|0,this._d=a+this._d|0,this._e=h+this._e|0},h.prototype._hash=function(){var e=n.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=h},{"./hash":335,inherits:279,"safe-buffer":332}],338:[function(e,t,r){"use strict";var i=e("inherits"),s=e("./hash"),n=e("safe-buffer").Buffer,o=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function h(){this.init(),this._w=a,s.call(this,64,56)}function l(e){return e<<5|e>>>27}function c(e){return e<<30|e>>>2}function u(e,t,r,i){return 0===e?t&r|~t&i:2===e?t&r|t&i|r&i:t^r^i}i(h,s),h.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},h.prototype._update=function(e){for(var t,r=this._w,i=0|this._a,s=0|this._b,n=0|this._c,a=0|this._d,h=0|this._e,f=0;f<16;++f)r[f]=e.readInt32BE(4*f);for(;f<80;++f)r[f]=(t=r[f-3]^r[f-8]^r[f-14]^r[f-16])<<1|t>>>31;for(var d=0;d<80;++d){var p=~~(d/20),m=l(i)+u(p,s,n,a)+h+r[d]+o[p]|0;h=a,a=n,n=c(s),s=i,i=m}this._a=i+this._a|0,this._b=s+this._b|0,this._c=n+this._c|0,this._d=a+this._d|0,this._e=h+this._e|0},h.prototype._hash=function(){var e=n.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=h},{"./hash":335,inherits:279,"safe-buffer":332}],339:[function(e,t,r){"use strict";var i=e("inherits"),s=e("./sha256"),n=e("./hash"),o=e("safe-buffer").Buffer,a=new Array(64);function h(){this.init(),this._w=a,n.call(this,64,56)}i(h,s),h.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},h.prototype._hash=function(){var e=o.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},t.exports=h},{"./hash":335,"./sha256":340,inherits:279,"safe-buffer":332}],340:[function(e,t,r){"use strict";var i=e("inherits"),s=e("./hash"),n=e("safe-buffer").Buffer,o=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],a=new Array(64);function h(){this.init(),this._w=a,s.call(this,64,56)}function l(e,t,r){return r^e&(t^r)}function c(e,t,r){return e&t|r&(e|t)}function u(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function f(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function d(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}i(h,s),h.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},h.prototype._update=function(e){for(var t,r=this._w,i=0|this._a,s=0|this._b,n=0|this._c,a=0|this._d,h=0|this._e,p=0|this._f,m=0|this._g,b=0|this._h,g=0;g<16;++g)r[g]=e.readInt32BE(4*g);for(;g<64;++g)r[g]=0|(((t=r[g-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[g-7]+d(r[g-15])+r[g-16];for(var y=0;y<64;++y){var v=b+f(h)+l(h,p,m)+o[y]+r[y]|0,w=u(i)+c(i,s,n)|0;b=m,m=p,p=h,h=a+v|0,a=n,n=s,s=i,i=v+w|0}this._a=i+this._a|0,this._b=s+this._b|0,this._c=n+this._c|0,this._d=a+this._d|0,this._e=h+this._e|0,this._f=p+this._f|0,this._g=m+this._g|0,this._h=b+this._h|0},h.prototype._hash=function(){var e=n.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},t.exports=h},{"./hash":335,inherits:279,"safe-buffer":332}],341:[function(e,t,r){"use strict";var i=e("inherits"),s=e("./sha512"),n=e("./hash"),o=e("safe-buffer").Buffer,a=new Array(160);function h(){this.init(),this._w=a,n.call(this,128,112)}i(h,s),h.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},h.prototype._hash=function(){var e=o.allocUnsafe(48);function t(t,r,i){e.writeInt32BE(t,i),e.writeInt32BE(r,i+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},t.exports=h},{"./hash":335,"./sha512":342,inherits:279,"safe-buffer":332}],342:[function(e,t,r){"use strict";var i=e("inherits"),s=e("./hash"),n=e("safe-buffer").Buffer,o=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],a=new Array(160);function h(){this.init(),this._w=a,s.call(this,128,112)}function l(e,t,r){return r^e&(t^r)}function c(e,t,r){return e&t|r&(e|t)}function u(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function f(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function d(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function b(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function g(e,t){return e>>>0>>0?1:0}i(h,s),h.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},h.prototype._update=function(e){for(var t=this._w,r=0|this._ah,i=0|this._bh,s=0|this._ch,n=0|this._dh,a=0|this._eh,h=0|this._fh,y=0|this._gh,v=0|this._hh,w=0|this._al,_=0|this._bl,x=0|this._cl,S=0|this._dl,k=0|this._el,M=0|this._fl,C=0|this._gl,T=0|this._hl,E=0;E<32;E+=2)t[E]=e.readInt32BE(4*E),t[E+1]=e.readInt32BE(4*E+4);for(;E<160;E+=2){var A=t[E-30],R=t[E-30+1],O=d(A,R),I=p(R,A),N=m(A=t[E-4],R=t[E-4+1]),P=b(R,A),j=t[E-14],B=t[E-14+1],D=t[E-32],F=t[E-32+1],L=I+B|0,z=O+j+g(L,I)|0;z=(z=z+N+g(L=L+P|0,P)|0)+D+g(L=L+F|0,F)|0,t[E]=z,t[E+1]=L}for(var U=0;U<160;U+=2){z=t[U],L=t[U+1];var $=c(r,i,s),H=c(w,_,x),V=u(r,w),q=u(w,r),W=f(a,k),X=f(k,a),K=o[U],Z=o[U+1],Y=l(a,h,y),G=l(k,M,C),J=T+X|0,Q=v+W+g(J,T)|0;Q=(Q=(Q=Q+Y+g(J=J+G|0,G)|0)+K+g(J=J+Z|0,Z)|0)+z+g(J=J+L|0,L)|0;var ee=q+H|0,te=V+$+g(ee,q)|0;v=y,T=C,y=h,C=M,h=a,M=k,a=n+Q+g(k=S+J|0,S)|0,n=s,S=x,s=i,x=_,i=r,_=w,r=Q+te+g(w=J+ee|0,J)|0}this._al=this._al+w|0,this._bl=this._bl+_|0,this._cl=this._cl+x|0,this._dl=this._dl+S|0,this._el=this._el+k|0,this._fl=this._fl+M|0,this._gl=this._gl+C|0,this._hl=this._hl+T|0,this._ah=this._ah+r+g(this._al,w)|0,this._bh=this._bh+i+g(this._bl,_)|0,this._ch=this._ch+s+g(this._cl,x)|0,this._dh=this._dh+n+g(this._dl,S)|0,this._eh=this._eh+a+g(this._el,k)|0,this._fh=this._fh+h+g(this._fl,M)|0,this._gh=this._gh+y+g(this._gl,C)|0,this._hh=this._hh+v+g(this._hl,T)|0},h.prototype._hash=function(){var e=n.allocUnsafe(64);function t(t,r,i){e.writeInt32BE(t,i),e.writeInt32BE(r,i+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},t.exports=h},{"./hash":335,inherits:279,"safe-buffer":332}],343:[function(e,t,r){"use strict";t.exports=s;var i=e("events").EventEmitter;function s(){i.call(this)}e("inherits")(s,i),s.Readable=e("readable-stream/readable.js"),s.Writable=e("readable-stream/writable.js"),s.Duplex=e("readable-stream/duplex.js"),s.Transform=e("readable-stream/transform.js"),s.PassThrough=e("readable-stream/passthrough.js"),s.Stream=s,s.prototype.pipe=function(e,t){var r=this;function s(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function n(){r.readable&&r.resume&&r.resume()}r.on("data",s),e.on("drain",n),e._isStdio||t&&!1===t.end||(r.on("end",a),r.on("close",h));var o=!1;function a(){o||(o=!0,e.end())}function h(){o||(o=!0,"function"==typeof e.destroy&&e.destroy())}function l(e){if(c(),0===i.listenerCount(this,"error"))throw e}function c(){r.removeListener("data",s),e.removeListener("drain",n),r.removeListener("end",a),r.removeListener("close",h),r.removeListener("error",l),e.removeListener("error",l),r.removeListener("end",c),r.removeListener("close",c),e.removeListener("close",c)}return r.on("error",l),e.on("error",l),r.on("end",c),r.on("close",c),e.on("close",c),e.emit("pipe",r),e}},{events:261,inherits:279,"readable-stream/duplex.js":345,"readable-stream/passthrough.js":354,"readable-stream/readable.js":355,"readable-stream/transform.js":356,"readable-stream/writable.js":357}],344:[function(e,t,r){"use strict";var i={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==i.call(e)}},{}],345:[function(e,t,r){"use strict";t.exports=e("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":346}],346:[function(e,t,r){"use strict";var i=e("process-nextick-args"),s=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=u;var n=Object.create(e("core-util-is"));n.inherits=e("inherits");var o=e("./_stream_readable"),a=e("./_stream_writable");n.inherits(u,o);for(var h=s(a.prototype),l=0;l0?("string"==typeof t||o.objectMode||Object.getPrototypeOf(t)===l.prototype||(t=function(e){return l.from(e)}(t)),i?o.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):_(e,o,t,!0):o.ended?e.emit("error",new Error("stream.push() after EOF")):(o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?_(e,o,t,!1):M(e,o)):_(e,o,t,!1))):i||(o.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function S(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(d("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?s.nextTick(k,e):k(e))}function k(e){d("emit readable"),e.emit("readable"),A(e)}function M(e,t){t.readingMore||(t.readingMore=!0,s.nextTick(C,e,t))}function C(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var i;en.length?n.length:e;if(o===n.length?s+=n:s+=n.slice(0,e),0===(e-=o)){o===n.length?(++i,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=n.slice(o));break}++i}return t.length-=i,s}(e,t):function(e,t){var r=l.allocUnsafe(e),i=t.head,s=1;i.data.copy(r),e-=i.data.length;for(;i=i.next;){var n=i.data,o=e>n.length?n.length:e;if(n.copy(r,r.length-e,0,o),0===(e-=o)){o===n.length?(++s,i.next?t.head=i.next:t.head=t.tail=null):(t.head=i,i.data=n.slice(o));break}++s}return t.length-=s,r}(e,t);return i}(e,t.buffer,t.decoder),r);var r}function O(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,s.nextTick(I,t,e))}function I(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function N(e,t){for(var r=0,i=e.length;r=t.highWaterMark||t.ended))return d("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?O(this):S(this),null;if(0===(e=x(e,t))&&t.ended)return 0===t.length&&O(this),null;var i,s=t.needReadable;return d("need readable",s),(0===t.length||t.length-e0?R(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&O(this)),null!==i&&this.emit("data",i),i},v.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},v.prototype.pipe=function(e,t){var i=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=e;break;case 1:n.pipes=[n.pipes,e];break;default:n.pipes.push(e)}n.pipesCount+=1,d("pipe count=%d opts=%j",n.pipesCount,t);var h=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?c:v;function l(t,r){d("onunpipe"),t===i&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,d("cleanup"),e.removeListener("close",g),e.removeListener("finish",y),e.removeListener("drain",u),e.removeListener("error",b),e.removeListener("unpipe",l),i.removeListener("end",c),i.removeListener("end",v),i.removeListener("data",m),f=!0,!n.awaitDrain||e._writableState&&!e._writableState.needDrain||u())}function c(){d("onend"),e.end()}n.endEmitted?s.nextTick(h):i.once("end",h),e.on("unpipe",l);var u=function(e){return function(){var t=e._readableState;d("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&a(e,"data")&&(t.flowing=!0,A(e))}}(i);e.on("drain",u);var f=!1;var p=!1;function m(t){d("ondata"),p=!1,!1!==e.write(t)||p||((1===n.pipesCount&&n.pipes===e||n.pipesCount>1&&-1!==N(n.pipes,e))&&!f&&(d("false write response, pause",n.awaitDrain),n.awaitDrain++,p=!0),i.pause())}function b(t){d("onerror",t),v(),e.removeListener("error",b),0===a(e,"error")&&e.emit("error",t)}function g(){e.removeListener("finish",y),v()}function y(){d("onfinish"),e.removeListener("close",g),v()}function v(){d("unpipe"),i.unpipe(e)}return i.on("data",m),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?o(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",b),e.once("close",g),e.once("finish",y),e.emit("pipe",i),n.flowing||(d("pipe resume"),i.resume()),e},v.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var i=t.pipes,s=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var n=0;n-1?s:n.nextTick;y.WritableState=g;var l=Object.create(e("core-util-is"));l.inherits=e("inherits");var c={deprecate:e("util-deprecate")},u=e("./internal/streams/stream"),f=e("safe-buffer").Buffer,d=(void 0!==i?i:"undefined"!=typeof window?window:"undefined"!=typeof self?self:{}).Uint8Array||function(){};var p,m=e("./internal/streams/destroy");function b(){}function g(t,r){a=a||e("./_stream_duplex"),t=t||{};var i=r instanceof a;this.objectMode=!!t.objectMode,i&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var s=t.highWaterMark,l=t.writableHighWaterMark,c=this.objectMode?16:16384;this.highWaterMark=s||0===s?s:i&&(l||0===l)?l:c,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var u=!1===t.decodeStrings;this.decodeStrings=!u,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,i=r.sync,s=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,i,s){--t.pendingcb,r?(n.nextTick(s,i),n.nextTick(k,e,t),e._writableState.errorEmitted=!0,e.emit("error",i)):(s(i),e._writableState.errorEmitted=!0,e.emit("error",i),k(e,t))}(e,r,i,t,s);else{var o=x(r);o||r.corked||r.bufferProcessing||!r.bufferedRequest||_(e,r),i?h(w,e,r,o,s):w(e,r,o,s)}}(r,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function y(t){if(a=a||e("./_stream_duplex"),!(p.call(y,this)||this instanceof a))return new y(t);this._writableState=new g(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev),"function"==typeof t.destroy&&(this._destroy=t.destroy),"function"==typeof t.final&&(this._final=t.final)),u.call(this)}function v(e,t,r,i,s,n,o){t.writelen=i,t.writecb=o,t.writing=!0,t.sync=!0,r?e._writev(s,t.onwrite):e._write(s,n,t.onwrite),t.sync=!1}function w(e,t,r,i){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,i(),k(e,t)}function _(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var i=t.bufferedRequestCount,s=new Array(i),n=t.corkedRequestsFree;n.entry=r;for(var a=0,h=!0;r;)s[a]=r,r.isBuf||(h=!1),r=r.next,a+=1;s.allBuffers=h,v(e,t,!0,t.length,s,"",n.finish),t.pendingcb++,t.lastBufferedRequest=null,n.next?(t.corkedRequestsFree=n.next,n.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;r;){var l=r.chunk,c=r.encoding,u=r.callback;if(v(e,t,!1,t.objectMode?1:l.length,l,c,u),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function x(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function S(e,t){e._final((function(r){t.pendingcb--,r&&e.emit("error",r),t.prefinished=!0,e.emit("prefinish"),k(e,t)}))}function k(e,t){var r=x(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,n.nextTick(S,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),r}l.inherits(y,u),g.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(g.prototype,"buffer",{get:c.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(y,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===y&&(e&&e._writableState instanceof g)}})):p=function(e){return e instanceof this},y.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},y.prototype.write=function(e,t,r){var i,s=this._writableState,o=!1,a=!s.objectMode&&(i=e,f.isBuffer(i)||i instanceof d);return a&&!f.isBuffer(e)&&(e=function(e){return f.from(e)}(e)),"function"==typeof t&&(r=t,t=null),a?t="buffer":t||(t=s.defaultEncoding),"function"!=typeof r&&(r=b),s.ended?function(e,t){var r=new Error("write after end");e.emit("error",r),n.nextTick(t,r)}(this,r):(a||function(e,t,r,i){var s=!0,o=!1;return null===r?o=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||t.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(e.emit("error",o),n.nextTick(i,o),s=!1),s}(this,s,e,r))&&(s.pendingcb++,o=function(e,t,r,i,s,n){if(!r){var o=function(e,t,r){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=f.from(t,r));return t}(t,i,s);i!==o&&(r=!0,s="buffer",i=o)}var a=t.objectMode?1:i.length;t.length+=a;var h=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(y.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),y.prototype._write=function(e,t,r){r(new Error("_write() is not implemented"))},y.prototype._writev=null,y.prototype.end=function(e,t,r){var i=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||function(e,t,r){t.ending=!0,k(e,t),r&&(t.finished?n.nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,i,r)},Object.defineProperty(y.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),y.prototype.destroy=m.destroy,y.prototype._undestroy=m.undestroy,y.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("timers").setImmediate)},{"./_stream_duplex":346,"./internal/streams/destroy":352,"./internal/streams/stream":353,_process:306,"core-util-is":222,inherits:279,"process-nextick-args":305,"safe-buffer":358,timers:361,"util-deprecate":362}],351:[function(e,t,r){"use strict";var i=e("safe-buffer").Buffer,s=e("util");t.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return i.alloc(0);for(var t,r,s,n=i.allocUnsafe(e>>>0),o=this.head,a=0;o;)t=o.data,r=n,s=a,t.copy(r,s),a+=o.data.length,o=o.next;return n},e}(),s&&s.inspect&&s.inspect.custom&&(t.exports.prototype[s.inspect.custom]=function(){var e=s.inspect({length:this.length});return this.constructor.name+" "+e})},{"safe-buffer":358,util:188}],352:[function(e,t,r){"use strict";var i=e("process-nextick-args");function s(e,t){e.emit("error",t)}t.exports={destroy:function(e,t){var r=this,n=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return n||o?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,i.nextTick(s,this,e)):i.nextTick(s,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?r._writableState?r._writableState.errorEmitted||(r._writableState.errorEmitted=!0,i.nextTick(s,r,e)):i.nextTick(s,r,e):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},{"process-nextick-args":305}],353:[function(e,t,r){arguments[4][329][0].apply(r,arguments)},{dup:329,events:261}],354:[function(e,t,r){"use strict";t.exports=e("./readable").PassThrough},{"./readable":355}],355:[function(e,t,r){"use strict";(r=t.exports=e("./lib/_stream_readable.js")).Stream=r,r.Readable=r,r.Writable=e("./lib/_stream_writable.js"),r.Duplex=e("./lib/_stream_duplex.js"),r.Transform=e("./lib/_stream_transform.js"),r.PassThrough=e("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":346,"./lib/_stream_passthrough.js":347,"./lib/_stream_readable.js":348,"./lib/_stream_transform.js":349,"./lib/_stream_writable.js":350}],356:[function(e,t,r){"use strict";t.exports=e("./readable").Transform},{"./readable":355}],357:[function(e,t,r){"use strict";t.exports=e("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":350}],358:[function(e,t,r){arguments[4][217][0].apply(r,arguments)},{buffer:220,dup:217}],359:[function(e,t,r){arguments[4][218][0].apply(r,arguments)},{dup:218,"safe-buffer":358}],360:[function(e,t,r){arguments[4][218][0].apply(r,arguments)},{dup:218,"safe-buffer":332}],361:[function(e,t,r){(function(t,i){(function(){"use strict";var s=e("process/browser.js").nextTick,n=Function.prototype.apply,o=Array.prototype.slice,a={},h=0;function l(e,t){this._id=e,this._clearFn=t}r.setTimeout=function(){return new l(n.call(setTimeout,window,arguments),clearTimeout)},r.setInterval=function(){return new l(n.call(setInterval,window,arguments),clearInterval)},r.clearTimeout=r.clearInterval=function(e){e.close()},l.prototype.unref=l.prototype.ref=function(){},l.prototype.close=function(){this._clearFn.call(window,this._id)},r.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},r.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},r._unrefActive=r.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},r.setImmediate="function"==typeof t?t:function(e){var t=h++,i=!(arguments.length<2)&&o.call(arguments,1);return a[t]=!0,s((function(){a[t]&&(i?e.apply(null,i):e.call(null),r.clearImmediate(t))})),t},r.clearImmediate="function"==typeof i?i:function(e){delete a[e]}}).call(this)}).call(this,e("timers").setImmediate,e("timers").clearImmediate)},{"process/browser.js":306,timers:361}],362:[function(e,t,r){(function(e){(function(){"use strict";function r(t){try{if(!e.localStorage)return!1}catch(e){return!1}var r=e.localStorage[t];return null!=r&&"true"===String(r).toLowerCase()}t.exports=function(e,t){if(r("noDeprecation"))return e;var i=!1;return function(){if(!i){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?console.trace(t):console.warn(t),i=!0}return e.apply(this,arguments)}}}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],363:[function(e,t,r){"use strict";"function"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},{}],364:[function(e,t,r){"use strict";t.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},{}],365:[function(e,t,r){(function(t,i){(function(){"use strict";var s=/%[sdj%]/g;r.format=function(e){if(!g(e)){for(var t=[],r=0;r=n)return e;switch(e){case"%s":return String(i[r++]);case"%d":return Number(i[r++]);case"%j":try{return JSON.stringify(i[r++])}catch(e){return"[Circular]"}default:return e}})),h=i[r];r=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),p(t)?i.showHidden=t:t&&r._extend(i,t),y(i.showHidden)&&(i.showHidden=!1),y(i.depth)&&(i.depth=2),y(i.colors)&&(i.colors=!1),y(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=h),c(i,e,i.depth)}function h(e,t){var r=a.styles[t];return r?"\x1b["+a.colors[r][0]+"m"+e+"\x1b["+a.colors[r][1]+"m":e}function l(e,t){return e}function c(e,t,i){if(e.customInspect&&t&&S(t.inspect)&&t.inspect!==r.inspect&&(!t.constructor||t.constructor.prototype!==t)){var s=t.inspect(i,e);return g(s)||(s=c(e,s,i)),s}var n=function(e,t){if(y(t))return e.stylize("undefined","undefined");if(g(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(b(t))return e.stylize(""+t,"number");if(p(t))return e.stylize(""+t,"boolean");if(m(t))return e.stylize("null","null")}(e,t);if(n)return n;var o=Object.keys(t),a=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(t)),x(t)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return u(t);if(0===o.length){if(S(t)){var h=t.name?": "+t.name:"";return e.stylize("[Function"+h+"]","special")}if(v(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(_(t))return e.stylize(Date.prototype.toString.call(t),"date");if(x(t))return u(t)}var l,w="",k=!1,M=["{","}"];(d(t)&&(k=!0,M=["[","]"]),S(t))&&(w=" [Function"+(t.name?": "+t.name:"")+"]");return v(t)&&(w=" "+RegExp.prototype.toString.call(t)),_(t)&&(w=" "+Date.prototype.toUTCString.call(t)),x(t)&&(w=" "+u(t)),0!==o.length||k&&0!=t.length?i<0?v(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special"):(e.seen.push(t),l=k?function(e,t,r,i,s){for(var n=[],o=0,a=t.length;o=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(l,w,M)):M[0]+w+M[1]}function u(e){return"["+Error.prototype.toString.call(e)+"]"}function f(e,t,r,i,s,n){var o,a,h;if((h=Object.getOwnPropertyDescriptor(t,s)||{value:t[s]}).get?a=h.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):h.set&&(a=e.stylize("[Setter]","special")),E(i,s)||(o="["+s+"]"),a||(e.seen.indexOf(h.value)<0?(a=m(r)?c(e,h.value,null):c(e,h.value,r-1)).indexOf("\n")>-1&&(a=n?a.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+a.split("\n").map((function(e){return" "+e})).join("\n")):a=e.stylize("[Circular]","special")),y(o)){if(n&&s.match(/^\d+$/))return a;(o=JSON.stringify(""+s)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=e.stylize(o,"string"))}return o+": "+a}function d(e){return Array.isArray(e)}function p(e){return"boolean"==typeof e}function m(e){return null===e}function b(e){return"number"==typeof e}function g(e){return"string"==typeof e}function y(e){return void 0===e}function v(e){return w(e)&&"[object RegExp]"===k(e)}function w(e){return"object"==typeof e&&null!==e}function _(e){return w(e)&&"[object Date]"===k(e)}function x(e){return w(e)&&("[object Error]"===k(e)||e instanceof Error)}function S(e){return"function"==typeof e}function k(e){return Object.prototype.toString.call(e)}function M(e){return e<10?"0"+e.toString(10):e.toString(10)}r.debuglog=function(e){if(y(n)&&(n=t.env.NODE_DEBUG||""),e=e.toUpperCase(),!o[e])if(new RegExp("\\b"+e+"\\b","i").test(n)){var i=t.pid;o[e]=function(){var t=r.format.apply(r,arguments);console.error("%s %d: %s",e,i,t)}}else o[e]=function(){};return o[e]},r.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=d,r.isBoolean=p,r.isNull=m,r.isNullOrUndefined=function(e){return null==e},r.isNumber=b,r.isString=g,r.isSymbol=function(e){return"symbol"==typeof e},r.isUndefined=y,r.isRegExp=v,r.isObject=w,r.isDate=_,r.isError=x,r.isFunction=S,r.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},r.isBuffer=e("./support/isBuffer");var C=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function T(){var e=new Date,t=[M(e.getHours()),M(e.getMinutes()),M(e.getSeconds())].join(":");return[e.getDate(),C[e.getMonth()],t].join(" ")}function E(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.log=function(){console.log("%s - %s",T(),r.format.apply(r,arguments))},r.inherits=e("inherits"),r._extend=function(e,t){if(!t||!w(t))return e;for(var r=Object.keys(t),i=r.length;i--;)e[r[i]]=t[r[i]];return e}}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":364,_process:306,inherits:363}],366:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"v1",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(r,"v3",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(r,"v4",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(r,"v5",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(r,"NIL",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(r,"version",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(r,"validate",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(r,"stringify",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(r,"parse",{enumerable:!0,get:function(){return u.default}});var i=f(e("./v1.js")),s=f(e("./v3.js")),n=f(e("./v4.js")),o=f(e("./v5.js")),a=f(e("./nil.js")),h=f(e("./version.js")),l=f(e("./validate.js")),c=f(e("./stringify.js")),u=f(e("./parse.js"));function f(e){return e&&e.__esModule?e:{default:e}}},{"./nil.js":368,"./parse.js":369,"./stringify.js":373,"./v1.js":374,"./v3.js":375,"./v4.js":377,"./v5.js":378,"./validate.js":379,"./version.js":380}],367:[function(e,t,r){"use strict";function i(e){return 14+(e+64>>>9<<4)+1}function s(e,t){const r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function n(e,t,r,i,n,o){return s((a=s(s(t,e),s(i,o)))<<(h=n)|a>>>32-h,r);var a,h}function o(e,t,r,i,s,o,a){return n(t&r|~t&i,e,t,s,o,a)}function a(e,t,r,i,s,o,a){return n(t&i|r&~i,e,t,s,o,a)}function h(e,t,r,i,s,o,a){return n(t^r^i,e,t,s,o,a)}function l(e,t,r,i,s,o,a){return n(r^(t|~i),e,t,s,o,a)}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var c=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let r=0;r>5]>>>i%32&255,s=parseInt("0123456789abcdef".charAt(r>>>4&15)+"0123456789abcdef".charAt(15&r),16);t.push(s)}return t}(function(e,t){e[t>>5]|=128<>5]|=(255&e[i/8])<>>24,r[1]=t>>>16&255,r[2]=t>>>8&255,r[3]=255&t,r[4]=(t=parseInt(e.slice(9,13),16))>>>8,r[5]=255&t,r[6]=(t=parseInt(e.slice(14,18),16))>>>8,r[7]=255&t,r[8]=(t=parseInt(e.slice(19,23),16))>>>8,r[9]=255&t,r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,r[11]=t/4294967296&255,r[12]=t>>>24&255,r[13]=t>>>16&255,r[14]=t>>>8&255,r[15]=255&t,r};r.default=n},{"./validate.js":379}],370:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;r.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},{}],371:[function(e,t,r){"use strict";let i;Object.defineProperty(r,"__esModule",{value:!0}),r.default=function(){if(!i&&(i="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto),!i))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return i(s)};const s=new Uint8Array(16)},{}],372:[function(e,t,r){"use strict";function i(e,t,r,i){switch(e){case 0:return t&r^~t&i;case 1:return t^r^i;case 2:return t&r^t&i^r&i;case 3:return t^r^i}}function s(e,t){return e<>>32-t}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=function(e){const t=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let r=0;r>>0;u=c,c=l,l=s(h,30)>>>0,h=o,o=a}r[0]=r[0]+o>>>0,r[1]=r[1]+h>>>0,r[2]=r[2]+l>>>0,r[3]=r[3]+c>>>0,r[4]=r[4]+u>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,255&r[0],r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,255&r[1],r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,255&r[2],r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,255&r[3],r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,255&r[4]]};r.default=n},{}],373:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i,s=(i=e("./validate.js"))&&i.__esModule?i:{default:i};const n=[];for(let e=0;e<256;++e)n.push((e+256).toString(16).substr(1));var o=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const r=(n[e[t+0]]+n[e[t+1]]+n[e[t+2]]+n[e[t+3]]+"-"+n[e[t+4]]+n[e[t+5]]+"-"+n[e[t+6]]+n[e[t+7]]+"-"+n[e[t+8]]+n[e[t+9]]+"-"+n[e[t+10]]+n[e[t+11]]+n[e[t+12]]+n[e[t+13]]+n[e[t+14]]+n[e[t+15]]).toLowerCase();if(!(0,s.default)(r))throw TypeError("Stringified UUID is invalid");return r};r.default=o},{"./validate.js":379}],374:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=n(e("./rng.js")),s=n(e("./stringify.js"));function n(e){return e&&e.__esModule?e:{default:e}}let o,a,h=0,l=0;var c=function(e,t,r){let n=t&&r||0;const c=t||new Array(16);let u=(e=e||{}).node||o,f=void 0!==e.clockseq?e.clockseq:a;if(null==u||null==f){const t=e.random||(e.rng||i.default)();null==u&&(u=o=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==f&&(f=a=16383&(t[6]<<8|t[7]))}let d=void 0!==e.msecs?e.msecs:Date.now(),p=void 0!==e.nsecs?e.nsecs:l+1;const m=d-h+(p-l)/1e4;if(m<0&&void 0===e.clockseq&&(f=f+1&16383),(m<0||d>h)&&void 0===e.nsecs&&(p=0),p>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");h=d,l=p,a=f,d+=122192928e5;const b=(1e4*(268435455&d)+p)%4294967296;c[n++]=b>>>24&255,c[n++]=b>>>16&255,c[n++]=b>>>8&255,c[n++]=255&b;const g=d/4294967296*1e4&268435455;c[n++]=g>>>8&255,c[n++]=255&g,c[n++]=g>>>24&15|16,c[n++]=g>>>16&255,c[n++]=f>>>8|128,c[n++]=255&f;for(let e=0;e<6;++e)c[n+e]=u[e];return t||(0,s.default)(c)};r.default=c},{"./rng.js":371,"./stringify.js":373}],375:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=n(e("./v35.js")),s=n(e("./md5.js"));function n(e){return e&&e.__esModule?e:{default:e}}var o=(0,i.default)("v3",48,s.default);r.default=o},{"./md5.js":367,"./v35.js":376}],376:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=function(e,t,r){function n(e,n,o,a){if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let r=0;r=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}r.S_LIST=[32,10,13,9],r.isChar=function(e){return e>=32&&e<=55295||10===e||13===e||9===e||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isS=function(e){return 32===e||10===e||13===e||9===e},r.isNameStartChar=i,r.isNameChar=function(e){return i(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}],382:[function(e,t,r){"use strict"; +/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */Object.defineProperty(r,"__esModule",{value:!0}),r.CHAR="\x01-\ud7ff\ue000-\ufffd\ud800\udc00-\udbff\udfff",r.RESTRICTED_CHAR="\x01-\b\v\f\x0e-\x1f\x7f-\x84\x86-\x9f",r.S=" \t\r\n",r.NAME_START_CHAR=":A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd\ud800\udc00-\udb7f\udfff",r.NAME_CHAR="-"+r.NAME_START_CHAR+".0-9\xb7\u0300-\u036f\u203f-\u2040",r.CHAR_RE=new RegExp("^["+r.CHAR+"]$","u"),r.RESTRICTED_CHAR_RE=new RegExp("^["+r.RESTRICTED_CHAR+"]$","u"),r.S_RE=new RegExp("^["+r.S+"]+$","u"),r.NAME_START_CHAR_RE=new RegExp("^["+r.NAME_START_CHAR+"]$","u"),r.NAME_CHAR_RE=new RegExp("^["+r.NAME_CHAR+"]$","u"),r.NAME_RE=new RegExp("^["+r.NAME_START_CHAR+"]["+r.NAME_CHAR+"]*$","u"),r.NMTOKEN_RE=new RegExp("^["+r.NAME_CHAR+"]+$","u");function i(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}r.S_LIST=[32,10,13,9],r.isChar=function(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isRestrictedChar=function(e){return e>=1&&e<=8||11===e||12===e||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159},r.isCharAndNotRestricted=function(e){return 9===e||10===e||13===e||e>31&&e<127||133===e||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isS=function(e){return 32===e||10===e||13===e||9===e},r.isNameStartChar=i,r.isNameChar=function(e){return i(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}],383:[function(e,t,r){"use strict"; +/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */function i(e){return e>=65&&e<=90||95===e||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}Object.defineProperty(r,"__esModule",{value:!0}),r.NC_NAME_START_CHAR="A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd\ud800\udc00-\udb7f\udfff",r.NC_NAME_CHAR="-"+r.NC_NAME_START_CHAR+".0-9\xb7\u0300-\u036f\u203f-\u2040",r.NC_NAME_START_CHAR_RE=new RegExp("^["+r.NC_NAME_START_CHAR+"]$","u"),r.NC_NAME_CHAR_RE=new RegExp("^["+r.NC_NAME_CHAR+"]$","u"),r.NC_NAME_RE=new RegExp("^["+r.NC_NAME_START_CHAR+"]["+r.NC_NAME_CHAR+"]*$","u"),r.isNCNameStartChar=i,r.isNCNameChar=function(e){return i(e)||45===e||46===e||e>=48&&e<=57||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}]},{},[15])(15)})); +//# sourceMappingURL=exceljs.bare.min.js.map \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/exceljs.bare.min.js.map b/node_backend/node_modules/exceljs/dist/exceljs.bare.min.js.map new file mode 100644 index 0000000000000000000000000000000000000000..96c9412cf921c61954a21ea4d6a70ba03432352e --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/exceljs.bare.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","lib/csv/csv.js","lib/doc/anchor.js","lib/doc/cell.js","lib/doc/column.js","lib/doc/data-validations.js","lib/doc/defined-names.js","lib/doc/enums.js","lib/doc/image.js","lib/doc/note.js","lib/doc/range.js","lib/doc/row.js","lib/doc/table.js","lib/doc/workbook.js","lib/doc/worksheet.js","lib/exceljs.bare.js","lib/utils/browser-buffer-decode.js","lib/utils/browser-buffer-encode.js","lib/utils/cell-matrix.js","lib/utils/col-cache.js","lib/utils/copy-style.js","lib/utils/encryptor.js","lib/utils/parse-sax.js","lib/utils/shared-formula.js","lib/utils/stream-buf.js","lib/utils/string-buf.js","lib/utils/under-dash.js","lib/utils/utils.js","lib/utils/xml-stream.js","lib/utils/zip-stream.js","lib/xlsx/defaultnumformats.js","lib/xlsx/rel-type.js","lib/xlsx/xform/base-xform.js","lib/xlsx/xform/book/defined-name-xform.js","lib/xlsx/xform/book/sheet-xform.js","lib/xlsx/xform/book/workbook-calc-properties-xform.js","lib/xlsx/xform/book/workbook-properties-xform.js","lib/xlsx/xform/book/workbook-view-xform.js","lib/xlsx/xform/book/workbook-xform.js","lib/xlsx/xform/comment/comment-xform.js","lib/xlsx/xform/comment/comments-xform.js","lib/xlsx/xform/comment/style/vml-position-xform.js","lib/xlsx/xform/comment/style/vml-protection-xform.js","lib/xlsx/xform/comment/vml-anchor-xform.js","lib/xlsx/xform/comment/vml-client-data-xform.js","lib/xlsx/xform/comment/vml-notes-xform.js","lib/xlsx/xform/comment/vml-shape-xform.js","lib/xlsx/xform/comment/vml-textbox-xform.js","lib/xlsx/xform/composite-xform.js","lib/xlsx/xform/core/app-heading-pairs-xform.js","lib/xlsx/xform/core/app-titles-of-parts-xform.js","lib/xlsx/xform/core/app-xform.js","lib/xlsx/xform/core/content-types-xform.js","lib/xlsx/xform/core/core-xform.js","lib/xlsx/xform/core/relationship-xform.js","lib/xlsx/xform/core/relationships-xform.js","lib/xlsx/xform/drawing/base-cell-anchor-xform.js","lib/xlsx/xform/drawing/blip-fill-xform.js","lib/xlsx/xform/drawing/blip-xform.js","lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js","lib/xlsx/xform/drawing/c-nv-pr-xform.js","lib/xlsx/xform/drawing/cell-position-xform.js","lib/xlsx/xform/drawing/drawing-xform.js","lib/xlsx/xform/drawing/ext-lst-xform.js","lib/xlsx/xform/drawing/ext-xform.js","lib/xlsx/xform/drawing/hlink-click-xform.js","lib/xlsx/xform/drawing/nv-pic-pr-xform.js","lib/xlsx/xform/drawing/one-cell-anchor-xform.js","lib/xlsx/xform/drawing/pic-xform.js","lib/xlsx/xform/drawing/sp-pr.js","lib/xlsx/xform/drawing/two-cell-anchor-xform.js","lib/xlsx/xform/list-xform.js","lib/xlsx/xform/sheet/auto-filter-xform.js","lib/xlsx/xform/sheet/cell-xform.js","lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js","lib/xlsx/xform/sheet/cf/cf-rule-xform.js","lib/xlsx/xform/sheet/cf/cfvo-xform.js","lib/xlsx/xform/sheet/cf/color-scale-xform.js","lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js","lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js","lib/xlsx/xform/sheet/cf/databar-xform.js","lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js","lib/xlsx/xform/sheet/cf/formula-xform.js","lib/xlsx/xform/sheet/cf/icon-set-xform.js","lib/xlsx/xform/sheet/col-xform.js","lib/xlsx/xform/sheet/data-validations-xform.js","lib/xlsx/xform/sheet/dimension-xform.js","lib/xlsx/xform/sheet/drawing-xform.js","lib/xlsx/xform/sheet/ext-lst-xform.js","lib/xlsx/xform/sheet/header-footer-xform.js","lib/xlsx/xform/sheet/hyperlink-xform.js","lib/xlsx/xform/sheet/merge-cell-xform.js","lib/xlsx/xform/sheet/merges.js","lib/xlsx/xform/sheet/outline-properties-xform.js","lib/xlsx/xform/sheet/page-breaks-xform.js","lib/xlsx/xform/sheet/page-margins-xform.js","lib/xlsx/xform/sheet/page-setup-properties-xform.js","lib/xlsx/xform/sheet/page-setup-xform.js","lib/xlsx/xform/sheet/picture-xform.js","lib/xlsx/xform/sheet/print-options-xform.js","lib/xlsx/xform/sheet/row-breaks-xform.js","lib/xlsx/xform/sheet/row-xform.js","lib/xlsx/xform/sheet/sheet-format-properties-xform.js","lib/xlsx/xform/sheet/sheet-properties-xform.js","lib/xlsx/xform/sheet/sheet-protection-xform.js","lib/xlsx/xform/sheet/sheet-view-xform.js","lib/xlsx/xform/sheet/table-part-xform.js","lib/xlsx/xform/sheet/worksheet-xform.js","lib/xlsx/xform/simple/boolean-xform.js","lib/xlsx/xform/simple/date-xform.js","lib/xlsx/xform/simple/integer-xform.js","lib/xlsx/xform/simple/string-xform.js","lib/xlsx/xform/static-xform.js","lib/xlsx/xform/strings/phonetic-text-xform.js","lib/xlsx/xform/strings/rich-text-xform.js","lib/xlsx/xform/strings/shared-string-xform.js","lib/xlsx/xform/strings/shared-strings-xform.js","lib/xlsx/xform/strings/text-xform.js","lib/xlsx/xform/style/alignment-xform.js","lib/xlsx/xform/style/border-xform.js","lib/xlsx/xform/style/color-xform.js","lib/xlsx/xform/style/dxf-xform.js","lib/xlsx/xform/style/fill-xform.js","lib/xlsx/xform/style/font-xform.js","lib/xlsx/xform/style/numfmt-xform.js","lib/xlsx/xform/style/protection-xform.js","lib/xlsx/xform/style/style-xform.js","lib/xlsx/xform/style/styles-xform.js","lib/xlsx/xform/style/underline-xform.js","lib/xlsx/xform/table/auto-filter-xform.js","lib/xlsx/xform/table/custom-filter-xform.js","lib/xlsx/xform/table/filter-column-xform.js","lib/xlsx/xform/table/filter-xform.js","lib/xlsx/xform/table/table-column-xform.js","lib/xlsx/xform/table/table-style-info-xform.js","lib/xlsx/xform/table/table-xform.js","lib/xlsx/xlsx.js","lib/xlsx/xml/theme1.js","node_modules/@fast-csv/format/build/src/CsvFormatterStream.js","node_modules/@fast-csv/format/build/src/FormatterOptions.js","node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js","node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js","node_modules/@fast-csv/format/build/src/formatter/index.js","node_modules/@fast-csv/format/build/src/index.js","node_modules/@fast-csv/format/build/src/types.js","node_modules/@fast-csv/parse/build/src/CsvParserStream.js","node_modules/@fast-csv/parse/build/src/ParserOptions.js","node_modules/@fast-csv/parse/build/src/index.js","node_modules/@fast-csv/parse/build/src/parser/Parser.js","node_modules/@fast-csv/parse/build/src/parser/RowParser.js","node_modules/@fast-csv/parse/build/src/parser/Scanner.js","node_modules/@fast-csv/parse/build/src/parser/Token.js","node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js","node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js","node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js","node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js","node_modules/@fast-csv/parse/build/src/parser/column/index.js","node_modules/@fast-csv/parse/build/src/parser/index.js","node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js","node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js","node_modules/@fast-csv/parse/build/src/transforms/index.js","node_modules/@fast-csv/parse/build/src/types.js","node_modules/asn1.js/lib/asn1.js","node_modules/asn1.js/lib/asn1/api.js","node_modules/asn1.js/lib/asn1/base/buffer.js","node_modules/asn1.js/lib/asn1/base/index.js","node_modules/asn1.js/lib/asn1/base/node.js","node_modules/asn1.js/lib/asn1/base/reporter.js","node_modules/asn1.js/lib/asn1/constants/der.js","node_modules/asn1.js/lib/asn1/constants/index.js","node_modules/asn1.js/lib/asn1/decoders/der.js","node_modules/asn1.js/lib/asn1/decoders/index.js","node_modules/asn1.js/lib/asn1/decoders/pem.js","node_modules/asn1.js/lib/asn1/encoders/der.js","node_modules/asn1.js/lib/asn1/encoders/index.js","node_modules/asn1.js/lib/asn1/encoders/pem.js","node_modules/asn1.js/node_modules/bn.js/lib/bn.js","node_modules/base64-js/index.js","node_modules/bn.js/lib/bn.js","node_modules/brorand/index.js","node_modules/browserify-aes/aes.js","node_modules/browserify-aes/authCipher.js","node_modules/browserify-aes/browser.js","node_modules/browserify-aes/decrypter.js","node_modules/browserify-aes/encrypter.js","node_modules/browserify-aes/ghash.js","node_modules/browserify-aes/incr32.js","node_modules/browserify-aes/modes/cbc.js","node_modules/browserify-aes/modes/cfb.js","node_modules/browserify-aes/modes/cfb1.js","node_modules/browserify-aes/modes/cfb8.js","node_modules/browserify-aes/modes/ctr.js","node_modules/browserify-aes/modes/ecb.js","node_modules/browserify-aes/modes/index.js","node_modules/browserify-aes/modes/list.json","node_modules/browserify-aes/modes/ofb.js","node_modules/browserify-aes/streamCipher.js","node_modules/browserify-cipher/browser.js","node_modules/browserify-des/index.js","node_modules/browserify-des/modes.js","node_modules/browserify-rsa/index.js","node_modules/browserify-sign/algos.js","node_modules/browserify-sign/browser/algorithms.json","node_modules/browserify-sign/browser/curves.json","node_modules/browserify-sign/browser/index.js","node_modules/browserify-sign/browser/sign.js","node_modules/browserify-sign/browser/verify.js","node_modules/browserify/node_modules/safe-buffer/index.js","node_modules/browserify/node_modules/string_decoder/lib/string_decoder.js","node_modules/buffer-xor/index.js","node_modules/buffer/index.js","node_modules/cipher-base/index.js","node_modules/core-util-is/lib/util.js","node_modules/create-ecdh/browser.js","node_modules/create-hash/browser.js","node_modules/create-hash/md5.js","node_modules/create-hmac/browser.js","node_modules/create-hmac/legacy.js","node_modules/crypto-browserify/index.js","node_modules/dayjs/dayjs.min.js","node_modules/dayjs/plugin/customParseFormat.js","node_modules/dayjs/plugin/utc.js","node_modules/des.js/lib/des.js","node_modules/des.js/lib/des/cbc.js","node_modules/des.js/lib/des/cipher.js","node_modules/des.js/lib/des/des.js","node_modules/des.js/lib/des/ede.js","node_modules/des.js/lib/des/utils.js","node_modules/diffie-hellman/browser.js","node_modules/diffie-hellman/lib/dh.js","node_modules/diffie-hellman/lib/generatePrime.js","node_modules/diffie-hellman/lib/primes.json","node_modules/elliptic/lib/elliptic.js","node_modules/elliptic/lib/elliptic/curve/base.js","node_modules/elliptic/lib/elliptic/curve/edwards.js","node_modules/elliptic/lib/elliptic/curve/index.js","node_modules/elliptic/lib/elliptic/curve/mont.js","node_modules/elliptic/lib/elliptic/curve/short.js","node_modules/elliptic/lib/elliptic/curves.js","node_modules/elliptic/lib/elliptic/ec/index.js","node_modules/elliptic/lib/elliptic/ec/key.js","node_modules/elliptic/lib/elliptic/ec/signature.js","node_modules/elliptic/lib/elliptic/eddsa/index.js","node_modules/elliptic/lib/elliptic/eddsa/key.js","node_modules/elliptic/lib/elliptic/eddsa/signature.js","node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","node_modules/elliptic/lib/elliptic/utils.js","node_modules/elliptic/package.json","node_modules/events/events.js","node_modules/evp_bytestokey/index.js","node_modules/fast-csv/build/src/index.js","node_modules/hash-base/index.js","node_modules/hash.js/lib/hash.js","node_modules/hash.js/lib/hash/common.js","node_modules/hash.js/lib/hash/hmac.js","node_modules/hash.js/lib/hash/ripemd.js","node_modules/hash.js/lib/hash/sha.js","node_modules/hash.js/lib/hash/sha/1.js","node_modules/hash.js/lib/hash/sha/224.js","node_modules/hash.js/lib/hash/sha/256.js","node_modules/hash.js/lib/hash/sha/384.js","node_modules/hash.js/lib/hash/sha/512.js","node_modules/hash.js/lib/hash/sha/common.js","node_modules/hash.js/lib/hash/utils.js","node_modules/hmac-drbg/lib/hmac-drbg.js","node_modules/ieee754/index.js","node_modules/inherits/inherits_browser.js","node_modules/jszip/dist/jszip.min.js","node_modules/lodash.escaperegexp/index.js","node_modules/lodash.groupby/index.js","node_modules/lodash.isboolean/index.js","node_modules/lodash.isequal/index.js","node_modules/lodash.isfunction/index.js","node_modules/lodash.isnil/index.js","node_modules/lodash.isundefined/index.js","node_modules/lodash.uniq/index.js","node_modules/md5.js/index.js","node_modules/miller-rabin/lib/mr.js","node_modules/minimalistic-assert/index.js","node_modules/minimalistic-crypto-utils/lib/utils.js","node_modules/parse-asn1/aesid.json","node_modules/parse-asn1/asn1.js","node_modules/parse-asn1/certificate.js","node_modules/parse-asn1/fixProc.js","node_modules/parse-asn1/index.js","node_modules/pbkdf2/browser.js","node_modules/pbkdf2/lib/async.js","node_modules/pbkdf2/lib/default-encoding.js","node_modules/pbkdf2/lib/precondition.js","node_modules/pbkdf2/lib/sync-browser.js","node_modules/pbkdf2/lib/to-buffer.js","node_modules/process-nextick-args/index.js","node_modules/process/browser.js","node_modules/public-encrypt/browser.js","node_modules/public-encrypt/mgf.js","node_modules/public-encrypt/privateDecrypt.js","node_modules/public-encrypt/publicEncrypt.js","node_modules/public-encrypt/withPublic.js","node_modules/public-encrypt/xor.js","node_modules/randombytes/browser.js","node_modules/randomfill/browser.js","node_modules/readable-stream/errors-browser.js","node_modules/readable-stream/lib/_stream_duplex.js","node_modules/readable-stream/lib/_stream_passthrough.js","node_modules/readable-stream/lib/_stream_readable.js","node_modules/readable-stream/lib/_stream_transform.js","node_modules/readable-stream/lib/_stream_writable.js","node_modules/readable-stream/lib/internal/streams/async_iterator.js","node_modules/readable-stream/lib/internal/streams/buffer_list.js","node_modules/readable-stream/lib/internal/streams/destroy.js","node_modules/readable-stream/lib/internal/streams/end-of-stream.js","node_modules/readable-stream/lib/internal/streams/from-browser.js","node_modules/readable-stream/lib/internal/streams/pipeline.js","node_modules/readable-stream/lib/internal/streams/state.js","node_modules/readable-stream/lib/internal/streams/stream-browser.js","node_modules/readable-stream/readable-browser.js","node_modules/ripemd160/index.js","node_modules/safe-buffer/index.js","node_modules/safer-buffer/safer.js","node_modules/saxes/saxes.js","node_modules/sha.js/hash.js","node_modules/sha.js/index.js","node_modules/sha.js/sha.js","node_modules/sha.js/sha1.js","node_modules/sha.js/sha224.js","node_modules/sha.js/sha256.js","node_modules/sha.js/sha384.js","node_modules/sha.js/sha512.js","node_modules/stream-browserify/index.js","node_modules/stream-browserify/node_modules/isarray/index.js","node_modules/stream-browserify/node_modules/readable-stream/duplex-browser.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js","node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/BufferList.js","node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js","node_modules/stream-browserify/node_modules/readable-stream/passthrough.js","node_modules/stream-browserify/node_modules/readable-stream/readable-browser.js","node_modules/stream-browserify/node_modules/readable-stream/transform.js","node_modules/stream-browserify/node_modules/readable-stream/writable-browser.js","node_modules/timers-browserify/main.js","node_modules/util-deprecate/browser.js","node_modules/util/node_modules/inherits/inherits_browser.js","node_modules/util/support/isBufferBrowser.js","node_modules/util/util.js","node_modules/uuid/dist/index.js","node_modules/uuid/dist/md5-browser.js","node_modules/uuid/dist/nil.js","node_modules/uuid/dist/parse.js","node_modules/uuid/dist/regex.js","node_modules/uuid/dist/rng-browser.js","node_modules/uuid/dist/sha1-browser.js","node_modules/uuid/dist/stringify.js","node_modules/uuid/dist/v1.js","node_modules/uuid/dist/v3.js","node_modules/uuid/dist/v35.js","node_modules/uuid/dist/v4.js","node_modules/uuid/dist/v5.js","node_modules/uuid/dist/validate.js","node_modules/uuid/dist/version.js","node_modules/xmlchars/xml/1.0/ed5.js","node_modules/xmlchars/xml/1.1/ed2.js","node_modules/xmlchars/xmlns/1.0/ed3.js"],"names":["f","exports","module","define","amd","window","global","self","this","ExcelJS","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","fs","fastCsv","customParseFormat","utc","dayjs","extend","StreamBuf","exists","SpecialValues","true","false","#N/A","error","#REF!","#NAME?","#DIV/0!","#NULL!","#VALUE!","#NUM!","[object Object]","workbook","worksheet","filename","options","stream","createReadStream","read","close","Promise","resolve","reject","addWorksheet","sheetName","dateFormats","map","datum","datumNumber","Number","isNaN","Infinity","dt","reduce","matchingDate","currentDateFormat","dayjsObj","isValid","Date","valueOf","special","undefined","csvStream","parse","parserOptions","on","data","addRow","emit","pipe","getWorksheet","sheetId","format","formatterOptions","dateFormat","dateUTC","value","text","hyperlink","formula","result","JSON","stringify","includeEmptyRows","lastRow","eachRow","row","rowNumber","write","values","shift","end","streamOptions","encoding","createWriteStream","colCache","Anchor","address","offset","arguments","decoded","decodeAddress","nativeCol","col","nativeColOff","nativeRow","nativeRowOff","model","Math","min","colWidth","v","floor","rowHeight","getColumn","isCustomWidth","width","getRow","height","_","Enums","slideFormula","Note","Cell","column","_row","_column","validateAddress","_address","_value","Value","create","Types","Null","style","_mergeStyle","_mergeCount","numFmt","font","alignment","border","fill","protection","rowStyle","colStyle","number","$col$row","letter","type","effectiveType","toCsvString","isMerged","Merge","master","ignoreStyle","release","isMergedTo","isHyperlink","Hyperlink","getType","note","_comment","toString","html","escapeHtml","String","formulaType","fullAddress","name","names","definedNames","getNamesEx","removeAllNames","forEach","addEx","removeEx","_dataValidations","dataValidations","dataValidation","find","add","comment","fromModel","ValueType","Boolean","sharedFormula","Formula","richText","RichText","sharedString","SharedString","types","cell","replace","toISOString","tooltip","shareType","ref","copy","cp","_copyModel","dependencies","ranges","match","cells","_getTranslatedFormula","FormulaType","Master","Shared","None","_translatedFormula","findCell","_master","addMergeRef","releaseMergeRef","rawValue","join","T","Column","defn","_worksheet","_number","n2l","header","_header","key","hidden","outlineLevel","_hidden","_key","headers","Array","index","getCell","getColumnKey","deleteColumnKey","setColumnKey","_outlineLevel","collapsed","properties","outlineLevelCol","other","isEqual","isDefault","s","headerCount","iteratee","colNumber","eachCell","hasOwnProperty","_applyStyle","columns","cols","equivalentTo","max","push","count","sort","pre","next","validation","CellMatrix","Range","rangeRegexp","matrixMap","locStr","location","decodeEx","matrix","getMatrix","top","left","right","bottom","addCellEx","removeCellEx","each","callback","addressStr","findCellEx","filter","mark","range","x","y","vGrow","yy","edge","findCellAt","hGrow","xx","_explore","$shortRange","forEachInSheet","start","numDelete","numInsert","spliceRows","normaliseMatrix","spliceColumns","getRanges","definedName","rangeStr","test","split","pop","addCell","RelationshipType","OfficeDocument","Worksheet","CalcChain","SharedStrings","Styles","Theme","DocumentType","Xlsx","ReadingOrder","LeftToRight","RightToLeft","ErrorValue","NotApplicable","Ref","Name","DivZero","Num","imageId","hyperlinks","tl","br","ext","editAs","_ref","decode","texts","deepMerge","DEFAULT_CONFIGS","Object","keys","margins","insetmode","inset","locked","lockText","l","b","setTLBR","argv","tlbr","_serialisedSheetName","dimensions","expand","$t$l","$b$r","$range","shortRange","containsEx","cb","encodeAddress","_cells","_commitRow","l2n","getCellEx","nKeep","_len","inserts","nExpand","nEnd","cSrc","cDst","includeEmpty","lft","rght","ws","pb","id","man","rowBreaks","item","eachColumnKey","hasValues","some","cellCount","actualCellCount","outlineLevelRow","cellModel","previousAddress","table","cacheState","_set","filterButton","totalsRowLabel","totalsRowFunction","totalsRowResult","totalsRowFormula","validate","store","rows","filterHeight","headerRow","tableHeight","totalsRow","assign","dflt","assert","message","autoFilterRef","encode","tableRef","getFormula","assignStyle","j","_cache","splice","rowIndex","colIndex","target","prop","_assign","displayName","displyName","displayNamename","theme","showFirstColumn","showLastColumn","showRowStripes","showColumnStripes","DefinedNames","XLSX","CSV","category","company","created","description","keywords","manager","modified","calcProperties","_worksheets","subject","title","views","media","_definedNames","xlsx","_xlsx","csv","_csv","nextId","console","trace","tabColor","argb","indexed","lastOrderNo","acc","orderNo","worksheetOptions","destroy","worksheets","slice","sheet","_themes","image","creator","lastModifiedBy","lastPrinted","sheets","language","revision","contentStatus","themes","worksheetModel","state","findIndex","Row","Image","Table","DataValidations","Encryptor","copyStyle","_workbook","_rows","_columns","_keys","_merges","defaultRowHeight","dyDescent","pageSetup","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","showRowColHeaders","showGridLines","firstPageNumber","horizontalCentered","verticalCentered","colBreaks","headerFooter","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","autoFilter","_media","sheetProtection","tables","conditionalFormattings","_name","warn","substring","toLowerCase","removeWorksheetEx","rowDims","_headerRowCount","pv","cv","nRows","rowArguments","insert","apply","lastColumn","columnCount","maxCount","actualColumnCount","counts","_lastRowNumber","_nextRow","rowCount","actualRowCount","rowNo","_setStyleOption","pos","findRow","_copyStyle","getRows","src","dest","styleEmpty","rSrc","rDst","rowNum","_len2","_key2","nInserts","constructor","cellToBeMerged","prevMaster","newMaster","merge","getAddress","_len3","_key3","_mergeCellsInternal","_len4","_key4","intersects","unmerge","hasMerges","_len5","_key5","_unMergeMaster","results","masterAddress","isShared","getResult","isArray","first","m","password","spinCount","isFinite","round","algorithmName","saltValue","randomBytes","hashValue","convertPasswordToHash","cf","Function","medium","toModel","rowModel","merges","mergeCells","mergeCellsWithoutStyle","_parseRows","_parseMergeCells","Workbook","textDecoder","TextDecoder","bufferToString","chunk","textEncoder","TextEncoder","Buffer","stringToBuffer","str","from","buffer","template","getCellAt","findSheet","findSheetRow","findRowCell","addressRegex","_dictionary","_l2nFill","_l2n","_n2l","_level","level","l1","l2","l3","_fill","_hash","addr","hasCol","hasRow","char","charCodeAt","parts","groups","reference","startsWith","oneDepthCopy","obj","nestKeys","memo","setIfExists","dst","copied","stops","crypto","algorithm","hash","createHash","buffers","update","concat","digest","hashAlgorithm","getHashes","indexOf","passwordBuffer","iterator","alloc","writeUInt32LE","size","SaxesParser","PassThrough","async","iterable","Symbol","asyncIterator","saxesParser","err","events","eventType","replacementCandidateRx","CRrx","fromCell","toCell","to","refMatch","sheetMaybe","addrPart","trailingParen","exec","colDollar","colStr","toUpperCase","rowDollar","rowStr","parseInt","Stream","utils","StringBuf","StringChunk","_data","_encoding","toBuffer","targetOffset","_buffer","StringBufChunk","_buf","BufferChunk","ReadWriteBuf","iRead","iWrite","buf","eod","full","bufSize","batch","corked","inPos","outPos","pipes","paused","inherits","Duplex","rwBuf","last","all","inLen","_getWritableBuffer","nop","ArrayBuffer","_writeToBuffers","_pipe","process","nextTick","_flush","writeComplete","destination","_inPos","capacity","position","_grow","inBuf","prototype","escapeHtmlRegex","every","keyBy","aType","bType","aArray","bArray","aValue","bValue","regexResult","escape","lastIndex","charAt","strcmp","isUndefined","val","isObject","clone","copyIsArray","assignValue","xmlDecodeRegex","promiseImmediate","setImmediate","setTimeout","cls","superCtor","statics","super_","defineProperty","getOwnPropertyDescriptor","enumerable","writable","configurable","dateToExcel","d","date1904","getTime","millisecondSinceEpoch","filepath","lastIndexOf","path","parsePath","charCode","xmlDecode","fmt","access","constants","F_OK","toIsoDateString","toIsoString","subsstr","parseBoolean","pushAttribute","xml","xmlEncode","pushAttributes","attributes","tmp","XmlStream","_xml","_stack","_rollbacks","tos","cursor","docAttributes","parent","open","leaf","attrs","node","openNode","writeText","closeNode","stack","closeAll","StdDocAttributes","version","standalone","JSZip","ZipWriter","EventEmitter","super","compression","zip","base64","file","browser","content","generateAsync","setEncoding","pause","resume","isPaused","unpipe","unshift","wrap","0","2","3","4","9","10","11","12","13","14","15","16","17","18","19","20","21","22","27","zh-tw","zh-cn","ja-jp","ko-kr","28","29","30","31","32","33","34","35","36","37","38","39","40","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","th-th","60","61","62","67","68","69","70","81","CoreProperties","ExtenderProperties","Comments","VmlDrawing","parseSax","BaseXform","xform","reset","saxParser","parseOpen","parseText","parseClose","toXml","xmlStream","render","always","toAttribute","attr","parseFloat","isValidRange","extractRanges","parsedText","quotesOpened","quotes","quotesEven","localSheetId","_parsedName","_parsedLocalSheetId","_parsedText","leafNode","r:id","rId","calcId","fullCalcOnLoad","defaultThemeVersion","filterPrivacy","xWindow","yWindow","windowWidth","windowHeight","firstSheet","activeTab","visibility","addS","addN","StaticXform","ListXform","DefinedNameXform","SheetXform","WorkbookViewXform","WorkbookPropertiesXform","WorkbookCalcPropertiesXform","WorkbookXform","fileVersion","STATIC_XFORMS","workbookPr","bookViews","tag","childXform","calcPr","printAreas","printArea","printAreaComponents","printTitlesRow","printTitlesColumn","titlesColumns","titlesRows","openXml","WORKBOOK_ATTRIBUTES","parser","rels","workbookRels","rel","Id","worksheetHash","Target","rangeString","dollarRegex","rowRangeRegex","rowRangeMatches","columnRangeRegex","columnRangeMatches","xmlns","xmlns:r","xmlns:mc","mc:Ignorable","xmlns:x15","$","appName","lastEdited","lowestEdited","rupBuild","RichTextXform","CommentXform","richTextXform","_richTextXform","authorId","CommentsXform","COMMENTS_ATTRIBUTES","comments","_model","anchor","lf","tf","rf","rect","getAnchorRect","getDefaultRect","refAddress","VmlAnchorXform","VmlProtectionXform","VmlPositionXform","POSITION_TYPE","x:Anchor","x:Locked","x:LockText","x:SizeWithCells","x:MoveWithCells","ObjectType","normalizeModel","len","VmlShapeXform","VmlNotesXform","v:shape","DRAWING_ATTRIBUTES","v:ext","coordsize","o:spt","joinstyle","gradientshapeok","o:connecttype","anchors","reconcile","xmlns:v","xmlns:o","xmlns:x","VmlTextboxXform","VmlClientDataXform","v:textbox","x:ClientData","V_SHAPE_ATTRIBUTES","color2","color","obscured","fillcolor","strokecolor","o:insetmode","multiple","unit","toFixed","margin","conversionUnit","reverseConversionUnit","createNewModel","onParserClose","baseType","StringXform","AppHeadingPairsXform","AppTitleOfPartsXform","AppXform","Company","Manager","HeadingPairs","TitleOfParts","PROPERTY_ATTRIBUTES","DateFormat","DateAttrs","xsi:type","xmlns:vt","ContentTypesXform","mediaHash","imageType","extension","Extension","ContentType","PartName","sharedStrings","drawings","drawing","commentRefs","commentName","DateXform","IntegerXform","CoreXform","dc:creator","dc:title","dc:subject","dc:description","dc:identifier","dc:language","cp:keywords","cp:category","cp:lastModifiedBy","cp:lastPrinted","cp:revision","cp:version","cp:contentStatus","cp:contentType","dcterms:created","dcterms:modified","CORE_PROPERTY_ATTRIBUTES","identifier","contentType","xmlns:cp","xmlns:dc","xmlns:dcterms","xmlns:dcmitype","xmlns:xsi","RelationshipXform","RelationshipsXform","Relationship","_values","RELATIONSHIPS_ATTRIBUTES","relationship","mediaId","mediaIndex","BlipXform","a:blip","r:embed","cstate","noChangeAspect","HlickClickXform","ExtLstXform","a:hlinkClick","a:extLst","xdr:col","zero","xdr:colOff","xdr:row","xdr:rowOff","TwoCellAnchorXform","OneCellAnchorXform","DrawingXform","xdr:twoCellAnchor","xdr:oneCellAnchor","anchorType","getAnchorType","prepare","xmlns:xdr","xmlns:a","uri","xmlns:a16","addAttribute","cx","cy","CNvPrXform","CNvPicPrXform","xdr:cNvPr","xdr:cNvPicPr","BaseCellAnchorXform","CellPositionXform","ExtXform","PicXform","xdr:from","xdr:ext","xdr:pic","xdr:clientData","picture","reconcilePicture","BlipFillXform","NvPicPrXform","spPrJSON","xdr:nvPicPr","xdr:blipFill","xdr:spPr","mergeModel","prst","xdr:to","empty","$count","maxItems","childModel","firstAddress","secondAddress","getValueType","richTextXForm","styleId","styles","addStyleModel","getEffectiveCellType","ssId","si","siFormulae","formulae","expandToAddress","renderFormula","currentNode","getStyleModel","getString","isDateFmt","excelToDate","hyperlinkMap","commentsMap","iconSet","iconId","toIntValue","v4","uuidv4","CompositeXform","DatabarExtXform","IconSetExtXform","extIcons","3Triangles","3Stars","5Boxes","CfRuleExtXform","x14:dataBar","databarXform","x14:iconSet","iconSetXform","rule","isExt","custom","x14Id","renderDataBar","renderIconSet","priority","FExtXform","xm:f","fExtXform","SqRefExtXform","xm:sqref","sqRef","x14:cfRule","cfRule","rules","xmlns:xm","ConditionalFormattingExtXform","x14:conditionalFormatting","cfXform","hasExtContent","hasContent","ColorXform","CfvoExtXform","x14:cfvo","cfvoXform","x14:borderColor","borderColorXform","x14:negativeBorderColor","negativeBorderColorXform","x14:negativeFillColor","negativeFillColorXform","x14:axisColor","axisColorXform","gradient","minLength","toIntAttribute","maxLength","toBoolAttribute","negativeBarColorSameAsPositive","negativeBarBorderColorSameAsPositive","axisPosition","direction","cfvo","borderColor","negativeBorderColor","negativeFillColor","axisColor","toBoolValue","toStringValue","CfIconExtXform","x14:cfIcon","cfIconXform","toStringAttribute","reverse","showValue","icons","icon","DatabarXform","ExtLstRefXform","FormulaXform","ColorScaleXform","IconSetXform","opType","operator","CfRuleXform","dataBar","extLst","extLstRefXform","formulaXform","colorScale","colorScaleXform","renderExpression","renderCellIs","renderTop10","renderAboveAverage","renderColorScale","renderText","renderTimePeriod","dxfId","percent","rank","aboveAverage","isPrimitive","getTextFormula","timePeriod","getTimePeriodFormula","toFloatValue","CfvoXform","colorXform","sqref","ConditionalFormattingXform","nextPriority","addDxfStyle","getDxfStyle","X14IdXform","x14:id","idXform","xmlns:x14","bestFit","defaultValue","assignBool","optimizedModel","dvList","marked","dvMap","matchCol","otherAddress","dv","optimiseDataValidations","allowBlank","showInputMessage","promptTitle","prompt","showErrorMessage","errorStyle","errorTitle","_dataValidation","_formula","includes","forEachAddress","ConditionalFormattingsExt","x14:conditionalFormattings","addRollback","createTag","commit","rollback","isInternalLink","isDefined","summaryBelow","summaryRight","booleanToXml","pageOrderToXml","cellCommentsToXml","errorsToXml","useFirstPageNumber","usePrinterDefaults","copies","headings","gridLines","PageBreaksXform","CellXform","cellXform","numRowsSeen","spans","span","ht","x14ac:dyDescent","defaultColWidth","customHeight","PageSetupPropertiesXform","OutlinePropertiesXform","pageSetUpPr","outlinePr","inner","outlineProperties","xmlToBoolean","equals","selectLockedCells","selectUnlockedCells","formatCells","formatColumns","formatRows","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","pivotTables","objects","scenarios","VIEW_STATES","frozen","frozenSplit","workbookViewId","included","topLeftCell","xSplit","ySplit","activePane","rightToLeft","tabSelected","showRuler","zoomScale","zoomScaleNormal","pane","activeCell","sheetView","view","selections","selection","topLeft","RelType","Merges","RowXform","ColXform","DimensionXform","HyperlinkXform","MergeCellXform","DataValidationsXform","SheetPropertiesXform","SheetFormatPropertiesXform","SheetViewXform","SheetProtectionXform","PageMarginsXform","PageSetupXform","PrintOptionsXform","AutoFilterXform","PictureXform","TablePartXform","RowBreaksXform","HeaderFooterXform","ConditionalFormattingsXform","ExtListXform","mergeConditionalFormattings","extModel","cfMap","ruleMap","extCf","extRule","extValue","mergeRule","WorkSheetXform","maxRows","maxCols","ignoreNodes","sheetPr","dimension","sheetViews","sheetFormatPr","sheetData","pageMargins","printOptions","tableParts","conditionalFormatting","nextRid","Type","TargetMode","vmlDrawing","drawingRelsHash","bookImage","background","drawingsCount","rIdImage","preImageId","rIdHyperLink","WORKSHEET_ATTRIBUTES","sheetFormatPropertiesModel","sheetPropertiesModel","pageMarginsModel","printOptionsModel","sheetProtectionModel","sheetProperties","relationships","h","vmlComment","vmlDrawings","drawingName","backgroundRel","tablePart","xmlns:x14ac","_format","_parse","addAttributes","build","child","writeXml","TextXform","sb","eb","rt","FontXform","textXform","_textXform","fontXform","_fontXform","FONT_OPTIONS","tagName","fontNameTag","PhoneticTextXform","rPh","SharedStringXform","rich","sharedStringXform","_sharedStringXform","uniqueCount","addRichText","addText","sx","_text","$0","$1","fromCharCode","horizontalValues","verticalValues","wrapText","shrinkToFit","validInt","indent","textRotationXform","textRotation","tr","horizontal","vertical","readingOrder","valid","truthy","EdgeXform","defaultColor","validStyleValues","diagonal","edgeModel","edgeXform","up","down","diagonalUp","diagonalDown","extensions","tint","rgb","AlignmentXform","BorderXform","FillXform","NumFmtXform","ProtectionXform","numFmtId","numFmtModel","formatCode","StopXform","PatternFillXform","fgColor","bgColor","pattern","patternType","GradientFillXform","stop","degree","center","stopXform","stopModel","patternFill","gradientFill","validPatternValues","BooleanXform","UnderlineXform","OPTIONS","charset","condense","family","outline","vertAlign","scheme","shadow","strike","sz","defaultNumFormats","defaultFmtHash","dnf","hashDefaultFormats","getDefaultFmtId","getDefaultFmtCode","boolean","isSignificant","xfId","fontId","fillId","borderId","StyleXform","DxfXform","StylesXform","initialise","numFmts","fonts","x14ac:knownFonts","fills","borders","cellStyleXfs","cellXfs","dxfs","cellStyles","tableStyles","init","numFmtNextId","initIndex","_addBorder","_addStyle","_addFill","weakMap","WeakMap","STYLESHEET_ATTRIBUTES","numFmtXml","_addFont","fontXml","fillXml","borderXml","styleXml","propName","numFmtIndex","cellType","has","get","_addNumFmtStr","set","addStyle","group","part","xmlns:x16r2","builtinId","defaultTableStyle","defaultPivotStyle","defaultSlicerStyle","defaultTimelineStyle","Mock","autodrain","dateStyleId","_dateStyleId","dateStyle","Attributes","single","double","singleAccounting","doubleAccounting","FilterColumnXform","filterColumn","CustomFilterXform","FilterXform","customFilters","filters","colId","hiddenButton","TableColumnXform","TableStyleInfoXform","TableXform","tableColumns","tableStyleInfo","TABLE_ATTRIBUTES","totalsRowCount","totalsRowShown","headerRowCount","xmlns:xr","xmlns:xr3","ZipStream","SharedStringsXform","WorksheetXform","theme1Xml","parseStream","workbookXform","worksheetXform","drawingXform","tableXform","drawingOptions","drawingRel","drawingRels","tableOptions","sheetOptions","worksheetRels","sheetNo","globalRels","sheetDefs","entry","lastDot","substr","streamBuf","chunks","load","loadAsync","files","dir","entryName","writableObjectMode","readableObjectMode","chunkSize","parseRels","parseWorkbook","appXform","appProperties","coreXform","coreProperties","_processWorksheetEntry","_processWorksheetRelsEntry","_processThemeEntry","_processMediaEntry","_processDrawingEntry","_processCommentEntry","_processTableEntry","_processDrawingRelsEntry","_processVmlDrawingEntry","readFile","fsReadFileAsync","append","dataimg64","relsXform","tableXml","theme1","relationshipsXform","commentsXform","vmlNotesXform","finalize","useSharedStrings","useStyles","tableCount","prepareModel","addContentTypes","addOfficeRels","addWorkbookRels","addWorksheets","addSharedStrings","addDrawings","addTables","addThemes","addStyles","addMedia","addApp","addCore","addWorkbook","_finalize","then","catch","CsvFormatterStream","stream_1","formatter_1","Transform","objectMode","hasWrittenBOM","rowFormatter","RowFormatter","writeBOM","transformFunction","rowTransform","cbCalled","BOM","finish","FormatterOptions","opts","_a","delimiter","rowDelimiter","quote","quoteColumns","quoteHeaders","includeEndRowDelimiter","alwaysWriteHeaders","shouldWriteHeaders","writeHeaders","escapedQuote","__importDefault","mod","__esModule","default","FieldFormatter","lodash_isboolean_1","lodash_isnil_1","lodash_escaperegexp_1","_headers","REPLACE_REGEXP","RegExp","escapePattern","ESCAPE_REGEXP","fieldIndex","isHeader","quoteConfig","field","preparedField","quoteField","search","shouldQuote","lodash_isfunction_1","lodash_isequal_1","FieldFormatter_1","types_1","fieldFormatter","hasWrittenHeaders","transform","isRowHashArray","it","isSyncTransform","transformedRow","TypeError","_rowTransform","createTransform","callTransformer","shouldFormatColumns","checkHeaders","gatherColumns","gatherHeaders","isRowArray","isHeadersRow","formattedCols","RowFormatter_1","__createBinding","k","k2","__setModuleDefault","__importStar","__exportStar","writeToPath","writeToString","writeToBuffer","writeToStream","util_1","FormatterOptions_1","CsvFormatterStream_1","CsvFormatterStream_2","FormatterOptions_2","promiseWrite","promisify","prev","Writable","enc","writeCb","res","rej","CsvParserStream","string_decoder_1","transforms_1","parser_1","lines","parsedRowCount","parsedLineCount","endEmitted","headersEmitted","Parser","headerTransformer","HeaderTransformer","decoder","StringDecoder","rowTransformerValidator","RowTransformerValidator","hasHitRowLimit","limitRows","shouldEmitRows","skipRows","shouldSkipLine","skipLines","validateFunction","rowValidator","event","rest","done","wrappedCallback","wrapDoneCallback","newLine","processRows","hasMoreData","line","rowsLength","iterate","callNext","checkAndEmitHeaders","nextRowCount","transformRow","transformResult","pushRow","reason","parsedRow","withHeaders","transformAndValidate","skipRow","errorCalled","args","ParserOptions","ignoreEmpty","escapeChar","supportsComments","ltrim","rtrim","trim","renameHeaders","strictColumnHandling","discardUnmappedColumns","carriageReturn","escapedDelimiter","NEXT_TOKEN_REGEXP","parseString","parseFile","ParserOptions_1","CsvParserStream_1","CsvParserStream_2","ParserOptions_2","string","rs","Readable","Scanner_1","RowParser_1","Token_1","rowParser","RowParser","scanner","Scanner","removeBOM","parseWithComments","parseWithoutComments","shouldContinue","parseRow","nextToken","nextCharacterToken","Token","isTokenComment","advancePastLine","lineFromCursor","hasMoreCharacters","truncateToCursor","nextNonSpaceToken","isEmptyRow","column_1","columnParser","ColumnParser","currentScanner","currentToken","getStartToken","isTokenRowDelimiter","advancePastToken","isTokenCarriageReturn","shouldSkipColumnParse","isTokenDelimiter","ROW_DELIMITER","lineLength","regex","token","startCursor","endCursor","tokenArgs","ColumnFormatter","trimLeft","trimRight","NonQuotedColumnParser_1","QuotedColumnParser_1","quotedColumnParser","QuotedColumnParser","nonQuotedColumnParser","NonQuotedColumnParser","isTokenQuote","advanceToToken","ColumnFormatter_1","columnFormatter","characters","originalCursor","foundClosingQuote","gatherDataBetweenQuotes","advanceTo","checkForMalformedColumn","foundStartingQuote","isQuote","isTokenEscapeCharacter","tokenFollowingEscape","isNextTokenADelimiter","isNextTokenARowDelimiter","linePreview","ColumnParser_1","Parser_1","lodash_isundefined_1","lodash_uniq_1","lodash_groupby_1","receivedHeaders","shouldUseFirstRow","processedFirstRow","headersLength","setHeaders","headersTransform","shouldMapRow","processRow","mapHeaders","rowMap","filteredHeaders","grouped","duplicates","dup","_rowValidator","transformed","isSyncValidate","createValidator","transformErr","callValidator","validateErr","validationResult","RowTransformerValidator_1","HeaderTransformer_1","asn1","bignum","base","decoders","encoders","Entity","body","_createNamed","Base","Generated","entity","_initNamed","_getDecoder","_getEncoder","reporter","Reporter","DecoderBuffer","isBuffer","EncoderBuffer","isEncoderBuffer","byteLength","isDecoderBuffer","save","restore","isEmpty","readUInt8","skip","raw","fail","bytes","_reporterState","out","Node","tags","methods","_baseState","children","reverseArgs","choice","optional","any","use","useDecoder","explicit","implicit","contains","_wrap","stateProps","method","_init","equal","_useArgs","arg","def","num","newKey","_decode","input","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","track","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","_createEncoderBuffer","_encode","_encodeValue","_skipDefault","primitive","_encodeChoice","_encodePrimitive","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","ReporterError","msg","rethrow","pathLen","now","inherited","elem","partial","captureStackTrace","tagClass","tagClassByName","5","6","7","8","23","24","25","26","tagByName","_reverse","der","DERDecoder","tree","DERNode","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","unused","readUInt16BE","numstr","printstr","relative","identifiers","ident","subident","second","year","mon","day","hour","sec","UTC","pem","PEMDecoder","label","re","DEREncoder","two","encodedTag","encodeTag","lenOctets","writeUInt16BE","objid","time","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","toArray","sign","dataBuffer","defaultBuffer","PEMEncoder","ctor","TempCtor","BN","endian","isBN","negative","words","red","wordSize","parseHex4Bits","parseHexByte","lowerBound","parseBase","mul","cmp","_initNumber","_initArray","_parseHex","_parseBase","ceil","w","off","strip","limbLen","limbPow","total","word","imuln","_iaddn","pow","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","lo","carry","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toArrayLike","ArrayType","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","_zeroBits","bitLength","hi","zeroBits","toTwos","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","sub","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","output","outLen","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","arr","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","len2","encodeChunk","lookup","Uint8Array","move","_move","for","modrn","allocUnsafe","allocate","_toArrayLikeLE","_toArrayLikeBE","isNegNum","Rand","rand","generate","_rand","getBytes","getByte","getRandomValues","msCrypto","asUInt32Array","readUInt32BE","scrubVec","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","x4","x8","AES","_reset","blockSize","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","writeUInt32BE","decryptBlock","m1","scrub","aes","GHASH","incr32","StreamCipher","iv","decrypt","_cipher","ck","_ghash","_finID","ghash","toPad","ivBits","tail","writeUIntBE","calcIv","_prev","_secCache","_decrypt","_alen","_mode","_authTag","_called","_update","rump","encrypt","_final","final","xorTest","getAuthTag","setAuthTag","setAAD","ciphers","deciphers","modes","createCipher","Cipher","createCipheriv","Cipheriv","createDecipher","Decipher","createDecipheriv","Decipheriv","listCiphers","getCiphers","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","cache","suite","config","thing","flush","padded","unpad","setAutoPadding","setTo","autoPadding","PADDING","padBuff","writeUInt8","ZEROES","fromArray","block","_multiply","lsbVi","Vi","Zi","abl","bl","pad","encryptStart","encryptByte","byteParam","shiftIn","getBlock","chunkNum","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","aes-128-ecb","cipher","aes-192-ecb","aes-256-ecb","aes-128-cbc","aes-192-cbc","aes-256-cbc","aes128","aes192","aes256","aes-128-cfb","aes-192-cfb","aes-256-cfb","aes-128-cfb8","aes-192-cfb8","aes-256-cfb8","aes-128-cfb1","aes-192-cfb1","aes-256-cfb1","aes-128-ofb","aes-192-ofb","aes-256-ofb","aes-128-ctr","aes-192-ctr","aes-256-ctr","aes-128-gcm","aes-192-gcm","aes-256-gcm","DES","aesModes","desModes","keyLen","ivLen","CipherBase","des","des-ede3-cbc","instantiate","EDE","des-ede3","des-ede-cbc","des-ede","des-cbc","des-ecb","modeName","_des","des3","getr","priv","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","c1","c2","qinv","coefficient","exponent1","m2","exponent2","sha224WithRSAEncryption","RSA-SHA224","sha256WithRSAEncryption","RSA-SHA256","sha384WithRSAEncryption","RSA-SHA384","sha512WithRSAEncryption","RSA-SHA512","RSA-SHA1","ecdsa-with-SHA1","sha256","sha224","sha384","sha512","DSA-SHA","DSA-SHA1","DSA","DSA-WITH-SHA224","DSA-SHA224","DSA-WITH-SHA256","DSA-SHA256","DSA-WITH-SHA384","DSA-SHA384","DSA-WITH-SHA512","DSA-SHA512","DSA-RIPEMD160","ripemd160WithRSA","RSA-RIPEMD160","md5WithRSAEncryption","RSA-MD5","1.3.132.0.10","1.3.132.0.33","1.2.840.10045.3.1.1","1.2.840.10045.3.1.7","1.3.132.0.34","1.3.132.0.35","verify","algorithms","Sign","_hashType","_tag","_signType","Verify","createSign","createVerify","_write","sig","createHmac","EC","ec","parseKeys","curves","getKey","algo","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curve","curveId","keyFromPrivate","privateKey","toDER","ecSign","params","priv_key","H","dsaSign","checkValue","pub","pubkey","subjectPrivateKey","ecVerify","pub_key","unpacked","signature","montp","dsaVerify","padNum","copyProps","SafeBuffer","encodingOrOffset","allocUnsafeSlow","SlowBuffer","isEncoding","nb","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","ieee754","INSPECT_MAX_BYTES","createBuffer","RangeError","__proto__","actual","fromString","isView","fromArrayLike","isInstance","array","byteOffset","fromArrayBuffer","checked","numberIsNaN","fromObject","toPrimitive","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","foundIndex","found","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","species","poolSize","_isBuffer","compare","list","swap16","swap32","swap64","toLocaleString","thisStart","thisEnd","thisCopy","targetCopy","_arr","toHex","checkOffset","checkInt","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","subarray","readUIntLE","readUIntBE","readUInt16LE","readUInt32LE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUInt16LE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","INVALID_BASE64_RE","leadSurrogate","base64clean","hashMode","_finalOrDigest","__final","_decoder","inputEnc","outputEnc","outData","_toString","_transform","fin","objectToString","isBoolean","isNull","isNullOrUndefined","isNumber","isString","isSymbol","isRegExp","isDate","isFunction","elliptic","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","formatReturnValue","bn","p256","secp256r1","secp192r1","p384","p521","generateKeys","genKeyPair","getPublicKey","computeSecret","inenc","keyFromPublic","getPublic","getPrivate","getX","getPrivateKey","setPublicKey","_importPublic","setPrivateKey","_priv","_importPrivate","MD5","RIPEMD160","sha","Hash","alg","Legacy","md5","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","rng","pseudoRandomBytes","prng","algos","algoKeys","hashes","pbkdf2","pbkdf2Sync","dh","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","randomFill","randomFillSync","createCredentials","DH_CHECK_P_NOT_SAFE_PRIME","DH_CHECK_P_NOT_PRIME","DH_UNABLE_TO_CHECK_GENERATOR","DH_NOT_SUITABLE_GENERATOR","NPN_ENABLED","ALPN_ENABLED","RSA_PKCS1_PADDING","RSA_SSLV23_PADDING","RSA_NO_PADDING","RSA_PKCS1_OAEP_PADDING","RSA_X931_PADDING","RSA_PKCS1_PSS_PADDING","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID","globalThis","weekdays","months","ordinal","utcOffset","month","ms","Q","S","O","locale","$L","$u","$x","$offset","$d","NaN","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isSame","startOf","endOf","isAfter","isBefore","$g","unix","toDate","$locale","weekStart","$set","daysInMonth","subtract","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","getTimezoneOffset","toUTCString","$i","isDayjs","en","Ls","dayjs_plugin_customParseFormat","LTS","LT","L","LL","LLL","LLLL","zone","afternoon","milliseconds","SS","SSS","ss","mm","HH","hh","DD","Do","MM","MMM","MMMM","Y","YY","YYYY","Z","ZZ","formats","hours","parseTwoDigitYear","minutes","seconds","dayjs_plugin_utc","local","getUTCDay","getUTCMilliseconds","$localOffset","isUTC","proto","CBCState","_cbcInit","_cbcState","inp","inOff","outOff","superProto","bufferOff","_updateDecrypt","_updateEncrypt","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_pad","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","ip","_encrypt","lStart","rStart","keyL","keyR","substitute","rip","EDEState","k1","k3","_edeState","inL","inR","outL","outR","pc2table","sTable","permuteTable","padSplit","generatePrime","DH","ENCODINGS","binary","hex","gen","generator","genc","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","_pub","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","rem","simpleSieve","fermatTest","checkPrime","__gen","_gen","secret","getPrime","front","getGenerator","findPrime","ONE","TWO","FIVE","FOUR","_getPrimes","n2","modp1","modp2","modp5","modp14","modp15","modp16","modp17","modp18","eddsa","getNAF","getJSF","BaseCurve","conf","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","point","_fixedNafMul","doubles","_getDoubles","naf","I","step","nafW","repr","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","jsf","ja","jb","decodePoint","pointFromX","encodeCompressed","compact","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","EdwardsCurve","twisted","mOneA","dd","oneC","Point","zOne","_mulA","_mulC","rhs","lhs","y2","pointFromY","isInfinity","normalize","fromJSON","_extDbl","nx","ny","nt","nz","_projDbl","_extAdd","_projAdd","mulAdd","jmulAdd","zi","eqXToP","xc","short","edwards","MontCurve","i4","a24","aa","bb","diffAdd","da","jumlAdd","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","isRed","inf","JPoint","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","len1","_endoSplit","v1","v2","p1","p2","q1","q2","ax","_endoWnafMulAdd","npoints","ncoeffs","endoMul","obj2point","ys1","dyinv","_precompute","negate","zinv","zinv2","ay","pz2","z2","u1","u2","h2","h3","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","ee","yyu4","kbase","z3","pz3","zs","PresetCurve","defineCurve","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","fromPublic","drbg","pers","persEnc","entropy","hmacStrength","entropyEnc","nonce","ns2","_truncateToN","truncOnly","bkey","ns1","iter","kp","kpX","recoveryParam","canonical","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Qprime","privEnc","pubEnc","derive","_importDER","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","log","LN2","slen","backHalf","parseBytes","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","R","Rencoded","encodePoint","s_","pubBytes","makeSignature","SG","intFromLE","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","cachedProperty","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","minAssert","minUtils","zero2","m8","d1","d2","m14","m24","computer","main","scripts","lint","lint:fix","repository","url","author","license","bugs","homepage","devDependencies","brfs","coveralls","eslint","grunt","grunt-browserify","grunt-cli","grunt-contrib-connect","grunt-contrib-copy","grunt-contrib-uglify","grunt-mocha-istanbul","grunt-saucelabs","istanbul","mocha","bn.js","brorand","hash.js","hmac-drbg","minimalistic-assert","minimalistic-crypto-utils","objectCreate","F","objectKeys","bind","context","fn","_events","_eventsCount","_maxListeners","hasDefineProperty","defaultMaxListeners","$getMaxListeners","that","emitNone","handler","isFn","listeners","arrayClone","emitOne","arg1","emitTwo","arg2","emitThree","arg3","emitMany","_addListener","listener","prepend","existing","newListener","warned","emitter","onceWrapper","fired","removeListener","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","listenerCount","setMaxListeners","getMaxListeners","er","doError","addListener","prependListener","once","prependOnceListener","originalListener","spliceOne","removeAllListeners","rawListeners","eventNames","Reflect","ownKeys","salt","keyBits","used","keyStart","ivStart","format_1","parse_1","HashBase","_block","_blockSize","_blockOffset","_length","_finalized","prefix","throwIfNotStringOrBuffer","_digest","common","ripemd","hmac","sha1","ripemd160","BlockHash","pending","pendingTotal","outSize","padLength","_delta8","_delta32","join32","outer","rotl32","sum32","sum32_3","sum32_4","K","Kh","E","Ah","Bh","Ch","Dh","Eh","rh","sh","toHex32","split32","shaCommon","sum32_5","ft_1","sha1_K","SHA1","W","SHA256","SHA224","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","T1","T2","SHA512","SHA384","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","ah","al","bh","ch","cl","dl","eh","el","fh","fl","gh","gl","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","rotr32","p32","isSurrogatePair","htonl","zero8","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","seed","_hmac","kmac","reseed","addEnc","temp","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","getTypeOf","uint8array","./support","./utils","compressedSize","uncompressedSize","crc32","compressedContent","getContentWorker","uncompressWorker","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","./external","./stream/Crc32Probe","./stream/DataLengthProbe","./stream/DataWorker","STORE","magic","DEFLATE","./flate","./stream/GenericWorker","createFolders","compressionOptions","unixPermissions","dosPermissions","lie","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","meta","processChunk","_createPako","transformTo","cleanUp","onData","pako","utf8encode","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","openedSource","closedSource","DATA_DESCRIPTOR","CENTRAL_DIRECTORY_END","prepareNextSource","previous","registerPrevious","generatedError","lock","../crc32","../signature","../stream/GenericWorker","../utf8","../utils","generateWorker","platform","_compressWorker","../compressions","./ZipFileWorker","root","support","defaults","external","./defaults","./load","./object","decompressed","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","fileNameStr","fileCommentStr","unsafeOriginalName","./nodejsUtils","./utf8","./zipEntries","_upstreamEnded","_bindStream","_stream","_helper","_read","readable-stream","newBufferFrom","allocBuffer","folder","remove","generateInternalStream","mimeType","checkSupport","generateNodeStream","toNodejsStream","./compressedObject","./generate","./nodejs/NodejsStreamInputAdapter","./stream/StreamHelper","./zipObject","byteAt","lastIndexOfSignature","readAndCheckSignature","readData","./DataReader","checkIndex","setIndex","readInt","readString","readDate","./Uint8ArrayReader","./ArrayReader","../support","./NodeBufferReader","./StringReader","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","./GenericWorker","dataIsReady","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","extraStreamInfo","isLocked","mergeStreamInfo","nodestream","_internalType","_outputType","_mimeType","_worker","newBlob","../base64","../external","../nodejs/NodejsStreamOutputAdapter","./ConvertWorker","arraybuffer","nodebuffer","blob","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","FileReader","onload","onerror","readAsArrayBuffer","./base64","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","./reader/readerFor","./signature","./zipEntry","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","./compressions","./crc32","_dataBinary","internalStream","_decompressWorker","nodeStream","MutationObserver","WebKitMutationObserver","document","createTextNode","observe","characterData","MessageChannel","createElement","onreadystatechange","parentNode","removeChild","documentElement","appendChild","port1","onmessage","port2","postMessage","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","status","finally","race","immediate","./lib/deflate","./lib/inflate","./lib/utils/common","./lib/zlib/constants","windowBits","memLevel","strategy","gzip","ended","strm","avail_out","deflateInit2","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","next_in","avail_in","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","./utils/common","./utils/strings","./zlib/deflate","./zlib/messages","./zlib/zstream","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","./zlib/constants","./zlib/gzheader","./zlib/inflate","41","Int32Array","setTyped","Buf16","Buf32","42","./common","43","44","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","pending_buf","pending_out","total_out","_tr_flush_block","block_start","strstart","U","P","max_chain_length","prev_length","nice_match","w_size","w_mask","good_match","lookahead","match_start","window_size","hash_size","head","adler","total_in","ins_h","hash_shift","hash_mask","match_length","_tr_tally","max_lazy_match","last_lit","prev_match","match_available","good_length","max_lazy","nice_length","max_chain","func","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","data_type","_tr_init","deflateInit","deflateReset","deflateResetKeep","hcrc","extra","os","_tr_align","_tr_stored_block","deflateInfo","../utils/common","./adler32","./messages","./trees","xflags","extra_len","dmax","wsize","whave","wnext","hold","lencode","distcode","lenbits","distbits","sane","havedict","flags","check","wbits","ncode","nlen","ndist","have","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","./inffast","./inftrees","-1","-2","-3","-4","-5","-6","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","X","J","getPrototypeOf","importScripts","random","addEventListener","attachEvent","clearImmediate","source","reRegExpChar","reHasRegExpChar","freeGlobal","freeSelf","symbolProto","symbolToString","baseToString","isObjectLike","argsTag","mapTag","objectTag","setTag","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reEscapeChar","reIsHostCtor","reIsUint","typedArrayTags","freeExports","nodeType","freeModule","freeProcess","nodeUtil","binding","nodeIsTypedArray","isTypedArray","arrayAggregator","setter","accumulator","arraySome","predicate","isHostObject","mapToArray","setToArray","uid","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","IE_PROTO","funcToString","reIsNative","propertyIsEnumerable","nativeKeys","DataView","getNative","Map","Set","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolValueOf","entries","clear","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","isArguments","baseTimes","skipIndexes","isIndex","assocIndexOf","baseAggregator","collection","baseEach","getMapData","pairs","LARGE_ARRAY_SIZE","eachFunc","fromRight","object","baseFor","isArrayLike","keysFunc","props","createBaseFor","baseGet","isKey","castPath","toKey","baseHasIn","baseIsEqual","customizer","bitmask","equalFunc","objIsArr","othIsArr","objTag","othTag","getTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","stacked","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","othLength","skipCtor","objValue","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsNative","isMasked","baseIteratee","identity","srcValue","isStrictComparable","matchesStrictComparable","hasFunc","isLength","hasPath","hasIn","UNORDERED_COMPARE_FLAG","baseMatchesProperty","matchData","getMatchData","noCustomizer","baseIsMatch","baseMatches","basePropertyDeep","baseKeys","Ctor","stringToPath","seen","arrValue","othIndex","getValue","ctorString","memoize","initializer","groupBy","resolver","memoized","Cache","isArrayLikeObject","baseUnary","moduleExports","nativeObjectToString","symToStringTag","toStringTag","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isArr","isArg","isBuff","isType","baseGetTag","isOwn","unmasked","getRawTag","baseIsArguments","getAllKeys","symbolsFunc","arrayPush","baseGetAllKeys","getSymbols","resIndex","arrayFilter","symbol","arrayIncludes","fromIndex","baseFindIndex","baseIsNaN","baseIndexOf","arrayIncludesWith","comparator","cacheHas","createSet","isCommon","computed","seenIndex","baseUniq","ARRAY16","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","MillerRabin","_randbelow","min_bytes","_randrange","rone","n1","rn1","getDivisor","2.16.840.1.101.3.4.1.1","2.16.840.1.101.3.4.1.2","2.16.840.1.101.3.4.1.3","2.16.840.1.101.3.4.1.4","2.16.840.1.101.3.4.1.21","2.16.840.1.101.3.4.1.22","2.16.840.1.101.3.4.1.23","2.16.840.1.101.3.4.1.24","2.16.840.1.101.3.4.1.41","2.16.840.1.101.3.4.1.42","2.16.840.1.101.3.4.1.43","2.16.840.1.101.3.4.1.44","certificate","RSAPrivateKey","seq","int","RSAPublicKey","PublicKey","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","PrivateKey","EncryptedPrivateKeyInfo","EncryptedPrivateKey","DSAPrivateKey","DSAparam","ECPrivateKey","ECParameters","namedCurve","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","rdnSequence","Validity","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherText","cipherKey","match2","aesid","fixProc","compat","passphrase","subtype","ndata","stripped","tbsCertificate","subjectPublicKeyInfo","subjectPublicKey","kde","kdeparams","iters","keylen","parameters","ZERO_BUF","checkParameters","defaultEncoding","sync","subtle","toBrowser","sha-1","sha-256","sha-384","sha-512","checks","getNextTick","queueMicrotask","browserPbkdf2","iterations","importKey","deriveBits","resolvePromise","prom","checkNative","resp","MAX_ALLOC","sizes","rmd160","saltLen","shaFunc","getDigest","ipad1","ipad2","run","DK","block1","destPos","hLen","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","marker","runClearTimeout","Item","noop","env","versions","cwd","chdir","umask","i2ops","mgf","withPublic","zBuffer","iHash","maskedSeed","maskedDb","db","dif","oaep","ps","pkcs1","publicKey","paddedMsg","hLen2","dblen","cur","nonZero","generated","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","codes","createErrorType","NodeError","_Base","subClass","superClass","getMessage","oneOf","expected","determiner","this_len","endsWith","allowHalfOpen","readable","onend","_writableState","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","ReadableState","EElistenerCount","OurUint8Array","debug","debugUtil","debuglog","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","pipesCount","flowing","reading","needReadable","emittedReadable","readableListening","resumeScheduled","emitClose","autoDestroy","awaitDrain","readingMore","_destroy","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","ondata","cleanedUp","needDrain","pipeOnDrain","dests","ev","_this","_fromList","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","needTransform","writeencoding","prefinish","err2","CorkedRequest","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","finalCalled","ending","noDecode","decodeStrings","writing","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","hasInstance","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_defineProperty","prim","_toPrimitive","_toPropertyKey","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","setPrototypeOf","lastPromise","wrapForNext","_this2","_Object$create","enumerableOnly","symbols","sym","_objectSpread","getOwnPropertyDescriptors","defineProperties","_defineProperties","descriptor","instance","Constructor","_classCallCheck","protoProps","staticProps","hasStrings","_getString","_getBuffer","customInspect","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","called","onlegacyfinish","writableEnded","readableEnded","onrequest","req","setHeader","abort","isRequest","ERR_MISSING_ARGS","destroyer","closed","popCallback","streams","destroys","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","pipeline","zr","sl","sr","hr","_e","fn1","fn2","fn3","fn4","fn5","ar","cr","dr","safer","Safer","kStringMaxLength","MAX_LENGTH","MAX_STRING_LENGTH","ed5","ed2","NSed3","isS","isChar10","isChar","isNameStartChar","isNameChar","S_LIST","NAME_RE","isChar11","isNCNameStartChar","isNCNameChar","NC_NAME_RE","XML_NAMESPACE","XMLNS_NAMESPACE","rootNS","XML_ENTITIES","amp","quot","apos","QUOTES","DOCTYPE_TERMINATOR","DTD_TERMINATOR","XML_DECL_NAME_TERMINATOR","ATTRIB_VALUE_UNQUOTED_TERMINATOR","nsPairCheck","isNCName","isName","EVENTS","EVENT_NAME_TO_HANDLER_NAME","xmldecl","processinginstruction","doctype","opentagstart","attribute","opentag","closetag","cdata","ready","opt","fragmentOpt","fragment","xmlnsOpt","trackPosition","nameStartCheck","nameCheck","processAttribs","processAttribsNS","pushAttrib","pushAttribNS","ns","additional","additionalNamespaces","mapping","nsMappingCheck","processAttribsPlain","pushAttribPlain","stateTable","sBegin","sBeginWhitespace","sDoctype","sDoctypeQuote","sDTD","sDTDQuoted","sDTDOpenWaka","sDTDOpenWakaBang","sDTDComment","sDTDCommentEnding","sDTDCommentEnded","sDTDPI","sDTDPIEnding","sText","sEntity","sOpenWaka","sOpenWakaBang","sComment","sCommentEnding","sCommentEnded","sCData","sCDataEnding","sCDataEnding2","sPIFirstChar","sPIRest","sPIBody","sPIEnding","sXMLDeclNameStart","sXMLDeclName","sXMLDeclEq","sXMLDeclValueStart","sXMLDeclValue","sXMLDeclSeparator","sXMLDeclEnding","sOpenTag","sOpenTagSlash","sAttrib","sAttribName","sAttribNameSawWhite","sAttribValue","sAttribValueQuoted","sAttribValueClosed","sAttribValueUnquoted","sCloseTag","sCloseTagSawWhite","_closed","openWakaBang","piTarget","topNS","chunkPosition","prevI","carriedFromPrevious","forbiddenState","attribList","reportedTextBeforeRoot","reportedTextAfterRoot","closedRoot","sawRoot","xmlDeclPossible","xmlDeclExpects","entityReturnState","defaultXMLVersion","forceXMLVersion","setXMLVersion","positionAtNewLine","xmlDecl","ENTITIES","readyHandler","columnIndex","makeError","errorHandler","lastCode","getCode","chars","isNLLike","getCodeNorm","currentXMLVersion","getCode10","getCode11","iBefore","skipSpaces","unget","captureTo","doctypeHandler","fromCodePoint","captureToChar","owb","handleTextInRoot","handleTextOutsideRoot","loop","parseEntity","textHandler","commentHandler","cdataHandler","isQuestion","piHandler","xmldeclHandler","captureNameChars","openTagStartHandler","openTag","openSelfClosingTag","closeTag","scanLoop","nonSpace","outRootLoop","qname","attributeHandler","trimmed","endHandler","resolvePrefix","colon","eqname","isSelfClosing","openTagHandler","closeTagHandler","defined","finalSize","_finalSize","accum","assigned","remainder","lowBits","highBits","_exports","Algorithm","Sha","_w","rotl30","ft","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","EE","_isStdio","didOnEnd","cleanup","pna","util","readableHwm","readableHighWaterMark","defaultHwm","needMoreData","copyFromBufferString","copyFromBuffer","fromListPartial","increasedAwaitDrain","asyncWrite","writableHwm","writableHighWaterMark","immediateIds","nextImmediateId","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","localStorage","formatRegExp","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","stylize","stylizeNoColor","colors","showHidden","_extend","stylizeWithColor","formatValue","styleType","recurseTimes","simple","formatPrimitive","visibleKeys","idx","arrayToHash","getOwnPropertyNames","formatError","braces","formatProperty","formatArray","numLinesEst","reduceToSingleString","desc","NODE_DEBUG","pid","bold","italic","underline","inverse","white","grey","black","blue","cyan","green","magenta","yellow","null","regexp","timestamp","origin","_v","_v2","_v3","_v4","_nil","_version","_validate","_stringify","_interopRequireDefault","getOutputLength","inputLength8","safeAdd","lsw","md5cmn","cnt","md5ff","md5gg","md5hh","md5ii","_default","unescape","encodeURIComponent","length32","md5ToHexEncodedArray","olda","oldb","oldc","oldd","wordsToMd5","length8","bytesToWords","uuid","rnds8","ROTL","byteToHex","_rng","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","seedBytes","nsecs","tmh","_md","hashfunc","generateUUID","namespace","stringToBytes","DNS","URL","rnds","_sha","_regex","CHAR","NAME_START_CHAR","NAME_CHAR","CHAR_RE","S_RE","NAME_START_CHAR_RE","NAME_CHAR_RE","NMTOKEN_RE","RESTRICTED_CHAR","RESTRICTED_CHAR_RE","isRestrictedChar","isCharAndNotRestricted","NC_NAME_START_CHAR","NC_NAME_CHAR","NC_NAME_START_CHAR_RE","NC_NAME_CHAR_RE"],"mappings":"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E,GAAA,EACA7L,KAAA,MACArsE,KAAA,SAEA29E,cAAA,CACAH,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,SAEA49E,cAAA,CACAJ,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,SAEA69E,cAAA,CACAL,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,SAEA89E,OAAA,CACAN,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,SAEA+9E,OAAA,CACAP,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,SAEAg+E,OAAA,CACAR,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,SAEAi+E,cAAA,CACAT,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,UAEAk+E,cAAA,CACAV,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,UAEAm+E,cAAA,CACAX,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,UAEAo+E,eAAA,CACAZ,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,OACArsE,KAAA,UAEAq+E,eAAA,CACAb,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,OACArsE,KAAA,UAEAs+E,eAAA,CACAd,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,OACArsE,KAAA,UAEAu+E,eAAA,CACAf,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,OACArsE,KAAA,UAEAw+E,eAAA,CACAhB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,OACArsE,KAAA,UAEAy+E,eAAA,CACAjB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,OACArsE,KAAA,UAEA0+E,cAAA,CACAlB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,UAEA2+E,cAAA,CACAnB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,UAEA4+E,cAAA,CACApB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,UAEA6+E,cAAA,CACArB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,UAEA8+E,cAAA,CACAtB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,UAEA++E,cAAA,CACAvB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,UAEAg/E,cAAA,CACAxB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,QAEAi/E,cAAA,CACAzB,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,QAEAk/E,cAAA,CACA1B,OAAA,MACA34E,IAAA,IACAqzE,GAAA,GACA7L,KAAA,MACArsE,KAAA,yEC5LA,IAAIsiE,EAAMvrE,EAAQ,cAElB,SAAS6lF,EAAUvmF,GAEjB,OADAA,EAAKyiF,MAAQziF,EAAK+hF,QAAQX,aAAaphF,EAAKyiF,OACrCziF,EAAKyiF,MAGd/iF,EAAQwjF,QAAU,SAAUljF,EAAMqmB,GAChC,KAAOrmB,EAAKka,OAAOjZ,OAASolB,EAAMplB,QAChCjB,EAAKka,OAASsM,EAAO6C,OAAO,CAACrpB,EAAKka,OAAQqsE,EAASvmF,KAGrD,IAAIkmF,EAAMlmF,EAAKka,OAAOgD,MAAM,EAAGmJ,EAAMplB,QAErC,OADAjB,EAAKka,OAASla,EAAKka,OAAOgD,MAAMmJ,EAAMplB,QAC/BgrE,EAAI5lD,EAAO6/D,mHCdpB,IAAIzE,EAAM/gF,EAAQ,SACd8lB,EAAS9lB,EAAQ,eAAe8lB,OAChC2lC,EAAYzrD,EAAQ,eAGxB,SAASkhF,EAAc5L,EAAMxnE,EAAKqzE,EAAIC,GACpC31B,EAAUnrD,KAAKf,MAEfA,KAAK8hF,QAAU,IAAIN,EAAInB,IAAI9xE,GAC3BvO,KAAKwiF,MAAQj8D,EAAOG,KAAKk7D,GACzB5hF,KAAKia,OAASsM,EAAOo3D,YAAY,GACjC39E,KAAKyiF,UAAYl8D,EAAOo3D,YAAY,GACpC39E,KAAK0iF,SAAWb,EAChB7hF,KAAK4iF,MAAQ7M,EAVAt1E,EAAQ,WAavBwsB,CAAS00D,EAAcz1B,GAEvBy1B,EAAarzD,UAAUy0D,QAAU,SAAU38D,GACzC,OAAOpmB,KAAK4iF,MAAMK,QAAQjjF,KAAMomB,EAAOpmB,KAAK0iF,WAG9Cf,EAAarzD,UAAU40D,OAAS,WAC9BljF,KAAK8hF,QAAQP,SAGf7hF,EAAOD,QAAUkiF,qGC1BjB,IAAIkH,EAAMpoF,EAAQ,kBACd+gF,EAAM/gF,EAAQ,0BACdqoF,EAAWroF,EAAQ,wBACnBsoF,EAAWtoF,EAAQ,wBACnB8jF,EAAO9jF,EAAQ,kBAsCnB,SAASojF,EAAgBe,EAAOr2E,EAAKqzE,GAEnC,GADAgD,EAAQA,EAAMzjE,cACV2nE,EAASlE,GAAQ,OAAOpD,EAAIqC,eAAee,EAAOr2E,EAAKqzE,GAC3D,GAAImH,EAASnE,GAAQ,OAAO,IAAIiE,EAAI,CAAEt6E,IAAKA,EAAKqzE,GAAIA,EAAI7L,KAAM6O,IAE9D,MAAM,IAAIl1B,UAAU,sBAGtB,SAASu0B,EAAkBW,EAAOr2E,EAAKqzE,GAErC,GADAgD,EAAQA,EAAMzjE,cACV2nE,EAASlE,GAAQ,OAAOpD,EAAIyC,iBAAiBW,EAAOr2E,EAAKqzE,GAC7D,GAAImH,EAASnE,GAAQ,OAAO,IAAIiE,EAAI,CAAEt6E,IAAKA,EAAKqzE,GAAIA,EAAI7L,KAAM6O,EAAO/C,SAAS,IAE9E,MAAM,IAAInyB,UAAU,sBAOtBjwD,EAAQkkF,aAAelkF,EAAQmkF,OAxD/B,SAAuBgB,EAAO//D,GAG5B,IAAImkE,EAAQC,EACZ,GAHArE,EAAQA,EAAMzjE,cAGV2nE,EAASlE,GACXoE,EAASF,EAASlE,GAAOr2E,IACzB06E,EAAQH,EAASlE,GAAOhD,OACnB,CAAA,IAAImH,EAASnE,GAIlB,MAAM,IAAIl1B,UAAU,sBAHpBs5B,EAA+B,EAAtBD,EAASnE,GAAOr2E,IACzB06E,EAAQF,EAASnE,GAAOhD,GAK1B,IAAIrsE,EAAOgvE,EAAK1/D,GAAU,EAAOmkE,EAAQC,GACzC,OAAOpF,EAAee,EAAOrvE,EAAKhH,IAAKgH,EAAKqsE,KA0C9CniF,EAAQokF,eAAiBpkF,EAAQqkF,SAAWD,EAC5CpkF,EAAQskF,eAAiBtkF,EAAQukF,SAxCjC,SAAyBY,EAAO//D,GAG9B,IAAImkE,EAAQC,EACZ,GAHArE,EAAQA,EAAMzjE,cAGV2nE,EAASlE,GACXoE,EAASF,EAASlE,GAAOr2E,IACzB06E,EAAQH,EAASlE,GAAOhD,OACnB,CAAA,IAAImH,EAASnE,GAIlB,MAAM,IAAIl1B,UAAU,sBAHpBs5B,EAA+B,EAAtBD,EAASnE,GAAOr2E,IACzB06E,EAAQF,EAASnE,GAAOhD,GAK1B,IAAIrsE,EAAOgvE,EAAK1/D,GAAU,EAAOmkE,EAAQC,GACzC,OAAOhF,EAAiBW,EAAOrvE,EAAKhH,IAAKgH,EAAKqsE,KA0BhDniF,EAAQwkF,iBAAmBxkF,EAAQykF,WAAaD,EAChDxkF,EAAQ0kF,YAAc1kF,EAAQ2kF,WAR9B,WACE,OAAO9uE,OAAOC,KAAKwzE,GAAU3/D,OAAOo4D,EAAI4C,gLC3D1C,IAAI8E,EAAazoF,EAAQ,eACrB0oF,EAAM1oF,EAAQ,UACdwsB,EAAWxsB,EAAQ,YACnB8lB,EAAS9lB,EAAQ,eAAe8lB,OAEhCm9D,EAAQ,CACV0F,eAAgBD,EAAIzC,IAAI2C,YAAYF,EAAIG,KACxCC,WAAYJ,EAAIG,IAChBE,cAAeL,EAAIzC,IAAI2C,YAAYF,EAAIG,KACvCG,UAAWN,EAAIG,IACfI,UAAWP,EAAIzC,IAAI2C,YAAYF,EAAIN,KACnCc,UAAWR,EAAIN,KAMjB,SAASA,EAAK/7B,GACZo8B,EAAWnoF,KAAKf,MAChB,IAEI0J,EAFAkgF,EAAW98B,EAAKipB,KAAK50D,cACrB40D,EAAO2N,EAAMkG,GAGflgF,EADEojD,EAAK+0B,QACA,UAEA,UAET,IAAItzE,EAAMu+C,EAAKv+C,IACVgY,EAAO42C,SAAS5uD,KACnBA,EAAMgY,EAAOG,KAAKnY,IAEH,YAAbq7E,GAAuC,gBAAbA,IAC5Br7E,EAAMgY,EAAO6C,OAAO,CAAC7a,EAAKA,EAAI0O,MAAM,EAAG,MAEzC,IAAI2kE,EAAK90B,EAAK80B,GACTr7D,EAAO42C,SAASykB,KACnBA,EAAKr7D,EAAOG,KAAKk7D,IAEnB5hF,KAAK6pF,KAAO9T,EAAKttE,OAAO,CACtB8F,IAAKA,EACLqzE,GAAIA,EACJl4E,KAAMA,IA5BVg6E,EAAMyF,IAAMzF,EAAM,WAClBA,EAAMoG,KAAOpG,EAAM,gBACnBhkF,EAAOD,QAAUopF,EACjB57D,EAAS47D,EAAKK,GA4BdL,EAAIv6D,UAAUy0D,QAAU,SAAUv+E,GAChC,OAAO+hB,EAAOG,KAAK1mB,KAAK6pF,KAAK1gE,OAAO3kB,KAEtCqkF,EAAIv6D,UAAU40D,OAAS,WACrB,OAAO38D,EAAOG,KAAK1mB,KAAK6pF,KAAK1G,8GChD/B1jF,EAAQ,WAAa,CACnB8O,IAAK,EACLqzE,GAAI,GAENniF,EAAQ,WAAaA,EAAQ0pF,IAAM,CACjC56E,IAAK,EACLqzE,GAAI,GAENniF,EAAQ,gBAAkBA,EAAQqqF,KAAO,CACvCv7E,IAAK,GACLqzE,GAAI,GAENniF,EAAQ,YAAc,CACpB8O,IAAK,GACLqzE,GAAI,GAENniF,EAAQ,eAAiB,CACvB8O,IAAK,GACLqzE,GAAI,GAENniF,EAAQ,WAAa,CACnB8O,IAAK,GACLqzE,GAAI,mECtBN,IAAI9a,EAAKrmE,EAAQ,SACb0kB,EAAc1kB,EAAQ,eAQ1B,SAASspF,EAAMC,GACb,IACI9pF,EADAy/B,EAAMqqD,EAAKC,QAAQ3sB,aAEvB,GACEp9D,EAAI,IAAI4mE,EAAG3hD,EAAYwa,UAChBz/B,EAAEwnE,IAAIsiB,EAAKC,UAAY,IAAM/pF,EAAEq2E,KAAKyT,EAAKE,UAAYhqF,EAAEq2E,KAAKyT,EAAKG,SAC1E,OAAOjqF,EAGT,SAASkqF,EAAK/nB,EAAK2nB,GACjB,IAAIK,EAhBN,SAAgBL,GACd,IAAI9pF,EAAI6pF,EAAKC,GAEb,MAAO,CAAEM,QADKpqF,EAAE04E,MAAM9R,EAAGsV,KAAK4N,EAAKC,UAAU9P,OAAO,IAAIrT,EAAGkjB,EAAKO,iBAAiBvR,UACtDwR,UAAWtqF,EAAE43E,KAAKkS,EAAKC,UAarCQ,CAAMT,GACfrqD,EAAMqqD,EAAKC,QAAQ3sB,aACnBotB,EAAU,IAAI5jB,EAAGzE,GAAKoF,IAAI4iB,EAAOC,SAAS/T,KAAKyT,EAAKC,SACpDU,EAAKD,EAAQ9R,MAAM9R,EAAGsV,KAAK4N,EAAKE,SAChCU,EAAKF,EAAQ9R,MAAM9R,EAAGsV,KAAK4N,EAAKG,SAChCU,EAAOb,EAAKc,YACZhqF,EAAIkpF,EAAKE,OACT/f,EAAI6f,EAAKG,OACT7I,EAAKqJ,EAAGxQ,OAAO6P,EAAKe,WAAW/R,UAC/BgS,EAAKJ,EAAGzQ,OAAO6P,EAAKiB,WAAWjS,UAC/Bz9B,EAAI+lC,EAAG9U,KAAKwe,GAAIva,KAAKoa,GAAMtU,KAAKz1E,GAAG2vE,KAAKtG,GAC5C,OAAO6gB,EAAGze,KAAKhxB,GAAGk1B,KAAK4Z,EAAOG,WAAWjU,KAAKyT,EAAKC,SAASlgB,YAAYxjD,EAAQ,KAAMoZ,GAExFyqD,EAAIL,KAAOA,EAEXrqF,EAAOD,QAAU2qF,4HClCjB1qF,EAAOD,QAAUgB,EAAQ,sFCAzBf,EAAAD,QAAA,CACAyrF,wBAAA,CACA1kB,KAAA,MACAx9C,KAAA,SACApR,GAAA,0CAEAuzE,aAAA,CACA3kB,KAAA,YACAx9C,KAAA,SACApR,GAAA,0CAEAwzE,wBAAA,CACA5kB,KAAA,MACAx9C,KAAA,SACApR,GAAA,0CAEAyzE,aAAA,CACA7kB,KAAA,YACAx9C,KAAA,SACApR,GAAA,0CAEA0zE,wBAAA,CACA9kB,KAAA,MACAx9C,KAAA,SACApR,GAAA,0CAEA2zE,aAAA,CACA/kB,KAAA,YACAx9C,KAAA,SACApR,GAAA,0CAEA4zE,wBAAA,CACAhlB,KAAA,MACAx9C,KAAA,SACApR,GAAA,0CAEA6zE,aAAA,CACAjlB,KAAA,YACAx9C,KAAA,SACApR,GAAA,0CAEA8zE,WAAA,CACAllB,KAAA,MACAx9C,KAAA,OACApR,GAAA,kCAEA+zE,kBAAA,CACAnlB,KAAA,QACAx9C,KAAA,OACApR,GAAA,IAEAg0E,OAAA,CACAplB,KAAA,QACAx9C,KAAA,SACApR,GAAA,IAEAi0E,OAAA,CACArlB,KAAA,QACAx9C,KAAA,SACApR,GAAA,IAEAk0E,OAAA,CACAtlB,KAAA,QACAx9C,KAAA,SACApR,GAAA,IAEAm0E,OAAA,CACAvlB,KAAA,QACAx9C,KAAA,SACApR,GAAA,IAEAo0E,UAAA,CACAxlB,KAAA,MACAx9C,KAAA,OACApR,GAAA,IAEAq0E,WAAA,CACAzlB,KAAA,MACAx9C,KAAA,OACApR,GAAA,IAEAs0E,IAAA,CACA1lB,KAAA,MACAx9C,KAAA,OACApR,GAAA,IAEAu0E,kBAAA,CACA3lB,KAAA,MACAx9C,KAAA,SACApR,GAAA,IAEAw0E,aAAA,CACA5lB,KAAA,MACAx9C,KAAA,SACApR,GAAA,IAEAy0E,kBAAA,CACA7lB,KAAA,MACAx9C,KAAA,SACApR,GAAA,IAEA00E,aAAA,CACA9lB,KAAA,MACAx9C,KAAA,SACApR,GAAA,IAEA20E,kBAAA,CACA/lB,KAAA,MACAx9C,KAAA,SACApR,GAAA,IAEA40E,aAAA,CACAhmB,KAAA,MACAx9C,KAAA,SACApR,GAAA,IAEA60E,kBAAA,CACAjmB,KAAA,MACAx9C,KAAA,SACApR,GAAA,IAEA80E,aAAA,CACAlmB,KAAA,MACAx9C,KAAA,SACApR,GAAA,IAEA+0E,gBAAA,CACAnmB,KAAA,MACAx9C,KAAA,SACApR,GAAA,IAEAg1E,iBAAA,CACApmB,KAAA,MACAx9C,KAAA,SACApR,GAAA,kCAEAi1E,gBAAA,CACArmB,KAAA,MACAx9C,KAAA,SACApR,GAAA,kCAEAk1E,qBAAA,CACAtmB,KAAA,MACAx9C,KAAA,MACApR,GAAA,wCAEAm1E,UAAA,CACAvmB,KAAA,MACAx9C,KAAA,MACApR,GAAA,mECrJAlY,EAAAD,QAAA,CACAutF,eAAA,YACAC,eAAA,OACAC,sBAAA,OACAC,sBAAA,OACAC,eAAA,OACAC,eAAA,+CCNA,IAAI9mE,EAAS9lB,EAAQ,eAAe8lB,OAChC0C,EAAaxoB,EAAQ,eACrBiC,EAASjC,EAAQ,mBACjBwsB,EAAWxsB,EAAQ,YACnB+lE,EAAO/lE,EAAQ,UACf6sF,EAAS7sF,EAAQ,YAEjB8sF,EAAa9sF,EAAQ,qBAMzB,SAAS+sF,EAAMzkE,GACbrmB,EAAO8uD,SAASzwD,KAAKf,MAErB,IAAIwE,EAAO+oF,EAAWxkE,GACtB,IAAKvkB,EAAM,MAAM,IAAI5D,MAAM,0BAE3BZ,KAAKytF,UAAYjpF,EAAKwkB,KACtBhpB,KAAK4nB,MAAQqB,EAAWzkB,EAAKwkB,MAC7BhpB,KAAK0tF,KAAOlpF,EAAKoT,GACjB5X,KAAK2tF,UAAYnpF,EAAKgiE,KAwBxB,SAASonB,EAAQ7kE,GACfrmB,EAAO8uD,SAASzwD,KAAKf,MAErB,IAAIwE,EAAO+oF,EAAWxkE,GACtB,IAAKvkB,EAAM,MAAM,IAAI5D,MAAM,0BAE3BZ,KAAK4nB,MAAQqB,EAAWzkB,EAAKwkB,MAC7BhpB,KAAK0tF,KAAOlpF,EAAKoT,GACjB5X,KAAK2tF,UAAYnpF,EAAKgiE,KAwBxB,SAASqnB,EAAY9kE,GACnB,OAAO,IAAIykE,EAAKzkE,GAGlB,SAAS+kE,EAAc/kE,GACrB,OAAO,IAAI6kE,EAAO7kE,GA3EpBzT,OAAOC,KAAKg4E,GAAYpiF,SAAQ,SAAUoD,GACxCg/E,EAAWh/E,GAAKqJ,GAAK2O,EAAOG,KAAK6mE,EAAWh/E,GAAKqJ,GAAI,OACrD21E,EAAWh/E,EAAI4S,eAAiBosE,EAAWh/E,MAc7C0e,EAASugE,EAAM9qF,EAAO8uD,UAEtBg8B,EAAKl/D,UAAUy/D,OAAS,SAAiBvpF,EAAMqD,EAAG0rD,GAChDvzD,KAAK4nB,MAAMuB,OAAO3kB,GAClB+uD,KAGFi6B,EAAKl/D,UAAUnF,OAAS,SAAiB3kB,EAAMitD,GAI7C,MAHoB,iBAATjtD,IAAmBA,EAAO+hB,EAAOG,KAAKliB,EAAMitD,IAEvDzxD,KAAK4nB,MAAMuB,OAAO3kB,GACXxE,MAGTwtF,EAAKl/D,UAAUk4C,KAAO,SAAqBj4D,EAAKkjD,GAC9CzxD,KAAKiG,MACL,IAAI+iB,EAAOhpB,KAAK4nB,MAAMyB,SAClB2kE,EAAMxnB,EAAKx9C,EAAMza,EAAKvO,KAAKytF,UAAWztF,KAAK2tF,UAAW3tF,KAAK0tF,MAE/D,OAAOj8B,EAAMu8B,EAAIxjF,SAASinD,GAAOu8B,GAanC/gE,EAAS2gE,EAAQlrF,EAAO8uD,UAExBo8B,EAAOt/D,UAAUy/D,OAAS,SAAiBvpF,EAAMqD,EAAG0rD,GAClDvzD,KAAK4nB,MAAMuB,OAAO3kB,GAClB+uD,KAGFq6B,EAAOt/D,UAAUnF,OAAS,SAAiB3kB,EAAMitD,GAI/C,MAHoB,iBAATjtD,IAAmBA,EAAO+hB,EAAOG,KAAKliB,EAAMitD,IAEvDzxD,KAAK4nB,MAAMuB,OAAO3kB,GACXxE,MAGT4tF,EAAOt/D,UAAUg/D,OAAS,SAAuB/+E,EAAKy/E,EAAKv8B,GACtC,iBAARu8B,IAAkBA,EAAMznE,EAAOG,KAAKsnE,EAAKv8B,IAEpDzxD,KAAKiG,MACL,IAAI+iB,EAAOhpB,KAAK4nB,MAAMyB,SACtB,OAAOikE,EAAOU,EAAKhlE,EAAMza,EAAKvO,KAAK2tF,UAAW3tF,KAAK0tF,OAWrDhuF,EAAOD,QAAU,CACf+tF,KAAMK,EACND,OAAQE,EACRD,WAAYA,EACZC,aAAcA,oKCzFhB,IAAIvnE,EAAS9lB,EAAQ,eAAe8lB,OAChC0nE,EAAaxtF,EAAQ,eACrB2pF,EAAM3pF,EAAQ,kBACdytF,EAAKztF,EAAQ,YAAY0tF,GACzBrnB,EAAKrmE,EAAQ,SACb2tF,EAAY3tF,EAAQ,cACpB4tF,EAAS5tF,EAAQ,iBAyErB,SAAS6tF,EAAQr8E,EAAGk4D,EAAGnhD,EAAMulE,GAE3B,IADAt8E,EAAIsU,EAAOG,KAAKzU,EAAEs0D,YACZvlE,OAASmpE,EAAE7M,aAAc,CAC7B,IAAIuL,EAAQtiD,EAAOoD,MAAMwgD,EAAE7M,aAAerrD,EAAEjR,QAC5CiR,EAAIsU,EAAO6C,OAAO,CAACy/C,EAAO52D,IAE5B,IAAIu8E,EAAOxlE,EAAKhoB,OACZytF,EAkBN,SAAsB/Z,EAAMvK,GAE1BuK,GADAA,EAAOga,EAASha,EAAMvK,IACVxc,IAAIwc,GAChB,IAAIlM,EAAM13C,EAAOG,KAAKguD,EAAKnO,WAC3B,GAAItI,EAAIj9D,OAASmpE,EAAE7M,aAAc,CAC/B,IAAIuL,EAAQtiD,EAAOoD,MAAMwgD,EAAE7M,aAAeW,EAAIj9D,QAC9Ci9D,EAAM13C,EAAO6C,OAAO,CAACy/C,EAAO5K,IAE9B,OAAOA,EA1BK0wB,CAAY3lE,EAAMmhD,GAC1B9iE,EAAIkf,EAAOoD,MAAM6kE,GACrBnnF,EAAE8B,KAAK,GACP,IAAIonD,EAAIhqC,EAAOoD,MAAM6kE,GAKrB,OAJAj+B,EAAI09B,EAAWM,EAAMh+B,GAAGpnC,OAAO9hB,GAAG8hB,OAAO5C,EAAOG,KAAK,CAAC,KAAKyC,OAAOlX,GAAGkX,OAAOslE,GAAOplE,SACnFhiB,EAAI4mF,EAAWM,EAAMh+B,GAAGpnC,OAAO9hB,GAAGgiB,SAG3B,CAAEknC,EAFTA,EAAI09B,EAAWM,EAAMh+B,GAAGpnC,OAAO9hB,GAAG8hB,OAAO5C,EAAOG,KAAK,CAAC,KAAKyC,OAAOlX,GAAGkX,OAAOslE,GAAOplE,SAEpEhiB,EADfA,EAAI4mF,EAAWM,EAAMh+B,GAAGpnC,OAAO9hB,GAAGgiB,UAIpC,SAASqlE,EAAUE,EAAOzkB,GACxB,IAAIuK,EAAO,IAAI5N,EAAG8nB,GACd5oF,GAAS4oF,EAAM5tF,QAAU,GAAKmpE,EAAEM,YAEpC,OADIzkE,EAAQ,GAAG0uE,EAAKQ,MAAMlvE,GACnB0uE,EAcT,SAASma,EAAS1kB,EAAG2kB,EAAIP,GACvB,IAAIluF,EACAkwD,EAEJ,EAAG,CAGD,IAFAlwD,EAAIkmB,EAAOoD,MAAM,GAEC,EAAXtpB,EAAEW,OAAampE,EAAEM,aACtBqkB,EAAGznF,EAAI4mF,EAAWM,EAAMO,EAAGv+B,GAAGpnC,OAAO2lE,EAAGznF,GAAGgiB,SAC3ChpB,EAAIkmB,EAAO6C,OAAO,CAAC/oB,EAAGyuF,EAAGznF,IAG3BkpD,EAAIm+B,EAASruF,EAAG8pE,GAChB2kB,EAAGv+B,EAAI09B,EAAWM,EAAMO,EAAGv+B,GAAGpnC,OAAO2lE,EAAGznF,GAAG8hB,OAAO5C,EAAOG,KAAK,CAAC,KAAK2C,SACpEylE,EAAGznF,EAAI4mF,EAAWM,EAAMO,EAAGv+B,GAAGpnC,OAAO2lE,EAAGznF,GAAGgiB,gBACtB,IAAdknC,EAAEmX,IAAIyC,IAEf,OAAO5Z,EAGT,SAASw+B,EAAO9X,EAAG1mB,EAAGzvD,EAAGqpE,GACvB,OAAO8M,EAAE2B,MAAM9R,EAAGsV,KAAKt7E,IAAIq5E,OAAO5pB,GAAGyoB,UAAUrrB,IAAIwc,GAGrDzqE,EAAOD,QAnIP,SAAeupB,EAAMza,EAAKygF,EAAUC,EAAUrzD,GAC5C,IAAIouD,EAAOoE,EAAU7/E,GACrB,GAAIy7E,EAAKkF,MAAO,CAEd,GAAiB,UAAbD,GAAqC,cAAbA,EAA0B,MAAM,IAAIruF,MAAM,0BACtE,OAmBJ,SAAiBooB,EAAMghE,GACrB,IAAImF,EAAUd,EAAOrE,EAAKkF,MAAMphF,KAAK,MACrC,IAAKqhF,EAAS,MAAM,IAAIvuF,MAAM,iBAAmBopF,EAAKkF,MAAMphF,KAAK,MAEjE,IAEImwD,EAFQ,IAAIiwB,EAAGiB,GACHC,eAAepF,EAAKqF,YACtB7oB,KAAKx9C,GAEnB,OAAOzC,EAAOG,KAAKu3C,EAAIqxB,SA3BdC,CAAOvmE,EAAMghE,GACf,GAAkB,QAAdA,EAAKtgF,KAAgB,CAC9B,GAAiB,QAAbulF,EAAoB,MAAM,IAAIruF,MAAM,0BACxC,OA2BJ,SAAkBooB,EAAMghE,EAAMuE,GAC5B,IAKIh+B,EALAt+C,EAAI+3E,EAAKwF,OAAOC,SAChB3uF,EAAIkpF,EAAKwF,OAAO1uF,EAChBqpE,EAAI6f,EAAKwF,OAAOrlB,EAChB8M,EAAI+S,EAAKwF,OAAOvY,EAChB/2E,EAAI,IAAI4mE,EAAG,GAEX4oB,EAAIhB,EAAS1lE,EAAMmhD,GAAGxc,IAAIwc,GAC1Bz6D,GAAI,EACJo/E,EAAKR,EAAOr8E,EAAGk4D,EAAGnhD,EAAMulE,GAC5B,MAAa,IAAN7+E,GACL6gD,EAAIs+B,EAAQ1kB,EAAG2kB,EAAIP,GACnBruF,EAAI6uF,EAAM9X,EAAG1mB,EAAGzvD,EAAGqpE,GAED,KADlBz6D,EAAI6gD,EAAEunB,KAAK3N,GAAGsG,KAAKif,EAAEhkF,IAAIuG,EAAEw1D,IAAIvnE,KAAKytD,IAAIwc,IAClC0N,KAAK,KACTnoE,GAAI,EACJxP,EAAI,IAAI4mE,EAAG,IAGf,OAGF,SAAgB5mE,EAAGwP,GACjBxP,EAAIA,EAAEqmE,UACN72D,EAAIA,EAAE62D,UAGK,IAAPrmE,EAAE,KAAWA,EAAI,CAAC,GAAGkpB,OAAOlpB,IACrB,IAAPwP,EAAE,KAAWA,EAAI,CAAC,GAAG0Z,OAAO1Z,IAEhC,IACIiiD,EAAM,CAAC,GADCzxD,EAAEc,OAAS0O,EAAE1O,OAAS,EACV,EAAMd,EAAEc,QAEhC,OADA2wD,EAAMA,EAAIvoC,OAAOlpB,EAAG,CAAC,EAAMwP,EAAE1O,QAAS0O,GAC/B6W,EAAOG,KAAKirC,GAdZ29B,CAAMpvF,EAAGwP,GA9CPigF,CAAQ3mE,EAAMghE,EAAMgF,GAE3B,GAAiB,QAAbC,GAAmC,cAAbA,EAA0B,MAAM,IAAIruF,MAAM,0BAEtEooB,EAAOzC,EAAO6C,OAAO,CAACwS,EAAK5S,IAG3B,IAFA,IAAI2W,EAAMqqD,EAAKC,QAAQ3sB,aACnB2oB,EAAM,CAAC,EAAG,GACPj9D,EAAKhoB,OAASilF,EAAIjlF,OAAS,EAAI2+B,GAAKsmD,EAAI51E,KAAK,KACpD41E,EAAI51E,KAAK,GAET,IADA,IAAI9P,GAAK,IACAA,EAAIyoB,EAAKhoB,QAAQilF,EAAI51E,KAAK2Y,EAAKzoB,IAGxC,OADU6pF,EAAInE,EAAK+D,IAgHrBtqF,EAAOD,QAAQ6uF,OAASA,EACxB5uF,EAAOD,QAAQovF,QAAUA,+JC7IzB,IAAItoE,EAAS9lB,EAAQ,eAAe8lB,OAChCugD,EAAKrmE,EAAQ,SACbytF,EAAKztF,EAAQ,YAAY0tF,GACzBC,EAAY3tF,EAAQ,cACpB4tF,EAAS5tF,EAAQ,iBAyErB,SAASmvF,EAAY95E,EAAGq0D,GACtB,GAAIr0D,EAAE+hE,KAAK,IAAM,EAAG,MAAM,IAAIj3E,MAAM,eACpC,GAAIkV,EAAE4xD,IAAIyC,IAAMA,EAAG,MAAM,IAAIvpE,MAAM,eAGrClB,EAAOD,QA5EP,SAAiBuuF,EAAKhlE,EAAMza,EAAK0gF,EAAUrzD,GACzC,IAAIi0D,EAAMzB,EAAU7/E,GACpB,GAAiB,OAAbshF,EAAInmF,KAAe,CAErB,GAAiB,UAAbulF,GAAqC,cAAbA,EAA0B,MAAM,IAAIruF,MAAM,yBACtE,OAmCJ,SAAmBotF,EAAKhlE,EAAM6mE,GAC5B,IAAIV,EAAUd,EAAOwB,EAAIrrF,KAAKukB,UAAUmmE,MAAMphF,KAAK,MACnD,IAAKqhF,EAAS,MAAM,IAAIvuF,MAAM,iBAAmBivF,EAAIrrF,KAAKukB,UAAUmmE,MAAMphF,KAAK,MAE/E,IAAIohF,EAAQ,IAAIhB,EAAGiB,GACfW,EAASD,EAAIrrF,KAAKurF,kBAAkBvrF,KAExC,OAAO0qF,EAAM5B,OAAOtkE,EAAMglE,EAAK8B,GA1CtBE,CAAShC,EAAKhlE,EAAM6mE,GACtB,GAAiB,QAAbA,EAAInmF,KAAgB,CAC7B,GAAiB,QAAbulF,EAAoB,MAAM,IAAIruF,MAAM,yBACxC,OA0CJ,SAAoBotF,EAAKhlE,EAAM6mE,GAC7B,IAAI/uF,EAAI+uF,EAAIrrF,KAAK1D,EACbqpE,EAAI0lB,EAAIrrF,KAAK2lE,EACb8M,EAAI4Y,EAAIrrF,KAAKyyE,EACb/kE,EAAI29E,EAAIrrF,KAAKyrF,QACbC,EAAW9B,EAAU+B,UAAUj7E,OAAO84E,EAAK,OAC3Ct+E,EAAIwgF,EAASxgF,EACbxP,EAAIgwF,EAAShwF,EACjB0vF,EAAWlgF,EAAGy6D,GACdylB,EAAW1vF,EAAGiqE,GACd,IAAIimB,EAAQtpB,EAAGsV,KAAKt7E,GAChBknE,EAAIt4D,EAAEooE,KAAK3N,GAOf,OAAoB,IANZ8M,EAAE2B,MAAMwX,GACbjW,OAAO,IAAIrT,EAAG99C,GAAMy+C,IAAIO,GAAGra,IAAIwc,IAC/B6O,UACAvR,IAAIv1D,EAAE0mE,MAAMwX,GAAOjW,OAAOj6E,EAAEunE,IAAIO,GAAGra,IAAIwc,IAAI6O,WAC3CrrB,IAAI7sD,GACJ6sD,IAAIwc,GACEzC,IAAIxnE,GA5DJmwF,CAAUrC,EAAKhlE,EAAM6mE,GAE5B,GAAiB,QAAbZ,GAAmC,cAAbA,EAA0B,MAAM,IAAIruF,MAAM,yBAEtEooB,EAAOzC,EAAO6C,OAAO,CAACwS,EAAK5S,IAI3B,IAHA,IAAI2W,EAAMkwD,EAAI5F,QAAQ3sB,aAClB2oB,EAAM,CAAC,GACPqK,EAAS,EACNtnE,EAAKhoB,OAASilF,EAAIjlF,OAAS,EAAI2+B,GACpCsmD,EAAI51E,KAAK,KACTigF,IAEFrK,EAAI51E,KAAK,GAET,IADA,IAAI9P,GAAK,IACAA,EAAIyoB,EAAKhoB,QAChBilF,EAAI51E,KAAK2Y,EAAKzoB,IAEhB0lF,EAAM1/D,EAAOG,KAAKu/D,GAClB,IAAI9e,EAAML,EAAGsV,KAAKyT,EAAI5F,SAGtB+D,GAFAA,EAAM,IAAIlnB,EAAGknB,GAAKpV,MAAMzR,IAEdgT,OAAO,IAAIrT,EAAG+oB,EAAItF,iBAC5ByD,EAAMznE,EAAOG,KAAKsnE,EAAIhV,UAAUzS,WAChC,IAAItI,EAAMqyB,EAAS,EAAI,EAAI,EAK3B,IAJA3wD,EAAMz4B,KAAKC,IAAI6mF,EAAIhtF,OAAQilF,EAAIjlF,QAC3BgtF,EAAIhtF,SAAWilF,EAAIjlF,SAAQi9D,EAAM,GAErC19D,GAAK,IACIA,EAAIo/B,GAAKs+B,GAAO+vB,EAAIztF,GAAK0lF,EAAI1lF,GACtC,OAAe,IAAR09D,oJC3CT,IAAIt3C,EAASlmB,EAAQ,UACjB8lB,EAASI,EAAOJ,OAGpB,SAASgqE,EAAW3tE,EAAK+F,GACvB,IAAK,IAAIpa,KAAOqU,EACd+F,EAAIpa,GAAOqU,EAAIrU,GAWnB,SAASiiF,EAAYlxB,EAAKmxB,EAAkBzvF,GAC1C,OAAOulB,EAAO+4C,EAAKmxB,EAAkBzvF,GATnCulB,EAAOG,MAAQH,EAAOoD,OAASpD,EAAOo3D,aAAep3D,EAAOmqE,gBAC9DhxF,EAAOD,QAAUknB,GAGjB4pE,EAAU5pE,EAAQlnB,GAClBA,EAAQ8mB,OAASiqE,GAQnBD,EAAUhqE,EAAQiqE,GAElBA,EAAW9pE,KAAO,SAAU44C,EAAKmxB,EAAkBzvF,GACjD,GAAmB,iBAARs+D,EACT,MAAM,IAAI5P,UAAU,iCAEtB,OAAOnpC,EAAO+4C,EAAKmxB,EAAkBzvF,IAGvCwvF,EAAW7mE,MAAQ,SAAUE,EAAM1gB,EAAMhD,GACvC,GAAoB,iBAAT0jB,EACT,MAAM,IAAI6lC,UAAU,6BAEtB,IAAInjC,EAAMhG,EAAOsD,GAUjB,YATa1lB,IAATgF,EACsB,iBAAbhD,EACTomB,EAAIpjB,KAAKA,EAAMhD,GAEfomB,EAAIpjB,KAAKA,GAGXojB,EAAIpjB,KAAK,GAEJojB,GAGTikE,EAAW7S,YAAc,SAAU9zD,GACjC,GAAoB,iBAATA,EACT,MAAM,IAAI6lC,UAAU,6BAEtB,OAAOnpC,EAAOsD,IAGhB2mE,EAAWE,gBAAkB,SAAU7mE,GACrC,GAAoB,iBAATA,EACT,MAAM,IAAI6lC,UAAU,6BAEtB,OAAO/oC,EAAOgqE,WAAW9mE,wCCvC3B,aAIA,IAAItD,EAAS9lB,EAAQ,eAAe8lB,OAGhCqqE,EAAarqE,EAAOqqE,YAAc,SAAUzqF,GAE9C,QADAA,EAAW,GAAKA,IACIA,EAASgb,eAC3B,IAAK,MAAM,IAAK,OAAO,IAAK,QAAQ,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,OAAO,IAAK,QAAQ,IAAK,UAAU,IAAK,WAAW,IAAK,MACxI,OAAO,EACT,QACE,OAAO,IA4Cb,SAASuxC,EAAcvsD,GAErB,IAAI0qF,EACJ,OAFA7wF,KAAKmG,SAXP,SAA2BsrD,GACzB,IAAIq/B,EA/BN,SAA4Br/B,GAC1B,IAAKA,EAAK,MAAO,OAEjB,IADA,IAAIs/B,IAEF,OAAQt/B,GACN,IAAK,OACL,IAAK,QACH,MAAO,OACT,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,UACT,IAAK,SACL,IAAK,SACH,MAAO,SACT,IAAK,SACL,IAAK,QACL,IAAK,MACH,OAAOA,EACT,QACE,GAAIs/B,EAAS,OACbt/B,GAAO,GAAKA,GAAKtwC,cACjB4vE,GAAU,GAQLC,CAAmBv/B,GAC9B,GAAoB,iBAATq/B,IAAsBvqE,EAAOqqE,aAAeA,IAAeA,EAAWn/B,IAAO,MAAM,IAAI7wD,MAAM,qBAAuB6wD,GAC/H,OAAOq/B,GAAQr/B,EAQCw/B,CAAkB9qF,GAE1BnG,KAAKmG,UACX,IAAK,UACHnG,KAAKmF,KAAO+rF,EACZlxF,KAAKiG,IAAMkrF,EACXN,EAAK,EACL,MACF,IAAK,OACH7wF,KAAKoxF,SAAWC,EAChBR,EAAK,EACL,MACF,IAAK,SACH7wF,KAAKmF,KAAOmsF,EACZtxF,KAAKiG,IAAMsrF,EACXV,EAAK,EACL,MACF,QAGE,OAFA7wF,KAAK8F,MAAQ0rF,OACbxxF,KAAKiG,IAAMwrF,GAGfzxF,KAAK0xF,SAAW,EAChB1xF,KAAK2xF,UAAY,EACjB3xF,KAAK4xF,SAAWrrE,EAAOo3D,YAAYkT,GAoCrC,SAASgB,EAAcC,GACrB,OAAIA,GAAQ,IAAa,EAAWA,GAAQ,GAAM,EAAa,EAAWA,GAAQ,GAAM,GAAa,EAAWA,GAAQ,GAAM,GAAa,EACpIA,GAAQ,GAAM,GAAQ,GAAK,EA2DpC,SAAST,EAAa9kE,GACpB,IAAIzrB,EAAId,KAAK2xF,UAAY3xF,KAAK0xF,SAC1BxxF,EAtBN,SAA6BH,EAAMwsB,EAAKzrB,GACtC,GAAwB,MAAV,IAATyrB,EAAI,IAEP,OADAxsB,EAAK2xF,SAAW,EACT,SAET,GAAI3xF,EAAK2xF,SAAW,GAAKnlE,EAAIvrB,OAAS,EAAG,CACvC,GAAwB,MAAV,IAATurB,EAAI,IAEP,OADAxsB,EAAK2xF,SAAW,EACT,SAET,GAAI3xF,EAAK2xF,SAAW,GAAKnlE,EAAIvrB,OAAS,GACZ,MAAV,IAATurB,EAAI,IAEP,OADAxsB,EAAK2xF,SAAW,EACT,UASLK,CAAoB/xF,KAAMusB,GAClC,YAAUpoB,IAANjE,EAAwBA,EACxBF,KAAK0xF,UAAYnlE,EAAIvrB,QACvBurB,EAAI3f,KAAK5M,KAAK4xF,SAAU9wF,EAAG,EAAGd,KAAK0xF,UAC5B1xF,KAAK4xF,SAASpnF,SAASxK,KAAKmG,SAAU,EAAGnG,KAAK2xF,aAEvDplE,EAAI3f,KAAK5M,KAAK4xF,SAAU9wF,EAAG,EAAGyrB,EAAIvrB,aAClChB,KAAK0xF,UAAYnlE,EAAIvrB,SA2BvB,SAASkwF,EAAU3kE,EAAKhsB,GACtB,IAAKgsB,EAAIvrB,OAAST,GAAK,GAAM,EAAG,CAC9B,IAAIL,EAAIqsB,EAAI/hB,SAAS,UAAWjK,GAChC,GAAIL,EAAG,CACL,IAAIM,EAAIN,EAAE+nB,WAAW/nB,EAAEc,OAAS,GAChC,GAAIR,GAAK,OAAUA,GAAK,MAKtB,OAJAR,KAAK0xF,SAAW,EAChB1xF,KAAK2xF,UAAY,EACjB3xF,KAAK4xF,SAAS,GAAKrlE,EAAIA,EAAIvrB,OAAS,GACpChB,KAAK4xF,SAAS,GAAKrlE,EAAIA,EAAIvrB,OAAS,GAC7Bd,EAAE+c,MAAM,GAAI,GAGvB,OAAO/c,EAKT,OAHAF,KAAK0xF,SAAW,EAChB1xF,KAAK2xF,UAAY,EACjB3xF,KAAK4xF,SAAS,GAAKrlE,EAAIA,EAAIvrB,OAAS,GAC7BurB,EAAI/hB,SAAS,UAAWjK,EAAGgsB,EAAIvrB,OAAS,GAKjD,SAASmwF,EAAS5kE,GAChB,IAAIrsB,EAAIqsB,GAAOA,EAAIvrB,OAAShB,KAAK8F,MAAMymB,GAAO,GAC9C,GAAIvsB,KAAK0xF,SAAU,CACjB,IAAIzrF,EAAMjG,KAAK2xF,UAAY3xF,KAAK0xF,SAChC,OAAOxxF,EAAIF,KAAK4xF,SAASpnF,SAAS,UAAW,EAAGvE,GAElD,OAAO/F,EAGT,SAASoxF,EAAW/kE,EAAKhsB,GACvB,IAAIH,GAAKmsB,EAAIvrB,OAAST,GAAK,EAC3B,OAAU,IAANH,EAAgBmsB,EAAI/hB,SAAS,SAAUjK,IAC3CP,KAAK0xF,SAAW,EAAItxF,EACpBJ,KAAK2xF,UAAY,EACP,IAANvxF,EACFJ,KAAK4xF,SAAS,GAAKrlE,EAAIA,EAAIvrB,OAAS,IAEpChB,KAAK4xF,SAAS,GAAKrlE,EAAIA,EAAIvrB,OAAS,GACpChB,KAAK4xF,SAAS,GAAKrlE,EAAIA,EAAIvrB,OAAS,IAE/BurB,EAAI/hB,SAAS,SAAUjK,EAAGgsB,EAAIvrB,OAASZ,IAGhD,SAASmxF,EAAUhlE,GACjB,IAAIrsB,EAAIqsB,GAAOA,EAAIvrB,OAAShB,KAAK8F,MAAMymB,GAAO,GAC9C,OAAIvsB,KAAK0xF,SAAiBxxF,EAAIF,KAAK4xF,SAASpnF,SAAS,SAAU,EAAG,EAAIxK,KAAK0xF,UACpExxF,EAIT,SAASsxF,EAAYjlE,GACnB,OAAOA,EAAI/hB,SAASxK,KAAKmG,UAG3B,SAASsrF,EAAUllE,GACjB,OAAOA,GAAOA,EAAIvrB,OAAShB,KAAK8F,MAAMymB,GAAO,GAzN/C9sB,EAAQizD,cAAgBA,EA6BxBA,EAAcpkC,UAAUxoB,MAAQ,SAAUymB,GACxC,GAAmB,IAAfA,EAAIvrB,OAAc,MAAO,GAC7B,IAAId,EACAK,EACJ,GAAIP,KAAK0xF,SAAU,CAEjB,QAAUvtF,KADVjE,EAAIF,KAAKoxF,SAAS7kE,IACG,MAAO,GAC5BhsB,EAAIP,KAAK0xF,SACT1xF,KAAK0xF,SAAW,OAEhBnxF,EAAI,EAEN,OAAIA,EAAIgsB,EAAIvrB,OAAed,EAAIA,EAAIF,KAAKmF,KAAKonB,EAAKhsB,GAAKP,KAAKmF,KAAKonB,EAAKhsB,GAC/DL,GAAK,IAGdwyD,EAAcpkC,UAAUroB,IAwGxB,SAAiBsmB,GACf,IAAIrsB,EAAIqsB,GAAOA,EAAIvrB,OAAShB,KAAK8F,MAAMymB,GAAO,GAC9C,OAAIvsB,KAAK0xF,SAAiBxxF,EAAI,SACvBA,GAxGTwyD,EAAcpkC,UAAUnpB,KA0FxB,SAAkBonB,EAAKhsB,GACrB,IAAI8nE,EArEN,SAA6BtoE,EAAMwsB,EAAKhsB,GACtC,IAAIyZ,EAAIuS,EAAIvrB,OAAS,EACrB,GAAIgZ,EAAIzZ,EAAG,OAAO,EAClB,IAAIswF,EAAKgB,EAActlE,EAAIvS,IAC3B,GAAI62E,GAAM,EAER,OADIA,EAAK,IAAG9wF,EAAK2xF,SAAWb,EAAK,GAC1BA,EAET,KAAM72E,EAAIzZ,IAAa,IAARswF,EAAW,OAAO,EAEjC,IADAA,EAAKgB,EAActlE,EAAIvS,MACb,EAER,OADI62E,EAAK,IAAG9wF,EAAK2xF,SAAWb,EAAK,GAC1BA,EAET,KAAM72E,EAAIzZ,IAAa,IAARswF,EAAW,OAAO,EAEjC,IADAA,EAAKgB,EAActlE,EAAIvS,MACb,EAIR,OAHI62E,EAAK,IACI,IAAPA,EAAUA,EAAK,EAAO9wF,EAAK2xF,SAAWb,EAAK,GAE1CA,EAET,OAAO,EA+CKmB,CAAoBhyF,KAAMusB,EAAKhsB,GAC3C,IAAKP,KAAK0xF,SAAU,OAAOnlE,EAAI/hB,SAAS,OAAQjK,GAChDP,KAAK2xF,UAAYtpB,EACjB,IAAIpiE,EAAMsmB,EAAIvrB,QAAUqnE,EAAQroE,KAAK0xF,UAErC,OADAnlE,EAAI3f,KAAK5M,KAAK4xF,SAAU,EAAG3rF,GACpBsmB,EAAI/hB,SAAS,OAAQjK,EAAG0F,IA7FjCysD,EAAcpkC,UAAU8iE,SAAW,SAAU7kE,GAC3C,GAAIvsB,KAAK0xF,UAAYnlE,EAAIvrB,OAEvB,OADAurB,EAAI3f,KAAK5M,KAAK4xF,SAAU5xF,KAAK2xF,UAAY3xF,KAAK0xF,SAAU,EAAG1xF,KAAK0xF,UACzD1xF,KAAK4xF,SAASpnF,SAASxK,KAAKmG,SAAU,EAAGnG,KAAK2xF,WAEvDplE,EAAI3f,KAAK5M,KAAK4xF,SAAU5xF,KAAK2xF,UAAY3xF,KAAK0xF,SAAU,EAAGnlE,EAAIvrB,QAC/DhB,KAAK0xF,UAAYnlE,EAAIvrB,yFCtIvBtB,EAAOD,QAAU,SAAckB,EAAGmV,GAIhC,IAHA,IAAI9U,EAASkG,KAAKC,IAAIxG,EAAEK,OAAQ8U,EAAE9U,QAC9B2lB,EAAS,IAAIJ,EAAOvlB,GAEfT,EAAI,EAAGA,EAAIS,IAAUT,EAC5BomB,EAAOpmB,GAAKI,EAAEJ,GAAKuV,EAAEvV,GAGvB,OAAOomB;;;;;;;ACAT,aAEA,IAAIgN,EAASlzB,EAAQ,aACjBwxF,EAAUxxF,EAAQ,WAEtBhB,EAAQ8mB,OAASA,EACjB9mB,EAAQkxF,WAqTR,SAAqB3vF,IACdA,GAAUA,IACbA,EAAS,GAEX,OAAOulB,EAAOoD,OAAO3oB,IAxTvBvB,EAAQyyF,kBAAoB,GAwD5B,SAASC,EAAcnxF,GACrB,GAAIA,EAvDa,WAwDf,MAAM,IAAIoxF,WAAW,cAAgBpxF,EAAS,kCAGhD,IAAIurB,EAAM,IAAI+wD,WAAWt8E,GAEzB,OADAurB,EAAI8lE,UAAY9rE,EAAO+H,UAChB/B,EAaT,SAAShG,EAAQ+4C,EAAKmxB,EAAkBzvF,GAEtC,GAAmB,iBAARs+D,EAAkB,CAC3B,GAAgC,iBAArBmxB,EACT,MAAM,IAAI/gC,UACR,sEAGJ,OAAOiuB,EAAYre,GAErB,OAAO54C,EAAK44C,EAAKmxB,EAAkBzvF,GAgBrC,SAAS0lB,EAAMxhB,EAAOurF,EAAkBzvF,GACtC,GAAqB,iBAAVkE,EACT,OAiHJ,SAAqB8wD,EAAQ7vD,GACH,iBAAbA,GAAsC,KAAbA,IAClCA,EAAW,QAGb,IAAKogB,EAAOqqE,WAAWzqF,GACrB,MAAM,IAAIupD,UAAU,qBAAuBvpD,GAG7C,IAAInF,EAAwC,EAA/Bs8D,EAAWtH,EAAQ7vD,GAC5BomB,EAAM4lE,EAAanxF,GAEnBsxF,EAAS/lE,EAAIzmB,MAAMkwD,EAAQ7vD,GAE3BmsF,IAAWtxF,IAIburB,EAAMA,EAAItP,MAAM,EAAGq1E,IAGrB,OAAO/lE,EAtIEgmE,CAAWrtF,EAAOurF,GAG3B,GAAIhjE,YAAY+kE,OAAOttF,GACrB,OAAOutF,EAAcvtF,GAGvB,GAAa,MAATA,EACF,MAAMwqD,UACJ,yHACiDxqD,GAIrD,GAAIwtF,EAAWxtF,EAAOuoB,cACjBvoB,GAASwtF,EAAWxtF,EAAMyhB,OAAQ8G,aACrC,OAkIJ,SAA0BklE,EAAOC,EAAY5xF,GAC3C,GAAI4xF,EAAa,GAAKD,EAAMr1B,WAAas1B,EACvC,MAAM,IAAIR,WAAW,wCAGvB,GAAIO,EAAMr1B,WAAas1B,GAAc5xF,GAAU,GAC7C,MAAM,IAAIoxF,WAAW,wCAGvB,IAAI7lE,EAEFA,OADiBpoB,IAAfyuF,QAAuCzuF,IAAXnD,EACxB,IAAIs8E,WAAWqV,QACDxuF,IAAXnD,EACH,IAAIs8E,WAAWqV,EAAOC,GAEtB,IAAItV,WAAWqV,EAAOC,EAAY5xF,GAK1C,OADAurB,EAAI8lE,UAAY9rE,EAAO+H,UAChB/B,EAtJEsmE,CAAgB3tF,EAAOurF,EAAkBzvF,GAGlD,GAAqB,iBAAVkE,EACT,MAAM,IAAIwqD,UACR,yEAIJ,IAAIzrD,EAAUiB,EAAMjB,SAAWiB,EAAMjB,UACrC,GAAe,MAAXA,GAAmBA,IAAYiB,EACjC,OAAOqhB,EAAOG,KAAKziB,EAASwsF,EAAkBzvF,GAGhD,IAAI8U,EA2IN,SAAqByS,GACnB,GAAIhC,EAAO42C,SAAS50C,GAAM,CACxB,IAAIoX,EAA4B,EAAtBmzD,EAAQvqE,EAAIvnB,QAClBurB,EAAM4lE,EAAaxyD,GAEvB,OAAmB,IAAfpT,EAAIvrB,QAIRunB,EAAI3b,KAAK2f,EAAK,EAAG,EAAGoT,GAHXpT,EAOX,QAAmBpoB,IAAfokB,EAAIvnB,OACN,MAA0B,iBAAfunB,EAAIvnB,QAAuB+xF,EAAYxqE,EAAIvnB,QAC7CmxF,EAAa,GAEfM,EAAclqE,GAGvB,GAAiB,WAAbA,EAAI7e,MAAqBmF,MAAM6V,QAAQ6D,EAAI/jB,MAC7C,OAAOiuF,EAAclqE,EAAI/jB,MAhKnBwuF,CAAW9tF,GACnB,GAAI4Q,EAAG,OAAOA,EAEd,GAAsB,oBAAXoU,QAAgD,MAAtBA,OAAO+oE,aACH,mBAA9B/tF,EAAMglB,OAAO+oE,aACtB,OAAO1sE,EAAOG,KACZxhB,EAAMglB,OAAO+oE,aAAa,UAAWxC,EAAkBzvF,GAI3D,MAAM,IAAI0uD,UACR,yHACiDxqD,GAqBrD,SAASguF,EAAYrpE,GACnB,GAAoB,iBAATA,EACT,MAAM,IAAI6lC,UAAU,0CACf,GAAI7lC,EAAO,EAChB,MAAM,IAAIuoE,WAAW,cAAgBvoE,EAAO,kCA4BhD,SAAS8zD,EAAa9zD,GAEpB,OADAqpE,EAAWrpE,GACJsoE,EAAatoE,EAAO,EAAI,EAAoB,EAAhBipE,EAAQjpE,IAwC7C,SAAS4oE,EAAeE,GAGtB,IAFA,IAAI3xF,EAAS2xF,EAAM3xF,OAAS,EAAI,EAA4B,EAAxB8xF,EAAQH,EAAM3xF,QAC9CurB,EAAM4lE,EAAanxF,GACdT,EAAI,EAAGA,EAAIS,EAAQT,GAAK,EAC/BgsB,EAAIhsB,GAAgB,IAAXoyF,EAAMpyF,GAEjB,OAAOgsB,EAmDT,SAASumE,EAAS9xF,GAGhB,GAAIA,GA3Sa,WA4Sf,MAAM,IAAIoxF,WAAW,0DA5SN,YA6SgC5nF,SAAS,IAAM,UAEhE,OAAgB,EAATxJ,EA8FT,SAASs8D,EAAYtH,EAAQ7vD,GAC3B,GAAIogB,EAAO42C,SAASnH,GAClB,OAAOA,EAAOh1D,OAEhB,GAAIysB,YAAY+kE,OAAOx8B,IAAW08B,EAAW18B,EAAQvoC,aACnD,OAAOuoC,EAAOsH,WAEhB,GAAsB,iBAAXtH,EACT,MAAM,IAAItG,UACR,kGAC0BsG,GAI9B,IAAIr2B,EAAMq2B,EAAOh1D,OACbmyF,EAAa1sF,UAAUzF,OAAS,IAAsB,IAAjByF,UAAU,GACnD,IAAK0sF,GAAqB,IAARxzD,EAAW,OAAO,EAIpC,IADA,IAAIyzD,GAAc,IAEhB,OAAQjtF,GACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOw5B,EACT,IAAK,OACL,IAAK,QACH,OAAO0zD,EAAYr9B,GAAQh1D,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAa,EAAN2+B,EACT,IAAK,MACH,OAAOA,IAAQ,EACjB,IAAK,SACH,OAAO2zD,EAAct9B,GAAQh1D,OAC/B,QACE,GAAIoyF,EACF,OAAOD,GAAa,EAAIE,EAAYr9B,GAAQh1D,OAE9CmF,GAAY,GAAKA,GAAUgb,cAC3BiyE,GAAc,GAMtB,SAASG,EAAcptF,EAAUyM,EAAO3M,GACtC,IAAImtF,GAAc,EAclB,SALcjvF,IAAVyO,GAAuBA,EAAQ,KACjCA,EAAQ,GAINA,EAAQ5S,KAAKgB,OACf,MAAO,GAOT,SAJYmD,IAAR8B,GAAqBA,EAAMjG,KAAKgB,UAClCiF,EAAMjG,KAAKgB,QAGTiF,GAAO,EACT,MAAO,GAOT,IAHAA,KAAS,KACT2M,KAAW,GAGT,MAAO,GAKT,IAFKzM,IAAUA,EAAW,UAGxB,OAAQA,GACN,IAAK,MACH,OAAOqtF,EAASxzF,KAAM4S,EAAO3M,GAE/B,IAAK,OACL,IAAK,QACH,OAAOwtF,EAAUzzF,KAAM4S,EAAO3M,GAEhC,IAAK,QACH,OAAOytF,EAAW1zF,KAAM4S,EAAO3M,GAEjC,IAAK,SACL,IAAK,SACH,OAAO0tF,EAAY3zF,KAAM4S,EAAO3M,GAElC,IAAK,SACH,OAAO2tF,EAAY5zF,KAAM4S,EAAO3M,GAElC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO4tF,EAAa7zF,KAAM4S,EAAO3M,GAEnC,QACE,GAAImtF,EAAa,MAAM,IAAI1jC,UAAU,qBAAuBvpD,GAC5DA,GAAYA,EAAW,IAAIgb,cAC3BiyE,GAAc,GAatB,SAASU,EAAMh+E,EAAG1V,EAAGwkB,GACnB,IAAIrkB,EAAIuV,EAAE1V,GACV0V,EAAE1V,GAAK0V,EAAE8O,GACT9O,EAAE8O,GAAKrkB,EAyIT,SAASwzF,EAAsBptE,EAAQ2I,EAAKsjE,EAAYzsF,EAAUyiD,GAEhE,GAAsB,IAAlBjiC,EAAO3lB,OAAc,OAAQ,EAmBjC,GAhB0B,iBAAf4xF,GACTzsF,EAAWysF,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,GAAc,aACvBA,GAAc,YAGZG,EADJH,GAAcA,KAGZA,EAAahqC,EAAM,EAAKjiC,EAAO3lB,OAAS,GAItC4xF,EAAa,IAAGA,EAAajsE,EAAO3lB,OAAS4xF,GAC7CA,GAAcjsE,EAAO3lB,OAAQ,CAC/B,GAAI4nD,EAAK,OAAQ,EACZgqC,EAAajsE,EAAO3lB,OAAS,OAC7B,GAAI4xF,EAAa,EAAG,CACzB,IAAIhqC,EACC,OAAQ,EADJgqC,EAAa,EAUxB,GALmB,iBAARtjE,IACTA,EAAM/I,EAAOG,KAAK4I,EAAKnpB,IAIrBogB,EAAO42C,SAAS7tC,GAElB,OAAmB,IAAfA,EAAItuB,QACE,EAEHgzF,EAAartE,EAAQ2I,EAAKsjE,EAAYzsF,EAAUyiD,GAClD,GAAmB,iBAARt5B,EAEhB,OADAA,GAAY,IACgC,mBAAjCguD,WAAWhvD,UAAU9E,QAC1Bo/B,EACK00B,WAAWhvD,UAAU9E,QAAQzoB,KAAK4lB,EAAQ2I,EAAKsjE,GAE/CtV,WAAWhvD,UAAUwC,YAAY/vB,KAAK4lB,EAAQ2I,EAAKsjE,GAGvDoB,EAAartE,EAAQ,CAAE2I,GAAOsjE,EAAYzsF,EAAUyiD,GAG7D,MAAM,IAAI8G,UAAU,wCAGtB,SAASskC,EAAcrX,EAAKrtD,EAAKsjE,EAAYzsF,EAAUyiD,GACrD,IA0BIroD,EA1BA0zF,EAAY,EACZC,EAAYvX,EAAI37E,OAChBmzF,EAAY7kE,EAAItuB,OAEpB,QAAiBmD,IAAbgC,IAEe,UADjBA,EAAWwE,OAAOxE,GAAUgb,gBACY,UAAbhb,GACV,YAAbA,GAAuC,aAAbA,GAAyB,CACrD,GAAIw2E,EAAI37E,OAAS,GAAKsuB,EAAItuB,OAAS,EACjC,OAAQ,EAEVizF,EAAY,EACZC,GAAa,EACbC,GAAa,EACbvB,GAAc,EAIlB,SAAShwF,EAAM2pB,EAAKhsB,GAClB,OAAkB,IAAd0zF,EACK1nE,EAAIhsB,GAEJgsB,EAAI83C,aAAa9jE,EAAI0zF,GAKhC,GAAIrrC,EAAK,CACP,IAAIwrC,GAAc,EAClB,IAAK7zF,EAAIqyF,EAAYryF,EAAI2zF,EAAW3zF,IAClC,GAAIqC,EAAK+5E,EAAKp8E,KAAOqC,EAAK0sB,GAAqB,IAAhB8kE,EAAoB,EAAI7zF,EAAI6zF,IAEzD,IADoB,IAAhBA,IAAmBA,EAAa7zF,GAChCA,EAAI6zF,EAAa,IAAMD,EAAW,OAAOC,EAAaH,OAEtC,IAAhBG,IAAmB7zF,GAAKA,EAAI6zF,GAChCA,GAAc,OAKlB,IADIxB,EAAauB,EAAYD,IAAWtB,EAAasB,EAAYC,GAC5D5zF,EAAIqyF,EAAYryF,GAAK,EAAGA,IAAK,CAEhC,IADA,IAAI8zF,GAAQ,EACHr6E,EAAI,EAAGA,EAAIm6E,EAAWn6E,IAC7B,GAAIpX,EAAK+5E,EAAKp8E,EAAIyZ,KAAOpX,EAAK0sB,EAAKtV,GAAI,CACrCq6E,GAAQ,EACR,MAGJ,GAAIA,EAAO,OAAO9zF,EAItB,OAAQ,EAeV,SAAS+zF,EAAU/nE,EAAKypC,EAAQxvD,EAAQxF,GACtCwF,EAASjD,OAAOiD,IAAW,EAC3B,IAAI+tF,EAAYhoE,EAAIvrB,OAASwF,EACxBxF,GAGHA,EAASuC,OAAOvC,IACHuzF,IACXvzF,EAASuzF,GAJXvzF,EAASuzF,EAQX,IAAIC,EAASx+B,EAAOh1D,OAEhBA,EAASwzF,EAAS,IACpBxzF,EAASwzF,EAAS,GAEpB,IAAK,IAAIj0F,EAAI,EAAGA,EAAIS,IAAUT,EAAG,CAC/B,IAAIk0F,EAASlpE,SAASyqC,EAAO1N,OAAW,EAAJ/nD,EAAO,GAAI,IAC/C,GAAIwyF,EAAY0B,GAAS,OAAOl0F,EAChCgsB,EAAI/lB,EAASjG,GAAKk0F,EAEpB,OAAOl0F,EAGT,SAASm0F,EAAWnoE,EAAKypC,EAAQxvD,EAAQxF,GACvC,OAAO2zF,EAAWtB,EAAYr9B,EAAQzpC,EAAIvrB,OAASwF,GAAS+lB,EAAK/lB,EAAQxF,GAG3E,SAAS4zF,EAAYroE,EAAKypC,EAAQxvD,EAAQxF,GACxC,OAAO2zF,EA63BT,SAAuBluE,GAErB,IADA,IAAIouE,EAAY,GACPt0F,EAAI,EAAGA,EAAIkmB,EAAIzlB,SAAUT,EAEhCs0F,EAAUxkF,KAAyB,IAApBoW,EAAIwB,WAAW1nB,IAEhC,OAAOs0F,EAn4BWC,CAAa9+B,GAASzpC,EAAK/lB,EAAQxF,GAGvD,SAAS+zF,EAAaxoE,EAAKypC,EAAQxvD,EAAQxF,GACzC,OAAO4zF,EAAWroE,EAAKypC,EAAQxvD,EAAQxF,GAGzC,SAASg0F,EAAazoE,EAAKypC,EAAQxvD,EAAQxF,GACzC,OAAO2zF,EAAWrB,EAAct9B,GAASzpC,EAAK/lB,EAAQxF,GAGxD,SAASi0F,EAAW1oE,EAAKypC,EAAQxvD,EAAQxF,GACvC,OAAO2zF,EA03BT,SAAyBluE,EAAKyuE,GAG5B,IAFA,IAAI10F,EAAGkqE,EAAIzB,EACP4rB,EAAY,GACPt0F,EAAI,EAAGA,EAAIkmB,EAAIzlB,WACjBk0F,GAAS,GAAK,KADa30F,EAGhCC,EAAIimB,EAAIwB,WAAW1nB,GACnBmqE,EAAKlqE,GAAK,EACVyoE,EAAKzoE,EAAI,IACTq0F,EAAUxkF,KAAK44D,GACf4rB,EAAUxkF,KAAKq6D,GAGjB,OAAOmqB,EAv4BWM,CAAen/B,EAAQzpC,EAAIvrB,OAASwF,GAAS+lB,EAAK/lB,EAAQxF,GAiF9E,SAAS4yF,EAAarnE,EAAK3Z,EAAO3M,GAChC,OAAc,IAAV2M,GAAe3M,IAAQsmB,EAAIvrB,OACtB2yB,EAAOqpD,cAAczwD,GAErBoH,EAAOqpD,cAAczwD,EAAItP,MAAMrK,EAAO3M,IAIjD,SAASwtF,EAAWlnE,EAAK3Z,EAAO3M,GAC9BA,EAAMiB,KAAKC,IAAIolB,EAAIvrB,OAAQiF,GAI3B,IAHA,IAAI0rD,EAAM,GAENpxD,EAAIqS,EACDrS,EAAI0F,GAAK,CACd,IAQMmvF,EAAYC,EAAWC,EAAYC,EARrCC,EAAYjpE,EAAIhsB,GAChBk1F,EAAY,KACZC,EAAoBF,EAAY,IAAQ,EACvCA,EAAY,IAAQ,EAClBA,EAAY,IAAQ,EACnB,EAER,GAAIj1F,EAAIm1F,GAAoBzvF,EAG1B,OAAQyvF,GACN,KAAK,EACCF,EAAY,MACdC,EAAYD,GAEd,MACF,KAAK,EAEyB,MAAV,KADlBJ,EAAa7oE,EAAIhsB,EAAI,OAEnBg1F,GAA6B,GAAZC,IAAqB,EAAoB,GAAbJ,GACzB,MAClBK,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAa7oE,EAAIhsB,EAAI,GACrB80F,EAAY9oE,EAAIhsB,EAAI,GACQ,MAAV,IAAb60F,IAAsD,MAAV,IAAZC,KACnCE,GAA6B,GAAZC,IAAoB,IAAoB,GAAbJ,IAAsB,EAAmB,GAAZC,GACrD,OAAUE,EAAgB,OAAUA,EAAgB,SACtEE,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAa7oE,EAAIhsB,EAAI,GACrB80F,EAAY9oE,EAAIhsB,EAAI,GACpB+0F,EAAa/oE,EAAIhsB,EAAI,GACO,MAAV,IAAb60F,IAAsD,MAAV,IAAZC,IAAsD,MAAV,IAAbC,KAClEC,GAA6B,GAAZC,IAAoB,IAAqB,GAAbJ,IAAsB,IAAmB,GAAZC,IAAqB,EAAoB,GAAbC,GAClF,OAAUC,EAAgB,UAC5CE,EAAYF,GAMJ,OAAdE,GAGFA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACb9jC,EAAIthD,KAAKolF,IAAc,GAAK,KAAQ,OACpCA,EAAY,MAAqB,KAAZA,GAGvB9jC,EAAIthD,KAAKolF,GACTl1F,GAAKm1F,EAGP,OAQF,SAAgCC,GAC9B,IAAIh2D,EAAMg2D,EAAW30F,OACrB,GAAI2+B,GAJqB,KAKvB,OAAOh1B,OAAOkzC,aAAaj8B,MAAMjX,OAAQgrF,GAI3C,IAAIhkC,EAAM,GACNpxD,EAAI,EACR,KAAOA,EAAIo/B,GACTgyB,GAAOhnD,OAAOkzC,aAAaj8B,MACzBjX,OACAgrF,EAAW14E,MAAM1c,EAAGA,GAdC,OAiBzB,OAAOoxD,EAvBAikC,CAAsBjkC,GA59B/BlyD,EAAQo2F,WADW,WAiBnBtvE,EAAOuvE,oBAUP,WAEE,IACE,IAAInZ,EAAM,IAAIW,WAAW,GAEzB,OADAX,EAAI0V,UAAY,CAAEA,UAAW/U,WAAWhvD,UAAWynE,IAAK,WAAc,OAAO,KACxD,KAAdpZ,EAAIoZ,MACX,MAAO51F,GACP,OAAO,GAjBkB61F,GAExBzvE,EAAOuvE,qBAA0C,oBAAZx5E,SACb,mBAAlBA,QAAQxa,OACjBwa,QAAQxa,MACN,iJAgBJwT,OAAO6a,eAAe5J,EAAO+H,UAAW,SAAU,CAChD+B,YAAY,EACZo0B,IAAK,WACH,GAAKl+B,EAAO42C,SAASn9D,MACrB,OAAOA,KAAK2mB,UAIhBrR,OAAO6a,eAAe5J,EAAO+H,UAAW,SAAU,CAChD+B,YAAY,EACZo0B,IAAK,WACH,GAAKl+B,EAAO42C,SAASn9D,MACrB,OAAOA,KAAK4yF,cAsCM,oBAAX1oE,QAA4C,MAAlBA,OAAO+rE,SACxC1vE,EAAO2D,OAAO+rE,WAAa1vE,GAC7BjR,OAAO6a,eAAe5J,EAAQ2D,OAAO+rE,QAAS,CAC5C/wF,MAAO,KACPqrB,cAAc,EACdF,YAAY,EACZC,UAAU,IAId/J,EAAO2vE,SAAW,KA0DlB3vE,EAAOG,KAAO,SAAUxhB,EAAOurF,EAAkBzvF,GAC/C,OAAO0lB,EAAKxhB,EAAOurF,EAAkBzvF,IAKvCulB,EAAO+H,UAAU+jE,UAAY/U,WAAWhvD,UACxC/H,EAAO8rE,UAAY/U,WA8BnB/2D,EAAOoD,MAAQ,SAAUE,EAAM1gB,EAAMhD,GACnC,OArBF,SAAgB0jB,EAAM1gB,EAAMhD,GAE1B,OADA+sF,EAAWrpE,GACPA,GAAQ,EACHsoE,EAAatoE,QAET1lB,IAATgF,EAIyB,iBAAbhD,EACVgsF,EAAatoE,GAAM1gB,KAAKA,EAAMhD,GAC9BgsF,EAAatoE,GAAM1gB,KAAKA,GAEvBgpF,EAAatoE,GAQbF,CAAME,EAAM1gB,EAAMhD,IAW3BogB,EAAOo3D,YAAc,SAAU9zD,GAC7B,OAAO8zD,EAAY9zD,IAKrBtD,EAAOmqE,gBAAkB,SAAU7mE,GACjC,OAAO8zD,EAAY9zD,IAqGrBtD,EAAO42C,SAAW,SAAmBrnD,GACnC,OAAY,MAALA,IAA6B,IAAhBA,EAAEqgF,WACpBrgF,IAAMyQ,EAAO+H,WAGjB/H,EAAO6vE,QAAU,SAAkBz1F,EAAGmV,GAGpC,GAFI48E,EAAW/xF,EAAG28E,cAAa38E,EAAI4lB,EAAOG,KAAK/lB,EAAGA,EAAE6F,OAAQ7F,EAAE28D,aAC1Do1B,EAAW58E,EAAGwnE,cAAaxnE,EAAIyQ,EAAOG,KAAK5Q,EAAGA,EAAEtP,OAAQsP,EAAEwnD,cACzD/2C,EAAO42C,SAASx8D,KAAO4lB,EAAO42C,SAASrnD,GAC1C,MAAM,IAAI45C,UACR,yEAIJ,GAAI/uD,IAAMmV,EAAG,OAAO,EAKpB,IAHA,IAAI7D,EAAItR,EAAEK,OACNkR,EAAI4D,EAAE9U,OAEDT,EAAI,EAAGo/B,EAAMz4B,KAAKC,IAAI8K,EAAGC,GAAI3R,EAAIo/B,IAAOp/B,EAC/C,GAAII,EAAEJ,KAAOuV,EAAEvV,GAAI,CACjB0R,EAAItR,EAAEJ,GACN2R,EAAI4D,EAAEvV,GACN,MAIJ,OAAI0R,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GAGTsU,EAAOqqE,WAAa,SAAqBzqF,GACvC,OAAQwE,OAAOxE,GAAUgb,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,IAIboF,EAAO6C,OAAS,SAAiBitE,EAAMr1F,GACrC,IAAK6N,MAAM6V,QAAQ2xE,GACjB,MAAM,IAAI3mC,UAAU,+CAGtB,GAAoB,IAAhB2mC,EAAKr1F,OACP,OAAOulB,EAAOoD,MAAM,GAGtB,IAAIppB,EACJ,QAAe4D,IAAXnD,EAEF,IADAA,EAAS,EACJT,EAAI,EAAGA,EAAI81F,EAAKr1F,SAAUT,EAC7BS,GAAUq1F,EAAK91F,GAAGS,OAItB,IAAI2lB,EAASJ,EAAOo3D,YAAY38E,GAC5BwhB,EAAM,EACV,IAAKjiB,EAAI,EAAGA,EAAI81F,EAAKr1F,SAAUT,EAAG,CAChC,IAAIgsB,EAAM8pE,EAAK91F,GAIf,GAHImyF,EAAWnmE,EAAK+wD,cAClB/wD,EAAMhG,EAAOG,KAAK6F,KAEfhG,EAAO42C,SAAS5wC,GACnB,MAAM,IAAImjC,UAAU,+CAEtBnjC,EAAI3f,KAAK+Z,EAAQnE,GACjBA,GAAO+J,EAAIvrB,OAEb,OAAO2lB,GAkDTJ,EAAO+2C,WAAaA,EA8EpB/2C,EAAO+H,UAAU6nE,WAAY,EAQ7B5vE,EAAO+H,UAAUgoE,OAAS,WACxB,IAAI32D,EAAM3/B,KAAKgB,OACf,GAAI2+B,EAAM,GAAM,EACd,MAAM,IAAIyyD,WAAW,6CAEvB,IAAK,IAAI7xF,EAAI,EAAGA,EAAIo/B,EAAKp/B,GAAK,EAC5BuzF,EAAK9zF,KAAMO,EAAGA,EAAI,GAEpB,OAAOP,MAGTumB,EAAO+H,UAAUioE,OAAS,WACxB,IAAI52D,EAAM3/B,KAAKgB,OACf,GAAI2+B,EAAM,GAAM,EACd,MAAM,IAAIyyD,WAAW,6CAEvB,IAAK,IAAI7xF,EAAI,EAAGA,EAAIo/B,EAAKp/B,GAAK,EAC5BuzF,EAAK9zF,KAAMO,EAAGA,EAAI,GAClBuzF,EAAK9zF,KAAMO,EAAI,EAAGA,EAAI,GAExB,OAAOP,MAGTumB,EAAO+H,UAAUkoE,OAAS,WACxB,IAAI72D,EAAM3/B,KAAKgB,OACf,GAAI2+B,EAAM,GAAM,EACd,MAAM,IAAIyyD,WAAW,6CAEvB,IAAK,IAAI7xF,EAAI,EAAGA,EAAIo/B,EAAKp/B,GAAK,EAC5BuzF,EAAK9zF,KAAMO,EAAGA,EAAI,GAClBuzF,EAAK9zF,KAAMO,EAAI,EAAGA,EAAI,GACtBuzF,EAAK9zF,KAAMO,EAAI,EAAGA,EAAI,GACtBuzF,EAAK9zF,KAAMO,EAAI,EAAGA,EAAI,GAExB,OAAOP,MAGTumB,EAAO+H,UAAU9jB,SAAW,WAC1B,IAAIxJ,EAAShB,KAAKgB,OAClB,OAAe,IAAXA,EAAqB,GACA,IAArByF,UAAUzF,OAAqByyF,EAAUzzF,KAAM,EAAGgB,GAC/CuyF,EAAa3xE,MAAM5hB,KAAMyG,YAGlC8f,EAAO+H,UAAUmoE,eAAiBlwE,EAAO+H,UAAU9jB,SAEnD+b,EAAO+H,UAAUgnB,OAAS,SAAiBx/B,GACzC,IAAKyQ,EAAO42C,SAASrnD,GAAI,MAAM,IAAI45C,UAAU,6BAC7C,OAAI1vD,OAAS8V,GACsB,IAA5ByQ,EAAO6vE,QAAQp2F,KAAM8V,IAG9ByQ,EAAO+H,UAAUs6C,QAAU,WACzB,IAAIniD,EAAM,GACNrW,EAAM3Q,EAAQyyF,kBAGlB,OAFAzrE,EAAMzmB,KAAKwK,SAAS,MAAO,EAAG4F,GAAK7D,QAAQ,UAAW,OAAO4oD,OACzDn1D,KAAKgB,OAASoP,IAAKqW,GAAO,SACvB,WAAaA,EAAM,KAG5BF,EAAO+H,UAAU8nE,QAAU,SAAkB/7E,EAAQzH,EAAO3M,EAAKywF,EAAWC,GAI1E,GAHIjE,EAAWr4E,EAAQijE,cACrBjjE,EAASkM,EAAOG,KAAKrM,EAAQA,EAAO7T,OAAQ6T,EAAOijD,cAEhD/2C,EAAO42C,SAAS9iD,GACnB,MAAM,IAAIq1C,UACR,wFAC2Br1C,GAiB/B,QAbclW,IAAVyO,IACFA,EAAQ,QAEEzO,IAAR8B,IACFA,EAAMoU,EAASA,EAAOrZ,OAAS,QAEfmD,IAAduyF,IACFA,EAAY,QAEEvyF,IAAZwyF,IACFA,EAAU32F,KAAKgB,QAGb4R,EAAQ,GAAK3M,EAAMoU,EAAOrZ,QAAU01F,EAAY,GAAKC,EAAU32F,KAAKgB,OACtE,MAAM,IAAIoxF,WAAW,sBAGvB,GAAIsE,GAAaC,GAAW/jF,GAAS3M,EACnC,OAAO,EAET,GAAIywF,GAAaC,EACf,OAAQ,EAEV,GAAI/jF,GAAS3M,EACX,OAAO,EAQT,GAAIjG,OAASqa,EAAQ,OAAO,EAS5B,IAPA,IAAIpI,GAJJ0kF,KAAa,IADbD,KAAe,GAMXxkF,GAPJjM,KAAS,IADT2M,KAAW,GASP+sB,EAAMz4B,KAAKC,IAAI8K,EAAGC,GAElB0kF,EAAW52F,KAAKid,MAAMy5E,EAAWC,GACjCE,EAAax8E,EAAO4C,MAAMrK,EAAO3M,GAE5B1F,EAAI,EAAGA,EAAIo/B,IAAOp/B,EACzB,GAAIq2F,EAASr2F,KAAOs2F,EAAWt2F,GAAI,CACjC0R,EAAI2kF,EAASr2F,GACb2R,EAAI2kF,EAAWt2F,GACf,MAIJ,OAAI0R,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GA4HTsU,EAAO+H,UAAU0kB,SAAW,SAAmB1jB,EAAKsjE,EAAYzsF,GAC9D,OAAoD,IAA7CnG,KAAKwpB,QAAQ8F,EAAKsjE,EAAYzsF,IAGvCogB,EAAO+H,UAAU9E,QAAU,SAAkB8F,EAAKsjE,EAAYzsF,GAC5D,OAAO4tF,EAAqB/zF,KAAMsvB,EAAKsjE,EAAYzsF,GAAU,IAG/DogB,EAAO+H,UAAUwC,YAAc,SAAsBxB,EAAKsjE,EAAYzsF,GACpE,OAAO4tF,EAAqB/zF,KAAMsvB,EAAKsjE,EAAYzsF,GAAU,IAgD/DogB,EAAO+H,UAAUxoB,MAAQ,SAAgBkwD,EAAQxvD,EAAQxF,EAAQmF,GAE/D,QAAehC,IAAXqC,EACFL,EAAW,OACXnF,EAAShB,KAAKgB,OACdwF,EAAS,OAEJ,QAAerC,IAAXnD,GAA0C,iBAAXwF,EACxCL,EAAWK,EACXxF,EAAShB,KAAKgB,OACdwF,EAAS,MAEJ,CAAA,IAAIue,SAASve,GAUlB,MAAM,IAAI5F,MACR,2EAVF4F,KAAoB,EAChBue,SAAS/jB,IACXA,KAAoB,OACHmD,IAAbgC,IAAwBA,EAAW,UAEvCA,EAAWnF,EACXA,OAASmD,GAQb,IAAIowF,EAAYv0F,KAAKgB,OAASwF,EAG9B,SAFerC,IAAXnD,GAAwBA,EAASuzF,KAAWvzF,EAASuzF,GAEpDv+B,EAAOh1D,OAAS,IAAMA,EAAS,GAAKwF,EAAS,IAAOA,EAASxG,KAAKgB,OACrE,MAAM,IAAIoxF,WAAW,0CAGlBjsF,IAAUA,EAAW,QAG1B,IADA,IAAIitF,GAAc,IAEhB,OAAQjtF,GACN,IAAK,MACH,OAAOmuF,EAASt0F,KAAMg2D,EAAQxvD,EAAQxF,GAExC,IAAK,OACL,IAAK,QACH,OAAO0zF,EAAU10F,KAAMg2D,EAAQxvD,EAAQxF,GAEzC,IAAK,QACH,OAAO4zF,EAAW50F,KAAMg2D,EAAQxvD,EAAQxF,GAE1C,IAAK,SACL,IAAK,SACH,OAAO+zF,EAAY/0F,KAAMg2D,EAAQxvD,EAAQxF,GAE3C,IAAK,SAEH,OAAOg0F,EAAYh1F,KAAMg2D,EAAQxvD,EAAQxF,GAE3C,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOi0F,EAAUj1F,KAAMg2D,EAAQxvD,EAAQxF,GAEzC,QACE,GAAIoyF,EAAa,MAAM,IAAI1jC,UAAU,qBAAuBvpD,GAC5DA,GAAY,GAAKA,GAAUgb,cAC3BiyE,GAAc,IAKtB7sE,EAAO+H,UAAUw7C,OAAS,WACxB,MAAO,CACLpgE,KAAM,SACNlF,KAAMqK,MAAMyf,UAAUrR,MAAMlc,KAAKf,KAAK82F,MAAQ92F,KAAM,KA4GxD,SAAS0zF,EAAYnnE,EAAK3Z,EAAO3M,GAC/B,IAAI4jE,EAAM,GACV5jE,EAAMiB,KAAKC,IAAIolB,EAAIvrB,OAAQiF,GAE3B,IAAK,IAAI1F,EAAIqS,EAAOrS,EAAI0F,IAAO1F,EAC7BspE,GAAOl/D,OAAOkzC,aAAsB,IAATtxB,EAAIhsB,IAEjC,OAAOspE,EAGT,SAAS8pB,EAAapnE,EAAK3Z,EAAO3M,GAChC,IAAI4jE,EAAM,GACV5jE,EAAMiB,KAAKC,IAAIolB,EAAIvrB,OAAQiF,GAE3B,IAAK,IAAI1F,EAAIqS,EAAOrS,EAAI0F,IAAO1F,EAC7BspE,GAAOl/D,OAAOkzC,aAAatxB,EAAIhsB,IAEjC,OAAOspE,EAGT,SAAS2pB,EAAUjnE,EAAK3Z,EAAO3M,GAC7B,IAAI05B,EAAMpT,EAAIvrB,SAET4R,GAASA,EAAQ,KAAGA,EAAQ,KAC5B3M,GAAOA,EAAM,GAAKA,EAAM05B,KAAK15B,EAAM05B,GAGxC,IADA,IAAIs+B,EAAM,GACD19D,EAAIqS,EAAOrS,EAAI0F,IAAO1F,EAC7B09D,GAAO84B,EAAMxqE,EAAIhsB,IAEnB,OAAO09D,EAGT,SAAS41B,EAActnE,EAAK3Z,EAAO3M,GAGjC,IAFA,IAAI83D,EAAQxxC,EAAItP,MAAMrK,EAAO3M,GACzB0rD,EAAM,GACDpxD,EAAI,EAAGA,EAAIw9D,EAAM/8D,OAAQT,GAAK,EACrCoxD,GAAOhnD,OAAOkzC,aAAakgB,EAAMx9D,GAAqB,IAAfw9D,EAAMx9D,EAAI,IAEnD,OAAOoxD,EAiCT,SAASqlC,EAAaxwF,EAAQuO,EAAK/T,GACjC,GAAKwF,EAAS,GAAO,GAAKA,EAAS,EAAG,MAAM,IAAI4rF,WAAW,sBAC3D,GAAI5rF,EAASuO,EAAM/T,EAAQ,MAAM,IAAIoxF,WAAW,yCA6KlD,SAAS6E,EAAU1qE,EAAKrnB,EAAOsB,EAAQuO,EAAK3E,EAAKjJ,GAC/C,IAAKof,EAAO42C,SAAS5wC,GAAM,MAAM,IAAImjC,UAAU,+CAC/C,GAAIxqD,EAAQkL,GAAOlL,EAAQiC,EAAK,MAAM,IAAIirF,WAAW,qCACrD,GAAI5rF,EAASuO,EAAMwX,EAAIvrB,OAAQ,MAAM,IAAIoxF,WAAW,sBAyLtD,SAAS8E,EAAc3qE,EAAKrnB,EAAOsB,EAAQuO,EAAK3E,EAAKjJ,GACnD,GAAIX,EAASuO,EAAMwX,EAAIvrB,OAAQ,MAAM,IAAIoxF,WAAW,sBACpD,GAAI5rF,EAAS,EAAG,MAAM,IAAI4rF,WAAW,sBAGvC,SAAS+E,EAAY5qE,EAAKrnB,EAAOsB,EAAQ0jE,EAAcktB,GAOrD,OANAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GACHF,EAAa3qE,EAAKrnB,EAAOsB,EAAQ,GAEnCyrF,EAAQnsF,MAAMymB,EAAKrnB,EAAOsB,EAAQ0jE,EAAc,GAAI,GAC7C1jE,EAAS,EAWlB,SAAS6wF,EAAa9qE,EAAKrnB,EAAOsB,EAAQ0jE,EAAcktB,GAOtD,OANAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GACHF,EAAa3qE,EAAKrnB,EAAOsB,EAAQ,GAEnCyrF,EAAQnsF,MAAMymB,EAAKrnB,EAAOsB,EAAQ0jE,EAAc,GAAI,GAC7C1jE,EAAS,EAvalB+f,EAAO+H,UAAUrR,MAAQ,SAAgBrK,EAAO3M,GAC9C,IAAI05B,EAAM3/B,KAAKgB,QACf4R,IAAUA,GAGE,GACVA,GAAS+sB,GACG,IAAG/sB,EAAQ,GACdA,EAAQ+sB,IACjB/sB,EAAQ+sB,IANV15B,OAAc9B,IAAR8B,EAAoB05B,IAAQ15B,GASxB,GACRA,GAAO05B,GACG,IAAG15B,EAAM,GACVA,EAAM05B,IACf15B,EAAM05B,GAGJ15B,EAAM2M,IAAO3M,EAAM2M,GAEvB,IAAI0kF,EAASt3F,KAAKu3F,SAAS3kF,EAAO3M,GAGlC,OADAqxF,EAAOjF,UAAY9rE,EAAO+H,UACnBgpE,GAWT/wE,EAAO+H,UAAUkpE,WAAa,SAAqBhxF,EAAQ82D,EAAY85B,GACrE5wF,KAAoB,EACpB82D,KAA4B,EACvB85B,GAAUJ,EAAYxwF,EAAQ82D,EAAYt9D,KAAKgB,QAKpD,IAHA,IAAIsuB,EAAMtvB,KAAKwG,GACXihE,EAAM,EACNlnE,EAAI,IACCA,EAAI+8D,IAAemK,GAAO,MACjCn4C,GAAOtvB,KAAKwG,EAASjG,GAAKknE,EAG5B,OAAOn4C,GAGT/I,EAAO+H,UAAUmpE,WAAa,SAAqBjxF,EAAQ82D,EAAY85B,GACrE5wF,KAAoB,EACpB82D,KAA4B,EACvB85B,GACHJ,EAAYxwF,EAAQ82D,EAAYt9D,KAAKgB,QAKvC,IAFA,IAAIsuB,EAAMtvB,KAAKwG,IAAW82D,GACtBmK,EAAM,EACHnK,EAAa,IAAMmK,GAAO,MAC/Bn4C,GAAOtvB,KAAKwG,IAAW82D,GAAcmK,EAGvC,OAAOn4C,GAGT/I,EAAO+H,UAAUqvC,UAAY,SAAoBn3D,EAAQ4wF,GAGvD,OAFA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QACpChB,KAAKwG,IAGd+f,EAAO+H,UAAUopE,aAAe,SAAuBlxF,EAAQ4wF,GAG7D,OAFA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QACpChB,KAAKwG,GAAWxG,KAAKwG,EAAS,IAAM,GAG7C+f,EAAO+H,UAAU+1C,aAAe,SAAuB79D,EAAQ4wF,GAG7D,OAFA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QACnChB,KAAKwG,IAAW,EAAKxG,KAAKwG,EAAS,IAG7C+f,EAAO+H,UAAUqpE,aAAe,SAAuBnxF,EAAQ4wF,GAI7D,OAHA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,SAElChB,KAAKwG,GACTxG,KAAKwG,EAAS,IAAM,EACpBxG,KAAKwG,EAAS,IAAM,IACD,SAAnBxG,KAAKwG,EAAS,IAGrB+f,EAAO+H,UAAUmwD,aAAe,SAAuBj4E,EAAQ4wF,GAI7D,OAHA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QAEpB,SAAfhB,KAAKwG,IACTxG,KAAKwG,EAAS,IAAM,GACrBxG,KAAKwG,EAAS,IAAM,EACrBxG,KAAKwG,EAAS,KAGlB+f,EAAO+H,UAAUspE,UAAY,SAAoBpxF,EAAQ82D,EAAY85B,GACnE5wF,KAAoB,EACpB82D,KAA4B,EACvB85B,GAAUJ,EAAYxwF,EAAQ82D,EAAYt9D,KAAKgB,QAKpD,IAHA,IAAIsuB,EAAMtvB,KAAKwG,GACXihE,EAAM,EACNlnE,EAAI,IACCA,EAAI+8D,IAAemK,GAAO,MACjCn4C,GAAOtvB,KAAKwG,EAASjG,GAAKknE,EAM5B,OAFIn4C,IAFJm4C,GAAO,OAESn4C,GAAOpoB,KAAKuhE,IAAI,EAAG,EAAInL,IAEhChuC,GAGT/I,EAAO+H,UAAUupE,UAAY,SAAoBrxF,EAAQ82D,EAAY85B,GACnE5wF,KAAoB,EACpB82D,KAA4B,EACvB85B,GAAUJ,EAAYxwF,EAAQ82D,EAAYt9D,KAAKgB,QAKpD,IAHA,IAAIT,EAAI+8D,EACJmK,EAAM,EACNn4C,EAAMtvB,KAAKwG,IAAWjG,GACnBA,EAAI,IAAMknE,GAAO,MACtBn4C,GAAOtvB,KAAKwG,IAAWjG,GAAKknE,EAM9B,OAFIn4C,IAFJm4C,GAAO,OAESn4C,GAAOpoB,KAAKuhE,IAAI,EAAG,EAAInL,IAEhChuC,GAGT/I,EAAO+H,UAAUwpE,SAAW,SAAmBtxF,EAAQ4wF,GAGrD,OAFA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QACtB,IAAfhB,KAAKwG,IAC0B,GAA5B,IAAOxG,KAAKwG,GAAU,GADKxG,KAAKwG,IAI3C+f,EAAO+H,UAAUypE,YAAc,SAAsBvxF,EAAQ4wF,GAC3D5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QAC3C,IAAIsuB,EAAMtvB,KAAKwG,GAAWxG,KAAKwG,EAAS,IAAM,EAC9C,OAAc,MAAN8oB,EAAsB,WAANA,EAAmBA,GAG7C/I,EAAO+H,UAAU0pE,YAAc,SAAsBxxF,EAAQ4wF,GAC3D5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QAC3C,IAAIsuB,EAAMtvB,KAAKwG,EAAS,GAAMxG,KAAKwG,IAAW,EAC9C,OAAc,MAAN8oB,EAAsB,WAANA,EAAmBA,GAG7C/I,EAAO+H,UAAU2pE,YAAc,SAAsBzxF,EAAQ4wF,GAI3D,OAHA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QAEnChB,KAAKwG,GACVxG,KAAKwG,EAAS,IAAM,EACpBxG,KAAKwG,EAAS,IAAM,GACpBxG,KAAKwG,EAAS,IAAM,IAGzB+f,EAAO+H,UAAU4pE,YAAc,SAAsB1xF,EAAQ4wF,GAI3D,OAHA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QAEnChB,KAAKwG,IAAW,GACrBxG,KAAKwG,EAAS,IAAM,GACpBxG,KAAKwG,EAAS,IAAM,EACpBxG,KAAKwG,EAAS,IAGnB+f,EAAO+H,UAAU6pE,YAAc,SAAsB3xF,EAAQ4wF,GAG3D,OAFA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QACpCixF,EAAQrvF,KAAK5C,KAAMwG,GAAQ,EAAM,GAAI,IAG9C+f,EAAO+H,UAAU8pE,YAAc,SAAsB5xF,EAAQ4wF,GAG3D,OAFA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QACpCixF,EAAQrvF,KAAK5C,KAAMwG,GAAQ,EAAO,GAAI,IAG/C+f,EAAO+H,UAAU+pE,aAAe,SAAuB7xF,EAAQ4wF,GAG7D,OAFA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QACpCixF,EAAQrvF,KAAK5C,KAAMwG,GAAQ,EAAM,GAAI,IAG9C+f,EAAO+H,UAAUgqE,aAAe,SAAuB9xF,EAAQ4wF,GAG7D,OAFA5wF,KAAoB,EACf4wF,GAAUJ,EAAYxwF,EAAQ,EAAGxG,KAAKgB,QACpCixF,EAAQrvF,KAAK5C,KAAMwG,GAAQ,EAAO,GAAI,IAS/C+f,EAAO+H,UAAUiqE,YAAc,SAAsBrzF,EAAOsB,EAAQ82D,EAAY85B,IAC9ElyF,GAASA,EACTsB,KAAoB,EACpB82D,KAA4B,EACvB85B,IAEHH,EAASj3F,KAAMkF,EAAOsB,EAAQ82D,EADfp2D,KAAKuhE,IAAI,EAAG,EAAInL,GAAc,EACO,GAGtD,IAAImK,EAAM,EACNlnE,EAAI,EAER,IADAP,KAAKwG,GAAkB,IAARtB,IACN3E,EAAI+8D,IAAemK,GAAO,MACjCznE,KAAKwG,EAASjG,GAAM2E,EAAQuiE,EAAO,IAGrC,OAAOjhE,EAAS82D,GAGlB/2C,EAAO+H,UAAUg0D,YAAc,SAAsBp9E,EAAOsB,EAAQ82D,EAAY85B,IAC9ElyF,GAASA,EACTsB,KAAoB,EACpB82D,KAA4B,EACvB85B,IAEHH,EAASj3F,KAAMkF,EAAOsB,EAAQ82D,EADfp2D,KAAKuhE,IAAI,EAAG,EAAInL,GAAc,EACO,GAGtD,IAAI/8D,EAAI+8D,EAAa,EACjBmK,EAAM,EAEV,IADAznE,KAAKwG,EAASjG,GAAa,IAAR2E,IACV3E,GAAK,IAAMknE,GAAO,MACzBznE,KAAKwG,EAASjG,GAAM2E,EAAQuiE,EAAO,IAGrC,OAAOjhE,EAAS82D,GAGlB/2C,EAAO+H,UAAUi3D,WAAa,SAAqBrgF,EAAOsB,EAAQ4wF,GAKhE,OAJAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,IAAM,GACtDxG,KAAKwG,GAAmB,IAARtB,EACTsB,EAAS,GAGlB+f,EAAO+H,UAAUkqE,cAAgB,SAAwBtzF,EAAOsB,EAAQ4wF,GAMtE,OALAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,MAAQ,GACxDxG,KAAKwG,GAAmB,IAARtB,EAChBlF,KAAKwG,EAAS,GAAMtB,IAAU,EACvBsB,EAAS,GAGlB+f,EAAO+H,UAAUs3C,cAAgB,SAAwB1gE,EAAOsB,EAAQ4wF,GAMtE,OALAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,MAAQ,GACxDxG,KAAKwG,GAAWtB,IAAU,EAC1BlF,KAAKwG,EAAS,GAAc,IAARtB,EACbsB,EAAS,GAGlB+f,EAAO+H,UAAU1E,cAAgB,SAAwB1kB,EAAOsB,EAAQ4wF,GAQtE,OAPAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,WAAY,GAC5DxG,KAAKwG,EAAS,GAAMtB,IAAU,GAC9BlF,KAAKwG,EAAS,GAAMtB,IAAU,GAC9BlF,KAAKwG,EAAS,GAAMtB,IAAU,EAC9BlF,KAAKwG,GAAmB,IAARtB,EACTsB,EAAS,GAGlB+f,EAAO+H,UAAU8yD,cAAgB,SAAwBl8E,EAAOsB,EAAQ4wF,GAQtE,OAPAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,WAAY,GAC5DxG,KAAKwG,GAAWtB,IAAU,GAC1BlF,KAAKwG,EAAS,GAAMtB,IAAU,GAC9BlF,KAAKwG,EAAS,GAAMtB,IAAU,EAC9BlF,KAAKwG,EAAS,GAAc,IAARtB,EACbsB,EAAS,GAGlB+f,EAAO+H,UAAUmqE,WAAa,SAAqBvzF,EAAOsB,EAAQ82D,EAAY85B,GAG5E,GAFAlyF,GAASA,EACTsB,KAAoB,GACf4wF,EAAU,CACb,IAAIsB,EAAQxxF,KAAKuhE,IAAI,EAAI,EAAInL,EAAc,GAE3C25B,EAASj3F,KAAMkF,EAAOsB,EAAQ82D,EAAYo7B,EAAQ,GAAIA,GAGxD,IAAIn4F,EAAI,EACJknE,EAAM,EACNgF,EAAM,EAEV,IADAzsE,KAAKwG,GAAkB,IAARtB,IACN3E,EAAI+8D,IAAemK,GAAO,MAC7BviE,EAAQ,GAAa,IAARunE,GAAsC,IAAzBzsE,KAAKwG,EAASjG,EAAI,KAC9CksE,EAAM,GAERzsE,KAAKwG,EAASjG,IAAO2E,EAAQuiE,GAAQ,GAAKgF,EAAM,IAGlD,OAAOjmE,EAAS82D,GAGlB/2C,EAAO+H,UAAUqqE,WAAa,SAAqBzzF,EAAOsB,EAAQ82D,EAAY85B,GAG5E,GAFAlyF,GAASA,EACTsB,KAAoB,GACf4wF,EAAU,CACb,IAAIsB,EAAQxxF,KAAKuhE,IAAI,EAAI,EAAInL,EAAc,GAE3C25B,EAASj3F,KAAMkF,EAAOsB,EAAQ82D,EAAYo7B,EAAQ,GAAIA,GAGxD,IAAIn4F,EAAI+8D,EAAa,EACjBmK,EAAM,EACNgF,EAAM,EAEV,IADAzsE,KAAKwG,EAASjG,GAAa,IAAR2E,IACV3E,GAAK,IAAMknE,GAAO,MACrBviE,EAAQ,GAAa,IAARunE,GAAsC,IAAzBzsE,KAAKwG,EAASjG,EAAI,KAC9CksE,EAAM,GAERzsE,KAAKwG,EAASjG,IAAO2E,EAAQuiE,GAAQ,GAAKgF,EAAM,IAGlD,OAAOjmE,EAAS82D,GAGlB/2C,EAAO+H,UAAUsqE,UAAY,SAAoB1zF,EAAOsB,EAAQ4wF,GAM9D,OALAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,KAAO,KACnDtB,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtClF,KAAKwG,GAAmB,IAARtB,EACTsB,EAAS,GAGlB+f,EAAO+H,UAAUuqE,aAAe,SAAuB3zF,EAAOsB,EAAQ4wF,GAMpE,OALAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,OAAS,OACzDxG,KAAKwG,GAAmB,IAARtB,EAChBlF,KAAKwG,EAAS,GAAMtB,IAAU,EACvBsB,EAAS,GAGlB+f,EAAO+H,UAAUwqE,aAAe,SAAuB5zF,EAAOsB,EAAQ4wF,GAMpE,OALAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,OAAS,OACzDxG,KAAKwG,GAAWtB,IAAU,EAC1BlF,KAAKwG,EAAS,GAAc,IAARtB,EACbsB,EAAS,GAGlB+f,EAAO+H,UAAUyqE,aAAe,SAAuB7zF,EAAOsB,EAAQ4wF,GAQpE,OAPAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,YAAa,YAC7DxG,KAAKwG,GAAmB,IAARtB,EAChBlF,KAAKwG,EAAS,GAAMtB,IAAU,EAC9BlF,KAAKwG,EAAS,GAAMtB,IAAU,GAC9BlF,KAAKwG,EAAS,GAAMtB,IAAU,GACvBsB,EAAS,GAGlB+f,EAAO+H,UAAU0qE,aAAe,SAAuB9zF,EAAOsB,EAAQ4wF,GASpE,OARAlyF,GAASA,EACTsB,KAAoB,EACf4wF,GAAUH,EAASj3F,KAAMkF,EAAOsB,EAAQ,EAAG,YAAa,YACzDtB,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5ClF,KAAKwG,GAAWtB,IAAU,GAC1BlF,KAAKwG,EAAS,GAAMtB,IAAU,GAC9BlF,KAAKwG,EAAS,GAAMtB,IAAU,EAC9BlF,KAAKwG,EAAS,GAAc,IAARtB,EACbsB,EAAS,GAkBlB+f,EAAO+H,UAAU2qE,aAAe,SAAuB/zF,EAAOsB,EAAQ4wF,GACpE,OAAOD,EAAWn3F,KAAMkF,EAAOsB,GAAQ,EAAM4wF,IAG/C7wE,EAAO+H,UAAU4qE,aAAe,SAAuBh0F,EAAOsB,EAAQ4wF,GACpE,OAAOD,EAAWn3F,KAAMkF,EAAOsB,GAAQ,EAAO4wF,IAahD7wE,EAAO+H,UAAU6qE,cAAgB,SAAwBj0F,EAAOsB,EAAQ4wF,GACtE,OAAOC,EAAYr3F,KAAMkF,EAAOsB,GAAQ,EAAM4wF,IAGhD7wE,EAAO+H,UAAU8qE,cAAgB,SAAwBl0F,EAAOsB,EAAQ4wF,GACtE,OAAOC,EAAYr3F,KAAMkF,EAAOsB,GAAQ,EAAO4wF,IAIjD7wE,EAAO+H,UAAU1hB,KAAO,SAAeyN,EAAQg/E,EAAazmF,EAAO3M,GACjE,IAAKsgB,EAAO42C,SAAS9iD,GAAS,MAAM,IAAIq1C,UAAU,+BAQlD,GAPK98C,IAAOA,EAAQ,GACf3M,GAAe,IAARA,IAAWA,EAAMjG,KAAKgB,QAC9Bq4F,GAAeh/E,EAAOrZ,SAAQq4F,EAAch/E,EAAOrZ,QAClDq4F,IAAaA,EAAc,GAC5BpzF,EAAM,GAAKA,EAAM2M,IAAO3M,EAAM2M,GAG9B3M,IAAQ2M,EAAO,OAAO,EAC1B,GAAsB,IAAlByH,EAAOrZ,QAAgC,IAAhBhB,KAAKgB,OAAc,OAAO,EAGrD,GAAIq4F,EAAc,EAChB,MAAM,IAAIjH,WAAW,6BAEvB,GAAIx/E,EAAQ,GAAKA,GAAS5S,KAAKgB,OAAQ,MAAM,IAAIoxF,WAAW,sBAC5D,GAAInsF,EAAM,EAAG,MAAM,IAAImsF,WAAW,2BAG9BnsF,EAAMjG,KAAKgB,SAAQiF,EAAMjG,KAAKgB,QAC9BqZ,EAAOrZ,OAASq4F,EAAcpzF,EAAM2M,IACtC3M,EAAMoU,EAAOrZ,OAASq4F,EAAczmF,GAGtC,IAAI+sB,EAAM15B,EAAM2M,EAEhB,GAAI5S,OAASqa,GAAqD,mBAApCijE,WAAWhvD,UAAUgrE,WAEjDt5F,KAAKs5F,WAAWD,EAAazmF,EAAO3M,QAC/B,GAAIjG,OAASqa,GAAUzH,EAAQymF,GAAeA,EAAcpzF,EAEjE,IAAK,IAAI1F,EAAIo/B,EAAM,EAAGp/B,GAAK,IAAKA,EAC9B8Z,EAAO9Z,EAAI84F,GAAer5F,KAAKO,EAAIqS,QAGrC0qE,WAAWhvD,UAAUq2B,IAAI5jD,KACvBsZ,EACAra,KAAKu3F,SAAS3kF,EAAO3M,GACrBozF,GAIJ,OAAO15D,GAOTpZ,EAAO+H,UAAUnlB,KAAO,SAAemmB,EAAK1c,EAAO3M,EAAKE,GAEtD,GAAmB,iBAARmpB,EAAkB,CAS3B,GARqB,iBAAV1c,GACTzM,EAAWyM,EACXA,EAAQ,EACR3M,EAAMjG,KAAKgB,QACa,iBAARiF,IAChBE,EAAWF,EACXA,EAAMjG,KAAKgB,aAEImD,IAAbgC,GAA8C,iBAAbA,EACnC,MAAM,IAAIupD,UAAU,6BAEtB,GAAwB,iBAAbvpD,IAA0BogB,EAAOqqE,WAAWzqF,GACrD,MAAM,IAAIupD,UAAU,qBAAuBvpD,GAE7C,GAAmB,IAAfmpB,EAAItuB,OAAc,CACpB,IAAIH,EAAOyuB,EAAIrH,WAAW,IACR,SAAb9hB,GAAuBtF,EAAO,KAClB,WAAbsF,KAEFmpB,EAAMzuB,QAGc,iBAARyuB,IAChBA,GAAY,KAId,GAAI1c,EAAQ,GAAK5S,KAAKgB,OAAS4R,GAAS5S,KAAKgB,OAASiF,EACpD,MAAM,IAAImsF,WAAW,sBAGvB,GAAInsF,GAAO2M,EACT,OAAO5S,KAQT,IAAIO,EACJ,GANAqS,KAAkB,EAClB3M,OAAc9B,IAAR8B,EAAoBjG,KAAKgB,OAASiF,IAAQ,EAE3CqpB,IAAKA,EAAM,GAGG,iBAARA,EACT,IAAK/uB,EAAIqS,EAAOrS,EAAI0F,IAAO1F,EACzBP,KAAKO,GAAK+uB,MAEP,CACL,IAAIyuC,EAAQx3C,EAAO42C,SAAS7tC,GACxBA,EACA/I,EAAOG,KAAK4I,EAAKnpB,GACjBw5B,EAAMo+B,EAAM/8D,OAChB,GAAY,IAAR2+B,EACF,MAAM,IAAI+vB,UAAU,cAAgBpgC,EAClC,qCAEJ,IAAK/uB,EAAI,EAAGA,EAAI0F,EAAM2M,IAASrS,EAC7BP,KAAKO,EAAIqS,GAASmrD,EAAMx9D,EAAIo/B,GAIhC,OAAO3/B,MAMT,IAAIu5F,EAAoB,oBAgBxB,SAASxC,EAAO32F,GACd,OAAIA,EAAI,GAAW,IAAMA,EAAEoK,SAAS,IAC7BpK,EAAEoK,SAAS,IAGpB,SAAS6oF,EAAar9B,EAAQk/B,GAE5B,IAAIO,EADJP,EAAQA,GAASzxF,EAAAA,EAMjB,IAJA,IAAIzC,EAASg1D,EAAOh1D,OAChBw4F,EAAgB,KAChBz7B,EAAQ,GAEHx9D,EAAI,EAAGA,EAAIS,IAAUT,EAAG,CAI/B,IAHAk1F,EAAYz/B,EAAO/tC,WAAW1nB,IAGd,OAAUk1F,EAAY,MAAQ,CAE5C,IAAK+D,EAAe,CAElB,GAAI/D,EAAY,MAAQ,EAEjBP,GAAS,IAAM,GAAGn3B,EAAM1tD,KAAK,IAAM,IAAM,KAC9C,SACK,GAAI9P,EAAI,IAAMS,EAAQ,EAEtBk0F,GAAS,IAAM,GAAGn3B,EAAM1tD,KAAK,IAAM,IAAM,KAC9C,SAIFmpF,EAAgB/D,EAEhB,SAIF,GAAIA,EAAY,MAAQ,EACjBP,GAAS,IAAM,GAAGn3B,EAAM1tD,KAAK,IAAM,IAAM,KAC9CmpF,EAAgB/D,EAChB,SAIFA,EAAkE,OAArD+D,EAAgB,OAAU,GAAK/D,EAAY,YAC/C+D,IAEJtE,GAAS,IAAM,GAAGn3B,EAAM1tD,KAAK,IAAM,IAAM,KAMhD,GAHAmpF,EAAgB,KAGZ/D,EAAY,IAAM,CACpB,IAAKP,GAAS,GAAK,EAAG,MACtBn3B,EAAM1tD,KAAKolF,QACN,GAAIA,EAAY,KAAO,CAC5B,IAAKP,GAAS,GAAK,EAAG,MACtBn3B,EAAM1tD,KACJolF,GAAa,EAAM,IACP,GAAZA,EAAmB,UAEhB,GAAIA,EAAY,MAAS,CAC9B,IAAKP,GAAS,GAAK,EAAG,MACtBn3B,EAAM1tD,KACJolF,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,SAEhB,CAAA,KAAIA,EAAY,SASrB,MAAM,IAAI70F,MAAM,sBARhB,IAAKs0F,GAAS,GAAK,EAAG,MACtBn3B,EAAM1tD,KACJolF,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,MAOzB,OAAO13B,EA4BT,SAASu1B,EAAe7sE,GACtB,OAAOkN,EAAO+oD,YA7HhB,SAAsBj2D,GAMpB,IAFAA,GAFAA,EAAMA,EAAInT,MAAM,KAAK,IAEX6hD,OAAO5oD,QAAQgtF,EAAmB,KAEpCv4F,OAAS,EAAG,MAAO,GAE3B,KAAOylB,EAAIzlB,OAAS,GAAM,GACxBylB,GAAY,IAEd,OAAOA,EAkHmBgzE,CAAYhzE,IAGxC,SAASkuE,EAAY/xE,EAAK+F,EAAKniB,EAAQxF,GACrC,IAAK,IAAIT,EAAI,EAAGA,EAAIS,KACbT,EAAIiG,GAAUmiB,EAAI3nB,QAAYT,GAAKqiB,EAAI5hB,UADhBT,EAE5BooB,EAAIpoB,EAAIiG,GAAUoc,EAAIriB,GAExB,OAAOA,EAMT,SAASmyF,EAAYnqE,EAAK7e,GACxB,OAAO6e,aAAe7e,GACZ,MAAP6e,GAAkC,MAAnBA,EAAIlF,aAA+C,MAAxBkF,EAAIlF,YAAYvY,MACzDyd,EAAIlF,YAAYvY,OAASpB,EAAKoB,KAEpC,SAASioF,EAAaxqE,GAEpB,OAAOA,GAAQA,6HC/uDjB,IAAIhC,EAAS9lB,EAAQ,eAAe8lB,OAChC2lC,EAAYzrD,EAAQ,UAAUyrD,UAC9BwG,EAAgBjyD,EAAQ,kBAAkBiyD,cAG9C,SAASw2B,EAAYwQ,GACnBxtC,EAAUnrD,KAAKf,MACfA,KAAK05F,SAA+B,iBAAbA,EACnB15F,KAAK05F,SACP15F,KAAK05F,GAAY15F,KAAK25F,eAEtB35F,KAAKmjF,MAAQnjF,KAAK25F,eAEhB35F,KAAKkjF,SACPljF,KAAK45F,QAAU55F,KAAKkjF,OACpBljF,KAAKkjF,OAAS,MAEhBljF,KAAK65F,SAAW,KAChB75F,KAAK6rB,UAAY,KAfJprB,EAAQ,WAiBvBwsB,CAASi8D,EAAYh9B,GAErBg9B,EAAW56D,UAAUnF,OAAS,SAAU3kB,EAAMs1F,EAAUC,GAClC,iBAATv1F,IACTA,EAAO+hB,EAAOG,KAAKliB,EAAMs1F,IAG3B,IAAIE,EAAUh6F,KAAK+iF,QAAQv+E,GAC3B,OAAIxE,KAAK05F,SAAiB15F,MAEtB+5F,IACFC,EAAUh6F,KAAKi6F,UAAUD,EAASD,IAG7BC,IAGT9Q,EAAW56D,UAAU42D,eAAiB,aACtCgE,EAAW56D,UAAU+0D,WAAa,WAChC,MAAM,IAAIziF,MAAM,gDAGlBsoF,EAAW56D,UAAUg1D,WAAa,WAChC,MAAM,IAAI1iF,MAAM,gDAGlBsoF,EAAW56D,UAAUi1D,OAAS,WAC5B,MAAM,IAAI3iF,MAAM,2CAGlBsoF,EAAW56D,UAAU4rE,WAAa,SAAU11F,EAAMqD,EAAG4I,GACnD,IAAI4Z,EACJ,IACMrqB,KAAK05F,SACP15F,KAAK+iF,QAAQv+E,GAEbxE,KAAKqQ,KAAKrQ,KAAK+iF,QAAQv+E,IAEzB,MAAOrE,GACPkqB,EAAMlqB,EACP,QACCsQ,EAAK4Z,KAGT6+D,EAAW56D,UAAUR,OAAS,SAAUylC,GACtC,IAAIlpC,EACJ,IACErqB,KAAKqQ,KAAKrQ,KAAK45F,WACf,MAAOz5F,GACPkqB,EAAMlqB,EAGRozD,EAAKlpC,IAEP6+D,EAAW56D,UAAUqrE,eAAiB,SAAUI,GAC9C,IAAIC,EAAUh6F,KAAK45F,WAAarzE,EAAOoD,MAAM,GAI7C,OAHIowE,IACFC,EAAUh6F,KAAKi6F,UAAUD,EAASD,GAAW,IAExCC,GAGT9Q,EAAW56D,UAAU2rE,UAAY,SAAU/0F,EAAOusD,EAAK0oC,GAMrD,GALKn6F,KAAK65F,WACR75F,KAAK65F,SAAW,IAAInnC,EAAcjB,GAClCzxD,KAAK6rB,UAAY4lC,GAGfzxD,KAAK6rB,YAAc4lC,EAAK,MAAM,IAAI7wD,MAAM,0BAE5C,IAAIq9D,EAAMj+D,KAAK65F,SAAS/zF,MAAMZ,GAK9B,OAJIi1F,IACFl8B,GAAOj+D,KAAK65F,SAAS5zF,OAGhBg4D,GAGTv+D,EAAOD,QAAUypF,qGCMjB,SAASkR,EAAe95F,GACtB,OAAOgV,OAAOgZ,UAAU9jB,SAASzJ,KAAKT,GA3ExCb,EAAQilB,QANR,SAAiB46C,GACf,OAAIzwD,MAAM6V,QACD7V,MAAM6V,QAAQ46C,GAEQ,mBAAxB86B,EAAe96B,IAOxB7/D,EAAQ46F,UAHR,SAAmB/6B,GACjB,MAAsB,kBAARA,GAOhB7/D,EAAQ66F,OAHR,SAAgBh7B,GACd,OAAe,OAARA,GAOT7/D,EAAQ86F,kBAHR,SAA2Bj7B,GACzB,OAAc,MAAPA,GAOT7/D,EAAQ+6F,SAHR,SAAkBl7B,GAChB,MAAsB,iBAARA,GAOhB7/D,EAAQg7F,SAHR,SAAkBn7B,GAChB,MAAsB,iBAARA,GAOhB7/D,EAAQi7F,SAHR,SAAkBp7B,GAChB,MAAsB,iBAARA,GAOhB7/D,EAAQ4vB,YAHR,SAAqBiwC,GACnB,YAAe,IAARA,GAOT7/D,EAAQk7F,SAHR,SAAkBr1B,GAChB,MAA8B,oBAAvB80B,EAAe90B,IAOxB7lE,EAAQ8vB,SAHR,SAAkB+vC,GAChB,MAAsB,iBAARA,GAA4B,OAARA,GAOpC7/D,EAAQm7F,OAHR,SAAgBnqE,GACd,MAA6B,kBAAtB2pE,EAAe3pE,IAOxBhxB,EAAQygE,QAHR,SAAiB//D,GACf,MAA8B,mBAAtBi6F,EAAej6F,IAA2BA,aAAaS,OAOjEnB,EAAQo7F,WAHR,SAAoBv7B,GAClB,MAAsB,mBAARA,GAYhB7/D,EAAQmxC,YARR,SAAqB0uB,GACnB,OAAe,OAARA,GACe,kBAARA,GACQ,iBAARA,GACQ,iBAARA,GACQ,iBAARA,QACQ,IAARA,GAIhB7/D,EAAQ09D,SAAW18D,EAAQ,UAAU8lB,OAAO42C,mFCtG5C,IAAI29B,EAAWr6F,EAAQ,YACnBqmE,EAAKrmE,EAAQ,SAEjBf,EAAOD,QAAU,SAAqByvF,GACpC,OAAO,IAAI6L,EAAK7L,IAGlB,IAAI8L,EAAU,CACZC,UAAW,CACTnwF,KAAM,YACNwyD,WAAY,IAEd49B,UAAW,CACTpwF,KAAM,OACNwyD,WAAY,IAEd69B,WAAY,CACVrwF,KAAM,OACNwyD,WAAY,IAEd89B,WAAY,CACVtwF,KAAM,OACNwyD,WAAY,IAEd+9B,QAAS,CACPvwF,KAAM,UACNwyD,WAAY,IAEdg+B,UAAW,CACTxwF,KAAM,OACNwyD,WAAY,IAEdi+B,UAAW,CACTzwF,KAAM,OACNwyD,WAAY,KAUhB,SAASy9B,EAAM7L,GACblvF,KAAKw7F,UAAYR,EAAQ9L,GACpBlvF,KAAKw7F,YACRx7F,KAAKw7F,UAAY,CACf1wF,KAAMokF,IAGVlvF,KAAKkvF,MAAQ,IAAI4L,EAAS3M,GAAGnuF,KAAKw7F,UAAU1wF,MAC5C9K,KAAKuV,UAAO,EAwDd,SAASkmF,EAAmBC,EAAIjqC,EAAK9xB,GAC9B9wB,MAAM6V,QAAQg3E,KACjBA,EAAKA,EAAGn1B,WAEV,IAAIh6C,EAAM,IAAIhG,EAAOm1E,GACrB,GAAI/7D,GAAOpT,EAAIvrB,OAAS2+B,EAAK,CAC3B,IAAIkpC,EAAQ,IAAItiD,EAAOoZ,EAAMpT,EAAIvrB,QACjC6nE,EAAM1/D,KAAK,GACXojB,EAAMhG,EAAO6C,OAAO,CAACy/C,EAAOt8C,IAE9B,OAAKklC,EAGIllC,EAAI/hB,SAASinD,GAFbllC,EAjFXyuE,EAAQ1gB,KAAO0gB,EAAQE,UACvBF,EAAQW,KAAOX,EAAQY,UAAYZ,EAAQG,WAC3CH,EAAQzgB,KAAOygB,EAAQa,UAAYb,EAAQI,WAC3CJ,EAAQc,KAAOd,EAAQM,UACvBN,EAAQe,KAAOf,EAAQO,UAavBR,EAAKzsE,UAAU0tE,aAAe,SAAUvqC,EAAK3sD,GAE3C,OADA9E,KAAKuV,KAAOvV,KAAKkvF,MAAM+M,aAChBj8F,KAAKk8F,aAAazqC,EAAK3sD,IAGhCi2F,EAAKzsE,UAAU6tE,cAAgB,SAAU5sF,EAAO6sF,EAAO3qC,GAOrD,OANA2qC,EAAQA,GAAS,OACZ71E,EAAO42C,SAAS5tD,KACnBA,EAAQ,IAAIgX,EAAOhX,EAAO6sF,IAIrBX,EAFQz7F,KAAKkvF,MAAMmN,cAAc9sF,GAAO+sF,YAC5B70B,IAAIznE,KAAKuV,KAAKgnF,cAAcC,OACjB/qC,EAAKzxD,KAAKw7F,UAAUl+B,aAGpDy9B,EAAKzsE,UAAU4tE,aAAe,SAAUzqC,EAAK3sD,GAC3C,IAAIyJ,EAAMvO,KAAKuV,KAAK+mF,UAAqB,eAAXx3F,GAAyB,GAQvD,MAPe,WAAXA,IACEyJ,EAAIA,EAAIvN,OAAS,GAAK,EACxBuN,EAAI,GAAK,EAETA,EAAI,GAAK,GAGNktF,EAAkBltF,EAAKkjD,IAGhCspC,EAAKzsE,UAAUmuE,cAAgB,SAAUhrC,GACvC,OAAOgqC,EAAkBz7F,KAAKuV,KAAKgnF,aAAc9qC,IAGnDspC,EAAKzsE,UAAUouE,aAAe,SAAU7M,EAAKp+B,GAM3C,OALAA,EAAMA,GAAO,OACRlrC,EAAO42C,SAAS0yB,KACnBA,EAAM,IAAItpE,EAAOspE,EAAKp+B,IAExBzxD,KAAKuV,KAAKonF,cAAc9M,GACjB7vF,MAGT+6F,EAAKzsE,UAAUsuE,cAAgB,SAAU5S,EAAMv4B,GAC7CA,EAAMA,GAAO,OACRlrC,EAAO42C,SAAS6sB,KACnBA,EAAO,IAAIzjE,EAAOyjE,EAAMv4B,IAG1B,IAAIorC,EAAQ,IAAI/1B,EAAGkjB,GAInB,OAHA6S,EAAQA,EAAMryF,SAAS,IACvBxK,KAAKuV,KAAOvV,KAAKkvF,MAAM+M,aACvBj8F,KAAKuV,KAAKunF,eAAeD,GAClB78F,oMCzGT,aACA,IAAIitB,EAAWxsB,EAAQ,YACnBs8F,EAAMt8F,EAAQ,UACdu8F,EAAYv8F,EAAQ,aACpBw8F,EAAMx8F,EAAQ,UACdi8D,EAAOj8D,EAAQ,eAEnB,SAASy8F,EAAMl0E,GACb0zC,EAAK37D,KAAKf,KAAM,UAEhBA,KAAK4nB,MAAQoB,EAGfiE,EAASiwE,EAAMxgC,GAEfwgC,EAAK5uE,UAAUy0D,QAAU,SAAUv+E,GACjCxE,KAAK4nB,MAAMuB,OAAO3kB,IAGpB04F,EAAK5uE,UAAU40D,OAAS,WACtB,OAAOljF,KAAK4nB,MAAMyB,UAGpB3pB,EAAOD,QAAU,SAAqB09F,GAEpC,MAAY,SADZA,EAAMA,EAAIh8E,eACgB,IAAI47E,EAClB,WAARI,GAA4B,cAARA,EAA4B,IAAIH,EAEjD,IAAIE,EAAKD,EAAIE,kHC5BtB,IAAIJ,EAAMt8F,EAAQ,UAElBf,EAAOD,QAAU,SAAUknB,GACzB,OAAO,IAAIo2E,GAAM5zE,OAAOxC,GAAQ0C,gDCHlC,aACA,IAAI4D,EAAWxsB,EAAQ,YACnB28F,EAAS38F,EAAQ,YACjBi8D,EAAOj8D,EAAQ,eACf8lB,EAAS9lB,EAAQ,eAAe8lB,OAChC82E,EAAM58F,EAAQ,mBACdu8F,EAAYv8F,EAAQ,aAEpBw8F,EAAMx8F,EAAQ,UAEd68F,EAAQ/2E,EAAOoD,MAAM,KAEzB,SAAS4zE,EAAMJ,EAAK5uF,GAClBmuD,EAAK37D,KAAKf,KAAM,UACG,iBAARuO,IACTA,EAAMgY,EAAOG,KAAKnY,IAGpB,IAAIivF,EAAqB,WAARL,GAA4B,WAARA,EAAoB,IAAM,IAE/Dn9F,KAAKy9F,KAAON,EACZn9F,KAAK2O,KAAOJ,EACRA,EAAIvN,OAASw8F,GAEfjvF,GADmB,WAAR4uF,EAAmB,IAAIH,EAAcC,EAAIE,IACzCh0E,OAAO5a,GAAK8a,SACd9a,EAAIvN,OAASw8F,IACtBjvF,EAAMgY,EAAO6C,OAAO,CAAC7a,EAAK+uF,GAAQE,IAMpC,IAHA,IAAIE,EAAO19F,KAAK29F,MAAQp3E,EAAOo3D,YAAY6f,GACvCI,EAAO59F,KAAK69F,MAAQt3E,EAAOo3D,YAAY6f,GAElCj9F,EAAI,EAAGA,EAAIi9F,EAAWj9F,IAC7Bm9F,EAAKn9F,GAAc,GAATgO,EAAIhO,GACdq9F,EAAKr9F,GAAc,GAATgO,EAAIhO,GAEhBP,KAAK4nB,MAAgB,WAARu1E,EAAmB,IAAIH,EAAcC,EAAIE,GACtDn9F,KAAK4nB,MAAMuB,OAAOu0E,GAGpBzwE,EAASswE,EAAM7gC,GAEf6gC,EAAKjvE,UAAUy0D,QAAU,SAAUv+E,GACjCxE,KAAK4nB,MAAMuB,OAAO3kB,IAGpB+4F,EAAKjvE,UAAU40D,OAAS,WACtB,IAAI3nC,EAAIv7C,KAAK4nB,MAAMyB,SAEnB,OADyB,WAAdrpB,KAAKy9F,KAAoB,IAAIT,EAAcC,EAAIj9F,KAAKy9F,OACnDt0E,OAAOnpB,KAAK69F,OAAO10E,OAAOoyB,GAAGlyB,UAG3C3pB,EAAOD,QAAU,SAAqB09F,EAAK5uF,GAEzC,MAAY,YADZ4uF,EAAMA,EAAIh8E,gBACsB,cAARg8E,EACf,IAAII,EAAK,SAAUhvF,GAEhB,QAAR4uF,EACK,IAAIC,EAAOC,EAAK9uF,GAElB,IAAIgvF,EAAKJ,EAAK5uF,8IC5DvB,aACA,IAAI0e,EAAWxsB,EAAQ,YACnB8lB,EAAS9lB,EAAQ,eAAe8lB,OAEhCm2C,EAAOj8D,EAAQ,eAEf68F,EAAQ/2E,EAAOoD,MAAM,KAGzB,SAAS4zE,EAAMJ,EAAK5uF,GAClBmuD,EAAK37D,KAAKf,KAAM,UACG,iBAARuO,IACTA,EAAMgY,EAAOG,KAAKnY,IAGpBvO,KAAKy9F,KAAON,EACZn9F,KAAK2O,KAAOJ,EAERA,EAAIvN,OAXM,GAYZuN,EAAM4uF,EAAI5uF,GACDA,EAAIvN,OAbD,KAcZuN,EAAMgY,EAAO6C,OAAO,CAAC7a,EAAK+uF,GAdd,KAoBd,IAHA,IAAII,EAAO19F,KAAK29F,MAAQp3E,EAAOo3D,YAjBjB,IAkBVigB,EAAO59F,KAAK69F,MAAQt3E,EAAOo3D,YAlBjB,IAoBLp9E,EAAI,EAAGA,EApBF,GAoBiBA,IAC7Bm9F,EAAKn9F,GAAc,GAATgO,EAAIhO,GACdq9F,EAAKr9F,GAAc,GAATgO,EAAIhO,GAGhBP,KAAK4nB,MAAQ,CAAC81E,GAGhBzwE,EAASswE,EAAM7gC,GAEf6gC,EAAKjvE,UAAUy0D,QAAU,SAAUv+E,GACjCxE,KAAK4nB,MAAMvX,KAAK7L,IAGlB+4F,EAAKjvE,UAAU40D,OAAS,WACtB,IAAI3nC,EAAIv7C,KAAKy9F,KAAKl3E,EAAO6C,OAAOppB,KAAK4nB,QACrC,OAAO5nB,KAAKy9F,KAAKl3E,EAAO6C,OAAO,CAACppB,KAAK69F,MAAOtiD,MAE9C77C,EAAOD,QAAU89F,4EC7CjB,aAEA99F,EAAQ0lB,YAAc1lB,EAAQq+F,IAAMr+F,EAAQs+F,kBAAoBt+F,EAAQu+F,KAAOv9F,EAAQ,eACvFhB,EAAQwpB,WAAaxpB,EAAQy9F,KAAOz8F,EAAQ,eAC5ChB,EAAQwuF,WAAaxuF,EAAQ89F,KAAO98F,EAAQ,eAE5C,IAAIw9F,EAAQx9F,EAAQ,yBAChBy9F,EAAW5oF,OAAOC,KAAK0oF,GACvBE,EAAS,CAAC,OAAQ,SAAU,SAAU,SAAU,SAAU,MAAO,UAAU/0E,OAAO80E,GACtFz+F,EAAQ8pB,UAAY,WAClB,OAAO40E,GAGT,IAAIr9F,EAAIL,EAAQ,UAChBhB,EAAQ2+F,OAASt9F,EAAEs9F,OACnB3+F,EAAQ4+F,WAAav9F,EAAEu9F,WAEvB,IAAI7c,EAAM/gF,EAAQ,qBAElBhB,EAAQmkF,OAASpC,EAAIoC,OACrBnkF,EAAQkkF,aAAenC,EAAImC,aAC3BlkF,EAAQqkF,SAAWtC,EAAIsC,SACvBrkF,EAAQokF,eAAiBrC,EAAIqC,eAC7BpkF,EAAQukF,SAAWxC,EAAIwC,SACvBvkF,EAAQskF,eAAiBvC,EAAIuC,eAC7BtkF,EAAQykF,WAAa1C,EAAI0C,WACzBzkF,EAAQwkF,iBAAmBzC,EAAIyC,iBAC/BxkF,EAAQ2kF,WAAa5C,EAAI4C,WACzB3kF,EAAQ0kF,YAAc3C,EAAI2C,YAE1B,IAAIma,EAAK79F,EAAQ,kBAEjBhB,EAAQ8+F,mBAAqBD,EAAGC,mBAChC9+F,EAAQ++F,yBAA2BF,EAAGE,yBACtC/+F,EAAQg/F,iBAAmBH,EAAGG,iBAC9Bh/F,EAAQi/F,oBAAsBJ,EAAGI,oBACjCj/F,EAAQk/F,cAAgBL,EAAGK,cAE3B,IAAIn4B,EAAO/lE,EAAQ,mBAEnBhB,EAAQouF,WAAarnB,EAAKqnB,WAC1BpuF,EAAQ+tF,KAAOhnB,EAAKgnB,KACpB/tF,EAAQquF,aAAetnB,EAAKsnB,aAC5BruF,EAAQmuF,OAASpnB,EAAKonB,OAEtBnuF,EAAQm/F,WAAan+F,EAAQ,eAE7B,IAAIo+F,EAAgBp+F,EAAQ,kBAE5BhB,EAAQo/F,cAAgBA,EAAcA,cACtCp/F,EAAQq/F,eAAiBD,EAAcC,eACvCr/F,EAAQs/F,cAAgBF,EAAcE,cACtCt/F,EAAQu/F,eAAiBH,EAAcG,eAevC,IAAIrgE,EAAKl+B,EAAQ,cAEjBhB,EAAQw/F,WAAatgE,EAAGsgE,WACxBx/F,EAAQy/F,eAAiBvgE,EAAGugE,eAE5Bz/F,EAAQ0/F,kBAAoB,WAC1B,MAAM,IAAIv+F,MAAM,CACd,kDACA,0BACA,0DACAkN,KAAK,QAGTrO,EAAQ4xB,UAAY,CAClB+tE,0BAA6B,EAC7BC,qBAAwB,EACxBC,6BAAgC,EAChCC,0BAA6B,EAC7BC,YAAe,EACfC,aAAgB,EAChBC,kBAAqB,EACrBC,mBAAsB,EACtBC,eAAkB,EAClBC,uBAA0B,EAC1BC,iBAAoB,EACpBC,sBAAyB,EACzBC,4BAA+B,EAC/BC,8BAAiC,EACjCC,wBAA2B,8PC/F5B,SAAS7/F,EAAEF,GAAG,iBAAiBV,QAAS,IAAoBC,EAAOA,EAAOD,QAAQU,KAAqDE,EAAE,oBAAoB8/F,WAAWA,WAAW9/F,GAAGN,MAAMuB,MAAMnB,IAAlM,MAAsM,GAAO,WAAwB,IAAUA,EAAE,IAAIC,EAAE,KAAKF,EAAE,cAAcK,EAAE,SAASmP,EAAE,SAAShP,EAAE,OAAOC,EAAE,MAAML,EAAE,OAAOE,EAAE,QAAQhB,EAAE,UAAU+7C,EAAE,OAAO9qB,EAAE,OAAO5a,EAAE,eAAe6nB,EAAE,6FAA6FxrB,EAAE,sFAAsF0sE,EAAE,CAAC9zE,KAAK,KAAKs1F,SAAS,2DAA2D9sF,MAAM,KAAK+sF,OAAO,wFAAwF/sF,MAAM,KAAKgtF,QAAQ,SAASjgG,GAAG,IAAIF,EAAE,CAAC,KAAK,KAAK,KAAK,MAAMC,EAAEC,EAAE,IAAI,MAAM,IAAIA,GAAGF,GAAGC,EAAE,IAAI,KAAKD,EAAEC,IAAID,EAAE,IAAI,MAAMykB,EAAE,SAASvkB,EAAEF,EAAEC,GAAG,IAAIF,EAAEyK,OAAOtK,GAAG,OAAOH,GAAGA,EAAEc,QAAQb,EAAEE,EAAE,GAAGwO,MAAM1O,EAAE,EAAED,EAAEc,QAAQ8M,KAAK1N,GAAGC,GAAGgH,EAAE,CAACqI,EAAEkV,EAAEm3D,EAAE,SAAS17E,GAAG,IAAIF,GAAGE,EAAEkgG,YAAYngG,EAAE8G,KAAK2jE,IAAI1qE,GAAGD,EAAEgH,KAAKI,MAAMlH,EAAE,IAAIG,EAAEH,EAAE,GAAG,OAAOD,GAAG,EAAE,IAAI,KAAKykB,EAAE1kB,EAAE,EAAE,KAAK,IAAI0kB,EAAErkB,EAAE,EAAE,MAAMqkB,EAAE,SAASvkB,EAAEF,EAAEC,GAAG,GAAGD,EAAE4lE,OAAO3lE,EAAE2lE,OAAO,OAAO1lE,EAAED,EAAED,GAAG,IAAID,EAAE,IAAIE,EAAEykE,OAAO1kE,EAAE0kE,SAASzkE,EAAEogG,QAAQrgG,EAAEqgG,SAASjgG,EAAEJ,EAAEqvB,QAAQ9jB,IAAIxL,EAAEM,GAAGkP,EAAEtP,EAAEG,EAAE,EAAEG,EAAEP,EAAEqvB,QAAQ9jB,IAAIxL,GAAGwP,GAAG,EAAE,GAAGlP,GAAG,UAAUN,GAAGE,EAAEG,IAAImP,EAAEnP,EAAEG,EAAEA,EAAEH,KAAK,IAAII,EAAE,SAASN,GAAG,OAAOA,EAAE,EAAE6G,KAAK6gE,KAAK1nE,IAAI,EAAE6G,KAAKI,MAAMjH,IAAIS,EAAE,SAAST,GAAG,MAAM,CAACu+E,EAAEp+E,EAAE0R,EAAEqpC,EAAEysB,EAAE1nE,EAAEmwB,EAAE9vB,EAAEq2E,EAAEvmD,EAAE8qB,EAAE76C,EAAEkkB,EAAElV,EAAEA,EAAEnP,EAAEkgG,GAAGvgG,EAAEwgG,EAAElhG,GAAGa,IAAIsK,OAAOtK,GAAG,IAAI8gB,cAAc5U,QAAQ,KAAK,KAAK7L,EAAE,SAASL,GAAG,YAAO,IAASA,IAAI42E,EAAE,KAAKD,EAAE,GAAGA,EAAEC,GAAG2H,EAAE,IAAI99E,EAAE,iBAAiB6/F,EAAE,SAAStgG,GAAG,OAAOA,aAAawH,MAAMxH,IAAIA,EAAES,KAAKknE,EAAE,SAAS3nE,EAAEF,EAAEC,EAAEF,GAAG,IAAIK,EAAE,IAAIJ,EAAE,OAAO82E,EAAE,GAAG,iBAAiB92E,EAAE,CAAC,IAAIuP,EAAEvP,EAAEghB,cAAc61D,EAAEtnE,KAAKnP,EAAEmP,GAAGtP,IAAI42E,EAAEtnE,GAAGtP,EAAEG,EAAEmP,GAAG,IAAIhP,EAAEP,EAAEmT,MAAM,KAAK,IAAI/S,GAAGG,EAAEM,OAAO,EAAE,OAAOX,EAAEK,EAAE,QAAQ,CAAC,IAAIC,EAAER,EAAE2K,KAAKksE,EAAEr2E,GAAGR,EAAEI,EAAEI,EAAE,OAAOT,GAAGK,IAAI02E,EAAE12E,GAAGA,IAAIL,GAAG+2E,GAAG2pB,EAAE,SAASvgG,EAAEF,GAAG,GAAGwgG,EAAEtgG,GAAG,OAAOA,EAAEmvB,QAAQ,IAAIpvB,EAAE,iBAAiBD,EAAEA,EAAE,GAAG,OAAOC,EAAE2lE,KAAK1lE,EAAED,EAAEw0D,KAAKnuD,UAAU,IAAIoB,EAAEzH,IAAI0V,EAAEzO,EAAEyO,EAAED,EAAEmyD,EAAElyD,EAAEvV,EAAEogG,EAAE7qF,EAAEkyD,EAAE,SAAS3nE,EAAEF,GAAG,OAAOygG,EAAEvgG,EAAE,CAACwgG,OAAO1gG,EAAE2gG,GAAGz/F,IAAIlB,EAAE4gG,GAAG9uF,EAAE9R,EAAE6gG,GAAGC,QAAQ9gG,EAAE8gG,WAAW,IAAIp5F,EAAE,WAAW,SAAS+2E,EAAEv+E,GAAGL,KAAK8gG,GAAG94B,EAAE3nE,EAAEwgG,OAAO,MAAK,GAAI7gG,KAAKqE,MAAMhE,GAAGL,KAAKghG,GAAGhhG,KAAKghG,IAAI3gG,EAAE4R,GAAG,GAAGjS,KAAKc,IAAG,EAAG,IAAI8jB,EAAEg6D,EAAEtwD,UAAU,OAAO1J,EAAEvgB,MAAM,SAAShE,GAAGL,KAAKkhG,GAAG,SAAS7gG,GAAG,IAAIF,EAAEE,EAAE0lE,KAAK3lE,EAAEC,EAAEgB,IAAI,GAAG,OAAOlB,EAAE,OAAO,IAAI6D,KAAKm9F,KAAK,GAAGrrF,EAAEpV,EAAEP,GAAG,OAAO,IAAI6D,KAAK,GAAG7D,aAAa6D,KAAK,OAAO,IAAIA,KAAK7D,GAAG,GAAG,iBAAiBA,IAAI,MAAMkT,KAAKlT,GAAG,CAAC,IAAID,EAAEC,EAAE8M,MAAMywB,GAAG,GAAGx9B,EAAE,CAAC,IAAIK,EAAEL,EAAE,GAAG,GAAG,EAAEwP,GAAGxP,EAAE,IAAI,KAAKghB,UAAU,EAAE,GAAG,OAAO9gB,EAAE,IAAI4D,KAAKA,KAAKkhE,IAAIhlE,EAAE,GAAGK,EAAEL,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEwP,IAAI,IAAI1L,KAAK9D,EAAE,GAAGK,EAAEL,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEwP,IAAI,OAAO,IAAI1L,KAAK7D,GAAzX,CAA6XE,GAAGL,KAAKsjD,QAAQ1+B,EAAE0+B,KAAK,WAAW,IAAIjjD,EAAEL,KAAKkhG,GAAGlhG,KAAKohG,GAAG/gG,EAAEghG,cAAcrhG,KAAKshG,GAAGjhG,EAAEkhG,WAAWvhG,KAAKwhG,GAAGnhG,EAAEohG,UAAUzhG,KAAK0hG,GAAGrhG,EAAEshG,SAAS3hG,KAAK4hG,GAAGvhG,EAAEwhG,WAAW7hG,KAAK8hG,GAAGzhG,EAAE0hG,aAAa/hG,KAAKgiG,GAAG3hG,EAAE4hG,aAAajiG,KAAKkiG,IAAI7hG,EAAE8hG,mBAAmBv9E,EAAEw9E,OAAO,WAAW,OAAOtsF,GAAG8O,EAAE7gB,QAAQ,WAAW,QAAQ/D,KAAKkhG,GAAG12F,aAAaqL,IAAI+O,EAAEy9E,OAAO,SAAShiG,EAAEF,GAAG,IAAIC,EAAEwgG,EAAEvgG,GAAG,OAAOL,KAAKsiG,QAAQniG,IAAIC,GAAGA,GAAGJ,KAAKuiG,MAAMpiG,IAAIykB,EAAE49E,QAAQ,SAASniG,EAAEF,GAAG,OAAOygG,EAAEvgG,GAAGL,KAAKsiG,QAAQniG,IAAIykB,EAAE69E,SAAS,SAASpiG,EAAEF,GAAG,OAAOH,KAAKuiG,MAAMpiG,GAAGygG,EAAEvgG,IAAIukB,EAAE89E,GAAG,SAASriG,EAAEF,EAAEC,GAAG,OAAO0V,EAAEpV,EAAEL,GAAGL,KAAKG,GAAGH,KAAK2kD,IAAIvkD,EAAEC,IAAIukB,EAAE+9E,KAAK,WAAW,OAAOz7F,KAAKI,MAAMtH,KAAKiE,UAAU,MAAM2gB,EAAE3gB,QAAQ,WAAW,OAAOjE,KAAKkhG,GAAGvwE,WAAW/L,EAAE09E,QAAQ,SAASjiG,EAAEF,GAAG,IAAIC,EAAEJ,KAAKE,IAAI4V,EAAEpV,EAAEP,IAAIA,EAAEX,EAAEsW,EAAEhV,EAAET,GAAGwV,EAAE,SAASxV,EAAEF,GAAG,IAAII,EAAEuV,EAAEkyD,EAAE5nE,EAAE2gG,GAAG/8F,KAAKkhE,IAAI9kE,EAAEghG,GAAGjhG,EAAEE,GAAG,IAAI2D,KAAK5D,EAAEghG,GAAGjhG,EAAEE,GAAGD,GAAG,OAAOF,EAAEK,EAAEA,EAAEgiG,MAAM5hG,IAAI+8B,EAAE,SAASr9B,EAAEF,GAAG,OAAO2V,EAAEkyD,EAAE5nE,EAAEwiG,SAASviG,GAAGuhB,MAAMxhB,EAAEwiG,OAAO,MAAM1iG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM+c,MAAM9c,IAAIC,IAAI8R,EAAElS,KAAK0hG,GAAG9iB,EAAE5+E,KAAKshG,GAAG18E,EAAE5kB,KAAKwhG,GAAGn6F,EAAE,OAAOrH,KAAK+gG,GAAG,MAAM,IAAI,OAAOvhG,GAAG,KAAK+7C,EAAE,OAAOr7C,EAAE2V,EAAE,EAAE,GAAGA,EAAE,GAAG,IAAI,KAAKrV,EAAE,OAAON,EAAE2V,EAAE,EAAE+oE,GAAG/oE,EAAE,EAAE+oE,EAAE,GAAG,KAAKt+E,EAAE,IAAI22E,EAAEj3E,KAAK6iG,UAAUC,WAAW,EAAE9rB,GAAG9kE,EAAE+kE,EAAE/kE,EAAE,EAAEA,GAAG+kE,EAAE,OAAOphE,EAAE3V,EAAE0kB,EAAEoyD,EAAEpyD,GAAG,EAAEoyD,GAAG4H,GAAG,KAAKj+E,EAAE,KAAK8vB,EAAE,OAAOiN,EAAEr2B,EAAE,QAAQ,GAAG,KAAK3G,EAAE,OAAOg9B,EAAEr2B,EAAE,UAAU,GAAG,KAAKqI,EAAE,OAAOguB,EAAEr2B,EAAE,UAAU,GAAG,KAAK9G,EAAE,OAAOm9B,EAAEr2B,EAAE,eAAe,GAAG,QAAQ,OAAOrH,KAAKwvB,UAAU5K,EAAE29E,MAAM,SAASliG,GAAG,OAAOL,KAAKsiG,QAAQjiG,GAAE,IAAKukB,EAAEm+E,KAAK,SAAS1iG,EAAEF,GAAG,IAAIC,EAAEE,EAAEwV,EAAEhV,EAAET,GAAGb,EAAE,OAAOQ,KAAK+gG,GAAG,MAAM,IAAIlrF,GAAGzV,EAAE,GAAGA,EAAEO,GAAGnB,EAAE,OAAOY,EAAEqwB,GAAGjxB,EAAE,OAAOY,EAAEI,GAAGhB,EAAE,QAAQY,EAAEm7C,GAAG/7C,EAAE,WAAWY,EAAEM,GAAGlB,EAAE,QAAQY,EAAEsP,GAAGlQ,EAAE,UAAUY,EAAEG,GAAGf,EAAE,UAAUY,EAAEF,GAAGV,EAAE,eAAeY,GAAGE,GAAGo9B,EAAEp9B,IAAIK,EAAEX,KAAKwhG,IAAIrhG,EAAEH,KAAK0hG,IAAIvhG,EAAE,GAAGG,IAAIE,GAAGF,IAAIi7C,EAAE,CAAC,IAAIrpC,EAAElS,KAAKwvB,QAAQm1B,IAAIl0B,EAAE,GAAGve,EAAEgvF,GAAGrrF,GAAG6nB,GAAGxrB,EAAEoxC,OAAOtjD,KAAKkhG,GAAGhvF,EAAEyyC,IAAIl0B,EAAEvpB,KAAKC,IAAInH,KAAKwhG,GAAGtvF,EAAE8wF,gBAAgB9B,QAAQrrF,GAAG7V,KAAKkhG,GAAGrrF,GAAG6nB,GAAG,OAAO19B,KAAKsjD,OAAOtjD,MAAM4kB,EAAE+/B,IAAI,SAAStkD,EAAEF,GAAG,OAAOH,KAAKwvB,QAAQuzE,KAAK1iG,EAAEF,IAAIykB,EAAE6/B,IAAI,SAASpkD,GAAG,OAAOL,KAAK8V,EAAEhV,EAAET,OAAOukB,EAAElZ,IAAI,SAASxL,EAAEV,GAAG,IAAIixB,EAAE5a,EAAE7V,KAAKE,EAAEqD,OAAOrD,GAAG,IAAIw9B,EAAE5nB,EAAEhV,EAAEtB,GAAG0S,EAAE,SAAS7R,GAAG,IAAIF,EAAEygG,EAAE/qF,GAAG,OAAOC,EAAEkyD,EAAE7nE,EAAE4lE,KAAK5lE,EAAE4lE,OAAO7+D,KAAK8d,MAAM3kB,EAAEH,IAAI2V,IAAI,GAAG6nB,IAAIl9B,EAAE,OAAOR,KAAK2kD,IAAInkD,EAAER,KAAKshG,GAAGphG,GAAG,GAAGw9B,IAAI6d,EAAE,OAAOv7C,KAAK2kD,IAAIpJ,EAAEv7C,KAAKohG,GAAGlhG,GAAG,GAAGw9B,IAAI/8B,EAAE,OAAOuR,EAAE,GAAG,GAAGwrB,IAAIp9B,EAAE,OAAO4R,EAAE,GAAG,IAAI0sE,GAAGnuD,EAAE,GAAGA,EAAE/gB,GAAGvP,EAAEswB,EAAE/vB,GAAGN,EAAEqwB,EAAElwB,GAA50I,IAAi1IkwB,GAAGiN,IAAI,EAAE9Y,EAAE5kB,KAAKkhG,GAAGvwE,UAAUzwB,EAAE0+E,EAAE,OAAO9oE,EAAEkyD,EAAEpjD,EAAE5kB,OAAO4kB,EAAEq+E,SAAS,SAAS5iG,EAAEF,GAAG,OAAOH,KAAK0L,KAAK,EAAErL,EAAEF,IAAIykB,EAAE9f,OAAO,SAASzE,GAAG,IAAIF,EAAEH,KAAKI,EAAEJ,KAAK6iG,UAAU,IAAI7iG,KAAK+D,UAAU,OAAO3D,EAAE8iG,aAAartF,EAAE,IAAI3V,EAAEG,GAAG,uBAAuBE,EAAEuV,EAAEimE,EAAE/7E,MAAM0P,EAAE1P,KAAK4hG,GAAGlhG,EAAEV,KAAK8hG,GAAGnhG,EAAEX,KAAKshG,GAAGhhG,EAAEF,EAAEggG,SAAS5/F,EAAEJ,EAAEigG,OAAO7gG,EAAEY,EAAE+iG,SAAS5nD,EAAE,SAASl7C,EAAED,EAAEG,EAAEmP,GAAG,OAAOrP,IAAIA,EAAED,IAAIC,EAAEF,EAAED,KAAKK,EAAEH,GAAG6c,MAAM,EAAEvN,IAAI+gB,EAAE,SAASpwB,GAAG,OAAOyV,EAAEpG,EAAEA,EAAE,IAAI,GAAGrP,EAAE,MAAMq9B,EAAEl+B,GAAG,SAASa,EAAEF,EAAEC,GAAG,IAAIF,EAAEG,EAAE,GAAG,KAAK,KAAK,OAAOD,EAAEF,EAAEihB,cAAcjhB,GAAG,OAAOA,EAAEqM,QAAQ2F,GAAG,SAAS7R,EAAEH,GAAG,OAAOA,GAAG,SAASG,GAAG,OAAOA,GAAG,IAAI,KAAK,OAAOsK,OAAOxK,EAAEihG,IAAInkF,OAAO,GAAG,IAAI,OAAO,OAAOnH,EAAEpG,EAAEvP,EAAEihG,GAAG,EAAE,KAAK,IAAI,IAAI,OAAOzgG,EAAE,EAAE,IAAI,KAAK,OAAOmV,EAAEpG,EAAE/O,EAAE,EAAE,EAAE,KAAK,IAAI,MAAM,OAAO46C,EAAEn7C,EAAEgjG,YAAYziG,EAAEH,EAAE,GAAG,IAAI,OAAO,OAAO+6C,EAAE/6C,EAAEG,GAAG,IAAI,IAAI,OAAOR,EAAEqhG,GAAG,IAAI,KAAK,OAAO1rF,EAAEpG,EAAEvP,EAAEqhG,GAAG,EAAE,KAAK,IAAI,IAAI,OAAO72F,OAAOxK,EAAEuhG,IAAI,IAAI,KAAK,OAAOnmD,EAAEn7C,EAAEijG,YAAYljG,EAAEuhG,GAAGphG,EAAE,GAAG,IAAI,MAAM,OAAOi7C,EAAEn7C,EAAEkjG,cAAcnjG,EAAEuhG,GAAGphG,EAAE,GAAG,IAAI,OAAO,OAAOA,EAAEH,EAAEuhG,IAAI,IAAI,IAAI,OAAO/2F,OAAO+E,GAAG,IAAI,KAAK,OAAOoG,EAAEpG,EAAEA,EAAE,EAAE,KAAK,IAAI,IAAI,OAAO+gB,EAAE,GAAG,IAAI,KAAK,OAAOA,EAAE,GAAG,IAAI,IAAI,OAAOiN,EAAEhuB,EAAEhP,GAAE,GAAI,IAAI,IAAI,OAAOg9B,EAAEhuB,EAAEhP,GAAE,GAAI,IAAI,IAAI,OAAOiK,OAAOjK,GAAG,IAAI,KAAK,OAAOoV,EAAEpG,EAAEhP,EAAE,EAAE,KAAK,IAAI,IAAI,OAAOiK,OAAOxK,EAAE6hG,IAAI,IAAI,KAAK,OAAOlsF,EAAEpG,EAAEvP,EAAE6hG,GAAG,EAAE,KAAK,IAAI,MAAM,OAAOlsF,EAAEpG,EAAEvP,EAAE+hG,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO3hG,EAAE,OAAO,KAAhtB,CAAstBF,IAAIE,EAAEgM,QAAQ,IAAI,QAAQqY,EAAE27E,UAAU,WAAW,OAAO,IAAIr5F,KAAK8d,MAAMhlB,KAAKkhG,GAAGqC,oBAAoB,KAAK3+E,EAAEqxD,KAAK,SAAS/1E,EAAEuwB,EAAE5a,GAAG,IAAI6nB,EAAExrB,EAAElS,KAAK4+E,EAAE9oE,EAAEhV,EAAE2vB,GAAG7L,EAAEg8E,EAAE1gG,GAAGmH,GAAGud,EAAE27E,YAAYvgG,KAAKugG,aAAapgG,EAAE82E,EAAEj3E,KAAK4kB,EAAEoyD,EAAE,WAAW,OAAOlhE,EAAE8O,EAAE1S,EAAE0S,IAAI,OAAOg6D,GAAG,KAAKrjC,EAAE7d,EAAEs5C,IAAI,GAAG,MAAM,KAAKx2E,EAAEk9B,EAAEs5C,IAAI,MAAM,KAAKx3E,EAAEk+B,EAAEs5C,IAAI,EAAE,MAAM,KAAK12E,EAAEo9B,GAAGu5C,EAAE5vE,GAAG,OAAO,MAAM,KAAK1G,EAAE+8B,GAAGu5C,EAAE5vE,GAAG,MAAM,MAAM,KAAK3G,EAAEg9B,EAAEu5C,EAAE72E,EAAE,MAAM,KAAKsP,EAAEguB,EAAEu5C,EAAE92E,EAAE,MAAM,KAAKI,EAAEm9B,EAAEu5C,EAA18L,IAA88L,MAAM,QAAQv5C,EAAEu5C,EAAE,OAAOphE,EAAE6nB,EAAE5nB,EAAEnV,EAAE+8B,IAAI9Y,EAAEo+E,YAAY,WAAW,OAAOhjG,KAAKuiG,MAAM/hG,GAAGghG,IAAI58E,EAAEi+E,QAAQ,WAAW,OAAO7rB,EAAEh3E,KAAK8gG,KAAKl8E,EAAEi8E,OAAO,SAASxgG,EAAEF,GAAG,IAAIE,EAAE,OAAOL,KAAK8gG,GAAG,IAAI1gG,EAAEJ,KAAKwvB,QAAQtvB,EAAE8nE,EAAE3nE,EAAEF,GAAE,GAAI,OAAOD,IAAIE,EAAE0gG,GAAG5gG,GAAGE,GAAGwkB,EAAE4K,MAAM,WAAW,OAAO1Z,EAAEkyD,EAAEhoE,KAAKkhG,GAAGlhG,OAAO4kB,EAAEg+E,OAAO,WAAW,OAAO,IAAI5+F,KAAKhE,KAAKiE,YAAY2gB,EAAEklD,OAAO,WAAW,OAAO9pE,KAAK+D,UAAU/D,KAAKwM,cAAc,MAAMoY,EAAEpY,YAAY,WAAW,OAAOxM,KAAKkhG,GAAG10F,eAAeoY,EAAEpa,SAAS,WAAW,OAAOxK,KAAKkhG,GAAGsC,eAAe5kB,EAA9sJ,GAAmtJruB,EAAE1oD,EAAEymB,UAAU,OAAOsyE,EAAEtyE,UAAUiiC,EAAE,CAAC,CAAC,MAAMrwD,GAAG,CAAC,KAAKK,GAAG,CAAC,KAAKmP,GAAG,CAAC,KAAKhP,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKH,GAAG,CAAC,KAAK+6C,GAAG,CAAC,KAAK9qB,IAAItlB,SAAS,SAAS9K,GAAGkwD,EAAElwD,EAAE,IAAI,SAASF,GAAG,OAAOH,KAAK0iG,GAAGviG,EAAEE,EAAE,GAAGA,EAAE,QAAQugG,EAAEr/F,OAAO,SAASlB,EAAEF,GAAG,OAAOE,EAAEojG,KAAKpjG,EAAEF,EAAE0H,EAAE+4F,GAAGvgG,EAAEojG,IAAG,GAAI7C,GAAGA,EAAEC,OAAO74B,EAAE44B,EAAE8C,QAAQ/C,EAAEC,EAAE+B,KAAK,SAAStiG,GAAG,OAAOugG,EAAE,IAAIvgG,IAAIugG,EAAE+C,GAAG3sB,EAAEC,GAAG2pB,EAAEgD,GAAG5sB,EAAE4pB,EAAE9/F,EAAE,GAAG8/F,6CCAl/N,SAASzgG,EAAEE,GAAG,iBAAiBZ,QAAS,IAAoBC,EAAOA,EAAOD,QAAQY,KAAqDF,EAAE,oBAAoBggG,WAAWA,WAAWhgG,GAAGJ,MAAM8jG,+BAA+BxjG,IAA3N,MAA+N,GAAO,WAAwB,IAAIF,EAAE,CAAC2jG,IAAI,YAAYC,GAAG,SAASC,EAAE,aAAaC,GAAG,eAAeC,IAAI,sBAAsBC,KAAK,6BAA6B9jG,EAAE,0FAA0FD,EAAE,OAAOF,EAAE,QAAQK,EAAE,qBAAqBD,EAAE,GAAGoP,EAAE,SAASvP,GAAG,OAAOA,GAAGA,IAAIA,EAAE,GAAG,KAAK,MAAUQ,EAAE,SAASR,GAAG,OAAO,SAASE,GAAGL,KAAKG,IAAIE,IAAIb,EAAE,CAAC,sBAAsB,SAASW,IAAIH,KAAKokG,OAAOpkG,KAAKokG,KAAK,KAAK59F,OAAO,SAASrG,GAAG,IAAIA,EAAE,OAAO,EAAE,GAAG,MAAMA,EAAE,OAAO,EAAE,IAAIE,EAAEF,EAAE8M,MAAM,gBAAgB7M,EAAE,GAAGC,EAAE,KAAKA,EAAE,IAAI,GAAG,OAAO,IAAID,EAAE,EAAE,MAAMC,EAAE,IAAID,EAAEA,EAA/H,CAAkID,KAAKo7C,EAAE,SAASp7C,GAAG,IAAIE,EAAEC,EAAEH,GAAG,OAAOE,IAAIA,EAAEmpB,QAAQnpB,EAAEA,EAAEqP,EAAE0Z,OAAO/oB,EAAEb,KAAKkB,EAAE,SAASP,EAAEE,GAAG,IAAID,EAAEF,EAAEI,EAAE6iG,SAAS,GAAGjjG,GAAG,IAAI,IAAIK,EAAE,EAAEA,GAAG,GAAGA,GAAG,EAAE,GAAGJ,EAAEqpB,QAAQtpB,EAAEK,EAAE,EAAEF,KAAK,EAAE,CAACD,EAAEG,EAAE,GAAG,YAAYH,EAAED,KAAKE,EAAE,KAAK,MAAM,OAAOD,GAAGqwB,EAAE,CAAComD,EAAE,CAACt2E,EAAE,SAASJ,GAAGH,KAAKqkG,UAAU3jG,EAAEP,GAAE,KAAMQ,EAAE,CAACJ,EAAE,SAASJ,GAAGH,KAAKqkG,UAAU3jG,EAAEP,GAAE,KAAMwgG,EAAE,CAAC,KAAK,SAASxgG,GAAGH,KAAKskG,aAAa,KAAKnkG,IAAIokG,GAAG,CAACnkG,EAAE,SAASD,GAAGH,KAAKskG,aAAa,IAAInkG,IAAIqkG,IAAI,CAAC,QAAQ,SAASrkG,GAAGH,KAAKskG,cAAcnkG,IAAIuP,EAAE,CAACxP,EAAES,EAAE,YAAY8jG,GAAG,CAACvkG,EAAES,EAAE,YAAYikB,EAAE,CAAC1kB,EAAES,EAAE,YAAY+jG,GAAG,CAACxkG,EAAES,EAAE,YAAY+uF,EAAE,CAACxvF,EAAES,EAAE,UAAU46C,EAAE,CAACr7C,EAAES,EAAE,UAAUgkG,GAAG,CAACzkG,EAAES,EAAE,UAAUikG,GAAG,CAAC1kG,EAAES,EAAE,UAAUq2E,EAAE,CAAC92E,EAAES,EAAE,QAAQkkG,GAAG,CAACzkG,EAAEO,EAAE,QAAQmkG,GAAG,CAACvkG,EAAE,SAASJ,GAAG,IAAIE,EAAEC,EAAEggG,QAAQlgG,EAAED,EAAE8M,MAAM,OAAO,GAAGjN,KAAK+kE,IAAI3kE,EAAE,GAAGC,EAAE,IAAI,IAAIH,EAAE,EAAEA,GAAG,GAAGA,GAAG,EAAEG,EAAEH,GAAGqM,QAAQ,SAAS,MAAMpM,IAAIH,KAAK+kE,IAAI7kE,KAAK0+E,EAAE,CAAC1+E,EAAES,EAAE,UAAUokG,GAAG,CAAC3kG,EAAEO,EAAE,UAAUqkG,IAAI,CAACzkG,EAAE,SAASJ,GAAG,IAAIE,EAAEk7C,EAAE,UAAUn7C,GAAGm7C,EAAE,gBAAgBl7C,EAAE+C,KAAK,SAASjD,GAAG,OAAOA,EAAE8c,MAAM,EAAE,OAAOuM,QAAQrpB,GAAG,EAAE,GAAGC,EAAE,EAAE,MAAM,IAAIQ,MAAMZ,KAAKwgG,MAAMpgG,EAAE,IAAIA,IAAI6kG,KAAK,CAAC1kG,EAAE,SAASJ,GAAG,IAAIE,EAAEk7C,EAAE,UAAU/xB,QAAQrpB,GAAG,EAAE,GAAGE,EAAE,EAAE,MAAM,IAAIO,MAAMZ,KAAKwgG,MAAMngG,EAAE,IAAIA,IAAI6kG,EAAE,CAAC,WAAWvkG,EAAE,SAASwkG,GAAG,CAAC/kG,EAAE,SAASD,GAAGH,KAAK6kE,KAAKn1D,EAAEvP,KAAKilG,KAAK,CAAC,QAAQzkG,EAAE,SAAS0kG,EAAE7lG,EAAE8lG,GAAG9lG,GAAG,SAASgB,EAAEJ,GAAG,IAAIF,EAAEK,EAAEL,EAAEE,EAAEG,EAAED,GAAGA,EAAEilG,QAAQ,IAAI,IAAI71F,GAAGtP,EAAEF,EAAEqM,QAAQ,qCAAqC,SAASlM,EAAED,EAAEF,GAAG,IAAII,EAAEJ,GAAGA,EAAEkrB,cAAc,OAAOhrB,GAAGG,EAAEL,IAAIC,EAAED,IAAIK,EAAED,GAAGiM,QAAQ,kCAAkC,SAASpM,EAAEE,EAAED,GAAG,OAAOC,GAAGD,EAAE6c,MAAM,UAAUhQ,MAAM5M,GAAGM,EAAE+O,EAAE1O,OAAOxB,EAAE,EAAEA,EAAEmB,EAAEnB,GAAG,EAAE,CAAC,IAAI+7C,EAAE7rC,EAAElQ,GAAGkB,EAAE+vB,EAAE8qB,GAAG/6C,EAAEE,GAAGA,EAAE,GAAGmV,EAAEnV,GAAGA,EAAE,GAAGgP,EAAElQ,GAAGqW,EAAE,CAACyiD,MAAM93D,EAAEg8B,OAAO3mB,GAAG0lC,EAAEhvC,QAAQ,WAAW,IAAI,OAAO,SAASpM,GAAG,IAAI,IAAIE,EAAE,GAAGD,EAAE,EAAEF,EAAE,EAAEE,EAAEO,EAAEP,GAAG,EAAE,CAAC,IAAIG,EAAEmP,EAAEtP,GAAG,GAAG,iBAAiBG,EAAEL,GAAGK,EAAES,WAAW,CAAC,IAAIV,EAAEC,EAAE+3D,MAAM94D,EAAEe,EAAEi8B,OAAO+e,EAAEp7C,EAAE8c,MAAM/c,GAAGQ,EAAEJ,EAAE2qB,KAAKswB,GAAG,GAAG/7C,EAAEuB,KAAKV,EAAEK,GAAGP,EAAEA,EAAEoM,QAAQ7L,EAAE,KAAK,OAAO,SAASP,GAAG,IAAIE,EAAEF,EAAEkkG,UAAU,QAAG,IAAShkG,EAAE,CAAC,IAAID,EAAED,EAAEqlG,MAAMnlG,EAAED,EAAE,KAAKD,EAAEqlG,OAAO,IAAI,KAAKplG,IAAID,EAAEqlG,MAAM,UAAUrlG,EAAEkkG,WAA9G,CAA0HhkG,GAAGA,GAAG,OAAO,SAASF,EAAEE,EAAED,GAAGA,EAAEU,EAAEM,mBAAkB,EAAGjB,GAAGA,EAAEslG,oBAAoB/1F,EAAEvP,EAAEslG,mBAAmB,IAAIvlG,EAAEG,EAAEiuB,UAAU/tB,EAAEL,EAAEmE,MAAMnE,EAAEmE,MAAM,SAASlE,GAAG,IAAIE,EAAEF,EAAE4lE,KAAK7lE,EAAEC,EAAEkB,IAAIqO,EAAEvP,EAAEy0D,KAAK50D,KAAK+gG,GAAG7gG,EAAE,IAAIS,EAAE+O,EAAE,GAAG,GAAG,iBAAiB/O,EAAE,CAAC,IAAInB,GAAE,IAAKkQ,EAAE,GAAG6rC,GAAE,IAAK7rC,EAAE,GAAGhP,EAAElB,GAAG+7C,EAAE9qB,EAAE/gB,EAAE,GAAG6rC,IAAI9qB,EAAE/gB,EAAE,IAAIpP,EAAEN,KAAK6iG,WAAWrjG,GAAGixB,IAAInwB,EAAEF,EAAEwjG,GAAGnzE,IAAIzwB,KAAKkhG,GAAG,SAAS/gG,EAAEE,EAAED,GAAG,IAAI,GAAG,CAAC,IAAI,KAAKopB,QAAQnpB,IAAI,EAAE,OAAO,IAAI2D,MAAM,MAAM3D,EAAE,IAAI,GAAGF,GAAG,IAAID,EAAEM,EAAEH,EAAFG,CAAKL,GAAGI,EAAEL,EAAE2kE,KAAKvkE,EAAEJ,EAAEsgG,MAAM9wF,EAAExP,EAAE6kE,IAAIpkE,EAAET,EAAEslG,MAAMhmG,EAAEU,EAAEwlG,QAAQnqD,EAAEr7C,EAAEylG,QAAQjlG,EAAER,EAAEokG,aAAa7zE,EAAEvwB,EAAEkkG,KAAKvuF,EAAE,IAAI7R,KAAK4gB,EAAElV,IAAInP,GAAGD,EAAE,EAAEuV,EAAE4rF,WAAW7iB,EAAEr+E,GAAGsV,EAAEwrF,cAAc6D,EAAE,EAAE3kG,IAAID,IAAI4kG,EAAE5kG,EAAE,EAAEA,EAAE,EAAEuV,EAAE0rF,YAAY,IAAIzgG,EAAEH,GAAG,EAAE0G,EAAE7H,GAAG,EAAEw3E,EAAEz7B,GAAG,EAAE07B,EAAEv2E,GAAG,EAAE,OAAO+vB,EAAE,IAAIzsB,KAAKA,KAAKkhE,IAAI0Z,EAAEsmB,EAAEtgF,EAAE9jB,EAAEuG,EAAE2vE,EAAEC,EAAE,GAAGxmD,EAAEjqB,OAAO,MAAMpG,EAAE,IAAI4D,KAAKA,KAAKkhE,IAAI0Z,EAAEsmB,EAAEtgF,EAAE9jB,EAAEuG,EAAE2vE,EAAEC,IAAI,IAAIjzE,KAAK46E,EAAEsmB,EAAEtgF,EAAE9jB,EAAEuG,EAAE2vE,EAAEC,GAAG,MAAM92E,GAAG,OAAO,IAAI6D,KAAK,KAArc,CAA2c3D,EAAEM,EAAET,GAAGF,KAAKsjD,OAAO7yB,IAAG,IAAKA,IAAIzwB,KAAK8gG,GAAG9gG,KAAK6gG,OAAOpwE,GAAGqwE,IAAIpgG,GAAGL,GAAGL,KAAK8E,OAAOnE,KAAKX,KAAKkhG,GAAG,IAAIl9F,KAAK,KAAK1D,EAAE,QAAQ,GAAGK,aAAakO,MAAM,IAAI,IAAIgH,EAAElV,EAAEK,OAAO4jB,EAAE,EAAEA,GAAG/O,EAAE+O,GAAG,EAAE,CAAClV,EAAE,GAAG/O,EAAEikB,EAAE,GAAG,IAAIg6D,EAAEx+E,EAAEwhB,MAAM5hB,KAAK0P,GAAG,GAAGkvE,EAAE76E,UAAU,CAAC/D,KAAKkhG,GAAGtiB,EAAEsiB,GAAGlhG,KAAK8gG,GAAGliB,EAAEkiB,GAAG9gG,KAAKsjD,OAAO,MAAM1+B,IAAI/O,IAAI7V,KAAKkhG,GAAG,IAAIl9F,KAAK,UAAUzD,EAAEQ,KAAKf,KAAKG,gDCAzpH,SAASE,EAAEE,GAAG,iBAAiBd,QAAS,IAAoBC,EAAOA,EAAOD,QAAQc,KAAqDF,EAAE,oBAAoB8/F,WAAWA,WAAW9/F,GAAGN,MAAM6lG,iBAAiBrlG,IAA7M,MAAiN,GAAO,WAAwB,IAAIF,EAAE,SAASE,EAAE,uBAAuBJ,EAAE,eAAe,OAAO,SAASuP,EAAElQ,EAAEY,GAAG,IAAIM,EAAElB,EAAE8uB,UAAUluB,EAAEiB,IAAI,SAAShB,GAAG,IAAIE,EAAE,CAACwlE,KAAK1lE,EAAEgB,KAAI,EAAGuzD,KAAKnuD,WAAW,OAAO,IAAIjH,EAAEe,IAAIG,EAAEW,IAAI,SAASd,GAAG,IAAIJ,EAAEC,EAAEJ,KAAK4iG,SAAS,CAAC/B,OAAO7gG,KAAK8gG,GAAGz/F,KAAI,IAAK,OAAOd,EAAEJ,EAAEuL,IAAI1L,KAAKugG,YAAYlgG,GAAGF,GAAGO,EAAEmlG,MAAM,WAAW,OAAOzlG,EAAEJ,KAAK4iG,SAAS,CAAC/B,OAAO7gG,KAAK8gG,GAAGz/F,KAAI,KAAM,IAAIf,EAAEI,EAAE2D,MAAM3D,EAAE2D,MAAM,SAAShE,GAAGA,EAAEgB,MAAMrB,KAAK+gG,IAAG,GAAI/gG,KAAKoiG,SAAS1hG,EAAEL,EAAE4gG,WAAWjhG,KAAKihG,QAAQ5gG,EAAE4gG,SAAS3gG,EAAES,KAAKf,KAAKK,IAAI,IAAIH,EAAEQ,EAAE4iD,KAAK5iD,EAAE4iD,KAAK,WAAW,GAAGtjD,KAAK+gG,GAAG,CAAC,IAAI1gG,EAAEL,KAAKkhG,GAAGlhG,KAAKohG,GAAG/gG,EAAE2lE,iBAAiBhmE,KAAKshG,GAAGjhG,EAAE4lE,cAAcjmE,KAAKwhG,GAAGnhG,EAAE6lE,aAAalmE,KAAK0hG,GAAGrhG,EAAEylG,YAAY9lG,KAAK4hG,GAAGvhG,EAAE8lE,cAAcnmE,KAAK8hG,GAAGzhG,EAAE+lE,gBAAgBpmE,KAAKgiG,GAAG3hG,EAAEgmE,gBAAgBrmE,KAAKkiG,IAAI7hG,EAAE0lG,0BAA0B7lG,EAAEa,KAAKf,OAAO,IAAIW,EAAED,EAAE6/F,UAAU7/F,EAAE6/F,UAAU,SAAS7wF,EAAElQ,GAAG,IAAIY,EAAEJ,KAAKoiG,SAAS1hG,EAAE,GAAGN,EAAEsP,GAAG,OAAO1P,KAAK+gG,GAAG,EAAE3gG,EAAEJ,KAAKihG,SAAStgG,EAAEI,KAAKf,MAAMA,KAAKihG,QAAQ,GAAG,iBAAiBvxF,GAAqK,QAAjKA,EAAE,SAASrP,QAAG,IAASA,IAAIA,EAAE,IAAI,IAAIqP,EAAErP,EAAE4M,MAAM1M,GAAG,IAAImP,EAAE,OAAO,KAAK,IAAIlQ,GAAG,GAAGkQ,EAAE,IAAIzC,MAAM9M,IAAI,CAAC,IAAI,EAAE,GAAGC,EAAEZ,EAAE,GAAGkB,EAAE,IAAIlB,EAAE,KAAKA,EAAE,GAAG,OAAO,IAAIkB,EAAE,EAAE,MAAMN,EAAEM,GAAGA,EAAzJ,CAA4JgP,IAAa,OAAO1P,KAAK,IAAIU,EAAEwG,KAAK2jE,IAAIn7D,IAAI,GAAG,GAAGA,EAAEA,EAAEpP,EAAEN,KAAK,GAAGR,EAAE,OAAOc,EAAE2gG,QAAQvgG,EAAEJ,EAAEygG,GAAG,IAAIrxF,EAAEpP,EAAE,GAAG,IAAIoP,EAAE,CAAC,IAAIxP,EAAEF,KAAK+gG,GAAG/gG,KAAK4iG,SAASW,qBAAqB,EAAEvjG,KAAKugG,aAAajgG,EAAEN,KAAK6lG,QAAQn6F,IAAIhL,EAAER,EAAEG,IAAI4gG,QAAQvgG,EAAEJ,EAAE0gG,GAAGgF,aAAa9lG,OAAOI,EAAEN,KAAKqB,MAAM,OAAOf,GAAG,IAAIi7C,EAAE76C,EAAEoE,OAAOpE,EAAEoE,OAAO,SAASzE,GAAG,IAAIE,EAAEF,IAAIL,KAAK+gG,GAAG,yBAAyB,IAAI,OAAOxlD,EAAEx6C,KAAKf,KAAKO,IAAIG,EAAEuD,QAAQ,WAAW,IAAI5D,EAAEL,KAAKoiG,SAAS1hG,EAAEV,KAAKihG,SAAS,EAAEjhG,KAAKihG,SAASjhG,KAAKghG,GAAGgF,cAAchmG,KAAKkhG,GAAGqC,qBAAqB,OAAOvjG,KAAKkhG,GAAGj9F,UAAU,IAAI5D,GAAGK,EAAEulG,MAAM,WAAW,QAAQjmG,KAAK+gG,IAAIrgG,EAAE8L,YAAY,WAAW,OAAOxM,KAAK4iG,SAASp2F,eAAe9L,EAAE8J,SAAS,WAAW,OAAOxK,KAAK4iG,SAASY,eAAe,IAAI3tF,EAAEnV,EAAEkiG,OAAOliG,EAAEkiG,OAAO,SAASviG,GAAG,MAAM,MAAMA,GAAGL,KAAKihG,QAAQ7gG,EAAEJ,KAAK8E,OAAO,4BAA4B89F,SAAS/sF,EAAE9U,KAAKf,OAAO,IAAIQ,EAAEE,EAAEu1E,KAAKv1E,EAAEu1E,KAAK,SAAS51E,EAAEE,EAAEJ,GAAG,GAAGE,GAAGL,KAAK+gG,KAAK1gG,EAAE0gG,GAAG,OAAOvgG,EAAEO,KAAKf,KAAKK,EAAEE,EAAEJ,GAAG,IAAIuP,EAAE1P,KAAK6lG,QAAQrmG,EAAEY,EAAEC,GAAGwlG,QAAQ,OAAOrlG,EAAEO,KAAK2O,EAAElQ,EAAEe,EAAEJ,kCCArsE,aAEAV,EAAQgsB,MAAQhrB,EAAQ,eACxBhB,EAAQmkF,OAASnjF,EAAQ,gBACzBhB,EAAQopF,IAAMpoF,EAAQ,aACtBhB,EAAQinF,IAAMjmF,EAAQ,aACtBhB,EAAQ6pF,IAAM7oF,EAAQ,2HCNtB,aAEA,IAAIgZ,EAAShZ,EAAQ,uBACjBwsB,EAAWxsB,EAAQ,YAEnBylG,EAAQ,GAEZ,SAASC,EAASvkB,GAChBnoE,EAAO2lD,MAAMwiB,EAAG5gF,OAAQ,EAAG,qBAE3BhB,KAAK4hF,GAAK,IAAI/yE,MAAM,GACpB,IAAK,IAAItO,EAAI,EAAGA,EAAIP,KAAK4hF,GAAG5gF,OAAQT,IAClCP,KAAK4hF,GAAGrhF,GAAKqhF,EAAGrhF,GAuBpBd,EAAQ4pF,YApBR,SAAqB3sB,GACnB,SAASgqB,EAAIjkF,GACXi6D,EAAK37D,KAAKf,KAAMyC,GAChBzC,KAAKomG,WAEPn5E,EAASy5D,EAAKhqB,GAGd,IADA,IAAInnD,EAAOD,OAAOC,KAAK2wF,GACd3lG,EAAI,EAAGA,EAAIgV,EAAKvU,OAAQT,IAAK,CACpC,IAAIgO,EAAMgH,EAAKhV,GACfmmF,EAAIp4D,UAAU/f,GAAO23F,EAAM33F,GAO7B,OAJAm4E,EAAIj+E,OAAS,SAAgBhG,GAC3B,OAAO,IAAIikF,EAAIjkF,IAGVikF,GAKTwf,EAAME,SAAW,WACf,IAAItoF,EAAQ,IAAIqoF,EAASnmG,KAAKyC,QAAQm/E,IACtC5hF,KAAKqmG,UAAYvoF,GAGnBooF,EAAMnjB,QAAU,SAAiBujB,EAAKC,EAAOtoC,EAAKuoC,GAChD,IAAI1oF,EAAQ9d,KAAKqmG,UACbI,EAAazmG,KAAKqjB,YAAY6M,OAAO5B,UAErCszD,EAAK9jE,EAAM8jE,GACf,GAAkB,YAAd5hF,KAAK0J,KAAoB,CAC3B,IAAK,IAAInJ,EAAI,EAAGA,EAAIP,KAAKugF,UAAWhgF,IAClCqhF,EAAGrhF,IAAM+lG,EAAIC,EAAQhmG,GAEvBkmG,EAAW1jB,QAAQhiF,KAAKf,KAAM4hF,EAAI,EAAG3jB,EAAKuoC,GAE1C,IAASjmG,EAAI,EAAGA,EAAIP,KAAKugF,UAAWhgF,IAClCqhF,EAAGrhF,GAAK09D,EAAIuoC,EAASjmG,OAClB,CACLkmG,EAAW1jB,QAAQhiF,KAAKf,KAAMsmG,EAAKC,EAAOtoC,EAAKuoC,GAE/C,IAASjmG,EAAI,EAAGA,EAAIP,KAAKugF,UAAWhgF,IAClC09D,EAAIuoC,EAASjmG,IAAMqhF,EAAGrhF,GAExB,IAASA,EAAI,EAAGA,EAAIP,KAAKugF,UAAWhgF,IAClCqhF,EAAGrhF,GAAK+lG,EAAIC,EAAQhmG,qEC9D1B,aAEA,IAAIkZ,EAAShZ,EAAQ,uBAErB,SAASmjF,EAAOnhF,GACdzC,KAAKyC,QAAUA,EAEfzC,KAAK0J,KAAO1J,KAAKyC,QAAQiH,KACzB1J,KAAKugF,UAAY,EACjBvgF,KAAKm/D,QAELn/D,KAAK2mB,OAAS,IAAI9X,MAAM7O,KAAKugF,WAC7BvgF,KAAK0mG,UAAY,EACjB1mG,KAAKspE,SAA8B,IAApB7mE,EAAQ6mE,QAEzB5pE,EAAOD,QAAUmkF,EAEjBA,EAAOt1D,UAAU6wC,MAAQ,aAIzBykB,EAAOt1D,UAAUnF,OAAS,SAAgB3kB,GACxC,OAAoB,IAAhBA,EAAKxD,OACA,GAES,YAAdhB,KAAK0J,KACA1J,KAAK2mG,eAAeniG,GAEpBxE,KAAK4mG,eAAepiG,IAG/Bo/E,EAAOt1D,UAAUtC,QAAU,SAAiBxnB,EAAMyjE,GAGhD,IADA,IAAI9gE,EAAMD,KAAKC,IAAInH,KAAK2mB,OAAO3lB,OAAShB,KAAK0mG,UAAWliG,EAAKxD,OAASinE,GAC7D1nE,EAAI,EAAGA,EAAI4G,EAAK5G,IACvBP,KAAK2mB,OAAO3mB,KAAK0mG,UAAYnmG,GAAKiE,EAAKyjE,EAAM1nE,GAI/C,OAHAP,KAAK0mG,WAAav/F,EAGXA,GAGTy8E,EAAOt1D,UAAUu4E,aAAe,SAAsB5oC,EAAKgK,GAGzD,OAFAjoE,KAAK+iF,QAAQ/iF,KAAK2mB,OAAQ,EAAGs3C,EAAKgK,GAClCjoE,KAAK0mG,UAAY,EACV1mG,KAAKugF,WAGdqD,EAAOt1D,UAAUs4E,eAAiB,SAAwBpiG,GACxD,IAAIsiG,EAAW,EACXC,EAAY,EAEZz2F,GAAUtQ,KAAK0mG,UAAYliG,EAAKxD,QAAUhB,KAAKugF,UAAa,EAC5DtiB,EAAM,IAAIpvD,MAAMyB,EAAQtQ,KAAKugF,WAEV,IAAnBvgF,KAAK0mG,YACPI,GAAY9mG,KAAKgsB,QAAQxnB,EAAMsiG,GAE3B9mG,KAAK0mG,YAAc1mG,KAAK2mB,OAAO3lB,SACjC+lG,GAAa/mG,KAAK6mG,aAAa5oC,EAAK8oC,KAKxC,IADA,IAAI32F,EAAM5L,EAAKxD,QAAWwD,EAAKxD,OAAS8lG,GAAY9mG,KAAKugF,UAClDumB,EAAW12F,EAAK02F,GAAY9mG,KAAKugF,UACtCvgF,KAAK+iF,QAAQv+E,EAAMsiG,EAAU7oC,EAAK8oC,GAClCA,GAAa/mG,KAAKugF,UAIpB,KAAOumB,EAAWtiG,EAAKxD,OAAQ8lG,IAAY9mG,KAAK0mG,YAC9C1mG,KAAK2mB,OAAO3mB,KAAK0mG,WAAaliG,EAAKsiG,GAErC,OAAO7oC,GAGT2lB,EAAOt1D,UAAUq4E,eAAiB,SAAwBniG,GAQxD,IAPA,IAAIsiG,EAAW,EACXC,EAAY,EAEZz2F,EAAQpJ,KAAK6gE,MAAM/nE,KAAK0mG,UAAYliG,EAAKxD,QAAUhB,KAAKugF,WAAa,EACrEtiB,EAAM,IAAIpvD,MAAMyB,EAAQtQ,KAAKugF,WAG1BjwE,EAAQ,EAAGA,IAChBw2F,GAAY9mG,KAAKgsB,QAAQxnB,EAAMsiG,GAC/BC,GAAa/mG,KAAK6mG,aAAa5oC,EAAK8oC,GAMtC,OAFAD,GAAY9mG,KAAKgsB,QAAQxnB,EAAMsiG,GAExB7oC,GAGT2lB,EAAOt1D,UAAU60D,MAAQ,SAAex8D,GACtC,IAAIhC,EAIAyI,EAMJ,OATIzG,IACFhC,EAAQ3kB,KAAKmpB,OAAOxC,IAIpByG,EADgB,YAAdptB,KAAK0J,KACA1J,KAAKgnG,gBAELhnG,KAAKinG,gBAEVtiF,EACKA,EAAMyE,OAAOgE,GAEbA,GAGXw2D,EAAOt1D,UAAU44E,KAAO,SAAcvgF,EAAQshD,GAC5C,GAAY,IAARA,EACF,OAAO,EAET,KAAOA,EAAMthD,EAAO3lB,QAClB2lB,EAAOshD,KAAS,EAElB,OAAO,GAGT2b,EAAOt1D,UAAU04E,cAAgB,WAC/B,IAAKhnG,KAAKknG,KAAKlnG,KAAK2mB,OAAQ3mB,KAAK0mG,WAC/B,MAAO,GAET,IAAIzoC,EAAM,IAAIpvD,MAAM7O,KAAKugF,WAEzB,OADAvgF,KAAK+iF,QAAQ/iF,KAAK2mB,OAAQ,EAAGs3C,EAAK,GAC3BA,GAGT2lB,EAAOt1D,UAAU64E,OAAS,SAAgBxgF,GACxC,OAAOA,GAGTi9D,EAAOt1D,UAAU24E,cAAgB,WAC/BxtF,EAAO2lD,MAAMp/D,KAAK0mG,UAAW1mG,KAAKugF,UAAW,8BAC7C,IAAItiB,EAAM,IAAIpvD,MAAM7O,KAAKugF,WAGzB,OAFAvgF,KAAK6mG,aAAa5oC,EAAK,GAEhBj+D,KAAKmnG,OAAOlpC,uDC5IrB,aAEA,IAAIxkD,EAAShZ,EAAQ,uBACjBwsB,EAAWxsB,EAAQ,YAEnBgrB,EAAQhrB,EAAQ,WAChBmjF,EAASnjF,EAAQ,YAErB,SAAS2mG,IACPpnG,KAAKgyB,IAAM,IAAInjB,MAAM,GACrB7O,KAAKuV,KAAO,KAGd,SAASszE,EAAIpmF,GACXmhF,EAAO7iF,KAAKf,KAAMyC,GAElB,IAAIqb,EAAQ,IAAIspF,EAChBpnG,KAAKqnG,UAAYvpF,EAEjB9d,KAAKsnG,WAAWxpF,EAAOrb,EAAQ8L,KAEjC0e,EAAS47D,EAAKjF,GACdlkF,EAAOD,QAAUopF,EAEjBA,EAAIpgF,OAAS,SAAgBhG,GAC3B,OAAO,IAAIomF,EAAIpmF,IAGjB,IAAI8kG,EAAa,CACf,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGvB1e,EAAIv6D,UAAUg5E,WAAa,SAAoBxpF,EAAOvP,GACpDuP,EAAMvI,KAAO,IAAI1G,MAAM,IAEvB4K,EAAO2lD,MAAM7wD,EAAIvN,OAAQhB,KAAKugF,UAAW,sBAEzC,IAAIinB,EAAK/7E,EAAMgzD,aAAalwE,EAAK,GAC7Bk5F,EAAKh8E,EAAMgzD,aAAalwE,EAAK,GAEjCkd,EAAMi8E,IAAIF,EAAIC,EAAI3pF,EAAMkU,IAAK,GAC7Bw1E,EAAK1pF,EAAMkU,IAAI,GACfy1E,EAAK3pF,EAAMkU,IAAI,GACf,IAAK,IAAIzxB,EAAI,EAAGA,EAAIud,EAAMvI,KAAKvU,OAAQT,GAAK,EAAG,CAC7C,IAAIyF,EAAQuhG,EAAWhnG,IAAM,GAC7BinG,EAAK/7E,EAAMk8E,OAAOH,EAAIxhG,GACtByhG,EAAKh8E,EAAMk8E,OAAOF,EAAIzhG,GACtBylB,EAAMm8E,IAAIJ,EAAIC,EAAI3pF,EAAMvI,KAAMhV,KAIlCsoF,EAAIv6D,UAAUy0D,QAAU,SAAiBujB,EAAKC,EAAOtoC,EAAKuoC,GACxD,IAAI1oF,EAAQ9d,KAAKqnG,UAEbxxF,EAAI4V,EAAMgzD,aAAa6nB,EAAKC,GAC5BrmG,EAAIurB,EAAMgzD,aAAa6nB,EAAKC,EAAQ,GAGxC96E,EAAMo8E,GAAGhyF,EAAG3V,EAAG4d,EAAMkU,IAAK,GAC1Bnc,EAAIiI,EAAMkU,IAAI,GACd9xB,EAAI4d,EAAMkU,IAAI,GAEI,YAAdhyB,KAAK0J,KACP1J,KAAK8nG,SAAShqF,EAAOjI,EAAG3V,EAAG4d,EAAMkU,IAAK,GAEtChyB,KAAK0iF,SAAS5kE,EAAOjI,EAAG3V,EAAG4d,EAAMkU,IAAK,GAExCnc,EAAIiI,EAAMkU,IAAI,GACd9xB,EAAI4d,EAAMkU,IAAI,GAEdvG,EAAM21D,cAAcnjB,EAAKpoD,EAAG2wF,GAC5B/6E,EAAM21D,cAAcnjB,EAAK/9D,EAAGsmG,EAAS,IAGvC3d,EAAIv6D,UAAU44E,KAAO,SAAcvgF,EAAQshD,GACzC,IAAqB,IAAjBjoE,KAAKspE,QACP,OAAO,EAIT,IADA,IAAIpkE,EAAQyhB,EAAO3lB,OAASinE,EACnB1nE,EAAI0nE,EAAK1nE,EAAIomB,EAAO3lB,OAAQT,IACnComB,EAAOpmB,GAAK2E,EAEd,OAAO,GAGT2jF,EAAIv6D,UAAU64E,OAAS,SAAgBxgF,GACrC,IAAqB,IAAjB3mB,KAAKspE,QACP,OAAO3iD,EAIT,IADA,IAAIs/D,EAAMt/D,EAAOA,EAAO3lB,OAAS,GACxBT,EAAIomB,EAAO3lB,OAASilF,EAAK1lF,EAAIomB,EAAO3lB,OAAQT,IACnDkZ,EAAO2lD,MAAMz4C,EAAOpmB,GAAI0lF,GAE1B,OAAOt/D,EAAO1J,MAAM,EAAG0J,EAAO3lB,OAASilF,IAGzC4C,EAAIv6D,UAAUw5E,SAAW,SAAkBhqF,EAAOiqF,EAAQC,EAAQ/pC,EAAKgK,GAKrE,IAJA,IAAIpyD,EAAIkyF,EACJ7nG,EAAI8nG,EAGCznG,EAAI,EAAGA,EAAIud,EAAMvI,KAAKvU,OAAQT,GAAK,EAAG,CAC7C,IAAI0nG,EAAOnqF,EAAMvI,KAAKhV,GAClB2nG,EAAOpqF,EAAMvI,KAAKhV,EAAI,GAG1BkrB,EAAMrV,OAAOlW,EAAG4d,EAAMkU,IAAK,GAE3Bi2E,GAAQnqF,EAAMkU,IAAI,GAClBk2E,GAAQpqF,EAAMkU,IAAI,GAClB,IAAItiB,EAAI+b,EAAM08E,WAAWF,EAAMC,GAG3B7nG,EAAIH,EACRA,GAAK2V,EAHG4V,EAAM6mD,QAAQ5iE,MAGN,EAChBmG,EAAIxV,EAINorB,EAAM28E,IAAIloG,EAAG2V,EAAGooD,EAAKgK,IAGvB4gB,EAAIv6D,UAAUo0D,SAAW,SAAkB5kE,EAAOiqF,EAAQC,EAAQ/pC,EAAKgK,GAKrE,IAJA,IAAIpyD,EAAImyF,EACJ9nG,EAAI6nG,EAGCxnG,EAAIud,EAAMvI,KAAKvU,OAAS,EAAGT,GAAK,EAAGA,GAAK,EAAG,CAClD,IAAI0nG,EAAOnqF,EAAMvI,KAAKhV,GAClB2nG,EAAOpqF,EAAMvI,KAAKhV,EAAI,GAG1BkrB,EAAMrV,OAAOP,EAAGiI,EAAMkU,IAAK,GAE3Bi2E,GAAQnqF,EAAMkU,IAAI,GAClBk2E,GAAQpqF,EAAMkU,IAAI,GAClB,IAAItiB,EAAI+b,EAAM08E,WAAWF,EAAMC,GAG3B7nG,EAAIwV,EACRA,GAAK3V,EAHGurB,EAAM6mD,QAAQ5iE,MAGN,EAChBxP,EAAIG,EAINorB,EAAM28E,IAAIvyF,EAAG3V,EAAG+9D,EAAKgK,iGCpJvB,aAEA,IAAIxuD,EAAShZ,EAAQ,uBACjBwsB,EAAWxsB,EAAQ,YAEnBmjF,EAASnjF,EAAQ,YACjBooF,EAAMpoF,EAAQ,SAElB,SAAS4nG,EAAS3+F,EAAM6E,GACtBkL,EAAO2lD,MAAM7wD,EAAIvN,OAAQ,GAAI,sBAE7B,IAAIsnG,EAAK/5F,EAAI0O,MAAM,EAAG,GAClBuzC,EAAKjiD,EAAI0O,MAAM,EAAG,IAClBsrF,EAAKh6F,EAAI0O,MAAM,GAAI,IAGrBjd,KAAKwjF,QADM,YAAT95E,EACa,CACbm/E,EAAIpgF,OAAO,CAAEiB,KAAM,UAAW6E,IAAK+5F,IACnCzf,EAAIpgF,OAAO,CAAEiB,KAAM,UAAW6E,IAAKiiD,IACnCq4B,EAAIpgF,OAAO,CAAEiB,KAAM,UAAW6E,IAAKg6F,KAGtB,CACb1f,EAAIpgF,OAAO,CAAEiB,KAAM,UAAW6E,IAAKg6F,IACnC1f,EAAIpgF,OAAO,CAAEiB,KAAM,UAAW6E,IAAKiiD,IACnCq4B,EAAIpgF,OAAO,CAAEiB,KAAM,UAAW6E,IAAK+5F,KAKzC,SAAShf,EAAI7mF,GACXmhF,EAAO7iF,KAAKf,KAAMyC,GAElB,IAAIqb,EAAQ,IAAIuqF,EAASroG,KAAK0J,KAAM1J,KAAKyC,QAAQ8L,KACjDvO,KAAKwoG,UAAY1qF,EAEnBmP,EAASq8D,EAAK1F,GAEdlkF,EAAOD,QAAU6pF,EAEjBA,EAAI7gF,OAAS,SAAgBhG,GAC3B,OAAO,IAAI6mF,EAAI7mF,IAGjB6mF,EAAIh7D,UAAUy0D,QAAU,SAAiBujB,EAAKC,EAAOtoC,EAAKuoC,GACxD,IAAI1oF,EAAQ9d,KAAKwoG,UAEjB1qF,EAAM0lE,QAAQ,GAAGT,QAAQujB,EAAKC,EAAOtoC,EAAKuoC,GAC1C1oF,EAAM0lE,QAAQ,GAAGT,QAAQ9kB,EAAKuoC,EAAQvoC,EAAKuoC,GAC3C1oF,EAAM0lE,QAAQ,GAAGT,QAAQ9kB,EAAKuoC,EAAQvoC,EAAKuoC,IAG7Cld,EAAIh7D,UAAU44E,KAAOre,EAAIv6D,UAAU44E,KACnC5d,EAAIh7D,UAAU64E,OAASte,EAAIv6D,UAAU64E,kGCrDrC,aAEA1nG,EAAQg/E,aAAe,SAAsB1gB,EAAOkK,GAKlD,OAJYlK,EAAM,EAAIkK,IAAQ,GAClBlK,EAAM,EAAIkK,IAAQ,GAClBlK,EAAM,EAAIkK,IAAQ,EACnBlK,EAAM,EAAIkK,MACN,GAGjBxoE,EAAQ2hF,cAAgB,SAAuBrjB,EAAO74D,EAAO+iE,GAC3DlK,EAAM,EAAIkK,GAAO/iE,IAAU,GAC3B64D,EAAM,EAAIkK,GAAQ/iE,IAAU,GAAM,IAClC64D,EAAM,EAAIkK,GAAQ/iE,IAAU,EAAK,IACjC64D,EAAM,EAAIkK,GAAe,IAAR/iE,GAGnBzF,EAAQooG,GAAK,SAAYY,EAAKC,EAAKzqC,EAAKgK,GAItC,IAHA,IAAI0gC,EAAO,EACPC,EAAO,EAEFroG,EAAI,EAAGA,GAAK,EAAGA,GAAK,EAAG,CAC9B,IAAK,IAAIyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2uF,IAAS,EACTA,GAASD,IAAS1uF,EAAIzZ,EAAM,EAE9B,IAASyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2uF,IAAS,EACTA,GAASF,IAASzuF,EAAIzZ,EAAM,EAIhC,IAASA,EAAI,EAAGA,GAAK,EAAGA,GAAK,EAAG,CAC9B,IAASyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4uF,IAAS,EACTA,GAASF,IAAS1uF,EAAIzZ,EAAM,EAE9B,IAASyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4uF,IAAS,EACTA,GAASH,IAASzuF,EAAIzZ,EAAM,EAIhC09D,EAAIgK,EAAM,GAAK0gC,IAAS,EACxB1qC,EAAIgK,EAAM,GAAK2gC,IAAS,GAG1BnpG,EAAQ2oG,IAAM,SAAaK,EAAKC,EAAKzqC,EAAKgK,GAIxC,IAHA,IAAI0gC,EAAO,EACPC,EAAO,EAEFroG,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAIyZ,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5B2uF,IAAS,EACTA,GAASD,IAAS1uF,EAAIzZ,EAAM,EAC5BooG,IAAS,EACTA,GAASF,IAASzuF,EAAIzZ,EAAM,EAGhC,IAASA,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAASyZ,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5B4uF,IAAS,EACTA,GAASF,IAAS1uF,EAAIzZ,EAAM,EAC5BqoG,IAAS,EACTA,GAASH,IAASzuF,EAAIzZ,EAAM,EAIhC09D,EAAIgK,EAAM,GAAK0gC,IAAS,EACxB1qC,EAAIgK,EAAM,GAAK2gC,IAAS,GAG1BnpG,EAAQioG,IAAM,SAAae,EAAKC,EAAKzqC,EAAKgK,GAQxC,IAPA,IAAI0gC,EAAO,EACPC,EAAO,EAMFroG,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,IAAK,IAAIyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2uF,IAAS,EACTA,GAASD,GAAQ1uF,EAAIzZ,EAAM,EAE7B,IAASyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2uF,IAAS,EACTA,GAASF,GAAQzuF,EAAIzZ,EAAM,EAG/B,IAASyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2uF,IAAS,EACTA,GAASD,GAAQ1uF,EAAIzZ,EAAM,EAO7B,IAASA,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,IAASyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4uF,IAAS,EACTA,GAASF,GAAQ1uF,EAAIzZ,EAAM,EAE7B,IAASyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4uF,IAAS,EACTA,GAASH,GAAQzuF,EAAIzZ,EAAM,EAG/B,IAASyZ,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4uF,IAAS,EACTA,GAASH,GAAQzuF,EAAIzZ,EAAM,EAG7B09D,EAAIgK,EAAM,GAAK0gC,IAAS,EACxB1qC,EAAIgK,EAAM,GAAK2gC,IAAS,GAG1BnpG,EAAQkoG,OAAS,SAAgBnoC,EAAKx5D,GACpC,OAASw5D,GAAOx5D,EAAS,UAAcw5D,IAAS,GAAKx5D,GAGvD,IAAI6iG,EAAW,CAEb,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAC3B,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GACzB,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAGzB,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GACzB,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EACzB,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAG5BppG,EAAQmoG,IAAM,SAAaa,EAAKC,EAAKzqC,EAAKgK,GAKxC,IAJA,IAAI0gC,EAAO,EACPC,EAAO,EAEPjpE,EAAMkpE,EAAS7nG,SAAW,EACrBT,EAAI,EAAGA,EAAIo/B,EAAKp/B,IACvBooG,IAAS,EACTA,GAASF,IAAQI,EAAStoG,GAAM,EAElC,IAASA,EAAIo/B,EAAKp/B,EAAIsoG,EAAS7nG,OAAQT,IACrCqoG,IAAS,EACTA,GAASF,IAAQG,EAAStoG,GAAM,EAGlC09D,EAAIgK,EAAM,GAAK0gC,IAAS,EACxB1qC,EAAIgK,EAAM,GAAK2gC,IAAS,GAG1BnpG,EAAQ2W,OAAS,SAAgBlW,EAAG+9D,EAAKgK,GACvC,IAAI0gC,EAAO,EACPC,EAAO,EAEXD,GAAa,EAAJzoG,IAAU,EAAMA,IAAM,GAC/B,IAAK,IAAIK,EAAI,GAAIA,GAAK,GAAIA,GAAK,EAC7BooG,IAAS,EACTA,GAASzoG,IAAMK,EAAK,GAEtB,IAASA,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5BqoG,GAAS1oG,IAAMK,EAAK,GACpBqoG,IAAS,EAEXA,IAAc,GAAJ1oG,IAAa,EAAMA,IAAM,GAEnC+9D,EAAIgK,EAAM,GAAK0gC,IAAS,EACxB1qC,EAAIgK,EAAM,GAAK2gC,IAAS,GAG1B,IAAIE,EAAS,CACX,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EACpD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClD,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAClD,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAEnD,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAClD,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACnD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACpD,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAElD,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GACjD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EACpD,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EACjD,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAEpD,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EACnD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EACnD,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EACpD,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAEjD,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EACpD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAClD,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GACnD,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAElD,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EACnD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EACnD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAClD,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAElD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GACnD,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAClD,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACpD,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAEjD,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EACnD,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACnD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAClD,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAGpDrpG,EAAQ0oG,WAAa,SAAoBM,EAAKC,GAE5C,IADA,IAAIzqC,EAAM,EACD19D,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAI1B09D,IAAQ,EACRA,GAHS6qC,EAAW,GAAJvoG,GADPkoG,IAAS,GAAS,EAAJloG,EAAU,KAMnC,IAASA,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAI1B09D,IAAQ,EACRA,GAHS6qC,EAAO,IAAe,GAAJvoG,GADlBmoG,IAAS,GAAS,EAAJnoG,EAAU,KAMnC,OAAO09D,IAAQ,GAGjB,IAAI8qC,EAAe,CACjB,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GACvD,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAG1DtpG,EAAQ6yE,QAAU,SAAiB9S,GAEjC,IADA,IAAIvB,EAAM,EACD19D,EAAI,EAAGA,EAAIwoG,EAAa/nG,OAAQT,IACvC09D,IAAQ,EACRA,GAAQuB,IAAQupC,EAAaxoG,GAAM,EAErC,OAAO09D,IAAQ,GAGjBx+D,EAAQupG,SAAW,SAAkBxpC,EAAK31C,EAAMg7B,GAE9C,IADA,IAAIp+B,EAAM+4C,EAAIh1D,SAAS,GAChBic,EAAIzlB,OAAS6oB,GAClBpD,EAAM,IAAMA,EAGd,IADA,IAAIw3C,EAAM,GACD19D,EAAI,EAAGA,EAAIspB,EAAMtpB,GAAKskD,EAC7BoZ,EAAI5tD,KAAKoW,EAAIxJ,MAAM1c,EAAGA,EAAIskD,IAC5B,OAAOoZ,EAAInwD,KAAK,sEC9PlB,IAAIm7F,EAAgBxoG,EAAQ,uBACxB25E,EAAS35E,EAAQ,qBAEjByoG,EAAKzoG,EAAQ,YASjB,IAAI0oG,EAAY,CACdC,QAAU,EAAMC,KAAO,EAAM11E,QAAU,GA2BzCl0B,EAAQ8+F,mBAAqB9+F,EAAQ++F,yBAA2B/+F,EAAQg/F,iBAnCxE,SAA2B9wC,GACzB,IAAIotB,EAAQ,IAAIx0D,EAAO6zD,EAAOzsB,GAAKotB,MAAO,OACtCuuB,EAAM,IAAI/iF,EAAO6zD,EAAOzsB,GAAK27C,IAAK,OAEtC,OAAO,IAAIJ,EAAGnuB,EAAOuuB,IAgCvB7pG,EAAQi/F,oBAAsBj/F,EAAQk/F,cAzBtC,SAASD,EAAqB3jB,EAAOtpB,EAAK83C,EAAWC,GACnD,OAAIjjF,EAAO42C,SAAS1L,SAA2BttD,IAAnBglG,EAAU13C,GAC7BitC,EAAoB3jB,EAAO,SAAUtpB,EAAK83C,IAGnD93C,EAAMA,GAAO,SACb+3C,EAAOA,GAAQ,SACfD,EAAYA,GAAa,IAAIhjF,EAAO,CAAC,IAEhCA,EAAO42C,SAASosC,KACnBA,EAAY,IAAIhjF,EAAOgjF,EAAWC,IAGf,iBAAVzuB,EACF,IAAImuB,EAAGD,EAAcluB,EAAOwuB,GAAYA,GAAW,IAGvDhjF,EAAO42C,SAAS4d,KACnBA,EAAQ,IAAIx0D,EAAOw0D,EAAOtpB,IAGrB,IAAIy3C,EAAGnuB,EAAOwuB,GAAW,8LCrClC,IAAIziC,EAAKrmE,EAAQ,SAEbgpG,EAAc,IADAhpG,EAAQ,iBAEtBipG,EAAa,IAAI5iC,EAAG,IACpB6iC,EAAS,IAAI7iC,EAAG,IAChB8iC,EAAM,IAAI9iC,EAAG,IACb+iC,EAAQ,IAAI/iC,EAAG,GACfgjC,EAAQ,IAAIhjC,EAAG,GACfsT,EAAS35E,EAAQ,mBACjB0kB,EAAc1kB,EAAQ,eAG1B,SAASi8F,EAAa7M,EAAKp+B,GAMzB,OALAA,EAAMA,GAAO,OACRlrC,EAAO42C,SAAS0yB,KACnBA,EAAM,IAAItpE,EAAOspE,EAAKp+B,IAExBzxD,KAAK+pG,KAAO,IAAIjjC,EAAG+oB,GACZ7vF,KAGT,SAAS48F,EAAc5S,EAAMv4B,GAM3B,OALAA,EAAMA,GAAO,OACRlrC,EAAO42C,SAAS6sB,KACnBA,EAAO,IAAIzjE,EAAOyjE,EAAMv4B,IAE1BzxD,KAAK68F,MAAQ,IAAI/1B,EAAGkjB,GACbhqF,KAjBTN,EAAOD,QAAUypG,EAoBjB,IAAIc,EAAa,GAsDjB,SAASd,EAAGnuB,EAAOwuB,EAAWU,GAC5BjqG,KAAKkqG,aAAaX,GAClBvpG,KAAKmqG,QAAU,IAAIrjC,EAAGiU,GACtB/6E,KAAKg7E,OAASlU,EAAGsV,KAAKp8E,KAAKmqG,SAC3BnqG,KAAKoqG,UAAYrvB,EAAM/5E,OACvBhB,KAAK+pG,UAAO5lG,EACZnE,KAAK68F,WAAQ14F,EACbnE,KAAKqqG,gBAAalmG,EACd8lG,GACFjqG,KAAK08F,aAAeA,EACpB18F,KAAK48F,cAAgBA,GAErB58F,KAAKqqG,WAAa,EA4DtB,SAAS5O,EAAkBC,EAAIjqC,GAC7B,IAAIllC,EAAM,IAAIhG,EAAOm1E,EAAGn1B,WACxB,OAAK9U,EAGIllC,EAAI/hB,SAASinD,GAFbllC,EA5DXjX,OAAO6a,eAAe+4E,EAAG56E,UAAW,cAAe,CACjD+B,YAAY,EACZo0B,IAAK,WAIH,MAH+B,iBAApBzkD,KAAKqqG,aACdrqG,KAAKqqG,WAxEX,SAAoBtvB,EAAOwuB,GACzB,IAAID,EAAMC,EAAU/+F,SAAS,OACzB6+F,EAAM,CAACC,EAAKvuB,EAAMvwE,SAAS,KAAKsD,KAAK,KACzC,GAAIu7F,KAAOW,EACT,OAAOA,EAAWX,GAEpB,IAyBIiB,EAzBAxoG,EAAQ,EAEZ,GAAIi5E,EAAM7D,WACPkD,EAAOmwB,cACPnwB,EAAOowB,WAAWzvB,KAClB0uB,EAAYp2F,KAAK0nE,GAclB,OAZAj5E,GAAS,EAKPA,GAHU,OAARwnG,GAAwB,OAARA,EAGT,EAIA,EAEXU,EAAWX,GAAOvnG,EACXA,EAOT,OALK2nG,EAAYp2F,KAAK0nE,EAAM1F,KAAK,MAE/BvzE,GAAS,GAGHwnG,GACN,IAAK,KACCvuB,EAAMptB,IAAI+7C,GAAYhiC,IAAIiiC,KAE5B7nG,GAAS,GAEX,MACF,IAAK,MACHwoG,EAAMvvB,EAAMptB,IAAIi8C,IACRliC,IAAImiC,IAAUS,EAAI5iC,IAAIoiC,KAE5BhoG,GAAS,GAEX,MACF,QACEA,GAAS,EAGb,OADAkoG,EAAWX,GAAOvnG,EACXA,EAsBe2oG,CAAWzqG,KAAKmqG,QAASnqG,KAAK0qG,QAE3C1qG,KAAKqqG,cAGhBnB,EAAG56E,UAAU0tE,aAAe,WAK1B,OAJKh8F,KAAK68F,QACR78F,KAAK68F,MAAQ,IAAI/1B,EAAG3hD,EAAYnlB,KAAKoqG,aAEvCpqG,KAAK+pG,KAAO/pG,KAAK2qG,KAAK/xB,MAAM54E,KAAKg7E,QAAQb,OAAOn6E,KAAK68F,OAAO7jB,UACrDh5E,KAAKk8F,gBAGdgN,EAAG56E,UAAU6tE,cAAgB,SAAU5sF,GAGrC,IAAIq7F,GADJr7F,GADAA,EAAQ,IAAIu3D,EAAGv3D,IACDqpE,MAAM54E,KAAKg7E,SACNb,OAAOn6E,KAAK68F,OAAO7jB,UAClC/a,EAAM,IAAI13C,EAAOqkF,EAAOrkC,WACxBwU,EAAQ/6E,KAAK6qG,WACjB,GAAI5sC,EAAIj9D,OAAS+5E,EAAM/5E,OAAQ,CAC7B,IAAI8pG,EAAQ,IAAIvkF,EAAOw0D,EAAM/5E,OAASi9D,EAAIj9D,QAC1C8pG,EAAM3hG,KAAK,GACX80D,EAAM13C,EAAO6C,OAAO,CAAC0hF,EAAO7sC,IAE9B,OAAOA,GAGTirC,EAAG56E,UAAU4tE,aAAe,SAAsBzqC,GAChD,OAAOgqC,EAAkBz7F,KAAK+pG,KAAMt4C,IAGtCy3C,EAAG56E,UAAUmuE,cAAgB,SAAuBhrC,GAClD,OAAOgqC,EAAkBz7F,KAAK68F,MAAOprC,IAGvCy3C,EAAG56E,UAAUu8E,SAAW,SAAUp5C,GAChC,OAAOgqC,EAAkBz7F,KAAKmqG,QAAS14C,IAGzCy3C,EAAG56E,UAAUy8E,aAAe,SAAUt5C,GACpC,OAAOgqC,EAAkBz7F,KAAK2qG,KAAMl5C,IAGtCy3C,EAAG56E,UAAU47E,aAAe,SAAUZ,EAAK73C,GAOzC,OANAA,EAAMA,GAAO,OACRlrC,EAAO42C,SAASmsC,KACnBA,EAAM,IAAI/iF,EAAO+iF,EAAK73C,IAExBzxD,KAAK0qG,MAAQpB,EACbtpG,KAAK2qG,KAAO,IAAI7jC,EAAGwiC,GACZtpG,yKCzJT,IAAImlB,EAAc1kB,EAAQ,eAC1Bf,EAAOD,QAAUurG,EACjBA,EAAUT,YAAcA,EACxBS,EAAUR,WAAaA,EACvB,IAAI1jC,EAAKrmE,EAAQ,SACbipG,EAAa,IAAI5iC,EAAG,IAEpB2iC,EAAc,IADAhpG,EAAQ,iBAEtBwqG,EAAM,IAAInkC,EAAG,GACbokC,EAAM,IAAIpkC,EAAG,GACbqkC,EAAO,IAAIrkC,EAAG,GAGd8iC,GAFU,IAAI9iC,EAAG,IACT,IAAIA,EAAG,GACT,IAAIA,EAAG,KACb+iC,EAAQ,IAAI/iC,EAAG,GAEf6iC,GADQ,IAAI7iC,EAAG,GACN,IAAIA,EAAG,KAChBskC,EAAO,IAAItkC,EAAG,GAEdsT,GADS,IAAItT,EAAG,IACP,MAEb,SAASukC,IACP,GAAe,OAAXjxB,EACF,OAAOA,EAET,IACIzoB,EAAM,GACVA,EAAI,GAAK,EACT,IAAK,IAAIpxD,EAAI,EAAGgwD,EAAI,EAAGA,EAHX,QAGsBA,GAAK,EAAG,CAExC,IADA,IAAIypB,EAAO9yE,KAAK6gE,KAAK7gE,KAAK8yE,KAAKzpB,IACtBv2C,EAAI,EAAGA,EAAIzZ,GAAKoxD,EAAI33C,IAAMggE,GAC7BzpB,EAAIoB,EAAI33C,IAAO,EADoBA,KAIrCzZ,IAAMyZ,GAAK23C,EAAI33C,IAAMggE,IAGzBroB,EAAIpxD,KAAOgwD,GAGb,OADA6pB,EAASzoB,EACFA,EAGT,SAAS44C,EAAYzpG,GAGnB,IAFA,IAAIs5E,EAASixB,IAEJ9qG,EAAI,EAAGA,EAAI65E,EAAOp5E,OAAQT,IACjC,GAA0B,IAAtBO,EAAE4oE,KAAK0Q,EAAO75E,IAChB,OAA0B,IAAtBO,EAAE+2E,KAAKuC,EAAO75E,IAOtB,OAAO,EAGT,SAASiqG,EAAW1pG,GAClB,IAAIqmE,EAAML,EAAGsV,KAAKt7E,GAClB,OAA8D,IAAvDoqG,EAAItyB,MAAMzR,GAAKgT,OAAOr5E,EAAE60E,KAAK,IAAIqD,UAAUnB,KAAK,GAGzD,SAASmzB,EAAUt2B,EAAM40B,GACvB,GAAI50B,EAAO,GAET,OACS,IAAI5N,EADD,IAARwiC,GAAqB,IAARA,EACD,CAAC,IAAM,KAEP,CAAC,IAAM,KAKzB,IAAI9pC,EAAK8rC,EAET,IAJAhC,EAAM,IAAIxiC,EAAGwiC,KAIA,CAEX,IADA9pC,EAAM,IAAIsH,EAAG3hD,EAAYje,KAAK6gE,KAAK2M,EAAO,KACnClV,EAAIiL,YAAciK,GACvBlV,EAAI0V,MAAM,GAQZ,GANI1V,EAAI0X,UACN1X,EAAI+M,KAAK0+B,GAENzrC,EAAIyL,MAAM,IACbzL,EAAI+M,KAAK2+B,GAEN5B,EAAI5hC,IAAIwjC,IAIN,IAAK5B,EAAI5hC,IAAIyjC,GAClB,KAAO3rC,EAAI7R,IAAIi8C,GAAKliC,IAAImiC,IACtBrqC,EAAI+M,KAAK6+B,QALX,KAAO5rC,EAAI7R,IAAI+7C,GAAYhiC,IAAIiiC,IAC7BnqC,EAAI+M,KAAK6+B,GAQb,GAAIb,EADJe,EAAK9rC,EAAI6V,KAAK,KACSk1B,EAAY/qC,IACjCgrC,EAAWc,IAAOd,EAAWhrC,IAC7BiqC,EAAYp2F,KAAKi4F,IAAO7B,EAAYp2F,KAAKmsD,GACzC,OAAOA,4ECpGb9/D,EAAAD,QAAA,CACA8rG,MAAA,CACAjC,IAAA,KACAvuB,MAAA,oMAEAywB,MAAA,CACAlC,IAAA,KACAvuB,MAAA,oQAEA0wB,MAAA,CACAnC,IAAA,KACAvuB,MAAA,oYAEA2wB,OAAA,CACApC,IAAA,KACAvuB,MAAA,ogBAEA4wB,OAAA,CACArC,IAAA,KACAvuB,MAAA,owBAEA6wB,OAAA,CACAtC,IAAA,KACAvuB,MAAA,ogCAEA8wB,OAAA,CACAvC,IAAA,KACAvuB,MAAA,ogDAEA+wB,OAAA,CACAxC,IAAA,KACAvuB,MAAA,mnEC/BA,aAEA,IAAI+f,EAAWr7F,EAEfq7F,EAAS3nE,QAAU1yB,EAAQ,mBAAmB0yB,QAC9C2nE,EAASrvE,MAAQhrB,EAAQ,oBACzBq6F,EAAS7c,KAAOx9E,EAAQ,WACxBq6F,EAAS5L,MAAQzuF,EAAQ,oBACzBq6F,EAASzM,OAAS5tF,EAAQ,qBAG1Bq6F,EAAS3M,GAAK1tF,EAAQ,iBACtBq6F,EAASiR,MAAQtrG,EAAQ,gMCZzB,aAEA,IAAIqmE,EAAKrmE,EAAQ,SACbgrB,EAAQhrB,EAAQ,YAChBurG,EAASvgF,EAAMugF,OACfC,EAASxgF,EAAMwgF,OACfxyF,EAASgS,EAAMhS,OAEnB,SAASyyF,EAAUxiG,EAAMyiG,GACvBnsG,KAAK0J,KAAOA,EACZ1J,KAAKc,EAAI,IAAIgmE,EAAGqlC,EAAKrrG,EAAG,IAGxBd,KAAKmnE,IAAMglC,EAAKpxB,MAAQjU,EAAGK,IAAIglC,EAAKpxB,OAASjU,EAAGsV,KAAKp8E,KAAKc,GAG1Dd,KAAKqmC,KAAO,IAAIygC,EAAG,GAAG8R,MAAM54E,KAAKmnE,KACjCnnE,KAAK47E,IAAM,IAAI9U,EAAG,GAAG8R,MAAM54E,KAAKmnE,KAChCnnE,KAAKwlE,IAAM,IAAIsB,EAAG,GAAG8R,MAAM54E,KAAKmnE,KAGhCnnE,KAAKI,EAAI+rG,EAAK/rG,GAAK,IAAI0mE,EAAGqlC,EAAK/rG,EAAG,IAClCJ,KAAKi3E,EAAIk1B,EAAKl1B,GAAKj3E,KAAKosG,cAAcD,EAAKl1B,EAAGk1B,EAAKE,MAGnDrsG,KAAKssG,QAAU,IAAIz9F,MAAM,GACzB7O,KAAKusG,QAAU,IAAI19F,MAAM,GACzB7O,KAAKwsG,QAAU,IAAI39F,MAAM,GACzB7O,KAAKysG,QAAU,IAAI59F,MAAM,GAEzB7O,KAAK0sG,WAAa1sG,KAAKI,EAAIJ,KAAKI,EAAEqqE,YAAc,EAGhD,IAAIkiC,EAAc3sG,KAAKI,GAAKJ,KAAKc,EAAEq1E,IAAIn2E,KAAKI,IACvCusG,GAAeA,EAAY90B,KAAK,KAAO,EAC1C73E,KAAK4sG,KAAO,MAEZ5sG,KAAK6sG,eAAgB,EACrB7sG,KAAK4sG,KAAO5sG,KAAKI,EAAEw4E,MAAM54E,KAAKmnE,MAwNlC,SAAS2lC,EAAU5d,EAAOxlF,GACxB1J,KAAKkvF,MAAQA,EACblvF,KAAK0J,KAAOA,EACZ1J,KAAK+sG,YAAc,KAxNrBrtG,EAAOD,QAAUysG,EAEjBA,EAAU59E,UAAU0+E,MAAQ,WAC1B,MAAM,IAAIpsG,MAAM,oBAGlBsrG,EAAU59E,UAAUtV,SAAW,WAC7B,MAAM,IAAIpY,MAAM,oBAGlBsrG,EAAU59E,UAAU2+E,aAAe,SAAsBnsG,EAAGyvD,GAC1D92C,EAAO3Y,EAAEisG,aACT,IAAIG,EAAUpsG,EAAEqsG,cAEZC,EAAMpB,EAAOz7C,EAAG,EAAGvwD,KAAK0sG,YACxBW,GAAK,GAAMH,EAAQI,KAAO,IAAOJ,EAAQI,KAAO,GAAM,EAAI,EAAI,GAClED,GAAK,EAGL,IACIrzF,EACAuzF,EAFAC,EAAO,GAGX,IAAKxzF,EAAI,EAAGA,EAAIozF,EAAIpsG,OAAQgZ,GAAKkzF,EAAQI,KAAM,CAC7CC,EAAO,EACP,IAAK,IAAI13F,EAAImE,EAAIkzF,EAAQI,KAAO,EAAGz3F,GAAKmE,EAAGnE,IACzC03F,GAAQA,GAAQ,GAAKH,EAAIv3F,GAC3B23F,EAAKn9F,KAAKk9F,GAKZ,IAFA,IAAI5sG,EAAIX,KAAKytG,OAAO,KAAM,KAAM,MAC5B33F,EAAI9V,KAAKytG,OAAO,KAAM,KAAM,MACvBltG,EAAI8sG,EAAG9sG,EAAI,EAAGA,IAAK,CAC1B,IAAKyZ,EAAI,EAAGA,EAAIwzF,EAAKxsG,OAAQgZ,KAC3BuzF,EAAOC,EAAKxzF,MACCzZ,EACXuV,EAAIA,EAAE43F,SAASR,EAAQS,OAAO3zF,IACvBuzF,KAAUhtG,IACjBuV,EAAIA,EAAE43F,SAASR,EAAQS,OAAO3zF,GAAGqxD,QAErC1qE,EAAIA,EAAE+K,IAAIoK,GAEZ,OAAOnV,EAAEitG,OAGX1B,EAAU59E,UAAUu/E,SAAW,SAAkB/sG,EAAGyvD,GAClD,IAAIyX,EAAI,EAGJ8lC,EAAYhtG,EAAEitG,cAAc/lC,GAChCA,EAAI8lC,EAAU7xB,IAQd,IAPA,IAAIA,EAAM6xB,EAAUH,OAGhBP,EAAMpB,EAAOz7C,EAAGyX,EAAGhoE,KAAK0sG,YAGxB9vF,EAAM5c,KAAKytG,OAAO,KAAM,KAAM,MACzBltG,EAAI6sG,EAAIpsG,OAAS,EAAGT,GAAK,EAAGA,IAAK,CAExC,IAAK,IAAIsV,EAAI,EAAGtV,GAAK,GAAgB,IAAX6sG,EAAI7sG,GAAUA,IACtCsV,IAKF,GAJItV,GAAK,GACPsV,IACF+G,EAAMA,EAAIoxF,KAAKn4F,GAEXtV,EAAI,EACN,MACF,IAAIw7E,EAAIqxB,EAAI7sG,GACZkZ,EAAa,IAANsiE,GAIHn/D,EAHW,WAAX9b,EAAE4I,KAEAqyE,EAAI,EACAn/D,EAAI8wF,SAASzxB,EAAKF,EAAI,GAAM,IAE5Bn/D,EAAI8wF,SAASzxB,GAAMF,EAAI,GAAM,GAAG1Q,OAGpC0Q,EAAI,EACAn/D,EAAIlR,IAAIuwE,EAAKF,EAAI,GAAM,IAEvBn/D,EAAIlR,IAAIuwE,GAAMF,EAAI,GAAM,GAAG1Q,OAGvC,MAAkB,WAAXvqE,EAAE4I,KAAoBkT,EAAIgxF,MAAQhxF,GAG3CsvF,EAAU59E,UAAU2/E,YAAc,SAAqBC,EACrDP,EACAQ,EACAxuE,EACAyuE,GACA,IAMI7tG,EACAyZ,EACAlZ,EARAutG,EAAWruG,KAAKssG,QAChBrwB,EAAMj8E,KAAKusG,QACXa,EAAMptG,KAAKwsG,QAGXp8F,EAAM,EAIV,IAAK7P,EAAI,EAAGA,EAAIo/B,EAAKp/B,IAAK,CAExB,IAAIutG,GADJhtG,EAAI6sG,EAAOptG,IACOwtG,cAAcG,GAChCG,EAAS9tG,GAAKutG,EAAU7xB,IACxBA,EAAI17E,GAAKutG,EAAUH,OAIrB,IAAKptG,EAAIo/B,EAAM,EAAGp/B,GAAK,EAAGA,GAAK,EAAG,CAChC,IAAII,EAAIJ,EAAI,EACRuV,EAAIvV,EACR,GAAoB,IAAhB8tG,EAAS1tG,IAA4B,IAAhB0tG,EAASv4F,GAAlC,CAQA,IAAIw4F,EAAO,CACTX,EAAOhtG,GACP,KACA,KACAgtG,EAAO73F,IAI4B,IAAjC63F,EAAOhtG,GAAGuR,EAAEw1D,IAAIimC,EAAO73F,GAAG5D,IAC5Bo8F,EAAK,GAAKX,EAAOhtG,GAAG+K,IAAIiiG,EAAO73F,IAC/Bw4F,EAAK,GAAKX,EAAOhtG,GAAG4tG,MAAMb,SAASC,EAAO73F,GAAGu1D,QACM,IAA1CsiC,EAAOhtG,GAAGuR,EAAEw1D,IAAIimC,EAAO73F,GAAG5D,EAAEgoE,WACrCo0B,EAAK,GAAKX,EAAOhtG,GAAG4tG,MAAMb,SAASC,EAAO73F,IAC1Cw4F,EAAK,GAAKX,EAAOhtG,GAAG+K,IAAIiiG,EAAO73F,GAAGu1D,SAElCijC,EAAK,GAAKX,EAAOhtG,GAAG4tG,MAAMb,SAASC,EAAO73F,IAC1Cw4F,EAAK,GAAKX,EAAOhtG,GAAG4tG,MAAMb,SAASC,EAAO73F,GAAGu1D,QAG/C,IAAIv8D,EAAQ,EACT,GACA,GACA,GACA,EACD,EACA,EACA,EACA,EACA,GAGE0/F,EAAMvC,EAAOkC,EAAOxtG,GAAIwtG,EAAOr4F,IAInC,IAHA1F,EAAMlJ,KAAKkJ,IAAIo+F,EAAI,GAAGxtG,OAAQoP,GAC9Bg9F,EAAIzsG,GAAK,IAAIkO,MAAMuB,GACnBg9F,EAAIt3F,GAAK,IAAIjH,MAAMuB,GACd4J,EAAI,EAAGA,EAAI5J,EAAK4J,IAAK,CACxB,IAAIy0F,EAAiB,EAAZD,EAAI,GAAGx0F,GACZ00F,EAAiB,EAAZF,EAAI,GAAGx0F,GAEhBozF,EAAIzsG,GAAGqZ,GAAKlL,EAAiB,GAAV2/F,EAAK,IAAUC,EAAK,IACvCtB,EAAIt3F,GAAGkE,GAAK,EACZiiE,EAAIt7E,GAAK2tG,QAhDTlB,EAAIzsG,GAAKqrG,EAAOmC,EAAOxtG,GAAI0tG,EAAS1tG,GAAIX,KAAK0sG,YAC7CU,EAAIt3F,GAAKk2F,EAAOmC,EAAOr4F,GAAIu4F,EAASv4F,GAAI9V,KAAK0sG,YAC7Ct8F,EAAMlJ,KAAKkJ,IAAIg9F,EAAIzsG,GAAGK,OAAQoP,GAC9BA,EAAMlJ,KAAKkJ,IAAIg9F,EAAIt3F,GAAG9U,OAAQoP,GAiDlC,IAAIwM,EAAM5c,KAAKytG,OAAO,KAAM,KAAM,MAC9Bz7E,EAAMhyB,KAAKysG,QACf,IAAKlsG,EAAI6P,EAAK7P,GAAK,EAAGA,IAAK,CAGzB,IAFA,IAAIgwD,EAAI,EAEDhwD,GAAK,GAAG,CACb,IAAI8lC,GAAO,EACX,IAAKrsB,EAAI,EAAGA,EAAI2lB,EAAK3lB,IACnBgY,EAAIhY,GAAiB,EAAZozF,EAAIpzF,GAAGzZ,GACD,IAAXyxB,EAAIhY,KACNqsB,GAAO,GAEX,IAAKA,EACH,MACFkqB,IACAhwD,IAKF,GAHIA,GAAK,GACPgwD,IACF3zC,EAAMA,EAAIoxF,KAAKz9C,GACXhwD,EAAI,EACN,MAEF,IAAKyZ,EAAI,EAAGA,EAAI2lB,EAAK3lB,IAAK,CACxB,IAAI+hE,EAAI/pD,EAAIhY,GAEF,IAAN+hE,IAEKA,EAAI,EACXj7E,EAAIm7E,EAAIjiE,GAAI+hE,EAAI,GAAM,GACfA,EAAI,IACXj7E,EAAIm7E,EAAIjiE,IAAK+hE,EAAI,GAAM,GAAG1Q,OAG1BzuD,EADa,WAAX9b,EAAE4I,KACEkT,EAAI8wF,SAAS5sG,GAEb8b,EAAIlR,IAAI5K,KAIpB,IAAKP,EAAI,EAAGA,EAAIo/B,EAAKp/B,IACnB07E,EAAI17E,GAAK,KAEX,OAAI6tG,EACKxxF,EAEAA,EAAIgxF,OAQf1B,EAAUY,UAAYA,EAEtBA,EAAUx+E,UAAUoqD,GAAK,WACvB,MAAM,IAAI93E,MAAM,oBAGlBksG,EAAUx+E,UAAUtV,SAAW,WAC7B,OAAOhZ,KAAKkvF,MAAMl2E,SAAShZ,OAG7BksG,EAAU59E,UAAUqgF,YAAc,SAAqB5wC,EAAOtM,GAC5DsM,EAAQtyC,EAAM86C,QAAQxI,EAAOtM,GAE7B,IAAI9xB,EAAM3/B,KAAKc,EAAEw8D,aAGjB,IAAkB,IAAbS,EAAM,IAA4B,IAAbA,EAAM,IAA4B,IAAbA,EAAM,KACjDA,EAAM/8D,OAAS,GAAM,EAAI2+B,EAS3B,OARiB,IAAbo+B,EAAM,GACRtkD,EAAOskD,EAAMA,EAAM/8D,OAAS,GAAK,GAAM,GACnB,IAAb+8D,EAAM,IACbtkD,EAAOskD,EAAMA,EAAM/8D,OAAS,GAAK,GAAM,GAE9BhB,KAAKgtG,MAAMjvC,EAAM9gD,MAAM,EAAG,EAAI0iB,GACvCo+B,EAAM9gD,MAAM,EAAI0iB,EAAK,EAAI,EAAIA,IAG1B,IAAkB,IAAbo+B,EAAM,IAA4B,IAAbA,EAAM,KAC3BA,EAAM/8D,OAAS,IAAM2+B,EAC/B,OAAO3/B,KAAK4uG,WAAW7wC,EAAM9gD,MAAM,EAAG,EAAI0iB,GAAmB,IAAbo+B,EAAM,IAExD,MAAM,IAAIn9D,MAAM,yBAGlBksG,EAAUx+E,UAAUugF,iBAAmB,SAA0Bp9C,GAC/D,OAAOzxD,KAAK4Z,OAAO63C,GAAK,IAG1Bq7C,EAAUx+E,UAAU+yC,QAAU,SAAiBytC,GAC7C,IAAInvE,EAAM3/B,KAAKkvF,MAAMpuF,EAAEw8D,aACnBrrD,EAAIjS,KAAKw8F,OAAOj2B,QAAQ,KAAM5mC,GAElC,OAAImvE,EACK,CAAE9uG,KAAK+uG,OAAO73B,SAAW,EAAO,GAAO9tD,OAAOnX,GAEhD,CAAE,GAAOmX,OAAOnX,EAAGjS,KAAK+uG,OAAOxoC,QAAQ,KAAM5mC,KAGtDmtE,EAAUx+E,UAAU1U,OAAS,SAAgB63C,EAAKq9C,GAChD,OAAOrjF,EAAM7R,OAAO5Z,KAAKqhE,QAAQytC,GAAUr9C,IAG7Cq7C,EAAUx+E,UAAU0gF,WAAa,SAAoBC,GACnD,GAAIjvG,KAAK+sG,YACP,OAAO/sG,KAET,IAAI+sG,EAAc,CAChBG,QAAS,KACTE,IAAK,KACL8B,KAAM,MAOR,OALAnC,EAAYK,IAAMptG,KAAK+tG,cAAc,GACrChB,EAAYG,QAAUltG,KAAKmtG,YAAY,EAAG8B,GAC1ClC,EAAYmC,KAAOlvG,KAAKmvG,WACxBnvG,KAAK+sG,YAAcA,EAEZ/sG,MAGT8sG,EAAUx+E,UAAU8gF,YAAc,SAAqB7+C,GACrD,IAAKvwD,KAAK+sG,YACR,OAAO,EAET,IAAIG,EAAUltG,KAAK+sG,YAAYG,QAC/B,QAAKA,GAGEA,EAAQS,OAAO3sG,QAAUkG,KAAK6gE,MAAMxX,EAAEka,YAAc,GAAKyiC,EAAQI,OAG1ER,EAAUx+E,UAAU6+E,YAAc,SAAqBG,EAAM2B,GAC3D,GAAIjvG,KAAK+sG,aAAe/sG,KAAK+sG,YAAYG,QACvC,OAAOltG,KAAK+sG,YAAYG,QAI1B,IAFA,IAAIA,EAAU,CAAEltG,MACZ4c,EAAM5c,KACDO,EAAI,EAAGA,EAAI0uG,EAAO1uG,GAAK+sG,EAAM,CACpC,IAAK,IAAItzF,EAAI,EAAGA,EAAIszF,EAAMtzF,IACxB4C,EAAMA,EAAIyyF,MACZnC,EAAQ78F,KAAKuM,GAEf,MAAO,CACL0wF,KAAMA,EACNK,OAAQT,IAIZJ,EAAUx+E,UAAUy/E,cAAgB,SAAuB9xB,GACzD,GAAIj8E,KAAK+sG,aAAe/sG,KAAK+sG,YAAYK,IACvC,OAAOptG,KAAK+sG,YAAYK,IAK1B,IAHA,IAAIz7C,EAAM,CAAE3xD,MACRoQ,GAAO,GAAK6rE,GAAO,EACnBozB,EAAc,IAARj/F,EAAY,KAAOpQ,KAAKqvG,MACzB9uG,EAAI,EAAGA,EAAI6P,EAAK7P,IACvBoxD,EAAIpxD,GAAKoxD,EAAIpxD,EAAI,GAAGmL,IAAI2jG,GAC1B,MAAO,CACLpzB,IAAKA,EACL0xB,OAAQh8C,IAIZm7C,EAAUx+E,UAAU6gF,SAAW,WAC7B,OAAO,MAGTrC,EAAUx+E,UAAU0/E,KAAO,SAAcz9C,GAEvC,IADA,IAAIrwD,EAAIF,KACCO,EAAI,EAAGA,EAAIgwD,EAAGhwD,IACrBL,EAAIA,EAAEmvG,MACR,OAAOnvG,uDC3XT,aAEA,IAAIurB,EAAQhrB,EAAQ,YAChBqmE,EAAKrmE,EAAQ,SACbwsB,EAAWxsB,EAAQ,YACnBi8D,EAAOj8D,EAAQ,UAEfgZ,EAASgS,EAAMhS,OAEnB,SAAS61F,EAAanD,GAEpBnsG,KAAKuvG,QAA2B,IAAP,EAATpD,EAAKxrG,GACrBX,KAAKwvG,MAAQxvG,KAAKuvG,UAA6B,IAAR,EAATpD,EAAKxrG,GACnCX,KAAK+0E,SAAW/0E,KAAKwvG,MAErB9yC,EAAK37D,KAAKf,KAAM,UAAWmsG,GAE3BnsG,KAAKW,EAAI,IAAImmE,EAAGqlC,EAAKxrG,EAAG,IAAI41E,KAAKv2E,KAAKmnE,IAAIviD,GAC1C5kB,KAAKW,EAAIX,KAAKW,EAAEi4E,MAAM54E,KAAKmnE,KAC3BnnE,KAAKQ,EAAI,IAAIsmE,EAAGqlC,EAAK3rG,EAAG,IAAIo4E,MAAM54E,KAAKmnE,KACvCnnE,KAAK4qF,GAAK5qF,KAAKQ,EAAEo5E,SACjB55E,KAAKywB,EAAI,IAAIq2C,EAAGqlC,EAAK17E,EAAG,IAAImoD,MAAM54E,KAAKmnE,KACvCnnE,KAAKyvG,GAAKzvG,KAAKywB,EAAE0oD,OAAOn5E,KAAKywB,GAE7BhX,GAAQzZ,KAAKuvG,SAAwC,IAA7BvvG,KAAKQ,EAAEw4E,UAAUnB,KAAK,IAC9C73E,KAAK0vG,KAAwB,IAAP,EAATvD,EAAK3rG,GAwFpB,SAASmvG,EAAMzgB,EAAOj9E,EAAGC,EAAG6pE,EAAG17E,GAC7Bq8D,EAAKowC,UAAU/rG,KAAKf,KAAMkvF,EAAO,cACvB,OAANj9E,GAAoB,OAANC,GAAoB,OAAN6pE,GAC9B/7E,KAAKiS,EAAIjS,KAAKkvF,MAAM7oD,KACpBrmC,KAAKkS,EAAIlS,KAAKkvF,MAAMtT,IACpB57E,KAAK+7E,EAAI/7E,KAAKkvF,MAAMtT,IACpB57E,KAAKK,EAAIL,KAAKkvF,MAAM7oD,KACpBrmC,KAAK4vG,MAAO,IAEZ5vG,KAAKiS,EAAI,IAAI60D,EAAG70D,EAAG,IACnBjS,KAAKkS,EAAI,IAAI40D,EAAG50D,EAAG,IACnBlS,KAAK+7E,EAAIA,EAAI,IAAIjV,EAAGiV,EAAG,IAAM/7E,KAAKkvF,MAAMtT,IACxC57E,KAAKK,EAAIA,GAAK,IAAIymE,EAAGzmE,EAAG,IACnBL,KAAKiS,EAAEk1D,MACVnnE,KAAKiS,EAAIjS,KAAKiS,EAAE2mE,MAAM54E,KAAKkvF,MAAM/nB,MAC9BnnE,KAAKkS,EAAEi1D,MACVnnE,KAAKkS,EAAIlS,KAAKkS,EAAE0mE,MAAM54E,KAAKkvF,MAAM/nB,MAC9BnnE,KAAK+7E,EAAE5U,MACVnnE,KAAK+7E,EAAI/7E,KAAK+7E,EAAEnD,MAAM54E,KAAKkvF,MAAM/nB,MAC/BnnE,KAAKK,IAAML,KAAKK,EAAE8mE,MACpBnnE,KAAKK,EAAIL,KAAKK,EAAEu4E,MAAM54E,KAAKkvF,MAAM/nB,MACnCnnE,KAAK4vG,KAAO5vG,KAAK+7E,IAAM/7E,KAAKkvF,MAAMtT,IAG9B57E,KAAKkvF,MAAMna,WAAa/0E,KAAKK,IAC/BL,KAAKK,EAAIL,KAAKiS,EAAEwnE,OAAOz5E,KAAKkS,GACvBlS,KAAK4vG,OACR5vG,KAAKK,EAAIL,KAAKK,EAAEo5E,OAAOz5E,KAAK+7E,EAAE9B,cAjHtChtD,EAASqiF,EAAc5yC,GACvBh9D,EAAOD,QAAU6vG,EAEjBA,EAAahhF,UAAUuhF,MAAQ,SAAerwC,GAC5C,OAAIx/D,KAAKwvG,MACAhwC,EAAI0a,SAEJl6E,KAAKW,EAAE84E,OAAOja,IAGzB8vC,EAAahhF,UAAUwhF,MAAQ,SAAetwC,GAC5C,OAAIx/D,KAAK0vG,KACAlwC,EAEAx/D,KAAKQ,EAAEi5E,OAAOja,IAIzB8vC,EAAahhF,UAAUm/E,OAAS,SAAgBx7F,EAAGC,EAAG6pE,EAAG17E,GACvD,OAAOL,KAAKgtG,MAAM/6F,EAAGC,EAAG6pE,EAAG17E,IAG7BivG,EAAahhF,UAAUsgF,WAAa,SAAoB38F,EAAGuhE,IACzDvhE,EAAI,IAAI60D,EAAG70D,EAAG,KACPk1D,MACLl1D,EAAIA,EAAE2mE,MAAM54E,KAAKmnE,MAEnB,IAAIwQ,EAAK1lE,EAAE2nE,SACPm2B,EAAM/vG,KAAK4qF,GAAGvR,OAAOr5E,KAAKW,EAAE84E,OAAO9B,IACnCq4B,EAAMhwG,KAAK47E,IAAIvC,OAAOr5E,KAAK4qF,GAAGnR,OAAOz5E,KAAKywB,GAAGgpD,OAAO9B,IAEpDs4B,EAAKF,EAAIt2B,OAAOu2B,EAAI/1B,WACpB/nE,EAAI+9F,EAAGl2B,UACX,GAA6C,IAAzC7nE,EAAE0nE,SAASP,OAAO42B,GAAIvoC,IAAI1nE,KAAKqmC,MACjC,MAAM,IAAIzlC,MAAM,iBAElB,IAAI02E,EAAQplE,EAAE8mE,UAAU1B,QAIxB,OAHI9D,IAAQ8D,IAAU9D,GAAO8D,KAC3BplE,EAAIA,EAAEgoE,UAEDl6E,KAAKgtG,MAAM/6F,EAAGC,IAGvBo9F,EAAahhF,UAAU4hF,WAAa,SAAoBh+F,EAAGshE,IACzDthE,EAAI,IAAI40D,EAAG50D,EAAG,KACPi1D,MACLj1D,EAAIA,EAAE0mE,MAAM54E,KAAKmnE,MAGnB,IAAI8oC,EAAK/9F,EAAE0nE,SACPo2B,EAAMC,EAAG52B,OAAOr5E,KAAK4qF,IACrBmlB,EAAME,EAAGx2B,OAAOz5E,KAAKywB,GAAGgpD,OAAOz5E,KAAK4qF,IAAIvR,OAAOr5E,KAAKW,GACpDg3E,EAAKq4B,EAAIv2B,OAAOs2B,EAAI91B,WAExB,GAA0B,IAAtBtC,EAAGjQ,IAAI1nE,KAAKqmC,MAAa,CAC3B,GAAImtC,EACF,MAAM,IAAI5yE,MAAM,iBAEhB,OAAOZ,KAAKgtG,MAAMhtG,KAAKqmC,KAAMn0B,GAGjC,IAAID,EAAI0lE,EAAGoC,UACX,GAA6C,IAAzC9nE,EAAE2nE,SAASP,OAAO1B,GAAIjQ,IAAI1nE,KAAKqmC,MACjC,MAAM,IAAIzlC,MAAM,iBAKlB,OAHIqR,EAAE+mE,UAAU1B,UAAY9D,IAC1BvhE,EAAIA,EAAEioE,UAEDl6E,KAAKgtG,MAAM/6F,EAAGC,IAGvBo9F,EAAahhF,UAAUtV,SAAW,SAAkBg0F,GAClD,GAAIA,EAAMmD,aACR,OAAO,EAGTnD,EAAMoD,YAEN,IAAIz4B,EAAKq1B,EAAM/6F,EAAE2nE,SACbq2B,EAAKjD,EAAM96F,EAAE0nE,SACbo2B,EAAMr4B,EAAG8B,OAAOz5E,KAAKW,GAAGw4E,OAAO82B,GAC/BF,EAAM/vG,KAAK4qF,GAAGnR,OAAOz5E,KAAK47E,IAAIzC,OAAOn5E,KAAKywB,EAAEgpD,OAAO9B,GAAI8B,OAAOw2B,KAElE,OAAwB,IAAjBD,EAAItoC,IAAIqoC,IAkCjB9iF,EAAS0iF,EAAOjzC,EAAKowC,WAErBwC,EAAahhF,UAAU89E,cAAgB,SAAuB7jF,GAC5D,OAAOonF,EAAMU,SAASrwG,KAAMuoB,IAG9B+mF,EAAahhF,UAAU0+E,MAAQ,SAAe/6F,EAAGC,EAAG6pE,EAAG17E,GACrD,OAAO,IAAIsvG,EAAM3vG,KAAMiS,EAAGC,EAAG6pE,EAAG17E,IAGlCsvG,EAAMU,SAAW,SAAkBnhB,EAAO3mE,GACxC,OAAO,IAAIonF,EAAMzgB,EAAO3mE,EAAI,GAAIA,EAAI,GAAIA,EAAI,KAG9ConF,EAAMrhF,UAAUs6C,QAAU,WACxB,OAAI5oE,KAAKmwG,aACA,sBACF,gBAAkBnwG,KAAKiS,EAAE+mE,UAAUxuE,SAAS,GAAI,GACnD,OAASxK,KAAKkS,EAAE8mE,UAAUxuE,SAAS,GAAI,GACvC,OAASxK,KAAK+7E,EAAE/C,UAAUxuE,SAAS,GAAI,GAAK,KAGlDmlG,EAAMrhF,UAAU6hF,WAAa,WAE3B,OAA0B,IAAnBnwG,KAAKiS,EAAE4lE,KAAK,KACO,IAAvB73E,KAAKkS,EAAEw1D,IAAI1nE,KAAK+7E,IAChB/7E,KAAK4vG,MAAqC,IAA7B5vG,KAAKkS,EAAEw1D,IAAI1nE,KAAKkvF,MAAM1uF,KAGxCmvG,EAAMrhF,UAAUgiF,QAAU,WAMxB,IAAI3vG,EAAIX,KAAKiS,EAAE2nE,SAEX9jE,EAAI9V,KAAKkS,EAAE0nE,SAEXp5E,EAAIR,KAAK+7E,EAAEnC,SACfp5E,EAAIA,EAAE44E,QAAQ54E,GAEd,IAAIiwB,EAAIzwB,KAAKkvF,MAAM2gB,MAAMlvG,GAErBR,EAAIH,KAAKiS,EAAEknE,OAAOn5E,KAAKkS,GAAG0nE,SAASN,QAAQ34E,GAAG24E,QAAQxjE,GAEtDmhE,EAAIxmD,EAAE0oD,OAAOrjE,GAEbtW,EAAIy3E,EAAEoC,OAAO74E,GAEb+6C,EAAI9qB,EAAE4oD,OAAOvjE,GAEby6F,EAAKpwG,EAAEs5E,OAAOj6E,GAEdgxG,EAAKv5B,EAAEwC,OAAOl+B,GAEdk1D,EAAKtwG,EAAEs5E,OAAOl+B,GAEdm1D,EAAKlxG,EAAEi6E,OAAOxC,GAClB,OAAOj3E,KAAKkvF,MAAM8d,MAAMuD,EAAIC,EAAIE,EAAID,IAGtCd,EAAMrhF,UAAUqiF,SAAW,WAQzB,IAMIJ,EACAC,EACAE,EACAvwG,EACAo7C,EACAvhC,EAXAlE,EAAI9V,KAAKiS,EAAEknE,OAAOn5E,KAAKkS,GAAG0nE,SAE1Bp5E,EAAIR,KAAKiS,EAAE2nE,SAEXnpD,EAAIzwB,KAAKkS,EAAE0nE,SAQf,GAAI55E,KAAKkvF,MAAMqgB,QAAS,CAItB,IAAI/vG,GAFJW,EAAIH,KAAKkvF,MAAM2gB,MAAMrvG,IAEX24E,OAAO1oD,GACbzwB,KAAK4vG,MAEPW,EAAKz6F,EAAEujE,OAAO74E,GAAG64E,OAAO5oD,GAAGgpD,OAAOj6E,EAAE65E,OAAOr5E,KAAKkvF,MAAM1pB,MAEtDgrC,EAAKhxG,EAAEi6E,OAAOt5E,EAAEk5E,OAAO5oD,IAEvBigF,EAAKlxG,EAAEo6E,SAASP,OAAO75E,GAAG65E,OAAO75E,KAGjC+7C,EAAIv7C,KAAK+7E,EAAEnC,SAEX5/D,EAAIxa,EAAE65E,OAAO99B,GAAG+9B,QAAQ/9B,GAExBg1D,EAAKz6F,EAAEujE,OAAO74E,GAAG84E,QAAQ7oD,GAAGgpD,OAAOz/D,GAEnCw2F,EAAKhxG,EAAEi6E,OAAOt5E,EAAEk5E,OAAO5oD,IAEvBigF,EAAKlxG,EAAEi6E,OAAOz/D,SAIhB7Z,EAAIK,EAAE24E,OAAO1oD,GAEb8qB,EAAIv7C,KAAKkvF,MAAM4gB,MAAM9vG,KAAK+7E,GAAGnC,SAE7B5/D,EAAI7Z,EAAEk5E,OAAO99B,GAAG89B,OAAO99B,GAEvBg1D,EAAKvwG,KAAKkvF,MAAM4gB,MAAMh6F,EAAEwjE,QAAQn5E,IAAIs5E,OAAOz/D,GAE3Cw2F,EAAKxwG,KAAKkvF,MAAM4gB,MAAM3vG,GAAGs5E,OAAOj5E,EAAE84E,QAAQ7oD,IAE1CigF,EAAKvwG,EAAEs5E,OAAOz/D,GAEhB,OAAOha,KAAKkvF,MAAM8d,MAAMuD,EAAIC,EAAIE,IAGlCf,EAAMrhF,UAAU+gF,IAAM,WACpB,OAAIrvG,KAAKmwG,aACAnwG,KAGLA,KAAKkvF,MAAMna,SACN/0E,KAAKswG,UAELtwG,KAAK2wG,YAGhBhB,EAAMrhF,UAAUsiF,QAAU,SAAiB9vG,GAMzC,IAAIH,EAAIX,KAAKkS,EAAEmnE,OAAOr5E,KAAKiS,GAAGwnE,OAAO34E,EAAEoR,EAAEmnE,OAAOv4E,EAAEmR,IAE9C6D,EAAI9V,KAAKkS,EAAEinE,OAAOn5E,KAAKiS,GAAGwnE,OAAO34E,EAAEoR,EAAEinE,OAAOr4E,EAAEmR,IAE9CzR,EAAIR,KAAKK,EAAEo5E,OAAOz5E,KAAKkvF,MAAMugB,IAAIh2B,OAAO34E,EAAET,GAE1CowB,EAAIzwB,KAAK+7E,EAAEtC,OAAO34E,EAAEi7E,EAAE5C,OAAOr4E,EAAEi7E,IAE/B57E,EAAI2V,EAAEujE,OAAO14E,GAEbnB,EAAIixB,EAAE4oD,OAAO74E,GAEby2E,EAAIxmD,EAAE0oD,OAAO34E,GAEb+6C,EAAIzlC,EAAEqjE,OAAOx4E,GAEb4vG,EAAKpwG,EAAEs5E,OAAOj6E,GAEdgxG,EAAKv5B,EAAEwC,OAAOl+B,GAEdk1D,EAAKtwG,EAAEs5E,OAAOl+B,GAEdm1D,EAAKlxG,EAAEi6E,OAAOxC,GAClB,OAAOj3E,KAAKkvF,MAAM8d,MAAMuD,EAAIC,EAAIE,EAAID,IAGtCd,EAAMrhF,UAAUuiF,SAAW,SAAkB/vG,GAO3C,IAgBI0vG,EACAE,EAjBA/vG,EAAIX,KAAK+7E,EAAEtC,OAAO34E,EAAEi7E,GAEpBjmE,EAAInV,EAAEi5E,SAENp5E,EAAIR,KAAKiS,EAAEwnE,OAAO34E,EAAEmR,GAEpBwe,EAAIzwB,KAAKkS,EAAEunE,OAAO34E,EAAEoR,GAEpB/R,EAAIH,KAAKkvF,MAAMz+D,EAAEgpD,OAAOj5E,GAAGi5E,OAAOhpD,GAElCjxB,EAAIsW,EAAEujE,OAAOl5E,GAEb82E,EAAInhE,EAAEqjE,OAAOh5E,GAEb6xB,EAAMhyB,KAAKiS,EAAEknE,OAAOn5E,KAAKkS,GAAGunE,OAAO34E,EAAEmR,EAAEknE,OAAOr4E,EAAEoR,IAAIonE,QAAQ94E,GAAG84E,QAAQ7oD,GACvE8/E,EAAK5vG,EAAE84E,OAAOj6E,GAAGi6E,OAAOznD,GAc5B,OAXIhyB,KAAKkvF,MAAMqgB,SAEbiB,EAAK7vG,EAAE84E,OAAOxC,GAAGwC,OAAOhpD,EAAE4oD,OAAOr5E,KAAKkvF,MAAM2gB,MAAMrvG,KAElDkwG,EAAKlxG,EAAEi6E,OAAOxC,KAGdu5B,EAAK7vG,EAAE84E,OAAOxC,GAAGwC,OAAOhpD,EAAE4oD,OAAO74E,IAEjCkwG,EAAK1wG,KAAKkvF,MAAM4gB,MAAMtwG,GAAGi6E,OAAOxC,IAE3Bj3E,KAAKkvF,MAAM8d,MAAMuD,EAAIC,EAAIE,IAGlCf,EAAMrhF,UAAU5iB,IAAM,SAAa5K,GACjC,OAAId,KAAKmwG,aACArvG,EACLA,EAAEqvG,aACGnwG,KAELA,KAAKkvF,MAAMna,SACN/0E,KAAK4wG,QAAQ9vG,GAEbd,KAAK6wG,SAAS/vG,IAGzB6uG,EAAMrhF,UAAUm5C,IAAM,SAAalX,GACjC,OAAIvwD,KAAKovG,YAAY7+C,GACZvwD,KAAKkvF,MAAM+d,aAAajtG,KAAMuwD,GAE9BvwD,KAAKkvF,MAAM2e,SAAS7tG,KAAMuwD,IAGrCo/C,EAAMrhF,UAAUwiF,OAAS,SAAgBxI,EAAIxnG,EAAG0vD,GAC9C,OAAOxwD,KAAKkvF,MAAM+e,YAAY,EAAG,CAAEjuG,KAAMc,GAAK,CAAEwnG,EAAI93C,GAAM,GAAG,IAG/Dm/C,EAAMrhF,UAAUyiF,QAAU,SAAiBzI,EAAIxnG,EAAG0vD,GAChD,OAAOxwD,KAAKkvF,MAAM+e,YAAY,EAAG,CAAEjuG,KAAMc,GAAK,CAAEwnG,EAAI93C,GAAM,GAAG,IAG/Dm/C,EAAMrhF,UAAU8hF,UAAY,WAC1B,GAAIpwG,KAAK4vG,KACP,OAAO5vG,KAGT,IAAIgxG,EAAKhxG,KAAK+7E,EAAE9B,UAOhB,OANAj6E,KAAKiS,EAAIjS,KAAKiS,EAAEwnE,OAAOu3B,GACvBhxG,KAAKkS,EAAIlS,KAAKkS,EAAEunE,OAAOu3B,GACnBhxG,KAAKK,IACPL,KAAKK,EAAIL,KAAKK,EAAEo5E,OAAOu3B,IACzBhxG,KAAK+7E,EAAI/7E,KAAKkvF,MAAMtT,IACpB57E,KAAK4vG,MAAO,EACL5vG,MAGT2vG,EAAMrhF,UAAU+8C,IAAM,WACpB,OAAOrrE,KAAKkvF,MAAM8d,MAAMhtG,KAAKiS,EAAEioE,SAC7Bl6E,KAAKkS,EACLlS,KAAK+7E,EACL/7E,KAAKK,GAAKL,KAAKK,EAAE65E,WAGrBy1B,EAAMrhF,UAAUkuE,KAAO,WAErB,OADAx8F,KAAKowG,YACEpwG,KAAKiS,EAAE+mE,WAGhB22B,EAAMrhF,UAAUygF,KAAO,WAErB,OADA/uG,KAAKowG,YACEpwG,KAAKkS,EAAE8mE,WAGhB22B,EAAMrhF,UAAUoqD,GAAK,SAAYnpE,GAC/B,OAAOvP,OAASuP,GACyB,IAAlCvP,KAAKw8F,OAAO90B,IAAIn4D,EAAMitF,SACY,IAAlCx8F,KAAK+uG,OAAOrnC,IAAIn4D,EAAMw/F,SAG/BY,EAAMrhF,UAAU2iF,OAAS,SAAgBh/F,GACvC,IAAIqhE,EAAKrhE,EAAE2mE,MAAM54E,KAAKkvF,MAAM/nB,KAAKsS,OAAOz5E,KAAK+7E,GAC7C,GAAuB,IAAnB/7E,KAAKiS,EAAEy1D,IAAI4L,GACb,OAAO,EAIT,IAFA,IAAI49B,EAAKj/F,EAAEud,QACPnvB,EAAIL,KAAKkvF,MAAM0d,KAAKnzB,OAAOz5E,KAAK+7E,KAC3B,CAEP,GADAm1B,EAAG3kC,KAAKvsE,KAAKkvF,MAAM9uF,GACf8wG,EAAGxpC,IAAI1nE,KAAKkvF,MAAMpuF,IAAM,EAC1B,OAAO,EAGT,GADAwyE,EAAG8F,QAAQ/4E,GACY,IAAnBL,KAAKiS,EAAEy1D,IAAI4L,GACb,OAAO,IAKbq8B,EAAMrhF,UAAUs/E,IAAM+B,EAAMrhF,UAAU8hF,UACtCT,EAAMrhF,UAAUo/E,SAAWiC,EAAMrhF,UAAU5iB,kFClb3C,aAEA,IAAIwjF,EAAQzvF,EAEZyvF,EAAM9yB,KAAO37D,EAAQ,UACrByuF,EAAMiiB,MAAQ1wG,EAAQ,WACtByuF,EAAM9S,KAAO37E,EAAQ,UACrByuF,EAAMkiB,QAAU3wG,EAAQ,8FCPxB,aAEA,IAAIqmE,EAAKrmE,EAAQ,SACbwsB,EAAWxsB,EAAQ,YACnBi8D,EAAOj8D,EAAQ,UAEfgrB,EAAQhrB,EAAQ,YAEpB,SAAS4wG,EAAUlF,GACjBzvC,EAAK37D,KAAKf,KAAM,OAAQmsG,GAExBnsG,KAAKW,EAAI,IAAImmE,EAAGqlC,EAAKxrG,EAAG,IAAIi4E,MAAM54E,KAAKmnE,KACvCnnE,KAAK8V,EAAI,IAAIgxD,EAAGqlC,EAAKr2F,EAAG,IAAI8iE,MAAM54E,KAAKmnE,KACvCnnE,KAAKsxG,GAAK,IAAIxqC,EAAG,GAAG8R,MAAM54E,KAAKmnE,KAAK8S,UACpCj6E,KAAKwlE,IAAM,IAAIsB,EAAG,GAAG8R,MAAM54E,KAAKmnE,KAChCnnE,KAAKuxG,IAAMvxG,KAAKsxG,GAAG73B,OAAOz5E,KAAKW,EAAEw4E,OAAOn5E,KAAKwlE,MAc/C,SAASmqC,EAAMzgB,EAAOj9E,EAAG8pE,GACvBrf,EAAKowC,UAAU/rG,KAAKf,KAAMkvF,EAAO,cACvB,OAANj9E,GAAoB,OAAN8pE,GAChB/7E,KAAKiS,EAAIjS,KAAKkvF,MAAMtT,IACpB57E,KAAK+7E,EAAI/7E,KAAKkvF,MAAM7oD,OAEpBrmC,KAAKiS,EAAI,IAAI60D,EAAG70D,EAAG,IACnBjS,KAAK+7E,EAAI,IAAIjV,EAAGiV,EAAG,IACd/7E,KAAKiS,EAAEk1D,MACVnnE,KAAKiS,EAAIjS,KAAKiS,EAAE2mE,MAAM54E,KAAKkvF,MAAM/nB,MAC9BnnE,KAAK+7E,EAAE5U,MACVnnE,KAAK+7E,EAAI/7E,KAAK+7E,EAAEnD,MAAM54E,KAAKkvF,MAAM/nB,OAvBvCl6C,EAASokF,EAAW30C,GACpBh9D,EAAOD,QAAU4xG,EAEjBA,EAAU/iF,UAAUtV,SAAW,SAAkBg0F,GAC/C,IAAI/6F,EAAI+6F,EAAMoD,YAAYn+F,EACtB0lE,EAAK1lE,EAAE2nE,SACPm2B,EAAMp4B,EAAG8B,OAAOxnE,GAAGknE,OAAOxB,EAAG8B,OAAOz5E,KAAKW,IAAIw4E,OAAOlnE,GAGxD,OAA+B,IAFvB89F,EAAIh2B,UAEHH,SAASlS,IAAIqoC,IAiBxB9iF,EAAS0iF,EAAOjzC,EAAKowC,WAErBuE,EAAU/iF,UAAUqgF,YAAc,SAAqB5wC,EAAOtM,GAC5D,OAAOzxD,KAAKgtG,MAAMvhF,EAAM86C,QAAQxI,EAAOtM,GAAM,IAG/C4/C,EAAU/iF,UAAU0+E,MAAQ,SAAe/6F,EAAG8pE,GAC5C,OAAO,IAAI4zB,EAAM3vG,KAAMiS,EAAG8pE,IAG5Bs1B,EAAU/iF,UAAU89E,cAAgB,SAAuB7jF,GACzD,OAAOonF,EAAMU,SAASrwG,KAAMuoB,IAG9BonF,EAAMrhF,UAAU0gF,WAAa,aAI7BW,EAAMrhF,UAAU+yC,QAAU,WACxB,OAAOrhE,KAAKw8F,OAAOj2B,QAAQ,KAAMvmE,KAAKkvF,MAAMpuF,EAAEw8D,eAGhDqyC,EAAMU,SAAW,SAAkBnhB,EAAO3mE,GACxC,OAAO,IAAIonF,EAAMzgB,EAAO3mE,EAAI,GAAIA,EAAI,IAAM2mE,EAAMtT,MAGlD+zB,EAAMrhF,UAAUs6C,QAAU,WACxB,OAAI5oE,KAAKmwG,aACA,sBACF,gBAAkBnwG,KAAKiS,EAAE+mE,UAAUxuE,SAAS,GAAI,GACnD,OAASxK,KAAK+7E,EAAE/C,UAAUxuE,SAAS,GAAI,GAAK,KAGlDmlG,EAAMrhF,UAAU6hF,WAAa,WAE3B,OAA0B,IAAnBnwG,KAAK+7E,EAAElE,KAAK,IAGrB83B,EAAMrhF,UAAU+gF,IAAM,WAKpB,IAEImC,EAFIxxG,KAAKiS,EAAEknE,OAAOn5E,KAAK+7E,GAEhBnC,SAIP63B,EAFIzxG,KAAKiS,EAAEonE,OAAOr5E,KAAK+7E,GAEhBnC,SAEPp5E,EAAIgxG,EAAGn4B,OAAOo4B,GAEdlB,EAAKiB,EAAG/3B,OAAOg4B,GAEff,EAAKlwG,EAAEi5E,OAAOg4B,EAAGt4B,OAAOn5E,KAAKkvF,MAAMqiB,IAAI93B,OAAOj5E,KAClD,OAAOR,KAAKkvF,MAAM8d,MAAMuD,EAAIG,IAG9Bf,EAAMrhF,UAAU5iB,IAAM,WACpB,MAAM,IAAI9K,MAAM,sCAGlB+uG,EAAMrhF,UAAUojF,QAAU,SAAiB5wG,EAAGm1E,GAK5C,IAAIt1E,EAAIX,KAAKiS,EAAEknE,OAAOn5E,KAAK+7E,GAEvBjmE,EAAI9V,KAAKiS,EAAEonE,OAAOr5E,KAAK+7E,GAEvBv7E,EAAIM,EAAEmR,EAAEknE,OAAOr4E,EAAEi7E,GAIjB41B,EAFI7wG,EAAEmR,EAAEonE,OAAOv4E,EAAEi7E,GAEVtC,OAAO94E,GAEd+V,EAAKlW,EAAEi5E,OAAO3jE,GAEdy6F,EAAKt6B,EAAK8F,EAAEtC,OAAOk4B,EAAGx4B,OAAOziE,GAAIkjE,UAEjC82B,EAAKz6B,EAAKhkE,EAAEwnE,OAAOk4B,EAAGr4B,QAAQ5iE,GAAIkjE,UACtC,OAAO55E,KAAKkvF,MAAM8d,MAAMuD,EAAIG,IAG9Bf,EAAMrhF,UAAUm5C,IAAM,SAAalX,GAMjC,IALA,IAAIlwD,EAAIkwD,EAAE/gC,QACN7uB,EAAIX,KACJ8V,EAAI9V,KAAKkvF,MAAM8d,MAAM,KAAM,MAGtBt4B,EAAO,GAAkB,IAAdr0E,EAAEw3E,KAAK,GAAUx3E,EAAEgqE,OAAO,GAC5CqK,EAAKrkE,KAAKhQ,EAAE+pE,MAAM,IAEpB,IAAK,IAAI7pE,EAAIm0E,EAAK1zE,OAAS,EAAGT,GAAK,EAAGA,IACpB,IAAZm0E,EAAKn0E,IAEPI,EAAIA,EAAE+wG,QAAQ57F,EARV9V,MAUJ8V,EAAIA,EAAEu5F,QAGNv5F,EAAInV,EAAE+wG,QAAQ57F,EAbV9V,MAeJW,EAAIA,EAAE0uG,OAGV,OAAOv5F,GAGT65F,EAAMrhF,UAAUwiF,OAAS,WACvB,MAAM,IAAIlwG,MAAM,sCAGlB+uG,EAAMrhF,UAAUsjF,QAAU,WACxB,MAAM,IAAIhxG,MAAM,sCAGlB+uG,EAAMrhF,UAAUoqD,GAAK,SAAYnpE,GAC/B,OAAyC,IAAlCvP,KAAKw8F,OAAO90B,IAAIn4D,EAAMitF,SAG/BmT,EAAMrhF,UAAU8hF,UAAY,WAG1B,OAFApwG,KAAKiS,EAAIjS,KAAKiS,EAAEwnE,OAAOz5E,KAAK+7E,EAAE9B,WAC9Bj6E,KAAK+7E,EAAI/7E,KAAKkvF,MAAMtT,IACb57E,MAGT2vG,EAAMrhF,UAAUkuE,KAAO,WAIrB,OAFAx8F,KAAKowG,YAEEpwG,KAAKiS,EAAE+mE,yFChLhB,aAEA,IAAIvtD,EAAQhrB,EAAQ,YAChBqmE,EAAKrmE,EAAQ,SACbwsB,EAAWxsB,EAAQ,YACnBi8D,EAAOj8D,EAAQ,UAEfgZ,EAASgS,EAAMhS,OAEnB,SAASo4F,EAAW1F,GAClBzvC,EAAK37D,KAAKf,KAAM,QAASmsG,GAEzBnsG,KAAKW,EAAI,IAAImmE,EAAGqlC,EAAKxrG,EAAG,IAAIi4E,MAAM54E,KAAKmnE,KACvCnnE,KAAK8V,EAAI,IAAIgxD,EAAGqlC,EAAKr2F,EAAG,IAAI8iE,MAAM54E,KAAKmnE,KACvCnnE,KAAK8xG,KAAO9xG,KAAKwlE,IAAIyU,UAErBj6E,KAAK+xG,MAAqC,IAA7B/xG,KAAKW,EAAEq4E,UAAUnB,KAAK,GACnC73E,KAAKgyG,OAAmD,IAA1ChyG,KAAKW,EAAEq4E,UAAUvM,IAAIzsE,KAAKc,GAAG+2E,MAAM,GAGjD73E,KAAKiyG,KAAOjyG,KAAKkyG,iBAAiB/F,GAClCnsG,KAAKmyG,YAAc,IAAItjG,MAAM,GAC7B7O,KAAKoyG,YAAc,IAAIvjG,MAAM,GAoO/B,SAAS8gG,EAAMzgB,EAAOj9E,EAAGC,EAAGmgG,GAC1B31C,EAAKowC,UAAU/rG,KAAKf,KAAMkvF,EAAO,UACvB,OAANj9E,GAAoB,OAANC,GAChBlS,KAAKiS,EAAI,KACTjS,KAAKkS,EAAI,KACTlS,KAAKsyG,KAAM,IAEXtyG,KAAKiS,EAAI,IAAI60D,EAAG70D,EAAG,IACnBjS,KAAKkS,EAAI,IAAI40D,EAAG50D,EAAG,IAEfmgG,IACFryG,KAAKiS,EAAEinE,SAASl5E,KAAKkvF,MAAM/nB,KAC3BnnE,KAAKkS,EAAEgnE,SAASl5E,KAAKkvF,MAAM/nB,MAExBnnE,KAAKiS,EAAEk1D,MACVnnE,KAAKiS,EAAIjS,KAAKiS,EAAE2mE,MAAM54E,KAAKkvF,MAAM/nB,MAC9BnnE,KAAKkS,EAAEi1D,MACVnnE,KAAKkS,EAAIlS,KAAKkS,EAAE0mE,MAAM54E,KAAKkvF,MAAM/nB,MACnCnnE,KAAKsyG,KAAM,GA6Nf,SAASC,EAAOrjB,EAAOj9E,EAAGC,EAAG6pE,GAC3Brf,EAAKowC,UAAU/rG,KAAKf,KAAMkvF,EAAO,YACvB,OAANj9E,GAAoB,OAANC,GAAoB,OAAN6pE,GAC9B/7E,KAAKiS,EAAIjS,KAAKkvF,MAAMtT,IACpB57E,KAAKkS,EAAIlS,KAAKkvF,MAAMtT,IACpB57E,KAAK+7E,EAAI,IAAIjV,EAAG,KAEhB9mE,KAAKiS,EAAI,IAAI60D,EAAG70D,EAAG,IACnBjS,KAAKkS,EAAI,IAAI40D,EAAG50D,EAAG,IACnBlS,KAAK+7E,EAAI,IAAIjV,EAAGiV,EAAG,KAEhB/7E,KAAKiS,EAAEk1D,MACVnnE,KAAKiS,EAAIjS,KAAKiS,EAAE2mE,MAAM54E,KAAKkvF,MAAM/nB,MAC9BnnE,KAAKkS,EAAEi1D,MACVnnE,KAAKkS,EAAIlS,KAAKkS,EAAE0mE,MAAM54E,KAAKkvF,MAAM/nB,MAC9BnnE,KAAK+7E,EAAE5U,MACVnnE,KAAK+7E,EAAI/7E,KAAK+7E,EAAEnD,MAAM54E,KAAKkvF,MAAM/nB,MAEnCnnE,KAAK4vG,KAAO5vG,KAAK+7E,IAAM/7E,KAAKkvF,MAAMtT,IAnepC3uD,EAAS4kF,EAAYn1C,GACrBh9D,EAAOD,QAAUoyG,EAEjBA,EAAWvjF,UAAU4jF,iBAAmB,SAA0B/F,GAEhE,GAAKnsG,KAAK+xG,OAAU/xG,KAAKi3E,GAAMj3E,KAAKI,GAAwB,IAAnBJ,KAAKc,EAAE4oE,KAAK,GAArD,CAIA,IAAIwlC,EACAsD,EACJ,GAAIrG,EAAK+C,KACPA,EAAO,IAAIpoC,EAAGqlC,EAAK+C,KAAM,IAAIt2B,MAAM54E,KAAKmnE,SACnC,CACL,IAAIsrC,EAAQzyG,KAAK0yG,cAAc1yG,KAAKc,GAGpCouG,GADAA,EAAOuD,EAAM,GAAG/qC,IAAI+qC,EAAM,IAAM,EAAIA,EAAM,GAAKA,EAAM,IACzC75B,MAAM54E,KAAKmnE,KAEzB,GAAIglC,EAAKqG,OACPA,EAAS,IAAI1rC,EAAGqlC,EAAKqG,OAAQ,QACxB,CAEL,IAAIG,EAAU3yG,KAAK0yG,cAAc1yG,KAAKI,GACsB,IAAxDJ,KAAKi3E,EAAExP,IAAIkrC,EAAQ,IAAI1gG,EAAEy1D,IAAI1nE,KAAKi3E,EAAEhlE,EAAEwnE,OAAOy1B,IAC/CsD,EAASG,EAAQ,IAEjBH,EAASG,EAAQ,GACjBl5F,EAA2D,IAApDzZ,KAAKi3E,EAAExP,IAAI+qC,GAAQvgG,EAAEy1D,IAAI1nE,KAAKi3E,EAAEhlE,EAAEwnE,OAAOy1B,MAiBpD,MAAO,CACLA,KAAMA,EACNsD,OAAQA,EACRI,MAdEzG,EAAKyG,MACCzG,EAAKyG,MAAMxvG,KAAI,SAASyvG,GAC9B,MAAO,CACLlyG,EAAG,IAAImmE,EAAG+rC,EAAIlyG,EAAG,IACjBmV,EAAG,IAAIgxD,EAAG+rC,EAAI/8F,EAAG,QAIb9V,KAAK8yG,cAAcN,MAU/BX,EAAWvjF,UAAUokF,cAAgB,SAAuBlzC,GAI1D,IAAI2H,EAAM3H,IAAQx/D,KAAKc,EAAId,KAAKmnE,IAAML,EAAGsV,KAAK5c,GAC1CsyC,EAAO,IAAIhrC,EAAG,GAAG8R,MAAMzR,GAAK8S,UAC5B84B,EAAQjB,EAAK53B,SAEbxqE,EAAI,IAAIo3D,EAAG,GAAG8R,MAAMzR,GAAK+S,SAASH,UAAUN,OAAOq4B,GAIvD,MAAO,CAFEiB,EAAM55B,OAAOzpE,GAAGspE,UAChB+5B,EAAM15B,OAAO3pE,GAAGspE,YAI3B64B,EAAWvjF,UAAUwkF,cAAgB,SAAuBN,GA2B1D,IAzBA,IAYI5lC,EACA8B,EAEA3B,EACA8B,EAEA3B,EACA8B,EAEAgkC,EAEA9yG,EACA+R,EAxBAghG,EAAWjzG,KAAKI,EAAEk1E,MAAMpuE,KAAKI,MAAMtH,KAAKI,EAAEqqE,YAAc,IAIxD/pE,EAAI8xG,EACJnrG,EAAIrH,KAAKI,EAAEovB,QACXkoD,EAAK,IAAI5Q,EAAG,GACZosC,EAAK,IAAIpsC,EAAG,GACZ6Q,EAAK,IAAI7Q,EAAG,GACZmpC,EAAK,IAAInpC,EAAG,GAaZvmE,EAAI,EAGa,IAAdG,EAAEm3E,KAAK,IAAU,CACtB,IAAI1N,EAAI9iE,EAAE8uE,IAAIz1E,GACdR,EAAImH,EAAEolE,IAAItC,EAAE1C,IAAI/mE,IAChBuR,EAAI0lE,EAAGlL,IAAItC,EAAE1C,IAAIiQ,IACjB,IAAIxlE,EAAI+9F,EAAGxjC,IAAItC,EAAE1C,IAAIyrC,IAErB,IAAKnmC,GAAM7sE,EAAEwnE,IAAIurC,GAAY,EAC3BrmC,EAAKomC,EAAM3nC,MACXqD,EAAKgJ,EACL3K,EAAK7sE,EAAEmrE,MACPwD,EAAK58D,OACA,GAAI86D,GAAc,KAANxsE,EACjB,MAEFyyG,EAAQ9yG,EAERmH,EAAI3G,EACJA,EAAIR,EACJy3E,EAAKD,EACLA,EAAKzlE,EACLg+F,EAAKiD,EACLA,EAAKhhG,EAEPg7D,EAAKhtE,EAAEmrE,MACP2D,EAAK/8D,EAEL,IAAIkhG,EAAOpmC,EAAGuH,MAAM5oE,IAAImjE,EAAGyF,OAiB3B,OAhBWpH,EAAGoH,MAAM5oE,IAAIsjE,EAAGsF,OAClB5M,IAAIyrC,IAAS,IACpBjmC,EAAKN,EACLoC,EAAKN,GAIH3B,EAAG9F,WACL8F,EAAKA,EAAG1B,MACRwD,EAAKA,EAAGxD,OAEN6B,EAAGjG,WACLiG,EAAKA,EAAG7B,MACR2D,EAAKA,EAAG3D,OAGH,CACL,CAAE1qE,EAAGosE,EAAIj3D,EAAG+4D,GACZ,CAAEluE,EAAGusE,EAAIp3D,EAAGk5D,KAIhB6iC,EAAWvjF,UAAU8kF,WAAa,SAAoB7iD,GACpD,IAAIqiD,EAAQ5yG,KAAKiyG,KAAKW,MAClBS,EAAKT,EAAM,GACXU,EAAKV,EAAM,GAEXjoB,EAAK2oB,EAAGx9F,EAAE2xD,IAAIlX,GAAGimB,SAASx2E,KAAKI,GAC/BwqF,EAAKyoB,EAAGv9F,EAAEu1D,MAAM5D,IAAIlX,GAAGimB,SAASx2E,KAAKI,GAErCmzG,EAAK5oB,EAAGljB,IAAI4rC,EAAG1yG,GACf6yG,EAAK5oB,EAAGnjB,IAAI6rC,EAAG3yG,GACf8yG,EAAK9oB,EAAGljB,IAAI4rC,EAAGv9F,GACf49F,EAAK9oB,EAAGnjB,IAAI6rC,EAAGx9F,GAKnB,MAAO,CAAEwyF,GAFA/3C,EAAEkc,IAAI8mC,GAAI9mC,IAAI+mC,GAENhjD,GADRijD,EAAG/nG,IAAIgoG,GAAIroC,QAItBwmC,EAAWvjF,UAAUsgF,WAAa,SAAoB38F,EAAGuhE,IACvDvhE,EAAI,IAAI60D,EAAG70D,EAAG,KACPk1D,MACLl1D,EAAIA,EAAE2mE,MAAM54E,KAAKmnE,MAEnB,IAAI8oC,EAAKh+F,EAAE2nE,SAASH,OAAOxnE,GAAGmnE,QAAQnnE,EAAEwnE,OAAOz5E,KAAKW,IAAIy4E,QAAQp5E,KAAK8V,GACjE5D,EAAI+9F,EAAGl2B,UACX,GAA6C,IAAzC7nE,EAAE0nE,SAASP,OAAO42B,GAAIvoC,IAAI1nE,KAAKqmC,MACjC,MAAM,IAAIzlC,MAAM,iBAIlB,IAAI02E,EAAQplE,EAAE8mE,UAAU1B,QAIxB,OAHI9D,IAAQ8D,IAAU9D,GAAO8D,KAC3BplE,EAAIA,EAAEgoE,UAEDl6E,KAAKgtG,MAAM/6F,EAAGC,IAGvB2/F,EAAWvjF,UAAUtV,SAAW,SAAkBg0F,GAChD,GAAIA,EAAMsF,IACR,OAAO,EAET,IAAIrgG,EAAI+6F,EAAM/6F,EACVC,EAAI86F,EAAM96F,EAEVyhG,EAAK3zG,KAAKW,EAAE84E,OAAOxnE,GACnB89F,EAAM99F,EAAE2nE,SAASH,OAAOxnE,GAAGmnE,QAAQu6B,GAAIv6B,QAAQp5E,KAAK8V,GACxD,OAA2C,IAApC5D,EAAE0nE,SAASN,QAAQy2B,GAAKl4B,KAAK,IAGtCg6B,EAAWvjF,UAAUslF,gBACjB,SAAyBjG,EAAQQ,EAAQC,GAGvC,IAFA,IAAIyF,EAAU7zG,KAAKmyG,YACf2B,EAAU9zG,KAAKoyG,YACV7xG,EAAI,EAAGA,EAAIotG,EAAO3sG,OAAQT,IAAK,CACtC,IAAI+S,EAAQtT,KAAKozG,WAAWjF,EAAO5tG,IAC/BO,EAAI6sG,EAAOptG,GACX2uG,EAAOpuG,EAAEquG,WAET77F,EAAMg1F,GAAGrhC,WACX3zD,EAAMg1F,GAAGn9B,OACTrqE,EAAIA,EAAEuqE,KAAI,IAER/3D,EAAMk9C,GAAGyW,WACX3zD,EAAMk9C,GAAG2a,OACT+jC,EAAOA,EAAK7jC,KAAI,IAGlBwoC,EAAY,EAAJtzG,GAASO,EACjB+yG,EAAY,EAAJtzG,EAAQ,GAAK2uG,EACrB4E,EAAY,EAAJvzG,GAAS+S,EAAMg1F,GACvBwL,EAAY,EAAJvzG,EAAQ,GAAK+S,EAAMk9C,GAK7B,IAHA,IAAImB,EAAM3xD,KAAKiuG,YAAY,EAAG4F,EAASC,EAAa,EAAJvzG,EAAO6tG,GAG9Cp0F,EAAI,EAAGA,EAAQ,EAAJzZ,EAAOyZ,IACzB65F,EAAQ75F,GAAK,KACb85F,EAAQ95F,GAAK,KAEf,OAAO23C,GAwBb1kC,EAAS0iF,EAAOjzC,EAAKowC,WAErB+E,EAAWvjF,UAAU0+E,MAAQ,SAAe/6F,EAAGC,EAAGmgG,GAChD,OAAO,IAAI1C,EAAM3vG,KAAMiS,EAAGC,EAAGmgG,IAG/BR,EAAWvjF,UAAU89E,cAAgB,SAAuB7jF,EAAK4+C,GAC/D,OAAOwoC,EAAMU,SAASrwG,KAAMuoB,EAAK4+C,IAGnCwoC,EAAMrhF,UAAU6gF,SAAW,WACzB,GAAKnvG,KAAKkvF,MAAM+iB,KAAhB,CAGA,IAAIzhG,EAAMxQ,KAAK+sG,YACf,GAAIv8F,GAAOA,EAAI0+F,KACb,OAAO1+F,EAAI0+F,KAEb,IAAIA,EAAOlvG,KAAKkvF,MAAM8d,MAAMhtG,KAAKiS,EAAEwnE,OAAOz5E,KAAKkvF,MAAM+iB,KAAK/C,MAAOlvG,KAAKkS,GACtE,GAAI1B,EAAK,CACP,IAAI0+E,EAAQlvF,KAAKkvF,MACb6kB,EAAU,SAASjzG,GACrB,OAAOouF,EAAM8d,MAAMlsG,EAAEmR,EAAEwnE,OAAOyV,EAAM+iB,KAAK/C,MAAOpuG,EAAEoR,IAEpD1B,EAAI0+F,KAAOA,EACXA,EAAKnC,YAAc,CACjBmC,KAAM,KACN9B,IAAK58F,EAAI48F,KAAO,CACdnxB,IAAKzrE,EAAI48F,IAAInxB,IACb0xB,OAAQn9F,EAAI48F,IAAIO,OAAOvqG,IAAI2wG,IAE7B7G,QAAS18F,EAAI08F,SAAW,CACtBI,KAAM98F,EAAI08F,QAAQI,KAClBK,OAAQn9F,EAAI08F,QAAQS,OAAOvqG,IAAI2wG,KAIrC,OAAO7E,IAGTS,EAAMrhF,UAAUw7C,OAAS,WACvB,OAAK9pE,KAAK+sG,YAGH,CAAE/sG,KAAKiS,EAAGjS,KAAKkS,EAAGlS,KAAK+sG,aAAe,CAC3CG,QAASltG,KAAK+sG,YAAYG,SAAW,CACnCI,KAAMttG,KAAK+sG,YAAYG,QAAQI,KAC/BK,OAAQ3tG,KAAK+sG,YAAYG,QAAQS,OAAO1wF,MAAM,IAEhDmwF,IAAKptG,KAAK+sG,YAAYK,KAAO,CAC3BnxB,IAAKj8E,KAAK+sG,YAAYK,IAAInxB,IAC1B0xB,OAAQ3tG,KAAK+sG,YAAYK,IAAIO,OAAO1wF,MAAM,MATrC,CAAEjd,KAAKiS,EAAGjS,KAAKkS,IAc1By9F,EAAMU,SAAW,SAAkBnhB,EAAO3mE,EAAK4+C,GAC1B,iBAAR5+C,IACTA,EAAMhjB,KAAKlB,MAAMkkB,IACnB,IAAIopC,EAAMu9B,EAAM8d,MAAMzkF,EAAI,GAAIA,EAAI,GAAI4+C,GACtC,IAAK5+C,EAAI,GACP,OAAOopC,EAET,SAASqiD,EAAUzrF,GACjB,OAAO2mE,EAAM8d,MAAMzkF,EAAI,GAAIA,EAAI,GAAI4+C,GAGrC,IAAI32D,EAAM+X,EAAI,GAYd,OAXAopC,EAAIo7C,YAAc,CAChBmC,KAAM,KACNhC,QAAS18F,EAAI08F,SAAW,CACtBI,KAAM98F,EAAI08F,QAAQI,KAClBK,OAAQ,CAAEh8C,GAAMvoC,OAAO5Y,EAAI08F,QAAQS,OAAOvqG,IAAI4wG,KAEhD5G,IAAK58F,EAAI48F,KAAO,CACdnxB,IAAKzrE,EAAI48F,IAAInxB,IACb0xB,OAAQ,CAAEh8C,GAAMvoC,OAAO5Y,EAAI48F,IAAIO,OAAOvqG,IAAI4wG,MAGvCriD,GAGTg+C,EAAMrhF,UAAUs6C,QAAU,WACxB,OAAI5oE,KAAKmwG,aACA,sBACF,gBAAkBnwG,KAAKiS,EAAE+mE,UAAUxuE,SAAS,GAAI,GACnD,OAASxK,KAAKkS,EAAE8mE,UAAUxuE,SAAS,GAAI,GAAK,KAGlDmlG,EAAMrhF,UAAU6hF,WAAa,WAC3B,OAAOnwG,KAAKsyG,KAGd3C,EAAMrhF,UAAU5iB,IAAM,SAAa5K,GAEjC,GAAId,KAAKsyG,IACP,OAAOxxG,EAGT,GAAIA,EAAEwxG,IACJ,OAAOtyG,KAGT,GAAIA,KAAK04E,GAAG53E,GACV,OAAOd,KAAKqvG,MAGd,GAAIrvG,KAAKqrE,MAAMqN,GAAG53E,GAChB,OAAOd,KAAKkvF,MAAM8d,MAAM,KAAM,MAGhC,GAAwB,IAApBhtG,KAAKiS,EAAEy1D,IAAI5mE,EAAEmR,GACf,OAAOjS,KAAKkvF,MAAM8d,MAAM,KAAM,MAEhC,IAAIxsG,EAAIR,KAAKkS,EAAEmnE,OAAOv4E,EAAEoR,GACN,IAAd1R,EAAEq3E,KAAK,KACTr3E,EAAIA,EAAEi5E,OAAOz5E,KAAKiS,EAAEonE,OAAOv4E,EAAEmR,GAAGgoE,YAClC,IAAIs2B,EAAK/vG,EAAEo5E,SAASN,QAAQt5E,KAAKiS,GAAGqnE,QAAQx4E,EAAEmR,GAC1Cu+F,EAAKhwG,EAAEi5E,OAAOz5E,KAAKiS,EAAEonE,OAAOk3B,IAAKj3B,QAAQt5E,KAAKkS,GAClD,OAAOlS,KAAKkvF,MAAM8d,MAAMuD,EAAIC,IAG9Bb,EAAMrhF,UAAU+gF,IAAM,WACpB,GAAIrvG,KAAKsyG,IACP,OAAOtyG,KAGT,IAAIi0G,EAAMj0G,KAAKkS,EAAEinE,OAAOn5E,KAAKkS,GAC7B,GAAoB,IAAhB+hG,EAAIp8B,KAAK,GACX,OAAO73E,KAAKkvF,MAAM8d,MAAM,KAAM,MAEhC,IAAIrsG,EAAIX,KAAKkvF,MAAMvuF,EAEfg3E,EAAK33E,KAAKiS,EAAE2nE,SACZs6B,EAAQD,EAAIh6B,UACZz5E,EAAIm3E,EAAGwB,OAAOxB,GAAIyB,QAAQzB,GAAIyB,QAAQz4E,GAAG84E,OAAOy6B,GAEhD3D,EAAK/vG,EAAEo5E,SAASN,QAAQt5E,KAAKiS,EAAEknE,OAAOn5E,KAAKiS,IAC3Cu+F,EAAKhwG,EAAEi5E,OAAOz5E,KAAKiS,EAAEonE,OAAOk3B,IAAKj3B,QAAQt5E,KAAKkS,GAClD,OAAOlS,KAAKkvF,MAAM8d,MAAMuD,EAAIC,IAG9Bb,EAAMrhF,UAAUkuE,KAAO,WACrB,OAAOx8F,KAAKiS,EAAE+mE,WAGhB22B,EAAMrhF,UAAUygF,KAAO,WACrB,OAAO/uG,KAAKkS,EAAE8mE,WAGhB22B,EAAMrhF,UAAUm5C,IAAM,SAAalX,GAEjC,OADAA,EAAI,IAAIuW,EAAGvW,EAAG,IACVvwD,KAAKmwG,aACAnwG,KACAA,KAAKovG,YAAY7+C,GACjBvwD,KAAKkvF,MAAM+d,aAAajtG,KAAMuwD,GAC9BvwD,KAAKkvF,MAAM+iB,KACXjyG,KAAKkvF,MAAM0kB,gBAAgB,CAAE5zG,MAAQ,CAAEuwD,IAEvCvwD,KAAKkvF,MAAM2e,SAAS7tG,KAAMuwD,IAGrCo/C,EAAMrhF,UAAUwiF,OAAS,SAAgBxI,EAAIkL,EAAIhjD,GAC/C,IAAIm9C,EAAS,CAAE3tG,KAAMwzG,GACjBrF,EAAS,CAAE7F,EAAI93C,GACnB,OAAIxwD,KAAKkvF,MAAM+iB,KACNjyG,KAAKkvF,MAAM0kB,gBAAgBjG,EAAQQ,GAEnCnuG,KAAKkvF,MAAM+e,YAAY,EAAGN,EAAQQ,EAAQ,IAGrDwB,EAAMrhF,UAAUyiF,QAAU,SAAiBzI,EAAIkL,EAAIhjD,GACjD,IAAIm9C,EAAS,CAAE3tG,KAAMwzG,GACjBrF,EAAS,CAAE7F,EAAI93C,GACnB,OAAIxwD,KAAKkvF,MAAM+iB,KACNjyG,KAAKkvF,MAAM0kB,gBAAgBjG,EAAQQ,GAAQ,GAE3CnuG,KAAKkvF,MAAM+e,YAAY,EAAGN,EAAQQ,EAAQ,GAAG,IAGxDwB,EAAMrhF,UAAUoqD,GAAK,SAAY53E,GAC/B,OAAOd,OAASc,GACTd,KAAKsyG,MAAQxxG,EAAEwxG,MACVtyG,KAAKsyG,KAA2B,IAApBtyG,KAAKiS,EAAEy1D,IAAI5mE,EAAEmR,IAAgC,IAApBjS,KAAKkS,EAAEw1D,IAAI5mE,EAAEoR,KAGhEy9F,EAAMrhF,UAAU+8C,IAAM,SAAa8oC,GACjC,GAAIn0G,KAAKsyG,IACP,OAAOtyG,KAET,IAAI2xD,EAAM3xD,KAAKkvF,MAAM8d,MAAMhtG,KAAKiS,EAAGjS,KAAKkS,EAAEgoE,UAC1C,GAAIi6B,GAAen0G,KAAK+sG,YAAa,CACnC,IAAIv8F,EAAMxQ,KAAK+sG,YACXqH,EAAS,SAAStzG,GACpB,OAAOA,EAAEuqE,OAEX1Z,EAAIo7C,YAAc,CAChBK,IAAK58F,EAAI48F,KAAO,CACdnxB,IAAKzrE,EAAI48F,IAAInxB,IACb0xB,OAAQn9F,EAAI48F,IAAIO,OAAOvqG,IAAIgxG,IAE7BlH,QAAS18F,EAAI08F,SAAW,CACtBI,KAAM98F,EAAI08F,QAAQI,KAClBK,OAAQn9F,EAAI08F,QAAQS,OAAOvqG,IAAIgxG,KAIrC,OAAOziD,GAGTg+C,EAAMrhF,UAAUigF,IAAM,WACpB,OAAIvuG,KAAKsyG,IACAtyG,KAAKkvF,MAAMue,OAAO,KAAM,KAAM,MAE7BztG,KAAKkvF,MAAMue,OAAOztG,KAAKiS,EAAGjS,KAAKkS,EAAGlS,KAAKkvF,MAAMtT,MAwBzD3uD,EAASslF,EAAQ71C,EAAKowC,WAEtB+E,EAAWvjF,UAAUm/E,OAAS,SAAgBx7F,EAAGC,EAAG6pE,GAClD,OAAO,IAAIw2B,EAAOvyG,KAAMiS,EAAGC,EAAG6pE,IAGhCw2B,EAAOjkF,UAAUs/E,IAAM,WACrB,GAAI5tG,KAAKmwG,aACP,OAAOnwG,KAAKkvF,MAAM8d,MAAM,KAAM,MAEhC,IAAIqH,EAAOr0G,KAAK+7E,EAAE9B,UACdq6B,EAAQD,EAAKz6B,SACb+5B,EAAK3zG,KAAKiS,EAAEwnE,OAAO66B,GACnBC,EAAKv0G,KAAKkS,EAAEunE,OAAO66B,GAAO76B,OAAO46B,GAErC,OAAOr0G,KAAKkvF,MAAM8d,MAAM2G,EAAIY,IAG9BhC,EAAOjkF,UAAU+8C,IAAM,WACrB,OAAOrrE,KAAKkvF,MAAMue,OAAOztG,KAAKiS,EAAGjS,KAAKkS,EAAEgoE,SAAUl6E,KAAK+7E,IAGzDw2B,EAAOjkF,UAAU5iB,IAAM,SAAa5K,GAElC,GAAId,KAAKmwG,aACP,OAAOrvG,EAGT,GAAIA,EAAEqvG,aACJ,OAAOnwG,KAGT,IAAIw0G,EAAM1zG,EAAEi7E,EAAEnC,SACV66B,EAAKz0G,KAAK+7E,EAAEnC,SACZ86B,EAAK10G,KAAKiS,EAAEwnE,OAAO+6B,GACnBG,EAAK7zG,EAAEmR,EAAEwnE,OAAOg7B,GAChB/0B,EAAK1/E,KAAKkS,EAAEunE,OAAO+6B,EAAI/6B,OAAO34E,EAAEi7E,IAChC4D,EAAK7+E,EAAEoR,EAAEunE,OAAOg7B,EAAGh7B,OAAOz5E,KAAK+7E,IAE/BxgC,EAAIm5D,EAAGr7B,OAAOs7B,GACdz0G,EAAIw/E,EAAGrG,OAAOsG,GAClB,GAAkB,IAAdpkC,EAAEs8B,KAAK,GACT,OAAkB,IAAd33E,EAAE23E,KAAK,GACF73E,KAAKkvF,MAAMue,OAAO,KAAM,KAAM,MAE9BztG,KAAKqvG,MAGhB,IAAIuF,EAAKr5D,EAAEq+B,SACPi7B,EAAKD,EAAGn7B,OAAOl+B,GACfl0C,EAAIqtG,EAAGj7B,OAAOm7B,GAEdrE,EAAKrwG,EAAE05E,SAASR,QAAQy7B,GAAIv7B,QAAQjyE,GAAGiyE,QAAQjyE,GAC/CmpG,EAAKtwG,EAAEu5E,OAAOpyE,EAAEiyE,QAAQi3B,IAAKj3B,QAAQoG,EAAGjG,OAAOo7B,IAC/CnE,EAAK1wG,KAAK+7E,EAAEtC,OAAO34E,EAAEi7E,GAAGtC,OAAOl+B,GAEnC,OAAOv7C,KAAKkvF,MAAMue,OAAO8C,EAAIC,EAAIE,IAGnC6B,EAAOjkF,UAAUo/E,SAAW,SAAkB5sG,GAE5C,GAAId,KAAKmwG,aACP,OAAOrvG,EAAEytG,MAGX,GAAIztG,EAAEqvG,aACJ,OAAOnwG,KAGT,IAAIy0G,EAAKz0G,KAAK+7E,EAAEnC,SACZ86B,EAAK10G,KAAKiS,EACV0iG,EAAK7zG,EAAEmR,EAAEwnE,OAAOg7B,GAChB/0B,EAAK1/E,KAAKkS,EACVytE,EAAK7+E,EAAEoR,EAAEunE,OAAOg7B,GAAIh7B,OAAOz5E,KAAK+7E,GAEhCxgC,EAAIm5D,EAAGr7B,OAAOs7B,GACdz0G,EAAIw/E,EAAGrG,OAAOsG,GAClB,GAAkB,IAAdpkC,EAAEs8B,KAAK,GACT,OAAkB,IAAd33E,EAAE23E,KAAK,GACF73E,KAAKkvF,MAAMue,OAAO,KAAM,KAAM,MAE9BztG,KAAKqvG,MAGhB,IAAIuF,EAAKr5D,EAAEq+B,SACPi7B,EAAKD,EAAGn7B,OAAOl+B,GACfl0C,EAAIqtG,EAAGj7B,OAAOm7B,GAEdrE,EAAKrwG,EAAE05E,SAASR,QAAQy7B,GAAIv7B,QAAQjyE,GAAGiyE,QAAQjyE,GAC/CmpG,EAAKtwG,EAAEu5E,OAAOpyE,EAAEiyE,QAAQi3B,IAAKj3B,QAAQoG,EAAGjG,OAAOo7B,IAC/CnE,EAAK1wG,KAAK+7E,EAAEtC,OAAOl+B,GAEvB,OAAOv7C,KAAKkvF,MAAMue,OAAO8C,EAAIC,EAAIE,IAGnC6B,EAAOjkF,UAAU0/E,KAAO,SAAcvlC,GACpC,GAAY,IAARA,EACF,OAAOzoE,KACT,GAAIA,KAAKmwG,aACP,OAAOnwG,KACT,IAAKyoE,EACH,OAAOzoE,KAAKqvG,MAEd,IAAI9uG,EACJ,GAAIP,KAAKkvF,MAAM6iB,OAAS/xG,KAAKkvF,MAAM8iB,OAAQ,CACzC,IAAI9xG,EAAIF,KACR,IAAKO,EAAI,EAAGA,EAAIkoE,EAAKloE,IACnBL,EAAIA,EAAEmvG,MACR,OAAOnvG,EAKT,IAAIS,EAAIX,KAAKkvF,MAAMvuF,EACfmxG,EAAO9xG,KAAKkvF,MAAM4iB,KAElBgD,EAAK90G,KAAKiS,EACV8iG,EAAK/0G,KAAKkS,EACV8iG,EAAKh1G,KAAK+7E,EACVk5B,EAAMD,EAAGp7B,SAASA,SAGlBs7B,EAAMH,EAAG57B,OAAO47B,GACpB,IAAKx0G,EAAI,EAAGA,EAAIkoE,EAAKloE,IAAK,CACxB,IAAI40G,EAAML,EAAGl7B,SACTw7B,EAAOF,EAAIt7B,SACXy7B,EAAOD,EAAKx7B,SACZp5E,EAAI20G,EAAIh8B,OAAOg8B,GAAK/7B,QAAQ+7B,GAAK/7B,QAAQz4E,EAAE84E,OAAOw7B,IAElD/1B,EAAK41B,EAAGr7B,OAAO27B,GACf7E,EAAK/vG,EAAEo5E,SAASN,QAAQ4F,EAAG/F,OAAO+F,IAClCC,EAAKD,EAAG5F,QAAQi3B,GAChB+E,EAAM90G,EAAEi5E,OAAO0F,GACnBm2B,EAAMA,EAAIl8B,QAAQk8B,GAAKh8B,QAAQ+7B,GAC/B,IAAI3E,EAAKwE,EAAIz7B,OAAOu7B,GAChBz0G,EAAI,EAAIkoE,IACVwsC,EAAMA,EAAIx7B,OAAO47B,IAEnBP,EAAKvE,EACLyE,EAAKtE,EACLwE,EAAMI,EAGR,OAAOt1G,KAAKkvF,MAAMue,OAAOqH,EAAII,EAAIz7B,OAAOq4B,GAAOkD,IAGjDzC,EAAOjkF,UAAU+gF,IAAM,WACrB,OAAIrvG,KAAKmwG,aACAnwG,KAELA,KAAKkvF,MAAM6iB,MACN/xG,KAAKu1G,WACLv1G,KAAKkvF,MAAM8iB,OACXhyG,KAAKw1G,YAELx1G,KAAKy1G,QAGhBlD,EAAOjkF,UAAUinF,SAAW,WAC1B,IAAIhF,EACAC,EACAE,EAEJ,GAAI1wG,KAAK4vG,KAAM,CAMb,IAAIp9F,EAAKxS,KAAKiS,EAAE2nE,SAEZxnE,EAAKpS,KAAKkS,EAAE0nE,SAEZ87B,EAAOtjG,EAAGwnE,SAEVlqE,EAAI1P,KAAKiS,EAAEknE,OAAO/mE,GAAIwnE,SAASN,QAAQ9mE,GAAI8mE,QAAQo8B,GACvDhmG,EAAIA,EAAE0pE,QAAQ1pE,GAEd,IAAIkV,EAAIpS,EAAG2mE,OAAO3mE,GAAI4mE,QAAQ5mE,GAE1BnS,EAAIukB,EAAEg1D,SAASN,QAAQ5pE,GAAG4pE,QAAQ5pE,GAGlCimG,EAAQD,EAAKt8B,QAAQs8B,GAEzBC,GADAA,EAAQA,EAAMv8B,QAAQu8B,IACRv8B,QAAQu8B,GAGtBpF,EAAKlwG,EAELmwG,EAAK5rF,EAAE60D,OAAO/pE,EAAE4pE,QAAQj5E,IAAIi5E,QAAQq8B,GAEpCjF,EAAK1wG,KAAKkS,EAAEinE,OAAOn5E,KAAKkS,OACnB,CAML,IAAIvR,EAAIX,KAAKiS,EAAE2nE,SAEX9jE,EAAI9V,KAAKkS,EAAE0nE,SAEXp5E,EAAIsV,EAAE8jE,SAENnpD,EAAIzwB,KAAKiS,EAAEknE,OAAOrjE,GAAG8jE,SAASN,QAAQ34E,GAAG24E,QAAQ94E,GACrDiwB,EAAIA,EAAE2oD,QAAQ3oD,GAEd,IAAItwB,EAAIQ,EAAEw4E,OAAOx4E,GAAGy4E,QAAQz4E,GAExBnB,EAAIW,EAAEy5E,SAGNg8B,EAAKp1G,EAAE44E,QAAQ54E,GAEnBo1G,GADAA,EAAKA,EAAGx8B,QAAQw8B,IACRx8B,QAAQw8B,GAGhBrF,EAAK/wG,EAAE85E,QAAQ7oD,GAAG6oD,QAAQ7oD,GAE1B+/E,EAAKrwG,EAAEs5E,OAAOhpD,EAAE6oD,QAAQi3B,IAAKj3B,QAAQs8B,GAGrClF,GADAA,EAAK1wG,KAAKkS,EAAEunE,OAAOz5E,KAAK+7E,IAChB3C,QAAQs3B,GAGlB,OAAO1wG,KAAKkvF,MAAMue,OAAO8C,EAAIC,EAAIE,IAGnC6B,EAAOjkF,UAAUknF,UAAY,WAC3B,IAAIjF,EACAC,EACAE,EAEJ,GAAI1wG,KAAK4vG,KAAM,CAMb,IAAIp9F,EAAKxS,KAAKiS,EAAE2nE,SAEZxnE,EAAKpS,KAAKkS,EAAE0nE,SAEZ87B,EAAOtjG,EAAGwnE,SAEVlqE,EAAI1P,KAAKiS,EAAEknE,OAAO/mE,GAAIwnE,SAASN,QAAQ9mE,GAAI8mE,QAAQo8B,GACvDhmG,EAAIA,EAAE0pE,QAAQ1pE,GAEd,IAAIkV,EAAIpS,EAAG2mE,OAAO3mE,GAAI4mE,QAAQ5mE,GAAI4mE,QAAQp5E,KAAKkvF,MAAMvuF,GAEjDN,EAAIukB,EAAEg1D,SAASN,QAAQ5pE,GAAG4pE,QAAQ5pE,GAEtC6gG,EAAKlwG,EAEL,IAAIs1G,EAAQD,EAAKt8B,QAAQs8B,GAEzBC,GADAA,EAAQA,EAAMv8B,QAAQu8B,IACRv8B,QAAQu8B,GACtBnF,EAAK5rF,EAAE60D,OAAO/pE,EAAE4pE,QAAQj5E,IAAIi5E,QAAQq8B,GAEpCjF,EAAK1wG,KAAKkS,EAAEinE,OAAOn5E,KAAKkS,OACnB,CAKL,IAAI0lE,EAAQ53E,KAAK+7E,EAAEnC,SAEfi8B,EAAQ71G,KAAKkS,EAAE0nE,SAEfs1B,EAAOlvG,KAAKiS,EAAEwnE,OAAOo8B,GAErBC,EAAQ91G,KAAKiS,EAAEonE,OAAOzB,GAAO6B,OAAOz5E,KAAKiS,EAAEknE,OAAOvB,IACtDk+B,EAAQA,EAAM38B,OAAO28B,GAAO18B,QAAQ08B,GAEpC,IAAIC,EAAQ7G,EAAK91B,QAAQ81B,GAErB8G,GADJD,EAAQA,EAAM38B,QAAQ28B,IACJ58B,OAAO48B,GACzBxF,EAAKuF,EAAMl8B,SAASN,QAAQ08B,GAE5BtF,EAAK1wG,KAAKkS,EAAEinE,OAAOn5E,KAAK+7E,GAAGnC,SAASN,QAAQu8B,GAAOv8B,QAAQ1B,GAE3D,IAAIq+B,EAAUJ,EAAMj8B,SAGpBq8B,GADAA,GADAA,EAAUA,EAAQ78B,QAAQ68B,IACR78B,QAAQ68B,IACR78B,QAAQ68B,GAC1BzF,EAAKsF,EAAMr8B,OAAOs8B,EAAMz8B,QAAQi3B,IAAKj3B,QAAQ28B,GAG/C,OAAOj2G,KAAKkvF,MAAMue,OAAO8C,EAAIC,EAAIE,IAGnC6B,EAAOjkF,UAAUmnF,KAAO,WACtB,IAAI90G,EAAIX,KAAKkvF,MAAMvuF,EAGfm0G,EAAK90G,KAAKiS,EACV8iG,EAAK/0G,KAAKkS,EACV8iG,EAAKh1G,KAAK+7E,EACVk5B,EAAMD,EAAGp7B,SAASA,SAElBu7B,EAAML,EAAGl7B,SACTs8B,EAAMnB,EAAGn7B,SAETp5E,EAAI20G,EAAIh8B,OAAOg8B,GAAK/7B,QAAQ+7B,GAAK/7B,QAAQz4E,EAAE84E,OAAOw7B,IAElDkB,EAAOrB,EAAG37B,OAAO27B,GAEjB51B,GADJi3B,EAAOA,EAAK/8B,QAAQ+8B,IACN18B,OAAOy8B,GACjB3F,EAAK/vG,EAAEo5E,SAASN,QAAQ4F,EAAG/F,OAAO+F,IAClCC,EAAKD,EAAG5F,QAAQi3B,GAEhB6F,EAAOF,EAAIt8B,SAGfw8B,GADAA,GADAA,EAAOA,EAAKh9B,QAAQg9B,IACRh9B,QAAQg9B,IACRh9B,QAAQg9B,GACpB,IAAI5F,EAAKhwG,EAAEi5E,OAAO0F,GAAI7F,QAAQ88B,GAC1B1F,EAAKqE,EAAG57B,OAAO47B,GAAIt7B,OAAOu7B,GAE9B,OAAOh1G,KAAKkvF,MAAMue,OAAO8C,EAAIC,EAAIE,IAGnC6B,EAAOjkF,UAAU+nF,KAAO,WACtB,IAAKr2G,KAAKkvF,MAAM6iB,MACd,OAAO/xG,KAAKqvG,MAAM3jG,IAAI1L,MAMxB,IAAIwS,EAAKxS,KAAKiS,EAAE2nE,SAEZxnE,EAAKpS,KAAKkS,EAAE0nE,SAEZ08B,EAAKt2G,KAAK+7E,EAAEnC,SAEZ87B,EAAOtjG,EAAGwnE,SAEVh1D,EAAIpS,EAAG2mE,OAAO3mE,GAAI4mE,QAAQ5mE,GAE1BkyF,EAAK9/E,EAAEg1D,SAEPz5E,EAAIH,KAAKiS,EAAEknE,OAAO/mE,GAAIwnE,SAASN,QAAQ9mE,GAAI8mE,QAAQo8B,GAKnDa,GAFJp2G,GADAA,GADAA,EAAIA,EAAEi5E,QAAQj5E,IACRg5E,OAAOh5E,GAAGi5E,QAAQj5E,IAClBm5E,QAAQorB,IAEH9qB,SAEPv5E,EAAIq1G,EAAKt8B,QAAQs8B,GAGrBr1G,GADAA,GADAA,EAAIA,EAAE+4E,QAAQ/4E,IACR+4E,QAAQ/4E,IACR+4E,QAAQ/4E,GAEd,IAAIK,EAAIkkB,EAAEw0D,QAAQj5E,GAAGy5E,SAASN,QAAQorB,GAAIprB,QAAQi9B,GAAIj9B,QAAQj5E,GAE1Dm2G,EAAOpkG,EAAGqnE,OAAO/4E,GAErB81G,GADAA,EAAOA,EAAKp9B,QAAQo9B,IACRp9B,QAAQo9B,GACpB,IAAIjG,EAAKvwG,KAAKiS,EAAEwnE,OAAO88B,GAAIj9B,QAAQk9B,GAEnCjG,GADAA,EAAKA,EAAGn3B,QAAQm3B,IACRn3B,QAAQm3B,GAEhB,IAAIC,EAAKxwG,KAAKkS,EAAEunE,OAAO/4E,EAAE+4E,OAAOp5E,EAAEi5E,QAAQ54E,IAAI44E,QAAQn5E,EAAEs5E,OAAO88B,KAG/D/F,GADAA,GADAA,EAAKA,EAAGp3B,QAAQo3B,IACRp3B,QAAQo3B,IACRp3B,QAAQo3B,GAEhB,IAAIE,EAAK1wG,KAAK+7E,EAAE5C,OAAOh5E,GAAGy5E,SAASN,QAAQg9B,GAAIh9B,QAAQi9B,GAEvD,OAAOv2G,KAAKkvF,MAAMue,OAAO8C,EAAIC,EAAIE,IAGnC6B,EAAOjkF,UAAUm5C,IAAM,SAAalX,EAAGkmD,GAGrC,OAFAlmD,EAAI,IAAIuW,EAAGvW,EAAGkmD,GAEPz2G,KAAKkvF,MAAM2e,SAAS7tG,KAAMuwD,IAGnCgiD,EAAOjkF,UAAUoqD,GAAK,SAAY53E,GAChC,GAAe,WAAXA,EAAE4I,KACJ,OAAO1J,KAAK04E,GAAG53E,EAAEytG,OAEnB,GAAIvuG,OAASc,EACX,OAAO,EAGT,IAAI2zG,EAAKz0G,KAAK+7E,EAAEnC,SACZ46B,EAAM1zG,EAAEi7E,EAAEnC,SACd,GAA2D,IAAvD55E,KAAKiS,EAAEwnE,OAAO+6B,GAAKl7B,QAAQx4E,EAAEmR,EAAEwnE,OAAOg7B,IAAK58B,KAAK,GAClD,OAAO,EAGT,IAAI6+B,EAAKjC,EAAGh7B,OAAOz5E,KAAK+7E,GACpB46B,EAAMnC,EAAI/6B,OAAO34E,EAAEi7E,GACvB,OAA8D,IAAvD/7E,KAAKkS,EAAEunE,OAAOk9B,GAAKr9B,QAAQx4E,EAAEoR,EAAEunE,OAAOi9B,IAAK7+B,KAAK,IAGzD06B,EAAOjkF,UAAU2iF,OAAS,SAAgBh/F,GACxC,IAAI2kG,EAAK52G,KAAK+7E,EAAEnC,SACZtG,EAAKrhE,EAAE2mE,MAAM54E,KAAKkvF,MAAM/nB,KAAKsS,OAAOm9B,GACxC,GAAuB,IAAnB52G,KAAKiS,EAAEy1D,IAAI4L,GACb,OAAO,EAIT,IAFA,IAAI49B,EAAKj/F,EAAEud,QACPnvB,EAAIL,KAAKkvF,MAAM0d,KAAKnzB,OAAOm9B,KACtB,CAEP,GADA1F,EAAG3kC,KAAKvsE,KAAKkvF,MAAM9uF,GACf8wG,EAAGxpC,IAAI1nE,KAAKkvF,MAAMpuF,IAAM,EAC1B,OAAO,EAGT,GADAwyE,EAAG8F,QAAQ/4E,GACY,IAAnBL,KAAKiS,EAAEy1D,IAAI4L,GACb,OAAO,IAIbi/B,EAAOjkF,UAAUs6C,QAAU,WACzB,OAAI5oE,KAAKmwG,aACA,uBACF,iBAAmBnwG,KAAKiS,EAAEzH,SAAS,GAAI,GAC1C,OAASxK,KAAKkS,EAAE1H,SAAS,GAAI,GAC7B,OAASxK,KAAK+7E,EAAEvxE,SAAS,GAAI,GAAK,KAGxC+nG,EAAOjkF,UAAU6hF,WAAa,WAE5B,OAA0B,IAAnBnwG,KAAK+7E,EAAElE,KAAK,kFCx6BrB,aAEA,IAsKIrnE,EAtKA69E,EAAS5uF,EAETupB,EAAOvoB,EAAQ,WACfyuF,EAAQzuF,EAAQ,WAGhBgZ,EAFQhZ,EAAQ,WAEDgZ,OAEnB,SAASo9F,EAAYp0G,GACE,UAAjBA,EAAQiH,KACV1J,KAAKkvF,MAAQ,IAAIA,EAAMiiB,MAAM1uG,GACL,YAAjBA,EAAQiH,KACf1J,KAAKkvF,MAAQ,IAAIA,EAAMkiB,QAAQ3uG,GAE/BzC,KAAKkvF,MAAQ,IAAIA,EAAM9S,KAAK35E,GAC9BzC,KAAKi3E,EAAIj3E,KAAKkvF,MAAMjY,EACpBj3E,KAAKI,EAAIJ,KAAKkvF,MAAM9uF,EACpBJ,KAAKgpB,KAAOvmB,EAAQumB,KAEpBvP,EAAOzZ,KAAKi3E,EAAEj+D,WAAY,iBAC1BS,EAAOzZ,KAAKi3E,EAAExP,IAAIznE,KAAKI,GAAG+vG,aAAc,2BAI1C,SAAS2G,EAAYhsG,EAAMrI,GACzB6S,OAAO6a,eAAek+D,EAAQvjF,EAAM,CAClCylB,cAAc,EACdF,YAAY,EACZo0B,IAAK,WACH,IAAIyqC,EAAQ,IAAI2nB,EAAYp0G,GAM5B,OALA6S,OAAO6a,eAAek+D,EAAQvjF,EAAM,CAClCylB,cAAc,EACdF,YAAY,EACZnrB,MAAOgqF,IAEFA,KAbbb,EAAOwoB,YAAcA,EAkBrBC,EAAY,OAAQ,CAClBptG,KAAM,QACNqxE,MAAO,OACPj6E,EAAG,wDACHH,EAAG,wDACHmV,EAAG,wDACH1V,EAAG,wDACH4oB,KAAMA,EAAK4iE,OACXygB,MAAM,EACNp1B,EAAG,CACD,wDACA,2DAIJ6/B,EAAY,OAAQ,CAClBptG,KAAM,QACNqxE,MAAO,OACPj6E,EAAG,iEACHH,EAAG,iEACHmV,EAAG,iEACH1V,EAAG,iEACH4oB,KAAMA,EAAK4iE,OACXygB,MAAM,EACNp1B,EAAG,CACD,iEACA,oEAIJ6/B,EAAY,OAAQ,CAClBptG,KAAM,QACNqxE,MAAO,KACPj6E,EAAG,0EACHH,EAAG,0EACHmV,EAAG,0EACH1V,EAAG,0EACH4oB,KAAMA,EAAK4iE,OACXygB,MAAM,EACNp1B,EAAG,CACD,0EACA,6EAIJ6/B,EAAY,OAAQ,CAClBptG,KAAM,QACNqxE,MAAO,KACPj6E,EAAG,8GAEHH,EAAG,8GAEHmV,EAAG,8GAEH1V,EAAG,8GAEH4oB,KAAMA,EAAK8iE,OACXugB,MAAM,EACNp1B,EAAG,CACD,8GAEA,iHAKJ6/B,EAAY,OAAQ,CAClBptG,KAAM,QACNqxE,MAAO,KACPj6E,EAAG,2JAGHH,EAAG,2JAGHmV,EAAG,2JAGH1V,EAAG,2JAGH4oB,KAAMA,EAAK+iE,OACXsgB,MAAM,EACNp1B,EAAG,CACD,2JAGA,8JAMJ6/B,EAAY,aAAc,CACxBptG,KAAM,OACNqxE,MAAO,SACPj6E,EAAG,sEACHH,EAAG,QACHmV,EAAG,IACH1V,EAAG,sEACH4oB,KAAMA,EAAK4iE,OACXygB,MAAM,EACNp1B,EAAG,CACD,OAIJ6/B,EAAY,UAAW,CACrBptG,KAAM,UACNqxE,MAAO,SACPj6E,EAAG,sEACHH,EAAG,KACHH,EAAG,IAEHiwB,EAAG,sEACHrwB,EAAG,sEACH4oB,KAAMA,EAAK4iE,OACXygB,MAAM,EACNp1B,EAAG,CACD,mEAGA,sEAKJ,IACEzmE,EAAM/P,EAAQ,2BACd,MAAON,GACPqQ,OAAMrM,EAGR2yG,EAAY,YAAa,CACvBptG,KAAM,QACNqxE,MAAO,OACPj6E,EAAG,0EACHH,EAAG,IACHmV,EAAG,IACH1V,EAAG,0EACHm7C,EAAG,IACHvyB,KAAMA,EAAK4iE,OAGXsjB,KAAM,mEACNsD,OAAQ,mEACRI,MAAO,CACL,CACEjyG,EAAG,mCACHmV,EAAG,qCAEL,CACEnV,EAAG,oCACHmV,EAAG,qCAIPu2F,MAAM,EACNp1B,EAAG,CACD,mEACA,mEACAzmE,sGC3MJ,aAEA,IAAIs2D,EAAKrmE,EAAQ,SACbs2G,EAAWt2G,EAAQ,aACnBgrB,EAAQhrB,EAAQ,YAChB4tF,EAAS5tF,EAAQ,aACjBw9E,EAAOx9E,EAAQ,WACfgZ,EAASgS,EAAMhS,OAEfu9F,EAAUv2G,EAAQ,SAClBw2G,EAAYx2G,EAAQ,eAExB,SAASytF,EAAGzrF,GACV,KAAMzC,gBAAgBkuF,GACpB,OAAO,IAAIA,EAAGzrF,GAGO,iBAAZA,IACTgX,EAAOnE,OAAOgZ,UAAUve,eAAehP,KAAKstF,EAAQ5rF,GAClD,iBAAmBA,GAErBA,EAAU4rF,EAAO5rF,IAIfA,aAAmB4rF,EAAOwoB,cAC5Bp0G,EAAU,CAAEysF,MAAOzsF,IAErBzC,KAAKkvF,MAAQzsF,EAAQysF,MAAMA,MAC3BlvF,KAAKI,EAAIJ,KAAKkvF,MAAM9uF,EACpBJ,KAAKk3G,GAAKl3G,KAAKI,EAAEk1E,MAAM,GACvBt1E,KAAKi3E,EAAIj3E,KAAKkvF,MAAMjY,EAGpBj3E,KAAKi3E,EAAIx0E,EAAQysF,MAAMjY,EACvBj3E,KAAKi3E,EAAE+3B,WAAWvsG,EAAQysF,MAAM9uF,EAAEqqE,YAAc,GAGhDzqE,KAAKgpB,KAAOvmB,EAAQumB,MAAQvmB,EAAQysF,MAAMlmE,KAE5CtpB,EAAOD,QAAUyuF,EAEjBA,EAAG5/D,UAAU6oF,QAAU,SAAiB10G,GACtC,OAAO,IAAIu0G,EAAQh3G,KAAMyC,IAG3ByrF,EAAG5/D,UAAU8gE,eAAiB,SAAwBpF,EAAMv4B,GAC1D,OAAOulD,EAAQI,YAAYp3G,KAAMgqF,EAAMv4B,IAGzCy8B,EAAG5/D,UAAU+tE,cAAgB,SAAuBxM,EAAKp+B,GACvD,OAAOulD,EAAQK,WAAWr3G,KAAM6vF,EAAKp+B,IAGvCy8B,EAAG5/D,UAAU2tE,WAAa,SAAoBx5F,GACvCA,IACHA,EAAU,IAcZ,IAXA,IAAI60G,EAAO,IAAIP,EAAS,CACtB/tF,KAAMhpB,KAAKgpB,KACXuuF,KAAM90G,EAAQ80G,KACdC,QAAS/0G,EAAQ+0G,SAAW,OAC5BC,QAASh1G,EAAQg1G,SAAWx5B,EAAKj+E,KAAKgpB,KAAK0uF,cAC3CC,WAAYl1G,EAAQg1G,SAAWh1G,EAAQk1G,YAAc,OACrDC,MAAO53G,KAAKI,EAAEmmE,YAGZxI,EAAQ/9D,KAAKI,EAAEk9D,aACfu6C,EAAM73G,KAAKI,EAAEqsE,IAAI,IAAI3F,EAAG,MACnB,CACP,IAAIkjB,EAAO,IAAIljB,EAAGwwC,EAAKp5B,SAASngB,IAChC,KAAIisB,EAAKtiB,IAAImwC,GAAO,GAIpB,OADA7tB,EAAKjf,MAAM,GACJ/qE,KAAKovF,eAAepF,KAI/BkE,EAAG5/D,UAAUwpF,aAAe,SAAsBz1C,EAAK01C,GACrD,IAAIngC,EAA2B,EAAnBvV,EAAI/E,aAAmBt9D,KAAKI,EAAEqqE,YAG1C,OAFImN,EAAQ,IACVvV,EAAMA,EAAIiT,MAAMsC,KACbmgC,GAAa11C,EAAIqF,IAAI1nE,KAAKI,IAAM,EAC5BiiE,EAAIoK,IAAIzsE,KAAKI,GAEbiiE,GAGX6rB,EAAG5/D,UAAUk4C,KAAO,SAAcnE,EAAK9zD,EAAKkjD,EAAKhvD,GAC5B,iBAARgvD,IACThvD,EAAUgvD,EACVA,EAAM,MAEHhvD,IACHA,EAAU,IAEZ8L,EAAMvO,KAAKovF,eAAe7gF,EAAKkjD,GAC/B4Q,EAAMriE,KAAK83G,aAAa,IAAIhxC,EAAGzE,EAAK,KAqBpC,IAlBA,IAAItE,EAAQ/9D,KAAKI,EAAEk9D,aACf06C,EAAOzpG,EAAIguF,aAAah2B,QAAQ,KAAMxI,GAGtC65C,EAAQv1C,EAAIkE,QAAQ,KAAMxI,GAG1Bu5C,EAAO,IAAIP,EAAS,CACtB/tF,KAAMhpB,KAAKgpB,KACXyuF,QAASO,EACTJ,MAAOA,EACPL,KAAM90G,EAAQ80G,KACdC,QAAS/0G,EAAQ+0G,SAAW,SAI1BS,EAAMj4G,KAAKI,EAAEqsE,IAAI,IAAI3F,EAAG,IAEnBoxC,EAAO,GAAKA,IAAQ,CAC3B,IAAI3nD,EAAI9tD,EAAQ8tD,EACd9tD,EAAQ8tD,EAAE2nD,GACV,IAAIpxC,EAAGwwC,EAAKp5B,SAASl+E,KAAKI,EAAEk9D,eAE9B,MADA/M,EAAIvwD,KAAK83G,aAAavnD,GAAG,IACnBsnB,KAAK,IAAM,GAAKtnB,EAAEmX,IAAIuwC,IAAQ,GAApC,CAGA,IAAIE,EAAKn4G,KAAKi3E,EAAExP,IAAIlX,GACpB,IAAI4nD,EAAGhI,aAAP,CAGA,IAAIiI,EAAMD,EAAG3b,OACTt8F,EAAIk4G,EAAI7hC,KAAKv2E,KAAKI,GACtB,GAAkB,IAAdF,EAAE23E,KAAK,GAAX,CAGA,IAAInoE,EAAI6gD,EAAEunB,KAAK93E,KAAKI,GAAGqnE,IAAIvnE,EAAEunE,IAAIl5D,EAAIguF,cAAchwB,KAAKlK,IAExD,GAAkB,KADlB3yD,EAAIA,EAAE6mE,KAAKv2E,KAAKI,IACVy3E,KAAK,GAAX,CAGA,IAAIwgC,GAAiBF,EAAGpJ,OAAOz3B,QAAU,EAAI,IACT,IAAf8gC,EAAI1wC,IAAIxnE,GAAW,EAAI,GAQ5C,OALIuC,EAAQ61G,WAAa5oG,EAAEg4D,IAAI1nE,KAAKk3G,IAAM,IACxCxnG,EAAI1P,KAAKI,EAAEqsE,IAAI/8D,GACf2oG,GAAiB,GAGZ,IAAIpB,EAAU,CAAE/2G,EAAGA,EAAGwP,EAAGA,EAAG2oG,cAAeA,UAItDnqB,EAAG5/D,UAAUg/D,OAAS,SAAgBjrB,EAAK8tB,EAAW5hF,EAAKkjD,GACzD4Q,EAAMriE,KAAK83G,aAAa,IAAIhxC,EAAGzE,EAAK,KACpC9zD,EAAMvO,KAAKq8F,cAAc9tF,EAAKkjD,GAI9B,IAAIvxD,GAHJiwF,EAAY,IAAI8mB,EAAU9mB,EAAW,QAGnBjwF,EACdwP,EAAIygF,EAAUzgF,EAClB,GAAIxP,EAAE23E,KAAK,GAAK,GAAK33E,EAAEwnE,IAAI1nE,KAAKI,IAAM,EACpC,OAAO,EACT,GAAIsP,EAAEmoE,KAAK,GAAK,GAAKnoE,EAAEg4D,IAAI1nE,KAAKI,IAAM,EACpC,OAAO,EAGT,IAGIU,EAHAy3G,EAAO7oG,EAAEooE,KAAK93E,KAAKI,GACnBs0G,EAAK6D,EAAK9wC,IAAIpF,GAAKkU,KAAKv2E,KAAKI,GAC7Bu0G,EAAK4D,EAAK9wC,IAAIvnE,GAAGq2E,KAAKv2E,KAAKI,GAG/B,OAAKJ,KAAKkvF,MAAM2d,gBAWhB/rG,EAAId,KAAKi3E,EAAE85B,QAAQ2D,EAAInmG,EAAI+tF,YAAaqY,IAClCxE,cAMCrvG,EAAEmwG,OAAO/wG,KAjBdY,EAAId,KAAKi3E,EAAE65B,OAAO4D,EAAInmG,EAAI+tF,YAAaqY,IACjCxE,cAGkC,IAAjCrvG,EAAE07F,OAAOjmB,KAAKv2E,KAAKI,GAAGsnE,IAAIxnE,IAgBrCguF,EAAG5/D,UAAUkqF,cAAgB,SAASn2C,EAAK8tB,EAAWn2E,EAAGy3C,GACvDh4C,GAAQ,EAAIO,KAAOA,EAAG,4CACtBm2E,EAAY,IAAI8mB,EAAU9mB,EAAW1+B,GAErC,IAAIrxD,EAAIJ,KAAKI,EACTD,EAAI,IAAI2mE,EAAGzE,GACXniE,EAAIiwF,EAAUjwF,EACdwP,EAAIygF,EAAUzgF,EAGd+oG,EAAa,EAAJz+F,EACT0+F,EAAc1+F,GAAK,EACvB,GAAI9Z,EAAEwnE,IAAI1nE,KAAKkvF,MAAMpuF,EAAEy1E,KAAKv2E,KAAKkvF,MAAM9uF,KAAO,GAAKs4G,EACjD,MAAM,IAAI93G,MAAM,wCAIhBV,EADEw4G,EACE14G,KAAKkvF,MAAM0f,WAAW1uG,EAAEwL,IAAI1L,KAAKkvF,MAAM9uF,GAAIq4G,GAE3Cz4G,KAAKkvF,MAAM0f,WAAW1uG,EAAGu4G,GAE/B,IAAIE,EAAOxoB,EAAUjwF,EAAE43E,KAAK13E,GACxBs/E,EAAKt/E,EAAEqsE,IAAItsE,GAAGsnE,IAAIkxC,GAAMpiC,KAAKn2E,GAC7Bu/E,EAAKjwE,EAAE+3D,IAAIkxC,GAAMpiC,KAAKn2E,GAI1B,OAAOJ,KAAKi3E,EAAE65B,OAAOpxB,EAAIx/E,EAAGy/E,IAG9BuO,EAAG5/D,UAAUsqF,oBAAsB,SAASz4G,EAAGgwF,EAAWuQ,EAAGjvC,GAE3D,GAAgC,QADhC0+B,EAAY,IAAI8mB,EAAU9mB,EAAW1+B,IACvB4mD,cACZ,OAAOloB,EAAUkoB,cAEnB,IAAK,IAAI93G,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIs4G,EACJ,IACEA,EAAS74G,KAAKw4G,cAAcr4G,EAAGgwF,EAAW5vF,GAC1C,MAAOJ,GACP,SAGF,GAAI04G,EAAOngC,GAAGgoB,GACZ,OAAOngG,EAEX,MAAM,IAAIK,MAAM,uKCjPlB,aAEA,IAAIkmE,EAAKrmE,EAAQ,SAEbgZ,EADQhZ,EAAQ,YACDgZ,OAEnB,SAASu9F,EAAQ7oB,EAAI1rF,GACnBzC,KAAKmuF,GAAKA,EACVnuF,KAAKgqF,KAAO,KACZhqF,KAAK6vF,IAAM,KAGPptF,EAAQunF,MACVhqF,KAAK88F,eAAer6F,EAAQunF,KAAMvnF,EAAQq2G,SACxCr2G,EAAQotF,KACV7vF,KAAK28F,cAAcl6F,EAAQotF,IAAKptF,EAAQs2G,QAE5Cr5G,EAAOD,QAAUu3G,EAEjBA,EAAQK,WAAa,SAAoBlpB,EAAI0B,EAAKp+B,GAChD,OAAIo+B,aAAemnB,EACVnnB,EAEF,IAAImnB,EAAQ7oB,EAAI,CACrB0B,IAAKA,EACLkpB,OAAQtnD,KAIZulD,EAAQI,YAAc,SAAqBjpB,EAAInE,EAAMv4B,GACnD,OAAIu4B,aAAgBgtB,EACXhtB,EAEF,IAAIgtB,EAAQ7oB,EAAI,CACrBnE,KAAMA,EACN8uB,QAASrnD,KAIbulD,EAAQ1oF,UAAUtV,SAAW,WAC3B,IAAI62E,EAAM7vF,KAAKs8F,YAEf,OAAIzM,EAAIsgB,aACC,CAAE7qG,QAAQ,EAAOgvD,OAAQ,sBAC7Bu7B,EAAI72E,WAEJ62E,EAAIpoB,IAAIznE,KAAKmuF,GAAGe,MAAM9uF,GAAG+vG,aAGvB,CAAE7qG,QAAQ,EAAMgvD,OAAQ,MAFtB,CAAEhvD,QAAQ,EAAOgvD,OAAQ,uBAFzB,CAAEhvD,QAAQ,EAAOgvD,OAAQ,8BAOpC0iD,EAAQ1oF,UAAUguE,UAAY,SAAmBwS,EAASr9C,GAUxD,MARuB,iBAAZq9C,IACTr9C,EAAMq9C,EACNA,EAAU,MAGP9uG,KAAK6vF,MACR7vF,KAAK6vF,IAAM7vF,KAAKmuF,GAAGlX,EAAExP,IAAIznE,KAAKgqF,OAE3Bv4B,EAGEzxD,KAAK6vF,IAAIj2E,OAAO63C,EAAKq9C,GAFnB9uG,KAAK6vF,KAKhBmnB,EAAQ1oF,UAAUiuE,WAAa,SAAoB9qC,GACjD,MAAY,QAARA,EACKzxD,KAAKgqF,KAAKx/E,SAAS,GAAI,GAEvBxK,KAAKgqF,MAGhBgtB,EAAQ1oF,UAAUwuE,eAAiB,SAAwBvuF,EAAKkjD,GAC9DzxD,KAAKgqF,KAAO,IAAIljB,EAAGv4D,EAAKkjD,GAAO,IAI/BzxD,KAAKgqF,KAAOhqF,KAAKgqF,KAAKzT,KAAKv2E,KAAKmuF,GAAGe,MAAM9uF,IAG3C42G,EAAQ1oF,UAAUquE,cAAgB,SAAuBpuF,EAAKkjD,GAC5D,GAAIljD,EAAI0D,GAAK1D,EAAI2D,EAWf,MAP2B,SAAvBlS,KAAKmuF,GAAGe,MAAMxlF,KAChB+P,EAAOlL,EAAI0D,EAAG,qBACkB,UAAvBjS,KAAKmuF,GAAGe,MAAMxlF,MACS,YAAvB1J,KAAKmuF,GAAGe,MAAMxlF,MACvB+P,EAAOlL,EAAI0D,GAAK1D,EAAI2D,EAAG,qCAEzBlS,KAAK6vF,IAAM7vF,KAAKmuF,GAAGe,MAAM8d,MAAMz+F,EAAI0D,EAAG1D,EAAI2D,IAG5ClS,KAAK6vF,IAAM7vF,KAAKmuF,GAAGe,MAAMyf,YAAYpgG,EAAKkjD,IAI5CulD,EAAQ1oF,UAAU0qF,OAAS,SAAgBnpB,GAIzC,OAHIA,EAAI72E,YACNS,EAAOo2E,EAAI72E,WAAY,8BAElB62E,EAAIpoB,IAAIznE,KAAKgqF,MAAMwS,QAI5Bwa,EAAQ1oF,UAAUk4C,KAAO,SAAcnE,EAAK5Q,EAAKhvD,GAC/C,OAAOzC,KAAKmuF,GAAG3nB,KAAKnE,EAAKriE,KAAMyxD,EAAKhvD,IAGtCu0G,EAAQ1oF,UAAUg/D,OAAS,SAAgBjrB,EAAK8tB,GAC9C,OAAOnwF,KAAKmuF,GAAGb,OAAOjrB,EAAK8tB,EAAWnwF,OAGxCg3G,EAAQ1oF,UAAUs6C,QAAU,WAC1B,MAAO,eAAiB5oE,KAAKgqF,MAAQhqF,KAAKgqF,KAAKx/E,SAAS,GAAI,IACrD,UAAYxK,KAAK6vF,KAAO7vF,KAAK6vF,IAAIjnB,WAAa,0DCvHvD,aAEA,IAAI9B,EAAKrmE,EAAQ,SAEbgrB,EAAQhrB,EAAQ,YAChBgZ,EAASgS,EAAMhS,OAEnB,SAASw9F,EAAUx0G,EAASgvD,GAC1B,GAAIhvD,aAAmBw0G,EACrB,OAAOx0G,EAELzC,KAAKi5G,WAAWx2G,EAASgvD,KAG7Bh4C,EAAOhX,EAAQvC,GAAKuC,EAAQiN,EAAG,4BAC/B1P,KAAKE,EAAI,IAAI4mE,EAAGrkE,EAAQvC,EAAG,IAC3BF,KAAK0P,EAAI,IAAIo3D,EAAGrkE,EAAQiN,EAAG,SACGvL,IAA1B1B,EAAQ41G,cACVr4G,KAAKq4G,cAAgB,KAErBr4G,KAAKq4G,cAAgB51G,EAAQ41G,eAIjC,SAASa,IACPl5G,KAAKm5G,MAAQ,EAGf,SAASC,EAAU7sF,EAAKzrB,GACtB,IAAIu4G,EAAU9sF,EAAIzrB,EAAEq4G,SACpB,KAAgB,IAAVE,GACJ,OAAOA,EAET,IAAIC,EAAqB,GAAVD,EAGf,GAAiB,IAAbC,GAAkBA,EAAW,EAC/B,OAAO,EAIT,IADA,IAAIhqF,EAAM,EACD/uB,EAAI,EAAG0nE,EAAMnnE,EAAEq4G,MAAO54G,EAAI+4G,EAAU/4G,IAAK0nE,IAChD34C,IAAQ,EACRA,GAAO/C,EAAI07C,GACX34C,KAAS,EAIX,QAAIA,GAAO,OAIXxuB,EAAEq4G,MAAQlxC,EACH34C,GAGT,SAASiqF,EAAUhtF,GAGjB,IAFA,IAAIhsB,EAAI,EACJo/B,EAAMpT,EAAIvrB,OAAS,GACfurB,EAAIhsB,MAAqB,IAAbgsB,EAAIhsB,EAAI,KAAcA,EAAIo/B,GAC5Cp/B,IAEF,OAAU,IAANA,EACKgsB,EAEFA,EAAItP,MAAM1c,GA4DnB,SAASi5G,EAAgB78B,EAAKh9C,GAC5B,GAAIA,EAAM,IACRg9C,EAAItsE,KAAKsvB,OADX,CAIA,IAAI85E,EAAS,GAAKvyG,KAAKwyG,IAAI/5E,GAAOz4B,KAAKyyG,MAAQ,GAE/C,IADAh9B,EAAItsE,KAAc,IAATopG,KACAA,GACP98B,EAAItsE,KAAMsvB,KAAS85E,GAAU,GAAM,KAErC98B,EAAItsE,KAAKsvB,IAjHXjgC,EAAOD,QAAUw3G,EA8CjBA,EAAU3oF,UAAU2qF,WAAa,SAAoBz0G,EAAMitD,GACzDjtD,EAAOinB,EAAM86C,QAAQ/hE,EAAMitD,GAC3B,IAAI3wD,EAAI,IAAIo4G,EACZ,GAAwB,KAApB10G,EAAK1D,EAAEq4G,SACT,OAAO,EAET,IAAIx5E,EAAMy5E,EAAU50G,EAAM1D,GAC1B,IAAY,IAAR6+B,EACF,OAAO,EAET,GAAKA,EAAM7+B,EAAEq4G,QAAW30G,EAAKxD,OAC3B,OAAO,EAET,GAAwB,IAApBwD,EAAK1D,EAAEq4G,SACT,OAAO,EAET,IAAI79B,EAAO89B,EAAU50G,EAAM1D,GAC3B,IAAa,IAATw6E,EACF,OAAO,EAET,IAAIp7E,EAAIsE,EAAKyY,MAAMnc,EAAEq4G,MAAO79B,EAAOx6E,EAAEq4G,OAErC,GADAr4G,EAAEq4G,OAAS79B,EACa,IAApB92E,EAAK1D,EAAEq4G,SACT,OAAO,EAET,IAAIS,EAAOR,EAAU50G,EAAM1D,GAC3B,IAAa,IAAT84G,EACF,OAAO,EAET,GAAIp1G,EAAKxD,SAAW44G,EAAO94G,EAAEq4G,MAC3B,OAAO,EAET,IAAIzpG,EAAIlL,EAAKyY,MAAMnc,EAAEq4G,MAAOS,EAAO94G,EAAEq4G,OACrC,GAAa,IAATj5G,EAAE,GAAU,CACd,KAAW,IAAPA,EAAE,IAIJ,OAAO,EAHPA,EAAIA,EAAE+c,MAAM,GAMhB,GAAa,IAATvN,EAAE,GAAU,CACd,KAAW,IAAPA,EAAE,IAIJ,OAAO,EAHPA,EAAIA,EAAEuN,MAAM,GAWhB,OAJAjd,KAAKE,EAAI,IAAI4mE,EAAG5mE,GAChBF,KAAK0P,EAAI,IAAIo3D,EAAGp3D,GAChB1P,KAAKq4G,cAAgB,MAEd,GAgBTpB,EAAU3oF,UAAUghE,MAAQ,SAAe79B,GACzC,IAAIvxD,EAAIF,KAAKE,EAAEqmE,UACX72D,EAAI1P,KAAK0P,EAAE62D,UAYf,IATW,IAAPrmE,EAAE,KACJA,EAAI,CAAE,GAAIkpB,OAAOlpB,IAER,IAAPwP,EAAE,KACJA,EAAI,CAAE,GAAI0Z,OAAO1Z,IAEnBxP,EAAIq5G,EAAUr5G,GACdwP,EAAI6pG,EAAU7pG,KAENA,EAAE,IAAe,IAAPA,EAAE,KAClBA,EAAIA,EAAEuN,MAAM,GAEd,IAAI0/D,EAAM,CAAE,GACZ68B,EAAgB78B,EAAKz8E,EAAEc,SACvB27E,EAAMA,EAAIvzD,OAAOlpB,IACbmQ,KAAK,GACTmpG,EAAgB78B,EAAKjtE,EAAE1O,QACvB,IAAI64G,EAAWl9B,EAAIvzD,OAAO1Z,GACtBiiD,EAAM,CAAE,IAGZ,OAFA6nD,EAAgB7nD,EAAKkoD,EAAS74G,QAC9B2wD,EAAMA,EAAIvoC,OAAOywF,GACVpuF,EAAM7R,OAAO+3C,EAAKF,wDCpK3B,aAEA,IAAIzoC,EAAOvoB,EAAQ,WACf4tF,EAAS5tF,EAAQ,aACjBgrB,EAAQhrB,EAAQ,YAChBgZ,EAASgS,EAAMhS,OACfqgG,EAAaruF,EAAMquF,WACnB9C,EAAUv2G,EAAQ,SAClBw2G,EAAYx2G,EAAQ,eAExB,SAASs5G,EAAM7qB,GAGb,GAFAz1E,EAAiB,YAAVy1E,EAAqB,qCAEtBlvF,gBAAgB+5G,GACpB,OAAO,IAAIA,EAAM7qB,GAEnBA,EAAQb,EAAOa,GAAOA,MACtBlvF,KAAKkvF,MAAQA,EACblvF,KAAKi3E,EAAIiY,EAAMjY,EACfj3E,KAAKi3E,EAAE+3B,WAAW9f,EAAM9uF,EAAEqqE,YAAc,GAExCzqE,KAAKg6G,WAAa9qB,EAAM8d,QAAQ3pF,YAChCrjB,KAAKi6G,eAAiB/yG,KAAK6gE,KAAKmnB,EAAM9uF,EAAEqqE,YAAc,GACtDzqE,KAAKgpB,KAAOA,EAAK+iE,OAGnBrsF,EAAOD,QAAUs6G,EAOjBA,EAAMzrF,UAAUk4C,KAAO,SAAc9sD,EAASkxF,GAC5ClxF,EAAUogG,EAAWpgG,GACrB,IAAInL,EAAMvO,KAAKk6G,cAActP,GACzB1qG,EAAIF,KAAKm6G,QAAQ5rG,EAAI6rG,gBAAiB1gG,GACtC2gG,EAAIr6G,KAAKi3E,EAAExP,IAAIvnE,GACfo6G,EAAWt6G,KAAKu6G,YAAYF,GAC5BG,EAAKx6G,KAAKm6G,QAAQG,EAAU/rG,EAAIksG,WAAY/gG,GAC7C+tD,IAAIl5D,EAAIy7E,QACP2W,EAAIzgG,EAAEwL,IAAI8uG,GAAIjkC,KAAKv2E,KAAKkvF,MAAM9uF,GAClC,OAAOJ,KAAK06G,cAAc,CAAEL,EAAGA,EAAG1Z,EAAGA,EAAG2Z,SAAUA,KASpDP,EAAMzrF,UAAUg/D,OAAS,SAAgB5zE,EAASs0E,EAAK6B,GACrDn2E,EAAUogG,EAAWpgG,GACrBs0E,EAAMhuF,KAAK06G,cAAc1sB,GACzB,IAAIz/E,EAAMvO,KAAKq8F,cAAcxM,GACzBt0C,EAAIv7C,KAAKm6G,QAAQnsB,EAAIssB,WAAY/rG,EAAIksG,WAAY/gG,GACjDihG,EAAK36G,KAAKi3E,EAAExP,IAAIumB,EAAI2S,KAExB,OADc3S,EAAIqsB,IAAI3uG,IAAI6C,EAAIshF,MAAMpoB,IAAIlsB,IACzBm9B,GAAGiiC,IAGpBZ,EAAMzrF,UAAU6rF,QAAU,WAExB,IADA,IAAInxF,EAAOhpB,KAAKgpB,OACPzoB,EAAI,EAAGA,EAAIkG,UAAUzF,OAAQT,IACpCyoB,EAAKG,OAAO1iB,UAAUlG,IACxB,OAAOkrB,EAAMmvF,UAAU5xF,EAAKK,UAAUktD,KAAKv2E,KAAKkvF,MAAM9uF,IAGxD25G,EAAMzrF,UAAU+tE,cAAgB,SAAuBxM,GACrD,OAAOmnB,EAAQK,WAAWr3G,KAAM6vF,IAGlCkqB,EAAMzrF,UAAU4rF,cAAgB,SAAuBtP,GACrD,OAAOoM,EAAQ6D,WAAW76G,KAAM4qG,IAGlCmP,EAAMzrF,UAAUosF,cAAgB,SAAuB1sB,GACrD,OAAIA,aAAeipB,EACVjpB,EACF,IAAIipB,EAAUj3G,KAAMguF,IAW7B+rB,EAAMzrF,UAAUisF,YAAc,SAAqBvN,GACjD,IAAIv7C,EAAMu7C,EAAM+B,OAAOxoC,QAAQ,KAAMvmE,KAAKi6G,gBAE1C,OADAxoD,EAAIzxD,KAAKi6G,eAAiB,IAAMjN,EAAMxQ,OAAOllB,QAAU,IAAO,EACvD7lB,GAGTsoD,EAAMzrF,UAAUqgF,YAAc,SAAqB5wC,GAGjD,IAAI+8C,GAFJ/8C,EAAQtyC,EAAMquF,WAAW/7C,IAEN/8D,OAAS,EACxB+5G,EAASh9C,EAAM9gD,MAAM,EAAG69F,GAAQ1xF,QAAuB,IAAhB20C,EAAM+8C,IAC7CE,EAAoC,IAAV,IAAhBj9C,EAAM+8C,IAEhB5oG,EAAIuZ,EAAMmvF,UAAUG,GACxB,OAAO/6G,KAAKkvF,MAAMghB,WAAWh+F,EAAG8oG,IAGlCjB,EAAMzrF,UAAU2sF,UAAY,SAAmBz7C,GAC7C,OAAOA,EAAI+G,QAAQ,KAAMvmE,KAAKi6G,iBAGhCF,EAAMzrF,UAAU4sF,UAAY,SAAmBn9C,GAC7C,OAAOtyC,EAAMmvF,UAAU78C,IAGzBg8C,EAAMzrF,UAAU6sF,QAAU,SAAiB7rF,GACzC,OAAOA,aAAetvB,KAAKg6G,gHCpH7B,aAEA,IAAIvuF,EAAQhrB,EAAQ,YAChBgZ,EAASgS,EAAMhS,OACfqgG,EAAaruF,EAAMquF,WACnBsB,EAAiB3vF,EAAM2vF,eAW3B,SAASpE,EAAQjL,EAAOvc,GACtBxvF,KAAK+rG,MAAQA,EACb/rG,KAAKq7G,QAAUvB,EAAWtqB,EAAOob,QAC7BmB,EAAMoP,QAAQ3rB,EAAOK,KACvB7vF,KAAK+pG,KAAOva,EAAOK,IAEnB7vF,KAAKs7G,UAAYxB,EAAWtqB,EAAOK,KAGvCmnB,EAAQK,WAAa,SAAoBtL,EAAOlc,GAC9C,OAAIA,aAAemnB,EACVnnB,EACF,IAAImnB,EAAQjL,EAAO,CAAElc,IAAKA,KAGnCmnB,EAAQ6D,WAAa,SAAoB9O,EAAOnB,GAC9C,OAAIA,aAAkBoM,EACbpM,EACF,IAAIoM,EAAQjL,EAAO,CAAEnB,OAAQA,KAGtCoM,EAAQ1oF,UAAUs8E,OAAS,WACzB,OAAO5qG,KAAKq7G,SAGdD,EAAepE,EAAS,YAAY,WAClC,OAAOh3G,KAAK+rG,MAAMwO,YAAYv6G,KAAK6vF,UAGrCurB,EAAepE,EAAS,OAAO,WAC7B,OAAIh3G,KAAKs7G,UACAt7G,KAAK+rG,MAAM4C,YAAY3uG,KAAKs7G,WAC9Bt7G,KAAK+rG,MAAM90B,EAAExP,IAAIznE,KAAKgqF,WAG/BoxB,EAAepE,EAAS,aAAa,WACnC,IAAIjL,EAAQ/rG,KAAK+rG,MACb/iF,EAAOhpB,KAAKgpB,OACZ8xF,EAAS/O,EAAMkO,eAAiB,EAEhCt5G,EAAIqoB,EAAK/L,MAAM,EAAG8uF,EAAMkO,gBAK5B,OAJAt5G,EAAE,IAAM,IACRA,EAAEm6G,IAAW,IACbn6G,EAAEm6G,IAAW,GAENn6G,KAGTy6G,EAAepE,EAAS,QAAQ,WAC9B,OAAOh3G,KAAK+rG,MAAMmP,UAAUl7G,KAAKu7G,gBAGnCH,EAAepE,EAAS,QAAQ,WAC9B,OAAOh3G,KAAK+rG,MAAM/iF,OAAOG,OAAOnpB,KAAK4qG,UAAUvhF,YAGjD+xF,EAAepE,EAAS,iBAAiB,WACvC,OAAOh3G,KAAKgpB,OAAO/L,MAAMjd,KAAK+rG,MAAMkO,mBAGtCjD,EAAQ1oF,UAAUk4C,KAAO,SAAc9sD,GAErC,OADAD,EAAOzZ,KAAKq7G,QAAS,2BACdr7G,KAAK+rG,MAAMvlC,KAAK9sD,EAAS1Z,OAGlCg3G,EAAQ1oF,UAAUg/D,OAAS,SAAgB5zE,EAASs0E,GAClD,OAAOhuF,KAAK+rG,MAAMze,OAAO5zE,EAASs0E,EAAKhuF,OAGzCg3G,EAAQ1oF,UAAUktF,UAAY,SAAmB/pD,GAE/C,OADAh4C,EAAOzZ,KAAKq7G,QAAS,0BACd5vF,EAAM7R,OAAO5Z,KAAK4qG,SAAUn5C,IAGrCulD,EAAQ1oF,UAAUguE,UAAY,SAAmB7qC,GAC/C,OAAOhmC,EAAM7R,OAAO5Z,KAAKy6G,WAAYhpD,IAGvC/xD,EAAOD,QAAUu3G,0CC9FjB,aAEA,IAAIlwC,EAAKrmE,EAAQ,SACbgrB,EAAQhrB,EAAQ,YAChBgZ,EAASgS,EAAMhS,OACf2hG,EAAiB3vF,EAAM2vF,eACvBtB,EAAaruF,EAAMquF,WAUvB,SAAS7C,EAAUlL,EAAO/d,GACxBhuF,KAAK+rG,MAAQA,EAEM,iBAAR/d,IACTA,EAAM8rB,EAAW9rB,IAEfn/E,MAAM6V,QAAQspE,KAChBA,EAAM,CACJqsB,EAAGrsB,EAAI/wE,MAAM,EAAG8uF,EAAMkO,gBACtBtZ,EAAG3S,EAAI/wE,MAAM8uF,EAAMkO,kBAIvBxgG,EAAOu0E,EAAIqsB,GAAKrsB,EAAI2S,EAAG,4BAEnBoL,EAAMoP,QAAQntB,EAAIqsB,KACpBr6G,KAAKy7G,GAAKztB,EAAIqsB,GACZrsB,EAAI2S,aAAa75B,IACnB9mE,KAAK07G,GAAK1tB,EAAI2S,GAEhB3gG,KAAK27G,UAAY9sG,MAAM6V,QAAQspE,EAAIqsB,GAAKrsB,EAAIqsB,EAAIrsB,EAAIssB,SACpDt6G,KAAK47G,UAAY/sG,MAAM6V,QAAQspE,EAAI2S,GAAK3S,EAAI2S,EAAI3S,EAAI6tB,SAGtDT,EAAenE,EAAW,KAAK,WAC7B,OAAOj3G,KAAK+rG,MAAMmP,UAAUl7G,KAAK67G,eAGnCT,EAAenE,EAAW,KAAK,WAC7B,OAAOj3G,KAAK+rG,MAAM4C,YAAY3uG,KAAKs6G,eAGrCc,EAAenE,EAAW,YAAY,WACpC,OAAOj3G,KAAK+rG,MAAMwO,YAAYv6G,KAAKq6G,QAGrCe,EAAenE,EAAW,YAAY,WACpC,OAAOj3G,KAAK+rG,MAAMkP,UAAUj7G,KAAK2gG,QAGnCsW,EAAU3oF,UAAUwtF,QAAU,WAC5B,OAAO97G,KAAKs6G,WAAWlxF,OAAOppB,KAAK67G,aAGrC5E,EAAU3oF,UAAUyoE,MAAQ,WAC1B,OAAOtrE,EAAM7R,OAAO5Z,KAAK87G,UAAW,OAAO1wF,eAG7C1rB,EAAOD,QAAUw3G,mEChEjBv3G,EAAOD,QAAU,CACfytG,QAAS,CACPI,KAAM,EACNK,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINP,IAAK,CACHnxB,IAAK,EACL0xB,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,iGC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","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i {\n const worksheet = this.workbook.addWorksheet(options.sheetName);\n\n const dateFormats = options.dateFormats || [\n 'YYYY-MM-DD[T]HH:mm:ssZ',\n 'YYYY-MM-DD[T]HH:mm:ss',\n 'MM-DD-YYYY',\n 'YYYY-MM-DD',\n ];\n const map =\n options.map ||\n function(datum) {\n if (datum === '') {\n return null;\n }\n const datumNumber = Number(datum);\n if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) {\n return datumNumber;\n }\n const dt = dateFormats.reduce((matchingDate, currentDateFormat) => {\n if (matchingDate) {\n return matchingDate;\n }\n const dayjsObj = dayjs(datum, currentDateFormat, true);\n if (dayjsObj.isValid()) {\n return dayjsObj;\n }\n return null;\n }, null);\n if (dt) {\n return new Date(dt.valueOf());\n }\n const special = SpecialValues[datum];\n if (special !== undefined) {\n return special;\n }\n return datum;\n };\n\n const csvStream = fastCsv\n .parse(options.parserOptions)\n .on('data', data => {\n worksheet.addRow(data.map(map));\n })\n .on('end', () => {\n csvStream.emit('worksheet', worksheet);\n });\n\n csvStream.on('worksheet', resolve).on('error', reject);\n\n stream.pipe(csvStream);\n });\n }\n\n /**\n * @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\n */\n createInputStream() {\n throw new Error(\n '`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\n );\n }\n\n write(stream, options) {\n return new Promise((resolve, reject) => {\n options = options || {};\n // const encoding = options.encoding || 'utf8';\n // const separator = options.separator || ',';\n // const quoteChar = options.quoteChar || '\\'';\n\n const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId);\n\n const csvStream = fastCsv.format(options.formatterOptions);\n stream.on('finish', () => {\n resolve();\n });\n csvStream.on('error', reject);\n csvStream.pipe(stream);\n\n const {dateFormat, dateUTC} = options;\n const map =\n options.map ||\n (value => {\n if (value) {\n if (value.text || value.hyperlink) {\n return value.hyperlink || value.text || '';\n }\n if (value.formula || value.result) {\n return value.result || '';\n }\n if (value instanceof Date) {\n if (dateFormat) {\n return dateUTC\n ? dayjs.utc(value).format(dateFormat)\n : dayjs(value).format(dateFormat);\n }\n return dateUTC ? dayjs.utc(value).format() : dayjs(value).format();\n }\n if (value.error) {\n return value.error;\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n }\n return value;\n });\n\n const includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows;\n let lastRow = 1;\n if (worksheet) {\n worksheet.eachRow((row, rowNumber) => {\n if (includeEmptyRows) {\n while (lastRow++ < rowNumber - 1) {\n csvStream.write([]);\n }\n }\n const {values} = row;\n values.shift();\n csvStream.write(values.map(map));\n lastRow = rowNumber;\n });\n }\n csvStream.end();\n });\n }\n\n writeFile(filename, options) {\n options = options || {};\n\n const streamOptions = {\n encoding: options.encoding || 'utf8',\n };\n const stream = fs.createWriteStream(filename, streamOptions);\n\n return this.write(stream, options);\n }\n\n async writeBuffer(options) {\n const stream = new StreamBuf();\n await this.write(stream, options);\n return stream.read();\n }\n}\n\nmodule.exports = CSV;\n","'use strict';\n\nconst colCache = require('../utils/col-cache');\n\nclass Anchor {\n constructor(worksheet, address, offset = 0) {\n this.worksheet = worksheet;\n\n if (!address) {\n this.nativeCol = 0;\n this.nativeColOff = 0;\n this.nativeRow = 0;\n this.nativeRowOff = 0;\n } else if (typeof address === 'string') {\n const decoded = colCache.decodeAddress(address);\n this.nativeCol = decoded.col + offset;\n this.nativeColOff = 0;\n this.nativeRow = decoded.row + offset;\n this.nativeRowOff = 0;\n } else if (address.nativeCol !== undefined) {\n this.nativeCol = address.nativeCol || 0;\n this.nativeColOff = address.nativeColOff || 0;\n this.nativeRow = address.nativeRow || 0;\n this.nativeRowOff = address.nativeRowOff || 0;\n } else if (address.col !== undefined) {\n this.col = address.col + offset;\n this.row = address.row + offset;\n } else {\n this.nativeCol = 0;\n this.nativeColOff = 0;\n this.nativeRow = 0;\n this.nativeRowOff = 0;\n }\n }\n\n static asInstance(model) {\n return model instanceof Anchor || model == null ? model : new Anchor(model);\n }\n\n get col() {\n return this.nativeCol + (Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth);\n }\n\n set col(v) {\n this.nativeCol = Math.floor(v);\n this.nativeColOff = Math.floor((v - this.nativeCol) * this.colWidth);\n }\n\n get row() {\n return this.nativeRow + (Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight);\n }\n\n set row(v) {\n this.nativeRow = Math.floor(v);\n this.nativeRowOff = Math.floor((v - this.nativeRow) * this.rowHeight);\n }\n\n get colWidth() {\n return this.worksheet &&\n this.worksheet.getColumn(this.nativeCol + 1) &&\n this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth\n ? Math.floor(this.worksheet.getColumn(this.nativeCol + 1).width * 10000)\n : 640000;\n }\n\n get rowHeight() {\n return this.worksheet &&\n this.worksheet.getRow(this.nativeRow + 1) &&\n this.worksheet.getRow(this.nativeRow + 1).height\n ? Math.floor(this.worksheet.getRow(this.nativeRow + 1).height * 10000)\n : 180000;\n }\n\n get model() {\n return {\n nativeCol: this.nativeCol,\n nativeColOff: this.nativeColOff,\n nativeRow: this.nativeRow,\n nativeRowOff: this.nativeRowOff,\n };\n }\n\n set model(value) {\n this.nativeCol = value.nativeCol;\n this.nativeColOff = value.nativeColOff;\n this.nativeRow = value.nativeRow;\n this.nativeRowOff = value.nativeRowOff;\n }\n}\n\nmodule.exports = Anchor;\n","/* eslint-disable max-classes-per-file */\nconst colCache = require('../utils/col-cache');\nconst _ = require('../utils/under-dash');\nconst Enums = require('./enums');\nconst {slideFormula} = require('../utils/shared-formula');\nconst Note = require('./note');\n// Cell requirements\n// Operate inside a worksheet\n// Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc.\n// Manage/use and manipulate cell format either as local to cell or inherited from column or row.\n\nclass Cell {\n constructor(row, column, address) {\n if (!row || !column) {\n throw new Error('A Cell needs a Row');\n }\n\n this._row = row;\n this._column = column;\n\n colCache.validateAddress(address);\n this._address = address;\n\n // TODO: lazy evaluation of this._value\n this._value = Value.create(Cell.Types.Null, this);\n\n this.style = this._mergeStyle(row.style, column.style, {});\n\n this._mergeCount = 0;\n }\n\n get worksheet() {\n return this._row.worksheet;\n }\n\n get workbook() {\n return this._row.worksheet.workbook;\n }\n\n // help GC by removing cyclic (and other) references\n destroy() {\n delete this.style;\n delete this._value;\n delete this._row;\n delete this._column;\n delete this._address;\n }\n\n // =========================================================================\n // Styles stuff\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this.style.numFmt = value;\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this.style.font = value;\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this.style.alignment = value;\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this.style.border = value;\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this.style.fill = value;\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this.style.protection = value;\n }\n\n _mergeStyle(rowStyle, colStyle, style) {\n const numFmt = (rowStyle && rowStyle.numFmt) || (colStyle && colStyle.numFmt);\n if (numFmt) style.numFmt = numFmt;\n\n const font = (rowStyle && rowStyle.font) || (colStyle && colStyle.font);\n if (font) style.font = font;\n\n const alignment = (rowStyle && rowStyle.alignment) || (colStyle && colStyle.alignment);\n if (alignment) style.alignment = alignment;\n\n const border = (rowStyle && rowStyle.border) || (colStyle && colStyle.border);\n if (border) style.border = border;\n\n const fill = (rowStyle && rowStyle.fill) || (colStyle && colStyle.fill);\n if (fill) style.fill = fill;\n\n const protection = (rowStyle && rowStyle.protection) || (colStyle && colStyle.protection);\n if (protection) style.protection = protection;\n\n return style;\n }\n\n // =========================================================================\n // return the address for this cell\n get address() {\n return this._address;\n }\n\n get row() {\n return this._row.number;\n }\n\n get col() {\n return this._column.number;\n }\n\n get $col$row() {\n return `$${this._column.letter}$${this.row}`;\n }\n\n // =========================================================================\n // Value stuff\n\n get type() {\n return this._value.type;\n }\n\n get effectiveType() {\n return this._value.effectiveType;\n }\n\n toCsvString() {\n return this._value.toCsvString();\n }\n\n // =========================================================================\n // Merge stuff\n\n addMergeRef() {\n this._mergeCount++;\n }\n\n releaseMergeRef() {\n this._mergeCount--;\n }\n\n get isMerged() {\n return this._mergeCount > 0 || this.type === Cell.Types.Merge;\n }\n\n merge(master, ignoreStyle) {\n this._value.release();\n this._value = Value.create(Cell.Types.Merge, this, master);\n if (!ignoreStyle) {\n this.style = master.style;\n }\n }\n\n unmerge() {\n if (this.type === Cell.Types.Merge) {\n this._value.release();\n this._value = Value.create(Cell.Types.Null, this);\n this.style = this._mergeStyle(this._row.style, this._column.style, {});\n }\n }\n\n isMergedTo(master) {\n if (this._value.type !== Cell.Types.Merge) return false;\n return this._value.isMergedTo(master);\n }\n\n get master() {\n if (this.type === Cell.Types.Merge) {\n return this._value.master;\n }\n return this; // an unmerged cell is its own master\n }\n\n get isHyperlink() {\n return this._value.type === Cell.Types.Hyperlink;\n }\n\n get hyperlink() {\n return this._value.hyperlink;\n }\n\n // return the value\n get value() {\n return this._value.value;\n }\n\n // set the value - can be number, string or raw\n set value(v) {\n // special case - merge cells set their master's value\n if (this.type === Cell.Types.Merge) {\n this._value.master.value = v;\n return;\n }\n\n this._value.release();\n\n // assign value\n this._value = Value.create(Value.getType(v), this, v);\n }\n\n get note() {\n return this._comment && this._comment.note;\n }\n\n set note(note) {\n this._comment = new Note(note);\n }\n\n get text() {\n return this._value.toString();\n }\n\n get html() {\n return _.escapeHtml(this.text);\n }\n\n toString() {\n return this.text;\n }\n\n _upgradeToHyperlink(hyperlink) {\n // if this cell is a string, turn it into a Hyperlink\n if (this.type === Cell.Types.String) {\n this._value = Value.create(Cell.Types.Hyperlink, this, {\n text: this._value.value,\n hyperlink,\n });\n }\n }\n\n // =========================================================================\n // Formula stuff\n get formula() {\n return this._value.formula;\n }\n\n get result() {\n return this._value.result;\n }\n\n get formulaType() {\n return this._value.formulaType;\n }\n\n // =========================================================================\n // Name stuff\n get fullAddress() {\n const {worksheet} = this._row;\n return {\n sheetName: worksheet.name,\n address: this.address,\n row: this.row,\n col: this.col,\n };\n }\n\n get name() {\n return this.names[0];\n }\n\n set name(value) {\n this.names = [value];\n }\n\n get names() {\n return this.workbook.definedNames.getNamesEx(this.fullAddress);\n }\n\n set names(value) {\n const {definedNames} = this.workbook;\n definedNames.removeAllNames(this.fullAddress);\n value.forEach(name => {\n definedNames.addEx(this.fullAddress, name);\n });\n }\n\n addName(name) {\n this.workbook.definedNames.addEx(this.fullAddress, name);\n }\n\n removeName(name) {\n this.workbook.definedNames.removeEx(this.fullAddress, name);\n }\n\n removeAllNames() {\n this.workbook.definedNames.removeAllNames(this.fullAddress);\n }\n\n // =========================================================================\n // Data Validation stuff\n get _dataValidations() {\n return this.worksheet.dataValidations;\n }\n\n get dataValidation() {\n return this._dataValidations.find(this.address);\n }\n\n set dataValidation(value) {\n this._dataValidations.add(this.address, value);\n }\n\n // =========================================================================\n // Model stuff\n\n get model() {\n const {model} = this._value;\n model.style = this.style;\n if (this._comment) {\n model.comment = this._comment.model;\n }\n return model;\n }\n\n set model(value) {\n this._value.release();\n this._value = Value.create(value.type, this);\n this._value.model = value;\n\n if (value.comment) {\n switch (value.comment.type) {\n case 'note':\n this._comment = Note.fromModel(value.comment);\n break;\n }\n }\n\n if (value.style) {\n this.style = value.style;\n } else {\n this.style = {};\n }\n }\n}\nCell.Types = Enums.ValueType;\n\n// =============================================================================\n// Internal Value Types\n\nclass NullValue {\n constructor(cell) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Null,\n };\n }\n\n get value() {\n return null;\n }\n\n set value(value) {\n // nothing to do\n }\n\n get type() {\n return Cell.Types.Null;\n }\n\n get effectiveType() {\n return Cell.Types.Null;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return '';\n }\n\n release() {}\n\n toString() {\n return '';\n }\n}\n\nclass NumberValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Number,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Number;\n }\n\n get effectiveType() {\n return Cell.Types.Number;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass StringValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.String;\n }\n\n get effectiveType() {\n return Cell.Types.String;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return `\"${this.model.value.replace(/\"/g, '\"\"')}\"`;\n }\n\n release() {}\n\n toString() {\n return this.model.value;\n }\n}\n\nclass RichTextValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n toString() {\n return this.model.value.richText.map(t => t.text).join('');\n }\n\n get type() {\n return Cell.Types.RichText;\n }\n\n get effectiveType() {\n return Cell.Types.RichText;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return `\"${this.text.replace(/\"/g, '\"\"')}\"`;\n }\n\n release() {}\n}\n\nclass DateValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Date,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Date;\n }\n\n get effectiveType() {\n return Cell.Types.Date;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toISOString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass HyperlinkValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Hyperlink,\n text: value ? value.text : undefined,\n hyperlink: value ? value.hyperlink : undefined,\n };\n if (value && value.tooltip) {\n this.model.tooltip = value.tooltip;\n }\n }\n\n get value() {\n const v = {\n text: this.model.text,\n hyperlink: this.model.hyperlink,\n };\n if (this.model.tooltip) {\n v.tooltip = this.model.tooltip;\n }\n return v;\n }\n\n set value(value) {\n this.model = {\n text: value.text,\n hyperlink: value.hyperlink,\n };\n if (value.tooltip) {\n this.model.tooltip = value.tooltip;\n }\n }\n\n get text() {\n return this.model.text;\n }\n\n set text(value) {\n this.model.text = value;\n }\n\n /*\n get tooltip() {\n return this.model.tooltip;\n }\n\n set tooltip(value) {\n this.model.tooltip = value;\n } */\n\n get hyperlink() {\n return this.model.hyperlink;\n }\n\n set hyperlink(value) {\n this.model.hyperlink = value;\n }\n\n get type() {\n return Cell.Types.Hyperlink;\n }\n\n get effectiveType() {\n return Cell.Types.Hyperlink;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.hyperlink;\n }\n\n release() {}\n\n toString() {\n return this.model.text;\n }\n}\n\nclass MergeValue {\n constructor(cell, master) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Merge,\n master: master ? master.address : undefined,\n };\n this._master = master;\n if (master) {\n master.addMergeRef();\n }\n }\n\n get value() {\n return this._master.value;\n }\n\n set value(value) {\n if (value instanceof Cell) {\n if (this._master) {\n this._master.releaseMergeRef();\n }\n value.addMergeRef();\n this._master = value;\n } else {\n this._master.value = value;\n }\n }\n\n isMergedTo(master) {\n return master === this._master;\n }\n\n get master() {\n return this._master;\n }\n\n get type() {\n return Cell.Types.Merge;\n }\n\n get effectiveType() {\n return this._master.effectiveType;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return '';\n }\n\n release() {\n this._master.releaseMergeRef();\n }\n\n toString() {\n return this.value.toString();\n }\n}\n\nclass FormulaValue {\n constructor(cell, value) {\n this.cell = cell;\n\n this.model = {\n address: cell.address,\n type: Cell.Types.Formula,\n shareType: value ? value.shareType : undefined,\n ref: value ? value.ref : undefined,\n formula: value ? value.formula : undefined,\n sharedFormula: value ? value.sharedFormula : undefined,\n result: value ? value.result : undefined,\n };\n }\n\n _copyModel(model) {\n const copy = {};\n const cp = name => {\n const value = model[name];\n if (value) {\n copy[name] = value;\n }\n };\n cp('formula');\n cp('result');\n cp('ref');\n cp('shareType');\n cp('sharedFormula');\n return copy;\n }\n\n get value() {\n return this._copyModel(this.model);\n }\n\n set value(value) {\n this.model = this._copyModel(value);\n }\n\n validate(value) {\n switch (Value.getType(value)) {\n case Cell.Types.Null:\n case Cell.Types.String:\n case Cell.Types.Number:\n case Cell.Types.Date:\n break;\n case Cell.Types.Hyperlink:\n case Cell.Types.Formula:\n default:\n throw new Error('Cannot process that type of result value');\n }\n }\n\n get dependencies() {\n // find all the ranges and cells mentioned in the formula\n const ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g);\n const cells = this.formula\n .replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g, '')\n .match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}/g);\n return {\n ranges,\n cells,\n };\n }\n\n get formula() {\n return this.model.formula || this._getTranslatedFormula();\n }\n\n set formula(value) {\n this.model.formula = value;\n }\n\n get formulaType() {\n if (this.model.formula) {\n return Enums.FormulaType.Master;\n }\n if (this.model.sharedFormula) {\n return Enums.FormulaType.Shared;\n }\n return Enums.FormulaType.None;\n }\n\n get result() {\n return this.model.result;\n }\n\n set result(value) {\n this.model.result = value;\n }\n\n get type() {\n return Cell.Types.Formula;\n }\n\n get effectiveType() {\n const v = this.model.result;\n if (v === null || v === undefined) {\n return Enums.ValueType.Null;\n }\n if (v instanceof String || typeof v === 'string') {\n return Enums.ValueType.String;\n }\n if (typeof v === 'number') {\n return Enums.ValueType.Number;\n }\n if (v instanceof Date) {\n return Enums.ValueType.Date;\n }\n if (v.text && v.hyperlink) {\n return Enums.ValueType.Hyperlink;\n }\n if (v.formula) {\n return Enums.ValueType.Formula;\n }\n\n return Enums.ValueType.Null;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n _getTranslatedFormula() {\n if (!this._translatedFormula && this.model.sharedFormula) {\n const {worksheet} = this.cell;\n const master = worksheet.findCell(this.model.sharedFormula);\n this._translatedFormula =\n master && slideFormula(master.formula, master.address, this.model.address);\n }\n return this._translatedFormula;\n }\n\n toCsvString() {\n return `${this.model.result || ''}`;\n }\n\n release() {}\n\n toString() {\n return this.model.result ? this.model.result.toString() : '';\n }\n}\n\nclass SharedStringValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.SharedString,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.SharedString;\n }\n\n get effectiveType() {\n return Cell.Types.SharedString;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass BooleanValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Boolean,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Boolean;\n }\n\n get effectiveType() {\n return Cell.Types.Boolean;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value ? 1 : 0;\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass ErrorValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Error,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Error;\n }\n\n get effectiveType() {\n return Cell.Types.Error;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.error.toString();\n }\n}\n\nclass JSONValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value: JSON.stringify(value),\n rawValue: value,\n };\n }\n\n get value() {\n return this.model.rawValue;\n }\n\n set value(value) {\n this.model.rawValue = value;\n this.model.value = JSON.stringify(value);\n }\n\n get type() {\n return Cell.Types.String;\n }\n\n get effectiveType() {\n return Cell.Types.String;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value;\n }\n\n release() {}\n\n toString() {\n return this.model.value;\n }\n}\n\n// Value is a place to hold common static Value type functions\nconst Value = {\n getType(value) {\n if (value === null || value === undefined) {\n return Cell.Types.Null;\n }\n if (value instanceof String || typeof value === 'string') {\n return Cell.Types.String;\n }\n if (typeof value === 'number') {\n return Cell.Types.Number;\n }\n if (typeof value === 'boolean') {\n return Cell.Types.Boolean;\n }\n if (value instanceof Date) {\n return Cell.Types.Date;\n }\n if (value.text && value.hyperlink) {\n return Cell.Types.Hyperlink;\n }\n if (value.formula || value.sharedFormula) {\n return Cell.Types.Formula;\n }\n if (value.richText) {\n return Cell.Types.RichText;\n }\n if (value.sharedString) {\n return Cell.Types.SharedString;\n }\n if (value.error) {\n return Cell.Types.Error;\n }\n return Cell.Types.JSON;\n },\n\n // map valueType to constructor\n types: [\n {t: Cell.Types.Null, f: NullValue},\n {t: Cell.Types.Number, f: NumberValue},\n {t: Cell.Types.String, f: StringValue},\n {t: Cell.Types.Date, f: DateValue},\n {t: Cell.Types.Hyperlink, f: HyperlinkValue},\n {t: Cell.Types.Formula, f: FormulaValue},\n {t: Cell.Types.Merge, f: MergeValue},\n {t: Cell.Types.JSON, f: JSONValue},\n {t: Cell.Types.SharedString, f: SharedStringValue},\n {t: Cell.Types.RichText, f: RichTextValue},\n {t: Cell.Types.Boolean, f: BooleanValue},\n {t: Cell.Types.Error, f: ErrorValue},\n ].reduce((p, t) => {\n p[t.t] = t.f;\n return p;\n }, []),\n\n create(type, cell, value) {\n const T = this.types[type];\n if (!T) {\n throw new Error(`Could not create Value of type ${type}`);\n }\n return new T(cell, value);\n },\n};\n\nmodule.exports = Cell;\n","'use strict';\n\nconst _ = require('../utils/under-dash');\n\nconst Enums = require('./enums');\nconst colCache = require('../utils/col-cache');\n\nconst DEFAULT_COLUMN_WIDTH = 9;\n\n// Column defines the column properties for 1 column.\n// This includes header rows, widths, key, (style), etc.\n// Worksheet will condense the columns as appropriate during serialization\nclass Column {\n constructor(worksheet, number, defn) {\n this._worksheet = worksheet;\n this._number = number;\n if (defn !== false) {\n // sometimes defn will follow\n this.defn = defn;\n }\n }\n\n get number() {\n return this._number;\n }\n\n get worksheet() {\n return this._worksheet;\n }\n\n get letter() {\n return colCache.n2l(this._number);\n }\n\n get isCustomWidth() {\n return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH;\n }\n\n get defn() {\n return {\n header: this._header,\n key: this.key,\n width: this.width,\n style: this.style,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n };\n }\n\n set defn(value) {\n if (value) {\n this.key = value.key;\n this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH;\n this.outlineLevel = value.outlineLevel;\n if (value.style) {\n this.style = value.style;\n } else {\n this.style = {};\n }\n\n // headers must be set after style\n this.header = value.header;\n this._hidden = !!value.hidden;\n } else {\n delete this._header;\n delete this._key;\n delete this.width;\n this.style = {};\n this.outlineLevel = 0;\n }\n }\n\n get headers() {\n return this._header && this._header instanceof Array ? this._header : [this._header];\n }\n\n get header() {\n return this._header;\n }\n\n set header(value) {\n if (value !== undefined) {\n this._header = value;\n this.headers.forEach((text, index) => {\n this._worksheet.getCell(index + 1, this.number).value = text;\n });\n } else {\n this._header = undefined;\n }\n }\n\n get key() {\n return this._key;\n }\n\n set key(value) {\n const column = this._key && this._worksheet.getColumnKey(this._key);\n if (column === this) {\n this._worksheet.deleteColumnKey(this._key);\n }\n\n this._key = value;\n if (value) {\n this._worksheet.setColumnKey(this._key, this);\n }\n }\n\n get hidden() {\n return !!this._hidden;\n }\n\n set hidden(value) {\n this._hidden = value;\n }\n\n get outlineLevel() {\n return this._outlineLevel || 0;\n }\n\n set outlineLevel(value) {\n this._outlineLevel = value;\n }\n\n get collapsed() {\n return !!(\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol\n );\n }\n\n toString() {\n return JSON.stringify({\n key: this.key,\n width: this.width,\n headers: this.headers.length ? this.headers : undefined,\n });\n }\n\n equivalentTo(other) {\n return (\n this.width === other.width &&\n this.hidden === other.hidden &&\n this.outlineLevel === other.outlineLevel &&\n _.isEqual(this.style, other.style)\n );\n }\n\n get isDefault() {\n if (this.isCustomWidth) {\n return false;\n }\n if (this.hidden) {\n return false;\n }\n if (this.outlineLevel) {\n return false;\n }\n const s = this.style;\n if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) {\n return false;\n }\n return true;\n }\n\n get headerCount() {\n return this.headers.length;\n }\n\n eachCell(options, iteratee) {\n const colNumber = this.number;\n if (!iteratee) {\n iteratee = options;\n options = null;\n }\n this._worksheet.eachRow(options, (row, rowNumber) => {\n iteratee(row.getCell(colNumber), rowNumber);\n });\n }\n\n get values() {\n const v = [];\n this.eachCell((cell, rowNumber) => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n v[rowNumber] = cell.value;\n }\n });\n return v;\n }\n\n set values(v) {\n if (!v) {\n return;\n }\n const colNumber = this.number;\n let offset = 0;\n if (v.hasOwnProperty('0')) {\n // assume contiguous array, start at row 1\n offset = 1;\n }\n v.forEach((value, index) => {\n this._worksheet.getCell(index + offset, colNumber).value = value;\n });\n }\n\n // =========================================================================\n // styles\n _applyStyle(name, value) {\n this.style[name] = value;\n this.eachCell(cell => {\n cell[name] = value;\n });\n return value;\n }\n\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this._applyStyle('numFmt', value);\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this._applyStyle('font', value);\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this._applyStyle('alignment', value);\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this._applyStyle('protection', value);\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this._applyStyle('border', value);\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this._applyStyle('fill', value);\n }\n\n // =============================================================================\n // static functions\n\n static toModel(columns) {\n // Convert array of Column into compressed list cols\n const cols = [];\n let col = null;\n if (columns) {\n columns.forEach((column, index) => {\n if (column.isDefault) {\n if (col) {\n col = null;\n }\n } else if (!col || !column.equivalentTo(col)) {\n col = {\n min: index + 1,\n max: index + 1,\n width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH,\n style: column.style,\n isCustomWidth: column.isCustomWidth,\n hidden: column.hidden,\n outlineLevel: column.outlineLevel,\n collapsed: column.collapsed,\n };\n cols.push(col);\n } else {\n col.max = index + 1;\n }\n });\n }\n return cols.length ? cols : undefined;\n }\n\n static fromModel(worksheet, cols) {\n cols = cols || [];\n const columns = [];\n let count = 1;\n let index = 0;\n /**\n * sort cols by min\n * If it is not sorted, the subsequent column configuration will be overwritten\n * */\n cols = cols.sort(function(pre, next) {\n return pre.min - next.min;\n });\n while (index < cols.length) {\n const col = cols[index++];\n while (count < col.min) {\n columns.push(new Column(worksheet, count++));\n }\n while (count <= col.max) {\n columns.push(new Column(worksheet, count++, col));\n }\n }\n return columns.length ? columns : null;\n }\n}\n\nmodule.exports = Column;\n","class DataValidations {\n constructor(model) {\n this.model = model || {};\n }\n\n add(address, validation) {\n return (this.model[address] = validation);\n }\n\n find(address) {\n return this.model[address];\n }\n\n remove(address) {\n this.model[address] = undefined;\n }\n}\n\nmodule.exports = DataValidations;\n","'use strict';\n\nconst _ = require('../utils/under-dash');\nconst colCache = require('../utils/col-cache');\nconst CellMatrix = require('../utils/cell-matrix');\nconst Range = require('./range');\n\nconst rangeRegexp = /[$](\\w+)[$](\\d+)(:[$](\\w+)[$](\\d+))?/;\n\nclass DefinedNames {\n constructor() {\n this.matrixMap = {};\n }\n\n getMatrix(name) {\n const matrix = this.matrixMap[name] || (this.matrixMap[name] = new CellMatrix());\n return matrix;\n }\n\n // add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2\n add(locStr, name) {\n const location = colCache.decodeEx(locStr);\n this.addEx(location, name);\n }\n\n addEx(location, name) {\n const matrix = this.getMatrix(name);\n if (location.top) {\n for (let col = location.left; col <= location.right; col++) {\n for (let row = location.top; row <= location.bottom; row++) {\n const address = {\n sheetName: location.sheetName,\n address: colCache.n2l(col) + row,\n row,\n col,\n };\n\n matrix.addCellEx(address);\n }\n }\n } else {\n matrix.addCellEx(location);\n }\n }\n\n remove(locStr, name) {\n const location = colCache.decodeEx(locStr);\n this.removeEx(location, name);\n }\n\n removeEx(location, name) {\n const matrix = this.getMatrix(name);\n matrix.removeCellEx(location);\n }\n\n removeAllNames(location) {\n _.each(this.matrixMap, matrix => {\n matrix.removeCellEx(location);\n });\n }\n\n forEach(callback) {\n _.each(this.matrixMap, (matrix, name) => {\n matrix.forEach(cell => {\n callback(name, cell);\n });\n });\n }\n\n // get all the names of a cell\n getNames(addressStr) {\n return this.getNamesEx(colCache.decodeEx(addressStr));\n }\n\n getNamesEx(address) {\n return _.map(this.matrixMap, (matrix, name) => matrix.findCellEx(address) && name).filter(\n Boolean\n );\n }\n\n _explore(matrix, cell) {\n cell.mark = false;\n const {sheetName} = cell;\n\n const range = new Range(cell.row, cell.col, cell.row, cell.col, sheetName);\n let x;\n let y;\n\n // grow vertical - only one col to worry about\n function vGrow(yy, edge) {\n const c = matrix.findCellAt(sheetName, yy, cell.col);\n if (!c || !c.mark) {\n return false;\n }\n range[edge] = yy;\n c.mark = false;\n return true;\n }\n for (y = cell.row - 1; vGrow(y, 'top'); y--);\n for (y = cell.row + 1; vGrow(y, 'bottom'); y++);\n\n // grow horizontal - ensure all rows can grow\n function hGrow(xx, edge) {\n const cells = [];\n for (y = range.top; y <= range.bottom; y++) {\n const c = matrix.findCellAt(sheetName, y, xx);\n if (c && c.mark) {\n cells.push(c);\n } else {\n return false;\n }\n }\n range[edge] = xx;\n for (let i = 0; i < cells.length; i++) {\n cells[i].mark = false;\n }\n return true;\n }\n for (x = cell.col - 1; hGrow(x, 'left'); x--);\n for (x = cell.col + 1; hGrow(x, 'right'); x++);\n\n return range;\n }\n\n getRanges(name, matrix) {\n matrix = matrix || this.matrixMap[name];\n\n if (!matrix) {\n return {name, ranges: []};\n }\n\n // mark and sweep!\n matrix.forEach(cell => {\n cell.mark = true;\n });\n const ranges = matrix\n .map(cell => cell.mark && this._explore(matrix, cell))\n .filter(Boolean)\n .map(range => range.$shortRange);\n\n return {\n name,\n ranges,\n };\n }\n\n normaliseMatrix(matrix, sheetName) {\n // some of the cells might have shifted on specified sheet\n // need to reassign rows, cols\n matrix.forEachInSheet(sheetName, (cell, row, col) => {\n if (cell) {\n if (cell.row !== row || cell.col !== col) {\n cell.row = row;\n cell.col = col;\n cell.address = colCache.n2l(col) + row;\n }\n }\n });\n }\n\n spliceRows(sheetName, start, numDelete, numInsert) {\n _.each(this.matrixMap, matrix => {\n matrix.spliceRows(sheetName, start, numDelete, numInsert);\n this.normaliseMatrix(matrix, sheetName);\n });\n }\n\n spliceColumns(sheetName, start, numDelete, numInsert) {\n _.each(this.matrixMap, matrix => {\n matrix.spliceColumns(sheetName, start, numDelete, numInsert);\n this.normaliseMatrix(matrix, sheetName);\n });\n }\n\n get model() {\n // To get names per cell - just iterate over all names finding cells if they exist\n return _.map(this.matrixMap, (matrix, name) => this.getRanges(name, matrix)).filter(\n definedName => definedName.ranges.length\n );\n }\n\n set model(value) {\n // value is [ { name, ranges }, ... ]\n const matrixMap = (this.matrixMap = {});\n value.forEach(definedName => {\n const matrix = (matrixMap[definedName.name] = new CellMatrix());\n definedName.ranges.forEach(rangeStr => {\n if (rangeRegexp.test(rangeStr.split('!').pop() || '')) {\n matrix.addCell(rangeStr);\n }\n });\n });\n }\n}\n\nmodule.exports = DefinedNames;\n","'use strict';\n\nmodule.exports = {\n ValueType: {\n Null: 0,\n Merge: 1,\n Number: 2,\n String: 3,\n Date: 4,\n Hyperlink: 5,\n Formula: 6,\n SharedString: 7,\n RichText: 8,\n Boolean: 9,\n Error: 10,\n },\n FormulaType: {\n None: 0,\n Master: 1,\n Shared: 2,\n },\n RelationshipType: {\n None: 0,\n OfficeDocument: 1,\n Worksheet: 2,\n CalcChain: 3,\n SharedStrings: 4,\n Styles: 5,\n Theme: 6,\n Hyperlink: 7,\n },\n DocumentType: {\n Xlsx: 1,\n },\n ReadingOrder: {\n LeftToRight: 1,\n RightToLeft: 2,\n },\n ErrorValue: {\n NotApplicable: '#N/A',\n Ref: '#REF!',\n Name: '#NAME?',\n DivZero: '#DIV/0!',\n Null: '#NULL!',\n Value: '#VALUE!',\n Num: '#NUM!',\n },\n};\n","const colCache = require('../utils/col-cache');\nconst Anchor = require('./anchor');\n\nclass Image {\n constructor(worksheet, model) {\n this.worksheet = worksheet;\n this.model = model;\n }\n\n get model() {\n switch (this.type) {\n case 'background':\n return {\n type: this.type,\n imageId: this.imageId,\n };\n case 'image':\n return {\n type: this.type,\n imageId: this.imageId,\n hyperlinks: this.range.hyperlinks,\n range: {\n tl: this.range.tl.model,\n br: this.range.br && this.range.br.model,\n ext: this.range.ext,\n editAs: this.range.editAs,\n },\n };\n default:\n throw new Error('Invalid Image Type');\n }\n }\n\n set model({type, imageId, range, hyperlinks}) {\n this.type = type;\n this.imageId = imageId;\n\n if (type === 'image') {\n if (typeof range === 'string') {\n const decoded = colCache.decode(range);\n this.range = {\n tl: new Anchor(this.worksheet, {col: decoded.left, row: decoded.top}, -1),\n br: new Anchor(this.worksheet, {col: decoded.right, row: decoded.bottom}, 0),\n editAs: 'oneCell',\n };\n } else {\n this.range = {\n tl: new Anchor(this.worksheet, range.tl, 0),\n br: range.br && new Anchor(this.worksheet, range.br, 0),\n ext: range.ext,\n editAs: range.editAs,\n hyperlinks: hyperlinks || range.hyperlinks,\n };\n }\n }\n }\n}\n\nmodule.exports = Image;\n","const _ = require('../utils/under-dash');\n\nclass Note {\n constructor(note) {\n this.note = note;\n }\n\n get model() {\n let value = null;\n switch (typeof this.note) {\n case 'string':\n value = {\n type: 'note',\n note: {\n texts: [\n {\n text: this.note,\n },\n ],\n },\n };\n break;\n default:\n value = {\n type: 'note',\n note: this.note,\n };\n break;\n }\n // Suitable for all cell comments\n return _.deepMerge({}, Note.DEFAULT_CONFIGS, value);\n }\n\n set model(value) {\n const {note} = value;\n const {texts} = note;\n if (texts.length === 1 && Object.keys(texts[0]).length === 1) {\n this.note = texts[0].text;\n } else {\n this.note = note;\n }\n }\n\n static fromModel(model) {\n const note = new Note();\n note.model = model;\n return note;\n }\n}\n\nNote.DEFAULT_CONFIGS = {\n note: {\n margins: {\n insetmode: 'auto',\n inset: [0.13, 0.13, 0.25, 0.25],\n },\n protection: {\n locked: 'True',\n lockText: 'True',\n },\n editAs: 'absolute',\n },\n};\n\nmodule.exports = Note;\n","const colCache = require('../utils/col-cache');\n\n// used by worksheet to calculate sheet dimensions\nclass Range {\n constructor() {\n this.decode(arguments);\n }\n\n setTLBR(t, l, b, r, s) {\n if (arguments.length < 4) {\n // setTLBR(tl, br, s)\n const tl = colCache.decodeAddress(t);\n const br = colCache.decodeAddress(l);\n this.model = {\n top: Math.min(tl.row, br.row),\n left: Math.min(tl.col, br.col),\n bottom: Math.max(tl.row, br.row),\n right: Math.max(tl.col, br.col),\n sheetName: b,\n };\n\n this.setTLBR(tl.row, tl.col, br.row, br.col, s);\n } else {\n // setTLBR(t, l, b, r, s)\n this.model = {\n top: Math.min(t, b),\n left: Math.min(l, r),\n bottom: Math.max(t, b),\n right: Math.max(l, r),\n sheetName: s,\n };\n }\n }\n\n decode(argv) {\n switch (argv.length) {\n case 5: // [t,l,b,r,s]\n this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);\n break;\n case 4: // [t,l,b,r]\n this.setTLBR(argv[0], argv[1], argv[2], argv[3]);\n break;\n\n case 3: // [tl,br,s]\n this.setTLBR(argv[0], argv[1], argv[2]);\n break;\n case 2: // [tl,br]\n this.setTLBR(argv[0], argv[1]);\n break;\n\n case 1: {\n const value = argv[0];\n if (value instanceof Range) {\n // copy constructor\n this.model = {\n top: value.model.top,\n left: value.model.left,\n bottom: value.model.bottom,\n right: value.model.right,\n sheetName: value.sheetName,\n };\n } else if (value instanceof Array) {\n // an arguments array\n this.decode(value);\n } else if (value.top && value.left && value.bottom && value.right) {\n // a model\n this.model = {\n top: value.top,\n left: value.left,\n bottom: value.bottom,\n right: value.right,\n sheetName: value.sheetName,\n };\n } else {\n // [sheetName!]tl:br\n const tlbr = colCache.decodeEx(value);\n if (tlbr.top) {\n this.model = {\n top: tlbr.top,\n left: tlbr.left,\n bottom: tlbr.bottom,\n right: tlbr.right,\n sheetName: tlbr.sheetName,\n };\n } else {\n this.model = {\n top: tlbr.row,\n left: tlbr.col,\n bottom: tlbr.row,\n right: tlbr.col,\n sheetName: tlbr.sheetName,\n };\n }\n }\n break;\n }\n\n case 0:\n this.model = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n };\n break;\n\n default:\n throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`);\n }\n }\n\n get top() {\n return this.model.top || 1;\n }\n\n set top(value) {\n this.model.top = value;\n }\n\n get left() {\n return this.model.left || 1;\n }\n\n set left(value) {\n this.model.left = value;\n }\n\n get bottom() {\n return this.model.bottom || 1;\n }\n\n set bottom(value) {\n this.model.bottom = value;\n }\n\n get right() {\n return this.model.right || 1;\n }\n\n set right(value) {\n this.model.right = value;\n }\n\n get sheetName() {\n return this.model.sheetName;\n }\n\n set sheetName(value) {\n this.model.sheetName = value;\n }\n\n get _serialisedSheetName() {\n const {sheetName} = this.model;\n if (sheetName) {\n if (/^[a-zA-Z0-9]*$/.test(sheetName)) {\n return `${sheetName}!`;\n }\n return `'${sheetName}'!`;\n }\n return '';\n }\n\n expand(top, left, bottom, right) {\n if (!this.model.top || top < this.top) this.top = top;\n if (!this.model.left || left < this.left) this.left = left;\n if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;\n if (!this.model.right || right > this.right) this.right = right;\n }\n\n expandRow(row) {\n if (row) {\n const {dimensions, number} = row;\n if (dimensions) {\n this.expand(number, dimensions.min, number, dimensions.max);\n }\n }\n }\n\n expandToAddress(addressStr) {\n const address = colCache.decodeEx(addressStr);\n this.expand(address.row, address.col, address.row, address.col);\n }\n\n get tl() {\n return colCache.n2l(this.left) + this.top;\n }\n\n get $t$l() {\n return `$${colCache.n2l(this.left)}$${this.top}`;\n }\n\n get br() {\n return colCache.n2l(this.right) + this.bottom;\n }\n\n get $b$r() {\n return `$${colCache.n2l(this.right)}$${this.bottom}`;\n }\n\n get range() {\n return `${this._serialisedSheetName + this.tl}:${this.br}`;\n }\n\n get $range() {\n return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`;\n }\n\n get shortRange() {\n return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;\n }\n\n get $shortRange() {\n return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;\n }\n\n get count() {\n return (1 + this.bottom - this.top) * (1 + this.right - this.left);\n }\n\n toString() {\n return this.range;\n }\n\n intersects(other) {\n if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;\n if (other.bottom < this.top) return false;\n if (other.top > this.bottom) return false;\n if (other.right < this.left) return false;\n if (other.left > this.right) return false;\n return true;\n }\n\n contains(addressStr) {\n const address = colCache.decodeEx(addressStr);\n return this.containsEx(address);\n }\n\n containsEx(address) {\n if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;\n return (\n address.row >= this.top &&\n address.row <= this.bottom &&\n address.col >= this.left &&\n address.col <= this.right\n );\n }\n\n forEachAddress(cb) {\n for (let col = this.left; col <= this.right; col++) {\n for (let row = this.top; row <= this.bottom; row++) {\n cb(colCache.encodeAddress(row, col), row, col);\n }\n }\n }\n}\n\nmodule.exports = Range;\n","'use strict';\n\nconst _ = require('../utils/under-dash');\n\nconst Enums = require('./enums');\nconst colCache = require('../utils/col-cache');\nconst Cell = require('./cell');\n\nclass Row {\n constructor(worksheet, number) {\n this._worksheet = worksheet;\n this._number = number;\n this._cells = [];\n this.style = {};\n this.outlineLevel = 0;\n }\n\n // return the row number\n get number() {\n return this._number;\n }\n\n get worksheet() {\n return this._worksheet;\n }\n\n // Inform Streaming Writer that this row (and all rows before it) are complete\n // and ready to write. Has no effect on Worksheet document\n commit() {\n this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle\n }\n\n // helps GC by breaking cyclic references\n destroy() {\n delete this._worksheet;\n delete this._cells;\n delete this.style;\n }\n\n findCell(colNumber) {\n return this._cells[colNumber - 1];\n }\n\n // given {address, row, col}, find or create new cell\n getCellEx(address) {\n let cell = this._cells[address.col - 1];\n if (!cell) {\n const column = this._worksheet.getColumn(address.col);\n cell = new Cell(this, column, address.address);\n this._cells[address.col - 1] = cell;\n }\n return cell;\n }\n\n // get cell by key, letter or column number\n getCell(col) {\n if (typeof col === 'string') {\n // is it a key?\n const column = this._worksheet.getColumnKey(col);\n if (column) {\n col = column.number;\n } else {\n col = colCache.l2n(col);\n }\n }\n return (\n this._cells[col - 1] ||\n this.getCellEx({\n address: colCache.encodeAddress(this._number, col),\n row: this._number,\n col,\n })\n );\n }\n\n // remove cell(s) and shift all higher cells down by count\n splice(start, count, ...inserts) {\n const nKeep = start + count;\n const nExpand = inserts.length - count;\n const nEnd = this._cells.length;\n let i;\n let cSrc;\n let cDst;\n\n if (nExpand < 0) {\n // remove cells\n for (i = start + inserts.length; i <= nEnd; i++) {\n cDst = this._cells[i - 1];\n cSrc = this._cells[i - nExpand - 1];\n if (cSrc) {\n cDst = this.getCell(i);\n cDst.value = cSrc.value;\n cDst.style = cSrc.style;\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = cSrc._comment;\n } else if (cDst) {\n cDst.value = null;\n cDst.style = {};\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = undefined;\n }\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n cSrc = this._cells[i - 1];\n if (cSrc) {\n cDst = this.getCell(i + nExpand);\n cDst.value = cSrc.value;\n cDst.style = cSrc.style;\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = cSrc._comment;\n } else {\n this._cells[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now add the new values\n for (i = 0; i < inserts.length; i++) {\n cDst = this.getCell(start + i);\n cDst.value = inserts[i];\n cDst.style = {};\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = undefined;\n }\n }\n\n // Iterate over all non-null cells in this row\n eachCell(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = null;\n }\n if (options && options.includeEmpty) {\n const n = this._cells.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getCell(i), i);\n }\n } else {\n this._cells.forEach((cell, index) => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n iteratee(cell, index + 1);\n }\n });\n }\n }\n\n // ===========================================================================\n // Page Breaks\n addPageBreak(lft, rght) {\n const ws = this._worksheet;\n const left = Math.max(0, lft - 1) || 0;\n const right = Math.max(0, rght - 1) || 16838;\n const pb = {\n id: this._number,\n max: right,\n man: 1,\n };\n if (left) pb.min = left;\n\n ws.rowBreaks.push(pb);\n }\n\n // return a sparse array of cell values\n get values() {\n const values = [];\n this._cells.forEach(cell => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n values[cell.col] = cell.value;\n }\n });\n return values;\n }\n\n // set the values by contiguous or sparse array, or by key'd object literal\n set values(value) {\n // this operation is not additive - any prior cells are removed\n this._cells = [];\n if (!value) {\n // empty row\n } else if (value instanceof Array) {\n let offset = 0;\n if (value.hasOwnProperty('0')) {\n // contiguous array - start at column 1\n offset = 1;\n }\n value.forEach((item, index) => {\n if (item !== undefined) {\n this.getCellEx({\n address: colCache.encodeAddress(this._number, index + offset),\n row: this._number,\n col: index + offset,\n }).value = item;\n }\n });\n } else {\n // assume object with column keys\n this._worksheet.eachColumnKey((column, key) => {\n if (value[key] !== undefined) {\n this.getCellEx({\n address: colCache.encodeAddress(this._number, column.number),\n row: this._number,\n col: column.number,\n }).value = value[key];\n }\n });\n }\n }\n\n // returns true if the row includes at least one cell with a value\n get hasValues() {\n return _.some(this._cells, cell => cell && cell.type !== Enums.ValueType.Null);\n }\n\n get cellCount() {\n return this._cells.length;\n }\n\n get actualCellCount() {\n let count = 0;\n this.eachCell(() => {\n count++;\n });\n return count;\n }\n\n // get the min and max column number for the non-null cells in this row or null\n get dimensions() {\n let min = 0;\n let max = 0;\n this._cells.forEach(cell => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n if (!min || min > cell.col) {\n min = cell.col;\n }\n if (max < cell.col) {\n max = cell.col;\n }\n }\n });\n return min > 0\n ? {\n min,\n max,\n }\n : null;\n }\n\n // =========================================================================\n // styles\n _applyStyle(name, value) {\n this.style[name] = value;\n this._cells.forEach(cell => {\n if (cell) {\n cell[name] = value;\n }\n });\n return value;\n }\n\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this._applyStyle('numFmt', value);\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this._applyStyle('font', value);\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this._applyStyle('alignment', value);\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this._applyStyle('protection', value);\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this._applyStyle('border', value);\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this._applyStyle('fill', value);\n }\n\n get hidden() {\n return !!this._hidden;\n }\n\n set hidden(value) {\n this._hidden = value;\n }\n\n get outlineLevel() {\n return this._outlineLevel || 0;\n }\n\n set outlineLevel(value) {\n this._outlineLevel = value;\n }\n\n get collapsed() {\n return !!(\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow\n );\n }\n\n // =========================================================================\n get model() {\n const cells = [];\n let min = 0;\n let max = 0;\n this._cells.forEach(cell => {\n if (cell) {\n const cellModel = cell.model;\n if (cellModel) {\n if (!min || min > cell.col) {\n min = cell.col;\n }\n if (max < cell.col) {\n max = cell.col;\n }\n cells.push(cellModel);\n }\n }\n });\n\n return this.height || cells.length\n ? {\n cells,\n number: this.number,\n min,\n max,\n height: this.height,\n style: this.style,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n collapsed: this.collapsed,\n }\n : null;\n }\n\n set model(value) {\n if (value.number !== this._number) {\n throw new Error('Invalid row number in model');\n }\n this._cells = [];\n let previousAddress;\n value.cells.forEach(cellModel => {\n switch (cellModel.type) {\n case Cell.Types.Merge:\n // special case - don't add this types\n break;\n default: {\n let address;\n if (cellModel.address) {\n address = colCache.decodeAddress(cellModel.address);\n } else if (previousAddress) {\n // This is a element without an r attribute\n // Assume that it's the cell for the next column\n const {row} = previousAddress;\n const col = previousAddress.col + 1;\n address = {\n row,\n col,\n address: colCache.encodeAddress(row, col),\n $col$row: `$${colCache.n2l(col)}$${row}`,\n };\n }\n previousAddress = address;\n const cell = this.getCellEx(address);\n cell.model = cellModel;\n break;\n }\n }\n });\n\n if (value.height) {\n this.height = value.height;\n } else {\n delete this.height;\n }\n\n this.hidden = value.hidden;\n this.outlineLevel = value.outlineLevel || 0;\n\n this.style = (value.style && JSON.parse(JSON.stringify(value.style))) || {};\n }\n}\n\nmodule.exports = Row;\n","/* eslint-disable max-classes-per-file */\nconst colCache = require('../utils/col-cache');\n\nclass Column {\n // wrapper around column model, allowing access and manipulation\n constructor(table, column, index) {\n this.table = table;\n this.column = column;\n this.index = index;\n }\n\n _set(name, value) {\n this.table.cacheState();\n this.column[name] = value;\n }\n\n /* eslint-disable lines-between-class-members */\n get name() {\n return this.column.name;\n }\n set name(value) {\n this._set('name', value);\n }\n\n get filterButton() {\n return this.column.filterButton;\n }\n set filterButton(value) {\n this.column.filterButton = value;\n }\n\n get style() {\n return this.column.style;\n }\n set style(value) {\n this.column.style = value;\n }\n\n get totalsRowLabel() {\n return this.column.totalsRowLabel;\n }\n set totalsRowLabel(value) {\n this._set('totalsRowLabel', value);\n }\n\n get totalsRowFunction() {\n return this.column.totalsRowFunction;\n }\n set totalsRowFunction(value) {\n this._set('totalsRowFunction', value);\n }\n\n get totalsRowResult() {\n return this.column.totalsRowResult;\n }\n set totalsRowResult(value) {\n this._set('totalsRowResult', value);\n }\n\n get totalsRowFormula() {\n return this.column.totalsRowFormula;\n }\n set totalsRowFormula(value) {\n this._set('totalsRowFormula', value);\n }\n /* eslint-enable lines-between-class-members */\n}\n\nclass Table {\n constructor(worksheet, table) {\n this.worksheet = worksheet;\n if (table) {\n this.table = table;\n // check things are ok first\n this.validate();\n\n this.store();\n }\n }\n\n getFormula(column) {\n // get the correct formula to apply to the totals row\n switch (column.totalsRowFunction) {\n case 'none':\n return null;\n case 'average':\n return `SUBTOTAL(101,${this.table.name}[${column.name}])`;\n case 'countNums':\n return `SUBTOTAL(102,${this.table.name}[${column.name}])`;\n case 'count':\n return `SUBTOTAL(103,${this.table.name}[${column.name}])`;\n case 'max':\n return `SUBTOTAL(104,${this.table.name}[${column.name}])`;\n case 'min':\n return `SUBTOTAL(105,${this.table.name}[${column.name}])`;\n case 'stdDev':\n return `SUBTOTAL(106,${this.table.name}[${column.name}])`;\n case 'var':\n return `SUBTOTAL(107,${this.table.name}[${column.name}])`;\n case 'sum':\n return `SUBTOTAL(109,${this.table.name}[${column.name}])`;\n case 'custom':\n return column.totalsRowFormula;\n default:\n throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`);\n }\n }\n\n get width() {\n // width of the table\n return this.table.columns.length;\n }\n\n get height() {\n // height of the table data\n return this.table.rows.length;\n }\n\n get filterHeight() {\n // height of the table data plus optional header row\n return this.height + (this.table.headerRow ? 1 : 0);\n }\n\n get tableHeight() {\n // full height of the table on the sheet\n return this.filterHeight + (this.table.totalsRow ? 1 : 0);\n }\n\n validate() {\n const {table} = this;\n // set defaults and check is valid\n const assign = (o, name, dflt) => {\n if (o[name] === undefined) {\n o[name] = dflt;\n }\n };\n assign(table, 'headerRow', true);\n assign(table, 'totalsRow', false);\n\n assign(table, 'style', {});\n assign(table.style, 'theme', 'TableStyleMedium2');\n assign(table.style, 'showFirstColumn', false);\n assign(table.style, 'showLastColumn', false);\n assign(table.style, 'showRowStripes', false);\n assign(table.style, 'showColumnStripes', false);\n\n const assert = (test, message) => {\n if (!test) {\n throw new Error(message);\n }\n };\n assert(table.ref, 'Table must have ref');\n assert(table.columns, 'Table must have column definitions');\n assert(table.rows, 'Table must have row definitions');\n\n table.tl = colCache.decodeAddress(table.ref);\n const {row, col} = table.tl;\n assert(row > 0, 'Table must be on valid row');\n assert(col > 0, 'Table must be on valid col');\n\n const {width, filterHeight, tableHeight} = this;\n\n // autoFilterRef is a range that includes optional headers only\n table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1);\n\n // tableRef is a range that includes optional headers and totals\n table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1);\n\n table.columns.forEach((column, i) => {\n assert(column.name, `Column ${i} must have a name`);\n if (i === 0) {\n assign(column, 'totalsRowLabel', 'Total');\n } else {\n assign(column, 'totalsRowFunction', 'none');\n column.totalsRowFormula = this.getFormula(column);\n }\n });\n }\n\n store() {\n // where the table needs to store table data, headers, footers in\n // the sheet...\n const assignStyle = (cell, style) => {\n if (style) {\n Object.keys(style).forEach(key => {\n cell[key] = style[key];\n });\n }\n };\n\n const {worksheet, table} = this;\n const {row, col} = table.tl;\n let count = 0;\n if (table.headerRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const {style, name} = column;\n const cell = r.getCell(col + j);\n cell.value = name;\n assignStyle(cell, style);\n });\n }\n table.rows.forEach(data => {\n const r = worksheet.getRow(row + count++);\n data.forEach((value, j) => {\n const cell = r.getCell(col + j);\n cell.value = value;\n\n assignStyle(cell, table.columns[j].style);\n });\n });\n\n if (table.totalsRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n if (j === 0) {\n cell.value = column.totalsRowLabel;\n } else {\n const formula = this.getFormula(column);\n if (formula) {\n cell.value = {\n formula: column.totalsRowFormula,\n result: column.totalsRowResult,\n };\n } else {\n cell.value = null;\n }\n }\n\n assignStyle(cell, column.style);\n });\n }\n }\n\n load(worksheet) {\n // where the table will read necessary features from a loaded sheet\n const {table} = this;\n const {row, col} = table.tl;\n let count = 0;\n if (table.headerRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n cell.value = column.name;\n });\n }\n table.rows.forEach(data => {\n const r = worksheet.getRow(row + count++);\n data.forEach((value, j) => {\n const cell = r.getCell(col + j);\n cell.value = value;\n });\n });\n\n if (table.totalsRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n if (j === 0) {\n cell.value = column.totalsRowLabel;\n } else {\n const formula = this.getFormula(column);\n if (formula) {\n cell.value = {\n formula: column.totalsRowFormula,\n result: column.totalsRowResult,\n };\n }\n }\n });\n }\n }\n\n get model() {\n return this.table;\n }\n\n set model(value) {\n this.table = value;\n }\n\n // ================================================================\n // TODO: Mutating methods\n cacheState() {\n if (!this._cache) {\n this._cache = {\n ref: this.ref,\n width: this.width,\n tableHeight: this.tableHeight,\n };\n }\n }\n\n commit() {\n // changes may have been made that might have on-sheet effects\n if (!this._cache) {\n return;\n }\n\n // check things are ok first\n this.validate();\n\n const ref = colCache.decodeAddress(this._cache.ref);\n if (this.ref !== this._cache.ref) {\n // wipe out whole table footprint at previous location\n for (let i = 0; i < this._cache.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = 0; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n } else {\n // clear out below table if it has shrunk\n for (let i = this.tableHeight; i < this._cache.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = 0; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n\n // clear out to right of table if it has lost columns\n for (let i = 0; i < this.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = this.width; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n }\n\n this.store();\n }\n\n addRow(values, rowNumber) {\n // Add a row of data, either insert at rowNumber or append\n this.cacheState();\n\n if (rowNumber === undefined) {\n this.table.rows.push(values);\n } else {\n this.table.rows.splice(rowNumber, 0, values);\n }\n }\n\n removeRows(rowIndex, count = 1) {\n // Remove a rows of data\n this.cacheState();\n this.table.rows.splice(rowIndex, count);\n }\n\n getColumn(colIndex) {\n const column = this.table.columns[colIndex];\n return new Column(this, column, colIndex);\n }\n\n addColumn(column, values, colIndex) {\n // Add a new column, including column defn and values\n // Inserts at colNumber or adds to the right\n this.cacheState();\n\n if (colIndex === undefined) {\n this.table.columns.push(column);\n this.table.rows.forEach((row, i) => {\n row.push(values[i]);\n });\n } else {\n this.table.columns.splice(colIndex, 0, column);\n this.table.rows.forEach((row, i) => {\n row.splice(colIndex, 0, values[i]);\n });\n }\n }\n\n removeColumns(colIndex, count = 1) {\n // Remove a column with data\n this.cacheState();\n\n this.table.columns.splice(colIndex, count);\n this.table.rows.forEach(row => {\n row.splice(colIndex, count);\n });\n }\n\n _assign(target, prop, value) {\n this.cacheState();\n target[prop] = value;\n }\n\n /* eslint-disable lines-between-class-members */\n get ref() {\n return this.table.ref;\n }\n set ref(value) {\n this._assign(this.table, 'ref', value);\n }\n\n get name() {\n return this.table.name;\n }\n set name(value) {\n this.table.name = value;\n }\n\n get displayName() {\n return this.table.displyName || this.table.name;\n }\n set displayNamename(value) {\n this.table.displayName = value;\n }\n\n get headerRow() {\n return this.table.headerRow;\n }\n set headerRow(value) {\n this._assign(this.table, 'headerRow', value);\n }\n\n get totalsRow() {\n return this.table.totalsRow;\n }\n set totalsRow(value) {\n this._assign(this.table, 'totalsRow', value);\n }\n\n get theme() {\n return this.table.style.name;\n }\n set theme(value) {\n this.table.style.name = value;\n }\n\n get showFirstColumn() {\n return this.table.style.showFirstColumn;\n }\n set showFirstColumn(value) {\n this.table.style.showFirstColumn = value;\n }\n\n get showLastColumn() {\n return this.table.style.showLastColumn;\n }\n set showLastColumn(value) {\n this.table.style.showLastColumn = value;\n }\n\n get showRowStripes() {\n return this.table.style.showRowStripes;\n }\n set showRowStripes(value) {\n this.table.style.showRowStripes = value;\n }\n\n get showColumnStripes() {\n return this.table.style.showColumnStripes;\n }\n set showColumnStripes(value) {\n this.table.style.showColumnStripes = value;\n }\n /* eslint-enable lines-between-class-members */\n}\n\nmodule.exports = Table;\n","'use strict';\n\nconst Worksheet = require('./worksheet');\nconst DefinedNames = require('./defined-names');\nconst XLSX = require('../xlsx/xlsx');\nconst CSV = require('../csv/csv');\n\n// Workbook requirements\n// Load and Save from file and stream\n// Access/Add/Delete individual worksheets\n// Manage String table, Hyperlink table, etc.\n// Manage scaffolding for contained objects to write to/read from\n\nclass Workbook {\n constructor() {\n this.category = '';\n this.company = '';\n this.created = new Date();\n this.description = '';\n this.keywords = '';\n this.manager = '';\n this.modified = this.created;\n this.properties = {};\n this.calcProperties = {};\n this._worksheets = [];\n this.subject = '';\n this.title = '';\n this.views = [];\n this.media = [];\n this._definedNames = new DefinedNames();\n }\n\n get xlsx() {\n if (!this._xlsx) this._xlsx = new XLSX(this);\n return this._xlsx;\n }\n\n get csv() {\n if (!this._csv) this._csv = new CSV(this);\n return this._csv;\n }\n\n get nextId() {\n // find the next unique spot to add worksheet\n for (let i = 1; i < this._worksheets.length; i++) {\n if (!this._worksheets[i]) {\n return i;\n }\n }\n return this._worksheets.length || 1;\n }\n\n addWorksheet(name, options) {\n const id = this.nextId;\n\n // if options is a color, call it tabColor (and signal deprecated message)\n if (options) {\n if (typeof options === 'string') {\n // eslint-disable-next-line no-console\n console.trace(\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: \"rbg value\" } }'\n );\n options = {\n properties: {\n tabColor: {argb: options},\n },\n };\n } else if (options.argb || options.theme || options.indexed) {\n // eslint-disable-next-line no-console\n console.trace(\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }'\n );\n options = {\n properties: {\n tabColor: options,\n },\n };\n }\n }\n\n const lastOrderNo = this._worksheets.reduce((acc, ws) => ((ws && ws.orderNo) > acc ? ws.orderNo : acc), 0);\n const worksheetOptions = Object.assign({}, options, {\n id,\n name,\n orderNo: lastOrderNo + 1,\n workbook: this,\n });\n\n const worksheet = new Worksheet(worksheetOptions);\n\n this._worksheets[id] = worksheet;\n return worksheet;\n }\n\n removeWorksheetEx(worksheet) {\n delete this._worksheets[worksheet.id];\n }\n\n removeWorksheet(id) {\n const worksheet = this.getWorksheet(id);\n if (worksheet) {\n worksheet.destroy();\n }\n }\n\n getWorksheet(id) {\n if (id === undefined) {\n return this._worksheets.find(Boolean);\n }\n if (typeof id === 'number') {\n return this._worksheets[id];\n }\n if (typeof id === 'string') {\n return this._worksheets.find(worksheet => worksheet && worksheet.name === id);\n }\n return undefined;\n }\n\n get worksheets() {\n // return a clone of _worksheets\n return this._worksheets\n .slice(1)\n .sort((a, b) => a.orderNo - b.orderNo)\n .filter(Boolean);\n }\n\n eachSheet(iteratee) {\n this.worksheets.forEach(sheet => {\n iteratee(sheet, sheet.id);\n });\n }\n\n get definedNames() {\n return this._definedNames;\n }\n\n clearThemes() {\n // Note: themes are not an exposed feature, meddle at your peril!\n this._themes = undefined;\n }\n\n addImage(image) {\n // TODO: validation?\n const id = this.media.length;\n this.media.push(Object.assign({}, image, {type: 'image'}));\n return id;\n }\n\n getImage(id) {\n return this.media[id];\n }\n\n get model() {\n return {\n creator: this.creator || 'Unknown',\n lastModifiedBy: this.lastModifiedBy || 'Unknown',\n lastPrinted: this.lastPrinted,\n created: this.created,\n modified: this.modified,\n properties: this.properties,\n worksheets: this.worksheets.map(worksheet => worksheet.model),\n sheets: this.worksheets.map(ws => ws.model).filter(Boolean),\n definedNames: this._definedNames.model,\n views: this.views,\n company: this.company,\n manager: this.manager,\n title: this.title,\n subject: this.subject,\n keywords: this.keywords,\n category: this.category,\n description: this.description,\n language: this.language,\n revision: this.revision,\n contentStatus: this.contentStatus,\n themes: this._themes,\n media: this.media,\n calcProperties: this.calcProperties,\n };\n }\n\n set model(value) {\n this.creator = value.creator;\n this.lastModifiedBy = value.lastModifiedBy;\n this.lastPrinted = value.lastPrinted;\n this.created = value.created;\n this.modified = value.modified;\n this.company = value.company;\n this.manager = value.manager;\n this.title = value.title;\n this.subject = value.subject;\n this.keywords = value.keywords;\n this.category = value.category;\n this.description = value.description;\n this.language = value.language;\n this.revision = value.revision;\n this.contentStatus = value.contentStatus;\n\n this.properties = value.properties;\n this.calcProperties = value.calcProperties;\n this._worksheets = [];\n value.worksheets.forEach(worksheetModel => {\n const {id, name, state} = worksheetModel;\n const orderNo = value.sheets && value.sheets.findIndex(ws => ws.id === id);\n const worksheet = (this._worksheets[id] = new Worksheet({\n id,\n name,\n orderNo,\n state,\n workbook: this,\n }));\n worksheet.model = worksheetModel;\n });\n\n this._definedNames.model = value.definedNames;\n this.views = value.views;\n this._themes = value.themes;\n this.media = value.media || [];\n }\n}\n\nmodule.exports = Workbook;\n","const _ = require('../utils/under-dash');\n\nconst colCache = require('../utils/col-cache');\nconst Range = require('./range');\nconst Row = require('./row');\nconst Column = require('./column');\nconst Enums = require('./enums');\nconst Image = require('./image');\nconst Table = require('./table');\nconst DataValidations = require('./data-validations');\nconst Encryptor = require('../utils/encryptor');\nconst {copyStyle} = require('../utils/copy-style');\n\n// Worksheet requirements\n// Operate as sheet inside workbook or standalone\n// Load and Save from file and stream\n// Access/Add/Delete individual cells\n// Manage column widths and row heights\n\nclass Worksheet {\n constructor(options) {\n options = options || {};\n this._workbook = options.workbook;\n\n // in a workbook, each sheet will have a number\n this.id = options.id;\n this.orderNo = options.orderNo;\n\n // and a name\n this.name = options.name;\n\n // add a state\n this.state = options.state || 'visible';\n\n // rows allows access organised by row. Sparse array of arrays indexed by row-1, col\n // Note: _rows is zero based. Must subtract 1 to go from cell.row to index\n this._rows = [];\n\n // column definitions\n this._columns = null;\n\n // column keys (addRow convenience): key ==> this._collumns index\n this._keys = {};\n\n // keep record of all merges\n this._merges = {};\n\n // record of all row and column pageBreaks\n this.rowBreaks = [];\n\n // for tabColor, default row height, outline levels, etc\n this.properties = Object.assign(\n {},\n {\n defaultRowHeight: 15,\n dyDescent: 55,\n outlineLevelCol: 0,\n outlineLevelRow: 0,\n },\n options.properties\n );\n\n // for all things printing\n this.pageSetup = Object.assign(\n {},\n {\n margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3},\n orientation: 'portrait',\n horizontalDpi: 4294967295,\n verticalDpi: 4294967295,\n fitToPage: !!(\n options.pageSetup &&\n (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) &&\n !options.pageSetup.scale\n ),\n pageOrder: 'downThenOver',\n blackAndWhite: false,\n draft: false,\n cellComments: 'None',\n errors: 'displayed',\n scale: 100,\n fitToWidth: 1,\n fitToHeight: 1,\n paperSize: undefined,\n showRowColHeaders: false,\n showGridLines: false,\n firstPageNumber: undefined,\n horizontalCentered: false,\n verticalCentered: false,\n rowBreaks: null,\n colBreaks: null,\n },\n options.pageSetup\n );\n\n this.headerFooter = Object.assign(\n {},\n {\n differentFirst: false,\n differentOddEven: false,\n oddHeader: null,\n oddFooter: null,\n evenHeader: null,\n evenFooter: null,\n firstHeader: null,\n firstFooter: null,\n },\n options.headerFooter\n );\n\n this.dataValidations = new DataValidations();\n\n // for freezepanes, split, zoom, gridlines, etc\n this.views = options.views || [];\n\n this.autoFilter = options.autoFilter || null;\n\n // for images, etc\n this._media = [];\n\n // worksheet protection\n this.sheetProtection = null;\n\n // for tables\n this.tables = {};\n\n this.conditionalFormattings = [];\n }\n\n get name() {\n return this._name;\n }\n\n set name(name) {\n if (name === undefined) {\n name = `sheet${this.id}`;\n }\n\n if (this._name === name) return;\n\n if (typeof name !== 'string') {\n throw new Error('The name has to be a string.');\n }\n\n if (name === '') {\n throw new Error('The name can\\'t be empty.');\n }\n\n if (name === 'History') {\n throw new Error('The name \"History\" is protected. Please use a different name.');\n }\n\n // Illegal character in worksheet name: asterisk (*), question mark (?),\n // colon (:), forward slash (/ \\), or bracket ([])\n if (/[*?:/\\\\[\\]]/.test(name)) {\n throw new Error(`Worksheet name ${name} cannot include any of the following characters: * ? : \\\\ / [ ]`);\n }\n\n if (/(^')|('$)/.test(name)) {\n throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${name}`);\n }\n\n if (name && name.length > 31) {\n // eslint-disable-next-line no-console\n console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`);\n name = name.substring(0, 31);\n }\n\n if (this._workbook._worksheets.find(ws => ws && ws.name.toLowerCase() === name.toLowerCase())) {\n throw new Error(`Worksheet name already exists: ${name}`);\n }\n\n this._name = name;\n }\n\n get workbook() {\n return this._workbook;\n }\n\n // when you're done with this worksheet, call this to remove from workbook\n destroy() {\n this._workbook.removeWorksheetEx(this);\n }\n\n // Get the bounding range of the cells in this worksheet\n get dimensions() {\n const dimensions = new Range();\n this._rows.forEach(row => {\n if (row) {\n const rowDims = row.dimensions;\n if (rowDims) {\n dimensions.expand(row.number, rowDims.min, row.number, rowDims.max);\n }\n }\n });\n return dimensions;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\n }\n\n // set the columns from an array of column definitions.\n // Note: any headers defined will overwrite existing values.\n set columns(value) {\n // calculate max header row count\n this._headerRowCount = value.reduce((pv, cv) => {\n const headerCount = (cv.header && 1) || (cv.headers && cv.headers.length) || 0;\n return Math.max(pv, headerCount);\n }, 0);\n\n // construct Column objects\n let count = 1;\n const columns = (this._columns = []);\n value.forEach(defn => {\n const column = new Column(this, count++, false);\n columns.push(column);\n column.defn = defn;\n });\n }\n\n getColumnKey(key) {\n return this._keys[key];\n }\n\n setColumnKey(key, value) {\n this._keys[key] = value;\n }\n\n deleteColumnKey(key) {\n delete this._keys[key];\n }\n\n eachColumnKey(f) {\n _.each(this._keys, f);\n }\n\n // get a single column by col number. If it doesn't exist, create it and any gaps before it\n getColumn(c) {\n if (typeof c === 'string') {\n // if it matches a key'd column, return that\n const col = this._keys[c];\n if (col) return col;\n\n // otherwise, assume letter\n c = colCache.l2n(c);\n }\n if (!this._columns) {\n this._columns = [];\n }\n if (c > this._columns.length) {\n let n = this._columns.length + 1;\n while (n <= c) {\n this._columns.push(new Column(this, n++));\n }\n }\n return this._columns[c - 1];\n }\n\n spliceColumns(start, count, ...inserts) {\n const rows = this._rows;\n const nRows = rows.length;\n if (inserts.length > 0) {\n // must iterate over all rows whether they exist yet or not\n for (let i = 0; i < nRows; i++) {\n const rowArguments = [start, count];\n // eslint-disable-next-line no-loop-func\n inserts.forEach(insert => {\n rowArguments.push(insert[i] || null);\n });\n const row = this.getRow(i + 1);\n // eslint-disable-next-line prefer-spread\n row.splice.apply(row, rowArguments);\n }\n } else {\n // nothing to insert, so just splice all rows\n this._rows.forEach(r => {\n if (r) {\n r.splice(start, count);\n }\n });\n }\n\n // splice column definitions\n const nExpand = inserts.length - count;\n const nKeep = start + count;\n const nEnd = this._columns.length;\n if (nExpand < 0) {\n for (let i = start + inserts.length; i <= nEnd; i++) {\n this.getColumn(i).defn = this.getColumn(i - nExpand).defn;\n }\n } else if (nExpand > 0) {\n for (let i = nEnd; i >= nKeep; i--) {\n this.getColumn(i + nExpand).defn = this.getColumn(i).defn;\n }\n }\n for (let i = start; i < start + inserts.length; i++) {\n this.getColumn(i).defn = null;\n }\n\n // account for defined names\n this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length);\n }\n\n get lastColumn() {\n return this.getColumn(this.columnCount);\n }\n\n get columnCount() {\n let maxCount = 0;\n this.eachRow(row => {\n maxCount = Math.max(maxCount, row.cellCount);\n });\n return maxCount;\n }\n\n get actualColumnCount() {\n // performance nightmare - for each row, counts all the columns used\n const counts = [];\n let count = 0;\n this.eachRow(row => {\n row.eachCell(({col}) => {\n if (!counts[col]) {\n counts[col] = true;\n count++;\n }\n });\n });\n return count;\n }\n\n // =========================================================================\n // Rows\n\n _commitRow() {\n // nop - allows streaming reader to fill a document\n }\n\n get _lastRowNumber() {\n // need to cope with results of splice\n const rows = this._rows;\n let n = rows.length;\n while (n > 0 && rows[n - 1] === undefined) {\n n--;\n }\n return n;\n }\n\n get _nextRow() {\n return this._lastRowNumber + 1;\n }\n\n get lastRow() {\n if (this._rows.length) {\n return this._rows[this._rows.length - 1];\n }\n return undefined;\n }\n\n // find a row (if exists) by row number\n findRow(r) {\n return this._rows[r - 1];\n }\n\n // find multiple rows (if exists) by row number\n findRows(start, length) {\n return this._rows.slice(start - 1, start - 1 + length);\n }\n\n get rowCount() {\n return this._lastRowNumber;\n }\n\n get actualRowCount() {\n // counts actual rows that have actual data\n let count = 0;\n this.eachRow(() => {\n count++;\n });\n return count;\n }\n\n // get a row by row number.\n getRow(r) {\n let row = this._rows[r - 1];\n if (!row) {\n row = this._rows[r - 1] = new Row(this, r);\n }\n return row;\n }\n\n // get multiple rows by row number.\n getRows(start, length) {\n if (length < 1) return undefined;\n const rows = [];\n for (let i = start; i < start + length; i++) {\n rows.push(this.getRow(i));\n }\n return rows;\n }\n\n addRow(value, style = 'n') {\n const rowNo = this._nextRow;\n const row = this.getRow(rowNo);\n row.values = value;\n this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n');\n return row;\n }\n\n addRows(value, style = 'n') {\n const rows = [];\n value.forEach(row => {\n rows.push(this.addRow(row, style));\n });\n return rows;\n }\n\n insertRow(pos, value, style = 'n') {\n this.spliceRows(pos, 0, value);\n this._setStyleOption(pos, style);\n return this.getRow(pos);\n }\n\n insertRows(pos, values, style = 'n') {\n this.spliceRows(pos, 0, ...values);\n if (style !== 'n') {\n // copy over the styles\n for (let i = 0; i < values.length; i++) {\n if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) {\n this._copyStyle(values.length + pos + i, pos + i, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos + i, style[1] === '+');\n }\n }\n }\n return this.getRows(pos, values.length);\n }\n\n // set row at position to same style as of either pervious row (option 'i') or next row (option 'o')\n _setStyleOption(pos, style = 'n') {\n if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) {\n this._copyStyle(pos + 1, pos, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos, style[1] === '+');\n }\n }\n\n _copyStyle(src, dest, styleEmpty = false) {\n const rSrc = this.getRow(src);\n const rDst = this.getRow(dest);\n rDst.style = copyStyle(rSrc.style);\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: styleEmpty}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = copyStyle(cell.style);\n });\n rDst.height = rSrc.height;\n }\n\n duplicateRow(rowNum, count, insert = false) {\n // create count duplicates of rowNum\n // either inserting new or overwriting existing rows\n\n const rSrc = this._rows[rowNum - 1];\n const inserts = new Array(count).fill(rSrc.values);\n this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts);\n\n // now copy styles...\n for (let i = 0; i < count; i++) {\n const rDst = this._rows[rowNum + i];\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n }\n }\n\n spliceRows(start, count, ...inserts) {\n // same problem as row.splice, except worse.\n const nKeep = start + count;\n const nInserts = inserts.length;\n const nExpand = nInserts - count;\n const nEnd = this._rows.length;\n let i;\n let rSrc;\n if (nExpand < 0) {\n // remove rows\n if (start === nEnd) {\n this._rows[nEnd - 1] = undefined;\n }\n for (i = nKeep; i <= nEnd; i++) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n this._rows[i - 1] = undefined;\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n\n // remerge cells accounting for insert offset\n if (cell._value.constructor.name === 'MergeValue') {\n const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber);\n const prevMaster = cell._value._master;\n const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number);\n cellToBeMerged.merge(newMaster);\n }\n });\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now copy over the new values\n for (i = 0; i < nInserts; i++) {\n const rDst = this.getRow(start + i);\n rDst.style = {};\n rDst.values = inserts[i];\n }\n\n // account for defined names\n this.workbook.definedNames.spliceRows(this.name, start, count, nInserts);\n }\n\n // iterate over every row in the worksheet, including maybe empty rows\n eachRow(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = undefined;\n }\n if (options && options.includeEmpty) {\n const n = this._rows.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getRow(i), i);\n }\n } else {\n this._rows.forEach(row => {\n if (row && row.hasValues) {\n iteratee(row, row.number);\n }\n });\n }\n }\n\n // return all rows as sparse array\n getSheetValues() {\n const rows = [];\n this._rows.forEach(row => {\n if (row) {\n rows[row.number] = row.values;\n }\n });\n return rows;\n }\n\n // =========================================================================\n // Cells\n\n // returns the cell at [r,c] or address given by r. If not found, return undefined\n findCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this._rows[address.row - 1];\n return row ? row.findCell(address.col) : undefined;\n }\n\n // return the cell at [r,c] or address given by r. If not found, create a new one.\n getCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this.getRow(address.row);\n return row.getCellEx(address);\n }\n\n // =========================================================================\n // Merge\n\n // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell\n mergeCells(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions);\n }\n\n mergeCellsWithoutStyle(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions, true);\n }\n\n _mergeCellsInternal(dimensions, ignoreStyle) {\n // check cells aren't already merged\n _.each(this._merges, merge => {\n if (merge.intersects(dimensions)) {\n throw new Error('Cannot merge already merged cells');\n }\n });\n\n // apply merge\n const master = this.getCell(dimensions.top, dimensions.left);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n // merge all but the master cell\n if (i > dimensions.top || j > dimensions.left) {\n this.getCell(i, j).merge(master, ignoreStyle);\n }\n }\n }\n\n // index merge\n this._merges[master.address] = dimensions;\n }\n\n _unMergeMaster(master) {\n // master is always top left of a rectangle\n const merge = this._merges[master.address];\n if (merge) {\n for (let i = merge.top; i <= merge.bottom; i++) {\n for (let j = merge.left; j <= merge.right; j++) {\n this.getCell(i, j).unmerge();\n }\n }\n delete this._merges[master.address];\n }\n }\n\n get hasMerges() {\n // return true if this._merges has a merge object\n return _.some(this._merges, Boolean);\n }\n\n // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge,\n // un-merge the group. Note this function can affect multiple merges and merge-blocks are\n // atomic - either they're all merged or all un-merged.\n unMergeCells(...cells) {\n const dimensions = new Range(cells);\n\n // find any cells in that range and unmerge them\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = this.findCell(i, j);\n if (cell) {\n if (cell.type === Enums.ValueType.Merge) {\n // this cell merges to another master\n this._unMergeMaster(cell.master);\n } else if (this._merges[cell.address]) {\n // this cell is a master\n this._unMergeMaster(cell);\n }\n }\n }\n }\n }\n\n // ===========================================================================\n // Shared/Array Formula\n fillFormula(range, formula, results, shareType = 'shared') {\n // Define formula for top-left cell and share to rest\n const decoded = colCache.decode(range);\n const {top, left, bottom, right} = decoded;\n const width = right - left + 1;\n const masterAddress = colCache.encodeAddress(top, left);\n const isShared = shareType === 'shared';\n\n // work out result accessor\n let getResult;\n if (typeof results === 'function') {\n getResult = results;\n } else if (Array.isArray(results)) {\n if (Array.isArray(results[0])) {\n getResult = (row, col) => results[row - top][col - left];\n } else {\n // eslint-disable-next-line no-mixed-operators\n getResult = (row, col) => results[(row - top) * width + (col - left)];\n }\n } else {\n getResult = () => undefined;\n }\n let first = true;\n for (let r = top; r <= bottom; r++) {\n for (let c = left; c <= right; c++) {\n if (first) {\n this.getCell(r, c).value = {\n shareType,\n formula,\n ref: range,\n result: getResult(r, c),\n };\n first = false;\n } else {\n this.getCell(r, c).value = isShared\n ? {\n sharedFormula: masterAddress,\n result: getResult(r, c),\n }\n : getResult(r, c);\n }\n }\n }\n }\n\n // =========================================================================\n // Images\n addImage(imageId, range) {\n const model = {\n type: 'image',\n imageId,\n range,\n };\n this._media.push(new Image(this, model));\n }\n\n getImages() {\n return this._media.filter(m => m.type === 'image');\n }\n\n addBackgroundImage(imageId) {\n const model = {\n type: 'background',\n imageId,\n };\n this._media.push(new Image(this, model));\n }\n\n getBackgroundImageId() {\n const image = this._media.find(m => m.type === 'background');\n return image && image.imageId;\n }\n\n // =========================================================================\n // Worksheet Protection\n protect(password, options) {\n // TODO: make this function truly async\n // perhaps marshal to worker thread or something\n return new Promise(resolve => {\n this.sheetProtection = {\n sheet: true,\n };\n if (options && 'spinCount' in options) {\n // force spinCount to be integer >= 0\n options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;\n }\n if (password) {\n this.sheetProtection.algorithmName = 'SHA-512';\n this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');\n this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount\n this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(\n password,\n 'SHA512',\n this.sheetProtection.saltValue,\n this.sheetProtection.spinCount\n );\n }\n if (options) {\n this.sheetProtection = Object.assign(this.sheetProtection, options);\n if (!password && 'spinCount' in options) {\n delete this.sheetProtection.spinCount;\n }\n }\n resolve();\n });\n }\n\n unprotect() {\n this.sheetProtection = null;\n }\n\n // =========================================================================\n // Tables\n addTable(model) {\n const table = new Table(this, model);\n this.tables[model.name] = table;\n return table;\n }\n\n getTable(name) {\n return this.tables[name];\n }\n\n removeTable(name) {\n delete this.tables[name];\n }\n\n getTables() {\n return Object.values(this.tables);\n }\n\n // ===========================================================================\n // Conditional Formatting\n addConditionalFormatting(cf) {\n this.conditionalFormattings.push(cf);\n }\n\n removeConditionalFormatting(filter) {\n if (typeof filter === 'number') {\n this.conditionalFormattings.splice(filter, 1);\n } else if (filter instanceof Function) {\n this.conditionalFormattings = this.conditionalFormattings.filter(filter);\n } else {\n this.conditionalFormattings = [];\n }\n }\n\n // ===========================================================================\n // Deprecated\n get tabColor() {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n return this.properties.tabColor;\n }\n\n set tabColor(value) {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n this.properties.tabColor = value;\n }\n\n // ===========================================================================\n // Model\n\n get model() {\n const model = {\n id: this.id,\n name: this.name,\n dataValidations: this.dataValidations.model,\n properties: this.properties,\n state: this.state,\n pageSetup: this.pageSetup,\n headerFooter: this.headerFooter,\n rowBreaks: this.rowBreaks,\n views: this.views,\n autoFilter: this.autoFilter,\n media: this._media.map(medium => medium.model),\n sheetProtection: this.sheetProtection,\n tables: Object.values(this.tables).map(table => table.model),\n conditionalFormattings: this.conditionalFormattings,\n };\n\n // =================================================\n // columns\n model.cols = Column.toModel(this.columns);\n\n // ==========================================================\n // Rows\n const rows = (model.rows = []);\n const dimensions = (model.dimensions = new Range());\n this._rows.forEach(row => {\n const rowModel = row && row.model;\n if (rowModel) {\n dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max);\n rows.push(rowModel);\n }\n });\n\n // ==========================================================\n // Merges\n model.merges = [];\n _.each(this._merges, merge => {\n model.merges.push(merge.range);\n });\n\n return model;\n }\n\n _parseRows(model) {\n this._rows = [];\n model.rows.forEach(rowModel => {\n const row = new Row(this, rowModel.number);\n this._rows[row.number - 1] = row;\n row.model = rowModel;\n });\n }\n\n _parseMergeCells(model) {\n _.each(model.mergeCells, merge => {\n // Do not merge styles when importing an Excel file\n // since each cell may have different styles intentionally.\n this.mergeCellsWithoutStyle(merge);\n });\n }\n\n set model(value) {\n this.name = value.name;\n this._columns = Column.fromModel(this, value.cols);\n this._parseRows(value);\n\n this._parseMergeCells(value);\n this.dataValidations = new DataValidations(value.dataValidations);\n this.properties = value.properties;\n this.pageSetup = value.pageSetup;\n this.headerFooter = value.headerFooter;\n this.views = value.views;\n this.autoFilter = value.autoFilter;\n this._media = value.media.map(medium => new Image(this, medium));\n this.sheetProtection = value.sheetProtection;\n this.tables = value.tables.reduce((tables, table) => {\n const t = new Table();\n t.model = table;\n tables[table.name] = t;\n return tables;\n }, {});\n this.conditionalFormattings = value.conditionalFormattings;\n }\n}\n\nmodule.exports = Worksheet;\n","// this bundle is built without polyfill leaving apps the freedom to add their own\nconst ExcelJS = {\n Workbook: require('./doc/workbook'),\n};\n\n// Object.assign mono-fill\nconst Enums = require('./doc/enums');\n\nObject.keys(Enums).forEach(key => {\n ExcelJS[key] = Enums[key];\n});\n\nmodule.exports = ExcelJS;\n","// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');\n\nfunction bufferToString(chunk) {\n if (typeof chunk === 'string') {\n return chunk;\n }\n if (textDecoder) {\n return textDecoder.decode(chunk);\n }\n return chunk.toString();\n}\n\nexports.bufferToString = bufferToString;\n","// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8');\nconst {Buffer} = require('buffer');\n\nfunction stringToBuffer(str) {\n if (typeof str !== 'string') {\n return str;\n }\n if (textEncoder) {\n return Buffer.from(textEncoder.encode(str).buffer);\n }\n return Buffer.from(str);\n}\n\nexports.stringToBuffer = stringToBuffer;\n","const _ = require('./under-dash');\nconst colCache = require('./col-cache');\n\nclass CellMatrix {\n constructor(template) {\n this.template = template;\n this.sheets = {};\n }\n\n addCell(addressStr) {\n this.addCellEx(colCache.decodeEx(addressStr));\n }\n\n getCell(addressStr) {\n return this.findCellEx(colCache.decodeEx(addressStr), true);\n }\n\n findCell(addressStr) {\n return this.findCellEx(colCache.decodeEx(addressStr), false);\n }\n\n findCellAt(sheetName, rowNumber, colNumber) {\n const sheet = this.sheets[sheetName];\n const row = sheet && sheet[rowNumber];\n return row && row[colNumber];\n }\n\n addCellEx(address) {\n if (address.top) {\n for (let row = address.top; row <= address.bottom; row++) {\n for (let col = address.left; col <= address.right; col++) {\n this.getCellAt(address.sheetName, row, col);\n }\n }\n } else {\n this.findCellEx(address, true);\n }\n }\n\n getCellEx(address) {\n return this.findCellEx(address, true);\n }\n\n findCellEx(address, create) {\n const sheet = this.findSheet(address, create);\n const row = this.findSheetRow(sheet, address, create);\n return this.findRowCell(row, address, create);\n }\n\n getCellAt(sheetName, rowNumber, colNumber) {\n const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []);\n const row = sheet[rowNumber] || (sheet[rowNumber] = []);\n const cell =\n row[colNumber] ||\n (row[colNumber] = {\n sheetName,\n address: colCache.n2l(colNumber) + rowNumber,\n row: rowNumber,\n col: colNumber,\n });\n return cell;\n }\n\n removeCellEx(address) {\n const sheet = this.findSheet(address);\n if (!sheet) {\n return;\n }\n const row = this.findSheetRow(sheet, address);\n if (!row) {\n return;\n }\n delete row[address.col];\n }\n\n forEachInSheet(sheetName, callback) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n sheet.forEach((row, rowNumber) => {\n if (row) {\n row.forEach((cell, colNumber) => {\n if (cell) {\n callback(cell, rowNumber, colNumber);\n }\n });\n }\n });\n }\n }\n\n forEach(callback) {\n _.each(this.sheets, (sheet, sheetName) => {\n this.forEachInSheet(sheetName, callback);\n });\n }\n\n map(callback) {\n const results = [];\n this.forEach(cell => {\n results.push(callback(cell));\n });\n return results;\n }\n\n findSheet(address, create) {\n const name = address.sheetName;\n if (this.sheets[name]) {\n return this.sheets[name];\n }\n if (create) {\n return (this.sheets[name] = []);\n }\n return undefined;\n }\n\n findSheetRow(sheet, address, create) {\n const {row} = address;\n if (sheet && sheet[row]) {\n return sheet[row];\n }\n if (create) {\n return (sheet[row] = []);\n }\n return undefined;\n }\n\n findRowCell(row, address, create) {\n const {col} = address;\n if (row && row[col]) {\n return row[col];\n }\n if (create) {\n return (row[col] = this.template\n ? Object.assign(address, JSON.parse(JSON.stringify(this.template)))\n : address);\n }\n return undefined;\n }\n\n spliceRows(sheetName, start, numDelete, numInsert) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n const inserts = [];\n for (let i = 0; i < numInsert; i++) {\n inserts.push([]);\n }\n sheet.splice(start, numDelete, ...inserts);\n }\n }\n\n spliceColumns(sheetName, start, numDelete, numInsert) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n const inserts = [];\n for (let i = 0; i < numInsert; i++) {\n inserts.push(null);\n }\n _.each(sheet, row => {\n row.splice(start, numDelete, ...inserts);\n });\n }\n }\n}\n\nmodule.exports = CellMatrix;\n","const addressRegex = /^[A-Z]+\\d+$/;\n// =========================================================================\n// Column Letter to Number conversion\nconst colCache = {\n _dictionary: [\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'F',\n 'G',\n 'H',\n 'I',\n 'J',\n 'K',\n 'L',\n 'M',\n 'N',\n 'O',\n 'P',\n 'Q',\n 'R',\n 'S',\n 'T',\n 'U',\n 'V',\n 'W',\n 'X',\n 'Y',\n 'Z',\n ],\n _l2nFill: 0,\n _l2n: {},\n _n2l: [],\n _level(n) {\n if (n <= 26) {\n return 1;\n }\n if (n <= 26 * 26) {\n return 2;\n }\n return 3;\n },\n _fill(level) {\n let c;\n let v;\n let l1;\n let l2;\n let l3;\n let n = 1;\n if (level >= 4) {\n throw new Error('Out of bounds. Excel supports columns from 1 to 16384');\n }\n if (this._l2nFill < 1 && level >= 1) {\n while (n <= 26) {\n c = this._dictionary[n - 1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 1;\n }\n if (this._l2nFill < 2 && level >= 2) {\n n = 27;\n while (n <= 26 + (26 * 26)) {\n v = n - (26 + 1);\n l1 = v % 26;\n l2 = Math.floor(v / 26);\n c = this._dictionary[l2] + this._dictionary[l1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 2;\n }\n if (this._l2nFill < 3 && level >= 3) {\n n = 26 + (26 * 26) + 1;\n while (n <= 16384) {\n v = n - ((26 * 26) + 26 + 1);\n l1 = v % 26;\n l2 = Math.floor(v / 26) % 26;\n l3 = Math.floor(v / (26 * 26));\n c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 3;\n }\n },\n l2n(l) {\n if (!this._l2n[l]) {\n this._fill(l.length);\n }\n if (!this._l2n[l]) {\n throw new Error(`Out of bounds. Invalid column letter: ${l}`);\n }\n return this._l2n[l];\n },\n n2l(n) {\n if (n < 1 || n > 16384) {\n throw new Error(`${n} is out of bounds. Excel supports columns from 1 to 16384`);\n }\n if (!this._n2l[n]) {\n this._fill(this._level(n));\n }\n return this._n2l[n];\n },\n\n // =========================================================================\n // Address processing\n _hash: {},\n\n // check if value looks like an address\n validateAddress(value) {\n if (!addressRegex.test(value)) {\n throw new Error(`Invalid Address: ${value}`);\n }\n return true;\n },\n\n // convert address string into structure\n decodeAddress(value) {\n const addr = value.length < 5 && this._hash[value];\n if (addr) {\n return addr;\n }\n let hasCol = false;\n let col = '';\n let colNumber = 0;\n let hasRow = false;\n let row = '';\n let rowNumber = 0;\n for (let i = 0, char; i < value.length; i++) {\n char = value.charCodeAt(i);\n // col should before row\n if (!hasRow && char >= 65 && char <= 90) {\n // 65 = 'A'.charCodeAt(0)\n // 90 = 'Z'.charCodeAt(0)\n hasCol = true;\n col += value[i];\n // colNumber starts from 1\n colNumber = (colNumber * 26) + char - 64;\n } else if (char >= 48 && char <= 57) {\n // 48 = '0'.charCodeAt(0)\n // 57 = '9'.charCodeAt(0)\n hasRow = true;\n row += value[i];\n // rowNumber starts from 0\n rowNumber = (rowNumber * 10) + char - 48;\n } else if (hasRow && hasCol && char !== 36) {\n // 36 = '$'.charCodeAt(0)\n break;\n }\n }\n if (!hasCol) {\n colNumber = undefined;\n } else if (colNumber > 16384) {\n throw new Error(`Out of bounds. Invalid column letter: ${col}`);\n }\n if (!hasRow) {\n rowNumber = undefined;\n }\n\n // in case $row$col\n value = col + row;\n\n const address = {\n address: value,\n col: colNumber,\n row: rowNumber,\n $col$row: `$${col}$${row}`,\n };\n\n // mem fix - cache only the tl 100x100 square\n if (colNumber <= 100 && rowNumber <= 100) {\n this._hash[value] = address;\n this._hash[address.$col$row] = address;\n }\n\n return address;\n },\n\n // convert r,c into structure (if only 1 arg, assume r is address string)\n getAddress(r, c) {\n if (c) {\n const address = this.n2l(c) + r;\n return this.decodeAddress(address);\n }\n return this.decodeAddress(r);\n },\n\n // convert [address], [tl:br] into address structures\n decode(value) {\n const parts = value.split(':');\n if (parts.length === 2) {\n const tl = this.decodeAddress(parts[0]);\n const br = this.decodeAddress(parts[1]);\n const result = {\n top: Math.min(tl.row, br.row),\n left: Math.min(tl.col, br.col),\n bottom: Math.max(tl.row, br.row),\n right: Math.max(tl.col, br.col),\n };\n // reconstruct tl, br and dimensions\n result.tl = this.n2l(result.left) + result.top;\n result.br = this.n2l(result.right) + result.bottom;\n result.dimensions = `${result.tl}:${result.br}`;\n return result;\n }\n return this.decodeAddress(value);\n },\n\n // convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures\n decodeEx(value) {\n const groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/);\n\n const sheetName = groups[1] || groups[2]; // Qouted and unqouted groups\n const reference = groups[3]; // Remaining address\n\n const parts = reference.split(':');\n if (parts.length > 1) {\n let tl = this.decodeAddress(parts[0]);\n let br = this.decodeAddress(parts[1]);\n const top = Math.min(tl.row, br.row);\n const left = Math.min(tl.col, br.col);\n const bottom = Math.max(tl.row, br.row);\n const right = Math.max(tl.col, br.col);\n\n tl = this.n2l(left) + top;\n br = this.n2l(right) + bottom;\n\n return {\n top,\n left,\n bottom,\n right,\n sheetName,\n tl: {address: tl, col: left, row: top, $col$row: `$${this.n2l(left)}$${top}`, sheetName},\n br: {\n address: br,\n col: right,\n row: bottom,\n $col$row: `$${this.n2l(right)}$${bottom}`,\n sheetName,\n },\n dimensions: `${tl}:${br}`,\n };\n }\n if (reference.startsWith('#')) {\n return sheetName ? {sheetName, error: reference} : {error: reference};\n }\n\n const address = this.decodeAddress(reference);\n return sheetName ? {sheetName, ...address} : address;\n },\n\n // convert row,col into address string\n encodeAddress(row, col) {\n return colCache.n2l(col) + row;\n },\n\n // convert row,col into string address or t,l,b,r into range\n encode() {\n switch (arguments.length) {\n case 2:\n return colCache.encodeAddress(arguments[0], arguments[1]);\n case 4:\n return `${colCache.encodeAddress(arguments[0], arguments[1])}:${colCache.encodeAddress(\n arguments[2],\n arguments[3]\n )}`;\n default:\n throw new Error('Can only encode with 2 or 4 arguments');\n }\n },\n\n // return true if address is contained within range\n inRange(range, address) {\n const [left, top, , right, bottom] = range;\n const [col, row] = address;\n return col >= left && col <= right && row >= top && row <= bottom;\n },\n};\n\nmodule.exports = colCache;\n","const oneDepthCopy = (obj, nestKeys) => ({\n ...obj,\n ...nestKeys.reduce((memo, key) => {\n if (obj[key]) memo[key] = {...obj[key]};\n return memo;\n }, {}),\n});\n\nconst setIfExists = (src, dst, key, nestKeys = []) => {\n if (src[key]) dst[key] = oneDepthCopy(src[key], nestKeys);\n};\n\nconst isEmptyObj = obj => Object.keys(obj).length === 0;\n\nconst copyStyle = style => {\n if (!style) return style;\n if (isEmptyObj(style)) return {};\n\n const copied = {...style};\n\n setIfExists(style, copied, 'font', ['color']);\n setIfExists(style, copied, 'alignment');\n setIfExists(style, copied, 'protection');\n if (style.border) {\n setIfExists(style, copied, 'border');\n setIfExists(style.border, copied.border, 'top', ['color']);\n setIfExists(style.border, copied.border, 'left', ['color']);\n setIfExists(style.border, copied.border, 'bottom', ['color']);\n setIfExists(style.border, copied.border, 'right', ['color']);\n setIfExists(style.border, copied.border, 'diagonal', ['color']);\n }\n\n if (style.fill) {\n setIfExists(style, copied, 'fill', ['fgColor', 'bgColor', 'center']);\n if (style.fill.stops) {\n copied.fill.stops = style.fill.stops.map(s => oneDepthCopy(s, ['color']));\n }\n }\n\n return copied;\n};\n\nexports.copyStyle = copyStyle;\n","'use strict';\n\nconst crypto = require('crypto');\n\nconst Encryptor = {\n /**\n * Calculate a hash of the concatenated buffers with the given algorithm.\n * @param {string} algorithm - The hash algorithm.\n * @returns {Buffer} The hash\n */\n hash(algorithm, ...buffers) {\n const hash = crypto.createHash(algorithm);\n hash.update(Buffer.concat(buffers));\n return hash.digest();\n },\n /**\n * Convert a password into an encryption key\n * @param {string} password - The password\n * @param {string} hashAlgorithm - The hash algoritm\n * @param {string} saltValue - The salt value\n * @param {number} spinCount - The spin count\n * @param {number} keyBits - The length of the key in bits\n * @param {Buffer} blockKey - The block key\n * @returns {Buffer} The encryption key\n */\n convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) {\n hashAlgorithm = hashAlgorithm.toLowerCase();\n const hashes = crypto.getHashes();\n if (hashes.indexOf(hashAlgorithm) < 0) {\n throw new Error(`Hash algorithm '${hashAlgorithm}' not supported!`);\n }\n\n // Password must be in unicode buffer\n const passwordBuffer = Buffer.from(password, 'utf16le');\n // Generate the initial hash\n let key = this.hash(hashAlgorithm, Buffer.from(saltValue, 'base64'), passwordBuffer);\n // Now regenerate until spin count\n for (let i = 0; i < spinCount; i++) {\n const iterator = Buffer.alloc(4);\n // this is the 'special' element of Excel password hashing\n // that stops us from using crypto.pbkdf2()\n iterator.writeUInt32LE(i, 0);\n key = this.hash(hashAlgorithm, key, iterator);\n }\n return key.toString('base64');\n },\n /**\n * Generates cryptographically strong pseudo-random data.\n * @param size The size argument is a number indicating the number of bytes to generate.\n */\n randomBytes(size) {\n return crypto.randomBytes(size);\n },\n};\nmodule.exports = Encryptor;\n","const {SaxesParser} = require('saxes');\nconst {PassThrough} = require('readable-stream');\nconst {bufferToString} = require('./browser-buffer-decode');\n\nmodule.exports = async function* (iterable) {\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old streams\n if (iterable.pipe && !iterable[Symbol.asyncIterator]) {\n iterable = iterable.pipe(new PassThrough());\n }\n const saxesParser = new SaxesParser();\n let error;\n saxesParser.on('error', err => {\n error = err;\n });\n let events = [];\n saxesParser.on('opentag', value => events.push({eventType: 'opentag', value}));\n saxesParser.on('text', value => events.push({eventType: 'text', value}));\n saxesParser.on('closetag', value => events.push({eventType: 'closetag', value}));\n for await (const chunk of iterable) {\n saxesParser.write(bufferToString(chunk));\n // saxesParser.write and saxesParser.on() are synchronous,\n // so we can only reach the below line once all events have been emitted\n if (error) throw error;\n // As a performance optimization, we gather all events instead of passing\n // them one by one, which would cause each event to go through the event queue\n yield events;\n events = [];\n }\n};\n","const colCache = require('./col-cache');\n\n// const cellRefRegex = /(([a-z_\\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i;\nconst replacementCandidateRx = /(([a-z_\\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;\nconst CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;\n\nfunction slideFormula(formula, fromCell, toCell) {\n const offset = colCache.decode(fromCell);\n const to = colCache.decode(toCell);\n return formula.replace(\n replacementCandidateRx,\n (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => {\n if (trailingParen) {\n return refMatch;\n }\n const match = CRrx.exec(addrPart);\n if (match) {\n const colDollar = match[1];\n const colStr = match[2].toUpperCase();\n const rowDollar = match[3];\n const rowStr = match[4];\n if (colStr.length > 3 || (colStr.length === 3 && colStr > 'XFD')) {\n // > XFD is the highest col number in excel 2007 and beyond, so this is a named range\n return refMatch;\n }\n let col = colCache.l2n(colStr);\n let row = parseInt(rowStr, 10);\n if (!colDollar) {\n col += to.col - offset.col;\n }\n if (!rowDollar) {\n row += to.row - offset.row;\n }\n const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row;\n return res;\n }\n return refMatch;\n }\n );\n}\n\nmodule.exports = {\n slideFormula,\n};\n","/* eslint-disable max-classes-per-file */\nconst Stream = require('readable-stream');\n\nconst utils = require('./utils');\nconst StringBuf = require('./string-buf');\n\n// =============================================================================\n// data chunks - encapsulating incoming data\nclass StringChunk {\n constructor(data, encoding) {\n this._data = data;\n this._encoding = encoding;\n }\n\n get length() {\n return this.toBuffer().length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n return this.toBuffer().copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n if (!this._buffer) {\n this._buffer = Buffer.from(this._data, this._encoding);\n }\n return this._buffer;\n }\n}\n\nclass StringBufChunk {\n constructor(data) {\n this._data = data;\n }\n\n get length() {\n return this._data.length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n // eslint-disable-next-line no-underscore-dangle\n return this._data._buf.copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n return this._data.toBuffer();\n }\n}\n\nclass BufferChunk {\n constructor(data) {\n this._data = data;\n }\n\n get length() {\n return this._data.length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n this._data.copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n return this._data;\n }\n}\n\n// =============================================================================\n// ReadWriteBuf - a single buffer supporting simple read-write\nclass ReadWriteBuf {\n constructor(size) {\n this.size = size;\n // the buffer\n this.buffer = Buffer.alloc(size);\n // read index\n this.iRead = 0;\n // write index\n this.iWrite = 0;\n }\n\n toBuffer() {\n if (this.iRead === 0 && this.iWrite === this.size) {\n return this.buffer;\n }\n\n const buf = Buffer.alloc(this.iWrite - this.iRead);\n this.buffer.copy(buf, 0, this.iRead, this.iWrite);\n return buf;\n }\n\n get length() {\n return this.iWrite - this.iRead;\n }\n\n get eod() {\n return this.iRead === this.iWrite;\n }\n\n get full() {\n return this.iWrite === this.size;\n }\n\n read(size) {\n let buf;\n // read size bytes from buffer and return buffer\n if (size === 0) {\n // special case - return null if no data requested\n return null;\n }\n\n if (size === undefined || size >= this.length) {\n // if no size specified or size is at least what we have then return all of the bytes\n buf = this.toBuffer();\n this.iRead = this.iWrite;\n return buf;\n }\n\n // otherwise return a chunk\n buf = Buffer.alloc(size);\n this.buffer.copy(buf, 0, this.iRead, size);\n this.iRead += size;\n return buf;\n }\n\n write(chunk, offset, length) {\n // write as many bytes from data from optional source offset\n // and return number of bytes written\n const size = Math.min(length, this.size - this.iWrite);\n chunk.copy(this.buffer, this.iWrite, offset, offset + size);\n this.iWrite += size;\n return size;\n }\n}\n\n// =============================================================================\n// StreamBuf - a multi-purpose read-write stream\n// As MemBuf - write as much data as you like. Then call toBuffer() to consolidate\n// As StreamHub - pipe to multiple writables\n// As readable stream - feed data into the writable part and have some other code read from it.\n\n// Note: Not sure why but StreamBuf does not like JS \"class\" sugar. It fails the\n// integration tests\nconst StreamBuf = function(options) {\n options = options || {};\n this.bufSize = options.bufSize || 1024 * 1024;\n this.buffers = [];\n\n // batch mode fills a buffer completely before passing the data on\n // to pipes or 'readable' event listeners\n this.batch = options.batch || false;\n\n this.corked = false;\n // where in the current writable buffer we're up to\n this.inPos = 0;\n\n // where in the current readable buffer we've read up to\n this.outPos = 0;\n\n // consuming pipe streams go here\n this.pipes = [];\n\n // controls emit('data')\n this.paused = false;\n\n this.encoding = null;\n};\n\nutils.inherits(StreamBuf, Stream.Duplex, {\n toBuffer() {\n switch (this.buffers.length) {\n case 0:\n return null;\n case 1:\n return this.buffers[0].toBuffer();\n default:\n return Buffer.concat(this.buffers.map(rwBuf => rwBuf.toBuffer()));\n }\n },\n\n // writable\n // event drain - if write returns false (which it won't), indicates when safe to write again.\n // finish - end() has been called\n // pipe(src) - pipe() has been called on readable\n // unpipe(src) - unpipe() has been called on readable\n // error - duh\n\n _getWritableBuffer() {\n if (this.buffers.length) {\n const last = this.buffers[this.buffers.length - 1];\n if (!last.full) {\n return last;\n }\n }\n const buf = new ReadWriteBuf(this.bufSize);\n this.buffers.push(buf);\n return buf;\n },\n\n async _pipe(chunk) {\n const write = function(pipe) {\n return new Promise(resolve => {\n pipe.write(chunk.toBuffer(), () => {\n resolve();\n });\n });\n };\n await Promise.all(this.pipes.map(write));\n },\n _writeToBuffers(chunk) {\n let inPos = 0;\n const inLen = chunk.length;\n while (inPos < inLen) {\n // find writable buffer\n const buffer = this._getWritableBuffer();\n\n // write some data\n inPos += buffer.write(chunk, inPos, inLen - inPos);\n }\n },\n async write(data, encoding, callback) {\n if (encoding instanceof Function) {\n callback = encoding;\n encoding = 'utf8';\n }\n callback = callback || utils.nop;\n\n // encapsulate data into a chunk\n let chunk;\n if (data instanceof StringBuf) {\n chunk = new StringBufChunk(data);\n } else if (data instanceof Buffer) {\n chunk = new BufferChunk(data);\n } else if (typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer) {\n chunk = new StringChunk(data, encoding);\n } else {\n throw new Error('Chunk must be one of type String, Buffer or StringBuf.');\n }\n\n // now, do something with the chunk\n if (this.pipes.length) {\n if (this.batch) {\n this._writeToBuffers(chunk);\n while (!this.corked && this.buffers.length > 1) {\n this._pipe(this.buffers.shift());\n }\n } else if (!this.corked) {\n await this._pipe(chunk);\n callback();\n } else {\n this._writeToBuffers(chunk);\n process.nextTick(callback);\n }\n } else {\n if (!this.paused) {\n this.emit('data', chunk.toBuffer());\n }\n\n this._writeToBuffers(chunk);\n this.emit('readable');\n }\n\n return true;\n },\n cork() {\n this.corked = true;\n },\n _flush(/* destination */) {\n // if we have comsumers...\n if (this.pipes.length) {\n // and there's stuff not written\n while (this.buffers.length) {\n this._pipe(this.buffers.shift());\n }\n }\n },\n uncork() {\n this.corked = false;\n this._flush();\n },\n end(chunk, encoding, callback) {\n const writeComplete = error => {\n if (error) {\n callback(error);\n } else {\n this._flush();\n this.pipes.forEach(pipe => {\n pipe.end();\n });\n this.emit('finish');\n }\n };\n if (chunk) {\n this.write(chunk, encoding, writeComplete);\n } else {\n writeComplete();\n }\n },\n\n // readable\n // event readable - some data is now available\n // event data - switch to flowing mode - feeds chunks to handler\n // event end - no more data\n // event close - optional, indicates upstream close\n // event error - duh\n read(size) {\n let buffers;\n // read min(buffer, size || infinity)\n if (size) {\n buffers = [];\n while (size && this.buffers.length && !this.buffers[0].eod) {\n const first = this.buffers[0];\n const buffer = first.read(size);\n size -= buffer.length;\n buffers.push(buffer);\n if (first.eod && first.full) {\n this.buffers.shift();\n }\n }\n return Buffer.concat(buffers);\n }\n\n buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean);\n this.buffers = [];\n return Buffer.concat(buffers);\n },\n setEncoding(encoding) {\n // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects\n this.encoding = encoding;\n },\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n isPaused() {\n return !!this.paused;\n },\n pipe(destination) {\n // add destination to pipe list & write current buffer\n this.pipes.push(destination);\n if (!this.paused && this.buffers.length) {\n this.end();\n }\n },\n unpipe(destination) {\n // remove destination from pipe list\n this.pipes = this.pipes.filter(pipe => pipe !== destination);\n },\n unshift(/* chunk */) {\n // some numpty has read some data that's not for them and they want to put it back!\n // Might implement this some day\n throw new Error('Not Implemented');\n },\n wrap(/* stream */) {\n // not implemented\n throw new Error('Not Implemented');\n },\n});\n\nmodule.exports = StreamBuf;\n","// StringBuf - a way to keep string memory operations to a minimum\n// while building the strings for the xml files\nclass StringBuf {\n constructor(options) {\n this._buf = Buffer.alloc((options && options.size) || 16384);\n this._encoding = (options && options.encoding) || 'utf8';\n\n // where in the buffer we are at\n this._inPos = 0;\n\n // for use by toBuffer()\n this._buffer = undefined;\n }\n\n get length() {\n return this._inPos;\n }\n\n get capacity() {\n return this._buf.length;\n }\n\n get buffer() {\n return this._buf;\n }\n\n toBuffer() {\n // return the current data as a single enclosing buffer\n if (!this._buffer) {\n this._buffer = Buffer.alloc(this.length);\n this._buf.copy(this._buffer, 0, 0, this.length);\n }\n return this._buffer;\n }\n\n reset(position) {\n position = position || 0;\n this._buffer = undefined;\n this._inPos = position;\n }\n\n _grow(min) {\n let size = this._buf.length * 2;\n while (size < min) {\n size *= 2;\n }\n const buf = Buffer.alloc(size);\n this._buf.copy(buf, 0);\n this._buf = buf;\n }\n\n addText(text) {\n this._buffer = undefined;\n\n let inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\n\n // if we've hit (or nearing capacity), grow the buf\n while (inPos >= this._buf.length - 4) {\n this._grow(this._inPos + text.length);\n\n // keep trying to write until we've completely written the text\n inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\n }\n\n this._inPos = inPos;\n }\n\n addStringBuf(inBuf) {\n if (inBuf.length) {\n this._buffer = undefined;\n\n if (this.length + inBuf.length > this.capacity) {\n this._grow(this.length + inBuf.length);\n }\n // eslint-disable-next-line no-underscore-dangle\n inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length);\n this._inPos += inBuf.length;\n }\n }\n}\n\nmodule.exports = StringBuf;\n","const {toString} = Object.prototype;\nconst escapeHtmlRegex = /[\"&<>]/;\nconst _ = {\n each: function each(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n obj.forEach(cb);\n } else {\n Object.keys(obj).forEach(key => {\n cb(obj[key], key);\n });\n }\n }\n },\n\n some: function some(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.some(cb);\n }\n return Object.keys(obj).some(key => cb(obj[key], key));\n }\n return false;\n },\n\n every: function every(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.every(cb);\n }\n return Object.keys(obj).every(key => cb(obj[key], key));\n }\n return true;\n },\n\n map: function map(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.map(cb);\n }\n return Object.keys(obj).map(key => cb(obj[key], key));\n }\n return [];\n },\n\n keyBy(a, p) {\n return a.reduce((o, v) => {\n o[v[p]] = v;\n return o;\n }, {});\n },\n\n isEqual: function isEqual(a, b) {\n const aType = typeof a;\n const bType = typeof b;\n const aArray = Array.isArray(a);\n const bArray = Array.isArray(b);\n let keys;\n\n if (aType !== bType) {\n return false;\n }\n switch (typeof a) {\n case 'object':\n if (aArray || bArray) {\n if (aArray && bArray) {\n return (\n a.length === b.length &&\n a.every((aValue, index) => {\n const bValue = b[index];\n return _.isEqual(aValue, bValue);\n })\n );\n }\n return false;\n }\n\n if (a === null || b === null) {\n return a === b;\n }\n\n // Compare object keys and values\n keys = Object.keys(a);\n\n if (Object.keys(b).length !== keys.length) {\n return false;\n }\n\n for (const key of keys) {\n if (!b.hasOwnProperty(key)) {\n return false;\n }\n }\n\n return _.every(a, (aValue, key) => {\n const bValue = b[key];\n return _.isEqual(aValue, bValue);\n });\n\n default:\n return a === b;\n }\n },\n\n escapeHtml(html) {\n const regexResult = escapeHtmlRegex.exec(html);\n if (!regexResult) return html;\n\n let result = '';\n let escape = '';\n let lastIndex = 0;\n let i = regexResult.index;\n for (; i < html.length; i++) {\n switch (html.charAt(i)) {\n case '\"':\n escape = '"';\n break;\n case '&':\n escape = '&';\n break;\n case '\\'':\n escape = ''';\n break;\n case '<':\n escape = '<';\n break;\n case '>':\n escape = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== i) result += html.substring(lastIndex, i);\n lastIndex = i + 1;\n result += escape;\n }\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\n return result;\n },\n\n strcmp(a, b) {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n },\n\n isUndefined(val) {\n return toString.call(val) === '[object Undefined]';\n },\n\n isObject(val) {\n return toString.call(val) === '[object Object]';\n },\n\n deepMerge() {\n const target = arguments[0] || {};\n const {length} = arguments;\n // eslint-disable-next-line one-var\n let src, clone, copyIsArray;\n\n function assignValue(val, key) {\n src = target[key];\n copyIsArray = Array.isArray(val);\n if (_.isObject(val) || copyIsArray) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && Array.isArray(src) ? src : [];\n } else {\n clone = src && _.isObject(src) ? src : {};\n }\n target[key] = _.deepMerge(clone, val);\n } else if (!_.isUndefined(val)) {\n target[key] = val;\n }\n }\n\n for (let i = 0; i < length; i++) {\n _.each(arguments[i], assignValue);\n }\n return target;\n },\n};\n\nmodule.exports = _;\n","const fs = require('fs');\n\n// useful stuff\nconst inherits = function(cls, superCtor, statics, prototype) {\n // eslint-disable-next-line no-underscore-dangle\n cls.super_ = superCtor;\n\n if (!prototype) {\n prototype = statics;\n statics = null;\n }\n\n if (statics) {\n Object.keys(statics).forEach(i => {\n Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));\n });\n }\n\n const properties = {\n constructor: {\n value: cls,\n enumerable: false,\n writable: false,\n configurable: true,\n },\n };\n if (prototype) {\n Object.keys(prototype).forEach(i => {\n properties[i] = Object.getOwnPropertyDescriptor(prototype, i);\n });\n }\n\n cls.prototype = Object.create(superCtor.prototype, properties);\n};\n\n// eslint-disable-next-line no-control-regex\nconst xmlDecodeRegex = /[<>&'\"\\x7F\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]/;\nconst utils = {\n nop() {},\n promiseImmediate(value) {\n return new Promise(resolve => {\n if (global.setImmediate) {\n setImmediate(() => {\n resolve(value);\n });\n } else {\n // poorman's setImmediate - must wait at least 1ms\n setTimeout(() => {\n resolve(value);\n }, 1);\n }\n });\n },\n inherits,\n dateToExcel(d, date1904) {\n return 25569 + ( d.getTime() / (24 * 3600 * 1000) ) - (date1904 ? 1462 : 0);\n },\n excelToDate(v, date1904) {\n const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);\n return new Date(millisecondSinceEpoch);\n },\n parsePath(filepath) {\n const last = filepath.lastIndexOf('/');\n return {\n path: filepath.substring(0, last),\n name: filepath.substring(last + 1),\n };\n },\n getRelsPath(filepath) {\n const path = utils.parsePath(filepath);\n return `${path.path}/_rels/${path.name}.rels`;\n },\n xmlEncode(text) {\n const regexResult = xmlDecodeRegex.exec(text);\n if (!regexResult) return text;\n\n let result = '';\n let escape = '';\n let lastIndex = 0;\n let i = regexResult.index;\n for (; i < text.length; i++) {\n const charCode = text.charCodeAt(i);\n switch (charCode) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n case 127:\n escape = '';\n break;\n default: {\n if (charCode <= 31 && (charCode <= 8 || (charCode >= 11 && charCode !== 13))) {\n escape = '';\n break;\n }\n continue;\n }\n }\n if (lastIndex !== i) result += text.substring(lastIndex, i);\n lastIndex = i + 1;\n if (escape) result += escape;\n }\n if (lastIndex !== i) return result + text.substring(lastIndex, i);\n return result;\n },\n xmlDecode(text) {\n return text.replace(/&([a-z]*);/g, c => {\n switch (c) {\n case '<':\n return '<';\n case '>':\n return '>';\n case '&':\n return '&';\n case ''':\n return '\\'';\n case '"':\n return '\"';\n default:\n return c;\n }\n });\n },\n validInt(value) {\n const i = parseInt(value, 10);\n return !Number.isNaN(i) ? i : 0;\n },\n\n isDateFmt(fmt) {\n if (!fmt) {\n return false;\n }\n\n // must remove all chars inside quotes and []\n fmt = fmt.replace(/\\[[^\\]]*]/g, '');\n fmt = fmt.replace(/\"[^\"]*\"/g, '');\n // then check for date formatting chars\n const result = fmt.match(/[ymdhMsb]+/) !== null;\n return result;\n },\n\n fs: {\n exists(path) {\n return new Promise(resolve => {\n fs.access(path, fs.constants.F_OK, err => {\n resolve(!err);\n });\n });\n },\n },\n\n toIsoDateString(dt) {\n return dt.toIsoString().subsstr(0, 10);\n },\n\n parseBoolean(value) {\n return value === true || value === 'true' || value === 1 || value === '1';\n },\n};\n\nmodule.exports = utils;\n","const _ = require('./under-dash');\n\nconst utils = require('./utils');\n\n// constants\nconst OPEN_ANGLE = '<';\nconst CLOSE_ANGLE = '>';\nconst OPEN_ANGLE_SLASH = '';\n\nfunction pushAttribute(xml, name, value) {\n xml.push(` ${name}=\"${utils.xmlEncode(value.toString())}\"`);\n}\nfunction pushAttributes(xml, attributes) {\n if (attributes) {\n const tmp = [];\n _.each(attributes, (value, name) => {\n if (value !== undefined) {\n pushAttribute(tmp, name, value);\n }\n });\n xml.push(tmp.join(\"\"));\n }\n}\n\nclass XmlStream {\n constructor() {\n this._xml = [];\n this._stack = [];\n this._rollbacks = [];\n }\n\n get tos() {\n return this._stack.length ? this._stack[this._stack.length - 1] : undefined;\n }\n\n get cursor() {\n // handy way to track whether anything has been added\n return this._xml.length;\n }\n\n openXml(docAttributes) {\n const xml = this._xml;\n // \n xml.push('\\n');\n }\n\n openNode(name, attributes) {\n const parent = this.tos;\n const xml = this._xml;\n if (parent && this.open) {\n xml.push(CLOSE_ANGLE);\n }\n\n this._stack.push(name);\n\n // start streaming node\n xml.push(OPEN_ANGLE);\n xml.push(name);\n pushAttributes(xml, attributes);\n this.leaf = true;\n this.open = true;\n }\n\n addAttribute(name, value) {\n if (!this.open) {\n throw new Error('Cannot write attributes to node if it is not open');\n }\n if (value !== undefined) {\n pushAttribute(this._xml, name, value);\n }\n }\n\n addAttributes(attrs) {\n if (!this.open) {\n throw new Error('Cannot write attributes to node if it is not open');\n }\n pushAttributes(this._xml, attrs);\n }\n\n writeText(text) {\n const xml = this._xml;\n if (this.open) {\n xml.push(CLOSE_ANGLE);\n this.open = false;\n }\n this.leaf = false;\n xml.push(utils.xmlEncode(text.toString()));\n }\n\n writeXml(xml) {\n if (this.open) {\n this._xml.push(CLOSE_ANGLE);\n this.open = false;\n }\n this.leaf = false;\n this._xml.push(xml);\n }\n\n closeNode() {\n const node = this._stack.pop();\n const xml = this._xml;\n if (this.leaf) {\n xml.push(CLOSE_SLASH_ANGLE);\n } else {\n xml.push(OPEN_ANGLE_SLASH);\n xml.push(node);\n xml.push(CLOSE_ANGLE);\n }\n this.open = false;\n this.leaf = false;\n }\n\n leafNode(name, attributes, text) {\n this.openNode(name, attributes);\n if (text !== undefined) {\n // zeros need to be written\n this.writeText(text);\n }\n this.closeNode();\n }\n\n closeAll() {\n while (this._stack.length) {\n this.closeNode();\n }\n }\n\n addRollback() {\n this._rollbacks.push({\n xml: this._xml.length,\n stack: this._stack.length,\n leaf: this.leaf,\n open: this.open,\n });\n return this.cursor;\n }\n\n commit() {\n this._rollbacks.pop();\n }\n\n rollback() {\n const r = this._rollbacks.pop();\n if (this._xml.length > r.xml) {\n this._xml.splice(r.xml, this._xml.length - r.xml);\n }\n if (this._stack.length > r.stack) {\n this._stack.splice(r.stack, this._stack.length - r.stack);\n }\n this.leaf = r.leaf;\n this.open = r.open;\n }\n\n get xml() {\n this.closeAll();\n return this._xml.join('');\n }\n}\n\nXmlStream.StdDocAttributes = {\n version: '1.0',\n encoding: 'UTF-8',\n standalone: 'yes',\n};\n\nmodule.exports = XmlStream;\n","const events = require('events');\nconst JSZip = require('jszip');\n\nconst StreamBuf = require('./stream-buf');\nconst {stringToBuffer} = require('./browser-buffer-encode');\n\n// =============================================================================\n// The ZipWriter class\n// Packs streamed data into an output zip stream\nclass ZipWriter extends events.EventEmitter {\n constructor(options) {\n super();\n this.options = Object.assign(\n {\n type: 'nodebuffer',\n compression: 'DEFLATE',\n },\n options\n );\n\n this.zip = new JSZip();\n this.stream = new StreamBuf();\n }\n\n append(data, options) {\n if (options.hasOwnProperty('base64') && options.base64) {\n this.zip.file(options.name, data, {base64: true});\n } else {\n // https://www.npmjs.com/package/process\n if (process.browser && typeof data === 'string') {\n // use TextEncoder in browser\n data = stringToBuffer(data);\n }\n this.zip.file(options.name, data);\n }\n }\n\n async finalize() {\n const content = await this.zip.generateAsync(this.options);\n this.stream.end(content);\n this.emit('finish');\n }\n\n // ==========================================================================\n // Stream.Readable interface\n read(size) {\n return this.stream.read(size);\n }\n\n setEncoding(encoding) {\n return this.stream.setEncoding(encoding);\n }\n\n pause() {\n return this.stream.pause();\n }\n\n resume() {\n return this.stream.resume();\n }\n\n isPaused() {\n return this.stream.isPaused();\n }\n\n pipe(destination, options) {\n return this.stream.pipe(destination, options);\n }\n\n unpipe(destination) {\n return this.stream.unpipe(destination);\n }\n\n unshift(chunk) {\n return this.stream.unshift(chunk);\n }\n\n wrap(stream) {\n return this.stream.wrap(stream);\n }\n}\n\n// =============================================================================\n\nmodule.exports = {\n ZipWriter,\n};\n","module.exports = {\n 0: {f: 'General'},\n 1: {f: '0'},\n 2: {f: '0.00'},\n 3: {f: '#,##0'},\n 4: {f: '#,##0.00'},\n 9: {f: '0%'},\n 10: {f: '0.00%'},\n 11: {f: '0.00E+00'},\n 12: {f: '# ?/?'},\n 13: {f: '# ??/??'},\n 14: {f: 'mm-dd-yy'},\n 15: {f: 'd-mmm-yy'},\n 16: {f: 'd-mmm'},\n 17: {f: 'mmm-yy'},\n 18: {f: 'h:mm AM/PM'},\n 19: {f: 'h:mm:ss AM/PM'},\n 20: {f: 'h:mm'},\n 21: {f: 'h:mm:ss'},\n 22: {f: 'm/d/yy \"h\":mm'},\n\n 27: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 28: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 29: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 30: {'zh-tw': 'm/d/yy ', 'zh-cn': 'm-d-yy', 'ja-jp': 'm/d/yy', 'ko-kr': 'mm-dd-yy'},\n 31: {\n 'zh-tw': 'yyyy\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'yyyy\"年\"m\"月\"d\"日\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'yyyy\"년\" mm\"월\" dd\"일\"',\n },\n 32: {\n 'zh-tw': 'hh\"時\"mm\"分\"',\n 'zh-cn': 'h\"时\"mm\"分\"',\n 'ja-jp': 'h\"時\"mm\"分\"',\n 'ko-kr': 'h\"시\" mm\"분\"',\n },\n 33: {\n 'zh-tw': 'hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': 'h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'h\"時\"mm\"分\"ss\"秒\"',\n 'ko-kr': 'h\"시\" mm\"분\" ss\"초\"',\n },\n 34: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 35: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 36: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n\n 37: {f: '#,##0 ;(#,##0)'},\n 38: {f: '#,##0 ;[Red](#,##0)'},\n 39: {f: '#,##0.00 ;(#,##0.00)'},\n 40: {f: '#,##0.00 ;[Red](#,##0.00)'},\n 45: {f: 'mm:ss'},\n 46: {f: '[h]:mm:ss'},\n 47: {f: 'mmss.0'},\n 48: {f: '##0.0E+0'},\n 49: {f: '@'},\n\n 50: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 51: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 52: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 53: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 54: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 55: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 56: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 57: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 58: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n\n 59: {'th-th': 't0'},\n 60: {'th-th': 't0.00'},\n 61: {'th-th': 't#,##0'},\n 62: {'th-th': 't#,##0.00'},\n 67: {'th-th': 't0%'},\n 68: {'th-th': 't0.00%'},\n 69: {'th-th': 't# ?/?'},\n 70: {'th-th': 't# ??/??'},\n\n 81: {'th-th': 'd/m/bb'},\n};\n","'use strict';\n\nmodule.exports = {\n OfficeDocument:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\n Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\n CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain',\n SharedStrings:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\n Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\n Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',\n Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n CoreProperties:\n 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\n ExtenderProperties:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',\n VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',\n Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',\n};\n","const parseSax = require('../../utils/parse-sax');\nconst XmlStream = require('../../utils/xml-stream');\n\n/* 'virtual' methods used as a form of documentation */\n/* eslint-disable class-methods-use-this */\n\n// Base class for Xforms\nclass BaseXform {\n // constructor(/* model, name */) {}\n\n // ============================================================\n // Virtual Interface\n prepare(/* model, options */) {\n // optional preparation (mutation) of model so it is ready for write\n }\n\n render(/* xmlStream, model */) {\n // convert model to xml\n }\n\n parseOpen(node) {\n // XML node opened\n }\n\n parseText(text) {\n // chunk of text encountered for current node\n }\n\n parseClose(name) {\n // XML node closed\n }\n\n reconcile(model, options) {\n // optional post-parse step (opposite to prepare)\n }\n\n // ============================================================\n reset() {\n // to make sure parses don't bleed to next iteration\n this.model = null;\n\n // if we have a map - reset them too\n if (this.map) {\n Object.values(this.map).forEach(xform => {\n if (xform instanceof BaseXform) {\n xform.reset();\n } else if (xform.xform) {\n xform.xform.reset();\n }\n });\n }\n }\n\n mergeModel(obj) {\n // set obj's props to this.model\n this.model = Object.assign(this.model || {}, obj);\n }\n\n async parse(saxParser) {\n for await (const events of saxParser) {\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n this.parseOpen(value);\n } else if (eventType === 'text') {\n this.parseText(value);\n } else if (eventType === 'closetag') {\n if (!this.parseClose(value.name)) {\n return this.model;\n }\n }\n }\n }\n return this.model;\n }\n\n async parseStream(stream) {\n return this.parse(parseSax(stream));\n }\n\n get xml() {\n // convenience function to get the xml of this.model\n // useful for manager types that are built during the prepare phase\n return this.toXml(this.model);\n }\n\n toXml(model) {\n const xmlStream = new XmlStream();\n this.render(xmlStream, model);\n return xmlStream.xml;\n }\n\n // ============================================================\n // Useful Utilities\n static toAttribute(value, dflt, always = false) {\n if (value === undefined) {\n if (always) {\n return dflt;\n }\n } else if (always || value !== dflt) {\n return value.toString();\n }\n return undefined;\n }\n\n static toStringAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toStringValue(attr, dflt) {\n return attr === undefined ? dflt : attr;\n }\n\n static toBoolAttribute(value, dflt, always = false) {\n if (value === undefined) {\n if (always) {\n return dflt;\n }\n } else if (always || value !== dflt) {\n return value ? '1' : '0';\n }\n return undefined;\n }\n\n static toBoolValue(attr, dflt) {\n return attr === undefined ? dflt : attr === '1';\n }\n\n static toIntAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toIntValue(attr, dflt) {\n return attr === undefined ? dflt : parseInt(attr, 10);\n }\n\n static toFloatAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toFloatValue(attr, dflt) {\n return attr === undefined ? dflt : parseFloat(attr);\n }\n}\n\nmodule.exports = BaseXform;\n","const BaseXform = require('../base-xform');\nconst colCache = require('../../../utils/col-cache');\n\nclass DefinedNamesXform extends BaseXform {\n render(xmlStream, model) {\n // \n // name.ranges.join(',')\n // name.ranges.join(',')\n // \n xmlStream.openNode('definedName', {\n name: model.name,\n localSheetId: model.localSheetId,\n });\n xmlStream.writeText(model.ranges.join(','));\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'definedName':\n this._parsedName = node.attributes.name;\n this._parsedLocalSheetId = node.attributes.localSheetId;\n this._parsedText = [];\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this._parsedText.push(text);\n }\n\n parseClose() {\n this.model = {\n name: this._parsedName,\n ranges: extractRanges(this._parsedText.join('')),\n };\n if (this._parsedLocalSheetId !== undefined) {\n this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10);\n }\n return false;\n }\n}\n\nfunction isValidRange(range) {\n try {\n colCache.decodeEx(range);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nfunction extractRanges(parsedText) {\n const ranges = [];\n let quotesOpened = false;\n let last = '';\n parsedText.split(',').forEach(item => {\n if (!item) {\n return;\n }\n const quotes = (item.match(/'/g) || []).length;\n\n if (!quotes) {\n if (quotesOpened) {\n last += `${item},`;\n } else if (isValidRange(item)) {\n ranges.push(item);\n }\n return;\n }\n const quotesEven = quotes % 2 === 0;\n\n if (!quotesOpened && quotesEven && isValidRange(item)) {\n ranges.push(item);\n } else if (quotesOpened && !quotesEven) {\n quotesOpened = false;\n if (isValidRange(last + item)) {\n ranges.push(last + item);\n }\n last = '';\n } else {\n quotesOpened = true;\n last += `${item},`;\n }\n });\n return ranges;\n}\n\nmodule.exports = DefinedNamesXform;\n","const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nclass WorksheetXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('sheet', {\n sheetId: model.id,\n name: model.name,\n state: model.state,\n 'r:id': model.rId,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'sheet') {\n this.model = {\n name: utils.xmlDecode(node.attributes.name),\n id: parseInt(node.attributes.sheetId, 10),\n state: node.attributes.state,\n rId: node.attributes['r:id'],\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorksheetXform;\n","const BaseXform = require('../base-xform');\n\nclass WorkbookCalcPropertiesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('calcPr', {\n calcId: 171027,\n fullCalcOnLoad: model.fullCalcOnLoad ? 1 : undefined,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'calcPr') {\n this.model = {};\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorkbookCalcPropertiesXform;\n","const BaseXform = require('../base-xform');\n\nclass WorksheetPropertiesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('workbookPr', {\n date1904: model.date1904 ? 1 : undefined,\n defaultThemeVersion: 164011,\n filterPrivacy: 1,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'workbookPr') {\n this.model = {\n date1904: node.attributes.date1904 === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorksheetPropertiesXform;\n","const BaseXform = require('../base-xform');\n\nclass WorkbookViewXform extends BaseXform {\n render(xmlStream, model) {\n const attributes = {\n xWindow: model.x || 0,\n yWindow: model.y || 0,\n windowWidth: model.width || 12000,\n windowHeight: model.height || 24000,\n firstSheet: model.firstSheet,\n activeTab: model.activeTab,\n };\n if (model.visibility && model.visibility !== 'visible') {\n attributes.visibility = model.visibility;\n }\n xmlStream.leafNode('workbookView', attributes);\n }\n\n parseOpen(node) {\n if (node.name === 'workbookView') {\n const model = (this.model = {});\n const addS = function(name, value, dflt) {\n const s = value !== undefined ? (model[name] = value) : dflt;\n if (s !== undefined) {\n model[name] = s;\n }\n };\n const addN = function(name, value, dflt) {\n const n = value !== undefined ? (model[name] = parseInt(value, 10)) : dflt;\n if (n !== undefined) {\n model[name] = n;\n }\n };\n addN('x', node.attributes.xWindow, 0);\n addN('y', node.attributes.yWindow, 0);\n addN('width', node.attributes.windowWidth, 25000);\n addN('height', node.attributes.windowHeight, 10000);\n addS('visibility', node.attributes.visibility, 'visible');\n addN('activeTab', node.attributes.activeTab, undefined);\n addN('firstSheet', node.attributes.firstSheet, undefined);\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorkbookViewXform;\n","const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst DefinedNameXform = require('./defined-name-xform');\nconst SheetXform = require('./sheet-xform');\nconst WorkbookViewXform = require('./workbook-view-xform');\nconst WorkbookPropertiesXform = require('./workbook-properties-xform');\nconst WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform');\n\nclass WorkbookXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion,\n workbookPr: new WorkbookPropertiesXform(),\n bookViews: new ListXform({\n tag: 'bookViews',\n count: false,\n childXform: new WorkbookViewXform(),\n }),\n sheets: new ListXform({tag: 'sheets', count: false, childXform: new SheetXform()}),\n definedNames: new ListXform({\n tag: 'definedNames',\n count: false,\n childXform: new DefinedNameXform(),\n }),\n calcPr: new WorkbookCalcPropertiesXform(),\n };\n }\n\n prepare(model) {\n model.sheets = model.worksheets;\n\n // collate all the print areas from all of the sheets and add them to the defined names\n const printAreas = [];\n let index = 0; // sheets is sparse array - calc index manually\n model.sheets.forEach(sheet => {\n if (sheet.pageSetup && sheet.pageSetup.printArea) {\n sheet.pageSetup.printArea.split('&&').forEach(printArea => {\n const printAreaComponents = printArea.split(':');\n const definedName = {\n name: '_xlnm.Print_Area',\n ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`],\n localSheetId: index,\n };\n printAreas.push(definedName);\n });\n }\n\n if (\n sheet.pageSetup &&\n (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)\n ) {\n const ranges = [];\n\n if (sheet.pageSetup.printTitlesColumn) {\n const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':');\n ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`);\n }\n\n if (sheet.pageSetup.printTitlesRow) {\n const titlesRows = sheet.pageSetup.printTitlesRow.split(':');\n ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`);\n }\n\n const definedName = {\n name: '_xlnm.Print_Titles',\n ranges,\n localSheetId: index,\n };\n\n printAreas.push(definedName);\n }\n index++;\n });\n if (printAreas.length) {\n model.definedNames = model.definedNames.concat(printAreas);\n }\n\n (model.media || []).forEach((medium, i) => {\n // assign name\n medium.name = medium.type + (i + 1);\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES);\n\n this.map.fileVersion.render(xmlStream);\n this.map.workbookPr.render(xmlStream, model.properties);\n this.map.bookViews.render(xmlStream, model.views);\n this.map.sheets.render(xmlStream, model.sheets);\n this.map.definedNames.render(xmlStream, model.definedNames);\n this.map.calcPr.render(xmlStream, model.calcProperties);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'workbook':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'workbook':\n this.model = {\n sheets: this.map.sheets.model,\n properties: this.map.workbookPr.model || {},\n views: this.map.bookViews.model,\n calcProperties: {},\n };\n if (this.map.definedNames.model) {\n this.model.definedNames = this.map.definedNames.model;\n }\n\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model) {\n const rels = (model.workbookRels || []).reduce((map, rel) => {\n map[rel.Id] = rel;\n return map;\n }, {});\n\n // reconcile sheet ids, rIds and names\n const worksheets = [];\n let worksheet;\n let index = 0;\n\n (model.sheets || []).forEach(sheet => {\n const rel = rels[sheet.rId];\n if (!rel) {\n return;\n }\n // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`,\n // otherwise it will be spliced directly behind `xl/`. i.g.\n worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\\s|\\/xl\\/)+/, '')}`];\n // If there are \"chartsheets\" in the file, rel.Target will\n // come out as chartsheets/sheet1.xml or similar here, and\n // that won't be in model.worksheetHash.\n // As we don't have the infrastructure to support chartsheets,\n // we will ignore them for now:\n if (worksheet) {\n worksheet.name = sheet.name;\n worksheet.id = sheet.id;\n worksheet.state = sheet.state;\n worksheets[index++] = worksheet;\n }\n });\n\n // reconcile print areas\n const definedNames = [];\n _.each(model.definedNames, definedName => {\n if (definedName.name === '_xlnm.Print_Area') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n const range = colCache.decodeEx(definedName.ranges[0]);\n worksheet.pageSetup.printArea = worksheet.pageSetup.printArea\n ? `${worksheet.pageSetup.printArea}&&${range.dimensions}`\n : range.dimensions;\n }\n } else if (definedName.name === '_xlnm.Print_Titles') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n\n const rangeString = definedName.ranges.join(',');\n\n const dollarRegex = /\\$/g;\n\n const rowRangeRegex = /\\$\\d+:\\$\\d+/;\n const rowRangeMatches = rangeString.match(rowRangeRegex);\n\n if (rowRangeMatches && rowRangeMatches.length) {\n const range = rowRangeMatches[0];\n worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, '');\n }\n\n const columnRangeRegex = /\\$[A-Z]+:\\$[A-Z]+/;\n const columnRangeMatches = rangeString.match(columnRangeRegex);\n\n if (columnRangeMatches && columnRangeMatches.length) {\n const range = columnRangeMatches[0];\n worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, '');\n }\n }\n } else {\n definedNames.push(definedName);\n }\n });\n model.definedNames = definedNames;\n\n // used by sheets to build their image models\n model.media.forEach((media, i) => {\n media.index = i;\n });\n }\n}\n\nWorkbookXform.WORKBOOK_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x15',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n};\nWorkbookXform.STATIC_XFORMS = {\n fileVersion: new StaticXform({\n tag: 'fileVersion',\n $: {appName: 'xl', lastEdited: 5, lowestEdited: 5, rupBuild: 9303},\n }),\n};\n\nmodule.exports = WorkbookXform;\n","const RichTextXform = require('../strings/rich-text-xform');\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\n/**\n \n \n \n \n \n \n \n \n \n 51422:\n \n \n \n \n \n \n \n test\n \n \n \n */\n\nconst CommentXform = (module.exports = function(model) {\n this.model = model;\n});\n\nutils.inherits(CommentXform, BaseXform, {\n get tag() {\n return 'r';\n },\n\n get richTextXform() {\n if (!this._richTextXform) {\n this._richTextXform = new RichTextXform();\n }\n return this._richTextXform;\n },\n\n render(xmlStream, model) {\n model = model || this.model;\n\n xmlStream.openNode('comment', {\n ref: model.ref,\n authorId: 0,\n });\n xmlStream.openNode('text');\n if (model && model.note && model.note.texts) {\n model.note.texts.forEach(text => {\n this.richTextXform.render(xmlStream, text);\n });\n }\n xmlStream.closeNode();\n xmlStream.closeNode();\n },\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'comment':\n this.model = {\n type: 'note',\n note: {\n texts: [],\n },\n ...node.attributes,\n };\n return true;\n case 'r':\n this.parser = this.richTextXform;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n },\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n },\n parseClose(name) {\n switch (name) {\n case 'comment':\n return false;\n case 'r':\n this.model.note.texts.push(this.parser.model);\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n },\n});\n","const XmlStream = require('../../../utils/xml-stream');\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nconst CommentXform = require('./comment-xform');\n\nconst CommentsXform = (module.exports = function() {\n this.map = {\n comment: new CommentXform(),\n };\n});\n\nutils.inherits(\n CommentsXform,\n BaseXform,\n {\n COMMENTS_ATTRIBUTES: {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n },\n },\n {\n render(xmlStream, model) {\n model = model || this.model;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('comments', CommentsXform.COMMENTS_ATTRIBUTES);\n\n // authors\n // TODO: support authors properly\n xmlStream.openNode('authors');\n xmlStream.leafNode('author', null, 'Author');\n xmlStream.closeNode();\n\n // comments\n xmlStream.openNode('commentList');\n model.comments.forEach(comment => {\n this.map.comment.render(xmlStream, comment);\n });\n xmlStream.closeNode();\n xmlStream.closeNode();\n },\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'commentList':\n this.model = {\n comments: [],\n };\n return true;\n case 'comment':\n this.parser = this.map.comment;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n },\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n },\n parseClose(name) {\n switch (name) {\n case 'commentList':\n return false;\n case 'comment':\n this.model.comments.push(this.parser.model);\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n },\n }\n);\n","const BaseXform = require('../../base-xform');\n\nclass VmlPositionXform extends BaseXform {\n constructor(model) {\n super();\n this._model = model;\n }\n\n get tag() {\n return this._model && this._model.tag;\n }\n\n render(xmlStream, model, type) {\n if (model === type[2]) {\n xmlStream.leafNode(this.tag);\n } else if (this.tag === 'x:SizeWithCells' && model === type[1]) {\n xmlStream.leafNode(this.tag);\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {};\n this.model[this.tag] = true;\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlPositionXform;\n","const BaseXform = require('../../base-xform');\n\nclass VmlProtectionXform extends BaseXform {\n constructor(model) {\n super();\n this._model = model;\n }\n\n get tag() {\n return this._model && this._model.tag;\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.text = '';\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this.text = text;\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlProtectionXform;\n","const BaseXform = require('../base-xform');\n\n// render the triangle in the cell for the comment\nclass VmlAnchorXform extends BaseXform {\n get tag() {\n return 'x:Anchor';\n }\n\n getAnchorRect(anchor) {\n const l = Math.floor(anchor.left);\n const lf = Math.floor((anchor.left - l) * 68);\n const t = Math.floor(anchor.top);\n const tf = Math.floor((anchor.top - t) * 18);\n const r = Math.floor(anchor.right);\n const rf = Math.floor((anchor.right - r) * 68);\n const b = Math.floor(anchor.bottom);\n const bf = Math.floor((anchor.bottom - b) * 18);\n return [l, lf, t, tf, r, rf, b, bf];\n }\n\n getDefaultRect(ref) {\n const l = ref.col;\n const lf = 6;\n const t = Math.max(ref.row - 2, 0);\n const tf = 14;\n const r = l + 2;\n const rf = 2;\n const b = t + 4;\n const bf = 16;\n return [l, lf, t, tf, r, rf, b, bf];\n }\n\n render(xmlStream, model) {\n const rect = model.anchor\n ? this.getAnchorRect(model.anchor)\n : this.getDefaultRect(model.refAddress);\n\n xmlStream.leafNode('x:Anchor', null, rect.join(', '));\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.text = '';\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this.text = text;\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlAnchorXform;\n","const BaseXform = require('../base-xform');\n\nconst VmlAnchorXform = require('./vml-anchor-xform');\nconst VmlProtectionXform = require('./style/vml-protection-xform');\nconst VmlPositionXform = require('./style/vml-position-xform');\n\nconst POSITION_TYPE = ['twoCells', 'oneCells', 'absolute'];\n\nclass VmlClientDataXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'x:Anchor': new VmlAnchorXform(),\n 'x:Locked': new VmlProtectionXform({tag: 'x:Locked'}),\n 'x:LockText': new VmlProtectionXform({tag: 'x:LockText'}),\n 'x:SizeWithCells': new VmlPositionXform({tag: 'x:SizeWithCells'}),\n 'x:MoveWithCells': new VmlPositionXform({tag: 'x:MoveWithCells'}),\n };\n }\n\n get tag() {\n return 'x:ClientData';\n }\n\n render(xmlStream, model) {\n const {protection, editAs} = model.note;\n xmlStream.openNode(this.tag, {ObjectType: 'Note'});\n this.map['x:MoveWithCells'].render(xmlStream, editAs, POSITION_TYPE);\n this.map['x:SizeWithCells'].render(xmlStream, editAs, POSITION_TYPE);\n this.map['x:Anchor'].render(xmlStream, model);\n this.map['x:Locked'].render(xmlStream, protection.locked);\n xmlStream.leafNode('x:AutoFill', null, 'False');\n this.map['x:LockText'].render(xmlStream, protection.lockText);\n xmlStream.leafNode('x:Row', null, model.refAddress.row - 1);\n xmlStream.leafNode('x:Column', null, model.refAddress.col - 1);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n anchor: [],\n protection: {},\n editAs: '',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.normalizeModel();\n return false;\n default:\n return true;\n }\n }\n\n normalizeModel() {\n const position = Object.assign(\n {},\n this.map['x:MoveWithCells'].model,\n this.map['x:SizeWithCells'].model\n );\n const len = Object.keys(position).length;\n this.model.editAs = POSITION_TYPE[len];\n this.model.anchor = this.map['x:Anchor'].text;\n this.model.protection.locked = this.map['x:Locked'].text;\n this.model.protection.lockText = this.map['x:LockText'].text;\n }\n}\n\nmodule.exports = VmlClientDataXform;\n","const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst VmlShapeXform = require('./vml-shape-xform');\n\n// This class is (currently) single purposed to insert the triangle\n// drawing icons on commented cells\nclass VmlNotesXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'v:shape': new VmlShapeXform(),\n };\n }\n\n get tag() {\n return 'xml';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, VmlNotesXform.DRAWING_ATTRIBUTES);\n\n xmlStream.openNode('o:shapelayout', {'v:ext': 'edit'});\n xmlStream.leafNode('o:idmap', {'v:ext': 'edit', data: 1});\n xmlStream.closeNode();\n\n xmlStream.openNode('v:shapetype', {\n id: '_x0000_t202',\n coordsize: '21600,21600',\n 'o:spt': 202,\n path: 'm,l,21600r21600,l21600,xe',\n });\n xmlStream.leafNode('v:stroke', {joinstyle: 'miter'});\n xmlStream.leafNode('v:path', {gradientshapeok: 't', 'o:connecttype': 'rect'});\n xmlStream.closeNode();\n\n model.comments.forEach((item, index) => {\n this.map['v:shape'].render(xmlStream, item, index);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n comments: [],\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.comments.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.anchors.forEach(anchor => {\n if (anchor.br) {\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\n } else {\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\n }\n });\n }\n}\n\nVmlNotesXform.DRAWING_ATTRIBUTES = {\n 'xmlns:v': 'urn:schemas-microsoft-com:vml',\n 'xmlns:o': 'urn:schemas-microsoft-com:office:office',\n 'xmlns:x': 'urn:schemas-microsoft-com:office:excel',\n};\n\nmodule.exports = VmlNotesXform;\n","const BaseXform = require('../base-xform');\nconst VmlTextboxXform = require('./vml-textbox-xform');\nconst VmlClientDataXform = require('./vml-client-data-xform');\n\nclass VmlShapeXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'v:textbox': new VmlTextboxXform(),\n 'x:ClientData': new VmlClientDataXform(),\n };\n }\n\n get tag() {\n return 'v:shape';\n }\n\n render(xmlStream, model, index) {\n xmlStream.openNode('v:shape', VmlShapeXform.V_SHAPE_ATTRIBUTES(model, index));\n\n xmlStream.leafNode('v:fill', {color2: 'infoBackground [80]'});\n xmlStream.leafNode('v:shadow', {color: 'none [81]', obscured: 't'});\n xmlStream.leafNode('v:path', {'o:connecttype': 'none'});\n this.map['v:textbox'].render(xmlStream, model);\n this.map['x:ClientData'].render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n margins: {\n insetmode: node.attributes['o:insetmode'],\n },\n anchor: '',\n editAs: '',\n protection: {},\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.margins.inset = this.map['v:textbox'].model && this.map['v:textbox'].model.inset;\n this.model.protection =\n this.map['x:ClientData'].model && this.map['x:ClientData'].model.protection;\n this.model.anchor = this.map['x:ClientData'].model && this.map['x:ClientData'].model.anchor;\n this.model.editAs = this.map['x:ClientData'].model && this.map['x:ClientData'].model.editAs;\n return false;\n default:\n return true;\n }\n }\n}\n\nVmlShapeXform.V_SHAPE_ATTRIBUTES = (model, index) => ({\n id: `_x0000_s${1025 + index}`,\n type: '#_x0000_t202',\n style:\n 'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden',\n fillcolor: 'infoBackground [80]',\n strokecolor: 'none [81]',\n 'o:insetmode': model.note.margins && model.note.margins.insetmode,\n});\n\nmodule.exports = VmlShapeXform;\n","const BaseXform = require('../base-xform');\n\nclass VmlTextboxXform extends BaseXform {\n get tag() {\n return 'v:textbox';\n }\n\n conversionUnit(value, multiple, unit) {\n return `${parseFloat(value) * multiple.toFixed(2)}${unit}`;\n }\n\n reverseConversionUnit(inset) {\n return (inset || '').split(',').map(margin => {\n return Number(parseFloat(this.conversionUnit(parseFloat(margin), 0.1, '')).toFixed(2));\n });\n }\n\n render(xmlStream, model) {\n const attributes = {\n style: 'mso-direction-alt:auto',\n };\n if (model && model.note) {\n let {inset} = model.note && model.note.margins;\n if (Array.isArray(inset)) {\n inset = inset\n .map(margin => {\n return this.conversionUnit(margin, 10, 'mm');\n })\n .join(',');\n }\n if (inset) {\n attributes.inset = inset;\n }\n }\n xmlStream.openNode('v:textbox', attributes);\n xmlStream.leafNode('div', {style: 'text-align:left'});\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n inset: this.reverseConversionUnit(node.attributes.inset),\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = VmlTextboxXform;\n","const BaseXform = require('./base-xform');\n\n/* 'virtual' methods used as a form of documentation */\n/* eslint-disable class-methods-use-this */\n\n// base class for xforms that are composed of other xforms\n// offers some default implementations\nclass CompositeXform extends BaseXform {\n createNewModel(node) {\n return {};\n }\n\n parseOpen(node) {\n // Typical pattern for composite xform\n this.parser = this.parser || this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n if (node.name === this.tag) {\n this.model = this.createNewModel(node);\n return true;\n }\n\n return false;\n }\n\n parseText(text) {\n // Default implementation. Send text to child parser\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n onParserClose(name, parser) {\n // parseClose has seen a child parser close\n // now need to incorporate into this.model somehow\n this.model[name] = parser.model;\n }\n\n parseClose(name) {\n // Default implementation\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.onParserClose(name, this.parser);\n this.parser = undefined;\n }\n return true;\n }\n\n return name !== this.tag;\n }\n}\n\nmodule.exports = CompositeXform;\n","const BaseXform = require('../base-xform');\n\nclass AppHeadingPairsXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openNode('HeadingPairs');\n xmlStream.openNode('vt:vector', {size: 2, baseType: 'variant'});\n\n xmlStream.openNode('vt:variant');\n xmlStream.leafNode('vt:lpstr', undefined, 'Worksheets');\n xmlStream.closeNode();\n\n xmlStream.openNode('vt:variant');\n xmlStream.leafNode('vt:i4', undefined, model.length);\n xmlStream.closeNode();\n\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n // no parsing\n return node.name === 'HeadingPairs';\n }\n\n parseText() {}\n\n parseClose(name) {\n return name !== 'HeadingPairs';\n }\n}\n\nmodule.exports = AppHeadingPairsXform;\n","const BaseXform = require('../base-xform');\n\nclass AppTitlesOfPartsXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openNode('TitlesOfParts');\n xmlStream.openNode('vt:vector', {size: model.length, baseType: 'lpstr'});\n\n model.forEach(sheet => {\n xmlStream.leafNode('vt:lpstr', undefined, sheet.name);\n });\n\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n // no parsing\n return node.name === 'TitlesOfParts';\n }\n\n parseText() {}\n\n parseClose(name) {\n return name !== 'TitlesOfParts';\n }\n}\n\nmodule.exports = AppTitlesOfPartsXform;\n","const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst StringXform = require('../simple/string-xform');\n\nconst AppHeadingPairsXform = require('./app-heading-pairs-xform');\nconst AppTitleOfPartsXform = require('./app-titles-of-parts-xform');\n\nclass AppXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n Company: new StringXform({tag: 'Company'}),\n Manager: new StringXform({tag: 'Manager'}),\n HeadingPairs: new AppHeadingPairsXform(),\n TitleOfParts: new AppTitleOfPartsXform(),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('Properties', AppXform.PROPERTY_ATTRIBUTES);\n\n xmlStream.leafNode('Application', undefined, 'Microsoft Excel');\n xmlStream.leafNode('DocSecurity', undefined, '0');\n xmlStream.leafNode('ScaleCrop', undefined, 'false');\n\n this.map.HeadingPairs.render(xmlStream, model.worksheets);\n this.map.TitleOfParts.render(xmlStream, model.worksheets);\n this.map.Company.render(xmlStream, model.company || '');\n this.map.Manager.render(xmlStream, model.manager);\n\n xmlStream.leafNode('LinksUpToDate', undefined, 'false');\n xmlStream.leafNode('SharedDoc', undefined, 'false');\n xmlStream.leafNode('HyperlinksChanged', undefined, 'false');\n xmlStream.leafNode('AppVersion', undefined, '16.0300');\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'Properties':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n // there's a lot we don't bother to parse\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'Properties':\n this.model = {\n worksheets: this.map.TitleOfParts.model,\n company: this.map.Company.model,\n manager: this.map.Manager.model,\n };\n return false;\n default:\n return true;\n }\n }\n}\n\nAppXform.DateFormat = function(dt) {\n return dt.toISOString().replace(/[.]\\d{3,6}/, '');\n};\n\nAppXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\n\nAppXform.PROPERTY_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties',\n 'xmlns:vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n};\n\nmodule.exports = AppXform;\n","const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\n\n// used for rendering the [Content_Types].xml file\n// not used for parsing\nclass ContentTypesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('Types', ContentTypesXform.PROPERTY_ATTRIBUTES);\n\n const mediaHash = {};\n (model.media || []).forEach(medium => {\n if (medium.type === 'image') {\n const imageType = medium.extension;\n if (!mediaHash[imageType]) {\n mediaHash[imageType] = true;\n xmlStream.leafNode('Default', {Extension: imageType, ContentType: `image/${imageType}`});\n }\n }\n });\n\n xmlStream.leafNode('Default', {\n Extension: 'rels',\n ContentType: 'application/vnd.openxmlformats-package.relationships+xml',\n });\n xmlStream.leafNode('Default', {Extension: 'xml', ContentType: 'application/xml'});\n\n xmlStream.leafNode('Override', {\n PartName: '/xl/workbook.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml',\n });\n\n model.worksheets.forEach(worksheet => {\n const name = `/xl/worksheets/sheet${worksheet.id}.xml`;\n xmlStream.leafNode('Override', {\n PartName: name,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml',\n });\n });\n\n xmlStream.leafNode('Override', {\n PartName: '/xl/theme/theme1.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml',\n });\n xmlStream.leafNode('Override', {\n PartName: '/xl/styles.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml',\n });\n\n const hasSharedStrings = model.sharedStrings && model.sharedStrings.count;\n if (hasSharedStrings) {\n xmlStream.leafNode('Override', {\n PartName: '/xl/sharedStrings.xml',\n ContentType:\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml',\n });\n }\n\n if (model.tables) {\n model.tables.forEach(table => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/tables/${table.target}`,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml',\n });\n });\n }\n\n if (model.drawings) {\n model.drawings.forEach(drawing => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/drawings/${drawing.name}.xml`,\n ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml',\n });\n });\n }\n\n if (model.commentRefs) {\n xmlStream.leafNode('Default', {\n Extension: 'vml',\n ContentType: 'application/vnd.openxmlformats-officedocument.vmlDrawing',\n });\n\n model.commentRefs.forEach(({commentName}) => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/${commentName}.xml`,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml',\n });\n });\n }\n\n xmlStream.leafNode('Override', {\n PartName: '/docProps/core.xml',\n ContentType: 'application/vnd.openxmlformats-package.core-properties+xml',\n });\n xmlStream.leafNode('Override', {\n PartName: '/docProps/app.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.extended-properties+xml',\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen() {\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nContentTypesXform.PROPERTY_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/package/2006/content-types',\n};\n\nmodule.exports = ContentTypesXform;\n","const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst DateXform = require('../simple/date-xform');\nconst StringXform = require('../simple/string-xform');\nconst IntegerXform = require('../simple/integer-xform');\n\nclass CoreXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'dc:creator': new StringXform({tag: 'dc:creator'}),\n 'dc:title': new StringXform({tag: 'dc:title'}),\n 'dc:subject': new StringXform({tag: 'dc:subject'}),\n 'dc:description': new StringXform({tag: 'dc:description'}),\n 'dc:identifier': new StringXform({tag: 'dc:identifier'}),\n 'dc:language': new StringXform({tag: 'dc:language'}),\n 'cp:keywords': new StringXform({tag: 'cp:keywords'}),\n 'cp:category': new StringXform({tag: 'cp:category'}),\n 'cp:lastModifiedBy': new StringXform({tag: 'cp:lastModifiedBy'}),\n 'cp:lastPrinted': new DateXform({tag: 'cp:lastPrinted', format: CoreXform.DateFormat}),\n 'cp:revision': new IntegerXform({tag: 'cp:revision'}),\n 'cp:version': new StringXform({tag: 'cp:version'}),\n 'cp:contentStatus': new StringXform({tag: 'cp:contentStatus'}),\n 'cp:contentType': new StringXform({tag: 'cp:contentType'}),\n 'dcterms:created': new DateXform({\n tag: 'dcterms:created',\n attrs: CoreXform.DateAttrs,\n format: CoreXform.DateFormat,\n }),\n 'dcterms:modified': new DateXform({\n tag: 'dcterms:modified',\n attrs: CoreXform.DateAttrs,\n format: CoreXform.DateFormat,\n }),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('cp:coreProperties', CoreXform.CORE_PROPERTY_ATTRIBUTES);\n\n this.map['dc:creator'].render(xmlStream, model.creator);\n this.map['dc:title'].render(xmlStream, model.title);\n this.map['dc:subject'].render(xmlStream, model.subject);\n this.map['dc:description'].render(xmlStream, model.description);\n this.map['dc:identifier'].render(xmlStream, model.identifier);\n this.map['dc:language'].render(xmlStream, model.language);\n this.map['cp:keywords'].render(xmlStream, model.keywords);\n this.map['cp:category'].render(xmlStream, model.category);\n this.map['cp:lastModifiedBy'].render(xmlStream, model.lastModifiedBy);\n this.map['cp:lastPrinted'].render(xmlStream, model.lastPrinted);\n this.map['cp:revision'].render(xmlStream, model.revision);\n this.map['cp:version'].render(xmlStream, model.version);\n this.map['cp:contentStatus'].render(xmlStream, model.contentStatus);\n this.map['cp:contentType'].render(xmlStream, model.contentType);\n this.map['dcterms:created'].render(xmlStream, model.created);\n this.map['dcterms:modified'].render(xmlStream, model.modified);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'cp:coreProperties':\n case 'coreProperties':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'cp:coreProperties':\n case 'coreProperties':\n this.model = {\n creator: this.map['dc:creator'].model,\n title: this.map['dc:title'].model,\n subject: this.map['dc:subject'].model,\n description: this.map['dc:description'].model,\n identifier: this.map['dc:identifier'].model,\n language: this.map['dc:language'].model,\n keywords: this.map['cp:keywords'].model,\n category: this.map['cp:category'].model,\n lastModifiedBy: this.map['cp:lastModifiedBy'].model,\n lastPrinted: this.map['cp:lastPrinted'].model,\n revision: this.map['cp:revision'].model,\n contentStatus: this.map['cp:contentStatus'].model,\n contentType: this.map['cp:contentType'].model,\n created: this.map['dcterms:created'].model,\n modified: this.map['dcterms:modified'].model,\n };\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nCoreXform.DateFormat = function(dt) {\n return dt.toISOString().replace(/[.]\\d{3}/, '');\n};\nCoreXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\n\nCoreXform.CORE_PROPERTY_ATTRIBUTES = {\n 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',\n 'xmlns:dcterms': 'http://purl.org/dc/terms/',\n 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/',\n 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n};\n\nmodule.exports = CoreXform;\n","const BaseXform = require('../base-xform');\n\nclass RelationshipXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('Relationship', model);\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'Relationship':\n this.model = node.attributes;\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = RelationshipXform;\n","const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\n\nconst RelationshipXform = require('./relationship-xform');\n\nclass RelationshipsXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n Relationship: new RelationshipXform(),\n };\n }\n\n render(xmlStream, model) {\n model = model || this._values;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('Relationships', RelationshipsXform.RELATIONSHIPS_ATTRIBUTES);\n\n model.forEach(relationship => {\n this.map.Relationship.render(xmlStream, relationship);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'Relationships':\n this.model = [];\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'Relationships':\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nRelationshipsXform.RELATIONSHIPS_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships',\n};\n\nmodule.exports = RelationshipsXform;\n","const BaseXform = require('../base-xform');\n\nclass BaseCellAnchorXform extends BaseXform {\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n range: {\n editAs: node.attributes.editAs || 'oneCell',\n },\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n reconcilePicture(model, options) {\n if (model && model.rId) {\n const rel = options.rels[model.rId];\n const match = rel.Target.match(/.*\\/media\\/(.+[.][a-zA-Z]{3,4})/);\n if (match) {\n const name = match[1];\n const mediaId = options.mediaIndex[name];\n return options.media[mediaId];\n }\n }\n return undefined;\n }\n}\n\nmodule.exports = BaseCellAnchorXform;\n","const BaseXform = require('../base-xform');\nconst BlipXform = require('./blip-xform');\n\nclass BlipFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'a:blip': new BlipXform(),\n };\n }\n\n get tag() {\n return 'xdr:blipFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['a:blip'].render(xmlStream, model);\n\n // TODO: options for this + parsing\n xmlStream.openNode('a:stretch');\n xmlStream.leafNode('a:fillRect');\n xmlStream.closeNode();\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['a:blip'].model;\n return false;\n\n default:\n return true;\n }\n }\n}\n\nmodule.exports = BlipFillXform;\n","const BaseXform = require('../base-xform');\n\nclass BlipXform extends BaseXform {\n get tag() {\n return 'a:blip';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'r:embed': model.rId,\n cstate: 'print',\n });\n // TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:embed'],\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = BlipXform;\n","const BaseXform = require('../base-xform');\n\nclass CNvPicPrXform extends BaseXform {\n get tag() {\n return 'xdr:cNvPicPr';\n }\n\n render(xmlStream) {\n xmlStream.openNode(this.tag);\n xmlStream.leafNode('a:picLocks', {\n noChangeAspect: '1',\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = CNvPicPrXform;\n","const BaseXform = require('../base-xform');\nconst HlickClickXform = require('./hlink-click-xform');\nconst ExtLstXform = require('./ext-lst-xform');\n\nclass CNvPrXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'a:hlinkClick': new HlickClickXform(),\n 'a:extLst': new ExtLstXform(),\n };\n }\n\n get tag() {\n return 'xdr:cNvPr';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n id: model.index,\n name: `Picture ${model.index}`,\n });\n this.map['a:hlinkClick'].render(xmlStream, model);\n this.map['a:extLst'].render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['a:hlinkClick'].model;\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = CNvPrXform;\n","const BaseXform = require('../base-xform');\nconst IntegerXform = require('../simple/integer-xform');\n\nclass CellPositionXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.map = {\n 'xdr:col': new IntegerXform({tag: 'xdr:col', zero: true}),\n 'xdr:colOff': new IntegerXform({tag: 'xdr:colOff', zero: true}),\n 'xdr:row': new IntegerXform({tag: 'xdr:row', zero: true}),\n 'xdr:rowOff': new IntegerXform({tag: 'xdr:rowOff', zero: true}),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['xdr:col'].render(xmlStream, model.nativeCol);\n this.map['xdr:colOff'].render(xmlStream, model.nativeColOff);\n\n this.map['xdr:row'].render(xmlStream, model.nativeRow);\n this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = {\n nativeCol: this.map['xdr:col'].model,\n nativeColOff: this.map['xdr:colOff'].model,\n nativeRow: this.map['xdr:row'].model,\n nativeRowOff: this.map['xdr:rowOff'].model,\n };\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n}\n\nmodule.exports = CellPositionXform;\n","const colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst TwoCellAnchorXform = require('./two-cell-anchor-xform');\nconst OneCellAnchorXform = require('./one-cell-anchor-xform');\n\nfunction getAnchorType(model) {\n const range = typeof model.range === 'string' ? colCache.decode(model.range) : model.range;\n\n return range.br ? 'xdr:twoCellAnchor' : 'xdr:oneCellAnchor';\n}\n\nclass DrawingXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:twoCellAnchor': new TwoCellAnchorXform(),\n 'xdr:oneCellAnchor': new OneCellAnchorXform(),\n };\n }\n\n prepare(model) {\n model.anchors.forEach((item, index) => {\n item.anchorType = getAnchorType(item);\n const anchor = this.map[item.anchorType];\n anchor.prepare(item, {index});\n });\n }\n\n get tag() {\n return 'xdr:wsDr';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, DrawingXform.DRAWING_ATTRIBUTES);\n\n model.anchors.forEach(item => {\n const anchor = this.map[item.anchorType];\n anchor.render(xmlStream, item);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n anchors: [],\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.anchors.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.anchors.forEach(anchor => {\n if (anchor.br) {\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\n } else {\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\n }\n });\n }\n}\n\nDrawingXform.DRAWING_ATTRIBUTES = {\n 'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing',\n 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\n};\n\nmodule.exports = DrawingXform;\n","const BaseXform = require('../base-xform');\n\nclass ExtLstXform extends BaseXform {\n get tag() {\n return 'a:extLst';\n }\n\n render(xmlStream) {\n xmlStream.openNode(this.tag);\n xmlStream.openNode('a:ext', {\n uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}',\n });\n xmlStream.leafNode('a16:creationId', {\n 'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main',\n id: '{00000000-0008-0000-0000-000002000000}',\n });\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = ExtLstXform;\n","const BaseXform = require('../base-xform');\n\n/** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */\nconst EMU_PER_PIXEL_AT_96_DPI = 9525;\n\nclass ExtXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.map = {};\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n const width = Math.floor(model.width * EMU_PER_PIXEL_AT_96_DPI);\n const height = Math.floor(model.height * EMU_PER_PIXEL_AT_96_DPI);\n\n xmlStream.addAttribute('cx', width);\n xmlStream.addAttribute('cy', height);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n width: parseInt(node.attributes.cx || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\n height: parseInt(node.attributes.cy || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\n };\n return true;\n }\n return false;\n }\n\n parseText(/* text */) {}\n\n parseClose(/* name */) {\n return false;\n }\n}\n\nmodule.exports = ExtXform;\n","const BaseXform = require('../base-xform');\n\nclass HLinkClickXform extends BaseXform {\n get tag() {\n return 'a:hlinkClick';\n }\n\n render(xmlStream, model) {\n if (!(model.hyperlinks && model.hyperlinks.rId)) {\n return;\n }\n xmlStream.leafNode(this.tag, {\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'r:id': model.hyperlinks.rId,\n tooltip: model.hyperlinks.tooltip,\n });\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n hyperlinks: {\n rId: node.attributes['r:id'],\n tooltip: node.attributes.tooltip,\n },\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = HLinkClickXform;\n","const BaseXform = require('../base-xform');\nconst CNvPrXform = require('./c-nv-pr-xform');\nconst CNvPicPrXform = require('./c-nv-pic-pr-xform');\n\nclass NvPicPrXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:cNvPr': new CNvPrXform(),\n 'xdr:cNvPicPr': new CNvPicPrXform(),\n };\n }\n\n get tag() {\n return 'xdr:nvPicPr';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n this.map['xdr:cNvPr'].render(xmlStream, model);\n this.map['xdr:cNvPicPr'].render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['xdr:cNvPr'].model;\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = NvPicPrXform;\n","const BaseCellAnchorXform = require('./base-cell-anchor-xform');\nconst StaticXform = require('../static-xform');\n\nconst CellPositionXform = require('./cell-position-xform');\nconst ExtXform = require('./ext-xform');\nconst PicXform = require('./pic-xform');\n\nclass OneCellAnchorXform extends BaseCellAnchorXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\n 'xdr:ext': new ExtXform({tag: 'xdr:ext'}),\n 'xdr:pic': new PicXform(),\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\n };\n }\n\n get tag() {\n return 'xdr:oneCellAnchor';\n }\n\n prepare(model, options) {\n this.map['xdr:pic'].prepare(model.picture, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\n\n this.map['xdr:from'].render(xmlStream, model.range.tl);\n this.map['xdr:ext'].render(xmlStream, model.range.ext);\n this.map['xdr:pic'].render(xmlStream, model.picture);\n this.map['xdr:clientData'].render(xmlStream, {});\n\n xmlStream.closeNode();\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.range.tl = this.map['xdr:from'].model;\n this.model.range.ext = this.map['xdr:ext'].model;\n this.model.picture = this.map['xdr:pic'].model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.medium = this.reconcilePicture(model.picture, options);\n }\n}\n\nmodule.exports = OneCellAnchorXform;\n","const BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\n\nconst BlipFillXform = require('./blip-fill-xform');\nconst NvPicPrXform = require('./nv-pic-pr-xform');\n\nconst spPrJSON = require('./sp-pr');\n\nclass PicXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:nvPicPr': new NvPicPrXform(),\n 'xdr:blipFill': new BlipFillXform(),\n 'xdr:spPr': new StaticXform(spPrJSON),\n };\n }\n\n get tag() {\n return 'xdr:pic';\n }\n\n prepare(model, options) {\n model.index = options.index + 1;\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['xdr:nvPicPr'].render(xmlStream, model);\n this.map['xdr:blipFill'].render(xmlStream, model);\n this.map['xdr:spPr'].render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.mergeModel(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n}\n\nmodule.exports = PicXform;\n","module.exports = {\n tag: 'xdr:spPr',\n c: [\n {\n tag: 'a:xfrm',\n c: [\n {tag: 'a:off', $: {x: '0', y: '0'}},\n {tag: 'a:ext', $: {cx: '0', cy: '0'}},\n ],\n },\n {\n tag: 'a:prstGeom',\n $: {prst: 'rect'},\n c: [{tag: 'a:avLst'}],\n },\n ],\n};\n","const BaseCellAnchorXform = require('./base-cell-anchor-xform');\nconst StaticXform = require('../static-xform');\n\nconst CellPositionXform = require('./cell-position-xform');\nconst PicXform = require('./pic-xform');\n\nclass TwoCellAnchorXform extends BaseCellAnchorXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\n 'xdr:to': new CellPositionXform({tag: 'xdr:to'}),\n 'xdr:pic': new PicXform(),\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\n };\n }\n\n get tag() {\n return 'xdr:twoCellAnchor';\n }\n\n prepare(model, options) {\n this.map['xdr:pic'].prepare(model.picture, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\n\n this.map['xdr:from'].render(xmlStream, model.range.tl);\n this.map['xdr:to'].render(xmlStream, model.range.br);\n this.map['xdr:pic'].render(xmlStream, model.picture);\n this.map['xdr:clientData'].render(xmlStream, {});\n\n xmlStream.closeNode();\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.range.tl = this.map['xdr:from'].model;\n this.model.range.br = this.map['xdr:to'].model;\n this.model.picture = this.map['xdr:pic'].model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.medium = this.reconcilePicture(model.picture, options);\n }\n}\n\nmodule.exports = TwoCellAnchorXform;\n","const BaseXform = require('./base-xform');\n\nclass ListXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.always = !!options.always;\n this.count = options.count;\n this.empty = options.empty;\n this.$count = options.$count || 'count';\n this.$ = options.$;\n this.childXform = options.childXform;\n this.maxItems = options.maxItems;\n }\n\n prepare(model, options) {\n const {childXform} = this;\n if (model) {\n model.forEach((childModel, index) => {\n options.index = index;\n childXform.prepare(childModel, options);\n });\n }\n }\n\n render(xmlStream, model) {\n if (this.always || (model && model.length)) {\n xmlStream.openNode(this.tag, this.$);\n if (this.count) {\n xmlStream.addAttribute(this.$count, (model && model.length) || 0);\n }\n\n const {childXform} = this;\n (model || []).forEach((childModel, index) => {\n childXform.render(xmlStream, childModel, index);\n });\n\n xmlStream.closeNode();\n } else if (this.empty) {\n xmlStream.leafNode(this.tag);\n }\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.model = [];\n return true;\n default:\n if (this.childXform.parseOpen(node)) {\n this.parser = this.childXform;\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n\n if (this.maxItems && this.model.length > this.maxItems) {\n throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);\n }\n }\n return true;\n }\n\n return false;\n }\n\n reconcile(model, options) {\n if (model) {\n const {childXform} = this;\n model.forEach(childModel => {\n childXform.reconcile(childModel, options);\n });\n }\n }\n}\n\nmodule.exports = ListXform;\n","const colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\n\nclass AutoFilterXform extends BaseXform {\n get tag() {\n return 'autoFilter';\n }\n\n render(xmlStream, model) {\n if (model) {\n if (typeof model === 'string') {\n // assume range\n xmlStream.leafNode('autoFilter', {ref: model});\n } else {\n const getAddress = function(addr) {\n if (typeof addr === 'string') {\n return addr;\n }\n return colCache.getAddress(addr.row, addr.column).address;\n };\n\n const firstAddress = getAddress(model.from);\n const secondAddress = getAddress(model.to);\n if (firstAddress && secondAddress) {\n xmlStream.leafNode('autoFilter', {ref: `${firstAddress}:${secondAddress}`});\n }\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'autoFilter') {\n this.model = node.attributes.ref;\n }\n }\n}\n\nmodule.exports = AutoFilterXform;\n","const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\nconst Enums = require('../../../doc/enums');\n\nconst RichTextXform = require('../strings/rich-text-xform');\n\nfunction getValueType(v) {\n if (v === null || v === undefined) {\n return Enums.ValueType.Null;\n }\n if (v instanceof String || typeof v === 'string') {\n return Enums.ValueType.String;\n }\n if (typeof v === 'number') {\n return Enums.ValueType.Number;\n }\n if (typeof v === 'boolean') {\n return Enums.ValueType.Boolean;\n }\n if (v instanceof Date) {\n return Enums.ValueType.Date;\n }\n if (v.text && v.hyperlink) {\n return Enums.ValueType.Hyperlink;\n }\n if (v.formula) {\n return Enums.ValueType.Formula;\n }\n if (v.error) {\n return Enums.ValueType.Error;\n }\n throw new Error('I could not understand type of value');\n}\n\nfunction getEffectiveCellType(cell) {\n switch (cell.type) {\n case Enums.ValueType.Formula:\n return getValueType(cell.result);\n default:\n return cell.type;\n }\n}\n\nclass CellXform extends BaseXform {\n constructor() {\n super();\n\n this.richTextXForm = new RichTextXform();\n }\n\n get tag() {\n return 'c';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style || {}, getEffectiveCellType(model));\n if (styleId) {\n model.styleId = styleId;\n }\n\n if (model.comment) {\n options.comments.push({...model.comment, ref: model.address});\n }\n\n switch (model.type) {\n case Enums.ValueType.String:\n case Enums.ValueType.RichText:\n if (options.sharedStrings) {\n model.ssId = options.sharedStrings.add(model.value);\n }\n break;\n\n case Enums.ValueType.Date:\n if (options.date1904) {\n model.date1904 = true;\n }\n break;\n\n case Enums.ValueType.Hyperlink:\n if (options.sharedStrings && model.text !== undefined && model.text !== null) {\n model.ssId = options.sharedStrings.add(model.text);\n }\n options.hyperlinks.push({\n address: model.address,\n target: model.hyperlink,\n tooltip: model.tooltip,\n });\n break;\n\n case Enums.ValueType.Merge:\n options.merges.add(model);\n break;\n\n case Enums.ValueType.Formula:\n if (options.date1904) {\n // in case valueType is date\n model.date1904 = true;\n }\n\n if (model.shareType === 'shared') {\n model.si = options.siFormulae++;\n }\n\n if (model.formula) {\n options.formulae[model.address] = model;\n } else if (model.sharedFormula) {\n const master = options.formulae[model.sharedFormula];\n if (!master) {\n throw new Error(\n `Shared Formula master must exist above and or left of clone for cell ${model.address}`\n );\n }\n if (master.si === undefined) {\n master.shareType = 'shared';\n master.si = options.siFormulae++;\n master.range = new Range(master.address, model.address);\n } else if (master.range) {\n master.range.expandToAddress(model.address);\n }\n model.si = master.si;\n }\n break;\n\n default:\n break;\n }\n }\n\n renderFormula(xmlStream, model) {\n let attrs = null;\n switch (model.shareType) {\n case 'shared':\n attrs = {\n t: 'shared',\n ref: model.ref || model.range.range,\n si: model.si,\n };\n break;\n\n case 'array':\n attrs = {\n t: 'array',\n ref: model.ref,\n };\n break;\n\n default:\n if (model.si !== undefined) {\n attrs = {\n t: 'shared',\n si: model.si,\n };\n }\n break;\n }\n\n switch (getValueType(model.result)) {\n case Enums.ValueType.Null: // ?\n xmlStream.leafNode('f', attrs, model.formula);\n break;\n\n case Enums.ValueType.String:\n // oddly, formula results don't ever use shared strings\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result);\n break;\n\n case Enums.ValueType.Number:\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result);\n break;\n\n case Enums.ValueType.Boolean:\n xmlStream.addAttribute('t', 'b');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result ? 1 : 0);\n break;\n\n case Enums.ValueType.Error:\n xmlStream.addAttribute('t', 'e');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result.error);\n break;\n\n case Enums.ValueType.Date:\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, utils.dateToExcel(model.result, model.date1904));\n break;\n\n // case Enums.ValueType.Hyperlink: // ??\n // case Enums.ValueType.Formula:\n default:\n throw new Error('I could not understand type of value');\n }\n }\n\n render(xmlStream, model) {\n if (model.type === Enums.ValueType.Null && !model.styleId) {\n // if null and no style, exit\n return;\n }\n\n xmlStream.openNode('c');\n xmlStream.addAttribute('r', model.address);\n\n if (model.styleId) {\n xmlStream.addAttribute('s', model.styleId);\n }\n\n switch (model.type) {\n case Enums.ValueType.Null:\n break;\n\n case Enums.ValueType.Number:\n xmlStream.leafNode('v', null, model.value);\n break;\n\n case Enums.ValueType.Boolean:\n xmlStream.addAttribute('t', 'b');\n xmlStream.leafNode('v', null, model.value ? '1' : '0');\n break;\n\n case Enums.ValueType.Error:\n xmlStream.addAttribute('t', 'e');\n xmlStream.leafNode('v', null, model.value.error);\n break;\n\n case Enums.ValueType.String:\n case Enums.ValueType.RichText:\n if (model.ssId !== undefined) {\n xmlStream.addAttribute('t', 's');\n xmlStream.leafNode('v', null, model.ssId);\n } else if (model.value && model.value.richText) {\n xmlStream.addAttribute('t', 'inlineStr');\n xmlStream.openNode('is');\n model.value.richText.forEach(text => {\n this.richTextXForm.render(xmlStream, text);\n });\n xmlStream.closeNode('is');\n } else {\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('v', null, model.value);\n }\n break;\n\n case Enums.ValueType.Date:\n xmlStream.leafNode('v', null, utils.dateToExcel(model.value, model.date1904));\n break;\n\n case Enums.ValueType.Hyperlink:\n if (model.ssId !== undefined) {\n xmlStream.addAttribute('t', 's');\n xmlStream.leafNode('v', null, model.ssId);\n } else {\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('v', null, model.text);\n }\n break;\n\n case Enums.ValueType.Formula:\n this.renderFormula(xmlStream, model);\n break;\n\n case Enums.ValueType.Merge:\n // nothing to add\n break;\n\n default:\n break;\n }\n\n xmlStream.closeNode(); // \n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'c':\n // const address = colCache.decodeAddress(node.attributes.r);\n this.model = {\n address: node.attributes.r,\n };\n this.t = node.attributes.t;\n if (node.attributes.s) {\n this.model.styleId = parseInt(node.attributes.s, 10);\n }\n return true;\n\n case 'f':\n this.currentNode = 'f';\n this.model.si = node.attributes.si;\n this.model.shareType = node.attributes.t;\n this.model.ref = node.attributes.ref;\n return true;\n\n case 'v':\n this.currentNode = 'v';\n return true;\n\n case 't':\n this.currentNode = 't';\n return true;\n\n case 'r':\n this.parser = this.richTextXForm;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n return;\n }\n switch (this.currentNode) {\n case 'f':\n this.model.formula = this.model.formula ? this.model.formula + text : text;\n break;\n case 'v':\n case 't':\n if (this.model.value && this.model.value.richText) {\n this.model.value.richText.text = this.model.value.richText.text\n ? this.model.value.richText.text + text\n : text;\n } else {\n this.model.value = this.model.value ? this.model.value + text : text;\n }\n break;\n default:\n break;\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'c': {\n const {model} = this;\n\n // first guess on cell type\n if (model.formula || model.shareType) {\n model.type = Enums.ValueType.Formula;\n if (model.value) {\n if (this.t === 'str') {\n model.result = utils.xmlDecode(model.value);\n } else if (this.t === 'b') {\n model.result = parseInt(model.value, 10) !== 0;\n } else if (this.t === 'e') {\n model.result = {error: model.value};\n } else {\n model.result = parseFloat(model.value);\n }\n model.value = undefined;\n }\n } else if (model.value !== undefined) {\n switch (this.t) {\n case 's':\n model.type = Enums.ValueType.String;\n model.value = parseInt(model.value, 10);\n break;\n case 'str':\n model.type = Enums.ValueType.String;\n model.value = utils.xmlDecode(model.value);\n break;\n case 'inlineStr':\n model.type = Enums.ValueType.String;\n break;\n case 'b':\n model.type = Enums.ValueType.Boolean;\n model.value = parseInt(model.value, 10) !== 0;\n break;\n case 'e':\n model.type = Enums.ValueType.Error;\n model.value = {error: model.value};\n break;\n default:\n model.type = Enums.ValueType.Number;\n model.value = parseFloat(model.value);\n break;\n }\n } else if (model.styleId) {\n model.type = Enums.ValueType.Null;\n } else {\n model.type = Enums.ValueType.Merge;\n }\n return false;\n }\n\n case 'f':\n case 'v':\n case 'is':\n this.currentNode = undefined;\n return true;\n\n case 't':\n if (this.parser) {\n this.parser.parseClose(name);\n return true;\n }\n this.currentNode = undefined;\n return true;\n\n case 'r':\n this.model.value = this.model.value || {};\n this.model.value.richText = this.model.value.richText || [];\n this.model.value.richText.push(this.parser.model);\n this.parser = undefined;\n this.currentNode = undefined;\n return true;\n\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n return true;\n }\n return false;\n }\n }\n\n reconcile(model, options) {\n const style = model.styleId && options.styles && options.styles.getStyleModel(model.styleId);\n if (style) {\n model.style = style;\n }\n if (model.styleId !== undefined) {\n model.styleId = undefined;\n }\n\n switch (model.type) {\n case Enums.ValueType.String:\n if (typeof model.value === 'number') {\n if (options.sharedStrings) {\n model.value = options.sharedStrings.getString(model.value);\n }\n }\n if (model.value.richText) {\n model.type = Enums.ValueType.RichText;\n }\n break;\n\n case Enums.ValueType.Number:\n if (style && utils.isDateFmt(style.numFmt)) {\n model.type = Enums.ValueType.Date;\n model.value = utils.excelToDate(model.value, options.date1904);\n }\n break;\n\n case Enums.ValueType.Formula:\n if (model.result !== undefined && style && utils.isDateFmt(style.numFmt)) {\n model.result = utils.excelToDate(model.result, options.date1904);\n }\n if (model.shareType === 'shared') {\n if (model.ref) {\n // master\n options.formulae[model.si] = model.address;\n } else {\n // slave\n model.sharedFormula = options.formulae[model.si];\n delete model.shareType;\n }\n delete model.si;\n }\n break;\n\n default:\n break;\n }\n\n // look for hyperlink\n const hyperlink = options.hyperlinkMap[model.address];\n if (hyperlink) {\n if (model.type === Enums.ValueType.Formula) {\n model.text = model.result;\n model.result = undefined;\n } else {\n model.text = model.value;\n model.value = undefined;\n }\n model.type = Enums.ValueType.Hyperlink;\n model.hyperlink = hyperlink;\n }\n\n const comment = options.commentsMap && options.commentsMap[model.address];\n if (comment) {\n model.comment = comment;\n }\n }\n}\n\nmodule.exports = CellXform;\n","const BaseXform = require('../../base-xform');\n\nclass CfIconExtXform extends BaseXform {\n get tag() {\n return 'x14:cfIcon';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n iconSet: model.iconSet,\n iconId: model.iconId,\n });\n }\n\n parseOpen({attributes}) {\n this.model = {\n iconSet: attributes.iconSet,\n iconId: BaseXform.toIntValue(attributes.iconId),\n };\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = CfIconExtXform;\n","const {v4: uuidv4} = require('uuid');\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst DatabarExtXform = require('./databar-ext-xform');\nconst IconSetExtXform = require('./icon-set-ext-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nclass CfRuleExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:dataBar': (this.databarXform = new DatabarExtXform()),\n 'x14:iconSet': (this.iconSetXform = new IconSetExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfRule';\n }\n\n static isExt(rule) {\n // is this rule primitive?\n if (rule.type === 'dataBar') {\n return DatabarExtXform.isExt(rule);\n }\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return true;\n }\n }\n return false;\n }\n\n prepare(model) {\n if (CfRuleExtXform.isExt(model)) {\n model.x14Id = `{${uuidv4()}}`.toUpperCase();\n }\n }\n\n render(xmlStream, model) {\n if (!CfRuleExtXform.isExt(model)) {\n return;\n }\n\n switch (model.type) {\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n }\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n id: model.x14Id,\n });\n\n this.databarXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n id: model.x14Id || `{${uuidv4()}}`,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n type: attributes.type,\n x14Id: attributes.id,\n priority: BaseXform.toIntValue(attributes.priority),\n };\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = CfRuleExtXform;\n","const CompositeXform = require('../../composite-xform');\n\nconst FExtXform = require('./f-ext-xform');\n\nclass CfvoExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'xm:f': (this.fExtXform = new FExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfvo';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.type,\n });\n if (model.value !== undefined) {\n this.fExtXform.render(xmlStream, model.value);\n }\n xmlStream.closeNode();\n }\n\n createNewModel(node) {\n return {\n type: node.attributes.type,\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'xm:f':\n this.model.value = parser.model ? parseFloat(parser.model) : 0;\n break;\n }\n }\n}\n\nmodule.exports = CfvoExtXform;\n","const CompositeXform = require('../../composite-xform');\n\nconst SqRefExtXform = require('./sqref-ext-xform');\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\n\nclass ConditionalFormattingExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'xm:sqref': (this.sqRef = new SqRefExtXform()),\n 'x14:cfRule': (this.cfRule = new CfRuleExtXform()),\n };\n }\n\n get tag() {\n return 'x14:conditionalFormatting';\n }\n\n prepare(model, options) {\n model.rules.forEach(rule => {\n this.cfRule.prepare(rule, options);\n });\n }\n\n render(xmlStream, model) {\n if (!model.rules.some(CfRuleExtXform.isExt)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n 'xmlns:xm': 'http://schemas.microsoft.com/office/excel/2006/main',\n });\n\n model.rules.filter(CfRuleExtXform.isExt).forEach(rule => this.cfRule.render(xmlStream, rule));\n\n // for some odd reason, Excel needs the node to be after the rules\n this.sqRef.render(xmlStream, model.ref);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {\n rules: [],\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'xm:sqref':\n this.model.ref = parser.model;\n break;\n\n case 'x14:cfRule':\n this.model.rules.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = ConditionalFormattingExtXform;\n","const CompositeXform = require('../../composite-xform');\n\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\nconst ConditionalFormattingExtXform = require('./conditional-formatting-ext-xform');\n\nclass ConditionalFormattingsExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:conditionalFormatting': (this.cfXform = new ConditionalFormattingExtXform()),\n };\n }\n\n get tag() {\n return 'x14:conditionalFormattings';\n }\n\n hasContent(model) {\n if (model.hasExtContent === undefined) {\n model.hasExtContent = model.some(cf => cf.rules.some(CfRuleExtXform.isExt));\n }\n return model.hasExtContent;\n }\n\n prepare(model, options) {\n model.forEach(cf => {\n this.cfXform.prepare(cf, options);\n });\n }\n\n render(xmlStream, model) {\n if (this.hasContent(model)) {\n xmlStream.openNode(this.tag);\n model.forEach(cf => this.cfXform.render(xmlStream, cf));\n xmlStream.closeNode();\n }\n }\n\n createNewModel() {\n return [];\n }\n\n onParserClose(name, parser) {\n // model is array of conditional formatting objects\n this.model.push(parser.model);\n }\n}\n\nmodule.exports = ConditionalFormattingsExtXform;\n","const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoExtXform = require('./cfvo-ext-xform');\n\nclass DatabarExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\n 'x14:borderColor': (this.borderColorXform = new ColorXform('x14:borderColor')),\n 'x14:negativeBorderColor': (this.negativeBorderColorXform = new ColorXform(\n 'x14:negativeBorderColor'\n )),\n 'x14:negativeFillColor': (this.negativeFillColorXform = new ColorXform(\n 'x14:negativeFillColor'\n )),\n 'x14:axisColor': (this.axisColorXform = new ColorXform('x14:axisColor')),\n };\n }\n\n static isExt(rule) {\n // not all databars need ext\n // TODO: refine this\n return !rule.gradient;\n }\n\n get tag() {\n return 'x14:dataBar';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n minLength: BaseXform.toIntAttribute(model.minLength, 0, true),\n maxLength: BaseXform.toIntAttribute(model.maxLength, 100, true),\n border: BaseXform.toBoolAttribute(model.border, false),\n gradient: BaseXform.toBoolAttribute(model.gradient, true),\n negativeBarColorSameAsPositive: BaseXform.toBoolAttribute(\n model.negativeBarColorSameAsPositive,\n true\n ),\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolAttribute(\n model.negativeBarBorderColorSameAsPositive,\n true\n ),\n axisPosition: BaseXform.toAttribute(model.axisPosition, 'auto'),\n direction: BaseXform.toAttribute(model.direction, 'leftToRight'),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n this.borderColorXform.render(xmlStream, model.borderColor);\n this.negativeBorderColorXform.render(xmlStream, model.negativeBorderColor);\n this.negativeFillColorXform.render(xmlStream, model.negativeFillColor);\n this.axisColorXform.render(xmlStream, model.axisColor);\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n cfvo: [],\n minLength: BaseXform.toIntValue(attributes.minLength, 0),\n maxLength: BaseXform.toIntValue(attributes.maxLength, 100),\n border: BaseXform.toBoolValue(attributes.border, false),\n gradient: BaseXform.toBoolValue(attributes.gradient, true),\n negativeBarColorSameAsPositive: BaseXform.toBoolValue(\n attributes.negativeBarColorSameAsPositive,\n true\n ),\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolValue(\n attributes.negativeBarBorderColorSameAsPositive,\n true\n ),\n axisPosition: BaseXform.toStringValue(attributes.axisPosition, 'auto'),\n direction: BaseXform.toStringValue(attributes.direction, 'leftToRight'),\n };\n }\n\n onParserClose(name, parser) {\n const [, prop] = name.split(':');\n switch (prop) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n\n default:\n this.model[prop] = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = DatabarExtXform;\n","const BaseXform = require('../../base-xform');\n\nclass FExtXform extends BaseXform {\n get tag() {\n return 'xm:f';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = FExtXform;\n","const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst CfvoExtXform = require('./cfvo-ext-xform');\nconst CfIconExtXform = require('./cf-icon-ext-xform');\n\nclass IconSetExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\n 'x14:cfIcon': (this.cfIconXform = new CfIconExtXform()),\n };\n }\n\n get tag() {\n return 'x14:iconSet';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n iconSet: BaseXform.toStringAttribute(model.iconSet),\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\n custom: BaseXform.toBoolAttribute(model.icons, false),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n if (model.icons) {\n model.icons.forEach((icon, i) => {\n icon.iconId = i;\n this.cfIconXform.render(xmlStream, icon);\n });\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n cfvo: [],\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolValue(attributes.reverse, false),\n showValue: BaseXform.toBoolValue(attributes.showValue, true),\n };\n }\n\n onParserClose(name, parser) {\n const [, prop] = name.split(':');\n switch (prop) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n\n case 'cfIcon':\n if (!this.model.icons) {\n this.model.icons = [];\n }\n this.model.icons.push(parser.model);\n break;\n\n default:\n this.model[prop] = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = IconSetExtXform;\n","const BaseXform = require('../../base-xform');\n\nclass SqrefExtXform extends BaseXform {\n get tag() {\n return 'xm:sqref';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = SqrefExtXform;\n","const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst Range = require('../../../../doc/range');\n\nconst DatabarXform = require('./databar-xform');\nconst ExtLstRefXform = require('./ext-lst-ref-xform');\nconst FormulaXform = require('./formula-xform');\nconst ColorScaleXform = require('./color-scale-xform');\nconst IconSetXform = require('./icon-set-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nconst getTextFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.operator) {\n case 'containsText':\n return `NOT(ISERROR(SEARCH(\"${model.text}\",${tl})))`;\n case 'containsBlanks':\n return `LEN(TRIM(${tl}))=0`;\n case 'notContainsBlanks':\n return `LEN(TRIM(${tl}))>0`;\n case 'containsErrors':\n return `ISERROR(${tl})`;\n case 'notContainsErrors':\n return `NOT(ISERROR(${tl}))`;\n default:\n return undefined;\n }\n};\n\nconst getTimePeriodFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.timePeriod) {\n case 'thisWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`;\n case 'lastWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`;\n case 'nextWeek':\n return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`;\n case 'yesterday':\n return `FLOOR(${tl},1)=TODAY()-1`;\n case 'today':\n return `FLOOR(${tl},1)=TODAY()`;\n case 'tomorrow':\n return `FLOOR(${tl},1)=TODAY()+1`;\n case 'last7Days':\n return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`;\n case 'lastMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`;\n case 'thisMonth':\n return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`;\n case 'nextMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`;\n default:\n return undefined;\n }\n};\n\nconst opType = attributes => {\n const {type, operator} = attributes;\n switch (type) {\n case 'containsText':\n case 'containsBlanks':\n case 'notContainsBlanks':\n case 'containsErrors':\n case 'notContainsErrors':\n return {\n type: 'containsText',\n operator: type,\n };\n\n default:\n return {type, operator};\n }\n};\n\nclass CfRuleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n dataBar: (this.databarXform = new DatabarXform()),\n extLst: (this.extLstRefXform = new ExtLstRefXform()),\n formula: (this.formulaXform = new FormulaXform()),\n colorScale: (this.colorScaleXform = new ColorScaleXform()),\n iconSet: (this.iconSetXform = new IconSetXform()),\n };\n }\n\n get tag() {\n return 'cfRule';\n }\n\n static isPrimitive(rule) {\n // is this rule primitive?\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return false;\n }\n }\n return true;\n }\n\n render(xmlStream, model) {\n switch (model.type) {\n case 'expression':\n this.renderExpression(xmlStream, model);\n break;\n case 'cellIs':\n this.renderCellIs(xmlStream, model);\n break;\n case 'top10':\n this.renderTop10(xmlStream, model);\n break;\n case 'aboveAverage':\n this.renderAboveAverage(xmlStream, model);\n break;\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'colorScale':\n this.renderColorScale(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n case 'containsText':\n this.renderText(xmlStream, model);\n break;\n case 'timePeriod':\n this.renderTimePeriod(xmlStream, model);\n break;\n }\n }\n\n renderExpression(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'expression',\n dxfId: model.dxfId,\n priority: model.priority,\n });\n\n this.formulaXform.render(xmlStream, model.formulae[0]);\n\n xmlStream.closeNode();\n }\n\n renderCellIs(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'cellIs',\n dxfId: model.dxfId,\n priority: model.priority,\n operator: model.operator,\n });\n\n model.formulae.forEach(formula => {\n this.formulaXform.render(xmlStream, formula);\n });\n\n xmlStream.closeNode();\n }\n\n renderTop10(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'top10',\n dxfId: model.dxfId,\n priority: model.priority,\n percent: BaseXform.toBoolAttribute(model.percent, false),\n bottom: BaseXform.toBoolAttribute(model.bottom, false),\n rank: BaseXform.toIntValue(model.rank, 10, true),\n });\n }\n\n renderAboveAverage(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'aboveAverage',\n dxfId: model.dxfId,\n priority: model.priority,\n aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true),\n });\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n priority: model.priority,\n });\n\n this.databarXform.render(xmlStream, model);\n this.extLstRefXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderColorScale(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'colorScale',\n priority: model.priority,\n });\n\n this.colorScaleXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n // iconset is all primitive or all extLst\n if (!CfRuleXform.isPrimitive(model)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderText(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.operator,\n dxfId: model.dxfId,\n priority: model.priority,\n operator: BaseXform.toStringAttribute(model.operator, 'containsText'),\n });\n\n const formula = getTextFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n renderTimePeriod(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'timePeriod',\n dxfId: model.dxfId,\n priority: model.priority,\n timePeriod: model.timePeriod,\n });\n\n const formula = getTimePeriodFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ...opType(attributes),\n dxfId: BaseXform.toIntValue(attributes.dxfId),\n priority: BaseXform.toIntValue(attributes.priority),\n timePeriod: attributes.timePeriod,\n percent: BaseXform.toBoolValue(attributes.percent),\n bottom: BaseXform.toBoolValue(attributes.bottom),\n rank: BaseXform.toIntValue(attributes.rank),\n aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage),\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'dataBar':\n case 'extLst':\n case 'colorScale':\n case 'iconSet':\n // merge parser model with ours\n Object.assign(this.model, parser.model);\n break;\n\n case 'formula':\n // except - formula is a string and appends to formulae\n this.model.formulae = this.model.formulae || [];\n this.model.formulae.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = CfRuleXform;\n","const BaseXform = require('../../base-xform');\n\nclass CfvoXform extends BaseXform {\n get tag() {\n return 'cfvo';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: model.type,\n val: model.value,\n });\n }\n\n parseOpen(node) {\n this.model = {\n type: node.attributes.type,\n value: BaseXform.toFloatValue(node.attributes.val),\n };\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = CfvoXform;\n","const CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoXform = require('./cfvo-xform');\n\nclass ColorScaleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n color: (this.colorXform = new ColorXform()),\n };\n }\n\n get tag() {\n return 'colorScale';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n model.color.forEach(color => {\n this.colorXform.render(xmlStream, color);\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel(node) {\n return {\n cfvo: [],\n color: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model[name].push(parser.model);\n }\n}\n\nmodule.exports = ColorScaleXform;\n","const CompositeXform = require('../../composite-xform');\n\nconst CfRuleXform = require('./cf-rule-xform');\n\nclass ConditionalFormattingXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfRule: new CfRuleXform(),\n };\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n render(xmlStream, model) {\n // if there are no primitive rules, exit now\n if (!model.rules.some(CfRuleXform.isPrimitive)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {sqref: model.ref});\n\n model.rules.forEach(rule => {\n if (CfRuleXform.isPrimitive(rule)) {\n rule.ref = model.ref;\n this.map.cfRule.render(xmlStream, rule);\n }\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ref: attributes.sqref,\n rules: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model.rules.push(parser.model);\n }\n}\n\nmodule.exports = ConditionalFormattingXform;\n","const BaseXform = require('../../base-xform');\n\nconst ConditionalFormattingXform = require('./conditional-formatting-xform');\n\nclass ConditionalFormattingsXform extends BaseXform {\n constructor() {\n super();\n\n this.cfXform = new ConditionalFormattingXform();\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n reset() {\n this.model = [];\n }\n\n prepare(model, options) {\n // ensure each rule has a priority value\n let nextPriority = model.reduce(\n (p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)),\n 1\n );\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (!rule.priority) {\n rule.priority = nextPriority++;\n }\n\n if (rule.style) {\n rule.dxfId = options.styles.addDxfStyle(rule.style);\n }\n });\n });\n }\n\n render(xmlStream, model) {\n model.forEach(cf => {\n this.cfXform.render(xmlStream, cf);\n });\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case 'conditionalFormatting':\n this.parser = this.cfXform;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n return false;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (rule.dxfId !== undefined) {\n rule.style = options.styles.getDxfStyle(rule.dxfId);\n delete rule.dxfId;\n }\n });\n });\n }\n}\n\nmodule.exports = ConditionalFormattingsXform;\n","const CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoXform = require('./cfvo-xform');\n\nclass DatabarXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n color: (this.colorXform = new ColorXform()),\n };\n }\n\n get tag() {\n return 'dataBar';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n this.colorXform.render(xmlStream, model.color);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {\n cfvo: [],\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n case 'color':\n this.model.color = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = DatabarXform;\n","/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nclass X14IdXform extends BaseXform {\n get tag() {\n return 'x14:id';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nclass ExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:id': (this.idXform = new X14IdXform()),\n };\n }\n\n get tag() {\n return 'ext';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n uri: '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n });\n\n this.idXform.render(xmlStream, model.x14Id);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n this.model.x14Id = parser.model;\n }\n}\n\nclass ExtLstRefXform extends CompositeXform {\n constructor() {\n super();\n this.map = {\n ext: new ExtXform(),\n };\n }\n\n get tag() {\n return 'extLst';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n this.map.ext.render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = ExtLstRefXform;\n","const BaseXform = require('../../base-xform');\n\nclass FormulaXform extends BaseXform {\n get tag() {\n return 'formula';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = FormulaXform;\n","const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst CfvoXform = require('./cfvo-xform');\n\nclass IconSetXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n };\n }\n\n get tag() {\n return 'iconSet';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n iconSet: BaseXform.toStringAttribute(model.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolValue(attributes.reverse),\n showValue: BaseXform.toBoolValue(attributes.showValue),\n cfvo: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model[name].push(parser.model);\n }\n}\n\nmodule.exports = IconSetXform;\n","const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nclass ColXform extends BaseXform {\n get tag() {\n return 'col';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style || {});\n if (styleId) {\n model.styleId = styleId;\n }\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('col');\n xmlStream.addAttribute('min', model.min);\n xmlStream.addAttribute('max', model.max);\n if (model.width) {\n xmlStream.addAttribute('width', model.width);\n }\n if (model.styleId) {\n xmlStream.addAttribute('style', model.styleId);\n }\n if (model.hidden) {\n xmlStream.addAttribute('hidden', '1');\n }\n if (model.bestFit) {\n xmlStream.addAttribute('bestFit', '1');\n }\n if (model.outlineLevel) {\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\n }\n if (model.collapsed) {\n xmlStream.addAttribute('collapsed', '1');\n }\n xmlStream.addAttribute('customWidth', '1');\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (node.name === 'col') {\n const model = (this.model = {\n min: parseInt(node.attributes.min || '0', 10),\n max: parseInt(node.attributes.max || '0', 10),\n width:\n node.attributes.width === undefined\n ? undefined\n : parseFloat(node.attributes.width || '0'),\n });\n if (node.attributes.style) {\n model.styleId = parseInt(node.attributes.style, 10);\n }\n if (utils.parseBoolean(node.attributes.hidden)) {\n model.hidden = true;\n }\n if (utils.parseBoolean(node.attributes.bestFit)) {\n model.bestFit = true;\n }\n if (node.attributes.outlineLevel) {\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\n }\n if (utils.parseBoolean(node.attributes.collapsed)) {\n model.collapsed = true;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n\n reconcile(model, options) {\n // reconcile column styles\n if (model.styleId) {\n model.style = options.styles.getStyleModel(model.styleId);\n }\n }\n}\n\nmodule.exports = ColXform;\n","const _ = require('../../../utils/under-dash');\nconst utils = require('../../../utils/utils');\nconst colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\n\nfunction assign(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = value;\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction assignBool(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = utils.parseBoolean(value);\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction optimiseDataValidations(model) {\n // Squeeze alike data validations together into rectangular ranges\n // to reduce file size and speed up Excel load time\n const dvList = _.map(model, (dataValidation, address) => ({\n address,\n dataValidation,\n marked: false,\n })).sort((a, b) => _.strcmp(a.address, b.address));\n const dvMap = _.keyBy(dvList, 'address');\n const matchCol = (addr, height, col) => {\n for (let i = 0; i < height; i++) {\n const otherAddress = colCache.encodeAddress(addr.row + i, col);\n if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) {\n return false;\n }\n }\n return true;\n };\n return dvList\n .map(dv => {\n if (!dv.marked) {\n const addr = colCache.decodeEx(dv.address);\n if (addr.dimensions) {\n dvMap[addr.dimensions].marked = true;\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n\n // iterate downwards - finding matching cells\n let height = 1;\n let otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) {\n height++;\n otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n }\n\n // iterate rightwards...\n\n let width = 1;\n while (matchCol(addr, height, addr.col + width)) {\n width++;\n }\n\n // mark all included addresses\n for (let i = 0; i < height; i++) {\n for (let j = 0; j < width; j++) {\n otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j);\n dvMap[otherAddress].marked = true;\n }\n }\n\n if (height > 1 || width > 1) {\n const bottom = addr.row + (height - 1);\n const right = addr.col + (width - 1);\n return {\n ...dv.dataValidation,\n sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}`,\n };\n }\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nclass DataValidationsXform extends BaseXform {\n get tag() {\n return 'dataValidations';\n }\n\n render(xmlStream, model) {\n const optimizedModel = optimiseDataValidations(model);\n if (optimizedModel.length) {\n xmlStream.openNode('dataValidations', {count: optimizedModel.length});\n\n optimizedModel.forEach(value => {\n xmlStream.openNode('dataValidation');\n\n if (value.type !== 'any') {\n xmlStream.addAttribute('type', value.type);\n\n if (value.operator && value.type !== 'list' && value.operator !== 'between') {\n xmlStream.addAttribute('operator', value.operator);\n }\n if (value.allowBlank) {\n xmlStream.addAttribute('allowBlank', '1');\n }\n }\n if (value.showInputMessage) {\n xmlStream.addAttribute('showInputMessage', '1');\n }\n if (value.promptTitle) {\n xmlStream.addAttribute('promptTitle', value.promptTitle);\n }\n if (value.prompt) {\n xmlStream.addAttribute('prompt', value.prompt);\n }\n if (value.showErrorMessage) {\n xmlStream.addAttribute('showErrorMessage', '1');\n }\n if (value.errorStyle) {\n xmlStream.addAttribute('errorStyle', value.errorStyle);\n }\n if (value.errorTitle) {\n xmlStream.addAttribute('errorTitle', value.errorTitle);\n }\n if (value.error) {\n xmlStream.addAttribute('error', value.error);\n }\n xmlStream.addAttribute('sqref', value.sqref);\n (value.formulae || []).forEach((formula, index) => {\n xmlStream.openNode(`formula${index + 1}`);\n if (value.type === 'date') {\n xmlStream.writeText(utils.dateToExcel(new Date(formula)));\n } else {\n xmlStream.writeText(formula);\n }\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'dataValidations':\n this.model = {};\n return true;\n\n case 'dataValidation': {\n this._address = node.attributes.sqref;\n const dataValidation = {type: node.attributes.type || 'any', formulae: []};\n\n if (node.attributes.type) {\n assignBool(dataValidation, node.attributes, 'allowBlank');\n }\n assignBool(dataValidation, node.attributes, 'showInputMessage');\n assignBool(dataValidation, node.attributes, 'showErrorMessage');\n\n switch (dataValidation.type) {\n case 'any':\n case 'list':\n case 'custom':\n break;\n default:\n assign(dataValidation, node.attributes, 'operator', 'between');\n break;\n }\n assign(dataValidation, node.attributes, 'promptTitle');\n assign(dataValidation, node.attributes, 'prompt');\n assign(dataValidation, node.attributes, 'errorStyle');\n assign(dataValidation, node.attributes, 'errorTitle');\n assign(dataValidation, node.attributes, 'error');\n\n this._dataValidation = dataValidation;\n return true;\n }\n\n case 'formula1':\n case 'formula2':\n this._formula = [];\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this._formula) {\n this._formula.push(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'dataValidations':\n return false;\n case 'dataValidation': {\n if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) {\n delete this._dataValidation.formulae;\n delete this._dataValidation.operator;\n }\n // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4\n const list = this._address.split(/\\s+/g) || [];\n list.forEach(addr => {\n if (addr.includes(':')) {\n const range = new Range(addr);\n range.forEachAddress(address => {\n this.model[address] = this._dataValidation;\n });\n } else {\n this.model[addr] = this._dataValidation;\n }\n });\n return true;\n }\n case 'formula1':\n case 'formula2': {\n let formula = this._formula.join('');\n switch (this._dataValidation.type) {\n case 'whole':\n case 'textLength':\n formula = parseInt(formula, 10);\n break;\n case 'decimal':\n formula = parseFloat(formula);\n break;\n case 'date':\n formula = utils.excelToDate(parseFloat(formula));\n break;\n default:\n break;\n }\n this._dataValidation.formulae.push(formula);\n this._formula = undefined;\n return true;\n }\n default:\n return true;\n }\n }\n}\n\nmodule.exports = DataValidationsXform;\n","const BaseXform = require('../base-xform');\n\nclass DimensionXform extends BaseXform {\n get tag() {\n return 'dimension';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode('dimension', {ref: model});\n }\n }\n\n parseOpen(node) {\n if (node.name === 'dimension') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = DimensionXform;\n","const BaseXform = require('../base-xform');\n\nclass DrawingXform extends BaseXform {\n get tag() {\n return 'drawing';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = DrawingXform;\n","/* eslint-disable max-classes-per-file */\nconst CompositeXform = require('../composite-xform');\n\nconst ConditionalFormattingsExt = require('./cf-ext/conditional-formattings-ext-xform');\n\nclass ExtXform extends CompositeXform {\n constructor() {\n super();\n this.map = {\n 'x14:conditionalFormattings': (this.conditionalFormattings = new ConditionalFormattingsExt()),\n };\n }\n\n get tag() {\n return 'ext';\n }\n\n hasContent(model) {\n return this.conditionalFormattings.hasContent(model.conditionalFormattings);\n }\n\n prepare(model, options) {\n this.conditionalFormattings.prepare(model.conditionalFormattings, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('ext', {\n uri: '{78C0D931-6437-407d-A8EE-F0AAD7539E65}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n });\n\n this.conditionalFormattings.render(xmlStream, model.conditionalFormattings);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n this.model[name] = parser.model;\n }\n}\n\nclass ExtLstXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n ext: (this.ext = new ExtXform()),\n };\n }\n\n get tag() {\n return 'extLst';\n }\n\n prepare(model, options) {\n this.ext.prepare(model, options);\n }\n\n hasContent(model) {\n return this.ext.hasContent(model);\n }\n\n render(xmlStream, model) {\n if (!this.hasContent(model)) {\n return;\n }\n\n xmlStream.openNode('extLst');\n this.ext.render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = ExtLstXform;\n","const BaseXform = require('../base-xform');\n\nclass HeaderFooterXform extends BaseXform {\n get tag() {\n return 'headerFooter';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.addRollback();\n\n let createTag = false;\n\n xmlStream.openNode('headerFooter');\n if (model.differentFirst) {\n xmlStream.addAttribute('differentFirst', '1');\n createTag = true;\n }\n if (model.differentOddEven) {\n xmlStream.addAttribute('differentOddEven', '1');\n createTag = true;\n }\n if (model.oddHeader && typeof model.oddHeader === 'string') {\n xmlStream.leafNode('oddHeader', null, model.oddHeader);\n createTag = true;\n }\n if (model.oddFooter && typeof model.oddFooter === 'string') {\n xmlStream.leafNode('oddFooter', null, model.oddFooter);\n createTag = true;\n }\n if (model.evenHeader && typeof model.evenHeader === 'string') {\n xmlStream.leafNode('evenHeader', null, model.evenHeader);\n createTag = true;\n }\n if (model.evenFooter && typeof model.evenFooter === 'string') {\n xmlStream.leafNode('evenFooter', null, model.evenFooter);\n createTag = true;\n }\n if (model.firstHeader && typeof model.firstHeader === 'string') {\n xmlStream.leafNode('firstHeader', null, model.firstHeader);\n createTag = true;\n }\n if (model.firstFooter && typeof model.firstFooter === 'string') {\n xmlStream.leafNode('firstFooter', null, model.firstFooter);\n createTag = true;\n }\n\n if (createTag) {\n xmlStream.closeNode();\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'headerFooter':\n this.model = {};\n if (node.attributes.differentFirst) {\n this.model.differentFirst = parseInt(node.attributes.differentFirst, 0) === 1;\n }\n if (node.attributes.differentOddEven) {\n this.model.differentOddEven = parseInt(node.attributes.differentOddEven, 0) === 1;\n }\n return true;\n\n case 'oddHeader':\n this.currentNode = 'oddHeader';\n return true;\n\n case 'oddFooter':\n this.currentNode = 'oddFooter';\n return true;\n\n case 'evenHeader':\n this.currentNode = 'evenHeader';\n return true;\n\n case 'evenFooter':\n this.currentNode = 'evenFooter';\n return true;\n\n case 'firstHeader':\n this.currentNode = 'firstHeader';\n return true;\n\n case 'firstFooter':\n this.currentNode = 'firstFooter';\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n switch (this.currentNode) {\n case 'oddHeader':\n this.model.oddHeader = text;\n break;\n\n case 'oddFooter':\n this.model.oddFooter = text;\n break;\n\n case 'evenHeader':\n this.model.evenHeader = text;\n break;\n\n case 'evenFooter':\n this.model.evenFooter = text;\n break;\n\n case 'firstHeader':\n this.model.firstHeader = text;\n break;\n\n case 'firstFooter':\n this.model.firstFooter = text;\n break;\n\n default:\n break;\n }\n }\n\n parseClose() {\n switch (this.currentNode) {\n case 'oddHeader':\n case 'oddFooter':\n case 'evenHeader':\n case 'evenFooter':\n case 'firstHeader':\n case 'firstFooter':\n this.currentNode = undefined;\n return true;\n\n default:\n return false;\n }\n }\n}\n\nmodule.exports = HeaderFooterXform;\n","const BaseXform = require('../base-xform');\n\nclass HyperlinkXform extends BaseXform {\n get tag() {\n return 'hyperlink';\n }\n\n render(xmlStream, model) {\n if (this.isInternalLink(model)) {\n xmlStream.leafNode('hyperlink', {\n ref: model.address,\n 'r:id': model.rId,\n tooltip: model.tooltip,\n location: model.target,\n });\n } else {\n xmlStream.leafNode('hyperlink', {\n ref: model.address,\n 'r:id': model.rId,\n tooltip: model.tooltip,\n });\n }\n }\n\n parseOpen(node) {\n if (node.name === 'hyperlink') {\n this.model = {\n address: node.attributes.ref,\n rId: node.attributes['r:id'],\n tooltip: node.attributes.tooltip,\n };\n\n // This is an internal link\n if (node.attributes.location) {\n this.model.target = node.attributes.location;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n\n isInternalLink(model) {\n // @example: Sheet2!D3, return true\n return model.target && /^[^!]+![a-zA-Z]+[\\d]+$/.test(model.target);\n }\n}\n\nmodule.exports = HyperlinkXform;\n","const BaseXform = require('../base-xform');\n\nclass MergeCellXform extends BaseXform {\n get tag() {\n return 'mergeCell';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('mergeCell', {ref: model});\n }\n\n parseOpen(node) {\n if (node.name === 'mergeCell') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = MergeCellXform;\n","const _ = require('../../../utils/under-dash');\n\nconst Range = require('../../../doc/range');\nconst colCache = require('../../../utils/col-cache');\nconst Enums = require('../../../doc/enums');\n\nclass Merges {\n constructor() {\n // optional mergeCells is array of ranges (like the xml)\n this.merges = {};\n }\n\n add(merge) {\n // merge is {address, master}\n if (this.merges[merge.master]) {\n this.merges[merge.master].expandToAddress(merge.address);\n } else {\n const range = `${merge.master}:${merge.address}`;\n this.merges[merge.master] = new Range(range);\n }\n }\n\n get mergeCells() {\n return _.map(this.merges, merge => merge.range);\n }\n\n reconcile(mergeCells, rows) {\n // reconcile merge list with merge cells\n _.each(mergeCells, merge => {\n const dimensions = colCache.decode(merge);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n const row = rows[i - 1];\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = row.cells[j - 1];\n if (!cell) {\n // nulls are not included in document - so if master cell has no value - add a null one here\n row.cells[j] = {\n type: Enums.ValueType.Null,\n address: colCache.encodeAddress(i, j),\n };\n } else if (cell.type === Enums.ValueType.Merge) {\n cell.master = dimensions.tl;\n }\n }\n }\n });\n }\n\n getMasterAddress(address) {\n // if address has been merged, return its master's address. Assumes reconcile has been called\n const range = this.hash[address];\n return range && range.tl;\n }\n}\n\nmodule.exports = Merges;\n","const BaseXform = require('../base-xform');\n\nconst isDefined = attr => typeof attr !== 'undefined';\n\nclass OutlinePropertiesXform extends BaseXform {\n get tag() {\n return 'outlinePr';\n }\n\n render(xmlStream, model) {\n if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) {\n xmlStream.leafNode(this.tag, {\n summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined,\n summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined,\n });\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n summaryBelow: isDefined(node.attributes.summaryBelow)\n ? Boolean(Number(node.attributes.summaryBelow))\n : undefined,\n summaryRight: isDefined(node.attributes.summaryRight)\n ? Boolean(Number(node.attributes.summaryRight))\n : undefined,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = OutlinePropertiesXform;\n","const BaseXform = require('../base-xform');\n\nclass PageBreaksXform extends BaseXform {\n get tag() {\n return 'brk';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('brk', model);\n }\n\n parseOpen(node) {\n if (node.name === 'brk') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageBreaksXform;\n","const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nclass PageMarginsXform extends BaseXform {\n get tag() {\n return 'pageMargins';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n left: model.left,\n right: model.right,\n top: model.top,\n bottom: model.bottom,\n header: model.header,\n footer: model.footer,\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n left: parseFloat(node.attributes.left || 0.7),\n right: parseFloat(node.attributes.right || 0.7),\n top: parseFloat(node.attributes.top || 0.75),\n bottom: parseFloat(node.attributes.bottom || 0.75),\n header: parseFloat(node.attributes.header || 0.3),\n footer: parseFloat(node.attributes.footer || 0.3),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageMarginsXform;\n","const BaseXform = require('../base-xform');\n\nclass PageSetupPropertiesXform extends BaseXform {\n get tag() {\n return 'pageSetUpPr';\n }\n\n render(xmlStream, model) {\n if (model && model.fitToPage) {\n xmlStream.leafNode(this.tag, {\n fitToPage: model.fitToPage ? '1' : undefined,\n });\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n fitToPage: node.attributes.fitToPage === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageSetupPropertiesXform;\n","const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model) {\n return model ? '1' : undefined;\n}\nfunction pageOrderToXml(model) {\n switch (model) {\n case 'overThenDown':\n return model;\n default:\n return undefined;\n }\n}\nfunction cellCommentsToXml(model) {\n switch (model) {\n case 'atEnd':\n case 'asDisplyed':\n return model;\n default:\n return undefined;\n }\n}\nfunction errorsToXml(model) {\n switch (model) {\n case 'dash':\n case 'blank':\n case 'NA':\n return model;\n default:\n return undefined;\n }\n}\nfunction pageSizeToModel(value) {\n return value !== undefined ? parseInt(value, 10) : undefined;\n}\n\nclass PageSetupXform extends BaseXform {\n get tag() {\n return 'pageSetup';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n paperSize: model.paperSize,\n orientation: model.orientation,\n horizontalDpi: model.horizontalDpi,\n verticalDpi: model.verticalDpi,\n pageOrder: pageOrderToXml(model.pageOrder),\n blackAndWhite: booleanToXml(model.blackAndWhite),\n draft: booleanToXml(model.draft),\n cellComments: cellCommentsToXml(model.cellComments),\n errors: errorsToXml(model.errors),\n scale: model.scale,\n fitToWidth: model.fitToWidth,\n fitToHeight: model.fitToHeight,\n firstPageNumber: model.firstPageNumber,\n useFirstPageNumber: booleanToXml(model.firstPageNumber),\n usePrinterDefaults: booleanToXml(model.usePrinterDefaults),\n copies: model.copies,\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n paperSize: pageSizeToModel(node.attributes.paperSize),\n orientation: node.attributes.orientation || 'portrait',\n horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10),\n verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10),\n pageOrder: node.attributes.pageOrder || 'downThenOver',\n blackAndWhite: node.attributes.blackAndWhite === '1',\n draft: node.attributes.draft === '1',\n cellComments: node.attributes.cellComments || 'None',\n errors: node.attributes.errors || 'displayed',\n scale: parseInt(node.attributes.scale || '100', 10),\n fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10),\n fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10),\n firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10),\n useFirstPageNumber: node.attributes.useFirstPageNumber === '1',\n usePrinterDefaults: node.attributes.usePrinterDefaults === '1',\n copies: parseInt(node.attributes.copies || '1', 10),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageSetupXform;\n","const BaseXform = require('../base-xform');\n\nclass PictureXform extends BaseXform {\n get tag() {\n return 'picture';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PictureXform;\n","const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model) {\n return model ? '1' : undefined;\n}\n\nclass PrintOptionsXform extends BaseXform {\n get tag() {\n return 'printOptions';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n headings: booleanToXml(model.showRowColHeaders),\n gridLines: booleanToXml(model.showGridLines),\n horizontalCentered: booleanToXml(model.horizontalCentered),\n verticalCentered: booleanToXml(model.verticalCentered),\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n showRowColHeaders: node.attributes.headings === '1',\n showGridLines: node.attributes.gridLines === '1',\n horizontalCentered: node.attributes.horizontalCentered === '1',\n verticalCentered: node.attributes.verticalCentered === '1',\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PrintOptionsXform;\n","'use strict';\n\nconst PageBreaksXform = require('./page-breaks-xform');\n\nconst ListXform = require('../list-xform');\n\nclass RowBreaksXform extends ListXform {\n constructor() {\n const options = {\n tag: 'rowBreaks',\n count: true,\n childXform: new PageBreaksXform(),\n };\n super(options);\n }\n\n // get tag() { return 'rowBreaks'; }\n\n render(xmlStream, model) {\n if (model && model.length) {\n xmlStream.openNode(this.tag, this.$);\n if (this.count) {\n xmlStream.addAttribute(this.$count, model.length);\n xmlStream.addAttribute('manualBreakCount', model.length);\n }\n\n const {childXform} = this;\n model.forEach(childModel => {\n childXform.render(xmlStream, childModel);\n });\n\n xmlStream.closeNode();\n } else if (this.empty) {\n xmlStream.leafNode(this.tag);\n }\n }\n}\n\nmodule.exports = RowBreaksXform;\n","const BaseXform = require('../base-xform');\nconst utils = require('../../../utils/utils');\n\nconst CellXform = require('./cell-xform');\n\nclass RowXform extends BaseXform {\n constructor(options) {\n super();\n\n this.maxItems = options && options.maxItems;\n this.map = {\n c: new CellXform(),\n };\n }\n\n get tag() {\n return 'row';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style);\n if (styleId) {\n model.styleId = styleId;\n }\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.prepare(cellModel, options);\n });\n }\n\n render(xmlStream, model, options) {\n xmlStream.openNode('row');\n xmlStream.addAttribute('r', model.number);\n if (model.height) {\n xmlStream.addAttribute('ht', model.height);\n xmlStream.addAttribute('customHeight', '1');\n }\n if (model.hidden) {\n xmlStream.addAttribute('hidden', '1');\n }\n if (model.min > 0 && model.max > 0 && model.min <= model.max) {\n xmlStream.addAttribute('spans', `${model.min}:${model.max}`);\n }\n if (model.styleId) {\n xmlStream.addAttribute('s', model.styleId);\n xmlStream.addAttribute('customFormat', '1');\n }\n xmlStream.addAttribute('x14ac:dyDescent', '0.25');\n if (model.outlineLevel) {\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\n }\n if (model.collapsed) {\n xmlStream.addAttribute('collapsed', '1');\n }\n\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.render(xmlStream, cellModel, options);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (node.name === 'row') {\n this.numRowsSeen += 1;\n const spans = node.attributes.spans\n ? node.attributes.spans.split(':').map(span => parseInt(span, 10))\n : [undefined, undefined];\n const model = (this.model = {\n number: parseInt(node.attributes.r, 10),\n min: spans[0],\n max: spans[1],\n cells: [],\n });\n if (node.attributes.s) {\n model.styleId = parseInt(node.attributes.s, 10);\n }\n if (utils.parseBoolean(node.attributes.hidden)) {\n model.hidden = true;\n }\n if (utils.parseBoolean(node.attributes.bestFit)) {\n model.bestFit = true;\n }\n if (node.attributes.ht) {\n model.height = parseFloat(node.attributes.ht);\n }\n if (node.attributes.outlineLevel) {\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\n }\n if (utils.parseBoolean(node.attributes.collapsed)) {\n model.collapsed = true;\n }\n return true;\n }\n\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.cells.push(this.parser.model);\n if (this.maxItems && this.model.cells.length > this.maxItems) {\n throw new Error(`Max column count (${this.maxItems}) exceeded`);\n }\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.style = model.styleId ? options.styles.getStyleModel(model.styleId) : {};\n if (model.styleId !== undefined) {\n model.styleId = undefined;\n }\n\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.reconcile(cellModel, options);\n });\n }\n}\n\nmodule.exports = RowXform;\n","const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nclass SheetFormatPropertiesXform extends BaseXform {\n get tag() {\n return 'sheetFormatPr';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n defaultRowHeight: model.defaultRowHeight,\n outlineLevelRow: model.outlineLevelRow,\n outlineLevelCol: model.outlineLevelCol,\n 'x14ac:dyDescent': model.dyDescent,\n };\n if (model.defaultColWidth) {\n attributes.defaultColWidth = model.defaultColWidth;\n }\n\n // default value for 'defaultRowHeight' is 15, this should not be 'custom'\n if (!model.defaultRowHeight || model.defaultRowHeight !== 15) {\n attributes.customHeight = '1';\n }\n\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode('sheetFormatPr', attributes);\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'sheetFormatPr') {\n this.model = {\n defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || '0'),\n dyDescent: parseFloat(node.attributes['x14ac:dyDescent'] || '0'),\n outlineLevelRow: parseInt(node.attributes.outlineLevelRow || '0', 10),\n outlineLevelCol: parseInt(node.attributes.outlineLevelCol || '0', 10),\n };\n if (node.attributes.defaultColWidth) {\n this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth);\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = SheetFormatPropertiesXform;\n","const BaseXform = require('../base-xform');\nconst ColorXform = require('../style/color-xform');\nconst PageSetupPropertiesXform = require('./page-setup-properties-xform');\nconst OutlinePropertiesXform = require('./outline-properties-xform');\n\nclass SheetPropertiesXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n tabColor: new ColorXform('tabColor'),\n pageSetUpPr: new PageSetupPropertiesXform(),\n outlinePr: new OutlinePropertiesXform(),\n };\n }\n\n get tag() {\n return 'sheetPr';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.addRollback();\n xmlStream.openNode('sheetPr');\n\n let inner = false;\n inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner;\n inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner;\n inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner;\n\n if (inner) {\n xmlStream.closeNode();\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (node.name === this.tag) {\n this.reset();\n return true;\n }\n if (this.map[node.name]) {\n this.parser = this.map[node.name];\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n return true;\n }\n return false;\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) {\n this.model = {};\n if (this.map.tabColor.model) {\n this.model.tabColor = this.map.tabColor.model;\n }\n if (this.map.pageSetUpPr.model) {\n this.model.pageSetup = this.map.pageSetUpPr.model;\n }\n if (this.map.outlinePr.model) {\n this.model.outlineProperties = this.map.outlinePr.model;\n }\n } else {\n this.model = null;\n }\n return false;\n }\n}\n\nmodule.exports = SheetPropertiesXform;\n","const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model, value) {\n return model ? value : undefined;\n}\n\nfunction xmlToBoolean(value, equals) {\n return value === equals ? true : undefined;\n}\n\nclass SheetProtectionXform extends BaseXform {\n get tag() {\n return 'sheetProtection';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n sheet: booleanToXml(model.sheet, '1'),\n selectLockedCells: model.selectLockedCells === false ? '1' : undefined,\n selectUnlockedCells: model.selectUnlockedCells === false ? '1' : undefined,\n formatCells: booleanToXml(model.formatCells, '0'),\n formatColumns: booleanToXml(model.formatColumns, '0'),\n formatRows: booleanToXml(model.formatRows, '0'),\n insertColumns: booleanToXml(model.insertColumns, '0'),\n insertRows: booleanToXml(model.insertRows, '0'),\n insertHyperlinks: booleanToXml(model.insertHyperlinks, '0'),\n deleteColumns: booleanToXml(model.deleteColumns, '0'),\n deleteRows: booleanToXml(model.deleteRows, '0'),\n sort: booleanToXml(model.sort, '0'),\n autoFilter: booleanToXml(model.autoFilter, '0'),\n pivotTables: booleanToXml(model.pivotTables, '0'),\n };\n if (model.sheet) {\n attributes.algorithmName = model.algorithmName;\n attributes.hashValue = model.hashValue;\n attributes.saltValue = model.saltValue;\n attributes.spinCount = model.spinCount;\n attributes.objects = booleanToXml(model.objects === false, '1');\n attributes.scenarios = booleanToXml(model.scenarios === false, '1');\n }\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n sheet: xmlToBoolean(node.attributes.sheet, '1'),\n objects: node.attributes.objects === '1' ? false : undefined,\n scenarios: node.attributes.scenarios === '1' ? false : undefined,\n selectLockedCells: node.attributes.selectLockedCells === '1' ? false : undefined,\n selectUnlockedCells: node.attributes.selectUnlockedCells === '1' ? false : undefined,\n formatCells: xmlToBoolean(node.attributes.formatCells, '0'),\n formatColumns: xmlToBoolean(node.attributes.formatColumns, '0'),\n formatRows: xmlToBoolean(node.attributes.formatRows, '0'),\n insertColumns: xmlToBoolean(node.attributes.insertColumns, '0'),\n insertRows: xmlToBoolean(node.attributes.insertRows, '0'),\n insertHyperlinks: xmlToBoolean(node.attributes.insertHyperlinks, '0'),\n deleteColumns: xmlToBoolean(node.attributes.deleteColumns, '0'),\n deleteRows: xmlToBoolean(node.attributes.deleteRows, '0'),\n sort: xmlToBoolean(node.attributes.sort, '0'),\n autoFilter: xmlToBoolean(node.attributes.autoFilter, '0'),\n pivotTables: xmlToBoolean(node.attributes.pivotTables, '0'),\n };\n if (node.attributes.algorithmName) {\n this.model.algorithmName = node.attributes.algorithmName;\n this.model.hashValue = node.attributes.hashValue;\n this.model.saltValue = node.attributes.saltValue;\n this.model.spinCount = parseInt(node.attributes.spinCount, 10);\n }\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = SheetProtectionXform;\n","const colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\n\nconst VIEW_STATES = {\n frozen: 'frozen',\n frozenSplit: 'frozen',\n split: 'split',\n};\n\nclass SheetViewXform extends BaseXform {\n get tag() {\n return 'sheetView';\n }\n\n prepare(model) {\n switch (model.state) {\n case 'frozen':\n case 'split':\n break;\n default:\n model.state = 'normal';\n break;\n }\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('sheetView', {\n workbookViewId: model.workbookViewId || 0,\n });\n const add = function(name, value, included) {\n if (included) {\n xmlStream.addAttribute(name, value);\n }\n };\n add('rightToLeft', '1', model.rightToLeft === true);\n add('tabSelected', '1', model.tabSelected);\n add('showRuler', '0', model.showRuler === false);\n add('showRowColHeaders', '0', model.showRowColHeaders === false);\n add('showGridLines', '0', model.showGridLines === false);\n add('zoomScale', model.zoomScale, model.zoomScale);\n add('zoomScaleNormal', model.zoomScaleNormal, model.zoomScaleNormal);\n add('view', model.style, model.style);\n\n let topLeftCell;\n let xSplit;\n let ySplit;\n let activePane;\n switch (model.state) {\n case 'frozen':\n xSplit = model.xSplit || 0;\n ySplit = model.ySplit || 0;\n topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address;\n activePane =\n (model.xSplit && model.ySplit && 'bottomRight') ||\n (model.xSplit && 'topRight') ||\n 'bottomLeft';\n\n xmlStream.leafNode('pane', {\n xSplit: model.xSplit || undefined,\n ySplit: model.ySplit || undefined,\n topLeftCell,\n activePane,\n state: 'frozen',\n });\n xmlStream.leafNode('selection', {\n pane: activePane,\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n break;\n case 'split':\n if (model.activePane === 'topLeft') {\n model.activePane = undefined;\n }\n xmlStream.leafNode('pane', {\n xSplit: model.xSplit || undefined,\n ySplit: model.ySplit || undefined,\n topLeftCell: model.topLeftCell,\n activePane: model.activePane,\n });\n xmlStream.leafNode('selection', {\n pane: model.activePane,\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n break;\n case 'normal':\n if (model.activeCell) {\n xmlStream.leafNode('selection', {\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n }\n break;\n default:\n break;\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'sheetView':\n this.sheetView = {\n workbookViewId: parseInt(node.attributes.workbookViewId, 10),\n rightToLeft: node.attributes.rightToLeft === '1',\n tabSelected: node.attributes.tabSelected === '1',\n showRuler: !(node.attributes.showRuler === '0'),\n showRowColHeaders: !(node.attributes.showRowColHeaders === '0'),\n showGridLines: !(node.attributes.showGridLines === '0'),\n zoomScale: parseInt(node.attributes.zoomScale || '100', 10),\n zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || '100', 10),\n style: node.attributes.view,\n };\n this.pane = undefined;\n this.selections = {};\n return true;\n\n case 'pane':\n this.pane = {\n xSplit: parseInt(node.attributes.xSplit || '0', 10),\n ySplit: parseInt(node.attributes.ySplit || '0', 10),\n topLeftCell: node.attributes.topLeftCell,\n activePane: node.attributes.activePane || 'topLeft',\n state: node.attributes.state,\n };\n return true;\n\n case 'selection': {\n const name = node.attributes.pane || 'topLeft';\n this.selections[name] = {\n pane: name,\n activeCell: node.attributes.activeCell,\n };\n return true;\n }\n\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n let model;\n let selection;\n switch (name) {\n case 'sheetView':\n if (this.sheetView && this.pane) {\n model = this.model = {\n workbookViewId: this.sheetView.workbookViewId,\n rightToLeft: this.sheetView.rightToLeft,\n state: VIEW_STATES[this.pane.state] || 'split', // split is default\n xSplit: this.pane.xSplit,\n ySplit: this.pane.ySplit,\n topLeftCell: this.pane.topLeftCell,\n showRuler: this.sheetView.showRuler,\n showRowColHeaders: this.sheetView.showRowColHeaders,\n showGridLines: this.sheetView.showGridLines,\n zoomScale: this.sheetView.zoomScale,\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\n };\n if (this.model.state === 'split') {\n model.activePane = this.pane.activePane;\n }\n selection = this.selections[this.pane.activePane];\n if (selection && selection.activeCell) {\n model.activeCell = selection.activeCell;\n }\n if (this.sheetView.style) {\n model.style = this.sheetView.style;\n }\n } else {\n model = this.model = {\n workbookViewId: this.sheetView.workbookViewId,\n rightToLeft: this.sheetView.rightToLeft,\n state: 'normal',\n showRuler: this.sheetView.showRuler,\n showRowColHeaders: this.sheetView.showRowColHeaders,\n showGridLines: this.sheetView.showGridLines,\n zoomScale: this.sheetView.zoomScale,\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\n };\n selection = this.selections.topLeft;\n if (selection && selection.activeCell) {\n model.activeCell = selection.activeCell;\n }\n if (this.sheetView.style) {\n model.style = this.sheetView.style;\n }\n }\n return false;\n default:\n return true;\n }\n }\n\n reconcile() {}\n}\n\nmodule.exports = SheetViewXform;\n","const BaseXform = require('../base-xform');\n\nclass TablePartXform extends BaseXform {\n get tag() {\n return 'tablePart';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TablePartXform;\n","const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst RelType = require('../../rel-type');\n\nconst Merges = require('./merges');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\nconst RowXform = require('./row-xform');\nconst ColXform = require('./col-xform');\nconst DimensionXform = require('./dimension-xform');\nconst HyperlinkXform = require('./hyperlink-xform');\nconst MergeCellXform = require('./merge-cell-xform');\nconst DataValidationsXform = require('./data-validations-xform');\nconst SheetPropertiesXform = require('./sheet-properties-xform');\nconst SheetFormatPropertiesXform = require('./sheet-format-properties-xform');\nconst SheetViewXform = require('./sheet-view-xform');\nconst SheetProtectionXform = require('./sheet-protection-xform');\nconst PageMarginsXform = require('./page-margins-xform');\nconst PageSetupXform = require('./page-setup-xform');\nconst PrintOptionsXform = require('./print-options-xform');\nconst AutoFilterXform = require('./auto-filter-xform');\nconst PictureXform = require('./picture-xform');\nconst DrawingXform = require('./drawing-xform');\nconst TablePartXform = require('./table-part-xform');\nconst RowBreaksXform = require('./row-breaks-xform');\nconst HeaderFooterXform = require('./header-footer-xform');\nconst ConditionalFormattingsXform = require('./cf/conditional-formattings-xform');\nconst ExtListXform = require('./ext-lst-xform');\n\nconst mergeRule = (rule, extRule) => {\n Object.keys(extRule).forEach(key => {\n const value = rule[key];\n const extValue = extRule[key];\n if (value === undefined && extValue !== undefined) {\n rule[key] = extValue;\n }\n });\n};\n\nconst mergeConditionalFormattings = (model, extModel) => {\n // conditional formattings are rendered in worksheet.conditionalFormatting and also in\n // worksheet.extLst.ext.x14:conditionalFormattings\n // some (e.g. dataBar) are even spread across both!\n if (!extModel || !extModel.length) {\n return model;\n }\n if (!model || !model.length) {\n return extModel;\n }\n\n // index model rules by x14Id\n const cfMap = {};\n const ruleMap = {};\n model.forEach(cf => {\n cfMap[cf.ref] = cf;\n cf.rules.forEach(rule => {\n const {x14Id} = rule;\n if (x14Id) {\n ruleMap[x14Id] = rule;\n }\n });\n });\n\n extModel.forEach(extCf => {\n extCf.rules.forEach(extRule => {\n const rule = ruleMap[extRule.x14Id];\n if (rule) {\n // merge with matching rule\n mergeRule(rule, extRule);\n } else if (cfMap[extCf.ref]) {\n // reuse existing cf ref\n cfMap[extCf.ref].rules.push(extRule);\n } else {\n // create new cf\n model.push({\n ref: extCf.ref,\n rules: [extRule],\n });\n }\n });\n });\n\n // need to cope with rules in extModel that don't exist in model\n return model;\n};\n\nclass WorkSheetXform extends BaseXform {\n constructor(options) {\n super();\n\n const {maxRows, maxCols, ignoreNodes} = options || {};\n\n this.ignoreNodes = ignoreNodes || [];\n\n this.map = {\n sheetPr: new SheetPropertiesXform(),\n dimension: new DimensionXform(),\n sheetViews: new ListXform({\n tag: 'sheetViews',\n count: false,\n childXform: new SheetViewXform(),\n }),\n sheetFormatPr: new SheetFormatPropertiesXform(),\n cols: new ListXform({tag: 'cols', count: false, childXform: new ColXform()}),\n sheetData: new ListXform({\n tag: 'sheetData',\n count: false,\n empty: true,\n childXform: new RowXform({maxItems: maxCols}),\n maxItems: maxRows,\n }),\n autoFilter: new AutoFilterXform(),\n mergeCells: new ListXform({tag: 'mergeCells', count: true, childXform: new MergeCellXform()}),\n rowBreaks: new RowBreaksXform(),\n hyperlinks: new ListXform({\n tag: 'hyperlinks',\n count: false,\n childXform: new HyperlinkXform(),\n }),\n pageMargins: new PageMarginsXform(),\n dataValidations: new DataValidationsXform(),\n pageSetup: new PageSetupXform(),\n headerFooter: new HeaderFooterXform(),\n printOptions: new PrintOptionsXform(),\n picture: new PictureXform(),\n drawing: new DrawingXform(),\n sheetProtection: new SheetProtectionXform(),\n tableParts: new ListXform({tag: 'tableParts', count: true, childXform: new TablePartXform()}),\n conditionalFormatting: new ConditionalFormattingsXform(),\n extLst: new ExtListXform(),\n };\n }\n\n prepare(model, options) {\n options.merges = new Merges();\n model.hyperlinks = options.hyperlinks = [];\n model.comments = options.comments = [];\n\n options.formulae = {};\n options.siFormulae = 0;\n this.map.cols.prepare(model.cols, options);\n this.map.sheetData.prepare(model.rows, options);\n this.map.conditionalFormatting.prepare(model.conditionalFormattings, options);\n\n model.mergeCells = options.merges.mergeCells;\n\n // prepare relationships\n const rels = (model.rels = []);\n\n function nextRid(r) {\n return `rId${r.length + 1}`;\n }\n\n model.hyperlinks.forEach(hyperlink => {\n const rId = nextRid(rels);\n hyperlink.rId = rId;\n rels.push({\n Id: rId,\n Type: RelType.Hyperlink,\n Target: hyperlink.target,\n TargetMode: 'External',\n });\n });\n\n // prepare comment relationships\n if (model.comments.length > 0) {\n const comment = {\n Id: nextRid(rels),\n Type: RelType.Comments,\n Target: `../comments${model.id}.xml`,\n };\n rels.push(comment);\n const vmlDrawing = {\n Id: nextRid(rels),\n Type: RelType.VmlDrawing,\n Target: `../drawings/vmlDrawing${model.id}.vml`,\n };\n rels.push(vmlDrawing);\n\n model.comments.forEach(item => {\n item.refAddress = colCache.decodeAddress(item.ref);\n });\n\n options.commentRefs.push({\n commentName: `comments${model.id}`,\n vmlDrawing: `vmlDrawing${model.id}`,\n });\n }\n\n const drawingRelsHash = [];\n let bookImage;\n model.media.forEach(medium => {\n if (medium.type === 'background') {\n const rId = nextRid(rels);\n bookImage = options.media[medium.imageId];\n rels.push({\n Id: rId,\n Type: RelType.Image,\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\n });\n model.background = {\n rId,\n };\n model.image = options.media[medium.imageId];\n } else if (medium.type === 'image') {\n let {drawing} = model;\n bookImage = options.media[medium.imageId];\n if (!drawing) {\n drawing = model.drawing = {\n rId: nextRid(rels),\n name: `drawing${++options.drawingsCount}`,\n anchors: [],\n rels: [],\n };\n options.drawings.push(drawing);\n rels.push({\n Id: drawing.rId,\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',\n Target: `../drawings/${drawing.name}.xml`,\n });\n }\n let rIdImage =\n this.preImageId === medium.imageId ? drawingRelsHash[medium.imageId] : drawingRelsHash[drawing.rels.length];\n if (!rIdImage) {\n rIdImage = nextRid(drawing.rels);\n drawingRelsHash[drawing.rels.length] = rIdImage;\n drawing.rels.push({\n Id: rIdImage,\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\n });\n }\n\n const anchor = {\n picture: {\n rId: rIdImage,\n },\n range: medium.range,\n };\n if (medium.hyperlinks && medium.hyperlinks.hyperlink) {\n const rIdHyperLink = nextRid(drawing.rels);\n drawingRelsHash[drawing.rels.length] = rIdHyperLink;\n anchor.picture.hyperlinks = {\n tooltip: medium.hyperlinks.tooltip,\n rId: rIdHyperLink,\n };\n drawing.rels.push({\n Id: rIdHyperLink,\n Type: RelType.Hyperlink,\n Target: medium.hyperlinks.hyperlink,\n TargetMode: 'External',\n });\n }\n this.preImageId = medium.imageId;\n drawing.anchors.push(anchor);\n }\n });\n\n // prepare tables\n model.tables.forEach(table => {\n // relationships\n const rId = nextRid(rels);\n table.rId = rId;\n rels.push({\n Id: rId,\n Type: RelType.Table,\n Target: `../tables/${table.target}`,\n });\n\n // dynamic styles\n table.columns.forEach(column => {\n const {style} = column;\n if (style) {\n column.dxfId = options.styles.addDxfStyle(style);\n }\n });\n });\n\n // prepare ext items\n this.map.extLst.prepare(model, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('worksheet', WorkSheetXform.WORKSHEET_ATTRIBUTES);\n\n const sheetFormatPropertiesModel = model.properties\n ? {\n defaultRowHeight: model.properties.defaultRowHeight,\n dyDescent: model.properties.dyDescent,\n outlineLevelCol: model.properties.outlineLevelCol,\n outlineLevelRow: model.properties.outlineLevelRow,\n }\n : undefined;\n if (model.properties && model.properties.defaultColWidth) {\n sheetFormatPropertiesModel.defaultColWidth = model.properties.defaultColWidth;\n }\n const sheetPropertiesModel = {\n outlineProperties: model.properties && model.properties.outlineProperties,\n tabColor: model.properties && model.properties.tabColor,\n pageSetup:\n model.pageSetup && model.pageSetup.fitToPage\n ? {\n fitToPage: model.pageSetup.fitToPage,\n }\n : undefined,\n };\n const pageMarginsModel = model.pageSetup && model.pageSetup.margins;\n const printOptionsModel = {\n showRowColHeaders: model.pageSetup && model.pageSetup.showRowColHeaders,\n showGridLines: model.pageSetup && model.pageSetup.showGridLines,\n horizontalCentered: model.pageSetup && model.pageSetup.horizontalCentered,\n verticalCentered: model.pageSetup && model.pageSetup.verticalCentered,\n };\n const sheetProtectionModel = model.sheetProtection;\n\n this.map.sheetPr.render(xmlStream, sheetPropertiesModel);\n this.map.dimension.render(xmlStream, model.dimensions);\n this.map.sheetViews.render(xmlStream, model.views);\n this.map.sheetFormatPr.render(xmlStream, sheetFormatPropertiesModel);\n this.map.cols.render(xmlStream, model.cols);\n this.map.sheetData.render(xmlStream, model.rows);\n this.map.sheetProtection.render(xmlStream, sheetProtectionModel); // Note: must be after sheetData and before autoFilter\n this.map.autoFilter.render(xmlStream, model.autoFilter);\n this.map.mergeCells.render(xmlStream, model.mergeCells);\n this.map.conditionalFormatting.render(xmlStream, model.conditionalFormattings); // Note: must be before dataValidations\n this.map.dataValidations.render(xmlStream, model.dataValidations);\n\n // For some reason hyperlinks have to be after the data validations\n this.map.hyperlinks.render(xmlStream, model.hyperlinks);\n\n this.map.printOptions.render(xmlStream, printOptionsModel); // Note: must be before pageMargins\n this.map.pageMargins.render(xmlStream, pageMarginsModel);\n this.map.pageSetup.render(xmlStream, model.pageSetup);\n this.map.headerFooter.render(xmlStream, model.headerFooter);\n this.map.rowBreaks.render(xmlStream, model.rowBreaks);\n this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks\n this.map.picture.render(xmlStream, model.background); // Note: must be after drawing\n this.map.tableParts.render(xmlStream, model.tables);\n\n this.map.extLst.render(xmlStream, model);\n\n if (model.rels) {\n // add a node for each comment\n model.rels.forEach(rel => {\n if (rel.Type === RelType.VmlDrawing) {\n xmlStream.leafNode('legacyDrawing', {'r:id': rel.Id});\n }\n });\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n if (node.name === 'worksheet') {\n _.each(this.map, xform => {\n xform.reset();\n });\n return true;\n }\n\n if (this.map[node.name] && !this.ignoreNodes.includes(node.name)) {\n this.parser = this.map[node.name];\n this.parser.parseOpen(node);\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'worksheet': {\n const properties = this.map.sheetFormatPr.model || {};\n if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) {\n properties.tabColor = this.map.sheetPr.model.tabColor;\n }\n if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) {\n properties.outlineProperties = this.map.sheetPr.model.outlineProperties;\n }\n const sheetProperties = {\n fitToPage:\n (this.map.sheetPr.model &&\n this.map.sheetPr.model.pageSetup &&\n this.map.sheetPr.model.pageSetup.fitToPage) ||\n false,\n margins: this.map.pageMargins.model,\n };\n const pageSetup = Object.assign(sheetProperties, this.map.pageSetup.model, this.map.printOptions.model);\n const conditionalFormattings = mergeConditionalFormattings(\n this.map.conditionalFormatting.model,\n this.map.extLst.model && this.map.extLst.model['x14:conditionalFormattings']\n );\n this.model = {\n dimensions: this.map.dimension.model,\n cols: this.map.cols.model,\n rows: this.map.sheetData.model,\n mergeCells: this.map.mergeCells.model,\n hyperlinks: this.map.hyperlinks.model,\n dataValidations: this.map.dataValidations.model,\n properties,\n views: this.map.sheetViews.model,\n pageSetup,\n headerFooter: this.map.headerFooter.model,\n background: this.map.picture.model,\n drawing: this.map.drawing.model,\n tables: this.map.tableParts.model,\n conditionalFormattings,\n };\n\n if (this.map.autoFilter.model) {\n this.model.autoFilter = this.map.autoFilter.model;\n }\n if (this.map.sheetProtection.model) {\n this.model.sheetProtection = this.map.sheetProtection.model;\n }\n\n return false;\n }\n\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model, options) {\n // options.merges = new Merges();\n // options.merges.reconcile(model.mergeCells, model.rows);\n const rels = (model.relationships || []).reduce((h, rel) => {\n h[rel.Id] = rel;\n if (rel.Type === RelType.Comments) {\n model.comments = options.comments[rel.Target].comments;\n }\n if (rel.Type === RelType.VmlDrawing && model.comments && model.comments.length) {\n const vmlComment = options.vmlDrawings[rel.Target].comments;\n model.comments.forEach((comment, index) => {\n comment.note = Object.assign({}, comment.note, vmlComment[index]);\n });\n }\n return h;\n }, {});\n options.commentsMap = (model.comments || []).reduce((h, comment) => {\n if (comment.ref) {\n h[comment.ref] = comment;\n }\n return h;\n }, {});\n options.hyperlinkMap = (model.hyperlinks || []).reduce((h, hyperlink) => {\n if (hyperlink.rId) {\n h[hyperlink.address] = rels[hyperlink.rId].Target;\n }\n return h;\n }, {});\n options.formulae = {};\n\n // compact the rows and cells\n model.rows = (model.rows && model.rows.filter(Boolean)) || [];\n model.rows.forEach(row => {\n row.cells = (row.cells && row.cells.filter(Boolean)) || [];\n });\n\n this.map.cols.reconcile(model.cols, options);\n this.map.sheetData.reconcile(model.rows, options);\n this.map.conditionalFormatting.reconcile(model.conditionalFormattings, options);\n\n model.media = [];\n if (model.drawing) {\n const drawingRel = rels[model.drawing.rId];\n const match = drawingRel.Target.match(/\\/drawings\\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);\n if (match) {\n const drawingName = match[1];\n const drawing = options.drawings[drawingName];\n drawing.anchors.forEach(anchor => {\n if (anchor.medium) {\n const image = {\n type: 'image',\n imageId: anchor.medium.index,\n range: anchor.range,\n hyperlinks: anchor.picture.hyperlinks,\n };\n model.media.push(image);\n }\n });\n }\n }\n\n const backgroundRel = model.background && rels[model.background.rId];\n if (backgroundRel) {\n const target = backgroundRel.Target.split('/media/')[1];\n const imageId = options.mediaIndex && options.mediaIndex[target];\n if (imageId !== undefined) {\n model.media.push({\n type: 'background',\n imageId,\n });\n }\n }\n\n model.tables = (model.tables || []).map(tablePart => {\n const rel = rels[tablePart.rId];\n return options.tables[rel.Target];\n });\n\n delete model.relationships;\n delete model.hyperlinks;\n delete model.comments;\n }\n}\n\nWorkSheetXform.WORKSHEET_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x14ac',\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\n};\n\nmodule.exports = WorkSheetXform;\n","const BaseXform = require('../base-xform');\n\nclass BooleanXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.tag);\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = BooleanXform;\n","const BaseXform = require('../base-xform');\n\nclass DateXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n this._format =\n options.format ||\n function(dt) {\n try {\n if (Number.isNaN(dt.getTime())) return '';\n return dt.toISOString();\n } catch (e) {\n return '';\n }\n };\n this._parse =\n options.parse ||\n function(str) {\n return new Date(str);\n };\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, this._format(model));\n } else {\n xmlStream.writeText(this._format(model));\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = this._parse(node.attributes[this.attr]);\n } else {\n this.text = [];\n }\n }\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = this._parse(this.text.join(''));\n }\n return false;\n }\n}\n\nmodule.exports = DateXform;\n","const BaseXform = require('../base-xform');\n\nclass IntegerXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n\n // option to render zero\n this.zero = options.zero;\n }\n\n render(xmlStream, model) {\n // int is different to float in that zero is not rendered\n if (model || this.zero) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, model);\n } else {\n xmlStream.writeText(model);\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = parseInt(node.attributes[this.attr], 10);\n } else {\n this.text = [];\n }\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = parseInt(this.text.join('') || 0, 10);\n }\n return false;\n }\n}\n\nmodule.exports = IntegerXform;\n","const BaseXform = require('../base-xform');\n\nclass StringXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n }\n\n render(xmlStream, model) {\n if (model !== undefined) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, model);\n } else {\n xmlStream.writeText(model);\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = node.attributes[this.attr];\n } else {\n this.text = [];\n }\n }\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = this.text.join('');\n }\n return false;\n }\n}\n\nmodule.exports = StringXform;\n","const BaseXform = require('./base-xform');\nconst XmlStream = require('../../utils/xml-stream');\n\n// const model = {\n// tag: 'name',\n// $: {attr: 'value'},\n// c: [\n// { tag: 'child' }\n// ],\n// t: 'some text'\n// };\n\nfunction build(xmlStream, model) {\n xmlStream.openNode(model.tag, model.$);\n if (model.c) {\n model.c.forEach(child => {\n build(xmlStream, child);\n });\n }\n if (model.t) {\n xmlStream.writeText(model.t);\n }\n xmlStream.closeNode();\n}\n\nclass StaticXform extends BaseXform {\n constructor(model) {\n super();\n\n // This class is an optimisation for static (unimportant and unchanging) xml\n // It is stateless - apart from its static model and so can be used as a singleton\n // Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else\n // Known issues:\n // since stateless - parseOpen always returns true. Parent xform must know when to start using this xform\n // if the root tag is recursive, the parsing will behave unpredictably\n this._model = model;\n }\n\n render(xmlStream) {\n if (!this._xml) {\n const stream = new XmlStream();\n build(stream, this._model);\n this._xml = stream.xml;\n }\n xmlStream.writeXml(this._xml);\n }\n\n parseOpen() {\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this._model.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = StaticXform;\n","const TextXform = require('./text-xform');\nconst RichTextXform = require('./rich-text-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// (its pronounciation in KATAKANA)\n// \n\nclass PhoneticTextXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n r: new RichTextXform(),\n t: new TextXform(),\n };\n }\n\n get tag() {\n return 'rPh';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n sb: model.sb || 0,\n eb: model.eb || 0,\n });\n if (model && model.hasOwnProperty('richText') && model.richText) {\n const {r} = this.map;\n model.richText.forEach(text => {\n r.render(xmlStream, text);\n });\n } else if (model) {\n this.map.t.render(xmlStream, model.text);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n const {name} = node;\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (name === this.tag) {\n this.model = {\n sb: parseInt(node.attributes.sb, 10),\n eb: parseInt(node.attributes.eb, 10),\n };\n return true;\n }\n this.parser = this.map[name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n switch (name) {\n case 'r': {\n let rt = this.model.richText;\n if (!rt) {\n rt = this.model.richText = [];\n }\n rt.push(this.parser.model);\n break;\n }\n case 't':\n this.model.text = this.parser.model;\n break;\n default:\n break;\n }\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = PhoneticTextXform;\n","const TextXform = require('./text-xform');\nconst FontXform = require('../style/font-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// \n// \n// \n// \n// \n// \n// \n// is \n// \n\nclass RichTextXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n }\n\n get tag() {\n return 'r';\n }\n\n get textXform() {\n return this._textXform || (this._textXform = new TextXform());\n }\n\n get fontXform() {\n return this._fontXform || (this._fontXform = new FontXform(RichTextXform.FONT_OPTIONS));\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n\n xmlStream.openNode('r');\n if (model.font) {\n this.fontXform.render(xmlStream, model.font);\n }\n this.textXform.render(xmlStream, model.text);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'r':\n this.model = {};\n return true;\n case 't':\n this.parser = this.textXform;\n this.parser.parseOpen(node);\n return true;\n case 'rPr':\n this.parser = this.fontXform;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'r':\n return false;\n case 't':\n this.model.text = this.parser.model;\n this.parser = undefined;\n return true;\n case 'rPr':\n this.model.font = this.parser.model;\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n }\n}\n\nRichTextXform.FONT_OPTIONS = {\n tagName: 'rPr',\n fontNameTag: 'rFont',\n};\n\nmodule.exports = RichTextXform;\n","const TextXform = require('./text-xform');\nconst RichTextXform = require('./rich-text-xform');\nconst PhoneticTextXform = require('./phonetic-text-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// ...\n// \n// \n// \n// \n\nclass SharedStringXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n\n this.map = {\n r: new RichTextXform(),\n t: new TextXform(),\n rPh: new PhoneticTextXform(),\n };\n }\n\n get tag() {\n return 'si';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n if (model && model.hasOwnProperty('richText') && model.richText) {\n if (model.richText.length) {\n model.richText.forEach(text => {\n this.map.r.render(xmlStream, text);\n });\n } else {\n this.map.t.render(xmlStream, '');\n }\n } else if (model !== undefined && model !== null) {\n this.map.t.render(xmlStream, model);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n const {name} = node;\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (name === this.tag) {\n this.model = {};\n return true;\n }\n this.parser = this.map[name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n switch (name) {\n case 'r': {\n let rt = this.model.richText;\n if (!rt) {\n rt = this.model.richText = [];\n }\n rt.push(this.parser.model);\n break;\n }\n case 't':\n this.model = this.parser.model;\n break;\n default:\n break;\n }\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = SharedStringXform;\n","const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst SharedStringXform = require('./shared-string-xform');\n\nclass SharedStringsXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model || {\n values: [],\n count: 0,\n };\n this.hash = Object.create(null);\n this.rich = Object.create(null);\n }\n\n get sharedStringXform() {\n return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform());\n }\n\n get values() {\n return this.model.values;\n }\n\n get uniqueCount() {\n return this.model.values.length;\n }\n\n get count() {\n return this.model.count;\n }\n\n getString(index) {\n return this.model.values[index];\n }\n\n add(value) {\n return value.richText ? this.addRichText(value) : this.addText(value);\n }\n\n addText(value) {\n let index = this.hash[value];\n if (index === undefined) {\n index = this.hash[value] = this.model.values.length;\n this.model.values.push(value);\n }\n this.model.count++;\n return index;\n }\n\n addRichText(value) {\n // TODO: add WeakMap here\n const xml = this.sharedStringXform.toXml(value);\n let index = this.rich[xml];\n if (index === undefined) {\n index = this.rich[xml] = this.model.values.length;\n this.model.values.push(value);\n }\n this.model.count++;\n return index;\n }\n\n // \n // \" uniqueCount=\"<%=count%>\">\n // <%=text%>\n // \n // \n\n render(xmlStream, model) {\n model = model || this._values;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('sst', {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n count: model.count,\n uniqueCount: model.values.length,\n });\n\n const sx = this.sharedStringXform;\n model.values.forEach(sharedString => {\n sx.render(xmlStream, sharedString);\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'sst':\n return true;\n case 'si':\n this.parser = this.sharedStringXform;\n this.parser.parseOpen(node);\n return true;\n default:\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.values.push(this.parser.model);\n this.model.count++;\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'sst':\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nmodule.exports = SharedStringsXform;\n","const BaseXform = require('../base-xform');\n\n// is \n\nclass TextXform extends BaseXform {\n get tag() {\n return 't';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('t');\n if (/^\\s|\\n|\\s$/.test(model)) {\n xmlStream.addAttribute('xml:space', 'preserve');\n }\n xmlStream.writeText(model);\n xmlStream.closeNode();\n }\n\n get model() {\n return this._text\n .join('')\n .replace(/_x([0-9A-F]{4})_/g, ($0, $1) => String.fromCharCode(parseInt($1, 16)));\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 't':\n this._text = [];\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this._text.push(text);\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TextXform;\n","const Enums = require('../../../doc/enums');\n\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nconst validation = {\n horizontalValues: [\n 'left',\n 'center',\n 'right',\n 'fill',\n 'centerContinuous',\n 'distributed',\n 'justify',\n ].reduce((p, v) => {\n p[v] = true;\n return p;\n }, {}),\n horizontal(value) {\n return this.horizontalValues[value] ? value : undefined;\n },\n\n verticalValues: ['top', 'middle', 'bottom', 'distributed', 'justify'].reduce((p, v) => {\n p[v] = true;\n return p;\n }, {}),\n vertical(value) {\n if (value === 'middle') return 'center';\n return this.verticalValues[value] ? value : undefined;\n },\n wrapText(value) {\n return value ? true : undefined;\n },\n shrinkToFit(value) {\n return value ? true : undefined;\n },\n textRotation(value) {\n switch (value) {\n case 'vertical':\n return value;\n default:\n value = utils.validInt(value);\n return value >= -90 && value <= 90 ? value : undefined;\n }\n },\n indent(value) {\n value = utils.validInt(value);\n return Math.max(0, value);\n },\n readingOrder(value) {\n switch (value) {\n case 'ltr':\n return Enums.ReadingOrder.LeftToRight;\n case 'rtl':\n return Enums.ReadingOrder.RightToLeft;\n default:\n return undefined;\n }\n },\n};\n\nconst textRotationXform = {\n toXml(textRotation) {\n textRotation = validation.textRotation(textRotation);\n if (textRotation) {\n if (textRotation === 'vertical') {\n return 255;\n }\n\n const tr = Math.round(textRotation);\n if (tr >= 0 && tr <= 90) {\n return tr;\n }\n\n if (tr < 0 && tr >= -90) {\n return 90 - tr;\n }\n }\n return undefined;\n },\n toModel(textRotation) {\n const tr = utils.validInt(textRotation);\n if (tr !== undefined) {\n if (tr === 255) {\n return 'vertical';\n }\n if (tr >= 0 && tr <= 90) {\n return tr;\n }\n if (tr > 90 && tr <= 180) {\n return 90 - tr;\n }\n }\n return undefined;\n },\n};\n\n// Alignment encapsulates translation from style.alignment model to/from xlsx\nclass AlignmentXform extends BaseXform {\n get tag() {\n return 'alignment';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('alignment');\n\n let isValid = false;\n function add(name, value) {\n if (value) {\n xmlStream.addAttribute(name, value);\n isValid = true;\n }\n }\n add('horizontal', validation.horizontal(model.horizontal));\n add('vertical', validation.vertical(model.vertical));\n add('wrapText', validation.wrapText(model.wrapText) ? '1' : false);\n add('shrinkToFit', validation.shrinkToFit(model.shrinkToFit) ? '1' : false);\n add('indent', validation.indent(model.indent));\n add('textRotation', textRotationXform.toXml(model.textRotation));\n add('readingOrder', validation.readingOrder(model.readingOrder));\n\n xmlStream.closeNode();\n\n if (isValid) {\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n\n parseOpen(node) {\n const model = {};\n\n let valid = false;\n function add(truthy, name, value) {\n if (truthy) {\n model[name] = value;\n valid = true;\n }\n }\n add(node.attributes.horizontal, 'horizontal', node.attributes.horizontal);\n add(\n node.attributes.vertical,\n 'vertical',\n node.attributes.vertical === 'center' ? 'middle' : node.attributes.vertical\n );\n add(node.attributes.wrapText, 'wrapText', utils.parseBoolean(node.attributes.wrapText));\n add(node.attributes.shrinkToFit, 'shrinkToFit', utils.parseBoolean(node.attributes.shrinkToFit));\n add(node.attributes.indent, 'indent', parseInt(node.attributes.indent, 10));\n add(\n node.attributes.textRotation,\n 'textRotation',\n textRotationXform.toModel(node.attributes.textRotation)\n );\n add(\n node.attributes.readingOrder,\n 'readingOrder',\n node.attributes.readingOrder === '2' ? 'rtl' : 'ltr'\n );\n\n this.model = valid ? model : null;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = AlignmentXform;\n","/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../base-xform');\nconst utils = require('../../../utils/utils');\n\nconst ColorXform = require('./color-xform');\n\nclass EdgeXform extends BaseXform {\n constructor(name) {\n super();\n\n this.name = name;\n this.map = {\n color: new ColorXform(),\n };\n }\n\n get tag() {\n return this.name;\n }\n\n render(xmlStream, model, defaultColor) {\n const color = (model && model.color) || defaultColor || this.defaultColor;\n xmlStream.openNode(this.name);\n if (model && model.style) {\n xmlStream.addAttribute('style', model.style);\n if (color) {\n this.map.color.render(xmlStream, color);\n }\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.name: {\n const {style} = node.attributes;\n if (style) {\n this.model = {\n style,\n };\n } else {\n this.model = undefined;\n }\n return true;\n }\n case 'color':\n this.parser = this.map.color;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n\n if (name === this.name) {\n if (this.map.color.model) {\n if (!this.model) {\n this.model = {};\n }\n this.model.color = this.map.color.model;\n }\n }\n\n return false;\n }\n\n validStyle(value) {\n return EdgeXform.validStyleValues[value];\n }\n}\n\nEdgeXform.validStyleValues = [\n 'thin',\n 'dashed',\n 'dotted',\n 'dashDot',\n 'hair',\n 'dashDotDot',\n 'slantDashDot',\n 'mediumDashed',\n 'mediumDashDotDot',\n 'mediumDashDot',\n 'medium',\n 'double',\n 'thick',\n].reduce((p, v) => {\n p[v] = true;\n return p;\n}, {});\n\n// Border encapsulates translation from border model to/from xlsx\nclass BorderXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n top: new EdgeXform('top'),\n left: new EdgeXform('left'),\n bottom: new EdgeXform('bottom'),\n right: new EdgeXform('right'),\n diagonal: new EdgeXform('diagonal'),\n };\n }\n\n render(xmlStream, model) {\n const {color} = model;\n xmlStream.openNode('border');\n if (model.diagonal && model.diagonal.style) {\n if (model.diagonal.up) {\n xmlStream.addAttribute('diagonalUp', '1');\n }\n if (model.diagonal.down) {\n xmlStream.addAttribute('diagonalDown', '1');\n }\n }\n function add(edgeModel, edgeXform) {\n if (edgeModel && !edgeModel.color && model.color) {\n // don't mess with incoming models\n edgeModel = {\n ...edgeModel,\n color: model.color,\n };\n }\n edgeXform.render(xmlStream, edgeModel, color);\n }\n add(model.left, this.map.left);\n add(model.right, this.map.right);\n add(model.top, this.map.top);\n add(model.bottom, this.map.bottom);\n add(model.diagonal, this.map.diagonal);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'border':\n this.reset();\n this.diagonalUp = utils.parseBoolean(node.attributes.diagonalUp);\n this.diagonalDown = utils.parseBoolean(node.attributes.diagonalDown);\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (name === 'border') {\n const model = (this.model = {});\n const add = function(key, edgeModel, extensions) {\n if (edgeModel) {\n if (extensions) {\n Object.assign(edgeModel, extensions);\n }\n model[key] = edgeModel;\n }\n };\n add('left', this.map.left.model);\n add('right', this.map.right.model);\n add('top', this.map.top.model);\n add('bottom', this.map.bottom.model);\n add('diagonal', this.map.diagonal.model, {up: this.diagonalUp, down: this.diagonalDown});\n }\n return false;\n }\n}\n\nmodule.exports = BorderXform;\n","const BaseXform = require('../base-xform');\n\n// Color encapsulates translation from color model to/from xlsx\nclass ColorXform extends BaseXform {\n constructor(name) {\n super();\n\n // this.name controls the xm node name\n this.name = name || 'color';\n }\n\n get tag() {\n return this.name;\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.name);\n if (model.argb) {\n xmlStream.addAttribute('rgb', model.argb);\n } else if (model.theme !== undefined) {\n xmlStream.addAttribute('theme', model.theme);\n if (model.tint !== undefined) {\n xmlStream.addAttribute('tint', model.tint);\n }\n } else if (model.indexed !== undefined) {\n xmlStream.addAttribute('indexed', model.indexed);\n } else {\n xmlStream.addAttribute('auto', '1');\n }\n xmlStream.closeNode();\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.name) {\n if (node.attributes.rgb) {\n this.model = {argb: node.attributes.rgb};\n } else if (node.attributes.theme) {\n this.model = {theme: parseInt(node.attributes.theme, 10)};\n if (node.attributes.tint) {\n this.model.tint = parseFloat(node.attributes.tint);\n }\n } else if (node.attributes.indexed) {\n this.model = {indexed: parseInt(node.attributes.indexed, 10)};\n } else {\n this.model = undefined;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = ColorXform;\n","const BaseXform = require('../base-xform');\n\nconst AlignmentXform = require('./alignment-xform');\nconst BorderXform = require('./border-xform');\nconst FillXform = require('./fill-xform');\nconst FontXform = require('./font-xform');\nconst NumFmtXform = require('./numfmt-xform');\nconst ProtectionXform = require('./protection-xform');\n\n// \n// Optional \n// Optional \n// \n\n// Style assists translation from style model to/from xlsx\nclass DxfXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n alignment: new AlignmentXform(),\n border: new BorderXform(),\n fill: new FillXform(),\n font: new FontXform(),\n numFmt: new NumFmtXform(),\n protection: new ProtectionXform(),\n };\n }\n\n get tag() {\n return 'dxf';\n }\n\n // how do we generate dxfid?\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n if (model.font) {\n this.map.font.render(xmlStream, model.font);\n }\n if (model.numFmt && model.numFmtId) {\n const numFmtModel = {id: model.numFmtId, formatCode: model.numFmt};\n this.map.numFmt.render(xmlStream, numFmtModel);\n }\n if (model.fill) {\n this.map.fill.render(xmlStream, model.fill);\n }\n if (model.alignment) {\n this.map.alignment.render(xmlStream, model.alignment);\n }\n if (model.border) {\n this.map.border.render(xmlStream, model.border);\n }\n if (model.protection) {\n this.map.protection.render(xmlStream, model.protection);\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n // this node is often repeated. Need to reset children\n this.reset();\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (name === this.tag) {\n this.model = {\n alignment: this.map.alignment.model,\n border: this.map.border.model,\n fill: this.map.fill.model,\n font: this.map.font.model,\n numFmt: this.map.numFmt.model,\n protection: this.map.protection.model,\n };\n return false;\n }\n\n return true;\n }\n}\n\nmodule.exports = DxfXform;\n","/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../base-xform');\n\nconst ColorXform = require('./color-xform');\n\nclass StopXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n color: new ColorXform(),\n };\n }\n\n get tag() {\n return 'stop';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('stop');\n xmlStream.addAttribute('position', model.position);\n this.map.color.render(xmlStream, model.color);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'stop':\n this.model = {\n position: parseFloat(node.attributes.position),\n };\n return true;\n case 'color':\n this.parser = this.map.color;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.color = this.parser.model;\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\nclass PatternFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fgColor: new ColorXform('fgColor'),\n bgColor: new ColorXform('bgColor'),\n };\n }\n\n get name() {\n return 'pattern';\n }\n\n get tag() {\n return 'patternFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('patternFill');\n xmlStream.addAttribute('patternType', model.pattern);\n if (model.fgColor) {\n this.map.fgColor.render(xmlStream, model.fgColor);\n }\n if (model.bgColor) {\n this.map.bgColor.render(xmlStream, model.bgColor);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'patternFill':\n this.model = {\n type: 'pattern',\n pattern: node.attributes.patternType,\n };\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n if (this.parser.model) {\n this.model[name] = this.parser.model;\n }\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\nclass GradientFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n stop: new StopXform(),\n };\n // if (model) {\n // this.gradient = model.gradient;\n // if (model.center) {\n // this.center = model.center;\n // }\n // if (model.degree !== undefined) {\n // this.degree = model.degree;\n // }\n // this.stops = model.stops.map(function(stop) { return new StopXform(stop); });\n // } else {\n // this.stops = [];\n // }\n }\n\n get name() {\n return 'gradient';\n }\n\n get tag() {\n return 'gradientFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('gradientFill');\n switch (model.gradient) {\n case 'angle':\n xmlStream.addAttribute('degree', model.degree);\n break;\n case 'path':\n xmlStream.addAttribute('type', 'path');\n if (model.center.left) {\n xmlStream.addAttribute('left', model.center.left);\n if (model.center.right === undefined) {\n xmlStream.addAttribute('right', model.center.left);\n }\n }\n if (model.center.right) {\n xmlStream.addAttribute('right', model.center.right);\n }\n if (model.center.top) {\n xmlStream.addAttribute('top', model.center.top);\n if (model.center.bottom === undefined) {\n xmlStream.addAttribute('bottom', model.center.top);\n }\n }\n if (model.center.bottom) {\n xmlStream.addAttribute('bottom', model.center.bottom);\n }\n break;\n\n default:\n break;\n }\n\n const stopXform = this.map.stop;\n model.stops.forEach(stopModel => {\n stopXform.render(xmlStream, stopModel);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'gradientFill': {\n const model = (this.model = {\n stops: [],\n });\n if (node.attributes.degree) {\n model.gradient = 'angle';\n model.degree = parseInt(node.attributes.degree, 10);\n } else if (node.attributes.type === 'path') {\n model.gradient = 'path';\n model.center = {\n left: node.attributes.left ? parseFloat(node.attributes.left) : 0,\n top: node.attributes.top ? parseFloat(node.attributes.top) : 0,\n };\n if (node.attributes.right !== node.attributes.left) {\n model.center.right = node.attributes.right ? parseFloat(node.attributes.right) : 0;\n }\n if (node.attributes.bottom !== node.attributes.top) {\n model.center.bottom = node.attributes.bottom ? parseFloat(node.attributes.bottom) : 0;\n }\n }\n return true;\n }\n\n case 'stop':\n this.parser = this.map.stop;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.stops.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\n// Fill encapsulates translation from fill model to/from xlsx\nclass FillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n patternFill: new PatternFillXform(),\n gradientFill: new GradientFillXform(),\n };\n }\n\n get tag() {\n return 'fill';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('fill');\n switch (model.type) {\n case 'pattern':\n this.map.patternFill.render(xmlStream, model);\n break;\n case 'gradient':\n this.map.gradientFill.render(xmlStream, model);\n break;\n default:\n xmlStream.rollback();\n return;\n }\n xmlStream.closeNode();\n xmlStream.commit();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'fill':\n this.model = {};\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model = this.parser.model;\n this.model.type = this.parser.name;\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n\n validStyle(value) {\n return FillXform.validPatternValues[value];\n }\n}\n\nFillXform.validPatternValues = [\n 'none',\n 'solid',\n 'darkVertical',\n 'darkGray',\n 'mediumGray',\n 'lightGray',\n 'gray125',\n 'gray0625',\n 'darkHorizontal',\n 'darkVertical',\n 'darkDown',\n 'darkUp',\n 'darkGrid',\n 'darkTrellis',\n 'lightHorizontal',\n 'lightVertical',\n 'lightDown',\n 'lightUp',\n 'lightGrid',\n 'lightTrellis',\n 'lightGrid',\n].reduce((p, v) => {\n p[v] = true;\n return p;\n}, {});\n\nFillXform.StopXform = StopXform;\nFillXform.PatternFillXform = PatternFillXform;\nFillXform.GradientFillXform = GradientFillXform;\n\nmodule.exports = FillXform;\n","'use strict';\n\nconst ColorXform = require('./color-xform');\nconst BooleanXform = require('../simple/boolean-xform');\nconst IntegerXform = require('../simple/integer-xform');\nconst StringXform = require('../simple/string-xform');\nconst UnderlineXform = require('./underline-xform');\n\nconst _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\n// Font encapsulates translation from font model to xlsx\nclass FontXform extends BaseXform {\n constructor(options) {\n super();\n\n this.options = options || FontXform.OPTIONS;\n\n this.map = {\n b: {prop: 'bold', xform: new BooleanXform({tag: 'b', attr: 'val'})},\n i: {prop: 'italic', xform: new BooleanXform({tag: 'i', attr: 'val'})},\n u: {prop: 'underline', xform: new UnderlineXform()},\n charset: {prop: 'charset', xform: new IntegerXform({tag: 'charset', attr: 'val'})},\n color: {prop: 'color', xform: new ColorXform()},\n condense: {prop: 'condense', xform: new BooleanXform({tag: 'condense', attr: 'val'})},\n extend: {prop: 'extend', xform: new BooleanXform({tag: 'extend', attr: 'val'})},\n family: {prop: 'family', xform: new IntegerXform({tag: 'family', attr: 'val'})},\n outline: {prop: 'outline', xform: new BooleanXform({tag: 'outline', attr: 'val'})},\n vertAlign: {prop: 'vertAlign', xform: new StringXform({tag: 'vertAlign', attr: 'val'})},\n scheme: {prop: 'scheme', xform: new StringXform({tag: 'scheme', attr: 'val'})},\n shadow: {prop: 'shadow', xform: new BooleanXform({tag: 'shadow', attr: 'val'})},\n strike: {prop: 'strike', xform: new BooleanXform({tag: 'strike', attr: 'val'})},\n sz: {prop: 'size', xform: new IntegerXform({tag: 'sz', attr: 'val'})},\n };\n this.map[this.options.fontNameTag] = {\n prop: 'name',\n xform: new StringXform({tag: this.options.fontNameTag, attr: 'val'}),\n };\n }\n\n get tag() {\n return this.options.tagName;\n }\n\n render(xmlStream, model) {\n const {map} = this;\n\n xmlStream.openNode(this.options.tagName);\n _.each(this.map, (defn, tag) => {\n map[tag].xform.render(xmlStream, model[defn.prop]);\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (this.map[node.name]) {\n this.parser = this.map[node.name].xform;\n return this.parser.parseOpen(node);\n }\n switch (node.name) {\n case this.options.tagName:\n this.model = {};\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser && !this.parser.parseClose(name)) {\n const item = this.map[name];\n if (this.parser.model) {\n this.model[item.prop] = this.parser.model;\n }\n this.parser = undefined;\n return true;\n }\n switch (name) {\n case this.options.tagName:\n return false;\n default:\n return true;\n }\n }\n}\n\nFontXform.OPTIONS = {\n tagName: 'font',\n fontNameTag: 'name',\n};\n\nmodule.exports = FontXform;\n","const _ = require('../../../utils/under-dash');\nconst defaultNumFormats = require('../../defaultnumformats');\n\nconst BaseXform = require('../base-xform');\n\nfunction hashDefaultFormats() {\n const hash = {};\n _.each(defaultNumFormats, (dnf, id) => {\n if (dnf.f) {\n hash[dnf.f] = parseInt(id, 10);\n }\n // at some point, add the other cultures here...\n });\n return hash;\n}\nconst defaultFmtHash = hashDefaultFormats();\n\n// NumFmt encapsulates translation between number format and xlsx\nclass NumFmtXform extends BaseXform {\n constructor(id, formatCode) {\n super();\n\n this.id = id;\n this.formatCode = formatCode;\n }\n\n get tag() {\n return 'numFmt';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('numFmt', {numFmtId: model.id, formatCode: model.formatCode});\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'numFmt':\n this.model = {\n id: parseInt(node.attributes.numFmtId, 10),\n formatCode: node.attributes.formatCode.replace(/[\\\\](.)/g, '$1'),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nNumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) {\n return defaultFmtHash[formatCode];\n};\n\nNumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) {\n return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f;\n};\n\nmodule.exports = NumFmtXform;\n","const BaseXform = require('../base-xform');\n\nconst validation = {\n boolean(value, dflt) {\n if (value === undefined) {\n return dflt;\n }\n return value;\n },\n};\n\n// Protection encapsulates translation from style.protection model to/from xlsx\nclass ProtectionXform extends BaseXform {\n get tag() {\n return 'protection';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('protection');\n\n let isValid = false;\n function add(name, value) {\n if (value !== undefined) {\n xmlStream.addAttribute(name, value);\n isValid = true;\n }\n }\n add('locked', validation.boolean(model.locked, true) ? undefined : '0');\n add('hidden', validation.boolean(model.hidden, false) ? '1' : undefined);\n\n xmlStream.closeNode();\n\n if (isValid) {\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n\n parseOpen(node) {\n const model = {\n locked: !(node.attributes.locked === '0'),\n hidden: node.attributes.hidden === '1',\n };\n\n // only want to record models that differ from defaults\n const isSignificant = !model.locked || model.hidden;\n\n this.model = isSignificant ? model : null;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = ProtectionXform;\n","const BaseXform = require('../base-xform');\n\nconst AlignmentXform = require('./alignment-xform');\nconst ProtectionXform = require('./protection-xform');\n\n// \n// Optional \n// Optional \n// \n\n// Style assists translation from style model to/from xlsx\nclass StyleXform extends BaseXform {\n constructor(options) {\n super();\n\n this.xfId = !!(options && options.xfId);\n this.map = {\n alignment: new AlignmentXform(),\n protection: new ProtectionXform(),\n };\n }\n\n get tag() {\n return 'xf';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('xf', {\n numFmtId: model.numFmtId || 0,\n fontId: model.fontId || 0,\n fillId: model.fillId || 0,\n borderId: model.borderId || 0,\n });\n if (this.xfId) {\n xmlStream.addAttribute('xfId', model.xfId || 0);\n }\n\n if (model.numFmtId) {\n xmlStream.addAttribute('applyNumberFormat', '1');\n }\n if (model.fontId) {\n xmlStream.addAttribute('applyFont', '1');\n }\n if (model.fillId) {\n xmlStream.addAttribute('applyFill', '1');\n }\n if (model.borderId) {\n xmlStream.addAttribute('applyBorder', '1');\n }\n if (model.alignment) {\n xmlStream.addAttribute('applyAlignment', '1');\n }\n if (model.protection) {\n xmlStream.addAttribute('applyProtection', '1');\n }\n\n /**\n * Rendering tags causes close of XML stream.\n * Therefore adding attributes must be done before rendering tags.\n */\n\n if (model.alignment) {\n this.map.alignment.render(xmlStream, model.alignment);\n }\n if (model.protection) {\n this.map.protection.render(xmlStream, model.protection);\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n // used during sax parsing of xml to build font object\n switch (node.name) {\n case 'xf':\n this.model = {\n numFmtId: parseInt(node.attributes.numFmtId, 10),\n fontId: parseInt(node.attributes.fontId, 10),\n fillId: parseInt(node.attributes.fillId, 10),\n borderId: parseInt(node.attributes.borderId, 10),\n };\n if (this.xfId) {\n this.model.xfId = parseInt(node.attributes.xfId, 10);\n }\n return true;\n case 'alignment':\n this.parser = this.map.alignment;\n this.parser.parseOpen(node);\n return true;\n case 'protection':\n this.parser = this.map.protection;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n if (this.map.protection === this.parser) {\n this.model.protection = this.parser.model;\n } else {\n this.model.alignment = this.parser.model;\n }\n this.parser = undefined;\n }\n return true;\n }\n return name !== 'xf';\n }\n}\n\nmodule.exports = StyleXform;\n","/* eslint-disable max-classes-per-file */\nconst Enums = require('../../../doc/enums');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst FontXform = require('./font-xform');\nconst FillXform = require('./fill-xform');\nconst BorderXform = require('./border-xform');\nconst NumFmtXform = require('./numfmt-xform');\nconst StyleXform = require('./style-xform');\nconst DxfXform = require('./dxf-xform');\n\n// custom numfmt ids start here\nconst NUMFMT_BASE = 164;\n\n// =============================================================================\n// StylesXform is used to generate and parse the styles.xml file\n// it manages the collections of fonts, number formats, alignments, etc\nclass StylesXform extends BaseXform {\n constructor(initialise) {\n super();\n\n this.map = {\n numFmts: new ListXform({tag: 'numFmts', count: true, childXform: new NumFmtXform()}),\n fonts: new ListXform({\n tag: 'fonts',\n count: true,\n childXform: new FontXform(),\n $: {'x14ac:knownFonts': 1},\n }),\n fills: new ListXform({tag: 'fills', count: true, childXform: new FillXform()}),\n borders: new ListXform({tag: 'borders', count: true, childXform: new BorderXform()}),\n cellStyleXfs: new ListXform({tag: 'cellStyleXfs', count: true, childXform: new StyleXform()}),\n cellXfs: new ListXform({\n tag: 'cellXfs',\n count: true,\n childXform: new StyleXform({xfId: true}),\n }),\n dxfs: new ListXform({tag: 'dxfs', always: true, count: true, childXform: new DxfXform()}),\n\n // for style manager\n numFmt: new NumFmtXform(),\n font: new FontXform(),\n fill: new FillXform(),\n border: new BorderXform(),\n style: new StyleXform({xfId: true}),\n\n cellStyles: StylesXform.STATIC_XFORMS.cellStyles,\n tableStyles: StylesXform.STATIC_XFORMS.tableStyles,\n extLst: StylesXform.STATIC_XFORMS.extLst,\n };\n\n if (initialise) {\n // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing\n this.init();\n }\n }\n\n initIndex() {\n this.index = {\n style: {},\n numFmt: {},\n numFmtNextId: 164, // start custom format ids here\n font: {},\n border: {},\n fill: {},\n };\n }\n\n init() {\n // Prepare for Style Manager role\n this.model = {\n styles: [],\n numFmts: [],\n fonts: [],\n borders: [],\n fills: [],\n dxfs: [],\n };\n\n this.initIndex();\n\n // default (zero) border\n this._addBorder({});\n\n // add default (all zero) style\n this._addStyle({numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0});\n\n // add default fills\n this._addFill({type: 'pattern', pattern: 'none'});\n this._addFill({type: 'pattern', pattern: 'gray125'});\n\n this.weakMap = new WeakMap();\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n //\n // \n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES);\n\n if (this.index) {\n // model has been built by style manager role (contains xml)\n if (model.numFmts && model.numFmts.length) {\n xmlStream.openNode('numFmts', {count: model.numFmts.length});\n model.numFmts.forEach(numFmtXml => {\n xmlStream.writeXml(numFmtXml);\n });\n xmlStream.closeNode();\n }\n\n if (!model.fonts.length) {\n // default (zero) font\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\n }\n xmlStream.openNode('fonts', {count: model.fonts.length, 'x14ac:knownFonts': 1});\n model.fonts.forEach(fontXml => {\n xmlStream.writeXml(fontXml);\n });\n xmlStream.closeNode();\n\n xmlStream.openNode('fills', {count: model.fills.length});\n model.fills.forEach(fillXml => {\n xmlStream.writeXml(fillXml);\n });\n xmlStream.closeNode();\n\n xmlStream.openNode('borders', {count: model.borders.length});\n model.borders.forEach(borderXml => {\n xmlStream.writeXml(borderXml);\n });\n xmlStream.closeNode();\n\n this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);\n\n xmlStream.openNode('cellXfs', {count: model.styles.length});\n model.styles.forEach(styleXml => {\n xmlStream.writeXml(styleXml);\n });\n xmlStream.closeNode();\n } else {\n // model is plain JSON and needs to be xformed\n this.map.numFmts.render(xmlStream, model.numFmts);\n this.map.fonts.render(xmlStream, model.fonts);\n this.map.fills.render(xmlStream, model.fills);\n this.map.borders.render(xmlStream, model.borders);\n this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);\n this.map.cellXfs.render(xmlStream, model.styles);\n }\n\n StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream);\n\n this.map.dxfs.render(xmlStream, model.dxfs);\n\n StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream);\n StylesXform.STATIC_XFORMS.extLst.render(xmlStream);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'styleSheet':\n this.initIndex();\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'styleSheet': {\n this.model = {};\n const add = (propName, xform) => {\n if (xform.model && xform.model.length) {\n this.model[propName] = xform.model;\n }\n };\n add('numFmts', this.map.numFmts);\n add('fonts', this.map.fonts);\n add('fills', this.map.fills);\n add('borders', this.map.borders);\n add('styles', this.map.cellXfs);\n add('dxfs', this.map.dxfs);\n\n // index numFmts\n this.index = {\n model: [],\n numFmt: [],\n };\n if (this.model.numFmts) {\n const numFmtIndex = this.index.numFmt;\n this.model.numFmts.forEach(numFmt => {\n numFmtIndex[numFmt.id] = numFmt.formatCode;\n });\n }\n\n return false;\n }\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n // add a cell's style model to the collection\n // each style property is processed and cross-referenced, etc.\n // the styleId is returned. Note: cellType is used when numFmt not defined\n addStyleModel(model, cellType) {\n if (!model) {\n return 0;\n }\n\n // if we have no default font, add it here now\n if (!this.model.fonts.length) {\n // default (zero) font\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\n }\n\n // if we have seen this style object before, assume it has the same styleId\n if (this.weakMap && this.weakMap.has(model)) {\n return this.weakMap.get(model);\n }\n\n const style = {};\n cellType = cellType || Enums.ValueType.Number;\n\n if (model.numFmt) {\n style.numFmtId = this._addNumFmtStr(model.numFmt);\n } else {\n switch (cellType) {\n case Enums.ValueType.Number:\n style.numFmtId = this._addNumFmtStr('General');\n break;\n case Enums.ValueType.Date:\n style.numFmtId = this._addNumFmtStr('mm-dd-yy');\n break;\n default:\n break;\n }\n }\n\n if (model.font) {\n style.fontId = this._addFont(model.font);\n }\n\n if (model.border) {\n style.borderId = this._addBorder(model.border);\n }\n\n if (model.fill) {\n style.fillId = this._addFill(model.fill);\n }\n\n if (model.alignment) {\n style.alignment = model.alignment;\n }\n\n if (model.protection) {\n style.protection = model.protection;\n }\n\n const styleId = this._addStyle(style);\n if (this.weakMap) {\n this.weakMap.set(model, styleId);\n }\n return styleId;\n }\n\n // given a styleId (i.e. s=\"n\"), get the cell's style model\n // objects are shared where possible.\n getStyleModel(id) {\n // if the style doesn't exist return null\n const style = this.model.styles[id];\n if (!style) return null;\n\n // have we built this model before?\n let model = this.index.model[id];\n if (model) return model;\n\n // build a new model\n model = this.index.model[id] = {};\n\n // -------------------------------------------------------\n // number format\n if (style.numFmtId) {\n const numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId);\n if (numFmt) {\n model.numFmt = numFmt;\n }\n }\n\n function addStyle(name, group, styleId) {\n if (styleId || styleId === 0) {\n const part = group[styleId];\n if (part) {\n model[name] = part;\n }\n }\n }\n\n addStyle('font', this.model.fonts, style.fontId);\n addStyle('border', this.model.borders, style.borderId);\n addStyle('fill', this.model.fills, style.fillId);\n\n // -------------------------------------------------------\n // alignment\n if (style.alignment) {\n model.alignment = style.alignment;\n }\n\n // -------------------------------------------------------\n // protection\n if (style.protection) {\n model.protection = style.protection;\n }\n\n return model;\n }\n\n addDxfStyle(style) {\n if (style.numFmt) {\n // register numFmtId to use it during dxf-xform rendering\n style.numFmtId = this._addNumFmtStr(style.numFmt);\n }\n\n this.model.dxfs.push(style);\n return this.model.dxfs.length - 1;\n }\n\n getDxfStyle(id) {\n return this.model.dxfs[id];\n }\n\n // =========================================================================\n // Private Interface\n _addStyle(style) {\n const xml = this.map.style.toXml(style);\n let index = this.index.style[xml];\n if (index === undefined) {\n index = this.index.style[xml] = this.model.styles.length;\n this.model.styles.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Number Formats\n _addNumFmtStr(formatCode) {\n // check if default format\n let index = NumFmtXform.getDefaultFmtId(formatCode);\n if (index !== undefined) return index;\n\n // check if already in\n index = this.index.numFmt[formatCode];\n if (index !== undefined) return index;\n\n index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length;\n const xml = this.map.numFmt.toXml({id: index, formatCode});\n this.model.numFmts.push(xml);\n return index;\n }\n\n // =========================================================================\n // Fonts\n _addFont(font) {\n const xml = this.map.font.toXml(font);\n let index = this.index.font[xml];\n if (index === undefined) {\n index = this.index.font[xml] = this.model.fonts.length;\n this.model.fonts.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Borders\n _addBorder(border) {\n const xml = this.map.border.toXml(border);\n let index = this.index.border[xml];\n if (index === undefined) {\n index = this.index.border[xml] = this.model.borders.length;\n this.model.borders.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Fills\n _addFill(fill) {\n const xml = this.map.fill.toXml(fill);\n let index = this.index.fill[xml];\n if (index === undefined) {\n index = this.index.fill[xml] = this.model.fills.length;\n this.model.fills.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n}\n\nStylesXform.STYLESHEET_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x14ac x16r2',\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\n 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main',\n};\nStylesXform.STATIC_XFORMS = {\n cellStyles: new StaticXform({\n tag: 'cellStyles',\n $: {count: 1},\n c: [{tag: 'cellStyle', $: {name: 'Normal', xfId: 0, builtinId: 0}}],\n }),\n dxfs: new StaticXform({tag: 'dxfs', $: {count: 0}}),\n tableStyles: new StaticXform({\n tag: 'tableStyles',\n $: {count: 0, defaultTableStyle: 'TableStyleMedium2', defaultPivotStyle: 'PivotStyleLight16'},\n }),\n extLst: new StaticXform({\n tag: 'extLst',\n c: [\n {\n tag: 'ext',\n $: {\n uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n },\n c: [{tag: 'x14:slicerStyles', $: {defaultSlicerStyle: 'SlicerStyleLight1'}}],\n },\n {\n tag: 'ext',\n $: {\n uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n },\n c: [{tag: 'x15:timelineStyles', $: {defaultTimelineStyle: 'TimeSlicerStyleLight1'}}],\n },\n ],\n }),\n};\n\n// the stylemanager mock acts like StyleManager except that it always returns 0 or {}\nclass StylesXformMock extends StylesXform {\n constructor() {\n super();\n\n this.model = {\n styles: [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}],\n numFmts: [],\n fonts: [{size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'}],\n borders: [{}],\n fills: [\n {type: 'pattern', pattern: 'none'},\n {type: 'pattern', pattern: 'gray125'},\n ],\n };\n }\n\n // =========================================================================\n // Style Manager Interface\n\n // override normal behaviour - consume and dispose\n parseStream(stream) {\n stream.autodrain();\n return Promise.resolve();\n }\n\n // add a cell's style model to the collection\n // each style property is processed and cross-referenced, etc.\n // the styleId is returned. Note: cellType is used when numFmt not defined\n addStyleModel(model, cellType) {\n switch (cellType) {\n case Enums.ValueType.Date:\n return this.dateStyleId;\n default:\n return 0;\n }\n }\n\n get dateStyleId() {\n if (!this._dateStyleId) {\n const dateStyle = {\n numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy'),\n };\n this._dateStyleId = this.model.styles.length;\n this.model.styles.push(dateStyle);\n }\n return this._dateStyleId;\n }\n\n // given a styleId (i.e. s=\"n\"), get the cell's style model\n // objects are shared where possible.\n getStyleModel(/* id */) {\n return {};\n }\n}\n\nStylesXform.Mock = StylesXformMock;\n\nmodule.exports = StylesXform;\n","const BaseXform = require('../base-xform');\n\nclass UnderlineXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n }\n\n get tag() {\n return 'u';\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n\n if (model === true) {\n xmlStream.leafNode('u');\n } else {\n const attr = UnderlineXform.Attributes[model];\n if (attr) {\n xmlStream.leafNode('u', attr);\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'u') {\n this.model = node.attributes.val || true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nUnderlineXform.Attributes = {\n single: {},\n double: {val: 'double'},\n singleAccounting: {val: 'singleAccounting'},\n doubleAccounting: {val: 'doubleAccounting'},\n};\n\nmodule.exports = UnderlineXform;\n","const BaseXform = require('../base-xform');\n\nconst FilterColumnXform = require('./filter-column-xform');\n\nclass AutoFilterXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n filterColumn: new FilterColumnXform(),\n };\n }\n\n get tag() {\n return 'autoFilter';\n }\n\n prepare(model) {\n model.columns.forEach((column, index) => {\n this.map.filterColumn.prepare(column, {index});\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {ref: model.autoFilterRef});\n\n model.columns.forEach(column => {\n this.map.filterColumn.render(xmlStream, column);\n });\n\n xmlStream.closeNode();\n return true;\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.model = {\n autoFilterRef: node.attributes.ref,\n columns: [],\n };\n return true;\n\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.columns.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nmodule.exports = AutoFilterXform;\n","const BaseXform = require('../base-xform');\n\nclass CustomFilterXform extends BaseXform {\n get tag() {\n return 'customFilter';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n val: model.val,\n operator: model.operator,\n });\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n val: node.attributes.val,\n operator: node.attributes.operator,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = CustomFilterXform;\n","const BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst CustomFilterXform = require('./custom-filter-xform');\nconst FilterXform = require('./filter-xform');\n\nclass FilterColumnXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n customFilters: new ListXform({\n tag: 'customFilters',\n count: false,\n empty: true,\n childXform: new CustomFilterXform(),\n }),\n filters: new ListXform({\n tag: 'filters',\n count: false,\n empty: true,\n childXform: new FilterXform(),\n }),\n };\n }\n\n get tag() {\n return 'filterColumn';\n }\n\n prepare(model, options) {\n model.colId = options.index.toString();\n }\n\n render(xmlStream, model) {\n if (model.customFilters) {\n xmlStream.openNode(this.tag, {\n colId: model.colId,\n hiddenButton: model.filterButton ? '0' : '1',\n });\n\n this.map.customFilters.render(xmlStream, model.customFilters);\n\n xmlStream.closeNode();\n return true;\n }\n xmlStream.leafNode(this.tag, {\n colId: model.colId,\n hiddenButton: model.filterButton ? '0' : '1',\n });\n return true;\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {attributes} = node;\n switch (node.name) {\n case this.tag:\n this.model = {\n filterButton: attributes.hiddenButton === '0',\n };\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.customFilters = this.map.customFilters.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n}\n\nmodule.exports = FilterColumnXform;\n","const BaseXform = require('../base-xform');\n\nclass FilterXform extends BaseXform {\n get tag() {\n return 'filter';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n val: model.val,\n });\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n val: node.attributes.val,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = FilterXform;\n","const BaseXform = require('../base-xform');\n\nclass TableColumnXform extends BaseXform {\n get tag() {\n return 'tableColumn';\n }\n\n prepare(model, options) {\n model.id = options.index + 1;\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n id: model.id.toString(),\n name: model.name,\n totalsRowLabel: model.totalsRowLabel,\n totalsRowFunction: model.totalsRowFunction,\n dxfId: model.dxfId,\n });\n return true;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n const {attributes} = node;\n this.model = {\n name: attributes.name,\n totalsRowLabel: attributes.totalsRowLabel,\n totalsRowFunction: attributes.totalsRowFunction,\n dxfId: attributes.dxfId,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TableColumnXform;\n","const BaseXform = require('../base-xform');\n\nclass TableStyleInfoXform extends BaseXform {\n get tag() {\n return 'tableStyleInfo';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n name: model.theme ? model.theme : undefined,\n showFirstColumn: model.showFirstColumn ? '1' : '0',\n showLastColumn: model.showLastColumn ? '1' : '0',\n showRowStripes: model.showRowStripes ? '1' : '0',\n showColumnStripes: model.showColumnStripes ? '1' : '0',\n });\n return true;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n const {attributes} = node;\n this.model = {\n theme: attributes.name ? attributes.name : null,\n showFirstColumn: attributes.showFirstColumn === '1',\n showLastColumn: attributes.showLastColumn === '1',\n showRowStripes: attributes.showRowStripes === '1',\n showColumnStripes: attributes.showColumnStripes === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TableStyleInfoXform;\n","const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst AutoFilterXform = require('./auto-filter-xform');\nconst TableColumnXform = require('./table-column-xform');\nconst TableStyleInfoXform = require('./table-style-info-xform');\n\nclass TableXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n autoFilter: new AutoFilterXform(),\n tableColumns: new ListXform({\n tag: 'tableColumns',\n count: true,\n empty: true,\n childXform: new TableColumnXform(),\n }),\n tableStyleInfo: new TableStyleInfoXform(),\n };\n }\n\n prepare(model, options) {\n this.map.autoFilter.prepare(model);\n this.map.tableColumns.prepare(model.columns, options);\n }\n\n get tag() {\n return 'table';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, {\n ...TableXform.TABLE_ATTRIBUTES,\n id: model.id,\n name: model.name,\n displayName: model.displayName || model.name,\n ref: model.tableRef,\n totalsRowCount: model.totalsRow ? '1' : undefined,\n totalsRowShown: model.totalsRow ? undefined : '1',\n headerRowCount: model.headerRow ? '1' : '0',\n });\n\n this.map.autoFilter.render(xmlStream, model);\n this.map.tableColumns.render(xmlStream, model.columns);\n this.map.tableStyleInfo.render(xmlStream, model.style);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {name, attributes} = node;\n switch (name) {\n case this.tag:\n this.reset();\n this.model = {\n name: attributes.name,\n displayName: attributes.displayName || attributes.name,\n tableRef: attributes.ref,\n totalsRow: attributes.totalsRowCount === '1',\n headerRow: attributes.headerRowCount === '1',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.columns = this.map.tableColumns.model;\n if (this.map.autoFilter.model) {\n this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef;\n this.map.autoFilter.model.columns.forEach((column, index) => {\n this.model.columns[index].filterButton = column.filterButton;\n });\n }\n this.model.style = this.map.tableStyleInfo.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n // fetch the dfxs from styles\n model.columns.forEach(column => {\n if (column.dxfId !== undefined) {\n column.style = options.styles.getDxfStyle(column.dxfId);\n }\n });\n }\n}\n\nTableXform.TABLE_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'xr xr3',\n 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',\n 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3',\n // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}',\n};\n\nmodule.exports = TableXform;\n","const fs = require('fs');\nconst JSZip = require('jszip');\nconst {PassThrough} = require('readable-stream');\nconst ZipStream = require('../utils/zip-stream');\nconst StreamBuf = require('../utils/stream-buf');\n\nconst utils = require('../utils/utils');\nconst XmlStream = require('../utils/xml-stream');\nconst {bufferToString} = require('../utils/browser-buffer-decode');\n\nconst StylesXform = require('./xform/style/styles-xform');\n\nconst CoreXform = require('./xform/core/core-xform');\nconst SharedStringsXform = require('./xform/strings/shared-strings-xform');\nconst RelationshipsXform = require('./xform/core/relationships-xform');\nconst ContentTypesXform = require('./xform/core/content-types-xform');\nconst AppXform = require('./xform/core/app-xform');\nconst WorkbookXform = require('./xform/book/workbook-xform');\nconst WorksheetXform = require('./xform/sheet/worksheet-xform');\nconst DrawingXform = require('./xform/drawing/drawing-xform');\nconst TableXform = require('./xform/table/table-xform');\nconst CommentsXform = require('./xform/comment/comments-xform');\nconst VmlNotesXform = require('./xform/comment/vml-notes-xform');\n\nconst theme1Xml = require('./xml/theme1');\n\nfunction fsReadFileAsync(filename, options) {\n return new Promise((resolve, reject) => {\n fs.readFile(filename, options, (error, data) => {\n if (error) {\n reject(error);\n } else {\n resolve(data);\n }\n });\n });\n}\n\nclass XLSX {\n constructor(workbook) {\n this.workbook = workbook;\n }\n\n // ===============================================================================\n // Workbook\n // =========================================================================\n // Read\n\n async readFile(filename, options) {\n if (!(await utils.fs.exists(filename))) {\n throw new Error(`File not found: ${filename}`);\n }\n const stream = fs.createReadStream(filename);\n try {\n const workbook = await this.read(stream, options);\n stream.close();\n return workbook;\n } catch (error) {\n stream.close();\n throw error;\n }\n }\n\n parseRels(stream) {\n const xform = new RelationshipsXform();\n return xform.parseStream(stream);\n }\n\n parseWorkbook(stream) {\n const xform = new WorkbookXform();\n return xform.parseStream(stream);\n }\n\n parseSharedStrings(stream) {\n const xform = new SharedStringsXform();\n return xform.parseStream(stream);\n }\n\n reconcile(model, options) {\n const workbookXform = new WorkbookXform();\n const worksheetXform = new WorksheetXform(options);\n const drawingXform = new DrawingXform();\n const tableXform = new TableXform();\n\n workbookXform.reconcile(model);\n\n // reconcile drawings with their rels\n const drawingOptions = {\n media: model.media,\n mediaIndex: model.mediaIndex,\n };\n Object.keys(model.drawings).forEach(name => {\n const drawing = model.drawings[name];\n const drawingRel = model.drawingRels[name];\n if (drawingRel) {\n drawingOptions.rels = drawingRel.reduce((o, rel) => {\n o[rel.Id] = rel;\n return o;\n }, {});\n (drawing.anchors || []).forEach(anchor => {\n const hyperlinks = anchor.picture && anchor.picture.hyperlinks;\n if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) {\n hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target;\n delete hyperlinks.rId;\n }\n });\n drawingXform.reconcile(drawing, drawingOptions);\n }\n });\n\n // reconcile tables with the default styles\n const tableOptions = {\n styles: model.styles,\n };\n Object.values(model.tables).forEach(table => {\n tableXform.reconcile(table, tableOptions);\n });\n\n const sheetOptions = {\n styles: model.styles,\n sharedStrings: model.sharedStrings,\n media: model.media,\n mediaIndex: model.mediaIndex,\n date1904: model.properties && model.properties.date1904,\n drawings: model.drawings,\n comments: model.comments,\n tables: model.tables,\n vmlDrawings: model.vmlDrawings,\n };\n model.worksheets.forEach(worksheet => {\n worksheet.relationships = model.worksheetRels[worksheet.sheetNo];\n worksheetXform.reconcile(worksheet, sheetOptions);\n });\n\n // delete unnecessary parts\n delete model.worksheetHash;\n delete model.worksheetRels;\n delete model.globalRels;\n delete model.sharedStrings;\n delete model.workbookRels;\n delete model.sheetDefs;\n delete model.styles;\n delete model.mediaIndex;\n delete model.drawings;\n delete model.drawingRels;\n delete model.vmlDrawings;\n }\n\n async _processWorksheetEntry(stream, model, sheetNo, options, path) {\n const xform = new WorksheetXform(options);\n const worksheet = await xform.parseStream(stream);\n worksheet.sheetNo = sheetNo;\n model.worksheetHash[path] = worksheet;\n model.worksheets.push(worksheet);\n }\n\n async _processCommentEntry(stream, model, name) {\n const xform = new CommentsXform();\n const comments = await xform.parseStream(stream);\n model.comments[`../${name}.xml`] = comments;\n }\n\n async _processTableEntry(stream, model, name) {\n const xform = new TableXform();\n const table = await xform.parseStream(stream);\n model.tables[`../tables/${name}.xml`] = table;\n }\n\n async _processWorksheetRelsEntry(stream, model, sheetNo) {\n const xform = new RelationshipsXform();\n const relationships = await xform.parseStream(stream);\n model.worksheetRels[sheetNo] = relationships;\n }\n\n async _processMediaEntry(entry, model, filename) {\n const lastDot = filename.lastIndexOf('.');\n // if we can't determine extension, ignore it\n if (lastDot >= 1) {\n const extension = filename.substr(lastDot + 1);\n const name = filename.substr(0, lastDot);\n await new Promise((resolve, reject) => {\n const streamBuf = new StreamBuf();\n streamBuf.on('finish', () => {\n model.mediaIndex[filename] = model.media.length;\n model.mediaIndex[name] = model.media.length;\n const medium = {\n type: 'image',\n name,\n extension,\n buffer: streamBuf.toBuffer(),\n };\n model.media.push(medium);\n resolve();\n });\n entry.on('error', error => {\n reject(error);\n });\n entry.pipe(streamBuf);\n });\n }\n }\n\n async _processDrawingEntry(entry, model, name) {\n const xform = new DrawingXform();\n const drawing = await xform.parseStream(entry);\n model.drawings[name] = drawing;\n }\n\n async _processDrawingRelsEntry(entry, model, name) {\n const xform = new RelationshipsXform();\n const relationships = await xform.parseStream(entry);\n model.drawingRels[name] = relationships;\n }\n\n async _processVmlDrawingEntry(entry, model, name) {\n const xform = new VmlNotesXform();\n const vmlDrawing = await xform.parseStream(entry);\n model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing;\n }\n\n async _processThemeEntry(entry, model, name) {\n await new Promise((resolve, reject) => {\n // TODO: stream entry into buffer and store the xml in the model.themes[]\n const stream = new StreamBuf();\n entry.on('error', reject);\n stream.on('error', reject);\n stream.on('finish', () => {\n model.themes[name] = stream.read().toString();\n resolve();\n });\n entry.pipe(stream);\n });\n }\n\n /**\n * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\n */\n createInputStream() {\n throw new Error(\n '`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\n );\n }\n\n async read(stream, options) {\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old streams\n if (!stream[Symbol.asyncIterator] && stream.pipe) {\n stream = stream.pipe(new PassThrough());\n }\n const chunks = [];\n for await (const chunk of stream) {\n chunks.push(chunk);\n }\n return this.load(Buffer.concat(chunks), options);\n }\n\n async load(data, options) {\n let buffer;\n if (options && options.base64) {\n buffer = Buffer.from(data.toString(), 'base64');\n } else {\n buffer = data;\n }\n\n const model = {\n worksheets: [],\n worksheetHash: {},\n worksheetRels: [],\n themes: {},\n media: [],\n mediaIndex: {},\n drawings: {},\n drawingRels: {},\n comments: {},\n tables: {},\n vmlDrawings: {},\n };\n\n const zip = await JSZip.loadAsync(buffer);\n for (const entry of Object.values(zip.files)) {\n /* eslint-disable no-await-in-loop */\n if (!entry.dir) {\n let entryName = entry.name;\n if (entryName[0] === '/') {\n entryName = entryName.substr(1);\n }\n let stream;\n if (\n entryName.match(/xl\\/media\\//) ||\n // themes are not parsed as stream\n entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/)\n ) {\n stream = new PassThrough();\n stream.write(await entry.async('nodebuffer'));\n } else {\n // use object mode to avoid buffer-string convention\n stream = new PassThrough({\n writableObjectMode: true,\n readableObjectMode: true,\n });\n let content;\n // https://www.npmjs.com/package/process\n if (process.browser) {\n // running in browser, use TextDecoder if possible\n content = bufferToString(await entry.async('nodebuffer'));\n } else {\n // running in node.js\n content = await entry.async('string');\n }\n const chunkSize = 16 * 1024;\n for (let i = 0; i < content.length; i += chunkSize) {\n stream.write(content.substring(i, i + chunkSize));\n }\n }\n stream.end();\n switch (entryName) {\n case '_rels/.rels':\n model.globalRels = await this.parseRels(stream);\n break;\n\n case 'xl/workbook.xml': {\n const workbook = await this.parseWorkbook(stream);\n model.sheets = workbook.sheets;\n model.definedNames = workbook.definedNames;\n model.views = workbook.views;\n model.properties = workbook.properties;\n model.calcProperties = workbook.calcProperties;\n break;\n }\n\n case 'xl/_rels/workbook.xml.rels':\n model.workbookRels = await this.parseRels(stream);\n break;\n\n case 'xl/sharedStrings.xml':\n model.sharedStrings = new SharedStringsXform();\n await model.sharedStrings.parseStream(stream);\n break;\n\n case 'xl/styles.xml':\n model.styles = new StylesXform();\n await model.styles.parseStream(stream);\n break;\n\n case 'docProps/app.xml': {\n const appXform = new AppXform();\n const appProperties = await appXform.parseStream(stream);\n model.company = appProperties.company;\n model.manager = appProperties.manager;\n break;\n }\n\n case 'docProps/core.xml': {\n const coreXform = new CoreXform();\n const coreProperties = await coreXform.parseStream(stream);\n Object.assign(model, coreProperties);\n break;\n }\n\n default: {\n let match = entryName.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/);\n if (match) {\n await this._processWorksheetEntry(stream, model, match[1], options, entryName);\n break;\n }\n match = entryName.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/);\n if (match) {\n await this._processWorksheetRelsEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/);\n if (match) {\n await this._processThemeEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/media\\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/);\n if (match) {\n await this._processMediaEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/([a-zA-Z0-9]+)[.]xml/);\n if (match) {\n await this._processDrawingEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/(comments\\d+)[.]xml/);\n if (match) {\n await this._processCommentEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/tables\\/(table\\d+)[.]xml/);\n if (match) {\n await this._processTableEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/_rels\\/([a-zA-Z0-9]+)[.]xml[.]rels/);\n if (match) {\n await this._processDrawingRelsEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/(vmlDrawing\\d+)[.]vml/);\n if (match) {\n await this._processVmlDrawingEntry(stream, model, match[1]);\n break;\n }\n }\n }\n }\n }\n\n this.reconcile(model, options);\n\n // apply model\n this.workbook.model = model;\n return this.workbook;\n }\n\n // =========================================================================\n // Write\n\n async addMedia(zip, model) {\n await Promise.all(\n model.media.map(async medium => {\n if (medium.type === 'image') {\n const filename = `xl/media/${medium.name}.${medium.extension}`;\n if (medium.filename) {\n const data = await fsReadFileAsync(medium.filename);\n return zip.append(data, {name: filename});\n }\n if (medium.buffer) {\n return zip.append(medium.buffer, {name: filename});\n }\n if (medium.base64) {\n const dataimg64 = medium.base64;\n const content = dataimg64.substring(dataimg64.indexOf(',') + 1);\n return zip.append(content, {name: filename, base64: true});\n }\n }\n throw new Error('Unsupported media');\n })\n );\n }\n\n addDrawings(zip, model) {\n const drawingXform = new DrawingXform();\n const relsXform = new RelationshipsXform();\n\n model.worksheets.forEach(worksheet => {\n const {drawing} = worksheet;\n if (drawing) {\n drawingXform.prepare(drawing, {});\n let xml = drawingXform.toXml(drawing);\n zip.append(xml, {name: `xl/drawings/${drawing.name}.xml`});\n\n xml = relsXform.toXml(drawing.rels);\n zip.append(xml, {name: `xl/drawings/_rels/${drawing.name}.xml.rels`});\n }\n });\n }\n\n addTables(zip, model) {\n const tableXform = new TableXform();\n\n model.worksheets.forEach(worksheet => {\n const {tables} = worksheet;\n tables.forEach(table => {\n tableXform.prepare(table, {});\n const tableXml = tableXform.toXml(table);\n zip.append(tableXml, {name: `xl/tables/${table.target}`});\n });\n });\n }\n\n async addContentTypes(zip, model) {\n const xform = new ContentTypesXform();\n const xml = xform.toXml(model);\n zip.append(xml, {name: '[Content_Types].xml'});\n }\n\n async addApp(zip, model) {\n const xform = new AppXform();\n const xml = xform.toXml(model);\n zip.append(xml, {name: 'docProps/app.xml'});\n }\n\n async addCore(zip, model) {\n const coreXform = new CoreXform();\n zip.append(coreXform.toXml(model), {name: 'docProps/core.xml'});\n }\n\n async addThemes(zip, model) {\n const themes = model.themes || {theme1: theme1Xml};\n Object.keys(themes).forEach(name => {\n const xml = themes[name];\n const path = `xl/theme/${name}.xml`;\n zip.append(xml, {name: path});\n });\n }\n\n async addOfficeRels(zip) {\n const xform = new RelationshipsXform();\n const xml = xform.toXml([\n {Id: 'rId1', Type: XLSX.RelType.OfficeDocument, Target: 'xl/workbook.xml'},\n {Id: 'rId2', Type: XLSX.RelType.CoreProperties, Target: 'docProps/core.xml'},\n {Id: 'rId3', Type: XLSX.RelType.ExtenderProperties, Target: 'docProps/app.xml'},\n ]);\n zip.append(xml, {name: '_rels/.rels'});\n }\n\n async addWorkbookRels(zip, model) {\n let count = 1;\n const relationships = [\n {Id: `rId${count++}`, Type: XLSX.RelType.Styles, Target: 'styles.xml'},\n {Id: `rId${count++}`, Type: XLSX.RelType.Theme, Target: 'theme/theme1.xml'},\n ];\n if (model.sharedStrings.count) {\n relationships.push({\n Id: `rId${count++}`,\n Type: XLSX.RelType.SharedStrings,\n Target: 'sharedStrings.xml',\n });\n }\n model.worksheets.forEach(worksheet => {\n worksheet.rId = `rId${count++}`;\n relationships.push({\n Id: worksheet.rId,\n Type: XLSX.RelType.Worksheet,\n Target: `worksheets/sheet${worksheet.id}.xml`,\n });\n });\n const xform = new RelationshipsXform();\n const xml = xform.toXml(relationships);\n zip.append(xml, {name: 'xl/_rels/workbook.xml.rels'});\n }\n\n async addSharedStrings(zip, model) {\n if (model.sharedStrings && model.sharedStrings.count) {\n zip.append(model.sharedStrings.xml, {name: 'xl/sharedStrings.xml'});\n }\n }\n\n async addStyles(zip, model) {\n const {xml} = model.styles;\n if (xml) {\n zip.append(xml, {name: 'xl/styles.xml'});\n }\n }\n\n async addWorkbook(zip, model) {\n const xform = new WorkbookXform();\n zip.append(xform.toXml(model), {name: 'xl/workbook.xml'});\n }\n\n async addWorksheets(zip, model) {\n // preparation phase\n const worksheetXform = new WorksheetXform();\n const relationshipsXform = new RelationshipsXform();\n const commentsXform = new CommentsXform();\n const vmlNotesXform = new VmlNotesXform();\n\n // write sheets\n model.worksheets.forEach(worksheet => {\n let xmlStream = new XmlStream();\n worksheetXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/worksheets/sheet${worksheet.id}.xml`});\n\n if (worksheet.rels && worksheet.rels.length) {\n xmlStream = new XmlStream();\n relationshipsXform.render(xmlStream, worksheet.rels);\n zip.append(xmlStream.xml, {name: `xl/worksheets/_rels/sheet${worksheet.id}.xml.rels`});\n }\n\n if (worksheet.comments.length > 0) {\n xmlStream = new XmlStream();\n commentsXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/comments${worksheet.id}.xml`});\n\n xmlStream = new XmlStream();\n vmlNotesXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/drawings/vmlDrawing${worksheet.id}.vml`});\n }\n });\n }\n\n _finalize(zip) {\n return new Promise((resolve, reject) => {\n zip.on('finish', () => {\n resolve(this);\n });\n zip.on('error', reject);\n zip.finalize();\n });\n }\n\n prepareModel(model, options) {\n // ensure following properties have sane values\n model.creator = model.creator || 'ExcelJS';\n model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS';\n model.created = model.created || new Date();\n model.modified = model.modified || new Date();\n\n model.useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : true;\n model.useStyles = options.useStyles !== undefined ? options.useStyles : true;\n\n // Manage the shared strings\n model.sharedStrings = new SharedStringsXform();\n\n // add a style manager to handle cell formats, fonts, etc.\n model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock();\n\n // prepare all of the things before the render\n const workbookXform = new WorkbookXform();\n const worksheetXform = new WorksheetXform();\n\n workbookXform.prepare(model);\n\n const worksheetOptions = {\n sharedStrings: model.sharedStrings,\n styles: model.styles,\n date1904: model.properties.date1904,\n drawingsCount: 0,\n media: model.media,\n };\n worksheetOptions.drawings = model.drawings = [];\n worksheetOptions.commentRefs = model.commentRefs = [];\n let tableCount = 0;\n model.tables = [];\n model.worksheets.forEach(worksheet => {\n // assign unique filenames to tables\n worksheet.tables.forEach(table => {\n tableCount++;\n table.target = `table${tableCount}.xml`;\n table.id = tableCount;\n model.tables.push(table);\n });\n\n worksheetXform.prepare(worksheet, worksheetOptions);\n });\n\n // TODO: workbook drawing list\n }\n\n async write(stream, options) {\n options = options || {};\n const {model} = this.workbook;\n const zip = new ZipStream.ZipWriter(options.zip);\n zip.pipe(stream);\n\n this.prepareModel(model, options);\n\n // render\n await this.addContentTypes(zip, model);\n await this.addOfficeRels(zip, model);\n await this.addWorkbookRels(zip, model);\n await this.addWorksheets(zip, model);\n await this.addSharedStrings(zip, model); // always after worksheets\n await this.addDrawings(zip, model);\n await this.addTables(zip, model);\n await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]);\n await this.addMedia(zip, model);\n await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]);\n await this.addWorkbook(zip, model);\n return this._finalize(zip);\n }\n\n writeFile(filename, options) {\n const stream = fs.createWriteStream(filename);\n\n return new Promise((resolve, reject) => {\n stream.on('finish', () => {\n resolve();\n });\n stream.on('error', error => {\n reject(error);\n });\n\n this.write(stream, options).then(() => {\n stream.end();\n }).catch(err=>{\n reject(err);\n });\n });\n }\n\n async writeBuffer(options) {\n const stream = new StreamBuf();\n await this.write(stream, options);\n return stream.read();\n }\n}\n\nXLSX.RelType = require('./rel-type');\n\nmodule.exports = XLSX;\n","/* eslint-disable */\nmodule.exports =\n '\\n ';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvFormatterStream = void 0;\nconst stream_1 = require(\"stream\");\nconst formatter_1 = require(\"./formatter\");\nclass CsvFormatterStream extends stream_1.Transform {\n constructor(formatterOptions) {\n super({\n writableObjectMode: formatterOptions.objectMode\n });\n this.hasWrittenBOM = false;\n this.formatterOptions = formatterOptions;\n this.rowFormatter = new formatter_1.RowFormatter(formatterOptions);\n // if writeBOM is false then set to true\n // if writeBOM is true then set to false by default so it is written out\n this.hasWrittenBOM = !formatterOptions.writeBOM;\n }\n transform(transformFunction) {\n this.rowFormatter.rowTransform = transformFunction;\n return this;\n }\n _transform(row, encoding, cb) {\n let cbCalled = false;\n try {\n if (!this.hasWrittenBOM) {\n this.push(this.formatterOptions.BOM);\n this.hasWrittenBOM = true;\n }\n this.rowFormatter.format(row, (err, rows) => {\n if (err) {\n cbCalled = true;\n return cb(err);\n }\n if (rows) {\n rows.forEach(r => {\n this.push(Buffer.from(r, 'utf8'));\n });\n }\n cbCalled = true;\n return cb();\n });\n } catch (e) {\n if (cbCalled) {\n throw e;\n }\n cb(e);\n }\n }\n _flush(cb) {\n this.rowFormatter.finish((err, rows) => {\n if (err) {\n return cb(err);\n }\n if (rows) {\n rows.forEach(r => {\n this.push(Buffer.from(r, 'utf8'));\n });\n }\n return cb();\n });\n }\n}\nexports.CsvFormatterStream = CsvFormatterStream;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHJlYW1fMSIsInJlcXVpcmUiLCJmb3JtYXR0ZXJfMSIsIkNzdkZvcm1hdHRlclN0cmVhbSIsIlRyYW5zZm9ybSIsImNvbnN0cnVjdG9yIiwiZm9ybWF0dGVyT3B0aW9ucyIsIndyaXRhYmxlT2JqZWN0TW9kZSIsIm9iamVjdE1vZGUiLCJoYXNXcml0dGVuQk9NIiwicm93Rm9ybWF0dGVyIiwiUm93Rm9ybWF0dGVyIiwid3JpdGVCT00iLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsInJvd1RyYW5zZm9ybSIsIl90cmFuc2Zvcm0iLCJyb3ciLCJlbmNvZGluZyIsImNiIiwiY2JDYWxsZWQiLCJwdXNoIiwiQk9NIiwiZm9ybWF0IiwiZXJyIiwicm93cyIsImZvckVhY2giLCJyIiwiQnVmZmVyIiwiZnJvbSIsImUiLCJfZmx1c2giLCJmaW5pc2giLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NzdkZvcm1hdHRlclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBR0EsTUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBRUEsTUFBYUUsa0JBQWlELFNBQVFILFFBQUEsQ0FBQUksU0FBUztFQU8zRUMsWUFBbUJDLGdCQUF3QztJQUN2RCxLQUFLLENBQUM7TUFBRUMsa0JBQWtCLEVBQUVELGdCQUFnQixDQUFDRTtJQUFVLENBQUUsQ0FBQztJQUh0RCxLQUFBQyxhQUFhLEdBQUcsS0FBSztJQUl6QixJQUFJLENBQUNILGdCQUFnQixHQUFHQSxnQkFBZ0I7SUFDeEMsSUFBSSxDQUFDSSxZQUFZLEdBQUcsSUFBSVIsV0FBQSxDQUFBUyxZQUFZLENBQUNMLGdCQUFnQixDQUFDO0lBQ3REO0lBQ0E7SUFDQSxJQUFJLENBQUNHLGFBQWEsR0FBRyxDQUFDSCxnQkFBZ0IsQ0FBQ00sUUFBUTtFQUNuRDtFQUVPQyxTQUFTQSxDQUFDQyxpQkFBNkM7SUFDMUQsSUFBSSxDQUFDSixZQUFZLENBQUNLLFlBQVksR0FBR0QsaUJBQWlCO0lBQ2xELE9BQU8sSUFBSTtFQUNmO0VBRU9FLFVBQVVBLENBQUNDLEdBQU0sRUFBRUMsUUFBZ0IsRUFBRUMsRUFBcUI7SUFDN0QsSUFBSUMsUUFBUSxHQUFHLEtBQUs7SUFDcEIsSUFBSTtNQUNBLElBQUksQ0FBQyxJQUFJLENBQUNYLGFBQWEsRUFBRTtRQUNyQixJQUFJLENBQUNZLElBQUksQ0FBQyxJQUFJLENBQUNmLGdCQUFnQixDQUFDZ0IsR0FBRyxDQUFDO1FBQ3BDLElBQUksQ0FBQ2IsYUFBYSxHQUFHLElBQUk7O01BRTdCLElBQUksQ0FBQ0MsWUFBWSxDQUFDYSxNQUFNLENBQUNOLEdBQUcsRUFBRSxDQUFDTyxHQUFHLEVBQUVDLElBQUksS0FBVTtRQUM5QyxJQUFJRCxHQUFHLEVBQUU7VUFDTEosUUFBUSxHQUFHLElBQUk7VUFDZixPQUFPRCxFQUFFLENBQUNLLEdBQUcsQ0FBQzs7UUFFbEIsSUFBSUMsSUFBSSxFQUFFO1VBQ05BLElBQUksQ0FBQ0MsT0FBTyxDQUFFQyxDQUFDLElBQVU7WUFDckIsSUFBSSxDQUFDTixJQUFJLENBQUNPLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDckMsQ0FBQyxDQUFDOztRQUVOUCxRQUFRLEdBQUcsSUFBSTtRQUNmLE9BQU9ELEVBQUUsRUFBRTtNQUNmLENBQUMsQ0FBQztLQUNMLENBQUMsT0FBT1csQ0FBQyxFQUFFO01BQ1IsSUFBSVYsUUFBUSxFQUFFO1FBQ1YsTUFBTVUsQ0FBQzs7TUFFWFgsRUFBRSxDQUFDVyxDQUFDLENBQUM7O0VBRWI7RUFFT0MsTUFBTUEsQ0FBQ1osRUFBcUI7SUFDL0IsSUFBSSxDQUFDVCxZQUFZLENBQUNzQixNQUFNLENBQUMsQ0FBQ1IsR0FBRyxFQUFFQyxJQUFJLEtBQVU7TUFDekMsSUFBSUQsR0FBRyxFQUFFO1FBQ0wsT0FBT0wsRUFBRSxDQUFDSyxHQUFHLENBQUM7O01BRWxCLElBQUlDLElBQUksRUFBRTtRQUNOQSxJQUFJLENBQUNDLE9BQU8sQ0FBRUMsQ0FBQyxJQUFVO1VBQ3JCLElBQUksQ0FBQ04sSUFBSSxDQUFDTyxNQUFNLENBQUNDLElBQUksQ0FBQ0YsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQzs7TUFFTixPQUFPUixFQUFFLEVBQUU7SUFDZixDQUFDLENBQUM7RUFDTjs7QUE3REpjLE9BQUEsQ0FBQTlCLGtCQUFBLEdBQUFBLGtCQUFBIn0=","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FormatterOptions = void 0;\nclass FormatterOptions {\n constructor() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _a;\n this.objectMode = true;\n this.delimiter = ',';\n this.rowDelimiter = '\\n';\n this.quote = '\"';\n this.escape = this.quote;\n this.quoteColumns = false;\n this.quoteHeaders = this.quoteColumns;\n this.headers = null;\n this.includeEndRowDelimiter = false;\n this.writeBOM = false;\n this.BOM = '\\ufeff';\n this.alwaysWriteHeaders = false;\n Object.assign(this, opts || {});\n if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') {\n this.quoteHeaders = this.quoteColumns;\n }\n if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) {\n this.quote = '\"';\n } else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) {\n this.quote = '';\n }\n if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') {\n this.escape = this.quote;\n }\n this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true);\n this.headers = Array.isArray(this.headers) ? this.headers : null;\n this.escapedQuote = `${this.escape}${this.quote}`;\n }\n}\nexports.FormatterOptions = FormatterOptions;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtYXR0ZXJPcHRpb25zIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib2JqZWN0TW9kZSIsImRlbGltaXRlciIsInJvd0RlbGltaXRlciIsInF1b3RlIiwiZXNjYXBlIiwicXVvdGVDb2x1bW5zIiwicXVvdGVIZWFkZXJzIiwiaGVhZGVycyIsImluY2x1ZGVFbmRSb3dEZWxpbWl0ZXIiLCJ3cml0ZUJPTSIsIkJPTSIsImFsd2F5c1dyaXRlSGVhZGVycyIsIk9iamVjdCIsImFzc2lnbiIsInNob3VsZFdyaXRlSGVhZGVycyIsIl9hIiwid3JpdGVIZWFkZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwiZXNjYXBlZFF1b3RlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Gb3JtYXR0ZXJPcHRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3QkEsTUFBYUEsZ0JBQWdCO0VBK0J6QkMsWUFBQSxFQUF3RDtJQUFBLElBQXJDQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFtQyxFQUFFOztJQTlCeEMsS0FBQUcsVUFBVSxHQUFZLElBQUk7SUFFMUIsS0FBQUMsU0FBUyxHQUFXLEdBQUc7SUFFdkIsS0FBQUMsWUFBWSxHQUFXLElBQUk7SUFFM0IsS0FBQUMsS0FBSyxHQUFXLEdBQUc7SUFFbkIsS0FBQUMsTUFBTSxHQUFXLElBQUksQ0FBQ0QsS0FBSztJQUUzQixLQUFBRSxZQUFZLEdBQWlCLEtBQUs7SUFFbEMsS0FBQUMsWUFBWSxHQUFpQixJQUFJLENBQUNELFlBQVk7SUFFOUMsS0FBQUUsT0FBTyxHQUFvQixJQUFJO0lBRS9CLEtBQUFDLHNCQUFzQixHQUFZLEtBQUs7SUFNdkMsS0FBQUMsUUFBUSxHQUFZLEtBQUs7SUFJekIsS0FBQUMsR0FBRyxHQUFXLFFBQVE7SUFFdEIsS0FBQUMsa0JBQWtCLEdBQVksS0FBSztJQUcvQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxFQUFFakIsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUUvQixJQUFJLFFBQU9BLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFVSxZQUFZLE1BQUssV0FBVyxFQUFFO01BQzNDLElBQUksQ0FBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQ0QsWUFBWTs7SUFFekMsSUFBSSxDQUFBVCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRU8sS0FBSyxNQUFLLElBQUksRUFBRTtNQUN0QixJQUFJLENBQUNBLEtBQUssR0FBRyxHQUFHO0tBQ25CLE1BQU0sSUFBSSxDQUFBUCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRU8sS0FBSyxNQUFLLEtBQUssRUFBRTtNQUM5QixJQUFJLENBQUNBLEtBQUssR0FBRyxFQUFFOztJQUVuQixJQUFJLFFBQU9QLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFUSxNQUFNLE1BQUssUUFBUSxFQUFFO01BQ2xDLElBQUksQ0FBQ0EsTUFBTSxHQUFHLElBQUksQ0FBQ0QsS0FBSzs7SUFFNUIsSUFBSSxDQUFDVyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDUCxPQUFPLEtBQUksQ0FBQVEsRUFBQSxHQUFDbkIsSUFBSSxDQUFDb0IsWUFBWSxjQUFBRCxFQUFBLGNBQUFBLEVBQUEsR0FBSSxJQUFJLENBQUM7SUFDdkUsSUFBSSxDQUFDUixPQUFPLEdBQUdVLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ1gsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDQSxPQUFPLEdBQUcsSUFBSTtJQUNoRSxJQUFJLENBQUNZLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQ0QsS0FBSyxFQUFFO0VBQ3JEOztBQWhESmlCLE9BQUEsQ0FBQTFCLGdCQUFBLEdBQUFBLGdCQUFBIn0=","\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldFormatter = void 0;\nconst lodash_isboolean_1 = __importDefault(require(\"lodash.isboolean\"));\nconst lodash_isnil_1 = __importDefault(require(\"lodash.isnil\"));\nconst lodash_escaperegexp_1 = __importDefault(require(\"lodash.escaperegexp\"));\nclass FieldFormatter {\n constructor(formatterOptions) {\n this._headers = null;\n this.formatterOptions = formatterOptions;\n if (formatterOptions.headers !== null) {\n this.headers = formatterOptions.headers;\n }\n this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g');\n const escapePattern = `[${formatterOptions.delimiter}${lodash_escaperegexp_1.default(formatterOptions.rowDelimiter)}|\\r|\\n]`;\n this.ESCAPE_REGEXP = new RegExp(escapePattern);\n }\n set headers(headers) {\n this._headers = headers;\n }\n shouldQuote(fieldIndex, isHeader) {\n const quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns;\n if (lodash_isboolean_1.default(quoteConfig)) {\n return quoteConfig;\n }\n if (Array.isArray(quoteConfig)) {\n return quoteConfig[fieldIndex];\n }\n if (this._headers !== null) {\n return quoteConfig[this._headers[fieldIndex]];\n }\n return false;\n }\n format(field, fieldIndex, isHeader) {\n const preparedField = `${lodash_isnil_1.default(field) ? '' : field}`.replace(/\\0/g, '');\n const {\n formatterOptions\n } = this;\n if (formatterOptions.quote !== '') {\n const shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1;\n if (shouldEscape) {\n return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote));\n }\n }\n const hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1;\n if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) {\n return this.quoteField(preparedField);\n }\n return preparedField;\n }\n quoteField(field) {\n const {\n quote\n } = this.formatterOptions;\n return `${quote}${field}${quote}`;\n }\n}\nexports.FieldFormatter = FieldFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXNib29sZWFuXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZXF1aXJlIiwibG9kYXNoX2lzbmlsXzEiLCJsb2Rhc2hfZXNjYXBlcmVnZXhwXzEiLCJGaWVsZEZvcm1hdHRlciIsImNvbnN0cnVjdG9yIiwiZm9ybWF0dGVyT3B0aW9ucyIsIl9oZWFkZXJzIiwiaGVhZGVycyIsIlJFUExBQ0VfUkVHRVhQIiwiUmVnRXhwIiwicXVvdGUiLCJlc2NhcGVQYXR0ZXJuIiwiZGVsaW1pdGVyIiwiZGVmYXVsdCIsInJvd0RlbGltaXRlciIsIkVTQ0FQRV9SRUdFWFAiLCJzaG91bGRRdW90ZSIsImZpZWxkSW5kZXgiLCJpc0hlYWRlciIsInF1b3RlQ29uZmlnIiwicXVvdGVIZWFkZXJzIiwicXVvdGVDb2x1bW5zIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwiZmllbGQiLCJwcmVwYXJlZEZpZWxkIiwicmVwbGFjZSIsInNob3VsZEVzY2FwZSIsImluZGV4T2YiLCJxdW90ZUZpZWxkIiwiZXNjYXBlZFF1b3RlIiwiaGFzRXNjYXBlQ2hhcmFjdGVycyIsInNlYXJjaCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZm9ybWF0dGVyL0ZpZWxkRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE1BQUFBLGtCQUFBLEdBQUFDLGVBQUEsQ0FBQUMsT0FBQTtBQUNBLE1BQUFDLGNBQUEsR0FBQUYsZUFBQSxDQUFBQyxPQUFBO0FBQ0EsTUFBQUUscUJBQUEsR0FBQUgsZUFBQSxDQUFBQyxPQUFBO0FBSUEsTUFBYUcsY0FBYztFQVN2QkMsWUFBbUJDLGdCQUF3QztJQU5uRCxLQUFBQyxRQUFRLEdBQW9CLElBQUk7SUFPcEMsSUFBSSxDQUFDRCxnQkFBZ0IsR0FBR0EsZ0JBQWdCO0lBQ3hDLElBQUlBLGdCQUFnQixDQUFDRSxPQUFPLEtBQUssSUFBSSxFQUFFO01BQ25DLElBQUks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","\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowFormatter = void 0;\nconst lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\nconst lodash_isequal_1 = __importDefault(require(\"lodash.isequal\"));\nconst FieldFormatter_1 = require(\"./FieldFormatter\");\nconst types_1 = require(\"../types\");\nclass RowFormatter {\n constructor(formatterOptions) {\n this.rowCount = 0;\n this.formatterOptions = formatterOptions;\n this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions);\n this.headers = formatterOptions.headers;\n this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders;\n this.hasWrittenHeaders = false;\n if (this.headers !== null) {\n this.fieldFormatter.headers = this.headers;\n }\n if (formatterOptions.transform) {\n this.rowTransform = formatterOptions.transform;\n }\n }\n static isRowHashArray(row) {\n if (Array.isArray(row)) {\n return Array.isArray(row[0]) && row[0].length === 2;\n }\n return false;\n }\n static isRowArray(row) {\n return Array.isArray(row) && !this.isRowHashArray(row);\n }\n // get headers from a row item\n static gatherHeaders(row) {\n if (RowFormatter.isRowHashArray(row)) {\n // lets assume a multi-dimesional array with item 0 being the header\n return row.map(it => it[0]);\n }\n if (Array.isArray(row)) {\n return row;\n }\n return Object.keys(row);\n }\n // eslint-disable-next-line @typescript-eslint/no-shadow\n static createTransform(transformFunction) {\n if (types_1.isSyncTransform(transformFunction)) {\n return (row, cb) => {\n let transformedRow = null;\n try {\n transformedRow = transformFunction(row);\n } catch (e) {\n return cb(e);\n }\n return cb(null, transformedRow);\n };\n }\n return (row, cb) => {\n transformFunction(row, cb);\n };\n }\n set rowTransform(transformFunction) {\n if (!lodash_isfunction_1.default(transformFunction)) {\n throw new TypeError('The transform should be a function');\n }\n this._rowTransform = RowFormatter.createTransform(transformFunction);\n }\n format(row, cb) {\n this.callTransformer(row, (err, transformedRow) => {\n if (err) {\n return cb(err);\n }\n if (!row) {\n return cb(null);\n }\n const rows = [];\n if (transformedRow) {\n const {\n shouldFormatColumns,\n headers\n } = this.checkHeaders(transformedRow);\n if (this.shouldWriteHeaders && headers && !this.hasWrittenHeaders) {\n rows.push(this.formatColumns(headers, true));\n this.hasWrittenHeaders = true;\n }\n if (shouldFormatColumns) {\n const columns = this.gatherColumns(transformedRow);\n rows.push(this.formatColumns(columns, false));\n }\n }\n return cb(null, rows);\n });\n }\n finish(cb) {\n const rows = [];\n // check if we should write headers and we didnt get any rows\n if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) {\n if (!this.headers) {\n return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.'));\n }\n rows.push(this.formatColumns(this.headers, true));\n }\n if (this.formatterOptions.includeEndRowDelimiter) {\n rows.push(this.formatterOptions.rowDelimiter);\n }\n return cb(null, rows);\n }\n // check if we need to write header return true if we should also write a row\n // could be false if headers is true and the header row(first item) is passed in\n checkHeaders(row) {\n if (this.headers) {\n // either the headers were provided by the user or we have already gathered them.\n return {\n shouldFormatColumns: true,\n headers: this.headers\n };\n }\n const headers = RowFormatter.gatherHeaders(row);\n this.headers = headers;\n this.fieldFormatter.headers = headers;\n if (!this.shouldWriteHeaders) {\n // if we are not supposed to write the headers then\n // always format the columns\n return {\n shouldFormatColumns: true,\n headers: null\n };\n }\n // if the row is equal to headers dont format\n return {\n shouldFormatColumns: !lodash_isequal_1.default(headers, row),\n headers\n };\n }\n // todo change this method to unknown[]\n gatherColumns(row) {\n if (this.headers === null) {\n throw new Error('Headers is currently null');\n }\n if (!Array.isArray(row)) {\n return this.headers.map(header => row[header]);\n }\n if (RowFormatter.isRowHashArray(row)) {\n return this.headers.map((header, i) => {\n const col = row[i];\n if (col) {\n return col[1];\n }\n return '';\n });\n }\n // if its a one dimensional array and headers were not provided\n // then just return the row\n if (RowFormatter.isRowArray(row) && !this.shouldWriteHeaders) {\n return row;\n }\n return this.headers.map((header, i) => row[i]);\n }\n callTransformer(row, cb) {\n if (!this._rowTransform) {\n return cb(null, row);\n }\n return this._rowTransform(row, cb);\n }\n formatColumns(columns, isHeadersRow) {\n const formattedCols = columns.map((field, i) => this.fieldFormatter.format(field, i, isHeadersRow)).join(this.formatterOptions.delimiter);\n const {\n rowCount\n } = this;\n this.rowCount += 1;\n if (rowCount) {\n return [this.formatterOptions.rowDelimiter, formattedCols].join('');\n }\n return formattedCols;\n }\n}\nexports.RowFormatter = RowFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXNmdW5jdGlvbl8xIiwiX19pbXBvcnREZWZhdWx0IiwicmVxdWlyZSIsImxvZGFzaF9pc2VxdWFsXzEiLCJGaWVsZEZvcm1hdHRlcl8xIiwidHlwZXNfMSIsIlJvd0Zvcm1hdHRlciIsImNvbnN0cnVjdG9yIiwiZm9ybWF0dGVyT3B0aW9ucyIsInJvd0NvdW50IiwiZmllbGRGb3JtYXR0ZXIiLCJGaWVsZEZvcm1hdHRlciIsImhlYWRlcnMiLCJzaG91bGRXcml0ZUhlYWRlcnMiLCJoYXNXcml0dGVuSGVhZGVycyIsInRyYW5zZm9ybSIsInJvd1RyYW5zZm9ybSIsImlzUm93SGFzaEFycmF5Iiwicm93IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNSb3dBcnJheSIsImdhdGhlckhlYWRlcnMiLCJtYXAiLCJpdCIsIk9iamVjdCIsImtleXMiLCJjcmVhdGVUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsImlzU3luY1RyYW5zZm9ybSIsImNiIiwidHJhbnNmb3JtZWRSb3ciLCJlIiwiZGVmYXVsdCIsIlR5cGVFcnJvciIsIl9yb3dUcmFuc2Zvcm0iLCJmb3JtYXQiLCJjYWxsVHJhbnNmb3JtZXIiLCJlcnIiLCJyb3dzIiwic2hvdWxkRm9ybWF0Q29sdW1ucyIsImNoZWNrSGVhZGVycyIsInB1c2giLCJmb3JtYXRDb2x1bW5zIiwiY29sdW1ucyIsImdhdGhlckNvbHVtbnMiLCJmaW5pc2giLCJhbHdheXNXcml0ZUhlYWRlcnMiLCJFcnJvciIsImluY2x1ZGVFbmRSb3dEZWxpbWl0ZXIiLCJyb3dEZWxpbWl0ZXIiLCJoZWFkZXIiLCJpIiwiY29sIiwiaXNIZWFkZXJzUm93IiwiZm9ybWF0dGVkQ29scyIsImZpZWxkIiwiam9pbiIsImRlbGltaXRlciIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZm9ybWF0dGVyL1Jvd0Zvcm1hdHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldFormatter = exports.RowFormatter = void 0;\nvar RowFormatter_1 = require(\"./RowFormatter\");\nObject.defineProperty(exports, \"RowFormatter\", {\n enumerable: true,\n get: function () {\n return RowFormatter_1.RowFormatter;\n }\n});\nvar FieldFormatter_1 = require(\"./FieldFormatter\");\nObject.defineProperty(exports, \"FieldFormatter\", {\n enumerable: true,\n get: function () {\n return FieldFormatter_1.FieldFormatter;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3dGb3JtYXR0ZXJfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUm93Rm9ybWF0dGVyIiwiRmllbGRGb3JtYXR0ZXJfMSIsIkZpZWxkRm9ybWF0dGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zvcm1hdHRlci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sY0FBQSxDQUFBTyxZQUFZO0VBQUE7QUFBQTtBQUNyQixJQUFBQyxnQkFBQSxHQUFBUCxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsZ0JBQUEsQ0FBQUMsY0FBYztFQUFBO0FBQUEifQ==","\"use strict\";\n\nvar __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\nvar __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = void 0 && (void 0).__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = exports.FormatterOptions = exports.CsvFormatterStream = void 0;\nconst util_1 = require(\"util\");\nconst stream_1 = require(\"stream\");\nconst fs = __importStar(require(\"fs\"));\nconst FormatterOptions_1 = require(\"./FormatterOptions\");\nconst CsvFormatterStream_1 = require(\"./CsvFormatterStream\");\n__exportStar(require(\"./types\"), exports);\nvar CsvFormatterStream_2 = require(\"./CsvFormatterStream\");\nObject.defineProperty(exports, \"CsvFormatterStream\", {\n enumerable: true,\n get: function () {\n return CsvFormatterStream_2.CsvFormatterStream;\n }\n});\nvar FormatterOptions_2 = require(\"./FormatterOptions\");\nObject.defineProperty(exports, \"FormatterOptions\", {\n enumerable: true,\n get: function () {\n return FormatterOptions_2.FormatterOptions;\n }\n});\nexports.format = options => new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options));\nexports.write = (rows, options) => {\n const csvStream = exports.format(options);\n const promiseWrite = util_1.promisify((row, cb) => {\n csvStream.write(row, undefined, cb);\n });\n rows.reduce((prev, row) => prev.then(() => promiseWrite(row)), Promise.resolve()).then(() => csvStream.end()).catch(err => {\n csvStream.emit('error', err);\n });\n return csvStream;\n};\nexports.writeToStream = (ws, rows, options) => exports.write(rows, options).pipe(ws);\nexports.writeToBuffer = function (rows) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const buffers = [];\n const ws = new stream_1.Writable({\n write(data, enc, writeCb) {\n buffers.push(data);\n writeCb();\n }\n });\n return new Promise((res, rej) => {\n ws.on('error', rej).on('finish', () => res(Buffer.concat(buffers)));\n exports.write(rows, opts).pipe(ws);\n });\n};\nexports.writeToString = (rows, options) => exports.writeToBuffer(rows, options).then(buffer => buffer.toString());\nexports.writeToPath = (path, rows, options) => {\n const stream = fs.createWriteStream(path, {\n encoding: 'utf8'\n });\n return exports.write(rows, options).pipe(stream);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlsXzEiLCJyZXF1aXJlIiwic3RyZWFtXzEiLCJmcyIsIl9faW1wb3J0U3RhciIsIkZvcm1hdHRlck9wdGlvbnNfMSIsIkNzdkZvcm1hdHRlclN0cmVhbV8xIiwiX19leHBvcnRTdGFyIiwiZXhwb3J0cyIsIkNzdkZvcm1hdHRlclN0cmVhbV8yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ3N2Rm9ybWF0dGVyU3RyZWFtIiwiRm9ybWF0dGVyT3B0aW9uc18yIiwiRm9ybWF0dGVyT3B0aW9ucyIsImZvcm1hdCIsIm9wdGlvbnMiLCJ3cml0ZSIsInJvd3MiLCJjc3ZTdHJlYW0iLCJwcm9taXNlV3JpdGUiLCJwcm9taXNpZnkiLCJyb3ciLCJjYiIsInVuZGVmaW5lZCIsInJlZHVjZSIsInByZXYiLCJ0aGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJlbmQiLCJjYXRjaCIsImVyciIsImVtaXQiLCJ3cml0ZVRvU3RyZWFtIiwid3MiLCJwaXBlIiwid3JpdGVUb0J1ZmZlciIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJidWZmZXJzIiwiV3JpdGFibGUiLCJkYXRhIiwiZW5jIiwid3JpdGVDYiIsInB1c2giLCJyZXMiLCJyZWoiLCJvbiIsIkJ1ZmZlciIsImNvbmNhdCIsIndyaXRlVG9TdHJpbmciLCJidWZmZXIiLCJ0b1N0cmluZyIsIndyaXRlVG9QYXRoIiwicGF0aCIsInN0cmVhbSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZW5jb2RpbmciXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE1BQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLE1BQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLE1BQUFFLEVBQUEsR0FBQUMsWUFBQSxDQUFBSCxPQUFBO0FBRUEsTUFBQUks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","\"use strict\";\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isSyncTransform = void 0;\nexports.isSyncTransform = transform => transform.length === 1;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiaXNTeW5jVHJhbnNmb3JtIiwidHJhbnNmb3JtIiwibGVuZ3RoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOztBQUFBOzs7OztBQVlhQSxPQUFBLENBQUFDLGVBQWUsR0FDeEJDLFNBQXFDLElBQ0NBLFNBQVMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMifQ==","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvParserStream = void 0;\nconst string_decoder_1 = require(\"string_decoder\");\nconst stream_1 = require(\"stream\");\nconst transforms_1 = require(\"./transforms\");\nconst parser_1 = require(\"./parser\");\nclass CsvParserStream extends stream_1.Transform {\n constructor(parserOptions) {\n super({\n objectMode: parserOptions.objectMode\n });\n this.lines = '';\n this.rowCount = 0;\n this.parsedRowCount = 0;\n this.parsedLineCount = 0;\n this.endEmitted = false;\n this.headersEmitted = false;\n this.parserOptions = parserOptions;\n this.parser = new parser_1.Parser(parserOptions);\n this.headerTransformer = new transforms_1.HeaderTransformer(parserOptions);\n this.decoder = new string_decoder_1.StringDecoder(parserOptions.encoding);\n this.rowTransformerValidator = new transforms_1.RowTransformerValidator();\n }\n get hasHitRowLimit() {\n return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows;\n }\n get shouldEmitRows() {\n return this.parsedRowCount > this.parserOptions.skipRows;\n }\n get shouldSkipLine() {\n return this.parsedLineCount <= this.parserOptions.skipLines;\n }\n transform(transformFunction) {\n this.rowTransformerValidator.rowTransform = transformFunction;\n return this;\n }\n validate(validateFunction) {\n this.rowTransformerValidator.rowValidator = validateFunction;\n return this;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n emit(event) {\n if (event === 'end') {\n if (!this.endEmitted) {\n this.endEmitted = true;\n super.emit('end', this.rowCount);\n }\n return false;\n }\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n return super.emit(event, ...rest);\n }\n _transform(data, encoding, done) {\n // if we have hit our maxRows parsing limit then skip parsing\n if (this.hasHitRowLimit) {\n return done();\n }\n const wrappedCallback = CsvParserStream.wrapDoneCallback(done);\n try {\n const {\n lines\n } = this;\n const newLine = lines + this.decoder.write(data);\n const rows = this.parse(newLine, true);\n return this.processRows(rows, wrappedCallback);\n } catch (e) {\n return wrappedCallback(e);\n }\n }\n _flush(done) {\n const wrappedCallback = CsvParserStream.wrapDoneCallback(done);\n // if we have hit our maxRows parsing limit then skip parsing\n if (this.hasHitRowLimit) {\n return wrappedCallback();\n }\n try {\n const newLine = this.lines + this.decoder.end();\n const rows = this.parse(newLine, false);\n return this.processRows(rows, wrappedCallback);\n } catch (e) {\n return wrappedCallback(e);\n }\n }\n parse(data, hasMoreData) {\n if (!data) {\n return [];\n }\n const {\n line,\n rows\n } = this.parser.parse(data, hasMoreData);\n this.lines = line;\n return rows;\n }\n processRows(rows, cb) {\n const rowsLength = rows.length;\n const iterate = i => {\n const callNext = err => {\n if (err) {\n return cb(err);\n }\n if (i % 100 === 0) {\n // incase the transform are sync insert a next tick to prevent stack overflow\n setImmediate(() => iterate(i + 1));\n return undefined;\n }\n return iterate(i + 1);\n };\n this.checkAndEmitHeaders();\n // if we have emitted all rows or we have hit the maxRows limit option\n // then end\n if (i >= rowsLength || this.hasHitRowLimit) {\n return cb();\n }\n this.parsedLineCount += 1;\n if (this.shouldSkipLine) {\n return callNext();\n }\n const row = rows[i];\n this.rowCount += 1;\n this.parsedRowCount += 1;\n const nextRowCount = this.rowCount;\n return this.transformRow(row, (err, transformResult) => {\n if (err) {\n this.rowCount -= 1;\n return callNext(err);\n }\n if (!transformResult) {\n return callNext(new Error('expected transform result'));\n }\n if (!transformResult.isValid) {\n this.emit('data-invalid', transformResult.row, nextRowCount, transformResult.reason);\n } else if (transformResult.row) {\n return this.pushRow(transformResult.row, callNext);\n }\n return callNext();\n });\n };\n iterate(0);\n }\n transformRow(parsedRow, cb) {\n try {\n this.headerTransformer.transform(parsedRow, (err, withHeaders) => {\n if (err) {\n return cb(err);\n }\n if (!withHeaders) {\n return cb(new Error('Expected result from header transform'));\n }\n if (!withHeaders.isValid) {\n if (this.shouldEmitRows) {\n return cb(null, {\n isValid: false,\n row: parsedRow\n });\n }\n // skipped because of skipRows option remove from total row count\n return this.skipRow(cb);\n }\n if (withHeaders.row) {\n if (this.shouldEmitRows) {\n return this.rowTransformerValidator.transformAndValidate(withHeaders.row, cb);\n }\n // skipped because of skipRows option remove from total row count\n return this.skipRow(cb);\n }\n // this is a header row dont include in the rowCount or parsedRowCount\n this.rowCount -= 1;\n this.parsedRowCount -= 1;\n return cb(null, {\n row: null,\n isValid: true\n });\n });\n } catch (e) {\n cb(e);\n }\n }\n checkAndEmitHeaders() {\n if (!this.headersEmitted && this.headerTransformer.headers) {\n this.headersEmitted = true;\n this.emit('headers', this.headerTransformer.headers);\n }\n }\n skipRow(cb) {\n // skipped because of skipRows option remove from total row count\n this.rowCount -= 1;\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n pushRow(row, cb) {\n try {\n if (!this.parserOptions.objectMode) {\n this.push(JSON.stringify(row));\n } else {\n this.push(row);\n }\n cb();\n } catch (e) {\n cb(e);\n }\n }\n static wrapDoneCallback(done) {\n let errorCalled = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (err) {\n if (err) {\n if (errorCalled) {\n throw err;\n }\n errorCalled = true;\n done(err);\n return;\n }\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n done(...args);\n };\n }\n}\nexports.CsvParserStream = CsvParserStream;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHJpbmdfZGVjb2Rlcl8xIiwicmVxdWlyZSIsInN0cmVhbV8xIiwidHJhbnNmb3Jtc18xIiwicGFyc2VyXzEiLCJDc3ZQYXJzZXJTdHJlYW0iLCJUcmFuc2Zvcm0iLCJjb25zdHJ1Y3RvciIsInBhcnNlck9wdGlvbnMiLCJvYmplY3RNb2RlIiwibGluZXMiLCJyb3dDb3VudCIsInBhcnNlZFJvd0NvdW50IiwicGFyc2VkTGluZUNvdW50IiwiZW5kRW1pdHRlZCIsImhlYWRlcnNFbWl0dGVkIiwicGFyc2VyIiwiUGFyc2VyIiwiaGVhZGVyVHJhbnNmb3JtZXIiLCJIZWFkZXJUcmFuc2Zvcm1lciIsImRlY29kZXIiLCJTdHJpbmdEZWNvZGVyIiwiZW5jb2RpbmciLCJyb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIsIlJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yIiwiaGFzSGl0Um93TGltaXQiLCJsaW1pdFJvd3MiLCJtYXhSb3dzIiwic2hvdWxkRW1pdFJvd3MiLCJza2lwUm93cyIsInNob3VsZFNraXBMaW5lIiwic2tpcExpbmVzIiwidHJhbnNmb3JtIiwidHJhbnNmb3JtRnVuY3Rpb24iLCJyb3dUcmFuc2Zvcm0iLCJ2YWxpZGF0ZSIsInZhbGlkYXRlRnVuY3Rpb24iLCJyb3dWYWxpZGF0b3IiLCJlbWl0IiwiZXZlbnQiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwicmVzdCIsIkFycmF5IiwiX2tleSIsIl90cmFuc2Zvcm0iLCJkYXRhIiwiZG9uZSIsIndyYXBwZWRDYWxsYmFjayIsIndyYXBEb25lQ2FsbGJhY2siLCJuZXdMaW5lIiwid3JpdGUiLCJyb3dzIiwicGFyc2UiLCJwcm9jZXNzUm93cyIsImUiLCJfZmx1c2giLCJlbmQiLCJoYXNNb3JlRGF0YSIsImxpbmUiLCJjYiIsInJvd3NMZW5ndGgiLCJpdGVyYXRlIiwiaSIsImNhbGxOZXh0IiwiZXJyIiwic2V0SW1tZWRpYXRlIiwidW5kZWZpbmVkIiwiY2hlY2tBbmRFbWl0SGVhZGVycyIsInJvdyIsIm5leHRSb3dDb3VudCIsInRyYW5zZm9ybVJvdyIsInRyYW5zZm9ybVJlc3VsdCIsIkVycm9yIiwiaXNWYWxpZCIsInJlYXNvbiIsInB1c2hSb3ciLCJwYXJzZWRSb3ciLCJ3aXRoSGVhZGVycyIsInNraXBSb3ciLCJ0cmFuc2Zvcm1BbmRWYWxpZGF0ZSIsImhlYWRlcnMiLCJwdXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImVycm9yQ2FsbGVkIiwiX2xlbjIiLCJhcmdzIiwiX2tleTIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NzdlBhcnNlclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBQUEsZ0JBQUEsR0FBQUMsT0FBQTtBQUNBLE1BQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUVBLE1BQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUNBLE1BQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUdBLE1BQWFJLGVBQThDLFNBQVFILFFBQUEsQ0FBQUksU0FBUztFQXVCeEVDLFlBQW1CQyxhQUE0QjtJQUMzQyxLQUFLLENBQUM7TUFBRUMsVUFBVSxFQUFFRCxhQUFhLENBQUNDO0lBQVUsQ0FBRSxDQUFDO0lBYjNDLEtBQUFDLEtBQUssR0FBRyxFQUFFO0lBRVYsS0FBQUMsUUFBUSxHQUFHLENBQUM7SUFFWixLQUFBQyxjQUFjLEdBQUcsQ0FBQztJQUVsQixLQUFBQyxlQUFlLEdBQUcsQ0FBQztJQUVuQixLQUFBQyxVQUFVLEdBQUcsS0FBSztJQUVsQixLQUFBQyxjQUFjLEdBQUcsS0FBSztJQUkxQixJQUFJLENBQUNQLGFBQWEsR0FBR0EsYUFBYTtJQUNsQyxJQUFJLENBQUNRLE1BQU0sR0FBRyxJQUFJWixRQUFBLENBQUFhLE1BQU0sQ0FBQ1QsYUFBYSxDQUFDO0lBQ3ZDLElBQUksQ0FBQ1UsaUJBQWlCLEdBQUcsSUFBSWYsWUFBQSxDQUFBZ0IsaUJBQWlCLENBQUNYLGFBQWEsQ0FBQztJQUM3RCxJQUFJLENBQUNZLE9BQU8sR0FBRyxJQUFJ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","\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ParserOptions = void 0;\nconst lodash_escaperegexp_1 = __importDefault(require(\"lodash.escaperegexp\"));\nconst lodash_isnil_1 = __importDefault(require(\"lodash.isnil\"));\nclass ParserOptions {\n constructor(opts) {\n var _a;\n this.objectMode = true;\n this.delimiter = ',';\n this.ignoreEmpty = false;\n this.quote = '\"';\n this.escape = null;\n this.escapeChar = this.quote;\n this.comment = null;\n this.supportsComments = false;\n this.ltrim = false;\n this.rtrim = false;\n this.trim = false;\n this.headers = null;\n this.renameHeaders = false;\n this.strictColumnHandling = false;\n this.discardUnmappedColumns = false;\n this.carriageReturn = '\\r';\n this.encoding = 'utf8';\n this.limitRows = false;\n this.maxRows = 0;\n this.skipLines = 0;\n this.skipRows = 0;\n Object.assign(this, opts || {});\n if (this.delimiter.length > 1) {\n throw new Error('delimiter option must be one character long');\n }\n this.escapedDelimiter = lodash_escaperegexp_1.default(this.delimiter);\n this.escapeChar = (_a = this.escape) !== null && _a !== void 0 ? _a : this.quote;\n this.supportsComments = !lodash_isnil_1.default(this.comment);\n this.NEXT_TOKEN_REGEXP = new RegExp(`([^\\\\s]|\\\\r\\\\n|\\\\n|\\\\r|${this.escapedDelimiter})`);\n if (this.maxRows > 0) {\n this.limitRows = true;\n }\n }\n}\nexports.ParserOptions = ParserOptions;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfZXNjYXBlcmVnZXhwXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZXF1aXJlIiwibG9kYXNoX2lzbmlsXzEiLCJQYXJzZXJPcHRpb25zIiwiY29uc3RydWN0b3IiLCJvcHRzIiwib2JqZWN0TW9kZSIsImRlbGltaXRlciIsImlnbm9yZUVtcHR5IiwicXVvdGUiLCJlc2NhcGUiLCJlc2NhcGVDaGFyIiwiY29tbWVudCIsInN1cHBvcnRzQ29tbWVudHMiLCJsdHJpbSIsInJ0cmltIiwidHJpbSIsImhlYWRlcnMiLCJyZW5hbWVIZWFkZXJzIiwic3RyaWN0Q29sdW1uSGFuZGxpbmciLCJkaXNjYXJkVW5tYXBwZWRDb2x1bW5zIiwiY2FycmlhZ2VSZXR1cm4iLCJlbmNvZGluZyIsImxpbWl0Um93cyIsIm1heFJvd3MiLCJza2lwTGluZXMiLCJza2lwUm93cyIsIk9iamVjdCIsImFzc2lnbiIsImxlbmd0aCIsIkVycm9yIiwiZXNjYXBlZERlbGltaXRlciIsImRlZmF1bHQiLCJfYSIsIk5FWFRfVE9LRU5fUkVHRVhQIiwiUmVnRXhwIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QYXJzZXJPcHRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE1BQUFBLHFCQUFBLEdBQUFDLGVBQUEsQ0FBQUMsT0FBQTtBQUNBLE1BQUFDLGNBQUEsR0FBQUYsZUFBQSxDQUFBQyxPQUFBO0FBdUJBLE1BQWFFLGFBQWE7RUErQ3RCQyxZQUFtQkMsSUFBd0I7O0lBNUMzQixLQUFBQyxVQUFVLEdBQVksSUFBSTtJQUUxQixLQUFBQyxTQUFTLEdBQVcsR0FBRztJQUV2QixLQUFBQyxXQUFXLEdBQVksS0FBSztJQUU1QixLQUFBQyxLQUFLLEdBQWtCLEdBQUc7SUFFMUIsS0FBQUMsTUFBTSxHQUFrQixJQUFJO0lBRTVCLEtBQUFDLFVBQVUsR0FBa0IsSUFBSSxDQUFDRixLQUFLO0lBRXRDLEtBQUFHLE9BQU8sR0FBa0IsSUFBSTtJQUU3QixLQUFBQyxnQkFBZ0IsR0FBWSxLQUFLO0lBRWpDLEtBQUFDLEtBQUssR0FBWSxLQUFLO0lBRXRCLEtBQUFDLEtBQUssR0FBWSxLQUFLO0lBRXRCLEtBQUFDLElBQUksR0FBWSxLQUFLO0lBRXJCLEtBQUFDLE9BQU8sR0FBMkQsSUFBSTtJQUV0RSxLQUFBQyxhQUFhLEdBQVksS0FBSztJQUU5QixLQUFBQyxvQkFBb0IsR0FBWSxLQUFLO0lBRXJDLEtBQUFDLHNCQUFzQixHQUFZLEtBQUs7SUFFdkMsS0FBQUMsY0FBYyxHQUFXLElBQUk7SUFJN0IsS0FBQUMsUUFBUSxHQUFtQixNQUFNO0lBRWpDLEtBQUFDLFNBQVMsR0FBWSxLQUFLO0lBRTFCLEtBQUFDLE9BQU8sR0FBVyxDQUFDO0lBRW5CLEtBQUFDLFNBQVMsR0FBVyxDQUFDO0lBRXJCLEtBQUFDLFFBQVEsR0FBVyxDQUFDO0lBR2hDQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLEVBQUV2QixJQUFJLElBQUksRUFBRSxDQUFDO0lBQy9CLElBQUksSUFBSSxDQUFDRSxTQUFTLENBQUNzQixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzNCLE1BQU0sSUFBSUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDOztJQUVsRSxJQUFJLENBQUNDLGdCQUFnQixHQUFHaEMscUJBQUEsQ0FBQWlDLE9BQVksQ0FBQyxJQUFJLENBQUN6QixTQUFTLENBQUM7SUFDcEQsSUFBSSxDQUFDSSxVQUFVLElBQUFzQixFQUFBLEdBQUcsSUFBSSxDQUFDdkIsTUFBTSxjQUFBdUIsRUFBQSxjQUFBQSxFQUFBLEdBQUksSUFBSSxDQUFDeEIsS0FBSztJQUMzQyxJQUFJLENBQUNJLGdCQUFnQixHQUFHLENBQUNYLGNBQUEsQ0FBQThCLE9BQUssQ0FBQyxJQUFJLENBQUNwQixPQUFPLENBQUM7SUFDNUMsSUFBSSxDQUFDc0IsaUJBQWlCLEdBQUcsSUFBSUMsTUFBTSxDQUFDLDBCQUEwQixJQUFJLENBQUNKLGdCQUFnQixHQUFHLENBQUM7SUFFdkYsSUFBSSxJQUFJLENBQUNQLE9BQU8sR0FBRyxDQUFDLEVBQUU7TUFDbEIsSUFBSSxDQUFDRCxTQUFTLEdBQUcsSUFBSTs7RUFFN0I7O0FBNURKYSxPQUFBLENBQUFqQyxhQUFBLEdBQUFBLGFBQUEifQ==","\"use strict\";\n\nvar __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\nvar __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = void 0 && (void 0).__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseString = exports.parseFile = exports.parseStream = exports.parse = exports.ParserOptions = exports.CsvParserStream = void 0;\nconst fs = __importStar(require(\"fs\"));\nconst stream_1 = require(\"stream\");\nconst ParserOptions_1 = require(\"./ParserOptions\");\nconst CsvParserStream_1 = require(\"./CsvParserStream\");\n__exportStar(require(\"./types\"), exports);\nvar CsvParserStream_2 = require(\"./CsvParserStream\");\nObject.defineProperty(exports, \"CsvParserStream\", {\n enumerable: true,\n get: function () {\n return CsvParserStream_2.CsvParserStream;\n }\n});\nvar ParserOptions_2 = require(\"./ParserOptions\");\nObject.defineProperty(exports, \"ParserOptions\", {\n enumerable: true,\n get: function () {\n return ParserOptions_2.ParserOptions;\n }\n});\nexports.parse = args => new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args));\nexports.parseStream = (stream, options) => stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\nexports.parseFile = function (location) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\n};\nexports.parseString = (string, options) => {\n const rs = new stream_1.Readable();\n rs.push(string);\n rs.push(null);\n return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsIl9faW1wb3J0U3RhciIsInJlcXVpcmUiLCJzdHJlYW1fMSIsIlBhcnNlck9wdGlvbnNfMSIsIkNzdlBhcnNlclN0cmVhbV8xIiwiX19leHBvcnRTdGFyIiwiZXhwb3J0cyIsIkNzdlBhcnNlclN0cmVhbV8yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ3N2UGFyc2VyU3RyZWFtIiwiUGFyc2VyT3B0aW9uc18yIiwiUGFyc2VyT3B0aW9ucyIsInBhcnNlIiwiYXJncyIsInBhcnNlU3RyZWFtIiwic3RyZWFtIiwib3B0aW9ucyIsInBpcGUiLCJwYXJzZUZpbGUiLCJsb2NhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJwYXJzZVN0cmluZyIsInN0cmluZyIsInJzIiwiUmVhZGFibGUiLCJwdXNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFBQSxFQUFBLEdBQUFDLFlBQUEsQ0FBQUMsT0FBQTtBQUNBLE1BQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLE1BQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUNBLE1BQUFHLGlCQUFBLEdBQUFILE9BQUE7QUFHQUksWUFBQSxDQUFBSixPQUFBLGFBQUFLLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBTixPQUFBO0FBQVNPLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxPQUFBO0VBQUFJLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUosaUJBQUEsQ0FBQUssZUFBZTtFQUFBO0FBQUE7QUFDeEIsSUFBQUMsZUFBQSxHQUFBWixPQUFBO0FBQVNPLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxPQUFBO0VBQUFJLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsZUFBQSxDQUFBQyxhQUFhO0VBQUE7QUFBQTtBQUVUUixPQUFBLENBQUFTLEtBQUssR0FBa0NDLElBQXdCLElBQ3hFLElBQUlaLGlCQUFBLENBQUFRLGVBQWUsQ0FBQyxJQUFJVCxlQUFBLENBQUFXLGFBQWEsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7QUFFbkNWLE9BQUEsQ0FBQVcsV0FBVyxHQUFHLENBQ3ZCQyxNQUE2QixFQUM3QkMsT0FBMkIsS0FDSEQsTUFBTSxDQUFDRSxJQUFJLENBQUMsSUFBSWhCLGlCQUFBLENBQUFRLGVBQWUsQ0FBQyxJQUFJVCxlQUFBLENBQUFXLGFBQWEsQ0FBQ0ssT0FBTyxDQUFDLENBQUMsQ0FBQztBQUUzRWIsT0FBQSxDQUFBZSxTQUFTLEdBQUcsVUFDckJDLFFBQWdCO0VBQUEsSUFDaEJILE9BQUEsR0FBQUksU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQTZCLEVBQUU7RUFBQSxPQUNQeEIsRUFBRSxDQUFDMkIsZ0JBQWdCLENBQUNKLFFBQVEsQ0FBQyxDQUFDRixJQUFJLENBQUMsSUFBSWhCLGlCQUFBLENBQUFRLGVBQWUsQ0FBQyxJQUFJVCxlQUFBLENBQUFXLGFBQWEsQ0FBQ0ssT0FBTyxDQUFDLENBQUMsQ0FBQztBQUFBO0FBRWxHYixPQUFBLENBQUFxQixXQUFXLEdBQUcsQ0FDdkJDLE1BQWMsRUFDZFQsT0FBMkIsS0FDSjtFQUN2QixNQUFNVSxFQUFFLEdBQUcsSUFBSTNCLFFBQUEsQ0FBQTRCLFFBQVEsRUFBRTtFQUN6QkQsRUFBRSxDQUFDRSxJQUFJLENBQUNILE1BQU0sQ0FBQztFQUNmQyxFQUFFLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDYixPQUFPRixFQUFFLENBQUNULElBQUksQ0FBQyxJQUFJaEIsaUJBQUEsQ0FBQVEsZUFBZSxDQUFDLElBQUlULGVBQUEsQ0FBQVcsYUFBYSxDQUFDSyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUMifQ==","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Parser = void 0;\nconst Scanner_1 = require(\"./Scanner\");\nconst RowParser_1 = require(\"./RowParser\");\nconst Token_1 = require(\"./Token\");\nclass Parser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.rowParser = new RowParser_1.RowParser(this.parserOptions);\n }\n static removeBOM(line) {\n // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string\n // conversion translates it to FEFF (UTF-16 BOM)\n if (line && line.charCodeAt(0) === 0xfeff) {\n return line.slice(1);\n }\n return line;\n }\n parse(line, hasMoreData) {\n const scanner = new Scanner_1.Scanner({\n line: Parser.removeBOM(line),\n parserOptions: this.parserOptions,\n hasMoreData\n });\n if (this.parserOptions.supportsComments) {\n return this.parseWithComments(scanner);\n }\n return this.parseWithoutComments(scanner);\n }\n parseWithoutComments(scanner) {\n const rows = [];\n let shouldContinue = true;\n while (shouldContinue) {\n shouldContinue = this.parseRow(scanner, rows);\n }\n return {\n line: scanner.line,\n rows\n };\n }\n parseWithComments(scanner) {\n const {\n parserOptions\n } = this;\n const rows = [];\n for (let nextToken = scanner.nextCharacterToken; nextToken !== null; nextToken = scanner.nextCharacterToken) {\n if (Token_1.Token.isTokenComment(nextToken, parserOptions)) {\n const cursor = scanner.advancePastLine();\n if (cursor === null) {\n return {\n line: scanner.lineFromCursor,\n rows\n };\n }\n if (!scanner.hasMoreCharacters) {\n return {\n line: scanner.lineFromCursor,\n rows\n };\n }\n scanner.truncateToCursor();\n } else if (!this.parseRow(scanner, rows)) {\n break;\n }\n }\n return {\n line: scanner.line,\n rows\n };\n }\n parseRow(scanner, rows) {\n const nextToken = scanner.nextNonSpaceToken;\n if (!nextToken) {\n return false;\n }\n const row = this.rowParser.parse(scanner);\n if (row === null) {\n return false;\n }\n if (this.parserOptions.ignoreEmpty && RowParser_1.RowParser.isEmptyRow(row)) {\n return true;\n }\n rows.push(row);\n return true;\n }\n}\nexports.Parser = Parser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTY2FubmVyXzEiLCJyZXF1aXJlIiwiUm93UGFyc2VyXzEiLCJUb2tlbl8xIiwiUGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwicm93UGFyc2VyIiwiUm93UGFyc2VyIiwicmVtb3ZlQk9NIiwibGluZSIsImNoYXJDb2RlQXQiLCJzbGljZSIsInBhcnNlIiwiaGFzTW9yZURhdGEiLCJzY2FubmVyIiwiU2Nhbm5lciIsInN1cHBvcnRzQ29tbWVudHMiLCJwYXJzZVdpdGhDb21tZW50cyIsInBhcnNlV2l0aG91dENvbW1lbnRzIiwicm93cyIsInNob3VsZENvbnRpbnVlIiwicGFyc2VSb3ciLCJuZXh0VG9rZW4iLCJuZXh0Q2hhcmFjdGVyVG9rZW4iLCJUb2tlbiIsImlzVG9rZW5Db21tZW50IiwiY3Vyc29yIiwiYWR2YW5jZVBhc3RMaW5lIiwibGluZUZyb21DdXJzb3IiLCJoYXNNb3JlQ2hhcmFjdGVycyIsInRydW5jYXRlVG9DdXJzb3IiLCJuZXh0Tm9uU3BhY2VUb2tlbiIsInJvdyIsImlnbm9yZUVtcHR5IiwiaXNFbXB0eVJvdyIsInB1c2giLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhcnNlci9QYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQUFBLFNBQUEsR0FBQUMsT0FBQTtBQUNBLE1BQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUdBLE1BQUFFLE9BQUEsR0FBQUYsT0FBQTtBQU1BLE1BQWFHLE1BQU07RUFjZkMsWUFBbUJDLGFBQTRCO0lBQzNDLElBQUksQ0FBQ0EsYUFBYSxHQUFHQSxhQUFhO0lBQ2xDLElBQUksQ0FBQ0MsU0FBUyxHQUFHLElBQUlMLFdBQUEsQ0FBQU0sU0FBUyxDQUFDLElBQUksQ0FBQ0YsYUFBYSxDQUFDO0VBQ3REO0VBaEJRLE9BQU9HLFNBQVNBLENBQUNDLElBQVk7SUFDakM7SUFDQTtJQUNBLElBQUlBLElBQUksSUFBSUEs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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowParser = void 0;\nconst column_1 = require(\"./column\");\nconst Token_1 = require(\"./Token\");\nconst EMPTY_STRING = '';\nclass RowParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.columnParser = new column_1.ColumnParser(parserOptions);\n }\n static isEmptyRow(row) {\n return row.join(EMPTY_STRING).replace(/\\s+/g, EMPTY_STRING) === EMPTY_STRING;\n }\n parse(scanner) {\n const {\n parserOptions\n } = this;\n const {\n hasMoreData\n } = scanner;\n const currentScanner = scanner;\n const columns = [];\n let currentToken = this.getStartToken(currentScanner, columns);\n while (currentToken) {\n if (Token_1.Token.isTokenRowDelimiter(currentToken)) {\n currentScanner.advancePastToken(currentToken);\n // if ends with CR and there is more data, keep unparsed due to possible\n // coming LF in CRLF\n if (!currentScanner.hasMoreCharacters && Token_1.Token.isTokenCarriageReturn(currentToken, parserOptions) && hasMoreData) {\n return null;\n }\n currentScanner.truncateToCursor();\n return columns;\n }\n if (!this.shouldSkipColumnParse(currentScanner, currentToken, columns)) {\n const item = this.columnParser.parse(currentScanner);\n if (item === null) {\n return null;\n }\n columns.push(item);\n }\n currentToken = currentScanner.nextNonSpaceToken;\n }\n if (!hasMoreData) {\n currentScanner.truncateToCursor();\n return columns;\n }\n return null;\n }\n getStartToken(scanner, columns) {\n const currentToken = scanner.nextNonSpaceToken;\n if (currentToken !== null && Token_1.Token.isTokenDelimiter(currentToken, this.parserOptions)) {\n columns.push('');\n return scanner.nextNonSpaceToken;\n }\n return currentToken;\n }\n shouldSkipColumnParse(scanner, currentToken, columns) {\n const {\n parserOptions\n } = this;\n if (Token_1.Token.isTokenDelimiter(currentToken, parserOptions)) {\n scanner.advancePastToken(currentToken);\n // if the delimiter is at the end of a line\n const nextToken = scanner.nextCharacterToken;\n if (!scanner.hasMoreCharacters || nextToken !== null && Token_1.Token.isTokenRowDelimiter(nextToken)) {\n columns.push('');\n return true;\n }\n if (nextToken !== null && Token_1.Token.isTokenDelimiter(nextToken, parserOptions)) {\n columns.push('');\n return true;\n }\n }\n return false;\n }\n}\nexports.RowParser = RowParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5fMSIsInJlcXVpcmUiLCJUb2tlbl8xIiwiRU1QVFlfU1RSSU5HIiwiUm93UGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwiY29sdW1uUGFyc2VyIiwiQ29sdW1uUGFyc2VyIiwiaXNFbXB0eVJvdyIsInJvdyIsImpvaW4iLCJyZXBsYWNlIiwicGFyc2UiLCJzY2FubmVyIiwiaGFzTW9yZURhdGEiLCJjdXJyZW50U2Nhbm5lciIsImNvbHVtbnMiLCJjdXJyZW50VG9rZW4iLCJnZXRTdGFydFRva2VuIiwiVG9rZW4iLCJpc1Rva2VuUm93RGVsaW1pdGVyIiwiYWR2YW5jZVBhc3RUb2tlbiIsImhhc01vcmVDaGFyYWN0ZXJzIiwiaXNUb2tlbkNhcnJpYWdlUmV0dXJuIiwidHJ1bmNhdGVUb0N1cnNvciIsInNob3VsZFNraXBDb2x1bW5QYXJzZSIsIml0ZW0iLCJwdXNoIiwibmV4dE5vblNwYWNlVG9rZW4iLCJpc1Rva2VuRGVsaW1pdGVyIiwibmV4dFRva2VuIiwibmV4dENoYXJhY3RlclRva2VuIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvUm93UGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxNQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFHQSxNQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxNQUFNRSxZQUFZLEdBQUcsRUFBRTtBQUV2QixNQUFhQyxTQUFTO0VBU2xCQyxZQUFtQkMsYUFBNEI7SUFDM0MsSUFBSSxDQUFDQSxhQUFhLEdBQUdBLGFBQWE7SUFDbEMsSUFBSSxDQUFDQyxZQUFZLEdBQUcsSUFBSVAsUUFBQSxDQUFBUSxZQUFZLENBQUNGLGFBQWEsQ0FBQztFQUN2RDtFQVhBLE9BQU9HLFVBQVVBLENBQUNDLEdBQWE7SUFDM0IsT0FBT0EsR0FBRyxDQUFDQyxJQUFJLENBQUNSLFlBQVksQ0FBQyxDQUFDUyxPQUFPLENBQUMsTUFB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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scanner = void 0;\nconst Token_1 = require(\"./Token\");\nconst ROW_DELIMITER = /((?:\\r\\n)|\\n|\\r)/;\nclass Scanner {\n constructor(args) {\n this.cursor = 0;\n this.line = args.line;\n this.lineLength = this.line.length;\n this.parserOptions = args.parserOptions;\n this.hasMoreData = args.hasMoreData;\n this.cursor = args.cursor || 0;\n }\n get hasMoreCharacters() {\n return this.lineLength > this.cursor;\n }\n get nextNonSpaceToken() {\n const {\n lineFromCursor\n } = this;\n const regex = this.parserOptions.NEXT_TOKEN_REGEXP;\n if (lineFromCursor.search(regex) === -1) {\n return null;\n }\n const match = regex.exec(lineFromCursor);\n if (match == null) {\n return null;\n }\n const token = match[1];\n const startCursor = this.cursor + (match.index || 0);\n return new Token_1.Token({\n token,\n startCursor,\n endCursor: startCursor + token.length - 1\n });\n }\n get nextCharacterToken() {\n const {\n cursor,\n lineLength\n } = this;\n if (lineLength <= cursor) {\n return null;\n }\n return new Token_1.Token({\n token: this.line[cursor],\n startCursor: cursor,\n endCursor: cursor\n });\n }\n get lineFromCursor() {\n return this.line.substr(this.cursor);\n }\n advancePastLine() {\n const match = ROW_DELIMITER.exec(this.lineFromCursor);\n if (!match) {\n if (this.hasMoreData) {\n return null;\n }\n this.cursor = this.lineLength;\n return this;\n }\n this.cursor += (match.index || 0) + match[0].length;\n return this;\n }\n advanceTo(cursor) {\n this.cursor = cursor;\n return this;\n }\n advanceToToken(token) {\n this.cursor = token.startCursor;\n return this;\n }\n advancePastToken(token) {\n this.cursor = token.endCursor + 1;\n return this;\n }\n truncateToCursor() {\n this.line = this.lineFromCursor;\n this.lineLength = this.line.length;\n this.cursor = 0;\n return this;\n }\n}\nexports.Scanner = Scanner;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb2tlbl8xIiwicmVxdWlyZSIsIlJPV19ERUxJTUlURVIiLCJTY2FubmVyIiwiY29uc3RydWN0b3IiLCJhcmdzIiwiY3Vyc29yIiwibGluZSIsImxpbmVMZW5ndGgiLCJsZW5ndGgiLCJwYXJzZXJPcHRpb25zIiwiaGFzTW9yZURhdGEiLCJoYXNNb3JlQ2hhcmFjdGVycyIsIm5leHROb25TcGFjZVRva2VuIiwibGluZUZyb21DdXJzb3IiLCJyZWdleCIsIk5FWFRfVE9LRU5fUkVHRVhQIiwic2VhcmNoIiwibWF0Y2giLCJleGVjIiwidG9rZW4iLCJzdGFydEN1cnNvciIsImluZGV4IiwiVG9rZW4iLCJlbmRDdXJzb3IiLCJuZXh0Q2hhcmFjdGVyVG9rZW4iLCJzdWJzdHIiLCJhZHZhbmNlUGFzdExpbmUiLCJhZHZhbmNlVG8iLCJhZHZhbmNlVG9Ub2tlbiIsImFkdmFuY2VQYXN0VG9rZW4iLCJ0cnVuY2F0ZVRvQ3Vyc29yIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvU2Nhbm5lci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBRUEsTUFBTUMsYUFBYSxHQUFHLGtCQUFrQjtBQVN4QyxNQUFhQyxPQUFPO0VBV2hCQyxZQUFtQkMsSUFBaUI7SUFGN0IsS0FBQUMsTUFBTSxHQUFHLENBQUM7SUFHYixJQUFJLENBQUNDLElBQUksR0FBR0YsSUFBSSxDQUFDRSxJQUFJO0lBQ3JCLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUksQ0FBQ0QsSUFBSSxDQUFDRSxNQUFNO0lBQ2xDLElBQUksQ0FBQ0MsYUFBYSxHQUFHTCxJQUFJLENBQUNLLGFBQWE7SUFDdkMsSUFBSSxDQUFDQyxXQUFXLEdBQUdOLElBQUksQ0FBQ00sV0FBVztJQUNuQyxJQUFJLENBQUNMLE1BQU0sR0FBR0QsSUFBSSxDQUFDQyxNQUFNLElBQUksQ0FBQztFQUNsQztFQUVBLElB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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Token = void 0;\nclass Token {\n constructor(tokenArgs) {\n this.token = tokenArgs.token;\n this.startCursor = tokenArgs.startCursor;\n this.endCursor = tokenArgs.endCursor;\n }\n static isTokenRowDelimiter(token) {\n const content = token.token;\n return content === '\\r' || content === '\\n' || content === '\\r\\n';\n }\n static isTokenCarriageReturn(token, parserOptions) {\n return token.token === parserOptions.carriageReturn;\n }\n static isTokenComment(token, parserOptions) {\n return parserOptions.supportsComments && !!token && token.token === parserOptions.comment;\n }\n static isTokenEscapeCharacter(token, parserOptions) {\n return token.token === parserOptions.escapeChar;\n }\n static isTokenQuote(token, parserOptions) {\n return token.token === parserOptions.quote;\n }\n static isTokenDelimiter(token, parserOptions) {\n return token.token === parserOptions.delimiter;\n }\n}\nexports.Token = Token;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb2tlbiIsImNvbnN0cnVjdG9yIiwidG9rZW5BcmdzIiwidG9rZW4iLCJzdGFydEN1cnNvciIsImVuZEN1cnNvciIsImlzVG9rZW5Sb3dEZWxpbWl0ZXIiLCJjb250ZW50IiwiaXNUb2tlbkNhcnJpYWdlUmV0dXJuIiwicGFyc2VyT3B0aW9ucyIsImNhcnJpYWdlUmV0dXJuIiwiaXNUb2tlbkNvbW1lbnQiLCJzdXBwb3J0c0NvbW1lbnRzIiwiY29tbWVudCIsImlzVG9rZW5Fc2NhcGVDaGFyYWN0ZXIiLCJlc2NhcGVDaGFyIiwiaXNUb2tlblF1b3RlIiwicXVvdGUiLCJpc1Rva2VuRGVsaW1pdGVyIiwiZGVsaW1pdGVyIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvVG9rZW4udHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQVVBLE1BQWFBLEtBQUs7RUFnQ2RDLFlBQW1CQyxTQUFvQjtJQUNuQyxJQUFJLENBQUNDLEtBQUssR0FBR0QsU0FBUyxDQUFDQyxLQUFLO0lBQzVCLElBQUksQ0FBQ0MsV0FBVyxHQUFHRixTQUFTLENBQUNFLFdBQVc7SUFDeEMsSUFBSSxDQUFDQyxTQUFTLEdBQUdILFNBQVMsQ0FBQ0csU0FBUztFQUN4QztFQW5DTyxPQUFPQyxtQkFBbUJBLENBQUNILEtBQVk7SUFDMUMsTUFBTUksT0FBTyxHQUFHSixLQUFLLENBQUNBLEtBQUs7SUFDM0IsT0FBT0ksT0FBTyxLQUFLLElBQUksSUFBSUEsT0FBTyxLQUFLLElBQUksSUFBSUEsT0FBTyxLQUFLLE1BQU07RUFDckU7RUFFTyxPQUFPQyxxQkFBcUJBLENBQUNMLEtBQVksRUFBRU0sYUFBNEI7SUFDMUUsT0FBT04sS0FBSyxDQUFDQSxLQUFLLEtBQUtNLGFBQWEsQ0FBQ0MsY0FBYztFQUN2RDtFQUVPLE9BQU9DLGNBQWNBLENBQUNSLEtBQVksRUFBRU0sYUFBNEI7SUFDbkUsT0FBT0EsYUFBYSxDQUFDRyxnQkFBZ0IsSUFBSSxDQUFDLENBQUNULEtBQUssSUFBSUEsS0FBSyxDQUFDQSxLQUFLLEtBQUtNLGFBQWEsQ0FBQ0ksT0FBTztFQUM3RjtFQUVPLE9BQU9DLHNCQUFzQkEsQ0FBQ1gsS0FBWSxFQUFFTSxhQUE0QjtJQUMzRSxPQUFPTixLQUFLLENBQUNBLEtBQUssS0FBS00sYUFBYSxDQUFDTSxVQUFVO0VBQ25EO0VBRU8sT0FBT0MsWUFBWUEsQ0FBQ2IsS0FBWSxFQUFFTSxhQUE0QjtJQUNqRSxPQUFPTixLQUFLLENBQUNBLEtBQUssS0FBS00sYUFBYSxDQUFDUSxLQUFLO0VBQzlDO0VBRU8sT0FBT0MsZ0JBQWdCQSxDQUFDZixLQUFZLEVBQUVNLGFBQTRCO0lBQ3JFLE9BQU9OLEtBQUssQ0FBQ0EsS0FBSyxLQUFLTSxhQUFhLENBQUNVLFNBQVM7RUFDbEQ7O0FBeEJKQyxPQUFBLENBQUFwQixLQUFBLEdBQUFBLEtBQUEifQ==","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnFormatter = void 0;\nclass ColumnFormatter {\n constructor(parserOptions) {\n if (parserOptions.trim) {\n this.format = col => col.trim();\n } else if (parserOptions.ltrim) {\n this.format = col => col.trimLeft();\n } else if (parserOptions.rtrim) {\n this.format = col => col.trimRight();\n } else {\n this.format = col => col;\n }\n }\n}\nexports.ColumnFormatter = ColumnFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5Gb3JtYXR0ZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlck9wdGlvbnMiLCJ0cmltIiwiZm9ybWF0IiwiY29sIiwibHRyaW0iLCJ0cmltTGVmdCIsInJ0cmltIiwidHJpbVJpZ2h0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL0NvbHVtbkZvcm1hdHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsTUFBYUEsZUFBZTtFQUd4QkMsWUFBbUJDLGFBQTRCO0lBQzNDLElBQUlBLGFBQWEsQ0FBQ0MsSUFBSSxFQUFFO01BQ3BCLElBQUksQ0FBQ0MsTUFBTSxHQUFJQyxHQUFXLElBQWFBLEdBQUcsQ0FBQ0YsSUFBSSxFQUFFO0tBQ3BELE1BQU0sSUFBSUQsYUFBYSxDQUFDSSxLQUFLLEVBQUU7TUFDNUIsSUFBSSxDQUFDRixNQUFNLEdBQUlDLEdBQVcsSUFBYUEsR0FBRyxDQUFDRSxRQUFRLEVBQUU7S0FDeEQsTUFBTSxJQUFJTCxhQUFhLENBQUNNLEtBQUssRUFBRTtNQUM1QixJQUFJLENBQUNKLE1BQU0sR0FBSUMsR0FBVyxJQUFhQSxHQUFHLENBQUNJLFNBQVMsRUFBRTtLQUN6RCxNQUFNO01BQ0gsSUFBSSxDQUFDTCxNQUFNLEdBQUlDLEdBQVcsSUFBYUEsR0FBRzs7RUFFbEQ7O0FBYkpLLE9BQUEsQ0FBQVYsZUFBQSxHQUFBQSxlQUFBIn0=","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnParser = void 0;\nconst NonQuotedColumnParser_1 = require(\"./NonQuotedColumnParser\");\nconst QuotedColumnParser_1 = require(\"./QuotedColumnParser\");\nconst Token_1 = require(\"../Token\");\nclass ColumnParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.quotedColumnParser = new QuotedColumnParser_1.QuotedColumnParser(parserOptions);\n this.nonQuotedColumnParser = new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions);\n }\n parse(scanner) {\n const {\n nextNonSpaceToken\n } = scanner;\n if (nextNonSpaceToken !== null && Token_1.Token.isTokenQuote(nextNonSpaceToken, this.parserOptions)) {\n scanner.advanceToToken(nextNonSpaceToken);\n return this.quotedColumnParser.parse(scanner);\n }\n return this.nonQuotedColumnParser.parse(scanner);\n }\n}\nexports.ColumnParser = ColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOb25RdW90ZWRDb2x1bW5QYXJzZXJfMSIsInJlcXVpcmUiLCJRdW90ZWRDb2x1bW5QYXJzZXJfMSIsIlRva2VuXzEiLCJDb2x1bW5QYXJzZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlck9wdGlvbnMiLCJxdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXIiLCJub25RdW90ZWRDb2x1bW5QYXJzZXIiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJwYXJzZSIsInNjYW5uZXIiLCJuZXh0Tm9uU3BhY2VUb2tlbiIsIlRva2VuIiwiaXNUb2tlblF1b3RlIiwiYWR2YW5jZVRvVG9rZW4iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhcnNlci9jb2x1bW4vQ29sdW1uUGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxNQUFBQSx1QkFBQSxHQUFBQyxPQUFBO0FBQ0EsTUFBQUMsb0JBQUEsR0FBQUQsT0FBQTtBQUVBLE1BQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLE1BQWFHLFlBQVk7RUFPckJDLFlBQW1CQyxhQUE0QjtJQUMzQyxJQUFJLENBQUNBLGFBQWEsR0FBR0EsYUFBYTtJQUNsQyxJQUFJLENBQUNDLGtCQUFrQixHQUFHLElBQUlMLG9CQUFBLENBQUFNLGtCQUFrQixDQUFDRixhQUFhLENBQUM7SUFDL0QsSUFBSSxDQUFDRyxxQkFBcUIsR0FBRyxJQUFJVCx1QkFBQSxDQUFBVSxxQkFBcUIsQ0FBQ0osYUFBYSxDQUFDO0VBQ3pFO0VBRU9LLEtBQUtBLENBQUNDLE9BQWdCO0lBQ3pCLE1BQU07TUFBRUM7SUFBaUIsQ0FBRSxHQUFHRCxPQUFPO0lBQ3JDLElBQUlDLGlCQUFpQixLQUFLLElBQUksSUFBSVYsT0FBQSxDQUFBVyxLQUFLLENBQUNDLFlBQVksQ0FBQ0YsaUJBQWlCLEVBQUUsSUFBSSxDQUFDUCxhQUFhLENBQUMsRUFBRTtNQUN6Rk0sT0FBTyxDQUFDSSxjQUFjLENBQUNILGlCQUFpQixDQUFDO01BQ3pDLE9BQU8sSUFBSSxDQUFDTixrQkFBa0IsQ0FBQ0ksS0FBSyxDQUFDQyxPQUFPLENBQUM7O0lBRWpELE9BQU8sSUFBSSxDQUFDSCxxQkFBcUIsQ0FBQ0UsS0FBSyxDQUFDQyxPQUFPLENBQUM7RUFDcEQ7O0FBcEJKSyxPQUFBLENBQUFiLFlBQUEsR0FBQUEsWUFBQSJ9","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.NonQuotedColumnParser = void 0;\nconst ColumnFormatter_1 = require(\"./ColumnFormatter\");\nconst Token_1 = require(\"../Token\");\nclass NonQuotedColumnParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);\n }\n parse(scanner) {\n if (!scanner.hasMoreCharacters) {\n return null;\n }\n const {\n parserOptions\n } = this;\n const characters = [];\n let nextToken = scanner.nextCharacterToken;\n for (; nextToken; nextToken = scanner.nextCharacterToken) {\n if (Token_1.Token.isTokenDelimiter(nextToken, parserOptions) || Token_1.Token.isTokenRowDelimiter(nextToken)) {\n break;\n }\n characters.push(nextToken.token);\n scanner.advancePastToken(nextToken);\n }\n return this.columnFormatter.format(characters.join(''));\n }\n}\nexports.NonQuotedColumnParser = NonQuotedColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5Gb3JtYXR0ZXJfMSIsInJlcXVpcmUiLCJUb2tlbl8xIiwiTm9uUXVvdGVkQ29sdW1uUGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwiY29sdW1uRm9ybWF0dGVyIiwiQ29sdW1uRm9ybWF0dGVyIiwicGFyc2UiLCJzY2FubmVyIiwiaGFzTW9yZUNoYXJhY3RlcnMiLCJjaGFyYWN0ZXJzIiwibmV4dFRva2VuIiwibmV4dENoYXJhY3RlclRva2VuIiwiVG9rZW4iLCJpc1Rva2VuRGVsaW1pdGVyIiwiaXNUb2tlblJvd0RlbGltaXRlciIsInB1c2giLCJ0b2tlbiIsImFkdmFuY2VQYXN0VG9rZW4iLCJmb3JtYXQiLCJqb2luIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL05vblF1b3RlZENvbHVtblBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBQUEsaUJBQUEsR0FBQUMsT0FBQTtBQUVBLE1BQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUVBLE1BQWFFLHFCQUFxQjtFQUs5QkMsWUFBbUJDLGFBQTRCO0lBQzNDLElBQUksQ0FBQ0EsYUFBYSxHQUFHQSxhQUFhO0lBQ2xDLElBQUksQ0FBQ0MsZUFBZSxHQUFHLElBQUlOLGlCQUFBLENBQUFPLGVBQWUsQ0FBQ0YsYUFBYSxDQUFDO0VBQzdEO0VBRU9HLEtBQUtBLENBQUNDLE9BQWdCO0lBQ3pCLElBQUksQ0FBQ0EsT0FBTyxDQUFDQyxpQkFBaUIsRUFBRTtNQUM1QixPQUFPLElBQUk7O0lBRWYsTUFBTTtNQUFFTDtJQUFhLENBQUUsR0FBRyxJQUFJO0lBQzlCLE1BQU1NLFVBQVUsR0FBRyxFQUFFO0lBQ3JCLElBQUlDLFNBQVMsR0FBR0gsT0FBTyxDQUFDSSxrQkFBa0I7SUFDMUMsT0FBT0QsU0FBUyxFQUFFQSxTQUFTLEdBQUdILE9BQU8sQ0FBQ0ksa0JBQWtCLEVBQUU7TUFDdEQsSUFBSVgsT0FBQSxDQUFBWSxLQUFLLENBQUNDLGdCQUFnQixDQUFDSCxTQUFTLEVBQUVQLGFBQWEsQ0FBQyxJQUFJSCxPQUFBLENBQUFZLEtBQUssQ0FBQ0UsbUJBQW1CLENBQUNKLFNBQVMsQ0FBQyxFQUFFO1FBQzFGOztNQUVKRCxVQUFVLENBQUNNLElBQUksQ0FBQ0wsU0FBUyxDQUFDTSxLQUFLLENBQUM7TUFDaENULE9BQU8sQ0FBQ1UsZ0JBQWdCLENBQUNQLFNBQVMsQ0FBQzs7SUFFdkMsT0FBTyxJQUFJLENBQUNOLGVBQWUsQ0FBQ2MsTUFBTSxDQUFDVCxVQUFVLENBQUNVLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMzRDs7QUF6QkpDLE9BQUEsQ0FBQW5CLHFCQUFBLEdBQUFBLHFCQUFBIn0=","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QuotedColumnParser = void 0;\nconst ColumnFormatter_1 = require(\"./ColumnFormatter\");\nconst Token_1 = require(\"../Token\");\nclass QuotedColumnParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);\n }\n parse(scanner) {\n if (!scanner.hasMoreCharacters) {\n return null;\n }\n const originalCursor = scanner.cursor;\n const {\n foundClosingQuote,\n col\n } = this.gatherDataBetweenQuotes(scanner);\n if (!foundClosingQuote) {\n // reset the cursor to the original\n scanner.advanceTo(originalCursor);\n // if we didnt find a closing quote but we potentially have more data then skip the parsing\n // and return the original scanner.\n if (!scanner.hasMoreData) {\n throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote || ''}' in line: at '${scanner.lineFromCursor.replace(/[\\r\\n]/g, \"\\\\n'\")}'`);\n }\n return null;\n }\n this.checkForMalformedColumn(scanner);\n return col;\n }\n gatherDataBetweenQuotes(scanner) {\n const {\n parserOptions\n } = this;\n let foundStartingQuote = false;\n let foundClosingQuote = false;\n const characters = [];\n let nextToken = scanner.nextCharacterToken;\n for (; !foundClosingQuote && nextToken !== null; nextToken = scanner.nextCharacterToken) {\n const isQuote = Token_1.Token.isTokenQuote(nextToken, parserOptions);\n // ignore first quote\n if (!foundStartingQuote && isQuote) {\n foundStartingQuote = true;\n } else if (foundStartingQuote) {\n if (Token_1.Token.isTokenEscapeCharacter(nextToken, parserOptions)) {\n // advance past the escape character so we can get the next one in line\n scanner.advancePastToken(nextToken);\n const tokenFollowingEscape = scanner.nextCharacterToken;\n // if the character following the escape is a quote character then just add\n // the quote and advance to that character\n if (tokenFollowingEscape !== null && (Token_1.Token.isTokenQuote(tokenFollowingEscape, parserOptions) || Token_1.Token.isTokenEscapeCharacter(tokenFollowingEscape, parserOptions))) {\n characters.push(tokenFollowingEscape.token);\n nextToken = tokenFollowingEscape;\n } else if (isQuote) {\n // if the escape is also a quote then we found our closing quote and finish early\n foundClosingQuote = true;\n } else {\n // other wise add the escape token to the characters since it wast escaping anything\n characters.push(nextToken.token);\n }\n } else if (isQuote) {\n // we found our closing quote!\n foundClosingQuote = true;\n } else {\n // add the token to the characters\n characters.push(nextToken.token);\n }\n }\n scanner.advancePastToken(nextToken);\n }\n return {\n col: this.columnFormatter.format(characters.join('')),\n foundClosingQuote\n };\n }\n checkForMalformedColumn(scanner) {\n const {\n parserOptions\n } = this;\n const {\n nextNonSpaceToken\n } = scanner;\n if (nextNonSpaceToken) {\n const isNextTokenADelimiter = Token_1.Token.isTokenDelimiter(nextNonSpaceToken, parserOptions);\n const isNextTokenARowDelimiter = Token_1.Token.isTokenRowDelimiter(nextNonSpaceToken);\n if (!(isNextTokenADelimiter || isNextTokenARowDelimiter)) {\n // if the final quote was NOT followed by a column (,) or row(\\n) delimiter then its a bad column\n // tldr: only part of the column was quoted\n const linePreview = scanner.lineFromCursor.substr(0, 10).replace(/[\\r\\n]/g, \"\\\\n'\");\n throw new Error(`Parse Error: expected: '${parserOptions.escapedDelimiter}' OR new line got: '${nextNonSpaceToken.token}'. at '${linePreview}`);\n }\n scanner.advanceToToken(nextNonSpaceToken);\n } else if (!scanner.hasMoreData) {\n scanner.advancePastLine();\n }\n }\n}\nexports.QuotedColumnParser = QuotedColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5Gb3JtYXR0ZXJfMSIsInJlcXVpcmUiLCJUb2tlbl8xIiwiUXVvdGVkQ29sdW1uUGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwiY29sdW1uRm9ybWF0dGVyIiwiQ29sdW1uRm9ybWF0dGVyIiwicGFyc2UiLCJzY2FubmVyIiwiaGFzTW9yZUNoYXJhY3RlcnMiLCJvcmlnaW5hbEN1cnNvciIsImN1cnNvciIsImZvdW5kQ2xvc2luZ1F1b3RlIiwiY29sIiwiZ2F0aGVyRGF0YUJldHdlZW5RdW90ZXMiLCJhZHZhbmNlVG8iLCJoYXNNb3JlRGF0YSIsIkVycm9yIiwicXVvdGUiLCJsaW5lRnJvbUN1cnNvciIsInJlcGxhY2UiLCJjaGVja0Zvck1hbGZvcm1lZENvbHVtbiIsImZvdW5kU3RhcnRpbmdRdW90ZSIsImNoYXJhY3RlcnMiLCJuZXh0VG9rZW4iLCJuZXh0Q2hhcmFjdGVyVG9rZW4iLCJpc1F1b3RlIiwiVG9rZW4iLCJpc1Rva2VuUXVvdGUiLCJpc1Rva2VuRXNjYXBlQ2hhcmFjdGVyIiwiYWR2YW5jZVBhc3RUb2tlbiIsInRva2VuRm9sbG93aW5nRXNjYXBlIiwicHVzaCIsInRva2VuIiwiZm9ybWF0Iiwiam9pbiIsIm5leHROb25TcGFjZVRva2VuIiwiaXNOZXh0VG9rZW5BRGVsaW1pdGVyIiwiaXNUb2tlbkRlbGltaXRlciIsImlzTmV4dFRva2VuQVJvd0RlbGltaXRlciIsImlzVG9rZW5Sb3dEZWxpbWl0ZXIiLCJsaW5lUHJldmlldyIsInN1YnN0ciIsImVzY2FwZWREZWxpbWl0ZXIiLCJhZHZhbmNlVG9Ub2tlbiIsImFkdmFuY2VQYXN0TGluZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGFyc2VyL2NvbHVtbi9RdW90ZWRDb2x1bW5QYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQUFBLGlCQUFBLEdBQUFDLE9BQUE7QUFHQSxN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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnFormatter = exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = void 0;\nvar ColumnParser_1 = require(\"./ColumnParser\");\nObject.defineProperty(exports, \"ColumnParser\", {\n enumerable: true,\n get: function () {\n return ColumnParser_1.ColumnParser;\n }\n});\nvar NonQuotedColumnParser_1 = require(\"./NonQuotedColumnParser\");\nObject.defineProperty(exports, \"NonQuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return NonQuotedColumnParser_1.NonQuotedColumnParser;\n }\n});\nvar QuotedColumnParser_1 = require(\"./QuotedColumnParser\");\nObject.defineProperty(exports, \"QuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return QuotedColumnParser_1.QuotedColumnParser;\n }\n});\nvar ColumnFormatter_1 = require(\"./ColumnFormatter\");\nObject.defineProperty(exports, \"ColumnFormatter\", {\n enumerable: true,\n get: function () {\n return ColumnFormatter_1.ColumnFormatter;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5QYXJzZXJfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ29sdW1uUGFyc2VyIiwiTm9uUXVvdGVkQ29sdW1uUGFyc2VyXzEiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXJfMSIsIlF1b3RlZENvbHVtblBhcnNlciIsIkNvbHVtbkZvcm1hdHRlcl8xIiwiQ29sdW1uRm9ybWF0dGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhcnNlci9jb2x1bW4vaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGNBQUEsR0FBQUMsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLGNBQUEsQ0FBQU8sWUFBWTtFQUFBO0FBQUE7QUFDckIsSUFBQUMsdUJBQUEsR0FBQVAsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFFLHVCQUFBLENBQUFDLHFCQUFxQjtFQUFBO0FBQUE7QUFDOUIsSUFBQUMsb0JBQUEsR0FBQVQsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFJLG9CQUFBLENBQUFDLGtCQUFrQjtFQUFBO0FBQUE7QUFDM0IsSUFBQUMsaUJBQUEsR0FBQVgsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFNLGlCQUFBLENBQUFDLGVBQWU7RUFBQTtBQUFBIn0=","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = exports.Token = exports.Scanner = exports.RowParser = exports.Parser = void 0;\nvar Parser_1 = require(\"./Parser\");\nObject.defineProperty(exports, \"Parser\", {\n enumerable: true,\n get: function () {\n return Parser_1.Parser;\n }\n});\nvar RowParser_1 = require(\"./RowParser\");\nObject.defineProperty(exports, \"RowParser\", {\n enumerable: true,\n get: function () {\n return RowParser_1.RowParser;\n }\n});\nvar Scanner_1 = require(\"./Scanner\");\nObject.defineProperty(exports, \"Scanner\", {\n enumerable: true,\n get: function () {\n return Scanner_1.Scanner;\n }\n});\nvar Token_1 = require(\"./Token\");\nObject.defineProperty(exports, \"Token\", {\n enumerable: true,\n get: function () {\n return Token_1.Token;\n }\n});\nvar column_1 = require(\"./column\");\nObject.defineProperty(exports, \"ColumnParser\", {\n enumerable: true,\n get: function () {\n return column_1.ColumnParser;\n }\n});\nObject.defineProperty(exports, \"NonQuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return column_1.NonQuotedColumnParser;\n }\n});\nObject.defineProperty(exports, \"QuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return column_1.QuotedColumnParser;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZXJfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUGFyc2VyIiwiUm93UGFyc2VyXzEiLCJSb3dQYXJzZXIiLCJTY2FubmVyXzEiLCJTY2FubmVyIiwiVG9rZW5fMSIsIlRva2VuIiwiY29sdW1uXzEiLCJDb2x1bW5QYXJzZXIiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFyc2VyL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFBU0MsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBTixRQUFBLENBQUFPLE1BQU07RUFBQTtBQUFBO0FBQ2YsSUFBQUMsV0FBQSxHQUFBUCxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsV0FBQSxDQUFBQyxTQUFTO0VBQUE7QUFBQTtBQUNsQixJQUFBQyxTQUFBLEdBQUFULE9BQUE7QUFBU0MsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBSSxTQUFBLENBQUFDLE9BQU87RUFBQTtBQUFBO0FBQ2hCLElBQUFDLE9BQUEsR0FBQVgsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFNLE9BQUEsQ0FBQUMsS0FBSztFQUFBO0FBQUE7QUFDZCxJQUFBQyxRQUFBLEdBQUFiLE9BQUE7QUFBU0MsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBUSxRQUFBLENBQUFDLFlBQVk7RUFBQTtBQUFBO0FBQUViLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVEsUUFBQSxDQUFBRSxxQkFBcUI7RUFBQTtBQUFBO0FBQUVkLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVEsUUFBQSxDQUFBRyxrQkFBa0I7RUFBQTtBQUFBIn0=","\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HeaderTransformer = void 0;\nconst lodash_isundefined_1 = __importDefault(require(\"lodash.isundefined\"));\nconst lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\nconst lodash_uniq_1 = __importDefault(require(\"lodash.uniq\"));\nconst lodash_groupby_1 = __importDefault(require(\"lodash.groupby\"));\nclass HeaderTransformer {\n constructor(parserOptions) {\n this.headers = null;\n this.receivedHeaders = false;\n this.shouldUseFirstRow = false;\n this.processedFirstRow = false;\n this.headersLength = 0;\n this.parserOptions = parserOptions;\n if (parserOptions.headers === true) {\n this.shouldUseFirstRow = true;\n } else if (Array.isArray(parserOptions.headers)) {\n this.setHeaders(parserOptions.headers);\n } else if (lodash_isfunction_1.default(parserOptions.headers)) {\n this.headersTransform = parserOptions.headers;\n }\n }\n transform(row, cb) {\n if (!this.shouldMapRow(row)) {\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n return cb(null, this.processRow(row));\n }\n shouldMapRow(row) {\n const {\n parserOptions\n } = this;\n if (!this.headersTransform && parserOptions.renameHeaders && !this.processedFirstRow) {\n if (!this.receivedHeaders) {\n throw new Error('Error renaming headers: new headers must be provided in an array');\n }\n this.processedFirstRow = true;\n return false;\n }\n if (!this.receivedHeaders && Array.isArray(row)) {\n if (this.headersTransform) {\n this.setHeaders(this.headersTransform(row));\n } else if (this.shouldUseFirstRow) {\n this.setHeaders(row);\n } else {\n // dont do anything with the headers if we didnt receive a transform or shouldnt use the first row.\n return true;\n }\n return false;\n }\n return true;\n }\n processRow(row) {\n if (!this.headers) {\n return {\n row: row,\n isValid: true\n };\n }\n const {\n parserOptions\n } = this;\n if (!parserOptions.discardUnmappedColumns && row.length > this.headersLength) {\n if (!parserOptions.strictColumnHandling) {\n throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${row.length}`);\n }\n return {\n row: row,\n isValid: false,\n reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`\n };\n }\n if (parserOptions.strictColumnHandling && row.length < this.headersLength) {\n return {\n row: row,\n isValid: false,\n reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`\n };\n }\n return {\n row: this.mapHeaders(row),\n isValid: true\n };\n }\n mapHeaders(row) {\n const rowMap = {};\n const {\n headers,\n headersLength\n } = this;\n for (let i = 0; i < headersLength; i += 1) {\n const header = headers[i];\n if (!lodash_isundefined_1.default(header)) {\n const val = row[i];\n // eslint-disable-next-line no-param-reassign\n if (lodash_isundefined_1.default(val)) {\n rowMap[header] = '';\n } else {\n rowMap[header] = val;\n }\n }\n }\n return rowMap;\n }\n setHeaders(headers) {\n var _a;\n const filteredHeaders = headers.filter(h => !!h);\n if (lodash_uniq_1.default(filteredHeaders).length !== filteredHeaders.length) {\n const grouped = lodash_groupby_1.default(filteredHeaders);\n const duplicates = Object.keys(grouped).filter(dup => grouped[dup].length > 1);\n throw new Error(`Duplicate headers found ${JSON.stringify(duplicates)}`);\n }\n this.headers = headers;\n this.receivedHeaders = true;\n this.headersLength = ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.length) || 0;\n }\n}\nexports.HeaderTransformer = HeaderTransformer;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXN1bmRlZmluZWRfMSIsIl9faW1wb3J0RGVmYXVsdCIsInJlcXVpcmUiLCJsb2Rhc2hfaXNmdW5jdGlvbl8xIiwibG9kYXNoX3VuaXFfMSIsImxvZGFzaF9ncm91cGJ5XzEiLCJIZWFkZXJUcmFuc2Zvcm1lciIsImNvbnN0cnVjdG9yIiwicGFyc2VyT3B0aW9ucyIsImhlYWRlcnMiLCJyZWNlaXZlZEhlYWRlcnMiLCJzaG91bGRVc2VGaXJzdFJvdyIsInByb2Nlc3NlZEZpcnN0Um93IiwiaGVhZGVyc0xlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsInNldEhlYWRlcnMiLCJkZWZhdWx0IiwiaGVhZGVyc1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsInJvdyIsImNiIiwic2hvdWxkTWFwUm93IiwiaXNWYWxpZCIsInByb2Nlc3NSb3ciLCJyZW5hbWVIZWFkZXJzIiwiRXJyb3IiLCJkaXNjYXJkVW5tYXBwZWRDb2x1bW5zIiwibGVuZ3RoIiwic3RyaWN0Q29sdW1uSGFuZGxpbmciLCJyZWFzb24iLCJtYXBIZWFkZXJzIiwicm93TWFwIiwiaSIsImhlYWRlciIsInZhbCIsImZpbHRlcmVkSGVhZGVycyIsImZpbHRlciIsImgiLCJncm91cGVkIiwiZHVwbGljYXRlcyIsIk9iamVjdCIsImtleXMiLCJkdXAiLCJKU09OIiwic3RyaW5naWZ5IiwiX2EiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zZm9ybXMvSGVhZGVyVHJhbnNmb3JtZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBQUEsb0JBQUEsR0FBQUMsZUFBQSxDQUFBQyxPQUFBO0FBQ0EsTUFBQUMsbUJBQUEsR0FBQUYsZUFBQSxDQUFBQyxPQUFBO0FBQ0EsTUFBQUUsYUFBQSxHQUFBSCxlQUFBLENBQUFDLE9BQUE7QUFDQSxNQUFBRyxnQkFBQSxHQUFBSixlQUFBLENBQUFDLE9BQUE7QUFZQSxNQUFhSSxp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","\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowTransformerValidator = void 0;\nconst lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\nconst types_1 = require(\"../types\");\nclass RowTransformerValidator {\n constructor() {\n this._rowTransform = null;\n this._rowValidator = null;\n }\n // eslint-disable-next-line @typescript-eslint/no-shadow\n static createTransform(transformFunction) {\n if (types_1.isSyncTransform(transformFunction)) {\n return (row, cb) => {\n let transformed = null;\n try {\n transformed = transformFunction(row);\n } catch (e) {\n return cb(e);\n }\n return cb(null, transformed);\n };\n }\n return transformFunction;\n }\n static createValidator(validateFunction) {\n if (types_1.isSyncValidate(validateFunction)) {\n return (row, cb) => {\n cb(null, {\n row,\n isValid: validateFunction(row)\n });\n };\n }\n return (row, cb) => {\n validateFunction(row, (err, isValid, reason) => {\n if (err) {\n return cb(err);\n }\n if (isValid) {\n return cb(null, {\n row,\n isValid,\n reason\n });\n }\n return cb(null, {\n row,\n isValid: false,\n reason\n });\n });\n };\n }\n set rowTransform(transformFunction) {\n if (!lodash_isfunction_1.default(transformFunction)) {\n throw new TypeError('The transform should be a function');\n }\n this._rowTransform = RowTransformerValidator.createTransform(transformFunction);\n }\n set rowValidator(validateFunction) {\n if (!lodash_isfunction_1.default(validateFunction)) {\n throw new TypeError('The validate should be a function');\n }\n this._rowValidator = RowTransformerValidator.createValidator(validateFunction);\n }\n transformAndValidate(row, cb) {\n return this.callTransformer(row, (transformErr, transformedRow) => {\n if (transformErr) {\n return cb(transformErr);\n }\n if (!transformedRow) {\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n return this.callValidator(transformedRow, (validateErr, validationResult) => {\n if (validateErr) {\n return cb(validateErr);\n }\n if (validationResult && !validationResult.isValid) {\n return cb(null, {\n row: transformedRow,\n isValid: false,\n reason: validationResult.reason\n });\n }\n return cb(null, {\n row: transformedRow,\n isValid: true\n });\n });\n });\n }\n callTransformer(row, cb) {\n if (!this._rowTransform) {\n return cb(null, row);\n }\n return this._rowTransform(row, cb);\n }\n callValidator(row, cb) {\n if (!this._rowValidator) {\n return cb(null, {\n row,\n isValid: true\n });\n }\n return this._rowValidator(row, cb);\n }\n}\nexports.RowTransformerValidator = RowTransformerValidator;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXNmdW5jdGlvbl8xIiwiX19pbXBvcnREZWZhdWx0IiwicmVxdWlyZSIsInR5cGVzXzEiLCJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIsImNvbnN0cnVjdG9yIiwiX3Jvd1RyYW5zZm9ybSIsIl9yb3dWYWxpZGF0b3IiLCJjcmVhdGVUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsImlzU3luY1RyYW5zZm9ybSIsInJvdyIsImNiIiwidHJhbnNmb3JtZWQiLCJlIiwiY3JlYXRlVmFsaWRhdG9yIiwidmFsaWRhdGVGdW5jdGlvbiIsImlzU3luY1ZhbGlkYXRlIiwiaXNWYWxpZCIsImVyciIsInJlYXNvbiIsInJvd1RyYW5zZm9ybSIsImRlZmF1bHQiLCJUeXBlRXJyb3IiLCJyb3dWYWxpZGF0b3IiLCJ0cmFuc2Zvcm1BbmRWYWxpZGF0ZSIsImNhbGxUcmFuc2Zvcm1lciIsInRyYW5zZm9ybUVyciIsInRyYW5zZm9ybWVkUm93IiwiY2FsbFZhbGlkYXRvciIsInZhbGlkYXRlRXJyIiwidmFsaWRhdGlvblJlc3VsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNmb3Jtcy9Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxNQUFBQSxtQkFBQSxHQUFBQyxlQUFBLENBQUFDLE9BQUE7QUFDQSxNQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFhQSxNQUFhRSx1QkFBdUI7RUFBcENDLFlBQUE7SUFzQ1ksS0FBQUMsYUFBYSxHQUFtQyxJQUFJO0lBRXBELEtBQUFDLGFBQWEsR0FBMkIsSUFBSTtFQWlEeEQ7RUF4Rkk7RUFDUSxPQUFPQyxlQUFlQSxDQUMxQkMsaUJBQTZDO0lBRTdDLElBQUlOLE9BQUEsQ0FBQU8sZUFBZSxDQUFDRCxpQkFBaUIsQ0FBQyxFQUFFO01BQ3BDLE9BQU8sQ0FBQ0UsR0FBTSxFQUFFQyxFQUEyQixLQUFV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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HeaderTransformer = exports.RowTransformerValidator = void 0;\nvar RowTransformerValidator_1 = require(\"./RowTransformerValidator\");\nObject.defineProperty(exports, \"RowTransformerValidator\", {\n enumerable: true,\n get: function () {\n return RowTransformerValidator_1.RowTransformerValidator;\n }\n});\nvar HeaderTransformer_1 = require(\"./HeaderTransformer\");\nObject.defineProperty(exports, \"HeaderTransformer\", {\n enumerable: true,\n get: function () {\n return HeaderTransformer_1.HeaderTransformer;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvcl8xIiwicmVxdWlyZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsImVudW1lcmFibGUiLCJnZXQiLCJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIsIkhlYWRlclRyYW5zZm9ybWVyXzEiLCJIZWFkZXJUcmFuc2Zvcm1lciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2Zvcm1zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSx5QkFBQSxHQUFBQyxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4seUJBQUEsQ0FBQU8sdUJBQXVCO0VBQUE7QUFBQTtBQUNoQyxJQUFBQyxtQkFBQSxHQUFBUCxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsbUJBQUEsQ0FBQUMsaUJBQWlCO0VBQUE7QUFBQSJ9","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isSyncValidate = exports.isSyncTransform = void 0;\nexports.isSyncTransform = transform => transform.length === 1;\nexports.isSyncValidate = validate => validate.length === 1;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiaXNTeW5jVHJhbnNmb3JtIiwidHJhbnNmb3JtIiwibGVuZ3RoIiwiaXNTeW5jVmFsaWRhdGUiLCJ2YWxpZGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBb0JhQSxPQUFBLENBQUFDLGVBQWUsR0FDeEJDLFNBQXFDLElBQ0NBLFNBQVMsQ0FBQ0MsTUFBTSxLQUFLLENBQUM7QUFRbkRILE9BQUEsQ0FBQUksY0FBYyxHQUFtQkMsUUFBd0IsSUFDbEVBLFFBQVEsQ0FBQ0YsTUFBTSxLQUFLLENBQUMifQ==","'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","module.exports={\n \"aes-128-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-192-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-256-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-128-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-192-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-256-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes128\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes192\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes256\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-128-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-128-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-128-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-128-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-192-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-256-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-128-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-192-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-256-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-128-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n },\n \"aes-192-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n },\n \"aes-256-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n }\n}\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","module.exports = require('./browser/algorithms.json')\n","module.exports={\n \"sha224WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha224\",\n \"id\": \"302d300d06096086480165030402040500041c\"\n },\n \"RSA-SHA224\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha224\",\n \"id\": \"302d300d06096086480165030402040500041c\"\n },\n \"sha256WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha256\",\n \"id\": \"3031300d060960864801650304020105000420\"\n },\n \"RSA-SHA256\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha256\",\n \"id\": \"3031300d060960864801650304020105000420\"\n },\n \"sha384WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha384\",\n \"id\": \"3041300d060960864801650304020205000430\"\n },\n \"RSA-SHA384\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha384\",\n \"id\": \"3041300d060960864801650304020205000430\"\n },\n \"sha512WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha512\",\n \"id\": \"3051300d060960864801650304020305000440\"\n },\n \"RSA-SHA512\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha512\",\n \"id\": \"3051300d060960864801650304020305000440\"\n },\n \"RSA-SHA1\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha1\",\n \"id\": \"3021300906052b0e03021a05000414\"\n },\n \"ecdsa-with-SHA1\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"sha256\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"sha224\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"sha384\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"sha512\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-SHA\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA-SHA1\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA224\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"DSA-SHA224\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA256\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"DSA-SHA256\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA384\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"DSA-SHA384\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA512\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-SHA512\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-RIPEMD160\": {\n \"sign\": \"dsa\",\n \"hash\": \"rmd160\",\n \"id\": \"\"\n },\n \"ripemd160WithRSA\": {\n \"sign\": \"rsa\",\n \"hash\": \"rmd160\",\n \"id\": \"3021300906052b2403020105000414\"\n },\n \"RSA-RIPEMD160\": {\n \"sign\": \"rsa\",\n \"hash\": \"rmd160\",\n \"id\": \"3021300906052b2403020105000414\"\n },\n \"md5WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"md5\",\n \"id\": \"3020300c06082a864886f70d020505000410\"\n },\n \"RSA-MD5\": {\n \"sign\": \"rsa\",\n \"hash\": \"md5\",\n \"id\": \"3020300c06082a864886f70d020505000410\"\n }\n}\n","module.exports={\n \"1.3.132.0.10\": \"secp256k1\",\n \"1.3.132.0.33\": \"p224\",\n \"1.2.840.10045.3.1.1\": \"p192\",\n \"1.2.840.10045.3.1.7\": \"p256\",\n \"1.3.132.0.34\": \"p384\",\n \"1.3.132.0.35\": \"p521\"\n}\n","var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [1]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = Buffer.from(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = Buffer.from(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayLike(value)\n }\n\n if (value == null) {\n throw TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n buf = Buffer.from(buf)\n }\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (var i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n if (this.padding === false) {\n return false;\n }\n\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n if (this.padding === false) {\n return buffer;\n }\n\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","module.exports={\n \"modp1\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n },\n \"modp2\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n },\n \"modp5\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n },\n \"modp14\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n },\n \"modp15\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n },\n \"modp16\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n },\n \"modp17\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n },\n \"modp18\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n }\n}","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","module.exports={\n \"name\": \"elliptic\",\n \"version\": \"6.5.4\",\n \"description\": \"EC cryptography\",\n \"main\": \"lib/elliptic.js\",\n \"files\": [\n \"lib\"\n ],\n \"scripts\": {\n \"lint\": \"eslint lib test\",\n \"lint:fix\": \"npm run lint -- --fix\",\n \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n \"test\": \"npm run lint && npm run unit\",\n \"version\": \"grunt dist && git add dist/\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git@github.com:indutny/elliptic\"\n },\n \"keywords\": [\n \"EC\",\n \"Elliptic\",\n \"curve\",\n \"Cryptography\"\n ],\n \"author\": \"Fedor Indutny \",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/indutny/elliptic/issues\"\n },\n \"homepage\": \"https://github.com/indutny/elliptic\",\n \"devDependencies\": {\n \"brfs\": \"^2.0.2\",\n \"coveralls\": \"^3.1.0\",\n \"eslint\": \"^7.6.0\",\n \"grunt\": \"^1.2.1\",\n \"grunt-browserify\": \"^5.3.0\",\n \"grunt-cli\": \"^1.3.2\",\n \"grunt-contrib-connect\": \"^3.0.0\",\n \"grunt-contrib-copy\": \"^1.0.0\",\n \"grunt-contrib-uglify\": \"^5.0.0\",\n \"grunt-mocha-istanbul\": \"^5.0.2\",\n \"grunt-saucelabs\": \"^9.0.1\",\n \"istanbul\": \"^0.4.5\",\n \"mocha\": \"^8.0.1\"\n },\n \"dependencies\": {\n \"bn.js\": \"^4.11.9\",\n \"brorand\": \"^1.1.0\",\n \"hash.js\": \"^1.0.0\",\n \"hmac-drbg\": \"^1.0.1\",\n \"inherits\": \"^2.0.4\",\n \"minimalistic-assert\": \"^1.0.1\",\n \"minimalistic-crypto-utils\": \"^1.0.1\"\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar objectCreate = Object.create || objectCreatePolyfill\nvar objectKeys = Object.keys || objectKeysPolyfill\nvar bind = Function.prototype.bind || functionBindPolyfill\n\nfunction EventEmitter() {\n if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {\n this._events = objectCreate(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nvar hasDefineProperty;\ntry {\n var o = {};\n if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });\n hasDefineProperty = o.x === 0;\n} catch (err) { hasDefineProperty = false }\nif (hasDefineProperty) {\n Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n // check whether the input is a positive number (whose value is zero or\n // greater and not a NaN).\n if (typeof arg !== 'number' || arg < 0 || arg !== arg)\n throw new TypeError('\"defaultMaxListeners\" must be a positive number');\n defaultMaxListeners = arg;\n }\n });\n} else {\n EventEmitter.defaultMaxListeners = defaultMaxListeners;\n}\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n if (arguments.length > 1)\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Unhandled \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = objectCreate(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' \"' + String(type) + '\" listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit.');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n if (typeof console === 'object' && console.warn) {\n console.warn('%s: %s', w.name, w.message);\n }\n }\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n switch (arguments.length) {\n case 0:\n return this.listener.call(this.target);\n case 1:\n return this.listener.call(this.target, arguments[0]);\n case 2:\n return this.listener.call(this.target, arguments[0], arguments[1]);\n case 3:\n return this.listener.call(this.target, arguments[0], arguments[1],\n arguments[2]);\n default:\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i)\n args[i] = arguments[i];\n this.listener.apply(this.target, args);\n }\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = bind.call(onceWrapper, state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = objectCreate(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else\n spliceOne(list, position);\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = objectCreate(null);\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = objectCreate(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = objectKeys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = objectCreate(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (!events)\n return [];\n\n var evlistener = events[type];\n if (!evlistener)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction objectCreatePolyfill(proto) {\n var F = function() {};\n F.prototype = proto;\n return new F;\n}\nfunction objectKeysPolyfill(obj) {\n var keys = [];\n for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n return k;\n}\nfunction functionBindPolyfill(context) {\n var fn = this;\n return function () {\n return fn.apply(context, arguments);\n };\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvParserStream = exports.ParserOptions = exports.parseFile = exports.parseStream = exports.parseString = exports.parse = exports.FormatterOptions = exports.CsvFormatterStream = exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = void 0;\nvar format_1 = require(\"@fast-csv/format\");\nObject.defineProperty(exports, \"format\", {\n enumerable: true,\n get: function () {\n return format_1.format;\n }\n});\nObject.defineProperty(exports, \"write\", {\n enumerable: true,\n get: function () {\n return format_1.write;\n }\n});\nObject.defineProperty(exports, \"writeToStream\", {\n enumerable: true,\n get: function () {\n return format_1.writeToStream;\n }\n});\nObject.defineProperty(exports, \"writeToBuffer\", {\n enumerable: true,\n get: function () {\n return format_1.writeToBuffer;\n }\n});\nObject.defineProperty(exports, \"writeToString\", {\n enumerable: true,\n get: function () {\n return format_1.writeToString;\n }\n});\nObject.defineProperty(exports, \"writeToPath\", {\n enumerable: true,\n get: function () {\n return format_1.writeToPath;\n }\n});\nObject.defineProperty(exports, \"CsvFormatterStream\", {\n enumerable: true,\n get: function () {\n return format_1.CsvFormatterStream;\n }\n});\nObject.defineProperty(exports, \"FormatterOptions\", {\n enumerable: true,\n get: function () {\n return format_1.FormatterOptions;\n }\n});\nvar parse_1 = require(\"@fast-csv/parse\");\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return parse_1.parse;\n }\n});\nObject.defineProperty(exports, \"parseString\", {\n enumerable: true,\n get: function () {\n return parse_1.parseString;\n }\n});\nObject.defineProperty(exports, \"parseStream\", {\n enumerable: true,\n get: function () {\n return parse_1.parseStream;\n }\n});\nObject.defineProperty(exports, \"parseFile\", {\n enumerable: true,\n get: function () {\n return parse_1.parseFile;\n }\n});\nObject.defineProperty(exports, \"ParserOptions\", {\n enumerable: true,\n get: function () {\n return parse_1.ParserOptions;\n }\n});\nObject.defineProperty(exports, \"CsvParserStream\", {\n enumerable: true,\n get: function () {\n return parse_1.CsvParserStream;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZm9ybWF0Iiwid3JpdGUiLCJ3cml0ZVRvU3RyZWFtIiwid3JpdGVUb0J1ZmZlciIsIndyaXRlVG9TdHJpbmciLCJ3cml0ZVRvUGF0aCIsIkNzdkZvcm1hdHRlclN0cmVhbSIsIkZvcm1hdHRlck9wdGlvbnMiLCJwYXJzZV8xIiwicGFyc2UiLCJwYXJzZVN0cmluZyIsInBhcnNlU3RyZWFtIiwicGFyc2VGaWxlIiwiUGFyc2VyT3B0aW9ucyIsIkNzdlBhcnNlclN0cmVhbSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0lDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sUUFBQSxDQUFBTyxNQUFNO0VBQUE7QUFBQTtBQUNOTCxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLFFBQUEsQ0FBQVEsS0FBSztFQUFBO0FBQUE7QUFDTE4sTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBTixRQUFBLENBQUFTLGFBQWE7RUFBQTtBQUFBO0FBQ2JQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sUUFBQSxDQUFBVSxhQUFhO0VBQUE7QUFBQTtBQUNiUixNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLFFBQUEsQ0FBQVcsYUFBYTtFQUFBO0FBQUE7QUFDYlQsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBTixRQUFBLENBQUFZLFdBQVc7RUFBQTtBQUFBO0FBQ1hWLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sUUFBQSxDQUFBYSxrQkFBa0I7RUFBQTtBQUFBO0FBQ2xCWCxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLFFBQUEsQ0FBQWMsZ0JBQWdCO0VBQUE7QUFBQTtBQVVwQixJQUFBQyxPQUFBLEdBQUFkLE9BQUE7QUFDSUMsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBUyxPQUFBLENBQUFDLEtBQUs7RUFBQTtBQUFBO0FBQ0xkLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVMsT0FBQSxDQUFBRSxXQUFXO0VBQUE7QUFBQTtBQUNYZixNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFTLE9BQUEsQ0FBQUcsV0FBVztFQUFBO0FBQUE7QUFDWGhCLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVMsT0FBQSxDQUFBSSxTQUFTO0VBQUE7QUFBQTtBQUNUakIsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBUyxPQUFBLENBQUFLLGFBQWE7RUFBQTtBQUFBO0FBQ2JsQixNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFTLE9BQUEsQ0FBQU0sZUFBZTtFQUFBO0FBQUEifQ==","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n}\n\nmodule.exports = escapeRegExp;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var result,\n index = -1,\n length = path.length;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result) {\n return result;\n }\n var length = object ? object.length : 0;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n * The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n result[key] = [value];\n }\n});\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = groupBy;\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && objectToString.call(value) == boolTag);\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isBoolean;\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n nullTag = '[object Null]',\n proxyTag = '[object Proxy]',\n undefinedTag = '[object Undefined]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isFunction;\n","/**\n * lodash 4.0.0 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nmodule.exports = isNil;\n","/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n Set = getNative(root, 'Set'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each\n * element is kept.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length)\n ? baseUniq(array)\n : [];\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = uniq;\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","module.exports={\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst ed5 = require(\"xmlchars/xml/1.0/ed5\");\nconst ed2 = require(\"xmlchars/xml/1.1/ed2\");\nconst NSed3 = require(\"xmlchars/xmlns/1.0/ed3\");\nvar isS = ed5.isS;\nvar isChar10 = ed5.isChar;\nvar isNameStartChar = ed5.isNameStartChar;\nvar isNameChar = ed5.isNameChar;\nvar S_LIST = ed5.S_LIST;\nvar NAME_RE = ed5.NAME_RE;\nvar isChar11 = ed2.isChar;\nvar isNCNameStartChar = NSed3.isNCNameStartChar;\nvar isNCNameChar = NSed3.isNCNameChar;\nvar NC_NAME_RE = NSed3.NC_NAME_RE;\nconst XML_NAMESPACE = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE = \"http://www.w3.org/2000/xmlns/\";\nconst rootNS = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __proto__: null,\n xml: XML_NAMESPACE,\n xmlns: XMLNS_NAMESPACE\n};\nconst XML_ENTITIES = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __proto__: null,\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: \"\\\"\",\n apos: \"'\"\n};\n// EOC: end-of-chunk\nconst EOC = -1;\nconst NL_LIKE = -2;\nconst S_BEGIN = 0; // Initial state.\nconst S_BEGIN_WHITESPACE = 1; // leading whitespace\nconst S_DOCTYPE = 2; // \nconst TAB = 9;\nconst NL = 0xA;\nconst CR = 0xD;\nconst SPACE = 0x20;\nconst BANG = 0x21;\nconst DQUOTE = 0x22;\nconst AMP = 0x26;\nconst SQUOTE = 0x27;\nconst MINUS = 0x2D;\nconst FORWARD_SLASH = 0x2F;\nconst SEMICOLON = 0x3B;\nconst LESS = 0x3C;\nconst EQUAL = 0x3D;\nconst GREATER = 0x3E;\nconst QUESTION = 0x3F;\nconst OPEN_BRACKET = 0x5B;\nconst CLOSE_BRACKET = 0x5D;\nconst NEL = 0x85;\nconst LS = 0x2028; // Line Separator\nconst isQuote = c => c === DQUOTE || c === SQUOTE;\nconst QUOTES = [DQUOTE, SQUOTE];\nconst DOCTYPE_TERMINATOR = [...QUOTES, OPEN_BRACKET, GREATER];\nconst DTD_TERMINATOR = [...QUOTES, LESS, CLOSE_BRACKET];\nconst XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION, ...S_LIST];\nconst ATTRIB_VALUE_UNQUOTED_TERMINATOR = [...S_LIST, GREATER, AMP, LESS];\nfunction nsPairCheck(parser, prefix, uri) {\n switch (prefix) {\n case \"xml\":\n if (uri !== XML_NAMESPACE) {\n parser.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`);\n }\n break;\n case \"xmlns\":\n if (uri !== XMLNS_NAMESPACE) {\n parser.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`);\n }\n break;\n default:\n }\n switch (uri) {\n case XMLNS_NAMESPACE:\n parser.fail(prefix === \"\" ? `the default namespace may not be set to ${uri}.` : `may not assign a prefix (even \"xmlns\") to the URI \\\n${XMLNS_NAMESPACE}.`);\n break;\n case XML_NAMESPACE:\n switch (prefix) {\n case \"xml\":\n // Assinging the XML namespace to \"xml\" is fine.\n break;\n case \"\":\n parser.fail(`the default namespace may not be set to ${uri}.`);\n break;\n default:\n parser.fail(\"may not assign the xml namespace to another prefix.\");\n }\n break;\n default:\n }\n}\nfunction nsMappingCheck(parser, mapping) {\n for (const local of Object.keys(mapping)) {\n nsPairCheck(parser, local, mapping[local]);\n }\n}\nconst isNCName = name => NC_NAME_RE.test(name);\nconst isName = name => NAME_RE.test(name);\nconst FORBIDDEN_START = 0;\nconst FORBIDDEN_BRACKET = 1;\nconst FORBIDDEN_BRACKET_BRACKET = 2;\n/**\n * The list of supported events.\n */\nexports.EVENTS = [\"xmldecl\", \"text\", \"processinginstruction\", \"doctype\", \"comment\", \"opentagstart\", \"attribute\", \"opentag\", \"closetag\", \"cdata\", \"error\", \"end\", \"ready\"];\nconst EVENT_NAME_TO_HANDLER_NAME = {\n xmldecl: \"xmldeclHandler\",\n text: \"textHandler\",\n processinginstruction: \"piHandler\",\n doctype: \"doctypeHandler\",\n comment: \"commentHandler\",\n opentagstart: \"openTagStartHandler\",\n attribute: \"attributeHandler\",\n opentag: \"openTagHandler\",\n closetag: \"closeTagHandler\",\n cdata: \"cdataHandler\",\n error: \"errorHandler\",\n end: \"endHandler\",\n ready: \"readyHandler\"\n};\nclass SaxesParser {\n /**\n * @param opt The parser options.\n */\n constructor(opt) {\n this.opt = opt !== null && opt !== void 0 ? opt : {};\n this.fragmentOpt = !!this.opt.fragment;\n const xmlnsOpt = this.xmlnsOpt = !!this.opt.xmlns;\n this.trackPosition = this.opt.position !== false;\n this.fileName = this.opt.fileName;\n if (xmlnsOpt) {\n // This is the function we use to perform name checks on PIs and entities.\n // When namespaces are used, colons are not allowed in PI target names or\n // entity names. So the check depends on whether namespaces are used. See:\n //\n // https://www.w3.org/XML/xml-names-19990114-errata.html\n // NE08\n //\n this.nameStartCheck = isNCNameStartChar;\n this.nameCheck = isNCNameChar;\n this.isName = isNCName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsNS;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribNS;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.ns = Object.assign({\n __proto__: null\n }, rootNS);\n const additional = this.opt.additionalNamespaces;\n if (additional != null) {\n nsMappingCheck(this, additional);\n Object.assign(this.ns, additional);\n }\n } else {\n this.nameStartCheck = isNameStartChar;\n this.nameCheck = isNameChar;\n this.isName = isName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsPlain;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribPlain;\n }\n //\n // The order of the members in this table needs to correspond to the state\n // numbers given to the states that correspond to the methods being recorded\n // here.\n //\n this.stateTable = [/* eslint-disable @typescript-eslint/unbound-method */\n this.sBegin, this.sBeginWhitespace, this.sDoctype, this.sDoctypeQuote, this.sDTD, this.sDTDQuoted, this.sDTDOpenWaka, this.sDTDOpenWakaBang, this.sDTDComment, this.sDTDCommentEnding, this.sDTDCommentEnded, this.sDTDPI, this.sDTDPIEnding, this.sText, this.sEntity, this.sOpenWaka, this.sOpenWakaBang, this.sComment, this.sCommentEnding, this.sCommentEnded, this.sCData, this.sCDataEnding, this.sCDataEnding2, this.sPIFirstChar, this.sPIRest, this.sPIBody, this.sPIEnding, this.sXMLDeclNameStart, this.sXMLDeclName, this.sXMLDeclEq, this.sXMLDeclValueStart, this.sXMLDeclValue, this.sXMLDeclSeparator, this.sXMLDeclEnding, this.sOpenTag, this.sOpenTagSlash, this.sAttrib, this.sAttribName, this.sAttribNameSawWhite, this.sAttribValue, this.sAttribValueQuoted, this.sAttribValueClosed, this.sAttribValueUnquoted, this.sCloseTag, this.sCloseTagSawWhite];\n this._init();\n }\n /**\n * Indicates whether or not the parser is closed. If ``true``, wait for\n * the ``ready`` event to write again.\n */\n get closed() {\n return this._closed;\n }\n _init() {\n var _a;\n this.openWakaBang = \"\";\n this.text = \"\";\n this.name = \"\";\n this.piTarget = \"\";\n this.entity = \"\";\n this.q = null;\n this.tags = [];\n this.tag = null;\n this.topNS = null;\n this.chunk = \"\";\n this.chunkPosition = 0;\n this.i = 0;\n this.prevI = 0;\n this.carriedFromPrevious = undefined;\n this.forbiddenState = FORBIDDEN_START;\n this.attribList = [];\n // The logic is organized so as to minimize the need to check\n // this.opt.fragment while parsing.\n const {\n fragmentOpt\n } = this;\n this.state = fragmentOpt ? S_TEXT : S_BEGIN;\n // We want these to be all true if we are dealing with a fragment.\n this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot = this.sawRoot = fragmentOpt;\n // An XML declaration is intially possible only when parsing whole\n // documents.\n this.xmlDeclPossible = !fragmentOpt;\n this.xmlDeclExpects = [\"version\"];\n this.entityReturnState = undefined;\n let {\n defaultXMLVersion\n } = this.opt;\n if (defaultXMLVersion === undefined) {\n if (this.opt.forceXMLVersion === true) {\n throw new Error(\"forceXMLVersion set but defaultXMLVersion is not set\");\n }\n defaultXMLVersion = \"1.0\";\n }\n this.setXMLVersion(defaultXMLVersion);\n this.positionAtNewLine = 0;\n this.doctype = false;\n this._closed = false;\n this.xmlDecl = {\n version: undefined,\n encoding: undefined,\n standalone: undefined\n };\n this.line = 1;\n this.column = 0;\n this.ENTITIES = Object.create(XML_ENTITIES);\n // eslint-disable-next-line no-unused-expressions\n (_a = this.readyHandler) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n /**\n * The stream position the parser is currently looking at. This field is\n * zero-based.\n *\n * This field is not based on counting Unicode characters but is to be\n * interpreted as a plain index into a JavaScript string.\n */\n get position() {\n return this.chunkPosition + this.i;\n }\n /**\n * The column number of the next character to be read by the parser. *\n * This field is zero-based. (The first column in a line is 0.)\n *\n * This field reports the index at which the next character would be in the\n * line if the line were represented as a JavaScript string. Note that this\n * *can* be different to a count based on the number of *Unicode characters*\n * due to how JavaScript handles astral plane characters.\n *\n * See [[column]] for a number that corresponds to a count of Unicode\n * characters.\n */\n get columnIndex() {\n return this.position - this.positionAtNewLine;\n }\n /**\n * Set an event listener on an event. The parser supports one handler per\n * event type. If you try to set an event handler over an existing handler,\n * the old handler is silently overwritten.\n *\n * @param name The event to listen to.\n *\n * @param handler The handler to set.\n */\n on(name, handler) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = handler;\n }\n /**\n * Unset an event handler.\n *\n * @parma name The event to stop listening to.\n */\n off(name) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = undefined;\n }\n /**\n * Make an error object. The error object will have a message that contains\n * the ``fileName`` option passed at the creation of the parser. If position\n * tracking was turned on, it will also have line and column number\n * information.\n *\n * @param message The message describing the error to report.\n *\n * @returns An error object with a properly formatted message.\n */\n makeError(message) {\n var _a;\n let msg = (_a = this.fileName) !== null && _a !== void 0 ? _a : \"\";\n if (this.trackPosition) {\n if (msg.length > 0) {\n msg += \":\";\n }\n msg += `${this.line}:${this.column}`;\n }\n if (msg.length > 0) {\n msg += \": \";\n }\n return new Error(msg + message);\n }\n /**\n * Report a parsing error. This method is made public so that client code may\n * check for issues that are outside the scope of this project and can report\n * errors.\n *\n * @param message The error to report.\n *\n * @returns this\n */\n fail(message) {\n const err = this.makeError(message);\n const handler = this.errorHandler;\n if (handler === undefined) {\n throw err;\n } else {\n handler(err);\n }\n return this;\n }\n /**\n * Write a XML data to the parser.\n *\n * @param chunk The XML data to write.\n *\n * @returns this\n */\n write(chunk) {\n if (this.closed) {\n return this.fail(\"cannot write after close; assign an onready handler.\");\n }\n let end = false;\n if (chunk === null) {\n // We cannot return immediately because carriedFromPrevious may need\n // processing.\n end = true;\n chunk = \"\";\n } else if (typeof chunk === \"object\") {\n chunk = chunk.toString();\n }\n // We checked if performing a pre-decomposition of the string into an array\n // of single complete characters (``Array.from(chunk)``) would be faster\n // than the current repeated calls to ``charCodeAt``. As of August 2018, it\n // isn't. (There may be Node-specific code that would perform faster than\n // ``Array.from`` but don't want to be dependent on Node.)\n if (this.carriedFromPrevious !== undefined) {\n // The previous chunk had char we must carry over.\n chunk = `${this.carriedFromPrevious}${chunk}`;\n this.carriedFromPrevious = undefined;\n }\n let limit = chunk.length;\n const lastCode = chunk.charCodeAt(limit - 1);\n if (!end && (\n // A trailing CR or surrogate must be carried over to the next\n // chunk.\n lastCode === CR || lastCode >= 0xD800 && lastCode <= 0xDBFF)) {\n // The chunk ends with a character that must be carried over. We cannot\n // know how to handle it until we get the next chunk or the end of the\n // stream. So save it for later.\n this.carriedFromPrevious = chunk[limit - 1];\n limit--;\n chunk = chunk.slice(0, limit);\n }\n const {\n stateTable\n } = this;\n this.chunk = chunk;\n this.i = 0;\n while (this.i < limit) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stateTable[this.state].call(this);\n }\n this.chunkPosition += limit;\n return end ? this.end() : this;\n }\n /**\n * Close the current stream. Perform final well-formedness checks and reset\n * the parser tstate.\n *\n * @returns this\n */\n close() {\n return this.write(null);\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.0.\n *\n * @returns The character read.\n */\n getCode10() {\n const {\n chunk,\n i\n } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if (code >= SPACE || code === TAB) {\n return code;\n }\n switch (code) {\n case NL:\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR:\n // We may get NaN if we read past the end of the chunk, which is fine.\n if (chunk.charCodeAt(i + 1) === NL) {\n // A \\r\\n sequence is converted to \\n so we have to skip over the\n // next character. We already know it has a size of 1 so ++ is fine\n // here.\n this.i = i + 2;\n }\n // Otherwise, a \\r is just converted to \\n, so we don't have to skip\n // ahead.\n // In either case, \\r becomes \\n.\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n // If we get here, then code < SPACE and it is not NL CR or TAB.\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isChar10 that takes into account\n // that in this context code > 0xDBFF and code <= 0xFFFF. So it does not\n // test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isChar10 that takes into account that in\n // this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.1.\n *\n * @returns {number} The character read.\n */\n getCode11() {\n const {\n chunk,\n i\n } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if (code > 0x1F && code < 0x7F || code > 0x9F && code !== LS || code === TAB) {\n return code;\n }\n switch (code) {\n case NL:\n // 0xA\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR:\n {\n // 0xD\n // We may get NaN if we read past the end of the chunk, which is\n // fine.\n const next = chunk.charCodeAt(i + 1);\n if (next === NL || next === NEL) {\n // A CR NL or CR NEL sequence is converted to NL so we have to skip\n // over the next character. We already know it has a size of 1.\n this.i = i + 2;\n }\n // Otherwise, a CR is just converted to NL, no skip.\n }\n /* yes, fall through */\n case NEL: // 0x85\n case LS:\n // Ox2028\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context code > 0xDBFF and code <= 0xFFFF. So it\n // does not test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Like ``getCode`` but with the return value normalized so that ``NL`` is\n * returned for ``NL_LIKE``.\n */\n getCodeNorm() {\n const c = this.getCode();\n return c === NL_LIKE ? NL : c;\n }\n unget() {\n this.i = this.prevI;\n this.column--;\n }\n /**\n * Capture characters into a buffer until encountering one of a set of\n * characters.\n *\n * @param chars An array of codepoints. Encountering a character in the array\n * ends the capture. (``chars`` may safely contain ``NL``.)\n *\n * @return The character code that made the capture end, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureTo(chars) {\n let {\n i: start\n } = this;\n const {\n chunk\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n const isNLLike = c === NL_LIKE;\n const final = isNLLike ? NL : c;\n if (final === EOC || chars.includes(final)) {\n this.text += chunk.slice(start, this.prevI);\n return final;\n }\n if (isNLLike) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n }\n }\n }\n /**\n * Capture characters into a buffer until encountering a character.\n *\n * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT\n * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior.\n *\n * @return ``true`` if we ran into the character. Otherwise, we ran into the\n * end of the current chunk.\n */\n captureToChar(char) {\n let {\n i: start\n } = this;\n const {\n chunk\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let c = this.getCode();\n switch (c) {\n case NL_LIKE:\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n c = NL;\n break;\n case EOC:\n this.text += chunk.slice(start);\n return false;\n default:\n }\n if (c === char) {\n this.text += chunk.slice(start, this.prevI);\n return true;\n }\n }\n }\n /**\n * Capture characters that satisfy ``isNameChar`` into the ``name`` field of\n * this parser.\n *\n * @return The character code that made the test fail, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureNameChars() {\n const {\n chunk,\n i: start\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n if (c === EOC) {\n this.name += chunk.slice(start);\n return EOC;\n }\n // NL is not a name char so we don't have to test specifically for it.\n if (!isNameChar(c)) {\n this.name += chunk.slice(start, this.prevI);\n return c === NL_LIKE ? NL : c;\n }\n }\n }\n /**\n * Skip white spaces.\n *\n * @return The character that ended the skip, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n skipSpaces() {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC || !isS(c)) {\n return c;\n }\n }\n }\n setXMLVersion(version) {\n this.currentXMLVersion = version;\n /* eslint-disable @typescript-eslint/unbound-method */\n if (version === \"1.0\") {\n this.isChar = isChar10;\n this.getCode = this.getCode10;\n } else {\n this.isChar = isChar11;\n this.getCode = this.getCode11;\n }\n /* eslint-enable @typescript-eslint/unbound-method */\n }\n // STATE ENGINE METHODS\n // This needs to be a state separate from S_BEGIN_WHITESPACE because we want\n // to be sure never to come back to this state later.\n sBegin() {\n // We are essentially peeking at the first character of the chunk. Since\n // S_BEGIN can be in effect only when we start working on the first chunk,\n // the index at which we must look is necessarily 0. Note also that the\n // following test does not depend on decoding surrogates.\n // If the initial character is 0xFEFF, ignore it.\n if (this.chunk.charCodeAt(0) === 0xFEFF) {\n this.i++;\n this.column++;\n }\n this.state = S_BEGIN_WHITESPACE;\n }\n sBeginWhitespace() {\n // We need to know whether we've encountered spaces or not because as soon\n // as we run into a space, an XML declaration is no longer possible. Rather\n // than slow down skipSpaces even in places where we don't care whether it\n // skipped anything or not, we check whether prevI is equal to the value of\n // i from before we skip spaces.\n const iBefore = this.i;\n const c = this.skipSpaces();\n if (this.prevI !== iBefore) {\n this.xmlDeclPossible = false;\n }\n switch (c) {\n case LESS:\n this.state = S_OPEN_WAKA;\n // We could naively call closeText but in this state, it is not normal\n // to have text be filled with any data.\n if (this.text.length !== 0) {\n throw new Error(\"no-empty text at start\");\n }\n break;\n case EOC:\n break;\n default:\n this.unget();\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n sDoctype() {\n var _a;\n const c = this.captureTo(DOCTYPE_TERMINATOR);\n switch (c) {\n case GREATER:\n {\n // eslint-disable-next-line no-unused-expressions\n (_a = this.doctypeHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n this.doctype = true; // just remember that we saw it.\n break;\n }\n case EOC:\n break;\n default:\n this.text += String.fromCodePoint(c);\n if (c === OPEN_BRACKET) {\n this.state = S_DTD;\n } else if (isQuote(c)) {\n this.state = S_DOCTYPE_QUOTE;\n this.q = c;\n }\n }\n }\n sDoctypeQuote() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.q = null;\n this.state = S_DOCTYPE;\n }\n }\n sDTD() {\n const c = this.captureTo(DTD_TERMINATOR);\n if (c === EOC) {\n return;\n }\n this.text += String.fromCodePoint(c);\n if (c === CLOSE_BRACKET) {\n this.state = S_DOCTYPE;\n } else if (c === LESS) {\n this.state = S_DTD_OPEN_WAKA;\n } else if (isQuote(c)) {\n this.state = S_DTD_QUOTED;\n this.q = c;\n }\n }\n sDTDQuoted() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.state = S_DTD;\n this.q = null;\n }\n }\n sDTDOpenWaka() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n switch (c) {\n case BANG:\n this.state = S_DTD_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n break;\n case QUESTION:\n this.state = S_DTD_PI;\n break;\n default:\n this.state = S_DTD;\n }\n }\n sDTDOpenWakaBang() {\n const char = String.fromCodePoint(this.getCodeNorm());\n const owb = this.openWakaBang += char;\n this.text += char;\n if (owb !== \"-\") {\n this.state = owb === \"--\" ? S_DTD_COMMENT : S_DTD;\n this.openWakaBang = \"\";\n }\n }\n sDTDComment() {\n if (this.captureToChar(MINUS)) {\n this.text += \"-\";\n this.state = S_DTD_COMMENT_ENDING;\n }\n }\n sDTDCommentEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT;\n }\n sDTDCommentEnded() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n } else {\n this.fail(\"malformed comment.\");\n // will be recorded as\n // a comment of \" blah -- bloo \"\n this.state = S_DTD_COMMENT;\n }\n }\n sDTDPI() {\n if (this.captureToChar(QUESTION)) {\n this.text += \"?\";\n this.state = S_DTD_PI_ENDING;\n }\n }\n sDTDPIEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n }\n }\n sText() {\n //\n // We did try a version of saxes where the S_TEXT state was split in two\n // states: one for text inside the root element, and one for text\n // outside. This was avoiding having to test this.tags.length to decide\n // what implementation to actually use.\n //\n // Peformance testing on gigabyte-size files did not show any advantage to\n // using the two states solution instead of the current one. Conversely, it\n // made the code a bit more complicated elsewhere. For instance, a comment\n // can appear before the root element so when a comment ended it was\n // necessary to determine whether to return to the S_TEXT state or to the\n // new text-outside-root state.\n //\n if (this.tags.length !== 0) {\n this.handleTextInRoot();\n } else {\n this.handleTextOutsideRoot();\n }\n }\n sEntity() {\n // This is essentially a specialized version of captureToChar(SEMICOLON...)\n let {\n i: start\n } = this;\n const {\n chunk\n } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n loop:\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case NL_LIKE:\n this.entity += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n break;\n case SEMICOLON:\n {\n const {\n entityReturnState\n } = this;\n const entity = this.entity + chunk.slice(start, this.prevI);\n this.state = entityReturnState;\n let parsed;\n if (entity === \"\") {\n this.fail(\"empty entity name.\");\n parsed = \"&;\";\n } else {\n parsed = this.parseEntity(entity);\n this.entity = \"\";\n }\n if (entityReturnState !== S_TEXT || this.textHandler !== undefined) {\n this.text += parsed;\n }\n // eslint-disable-next-line no-labels\n break loop;\n }\n case EOC:\n this.entity += chunk.slice(start);\n // eslint-disable-next-line no-labels\n break loop;\n default:\n }\n }\n }\n sOpenWaka() {\n // Reminder: a state handler is called with at least one character\n // available in the current chunk. So the first call to get code inside of\n // a state handler cannot return ``EOC``. That's why we don't test\n // for it.\n const c = this.getCode();\n // either a /, ?, !, or text is coming next.\n if (isNameStartChar(c)) {\n this.state = S_OPEN_TAG;\n this.unget();\n this.xmlDeclPossible = false;\n } else {\n switch (c) {\n case FORWARD_SLASH:\n this.state = S_CLOSE_TAG;\n this.xmlDeclPossible = false;\n break;\n case BANG:\n this.state = S_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n this.xmlDeclPossible = false;\n break;\n case QUESTION:\n this.state = S_PI_FIRST_CHAR;\n break;\n default:\n this.fail(\"disallowed character in tag name\");\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n }\n sOpenWakaBang() {\n this.openWakaBang += String.fromCodePoint(this.getCodeNorm());\n switch (this.openWakaBang) {\n case \"[CDATA[\":\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n this.state = S_CDATA;\n this.openWakaBang = \"\";\n break;\n case \"--\":\n this.state = S_COMMENT;\n this.openWakaBang = \"\";\n break;\n case \"DOCTYPE\":\n this.state = S_DOCTYPE;\n if (this.doctype || this.sawRoot) {\n this.fail(\"inappropriately located doctype declaration.\");\n }\n this.openWakaBang = \"\";\n break;\n default:\n // 7 happens to be the maximum length of the string that can possibly\n // match one of the cases above.\n if (this.openWakaBang.length >= 7) {\n this.fail(\"incorrect syntax.\");\n }\n }\n }\n sComment() {\n if (this.captureToChar(MINUS)) {\n this.state = S_COMMENT_ENDING;\n }\n }\n sCommentEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === MINUS) {\n this.state = S_COMMENT_ENDED;\n // eslint-disable-next-line no-unused-expressions\n (_a = this.commentHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n } else {\n this.text += `-${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n }\n }\n sCommentEnded() {\n const c = this.getCodeNorm();\n if (c !== GREATER) {\n this.fail(\"malformed comment.\");\n // will be recorded as\n // a comment of \" blah -- bloo \"\n this.text += `--${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n } else {\n this.state = S_TEXT;\n }\n }\n sCData() {\n if (this.captureToChar(CLOSE_BRACKET)) {\n this.state = S_CDATA_ENDING;\n }\n }\n sCDataEnding() {\n const c = this.getCodeNorm();\n if (c === CLOSE_BRACKET) {\n this.state = S_CDATA_ENDING_2;\n } else {\n this.text += `]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n sCDataEnding2() {\n var _a;\n const c = this.getCodeNorm();\n switch (c) {\n case GREATER:\n {\n // eslint-disable-next-line no-unused-expressions\n (_a = this.cdataHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n break;\n }\n case CLOSE_BRACKET:\n this.text += \"]\";\n break;\n default:\n this.text += `]]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n // We need this separate state to check the first character fo the pi target\n // with this.nameStartCheck which allows less characters than this.nameCheck.\n sPIFirstChar() {\n const c = this.getCodeNorm();\n // This is first because in the case where the file is well-formed this is\n // the branch taken. We optimize for well-formedness.\n if (this.nameStartCheck(c)) {\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n } else if (c === QUESTION || isS(c)) {\n this.fail(\"processing instruction without a target.\");\n this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY;\n } else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n }\n }\n sPIRest() {\n // Capture characters into a piTarget while ``this.nameCheck`` run on the\n // character read returns true.\n const {\n chunk,\n i: start\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC) {\n this.piTarget += chunk.slice(start);\n return;\n }\n // NL cannot satisfy this.nameCheck so we don't have to test specifically\n // for it.\n if (!this.nameCheck(c)) {\n this.piTarget += chunk.slice(start, this.prevI);\n const isQuestion = c === QUESTION;\n if (isQuestion || isS(c)) {\n if (this.piTarget === \"xml\") {\n if (!this.xmlDeclPossible) {\n this.fail(\"an XML declaration must be at the start of the document.\");\n }\n this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START;\n } else {\n this.state = isQuestion ? S_PI_ENDING : S_PI_BODY;\n }\n } else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n }\n break;\n }\n }\n }\n sPIBody() {\n if (this.text.length === 0) {\n const c = this.getCodeNorm();\n if (c === QUESTION) {\n this.state = S_PI_ENDING;\n } else if (!isS(c)) {\n this.text = String.fromCodePoint(c);\n }\n }\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n else if (this.captureToChar(QUESTION)) {\n this.state = S_PI_ENDING;\n }\n }\n sPIEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n const {\n piTarget\n } = this;\n if (piTarget.toLowerCase() === \"xml\") {\n this.fail(\"the XML declaration must appear at the start of the document.\");\n }\n // eslint-disable-next-line no-unused-expressions\n (_a = this.piHandler) === null || _a === void 0 ? void 0 : _a.call(this, {\n target: piTarget,\n body: this.text\n });\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n } else if (c === QUESTION) {\n // We ran into ?? as part of a processing instruction. We initially took\n // the first ? as a sign that the PI was ending, but it is not. So we have\n // to add it to the body but we take the new ? as a sign that the PI is\n // ending.\n this.text += \"?\";\n } else {\n this.text += `?${String.fromCodePoint(c)}`;\n this.state = S_PI_BODY;\n }\n this.xmlDeclPossible = false;\n }\n sXMLDeclNameStart() {\n const c = this.skipSpaces();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (c !== EOC) {\n this.state = S_XML_DECL_NAME;\n this.name = String.fromCodePoint(c);\n }\n }\n sXMLDeclName() {\n const c = this.captureTo(XML_DECL_NAME_TERMINATOR);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.name += this.text;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (!(isS(c) || c === EQUAL)) {\n return;\n }\n this.name += this.text;\n this.text = \"\";\n if (!this.xmlDeclExpects.includes(this.name)) {\n switch (this.name.length) {\n case 0:\n this.fail(\"did not expect any more name/value pairs.\");\n break;\n case 1:\n this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);\n break;\n default:\n this.fail(`expected one of ${this.xmlDeclExpects.join(\", \")}`);\n }\n }\n this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ;\n }\n sXMLDeclEq() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (c !== EQUAL) {\n this.fail(\"value required.\");\n }\n this.state = S_XML_DECL_VALUE_START;\n }\n sXMLDeclValueStart() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (!isQuote(c)) {\n this.fail(\"value must be quoted.\");\n this.q = SPACE;\n } else {\n this.q = c;\n }\n this.state = S_XML_DECL_VALUE;\n }\n sXMLDeclValue() {\n const c = this.captureTo([this.q, QUESTION]);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (c === EOC) {\n return;\n }\n const value = this.text;\n this.text = \"\";\n switch (this.name) {\n case \"version\":\n {\n this.xmlDeclExpects = [\"encoding\", \"standalone\"];\n const version = value;\n this.xmlDecl.version = version;\n // This is the test specified by XML 1.0 but it is fine for XML 1.1.\n if (!/^1\\.[0-9]+$/.test(version)) {\n this.fail(\"version number must match /^1\\\\.[0-9]+$/.\");\n }\n // When forceXMLVersion is set, the XML declaration is ignored.\n else if (!this.opt.forceXMLVersion) {\n this.setXMLVersion(version);\n }\n break;\n }\n case \"encoding\":\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) {\n this.fail(\"encoding value must match \\\n/^[A-Za-z0-9][A-Za-z0-9._-]*$/.\");\n }\n this.xmlDeclExpects = [\"standalone\"];\n this.xmlDecl.encoding = value;\n break;\n case \"standalone\":\n if (value !== \"yes\" && value !== \"no\") {\n this.fail(\"standalone value must match \\\"yes\\\" or \\\"no\\\".\");\n }\n this.xmlDeclExpects = [];\n this.xmlDecl.standalone = value;\n break;\n default:\n // We don't need to raise an error here since we've already raised one\n // when checking what name was expected.\n }\n\n this.name = \"\";\n this.state = S_XML_DECL_SEPARATOR;\n }\n sXMLDeclSeparator() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (!isS(c)) {\n this.fail(\"whitespace required.\");\n this.unget();\n }\n this.state = S_XML_DECL_NAME_START;\n }\n sXMLDeclEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n if (this.piTarget !== \"xml\") {\n this.fail(\"processing instructions are not allowed before root.\");\n } else if (this.name !== \"version\" && this.xmlDeclExpects.includes(\"version\")) {\n this.fail(\"XML declaration must contain a version.\");\n }\n // eslint-disable-next-line no-unused-expressions\n (_a = this.xmldeclHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.xmlDecl);\n this.name = \"\";\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n } else {\n // We got here because the previous character was a ?, but the question\n // mark character is not valid inside any of the XML declaration\n // name/value pairs.\n this.fail(\"The character ? is disallowed anywhere in XML declarations.\");\n }\n this.xmlDeclPossible = false;\n }\n sOpenTag() {\n var _a;\n const c = this.captureNameChars();\n if (c === EOC) {\n return;\n }\n const tag = this.tag = {\n name: this.name,\n attributes: Object.create(null)\n };\n this.name = \"\";\n if (this.xmlnsOpt) {\n this.topNS = tag.ns = Object.create(null);\n }\n // eslint-disable-next-line no-unused-expressions\n (_a = this.openTagStartHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n this.sawRoot = true;\n if (!this.fragmentOpt && this.closedRoot) {\n this.fail(\"documents may contain only one root.\");\n }\n switch (c) {\n case GREATER:\n this.openTag();\n break;\n case FORWARD_SLASH:\n this.state = S_OPEN_TAG_SLASH;\n break;\n default:\n if (!isS(c)) {\n this.fail(\"disallowed character in tag name.\");\n }\n this.state = S_ATTRIB;\n }\n }\n sOpenTagSlash() {\n if (this.getCode() === GREATER) {\n this.openSelfClosingTag();\n } else {\n this.fail(\"forward-slash in opening tag not followed by >.\");\n this.state = S_ATTRIB;\n }\n }\n sAttrib() {\n const c = this.skipSpaces();\n if (c === EOC) {\n return;\n }\n if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n } else if (c === GREATER) {\n this.openTag();\n } else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n } else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribName() {\n const c = this.captureNameChars();\n if (c === EQUAL) {\n this.state = S_ATTRIB_VALUE;\n } else if (isS(c)) {\n this.state = S_ATTRIB_NAME_SAW_WHITE;\n } else if (c === GREATER) {\n this.fail(\"attribute without value.\");\n this.pushAttrib(this.name, this.name);\n this.name = this.text = \"\";\n this.openTag();\n } else if (c !== EOC) {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribNameSawWhite() {\n const c = this.skipSpaces();\n switch (c) {\n case EOC:\n return;\n case EQUAL:\n this.state = S_ATTRIB_VALUE;\n break;\n default:\n this.fail(\"attribute without value.\");\n // Should we do this???\n // this.tag.attributes[this.name] = \"\";\n this.text = \"\";\n this.name = \"\";\n if (c === GREATER) {\n this.openTag();\n } else if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n } else {\n this.fail(\"disallowed character in attribute name.\");\n this.state = S_ATTRIB;\n }\n }\n }\n sAttribValue() {\n const c = this.getCodeNorm();\n if (isQuote(c)) {\n this.q = c;\n this.state = S_ATTRIB_VALUE_QUOTED;\n } else if (!isS(c)) {\n this.fail(\"unquoted attribute value.\");\n this.state = S_ATTRIB_VALUE_UNQUOTED;\n this.unget();\n }\n }\n sAttribValueQuoted() {\n // We deliberately do not use captureTo here. The specialized code we use\n // here is faster than using captureTo.\n const {\n q,\n chunk\n } = this;\n let {\n i: start\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case q:\n this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI));\n this.name = this.text = \"\";\n this.q = null;\n this.state = S_ATTRIB_VALUE_CLOSED;\n return;\n case AMP:\n this.text += chunk.slice(start, this.prevI);\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_QUOTED;\n return;\n case NL:\n case NL_LIKE:\n case TAB:\n this.text += `${chunk.slice(start, this.prevI)} `;\n start = this.i;\n break;\n case LESS:\n this.text += chunk.slice(start, this.prevI);\n this.fail(\"disallowed character.\");\n return;\n case EOC:\n this.text += chunk.slice(start);\n return;\n default:\n }\n }\n }\n sAttribValueClosed() {\n const c = this.getCodeNorm();\n if (isS(c)) {\n this.state = S_ATTRIB;\n } else if (c === GREATER) {\n this.openTag();\n } else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n } else if (isNameStartChar(c)) {\n this.fail(\"no whitespace between attributes.\");\n this.unget();\n this.state = S_ATTRIB_NAME;\n } else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribValueUnquoted() {\n // We don't do anything regarding EOL or space handling for unquoted\n // attributes. We already have failed by the time we get here, and the\n // contract that saxes upholds states that upon failure, it is not safe to\n // rely on the data passed to event handlers (other than\n // ``onerror``). Passing \"bad\" data is not a problem.\n const c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);\n switch (c) {\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED;\n break;\n case LESS:\n this.fail(\"disallowed character.\");\n break;\n case EOC:\n break;\n default:\n if (this.text.includes(\"]]>\")) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n this.pushAttrib(this.name, this.text);\n this.name = this.text = \"\";\n if (c === GREATER) {\n this.openTag();\n } else {\n this.state = S_ATTRIB;\n }\n }\n }\n sCloseTag() {\n const c = this.captureNameChars();\n if (c === GREATER) {\n this.closeTag();\n } else if (isS(c)) {\n this.state = S_CLOSE_TAG_SAW_WHITE;\n } else if (c !== EOC) {\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n sCloseTagSawWhite() {\n switch (this.skipSpaces()) {\n case GREATER:\n this.closeTag();\n break;\n case EOC:\n break;\n default:\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n // END OF STATE ENGINE METHODS\n handleTextInRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for performing the ]]> check. A previous version of this code, checked\n // ``this.text`` for the presence of ]]>. It simplified the code but was\n // very costly when character data contained a lot of entities to be parsed.\n //\n // Since we are using a specialized loop, we also keep track of the presence\n // of ]]> in text data. The sequence ]]> is forbidden to appear as-is.\n //\n let {\n i: start,\n forbiddenState\n } = this;\n const {\n chunk,\n textHandler: handler\n } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n scanLoop:\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case LESS:\n {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const {\n text\n } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n } else if (slice.length !== 0) {\n handler(slice);\n }\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n case CLOSE_BRACKET:\n switch (forbiddenState) {\n case FORBIDDEN_START:\n forbiddenState = FORBIDDEN_BRACKET;\n break;\n case FORBIDDEN_BRACKET:\n forbiddenState = FORBIDDEN_BRACKET_BRACKET;\n break;\n case FORBIDDEN_BRACKET_BRACKET:\n break;\n default:\n throw new Error(\"impossible state\");\n }\n break;\n case GREATER:\n if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n forbiddenState = FORBIDDEN_START;\n break;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n forbiddenState = FORBIDDEN_START;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break scanLoop;\n default:\n forbiddenState = FORBIDDEN_START;\n }\n }\n this.forbiddenState = forbiddenState;\n }\n handleTextOutsideRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for a specialized task. We keep track of the presence of non-space\n // characters in the text since these are errors when appearing outside the\n // document root element.\n let {\n i: start\n } = this;\n const {\n chunk,\n textHandler: handler\n } = this;\n let nonSpace = false;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n outRootLoop:\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const code = this.getCode();\n switch (code) {\n case LESS:\n {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const {\n text\n } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n } else if (slice.length !== 0) {\n handler(slice);\n }\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n nonSpace = true;\n // eslint-disable-next-line no-labels\n break outRootLoop;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n default:\n if (!isS(code)) {\n nonSpace = true;\n }\n }\n }\n if (!nonSpace) {\n return;\n }\n // We use the reportedTextBeforeRoot and reportedTextAfterRoot flags\n // to avoid reporting errors for every single character that is out of\n // place.\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n }\n pushAttribNS(name, value) {\n var _a;\n const {\n prefix,\n local\n } = this.qname(name);\n const attr = {\n name,\n prefix,\n local,\n value\n };\n this.attribList.push(attr);\n // eslint-disable-next-line no-unused-expressions\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n if (prefix === \"xmlns\") {\n const trimmed = value.trim();\n if (this.currentXMLVersion === \"1.0\" && trimmed === \"\") {\n this.fail(\"invalid attempt to undefine prefix in XML 1.0\");\n }\n this.topNS[local] = trimmed;\n nsPairCheck(this, local, trimmed);\n } else if (name === \"xmlns\") {\n const trimmed = value.trim();\n this.topNS[\"\"] = trimmed;\n nsPairCheck(this, \"\", trimmed);\n }\n }\n pushAttribPlain(name, value) {\n var _a;\n const attr = {\n name,\n value\n };\n this.attribList.push(attr);\n // eslint-disable-next-line no-unused-expressions\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n }\n /**\n * End parsing. This performs final well-formedness checks and resets the\n * parser to a clean state.\n *\n * @returns this\n */\n end() {\n var _a, _b;\n if (!this.sawRoot) {\n this.fail(\"document must contain a root element.\");\n }\n const {\n tags\n } = this;\n while (tags.length > 0) {\n const tag = tags.pop();\n this.fail(`unclosed tag: ${tag.name}`);\n }\n if (this.state !== S_BEGIN && this.state !== S_TEXT) {\n this.fail(\"unexpected end.\");\n }\n const {\n text\n } = this;\n if (text.length !== 0) {\n // eslint-disable-next-line no-unused-expressions\n (_a = this.textHandler) === null || _a === void 0 ? void 0 : _a.call(this, text);\n this.text = \"\";\n }\n this._closed = true;\n // eslint-disable-next-line no-unused-expressions\n (_b = this.endHandler) === null || _b === void 0 ? void 0 : _b.call(this);\n this._init();\n return this;\n }\n /**\n * Resolve a namespace prefix.\n *\n * @param prefix The prefix to resolve.\n *\n * @returns The namespace URI or ``undefined`` if the prefix is not defined.\n */\n resolve(prefix) {\n var _a, _b;\n let uri = this.topNS[prefix];\n if (uri !== undefined) {\n return uri;\n }\n const {\n tags\n } = this;\n for (let index = tags.length - 1; index >= 0; index--) {\n uri = tags[index].ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n }\n uri = this.ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n return (_b = (_a = this.opt).resolvePrefix) === null || _b === void 0 ? void 0 : _b.call(_a, prefix);\n }\n /**\n * Parse a qname into its prefix and local name parts.\n *\n * @param name The name to parse\n *\n * @returns\n */\n qname(name) {\n // This is faster than using name.split(\":\").\n const colon = name.indexOf(\":\");\n if (colon === -1) {\n return {\n prefix: \"\",\n local: name\n };\n }\n const local = name.slice(colon + 1);\n const prefix = name.slice(0, colon);\n if (prefix === \"\" || local === \"\" || local.includes(\":\")) {\n this.fail(`malformed name: ${name}.`);\n }\n return {\n prefix,\n local\n };\n }\n processAttribsNS() {\n var _a;\n const {\n attribList\n } = this;\n const tag = this.tag;\n {\n // add namespace info to tag\n const {\n prefix,\n local\n } = this.qname(tag.name);\n tag.prefix = prefix;\n tag.local = local;\n const uri = tag.uri = (_a = this.resolve(prefix)) !== null && _a !== void 0 ? _a : \"\";\n if (prefix !== \"\") {\n if (prefix === \"xmlns\") {\n this.fail(\"tags may not have \\\"xmlns\\\" as prefix.\");\n }\n if (uri === \"\") {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n tag.uri = prefix;\n }\n }\n }\n if (attribList.length === 0) {\n return;\n }\n const {\n attributes\n } = tag;\n const seen = new Set();\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (const attr of attribList) {\n const {\n name,\n prefix,\n local\n } = attr;\n let uri;\n let eqname;\n if (prefix === \"\") {\n uri = name === \"xmlns\" ? XMLNS_NAMESPACE : \"\";\n eqname = name;\n } else {\n uri = this.resolve(prefix);\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (uri === undefined) {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n uri = prefix;\n }\n eqname = `{${uri}}${local}`;\n }\n if (seen.has(eqname)) {\n this.fail(`duplicate attribute: ${eqname}.`);\n }\n seen.add(eqname);\n attr.uri = uri;\n attributes[name] = attr;\n }\n this.attribList = [];\n }\n processAttribsPlain() {\n const {\n attribList\n } = this;\n // eslint-disable-next-line prefer-destructuring\n const attributes = this.tag.attributes;\n for (const {\n name,\n value\n } of attribList) {\n if (attributes[name] !== undefined) {\n this.fail(`duplicate attribute: ${name}.`);\n }\n attributes[name] = value;\n }\n this.attribList = [];\n }\n /**\n * Handle a complete open tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onopentag``.\n */\n openTag() {\n var _a;\n this.processAttribs();\n const {\n tags\n } = this;\n const tag = this.tag;\n tag.isSelfClosing = false;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n // eslint-disable-next-line no-unused-expressions\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n tags.push(tag);\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete self-closing tag. This parser code calls this once it has\n * seen the whole tag. This method checks for well-formeness and then emits\n * ``onopentag`` and ``onclosetag``.\n */\n openSelfClosingTag() {\n var _a, _b, _c;\n this.processAttribs();\n const {\n tags\n } = this;\n const tag = this.tag;\n tag.isSelfClosing = true;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n // eslint-disable-next-line no-unused-expressions\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n // eslint-disable-next-line no-unused-expressions\n (_b = this.closeTagHandler) === null || _b === void 0 ? void 0 : _b.call(this, tag);\n const top = this.tag = (_c = tags[tags.length - 1]) !== null && _c !== void 0 ? _c : null;\n if (top === null) {\n this.closedRoot = true;\n }\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete close tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onclosetag``.\n */\n closeTag() {\n const {\n tags,\n name\n } = this;\n // Our state after this will be S_TEXT, no matter what, and we can clear\n // tagName now.\n this.state = S_TEXT;\n this.name = \"\";\n if (name === \"\") {\n this.fail(\"weird empty close tag.\");\n this.text += \"\";\n return;\n }\n const handler = this.closeTagHandler;\n let l = tags.length;\n while (l-- > 0) {\n const tag = this.tag = tags.pop();\n this.topNS = tag.ns;\n // eslint-disable-next-line no-unused-expressions\n handler === null || handler === void 0 ? void 0 : handler(tag);\n if (tag.name === name) {\n break;\n }\n this.fail(\"unexpected close tag.\");\n }\n if (l === 0) {\n this.closedRoot = true;\n } else if (l < 0) {\n this.fail(`unmatched closing tag: ${name}.`);\n this.text += ``;\n }\n }\n /**\n * Resolves an entity. Makes any necessary well-formedness checks.\n *\n * @param entity The entity to resolve.\n *\n * @returns The parsed entity.\n */\n parseEntity(entity) {\n // startsWith would be significantly slower for this test.\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (entity[0] !== \"#\") {\n const defined = this.ENTITIES[entity];\n if (defined !== undefined) {\n return defined;\n }\n this.fail(this.isName(entity) ? \"undefined entity.\" : \"disallowed character in entity name.\");\n return `&${entity};`;\n }\n let num = NaN;\n if (entity[1] === \"x\" && /^#x[0-9a-f]+$/i.test(entity)) {\n num = parseInt(entity.slice(2), 16);\n } else if (/^#[0-9]+$/.test(entity)) {\n num = parseInt(entity.slice(1), 10);\n }\n // The character reference is required to match the CHAR production.\n if (!this.isChar(num)) {\n this.fail(\"malformed character entity.\");\n return `&${entity};`;\n }\n return String.fromCodePoint(num);\n }\n}\nexports.SaxesParser = SaxesParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlZDUiLCJyZXF1aXJlIiwiZWQyIiwiTlNlZDMiLCJpc1MiLCJpc0NoYXIxMCIsImlzQ2hhciIsImlzTmFtZVN0YXJ0Q2hhciIsImlzTmFtZUNoYXIiLCJTX0xJU1QiLCJOQU1FX1JFIiwiaXNDaGFyMTEiLCJpc05DTmFtZVN0YXJ0Q2hhciIsImlzTkNOYW1lQ2hhciIsIk5DX05BTUVfUkUiLCJYTUxfTkFNRVNQQUNFIiwiWE1MTlNfTkFNRVNQQUNFIiwicm9vdE5TIiwiX19wcm90b19fIiwieG1sIiwieG1sbnMiLCJYTUxfRU5USVRJRVMiLCJhbXAiLCJndCIsImx0IiwicXVvdCIsImFwb3MiLCJFT0MiLCJOTF9MSUtFIiwiU19CRUdJTiIsIlNfQkVHSU5fV0hJVEVTUEFDRSIsIlNfRE9DVFlQRSIsIlNfRE9DVFlQRV9RVU9URSIsIlNfRFREIiwiU19EVERfUVVPVEVEIiwiU19EVERfT1BFTl9XQUtBIiwiU19EVERfT1BFTl9XQUtBX0JBTkciLCJTX0RURF9DT01NRU5UIiwiU19EVERfQ09NTUVOVF9FTkRJTkciLCJTX0RURF9DT01NRU5UX0VOREVEIiwiU19EVERfUEkiLCJTX0RURF9QSV9FTkRJTkciLCJTX1RFWFQiLCJTX0VOVElUWSIsIlNfT1BFTl9XQUtBIiwiU19PUEVOX1dBS0FfQkFORyIsIlNfQ09NTUVOVCIsIlNfQ09NTUVOVF9FTkRJTkciLCJTX0NPTU1FTlRfRU5ERUQiLCJTX0NEQVRBIiwiU19DREFUQV9FTkRJTkciLCJTX0NEQVRBX0VORElOR18yIiwiU19QSV9GSVJTVF9DSEFSIiwiU19QSV9SRVNUIiwiU19QSV9CT0RZIiwiU19QSV9FTkRJTkciLCJTX1hNTF9ERUNMX05BTUVfU1RBUlQiLCJTX1hNTF9ERUNMX05BTUUiLCJTX1hNTF9ERUNMX0VRIiwiU19YTUxfREVDTF9WQUxVRV9TVEFSVCIsIlNfWE1MX0RFQ0xfVkFMVUUiLCJTX1hNTF9ERUNMX1NFUEFSQVRPUiIsIlNfWE1MX0RFQ0xfRU5ESU5HIiwiU19PUEVOX1RBRyIsIlNfT1BFTl9UQUdfU0xBU0giLCJTX0FUVFJJQiIsIlNfQVRUUklCX05BTUUiLCJTX0FUVFJJQl9OQU1FX1NBV19XSElURSIsIlNfQVRUUklCX1ZBTFVFIiwiU19BVFRSSUJfVkFMVUVfUVVPVEVEIiwiU19BVFRSSUJfVkFMVUVfQ0xPU0VEIiwiU19BVFRSSUJfVkFMVUVfVU5RVU9URUQiLCJTX0NMT1NFX1RBRyIsIlNfQ0xPU0VfVEFHX1NBV19XSElURSIsIlRBQiIsIk5MIiwiQ1IiLCJTUEFDRSIsIkJBTkciLCJEUVVPVEUiLCJBTVAiLCJTUVVPVEUiLCJNSU5VUyIsIkZPUldBUkRfU0xBU0giLCJTRU1JQ09MT04iLCJMRVNTIiwiRVFVQUwiLCJHUkVBVEVSIiwiUVVFU1RJT04iLCJPUEVOX0JSQUNLRVQiLCJDTE9TRV9CUkFDS0VUIiwiTkVMIiwiTFMiLCJpc1F1b3RlIiwiYyIsIlFVT1RFUyIsIkRPQ1RZUEVfVEVSTUlOQVRPUiIsIkRURF9URVJNSU5BVE9SIiwiWE1MX0RFQ0xfTkFNRV9URVJNSU5BVE9SIiwiQVRUUklCX1ZBTFVFX1VOUVVPVEVEX1RFUk1JTkFUT1IiLCJuc1BhaXJDaGVjayIsInBhcnNlciIsInByZWZpeCIsInVyaSIsImZhaWwiLCJuc01hcHBpbmdDaGVjayIsIm1hcHBpbmciLCJsb2NhbCIsIk9iamVjdCIsImtleXMiLCJpc05DTmFtZSIsIm5hbWUiLCJ0ZXN0IiwiaXNOYW1lIiwiRk9SQklEREVOX1NUQVJUIiwiRk9SQklEREVOX0JSQUNLRVQiLCJGT1JCSURERU5fQlJBQ0tFVF9CUkFDS0VUIiwiZXhwb3J0cyIsIkVWRU5UUyIsIkVWRU5UX05BTUVfVE9fSEFORExFUl9OQU1FIiwieG1sZGVjbCIsInRleHQiLCJwcm9jZXNzaW5naW5zdHJ1Y3Rpb24iLCJkb2N0eXBlIiwiY29tbWVudCIsIm9wZW50YWdzdGFydCIsImF0dHJpYnV0ZSIsIm9wZW50YWciLCJjbG9zZXRhZyIsImNkYXRhIiwiZXJyb3IiLCJlbmQiLCJyZWFkeSIsIlNheGVzUGFyc2VyIiwiY29uc3RydWN0b3IiLCJvcHQiLCJmcmFnbWVudE9wdCIsImZyYWdtZW50IiwieG1sbnNPcHQiLCJ0cmFja1Bvc2l0aW9uIiwicG9zaXRpb24iLCJmaWxlTmFtZSIsIm5hbWVTdGFydENoZWNrIiwibmFtZUNoZWNrIiwicHJvY2Vzc0F0dHJpYnMiLCJwcm9jZXNzQXR0cmlic05TIiwicHVzaEF0dHJpYiIsInB1c2hBdHRyaWJOUyIsIm5zIiwiYXNzaWduIiwiYWRkaXRpb25hbCIsImFkZGl0aW9uYWxOYW1lc3BhY2VzIiwicHJvY2Vzc0F0dHJpYnNQbGFpbiIsInB1c2hBdHRyaWJQbGFpbiIsInN0YXRlVGFibGUiLCJzQmVnaW4iLCJzQmVnaW5XaGl0ZXNwYWNlIiwic0RvY3R5cGUiLCJzRG9jdHlwZVF1b3RlIiwic0RURCIsInNEVERRdW90ZWQiLCJzRFRET3Blbldha2EiLCJzRFRET3Blbldha2FCYW5nIiwic0RURENvbW1lbnQiLCJzRFREQ29tbWVudEVuZGluZyIsInNEVERDb21tZW50RW5kZWQiLCJzRFREUEkiLCJzRFREUElFbmRpbmciLCJzVGV4dCIsInNFbnRpdHkiLCJzT3Blbldha2EiLCJzT3Blbldha2FCYW5nIiwic0NvbW1lbnQiLCJzQ29tbWVudEVuZGluZyIsInNDb21tZW50RW5kZWQiLCJzQ0RhdGEiLCJzQ0RhdGFFbmRpbmciLCJzQ0RhdGFFbmRpbmcyIiwic1BJRmlyc3RDaGFyIiwic1BJUmVzdCIsInNQSUJvZHkiLCJzUElFbmRpbmciLCJzWE1MRGVjbE5hbWVTdGFydCIsInNYTUxEZWNsTmFtZSIsInNYTUxEZWNsRXEiLCJzWE1MRGVjbFZhbHVlU3RhcnQiLCJzWE1MRGVjbFZhbHVlIiwic1hNTERlY2xTZXBhcmF0b3IiLCJzWE1MRGVjbEVuZGluZyIsInNPcGVuVGFnIiwic09wZW5UYWdTbGFzaCIsInNBdHRyaWIiLCJzQXR0cmliTmFtZSIsInNBdHRyaWJOYW1lU2F3V2hpdGUiLCJzQXR0cmliVmFsdWUiLCJzQXR0cmliVmFsdWVRdW90ZWQiLCJzQXR0cmliVmFsdWVDbG9zZWQiLCJzQXR0cmliVmFsdWVVbnF1b3RlZCIsInNDbG9zZVRhZyIsInNDbG9zZVRhZ1Nhd1doaXRlIiwiX2luaXQiLCJjbG9zZWQiLCJfY2xvc2VkIiwib3Blbldha2FCYW5nIiwicGlUYXJnZXQiLCJlbnRpdHkiLCJxIiwidGFncyIsInRhZyIsInRvcE5TIiwiY2h1bmsiLCJjaHVua1Bvc2l0aW9uIiwiaSIsInByZXZJIiwiY2FycmllZEZyb21QcmV2aW91cyIsInVuZGVmaW5lZCIsImZvcmJpZGRlblN0YXRlIiwiYXR0cmliTGlzdCIsInN0YXRlIiwicmVwb3J0ZWRUZXh0QmVmb3JlUm9vdCIsInJlcG9ydGVkVGV4dEFmdGVyUm9vdCIsImNsb3NlZFJvb3QiLCJzYXdSb290IiwieG1sRGVjbFBvc3NpYmxlIiwieG1sRGVjbEV4cGVjdHMiLCJlbnRpdHlSZXR1cm5TdGF0ZSIsImRlZmF1bHRYTUxWZXJzaW9uIiwiZm9yY2VYTUxWZXJzaW9uIiwiRXJyb3IiLCJzZXRYTUxWZXJzaW9uIiwicG9zaXRpb25BdE5ld0xpbmUiLCJ4bWxEZWNsIiwidmVyc2lvbiIsImVuY29kaW5nIiwic3RhbmRhbG9uZSIsImxpbmUiLCJjb2x1bW4iLCJFTlRJVElFUyIsImNyZWF0ZSIsIl9hIiwicmVhZHlIYW5kbGVyIiwiY2FsbCIsImNvbHVtbkluZGV4Iiwib24iLCJoYW5kbGVyIiwib2ZmIiwibWFrZUVycm9yIiwibWVzc2FnZSIsIm1zZyIsImxlbmd0aCIsImVyciIsImVycm9ySGFuZGxlciIsIndyaXRlIiwidG9TdHJpbmciLCJsaW1pdCIsImxhc3RDb2RlIiwiY2hhckNvZGVBdCIsInNsaWNlIiwiY2xvc2UiLCJnZXRDb2RlMTAiLCJjb2RlIiwiZmluYWwiLCJnZXRDb2RlMTEiLCJuZXh0IiwiZ2V0Q29kZU5vcm0iLCJnZXRDb2RlIiwidW5nZXQiLCJjYXB0dXJlVG8iLCJjaGFycyIsInN0YXJ0IiwiaXNOTExpa2UiLCJpbmNsdWRlcyIsImNhcHR1cmVUb0NoYXIiLCJjaGFyIiwiY2FwdHVyZU5hbWVDaGFycyIsInNraXBTcGFjZXMiLCJjdXJyZW50WE1MVmVyc2lvbiIsImlCZWZvcmUiLCJkb2N0eXBlSGFuZGxlciIsIlN0cmluZyIsImZyb21Db2RlUG9pbnQiLCJvd2IiLCJoYW5kbGVUZXh0SW5Sb290IiwiaGFuZGxlVGV4dE91dHNpZGVSb290IiwibG9vcCIsInBhcnNlZCIsInBhcnNlRW50aXR5IiwidGV4dEhhbmRsZXIiLCJjb21tZW50SGFuZGxlciIsImNkYXRhSGFuZGxlciIsImlzUXVlc3Rpb24iLCJ0b0xvd2VyQ2FzZSIsInBpSGFuZGxlciIsInRhcmdldCIsImJvZHkiLCJqb2luIiwidmFsdWUiLCJ4bWxkZWNsSGFuZGxlciIsImF0dHJpYnV0ZXMiLCJvcGVuVGFnU3RhcnRIYW5kbGVyIiwib3BlblRhZyIsIm9wZW5TZWxmQ2xvc2luZ1RhZyIsImNsb3NlVGFnIiwic2Nhbkxvb3AiLCJub25TcGFjZSIsIm91dFJvb3RMb29wIiwicW5hbWUiLCJhdHRyIiwicHVzaCIsImF0dHJpYnV0ZUhhbmRsZXIiLCJ0cmltbWVkIiwidHJpbSIsInBvcCIsIl9iIiwiZW5kSGFuZGxlciIsInJlc29sdmUiLCJpbmRleCIsInJlc29sdmVQcmVmaXgiLCJjb2xvbiIsImluZGV4T2YiLCJKU09OIiwic3RyaW5naWZ5Iiwic2VlbiIsIlNldCIsImVxbmFtZSIsImhhcyIsImFkZCIsImlzU2VsZkNsb3NpbmciLCJvcGVuVGFnSGFuZGxlciIsImNsb3NlVGFnSGFuZGxlciIsInRvcCIsIl9jIiwibCIsImRlZmluZWQiLCJudW0iLCJOYU4iLCJwYXJzZUludCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zYXhlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxNQUFBQSxHQUFBLEdBQUFDLE9BQUE7QUFDQSxNQUFBQyxHQUFBLEdBQUFELE9BQUE7QUFDQSxNQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFPRyxHQUFHLEdBQUdKLEdBQUcsQ0FBQ0ksR0FBRztBQUNwQixJQUFPQyxRQUFRLEdBQUdMLEdB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","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","module.exports = require('./lib/_stream_duplex.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","module.exports = require('./readable').PassThrough\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./lib/_stream_writable.js');\n","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"v1\", {\n enumerable: true,\n get: function () {\n return _v.default;\n }\n});\nObject.defineProperty(exports, \"v3\", {\n enumerable: true,\n get: function () {\n return _v2.default;\n }\n});\nObject.defineProperty(exports, \"v4\", {\n enumerable: true,\n get: function () {\n return _v3.default;\n }\n});\nObject.defineProperty(exports, \"v5\", {\n enumerable: true,\n get: function () {\n return _v4.default;\n }\n});\nObject.defineProperty(exports, \"NIL\", {\n enumerable: true,\n get: function () {\n return _nil.default;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function () {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"stringify\", {\n enumerable: true,\n get: function () {\n return _stringify.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return _parse.default;\n }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (let i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n const output = [];\n const length32 = input.length * 32;\n const hexTab = '0123456789abcdef';\n\n for (let i = 0; i < length32; i += 8) {\n const x = input[i >> 5] >>> i % 32 & 0xff;\n const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n let a = 1732584193;\n let b = -271733879;\n let c = -1732584194;\n let d = 271733878;\n\n for (let i = 0; i < x.length; i += 16) {\n const olda = a;\n const oldb = b;\n const oldc = c;\n const oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n const length8 = input.length * 8;\n const output = new Uint32Array(getOutputLength(length8));\n\n for (let i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n const lsw = (x & 0xffff) + (y & 0xffff);\n const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nvar _default = md5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nvar _default = parse;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rng;\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\n\nfunction rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nvar _default = sha1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || _rng.default)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || (0, _stringify.default)(b);\n}\n\nvar _default = v1;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.URL = exports.DNS = void 0;\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction _default(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0, _parse.default)(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n options = options || {};\n\n const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nvar _default = version;\nexports.default = _default;","\"use strict\";\n\n/**\n * Character classes and associated utilities for the 5th edition of XML 1.0.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//\n// Fragments.\n//\nexports.CHAR = \"\\t\\n\\r -\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return c >= SPACE && c <= 0xD7FF || c === NL || c === CR || c === TAB || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\nfunction isNameStartChar(c) {\n return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiQ0hBUiIsIlMiLCJOQU1FX1NUQVJUX0NIQVIiLCJOQU1FX0NIQVIiLCJDSEFSX1JFIiwiUmVnRXhwIiwiU19SRSIsIk5BTUVfU1RBUlRfQ0hBUl9SRSIsIk5BTUVfQ0hBUl9SRSIsIk5BTUVfUkUiLCJOTVRPS0VOX1JFIiwiVEFCIiwiTkwiLCJDUiIsIlNQQUNFIiwiU19MSVNUIiwiaXNDaGFyIiwiYyIsImlzUyIsImlzTmFtZVN0YXJ0Q2hhciIsImlzTmFtZUNoYXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMveG1sLzEuMC9lZDUudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDYUEsT0FBQSxDQUFBQyxJQUFJLEdBQUcsc0RBQXNEO0FBRTdERCxPQUFBLENBQUFFLENBQUMsR0FBRyxTQUFTO0FBRTFCO0FBQ2FGLE9BQUEsQ0FBQUcsZUFBZSxHQUFHLGlMQUEySztBQUU3TEgsT0FBQSxDQUFBSSxTQUFTLEdBQ3BCLE1BQUlKLE9BQUEsQ0FBQUcsZUFBZSx5Q0FBc0M7QUFFM0Q7QUFDQTtBQUNBO0FBRWFILE9BQUEsQ0FBQUssT0FBTyxHQUFHLElBQUlDLE1BQU0sQ0FBQyxPQUFLTixPQUFBLENBQUFDLElBQUksT0FBSSxFQUFFLEdBQUcsQ0FBQztBQUV4Q0QsT0FBQSxDQUFBTyxJQUFJLEdBQUcsSUFBSUQsTUFBTSxDQUFDLE9BQUtOLE9BQUEsQ0FBQUUsQ0FBQyxRQUFLLEVBQUUsR0FBRyxDQUFDO0FBRW5DRixPQUFBLENBQUFRLGtCQUFrQixHQUFHLElBQUlGLE1BQU0sQ0FBQyxPQUFLTixPQUFBLENBQUFHLGVBQWUsT0FBSSxFQUFFLEdBQUcsQ0FBQztBQUU5REgsT0FBQSxDQUFBUyxZQUFZLEdBQUcsSUFBSUgsTUFBTSxDQUFDLE9BQUtOLE9BQUEsQ0FBQUksU0FBUyxPQUFJLEVBQUUsR0FBRyxDQUFDO0FBRWxESixPQUFBLENBQUFVLE9B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","\"use strict\";\n\n/**\n * Character classes and associated utilities for the 2nd edition of XML 1.1.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//\n// Fragments.\n//\nexports.CHAR = \"\\u0001-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.RESTRICTED_CHAR = \"\\u0001-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u0084\\u0086-\\u009F\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.RESTRICTED_CHAR_RE = new RegExp(\"^[\" + exports.RESTRICTED_CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return c >= 0x0001 && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``.\n */\nfunction isRestrictedChar(c) {\n return c >= 0x1 && c <= 0x8 || c === 0xB || c === 0xC || c >= 0xE && c <= 0x1F || c >= 0x7F && c <= 0x84 || c >= 0x86 && c <= 0x9F;\n}\nexports.isRestrictedChar = isRestrictedChar;\n/**\n * Determines whether a codepoint matches the ``CHAR`` production and does not\n * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is\n * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster\n * than running the two-call equivalent.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR`` and does not match\n * ``RESTRICTED_CHAR``.\n */\nfunction isCharAndNotRestricted(c) {\n return c === 0x9 || c === 0xA || c === 0xD || c > 0x1F && c < 0x7F || c === 0x85 || c > 0x9F && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;\n}\nexports.isCharAndNotRestricted = isCharAndNotRestricted;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNameStartChar(c) {\n return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiQ0hBUiIsIlJFU1RSSUNURURfQ0hBUiIsIlMiLCJOQU1FX1NUQVJUX0NIQVIiLCJOQU1FX0NIQVIiLCJDSEFSX1JFIiwiUmVnRXhwIiwiUkVTVFJJQ1RFRF9DSEFSX1JFIiwiU19SRSIsIk5BTUVfU1RBUlRfQ0hBUl9SRSIsIk5BTUVfQ0hBUl9SRSIsIk5BTUVfUkUiLCJOTVRPS0VOX1JFIiwiVEFCIiwiTkwiLCJDUiIsIlNQQUNFIiwiU19MSVNUIiwiaXNDaGFyIiwiYyIsImlzUmVzdHJpY3RlZENoYXIiLCJpc0NoYXJBbmROb3RSZXN0cmljdGVkIiwiaXNTIiwiaXNOYW1lU3RhcnRDaGFyIiwiaXNOYW1lQ2hhciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy94bWwvMS4xL2VkMi50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNhQSxPQUFBLENBQUFDLElBQUksR0FBRyxxREFBZ0Q7QUFFdkRELE9BQUEsQ0FBQUUsZUFBZSxHQUMxQixrRUFBa0U7QUFFdkRGLE9BQUEsQ0FBQUcsQ0FBQyxHQUFHLFNBQVM7QUFFMUI7QUFDYUgsT0FBQSxDQUFBSSxlQUFlLEdBQUcsaUxBQTJLO0FBRTdMSixPQUFBLENBQUFLLFNBQVMsR0FDcEIsTUFBSUwsT0FBQSxDQUFBSSxlQUFlLHlDQUFzQztBQUUzRDtBQUNBO0FBQ0E7QUFFYUosT0FBQSxDQUFBTSxPQUFPLEdBQUcsSUFBSUMsTUFBTSxDQUFDLE9BQUtQLE9BQUEsQ0FBQUMsSUFBSSxPQUFJLEVBQUUsR0FBRyxDQUFDO0FBRXhDRCxPQUFBLENBQUFRLGtCQUFrQixHQUFHLElBQUlELE1BQU0sQ0FBQyxPQUFLUCxPQUFBLENBQUFFLGVBQWUsT0FBSSxFQUFFLEdBQUcsQ0FBQztBQUU5REYsT0FBQSxDQUFBUyxJQUFJLEdBQUcsSUFBSUYsTUFBTSxDQUFDLE9BQUtQLE9BQUEsQ0FBQUcsQ0FBQyxRQUFLLEVB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","\"use strict\";\n\n/**\n * Character class utilities for XML NS 1.0 edition 3.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//\n// Fragments.\n//\n// tslint:disable-next-line:max-line-length\nexports.NC_NAME_START_CHAR = \"A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NC_NAME_CHAR = \"-\" + exports.NC_NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.NC_NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"]$\", \"u\");\nexports.NC_NAME_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_CHAR + \"]$\", \"u\");\nexports.NC_NAME_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"][\" + exports.NC_NAME_CHAR + \"]*$\", \"u\");\n/**\n * Determines whether a codepoint matches [[NC_NAME_START_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNCNameStartChar(c) {\n return c >= 0x41 && c <= 0x5A || c === 0x5F || c >= 0x61 && c <= 0x7A || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x200C && c <= 0x200D || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;\n}\nexports.isNCNameStartChar = isNCNameStartChar;\n/**\n * Determines whether a codepoint matches [[NC_NAME_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\nfunction isNCNameChar(c) {\n return isNCNameStartChar(c) || c === 0x2D || c === 0x2E || c >= 0x30 && c <= 0x39 || c === 0x00B7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;\n}\nexports.isNCNameChar = isNCNameChar;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiTkNfTkFNRV9TVEFSVF9DSEFSIiwiTkNfTkFNRV9DSEFSIiwiTkNfTkFNRV9TVEFSVF9DSEFSX1JFIiwiUmVnRXhwIiwiTkNfTkFNRV9DSEFSX1JFIiwiTkNfTkFNRV9SRSIsImlzTkNOYW1lU3RhcnRDaGFyIiwiYyIsImlzTkNOYW1lQ2hhciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy94bWxucy8xLjAvZWQzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDYUEsT0FBQSxDQUFBQyxrQkFBa0IsR0FBRyxpTEFBMks7QUFFaE1ELE9BQUEsQ0FBQUUsWUFBWSxHQUN2QixNQUFJRixPQUFBLENBQUFDLGtCQUFrQix5Q0FBc0M7QUFFOUQ7QUFDQTtBQUNBO0FBRWFELE9BQUEsQ0FBQUcscUJBQXFCLEdBQ2hDLElBQUlDLE1BQU0sQ0FBQyxPQUFLSixPQUFBLENBQUFDLGtCQUFrQixPQUFJLEVBQUUsR0FBRyxDQUFDO0FBRWpDRCxPQUFBLENBQUFLLGVBQWUsR0FBRyxJQUFJRCxNQUFNLENBQUMsT0FBS0osT0FBQSxDQUFBRSxZQUFZLE9BQUksRUFBRSxHQUFHLENBQUM7QUFFeERGLE9BQUEsQ0FBQU0sVUFBVSxHQUNyQixJQUFJRixNQUFNLENBQUMsT0FBS0osT0FBQSxDQUFBQyxrQkFBa0IsVUFBS0QsT0FBQSxDQUFBRSxZQUFZLFFBQUssRUFBRSxHQUFHLENBQUM7QUFFaEU7Ozs7Ozs7QUFPQTtBQUNBLFNBQWdCSyxpQkFBaUJBLENBQUNDLENBQVM7RUFDekMsT0FBU0EsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUksSUFDdkJBLENBQUMsS0FBSyxJQUFJLElBQ1RBLENBQUMsSUFBSSxJQUFJLElBQUlBLENBQUMsSUFBSSxJQUFLLElBQ3ZCQSxDQUFDLElBQUksSUFBSSxJQUFJQSxDQUFDLElBQUksSUFBSyxJQUN2QkEsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUssSUFDdkJBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxPQUFPLElBQUlBLENBQUMsSUFBSSxPQUFRO0FBQ3hDO0FBaEJBUixPQUFBLENBQUFPLGlCQUFBLEdBQUFBLGlCQUFBO0FBa0JBOzs7Ozs7O0FBT0EsU0FBZ0JFLFlBQVlBLENBQUNELENBQVM7RUFDcEMsT0FBT0QsaUJBQWlCLENBQUNDLENBQUMsQ0FBQyxJQUN4QkEsQ0FBQyxLQUFLLElBQUksSUFDVkEsQ0FBQyxLQUFLLElBQUksSUFDVEEsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUssSUFDeEJBLENBQUMsS0FBSyxNQUFNLElBQ1hBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBUTtBQUNsQztBQVJBUixPQUFBLENBQUFTLFlBQUEsR0FBQUEsWUFBQSJ9"]} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/exceljs.js b/node_backend/node_modules/exceljs/dist/exceljs.js new file mode 100644 index 0000000000000000000000000000000000000000..ab2c9d6e576d8069d77d787b863dfe09c7659890 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/exceljs.js @@ -0,0 +1,59900 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ExcelJS = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i { + const worksheet = this.workbook.addWorksheet(options.sheetName); + const dateFormats = options.dateFormats || ['YYYY-MM-DD[T]HH:mm:ssZ', 'YYYY-MM-DD[T]HH:mm:ss', 'MM-DD-YYYY', 'YYYY-MM-DD']; + const map = options.map || function (datum) { + if (datum === '') { + return null; + } + const datumNumber = Number(datum); + if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) { + return datumNumber; + } + const dt = dateFormats.reduce((matchingDate, currentDateFormat) => { + if (matchingDate) { + return matchingDate; + } + const dayjsObj = dayjs(datum, currentDateFormat, true); + if (dayjsObj.isValid()) { + return dayjsObj; + } + return null; + }, null); + if (dt) { + return new Date(dt.valueOf()); + } + const special = SpecialValues[datum]; + if (special !== undefined) { + return special; + } + return datum; + }; + const csvStream = fastCsv.parse(options.parserOptions).on('data', data => { + worksheet.addRow(data.map(map)); + }).on('end', () => { + csvStream.emit('worksheet', worksheet); + }); + csvStream.on('worksheet', resolve).on('error', reject); + stream.pipe(csvStream); + }); + } + + /** + * @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md + */ + createInputStream() { + throw new Error('`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'); + } + write(stream, options) { + return new Promise((resolve, reject) => { + options = options || {}; + // const encoding = options.encoding || 'utf8'; + // const separator = options.separator || ','; + // const quoteChar = options.quoteChar || '\''; + + const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId); + const csvStream = fastCsv.format(options.formatterOptions); + stream.on('finish', () => { + resolve(); + }); + csvStream.on('error', reject); + csvStream.pipe(stream); + const { + dateFormat, + dateUTC + } = options; + const map = options.map || (value => { + if (value) { + if (value.text || value.hyperlink) { + return value.hyperlink || value.text || ''; + } + if (value.formula || value.result) { + return value.result || ''; + } + if (value instanceof Date) { + if (dateFormat) { + return dateUTC ? dayjs.utc(value).format(dateFormat) : dayjs(value).format(dateFormat); + } + return dateUTC ? dayjs.utc(value).format() : dayjs(value).format(); + } + if (value.error) { + return value.error; + } + if (typeof value === 'object') { + return JSON.stringify(value); + } + } + return value; + }); + const includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows; + let lastRow = 1; + if (worksheet) { + worksheet.eachRow((row, rowNumber) => { + if (includeEmptyRows) { + while (lastRow++ < rowNumber - 1) { + csvStream.write([]); + } + } + const { + values + } = row; + values.shift(); + csvStream.write(values.map(map)); + lastRow = rowNumber; + }); + } + csvStream.end(); + }); + } + writeFile(filename, options) { + options = options || {}; + const streamOptions = { + encoding: options.encoding || 'utf8' + }; + const stream = fs.createWriteStream(filename, streamOptions); + return this.write(stream, options); + } + async writeBuffer(options) { + const stream = new StreamBuf(); + await this.write(stream, options); + return stream.read(); + } +} +module.exports = CSV; + +},{"../utils/stream-buf":24,"../utils/utils":27,"dayjs":391,"dayjs/plugin/customParseFormat":392,"dayjs/plugin/utc":393,"fast-csv":424,"fs":216}],2:[function(require,module,exports){ +'use strict'; + +const colCache = require('../utils/col-cache'); +class Anchor { + constructor(worksheet, address) { + let offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + this.worksheet = worksheet; + if (!address) { + this.nativeCol = 0; + this.nativeColOff = 0; + this.nativeRow = 0; + this.nativeRowOff = 0; + } else if (typeof address === 'string') { + const decoded = colCache.decodeAddress(address); + this.nativeCol = decoded.col + offset; + this.nativeColOff = 0; + this.nativeRow = decoded.row + offset; + this.nativeRowOff = 0; + } else if (address.nativeCol !== undefined) { + this.nativeCol = address.nativeCol || 0; + this.nativeColOff = address.nativeColOff || 0; + this.nativeRow = address.nativeRow || 0; + this.nativeRowOff = address.nativeRowOff || 0; + } else if (address.col !== undefined) { + this.col = address.col + offset; + this.row = address.row + offset; + } else { + this.nativeCol = 0; + this.nativeColOff = 0; + this.nativeRow = 0; + this.nativeRowOff = 0; + } + } + static asInstance(model) { + return model instanceof Anchor || model == null ? model : new Anchor(model); + } + get col() { + return this.nativeCol + Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth; + } + set col(v) { + this.nativeCol = Math.floor(v); + this.nativeColOff = Math.floor((v - this.nativeCol) * this.colWidth); + } + get row() { + return this.nativeRow + Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight; + } + set row(v) { + this.nativeRow = Math.floor(v); + this.nativeRowOff = Math.floor((v - this.nativeRow) * this.rowHeight); + } + get colWidth() { + return this.worksheet && this.worksheet.getColumn(this.nativeCol + 1) && this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth ? Math.floor(this.worksheet.getColumn(this.nativeCol + 1).width * 10000) : 640000; + } + get rowHeight() { + return this.worksheet && this.worksheet.getRow(this.nativeRow + 1) && this.worksheet.getRow(this.nativeRow + 1).height ? Math.floor(this.worksheet.getRow(this.nativeRow + 1).height * 10000) : 180000; + } + get model() { + return { + nativeCol: this.nativeCol, + nativeColOff: this.nativeColOff, + nativeRow: this.nativeRow, + nativeRowOff: this.nativeRowOff + }; + } + set model(value) { + this.nativeCol = value.nativeCol; + this.nativeColOff = value.nativeColOff; + this.nativeRow = value.nativeRow; + this.nativeRowOff = value.nativeRowOff; + } +} +module.exports = Anchor; + +},{"../utils/col-cache":19}],3:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const colCache = require('../utils/col-cache'); +const _ = require('../utils/under-dash'); +const Enums = require('./enums'); +const { + slideFormula +} = require('../utils/shared-formula'); +const Note = require('./note'); +// Cell requirements +// Operate inside a worksheet +// Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc. +// Manage/use and manipulate cell format either as local to cell or inherited from column or row. + +class Cell { + constructor(row, column, address) { + if (!row || !column) { + throw new Error('A Cell needs a Row'); + } + this._row = row; + this._column = column; + colCache.validateAddress(address); + this._address = address; + + // TODO: lazy evaluation of this._value + this._value = Value.create(Cell.Types.Null, this); + this.style = this._mergeStyle(row.style, column.style, {}); + this._mergeCount = 0; + } + get worksheet() { + return this._row.worksheet; + } + get workbook() { + return this._row.worksheet.workbook; + } + + // help GC by removing cyclic (and other) references + destroy() { + delete this.style; + delete this._value; + delete this._row; + delete this._column; + delete this._address; + } + + // ========================================================================= + // Styles stuff + get numFmt() { + return this.style.numFmt; + } + set numFmt(value) { + this.style.numFmt = value; + } + get font() { + return this.style.font; + } + set font(value) { + this.style.font = value; + } + get alignment() { + return this.style.alignment; + } + set alignment(value) { + this.style.alignment = value; + } + get border() { + return this.style.border; + } + set border(value) { + this.style.border = value; + } + get fill() { + return this.style.fill; + } + set fill(value) { + this.style.fill = value; + } + get protection() { + return this.style.protection; + } + set protection(value) { + this.style.protection = value; + } + _mergeStyle(rowStyle, colStyle, style) { + const numFmt = rowStyle && rowStyle.numFmt || colStyle && colStyle.numFmt; + if (numFmt) style.numFmt = numFmt; + const font = rowStyle && rowStyle.font || colStyle && colStyle.font; + if (font) style.font = font; + const alignment = rowStyle && rowStyle.alignment || colStyle && colStyle.alignment; + if (alignment) style.alignment = alignment; + const border = rowStyle && rowStyle.border || colStyle && colStyle.border; + if (border) style.border = border; + const fill = rowStyle && rowStyle.fill || colStyle && colStyle.fill; + if (fill) style.fill = fill; + const protection = rowStyle && rowStyle.protection || colStyle && colStyle.protection; + if (protection) style.protection = protection; + return style; + } + + // ========================================================================= + // return the address for this cell + get address() { + return this._address; + } + get row() { + return this._row.number; + } + get col() { + return this._column.number; + } + get $col$row() { + return `$${this._column.letter}$${this.row}`; + } + + // ========================================================================= + // Value stuff + + get type() { + return this._value.type; + } + get effectiveType() { + return this._value.effectiveType; + } + toCsvString() { + return this._value.toCsvString(); + } + + // ========================================================================= + // Merge stuff + + addMergeRef() { + this._mergeCount++; + } + releaseMergeRef() { + this._mergeCount--; + } + get isMerged() { + return this._mergeCount > 0 || this.type === Cell.Types.Merge; + } + merge(master, ignoreStyle) { + this._value.release(); + this._value = Value.create(Cell.Types.Merge, this, master); + if (!ignoreStyle) { + this.style = master.style; + } + } + unmerge() { + if (this.type === Cell.Types.Merge) { + this._value.release(); + this._value = Value.create(Cell.Types.Null, this); + this.style = this._mergeStyle(this._row.style, this._column.style, {}); + } + } + isMergedTo(master) { + if (this._value.type !== Cell.Types.Merge) return false; + return this._value.isMergedTo(master); + } + get master() { + if (this.type === Cell.Types.Merge) { + return this._value.master; + } + return this; // an unmerged cell is its own master + } + + get isHyperlink() { + return this._value.type === Cell.Types.Hyperlink; + } + get hyperlink() { + return this._value.hyperlink; + } + + // return the value + get value() { + return this._value.value; + } + + // set the value - can be number, string or raw + set value(v) { + // special case - merge cells set their master's value + if (this.type === Cell.Types.Merge) { + this._value.master.value = v; + return; + } + this._value.release(); + + // assign value + this._value = Value.create(Value.getType(v), this, v); + } + get note() { + return this._comment && this._comment.note; + } + set note(note) { + this._comment = new Note(note); + } + get text() { + return this._value.toString(); + } + get html() { + return _.escapeHtml(this.text); + } + toString() { + return this.text; + } + _upgradeToHyperlink(hyperlink) { + // if this cell is a string, turn it into a Hyperlink + if (this.type === Cell.Types.String) { + this._value = Value.create(Cell.Types.Hyperlink, this, { + text: this._value.value, + hyperlink + }); + } + } + + // ========================================================================= + // Formula stuff + get formula() { + return this._value.formula; + } + get result() { + return this._value.result; + } + get formulaType() { + return this._value.formulaType; + } + + // ========================================================================= + // Name stuff + get fullAddress() { + const { + worksheet + } = this._row; + return { + sheetName: worksheet.name, + address: this.address, + row: this.row, + col: this.col + }; + } + get name() { + return this.names[0]; + } + set name(value) { + this.names = [value]; + } + get names() { + return this.workbook.definedNames.getNamesEx(this.fullAddress); + } + set names(value) { + const { + definedNames + } = this.workbook; + definedNames.removeAllNames(this.fullAddress); + value.forEach(name => { + definedNames.addEx(this.fullAddress, name); + }); + } + addName(name) { + this.workbook.definedNames.addEx(this.fullAddress, name); + } + removeName(name) { + this.workbook.definedNames.removeEx(this.fullAddress, name); + } + removeAllNames() { + this.workbook.definedNames.removeAllNames(this.fullAddress); + } + + // ========================================================================= + // Data Validation stuff + get _dataValidations() { + return this.worksheet.dataValidations; + } + get dataValidation() { + return this._dataValidations.find(this.address); + } + set dataValidation(value) { + this._dataValidations.add(this.address, value); + } + + // ========================================================================= + // Model stuff + + get model() { + const { + model + } = this._value; + model.style = this.style; + if (this._comment) { + model.comment = this._comment.model; + } + return model; + } + set model(value) { + this._value.release(); + this._value = Value.create(value.type, this); + this._value.model = value; + if (value.comment) { + switch (value.comment.type) { + case 'note': + this._comment = Note.fromModel(value.comment); + break; + } + } + if (value.style) { + this.style = value.style; + } else { + this.style = {}; + } + } +} +Cell.Types = Enums.ValueType; + +// ============================================================================= +// Internal Value Types + +class NullValue { + constructor(cell) { + this.model = { + address: cell.address, + type: Cell.Types.Null + }; + } + get value() { + return null; + } + set value(value) { + // nothing to do + } + get type() { + return Cell.Types.Null; + } + get effectiveType() { + return Cell.Types.Null; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return ''; + } + release() {} + toString() { + return ''; + } +} +class NumberValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Number, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Number; + } + get effectiveType() { + return Cell.Types.Number; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value.toString(); + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class StringValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.String, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.String; + } + get effectiveType() { + return Cell.Types.String; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return `"${this.model.value.replace(/"/g, '""')}"`; + } + release() {} + toString() { + return this.model.value; + } +} +class RichTextValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.String, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + toString() { + return this.model.value.richText.map(t => t.text).join(''); + } + get type() { + return Cell.Types.RichText; + } + get effectiveType() { + return Cell.Types.RichText; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return `"${this.text.replace(/"/g, '""')}"`; + } + release() {} +} +class DateValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Date, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Date; + } + get effectiveType() { + return Cell.Types.Date; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value.toISOString(); + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class HyperlinkValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Hyperlink, + text: value ? value.text : undefined, + hyperlink: value ? value.hyperlink : undefined + }; + if (value && value.tooltip) { + this.model.tooltip = value.tooltip; + } + } + get value() { + const v = { + text: this.model.text, + hyperlink: this.model.hyperlink + }; + if (this.model.tooltip) { + v.tooltip = this.model.tooltip; + } + return v; + } + set value(value) { + this.model = { + text: value.text, + hyperlink: value.hyperlink + }; + if (value.tooltip) { + this.model.tooltip = value.tooltip; + } + } + get text() { + return this.model.text; + } + set text(value) { + this.model.text = value; + } + + /* + get tooltip() { + return this.model.tooltip; + } + set tooltip(value) { + this.model.tooltip = value; + } */ + + get hyperlink() { + return this.model.hyperlink; + } + set hyperlink(value) { + this.model.hyperlink = value; + } + get type() { + return Cell.Types.Hyperlink; + } + get effectiveType() { + return Cell.Types.Hyperlink; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.hyperlink; + } + release() {} + toString() { + return this.model.text; + } +} +class MergeValue { + constructor(cell, master) { + this.model = { + address: cell.address, + type: Cell.Types.Merge, + master: master ? master.address : undefined + }; + this._master = master; + if (master) { + master.addMergeRef(); + } + } + get value() { + return this._master.value; + } + set value(value) { + if (value instanceof Cell) { + if (this._master) { + this._master.releaseMergeRef(); + } + value.addMergeRef(); + this._master = value; + } else { + this._master.value = value; + } + } + isMergedTo(master) { + return master === this._master; + } + get master() { + return this._master; + } + get type() { + return Cell.Types.Merge; + } + get effectiveType() { + return this._master.effectiveType; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return ''; + } + release() { + this._master.releaseMergeRef(); + } + toString() { + return this.value.toString(); + } +} +class FormulaValue { + constructor(cell, value) { + this.cell = cell; + this.model = { + address: cell.address, + type: Cell.Types.Formula, + shareType: value ? value.shareType : undefined, + ref: value ? value.ref : undefined, + formula: value ? value.formula : undefined, + sharedFormula: value ? value.sharedFormula : undefined, + result: value ? value.result : undefined + }; + } + _copyModel(model) { + const copy = {}; + const cp = name => { + const value = model[name]; + if (value) { + copy[name] = value; + } + }; + cp('formula'); + cp('result'); + cp('ref'); + cp('shareType'); + cp('sharedFormula'); + return copy; + } + get value() { + return this._copyModel(this.model); + } + set value(value) { + this.model = this._copyModel(value); + } + validate(value) { + switch (Value.getType(value)) { + case Cell.Types.Null: + case Cell.Types.String: + case Cell.Types.Number: + case Cell.Types.Date: + break; + case Cell.Types.Hyperlink: + case Cell.Types.Formula: + default: + throw new Error('Cannot process that type of result value'); + } + } + get dependencies() { + // find all the ranges and cells mentioned in the formula + const ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g); + const cells = this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g, '').match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g); + return { + ranges, + cells + }; + } + get formula() { + return this.model.formula || this._getTranslatedFormula(); + } + set formula(value) { + this.model.formula = value; + } + get formulaType() { + if (this.model.formula) { + return Enums.FormulaType.Master; + } + if (this.model.sharedFormula) { + return Enums.FormulaType.Shared; + } + return Enums.FormulaType.None; + } + get result() { + return this.model.result; + } + set result(value) { + this.model.result = value; + } + get type() { + return Cell.Types.Formula; + } + get effectiveType() { + const v = this.model.result; + if (v === null || v === undefined) { + return Enums.ValueType.Null; + } + if (v instanceof String || typeof v === 'string') { + return Enums.ValueType.String; + } + if (typeof v === 'number') { + return Enums.ValueType.Number; + } + if (v instanceof Date) { + return Enums.ValueType.Date; + } + if (v.text && v.hyperlink) { + return Enums.ValueType.Hyperlink; + } + if (v.formula) { + return Enums.ValueType.Formula; + } + return Enums.ValueType.Null; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + _getTranslatedFormula() { + if (!this._translatedFormula && this.model.sharedFormula) { + const { + worksheet + } = this.cell; + const master = worksheet.findCell(this.model.sharedFormula); + this._translatedFormula = master && slideFormula(master.formula, master.address, this.model.address); + } + return this._translatedFormula; + } + toCsvString() { + return `${this.model.result || ''}`; + } + release() {} + toString() { + return this.model.result ? this.model.result.toString() : ''; + } +} +class SharedStringValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.SharedString, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.SharedString; + } + get effectiveType() { + return Cell.Types.SharedString; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value.toString(); + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class BooleanValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Boolean, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Boolean; + } + get effectiveType() { + return Cell.Types.Boolean; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value ? 1 : 0; + } + release() {} + toString() { + return this.model.value.toString(); + } +} +class ErrorValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.Error, + value + }; + } + get value() { + return this.model.value; + } + set value(value) { + this.model.value = value; + } + get type() { + return Cell.Types.Error; + } + get effectiveType() { + return Cell.Types.Error; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.toString(); + } + release() {} + toString() { + return this.model.value.error.toString(); + } +} +class JSONValue { + constructor(cell, value) { + this.model = { + address: cell.address, + type: Cell.Types.String, + value: JSON.stringify(value), + rawValue: value + }; + } + get value() { + return this.model.rawValue; + } + set value(value) { + this.model.rawValue = value; + this.model.value = JSON.stringify(value); + } + get type() { + return Cell.Types.String; + } + get effectiveType() { + return Cell.Types.String; + } + get address() { + return this.model.address; + } + set address(value) { + this.model.address = value; + } + toCsvString() { + return this.model.value; + } + release() {} + toString() { + return this.model.value; + } +} + +// Value is a place to hold common static Value type functions +const Value = { + getType(value) { + if (value === null || value === undefined) { + return Cell.Types.Null; + } + if (value instanceof String || typeof value === 'string') { + return Cell.Types.String; + } + if (typeof value === 'number') { + return Cell.Types.Number; + } + if (typeof value === 'boolean') { + return Cell.Types.Boolean; + } + if (value instanceof Date) { + return Cell.Types.Date; + } + if (value.text && value.hyperlink) { + return Cell.Types.Hyperlink; + } + if (value.formula || value.sharedFormula) { + return Cell.Types.Formula; + } + if (value.richText) { + return Cell.Types.RichText; + } + if (value.sharedString) { + return Cell.Types.SharedString; + } + if (value.error) { + return Cell.Types.Error; + } + return Cell.Types.JSON; + }, + // map valueType to constructor + types: [{ + t: Cell.Types.Null, + f: NullValue + }, { + t: Cell.Types.Number, + f: NumberValue + }, { + t: Cell.Types.String, + f: StringValue + }, { + t: Cell.Types.Date, + f: DateValue + }, { + t: Cell.Types.Hyperlink, + f: HyperlinkValue + }, { + t: Cell.Types.Formula, + f: FormulaValue + }, { + t: Cell.Types.Merge, + f: MergeValue + }, { + t: Cell.Types.JSON, + f: JSONValue + }, { + t: Cell.Types.SharedString, + f: SharedStringValue + }, { + t: Cell.Types.RichText, + f: RichTextValue + }, { + t: Cell.Types.Boolean, + f: BooleanValue + }, { + t: Cell.Types.Error, + f: ErrorValue + }].reduce((p, t) => { + p[t.t] = t.f; + return p; + }, []), + create(type, cell, value) { + const T = this.types[type]; + if (!T) { + throw new Error(`Could not create Value of type ${type}`); + } + return new T(cell, value); + } +}; +module.exports = Cell; + +},{"../utils/col-cache":19,"../utils/shared-formula":23,"../utils/under-dash":26,"./enums":7,"./note":9}],4:[function(require,module,exports){ +'use strict'; + +const _ = require('../utils/under-dash'); +const Enums = require('./enums'); +const colCache = require('../utils/col-cache'); +const DEFAULT_COLUMN_WIDTH = 9; + +// Column defines the column properties for 1 column. +// This includes header rows, widths, key, (style), etc. +// Worksheet will condense the columns as appropriate during serialization +class Column { + constructor(worksheet, number, defn) { + this._worksheet = worksheet; + this._number = number; + if (defn !== false) { + // sometimes defn will follow + this.defn = defn; + } + } + get number() { + return this._number; + } + get worksheet() { + return this._worksheet; + } + get letter() { + return colCache.n2l(this._number); + } + get isCustomWidth() { + return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH; + } + get defn() { + return { + header: this._header, + key: this.key, + width: this.width, + style: this.style, + hidden: this.hidden, + outlineLevel: this.outlineLevel + }; + } + set defn(value) { + if (value) { + this.key = value.key; + this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH; + this.outlineLevel = value.outlineLevel; + if (value.style) { + this.style = value.style; + } else { + this.style = {}; + } + + // headers must be set after style + this.header = value.header; + this._hidden = !!value.hidden; + } else { + delete this._header; + delete this._key; + delete this.width; + this.style = {}; + this.outlineLevel = 0; + } + } + get headers() { + return this._header && this._header instanceof Array ? this._header : [this._header]; + } + get header() { + return this._header; + } + set header(value) { + if (value !== undefined) { + this._header = value; + this.headers.forEach((text, index) => { + this._worksheet.getCell(index + 1, this.number).value = text; + }); + } else { + this._header = undefined; + } + } + get key() { + return this._key; + } + set key(value) { + const column = this._key && this._worksheet.getColumnKey(this._key); + if (column === this) { + this._worksheet.deleteColumnKey(this._key); + } + this._key = value; + if (value) { + this._worksheet.setColumnKey(this._key, this); + } + } + get hidden() { + return !!this._hidden; + } + set hidden(value) { + this._hidden = value; + } + get outlineLevel() { + return this._outlineLevel || 0; + } + set outlineLevel(value) { + this._outlineLevel = value; + } + get collapsed() { + return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol); + } + toString() { + return JSON.stringify({ + key: this.key, + width: this.width, + headers: this.headers.length ? this.headers : undefined + }); + } + equivalentTo(other) { + return this.width === other.width && this.hidden === other.hidden && this.outlineLevel === other.outlineLevel && _.isEqual(this.style, other.style); + } + get isDefault() { + if (this.isCustomWidth) { + return false; + } + if (this.hidden) { + return false; + } + if (this.outlineLevel) { + return false; + } + const s = this.style; + if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) { + return false; + } + return true; + } + get headerCount() { + return this.headers.length; + } + eachCell(options, iteratee) { + const colNumber = this.number; + if (!iteratee) { + iteratee = options; + options = null; + } + this._worksheet.eachRow(options, (row, rowNumber) => { + iteratee(row.getCell(colNumber), rowNumber); + }); + } + get values() { + const v = []; + this.eachCell((cell, rowNumber) => { + if (cell && cell.type !== Enums.ValueType.Null) { + v[rowNumber] = cell.value; + } + }); + return v; + } + set values(v) { + if (!v) { + return; + } + const colNumber = this.number; + let offset = 0; + if (v.hasOwnProperty('0')) { + // assume contiguous array, start at row 1 + offset = 1; + } + v.forEach((value, index) => { + this._worksheet.getCell(index + offset, colNumber).value = value; + }); + } + + // ========================================================================= + // styles + _applyStyle(name, value) { + this.style[name] = value; + this.eachCell(cell => { + cell[name] = value; + }); + return value; + } + get numFmt() { + return this.style.numFmt; + } + set numFmt(value) { + this._applyStyle('numFmt', value); + } + get font() { + return this.style.font; + } + set font(value) { + this._applyStyle('font', value); + } + get alignment() { + return this.style.alignment; + } + set alignment(value) { + this._applyStyle('alignment', value); + } + get protection() { + return this.style.protection; + } + set protection(value) { + this._applyStyle('protection', value); + } + get border() { + return this.style.border; + } + set border(value) { + this._applyStyle('border', value); + } + get fill() { + return this.style.fill; + } + set fill(value) { + this._applyStyle('fill', value); + } + + // ============================================================================= + // static functions + + static toModel(columns) { + // Convert array of Column into compressed list cols + const cols = []; + let col = null; + if (columns) { + columns.forEach((column, index) => { + if (column.isDefault) { + if (col) { + col = null; + } + } else if (!col || !column.equivalentTo(col)) { + col = { + min: index + 1, + max: index + 1, + width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH, + style: column.style, + isCustomWidth: column.isCustomWidth, + hidden: column.hidden, + outlineLevel: column.outlineLevel, + collapsed: column.collapsed + }; + cols.push(col); + } else { + col.max = index + 1; + } + }); + } + return cols.length ? cols : undefined; + } + static fromModel(worksheet, cols) { + cols = cols || []; + const columns = []; + let count = 1; + let index = 0; + /** + * sort cols by min + * If it is not sorted, the subsequent column configuration will be overwritten + * */ + cols = cols.sort(function (pre, next) { + return pre.min - next.min; + }); + while (index < cols.length) { + const col = cols[index++]; + while (count < col.min) { + columns.push(new Column(worksheet, count++)); + } + while (count <= col.max) { + columns.push(new Column(worksheet, count++, col)); + } + } + return columns.length ? columns : null; + } +} +module.exports = Column; + +},{"../utils/col-cache":19,"../utils/under-dash":26,"./enums":7}],5:[function(require,module,exports){ +"use strict"; + +class DataValidations { + constructor(model) { + this.model = model || {}; + } + add(address, validation) { + return this.model[address] = validation; + } + find(address) { + return this.model[address]; + } + remove(address) { + this.model[address] = undefined; + } +} +module.exports = DataValidations; + +},{}],6:[function(require,module,exports){ +'use strict'; + +const _ = require('../utils/under-dash'); +const colCache = require('../utils/col-cache'); +const CellMatrix = require('../utils/cell-matrix'); +const Range = require('./range'); +const rangeRegexp = /[$](\w+)[$](\d+)(:[$](\w+)[$](\d+))?/; +class DefinedNames { + constructor() { + this.matrixMap = {}; + } + getMatrix(name) { + const matrix = this.matrixMap[name] || (this.matrixMap[name] = new CellMatrix()); + return matrix; + } + + // add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2 + add(locStr, name) { + const location = colCache.decodeEx(locStr); + this.addEx(location, name); + } + addEx(location, name) { + const matrix = this.getMatrix(name); + if (location.top) { + for (let col = location.left; col <= location.right; col++) { + for (let row = location.top; row <= location.bottom; row++) { + const address = { + sheetName: location.sheetName, + address: colCache.n2l(col) + row, + row, + col + }; + matrix.addCellEx(address); + } + } + } else { + matrix.addCellEx(location); + } + } + remove(locStr, name) { + const location = colCache.decodeEx(locStr); + this.removeEx(location, name); + } + removeEx(location, name) { + const matrix = this.getMatrix(name); + matrix.removeCellEx(location); + } + removeAllNames(location) { + _.each(this.matrixMap, matrix => { + matrix.removeCellEx(location); + }); + } + forEach(callback) { + _.each(this.matrixMap, (matrix, name) => { + matrix.forEach(cell => { + callback(name, cell); + }); + }); + } + + // get all the names of a cell + getNames(addressStr) { + return this.getNamesEx(colCache.decodeEx(addressStr)); + } + getNamesEx(address) { + return _.map(this.matrixMap, (matrix, name) => matrix.findCellEx(address) && name).filter(Boolean); + } + _explore(matrix, cell) { + cell.mark = false; + const { + sheetName + } = cell; + const range = new Range(cell.row, cell.col, cell.row, cell.col, sheetName); + let x; + let y; + + // grow vertical - only one col to worry about + function vGrow(yy, edge) { + const c = matrix.findCellAt(sheetName, yy, cell.col); + if (!c || !c.mark) { + return false; + } + range[edge] = yy; + c.mark = false; + return true; + } + for (y = cell.row - 1; vGrow(y, 'top'); y--); + for (y = cell.row + 1; vGrow(y, 'bottom'); y++); + + // grow horizontal - ensure all rows can grow + function hGrow(xx, edge) { + const cells = []; + for (y = range.top; y <= range.bottom; y++) { + const c = matrix.findCellAt(sheetName, y, xx); + if (c && c.mark) { + cells.push(c); + } else { + return false; + } + } + range[edge] = xx; + for (let i = 0; i < cells.length; i++) { + cells[i].mark = false; + } + return true; + } + for (x = cell.col - 1; hGrow(x, 'left'); x--); + for (x = cell.col + 1; hGrow(x, 'right'); x++); + return range; + } + getRanges(name, matrix) { + matrix = matrix || this.matrixMap[name]; + if (!matrix) { + return { + name, + ranges: [] + }; + } + + // mark and sweep! + matrix.forEach(cell => { + cell.mark = true; + }); + const ranges = matrix.map(cell => cell.mark && this._explore(matrix, cell)).filter(Boolean).map(range => range.$shortRange); + return { + name, + ranges + }; + } + normaliseMatrix(matrix, sheetName) { + // some of the cells might have shifted on specified sheet + // need to reassign rows, cols + matrix.forEachInSheet(sheetName, (cell, row, col) => { + if (cell) { + if (cell.row !== row || cell.col !== col) { + cell.row = row; + cell.col = col; + cell.address = colCache.n2l(col) + row; + } + } + }); + } + spliceRows(sheetName, start, numDelete, numInsert) { + _.each(this.matrixMap, matrix => { + matrix.spliceRows(sheetName, start, numDelete, numInsert); + this.normaliseMatrix(matrix, sheetName); + }); + } + spliceColumns(sheetName, start, numDelete, numInsert) { + _.each(this.matrixMap, matrix => { + matrix.spliceColumns(sheetName, start, numDelete, numInsert); + this.normaliseMatrix(matrix, sheetName); + }); + } + get model() { + // To get names per cell - just iterate over all names finding cells if they exist + return _.map(this.matrixMap, (matrix, name) => this.getRanges(name, matrix)).filter(definedName => definedName.ranges.length); + } + set model(value) { + // value is [ { name, ranges }, ... ] + const matrixMap = this.matrixMap = {}; + value.forEach(definedName => { + const matrix = matrixMap[definedName.name] = new CellMatrix(); + definedName.ranges.forEach(rangeStr => { + if (rangeRegexp.test(rangeStr.split('!').pop() || '')) { + matrix.addCell(rangeStr); + } + }); + }); + } +} +module.exports = DefinedNames; + +},{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":26,"./range":10}],7:[function(require,module,exports){ +'use strict'; + +module.exports = { + ValueType: { + Null: 0, + Merge: 1, + Number: 2, + String: 3, + Date: 4, + Hyperlink: 5, + Formula: 6, + SharedString: 7, + RichText: 8, + Boolean: 9, + Error: 10 + }, + FormulaType: { + None: 0, + Master: 1, + Shared: 2 + }, + RelationshipType: { + None: 0, + OfficeDocument: 1, + Worksheet: 2, + CalcChain: 3, + SharedStrings: 4, + Styles: 5, + Theme: 6, + Hyperlink: 7 + }, + DocumentType: { + Xlsx: 1 + }, + ReadingOrder: { + LeftToRight: 1, + RightToLeft: 2 + }, + ErrorValue: { + NotApplicable: '#N/A', + Ref: '#REF!', + Name: '#NAME?', + DivZero: '#DIV/0!', + Null: '#NULL!', + Value: '#VALUE!', + Num: '#NUM!' + } +}; + +},{}],8:[function(require,module,exports){ +"use strict"; + +const colCache = require('../utils/col-cache'); +const Anchor = require('./anchor'); +class Image { + constructor(worksheet, model) { + this.worksheet = worksheet; + this.model = model; + } + get model() { + switch (this.type) { + case 'background': + return { + type: this.type, + imageId: this.imageId + }; + case 'image': + return { + type: this.type, + imageId: this.imageId, + hyperlinks: this.range.hyperlinks, + range: { + tl: this.range.tl.model, + br: this.range.br && this.range.br.model, + ext: this.range.ext, + editAs: this.range.editAs + } + }; + default: + throw new Error('Invalid Image Type'); + } + } + set model(_ref) { + let { + type, + imageId, + range, + hyperlinks + } = _ref; + this.type = type; + this.imageId = imageId; + if (type === 'image') { + if (typeof range === 'string') { + const decoded = colCache.decode(range); + this.range = { + tl: new Anchor(this.worksheet, { + col: decoded.left, + row: decoded.top + }, -1), + br: new Anchor(this.worksheet, { + col: decoded.right, + row: decoded.bottom + }, 0), + editAs: 'oneCell' + }; + } else { + this.range = { + tl: new Anchor(this.worksheet, range.tl, 0), + br: range.br && new Anchor(this.worksheet, range.br, 0), + ext: range.ext, + editAs: range.editAs, + hyperlinks: hyperlinks || range.hyperlinks + }; + } + } + } +} +module.exports = Image; + +},{"../utils/col-cache":19,"./anchor":2}],9:[function(require,module,exports){ +"use strict"; + +const _ = require('../utils/under-dash'); +class Note { + constructor(note) { + this.note = note; + } + get model() { + let value = null; + switch (typeof this.note) { + case 'string': + value = { + type: 'note', + note: { + texts: [{ + text: this.note + }] + } + }; + break; + default: + value = { + type: 'note', + note: this.note + }; + break; + } + // Suitable for all cell comments + return _.deepMerge({}, Note.DEFAULT_CONFIGS, value); + } + set model(value) { + const { + note + } = value; + const { + texts + } = note; + if (texts.length === 1 && Object.keys(texts[0]).length === 1) { + this.note = texts[0].text; + } else { + this.note = note; + } + } + static fromModel(model) { + const note = new Note(); + note.model = model; + return note; + } +} +Note.DEFAULT_CONFIGS = { + note: { + margins: { + insetmode: 'auto', + inset: [0.13, 0.13, 0.25, 0.25] + }, + protection: { + locked: 'True', + lockText: 'True' + }, + editAs: 'absolute' + } +}; +module.exports = Note; + +},{"../utils/under-dash":26}],10:[function(require,module,exports){ +"use strict"; + +const colCache = require('../utils/col-cache'); + +// used by worksheet to calculate sheet dimensions +class Range { + constructor() { + this.decode(arguments); + } + setTLBR(t, l, b, r, s) { + if (arguments.length < 4) { + // setTLBR(tl, br, s) + const tl = colCache.decodeAddress(t); + const br = colCache.decodeAddress(l); + this.model = { + top: Math.min(tl.row, br.row), + left: Math.min(tl.col, br.col), + bottom: Math.max(tl.row, br.row), + right: Math.max(tl.col, br.col), + sheetName: b + }; + this.setTLBR(tl.row, tl.col, br.row, br.col, s); + } else { + // setTLBR(t, l, b, r, s) + this.model = { + top: Math.min(t, b), + left: Math.min(l, r), + bottom: Math.max(t, b), + right: Math.max(l, r), + sheetName: s + }; + } + } + decode(argv) { + switch (argv.length) { + case 5: + // [t,l,b,r,s] + this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]); + break; + case 4: + // [t,l,b,r] + this.setTLBR(argv[0], argv[1], argv[2], argv[3]); + break; + case 3: + // [tl,br,s] + this.setTLBR(argv[0], argv[1], argv[2]); + break; + case 2: + // [tl,br] + this.setTLBR(argv[0], argv[1]); + break; + case 1: + { + const value = argv[0]; + if (value instanceof Range) { + // copy constructor + this.model = { + top: value.model.top, + left: value.model.left, + bottom: value.model.bottom, + right: value.model.right, + sheetName: value.sheetName + }; + } else if (value instanceof Array) { + // an arguments array + this.decode(value); + } else if (value.top && value.left && value.bottom && value.right) { + // a model + this.model = { + top: value.top, + left: value.left, + bottom: value.bottom, + right: value.right, + sheetName: value.sheetName + }; + } else { + // [sheetName!]tl:br + const tlbr = colCache.decodeEx(value); + if (tlbr.top) { + this.model = { + top: tlbr.top, + left: tlbr.left, + bottom: tlbr.bottom, + right: tlbr.right, + sheetName: tlbr.sheetName + }; + } else { + this.model = { + top: tlbr.row, + left: tlbr.col, + bottom: tlbr.row, + right: tlbr.col, + sheetName: tlbr.sheetName + }; + } + } + break; + } + case 0: + this.model = { + top: 0, + left: 0, + bottom: 0, + right: 0 + }; + break; + default: + throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`); + } + } + get top() { + return this.model.top || 1; + } + set top(value) { + this.model.top = value; + } + get left() { + return this.model.left || 1; + } + set left(value) { + this.model.left = value; + } + get bottom() { + return this.model.bottom || 1; + } + set bottom(value) { + this.model.bottom = value; + } + get right() { + return this.model.right || 1; + } + set right(value) { + this.model.right = value; + } + get sheetName() { + return this.model.sheetName; + } + set sheetName(value) { + this.model.sheetName = value; + } + get _serialisedSheetName() { + const { + sheetName + } = this.model; + if (sheetName) { + if (/^[a-zA-Z0-9]*$/.test(sheetName)) { + return `${sheetName}!`; + } + return `'${sheetName}'!`; + } + return ''; + } + expand(top, left, bottom, right) { + if (!this.model.top || top < this.top) this.top = top; + if (!this.model.left || left < this.left) this.left = left; + if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom; + if (!this.model.right || right > this.right) this.right = right; + } + expandRow(row) { + if (row) { + const { + dimensions, + number + } = row; + if (dimensions) { + this.expand(number, dimensions.min, number, dimensions.max); + } + } + } + expandToAddress(addressStr) { + const address = colCache.decodeEx(addressStr); + this.expand(address.row, address.col, address.row, address.col); + } + get tl() { + return colCache.n2l(this.left) + this.top; + } + get $t$l() { + return `$${colCache.n2l(this.left)}$${this.top}`; + } + get br() { + return colCache.n2l(this.right) + this.bottom; + } + get $b$r() { + return `$${colCache.n2l(this.right)}$${this.bottom}`; + } + get range() { + return `${this._serialisedSheetName + this.tl}:${this.br}`; + } + get $range() { + return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`; + } + get shortRange() { + return this.count > 1 ? this.range : this._serialisedSheetName + this.tl; + } + get $shortRange() { + return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l; + } + get count() { + return (1 + this.bottom - this.top) * (1 + this.right - this.left); + } + toString() { + return this.range; + } + intersects(other) { + if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false; + if (other.bottom < this.top) return false; + if (other.top > this.bottom) return false; + if (other.right < this.left) return false; + if (other.left > this.right) return false; + return true; + } + contains(addressStr) { + const address = colCache.decodeEx(addressStr); + return this.containsEx(address); + } + containsEx(address) { + if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false; + return address.row >= this.top && address.row <= this.bottom && address.col >= this.left && address.col <= this.right; + } + forEachAddress(cb) { + for (let col = this.left; col <= this.right; col++) { + for (let row = this.top; row <= this.bottom; row++) { + cb(colCache.encodeAddress(row, col), row, col); + } + } + } +} +module.exports = Range; + +},{"../utils/col-cache":19}],11:[function(require,module,exports){ +'use strict'; + +const _ = require('../utils/under-dash'); +const Enums = require('./enums'); +const colCache = require('../utils/col-cache'); +const Cell = require('./cell'); +class Row { + constructor(worksheet, number) { + this._worksheet = worksheet; + this._number = number; + this._cells = []; + this.style = {}; + this.outlineLevel = 0; + } + + // return the row number + get number() { + return this._number; + } + get worksheet() { + return this._worksheet; + } + + // Inform Streaming Writer that this row (and all rows before it) are complete + // and ready to write. Has no effect on Worksheet document + commit() { + this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle + } + + // helps GC by breaking cyclic references + destroy() { + delete this._worksheet; + delete this._cells; + delete this.style; + } + findCell(colNumber) { + return this._cells[colNumber - 1]; + } + + // given {address, row, col}, find or create new cell + getCellEx(address) { + let cell = this._cells[address.col - 1]; + if (!cell) { + const column = this._worksheet.getColumn(address.col); + cell = new Cell(this, column, address.address); + this._cells[address.col - 1] = cell; + } + return cell; + } + + // get cell by key, letter or column number + getCell(col) { + if (typeof col === 'string') { + // is it a key? + const column = this._worksheet.getColumnKey(col); + if (column) { + col = column.number; + } else { + col = colCache.l2n(col); + } + } + return this._cells[col - 1] || this.getCellEx({ + address: colCache.encodeAddress(this._number, col), + row: this._number, + col + }); + } + + // remove cell(s) and shift all higher cells down by count + splice(start, count) { + const nKeep = start + count; + for (var _len = arguments.length, inserts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + inserts[_key - 2] = arguments[_key]; + } + const nExpand = inserts.length - count; + const nEnd = this._cells.length; + let i; + let cSrc; + let cDst; + if (nExpand < 0) { + // remove cells + for (i = start + inserts.length; i <= nEnd; i++) { + cDst = this._cells[i - 1]; + cSrc = this._cells[i - nExpand - 1]; + if (cSrc) { + cDst = this.getCell(i); + cDst.value = cSrc.value; + cDst.style = cSrc.style; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = cSrc._comment; + } else if (cDst) { + cDst.value = null; + cDst.style = {}; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = undefined; + } + } + } else if (nExpand > 0) { + // insert new cells + for (i = nEnd; i >= nKeep; i--) { + cSrc = this._cells[i - 1]; + if (cSrc) { + cDst = this.getCell(i + nExpand); + cDst.value = cSrc.value; + cDst.style = cSrc.style; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = cSrc._comment; + } else { + this._cells[i + nExpand - 1] = undefined; + } + } + } + + // now add the new values + for (i = 0; i < inserts.length; i++) { + cDst = this.getCell(start + i); + cDst.value = inserts[i]; + cDst.style = {}; + // eslint-disable-next-line no-underscore-dangle + cDst._comment = undefined; + } + } + + // Iterate over all non-null cells in this row + eachCell(options, iteratee) { + if (!iteratee) { + iteratee = options; + options = null; + } + if (options && options.includeEmpty) { + const n = this._cells.length; + for (let i = 1; i <= n; i++) { + iteratee(this.getCell(i), i); + } + } else { + this._cells.forEach((cell, index) => { + if (cell && cell.type !== Enums.ValueType.Null) { + iteratee(cell, index + 1); + } + }); + } + } + + // =========================================================================== + // Page Breaks + addPageBreak(lft, rght) { + const ws = this._worksheet; + const left = Math.max(0, lft - 1) || 0; + const right = Math.max(0, rght - 1) || 16838; + const pb = { + id: this._number, + max: right, + man: 1 + }; + if (left) pb.min = left; + ws.rowBreaks.push(pb); + } + + // return a sparse array of cell values + get values() { + const values = []; + this._cells.forEach(cell => { + if (cell && cell.type !== Enums.ValueType.Null) { + values[cell.col] = cell.value; + } + }); + return values; + } + + // set the values by contiguous or sparse array, or by key'd object literal + set values(value) { + // this operation is not additive - any prior cells are removed + this._cells = []; + if (!value) { + // empty row + } else if (value instanceof Array) { + let offset = 0; + if (value.hasOwnProperty('0')) { + // contiguous array - start at column 1 + offset = 1; + } + value.forEach((item, index) => { + if (item !== undefined) { + this.getCellEx({ + address: colCache.encodeAddress(this._number, index + offset), + row: this._number, + col: index + offset + }).value = item; + } + }); + } else { + // assume object with column keys + this._worksheet.eachColumnKey((column, key) => { + if (value[key] !== undefined) { + this.getCellEx({ + address: colCache.encodeAddress(this._number, column.number), + row: this._number, + col: column.number + }).value = value[key]; + } + }); + } + } + + // returns true if the row includes at least one cell with a value + get hasValues() { + return _.some(this._cells, cell => cell && cell.type !== Enums.ValueType.Null); + } + get cellCount() { + return this._cells.length; + } + get actualCellCount() { + let count = 0; + this.eachCell(() => { + count++; + }); + return count; + } + + // get the min and max column number for the non-null cells in this row or null + get dimensions() { + let min = 0; + let max = 0; + this._cells.forEach(cell => { + if (cell && cell.type !== Enums.ValueType.Null) { + if (!min || min > cell.col) { + min = cell.col; + } + if (max < cell.col) { + max = cell.col; + } + } + }); + return min > 0 ? { + min, + max + } : null; + } + + // ========================================================================= + // styles + _applyStyle(name, value) { + this.style[name] = value; + this._cells.forEach(cell => { + if (cell) { + cell[name] = value; + } + }); + return value; + } + get numFmt() { + return this.style.numFmt; + } + set numFmt(value) { + this._applyStyle('numFmt', value); + } + get font() { + return this.style.font; + } + set font(value) { + this._applyStyle('font', value); + } + get alignment() { + return this.style.alignment; + } + set alignment(value) { + this._applyStyle('alignment', value); + } + get protection() { + return this.style.protection; + } + set protection(value) { + this._applyStyle('protection', value); + } + get border() { + return this.style.border; + } + set border(value) { + this._applyStyle('border', value); + } + get fill() { + return this.style.fill; + } + set fill(value) { + this._applyStyle('fill', value); + } + get hidden() { + return !!this._hidden; + } + set hidden(value) { + this._hidden = value; + } + get outlineLevel() { + return this._outlineLevel || 0; + } + set outlineLevel(value) { + this._outlineLevel = value; + } + get collapsed() { + return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow); + } + + // ========================================================================= + get model() { + const cells = []; + let min = 0; + let max = 0; + this._cells.forEach(cell => { + if (cell) { + const cellModel = cell.model; + if (cellModel) { + if (!min || min > cell.col) { + min = cell.col; + } + if (max < cell.col) { + max = cell.col; + } + cells.push(cellModel); + } + } + }); + return this.height || cells.length ? { + cells, + number: this.number, + min, + max, + height: this.height, + style: this.style, + hidden: this.hidden, + outlineLevel: this.outlineLevel, + collapsed: this.collapsed + } : null; + } + set model(value) { + if (value.number !== this._number) { + throw new Error('Invalid row number in model'); + } + this._cells = []; + let previousAddress; + value.cells.forEach(cellModel => { + switch (cellModel.type) { + case Cell.Types.Merge: + // special case - don't add this types + break; + default: + { + let address; + if (cellModel.address) { + address = colCache.decodeAddress(cellModel.address); + } else if (previousAddress) { + // This is a element without an r attribute + // Assume that it's the cell for the next column + const { + row + } = previousAddress; + const col = previousAddress.col + 1; + address = { + row, + col, + address: colCache.encodeAddress(row, col), + $col$row: `$${colCache.n2l(col)}$${row}` + }; + } + previousAddress = address; + const cell = this.getCellEx(address); + cell.model = cellModel; + break; + } + } + }); + if (value.height) { + this.height = value.height; + } else { + delete this.height; + } + this.hidden = value.hidden; + this.outlineLevel = value.outlineLevel || 0; + this.style = value.style && JSON.parse(JSON.stringify(value.style)) || {}; + } +} +module.exports = Row; + +},{"../utils/col-cache":19,"../utils/under-dash":26,"./cell":3,"./enums":7}],12:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const colCache = require('../utils/col-cache'); +class Column { + // wrapper around column model, allowing access and manipulation + constructor(table, column, index) { + this.table = table; + this.column = column; + this.index = index; + } + _set(name, value) { + this.table.cacheState(); + this.column[name] = value; + } + + /* eslint-disable lines-between-class-members */ + get name() { + return this.column.name; + } + set name(value) { + this._set('name', value); + } + get filterButton() { + return this.column.filterButton; + } + set filterButton(value) { + this.column.filterButton = value; + } + get style() { + return this.column.style; + } + set style(value) { + this.column.style = value; + } + get totalsRowLabel() { + return this.column.totalsRowLabel; + } + set totalsRowLabel(value) { + this._set('totalsRowLabel', value); + } + get totalsRowFunction() { + return this.column.totalsRowFunction; + } + set totalsRowFunction(value) { + this._set('totalsRowFunction', value); + } + get totalsRowResult() { + return this.column.totalsRowResult; + } + set totalsRowResult(value) { + this._set('totalsRowResult', value); + } + get totalsRowFormula() { + return this.column.totalsRowFormula; + } + set totalsRowFormula(value) { + this._set('totalsRowFormula', value); + } + /* eslint-enable lines-between-class-members */ +} + +class Table { + constructor(worksheet, table) { + this.worksheet = worksheet; + if (table) { + this.table = table; + // check things are ok first + this.validate(); + this.store(); + } + } + getFormula(column) { + // get the correct formula to apply to the totals row + switch (column.totalsRowFunction) { + case 'none': + return null; + case 'average': + return `SUBTOTAL(101,${this.table.name}[${column.name}])`; + case 'countNums': + return `SUBTOTAL(102,${this.table.name}[${column.name}])`; + case 'count': + return `SUBTOTAL(103,${this.table.name}[${column.name}])`; + case 'max': + return `SUBTOTAL(104,${this.table.name}[${column.name}])`; + case 'min': + return `SUBTOTAL(105,${this.table.name}[${column.name}])`; + case 'stdDev': + return `SUBTOTAL(106,${this.table.name}[${column.name}])`; + case 'var': + return `SUBTOTAL(107,${this.table.name}[${column.name}])`; + case 'sum': + return `SUBTOTAL(109,${this.table.name}[${column.name}])`; + case 'custom': + return column.totalsRowFormula; + default: + throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`); + } + } + get width() { + // width of the table + return this.table.columns.length; + } + get height() { + // height of the table data + return this.table.rows.length; + } + get filterHeight() { + // height of the table data plus optional header row + return this.height + (this.table.headerRow ? 1 : 0); + } + get tableHeight() { + // full height of the table on the sheet + return this.filterHeight + (this.table.totalsRow ? 1 : 0); + } + validate() { + const { + table + } = this; + // set defaults and check is valid + const assign = (o, name, dflt) => { + if (o[name] === undefined) { + o[name] = dflt; + } + }; + assign(table, 'headerRow', true); + assign(table, 'totalsRow', false); + assign(table, 'style', {}); + assign(table.style, 'theme', 'TableStyleMedium2'); + assign(table.style, 'showFirstColumn', false); + assign(table.style, 'showLastColumn', false); + assign(table.style, 'showRowStripes', false); + assign(table.style, 'showColumnStripes', false); + const assert = (test, message) => { + if (!test) { + throw new Error(message); + } + }; + assert(table.ref, 'Table must have ref'); + assert(table.columns, 'Table must have column definitions'); + assert(table.rows, 'Table must have row definitions'); + table.tl = colCache.decodeAddress(table.ref); + const { + row, + col + } = table.tl; + assert(row > 0, 'Table must be on valid row'); + assert(col > 0, 'Table must be on valid col'); + const { + width, + filterHeight, + tableHeight + } = this; + + // autoFilterRef is a range that includes optional headers only + table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1); + + // tableRef is a range that includes optional headers and totals + table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1); + table.columns.forEach((column, i) => { + assert(column.name, `Column ${i} must have a name`); + if (i === 0) { + assign(column, 'totalsRowLabel', 'Total'); + } else { + assign(column, 'totalsRowFunction', 'none'); + column.totalsRowFormula = this.getFormula(column); + } + }); + } + store() { + // where the table needs to store table data, headers, footers in + // the sheet... + const assignStyle = (cell, style) => { + if (style) { + Object.keys(style).forEach(key => { + cell[key] = style[key]; + }); + } + }; + const { + worksheet, + table + } = this; + const { + row, + col + } = table.tl; + let count = 0; + if (table.headerRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const { + style, + name + } = column; + const cell = r.getCell(col + j); + cell.value = name; + assignStyle(cell, style); + }); + } + table.rows.forEach(data => { + const r = worksheet.getRow(row + count++); + data.forEach((value, j) => { + const cell = r.getCell(col + j); + cell.value = value; + assignStyle(cell, table.columns[j].style); + }); + }); + if (table.totalsRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const cell = r.getCell(col + j); + if (j === 0) { + cell.value = column.totalsRowLabel; + } else { + const formula = this.getFormula(column); + if (formula) { + cell.value = { + formula: column.totalsRowFormula, + result: column.totalsRowResult + }; + } else { + cell.value = null; + } + } + assignStyle(cell, column.style); + }); + } + } + load(worksheet) { + // where the table will read necessary features from a loaded sheet + const { + table + } = this; + const { + row, + col + } = table.tl; + let count = 0; + if (table.headerRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const cell = r.getCell(col + j); + cell.value = column.name; + }); + } + table.rows.forEach(data => { + const r = worksheet.getRow(row + count++); + data.forEach((value, j) => { + const cell = r.getCell(col + j); + cell.value = value; + }); + }); + if (table.totalsRow) { + const r = worksheet.getRow(row + count++); + table.columns.forEach((column, j) => { + const cell = r.getCell(col + j); + if (j === 0) { + cell.value = column.totalsRowLabel; + } else { + const formula = this.getFormula(column); + if (formula) { + cell.value = { + formula: column.totalsRowFormula, + result: column.totalsRowResult + }; + } + } + }); + } + } + get model() { + return this.table; + } + set model(value) { + this.table = value; + } + + // ================================================================ + // TODO: Mutating methods + cacheState() { + if (!this._cache) { + this._cache = { + ref: this.ref, + width: this.width, + tableHeight: this.tableHeight + }; + } + } + commit() { + // changes may have been made that might have on-sheet effects + if (!this._cache) { + return; + } + + // check things are ok first + this.validate(); + const ref = colCache.decodeAddress(this._cache.ref); + if (this.ref !== this._cache.ref) { + // wipe out whole table footprint at previous location + for (let i = 0; i < this._cache.tableHeight; i++) { + const row = this.worksheet.getRow(ref.row + i); + for (let j = 0; j < this._cache.width; j++) { + const cell = row.getCell(ref.col + j); + cell.value = null; + } + } + } else { + // clear out below table if it has shrunk + for (let i = this.tableHeight; i < this._cache.tableHeight; i++) { + const row = this.worksheet.getRow(ref.row + i); + for (let j = 0; j < this._cache.width; j++) { + const cell = row.getCell(ref.col + j); + cell.value = null; + } + } + + // clear out to right of table if it has lost columns + for (let i = 0; i < this.tableHeight; i++) { + const row = this.worksheet.getRow(ref.row + i); + for (let j = this.width; j < this._cache.width; j++) { + const cell = row.getCell(ref.col + j); + cell.value = null; + } + } + } + this.store(); + } + addRow(values, rowNumber) { + // Add a row of data, either insert at rowNumber or append + this.cacheState(); + if (rowNumber === undefined) { + this.table.rows.push(values); + } else { + this.table.rows.splice(rowNumber, 0, values); + } + } + removeRows(rowIndex) { + let count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + // Remove a rows of data + this.cacheState(); + this.table.rows.splice(rowIndex, count); + } + getColumn(colIndex) { + const column = this.table.columns[colIndex]; + return new Column(this, column, colIndex); + } + addColumn(column, values, colIndex) { + // Add a new column, including column defn and values + // Inserts at colNumber or adds to the right + this.cacheState(); + if (colIndex === undefined) { + this.table.columns.push(column); + this.table.rows.forEach((row, i) => { + row.push(values[i]); + }); + } else { + this.table.columns.splice(colIndex, 0, column); + this.table.rows.forEach((row, i) => { + row.splice(colIndex, 0, values[i]); + }); + } + } + removeColumns(colIndex) { + let count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + // Remove a column with data + this.cacheState(); + this.table.columns.splice(colIndex, count); + this.table.rows.forEach(row => { + row.splice(colIndex, count); + }); + } + _assign(target, prop, value) { + this.cacheState(); + target[prop] = value; + } + + /* eslint-disable lines-between-class-members */ + get ref() { + return this.table.ref; + } + set ref(value) { + this._assign(this.table, 'ref', value); + } + get name() { + return this.table.name; + } + set name(value) { + this.table.name = value; + } + get displayName() { + return this.table.displyName || this.table.name; + } + set displayNamename(value) { + this.table.displayName = value; + } + get headerRow() { + return this.table.headerRow; + } + set headerRow(value) { + this._assign(this.table, 'headerRow', value); + } + get totalsRow() { + return this.table.totalsRow; + } + set totalsRow(value) { + this._assign(this.table, 'totalsRow', value); + } + get theme() { + return this.table.style.name; + } + set theme(value) { + this.table.style.name = value; + } + get showFirstColumn() { + return this.table.style.showFirstColumn; + } + set showFirstColumn(value) { + this.table.style.showFirstColumn = value; + } + get showLastColumn() { + return this.table.style.showLastColumn; + } + set showLastColumn(value) { + this.table.style.showLastColumn = value; + } + get showRowStripes() { + return this.table.style.showRowStripes; + } + set showRowStripes(value) { + this.table.style.showRowStripes = value; + } + get showColumnStripes() { + return this.table.style.showColumnStripes; + } + set showColumnStripes(value) { + this.table.style.showColumnStripes = value; + } + /* eslint-enable lines-between-class-members */ +} + +module.exports = Table; + +},{"../utils/col-cache":19}],13:[function(require,module,exports){ +'use strict'; + +const Worksheet = require('./worksheet'); +const DefinedNames = require('./defined-names'); +const XLSX = require('../xlsx/xlsx'); +const CSV = require('../csv/csv'); + +// Workbook requirements +// Load and Save from file and stream +// Access/Add/Delete individual worksheets +// Manage String table, Hyperlink table, etc. +// Manage scaffolding for contained objects to write to/read from + +class Workbook { + constructor() { + this.category = ''; + this.company = ''; + this.created = new Date(); + this.description = ''; + this.keywords = ''; + this.manager = ''; + this.modified = this.created; + this.properties = {}; + this.calcProperties = {}; + this._worksheets = []; + this.subject = ''; + this.title = ''; + this.views = []; + this.media = []; + this._definedNames = new DefinedNames(); + } + get xlsx() { + if (!this._xlsx) this._xlsx = new XLSX(this); + return this._xlsx; + } + get csv() { + if (!this._csv) this._csv = new CSV(this); + return this._csv; + } + get nextId() { + // find the next unique spot to add worksheet + for (let i = 1; i < this._worksheets.length; i++) { + if (!this._worksheets[i]) { + return i; + } + } + return this._worksheets.length || 1; + } + addWorksheet(name, options) { + const id = this.nextId; + + // if options is a color, call it tabColor (and signal deprecated message) + if (options) { + if (typeof options === 'string') { + // eslint-disable-next-line no-console + console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: "rbg value" } }'); + options = { + properties: { + tabColor: { + argb: options + } + } + }; + } else if (options.argb || options.theme || options.indexed) { + // eslint-disable-next-line no-console + console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }'); + options = { + properties: { + tabColor: options + } + }; + } + } + const lastOrderNo = this._worksheets.reduce((acc, ws) => (ws && ws.orderNo) > acc ? ws.orderNo : acc, 0); + const worksheetOptions = Object.assign({}, options, { + id, + name, + orderNo: lastOrderNo + 1, + workbook: this + }); + const worksheet = new Worksheet(worksheetOptions); + this._worksheets[id] = worksheet; + return worksheet; + } + removeWorksheetEx(worksheet) { + delete this._worksheets[worksheet.id]; + } + removeWorksheet(id) { + const worksheet = this.getWorksheet(id); + if (worksheet) { + worksheet.destroy(); + } + } + getWorksheet(id) { + if (id === undefined) { + return this._worksheets.find(Boolean); + } + if (typeof id === 'number') { + return this._worksheets[id]; + } + if (typeof id === 'string') { + return this._worksheets.find(worksheet => worksheet && worksheet.name === id); + } + return undefined; + } + get worksheets() { + // return a clone of _worksheets + return this._worksheets.slice(1).sort((a, b) => a.orderNo - b.orderNo).filter(Boolean); + } + eachSheet(iteratee) { + this.worksheets.forEach(sheet => { + iteratee(sheet, sheet.id); + }); + } + get definedNames() { + return this._definedNames; + } + clearThemes() { + // Note: themes are not an exposed feature, meddle at your peril! + this._themes = undefined; + } + addImage(image) { + // TODO: validation? + const id = this.media.length; + this.media.push(Object.assign({}, image, { + type: 'image' + })); + return id; + } + getImage(id) { + return this.media[id]; + } + get model() { + return { + creator: this.creator || 'Unknown', + lastModifiedBy: this.lastModifiedBy || 'Unknown', + lastPrinted: this.lastPrinted, + created: this.created, + modified: this.modified, + properties: this.properties, + worksheets: this.worksheets.map(worksheet => worksheet.model), + sheets: this.worksheets.map(ws => ws.model).filter(Boolean), + definedNames: this._definedNames.model, + views: this.views, + company: this.company, + manager: this.manager, + title: this.title, + subject: this.subject, + keywords: this.keywords, + category: this.category, + description: this.description, + language: this.language, + revision: this.revision, + contentStatus: this.contentStatus, + themes: this._themes, + media: this.media, + calcProperties: this.calcProperties + }; + } + set model(value) { + this.creator = value.creator; + this.lastModifiedBy = value.lastModifiedBy; + this.lastPrinted = value.lastPrinted; + this.created = value.created; + this.modified = value.modified; + this.company = value.company; + this.manager = value.manager; + this.title = value.title; + this.subject = value.subject; + this.keywords = value.keywords; + this.category = value.category; + this.description = value.description; + this.language = value.language; + this.revision = value.revision; + this.contentStatus = value.contentStatus; + this.properties = value.properties; + this.calcProperties = value.calcProperties; + this._worksheets = []; + value.worksheets.forEach(worksheetModel => { + const { + id, + name, + state + } = worksheetModel; + const orderNo = value.sheets && value.sheets.findIndex(ws => ws.id === id); + const worksheet = this._worksheets[id] = new Worksheet({ + id, + name, + orderNo, + state, + workbook: this + }); + worksheet.model = worksheetModel; + }); + this._definedNames.model = value.definedNames; + this.views = value.views; + this._themes = value.themes; + this.media = value.media || []; + } +} +module.exports = Workbook; + +},{"../csv/csv":1,"../xlsx/xlsx":144,"./defined-names":6,"./worksheet":14}],14:[function(require,module,exports){ +"use strict"; + +const _ = require('../utils/under-dash'); +const colCache = require('../utils/col-cache'); +const Range = require('./range'); +const Row = require('./row'); +const Column = require('./column'); +const Enums = require('./enums'); +const Image = require('./image'); +const Table = require('./table'); +const DataValidations = require('./data-validations'); +const Encryptor = require('../utils/encryptor'); +const { + copyStyle +} = require('../utils/copy-style'); + +// Worksheet requirements +// Operate as sheet inside workbook or standalone +// Load and Save from file and stream +// Access/Add/Delete individual cells +// Manage column widths and row heights + +class Worksheet { + constructor(options) { + options = options || {}; + this._workbook = options.workbook; + + // in a workbook, each sheet will have a number + this.id = options.id; + this.orderNo = options.orderNo; + + // and a name + this.name = options.name; + + // add a state + this.state = options.state || 'visible'; + + // rows allows access organised by row. Sparse array of arrays indexed by row-1, col + // Note: _rows is zero based. Must subtract 1 to go from cell.row to index + this._rows = []; + + // column definitions + this._columns = null; + + // column keys (addRow convenience): key ==> this._collumns index + this._keys = {}; + + // keep record of all merges + this._merges = {}; + + // record of all row and column pageBreaks + this.rowBreaks = []; + + // for tabColor, default row height, outline levels, etc + this.properties = Object.assign({}, { + defaultRowHeight: 15, + dyDescent: 55, + outlineLevelCol: 0, + outlineLevelRow: 0 + }, options.properties); + + // for all things printing + this.pageSetup = Object.assign({}, { + margins: { + left: 0.7, + right: 0.7, + top: 0.75, + bottom: 0.75, + header: 0.3, + footer: 0.3 + }, + orientation: 'portrait', + horizontalDpi: 4294967295, + verticalDpi: 4294967295, + fitToPage: !!(options.pageSetup && (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) && !options.pageSetup.scale), + pageOrder: 'downThenOver', + blackAndWhite: false, + draft: false, + cellComments: 'None', + errors: 'displayed', + scale: 100, + fitToWidth: 1, + fitToHeight: 1, + paperSize: undefined, + showRowColHeaders: false, + showGridLines: false, + firstPageNumber: undefined, + horizontalCentered: false, + verticalCentered: false, + rowBreaks: null, + colBreaks: null + }, options.pageSetup); + this.headerFooter = Object.assign({}, { + differentFirst: false, + differentOddEven: false, + oddHeader: null, + oddFooter: null, + evenHeader: null, + evenFooter: null, + firstHeader: null, + firstFooter: null + }, options.headerFooter); + this.dataValidations = new DataValidations(); + + // for freezepanes, split, zoom, gridlines, etc + this.views = options.views || []; + this.autoFilter = options.autoFilter || null; + + // for images, etc + this._media = []; + + // worksheet protection + this.sheetProtection = null; + + // for tables + this.tables = {}; + this.conditionalFormattings = []; + } + get name() { + return this._name; + } + set name(name) { + if (name === undefined) { + name = `sheet${this.id}`; + } + if (this._name === name) return; + if (typeof name !== 'string') { + throw new Error('The name has to be a string.'); + } + if (name === '') { + throw new Error('The name can\'t be empty.'); + } + if (name === 'History') { + throw new Error('The name "History" is protected. Please use a different name.'); + } + + // Illegal character in worksheet name: asterisk (*), question mark (?), + // colon (:), forward slash (/ \), or bracket ([]) + if (/[*?:/\\[\]]/.test(name)) { + throw new Error(`Worksheet name ${name} cannot include any of the following characters: * ? : \\ / [ ]`); + } + if (/(^')|('$)/.test(name)) { + throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${name}`); + } + if (name && name.length > 31) { + // eslint-disable-next-line no-console + console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`); + name = name.substring(0, 31); + } + if (this._workbook._worksheets.find(ws => ws && ws.name.toLowerCase() === name.toLowerCase())) { + throw new Error(`Worksheet name already exists: ${name}`); + } + this._name = name; + } + get workbook() { + return this._workbook; + } + + // when you're done with this worksheet, call this to remove from workbook + destroy() { + this._workbook.removeWorksheetEx(this); + } + + // Get the bounding range of the cells in this worksheet + get dimensions() { + const dimensions = new Range(); + this._rows.forEach(row => { + if (row) { + const rowDims = row.dimensions; + if (rowDims) { + dimensions.expand(row.number, rowDims.min, row.number, rowDims.max); + } + } + }); + return dimensions; + } + + // ========================================================================= + // Columns + + // get the current columns array. + get columns() { + return this._columns; + } + + // set the columns from an array of column definitions. + // Note: any headers defined will overwrite existing values. + set columns(value) { + // calculate max header row count + this._headerRowCount = value.reduce((pv, cv) => { + const headerCount = cv.header && 1 || cv.headers && cv.headers.length || 0; + return Math.max(pv, headerCount); + }, 0); + + // construct Column objects + let count = 1; + const columns = this._columns = []; + value.forEach(defn => { + const column = new Column(this, count++, false); + columns.push(column); + column.defn = defn; + }); + } + getColumnKey(key) { + return this._keys[key]; + } + setColumnKey(key, value) { + this._keys[key] = value; + } + deleteColumnKey(key) { + delete this._keys[key]; + } + eachColumnKey(f) { + _.each(this._keys, f); + } + + // get a single column by col number. If it doesn't exist, create it and any gaps before it + getColumn(c) { + if (typeof c === 'string') { + // if it matches a key'd column, return that + const col = this._keys[c]; + if (col) return col; + + // otherwise, assume letter + c = colCache.l2n(c); + } + if (!this._columns) { + this._columns = []; + } + if (c > this._columns.length) { + let n = this._columns.length + 1; + while (n <= c) { + this._columns.push(new Column(this, n++)); + } + } + return this._columns[c - 1]; + } + spliceColumns(start, count) { + const rows = this._rows; + const nRows = rows.length; + for (var _len = arguments.length, inserts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + inserts[_key - 2] = arguments[_key]; + } + if (inserts.length > 0) { + // must iterate over all rows whether they exist yet or not + for (let i = 0; i < nRows; i++) { + const rowArguments = [start, count]; + // eslint-disable-next-line no-loop-func + inserts.forEach(insert => { + rowArguments.push(insert[i] || null); + }); + const row = this.getRow(i + 1); + // eslint-disable-next-line prefer-spread + row.splice.apply(row, rowArguments); + } + } else { + // nothing to insert, so just splice all rows + this._rows.forEach(r => { + if (r) { + r.splice(start, count); + } + }); + } + + // splice column definitions + const nExpand = inserts.length - count; + const nKeep = start + count; + const nEnd = this._columns.length; + if (nExpand < 0) { + for (let i = start + inserts.length; i <= nEnd; i++) { + this.getColumn(i).defn = this.getColumn(i - nExpand).defn; + } + } else if (nExpand > 0) { + for (let i = nEnd; i >= nKeep; i--) { + this.getColumn(i + nExpand).defn = this.getColumn(i).defn; + } + } + for (let i = start; i < start + inserts.length; i++) { + this.getColumn(i).defn = null; + } + + // account for defined names + this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length); + } + get lastColumn() { + return this.getColumn(this.columnCount); + } + get columnCount() { + let maxCount = 0; + this.eachRow(row => { + maxCount = Math.max(maxCount, row.cellCount); + }); + return maxCount; + } + get actualColumnCount() { + // performance nightmare - for each row, counts all the columns used + const counts = []; + let count = 0; + this.eachRow(row => { + row.eachCell(_ref => { + let { + col + } = _ref; + if (!counts[col]) { + counts[col] = true; + count++; + } + }); + }); + return count; + } + + // ========================================================================= + // Rows + + _commitRow() { + // nop - allows streaming reader to fill a document + } + get _lastRowNumber() { + // need to cope with results of splice + const rows = this._rows; + let n = rows.length; + while (n > 0 && rows[n - 1] === undefined) { + n--; + } + return n; + } + get _nextRow() { + return this._lastRowNumber + 1; + } + get lastRow() { + if (this._rows.length) { + return this._rows[this._rows.length - 1]; + } + return undefined; + } + + // find a row (if exists) by row number + findRow(r) { + return this._rows[r - 1]; + } + + // find multiple rows (if exists) by row number + findRows(start, length) { + return this._rows.slice(start - 1, start - 1 + length); + } + get rowCount() { + return this._lastRowNumber; + } + get actualRowCount() { + // counts actual rows that have actual data + let count = 0; + this.eachRow(() => { + count++; + }); + return count; + } + + // get a row by row number. + getRow(r) { + let row = this._rows[r - 1]; + if (!row) { + row = this._rows[r - 1] = new Row(this, r); + } + return row; + } + + // get multiple rows by row number. + getRows(start, length) { + if (length < 1) return undefined; + const rows = []; + for (let i = start; i < start + length; i++) { + rows.push(this.getRow(i)); + } + return rows; + } + addRow(value) { + let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n'; + const rowNo = this._nextRow; + const row = this.getRow(rowNo); + row.values = value; + this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n'); + return row; + } + addRows(value) { + let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n'; + const rows = []; + value.forEach(row => { + rows.push(this.addRow(row, style)); + }); + return rows; + } + insertRow(pos, value) { + let style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'n'; + this.spliceRows(pos, 0, value); + this._setStyleOption(pos, style); + return this.getRow(pos); + } + insertRows(pos, values) { + let style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'n'; + this.spliceRows(pos, 0, ...values); + if (style !== 'n') { + // copy over the styles + for (let i = 0; i < values.length; i++) { + if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) { + this._copyStyle(values.length + pos + i, pos + i, style[1] === '+'); + } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) { + this._copyStyle(pos - 1, pos + i, style[1] === '+'); + } + } + } + return this.getRows(pos, values.length); + } + + // set row at position to same style as of either pervious row (option 'i') or next row (option 'o') + _setStyleOption(pos) { + let style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'n'; + if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) { + this._copyStyle(pos + 1, pos, style[1] === '+'); + } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) { + this._copyStyle(pos - 1, pos, style[1] === '+'); + } + } + _copyStyle(src, dest) { + let styleEmpty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + const rSrc = this.getRow(src); + const rDst = this.getRow(dest); + rDst.style = copyStyle(rSrc.style); + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: styleEmpty + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = copyStyle(cell.style); + }); + rDst.height = rSrc.height; + } + duplicateRow(rowNum, count) { + let insert = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + // create count duplicates of rowNum + // either inserting new or overwriting existing rows + + const rSrc = this._rows[rowNum - 1]; + const inserts = new Array(count).fill(rSrc.values); + this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts); + + // now copy styles... + for (let i = 0; i < count; i++) { + const rDst = this._rows[rowNum + i]; + rDst.style = rSrc.style; + rDst.height = rSrc.height; + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: true + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = cell.style; + }); + } + } + spliceRows(start, count) { + // same problem as row.splice, except worse. + const nKeep = start + count; + for (var _len2 = arguments.length, inserts = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + inserts[_key2 - 2] = arguments[_key2]; + } + const nInserts = inserts.length; + const nExpand = nInserts - count; + const nEnd = this._rows.length; + let i; + let rSrc; + if (nExpand < 0) { + // remove rows + if (start === nEnd) { + this._rows[nEnd - 1] = undefined; + } + for (i = nKeep; i <= nEnd; i++) { + rSrc = this._rows[i - 1]; + if (rSrc) { + const rDst = this.getRow(i + nExpand); + rDst.values = rSrc.values; + rDst.style = rSrc.style; + rDst.height = rSrc.height; + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: true + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = cell.style; + }); + this._rows[i - 1] = undefined; + } else { + this._rows[i + nExpand - 1] = undefined; + } + } + } else if (nExpand > 0) { + // insert new cells + for (i = nEnd; i >= nKeep; i--) { + rSrc = this._rows[i - 1]; + if (rSrc) { + const rDst = this.getRow(i + nExpand); + rDst.values = rSrc.values; + rDst.style = rSrc.style; + rDst.height = rSrc.height; + // eslint-disable-next-line no-loop-func + rSrc.eachCell({ + includeEmpty: true + }, (cell, colNumber) => { + rDst.getCell(colNumber).style = cell.style; + + // remerge cells accounting for insert offset + if (cell._value.constructor.name === 'MergeValue') { + const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber); + const prevMaster = cell._value._master; + const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number); + cellToBeMerged.merge(newMaster); + } + }); + } else { + this._rows[i + nExpand - 1] = undefined; + } + } + } + + // now copy over the new values + for (i = 0; i < nInserts; i++) { + const rDst = this.getRow(start + i); + rDst.style = {}; + rDst.values = inserts[i]; + } + + // account for defined names + this.workbook.definedNames.spliceRows(this.name, start, count, nInserts); + } + + // iterate over every row in the worksheet, including maybe empty rows + eachRow(options, iteratee) { + if (!iteratee) { + iteratee = options; + options = undefined; + } + if (options && options.includeEmpty) { + const n = this._rows.length; + for (let i = 1; i <= n; i++) { + iteratee(this.getRow(i), i); + } + } else { + this._rows.forEach(row => { + if (row && row.hasValues) { + iteratee(row, row.number); + } + }); + } + } + + // return all rows as sparse array + getSheetValues() { + const rows = []; + this._rows.forEach(row => { + if (row) { + rows[row.number] = row.values; + } + }); + return rows; + } + + // ========================================================================= + // Cells + + // returns the cell at [r,c] or address given by r. If not found, return undefined + findCell(r, c) { + const address = colCache.getAddress(r, c); + const row = this._rows[address.row - 1]; + return row ? row.findCell(address.col) : undefined; + } + + // return the cell at [r,c] or address given by r. If not found, create a new one. + getCell(r, c) { + const address = colCache.getAddress(r, c); + const row = this.getRow(address.row); + return row.getCellEx(address); + } + + // ========================================================================= + // Merge + + // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell + mergeCells() { + for (var _len3 = arguments.length, cells = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + cells[_key3] = arguments[_key3]; + } + const dimensions = new Range(cells); + this._mergeCellsInternal(dimensions); + } + mergeCellsWithoutStyle() { + for (var _len4 = arguments.length, cells = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + cells[_key4] = arguments[_key4]; + } + const dimensions = new Range(cells); + this._mergeCellsInternal(dimensions, true); + } + _mergeCellsInternal(dimensions, ignoreStyle) { + // check cells aren't already merged + _.each(this._merges, merge => { + if (merge.intersects(dimensions)) { + throw new Error('Cannot merge already merged cells'); + } + }); + + // apply merge + const master = this.getCell(dimensions.top, dimensions.left); + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + for (let j = dimensions.left; j <= dimensions.right; j++) { + // merge all but the master cell + if (i > dimensions.top || j > dimensions.left) { + this.getCell(i, j).merge(master, ignoreStyle); + } + } + } + + // index merge + this._merges[master.address] = dimensions; + } + _unMergeMaster(master) { + // master is always top left of a rectangle + const merge = this._merges[master.address]; + if (merge) { + for (let i = merge.top; i <= merge.bottom; i++) { + for (let j = merge.left; j <= merge.right; j++) { + this.getCell(i, j).unmerge(); + } + } + delete this._merges[master.address]; + } + } + get hasMerges() { + // return true if this._merges has a merge object + return _.some(this._merges, Boolean); + } + + // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge, + // un-merge the group. Note this function can affect multiple merges and merge-blocks are + // atomic - either they're all merged or all un-merged. + unMergeCells() { + for (var _len5 = arguments.length, cells = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + cells[_key5] = arguments[_key5]; + } + const dimensions = new Range(cells); + + // find any cells in that range and unmerge them + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + for (let j = dimensions.left; j <= dimensions.right; j++) { + const cell = this.findCell(i, j); + if (cell) { + if (cell.type === Enums.ValueType.Merge) { + // this cell merges to another master + this._unMergeMaster(cell.master); + } else if (this._merges[cell.address]) { + // this cell is a master + this._unMergeMaster(cell); + } + } + } + } + } + + // =========================================================================== + // Shared/Array Formula + fillFormula(range, formula, results) { + let shareType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'shared'; + // Define formula for top-left cell and share to rest + const decoded = colCache.decode(range); + const { + top, + left, + bottom, + right + } = decoded; + const width = right - left + 1; + const masterAddress = colCache.encodeAddress(top, left); + const isShared = shareType === 'shared'; + + // work out result accessor + let getResult; + if (typeof results === 'function') { + getResult = results; + } else if (Array.isArray(results)) { + if (Array.isArray(results[0])) { + getResult = (row, col) => results[row - top][col - left]; + } else { + // eslint-disable-next-line no-mixed-operators + getResult = (row, col) => results[(row - top) * width + (col - left)]; + } + } else { + getResult = () => undefined; + } + let first = true; + for (let r = top; r <= bottom; r++) { + for (let c = left; c <= right; c++) { + if (first) { + this.getCell(r, c).value = { + shareType, + formula, + ref: range, + result: getResult(r, c) + }; + first = false; + } else { + this.getCell(r, c).value = isShared ? { + sharedFormula: masterAddress, + result: getResult(r, c) + } : getResult(r, c); + } + } + } + } + + // ========================================================================= + // Images + addImage(imageId, range) { + const model = { + type: 'image', + imageId, + range + }; + this._media.push(new Image(this, model)); + } + getImages() { + return this._media.filter(m => m.type === 'image'); + } + addBackgroundImage(imageId) { + const model = { + type: 'background', + imageId + }; + this._media.push(new Image(this, model)); + } + getBackgroundImageId() { + const image = this._media.find(m => m.type === 'background'); + return image && image.imageId; + } + + // ========================================================================= + // Worksheet Protection + protect(password, options) { + // TODO: make this function truly async + // perhaps marshal to worker thread or something + return new Promise(resolve => { + this.sheetProtection = { + sheet: true + }; + if (options && 'spinCount' in options) { + // force spinCount to be integer >= 0 + options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000; + } + if (password) { + this.sheetProtection.algorithmName = 'SHA-512'; + this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64'); + this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount + this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(password, 'SHA512', this.sheetProtection.saltValue, this.sheetProtection.spinCount); + } + if (options) { + this.sheetProtection = Object.assign(this.sheetProtection, options); + if (!password && 'spinCount' in options) { + delete this.sheetProtection.spinCount; + } + } + resolve(); + }); + } + unprotect() { + this.sheetProtection = null; + } + + // ========================================================================= + // Tables + addTable(model) { + const table = new Table(this, model); + this.tables[model.name] = table; + return table; + } + getTable(name) { + return this.tables[name]; + } + removeTable(name) { + delete this.tables[name]; + } + getTables() { + return Object.values(this.tables); + } + + // =========================================================================== + // Conditional Formatting + addConditionalFormatting(cf) { + this.conditionalFormattings.push(cf); + } + removeConditionalFormatting(filter) { + if (typeof filter === 'number') { + this.conditionalFormattings.splice(filter, 1); + } else if (filter instanceof Function) { + this.conditionalFormattings = this.conditionalFormattings.filter(filter); + } else { + this.conditionalFormattings = []; + } + } + + // =========================================================================== + // Deprecated + get tabColor() { + // eslint-disable-next-line no-console + console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor'); + return this.properties.tabColor; + } + set tabColor(value) { + // eslint-disable-next-line no-console + console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor'); + this.properties.tabColor = value; + } + + // =========================================================================== + // Model + + get model() { + const model = { + id: this.id, + name: this.name, + dataValidations: this.dataValidations.model, + properties: this.properties, + state: this.state, + pageSetup: this.pageSetup, + headerFooter: this.headerFooter, + rowBreaks: this.rowBreaks, + views: this.views, + autoFilter: this.autoFilter, + media: this._media.map(medium => medium.model), + sheetProtection: this.sheetProtection, + tables: Object.values(this.tables).map(table => table.model), + conditionalFormattings: this.conditionalFormattings + }; + + // ================================================= + // columns + model.cols = Column.toModel(this.columns); + + // ========================================================== + // Rows + const rows = model.rows = []; + const dimensions = model.dimensions = new Range(); + this._rows.forEach(row => { + const rowModel = row && row.model; + if (rowModel) { + dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max); + rows.push(rowModel); + } + }); + + // ========================================================== + // Merges + model.merges = []; + _.each(this._merges, merge => { + model.merges.push(merge.range); + }); + return model; + } + _parseRows(model) { + this._rows = []; + model.rows.forEach(rowModel => { + const row = new Row(this, rowModel.number); + this._rows[row.number - 1] = row; + row.model = rowModel; + }); + } + _parseMergeCells(model) { + _.each(model.mergeCells, merge => { + // Do not merge styles when importing an Excel file + // since each cell may have different styles intentionally. + this.mergeCellsWithoutStyle(merge); + }); + } + set model(value) { + this.name = value.name; + this._columns = Column.fromModel(this, value.cols); + this._parseRows(value); + this._parseMergeCells(value); + this.dataValidations = new DataValidations(value.dataValidations); + this.properties = value.properties; + this.pageSetup = value.pageSetup; + this.headerFooter = value.headerFooter; + this.views = value.views; + this.autoFilter = value.autoFilter; + this._media = value.media.map(medium => new Image(this, medium)); + this.sheetProtection = value.sheetProtection; + this.tables = value.tables.reduce((tables, table) => { + const t = new Table(); + t.model = table; + tables[table.name] = t; + return tables; + }, {}); + this.conditionalFormattings = value.conditionalFormattings; + } +} +module.exports = Worksheet; + +},{"../utils/col-cache":19,"../utils/copy-style":20,"../utils/encryptor":21,"../utils/under-dash":26,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(require,module,exports){ +"use strict"; + +/* eslint-disable import/no-extraneous-dependencies,node/no-unpublished-require */ +require('core-js/modules/es.promise'); +require('core-js/modules/es.promise.finally'); +require('core-js/modules/es.object.assign'); +require('core-js/modules/es.object.keys'); +require('core-js/modules/es.object.values'); +require('core-js/modules/es.symbol'); +require('core-js/modules/es.symbol.async-iterator'); +// required by core-js/modules/es.promise Promise.all +require('core-js/modules/es.array.iterator'); +// required by node_modules/saxes/saxes.js SaxesParser.captureTo +require('core-js/modules/es.array.includes'); +// required by lib/doc/workbook.js Workbook.model +require('core-js/modules/es.array.find-index'); +// required by lib/doc/workbook.js Workbook.addWorksheet and Workbook.getWorksheet +require('core-js/modules/es.array.find'); +// required by node_modules/saxes/saxes.js SaxesParser.getCode10 +require('core-js/modules/es.string.from-code-point'); +// required by lib/xlsx/xform/sheet/data-validations-xform.js DataValidationsXform.parseClose +require('core-js/modules/es.string.includes'); +// required by lib/utils/utils.js utils.validInt and lib/csv/csv.js CSV.read +require('core-js/modules/es.number.is-nan'); +require('regenerator-runtime/runtime'); +const ExcelJS = { + Workbook: require('./doc/workbook') +}; + +// Object.assign mono-fill +const Enums = require('./doc/enums'); +Object.keys(Enums).forEach(key => { + ExcelJS[key] = Enums[key]; +}); +module.exports = ExcelJS; + +},{"./doc/enums":7,"./doc/workbook":13,"core-js/modules/es.array.find":359,"core-js/modules/es.array.find-index":358,"core-js/modules/es.array.includes":360,"core-js/modules/es.array.iterator":361,"core-js/modules/es.number.is-nan":363,"core-js/modules/es.object.assign":364,"core-js/modules/es.object.keys":366,"core-js/modules/es.object.values":367,"core-js/modules/es.promise":372,"core-js/modules/es.promise.finally":371,"core-js/modules/es.string.from-code-point":376,"core-js/modules/es.string.includes":377,"core-js/modules/es.symbol":381,"core-js/modules/es.symbol.async-iterator":378,"regenerator-runtime/runtime":492}],16:[function(require,module,exports){ +"use strict"; + +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8'); +function bufferToString(chunk) { + if (typeof chunk === 'string') { + return chunk; + } + if (textDecoder) { + return textDecoder.decode(chunk); + } + return chunk.toString(); +} +exports.bufferToString = bufferToString; + +},{}],17:[function(require,module,exports){ +"use strict"; + +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8'); +const { + Buffer +} = require('buffer'); +function stringToBuffer(str) { + if (typeof str !== 'string') { + return str; + } + if (textEncoder) { + return Buffer.from(textEncoder.encode(str).buffer); + } + return Buffer.from(str); +} +exports.stringToBuffer = stringToBuffer; + +},{"buffer":220}],18:[function(require,module,exports){ +"use strict"; + +const _ = require('./under-dash'); +const colCache = require('./col-cache'); +class CellMatrix { + constructor(template) { + this.template = template; + this.sheets = {}; + } + addCell(addressStr) { + this.addCellEx(colCache.decodeEx(addressStr)); + } + getCell(addressStr) { + return this.findCellEx(colCache.decodeEx(addressStr), true); + } + findCell(addressStr) { + return this.findCellEx(colCache.decodeEx(addressStr), false); + } + findCellAt(sheetName, rowNumber, colNumber) { + const sheet = this.sheets[sheetName]; + const row = sheet && sheet[rowNumber]; + return row && row[colNumber]; + } + addCellEx(address) { + if (address.top) { + for (let row = address.top; row <= address.bottom; row++) { + for (let col = address.left; col <= address.right; col++) { + this.getCellAt(address.sheetName, row, col); + } + } + } else { + this.findCellEx(address, true); + } + } + getCellEx(address) { + return this.findCellEx(address, true); + } + findCellEx(address, create) { + const sheet = this.findSheet(address, create); + const row = this.findSheetRow(sheet, address, create); + return this.findRowCell(row, address, create); + } + getCellAt(sheetName, rowNumber, colNumber) { + const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []); + const row = sheet[rowNumber] || (sheet[rowNumber] = []); + const cell = row[colNumber] || (row[colNumber] = { + sheetName, + address: colCache.n2l(colNumber) + rowNumber, + row: rowNumber, + col: colNumber + }); + return cell; + } + removeCellEx(address) { + const sheet = this.findSheet(address); + if (!sheet) { + return; + } + const row = this.findSheetRow(sheet, address); + if (!row) { + return; + } + delete row[address.col]; + } + forEachInSheet(sheetName, callback) { + const sheet = this.sheets[sheetName]; + if (sheet) { + sheet.forEach((row, rowNumber) => { + if (row) { + row.forEach((cell, colNumber) => { + if (cell) { + callback(cell, rowNumber, colNumber); + } + }); + } + }); + } + } + forEach(callback) { + _.each(this.sheets, (sheet, sheetName) => { + this.forEachInSheet(sheetName, callback); + }); + } + map(callback) { + const results = []; + this.forEach(cell => { + results.push(callback(cell)); + }); + return results; + } + findSheet(address, create) { + const name = address.sheetName; + if (this.sheets[name]) { + return this.sheets[name]; + } + if (create) { + return this.sheets[name] = []; + } + return undefined; + } + findSheetRow(sheet, address, create) { + const { + row + } = address; + if (sheet && sheet[row]) { + return sheet[row]; + } + if (create) { + return sheet[row] = []; + } + return undefined; + } + findRowCell(row, address, create) { + const { + col + } = address; + if (row && row[col]) { + return row[col]; + } + if (create) { + return row[col] = this.template ? Object.assign(address, JSON.parse(JSON.stringify(this.template))) : address; + } + return undefined; + } + spliceRows(sheetName, start, numDelete, numInsert) { + const sheet = this.sheets[sheetName]; + if (sheet) { + const inserts = []; + for (let i = 0; i < numInsert; i++) { + inserts.push([]); + } + sheet.splice(start, numDelete, ...inserts); + } + } + spliceColumns(sheetName, start, numDelete, numInsert) { + const sheet = this.sheets[sheetName]; + if (sheet) { + const inserts = []; + for (let i = 0; i < numInsert; i++) { + inserts.push(null); + } + _.each(sheet, row => { + row.splice(start, numDelete, ...inserts); + }); + } + } +} +module.exports = CellMatrix; + +},{"./col-cache":19,"./under-dash":26}],19:[function(require,module,exports){ +"use strict"; + +const addressRegex = /^[A-Z]+\d+$/; +// ========================================================================= +// Column Letter to Number conversion +const colCache = { + _dictionary: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'], + _l2nFill: 0, + _l2n: {}, + _n2l: [], + _level(n) { + if (n <= 26) { + return 1; + } + if (n <= 26 * 26) { + return 2; + } + return 3; + }, + _fill(level) { + let c; + let v; + let l1; + let l2; + let l3; + let n = 1; + if (level >= 4) { + throw new Error('Out of bounds. Excel supports columns from 1 to 16384'); + } + if (this._l2nFill < 1 && level >= 1) { + while (n <= 26) { + c = this._dictionary[n - 1]; + this._n2l[n] = c; + this._l2n[c] = n; + n++; + } + this._l2nFill = 1; + } + if (this._l2nFill < 2 && level >= 2) { + n = 27; + while (n <= 26 + 26 * 26) { + v = n - (26 + 1); + l1 = v % 26; + l2 = Math.floor(v / 26); + c = this._dictionary[l2] + this._dictionary[l1]; + this._n2l[n] = c; + this._l2n[c] = n; + n++; + } + this._l2nFill = 2; + } + if (this._l2nFill < 3 && level >= 3) { + n = 26 + 26 * 26 + 1; + while (n <= 16384) { + v = n - (26 * 26 + 26 + 1); + l1 = v % 26; + l2 = Math.floor(v / 26) % 26; + l3 = Math.floor(v / (26 * 26)); + c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1]; + this._n2l[n] = c; + this._l2n[c] = n; + n++; + } + this._l2nFill = 3; + } + }, + l2n(l) { + if (!this._l2n[l]) { + this._fill(l.length); + } + if (!this._l2n[l]) { + throw new Error(`Out of bounds. Invalid column letter: ${l}`); + } + return this._l2n[l]; + }, + n2l(n) { + if (n < 1 || n > 16384) { + throw new Error(`${n} is out of bounds. Excel supports columns from 1 to 16384`); + } + if (!this._n2l[n]) { + this._fill(this._level(n)); + } + return this._n2l[n]; + }, + // ========================================================================= + // Address processing + _hash: {}, + // check if value looks like an address + validateAddress(value) { + if (!addressRegex.test(value)) { + throw new Error(`Invalid Address: ${value}`); + } + return true; + }, + // convert address string into structure + decodeAddress(value) { + const addr = value.length < 5 && this._hash[value]; + if (addr) { + return addr; + } + let hasCol = false; + let col = ''; + let colNumber = 0; + let hasRow = false; + let row = ''; + let rowNumber = 0; + for (let i = 0, char; i < value.length; i++) { + char = value.charCodeAt(i); + // col should before row + if (!hasRow && char >= 65 && char <= 90) { + // 65 = 'A'.charCodeAt(0) + // 90 = 'Z'.charCodeAt(0) + hasCol = true; + col += value[i]; + // colNumber starts from 1 + colNumber = colNumber * 26 + char - 64; + } else if (char >= 48 && char <= 57) { + // 48 = '0'.charCodeAt(0) + // 57 = '9'.charCodeAt(0) + hasRow = true; + row += value[i]; + // rowNumber starts from 0 + rowNumber = rowNumber * 10 + char - 48; + } else if (hasRow && hasCol && char !== 36) { + // 36 = '$'.charCodeAt(0) + break; + } + } + if (!hasCol) { + colNumber = undefined; + } else if (colNumber > 16384) { + throw new Error(`Out of bounds. Invalid column letter: ${col}`); + } + if (!hasRow) { + rowNumber = undefined; + } + + // in case $row$col + value = col + row; + const address = { + address: value, + col: colNumber, + row: rowNumber, + $col$row: `$${col}$${row}` + }; + + // mem fix - cache only the tl 100x100 square + if (colNumber <= 100 && rowNumber <= 100) { + this._hash[value] = address; + this._hash[address.$col$row] = address; + } + return address; + }, + // convert r,c into structure (if only 1 arg, assume r is address string) + getAddress(r, c) { + if (c) { + const address = this.n2l(c) + r; + return this.decodeAddress(address); + } + return this.decodeAddress(r); + }, + // convert [address], [tl:br] into address structures + decode(value) { + const parts = value.split(':'); + if (parts.length === 2) { + const tl = this.decodeAddress(parts[0]); + const br = this.decodeAddress(parts[1]); + const result = { + top: Math.min(tl.row, br.row), + left: Math.min(tl.col, br.col), + bottom: Math.max(tl.row, br.row), + right: Math.max(tl.col, br.col) + }; + // reconstruct tl, br and dimensions + result.tl = this.n2l(result.left) + result.top; + result.br = this.n2l(result.right) + result.bottom; + result.dimensions = `${result.tl}:${result.br}`; + return result; + } + return this.decodeAddress(value); + }, + // convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures + decodeEx(value) { + const groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/); + const sheetName = groups[1] || groups[2]; // Qouted and unqouted groups + const reference = groups[3]; // Remaining address + + const parts = reference.split(':'); + if (parts.length > 1) { + let tl = this.decodeAddress(parts[0]); + let br = this.decodeAddress(parts[1]); + const top = Math.min(tl.row, br.row); + const left = Math.min(tl.col, br.col); + const bottom = Math.max(tl.row, br.row); + const right = Math.max(tl.col, br.col); + tl = this.n2l(left) + top; + br = this.n2l(right) + bottom; + return { + top, + left, + bottom, + right, + sheetName, + tl: { + address: tl, + col: left, + row: top, + $col$row: `$${this.n2l(left)}$${top}`, + sheetName + }, + br: { + address: br, + col: right, + row: bottom, + $col$row: `$${this.n2l(right)}$${bottom}`, + sheetName + }, + dimensions: `${tl}:${br}` + }; + } + if (reference.startsWith('#')) { + return sheetName ? { + sheetName, + error: reference + } : { + error: reference + }; + } + const address = this.decodeAddress(reference); + return sheetName ? { + sheetName, + ...address + } : address; + }, + // convert row,col into address string + encodeAddress(row, col) { + return colCache.n2l(col) + row; + }, + // convert row,col into string address or t,l,b,r into range + encode() { + switch (arguments.length) { + case 2: + return colCache.encodeAddress(arguments[0], arguments[1]); + case 4: + return `${colCache.encodeAddress(arguments[0], arguments[1])}:${colCache.encodeAddress(arguments[2], arguments[3])}`; + default: + throw new Error('Can only encode with 2 or 4 arguments'); + } + }, + // return true if address is contained within range + inRange(range, address) { + const [left, top,, right, bottom] = range; + const [col, row] = address; + return col >= left && col <= right && row >= top && row <= bottom; + } +}; +module.exports = colCache; + +},{}],20:[function(require,module,exports){ +"use strict"; + +const oneDepthCopy = (obj, nestKeys) => ({ + ...obj, + ...nestKeys.reduce((memo, key) => { + if (obj[key]) memo[key] = { + ...obj[key] + }; + return memo; + }, {}) +}); +const setIfExists = function (src, dst, key) { + let nestKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + if (src[key]) dst[key] = oneDepthCopy(src[key], nestKeys); +}; +const isEmptyObj = obj => Object.keys(obj).length === 0; +const copyStyle = style => { + if (!style) return style; + if (isEmptyObj(style)) return {}; + const copied = { + ...style + }; + setIfExists(style, copied, 'font', ['color']); + setIfExists(style, copied, 'alignment'); + setIfExists(style, copied, 'protection'); + if (style.border) { + setIfExists(style, copied, 'border'); + setIfExists(style.border, copied.border, 'top', ['color']); + setIfExists(style.border, copied.border, 'left', ['color']); + setIfExists(style.border, copied.border, 'bottom', ['color']); + setIfExists(style.border, copied.border, 'right', ['color']); + setIfExists(style.border, copied.border, 'diagonal', ['color']); + } + if (style.fill) { + setIfExists(style, copied, 'fill', ['fgColor', 'bgColor', 'center']); + if (style.fill.stops) { + copied.fill.stops = style.fill.stops.map(s => oneDepthCopy(s, ['color'])); + } + } + return copied; +}; +exports.copyStyle = copyStyle; + +},{}],21:[function(require,module,exports){ +(function (Buffer){(function (){ +'use strict'; + +const crypto = require('crypto'); +const Encryptor = { + /** + * Calculate a hash of the concatenated buffers with the given algorithm. + * @param {string} algorithm - The hash algorithm. + * @returns {Buffer} The hash + */ + hash(algorithm) { + const hash = crypto.createHash(algorithm); + for (var _len = arguments.length, buffers = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + buffers[_key - 1] = arguments[_key]; + } + hash.update(Buffer.concat(buffers)); + return hash.digest(); + }, + /** + * Convert a password into an encryption key + * @param {string} password - The password + * @param {string} hashAlgorithm - The hash algoritm + * @param {string} saltValue - The salt value + * @param {number} spinCount - The spin count + * @param {number} keyBits - The length of the key in bits + * @param {Buffer} blockKey - The block key + * @returns {Buffer} The encryption key + */ + convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) { + hashAlgorithm = hashAlgorithm.toLowerCase(); + const hashes = crypto.getHashes(); + if (hashes.indexOf(hashAlgorithm) < 0) { + throw new Error(`Hash algorithm '${hashAlgorithm}' not supported!`); + } + + // Password must be in unicode buffer + const passwordBuffer = Buffer.from(password, 'utf16le'); + // Generate the initial hash + let key = this.hash(hashAlgorithm, Buffer.from(saltValue, 'base64'), passwordBuffer); + // Now regenerate until spin count + for (let i = 0; i < spinCount; i++) { + const iterator = Buffer.alloc(4); + // this is the 'special' element of Excel password hashing + // that stops us from using crypto.pbkdf2() + iterator.writeUInt32LE(i, 0); + key = this.hash(hashAlgorithm, key, iterator); + } + return key.toString('base64'); + }, + /** + * Generates cryptographically strong pseudo-random data. + * @param size The size argument is a number indicating the number of bytes to generate. + */ + randomBytes(size) { + return crypto.randomBytes(size); + } +}; +module.exports = Encryptor; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"buffer":220,"crypto":390}],22:[function(require,module,exports){ +"use strict"; + +const { + SaxesParser +} = require('saxes'); +const { + PassThrough +} = require('readable-stream'); +const { + bufferToString +} = require('./browser-buffer-decode'); +module.exports = async function* (iterable) { + // TODO: Remove once node v8 is deprecated + // Detect and upgrade old streams + if (iterable.pipe && !iterable[Symbol.asyncIterator]) { + iterable = iterable.pipe(new PassThrough()); + } + const saxesParser = new SaxesParser(); + let error; + saxesParser.on('error', err => { + error = err; + }); + let events = []; + saxesParser.on('opentag', value => events.push({ + eventType: 'opentag', + value + })); + saxesParser.on('text', value => events.push({ + eventType: 'text', + value + })); + saxesParser.on('closetag', value => events.push({ + eventType: 'closetag', + value + })); + for await (const chunk of iterable) { + saxesParser.write(bufferToString(chunk)); + // saxesParser.write and saxesParser.on() are synchronous, + // so we can only reach the below line once all events have been emitted + if (error) throw error; + // As a performance optimization, we gather all events instead of passing + // them one by one, which would cause each event to go through the event queue + yield events; + events = []; + } +}; + +},{"./browser-buffer-decode":16,"readable-stream":491,"saxes":496}],23:[function(require,module,exports){ +"use strict"; + +const colCache = require('./col-cache'); + +// const cellRefRegex = /(([a-z_\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i; +const replacementCandidateRx = /(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi; +const CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i; +function slideFormula(formula, fromCell, toCell) { + const offset = colCache.decode(fromCell); + const to = colCache.decode(toCell); + return formula.replace(replacementCandidateRx, (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => { + if (trailingParen) { + return refMatch; + } + const match = CRrx.exec(addrPart); + if (match) { + const colDollar = match[1]; + const colStr = match[2].toUpperCase(); + const rowDollar = match[3]; + const rowStr = match[4]; + if (colStr.length > 3 || colStr.length === 3 && colStr > 'XFD') { + // > XFD is the highest col number in excel 2007 and beyond, so this is a named range + return refMatch; + } + let col = colCache.l2n(colStr); + let row = parseInt(rowStr, 10); + if (!colDollar) { + col += to.col - offset.col; + } + if (!rowDollar) { + row += to.row - offset.row; + } + const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row; + return res; + } + return refMatch; + }); +} +module.exports = { + slideFormula +}; + +},{"./col-cache":19}],24:[function(require,module,exports){ +(function (process,Buffer){(function (){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const Stream = require('readable-stream'); +const utils = require('./utils'); +const StringBuf = require('./string-buf'); + +// ============================================================================= +// data chunks - encapsulating incoming data +class StringChunk { + constructor(data, encoding) { + this._data = data; + this._encoding = encoding; + } + get length() { + return this.toBuffer().length; + } + + // copy to target buffer + copy(target, targetOffset, offset, length) { + return this.toBuffer().copy(target, targetOffset, offset, length); + } + toBuffer() { + if (!this._buffer) { + this._buffer = Buffer.from(this._data, this._encoding); + } + return this._buffer; + } +} +class StringBufChunk { + constructor(data) { + this._data = data; + } + get length() { + return this._data.length; + } + + // copy to target buffer + copy(target, targetOffset, offset, length) { + // eslint-disable-next-line no-underscore-dangle + return this._data._buf.copy(target, targetOffset, offset, length); + } + toBuffer() { + return this._data.toBuffer(); + } +} +class BufferChunk { + constructor(data) { + this._data = data; + } + get length() { + return this._data.length; + } + + // copy to target buffer + copy(target, targetOffset, offset, length) { + this._data.copy(target, targetOffset, offset, length); + } + toBuffer() { + return this._data; + } +} + +// ============================================================================= +// ReadWriteBuf - a single buffer supporting simple read-write +class ReadWriteBuf { + constructor(size) { + this.size = size; + // the buffer + this.buffer = Buffer.alloc(size); + // read index + this.iRead = 0; + // write index + this.iWrite = 0; + } + toBuffer() { + if (this.iRead === 0 && this.iWrite === this.size) { + return this.buffer; + } + const buf = Buffer.alloc(this.iWrite - this.iRead); + this.buffer.copy(buf, 0, this.iRead, this.iWrite); + return buf; + } + get length() { + return this.iWrite - this.iRead; + } + get eod() { + return this.iRead === this.iWrite; + } + get full() { + return this.iWrite === this.size; + } + read(size) { + let buf; + // read size bytes from buffer and return buffer + if (size === 0) { + // special case - return null if no data requested + return null; + } + if (size === undefined || size >= this.length) { + // if no size specified or size is at least what we have then return all of the bytes + buf = this.toBuffer(); + this.iRead = this.iWrite; + return buf; + } + + // otherwise return a chunk + buf = Buffer.alloc(size); + this.buffer.copy(buf, 0, this.iRead, size); + this.iRead += size; + return buf; + } + write(chunk, offset, length) { + // write as many bytes from data from optional source offset + // and return number of bytes written + const size = Math.min(length, this.size - this.iWrite); + chunk.copy(this.buffer, this.iWrite, offset, offset + size); + this.iWrite += size; + return size; + } +} + +// ============================================================================= +// StreamBuf - a multi-purpose read-write stream +// As MemBuf - write as much data as you like. Then call toBuffer() to consolidate +// As StreamHub - pipe to multiple writables +// As readable stream - feed data into the writable part and have some other code read from it. + +// Note: Not sure why but StreamBuf does not like JS "class" sugar. It fails the +// integration tests +const StreamBuf = function (options) { + options = options || {}; + this.bufSize = options.bufSize || 1024 * 1024; + this.buffers = []; + + // batch mode fills a buffer completely before passing the data on + // to pipes or 'readable' event listeners + this.batch = options.batch || false; + this.corked = false; + // where in the current writable buffer we're up to + this.inPos = 0; + + // where in the current readable buffer we've read up to + this.outPos = 0; + + // consuming pipe streams go here + this.pipes = []; + + // controls emit('data') + this.paused = false; + this.encoding = null; +}; +utils.inherits(StreamBuf, Stream.Duplex, { + toBuffer() { + switch (this.buffers.length) { + case 0: + return null; + case 1: + return this.buffers[0].toBuffer(); + default: + return Buffer.concat(this.buffers.map(rwBuf => rwBuf.toBuffer())); + } + }, + // writable + // event drain - if write returns false (which it won't), indicates when safe to write again. + // finish - end() has been called + // pipe(src) - pipe() has been called on readable + // unpipe(src) - unpipe() has been called on readable + // error - duh + + _getWritableBuffer() { + if (this.buffers.length) { + const last = this.buffers[this.buffers.length - 1]; + if (!last.full) { + return last; + } + } + const buf = new ReadWriteBuf(this.bufSize); + this.buffers.push(buf); + return buf; + }, + async _pipe(chunk) { + const write = function (pipe) { + return new Promise(resolve => { + pipe.write(chunk.toBuffer(), () => { + resolve(); + }); + }); + }; + await Promise.all(this.pipes.map(write)); + }, + _writeToBuffers(chunk) { + let inPos = 0; + const inLen = chunk.length; + while (inPos < inLen) { + // find writable buffer + const buffer = this._getWritableBuffer(); + + // write some data + inPos += buffer.write(chunk, inPos, inLen - inPos); + } + }, + async write(data, encoding, callback) { + if (encoding instanceof Function) { + callback = encoding; + encoding = 'utf8'; + } + callback = callback || utils.nop; + + // encapsulate data into a chunk + let chunk; + if (data instanceof StringBuf) { + chunk = new StringBufChunk(data); + } else if (data instanceof Buffer) { + chunk = new BufferChunk(data); + } else if (typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer) { + chunk = new StringChunk(data, encoding); + } else { + throw new Error('Chunk must be one of type String, Buffer or StringBuf.'); + } + + // now, do something with the chunk + if (this.pipes.length) { + if (this.batch) { + this._writeToBuffers(chunk); + while (!this.corked && this.buffers.length > 1) { + this._pipe(this.buffers.shift()); + } + } else if (!this.corked) { + await this._pipe(chunk); + callback(); + } else { + this._writeToBuffers(chunk); + process.nextTick(callback); + } + } else { + if (!this.paused) { + this.emit('data', chunk.toBuffer()); + } + this._writeToBuffers(chunk); + this.emit('readable'); + } + return true; + }, + cork() { + this.corked = true; + }, + _flush( /* destination */ + ) { + // if we have comsumers... + if (this.pipes.length) { + // and there's stuff not written + while (this.buffers.length) { + this._pipe(this.buffers.shift()); + } + } + }, + uncork() { + this.corked = false; + this._flush(); + }, + end(chunk, encoding, callback) { + const writeComplete = error => { + if (error) { + callback(error); + } else { + this._flush(); + this.pipes.forEach(pipe => { + pipe.end(); + }); + this.emit('finish'); + } + }; + if (chunk) { + this.write(chunk, encoding, writeComplete); + } else { + writeComplete(); + } + }, + // readable + // event readable - some data is now available + // event data - switch to flowing mode - feeds chunks to handler + // event end - no more data + // event close - optional, indicates upstream close + // event error - duh + read(size) { + let buffers; + // read min(buffer, size || infinity) + if (size) { + buffers = []; + while (size && this.buffers.length && !this.buffers[0].eod) { + const first = this.buffers[0]; + const buffer = first.read(size); + size -= buffer.length; + buffers.push(buffer); + if (first.eod && first.full) { + this.buffers.shift(); + } + } + return Buffer.concat(buffers); + } + buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean); + this.buffers = []; + return Buffer.concat(buffers); + }, + setEncoding(encoding) { + // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects + this.encoding = encoding; + }, + pause() { + this.paused = true; + }, + resume() { + this.paused = false; + }, + isPaused() { + return !!this.paused; + }, + pipe(destination) { + // add destination to pipe list & write current buffer + this.pipes.push(destination); + if (!this.paused && this.buffers.length) { + this.end(); + } + }, + unpipe(destination) { + // remove destination from pipe list + this.pipes = this.pipes.filter(pipe => pipe !== destination); + }, + unshift( /* chunk */ + ) { + // some numpty has read some data that's not for them and they want to put it back! + // Might implement this some day + throw new Error('Not Implemented'); + }, + wrap( /* stream */ + ) { + // not implemented + throw new Error('Not Implemented'); + } +}); +module.exports = StreamBuf; + +}).call(this)}).call(this,require('_process'),require("buffer").Buffer) + +},{"./string-buf":25,"./utils":27,"_process":467,"buffer":220,"readable-stream":491}],25:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +// StringBuf - a way to keep string memory operations to a minimum +// while building the strings for the xml files +class StringBuf { + constructor(options) { + this._buf = Buffer.alloc(options && options.size || 16384); + this._encoding = options && options.encoding || 'utf8'; + + // where in the buffer we are at + this._inPos = 0; + + // for use by toBuffer() + this._buffer = undefined; + } + get length() { + return this._inPos; + } + get capacity() { + return this._buf.length; + } + get buffer() { + return this._buf; + } + toBuffer() { + // return the current data as a single enclosing buffer + if (!this._buffer) { + this._buffer = Buffer.alloc(this.length); + this._buf.copy(this._buffer, 0, 0, this.length); + } + return this._buffer; + } + reset(position) { + position = position || 0; + this._buffer = undefined; + this._inPos = position; + } + _grow(min) { + let size = this._buf.length * 2; + while (size < min) { + size *= 2; + } + const buf = Buffer.alloc(size); + this._buf.copy(buf, 0); + this._buf = buf; + } + addText(text) { + this._buffer = undefined; + let inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding); + + // if we've hit (or nearing capacity), grow the buf + while (inPos >= this._buf.length - 4) { + this._grow(this._inPos + text.length); + + // keep trying to write until we've completely written the text + inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding); + } + this._inPos = inPos; + } + addStringBuf(inBuf) { + if (inBuf.length) { + this._buffer = undefined; + if (this.length + inBuf.length > this.capacity) { + this._grow(this.length + inBuf.length); + } + // eslint-disable-next-line no-underscore-dangle + inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length); + this._inPos += inBuf.length; + } + } +} +module.exports = StringBuf; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"buffer":220}],26:[function(require,module,exports){ +"use strict"; + +const { + toString +} = Object.prototype; +const escapeHtmlRegex = /["&<>]/; +const _ = { + each: function each(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + obj.forEach(cb); + } else { + Object.keys(obj).forEach(key => { + cb(obj[key], key); + }); + } + } + }, + some: function some(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + return obj.some(cb); + } + return Object.keys(obj).some(key => cb(obj[key], key)); + } + return false; + }, + every: function every(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + return obj.every(cb); + } + return Object.keys(obj).every(key => cb(obj[key], key)); + } + return true; + }, + map: function map(obj, cb) { + if (obj) { + if (Array.isArray(obj)) { + return obj.map(cb); + } + return Object.keys(obj).map(key => cb(obj[key], key)); + } + return []; + }, + keyBy(a, p) { + return a.reduce((o, v) => { + o[v[p]] = v; + return o; + }, {}); + }, + isEqual: function isEqual(a, b) { + const aType = typeof a; + const bType = typeof b; + const aArray = Array.isArray(a); + const bArray = Array.isArray(b); + let keys; + if (aType !== bType) { + return false; + } + switch (typeof a) { + case 'object': + if (aArray || bArray) { + if (aArray && bArray) { + return a.length === b.length && a.every((aValue, index) => { + const bValue = b[index]; + return _.isEqual(aValue, bValue); + }); + } + return false; + } + if (a === null || b === null) { + return a === b; + } + + // Compare object keys and values + keys = Object.keys(a); + if (Object.keys(b).length !== keys.length) { + return false; + } + for (const key of keys) { + if (!b.hasOwnProperty(key)) { + return false; + } + } + return _.every(a, (aValue, key) => { + const bValue = b[key]; + return _.isEqual(aValue, bValue); + }); + default: + return a === b; + } + }, + escapeHtml(html) { + const regexResult = escapeHtmlRegex.exec(html); + if (!regexResult) return html; + let result = ''; + let escape = ''; + let lastIndex = 0; + let i = regexResult.index; + for (; i < html.length; i++) { + switch (html.charAt(i)) { + case '"': + escape = '"'; + break; + case '&': + escape = '&'; + break; + case '\'': + escape = '''; + break; + case '<': + escape = '<'; + break; + case '>': + escape = '>'; + break; + default: + continue; + } + if (lastIndex !== i) result += html.substring(lastIndex, i); + lastIndex = i + 1; + result += escape; + } + if (lastIndex !== i) return result + html.substring(lastIndex, i); + return result; + }, + strcmp(a, b) { + if (a < b) return -1; + if (a > b) return 1; + return 0; + }, + isUndefined(val) { + return toString.call(val) === '[object Undefined]'; + }, + isObject(val) { + return toString.call(val) === '[object Object]'; + }, + deepMerge() { + const target = arguments[0] || {}; + const { + length + } = arguments; + // eslint-disable-next-line one-var + let src, clone, copyIsArray; + function assignValue(val, key) { + src = target[key]; + copyIsArray = Array.isArray(val); + if (_.isObject(val) || copyIsArray) { + if (copyIsArray) { + copyIsArray = false; + clone = src && Array.isArray(src) ? src : []; + } else { + clone = src && _.isObject(src) ? src : {}; + } + target[key] = _.deepMerge(clone, val); + } else if (!_.isUndefined(val)) { + target[key] = val; + } + } + for (let i = 0; i < length; i++) { + _.each(arguments[i], assignValue); + } + return target; + } +}; +module.exports = _; + +},{}],27:[function(require,module,exports){ +(function (global,setImmediate){(function (){ +"use strict"; + +const fs = require('fs'); + +// useful stuff +const inherits = function (cls, superCtor, statics, prototype) { + // eslint-disable-next-line no-underscore-dangle + cls.super_ = superCtor; + if (!prototype) { + prototype = statics; + statics = null; + } + if (statics) { + Object.keys(statics).forEach(i => { + Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i)); + }); + } + const properties = { + constructor: { + value: cls, + enumerable: false, + writable: false, + configurable: true + } + }; + if (prototype) { + Object.keys(prototype).forEach(i => { + properties[i] = Object.getOwnPropertyDescriptor(prototype, i); + }); + } + cls.prototype = Object.create(superCtor.prototype, properties); +}; + +// eslint-disable-next-line no-control-regex +const xmlDecodeRegex = /[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/; +const utils = { + nop() {}, + promiseImmediate(value) { + return new Promise(resolve => { + if (global.setImmediate) { + setImmediate(() => { + resolve(value); + }); + } else { + // poorman's setImmediate - must wait at least 1ms + setTimeout(() => { + resolve(value); + }, 1); + } + }); + }, + inherits, + dateToExcel(d, date1904) { + return 25569 + d.getTime() / (24 * 3600 * 1000) - (date1904 ? 1462 : 0); + }, + excelToDate(v, date1904) { + const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000); + return new Date(millisecondSinceEpoch); + }, + parsePath(filepath) { + const last = filepath.lastIndexOf('/'); + return { + path: filepath.substring(0, last), + name: filepath.substring(last + 1) + }; + }, + getRelsPath(filepath) { + const path = utils.parsePath(filepath); + return `${path.path}/_rels/${path.name}.rels`; + }, + xmlEncode(text) { + const regexResult = xmlDecodeRegex.exec(text); + if (!regexResult) return text; + let result = ''; + let escape = ''; + let lastIndex = 0; + let i = regexResult.index; + for (; i < text.length; i++) { + const charCode = text.charCodeAt(i); + switch (charCode) { + case 34: + // " + escape = '"'; + break; + case 38: + // & + escape = '&'; + break; + case 39: + // ' + escape = '''; + break; + case 60: + // < + escape = '<'; + break; + case 62: + // > + escape = '>'; + break; + case 127: + escape = ''; + break; + default: + { + if (charCode <= 31 && (charCode <= 8 || charCode >= 11 && charCode !== 13)) { + escape = ''; + break; + } + continue; + } + } + if (lastIndex !== i) result += text.substring(lastIndex, i); + lastIndex = i + 1; + if (escape) result += escape; + } + if (lastIndex !== i) return result + text.substring(lastIndex, i); + return result; + }, + xmlDecode(text) { + return text.replace(/&([a-z]*);/g, c => { + switch (c) { + case '<': + return '<'; + case '>': + return '>'; + case '&': + return '&'; + case ''': + return '\''; + case '"': + return '"'; + default: + return c; + } + }); + }, + validInt(value) { + const i = parseInt(value, 10); + return !Number.isNaN(i) ? i : 0; + }, + isDateFmt(fmt) { + if (!fmt) { + return false; + } + + // must remove all chars inside quotes and [] + fmt = fmt.replace(/\[[^\]]*]/g, ''); + fmt = fmt.replace(/"[^"]*"/g, ''); + // then check for date formatting chars + const result = fmt.match(/[ymdhMsb]+/) !== null; + return result; + }, + fs: { + exists(path) { + return new Promise(resolve => { + fs.access(path, fs.constants.F_OK, err => { + resolve(!err); + }); + }); + } + }, + toIsoDateString(dt) { + return dt.toIsoString().subsstr(0, 10); + }, + parseBoolean(value) { + return value === true || value === 'true' || value === 1 || value === '1'; + } +}; +module.exports = utils; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) + +},{"fs":216,"timers":523}],28:[function(require,module,exports){ +"use strict"; + +const _ = require('./under-dash'); +const utils = require('./utils'); + +// constants +const OPEN_ANGLE = '<'; +const CLOSE_ANGLE = '>'; +const OPEN_ANGLE_SLASH = ''; +function pushAttribute(xml, name, value) { + xml.push(` ${name}="${utils.xmlEncode(value.toString())}"`); +} +function pushAttributes(xml, attributes) { + if (attributes) { + const tmp = []; + _.each(attributes, (value, name) => { + if (value !== undefined) { + pushAttribute(tmp, name, value); + } + }); + xml.push(tmp.join("")); + } +} +class XmlStream { + constructor() { + this._xml = []; + this._stack = []; + this._rollbacks = []; + } + get tos() { + return this._stack.length ? this._stack[this._stack.length - 1] : undefined; + } + get cursor() { + // handy way to track whether anything has been added + return this._xml.length; + } + openXml(docAttributes) { + const xml = this._xml; + // + xml.push('\n'); + } + openNode(name, attributes) { + const parent = this.tos; + const xml = this._xml; + if (parent && this.open) { + xml.push(CLOSE_ANGLE); + } + this._stack.push(name); + + // start streaming node + xml.push(OPEN_ANGLE); + xml.push(name); + pushAttributes(xml, attributes); + this.leaf = true; + this.open = true; + } + addAttribute(name, value) { + if (!this.open) { + throw new Error('Cannot write attributes to node if it is not open'); + } + if (value !== undefined) { + pushAttribute(this._xml, name, value); + } + } + addAttributes(attrs) { + if (!this.open) { + throw new Error('Cannot write attributes to node if it is not open'); + } + pushAttributes(this._xml, attrs); + } + writeText(text) { + const xml = this._xml; + if (this.open) { + xml.push(CLOSE_ANGLE); + this.open = false; + } + this.leaf = false; + xml.push(utils.xmlEncode(text.toString())); + } + writeXml(xml) { + if (this.open) { + this._xml.push(CLOSE_ANGLE); + this.open = false; + } + this.leaf = false; + this._xml.push(xml); + } + closeNode() { + const node = this._stack.pop(); + const xml = this._xml; + if (this.leaf) { + xml.push(CLOSE_SLASH_ANGLE); + } else { + xml.push(OPEN_ANGLE_SLASH); + xml.push(node); + xml.push(CLOSE_ANGLE); + } + this.open = false; + this.leaf = false; + } + leafNode(name, attributes, text) { + this.openNode(name, attributes); + if (text !== undefined) { + // zeros need to be written + this.writeText(text); + } + this.closeNode(); + } + closeAll() { + while (this._stack.length) { + this.closeNode(); + } + } + addRollback() { + this._rollbacks.push({ + xml: this._xml.length, + stack: this._stack.length, + leaf: this.leaf, + open: this.open + }); + return this.cursor; + } + commit() { + this._rollbacks.pop(); + } + rollback() { + const r = this._rollbacks.pop(); + if (this._xml.length > r.xml) { + this._xml.splice(r.xml, this._xml.length - r.xml); + } + if (this._stack.length > r.stack) { + this._stack.splice(r.stack, this._stack.length - r.stack); + } + this.leaf = r.leaf; + this.open = r.open; + } + get xml() { + this.closeAll(); + return this._xml.join(''); + } +} +XmlStream.StdDocAttributes = { + version: '1.0', + encoding: 'UTF-8', + standalone: 'yes' +}; +module.exports = XmlStream; + +},{"./under-dash":26,"./utils":27}],29:[function(require,module,exports){ +(function (process){(function (){ +"use strict"; + +const events = require('events'); +const JSZip = require('jszip'); +const StreamBuf = require('./stream-buf'); +const { + stringToBuffer +} = require('./browser-buffer-encode'); + +// ============================================================================= +// The ZipWriter class +// Packs streamed data into an output zip stream +class ZipWriter extends events.EventEmitter { + constructor(options) { + super(); + this.options = Object.assign({ + type: 'nodebuffer', + compression: 'DEFLATE' + }, options); + this.zip = new JSZip(); + this.stream = new StreamBuf(); + } + append(data, options) { + if (options.hasOwnProperty('base64') && options.base64) { + this.zip.file(options.name, data, { + base64: true + }); + } else { + // https://www.npmjs.com/package/process + if (process.browser && typeof data === 'string') { + // use TextEncoder in browser + data = stringToBuffer(data); + } + this.zip.file(options.name, data); + } + } + async finalize() { + const content = await this.zip.generateAsync(this.options); + this.stream.end(content); + this.emit('finish'); + } + + // ========================================================================== + // Stream.Readable interface + read(size) { + return this.stream.read(size); + } + setEncoding(encoding) { + return this.stream.setEncoding(encoding); + } + pause() { + return this.stream.pause(); + } + resume() { + return this.stream.resume(); + } + isPaused() { + return this.stream.isPaused(); + } + pipe(destination, options) { + return this.stream.pipe(destination, options); + } + unpipe(destination) { + return this.stream.unpipe(destination); + } + unshift(chunk) { + return this.stream.unshift(chunk); + } + wrap(stream) { + return this.stream.wrap(stream); + } +} + +// ============================================================================= + +module.exports = { + ZipWriter +}; + +}).call(this)}).call(this,require('_process')) + +},{"./browser-buffer-encode":17,"./stream-buf":24,"_process":467,"events":422,"jszip":441}],30:[function(require,module,exports){ +"use strict"; + +module.exports = { + 0: { + f: 'General' + }, + 1: { + f: '0' + }, + 2: { + f: '0.00' + }, + 3: { + f: '#,##0' + }, + 4: { + f: '#,##0.00' + }, + 9: { + f: '0%' + }, + 10: { + f: '0.00%' + }, + 11: { + f: '0.00E+00' + }, + 12: { + f: '# ?/?' + }, + 13: { + f: '# ??/??' + }, + 14: { + f: 'mm-dd-yy' + }, + 15: { + f: 'd-mmm-yy' + }, + 16: { + f: 'd-mmm' + }, + 17: { + f: 'mmm-yy' + }, + 18: { + f: 'h:mm AM/PM' + }, + 19: { + f: 'h:mm:ss AM/PM' + }, + 20: { + f: 'h:mm' + }, + 21: { + f: 'h:mm:ss' + }, + 22: { + f: 'm/d/yy "h":mm' + }, + 27: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 28: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 29: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 30: { + 'zh-tw': 'm/d/yy ', + 'zh-cn': 'm-d-yy', + 'ja-jp': 'm/d/yy', + 'ko-kr': 'mm-dd-yy' + }, + 31: { + 'zh-tw': 'yyyy"年"m"月"d"日"', + 'zh-cn': 'yyyy"年"m"月"d"日"', + 'ja-jp': 'yyyy"年"m"月"d"日"', + 'ko-kr': 'yyyy"년" mm"월" dd"일"' + }, + 32: { + 'zh-tw': 'hh"時"mm"分"', + 'zh-cn': 'h"时"mm"分"', + 'ja-jp': 'h"時"mm"分"', + 'ko-kr': 'h"시" mm"분"' + }, + 33: { + 'zh-tw': 'hh"時"mm"分"ss"秒"', + 'zh-cn': 'h"时"mm"分"ss"秒"', + 'ja-jp': 'h"時"mm"分"ss"秒"', + 'ko-kr': 'h"시" mm"분" ss"초"' + }, + 34: { + 'zh-tw': '上午/下午 hh"時"mm"分"', + 'zh-cn': '上午/下午 h"时"mm"分"', + 'ja-jp': 'yyyy"年"m"月"', + 'ko-kr': 'yyyy-mm-dd' + }, + 35: { + 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"', + 'zh-cn': '上午/下午 h"时"mm"分"ss"秒"', + 'ja-jp': 'm"月"d"日"', + 'ko-kr': 'yyyy-mm-dd' + }, + 36: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 37: { + f: '#,##0 ;(#,##0)' + }, + 38: { + f: '#,##0 ;[Red](#,##0)' + }, + 39: { + f: '#,##0.00 ;(#,##0.00)' + }, + 40: { + f: '#,##0.00 ;[Red](#,##0.00)' + }, + 45: { + f: 'mm:ss' + }, + 46: { + f: '[h]:mm:ss' + }, + 47: { + f: 'mmss.0' + }, + 48: { + f: '##0.0E+0' + }, + 49: { + f: '@' + }, + 50: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 51: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 52: { + 'zh-tw': '上午/下午 hh"時"mm"分"', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': 'yyyy"年"m"月"', + 'ko-kr': 'yyyy-mm-dd' + }, + 53: { + 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': 'm"月"d"日"', + 'ko-kr': 'yyyy-mm-dd' + }, + 54: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 55: { + 'zh-tw': '上午/下午 hh"時"mm"分"', + 'zh-cn': '上午/下午 h"时"mm"分"', + 'ja-jp': 'yyyy"年"m"月"', + 'ko-kr': 'yyyy-mm-dd' + }, + 56: { + 'zh-tw': '上午/下午 hh"時"mm"分"ss"秒"', + 'zh-cn': '上午/下午 h"时"mm"分"ss"秒"', + 'ja-jp': 'm"月"d"日"', + 'ko-kr': 'yyyy-mm-dd' + }, + 57: { + 'zh-tw': '[$-404]e/m/d', + 'zh-cn': 'yyyy"年"m"月"', + 'ja-jp': '[$-411]ge.m.d', + 'ko-kr': 'yyyy"年" mm"月" dd"日"' + }, + 58: { + 'zh-tw': '[$-404]e"年"m"月"d"日"', + 'zh-cn': 'm"月"d"日"', + 'ja-jp': '[$-411]ggge"年"m"月"d"日"', + 'ko-kr': 'mm-dd' + }, + 59: { + 'th-th': 't0' + }, + 60: { + 'th-th': 't0.00' + }, + 61: { + 'th-th': 't#,##0' + }, + 62: { + 'th-th': 't#,##0.00' + }, + 67: { + 'th-th': 't0%' + }, + 68: { + 'th-th': 't0.00%' + }, + 69: { + 'th-th': 't# ?/?' + }, + 70: { + 'th-th': 't# ??/??' + }, + 81: { + 'th-th': 'd/m/bb' + } +}; + +},{}],31:[function(require,module,exports){ +'use strict'; + +module.exports = { + OfficeDocument: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', + Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain', + SharedStrings: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', + Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + CoreProperties: 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + ExtenderProperties: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties', + Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', + VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', + Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table' +}; + +},{}],32:[function(require,module,exports){ +"use strict"; + +const parseSax = require('../../utils/parse-sax'); +const XmlStream = require('../../utils/xml-stream'); + +/* 'virtual' methods used as a form of documentation */ +/* eslint-disable class-methods-use-this */ + +// Base class for Xforms +class BaseXform { + // constructor(/* model, name */) {} + + // ============================================================ + // Virtual Interface + prepare( /* model, options */ + ) { + // optional preparation (mutation) of model so it is ready for write + } + render( /* xmlStream, model */ + ) { + // convert model to xml + } + parseOpen(node) { + // XML node opened + } + parseText(text) { + // chunk of text encountered for current node + } + parseClose(name) { + // XML node closed + } + reconcile(model, options) { + // optional post-parse step (opposite to prepare) + } + + // ============================================================ + reset() { + // to make sure parses don't bleed to next iteration + this.model = null; + + // if we have a map - reset them too + if (this.map) { + Object.values(this.map).forEach(xform => { + if (xform instanceof BaseXform) { + xform.reset(); + } else if (xform.xform) { + xform.xform.reset(); + } + }); + } + } + mergeModel(obj) { + // set obj's props to this.model + this.model = Object.assign(this.model || {}, obj); + } + async parse(saxParser) { + for await (const events of saxParser) { + for (const { + eventType, + value + } of events) { + if (eventType === 'opentag') { + this.parseOpen(value); + } else if (eventType === 'text') { + this.parseText(value); + } else if (eventType === 'closetag') { + if (!this.parseClose(value.name)) { + return this.model; + } + } + } + } + return this.model; + } + async parseStream(stream) { + return this.parse(parseSax(stream)); + } + get xml() { + // convenience function to get the xml of this.model + // useful for manager types that are built during the prepare phase + return this.toXml(this.model); + } + toXml(model) { + const xmlStream = new XmlStream(); + this.render(xmlStream, model); + return xmlStream.xml; + } + + // ============================================================ + // Useful Utilities + static toAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (value === undefined) { + if (always) { + return dflt; + } + } else if (always || value !== dflt) { + return value.toString(); + } + return undefined; + } + static toStringAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return BaseXform.toAttribute(value, dflt, always); + } + static toStringValue(attr, dflt) { + return attr === undefined ? dflt : attr; + } + static toBoolAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (value === undefined) { + if (always) { + return dflt; + } + } else if (always || value !== dflt) { + return value ? '1' : '0'; + } + return undefined; + } + static toBoolValue(attr, dflt) { + return attr === undefined ? dflt : attr === '1'; + } + static toIntAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return BaseXform.toAttribute(value, dflt, always); + } + static toIntValue(attr, dflt) { + return attr === undefined ? dflt : parseInt(attr, 10); + } + static toFloatAttribute(value, dflt) { + let always = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return BaseXform.toAttribute(value, dflt, always); + } + static toFloatValue(attr, dflt) { + return attr === undefined ? dflt : parseFloat(attr); + } +} +module.exports = BaseXform; + +},{"../../utils/parse-sax":22,"../../utils/xml-stream":28}],33:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const colCache = require('../../../utils/col-cache'); +class DefinedNamesXform extends BaseXform { + render(xmlStream, model) { + // + // name.ranges.join(',') + // name.ranges.join(',') + // + xmlStream.openNode('definedName', { + name: model.name, + localSheetId: model.localSheetId + }); + xmlStream.writeText(model.ranges.join(',')); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case 'definedName': + this._parsedName = node.attributes.name; + this._parsedLocalSheetId = node.attributes.localSheetId; + this._parsedText = []; + return true; + default: + return false; + } + } + parseText(text) { + this._parsedText.push(text); + } + parseClose() { + this.model = { + name: this._parsedName, + ranges: extractRanges(this._parsedText.join('')) + }; + if (this._parsedLocalSheetId !== undefined) { + this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10); + } + return false; + } +} +function isValidRange(range) { + try { + colCache.decodeEx(range); + return true; + } catch (err) { + return false; + } +} +function extractRanges(parsedText) { + const ranges = []; + let quotesOpened = false; + let last = ''; + parsedText.split(',').forEach(item => { + if (!item) { + return; + } + const quotes = (item.match(/'/g) || []).length; + if (!quotes) { + if (quotesOpened) { + last += `${item},`; + } else if (isValidRange(item)) { + ranges.push(item); + } + return; + } + const quotesEven = quotes % 2 === 0; + if (!quotesOpened && quotesEven && isValidRange(item)) { + ranges.push(item); + } else if (quotesOpened && !quotesEven) { + quotesOpened = false; + if (isValidRange(last + item)) { + ranges.push(last + item); + } + last = ''; + } else { + quotesOpened = true; + last += `${item},`; + } + }); + return ranges; +} +module.exports = DefinedNamesXform; + +},{"../../../utils/col-cache":19,"../base-xform":32}],34:[function(require,module,exports){ +"use strict"; + +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +class WorksheetXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('sheet', { + sheetId: model.id, + name: model.name, + state: model.state, + 'r:id': model.rId + }); + } + parseOpen(node) { + if (node.name === 'sheet') { + this.model = { + name: utils.xmlDecode(node.attributes.name), + id: parseInt(node.attributes.sheetId, 10), + state: node.attributes.state, + rId: node.attributes['r:id'] + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorksheetXform; + +},{"../../../utils/utils":27,"../base-xform":32}],35:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class WorkbookCalcPropertiesXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('calcPr', { + calcId: 171027, + fullCalcOnLoad: model.fullCalcOnLoad ? 1 : undefined + }); + } + parseOpen(node) { + if (node.name === 'calcPr') { + this.model = {}; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorkbookCalcPropertiesXform; + +},{"../base-xform":32}],36:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class WorksheetPropertiesXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('workbookPr', { + date1904: model.date1904 ? 1 : undefined, + defaultThemeVersion: 164011, + filterPrivacy: 1 + }); + } + parseOpen(node) { + if (node.name === 'workbookPr') { + this.model = { + date1904: node.attributes.date1904 === '1' + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorksheetPropertiesXform; + +},{"../base-xform":32}],37:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class WorkbookViewXform extends BaseXform { + render(xmlStream, model) { + const attributes = { + xWindow: model.x || 0, + yWindow: model.y || 0, + windowWidth: model.width || 12000, + windowHeight: model.height || 24000, + firstSheet: model.firstSheet, + activeTab: model.activeTab + }; + if (model.visibility && model.visibility !== 'visible') { + attributes.visibility = model.visibility; + } + xmlStream.leafNode('workbookView', attributes); + } + parseOpen(node) { + if (node.name === 'workbookView') { + const model = this.model = {}; + const addS = function (name, value, dflt) { + const s = value !== undefined ? model[name] = value : dflt; + if (s !== undefined) { + model[name] = s; + } + }; + const addN = function (name, value, dflt) { + const n = value !== undefined ? model[name] = parseInt(value, 10) : dflt; + if (n !== undefined) { + model[name] = n; + } + }; + addN('x', node.attributes.xWindow, 0); + addN('y', node.attributes.yWindow, 0); + addN('width', node.attributes.windowWidth, 25000); + addN('height', node.attributes.windowHeight, 10000); + addS('visibility', node.attributes.visibility, 'visible'); + addN('activeTab', node.attributes.activeTab, undefined); + addN('firstSheet', node.attributes.firstSheet, undefined); + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = WorkbookViewXform; + +},{"../base-xform":32}],38:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const colCache = require('../../../utils/col-cache'); +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const StaticXform = require('../static-xform'); +const ListXform = require('../list-xform'); +const DefinedNameXform = require('./defined-name-xform'); +const SheetXform = require('./sheet-xform'); +const WorkbookViewXform = require('./workbook-view-xform'); +const WorkbookPropertiesXform = require('./workbook-properties-xform'); +const WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform'); +class WorkbookXform extends BaseXform { + constructor() { + super(); + this.map = { + fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion, + workbookPr: new WorkbookPropertiesXform(), + bookViews: new ListXform({ + tag: 'bookViews', + count: false, + childXform: new WorkbookViewXform() + }), + sheets: new ListXform({ + tag: 'sheets', + count: false, + childXform: new SheetXform() + }), + definedNames: new ListXform({ + tag: 'definedNames', + count: false, + childXform: new DefinedNameXform() + }), + calcPr: new WorkbookCalcPropertiesXform() + }; + } + prepare(model) { + model.sheets = model.worksheets; + + // collate all the print areas from all of the sheets and add them to the defined names + const printAreas = []; + let index = 0; // sheets is sparse array - calc index manually + model.sheets.forEach(sheet => { + if (sheet.pageSetup && sheet.pageSetup.printArea) { + sheet.pageSetup.printArea.split('&&').forEach(printArea => { + const printAreaComponents = printArea.split(':'); + const definedName = { + name: '_xlnm.Print_Area', + ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`], + localSheetId: index + }; + printAreas.push(definedName); + }); + } + if (sheet.pageSetup && (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)) { + const ranges = []; + if (sheet.pageSetup.printTitlesColumn) { + const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':'); + ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`); + } + if (sheet.pageSetup.printTitlesRow) { + const titlesRows = sheet.pageSetup.printTitlesRow.split(':'); + ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`); + } + const definedName = { + name: '_xlnm.Print_Titles', + ranges, + localSheetId: index + }; + printAreas.push(definedName); + } + index++; + }); + if (printAreas.length) { + model.definedNames = model.definedNames.concat(printAreas); + } + (model.media || []).forEach((medium, i) => { + // assign name + medium.name = medium.type + (i + 1); + }); + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES); + this.map.fileVersion.render(xmlStream); + this.map.workbookPr.render(xmlStream, model.properties); + this.map.bookViews.render(xmlStream, model.views); + this.map.sheets.render(xmlStream, model.sheets); + this.map.definedNames.render(xmlStream, model.definedNames); + this.map.calcPr.render(xmlStream, model.calcProperties); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'workbook': + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + return true; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'workbook': + this.model = { + sheets: this.map.sheets.model, + properties: this.map.workbookPr.model || {}, + views: this.map.bookViews.model, + calcProperties: {} + }; + if (this.map.definedNames.model) { + this.model.definedNames = this.map.definedNames.model; + } + return false; + default: + // not quite sure how we get here! + return true; + } + } + reconcile(model) { + const rels = (model.workbookRels || []).reduce((map, rel) => { + map[rel.Id] = rel; + return map; + }, {}); + + // reconcile sheet ids, rIds and names + const worksheets = []; + let worksheet; + let index = 0; + (model.sheets || []).forEach(sheet => { + const rel = rels[sheet.rId]; + if (!rel) { + return; + } + // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`, + // otherwise it will be spliced directly behind `xl/`. i.g. + worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\s|\/xl\/)+/, '')}`]; + // If there are "chartsheets" in the file, rel.Target will + // come out as chartsheets/sheet1.xml or similar here, and + // that won't be in model.worksheetHash. + // As we don't have the infrastructure to support chartsheets, + // we will ignore them for now: + if (worksheet) { + worksheet.name = sheet.name; + worksheet.id = sheet.id; + worksheet.state = sheet.state; + worksheets[index++] = worksheet; + } + }); + + // reconcile print areas + const definedNames = []; + _.each(model.definedNames, definedName => { + if (definedName.name === '_xlnm.Print_Area') { + worksheet = worksheets[definedName.localSheetId]; + if (worksheet) { + if (!worksheet.pageSetup) { + worksheet.pageSetup = {}; + } + const range = colCache.decodeEx(definedName.ranges[0]); + worksheet.pageSetup.printArea = worksheet.pageSetup.printArea ? `${worksheet.pageSetup.printArea}&&${range.dimensions}` : range.dimensions; + } + } else if (definedName.name === '_xlnm.Print_Titles') { + worksheet = worksheets[definedName.localSheetId]; + if (worksheet) { + if (!worksheet.pageSetup) { + worksheet.pageSetup = {}; + } + const rangeString = definedName.ranges.join(','); + const dollarRegex = /\$/g; + const rowRangeRegex = /\$\d+:\$\d+/; + const rowRangeMatches = rangeString.match(rowRangeRegex); + if (rowRangeMatches && rowRangeMatches.length) { + const range = rowRangeMatches[0]; + worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, ''); + } + const columnRangeRegex = /\$[A-Z]+:\$[A-Z]+/; + const columnRangeMatches = rangeString.match(columnRangeRegex); + if (columnRangeMatches && columnRangeMatches.length) { + const range = columnRangeMatches[0]; + worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, ''); + } + } + } else { + definedNames.push(definedName); + } + }); + model.definedNames = definedNames; + + // used by sheets to build their image models + model.media.forEach((media, i) => { + media.index = i; + }); + } +} +WorkbookXform.WORKBOOK_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'x15', + 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main' +}; +WorkbookXform.STATIC_XFORMS = { + fileVersion: new StaticXform({ + tag: 'fileVersion', + $: { + appName: 'xl', + lastEdited: 5, + lowestEdited: 5, + rupBuild: 9303 + } + }) +}; +module.exports = WorkbookXform; + +},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./defined-name-xform":33,"./sheet-xform":34,"./workbook-calc-properties-xform":35,"./workbook-properties-xform":36,"./workbook-view-xform":37}],39:[function(require,module,exports){ +"use strict"; + +const RichTextXform = require('../strings/rich-text-xform'); +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); + +/** + + + + + + + + + + 51422: + + + + + + + + test + + + + */ + +const CommentXform = module.exports = function (model) { + this.model = model; +}; +utils.inherits(CommentXform, BaseXform, { + get tag() { + return 'r'; + }, + get richTextXform() { + if (!this._richTextXform) { + this._richTextXform = new RichTextXform(); + } + return this._richTextXform; + }, + render(xmlStream, model) { + model = model || this.model; + xmlStream.openNode('comment', { + ref: model.ref, + authorId: 0 + }); + xmlStream.openNode('text'); + if (model && model.note && model.note.texts) { + model.note.texts.forEach(text => { + this.richTextXform.render(xmlStream, text); + }); + } + xmlStream.closeNode(); + xmlStream.closeNode(); + }, + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'comment': + this.model = { + type: 'note', + note: { + texts: [] + }, + ...node.attributes + }; + return true; + case 'r': + this.parser = this.richTextXform; + this.parser.parseOpen(node); + return true; + default: + return false; + } + }, + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + }, + parseClose(name) { + switch (name) { + case 'comment': + return false; + case 'r': + this.model.note.texts.push(this.parser.model); + this.parser = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + } + return true; + } + } +}); + +},{"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],40:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +const CommentXform = require('./comment-xform'); +const CommentsXform = module.exports = function () { + this.map = { + comment: new CommentXform() + }; +}; +utils.inherits(CommentsXform, BaseXform, { + COMMENTS_ATTRIBUTES: { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main' + } +}, { + render(xmlStream, model) { + model = model || this.model; + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('comments', CommentsXform.COMMENTS_ATTRIBUTES); + + // authors + // TODO: support authors properly + xmlStream.openNode('authors'); + xmlStream.leafNode('author', null, 'Author'); + xmlStream.closeNode(); + + // comments + xmlStream.openNode('commentList'); + model.comments.forEach(comment => { + this.map.comment.render(xmlStream, comment); + }); + xmlStream.closeNode(); + xmlStream.closeNode(); + }, + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'commentList': + this.model = { + comments: [] + }; + return true; + case 'comment': + this.parser = this.map.comment; + this.parser.parseOpen(node); + return true; + default: + return false; + } + }, + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + }, + parseClose(name) { + switch (name) { + case 'commentList': + return false; + case 'comment': + this.model.comments.push(this.parser.model); + this.parser = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + } + return true; + } + } +}); + +},{"../../../utils/utils":27,"../../../utils/xml-stream":28,"../base-xform":32,"./comment-xform":39}],41:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class VmlPositionXform extends BaseXform { + constructor(model) { + super(); + this._model = model; + } + get tag() { + return this._model && this._model.tag; + } + render(xmlStream, model, type) { + if (model === type[2]) { + xmlStream.leafNode(this.tag); + } else if (this.tag === 'x:SizeWithCells' && model === type[1]) { + xmlStream.leafNode(this.tag); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = {}; + this.model[this.tag] = true; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = VmlPositionXform; + +},{"../../base-xform":32}],42:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class VmlProtectionXform extends BaseXform { + constructor(model) { + super(); + this._model = model; + } + get tag() { + return this._model && this._model.tag; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.text = ''; + return true; + default: + return false; + } + } + parseText(text) { + this.text = text; + } + parseClose() { + return false; + } +} +module.exports = VmlProtectionXform; + +},{"../../base-xform":32}],43:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); + +// render the triangle in the cell for the comment +class VmlAnchorXform extends BaseXform { + get tag() { + return 'x:Anchor'; + } + getAnchorRect(anchor) { + const l = Math.floor(anchor.left); + const lf = Math.floor((anchor.left - l) * 68); + const t = Math.floor(anchor.top); + const tf = Math.floor((anchor.top - t) * 18); + const r = Math.floor(anchor.right); + const rf = Math.floor((anchor.right - r) * 68); + const b = Math.floor(anchor.bottom); + const bf = Math.floor((anchor.bottom - b) * 18); + return [l, lf, t, tf, r, rf, b, bf]; + } + getDefaultRect(ref) { + const l = ref.col; + const lf = 6; + const t = Math.max(ref.row - 2, 0); + const tf = 14; + const r = l + 2; + const rf = 2; + const b = t + 4; + const bf = 16; + return [l, lf, t, tf, r, rf, b, bf]; + } + render(xmlStream, model) { + const rect = model.anchor ? this.getAnchorRect(model.anchor) : this.getDefaultRect(model.refAddress); + xmlStream.leafNode('x:Anchor', null, rect.join(', ')); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.text = ''; + return true; + default: + return false; + } + } + parseText(text) { + this.text = text; + } + parseClose() { + return false; + } +} +module.exports = VmlAnchorXform; + +},{"../base-xform":32}],44:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const VmlAnchorXform = require('./vml-anchor-xform'); +const VmlProtectionXform = require('./style/vml-protection-xform'); +const VmlPositionXform = require('./style/vml-position-xform'); +const POSITION_TYPE = ['twoCells', 'oneCells', 'absolute']; +class VmlClientDataXform extends BaseXform { + constructor() { + super(); + this.map = { + 'x:Anchor': new VmlAnchorXform(), + 'x:Locked': new VmlProtectionXform({ + tag: 'x:Locked' + }), + 'x:LockText': new VmlProtectionXform({ + tag: 'x:LockText' + }), + 'x:SizeWithCells': new VmlPositionXform({ + tag: 'x:SizeWithCells' + }), + 'x:MoveWithCells': new VmlPositionXform({ + tag: 'x:MoveWithCells' + }) + }; + } + get tag() { + return 'x:ClientData'; + } + render(xmlStream, model) { + const { + protection, + editAs + } = model.note; + xmlStream.openNode(this.tag, { + ObjectType: 'Note' + }); + this.map['x:MoveWithCells'].render(xmlStream, editAs, POSITION_TYPE); + this.map['x:SizeWithCells'].render(xmlStream, editAs, POSITION_TYPE); + this.map['x:Anchor'].render(xmlStream, model); + this.map['x:Locked'].render(xmlStream, protection.locked); + xmlStream.leafNode('x:AutoFill', null, 'False'); + this.map['x:LockText'].render(xmlStream, protection.lockText); + xmlStream.leafNode('x:Row', null, model.refAddress.row - 1); + xmlStream.leafNode('x:Column', null, model.refAddress.col - 1); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + anchor: [], + protection: {}, + editAs: '' + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.normalizeModel(); + return false; + default: + return true; + } + } + normalizeModel() { + const position = Object.assign({}, this.map['x:MoveWithCells'].model, this.map['x:SizeWithCells'].model); + const len = Object.keys(position).length; + this.model.editAs = POSITION_TYPE[len]; + this.model.anchor = this.map['x:Anchor'].text; + this.model.protection.locked = this.map['x:Locked'].text; + this.model.protection.lockText = this.map['x:LockText'].text; + } +} +module.exports = VmlClientDataXform; + +},{"../base-xform":32,"./style/vml-position-xform":41,"./style/vml-protection-xform":42,"./vml-anchor-xform":43}],45:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const VmlShapeXform = require('./vml-shape-xform'); + +// This class is (currently) single purposed to insert the triangle +// drawing icons on commented cells +class VmlNotesXform extends BaseXform { + constructor() { + super(); + this.map = { + 'v:shape': new VmlShapeXform() + }; + } + get tag() { + return 'xml'; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode(this.tag, VmlNotesXform.DRAWING_ATTRIBUTES); + xmlStream.openNode('o:shapelayout', { + 'v:ext': 'edit' + }); + xmlStream.leafNode('o:idmap', { + 'v:ext': 'edit', + data: 1 + }); + xmlStream.closeNode(); + xmlStream.openNode('v:shapetype', { + id: '_x0000_t202', + coordsize: '21600,21600', + 'o:spt': 202, + path: 'm,l,21600r21600,l21600,xe' + }); + xmlStream.leafNode('v:stroke', { + joinstyle: 'miter' + }); + xmlStream.leafNode('v:path', { + gradientshapeok: 't', + 'o:connecttype': 'rect' + }); + xmlStream.closeNode(); + model.comments.forEach((item, index) => { + this.map['v:shape'].render(xmlStream, item, index); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + comments: [] + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.comments.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.anchors.forEach(anchor => { + if (anchor.br) { + this.map['xdr:twoCellAnchor'].reconcile(anchor, options); + } else { + this.map['xdr:oneCellAnchor'].reconcile(anchor, options); + } + }); + } +} +VmlNotesXform.DRAWING_ATTRIBUTES = { + 'xmlns:v': 'urn:schemas-microsoft-com:vml', + 'xmlns:o': 'urn:schemas-microsoft-com:office:office', + 'xmlns:x': 'urn:schemas-microsoft-com:office:excel' +}; +module.exports = VmlNotesXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"./vml-shape-xform":46}],46:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const VmlTextboxXform = require('./vml-textbox-xform'); +const VmlClientDataXform = require('./vml-client-data-xform'); +class VmlShapeXform extends BaseXform { + constructor() { + super(); + this.map = { + 'v:textbox': new VmlTextboxXform(), + 'x:ClientData': new VmlClientDataXform() + }; + } + get tag() { + return 'v:shape'; + } + render(xmlStream, model, index) { + xmlStream.openNode('v:shape', VmlShapeXform.V_SHAPE_ATTRIBUTES(model, index)); + xmlStream.leafNode('v:fill', { + color2: 'infoBackground [80]' + }); + xmlStream.leafNode('v:shadow', { + color: 'none [81]', + obscured: 't' + }); + xmlStream.leafNode('v:path', { + 'o:connecttype': 'none' + }); + this.map['v:textbox'].render(xmlStream, model); + this.map['x:ClientData'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + margins: { + insetmode: node.attributes['o:insetmode'] + }, + anchor: '', + editAs: '', + protection: {} + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.margins.inset = this.map['v:textbox'].model && this.map['v:textbox'].model.inset; + this.model.protection = this.map['x:ClientData'].model && this.map['x:ClientData'].model.protection; + this.model.anchor = this.map['x:ClientData'].model && this.map['x:ClientData'].model.anchor; + this.model.editAs = this.map['x:ClientData'].model && this.map['x:ClientData'].model.editAs; + return false; + default: + return true; + } + } +} +VmlShapeXform.V_SHAPE_ATTRIBUTES = (model, index) => ({ + id: `_x0000_s${1025 + index}`, + type: '#_x0000_t202', + style: 'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden', + fillcolor: 'infoBackground [80]', + strokecolor: 'none [81]', + 'o:insetmode': model.note.margins && model.note.margins.insetmode +}); +module.exports = VmlShapeXform; + +},{"../base-xform":32,"./vml-client-data-xform":44,"./vml-textbox-xform":47}],47:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class VmlTextboxXform extends BaseXform { + get tag() { + return 'v:textbox'; + } + conversionUnit(value, multiple, unit) { + return `${parseFloat(value) * multiple.toFixed(2)}${unit}`; + } + reverseConversionUnit(inset) { + return (inset || '').split(',').map(margin => { + return Number(parseFloat(this.conversionUnit(parseFloat(margin), 0.1, '')).toFixed(2)); + }); + } + render(xmlStream, model) { + const attributes = { + style: 'mso-direction-alt:auto' + }; + if (model && model.note) { + let { + inset + } = model.note && model.note.margins; + if (Array.isArray(inset)) { + inset = inset.map(margin => { + return this.conversionUnit(margin, 10, 'mm'); + }).join(','); + } + if (inset) { + attributes.inset = inset; + } + } + xmlStream.openNode('v:textbox', attributes); + xmlStream.leafNode('div', { + style: 'text-align:left' + }); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + inset: this.reverseConversionUnit(node.attributes.inset) + }; + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + return true; + } + } +} +module.exports = VmlTextboxXform; + +},{"../base-xform":32}],48:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('./base-xform'); + +/* 'virtual' methods used as a form of documentation */ +/* eslint-disable class-methods-use-this */ + +// base class for xforms that are composed of other xforms +// offers some default implementations +class CompositeXform extends BaseXform { + createNewModel(node) { + return {}; + } + parseOpen(node) { + // Typical pattern for composite xform + this.parser = this.parser || this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === this.tag) { + this.model = this.createNewModel(node); + return true; + } + return false; + } + parseText(text) { + // Default implementation. Send text to child parser + if (this.parser) { + this.parser.parseText(text); + } + } + onParserClose(name, parser) { + // parseClose has seen a child parser close + // now need to incorporate into this.model somehow + this.model[name] = parser.model; + } + parseClose(name) { + // Default implementation + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.onParserClose(name, this.parser); + this.parser = undefined; + } + return true; + } + return name !== this.tag; + } +} +module.exports = CompositeXform; + +},{"./base-xform":32}],49:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class AppHeadingPairsXform extends BaseXform { + render(xmlStream, model) { + xmlStream.openNode('HeadingPairs'); + xmlStream.openNode('vt:vector', { + size: 2, + baseType: 'variant' + }); + xmlStream.openNode('vt:variant'); + xmlStream.leafNode('vt:lpstr', undefined, 'Worksheets'); + xmlStream.closeNode(); + xmlStream.openNode('vt:variant'); + xmlStream.leafNode('vt:i4', undefined, model.length); + xmlStream.closeNode(); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + // no parsing + return node.name === 'HeadingPairs'; + } + parseText() {} + parseClose(name) { + return name !== 'HeadingPairs'; + } +} +module.exports = AppHeadingPairsXform; + +},{"../base-xform":32}],50:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class AppTitlesOfPartsXform extends BaseXform { + render(xmlStream, model) { + xmlStream.openNode('TitlesOfParts'); + xmlStream.openNode('vt:vector', { + size: model.length, + baseType: 'lpstr' + }); + model.forEach(sheet => { + xmlStream.leafNode('vt:lpstr', undefined, sheet.name); + }); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + // no parsing + return node.name === 'TitlesOfParts'; + } + parseText() {} + parseClose(name) { + return name !== 'TitlesOfParts'; + } +} +module.exports = AppTitlesOfPartsXform; + +},{"../base-xform":32}],51:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const StringXform = require('../simple/string-xform'); +const AppHeadingPairsXform = require('./app-heading-pairs-xform'); +const AppTitleOfPartsXform = require('./app-titles-of-parts-xform'); +class AppXform extends BaseXform { + constructor() { + super(); + this.map = { + Company: new StringXform({ + tag: 'Company' + }), + Manager: new StringXform({ + tag: 'Manager' + }), + HeadingPairs: new AppHeadingPairsXform(), + TitleOfParts: new AppTitleOfPartsXform() + }; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('Properties', AppXform.PROPERTY_ATTRIBUTES); + xmlStream.leafNode('Application', undefined, 'Microsoft Excel'); + xmlStream.leafNode('DocSecurity', undefined, '0'); + xmlStream.leafNode('ScaleCrop', undefined, 'false'); + this.map.HeadingPairs.render(xmlStream, model.worksheets); + this.map.TitleOfParts.render(xmlStream, model.worksheets); + this.map.Company.render(xmlStream, model.company || ''); + this.map.Manager.render(xmlStream, model.manager); + xmlStream.leafNode('LinksUpToDate', undefined, 'false'); + xmlStream.leafNode('SharedDoc', undefined, 'false'); + xmlStream.leafNode('HyperlinksChanged', undefined, 'false'); + xmlStream.leafNode('AppVersion', undefined, '16.0300'); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'Properties': + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + + // there's a lot we don't bother to parse + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'Properties': + this.model = { + worksheets: this.map.TitleOfParts.model, + company: this.map.Company.model, + manager: this.map.Manager.model + }; + return false; + default: + return true; + } + } +} +AppXform.DateFormat = function (dt) { + return dt.toISOString().replace(/[.]\d{3,6}/, ''); +}; +AppXform.DateAttrs = { + 'xsi:type': 'dcterms:W3CDTF' +}; +AppXform.PROPERTY_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties', + 'xmlns:vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes' +}; +module.exports = AppXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/string-xform":119,"./app-heading-pairs-xform":49,"./app-titles-of-parts-xform":50}],52:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); + +// used for rendering the [Content_Types].xml file +// not used for parsing +class ContentTypesXform extends BaseXform { + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('Types', ContentTypesXform.PROPERTY_ATTRIBUTES); + const mediaHash = {}; + (model.media || []).forEach(medium => { + if (medium.type === 'image') { + const imageType = medium.extension; + if (!mediaHash[imageType]) { + mediaHash[imageType] = true; + xmlStream.leafNode('Default', { + Extension: imageType, + ContentType: `image/${imageType}` + }); + } + } + }); + xmlStream.leafNode('Default', { + Extension: 'rels', + ContentType: 'application/vnd.openxmlformats-package.relationships+xml' + }); + xmlStream.leafNode('Default', { + Extension: 'xml', + ContentType: 'application/xml' + }); + xmlStream.leafNode('Override', { + PartName: '/xl/workbook.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml' + }); + model.worksheets.forEach(worksheet => { + const name = `/xl/worksheets/sheet${worksheet.id}.xml`; + xmlStream.leafNode('Override', { + PartName: name, + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml' + }); + }); + xmlStream.leafNode('Override', { + PartName: '/xl/theme/theme1.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml' + }); + xmlStream.leafNode('Override', { + PartName: '/xl/styles.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml' + }); + const hasSharedStrings = model.sharedStrings && model.sharedStrings.count; + if (hasSharedStrings) { + xmlStream.leafNode('Override', { + PartName: '/xl/sharedStrings.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml' + }); + } + if (model.tables) { + model.tables.forEach(table => { + xmlStream.leafNode('Override', { + PartName: `/xl/tables/${table.target}`, + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml' + }); + }); + } + if (model.drawings) { + model.drawings.forEach(drawing => { + xmlStream.leafNode('Override', { + PartName: `/xl/drawings/${drawing.name}.xml`, + ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml' + }); + }); + } + if (model.commentRefs) { + xmlStream.leafNode('Default', { + Extension: 'vml', + ContentType: 'application/vnd.openxmlformats-officedocument.vmlDrawing' + }); + model.commentRefs.forEach(_ref => { + let { + commentName + } = _ref; + xmlStream.leafNode('Override', { + PartName: `/xl/${commentName}.xml`, + ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml' + }); + }); + } + xmlStream.leafNode('Override', { + PartName: '/docProps/core.xml', + ContentType: 'application/vnd.openxmlformats-package.core-properties+xml' + }); + xmlStream.leafNode('Override', { + PartName: '/docProps/app.xml', + ContentType: 'application/vnd.openxmlformats-officedocument.extended-properties+xml' + }); + xmlStream.closeNode(); + } + parseOpen() { + return false; + } + parseText() {} + parseClose() { + return false; + } +} +ContentTypesXform.PROPERTY_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/package/2006/content-types' +}; +module.exports = ContentTypesXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32}],53:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const DateXform = require('../simple/date-xform'); +const StringXform = require('../simple/string-xform'); +const IntegerXform = require('../simple/integer-xform'); +class CoreXform extends BaseXform { + constructor() { + super(); + this.map = { + 'dc:creator': new StringXform({ + tag: 'dc:creator' + }), + 'dc:title': new StringXform({ + tag: 'dc:title' + }), + 'dc:subject': new StringXform({ + tag: 'dc:subject' + }), + 'dc:description': new StringXform({ + tag: 'dc:description' + }), + 'dc:identifier': new StringXform({ + tag: 'dc:identifier' + }), + 'dc:language': new StringXform({ + tag: 'dc:language' + }), + 'cp:keywords': new StringXform({ + tag: 'cp:keywords' + }), + 'cp:category': new StringXform({ + tag: 'cp:category' + }), + 'cp:lastModifiedBy': new StringXform({ + tag: 'cp:lastModifiedBy' + }), + 'cp:lastPrinted': new DateXform({ + tag: 'cp:lastPrinted', + format: CoreXform.DateFormat + }), + 'cp:revision': new IntegerXform({ + tag: 'cp:revision' + }), + 'cp:version': new StringXform({ + tag: 'cp:version' + }), + 'cp:contentStatus': new StringXform({ + tag: 'cp:contentStatus' + }), + 'cp:contentType': new StringXform({ + tag: 'cp:contentType' + }), + 'dcterms:created': new DateXform({ + tag: 'dcterms:created', + attrs: CoreXform.DateAttrs, + format: CoreXform.DateFormat + }), + 'dcterms:modified': new DateXform({ + tag: 'dcterms:modified', + attrs: CoreXform.DateAttrs, + format: CoreXform.DateFormat + }) + }; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('cp:coreProperties', CoreXform.CORE_PROPERTY_ATTRIBUTES); + this.map['dc:creator'].render(xmlStream, model.creator); + this.map['dc:title'].render(xmlStream, model.title); + this.map['dc:subject'].render(xmlStream, model.subject); + this.map['dc:description'].render(xmlStream, model.description); + this.map['dc:identifier'].render(xmlStream, model.identifier); + this.map['dc:language'].render(xmlStream, model.language); + this.map['cp:keywords'].render(xmlStream, model.keywords); + this.map['cp:category'].render(xmlStream, model.category); + this.map['cp:lastModifiedBy'].render(xmlStream, model.lastModifiedBy); + this.map['cp:lastPrinted'].render(xmlStream, model.lastPrinted); + this.map['cp:revision'].render(xmlStream, model.revision); + this.map['cp:version'].render(xmlStream, model.version); + this.map['cp:contentStatus'].render(xmlStream, model.contentStatus); + this.map['cp:contentType'].render(xmlStream, model.contentType); + this.map['dcterms:created'].render(xmlStream, model.created); + this.map['dcterms:modified'].render(xmlStream, model.modified); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'cp:coreProperties': + case 'coreProperties': + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'cp:coreProperties': + case 'coreProperties': + this.model = { + creator: this.map['dc:creator'].model, + title: this.map['dc:title'].model, + subject: this.map['dc:subject'].model, + description: this.map['dc:description'].model, + identifier: this.map['dc:identifier'].model, + language: this.map['dc:language'].model, + keywords: this.map['cp:keywords'].model, + category: this.map['cp:category'].model, + lastModifiedBy: this.map['cp:lastModifiedBy'].model, + lastPrinted: this.map['cp:lastPrinted'].model, + revision: this.map['cp:revision'].model, + contentStatus: this.map['cp:contentStatus'].model, + contentType: this.map['cp:contentType'].model, + created: this.map['dcterms:created'].model, + modified: this.map['dcterms:modified'].model + }; + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +CoreXform.DateFormat = function (dt) { + return dt.toISOString().replace(/[.]\d{3}/, ''); +}; +CoreXform.DateAttrs = { + 'xsi:type': 'dcterms:W3CDTF' +}; +CoreXform.CORE_PROPERTY_ATTRIBUTES = { + 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties', + 'xmlns:dc': 'http://purl.org/dc/elements/1.1/', + 'xmlns:dcterms': 'http://purl.org/dc/terms/', + 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/', + 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance' +}; +module.exports = CoreXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/date-xform":117,"../simple/integer-xform":118,"../simple/string-xform":119}],54:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class RelationshipXform extends BaseXform { + render(xmlStream, model) { + xmlStream.leafNode('Relationship', model); + } + parseOpen(node) { + switch (node.name) { + case 'Relationship': + this.model = node.attributes; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = RelationshipXform; + +},{"../base-xform":32}],55:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const RelationshipXform = require('./relationship-xform'); +class RelationshipsXform extends BaseXform { + constructor() { + super(); + this.map = { + Relationship: new RelationshipXform() + }; + } + render(xmlStream, model) { + model = model || this._values; + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('Relationships', RelationshipsXform.RELATIONSHIPS_ATTRIBUTES); + model.forEach(relationship => { + this.map.Relationship.render(xmlStream, relationship); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'Relationships': + this.model = []; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case 'Relationships': + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +RelationshipsXform.RELATIONSHIPS_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships' +}; +module.exports = RelationshipsXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"./relationship-xform":54}],56:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class BaseCellAnchorXform extends BaseXform { + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + range: { + editAs: node.attributes.editAs || 'oneCell' + } + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + reconcilePicture(model, options) { + if (model && model.rId) { + const rel = options.rels[model.rId]; + const match = rel.Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/); + if (match) { + const name = match[1]; + const mediaId = options.mediaIndex[name]; + return options.media[mediaId]; + } + } + return undefined; + } +} +module.exports = BaseCellAnchorXform; + +},{"../base-xform":32}],57:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const BlipXform = require('./blip-xform'); +class BlipFillXform extends BaseXform { + constructor() { + super(); + this.map = { + 'a:blip': new BlipXform() + }; + } + get tag() { + return 'xdr:blipFill'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['a:blip'].render(xmlStream, model); + + // TODO: options for this + parsing + xmlStream.openNode('a:stretch'); + xmlStream.leafNode('a:fillRect'); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = this.map['a:blip'].model; + return false; + default: + return true; + } + } +} +module.exports = BlipFillXform; + +},{"../base-xform":32,"./blip-xform":58}],58:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class BlipXform extends BaseXform { + get tag() { + return 'a:blip'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'r:embed': model.rId, + cstate: 'print' + }); + // TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi + } + + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:embed'] + }; + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + // unprocessed internal nodes + return true; + } + } +} +module.exports = BlipXform; + +},{"../base-xform":32}],59:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class CNvPicPrXform extends BaseXform { + get tag() { + return 'xdr:cNvPicPr'; + } + render(xmlStream) { + xmlStream.openNode(this.tag); + xmlStream.leafNode('a:picLocks', { + noChangeAspect: '1' + }); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + // unprocessed internal nodes + return true; + } + } +} +module.exports = CNvPicPrXform; + +},{"../base-xform":32}],60:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const HlickClickXform = require('./hlink-click-xform'); +const ExtLstXform = require('./ext-lst-xform'); +class CNvPrXform extends BaseXform { + constructor() { + super(); + this.map = { + 'a:hlinkClick': new HlickClickXform(), + 'a:extLst': new ExtLstXform() + }; + } + get tag() { + return 'xdr:cNvPr'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + id: model.index, + name: `Picture ${model.index}` + }); + this.map['a:hlinkClick'].render(xmlStream, model); + this.map['a:extLst'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = this.map['a:hlinkClick'].model; + return false; + default: + return true; + } + } +} +module.exports = CNvPrXform; + +},{"../base-xform":32,"./ext-lst-xform":63,"./hlink-click-xform":65}],61:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const IntegerXform = require('../simple/integer-xform'); +class CellPositionXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.map = { + 'xdr:col': new IntegerXform({ + tag: 'xdr:col', + zero: true + }), + 'xdr:colOff': new IntegerXform({ + tag: 'xdr:colOff', + zero: true + }), + 'xdr:row': new IntegerXform({ + tag: 'xdr:row', + zero: true + }), + 'xdr:rowOff': new IntegerXform({ + tag: 'xdr:rowOff', + zero: true + }) + }; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['xdr:col'].render(xmlStream, model.nativeCol); + this.map['xdr:colOff'].render(xmlStream, model.nativeColOff); + this.map['xdr:row'].render(xmlStream, model.nativeRow); + this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = { + nativeCol: this.map['xdr:col'].model, + nativeColOff: this.map['xdr:colOff'].model, + nativeRow: this.map['xdr:row'].model, + nativeRowOff: this.map['xdr:rowOff'].model + }; + return false; + default: + // not quite sure how we get here! + return true; + } + } +} +module.exports = CellPositionXform; + +},{"../base-xform":32,"../simple/integer-xform":118}],62:[function(require,module,exports){ +"use strict"; + +const colCache = require('../../../utils/col-cache'); +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const TwoCellAnchorXform = require('./two-cell-anchor-xform'); +const OneCellAnchorXform = require('./one-cell-anchor-xform'); +function getAnchorType(model) { + const range = typeof model.range === 'string' ? colCache.decode(model.range) : model.range; + return range.br ? 'xdr:twoCellAnchor' : 'xdr:oneCellAnchor'; +} +class DrawingXform extends BaseXform { + constructor() { + super(); + this.map = { + 'xdr:twoCellAnchor': new TwoCellAnchorXform(), + 'xdr:oneCellAnchor': new OneCellAnchorXform() + }; + } + prepare(model) { + model.anchors.forEach((item, index) => { + item.anchorType = getAnchorType(item); + const anchor = this.map[item.anchorType]; + anchor.prepare(item, { + index + }); + }); + } + get tag() { + return 'xdr:wsDr'; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode(this.tag, DrawingXform.DRAWING_ATTRIBUTES); + model.anchors.forEach(item => { + const anchor = this.map[item.anchorType]; + anchor.render(xmlStream, item); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + this.model = { + anchors: [] + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.anchors.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.anchors.forEach(anchor => { + if (anchor.br) { + this.map['xdr:twoCellAnchor'].reconcile(anchor, options); + } else { + this.map['xdr:oneCellAnchor'].reconcile(anchor, options); + } + }); + } +} +DrawingXform.DRAWING_ATTRIBUTES = { + 'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', + 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main' +}; +module.exports = DrawingXform; + +},{"../../../utils/col-cache":19,"../../../utils/xml-stream":28,"../base-xform":32,"./one-cell-anchor-xform":67,"./two-cell-anchor-xform":70}],63:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class ExtLstXform extends BaseXform { + get tag() { + return 'a:extLst'; + } + render(xmlStream) { + xmlStream.openNode(this.tag); + xmlStream.openNode('a:ext', { + uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}' + }); + xmlStream.leafNode('a16:creationId', { + 'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main', + id: '{00000000-0008-0000-0000-000002000000}' + }); + xmlStream.closeNode(); + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + return true; + default: + return true; + } + } + parseText() {} + parseClose(name) { + switch (name) { + case this.tag: + return false; + default: + // unprocessed internal nodes + return true; + } + } +} +module.exports = ExtLstXform; + +},{"../base-xform":32}],64:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); + +/** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */ +const EMU_PER_PIXEL_AT_96_DPI = 9525; +class ExtXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.map = {}; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + const width = Math.floor(model.width * EMU_PER_PIXEL_AT_96_DPI); + const height = Math.floor(model.height * EMU_PER_PIXEL_AT_96_DPI); + xmlStream.addAttribute('cx', width); + xmlStream.addAttribute('cy', height); + xmlStream.closeNode(); + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + width: parseInt(node.attributes.cx || '0', 10) / EMU_PER_PIXEL_AT_96_DPI, + height: parseInt(node.attributes.cy || '0', 10) / EMU_PER_PIXEL_AT_96_DPI + }; + return true; + } + return false; + } + parseText( /* text */) {} + parseClose( /* name */ + ) { + return false; + } +} +module.exports = ExtXform; + +},{"../base-xform":32}],65:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class HLinkClickXform extends BaseXform { + get tag() { + return 'a:hlinkClick'; + } + render(xmlStream, model) { + if (!(model.hyperlinks && model.hyperlinks.rId)) { + return; + } + xmlStream.leafNode(this.tag, { + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'r:id': model.hyperlinks.rId, + tooltip: model.hyperlinks.tooltip + }); + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + hyperlinks: { + rId: node.attributes['r:id'], + tooltip: node.attributes.tooltip + } + }; + return true; + default: + return true; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = HLinkClickXform; + +},{"../base-xform":32}],66:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const CNvPrXform = require('./c-nv-pr-xform'); +const CNvPicPrXform = require('./c-nv-pic-pr-xform'); +class NvPicPrXform extends BaseXform { + constructor() { + super(); + this.map = { + 'xdr:cNvPr': new CNvPrXform(), + 'xdr:cNvPicPr': new CNvPicPrXform() + }; + } + get tag() { + return 'xdr:nvPicPr'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['xdr:cNvPr'].render(xmlStream, model); + this.map['xdr:cNvPicPr'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model = this.map['xdr:cNvPr'].model; + return false; + default: + return true; + } + } +} +module.exports = NvPicPrXform; + +},{"../base-xform":32,"./c-nv-pic-pr-xform":59,"./c-nv-pr-xform":60}],67:[function(require,module,exports){ +"use strict"; + +const BaseCellAnchorXform = require('./base-cell-anchor-xform'); +const StaticXform = require('../static-xform'); +const CellPositionXform = require('./cell-position-xform'); +const ExtXform = require('./ext-xform'); +const PicXform = require('./pic-xform'); +class OneCellAnchorXform extends BaseCellAnchorXform { + constructor() { + super(); + this.map = { + 'xdr:from': new CellPositionXform({ + tag: 'xdr:from' + }), + 'xdr:ext': new ExtXform({ + tag: 'xdr:ext' + }), + 'xdr:pic': new PicXform(), + 'xdr:clientData': new StaticXform({ + tag: 'xdr:clientData' + }) + }; + } + get tag() { + return 'xdr:oneCellAnchor'; + } + prepare(model, options) { + this.map['xdr:pic'].prepare(model.picture, options); + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + editAs: model.range.editAs || 'oneCell' + }); + this.map['xdr:from'].render(xmlStream, model.range.tl); + this.map['xdr:ext'].render(xmlStream, model.range.ext); + this.map['xdr:pic'].render(xmlStream, model.picture); + this.map['xdr:clientData'].render(xmlStream, {}); + xmlStream.closeNode(); + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.range.tl = this.map['xdr:from'].model; + this.model.range.ext = this.map['xdr:ext'].model; + this.model.picture = this.map['xdr:pic'].model; + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.medium = this.reconcilePicture(model.picture, options); + } +} +module.exports = OneCellAnchorXform; + +},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./ext-xform":64,"./pic-xform":68}],68:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const StaticXform = require('../static-xform'); +const BlipFillXform = require('./blip-fill-xform'); +const NvPicPrXform = require('./nv-pic-pr-xform'); +const spPrJSON = require('./sp-pr'); +class PicXform extends BaseXform { + constructor() { + super(); + this.map = { + 'xdr:nvPicPr': new NvPicPrXform(), + 'xdr:blipFill': new BlipFillXform(), + 'xdr:spPr': new StaticXform(spPrJSON) + }; + } + get tag() { + return 'xdr:pic'; + } + prepare(model, options) { + model.index = options.index + 1; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map['xdr:nvPicPr'].render(xmlStream, model); + this.map['xdr:blipFill'].render(xmlStream, model); + this.map['xdr:spPr'].render(xmlStream, model); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.mergeModel(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + // not quite sure how we get here! + return true; + } + } +} +module.exports = PicXform; + +},{"../base-xform":32,"../static-xform":120,"./blip-fill-xform":57,"./nv-pic-pr-xform":66,"./sp-pr":69}],69:[function(require,module,exports){ +"use strict"; + +module.exports = { + tag: 'xdr:spPr', + c: [{ + tag: 'a:xfrm', + c: [{ + tag: 'a:off', + $: { + x: '0', + y: '0' + } + }, { + tag: 'a:ext', + $: { + cx: '0', + cy: '0' + } + }] + }, { + tag: 'a:prstGeom', + $: { + prst: 'rect' + }, + c: [{ + tag: 'a:avLst' + }] + }] +}; + +},{}],70:[function(require,module,exports){ +"use strict"; + +const BaseCellAnchorXform = require('./base-cell-anchor-xform'); +const StaticXform = require('../static-xform'); +const CellPositionXform = require('./cell-position-xform'); +const PicXform = require('./pic-xform'); +class TwoCellAnchorXform extends BaseCellAnchorXform { + constructor() { + super(); + this.map = { + 'xdr:from': new CellPositionXform({ + tag: 'xdr:from' + }), + 'xdr:to': new CellPositionXform({ + tag: 'xdr:to' + }), + 'xdr:pic': new PicXform(), + 'xdr:clientData': new StaticXform({ + tag: 'xdr:clientData' + }) + }; + } + get tag() { + return 'xdr:twoCellAnchor'; + } + prepare(model, options) { + this.map['xdr:pic'].prepare(model.picture, options); + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + editAs: model.range.editAs || 'oneCell' + }); + this.map['xdr:from'].render(xmlStream, model.range.tl); + this.map['xdr:to'].render(xmlStream, model.range.br); + this.map['xdr:pic'].render(xmlStream, model.picture); + this.map['xdr:clientData'].render(xmlStream, {}); + xmlStream.closeNode(); + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.range.tl = this.map['xdr:from'].model; + this.model.range.br = this.map['xdr:to'].model; + this.model.picture = this.map['xdr:pic'].model; + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + model.medium = this.reconcilePicture(model.picture, options); + } +} +module.exports = TwoCellAnchorXform; + +},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./pic-xform":68}],71:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('./base-xform'); +class ListXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.always = !!options.always; + this.count = options.count; + this.empty = options.empty; + this.$count = options.$count || 'count'; + this.$ = options.$; + this.childXform = options.childXform; + this.maxItems = options.maxItems; + } + prepare(model, options) { + const { + childXform + } = this; + if (model) { + model.forEach((childModel, index) => { + options.index = index; + childXform.prepare(childModel, options); + }); + } + } + render(xmlStream, model) { + if (this.always || model && model.length) { + xmlStream.openNode(this.tag, this.$); + if (this.count) { + xmlStream.addAttribute(this.$count, model && model.length || 0); + } + const { + childXform + } = this; + (model || []).forEach((childModel, index) => { + childXform.render(xmlStream, childModel, index); + }); + xmlStream.closeNode(); + } else if (this.empty) { + xmlStream.leafNode(this.tag); + } + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.model = []; + return true; + default: + if (this.childXform.parseOpen(node)) { + this.parser = this.childXform; + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.push(this.parser.model); + this.parser = undefined; + if (this.maxItems && this.model.length > this.maxItems) { + throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`); + } + } + return true; + } + return false; + } + reconcile(model, options) { + if (model) { + const { + childXform + } = this; + model.forEach(childModel => { + childXform.reconcile(childModel, options); + }); + } + } +} +module.exports = ListXform; + +},{"./base-xform":32}],72:[function(require,module,exports){ +"use strict"; + +const colCache = require('../../../utils/col-cache'); +const BaseXform = require('../base-xform'); +class AutoFilterXform extends BaseXform { + get tag() { + return 'autoFilter'; + } + render(xmlStream, model) { + if (model) { + if (typeof model === 'string') { + // assume range + xmlStream.leafNode('autoFilter', { + ref: model + }); + } else { + const getAddress = function (addr) { + if (typeof addr === 'string') { + return addr; + } + return colCache.getAddress(addr.row, addr.column).address; + }; + const firstAddress = getAddress(model.from); + const secondAddress = getAddress(model.to); + if (firstAddress && secondAddress) { + xmlStream.leafNode('autoFilter', { + ref: `${firstAddress}:${secondAddress}` + }); + } + } + } + } + parseOpen(node) { + if (node.name === 'autoFilter') { + this.model = node.attributes.ref; + } + } +} +module.exports = AutoFilterXform; + +},{"../../../utils/col-cache":19,"../base-xform":32}],73:[function(require,module,exports){ +"use strict"; + +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +const Range = require('../../../doc/range'); +const Enums = require('../../../doc/enums'); +const RichTextXform = require('../strings/rich-text-xform'); +function getValueType(v) { + if (v === null || v === undefined) { + return Enums.ValueType.Null; + } + if (v instanceof String || typeof v === 'string') { + return Enums.ValueType.String; + } + if (typeof v === 'number') { + return Enums.ValueType.Number; + } + if (typeof v === 'boolean') { + return Enums.ValueType.Boolean; + } + if (v instanceof Date) { + return Enums.ValueType.Date; + } + if (v.text && v.hyperlink) { + return Enums.ValueType.Hyperlink; + } + if (v.formula) { + return Enums.ValueType.Formula; + } + if (v.error) { + return Enums.ValueType.Error; + } + throw new Error('I could not understand type of value'); +} +function getEffectiveCellType(cell) { + switch (cell.type) { + case Enums.ValueType.Formula: + return getValueType(cell.result); + default: + return cell.type; + } +} +class CellXform extends BaseXform { + constructor() { + super(); + this.richTextXForm = new RichTextXform(); + } + get tag() { + return 'c'; + } + prepare(model, options) { + const styleId = options.styles.addStyleModel(model.style || {}, getEffectiveCellType(model)); + if (styleId) { + model.styleId = styleId; + } + if (model.comment) { + options.comments.push({ + ...model.comment, + ref: model.address + }); + } + switch (model.type) { + case Enums.ValueType.String: + case Enums.ValueType.RichText: + if (options.sharedStrings) { + model.ssId = options.sharedStrings.add(model.value); + } + break; + case Enums.ValueType.Date: + if (options.date1904) { + model.date1904 = true; + } + break; + case Enums.ValueType.Hyperlink: + if (options.sharedStrings && model.text !== undefined && model.text !== null) { + model.ssId = options.sharedStrings.add(model.text); + } + options.hyperlinks.push({ + address: model.address, + target: model.hyperlink, + tooltip: model.tooltip + }); + break; + case Enums.ValueType.Merge: + options.merges.add(model); + break; + case Enums.ValueType.Formula: + if (options.date1904) { + // in case valueType is date + model.date1904 = true; + } + if (model.shareType === 'shared') { + model.si = options.siFormulae++; + } + if (model.formula) { + options.formulae[model.address] = model; + } else if (model.sharedFormula) { + const master = options.formulae[model.sharedFormula]; + if (!master) { + throw new Error(`Shared Formula master must exist above and or left of clone for cell ${model.address}`); + } + if (master.si === undefined) { + master.shareType = 'shared'; + master.si = options.siFormulae++; + master.range = new Range(master.address, model.address); + } else if (master.range) { + master.range.expandToAddress(model.address); + } + model.si = master.si; + } + break; + default: + break; + } + } + renderFormula(xmlStream, model) { + let attrs = null; + switch (model.shareType) { + case 'shared': + attrs = { + t: 'shared', + ref: model.ref || model.range.range, + si: model.si + }; + break; + case 'array': + attrs = { + t: 'array', + ref: model.ref + }; + break; + default: + if (model.si !== undefined) { + attrs = { + t: 'shared', + si: model.si + }; + } + break; + } + switch (getValueType(model.result)) { + case Enums.ValueType.Null: + // ? + xmlStream.leafNode('f', attrs, model.formula); + break; + case Enums.ValueType.String: + // oddly, formula results don't ever use shared strings + xmlStream.addAttribute('t', 'str'); + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result); + break; + case Enums.ValueType.Number: + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result); + break; + case Enums.ValueType.Boolean: + xmlStream.addAttribute('t', 'b'); + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result ? 1 : 0); + break; + case Enums.ValueType.Error: + xmlStream.addAttribute('t', 'e'); + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, model.result.error); + break; + case Enums.ValueType.Date: + xmlStream.leafNode('f', attrs, model.formula); + xmlStream.leafNode('v', null, utils.dateToExcel(model.result, model.date1904)); + break; + + // case Enums.ValueType.Hyperlink: // ?? + // case Enums.ValueType.Formula: + default: + throw new Error('I could not understand type of value'); + } + } + render(xmlStream, model) { + if (model.type === Enums.ValueType.Null && !model.styleId) { + // if null and no style, exit + return; + } + xmlStream.openNode('c'); + xmlStream.addAttribute('r', model.address); + if (model.styleId) { + xmlStream.addAttribute('s', model.styleId); + } + switch (model.type) { + case Enums.ValueType.Null: + break; + case Enums.ValueType.Number: + xmlStream.leafNode('v', null, model.value); + break; + case Enums.ValueType.Boolean: + xmlStream.addAttribute('t', 'b'); + xmlStream.leafNode('v', null, model.value ? '1' : '0'); + break; + case Enums.ValueType.Error: + xmlStream.addAttribute('t', 'e'); + xmlStream.leafNode('v', null, model.value.error); + break; + case Enums.ValueType.String: + case Enums.ValueType.RichText: + if (model.ssId !== undefined) { + xmlStream.addAttribute('t', 's'); + xmlStream.leafNode('v', null, model.ssId); + } else if (model.value && model.value.richText) { + xmlStream.addAttribute('t', 'inlineStr'); + xmlStream.openNode('is'); + model.value.richText.forEach(text => { + this.richTextXForm.render(xmlStream, text); + }); + xmlStream.closeNode('is'); + } else { + xmlStream.addAttribute('t', 'str'); + xmlStream.leafNode('v', null, model.value); + } + break; + case Enums.ValueType.Date: + xmlStream.leafNode('v', null, utils.dateToExcel(model.value, model.date1904)); + break; + case Enums.ValueType.Hyperlink: + if (model.ssId !== undefined) { + xmlStream.addAttribute('t', 's'); + xmlStream.leafNode('v', null, model.ssId); + } else { + xmlStream.addAttribute('t', 'str'); + xmlStream.leafNode('v', null, model.text); + } + break; + case Enums.ValueType.Formula: + this.renderFormula(xmlStream, model); + break; + case Enums.ValueType.Merge: + // nothing to add + break; + default: + break; + } + xmlStream.closeNode(); // + } + + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'c': + // const address = colCache.decodeAddress(node.attributes.r); + this.model = { + address: node.attributes.r + }; + this.t = node.attributes.t; + if (node.attributes.s) { + this.model.styleId = parseInt(node.attributes.s, 10); + } + return true; + case 'f': + this.currentNode = 'f'; + this.model.si = node.attributes.si; + this.model.shareType = node.attributes.t; + this.model.ref = node.attributes.ref; + return true; + case 'v': + this.currentNode = 'v'; + return true; + case 't': + this.currentNode = 't'; + return true; + case 'r': + this.parser = this.richTextXForm; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + return; + } + switch (this.currentNode) { + case 'f': + this.model.formula = this.model.formula ? this.model.formula + text : text; + break; + case 'v': + case 't': + if (this.model.value && this.model.value.richText) { + this.model.value.richText.text = this.model.value.richText.text ? this.model.value.richText.text + text : text; + } else { + this.model.value = this.model.value ? this.model.value + text : text; + } + break; + default: + break; + } + } + parseClose(name) { + switch (name) { + case 'c': + { + const { + model + } = this; + + // first guess on cell type + if (model.formula || model.shareType) { + model.type = Enums.ValueType.Formula; + if (model.value) { + if (this.t === 'str') { + model.result = utils.xmlDecode(model.value); + } else if (this.t === 'b') { + model.result = parseInt(model.value, 10) !== 0; + } else if (this.t === 'e') { + model.result = { + error: model.value + }; + } else { + model.result = parseFloat(model.value); + } + model.value = undefined; + } + } else if (model.value !== undefined) { + switch (this.t) { + case 's': + model.type = Enums.ValueType.String; + model.value = parseInt(model.value, 10); + break; + case 'str': + model.type = Enums.ValueType.String; + model.value = utils.xmlDecode(model.value); + break; + case 'inlineStr': + model.type = Enums.ValueType.String; + break; + case 'b': + model.type = Enums.ValueType.Boolean; + model.value = parseInt(model.value, 10) !== 0; + break; + case 'e': + model.type = Enums.ValueType.Error; + model.value = { + error: model.value + }; + break; + default: + model.type = Enums.ValueType.Number; + model.value = parseFloat(model.value); + break; + } + } else if (model.styleId) { + model.type = Enums.ValueType.Null; + } else { + model.type = Enums.ValueType.Merge; + } + return false; + } + case 'f': + case 'v': + case 'is': + this.currentNode = undefined; + return true; + case 't': + if (this.parser) { + this.parser.parseClose(name); + return true; + } + this.currentNode = undefined; + return true; + case 'r': + this.model.value = this.model.value || {}; + this.model.value.richText = this.model.value.richText || []; + this.model.value.richText.push(this.parser.model); + this.parser = undefined; + this.currentNode = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + return true; + } + return false; + } + } + reconcile(model, options) { + const style = model.styleId && options.styles && options.styles.getStyleModel(model.styleId); + if (style) { + model.style = style; + } + if (model.styleId !== undefined) { + model.styleId = undefined; + } + switch (model.type) { + case Enums.ValueType.String: + if (typeof model.value === 'number') { + if (options.sharedStrings) { + model.value = options.sharedStrings.getString(model.value); + } + } + if (model.value.richText) { + model.type = Enums.ValueType.RichText; + } + break; + case Enums.ValueType.Number: + if (style && utils.isDateFmt(style.numFmt)) { + model.type = Enums.ValueType.Date; + model.value = utils.excelToDate(model.value, options.date1904); + } + break; + case Enums.ValueType.Formula: + if (model.result !== undefined && style && utils.isDateFmt(style.numFmt)) { + model.result = utils.excelToDate(model.result, options.date1904); + } + if (model.shareType === 'shared') { + if (model.ref) { + // master + options.formulae[model.si] = model.address; + } else { + // slave + model.sharedFormula = options.formulae[model.si]; + delete model.shareType; + } + delete model.si; + } + break; + default: + break; + } + + // look for hyperlink + const hyperlink = options.hyperlinkMap[model.address]; + if (hyperlink) { + if (model.type === Enums.ValueType.Formula) { + model.text = model.result; + model.result = undefined; + } else { + model.text = model.value; + model.value = undefined; + } + model.type = Enums.ValueType.Hyperlink; + model.hyperlink = hyperlink; + } + const comment = options.commentsMap && options.commentsMap[model.address]; + if (comment) { + model.comment = comment; + } + } +} +module.exports = CellXform; + +},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],74:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class CfIconExtXform extends BaseXform { + get tag() { + return 'x14:cfIcon'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + iconSet: model.iconSet, + iconId: model.iconId + }); + } + parseOpen(_ref) { + let { + attributes + } = _ref; + this.model = { + iconSet: attributes.iconSet, + iconId: BaseXform.toIntValue(attributes.iconId) + }; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = CfIconExtXform; + +},{"../../base-xform":32}],75:[function(require,module,exports){ +"use strict"; + +const { + v4: uuidv4 +} = require('uuid'); +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const DatabarExtXform = require('./databar-ext-xform'); +const IconSetExtXform = require('./icon-set-ext-xform'); +const extIcons = { + '3Triangles': true, + '3Stars': true, + '5Boxes': true +}; +class CfRuleExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:dataBar': this.databarXform = new DatabarExtXform(), + 'x14:iconSet': this.iconSetXform = new IconSetExtXform() + }; + } + get tag() { + return 'x14:cfRule'; + } + static isExt(rule) { + // is this rule primitive? + if (rule.type === 'dataBar') { + return DatabarExtXform.isExt(rule); + } + if (rule.type === 'iconSet') { + if (rule.custom || extIcons[rule.iconSet]) { + return true; + } + } + return false; + } + prepare(model) { + if (CfRuleExtXform.isExt(model)) { + model.x14Id = `{${uuidv4()}}`.toUpperCase(); + } + } + render(xmlStream, model) { + if (!CfRuleExtXform.isExt(model)) { + return; + } + switch (model.type) { + case 'dataBar': + this.renderDataBar(xmlStream, model); + break; + case 'iconSet': + this.renderIconSet(xmlStream, model); + break; + } + } + renderDataBar(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'dataBar', + id: model.x14Id + }); + this.databarXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderIconSet(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'iconSet', + priority: model.priority, + id: model.x14Id || `{${uuidv4()}}` + }); + this.iconSetXform.render(xmlStream, model); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + type: attributes.type, + x14Id: attributes.id, + priority: BaseXform.toIntValue(attributes.priority) + }; + } + onParserClose(name, parser) { + Object.assign(this.model, parser.model); + } +} +module.exports = CfRuleExtXform; + +},{"../../base-xform":32,"../../composite-xform":48,"./databar-ext-xform":79,"./icon-set-ext-xform":81,"uuid":528}],76:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const FExtXform = require('./f-ext-xform'); +class CfvoExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'xm:f': this.fExtXform = new FExtXform() + }; + } + get tag() { + return 'x14:cfvo'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: model.type + }); + if (model.value !== undefined) { + this.fExtXform.render(xmlStream, model.value); + } + xmlStream.closeNode(); + } + createNewModel(node) { + return { + type: node.attributes.type + }; + } + onParserClose(name, parser) { + switch (name) { + case 'xm:f': + this.model.value = parser.model ? parseFloat(parser.model) : 0; + break; + } + } +} +module.exports = CfvoExtXform; + +},{"../../composite-xform":48,"./f-ext-xform":80}],77:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const SqRefExtXform = require('./sqref-ext-xform'); +const CfRuleExtXform = require('./cf-rule-ext-xform'); +class ConditionalFormattingExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'xm:sqref': this.sqRef = new SqRefExtXform(), + 'x14:cfRule': this.cfRule = new CfRuleExtXform() + }; + } + get tag() { + return 'x14:conditionalFormatting'; + } + prepare(model, options) { + model.rules.forEach(rule => { + this.cfRule.prepare(rule, options); + }); + } + render(xmlStream, model) { + if (!model.rules.some(CfRuleExtXform.isExt)) { + return; + } + xmlStream.openNode(this.tag, { + 'xmlns:xm': 'http://schemas.microsoft.com/office/excel/2006/main' + }); + model.rules.filter(CfRuleExtXform.isExt).forEach(rule => this.cfRule.render(xmlStream, rule)); + + // for some odd reason, Excel needs the node to be after the rules + this.sqRef.render(xmlStream, model.ref); + xmlStream.closeNode(); + } + createNewModel() { + return { + rules: [] + }; + } + onParserClose(name, parser) { + switch (name) { + case 'xm:sqref': + this.model.ref = parser.model; + break; + case 'x14:cfRule': + this.model.rules.push(parser.model); + break; + } + } +} +module.exports = ConditionalFormattingExtXform; + +},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./sqref-ext-xform":82}],78:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const CfRuleExtXform = require('./cf-rule-ext-xform'); +const ConditionalFormattingExtXform = require('./conditional-formatting-ext-xform'); +class ConditionalFormattingsExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:conditionalFormatting': this.cfXform = new ConditionalFormattingExtXform() + }; + } + get tag() { + return 'x14:conditionalFormattings'; + } + hasContent(model) { + if (model.hasExtContent === undefined) { + model.hasExtContent = model.some(cf => cf.rules.some(CfRuleExtXform.isExt)); + } + return model.hasExtContent; + } + prepare(model, options) { + model.forEach(cf => { + this.cfXform.prepare(cf, options); + }); + } + render(xmlStream, model) { + if (this.hasContent(model)) { + xmlStream.openNode(this.tag); + model.forEach(cf => this.cfXform.render(xmlStream, cf)); + xmlStream.closeNode(); + } + } + createNewModel() { + return []; + } + onParserClose(name, parser) { + // model is array of conditional formatting objects + this.model.push(parser.model); + } +} +module.exports = ConditionalFormattingsExtXform; + +},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./conditional-formatting-ext-xform":77}],79:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const ColorXform = require('../../style/color-xform'); +const CfvoExtXform = require('./cfvo-ext-xform'); +class DatabarExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:cfvo': this.cfvoXform = new CfvoExtXform(), + 'x14:borderColor': this.borderColorXform = new ColorXform('x14:borderColor'), + 'x14:negativeBorderColor': this.negativeBorderColorXform = new ColorXform('x14:negativeBorderColor'), + 'x14:negativeFillColor': this.negativeFillColorXform = new ColorXform('x14:negativeFillColor'), + 'x14:axisColor': this.axisColorXform = new ColorXform('x14:axisColor') + }; + } + static isExt(rule) { + // not all databars need ext + // TODO: refine this + return !rule.gradient; + } + get tag() { + return 'x14:dataBar'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + minLength: BaseXform.toIntAttribute(model.minLength, 0, true), + maxLength: BaseXform.toIntAttribute(model.maxLength, 100, true), + border: BaseXform.toBoolAttribute(model.border, false), + gradient: BaseXform.toBoolAttribute(model.gradient, true), + negativeBarColorSameAsPositive: BaseXform.toBoolAttribute(model.negativeBarColorSameAsPositive, true), + negativeBarBorderColorSameAsPositive: BaseXform.toBoolAttribute(model.negativeBarBorderColorSameAsPositive, true), + axisPosition: BaseXform.toAttribute(model.axisPosition, 'auto'), + direction: BaseXform.toAttribute(model.direction, 'leftToRight') + }); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + this.borderColorXform.render(xmlStream, model.borderColor); + this.negativeBorderColorXform.render(xmlStream, model.negativeBorderColor); + this.negativeFillColorXform.render(xmlStream, model.negativeFillColor); + this.axisColorXform.render(xmlStream, model.axisColor); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + cfvo: [], + minLength: BaseXform.toIntValue(attributes.minLength, 0), + maxLength: BaseXform.toIntValue(attributes.maxLength, 100), + border: BaseXform.toBoolValue(attributes.border, false), + gradient: BaseXform.toBoolValue(attributes.gradient, true), + negativeBarColorSameAsPositive: BaseXform.toBoolValue(attributes.negativeBarColorSameAsPositive, true), + negativeBarBorderColorSameAsPositive: BaseXform.toBoolValue(attributes.negativeBarBorderColorSameAsPositive, true), + axisPosition: BaseXform.toStringValue(attributes.axisPosition, 'auto'), + direction: BaseXform.toStringValue(attributes.direction, 'leftToRight') + }; + } + onParserClose(name, parser) { + const [, prop] = name.split(':'); + switch (prop) { + case 'cfvo': + this.model.cfvo.push(parser.model); + break; + default: + this.model[prop] = parser.model; + break; + } + } +} +module.exports = DatabarExtXform; + +},{"../../base-xform":32,"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-ext-xform":76}],80:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class FExtXform extends BaseXform { + get tag() { + return 'xm:f'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = FExtXform; + +},{"../../base-xform":32}],81:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const CfvoExtXform = require('./cfvo-ext-xform'); +const CfIconExtXform = require('./cf-icon-ext-xform'); +class IconSetExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:cfvo': this.cfvoXform = new CfvoExtXform(), + 'x14:cfIcon': this.cfIconXform = new CfIconExtXform() + }; + } + get tag() { + return 'x14:iconSet'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + iconSet: BaseXform.toStringAttribute(model.iconSet), + reverse: BaseXform.toBoolAttribute(model.reverse, false), + showValue: BaseXform.toBoolAttribute(model.showValue, true), + custom: BaseXform.toBoolAttribute(model.icons, false) + }); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + if (model.icons) { + model.icons.forEach((icon, i) => { + icon.iconId = i; + this.cfIconXform.render(xmlStream, icon); + }); + } + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + cfvo: [], + iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'), + reverse: BaseXform.toBoolValue(attributes.reverse, false), + showValue: BaseXform.toBoolValue(attributes.showValue, true) + }; + } + onParserClose(name, parser) { + const [, prop] = name.split(':'); + switch (prop) { + case 'cfvo': + this.model.cfvo.push(parser.model); + break; + case 'cfIcon': + if (!this.model.icons) { + this.model.icons = []; + } + this.model.icons.push(parser.model); + break; + default: + this.model[prop] = parser.model; + break; + } + } +} +module.exports = IconSetExtXform; + +},{"../../base-xform":32,"../../composite-xform":48,"./cf-icon-ext-xform":74,"./cfvo-ext-xform":76}],82:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class SqrefExtXform extends BaseXform { + get tag() { + return 'xm:sqref'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = SqrefExtXform; + +},{"../../base-xform":32}],83:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const Range = require('../../../../doc/range'); +const DatabarXform = require('./databar-xform'); +const ExtLstRefXform = require('./ext-lst-ref-xform'); +const FormulaXform = require('./formula-xform'); +const ColorScaleXform = require('./color-scale-xform'); +const IconSetXform = require('./icon-set-xform'); +const extIcons = { + '3Triangles': true, + '3Stars': true, + '5Boxes': true +}; +const getTextFormula = model => { + if (model.formulae && model.formulae[0]) { + return model.formulae[0]; + } + const range = new Range(model.ref); + const { + tl + } = range; + switch (model.operator) { + case 'containsText': + return `NOT(ISERROR(SEARCH("${model.text}",${tl})))`; + case 'containsBlanks': + return `LEN(TRIM(${tl}))=0`; + case 'notContainsBlanks': + return `LEN(TRIM(${tl}))>0`; + case 'containsErrors': + return `ISERROR(${tl})`; + case 'notContainsErrors': + return `NOT(ISERROR(${tl}))`; + default: + return undefined; + } +}; +const getTimePeriodFormula = model => { + if (model.formulae && model.formulae[0]) { + return model.formulae[0]; + } + const range = new Range(model.ref); + const { + tl + } = range; + switch (model.timePeriod) { + case 'thisWeek': + return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`; + case 'lastWeek': + return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`; + case 'nextWeek': + return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`; + case 'yesterday': + return `FLOOR(${tl},1)=TODAY()-1`; + case 'today': + return `FLOOR(${tl},1)=TODAY()`; + case 'tomorrow': + return `FLOOR(${tl},1)=TODAY()+1`; + case 'last7Days': + return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`; + case 'lastMonth': + return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`; + case 'thisMonth': + return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`; + case 'nextMonth': + return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`; + default: + return undefined; + } +}; +const opType = attributes => { + const { + type, + operator + } = attributes; + switch (type) { + case 'containsText': + case 'containsBlanks': + case 'notContainsBlanks': + case 'containsErrors': + case 'notContainsErrors': + return { + type: 'containsText', + operator: type + }; + default: + return { + type, + operator + }; + } +}; +class CfRuleXform extends CompositeXform { + constructor() { + super(); + this.map = { + dataBar: this.databarXform = new DatabarXform(), + extLst: this.extLstRefXform = new ExtLstRefXform(), + formula: this.formulaXform = new FormulaXform(), + colorScale: this.colorScaleXform = new ColorScaleXform(), + iconSet: this.iconSetXform = new IconSetXform() + }; + } + get tag() { + return 'cfRule'; + } + static isPrimitive(rule) { + // is this rule primitive? + if (rule.type === 'iconSet') { + if (rule.custom || extIcons[rule.iconSet]) { + return false; + } + } + return true; + } + render(xmlStream, model) { + switch (model.type) { + case 'expression': + this.renderExpression(xmlStream, model); + break; + case 'cellIs': + this.renderCellIs(xmlStream, model); + break; + case 'top10': + this.renderTop10(xmlStream, model); + break; + case 'aboveAverage': + this.renderAboveAverage(xmlStream, model); + break; + case 'dataBar': + this.renderDataBar(xmlStream, model); + break; + case 'colorScale': + this.renderColorScale(xmlStream, model); + break; + case 'iconSet': + this.renderIconSet(xmlStream, model); + break; + case 'containsText': + this.renderText(xmlStream, model); + break; + case 'timePeriod': + this.renderTimePeriod(xmlStream, model); + break; + } + } + renderExpression(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'expression', + dxfId: model.dxfId, + priority: model.priority + }); + this.formulaXform.render(xmlStream, model.formulae[0]); + xmlStream.closeNode(); + } + renderCellIs(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'cellIs', + dxfId: model.dxfId, + priority: model.priority, + operator: model.operator + }); + model.formulae.forEach(formula => { + this.formulaXform.render(xmlStream, formula); + }); + xmlStream.closeNode(); + } + renderTop10(xmlStream, model) { + xmlStream.leafNode(this.tag, { + type: 'top10', + dxfId: model.dxfId, + priority: model.priority, + percent: BaseXform.toBoolAttribute(model.percent, false), + bottom: BaseXform.toBoolAttribute(model.bottom, false), + rank: BaseXform.toIntValue(model.rank, 10, true) + }); + } + renderAboveAverage(xmlStream, model) { + xmlStream.leafNode(this.tag, { + type: 'aboveAverage', + dxfId: model.dxfId, + priority: model.priority, + aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true) + }); + } + renderDataBar(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'dataBar', + priority: model.priority + }); + this.databarXform.render(xmlStream, model); + this.extLstRefXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderColorScale(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'colorScale', + priority: model.priority + }); + this.colorScaleXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderIconSet(xmlStream, model) { + // iconset is all primitive or all extLst + if (!CfRuleXform.isPrimitive(model)) { + return; + } + xmlStream.openNode(this.tag, { + type: 'iconSet', + priority: model.priority + }); + this.iconSetXform.render(xmlStream, model); + xmlStream.closeNode(); + } + renderText(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: model.operator, + dxfId: model.dxfId, + priority: model.priority, + operator: BaseXform.toStringAttribute(model.operator, 'containsText') + }); + const formula = getTextFormula(model); + if (formula) { + this.formulaXform.render(xmlStream, formula); + } + xmlStream.closeNode(); + } + renderTimePeriod(xmlStream, model) { + xmlStream.openNode(this.tag, { + type: 'timePeriod', + dxfId: model.dxfId, + priority: model.priority, + timePeriod: model.timePeriod + }); + const formula = getTimePeriodFormula(model); + if (formula) { + this.formulaXform.render(xmlStream, formula); + } + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + ...opType(attributes), + dxfId: BaseXform.toIntValue(attributes.dxfId), + priority: BaseXform.toIntValue(attributes.priority), + timePeriod: attributes.timePeriod, + percent: BaseXform.toBoolValue(attributes.percent), + bottom: BaseXform.toBoolValue(attributes.bottom), + rank: BaseXform.toIntValue(attributes.rank), + aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage) + }; + } + onParserClose(name, parser) { + switch (name) { + case 'dataBar': + case 'extLst': + case 'colorScale': + case 'iconSet': + // merge parser model with ours + Object.assign(this.model, parser.model); + break; + case 'formula': + // except - formula is a string and appends to formulae + this.model.formulae = this.model.formulae || []; + this.model.formulae.push(parser.model); + break; + } + } +} +module.exports = CfRuleXform; + +},{"../../../../doc/range":10,"../../base-xform":32,"../../composite-xform":48,"./color-scale-xform":85,"./databar-xform":88,"./ext-lst-ref-xform":89,"./formula-xform":90,"./icon-set-xform":91}],84:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class CfvoXform extends BaseXform { + get tag() { + return 'cfvo'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + type: model.type, + val: model.value + }); + } + parseOpen(node) { + this.model = { + type: node.attributes.type, + value: BaseXform.toFloatValue(node.attributes.val) + }; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = CfvoXform; + +},{"../../base-xform":32}],85:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const ColorXform = require('../../style/color-xform'); +const CfvoXform = require('./cfvo-xform'); +class ColorScaleXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfvo: this.cfvoXform = new CfvoXform(), + color: this.colorXform = new ColorXform() + }; + } + get tag() { + return 'colorScale'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + model.color.forEach(color => { + this.colorXform.render(xmlStream, color); + }); + xmlStream.closeNode(); + } + createNewModel(node) { + return { + cfvo: [], + color: [] + }; + } + onParserClose(name, parser) { + this.model[name].push(parser.model); + } +} +module.exports = ColorScaleXform; + +},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],86:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const CfRuleXform = require('./cf-rule-xform'); +class ConditionalFormattingXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfRule: new CfRuleXform() + }; + } + get tag() { + return 'conditionalFormatting'; + } + render(xmlStream, model) { + // if there are no primitive rules, exit now + if (!model.rules.some(CfRuleXform.isPrimitive)) { + return; + } + xmlStream.openNode(this.tag, { + sqref: model.ref + }); + model.rules.forEach(rule => { + if (CfRuleXform.isPrimitive(rule)) { + rule.ref = model.ref; + this.map.cfRule.render(xmlStream, rule); + } + }); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + ref: attributes.sqref, + rules: [] + }; + } + onParserClose(name, parser) { + this.model.rules.push(parser.model); + } +} +module.exports = ConditionalFormattingXform; + +},{"../../composite-xform":48,"./cf-rule-xform":83}],87:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const ConditionalFormattingXform = require('./conditional-formatting-xform'); +class ConditionalFormattingsXform extends BaseXform { + constructor() { + super(); + this.cfXform = new ConditionalFormattingXform(); + } + get tag() { + return 'conditionalFormatting'; + } + reset() { + this.model = []; + } + prepare(model, options) { + // ensure each rule has a priority value + let nextPriority = model.reduce((p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)), 1); + model.forEach(cf => { + cf.rules.forEach(rule => { + if (!rule.priority) { + rule.priority = nextPriority++; + } + if (rule.style) { + rule.dxfId = options.styles.addDxfStyle(rule.style); + } + }); + }); + } + render(xmlStream, model) { + model.forEach(cf => { + this.cfXform.render(xmlStream, cf); + }); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'conditionalFormatting': + this.parser = this.cfXform; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.push(this.parser.model); + this.parser = undefined; + return false; + } + return true; + } + return false; + } + reconcile(model, options) { + model.forEach(cf => { + cf.rules.forEach(rule => { + if (rule.dxfId !== undefined) { + rule.style = options.styles.getDxfStyle(rule.dxfId); + delete rule.dxfId; + } + }); + }); + } +} +module.exports = ConditionalFormattingsXform; + +},{"../../base-xform":32,"./conditional-formatting-xform":86}],88:[function(require,module,exports){ +"use strict"; + +const CompositeXform = require('../../composite-xform'); +const ColorXform = require('../../style/color-xform'); +const CfvoXform = require('./cfvo-xform'); +class DatabarXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfvo: this.cfvoXform = new CfvoXform(), + color: this.colorXform = new ColorXform() + }; + } + get tag() { + return 'dataBar'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + this.colorXform.render(xmlStream, model.color); + xmlStream.closeNode(); + } + createNewModel() { + return { + cfvo: [] + }; + } + onParserClose(name, parser) { + switch (name) { + case 'cfvo': + this.model.cfvo.push(parser.model); + break; + case 'color': + this.model.color = parser.model; + break; + } + } +} +module.exports = DatabarXform; + +},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],89:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +class X14IdXform extends BaseXform { + get tag() { + return 'x14:id'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +class ExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:id': this.idXform = new X14IdXform() + }; + } + get tag() { + return 'ext'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + uri: '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}', + 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main' + }); + this.idXform.render(xmlStream, model.x14Id); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + this.model.x14Id = parser.model; + } +} +class ExtLstRefXform extends CompositeXform { + constructor() { + super(); + this.map = { + ext: new ExtXform() + }; + } + get tag() { + return 'extLst'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + this.map.ext.render(xmlStream, model); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + Object.assign(this.model, parser.model); + } +} +module.exports = ExtLstRefXform; + +},{"../../base-xform":32,"../../composite-xform":48}],90:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +class FormulaXform extends BaseXform { + get tag() { + return 'formula'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, null, model); + } + parseOpen() { + this.model = ''; + } + parseText(text) { + this.model += text; + } + parseClose(name) { + return name !== this.tag; + } +} +module.exports = FormulaXform; + +},{"../../base-xform":32}],91:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../../base-xform'); +const CompositeXform = require('../../composite-xform'); +const CfvoXform = require('./cfvo-xform'); +class IconSetXform extends CompositeXform { + constructor() { + super(); + this.map = { + cfvo: this.cfvoXform = new CfvoXform() + }; + } + get tag() { + return 'iconSet'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + iconSet: BaseXform.toStringAttribute(model.iconSet, '3TrafficLights'), + reverse: BaseXform.toBoolAttribute(model.reverse, false), + showValue: BaseXform.toBoolAttribute(model.showValue, true) + }); + model.cfvo.forEach(cfvo => { + this.cfvoXform.render(xmlStream, cfvo); + }); + xmlStream.closeNode(); + } + createNewModel(_ref) { + let { + attributes + } = _ref; + return { + iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'), + reverse: BaseXform.toBoolValue(attributes.reverse), + showValue: BaseXform.toBoolValue(attributes.showValue), + cfvo: [] + }; + } + onParserClose(name, parser) { + this.model[name].push(parser.model); + } +} +module.exports = IconSetXform; + +},{"../../base-xform":32,"../../composite-xform":48,"./cfvo-xform":84}],92:[function(require,module,exports){ +"use strict"; + +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +class ColXform extends BaseXform { + get tag() { + return 'col'; + } + prepare(model, options) { + const styleId = options.styles.addStyleModel(model.style || {}); + if (styleId) { + model.styleId = styleId; + } + } + render(xmlStream, model) { + xmlStream.openNode('col'); + xmlStream.addAttribute('min', model.min); + xmlStream.addAttribute('max', model.max); + if (model.width) { + xmlStream.addAttribute('width', model.width); + } + if (model.styleId) { + xmlStream.addAttribute('style', model.styleId); + } + if (model.hidden) { + xmlStream.addAttribute('hidden', '1'); + } + if (model.bestFit) { + xmlStream.addAttribute('bestFit', '1'); + } + if (model.outlineLevel) { + xmlStream.addAttribute('outlineLevel', model.outlineLevel); + } + if (model.collapsed) { + xmlStream.addAttribute('collapsed', '1'); + } + xmlStream.addAttribute('customWidth', '1'); + xmlStream.closeNode(); + } + parseOpen(node) { + if (node.name === 'col') { + const model = this.model = { + min: parseInt(node.attributes.min || '0', 10), + max: parseInt(node.attributes.max || '0', 10), + width: node.attributes.width === undefined ? undefined : parseFloat(node.attributes.width || '0') + }; + if (node.attributes.style) { + model.styleId = parseInt(node.attributes.style, 10); + } + if (utils.parseBoolean(node.attributes.hidden)) { + model.hidden = true; + } + if (utils.parseBoolean(node.attributes.bestFit)) { + model.bestFit = true; + } + if (node.attributes.outlineLevel) { + model.outlineLevel = parseInt(node.attributes.outlineLevel, 10); + } + if (utils.parseBoolean(node.attributes.collapsed)) { + model.collapsed = true; + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } + reconcile(model, options) { + // reconcile column styles + if (model.styleId) { + model.style = options.styles.getStyleModel(model.styleId); + } + } +} +module.exports = ColXform; + +},{"../../../utils/utils":27,"../base-xform":32}],93:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const utils = require('../../../utils/utils'); +const colCache = require('../../../utils/col-cache'); +const BaseXform = require('../base-xform'); +const Range = require('../../../doc/range'); +function assign(definedName, attributes, name, defaultValue) { + const value = attributes[name]; + if (value !== undefined) { + definedName[name] = value; + } else if (defaultValue !== undefined) { + definedName[name] = defaultValue; + } +} +function assignBool(definedName, attributes, name, defaultValue) { + const value = attributes[name]; + if (value !== undefined) { + definedName[name] = utils.parseBoolean(value); + } else if (defaultValue !== undefined) { + definedName[name] = defaultValue; + } +} +function optimiseDataValidations(model) { + // Squeeze alike data validations together into rectangular ranges + // to reduce file size and speed up Excel load time + const dvList = _.map(model, (dataValidation, address) => ({ + address, + dataValidation, + marked: false + })).sort((a, b) => _.strcmp(a.address, b.address)); + const dvMap = _.keyBy(dvList, 'address'); + const matchCol = (addr, height, col) => { + for (let i = 0; i < height; i++) { + const otherAddress = colCache.encodeAddress(addr.row + i, col); + if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) { + return false; + } + } + return true; + }; + return dvList.map(dv => { + if (!dv.marked) { + const addr = colCache.decodeEx(dv.address); + if (addr.dimensions) { + dvMap[addr.dimensions].marked = true; + return { + ...dv.dataValidation, + sqref: dv.address + }; + } + + // iterate downwards - finding matching cells + let height = 1; + let otherAddress = colCache.encodeAddress(addr.row + height, addr.col); + while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) { + height++; + otherAddress = colCache.encodeAddress(addr.row + height, addr.col); + } + + // iterate rightwards... + + let width = 1; + while (matchCol(addr, height, addr.col + width)) { + width++; + } + + // mark all included addresses + for (let i = 0; i < height; i++) { + for (let j = 0; j < width; j++) { + otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j); + dvMap[otherAddress].marked = true; + } + } + if (height > 1 || width > 1) { + const bottom = addr.row + (height - 1); + const right = addr.col + (width - 1); + return { + ...dv.dataValidation, + sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}` + }; + } + return { + ...dv.dataValidation, + sqref: dv.address + }; + } + return null; + }).filter(Boolean); +} +class DataValidationsXform extends BaseXform { + get tag() { + return 'dataValidations'; + } + render(xmlStream, model) { + const optimizedModel = optimiseDataValidations(model); + if (optimizedModel.length) { + xmlStream.openNode('dataValidations', { + count: optimizedModel.length + }); + optimizedModel.forEach(value => { + xmlStream.openNode('dataValidation'); + if (value.type !== 'any') { + xmlStream.addAttribute('type', value.type); + if (value.operator && value.type !== 'list' && value.operator !== 'between') { + xmlStream.addAttribute('operator', value.operator); + } + if (value.allowBlank) { + xmlStream.addAttribute('allowBlank', '1'); + } + } + if (value.showInputMessage) { + xmlStream.addAttribute('showInputMessage', '1'); + } + if (value.promptTitle) { + xmlStream.addAttribute('promptTitle', value.promptTitle); + } + if (value.prompt) { + xmlStream.addAttribute('prompt', value.prompt); + } + if (value.showErrorMessage) { + xmlStream.addAttribute('showErrorMessage', '1'); + } + if (value.errorStyle) { + xmlStream.addAttribute('errorStyle', value.errorStyle); + } + if (value.errorTitle) { + xmlStream.addAttribute('errorTitle', value.errorTitle); + } + if (value.error) { + xmlStream.addAttribute('error', value.error); + } + xmlStream.addAttribute('sqref', value.sqref); + (value.formulae || []).forEach((formula, index) => { + xmlStream.openNode(`formula${index + 1}`); + if (value.type === 'date') { + xmlStream.writeText(utils.dateToExcel(new Date(formula))); + } else { + xmlStream.writeText(formula); + } + xmlStream.closeNode(); + }); + xmlStream.closeNode(); + }); + xmlStream.closeNode(); + } + } + parseOpen(node) { + switch (node.name) { + case 'dataValidations': + this.model = {}; + return true; + case 'dataValidation': + { + this._address = node.attributes.sqref; + const dataValidation = { + type: node.attributes.type || 'any', + formulae: [] + }; + if (node.attributes.type) { + assignBool(dataValidation, node.attributes, 'allowBlank'); + } + assignBool(dataValidation, node.attributes, 'showInputMessage'); + assignBool(dataValidation, node.attributes, 'showErrorMessage'); + switch (dataValidation.type) { + case 'any': + case 'list': + case 'custom': + break; + default: + assign(dataValidation, node.attributes, 'operator', 'between'); + break; + } + assign(dataValidation, node.attributes, 'promptTitle'); + assign(dataValidation, node.attributes, 'prompt'); + assign(dataValidation, node.attributes, 'errorStyle'); + assign(dataValidation, node.attributes, 'errorTitle'); + assign(dataValidation, node.attributes, 'error'); + this._dataValidation = dataValidation; + return true; + } + case 'formula1': + case 'formula2': + this._formula = []; + return true; + default: + return false; + } + } + parseText(text) { + if (this._formula) { + this._formula.push(text); + } + } + parseClose(name) { + switch (name) { + case 'dataValidations': + return false; + case 'dataValidation': + { + if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) { + delete this._dataValidation.formulae; + delete this._dataValidation.operator; + } + // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4 + const list = this._address.split(/\s+/g) || []; + list.forEach(addr => { + if (addr.includes(':')) { + const range = new Range(addr); + range.forEachAddress(address => { + this.model[address] = this._dataValidation; + }); + } else { + this.model[addr] = this._dataValidation; + } + }); + return true; + } + case 'formula1': + case 'formula2': + { + let formula = this._formula.join(''); + switch (this._dataValidation.type) { + case 'whole': + case 'textLength': + formula = parseInt(formula, 10); + break; + case 'decimal': + formula = parseFloat(formula); + break; + case 'date': + formula = utils.excelToDate(parseFloat(formula)); + break; + default: + break; + } + this._dataValidation.formulae.push(formula); + this._formula = undefined; + return true; + } + default: + return true; + } + } +} +module.exports = DataValidationsXform; + +},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/utils":27,"../base-xform":32}],94:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class DimensionXform extends BaseXform { + get tag() { + return 'dimension'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode('dimension', { + ref: model + }); + } + } + parseOpen(node) { + if (node.name === 'dimension') { + this.model = node.attributes.ref; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = DimensionXform; + +},{"../base-xform":32}],95:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class DrawingXform extends BaseXform { + get tag() { + return 'drawing'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode(this.tag, { + 'r:id': model.rId + }); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:id'] + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = DrawingXform; + +},{"../base-xform":32}],96:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const CompositeXform = require('../composite-xform'); +const ConditionalFormattingsExt = require('./cf-ext/conditional-formattings-ext-xform'); +class ExtXform extends CompositeXform { + constructor() { + super(); + this.map = { + 'x14:conditionalFormattings': this.conditionalFormattings = new ConditionalFormattingsExt() + }; + } + get tag() { + return 'ext'; + } + hasContent(model) { + return this.conditionalFormattings.hasContent(model.conditionalFormattings); + } + prepare(model, options) { + this.conditionalFormattings.prepare(model.conditionalFormattings, options); + } + render(xmlStream, model) { + xmlStream.openNode('ext', { + uri: '{78C0D931-6437-407d-A8EE-F0AAD7539E65}', + 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main' + }); + this.conditionalFormattings.render(xmlStream, model.conditionalFormattings); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + this.model[name] = parser.model; + } +} +class ExtLstXform extends CompositeXform { + constructor() { + super(); + this.map = { + ext: this.ext = new ExtXform() + }; + } + get tag() { + return 'extLst'; + } + prepare(model, options) { + this.ext.prepare(model, options); + } + hasContent(model) { + return this.ext.hasContent(model); + } + render(xmlStream, model) { + if (!this.hasContent(model)) { + return; + } + xmlStream.openNode('extLst'); + this.ext.render(xmlStream, model); + xmlStream.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(name, parser) { + Object.assign(this.model, parser.model); + } +} +module.exports = ExtLstXform; + +},{"../composite-xform":48,"./cf-ext/conditional-formattings-ext-xform":78}],97:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class HeaderFooterXform extends BaseXform { + get tag() { + return 'headerFooter'; + } + render(xmlStream, model) { + if (model) { + xmlStream.addRollback(); + let createTag = false; + xmlStream.openNode('headerFooter'); + if (model.differentFirst) { + xmlStream.addAttribute('differentFirst', '1'); + createTag = true; + } + if (model.differentOddEven) { + xmlStream.addAttribute('differentOddEven', '1'); + createTag = true; + } + if (model.oddHeader && typeof model.oddHeader === 'string') { + xmlStream.leafNode('oddHeader', null, model.oddHeader); + createTag = true; + } + if (model.oddFooter && typeof model.oddFooter === 'string') { + xmlStream.leafNode('oddFooter', null, model.oddFooter); + createTag = true; + } + if (model.evenHeader && typeof model.evenHeader === 'string') { + xmlStream.leafNode('evenHeader', null, model.evenHeader); + createTag = true; + } + if (model.evenFooter && typeof model.evenFooter === 'string') { + xmlStream.leafNode('evenFooter', null, model.evenFooter); + createTag = true; + } + if (model.firstHeader && typeof model.firstHeader === 'string') { + xmlStream.leafNode('firstHeader', null, model.firstHeader); + createTag = true; + } + if (model.firstFooter && typeof model.firstFooter === 'string') { + xmlStream.leafNode('firstFooter', null, model.firstFooter); + createTag = true; + } + if (createTag) { + xmlStream.closeNode(); + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + } + parseOpen(node) { + switch (node.name) { + case 'headerFooter': + this.model = {}; + if (node.attributes.differentFirst) { + this.model.differentFirst = parseInt(node.attributes.differentFirst, 0) === 1; + } + if (node.attributes.differentOddEven) { + this.model.differentOddEven = parseInt(node.attributes.differentOddEven, 0) === 1; + } + return true; + case 'oddHeader': + this.currentNode = 'oddHeader'; + return true; + case 'oddFooter': + this.currentNode = 'oddFooter'; + return true; + case 'evenHeader': + this.currentNode = 'evenHeader'; + return true; + case 'evenFooter': + this.currentNode = 'evenFooter'; + return true; + case 'firstHeader': + this.currentNode = 'firstHeader'; + return true; + case 'firstFooter': + this.currentNode = 'firstFooter'; + return true; + default: + return false; + } + } + parseText(text) { + switch (this.currentNode) { + case 'oddHeader': + this.model.oddHeader = text; + break; + case 'oddFooter': + this.model.oddFooter = text; + break; + case 'evenHeader': + this.model.evenHeader = text; + break; + case 'evenFooter': + this.model.evenFooter = text; + break; + case 'firstHeader': + this.model.firstHeader = text; + break; + case 'firstFooter': + this.model.firstFooter = text; + break; + default: + break; + } + } + parseClose() { + switch (this.currentNode) { + case 'oddHeader': + case 'oddFooter': + case 'evenHeader': + case 'evenFooter': + case 'firstHeader': + case 'firstFooter': + this.currentNode = undefined; + return true; + default: + return false; + } + } +} +module.exports = HeaderFooterXform; + +},{"../base-xform":32}],98:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class HyperlinkXform extends BaseXform { + get tag() { + return 'hyperlink'; + } + render(xmlStream, model) { + if (this.isInternalLink(model)) { + xmlStream.leafNode('hyperlink', { + ref: model.address, + 'r:id': model.rId, + tooltip: model.tooltip, + location: model.target + }); + } else { + xmlStream.leafNode('hyperlink', { + ref: model.address, + 'r:id': model.rId, + tooltip: model.tooltip + }); + } + } + parseOpen(node) { + if (node.name === 'hyperlink') { + this.model = { + address: node.attributes.ref, + rId: node.attributes['r:id'], + tooltip: node.attributes.tooltip + }; + + // This is an internal link + if (node.attributes.location) { + this.model.target = node.attributes.location; + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } + isInternalLink(model) { + // @example: Sheet2!D3, return true + return model.target && /^[^!]+![a-zA-Z]+[\d]+$/.test(model.target); + } +} +module.exports = HyperlinkXform; + +},{"../base-xform":32}],99:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class MergeCellXform extends BaseXform { + get tag() { + return 'mergeCell'; + } + render(xmlStream, model) { + xmlStream.leafNode('mergeCell', { + ref: model + }); + } + parseOpen(node) { + if (node.name === 'mergeCell') { + this.model = node.attributes.ref; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = MergeCellXform; + +},{"../base-xform":32}],100:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const Range = require('../../../doc/range'); +const colCache = require('../../../utils/col-cache'); +const Enums = require('../../../doc/enums'); +class Merges { + constructor() { + // optional mergeCells is array of ranges (like the xml) + this.merges = {}; + } + add(merge) { + // merge is {address, master} + if (this.merges[merge.master]) { + this.merges[merge.master].expandToAddress(merge.address); + } else { + const range = `${merge.master}:${merge.address}`; + this.merges[merge.master] = new Range(range); + } + } + get mergeCells() { + return _.map(this.merges, merge => merge.range); + } + reconcile(mergeCells, rows) { + // reconcile merge list with merge cells + _.each(mergeCells, merge => { + const dimensions = colCache.decode(merge); + for (let i = dimensions.top; i <= dimensions.bottom; i++) { + const row = rows[i - 1]; + for (let j = dimensions.left; j <= dimensions.right; j++) { + const cell = row.cells[j - 1]; + if (!cell) { + // nulls are not included in document - so if master cell has no value - add a null one here + row.cells[j] = { + type: Enums.ValueType.Null, + address: colCache.encodeAddress(i, j) + }; + } else if (cell.type === Enums.ValueType.Merge) { + cell.master = dimensions.tl; + } + } + } + }); + } + getMasterAddress(address) { + // if address has been merged, return its master's address. Assumes reconcile has been called + const range = this.hash[address]; + return range && range.tl; + } +} +module.exports = Merges; + +},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26}],101:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const isDefined = attr => typeof attr !== 'undefined'; +class OutlinePropertiesXform extends BaseXform { + get tag() { + return 'outlinePr'; + } + render(xmlStream, model) { + if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) { + xmlStream.leafNode(this.tag, { + summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined, + summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined + }); + return true; + } + return false; + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + summaryBelow: isDefined(node.attributes.summaryBelow) ? Boolean(Number(node.attributes.summaryBelow)) : undefined, + summaryRight: isDefined(node.attributes.summaryRight) ? Boolean(Number(node.attributes.summaryRight)) : undefined + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = OutlinePropertiesXform; + +},{"../base-xform":32}],102:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class PageBreaksXform extends BaseXform { + get tag() { + return 'brk'; + } + render(xmlStream, model) { + xmlStream.leafNode('brk', model); + } + parseOpen(node) { + if (node.name === 'brk') { + this.model = node.attributes.ref; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageBreaksXform; + +},{"../base-xform":32}],103:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +class PageMarginsXform extends BaseXform { + get tag() { + return 'pageMargins'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + left: model.left, + right: model.right, + top: model.top, + bottom: model.bottom, + header: model.header, + footer: model.footer + }; + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + left: parseFloat(node.attributes.left || 0.7), + right: parseFloat(node.attributes.right || 0.7), + top: parseFloat(node.attributes.top || 0.75), + bottom: parseFloat(node.attributes.bottom || 0.75), + header: parseFloat(node.attributes.header || 0.3), + footer: parseFloat(node.attributes.footer || 0.3) + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageMarginsXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],104:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class PageSetupPropertiesXform extends BaseXform { + get tag() { + return 'pageSetUpPr'; + } + render(xmlStream, model) { + if (model && model.fitToPage) { + xmlStream.leafNode(this.tag, { + fitToPage: model.fitToPage ? '1' : undefined + }); + return true; + } + return false; + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + fitToPage: node.attributes.fitToPage === '1' + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageSetupPropertiesXform; + +},{"../base-xform":32}],105:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +function booleanToXml(model) { + return model ? '1' : undefined; +} +function pageOrderToXml(model) { + switch (model) { + case 'overThenDown': + return model; + default: + return undefined; + } +} +function cellCommentsToXml(model) { + switch (model) { + case 'atEnd': + case 'asDisplyed': + return model; + default: + return undefined; + } +} +function errorsToXml(model) { + switch (model) { + case 'dash': + case 'blank': + case 'NA': + return model; + default: + return undefined; + } +} +function pageSizeToModel(value) { + return value !== undefined ? parseInt(value, 10) : undefined; +} +class PageSetupXform extends BaseXform { + get tag() { + return 'pageSetup'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + paperSize: model.paperSize, + orientation: model.orientation, + horizontalDpi: model.horizontalDpi, + verticalDpi: model.verticalDpi, + pageOrder: pageOrderToXml(model.pageOrder), + blackAndWhite: booleanToXml(model.blackAndWhite), + draft: booleanToXml(model.draft), + cellComments: cellCommentsToXml(model.cellComments), + errors: errorsToXml(model.errors), + scale: model.scale, + fitToWidth: model.fitToWidth, + fitToHeight: model.fitToHeight, + firstPageNumber: model.firstPageNumber, + useFirstPageNumber: booleanToXml(model.firstPageNumber), + usePrinterDefaults: booleanToXml(model.usePrinterDefaults), + copies: model.copies + }; + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + paperSize: pageSizeToModel(node.attributes.paperSize), + orientation: node.attributes.orientation || 'portrait', + horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10), + verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10), + pageOrder: node.attributes.pageOrder || 'downThenOver', + blackAndWhite: node.attributes.blackAndWhite === '1', + draft: node.attributes.draft === '1', + cellComments: node.attributes.cellComments || 'None', + errors: node.attributes.errors || 'displayed', + scale: parseInt(node.attributes.scale || '100', 10), + fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10), + fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10), + firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10), + useFirstPageNumber: node.attributes.useFirstPageNumber === '1', + usePrinterDefaults: node.attributes.usePrinterDefaults === '1', + copies: parseInt(node.attributes.copies || '1', 10) + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PageSetupXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],106:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class PictureXform extends BaseXform { + get tag() { + return 'picture'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode(this.tag, { + 'r:id': model.rId + }); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:id'] + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PictureXform; + +},{"../base-xform":32}],107:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +function booleanToXml(model) { + return model ? '1' : undefined; +} +class PrintOptionsXform extends BaseXform { + get tag() { + return 'printOptions'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + headings: booleanToXml(model.showRowColHeaders), + gridLines: booleanToXml(model.showGridLines), + horizontalCentered: booleanToXml(model.horizontalCentered), + verticalCentered: booleanToXml(model.verticalCentered) + }; + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + showRowColHeaders: node.attributes.headings === '1', + showGridLines: node.attributes.gridLines === '1', + horizontalCentered: node.attributes.horizontalCentered === '1', + verticalCentered: node.attributes.verticalCentered === '1' + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = PrintOptionsXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],108:[function(require,module,exports){ +'use strict'; + +const PageBreaksXform = require('./page-breaks-xform'); +const ListXform = require('../list-xform'); +class RowBreaksXform extends ListXform { + constructor() { + const options = { + tag: 'rowBreaks', + count: true, + childXform: new PageBreaksXform() + }; + super(options); + } + + // get tag() { return 'rowBreaks'; } + + render(xmlStream, model) { + if (model && model.length) { + xmlStream.openNode(this.tag, this.$); + if (this.count) { + xmlStream.addAttribute(this.$count, model.length); + xmlStream.addAttribute('manualBreakCount', model.length); + } + const { + childXform + } = this; + model.forEach(childModel => { + childXform.render(xmlStream, childModel); + }); + xmlStream.closeNode(); + } else if (this.empty) { + xmlStream.leafNode(this.tag); + } + } +} +module.exports = RowBreaksXform; + +},{"../list-xform":71,"./page-breaks-xform":102}],109:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const utils = require('../../../utils/utils'); +const CellXform = require('./cell-xform'); +class RowXform extends BaseXform { + constructor(options) { + super(); + this.maxItems = options && options.maxItems; + this.map = { + c: new CellXform() + }; + } + get tag() { + return 'row'; + } + prepare(model, options) { + const styleId = options.styles.addStyleModel(model.style); + if (styleId) { + model.styleId = styleId; + } + const cellXform = this.map.c; + model.cells.forEach(cellModel => { + cellXform.prepare(cellModel, options); + }); + } + render(xmlStream, model, options) { + xmlStream.openNode('row'); + xmlStream.addAttribute('r', model.number); + if (model.height) { + xmlStream.addAttribute('ht', model.height); + xmlStream.addAttribute('customHeight', '1'); + } + if (model.hidden) { + xmlStream.addAttribute('hidden', '1'); + } + if (model.min > 0 && model.max > 0 && model.min <= model.max) { + xmlStream.addAttribute('spans', `${model.min}:${model.max}`); + } + if (model.styleId) { + xmlStream.addAttribute('s', model.styleId); + xmlStream.addAttribute('customFormat', '1'); + } + xmlStream.addAttribute('x14ac:dyDescent', '0.25'); + if (model.outlineLevel) { + xmlStream.addAttribute('outlineLevel', model.outlineLevel); + } + if (model.collapsed) { + xmlStream.addAttribute('collapsed', '1'); + } + const cellXform = this.map.c; + model.cells.forEach(cellModel => { + cellXform.render(xmlStream, cellModel, options); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === 'row') { + this.numRowsSeen += 1; + const spans = node.attributes.spans ? node.attributes.spans.split(':').map(span => parseInt(span, 10)) : [undefined, undefined]; + const model = this.model = { + number: parseInt(node.attributes.r, 10), + min: spans[0], + max: spans[1], + cells: [] + }; + if (node.attributes.s) { + model.styleId = parseInt(node.attributes.s, 10); + } + if (utils.parseBoolean(node.attributes.hidden)) { + model.hidden = true; + } + if (utils.parseBoolean(node.attributes.bestFit)) { + model.bestFit = true; + } + if (node.attributes.ht) { + model.height = parseFloat(node.attributes.ht); + } + if (node.attributes.outlineLevel) { + model.outlineLevel = parseInt(node.attributes.outlineLevel, 10); + } + if (utils.parseBoolean(node.attributes.collapsed)) { + model.collapsed = true; + } + return true; + } + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.cells.push(this.parser.model); + if (this.maxItems && this.model.cells.length > this.maxItems) { + throw new Error(`Max column count (${this.maxItems}) exceeded`); + } + this.parser = undefined; + } + return true; + } + return false; + } + reconcile(model, options) { + model.style = model.styleId ? options.styles.getStyleModel(model.styleId) : {}; + if (model.styleId !== undefined) { + model.styleId = undefined; + } + const cellXform = this.map.c; + model.cells.forEach(cellModel => { + cellXform.reconcile(cellModel, options); + }); + } +} +module.exports = RowXform; + +},{"../../../utils/utils":27,"../base-xform":32,"./cell-xform":73}],110:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +class SheetFormatPropertiesXform extends BaseXform { + get tag() { + return 'sheetFormatPr'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + defaultRowHeight: model.defaultRowHeight, + outlineLevelRow: model.outlineLevelRow, + outlineLevelCol: model.outlineLevelCol, + 'x14ac:dyDescent': model.dyDescent + }; + if (model.defaultColWidth) { + attributes.defaultColWidth = model.defaultColWidth; + } + + // default value for 'defaultRowHeight' is 15, this should not be 'custom' + if (!model.defaultRowHeight || model.defaultRowHeight !== 15) { + attributes.customHeight = '1'; + } + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode('sheetFormatPr', attributes); + } + } + } + parseOpen(node) { + if (node.name === 'sheetFormatPr') { + this.model = { + defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || '0'), + dyDescent: parseFloat(node.attributes['x14ac:dyDescent'] || '0'), + outlineLevelRow: parseInt(node.attributes.outlineLevelRow || '0', 10), + outlineLevelCol: parseInt(node.attributes.outlineLevelCol || '0', 10) + }; + if (node.attributes.defaultColWidth) { + this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth); + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = SheetFormatPropertiesXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],111:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const ColorXform = require('../style/color-xform'); +const PageSetupPropertiesXform = require('./page-setup-properties-xform'); +const OutlinePropertiesXform = require('./outline-properties-xform'); +class SheetPropertiesXform extends BaseXform { + constructor() { + super(); + this.map = { + tabColor: new ColorXform('tabColor'), + pageSetUpPr: new PageSetupPropertiesXform(), + outlinePr: new OutlinePropertiesXform() + }; + } + get tag() { + return 'sheetPr'; + } + render(xmlStream, model) { + if (model) { + xmlStream.addRollback(); + xmlStream.openNode('sheetPr'); + let inner = false; + inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner; + inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner; + inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner; + if (inner) { + xmlStream.closeNode(); + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === this.tag) { + this.reset(); + return true; + } + if (this.map[node.name]) { + this.parser = this.map[node.name]; + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + return true; + } + return false; + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) { + this.model = {}; + if (this.map.tabColor.model) { + this.model.tabColor = this.map.tabColor.model; + } + if (this.map.pageSetUpPr.model) { + this.model.pageSetup = this.map.pageSetUpPr.model; + } + if (this.map.outlinePr.model) { + this.model.outlineProperties = this.map.outlinePr.model; + } + } else { + this.model = null; + } + return false; + } +} +module.exports = SheetPropertiesXform; + +},{"../base-xform":32,"../style/color-xform":128,"./outline-properties-xform":101,"./page-setup-properties-xform":104}],112:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); +function booleanToXml(model, value) { + return model ? value : undefined; +} +function xmlToBoolean(value, equals) { + return value === equals ? true : undefined; +} +class SheetProtectionXform extends BaseXform { + get tag() { + return 'sheetProtection'; + } + render(xmlStream, model) { + if (model) { + const attributes = { + sheet: booleanToXml(model.sheet, '1'), + selectLockedCells: model.selectLockedCells === false ? '1' : undefined, + selectUnlockedCells: model.selectUnlockedCells === false ? '1' : undefined, + formatCells: booleanToXml(model.formatCells, '0'), + formatColumns: booleanToXml(model.formatColumns, '0'), + formatRows: booleanToXml(model.formatRows, '0'), + insertColumns: booleanToXml(model.insertColumns, '0'), + insertRows: booleanToXml(model.insertRows, '0'), + insertHyperlinks: booleanToXml(model.insertHyperlinks, '0'), + deleteColumns: booleanToXml(model.deleteColumns, '0'), + deleteRows: booleanToXml(model.deleteRows, '0'), + sort: booleanToXml(model.sort, '0'), + autoFilter: booleanToXml(model.autoFilter, '0'), + pivotTables: booleanToXml(model.pivotTables, '0') + }; + if (model.sheet) { + attributes.algorithmName = model.algorithmName; + attributes.hashValue = model.hashValue; + attributes.saltValue = model.saltValue; + attributes.spinCount = model.spinCount; + attributes.objects = booleanToXml(model.objects === false, '1'); + attributes.scenarios = booleanToXml(model.scenarios === false, '1'); + } + if (_.some(attributes, value => value !== undefined)) { + xmlStream.leafNode(this.tag, attributes); + } + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + sheet: xmlToBoolean(node.attributes.sheet, '1'), + objects: node.attributes.objects === '1' ? false : undefined, + scenarios: node.attributes.scenarios === '1' ? false : undefined, + selectLockedCells: node.attributes.selectLockedCells === '1' ? false : undefined, + selectUnlockedCells: node.attributes.selectUnlockedCells === '1' ? false : undefined, + formatCells: xmlToBoolean(node.attributes.formatCells, '0'), + formatColumns: xmlToBoolean(node.attributes.formatColumns, '0'), + formatRows: xmlToBoolean(node.attributes.formatRows, '0'), + insertColumns: xmlToBoolean(node.attributes.insertColumns, '0'), + insertRows: xmlToBoolean(node.attributes.insertRows, '0'), + insertHyperlinks: xmlToBoolean(node.attributes.insertHyperlinks, '0'), + deleteColumns: xmlToBoolean(node.attributes.deleteColumns, '0'), + deleteRows: xmlToBoolean(node.attributes.deleteRows, '0'), + sort: xmlToBoolean(node.attributes.sort, '0'), + autoFilter: xmlToBoolean(node.attributes.autoFilter, '0'), + pivotTables: xmlToBoolean(node.attributes.pivotTables, '0') + }; + if (node.attributes.algorithmName) { + this.model.algorithmName = node.attributes.algorithmName; + this.model.hashValue = node.attributes.hashValue; + this.model.saltValue = node.attributes.saltValue; + this.model.spinCount = parseInt(node.attributes.spinCount, 10); + } + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = SheetProtectionXform; + +},{"../../../utils/under-dash":26,"../base-xform":32}],113:[function(require,module,exports){ +"use strict"; + +const colCache = require('../../../utils/col-cache'); +const BaseXform = require('../base-xform'); +const VIEW_STATES = { + frozen: 'frozen', + frozenSplit: 'frozen', + split: 'split' +}; +class SheetViewXform extends BaseXform { + get tag() { + return 'sheetView'; + } + prepare(model) { + switch (model.state) { + case 'frozen': + case 'split': + break; + default: + model.state = 'normal'; + break; + } + } + render(xmlStream, model) { + xmlStream.openNode('sheetView', { + workbookViewId: model.workbookViewId || 0 + }); + const add = function (name, value, included) { + if (included) { + xmlStream.addAttribute(name, value); + } + }; + add('rightToLeft', '1', model.rightToLeft === true); + add('tabSelected', '1', model.tabSelected); + add('showRuler', '0', model.showRuler === false); + add('showRowColHeaders', '0', model.showRowColHeaders === false); + add('showGridLines', '0', model.showGridLines === false); + add('zoomScale', model.zoomScale, model.zoomScale); + add('zoomScaleNormal', model.zoomScaleNormal, model.zoomScaleNormal); + add('view', model.style, model.style); + let topLeftCell; + let xSplit; + let ySplit; + let activePane; + switch (model.state) { + case 'frozen': + xSplit = model.xSplit || 0; + ySplit = model.ySplit || 0; + topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address; + activePane = model.xSplit && model.ySplit && 'bottomRight' || model.xSplit && 'topRight' || 'bottomLeft'; + xmlStream.leafNode('pane', { + xSplit: model.xSplit || undefined, + ySplit: model.ySplit || undefined, + topLeftCell, + activePane, + state: 'frozen' + }); + xmlStream.leafNode('selection', { + pane: activePane, + activeCell: model.activeCell, + sqref: model.activeCell + }); + break; + case 'split': + if (model.activePane === 'topLeft') { + model.activePane = undefined; + } + xmlStream.leafNode('pane', { + xSplit: model.xSplit || undefined, + ySplit: model.ySplit || undefined, + topLeftCell: model.topLeftCell, + activePane: model.activePane + }); + xmlStream.leafNode('selection', { + pane: model.activePane, + activeCell: model.activeCell, + sqref: model.activeCell + }); + break; + case 'normal': + if (model.activeCell) { + xmlStream.leafNode('selection', { + activeCell: model.activeCell, + sqref: model.activeCell + }); + } + break; + default: + break; + } + xmlStream.closeNode(); + } + parseOpen(node) { + switch (node.name) { + case 'sheetView': + this.sheetView = { + workbookViewId: parseInt(node.attributes.workbookViewId, 10), + rightToLeft: node.attributes.rightToLeft === '1', + tabSelected: node.attributes.tabSelected === '1', + showRuler: !(node.attributes.showRuler === '0'), + showRowColHeaders: !(node.attributes.showRowColHeaders === '0'), + showGridLines: !(node.attributes.showGridLines === '0'), + zoomScale: parseInt(node.attributes.zoomScale || '100', 10), + zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || '100', 10), + style: node.attributes.view + }; + this.pane = undefined; + this.selections = {}; + return true; + case 'pane': + this.pane = { + xSplit: parseInt(node.attributes.xSplit || '0', 10), + ySplit: parseInt(node.attributes.ySplit || '0', 10), + topLeftCell: node.attributes.topLeftCell, + activePane: node.attributes.activePane || 'topLeft', + state: node.attributes.state + }; + return true; + case 'selection': + { + const name = node.attributes.pane || 'topLeft'; + this.selections[name] = { + pane: name, + activeCell: node.attributes.activeCell + }; + return true; + } + default: + return false; + } + } + parseText() {} + parseClose(name) { + let model; + let selection; + switch (name) { + case 'sheetView': + if (this.sheetView && this.pane) { + model = this.model = { + workbookViewId: this.sheetView.workbookViewId, + rightToLeft: this.sheetView.rightToLeft, + state: VIEW_STATES[this.pane.state] || 'split', + // split is default + xSplit: this.pane.xSplit, + ySplit: this.pane.ySplit, + topLeftCell: this.pane.topLeftCell, + showRuler: this.sheetView.showRuler, + showRowColHeaders: this.sheetView.showRowColHeaders, + showGridLines: this.sheetView.showGridLines, + zoomScale: this.sheetView.zoomScale, + zoomScaleNormal: this.sheetView.zoomScaleNormal + }; + if (this.model.state === 'split') { + model.activePane = this.pane.activePane; + } + selection = this.selections[this.pane.activePane]; + if (selection && selection.activeCell) { + model.activeCell = selection.activeCell; + } + if (this.sheetView.style) { + model.style = this.sheetView.style; + } + } else { + model = this.model = { + workbookViewId: this.sheetView.workbookViewId, + rightToLeft: this.sheetView.rightToLeft, + state: 'normal', + showRuler: this.sheetView.showRuler, + showRowColHeaders: this.sheetView.showRowColHeaders, + showGridLines: this.sheetView.showGridLines, + zoomScale: this.sheetView.zoomScale, + zoomScaleNormal: this.sheetView.zoomScaleNormal + }; + selection = this.selections.topLeft; + if (selection && selection.activeCell) { + model.activeCell = selection.activeCell; + } + if (this.sheetView.style) { + model.style = this.sheetView.style; + } + } + return false; + default: + return true; + } + } + reconcile() {} +} +module.exports = SheetViewXform; + +},{"../../../utils/col-cache":19,"../base-xform":32}],114:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class TablePartXform extends BaseXform { + get tag() { + return 'tablePart'; + } + render(xmlStream, model) { + if (model) { + xmlStream.leafNode(this.tag, { + 'r:id': model.rId + }); + } + } + parseOpen(node) { + switch (node.name) { + case this.tag: + this.model = { + rId: node.attributes['r:id'] + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = TablePartXform; + +},{"../base-xform":32}],115:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const colCache = require('../../../utils/col-cache'); +const XmlStream = require('../../../utils/xml-stream'); +const RelType = require('../../rel-type'); +const Merges = require('./merges'); +const BaseXform = require('../base-xform'); +const ListXform = require('../list-xform'); +const RowXform = require('./row-xform'); +const ColXform = require('./col-xform'); +const DimensionXform = require('./dimension-xform'); +const HyperlinkXform = require('./hyperlink-xform'); +const MergeCellXform = require('./merge-cell-xform'); +const DataValidationsXform = require('./data-validations-xform'); +const SheetPropertiesXform = require('./sheet-properties-xform'); +const SheetFormatPropertiesXform = require('./sheet-format-properties-xform'); +const SheetViewXform = require('./sheet-view-xform'); +const SheetProtectionXform = require('./sheet-protection-xform'); +const PageMarginsXform = require('./page-margins-xform'); +const PageSetupXform = require('./page-setup-xform'); +const PrintOptionsXform = require('./print-options-xform'); +const AutoFilterXform = require('./auto-filter-xform'); +const PictureXform = require('./picture-xform'); +const DrawingXform = require('./drawing-xform'); +const TablePartXform = require('./table-part-xform'); +const RowBreaksXform = require('./row-breaks-xform'); +const HeaderFooterXform = require('./header-footer-xform'); +const ConditionalFormattingsXform = require('./cf/conditional-formattings-xform'); +const ExtListXform = require('./ext-lst-xform'); +const mergeRule = (rule, extRule) => { + Object.keys(extRule).forEach(key => { + const value = rule[key]; + const extValue = extRule[key]; + if (value === undefined && extValue !== undefined) { + rule[key] = extValue; + } + }); +}; +const mergeConditionalFormattings = (model, extModel) => { + // conditional formattings are rendered in worksheet.conditionalFormatting and also in + // worksheet.extLst.ext.x14:conditionalFormattings + // some (e.g. dataBar) are even spread across both! + if (!extModel || !extModel.length) { + return model; + } + if (!model || !model.length) { + return extModel; + } + + // index model rules by x14Id + const cfMap = {}; + const ruleMap = {}; + model.forEach(cf => { + cfMap[cf.ref] = cf; + cf.rules.forEach(rule => { + const { + x14Id + } = rule; + if (x14Id) { + ruleMap[x14Id] = rule; + } + }); + }); + extModel.forEach(extCf => { + extCf.rules.forEach(extRule => { + const rule = ruleMap[extRule.x14Id]; + if (rule) { + // merge with matching rule + mergeRule(rule, extRule); + } else if (cfMap[extCf.ref]) { + // reuse existing cf ref + cfMap[extCf.ref].rules.push(extRule); + } else { + // create new cf + model.push({ + ref: extCf.ref, + rules: [extRule] + }); + } + }); + }); + + // need to cope with rules in extModel that don't exist in model + return model; +}; +class WorkSheetXform extends BaseXform { + constructor(options) { + super(); + const { + maxRows, + maxCols, + ignoreNodes + } = options || {}; + this.ignoreNodes = ignoreNodes || []; + this.map = { + sheetPr: new SheetPropertiesXform(), + dimension: new DimensionXform(), + sheetViews: new ListXform({ + tag: 'sheetViews', + count: false, + childXform: new SheetViewXform() + }), + sheetFormatPr: new SheetFormatPropertiesXform(), + cols: new ListXform({ + tag: 'cols', + count: false, + childXform: new ColXform() + }), + sheetData: new ListXform({ + tag: 'sheetData', + count: false, + empty: true, + childXform: new RowXform({ + maxItems: maxCols + }), + maxItems: maxRows + }), + autoFilter: new AutoFilterXform(), + mergeCells: new ListXform({ + tag: 'mergeCells', + count: true, + childXform: new MergeCellXform() + }), + rowBreaks: new RowBreaksXform(), + hyperlinks: new ListXform({ + tag: 'hyperlinks', + count: false, + childXform: new HyperlinkXform() + }), + pageMargins: new PageMarginsXform(), + dataValidations: new DataValidationsXform(), + pageSetup: new PageSetupXform(), + headerFooter: new HeaderFooterXform(), + printOptions: new PrintOptionsXform(), + picture: new PictureXform(), + drawing: new DrawingXform(), + sheetProtection: new SheetProtectionXform(), + tableParts: new ListXform({ + tag: 'tableParts', + count: true, + childXform: new TablePartXform() + }), + conditionalFormatting: new ConditionalFormattingsXform(), + extLst: new ExtListXform() + }; + } + prepare(model, options) { + options.merges = new Merges(); + model.hyperlinks = options.hyperlinks = []; + model.comments = options.comments = []; + options.formulae = {}; + options.siFormulae = 0; + this.map.cols.prepare(model.cols, options); + this.map.sheetData.prepare(model.rows, options); + this.map.conditionalFormatting.prepare(model.conditionalFormattings, options); + model.mergeCells = options.merges.mergeCells; + + // prepare relationships + const rels = model.rels = []; + function nextRid(r) { + return `rId${r.length + 1}`; + } + model.hyperlinks.forEach(hyperlink => { + const rId = nextRid(rels); + hyperlink.rId = rId; + rels.push({ + Id: rId, + Type: RelType.Hyperlink, + Target: hyperlink.target, + TargetMode: 'External' + }); + }); + + // prepare comment relationships + if (model.comments.length > 0) { + const comment = { + Id: nextRid(rels), + Type: RelType.Comments, + Target: `../comments${model.id}.xml` + }; + rels.push(comment); + const vmlDrawing = { + Id: nextRid(rels), + Type: RelType.VmlDrawing, + Target: `../drawings/vmlDrawing${model.id}.vml` + }; + rels.push(vmlDrawing); + model.comments.forEach(item => { + item.refAddress = colCache.decodeAddress(item.ref); + }); + options.commentRefs.push({ + commentName: `comments${model.id}`, + vmlDrawing: `vmlDrawing${model.id}` + }); + } + const drawingRelsHash = []; + let bookImage; + model.media.forEach(medium => { + if (medium.type === 'background') { + const rId = nextRid(rels); + bookImage = options.media[medium.imageId]; + rels.push({ + Id: rId, + Type: RelType.Image, + Target: `../media/${bookImage.name}.${bookImage.extension}` + }); + model.background = { + rId + }; + model.image = options.media[medium.imageId]; + } else if (medium.type === 'image') { + let { + drawing + } = model; + bookImage = options.media[medium.imageId]; + if (!drawing) { + drawing = model.drawing = { + rId: nextRid(rels), + name: `drawing${++options.drawingsCount}`, + anchors: [], + rels: [] + }; + options.drawings.push(drawing); + rels.push({ + Id: drawing.rId, + Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + Target: `../drawings/${drawing.name}.xml` + }); + } + let rIdImage = this.preImageId === medium.imageId ? drawingRelsHash[medium.imageId] : drawingRelsHash[drawing.rels.length]; + if (!rIdImage) { + rIdImage = nextRid(drawing.rels); + drawingRelsHash[drawing.rels.length] = rIdImage; + drawing.rels.push({ + Id: rIdImage, + Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + Target: `../media/${bookImage.name}.${bookImage.extension}` + }); + } + const anchor = { + picture: { + rId: rIdImage + }, + range: medium.range + }; + if (medium.hyperlinks && medium.hyperlinks.hyperlink) { + const rIdHyperLink = nextRid(drawing.rels); + drawingRelsHash[drawing.rels.length] = rIdHyperLink; + anchor.picture.hyperlinks = { + tooltip: medium.hyperlinks.tooltip, + rId: rIdHyperLink + }; + drawing.rels.push({ + Id: rIdHyperLink, + Type: RelType.Hyperlink, + Target: medium.hyperlinks.hyperlink, + TargetMode: 'External' + }); + } + this.preImageId = medium.imageId; + drawing.anchors.push(anchor); + } + }); + + // prepare tables + model.tables.forEach(table => { + // relationships + const rId = nextRid(rels); + table.rId = rId; + rels.push({ + Id: rId, + Type: RelType.Table, + Target: `../tables/${table.target}` + }); + + // dynamic styles + table.columns.forEach(column => { + const { + style + } = column; + if (style) { + column.dxfId = options.styles.addDxfStyle(style); + } + }); + }); + + // prepare ext items + this.map.extLst.prepare(model, options); + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('worksheet', WorkSheetXform.WORKSHEET_ATTRIBUTES); + const sheetFormatPropertiesModel = model.properties ? { + defaultRowHeight: model.properties.defaultRowHeight, + dyDescent: model.properties.dyDescent, + outlineLevelCol: model.properties.outlineLevelCol, + outlineLevelRow: model.properties.outlineLevelRow + } : undefined; + if (model.properties && model.properties.defaultColWidth) { + sheetFormatPropertiesModel.defaultColWidth = model.properties.defaultColWidth; + } + const sheetPropertiesModel = { + outlineProperties: model.properties && model.properties.outlineProperties, + tabColor: model.properties && model.properties.tabColor, + pageSetup: model.pageSetup && model.pageSetup.fitToPage ? { + fitToPage: model.pageSetup.fitToPage + } : undefined + }; + const pageMarginsModel = model.pageSetup && model.pageSetup.margins; + const printOptionsModel = { + showRowColHeaders: model.pageSetup && model.pageSetup.showRowColHeaders, + showGridLines: model.pageSetup && model.pageSetup.showGridLines, + horizontalCentered: model.pageSetup && model.pageSetup.horizontalCentered, + verticalCentered: model.pageSetup && model.pageSetup.verticalCentered + }; + const sheetProtectionModel = model.sheetProtection; + this.map.sheetPr.render(xmlStream, sheetPropertiesModel); + this.map.dimension.render(xmlStream, model.dimensions); + this.map.sheetViews.render(xmlStream, model.views); + this.map.sheetFormatPr.render(xmlStream, sheetFormatPropertiesModel); + this.map.cols.render(xmlStream, model.cols); + this.map.sheetData.render(xmlStream, model.rows); + this.map.sheetProtection.render(xmlStream, sheetProtectionModel); // Note: must be after sheetData and before autoFilter + this.map.autoFilter.render(xmlStream, model.autoFilter); + this.map.mergeCells.render(xmlStream, model.mergeCells); + this.map.conditionalFormatting.render(xmlStream, model.conditionalFormattings); // Note: must be before dataValidations + this.map.dataValidations.render(xmlStream, model.dataValidations); + + // For some reason hyperlinks have to be after the data validations + this.map.hyperlinks.render(xmlStream, model.hyperlinks); + this.map.printOptions.render(xmlStream, printOptionsModel); // Note: must be before pageMargins + this.map.pageMargins.render(xmlStream, pageMarginsModel); + this.map.pageSetup.render(xmlStream, model.pageSetup); + this.map.headerFooter.render(xmlStream, model.headerFooter); + this.map.rowBreaks.render(xmlStream, model.rowBreaks); + this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks + this.map.picture.render(xmlStream, model.background); // Note: must be after drawing + this.map.tableParts.render(xmlStream, model.tables); + this.map.extLst.render(xmlStream, model); + if (model.rels) { + // add a node for each comment + model.rels.forEach(rel => { + if (rel.Type === RelType.VmlDrawing) { + xmlStream.leafNode('legacyDrawing', { + 'r:id': rel.Id + }); + } + }); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (node.name === 'worksheet') { + _.each(this.map, xform => { + xform.reset(); + }); + return true; + } + if (this.map[node.name] && !this.ignoreNodes.includes(node.name)) { + this.parser = this.map[node.name]; + this.parser.parseOpen(node); + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'worksheet': + { + const properties = this.map.sheetFormatPr.model || {}; + if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) { + properties.tabColor = this.map.sheetPr.model.tabColor; + } + if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) { + properties.outlineProperties = this.map.sheetPr.model.outlineProperties; + } + const sheetProperties = { + fitToPage: this.map.sheetPr.model && this.map.sheetPr.model.pageSetup && this.map.sheetPr.model.pageSetup.fitToPage || false, + margins: this.map.pageMargins.model + }; + const pageSetup = Object.assign(sheetProperties, this.map.pageSetup.model, this.map.printOptions.model); + const conditionalFormattings = mergeConditionalFormattings(this.map.conditionalFormatting.model, this.map.extLst.model && this.map.extLst.model['x14:conditionalFormattings']); + this.model = { + dimensions: this.map.dimension.model, + cols: this.map.cols.model, + rows: this.map.sheetData.model, + mergeCells: this.map.mergeCells.model, + hyperlinks: this.map.hyperlinks.model, + dataValidations: this.map.dataValidations.model, + properties, + views: this.map.sheetViews.model, + pageSetup, + headerFooter: this.map.headerFooter.model, + background: this.map.picture.model, + drawing: this.map.drawing.model, + tables: this.map.tableParts.model, + conditionalFormattings + }; + if (this.map.autoFilter.model) { + this.model.autoFilter = this.map.autoFilter.model; + } + if (this.map.sheetProtection.model) { + this.model.sheetProtection = this.map.sheetProtection.model; + } + return false; + } + default: + // not quite sure how we get here! + return true; + } + } + reconcile(model, options) { + // options.merges = new Merges(); + // options.merges.reconcile(model.mergeCells, model.rows); + const rels = (model.relationships || []).reduce((h, rel) => { + h[rel.Id] = rel; + if (rel.Type === RelType.Comments) { + model.comments = options.comments[rel.Target].comments; + } + if (rel.Type === RelType.VmlDrawing && model.comments && model.comments.length) { + const vmlComment = options.vmlDrawings[rel.Target].comments; + model.comments.forEach((comment, index) => { + comment.note = Object.assign({}, comment.note, vmlComment[index]); + }); + } + return h; + }, {}); + options.commentsMap = (model.comments || []).reduce((h, comment) => { + if (comment.ref) { + h[comment.ref] = comment; + } + return h; + }, {}); + options.hyperlinkMap = (model.hyperlinks || []).reduce((h, hyperlink) => { + if (hyperlink.rId) { + h[hyperlink.address] = rels[hyperlink.rId].Target; + } + return h; + }, {}); + options.formulae = {}; + + // compact the rows and cells + model.rows = model.rows && model.rows.filter(Boolean) || []; + model.rows.forEach(row => { + row.cells = row.cells && row.cells.filter(Boolean) || []; + }); + this.map.cols.reconcile(model.cols, options); + this.map.sheetData.reconcile(model.rows, options); + this.map.conditionalFormatting.reconcile(model.conditionalFormattings, options); + model.media = []; + if (model.drawing) { + const drawingRel = rels[model.drawing.rId]; + const match = drawingRel.Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/); + if (match) { + const drawingName = match[1]; + const drawing = options.drawings[drawingName]; + drawing.anchors.forEach(anchor => { + if (anchor.medium) { + const image = { + type: 'image', + imageId: anchor.medium.index, + range: anchor.range, + hyperlinks: anchor.picture.hyperlinks + }; + model.media.push(image); + } + }); + } + } + const backgroundRel = model.background && rels[model.background.rId]; + if (backgroundRel) { + const target = backgroundRel.Target.split('/media/')[1]; + const imageId = options.mediaIndex && options.mediaIndex[target]; + if (imageId !== undefined) { + model.media.push({ + type: 'background', + imageId + }); + } + } + model.tables = (model.tables || []).map(tablePart => { + const rel = rels[tablePart.rId]; + return options.tables[rel.Target]; + }); + delete model.relationships; + delete model.hyperlinks; + delete model.comments; + } +} +WorkSheetXform.WORKSHEET_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'x14ac', + 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac' +}; +module.exports = WorkSheetXform; + +},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../../rel-type":31,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":72,"./cf/conditional-formattings-xform":87,"./col-xform":92,"./data-validations-xform":93,"./dimension-xform":94,"./drawing-xform":95,"./ext-lst-xform":96,"./header-footer-xform":97,"./hyperlink-xform":98,"./merge-cell-xform":99,"./merges":100,"./page-margins-xform":103,"./page-setup-xform":105,"./picture-xform":106,"./print-options-xform":107,"./row-breaks-xform":108,"./row-xform":109,"./sheet-format-properties-xform":110,"./sheet-properties-xform":111,"./sheet-protection-xform":112,"./sheet-view-xform":113,"./table-part-xform":114}],116:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class BooleanXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + } + render(xmlStream, model) { + if (model) { + xmlStream.openNode(this.tag); + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = true; + } + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = BooleanXform; + +},{"../base-xform":32}],117:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class DateXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + this._format = options.format || function (dt) { + try { + if (Number.isNaN(dt.getTime())) return ''; + return dt.toISOString(); + } catch (e) { + return ''; + } + }; + this._parse = options.parse || function (str) { + return new Date(str); + }; + } + render(xmlStream, model) { + if (model) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, this._format(model)); + } else { + xmlStream.writeText(this._format(model)); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = this._parse(node.attributes[this.attr]); + } else { + this.text = []; + } + } + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = this._parse(this.text.join('')); + } + return false; + } +} +module.exports = DateXform; + +},{"../base-xform":32}],118:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class IntegerXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + + // option to render zero + this.zero = options.zero; + } + render(xmlStream, model) { + // int is different to float in that zero is not rendered + if (model || this.zero) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, model); + } else { + xmlStream.writeText(model); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = parseInt(node.attributes[this.attr], 10); + } else { + this.text = []; + } + return true; + } + return false; + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = parseInt(this.text.join('') || 0, 10); + } + return false; + } +} +module.exports = IntegerXform; + +},{"../base-xform":32}],119:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class StringXform extends BaseXform { + constructor(options) { + super(); + this.tag = options.tag; + this.attr = options.attr; + this.attrs = options.attrs; + } + render(xmlStream, model) { + if (model !== undefined) { + xmlStream.openNode(this.tag); + if (this.attrs) { + xmlStream.addAttributes(this.attrs); + } + if (this.attr) { + xmlStream.addAttribute(this.attr, model); + } else { + xmlStream.writeText(model); + } + xmlStream.closeNode(); + } + } + parseOpen(node) { + if (node.name === this.tag) { + if (this.attr) { + this.model = node.attributes[this.attr]; + } else { + this.text = []; + } + } + } + parseText(text) { + if (!this.attr) { + this.text.push(text); + } + } + parseClose() { + if (!this.attr) { + this.model = this.text.join(''); + } + return false; + } +} +module.exports = StringXform; + +},{"../base-xform":32}],120:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('./base-xform'); +const XmlStream = require('../../utils/xml-stream'); + +// const model = { +// tag: 'name', +// $: {attr: 'value'}, +// c: [ +// { tag: 'child' } +// ], +// t: 'some text' +// }; + +function build(xmlStream, model) { + xmlStream.openNode(model.tag, model.$); + if (model.c) { + model.c.forEach(child => { + build(xmlStream, child); + }); + } + if (model.t) { + xmlStream.writeText(model.t); + } + xmlStream.closeNode(); +} +class StaticXform extends BaseXform { + constructor(model) { + super(); + + // This class is an optimisation for static (unimportant and unchanging) xml + // It is stateless - apart from its static model and so can be used as a singleton + // Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else + // Known issues: + // since stateless - parseOpen always returns true. Parent xform must know when to start using this xform + // if the root tag is recursive, the parsing will behave unpredictably + this._model = model; + } + render(xmlStream) { + if (!this._xml) { + const stream = new XmlStream(); + build(stream, this._model); + this._xml = stream.xml; + } + xmlStream.writeXml(this._xml); + } + parseOpen() { + return true; + } + parseText() {} + parseClose(name) { + switch (name) { + case this._model.tag: + return false; + default: + return true; + } + } +} +module.exports = StaticXform; + +},{"../../utils/xml-stream":28,"./base-xform":32}],121:[function(require,module,exports){ +"use strict"; + +const TextXform = require('./text-xform'); +const RichTextXform = require('./rich-text-xform'); +const BaseXform = require('../base-xform'); + +// +// (its pronounciation in KATAKANA) +// + +class PhoneticTextXform extends BaseXform { + constructor() { + super(); + this.map = { + r: new RichTextXform(), + t: new TextXform() + }; + } + get tag() { + return 'rPh'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + sb: model.sb || 0, + eb: model.eb || 0 + }); + if (model && model.hasOwnProperty('richText') && model.richText) { + const { + r + } = this.map; + model.richText.forEach(text => { + r.render(xmlStream, text); + }); + } else if (model) { + this.map.t.render(xmlStream, model.text); + } + xmlStream.closeNode(); + } + parseOpen(node) { + const { + name + } = node; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (name === this.tag) { + this.model = { + sb: parseInt(node.attributes.sb, 10), + eb: parseInt(node.attributes.eb, 10) + }; + return true; + } + this.parser = this.map[name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + switch (name) { + case 'r': + { + let rt = this.model.richText; + if (!rt) { + rt = this.model.richText = []; + } + rt.push(this.parser.model); + break; + } + case 't': + this.model.text = this.parser.model; + break; + default: + break; + } + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + return true; + } + } +} +module.exports = PhoneticTextXform; + +},{"../base-xform":32,"./rich-text-xform":122,"./text-xform":125}],122:[function(require,module,exports){ +"use strict"; + +const TextXform = require('./text-xform'); +const FontXform = require('../style/font-xform'); +const BaseXform = require('../base-xform'); + +// +// +// +// +// +// +// +// +// is +// + +class RichTextXform extends BaseXform { + constructor(model) { + super(); + this.model = model; + } + get tag() { + return 'r'; + } + get textXform() { + return this._textXform || (this._textXform = new TextXform()); + } + get fontXform() { + return this._fontXform || (this._fontXform = new FontXform(RichTextXform.FONT_OPTIONS)); + } + render(xmlStream, model) { + model = model || this.model; + xmlStream.openNode('r'); + if (model.font) { + this.fontXform.render(xmlStream, model.font); + } + this.textXform.render(xmlStream, model.text); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'r': + this.model = {}; + return true; + case 't': + this.parser = this.textXform; + this.parser.parseOpen(node); + return true; + case 'rPr': + this.parser = this.fontXform; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + switch (name) { + case 'r': + return false; + case 't': + this.model.text = this.parser.model; + this.parser = undefined; + return true; + case 'rPr': + this.model.font = this.parser.model; + this.parser = undefined; + return true; + default: + if (this.parser) { + this.parser.parseClose(name); + } + return true; + } + } +} +RichTextXform.FONT_OPTIONS = { + tagName: 'rPr', + fontNameTag: 'rFont' +}; +module.exports = RichTextXform; + +},{"../base-xform":32,"../style/font-xform":131,"./text-xform":125}],123:[function(require,module,exports){ +"use strict"; + +const TextXform = require('./text-xform'); +const RichTextXform = require('./rich-text-xform'); +const PhoneticTextXform = require('./phonetic-text-xform'); +const BaseXform = require('../base-xform'); + +// +// ... +// +// +// +// + +class SharedStringXform extends BaseXform { + constructor(model) { + super(); + this.model = model; + this.map = { + r: new RichTextXform(), + t: new TextXform(), + rPh: new PhoneticTextXform() + }; + } + get tag() { + return 'si'; + } + render(xmlStream, model) { + xmlStream.openNode(this.tag); + if (model && model.hasOwnProperty('richText') && model.richText) { + if (model.richText.length) { + model.richText.forEach(text => { + this.map.r.render(xmlStream, text); + }); + } else { + this.map.t.render(xmlStream, ''); + } + } else if (model !== undefined && model !== null) { + this.map.t.render(xmlStream, model); + } + xmlStream.closeNode(); + } + parseOpen(node) { + const { + name + } = node; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (name === this.tag) { + this.model = {}; + return true; + } + this.parser = this.map[name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + switch (name) { + case 'r': + { + let rt = this.model.richText; + if (!rt) { + rt = this.model.richText = []; + } + rt.push(this.parser.model); + break; + } + case 't': + this.model = this.parser.model; + break; + default: + break; + } + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + return true; + } + } +} +module.exports = SharedStringXform; + +},{"../base-xform":32,"./phonetic-text-xform":121,"./rich-text-xform":122,"./text-xform":125}],124:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const SharedStringXform = require('./shared-string-xform'); +class SharedStringsXform extends BaseXform { + constructor(model) { + super(); + this.model = model || { + values: [], + count: 0 + }; + this.hash = Object.create(null); + this.rich = Object.create(null); + } + get sharedStringXform() { + return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform()); + } + get values() { + return this.model.values; + } + get uniqueCount() { + return this.model.values.length; + } + get count() { + return this.model.count; + } + getString(index) { + return this.model.values[index]; + } + add(value) { + return value.richText ? this.addRichText(value) : this.addText(value); + } + addText(value) { + let index = this.hash[value]; + if (index === undefined) { + index = this.hash[value] = this.model.values.length; + this.model.values.push(value); + } + this.model.count++; + return index; + } + addRichText(value) { + // TODO: add WeakMap here + const xml = this.sharedStringXform.toXml(value); + let index = this.rich[xml]; + if (index === undefined) { + index = this.rich[xml] = this.model.values.length; + this.model.values.push(value); + } + this.model.count++; + return index; + } + + // + // + // <%=text%> + // + // + + render(xmlStream, model) { + model = model || this._values; + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('sst', { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + count: model.count, + uniqueCount: model.values.length + }); + const sx = this.sharedStringXform; + model.values.forEach(sharedString => { + sx.render(xmlStream, sharedString); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'sst': + return true; + case 'si': + this.parser = this.sharedStringXform; + this.parser.parseOpen(node); + return true; + default: + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.values.push(this.parser.model); + this.model.count++; + this.parser = undefined; + } + return true; + } + switch (name) { + case 'sst': + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +module.exports = SharedStringsXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"./shared-string-xform":123}],125:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); + +// is + +class TextXform extends BaseXform { + get tag() { + return 't'; + } + render(xmlStream, model) { + xmlStream.openNode('t'); + if (/^\s|\n|\s$/.test(model)) { + xmlStream.addAttribute('xml:space', 'preserve'); + } + xmlStream.writeText(model); + xmlStream.closeNode(); + } + get model() { + return this._text.join('').replace(/_x([0-9A-F]{4})_/g, ($0, $1) => String.fromCharCode(parseInt($1, 16))); + } + parseOpen(node) { + switch (node.name) { + case 't': + this._text = []; + return true; + default: + return false; + } + } + parseText(text) { + this._text.push(text); + } + parseClose() { + return false; + } +} +module.exports = TextXform; + +},{"../base-xform":32}],126:[function(require,module,exports){ +"use strict"; + +const Enums = require('../../../doc/enums'); +const utils = require('../../../utils/utils'); +const BaseXform = require('../base-xform'); +const validation = { + horizontalValues: ['left', 'center', 'right', 'fill', 'centerContinuous', 'distributed', 'justify'].reduce((p, v) => { + p[v] = true; + return p; + }, {}), + horizontal(value) { + return this.horizontalValues[value] ? value : undefined; + }, + verticalValues: ['top', 'middle', 'bottom', 'distributed', 'justify'].reduce((p, v) => { + p[v] = true; + return p; + }, {}), + vertical(value) { + if (value === 'middle') return 'center'; + return this.verticalValues[value] ? value : undefined; + }, + wrapText(value) { + return value ? true : undefined; + }, + shrinkToFit(value) { + return value ? true : undefined; + }, + textRotation(value) { + switch (value) { + case 'vertical': + return value; + default: + value = utils.validInt(value); + return value >= -90 && value <= 90 ? value : undefined; + } + }, + indent(value) { + value = utils.validInt(value); + return Math.max(0, value); + }, + readingOrder(value) { + switch (value) { + case 'ltr': + return Enums.ReadingOrder.LeftToRight; + case 'rtl': + return Enums.ReadingOrder.RightToLeft; + default: + return undefined; + } + } +}; +const textRotationXform = { + toXml(textRotation) { + textRotation = validation.textRotation(textRotation); + if (textRotation) { + if (textRotation === 'vertical') { + return 255; + } + const tr = Math.round(textRotation); + if (tr >= 0 && tr <= 90) { + return tr; + } + if (tr < 0 && tr >= -90) { + return 90 - tr; + } + } + return undefined; + }, + toModel(textRotation) { + const tr = utils.validInt(textRotation); + if (tr !== undefined) { + if (tr === 255) { + return 'vertical'; + } + if (tr >= 0 && tr <= 90) { + return tr; + } + if (tr > 90 && tr <= 180) { + return 90 - tr; + } + } + return undefined; + } +}; + +// Alignment encapsulates translation from style.alignment model to/from xlsx +class AlignmentXform extends BaseXform { + get tag() { + return 'alignment'; + } + render(xmlStream, model) { + xmlStream.addRollback(); + xmlStream.openNode('alignment'); + let isValid = false; + function add(name, value) { + if (value) { + xmlStream.addAttribute(name, value); + isValid = true; + } + } + add('horizontal', validation.horizontal(model.horizontal)); + add('vertical', validation.vertical(model.vertical)); + add('wrapText', validation.wrapText(model.wrapText) ? '1' : false); + add('shrinkToFit', validation.shrinkToFit(model.shrinkToFit) ? '1' : false); + add('indent', validation.indent(model.indent)); + add('textRotation', textRotationXform.toXml(model.textRotation)); + add('readingOrder', validation.readingOrder(model.readingOrder)); + xmlStream.closeNode(); + if (isValid) { + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + parseOpen(node) { + const model = {}; + let valid = false; + function add(truthy, name, value) { + if (truthy) { + model[name] = value; + valid = true; + } + } + add(node.attributes.horizontal, 'horizontal', node.attributes.horizontal); + add(node.attributes.vertical, 'vertical', node.attributes.vertical === 'center' ? 'middle' : node.attributes.vertical); + add(node.attributes.wrapText, 'wrapText', utils.parseBoolean(node.attributes.wrapText)); + add(node.attributes.shrinkToFit, 'shrinkToFit', utils.parseBoolean(node.attributes.shrinkToFit)); + add(node.attributes.indent, 'indent', parseInt(node.attributes.indent, 10)); + add(node.attributes.textRotation, 'textRotation', textRotationXform.toModel(node.attributes.textRotation)); + add(node.attributes.readingOrder, 'readingOrder', node.attributes.readingOrder === '2' ? 'rtl' : 'ltr'); + this.model = valid ? model : null; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = AlignmentXform; + +},{"../../../doc/enums":7,"../../../utils/utils":27,"../base-xform":32}],127:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const BaseXform = require('../base-xform'); +const utils = require('../../../utils/utils'); +const ColorXform = require('./color-xform'); +class EdgeXform extends BaseXform { + constructor(name) { + super(); + this.name = name; + this.map = { + color: new ColorXform() + }; + } + get tag() { + return this.name; + } + render(xmlStream, model, defaultColor) { + const color = model && model.color || defaultColor || this.defaultColor; + xmlStream.openNode(this.name); + if (model && model.style) { + xmlStream.addAttribute('style', model.style); + if (color) { + this.map.color.render(xmlStream, color); + } + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.name: + { + const { + style + } = node.attributes; + if (style) { + this.model = { + style + }; + } else { + this.model = undefined; + } + return true; + } + case 'color': + this.parser = this.map.color; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (name === this.name) { + if (this.map.color.model) { + if (!this.model) { + this.model = {}; + } + this.model.color = this.map.color.model; + } + } + return false; + } + validStyle(value) { + return EdgeXform.validStyleValues[value]; + } +} +EdgeXform.validStyleValues = ['thin', 'dashed', 'dotted', 'dashDot', 'hair', 'dashDotDot', 'slantDashDot', 'mediumDashed', 'mediumDashDotDot', 'mediumDashDot', 'medium', 'double', 'thick'].reduce((p, v) => { + p[v] = true; + return p; +}, {}); + +// Border encapsulates translation from border model to/from xlsx +class BorderXform extends BaseXform { + constructor() { + super(); + this.map = { + top: new EdgeXform('top'), + left: new EdgeXform('left'), + bottom: new EdgeXform('bottom'), + right: new EdgeXform('right'), + diagonal: new EdgeXform('diagonal') + }; + } + render(xmlStream, model) { + const { + color + } = model; + xmlStream.openNode('border'); + if (model.diagonal && model.diagonal.style) { + if (model.diagonal.up) { + xmlStream.addAttribute('diagonalUp', '1'); + } + if (model.diagonal.down) { + xmlStream.addAttribute('diagonalDown', '1'); + } + } + function add(edgeModel, edgeXform) { + if (edgeModel && !edgeModel.color && model.color) { + // don't mess with incoming models + edgeModel = { + ...edgeModel, + color: model.color + }; + } + edgeXform.render(xmlStream, edgeModel, color); + } + add(model.left, this.map.left); + add(model.right, this.map.right); + add(model.top, this.map.top); + add(model.bottom, this.map.bottom); + add(model.diagonal, this.map.diagonal); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'border': + this.reset(); + this.diagonalUp = utils.parseBoolean(node.attributes.diagonalUp); + this.diagonalDown = utils.parseBoolean(node.attributes.diagonalDown); + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (name === 'border') { + const model = this.model = {}; + const add = function (key, edgeModel, extensions) { + if (edgeModel) { + if (extensions) { + Object.assign(edgeModel, extensions); + } + model[key] = edgeModel; + } + }; + add('left', this.map.left.model); + add('right', this.map.right.model); + add('top', this.map.top.model); + add('bottom', this.map.bottom.model); + add('diagonal', this.map.diagonal.model, { + up: this.diagonalUp, + down: this.diagonalDown + }); + } + return false; + } +} +module.exports = BorderXform; + +},{"../../../utils/utils":27,"../base-xform":32,"./color-xform":128}],128:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); + +// Color encapsulates translation from color model to/from xlsx +class ColorXform extends BaseXform { + constructor(name) { + super(); + + // this.name controls the xm node name + this.name = name || 'color'; + } + get tag() { + return this.name; + } + render(xmlStream, model) { + if (model) { + xmlStream.openNode(this.name); + if (model.argb) { + xmlStream.addAttribute('rgb', model.argb); + } else if (model.theme !== undefined) { + xmlStream.addAttribute('theme', model.theme); + if (model.tint !== undefined) { + xmlStream.addAttribute('tint', model.tint); + } + } else if (model.indexed !== undefined) { + xmlStream.addAttribute('indexed', model.indexed); + } else { + xmlStream.addAttribute('auto', '1'); + } + xmlStream.closeNode(); + return true; + } + return false; + } + parseOpen(node) { + if (node.name === this.name) { + if (node.attributes.rgb) { + this.model = { + argb: node.attributes.rgb + }; + } else if (node.attributes.theme) { + this.model = { + theme: parseInt(node.attributes.theme, 10) + }; + if (node.attributes.tint) { + this.model.tint = parseFloat(node.attributes.tint); + } + } else if (node.attributes.indexed) { + this.model = { + indexed: parseInt(node.attributes.indexed, 10) + }; + } else { + this.model = undefined; + } + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = ColorXform; + +},{"../base-xform":32}],129:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const AlignmentXform = require('./alignment-xform'); +const BorderXform = require('./border-xform'); +const FillXform = require('./fill-xform'); +const FontXform = require('./font-xform'); +const NumFmtXform = require('./numfmt-xform'); +const ProtectionXform = require('./protection-xform'); + +// +// Optional +// Optional +// + +// Style assists translation from style model to/from xlsx +class DxfXform extends BaseXform { + constructor() { + super(); + this.map = { + alignment: new AlignmentXform(), + border: new BorderXform(), + fill: new FillXform(), + font: new FontXform(), + numFmt: new NumFmtXform(), + protection: new ProtectionXform() + }; + } + get tag() { + return 'dxf'; + } + + // how do we generate dxfid? + + render(xmlStream, model) { + xmlStream.openNode(this.tag); + if (model.font) { + this.map.font.render(xmlStream, model.font); + } + if (model.numFmt && model.numFmtId) { + const numFmtModel = { + id: model.numFmtId, + formatCode: model.numFmt + }; + this.map.numFmt.render(xmlStream, numFmtModel); + } + if (model.fill) { + this.map.fill.render(xmlStream, model.fill); + } + if (model.alignment) { + this.map.alignment.render(xmlStream, model.alignment); + } + if (model.border) { + this.map.border.render(xmlStream, model.border); + } + if (model.protection) { + this.map.protection.render(xmlStream, model.protection); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + // this node is often repeated. Need to reset children + this.reset(); + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + return true; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + if (name === this.tag) { + this.model = { + alignment: this.map.alignment.model, + border: this.map.border.model, + fill: this.map.fill.model, + font: this.map.font.model, + numFmt: this.map.numFmt.model, + protection: this.map.protection.model + }; + return false; + } + return true; + } +} +module.exports = DxfXform; + +},{"../base-xform":32,"./alignment-xform":126,"./border-xform":127,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./protection-xform":133}],130:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const BaseXform = require('../base-xform'); +const ColorXform = require('./color-xform'); +class StopXform extends BaseXform { + constructor() { + super(); + this.map = { + color: new ColorXform() + }; + } + get tag() { + return 'stop'; + } + render(xmlStream, model) { + xmlStream.openNode('stop'); + xmlStream.addAttribute('position', model.position); + this.map.color.render(xmlStream, model.color); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'stop': + this.model = { + position: parseFloat(node.attributes.position) + }; + return true; + case 'color': + this.parser = this.map.color; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.color = this.parser.model; + this.parser = undefined; + } + return true; + } + return false; + } +} +class PatternFillXform extends BaseXform { + constructor() { + super(); + this.map = { + fgColor: new ColorXform('fgColor'), + bgColor: new ColorXform('bgColor') + }; + } + get name() { + return 'pattern'; + } + get tag() { + return 'patternFill'; + } + render(xmlStream, model) { + xmlStream.openNode('patternFill'); + xmlStream.addAttribute('patternType', model.pattern); + if (model.fgColor) { + this.map.fgColor.render(xmlStream, model.fgColor); + } + if (model.bgColor) { + this.map.bgColor.render(xmlStream, model.bgColor); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'patternFill': + this.model = { + type: 'pattern', + pattern: node.attributes.patternType + }; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + if (this.parser.model) { + this.model[name] = this.parser.model; + } + this.parser = undefined; + } + return true; + } + return false; + } +} +class GradientFillXform extends BaseXform { + constructor() { + super(); + this.map = { + stop: new StopXform() + }; + // if (model) { + // this.gradient = model.gradient; + // if (model.center) { + // this.center = model.center; + // } + // if (model.degree !== undefined) { + // this.degree = model.degree; + // } + // this.stops = model.stops.map(function(stop) { return new StopXform(stop); }); + // } else { + // this.stops = []; + // } + } + + get name() { + return 'gradient'; + } + get tag() { + return 'gradientFill'; + } + render(xmlStream, model) { + xmlStream.openNode('gradientFill'); + switch (model.gradient) { + case 'angle': + xmlStream.addAttribute('degree', model.degree); + break; + case 'path': + xmlStream.addAttribute('type', 'path'); + if (model.center.left) { + xmlStream.addAttribute('left', model.center.left); + if (model.center.right === undefined) { + xmlStream.addAttribute('right', model.center.left); + } + } + if (model.center.right) { + xmlStream.addAttribute('right', model.center.right); + } + if (model.center.top) { + xmlStream.addAttribute('top', model.center.top); + if (model.center.bottom === undefined) { + xmlStream.addAttribute('bottom', model.center.top); + } + } + if (model.center.bottom) { + xmlStream.addAttribute('bottom', model.center.bottom); + } + break; + default: + break; + } + const stopXform = this.map.stop; + model.stops.forEach(stopModel => { + stopXform.render(xmlStream, stopModel); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'gradientFill': + { + const model = this.model = { + stops: [] + }; + if (node.attributes.degree) { + model.gradient = 'angle'; + model.degree = parseInt(node.attributes.degree, 10); + } else if (node.attributes.type === 'path') { + model.gradient = 'path'; + model.center = { + left: node.attributes.left ? parseFloat(node.attributes.left) : 0, + top: node.attributes.top ? parseFloat(node.attributes.top) : 0 + }; + if (node.attributes.right !== node.attributes.left) { + model.center.right = node.attributes.right ? parseFloat(node.attributes.right) : 0; + } + if (node.attributes.bottom !== node.attributes.top) { + model.center.bottom = node.attributes.bottom ? parseFloat(node.attributes.bottom) : 0; + } + } + return true; + } + case 'stop': + this.parser = this.map.stop; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.stops.push(this.parser.model); + this.parser = undefined; + } + return true; + } + return false; + } +} + +// Fill encapsulates translation from fill model to/from xlsx +class FillXform extends BaseXform { + constructor() { + super(); + this.map = { + patternFill: new PatternFillXform(), + gradientFill: new GradientFillXform() + }; + } + get tag() { + return 'fill'; + } + render(xmlStream, model) { + xmlStream.addRollback(); + xmlStream.openNode('fill'); + switch (model.type) { + case 'pattern': + this.map.patternFill.render(xmlStream, model); + break; + case 'gradient': + this.map.gradientFill.render(xmlStream, model); + break; + default: + xmlStream.rollback(); + return; + } + xmlStream.closeNode(); + xmlStream.commit(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'fill': + this.model = {}; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model = this.parser.model; + this.model.type = this.parser.name; + this.parser = undefined; + } + return true; + } + return false; + } + validStyle(value) { + return FillXform.validPatternValues[value]; + } +} +FillXform.validPatternValues = ['none', 'solid', 'darkVertical', 'darkGray', 'mediumGray', 'lightGray', 'gray125', 'gray0625', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis', 'lightGrid'].reduce((p, v) => { + p[v] = true; + return p; +}, {}); +FillXform.StopXform = StopXform; +FillXform.PatternFillXform = PatternFillXform; +FillXform.GradientFillXform = GradientFillXform; +module.exports = FillXform; + +},{"../base-xform":32,"./color-xform":128}],131:[function(require,module,exports){ +'use strict'; + +const ColorXform = require('./color-xform'); +const BooleanXform = require('../simple/boolean-xform'); +const IntegerXform = require('../simple/integer-xform'); +const StringXform = require('../simple/string-xform'); +const UnderlineXform = require('./underline-xform'); +const _ = require('../../../utils/under-dash'); +const BaseXform = require('../base-xform'); + +// Font encapsulates translation from font model to xlsx +class FontXform extends BaseXform { + constructor(options) { + super(); + this.options = options || FontXform.OPTIONS; + this.map = { + b: { + prop: 'bold', + xform: new BooleanXform({ + tag: 'b', + attr: 'val' + }) + }, + i: { + prop: 'italic', + xform: new BooleanXform({ + tag: 'i', + attr: 'val' + }) + }, + u: { + prop: 'underline', + xform: new UnderlineXform() + }, + charset: { + prop: 'charset', + xform: new IntegerXform({ + tag: 'charset', + attr: 'val' + }) + }, + color: { + prop: 'color', + xform: new ColorXform() + }, + condense: { + prop: 'condense', + xform: new BooleanXform({ + tag: 'condense', + attr: 'val' + }) + }, + extend: { + prop: 'extend', + xform: new BooleanXform({ + tag: 'extend', + attr: 'val' + }) + }, + family: { + prop: 'family', + xform: new IntegerXform({ + tag: 'family', + attr: 'val' + }) + }, + outline: { + prop: 'outline', + xform: new BooleanXform({ + tag: 'outline', + attr: 'val' + }) + }, + vertAlign: { + prop: 'vertAlign', + xform: new StringXform({ + tag: 'vertAlign', + attr: 'val' + }) + }, + scheme: { + prop: 'scheme', + xform: new StringXform({ + tag: 'scheme', + attr: 'val' + }) + }, + shadow: { + prop: 'shadow', + xform: new BooleanXform({ + tag: 'shadow', + attr: 'val' + }) + }, + strike: { + prop: 'strike', + xform: new BooleanXform({ + tag: 'strike', + attr: 'val' + }) + }, + sz: { + prop: 'size', + xform: new IntegerXform({ + tag: 'sz', + attr: 'val' + }) + } + }; + this.map[this.options.fontNameTag] = { + prop: 'name', + xform: new StringXform({ + tag: this.options.fontNameTag, + attr: 'val' + }) + }; + } + get tag() { + return this.options.tagName; + } + render(xmlStream, model) { + const { + map + } = this; + xmlStream.openNode(this.options.tagName); + _.each(this.map, (defn, tag) => { + map[tag].xform.render(xmlStream, model[defn.prop]); + }); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + if (this.map[node.name]) { + this.parser = this.map[node.name].xform; + return this.parser.parseOpen(node); + } + switch (node.name) { + case this.options.tagName: + this.model = {}; + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser && !this.parser.parseClose(name)) { + const item = this.map[name]; + if (this.parser.model) { + this.model[item.prop] = this.parser.model; + } + this.parser = undefined; + return true; + } + switch (name) { + case this.options.tagName: + return false; + default: + return true; + } + } +} +FontXform.OPTIONS = { + tagName: 'font', + fontNameTag: 'name' +}; +module.exports = FontXform; + +},{"../../../utils/under-dash":26,"../base-xform":32,"../simple/boolean-xform":116,"../simple/integer-xform":118,"../simple/string-xform":119,"./color-xform":128,"./underline-xform":136}],132:[function(require,module,exports){ +"use strict"; + +const _ = require('../../../utils/under-dash'); +const defaultNumFormats = require('../../defaultnumformats'); +const BaseXform = require('../base-xform'); +function hashDefaultFormats() { + const hash = {}; + _.each(defaultNumFormats, (dnf, id) => { + if (dnf.f) { + hash[dnf.f] = parseInt(id, 10); + } + // at some point, add the other cultures here... + }); + + return hash; +} +const defaultFmtHash = hashDefaultFormats(); + +// NumFmt encapsulates translation between number format and xlsx +class NumFmtXform extends BaseXform { + constructor(id, formatCode) { + super(); + this.id = id; + this.formatCode = formatCode; + } + get tag() { + return 'numFmt'; + } + render(xmlStream, model) { + xmlStream.leafNode('numFmt', { + numFmtId: model.id, + formatCode: model.formatCode + }); + } + parseOpen(node) { + switch (node.name) { + case 'numFmt': + this.model = { + id: parseInt(node.attributes.numFmtId, 10), + formatCode: node.attributes.formatCode.replace(/[\\](.)/g, '$1') + }; + return true; + default: + return false; + } + } + parseText() {} + parseClose() { + return false; + } +} +NumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) { + return defaultFmtHash[formatCode]; +}; +NumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) { + return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f; +}; +module.exports = NumFmtXform; + +},{"../../../utils/under-dash":26,"../../defaultnumformats":30,"../base-xform":32}],133:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const validation = { + boolean(value, dflt) { + if (value === undefined) { + return dflt; + } + return value; + } +}; + +// Protection encapsulates translation from style.protection model to/from xlsx +class ProtectionXform extends BaseXform { + get tag() { + return 'protection'; + } + render(xmlStream, model) { + xmlStream.addRollback(); + xmlStream.openNode('protection'); + let isValid = false; + function add(name, value) { + if (value !== undefined) { + xmlStream.addAttribute(name, value); + isValid = true; + } + } + add('locked', validation.boolean(model.locked, true) ? undefined : '0'); + add('hidden', validation.boolean(model.hidden, false) ? '1' : undefined); + xmlStream.closeNode(); + if (isValid) { + xmlStream.commit(); + } else { + xmlStream.rollback(); + } + } + parseOpen(node) { + const model = { + locked: !(node.attributes.locked === '0'), + hidden: node.attributes.hidden === '1' + }; + + // only want to record models that differ from defaults + const isSignificant = !model.locked || model.hidden; + this.model = isSignificant ? model : null; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = ProtectionXform; + +},{"../base-xform":32}],134:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const AlignmentXform = require('./alignment-xform'); +const ProtectionXform = require('./protection-xform'); + +// +// Optional +// Optional +// + +// Style assists translation from style model to/from xlsx +class StyleXform extends BaseXform { + constructor(options) { + super(); + this.xfId = !!(options && options.xfId); + this.map = { + alignment: new AlignmentXform(), + protection: new ProtectionXform() + }; + } + get tag() { + return 'xf'; + } + render(xmlStream, model) { + xmlStream.openNode('xf', { + numFmtId: model.numFmtId || 0, + fontId: model.fontId || 0, + fillId: model.fillId || 0, + borderId: model.borderId || 0 + }); + if (this.xfId) { + xmlStream.addAttribute('xfId', model.xfId || 0); + } + if (model.numFmtId) { + xmlStream.addAttribute('applyNumberFormat', '1'); + } + if (model.fontId) { + xmlStream.addAttribute('applyFont', '1'); + } + if (model.fillId) { + xmlStream.addAttribute('applyFill', '1'); + } + if (model.borderId) { + xmlStream.addAttribute('applyBorder', '1'); + } + if (model.alignment) { + xmlStream.addAttribute('applyAlignment', '1'); + } + if (model.protection) { + xmlStream.addAttribute('applyProtection', '1'); + } + + /** + * Rendering tags causes close of XML stream. + * Therefore adding attributes must be done before rendering tags. + */ + + if (model.alignment) { + this.map.alignment.render(xmlStream, model.alignment); + } + if (model.protection) { + this.map.protection.render(xmlStream, model.protection); + } + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + // used during sax parsing of xml to build font object + switch (node.name) { + case 'xf': + this.model = { + numFmtId: parseInt(node.attributes.numFmtId, 10), + fontId: parseInt(node.attributes.fontId, 10), + fillId: parseInt(node.attributes.fillId, 10), + borderId: parseInt(node.attributes.borderId, 10) + }; + if (this.xfId) { + this.model.xfId = parseInt(node.attributes.xfId, 10); + } + return true; + case 'alignment': + this.parser = this.map.alignment; + this.parser.parseOpen(node); + return true; + case 'protection': + this.parser = this.map.protection; + this.parser.parseOpen(node); + return true; + default: + return false; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + if (this.map.protection === this.parser) { + this.model.protection = this.parser.model; + } else { + this.model.alignment = this.parser.model; + } + this.parser = undefined; + } + return true; + } + return name !== 'xf'; + } +} +module.exports = StyleXform; + +},{"../base-xform":32,"./alignment-xform":126,"./protection-xform":133}],135:[function(require,module,exports){ +"use strict"; + +/* eslint-disable max-classes-per-file */ +const Enums = require('../../../doc/enums'); +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const StaticXform = require('../static-xform'); +const ListXform = require('../list-xform'); +const FontXform = require('./font-xform'); +const FillXform = require('./fill-xform'); +const BorderXform = require('./border-xform'); +const NumFmtXform = require('./numfmt-xform'); +const StyleXform = require('./style-xform'); +const DxfXform = require('./dxf-xform'); + +// custom numfmt ids start here +const NUMFMT_BASE = 164; + +// ============================================================================= +// StylesXform is used to generate and parse the styles.xml file +// it manages the collections of fonts, number formats, alignments, etc +class StylesXform extends BaseXform { + constructor(initialise) { + super(); + this.map = { + numFmts: new ListXform({ + tag: 'numFmts', + count: true, + childXform: new NumFmtXform() + }), + fonts: new ListXform({ + tag: 'fonts', + count: true, + childXform: new FontXform(), + $: { + 'x14ac:knownFonts': 1 + } + }), + fills: new ListXform({ + tag: 'fills', + count: true, + childXform: new FillXform() + }), + borders: new ListXform({ + tag: 'borders', + count: true, + childXform: new BorderXform() + }), + cellStyleXfs: new ListXform({ + tag: 'cellStyleXfs', + count: true, + childXform: new StyleXform() + }), + cellXfs: new ListXform({ + tag: 'cellXfs', + count: true, + childXform: new StyleXform({ + xfId: true + }) + }), + dxfs: new ListXform({ + tag: 'dxfs', + always: true, + count: true, + childXform: new DxfXform() + }), + // for style manager + numFmt: new NumFmtXform(), + font: new FontXform(), + fill: new FillXform(), + border: new BorderXform(), + style: new StyleXform({ + xfId: true + }), + cellStyles: StylesXform.STATIC_XFORMS.cellStyles, + tableStyles: StylesXform.STATIC_XFORMS.tableStyles, + extLst: StylesXform.STATIC_XFORMS.extLst + }; + if (initialise) { + // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing + this.init(); + } + } + initIndex() { + this.index = { + style: {}, + numFmt: {}, + numFmtNextId: 164, + // start custom format ids here + font: {}, + border: {}, + fill: {} + }; + } + init() { + // Prepare for Style Manager role + this.model = { + styles: [], + numFmts: [], + fonts: [], + borders: [], + fills: [], + dxfs: [] + }; + this.initIndex(); + + // default (zero) border + this._addBorder({}); + + // add default (all zero) style + this._addStyle({ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }); + + // add default fills + this._addFill({ + type: 'pattern', + pattern: 'none' + }); + this._addFill({ + type: 'pattern', + pattern: 'gray125' + }); + this.weakMap = new WeakMap(); + } + render(xmlStream, model) { + model = model || this.model; + // + // + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES); + if (this.index) { + // model has been built by style manager role (contains xml) + if (model.numFmts && model.numFmts.length) { + xmlStream.openNode('numFmts', { + count: model.numFmts.length + }); + model.numFmts.forEach(numFmtXml => { + xmlStream.writeXml(numFmtXml); + }); + xmlStream.closeNode(); + } + if (!model.fonts.length) { + // default (zero) font + this._addFont({ + size: 11, + color: { + theme: 1 + }, + name: 'Calibri', + family: 2, + scheme: 'minor' + }); + } + xmlStream.openNode('fonts', { + count: model.fonts.length, + 'x14ac:knownFonts': 1 + }); + model.fonts.forEach(fontXml => { + xmlStream.writeXml(fontXml); + }); + xmlStream.closeNode(); + xmlStream.openNode('fills', { + count: model.fills.length + }); + model.fills.forEach(fillXml => { + xmlStream.writeXml(fillXml); + }); + xmlStream.closeNode(); + xmlStream.openNode('borders', { + count: model.borders.length + }); + model.borders.forEach(borderXml => { + xmlStream.writeXml(borderXml); + }); + xmlStream.closeNode(); + this.map.cellStyleXfs.render(xmlStream, [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }]); + xmlStream.openNode('cellXfs', { + count: model.styles.length + }); + model.styles.forEach(styleXml => { + xmlStream.writeXml(styleXml); + }); + xmlStream.closeNode(); + } else { + // model is plain JSON and needs to be xformed + this.map.numFmts.render(xmlStream, model.numFmts); + this.map.fonts.render(xmlStream, model.fonts); + this.map.fills.render(xmlStream, model.fills); + this.map.borders.render(xmlStream, model.borders); + this.map.cellStyleXfs.render(xmlStream, [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }]); + this.map.cellXfs.render(xmlStream, model.styles); + } + StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream); + this.map.dxfs.render(xmlStream, model.dxfs); + StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream); + StylesXform.STATIC_XFORMS.extLst.render(xmlStream); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case 'styleSheet': + this.initIndex(); + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + return true; + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case 'styleSheet': + { + this.model = {}; + const add = (propName, xform) => { + if (xform.model && xform.model.length) { + this.model[propName] = xform.model; + } + }; + add('numFmts', this.map.numFmts); + add('fonts', this.map.fonts); + add('fills', this.map.fills); + add('borders', this.map.borders); + add('styles', this.map.cellXfs); + add('dxfs', this.map.dxfs); + + // index numFmts + this.index = { + model: [], + numFmt: [] + }; + if (this.model.numFmts) { + const numFmtIndex = this.index.numFmt; + this.model.numFmts.forEach(numFmt => { + numFmtIndex[numFmt.id] = numFmt.formatCode; + }); + } + return false; + } + default: + // not quite sure how we get here! + return true; + } + } + + // add a cell's style model to the collection + // each style property is processed and cross-referenced, etc. + // the styleId is returned. Note: cellType is used when numFmt not defined + addStyleModel(model, cellType) { + if (!model) { + return 0; + } + + // if we have no default font, add it here now + if (!this.model.fonts.length) { + // default (zero) font + this._addFont({ + size: 11, + color: { + theme: 1 + }, + name: 'Calibri', + family: 2, + scheme: 'minor' + }); + } + + // if we have seen this style object before, assume it has the same styleId + if (this.weakMap && this.weakMap.has(model)) { + return this.weakMap.get(model); + } + const style = {}; + cellType = cellType || Enums.ValueType.Number; + if (model.numFmt) { + style.numFmtId = this._addNumFmtStr(model.numFmt); + } else { + switch (cellType) { + case Enums.ValueType.Number: + style.numFmtId = this._addNumFmtStr('General'); + break; + case Enums.ValueType.Date: + style.numFmtId = this._addNumFmtStr('mm-dd-yy'); + break; + default: + break; + } + } + if (model.font) { + style.fontId = this._addFont(model.font); + } + if (model.border) { + style.borderId = this._addBorder(model.border); + } + if (model.fill) { + style.fillId = this._addFill(model.fill); + } + if (model.alignment) { + style.alignment = model.alignment; + } + if (model.protection) { + style.protection = model.protection; + } + const styleId = this._addStyle(style); + if (this.weakMap) { + this.weakMap.set(model, styleId); + } + return styleId; + } + + // given a styleId (i.e. s="n"), get the cell's style model + // objects are shared where possible. + getStyleModel(id) { + // if the style doesn't exist return null + const style = this.model.styles[id]; + if (!style) return null; + + // have we built this model before? + let model = this.index.model[id]; + if (model) return model; + + // build a new model + model = this.index.model[id] = {}; + + // ------------------------------------------------------- + // number format + if (style.numFmtId) { + const numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId); + if (numFmt) { + model.numFmt = numFmt; + } + } + function addStyle(name, group, styleId) { + if (styleId || styleId === 0) { + const part = group[styleId]; + if (part) { + model[name] = part; + } + } + } + addStyle('font', this.model.fonts, style.fontId); + addStyle('border', this.model.borders, style.borderId); + addStyle('fill', this.model.fills, style.fillId); + + // ------------------------------------------------------- + // alignment + if (style.alignment) { + model.alignment = style.alignment; + } + + // ------------------------------------------------------- + // protection + if (style.protection) { + model.protection = style.protection; + } + return model; + } + addDxfStyle(style) { + if (style.numFmt) { + // register numFmtId to use it during dxf-xform rendering + style.numFmtId = this._addNumFmtStr(style.numFmt); + } + this.model.dxfs.push(style); + return this.model.dxfs.length - 1; + } + getDxfStyle(id) { + return this.model.dxfs[id]; + } + + // ========================================================================= + // Private Interface + _addStyle(style) { + const xml = this.map.style.toXml(style); + let index = this.index.style[xml]; + if (index === undefined) { + index = this.index.style[xml] = this.model.styles.length; + this.model.styles.push(xml); + } + return index; + } + + // ========================================================================= + // Number Formats + _addNumFmtStr(formatCode) { + // check if default format + let index = NumFmtXform.getDefaultFmtId(formatCode); + if (index !== undefined) return index; + + // check if already in + index = this.index.numFmt[formatCode]; + if (index !== undefined) return index; + index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length; + const xml = this.map.numFmt.toXml({ + id: index, + formatCode + }); + this.model.numFmts.push(xml); + return index; + } + + // ========================================================================= + // Fonts + _addFont(font) { + const xml = this.map.font.toXml(font); + let index = this.index.font[xml]; + if (index === undefined) { + index = this.index.font[xml] = this.model.fonts.length; + this.model.fonts.push(xml); + } + return index; + } + + // ========================================================================= + // Borders + _addBorder(border) { + const xml = this.map.border.toXml(border); + let index = this.index.border[xml]; + if (index === undefined) { + index = this.index.border[xml] = this.model.borders.length; + this.model.borders.push(xml); + } + return index; + } + + // ========================================================================= + // Fills + _addFill(fill) { + const xml = this.map.fill.toXml(fill); + let index = this.index.fill[xml]; + if (index === undefined) { + index = this.index.fill[xml] = this.model.fills.length; + this.model.fills.push(xml); + } + return index; + } + + // ========================================================================= +} + +StylesXform.STYLESHEET_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'x14ac x16r2', + 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac', + 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main' +}; +StylesXform.STATIC_XFORMS = { + cellStyles: new StaticXform({ + tag: 'cellStyles', + $: { + count: 1 + }, + c: [{ + tag: 'cellStyle', + $: { + name: 'Normal', + xfId: 0, + builtinId: 0 + } + }] + }), + dxfs: new StaticXform({ + tag: 'dxfs', + $: { + count: 0 + } + }), + tableStyles: new StaticXform({ + tag: 'tableStyles', + $: { + count: 0, + defaultTableStyle: 'TableStyleMedium2', + defaultPivotStyle: 'PivotStyleLight16' + } + }), + extLst: new StaticXform({ + tag: 'extLst', + c: [{ + tag: 'ext', + $: { + uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}', + 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main' + }, + c: [{ + tag: 'x14:slicerStyles', + $: { + defaultSlicerStyle: 'SlicerStyleLight1' + } + }] + }, { + tag: 'ext', + $: { + uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}', + 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main' + }, + c: [{ + tag: 'x15:timelineStyles', + $: { + defaultTimelineStyle: 'TimeSlicerStyleLight1' + } + }] + }] + }) +}; + +// the stylemanager mock acts like StyleManager except that it always returns 0 or {} +class StylesXformMock extends StylesXform { + constructor() { + super(); + this.model = { + styles: [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }], + numFmts: [], + fonts: [{ + size: 11, + color: { + theme: 1 + }, + name: 'Calibri', + family: 2, + scheme: 'minor' + }], + borders: [{}], + fills: [{ + type: 'pattern', + pattern: 'none' + }, { + type: 'pattern', + pattern: 'gray125' + }] + }; + } + + // ========================================================================= + // Style Manager Interface + + // override normal behaviour - consume and dispose + parseStream(stream) { + stream.autodrain(); + return Promise.resolve(); + } + + // add a cell's style model to the collection + // each style property is processed and cross-referenced, etc. + // the styleId is returned. Note: cellType is used when numFmt not defined + addStyleModel(model, cellType) { + switch (cellType) { + case Enums.ValueType.Date: + return this.dateStyleId; + default: + return 0; + } + } + get dateStyleId() { + if (!this._dateStyleId) { + const dateStyle = { + numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy') + }; + this._dateStyleId = this.model.styles.length; + this.model.styles.push(dateStyle); + } + return this._dateStyleId; + } + + // given a styleId (i.e. s="n"), get the cell's style model + // objects are shared where possible. + getStyleModel( /* id */ + ) { + return {}; + } +} +StylesXform.Mock = StylesXformMock; +module.exports = StylesXform; + +},{"../../../doc/enums":7,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./border-xform":127,"./dxf-xform":129,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./style-xform":134}],136:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class UnderlineXform extends BaseXform { + constructor(model) { + super(); + this.model = model; + } + get tag() { + return 'u'; + } + render(xmlStream, model) { + model = model || this.model; + if (model === true) { + xmlStream.leafNode('u'); + } else { + const attr = UnderlineXform.Attributes[model]; + if (attr) { + xmlStream.leafNode('u', attr); + } + } + } + parseOpen(node) { + if (node.name === 'u') { + this.model = node.attributes.val || true; + } + } + parseText() {} + parseClose() { + return false; + } +} +UnderlineXform.Attributes = { + single: {}, + double: { + val: 'double' + }, + singleAccounting: { + val: 'singleAccounting' + }, + doubleAccounting: { + val: 'doubleAccounting' + } +}; +module.exports = UnderlineXform; + +},{"../base-xform":32}],137:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const FilterColumnXform = require('./filter-column-xform'); +class AutoFilterXform extends BaseXform { + constructor() { + super(); + this.map = { + filterColumn: new FilterColumnXform() + }; + } + get tag() { + return 'autoFilter'; + } + prepare(model) { + model.columns.forEach((column, index) => { + this.map.filterColumn.prepare(column, { + index + }); + }); + } + render(xmlStream, model) { + xmlStream.openNode(this.tag, { + ref: model.autoFilterRef + }); + model.columns.forEach(column => { + this.map.filterColumn.render(xmlStream, column); + }); + xmlStream.closeNode(); + return true; + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + switch (node.name) { + case this.tag: + this.model = { + autoFilterRef: node.attributes.ref, + columns: [] + }; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.model.columns.push(this.parser.model); + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + return false; + default: + throw new Error(`Unexpected xml node in parseClose: ${name}`); + } + } +} +module.exports = AutoFilterXform; + +},{"../base-xform":32,"./filter-column-xform":139}],138:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class CustomFilterXform extends BaseXform { + get tag() { + return 'customFilter'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + val: model.val, + operator: model.operator + }); + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + val: node.attributes.val, + operator: node.attributes.operator + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = CustomFilterXform; + +},{"../base-xform":32}],139:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +const ListXform = require('../list-xform'); +const CustomFilterXform = require('./custom-filter-xform'); +const FilterXform = require('./filter-xform'); +class FilterColumnXform extends BaseXform { + constructor() { + super(); + this.map = { + customFilters: new ListXform({ + tag: 'customFilters', + count: false, + empty: true, + childXform: new CustomFilterXform() + }), + filters: new ListXform({ + tag: 'filters', + count: false, + empty: true, + childXform: new FilterXform() + }) + }; + } + get tag() { + return 'filterColumn'; + } + prepare(model, options) { + model.colId = options.index.toString(); + } + render(xmlStream, model) { + if (model.customFilters) { + xmlStream.openNode(this.tag, { + colId: model.colId, + hiddenButton: model.filterButton ? '0' : '1' + }); + this.map.customFilters.render(xmlStream, model.customFilters); + xmlStream.closeNode(); + return true; + } + xmlStream.leafNode(this.tag, { + colId: model.colId, + hiddenButton: model.filterButton ? '0' : '1' + }); + return true; + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + const { + attributes + } = node; + switch (node.name) { + case this.tag: + this.model = { + filterButton: attributes.hiddenButton === '0' + }; + return true; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parseOpen(node); + return true; + } + throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`); + } + } + parseText() {} + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.customFilters = this.map.customFilters.model; + return false; + default: + // could be some unrecognised tags + return true; + } + } +} +module.exports = FilterColumnXform; + +},{"../base-xform":32,"../list-xform":71,"./custom-filter-xform":138,"./filter-xform":140}],140:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class FilterXform extends BaseXform { + get tag() { + return 'filter'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + val: model.val + }); + } + parseOpen(node) { + if (node.name === this.tag) { + this.model = { + val: node.attributes.val + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = FilterXform; + +},{"../base-xform":32}],141:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class TableColumnXform extends BaseXform { + get tag() { + return 'tableColumn'; + } + prepare(model, options) { + model.id = options.index + 1; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + id: model.id.toString(), + name: model.name, + totalsRowLabel: model.totalsRowLabel, + totalsRowFunction: model.totalsRowFunction, + dxfId: model.dxfId + }); + return true; + } + parseOpen(node) { + if (node.name === this.tag) { + const { + attributes + } = node; + this.model = { + name: attributes.name, + totalsRowLabel: attributes.totalsRowLabel, + totalsRowFunction: attributes.totalsRowFunction, + dxfId: attributes.dxfId + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = TableColumnXform; + +},{"../base-xform":32}],142:[function(require,module,exports){ +"use strict"; + +const BaseXform = require('../base-xform'); +class TableStyleInfoXform extends BaseXform { + get tag() { + return 'tableStyleInfo'; + } + render(xmlStream, model) { + xmlStream.leafNode(this.tag, { + name: model.theme ? model.theme : undefined, + showFirstColumn: model.showFirstColumn ? '1' : '0', + showLastColumn: model.showLastColumn ? '1' : '0', + showRowStripes: model.showRowStripes ? '1' : '0', + showColumnStripes: model.showColumnStripes ? '1' : '0' + }); + return true; + } + parseOpen(node) { + if (node.name === this.tag) { + const { + attributes + } = node; + this.model = { + theme: attributes.name ? attributes.name : null, + showFirstColumn: attributes.showFirstColumn === '1', + showLastColumn: attributes.showLastColumn === '1', + showRowStripes: attributes.showRowStripes === '1', + showColumnStripes: attributes.showColumnStripes === '1' + }; + return true; + } + return false; + } + parseText() {} + parseClose() { + return false; + } +} +module.exports = TableStyleInfoXform; + +},{"../base-xform":32}],143:[function(require,module,exports){ +"use strict"; + +const XmlStream = require('../../../utils/xml-stream'); +const BaseXform = require('../base-xform'); +const ListXform = require('../list-xform'); +const AutoFilterXform = require('./auto-filter-xform'); +const TableColumnXform = require('./table-column-xform'); +const TableStyleInfoXform = require('./table-style-info-xform'); +class TableXform extends BaseXform { + constructor() { + super(); + this.map = { + autoFilter: new AutoFilterXform(), + tableColumns: new ListXform({ + tag: 'tableColumns', + count: true, + empty: true, + childXform: new TableColumnXform() + }), + tableStyleInfo: new TableStyleInfoXform() + }; + } + prepare(model, options) { + this.map.autoFilter.prepare(model); + this.map.tableColumns.prepare(model.columns, options); + } + get tag() { + return 'table'; + } + render(xmlStream, model) { + xmlStream.openXml(XmlStream.StdDocAttributes); + xmlStream.openNode(this.tag, { + ...TableXform.TABLE_ATTRIBUTES, + id: model.id, + name: model.name, + displayName: model.displayName || model.name, + ref: model.tableRef, + totalsRowCount: model.totalsRow ? '1' : undefined, + totalsRowShown: model.totalsRow ? undefined : '1', + headerRowCount: model.headerRow ? '1' : '0' + }); + this.map.autoFilter.render(xmlStream, model); + this.map.tableColumns.render(xmlStream, model.columns); + this.map.tableStyleInfo.render(xmlStream, model.style); + xmlStream.closeNode(); + } + parseOpen(node) { + if (this.parser) { + this.parser.parseOpen(node); + return true; + } + const { + name, + attributes + } = node; + switch (name) { + case this.tag: + this.reset(); + this.model = { + name: attributes.name, + displayName: attributes.displayName || attributes.name, + tableRef: attributes.ref, + totalsRow: attributes.totalsRowCount === '1', + headerRow: attributes.headerRowCount === '1' + }; + break; + default: + this.parser = this.map[node.name]; + if (this.parser) { + this.parser.parseOpen(node); + } + break; + } + return true; + } + parseText(text) { + if (this.parser) { + this.parser.parseText(text); + } + } + parseClose(name) { + if (this.parser) { + if (!this.parser.parseClose(name)) { + this.parser = undefined; + } + return true; + } + switch (name) { + case this.tag: + this.model.columns = this.map.tableColumns.model; + if (this.map.autoFilter.model) { + this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef; + this.map.autoFilter.model.columns.forEach((column, index) => { + this.model.columns[index].filterButton = column.filterButton; + }); + } + this.model.style = this.map.tableStyleInfo.model; + return false; + default: + // could be some unrecognised tags + return true; + } + } + reconcile(model, options) { + // fetch the dfxs from styles + model.columns.forEach(column => { + if (column.dxfId !== undefined) { + column.style = options.styles.getDxfStyle(column.dxfId); + } + }); + } +} +TableXform.TABLE_ATTRIBUTES = { + xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006', + 'mc:Ignorable': 'xr xr3', + 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision', + 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3' + // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}', +}; + +module.exports = TableXform; + +},{"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":137,"./table-column-xform":141,"./table-style-info-xform":142}],144:[function(require,module,exports){ +(function (process,Buffer){(function (){ +"use strict"; + +const fs = require('fs'); +const JSZip = require('jszip'); +const { + PassThrough +} = require('readable-stream'); +const ZipStream = require('../utils/zip-stream'); +const StreamBuf = require('../utils/stream-buf'); +const utils = require('../utils/utils'); +const XmlStream = require('../utils/xml-stream'); +const { + bufferToString +} = require('../utils/browser-buffer-decode'); +const StylesXform = require('./xform/style/styles-xform'); +const CoreXform = require('./xform/core/core-xform'); +const SharedStringsXform = require('./xform/strings/shared-strings-xform'); +const RelationshipsXform = require('./xform/core/relationships-xform'); +const ContentTypesXform = require('./xform/core/content-types-xform'); +const AppXform = require('./xform/core/app-xform'); +const WorkbookXform = require('./xform/book/workbook-xform'); +const WorksheetXform = require('./xform/sheet/worksheet-xform'); +const DrawingXform = require('./xform/drawing/drawing-xform'); +const TableXform = require('./xform/table/table-xform'); +const CommentsXform = require('./xform/comment/comments-xform'); +const VmlNotesXform = require('./xform/comment/vml-notes-xform'); +const theme1Xml = require('./xml/theme1'); +function fsReadFileAsync(filename, options) { + return new Promise((resolve, reject) => { + fs.readFile(filename, options, (error, data) => { + if (error) { + reject(error); + } else { + resolve(data); + } + }); + }); +} +class XLSX { + constructor(workbook) { + this.workbook = workbook; + } + + // =============================================================================== + // Workbook + // ========================================================================= + // Read + + async readFile(filename, options) { + if (!(await utils.fs.exists(filename))) { + throw new Error(`File not found: ${filename}`); + } + const stream = fs.createReadStream(filename); + try { + const workbook = await this.read(stream, options); + stream.close(); + return workbook; + } catch (error) { + stream.close(); + throw error; + } + } + parseRels(stream) { + const xform = new RelationshipsXform(); + return xform.parseStream(stream); + } + parseWorkbook(stream) { + const xform = new WorkbookXform(); + return xform.parseStream(stream); + } + parseSharedStrings(stream) { + const xform = new SharedStringsXform(); + return xform.parseStream(stream); + } + reconcile(model, options) { + const workbookXform = new WorkbookXform(); + const worksheetXform = new WorksheetXform(options); + const drawingXform = new DrawingXform(); + const tableXform = new TableXform(); + workbookXform.reconcile(model); + + // reconcile drawings with their rels + const drawingOptions = { + media: model.media, + mediaIndex: model.mediaIndex + }; + Object.keys(model.drawings).forEach(name => { + const drawing = model.drawings[name]; + const drawingRel = model.drawingRels[name]; + if (drawingRel) { + drawingOptions.rels = drawingRel.reduce((o, rel) => { + o[rel.Id] = rel; + return o; + }, {}); + (drawing.anchors || []).forEach(anchor => { + const hyperlinks = anchor.picture && anchor.picture.hyperlinks; + if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) { + hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target; + delete hyperlinks.rId; + } + }); + drawingXform.reconcile(drawing, drawingOptions); + } + }); + + // reconcile tables with the default styles + const tableOptions = { + styles: model.styles + }; + Object.values(model.tables).forEach(table => { + tableXform.reconcile(table, tableOptions); + }); + const sheetOptions = { + styles: model.styles, + sharedStrings: model.sharedStrings, + media: model.media, + mediaIndex: model.mediaIndex, + date1904: model.properties && model.properties.date1904, + drawings: model.drawings, + comments: model.comments, + tables: model.tables, + vmlDrawings: model.vmlDrawings + }; + model.worksheets.forEach(worksheet => { + worksheet.relationships = model.worksheetRels[worksheet.sheetNo]; + worksheetXform.reconcile(worksheet, sheetOptions); + }); + + // delete unnecessary parts + delete model.worksheetHash; + delete model.worksheetRels; + delete model.globalRels; + delete model.sharedStrings; + delete model.workbookRels; + delete model.sheetDefs; + delete model.styles; + delete model.mediaIndex; + delete model.drawings; + delete model.drawingRels; + delete model.vmlDrawings; + } + async _processWorksheetEntry(stream, model, sheetNo, options, path) { + const xform = new WorksheetXform(options); + const worksheet = await xform.parseStream(stream); + worksheet.sheetNo = sheetNo; + model.worksheetHash[path] = worksheet; + model.worksheets.push(worksheet); + } + async _processCommentEntry(stream, model, name) { + const xform = new CommentsXform(); + const comments = await xform.parseStream(stream); + model.comments[`../${name}.xml`] = comments; + } + async _processTableEntry(stream, model, name) { + const xform = new TableXform(); + const table = await xform.parseStream(stream); + model.tables[`../tables/${name}.xml`] = table; + } + async _processWorksheetRelsEntry(stream, model, sheetNo) { + const xform = new RelationshipsXform(); + const relationships = await xform.parseStream(stream); + model.worksheetRels[sheetNo] = relationships; + } + async _processMediaEntry(entry, model, filename) { + const lastDot = filename.lastIndexOf('.'); + // if we can't determine extension, ignore it + if (lastDot >= 1) { + const extension = filename.substr(lastDot + 1); + const name = filename.substr(0, lastDot); + await new Promise((resolve, reject) => { + const streamBuf = new StreamBuf(); + streamBuf.on('finish', () => { + model.mediaIndex[filename] = model.media.length; + model.mediaIndex[name] = model.media.length; + const medium = { + type: 'image', + name, + extension, + buffer: streamBuf.toBuffer() + }; + model.media.push(medium); + resolve(); + }); + entry.on('error', error => { + reject(error); + }); + entry.pipe(streamBuf); + }); + } + } + async _processDrawingEntry(entry, model, name) { + const xform = new DrawingXform(); + const drawing = await xform.parseStream(entry); + model.drawings[name] = drawing; + } + async _processDrawingRelsEntry(entry, model, name) { + const xform = new RelationshipsXform(); + const relationships = await xform.parseStream(entry); + model.drawingRels[name] = relationships; + } + async _processVmlDrawingEntry(entry, model, name) { + const xform = new VmlNotesXform(); + const vmlDrawing = await xform.parseStream(entry); + model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing; + } + async _processThemeEntry(entry, model, name) { + await new Promise((resolve, reject) => { + // TODO: stream entry into buffer and store the xml in the model.themes[] + const stream = new StreamBuf(); + entry.on('error', reject); + stream.on('error', reject); + stream.on('finish', () => { + model.themes[name] = stream.read().toString(); + resolve(); + }); + entry.pipe(stream); + }); + } + + /** + * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md + */ + createInputStream() { + throw new Error('`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'); + } + async read(stream, options) { + // TODO: Remove once node v8 is deprecated + // Detect and upgrade old streams + if (!stream[Symbol.asyncIterator] && stream.pipe) { + stream = stream.pipe(new PassThrough()); + } + const chunks = []; + for await (const chunk of stream) { + chunks.push(chunk); + } + return this.load(Buffer.concat(chunks), options); + } + async load(data, options) { + let buffer; + if (options && options.base64) { + buffer = Buffer.from(data.toString(), 'base64'); + } else { + buffer = data; + } + const model = { + worksheets: [], + worksheetHash: {}, + worksheetRels: [], + themes: {}, + media: [], + mediaIndex: {}, + drawings: {}, + drawingRels: {}, + comments: {}, + tables: {}, + vmlDrawings: {} + }; + const zip = await JSZip.loadAsync(buffer); + for (const entry of Object.values(zip.files)) { + /* eslint-disable no-await-in-loop */ + if (!entry.dir) { + let entryName = entry.name; + if (entryName[0] === '/') { + entryName = entryName.substr(1); + } + let stream; + if (entryName.match(/xl\/media\//) || + // themes are not parsed as stream + entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/)) { + stream = new PassThrough(); + stream.write(await entry.async('nodebuffer')); + } else { + // use object mode to avoid buffer-string convention + stream = new PassThrough({ + writableObjectMode: true, + readableObjectMode: true + }); + let content; + // https://www.npmjs.com/package/process + if (process.browser) { + // running in browser, use TextDecoder if possible + content = bufferToString(await entry.async('nodebuffer')); + } else { + // running in node.js + content = await entry.async('string'); + } + const chunkSize = 16 * 1024; + for (let i = 0; i < content.length; i += chunkSize) { + stream.write(content.substring(i, i + chunkSize)); + } + } + stream.end(); + switch (entryName) { + case '_rels/.rels': + model.globalRels = await this.parseRels(stream); + break; + case 'xl/workbook.xml': + { + const workbook = await this.parseWorkbook(stream); + model.sheets = workbook.sheets; + model.definedNames = workbook.definedNames; + model.views = workbook.views; + model.properties = workbook.properties; + model.calcProperties = workbook.calcProperties; + break; + } + case 'xl/_rels/workbook.xml.rels': + model.workbookRels = await this.parseRels(stream); + break; + case 'xl/sharedStrings.xml': + model.sharedStrings = new SharedStringsXform(); + await model.sharedStrings.parseStream(stream); + break; + case 'xl/styles.xml': + model.styles = new StylesXform(); + await model.styles.parseStream(stream); + break; + case 'docProps/app.xml': + { + const appXform = new AppXform(); + const appProperties = await appXform.parseStream(stream); + model.company = appProperties.company; + model.manager = appProperties.manager; + break; + } + case 'docProps/core.xml': + { + const coreXform = new CoreXform(); + const coreProperties = await coreXform.parseStream(stream); + Object.assign(model, coreProperties); + break; + } + default: + { + let match = entryName.match(/xl\/worksheets\/sheet(\d+)[.]xml/); + if (match) { + await this._processWorksheetEntry(stream, model, match[1], options, entryName); + break; + } + match = entryName.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/); + if (match) { + await this._processWorksheetRelsEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/); + if (match) { + await this._processThemeEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/media\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/); + if (match) { + await this._processMediaEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/drawings\/([a-zA-Z0-9]+)[.]xml/); + if (match) { + await this._processDrawingEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/(comments\d+)[.]xml/); + if (match) { + await this._processCommentEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/tables\/(table\d+)[.]xml/); + if (match) { + await this._processTableEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/drawings\/_rels\/([a-zA-Z0-9]+)[.]xml[.]rels/); + if (match) { + await this._processDrawingRelsEntry(stream, model, match[1]); + break; + } + match = entryName.match(/xl\/drawings\/(vmlDrawing\d+)[.]vml/); + if (match) { + await this._processVmlDrawingEntry(stream, model, match[1]); + break; + } + } + } + } + } + this.reconcile(model, options); + + // apply model + this.workbook.model = model; + return this.workbook; + } + + // ========================================================================= + // Write + + async addMedia(zip, model) { + await Promise.all(model.media.map(async medium => { + if (medium.type === 'image') { + const filename = `xl/media/${medium.name}.${medium.extension}`; + if (medium.filename) { + const data = await fsReadFileAsync(medium.filename); + return zip.append(data, { + name: filename + }); + } + if (medium.buffer) { + return zip.append(medium.buffer, { + name: filename + }); + } + if (medium.base64) { + const dataimg64 = medium.base64; + const content = dataimg64.substring(dataimg64.indexOf(',') + 1); + return zip.append(content, { + name: filename, + base64: true + }); + } + } + throw new Error('Unsupported media'); + })); + } + addDrawings(zip, model) { + const drawingXform = new DrawingXform(); + const relsXform = new RelationshipsXform(); + model.worksheets.forEach(worksheet => { + const { + drawing + } = worksheet; + if (drawing) { + drawingXform.prepare(drawing, {}); + let xml = drawingXform.toXml(drawing); + zip.append(xml, { + name: `xl/drawings/${drawing.name}.xml` + }); + xml = relsXform.toXml(drawing.rels); + zip.append(xml, { + name: `xl/drawings/_rels/${drawing.name}.xml.rels` + }); + } + }); + } + addTables(zip, model) { + const tableXform = new TableXform(); + model.worksheets.forEach(worksheet => { + const { + tables + } = worksheet; + tables.forEach(table => { + tableXform.prepare(table, {}); + const tableXml = tableXform.toXml(table); + zip.append(tableXml, { + name: `xl/tables/${table.target}` + }); + }); + }); + } + async addContentTypes(zip, model) { + const xform = new ContentTypesXform(); + const xml = xform.toXml(model); + zip.append(xml, { + name: '[Content_Types].xml' + }); + } + async addApp(zip, model) { + const xform = new AppXform(); + const xml = xform.toXml(model); + zip.append(xml, { + name: 'docProps/app.xml' + }); + } + async addCore(zip, model) { + const coreXform = new CoreXform(); + zip.append(coreXform.toXml(model), { + name: 'docProps/core.xml' + }); + } + async addThemes(zip, model) { + const themes = model.themes || { + theme1: theme1Xml + }; + Object.keys(themes).forEach(name => { + const xml = themes[name]; + const path = `xl/theme/${name}.xml`; + zip.append(xml, { + name: path + }); + }); + } + async addOfficeRels(zip) { + const xform = new RelationshipsXform(); + const xml = xform.toXml([{ + Id: 'rId1', + Type: XLSX.RelType.OfficeDocument, + Target: 'xl/workbook.xml' + }, { + Id: 'rId2', + Type: XLSX.RelType.CoreProperties, + Target: 'docProps/core.xml' + }, { + Id: 'rId3', + Type: XLSX.RelType.ExtenderProperties, + Target: 'docProps/app.xml' + }]); + zip.append(xml, { + name: '_rels/.rels' + }); + } + async addWorkbookRels(zip, model) { + let count = 1; + const relationships = [{ + Id: `rId${count++}`, + Type: XLSX.RelType.Styles, + Target: 'styles.xml' + }, { + Id: `rId${count++}`, + Type: XLSX.RelType.Theme, + Target: 'theme/theme1.xml' + }]; + if (model.sharedStrings.count) { + relationships.push({ + Id: `rId${count++}`, + Type: XLSX.RelType.SharedStrings, + Target: 'sharedStrings.xml' + }); + } + model.worksheets.forEach(worksheet => { + worksheet.rId = `rId${count++}`; + relationships.push({ + Id: worksheet.rId, + Type: XLSX.RelType.Worksheet, + Target: `worksheets/sheet${worksheet.id}.xml` + }); + }); + const xform = new RelationshipsXform(); + const xml = xform.toXml(relationships); + zip.append(xml, { + name: 'xl/_rels/workbook.xml.rels' + }); + } + async addSharedStrings(zip, model) { + if (model.sharedStrings && model.sharedStrings.count) { + zip.append(model.sharedStrings.xml, { + name: 'xl/sharedStrings.xml' + }); + } + } + async addStyles(zip, model) { + const { + xml + } = model.styles; + if (xml) { + zip.append(xml, { + name: 'xl/styles.xml' + }); + } + } + async addWorkbook(zip, model) { + const xform = new WorkbookXform(); + zip.append(xform.toXml(model), { + name: 'xl/workbook.xml' + }); + } + async addWorksheets(zip, model) { + // preparation phase + const worksheetXform = new WorksheetXform(); + const relationshipsXform = new RelationshipsXform(); + const commentsXform = new CommentsXform(); + const vmlNotesXform = new VmlNotesXform(); + + // write sheets + model.worksheets.forEach(worksheet => { + let xmlStream = new XmlStream(); + worksheetXform.render(xmlStream, worksheet); + zip.append(xmlStream.xml, { + name: `xl/worksheets/sheet${worksheet.id}.xml` + }); + if (worksheet.rels && worksheet.rels.length) { + xmlStream = new XmlStream(); + relationshipsXform.render(xmlStream, worksheet.rels); + zip.append(xmlStream.xml, { + name: `xl/worksheets/_rels/sheet${worksheet.id}.xml.rels` + }); + } + if (worksheet.comments.length > 0) { + xmlStream = new XmlStream(); + commentsXform.render(xmlStream, worksheet); + zip.append(xmlStream.xml, { + name: `xl/comments${worksheet.id}.xml` + }); + xmlStream = new XmlStream(); + vmlNotesXform.render(xmlStream, worksheet); + zip.append(xmlStream.xml, { + name: `xl/drawings/vmlDrawing${worksheet.id}.vml` + }); + } + }); + } + _finalize(zip) { + return new Promise((resolve, reject) => { + zip.on('finish', () => { + resolve(this); + }); + zip.on('error', reject); + zip.finalize(); + }); + } + prepareModel(model, options) { + // ensure following properties have sane values + model.creator = model.creator || 'ExcelJS'; + model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS'; + model.created = model.created || new Date(); + model.modified = model.modified || new Date(); + model.useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : true; + model.useStyles = options.useStyles !== undefined ? options.useStyles : true; + + // Manage the shared strings + model.sharedStrings = new SharedStringsXform(); + + // add a style manager to handle cell formats, fonts, etc. + model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock(); + + // prepare all of the things before the render + const workbookXform = new WorkbookXform(); + const worksheetXform = new WorksheetXform(); + workbookXform.prepare(model); + const worksheetOptions = { + sharedStrings: model.sharedStrings, + styles: model.styles, + date1904: model.properties.date1904, + drawingsCount: 0, + media: model.media + }; + worksheetOptions.drawings = model.drawings = []; + worksheetOptions.commentRefs = model.commentRefs = []; + let tableCount = 0; + model.tables = []; + model.worksheets.forEach(worksheet => { + // assign unique filenames to tables + worksheet.tables.forEach(table => { + tableCount++; + table.target = `table${tableCount}.xml`; + table.id = tableCount; + model.tables.push(table); + }); + worksheetXform.prepare(worksheet, worksheetOptions); + }); + + // TODO: workbook drawing list + } + + async write(stream, options) { + options = options || {}; + const { + model + } = this.workbook; + const zip = new ZipStream.ZipWriter(options.zip); + zip.pipe(stream); + this.prepareModel(model, options); + + // render + await this.addContentTypes(zip, model); + await this.addOfficeRels(zip, model); + await this.addWorkbookRels(zip, model); + await this.addWorksheets(zip, model); + await this.addSharedStrings(zip, model); // always after worksheets + await this.addDrawings(zip, model); + await this.addTables(zip, model); + await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]); + await this.addMedia(zip, model); + await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]); + await this.addWorkbook(zip, model); + return this._finalize(zip); + } + writeFile(filename, options) { + const stream = fs.createWriteStream(filename); + return new Promise((resolve, reject) => { + stream.on('finish', () => { + resolve(); + }); + stream.on('error', error => { + reject(error); + }); + this.write(stream, options).then(() => { + stream.end(); + }).catch(err => { + reject(err); + }); + }); + } + async writeBuffer(options) { + const stream = new StreamBuf(); + await this.write(stream, options); + return stream.read(); + } +} +XLSX.RelType = require('./rel-type'); +module.exports = XLSX; + +}).call(this)}).call(this,require('_process'),require("buffer").Buffer) + +},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":24,"../utils/utils":27,"../utils/xml-stream":28,"../utils/zip-stream":29,"./rel-type":31,"./xform/book/workbook-xform":38,"./xform/comment/comments-xform":40,"./xform/comment/vml-notes-xform":45,"./xform/core/app-xform":51,"./xform/core/content-types-xform":52,"./xform/core/core-xform":53,"./xform/core/relationships-xform":55,"./xform/drawing/drawing-xform":62,"./xform/sheet/worksheet-xform":115,"./xform/strings/shared-strings-xform":124,"./xform/style/styles-xform":135,"./xform/table/table-xform":143,"./xml/theme1":145,"_process":467,"buffer":220,"fs":216,"jszip":441,"readable-stream":491}],145:[function(require,module,exports){ +"use strict"; + +/* eslint-disable */ +module.exports = '\n '; + +},{}],146:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CsvFormatterStream = void 0; +const stream_1 = require("stream"); +const formatter_1 = require("./formatter"); +class CsvFormatterStream extends stream_1.Transform { + constructor(formatterOptions) { + super({ + writableObjectMode: formatterOptions.objectMode + }); + this.hasWrittenBOM = false; + this.formatterOptions = formatterOptions; + this.rowFormatter = new formatter_1.RowFormatter(formatterOptions); + // if writeBOM is false then set to true + // if writeBOM is true then set to false by default so it is written out + this.hasWrittenBOM = !formatterOptions.writeBOM; + } + transform(transformFunction) { + this.rowFormatter.rowTransform = transformFunction; + return this; + } + _transform(row, encoding, cb) { + let cbCalled = false; + try { + if (!this.hasWrittenBOM) { + this.push(this.formatterOptions.BOM); + this.hasWrittenBOM = true; + } + this.rowFormatter.format(row, (err, rows) => { + if (err) { + cbCalled = true; + return cb(err); + } + if (rows) { + rows.forEach(r => { + this.push(Buffer.from(r, 'utf8')); + }); + } + cbCalled = true; + return cb(); + }); + } catch (e) { + if (cbCalled) { + throw e; + } + cb(e); + } + } + _flush(cb) { + this.rowFormatter.finish((err, rows) => { + if (err) { + return cb(err); + } + if (rows) { + rows.forEach(r => { + this.push(Buffer.from(r, 'utf8')); + }); + } + return cb(); + }); + } +} +exports.CsvFormatterStream = CsvFormatterStream; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"./formatter":150,"buffer":220,"stream":505}],147:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FormatterOptions = void 0; +class FormatterOptions { + constructor() { + let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var _a; + this.objectMode = true; + this.delimiter = ','; + this.rowDelimiter = '\n'; + this.quote = '"'; + this.escape = this.quote; + this.quoteColumns = false; + this.quoteHeaders = this.quoteColumns; + this.headers = null; + this.includeEndRowDelimiter = false; + this.writeBOM = false; + this.BOM = '\ufeff'; + this.alwaysWriteHeaders = false; + Object.assign(this, opts || {}); + if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') { + this.quoteHeaders = this.quoteColumns; + } + if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) { + this.quote = '"'; + } else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) { + this.quote = ''; + } + if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') { + this.escape = this.quote; + } + this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true); + this.headers = Array.isArray(this.headers) ? this.headers : null; + this.escapedQuote = `${this.escape}${this.quote}`; + } +} +exports.FormatterOptions = FormatterOptions; + +},{}],148:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FieldFormatter = void 0; +const lodash_isboolean_1 = __importDefault(require("lodash.isboolean")); +const lodash_isnil_1 = __importDefault(require("lodash.isnil")); +const lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp")); +class FieldFormatter { + constructor(formatterOptions) { + this._headers = null; + this.formatterOptions = formatterOptions; + if (formatterOptions.headers !== null) { + this.headers = formatterOptions.headers; + } + this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g'); + const escapePattern = `[${formatterOptions.delimiter}${lodash_escaperegexp_1.default(formatterOptions.rowDelimiter)}|\r|\n]`; + this.ESCAPE_REGEXP = new RegExp(escapePattern); + } + set headers(headers) { + this._headers = headers; + } + shouldQuote(fieldIndex, isHeader) { + const quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns; + if (lodash_isboolean_1.default(quoteConfig)) { + return quoteConfig; + } + if (Array.isArray(quoteConfig)) { + return quoteConfig[fieldIndex]; + } + if (this._headers !== null) { + return quoteConfig[this._headers[fieldIndex]]; + } + return false; + } + format(field, fieldIndex, isHeader) { + const preparedField = `${lodash_isnil_1.default(field) ? '' : field}`.replace(/\0/g, ''); + const { + formatterOptions + } = this; + if (formatterOptions.quote !== '') { + const shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1; + if (shouldEscape) { + return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote)); + } + } + const hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1; + if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) { + return this.quoteField(preparedField); + } + return preparedField; + } + quoteField(field) { + const { + quote + } = this.formatterOptions; + return `${quote}${field}${quote}`; + } +} +exports.FieldFormatter = FieldFormatter; + +},{"lodash.escaperegexp":442,"lodash.isboolean":444,"lodash.isnil":447}],149:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.RowFormatter = void 0; +const lodash_isfunction_1 = __importDefault(require("lodash.isfunction")); +const lodash_isequal_1 = __importDefault(require("lodash.isequal")); +const FieldFormatter_1 = require("./FieldFormatter"); +const types_1 = require("../types"); +class RowFormatter { + constructor(formatterOptions) { + this.rowCount = 0; + this.formatterOptions = formatterOptions; + this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions); + this.headers = formatterOptions.headers; + this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders; + this.hasWrittenHeaders = false; + if (this.headers !== null) { + this.fieldFormatter.headers = this.headers; + } + if (formatterOptions.transform) { + this.rowTransform = formatterOptions.transform; + } + } + static isRowHashArray(row) { + if (Array.isArray(row)) { + return Array.isArray(row[0]) && row[0].length === 2; + } + return false; + } + static isRowArray(row) { + return Array.isArray(row) && !this.isRowHashArray(row); + } + // get headers from a row item + static gatherHeaders(row) { + if (RowFormatter.isRowHashArray(row)) { + // lets assume a multi-dimesional array with item 0 being the header + return row.map(it => it[0]); + } + if (Array.isArray(row)) { + return row; + } + return Object.keys(row); + } + // eslint-disable-next-line @typescript-eslint/no-shadow + static createTransform(transformFunction) { + if (types_1.isSyncTransform(transformFunction)) { + return (row, cb) => { + let transformedRow = null; + try { + transformedRow = transformFunction(row); + } catch (e) { + return cb(e); + } + return cb(null, transformedRow); + }; + } + return (row, cb) => { + transformFunction(row, cb); + }; + } + set rowTransform(transformFunction) { + if (!lodash_isfunction_1.default(transformFunction)) { + throw new TypeError('The transform should be a function'); + } + this._rowTransform = RowFormatter.createTransform(transformFunction); + } + format(row, cb) { + this.callTransformer(row, (err, transformedRow) => { + if (err) { + return cb(err); + } + if (!row) { + return cb(null); + } + const rows = []; + if (transformedRow) { + const { + shouldFormatColumns, + headers + } = this.checkHeaders(transformedRow); + if (this.shouldWriteHeaders && headers && !this.hasWrittenHeaders) { + rows.push(this.formatColumns(headers, true)); + this.hasWrittenHeaders = true; + } + if (shouldFormatColumns) { + const columns = this.gatherColumns(transformedRow); + rows.push(this.formatColumns(columns, false)); + } + } + return cb(null, rows); + }); + } + finish(cb) { + const rows = []; + // check if we should write headers and we didnt get any rows + if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) { + if (!this.headers) { + return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.')); + } + rows.push(this.formatColumns(this.headers, true)); + } + if (this.formatterOptions.includeEndRowDelimiter) { + rows.push(this.formatterOptions.rowDelimiter); + } + return cb(null, rows); + } + // check if we need to write header return true if we should also write a row + // could be false if headers is true and the header row(first item) is passed in + checkHeaders(row) { + if (this.headers) { + // either the headers were provided by the user or we have already gathered them. + return { + shouldFormatColumns: true, + headers: this.headers + }; + } + const headers = RowFormatter.gatherHeaders(row); + this.headers = headers; + this.fieldFormatter.headers = headers; + if (!this.shouldWriteHeaders) { + // if we are not supposed to write the headers then + // always format the columns + return { + shouldFormatColumns: true, + headers: null + }; + } + // if the row is equal to headers dont format + return { + shouldFormatColumns: !lodash_isequal_1.default(headers, row), + headers + }; + } + // todo change this method to unknown[] + gatherColumns(row) { + if (this.headers === null) { + throw new Error('Headers is currently null'); + } + if (!Array.isArray(row)) { + return this.headers.map(header => row[header]); + } + if (RowFormatter.isRowHashArray(row)) { + return this.headers.map((header, i) => { + const col = row[i]; + if (col) { + return col[1]; + } + return ''; + }); + } + // if its a one dimensional array and headers were not provided + // then just return the row + if (RowFormatter.isRowArray(row) && !this.shouldWriteHeaders) { + return row; + } + return this.headers.map((header, i) => row[i]); + } + callTransformer(row, cb) { + if (!this._rowTransform) { + return cb(null, row); + } + return this._rowTransform(row, cb); + } + formatColumns(columns, isHeadersRow) { + const formattedCols = columns.map((field, i) => this.fieldFormatter.format(field, i, isHeadersRow)).join(this.formatterOptions.delimiter); + const { + rowCount + } = this; + this.rowCount += 1; + if (rowCount) { + return [this.formatterOptions.rowDelimiter, formattedCols].join(''); + } + return formattedCols; + } +} +exports.RowFormatter = RowFormatter; + +},{"../types":152,"./FieldFormatter":148,"lodash.isequal":445,"lodash.isfunction":446}],150:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FieldFormatter = exports.RowFormatter = void 0; +var RowFormatter_1 = require("./RowFormatter"); +Object.defineProperty(exports, "RowFormatter", { + enumerable: true, + get: function () { + return RowFormatter_1.RowFormatter; + } +}); +var FieldFormatter_1 = require("./FieldFormatter"); +Object.defineProperty(exports, "FieldFormatter", { + enumerable: true, + get: function () { + return FieldFormatter_1.FieldFormatter; + } +}); + +},{"./FieldFormatter":148,"./RowFormatter":149}],151:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + } + }); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = void 0 && (void 0).__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = exports.FormatterOptions = exports.CsvFormatterStream = void 0; +const util_1 = require("util"); +const stream_1 = require("stream"); +const fs = __importStar(require("fs")); +const FormatterOptions_1 = require("./FormatterOptions"); +const CsvFormatterStream_1 = require("./CsvFormatterStream"); +__exportStar(require("./types"), exports); +var CsvFormatterStream_2 = require("./CsvFormatterStream"); +Object.defineProperty(exports, "CsvFormatterStream", { + enumerable: true, + get: function () { + return CsvFormatterStream_2.CsvFormatterStream; + } +}); +var FormatterOptions_2 = require("./FormatterOptions"); +Object.defineProperty(exports, "FormatterOptions", { + enumerable: true, + get: function () { + return FormatterOptions_2.FormatterOptions; + } +}); +exports.format = options => new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options)); +exports.write = (rows, options) => { + const csvStream = exports.format(options); + const promiseWrite = util_1.promisify((row, cb) => { + csvStream.write(row, undefined, cb); + }); + rows.reduce((prev, row) => prev.then(() => promiseWrite(row)), Promise.resolve()).then(() => csvStream.end()).catch(err => { + csvStream.emit('error', err); + }); + return csvStream; +}; +exports.writeToStream = (ws, rows, options) => exports.write(rows, options).pipe(ws); +exports.writeToBuffer = function (rows) { + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + const buffers = []; + const ws = new stream_1.Writable({ + write(data, enc, writeCb) { + buffers.push(data); + writeCb(); + } + }); + return new Promise((res, rej) => { + ws.on('error', rej).on('finish', () => res(Buffer.concat(buffers))); + exports.write(rows, opts).pipe(ws); + }); +}; +exports.writeToString = (rows, options) => exports.writeToBuffer(rows, options).then(buffer => buffer.toString()); +exports.writeToPath = (path, rows, options) => { + const stream = fs.createWriteStream(path, { + encoding: 'utf8' + }); + return exports.write(rows, options).pipe(stream); +}; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"./CsvFormatterStream":146,"./FormatterOptions":147,"./types":152,"buffer":220,"fs":216,"stream":505,"util":527}],152:[function(require,module,exports){ +"use strict"; + +/* eslint-disable @typescript-eslint/no-explicit-any */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isSyncTransform = void 0; +exports.isSyncTransform = transform => transform.length === 1; + +},{}],153:[function(require,module,exports){ +(function (setImmediate){(function (){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CsvParserStream = void 0; +const string_decoder_1 = require("string_decoder"); +const stream_1 = require("stream"); +const transforms_1 = require("./transforms"); +const parser_1 = require("./parser"); +class CsvParserStream extends stream_1.Transform { + constructor(parserOptions) { + super({ + objectMode: parserOptions.objectMode + }); + this.lines = ''; + this.rowCount = 0; + this.parsedRowCount = 0; + this.parsedLineCount = 0; + this.endEmitted = false; + this.headersEmitted = false; + this.parserOptions = parserOptions; + this.parser = new parser_1.Parser(parserOptions); + this.headerTransformer = new transforms_1.HeaderTransformer(parserOptions); + this.decoder = new string_decoder_1.StringDecoder(parserOptions.encoding); + this.rowTransformerValidator = new transforms_1.RowTransformerValidator(); + } + get hasHitRowLimit() { + return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows; + } + get shouldEmitRows() { + return this.parsedRowCount > this.parserOptions.skipRows; + } + get shouldSkipLine() { + return this.parsedLineCount <= this.parserOptions.skipLines; + } + transform(transformFunction) { + this.rowTransformerValidator.rowTransform = transformFunction; + return this; + } + validate(validateFunction) { + this.rowTransformerValidator.rowValidator = validateFunction; + return this; + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + emit(event) { + if (event === 'end') { + if (!this.endEmitted) { + this.endEmitted = true; + super.emit('end', this.rowCount); + } + return false; + } + for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + rest[_key - 1] = arguments[_key]; + } + return super.emit(event, ...rest); + } + _transform(data, encoding, done) { + // if we have hit our maxRows parsing limit then skip parsing + if (this.hasHitRowLimit) { + return done(); + } + const wrappedCallback = CsvParserStream.wrapDoneCallback(done); + try { + const { + lines + } = this; + const newLine = lines + this.decoder.write(data); + const rows = this.parse(newLine, true); + return this.processRows(rows, wrappedCallback); + } catch (e) { + return wrappedCallback(e); + } + } + _flush(done) { + const wrappedCallback = CsvParserStream.wrapDoneCallback(done); + // if we have hit our maxRows parsing limit then skip parsing + if (this.hasHitRowLimit) { + return wrappedCallback(); + } + try { + const newLine = this.lines + this.decoder.end(); + const rows = this.parse(newLine, false); + return this.processRows(rows, wrappedCallback); + } catch (e) { + return wrappedCallback(e); + } + } + parse(data, hasMoreData) { + if (!data) { + return []; + } + const { + line, + rows + } = this.parser.parse(data, hasMoreData); + this.lines = line; + return rows; + } + processRows(rows, cb) { + const rowsLength = rows.length; + const iterate = i => { + const callNext = err => { + if (err) { + return cb(err); + } + if (i % 100 === 0) { + // incase the transform are sync insert a next tick to prevent stack overflow + setImmediate(() => iterate(i + 1)); + return undefined; + } + return iterate(i + 1); + }; + this.checkAndEmitHeaders(); + // if we have emitted all rows or we have hit the maxRows limit option + // then end + if (i >= rowsLength || this.hasHitRowLimit) { + return cb(); + } + this.parsedLineCount += 1; + if (this.shouldSkipLine) { + return callNext(); + } + const row = rows[i]; + this.rowCount += 1; + this.parsedRowCount += 1; + const nextRowCount = this.rowCount; + return this.transformRow(row, (err, transformResult) => { + if (err) { + this.rowCount -= 1; + return callNext(err); + } + if (!transformResult) { + return callNext(new Error('expected transform result')); + } + if (!transformResult.isValid) { + this.emit('data-invalid', transformResult.row, nextRowCount, transformResult.reason); + } else if (transformResult.row) { + return this.pushRow(transformResult.row, callNext); + } + return callNext(); + }); + }; + iterate(0); + } + transformRow(parsedRow, cb) { + try { + this.headerTransformer.transform(parsedRow, (err, withHeaders) => { + if (err) { + return cb(err); + } + if (!withHeaders) { + return cb(new Error('Expected result from header transform')); + } + if (!withHeaders.isValid) { + if (this.shouldEmitRows) { + return cb(null, { + isValid: false, + row: parsedRow + }); + } + // skipped because of skipRows option remove from total row count + return this.skipRow(cb); + } + if (withHeaders.row) { + if (this.shouldEmitRows) { + return this.rowTransformerValidator.transformAndValidate(withHeaders.row, cb); + } + // skipped because of skipRows option remove from total row count + return this.skipRow(cb); + } + // this is a header row dont include in the rowCount or parsedRowCount + this.rowCount -= 1; + this.parsedRowCount -= 1; + return cb(null, { + row: null, + isValid: true + }); + }); + } catch (e) { + cb(e); + } + } + checkAndEmitHeaders() { + if (!this.headersEmitted && this.headerTransformer.headers) { + this.headersEmitted = true; + this.emit('headers', this.headerTransformer.headers); + } + } + skipRow(cb) { + // skipped because of skipRows option remove from total row count + this.rowCount -= 1; + return cb(null, { + row: null, + isValid: true + }); + } + pushRow(row, cb) { + try { + if (!this.parserOptions.objectMode) { + this.push(JSON.stringify(row)); + } else { + this.push(row); + } + cb(); + } catch (e) { + cb(e); + } + } + static wrapDoneCallback(done) { + let errorCalled = false; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return function (err) { + if (err) { + if (errorCalled) { + throw err; + } + errorCalled = true; + done(err); + return; + } + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + done(...args); + }; + } +} +exports.CsvParserStream = CsvParserStream; + +}).call(this)}).call(this,require("timers").setImmediate) + +},{"./parser":165,"./transforms":168,"stream":505,"string_decoder":218,"timers":523}],154:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ParserOptions = void 0; +const lodash_escaperegexp_1 = __importDefault(require("lodash.escaperegexp")); +const lodash_isnil_1 = __importDefault(require("lodash.isnil")); +class ParserOptions { + constructor(opts) { + var _a; + this.objectMode = true; + this.delimiter = ','; + this.ignoreEmpty = false; + this.quote = '"'; + this.escape = null; + this.escapeChar = this.quote; + this.comment = null; + this.supportsComments = false; + this.ltrim = false; + this.rtrim = false; + this.trim = false; + this.headers = null; + this.renameHeaders = false; + this.strictColumnHandling = false; + this.discardUnmappedColumns = false; + this.carriageReturn = '\r'; + this.encoding = 'utf8'; + this.limitRows = false; + this.maxRows = 0; + this.skipLines = 0; + this.skipRows = 0; + Object.assign(this, opts || {}); + if (this.delimiter.length > 1) { + throw new Error('delimiter option must be one character long'); + } + this.escapedDelimiter = lodash_escaperegexp_1.default(this.delimiter); + this.escapeChar = (_a = this.escape) !== null && _a !== void 0 ? _a : this.quote; + this.supportsComments = !lodash_isnil_1.default(this.comment); + this.NEXT_TOKEN_REGEXP = new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`); + if (this.maxRows > 0) { + this.limitRows = true; + } + } +} +exports.ParserOptions = ParserOptions; + +},{"lodash.escaperegexp":442,"lodash.isnil":447}],155:[function(require,module,exports){ +"use strict"; + +var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + } + }); +} : function (o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) { + Object.defineProperty(o, "default", { + enumerable: true, + value: v + }); +} : function (o, v) { + o["default"] = v; +}); +var __importStar = void 0 && (void 0).__importStar || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __exportStar = void 0 && (void 0).__exportStar || function (m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parseString = exports.parseFile = exports.parseStream = exports.parse = exports.ParserOptions = exports.CsvParserStream = void 0; +const fs = __importStar(require("fs")); +const stream_1 = require("stream"); +const ParserOptions_1 = require("./ParserOptions"); +const CsvParserStream_1 = require("./CsvParserStream"); +__exportStar(require("./types"), exports); +var CsvParserStream_2 = require("./CsvParserStream"); +Object.defineProperty(exports, "CsvParserStream", { + enumerable: true, + get: function () { + return CsvParserStream_2.CsvParserStream; + } +}); +var ParserOptions_2 = require("./ParserOptions"); +Object.defineProperty(exports, "ParserOptions", { + enumerable: true, + get: function () { + return ParserOptions_2.ParserOptions; + } +}); +exports.parse = args => new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args)); +exports.parseStream = (stream, options) => stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options))); +exports.parseFile = function (location) { + let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + return fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options))); +}; +exports.parseString = (string, options) => { + const rs = new stream_1.Readable(); + rs.push(string); + rs.push(null); + return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options))); +}; + +},{"./CsvParserStream":153,"./ParserOptions":154,"./types":169,"fs":216,"stream":505}],156:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Parser = void 0; +const Scanner_1 = require("./Scanner"); +const RowParser_1 = require("./RowParser"); +const Token_1 = require("./Token"); +class Parser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.rowParser = new RowParser_1.RowParser(this.parserOptions); + } + static removeBOM(line) { + // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string + // conversion translates it to FEFF (UTF-16 BOM) + if (line && line.charCodeAt(0) === 0xfeff) { + return line.slice(1); + } + return line; + } + parse(line, hasMoreData) { + const scanner = new Scanner_1.Scanner({ + line: Parser.removeBOM(line), + parserOptions: this.parserOptions, + hasMoreData + }); + if (this.parserOptions.supportsComments) { + return this.parseWithComments(scanner); + } + return this.parseWithoutComments(scanner); + } + parseWithoutComments(scanner) { + const rows = []; + let shouldContinue = true; + while (shouldContinue) { + shouldContinue = this.parseRow(scanner, rows); + } + return { + line: scanner.line, + rows + }; + } + parseWithComments(scanner) { + const { + parserOptions + } = this; + const rows = []; + for (let nextToken = scanner.nextCharacterToken; nextToken !== null; nextToken = scanner.nextCharacterToken) { + if (Token_1.Token.isTokenComment(nextToken, parserOptions)) { + const cursor = scanner.advancePastLine(); + if (cursor === null) { + return { + line: scanner.lineFromCursor, + rows + }; + } + if (!scanner.hasMoreCharacters) { + return { + line: scanner.lineFromCursor, + rows + }; + } + scanner.truncateToCursor(); + } else if (!this.parseRow(scanner, rows)) { + break; + } + } + return { + line: scanner.line, + rows + }; + } + parseRow(scanner, rows) { + const nextToken = scanner.nextNonSpaceToken; + if (!nextToken) { + return false; + } + const row = this.rowParser.parse(scanner); + if (row === null) { + return false; + } + if (this.parserOptions.ignoreEmpty && RowParser_1.RowParser.isEmptyRow(row)) { + return true; + } + rows.push(row); + return true; + } +} +exports.Parser = Parser; + +},{"./RowParser":157,"./Scanner":158,"./Token":159}],157:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.RowParser = void 0; +const column_1 = require("./column"); +const Token_1 = require("./Token"); +const EMPTY_STRING = ''; +class RowParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.columnParser = new column_1.ColumnParser(parserOptions); + } + static isEmptyRow(row) { + return row.join(EMPTY_STRING).replace(/\s+/g, EMPTY_STRING) === EMPTY_STRING; + } + parse(scanner) { + const { + parserOptions + } = this; + const { + hasMoreData + } = scanner; + const currentScanner = scanner; + const columns = []; + let currentToken = this.getStartToken(currentScanner, columns); + while (currentToken) { + if (Token_1.Token.isTokenRowDelimiter(currentToken)) { + currentScanner.advancePastToken(currentToken); + // if ends with CR and there is more data, keep unparsed due to possible + // coming LF in CRLF + if (!currentScanner.hasMoreCharacters && Token_1.Token.isTokenCarriageReturn(currentToken, parserOptions) && hasMoreData) { + return null; + } + currentScanner.truncateToCursor(); + return columns; + } + if (!this.shouldSkipColumnParse(currentScanner, currentToken, columns)) { + const item = this.columnParser.parse(currentScanner); + if (item === null) { + return null; + } + columns.push(item); + } + currentToken = currentScanner.nextNonSpaceToken; + } + if (!hasMoreData) { + currentScanner.truncateToCursor(); + return columns; + } + return null; + } + getStartToken(scanner, columns) { + const currentToken = scanner.nextNonSpaceToken; + if (currentToken !== null && Token_1.Token.isTokenDelimiter(currentToken, this.parserOptions)) { + columns.push(''); + return scanner.nextNonSpaceToken; + } + return currentToken; + } + shouldSkipColumnParse(scanner, currentToken, columns) { + const { + parserOptions + } = this; + if (Token_1.Token.isTokenDelimiter(currentToken, parserOptions)) { + scanner.advancePastToken(currentToken); + // if the delimiter is at the end of a line + const nextToken = scanner.nextCharacterToken; + if (!scanner.hasMoreCharacters || nextToken !== null && Token_1.Token.isTokenRowDelimiter(nextToken)) { + columns.push(''); + return true; + } + if (nextToken !== null && Token_1.Token.isTokenDelimiter(nextToken, parserOptions)) { + columns.push(''); + return true; + } + } + return false; + } +} +exports.RowParser = RowParser; + +},{"./Token":159,"./column":164}],158:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Scanner = void 0; +const Token_1 = require("./Token"); +const ROW_DELIMITER = /((?:\r\n)|\n|\r)/; +class Scanner { + constructor(args) { + this.cursor = 0; + this.line = args.line; + this.lineLength = this.line.length; + this.parserOptions = args.parserOptions; + this.hasMoreData = args.hasMoreData; + this.cursor = args.cursor || 0; + } + get hasMoreCharacters() { + return this.lineLength > this.cursor; + } + get nextNonSpaceToken() { + const { + lineFromCursor + } = this; + const regex = this.parserOptions.NEXT_TOKEN_REGEXP; + if (lineFromCursor.search(regex) === -1) { + return null; + } + const match = regex.exec(lineFromCursor); + if (match == null) { + return null; + } + const token = match[1]; + const startCursor = this.cursor + (match.index || 0); + return new Token_1.Token({ + token, + startCursor, + endCursor: startCursor + token.length - 1 + }); + } + get nextCharacterToken() { + const { + cursor, + lineLength + } = this; + if (lineLength <= cursor) { + return null; + } + return new Token_1.Token({ + token: this.line[cursor], + startCursor: cursor, + endCursor: cursor + }); + } + get lineFromCursor() { + return this.line.substr(this.cursor); + } + advancePastLine() { + const match = ROW_DELIMITER.exec(this.lineFromCursor); + if (!match) { + if (this.hasMoreData) { + return null; + } + this.cursor = this.lineLength; + return this; + } + this.cursor += (match.index || 0) + match[0].length; + return this; + } + advanceTo(cursor) { + this.cursor = cursor; + return this; + } + advanceToToken(token) { + this.cursor = token.startCursor; + return this; + } + advancePastToken(token) { + this.cursor = token.endCursor + 1; + return this; + } + truncateToCursor() { + this.line = this.lineFromCursor; + this.lineLength = this.line.length; + this.cursor = 0; + return this; + } +} +exports.Scanner = Scanner; + +},{"./Token":159}],159:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Token = void 0; +class Token { + constructor(tokenArgs) { + this.token = tokenArgs.token; + this.startCursor = tokenArgs.startCursor; + this.endCursor = tokenArgs.endCursor; + } + static isTokenRowDelimiter(token) { + const content = token.token; + return content === '\r' || content === '\n' || content === '\r\n'; + } + static isTokenCarriageReturn(token, parserOptions) { + return token.token === parserOptions.carriageReturn; + } + static isTokenComment(token, parserOptions) { + return parserOptions.supportsComments && !!token && token.token === parserOptions.comment; + } + static isTokenEscapeCharacter(token, parserOptions) { + return token.token === parserOptions.escapeChar; + } + static isTokenQuote(token, parserOptions) { + return token.token === parserOptions.quote; + } + static isTokenDelimiter(token, parserOptions) { + return token.token === parserOptions.delimiter; + } +} +exports.Token = Token; + +},{}],160:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ColumnFormatter = void 0; +class ColumnFormatter { + constructor(parserOptions) { + if (parserOptions.trim) { + this.format = col => col.trim(); + } else if (parserOptions.ltrim) { + this.format = col => col.trimLeft(); + } else if (parserOptions.rtrim) { + this.format = col => col.trimRight(); + } else { + this.format = col => col; + } + } +} +exports.ColumnFormatter = ColumnFormatter; + +},{}],161:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ColumnParser = void 0; +const NonQuotedColumnParser_1 = require("./NonQuotedColumnParser"); +const QuotedColumnParser_1 = require("./QuotedColumnParser"); +const Token_1 = require("../Token"); +class ColumnParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.quotedColumnParser = new QuotedColumnParser_1.QuotedColumnParser(parserOptions); + this.nonQuotedColumnParser = new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions); + } + parse(scanner) { + const { + nextNonSpaceToken + } = scanner; + if (nextNonSpaceToken !== null && Token_1.Token.isTokenQuote(nextNonSpaceToken, this.parserOptions)) { + scanner.advanceToToken(nextNonSpaceToken); + return this.quotedColumnParser.parse(scanner); + } + return this.nonQuotedColumnParser.parse(scanner); + } +} +exports.ColumnParser = ColumnParser; + +},{"../Token":159,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],162:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.NonQuotedColumnParser = void 0; +const ColumnFormatter_1 = require("./ColumnFormatter"); +const Token_1 = require("../Token"); +class NonQuotedColumnParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions); + } + parse(scanner) { + if (!scanner.hasMoreCharacters) { + return null; + } + const { + parserOptions + } = this; + const characters = []; + let nextToken = scanner.nextCharacterToken; + for (; nextToken; nextToken = scanner.nextCharacterToken) { + if (Token_1.Token.isTokenDelimiter(nextToken, parserOptions) || Token_1.Token.isTokenRowDelimiter(nextToken)) { + break; + } + characters.push(nextToken.token); + scanner.advancePastToken(nextToken); + } + return this.columnFormatter.format(characters.join('')); + } +} +exports.NonQuotedColumnParser = NonQuotedColumnParser; + +},{"../Token":159,"./ColumnFormatter":160}],163:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.QuotedColumnParser = void 0; +const ColumnFormatter_1 = require("./ColumnFormatter"); +const Token_1 = require("../Token"); +class QuotedColumnParser { + constructor(parserOptions) { + this.parserOptions = parserOptions; + this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions); + } + parse(scanner) { + if (!scanner.hasMoreCharacters) { + return null; + } + const originalCursor = scanner.cursor; + const { + foundClosingQuote, + col + } = this.gatherDataBetweenQuotes(scanner); + if (!foundClosingQuote) { + // reset the cursor to the original + scanner.advanceTo(originalCursor); + // if we didnt find a closing quote but we potentially have more data then skip the parsing + // and return the original scanner. + if (!scanner.hasMoreData) { + throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote || ''}' in line: at '${scanner.lineFromCursor.replace(/[\r\n]/g, "\\n'")}'`); + } + return null; + } + this.checkForMalformedColumn(scanner); + return col; + } + gatherDataBetweenQuotes(scanner) { + const { + parserOptions + } = this; + let foundStartingQuote = false; + let foundClosingQuote = false; + const characters = []; + let nextToken = scanner.nextCharacterToken; + for (; !foundClosingQuote && nextToken !== null; nextToken = scanner.nextCharacterToken) { + const isQuote = Token_1.Token.isTokenQuote(nextToken, parserOptions); + // ignore first quote + if (!foundStartingQuote && isQuote) { + foundStartingQuote = true; + } else if (foundStartingQuote) { + if (Token_1.Token.isTokenEscapeCharacter(nextToken, parserOptions)) { + // advance past the escape character so we can get the next one in line + scanner.advancePastToken(nextToken); + const tokenFollowingEscape = scanner.nextCharacterToken; + // if the character following the escape is a quote character then just add + // the quote and advance to that character + if (tokenFollowingEscape !== null && (Token_1.Token.isTokenQuote(tokenFollowingEscape, parserOptions) || Token_1.Token.isTokenEscapeCharacter(tokenFollowingEscape, parserOptions))) { + characters.push(tokenFollowingEscape.token); + nextToken = tokenFollowingEscape; + } else if (isQuote) { + // if the escape is also a quote then we found our closing quote and finish early + foundClosingQuote = true; + } else { + // other wise add the escape token to the characters since it wast escaping anything + characters.push(nextToken.token); + } + } else if (isQuote) { + // we found our closing quote! + foundClosingQuote = true; + } else { + // add the token to the characters + characters.push(nextToken.token); + } + } + scanner.advancePastToken(nextToken); + } + return { + col: this.columnFormatter.format(characters.join('')), + foundClosingQuote + }; + } + checkForMalformedColumn(scanner) { + const { + parserOptions + } = this; + const { + nextNonSpaceToken + } = scanner; + if (nextNonSpaceToken) { + const isNextTokenADelimiter = Token_1.Token.isTokenDelimiter(nextNonSpaceToken, parserOptions); + const isNextTokenARowDelimiter = Token_1.Token.isTokenRowDelimiter(nextNonSpaceToken); + if (!(isNextTokenADelimiter || isNextTokenARowDelimiter)) { + // if the final quote was NOT followed by a column (,) or row(\n) delimiter then its a bad column + // tldr: only part of the column was quoted + const linePreview = scanner.lineFromCursor.substr(0, 10).replace(/[\r\n]/g, "\\n'"); + throw new Error(`Parse Error: expected: '${parserOptions.escapedDelimiter}' OR new line got: '${nextNonSpaceToken.token}'. at '${linePreview}`); + } + scanner.advanceToToken(nextNonSpaceToken); + } else if (!scanner.hasMoreData) { + scanner.advancePastLine(); + } + } +} +exports.QuotedColumnParser = QuotedColumnParser; + +},{"../Token":159,"./ColumnFormatter":160}],164:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ColumnFormatter = exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = void 0; +var ColumnParser_1 = require("./ColumnParser"); +Object.defineProperty(exports, "ColumnParser", { + enumerable: true, + get: function () { + return ColumnParser_1.ColumnParser; + } +}); +var NonQuotedColumnParser_1 = require("./NonQuotedColumnParser"); +Object.defineProperty(exports, "NonQuotedColumnParser", { + enumerable: true, + get: function () { + return NonQuotedColumnParser_1.NonQuotedColumnParser; + } +}); +var QuotedColumnParser_1 = require("./QuotedColumnParser"); +Object.defineProperty(exports, "QuotedColumnParser", { + enumerable: true, + get: function () { + return QuotedColumnParser_1.QuotedColumnParser; + } +}); +var ColumnFormatter_1 = require("./ColumnFormatter"); +Object.defineProperty(exports, "ColumnFormatter", { + enumerable: true, + get: function () { + return ColumnFormatter_1.ColumnFormatter; + } +}); + +},{"./ColumnFormatter":160,"./ColumnParser":161,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],165:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = exports.Token = exports.Scanner = exports.RowParser = exports.Parser = void 0; +var Parser_1 = require("./Parser"); +Object.defineProperty(exports, "Parser", { + enumerable: true, + get: function () { + return Parser_1.Parser; + } +}); +var RowParser_1 = require("./RowParser"); +Object.defineProperty(exports, "RowParser", { + enumerable: true, + get: function () { + return RowParser_1.RowParser; + } +}); +var Scanner_1 = require("./Scanner"); +Object.defineProperty(exports, "Scanner", { + enumerable: true, + get: function () { + return Scanner_1.Scanner; + } +}); +var Token_1 = require("./Token"); +Object.defineProperty(exports, "Token", { + enumerable: true, + get: function () { + return Token_1.Token; + } +}); +var column_1 = require("./column"); +Object.defineProperty(exports, "ColumnParser", { + enumerable: true, + get: function () { + return column_1.ColumnParser; + } +}); +Object.defineProperty(exports, "NonQuotedColumnParser", { + enumerable: true, + get: function () { + return column_1.NonQuotedColumnParser; + } +}); +Object.defineProperty(exports, "QuotedColumnParser", { + enumerable: true, + get: function () { + return column_1.QuotedColumnParser; + } +}); + +},{"./Parser":156,"./RowParser":157,"./Scanner":158,"./Token":159,"./column":164}],166:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.HeaderTransformer = void 0; +const lodash_isundefined_1 = __importDefault(require("lodash.isundefined")); +const lodash_isfunction_1 = __importDefault(require("lodash.isfunction")); +const lodash_uniq_1 = __importDefault(require("lodash.uniq")); +const lodash_groupby_1 = __importDefault(require("lodash.groupby")); +class HeaderTransformer { + constructor(parserOptions) { + this.headers = null; + this.receivedHeaders = false; + this.shouldUseFirstRow = false; + this.processedFirstRow = false; + this.headersLength = 0; + this.parserOptions = parserOptions; + if (parserOptions.headers === true) { + this.shouldUseFirstRow = true; + } else if (Array.isArray(parserOptions.headers)) { + this.setHeaders(parserOptions.headers); + } else if (lodash_isfunction_1.default(parserOptions.headers)) { + this.headersTransform = parserOptions.headers; + } + } + transform(row, cb) { + if (!this.shouldMapRow(row)) { + return cb(null, { + row: null, + isValid: true + }); + } + return cb(null, this.processRow(row)); + } + shouldMapRow(row) { + const { + parserOptions + } = this; + if (!this.headersTransform && parserOptions.renameHeaders && !this.processedFirstRow) { + if (!this.receivedHeaders) { + throw new Error('Error renaming headers: new headers must be provided in an array'); + } + this.processedFirstRow = true; + return false; + } + if (!this.receivedHeaders && Array.isArray(row)) { + if (this.headersTransform) { + this.setHeaders(this.headersTransform(row)); + } else if (this.shouldUseFirstRow) { + this.setHeaders(row); + } else { + // dont do anything with the headers if we didnt receive a transform or shouldnt use the first row. + return true; + } + return false; + } + return true; + } + processRow(row) { + if (!this.headers) { + return { + row: row, + isValid: true + }; + } + const { + parserOptions + } = this; + if (!parserOptions.discardUnmappedColumns && row.length > this.headersLength) { + if (!parserOptions.strictColumnHandling) { + throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${row.length}`); + } + return { + row: row, + isValid: false, + reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}` + }; + } + if (parserOptions.strictColumnHandling && row.length < this.headersLength) { + return { + row: row, + isValid: false, + reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}` + }; + } + return { + row: this.mapHeaders(row), + isValid: true + }; + } + mapHeaders(row) { + const rowMap = {}; + const { + headers, + headersLength + } = this; + for (let i = 0; i < headersLength; i += 1) { + const header = headers[i]; + if (!lodash_isundefined_1.default(header)) { + const val = row[i]; + // eslint-disable-next-line no-param-reassign + if (lodash_isundefined_1.default(val)) { + rowMap[header] = ''; + } else { + rowMap[header] = val; + } + } + } + return rowMap; + } + setHeaders(headers) { + var _a; + const filteredHeaders = headers.filter(h => !!h); + if (lodash_uniq_1.default(filteredHeaders).length !== filteredHeaders.length) { + const grouped = lodash_groupby_1.default(filteredHeaders); + const duplicates = Object.keys(grouped).filter(dup => grouped[dup].length > 1); + throw new Error(`Duplicate headers found ${JSON.stringify(duplicates)}`); + } + this.headers = headers; + this.receivedHeaders = true; + this.headersLength = ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.length) || 0; + } +} +exports.HeaderTransformer = HeaderTransformer; + +},{"lodash.groupby":443,"lodash.isfunction":446,"lodash.isundefined":448,"lodash.uniq":449}],167:[function(require,module,exports){ +"use strict"; + +var __importDefault = void 0 && (void 0).__importDefault || function (mod) { + return mod && mod.__esModule ? mod : { + "default": mod + }; +}; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.RowTransformerValidator = void 0; +const lodash_isfunction_1 = __importDefault(require("lodash.isfunction")); +const types_1 = require("../types"); +class RowTransformerValidator { + constructor() { + this._rowTransform = null; + this._rowValidator = null; + } + // eslint-disable-next-line @typescript-eslint/no-shadow + static createTransform(transformFunction) { + if (types_1.isSyncTransform(transformFunction)) { + return (row, cb) => { + let transformed = null; + try { + transformed = transformFunction(row); + } catch (e) { + return cb(e); + } + return cb(null, transformed); + }; + } + return transformFunction; + } + static createValidator(validateFunction) { + if (types_1.isSyncValidate(validateFunction)) { + return (row, cb) => { + cb(null, { + row, + isValid: validateFunction(row) + }); + }; + } + return (row, cb) => { + validateFunction(row, (err, isValid, reason) => { + if (err) { + return cb(err); + } + if (isValid) { + return cb(null, { + row, + isValid, + reason + }); + } + return cb(null, { + row, + isValid: false, + reason + }); + }); + }; + } + set rowTransform(transformFunction) { + if (!lodash_isfunction_1.default(transformFunction)) { + throw new TypeError('The transform should be a function'); + } + this._rowTransform = RowTransformerValidator.createTransform(transformFunction); + } + set rowValidator(validateFunction) { + if (!lodash_isfunction_1.default(validateFunction)) { + throw new TypeError('The validate should be a function'); + } + this._rowValidator = RowTransformerValidator.createValidator(validateFunction); + } + transformAndValidate(row, cb) { + return this.callTransformer(row, (transformErr, transformedRow) => { + if (transformErr) { + return cb(transformErr); + } + if (!transformedRow) { + return cb(null, { + row: null, + isValid: true + }); + } + return this.callValidator(transformedRow, (validateErr, validationResult) => { + if (validateErr) { + return cb(validateErr); + } + if (validationResult && !validationResult.isValid) { + return cb(null, { + row: transformedRow, + isValid: false, + reason: validationResult.reason + }); + } + return cb(null, { + row: transformedRow, + isValid: true + }); + }); + }); + } + callTransformer(row, cb) { + if (!this._rowTransform) { + return cb(null, row); + } + return this._rowTransform(row, cb); + } + callValidator(row, cb) { + if (!this._rowValidator) { + return cb(null, { + row, + isValid: true + }); + } + return this._rowValidator(row, cb); + } +} +exports.RowTransformerValidator = RowTransformerValidator; + +},{"../types":169,"lodash.isfunction":446}],168:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.HeaderTransformer = exports.RowTransformerValidator = void 0; +var RowTransformerValidator_1 = require("./RowTransformerValidator"); +Object.defineProperty(exports, "RowTransformerValidator", { + enumerable: true, + get: function () { + return RowTransformerValidator_1.RowTransformerValidator; + } +}); +var HeaderTransformer_1 = require("./HeaderTransformer"); +Object.defineProperty(exports, "HeaderTransformer", { + enumerable: true, + get: function () { + return HeaderTransformer_1.HeaderTransformer; + } +}); + +},{"./HeaderTransformer":166,"./RowTransformerValidator":167}],169:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isSyncValidate = exports.isSyncTransform = void 0; +exports.isSyncTransform = transform => transform.length === 1; +exports.isSyncValidate = validate => validate.length === 1; + +},{}],170:[function(require,module,exports){ +'use strict'; + +const asn1 = exports; +asn1.bignum = require('bn.js'); +asn1.define = require('./asn1/api').define; +asn1.base = require('./asn1/base'); +asn1.constants = require('./asn1/constants'); +asn1.decoders = require('./asn1/decoders'); +asn1.encoders = require('./asn1/encoders'); + +},{"./asn1/api":171,"./asn1/base":173,"./asn1/constants":177,"./asn1/decoders":179,"./asn1/encoders":182,"bn.js":184}],171:[function(require,module,exports){ +'use strict'; + +const encoders = require('./encoders'); +const decoders = require('./decoders'); +const inherits = require('inherits'); +const api = exports; +api.define = function define(name, body) { + return new Entity(name, body); +}; +function Entity(name, body) { + this.name = name; + this.body = body; + this.decoders = {}; + this.encoders = {}; +} +Entity.prototype._createNamed = function createNamed(Base) { + const name = this.name; + function Generated(entity) { + this._initNamed(entity, name); + } + inherits(Generated, Base); + Generated.prototype._initNamed = function _initNamed(entity, name) { + Base.call(this, entity, name); + }; + return new Generated(this); +}; +Entity.prototype._getDecoder = function _getDecoder(enc) { + enc = enc || 'der'; + // Lazily create decoder + if (!this.decoders.hasOwnProperty(enc)) this.decoders[enc] = this._createNamed(decoders[enc]); + return this.decoders[enc]; +}; +Entity.prototype.decode = function decode(data, enc, options) { + return this._getDecoder(enc).decode(data, options); +}; +Entity.prototype._getEncoder = function _getEncoder(enc) { + enc = enc || 'der'; + // Lazily create encoder + if (!this.encoders.hasOwnProperty(enc)) this.encoders[enc] = this._createNamed(encoders[enc]); + return this.encoders[enc]; +}; +Entity.prototype.encode = function encode(data, enc, /* internal */reporter) { + return this._getEncoder(enc).encode(data, reporter); +}; + +},{"./decoders":179,"./encoders":182,"inherits":440}],172:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const Reporter = require('../base/reporter').Reporter; +const Buffer = require('safer-buffer').Buffer; +function DecoderBuffer(base, options) { + Reporter.call(this, options); + if (!Buffer.isBuffer(base)) { + this.error('Input not Buffer'); + return; + } + this.base = base; + this.offset = 0; + this.length = base.length; +} +inherits(DecoderBuffer, Reporter); +exports.DecoderBuffer = DecoderBuffer; +DecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) { + if (data instanceof DecoderBuffer) { + return true; + } + + // Or accept compatible API + const isCompatible = typeof data === 'object' && Buffer.isBuffer(data.base) && data.constructor.name === 'DecoderBuffer' && typeof data.offset === 'number' && typeof data.length === 'number' && typeof data.save === 'function' && typeof data.restore === 'function' && typeof data.isEmpty === 'function' && typeof data.readUInt8 === 'function' && typeof data.skip === 'function' && typeof data.raw === 'function'; + return isCompatible; +}; +DecoderBuffer.prototype.save = function save() { + return { + offset: this.offset, + reporter: Reporter.prototype.save.call(this) + }; +}; +DecoderBuffer.prototype.restore = function restore(save) { + // Return skipped data + const res = new DecoderBuffer(this.base); + res.offset = save.offset; + res.length = this.offset; + this.offset = save.offset; + Reporter.prototype.restore.call(this, save.reporter); + return res; +}; +DecoderBuffer.prototype.isEmpty = function isEmpty() { + return this.offset === this.length; +}; +DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { + if (this.offset + 1 <= this.length) return this.base.readUInt8(this.offset++, true);else return this.error(fail || 'DecoderBuffer overrun'); +}; +DecoderBuffer.prototype.skip = function skip(bytes, fail) { + if (!(this.offset + bytes <= this.length)) return this.error(fail || 'DecoderBuffer overrun'); + const res = new DecoderBuffer(this.base); + + // Share reporter state + res._reporterState = this._reporterState; + res.offset = this.offset; + res.length = this.offset + bytes; + this.offset += bytes; + return res; +}; +DecoderBuffer.prototype.raw = function raw(save) { + return this.base.slice(save ? save.offset : this.offset, this.length); +}; +function EncoderBuffer(value, reporter) { + if (Array.isArray(value)) { + this.length = 0; + this.value = value.map(function (item) { + if (!EncoderBuffer.isEncoderBuffer(item)) item = new EncoderBuffer(item, reporter); + this.length += item.length; + return item; + }, this); + } else if (typeof value === 'number') { + if (!(0 <= value && value <= 0xff)) return reporter.error('non-byte EncoderBuffer value'); + this.value = value; + this.length = 1; + } else if (typeof value === 'string') { + this.value = value; + this.length = Buffer.byteLength(value); + } else if (Buffer.isBuffer(value)) { + this.value = value; + this.length = value.length; + } else { + return reporter.error('Unsupported type: ' + typeof value); + } +} +exports.EncoderBuffer = EncoderBuffer; +EncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) { + if (data instanceof EncoderBuffer) { + return true; + } + + // Or accept compatible API + const isCompatible = typeof data === 'object' && data.constructor.name === 'EncoderBuffer' && typeof data.length === 'number' && typeof data.join === 'function'; + return isCompatible; +}; +EncoderBuffer.prototype.join = function join(out, offset) { + if (!out) out = Buffer.alloc(this.length); + if (!offset) offset = 0; + if (this.length === 0) return out; + if (Array.isArray(this.value)) { + this.value.forEach(function (item) { + item.join(out, offset); + offset += item.length; + }); + } else { + if (typeof this.value === 'number') out[offset] = this.value;else if (typeof this.value === 'string') out.write(this.value, offset);else if (Buffer.isBuffer(this.value)) this.value.copy(out, offset); + offset += this.length; + } + return out; +}; + +},{"../base/reporter":175,"inherits":440,"safer-buffer":495}],173:[function(require,module,exports){ +'use strict'; + +const base = exports; +base.Reporter = require('./reporter').Reporter; +base.DecoderBuffer = require('./buffer').DecoderBuffer; +base.EncoderBuffer = require('./buffer').EncoderBuffer; +base.Node = require('./node'); + +},{"./buffer":172,"./node":174,"./reporter":175}],174:[function(require,module,exports){ +'use strict'; + +const Reporter = require('../base/reporter').Reporter; +const EncoderBuffer = require('../base/buffer').EncoderBuffer; +const DecoderBuffer = require('../base/buffer').DecoderBuffer; +const assert = require('minimalistic-assert'); + +// Supported tags +const tags = ['seq', 'seqof', 'set', 'setof', 'objid', 'bool', 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr']; + +// Public methods list +const methods = ['key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', 'any', 'contains'].concat(tags); + +// Overrided methods list +const overrided = ['_peekTag', '_decodeTag', '_use', '_decodeStr', '_decodeObjid', '_decodeTime', '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', '_encodeNull', '_encodeInt', '_encodeBool']; +function Node(enc, parent, name) { + const state = {}; + this._baseState = state; + state.name = name; + state.enc = enc; + state.parent = parent || null; + state.children = null; + + // State + state.tag = null; + state.args = null; + state.reverseArgs = null; + state.choice = null; + state.optional = false; + state.any = false; + state.obj = false; + state.use = null; + state.useDecoder = null; + state.key = null; + state['default'] = null; + state.explicit = null; + state.implicit = null; + state.contains = null; + + // Should create new instance on each method + if (!state.parent) { + state.children = []; + this._wrap(); + } +} +module.exports = Node; +const stateProps = ['enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', 'implicit', 'contains']; +Node.prototype.clone = function clone() { + const state = this._baseState; + const cstate = {}; + stateProps.forEach(function (prop) { + cstate[prop] = state[prop]; + }); + const res = new this.constructor(cstate.parent); + res._baseState = cstate; + return res; +}; +Node.prototype._wrap = function wrap() { + const state = this._baseState; + methods.forEach(function (method) { + this[method] = function _wrappedMethod() { + const clone = new this.constructor(this); + state.children.push(clone); + return clone[method].apply(clone, arguments); + }; + }, this); +}; +Node.prototype._init = function init(body) { + const state = this._baseState; + assert(state.parent === null); + body.call(this); + + // Filter children + state.children = state.children.filter(function (child) { + return child._baseState.parent === this; + }, this); + assert.equal(state.children.length, 1, 'Root node can have only one child'); +}; +Node.prototype._useArgs = function useArgs(args) { + const state = this._baseState; + + // Filter children and args + const children = args.filter(function (arg) { + return arg instanceof this.constructor; + }, this); + args = args.filter(function (arg) { + return !(arg instanceof this.constructor); + }, this); + if (children.length !== 0) { + assert(state.children === null); + state.children = children; + + // Replace parent to maintain backward link + children.forEach(function (child) { + child._baseState.parent = this; + }, this); + } + if (args.length !== 0) { + assert(state.args === null); + state.args = args; + state.reverseArgs = args.map(function (arg) { + if (typeof arg !== 'object' || arg.constructor !== Object) return arg; + const res = {}; + Object.keys(arg).forEach(function (key) { + if (key == (key | 0)) key |= 0; + const value = arg[key]; + res[value] = key; + }); + return res; + }); + } +}; + +// +// Overrided methods +// + +overrided.forEach(function (method) { + Node.prototype[method] = function _overrided() { + const state = this._baseState; + throw new Error(method + ' not implemented for encoding: ' + state.enc); + }; +}); + +// +// Public methods +// + +tags.forEach(function (tag) { + Node.prototype[tag] = function _tagMethod() { + const state = this._baseState; + const args = Array.prototype.slice.call(arguments); + assert(state.tag === null); + state.tag = tag; + this._useArgs(args); + return this; + }; +}); +Node.prototype.use = function use(item) { + assert(item); + const state = this._baseState; + assert(state.use === null); + state.use = item; + return this; +}; +Node.prototype.optional = function optional() { + const state = this._baseState; + state.optional = true; + return this; +}; +Node.prototype.def = function def(val) { + const state = this._baseState; + assert(state['default'] === null); + state['default'] = val; + state.optional = true; + return this; +}; +Node.prototype.explicit = function explicit(num) { + const state = this._baseState; + assert(state.explicit === null && state.implicit === null); + state.explicit = num; + return this; +}; +Node.prototype.implicit = function implicit(num) { + const state = this._baseState; + assert(state.explicit === null && state.implicit === null); + state.implicit = num; + return this; +}; +Node.prototype.obj = function obj() { + const state = this._baseState; + const args = Array.prototype.slice.call(arguments); + state.obj = true; + if (args.length !== 0) this._useArgs(args); + return this; +}; +Node.prototype.key = function key(newKey) { + const state = this._baseState; + assert(state.key === null); + state.key = newKey; + return this; +}; +Node.prototype.any = function any() { + const state = this._baseState; + state.any = true; + return this; +}; +Node.prototype.choice = function choice(obj) { + const state = this._baseState; + assert(state.choice === null); + state.choice = obj; + this._useArgs(Object.keys(obj).map(function (key) { + return obj[key]; + })); + return this; +}; +Node.prototype.contains = function contains(item) { + const state = this._baseState; + assert(state.use === null); + state.contains = item; + return this; +}; + +// +// Decoding +// + +Node.prototype._decode = function decode(input, options) { + const state = this._baseState; + + // Decode root node + if (state.parent === null) return input.wrapResult(state.children[0]._decode(input, options)); + let result = state['default']; + let present = true; + let prevKey = null; + if (state.key !== null) prevKey = input.enterKey(state.key); + + // Check if tag is there + if (state.optional) { + let tag = null; + if (state.explicit !== null) tag = state.explicit;else if (state.implicit !== null) tag = state.implicit;else if (state.tag !== null) tag = state.tag; + if (tag === null && !state.any) { + // Trial and Error + const save = input.save(); + try { + if (state.choice === null) this._decodeGeneric(state.tag, input, options);else this._decodeChoice(input, options); + present = true; + } catch (e) { + present = false; + } + input.restore(save); + } else { + present = this._peekTag(input, tag, state.any); + if (input.isError(present)) return present; + } + } + + // Push object on stack + let prevObj; + if (state.obj && present) prevObj = input.enterObject(); + if (present) { + // Unwrap explicit values + if (state.explicit !== null) { + const explicit = this._decodeTag(input, state.explicit); + if (input.isError(explicit)) return explicit; + input = explicit; + } + const start = input.offset; + + // Unwrap implicit and normal values + if (state.use === null && state.choice === null) { + let save; + if (state.any) save = input.save(); + const body = this._decodeTag(input, state.implicit !== null ? state.implicit : state.tag, state.any); + if (input.isError(body)) return body; + if (state.any) result = input.raw(save);else input = body; + } + if (options && options.track && state.tag !== null) options.track(input.path(), start, input.length, 'tagged'); + if (options && options.track && state.tag !== null) options.track(input.path(), input.offset, input.length, 'content'); + + // Select proper method for tag + if (state.any) { + // no-op + } else if (state.choice === null) { + result = this._decodeGeneric(state.tag, input, options); + } else { + result = this._decodeChoice(input, options); + } + if (input.isError(result)) return result; + + // Decode children + if (!state.any && state.choice === null && state.children !== null) { + state.children.forEach(function decodeChildren(child) { + // NOTE: We are ignoring errors here, to let parser continue with other + // parts of encoded data + child._decode(input, options); + }); + } + + // Decode contained/encoded by schema, only in bit or octet strings + if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { + const data = new DecoderBuffer(result); + result = this._getUse(state.contains, input._reporterState.obj)._decode(data, options); + } + } + + // Pop object + if (state.obj && present) result = input.leaveObject(prevObj); + + // Set key + if (state.key !== null && (result !== null || present === true)) input.leaveKey(prevKey, state.key, result);else if (prevKey !== null) input.exitKey(prevKey); + return result; +}; +Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { + const state = this._baseState; + if (tag === 'seq' || tag === 'set') return null; + if (tag === 'seqof' || tag === 'setof') return this._decodeList(input, tag, state.args[0], options);else if (/str$/.test(tag)) return this._decodeStr(input, tag, options);else if (tag === 'objid' && state.args) return this._decodeObjid(input, state.args[0], state.args[1], options);else if (tag === 'objid') return this._decodeObjid(input, null, null, options);else if (tag === 'gentime' || tag === 'utctime') return this._decodeTime(input, tag, options);else if (tag === 'null_') return this._decodeNull(input, options);else if (tag === 'bool') return this._decodeBool(input, options);else if (tag === 'objDesc') return this._decodeStr(input, tag, options);else if (tag === 'int' || tag === 'enum') return this._decodeInt(input, state.args && state.args[0], options); + if (state.use !== null) { + return this._getUse(state.use, input._reporterState.obj)._decode(input, options); + } else { + return input.error('unknown tag: ' + tag); + } +}; +Node.prototype._getUse = function _getUse(entity, obj) { + const state = this._baseState; + // Create altered use decoder if implicit is set + state.useDecoder = this._use(entity, obj); + assert(state.useDecoder._baseState.parent === null); + state.useDecoder = state.useDecoder._baseState.children[0]; + if (state.implicit !== state.useDecoder._baseState.implicit) { + state.useDecoder = state.useDecoder.clone(); + state.useDecoder._baseState.implicit = state.implicit; + } + return state.useDecoder; +}; +Node.prototype._decodeChoice = function decodeChoice(input, options) { + const state = this._baseState; + let result = null; + let match = false; + Object.keys(state.choice).some(function (key) { + const save = input.save(); + const node = state.choice[key]; + try { + const value = node._decode(input, options); + if (input.isError(value)) return false; + result = { + type: key, + value: value + }; + match = true; + } catch (e) { + input.restore(save); + return false; + } + return true; + }, this); + if (!match) return input.error('Choice not matched'); + return result; +}; + +// +// Encoding +// + +Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { + return new EncoderBuffer(data, this.reporter); +}; +Node.prototype._encode = function encode(data, reporter, parent) { + const state = this._baseState; + if (state['default'] !== null && state['default'] === data) return; + const result = this._encodeValue(data, reporter, parent); + if (result === undefined) return; + if (this._skipDefault(result, reporter, parent)) return; + return result; +}; +Node.prototype._encodeValue = function encode(data, reporter, parent) { + const state = this._baseState; + + // Decode root node + if (state.parent === null) return state.children[0]._encode(data, reporter || new Reporter()); + let result = null; + + // Set reporter to share it with a child class + this.reporter = reporter; + + // Check if data is there + if (state.optional && data === undefined) { + if (state['default'] !== null) data = state['default'];else return; + } + + // Encode children first + let content = null; + let primitive = false; + if (state.any) { + // Anything that was given is translated to buffer + result = this._createEncoderBuffer(data); + } else if (state.choice) { + result = this._encodeChoice(data, reporter); + } else if (state.contains) { + content = this._getUse(state.contains, parent)._encode(data, reporter); + primitive = true; + } else if (state.children) { + content = state.children.map(function (child) { + if (child._baseState.tag === 'null_') return child._encode(null, reporter, data); + if (child._baseState.key === null) return reporter.error('Child should have a key'); + const prevKey = reporter.enterKey(child._baseState.key); + if (typeof data !== 'object') return reporter.error('Child expected, but input is not object'); + const res = child._encode(data[child._baseState.key], reporter, data); + reporter.leaveKey(prevKey); + return res; + }, this).filter(function (child) { + return child; + }); + content = this._createEncoderBuffer(content); + } else { + if (state.tag === 'seqof' || state.tag === 'setof') { + // TODO(indutny): this should be thrown on DSL level + if (!(state.args && state.args.length === 1)) return reporter.error('Too many args for : ' + state.tag); + if (!Array.isArray(data)) return reporter.error('seqof/setof, but data is not Array'); + const child = this.clone(); + child._baseState.implicit = null; + content = this._createEncoderBuffer(data.map(function (item) { + const state = this._baseState; + return this._getUse(state.args[0], data)._encode(item, reporter); + }, child)); + } else if (state.use !== null) { + result = this._getUse(state.use, parent)._encode(data, reporter); + } else { + content = this._encodePrimitive(state.tag, data); + primitive = true; + } + } + + // Encode data itself + if (!state.any && state.choice === null) { + const tag = state.implicit !== null ? state.implicit : state.tag; + const cls = state.implicit === null ? 'universal' : 'context'; + if (tag === null) { + if (state.use === null) reporter.error('Tag could be omitted only for .use()'); + } else { + if (state.use === null) result = this._encodeComposite(tag, primitive, cls, content); + } + } + + // Wrap in explicit + if (state.explicit !== null) result = this._encodeComposite(state.explicit, false, 'context', result); + return result; +}; +Node.prototype._encodeChoice = function encodeChoice(data, reporter) { + const state = this._baseState; + const node = state.choice[data.type]; + if (!node) { + assert(false, data.type + ' not found in ' + JSON.stringify(Object.keys(state.choice))); + } + return node._encode(data.value, reporter); +}; +Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { + const state = this._baseState; + if (/str$/.test(tag)) return this._encodeStr(data, tag);else if (tag === 'objid' && state.args) return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);else if (tag === 'objid') return this._encodeObjid(data, null, null);else if (tag === 'gentime' || tag === 'utctime') return this._encodeTime(data, tag);else if (tag === 'null_') return this._encodeNull();else if (tag === 'int' || tag === 'enum') return this._encodeInt(data, state.args && state.reverseArgs[0]);else if (tag === 'bool') return this._encodeBool(data);else if (tag === 'objDesc') return this._encodeStr(data, tag);else throw new Error('Unsupported tag: ' + tag); +}; +Node.prototype._isNumstr = function isNumstr(str) { + return /^[0-9 ]*$/.test(str); +}; +Node.prototype._isPrintstr = function isPrintstr(str) { + return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str); +}; + +},{"../base/buffer":172,"../base/reporter":175,"minimalistic-assert":453}],175:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +function Reporter(options) { + this._reporterState = { + obj: null, + path: [], + options: options || {}, + errors: [] + }; +} +exports.Reporter = Reporter; +Reporter.prototype.isError = function isError(obj) { + return obj instanceof ReporterError; +}; +Reporter.prototype.save = function save() { + const state = this._reporterState; + return { + obj: state.obj, + pathLen: state.path.length + }; +}; +Reporter.prototype.restore = function restore(data) { + const state = this._reporterState; + state.obj = data.obj; + state.path = state.path.slice(0, data.pathLen); +}; +Reporter.prototype.enterKey = function enterKey(key) { + return this._reporterState.path.push(key); +}; +Reporter.prototype.exitKey = function exitKey(index) { + const state = this._reporterState; + state.path = state.path.slice(0, index - 1); +}; +Reporter.prototype.leaveKey = function leaveKey(index, key, value) { + const state = this._reporterState; + this.exitKey(index); + if (state.obj !== null) state.obj[key] = value; +}; +Reporter.prototype.path = function path() { + return this._reporterState.path.join('/'); +}; +Reporter.prototype.enterObject = function enterObject() { + const state = this._reporterState; + const prev = state.obj; + state.obj = {}; + return prev; +}; +Reporter.prototype.leaveObject = function leaveObject(prev) { + const state = this._reporterState; + const now = state.obj; + state.obj = prev; + return now; +}; +Reporter.prototype.error = function error(msg) { + let err; + const state = this._reporterState; + const inherited = msg instanceof ReporterError; + if (inherited) { + err = msg; + } else { + err = new ReporterError(state.path.map(function (elem) { + return '[' + JSON.stringify(elem) + ']'; + }).join(''), msg.message || msg, msg.stack); + } + if (!state.options.partial) throw err; + if (!inherited) state.errors.push(err); + return err; +}; +Reporter.prototype.wrapResult = function wrapResult(result) { + const state = this._reporterState; + if (!state.options.partial) return result; + return { + result: this.isError(result) ? null : result, + errors: state.errors + }; +}; +function ReporterError(path, msg) { + this.path = path; + this.rethrow(msg); +} +inherits(ReporterError, Error); +ReporterError.prototype.rethrow = function rethrow(msg) { + this.message = msg + ' at: ' + (this.path || '(shallow)'); + if (Error.captureStackTrace) Error.captureStackTrace(this, ReporterError); + if (!this.stack) { + try { + // IE only adds stack when thrown + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; + } + } + return this; +}; + +},{"inherits":440}],176:[function(require,module,exports){ +'use strict'; + +// Helper +function reverse(map) { + const res = {}; + Object.keys(map).forEach(function (key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) key = key | 0; + const value = map[key]; + res[value] = key; + }); + return res; +} +exports.tagClass = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private' +}; +exports.tagClassByName = reverse(exports.tagClass); +exports.tag = { + 0x00: 'end', + 0x01: 'bool', + 0x02: 'int', + 0x03: 'bitstr', + 0x04: 'octstr', + 0x05: 'null_', + 0x06: 'objid', + 0x07: 'objDesc', + 0x08: 'external', + 0x09: 'real', + 0x0a: 'enum', + 0x0b: 'embed', + 0x0c: 'utf8str', + 0x0d: 'relativeOid', + 0x10: 'seq', + 0x11: 'set', + 0x12: 'numstr', + 0x13: 'printstr', + 0x14: 't61str', + 0x15: 'videostr', + 0x16: 'ia5str', + 0x17: 'utctime', + 0x18: 'gentime', + 0x19: 'graphstr', + 0x1a: 'iso646str', + 0x1b: 'genstr', + 0x1c: 'unistr', + 0x1d: 'charstr', + 0x1e: 'bmpstr' +}; +exports.tagByName = reverse(exports.tag); + +},{}],177:[function(require,module,exports){ +'use strict'; + +const constants = exports; + +// Helper +constants._reverse = function reverse(map) { + const res = {}; + Object.keys(map).forEach(function (key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) key = key | 0; + const value = map[key]; + res[value] = key; + }); + return res; +}; +constants.der = require('./der'); + +},{"./der":176}],178:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const bignum = require('bn.js'); +const DecoderBuffer = require('../base/buffer').DecoderBuffer; +const Node = require('../base/node'); + +// Import DER constants +const der = require('../constants/der'); +function DERDecoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +} +module.exports = DERDecoder; +DERDecoder.prototype.decode = function decode(data, options) { + if (!DecoderBuffer.isDecoderBuffer(data)) { + data = new DecoderBuffer(data, options); + } + return this.tree._decode(data, options); +}; + +// Tree methods + +function DERNode(parent) { + Node.call(this, 'der', parent); +} +inherits(DERNode, Node); +DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { + if (buffer.isEmpty()) return false; + const state = buffer.save(); + const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); + if (buffer.isError(decodedTag)) return decodedTag; + buffer.restore(state); + return decodedTag.tag === tag || decodedTag.tagStr === tag || decodedTag.tagStr + 'of' === tag || any; +}; +DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { + const decodedTag = derDecodeTag(buffer, 'Failed to decode tag of "' + tag + '"'); + if (buffer.isError(decodedTag)) return decodedTag; + let len = derDecodeLen(buffer, decodedTag.primitive, 'Failed to get length of "' + tag + '"'); + + // Failure + if (buffer.isError(len)) return len; + if (!any && decodedTag.tag !== tag && decodedTag.tagStr !== tag && decodedTag.tagStr + 'of' !== tag) { + return buffer.error('Failed to match tag: "' + tag + '"'); + } + if (decodedTag.primitive || len !== null) return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); + + // Indefinite length... find END tag + const state = buffer.save(); + const res = this._skipUntilEnd(buffer, 'Failed to skip indefinite length body: "' + this.tag + '"'); + if (buffer.isError(res)) return res; + len = buffer.offset - state.offset; + buffer.restore(state); + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +}; +DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { + for (;;) { + const tag = derDecodeTag(buffer, fail); + if (buffer.isError(tag)) return tag; + const len = derDecodeLen(buffer, tag.primitive, fail); + if (buffer.isError(len)) return len; + let res; + if (tag.primitive || len !== null) res = buffer.skip(len);else res = this._skipUntilEnd(buffer, fail); + + // Failure + if (buffer.isError(res)) return res; + if (tag.tagStr === 'end') break; + } +}; +DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, options) { + const result = []; + while (!buffer.isEmpty()) { + const possibleEnd = this._peekTag(buffer, 'end'); + if (buffer.isError(possibleEnd)) return possibleEnd; + const res = decoder.decode(buffer, 'der', options); + if (buffer.isError(res) && possibleEnd) break; + result.push(res); + } + return result; +}; +DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { + if (tag === 'bitstr') { + const unused = buffer.readUInt8(); + if (buffer.isError(unused)) return unused; + return { + unused: unused, + data: buffer.raw() + }; + } else if (tag === 'bmpstr') { + const raw = buffer.raw(); + if (raw.length % 2 === 1) return buffer.error('Decoding of string type: bmpstr length mismatch'); + let str = ''; + for (let i = 0; i < raw.length / 2; i++) { + str += String.fromCharCode(raw.readUInt16BE(i * 2)); + } + return str; + } else if (tag === 'numstr') { + const numstr = buffer.raw().toString('ascii'); + if (!this._isNumstr(numstr)) { + return buffer.error('Decoding of string type: ' + 'numstr unsupported characters'); + } + return numstr; + } else if (tag === 'octstr') { + return buffer.raw(); + } else if (tag === 'objDesc') { + return buffer.raw(); + } else if (tag === 'printstr') { + const printstr = buffer.raw().toString('ascii'); + if (!this._isPrintstr(printstr)) { + return buffer.error('Decoding of string type: ' + 'printstr unsupported characters'); + } + return printstr; + } else if (/str$/.test(tag)) { + return buffer.raw().toString(); + } else { + return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + } +}; +DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { + let result; + const identifiers = []; + let ident = 0; + let subident = 0; + while (!buffer.isEmpty()) { + subident = buffer.readUInt8(); + ident <<= 7; + ident |= subident & 0x7f; + if ((subident & 0x80) === 0) { + identifiers.push(ident); + ident = 0; + } + } + if (subident & 0x80) identifiers.push(ident); + const first = identifiers[0] / 40 | 0; + const second = identifiers[0] % 40; + if (relative) result = identifiers;else result = [first, second].concat(identifiers.slice(1)); + if (values) { + let tmp = values[result.join(' ')]; + if (tmp === undefined) tmp = values[result.join('.')]; + if (tmp !== undefined) result = tmp; + } + return result; +}; +DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { + const str = buffer.raw().toString(); + let year; + let mon; + let day; + let hour; + let min; + let sec; + if (tag === 'gentime') { + year = str.slice(0, 4) | 0; + mon = str.slice(4, 6) | 0; + day = str.slice(6, 8) | 0; + hour = str.slice(8, 10) | 0; + min = str.slice(10, 12) | 0; + sec = str.slice(12, 14) | 0; + } else if (tag === 'utctime') { + year = str.slice(0, 2) | 0; + mon = str.slice(2, 4) | 0; + day = str.slice(4, 6) | 0; + hour = str.slice(6, 8) | 0; + min = str.slice(8, 10) | 0; + sec = str.slice(10, 12) | 0; + if (year < 70) year = 2000 + year;else year = 1900 + year; + } else { + return buffer.error('Decoding ' + tag + ' time is not supported yet'); + } + return Date.UTC(year, mon - 1, day, hour, min, sec, 0); +}; +DERNode.prototype._decodeNull = function decodeNull() { + return null; +}; +DERNode.prototype._decodeBool = function decodeBool(buffer) { + const res = buffer.readUInt8(); + if (buffer.isError(res)) return res;else return res !== 0; +}; +DERNode.prototype._decodeInt = function decodeInt(buffer, values) { + // Bigint, return as it is (assume big endian) + const raw = buffer.raw(); + let res = new bignum(raw); + if (values) res = values[res.toString(10)] || res; + return res; +}; +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') entity = entity(obj); + return entity._getDecoder('der').tree; +}; + +// Utility methods + +function derDecodeTag(buf, fail) { + let tag = buf.readUInt8(fail); + if (buf.isError(tag)) return tag; + const cls = der.tagClass[tag >> 6]; + const primitive = (tag & 0x20) === 0; + + // Multi-octet tag - load + if ((tag & 0x1f) === 0x1f) { + let oct = tag; + tag = 0; + while ((oct & 0x80) === 0x80) { + oct = buf.readUInt8(fail); + if (buf.isError(oct)) return oct; + tag <<= 7; + tag |= oct & 0x7f; + } + } else { + tag &= 0x1f; + } + const tagStr = der.tag[tag]; + return { + cls: cls, + primitive: primitive, + tag: tag, + tagStr: tagStr + }; +} +function derDecodeLen(buf, primitive, fail) { + let len = buf.readUInt8(fail); + if (buf.isError(len)) return len; + + // Indefinite form + if (!primitive && len === 0x80) return null; + + // Definite form + if ((len & 0x80) === 0) { + // Short form + return len; + } + + // Long form + const num = len & 0x7f; + if (num > 4) return buf.error('length octect is too long'); + len = 0; + for (let i = 0; i < num; i++) { + len <<= 8; + const j = buf.readUInt8(fail); + if (buf.isError(j)) return j; + len |= j; + } + return len; +} + +},{"../base/buffer":172,"../base/node":174,"../constants/der":176,"bn.js":184,"inherits":440}],179:[function(require,module,exports){ +'use strict'; + +const decoders = exports; +decoders.der = require('./der'); +decoders.pem = require('./pem'); + +},{"./der":178,"./pem":180}],180:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const Buffer = require('safer-buffer').Buffer; +const DERDecoder = require('./der'); +function PEMDecoder(entity) { + DERDecoder.call(this, entity); + this.enc = 'pem'; +} +inherits(PEMDecoder, DERDecoder); +module.exports = PEMDecoder; +PEMDecoder.prototype.decode = function decode(data, options) { + const lines = data.toString().split(/[\r\n]+/g); + const label = options.label.toUpperCase(); + const re = /^-----(BEGIN|END) ([^-]+)-----$/; + let start = -1; + let end = -1; + for (let i = 0; i < lines.length; i++) { + const match = lines[i].match(re); + if (match === null) continue; + if (match[2] !== label) continue; + if (start === -1) { + if (match[1] !== 'BEGIN') break; + start = i; + } else { + if (match[1] !== 'END') break; + end = i; + break; + } + } + if (start === -1 || end === -1) throw new Error('PEM section not found for: ' + label); + const base64 = lines.slice(start + 1, end).join(''); + // Remove excessive symbols + base64.replace(/[^a-z0-9+/=]+/gi, ''); + const input = Buffer.from(base64, 'base64'); + return DERDecoder.prototype.decode.call(this, input, options); +}; + +},{"./der":178,"inherits":440,"safer-buffer":495}],181:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const Buffer = require('safer-buffer').Buffer; +const Node = require('../base/node'); + +// Import DER constants +const der = require('../constants/der'); +function DEREncoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +} +module.exports = DEREncoder; +DEREncoder.prototype.encode = function encode(data, reporter) { + return this.tree._encode(data, reporter).join(); +}; + +// Tree methods + +function DERNode(parent) { + Node.call(this, 'der', parent); +} +inherits(DERNode, Node); +DERNode.prototype._encodeComposite = function encodeComposite(tag, primitive, cls, content) { + const encodedTag = encodeTag(tag, primitive, cls, this.reporter); + + // Short form + if (content.length < 0x80) { + const header = Buffer.alloc(2); + header[0] = encodedTag; + header[1] = content.length; + return this._createEncoderBuffer([header, content]); + } + + // Long form + // Count octets required to store length + let lenOctets = 1; + for (let i = content.length; i >= 0x100; i >>= 8) lenOctets++; + const header = Buffer.alloc(1 + 1 + lenOctets); + header[0] = encodedTag; + header[1] = 0x80 | lenOctets; + for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) header[i] = j & 0xff; + return this._createEncoderBuffer([header, content]); +}; +DERNode.prototype._encodeStr = function encodeStr(str, tag) { + if (tag === 'bitstr') { + return this._createEncoderBuffer([str.unused | 0, str.data]); + } else if (tag === 'bmpstr') { + const buf = Buffer.alloc(str.length * 2); + for (let i = 0; i < str.length; i++) { + buf.writeUInt16BE(str.charCodeAt(i), i * 2); + } + return this._createEncoderBuffer(buf); + } else if (tag === 'numstr') { + if (!this._isNumstr(str)) { + return this.reporter.error('Encoding of string type: numstr supports ' + 'only digits and space'); + } + return this._createEncoderBuffer(str); + } else if (tag === 'printstr') { + if (!this._isPrintstr(str)) { + return this.reporter.error('Encoding of string type: printstr supports ' + 'only latin upper and lower case letters, ' + 'digits, space, apostrophe, left and rigth ' + 'parenthesis, plus sign, comma, hyphen, ' + 'dot, slash, colon, equal sign, ' + 'question mark'); + } + return this._createEncoderBuffer(str); + } else if (/str$/.test(tag)) { + return this._createEncoderBuffer(str); + } else if (tag === 'objDesc') { + return this._createEncoderBuffer(str); + } else { + return this.reporter.error('Encoding of string type: ' + tag + ' unsupported'); + } +}; +DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { + if (typeof id === 'string') { + if (!values) return this.reporter.error('string objid given, but no values map found'); + if (!values.hasOwnProperty(id)) return this.reporter.error('objid not found in values map'); + id = values[id].split(/[\s.]+/g); + for (let i = 0; i < id.length; i++) id[i] |= 0; + } else if (Array.isArray(id)) { + id = id.slice(); + for (let i = 0; i < id.length; i++) id[i] |= 0; + } + if (!Array.isArray(id)) { + return this.reporter.error('objid() should be either array or string, ' + 'got: ' + JSON.stringify(id)); + } + if (!relative) { + if (id[1] >= 40) return this.reporter.error('Second objid identifier OOB'); + id.splice(0, 2, id[0] * 40 + id[1]); + } + + // Count number of octets + let size = 0; + for (let i = 0; i < id.length; i++) { + let ident = id[i]; + for (size++; ident >= 0x80; ident >>= 7) size++; + } + const objid = Buffer.alloc(size); + let offset = objid.length - 1; + for (let i = id.length - 1; i >= 0; i--) { + let ident = id[i]; + objid[offset--] = ident & 0x7f; + while ((ident >>= 7) > 0) objid[offset--] = 0x80 | ident & 0x7f; + } + return this._createEncoderBuffer(objid); +}; +function two(num) { + if (num < 10) return '0' + num;else return num; +} +DERNode.prototype._encodeTime = function encodeTime(time, tag) { + let str; + const date = new Date(time); + if (tag === 'gentime') { + str = [two(date.getUTCFullYear()), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join(''); + } else if (tag === 'utctime') { + str = [two(date.getUTCFullYear() % 100), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join(''); + } else { + this.reporter.error('Encoding ' + tag + ' time is not supported yet'); + } + return this._encodeStr(str, 'octstr'); +}; +DERNode.prototype._encodeNull = function encodeNull() { + return this._createEncoderBuffer(''); +}; +DERNode.prototype._encodeInt = function encodeInt(num, values) { + if (typeof num === 'string') { + if (!values) return this.reporter.error('String int or enum given, but no values map'); + if (!values.hasOwnProperty(num)) { + return this.reporter.error('Values map doesn\'t contain: ' + JSON.stringify(num)); + } + num = values[num]; + } + + // Bignum, assume big endian + if (typeof num !== 'number' && !Buffer.isBuffer(num)) { + const numArray = num.toArray(); + if (!num.sign && numArray[0] & 0x80) { + numArray.unshift(0); + } + num = Buffer.from(numArray); + } + if (Buffer.isBuffer(num)) { + let size = num.length; + if (num.length === 0) size++; + const out = Buffer.alloc(size); + num.copy(out); + if (num.length === 0) out[0] = 0; + return this._createEncoderBuffer(out); + } + if (num < 0x80) return this._createEncoderBuffer(num); + if (num < 0x100) return this._createEncoderBuffer([0, num]); + let size = 1; + for (let i = num; i >= 0x100; i >>= 8) size++; + const out = new Array(size); + for (let i = out.length - 1; i >= 0; i--) { + out[i] = num & 0xff; + num >>= 8; + } + if (out[0] & 0x80) { + out.unshift(0); + } + return this._createEncoderBuffer(Buffer.from(out)); +}; +DERNode.prototype._encodeBool = function encodeBool(value) { + return this._createEncoderBuffer(value ? 0xff : 0); +}; +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') entity = entity(obj); + return entity._getEncoder('der').tree; +}; +DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { + const state = this._baseState; + let i; + if (state['default'] === null) return false; + const data = dataBuffer.join(); + if (state.defaultBuffer === undefined) state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); + if (data.length !== state.defaultBuffer.length) return false; + for (i = 0; i < data.length; i++) if (data[i] !== state.defaultBuffer[i]) return false; + return true; +}; + +// Utility methods + +function encodeTag(tag, primitive, cls, reporter) { + let res; + if (tag === 'seqof') tag = 'seq';else if (tag === 'setof') tag = 'set'; + if (der.tagByName.hasOwnProperty(tag)) res = der.tagByName[tag];else if (typeof tag === 'number' && (tag | 0) === tag) res = tag;else return reporter.error('Unknown tag: ' + tag); + if (res >= 0x1f) return reporter.error('Multi-octet tag encoding unsupported'); + if (!primitive) res |= 0x20; + res |= der.tagClassByName[cls || 'universal'] << 6; + return res; +} + +},{"../base/node":174,"../constants/der":176,"inherits":440,"safer-buffer":495}],182:[function(require,module,exports){ +'use strict'; + +const encoders = exports; +encoders.der = require('./der'); +encoders.pem = require('./pem'); + +},{"./der":181,"./pem":183}],183:[function(require,module,exports){ +'use strict'; + +const inherits = require('inherits'); +const DEREncoder = require('./der'); +function PEMEncoder(entity) { + DEREncoder.call(this, entity); + this.enc = 'pem'; +} +inherits(PEMEncoder, DEREncoder); +module.exports = PEMEncoder; +PEMEncoder.prototype.encode = function encode(data, options) { + const buf = DEREncoder.prototype.encode.call(this, data); + const p = buf.toString('base64'); + const out = ['-----BEGIN ' + options.label + '-----']; + for (let i = 0; i < p.length; i += 64) out.push(p.slice(i, i + 64)); + out.push('-----END ' + options.label + '-----'); + return out.join('\n'); +}; + +},{"./der":181,"inherits":440}],184:[function(require,module,exports){ +"use strict"; + +(function (module, exports) { + 'use strict'; + + // Utils + function assert(val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN(number, base, endian) { + if (BN.isBN(number)) { + return number; + } + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + BN.BN = BN; + BN.wordSize = 26; + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = require('buffer').Buffer; + } + } catch (e) {} + BN.isBN = function isBN(num) { + if (num instanceof BN) { + return true; + } + return num !== null && typeof num === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + BN.max = function max(left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + BN.min = function min(left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + BN.prototype._init = function init(number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); + } + } + } + }; + BN.prototype._initNumber = function _initNumber(number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [number & 0x3ffffff]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1]; + this.length = 3; + } + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + BN.prototype._initArray = function _initArray(number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [0]; + this.length = 1; + return this; + } + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | number[i - 1] << 8 | number[i - 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | number[i + 1] << 8 | number[i + 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this.strip(); + }; + function parseHex4Bits(string, index) { + var c = string.charCodeAt(index); + // 'A' - 'F' + if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return c - 48 & 0xf; + } + } + function parseHexByte(string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + BN.prototype._parseHex = function _parseHex(number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } + this.strip(); + }; + function parseBase(str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + BN.prototype._parseBase = function _parseBase(number, base, start) { + // Initialize as zero + this.words = [0]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = limbPow / base | 0; + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + for (i = 0; i < mod; i++) { + pow *= base; + } + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + this.strip(); + }; + BN.prototype.copy = function copy(dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + BN.prototype.clone = function clone() { + var r = new BN(null); + this.copy(r); + return r; + }; + BN.prototype._expand = function _expand(size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip() { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + BN.prototype._normSign = function _normSign() { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + BN.prototype.inspect = function inspect() { + return (this.red ? ''; + }; + + /* + var zeros = []; + var groupSizes = []; + var groupBases = []; + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + */ + + var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000']; + var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]; + var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176]; + BN.prototype.toString = function toString(base, padding) { + base = base || 10; + padding = padding | 0 || 1; + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = ((w << off | carry) & 0xffffff).toString(16); + carry = w >>> 24 - off & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + assert(false, 'Base should be between 2 and 36'); + }; + BN.prototype.toNumber = function toNumber() { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + this.words[1] * 0x4000000; + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return this.negative !== 0 ? -ret : ret; + }; + BN.prototype.toJSON = function toJSON() { + return this.toString(16); + }; + BN.prototype.toBuffer = function toBuffer(endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + BN.prototype.toArray = function toArray(endian, length) { + return this.toArrayLike(Array, endian, length); + }; + BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + res[i] = b; + } + for (; i < reqLength; i++) { + res[i] = 0; + } + } + return res; + }; + if (Math.clz32) { + BN.prototype._countBits = function _countBits(w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits(w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + BN.prototype._zeroBits = function _zeroBits(w) { + // Short-cut + if (w === 0) return 26; + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength() { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + function toBitArray(num) { + var w = new Array(num.bitLength()); + for (var bit = 0; bit < w.length; bit++) { + var off = bit / 26 | 0; + var wbit = bit % 26; + w[bit] = (num.words[off] & 1 << wbit) >>> wbit; + } + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits() { + if (this.isZero()) return 0; + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + BN.prototype.byteLength = function byteLength() { + return Math.ceil(this.bitLength() / 8); + }; + BN.prototype.toTwos = function toTwos(width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + BN.prototype.fromTwos = function fromTwos(width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + BN.prototype.isNeg = function isNeg() { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg() { + return this.clone().ineg(); + }; + BN.prototype.ineg = function ineg() { + if (!this.isZero()) { + this.negative ^= 1; + } + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor(num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + return this.strip(); + }; + BN.prototype.ior = function ior(num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or(num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + BN.prototype.uor = function uor(num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand(num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + this.length = b.length; + return this.strip(); + }; + BN.prototype.iand = function iand(num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and(num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + BN.prototype.uand = function uand(num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor(num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + this.length = a.length; + return this.strip(); + }; + BN.prototype.ixor = function ixor(num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor(num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + BN.prototype.uxor = function uxor(num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn(width) { + assert(typeof width === 'number' && width >= 0); + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft; + } + + // And remove leading zeroes + return this.strip(); + }; + BN.prototype.notn = function notn(width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn(bit, val) { + assert(typeof bit === 'number' && bit >= 0); + var off = bit / 26 | 0; + var wbit = bit % 26; + this._expand(off + 1); + if (val) { + this.words[off] = this.words[off] | 1 << wbit; + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd(num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add(num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + if (this.length > num.length) return this.clone().iadd(num); + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub(num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + this.length = Math.max(this.length, i); + if (a !== this) { + this.negative = 1; + } + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub(num) { + return this.clone().isub(num); + }; + function smallMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + var len = self.length + num.length | 0; + out.length = len; + len = len - 1 | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + var carry = r / 0x4000000 | 0; + out.words[0] = lo; + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += r / 0x4000000 | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo(self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = mid + Math.imul(ah0, bl0) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = mid + Math.imul(ah1, bl0) | 0; + hi = Math.imul(ah1, bh0); + lo = lo + Math.imul(al0, bl1) | 0; + mid = mid + Math.imul(al0, bh1) | 0; + mid = mid + Math.imul(ah0, bl1) | 0; + hi = hi + Math.imul(ah0, bh1) | 0; + var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = mid + Math.imul(ah2, bl0) | 0; + hi = Math.imul(ah2, bh0); + lo = lo + Math.imul(al1, bl1) | 0; + mid = mid + Math.imul(al1, bh1) | 0; + mid = mid + Math.imul(ah1, bl1) | 0; + hi = hi + Math.imul(ah1, bh1) | 0; + lo = lo + Math.imul(al0, bl2) | 0; + mid = mid + Math.imul(al0, bh2) | 0; + mid = mid + Math.imul(ah0, bl2) | 0; + hi = hi + Math.imul(ah0, bh2) | 0; + var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = mid + Math.imul(ah3, bl0) | 0; + hi = Math.imul(ah3, bh0); + lo = lo + Math.imul(al2, bl1) | 0; + mid = mid + Math.imul(al2, bh1) | 0; + mid = mid + Math.imul(ah2, bl1) | 0; + hi = hi + Math.imul(ah2, bh1) | 0; + lo = lo + Math.imul(al1, bl2) | 0; + mid = mid + Math.imul(al1, bh2) | 0; + mid = mid + Math.imul(ah1, bl2) | 0; + hi = hi + Math.imul(ah1, bh2) | 0; + lo = lo + Math.imul(al0, bl3) | 0; + mid = mid + Math.imul(al0, bh3) | 0; + mid = mid + Math.imul(ah0, bl3) | 0; + hi = hi + Math.imul(ah0, bh3) | 0; + var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = mid + Math.imul(ah4, bl0) | 0; + hi = Math.imul(ah4, bh0); + lo = lo + Math.imul(al3, bl1) | 0; + mid = mid + Math.imul(al3, bh1) | 0; + mid = mid + Math.imul(ah3, bl1) | 0; + hi = hi + Math.imul(ah3, bh1) | 0; + lo = lo + Math.imul(al2, bl2) | 0; + mid = mid + Math.imul(al2, bh2) | 0; + mid = mid + Math.imul(ah2, bl2) | 0; + hi = hi + Math.imul(ah2, bh2) | 0; + lo = lo + Math.imul(al1, bl3) | 0; + mid = mid + Math.imul(al1, bh3) | 0; + mid = mid + Math.imul(ah1, bl3) | 0; + hi = hi + Math.imul(ah1, bh3) | 0; + lo = lo + Math.imul(al0, bl4) | 0; + mid = mid + Math.imul(al0, bh4) | 0; + mid = mid + Math.imul(ah0, bl4) | 0; + hi = hi + Math.imul(ah0, bh4) | 0; + var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = mid + Math.imul(ah5, bl0) | 0; + hi = Math.imul(ah5, bh0); + lo = lo + Math.imul(al4, bl1) | 0; + mid = mid + Math.imul(al4, bh1) | 0; + mid = mid + Math.imul(ah4, bl1) | 0; + hi = hi + Math.imul(ah4, bh1) | 0; + lo = lo + Math.imul(al3, bl2) | 0; + mid = mid + Math.imul(al3, bh2) | 0; + mid = mid + Math.imul(ah3, bl2) | 0; + hi = hi + Math.imul(ah3, bh2) | 0; + lo = lo + Math.imul(al2, bl3) | 0; + mid = mid + Math.imul(al2, bh3) | 0; + mid = mid + Math.imul(ah2, bl3) | 0; + hi = hi + Math.imul(ah2, bh3) | 0; + lo = lo + Math.imul(al1, bl4) | 0; + mid = mid + Math.imul(al1, bh4) | 0; + mid = mid + Math.imul(ah1, bl4) | 0; + hi = hi + Math.imul(ah1, bh4) | 0; + lo = lo + Math.imul(al0, bl5) | 0; + mid = mid + Math.imul(al0, bh5) | 0; + mid = mid + Math.imul(ah0, bl5) | 0; + hi = hi + Math.imul(ah0, bh5) | 0; + var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = mid + Math.imul(ah6, bl0) | 0; + hi = Math.imul(ah6, bh0); + lo = lo + Math.imul(al5, bl1) | 0; + mid = mid + Math.imul(al5, bh1) | 0; + mid = mid + Math.imul(ah5, bl1) | 0; + hi = hi + Math.imul(ah5, bh1) | 0; + lo = lo + Math.imul(al4, bl2) | 0; + mid = mid + Math.imul(al4, bh2) | 0; + mid = mid + Math.imul(ah4, bl2) | 0; + hi = hi + Math.imul(ah4, bh2) | 0; + lo = lo + Math.imul(al3, bl3) | 0; + mid = mid + Math.imul(al3, bh3) | 0; + mid = mid + Math.imul(ah3, bl3) | 0; + hi = hi + Math.imul(ah3, bh3) | 0; + lo = lo + Math.imul(al2, bl4) | 0; + mid = mid + Math.imul(al2, bh4) | 0; + mid = mid + Math.imul(ah2, bl4) | 0; + hi = hi + Math.imul(ah2, bh4) | 0; + lo = lo + Math.imul(al1, bl5) | 0; + mid = mid + Math.imul(al1, bh5) | 0; + mid = mid + Math.imul(ah1, bl5) | 0; + hi = hi + Math.imul(ah1, bh5) | 0; + lo = lo + Math.imul(al0, bl6) | 0; + mid = mid + Math.imul(al0, bh6) | 0; + mid = mid + Math.imul(ah0, bl6) | 0; + hi = hi + Math.imul(ah0, bh6) | 0; + var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = mid + Math.imul(ah7, bl0) | 0; + hi = Math.imul(ah7, bh0); + lo = lo + Math.imul(al6, bl1) | 0; + mid = mid + Math.imul(al6, bh1) | 0; + mid = mid + Math.imul(ah6, bl1) | 0; + hi = hi + Math.imul(ah6, bh1) | 0; + lo = lo + Math.imul(al5, bl2) | 0; + mid = mid + Math.imul(al5, bh2) | 0; + mid = mid + Math.imul(ah5, bl2) | 0; + hi = hi + Math.imul(ah5, bh2) | 0; + lo = lo + Math.imul(al4, bl3) | 0; + mid = mid + Math.imul(al4, bh3) | 0; + mid = mid + Math.imul(ah4, bl3) | 0; + hi = hi + Math.imul(ah4, bh3) | 0; + lo = lo + Math.imul(al3, bl4) | 0; + mid = mid + Math.imul(al3, bh4) | 0; + mid = mid + Math.imul(ah3, bl4) | 0; + hi = hi + Math.imul(ah3, bh4) | 0; + lo = lo + Math.imul(al2, bl5) | 0; + mid = mid + Math.imul(al2, bh5) | 0; + mid = mid + Math.imul(ah2, bl5) | 0; + hi = hi + Math.imul(ah2, bh5) | 0; + lo = lo + Math.imul(al1, bl6) | 0; + mid = mid + Math.imul(al1, bh6) | 0; + mid = mid + Math.imul(ah1, bl6) | 0; + hi = hi + Math.imul(ah1, bh6) | 0; + lo = lo + Math.imul(al0, bl7) | 0; + mid = mid + Math.imul(al0, bh7) | 0; + mid = mid + Math.imul(ah0, bl7) | 0; + hi = hi + Math.imul(ah0, bh7) | 0; + var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = mid + Math.imul(ah8, bl0) | 0; + hi = Math.imul(ah8, bh0); + lo = lo + Math.imul(al7, bl1) | 0; + mid = mid + Math.imul(al7, bh1) | 0; + mid = mid + Math.imul(ah7, bl1) | 0; + hi = hi + Math.imul(ah7, bh1) | 0; + lo = lo + Math.imul(al6, bl2) | 0; + mid = mid + Math.imul(al6, bh2) | 0; + mid = mid + Math.imul(ah6, bl2) | 0; + hi = hi + Math.imul(ah6, bh2) | 0; + lo = lo + Math.imul(al5, bl3) | 0; + mid = mid + Math.imul(al5, bh3) | 0; + mid = mid + Math.imul(ah5, bl3) | 0; + hi = hi + Math.imul(ah5, bh3) | 0; + lo = lo + Math.imul(al4, bl4) | 0; + mid = mid + Math.imul(al4, bh4) | 0; + mid = mid + Math.imul(ah4, bl4) | 0; + hi = hi + Math.imul(ah4, bh4) | 0; + lo = lo + Math.imul(al3, bl5) | 0; + mid = mid + Math.imul(al3, bh5) | 0; + mid = mid + Math.imul(ah3, bl5) | 0; + hi = hi + Math.imul(ah3, bh5) | 0; + lo = lo + Math.imul(al2, bl6) | 0; + mid = mid + Math.imul(al2, bh6) | 0; + mid = mid + Math.imul(ah2, bl6) | 0; + hi = hi + Math.imul(ah2, bh6) | 0; + lo = lo + Math.imul(al1, bl7) | 0; + mid = mid + Math.imul(al1, bh7) | 0; + mid = mid + Math.imul(ah1, bl7) | 0; + hi = hi + Math.imul(ah1, bh7) | 0; + lo = lo + Math.imul(al0, bl8) | 0; + mid = mid + Math.imul(al0, bh8) | 0; + mid = mid + Math.imul(ah0, bl8) | 0; + hi = hi + Math.imul(ah0, bh8) | 0; + var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = mid + Math.imul(ah9, bl0) | 0; + hi = Math.imul(ah9, bh0); + lo = lo + Math.imul(al8, bl1) | 0; + mid = mid + Math.imul(al8, bh1) | 0; + mid = mid + Math.imul(ah8, bl1) | 0; + hi = hi + Math.imul(ah8, bh1) | 0; + lo = lo + Math.imul(al7, bl2) | 0; + mid = mid + Math.imul(al7, bh2) | 0; + mid = mid + Math.imul(ah7, bl2) | 0; + hi = hi + Math.imul(ah7, bh2) | 0; + lo = lo + Math.imul(al6, bl3) | 0; + mid = mid + Math.imul(al6, bh3) | 0; + mid = mid + Math.imul(ah6, bl3) | 0; + hi = hi + Math.imul(ah6, bh3) | 0; + lo = lo + Math.imul(al5, bl4) | 0; + mid = mid + Math.imul(al5, bh4) | 0; + mid = mid + Math.imul(ah5, bl4) | 0; + hi = hi + Math.imul(ah5, bh4) | 0; + lo = lo + Math.imul(al4, bl5) | 0; + mid = mid + Math.imul(al4, bh5) | 0; + mid = mid + Math.imul(ah4, bl5) | 0; + hi = hi + Math.imul(ah4, bh5) | 0; + lo = lo + Math.imul(al3, bl6) | 0; + mid = mid + Math.imul(al3, bh6) | 0; + mid = mid + Math.imul(ah3, bl6) | 0; + hi = hi + Math.imul(ah3, bh6) | 0; + lo = lo + Math.imul(al2, bl7) | 0; + mid = mid + Math.imul(al2, bh7) | 0; + mid = mid + Math.imul(ah2, bl7) | 0; + hi = hi + Math.imul(ah2, bh7) | 0; + lo = lo + Math.imul(al1, bl8) | 0; + mid = mid + Math.imul(al1, bh8) | 0; + mid = mid + Math.imul(ah1, bl8) | 0; + hi = hi + Math.imul(ah1, bh8) | 0; + lo = lo + Math.imul(al0, bl9) | 0; + mid = mid + Math.imul(al0, bh9) | 0; + mid = mid + Math.imul(ah0, bl9) | 0; + hi = hi + Math.imul(ah0, bh9) | 0; + var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = mid + Math.imul(ah9, bl1) | 0; + hi = Math.imul(ah9, bh1); + lo = lo + Math.imul(al8, bl2) | 0; + mid = mid + Math.imul(al8, bh2) | 0; + mid = mid + Math.imul(ah8, bl2) | 0; + hi = hi + Math.imul(ah8, bh2) | 0; + lo = lo + Math.imul(al7, bl3) | 0; + mid = mid + Math.imul(al7, bh3) | 0; + mid = mid + Math.imul(ah7, bl3) | 0; + hi = hi + Math.imul(ah7, bh3) | 0; + lo = lo + Math.imul(al6, bl4) | 0; + mid = mid + Math.imul(al6, bh4) | 0; + mid = mid + Math.imul(ah6, bl4) | 0; + hi = hi + Math.imul(ah6, bh4) | 0; + lo = lo + Math.imul(al5, bl5) | 0; + mid = mid + Math.imul(al5, bh5) | 0; + mid = mid + Math.imul(ah5, bl5) | 0; + hi = hi + Math.imul(ah5, bh5) | 0; + lo = lo + Math.imul(al4, bl6) | 0; + mid = mid + Math.imul(al4, bh6) | 0; + mid = mid + Math.imul(ah4, bl6) | 0; + hi = hi + Math.imul(ah4, bh6) | 0; + lo = lo + Math.imul(al3, bl7) | 0; + mid = mid + Math.imul(al3, bh7) | 0; + mid = mid + Math.imul(ah3, bl7) | 0; + hi = hi + Math.imul(ah3, bh7) | 0; + lo = lo + Math.imul(al2, bl8) | 0; + mid = mid + Math.imul(al2, bh8) | 0; + mid = mid + Math.imul(ah2, bl8) | 0; + hi = hi + Math.imul(ah2, bh8) | 0; + lo = lo + Math.imul(al1, bl9) | 0; + mid = mid + Math.imul(al1, bh9) | 0; + mid = mid + Math.imul(ah1, bl9) | 0; + hi = hi + Math.imul(ah1, bh9) | 0; + var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = mid + Math.imul(ah9, bl2) | 0; + hi = Math.imul(ah9, bh2); + lo = lo + Math.imul(al8, bl3) | 0; + mid = mid + Math.imul(al8, bh3) | 0; + mid = mid + Math.imul(ah8, bl3) | 0; + hi = hi + Math.imul(ah8, bh3) | 0; + lo = lo + Math.imul(al7, bl4) | 0; + mid = mid + Math.imul(al7, bh4) | 0; + mid = mid + Math.imul(ah7, bl4) | 0; + hi = hi + Math.imul(ah7, bh4) | 0; + lo = lo + Math.imul(al6, bl5) | 0; + mid = mid + Math.imul(al6, bh5) | 0; + mid = mid + Math.imul(ah6, bl5) | 0; + hi = hi + Math.imul(ah6, bh5) | 0; + lo = lo + Math.imul(al5, bl6) | 0; + mid = mid + Math.imul(al5, bh6) | 0; + mid = mid + Math.imul(ah5, bl6) | 0; + hi = hi + Math.imul(ah5, bh6) | 0; + lo = lo + Math.imul(al4, bl7) | 0; + mid = mid + Math.imul(al4, bh7) | 0; + mid = mid + Math.imul(ah4, bl7) | 0; + hi = hi + Math.imul(ah4, bh7) | 0; + lo = lo + Math.imul(al3, bl8) | 0; + mid = mid + Math.imul(al3, bh8) | 0; + mid = mid + Math.imul(ah3, bl8) | 0; + hi = hi + Math.imul(ah3, bh8) | 0; + lo = lo + Math.imul(al2, bl9) | 0; + mid = mid + Math.imul(al2, bh9) | 0; + mid = mid + Math.imul(ah2, bl9) | 0; + hi = hi + Math.imul(ah2, bh9) | 0; + var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = mid + Math.imul(ah9, bl3) | 0; + hi = Math.imul(ah9, bh3); + lo = lo + Math.imul(al8, bl4) | 0; + mid = mid + Math.imul(al8, bh4) | 0; + mid = mid + Math.imul(ah8, bl4) | 0; + hi = hi + Math.imul(ah8, bh4) | 0; + lo = lo + Math.imul(al7, bl5) | 0; + mid = mid + Math.imul(al7, bh5) | 0; + mid = mid + Math.imul(ah7, bl5) | 0; + hi = hi + Math.imul(ah7, bh5) | 0; + lo = lo + Math.imul(al6, bl6) | 0; + mid = mid + Math.imul(al6, bh6) | 0; + mid = mid + Math.imul(ah6, bl6) | 0; + hi = hi + Math.imul(ah6, bh6) | 0; + lo = lo + Math.imul(al5, bl7) | 0; + mid = mid + Math.imul(al5, bh7) | 0; + mid = mid + Math.imul(ah5, bl7) | 0; + hi = hi + Math.imul(ah5, bh7) | 0; + lo = lo + Math.imul(al4, bl8) | 0; + mid = mid + Math.imul(al4, bh8) | 0; + mid = mid + Math.imul(ah4, bl8) | 0; + hi = hi + Math.imul(ah4, bh8) | 0; + lo = lo + Math.imul(al3, bl9) | 0; + mid = mid + Math.imul(al3, bh9) | 0; + mid = mid + Math.imul(ah3, bl9) | 0; + hi = hi + Math.imul(ah3, bh9) | 0; + var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = mid + Math.imul(ah9, bl4) | 0; + hi = Math.imul(ah9, bh4); + lo = lo + Math.imul(al8, bl5) | 0; + mid = mid + Math.imul(al8, bh5) | 0; + mid = mid + Math.imul(ah8, bl5) | 0; + hi = hi + Math.imul(ah8, bh5) | 0; + lo = lo + Math.imul(al7, bl6) | 0; + mid = mid + Math.imul(al7, bh6) | 0; + mid = mid + Math.imul(ah7, bl6) | 0; + hi = hi + Math.imul(ah7, bh6) | 0; + lo = lo + Math.imul(al6, bl7) | 0; + mid = mid + Math.imul(al6, bh7) | 0; + mid = mid + Math.imul(ah6, bl7) | 0; + hi = hi + Math.imul(ah6, bh7) | 0; + lo = lo + Math.imul(al5, bl8) | 0; + mid = mid + Math.imul(al5, bh8) | 0; + mid = mid + Math.imul(ah5, bl8) | 0; + hi = hi + Math.imul(ah5, bh8) | 0; + lo = lo + Math.imul(al4, bl9) | 0; + mid = mid + Math.imul(al4, bh9) | 0; + mid = mid + Math.imul(ah4, bl9) | 0; + hi = hi + Math.imul(ah4, bh9) | 0; + var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = mid + Math.imul(ah9, bl5) | 0; + hi = Math.imul(ah9, bh5); + lo = lo + Math.imul(al8, bl6) | 0; + mid = mid + Math.imul(al8, bh6) | 0; + mid = mid + Math.imul(ah8, bl6) | 0; + hi = hi + Math.imul(ah8, bh6) | 0; + lo = lo + Math.imul(al7, bl7) | 0; + mid = mid + Math.imul(al7, bh7) | 0; + mid = mid + Math.imul(ah7, bl7) | 0; + hi = hi + Math.imul(ah7, bh7) | 0; + lo = lo + Math.imul(al6, bl8) | 0; + mid = mid + Math.imul(al6, bh8) | 0; + mid = mid + Math.imul(ah6, bl8) | 0; + hi = hi + Math.imul(ah6, bh8) | 0; + lo = lo + Math.imul(al5, bl9) | 0; + mid = mid + Math.imul(al5, bh9) | 0; + mid = mid + Math.imul(ah5, bl9) | 0; + hi = hi + Math.imul(ah5, bh9) | 0; + var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = mid + Math.imul(ah9, bl6) | 0; + hi = Math.imul(ah9, bh6); + lo = lo + Math.imul(al8, bl7) | 0; + mid = mid + Math.imul(al8, bh7) | 0; + mid = mid + Math.imul(ah8, bl7) | 0; + hi = hi + Math.imul(ah8, bh7) | 0; + lo = lo + Math.imul(al7, bl8) | 0; + mid = mid + Math.imul(al7, bh8) | 0; + mid = mid + Math.imul(ah7, bl8) | 0; + hi = hi + Math.imul(ah7, bh8) | 0; + lo = lo + Math.imul(al6, bl9) | 0; + mid = mid + Math.imul(al6, bh9) | 0; + mid = mid + Math.imul(ah6, bl9) | 0; + hi = hi + Math.imul(ah6, bh9) | 0; + var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = mid + Math.imul(ah9, bl7) | 0; + hi = Math.imul(ah9, bh7); + lo = lo + Math.imul(al8, bl8) | 0; + mid = mid + Math.imul(al8, bh8) | 0; + mid = mid + Math.imul(ah8, bl8) | 0; + hi = hi + Math.imul(ah8, bh8) | 0; + lo = lo + Math.imul(al7, bl9) | 0; + mid = mid + Math.imul(al7, bh9) | 0; + mid = mid + Math.imul(ah7, bl9) | 0; + hi = hi + Math.imul(ah7, bh9) | 0; + var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = mid + Math.imul(ah9, bl8) | 0; + hi = Math.imul(ah9, bh8); + lo = lo + Math.imul(al8, bl9) | 0; + mid = mid + Math.imul(al8, bh9) | 0; + mid = mid + Math.imul(ah8, bl9) | 0; + hi = hi + Math.imul(ah8, bh9) | 0; + var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = mid + Math.imul(ah9, bl9) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + function bigMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + ncarry = ncarry + (r / 0x4000000 | 0) | 0; + lo = lo + rword | 0; + rword = lo & 0x3ffffff; + ncarry = ncarry + (lo >>> 26) | 0; + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + return out.strip(); + } + function jumboMulTo(self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + BN.prototype.mulTo = function mulTo(num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM(x, y) { + this.x = x; + this.y = y; + } + FFTM.prototype.makeRBT = function makeRBT(N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin(x, l, N) { + if (x === 0 || x === N - 1) return x; + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << l - i - 1; + x >>= 1; + } + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + var rx = rtwdf_ * ro - itwdf_ * io; + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + FFTM.prototype.guessLen13b = function guessLen13b(n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + return 1 << i + 1 + odd; + }; + FFTM.prototype.conjugate = function conjugate(rws, iws, N) { + if (N <= 1) return; + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + t = iws[i]; + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + FFTM.prototype.normalize13b = function normalize13b(ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry; + ws[i] = w & 0x3ffffff; + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + return ws; + }; + FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + rws[2 * i] = carry & 0x1fff; + carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; + carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + FFTM.prototype.stub = function stub(N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + return ph; + }; + FFTM.prototype.mulp = function mulp(x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + var rbt = this.makeRBT(N); + var _ = this.stub(N); + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + var rmws = out.words; + rmws.length = N; + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul(num) { + return this.clone().mulTo(num, this); + }; + BN.prototype.imuln = function imuln(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += w / 0x4000000 | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + BN.prototype.muln = function muln(num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr() { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr() { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow(num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + res = res.mul(q); + } + } + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = 0x3ffffff >>> 26 - r << 26 - r; + var i; + if (r !== 0) { + var carry = 0; + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = (this.words[i] | 0) - newCarry << r; + this.words[i] = c | carry; + carry = newCarry >>> 26 - r; + } + if (carry) { + this.words[i] = carry; + this.length++; + } + } + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + this.length += s; + } + return this.strip(); + }; + BN.prototype.ishln = function ishln(bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn(bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - hint % 26) / 26; + } else { + h = 0; + } + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + var maskedWords = extended; + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = carry << 26 - r | word >>> r; + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + return this.strip(); + }; + BN.prototype.ishrn = function ishrn(bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln(bits) { + return this.clone().ishln(bits); + }; + BN.prototype.ushln = function ushln(bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn(bits) { + return this.clone().ishrn(bits); + }; + BN.prototype.ushrn = function ushrn(bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn(bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + assert(this.negative === 0, 'imaskn works only with positive numbers'); + if (this.length <= s) { + return this; + } + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + if (r !== 0) { + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + this.words[this.length - 1] &= mask; + } + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn(bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + BN.prototype._iaddn = function _iaddn(num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + this.words[0] -= num; + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + return this.strip(); + }; + BN.prototype.addn = function addn(num) { + return this.clone().iaddn(num); + }; + BN.prototype.subn = function subn(num) { + return this.clone().isubn(num); + }; + BN.prototype.iabs = function iabs() { + this.negative = 0; + return this; + }; + BN.prototype.abs = function abs() { + return this.clone().iabs(); + }; + BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) { + var len = num.length + shift; + var i; + this._expand(len); + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - (right / 0x4000000 | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + return this.strip(); + }; + BN.prototype._wordDiv = function _wordDiv(num, mode) { + var shift = this.length - num.length; + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min(qj / bhi | 0, 0x3ffffff); + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod(num, mode, positive) { + assert(!num.isZero()); + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + if (mode !== 'mod') { + div = res.div.neg(); + } + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + return { + div: div, + mod: mod + }; + } + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + if (mode !== 'mod') { + div = res.div.neg(); + } + return { + div: div, + mod: res.mod + }; + } + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div(num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod(num) { + return this.divmod(num, 'mod', false).mod; + }; + BN.prototype.umod = function umod(num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound(num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + BN.prototype.modn = function modn(num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn(num) { + assert(num <= 0x3ffffff); + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = w / num | 0; + carry = w % num; + } + return this.strip(); + }; + BN.prototype.divn = function divn(num) { + return this.clone().idivn(num); + }; + BN.prototype.egcd = function egcd(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var x = this; + var y = p.clone(); + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + var g = 0; + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + var yp = y.clone(); + var xp = x.clone(); + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + A.iushrn(1); + B.iushrn(1); + } + } + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + C.iushrn(1); + D.iushrn(1); + } + } + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var a = this; + var b = p.clone(); + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + var x1 = new BN(1); + var x2 = new BN(0); + var delta = b.clone(); + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + x1.iushrn(1); + } + } + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + x2.iushrn(1); + } + } + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + if (res.cmpn(0) < 0) { + res.iadd(p); + } + return res; + }; + BN.prototype.gcd = function gcd(num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + a.isub(b); + } while (true); + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm(num) { + return this.egcd(num).a.umod(num); + }; + BN.prototype.isEven = function isEven() { + return (this.words[0] & 1) === 0; + }; + BN.prototype.isOdd = function isOdd() { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln(num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn(bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + BN.prototype.isZero = function isZero() { + return this.length === 1 && this.words[0] === 0; + }; + BN.prototype.cmpn = function cmpn(num) { + var negative = num < 0; + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + this.strip(); + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + assert(num <= 0x3ffffff, 'Number is too big'); + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp(num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp(num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + BN.prototype.gtn = function gtn(num) { + return this.cmpn(num) === 1; + }; + BN.prototype.gt = function gt(num) { + return this.cmp(num) === 1; + }; + BN.prototype.gten = function gten(num) { + return this.cmpn(num) >= 0; + }; + BN.prototype.gte = function gte(num) { + return this.cmp(num) >= 0; + }; + BN.prototype.ltn = function ltn(num) { + return this.cmpn(num) === -1; + }; + BN.prototype.lt = function lt(num) { + return this.cmp(num) === -1; + }; + BN.prototype.lten = function lten(num) { + return this.cmpn(num) <= 0; + }; + BN.prototype.lte = function lte(num) { + return this.cmp(num) <= 0; + }; + BN.prototype.eqn = function eqn(num) { + return this.cmpn(num) === 0; + }; + BN.prototype.eq = function eq(num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red(num) { + return new Red(num); + }; + BN.prototype.toRed = function toRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + BN.prototype.fromRed = function fromRed() { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + BN.prototype._forceRed = function _forceRed(ctx) { + this.red = ctx; + return this; + }; + BN.prototype.forceRed = function forceRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + BN.prototype.redAdd = function redAdd(num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + BN.prototype.redIAdd = function redIAdd(num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + BN.prototype.redSub = function redSub(num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + BN.prototype.redISub = function redISub(num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + BN.prototype.redShl = function redShl(num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + BN.prototype.redMul = function redMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + BN.prototype.redIMul = function redIMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + BN.prototype.redSqr = function redSqr() { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + BN.prototype.redISqr = function redISqr() { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt() { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + BN.prototype.redInvm = function redInvm() { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg() { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + BN.prototype.redPow = function redPow(num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime(name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + this.tmp = this._tmp(); + } + MPrime.prototype._tmp = function _tmp() { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + MPrime.prototype.ireduce = function ireduce(num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is BN v4 instance + r.strip(); + } else { + // r is BN v5 instance + r._strip(); + } + } + return r; + }; + MPrime.prototype.split = function split(input, out) { + input.iushrn(this.n, 0, out); + }; + MPrime.prototype.imulK = function imulK(num) { + return num.imul(this.k); + }; + function K256() { + MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + K256.prototype.split = function split(input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = (next & mask) << 4 | prev >>> 22; + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + K256.prototype.imulK = function imulK(num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + (lo / 0x4000000 | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + function P224() { + MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + function P192() { + MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + function P25519() { + // 2 ^ 255 - 19 + MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + P25519.prototype.imulK = function imulK(num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime(name) { + // Cached version of prime + if (primes[name]) return primes[name]; + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + return prime; + }; + + // + // Base reduction engine + // + function Red(m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + Red.prototype._verify1 = function _verify1(a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + Red.prototype._verify2 = function _verify2(a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, 'red works only with red numbers'); + }; + Red.prototype.imod = function imod(a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + Red.prototype.neg = function neg(a) { + if (a.isZero()) { + return a.clone(); + } + return this.m.sub(a)._forceRed(this); + }; + Red.prototype.add = function add(a, b) { + this._verify2(a, b); + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + Red.prototype.iadd = function iadd(a, b) { + this._verify2(a, b); + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + Red.prototype.sub = function sub(a, b) { + this._verify2(a, b); + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + Red.prototype.isub = function isub(a, b) { + this._verify2(a, b); + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + Red.prototype.shl = function shl(a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + Red.prototype.imul = function imul(a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + Red.prototype.mul = function mul(a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + Red.prototype.isqr = function isqr(a) { + return this.imul(a, a.clone()); + }; + Red.prototype.sqr = function sqr(a) { + return this.mul(a, a); + }; + Red.prototype.sqrt = function sqrt(a) { + if (a.isZero()) return a.clone(); + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + return r; + }; + Red.prototype.invm = function invm(a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + Red.prototype.pow = function pow(a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = word >> j & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + return res; + }; + Red.prototype.convertTo = function convertTo(num) { + var r = num.umod(this.m); + return r === num ? r.clone() : r; + }; + Red.prototype.convertFrom = function convertFrom(num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont(num) { + return new Mont(num); + }; + function Mont(m) { + Red.call(this, m); + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - this.shift % 26; + } + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + Mont.prototype.convertTo = function convertTo(num) { + return this.imod(num.ushln(this.shift)); + }; + Mont.prototype.convertFrom = function convertFrom(num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + Mont.prototype.imul = function imul(a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + return res._forceRed(this); + }; + Mont.prototype.mul = function mul(a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + return res._forceRed(this); + }; + Mont.prototype.invm = function invm(a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})(typeof module === 'undefined' || module, void 0); + +},{"buffer":188}],185:[function(require,module,exports){ +'use strict'; + +exports.byteLength = byteLength; +exports.toByteArray = toByteArray; +exports.fromByteArray = fromByteArray; +var lookup = []; +var revLookup = []; +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i]; + revLookup[code.charCodeAt(i)] = i; +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62; +revLookup['_'.charCodeAt(0)] = 63; +function getLens(b64) { + var len = b64.length; + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4'); + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('='); + if (validLen === -1) validLen = len; + var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4; + return [validLen, placeHoldersLen]; +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength(b64) { + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; +} +function _byteLength(b64, validLen, placeHoldersLen) { + return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen; +} +function toByteArray(b64) { + var tmp; + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); + var curByte = 0; + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 ? validLen - 4 : validLen; + var i; + for (i = 0; i < len; i += 4) { + tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)]; + arr[curByte++] = tmp >> 16 & 0xFF; + arr[curByte++] = tmp >> 8 & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + if (placeHoldersLen === 2) { + tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4; + arr[curByte++] = tmp & 0xFF; + } + if (placeHoldersLen === 1) { + tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2; + arr[curByte++] = tmp >> 8 & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + return arr; +} +function tripletToBase64(num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]; +} +function encodeChunk(uint8, start, end) { + var tmp; + var output = []; + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF); + output.push(tripletToBase64(tmp)); + } + return output.join(''); +} +function fromByteArray(uint8) { + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength)); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1]; + parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '=='); + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1]; + parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '='); + } + return parts.join(''); +} + +},{}],186:[function(require,module,exports){ +"use strict"; + +(function (module, exports) { + 'use strict'; + + // Utils + function assert(val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN(number, base, endian) { + if (BN.isBN(number)) { + return number; + } + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + BN.BN = BN; + BN.wordSize = 26; + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = require('buffer').Buffer; + } + } catch (e) {} + BN.isBN = function isBN(num) { + if (num instanceof BN) { + return true; + } + return num !== null && typeof num === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + BN.max = function max(left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + BN.min = function min(left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + BN.prototype._init = function init(number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); + } + } + } + }; + BN.prototype._initNumber = function _initNumber(number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [number & 0x3ffffff]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1]; + this.length = 3; + } + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + BN.prototype._initArray = function _initArray(number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [0]; + this.length = 1; + return this; + } + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | number[i - 1] << 8 | number[i - 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | number[i + 1] << 8 | number[i + 2] << 16; + this.words[j] |= w << off & 0x3ffffff; + this.words[j + 1] = w >>> 26 - off & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this._strip(); + }; + function parseHex4Bits(string, index) { + var c = string.charCodeAt(index); + // '0' - '9' + if (c >= 48 && c <= 57) { + return c - 48; + // 'A' - 'F' + } else if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + } else { + assert(false, 'Invalid character in ' + string); + } + } + function parseHexByte(string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + BN.prototype._parseHex = function _parseHex(number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } + this._strip(); + }; + function parseBase(str, start, end, mul) { + var r = 0; + var b = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + r *= mul; + + // 'a' + if (c >= 49) { + b = c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + b = c - 17 + 0xa; + + // '0' - '9' + } else { + b = c; + } + assert(c >= 0 && b < mul, 'Invalid character'); + r += b; + } + return r; + } + BN.prototype._parseBase = function _parseBase(number, base, start) { + // Initialize as zero + this.words = [0]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = limbPow / base | 0; + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + for (i = 0; i < mod; i++) { + pow *= base; + } + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + this._strip(); + }; + BN.prototype.copy = function copy(dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + function move(dest, src) { + dest.words = src.words; + dest.length = src.length; + dest.negative = src.negative; + dest.red = src.red; + } + BN.prototype._move = function _move(dest) { + move(dest, this); + }; + BN.prototype.clone = function clone() { + var r = new BN(null); + this.copy(r); + return r; + }; + BN.prototype._expand = function _expand(size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype._strip = function strip() { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + BN.prototype._normSign = function _normSign() { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + // Check Symbol.for because not everywhere where Symbol defined + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility + if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') { + try { + BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect; + } catch (e) { + BN.prototype.inspect = inspect; + } + } else { + BN.prototype.inspect = inspect; + } + function inspect() { + return (this.red ? ''; + } + + /* + var zeros = []; + var groupSizes = []; + var groupBases = []; + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + */ + + var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000']; + var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]; + var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176]; + BN.prototype.toString = function toString(base, padding) { + base = base || 10; + padding = padding | 0 || 1; + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = ((w << off | carry) & 0xffffff).toString(16); + carry = w >>> 24 - off & 0xffffff; + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modrn(groupBase).toString(base); + c = c.idivn(groupBase); + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + assert(false, 'Base should be between 2 and 36'); + }; + BN.prototype.toNumber = function toNumber() { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + this.words[1] * 0x4000000; + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return this.negative !== 0 ? -ret : ret; + }; + BN.prototype.toJSON = function toJSON() { + return this.toString(16, 2); + }; + if (Buffer) { + BN.prototype.toBuffer = function toBuffer(endian, length) { + return this.toArrayLike(Buffer, endian, length); + }; + } + BN.prototype.toArray = function toArray(endian, length) { + return this.toArrayLike(Array, endian, length); + }; + var allocate = function allocate(ArrayType, size) { + if (ArrayType.allocUnsafe) { + return ArrayType.allocUnsafe(size); + } + return new ArrayType(size); + }; + BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) { + this._strip(); + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + var res = allocate(ArrayType, reqLength); + var postfix = endian === 'le' ? 'LE' : 'BE'; + this['_toArrayLike' + postfix](res, byteLength); + return res; + }; + BN.prototype._toArrayLikeLE = function _toArrayLikeLE(res, byteLength) { + var position = 0; + var carry = 0; + for (var i = 0, shift = 0; i < this.length; i++) { + var word = this.words[i] << shift | carry; + res[position++] = word & 0xff; + if (position < res.length) { + res[position++] = word >> 8 & 0xff; + } + if (position < res.length) { + res[position++] = word >> 16 & 0xff; + } + if (shift === 6) { + if (position < res.length) { + res[position++] = word >> 24 & 0xff; + } + carry = 0; + shift = 0; + } else { + carry = word >>> 24; + shift += 2; + } + } + if (position < res.length) { + res[position++] = carry; + while (position < res.length) { + res[position++] = 0; + } + } + }; + BN.prototype._toArrayLikeBE = function _toArrayLikeBE(res, byteLength) { + var position = res.length - 1; + var carry = 0; + for (var i = 0, shift = 0; i < this.length; i++) { + var word = this.words[i] << shift | carry; + res[position--] = word & 0xff; + if (position >= 0) { + res[position--] = word >> 8 & 0xff; + } + if (position >= 0) { + res[position--] = word >> 16 & 0xff; + } + if (shift === 6) { + if (position >= 0) { + res[position--] = word >> 24 & 0xff; + } + carry = 0; + shift = 0; + } else { + carry = word >>> 24; + shift += 2; + } + } + if (position >= 0) { + res[position--] = carry; + while (position >= 0) { + res[position--] = 0; + } + } + }; + if (Math.clz32) { + BN.prototype._countBits = function _countBits(w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits(w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + BN.prototype._zeroBits = function _zeroBits(w) { + // Short-cut + if (w === 0) return 26; + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength() { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + function toBitArray(num) { + var w = new Array(num.bitLength()); + for (var bit = 0; bit < w.length; bit++) { + var off = bit / 26 | 0; + var wbit = bit % 26; + w[bit] = num.words[off] >>> wbit & 0x01; + } + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits() { + if (this.isZero()) return 0; + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + BN.prototype.byteLength = function byteLength() { + return Math.ceil(this.bitLength() / 8); + }; + BN.prototype.toTwos = function toTwos(width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + BN.prototype.fromTwos = function fromTwos(width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + BN.prototype.isNeg = function isNeg() { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg() { + return this.clone().ineg(); + }; + BN.prototype.ineg = function ineg() { + if (!this.isZero()) { + this.negative ^= 1; + } + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor(num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + return this._strip(); + }; + BN.prototype.ior = function ior(num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or(num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + BN.prototype.uor = function uor(num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand(num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + this.length = b.length; + return this._strip(); + }; + BN.prototype.iand = function iand(num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and(num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + BN.prototype.uand = function uand(num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor(num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + this.length = a.length; + return this._strip(); + }; + BN.prototype.ixor = function ixor(num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor(num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + BN.prototype.uxor = function uxor(num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn(width) { + assert(typeof width === 'number' && width >= 0); + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft; + } + + // And remove leading zeroes + return this._strip(); + }; + BN.prototype.notn = function notn(width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn(bit, val) { + assert(typeof bit === 'number' && bit >= 0); + var off = bit / 26 | 0; + var wbit = bit % 26; + this._expand(off + 1); + if (val) { + this.words[off] = this.words[off] | 1 << wbit; + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + return this._strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd(num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add(num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + if (this.length > num.length) return this.clone().iadd(num); + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub(num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + this.length = Math.max(this.length, i); + if (a !== this) { + this.negative = 1; + } + return this._strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub(num) { + return this.clone().isub(num); + }; + function smallMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + var len = self.length + num.length | 0; + out.length = len; + len = len - 1 | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + var carry = r / 0x4000000 | 0; + out.words[0] = lo; + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += r / 0x4000000 | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + return out._strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo(self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = mid + Math.imul(ah0, bl0) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = mid + Math.imul(ah1, bl0) | 0; + hi = Math.imul(ah1, bh0); + lo = lo + Math.imul(al0, bl1) | 0; + mid = mid + Math.imul(al0, bh1) | 0; + mid = mid + Math.imul(ah0, bl1) | 0; + hi = hi + Math.imul(ah0, bh1) | 0; + var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = mid + Math.imul(ah2, bl0) | 0; + hi = Math.imul(ah2, bh0); + lo = lo + Math.imul(al1, bl1) | 0; + mid = mid + Math.imul(al1, bh1) | 0; + mid = mid + Math.imul(ah1, bl1) | 0; + hi = hi + Math.imul(ah1, bh1) | 0; + lo = lo + Math.imul(al0, bl2) | 0; + mid = mid + Math.imul(al0, bh2) | 0; + mid = mid + Math.imul(ah0, bl2) | 0; + hi = hi + Math.imul(ah0, bh2) | 0; + var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = mid + Math.imul(ah3, bl0) | 0; + hi = Math.imul(ah3, bh0); + lo = lo + Math.imul(al2, bl1) | 0; + mid = mid + Math.imul(al2, bh1) | 0; + mid = mid + Math.imul(ah2, bl1) | 0; + hi = hi + Math.imul(ah2, bh1) | 0; + lo = lo + Math.imul(al1, bl2) | 0; + mid = mid + Math.imul(al1, bh2) | 0; + mid = mid + Math.imul(ah1, bl2) | 0; + hi = hi + Math.imul(ah1, bh2) | 0; + lo = lo + Math.imul(al0, bl3) | 0; + mid = mid + Math.imul(al0, bh3) | 0; + mid = mid + Math.imul(ah0, bl3) | 0; + hi = hi + Math.imul(ah0, bh3) | 0; + var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = mid + Math.imul(ah4, bl0) | 0; + hi = Math.imul(ah4, bh0); + lo = lo + Math.imul(al3, bl1) | 0; + mid = mid + Math.imul(al3, bh1) | 0; + mid = mid + Math.imul(ah3, bl1) | 0; + hi = hi + Math.imul(ah3, bh1) | 0; + lo = lo + Math.imul(al2, bl2) | 0; + mid = mid + Math.imul(al2, bh2) | 0; + mid = mid + Math.imul(ah2, bl2) | 0; + hi = hi + Math.imul(ah2, bh2) | 0; + lo = lo + Math.imul(al1, bl3) | 0; + mid = mid + Math.imul(al1, bh3) | 0; + mid = mid + Math.imul(ah1, bl3) | 0; + hi = hi + Math.imul(ah1, bh3) | 0; + lo = lo + Math.imul(al0, bl4) | 0; + mid = mid + Math.imul(al0, bh4) | 0; + mid = mid + Math.imul(ah0, bl4) | 0; + hi = hi + Math.imul(ah0, bh4) | 0; + var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = mid + Math.imul(ah5, bl0) | 0; + hi = Math.imul(ah5, bh0); + lo = lo + Math.imul(al4, bl1) | 0; + mid = mid + Math.imul(al4, bh1) | 0; + mid = mid + Math.imul(ah4, bl1) | 0; + hi = hi + Math.imul(ah4, bh1) | 0; + lo = lo + Math.imul(al3, bl2) | 0; + mid = mid + Math.imul(al3, bh2) | 0; + mid = mid + Math.imul(ah3, bl2) | 0; + hi = hi + Math.imul(ah3, bh2) | 0; + lo = lo + Math.imul(al2, bl3) | 0; + mid = mid + Math.imul(al2, bh3) | 0; + mid = mid + Math.imul(ah2, bl3) | 0; + hi = hi + Math.imul(ah2, bh3) | 0; + lo = lo + Math.imul(al1, bl4) | 0; + mid = mid + Math.imul(al1, bh4) | 0; + mid = mid + Math.imul(ah1, bl4) | 0; + hi = hi + Math.imul(ah1, bh4) | 0; + lo = lo + Math.imul(al0, bl5) | 0; + mid = mid + Math.imul(al0, bh5) | 0; + mid = mid + Math.imul(ah0, bl5) | 0; + hi = hi + Math.imul(ah0, bh5) | 0; + var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = mid + Math.imul(ah6, bl0) | 0; + hi = Math.imul(ah6, bh0); + lo = lo + Math.imul(al5, bl1) | 0; + mid = mid + Math.imul(al5, bh1) | 0; + mid = mid + Math.imul(ah5, bl1) | 0; + hi = hi + Math.imul(ah5, bh1) | 0; + lo = lo + Math.imul(al4, bl2) | 0; + mid = mid + Math.imul(al4, bh2) | 0; + mid = mid + Math.imul(ah4, bl2) | 0; + hi = hi + Math.imul(ah4, bh2) | 0; + lo = lo + Math.imul(al3, bl3) | 0; + mid = mid + Math.imul(al3, bh3) | 0; + mid = mid + Math.imul(ah3, bl3) | 0; + hi = hi + Math.imul(ah3, bh3) | 0; + lo = lo + Math.imul(al2, bl4) | 0; + mid = mid + Math.imul(al2, bh4) | 0; + mid = mid + Math.imul(ah2, bl4) | 0; + hi = hi + Math.imul(ah2, bh4) | 0; + lo = lo + Math.imul(al1, bl5) | 0; + mid = mid + Math.imul(al1, bh5) | 0; + mid = mid + Math.imul(ah1, bl5) | 0; + hi = hi + Math.imul(ah1, bh5) | 0; + lo = lo + Math.imul(al0, bl6) | 0; + mid = mid + Math.imul(al0, bh6) | 0; + mid = mid + Math.imul(ah0, bl6) | 0; + hi = hi + Math.imul(ah0, bh6) | 0; + var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = mid + Math.imul(ah7, bl0) | 0; + hi = Math.imul(ah7, bh0); + lo = lo + Math.imul(al6, bl1) | 0; + mid = mid + Math.imul(al6, bh1) | 0; + mid = mid + Math.imul(ah6, bl1) | 0; + hi = hi + Math.imul(ah6, bh1) | 0; + lo = lo + Math.imul(al5, bl2) | 0; + mid = mid + Math.imul(al5, bh2) | 0; + mid = mid + Math.imul(ah5, bl2) | 0; + hi = hi + Math.imul(ah5, bh2) | 0; + lo = lo + Math.imul(al4, bl3) | 0; + mid = mid + Math.imul(al4, bh3) | 0; + mid = mid + Math.imul(ah4, bl3) | 0; + hi = hi + Math.imul(ah4, bh3) | 0; + lo = lo + Math.imul(al3, bl4) | 0; + mid = mid + Math.imul(al3, bh4) | 0; + mid = mid + Math.imul(ah3, bl4) | 0; + hi = hi + Math.imul(ah3, bh4) | 0; + lo = lo + Math.imul(al2, bl5) | 0; + mid = mid + Math.imul(al2, bh5) | 0; + mid = mid + Math.imul(ah2, bl5) | 0; + hi = hi + Math.imul(ah2, bh5) | 0; + lo = lo + Math.imul(al1, bl6) | 0; + mid = mid + Math.imul(al1, bh6) | 0; + mid = mid + Math.imul(ah1, bl6) | 0; + hi = hi + Math.imul(ah1, bh6) | 0; + lo = lo + Math.imul(al0, bl7) | 0; + mid = mid + Math.imul(al0, bh7) | 0; + mid = mid + Math.imul(ah0, bl7) | 0; + hi = hi + Math.imul(ah0, bh7) | 0; + var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = mid + Math.imul(ah8, bl0) | 0; + hi = Math.imul(ah8, bh0); + lo = lo + Math.imul(al7, bl1) | 0; + mid = mid + Math.imul(al7, bh1) | 0; + mid = mid + Math.imul(ah7, bl1) | 0; + hi = hi + Math.imul(ah7, bh1) | 0; + lo = lo + Math.imul(al6, bl2) | 0; + mid = mid + Math.imul(al6, bh2) | 0; + mid = mid + Math.imul(ah6, bl2) | 0; + hi = hi + Math.imul(ah6, bh2) | 0; + lo = lo + Math.imul(al5, bl3) | 0; + mid = mid + Math.imul(al5, bh3) | 0; + mid = mid + Math.imul(ah5, bl3) | 0; + hi = hi + Math.imul(ah5, bh3) | 0; + lo = lo + Math.imul(al4, bl4) | 0; + mid = mid + Math.imul(al4, bh4) | 0; + mid = mid + Math.imul(ah4, bl4) | 0; + hi = hi + Math.imul(ah4, bh4) | 0; + lo = lo + Math.imul(al3, bl5) | 0; + mid = mid + Math.imul(al3, bh5) | 0; + mid = mid + Math.imul(ah3, bl5) | 0; + hi = hi + Math.imul(ah3, bh5) | 0; + lo = lo + Math.imul(al2, bl6) | 0; + mid = mid + Math.imul(al2, bh6) | 0; + mid = mid + Math.imul(ah2, bl6) | 0; + hi = hi + Math.imul(ah2, bh6) | 0; + lo = lo + Math.imul(al1, bl7) | 0; + mid = mid + Math.imul(al1, bh7) | 0; + mid = mid + Math.imul(ah1, bl7) | 0; + hi = hi + Math.imul(ah1, bh7) | 0; + lo = lo + Math.imul(al0, bl8) | 0; + mid = mid + Math.imul(al0, bh8) | 0; + mid = mid + Math.imul(ah0, bl8) | 0; + hi = hi + Math.imul(ah0, bh8) | 0; + var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = mid + Math.imul(ah9, bl0) | 0; + hi = Math.imul(ah9, bh0); + lo = lo + Math.imul(al8, bl1) | 0; + mid = mid + Math.imul(al8, bh1) | 0; + mid = mid + Math.imul(ah8, bl1) | 0; + hi = hi + Math.imul(ah8, bh1) | 0; + lo = lo + Math.imul(al7, bl2) | 0; + mid = mid + Math.imul(al7, bh2) | 0; + mid = mid + Math.imul(ah7, bl2) | 0; + hi = hi + Math.imul(ah7, bh2) | 0; + lo = lo + Math.imul(al6, bl3) | 0; + mid = mid + Math.imul(al6, bh3) | 0; + mid = mid + Math.imul(ah6, bl3) | 0; + hi = hi + Math.imul(ah6, bh3) | 0; + lo = lo + Math.imul(al5, bl4) | 0; + mid = mid + Math.imul(al5, bh4) | 0; + mid = mid + Math.imul(ah5, bl4) | 0; + hi = hi + Math.imul(ah5, bh4) | 0; + lo = lo + Math.imul(al4, bl5) | 0; + mid = mid + Math.imul(al4, bh5) | 0; + mid = mid + Math.imul(ah4, bl5) | 0; + hi = hi + Math.imul(ah4, bh5) | 0; + lo = lo + Math.imul(al3, bl6) | 0; + mid = mid + Math.imul(al3, bh6) | 0; + mid = mid + Math.imul(ah3, bl6) | 0; + hi = hi + Math.imul(ah3, bh6) | 0; + lo = lo + Math.imul(al2, bl7) | 0; + mid = mid + Math.imul(al2, bh7) | 0; + mid = mid + Math.imul(ah2, bl7) | 0; + hi = hi + Math.imul(ah2, bh7) | 0; + lo = lo + Math.imul(al1, bl8) | 0; + mid = mid + Math.imul(al1, bh8) | 0; + mid = mid + Math.imul(ah1, bl8) | 0; + hi = hi + Math.imul(ah1, bh8) | 0; + lo = lo + Math.imul(al0, bl9) | 0; + mid = mid + Math.imul(al0, bh9) | 0; + mid = mid + Math.imul(ah0, bl9) | 0; + hi = hi + Math.imul(ah0, bh9) | 0; + var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = mid + Math.imul(ah9, bl1) | 0; + hi = Math.imul(ah9, bh1); + lo = lo + Math.imul(al8, bl2) | 0; + mid = mid + Math.imul(al8, bh2) | 0; + mid = mid + Math.imul(ah8, bl2) | 0; + hi = hi + Math.imul(ah8, bh2) | 0; + lo = lo + Math.imul(al7, bl3) | 0; + mid = mid + Math.imul(al7, bh3) | 0; + mid = mid + Math.imul(ah7, bl3) | 0; + hi = hi + Math.imul(ah7, bh3) | 0; + lo = lo + Math.imul(al6, bl4) | 0; + mid = mid + Math.imul(al6, bh4) | 0; + mid = mid + Math.imul(ah6, bl4) | 0; + hi = hi + Math.imul(ah6, bh4) | 0; + lo = lo + Math.imul(al5, bl5) | 0; + mid = mid + Math.imul(al5, bh5) | 0; + mid = mid + Math.imul(ah5, bl5) | 0; + hi = hi + Math.imul(ah5, bh5) | 0; + lo = lo + Math.imul(al4, bl6) | 0; + mid = mid + Math.imul(al4, bh6) | 0; + mid = mid + Math.imul(ah4, bl6) | 0; + hi = hi + Math.imul(ah4, bh6) | 0; + lo = lo + Math.imul(al3, bl7) | 0; + mid = mid + Math.imul(al3, bh7) | 0; + mid = mid + Math.imul(ah3, bl7) | 0; + hi = hi + Math.imul(ah3, bh7) | 0; + lo = lo + Math.imul(al2, bl8) | 0; + mid = mid + Math.imul(al2, bh8) | 0; + mid = mid + Math.imul(ah2, bl8) | 0; + hi = hi + Math.imul(ah2, bh8) | 0; + lo = lo + Math.imul(al1, bl9) | 0; + mid = mid + Math.imul(al1, bh9) | 0; + mid = mid + Math.imul(ah1, bl9) | 0; + hi = hi + Math.imul(ah1, bh9) | 0; + var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = mid + Math.imul(ah9, bl2) | 0; + hi = Math.imul(ah9, bh2); + lo = lo + Math.imul(al8, bl3) | 0; + mid = mid + Math.imul(al8, bh3) | 0; + mid = mid + Math.imul(ah8, bl3) | 0; + hi = hi + Math.imul(ah8, bh3) | 0; + lo = lo + Math.imul(al7, bl4) | 0; + mid = mid + Math.imul(al7, bh4) | 0; + mid = mid + Math.imul(ah7, bl4) | 0; + hi = hi + Math.imul(ah7, bh4) | 0; + lo = lo + Math.imul(al6, bl5) | 0; + mid = mid + Math.imul(al6, bh5) | 0; + mid = mid + Math.imul(ah6, bl5) | 0; + hi = hi + Math.imul(ah6, bh5) | 0; + lo = lo + Math.imul(al5, bl6) | 0; + mid = mid + Math.imul(al5, bh6) | 0; + mid = mid + Math.imul(ah5, bl6) | 0; + hi = hi + Math.imul(ah5, bh6) | 0; + lo = lo + Math.imul(al4, bl7) | 0; + mid = mid + Math.imul(al4, bh7) | 0; + mid = mid + Math.imul(ah4, bl7) | 0; + hi = hi + Math.imul(ah4, bh7) | 0; + lo = lo + Math.imul(al3, bl8) | 0; + mid = mid + Math.imul(al3, bh8) | 0; + mid = mid + Math.imul(ah3, bl8) | 0; + hi = hi + Math.imul(ah3, bh8) | 0; + lo = lo + Math.imul(al2, bl9) | 0; + mid = mid + Math.imul(al2, bh9) | 0; + mid = mid + Math.imul(ah2, bl9) | 0; + hi = hi + Math.imul(ah2, bh9) | 0; + var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = mid + Math.imul(ah9, bl3) | 0; + hi = Math.imul(ah9, bh3); + lo = lo + Math.imul(al8, bl4) | 0; + mid = mid + Math.imul(al8, bh4) | 0; + mid = mid + Math.imul(ah8, bl4) | 0; + hi = hi + Math.imul(ah8, bh4) | 0; + lo = lo + Math.imul(al7, bl5) | 0; + mid = mid + Math.imul(al7, bh5) | 0; + mid = mid + Math.imul(ah7, bl5) | 0; + hi = hi + Math.imul(ah7, bh5) | 0; + lo = lo + Math.imul(al6, bl6) | 0; + mid = mid + Math.imul(al6, bh6) | 0; + mid = mid + Math.imul(ah6, bl6) | 0; + hi = hi + Math.imul(ah6, bh6) | 0; + lo = lo + Math.imul(al5, bl7) | 0; + mid = mid + Math.imul(al5, bh7) | 0; + mid = mid + Math.imul(ah5, bl7) | 0; + hi = hi + Math.imul(ah5, bh7) | 0; + lo = lo + Math.imul(al4, bl8) | 0; + mid = mid + Math.imul(al4, bh8) | 0; + mid = mid + Math.imul(ah4, bl8) | 0; + hi = hi + Math.imul(ah4, bh8) | 0; + lo = lo + Math.imul(al3, bl9) | 0; + mid = mid + Math.imul(al3, bh9) | 0; + mid = mid + Math.imul(ah3, bl9) | 0; + hi = hi + Math.imul(ah3, bh9) | 0; + var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = mid + Math.imul(ah9, bl4) | 0; + hi = Math.imul(ah9, bh4); + lo = lo + Math.imul(al8, bl5) | 0; + mid = mid + Math.imul(al8, bh5) | 0; + mid = mid + Math.imul(ah8, bl5) | 0; + hi = hi + Math.imul(ah8, bh5) | 0; + lo = lo + Math.imul(al7, bl6) | 0; + mid = mid + Math.imul(al7, bh6) | 0; + mid = mid + Math.imul(ah7, bl6) | 0; + hi = hi + Math.imul(ah7, bh6) | 0; + lo = lo + Math.imul(al6, bl7) | 0; + mid = mid + Math.imul(al6, bh7) | 0; + mid = mid + Math.imul(ah6, bl7) | 0; + hi = hi + Math.imul(ah6, bh7) | 0; + lo = lo + Math.imul(al5, bl8) | 0; + mid = mid + Math.imul(al5, bh8) | 0; + mid = mid + Math.imul(ah5, bl8) | 0; + hi = hi + Math.imul(ah5, bh8) | 0; + lo = lo + Math.imul(al4, bl9) | 0; + mid = mid + Math.imul(al4, bh9) | 0; + mid = mid + Math.imul(ah4, bl9) | 0; + hi = hi + Math.imul(ah4, bh9) | 0; + var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = mid + Math.imul(ah9, bl5) | 0; + hi = Math.imul(ah9, bh5); + lo = lo + Math.imul(al8, bl6) | 0; + mid = mid + Math.imul(al8, bh6) | 0; + mid = mid + Math.imul(ah8, bl6) | 0; + hi = hi + Math.imul(ah8, bh6) | 0; + lo = lo + Math.imul(al7, bl7) | 0; + mid = mid + Math.imul(al7, bh7) | 0; + mid = mid + Math.imul(ah7, bl7) | 0; + hi = hi + Math.imul(ah7, bh7) | 0; + lo = lo + Math.imul(al6, bl8) | 0; + mid = mid + Math.imul(al6, bh8) | 0; + mid = mid + Math.imul(ah6, bl8) | 0; + hi = hi + Math.imul(ah6, bh8) | 0; + lo = lo + Math.imul(al5, bl9) | 0; + mid = mid + Math.imul(al5, bh9) | 0; + mid = mid + Math.imul(ah5, bl9) | 0; + hi = hi + Math.imul(ah5, bh9) | 0; + var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = mid + Math.imul(ah9, bl6) | 0; + hi = Math.imul(ah9, bh6); + lo = lo + Math.imul(al8, bl7) | 0; + mid = mid + Math.imul(al8, bh7) | 0; + mid = mid + Math.imul(ah8, bl7) | 0; + hi = hi + Math.imul(ah8, bh7) | 0; + lo = lo + Math.imul(al7, bl8) | 0; + mid = mid + Math.imul(al7, bh8) | 0; + mid = mid + Math.imul(ah7, bl8) | 0; + hi = hi + Math.imul(ah7, bh8) | 0; + lo = lo + Math.imul(al6, bl9) | 0; + mid = mid + Math.imul(al6, bh9) | 0; + mid = mid + Math.imul(ah6, bl9) | 0; + hi = hi + Math.imul(ah6, bh9) | 0; + var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = mid + Math.imul(ah9, bl7) | 0; + hi = Math.imul(ah9, bh7); + lo = lo + Math.imul(al8, bl8) | 0; + mid = mid + Math.imul(al8, bh8) | 0; + mid = mid + Math.imul(ah8, bl8) | 0; + hi = hi + Math.imul(ah8, bh8) | 0; + lo = lo + Math.imul(al7, bl9) | 0; + mid = mid + Math.imul(al7, bh9) | 0; + mid = mid + Math.imul(ah7, bl9) | 0; + hi = hi + Math.imul(ah7, bh9) | 0; + var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = mid + Math.imul(ah9, bl8) | 0; + hi = Math.imul(ah9, bh8); + lo = lo + Math.imul(al8, bl9) | 0; + mid = mid + Math.imul(al8, bh9) | 0; + mid = mid + Math.imul(ah8, bl9) | 0; + hi = hi + Math.imul(ah8, bh9) | 0; + var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = mid + Math.imul(ah9, bl9) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0; + c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + function bigMulTo(self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + var lo = r & 0x3ffffff; + ncarry = ncarry + (r / 0x4000000 | 0) | 0; + lo = lo + rword | 0; + rword = lo & 0x3ffffff; + ncarry = ncarry + (lo >>> 26) | 0; + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + return out._strip(); + } + function jumboMulTo(self, num, out) { + // Temporary disable, see https://github.com/indutny/bn.js/issues/211 + // var fftm = new FFTM(); + // return fftm.mulp(self, num, out); + return bigMulTo(self, num, out); + } + BN.prototype.mulTo = function mulTo(num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM(x, y) { + this.x = x; + this.y = y; + } + FFTM.prototype.makeRBT = function makeRBT(N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin(x, l, N) { + if (x === 0 || x === N - 1) return x; + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << l - i - 1; + x >>= 1; + } + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + var rx = rtwdf_ * ro - itwdf_ * io; + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + FFTM.prototype.guessLen13b = function guessLen13b(n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + return 1 << i + 1 + odd; + }; + FFTM.prototype.conjugate = function conjugate(rws, iws, N) { + if (N <= 1) return; + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + t = iws[i]; + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + FFTM.prototype.normalize13b = function normalize13b(ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry; + ws[i] = w & 0x3ffffff; + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + return ws; + }; + FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + rws[2 * i] = carry & 0x1fff; + carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; + carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + FFTM.prototype.stub = function stub(N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + return ph; + }; + FFTM.prototype.mulp = function mulp(x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + var rbt = this.makeRBT(N); + var _ = this.stub(N); + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + var rmws = out.words; + rmws.length = N; + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out._strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul(num) { + return this.clone().mulTo(num, this); + }; + BN.prototype.imuln = function imuln(num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += w / 0x4000000 | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return isNegNum ? this.ineg() : this; + }; + BN.prototype.muln = function muln(num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr() { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr() { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow(num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + res = res.mul(q); + } + } + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = 0x3ffffff >>> 26 - r << 26 - r; + var i; + if (r !== 0) { + var carry = 0; + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = (this.words[i] | 0) - newCarry << r; + this.words[i] = c | carry; + carry = newCarry >>> 26 - r; + } + if (carry) { + this.words[i] = carry; + this.length++; + } + } + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + this.length += s; + } + return this._strip(); + }; + BN.prototype.ishln = function ishln(bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn(bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - hint % 26) / 26; + } else { + h = 0; + } + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + var maskedWords = extended; + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = carry << 26 - r | word >>> r; + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + return this._strip(); + }; + BN.prototype.ishrn = function ishrn(bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln(bits) { + return this.clone().ishln(bits); + }; + BN.prototype.ushln = function ushln(bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn(bits) { + return this.clone().ishrn(bits); + }; + BN.prototype.ushrn = function ushrn(bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn(bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + assert(this.negative === 0, 'imaskn works only with positive numbers'); + if (this.length <= s) { + return this; + } + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + if (r !== 0) { + var mask = 0x3ffffff ^ 0x3ffffff >>> r << r; + this.words[this.length - 1] &= mask; + } + return this._strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn(bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) <= num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + BN.prototype._iaddn = function _iaddn(num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn(num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + this.words[0] -= num; + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + return this._strip(); + }; + BN.prototype.addn = function addn(num) { + return this.clone().iaddn(num); + }; + BN.prototype.subn = function subn(num) { + return this.clone().isubn(num); + }; + BN.prototype.iabs = function iabs() { + this.negative = 0; + return this; + }; + BN.prototype.abs = function abs() { + return this.clone().iabs(); + }; + BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) { + var len = num.length + shift; + var i; + this._expand(len); + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - (right / 0x4000000 | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + if (carry === 0) return this._strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + return this._strip(); + }; + BN.prototype._wordDiv = function _wordDiv(num, mode) { + var shift = this.length - num.length; + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min(qj / bhi | 0, 0x3ffffff); + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q._strip(); + } + a._strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod(num, mode, positive) { + assert(!num.isZero()); + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + if (mode !== 'mod') { + div = res.div.neg(); + } + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + return { + div: div, + mod: mod + }; + } + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + if (mode !== 'mod') { + div = res.div.neg(); + } + return { + div: div, + mod: res.mod + }; + } + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modrn(num.words[0])) + }; + } + return { + div: this.divn(num.words[0]), + mod: new BN(this.modrn(num.words[0])) + }; + } + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div(num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod(num) { + return this.divmod(num, 'mod', false).mod; + }; + BN.prototype.umod = function umod(num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound(num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + BN.prototype.modrn = function modrn(num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + return isNegNum ? -acc : acc; + }; + + // WARNING: DEPRECATED + BN.prototype.modn = function modn(num) { + return this.modrn(num); + }; + + // In-place division by number + BN.prototype.idivn = function idivn(num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + assert(num <= 0x3ffffff); + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = w / num | 0; + carry = w % num; + } + this._strip(); + return isNegNum ? this.ineg() : this; + }; + BN.prototype.divn = function divn(num) { + return this.clone().idivn(num); + }; + BN.prototype.egcd = function egcd(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var x = this; + var y = p.clone(); + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + var g = 0; + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + var yp = y.clone(); + var xp = x.clone(); + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + A.iushrn(1); + B.iushrn(1); + } + } + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + C.iushrn(1); + D.iushrn(1); + } + } + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp(p) { + assert(p.negative === 0); + assert(!p.isZero()); + var a = this; + var b = p.clone(); + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + var x1 = new BN(1); + var x2 = new BN(0); + var delta = b.clone(); + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + x1.iushrn(1); + } + } + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + x2.iushrn(1); + } + } + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + if (res.cmpn(0) < 0) { + res.iadd(p); + } + return res; + }; + BN.prototype.gcd = function gcd(num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + a.isub(b); + } while (true); + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm(num) { + return this.egcd(num).a.umod(num); + }; + BN.prototype.isEven = function isEven() { + return (this.words[0] & 1) === 0; + }; + BN.prototype.isOdd = function isOdd() { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln(num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn(bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + BN.prototype.isZero = function isZero() { + return this.length === 1 && this.words[0] === 0; + }; + BN.prototype.cmpn = function cmpn(num) { + var negative = num < 0; + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + this._strip(); + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + assert(num <= 0x3ffffff, 'Number is too big'); + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp(num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp(num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + BN.prototype.gtn = function gtn(num) { + return this.cmpn(num) === 1; + }; + BN.prototype.gt = function gt(num) { + return this.cmp(num) === 1; + }; + BN.prototype.gten = function gten(num) { + return this.cmpn(num) >= 0; + }; + BN.prototype.gte = function gte(num) { + return this.cmp(num) >= 0; + }; + BN.prototype.ltn = function ltn(num) { + return this.cmpn(num) === -1; + }; + BN.prototype.lt = function lt(num) { + return this.cmp(num) === -1; + }; + BN.prototype.lten = function lten(num) { + return this.cmpn(num) <= 0; + }; + BN.prototype.lte = function lte(num) { + return this.cmp(num) <= 0; + }; + BN.prototype.eqn = function eqn(num) { + return this.cmpn(num) === 0; + }; + BN.prototype.eq = function eq(num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red(num) { + return new Red(num); + }; + BN.prototype.toRed = function toRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + BN.prototype.fromRed = function fromRed() { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + BN.prototype._forceRed = function _forceRed(ctx) { + this.red = ctx; + return this; + }; + BN.prototype.forceRed = function forceRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + BN.prototype.redAdd = function redAdd(num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + BN.prototype.redIAdd = function redIAdd(num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + BN.prototype.redSub = function redSub(num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + BN.prototype.redISub = function redISub(num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + BN.prototype.redShl = function redShl(num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + BN.prototype.redMul = function redMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + BN.prototype.redIMul = function redIMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + BN.prototype.redSqr = function redSqr() { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + BN.prototype.redISqr = function redISqr() { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt() { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + BN.prototype.redInvm = function redInvm() { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg() { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + BN.prototype.redPow = function redPow(num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime(name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + this.tmp = this._tmp(); + } + MPrime.prototype._tmp = function _tmp() { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + MPrime.prototype.ireduce = function ireduce(num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is a BN v4 instance + r.strip(); + } else { + // r is a BN v5 instance + r._strip(); + } + } + return r; + }; + MPrime.prototype.split = function split(input, out) { + input.iushrn(this.n, 0, out); + }; + MPrime.prototype.imulK = function imulK(num) { + return num.imul(this.k); + }; + function K256() { + MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + K256.prototype.split = function split(input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = (next & mask) << 4 | prev >>> 22; + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + K256.prototype.imulK = function imulK(num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + (lo / 0x4000000 | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + function P224() { + MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + function P192() { + MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + function P25519() { + // 2 ^ 255 - 19 + MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + P25519.prototype.imulK = function imulK(num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime(name) { + // Cached version of prime + if (primes[name]) return primes[name]; + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + return prime; + }; + + // + // Base reduction engine + // + function Red(m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + Red.prototype._verify1 = function _verify1(a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + Red.prototype._verify2 = function _verify2(a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, 'red works only with red numbers'); + }; + Red.prototype.imod = function imod(a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + move(a, a.umod(this.m)._forceRed(this)); + return a; + }; + Red.prototype.neg = function neg(a) { + if (a.isZero()) { + return a.clone(); + } + return this.m.sub(a)._forceRed(this); + }; + Red.prototype.add = function add(a, b) { + this._verify2(a, b); + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + Red.prototype.iadd = function iadd(a, b) { + this._verify2(a, b); + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + Red.prototype.sub = function sub(a, b) { + this._verify2(a, b); + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + Red.prototype.isub = function isub(a, b) { + this._verify2(a, b); + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + Red.prototype.shl = function shl(a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + Red.prototype.imul = function imul(a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + Red.prototype.mul = function mul(a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + Red.prototype.isqr = function isqr(a) { + return this.imul(a, a.clone()); + }; + Red.prototype.sqr = function sqr(a) { + return this.mul(a, a); + }; + Red.prototype.sqrt = function sqrt(a) { + if (a.isZero()) return a.clone(); + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + return r; + }; + Red.prototype.invm = function invm(a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + Red.prototype.pow = function pow(a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = word >> j & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + return res; + }; + Red.prototype.convertTo = function convertTo(num) { + var r = num.umod(this.m); + return r === num ? r.clone() : r; + }; + Red.prototype.convertFrom = function convertFrom(num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont(num) { + return new Mont(num); + }; + function Mont(m) { + Red.call(this, m); + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - this.shift % 26; + } + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + Mont.prototype.convertTo = function convertTo(num) { + return this.imod(num.ushln(this.shift)); + }; + Mont.prototype.convertFrom = function convertFrom(num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + Mont.prototype.imul = function imul(a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + return res._forceRed(this); + }; + Mont.prototype.mul = function mul(a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + return res._forceRed(this); + }; + Mont.prototype.invm = function invm(a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})(typeof module === 'undefined' || module, void 0); + +},{"buffer":188}],187:[function(require,module,exports){ +"use strict"; + +var r; +module.exports = function rand(len) { + if (!r) r = new Rand(null); + return r.generate(len); +}; +function Rand(rand) { + this.rand = rand; +} +module.exports.Rand = Rand; +Rand.prototype.generate = function generate(len) { + return this._rand(len); +}; + +// Emulate crypto API using randy +Rand.prototype._rand = function _rand(n) { + if (this.rand.getBytes) return this.rand.getBytes(n); + var res = new Uint8Array(n); + for (var i = 0; i < res.length; i++) res[i] = this.rand.getByte(); + return res; +}; +if (typeof self === 'object') { + if (self.crypto && self.crypto.getRandomValues) { + // Modern browsers + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.crypto.getRandomValues(arr); + return arr; + }; + } else if (self.msCrypto && self.msCrypto.getRandomValues) { + // IE + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.msCrypto.getRandomValues(arr); + return arr; + }; + + // Safari's WebWorkers do not have `crypto` + } else if (typeof window === 'object') { + // Old junk + Rand.prototype._rand = function () { + throw new Error('Not implemented yet'); + }; + } +} else { + // Node.js or Web worker with no crypto support + try { + var crypto = require('crypto'); + if (typeof crypto.randomBytes !== 'function') throw new Error('Not supported'); + Rand.prototype._rand = function _rand(n) { + return crypto.randomBytes(n); + }; + } catch (e) {} +} + +},{"crypto":188}],188:[function(require,module,exports){ +"use strict"; + +},{}],189:[function(require,module,exports){ +"use strict"; + +// based on the aes implimentation in triple sec +// https://github.com/keybase/triplesec +// which is in turn based on the one from crypto-js +// https://code.google.com/p/crypto-js/ + +var Buffer = require('safe-buffer').Buffer; +function asUInt32Array(buf) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf); + var len = buf.length / 4 | 0; + var out = new Array(len); + for (var i = 0; i < len; i++) { + out[i] = buf.readUInt32BE(i * 4); + } + return out; +} +function scrubVec(v) { + for (var i = 0; i < v.length; v++) { + v[i] = 0; + } +} +function cryptBlock(M, keySchedule, SUB_MIX, SBOX, nRounds) { + var SUB_MIX0 = SUB_MIX[0]; + var SUB_MIX1 = SUB_MIX[1]; + var SUB_MIX2 = SUB_MIX[2]; + var SUB_MIX3 = SUB_MIX[3]; + var s0 = M[0] ^ keySchedule[0]; + var s1 = M[1] ^ keySchedule[1]; + var s2 = M[2] ^ keySchedule[2]; + var s3 = M[3] ^ keySchedule[3]; + var t0, t1, t2, t3; + var ksRow = 4; + for (var round = 1; round < nRounds; round++) { + t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[s1 >>> 16 & 0xff] ^ SUB_MIX2[s2 >>> 8 & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]; + t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[s2 >>> 16 & 0xff] ^ SUB_MIX2[s3 >>> 8 & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]; + t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[s3 >>> 16 & 0xff] ^ SUB_MIX2[s0 >>> 8 & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]; + t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[s0 >>> 16 & 0xff] ^ SUB_MIX2[s1 >>> 8 & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]; + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + t0 = t0 >>> 0; + t1 = t1 >>> 0; + t2 = t2 >>> 0; + t3 = t3 >>> 0; + return [t0, t1, t2, t3]; +} + +// AES constants +var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; +var G = function () { + // Compute double table + var d = new Array(256); + for (var j = 0; j < 256; j++) { + if (j < 128) { + d[j] = j << 1; + } else { + d[j] = j << 1 ^ 0x11b; + } + } + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX = [[], [], [], []]; + var INV_SUB_MIX = [[], [], [], []]; + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; ++i) { + // Compute sbox + var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4; + sx = sx >>> 8 ^ sx & 0xff ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = d[sx] * 0x101 ^ sx * 0x1010100; + SUB_MIX[0][x] = t << 24 | t >>> 8; + SUB_MIX[1][x] = t << 16 | t >>> 16; + SUB_MIX[2][x] = t << 8 | t >>> 24; + SUB_MIX[3][x] = t; + + // Compute inv sub bytes, inv mix columns tables + t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100; + INV_SUB_MIX[0][sx] = t << 24 | t >>> 8; + INV_SUB_MIX[1][sx] = t << 16 | t >>> 16; + INV_SUB_MIX[2][sx] = t << 8 | t >>> 24; + INV_SUB_MIX[3][sx] = t; + if (x === 0) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + return { + SBOX: SBOX, + INV_SBOX: INV_SBOX, + SUB_MIX: SUB_MIX, + INV_SUB_MIX: INV_SUB_MIX + }; +}(); +function AES(key) { + this._key = asUInt32Array(key); + this._reset(); +} +AES.blockSize = 4 * 4; +AES.keySize = 256 / 8; +AES.prototype.blockSize = AES.blockSize; +AES.prototype.keySize = AES.keySize; +AES.prototype._reset = function () { + var keyWords = this._key; + var keySize = keyWords.length; + var nRounds = keySize + 6; + var ksRows = (nRounds + 1) * 4; + var keySchedule = []; + for (var k = 0; k < keySize; k++) { + keySchedule[k] = keyWords[k]; + } + for (k = keySize; k < ksRows; k++) { + var t = keySchedule[k - 1]; + if (k % keySize === 0) { + t = t << 8 | t >>> 24; + t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff]; + t ^= RCON[k / keySize | 0] << 24; + } else if (keySize > 6 && k % keySize === 4) { + t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff]; + } + keySchedule[k] = keySchedule[k - keySize] ^ t; + } + var invKeySchedule = []; + for (var ik = 0; ik < ksRows; ik++) { + var ksR = ksRows - ik; + var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]; + if (ik < 4 || ksR <= 4) { + invKeySchedule[ik] = tt; + } else { + invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[tt >>> 16 & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[tt >>> 8 & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]; + } + } + this._nRounds = nRounds; + this._keySchedule = keySchedule; + this._invKeySchedule = invKeySchedule; +}; +AES.prototype.encryptBlockRaw = function (M) { + M = asUInt32Array(M); + return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds); +}; +AES.prototype.encryptBlock = function (M) { + var out = this.encryptBlockRaw(M); + var buf = Buffer.allocUnsafe(16); + buf.writeUInt32BE(out[0], 0); + buf.writeUInt32BE(out[1], 4); + buf.writeUInt32BE(out[2], 8); + buf.writeUInt32BE(out[3], 12); + return buf; +}; +AES.prototype.decryptBlock = function (M) { + M = asUInt32Array(M); + + // swap + var m1 = M[1]; + M[1] = M[3]; + M[3] = m1; + var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds); + var buf = Buffer.allocUnsafe(16); + buf.writeUInt32BE(out[0], 0); + buf.writeUInt32BE(out[3], 4); + buf.writeUInt32BE(out[2], 8); + buf.writeUInt32BE(out[1], 12); + return buf; +}; +AES.prototype.scrub = function () { + scrubVec(this._keySchedule); + scrubVec(this._invKeySchedule); + scrubVec(this._key); +}; +module.exports.AES = AES; + +},{"safe-buffer":494}],190:[function(require,module,exports){ +"use strict"; + +var aes = require('./aes'); +var Buffer = require('safe-buffer').Buffer; +var Transform = require('cipher-base'); +var inherits = require('inherits'); +var GHASH = require('./ghash'); +var xor = require('buffer-xor'); +var incr32 = require('./incr32'); +function xorTest(a, b) { + var out = 0; + if (a.length !== b.length) out++; + var len = Math.min(a.length, b.length); + for (var i = 0; i < len; ++i) { + out += a[i] ^ b[i]; + } + return out; +} +function calcIv(self, iv, ck) { + if (iv.length === 12) { + self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]); + return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]); + } + var ghash = new GHASH(ck); + var len = iv.length; + var toPad = len % 16; + ghash.update(iv); + if (toPad) { + toPad = 16 - toPad; + ghash.update(Buffer.alloc(toPad, 0)); + } + ghash.update(Buffer.alloc(8, 0)); + var ivBits = len * 8; + var tail = Buffer.alloc(8); + tail.writeUIntBE(ivBits, 0, 8); + ghash.update(tail); + self._finID = ghash.state; + var out = Buffer.from(self._finID); + incr32(out); + return out; +} +function StreamCipher(mode, key, iv, decrypt) { + Transform.call(this); + var h = Buffer.alloc(4, 0); + this._cipher = new aes.AES(key); + var ck = this._cipher.encryptBlock(h); + this._ghash = new GHASH(ck); + iv = calcIv(this, iv, ck); + this._prev = Buffer.from(iv); + this._cache = Buffer.allocUnsafe(0); + this._secCache = Buffer.allocUnsafe(0); + this._decrypt = decrypt; + this._alen = 0; + this._len = 0; + this._mode = mode; + this._authTag = null; + this._called = false; +} +inherits(StreamCipher, Transform); +StreamCipher.prototype._update = function (chunk) { + if (!this._called && this._alen) { + var rump = 16 - this._alen % 16; + if (rump < 16) { + rump = Buffer.alloc(rump, 0); + this._ghash.update(rump); + } + } + this._called = true; + var out = this._mode.encrypt(this, chunk); + if (this._decrypt) { + this._ghash.update(chunk); + } else { + this._ghash.update(out); + } + this._len += chunk.length; + return out; +}; +StreamCipher.prototype._final = function () { + if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data'); + var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)); + if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data'); + this._authTag = tag; + this._cipher.scrub(); +}; +StreamCipher.prototype.getAuthTag = function getAuthTag() { + if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state'); + return this._authTag; +}; +StreamCipher.prototype.setAuthTag = function setAuthTag(tag) { + if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state'); + this._authTag = tag; +}; +StreamCipher.prototype.setAAD = function setAAD(buf) { + if (this._called) throw new Error('Attempting to set AAD in unsupported state'); + this._ghash.update(buf); + this._alen += buf.length; +}; +module.exports = StreamCipher; + +},{"./aes":189,"./ghash":194,"./incr32":195,"buffer-xor":219,"cipher-base":221,"inherits":440,"safe-buffer":494}],191:[function(require,module,exports){ +"use strict"; + +var ciphers = require('./encrypter'); +var deciphers = require('./decrypter'); +var modes = require('./modes/list.json'); +function getCiphers() { + return Object.keys(modes); +} +exports.createCipher = exports.Cipher = ciphers.createCipher; +exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv; +exports.createDecipher = exports.Decipher = deciphers.createDecipher; +exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv; +exports.listCiphers = exports.getCiphers = getCiphers; + +},{"./decrypter":192,"./encrypter":193,"./modes/list.json":203}],192:[function(require,module,exports){ +"use strict"; + +var AuthCipher = require('./authCipher'); +var Buffer = require('safe-buffer').Buffer; +var MODES = require('./modes'); +var StreamCipher = require('./streamCipher'); +var Transform = require('cipher-base'); +var aes = require('./aes'); +var ebtk = require('evp_bytestokey'); +var inherits = require('inherits'); +function Decipher(mode, key, iv) { + Transform.call(this); + this._cache = new Splitter(); + this._last = void 0; + this._cipher = new aes.AES(key); + this._prev = Buffer.from(iv); + this._mode = mode; + this._autopadding = true; +} +inherits(Decipher, Transform); +Decipher.prototype._update = function (data) { + this._cache.add(data); + var chunk; + var thing; + var out = []; + while (chunk = this._cache.get(this._autopadding)) { + thing = this._mode.decrypt(this, chunk); + out.push(thing); + } + return Buffer.concat(out); +}; +Decipher.prototype._final = function () { + var chunk = this._cache.flush(); + if (this._autopadding) { + return unpad(this._mode.decrypt(this, chunk)); + } else if (chunk) { + throw new Error('data not multiple of block length'); + } +}; +Decipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo; + return this; +}; +function Splitter() { + this.cache = Buffer.allocUnsafe(0); +} +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]); +}; +Splitter.prototype.get = function (autoPadding) { + var out; + if (autoPadding) { + if (this.cache.length > 16) { + out = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + return out; + } + } else { + if (this.cache.length >= 16) { + out = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + return out; + } + } + return null; +}; +Splitter.prototype.flush = function () { + if (this.cache.length) return this.cache; +}; +function unpad(last) { + var padded = last[15]; + if (padded < 1 || padded > 16) { + throw new Error('unable to decrypt data'); + } + var i = -1; + while (++i < padded) { + if (last[i + (16 - padded)] !== padded) { + throw new Error('unable to decrypt data'); + } + } + if (padded === 16) return; + return last.slice(0, 16 - padded); +} +function createDecipheriv(suite, password, iv) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + if (typeof iv === 'string') iv = Buffer.from(iv); + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length); + if (typeof password === 'string') password = Buffer.from(password); + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length); + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv, true); + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv, true); + } + return new Decipher(config.module, password, iv); +} +function createDecipher(suite, password) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + var keys = ebtk(password, false, config.key, config.iv); + return createDecipheriv(suite, keys.key, keys.iv); +} +exports.createDecipher = createDecipher; +exports.createDecipheriv = createDecipheriv; + +},{"./aes":189,"./authCipher":190,"./modes":202,"./streamCipher":205,"cipher-base":221,"evp_bytestokey":423,"inherits":440,"safe-buffer":494}],193:[function(require,module,exports){ +"use strict"; + +var MODES = require('./modes'); +var AuthCipher = require('./authCipher'); +var Buffer = require('safe-buffer').Buffer; +var StreamCipher = require('./streamCipher'); +var Transform = require('cipher-base'); +var aes = require('./aes'); +var ebtk = require('evp_bytestokey'); +var inherits = require('inherits'); +function Cipher(mode, key, iv) { + Transform.call(this); + this._cache = new Splitter(); + this._cipher = new aes.AES(key); + this._prev = Buffer.from(iv); + this._mode = mode; + this._autopadding = true; +} +inherits(Cipher, Transform); +Cipher.prototype._update = function (data) { + this._cache.add(data); + var chunk; + var thing; + var out = []; + while (chunk = this._cache.get()) { + thing = this._mode.encrypt(this, chunk); + out.push(thing); + } + return Buffer.concat(out); +}; +var PADDING = Buffer.alloc(16, 0x10); +Cipher.prototype._final = function () { + var chunk = this._cache.flush(); + if (this._autopadding) { + chunk = this._mode.encrypt(this, chunk); + this._cipher.scrub(); + return chunk; + } + if (!chunk.equals(PADDING)) { + this._cipher.scrub(); + throw new Error('data not multiple of block length'); + } +}; +Cipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo; + return this; +}; +function Splitter() { + this.cache = Buffer.allocUnsafe(0); +} +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]); +}; +Splitter.prototype.get = function () { + if (this.cache.length > 15) { + var out = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + return out; + } + return null; +}; +Splitter.prototype.flush = function () { + var len = 16 - this.cache.length; + var padBuff = Buffer.allocUnsafe(len); + var i = -1; + while (++i < len) { + padBuff.writeUInt8(len, i); + } + return Buffer.concat([this.cache, padBuff]); +}; +function createCipheriv(suite, password, iv) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + if (typeof password === 'string') password = Buffer.from(password); + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length); + if (typeof iv === 'string') iv = Buffer.from(iv); + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length); + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv); + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv); + } + return new Cipher(config.module, password, iv); +} +function createCipher(suite, password) { + var config = MODES[suite.toLowerCase()]; + if (!config) throw new TypeError('invalid suite type'); + var keys = ebtk(password, false, config.key, config.iv); + return createCipheriv(suite, keys.key, keys.iv); +} +exports.createCipheriv = createCipheriv; +exports.createCipher = createCipher; + +},{"./aes":189,"./authCipher":190,"./modes":202,"./streamCipher":205,"cipher-base":221,"evp_bytestokey":423,"inherits":440,"safe-buffer":494}],194:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var ZEROES = Buffer.alloc(16, 0); +function toArray(buf) { + return [buf.readUInt32BE(0), buf.readUInt32BE(4), buf.readUInt32BE(8), buf.readUInt32BE(12)]; +} +function fromArray(out) { + var buf = Buffer.allocUnsafe(16); + buf.writeUInt32BE(out[0] >>> 0, 0); + buf.writeUInt32BE(out[1] >>> 0, 4); + buf.writeUInt32BE(out[2] >>> 0, 8); + buf.writeUInt32BE(out[3] >>> 0, 12); + return buf; +} +function GHASH(key) { + this.h = key; + this.state = Buffer.alloc(16, 0); + this.cache = Buffer.allocUnsafe(0); +} + +// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html +// by Juho Vähä-Herttua +GHASH.prototype.ghash = function (block) { + var i = -1; + while (++i < block.length) { + this.state[i] ^= block[i]; + } + this._multiply(); +}; +GHASH.prototype._multiply = function () { + var Vi = toArray(this.h); + var Zi = [0, 0, 0, 0]; + var j, xi, lsbVi; + var i = -1; + while (++i < 128) { + xi = (this.state[~~(i / 8)] & 1 << 7 - i % 8) !== 0; + if (xi) { + // Z_i+1 = Z_i ^ V_i + Zi[0] ^= Vi[0]; + Zi[1] ^= Vi[1]; + Zi[2] ^= Vi[2]; + Zi[3] ^= Vi[3]; + } + + // Store the value of LSB(V_i) + lsbVi = (Vi[3] & 1) !== 0; + + // V_i+1 = V_i >> 1 + for (j = 3; j > 0; j--) { + Vi[j] = Vi[j] >>> 1 | (Vi[j - 1] & 1) << 31; + } + Vi[0] = Vi[0] >>> 1; + + // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R + if (lsbVi) { + Vi[0] = Vi[0] ^ 0xe1 << 24; + } + } + this.state = fromArray(Zi); +}; +GHASH.prototype.update = function (buf) { + this.cache = Buffer.concat([this.cache, buf]); + var chunk; + while (this.cache.length >= 16) { + chunk = this.cache.slice(0, 16); + this.cache = this.cache.slice(16); + this.ghash(chunk); + } +}; +GHASH.prototype.final = function (abl, bl) { + if (this.cache.length) { + this.ghash(Buffer.concat([this.cache, ZEROES], 16)); + } + this.ghash(fromArray([0, abl, 0, bl])); + return this.state; +}; +module.exports = GHASH; + +},{"safe-buffer":494}],195:[function(require,module,exports){ +"use strict"; + +function incr32(iv) { + var len = iv.length; + var item; + while (len--) { + item = iv.readUInt8(len); + if (item === 255) { + iv.writeUInt8(0, len); + } else { + item++; + iv.writeUInt8(item, len); + break; + } + } +} +module.exports = incr32; + +},{}],196:[function(require,module,exports){ +"use strict"; + +var xor = require('buffer-xor'); +exports.encrypt = function (self, block) { + var data = xor(block, self._prev); + self._prev = self._cipher.encryptBlock(data); + return self._prev; +}; +exports.decrypt = function (self, block) { + var pad = self._prev; + self._prev = block; + var out = self._cipher.decryptBlock(block); + return xor(out, pad); +}; + +},{"buffer-xor":219}],197:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var xor = require('buffer-xor'); +function encryptStart(self, data, decrypt) { + var len = data.length; + var out = xor(data, self._cache); + self._cache = self._cache.slice(len); + self._prev = Buffer.concat([self._prev, decrypt ? data : out]); + return out; +} +exports.encrypt = function (self, data, decrypt) { + var out = Buffer.allocUnsafe(0); + var len; + while (data.length) { + if (self._cache.length === 0) { + self._cache = self._cipher.encryptBlock(self._prev); + self._prev = Buffer.allocUnsafe(0); + } + if (self._cache.length <= data.length) { + len = self._cache.length; + out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]); + data = data.slice(len); + } else { + out = Buffer.concat([out, encryptStart(self, data, decrypt)]); + break; + } + } + return out; +}; + +},{"buffer-xor":219,"safe-buffer":494}],198:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +function encryptByte(self, byteParam, decrypt) { + var pad; + var i = -1; + var len = 8; + var out = 0; + var bit, value; + while (++i < len) { + pad = self._cipher.encryptBlock(self._prev); + bit = byteParam & 1 << 7 - i ? 0x80 : 0; + value = pad[0] ^ bit; + out += (value & 0x80) >> i % 8; + self._prev = shiftIn(self._prev, decrypt ? bit : value); + } + return out; +} +function shiftIn(buffer, value) { + var len = buffer.length; + var i = -1; + var out = Buffer.allocUnsafe(buffer.length); + buffer = Buffer.concat([buffer, Buffer.from([value])]); + while (++i < len) { + out[i] = buffer[i] << 1 | buffer[i + 1] >> 7; + } + return out; +} +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length; + var out = Buffer.allocUnsafe(len); + var i = -1; + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt); + } + return out; +}; + +},{"safe-buffer":494}],199:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +function encryptByte(self, byteParam, decrypt) { + var pad = self._cipher.encryptBlock(self._prev); + var out = pad[0] ^ byteParam; + self._prev = Buffer.concat([self._prev.slice(1), Buffer.from([decrypt ? byteParam : out])]); + return out; +} +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length; + var out = Buffer.allocUnsafe(len); + var i = -1; + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt); + } + return out; +}; + +},{"safe-buffer":494}],200:[function(require,module,exports){ +"use strict"; + +var xor = require('buffer-xor'); +var Buffer = require('safe-buffer').Buffer; +var incr32 = require('../incr32'); +function getBlock(self) { + var out = self._cipher.encryptBlockRaw(self._prev); + incr32(self._prev); + return out; +} +var blockSize = 16; +exports.encrypt = function (self, chunk) { + var chunkNum = Math.ceil(chunk.length / blockSize); + var start = self._cache.length; + self._cache = Buffer.concat([self._cache, Buffer.allocUnsafe(chunkNum * blockSize)]); + for (var i = 0; i < chunkNum; i++) { + var out = getBlock(self); + var offset = start + i * blockSize; + self._cache.writeUInt32BE(out[0], offset + 0); + self._cache.writeUInt32BE(out[1], offset + 4); + self._cache.writeUInt32BE(out[2], offset + 8); + self._cache.writeUInt32BE(out[3], offset + 12); + } + var pad = self._cache.slice(0, chunk.length); + self._cache = self._cache.slice(chunk.length); + return xor(chunk, pad); +}; + +},{"../incr32":195,"buffer-xor":219,"safe-buffer":494}],201:[function(require,module,exports){ +"use strict"; + +exports.encrypt = function (self, block) { + return self._cipher.encryptBlock(block); +}; +exports.decrypt = function (self, block) { + return self._cipher.decryptBlock(block); +}; + +},{}],202:[function(require,module,exports){ +"use strict"; + +var modeModules = { + ECB: require('./ecb'), + CBC: require('./cbc'), + CFB: require('./cfb'), + CFB8: require('./cfb8'), + CFB1: require('./cfb1'), + OFB: require('./ofb'), + CTR: require('./ctr'), + GCM: require('./ctr') +}; +var modes = require('./list.json'); +for (var key in modes) { + modes[key].module = modeModules[modes[key].mode]; +} +module.exports = modes; + +},{"./cbc":196,"./cfb":197,"./cfb1":198,"./cfb8":199,"./ctr":200,"./ecb":201,"./list.json":203,"./ofb":204}],203:[function(require,module,exports){ +module.exports={ + "aes-128-ecb": { + "cipher": "AES", + "key": 128, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-192-ecb": { + "cipher": "AES", + "key": 192, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-256-ecb": { + "cipher": "AES", + "key": 256, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-128-cbc": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-192-cbc": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-256-cbc": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes128": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes192": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes256": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-128-cfb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-192-cfb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-256-cfb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-128-cfb8": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-192-cfb8": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-256-cfb8": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-128-cfb1": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-192-cfb1": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-256-cfb1": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-128-ofb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-192-ofb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-256-ofb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-128-ctr": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-192-ctr": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-256-ctr": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-128-gcm": { + "cipher": "AES", + "key": 128, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-192-gcm": { + "cipher": "AES", + "key": 192, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-256-gcm": { + "cipher": "AES", + "key": 256, + "iv": 12, + "mode": "GCM", + "type": "auth" + } +} + +},{}],204:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var xor = require('buffer-xor'); +function getBlock(self) { + self._prev = self._cipher.encryptBlock(self._prev); + return self._prev; +} +exports.encrypt = function (self, chunk) { + while (self._cache.length < chunk.length) { + self._cache = Buffer.concat([self._cache, getBlock(self)]); + } + var pad = self._cache.slice(0, chunk.length); + self._cache = self._cache.slice(chunk.length); + return xor(chunk, pad); +}; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"buffer":220,"buffer-xor":219}],205:[function(require,module,exports){ +"use strict"; + +var aes = require('./aes'); +var Buffer = require('safe-buffer').Buffer; +var Transform = require('cipher-base'); +var inherits = require('inherits'); +function StreamCipher(mode, key, iv, decrypt) { + Transform.call(this); + this._cipher = new aes.AES(key); + this._prev = Buffer.from(iv); + this._cache = Buffer.allocUnsafe(0); + this._secCache = Buffer.allocUnsafe(0); + this._decrypt = decrypt; + this._mode = mode; +} +inherits(StreamCipher, Transform); +StreamCipher.prototype._update = function (chunk) { + return this._mode.encrypt(this, chunk, this._decrypt); +}; +StreamCipher.prototype._final = function () { + this._cipher.scrub(); +}; +module.exports = StreamCipher; + +},{"./aes":189,"cipher-base":221,"inherits":440,"safe-buffer":494}],206:[function(require,module,exports){ +"use strict"; + +var DES = require('browserify-des'); +var aes = require('browserify-aes/browser'); +var aesModes = require('browserify-aes/modes'); +var desModes = require('browserify-des/modes'); +var ebtk = require('evp_bytestokey'); +function createCipher(suite, password) { + suite = suite.toLowerCase(); + var keyLen, ivLen; + if (aesModes[suite]) { + keyLen = aesModes[suite].key; + ivLen = aesModes[suite].iv; + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8; + ivLen = desModes[suite].iv; + } else { + throw new TypeError('invalid suite type'); + } + var keys = ebtk(password, false, keyLen, ivLen); + return createCipheriv(suite, keys.key, keys.iv); +} +function createDecipher(suite, password) { + suite = suite.toLowerCase(); + var keyLen, ivLen; + if (aesModes[suite]) { + keyLen = aesModes[suite].key; + ivLen = aesModes[suite].iv; + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8; + ivLen = desModes[suite].iv; + } else { + throw new TypeError('invalid suite type'); + } + var keys = ebtk(password, false, keyLen, ivLen); + return createDecipheriv(suite, keys.key, keys.iv); +} +function createCipheriv(suite, key, iv) { + suite = suite.toLowerCase(); + if (aesModes[suite]) return aes.createCipheriv(suite, key, iv); + if (desModes[suite]) return new DES({ + key: key, + iv: iv, + mode: suite + }); + throw new TypeError('invalid suite type'); +} +function createDecipheriv(suite, key, iv) { + suite = suite.toLowerCase(); + if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv); + if (desModes[suite]) return new DES({ + key: key, + iv: iv, + mode: suite, + decrypt: true + }); + throw new TypeError('invalid suite type'); +} +function getCiphers() { + return Object.keys(desModes).concat(aes.getCiphers()); +} +exports.createCipher = exports.Cipher = createCipher; +exports.createCipheriv = exports.Cipheriv = createCipheriv; +exports.createDecipher = exports.Decipher = createDecipher; +exports.createDecipheriv = exports.Decipheriv = createDecipheriv; +exports.listCiphers = exports.getCiphers = getCiphers; + +},{"browserify-aes/browser":191,"browserify-aes/modes":202,"browserify-des":207,"browserify-des/modes":208,"evp_bytestokey":423}],207:[function(require,module,exports){ +"use strict"; + +var CipherBase = require('cipher-base'); +var des = require('des.js'); +var inherits = require('inherits'); +var Buffer = require('safe-buffer').Buffer; +var modes = { + 'des-ede3-cbc': des.CBC.instantiate(des.EDE), + 'des-ede3': des.EDE, + 'des-ede-cbc': des.CBC.instantiate(des.EDE), + 'des-ede': des.EDE, + 'des-cbc': des.CBC.instantiate(des.DES), + 'des-ecb': des.DES +}; +modes.des = modes['des-cbc']; +modes.des3 = modes['des-ede3-cbc']; +module.exports = DES; +inherits(DES, CipherBase); +function DES(opts) { + CipherBase.call(this); + var modeName = opts.mode.toLowerCase(); + var mode = modes[modeName]; + var type; + if (opts.decrypt) { + type = 'decrypt'; + } else { + type = 'encrypt'; + } + var key = opts.key; + if (!Buffer.isBuffer(key)) { + key = Buffer.from(key); + } + if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { + key = Buffer.concat([key, key.slice(0, 8)]); + } + var iv = opts.iv; + if (!Buffer.isBuffer(iv)) { + iv = Buffer.from(iv); + } + this._des = mode.create({ + key: key, + iv: iv, + type: type + }); +} +DES.prototype._update = function (data) { + return Buffer.from(this._des.update(data)); +}; +DES.prototype._final = function () { + return Buffer.from(this._des.final()); +}; + +},{"cipher-base":221,"des.js":394,"inherits":440,"safe-buffer":494}],208:[function(require,module,exports){ +"use strict"; + +exports['des-ecb'] = { + key: 8, + iv: 0 +}; +exports['des-cbc'] = exports.des = { + key: 8, + iv: 8 +}; +exports['des-ede3-cbc'] = exports.des3 = { + key: 24, + iv: 8 +}; +exports['des-ede3'] = { + key: 24, + iv: 0 +}; +exports['des-ede-cbc'] = { + key: 16, + iv: 8 +}; +exports['des-ede'] = { + key: 16, + iv: 0 +}; + +},{}],209:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var BN = require('bn.js'); +var randomBytes = require('randombytes'); +function blind(priv) { + var r = getr(priv); + var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed(); + return { + blinder: blinder, + unblinder: r.invm(priv.modulus) + }; +} +function getr(priv) { + var len = priv.modulus.byteLength(); + var r; + do { + r = new BN(randomBytes(len)); + } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)); + return r; +} +function crt(msg, priv) { + var blinds = blind(priv); + var len = priv.modulus.byteLength(); + var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus); + var c1 = blinded.toRed(BN.mont(priv.prime1)); + var c2 = blinded.toRed(BN.mont(priv.prime2)); + var qinv = priv.coefficient; + var p = priv.prime1; + var q = priv.prime2; + var m1 = c1.redPow(priv.exponent1).fromRed(); + var m2 = c2.redPow(priv.exponent2).fromRed(); + var h = m1.isub(m2).imul(qinv).umod(p).imul(q); + return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len); +} +crt.getr = getr; +module.exports = crt; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"bn.js":186,"buffer":220,"randombytes":475}],210:[function(require,module,exports){ +"use strict"; + +module.exports = require('./browser/algorithms.json'); + +},{"./browser/algorithms.json":211}],211:[function(require,module,exports){ +module.exports={ + "sha224WithRSAEncryption": { + "sign": "rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "RSA-SHA224": { + "sign": "ecdsa/rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "sha256WithRSAEncryption": { + "sign": "rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "RSA-SHA256": { + "sign": "ecdsa/rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "sha384WithRSAEncryption": { + "sign": "rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "RSA-SHA384": { + "sign": "ecdsa/rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "sha512WithRSAEncryption": { + "sign": "rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA512": { + "sign": "ecdsa/rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA1": { + "sign": "rsa", + "hash": "sha1", + "id": "3021300906052b0e03021a05000414" + }, + "ecdsa-with-SHA1": { + "sign": "ecdsa", + "hash": "sha1", + "id": "" + }, + "sha256": { + "sign": "ecdsa", + "hash": "sha256", + "id": "" + }, + "sha224": { + "sign": "ecdsa", + "hash": "sha224", + "id": "" + }, + "sha384": { + "sign": "ecdsa", + "hash": "sha384", + "id": "" + }, + "sha512": { + "sign": "ecdsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-SHA1": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-WITH-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-WITH-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-WITH-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-WITH-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-RIPEMD160": { + "sign": "dsa", + "hash": "rmd160", + "id": "" + }, + "ripemd160WithRSA": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "RSA-RIPEMD160": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "md5WithRSAEncryption": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + }, + "RSA-MD5": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + } +} + +},{}],212:[function(require,module,exports){ +module.exports={ + "1.3.132.0.10": "secp256k1", + "1.3.132.0.33": "p224", + "1.2.840.10045.3.1.1": "p192", + "1.2.840.10045.3.1.7": "p256", + "1.3.132.0.34": "p384", + "1.3.132.0.35": "p521" +} + +},{}],213:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var createHash = require('create-hash'); +var stream = require('readable-stream'); +var inherits = require('inherits'); +var sign = require('./sign'); +var verify = require('./verify'); +var algorithms = require('./algorithms.json'); +Object.keys(algorithms).forEach(function (key) { + algorithms[key].id = Buffer.from(algorithms[key].id, 'hex'); + algorithms[key.toLowerCase()] = algorithms[key]; +}); +function Sign(algorithm) { + stream.Writable.call(this); + var data = algorithms[algorithm]; + if (!data) throw new Error('Unknown message digest'); + this._hashType = data.hash; + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} +inherits(Sign, stream.Writable); +Sign.prototype._write = function _write(data, _, done) { + this._hash.update(data); + done(); +}; +Sign.prototype.update = function update(data, enc) { + if (typeof data === 'string') data = Buffer.from(data, enc); + this._hash.update(data); + return this; +}; +Sign.prototype.sign = function signMethod(key, enc) { + this.end(); + var hash = this._hash.digest(); + var sig = sign(hash, key, this._hashType, this._signType, this._tag); + return enc ? sig.toString(enc) : sig; +}; +function Verify(algorithm) { + stream.Writable.call(this); + var data = algorithms[algorithm]; + if (!data) throw new Error('Unknown message digest'); + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} +inherits(Verify, stream.Writable); +Verify.prototype._write = function _write(data, _, done) { + this._hash.update(data); + done(); +}; +Verify.prototype.update = function update(data, enc) { + if (typeof data === 'string') data = Buffer.from(data, enc); + this._hash.update(data); + return this; +}; +Verify.prototype.verify = function verifyMethod(key, sig, enc) { + if (typeof sig === 'string') sig = Buffer.from(sig, enc); + this.end(); + var hash = this._hash.digest(); + return verify(sig, hash, key, this._signType, this._tag); +}; +function createSign(algorithm) { + return new Sign(algorithm); +} +function createVerify(algorithm) { + return new Verify(algorithm); +} +module.exports = { + Sign: createSign, + Verify: createVerify, + createSign: createSign, + createVerify: createVerify +}; + +},{"./algorithms.json":211,"./sign":214,"./verify":215,"create-hash":386,"inherits":440,"readable-stream":491,"safe-buffer":494}],214:[function(require,module,exports){ +"use strict"; + +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var Buffer = require('safe-buffer').Buffer; +var createHmac = require('create-hmac'); +var crt = require('browserify-rsa'); +var EC = require('elliptic').ec; +var BN = require('bn.js'); +var parseKeys = require('parse-asn1'); +var curves = require('./curves.json'); +function sign(hash, key, hashType, signType, tag) { + var priv = parseKeys(key); + if (priv.curve) { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type'); + return ecSign(hash, priv); + } else if (priv.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong private key type'); + return dsaSign(hash, priv, hashType); + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type'); + } + hash = Buffer.concat([tag, hash]); + var len = priv.modulus.byteLength(); + var pad = [0, 1]; + while (hash.length + pad.length + 1 < len) pad.push(0xff); + pad.push(0x00); + var i = -1; + while (++i < hash.length) pad.push(hash[i]); + var out = crt(pad, priv); + return out; +} +function ecSign(hash, priv) { + var curveId = curves[priv.curve.join('.')]; + if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')); + var curve = new EC(curveId); + var key = curve.keyFromPrivate(priv.privateKey); + var out = key.sign(hash); + return Buffer.from(out.toDER()); +} +function dsaSign(hash, priv, algo) { + var x = priv.params.priv_key; + var p = priv.params.p; + var q = priv.params.q; + var g = priv.params.g; + var r = new BN(0); + var k; + var H = bits2int(hash, q).mod(q); + var s = false; + var kv = getKey(x, q, hash, algo); + while (s === false) { + k = makeKey(q, kv, algo); + r = makeR(g, k, p, q); + s = k.invm(q).imul(H.add(x.mul(r))).mod(q); + if (s.cmpn(0) === 0) { + s = false; + r = new BN(0); + } + } + return toDER(r, s); +} +function toDER(r, s) { + r = r.toArray(); + s = s.toArray(); + + // Pad values + if (r[0] & 0x80) r = [0].concat(r); + if (s[0] & 0x80) s = [0].concat(s); + var total = r.length + s.length + 4; + var res = [0x30, total, 0x02, r.length]; + res = res.concat(r, [0x02, s.length], s); + return Buffer.from(res); +} +function getKey(x, q, hash, algo) { + x = Buffer.from(x.toArray()); + if (x.length < q.byteLength()) { + var zeros = Buffer.alloc(q.byteLength() - x.length); + x = Buffer.concat([zeros, x]); + } + var hlen = hash.length; + var hbits = bits2octets(hash, q); + var v = Buffer.alloc(hlen); + v.fill(1); + var k = Buffer.alloc(hlen); + k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + return { + k: k, + v: v + }; +} +function bits2int(obits, q) { + var bits = new BN(obits); + var shift = (obits.length << 3) - q.bitLength(); + if (shift > 0) bits.ishrn(shift); + return bits; +} +function bits2octets(bits, q) { + bits = bits2int(bits, q); + bits = bits.mod(q); + var out = Buffer.from(bits.toArray()); + if (out.length < q.byteLength()) { + var zeros = Buffer.alloc(q.byteLength() - out.length); + out = Buffer.concat([zeros, out]); + } + return out; +} +function makeKey(q, kv, algo) { + var t; + var k; + do { + t = Buffer.alloc(0); + while (t.length * 8 < q.bitLength()) { + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + t = Buffer.concat([t, kv.v]); + } + k = bits2int(t, q); + kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest(); + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + } while (k.cmp(q) !== -1); + return k; +} +function makeR(g, k, p, q) { + return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); +} +module.exports = sign; +module.exports.getKey = getKey; +module.exports.makeKey = makeKey; + +},{"./curves.json":212,"bn.js":186,"browserify-rsa":209,"create-hmac":388,"elliptic":405,"parse-asn1":459,"safe-buffer":494}],215:[function(require,module,exports){ +"use strict"; + +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var Buffer = require('safe-buffer').Buffer; +var BN = require('bn.js'); +var EC = require('elliptic').ec; +var parseKeys = require('parse-asn1'); +var curves = require('./curves.json'); +function verify(sig, hash, key, signType, tag) { + var pub = parseKeys(key); + if (pub.type === 'ec') { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type'); + return ecVerify(sig, hash, pub); + } else if (pub.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong public key type'); + return dsaVerify(sig, hash, pub); + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type'); + } + hash = Buffer.concat([tag, hash]); + var len = pub.modulus.byteLength(); + var pad = [1]; + var padNum = 0; + while (hash.length + pad.length + 2 < len) { + pad.push(0xff); + padNum++; + } + pad.push(0x00); + var i = -1; + while (++i < hash.length) { + pad.push(hash[i]); + } + pad = Buffer.from(pad); + var red = BN.mont(pub.modulus); + sig = new BN(sig).toRed(red); + sig = sig.redPow(new BN(pub.publicExponent)); + sig = Buffer.from(sig.fromRed().toArray()); + var out = padNum < 8 ? 1 : 0; + len = Math.min(sig.length, pad.length); + if (sig.length !== pad.length) out = 1; + i = -1; + while (++i < len) out |= sig[i] ^ pad[i]; + return out === 0; +} +function ecVerify(sig, hash, pub) { + var curveId = curves[pub.data.algorithm.curve.join('.')]; + if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); + var curve = new EC(curveId); + var pubkey = pub.data.subjectPrivateKey.data; + return curve.verify(hash, sig, pubkey); +} +function dsaVerify(sig, hash, pub) { + var p = pub.data.p; + var q = pub.data.q; + var g = pub.data.g; + var y = pub.data.pub_key; + var unpacked = parseKeys.signature.decode(sig, 'der'); + var s = unpacked.s; + var r = unpacked.r; + checkValue(s, q); + checkValue(r, q); + var montp = BN.mont(p); + var w = s.invm(q); + var v = g.toRed(montp).redPow(new BN(hash).mul(w).mod(q)).fromRed().mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()).mod(p).mod(q); + return v.cmp(r) === 0; +} +function checkValue(b, q) { + if (b.cmpn(0) <= 0) throw new Error('invalid sig'); + if (b.cmp(q) >= q) throw new Error('invalid sig'); +} +module.exports = verify; + +},{"./curves.json":212,"bn.js":186,"elliptic":405,"parse-asn1":459,"safe-buffer":494}],216:[function(require,module,exports){ +"use strict"; + +},{}],217:[function(require,module,exports){ +"use strict"; + +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer'); +var Buffer = buffer.Buffer; + +// alternative to using Object.keys for old browsers +function copyProps(src, dst) { + for (var key in src) { + dst[key] = src[key]; + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer; +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports); + exports.Buffer = SafeBuffer; +} +function SafeBuffer(arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length); +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer); +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number'); + } + return Buffer(arg, encodingOrOffset, length); +}; +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + var buf = Buffer(size); + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + } else { + buf.fill(0); + } + return buf; +}; +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + return Buffer(size); +}; +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + return buffer.SlowBuffer(size); +}; + +},{"buffer":220}],218:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ +var Buffer = require('safe-buffer').Buffer; +/**/ + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + case 'raw': + return true; + default: + return false; + } +}; +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +} +; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. If an invalid byte is detected, -2 is returned. +function utf8CheckByte(byte) { + if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; + return byte >> 6 === 0x02 ? -1 : -2; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character is added when ending on a partial +// character. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} + +},{"safe-buffer":217}],219:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +module.exports = function xor(a, b) { + var length = Math.min(a.length, b.length); + var buffer = new Buffer(length); + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i]; + } + return buffer; +}; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"buffer":220}],220:[function(require,module,exports){ +(function (Buffer){(function (){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict'; + +var base64 = require('base64-js'); +var ieee754 = require('ieee754'); +exports.Buffer = Buffer; +exports.SlowBuffer = SlowBuffer; +exports.INSPECT_MAX_BYTES = 50; +var K_MAX_LENGTH = 0x7fffffff; +exports.kMaxLength = K_MAX_LENGTH; + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport(); +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') { + console.error('This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'); +} +function typedArraySupport() { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1); + arr.__proto__ = { + __proto__: Uint8Array.prototype, + foo: function () { + return 42; + } + }; + return arr.foo() === 42; + } catch (e) { + return false; + } +} +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined; + return this.buffer; + } +}); +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined; + return this.byteOffset; + } +}); +function createBuffer(length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"'); + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length); + buf.__proto__ = Buffer.prototype; + return buf; +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer(arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError('The "string" argument must be of type string. Received type number'); + } + return allocUnsafe(arg); + } + return from(arg, encodingOrOffset, length); +} + +// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 +if (typeof Symbol !== 'undefined' && Symbol.species != null && Buffer[Symbol.species] === Buffer) { + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true, + enumerable: false, + writable: false + }); +} +Buffer.poolSize = 8192; // not used by this implementation + +function from(value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset); + } + if (ArrayBuffer.isView(value)) { + return fromArrayLike(value); + } + if (value == null) { + throw TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value); + } + if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) { + return fromArrayBuffer(value, encodingOrOffset, length); + } + if (typeof value === 'number') { + throw new TypeError('The "value" argument must not be of type number. Received type number'); + } + var valueOf = value.valueOf && value.valueOf(); + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length); + } + var b = fromObject(value); + if (b) return b; + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length); + } + throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + typeof value); +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length); +}; + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Buffer.prototype.__proto__ = Uint8Array.prototype; +Buffer.__proto__ = Uint8Array; +function assertSize(size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number'); + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"'); + } +} +function alloc(size, fill, encoding) { + assertSize(size); + if (size <= 0) { + return createBuffer(size); + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill); + } + return createBuffer(size); +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding); +}; +function allocUnsafe(size) { + assertSize(size); + return createBuffer(size < 0 ? 0 : checked(size) | 0); +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size); +}; +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size); +}; +function fromString(string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8'; + } + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding); + } + var length = byteLength(string, encoding) | 0; + var buf = createBuffer(length); + var actual = buf.write(string, encoding); + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual); + } + return buf; +} +function fromArrayLike(array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0; + var buf = createBuffer(length); + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255; + } + return buf; +} +function fromArrayBuffer(array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds'); + } + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds'); + } + var buf; + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array); + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset); + } else { + buf = new Uint8Array(array, byteOffset, length); + } + + // Return an augmented `Uint8Array` instance + buf.__proto__ = Buffer.prototype; + return buf; +} +function fromObject(obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0; + var buf = createBuffer(len); + if (buf.length === 0) { + return buf; + } + obj.copy(buf, 0, 0, len); + return buf; + } + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0); + } + return fromArrayLike(obj); + } + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data); + } +} +function checked(length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes'); + } + return length | 0; +} +function SlowBuffer(length) { + if (+length != length) { + // eslint-disable-line eqeqeq + length = 0; + } + return Buffer.alloc(+length); +} +Buffer.isBuffer = function isBuffer(b) { + return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false +}; + +Buffer.compare = function compare(a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength); + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength); + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'); + } + if (a === b) return 0; + var x = a.length; + var y = b.length; + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break; + } + } + if (x < y) return -1; + if (y < x) return 1; + return 0; +}; +Buffer.isEncoding = function isEncoding(encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true; + default: + return false; + } +}; +Buffer.concat = function concat(list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + if (list.length === 0) { + return Buffer.alloc(0); + } + var i; + if (length === undefined) { + length = 0; + for (i = 0; i < list.length; ++i) { + length += list[i].length; + } + } + var buffer = Buffer.allocUnsafe(length); + var pos = 0; + for (i = 0; i < list.length; ++i) { + var buf = list[i]; + if (isInstance(buf, Uint8Array)) { + buf = Buffer.from(buf); + } + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers'); + } + buf.copy(buffer, pos); + pos += buf.length; + } + return buffer; +}; +function byteLength(string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length; + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength; + } + if (typeof string !== 'string') { + throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + typeof string); + } + var len = string.length; + var mustMatch = arguments.length > 2 && arguments[2] === true; + if (!mustMatch && len === 0) return 0; + + // Use a for loop to avoid recursion + var loweredCase = false; + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len; + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2; + case 'hex': + return len >>> 1; + case 'base64': + return base64ToBytes(string).length; + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8 + } + + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } +} +Buffer.byteLength = byteLength; +function slowToString(encoding, start, end) { + var loweredCase = false; + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0; + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return ''; + } + if (end === undefined || end > this.length) { + end = this.length; + } + if (end <= 0) { + return ''; + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0; + start >>>= 0; + if (end <= start) { + return ''; + } + if (!encoding) encoding = 'utf8'; + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end); + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end); + case 'ascii': + return asciiSlice(this, start, end); + case 'latin1': + case 'binary': + return latin1Slice(this, start, end); + case 'base64': + return base64Slice(this, start, end); + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end); + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = (encoding + '').toLowerCase(); + loweredCase = true; + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true; +function swap(b, n, m) { + var i = b[n]; + b[n] = b[m]; + b[m] = i; +} +Buffer.prototype.swap16 = function swap16() { + var len = this.length; + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits'); + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1); + } + return this; +}; +Buffer.prototype.swap32 = function swap32() { + var len = this.length; + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits'); + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3); + swap(this, i + 1, i + 2); + } + return this; +}; +Buffer.prototype.swap64 = function swap64() { + var len = this.length; + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits'); + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7); + swap(this, i + 1, i + 6); + swap(this, i + 2, i + 5); + swap(this, i + 3, i + 4); + } + return this; +}; +Buffer.prototype.toString = function toString() { + var length = this.length; + if (length === 0) return ''; + if (arguments.length === 0) return utf8Slice(this, 0, length); + return slowToString.apply(this, arguments); +}; +Buffer.prototype.toLocaleString = Buffer.prototype.toString; +Buffer.prototype.equals = function equals(b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer'); + if (this === b) return true; + return Buffer.compare(this, b) === 0; +}; +Buffer.prototype.inspect = function inspect() { + var str = ''; + var max = exports.INSPECT_MAX_BYTES; + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim(); + if (this.length > max) str += ' ... '; + return ''; +}; +Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength); + } + if (!Buffer.isBuffer(target)) { + throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + typeof target); + } + if (start === undefined) { + start = 0; + } + if (end === undefined) { + end = target ? target.length : 0; + } + if (thisStart === undefined) { + thisStart = 0; + } + if (thisEnd === undefined) { + thisEnd = this.length; + } + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index'); + } + if (thisStart >= thisEnd && start >= end) { + return 0; + } + if (thisStart >= thisEnd) { + return -1; + } + if (start >= end) { + return 1; + } + start >>>= 0; + end >>>= 0; + thisStart >>>= 0; + thisEnd >>>= 0; + if (this === target) return 0; + var x = thisEnd - thisStart; + var y = end - start; + var len = Math.min(x, y); + var thisCopy = this.slice(thisStart, thisEnd); + var targetCopy = target.slice(start, end); + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i]; + y = targetCopy[i]; + break; + } + } + if (x < y) return -1; + if (y < x) return 1; + return 0; +}; + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1; + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset; + byteOffset = 0; + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff; + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000; + } + byteOffset = +byteOffset; // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : buffer.length - 1; + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset; + if (byteOffset >= buffer.length) { + if (dir) return -1;else byteOffset = buffer.length - 1; + } else if (byteOffset < 0) { + if (dir) byteOffset = 0;else return -1; + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding); + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1; + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir); + } else if (typeof val === 'number') { + val = val & 0xFF; // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset); + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset); + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir); + } + throw new TypeError('val must be string, number or Buffer'); +} +function arrayIndexOf(arr, val, byteOffset, encoding, dir) { + var indexSize = 1; + var arrLength = arr.length; + var valLength = val.length; + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase(); + if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1; + } + indexSize = 2; + arrLength /= 2; + valLength /= 2; + byteOffset /= 2; + } + } + function read(buf, i) { + if (indexSize === 1) { + return buf[i]; + } else { + return buf.readUInt16BE(i * indexSize); + } + } + var i; + if (dir) { + var foundIndex = -1; + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i; + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize; + } else { + if (foundIndex !== -1) i -= i - foundIndex; + foundIndex = -1; + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength; + for (i = byteOffset; i >= 0; i--) { + var found = true; + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false; + break; + } + } + if (found) return i; + } + } + return -1; +} +Buffer.prototype.includes = function includes(val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1; +}; +Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true); +}; +Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false); +}; +function hexWrite(buf, string, offset, length) { + offset = Number(offset) || 0; + var remaining = buf.length - offset; + if (!length) { + length = remaining; + } else { + length = Number(length); + if (length > remaining) { + length = remaining; + } + } + var strLen = string.length; + if (length > strLen / 2) { + length = strLen / 2; + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16); + if (numberIsNaN(parsed)) return i; + buf[offset + i] = parsed; + } + return i; +} +function utf8Write(buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length); +} +function asciiWrite(buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length); +} +function latin1Write(buf, string, offset, length) { + return asciiWrite(buf, string, offset, length); +} +function base64Write(buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length); +} +function ucs2Write(buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length); +} +Buffer.prototype.write = function write(string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8'; + length = this.length; + offset = 0; + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset; + length = this.length; + offset = 0; + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0; + if (isFinite(length)) { + length = length >>> 0; + if (encoding === undefined) encoding = 'utf8'; + } else { + encoding = length; + length = undefined; + } + } else { + throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported'); + } + var remaining = this.length - offset; + if (length === undefined || length > remaining) length = remaining; + if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds'); + } + if (!encoding) encoding = 'utf8'; + var loweredCase = false; + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length); + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length); + case 'ascii': + return asciiWrite(this, string, offset, length); + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length); + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length); + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length); + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding); + encoding = ('' + encoding).toLowerCase(); + loweredCase = true; + } + } +}; +Buffer.prototype.toJSON = function toJSON() { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + }; +}; +function base64Slice(buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf); + } else { + return base64.fromByteArray(buf.slice(start, end)); + } +} +function utf8Slice(buf, start, end) { + end = Math.min(buf.length, end); + var res = []; + var i = start; + while (i < end) { + var firstByte = buf[i]; + var codePoint = null; + var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1; + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint; + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte; + } + break; + case 2: + secondByte = buf[i + 1]; + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F; + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint; + } + } + break; + case 3: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F; + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint; + } + } + break; + case 4: + secondByte = buf[i + 1]; + thirdByte = buf[i + 2]; + fourthByte = buf[i + 3]; + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F; + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint; + } + } + } + } + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD; + bytesPerSequence = 1; + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000; + res.push(codePoint >>> 10 & 0x3FF | 0xD800); + codePoint = 0xDC00 | codePoint & 0x3FF; + } + res.push(codePoint); + i += bytesPerSequence; + } + return decodeCodePointsArray(res); +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000; +function decodeCodePointsArray(codePoints) { + var len = codePoints.length; + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints); // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = ''; + var i = 0; + while (i < len) { + res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)); + } + return res; +} +function asciiSlice(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F); + } + return ret; +} +function latin1Slice(buf, start, end) { + var ret = ''; + end = Math.min(buf.length, end); + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]); + } + return ret; +} +function hexSlice(buf, start, end) { + var len = buf.length; + if (!start || start < 0) start = 0; + if (!end || end < 0 || end > len) end = len; + var out = ''; + for (var i = start; i < end; ++i) { + out += toHex(buf[i]); + } + return out; +} +function utf16leSlice(buf, start, end) { + var bytes = buf.slice(start, end); + var res = ''; + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256); + } + return res; +} +Buffer.prototype.slice = function slice(start, end) { + var len = this.length; + start = ~~start; + end = end === undefined ? len : ~~end; + if (start < 0) { + start += len; + if (start < 0) start = 0; + } else if (start > len) { + start = len; + } + if (end < 0) { + end += len; + if (end < 0) end = 0; + } else if (end > len) { + end = len; + } + if (end < start) end = start; + var newBuf = this.subarray(start, end); + // Return an augmented `Uint8Array` instance + newBuf.__proto__ = Buffer.prototype; + return newBuf; +}; + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset(offset, ext, length) { + if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint'); + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length'); +} +Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) { + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + return val; +}; +Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) { + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) { + checkOffset(offset, byteLength, this.length); + } + var val = this[offset + --byteLength]; + var mul = 1; + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul; + } + return val; +}; +Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 1, this.length); + return this[offset]; +}; +Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] | this[offset + 1] << 8; +}; +Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + return this[offset] << 8 | this[offset + 1]; +}; +Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000; +}; +Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]); +}; +Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) { + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var val = this[offset]; + var mul = 1; + var i = 0; + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul; + } + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; +}; +Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) { + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) checkOffset(offset, byteLength, this.length); + var i = byteLength; + var mul = 1; + var val = this[offset + --i]; + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul; + } + mul *= 0x80; + if (val >= mul) val -= Math.pow(2, 8 * byteLength); + return val; +}; +Buffer.prototype.readInt8 = function readInt8(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 1, this.length); + if (!(this[offset] & 0x80)) return this[offset]; + return (0xff - this[offset] + 1) * -1; +}; +Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset] | this[offset + 1] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; +}; +Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 2, this.length); + var val = this[offset + 1] | this[offset] << 8; + return val & 0x8000 ? val | 0xFFFF0000 : val; +}; +Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24; +}; +Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]; +}; +Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return ieee754.read(this, offset, true, 23, 4); +}; +Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 4, this.length); + return ieee754.read(this, offset, false, 23, 4); +}; +Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 8, this.length); + return ieee754.read(this, offset, true, 52, 8); +}; +Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) { + offset = offset >>> 0; + if (!noAssert) checkOffset(offset, 8, this.length); + return ieee754.read(this, offset, false, 52, 8); +}; +function checkInt(buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds'); + if (offset + ext > buf.length) throw new RangeError('Index out of range'); +} +Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + var mul = 1; + var i = 0; + this[offset] = value & 0xFF; + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + return offset + byteLength; +}; +Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset >>> 0; + byteLength = byteLength >>> 0; + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1; + checkInt(this, value, offset, byteLength, maxBytes, 0); + } + var i = byteLength - 1; + var mul = 1; + this[offset + i] = value & 0xFF; + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = value / mul & 0xFF; + } + return offset + byteLength; +}; +Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0); + this[offset] = value & 0xff; + return offset + 1; +}; +Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + return offset + 2; +}; +Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0); + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + return offset + 2; +}; +Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + this[offset + 3] = value >>> 24; + this[offset + 2] = value >>> 16; + this[offset + 1] = value >>> 8; + this[offset] = value & 0xff; + return offset + 4; +}; +Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0); + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + return offset + 4; +}; +Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + var i = 0; + var mul = 1; + var sub = 0; + this[offset] = value & 0xFF; + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1; + } + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + return offset + byteLength; +}; +Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1); + checkInt(this, value, offset, byteLength, limit - 1, -limit); + } + var i = byteLength - 1; + var mul = 1; + var sub = 0; + this[offset + i] = value & 0xFF; + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1; + } + this[offset + i] = (value / mul >> 0) - sub & 0xFF; + } + return offset + byteLength; +}; +Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80); + if (value < 0) value = 0xff + value + 1; + this[offset] = value & 0xff; + return offset + 1; +}; +Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + return offset + 2; +}; +Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000); + this[offset] = value >>> 8; + this[offset + 1] = value & 0xff; + return offset + 2; +}; +Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + this[offset] = value & 0xff; + this[offset + 1] = value >>> 8; + this[offset + 2] = value >>> 16; + this[offset + 3] = value >>> 24; + return offset + 4; +}; +Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000); + if (value < 0) value = 0xffffffff + value + 1; + this[offset] = value >>> 24; + this[offset + 1] = value >>> 16; + this[offset + 2] = value >>> 8; + this[offset + 3] = value & 0xff; + return offset + 4; +}; +function checkIEEE754(buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range'); + if (offset < 0) throw new RangeError('Index out of range'); +} +function writeFloat(buf, value, offset, littleEndian, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38); + } + ieee754.write(buf, value, offset, littleEndian, 23, 4); + return offset + 4; +} +Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert); +}; +Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert); +}; +function writeDouble(buf, value, offset, littleEndian, noAssert) { + value = +value; + offset = offset >>> 0; + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308); + } + ieee754.write(buf, value, offset, littleEndian, 52, 8); + return offset + 8; +} +Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert); +}; +Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert); +}; + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy(target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer'); + if (!start) start = 0; + if (!end && end !== 0) end = this.length; + if (targetStart >= target.length) targetStart = target.length; + if (!targetStart) targetStart = 0; + if (end > 0 && end < start) end = start; + + // Copy 0 bytes; we're done + if (end === start) return 0; + if (target.length === 0 || this.length === 0) return 0; + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds'); + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range'); + if (end < 0) throw new RangeError('sourceEnd out of bounds'); + + // Are we oob? + if (end > this.length) end = this.length; + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start; + } + var len = end - start; + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end); + } else if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (var i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start]; + } + } else { + Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart); + } + return len; +}; + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill(val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start; + start = 0; + end = this.length; + } else if (typeof end === 'string') { + encoding = end; + end = this.length; + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string'); + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding); + } + if (val.length === 1) { + var code = val.charCodeAt(0); + if (encoding === 'utf8' && code < 128 || encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code; + } + } + } else if (typeof val === 'number') { + val = val & 255; + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index'); + } + if (end <= start) { + return this; + } + start = start >>> 0; + end = end === undefined ? this.length : end >>> 0; + if (!val) val = 0; + var i; + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val; + } + } else { + var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding); + var len = bytes.length; + if (len === 0) { + throw new TypeError('The value "' + val + '" is invalid for argument "value"'); + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len]; + } + } + return this; +}; + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g; +function base64clean(str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0]; + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, ''); + // Node converts strings with length < 2 to '' + if (str.length < 2) return ''; + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '='; + } + return str; +} +function toHex(n) { + if (n < 16) return '0' + n.toString(16); + return n.toString(16); +} +function utf8ToBytes(string, units) { + units = units || Infinity; + var codePoint; + var length = string.length; + var leadSurrogate = null; + var bytes = []; + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i); + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + continue; + } + + // valid lead + leadSurrogate = codePoint; + continue; + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + leadSurrogate = codePoint; + continue; + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000; + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD); + } + leadSurrogate = null; + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break; + bytes.push(codePoint); + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break; + bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break; + bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break; + bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80); + } else { + throw new Error('Invalid code point'); + } + } + return bytes; +} +function asciiToBytes(str) { + var byteArray = []; + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF); + } + return byteArray; +} +function utf16leToBytes(str, units) { + var c, hi, lo; + var byteArray = []; + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break; + c = str.charCodeAt(i); + hi = c >> 8; + lo = c % 256; + byteArray.push(lo); + byteArray.push(hi); + } + return byteArray; +} +function base64ToBytes(str) { + return base64.toByteArray(base64clean(str)); +} +function blitBuffer(src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if (i + offset >= dst.length || i >= src.length) break; + dst[i + offset] = src[i]; + } + return i; +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance(obj, type) { + return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name; +} +function numberIsNaN(obj) { + // For IE11 support + return obj !== obj; // eslint-disable-line no-self-compare +} + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"base64-js":185,"buffer":220,"ieee754":439}],221:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var Transform = require('stream').Transform; +var StringDecoder = require('string_decoder').StringDecoder; +var inherits = require('inherits'); +function CipherBase(hashMode) { + Transform.call(this); + this.hashMode = typeof hashMode === 'string'; + if (this.hashMode) { + this[hashMode] = this._finalOrDigest; + } else { + this.final = this._finalOrDigest; + } + if (this._final) { + this.__final = this._final; + this._final = null; + } + this._decoder = null; + this._encoding = null; +} +inherits(CipherBase, Transform); +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + if (typeof data === 'string') { + data = Buffer.from(data, inputEnc); + } + var outData = this._update(data); + if (this.hashMode) return this; + if (outputEnc) { + outData = this._toString(outData, outputEnc); + } + return outData; +}; +CipherBase.prototype.setAutoPadding = function () {}; +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state'); +}; +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state'); +}; +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state'); +}; +CipherBase.prototype._transform = function (data, _, next) { + var err; + try { + if (this.hashMode) { + this._update(data); + } else { + this.push(this._update(data)); + } + } catch (e) { + err = e; + } finally { + next(err); + } +}; +CipherBase.prototype._flush = function (done) { + var err; + try { + this.push(this.__final()); + } catch (e) { + err = e; + } + done(err); +}; +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this.__final() || Buffer.alloc(0); + if (outputEnc) { + outData = this._toString(outData, outputEnc, true); + } + return outData; +}; +CipherBase.prototype._toString = function (value, enc, fin) { + if (!this._decoder) { + this._decoder = new StringDecoder(enc); + this._encoding = enc; + } + if (this._encoding !== enc) throw new Error('can\'t switch encodings'); + var out = this._decoder.write(value); + if (fin) { + out += this._decoder.end(); + } + return out; +}; +module.exports = CipherBase; + +},{"inherits":440,"safe-buffer":494,"stream":505,"string_decoder":218}],222:[function(require,module,exports){ +'use strict'; +var isCallable = require('../internals/is-callable'); +var tryToString = require('../internals/try-to-string'); + +var $TypeError = TypeError; + +// `Assert: IsCallable(argument) is true` +module.exports = function (argument) { + if (isCallable(argument)) return argument; + throw new $TypeError(tryToString(argument) + ' is not a function'); +}; + +},{"../internals/is-callable":285,"../internals/try-to-string":349}],223:[function(require,module,exports){ +'use strict'; +var isConstructor = require('../internals/is-constructor'); +var tryToString = require('../internals/try-to-string'); + +var $TypeError = TypeError; + +// `Assert: IsConstructor(argument) is true` +module.exports = function (argument) { + if (isConstructor(argument)) return argument; + throw new $TypeError(tryToString(argument) + ' is not a constructor'); +}; + +},{"../internals/is-constructor":286,"../internals/try-to-string":349}],224:[function(require,module,exports){ +'use strict'; +var isCallable = require('../internals/is-callable'); + +var $String = String; +var $TypeError = TypeError; + +module.exports = function (argument) { + if (typeof argument == 'object' || isCallable(argument)) return argument; + throw new $TypeError("Can't set " + $String(argument) + ' as a prototype'); +}; + +},{"../internals/is-callable":285}],225:[function(require,module,exports){ +'use strict'; +var wellKnownSymbol = require('../internals/well-known-symbol'); +var create = require('../internals/object-create'); +var defineProperty = require('../internals/object-define-property').f; + +var UNSCOPABLES = wellKnownSymbol('unscopables'); +var ArrayPrototype = Array.prototype; + +// Array.prototype[@@unscopables] +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +if (ArrayPrototype[UNSCOPABLES] === undefined) { + defineProperty(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); +} + +// add a key to Array.prototype[@@unscopables] +module.exports = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; +}; + +},{"../internals/object-create":306,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],226:[function(require,module,exports){ +'use strict'; +var isPrototypeOf = require('../internals/object-is-prototype-of'); + +var $TypeError = TypeError; + +module.exports = function (it, Prototype) { + if (isPrototypeOf(Prototype, it)) return it; + throw new $TypeError('Incorrect invocation'); +}; + +},{"../internals/object-is-prototype-of":314}],227:[function(require,module,exports){ +'use strict'; +var isObject = require('../internals/is-object'); + +var $String = String; +var $TypeError = TypeError; + +// `Assert: Type(argument) is Object` +module.exports = function (argument) { + if (isObject(argument)) return argument; + throw new $TypeError($String(argument) + ' is not an object'); +}; + +},{"../internals/is-object":289}],228:[function(require,module,exports){ +'use strict'; +var toIndexedObject = require('../internals/to-indexed-object'); +var toAbsoluteIndex = require('../internals/to-absolute-index'); +var lengthOfArrayLike = require('../internals/length-of-array-like'); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el !== el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value !== value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + +},{"../internals/length-of-array-like":299,"../internals/to-absolute-index":340,"../internals/to-indexed-object":341}],229:[function(require,module,exports){ +'use strict'; +var bind = require('../internals/function-bind-context'); +var uncurryThis = require('../internals/function-uncurry-this'); +var IndexedObject = require('../internals/indexed-object'); +var toObject = require('../internals/to-object'); +var lengthOfArrayLike = require('../internals/length-of-array-like'); +var arraySpeciesCreate = require('../internals/array-species-create'); + +var push = uncurryThis([].push); + +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation +var createMethod = function (TYPE) { + var IS_MAP = TYPE === 1; + var IS_FILTER = TYPE === 2; + var IS_SOME = TYPE === 3; + var IS_EVERY = TYPE === 4; + var IS_FIND_INDEX = TYPE === 6; + var IS_FILTER_REJECT = TYPE === 7; + var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that); + var length = lengthOfArrayLike(self); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push(target, value); // filter + } else switch (TYPE) { + case 4: return false; // every + case 7: push(target, value); // filterReject + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +module.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) +}; + +},{"../internals/array-species-create":233,"../internals/function-bind-context":262,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/length-of-array-like":299,"../internals/to-object":344}],230:[function(require,module,exports){ +'use strict'; +var toAbsoluteIndex = require('../internals/to-absolute-index'); +var lengthOfArrayLike = require('../internals/length-of-array-like'); +var createProperty = require('../internals/create-property'); + +var $Array = Array; +var max = Math.max; + +module.exports = function (O, start, end) { + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === undefined ? length : end, length); + var result = $Array(max(fin - k, 0)); + var n = 0; + for (; k < fin; k++, n++) createProperty(result, n, O[k]); + result.length = n; + return result; +}; + +},{"../internals/create-property":243,"../internals/length-of-array-like":299,"../internals/to-absolute-index":340}],231:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); + +module.exports = uncurryThis([].slice); + +},{"../internals/function-uncurry-this":268}],232:[function(require,module,exports){ +'use strict'; +var isArray = require('../internals/is-array'); +var isConstructor = require('../internals/is-constructor'); +var isObject = require('../internals/is-object'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var SPECIES = wellKnownSymbol('species'); +var $Array = Array; + +// a part of `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return C === undefined ? $Array : C; +}; + +},{"../internals/is-array":284,"../internals/is-constructor":286,"../internals/is-object":289,"../internals/well-known-symbol":357}],233:[function(require,module,exports){ +'use strict'; +var arraySpeciesConstructor = require('../internals/array-species-constructor'); + +// `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); +}; + +},{"../internals/array-species-constructor":232}],234:[function(require,module,exports){ +'use strict'; +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + } catch (error) { return false; } // workaround of old WebKit + `eval` bug + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + +},{"../internals/well-known-symbol":357}],235:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); + +var toString = uncurryThis({}.toString); +var stringSlice = uncurryThis(''.slice); + +module.exports = function (it) { + return stringSlice(toString(it), 8, -1); +}; + +},{"../internals/function-uncurry-this":268}],236:[function(require,module,exports){ +'use strict'; +var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); +var isCallable = require('../internals/is-callable'); +var classofRaw = require('../internals/classof-raw'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var $Object = Object; + +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result; +}; + +},{"../internals/classof-raw":235,"../internals/is-callable":285,"../internals/to-string-tag-support":347,"../internals/well-known-symbol":357}],237:[function(require,module,exports){ +'use strict'; +var hasOwn = require('../internals/has-own-property'); +var ownKeys = require('../internals/own-keys'); +var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor'); +var definePropertyModule = require('../internals/object-define-property'); + +module.exports = function (target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } +}; + +},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/object-get-own-property-descriptor":309,"../internals/own-keys":321}],238:[function(require,module,exports){ +'use strict'; +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var MATCH = wellKnownSymbol('match'); + +module.exports = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (error2) { /* empty */ } + } return false; +}; + +},{"../internals/well-known-symbol":357}],239:[function(require,module,exports){ +'use strict'; +var fails = require('../internals/fails'); + +module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + +},{"../internals/fails":260}],240:[function(require,module,exports){ +'use strict'; +// `CreateIterResultObject` abstract operation +// https://tc39.es/ecma262/#sec-createiterresultobject +module.exports = function (value, done) { + return { value: value, done: done }; +}; + +},{}],241:[function(require,module,exports){ +'use strict'; +var DESCRIPTORS = require('../internals/descriptors'); +var definePropertyModule = require('../internals/object-define-property'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + +},{"../internals/create-property-descriptor":242,"../internals/descriptors":247,"../internals/object-define-property":308}],242:[function(require,module,exports){ +'use strict'; +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + +},{}],243:[function(require,module,exports){ +'use strict'; +var toPropertyKey = require('../internals/to-property-key'); +var definePropertyModule = require('../internals/object-define-property'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); + +module.exports = function (object, key, value) { + var propertyKey = toPropertyKey(key); + if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; +}; + +},{"../internals/create-property-descriptor":242,"../internals/object-define-property":308,"../internals/to-property-key":346}],244:[function(require,module,exports){ +'use strict'; +var makeBuiltIn = require('../internals/make-built-in'); +var defineProperty = require('../internals/object-define-property'); + +module.exports = function (target, name, descriptor) { + if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); +}; + +},{"../internals/make-built-in":300,"../internals/object-define-property":308}],245:[function(require,module,exports){ +'use strict'; +var isCallable = require('../internals/is-callable'); +var definePropertyModule = require('../internals/object-define-property'); +var makeBuiltIn = require('../internals/make-built-in'); +var defineGlobalProperty = require('../internals/define-global-property'); + +module.exports = function (O, key, value, options) { + if (!options) options = {}; + var simple = options.enumerable; + var name = options.name !== undefined ? options.name : key; + if (isCallable(value)) makeBuiltIn(value, name, options); + if (options.global) { + if (simple) O[key] = value; + else defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) delete O[key]; + else if (O[key]) simple = true; + } catch (error) { /* empty */ } + if (simple) O[key] = value; + else definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } return O; +}; + +},{"../internals/define-global-property":246,"../internals/is-callable":285,"../internals/make-built-in":300,"../internals/object-define-property":308}],246:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); + +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty = Object.defineProperty; + +module.exports = function (key, value) { + try { + defineProperty(global, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global[key] = value; + } return value; +}; + +},{"../internals/global":274}],247:[function(require,module,exports){ +'use strict'; +var fails = require('../internals/fails'); + +// Detect IE8's incomplete defineProperty implementation +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7; +}); + +},{"../internals/fails":260}],248:[function(require,module,exports){ +'use strict'; +var documentAll = typeof document == 'object' && document.all; + +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot +// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing +var IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined; + +module.exports = { + all: documentAll, + IS_HTMLDDA: IS_HTMLDDA +}; + +},{}],249:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var isObject = require('../internals/is-object'); + +var document = global.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + +},{"../internals/global":274,"../internals/is-object":289}],250:[function(require,module,exports){ +'use strict'; +var IS_DENO = require('../internals/engine-is-deno'); +var IS_NODE = require('../internals/engine-is-node'); + +module.exports = !IS_DENO && !IS_NODE + && typeof window == 'object' + && typeof document == 'object'; + +},{"../internals/engine-is-deno":251,"../internals/engine-is-node":254}],251:[function(require,module,exports){ +'use strict'; +/* global Deno -- Deno case */ +module.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object'; + +},{}],252:[function(require,module,exports){ +'use strict'; +var userAgent = require('../internals/engine-user-agent'); + +module.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != 'undefined'; + +},{"../internals/engine-user-agent":256}],253:[function(require,module,exports){ +'use strict'; +var userAgent = require('../internals/engine-user-agent'); + +// eslint-disable-next-line redos/no-vulnerable -- safe +module.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent); + +},{"../internals/engine-user-agent":256}],254:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var classof = require('../internals/classof-raw'); + +module.exports = classof(global.process) === 'process'; + +},{"../internals/classof-raw":235,"../internals/global":274}],255:[function(require,module,exports){ +'use strict'; +var userAgent = require('../internals/engine-user-agent'); + +module.exports = /web0s(?!.*chrome)/i.test(userAgent); + +},{"../internals/engine-user-agent":256}],256:[function(require,module,exports){ +'use strict'; +module.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || ''; + +},{}],257:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var userAgent = require('../internals/engine-user-agent'); + +var process = global.process; +var Deno = global.Deno; +var versions = process && process.versions || Deno && Deno.version; +var v8 = versions && versions.v8; +var match, version; + +if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); +} + +// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` +// so check `userAgent` even if `.v8` exists, but 0 +if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = +match[1]; + } +} + +module.exports = version; + +},{"../internals/engine-user-agent":256,"../internals/global":274}],258:[function(require,module,exports){ +'use strict'; +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + +},{}],259:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f; +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var defineBuiltIn = require('../internals/define-built-in'); +var defineGlobalProperty = require('../internals/define-global-property'); +var copyConstructorProperties = require('../internals/copy-constructor-properties'); +var isForced = require('../internals/is-forced'); + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.dontCallGetSet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + defineBuiltIn(target, key, sourceProperty, options); + } +}; + +},{"../internals/copy-constructor-properties":237,"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/define-global-property":246,"../internals/global":274,"../internals/is-forced":287,"../internals/object-get-own-property-descriptor":309}],260:[function(require,module,exports){ +'use strict'; +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + +},{}],261:[function(require,module,exports){ +'use strict'; +var NATIVE_BIND = require('../internals/function-bind-native'); + +var FunctionPrototype = Function.prototype; +var apply = FunctionPrototype.apply; +var call = FunctionPrototype.call; + +// eslint-disable-next-line es/no-reflect -- safe +module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () { + return call.apply(apply, arguments); +}); + +},{"../internals/function-bind-native":263}],262:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this-clause'); +var aCallable = require('../internals/a-callable'); +var NATIVE_BIND = require('../internals/function-bind-native'); + +var bind = uncurryThis(uncurryThis.bind); + +// optional / simple context binding +module.exports = function (fn, that) { + aCallable(fn); + return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + +},{"../internals/a-callable":222,"../internals/function-bind-native":263,"../internals/function-uncurry-this-clause":267}],263:[function(require,module,exports){ +'use strict'; +var fails = require('../internals/fails'); + +module.exports = !fails(function () { + // eslint-disable-next-line es/no-function-prototype-bind -- safe + var test = (function () { /* empty */ }).bind(); + // eslint-disable-next-line no-prototype-builtins -- safe + return typeof test != 'function' || test.hasOwnProperty('prototype'); +}); + +},{"../internals/fails":260}],264:[function(require,module,exports){ +'use strict'; +var NATIVE_BIND = require('../internals/function-bind-native'); + +var call = Function.prototype.call; + +module.exports = NATIVE_BIND ? call.bind(call) : function () { + return call.apply(call, arguments); +}; + +},{"../internals/function-bind-native":263}],265:[function(require,module,exports){ +'use strict'; +var DESCRIPTORS = require('../internals/descriptors'); +var hasOwn = require('../internals/has-own-property'); + +var FunctionPrototype = Function.prototype; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + +var EXISTS = hasOwn(FunctionPrototype, 'name'); +// additional protection from minified / mangled / dropped function names +var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; +var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable)); + +module.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + +},{"../internals/descriptors":247,"../internals/has-own-property":275}],266:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); +var aCallable = require('../internals/a-callable'); + +module.exports = function (object, key, method) { + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { /* empty */ } +}; + +},{"../internals/a-callable":222,"../internals/function-uncurry-this":268}],267:[function(require,module,exports){ +'use strict'; +var classofRaw = require('../internals/classof-raw'); +var uncurryThis = require('../internals/function-uncurry-this'); + +module.exports = function (fn) { + // Nashorn bug: + // https://github.com/zloirock/core-js/issues/1128 + // https://github.com/zloirock/core-js/issues/1130 + if (classofRaw(fn) === 'Function') return uncurryThis(fn); +}; + +},{"../internals/classof-raw":235,"../internals/function-uncurry-this":268}],268:[function(require,module,exports){ +'use strict'; +var NATIVE_BIND = require('../internals/function-bind-native'); + +var FunctionPrototype = Function.prototype; +var call = FunctionPrototype.call; +var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + +module.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) { + return function () { + return call.apply(fn, arguments); + }; +}; + +},{"../internals/function-bind-native":263}],269:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var isCallable = require('../internals/is-callable'); + +var aFunction = function (argument) { + return isCallable(argument) ? argument : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method]; +}; + +},{"../internals/global":274,"../internals/is-callable":285}],270:[function(require,module,exports){ +'use strict'; +var classof = require('../internals/classof'); +var getMethod = require('../internals/get-method'); +var isNullOrUndefined = require('../internals/is-null-or-undefined'); +var Iterators = require('../internals/iterators'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR) + || getMethod(it, '@@iterator') + || Iterators[classof(it)]; +}; + +},{"../internals/classof":236,"../internals/get-method":273,"../internals/is-null-or-undefined":288,"../internals/iterators":298,"../internals/well-known-symbol":357}],271:[function(require,module,exports){ +'use strict'; +var call = require('../internals/function-call'); +var aCallable = require('../internals/a-callable'); +var anObject = require('../internals/an-object'); +var tryToString = require('../internals/try-to-string'); +var getIteratorMethod = require('../internals/get-iterator-method'); + +var $TypeError = TypeError; + +module.exports = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + ' is not iterable'); +}; + +},{"../internals/a-callable":222,"../internals/an-object":227,"../internals/function-call":264,"../internals/get-iterator-method":270,"../internals/try-to-string":349}],272:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); +var isArray = require('../internals/is-array'); +var isCallable = require('../internals/is-callable'); +var classof = require('../internals/classof-raw'); +var toString = require('../internals/to-string'); + +var push = uncurryThis([].push); + +module.exports = function (replacer) { + if (isCallable(replacer)) return replacer; + if (!isArray(replacer)) return; + var rawLength = replacer.length; + var keys = []; + for (var i = 0; i < rawLength; i++) { + var element = replacer[i]; + if (typeof element == 'string') push(keys, element); + else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element)); + } + var keysLength = keys.length; + var root = true; + return function (key, value) { + if (root) { + root = false; + return value; + } + if (isArray(this)) return value; + for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value; + }; +}; + +},{"../internals/classof-raw":235,"../internals/function-uncurry-this":268,"../internals/is-array":284,"../internals/is-callable":285,"../internals/to-string":348}],273:[function(require,module,exports){ +'use strict'; +var aCallable = require('../internals/a-callable'); +var isNullOrUndefined = require('../internals/is-null-or-undefined'); + +// `GetMethod` abstract operation +// https://tc39.es/ecma262/#sec-getmethod +module.exports = function (V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? undefined : aCallable(func); +}; + +},{"../internals/a-callable":222,"../internals/is-null-or-undefined":288}],274:[function(require,module,exports){ +(function (global){(function (){ +'use strict'; +var check = function (it) { + return it && it.Math === Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || this || Function('return this')(); + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],275:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); +var toObject = require('../internals/to-object'); + +var hasOwnProperty = uncurryThis({}.hasOwnProperty); + +// `HasOwnProperty` abstract operation +// https://tc39.es/ecma262/#sec-hasownproperty +// eslint-disable-next-line es/no-object-hasown -- safe +module.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); +}; + +},{"../internals/function-uncurry-this":268,"../internals/to-object":344}],276:[function(require,module,exports){ +'use strict'; +module.exports = {}; + +},{}],277:[function(require,module,exports){ +'use strict'; +module.exports = function (a, b) { + try { + // eslint-disable-next-line no-console -- safe + arguments.length === 1 ? console.error(a) : console.error(a, b); + } catch (error) { /* empty */ } +}; + +},{}],278:[function(require,module,exports){ +'use strict'; +var getBuiltIn = require('../internals/get-built-in'); + +module.exports = getBuiltIn('document', 'documentElement'); + +},{"../internals/get-built-in":269}],279:[function(require,module,exports){ +'use strict'; +var DESCRIPTORS = require('../internals/descriptors'); +var fails = require('../internals/fails'); +var createElement = require('../internals/document-create-element'); + +// Thanks to IE8 for its funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a !== 7; +}); + +},{"../internals/descriptors":247,"../internals/document-create-element":249,"../internals/fails":260}],280:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); +var fails = require('../internals/fails'); +var classof = require('../internals/classof-raw'); + +var $Object = Object; +var split = uncurryThis(''.split); + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !$Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) === 'String' ? split(it, '') : $Object(it); +} : $Object; + +},{"../internals/classof-raw":235,"../internals/fails":260,"../internals/function-uncurry-this":268}],281:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); +var isCallable = require('../internals/is-callable'); +var store = require('../internals/shared-store'); + +var functionToString = uncurryThis(Function.toString); + +// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper +if (!isCallable(store.inspectSource)) { + store.inspectSource = function (it) { + return functionToString(it); + }; +} + +module.exports = store.inspectSource; + +},{"../internals/function-uncurry-this":268,"../internals/is-callable":285,"../internals/shared-store":333}],282:[function(require,module,exports){ +'use strict'; +var NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection'); +var global = require('../internals/global'); +var isObject = require('../internals/is-object'); +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var hasOwn = require('../internals/has-own-property'); +var shared = require('../internals/shared-store'); +var sharedKey = require('../internals/shared-key'); +var hiddenKeys = require('../internals/hidden-keys'); + +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var TypeError = global.TypeError; +var WeakMap = global.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP || shared.state) { + var store = shared.state || (shared.state = new WeakMap()); + /* eslint-disable no-self-assign -- prototype methods protection */ + store.get = store.get; + store.has = store.has; + store.set = store.set; + /* eslint-enable no-self-assign -- prototype methods protection */ + set = function (it, metadata) { + if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function (it) { + return store.get(it) || {}; + }; + has = function (it) { + return store.has(it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + +},{"../internals/create-non-enumerable-property":241,"../internals/global":274,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/is-object":289,"../internals/shared-key":332,"../internals/shared-store":333,"../internals/weak-map-basic-detection":354}],283:[function(require,module,exports){ +'use strict'; +var wellKnownSymbol = require('../internals/well-known-symbol'); +var Iterators = require('../internals/iterators'); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + +},{"../internals/iterators":298,"../internals/well-known-symbol":357}],284:[function(require,module,exports){ +'use strict'; +var classof = require('../internals/classof-raw'); + +// `IsArray` abstract operation +// https://tc39.es/ecma262/#sec-isarray +// eslint-disable-next-line es/no-array-isarray -- safe +module.exports = Array.isArray || function isArray(argument) { + return classof(argument) === 'Array'; +}; + +},{"../internals/classof-raw":235}],285:[function(require,module,exports){ +'use strict'; +var $documentAll = require('../internals/document-all'); + +var documentAll = $documentAll.all; + +// `IsCallable` abstract operation +// https://tc39.es/ecma262/#sec-iscallable +module.exports = $documentAll.IS_HTMLDDA ? function (argument) { + return typeof argument == 'function' || argument === documentAll; +} : function (argument) { + return typeof argument == 'function'; +}; + +},{"../internals/document-all":248}],286:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); +var fails = require('../internals/fails'); +var isCallable = require('../internals/is-callable'); +var classof = require('../internals/classof'); +var getBuiltIn = require('../internals/get-built-in'); +var inspectSource = require('../internals/inspect-source'); + +var noop = function () { /* empty */ }; +var empty = []; +var construct = getBuiltIn('Reflect', 'construct'); +var constructorRegExp = /^\s*(?:class|function)\b/; +var exec = uncurryThis(constructorRegExp.exec); +var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + +var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) return false; + try { + construct(noop, empty, argument); + return true; + } catch (error) { + return false; + } +}; + +var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + } + try { + // we can't check .prototype since constructors produced by .bind haven't it + // `Function#toString` throws on some built-it function in some legacy engines + // (for example, `DOMQuad` and similar in FF41-) + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } +}; + +isConstructorLegacy.sham = true; + +// `IsConstructor` abstract operation +// https://tc39.es/ecma262/#sec-isconstructor +module.exports = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; +}) ? isConstructorLegacy : isConstructorModern; + +},{"../internals/classof":236,"../internals/fails":260,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/inspect-source":281,"../internals/is-callable":285}],287:[function(require,module,exports){ +'use strict'; +var fails = require('../internals/fails'); +var isCallable = require('../internals/is-callable'); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true + : value === NATIVE ? false + : isCallable(detection) ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + +},{"../internals/fails":260,"../internals/is-callable":285}],288:[function(require,module,exports){ +'use strict'; +// we can't use just `it == null` since of `document.all` special case +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec +module.exports = function (it) { + return it === null || it === undefined; +}; + +},{}],289:[function(require,module,exports){ +'use strict'; +var isCallable = require('../internals/is-callable'); +var $documentAll = require('../internals/document-all'); + +var documentAll = $documentAll.all; + +module.exports = $documentAll.IS_HTMLDDA ? function (it) { + return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll; +} : function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); +}; + +},{"../internals/document-all":248,"../internals/is-callable":285}],290:[function(require,module,exports){ +'use strict'; +module.exports = false; + +},{}],291:[function(require,module,exports){ +'use strict'; +var isObject = require('../internals/is-object'); +var classof = require('../internals/classof-raw'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var MATCH = wellKnownSymbol('match'); + +// `IsRegExp` abstract operation +// https://tc39.es/ecma262/#sec-isregexp +module.exports = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp'); +}; + +},{"../internals/classof-raw":235,"../internals/is-object":289,"../internals/well-known-symbol":357}],292:[function(require,module,exports){ +'use strict'; +var getBuiltIn = require('../internals/get-built-in'); +var isCallable = require('../internals/is-callable'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); +var USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid'); + +var $Object = Object; + +module.exports = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); +}; + +},{"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/object-is-prototype-of":314,"../internals/use-symbol-as-uid":351}],293:[function(require,module,exports){ +'use strict'; +var bind = require('../internals/function-bind-context'); +var call = require('../internals/function-call'); +var anObject = require('../internals/an-object'); +var tryToString = require('../internals/try-to-string'); +var isArrayIteratorMethod = require('../internals/is-array-iterator-method'); +var lengthOfArrayLike = require('../internals/length-of-array-like'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); +var getIterator = require('../internals/get-iterator'); +var getIteratorMethod = require('../internals/get-iterator-method'); +var iteratorClose = require('../internals/iterator-close'); + +var $TypeError = TypeError; + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var ResultPrototype = Result.prototype; + +module.exports = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); +}; + +},{"../internals/an-object":227,"../internals/function-bind-context":262,"../internals/function-call":264,"../internals/get-iterator":271,"../internals/get-iterator-method":270,"../internals/is-array-iterator-method":283,"../internals/iterator-close":294,"../internals/length-of-array-like":299,"../internals/object-is-prototype-of":314,"../internals/try-to-string":349}],294:[function(require,module,exports){ +'use strict'; +var call = require('../internals/function-call'); +var anObject = require('../internals/an-object'); +var getMethod = require('../internals/get-method'); + +module.exports = function (iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, 'return'); + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject(innerResult); + return value; +}; + +},{"../internals/an-object":227,"../internals/function-call":264,"../internals/get-method":273}],295:[function(require,module,exports){ +'use strict'; +var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype; +var create = require('../internals/object-create'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); +var setToStringTag = require('../internals/set-to-string-tag'); +var Iterators = require('../internals/iterators'); + +var returnThis = function () { return this; }; + +module.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; +}; + +},{"../internals/create-property-descriptor":242,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-create":306,"../internals/set-to-string-tag":331}],296:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var call = require('../internals/function-call'); +var IS_PURE = require('../internals/is-pure'); +var FunctionName = require('../internals/function-name'); +var isCallable = require('../internals/is-callable'); +var createIteratorConstructor = require('../internals/iterator-create-constructor'); +var getPrototypeOf = require('../internals/object-get-prototype-of'); +var setPrototypeOf = require('../internals/object-set-prototype-of'); +var setToStringTag = require('../internals/set-to-string-tag'); +var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); +var defineBuiltIn = require('../internals/define-built-in'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var Iterators = require('../internals/iterators'); +var IteratorsCore = require('../internals/iterators-core'); + +var PROPER_FUNCTION_NAME = FunctionName.PROPER; +var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; +var IteratorPrototype = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR = wellKnownSymbol('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { return this; }; + +module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND]; + + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } + + return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return call(nativeIterator, this); }; + } + } + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + + return methods; +}; + +},{"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/export":259,"../internals/function-call":264,"../internals/function-name":265,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/iterator-create-constructor":295,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-get-prototype-of":313,"../internals/object-set-prototype-of":318,"../internals/set-to-string-tag":331,"../internals/well-known-symbol":357}],297:[function(require,module,exports){ +'use strict'; +var fails = require('../internals/fails'); +var isCallable = require('../internals/is-callable'); +var isObject = require('../internals/is-object'); +var create = require('../internals/object-create'); +var getPrototypeOf = require('../internals/object-get-prototype-of'); +var defineBuiltIn = require('../internals/define-built-in'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var IS_PURE = require('../internals/is-pure'); + +var ITERATOR = wellKnownSymbol('iterator'); +var BUGGY_SAFARI_ITERATORS = false; + +// `%IteratorPrototype%` object +// https://tc39.es/ecma262/#sec-%iteratorprototype%-object +var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + +/* eslint-disable es/no-array-prototype-keys -- safe */ +if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } +} + +var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () { + var test = {}; + // FF44- legacy iterators case + return IteratorPrototype[ITERATOR].call(test) !== test; +}); + +if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {}; +else if (IS_PURE) IteratorPrototype = create(IteratorPrototype); + +// `%IteratorPrototype%[@@iterator]()` method +// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator +if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function () { + return this; + }); +} + +module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS +}; + +},{"../internals/define-built-in":245,"../internals/fails":260,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-get-prototype-of":313,"../internals/well-known-symbol":357}],298:[function(require,module,exports){ +arguments[4][276][0].apply(exports,arguments) +},{"dup":276}],299:[function(require,module,exports){ +'use strict'; +var toLength = require('../internals/to-length'); + +// `LengthOfArrayLike` abstract operation +// https://tc39.es/ecma262/#sec-lengthofarraylike +module.exports = function (obj) { + return toLength(obj.length); +}; + +},{"../internals/to-length":343}],300:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); +var fails = require('../internals/fails'); +var isCallable = require('../internals/is-callable'); +var hasOwn = require('../internals/has-own-property'); +var DESCRIPTORS = require('../internals/descriptors'); +var CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE; +var inspectSource = require('../internals/inspect-source'); +var InternalStateModule = require('../internals/internal-state'); + +var enforceInternalState = InternalStateModule.enforce; +var getInternalState = InternalStateModule.get; +var $String = String; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty = Object.defineProperty; +var stringSlice = uncurryThis(''.slice); +var replace = uncurryThis(''.replace); +var join = uncurryThis([].join); + +var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () { + return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8; +}); + +var TEMPLATE = String(String).split('String'); + +var makeBuiltIn = module.exports = function (value, name, options) { + if (stringSlice($String(name), 0, 7) === 'Symbol(') { + name = '[' + replace($String(name), /^Symbol\(([^)]*)\)/, '$1') + ']'; + } + if (options && options.getter) name = 'get ' + name; + if (options && options.setter) name = 'set ' + name; + if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { + if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true }); + else value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) { + defineProperty(value, 'length', { value: options.arity }); + } + try { + if (options && hasOwn(options, 'constructor') && options.constructor) { + if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false }); + // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable + } else if (value.prototype) value.prototype = undefined; + } catch (error) { /* empty */ } + var state = enforceInternalState(value); + if (!hasOwn(state, 'source')) { + state.source = join(TEMPLATE, typeof name == 'string' ? name : ''); + } return value; +}; + +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +// eslint-disable-next-line no-extend-native -- required +Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); +}, 'toString'); + +},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-name":265,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/inspect-source":281,"../internals/internal-state":282,"../internals/is-callable":285}],301:[function(require,module,exports){ +'use strict'; +var ceil = Math.ceil; +var floor = Math.floor; + +// `Math.trunc` method +// https://tc39.es/ecma262/#sec-math.trunc +// eslint-disable-next-line es/no-math-trunc -- safe +module.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); +}; + +},{}],302:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var bind = require('../internals/function-bind-context'); +var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f; +var macrotask = require('../internals/task').set; +var Queue = require('../internals/queue'); +var IS_IOS = require('../internals/engine-is-ios'); +var IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble'); +var IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit'); +var IS_NODE = require('../internals/engine-is-node'); + +var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; +var document = global.document; +var process = global.process; +var Promise = global.Promise; +// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` +var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); +var microtask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; +var notify, toggle, node, promise, then; + +// modern engines have queueMicrotask method +if (!microtask) { + var queue = new Queue(); + + var flush = function () { + var parent, fn; + if (IS_NODE && (parent = process.domain)) parent.exit(); + while (fn = queue.get()) try { + fn(); + } catch (error) { + if (queue.head) notify(); + throw error; + } + if (parent) parent.enter(); + }; + + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898 + if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) { + toggle = true; + node = document.createTextNode(''); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise.resolve(undefined); + // workaround of WebKit ~ iOS Safari 10.1 bug + promise.constructor = Promise; + then = bind(promise.then, promise); + notify = function () { + then(flush); + }; + // Node.js without promises + } else if (IS_NODE) { + notify = function () { + process.nextTick(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessage + // - onreadystatechange + // - setTimeout + } else { + // `webpack` dev server bug on IE global methods - use bind(fn, global) + macrotask = bind(macrotask, global); + notify = function () { + macrotask(flush); + }; + } + + microtask = function (fn) { + if (!queue.head) notify(); + queue.add(fn); + }; +} + +module.exports = microtask; + +},{"../internals/engine-is-ios":253,"../internals/engine-is-ios-pebble":252,"../internals/engine-is-node":254,"../internals/engine-is-webos-webkit":255,"../internals/function-bind-context":262,"../internals/global":274,"../internals/object-get-own-property-descriptor":309,"../internals/queue":328,"../internals/task":339}],303:[function(require,module,exports){ +'use strict'; +var aCallable = require('../internals/a-callable'); + +var $TypeError = TypeError; + +var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable(resolve); + this.reject = aCallable(reject); +}; + +// `NewPromiseCapability` abstract operation +// https://tc39.es/ecma262/#sec-newpromisecapability +module.exports.f = function (C) { + return new PromiseCapability(C); +}; + +},{"../internals/a-callable":222}],304:[function(require,module,exports){ +'use strict'; +var isRegExp = require('../internals/is-regexp'); + +var $TypeError = TypeError; + +module.exports = function (it) { + if (isRegExp(it)) { + throw new $TypeError("The method doesn't accept regular expressions"); + } return it; +}; + +},{"../internals/is-regexp":291}],305:[function(require,module,exports){ +'use strict'; +var DESCRIPTORS = require('../internals/descriptors'); +var uncurryThis = require('../internals/function-uncurry-this'); +var call = require('../internals/function-call'); +var fails = require('../internals/fails'); +var objectKeys = require('../internals/object-keys'); +var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols'); +var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable'); +var toObject = require('../internals/to-object'); +var IndexedObject = require('../internals/indexed-object'); + +// eslint-disable-next-line es/no-object-assign -- safe +var $assign = Object.assign; +// eslint-disable-next-line es/no-object-defineproperty -- required for testing +var defineProperty = Object.defineProperty; +var concat = uncurryThis([].concat); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +module.exports = !$assign || fails(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', { + enumerable: true, + get: function () { + defineProperty(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line es/no-symbol -- safe + var symbol = Symbol('assign detection'); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet; +}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + while (argumentsLength > index) { + var S = IndexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } return T; +} : $assign; + +},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/object-get-own-property-symbols":312,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-object":344}],306:[function(require,module,exports){ +'use strict'; +/* global ActiveXObject -- old IE, WSH */ +var anObject = require('../internals/an-object'); +var definePropertiesModule = require('../internals/object-define-properties'); +var enumBugKeys = require('../internals/enum-bug-keys'); +var hiddenKeys = require('../internals/hidden-keys'); +var html = require('../internals/html'); +var documentCreateElement = require('../internals/document-create-element'); +var sharedKey = require('../internals/shared-key'); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.es/ecma262/#sec-object.create +// eslint-disable-next-line es/no-object-create -- safe +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : definePropertiesModule.f(result, Properties); +}; + +},{"../internals/an-object":227,"../internals/document-create-element":249,"../internals/enum-bug-keys":258,"../internals/hidden-keys":276,"../internals/html":278,"../internals/object-define-properties":307,"../internals/shared-key":332}],307:[function(require,module,exports){ +'use strict'; +var DESCRIPTORS = require('../internals/descriptors'); +var V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug'); +var definePropertyModule = require('../internals/object-define-property'); +var anObject = require('../internals/an-object'); +var toIndexedObject = require('../internals/to-indexed-object'); +var objectKeys = require('../internals/object-keys'); + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe +exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]); + return O; +}; + +},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/object-define-property":308,"../internals/object-keys":316,"../internals/to-indexed-object":341,"../internals/v8-prototype-define-bug":352}],308:[function(require,module,exports){ +'use strict'; +var DESCRIPTORS = require('../internals/descriptors'); +var IE8_DOM_DEFINE = require('../internals/ie8-dom-define'); +var V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug'); +var anObject = require('../internals/an-object'); +var toPropertyKey = require('../internals/to-property-key'); + +var $TypeError = TypeError; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var $defineProperty = Object.defineProperty; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var ENUMERABLE = 'enumerable'; +var CONFIGURABLE = 'configurable'; +var WRITABLE = 'writable'; + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } return $defineProperty(O, P, Attributes); +} : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + +},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/ie8-dom-define":279,"../internals/to-property-key":346,"../internals/v8-prototype-define-bug":352}],309:[function(require,module,exports){ +'use strict'; +var DESCRIPTORS = require('../internals/descriptors'); +var call = require('../internals/function-call'); +var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); +var toIndexedObject = require('../internals/to-indexed-object'); +var toPropertyKey = require('../internals/to-property-key'); +var hasOwn = require('../internals/has-own-property'); +var IE8_DOM_DEFINE = require('../internals/ie8-dom-define'); + +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); +}; + +},{"../internals/create-property-descriptor":242,"../internals/descriptors":247,"../internals/function-call":264,"../internals/has-own-property":275,"../internals/ie8-dom-define":279,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341,"../internals/to-property-key":346}],310:[function(require,module,exports){ +'use strict'; +/* eslint-disable es/no-object-getownpropertynames -- safe */ +var classof = require('../internals/classof-raw'); +var toIndexedObject = require('../internals/to-indexed-object'); +var $getOwnPropertyNames = require('../internals/object-get-own-property-names').f; +var arraySlice = require('../internals/array-slice-simple'); + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function (it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } +}; + +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +module.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) === 'Window' + ? getWindowNames(it) + : $getOwnPropertyNames(toIndexedObject(it)); +}; + +},{"../internals/array-slice-simple":230,"../internals/classof-raw":235,"../internals/object-get-own-property-names":311,"../internals/to-indexed-object":341}],311:[function(require,module,exports){ +'use strict'; +var internalObjectKeys = require('../internals/object-keys-internal'); +var enumBugKeys = require('../internals/enum-bug-keys'); + +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +// eslint-disable-next-line es/no-object-getownpropertynames -- safe +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); +}; + +},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],312:[function(require,module,exports){ +'use strict'; +// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe +exports.f = Object.getOwnPropertySymbols; + +},{}],313:[function(require,module,exports){ +'use strict'; +var hasOwn = require('../internals/has-own-property'); +var isCallable = require('../internals/is-callable'); +var toObject = require('../internals/to-object'); +var sharedKey = require('../internals/shared-key'); +var CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter'); + +var IE_PROTO = sharedKey('IE_PROTO'); +var $Object = Object; +var ObjectPrototype = $Object.prototype; + +// `Object.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.getprototypeof +// eslint-disable-next-line es/no-object-getprototypeof -- safe +module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } return object instanceof $Object ? ObjectPrototype : null; +}; + +},{"../internals/correct-prototype-getter":239,"../internals/has-own-property":275,"../internals/is-callable":285,"../internals/shared-key":332,"../internals/to-object":344}],314:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); + +module.exports = uncurryThis({}.isPrototypeOf); + +},{"../internals/function-uncurry-this":268}],315:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); +var hasOwn = require('../internals/has-own-property'); +var toIndexedObject = require('../internals/to-indexed-object'); +var indexOf = require('../internals/array-includes').indexOf; +var hiddenKeys = require('../internals/hidden-keys'); + +var push = uncurryThis([].push); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; +}; + +},{"../internals/array-includes":228,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/to-indexed-object":341}],316:[function(require,module,exports){ +'use strict'; +var internalObjectKeys = require('../internals/object-keys-internal'); +var enumBugKeys = require('../internals/enum-bug-keys'); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +// eslint-disable-next-line es/no-object-keys -- safe +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + +},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],317:[function(require,module,exports){ +'use strict'; +var $propertyIsEnumerable = {}.propertyIsEnumerable; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable; + +},{}],318:[function(require,module,exports){ +'use strict'; +/* eslint-disable no-proto -- safe */ +var uncurryThisAccessor = require('../internals/function-uncurry-this-accessor'); +var anObject = require('../internals/an-object'); +var aPossiblePrototype = require('../internals/a-possible-prototype'); + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +// eslint-disable-next-line es/no-object-setprototypeof -- safe +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set'); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + +},{"../internals/a-possible-prototype":224,"../internals/an-object":227,"../internals/function-uncurry-this-accessor":266}],319:[function(require,module,exports){ +'use strict'; +var DESCRIPTORS = require('../internals/descriptors'); +var fails = require('../internals/fails'); +var uncurryThis = require('../internals/function-uncurry-this'); +var objectGetPrototypeOf = require('../internals/object-get-prototype-of'); +var objectKeys = require('../internals/object-keys'); +var toIndexedObject = require('../internals/to-indexed-object'); +var $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f; + +var propertyIsEnumerable = uncurryThis($propertyIsEnumerable); +var push = uncurryThis([].push); + +// in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys +// of `null` prototype objects +var IE_BUG = DESCRIPTORS && fails(function () { + // eslint-disable-next-line es/no-object-create -- safe + var O = Object.create(null); + O[2] = 2; + return !propertyIsEnumerable(O, 2); +}); + +// `Object.{ entries, values }` methods implementation +var createMethod = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null; + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!DESCRIPTORS || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) { + push(result, TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; +}; + +module.exports = { + // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + entries: createMethod(true), + // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + values: createMethod(false) +}; + +},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-uncurry-this":268,"../internals/object-get-prototype-of":313,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341}],320:[function(require,module,exports){ +'use strict'; +var call = require('../internals/function-call'); +var isCallable = require('../internals/is-callable'); +var isObject = require('../internals/is-object'); + +var $TypeError = TypeError; + +// `OrdinaryToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-ordinarytoprimitive +module.exports = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + throw new $TypeError("Can't convert object to primitive value"); +}; + +},{"../internals/function-call":264,"../internals/is-callable":285,"../internals/is-object":289}],321:[function(require,module,exports){ +'use strict'; +var getBuiltIn = require('../internals/get-built-in'); +var uncurryThis = require('../internals/function-uncurry-this'); +var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names'); +var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols'); +var anObject = require('../internals/an-object'); + +var concat = uncurryThis([].concat); + +// all object keys, includes non-enumerable and symbols +module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; +}; + +},{"../internals/an-object":227,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-symbols":312}],322:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); + +module.exports = global; + +},{"../internals/global":274}],323:[function(require,module,exports){ +'use strict'; +module.exports = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } +}; + +},{}],324:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var NativePromiseConstructor = require('../internals/promise-native-constructor'); +var isCallable = require('../internals/is-callable'); +var isForced = require('../internals/is-forced'); +var inspectSource = require('../internals/inspect-source'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var IS_BROWSER = require('../internals/engine-is-browser'); +var IS_DENO = require('../internals/engine-is-deno'); +var IS_PURE = require('../internals/is-pure'); +var V8_VERSION = require('../internals/engine-v8-version'); + +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; +var SPECIES = wellKnownSymbol('species'); +var SUBCLASSING = false; +var NATIVE_PROMISE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent); + +var FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor); + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true; + // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution + if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) { + // Detect correctness of subclassing with @@species support + var promise = new NativePromiseConstructor(function (resolve) { resolve(1); }); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise; + if (!SUBCLASSING) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + } return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT; +}); + +module.exports = { + CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR, + REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT, + SUBCLASSING: SUBCLASSING +}; + +},{"../internals/engine-is-browser":250,"../internals/engine-is-deno":251,"../internals/engine-v8-version":257,"../internals/global":274,"../internals/inspect-source":281,"../internals/is-callable":285,"../internals/is-forced":287,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/well-known-symbol":357}],325:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); + +module.exports = global.Promise; + +},{"../internals/global":274}],326:[function(require,module,exports){ +'use strict'; +var anObject = require('../internals/an-object'); +var isObject = require('../internals/is-object'); +var newPromiseCapability = require('../internals/new-promise-capability'); + +module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + +},{"../internals/an-object":227,"../internals/is-object":289,"../internals/new-promise-capability":303}],327:[function(require,module,exports){ +'use strict'; +var NativePromiseConstructor = require('../internals/promise-native-constructor'); +var checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration'); +var FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR; + +module.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) { + NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ }); +}); + +},{"../internals/check-correctness-of-iteration":234,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],328:[function(require,module,exports){ +'use strict'; +var Queue = function () { + this.head = null; + this.tail = null; +}; + +Queue.prototype = { + add: function (item) { + var entry = { item: item, next: null }; + var tail = this.tail; + if (tail) tail.next = entry; + else this.head = entry; + this.tail = entry; + }, + get: function () { + var entry = this.head; + if (entry) { + var next = this.head = entry.next; + if (next === null) this.tail = null; + return entry.item; + } + } +}; + +module.exports = Queue; + +},{}],329:[function(require,module,exports){ +'use strict'; +var isNullOrUndefined = require('../internals/is-null-or-undefined'); + +var $TypeError = TypeError; + +// `RequireObjectCoercible` abstract operation +// https://tc39.es/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it); + return it; +}; + +},{"../internals/is-null-or-undefined":288}],330:[function(require,module,exports){ +'use strict'; +var getBuiltIn = require('../internals/get-built-in'); +var defineBuiltInAccessor = require('../internals/define-built-in-accessor'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var DESCRIPTORS = require('../internals/descriptors'); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineBuiltInAccessor(Constructor, SPECIES, { + configurable: true, + get: function () { return this; } + }); + } +}; + +},{"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],331:[function(require,module,exports){ +'use strict'; +var defineProperty = require('../internals/object-define-property').f; +var hasOwn = require('../internals/has-own-property'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (target, TAG, STATIC) { + if (target && !STATIC) target = target.prototype; + if (target && !hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } +}; + +},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],332:[function(require,module,exports){ +'use strict'; +var shared = require('../internals/shared'); +var uid = require('../internals/uid'); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + +},{"../internals/shared":334,"../internals/uid":350}],333:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var defineGlobalProperty = require('../internals/define-global-property'); + +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || defineGlobalProperty(SHARED, {}); + +module.exports = store; + +},{"../internals/define-global-property":246,"../internals/global":274}],334:[function(require,module,exports){ +'use strict'; +var IS_PURE = require('../internals/is-pure'); +var store = require('../internals/shared-store'); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.33.0', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE', + source: 'https://github.com/zloirock/core-js' +}); + +},{"../internals/is-pure":290,"../internals/shared-store":333}],335:[function(require,module,exports){ +'use strict'; +var anObject = require('../internals/an-object'); +var aConstructor = require('../internals/a-constructor'); +var isNullOrUndefined = require('../internals/is-null-or-undefined'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var SPECIES = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.es/ecma262/#sec-speciesconstructor +module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S); +}; + +},{"../internals/a-constructor":223,"../internals/an-object":227,"../internals/is-null-or-undefined":288,"../internals/well-known-symbol":357}],336:[function(require,module,exports){ +'use strict'; +/* eslint-disable es/no-symbol -- required for testing */ +var V8_VERSION = require('../internals/engine-v8-version'); +var fails = require('../internals/fails'); +var global = require('../internals/global'); + +var $String = global.String; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol('symbol detection'); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will, + // of course, fail. + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; +}); + +},{"../internals/engine-v8-version":257,"../internals/fails":260,"../internals/global":274}],337:[function(require,module,exports){ +'use strict'; +var call = require('../internals/function-call'); +var getBuiltIn = require('../internals/get-built-in'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var defineBuiltIn = require('../internals/define-built-in'); + +module.exports = function () { + var Symbol = getBuiltIn('Symbol'); + var SymbolPrototype = Symbol && Symbol.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + // `Symbol.prototype[@@toPrimitive]` method + // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive + // eslint-disable-next-line no-unused-vars -- required for .length + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) { + return call(valueOf, this); + }, { arity: 1 }); + } +}; + +},{"../internals/define-built-in":245,"../internals/function-call":264,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],338:[function(require,module,exports){ +'use strict'; +var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection'); + +/* eslint-disable es/no-symbol -- safe */ +module.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor; + +},{"../internals/symbol-constructor-detection":336}],339:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var apply = require('../internals/function-apply'); +var bind = require('../internals/function-bind-context'); +var isCallable = require('../internals/is-callable'); +var hasOwn = require('../internals/has-own-property'); +var fails = require('../internals/fails'); +var html = require('../internals/html'); +var arraySlice = require('../internals/array-slice'); +var createElement = require('../internals/document-create-element'); +var validateArgumentsLength = require('../internals/validate-arguments-length'); +var IS_IOS = require('../internals/engine-is-ios'); +var IS_NODE = require('../internals/engine-is-node'); + +var set = global.setImmediate; +var clear = global.clearImmediate; +var process = global.process; +var Dispatch = global.Dispatch; +var Function = global.Function; +var MessageChannel = global.MessageChannel; +var String = global.String; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var $location, defer, channel, port; + +fails(function () { + // Deno throws a ReferenceError on `location` access without `--location` flag + $location = global.location; +}); + +var run = function (id) { + if (hasOwn(queue, id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; + +var runner = function (id) { + return function () { + run(id); + }; +}; + +var eventListener = function (event) { + run(event.data); +}; + +var globalPostMessageDefer = function (id) { + // old engines have not location.origin + global.postMessage(String(id), $location.protocol + '//' + $location.host); +}; + +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!set || !clear) { + set = function setImmediate(handler) { + validateArgumentsLength(arguments.length, 1); + var fn = isCallable(handler) ? handler : Function(handler); + var args = arraySlice(arguments, 1); + queue[++counter] = function () { + apply(fn, undefined, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (IS_NODE) { + defer = function (id) { + process.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = eventListener; + defer = bind(port.postMessage, port); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if ( + global.addEventListener && + isCallable(global.postMessage) && + !global.importScripts && + $location && $location.protocol !== 'file:' && + !fails(globalPostMessageDefer) + ) { + defer = globalPostMessageDefer; + global.addEventListener('message', eventListener, false); + // IE8- + } else if (ONREADYSTATECHANGE in createElement('script')) { + defer = function (id) { + html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } +} + +module.exports = { + set: set, + clear: clear +}; + +},{"../internals/array-slice":231,"../internals/document-create-element":249,"../internals/engine-is-ios":253,"../internals/engine-is-node":254,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-bind-context":262,"../internals/global":274,"../internals/has-own-property":275,"../internals/html":278,"../internals/is-callable":285,"../internals/validate-arguments-length":353}],340:[function(require,module,exports){ +'use strict'; +var toIntegerOrInfinity = require('../internals/to-integer-or-infinity'); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + +},{"../internals/to-integer-or-infinity":342}],341:[function(require,module,exports){ +'use strict'; +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = require('../internals/indexed-object'); +var requireObjectCoercible = require('../internals/require-object-coercible'); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + +},{"../internals/indexed-object":280,"../internals/require-object-coercible":329}],342:[function(require,module,exports){ +'use strict'; +var trunc = require('../internals/math-trunc'); + +// `ToIntegerOrInfinity` abstract operation +// https://tc39.es/ecma262/#sec-tointegerorinfinity +module.exports = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number || number === 0 ? 0 : trunc(number); +}; + +},{"../internals/math-trunc":301}],343:[function(require,module,exports){ +'use strict'; +var toIntegerOrInfinity = require('../internals/to-integer-or-infinity'); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength +module.exports = function (argument) { + return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + +},{"../internals/to-integer-or-infinity":342}],344:[function(require,module,exports){ +'use strict'; +var requireObjectCoercible = require('../internals/require-object-coercible'); + +var $Object = Object; + +// `ToObject` abstract operation +// https://tc39.es/ecma262/#sec-toobject +module.exports = function (argument) { + return $Object(requireObjectCoercible(argument)); +}; + +},{"../internals/require-object-coercible":329}],345:[function(require,module,exports){ +'use strict'; +var call = require('../internals/function-call'); +var isObject = require('../internals/is-object'); +var isSymbol = require('../internals/is-symbol'); +var getMethod = require('../internals/get-method'); +var ordinaryToPrimitive = require('../internals/ordinary-to-primitive'); +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var $TypeError = TypeError; +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + +// `ToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-toprimitive +module.exports = function (input, pref) { + if (!isObject(input) || isSymbol(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); +}; + +},{"../internals/function-call":264,"../internals/get-method":273,"../internals/is-object":289,"../internals/is-symbol":292,"../internals/ordinary-to-primitive":320,"../internals/well-known-symbol":357}],346:[function(require,module,exports){ +'use strict'; +var toPrimitive = require('../internals/to-primitive'); +var isSymbol = require('../internals/is-symbol'); + +// `ToPropertyKey` abstract operation +// https://tc39.es/ecma262/#sec-topropertykey +module.exports = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; +}; + +},{"../internals/is-symbol":292,"../internals/to-primitive":345}],347:[function(require,module,exports){ +'use strict'; +var wellKnownSymbol = require('../internals/well-known-symbol'); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + +},{"../internals/well-known-symbol":357}],348:[function(require,module,exports){ +'use strict'; +var classof = require('../internals/classof'); + +var $String = String; + +module.exports = function (argument) { + if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string'); + return $String(argument); +}; + +},{"../internals/classof":236}],349:[function(require,module,exports){ +'use strict'; +var $String = String; + +module.exports = function (argument) { + try { + return $String(argument); + } catch (error) { + return 'Object'; + } +}; + +},{}],350:[function(require,module,exports){ +'use strict'; +var uncurryThis = require('../internals/function-uncurry-this'); + +var id = 0; +var postfix = Math.random(); +var toString = uncurryThis(1.0.toString); + +module.exports = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36); +}; + +},{"../internals/function-uncurry-this":268}],351:[function(require,module,exports){ +'use strict'; +/* eslint-disable es/no-symbol -- required for testing */ +var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection'); + +module.exports = NATIVE_SYMBOL + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + +},{"../internals/symbol-constructor-detection":336}],352:[function(require,module,exports){ +'use strict'; +var DESCRIPTORS = require('../internals/descriptors'); +var fails = require('../internals/fails'); + +// V8 ~ Chrome 36- +// https://bugs.chromium.org/p/v8/issues/detail?id=3334 +module.exports = DESCRIPTORS && fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(function () { /* empty */ }, 'prototype', { + value: 42, + writable: false + }).prototype !== 42; +}); + +},{"../internals/descriptors":247,"../internals/fails":260}],353:[function(require,module,exports){ +'use strict'; +var $TypeError = TypeError; + +module.exports = function (passed, required) { + if (passed < required) throw new $TypeError('Not enough arguments'); + return passed; +}; + +},{}],354:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var isCallable = require('../internals/is-callable'); + +var WeakMap = global.WeakMap; + +module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + +},{"../internals/global":274,"../internals/is-callable":285}],355:[function(require,module,exports){ +'use strict'; +var path = require('../internals/path'); +var hasOwn = require('../internals/has-own-property'); +var wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped'); +var defineProperty = require('../internals/object-define-property').f; + +module.exports = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); +}; + +},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/path":322,"../internals/well-known-symbol-wrapped":356}],356:[function(require,module,exports){ +'use strict'; +var wellKnownSymbol = require('../internals/well-known-symbol'); + +exports.f = wellKnownSymbol; + +},{"../internals/well-known-symbol":357}],357:[function(require,module,exports){ +'use strict'; +var global = require('../internals/global'); +var shared = require('../internals/shared'); +var hasOwn = require('../internals/has-own-property'); +var uid = require('../internals/uid'); +var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection'); +var USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid'); + +var Symbol = global.Symbol; +var WellKnownSymbolsStore = shared('wks'); +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name) + ? Symbol[name] + : createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; +}; + +},{"../internals/global":274,"../internals/has-own-property":275,"../internals/shared":334,"../internals/symbol-constructor-detection":336,"../internals/uid":350,"../internals/use-symbol-as-uid":351}],358:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var $findIndex = require('../internals/array-iteration').findIndex; +var addToUnscopables = require('../internals/add-to-unscopables'); + +var FIND_INDEX = 'findIndex'; +var SKIPS_HOLES = true; + +// Shouldn't skip holes +// eslint-disable-next-line es/no-array-prototype-findindex -- testing +if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.findIndex` method +// https://tc39.es/ecma262/#sec-array.prototype.findindex +$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { + findIndex: function findIndex(callbackfn /* , that = undefined */) { + return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND_INDEX); + +},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],359:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var $find = require('../internals/array-iteration').find; +var addToUnscopables = require('../internals/add-to-unscopables'); + +var FIND = 'find'; +var SKIPS_HOLES = true; + +// Shouldn't skip holes +// eslint-disable-next-line es/no-array-prototype-find -- testing +if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.find` method +// https://tc39.es/ecma262/#sec-array.prototype.find +$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND); + +},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],360:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var $includes = require('../internals/array-includes').includes; +var fails = require('../internals/fails'); +var addToUnscopables = require('../internals/add-to-unscopables'); + +// FF99+ bug +var BROKEN_ON_SPARSE = fails(function () { + // eslint-disable-next-line es/no-array-prototype-includes -- detection + return !Array(1).includes(); +}); + +// `Array.prototype.includes` method +// https://tc39.es/ecma262/#sec-array.prototype.includes +$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('includes'); + +},{"../internals/add-to-unscopables":225,"../internals/array-includes":228,"../internals/export":259,"../internals/fails":260}],361:[function(require,module,exports){ +'use strict'; +var toIndexedObject = require('../internals/to-indexed-object'); +var addToUnscopables = require('../internals/add-to-unscopables'); +var Iterators = require('../internals/iterators'); +var InternalStateModule = require('../internals/internal-state'); +var defineProperty = require('../internals/object-define-property').f; +var defineIterator = require('../internals/iterator-define'); +var createIterResultObject = require('../internals/create-iter-result-object'); +var IS_PURE = require('../internals/is-pure'); +var DESCRIPTORS = require('../internals/descriptors'); + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + +// `Array.prototype.entries` method +// https://tc39.es/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.es/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.es/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.es/ecma262/#sec-createarrayiterator +module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); +// `%ArrayIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return createIterResultObject(undefined, true); + } + switch (kind) { + case 'keys': return createIterResultObject(index, false); + case 'values': return createIterResultObject(target[index], false); + } return createIterResultObject([index, target[index]], false); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.es/ecma262/#sec-createunmappedargumentsobject +// https://tc39.es/ecma262/#sec-createmappedargumentsobject +var values = Iterators.Arguments = Iterators.Array; + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + +// V8 ~ Chrome 45- bug +if (!IS_PURE && DESCRIPTORS && values.name !== 'values') try { + defineProperty(values, 'name', { value: 'values' }); +} catch (error) { /* empty */ } + +},{"../internals/add-to-unscopables":225,"../internals/create-iter-result-object":240,"../internals/descriptors":247,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/iterator-define":296,"../internals/iterators":298,"../internals/object-define-property":308,"../internals/to-indexed-object":341}],362:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var getBuiltIn = require('../internals/get-built-in'); +var apply = require('../internals/function-apply'); +var call = require('../internals/function-call'); +var uncurryThis = require('../internals/function-uncurry-this'); +var fails = require('../internals/fails'); +var isCallable = require('../internals/is-callable'); +var isSymbol = require('../internals/is-symbol'); +var arraySlice = require('../internals/array-slice'); +var getReplacerFunction = require('../internals/get-json-replacer-function'); +var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection'); + +var $String = String; +var $stringify = getBuiltIn('JSON', 'stringify'); +var exec = uncurryThis(/./.exec); +var charAt = uncurryThis(''.charAt); +var charCodeAt = uncurryThis(''.charCodeAt); +var replace = uncurryThis(''.replace); +var numberToString = uncurryThis(1.0.toString); + +var tester = /[\uD800-\uDFFF]/g; +var low = /^[\uD800-\uDBFF]$/; +var hi = /^[\uDC00-\uDFFF]$/; + +var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () { + var symbol = getBuiltIn('Symbol')('stringify detection'); + // MS Edge converts symbol values to JSON as {} + return $stringify([symbol]) !== '[null]' + // WebKit converts symbol values to JSON as null + || $stringify({ a: symbol }) !== '{}' + // V8 throws on boxed symbols + || $stringify(Object(symbol)) !== '{}'; +}); + +// https://github.com/tc39/proposal-well-formed-stringify +var ILL_FORMED_UNICODE = fails(function () { + return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"' + || $stringify('\uDEAD') !== '"\\udead"'; +}); + +var stringifyWithSymbolsFix = function (it, replacer) { + var args = arraySlice(arguments); + var $replacer = getReplacerFunction(replacer); + if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined + args[1] = function (key, value) { + // some old implementations (like WebKit) could pass numbers as keys + if (isCallable($replacer)) value = call($replacer, this, $String(key), value); + if (!isSymbol(value)) return value; + }; + return apply($stringify, null, args); +}; + +var fixIllFormed = function (match, offset, string) { + var prev = charAt(string, offset - 1); + var next = charAt(string, offset + 1); + if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) { + return '\\u' + numberToString(charCodeAt(match, 0), 16); + } return match; +}; + +if ($stringify) { + // `JSON.stringify` method + // https://tc39.es/ecma262/#sec-json.stringify + $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result; + } + }); +} + +},{"../internals/array-slice":231,"../internals/export":259,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/get-json-replacer-function":272,"../internals/is-callable":285,"../internals/is-symbol":292,"../internals/symbol-constructor-detection":336}],363:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); + +// `Number.isNaN` method +// https://tc39.es/ecma262/#sec-number.isnan +$({ target: 'Number', stat: true }, { + isNaN: function isNaN(number) { + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number; + } +}); + +},{"../internals/export":259}],364:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var assign = require('../internals/object-assign'); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +// eslint-disable-next-line es/no-object-assign -- required for testing +$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, { + assign: assign +}); + +},{"../internals/export":259,"../internals/object-assign":305}],365:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection'); +var fails = require('../internals/fails'); +var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols'); +var toObject = require('../internals/to-object'); + +// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives +// https://bugs.chromium.org/p/v8/issues/detail?id=3443 +var FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); }); + +// `Object.getOwnPropertySymbols` method +// https://tc39.es/ecma262/#sec-object.getownpropertysymbols +$({ target: 'Object', stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } +}); + +},{"../internals/export":259,"../internals/fails":260,"../internals/object-get-own-property-symbols":312,"../internals/symbol-constructor-detection":336,"../internals/to-object":344}],366:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var toObject = require('../internals/to-object'); +var nativeKeys = require('../internals/object-keys'); +var fails = require('../internals/fails'); + +var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); }); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { + keys: function keys(it) { + return nativeKeys(toObject(it)); + } +}); + +},{"../internals/export":259,"../internals/fails":260,"../internals/object-keys":316,"../internals/to-object":344}],367:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var $values = require('../internals/object-to-array').values; + +// `Object.values` method +// https://tc39.es/ecma262/#sec-object.values +$({ target: 'Object', stat: true }, { + values: function values(O) { + return $values(O); + } +}); + +},{"../internals/export":259,"../internals/object-to-array":319}],368:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var call = require('../internals/function-call'); +var aCallable = require('../internals/a-callable'); +var newPromiseCapabilityModule = require('../internals/new-promise-capability'); +var perform = require('../internals/perform'); +var iterate = require('../internals/iterate'); +var PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration'); + +// `Promise.all` method +// https://tc39.es/ecma262/#sec-promise.all +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + all: function all(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call($promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + +},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],369:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var IS_PURE = require('../internals/is-pure'); +var FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR; +var NativePromiseConstructor = require('../internals/promise-native-constructor'); +var getBuiltIn = require('../internals/get-built-in'); +var isCallable = require('../internals/is-callable'); +var defineBuiltIn = require('../internals/define-built-in'); + +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + +// `Promise.prototype.catch` method +// https://tc39.es/ecma262/#sec-promise.prototype.catch +$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, { + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } +}); + +// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` +if (!IS_PURE && isCallable(NativePromiseConstructor)) { + var method = getBuiltIn('Promise').prototype['catch']; + if (NativePromisePrototype['catch'] !== method) { + defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true }); + } +} + +},{"../internals/define-built-in":245,"../internals/export":259,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],370:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var IS_PURE = require('../internals/is-pure'); +var IS_NODE = require('../internals/engine-is-node'); +var global = require('../internals/global'); +var call = require('../internals/function-call'); +var defineBuiltIn = require('../internals/define-built-in'); +var setPrototypeOf = require('../internals/object-set-prototype-of'); +var setToStringTag = require('../internals/set-to-string-tag'); +var setSpecies = require('../internals/set-species'); +var aCallable = require('../internals/a-callable'); +var isCallable = require('../internals/is-callable'); +var isObject = require('../internals/is-object'); +var anInstance = require('../internals/an-instance'); +var speciesConstructor = require('../internals/species-constructor'); +var task = require('../internals/task').set; +var microtask = require('../internals/microtask'); +var hostReportErrors = require('../internals/host-report-errors'); +var perform = require('../internals/perform'); +var Queue = require('../internals/queue'); +var InternalStateModule = require('../internals/internal-state'); +var NativePromiseConstructor = require('../internals/promise-native-constructor'); +var PromiseConstructorDetection = require('../internals/promise-constructor-detection'); +var newPromiseCapabilityModule = require('../internals/new-promise-capability'); + +var PROMISE = 'Promise'; +var FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR; +var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT; +var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING; +var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); +var setInternalState = InternalStateModule.set; +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; +var PromiseConstructor = NativePromiseConstructor; +var PromisePrototype = NativePromisePrototype; +var TypeError = global.TypeError; +var document = global.document; +var process = global.process; +var newPromiseCapability = newPromiseCapabilityModule.f; +var newGenericPromiseCapability = newPromiseCapability; + +var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); +var UNHANDLED_REJECTION = 'unhandledrejection'; +var REJECTION_HANDLED = 'rejectionhandled'; +var PENDING = 0; +var FULFILLED = 1; +var REJECTED = 2; +var HANDLED = 1; +var UNHANDLED = 2; + +var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + +// helpers +var isThenable = function (it) { + var then; + return isObject(it) && isCallable(then = it.then) ? then : false; +}; + +var callReaction = function (reaction, state) { + var value = state.value; + var ok = state.state === FULFILLED; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(new TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + call(then, result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } +}; + +var notify = function (state, isReject) { + if (state.notified) return; + state.notified = true; + microtask(function () { + var reactions = state.reactions; + var reaction; + while (reaction = reactions.get()) { + callReaction(reaction, state); + } + state.notified = false; + if (isReject && !state.rejection) onUnhandled(state); + }); +}; + +var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global['on' + name])) handler(event); + else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); +}; + +var onUnhandled = function (state) { + call(task, global, function () { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (IS_NODE) { + process.emit('unhandledRejection', value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); +}; + +var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; +}; + +var onHandleUnhandled = function (state) { + call(task, global, function () { + var promise = state.facade; + if (IS_NODE) { + process.emit('rejectionHandled', promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); +}; + +var bind = function (fn, state, unwrap) { + return function (value) { + fn(state, value, unwrap); + }; +}; + +var internalReject = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); +}; + +var internalResolve = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (state.facade === value) throw new TypeError("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + call(then, value, + bind(internalResolve, wrapper, state), + bind(internalReject, wrapper, state) + ); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ done: false }, error, state); + } +}; + +// constructor polyfill +if (FORCED_PROMISE_CONSTRUCTOR) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromisePrototype); + aCallable(executor); + call(Internal, this); + var state = getInternalPromiseState(this); + try { + executor(bind(internalResolve, state), bind(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + + PromisePrototype = PromiseConstructor.prototype; + + // eslint-disable-next-line no-unused-vars -- required for `.length` + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: new Queue(), + rejection: false, + state: PENDING, + value: undefined + }); + }; + + // `Promise.prototype.then` method + // https://tc39.es/ecma262/#sec-promise.prototype.then + Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + state.parent = true; + reaction.ok = isCallable(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable(onRejected) && onRejected; + reaction.domain = IS_NODE ? process.domain : undefined; + if (state.state === PENDING) state.reactions.add(reaction); + else microtask(function () { + callReaction(reaction, state); + }); + return reaction.promise; + }); + + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalPromiseState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, state); + this.reject = bind(internalReject, state); + }; + + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + + if (!NATIVE_PROMISE_SUBCLASSING) { + // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs + defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + call(nativeThen, that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + } + + // make `.constructor === Promise` work for native promise-based APIs + try { + delete NativePromisePrototype.constructor; + } catch (error) { /* empty */ } + + // make `instanceof Promise` work for native promise-based APIs + if (setPrototypeOf) { + setPrototypeOf(NativePromisePrototype, PromisePrototype); + } + } +} + +$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + Promise: PromiseConstructor +}); + +setToStringTag(PromiseConstructor, PROMISE, false, true); +setSpecies(PROMISE); + +},{"../internals/a-callable":222,"../internals/an-instance":226,"../internals/define-built-in":245,"../internals/engine-is-node":254,"../internals/export":259,"../internals/function-call":264,"../internals/global":274,"../internals/host-report-errors":277,"../internals/internal-state":282,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/microtask":302,"../internals/new-promise-capability":303,"../internals/object-set-prototype-of":318,"../internals/perform":323,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/queue":328,"../internals/set-species":330,"../internals/set-to-string-tag":331,"../internals/species-constructor":335,"../internals/task":339}],371:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var IS_PURE = require('../internals/is-pure'); +var NativePromiseConstructor = require('../internals/promise-native-constructor'); +var fails = require('../internals/fails'); +var getBuiltIn = require('../internals/get-built-in'); +var isCallable = require('../internals/is-callable'); +var speciesConstructor = require('../internals/species-constructor'); +var promiseResolve = require('../internals/promise-resolve'); +var defineBuiltIn = require('../internals/define-built-in'); + +var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype; + +// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829 +var NON_GENERIC = !!NativePromiseConstructor && fails(function () { + // eslint-disable-next-line unicorn/no-thenable -- required for testing + NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ }); +}); + +// `Promise.prototype.finally` method +// https://tc39.es/ecma262/#sec-promise.prototype.finally +$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, { + 'finally': function (onFinally) { + var C = speciesConstructor(this, getBuiltIn('Promise')); + var isFunction = isCallable(onFinally); + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); + } +}); + +// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then` +if (!IS_PURE && isCallable(NativePromiseConstructor)) { + var method = getBuiltIn('Promise').prototype['finally']; + if (NativePromisePrototype['finally'] !== method) { + defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true }); + } +} + +},{"../internals/define-built-in":245,"../internals/export":259,"../internals/fails":260,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326,"../internals/species-constructor":335}],372:[function(require,module,exports){ +'use strict'; +// TODO: Remove this module from `core-js@4` since it's split to modules listed below +require('../modules/es.promise.constructor'); +require('../modules/es.promise.all'); +require('../modules/es.promise.catch'); +require('../modules/es.promise.race'); +require('../modules/es.promise.reject'); +require('../modules/es.promise.resolve'); + +},{"../modules/es.promise.all":368,"../modules/es.promise.catch":369,"../modules/es.promise.constructor":370,"../modules/es.promise.race":373,"../modules/es.promise.reject":374,"../modules/es.promise.resolve":375}],373:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var call = require('../internals/function-call'); +var aCallable = require('../internals/a-callable'); +var newPromiseCapabilityModule = require('../internals/new-promise-capability'); +var perform = require('../internals/perform'); +var iterate = require('../internals/iterate'); +var PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration'); + +// `Promise.race` method +// https://tc39.es/ecma262/#sec-promise.race +$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, { + race: function race(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + iterate(iterable, function (promise) { + call($promiseResolve, C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + +},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],374:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var call = require('../internals/function-call'); +var newPromiseCapabilityModule = require('../internals/new-promise-capability'); +var FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR; + +// `Promise.reject` method +// https://tc39.es/ecma262/#sec-promise.reject +$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, { + reject: function reject(r) { + var capability = newPromiseCapabilityModule.f(this); + call(capability.reject, undefined, r); + return capability.promise; + } +}); + +},{"../internals/export":259,"../internals/function-call":264,"../internals/new-promise-capability":303,"../internals/promise-constructor-detection":324}],375:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var getBuiltIn = require('../internals/get-built-in'); +var IS_PURE = require('../internals/is-pure'); +var NativePromiseConstructor = require('../internals/promise-native-constructor'); +var FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR; +var promiseResolve = require('../internals/promise-resolve'); + +var PromiseConstructorWrapper = getBuiltIn('Promise'); +var CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR; + +// `Promise.resolve` method +// https://tc39.es/ecma262/#sec-promise.resolve +$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, { + resolve: function resolve(x) { + return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x); + } +}); + +},{"../internals/export":259,"../internals/get-built-in":269,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326}],376:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var uncurryThis = require('../internals/function-uncurry-this'); +var toAbsoluteIndex = require('../internals/to-absolute-index'); + +var $RangeError = RangeError; +var fromCharCode = String.fromCharCode; +// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing +var $fromCodePoint = String.fromCodePoint; +var join = uncurryThis([].join); + +// length should be 1, old FF problem +var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length !== 1; + +// `String.fromCodePoint` method +// https://tc39.es/ecma262/#sec-string.fromcodepoint +$({ target: 'String', stat: true, arity: 1, forced: INCORRECT_LENGTH }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + fromCodePoint: function fromCodePoint(x) { + var elements = []; + var length = arguments.length; + var i = 0; + var code; + while (length > i) { + code = +arguments[i++]; + if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw new $RangeError(code + ' is not a valid code point'); + elements[i] = code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00); + } return join(elements, ''); + } +}); + +},{"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/to-absolute-index":340}],377:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var uncurryThis = require('../internals/function-uncurry-this'); +var notARegExp = require('../internals/not-a-regexp'); +var requireObjectCoercible = require('../internals/require-object-coercible'); +var toString = require('../internals/to-string'); +var correctIsRegExpLogic = require('../internals/correct-is-regexp-logic'); + +var stringIndexOf = uncurryThis(''.indexOf); + +// `String.prototype.includes` method +// https://tc39.es/ecma262/#sec-string.prototype.includes +$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~stringIndexOf( + toString(requireObjectCoercible(this)), + toString(notARegExp(searchString)), + arguments.length > 1 ? arguments[1] : undefined + ); + } +}); + +},{"../internals/correct-is-regexp-logic":238,"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/not-a-regexp":304,"../internals/require-object-coercible":329,"../internals/to-string":348}],378:[function(require,module,exports){ +'use strict'; +var defineWellKnownSymbol = require('../internals/well-known-symbol-define'); + +// `Symbol.asyncIterator` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.asynciterator +defineWellKnownSymbol('asyncIterator'); + +},{"../internals/well-known-symbol-define":355}],379:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var global = require('../internals/global'); +var call = require('../internals/function-call'); +var uncurryThis = require('../internals/function-uncurry-this'); +var IS_PURE = require('../internals/is-pure'); +var DESCRIPTORS = require('../internals/descriptors'); +var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection'); +var fails = require('../internals/fails'); +var hasOwn = require('../internals/has-own-property'); +var isPrototypeOf = require('../internals/object-is-prototype-of'); +var anObject = require('../internals/an-object'); +var toIndexedObject = require('../internals/to-indexed-object'); +var toPropertyKey = require('../internals/to-property-key'); +var $toString = require('../internals/to-string'); +var createPropertyDescriptor = require('../internals/create-property-descriptor'); +var nativeObjectCreate = require('../internals/object-create'); +var objectKeys = require('../internals/object-keys'); +var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names'); +var getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external'); +var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols'); +var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor'); +var definePropertyModule = require('../internals/object-define-property'); +var definePropertiesModule = require('../internals/object-define-properties'); +var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable'); +var defineBuiltIn = require('../internals/define-built-in'); +var defineBuiltInAccessor = require('../internals/define-built-in-accessor'); +var shared = require('../internals/shared'); +var sharedKey = require('../internals/shared-key'); +var hiddenKeys = require('../internals/hidden-keys'); +var uid = require('../internals/uid'); +var wellKnownSymbol = require('../internals/well-known-symbol'); +var wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped'); +var defineWellKnownSymbol = require('../internals/well-known-symbol-define'); +var defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive'); +var setToStringTag = require('../internals/set-to-string-tag'); +var InternalStateModule = require('../internals/internal-state'); +var $forEach = require('../internals/array-iteration').forEach; + +var HIDDEN = sharedKey('hidden'); +var SYMBOL = 'Symbol'; +var PROTOTYPE = 'prototype'; + +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(SYMBOL); + +var ObjectPrototype = Object[PROTOTYPE]; +var $Symbol = global.Symbol; +var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; +var RangeError = global.RangeError; +var TypeError = global.TypeError; +var QObject = global.QObject; +var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; +var nativeDefineProperty = definePropertyModule.f; +var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; +var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; +var push = uncurryThis([].push); + +var AllSymbols = shared('symbols'); +var ObjectPrototypeSymbols = shared('op-symbols'); +var WellKnownSymbolsStore = shared('wks'); + +// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 +var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + +// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 +var fallbackDefineProperty = function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } +}; + +var setSymbolDescriptor = DESCRIPTORS && fails(function () { + return nativeObjectCreate(nativeDefineProperty({}, 'a', { + get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; } + })).a !== 7; +}) ? fallbackDefineProperty : nativeDefineProperty; + +var wrap = function (tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) symbol.description = description; + return symbol; +}; + +var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {})); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } return setSymbolDescriptor(O, key, Attributes); + } return nativeDefineProperty(O, key, Attributes); +}; + +var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function (key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; +}; + +var $create = function create(O, Properties) { + return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); +}; + +var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] + ? enumerable : true; +}; + +var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; +}; + +var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key); + }); + return result; +}; + +var $getOwnPropertySymbols = function (O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; +}; + +// `Symbol` constructor +// https://tc39.es/ecma262/#sec-symbol-constructor +if (!NATIVE_SYMBOL) { + $Symbol = function Symbol() { + if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor'); + var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]); + var tag = uid(description); + var setter = function (value) { + if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value); + if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false; + var descriptor = createPropertyDescriptor(1, value); + try { + setSymbolDescriptor(this, tag, descriptor); + } catch (error) { + if (!(error instanceof RangeError)) throw error; + fallbackDefineProperty(this, tag, descriptor); + } + }; + if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + + SymbolPrototype = $Symbol[PROTOTYPE]; + + defineBuiltIn(SymbolPrototype, 'toString', function toString() { + return getInternalState(this).tag; + }); + + defineBuiltIn($Symbol, 'withoutSetter', function (description) { + return wrap(uid(description), description); + }); + + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + + wrappedWellKnownSymbolModule.f = function (name) { + return wrap(wellKnownSymbol(name), name); + }; + + if (DESCRIPTORS) { + // https://github.com/tc39/proposal-Symbol-description + defineBuiltInAccessor(SymbolPrototype, 'description', { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); + } + } +} + +$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol +}); + +$forEach(objectKeys(WellKnownSymbolsStore), function (name) { + defineWellKnownSymbol(name); +}); + +$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function () { USE_SETTER = true; }, + useSimple: function () { USE_SETTER = false; } +}); + +$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor +}); + +$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames +}); + +// `Symbol.prototype[@@toPrimitive]` method +// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive +defineSymbolToPrimitive(); + +// `Symbol.prototype[@@toStringTag]` property +// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag +setToStringTag($Symbol, SYMBOL); + +hiddenKeys[HIDDEN] = true; + +},{"../internals/an-object":227,"../internals/array-iteration":229,"../internals/create-property-descriptor":242,"../internals/define-built-in":245,"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/export":259,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/global":274,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-define-properties":307,"../internals/object-define-property":308,"../internals/object-get-own-property-descriptor":309,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-names-external":310,"../internals/object-get-own-property-symbols":312,"../internals/object-is-prototype-of":314,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/set-to-string-tag":331,"../internals/shared":334,"../internals/shared-key":332,"../internals/symbol-constructor-detection":336,"../internals/symbol-define-to-primitive":337,"../internals/to-indexed-object":341,"../internals/to-property-key":346,"../internals/to-string":348,"../internals/uid":350,"../internals/well-known-symbol":357,"../internals/well-known-symbol-define":355,"../internals/well-known-symbol-wrapped":356}],380:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var getBuiltIn = require('../internals/get-built-in'); +var hasOwn = require('../internals/has-own-property'); +var toString = require('../internals/to-string'); +var shared = require('../internals/shared'); +var NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection'); + +var StringToSymbolRegistry = shared('string-to-symbol-registry'); +var SymbolToStringRegistry = shared('symbol-to-string-registry'); + +// `Symbol.for` method +// https://tc39.es/ecma262/#sec-symbol.for +$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + 'for': function (key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = getBuiltIn('Symbol')(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } +}); + +},{"../internals/export":259,"../internals/get-built-in":269,"../internals/has-own-property":275,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/to-string":348}],381:[function(require,module,exports){ +'use strict'; +// TODO: Remove this module from `core-js@4` since it's split to modules listed below +require('../modules/es.symbol.constructor'); +require('../modules/es.symbol.for'); +require('../modules/es.symbol.key-for'); +require('../modules/es.json.stringify'); +require('../modules/es.object.get-own-property-symbols'); + +},{"../modules/es.json.stringify":362,"../modules/es.object.get-own-property-symbols":365,"../modules/es.symbol.constructor":379,"../modules/es.symbol.for":380,"../modules/es.symbol.key-for":382}],382:[function(require,module,exports){ +'use strict'; +var $ = require('../internals/export'); +var hasOwn = require('../internals/has-own-property'); +var isSymbol = require('../internals/is-symbol'); +var tryToString = require('../internals/try-to-string'); +var shared = require('../internals/shared'); +var NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection'); + +var SymbolToStringRegistry = shared('symbol-to-string-registry'); + +// `Symbol.keyFor` method +// https://tc39.es/ecma262/#sec-symbol.keyfor +$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol'); + if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + } +}); + +},{"../internals/export":259,"../internals/has-own-property":275,"../internals/is-symbol":292,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/try-to-string":349}],383:[function(require,module,exports){ +"use strict"; + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; +function isError(e) { + return objectToString(e) === '[object Error]' || e instanceof Error; +} +exports.isError = isError; +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; +function isPrimitive(arg) { + return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || + // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; +exports.isBuffer = require('buffer').Buffer.isBuffer; +function objectToString(o) { + return Object.prototype.toString.call(o); +} + +},{"buffer":220}],384:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var elliptic = require('elliptic'); +var BN = require('bn.js'); +module.exports = function createECDH(curve) { + return new ECDH(curve); +}; +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +}; +aliases.p224 = aliases.secp224r1; +aliases.p256 = aliases.secp256r1 = aliases.prime256v1; +aliases.p192 = aliases.secp192r1 = aliases.prime192v1; +aliases.p384 = aliases.secp384r1; +aliases.p521 = aliases.secp521r1; +function ECDH(curve) { + this.curveType = aliases[curve]; + if (!this.curveType) { + this.curveType = { + name: curve + }; + } + this.curve = new elliptic.ec(this.curveType.name); // eslint-disable-line new-cap + this.keys = void 0; +} +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair(); + return this.getPublicKey(enc, format); +}; +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8'; + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc); + } + var otherPub = this.curve.keyFromPublic(other).getPublic(); + var out = otherPub.mul(this.keys.getPrivate()).getX(); + return formatReturnValue(out, enc, this.curveType.byteLength); +}; +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true); + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7; + } else { + key[0] = 6; + } + } + return formatReturnValue(key, enc); +}; +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc); +}; +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this.keys._importPublic(pub); + return this; +}; +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + var _priv = new BN(priv); + _priv = _priv.toString(16); + this.keys = this.curve.genKeyPair(); + this.keys._importPrivate(_priv); + return this; +}; +function formatReturnValue(bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray(); + } + var buf = new Buffer(bn); + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length); + zeros.fill(0); + buf = Buffer.concat([zeros, buf]); + } + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"bn.js":385,"buffer":220,"elliptic":405}],385:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],386:[function(require,module,exports){ +'use strict'; + +var inherits = require('inherits'); +var MD5 = require('md5.js'); +var RIPEMD160 = require('ripemd160'); +var sha = require('sha.js'); +var Base = require('cipher-base'); +function Hash(hash) { + Base.call(this, 'digest'); + this._hash = hash; +} +inherits(Hash, Base); +Hash.prototype._update = function (data) { + this._hash.update(data); +}; +Hash.prototype._final = function () { + return this._hash.digest(); +}; +module.exports = function createHash(alg) { + alg = alg.toLowerCase(); + if (alg === 'md5') return new MD5(); + if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160(); + return new Hash(sha(alg)); +}; + +},{"cipher-base":221,"inherits":440,"md5.js":450,"ripemd160":493,"sha.js":498}],387:[function(require,module,exports){ +"use strict"; + +var MD5 = require('md5.js'); +module.exports = function (buffer) { + return new MD5().update(buffer).digest(); +}; + +},{"md5.js":450}],388:[function(require,module,exports){ +'use strict'; + +var inherits = require('inherits'); +var Legacy = require('./legacy'); +var Base = require('cipher-base'); +var Buffer = require('safe-buffer').Buffer; +var md5 = require('create-hash/md5'); +var RIPEMD160 = require('ripemd160'); +var sha = require('sha.js'); +var ZEROS = Buffer.alloc(128); +function Hmac(alg, key) { + Base.call(this, 'digest'); + if (typeof key === 'string') { + key = Buffer.from(key); + } + var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64; + this._alg = alg; + this._key = key; + if (key.length > blocksize) { + var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg); + key = hash.update(key).digest(); + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize); + } + var ipad = this._ipad = Buffer.allocUnsafe(blocksize); + var opad = this._opad = Buffer.allocUnsafe(blocksize); + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36; + opad[i] = key[i] ^ 0x5C; + } + this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg); + this._hash.update(ipad); +} +inherits(Hmac, Base); +Hmac.prototype._update = function (data) { + this._hash.update(data); +}; +Hmac.prototype._final = function () { + var h = this._hash.digest(); + var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg); + return hash.update(this._opad).update(h).digest(); +}; +module.exports = function createHmac(alg, key) { + alg = alg.toLowerCase(); + if (alg === 'rmd160' || alg === 'ripemd160') { + return new Hmac('rmd160', key); + } + if (alg === 'md5') { + return new Legacy(md5, key); + } + return new Hmac(alg, key); +}; + +},{"./legacy":389,"cipher-base":221,"create-hash/md5":387,"inherits":440,"ripemd160":493,"safe-buffer":494,"sha.js":498}],389:[function(require,module,exports){ +'use strict'; + +var inherits = require('inherits'); +var Buffer = require('safe-buffer').Buffer; +var Base = require('cipher-base'); +var ZEROS = Buffer.alloc(128); +var blocksize = 64; +function Hmac(alg, key) { + Base.call(this, 'digest'); + if (typeof key === 'string') { + key = Buffer.from(key); + } + this._alg = alg; + this._key = key; + if (key.length > blocksize) { + key = alg(key); + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize); + } + var ipad = this._ipad = Buffer.allocUnsafe(blocksize); + var opad = this._opad = Buffer.allocUnsafe(blocksize); + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36; + opad[i] = key[i] ^ 0x5C; + } + this._hash = [ipad]; +} +inherits(Hmac, Base); +Hmac.prototype._update = function (data) { + this._hash.push(data); +}; +Hmac.prototype._final = function () { + var h = this._alg(Buffer.concat(this._hash)); + return this._alg(Buffer.concat([this._opad, h])); +}; +module.exports = Hmac; + +},{"cipher-base":221,"inherits":440,"safe-buffer":494}],390:[function(require,module,exports){ +'use strict'; + +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes'); +exports.createHash = exports.Hash = require('create-hash'); +exports.createHmac = exports.Hmac = require('create-hmac'); +var algos = require('browserify-sign/algos'); +var algoKeys = Object.keys(algos); +var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys); +exports.getHashes = function () { + return hashes; +}; +var p = require('pbkdf2'); +exports.pbkdf2 = p.pbkdf2; +exports.pbkdf2Sync = p.pbkdf2Sync; +var aes = require('browserify-cipher'); +exports.Cipher = aes.Cipher; +exports.createCipher = aes.createCipher; +exports.Cipheriv = aes.Cipheriv; +exports.createCipheriv = aes.createCipheriv; +exports.Decipher = aes.Decipher; +exports.createDecipher = aes.createDecipher; +exports.Decipheriv = aes.Decipheriv; +exports.createDecipheriv = aes.createDecipheriv; +exports.getCiphers = aes.getCiphers; +exports.listCiphers = aes.listCiphers; +var dh = require('diffie-hellman'); +exports.DiffieHellmanGroup = dh.DiffieHellmanGroup; +exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup; +exports.getDiffieHellman = dh.getDiffieHellman; +exports.createDiffieHellman = dh.createDiffieHellman; +exports.DiffieHellman = dh.DiffieHellman; +var sign = require('browserify-sign'); +exports.createSign = sign.createSign; +exports.Sign = sign.Sign; +exports.createVerify = sign.createVerify; +exports.Verify = sign.Verify; +exports.createECDH = require('create-ecdh'); +var publicEncrypt = require('public-encrypt'); +exports.publicEncrypt = publicEncrypt.publicEncrypt; +exports.privateEncrypt = publicEncrypt.privateEncrypt; +exports.publicDecrypt = publicEncrypt.publicDecrypt; +exports.privateDecrypt = publicEncrypt.privateDecrypt; + +// the least I can do is make error messages for the rest of the node.js/crypto api. +// ;[ +// 'createCredentials' +// ].forEach(function (name) { +// exports[name] = function () { +// throw new Error([ +// 'sorry, ' + name + ' is not implemented yet', +// 'we accept pull requests', +// 'https://github.com/crypto-browserify/crypto-browserify' +// ].join('\n')) +// } +// }) + +var rf = require('randomfill'); +exports.randomFill = rf.randomFill; +exports.randomFillSync = rf.randomFillSync; +exports.createCredentials = function () { + throw new Error(['sorry, createCredentials is not implemented yet', 'we accept pull requests', 'https://github.com/crypto-browserify/crypto-browserify'].join('\n')); +}; +exports.constants = { + 'DH_CHECK_P_NOT_SAFE_PRIME': 2, + 'DH_CHECK_P_NOT_PRIME': 1, + 'DH_UNABLE_TO_CHECK_GENERATOR': 4, + 'DH_NOT_SUITABLE_GENERATOR': 8, + 'NPN_ENABLED': 1, + 'ALPN_ENABLED': 1, + 'RSA_PKCS1_PADDING': 1, + 'RSA_SSLV23_PADDING': 2, + 'RSA_NO_PADDING': 3, + 'RSA_PKCS1_OAEP_PADDING': 4, + 'RSA_X931_PADDING': 5, + 'RSA_PKCS1_PSS_PADDING': 6, + 'POINT_CONVERSION_COMPRESSED': 2, + 'POINT_CONVERSION_UNCOMPRESSED': 4, + 'POINT_CONVERSION_HYBRID': 6 +}; + +},{"browserify-cipher":206,"browserify-sign":213,"browserify-sign/algos":210,"create-ecdh":384,"create-hash":386,"create-hmac":388,"diffie-hellman":400,"pbkdf2":460,"public-encrypt":468,"randombytes":475,"randomfill":476}],391:[function(require,module,exports){ +"use strict"; + +!function (t, e) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs = e(); +}(void 0, function () { + "use strict"; + + var t = 1e3, + e = 6e4, + n = 36e5, + r = "millisecond", + i = "second", + s = "minute", + u = "hour", + a = "day", + o = "week", + c = "month", + f = "quarter", + h = "year", + d = "date", + l = "Invalid Date", + $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, + y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, + M = { + name: "en", + weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), + months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), + ordinal: function (t) { + var e = ["th", "st", "nd", "rd"], + n = t % 100; + return "[" + t + (e[(n - 20) % 10] || e[n] || e[0]) + "]"; + } + }, + m = function (t, e, n) { + var r = String(t); + return !r || r.length >= e ? t : "" + Array(e + 1 - r.length).join(n) + t; + }, + v = { + s: m, + z: function (t) { + var e = -t.utcOffset(), + n = Math.abs(e), + r = Math.floor(n / 60), + i = n % 60; + return (e <= 0 ? "+" : "-") + m(r, 2, "0") + ":" + m(i, 2, "0"); + }, + m: function t(e, n) { + if (e.date() < n.date()) return -t(n, e); + var r = 12 * (n.year() - e.year()) + (n.month() - e.month()), + i = e.clone().add(r, c), + s = n - i < 0, + u = e.clone().add(r + (s ? -1 : 1), c); + return +(-(r + (n - i) / (s ? i - u : u - i)) || 0); + }, + a: function (t) { + return t < 0 ? Math.ceil(t) || 0 : Math.floor(t); + }, + p: function (t) { + return { + M: c, + y: h, + w: o, + d: a, + D: d, + h: u, + m: s, + s: i, + ms: r, + Q: f + }[t] || String(t || "").toLowerCase().replace(/s$/, ""); + }, + u: function (t) { + return void 0 === t; + } + }, + g = "en", + D = {}; + D[g] = M; + var p = "$isDayjsObject", + S = function (t) { + return t instanceof _ || !(!t || !t[p]); + }, + w = function t(e, n, r) { + var i; + if (!e) return g; + if ("string" == typeof e) { + var s = e.toLowerCase(); + D[s] && (i = s), n && (D[s] = n, i = s); + var u = e.split("-"); + if (!i && u.length > 1) return t(u[0]); + } else { + var a = e.name; + D[a] = e, i = a; + } + return !r && i && (g = i), i || !r && g; + }, + O = function (t, e) { + if (S(t)) return t.clone(); + var n = "object" == typeof e ? e : {}; + return n.date = t, n.args = arguments, new _(n); + }, + b = v; + b.l = w, b.i = S, b.w = function (t, e) { + return O(t, { + locale: e.$L, + utc: e.$u, + x: e.$x, + $offset: e.$offset + }); + }; + var _ = function () { + function M(t) { + this.$L = w(t.locale, null, !0), this.parse(t), this.$x = this.$x || t.x || {}, this[p] = !0; + } + var m = M.prototype; + return m.parse = function (t) { + this.$d = function (t) { + var e = t.date, + n = t.utc; + if (null === e) return new Date(NaN); + if (b.u(e)) return new Date(); + if (e instanceof Date) return new Date(e); + if ("string" == typeof e && !/Z$/i.test(e)) { + var r = e.match($); + if (r) { + var i = r[2] - 1 || 0, + s = (r[7] || "0").substring(0, 3); + return n ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)) : new Date(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s); + } + } + return new Date(e); + }(t), this.init(); + }, m.init = function () { + var t = this.$d; + this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(), this.$H = t.getHours(), this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t.getMilliseconds(); + }, m.$utils = function () { + return b; + }, m.isValid = function () { + return !(this.$d.toString() === l); + }, m.isSame = function (t, e) { + var n = O(t); + return this.startOf(e) <= n && n <= this.endOf(e); + }, m.isAfter = function (t, e) { + return O(t) < this.startOf(e); + }, m.isBefore = function (t, e) { + return this.endOf(e) < O(t); + }, m.$g = function (t, e, n) { + return b.u(t) ? this[e] : this.set(n, t); + }, m.unix = function () { + return Math.floor(this.valueOf() / 1e3); + }, m.valueOf = function () { + return this.$d.getTime(); + }, m.startOf = function (t, e) { + var n = this, + r = !!b.u(e) || e, + f = b.p(t), + l = function (t, e) { + var i = b.w(n.$u ? Date.UTC(n.$y, e, t) : new Date(n.$y, e, t), n); + return r ? i : i.endOf(a); + }, + $ = function (t, e) { + return b.w(n.toDate()[t].apply(n.toDate("s"), (r ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e)), n); + }, + y = this.$W, + M = this.$M, + m = this.$D, + v = "set" + (this.$u ? "UTC" : ""); + switch (f) { + case h: + return r ? l(1, 0) : l(31, 11); + case c: + return r ? l(1, M) : l(0, M + 1); + case o: + var g = this.$locale().weekStart || 0, + D = (y < g ? y + 7 : y) - g; + return l(r ? m - D : m + (6 - D), M); + case a: + case d: + return $(v + "Hours", 0); + case u: + return $(v + "Minutes", 1); + case s: + return $(v + "Seconds", 2); + case i: + return $(v + "Milliseconds", 3); + default: + return this.clone(); + } + }, m.endOf = function (t) { + return this.startOf(t, !1); + }, m.$set = function (t, e) { + var n, + o = b.p(t), + f = "set" + (this.$u ? "UTC" : ""), + l = (n = {}, n[a] = f + "Date", n[d] = f + "Date", n[c] = f + "Month", n[h] = f + "FullYear", n[u] = f + "Hours", n[s] = f + "Minutes", n[i] = f + "Seconds", n[r] = f + "Milliseconds", n)[o], + $ = o === a ? this.$D + (e - this.$W) : e; + if (o === c || o === h) { + var y = this.clone().set(d, 1); + y.$d[l]($), y.init(), this.$d = y.set(d, Math.min(this.$D, y.daysInMonth())).$d; + } else l && this.$d[l]($); + return this.init(), this; + }, m.set = function (t, e) { + return this.clone().$set(t, e); + }, m.get = function (t) { + return this[b.p(t)](); + }, m.add = function (r, f) { + var d, + l = this; + r = Number(r); + var $ = b.p(f), + y = function (t) { + var e = O(l); + return b.w(e.date(e.date() + Math.round(t * r)), l); + }; + if ($ === c) return this.set(c, this.$M + r); + if ($ === h) return this.set(h, this.$y + r); + if ($ === a) return y(1); + if ($ === o) return y(7); + var M = (d = {}, d[s] = e, d[u] = n, d[i] = t, d)[$] || 1, + m = this.$d.getTime() + r * M; + return b.w(m, this); + }, m.subtract = function (t, e) { + return this.add(-1 * t, e); + }, m.format = function (t) { + var e = this, + n = this.$locale(); + if (!this.isValid()) return n.invalidDate || l; + var r = t || "YYYY-MM-DDTHH:mm:ssZ", + i = b.z(this), + s = this.$H, + u = this.$m, + a = this.$M, + o = n.weekdays, + c = n.months, + f = n.meridiem, + h = function (t, n, i, s) { + return t && (t[n] || t(e, r)) || i[n].slice(0, s); + }, + d = function (t) { + return b.s(s % 12 || 12, t, "0"); + }, + $ = f || function (t, e, n) { + var r = t < 12 ? "AM" : "PM"; + return n ? r.toLowerCase() : r; + }; + return r.replace(y, function (t, r) { + return r || function (t) { + switch (t) { + case "YY": + return String(e.$y).slice(-2); + case "YYYY": + return b.s(e.$y, 4, "0"); + case "M": + return a + 1; + case "MM": + return b.s(a + 1, 2, "0"); + case "MMM": + return h(n.monthsShort, a, c, 3); + case "MMMM": + return h(c, a); + case "D": + return e.$D; + case "DD": + return b.s(e.$D, 2, "0"); + case "d": + return String(e.$W); + case "dd": + return h(n.weekdaysMin, e.$W, o, 2); + case "ddd": + return h(n.weekdaysShort, e.$W, o, 3); + case "dddd": + return o[e.$W]; + case "H": + return String(s); + case "HH": + return b.s(s, 2, "0"); + case "h": + return d(1); + case "hh": + return d(2); + case "a": + return $(s, u, !0); + case "A": + return $(s, u, !1); + case "m": + return String(u); + case "mm": + return b.s(u, 2, "0"); + case "s": + return String(e.$s); + case "ss": + return b.s(e.$s, 2, "0"); + case "SSS": + return b.s(e.$ms, 3, "0"); + case "Z": + return i; + } + return null; + }(t) || i.replace(":", ""); + }); + }, m.utcOffset = function () { + return 15 * -Math.round(this.$d.getTimezoneOffset() / 15); + }, m.diff = function (r, d, l) { + var $, + y = this, + M = b.p(d), + m = O(r), + v = (m.utcOffset() - this.utcOffset()) * e, + g = this - m, + D = function () { + return b.m(y, m); + }; + switch (M) { + case h: + $ = D() / 12; + break; + case c: + $ = D(); + break; + case f: + $ = D() / 3; + break; + case o: + $ = (g - v) / 6048e5; + break; + case a: + $ = (g - v) / 864e5; + break; + case u: + $ = g / n; + break; + case s: + $ = g / e; + break; + case i: + $ = g / t; + break; + default: + $ = g; + } + return l ? $ : b.a($); + }, m.daysInMonth = function () { + return this.endOf(c).$D; + }, m.$locale = function () { + return D[this.$L]; + }, m.locale = function (t, e) { + if (!t) return this.$L; + var n = this.clone(), + r = w(t, e, !0); + return r && (n.$L = r), n; + }, m.clone = function () { + return b.w(this.$d, this); + }, m.toDate = function () { + return new Date(this.valueOf()); + }, m.toJSON = function () { + return this.isValid() ? this.toISOString() : null; + }, m.toISOString = function () { + return this.$d.toISOString(); + }, m.toString = function () { + return this.$d.toUTCString(); + }, M; + }(), + k = _.prototype; + return O.prototype = k, [["$ms", r], ["$s", i], ["$m", s], ["$H", u], ["$W", a], ["$M", c], ["$y", h], ["$D", d]].forEach(function (t) { + k[t[1]] = function (e) { + return this.$g(e, t[0], t[1]); + }; + }), O.extend = function (t, e) { + return t.$i || (t(e, _, O), t.$i = !0), O; + }, O.locale = w, O.isDayjs = S, O.unix = function (t) { + return O(1e3 * t); + }, O.en = D[g], O.Ls = D, O.p = {}, O; +}); + +},{}],392:[function(require,module,exports){ +"use strict"; + +!function (e, t) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).dayjs_plugin_customParseFormat = t(); +}(void 0, function () { + "use strict"; + + var e = { + LTS: "h:mm:ss A", + LT: "h:mm A", + L: "MM/DD/YYYY", + LL: "MMMM D, YYYY", + LLL: "MMMM D, YYYY h:mm A", + LLLL: "dddd, MMMM D, YYYY h:mm A" + }, + t = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, + n = /\d\d/, + r = /\d\d?/, + i = /\d*[^-_:/,()\s\d]+/, + o = {}, + s = function (e) { + return (e = +e) + (e > 68 ? 1900 : 2e3); + }; + var a = function (e) { + return function (t) { + this[e] = +t; + }; + }, + f = [/[+-]\d\d:?(\d\d)?|Z/, function (e) { + (this.zone || (this.zone = {})).offset = function (e) { + if (!e) return 0; + if ("Z" === e) return 0; + var t = e.match(/([+-]|\d\d)/g), + n = 60 * t[1] + (+t[2] || 0); + return 0 === n ? 0 : "+" === t[0] ? -n : n; + }(e); + }], + h = function (e) { + var t = o[e]; + return t && (t.indexOf ? t : t.s.concat(t.f)); + }, + u = function (e, t) { + var n, + r = o.meridiem; + if (r) { + for (var i = 1; i <= 24; i += 1) if (e.indexOf(r(i, 0, t)) > -1) { + n = i > 12; + break; + } + } else n = e === (t ? "pm" : "PM"); + return n; + }, + d = { + A: [i, function (e) { + this.afternoon = u(e, !1); + }], + a: [i, function (e) { + this.afternoon = u(e, !0); + }], + S: [/\d/, function (e) { + this.milliseconds = 100 * +e; + }], + SS: [n, function (e) { + this.milliseconds = 10 * +e; + }], + SSS: [/\d{3}/, function (e) { + this.milliseconds = +e; + }], + s: [r, a("seconds")], + ss: [r, a("seconds")], + m: [r, a("minutes")], + mm: [r, a("minutes")], + H: [r, a("hours")], + h: [r, a("hours")], + HH: [r, a("hours")], + hh: [r, a("hours")], + D: [r, a("day")], + DD: [n, a("day")], + Do: [i, function (e) { + var t = o.ordinal, + n = e.match(/\d+/); + if (this.day = n[0], t) for (var r = 1; r <= 31; r += 1) t(r).replace(/\[|\]/g, "") === e && (this.day = r); + }], + M: [r, a("month")], + MM: [n, a("month")], + MMM: [i, function (e) { + var t = h("months"), + n = (h("monthsShort") || t.map(function (e) { + return e.slice(0, 3); + })).indexOf(e) + 1; + if (n < 1) throw new Error(); + this.month = n % 12 || n; + }], + MMMM: [i, function (e) { + var t = h("months").indexOf(e) + 1; + if (t < 1) throw new Error(); + this.month = t % 12 || t; + }], + Y: [/[+-]?\d+/, a("year")], + YY: [n, function (e) { + this.year = s(e); + }], + YYYY: [/\d{4}/, a("year")], + Z: f, + ZZ: f + }; + function c(n) { + var r, i; + r = n, i = o && o.formats; + for (var s = (n = r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, function (t, n, r) { + var o = r && r.toUpperCase(); + return n || i[r] || e[r] || i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function (e, t, n) { + return t || n.slice(1); + }); + })).match(t), a = s.length, f = 0; f < a; f += 1) { + var h = s[f], + u = d[h], + c = u && u[0], + l = u && u[1]; + s[f] = l ? { + regex: c, + parser: l + } : h.replace(/^\[|\]$/g, ""); + } + return function (e) { + for (var t = {}, n = 0, r = 0; n < a; n += 1) { + var i = s[n]; + if ("string" == typeof i) r += i.length;else { + var o = i.regex, + f = i.parser, + h = e.slice(r), + u = o.exec(h)[0]; + f.call(t, u), e = e.replace(u, ""); + } + } + return function (e) { + var t = e.afternoon; + if (void 0 !== t) { + var n = e.hours; + t ? n < 12 && (e.hours += 12) : 12 === n && (e.hours = 0), delete e.afternoon; + } + }(t), t; + }; + } + return function (e, t, n) { + n.p.customParseFormat = !0, e && e.parseTwoDigitYear && (s = e.parseTwoDigitYear); + var r = t.prototype, + i = r.parse; + r.parse = function (e) { + var t = e.date, + r = e.utc, + s = e.args; + this.$u = r; + var a = s[1]; + if ("string" == typeof a) { + var f = !0 === s[2], + h = !0 === s[3], + u = f || h, + d = s[2]; + h && (d = s[2]), o = this.$locale(), !f && d && (o = n.Ls[d]), this.$d = function (e, t, n) { + try { + if (["x", "X"].indexOf(t) > -1) return new Date(("X" === t ? 1e3 : 1) * e); + var r = c(t)(e), + i = r.year, + o = r.month, + s = r.day, + a = r.hours, + f = r.minutes, + h = r.seconds, + u = r.milliseconds, + d = r.zone, + l = new Date(), + m = s || (i || o ? 1 : l.getDate()), + M = i || l.getFullYear(), + Y = 0; + i && !o || (Y = o > 0 ? o - 1 : l.getMonth()); + var p = a || 0, + v = f || 0, + D = h || 0, + g = u || 0; + return d ? new Date(Date.UTC(M, Y, m, p, v, D, g + 60 * d.offset * 1e3)) : n ? new Date(Date.UTC(M, Y, m, p, v, D, g)) : new Date(M, Y, m, p, v, D, g); + } catch (e) { + return new Date(""); + } + }(t, a, r), this.init(), d && !0 !== d && (this.$L = this.locale(d).$L), u && t != this.format(a) && (this.$d = new Date("")), o = {}; + } else if (a instanceof Array) for (var l = a.length, m = 1; m <= l; m += 1) { + s[1] = a[m - 1]; + var M = n.apply(this, s); + if (M.isValid()) { + this.$d = M.$d, this.$L = M.$L, this.init(); + break; + } + m === l && (this.$d = new Date("")); + } else i.call(this, e); + }; + }; +}); + +},{}],393:[function(require,module,exports){ +"use strict"; + +!function (t, i) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = i() : "function" == typeof define && define.amd ? define(i) : (t = "undefined" != typeof globalThis ? globalThis : t || self).dayjs_plugin_utc = i(); +}(void 0, function () { + "use strict"; + + var t = "minute", + i = /[+-]\d\d(?::?\d\d)?/g, + e = /([+-]|\d\d)/g; + return function (s, f, n) { + var u = f.prototype; + n.utc = function (t) { + var i = { + date: t, + utc: !0, + args: arguments + }; + return new f(i); + }, u.utc = function (i) { + var e = n(this.toDate(), { + locale: this.$L, + utc: !0 + }); + return i ? e.add(this.utcOffset(), t) : e; + }, u.local = function () { + return n(this.toDate(), { + locale: this.$L, + utc: !1 + }); + }; + var o = u.parse; + u.parse = function (t) { + t.utc && (this.$u = !0), this.$utils().u(t.$offset) || (this.$offset = t.$offset), o.call(this, t); + }; + var r = u.init; + u.init = function () { + if (this.$u) { + var t = this.$d; + this.$y = t.getUTCFullYear(), this.$M = t.getUTCMonth(), this.$D = t.getUTCDate(), this.$W = t.getUTCDay(), this.$H = t.getUTCHours(), this.$m = t.getUTCMinutes(), this.$s = t.getUTCSeconds(), this.$ms = t.getUTCMilliseconds(); + } else r.call(this); + }; + var a = u.utcOffset; + u.utcOffset = function (s, f) { + var n = this.$utils().u; + if (n(s)) return this.$u ? 0 : n(this.$offset) ? a.call(this) : this.$offset; + if ("string" == typeof s && (s = function (t) { + void 0 === t && (t = ""); + var s = t.match(i); + if (!s) return null; + var f = ("" + s[0]).match(e) || ["-", 0, 0], + n = f[0], + u = 60 * +f[1] + +f[2]; + return 0 === u ? 0 : "+" === n ? u : -u; + }(s), null === s)) return this; + var u = Math.abs(s) <= 16 ? 60 * s : s, + o = this; + if (f) return o.$offset = u, o.$u = 0 === s, o; + if (0 !== s) { + var r = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset(); + (o = this.local().add(u + r, t)).$offset = u, o.$x.$localOffset = r; + } else o = this.utc(); + return o; + }; + var h = u.format; + u.format = function (t) { + var i = t || (this.$u ? "YYYY-MM-DDTHH:mm:ss[Z]" : ""); + return h.call(this, i); + }, u.valueOf = function () { + var t = this.$utils().u(this.$offset) ? 0 : this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset()); + return this.$d.valueOf() - 6e4 * t; + }, u.isUTC = function () { + return !!this.$u; + }, u.toISOString = function () { + return this.toDate().toISOString(); + }, u.toString = function () { + return this.toDate().toUTCString(); + }; + var l = u.toDate; + u.toDate = function (t) { + return "s" === t && this.$offset ? n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate() : l.call(this); + }; + var c = u.diff; + u.diff = function (t, i, e) { + if (t && this.$u === t.$u) return c.call(this, t, i, e); + var s = this.local(), + f = n(t).local(); + return c.call(s, f, i, e); + }; + }; +}); + +},{}],394:[function(require,module,exports){ +'use strict'; + +exports.utils = require('./des/utils'); +exports.Cipher = require('./des/cipher'); +exports.DES = require('./des/des'); +exports.CBC = require('./des/cbc'); +exports.EDE = require('./des/ede'); + +},{"./des/cbc":395,"./des/cipher":396,"./des/des":397,"./des/ede":398,"./des/utils":399}],395:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); +var proto = {}; +function CBCState(iv) { + assert.equal(iv.length, 8, 'Invalid IV length'); + this.iv = new Array(8); + for (var i = 0; i < this.iv.length; i++) this.iv[i] = iv[i]; +} +function instantiate(Base) { + function CBC(options) { + Base.call(this, options); + this._cbcInit(); + } + inherits(CBC, Base); + var keys = Object.keys(proto); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + CBC.prototype[key] = proto[key]; + } + CBC.create = function create(options) { + return new CBC(options); + }; + return CBC; +} +exports.instantiate = instantiate; +proto._cbcInit = function _cbcInit() { + var state = new CBCState(this.options.iv); + this._cbcState = state; +}; +proto._update = function _update(inp, inOff, out, outOff) { + var state = this._cbcState; + var superProto = this.constructor.super_.prototype; + var iv = state.iv; + if (this.type === 'encrypt') { + for (var i = 0; i < this.blockSize; i++) iv[i] ^= inp[inOff + i]; + superProto._update.call(this, iv, 0, out, outOff); + for (var i = 0; i < this.blockSize; i++) iv[i] = out[outOff + i]; + } else { + superProto._update.call(this, inp, inOff, out, outOff); + for (var i = 0; i < this.blockSize; i++) out[outOff + i] ^= iv[i]; + for (var i = 0; i < this.blockSize; i++) iv[i] = inp[inOff + i]; + } +}; + +},{"inherits":440,"minimalistic-assert":453}],396:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +function Cipher(options) { + this.options = options; + this.type = this.options.type; + this.blockSize = 8; + this._init(); + this.buffer = new Array(this.blockSize); + this.bufferOff = 0; + this.padding = options.padding !== false; +} +module.exports = Cipher; +Cipher.prototype._init = function _init() { + // Might be overrided +}; +Cipher.prototype.update = function update(data) { + if (data.length === 0) return []; + if (this.type === 'decrypt') return this._updateDecrypt(data);else return this._updateEncrypt(data); +}; +Cipher.prototype._buffer = function _buffer(data, off) { + // Append data to buffer + var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); + for (var i = 0; i < min; i++) this.buffer[this.bufferOff + i] = data[off + i]; + this.bufferOff += min; + + // Shift next + return min; +}; +Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { + this._update(this.buffer, 0, out, off); + this.bufferOff = 0; + return this.blockSize; +}; +Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { + var inputOff = 0; + var outputOff = 0; + var count = (this.bufferOff + data.length) / this.blockSize | 0; + var out = new Array(count * this.blockSize); + if (this.bufferOff !== 0) { + inputOff += this._buffer(data, inputOff); + if (this.bufferOff === this.buffer.length) outputOff += this._flushBuffer(out, outputOff); + } + + // Write blocks + var max = data.length - (data.length - inputOff) % this.blockSize; + for (; inputOff < max; inputOff += this.blockSize) { + this._update(data, inputOff, out, outputOff); + outputOff += this.blockSize; + } + + // Queue rest + for (; inputOff < data.length; inputOff++, this.bufferOff++) this.buffer[this.bufferOff] = data[inputOff]; + return out; +}; +Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { + var inputOff = 0; + var outputOff = 0; + var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; + var out = new Array(count * this.blockSize); + + // TODO(indutny): optimize it, this is far from optimal + for (; count > 0; count--) { + inputOff += this._buffer(data, inputOff); + outputOff += this._flushBuffer(out, outputOff); + } + + // Buffer rest of the input + inputOff += this._buffer(data, inputOff); + return out; +}; +Cipher.prototype.final = function final(buffer) { + var first; + if (buffer) first = this.update(buffer); + var last; + if (this.type === 'encrypt') last = this._finalEncrypt();else last = this._finalDecrypt(); + if (first) return first.concat(last);else return last; +}; +Cipher.prototype._pad = function _pad(buffer, off) { + if (off === 0) return false; + while (off < buffer.length) buffer[off++] = 0; + return true; +}; +Cipher.prototype._finalEncrypt = function _finalEncrypt() { + if (!this._pad(this.buffer, this.bufferOff)) return []; + var out = new Array(this.blockSize); + this._update(this.buffer, 0, out, 0); + return out; +}; +Cipher.prototype._unpad = function _unpad(buffer) { + return buffer; +}; +Cipher.prototype._finalDecrypt = function _finalDecrypt() { + assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); + var out = new Array(this.blockSize); + this._flushBuffer(out, 0); + return this._unpad(out); +}; + +},{"minimalistic-assert":453}],397:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); +var utils = require('./utils'); +var Cipher = require('./cipher'); +function DESState() { + this.tmp = new Array(2); + this.keys = null; +} +function DES(options) { + Cipher.call(this, options); + var state = new DESState(); + this._desState = state; + this.deriveKeys(state, options.key); +} +inherits(DES, Cipher); +module.exports = DES; +DES.create = function create(options) { + return new DES(options); +}; +var shiftTable = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]; +DES.prototype.deriveKeys = function deriveKeys(state, key) { + state.keys = new Array(16 * 2); + assert.equal(key.length, this.blockSize, 'Invalid key length'); + var kL = utils.readUInt32BE(key, 0); + var kR = utils.readUInt32BE(key, 4); + utils.pc1(kL, kR, state.tmp, 0); + kL = state.tmp[0]; + kR = state.tmp[1]; + for (var i = 0; i < state.keys.length; i += 2) { + var shift = shiftTable[i >>> 1]; + kL = utils.r28shl(kL, shift); + kR = utils.r28shl(kR, shift); + utils.pc2(kL, kR, state.keys, i); + } +}; +DES.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._desState; + var l = utils.readUInt32BE(inp, inOff); + var r = utils.readUInt32BE(inp, inOff + 4); + + // Initial Permutation + utils.ip(l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + if (this.type === 'encrypt') this._encrypt(state, l, r, state.tmp, 0);else this._decrypt(state, l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + utils.writeUInt32BE(out, l, outOff); + utils.writeUInt32BE(out, r, outOff + 4); +}; +DES.prototype._pad = function _pad(buffer, off) { + if (this.padding === false) { + return false; + } + var value = buffer.length - off; + for (var i = off; i < buffer.length; i++) buffer[i] = value; + return true; +}; +DES.prototype._unpad = function _unpad(buffer) { + if (this.padding === false) { + return buffer; + } + var pad = buffer[buffer.length - 1]; + for (var i = buffer.length - pad; i < buffer.length; i++) assert.equal(buffer[i], pad); + return buffer.slice(0, buffer.length - pad); +}; +DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { + var l = lStart; + var r = rStart; + + // Apply f() x16 times + for (var i = 0; i < state.keys.length; i += 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(r, state.tmp, 0); + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + var t = r; + r = (l ^ f) >>> 0; + l = t; + } + + // Reverse Initial Permutation + utils.rip(r, l, out, off); +}; +DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { + var l = rStart; + var r = lStart; + + // Apply f() x16 times + for (var i = state.keys.length - 2; i >= 0; i -= 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(l, state.tmp, 0); + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + var t = l; + l = (r ^ f) >>> 0; + r = t; + } + + // Reverse Initial Permutation + utils.rip(l, r, out, off); +}; + +},{"./cipher":396,"./utils":399,"inherits":440,"minimalistic-assert":453}],398:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); +var Cipher = require('./cipher'); +var DES = require('./des'); +function EDEState(type, key) { + assert.equal(key.length, 24, 'Invalid key length'); + var k1 = key.slice(0, 8); + var k2 = key.slice(8, 16); + var k3 = key.slice(16, 24); + if (type === 'encrypt') { + this.ciphers = [DES.create({ + type: 'encrypt', + key: k1 + }), DES.create({ + type: 'decrypt', + key: k2 + }), DES.create({ + type: 'encrypt', + key: k3 + })]; + } else { + this.ciphers = [DES.create({ + type: 'decrypt', + key: k3 + }), DES.create({ + type: 'encrypt', + key: k2 + }), DES.create({ + type: 'decrypt', + key: k1 + })]; + } +} +function EDE(options) { + Cipher.call(this, options); + var state = new EDEState(this.type, this.options.key); + this._edeState = state; +} +inherits(EDE, Cipher); +module.exports = EDE; +EDE.create = function create(options) { + return new EDE(options); +}; +EDE.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._edeState; + state.ciphers[0]._update(inp, inOff, out, outOff); + state.ciphers[1]._update(out, outOff, out, outOff); + state.ciphers[2]._update(out, outOff, out, outOff); +}; +EDE.prototype._pad = DES.prototype._pad; +EDE.prototype._unpad = DES.prototype._unpad; + +},{"./cipher":396,"./des":397,"inherits":440,"minimalistic-assert":453}],399:[function(require,module,exports){ +'use strict'; + +exports.readUInt32BE = function readUInt32BE(bytes, off) { + var res = bytes[0 + off] << 24 | bytes[1 + off] << 16 | bytes[2 + off] << 8 | bytes[3 + off]; + return res >>> 0; +}; +exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { + bytes[0 + off] = value >>> 24; + bytes[1 + off] = value >>> 16 & 0xff; + bytes[2 + off] = value >>> 8 & 0xff; + bytes[3 + off] = value & 0xff; +}; +exports.ip = function ip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + for (var i = 6; i >= 0; i -= 2) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inR >>> j + i & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inL >>> j + i & 1; + } + } + for (var i = 6; i >= 0; i -= 2) { + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= inR >>> j + i & 1; + } + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= inL >>> j + i & 1; + } + } + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +exports.rip = function rip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + for (var i = 0; i < 4; i++) { + for (var j = 24; j >= 0; j -= 8) { + outL <<= 1; + outL |= inR >>> j + i & 1; + outL <<= 1; + outL |= inL >>> j + i & 1; + } + } + for (var i = 4; i < 8; i++) { + for (var j = 24; j >= 0; j -= 8) { + outR <<= 1; + outR |= inR >>> j + i & 1; + outR <<= 1; + outR |= inL >>> j + i & 1; + } + } + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +exports.pc1 = function pc1(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + // 7, 15, 23, 31, 39, 47, 55, 63 + // 6, 14, 22, 30, 39, 47, 55, 63 + // 5, 13, 21, 29, 39, 47, 55, 63 + // 4, 12, 20, 28 + for (var i = 7; i >= 5; i--) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inR >> j + i & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inL >> j + i & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= inR >> j + i & 1; + } + + // 1, 9, 17, 25, 33, 41, 49, 57 + // 2, 10, 18, 26, 34, 42, 50, 58 + // 3, 11, 19, 27, 35, 43, 51, 59 + // 36, 44, 52, 60 + for (var i = 1; i <= 3; i++) { + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= inR >> j + i & 1; + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= inL >> j + i & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= inL >> j + i & 1; + } + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +exports.r28shl = function r28shl(num, shift) { + return num << shift & 0xfffffff | num >>> 28 - shift; +}; +var pc2table = [ +// inL => outL +14, 11, 17, 4, 27, 23, 25, 0, 13, 22, 7, 18, 5, 9, 16, 24, 2, 20, 12, 21, 1, 8, 15, 26, +// inR => outR +15, 4, 25, 19, 9, 1, 26, 16, 5, 11, 23, 8, 12, 7, 17, 0, 22, 3, 10, 14, 6, 20, 27, 24]; +exports.pc2 = function pc2(inL, inR, out, off) { + var outL = 0; + var outR = 0; + var len = pc2table.length >>> 1; + for (var i = 0; i < len; i++) { + outL <<= 1; + outL |= inL >>> pc2table[i] & 0x1; + } + for (var i = len; i < pc2table.length; i++) { + outR <<= 1; + outR |= inR >>> pc2table[i] & 0x1; + } + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +exports.expand = function expand(r, out, off) { + var outL = 0; + var outR = 0; + outL = (r & 1) << 5 | r >>> 27; + for (var i = 23; i >= 15; i -= 4) { + outL <<= 6; + outL |= r >>> i & 0x3f; + } + for (var i = 11; i >= 3; i -= 4) { + outR |= r >>> i & 0x3f; + outR <<= 6; + } + outR |= (r & 0x1f) << 1 | r >>> 31; + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; +var sTable = [14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11]; +exports.substitute = function substitute(inL, inR) { + var out = 0; + for (var i = 0; i < 4; i++) { + var b = inL >>> 18 - i * 6 & 0x3f; + var sb = sTable[i * 0x40 + b]; + out <<= 4; + out |= sb; + } + for (var i = 0; i < 4; i++) { + var b = inR >>> 18 - i * 6 & 0x3f; + var sb = sTable[4 * 0x40 + i * 0x40 + b]; + out <<= 4; + out |= sb; + } + return out >>> 0; +}; +var permuteTable = [16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7]; +exports.permute = function permute(num) { + var out = 0; + for (var i = 0; i < permuteTable.length; i++) { + out <<= 1; + out |= num >>> permuteTable[i] & 0x1; + } + return out >>> 0; +}; +exports.padSplit = function padSplit(num, size, group) { + var str = num.toString(2); + while (str.length < size) str = '0' + str; + var out = []; + for (var i = 0; i < size; i += group) out.push(str.slice(i, i + group)); + return out.join(' '); +}; + +},{}],400:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var generatePrime = require('./lib/generatePrime'); +var primes = require('./lib/primes.json'); +var DH = require('./lib/dh'); +function getDiffieHellman(mod) { + var prime = new Buffer(primes[mod].prime, 'hex'); + var gen = new Buffer(primes[mod].gen, 'hex'); + return new DH(prime, gen); +} +var ENCODINGS = { + 'binary': true, + 'hex': true, + 'base64': true +}; +function createDiffieHellman(prime, enc, generator, genc) { + if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { + return createDiffieHellman(prime, 'binary', enc, generator); + } + enc = enc || 'binary'; + genc = genc || 'binary'; + generator = generator || new Buffer([2]); + if (!Buffer.isBuffer(generator)) { + generator = new Buffer(generator, genc); + } + if (typeof prime === 'number') { + return new DH(generatePrime(prime, generator), generator, true); + } + if (!Buffer.isBuffer(prime)) { + prime = new Buffer(prime, enc); + } + return new DH(prime, generator, true); +} +exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman; +exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman; + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"./lib/dh":401,"./lib/generatePrime":402,"./lib/primes.json":403,"buffer":220}],401:[function(require,module,exports){ +(function (Buffer){(function (){ +"use strict"; + +var BN = require('bn.js'); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var TWENTYFOUR = new BN(24); +var ELEVEN = new BN(11); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var primes = require('./generatePrime'); +var randomBytes = require('randombytes'); +module.exports = DH; +function setPublicKey(pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this._pub = new BN(pub); + return this; +} +function setPrivateKey(priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + this._priv = new BN(priv); + return this; +} +var primeCache = {}; +function checkPrime(prime, generator) { + var gen = generator.toString('hex'); + var hex = [gen, prime.toString(16)].join('_'); + if (hex in primeCache) { + return primeCache[hex]; + } + var error = 0; + if (prime.isEven() || !primes.simpleSieve || !primes.fermatTest(prime) || !millerRabin.test(prime)) { + //not a prime so +1 + error += 1; + if (gen === '02' || gen === '05') { + // we'd be able to check the generator + // it would fail so +8 + error += 8; + } else { + //we wouldn't be able to test the generator + // so +4 + error += 4; + } + primeCache[hex] = error; + return error; + } + if (!millerRabin.test(prime.shrn(1))) { + //not a safe prime + error += 2; + } + var rem; + switch (gen) { + case '02': + if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { + // unsuidable generator + error += 8; + } + break; + case '05': + rem = prime.mod(TEN); + if (rem.cmp(THREE) && rem.cmp(SEVEN)) { + // prime mod 10 needs to equal 3 or 7 + error += 8; + } + break; + default: + error += 4; + } + primeCache[hex] = error; + return error; +} +function DH(prime, generator, malleable) { + this.setGenerator(generator); + this.__prime = new BN(prime); + this._prime = BN.mont(this.__prime); + this._primeLen = prime.length; + this._pub = undefined; + this._priv = undefined; + this._primeCode = undefined; + if (malleable) { + this.setPublicKey = setPublicKey; + this.setPrivateKey = setPrivateKey; + } else { + this._primeCode = 8; + } +} +Object.defineProperty(DH.prototype, 'verifyError', { + enumerable: true, + get: function () { + if (typeof this._primeCode !== 'number') { + this._primeCode = checkPrime(this.__prime, this.__gen); + } + return this._primeCode; + } +}); +DH.prototype.generateKeys = function () { + if (!this._priv) { + this._priv = new BN(randomBytes(this._primeLen)); + } + this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); + return this.getPublicKey(); +}; +DH.prototype.computeSecret = function (other) { + other = new BN(other); + other = other.toRed(this._prime); + var secret = other.redPow(this._priv).fromRed(); + var out = new Buffer(secret.toArray()); + var prime = this.getPrime(); + if (out.length < prime.length) { + var front = new Buffer(prime.length - out.length); + front.fill(0); + out = Buffer.concat([front, out]); + } + return out; +}; +DH.prototype.getPublicKey = function getPublicKey(enc) { + return formatReturnValue(this._pub, enc); +}; +DH.prototype.getPrivateKey = function getPrivateKey(enc) { + return formatReturnValue(this._priv, enc); +}; +DH.prototype.getPrime = function (enc) { + return formatReturnValue(this.__prime, enc); +}; +DH.prototype.getGenerator = function (enc) { + return formatReturnValue(this._gen, enc); +}; +DH.prototype.setGenerator = function (gen, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(gen)) { + gen = new Buffer(gen, enc); + } + this.__gen = gen; + this._gen = new BN(gen); + return this; +}; +function formatReturnValue(bn, enc) { + var buf = new Buffer(bn.toArray()); + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} + +}).call(this)}).call(this,require("buffer").Buffer) + +},{"./generatePrime":402,"bn.js":404,"buffer":220,"miller-rabin":451,"randombytes":475}],402:[function(require,module,exports){ +"use strict"; + +var randomBytes = require('randombytes'); +module.exports = findPrime; +findPrime.simpleSieve = simpleSieve; +findPrime.fermatTest = fermatTest; +var BN = require('bn.js'); +var TWENTYFOUR = new BN(24); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var ONE = new BN(1); +var TWO = new BN(2); +var FIVE = new BN(5); +var SIXTEEN = new BN(16); +var EIGHT = new BN(8); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var ELEVEN = new BN(11); +var FOUR = new BN(4); +var TWELVE = new BN(12); +var primes = null; +function _getPrimes() { + if (primes !== null) return primes; + var limit = 0x100000; + var res = []; + res[0] = 2; + for (var i = 1, k = 3; k < limit; k += 2) { + var sqrt = Math.ceil(Math.sqrt(k)); + for (var j = 0; j < i && res[j] <= sqrt; j++) if (k % res[j] === 0) break; + if (i !== j && res[j] <= sqrt) continue; + res[i++] = k; + } + primes = res; + return res; +} +function simpleSieve(p) { + var primes = _getPrimes(); + for (var i = 0; i < primes.length; i++) if (p.modn(primes[i]) === 0) { + if (p.cmpn(primes[i]) === 0) { + return true; + } else { + return false; + } + } + return true; +} +function fermatTest(p) { + var red = BN.mont(p); + return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +} +function findPrime(bits, gen) { + if (bits < 16) { + // this is what openssl does + if (gen === 2 || gen === 5) { + return new BN([0x8c, 0x7b]); + } else { + return new BN([0x8c, 0x27]); + } + } + gen = new BN(gen); + var num, n2; + while (true) { + num = new BN(randomBytes(Math.ceil(bits / 8))); + while (num.bitLength() > bits) { + num.ishrn(1); + } + if (num.isEven()) { + num.iadd(ONE); + } + if (!num.testn(1)) { + num.iadd(TWO); + } + if (!gen.cmp(TWO)) { + while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { + num.iadd(FOUR); + } + } else if (!gen.cmp(FIVE)) { + while (num.mod(TEN).cmp(THREE)) { + num.iadd(FOUR); + } + } + n2 = num.shrn(1); + if (simpleSieve(n2) && simpleSieve(num) && fermatTest(n2) && fermatTest(num) && millerRabin.test(n2) && millerRabin.test(num)) { + return num; + } + } +} + +},{"bn.js":404,"miller-rabin":451,"randombytes":475}],403:[function(require,module,exports){ +module.exports={ + "modp1": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" + }, + "modp2": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" + }, + "modp5": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" + }, + "modp14": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" + }, + "modp15": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" + }, + "modp16": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" + }, + "modp17": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" + }, + "modp18": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" + } +} +},{}],404:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],405:[function(require,module,exports){ +'use strict'; + +var elliptic = exports; +elliptic.version = require('../package.json').version; +elliptic.utils = require('./elliptic/utils'); +elliptic.rand = require('brorand'); +elliptic.curve = require('./elliptic/curve'); +elliptic.curves = require('./elliptic/curves'); + +// Protocols +elliptic.ec = require('./elliptic/ec'); +elliptic.eddsa = require('./elliptic/eddsa'); + +},{"../package.json":421,"./elliptic/curve":408,"./elliptic/curves":411,"./elliptic/ec":412,"./elliptic/eddsa":415,"./elliptic/utils":419,"brorand":187}],406:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); + + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); + + // Useful for many curves + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); + + // Curve configuration, optional + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); + + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); + this._bitLength = this.n ? this.n.bitLength() : 0; + + // Generalized Greg Maxwell's trick + var adjustCount = this.n && this.p.div(this.n); + if (!adjustCount || adjustCount.cmpn(100) > 0) { + this.redN = null; + } else { + this._maxwellTrick = true; + this.redN = this.n.toRed(this.red); + } +} +module.exports = BaseCurve; +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); + var naf = getNAF(k, 1, this._bitLength); + var I = (1 << doubles.step + 1) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; + + // Translate into more windowed form + var repr = []; + var j; + var nafW; + for (j = 0; j < naf.length; j += doubles.step) { + nafW = 0; + for (var l = j + doubles.step - 1; l >= j; l--) nafW = (nafW << 1) + naf[l]; + repr.push(nafW); + } + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (j = 0; j < repr.length; j++) { + nafW = repr[j]; + if (nafW === i) b = b.mixedAdd(doubles.points[j]);else if (nafW === -i) b = b.mixedAdd(doubles.points[j].neg()); + } + a = a.add(b); + } + return a.toP(); +}; +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; + + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; + + // Get NAF form + var naf = getNAF(k, w, this._bitLength); + + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var l = 0; i >= 0 && naf[i] === 0; i--) l++; + if (i >= 0) l++; + acc = acc.dblp(l); + if (i < 0) break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) acc = acc.mixedAdd(wnd[z - 1 >> 1]);else acc = acc.mixedAdd(wnd[-z - 1 >> 1].neg()); + } else { + // J +- J + if (z > 0) acc = acc.add(wnd[z - 1 >> 1]);else acc = acc.add(wnd[-z - 1 >> 1].neg()); + } + } + return p.type === 'affine' ? acc.toP() : acc; +}; +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, points, coeffs, len, jacobianResult) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; + + // Fill all arrays + var max = 0; + var i; + var j; + var p; + for (i = 0; i < len; i++) { + p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } + + // Comb small window NAFs + for (i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength); + naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } + var comb = [points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b] /* 7 */]; + + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } + var index = [-3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3 /* 1 1 */]; + + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (i = max; i >= 0; i--) { + var k = 0; + while (i >= 0) { + var zero = true; + for (j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) zero = false; + } + if (!zero) break; + k++; + i--; + } + if (i >= 0) k++; + acc = acc.dblp(k); + if (i < 0) break; + for (j = 0; j < len; j++) { + var z = tmp[j]; + p; + if (z === 0) continue;else if (z > 0) p = wnd[j][z - 1 >> 1];else if (z < 0) p = wnd[j][-z - 1 >> 1].neg(); + if (p.type === 'affine') acc = acc.mixedAdd(p);else acc = acc.add(p); + } + } + // Zeroify references + for (i = 0; i < len; i++) wnd[i] = null; + if (jacobianResult) return acc;else return acc.toP(); +}; +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; +BasePoint.prototype.eq = function eq( /*other*/ +) { + throw new Error('Not implemented'); +}; +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); + var len = this.p.byteLength(); + + // uncompressed, hybrid-odd, hybrid-even + if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && bytes.length - 1 === 2 * len) { + if (bytes[0] === 0x06) assert(bytes[bytes.length - 1] % 2 === 0);else if (bytes[0] === 0x07) assert(bytes[bytes.length - 1] % 2 === 1); + var res = this.point(bytes.slice(1, 1 + len), bytes.slice(1 + len, 1 + 2 * len)); + return res; + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + throw new Error('Unknown point format'); +}; +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); + if (compact) return [this.getY().isEven() ? 0x02 : 0x03].concat(x); + return [0x04].concat(x, this.getY().toArray('be', len)); +}; +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) return this; + var precomputed = { + doubles: null, + naf: null, + beta: null + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; + return this; +}; +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) return false; + var doubles = this.precomputed.doubles; + if (!doubles) return false; + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) return this.precomputed.doubles; + var doubles = [this]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) acc = acc.dbl(); + doubles.push(acc); + } + return { + step: step, + points: doubles + }; +}; +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) return this.precomputed.naf; + var res = [this]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res + }; +}; +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) r = r.dbl(); + return r; +}; + +},{"../utils":419,"bn.js":420}],407:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); +var assert = utils.assert; +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + Base.call(this, 'edwards', conf); + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) return num.redNeg();else return this.a.redMul(num); +}; +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) return num;else return this.c.redMul(num); +}; + +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) x = x.toRed(this.red); + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) y = y.redNeg(); + return this.point(x, y); +}; +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) y = y.toRed(this.red); + + // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.c2); + var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); + var x2 = lhs.redMul(rhs.redInvm()); + if (x2.cmp(this.zero) === 0) { + if (odd) throw new Error('invalid point');else return this.point(this.zero, y); + } + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) throw new Error('invalid point'); + if (x.fromRed().isOdd() !== odd) x = x.redNeg(); + return this.point(x, y); +}; +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) return true; + + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + return lhs.cmp(rhs) === 0; +}; +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.y.red) this.y = this.y.toRed(this.curve.red); + if (!this.z.red) this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; + + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && (this.y.cmp(this.z) === 0 || this.zOne && this.y.cmp(this.curve.c) === 0); +}; +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); + var nx; + var ny; + var nz; + var e; + var h; + var j; + if (this.curve.twisted) { + // E = a * C + e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + h = this.z.redSqr(); + // J = F - 2 * H + j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + e = c.redAdd(d); + // H = (c * Z1)^2 + h = this.curve._mulC(this.z).redSqr(); + // J = E - 2 * H + j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) return this; + + // Double in extended coordinates + if (this.curve.extended) return this._extDbl();else return this._projDbl(); +}; +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; +Point.prototype.add = function add(p) { + if (this.isInfinity()) return p; + if (p.isInfinity()) return this; + if (this.curve.extended) return this._extAdd(p);else return this._projAdd(p); +}; +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else return this.curve._wnafMul(this, k); +}; +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, false); +}; +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, true); +}; +Point.prototype.normalize = function normalize() { + if (this.zOne) return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), this.y, this.z, this.t && this.t.redNeg()); +}; +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; +Point.prototype.eq = function eq(other) { + return this === other || this.getX().cmp(other.getX()) === 0 && this.getY().cmp(other.getY()) === 0; +}; +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) return true; + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) return false; + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) return true; + } +}; + +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; + +},{"../utils":419,"./base":406,"bn.js":420,"inherits":440}],408:[function(require,module,exports){ +'use strict'; + +var curve = exports; +curve.base = require('./base'); +curve.short = require('./short'); +curve.mont = require('./mont'); +curve.edwards = require('./edwards'); + +},{"./base":406,"./edwards":407,"./mont":409,"./short":410}],409:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); +var utils = require('../utils'); +function MontCurve(conf) { + Base.call(this, 'mont', conf); + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); +} +inherits(MontCurve, Base); +module.exports = MontCurve; +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); + return y.redSqr().cmp(rhs) === 0; +}; +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.z.red) this.z = this.z.toRed(this.curve.red); + } +} +inherits(Point, Base.BasePoint); +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); +}; +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; +Point.prototype.precompute = function precompute() { + // No-op +}; +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); +}; +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); +}; +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + + // A = X1 + Z1 + var a = this.x.redAdd(this.z); + // AA = A^2 + var aa = a.redSqr(); + // B = X1 - Z1 + var b = this.x.redSub(this.z); + // BB = B^2 + var bb = b.redSqr(); + // C = AA - BB + var c = aa.redSub(bb); + // X3 = AA * BB + var nx = aa.redMul(bb); + // Z3 = C * (BB + A24 * C) + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); +}; +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); +}; +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + + // A = X2 + Z2 + var a = this.x.redAdd(this.z); + // B = X2 - Z2 + var b = this.x.redSub(this.z); + // C = X3 + Z3 + var c = p.x.redAdd(p.z); + // D = X3 - Z3 + var d = p.x.redSub(p.z); + // DA = D * A + var da = d.redMul(a); + // CB = C * B + var cb = c.redMul(b); + // X5 = Z1 * (DA + CB)^2 + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); + // Z5 = X1 * (DA - CB)^2 + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); +}; +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + var b = this.curve.point(null, null); // (N / 2) * Q + var c = this; // Q + + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) bits.push(t.andln(1)); + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); + // N * Q = 2 * ((N / 2) * Q + Q)) + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); + // N * Q + Q = 2 * ((N / 2) * Q + Q) + a = a.dbl(); + } + } + return b; +}; +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); +}; +Point.prototype.jumlAdd = function jumlAdd() { + throw new Error('Not supported on Montgomery curve'); +}; +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; +}; +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; +}; +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); + return this.x.fromRed(); +}; + +},{"../utils":419,"./base":406,"bn.js":420,"inherits":440}],410:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = require('./base'); +var assert = utils.assert; +function ShortCurve(conf) { + Base.call(this, 'short', conf); + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) return; + + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } + + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function (vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + return { + beta: beta, + lambda: lambda, + basis: basis + }; +}; +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [l1, l2]; +}; +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); + + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } + + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + return [{ + a: a1, + b: b1 + }, { + a: a2, + b: b2 + }]; +}; +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); + + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { + k1: k1, + k2: k2 + }; +}; +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) x = x.toRed(this.red); + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); + + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) y = y.redNeg(); + return this.point(x, y); +}; +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) return true; + var x = point.x; + var y = point.y; + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; +ShortCurve.prototype._endoWnafMulAdd = function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); + } + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); + + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + return res; +}; +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.y.red) this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} +inherits(Point, Base.BasePoint); +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) return; + var pre = this.precomputed; + if (pre && pre.beta) return pre.beta; + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function (p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; + } + return beta; +}; +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) return [this.x, this.y]; + return [this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) + } + }]; +}; +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) return res; + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [res].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [res].concat(pre.naf.points.map(obj2point)) + } + }; + return res; +}; +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) return p; + + // P + O = P + if (p.inf) return this; + + // P + P = 2P + if (this.eq(p)) return this.dbl(); + + // P + (-P) = O + if (this.neg().eq(p)) return this.curve.point(null, null); + + // P + Q = O + if (this.x.cmp(p.x) === 0) return this.curve.point(null, null); + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; +Point.prototype.dbl = function dbl() { + if (this.inf) return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) return this.curve.point(null, null); + var a = this.curve.a; + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + if (this.isInfinity()) return this;else if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else if (this.curve.endo) return this.curve._endoWnafMulAdd([this], [k]);else return this.curve._wnafMul(this, k); +}; +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [this, p2]; + var coeffs = [k1, k2]; + if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs);else return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [this, p2]; + var coeffs = [k1, k2]; + if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs, true);else return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; +Point.prototype.eq = function eq(p) { + return this === p || this.inf === p.inf && (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; +Point.prototype.neg = function neg(_precompute) { + if (this.inf) return this; + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function (p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } + }; + } + return res; +}; +Point.prototype.toJ = function toJ() { + if (this.inf) return this.curve.jpoint(null, null, null); + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) this.x = this.x.toRed(this.curve.red); + if (!this.y.red) this.y = this.y.toRed(this.curve.red); + if (!this.z.red) this.z = this.z.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) return this.curve.point(null, null); + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + return this.curve.point(ax, ay); +}; +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) return p; + + // P + O = P + if (p.isInfinity()) return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl(); + } + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) return p.toJ(); + + // P + O = P + if (p.isInfinity()) return this; + + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl(); + } + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) return this; + if (this.isInfinity()) return this; + if (!pow) return this.dbl(); + var i; + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (i = 0; i < pow; i++) r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) jz4 = jz4.redMul(jyd4); + jx = nx; + jz = nz; + jyd = dny; + } + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) return this; + if (this.curve.zeroA) return this._zeroDbl();else if (this.curve.threeA) return this._threeDbl();else return this._dbl(); +}; +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + return this.curve._wnafMul(this, k); +}; +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') return this.eq(p.toJ()); + if (this === p) return true; + + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) return false; + + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) return true; + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) return false; + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) return true; + } +}; +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) return ''; + return ''; +}; +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +},{"../utils":419,"./base":406,"bn.js":420,"inherits":440}],411:[function(require,module,exports){ +'use strict'; + +var curves = exports; +var hash = require('hash.js'); +var curve = require('./curve'); +var utils = require('./utils'); +var assert = utils.assert; +function PresetCurve(options) { + if (options.type === 'short') this.curve = new curve.short(options);else if (options.type === 'edwards') this.curve = new curve.edwards(options);else this.curve = new curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} +curves.PresetCurve = PresetCurve; +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function () { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve + }); + return curve; + } + }); +} +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: ['188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'] +}); +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: ['b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'] +}); +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: ['6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'] +}); +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: ['aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + '5502f25d bf55296c 3a545e38 72760ab7', '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'] +}); +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: ['000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + '3fad0761 353c7086 a272c240 88be9476 9fd16650'] +}); +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '1', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: ['9'] +}); +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: ['216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', + // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658'] +}); +var pre; +try { + pre = require('./precomputed/secp256k1'); +} catch (e) { + pre = undefined; +} +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [{ + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3' + }, { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15' + }], + gRed: false, + g: ['79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', pre] +}); + +},{"./curve":408,"./precomputed/secp256k1":418,"./utils":419,"hash.js":426}],412:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var HmacDRBG = require('hmac-drbg'); +var utils = require('../utils'); +var curves = require('../curves'); +var rand = require('brorand'); +var assert = utils.assert; +var KeyPair = require('./key'); +var Signature = require('./signature'); +function EC(options) { + if (!(this instanceof EC)) return new EC(options); + + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(Object.prototype.hasOwnProperty.call(curves, options), 'Unknown curve ' + options); + options = curves[options]; + } + + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof curves.PresetCurve) options = { + curve: options + }; + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; + + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); + + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) options = {}; + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + entropy: options.entropy || rand(this.hash.hmacStrength), + entropyEnc: options.entropy && options.entropyEnc || 'utf8', + nonce: this.n.toArray() + }); + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + for (;;) { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) continue; + priv.iaddn(1); + return this.keyFromPrivate(priv); + } +}; +EC.prototype._truncateToN = function _truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) return msg.sub(this.n);else return msg; +}; +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) options = {}; + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); + + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); + + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc || 'utf8' + }); + + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); + for (var iter = 0;; iter++) { + var k = options.k ? options.k(iter) : new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) continue; + var kp = this.g.mul(k); + if (kp.isInfinity()) continue; + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) continue; + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) continue; + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | (kpX.cmp(r) !== 0 ? 2 : 0); + + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + return new Signature({ + r: r, + s: s, + recoveryParam: recoveryParam + }); + } +}; +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) return false; + + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + var p; + if (!this.curve._maxwellTrick) { + p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) return false; + return p.getX().umod(this.n).cmp(r) === 0; + } + + // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) return false; + + // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + return p.eqXToP(r); +}; +EC.prototype.recoverPubKey = function (msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; + + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) throw new Error('Unable to find sencond key candinate'); + + // 1.1. Let x = r + jn. + if (isSecondKey) r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);else r = this.curve.pointFromX(r, isYOdd); + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); + + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + return this.g.mulAdd(s1, r, s2); +}; +EC.prototype.getKeyRecoveryParam = function (e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) return signature.recoveryParam; + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + if (Qprime.eq(Q)) return i; + } + throw new Error('Unable to find valid recovery factor'); +}; + +},{"../curves":411,"../utils":419,"./key":413,"./signature":414,"bn.js":420,"brorand":187,"hmac-drbg":438}],413:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; + + // KeyPair(ec, { priv: ..., pub: ... }) + if (options.priv) this._importPrivate(options.priv, options.privEnc); + if (options.pub) this._importPublic(options.pub, options.pubEnc); +} +module.exports = KeyPair; +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) return pub; + return new KeyPair(ec, { + pub: pub, + pubEnc: enc + }); +}; +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) return priv; + return new KeyPair(ec, { + priv: priv, + privEnc: enc + }); +}; +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); + if (pub.isInfinity()) return { + result: false, + reason: 'Invalid public key' + }; + if (!pub.validate()) return { + result: false, + reason: 'Public key is not a point' + }; + if (!pub.mul(this.ec.curve.n).isInfinity()) return { + result: false, + reason: 'Public key * N != O' + }; + return { + result: true, + reason: null + }; +}; +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } + if (!this.pub) this.pub = this.ec.g.mul(this.priv); + if (!enc) return this.pub; + return this.pub.encode(enc, compact); +}; +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') return this.priv.toString(16, 2);else return this.priv; +}; +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); + + // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + this.priv = this.priv.umod(this.ec.curve.n); +}; +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + // Montgomery points only have an `x` coordinate. + // Weierstrass/Edwards points on the other hand have both `x` and + // `y` coordinates. + if (this.ec.curve.type === 'mont') { + assert(key.x, 'Need x coordinate'); + } else if (this.ec.curve.type === 'short' || this.ec.curve.type === 'edwards') { + assert(key.x && key.y, 'Need both x and y coordinate'); + } + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + this.pub = this.ec.curve.decodePoint(key, enc); +}; + +// ECDH +KeyPair.prototype.derive = function derive(pub) { + if (!pub.validate()) { + assert(pub.validate(), 'public point not validated'); + } + return pub.mul(this.priv).getX(); +}; + +// ECDSA +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); +}; +KeyPair.prototype.verify = function verify(msg, signature) { + return this.ec.verify(msg, signature, this); +}; +KeyPair.prototype.inspect = function inspect() { + return ''; +}; + +},{"../utils":419,"bn.js":420}],414:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; +function Signature(options, enc) { + if (options instanceof Signature) return options; + if (this._importDER(options, enc)) return; + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) this.recoveryParam = null;else this.recoveryParam = options.recoveryParam; +} +module.exports = Signature; +function Position() { + this.place = 0; +} +function getLength(buf, p) { + var initial = buf[p.place++]; + if (!(initial & 0x80)) { + return initial; + } + var octetLen = initial & 0xf; + + // Indefinite length or overflow + if (octetLen === 0 || octetLen > 4) { + return false; + } + var val = 0; + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + val >>>= 0; + } + + // Leading zeroes + if (val <= 0x7f) { + return false; + } + p.place = off; + return val; +} +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; + } + if (i === 0) { + return buf; + } + return buf.slice(i); +} +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + if (data[p.place++] !== 0x30) { + return false; + } + var len = getLength(data, p); + if (len === false) { + return false; + } + if (len + p.place !== data.length) { + return false; + } + if (data[p.place++] !== 0x02) { + return false; + } + var rlen = getLength(data, p); + if (rlen === false) { + return false; + } + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + if (data[p.place++] !== 0x02) { + return false; + } + var slen = getLength(data, p); + if (slen === false) { + return false; + } + if (data.length !== slen + p.place) { + return false; + } + var s = data.slice(p.place, slen + p.place); + if (r[0] === 0) { + if (r[1] & 0x80) { + r = r.slice(1); + } else { + // Leading zeroes + return false; + } + } + if (s[0] === 0) { + if (s[1] & 0x80) { + s = s.slice(1); + } else { + // Leading zeroes + return false; + } + } + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; + return true; +}; +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; + } + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + while (--octets) { + arr.push(len >>> (octets << 3) & 0xff); + } + arr.push(len); +} +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); + + // Pad values + if (r[0] & 0x80) r = [0].concat(r); + // Pad values + if (s[0] & 0x80) s = [0].concat(s); + r = rmPadding(r); + s = rmPadding(s); + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); + } + var arr = [0x02]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [0x30]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); +}; + +},{"../utils":419,"bn.js":420}],415:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var curves = require('../curves'); +var utils = require('../utils'); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var KeyPair = require('./key'); +var Signature = require('./signature'); +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); + if (!(this instanceof EDDSA)) return new EDDSA(curve); + curve = curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} +module.exports = EDDSA; + +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message).mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ + R: R, + S: S, + Rencoded: Rencoded + }); +}; + +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); +}; +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + for (var i = 0; i < arguments.length; i++) hash.update(arguments[i]); + return utils.intFromLE(hash.digest()).umod(this.curve.n); +}; +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); +}; +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) return sig; + return new Signature(this, sig); +}; + +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; + +},{"../curves":411,"../utils":419,"./key":416,"./signature":417,"hash.js":426}],416:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; + +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) this._pub = params.pub;else this._pubBytes = parseBytes(params.pub); +} +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) return pub; + return new KeyPair(eddsa, { + pub: pub + }); +}; +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) return secret; + return new KeyPair(eddsa, { + secret: secret + }); +}; +KeyPair.prototype.secret = function secret() { + return this._secret; +}; +cachedProperty(KeyPair, 'pubBytes', function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); +cachedProperty(KeyPair, 'pub', function pub() { + if (this._pubBytes) return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); +cachedProperty(KeyPair, 'privBytes', function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; + return a; +}); +cachedProperty(KeyPair, 'priv', function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); +cachedProperty(KeyPair, 'hash', function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); +cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); +}; +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); +}; +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; +module.exports = KeyPair; + +},{"../utils":419}],417:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var utils = require('../utils'); +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; + +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ +function Signature(eddsa, sig) { + this.eddsa = eddsa; + if (typeof sig !== 'object') sig = parseBytes(sig); + if (Array.isArray(sig)) { + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength) + }; + } + assert(sig.R && sig.S, 'Signature without R or S'); + if (eddsa.isPoint(sig.R)) this._R = sig.R; + if (sig.S instanceof BN) this._S = sig.S; + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} +cachedProperty(Signature, 'S', function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); +cachedProperty(Signature, 'R', function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); +cachedProperty(Signature, 'Rencoded', function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); +cachedProperty(Signature, 'Sencoded', function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); +}; +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); +}; +module.exports = Signature; + +},{"../utils":419,"bn.js":420}],418:[function(require,module,exports){ +"use strict"; + +module.exports = { + doubles: { + step: 4, + points: [['e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'], ['8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'], ['175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'], ['363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'], ['8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'], ['723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'], ['eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'], ['100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'], ['e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'], ['feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'], ['da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'], ['53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'], ['8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'], ['385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'], ['6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'], ['3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'], ['85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'], ['948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'], ['6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'], ['e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'], ['e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'], ['213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'], ['4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'], ['fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'], ['76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'], ['c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'], ['d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'], ['b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'], ['e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'], ['a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'], ['90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'], ['8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'], ['e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'], ['8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'], ['e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'], ['b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'], ['d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'], ['324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'], ['4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'], ['9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'], ['6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'], ['a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'], ['7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'], ['928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'], ['85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'], ['ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'], ['827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'], ['eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'], ['e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'], ['1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'], ['146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'], ['fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'], ['da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'], ['a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'], ['174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'], ['959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'], ['d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'], ['64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'], ['8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'], ['13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'], ['bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'], ['8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'], ['8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'], ['dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'], ['f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82']] + }, + naf: { + wnd: 7, + points: [['f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'], ['2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'], ['5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'], ['acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'], ['774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'], ['f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'], ['d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'], ['defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'], ['2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'], ['352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'], ['2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'], ['9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'], ['daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'], ['c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'], ['6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'], ['1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'], ['605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'], ['62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'], ['80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'], ['7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'], ['d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'], ['49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'], ['77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'], ['f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'], ['463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'], ['f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'], ['caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'], ['2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'], ['7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'], ['754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'], ['e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'], ['186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'], ['df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'], ['5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'], ['290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'], ['af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'], ['766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'], ['59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'], ['f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'], ['7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'], ['948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'], ['7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'], ['3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'], ['d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'], ['1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'], ['733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'], ['15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'], ['a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'], ['e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'], ['311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'], ['34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'], ['f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'], ['d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'], ['32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'], ['7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'], ['ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'], ['16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'], ['eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'], ['78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'], ['494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'], ['a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'], ['c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'], ['841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'], ['5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'], ['36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'], ['336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'], ['8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'], ['1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'], ['85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'], ['29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'], ['a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'], ['4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'], ['d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'], ['ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'], ['af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'], ['e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'], ['591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'], ['11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'], ['3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'], ['cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'], ['c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'], ['c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'], ['a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'], ['347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'], ['da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'], ['c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'], ['4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'], ['3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'], ['cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'], ['b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'], ['d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'], ['48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'], ['dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'], ['6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'], ['e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'], ['eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'], ['13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'], ['ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'], ['b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'], ['ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'], ['8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'], ['52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'], ['e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'], ['7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'], ['5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'], ['32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'], ['e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'], ['8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'], ['4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'], ['3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'], ['674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'], ['d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'], ['30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'], ['be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'], ['93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'], ['b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'], ['d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'], ['d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'], ['463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'], ['7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'], ['74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'], ['30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'], ['9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'], ['176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'], ['75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'], ['809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'], ['1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9']] + } +}; + +},{}],419:[function(require,module,exports){ +'use strict'; + +var utils = exports; +var BN = require('bn.js'); +var minAssert = require('minimalistic-assert'); +var minUtils = require('minimalistic-crypto-utils'); +utils.assert = minAssert; +utils.toArray = minUtils.toArray; +utils.zero2 = minUtils.zero2; +utils.toHex = minUtils.toHex; +utils.encode = minUtils.encode; + +// Represent num in a w-NAF form +function getNAF(num, w, bits) { + var naf = new Array(Math.max(num.bitLength(), bits) + 1); + naf.fill(0); + var ws = 1 << w + 1; + var k = num.clone(); + for (var i = 0; i < naf.length; i++) { + var z; + var mod = k.andln(ws - 1); + if (k.isOdd()) { + if (mod > (ws >> 1) - 1) z = (ws >> 1) - mod;else z = mod; + k.isubn(z); + } else { + z = 0; + } + naf[i] = z; + k.iushrn(1); + } + return naf; +} +utils.getNAF = getNAF; + +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [[], []]; + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + var m8; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + // First phase + var m14 = k1.andln(3) + d1 & 3; + var m24 = k2.andln(3) + d2 & 3; + if (m14 === 3) m14 = -1; + if (m24 === 3) m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + m8 = k1.andln(7) + d1 & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) u1 = -m14;else u1 = m14; + } + jsf[0].push(u1); + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + m8 = k2.andln(7) + d2 & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) u2 = -m24;else u2 = m24; + } + jsf[1].push(u2); + + // Second phase + if (2 * d1 === u1 + 1) d1 = 1 - d1; + if (2 * d2 === u2 + 1) d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + return jsf; +} +utils.getJSF = getJSF; +function cachedProperty(obj, name, computer) { + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : bytes; +} +utils.parseBytes = parseBytes; +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; + +},{"bn.js":420,"minimalistic-assert":453,"minimalistic-crypto-utils":454}],420:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],421:[function(require,module,exports){ +module.exports={ + "name": "elliptic", + "version": "6.5.4", + "description": "EC cryptography", + "main": "lib/elliptic.js", + "files": [ + "lib" + ], + "scripts": { + "lint": "eslint lib test", + "lint:fix": "npm run lint -- --fix", + "unit": "istanbul test _mocha --reporter=spec test/index.js", + "test": "npm run lint && npm run unit", + "version": "grunt dist && git add dist/" + }, + "repository": { + "type": "git", + "url": "git@github.com:indutny/elliptic" + }, + "keywords": [ + "EC", + "Elliptic", + "curve", + "Cryptography" + ], + "author": "Fedor Indutny ", + "license": "MIT", + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "homepage": "https://github.com/indutny/elliptic", + "devDependencies": { + "brfs": "^2.0.2", + "coveralls": "^3.1.0", + "eslint": "^7.6.0", + "grunt": "^1.2.1", + "grunt-browserify": "^5.3.0", + "grunt-cli": "^1.3.2", + "grunt-contrib-connect": "^3.0.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-uglify": "^5.0.0", + "grunt-mocha-istanbul": "^5.0.2", + "grunt-saucelabs": "^9.0.1", + "istanbul": "^0.4.5", + "mocha": "^8.0.1" + }, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } +} + +},{}],422:[function(require,module,exports){ +"use strict"; + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var objectCreate = Object.create || objectCreatePolyfill; +var objectKeys = Object.keys || objectKeysPolyfill; +var bind = Function.prototype.bind || functionBindPolyfill; +function EventEmitter() { + if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) { + this._events = objectCreate(null); + this._eventsCount = 0; + } + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; +var hasDefineProperty; +try { + var o = {}; + if (Object.defineProperty) Object.defineProperty(o, 'x', { + value: 0 + }); + hasDefineProperty = o.x === 0; +} catch (err) { + hasDefineProperty = false; +} +if (hasDefineProperty) { + Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function () { + return defaultMaxListeners; + }, + set: function (arg) { + // check whether the input is a positive number (whose value is zero or + // greater and not a NaN). + if (typeof arg !== 'number' || arg < 0 || arg !== arg) throw new TypeError('"defaultMaxListeners" must be a positive number'); + defaultMaxListeners = arg; + } + }); +} else { + EventEmitter.defaultMaxListeners = defaultMaxListeners; +} + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || isNaN(n)) throw new TypeError('"n" argument must be a positive number'); + this._maxListeners = n; + return this; +}; +function $getMaxListeners(that) { + if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return $getMaxListeners(this); +}; + +// These standalone emit* functions are used to optimize calling of event +// handlers for fast cases because emit() itself often has a variable number of +// arguments and can be deoptimized because of that. These functions always have +// the same number of arguments and thus do not get deoptimized, so the code +// inside them can execute faster. +function emitNone(handler, isFn, self) { + if (isFn) handler.call(self);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].call(self); + } +} +function emitOne(handler, isFn, self, arg1) { + if (isFn) handler.call(self, arg1);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].call(self, arg1); + } +} +function emitTwo(handler, isFn, self, arg1, arg2) { + if (isFn) handler.call(self, arg1, arg2);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].call(self, arg1, arg2); + } +} +function emitThree(handler, isFn, self, arg1, arg2, arg3) { + if (isFn) handler.call(self, arg1, arg2, arg3);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].call(self, arg1, arg2, arg3); + } +} +function emitMany(handler, isFn, self, args) { + if (isFn) handler.apply(self, args);else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) listeners[i].apply(self, args); + } +} +EventEmitter.prototype.emit = function emit(type) { + var er, handler, len, args, i, events; + var doError = type === 'error'; + events = this._events; + if (events) doError = doError && events.error == null;else if (!doError) return false; + + // If there is no 'error' event listener then throw. + if (doError) { + if (arguments.length > 1) er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Unhandled "error" event. (' + er + ')'); + err.context = er; + throw err; + } + return false; + } + handler = events[type]; + if (!handler) return false; + var isFn = typeof handler === 'function'; + len = arguments.length; + switch (len) { + // fast cases + case 1: + emitNone(handler, isFn, this); + break; + case 2: + emitOne(handler, isFn, this, arguments[1]); + break; + case 3: + emitTwo(handler, isFn, this, arguments[1], arguments[2]); + break; + case 4: + emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]); + break; + // slower + default: + args = new Array(len - 1); + for (i = 1; i < len; i++) args[i - 1] = arguments[i]; + emitMany(handler, isFn, this, args); + } + return true; +}; +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + events = target._events; + if (!events) { + events = target._events = objectCreate(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener) { + target.emit('newListener', type, listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + if (!existing) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = prepend ? [listener, existing] : [existing, listener]; + } else { + // If we've already got an array, just append. + if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + } + + // Check for listener leak + if (!existing.warned) { + m = $getMaxListeners(target); + if (m && m > 0 && existing.length > m) { + existing.warned = true; + var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' "' + String(type) + '" listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit.'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + if (typeof console === 'object' && console.warn) { + console.warn('%s: %s', w.name, w.message); + } + } + } + } + return target; +} +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; +EventEmitter.prototype.on = EventEmitter.prototype.addListener; +EventEmitter.prototype.prependListener = function prependListener(type, listener) { + return _addListener(this, type, listener, true); +}; +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + switch (arguments.length) { + case 0: + return this.listener.call(this.target); + case 1: + return this.listener.call(this.target, arguments[0]); + case 2: + return this.listener.call(this.target, arguments[0], arguments[1]); + case 3: + return this.listener.call(this.target, arguments[0], arguments[1], arguments[2]); + default: + var args = new Array(arguments.length); + for (var i = 0; i < args.length; ++i) args[i] = arguments[i]; + this.listener.apply(this.target, args); + } + } +} +function _onceWrap(target, type, listener) { + var state = { + fired: false, + wrapFn: undefined, + target: target, + type: type, + listener: listener + }; + var wrapped = bind.call(onceWrapper, state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} +EventEmitter.prototype.once = function once(type, listener) { + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; +EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) { + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; +}; + +// Emits a 'removeListener' event if and only if the listener was removed. +EventEmitter.prototype.removeListener = function removeListener(type, listener) { + var list, events, position, i, originalListener; + if (typeof listener !== 'function') throw new TypeError('"listener" argument must be a function'); + events = this._events; + if (!events) return this; + list = events[type]; + if (!list) return this; + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) this._events = objectCreate(null);else { + delete events[type]; + if (events.removeListener) this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + if (position < 0) return this; + if (position === 0) list.shift();else spliceOne(list, position); + if (list.length === 1) events[type] = list[0]; + if (events.removeListener) this.emit('removeListener', type, originalListener || listener); + } + return this; +}; +EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) { + var listeners, events, i; + events = this._events; + if (!events) return this; + + // not listening for removeListener, no need to emit + if (!events.removeListener) { + if (arguments.length === 0) { + this._events = objectCreate(null); + this._eventsCount = 0; + } else if (events[type]) { + if (--this._eventsCount === 0) this._events = objectCreate(null);else delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = objectKeys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = objectCreate(null); + this._eventsCount = 0; + return this; + } + listeners = events[type]; + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + return this; +}; +function _listeners(target, type, unwrap) { + var events = target._events; + if (!events) return []; + var evlistener = events[type]; + if (!evlistener) return []; + if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; +EventEmitter.listenerCount = function (emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; +EventEmitter.prototype.listenerCount = listenerCount; +function listenerCount(type) { + var events = this._events; + if (events) { + var evlistener = events[type]; + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener) { + return evlistener.length; + } + } + return 0; +} +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; +}; + +// About 1.5x faster than the two-arg version of Array#splice(). +function spliceOne(list, index) { + for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) list[i] = list[k]; + list.pop(); +} +function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) copy[i] = arr[i]; + return copy; +} +function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; +} +function objectCreatePolyfill(proto) { + var F = function () {}; + F.prototype = proto; + return new F(); +} +function objectKeysPolyfill(obj) { + var keys = []; + for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) { + keys.push(k); + } + return k; +} +function functionBindPolyfill(context) { + var fn = this; + return function () { + return fn.apply(context, arguments); + }; +} + +},{}],423:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var MD5 = require('md5.js'); + +/* eslint-disable camelcase */ +function EVP_BytesToKey(password, salt, keyBits, ivLen) { + if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary'); + if (salt) { + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary'); + if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length'); + } + var keyLen = keyBits / 8; + var key = Buffer.alloc(keyLen); + var iv = Buffer.alloc(ivLen || 0); + var tmp = Buffer.alloc(0); + while (keyLen > 0 || ivLen > 0) { + var hash = new MD5(); + hash.update(tmp); + hash.update(password); + if (salt) hash.update(salt); + tmp = hash.digest(); + var used = 0; + if (keyLen > 0) { + var keyStart = key.length - keyLen; + used = Math.min(keyLen, tmp.length); + tmp.copy(key, keyStart, 0, used); + keyLen -= used; + } + if (used < tmp.length && ivLen > 0) { + var ivStart = iv.length - ivLen; + var length = Math.min(ivLen, tmp.length - used); + tmp.copy(iv, ivStart, used, used + length); + ivLen -= length; + } + } + tmp.fill(0); + return { + key: key, + iv: iv + }; +} +module.exports = EVP_BytesToKey; + +},{"md5.js":450,"safe-buffer":494}],424:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.CsvParserStream = exports.ParserOptions = exports.parseFile = exports.parseStream = exports.parseString = exports.parse = exports.FormatterOptions = exports.CsvFormatterStream = exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = void 0; +var format_1 = require("@fast-csv/format"); +Object.defineProperty(exports, "format", { + enumerable: true, + get: function () { + return format_1.format; + } +}); +Object.defineProperty(exports, "write", { + enumerable: true, + get: function () { + return format_1.write; + } +}); +Object.defineProperty(exports, "writeToStream", { + enumerable: true, + get: function () { + return format_1.writeToStream; + } +}); +Object.defineProperty(exports, "writeToBuffer", { + enumerable: true, + get: function () { + return format_1.writeToBuffer; + } +}); +Object.defineProperty(exports, "writeToString", { + enumerable: true, + get: function () { + return format_1.writeToString; + } +}); +Object.defineProperty(exports, "writeToPath", { + enumerable: true, + get: function () { + return format_1.writeToPath; + } +}); +Object.defineProperty(exports, "CsvFormatterStream", { + enumerable: true, + get: function () { + return format_1.CsvFormatterStream; + } +}); +Object.defineProperty(exports, "FormatterOptions", { + enumerable: true, + get: function () { + return format_1.FormatterOptions; + } +}); +var parse_1 = require("@fast-csv/parse"); +Object.defineProperty(exports, "parse", { + enumerable: true, + get: function () { + return parse_1.parse; + } +}); +Object.defineProperty(exports, "parseString", { + enumerable: true, + get: function () { + return parse_1.parseString; + } +}); +Object.defineProperty(exports, "parseStream", { + enumerable: true, + get: function () { + return parse_1.parseStream; + } +}); +Object.defineProperty(exports, "parseFile", { + enumerable: true, + get: function () { + return parse_1.parseFile; + } +}); +Object.defineProperty(exports, "ParserOptions", { + enumerable: true, + get: function () { + return parse_1.ParserOptions; + } +}); +Object.defineProperty(exports, "CsvParserStream", { + enumerable: true, + get: function () { + return parse_1.CsvParserStream; + } +}); + +},{"@fast-csv/format":151,"@fast-csv/parse":155}],425:[function(require,module,exports){ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; +var Transform = require('readable-stream').Transform; +var inherits = require('inherits'); +function throwIfNotStringOrBuffer(val, prefix) { + if (!Buffer.isBuffer(val) && typeof val !== 'string') { + throw new TypeError(prefix + ' must be a string or a buffer'); + } +} +function HashBase(blockSize) { + Transform.call(this); + this._block = Buffer.allocUnsafe(blockSize); + this._blockSize = blockSize; + this._blockOffset = 0; + this._length = [0, 0, 0, 0]; + this._finalized = false; +} +inherits(HashBase, Transform); +HashBase.prototype._transform = function (chunk, encoding, callback) { + var error = null; + try { + this.update(chunk, encoding); + } catch (err) { + error = err; + } + callback(error); +}; +HashBase.prototype._flush = function (callback) { + var error = null; + try { + this.push(this.digest()); + } catch (err) { + error = err; + } + callback(error); +}; +HashBase.prototype.update = function (data, encoding) { + throwIfNotStringOrBuffer(data, 'Data'); + if (this._finalized) throw new Error('Digest already called'); + if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding); + + // consume data + var block = this._block; + var offset = 0; + while (this._blockOffset + data.length - offset >= this._blockSize) { + for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]; + this._update(); + this._blockOffset = 0; + } + while (offset < data.length) block[this._blockOffset++] = data[offset++]; + + // update length + for (var j = 0, carry = data.length * 8; carry > 0; ++j) { + this._length[j] += carry; + carry = this._length[j] / 0x0100000000 | 0; + if (carry > 0) this._length[j] -= 0x0100000000 * carry; + } + return this; +}; +HashBase.prototype._update = function () { + throw new Error('_update is not implemented'); +}; +HashBase.prototype.digest = function (encoding) { + if (this._finalized) throw new Error('Digest already called'); + this._finalized = true; + var digest = this._digest(); + if (encoding !== undefined) digest = digest.toString(encoding); + + // reset state + this._block.fill(0); + this._blockOffset = 0; + for (var i = 0; i < 4; ++i) this._length[i] = 0; + return digest; +}; +HashBase.prototype._digest = function () { + throw new Error('_digest is not implemented'); +}; +module.exports = HashBase; + +},{"inherits":440,"readable-stream":491,"safe-buffer":494}],426:[function(require,module,exports){ +"use strict"; + +var hash = exports; +hash.utils = require('./hash/utils'); +hash.common = require('./hash/common'); +hash.sha = require('./hash/sha'); +hash.ripemd = require('./hash/ripemd'); +hash.hmac = require('./hash/hmac'); + +// Proxy hash functions to the main object +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; + +},{"./hash/common":427,"./hash/hmac":428,"./hash/ripemd":429,"./hash/sha":430,"./hash/utils":437}],427:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; +} +exports.BlockHash = BlockHash; +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) this.pending = msg;else this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; + + // Enough data, try updating + if (this.pending.length >= this._delta8) { + msg = this.pending; + + // Process pending data in blocks + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) this.pending = null; + msg = utils.join32(msg, 0, msg.length - r, this.endian); + for (var i = 0; i < msg.length; i += this._delta32) this._update(msg, i, i + this._delta32); + } + return this; +}; +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); + return this._digest(enc); +}; +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - (len + this.padLength) % bytes; + var res = new Array(k + this.padLength); + res[0] = 0x80; + for (var i = 1; i < k; i++) res[i] = 0; + + // Append length + len <<= 3; + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = len >>> 24 & 0xff; + res[i++] = len >>> 16 & 0xff; + res[i++] = len >>> 8 & 0xff; + res[i++] = len & 0xff; + } else { + res[i++] = len & 0xff; + res[i++] = len >>> 8 & 0xff; + res[i++] = len >>> 16 & 0xff; + res[i++] = len >>> 24 & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + for (t = 8; t < this.padLength; t++) res[i++] = 0; + } + return res; +}; + +},{"./utils":437,"minimalistic-assert":453}],428:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var assert = require('minimalistic-assert'); +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; + this._init(utils.toArray(key, enc)); +} +module.exports = Hmac; +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); + + // Add padding to key + for (var i = key.length; i < this.blockSize; i++) key.push(0); + for (i = 0; i < key.length; i++) key[i] ^= 0x36; + this.inner = new this.Hash().update(key); + + // 0x36 ^ 0x5c = 0x6a + for (i = 0; i < key.length; i++) key[i] ^= 0x6a; + this.outer = new this.Hash().update(key); +}; +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; +}; +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; + +},{"./utils":437,"minimalistic-assert":453}],429:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var common = require('./common'); +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = common.BlockHash; +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) return new RIPEMD160(); + BlockHash.call(this); + this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + this.endian = 'little'; +} +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + for (var j = 0; j < 80; j++) { + var T = sum32(rotl32(sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), s[j]), E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32(rotl32(sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), sh[j]), Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; + } + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'little');else return utils.split32(this.h, 'little'); +}; +function f(j, x, y, z) { + if (j <= 15) return x ^ y ^ z;else if (j <= 31) return x & y | ~x & z;else if (j <= 47) return (x | ~y) ^ z;else if (j <= 63) return x & z | y & ~z;else return x ^ (y | ~z); +} +function K(j) { + if (j <= 15) return 0x00000000;else if (j <= 31) return 0x5a827999;else if (j <= 47) return 0x6ed9eba1;else if (j <= 63) return 0x8f1bbcdc;else return 0xa953fd4e; +} +function Kh(j) { + if (j <= 15) return 0x50a28be6;else if (j <= 31) return 0x5c4dd124;else if (j <= 47) return 0x6d703ef3;else if (j <= 63) return 0x7a6d76e9;else return 0x00000000; +} +var r = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]; +var rh = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]; +var s = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]; +var sh = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]; + +},{"./common":427,"./utils":437}],430:[function(require,module,exports){ +'use strict'; + +exports.sha1 = require('./sha/1'); +exports.sha224 = require('./sha/224'); +exports.sha256 = require('./sha/256'); +exports.sha384 = require('./sha/384'); +exports.sha512 = require('./sha/512'); + +},{"./sha/1":431,"./sha/224":432,"./sha/256":433,"./sha/384":434,"./sha/512":435}],431:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_5 = utils.sum32_5; +var ft_1 = shaCommon.ft_1; +var BlockHash = common.BlockHash; +var sha1_K = [0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6]; +function SHA1() { + if (!(this instanceof SHA1)) return new SHA1(); + BlockHash.call(this); + this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + this.W = new Array(80); +} +utils.inherits(SHA1, BlockHash); +module.exports = SHA1; +SHA1.blockSize = 512; +SHA1.outSize = 160; +SHA1.hmacStrength = 80; +SHA1.padLength = 64; +SHA1.prototype._update = function _update(msg, start) { + var W = this.W; + for (var i = 0; i < 16; i++) W[i] = msg[start + i]; + for (; i < W.length; i++) W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + for (i = 0; i < W.length; i++) { + var s = ~~(i / 20); + var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); + e = d; + d = c; + c = rotl32(b, 30); + b = a; + a = t; + } + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); +}; +SHA1.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big'); +}; + +},{"../common":427,"../utils":437,"./common":436}],432:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var SHA256 = require('./256'); +function SHA224() { + if (!(this instanceof SHA224)) return new SHA224(); + SHA256.call(this); + this.h = [0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]; +} +utils.inherits(SHA224, SHA256); +module.exports = SHA224; +SHA224.blockSize = 512; +SHA224.outSize = 224; +SHA224.hmacStrength = 192; +SHA224.padLength = 64; +SHA224.prototype._digest = function digest(enc) { + // Just truncate output + if (enc === 'hex') return utils.toHex32(this.h.slice(0, 7), 'big');else return utils.split32(this.h.slice(0, 7), 'big'); +}; + +},{"../utils":437,"./256":433}],433:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); +var assert = require('minimalistic-assert'); +var sum32 = utils.sum32; +var sum32_4 = utils.sum32_4; +var sum32_5 = utils.sum32_5; +var ch32 = shaCommon.ch32; +var maj32 = shaCommon.maj32; +var s0_256 = shaCommon.s0_256; +var s1_256 = shaCommon.s1_256; +var g0_256 = shaCommon.g0_256; +var g1_256 = shaCommon.g1_256; +var BlockHash = common.BlockHash; +var sha256_K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; +function SHA256() { + if (!(this instanceof SHA256)) return new SHA256(); + BlockHash.call(this); + this.h = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]; + this.k = sha256_K; + this.W = new Array(64); +} +utils.inherits(SHA256, BlockHash); +module.exports = SHA256; +SHA256.blockSize = 512; +SHA256.outSize = 256; +SHA256.hmacStrength = 192; +SHA256.padLength = 64; +SHA256.prototype._update = function _update(msg, start) { + var W = this.W; + for (var i = 0; i < 16; i++) W[i] = msg[start + i]; + for (; i < W.length; i++) W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + var f = this.h[5]; + var g = this.h[6]; + var h = this.h[7]; + assert(this.k.length === W.length); + for (i = 0; i < W.length; i++) { + var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); + var T2 = sum32(s0_256(a), maj32(a, b, c)); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); + this.h[5] = sum32(this.h[5], f); + this.h[6] = sum32(this.h[6], g); + this.h[7] = sum32(this.h[7], h); +}; +SHA256.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big'); +}; + +},{"../common":427,"../utils":437,"./common":436,"minimalistic-assert":453}],434:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var SHA512 = require('./512'); +function SHA384() { + if (!(this instanceof SHA384)) return new SHA384(); + SHA512.call(this); + this.h = [0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939, 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4]; +} +utils.inherits(SHA384, SHA512); +module.exports = SHA384; +SHA384.blockSize = 1024; +SHA384.outSize = 384; +SHA384.hmacStrength = 192; +SHA384.padLength = 128; +SHA384.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h.slice(0, 12), 'big');else return utils.split32(this.h.slice(0, 12), 'big'); +}; + +},{"../utils":437,"./512":435}],435:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var common = require('../common'); +var assert = require('minimalistic-assert'); +var rotr64_hi = utils.rotr64_hi; +var rotr64_lo = utils.rotr64_lo; +var shr64_hi = utils.shr64_hi; +var shr64_lo = utils.shr64_lo; +var sum64 = utils.sum64; +var sum64_hi = utils.sum64_hi; +var sum64_lo = utils.sum64_lo; +var sum64_4_hi = utils.sum64_4_hi; +var sum64_4_lo = utils.sum64_4_lo; +var sum64_5_hi = utils.sum64_5_hi; +var sum64_5_lo = utils.sum64_5_lo; +var BlockHash = common.BlockHash; +var sha512_K = [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817]; +function SHA512() { + if (!(this instanceof SHA512)) return new SHA512(); + BlockHash.call(this); + this.h = [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1, 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179]; + this.k = sha512_K; + this.W = new Array(160); +} +utils.inherits(SHA512, BlockHash); +module.exports = SHA512; +SHA512.blockSize = 1024; +SHA512.outSize = 512; +SHA512.hmacStrength = 192; +SHA512.padLength = 128; +SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { + var W = this.W; + + // 32 x 32bit words + for (var i = 0; i < 32; i++) W[i] = msg[start + i]; + for (; i < W.length; i += 2) { + var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 + var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); + var c1_hi = W[i - 14]; // i - 7 + var c1_lo = W[i - 13]; + var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 + var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); + var c3_hi = W[i - 32]; // i - 16 + var c3_lo = W[i - 31]; + W[i] = sum64_4_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); + W[i + 1] = sum64_4_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); + } +}; +SHA512.prototype._update = function _update(msg, start) { + this._prepareBlock(msg, start); + var W = this.W; + var ah = this.h[0]; + var al = this.h[1]; + var bh = this.h[2]; + var bl = this.h[3]; + var ch = this.h[4]; + var cl = this.h[5]; + var dh = this.h[6]; + var dl = this.h[7]; + var eh = this.h[8]; + var el = this.h[9]; + var fh = this.h[10]; + var fl = this.h[11]; + var gh = this.h[12]; + var gl = this.h[13]; + var hh = this.h[14]; + var hl = this.h[15]; + assert(this.k.length === W.length); + for (var i = 0; i < W.length; i += 2) { + var c0_hi = hh; + var c0_lo = hl; + var c1_hi = s1_512_hi(eh, el); + var c1_lo = s1_512_lo(eh, el); + var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); + var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); + var c3_hi = this.k[i]; + var c3_lo = this.k[i + 1]; + var c4_hi = W[i]; + var c4_lo = W[i + 1]; + var T1_hi = sum64_5_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); + var T1_lo = sum64_5_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); + c0_hi = s0_512_hi(ah, al); + c0_lo = s0_512_lo(ah, al); + c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); + c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); + var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); + var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + eh = sum64_hi(dh, dl, T1_hi, T1_lo); + el = sum64_lo(dl, dl, T1_hi, T1_lo); + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); + al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); + } + sum64(this.h, 0, ah, al); + sum64(this.h, 2, bh, bl); + sum64(this.h, 4, ch, cl); + sum64(this.h, 6, dh, dl); + sum64(this.h, 8, eh, el); + sum64(this.h, 10, fh, fl); + sum64(this.h, 12, gh, gl); + sum64(this.h, 14, hh, hl); +}; +SHA512.prototype._digest = function digest(enc) { + if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big'); +}; +function ch64_hi(xh, xl, yh, yl, zh) { + var r = xh & yh ^ ~xh & zh; + if (r < 0) r += 0x100000000; + return r; +} +function ch64_lo(xh, xl, yh, yl, zh, zl) { + var r = xl & yl ^ ~xl & zl; + if (r < 0) r += 0x100000000; + return r; +} +function maj64_hi(xh, xl, yh, yl, zh) { + var r = xh & yh ^ xh & zh ^ yh & zh; + if (r < 0) r += 0x100000000; + return r; +} +function maj64_lo(xh, xl, yh, yl, zh, zl) { + var r = xl & yl ^ xl & zl ^ yl & zl; + if (r < 0) r += 0x100000000; + return r; +} +function s0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 28); + var c1_hi = rotr64_hi(xl, xh, 2); // 34 + var c2_hi = rotr64_hi(xl, xh, 7); // 39 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} +function s0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 28); + var c1_lo = rotr64_lo(xl, xh, 2); // 34 + var c2_lo = rotr64_lo(xl, xh, 7); // 39 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} +function s1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 14); + var c1_hi = rotr64_hi(xh, xl, 18); + var c2_hi = rotr64_hi(xl, xh, 9); // 41 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} +function s1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 14); + var c1_lo = rotr64_lo(xh, xl, 18); + var c2_lo = rotr64_lo(xl, xh, 9); // 41 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} +function g0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 1); + var c1_hi = rotr64_hi(xh, xl, 8); + var c2_hi = shr64_hi(xh, xl, 7); + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} +function g0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 1); + var c1_lo = rotr64_lo(xh, xl, 8); + var c2_lo = shr64_lo(xh, xl, 7); + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} +function g1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 19); + var c1_hi = rotr64_hi(xl, xh, 29); // 61 + var c2_hi = shr64_hi(xh, xl, 6); + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) r += 0x100000000; + return r; +} +function g1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 19); + var c1_lo = rotr64_lo(xl, xh, 29); // 61 + var c2_lo = shr64_lo(xh, xl, 6); + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) r += 0x100000000; + return r; +} + +},{"../common":427,"../utils":437,"minimalistic-assert":453}],436:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var rotr32 = utils.rotr32; +function ft_1(s, x, y, z) { + if (s === 0) return ch32(x, y, z); + if (s === 1 || s === 3) return p32(x, y, z); + if (s === 2) return maj32(x, y, z); +} +exports.ft_1 = ft_1; +function ch32(x, y, z) { + return x & y ^ ~x & z; +} +exports.ch32 = ch32; +function maj32(x, y, z) { + return x & y ^ x & z ^ y & z; +} +exports.maj32 = maj32; +function p32(x, y, z) { + return x ^ y ^ z; +} +exports.p32 = p32; +function s0_256(x) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} +exports.s0_256 = s0_256; +function s1_256(x) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} +exports.s1_256 = s1_256; +function g0_256(x) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ x >>> 3; +} +exports.g0_256 = g0_256; +function g1_256(x) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ x >>> 10; +} +exports.g1_256 = g1_256; + +},{"../utils":437}],437:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); +exports.inherits = inherits; +function isSurrogatePair(msg, i) { + if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { + return false; + } + if (i < 0 || i + 1 >= msg.length) { + return false; + } + return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; +} +function toArray(msg, enc) { + if (Array.isArray(msg)) return msg.slice(); + if (!msg) return []; + var res = []; + if (typeof msg === 'string') { + if (!enc) { + // Inspired by stringToUtf8ByteArray() in closure-library by Google + // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 + // Apache License 2.0 + // https://github.com/google/closure-library/blob/master/LICENSE + var p = 0; + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + if (c < 128) { + res[p++] = c; + } else if (c < 2048) { + res[p++] = c >> 6 | 192; + res[p++] = c & 63 | 128; + } else if (isSurrogatePair(msg, i)) { + c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); + res[p++] = c >> 18 | 240; + res[p++] = c >> 12 & 63 | 128; + res[p++] = c >> 6 & 63 | 128; + res[p++] = c & 63 | 128; + } else { + res[p++] = c >> 12 | 224; + res[p++] = c >> 6 & 63 | 128; + res[p++] = c & 63 | 128; + } + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) msg = '0' + msg; + for (i = 0; i < msg.length; i += 2) res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + } else { + for (i = 0; i < msg.length; i++) res[i] = msg[i] | 0; + } + return res; +} +exports.toArray = toArray; +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) res += zero2(msg[i].toString(16)); + return res; +} +exports.toHex = toHex; +function htonl(w) { + var res = w >>> 24 | w >>> 8 & 0xff00 | w << 8 & 0xff0000 | (w & 0xff) << 24; + return res >>> 0; +} +exports.htonl = htonl; +function toHex32(msg, endian) { + var res = ''; + for (var i = 0; i < msg.length; i++) { + var w = msg[i]; + if (endian === 'little') w = htonl(w); + res += zero8(w.toString(16)); + } + return res; +} +exports.toHex32 = toHex32; +function zero2(word) { + if (word.length === 1) return '0' + word;else return word; +} +exports.zero2 = zero2; +function zero8(word) { + if (word.length === 7) return '0' + word;else if (word.length === 6) return '00' + word;else if (word.length === 5) return '000' + word;else if (word.length === 4) return '0000' + word;else if (word.length === 3) return '00000' + word;else if (word.length === 2) return '000000' + word;else if (word.length === 1) return '0000000' + word;else return word; +} +exports.zero8 = zero8; +function join32(msg, start, end, endian) { + var len = end - start; + assert(len % 4 === 0); + var res = new Array(len / 4); + for (var i = 0, k = start; i < res.length; i++, k += 4) { + var w; + if (endian === 'big') w = msg[k] << 24 | msg[k + 1] << 16 | msg[k + 2] << 8 | msg[k + 3];else w = msg[k + 3] << 24 | msg[k + 2] << 16 | msg[k + 1] << 8 | msg[k]; + res[i] = w >>> 0; + } + return res; +} +exports.join32 = join32; +function split32(msg, endian) { + var res = new Array(msg.length * 4); + for (var i = 0, k = 0; i < msg.length; i++, k += 4) { + var m = msg[i]; + if (endian === 'big') { + res[k] = m >>> 24; + res[k + 1] = m >>> 16 & 0xff; + res[k + 2] = m >>> 8 & 0xff; + res[k + 3] = m & 0xff; + } else { + res[k + 3] = m >>> 24; + res[k + 2] = m >>> 16 & 0xff; + res[k + 1] = m >>> 8 & 0xff; + res[k] = m & 0xff; + } + } + return res; +} +exports.split32 = split32; +function rotr32(w, b) { + return w >>> b | w << 32 - b; +} +exports.rotr32 = rotr32; +function rotl32(w, b) { + return w << b | w >>> 32 - b; +} +exports.rotl32 = rotl32; +function sum32(a, b) { + return a + b >>> 0; +} +exports.sum32 = sum32; +function sum32_3(a, b, c) { + return a + b + c >>> 0; +} +exports.sum32_3 = sum32_3; +function sum32_4(a, b, c, d) { + return a + b + c + d >>> 0; +} +exports.sum32_4 = sum32_4; +function sum32_5(a, b, c, d, e) { + return a + b + c + d + e >>> 0; +} +exports.sum32_5 = sum32_5; +function sum64(buf, pos, ah, al) { + var bh = buf[pos]; + var bl = buf[pos + 1]; + var lo = al + bl >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + buf[pos] = hi >>> 0; + buf[pos + 1] = lo; +} +exports.sum64 = sum64; +function sum64_hi(ah, al, bh, bl) { + var lo = al + bl >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + return hi >>> 0; +} +exports.sum64_hi = sum64_hi; +function sum64_lo(ah, al, bh, bl) { + var lo = al + bl; + return lo >>> 0; +} +exports.sum64_lo = sum64_lo; +function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { + var carry = 0; + var lo = al; + lo = lo + bl >>> 0; + carry += lo < al ? 1 : 0; + lo = lo + cl >>> 0; + carry += lo < cl ? 1 : 0; + lo = lo + dl >>> 0; + carry += lo < dl ? 1 : 0; + var hi = ah + bh + ch + dh + carry; + return hi >>> 0; +} +exports.sum64_4_hi = sum64_4_hi; +function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { + var lo = al + bl + cl + dl; + return lo >>> 0; +} +exports.sum64_4_lo = sum64_4_lo; +function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var carry = 0; + var lo = al; + lo = lo + bl >>> 0; + carry += lo < al ? 1 : 0; + lo = lo + cl >>> 0; + carry += lo < cl ? 1 : 0; + lo = lo + dl >>> 0; + carry += lo < dl ? 1 : 0; + lo = lo + el >>> 0; + carry += lo < el ? 1 : 0; + var hi = ah + bh + ch + dh + eh + carry; + return hi >>> 0; +} +exports.sum64_5_hi = sum64_5_hi; +function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var lo = al + bl + cl + dl + el; + return lo >>> 0; +} +exports.sum64_5_lo = sum64_5_lo; +function rotr64_hi(ah, al, num) { + var r = al << 32 - num | ah >>> num; + return r >>> 0; +} +exports.rotr64_hi = rotr64_hi; +function rotr64_lo(ah, al, num) { + var r = ah << 32 - num | al >>> num; + return r >>> 0; +} +exports.rotr64_lo = rotr64_lo; +function shr64_hi(ah, al, num) { + return ah >>> num; +} +exports.shr64_hi = shr64_hi; +function shr64_lo(ah, al, num) { + var r = ah << 32 - num | al >>> num; + return r >>> 0; +} +exports.shr64_lo = shr64_lo; + +},{"inherits":440,"minimalistic-assert":453}],438:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var utils = require('minimalistic-crypto-utils'); +var assert = require('minimalistic-assert'); +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; + this._reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; + var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); + var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); + var pers = utils.toArray(options.pers, options.persEnc || 'hex'); + assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._init(entropy, nonce, pers); +} +module.exports = HmacDRBG; +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; + } + this._update(seed); + this._reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 +}; + +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); +}; +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac().update(this.V).update([0x00]); + if (seed) kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) return; + this.K = this._hmac().update(this.V).update([0x01]).update(seed).digest(); + this.V = this._hmac().update(this.V).digest(); +}; +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; + } + entropy = utils.toArray(entropy, entropyEnc); + add = utils.toArray(add, addEnc); + assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._update(entropy.concat(add || [])); + this._reseed = 1; +}; +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this._reseed > this.reseedInterval) throw new Error('Reseed is required'); + + // Optional encoding + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } + + // Optional additional data + if (add) { + add = utils.toArray(add, addEnc || 'hex'); + this._update(add); + } + var temp = []; + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); + } + var res = temp.slice(0, len); + this._update(add); + this._reseed++; + return utils.encode(res, enc); +}; + +},{"hash.js":426,"minimalistic-assert":453,"minimalistic-crypto-utils":454}],439:[function(require,module,exports){ +"use strict"; + +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? nBytes - 1 : 0; + var d = isLE ? -1 : 1; + var s = buffer[offset + i]; + i += d; + e = s & (1 << -nBits) - 1; + s >>= -nBits; + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : (s ? -1 : 1) * Infinity; + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0; + var i = isLE ? 0 : nBytes - 1; + var d = isLE ? 1 : -1; + var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + value = Math.abs(value); + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + e = e << mLen | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + buffer[offset + i - d] |= s * 128; +}; + +},{}],440:[function(require,module,exports){ +"use strict"; + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + }; +} + +},{}],441:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,setImmediate){(function (){ +"use strict"; + +/*! + +JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/main/LICENSE +*/ + +!function (e) { + if ("object" == typeof exports && "undefined" != typeof module) module.exports = e();else if ("function" == typeof define && define.amd) define([], e);else { + ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).JSZip = e(); + } +}(function () { + return function s(a, o, h) { + function u(r, e) { + if (!o[r]) { + if (!a[r]) { + var t = "function" == typeof require && require; + if (!e && t) return t(r, !0); + if (l) return l(r, !0); + var n = new Error("Cannot find module '" + r + "'"); + throw n.code = "MODULE_NOT_FOUND", n; + } + var i = o[r] = { + exports: {} + }; + a[r][0].call(i.exports, function (e) { + var t = a[r][1][e]; + return u(t || e); + }, i, i.exports, s, a, o, h); + } + return o[r].exports; + } + for (var l = "function" == typeof require && require, e = 0; e < h.length; e++) u(h[e]); + return u; + }({ + 1: [function (e, t, r) { + "use strict"; + + var d = e("./utils"), + c = e("./support"), + p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + r.encode = function (e) { + for (var t, r, n, i, s, a, o, h = [], u = 0, l = e.length, f = l, c = "string" !== d.getTypeOf(e); u < e.length;) f = l - u, n = c ? (t = e[u++], r = u < l ? e[u++] : 0, u < l ? e[u++] : 0) : (t = e.charCodeAt(u++), r = u < l ? e.charCodeAt(u++) : 0, u < l ? e.charCodeAt(u++) : 0), i = t >> 2, s = (3 & t) << 4 | r >> 4, a = 1 < f ? (15 & r) << 2 | n >> 6 : 64, o = 2 < f ? 63 & n : 64, h.push(p.charAt(i) + p.charAt(s) + p.charAt(a) + p.charAt(o)); + return h.join(""); + }, r.decode = function (e) { + var t, + r, + n, + i, + s, + a, + o = 0, + h = 0, + u = "data:"; + if (e.substr(0, u.length) === u) throw new Error("Invalid base64 input, it looks like a data url."); + var l, + f = 3 * (e = e.replace(/[^A-Za-z0-9+/=]/g, "")).length / 4; + if (e.charAt(e.length - 1) === p.charAt(64) && f--, e.charAt(e.length - 2) === p.charAt(64) && f--, f % 1 != 0) throw new Error("Invalid base64 input, bad content length."); + for (l = c.uint8array ? new Uint8Array(0 | f) : new Array(0 | f); o < e.length;) t = p.indexOf(e.charAt(o++)) << 2 | (i = p.indexOf(e.charAt(o++))) >> 4, r = (15 & i) << 4 | (s = p.indexOf(e.charAt(o++))) >> 2, n = (3 & s) << 6 | (a = p.indexOf(e.charAt(o++))), l[h++] = t, 64 !== s && (l[h++] = r), 64 !== a && (l[h++] = n); + return l; + }; + }, { + "./support": 30, + "./utils": 32 + }], + 2: [function (e, t, r) { + "use strict"; + + var n = e("./external"), + i = e("./stream/DataWorker"), + s = e("./stream/Crc32Probe"), + a = e("./stream/DataLengthProbe"); + function o(e, t, r, n, i) { + this.compressedSize = e, this.uncompressedSize = t, this.crc32 = r, this.compression = n, this.compressedContent = i; + } + o.prototype = { + getContentWorker: function () { + var e = new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")), + t = this; + return e.on("end", function () { + if (this.streamInfo.data_length !== t.uncompressedSize) throw new Error("Bug : uncompressed data size mismatch"); + }), e; + }, + getCompressedWorker: function () { + return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize", this.compressedSize).withStreamInfo("uncompressedSize", this.uncompressedSize).withStreamInfo("crc32", this.crc32).withStreamInfo("compression", this.compression); + } + }, o.createWorkerFrom = function (e, t, r) { + return e.pipe(new s()).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression", t); + }, t.exports = o; + }, { + "./external": 6, + "./stream/Crc32Probe": 25, + "./stream/DataLengthProbe": 26, + "./stream/DataWorker": 27 + }], + 3: [function (e, t, r) { + "use strict"; + + var n = e("./stream/GenericWorker"); + r.STORE = { + magic: "\0\0", + compressWorker: function () { + return new n("STORE compression"); + }, + uncompressWorker: function () { + return new n("STORE decompression"); + } + }, r.DEFLATE = e("./flate"); + }, { + "./flate": 7, + "./stream/GenericWorker": 28 + }], + 4: [function (e, t, r) { + "use strict"; + + var n = e("./utils"); + var o = function () { + for (var e, t = [], r = 0; r < 256; r++) { + e = r; + for (var n = 0; n < 8; n++) e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; + t[r] = e; + } + return t; + }(); + t.exports = function (e, t) { + return void 0 !== e && e.length ? "string" !== n.getTypeOf(e) ? function (e, t, r, n) { + var i = o, + s = n + r; + e ^= -1; + for (var a = n; a < s; a++) e = e >>> 8 ^ i[255 & (e ^ t[a])]; + return -1 ^ e; + }(0 | t, e, e.length, 0) : function (e, t, r, n) { + var i = o, + s = n + r; + e ^= -1; + for (var a = n; a < s; a++) e = e >>> 8 ^ i[255 & (e ^ t.charCodeAt(a))]; + return -1 ^ e; + }(0 | t, e, e.length, 0) : 0; + }; + }, { + "./utils": 32 + }], + 5: [function (e, t, r) { + "use strict"; + + r.base64 = !1, r.binary = !1, r.dir = !1, r.createFolders = !0, r.date = null, r.compression = null, r.compressionOptions = null, r.comment = null, r.unixPermissions = null, r.dosPermissions = null; + }, {}], + 6: [function (e, t, r) { + "use strict"; + + var n = null; + n = "undefined" != typeof Promise ? Promise : e("lie"), t.exports = { + Promise: n + }; + }, { + lie: 37 + }], + 7: [function (e, t, r) { + "use strict"; + + var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array, + i = e("pako"), + s = e("./utils"), + a = e("./stream/GenericWorker"), + o = n ? "uint8array" : "array"; + function h(e, t) { + a.call(this, "FlateWorker/" + e), this._pako = null, this._pakoAction = e, this._pakoOptions = t, this.meta = {}; + } + r.magic = "\b\0", s.inherits(h, a), h.prototype.processChunk = function (e) { + this.meta = e.meta, null === this._pako && this._createPako(), this._pako.push(s.transformTo(o, e.data), !1); + }, h.prototype.flush = function () { + a.prototype.flush.call(this), null === this._pako && this._createPako(), this._pako.push([], !0); + }, h.prototype.cleanUp = function () { + a.prototype.cleanUp.call(this), this._pako = null; + }, h.prototype._createPako = function () { + this._pako = new i[this._pakoAction]({ + raw: !0, + level: this._pakoOptions.level || -1 + }); + var t = this; + this._pako.onData = function (e) { + t.push({ + data: e, + meta: t.meta + }); + }; + }, r.compressWorker = function (e) { + return new h("Deflate", e); + }, r.uncompressWorker = function () { + return new h("Inflate", {}); + }; + }, { + "./stream/GenericWorker": 28, + "./utils": 32, + pako: 38 + }], + 8: [function (e, t, r) { + "use strict"; + + function A(e, t) { + var r, + n = ""; + for (r = 0; r < t; r++) n += String.fromCharCode(255 & e), e >>>= 8; + return n; + } + function n(e, t, r, n, i, s) { + var a, + o, + h = e.file, + u = e.compression, + l = s !== O.utf8encode, + f = I.transformTo("string", s(h.name)), + c = I.transformTo("string", O.utf8encode(h.name)), + d = h.comment, + p = I.transformTo("string", s(d)), + m = I.transformTo("string", O.utf8encode(d)), + _ = c.length !== h.name.length, + g = m.length !== d.length, + b = "", + v = "", + y = "", + w = h.dir, + k = h.date, + x = { + crc32: 0, + compressedSize: 0, + uncompressedSize: 0 + }; + t && !r || (x.crc32 = e.crc32, x.compressedSize = e.compressedSize, x.uncompressedSize = e.uncompressedSize); + var S = 0; + t && (S |= 8), l || !_ && !g || (S |= 2048); + var z = 0, + C = 0; + w && (z |= 16), "UNIX" === i ? (C = 798, z |= function (e, t) { + var r = e; + return e || (r = t ? 16893 : 33204), (65535 & r) << 16; + }(h.unixPermissions, w)) : (C = 20, z |= function (e) { + return 63 & (e || 0); + }(h.dosPermissions)), a = k.getUTCHours(), a <<= 6, a |= k.getUTCMinutes(), a <<= 5, a |= k.getUTCSeconds() / 2, o = k.getUTCFullYear() - 1980, o <<= 4, o |= k.getUTCMonth() + 1, o <<= 5, o |= k.getUTCDate(), _ && (v = A(1, 1) + A(B(f), 4) + c, b += "up" + A(v.length, 2) + v), g && (y = A(1, 1) + A(B(p), 4) + m, b += "uc" + A(y.length, 2) + y); + var E = ""; + return E += "\n\0", E += A(S, 2), E += u.magic, E += A(a, 2), E += A(o, 2), E += A(x.crc32, 4), E += A(x.compressedSize, 4), E += A(x.uncompressedSize, 4), E += A(f.length, 2), E += A(b.length, 2), { + fileRecord: R.LOCAL_FILE_HEADER + E + f + b, + dirRecord: R.CENTRAL_FILE_HEADER + A(C, 2) + E + A(p.length, 2) + "\0\0\0\0" + A(z, 4) + A(n, 4) + f + b + p + }; + } + var I = e("../utils"), + i = e("../stream/GenericWorker"), + O = e("../utf8"), + B = e("../crc32"), + R = e("../signature"); + function s(e, t, r, n) { + i.call(this, "ZipFileWorker"), this.bytesWritten = 0, this.zipComment = t, this.zipPlatform = r, this.encodeFileName = n, this.streamFiles = e, this.accumulate = !1, this.contentBuffer = [], this.dirRecords = [], this.currentSourceOffset = 0, this.entriesCount = 0, this.currentFile = null, this._sources = []; + } + I.inherits(s, i), s.prototype.push = function (e) { + var t = e.meta.percent || 0, + r = this.entriesCount, + n = this._sources.length; + this.accumulate ? this.contentBuffer.push(e) : (this.bytesWritten += e.data.length, i.prototype.push.call(this, { + data: e.data, + meta: { + currentFile: this.currentFile, + percent: r ? (t + 100 * (r - n - 1)) / r : 100 + } + })); + }, s.prototype.openedSource = function (e) { + this.currentSourceOffset = this.bytesWritten, this.currentFile = e.file.name; + var t = this.streamFiles && !e.file.dir; + if (t) { + var r = n(e, t, !1, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data: r.fileRecord, + meta: { + percent: 0 + } + }); + } else this.accumulate = !0; + }, s.prototype.closedSource = function (e) { + this.accumulate = !1; + var t = this.streamFiles && !e.file.dir, + r = n(e, t, !0, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + if (this.dirRecords.push(r.dirRecord), t) this.push({ + data: function (e) { + return R.DATA_DESCRIPTOR + A(e.crc32, 4) + A(e.compressedSize, 4) + A(e.uncompressedSize, 4); + }(e), + meta: { + percent: 100 + } + });else for (this.push({ + data: r.fileRecord, + meta: { + percent: 0 + } + }); this.contentBuffer.length;) this.push(this.contentBuffer.shift()); + this.currentFile = null; + }, s.prototype.flush = function () { + for (var e = this.bytesWritten, t = 0; t < this.dirRecords.length; t++) this.push({ + data: this.dirRecords[t], + meta: { + percent: 100 + } + }); + var r = this.bytesWritten - e, + n = function (e, t, r, n, i) { + var s = I.transformTo("string", i(n)); + return R.CENTRAL_DIRECTORY_END + "\0\0\0\0" + A(e, 2) + A(e, 2) + A(t, 4) + A(r, 4) + A(s.length, 2) + s; + }(this.dirRecords.length, r, e, this.zipComment, this.encodeFileName); + this.push({ + data: n, + meta: { + percent: 100 + } + }); + }, s.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(), this.openedSource(this.previous.streamInfo), this.isPaused ? this.previous.pause() : this.previous.resume(); + }, s.prototype.registerPrevious = function (e) { + this._sources.push(e); + var t = this; + return e.on("data", function (e) { + t.processChunk(e); + }), e.on("end", function () { + t.closedSource(t.previous.streamInfo), t._sources.length ? t.prepareNextSource() : t.end(); + }), e.on("error", function (e) { + t.error(e); + }), this; + }, s.prototype.resume = function () { + return !!i.prototype.resume.call(this) && (!this.previous && this._sources.length ? (this.prepareNextSource(), !0) : this.previous || this._sources.length || this.generatedError ? void 0 : (this.end(), !0)); + }, s.prototype.error = function (e) { + var t = this._sources; + if (!i.prototype.error.call(this, e)) return !1; + for (var r = 0; r < t.length; r++) try { + t[r].error(e); + } catch (e) {} + return !0; + }, s.prototype.lock = function () { + i.prototype.lock.call(this); + for (var e = this._sources, t = 0; t < e.length; t++) e[t].lock(); + }, t.exports = s; + }, { + "../crc32": 4, + "../signature": 23, + "../stream/GenericWorker": 28, + "../utf8": 31, + "../utils": 32 + }], + 9: [function (e, t, r) { + "use strict"; + + var u = e("../compressions"), + n = e("./ZipFileWorker"); + r.generateWorker = function (e, a, t) { + var o = new n(a.streamFiles, t, a.platform, a.encodeFileName), + h = 0; + try { + e.forEach(function (e, t) { + h++; + var r = function (e, t) { + var r = e || t, + n = u[r]; + if (!n) throw new Error(r + " is not a valid compression method !"); + return n; + }(t.options.compression, a.compression), + n = t.options.compressionOptions || a.compressionOptions || {}, + i = t.dir, + s = t.date; + t._compressWorker(r, n).withStreamInfo("file", { + name: e, + dir: i, + date: s, + comment: t.comment || "", + unixPermissions: t.unixPermissions, + dosPermissions: t.dosPermissions + }).pipe(o); + }), o.entriesCount = h; + } catch (e) { + o.error(e); + } + return o; + }; + }, { + "../compressions": 3, + "./ZipFileWorker": 8 + }], + 10: [function (e, t, r) { + "use strict"; + + function n() { + if (!(this instanceof n)) return new n(); + if (arguments.length) throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + this.files = Object.create(null), this.comment = null, this.root = "", this.clone = function () { + var e = new n(); + for (var t in this) "function" != typeof this[t] && (e[t] = this[t]); + return e; + }; + } + (n.prototype = e("./object")).loadAsync = e("./load"), n.support = e("./support"), n.defaults = e("./defaults"), n.version = "3.10.1", n.loadAsync = function (e, t) { + return new n().loadAsync(e, t); + }, n.external = e("./external"), t.exports = n; + }, { + "./defaults": 5, + "./external": 6, + "./load": 11, + "./object": 15, + "./support": 30 + }], + 11: [function (e, t, r) { + "use strict"; + + var u = e("./utils"), + i = e("./external"), + n = e("./utf8"), + s = e("./zipEntries"), + a = e("./stream/Crc32Probe"), + l = e("./nodejsUtils"); + function f(n) { + return new i.Promise(function (e, t) { + var r = n.decompressed.getContentWorker().pipe(new a()); + r.on("error", function (e) { + t(e); + }).on("end", function () { + r.streamInfo.crc32 !== n.decompressed.crc32 ? t(new Error("Corrupted zip : CRC32 mismatch")) : e(); + }).resume(); + }); + } + t.exports = function (e, o) { + var h = this; + return o = u.extend(o || {}, { + base64: !1, + checkCRC32: !1, + optimizedBinaryString: !1, + createFolders: !1, + decodeFileName: n.utf8decode + }), l.isNode && l.isStream(e) ? i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")) : u.prepareContent("the loaded zip file", e, !0, o.optimizedBinaryString, o.base64).then(function (e) { + var t = new s(o); + return t.load(e), t; + }).then(function (e) { + var t = [i.Promise.resolve(e)], + r = e.files; + if (o.checkCRC32) for (var n = 0; n < r.length; n++) t.push(f(r[n])); + return i.Promise.all(t); + }).then(function (e) { + for (var t = e.shift(), r = t.files, n = 0; n < r.length; n++) { + var i = r[n], + s = i.fileNameStr, + a = u.resolve(i.fileNameStr); + h.file(a, i.decompressed, { + binary: !0, + optimizedBinaryString: !0, + date: i.date, + dir: i.dir, + comment: i.fileCommentStr.length ? i.fileCommentStr : null, + unixPermissions: i.unixPermissions, + dosPermissions: i.dosPermissions, + createFolders: o.createFolders + }), i.dir || (h.file(a).unsafeOriginalName = s); + } + return t.zipComment.length && (h.comment = t.zipComment), h; + }); + }; + }, { + "./external": 6, + "./nodejsUtils": 14, + "./stream/Crc32Probe": 25, + "./utf8": 31, + "./utils": 32, + "./zipEntries": 33 + }], + 12: [function (e, t, r) { + "use strict"; + + var n = e("../utils"), + i = e("../stream/GenericWorker"); + function s(e, t) { + i.call(this, "Nodejs stream input adapter for " + e), this._upstreamEnded = !1, this._bindStream(t); + } + n.inherits(s, i), s.prototype._bindStream = function (e) { + var t = this; + (this._stream = e).pause(), e.on("data", function (e) { + t.push({ + data: e, + meta: { + percent: 0 + } + }); + }).on("error", function (e) { + t.isPaused ? this.generatedError = e : t.error(e); + }).on("end", function () { + t.isPaused ? t._upstreamEnded = !0 : t.end(); + }); + }, s.prototype.pause = function () { + return !!i.prototype.pause.call(this) && (this._stream.pause(), !0); + }, s.prototype.resume = function () { + return !!i.prototype.resume.call(this) && (this._upstreamEnded ? this.end() : this._stream.resume(), !0); + }, t.exports = s; + }, { + "../stream/GenericWorker": 28, + "../utils": 32 + }], + 13: [function (e, t, r) { + "use strict"; + + var i = e("readable-stream").Readable; + function n(e, t, r) { + i.call(this, t), this._helper = e; + var n = this; + e.on("data", function (e, t) { + n.push(e) || n._helper.pause(), r && r(t); + }).on("error", function (e) { + n.emit("error", e); + }).on("end", function () { + n.push(null); + }); + } + e("../utils").inherits(n, i), n.prototype._read = function () { + this._helper.resume(); + }, t.exports = n; + }, { + "../utils": 32, + "readable-stream": 16 + }], + 14: [function (e, t, r) { + "use strict"; + + t.exports = { + isNode: "undefined" != typeof Buffer, + newBufferFrom: function (e, t) { + if (Buffer.from && Buffer.from !== Uint8Array.from) return Buffer.from(e, t); + if ("number" == typeof e) throw new Error('The "data" argument must not be a number'); + return new Buffer(e, t); + }, + allocBuffer: function (e) { + if (Buffer.alloc) return Buffer.alloc(e); + var t = new Buffer(e); + return t.fill(0), t; + }, + isBuffer: function (e) { + return Buffer.isBuffer(e); + }, + isStream: function (e) { + return e && "function" == typeof e.on && "function" == typeof e.pause && "function" == typeof e.resume; + } + }; + }, {}], + 15: [function (e, t, r) { + "use strict"; + + function s(e, t, r) { + var n, + i = u.getTypeOf(t), + s = u.extend(r || {}, f); + s.date = s.date || new Date(), null !== s.compression && (s.compression = s.compression.toUpperCase()), "string" == typeof s.unixPermissions && (s.unixPermissions = parseInt(s.unixPermissions, 8)), s.unixPermissions && 16384 & s.unixPermissions && (s.dir = !0), s.dosPermissions && 16 & s.dosPermissions && (s.dir = !0), s.dir && (e = g(e)), s.createFolders && (n = _(e)) && b.call(this, n, !0); + var a = "string" === i && !1 === s.binary && !1 === s.base64; + r && void 0 !== r.binary || (s.binary = !a), (t instanceof c && 0 === t.uncompressedSize || s.dir || !t || 0 === t.length) && (s.base64 = !1, s.binary = !0, t = "", s.compression = "STORE", i = "string"); + var o = null; + o = t instanceof c || t instanceof l ? t : p.isNode && p.isStream(t) ? new m(e, t) : u.prepareContent(e, t, s.binary, s.optimizedBinaryString, s.base64); + var h = new d(e, o, s); + this.files[e] = h; + } + var i = e("./utf8"), + u = e("./utils"), + l = e("./stream/GenericWorker"), + a = e("./stream/StreamHelper"), + f = e("./defaults"), + c = e("./compressedObject"), + d = e("./zipObject"), + o = e("./generate"), + p = e("./nodejsUtils"), + m = e("./nodejs/NodejsStreamInputAdapter"), + _ = function (e) { + "/" === e.slice(-1) && (e = e.substring(0, e.length - 1)); + var t = e.lastIndexOf("/"); + return 0 < t ? e.substring(0, t) : ""; + }, + g = function (e) { + return "/" !== e.slice(-1) && (e += "/"), e; + }, + b = function (e, t) { + return t = void 0 !== t ? t : f.createFolders, e = g(e), this.files[e] || s.call(this, e, null, { + dir: !0, + createFolders: t + }), this.files[e]; + }; + function h(e) { + return "[object RegExp]" === Object.prototype.toString.call(e); + } + var n = { + load: function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + forEach: function (e) { + var t, r, n; + for (t in this.files) n = this.files[t], (r = t.slice(this.root.length, t.length)) && t.slice(0, this.root.length) === this.root && e(r, n); + }, + filter: function (r) { + var n = []; + return this.forEach(function (e, t) { + r(e, t) && n.push(t); + }), n; + }, + file: function (e, t, r) { + if (1 !== arguments.length) return e = this.root + e, s.call(this, e, t, r), this; + if (h(e)) { + var n = e; + return this.filter(function (e, t) { + return !t.dir && n.test(e); + }); + } + var i = this.files[this.root + e]; + return i && !i.dir ? i : null; + }, + folder: function (r) { + if (!r) return this; + if (h(r)) return this.filter(function (e, t) { + return t.dir && r.test(e); + }); + var e = this.root + r, + t = b.call(this, e), + n = this.clone(); + return n.root = t.name, n; + }, + remove: function (r) { + r = this.root + r; + var e = this.files[r]; + if (e || ("/" !== r.slice(-1) && (r += "/"), e = this.files[r]), e && !e.dir) delete this.files[r];else for (var t = this.filter(function (e, t) { + return t.name.slice(0, r.length) === r; + }), n = 0; n < t.length; n++) delete this.files[t[n].name]; + return this; + }, + generate: function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + generateInternalStream: function (e) { + var t, + r = {}; + try { + if ((r = u.extend(e || {}, { + streamFiles: !1, + compression: "STORE", + compressionOptions: null, + type: "", + platform: "DOS", + comment: null, + mimeType: "application/zip", + encodeFileName: i.utf8encode + })).type = r.type.toLowerCase(), r.compression = r.compression.toUpperCase(), "binarystring" === r.type && (r.type = "string"), !r.type) throw new Error("No output type specified."); + u.checkSupport(r.type), "darwin" !== r.platform && "freebsd" !== r.platform && "linux" !== r.platform && "sunos" !== r.platform || (r.platform = "UNIX"), "win32" === r.platform && (r.platform = "DOS"); + var n = r.comment || this.comment || ""; + t = o.generateWorker(this, r, n); + } catch (e) { + (t = new l("error")).error(e); + } + return new a(t, r.type || "string", r.mimeType); + }, + generateAsync: function (e, t) { + return this.generateInternalStream(e).accumulate(t); + }, + generateNodeStream: function (e, t) { + return (e = e || {}).type || (e.type = "nodebuffer"), this.generateInternalStream(e).toNodejsStream(t); + } + }; + t.exports = n; + }, { + "./compressedObject": 2, + "./defaults": 5, + "./generate": 9, + "./nodejs/NodejsStreamInputAdapter": 12, + "./nodejsUtils": 14, + "./stream/GenericWorker": 28, + "./stream/StreamHelper": 29, + "./utf8": 31, + "./utils": 32, + "./zipObject": 35 + }], + 16: [function (e, t, r) { + "use strict"; + + t.exports = e("stream"); + }, { + stream: void 0 + }], + 17: [function (e, t, r) { + "use strict"; + + var n = e("./DataReader"); + function i(e) { + n.call(this, e); + for (var t = 0; t < this.data.length; t++) e[t] = 255 & e[t]; + } + e("../utils").inherits(i, n), i.prototype.byteAt = function (e) { + return this.data[this.zero + e]; + }, i.prototype.lastIndexOfSignature = function (e) { + for (var t = e.charCodeAt(0), r = e.charCodeAt(1), n = e.charCodeAt(2), i = e.charCodeAt(3), s = this.length - 4; 0 <= s; --s) if (this.data[s] === t && this.data[s + 1] === r && this.data[s + 2] === n && this.data[s + 3] === i) return s - this.zero; + return -1; + }, i.prototype.readAndCheckSignature = function (e) { + var t = e.charCodeAt(0), + r = e.charCodeAt(1), + n = e.charCodeAt(2), + i = e.charCodeAt(3), + s = this.readData(4); + return t === s[0] && r === s[1] && n === s[2] && i === s[3]; + }, i.prototype.readData = function (e) { + if (this.checkOffset(e), 0 === e) return []; + var t = this.data.slice(this.zero + this.index, this.zero + this.index + e); + return this.index += e, t; + }, t.exports = i; + }, { + "../utils": 32, + "./DataReader": 18 + }], + 18: [function (e, t, r) { + "use strict"; + + var n = e("../utils"); + function i(e) { + this.data = e, this.length = e.length, this.index = 0, this.zero = 0; + } + i.prototype = { + checkOffset: function (e) { + this.checkIndex(this.index + e); + }, + checkIndex: function (e) { + if (this.length < this.zero + e || e < 0) throw new Error("End of data reached (data length = " + this.length + ", asked index = " + e + "). Corrupted zip ?"); + }, + setIndex: function (e) { + this.checkIndex(e), this.index = e; + }, + skip: function (e) { + this.setIndex(this.index + e); + }, + byteAt: function () {}, + readInt: function (e) { + var t, + r = 0; + for (this.checkOffset(e), t = this.index + e - 1; t >= this.index; t--) r = (r << 8) + this.byteAt(t); + return this.index += e, r; + }, + readString: function (e) { + return n.transformTo("string", this.readData(e)); + }, + readData: function () {}, + lastIndexOfSignature: function () {}, + readAndCheckSignature: function () {}, + readDate: function () { + var e = this.readInt(4); + return new Date(Date.UTC(1980 + (e >> 25 & 127), (e >> 21 & 15) - 1, e >> 16 & 31, e >> 11 & 31, e >> 5 & 63, (31 & e) << 1)); + } + }, t.exports = i; + }, { + "../utils": 32 + }], + 19: [function (e, t, r) { + "use strict"; + + var n = e("./Uint8ArrayReader"); + function i(e) { + n.call(this, e); + } + e("../utils").inherits(i, n), i.prototype.readData = function (e) { + this.checkOffset(e); + var t = this.data.slice(this.zero + this.index, this.zero + this.index + e); + return this.index += e, t; + }, t.exports = i; + }, { + "../utils": 32, + "./Uint8ArrayReader": 21 + }], + 20: [function (e, t, r) { + "use strict"; + + var n = e("./DataReader"); + function i(e) { + n.call(this, e); + } + e("../utils").inherits(i, n), i.prototype.byteAt = function (e) { + return this.data.charCodeAt(this.zero + e); + }, i.prototype.lastIndexOfSignature = function (e) { + return this.data.lastIndexOf(e) - this.zero; + }, i.prototype.readAndCheckSignature = function (e) { + return e === this.readData(4); + }, i.prototype.readData = function (e) { + this.checkOffset(e); + var t = this.data.slice(this.zero + this.index, this.zero + this.index + e); + return this.index += e, t; + }, t.exports = i; + }, { + "../utils": 32, + "./DataReader": 18 + }], + 21: [function (e, t, r) { + "use strict"; + + var n = e("./ArrayReader"); + function i(e) { + n.call(this, e); + } + e("../utils").inherits(i, n), i.prototype.readData = function (e) { + if (this.checkOffset(e), 0 === e) return new Uint8Array(0); + var t = this.data.subarray(this.zero + this.index, this.zero + this.index + e); + return this.index += e, t; + }, t.exports = i; + }, { + "../utils": 32, + "./ArrayReader": 17 + }], + 22: [function (e, t, r) { + "use strict"; + + var n = e("../utils"), + i = e("../support"), + s = e("./ArrayReader"), + a = e("./StringReader"), + o = e("./NodeBufferReader"), + h = e("./Uint8ArrayReader"); + t.exports = function (e) { + var t = n.getTypeOf(e); + return n.checkSupport(t), "string" !== t || i.uint8array ? "nodebuffer" === t ? new o(e) : i.uint8array ? new h(n.transformTo("uint8array", e)) : new s(n.transformTo("array", e)) : new a(e); + }; + }, { + "../support": 30, + "../utils": 32, + "./ArrayReader": 17, + "./NodeBufferReader": 19, + "./StringReader": 20, + "./Uint8ArrayReader": 21 + }], + 23: [function (e, t, r) { + "use strict"; + + r.LOCAL_FILE_HEADER = "PK", r.CENTRAL_FILE_HEADER = "PK", r.CENTRAL_DIRECTORY_END = "PK", r.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK", r.ZIP64_CENTRAL_DIRECTORY_END = "PK", r.DATA_DESCRIPTOR = "PK\b"; + }, {}], + 24: [function (e, t, r) { + "use strict"; + + var n = e("./GenericWorker"), + i = e("../utils"); + function s(e) { + n.call(this, "ConvertWorker to " + e), this.destType = e; + } + i.inherits(s, n), s.prototype.processChunk = function (e) { + this.push({ + data: i.transformTo(this.destType, e.data), + meta: e.meta + }); + }, t.exports = s; + }, { + "../utils": 32, + "./GenericWorker": 28 + }], + 25: [function (e, t, r) { + "use strict"; + + var n = e("./GenericWorker"), + i = e("../crc32"); + function s() { + n.call(this, "Crc32Probe"), this.withStreamInfo("crc32", 0); + } + e("../utils").inherits(s, n), s.prototype.processChunk = function (e) { + this.streamInfo.crc32 = i(e.data, this.streamInfo.crc32 || 0), this.push(e); + }, t.exports = s; + }, { + "../crc32": 4, + "../utils": 32, + "./GenericWorker": 28 + }], + 26: [function (e, t, r) { + "use strict"; + + var n = e("../utils"), + i = e("./GenericWorker"); + function s(e) { + i.call(this, "DataLengthProbe for " + e), this.propName = e, this.withStreamInfo(e, 0); + } + n.inherits(s, i), s.prototype.processChunk = function (e) { + if (e) { + var t = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = t + e.data.length; + } + i.prototype.processChunk.call(this, e); + }, t.exports = s; + }, { + "../utils": 32, + "./GenericWorker": 28 + }], + 27: [function (e, t, r) { + "use strict"; + + var n = e("../utils"), + i = e("./GenericWorker"); + function s(e) { + i.call(this, "DataWorker"); + var t = this; + this.dataIsReady = !1, this.index = 0, this.max = 0, this.data = null, this.type = "", this._tickScheduled = !1, e.then(function (e) { + t.dataIsReady = !0, t.data = e, t.max = e && e.length || 0, t.type = n.getTypeOf(e), t.isPaused || t._tickAndRepeat(); + }, function (e) { + t.error(e); + }); + } + n.inherits(s, i), s.prototype.cleanUp = function () { + i.prototype.cleanUp.call(this), this.data = null; + }, s.prototype.resume = function () { + return !!i.prototype.resume.call(this) && (!this._tickScheduled && this.dataIsReady && (this._tickScheduled = !0, n.delay(this._tickAndRepeat, [], this)), !0); + }, s.prototype._tickAndRepeat = function () { + this._tickScheduled = !1, this.isPaused || this.isFinished || (this._tick(), this.isFinished || (n.delay(this._tickAndRepeat, [], this), this._tickScheduled = !0)); + }, s.prototype._tick = function () { + if (this.isPaused || this.isFinished) return !1; + var e = null, + t = Math.min(this.max, this.index + 16384); + if (this.index >= this.max) return this.end(); + switch (this.type) { + case "string": + e = this.data.substring(this.index, t); + break; + case "uint8array": + e = this.data.subarray(this.index, t); + break; + case "array": + case "nodebuffer": + e = this.data.slice(this.index, t); + } + return this.index = t, this.push({ + data: e, + meta: { + percent: this.max ? this.index / this.max * 100 : 0 + } + }); + }, t.exports = s; + }, { + "../utils": 32, + "./GenericWorker": 28 + }], + 28: [function (e, t, r) { + "use strict"; + + function n(e) { + this.name = e || "default", this.streamInfo = {}, this.generatedError = null, this.extraStreamInfo = {}, this.isPaused = !0, this.isFinished = !1, this.isLocked = !1, this._listeners = { + data: [], + end: [], + error: [] + }, this.previous = null; + } + n.prototype = { + push: function (e) { + this.emit("data", e); + }, + end: function () { + if (this.isFinished) return !1; + this.flush(); + try { + this.emit("end"), this.cleanUp(), this.isFinished = !0; + } catch (e) { + this.emit("error", e); + } + return !0; + }, + error: function (e) { + return !this.isFinished && (this.isPaused ? this.generatedError = e : (this.isFinished = !0, this.emit("error", e), this.previous && this.previous.error(e), this.cleanUp()), !0); + }, + on: function (e, t) { + return this._listeners[e].push(t), this; + }, + cleanUp: function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null, this._listeners = []; + }, + emit: function (e, t) { + if (this._listeners[e]) for (var r = 0; r < this._listeners[e].length; r++) this._listeners[e][r].call(this, t); + }, + pipe: function (e) { + return e.registerPrevious(this); + }, + registerPrevious: function (e) { + if (this.isLocked) throw new Error("The stream '" + this + "' has already been used."); + this.streamInfo = e.streamInfo, this.mergeStreamInfo(), this.previous = e; + var t = this; + return e.on("data", function (e) { + t.processChunk(e); + }), e.on("end", function () { + t.end(); + }), e.on("error", function (e) { + t.error(e); + }), this; + }, + pause: function () { + return !this.isPaused && !this.isFinished && (this.isPaused = !0, this.previous && this.previous.pause(), !0); + }, + resume: function () { + if (!this.isPaused || this.isFinished) return !1; + var e = this.isPaused = !1; + return this.generatedError && (this.error(this.generatedError), e = !0), this.previous && this.previous.resume(), !e; + }, + flush: function () {}, + processChunk: function (e) { + this.push(e); + }, + withStreamInfo: function (e, t) { + return this.extraStreamInfo[e] = t, this.mergeStreamInfo(), this; + }, + mergeStreamInfo: function () { + for (var e in this.extraStreamInfo) Object.prototype.hasOwnProperty.call(this.extraStreamInfo, e) && (this.streamInfo[e] = this.extraStreamInfo[e]); + }, + lock: function () { + if (this.isLocked) throw new Error("The stream '" + this + "' has already been used."); + this.isLocked = !0, this.previous && this.previous.lock(); + }, + toString: function () { + var e = "Worker " + this.name; + return this.previous ? this.previous + " -> " + e : e; + } + }, t.exports = n; + }, {}], + 29: [function (e, t, r) { + "use strict"; + + var h = e("../utils"), + i = e("./ConvertWorker"), + s = e("./GenericWorker"), + u = e("../base64"), + n = e("../support"), + a = e("../external"), + o = null; + if (n.nodestream) try { + o = e("../nodejs/NodejsStreamOutputAdapter"); + } catch (e) {} + function l(e, o) { + return new a.Promise(function (t, r) { + var n = [], + i = e._internalType, + s = e._outputType, + a = e._mimeType; + e.on("data", function (e, t) { + n.push(e), o && o(t); + }).on("error", function (e) { + n = [], r(e); + }).on("end", function () { + try { + var e = function (e, t, r) { + switch (e) { + case "blob": + return h.newBlob(h.transformTo("arraybuffer", t), r); + case "base64": + return u.encode(t); + default: + return h.transformTo(e, t); + } + }(s, function (e, t) { + var r, + n = 0, + i = null, + s = 0; + for (r = 0; r < t.length; r++) s += t[r].length; + switch (e) { + case "string": + return t.join(""); + case "array": + return Array.prototype.concat.apply([], t); + case "uint8array": + for (i = new Uint8Array(s), r = 0; r < t.length; r++) i.set(t[r], n), n += t[r].length; + return i; + case "nodebuffer": + return Buffer.concat(t); + default: + throw new Error("concat : unsupported type '" + e + "'"); + } + }(i, n), a); + t(e); + } catch (e) { + r(e); + } + n = []; + }).resume(); + }); + } + function f(e, t, r) { + var n = t; + switch (t) { + case "blob": + case "arraybuffer": + n = "uint8array"; + break; + case "base64": + n = "string"; + } + try { + this._internalType = n, this._outputType = t, this._mimeType = r, h.checkSupport(n), this._worker = e.pipe(new i(n)), e.lock(); + } catch (e) { + this._worker = new s("error"), this._worker.error(e); + } + } + f.prototype = { + accumulate: function (e) { + return l(this, e); + }, + on: function (e, t) { + var r = this; + return "data" === e ? this._worker.on(e, function (e) { + t.call(r, e.data, e.meta); + }) : this._worker.on(e, function () { + h.delay(t, arguments, r); + }), this; + }, + resume: function () { + return h.delay(this._worker.resume, [], this._worker), this; + }, + pause: function () { + return this._worker.pause(), this; + }, + toNodejsStream: function (e) { + if (h.checkSupport("nodestream"), "nodebuffer" !== this._outputType) throw new Error(this._outputType + " is not supported by this method"); + return new o(this, { + objectMode: "nodebuffer" !== this._outputType + }, e); + } + }, t.exports = f; + }, { + "../base64": 1, + "../external": 6, + "../nodejs/NodejsStreamOutputAdapter": 13, + "../support": 30, + "../utils": 32, + "./ConvertWorker": 24, + "./GenericWorker": 28 + }], + 30: [function (e, t, r) { + "use strict"; + + if (r.base64 = !0, r.array = !0, r.string = !0, r.arraybuffer = "undefined" != typeof ArrayBuffer && "undefined" != typeof Uint8Array, r.nodebuffer = "undefined" != typeof Buffer, r.uint8array = "undefined" != typeof Uint8Array, "undefined" == typeof ArrayBuffer) r.blob = !1;else { + var n = new ArrayBuffer(0); + try { + r.blob = 0 === new Blob([n], { + type: "application/zip" + }).size; + } catch (e) { + try { + var i = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)(); + i.append(n), r.blob = 0 === i.getBlob("application/zip").size; + } catch (e) { + r.blob = !1; + } + } + } + try { + r.nodestream = !!e("readable-stream").Readable; + } catch (e) { + r.nodestream = !1; + } + }, { + "readable-stream": 16 + }], + 31: [function (e, t, s) { + "use strict"; + + for (var o = e("./utils"), h = e("./support"), r = e("./nodejsUtils"), n = e("./stream/GenericWorker"), u = new Array(256), i = 0; i < 256; i++) u[i] = 252 <= i ? 6 : 248 <= i ? 5 : 240 <= i ? 4 : 224 <= i ? 3 : 192 <= i ? 2 : 1; + u[254] = u[254] = 1; + function a() { + n.call(this, "utf-8 decode"), this.leftOver = null; + } + function l() { + n.call(this, "utf-8 encode"); + } + s.utf8encode = function (e) { + return h.nodebuffer ? r.newBufferFrom(e, "utf-8") : function (e) { + var t, + r, + n, + i, + s, + a = e.length, + o = 0; + for (i = 0; i < a; i++) 55296 == (64512 & (r = e.charCodeAt(i))) && i + 1 < a && 56320 == (64512 & (n = e.charCodeAt(i + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), i++), o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4; + for (t = h.uint8array ? new Uint8Array(o) : new Array(o), i = s = 0; s < o; i++) 55296 == (64512 & (r = e.charCodeAt(i))) && i + 1 < a && 56320 == (64512 & (n = e.charCodeAt(i + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), i++), r < 128 ? t[s++] = r : (r < 2048 ? t[s++] = 192 | r >>> 6 : (r < 65536 ? t[s++] = 224 | r >>> 12 : (t[s++] = 240 | r >>> 18, t[s++] = 128 | r >>> 12 & 63), t[s++] = 128 | r >>> 6 & 63), t[s++] = 128 | 63 & r); + return t; + }(e); + }, s.utf8decode = function (e) { + return h.nodebuffer ? o.transformTo("nodebuffer", e).toString("utf-8") : function (e) { + var t, + r, + n, + i, + s = e.length, + a = new Array(2 * s); + for (t = r = 0; t < s;) if ((n = e[t++]) < 128) a[r++] = n;else if (4 < (i = u[n])) a[r++] = 65533, t += i - 1;else { + for (n &= 2 === i ? 31 : 3 === i ? 15 : 7; 1 < i && t < s;) n = n << 6 | 63 & e[t++], i--; + 1 < i ? a[r++] = 65533 : n < 65536 ? a[r++] = n : (n -= 65536, a[r++] = 55296 | n >> 10 & 1023, a[r++] = 56320 | 1023 & n); + } + return a.length !== r && (a.subarray ? a = a.subarray(0, r) : a.length = r), o.applyFromCharCode(a); + }(e = o.transformTo(h.uint8array ? "uint8array" : "array", e)); + }, o.inherits(a, n), a.prototype.processChunk = function (e) { + var t = o.transformTo(h.uint8array ? "uint8array" : "array", e.data); + if (this.leftOver && this.leftOver.length) { + if (h.uint8array) { + var r = t; + (t = new Uint8Array(r.length + this.leftOver.length)).set(this.leftOver, 0), t.set(r, this.leftOver.length); + } else t = this.leftOver.concat(t); + this.leftOver = null; + } + var n = function (e, t) { + var r; + for ((t = t || e.length) > e.length && (t = e.length), r = t - 1; 0 <= r && 128 == (192 & e[r]);) r--; + return r < 0 ? t : 0 === r ? t : r + u[e[r]] > t ? r : t; + }(t), + i = t; + n !== t.length && (h.uint8array ? (i = t.subarray(0, n), this.leftOver = t.subarray(n, t.length)) : (i = t.slice(0, n), this.leftOver = t.slice(n, t.length))), this.push({ + data: s.utf8decode(i), + meta: e.meta + }); + }, a.prototype.flush = function () { + this.leftOver && this.leftOver.length && (this.push({ + data: s.utf8decode(this.leftOver), + meta: {} + }), this.leftOver = null); + }, s.Utf8DecodeWorker = a, o.inherits(l, n), l.prototype.processChunk = function (e) { + this.push({ + data: s.utf8encode(e.data), + meta: e.meta + }); + }, s.Utf8EncodeWorker = l; + }, { + "./nodejsUtils": 14, + "./stream/GenericWorker": 28, + "./support": 30, + "./utils": 32 + }], + 32: [function (e, t, a) { + "use strict"; + + var o = e("./support"), + h = e("./base64"), + r = e("./nodejsUtils"), + u = e("./external"); + function n(e) { + return e; + } + function l(e, t) { + for (var r = 0; r < e.length; ++r) t[r] = 255 & e.charCodeAt(r); + return t; + } + e("setimmediate"), a.newBlob = function (t, r) { + a.checkSupport("blob"); + try { + return new Blob([t], { + type: r + }); + } catch (e) { + try { + var n = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)(); + return n.append(t), n.getBlob(r); + } catch (e) { + throw new Error("Bug : can't construct the Blob."); + } + } + }; + var i = { + stringifyByChunk: function (e, t, r) { + var n = [], + i = 0, + s = e.length; + if (s <= r) return String.fromCharCode.apply(null, e); + for (; i < s;) "array" === t || "nodebuffer" === t ? n.push(String.fromCharCode.apply(null, e.slice(i, Math.min(i + r, s)))) : n.push(String.fromCharCode.apply(null, e.subarray(i, Math.min(i + r, s)))), i += r; + return n.join(""); + }, + stringifyByChar: function (e) { + for (var t = "", r = 0; r < e.length; r++) t += String.fromCharCode(e[r]); + return t; + }, + applyCanBeUsed: { + uint8array: function () { + try { + return o.uint8array && 1 === String.fromCharCode.apply(null, new Uint8Array(1)).length; + } catch (e) { + return !1; + } + }(), + nodebuffer: function () { + try { + return o.nodebuffer && 1 === String.fromCharCode.apply(null, r.allocBuffer(1)).length; + } catch (e) { + return !1; + } + }() + } + }; + function s(e) { + var t = 65536, + r = a.getTypeOf(e), + n = !0; + if ("uint8array" === r ? n = i.applyCanBeUsed.uint8array : "nodebuffer" === r && (n = i.applyCanBeUsed.nodebuffer), n) for (; 1 < t;) try { + return i.stringifyByChunk(e, r, t); + } catch (e) { + t = Math.floor(t / 2); + } + return i.stringifyByChar(e); + } + function f(e, t) { + for (var r = 0; r < e.length; r++) t[r] = e[r]; + return t; + } + a.applyFromCharCode = s; + var c = {}; + c.string = { + string: n, + array: function (e) { + return l(e, new Array(e.length)); + }, + arraybuffer: function (e) { + return c.string.uint8array(e).buffer; + }, + uint8array: function (e) { + return l(e, new Uint8Array(e.length)); + }, + nodebuffer: function (e) { + return l(e, r.allocBuffer(e.length)); + } + }, c.array = { + string: s, + array: n, + arraybuffer: function (e) { + return new Uint8Array(e).buffer; + }, + uint8array: function (e) { + return new Uint8Array(e); + }, + nodebuffer: function (e) { + return r.newBufferFrom(e); + } + }, c.arraybuffer = { + string: function (e) { + return s(new Uint8Array(e)); + }, + array: function (e) { + return f(new Uint8Array(e), new Array(e.byteLength)); + }, + arraybuffer: n, + uint8array: function (e) { + return new Uint8Array(e); + }, + nodebuffer: function (e) { + return r.newBufferFrom(new Uint8Array(e)); + } + }, c.uint8array = { + string: s, + array: function (e) { + return f(e, new Array(e.length)); + }, + arraybuffer: function (e) { + return e.buffer; + }, + uint8array: n, + nodebuffer: function (e) { + return r.newBufferFrom(e); + } + }, c.nodebuffer = { + string: s, + array: function (e) { + return f(e, new Array(e.length)); + }, + arraybuffer: function (e) { + return c.nodebuffer.uint8array(e).buffer; + }, + uint8array: function (e) { + return f(e, new Uint8Array(e.length)); + }, + nodebuffer: n + }, a.transformTo = function (e, t) { + if (t = t || "", !e) return t; + a.checkSupport(e); + var r = a.getTypeOf(t); + return c[r][e](t); + }, a.resolve = function (e) { + for (var t = e.split("/"), r = [], n = 0; n < t.length; n++) { + var i = t[n]; + "." === i || "" === i && 0 !== n && n !== t.length - 1 || (".." === i ? r.pop() : r.push(i)); + } + return r.join("/"); + }, a.getTypeOf = function (e) { + return "string" == typeof e ? "string" : "[object Array]" === Object.prototype.toString.call(e) ? "array" : o.nodebuffer && r.isBuffer(e) ? "nodebuffer" : o.uint8array && e instanceof Uint8Array ? "uint8array" : o.arraybuffer && e instanceof ArrayBuffer ? "arraybuffer" : void 0; + }, a.checkSupport = function (e) { + if (!o[e.toLowerCase()]) throw new Error(e + " is not supported by this platform"); + }, a.MAX_VALUE_16BITS = 65535, a.MAX_VALUE_32BITS = -1, a.pretty = function (e) { + var t, + r, + n = ""; + for (r = 0; r < (e || "").length; r++) n += "\\x" + ((t = e.charCodeAt(r)) < 16 ? "0" : "") + t.toString(16).toUpperCase(); + return n; + }, a.delay = function (e, t, r) { + setImmediate(function () { + e.apply(r || null, t || []); + }); + }, a.inherits = function (e, t) { + function r() {} + r.prototype = t.prototype, e.prototype = new r(); + }, a.extend = function () { + var e, + t, + r = {}; + for (e = 0; e < arguments.length; e++) for (t in arguments[e]) Object.prototype.hasOwnProperty.call(arguments[e], t) && void 0 === r[t] && (r[t] = arguments[e][t]); + return r; + }, a.prepareContent = function (r, e, n, i, s) { + return u.Promise.resolve(e).then(function (n) { + return o.blob && (n instanceof Blob || -1 !== ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(n))) && "undefined" != typeof FileReader ? new u.Promise(function (t, r) { + var e = new FileReader(); + e.onload = function (e) { + t(e.target.result); + }, e.onerror = function (e) { + r(e.target.error); + }, e.readAsArrayBuffer(n); + }) : n; + }).then(function (e) { + var t = a.getTypeOf(e); + return t ? ("arraybuffer" === t ? e = a.transformTo("uint8array", e) : "string" === t && (s ? e = h.decode(e) : n && !0 !== i && (e = function (e) { + return l(e, o.uint8array ? new Uint8Array(e.length) : new Array(e.length)); + }(e))), e) : u.Promise.reject(new Error("Can't read the data of '" + r + "'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?")); + }); + }; + }, { + "./base64": 1, + "./external": 6, + "./nodejsUtils": 14, + "./support": 30, + setimmediate: 54 + }], + 33: [function (e, t, r) { + "use strict"; + + var n = e("./reader/readerFor"), + i = e("./utils"), + s = e("./signature"), + a = e("./zipEntry"), + o = e("./support"); + function h(e) { + this.files = [], this.loadOptions = e; + } + h.prototype = { + checkSignature: function (e) { + if (!this.reader.readAndCheckSignature(e)) { + this.reader.index -= 4; + var t = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature (" + i.pretty(t) + ", expected " + i.pretty(e) + ")"); + } + }, + isSignature: function (e, t) { + var r = this.reader.index; + this.reader.setIndex(e); + var n = this.reader.readString(4) === t; + return this.reader.setIndex(r), n; + }, + readBlockEndOfCentral: function () { + this.diskNumber = this.reader.readInt(2), this.diskWithCentralDirStart = this.reader.readInt(2), this.centralDirRecordsOnThisDisk = this.reader.readInt(2), this.centralDirRecords = this.reader.readInt(2), this.centralDirSize = this.reader.readInt(4), this.centralDirOffset = this.reader.readInt(4), this.zipCommentLength = this.reader.readInt(2); + var e = this.reader.readData(this.zipCommentLength), + t = o.uint8array ? "uint8array" : "array", + r = i.transformTo(t, e); + this.zipComment = this.loadOptions.decodeFileName(r); + }, + readBlockZip64EndOfCentral: function () { + this.zip64EndOfCentralSize = this.reader.readInt(8), this.reader.skip(4), this.diskNumber = this.reader.readInt(4), this.diskWithCentralDirStart = this.reader.readInt(4), this.centralDirRecordsOnThisDisk = this.reader.readInt(8), this.centralDirRecords = this.reader.readInt(8), this.centralDirSize = this.reader.readInt(8), this.centralDirOffset = this.reader.readInt(8), this.zip64ExtensibleData = {}; + for (var e, t, r, n = this.zip64EndOfCentralSize - 44; 0 < n;) e = this.reader.readInt(2), t = this.reader.readInt(4), r = this.reader.readData(t), this.zip64ExtensibleData[e] = { + id: e, + length: t, + value: r + }; + }, + readBlockZip64EndOfCentralLocator: function () { + if (this.diskWithZip64CentralDirStart = this.reader.readInt(4), this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8), this.disksCount = this.reader.readInt(4), 1 < this.disksCount) throw new Error("Multi-volumes zip are not supported"); + }, + readLocalFiles: function () { + var e, t; + for (e = 0; e < this.files.length; e++) t = this.files[e], this.reader.setIndex(t.localHeaderOffset), this.checkSignature(s.LOCAL_FILE_HEADER), t.readLocalPart(this.reader), t.handleUTF8(), t.processAttributes(); + }, + readCentralDir: function () { + var e; + for (this.reader.setIndex(this.centralDirOffset); this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);) (e = new a({ + zip64: this.zip64 + }, this.loadOptions)).readCentralPart(this.reader), this.files.push(e); + if (this.centralDirRecords !== this.files.length && 0 !== this.centralDirRecords && 0 === this.files.length) throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + }, + readEndOfCentral: function () { + var e = this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END); + if (e < 0) throw !this.isSignature(0, s.LOCAL_FILE_HEADER) ? new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html") : new Error("Corrupted zip: can't find end of central directory"); + this.reader.setIndex(e); + var t = e; + if (this.checkSignature(s.CENTRAL_DIRECTORY_END), this.readBlockEndOfCentral(), this.diskNumber === i.MAX_VALUE_16BITS || this.diskWithCentralDirStart === i.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === i.MAX_VALUE_16BITS || this.centralDirRecords === i.MAX_VALUE_16BITS || this.centralDirSize === i.MAX_VALUE_32BITS || this.centralDirOffset === i.MAX_VALUE_32BITS) { + if (this.zip64 = !0, (e = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR)) < 0) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + if (this.reader.setIndex(e), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR), this.readBlockZip64EndOfCentralLocator(), !this.isSignature(this.relativeOffsetEndOfZip64CentralDir, s.ZIP64_CENTRAL_DIRECTORY_END) && (this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.relativeOffsetEndOfZip64CentralDir < 0)) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.readBlockZip64EndOfCentral(); + } + var r = this.centralDirOffset + this.centralDirSize; + this.zip64 && (r += 20, r += 12 + this.zip64EndOfCentralSize); + var n = t - r; + if (0 < n) this.isSignature(t, s.CENTRAL_FILE_HEADER) || (this.reader.zero = n);else if (n < 0) throw new Error("Corrupted zip: missing " + Math.abs(n) + " bytes."); + }, + prepareReader: function (e) { + this.reader = n(e); + }, + load: function (e) { + this.prepareReader(e), this.readEndOfCentral(), this.readCentralDir(), this.readLocalFiles(); + } + }, t.exports = h; + }, { + "./reader/readerFor": 22, + "./signature": 23, + "./support": 30, + "./utils": 32, + "./zipEntry": 34 + }], + 34: [function (e, t, r) { + "use strict"; + + var n = e("./reader/readerFor"), + s = e("./utils"), + i = e("./compressedObject"), + a = e("./crc32"), + o = e("./utf8"), + h = e("./compressions"), + u = e("./support"); + function l(e, t) { + this.options = e, this.loadOptions = t; + } + l.prototype = { + isEncrypted: function () { + return 1 == (1 & this.bitFlag); + }, + useUTF8: function () { + return 2048 == (2048 & this.bitFlag); + }, + readLocalPart: function (e) { + var t, r; + if (e.skip(22), this.fileNameLength = e.readInt(2), r = e.readInt(2), this.fileName = e.readData(this.fileNameLength), e.skip(r), -1 === this.compressedSize || -1 === this.uncompressedSize) throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)"); + if (null === (t = function (e) { + for (var t in h) if (Object.prototype.hasOwnProperty.call(h, t) && h[t].magic === e) return h[t]; + return null; + }(this.compressionMethod))) throw new Error("Corrupted zip : compression " + s.pretty(this.compressionMethod) + " unknown (inner file : " + s.transformTo("string", this.fileName) + ")"); + this.decompressed = new i(this.compressedSize, this.uncompressedSize, this.crc32, t, e.readData(this.compressedSize)); + }, + readCentralPart: function (e) { + this.versionMadeBy = e.readInt(2), e.skip(2), this.bitFlag = e.readInt(2), this.compressionMethod = e.readString(2), this.date = e.readDate(), this.crc32 = e.readInt(4), this.compressedSize = e.readInt(4), this.uncompressedSize = e.readInt(4); + var t = e.readInt(2); + if (this.extraFieldsLength = e.readInt(2), this.fileCommentLength = e.readInt(2), this.diskNumberStart = e.readInt(2), this.internalFileAttributes = e.readInt(2), this.externalFileAttributes = e.readInt(4), this.localHeaderOffset = e.readInt(4), this.isEncrypted()) throw new Error("Encrypted zip are not supported"); + e.skip(t), this.readExtraFields(e), this.parseZIP64ExtraField(e), this.fileComment = e.readData(this.fileCommentLength); + }, + processAttributes: function () { + this.unixPermissions = null, this.dosPermissions = null; + var e = this.versionMadeBy >> 8; + this.dir = !!(16 & this.externalFileAttributes), 0 == e && (this.dosPermissions = 63 & this.externalFileAttributes), 3 == e && (this.unixPermissions = this.externalFileAttributes >> 16 & 65535), this.dir || "/" !== this.fileNameStr.slice(-1) || (this.dir = !0); + }, + parseZIP64ExtraField: function () { + if (this.extraFields[1]) { + var e = n(this.extraFields[1].value); + this.uncompressedSize === s.MAX_VALUE_32BITS && (this.uncompressedSize = e.readInt(8)), this.compressedSize === s.MAX_VALUE_32BITS && (this.compressedSize = e.readInt(8)), this.localHeaderOffset === s.MAX_VALUE_32BITS && (this.localHeaderOffset = e.readInt(8)), this.diskNumberStart === s.MAX_VALUE_32BITS && (this.diskNumberStart = e.readInt(4)); + } + }, + readExtraFields: function (e) { + var t, + r, + n, + i = e.index + this.extraFieldsLength; + for (this.extraFields || (this.extraFields = {}); e.index + 4 < i;) t = e.readInt(2), r = e.readInt(2), n = e.readData(r), this.extraFields[t] = { + id: t, + length: r, + value: n + }; + e.setIndex(i); + }, + handleUTF8: function () { + var e = u.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) this.fileNameStr = o.utf8decode(this.fileName), this.fileCommentStr = o.utf8decode(this.fileComment);else { + var t = this.findExtraFieldUnicodePath(); + if (null !== t) this.fileNameStr = t;else { + var r = s.transformTo(e, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(r); + } + var n = this.findExtraFieldUnicodeComment(); + if (null !== n) this.fileCommentStr = n;else { + var i = s.transformTo(e, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(i); + } + } + }, + findExtraFieldUnicodePath: function () { + var e = this.extraFields[28789]; + if (e) { + var t = n(e.value); + return 1 !== t.readInt(1) ? null : a(this.fileName) !== t.readInt(4) ? null : o.utf8decode(t.readData(e.length - 5)); + } + return null; + }, + findExtraFieldUnicodeComment: function () { + var e = this.extraFields[25461]; + if (e) { + var t = n(e.value); + return 1 !== t.readInt(1) ? null : a(this.fileComment) !== t.readInt(4) ? null : o.utf8decode(t.readData(e.length - 5)); + } + return null; + } + }, t.exports = l; + }, { + "./compressedObject": 2, + "./compressions": 3, + "./crc32": 4, + "./reader/readerFor": 22, + "./support": 30, + "./utf8": 31, + "./utils": 32 + }], + 35: [function (e, t, r) { + "use strict"; + + function n(e, t, r) { + this.name = e, this.dir = r.dir, this.date = r.date, this.comment = r.comment, this.unixPermissions = r.unixPermissions, this.dosPermissions = r.dosPermissions, this._data = t, this._dataBinary = r.binary, this.options = { + compression: r.compression, + compressionOptions: r.compressionOptions + }; + } + var s = e("./stream/StreamHelper"), + i = e("./stream/DataWorker"), + a = e("./utf8"), + o = e("./compressedObject"), + h = e("./stream/GenericWorker"); + n.prototype = { + internalStream: function (e) { + var t = null, + r = "string"; + try { + if (!e) throw new Error("No output type specified."); + var n = "string" === (r = e.toLowerCase()) || "text" === r; + "binarystring" !== r && "text" !== r || (r = "string"), t = this._decompressWorker(); + var i = !this._dataBinary; + i && !n && (t = t.pipe(new a.Utf8EncodeWorker())), !i && n && (t = t.pipe(new a.Utf8DecodeWorker())); + } catch (e) { + (t = new h("error")).error(e); + } + return new s(t, r, ""); + }, + async: function (e, t) { + return this.internalStream(e).accumulate(t); + }, + nodeStream: function (e, t) { + return this.internalStream(e || "nodebuffer").toNodejsStream(t); + }, + _compressWorker: function (e, t) { + if (this._data instanceof o && this._data.compression.magic === e.magic) return this._data.getCompressedWorker(); + var r = this._decompressWorker(); + return this._dataBinary || (r = r.pipe(new a.Utf8EncodeWorker())), o.createWorkerFrom(r, e, t); + }, + _decompressWorker: function () { + return this._data instanceof o ? this._data.getContentWorker() : this._data instanceof h ? this._data : new i(this._data); + } + }; + for (var u = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"], l = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, f = 0; f < u.length; f++) n.prototype[u[f]] = l; + t.exports = n; + }, { + "./compressedObject": 2, + "./stream/DataWorker": 27, + "./stream/GenericWorker": 28, + "./stream/StreamHelper": 29, + "./utf8": 31 + }], + 36: [function (e, l, t) { + (function (t) { + "use strict"; + + var r, + n, + e = t.MutationObserver || t.WebKitMutationObserver; + if (e) { + var i = 0, + s = new e(u), + a = t.document.createTextNode(""); + s.observe(a, { + characterData: !0 + }), r = function () { + a.data = i = ++i % 2; + }; + } else if (t.setImmediate || void 0 === t.MessageChannel) r = "document" in t && "onreadystatechange" in t.document.createElement("script") ? function () { + var e = t.document.createElement("script"); + e.onreadystatechange = function () { + u(), e.onreadystatechange = null, e.parentNode.removeChild(e), e = null; + }, t.document.documentElement.appendChild(e); + } : function () { + setTimeout(u, 0); + };else { + var o = new t.MessageChannel(); + o.port1.onmessage = u, r = function () { + o.port2.postMessage(0); + }; + } + var h = []; + function u() { + var e, t; + n = !0; + for (var r = h.length; r;) { + for (t = h, h = [], e = -1; ++e < r;) t[e](); + r = h.length; + } + n = !1; + } + l.exports = function (e) { + 1 !== h.push(e) || n || r(); + }; + }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); + }, {}], + 37: [function (e, t, r) { + "use strict"; + + var i = e("immediate"); + function u() {} + var l = {}, + s = ["REJECTED"], + a = ["FULFILLED"], + n = ["PENDING"]; + function o(e) { + if ("function" != typeof e) throw new TypeError("resolver must be a function"); + this.state = n, this.queue = [], this.outcome = void 0, e !== u && d(this, e); + } + function h(e, t, r) { + this.promise = e, "function" == typeof t && (this.onFulfilled = t, this.callFulfilled = this.otherCallFulfilled), "function" == typeof r && (this.onRejected = r, this.callRejected = this.otherCallRejected); + } + function f(t, r, n) { + i(function () { + var e; + try { + e = r(n); + } catch (e) { + return l.reject(t, e); + } + e === t ? l.reject(t, new TypeError("Cannot resolve promise with itself")) : l.resolve(t, e); + }); + } + function c(e) { + var t = e && e.then; + if (e && ("object" == typeof e || "function" == typeof e) && "function" == typeof t) return function () { + t.apply(e, arguments); + }; + } + function d(t, e) { + var r = !1; + function n(e) { + r || (r = !0, l.reject(t, e)); + } + function i(e) { + r || (r = !0, l.resolve(t, e)); + } + var s = p(function () { + e(i, n); + }); + "error" === s.status && n(s.value); + } + function p(e, t) { + var r = {}; + try { + r.value = e(t), r.status = "success"; + } catch (e) { + r.status = "error", r.value = e; + } + return r; + } + (t.exports = o).prototype.finally = function (t) { + if ("function" != typeof t) return this; + var r = this.constructor; + return this.then(function (e) { + return r.resolve(t()).then(function () { + return e; + }); + }, function (e) { + return r.resolve(t()).then(function () { + throw e; + }); + }); + }, o.prototype.catch = function (e) { + return this.then(null, e); + }, o.prototype.then = function (e, t) { + if ("function" != typeof e && this.state === a || "function" != typeof t && this.state === s) return this; + var r = new this.constructor(u); + this.state !== n ? f(r, this.state === a ? e : t, this.outcome) : this.queue.push(new h(r, e, t)); + return r; + }, h.prototype.callFulfilled = function (e) { + l.resolve(this.promise, e); + }, h.prototype.otherCallFulfilled = function (e) { + f(this.promise, this.onFulfilled, e); + }, h.prototype.callRejected = function (e) { + l.reject(this.promise, e); + }, h.prototype.otherCallRejected = function (e) { + f(this.promise, this.onRejected, e); + }, l.resolve = function (e, t) { + var r = p(c, t); + if ("error" === r.status) return l.reject(e, r.value); + var n = r.value; + if (n) d(e, n);else { + e.state = a, e.outcome = t; + for (var i = -1, s = e.queue.length; ++i < s;) e.queue[i].callFulfilled(t); + } + return e; + }, l.reject = function (e, t) { + e.state = s, e.outcome = t; + for (var r = -1, n = e.queue.length; ++r < n;) e.queue[r].callRejected(t); + return e; + }, o.resolve = function (e) { + if (e instanceof this) return e; + return l.resolve(new this(u), e); + }, o.reject = function (e) { + var t = new this(u); + return l.reject(t, e); + }, o.all = function (e) { + var r = this; + if ("[object Array]" !== Object.prototype.toString.call(e)) return this.reject(new TypeError("must be an array")); + var n = e.length, + i = !1; + if (!n) return this.resolve([]); + var s = new Array(n), + a = 0, + t = -1, + o = new this(u); + for (; ++t < n;) h(e[t], t); + return o; + function h(e, t) { + r.resolve(e).then(function (e) { + s[t] = e, ++a !== n || i || (i = !0, l.resolve(o, s)); + }, function (e) { + i || (i = !0, l.reject(o, e)); + }); + } + }, o.race = function (e) { + var t = this; + if ("[object Array]" !== Object.prototype.toString.call(e)) return this.reject(new TypeError("must be an array")); + var r = e.length, + n = !1; + if (!r) return this.resolve([]); + var i = -1, + s = new this(u); + for (; ++i < r;) a = e[i], t.resolve(a).then(function (e) { + n || (n = !0, l.resolve(s, e)); + }, function (e) { + n || (n = !0, l.reject(s, e)); + }); + var a; + return s; + }; + }, { + immediate: 36 + }], + 38: [function (e, t, r) { + "use strict"; + + var n = {}; + (0, e("./lib/utils/common").assign)(n, e("./lib/deflate"), e("./lib/inflate"), e("./lib/zlib/constants")), t.exports = n; + }, { + "./lib/deflate": 39, + "./lib/inflate": 40, + "./lib/utils/common": 41, + "./lib/zlib/constants": 44 + }], + 39: [function (e, t, r) { + "use strict"; + + var a = e("./zlib/deflate"), + o = e("./utils/common"), + h = e("./utils/strings"), + i = e("./zlib/messages"), + s = e("./zlib/zstream"), + u = Object.prototype.toString, + l = 0, + f = -1, + c = 0, + d = 8; + function p(e) { + if (!(this instanceof p)) return new p(e); + this.options = o.assign({ + level: f, + method: d, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: c, + to: "" + }, e || {}); + var t = this.options; + t.raw && 0 < t.windowBits ? t.windowBits = -t.windowBits : t.gzip && 0 < t.windowBits && t.windowBits < 16 && (t.windowBits += 16), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new s(), this.strm.avail_out = 0; + var r = a.deflateInit2(this.strm, t.level, t.method, t.windowBits, t.memLevel, t.strategy); + if (r !== l) throw new Error(i[r]); + if (t.header && a.deflateSetHeader(this.strm, t.header), t.dictionary) { + var n; + if (n = "string" == typeof t.dictionary ? h.string2buf(t.dictionary) : "[object ArrayBuffer]" === u.call(t.dictionary) ? new Uint8Array(t.dictionary) : t.dictionary, (r = a.deflateSetDictionary(this.strm, n)) !== l) throw new Error(i[r]); + this._dict_set = !0; + } + } + function n(e, t) { + var r = new p(t); + if (r.push(e, !0), r.err) throw r.msg || i[r.err]; + return r.result; + } + p.prototype.push = function (e, t) { + var r, + n, + i = this.strm, + s = this.options.chunkSize; + if (this.ended) return !1; + n = t === ~~t ? t : !0 === t ? 4 : 0, "string" == typeof e ? i.input = h.string2buf(e) : "[object ArrayBuffer]" === u.call(e) ? i.input = new Uint8Array(e) : i.input = e, i.next_in = 0, i.avail_in = i.input.length; + do { + if (0 === i.avail_out && (i.output = new o.Buf8(s), i.next_out = 0, i.avail_out = s), 1 !== (r = a.deflate(i, n)) && r !== l) return this.onEnd(r), !(this.ended = !0); + 0 !== i.avail_out && (0 !== i.avail_in || 4 !== n && 2 !== n) || ("string" === this.options.to ? this.onData(h.buf2binstring(o.shrinkBuf(i.output, i.next_out))) : this.onData(o.shrinkBuf(i.output, i.next_out))); + } while ((0 < i.avail_in || 0 === i.avail_out) && 1 !== r); + return 4 === n ? (r = a.deflateEnd(this.strm), this.onEnd(r), this.ended = !0, r === l) : 2 !== n || (this.onEnd(l), !(i.avail_out = 0)); + }, p.prototype.onData = function (e) { + this.chunks.push(e); + }, p.prototype.onEnd = function (e) { + e === l && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = o.flattenChunks(this.chunks)), this.chunks = [], this.err = e, this.msg = this.strm.msg; + }, r.Deflate = p, r.deflate = n, r.deflateRaw = function (e, t) { + return (t = t || {}).raw = !0, n(e, t); + }, r.gzip = function (e, t) { + return (t = t || {}).gzip = !0, n(e, t); + }; + }, { + "./utils/common": 41, + "./utils/strings": 42, + "./zlib/deflate": 46, + "./zlib/messages": 51, + "./zlib/zstream": 53 + }], + 40: [function (e, t, r) { + "use strict"; + + var c = e("./zlib/inflate"), + d = e("./utils/common"), + p = e("./utils/strings"), + m = e("./zlib/constants"), + n = e("./zlib/messages"), + i = e("./zlib/zstream"), + s = e("./zlib/gzheader"), + _ = Object.prototype.toString; + function a(e) { + if (!(this instanceof a)) return new a(e); + this.options = d.assign({ + chunkSize: 16384, + windowBits: 0, + to: "" + }, e || {}); + var t = this.options; + t.raw && 0 <= t.windowBits && t.windowBits < 16 && (t.windowBits = -t.windowBits, 0 === t.windowBits && (t.windowBits = -15)), !(0 <= t.windowBits && t.windowBits < 16) || e && e.windowBits || (t.windowBits += 32), 15 < t.windowBits && t.windowBits < 48 && 0 == (15 & t.windowBits) && (t.windowBits |= 15), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new i(), this.strm.avail_out = 0; + var r = c.inflateInit2(this.strm, t.windowBits); + if (r !== m.Z_OK) throw new Error(n[r]); + this.header = new s(), c.inflateGetHeader(this.strm, this.header); + } + function o(e, t) { + var r = new a(t); + if (r.push(e, !0), r.err) throw r.msg || n[r.err]; + return r.result; + } + a.prototype.push = function (e, t) { + var r, + n, + i, + s, + a, + o, + h = this.strm, + u = this.options.chunkSize, + l = this.options.dictionary, + f = !1; + if (this.ended) return !1; + n = t === ~~t ? t : !0 === t ? m.Z_FINISH : m.Z_NO_FLUSH, "string" == typeof e ? h.input = p.binstring2buf(e) : "[object ArrayBuffer]" === _.call(e) ? h.input = new Uint8Array(e) : h.input = e, h.next_in = 0, h.avail_in = h.input.length; + do { + if (0 === h.avail_out && (h.output = new d.Buf8(u), h.next_out = 0, h.avail_out = u), (r = c.inflate(h, m.Z_NO_FLUSH)) === m.Z_NEED_DICT && l && (o = "string" == typeof l ? p.string2buf(l) : "[object ArrayBuffer]" === _.call(l) ? new Uint8Array(l) : l, r = c.inflateSetDictionary(this.strm, o)), r === m.Z_BUF_ERROR && !0 === f && (r = m.Z_OK, f = !1), r !== m.Z_STREAM_END && r !== m.Z_OK) return this.onEnd(r), !(this.ended = !0); + h.next_out && (0 !== h.avail_out && r !== m.Z_STREAM_END && (0 !== h.avail_in || n !== m.Z_FINISH && n !== m.Z_SYNC_FLUSH) || ("string" === this.options.to ? (i = p.utf8border(h.output, h.next_out), s = h.next_out - i, a = p.buf2string(h.output, i), h.next_out = s, h.avail_out = u - s, s && d.arraySet(h.output, h.output, i, s, 0), this.onData(a)) : this.onData(d.shrinkBuf(h.output, h.next_out)))), 0 === h.avail_in && 0 === h.avail_out && (f = !0); + } while ((0 < h.avail_in || 0 === h.avail_out) && r !== m.Z_STREAM_END); + return r === m.Z_STREAM_END && (n = m.Z_FINISH), n === m.Z_FINISH ? (r = c.inflateEnd(this.strm), this.onEnd(r), this.ended = !0, r === m.Z_OK) : n !== m.Z_SYNC_FLUSH || (this.onEnd(m.Z_OK), !(h.avail_out = 0)); + }, a.prototype.onData = function (e) { + this.chunks.push(e); + }, a.prototype.onEnd = function (e) { + e === m.Z_OK && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = d.flattenChunks(this.chunks)), this.chunks = [], this.err = e, this.msg = this.strm.msg; + }, r.Inflate = a, r.inflate = o, r.inflateRaw = function (e, t) { + return (t = t || {}).raw = !0, o(e, t); + }, r.ungzip = o; + }, { + "./utils/common": 41, + "./utils/strings": 42, + "./zlib/constants": 44, + "./zlib/gzheader": 47, + "./zlib/inflate": 49, + "./zlib/messages": 51, + "./zlib/zstream": 53 + }], + 41: [function (e, t, r) { + "use strict"; + + var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array; + r.assign = function (e) { + for (var t = Array.prototype.slice.call(arguments, 1); t.length;) { + var r = t.shift(); + if (r) { + if ("object" != typeof r) throw new TypeError(r + "must be non-object"); + for (var n in r) r.hasOwnProperty(n) && (e[n] = r[n]); + } + } + return e; + }, r.shrinkBuf = function (e, t) { + return e.length === t ? e : e.subarray ? e.subarray(0, t) : (e.length = t, e); + }; + var i = { + arraySet: function (e, t, r, n, i) { + if (t.subarray && e.subarray) e.set(t.subarray(r, r + n), i);else for (var s = 0; s < n; s++) e[i + s] = t[r + s]; + }, + flattenChunks: function (e) { + var t, r, n, i, s, a; + for (t = n = 0, r = e.length; t < r; t++) n += e[t].length; + for (a = new Uint8Array(n), t = i = 0, r = e.length; t < r; t++) s = e[t], a.set(s, i), i += s.length; + return a; + } + }, + s = { + arraySet: function (e, t, r, n, i) { + for (var s = 0; s < n; s++) e[i + s] = t[r + s]; + }, + flattenChunks: function (e) { + return [].concat.apply([], e); + } + }; + r.setTyped = function (e) { + e ? (r.Buf8 = Uint8Array, r.Buf16 = Uint16Array, r.Buf32 = Int32Array, r.assign(r, i)) : (r.Buf8 = Array, r.Buf16 = Array, r.Buf32 = Array, r.assign(r, s)); + }, r.setTyped(n); + }, {}], + 42: [function (e, t, r) { + "use strict"; + + var h = e("./common"), + i = !0, + s = !0; + try { + String.fromCharCode.apply(null, [0]); + } catch (e) { + i = !1; + } + try { + String.fromCharCode.apply(null, new Uint8Array(1)); + } catch (e) { + s = !1; + } + for (var u = new h.Buf8(256), n = 0; n < 256; n++) u[n] = 252 <= n ? 6 : 248 <= n ? 5 : 240 <= n ? 4 : 224 <= n ? 3 : 192 <= n ? 2 : 1; + function l(e, t) { + if (t < 65537 && (e.subarray && s || !e.subarray && i)) return String.fromCharCode.apply(null, h.shrinkBuf(e, t)); + for (var r = "", n = 0; n < t; n++) r += String.fromCharCode(e[n]); + return r; + } + u[254] = u[254] = 1, r.string2buf = function (e) { + var t, + r, + n, + i, + s, + a = e.length, + o = 0; + for (i = 0; i < a; i++) 55296 == (64512 & (r = e.charCodeAt(i))) && i + 1 < a && 56320 == (64512 & (n = e.charCodeAt(i + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), i++), o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4; + for (t = new h.Buf8(o), i = s = 0; s < o; i++) 55296 == (64512 & (r = e.charCodeAt(i))) && i + 1 < a && 56320 == (64512 & (n = e.charCodeAt(i + 1))) && (r = 65536 + (r - 55296 << 10) + (n - 56320), i++), r < 128 ? t[s++] = r : (r < 2048 ? t[s++] = 192 | r >>> 6 : (r < 65536 ? t[s++] = 224 | r >>> 12 : (t[s++] = 240 | r >>> 18, t[s++] = 128 | r >>> 12 & 63), t[s++] = 128 | r >>> 6 & 63), t[s++] = 128 | 63 & r); + return t; + }, r.buf2binstring = function (e) { + return l(e, e.length); + }, r.binstring2buf = function (e) { + for (var t = new h.Buf8(e.length), r = 0, n = t.length; r < n; r++) t[r] = e.charCodeAt(r); + return t; + }, r.buf2string = function (e, t) { + var r, + n, + i, + s, + a = t || e.length, + o = new Array(2 * a); + for (r = n = 0; r < a;) if ((i = e[r++]) < 128) o[n++] = i;else if (4 < (s = u[i])) o[n++] = 65533, r += s - 1;else { + for (i &= 2 === s ? 31 : 3 === s ? 15 : 7; 1 < s && r < a;) i = i << 6 | 63 & e[r++], s--; + 1 < s ? o[n++] = 65533 : i < 65536 ? o[n++] = i : (i -= 65536, o[n++] = 55296 | i >> 10 & 1023, o[n++] = 56320 | 1023 & i); + } + return l(o, n); + }, r.utf8border = function (e, t) { + var r; + for ((t = t || e.length) > e.length && (t = e.length), r = t - 1; 0 <= r && 128 == (192 & e[r]);) r--; + return r < 0 ? t : 0 === r ? t : r + u[e[r]] > t ? r : t; + }; + }, { + "./common": 41 + }], + 43: [function (e, t, r) { + "use strict"; + + t.exports = function (e, t, r, n) { + for (var i = 65535 & e | 0, s = e >>> 16 & 65535 | 0, a = 0; 0 !== r;) { + for (r -= a = 2e3 < r ? 2e3 : r; s = s + (i = i + t[n++] | 0) | 0, --a;); + i %= 65521, s %= 65521; + } + return i | s << 16 | 0; + }; + }, {}], + 44: [function (e, t, r) { + "use strict"; + + t.exports = { + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + Z_BUF_ERROR: -5, + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + Z_BINARY: 0, + Z_TEXT: 1, + Z_UNKNOWN: 2, + Z_DEFLATED: 8 + }; + }, {}], + 45: [function (e, t, r) { + "use strict"; + + var o = function () { + for (var e, t = [], r = 0; r < 256; r++) { + e = r; + for (var n = 0; n < 8; n++) e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; + t[r] = e; + } + return t; + }(); + t.exports = function (e, t, r, n) { + var i = o, + s = n + r; + e ^= -1; + for (var a = n; a < s; a++) e = e >>> 8 ^ i[255 & (e ^ t[a])]; + return -1 ^ e; + }; + }, {}], + 46: [function (e, t, r) { + "use strict"; + + var h, + c = e("../utils/common"), + u = e("./trees"), + d = e("./adler32"), + p = e("./crc32"), + n = e("./messages"), + l = 0, + f = 4, + m = 0, + _ = -2, + g = -1, + b = 4, + i = 2, + v = 8, + y = 9, + s = 286, + a = 30, + o = 19, + w = 2 * s + 1, + k = 15, + x = 3, + S = 258, + z = S + x + 1, + C = 42, + E = 113, + A = 1, + I = 2, + O = 3, + B = 4; + function R(e, t) { + return e.msg = n[t], t; + } + function T(e) { + return (e << 1) - (4 < e ? 9 : 0); + } + function D(e) { + for (var t = e.length; 0 <= --t;) e[t] = 0; + } + function F(e) { + var t = e.state, + r = t.pending; + r > e.avail_out && (r = e.avail_out), 0 !== r && (c.arraySet(e.output, t.pending_buf, t.pending_out, r, e.next_out), e.next_out += r, t.pending_out += r, e.total_out += r, e.avail_out -= r, t.pending -= r, 0 === t.pending && (t.pending_out = 0)); + } + function N(e, t) { + u._tr_flush_block(e, 0 <= e.block_start ? e.block_start : -1, e.strstart - e.block_start, t), e.block_start = e.strstart, F(e.strm); + } + function U(e, t) { + e.pending_buf[e.pending++] = t; + } + function P(e, t) { + e.pending_buf[e.pending++] = t >>> 8 & 255, e.pending_buf[e.pending++] = 255 & t; + } + function L(e, t) { + var r, + n, + i = e.max_chain_length, + s = e.strstart, + a = e.prev_length, + o = e.nice_match, + h = e.strstart > e.w_size - z ? e.strstart - (e.w_size - z) : 0, + u = e.window, + l = e.w_mask, + f = e.prev, + c = e.strstart + S, + d = u[s + a - 1], + p = u[s + a]; + e.prev_length >= e.good_match && (i >>= 2), o > e.lookahead && (o = e.lookahead); + do { + if (u[(r = t) + a] === p && u[r + a - 1] === d && u[r] === u[s] && u[++r] === u[s + 1]) { + s += 2, r++; + do {} while (u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && s < c); + if (n = S - (c - s), s = c - S, a < n) { + if (e.match_start = t, o <= (a = n)) break; + d = u[s + a - 1], p = u[s + a]; + } + } + } while ((t = f[t & l]) > h && 0 != --i); + return a <= e.lookahead ? a : e.lookahead; + } + function j(e) { + var t, + r, + n, + i, + s, + a, + o, + h, + u, + l, + f = e.w_size; + do { + if (i = e.window_size - e.lookahead - e.strstart, e.strstart >= f + (f - z)) { + for (c.arraySet(e.window, e.window, f, f, 0), e.match_start -= f, e.strstart -= f, e.block_start -= f, t = r = e.hash_size; n = e.head[--t], e.head[t] = f <= n ? n - f : 0, --r;); + for (t = r = f; n = e.prev[--t], e.prev[t] = f <= n ? n - f : 0, --r;); + i += f; + } + if (0 === e.strm.avail_in) break; + if (a = e.strm, o = e.window, h = e.strstart + e.lookahead, u = i, l = void 0, l = a.avail_in, u < l && (l = u), r = 0 === l ? 0 : (a.avail_in -= l, c.arraySet(o, a.input, a.next_in, l, h), 1 === a.state.wrap ? a.adler = d(a.adler, o, l, h) : 2 === a.state.wrap && (a.adler = p(a.adler, o, l, h)), a.next_in += l, a.total_in += l, l), e.lookahead += r, e.lookahead + e.insert >= x) for (s = e.strstart - e.insert, e.ins_h = e.window[s], e.ins_h = (e.ins_h << e.hash_shift ^ e.window[s + 1]) & e.hash_mask; e.insert && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[s + x - 1]) & e.hash_mask, e.prev[s & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = s, s++, e.insert--, !(e.lookahead + e.insert < x));); + } while (e.lookahead < z && 0 !== e.strm.avail_in); + } + function Z(e, t) { + for (var r, n;;) { + if (e.lookahead < z) { + if (j(e), e.lookahead < z && t === l) return A; + if (0 === e.lookahead) break; + } + if (r = 0, e.lookahead >= x && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + x - 1]) & e.hash_mask, r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), 0 !== r && e.strstart - r <= e.w_size - z && (e.match_length = L(e, r)), e.match_length >= x) { + if (n = u._tr_tally(e, e.strstart - e.match_start, e.match_length - x), e.lookahead -= e.match_length, e.match_length <= e.max_lazy_match && e.lookahead >= x) { + for (e.match_length--; e.strstart++, e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + x - 1]) & e.hash_mask, r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart, 0 != --e.match_length;); + e.strstart++; + } else e.strstart += e.match_length, e.match_length = 0, e.ins_h = e.window[e.strstart], e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + 1]) & e.hash_mask; + } else n = u._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++; + if (n && (N(e, !1), 0 === e.strm.avail_out)) return A; + } + return e.insert = e.strstart < x - 1 ? e.strstart : x - 1, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? A : I; + } + function W(e, t) { + for (var r, n, i;;) { + if (e.lookahead < z) { + if (j(e), e.lookahead < z && t === l) return A; + if (0 === e.lookahead) break; + } + if (r = 0, e.lookahead >= x && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + x - 1]) & e.hash_mask, r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), e.prev_length = e.match_length, e.prev_match = e.match_start, e.match_length = x - 1, 0 !== r && e.prev_length < e.max_lazy_match && e.strstart - r <= e.w_size - z && (e.match_length = L(e, r), e.match_length <= 5 && (1 === e.strategy || e.match_length === x && 4096 < e.strstart - e.match_start) && (e.match_length = x - 1)), e.prev_length >= x && e.match_length <= e.prev_length) { + for (i = e.strstart + e.lookahead - x, n = u._tr_tally(e, e.strstart - 1 - e.prev_match, e.prev_length - x), e.lookahead -= e.prev_length - 1, e.prev_length -= 2; ++e.strstart <= i && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + x - 1]) & e.hash_mask, r = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), 0 != --e.prev_length;); + if (e.match_available = 0, e.match_length = x - 1, e.strstart++, n && (N(e, !1), 0 === e.strm.avail_out)) return A; + } else if (e.match_available) { + if ((n = u._tr_tally(e, 0, e.window[e.strstart - 1])) && N(e, !1), e.strstart++, e.lookahead--, 0 === e.strm.avail_out) return A; + } else e.match_available = 1, e.strstart++, e.lookahead--; + } + return e.match_available && (n = u._tr_tally(e, 0, e.window[e.strstart - 1]), e.match_available = 0), e.insert = e.strstart < x - 1 ? e.strstart : x - 1, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? A : I; + } + function M(e, t, r, n, i) { + this.good_length = e, this.max_lazy = t, this.nice_length = r, this.max_chain = n, this.func = i; + } + function H() { + this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = v, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new c.Buf16(2 * w), this.dyn_dtree = new c.Buf16(2 * (2 * a + 1)), this.bl_tree = new c.Buf16(2 * (2 * o + 1)), D(this.dyn_ltree), D(this.dyn_dtree), D(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new c.Buf16(k + 1), this.heap = new c.Buf16(2 * s + 1), D(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new c.Buf16(2 * s + 1), D(this.depth), this.l_buf = 0, this.lit_bufsize = 0, this.last_lit = 0, this.d_buf = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0; + } + function G(e) { + var t; + return e && e.state ? (e.total_in = e.total_out = 0, e.data_type = i, (t = e.state).pending = 0, t.pending_out = 0, t.wrap < 0 && (t.wrap = -t.wrap), t.status = t.wrap ? C : E, e.adler = 2 === t.wrap ? 0 : 1, t.last_flush = l, u._tr_init(t), m) : R(e, _); + } + function K(e) { + var t = G(e); + return t === m && function (e) { + e.window_size = 2 * e.w_size, D(e.head), e.max_lazy_match = h[e.level].max_lazy, e.good_match = h[e.level].good_length, e.nice_match = h[e.level].nice_length, e.max_chain_length = h[e.level].max_chain, e.strstart = 0, e.block_start = 0, e.lookahead = 0, e.insert = 0, e.match_length = e.prev_length = x - 1, e.match_available = 0, e.ins_h = 0; + }(e.state), t; + } + function Y(e, t, r, n, i, s) { + if (!e) return _; + var a = 1; + if (t === g && (t = 6), n < 0 ? (a = 0, n = -n) : 15 < n && (a = 2, n -= 16), i < 1 || y < i || r !== v || n < 8 || 15 < n || t < 0 || 9 < t || s < 0 || b < s) return R(e, _); + 8 === n && (n = 9); + var o = new H(); + return (e.state = o).strm = e, o.wrap = a, o.gzhead = null, o.w_bits = n, o.w_size = 1 << o.w_bits, o.w_mask = o.w_size - 1, o.hash_bits = i + 7, o.hash_size = 1 << o.hash_bits, o.hash_mask = o.hash_size - 1, o.hash_shift = ~~((o.hash_bits + x - 1) / x), o.window = new c.Buf8(2 * o.w_size), o.head = new c.Buf16(o.hash_size), o.prev = new c.Buf16(o.w_size), o.lit_bufsize = 1 << i + 6, o.pending_buf_size = 4 * o.lit_bufsize, o.pending_buf = new c.Buf8(o.pending_buf_size), o.d_buf = 1 * o.lit_bufsize, o.l_buf = 3 * o.lit_bufsize, o.level = t, o.strategy = s, o.method = r, K(e); + } + h = [new M(0, 0, 0, 0, function (e, t) { + var r = 65535; + for (r > e.pending_buf_size - 5 && (r = e.pending_buf_size - 5);;) { + if (e.lookahead <= 1) { + if (j(e), 0 === e.lookahead && t === l) return A; + if (0 === e.lookahead) break; + } + e.strstart += e.lookahead, e.lookahead = 0; + var n = e.block_start + r; + if ((0 === e.strstart || e.strstart >= n) && (e.lookahead = e.strstart - n, e.strstart = n, N(e, !1), 0 === e.strm.avail_out)) return A; + if (e.strstart - e.block_start >= e.w_size - z && (N(e, !1), 0 === e.strm.avail_out)) return A; + } + return e.insert = 0, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : (e.strstart > e.block_start && (N(e, !1), e.strm.avail_out), A); + }), new M(4, 4, 8, 4, Z), new M(4, 5, 16, 8, Z), new M(4, 6, 32, 32, Z), new M(4, 4, 16, 16, W), new M(8, 16, 32, 32, W), new M(8, 16, 128, 128, W), new M(8, 32, 128, 256, W), new M(32, 128, 258, 1024, W), new M(32, 258, 258, 4096, W)], r.deflateInit = function (e, t) { + return Y(e, t, v, 15, 8, 0); + }, r.deflateInit2 = Y, r.deflateReset = K, r.deflateResetKeep = G, r.deflateSetHeader = function (e, t) { + return e && e.state ? 2 !== e.state.wrap ? _ : (e.state.gzhead = t, m) : _; + }, r.deflate = function (e, t) { + var r, n, i, s; + if (!e || !e.state || 5 < t || t < 0) return e ? R(e, _) : _; + if (n = e.state, !e.output || !e.input && 0 !== e.avail_in || 666 === n.status && t !== f) return R(e, 0 === e.avail_out ? -5 : _); + if (n.strm = e, r = n.last_flush, n.last_flush = t, n.status === C) if (2 === n.wrap) e.adler = 0, U(n, 31), U(n, 139), U(n, 8), n.gzhead ? (U(n, (n.gzhead.text ? 1 : 0) + (n.gzhead.hcrc ? 2 : 0) + (n.gzhead.extra ? 4 : 0) + (n.gzhead.name ? 8 : 0) + (n.gzhead.comment ? 16 : 0)), U(n, 255 & n.gzhead.time), U(n, n.gzhead.time >> 8 & 255), U(n, n.gzhead.time >> 16 & 255), U(n, n.gzhead.time >> 24 & 255), U(n, 9 === n.level ? 2 : 2 <= n.strategy || n.level < 2 ? 4 : 0), U(n, 255 & n.gzhead.os), n.gzhead.extra && n.gzhead.extra.length && (U(n, 255 & n.gzhead.extra.length), U(n, n.gzhead.extra.length >> 8 & 255)), n.gzhead.hcrc && (e.adler = p(e.adler, n.pending_buf, n.pending, 0)), n.gzindex = 0, n.status = 69) : (U(n, 0), U(n, 0), U(n, 0), U(n, 0), U(n, 0), U(n, 9 === n.level ? 2 : 2 <= n.strategy || n.level < 2 ? 4 : 0), U(n, 3), n.status = E);else { + var a = v + (n.w_bits - 8 << 4) << 8; + a |= (2 <= n.strategy || n.level < 2 ? 0 : n.level < 6 ? 1 : 6 === n.level ? 2 : 3) << 6, 0 !== n.strstart && (a |= 32), a += 31 - a % 31, n.status = E, P(n, a), 0 !== n.strstart && (P(n, e.adler >>> 16), P(n, 65535 & e.adler)), e.adler = 1; + } + if (69 === n.status) if (n.gzhead.extra) { + for (i = n.pending; n.gzindex < (65535 & n.gzhead.extra.length) && (n.pending !== n.pending_buf_size || (n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), F(e), i = n.pending, n.pending !== n.pending_buf_size));) U(n, 255 & n.gzhead.extra[n.gzindex]), n.gzindex++; + n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), n.gzindex === n.gzhead.extra.length && (n.gzindex = 0, n.status = 73); + } else n.status = 73; + if (73 === n.status) if (n.gzhead.name) { + i = n.pending; + do { + if (n.pending === n.pending_buf_size && (n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), F(e), i = n.pending, n.pending === n.pending_buf_size)) { + s = 1; + break; + } + s = n.gzindex < n.gzhead.name.length ? 255 & n.gzhead.name.charCodeAt(n.gzindex++) : 0, U(n, s); + } while (0 !== s); + n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), 0 === s && (n.gzindex = 0, n.status = 91); + } else n.status = 91; + if (91 === n.status) if (n.gzhead.comment) { + i = n.pending; + do { + if (n.pending === n.pending_buf_size && (n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), F(e), i = n.pending, n.pending === n.pending_buf_size)) { + s = 1; + break; + } + s = n.gzindex < n.gzhead.comment.length ? 255 & n.gzhead.comment.charCodeAt(n.gzindex++) : 0, U(n, s); + } while (0 !== s); + n.gzhead.hcrc && n.pending > i && (e.adler = p(e.adler, n.pending_buf, n.pending - i, i)), 0 === s && (n.status = 103); + } else n.status = 103; + if (103 === n.status && (n.gzhead.hcrc ? (n.pending + 2 > n.pending_buf_size && F(e), n.pending + 2 <= n.pending_buf_size && (U(n, 255 & e.adler), U(n, e.adler >> 8 & 255), e.adler = 0, n.status = E)) : n.status = E), 0 !== n.pending) { + if (F(e), 0 === e.avail_out) return n.last_flush = -1, m; + } else if (0 === e.avail_in && T(t) <= T(r) && t !== f) return R(e, -5); + if (666 === n.status && 0 !== e.avail_in) return R(e, -5); + if (0 !== e.avail_in || 0 !== n.lookahead || t !== l && 666 !== n.status) { + var o = 2 === n.strategy ? function (e, t) { + for (var r;;) { + if (0 === e.lookahead && (j(e), 0 === e.lookahead)) { + if (t === l) return A; + break; + } + if (e.match_length = 0, r = u._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++, r && (N(e, !1), 0 === e.strm.avail_out)) return A; + } + return e.insert = 0, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? A : I; + }(n, t) : 3 === n.strategy ? function (e, t) { + for (var r, n, i, s, a = e.window;;) { + if (e.lookahead <= S) { + if (j(e), e.lookahead <= S && t === l) return A; + if (0 === e.lookahead) break; + } + if (e.match_length = 0, e.lookahead >= x && 0 < e.strstart && (n = a[i = e.strstart - 1]) === a[++i] && n === a[++i] && n === a[++i]) { + s = e.strstart + S; + do {} while (n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && n === a[++i] && i < s); + e.match_length = S - (s - i), e.match_length > e.lookahead && (e.match_length = e.lookahead); + } + if (e.match_length >= x ? (r = u._tr_tally(e, 1, e.match_length - x), e.lookahead -= e.match_length, e.strstart += e.match_length, e.match_length = 0) : (r = u._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++), r && (N(e, !1), 0 === e.strm.avail_out)) return A; + } + return e.insert = 0, t === f ? (N(e, !0), 0 === e.strm.avail_out ? O : B) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? A : I; + }(n, t) : h[n.level].func(n, t); + if (o !== O && o !== B || (n.status = 666), o === A || o === O) return 0 === e.avail_out && (n.last_flush = -1), m; + if (o === I && (1 === t ? u._tr_align(n) : 5 !== t && (u._tr_stored_block(n, 0, 0, !1), 3 === t && (D(n.head), 0 === n.lookahead && (n.strstart = 0, n.block_start = 0, n.insert = 0))), F(e), 0 === e.avail_out)) return n.last_flush = -1, m; + } + return t !== f ? m : n.wrap <= 0 ? 1 : (2 === n.wrap ? (U(n, 255 & e.adler), U(n, e.adler >> 8 & 255), U(n, e.adler >> 16 & 255), U(n, e.adler >> 24 & 255), U(n, 255 & e.total_in), U(n, e.total_in >> 8 & 255), U(n, e.total_in >> 16 & 255), U(n, e.total_in >> 24 & 255)) : (P(n, e.adler >>> 16), P(n, 65535 & e.adler)), F(e), 0 < n.wrap && (n.wrap = -n.wrap), 0 !== n.pending ? m : 1); + }, r.deflateEnd = function (e) { + var t; + return e && e.state ? (t = e.state.status) !== C && 69 !== t && 73 !== t && 91 !== t && 103 !== t && t !== E && 666 !== t ? R(e, _) : (e.state = null, t === E ? R(e, -3) : m) : _; + }, r.deflateSetDictionary = function (e, t) { + var r, + n, + i, + s, + a, + o, + h, + u, + l = t.length; + if (!e || !e.state) return _; + if (2 === (s = (r = e.state).wrap) || 1 === s && r.status !== C || r.lookahead) return _; + for (1 === s && (e.adler = d(e.adler, t, l, 0)), r.wrap = 0, l >= r.w_size && (0 === s && (D(r.head), r.strstart = 0, r.block_start = 0, r.insert = 0), u = new c.Buf8(r.w_size), c.arraySet(u, t, l - r.w_size, r.w_size, 0), t = u, l = r.w_size), a = e.avail_in, o = e.next_in, h = e.input, e.avail_in = l, e.next_in = 0, e.input = t, j(r); r.lookahead >= x;) { + for (n = r.strstart, i = r.lookahead - (x - 1); r.ins_h = (r.ins_h << r.hash_shift ^ r.window[n + x - 1]) & r.hash_mask, r.prev[n & r.w_mask] = r.head[r.ins_h], r.head[r.ins_h] = n, n++, --i;); + r.strstart = n, r.lookahead = x - 1, j(r); + } + return r.strstart += r.lookahead, r.block_start = r.strstart, r.insert = r.lookahead, r.lookahead = 0, r.match_length = r.prev_length = x - 1, r.match_available = 0, e.next_in = o, e.input = h, e.avail_in = a, r.wrap = s, m; + }, r.deflateInfo = "pako deflate (from Nodeca project)"; + }, { + "../utils/common": 41, + "./adler32": 43, + "./crc32": 45, + "./messages": 51, + "./trees": 52 + }], + 47: [function (e, t, r) { + "use strict"; + + t.exports = function () { + this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = !1; + }; + }, {}], + 48: [function (e, t, r) { + "use strict"; + + t.exports = function (e, t) { + var r, n, i, s, a, o, h, u, l, f, c, d, p, m, _, g, b, v, y, w, k, x, S, z, C; + r = e.state, n = e.next_in, z = e.input, i = n + (e.avail_in - 5), s = e.next_out, C = e.output, a = s - (t - e.avail_out), o = s + (e.avail_out - 257), h = r.dmax, u = r.wsize, l = r.whave, f = r.wnext, c = r.window, d = r.hold, p = r.bits, m = r.lencode, _ = r.distcode, g = (1 << r.lenbits) - 1, b = (1 << r.distbits) - 1; + e: do { + p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = m[d & g]; + t: for (;;) { + if (d >>>= y = v >>> 24, p -= y, 0 === (y = v >>> 16 & 255)) C[s++] = 65535 & v;else { + if (!(16 & y)) { + if (0 == (64 & y)) { + v = m[(65535 & v) + (d & (1 << y) - 1)]; + continue t; + } + if (32 & y) { + r.mode = 12; + break e; + } + e.msg = "invalid literal/length code", r.mode = 30; + break e; + } + w = 65535 & v, (y &= 15) && (p < y && (d += z[n++] << p, p += 8), w += d & (1 << y) - 1, d >>>= y, p -= y), p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = _[d & b]; + r: for (;;) { + if (d >>>= y = v >>> 24, p -= y, !(16 & (y = v >>> 16 & 255))) { + if (0 == (64 & y)) { + v = _[(65535 & v) + (d & (1 << y) - 1)]; + continue r; + } + e.msg = "invalid distance code", r.mode = 30; + break e; + } + if (k = 65535 & v, p < (y &= 15) && (d += z[n++] << p, (p += 8) < y && (d += z[n++] << p, p += 8)), h < (k += d & (1 << y) - 1)) { + e.msg = "invalid distance too far back", r.mode = 30; + break e; + } + if (d >>>= y, p -= y, (y = s - a) < k) { + if (l < (y = k - y) && r.sane) { + e.msg = "invalid distance too far back", r.mode = 30; + break e; + } + if (S = c, (x = 0) === f) { + if (x += u - y, y < w) { + for (w -= y; C[s++] = c[x++], --y;); + x = s - k, S = C; + } + } else if (f < y) { + if (x += u + f - y, (y -= f) < w) { + for (w -= y; C[s++] = c[x++], --y;); + if (x = 0, f < w) { + for (w -= y = f; C[s++] = c[x++], --y;); + x = s - k, S = C; + } + } + } else if (x += f - y, y < w) { + for (w -= y; C[s++] = c[x++], --y;); + x = s - k, S = C; + } + for (; 2 < w;) C[s++] = S[x++], C[s++] = S[x++], C[s++] = S[x++], w -= 3; + w && (C[s++] = S[x++], 1 < w && (C[s++] = S[x++])); + } else { + for (x = s - k; C[s++] = C[x++], C[s++] = C[x++], C[s++] = C[x++], 2 < (w -= 3);); + w && (C[s++] = C[x++], 1 < w && (C[s++] = C[x++])); + } + break; + } + } + break; + } + } while (n < i && s < o); + n -= w = p >> 3, d &= (1 << (p -= w << 3)) - 1, e.next_in = n, e.next_out = s, e.avail_in = n < i ? i - n + 5 : 5 - (n - i), e.avail_out = s < o ? o - s + 257 : 257 - (s - o), r.hold = d, r.bits = p; + }; + }, {}], + 49: [function (e, t, r) { + "use strict"; + + var I = e("../utils/common"), + O = e("./adler32"), + B = e("./crc32"), + R = e("./inffast"), + T = e("./inftrees"), + D = 1, + F = 2, + N = 0, + U = -2, + P = 1, + n = 852, + i = 592; + function L(e) { + return (e >>> 24 & 255) + (e >>> 8 & 65280) + ((65280 & e) << 8) + ((255 & e) << 24); + } + function s() { + this.mode = 0, this.last = !1, this.wrap = 0, this.havedict = !1, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new I.Buf16(320), this.work = new I.Buf16(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0; + } + function a(e) { + var t; + return e && e.state ? (t = e.state, e.total_in = e.total_out = t.total = 0, e.msg = "", t.wrap && (e.adler = 1 & t.wrap), t.mode = P, t.last = 0, t.havedict = 0, t.dmax = 32768, t.head = null, t.hold = 0, t.bits = 0, t.lencode = t.lendyn = new I.Buf32(n), t.distcode = t.distdyn = new I.Buf32(i), t.sane = 1, t.back = -1, N) : U; + } + function o(e) { + var t; + return e && e.state ? ((t = e.state).wsize = 0, t.whave = 0, t.wnext = 0, a(e)) : U; + } + function h(e, t) { + var r, n; + return e && e.state ? (n = e.state, t < 0 ? (r = 0, t = -t) : (r = 1 + (t >> 4), t < 48 && (t &= 15)), t && (t < 8 || 15 < t) ? U : (null !== n.window && n.wbits !== t && (n.window = null), n.wrap = r, n.wbits = t, o(e))) : U; + } + function u(e, t) { + var r, n; + return e ? (n = new s(), (e.state = n).window = null, (r = h(e, t)) !== N && (e.state = null), r) : U; + } + var l, + f, + c = !0; + function j(e) { + if (c) { + var t; + for (l = new I.Buf32(512), f = new I.Buf32(32), t = 0; t < 144;) e.lens[t++] = 8; + for (; t < 256;) e.lens[t++] = 9; + for (; t < 280;) e.lens[t++] = 7; + for (; t < 288;) e.lens[t++] = 8; + for (T(D, e.lens, 0, 288, l, 0, e.work, { + bits: 9 + }), t = 0; t < 32;) e.lens[t++] = 5; + T(F, e.lens, 0, 32, f, 0, e.work, { + bits: 5 + }), c = !1; + } + e.lencode = l, e.lenbits = 9, e.distcode = f, e.distbits = 5; + } + function Z(e, t, r, n) { + var i, + s = e.state; + return null === s.window && (s.wsize = 1 << s.wbits, s.wnext = 0, s.whave = 0, s.window = new I.Buf8(s.wsize)), n >= s.wsize ? (I.arraySet(s.window, t, r - s.wsize, s.wsize, 0), s.wnext = 0, s.whave = s.wsize) : (n < (i = s.wsize - s.wnext) && (i = n), I.arraySet(s.window, t, r - n, i, s.wnext), (n -= i) ? (I.arraySet(s.window, t, r - n, n, 0), s.wnext = n, s.whave = s.wsize) : (s.wnext += i, s.wnext === s.wsize && (s.wnext = 0), s.whave < s.wsize && (s.whave += i))), 0; + } + r.inflateReset = o, r.inflateReset2 = h, r.inflateResetKeep = a, r.inflateInit = function (e) { + return u(e, 15); + }, r.inflateInit2 = u, r.inflate = function (e, t) { + var r, + n, + i, + s, + a, + o, + h, + u, + l, + f, + c, + d, + p, + m, + _, + g, + b, + v, + y, + w, + k, + x, + S, + z, + C = 0, + E = new I.Buf8(4), + A = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]; + if (!e || !e.state || !e.output || !e.input && 0 !== e.avail_in) return U; + 12 === (r = e.state).mode && (r.mode = 13), a = e.next_out, i = e.output, h = e.avail_out, s = e.next_in, n = e.input, o = e.avail_in, u = r.hold, l = r.bits, f = o, c = h, x = N; + e: for (;;) switch (r.mode) { + case P: + if (0 === r.wrap) { + r.mode = 13; + break; + } + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (2 & r.wrap && 35615 === u) { + E[r.check = 0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0), l = u = 0, r.mode = 2; + break; + } + if (r.flags = 0, r.head && (r.head.done = !1), !(1 & r.wrap) || (((255 & u) << 8) + (u >> 8)) % 31) { + e.msg = "incorrect header check", r.mode = 30; + break; + } + if (8 != (15 & u)) { + e.msg = "unknown compression method", r.mode = 30; + break; + } + if (l -= 4, k = 8 + (15 & (u >>>= 4)), 0 === r.wbits) r.wbits = k;else if (k > r.wbits) { + e.msg = "invalid window size", r.mode = 30; + break; + } + r.dmax = 1 << k, e.adler = r.check = 1, r.mode = 512 & u ? 10 : 12, l = u = 0; + break; + case 2: + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (r.flags = u, 8 != (255 & r.flags)) { + e.msg = "unknown compression method", r.mode = 30; + break; + } + if (57344 & r.flags) { + e.msg = "unknown header flags set", r.mode = 30; + break; + } + r.head && (r.head.text = u >> 8 & 1), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0)), l = u = 0, r.mode = 3; + case 3: + for (; l < 32;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.head && (r.head.time = u), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, E[2] = u >>> 16 & 255, E[3] = u >>> 24 & 255, r.check = B(r.check, E, 4, 0)), l = u = 0, r.mode = 4; + case 4: + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.head && (r.head.xflags = 255 & u, r.head.os = u >> 8), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0)), l = u = 0, r.mode = 5; + case 5: + if (1024 & r.flags) { + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.length = u, r.head && (r.head.extra_len = u), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0)), l = u = 0; + } else r.head && (r.head.extra = null); + r.mode = 6; + case 6: + if (1024 & r.flags && (o < (d = r.length) && (d = o), d && (r.head && (k = r.head.extra_len - r.length, r.head.extra || (r.head.extra = new Array(r.head.extra_len)), I.arraySet(r.head.extra, n, s, d, k)), 512 & r.flags && (r.check = B(r.check, n, d, s)), o -= d, s += d, r.length -= d), r.length)) break e; + r.length = 0, r.mode = 7; + case 7: + if (2048 & r.flags) { + if (0 === o) break e; + for (d = 0; k = n[s + d++], r.head && k && r.length < 65536 && (r.head.name += String.fromCharCode(k)), k && d < o;); + if (512 & r.flags && (r.check = B(r.check, n, d, s)), o -= d, s += d, k) break e; + } else r.head && (r.head.name = null); + r.length = 0, r.mode = 8; + case 8: + if (4096 & r.flags) { + if (0 === o) break e; + for (d = 0; k = n[s + d++], r.head && k && r.length < 65536 && (r.head.comment += String.fromCharCode(k)), k && d < o;); + if (512 & r.flags && (r.check = B(r.check, n, d, s)), o -= d, s += d, k) break e; + } else r.head && (r.head.comment = null); + r.mode = 9; + case 9: + if (512 & r.flags) { + for (; l < 16;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (u !== (65535 & r.check)) { + e.msg = "header crc mismatch", r.mode = 30; + break; + } + l = u = 0; + } + r.head && (r.head.hcrc = r.flags >> 9 & 1, r.head.done = !0), e.adler = r.check = 0, r.mode = 12; + break; + case 10: + for (; l < 32;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + e.adler = r.check = L(u), l = u = 0, r.mode = 11; + case 11: + if (0 === r.havedict) return e.next_out = a, e.avail_out = h, e.next_in = s, e.avail_in = o, r.hold = u, r.bits = l, 2; + e.adler = r.check = 1, r.mode = 12; + case 12: + if (5 === t || 6 === t) break e; + case 13: + if (r.last) { + u >>>= 7 & l, l -= 7 & l, r.mode = 27; + break; + } + for (; l < 3;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + switch (r.last = 1 & u, l -= 1, 3 & (u >>>= 1)) { + case 0: + r.mode = 14; + break; + case 1: + if (j(r), r.mode = 20, 6 !== t) break; + u >>>= 2, l -= 2; + break e; + case 2: + r.mode = 17; + break; + case 3: + e.msg = "invalid block type", r.mode = 30; + } + u >>>= 2, l -= 2; + break; + case 14: + for (u >>>= 7 & l, l -= 7 & l; l < 32;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if ((65535 & u) != (u >>> 16 ^ 65535)) { + e.msg = "invalid stored block lengths", r.mode = 30; + break; + } + if (r.length = 65535 & u, l = u = 0, r.mode = 15, 6 === t) break e; + case 15: + r.mode = 16; + case 16: + if (d = r.length) { + if (o < d && (d = o), h < d && (d = h), 0 === d) break e; + I.arraySet(i, n, s, d, a), o -= d, s += d, h -= d, a += d, r.length -= d; + break; + } + r.mode = 12; + break; + case 17: + for (; l < 14;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (r.nlen = 257 + (31 & u), u >>>= 5, l -= 5, r.ndist = 1 + (31 & u), u >>>= 5, l -= 5, r.ncode = 4 + (15 & u), u >>>= 4, l -= 4, 286 < r.nlen || 30 < r.ndist) { + e.msg = "too many length or distance symbols", r.mode = 30; + break; + } + r.have = 0, r.mode = 18; + case 18: + for (; r.have < r.ncode;) { + for (; l < 3;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.lens[A[r.have++]] = 7 & u, u >>>= 3, l -= 3; + } + for (; r.have < 19;) r.lens[A[r.have++]] = 0; + if (r.lencode = r.lendyn, r.lenbits = 7, S = { + bits: r.lenbits + }, x = T(0, r.lens, 0, 19, r.lencode, 0, r.work, S), r.lenbits = S.bits, x) { + e.msg = "invalid code lengths set", r.mode = 30; + break; + } + r.have = 0, r.mode = 19; + case 19: + for (; r.have < r.nlen + r.ndist;) { + for (; g = (C = r.lencode[u & (1 << r.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (b < 16) u >>>= _, l -= _, r.lens[r.have++] = b;else { + if (16 === b) { + for (z = _ + 2; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (u >>>= _, l -= _, 0 === r.have) { + e.msg = "invalid bit length repeat", r.mode = 30; + break; + } + k = r.lens[r.have - 1], d = 3 + (3 & u), u >>>= 2, l -= 2; + } else if (17 === b) { + for (z = _ + 3; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + l -= _, k = 0, d = 3 + (7 & (u >>>= _)), u >>>= 3, l -= 3; + } else { + for (z = _ + 7; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + l -= _, k = 0, d = 11 + (127 & (u >>>= _)), u >>>= 7, l -= 7; + } + if (r.have + d > r.nlen + r.ndist) { + e.msg = "invalid bit length repeat", r.mode = 30; + break; + } + for (; d--;) r.lens[r.have++] = k; + } + } + if (30 === r.mode) break; + if (0 === r.lens[256]) { + e.msg = "invalid code -- missing end-of-block", r.mode = 30; + break; + } + if (r.lenbits = 9, S = { + bits: r.lenbits + }, x = T(D, r.lens, 0, r.nlen, r.lencode, 0, r.work, S), r.lenbits = S.bits, x) { + e.msg = "invalid literal/lengths set", r.mode = 30; + break; + } + if (r.distbits = 6, r.distcode = r.distdyn, S = { + bits: r.distbits + }, x = T(F, r.lens, r.nlen, r.ndist, r.distcode, 0, r.work, S), r.distbits = S.bits, x) { + e.msg = "invalid distances set", r.mode = 30; + break; + } + if (r.mode = 20, 6 === t) break e; + case 20: + r.mode = 21; + case 21: + if (6 <= o && 258 <= h) { + e.next_out = a, e.avail_out = h, e.next_in = s, e.avail_in = o, r.hold = u, r.bits = l, R(e, c), a = e.next_out, i = e.output, h = e.avail_out, s = e.next_in, n = e.input, o = e.avail_in, u = r.hold, l = r.bits, 12 === r.mode && (r.back = -1); + break; + } + for (r.back = 0; g = (C = r.lencode[u & (1 << r.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (g && 0 == (240 & g)) { + for (v = _, y = g, w = b; g = (C = r.lencode[w + ((u & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + u >>>= v, l -= v, r.back += v; + } + if (u >>>= _, l -= _, r.back += _, r.length = b, 0 === g) { + r.mode = 26; + break; + } + if (32 & g) { + r.back = -1, r.mode = 12; + break; + } + if (64 & g) { + e.msg = "invalid literal/length code", r.mode = 30; + break; + } + r.extra = 15 & g, r.mode = 22; + case 22: + if (r.extra) { + for (z = r.extra; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.length += u & (1 << r.extra) - 1, u >>>= r.extra, l -= r.extra, r.back += r.extra; + } + r.was = r.length, r.mode = 23; + case 23: + for (; g = (C = r.distcode[u & (1 << r.distbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (0 == (240 & g)) { + for (v = _, y = g, w = b; g = (C = r.distcode[w + ((u & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l);) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + u >>>= v, l -= v, r.back += v; + } + if (u >>>= _, l -= _, r.back += _, 64 & g) { + e.msg = "invalid distance code", r.mode = 30; + break; + } + r.offset = b, r.extra = 15 & g, r.mode = 24; + case 24: + if (r.extra) { + for (z = r.extra; l < z;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + r.offset += u & (1 << r.extra) - 1, u >>>= r.extra, l -= r.extra, r.back += r.extra; + } + if (r.offset > r.dmax) { + e.msg = "invalid distance too far back", r.mode = 30; + break; + } + r.mode = 25; + case 25: + if (0 === h) break e; + if (d = c - h, r.offset > d) { + if ((d = r.offset - d) > r.whave && r.sane) { + e.msg = "invalid distance too far back", r.mode = 30; + break; + } + p = d > r.wnext ? (d -= r.wnext, r.wsize - d) : r.wnext - d, d > r.length && (d = r.length), m = r.window; + } else m = i, p = a - r.offset, d = r.length; + for (h < d && (d = h), h -= d, r.length -= d; i[a++] = m[p++], --d;); + 0 === r.length && (r.mode = 21); + break; + case 26: + if (0 === h) break e; + i[a++] = r.length, h--, r.mode = 21; + break; + case 27: + if (r.wrap) { + for (; l < 32;) { + if (0 === o) break e; + o--, u |= n[s++] << l, l += 8; + } + if (c -= h, e.total_out += c, r.total += c, c && (e.adler = r.check = r.flags ? B(r.check, i, c, a - c) : O(r.check, i, c, a - c)), c = h, (r.flags ? u : L(u)) !== r.check) { + e.msg = "incorrect data check", r.mode = 30; + break; + } + l = u = 0; + } + r.mode = 28; + case 28: + if (r.wrap && r.flags) { + for (; l < 32;) { + if (0 === o) break e; + o--, u += n[s++] << l, l += 8; + } + if (u !== (4294967295 & r.total)) { + e.msg = "incorrect length check", r.mode = 30; + break; + } + l = u = 0; + } + r.mode = 29; + case 29: + x = 1; + break e; + case 30: + x = -3; + break e; + case 31: + return -4; + case 32: + default: + return U; + } + return e.next_out = a, e.avail_out = h, e.next_in = s, e.avail_in = o, r.hold = u, r.bits = l, (r.wsize || c !== e.avail_out && r.mode < 30 && (r.mode < 27 || 4 !== t)) && Z(e, e.output, e.next_out, c - e.avail_out) ? (r.mode = 31, -4) : (f -= e.avail_in, c -= e.avail_out, e.total_in += f, e.total_out += c, r.total += c, r.wrap && c && (e.adler = r.check = r.flags ? B(r.check, i, c, e.next_out - c) : O(r.check, i, c, e.next_out - c)), e.data_type = r.bits + (r.last ? 64 : 0) + (12 === r.mode ? 128 : 0) + (20 === r.mode || 15 === r.mode ? 256 : 0), (0 == f && 0 === c || 4 === t) && x === N && (x = -5), x); + }, r.inflateEnd = function (e) { + if (!e || !e.state) return U; + var t = e.state; + return t.window && (t.window = null), e.state = null, N; + }, r.inflateGetHeader = function (e, t) { + var r; + return e && e.state ? 0 == (2 & (r = e.state).wrap) ? U : ((r.head = t).done = !1, N) : U; + }, r.inflateSetDictionary = function (e, t) { + var r, + n = t.length; + return e && e.state ? 0 !== (r = e.state).wrap && 11 !== r.mode ? U : 11 === r.mode && O(1, t, n, 0) !== r.check ? -3 : Z(e, t, n, n) ? (r.mode = 31, -4) : (r.havedict = 1, N) : U; + }, r.inflateInfo = "pako inflate (from Nodeca project)"; + }, { + "../utils/common": 41, + "./adler32": 43, + "./crc32": 45, + "./inffast": 48, + "./inftrees": 50 + }], + 50: [function (e, t, r) { + "use strict"; + + var D = e("../utils/common"), + F = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], + N = [16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78], + U = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0], + P = [16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64]; + t.exports = function (e, t, r, n, i, s, a, o) { + var h, + u, + l, + f, + c, + d, + p, + m, + _, + g = o.bits, + b = 0, + v = 0, + y = 0, + w = 0, + k = 0, + x = 0, + S = 0, + z = 0, + C = 0, + E = 0, + A = null, + I = 0, + O = new D.Buf16(16), + B = new D.Buf16(16), + R = null, + T = 0; + for (b = 0; b <= 15; b++) O[b] = 0; + for (v = 0; v < n; v++) O[t[r + v]]++; + for (k = g, w = 15; 1 <= w && 0 === O[w]; w--); + if (w < k && (k = w), 0 === w) return i[s++] = 20971520, i[s++] = 20971520, o.bits = 1, 0; + for (y = 1; y < w && 0 === O[y]; y++); + for (k < y && (k = y), b = z = 1; b <= 15; b++) if (z <<= 1, (z -= O[b]) < 0) return -1; + if (0 < z && (0 === e || 1 !== w)) return -1; + for (B[1] = 0, b = 1; b < 15; b++) B[b + 1] = B[b] + O[b]; + for (v = 0; v < n; v++) 0 !== t[r + v] && (a[B[t[r + v]]++] = v); + if (d = 0 === e ? (A = R = a, 19) : 1 === e ? (A = F, I -= 257, R = N, T -= 257, 256) : (A = U, R = P, -1), b = y, c = s, S = v = E = 0, l = -1, f = (C = 1 << (x = k)) - 1, 1 === e && 852 < C || 2 === e && 592 < C) return 1; + for (;;) { + for (p = b - S, _ = a[v] < d ? (m = 0, a[v]) : a[v] > d ? (m = R[T + a[v]], A[I + a[v]]) : (m = 96, 0), h = 1 << b - S, y = u = 1 << x; i[c + (E >> S) + (u -= h)] = p << 24 | m << 16 | _ | 0, 0 !== u;); + for (h = 1 << b - 1; E & h;) h >>= 1; + if (0 !== h ? (E &= h - 1, E += h) : E = 0, v++, 0 == --O[b]) { + if (b === w) break; + b = t[r + a[v]]; + } + if (k < b && (E & f) !== l) { + for (0 === S && (S = k), c += y, z = 1 << (x = b - S); x + S < w && !((z -= O[x + S]) <= 0);) x++, z <<= 1; + if (C += 1 << x, 1 === e && 852 < C || 2 === e && 592 < C) return 1; + i[l = E & f] = k << 24 | x << 16 | c - s | 0; + } + } + return 0 !== E && (i[c + E] = b - S << 24 | 64 << 16 | 0), o.bits = k, 0; + }; + }, { + "../utils/common": 41 + }], + 51: [function (e, t, r) { + "use strict"; + + t.exports = { + 2: "need dictionary", + 1: "stream end", + 0: "", + "-1": "file error", + "-2": "stream error", + "-3": "data error", + "-4": "insufficient memory", + "-5": "buffer error", + "-6": "incompatible version" + }; + }, {}], + 52: [function (e, t, r) { + "use strict"; + + var i = e("../utils/common"), + o = 0, + h = 1; + function n(e) { + for (var t = e.length; 0 <= --t;) e[t] = 0; + } + var s = 0, + a = 29, + u = 256, + l = u + 1 + a, + f = 30, + c = 19, + _ = 2 * l + 1, + g = 15, + d = 16, + p = 7, + m = 256, + b = 16, + v = 17, + y = 18, + w = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], + k = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], + x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], + S = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], + z = new Array(2 * (l + 2)); + n(z); + var C = new Array(2 * f); + n(C); + var E = new Array(512); + n(E); + var A = new Array(256); + n(A); + var I = new Array(a); + n(I); + var O, + B, + R, + T = new Array(f); + function D(e, t, r, n, i) { + this.static_tree = e, this.extra_bits = t, this.extra_base = r, this.elems = n, this.max_length = i, this.has_stree = e && e.length; + } + function F(e, t) { + this.dyn_tree = e, this.max_code = 0, this.stat_desc = t; + } + function N(e) { + return e < 256 ? E[e] : E[256 + (e >>> 7)]; + } + function U(e, t) { + e.pending_buf[e.pending++] = 255 & t, e.pending_buf[e.pending++] = t >>> 8 & 255; + } + function P(e, t, r) { + e.bi_valid > d - r ? (e.bi_buf |= t << e.bi_valid & 65535, U(e, e.bi_buf), e.bi_buf = t >> d - e.bi_valid, e.bi_valid += r - d) : (e.bi_buf |= t << e.bi_valid & 65535, e.bi_valid += r); + } + function L(e, t, r) { + P(e, r[2 * t], r[2 * t + 1]); + } + function j(e, t) { + for (var r = 0; r |= 1 & e, e >>>= 1, r <<= 1, 0 < --t;); + return r >>> 1; + } + function Z(e, t, r) { + var n, + i, + s = new Array(g + 1), + a = 0; + for (n = 1; n <= g; n++) s[n] = a = a + r[n - 1] << 1; + for (i = 0; i <= t; i++) { + var o = e[2 * i + 1]; + 0 !== o && (e[2 * i] = j(s[o]++, o)); + } + } + function W(e) { + var t; + for (t = 0; t < l; t++) e.dyn_ltree[2 * t] = 0; + for (t = 0; t < f; t++) e.dyn_dtree[2 * t] = 0; + for (t = 0; t < c; t++) e.bl_tree[2 * t] = 0; + e.dyn_ltree[2 * m] = 1, e.opt_len = e.static_len = 0, e.last_lit = e.matches = 0; + } + function M(e) { + 8 < e.bi_valid ? U(e, e.bi_buf) : 0 < e.bi_valid && (e.pending_buf[e.pending++] = e.bi_buf), e.bi_buf = 0, e.bi_valid = 0; + } + function H(e, t, r, n) { + var i = 2 * t, + s = 2 * r; + return e[i] < e[s] || e[i] === e[s] && n[t] <= n[r]; + } + function G(e, t, r) { + for (var n = e.heap[r], i = r << 1; i <= e.heap_len && (i < e.heap_len && H(t, e.heap[i + 1], e.heap[i], e.depth) && i++, !H(t, n, e.heap[i], e.depth));) e.heap[r] = e.heap[i], r = i, i <<= 1; + e.heap[r] = n; + } + function K(e, t, r) { + var n, + i, + s, + a, + o = 0; + if (0 !== e.last_lit) for (; n = e.pending_buf[e.d_buf + 2 * o] << 8 | e.pending_buf[e.d_buf + 2 * o + 1], i = e.pending_buf[e.l_buf + o], o++, 0 === n ? L(e, i, t) : (L(e, (s = A[i]) + u + 1, t), 0 !== (a = w[s]) && P(e, i -= I[s], a), L(e, s = N(--n), r), 0 !== (a = k[s]) && P(e, n -= T[s], a)), o < e.last_lit;); + L(e, m, t); + } + function Y(e, t) { + var r, + n, + i, + s = t.dyn_tree, + a = t.stat_desc.static_tree, + o = t.stat_desc.has_stree, + h = t.stat_desc.elems, + u = -1; + for (e.heap_len = 0, e.heap_max = _, r = 0; r < h; r++) 0 !== s[2 * r] ? (e.heap[++e.heap_len] = u = r, e.depth[r] = 0) : s[2 * r + 1] = 0; + for (; e.heap_len < 2;) s[2 * (i = e.heap[++e.heap_len] = u < 2 ? ++u : 0)] = 1, e.depth[i] = 0, e.opt_len--, o && (e.static_len -= a[2 * i + 1]); + for (t.max_code = u, r = e.heap_len >> 1; 1 <= r; r--) G(e, s, r); + for (i = h; r = e.heap[1], e.heap[1] = e.heap[e.heap_len--], G(e, s, 1), n = e.heap[1], e.heap[--e.heap_max] = r, e.heap[--e.heap_max] = n, s[2 * i] = s[2 * r] + s[2 * n], e.depth[i] = (e.depth[r] >= e.depth[n] ? e.depth[r] : e.depth[n]) + 1, s[2 * r + 1] = s[2 * n + 1] = i, e.heap[1] = i++, G(e, s, 1), 2 <= e.heap_len;); + e.heap[--e.heap_max] = e.heap[1], function (e, t) { + var r, + n, + i, + s, + a, + o, + h = t.dyn_tree, + u = t.max_code, + l = t.stat_desc.static_tree, + f = t.stat_desc.has_stree, + c = t.stat_desc.extra_bits, + d = t.stat_desc.extra_base, + p = t.stat_desc.max_length, + m = 0; + for (s = 0; s <= g; s++) e.bl_count[s] = 0; + for (h[2 * e.heap[e.heap_max] + 1] = 0, r = e.heap_max + 1; r < _; r++) p < (s = h[2 * h[2 * (n = e.heap[r]) + 1] + 1] + 1) && (s = p, m++), h[2 * n + 1] = s, u < n || (e.bl_count[s]++, a = 0, d <= n && (a = c[n - d]), o = h[2 * n], e.opt_len += o * (s + a), f && (e.static_len += o * (l[2 * n + 1] + a))); + if (0 !== m) { + do { + for (s = p - 1; 0 === e.bl_count[s];) s--; + e.bl_count[s]--, e.bl_count[s + 1] += 2, e.bl_count[p]--, m -= 2; + } while (0 < m); + for (s = p; 0 !== s; s--) for (n = e.bl_count[s]; 0 !== n;) u < (i = e.heap[--r]) || (h[2 * i + 1] !== s && (e.opt_len += (s - h[2 * i + 1]) * h[2 * i], h[2 * i + 1] = s), n--); + } + }(e, t), Z(s, u, e.bl_count); + } + function X(e, t, r) { + var n, + i, + s = -1, + a = t[1], + o = 0, + h = 7, + u = 4; + for (0 === a && (h = 138, u = 3), t[2 * (r + 1) + 1] = 65535, n = 0; n <= r; n++) i = a, a = t[2 * (n + 1) + 1], ++o < h && i === a || (o < u ? e.bl_tree[2 * i] += o : 0 !== i ? (i !== s && e.bl_tree[2 * i]++, e.bl_tree[2 * b]++) : o <= 10 ? e.bl_tree[2 * v]++ : e.bl_tree[2 * y]++, s = i, u = (o = 0) === a ? (h = 138, 3) : i === a ? (h = 6, 3) : (h = 7, 4)); + } + function V(e, t, r) { + var n, + i, + s = -1, + a = t[1], + o = 0, + h = 7, + u = 4; + for (0 === a && (h = 138, u = 3), n = 0; n <= r; n++) if (i = a, a = t[2 * (n + 1) + 1], !(++o < h && i === a)) { + if (o < u) for (; L(e, i, e.bl_tree), 0 != --o;);else 0 !== i ? (i !== s && (L(e, i, e.bl_tree), o--), L(e, b, e.bl_tree), P(e, o - 3, 2)) : o <= 10 ? (L(e, v, e.bl_tree), P(e, o - 3, 3)) : (L(e, y, e.bl_tree), P(e, o - 11, 7)); + s = i, u = (o = 0) === a ? (h = 138, 3) : i === a ? (h = 6, 3) : (h = 7, 4); + } + } + n(T); + var q = !1; + function J(e, t, r, n) { + P(e, (s << 1) + (n ? 1 : 0), 3), function (e, t, r, n) { + M(e), n && (U(e, r), U(e, ~r)), i.arraySet(e.pending_buf, e.window, t, r, e.pending), e.pending += r; + }(e, t, r, !0); + } + r._tr_init = function (e) { + q || (function () { + var e, + t, + r, + n, + i, + s = new Array(g + 1); + for (n = r = 0; n < a - 1; n++) for (I[n] = r, e = 0; e < 1 << w[n]; e++) A[r++] = n; + for (A[r - 1] = n, n = i = 0; n < 16; n++) for (T[n] = i, e = 0; e < 1 << k[n]; e++) E[i++] = n; + for (i >>= 7; n < f; n++) for (T[n] = i << 7, e = 0; e < 1 << k[n] - 7; e++) E[256 + i++] = n; + for (t = 0; t <= g; t++) s[t] = 0; + for (e = 0; e <= 143;) z[2 * e + 1] = 8, e++, s[8]++; + for (; e <= 255;) z[2 * e + 1] = 9, e++, s[9]++; + for (; e <= 279;) z[2 * e + 1] = 7, e++, s[7]++; + for (; e <= 287;) z[2 * e + 1] = 8, e++, s[8]++; + for (Z(z, l + 1, s), e = 0; e < f; e++) C[2 * e + 1] = 5, C[2 * e] = j(e, 5); + O = new D(z, w, u + 1, l, g), B = new D(C, k, 0, f, g), R = new D(new Array(0), x, 0, c, p); + }(), q = !0), e.l_desc = new F(e.dyn_ltree, O), e.d_desc = new F(e.dyn_dtree, B), e.bl_desc = new F(e.bl_tree, R), e.bi_buf = 0, e.bi_valid = 0, W(e); + }, r._tr_stored_block = J, r._tr_flush_block = function (e, t, r, n) { + var i, + s, + a = 0; + 0 < e.level ? (2 === e.strm.data_type && (e.strm.data_type = function (e) { + var t, + r = 4093624447; + for (t = 0; t <= 31; t++, r >>>= 1) if (1 & r && 0 !== e.dyn_ltree[2 * t]) return o; + if (0 !== e.dyn_ltree[18] || 0 !== e.dyn_ltree[20] || 0 !== e.dyn_ltree[26]) return h; + for (t = 32; t < u; t++) if (0 !== e.dyn_ltree[2 * t]) return h; + return o; + }(e)), Y(e, e.l_desc), Y(e, e.d_desc), a = function (e) { + var t; + for (X(e, e.dyn_ltree, e.l_desc.max_code), X(e, e.dyn_dtree, e.d_desc.max_code), Y(e, e.bl_desc), t = c - 1; 3 <= t && 0 === e.bl_tree[2 * S[t] + 1]; t--); + return e.opt_len += 3 * (t + 1) + 5 + 5 + 4, t; + }(e), i = e.opt_len + 3 + 7 >>> 3, (s = e.static_len + 3 + 7 >>> 3) <= i && (i = s)) : i = s = r + 5, r + 4 <= i && -1 !== t ? J(e, t, r, n) : 4 === e.strategy || s === i ? (P(e, 2 + (n ? 1 : 0), 3), K(e, z, C)) : (P(e, 4 + (n ? 1 : 0), 3), function (e, t, r, n) { + var i; + for (P(e, t - 257, 5), P(e, r - 1, 5), P(e, n - 4, 4), i = 0; i < n; i++) P(e, e.bl_tree[2 * S[i] + 1], 3); + V(e, e.dyn_ltree, t - 1), V(e, e.dyn_dtree, r - 1); + }(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, a + 1), K(e, e.dyn_ltree, e.dyn_dtree)), W(e), n && M(e); + }, r._tr_tally = function (e, t, r) { + return e.pending_buf[e.d_buf + 2 * e.last_lit] = t >>> 8 & 255, e.pending_buf[e.d_buf + 2 * e.last_lit + 1] = 255 & t, e.pending_buf[e.l_buf + e.last_lit] = 255 & r, e.last_lit++, 0 === t ? e.dyn_ltree[2 * r]++ : (e.matches++, t--, e.dyn_ltree[2 * (A[r] + u + 1)]++, e.dyn_dtree[2 * N(t)]++), e.last_lit === e.lit_bufsize - 1; + }, r._tr_align = function (e) { + P(e, 2, 3), L(e, m, z), function (e) { + 16 === e.bi_valid ? (U(e, e.bi_buf), e.bi_buf = 0, e.bi_valid = 0) : 8 <= e.bi_valid && (e.pending_buf[e.pending++] = 255 & e.bi_buf, e.bi_buf >>= 8, e.bi_valid -= 8); + }(e); + }; + }, { + "../utils/common": 41 + }], + 53: [function (e, t, r) { + "use strict"; + + t.exports = function () { + this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0; + }; + }, {}], + 54: [function (e, t, r) { + (function (e) { + !function (r, n) { + "use strict"; + + if (!r.setImmediate) { + var i, + s, + t, + a, + o = 1, + h = {}, + u = !1, + l = r.document, + e = Object.getPrototypeOf && Object.getPrototypeOf(r); + e = e && e.setTimeout ? e : r, i = "[object process]" === {}.toString.call(r.process) ? function (e) { + process.nextTick(function () { + c(e); + }); + } : function () { + if (r.postMessage && !r.importScripts) { + var e = !0, + t = r.onmessage; + return r.onmessage = function () { + e = !1; + }, r.postMessage("", "*"), r.onmessage = t, e; + } + }() ? (a = "setImmediate$" + Math.random() + "$", r.addEventListener ? r.addEventListener("message", d, !1) : r.attachEvent("onmessage", d), function (e) { + r.postMessage(a + e, "*"); + }) : r.MessageChannel ? ((t = new MessageChannel()).port1.onmessage = function (e) { + c(e.data); + }, function (e) { + t.port2.postMessage(e); + }) : l && "onreadystatechange" in l.createElement("script") ? (s = l.documentElement, function (e) { + var t = l.createElement("script"); + t.onreadystatechange = function () { + c(e), t.onreadystatechange = null, s.removeChild(t), t = null; + }, s.appendChild(t); + }) : function (e) { + setTimeout(c, 0, e); + }, e.setImmediate = function (e) { + "function" != typeof e && (e = new Function("" + e)); + for (var t = new Array(arguments.length - 1), r = 0; r < t.length; r++) t[r] = arguments[r + 1]; + var n = { + callback: e, + args: t + }; + return h[o] = n, i(o), o++; + }, e.clearImmediate = f; + } + function f(e) { + delete h[e]; + } + function c(e) { + if (u) setTimeout(c, 0, e);else { + var t = h[e]; + if (t) { + u = !0; + try { + !function (e) { + var t = e.callback, + r = e.args; + switch (r.length) { + case 0: + t(); + break; + case 1: + t(r[0]); + break; + case 2: + t(r[0], r[1]); + break; + case 3: + t(r[0], r[1], r[2]); + break; + default: + t.apply(n, r); + } + }(t); + } finally { + f(e), u = !1; + } + } + } + } + function d(e) { + e.source === r && "string" == typeof e.data && 0 === e.data.indexOf(a) && c(+e.data.slice(a.length)); + } + }("undefined" == typeof self ? void 0 === e ? this : e : self); + }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); + }, {}] + }, {}, [10])(10); +}); + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],require("timers").setImmediate) + +},{"_process":467,"buffer":220,"timers":523}],442:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var Symbol = root.Symbol; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = value + ''; + return result == '0' && 1 / value == -INFINITY ? '-0' : result; +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag; +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ +function escapeRegExp(string) { + string = toString(string); + return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\$&') : string; +} +module.exports = escapeRegExp; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],443:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = function () { + try { + return freeProcess && freeProcess.binding('util'); + } catch (e) {} +}(); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array ? array.length : 0; + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; +} + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array ? array.length : 0; + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function (object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function (value) { + return func(value); + }; +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + map.forEach(function (value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function (arg) { + return func(transform(arg)); + }; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + set.forEach(function (value) { + result[++index] = value; + }); + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = function () { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? 'Symbol(src)_1.' + uid : ''; +}(); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); + +/** Built-in value references. */ +var Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'), + Map = getNative(root, 'Map'), + Promise = getNative(root, 'Promise'), + Set = getNative(root, 'Set'), + WeakMap = getNative(root, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash(), + 'map': new (Map || ListCache)(), + 'string': new Hash() + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + this.__data__ = new MapCache(); + while (++index < length) { + this.add(values[index]); + } +} + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + this.__data__ = new ListCache(entries); +} + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache(); +} + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + return this.__data__['delete'](key); +} + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var cache = this.__data__; + if (cache instanceof ListCache) { + var pairs = cache.__data__; + if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { + pairs.push([key, value]); + return this; + } + cache = this.__data__ = new MapCache(pairs); + } + cache.set(key, value); + return this; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + // Safari 9 makes `arguments.length` enumerable in strict mode. + var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : []; + var length = result.length, + skipIndexes = !!length; + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || isIndex(key, length)))) { + result.push(key); + } + } + return result; +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function (value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; +} + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + var index = 0, + length = path.length; + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return index && index == length ? object : undefined; +} + +/** + * The base implementation of `getTag`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + return objectToString.call(value); +} + +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || !isObject(value) && !isObjectLike(other)) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); +} + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + if (!objIsArr) { + objTag = getTag(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = getTag(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; + if (isSameTag && !objIsObj) { + stack || (stack = new Stack()); + return objIsArr || isTypedArray(object) ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + stack || (stack = new Stack()); + return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack()); + return equalObjects(object, other, equalFunc, customizer, bitmask, stack); +} + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack(); + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) : result)) { + return false; + } + } + } + return true; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; +} + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); + } + return property(value); +} + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function (object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function (object) { + var objValue = get(object, path); + return objValue === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); + }; +} + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function (object) { + return baseGet(object, path); + }; +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = value + ''; + return result == '0' && 1 / value == -INFINITY ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ +function createAggregator(setter, initializer) { + return function (collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + return func(collection, setter, baseIteratee(iteratee, 2), accumulator); + }; +} + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function (collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + while (fromRight ? index-- : ++index < length) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function (object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = bitmask & UNORDERED_COMPARE_FLAG ? new SetCache() : undefined; + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + if (customizer) { + var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function (othValue, othIndex) { + if (!seen.has(othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + return seen.add(othIndex); + } + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + case dataViewTag: + if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { + return false; + } + object = object.buffer; + other = other.buffer; + case arrayBufferTag: + if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + case errorTag: + return object.name == other.name && object.message == other.message; + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == other + ''; + case mapTag: + var convert = mapToArray; + case setTag: + var isPartial = bitmask & PARTIAL_COMPARE_FLAG; + convert || (convert = setToArray); + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= UNORDERED_COMPARE_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); + stack['delete'](object); + return result; + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + if (customizer) { + var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack) : compared)) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; +} + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys(object), + length = result.length; + while (length--) { + var key = result[length], + value = object[key]; + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11, +// for data views in Edge < 14, and promises in Node.js. +if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) { + getTag = function (value) { + var result = objectToString.call(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : undefined; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: + return dataViewTag; + case mapCtorString: + return mapTag; + case promiseCtorString: + return promiseTag; + case setCtorString: + return setTag; + case weakMapCtorString: + return weakMapTag; + } + } + return result; + }; +} + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = isKey(path, object) ? [path] : castPath(path); + var result, + index = -1, + length = path.length; + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result) { + return result; + } + var length = object ? object.length : 0; + return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null; +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && maskSrcKey in func; +} + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = typeof Ctor == 'function' && Ctor.prototype || objectProto; + return value === proto; +} + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function (object) { + if (object == null) { + return false; + } + return object[key] === srcValue && (srcValue !== undefined || key in Object(object)); + }; +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function (string) { + string = toString(string); + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function (match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : number || match); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = value + ''; + return result == '0' && 1 / value == -INFINITY ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return func + ''; + } catch (e) {} + } + return ''; +} + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] + * The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function (result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } +}); + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || resolver && typeof resolver != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function () { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache)(); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || value !== value && other !== other; +} + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag; +} + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +} +module.exports = groupBy; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],444:[function(require,module,exports){ +"use strict"; + +/** + * lodash 3.0.3 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { + return value === true || value === false || isObjectLike(value) && objectToString.call(value) == boolTag; +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} +module.exports = isBoolean; + +},{}],445:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * Lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]'; +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = function () { + try { + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}(); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function (value) { + return func(value); + }; +} + +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + map.forEach(function (value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function (arg) { + return func(transform(arg)); + }; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + set.forEach(function (value) { + result[++index] = value; + }); + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = function () { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? 'Symbol(src)_1.' + uid : ''; +}(); + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, + Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeKeys = overArg(Object.keys, Object); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'), + Map = getNative(root, 'Map'), + Promise = getNative(root, 'Promise'), + Set = getNative(root, 'Set'), + WeakMap = getNative(root, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash(), + 'map': new (Map || ListCache)(), + 'string': new Hash() + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + this.__data__ = new MapCache(); + while (++index < length) { + this.add(values[index]); + } +} + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache(); + this.size = 0; +} + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + this.size = data.size; + return result; +} + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + isBuff && (key == 'offset' || key == 'parent') || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || + // Skip index properties. + isIndex(key, length)))) { + result.push(key); + } + } + return result; +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); +} + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack()); + return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + stack || (stack = new Stack()); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack()); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined; + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + if (customizer) { + var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function (othValue, othIndex) { + if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { + return false; + } + object = object.buffer; + other = other.buffer; + case arrayBufferTag: + if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + case errorTag: + return object.name == other.name && object.message == other.message; + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == other + ''; + case mapTag: + var convert = mapToArray; + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + if (customizer) { + var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function (object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function (symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) { + getTag = function (value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: + return dataViewTag; + case mapCtorString: + return mapTag; + case promiseCtorString: + return promiseTag; + case setCtorString: + return setTag; + case weakMapCtorString: + return weakMapTag; + } + } + return result; + }; +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null; +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && maskSrcKey in func; +} + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = typeof Ctor == 'function' && Ctor.prototype || objectProto; + return value === proto; +} + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return func + ''; + } catch (e) {} + } + return ''; +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || value !== value && other !== other; +} + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function () { + return arguments; +}()) ? baseIsArguments : function (value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); +}; + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return baseIsEqual(value, other); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} +module.exports = isEqual; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],446:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * Lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + nullTag = '[object Null]', + proxyTag = '[object Proxy]', + undefinedTag = '[object Undefined]'; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var Symbol = root.Symbol, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); +} + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} +module.exports = isFunction; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],447:[function(require,module,exports){ +"use strict"; + +/** + * lodash 4.0.0 (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright 2012-2016 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ +function isNil(value) { + return value == null; +} +module.exports = isNil; + +},{}],448:[function(require,module,exports){ +"use strict"; + +/** + * lodash 3.0.1 (Custom Build) + * Build: `lodash modern modularize exports="npm" -o ./` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ + +/** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} +module.exports = isUndefined; + +},{}],449:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array ? array.length : 0; + return !!length && baseIndexOf(array, value, 0) > -1; +} + +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array ? array.length : 0; + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + while (fromRight ? index-- : ++index < length) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return baseFindIndex(array, baseIsNaN, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/** + * Checks if a cache value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + set.forEach(function (value) { + result[++index] = value; + }); + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = function () { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? 'Symbol(src)_1.' + uid : ''; +}(); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + Set = getNative(root, 'Set'), + nativeCreate = getNative(Object, 'create'); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash(), + 'map': new (Map || ListCache)(), + 'string': new Hash() + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + this.__data__ = new MapCache(); + while (++index < length) { + this.add(values[index]); + } +} + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache(); + } else { + seen = iteratee ? [] : result; + } + outer: while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + value = comparator || value !== 0 ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(Set && 1 / setToArray(new Set([, -0]))[1] == INFINITY) ? noop : function (values) { + return new Set(values); +}; + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null; +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && maskSrcKey in func; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return func + ''; + } catch (e) {} + } + return ''; +} + +/** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each + * element is kept. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ +function uniq(array) { + return array && array.length ? baseUniq(array) : []; +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || value !== value && other !== other; +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} +module.exports = uniq; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],450:[function(require,module,exports){ +'use strict'; + +var inherits = require('inherits'); +var HashBase = require('hash-base'); +var Buffer = require('safe-buffer').Buffer; +var ARRAY16 = new Array(16); +function MD5() { + HashBase.call(this, 64); + + // state + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; +} +inherits(MD5, HashBase); +MD5.prototype._update = function () { + var M = ARRAY16; + for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4); + var a = this._a; + var b = this._b; + var c = this._c; + var d = this._d; + a = fnF(a, b, c, d, M[0], 0xd76aa478, 7); + d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12); + c = fnF(c, d, a, b, M[2], 0x242070db, 17); + b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22); + a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7); + d = fnF(d, a, b, c, M[5], 0x4787c62a, 12); + c = fnF(c, d, a, b, M[6], 0xa8304613, 17); + b = fnF(b, c, d, a, M[7], 0xfd469501, 22); + a = fnF(a, b, c, d, M[8], 0x698098d8, 7); + d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12); + c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17); + b = fnF(b, c, d, a, M[11], 0x895cd7be, 22); + a = fnF(a, b, c, d, M[12], 0x6b901122, 7); + d = fnF(d, a, b, c, M[13], 0xfd987193, 12); + c = fnF(c, d, a, b, M[14], 0xa679438e, 17); + b = fnF(b, c, d, a, M[15], 0x49b40821, 22); + a = fnG(a, b, c, d, M[1], 0xf61e2562, 5); + d = fnG(d, a, b, c, M[6], 0xc040b340, 9); + c = fnG(c, d, a, b, M[11], 0x265e5a51, 14); + b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20); + a = fnG(a, b, c, d, M[5], 0xd62f105d, 5); + d = fnG(d, a, b, c, M[10], 0x02441453, 9); + c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14); + b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20); + a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5); + d = fnG(d, a, b, c, M[14], 0xc33707d6, 9); + c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14); + b = fnG(b, c, d, a, M[8], 0x455a14ed, 20); + a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5); + d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9); + c = fnG(c, d, a, b, M[7], 0x676f02d9, 14); + b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20); + a = fnH(a, b, c, d, M[5], 0xfffa3942, 4); + d = fnH(d, a, b, c, M[8], 0x8771f681, 11); + c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16); + b = fnH(b, c, d, a, M[14], 0xfde5380c, 23); + a = fnH(a, b, c, d, M[1], 0xa4beea44, 4); + d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11); + c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16); + b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23); + a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4); + d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11); + c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16); + b = fnH(b, c, d, a, M[6], 0x04881d05, 23); + a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4); + d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11); + c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16); + b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23); + a = fnI(a, b, c, d, M[0], 0xf4292244, 6); + d = fnI(d, a, b, c, M[7], 0x432aff97, 10); + c = fnI(c, d, a, b, M[14], 0xab9423a7, 15); + b = fnI(b, c, d, a, M[5], 0xfc93a039, 21); + a = fnI(a, b, c, d, M[12], 0x655b59c3, 6); + d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10); + c = fnI(c, d, a, b, M[10], 0xffeff47d, 15); + b = fnI(b, c, d, a, M[1], 0x85845dd1, 21); + a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6); + d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10); + c = fnI(c, d, a, b, M[6], 0xa3014314, 15); + b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21); + a = fnI(a, b, c, d, M[4], 0xf7537e82, 6); + d = fnI(d, a, b, c, M[11], 0xbd3af235, 10); + c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15); + b = fnI(b, c, d, a, M[9], 0xeb86d391, 21); + this._a = this._a + a | 0; + this._b = this._b + b | 0; + this._c = this._c + c | 0; + this._d = this._d + d | 0; +}; +MD5.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80; + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64); + this._update(); + this._blockOffset = 0; + } + this._block.fill(0, this._blockOffset, 56); + this._block.writeUInt32LE(this._length[0], 56); + this._block.writeUInt32LE(this._length[1], 60); + this._update(); + + // produce result + var buffer = Buffer.allocUnsafe(16); + buffer.writeInt32LE(this._a, 0); + buffer.writeInt32LE(this._b, 4); + buffer.writeInt32LE(this._c, 8); + buffer.writeInt32LE(this._d, 12); + return buffer; +}; +function rotl(x, n) { + return x << n | x >>> 32 - n; +} +function fnF(a, b, c, d, m, k, s) { + return rotl(a + (b & c | ~b & d) + m + k | 0, s) + b | 0; +} +function fnG(a, b, c, d, m, k, s) { + return rotl(a + (b & d | c & ~d) + m + k | 0, s) + b | 0; +} +function fnH(a, b, c, d, m, k, s) { + return rotl(a + (b ^ c ^ d) + m + k | 0, s) + b | 0; +} +function fnI(a, b, c, d, m, k, s) { + return rotl(a + (c ^ (b | ~d)) + m + k | 0, s) + b | 0; +} +module.exports = MD5; + +},{"hash-base":425,"inherits":440,"safe-buffer":494}],451:[function(require,module,exports){ +"use strict"; + +var bn = require('bn.js'); +var brorand = require('brorand'); +function MillerRabin(rand) { + this.rand = rand || new brorand.Rand(); +} +module.exports = MillerRabin; +MillerRabin.create = function create(rand) { + return new MillerRabin(rand); +}; +MillerRabin.prototype._randbelow = function _randbelow(n) { + var len = n.bitLength(); + var min_bytes = Math.ceil(len / 8); + + // Generage random bytes until a number less than n is found. + // This ensures that 0..n-1 have an equal probability of being selected. + do var a = new bn(this.rand.generate(min_bytes)); while (a.cmp(n) >= 0); + return a; +}; +MillerRabin.prototype._randrange = function _randrange(start, stop) { + // Generate a random number greater than or equal to start and less than stop. + var size = stop.sub(start); + return start.add(this._randbelow(size)); +}; +MillerRabin.prototype.test = function test(n, k, cb) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + if (!k) k = Math.max(1, len / 48 | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + var rn1 = n1.toRed(red); + var prime = true; + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + if (cb) cb(a); + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue; + for (var i = 1; i < s; i++) { + x = x.redSqr(); + if (x.cmp(rone) === 0) return false; + if (x.cmp(rn1) === 0) break; + } + if (i === s) return false; + } + return prime; +}; +MillerRabin.prototype.getDivisor = function getDivisor(n, k) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + if (!k) k = Math.max(1, len / 48 | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + var rn1 = n1.toRed(red); + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + var g = n.gcd(a); + if (g.cmpn(1) !== 0) return g; + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue; + for (var i = 1; i < s; i++) { + x = x.redSqr(); + if (x.cmp(rone) === 0) return x.fromRed().subn(1).gcd(n); + if (x.cmp(rn1) === 0) break; + } + if (i === s) { + x = x.redSqr(); + return x.fromRed().subn(1).gcd(n); + } + } + return false; +}; + +},{"bn.js":452,"brorand":187}],452:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],453:[function(require,module,exports){ +"use strict"; + +module.exports = assert; +function assert(val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); +} +assert.equal = function assertEqual(l, r, msg) { + if (l != r) throw new Error(msg || 'Assertion failed: ' + l + ' != ' + r); +}; + +},{}],454:[function(require,module,exports){ +'use strict'; + +var utils = exports; +function toArray(msg, enc) { + if (Array.isArray(msg)) return msg.slice(); + if (!msg) return []; + var res = []; + if (typeof msg !== 'string') { + for (var i = 0; i < msg.length; i++) res[i] = msg[i] | 0; + return res; + } + if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) msg = '0' + msg; + for (var i = 0; i < msg.length; i += 2) res.push(parseInt(msg[i] + msg[i + 1], 16)); + } else { + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + var hi = c >> 8; + var lo = c & 0xff; + if (hi) res.push(hi, lo);else res.push(lo); + } + } + return res; +} +utils.toArray = toArray; +function zero2(word) { + if (word.length === 1) return '0' + word;else return word; +} +utils.zero2 = zero2; +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) res += zero2(msg[i].toString(16)); + return res; +} +utils.toHex = toHex; +utils.encode = function encode(arr, enc) { + if (enc === 'hex') return toHex(arr);else return arr; +}; + +},{}],455:[function(require,module,exports){ +module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", +"2.16.840.1.101.3.4.1.2": "aes-128-cbc", +"2.16.840.1.101.3.4.1.3": "aes-128-ofb", +"2.16.840.1.101.3.4.1.4": "aes-128-cfb", +"2.16.840.1.101.3.4.1.21": "aes-192-ecb", +"2.16.840.1.101.3.4.1.22": "aes-192-cbc", +"2.16.840.1.101.3.4.1.23": "aes-192-ofb", +"2.16.840.1.101.3.4.1.24": "aes-192-cfb", +"2.16.840.1.101.3.4.1.41": "aes-256-ecb", +"2.16.840.1.101.3.4.1.42": "aes-256-cbc", +"2.16.840.1.101.3.4.1.43": "aes-256-ofb", +"2.16.840.1.101.3.4.1.44": "aes-256-cfb" +} +},{}],456:[function(require,module,exports){ +// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js +// Fedor, you are amazing. +'use strict'; + +var asn1 = require('asn1.js'); +exports.certificate = require('./certificate'); +var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { + this.seq().obj(this.key('version').int(), this.key('modulus').int(), this.key('publicExponent').int(), this.key('privateExponent').int(), this.key('prime1').int(), this.key('prime2').int(), this.key('exponent1').int(), this.key('exponent2').int(), this.key('coefficient').int()); +}); +exports.RSAPrivateKey = RSAPrivateKey; +var RSAPublicKey = asn1.define('RSAPublicKey', function () { + this.seq().obj(this.key('modulus').int(), this.key('publicExponent').int()); +}); +exports.RSAPublicKey = RSAPublicKey; +var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { + this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr()); +}); +exports.PublicKey = PublicKey; +var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { + this.seq().obj(this.key('algorithm').objid(), this.key('none').null_().optional(), this.key('curve').objid().optional(), this.key('params').seq().obj(this.key('p').int(), this.key('q').int(), this.key('g').int()).optional()); +}); +var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { + this.seq().obj(this.key('version').int(), this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPrivateKey').octstr()); +}); +exports.PrivateKey = PrivateKeyInfo; +var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { + this.seq().obj(this.key('algorithm').seq().obj(this.key('id').objid(), this.key('decrypt').seq().obj(this.key('kde').seq().obj(this.key('id').objid(), this.key('kdeparams').seq().obj(this.key('salt').octstr(), this.key('iters').int())), this.key('cipher').seq().obj(this.key('algo').objid(), this.key('iv').octstr()))), this.key('subjectPrivateKey').octstr()); +}); +exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo; +var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { + this.seq().obj(this.key('version').int(), this.key('p').int(), this.key('q').int(), this.key('g').int(), this.key('pub_key').int(), this.key('priv_key').int()); +}); +exports.DSAPrivateKey = DSAPrivateKey; +exports.DSAparam = asn1.define('DSAparam', function () { + this.int(); +}); +var ECPrivateKey = asn1.define('ECPrivateKey', function () { + this.seq().obj(this.key('version').int(), this.key('privateKey').octstr(), this.key('parameters').optional().explicit(0).use(ECParameters), this.key('publicKey').optional().explicit(1).bitstr()); +}); +exports.ECPrivateKey = ECPrivateKey; +var ECParameters = asn1.define('ECParameters', function () { + this.choice({ + namedCurve: this.objid() + }); +}); +exports.signature = asn1.define('signature', function () { + this.seq().obj(this.key('r').int(), this.key('s').int()); +}); + +},{"./certificate":457,"asn1.js":170}],457:[function(require,module,exports){ +// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js +// thanks to @Rantanen + +'use strict'; + +var asn = require('asn1.js'); +var Time = asn.define('Time', function () { + this.choice({ + utcTime: this.utctime(), + generalTime: this.gentime() + }); +}); +var AttributeTypeValue = asn.define('AttributeTypeValue', function () { + this.seq().obj(this.key('type').objid(), this.key('value').any()); +}); +var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { + this.seq().obj(this.key('algorithm').objid(), this.key('parameters').optional(), this.key('curve').objid().optional()); +}); +var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { + this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr()); +}); +var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { + this.setof(AttributeTypeValue); +}); +var RDNSequence = asn.define('RDNSequence', function () { + this.seqof(RelativeDistinguishedName); +}); +var Name = asn.define('Name', function () { + this.choice({ + rdnSequence: this.use(RDNSequence) + }); +}); +var Validity = asn.define('Validity', function () { + this.seq().obj(this.key('notBefore').use(Time), this.key('notAfter').use(Time)); +}); +var Extension = asn.define('Extension', function () { + this.seq().obj(this.key('extnID').objid(), this.key('critical').bool().def(false), this.key('extnValue').octstr()); +}); +var TBSCertificate = asn.define('TBSCertificate', function () { + this.seq().obj(this.key('version').explicit(0).int().optional(), this.key('serialNumber').int(), this.key('signature').use(AlgorithmIdentifier), this.key('issuer').use(Name), this.key('validity').use(Validity), this.key('subject').use(Name), this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), this.key('issuerUniqueID').implicit(1).bitstr().optional(), this.key('subjectUniqueID').implicit(2).bitstr().optional(), this.key('extensions').explicit(3).seqof(Extension).optional()); +}); +var X509Certificate = asn.define('X509Certificate', function () { + this.seq().obj(this.key('tbsCertificate').use(TBSCertificate), this.key('signatureAlgorithm').use(AlgorithmIdentifier), this.key('signatureValue').bitstr()); +}); +module.exports = X509Certificate; + +},{"asn1.js":170}],458:[function(require,module,exports){ +"use strict"; + +// adapted from https://github.com/apatil/pemstrip +var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m; +var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m; +var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m; +var evp = require('evp_bytestokey'); +var ciphers = require('browserify-aes'); +var Buffer = require('safe-buffer').Buffer; +module.exports = function (okey, password) { + var key = okey.toString(); + var match = key.match(findProc); + var decrypted; + if (!match) { + var match2 = key.match(fullRegex); + decrypted = Buffer.from(match2[2].replace(/[\r\n]/g, ''), 'base64'); + } else { + var suite = 'aes' + match[1]; + var iv = Buffer.from(match[2], 'hex'); + var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64'); + var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key; + var out = []; + var cipher = ciphers.createDecipheriv(suite, cipherKey, iv); + out.push(cipher.update(cipherText)); + out.push(cipher.final()); + decrypted = Buffer.concat(out); + } + var tag = key.match(startRegex)[1]; + return { + tag: tag, + data: decrypted + }; +}; + +},{"browserify-aes":191,"evp_bytestokey":423,"safe-buffer":494}],459:[function(require,module,exports){ +"use strict"; + +var asn1 = require('./asn1'); +var aesid = require('./aesid.json'); +var fixProc = require('./fixProc'); +var ciphers = require('browserify-aes'); +var compat = require('pbkdf2'); +var Buffer = require('safe-buffer').Buffer; +module.exports = parseKeys; +function parseKeys(buffer) { + var password; + if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { + password = buffer.passphrase; + buffer = buffer.key; + } + if (typeof buffer === 'string') { + buffer = Buffer.from(buffer); + } + var stripped = fixProc(buffer, password); + var type = stripped.tag; + var data = stripped.data; + var subtype, ndata; + switch (type) { + case 'CERTIFICATE': + ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo; + // falls through + case 'PUBLIC KEY': + if (!ndata) { + ndata = asn1.PublicKey.decode(data, 'der'); + } + subtype = ndata.algorithm.algorithm.join('.'); + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der'); + case '1.2.840.10045.2.1': + ndata.subjectPrivateKey = ndata.subjectPublicKey; + return { + type: 'ec', + data: ndata + }; + case '1.2.840.10040.4.1': + ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der'); + return { + type: 'dsa', + data: ndata.algorithm.params + }; + default: + throw new Error('unknown key id ' + subtype); + } + // throw new Error('unknown key type ' + type) + case 'ENCRYPTED PRIVATE KEY': + data = asn1.EncryptedPrivateKey.decode(data, 'der'); + data = decrypt(data, password); + // falls through + case 'PRIVATE KEY': + ndata = asn1.PrivateKey.decode(data, 'der'); + subtype = ndata.algorithm.algorithm.join('.'); + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der'); + case '1.2.840.10045.2.1': + return { + curve: ndata.algorithm.curve, + privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey + }; + case '1.2.840.10040.4.1': + ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der'); + return { + type: 'dsa', + params: ndata.algorithm.params + }; + default: + throw new Error('unknown key id ' + subtype); + } + // throw new Error('unknown key type ' + type) + case 'RSA PUBLIC KEY': + return asn1.RSAPublicKey.decode(data, 'der'); + case 'RSA PRIVATE KEY': + return asn1.RSAPrivateKey.decode(data, 'der'); + case 'DSA PRIVATE KEY': + return { + type: 'dsa', + params: asn1.DSAPrivateKey.decode(data, 'der') + }; + case 'EC PRIVATE KEY': + data = asn1.ECPrivateKey.decode(data, 'der'); + return { + curve: data.parameters.value, + privateKey: data.privateKey + }; + default: + throw new Error('unknown key type ' + type); + } +} +parseKeys.signature = asn1.signature; +function decrypt(data, password) { + var salt = data.algorithm.decrypt.kde.kdeparams.salt; + var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10); + var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]; + var iv = data.algorithm.decrypt.cipher.iv; + var cipherText = data.subjectPrivateKey; + var keylen = parseInt(algo.split('-')[1], 10) / 8; + var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1'); + var cipher = ciphers.createDecipheriv(algo, key, iv); + var out = []; + out.push(cipher.update(cipherText)); + out.push(cipher.final()); + return Buffer.concat(out); +} + +},{"./aesid.json":455,"./asn1":456,"./fixProc":458,"browserify-aes":191,"pbkdf2":460,"safe-buffer":494}],460:[function(require,module,exports){ +"use strict"; + +exports.pbkdf2 = require('./lib/async'); +exports.pbkdf2Sync = require('./lib/sync'); + +},{"./lib/async":461,"./lib/sync":464}],461:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +var checkParameters = require('./precondition'); +var defaultEncoding = require('./default-encoding'); +var sync = require('./sync'); +var toBuffer = require('./to-buffer'); +var ZERO_BUF; +var subtle = global.crypto && global.crypto.subtle; +var toBrowser = { + sha: 'SHA-1', + 'sha-1': 'SHA-1', + sha1: 'SHA-1', + sha256: 'SHA-256', + 'sha-256': 'SHA-256', + sha384: 'SHA-384', + 'sha-384': 'SHA-384', + 'sha-512': 'SHA-512', + sha512: 'SHA-512' +}; +var checks = []; +function checkNative(algo) { + if (global.process && !global.process.browser) { + return Promise.resolve(false); + } + if (!subtle || !subtle.importKey || !subtle.deriveBits) { + return Promise.resolve(false); + } + if (checks[algo] !== undefined) { + return checks[algo]; + } + ZERO_BUF = ZERO_BUF || Buffer.alloc(8); + var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo).then(function () { + return true; + }).catch(function () { + return false; + }); + checks[algo] = prom; + return prom; +} +var nextTick; +function getNextTick() { + if (nextTick) { + return nextTick; + } + if (global.process && global.process.nextTick) { + nextTick = global.process.nextTick; + } else if (global.queueMicrotask) { + nextTick = global.queueMicrotask; + } else if (global.setImmediate) { + nextTick = global.setImmediate; + } else { + nextTick = global.setTimeout; + } + return nextTick; +} +function browserPbkdf2(password, salt, iterations, length, algo) { + return subtle.importKey('raw', password, { + name: 'PBKDF2' + }, false, ['deriveBits']).then(function (key) { + return subtle.deriveBits({ + name: 'PBKDF2', + salt: salt, + iterations: iterations, + hash: { + name: algo + } + }, key, length << 3); + }).then(function (res) { + return Buffer.from(res); + }); +} +function resolvePromise(promise, callback) { + promise.then(function (out) { + getNextTick()(function () { + callback(null, out); + }); + }, function (e) { + getNextTick()(function () { + callback(e); + }); + }); +} +module.exports = function (password, salt, iterations, keylen, digest, callback) { + if (typeof digest === 'function') { + callback = digest; + digest = undefined; + } + digest = digest || 'sha1'; + var algo = toBrowser[digest.toLowerCase()]; + if (!algo || typeof global.Promise !== 'function') { + getNextTick()(function () { + var out; + try { + out = sync(password, salt, iterations, keylen, digest); + } catch (e) { + return callback(e); + } + callback(null, out); + }); + return; + } + checkParameters(iterations, keylen); + password = toBuffer(password, defaultEncoding, 'Password'); + salt = toBuffer(salt, defaultEncoding, 'Salt'); + if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2'); + resolvePromise(checkNative(algo).then(function (resp) { + if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo); + return sync(password, salt, iterations, keylen, digest); + }), callback); +}; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./default-encoding":462,"./precondition":463,"./sync":464,"./to-buffer":465,"safe-buffer":494}],462:[function(require,module,exports){ +(function (process,global){(function (){ +"use strict"; + +var defaultEncoding; +/* istanbul ignore next */ +if (global.process && global.process.browser) { + defaultEncoding = 'utf-8'; +} else if (global.process && global.process.version) { + var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10); + defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'; +} else { + defaultEncoding = 'utf-8'; +} +module.exports = defaultEncoding; + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"_process":467}],463:[function(require,module,exports){ +"use strict"; + +var MAX_ALLOC = Math.pow(2, 30) - 1; // default in iojs + +module.exports = function (iterations, keylen) { + if (typeof iterations !== 'number') { + throw new TypeError('Iterations not a number'); + } + if (iterations < 0) { + throw new TypeError('Bad iterations'); + } + if (typeof keylen !== 'number') { + throw new TypeError('Key length not a number'); + } + if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { + /* eslint no-self-compare: 0 */ + throw new TypeError('Bad key length'); + } +}; + +},{}],464:[function(require,module,exports){ +"use strict"; + +var md5 = require('create-hash/md5'); +var RIPEMD160 = require('ripemd160'); +var sha = require('sha.js'); +var Buffer = require('safe-buffer').Buffer; +var checkParameters = require('./precondition'); +var defaultEncoding = require('./default-encoding'); +var toBuffer = require('./to-buffer'); +var ZEROS = Buffer.alloc(128); +var sizes = { + md5: 16, + sha1: 20, + sha224: 28, + sha256: 32, + sha384: 48, + sha512: 64, + rmd160: 20, + ripemd160: 20 +}; +function Hmac(alg, key, saltLen) { + var hash = getDigest(alg); + var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64; + if (key.length > blocksize) { + key = hash(key); + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize); + } + var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]); + var opad = Buffer.allocUnsafe(blocksize + sizes[alg]); + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36; + opad[i] = key[i] ^ 0x5C; + } + var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4); + ipad.copy(ipad1, 0, 0, blocksize); + this.ipad1 = ipad1; + this.ipad2 = ipad; + this.opad = opad; + this.alg = alg; + this.blocksize = blocksize; + this.hash = hash; + this.size = sizes[alg]; +} +Hmac.prototype.run = function (data, ipad) { + data.copy(ipad, this.blocksize); + var h = this.hash(ipad); + h.copy(this.opad, this.blocksize); + return this.hash(this.opad); +}; +function getDigest(alg) { + function shaFunc(data) { + return sha(alg).update(data).digest(); + } + function rmd160Func(data) { + return new RIPEMD160().update(data).digest(); + } + if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func; + if (alg === 'md5') return md5; + return shaFunc; +} +function pbkdf2(password, salt, iterations, keylen, digest) { + checkParameters(iterations, keylen); + password = toBuffer(password, defaultEncoding, 'Password'); + salt = toBuffer(salt, defaultEncoding, 'Salt'); + digest = digest || 'sha1'; + var hmac = new Hmac(digest, password, salt.length); + var DK = Buffer.allocUnsafe(keylen); + var block1 = Buffer.allocUnsafe(salt.length + 4); + salt.copy(block1, 0, 0, salt.length); + var destPos = 0; + var hLen = sizes[digest]; + var l = Math.ceil(keylen / hLen); + for (var i = 1; i <= l; i++) { + block1.writeUInt32BE(i, salt.length); + var T = hmac.run(block1, hmac.ipad1); + var U = T; + for (var j = 1; j < iterations; j++) { + U = hmac.run(U, hmac.ipad2); + for (var k = 0; k < hLen; k++) T[k] ^= U[k]; + } + T.copy(DK, destPos); + destPos += hLen; + } + return DK; +} +module.exports = pbkdf2; + +},{"./default-encoding":462,"./precondition":463,"./to-buffer":465,"create-hash/md5":387,"ripemd160":493,"safe-buffer":494,"sha.js":498}],465:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; +module.exports = function (thing, encoding, name) { + if (Buffer.isBuffer(thing)) { + return thing; + } else if (typeof thing === 'string') { + return Buffer.from(thing, encoding); + } else if (ArrayBuffer.isView(thing)) { + return Buffer.from(thing.buffer); + } else { + throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView'); + } +}; + +},{"safe-buffer":494}],466:[function(require,module,exports){ +(function (process){(function (){ +'use strict'; + +if (typeof process === 'undefined' || !process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { + module.exports = { + nextTick: nextTick + }; +} else { + module.exports = process; +} +function nextTick(fn, arg1, arg2, arg3) { + if (typeof fn !== 'function') { + throw new TypeError('"callback" argument must be a function'); + } + var len = arguments.length; + var args, i; + switch (len) { + case 0: + case 1: + return process.nextTick(fn); + case 2: + return process.nextTick(function afterTickOne() { + fn.call(null, arg1); + }); + case 3: + return process.nextTick(function afterTickTwo() { + fn.call(null, arg1, arg2); + }); + case 4: + return process.nextTick(function afterTickThree() { + fn.call(null, arg1, arg2, arg3); + }); + default: + args = new Array(len - 1); + i = 0; + while (i < args.length) { + args[i++] = arguments[i]; + } + return process.nextTick(function afterTick() { + fn.apply(null, args); + }); + } +} + +}).call(this)}).call(this,require('_process')) + +},{"_process":467}],467:[function(require,module,exports){ +"use strict"; + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +})(); +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue.length; + while (len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; +function noop() {} +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; +process.listeners = function (name) { + return []; +}; +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; +process.cwd = function () { + return '/'; +}; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function () { + return 0; +}; + +},{}],468:[function(require,module,exports){ +"use strict"; + +exports.publicEncrypt = require('./publicEncrypt'); +exports.privateDecrypt = require('./privateDecrypt'); +exports.privateEncrypt = function privateEncrypt(key, buf) { + return exports.publicEncrypt(key, buf, true); +}; +exports.publicDecrypt = function publicDecrypt(key, buf) { + return exports.privateDecrypt(key, buf, true); +}; + +},{"./privateDecrypt":471,"./publicEncrypt":472}],469:[function(require,module,exports){ +"use strict"; + +var createHash = require('create-hash'); +var Buffer = require('safe-buffer').Buffer; +module.exports = function (seed, len) { + var t = Buffer.alloc(0); + var i = 0; + var c; + while (t.length < len) { + c = i2ops(i++); + t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]); + } + return t.slice(0, len); +}; +function i2ops(c) { + var out = Buffer.allocUnsafe(4); + out.writeUInt32BE(c, 0); + return out; +} + +},{"create-hash":386,"safe-buffer":494}],470:[function(require,module,exports){ +arguments[4][184][0].apply(exports,arguments) +},{"buffer":188,"dup":184}],471:[function(require,module,exports){ +"use strict"; + +var parseKeys = require('parse-asn1'); +var mgf = require('./mgf'); +var xor = require('./xor'); +var BN = require('bn.js'); +var crt = require('browserify-rsa'); +var createHash = require('create-hash'); +var withPublic = require('./withPublic'); +var Buffer = require('safe-buffer').Buffer; +module.exports = function privateDecrypt(privateKey, enc, reverse) { + var padding; + if (privateKey.padding) { + padding = privateKey.padding; + } else if (reverse) { + padding = 1; + } else { + padding = 4; + } + var key = parseKeys(privateKey); + var k = key.modulus.byteLength(); + if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { + throw new Error('decryption error'); + } + var msg; + if (reverse) { + msg = withPublic(new BN(enc), key); + } else { + msg = crt(enc, key); + } + var zBuffer = Buffer.alloc(k - msg.length); + msg = Buffer.concat([zBuffer, msg], k); + if (padding === 4) { + return oaep(key, msg); + } else if (padding === 1) { + return pkcs1(key, msg, reverse); + } else if (padding === 3) { + return msg; + } else { + throw new Error('unknown padding'); + } +}; +function oaep(key, msg) { + var k = key.modulus.byteLength(); + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest(); + var hLen = iHash.length; + if (msg[0] !== 0) { + throw new Error('decryption error'); + } + var maskedSeed = msg.slice(1, hLen + 1); + var maskedDb = msg.slice(hLen + 1); + var seed = xor(maskedSeed, mgf(maskedDb, hLen)); + var db = xor(maskedDb, mgf(seed, k - hLen - 1)); + if (compare(iHash, db.slice(0, hLen))) { + throw new Error('decryption error'); + } + var i = hLen; + while (db[i] === 0) { + i++; + } + if (db[i++] !== 1) { + throw new Error('decryption error'); + } + return db.slice(i); +} +function pkcs1(key, msg, reverse) { + var p1 = msg.slice(0, 2); + var i = 2; + var status = 0; + while (msg[i++] !== 0) { + if (i >= msg.length) { + status++; + break; + } + } + var ps = msg.slice(2, i - 1); + if (p1.toString('hex') !== '0002' && !reverse || p1.toString('hex') !== '0001' && reverse) { + status++; + } + if (ps.length < 8) { + status++; + } + if (status) { + throw new Error('decryption error'); + } + return msg.slice(i); +} +function compare(a, b) { + a = Buffer.from(a); + b = Buffer.from(b); + var dif = 0; + var len = a.length; + if (a.length !== b.length) { + dif++; + len = Math.min(a.length, b.length); + } + var i = -1; + while (++i < len) { + dif += a[i] ^ b[i]; + } + return dif; +} + +},{"./mgf":469,"./withPublic":473,"./xor":474,"bn.js":470,"browserify-rsa":209,"create-hash":386,"parse-asn1":459,"safe-buffer":494}],472:[function(require,module,exports){ +"use strict"; + +var parseKeys = require('parse-asn1'); +var randomBytes = require('randombytes'); +var createHash = require('create-hash'); +var mgf = require('./mgf'); +var xor = require('./xor'); +var BN = require('bn.js'); +var withPublic = require('./withPublic'); +var crt = require('browserify-rsa'); +var Buffer = require('safe-buffer').Buffer; +module.exports = function publicEncrypt(publicKey, msg, reverse) { + var padding; + if (publicKey.padding) { + padding = publicKey.padding; + } else if (reverse) { + padding = 1; + } else { + padding = 4; + } + var key = parseKeys(publicKey); + var paddedMsg; + if (padding === 4) { + paddedMsg = oaep(key, msg); + } else if (padding === 1) { + paddedMsg = pkcs1(key, msg, reverse); + } else if (padding === 3) { + paddedMsg = new BN(msg); + if (paddedMsg.cmp(key.modulus) >= 0) { + throw new Error('data too long for modulus'); + } + } else { + throw new Error('unknown padding'); + } + if (reverse) { + return crt(paddedMsg, key); + } else { + return withPublic(paddedMsg, key); + } +}; +function oaep(key, msg) { + var k = key.modulus.byteLength(); + var mLen = msg.length; + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest(); + var hLen = iHash.length; + var hLen2 = 2 * hLen; + if (mLen > k - hLen2 - 2) { + throw new Error('message too long'); + } + var ps = Buffer.alloc(k - mLen - hLen2 - 2); + var dblen = k - hLen - 1; + var seed = randomBytes(hLen); + var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)); + var maskedSeed = xor(seed, mgf(maskedDb, hLen)); + return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)); +} +function pkcs1(key, msg, reverse) { + var mLen = msg.length; + var k = key.modulus.byteLength(); + if (mLen > k - 11) { + throw new Error('message too long'); + } + var ps; + if (reverse) { + ps = Buffer.alloc(k - mLen - 3, 0xff); + } else { + ps = nonZero(k - mLen - 3); + } + return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)); +} +function nonZero(len) { + var out = Buffer.allocUnsafe(len); + var i = 0; + var cache = randomBytes(len * 2); + var cur = 0; + var num; + while (i < len) { + if (cur === cache.length) { + cache = randomBytes(len * 2); + cur = 0; + } + num = cache[cur++]; + if (num) { + out[i++] = num; + } + } + return out; +} + +},{"./mgf":469,"./withPublic":473,"./xor":474,"bn.js":470,"browserify-rsa":209,"create-hash":386,"parse-asn1":459,"randombytes":475,"safe-buffer":494}],473:[function(require,module,exports){ +"use strict"; + +var BN = require('bn.js'); +var Buffer = require('safe-buffer').Buffer; +function withPublic(paddedMsg, key) { + return Buffer.from(paddedMsg.toRed(BN.mont(key.modulus)).redPow(new BN(key.publicExponent)).fromRed().toArray()); +} +module.exports = withPublic; + +},{"bn.js":470,"safe-buffer":494}],474:[function(require,module,exports){ +"use strict"; + +module.exports = function xor(a, b) { + var len = a.length; + var i = -1; + while (++i < len) { + a[i] ^= b[i]; + } + return a; +}; + +},{}],475:[function(require,module,exports){ +(function (process,global){(function (){ +'use strict'; + +// limit of Crypto.getRandomValues() +// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues +var MAX_BYTES = 65536; + +// Node supports requesting up to this number of bytes +// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 +var MAX_UINT32 = 4294967295; +function oldBrowser() { + throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11'); +} +var Buffer = require('safe-buffer').Buffer; +var crypto = global.crypto || global.msCrypto; +if (crypto && crypto.getRandomValues) { + module.exports = randomBytes; +} else { + module.exports = oldBrowser; +} +function randomBytes(size, cb) { + // phantomjs needs to throw + if (size > MAX_UINT32) throw new RangeError('requested too many random bytes'); + var bytes = Buffer.allocUnsafe(size); + if (size > 0) { + // getRandomValues fails on IE if size == 0 + if (size > MAX_BYTES) { + // this is the max bytes crypto.getRandomValues + // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + for (var generated = 0; generated < size; generated += MAX_BYTES) { + // buffer.slice automatically checks if the end is past the end of + // the buffer so we don't have to here + crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)); + } + } else { + crypto.getRandomValues(bytes); + } + } + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes); + }); + } + return bytes; +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"_process":467,"safe-buffer":494}],476:[function(require,module,exports){ +(function (process,global){(function (){ +'use strict'; + +function oldBrowser() { + throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11'); +} +var safeBuffer = require('safe-buffer'); +var randombytes = require('randombytes'); +var Buffer = safeBuffer.Buffer; +var kBufferMaxLength = safeBuffer.kMaxLength; +var crypto = global.crypto || global.msCrypto; +var kMaxUint32 = Math.pow(2, 32) - 1; +function assertOffset(offset, length) { + if (typeof offset !== 'number' || offset !== offset) { + // eslint-disable-line no-self-compare + throw new TypeError('offset must be a number'); + } + if (offset > kMaxUint32 || offset < 0) { + throw new TypeError('offset must be a uint32'); + } + if (offset > kBufferMaxLength || offset > length) { + throw new RangeError('offset out of range'); + } +} +function assertSize(size, offset, length) { + if (typeof size !== 'number' || size !== size) { + // eslint-disable-line no-self-compare + throw new TypeError('size must be a number'); + } + if (size > kMaxUint32 || size < 0) { + throw new TypeError('size must be a uint32'); + } + if (size + offset > length || size > kBufferMaxLength) { + throw new RangeError('buffer too small'); + } +} +if (crypto && crypto.getRandomValues || !process.browser) { + exports.randomFill = randomFill; + exports.randomFillSync = randomFillSync; +} else { + exports.randomFill = oldBrowser; + exports.randomFillSync = oldBrowser; +} +function randomFill(buf, offset, size, cb) { + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); + } + if (typeof offset === 'function') { + cb = offset; + offset = 0; + size = buf.length; + } else if (typeof size === 'function') { + cb = size; + size = buf.length - offset; + } else if (typeof cb !== 'function') { + throw new TypeError('"cb" argument must be a function'); + } + assertOffset(offset, buf.length); + assertSize(size, offset, buf.length); + return actualFill(buf, offset, size, cb); +} +function actualFill(buf, offset, size, cb) { + if (process.browser) { + var ourBuf = buf.buffer; + var uint = new Uint8Array(ourBuf, offset, size); + crypto.getRandomValues(uint); + if (cb) { + process.nextTick(function () { + cb(null, buf); + }); + return; + } + return buf; + } + if (cb) { + randombytes(size, function (err, bytes) { + if (err) { + return cb(err); + } + bytes.copy(buf, offset); + cb(null, buf); + }); + return; + } + var bytes = randombytes(size); + bytes.copy(buf, offset); + return buf; +} +function randomFillSync(buf, offset, size) { + if (typeof offset === 'undefined') { + offset = 0; + } + if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array'); + } + assertOffset(offset, buf.length); + if (size === undefined) size = buf.length - offset; + assertSize(size, offset, buf.length); + return actualFill(buf, offset, size); +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"_process":467,"randombytes":475,"safe-buffer":494}],477:[function(require,module,exports){ +'use strict'; + +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; +} +var codes = {}; +function createErrorType(code, message, Base) { + if (!Base) { + Base = Error; + } + function getMessage(arg1, arg2, arg3) { + if (typeof message === 'string') { + return message; + } else { + return message(arg1, arg2, arg3); + } + } + var NodeError = /*#__PURE__*/ + function (_Base) { + _inheritsLoose(NodeError, _Base); + function NodeError(arg1, arg2, arg3) { + return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; + } + return NodeError; + }(Base); + NodeError.prototype.name = Base.name; + NodeError.prototype.code = code; + codes[code] = NodeError; +} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js + +function oneOf(expected, thing) { + if (Array.isArray(expected)) { + var len = expected.length; + expected = expected.map(function (i) { + return String(i); + }); + if (len > 2) { + return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; + } else if (len === 2) { + return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); + } else { + return "of ".concat(thing, " ").concat(expected[0]); + } + } else { + return "of ".concat(thing, " ").concat(String(expected)); + } +} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith + +function startsWith(str, search, pos) { + return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; +} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith + +function endsWith(str, search, this_len) { + if (this_len === undefined || this_len > str.length) { + this_len = str.length; + } + return str.substring(this_len - search.length, this_len) === search; +} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes + +function includes(str, search, start) { + if (typeof start !== 'number') { + start = 0; + } + if (start + search.length > str.length) { + return false; + } else { + return str.indexOf(search, start) !== -1; + } +} +createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { + return 'The value "' + value + '" is invalid for option "' + name + '"'; +}, TypeError); +createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { + // determiner: 'must be' or 'must not be' + var determiner; + if (typeof expected === 'string' && startsWith(expected, 'not ')) { + determiner = 'must not be'; + expected = expected.replace(/^not /, ''); + } else { + determiner = 'must be'; + } + var msg; + if (endsWith(name, ' argument')) { + // For cases like 'first argument' + msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } else { + var type = includes(name, '.') ? 'property' : 'argument'; + msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } + msg += ". Received type ".concat(typeof actual); + return msg; +}, TypeError); +createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); +createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { + return 'The ' + name + ' method is not implemented'; +}); +createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); +createErrorType('ERR_STREAM_DESTROYED', function (name) { + return 'Cannot call ' + name + ' after a stream was destroyed'; +}); +createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); +createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); +createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); +createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); +createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { + return 'Unknown encoding: ' + arg; +}, TypeError); +createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); +module.exports.codes = codes; + +},{}],478:[function(require,module,exports){ +(function (process){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; +}; +/**/ + +module.exports = Duplex; +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); +require('inherits')(Duplex, Readable); +{ + // Allow the keys array to be GC'ed. + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + this.allowHalfOpen = true; + if (options) { + if (options.readable === false) this.readable = false; + if (options.writable === false) this.writable = false; + if (options.allowHalfOpen === false) { + this.allowHalfOpen = false; + this.once('end', onend); + } + } +} +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); +Object.defineProperty(Duplex.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } +}); +Object.defineProperty(Duplex.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } +}); + +// the no-half-open enforcer +function onend() { + // If the writable side ended, then we're ok. + if (this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + process.nextTick(onEndNT, this); +} +function onEndNT(self) { + self.end(); +} +Object.defineProperty(Duplex.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +}).call(this)}).call(this,require('_process')) + +},{"./_stream_readable":480,"./_stream_writable":482,"_process":467,"inherits":440}],479:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; +var Transform = require('./_stream_transform'); +require('inherits')(PassThrough, Transform); +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + Transform.call(this, options); +} +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; + +},{"./_stream_transform":481,"inherits":440}],480:[function(require,module,exports){ +(function (process,global){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +module.exports = Readable; + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; +var EElistenerCount = function EElistenerCount(emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +var Buffer = require('buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ +var debugUtil = require('util'); +var debug; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function debug() {}; +} +/**/ + +var BufferList = require('./internal/streams/buffer_list'); +var destroyImpl = require('./internal/streams/destroy'); +var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; +var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; + +// Lazy loaded to improve the startup performance. +var StringDecoder; +var createReadableStreamAsyncIterator; +var from; +require('inherits')(Readable, Stream); +var errorOrDestroy = destroyImpl.errorOrDestroy; +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} +function ReadableState(options, stream, isDuplex) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + this.paused = true; + + // Should close be emitted on destroy. Defaults to true. + this.emitClose = options.emitClose !== false; + + // Should .destroy() be called after 'end' (and potentially 'finish') + this.autoDestroy = !!options.autoDestroy; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + if (!(this instanceof Readable)) return new Readable(options); + + // Checking for a Stream.Duplex instance is faster here instead of inside + // the ReadableState constructor, at least with V8 6.5 + var isDuplex = this instanceof Duplex; + this._readableState = new ReadableState(options, this, isDuplex); + + // legacy + this.readable = true; + if (options) { + if (typeof options.read === 'function') this._read = options.read; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + Stream.call(this); +} +Object.defineProperty(Readable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + debug('readableAddChunk', chunk); + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + errorOrDestroy(stream, er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (addToFront) { + if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); + } else if (state.ended) { + errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); + } else if (state.destroyed) { + return false; + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + maybeReadMore(stream, state); + } + } + + // We can push more data if we are below the highWaterMark. + // Also, if we have no data yet, we can stand some more bytes. + // This is to work around cases where hwm=0, such as the repl. + return !state.ended && (state.length < state.highWaterMark || state.length === 0); +} +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + state.awaitDrain = 0; + stream.emit('data', chunk); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); + } + return er; +} +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + var decoder = new StringDecoder(enc); + this._readableState.decoder = decoder; + // If setEncoding(null), decoder.encoding equals utf8 + this._readableState.encoding = this._readableState.decoder.encoding; + + // Iterate over current buffer to convert already stored Buffers: + var p = this._readableState.buffer.head; + var content = ''; + while (p !== null) { + content += decoder.write(p.data); + p = p.next; + } + this._readableState.buffer.clear(); + if (content !== '') this._readableState.buffer.push(content); + this._readableState.length = content.length; + return this; +}; + +// Don't raise the hwm > 1GB +var MAX_HWM = 0x40000000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + if (ret === null) { + state.needReadable = state.length <= state.highWaterMark; + n = 0; + } else { + state.length -= n; + state.awaitDrain = 0; + } + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + if (ret !== null) this.emit('data', ret); + return ret; +}; +function onEofChunk(stream, state) { + debug('onEofChunk'); + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + if (state.sync) { + // if we are sync, wait until next tick to emit the data. + // Otherwise we risk emitting data in the flow() + // the readable code triggers during a read() call + emitReadable(stream); + } else { + // emit 'readable' now to make sure it gets picked up. + state.needReadable = false; + if (!state.emittedReadable) { + state.emittedReadable = true; + emitReadable_(stream); + } + } +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + debug('emitReadable', state.needReadable, state.emittedReadable); + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + process.nextTick(emitReadable_, stream); + } +} +function emitReadable_(stream) { + var state = stream._readableState; + debug('emitReadable_', state.destroyed, state.length, state.ended); + if (!state.destroyed && (state.length || state.ended)) { + stream.emit('readable'); + state.emittedReadable = false; + } + + // The stream needs another readable event if + // 1. It is not flowing, as the flow mechanism will take + // care of it. + // 2. It is not ended. + // 3. It is below the highWaterMark, so we can schedule + // another readable later. + state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(maybeReadMore_, stream, state); + } +} +function maybeReadMore_(stream, state) { + // Attempt to read more data if we should. + // + // The conditions for reading more data are (one of): + // - Not enough data buffered (state.length < state.highWaterMark). The loop + // is responsible for filling the buffer with enough data if such data + // is available. If highWaterMark is 0 and we are not in the flowing mode + // we should _not_ attempt to buffer any extra data. We'll get more data + // when the stream consumer calls read() instead. + // - No data in the buffer, and the stream is in flowing mode. In this mode + // the loop below is responsible for ensuring read() is called. Failing to + // call read here would abort the flow and there's no other mechanism for + // continuing the flow if the stream consumer has just subscribed to the + // 'data' event. + // + // In addition to the above conditions to keep reading data, the following + // conditions prevent the data from being read: + // - The stream has ended (state.ended). + // - There is already a pending 'read' operation (state.reading). This is a + // case where the the stream has called the implementation defined _read() + // method, but they are processing the call asynchronously and have _not_ + // called push() with new data. In this case we skip performing more + // read()s. The execution ends in this method again after the _read() ends + // up calling push() with more data. + while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { + var len = state.length; + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); +}; +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + var ret = dest.write(chunk); + debug('dest.write', ret); + if (ret === false) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + return dest; +}; +function pipeOnDrain(src) { + return function pipeOnDrainFunctionResult() { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, { + hasUnpiped: false + }); + return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this, unpipeInfo); + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + var state = this._readableState; + if (ev === 'data') { + // update readableListening so that resume() may be a no-op + // a few lines down. This is needed to support once('readable'). + state.readableListening = this.listenerCount('readable') > 0; + + // Try start flowing on next tick if stream isn't explicitly paused + if (state.flowing !== false) this.resume(); + } else if (ev === 'readable') { + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.flowing = false; + state.emittedReadable = false; + debug('on readable', state.length, state.reading); + if (state.length) { + emitReadable(this); + } else if (!state.reading) { + process.nextTick(nReadingNextTick, this); + } + } + } + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; +Readable.prototype.removeListener = function (ev, fn) { + var res = Stream.prototype.removeListener.call(this, ev, fn); + if (ev === 'readable') { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + return res; +}; +Readable.prototype.removeAllListeners = function (ev) { + var res = Stream.prototype.removeAllListeners.apply(this, arguments); + if (ev === 'readable' || ev === undefined) { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + return res; +}; +function updateReadableListening(self) { + var state = self._readableState; + state.readableListening = self.listenerCount('readable') > 0; + if (state.resumeScheduled && !state.paused) { + // flowing needs to be set to true now, otherwise + // the upcoming resume will not flow. + state.flowing = true; + + // crude way to check if we should resume + } else if (self.listenerCount('data') > 0) { + self.resume(); + } +} +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + // we flow only if there is no one listening + // for readable, but we still have to call + // resume() + state.flowing = !state.readableListening; + resume(this, state); + } + state.paused = false; + return this; +}; +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + process.nextTick(resume_, stream, state); + } +} +function resume_(stream, state) { + debug('resume', state.reading); + if (!state.reading) { + stream.read(0); + } + state.resumeScheduled = false; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (this._readableState.flowing !== false) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + this._readableState.paused = true; + return this; +}; +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null); +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + var state = this._readableState; + var paused = false; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + _this.push(null); + }); + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function methodWrap(method) { + return function methodWrapReturnFunction() { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + return this; +}; +if (typeof Symbol === 'function') { + Readable.prototype[Symbol.asyncIterator] = function () { + if (createReadableStreamAsyncIterator === undefined) { + createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); + } + return createReadableStreamAsyncIterator(this); + }; +} +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.highWaterMark; + } +}); +Object.defineProperty(Readable.prototype, 'readableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState && this._readableState.buffer; + } +}); +Object.defineProperty(Readable.prototype, 'readableFlowing', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.flowing; + }, + set: function set(state) { + if (this._readableState) { + this._readableState.flowing = state; + } + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; +Object.defineProperty(Readable.prototype, 'readableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.length; + } +}); + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = state.buffer.consume(n, state.decoder); + } + return ret; +} +function endReadable(stream) { + var state = stream._readableState; + debug('endReadable', state.endEmitted); + if (!state.endEmitted) { + state.ended = true; + process.nextTick(endReadableNT, state, stream); + } +} +function endReadableNT(state, stream) { + debug('endReadableNT', state.endEmitted, state.length); + + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the writable side is ready for autoDestroy as well + var wState = stream._writableState; + if (!wState || wState.autoDestroy && wState.finished) { + stream.destroy(); + } + } + } +} +if (typeof Symbol === 'function') { + Readable.from = function (iterable, opts) { + if (from === undefined) { + from = require('./internal/streams/from'); + } + return from(Readable, iterable, opts); + }; +} +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"../errors":477,"./_stream_duplex":478,"./internal/streams/async_iterator":483,"./internal/streams/buffer_list":484,"./internal/streams/destroy":485,"./internal/streams/from":487,"./internal/streams/state":489,"./internal/streams/stream":490,"_process":467,"buffer":220,"events":422,"inherits":440,"string_decoder/":522,"util":188}],481:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; +var _require$codes = require('../errors').codes, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, + ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; +var Duplex = require('./_stream_duplex'); +require('inherits')(Transform, Duplex); +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + var cb = ts.writecb; + if (cb === null) { + return this.emit('error', new ERR_MULTIPLE_CALLBACK()); + } + ts.writechunk = null; + ts.writecb = null; + if (data != null) + // single equals check for both `null` and `undefined` + this.push(data); + cb(er); + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + Duplex.call(this, options); + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} +function prefinish() { + var _this = this; + if (typeof this._flush === 'function' && !this._readableState.destroyed) { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); +}; +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + if (ts.writechunk !== null && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; +Transform.prototype._destroy = function (err, cb) { + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + }); +}; +function done(stream, er, data) { + if (er) return stream.emit('error', er); + if (data != null) + // single equals check for both `null` and `undefined` + stream.push(data); + + // TODO(BridgeAR): Write a test for these two error cases + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); + if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); + return stream.push(null); +} + +},{"../errors":477,"./_stream_duplex":478,"inherits":440}],482:[function(require,module,exports){ +(function (process,global){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +var Buffer = require('buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +var destroyImpl = require('./internal/streams/destroy'); +var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; +var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, + ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, + ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, + ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; +var errorOrDestroy = destroyImpl.errorOrDestroy; +require('inherits')(Writable, Stream); +function nop() {} +function WritableState(options, stream, isDuplex) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream, + // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // Should close be emitted on destroy. Defaults to true. + this.emitClose = options.emitClose !== false; + + // Should .destroy() be called after 'finish' (and potentially 'end') + this.autoDestroy = !!options.autoDestroy; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function writableStateBufferGetter() { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function value(object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function realHasInstance(object) { + return object instanceof this; + }; +} +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + + // Checking for a Stream.Duplex instance is faster here instead of inside + // the WritableState constructor, at least with V8 6.5 + var isDuplex = this instanceof Duplex; + if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); + this._writableState = new WritableState(options, this, isDuplex); + + // legacy. + this.writable = true; + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + if (typeof options.final === 'function') this._final = options.final; + } + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); +}; +function writeAfterEnd(stream, cb) { + var er = new ERR_STREAM_WRITE_AFTER_END(); + // TODO: defer error events consistently everywhere, not just the cb + errorOrDestroy(stream, er); + process.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var er; + if (chunk === null) { + er = new ERR_STREAM_NULL_VALUES(); + } else if (typeof chunk !== 'string' && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); + } + if (er) { + errorOrDestroy(stream, er); + process.nextTick(cb, er); + return false; + } + return true; +} +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; +}; +Writable.prototype.cork = function () { + this._writableState.corked++; +}; +Writable.prototype.uncork = function () { + var state = this._writableState; + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; +Object.defineProperty(Writable.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } +}); +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + return ret; +} +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + process.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + process.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state) || stream.destroyed; + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + if (sync) { + process.nextTick(afterWrite, stream, state, finished, cb); + } else { + afterWrite(stream, state, finished, cb); + } + } +} +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + if (entry === null) state.lastBufferedRequest = null; + } + state.bufferedRequest = entry; + state.bufferProcessing = false; +} +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); +}; +Writable.prototype._writev = null; +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending) endWritable(this, state, cb); + return this; +}; +Object.defineProperty(Writable.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } +}); +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + errorOrDestroy(stream, err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function' && !state.destroyed) { + state.pendingcb++; + state.finalCalled = true; + process.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the readable side is ready for autoDestroy as well + var rState = stream._readableState; + if (!rState || rState.autoDestroy && rState.endEmitted) { + stream.destroy(); + } + } + } + } + return need; +} +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) process.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + // reuse the free corkReq. + state.corkedRequestsFree.next = corkReq; +} +Object.defineProperty(Writable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + cb(err); +}; + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"../errors":477,"./_stream_duplex":478,"./internal/streams/destroy":485,"./internal/streams/state":489,"./internal/streams/stream":490,"_process":467,"buffer":220,"inherits":440,"util-deprecate":524}],483:[function(require,module,exports){ +(function (process){(function (){ +'use strict'; + +var _Object$setPrototypeO; +function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; +} +function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); +} +function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); +} +var finished = require('./end-of-stream'); +var kLastResolve = Symbol('lastResolve'); +var kLastReject = Symbol('lastReject'); +var kError = Symbol('error'); +var kEnded = Symbol('ended'); +var kLastPromise = Symbol('lastPromise'); +var kHandlePromise = Symbol('handlePromise'); +var kStream = Symbol('stream'); +function createIterResult(value, done) { + return { + value: value, + done: done + }; +} +function readAndResolve(iter) { + var resolve = iter[kLastResolve]; + if (resolve !== null) { + var data = iter[kStream].read(); + // we defer if data is null + // we can be expecting either 'end' or + // 'error' + if (data !== null) { + iter[kLastPromise] = null; + iter[kLastResolve] = null; + iter[kLastReject] = null; + resolve(createIterResult(data, false)); + } + } +} +function onReadable(iter) { + // we wait for the next tick, because it might + // emit an error with process.nextTick + process.nextTick(readAndResolve, iter); +} +function wrapForNext(lastPromise, iter) { + return function (resolve, reject) { + lastPromise.then(function () { + if (iter[kEnded]) { + resolve(createIterResult(undefined, true)); + return; + } + iter[kHandlePromise](resolve, reject); + }, reject); + }; +} +var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); +var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { + get stream() { + return this[kStream]; + }, + next: function next() { + var _this = this; + // if we have detected an error in the meanwhile + // reject straight away + var error = this[kError]; + if (error !== null) { + return Promise.reject(error); + } + if (this[kEnded]) { + return Promise.resolve(createIterResult(undefined, true)); + } + if (this[kStream].destroyed) { + // We need to defer via nextTick because if .destroy(err) is + // called, the error will be emitted via nextTick, and + // we cannot guarantee that there is no error lingering around + // waiting to be emitted. + return new Promise(function (resolve, reject) { + process.nextTick(function () { + if (_this[kError]) { + reject(_this[kError]); + } else { + resolve(createIterResult(undefined, true)); + } + }); + }); + } + + // if we have multiple next() calls + // we will wait for the previous Promise to finish + // this logic is optimized to support for await loops, + // where next() is only called once at a time + var lastPromise = this[kLastPromise]; + var promise; + if (lastPromise) { + promise = new Promise(wrapForNext(lastPromise, this)); + } else { + // fast path needed to support multiple this.push() + // without triggering the next() queue + var data = this[kStream].read(); + if (data !== null) { + return Promise.resolve(createIterResult(data, false)); + } + promise = new Promise(this[kHandlePromise]); + } + this[kLastPromise] = promise; + return promise; + } +}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { + return this; +}), _defineProperty(_Object$setPrototypeO, "return", function _return() { + var _this2 = this; + // destroy(err, cb) is a private API + // we can guarantee we have that here, because we control the + // Readable class this is attached to + return new Promise(function (resolve, reject) { + _this2[kStream].destroy(null, function (err) { + if (err) { + reject(err); + return; + } + resolve(createIterResult(undefined, true)); + }); + }); +}), _Object$setPrototypeO), AsyncIteratorPrototype); +var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { + var _Object$create; + var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { + value: stream, + writable: true + }), _defineProperty(_Object$create, kLastResolve, { + value: null, + writable: true + }), _defineProperty(_Object$create, kLastReject, { + value: null, + writable: true + }), _defineProperty(_Object$create, kError, { + value: null, + writable: true + }), _defineProperty(_Object$create, kEnded, { + value: stream._readableState.endEmitted, + writable: true + }), _defineProperty(_Object$create, kHandlePromise, { + value: function value(resolve, reject) { + var data = iterator[kStream].read(); + if (data) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(data, false)); + } else { + iterator[kLastResolve] = resolve; + iterator[kLastReject] = reject; + } + }, + writable: true + }), _Object$create)); + iterator[kLastPromise] = null; + finished(stream, function (err) { + if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { + var reject = iterator[kLastReject]; + // reject if we are waiting for data in the Promise + // returned by next() and store the error + if (reject !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + reject(err); + } + iterator[kError] = err; + return; + } + var resolve = iterator[kLastResolve]; + if (resolve !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(undefined, true)); + } + iterator[kEnded] = true; + }); + stream.on('readable', onReadable.bind(null, iterator)); + return iterator; +}; +module.exports = createReadableStreamAsyncIterator; + +}).call(this)}).call(this,require('_process')) + +},{"./end-of-stream":486,"_process":467}],484:[function(require,module,exports){ +'use strict'; + +function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + return keys; +} +function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { + _defineProperty(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + return target; +} +function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; +} +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } +} +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} +function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); +} +function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); +} +var _require = require('buffer'), + Buffer = _require.Buffer; +var _require2 = require('util'), + inspect = _require2.inspect; +var custom = inspect && inspect.custom || 'inspect'; +function copyBuffer(src, target, offset) { + Buffer.prototype.copy.call(src, target, offset); +} +module.exports = /*#__PURE__*/function () { + function BufferList() { + _classCallCheck(this, BufferList); + this.head = null; + this.tail = null; + this.length = 0; + } + _createClass(BufferList, [{ + key: "push", + value: function push(v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + } + }, { + key: "unshift", + value: function unshift(v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + } + }, { + key: "shift", + value: function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + } + }, { + key: "clear", + value: function clear() { + this.head = this.tail = null; + this.length = 0; + } + }, { + key: "join", + value: function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) ret += s + p.data; + return ret; + } + }, { + key: "concat", + value: function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + } + + // Consumes a specified amount of bytes or characters from the buffered data. + }, { + key: "consume", + value: function consume(n, hasStrings) { + var ret; + if (n < this.head.data.length) { + // `slice` is the same for buffers and strings. + ret = this.head.data.slice(0, n); + this.head.data = this.head.data.slice(n); + } else if (n === this.head.data.length) { + // First chunk is a perfect match. + ret = this.shift(); + } else { + // Result spans more than one buffer. + ret = hasStrings ? this._getString(n) : this._getBuffer(n); + } + return ret; + } + }, { + key: "first", + value: function first() { + return this.head.data; + } + + // Consumes a specified amount of characters from the buffered data. + }, { + key: "_getString", + value: function _getString(n) { + var p = this.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) this.head = p.next;else this.head = this.tail = null; + } else { + this.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + this.length -= c; + return ret; + } + + // Consumes a specified amount of bytes from the buffered data. + }, { + key: "_getBuffer", + value: function _getBuffer(n) { + var ret = Buffer.allocUnsafe(n); + var p = this.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) this.head = p.next;else this.head = this.tail = null; + } else { + this.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + this.length -= c; + return ret; + } + + // Make sure the linked list only shows the minimal necessary information. + }, { + key: custom, + value: function value(_, options) { + return inspect(this, _objectSpread(_objectSpread({}, options), {}, { + // Only inspect one level. + depth: 0, + // It should not recurse. + customInspect: false + })); + } + }]); + return BufferList; +}(); + +},{"buffer":220,"util":188}],485:[function(require,module,exports){ +(function (process){(function (){ +'use strict'; + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + process.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + process.nextTick(emitErrorNT, this, err); + } + } + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + process.nextTick(emitErrorAndCloseNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + process.nextTick(emitErrorAndCloseNT, _this, err); + } else { + process.nextTick(emitCloseNT, _this); + } + } else if (cb) { + process.nextTick(emitCloseNT, _this); + cb(err); + } else { + process.nextTick(emitCloseNT, _this); + } + }); + return this; +} +function emitErrorAndCloseNT(self, err) { + emitErrorNT(self, err); + emitCloseNT(self); +} +function emitCloseNT(self) { + if (self._writableState && !self._writableState.emitClose) return; + if (self._readableState && !self._readableState.emitClose) return; + self.emit('close'); +} +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} +function emitErrorNT(self, err) { + self.emit('error', err); +} +function errorOrDestroy(stream, err) { + // We have tests that rely on errors being emitted + // in the same tick, so changing this is semver major. + // For now when you opt-in to autoDestroy we allow + // the error to be emitted nextTick. In a future + // semver major update we should change the default to this. + + var rState = stream._readableState; + var wState = stream._writableState; + if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); +} +module.exports = { + destroy: destroy, + undestroy: undestroy, + errorOrDestroy: errorOrDestroy +}; + +}).call(this)}).call(this,require('_process')) + +},{"_process":467}],486:[function(require,module,exports){ +// Ported from https://github.com/mafintosh/end-of-stream with +// permission from the author, Mathias Buus (@mafintosh). + +'use strict'; + +var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE; +function once(callback) { + var called = false; + return function () { + if (called) return; + called = true; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + callback.apply(this, args); + }; +} +function noop() {} +function isRequest(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +} +function eos(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + callback = once(callback || noop); + var readable = opts.readable || opts.readable !== false && stream.readable; + var writable = opts.writable || opts.writable !== false && stream.writable; + var onlegacyfinish = function onlegacyfinish() { + if (!stream.writable) onfinish(); + }; + var writableEnded = stream._writableState && stream._writableState.finished; + var onfinish = function onfinish() { + writable = false; + writableEnded = true; + if (!readable) callback.call(stream); + }; + var readableEnded = stream._readableState && stream._readableState.endEmitted; + var onend = function onend() { + readable = false; + readableEnded = true; + if (!writable) callback.call(stream); + }; + var onerror = function onerror(err) { + callback.call(stream, err); + }; + var onclose = function onclose() { + var err; + if (readable && !readableEnded) { + if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + if (writable && !writableEnded) { + if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + }; + var onrequest = function onrequest() { + stream.req.on('finish', onfinish); + }; + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest();else stream.on('request', onrequest); + } else if (writable && !stream._writableState) { + // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); + return function () { + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; +} +module.exports = eos; + +},{"../../../errors":477}],487:[function(require,module,exports){ +"use strict"; + +module.exports = function () { + throw new Error('Readable.from is not available in the browser'); +}; + +},{}],488:[function(require,module,exports){ +// Ported from https://github.com/mafintosh/pump with +// permission from the author, Mathias Buus (@mafintosh). + +'use strict'; + +var eos; +function once(callback) { + var called = false; + return function () { + if (called) return; + called = true; + callback.apply(void 0, arguments); + }; +} +var _require$codes = require('../../../errors').codes, + ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; +function noop(err) { + // Rethrow the error if it exists to avoid swallowing it + if (err) throw err; +} +function isRequest(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +} +function destroyer(stream, reading, writing, callback) { + callback = once(callback); + var closed = false; + stream.on('close', function () { + closed = true; + }); + if (eos === undefined) eos = require('./end-of-stream'); + eos(stream, { + readable: reading, + writable: writing + }, function (err) { + if (err) return callback(err); + closed = true; + callback(); + }); + var destroyed = false; + return function (err) { + if (closed) return; + if (destroyed) return; + destroyed = true; + + // request.destroy just do .end - .abort is what we want + if (isRequest(stream)) return stream.abort(); + if (typeof stream.destroy === 'function') return stream.destroy(); + callback(err || new ERR_STREAM_DESTROYED('pipe')); + }; +} +function call(fn) { + fn(); +} +function pipe(from, to) { + return from.pipe(to); +} +function popCallback(streams) { + if (!streams.length) return noop; + if (typeof streams[streams.length - 1] !== 'function') return noop; + return streams.pop(); +} +function pipeline() { + for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { + streams[_key] = arguments[_key]; + } + var callback = popCallback(streams); + if (Array.isArray(streams[0])) streams = streams[0]; + if (streams.length < 2) { + throw new ERR_MISSING_ARGS('streams'); + } + var error; + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1; + var writing = i > 0; + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err; + if (err) destroys.forEach(call); + if (reading) return; + destroys.forEach(call); + callback(error); + }); + }); + return streams.reduce(pipe); +} +module.exports = pipeline; + +},{"../../../errors":477,"./end-of-stream":486}],489:[function(require,module,exports){ +'use strict'; + +var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE; +function highWaterMarkFrom(options, isDuplex, duplexKey) { + return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; +} +function getHighWaterMark(state, options, duplexKey, isDuplex) { + var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); + if (hwm != null) { + if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { + var name = isDuplex ? duplexKey : 'highWaterMark'; + throw new ERR_INVALID_OPT_VALUE(name, hwm); + } + return Math.floor(hwm); + } + + // Default value + return state.objectMode ? 16 : 16 * 1024; +} +module.exports = { + getHighWaterMark: getHighWaterMark +}; + +},{"../../../errors":477}],490:[function(require,module,exports){ +"use strict"; + +module.exports = require('events').EventEmitter; + +},{"events":422}],491:[function(require,module,exports){ +"use strict"; + +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); +exports.finished = require('./lib/internal/streams/end-of-stream.js'); +exports.pipeline = require('./lib/internal/streams/pipeline.js'); + +},{"./lib/_stream_duplex.js":478,"./lib/_stream_passthrough.js":479,"./lib/_stream_readable.js":480,"./lib/_stream_transform.js":481,"./lib/_stream_writable.js":482,"./lib/internal/streams/end-of-stream.js":486,"./lib/internal/streams/pipeline.js":488}],492:[function(require,module,exports){ +"use strict"; + +/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var runtime = function (exports) { + "use strict"; + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var defineProperty = Object.defineProperty || function (obj, key, desc) { + obj[key] = desc.value; + }; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + function define(obj, key, value) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + return obj[key]; + } + try { + // IE 8 has a broken Object.defineProperty that only works on DOM objects. + define({}, ""); + } catch (err) { + define = function (obj, key, value) { + return obj[key] = value; + }; + } + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + defineProperty(generator, "_invoke", { + value: makeInvokeMethod(innerFn, self, context) + }); + return generator; + } + exports.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { + type: "normal", + arg: fn.call(obj, arg) + }; + } catch (err) { + return { + type: "throw", + arg: err + }; + } + } + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; + + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + var IteratorPrototype = {}; + define(IteratorPrototype, iteratorSymbol, function () { + return this; + }); + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = GeneratorFunctionPrototype; + defineProperty(Gp, "constructor", { + value: GeneratorFunctionPrototype, + configurable: true + }); + defineProperty(GeneratorFunctionPrototype, "constructor", { + value: GeneratorFunction, + configurable: true + }); + GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function (method) { + define(prototype, method, function (arg) { + return this._invoke(method, arg); + }); + }); + } + exports.isGeneratorFunction = function (genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" : false; + }; + exports.mark = function (genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + define(genFun, toStringTagSymbol, "GeneratorFunction"); + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + exports.awrap = function (arg) { + return { + __await: arg + }; + }; + function AsyncIterator(generator, PromiseImpl) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && typeof value === "object" && hasOwn.call(value, "__await")) { + return PromiseImpl.resolve(value.__await).then(function (value) { + invoke("next", value, resolve, reject); + }, function (err) { + invoke("throw", err, resolve, reject); + }); + } + return PromiseImpl.resolve(value).then(function (unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. + result.value = unwrapped; + resolve(result); + }, function (error) { + // If a rejected Promise was yielded, throw the rejection back + // into the async generator function so it can be handled there. + return invoke("throw", error, resolve, reject); + }); + } + } + var previousPromise; + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new PromiseImpl(function (resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + defineProperty(this, "_invoke", { + value: enqueue + }); + } + defineIteratorMethods(AsyncIterator.prototype); + define(AsyncIterator.prototype, asyncIteratorSymbol, function () { + return this; + }); + exports.AsyncIterator = AsyncIterator; + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { + if (PromiseImpl === void 0) PromiseImpl = Promise; + var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); + return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function (result) { + return result.done ? result.value : iter.next(); + }); + }; + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + context.method = method; + context.arg = arg; + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + context.dispatchException(context.arg); + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + state = GenStateExecuting; + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done ? GenStateCompleted : GenStateSuspendedYield; + if (record.arg === ContinueSentinel) { + continue; + } + return { + value: record.arg, + done: context.done + }; + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + function maybeInvokeDelegate(delegate, context) { + var methodName = context.method; + var method = delegate.iterator[methodName]; + if (method === undefined) { + // A .throw or .return when the delegate iterator has no .throw + // method, or a missing .next mehtod, always terminate the + // yield* loop. + context.delegate = null; + + // Note: ["return"] must be used for ES3 parsing compatibility. + if (methodName === "throw" && delegate.iterator["return"]) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + return ContinueSentinel; + } + } + if (methodName !== "return") { + context.method = "throw"; + context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method"); + } + return ContinueSentinel; + } + var record = tryCatch(method, delegate.iterator, context.arg); + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + var info = record.arg; + if (!info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; + + // Resume execution at the desired location (see delegateYield). + context.next = delegate.nextLoc; + + // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + } else { + // Re-yield the result returned by the delegate method. + return info; + } + + // The delegate iterator is finished, so forget it and continue with + // the outer generator. + context.delegate = null; + return ContinueSentinel; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + define(Gp, toStringTagSymbol, "Generator"); + + // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + define(Gp, iteratorSymbol, function () { + return this; + }); + define(Gp, "toString", function () { + return "[object Generator]"; + }); + function pushTryEntry(locs) { + var entry = { + tryLoc: locs[0] + }; + if (1 in locs) { + entry.catchLoc = locs[1]; + } + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + this.tryEntries.push(entry); + } + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ + tryLoc: "root" + }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + exports.keys = function (val) { + var object = Object(val); + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + if (typeof iterable.next === "function") { + return iterable; + } + if (!isNaN(iterable.length)) { + var i = -1, + next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + next.value = undefined; + next.done = true; + return next; + }; + return next.next = next; + } + } + + // Return an iterator with no values. + return { + next: doneResult + }; + } + exports.values = values; + function doneResult() { + return { + value: undefined, + done: true + }; + } + Context.prototype = { + constructor: Context, + reset: function (skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + this.method = "next"; + this.arg = undefined; + this.tryEntries.forEach(resetTryEntry); + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + stop: function () { + this.done = true; + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + return this.rval; + }, + dispatchException: function (exception) { + if (this.done) { + throw exception; + } + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined; + } + return !!caught; + } + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + abrupt: function (type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + return this.complete(record); + }, + complete: function (record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + if (record.type === "break" || record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + return ContinueSentinel; + }, + finish: function (finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + "catch": function (tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + delegateYield: function (iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined; + } + return ContinueSentinel; + } + }; + + // Regardless of whether this script is executing as a CommonJS module + // or not, return the runtime object so that we can declare the variable + // regeneratorRuntime in the outer scope, which allows this module to be + // injected easily by `bin/regenerator --include-runtime script.js`. + return exports; +}( +// If this script is executing as a CommonJS module, use module.exports +// as the regeneratorRuntime namespace. Otherwise create a new empty +// object. Either way, the resulting object will be used to initialize +// the regeneratorRuntime variable at the top of this file. +typeof module === "object" ? module.exports : {}); +try { + regeneratorRuntime = runtime; +} catch (accidentalStrictMode) { + // This module should not be running in strict mode, so the above + // assignment should always work unless something is misconfigured. Just + // in case runtime.js accidentally runs in strict mode, in modern engines + // we can explicitly access globalThis. In older engines we can escape + // strict mode using a global Function call. This could conceivably fail + // if a Content Security Policy forbids using Function, but in that case + // the proper solution is to fix the accidental strict mode problem. If + // you've misconfigured your bundler to force strict mode and applied a + // CSP to forbid Function, and you're not willing to fix either of those + // problems, please detail your unique predicament in a GitHub issue. + if (typeof globalThis === "object") { + globalThis.regeneratorRuntime = runtime; + } else { + Function("r", "regeneratorRuntime = r")(runtime); + } +} + +},{}],493:[function(require,module,exports){ +'use strict'; + +var Buffer = require('buffer').Buffer; +var inherits = require('inherits'); +var HashBase = require('hash-base'); +var ARRAY16 = new Array(16); +var zl = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]; +var zr = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]; +var sl = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]; +var sr = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]; +var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]; +var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]; +function RIPEMD160() { + HashBase.call(this, 64); + + // state + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; + this._e = 0xc3d2e1f0; +} +inherits(RIPEMD160, HashBase); +RIPEMD160.prototype._update = function () { + var words = ARRAY16; + for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4); + var al = this._a | 0; + var bl = this._b | 0; + var cl = this._c | 0; + var dl = this._d | 0; + var el = this._e | 0; + var ar = this._a | 0; + var br = this._b | 0; + var cr = this._c | 0; + var dr = this._d | 0; + var er = this._e | 0; + + // computation + for (var i = 0; i < 80; i += 1) { + var tl; + var tr; + if (i < 16) { + tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]); + tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]); + } else if (i < 32) { + tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]); + tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]); + } else if (i < 48) { + tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]); + tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]); + } else if (i < 64) { + tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]); + tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]); + } else { + // if (i<80) { + tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]); + tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]); + } + al = el; + el = dl; + dl = rotl(cl, 10); + cl = bl; + bl = tl; + ar = er; + er = dr; + dr = rotl(cr, 10); + cr = br; + br = tr; + } + + // update state + var t = this._b + cl + dr | 0; + this._b = this._c + dl + er | 0; + this._c = this._d + el + ar | 0; + this._d = this._e + al + br | 0; + this._e = this._a + bl + cr | 0; + this._a = t; +}; +RIPEMD160.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80; + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64); + this._update(); + this._blockOffset = 0; + } + this._block.fill(0, this._blockOffset, 56); + this._block.writeUInt32LE(this._length[0], 56); + this._block.writeUInt32LE(this._length[1], 60); + this._update(); + + // produce result + var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20); + buffer.writeInt32LE(this._a, 0); + buffer.writeInt32LE(this._b, 4); + buffer.writeInt32LE(this._c, 8); + buffer.writeInt32LE(this._d, 12); + buffer.writeInt32LE(this._e, 16); + return buffer; +}; +function rotl(x, n) { + return x << n | x >>> 32 - n; +} +function fn1(a, b, c, d, e, m, k, s) { + return rotl(a + (b ^ c ^ d) + m + k | 0, s) + e | 0; +} +function fn2(a, b, c, d, e, m, k, s) { + return rotl(a + (b & c | ~b & d) + m + k | 0, s) + e | 0; +} +function fn3(a, b, c, d, e, m, k, s) { + return rotl(a + ((b | ~c) ^ d) + m + k | 0, s) + e | 0; +} +function fn4(a, b, c, d, e, m, k, s) { + return rotl(a + (b & d | c & ~d) + m + k | 0, s) + e | 0; +} +function fn5(a, b, c, d, e, m, k, s) { + return rotl(a + (b ^ (c | ~d)) + m + k | 0, s) + e | 0; +} +module.exports = RIPEMD160; + +},{"buffer":220,"hash-base":425,"inherits":440}],494:[function(require,module,exports){ +"use strict"; + +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer'); +var Buffer = buffer.Buffer; + +// alternative to using Object.keys for old browsers +function copyProps(src, dst) { + for (var key in src) { + dst[key] = src[key]; + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer; +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports); + exports.Buffer = SafeBuffer; +} +function SafeBuffer(arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length); +} +SafeBuffer.prototype = Object.create(Buffer.prototype); + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer); +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number'); + } + return Buffer(arg, encodingOrOffset, length); +}; +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + var buf = Buffer(size); + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + } else { + buf.fill(0); + } + return buf; +}; +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + return Buffer(size); +}; +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number'); + } + return buffer.SlowBuffer(size); +}; + +},{"buffer":220}],495:[function(require,module,exports){ +(function (process){(function (){ +/* eslint-disable node/no-deprecated-api */ + +'use strict'; + +var buffer = require('buffer'); +var Buffer = buffer.Buffer; +var safer = {}; +var key; +for (key in buffer) { + if (!buffer.hasOwnProperty(key)) continue; + if (key === 'SlowBuffer' || key === 'Buffer') continue; + safer[key] = buffer[key]; +} +var Safer = safer.Buffer = {}; +for (key in Buffer) { + if (!Buffer.hasOwnProperty(key)) continue; + if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue; + Safer[key] = Buffer[key]; +} +safer.Buffer.prototype = Buffer.prototype; +if (!Safer.from || Safer.from === Uint8Array.from) { + Safer.from = function (value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value); + } + if (value && typeof value.length === 'undefined') { + throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value); + } + return Buffer(value, encodingOrOffset, length); + }; +} +if (!Safer.alloc) { + Safer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size); + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"'); + } + var buf = Buffer(size); + if (!fill || fill.length === 0) { + buf.fill(0); + } else if (typeof encoding === 'string') { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + return buf; + }; +} +if (!safer.kStringMaxLength) { + try { + safer.kStringMaxLength = process.binding('buffer').kStringMaxLength; + } catch (e) { + // we can't determine kStringMaxLength in environments where process.binding + // is unsupported, so let's not set it + } +} +if (!safer.constants) { + safer.constants = { + MAX_LENGTH: safer.kMaxLength + }; + if (safer.kStringMaxLength) { + safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength; + } +} +module.exports = safer; + +}).call(this)}).call(this,require('_process')) + +},{"_process":467,"buffer":220}],496:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +const ed5 = require("xmlchars/xml/1.0/ed5"); +const ed2 = require("xmlchars/xml/1.1/ed2"); +const NSed3 = require("xmlchars/xmlns/1.0/ed3"); +var isS = ed5.isS; +var isChar10 = ed5.isChar; +var isNameStartChar = ed5.isNameStartChar; +var isNameChar = ed5.isNameChar; +var S_LIST = ed5.S_LIST; +var NAME_RE = ed5.NAME_RE; +var isChar11 = ed2.isChar; +var isNCNameStartChar = NSed3.isNCNameStartChar; +var isNCNameChar = NSed3.isNCNameChar; +var NC_NAME_RE = NSed3.NC_NAME_RE; +const XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"; +const XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/"; +const rootNS = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + __proto__: null, + xml: XML_NAMESPACE, + xmlns: XMLNS_NAMESPACE +}; +const XML_ENTITIES = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + __proto__: null, + amp: "&", + gt: ">", + lt: "<", + quot: "\"", + apos: "'" +}; +// EOC: end-of-chunk +const EOC = -1; +const NL_LIKE = -2; +const S_BEGIN = 0; // Initial state. +const S_BEGIN_WHITESPACE = 1; // leading whitespace +const S_DOCTYPE = 2; // +const TAB = 9; +const NL = 0xA; +const CR = 0xD; +const SPACE = 0x20; +const BANG = 0x21; +const DQUOTE = 0x22; +const AMP = 0x26; +const SQUOTE = 0x27; +const MINUS = 0x2D; +const FORWARD_SLASH = 0x2F; +const SEMICOLON = 0x3B; +const LESS = 0x3C; +const EQUAL = 0x3D; +const GREATER = 0x3E; +const QUESTION = 0x3F; +const OPEN_BRACKET = 0x5B; +const CLOSE_BRACKET = 0x5D; +const NEL = 0x85; +const LS = 0x2028; // Line Separator +const isQuote = c => c === DQUOTE || c === SQUOTE; +const QUOTES = [DQUOTE, SQUOTE]; +const DOCTYPE_TERMINATOR = [...QUOTES, OPEN_BRACKET, GREATER]; +const DTD_TERMINATOR = [...QUOTES, LESS, CLOSE_BRACKET]; +const XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION, ...S_LIST]; +const ATTRIB_VALUE_UNQUOTED_TERMINATOR = [...S_LIST, GREATER, AMP, LESS]; +function nsPairCheck(parser, prefix, uri) { + switch (prefix) { + case "xml": + if (uri !== XML_NAMESPACE) { + parser.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`); + } + break; + case "xmlns": + if (uri !== XMLNS_NAMESPACE) { + parser.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`); + } + break; + default: + } + switch (uri) { + case XMLNS_NAMESPACE: + parser.fail(prefix === "" ? `the default namespace may not be set to ${uri}.` : `may not assign a prefix (even "xmlns") to the URI \ +${XMLNS_NAMESPACE}.`); + break; + case XML_NAMESPACE: + switch (prefix) { + case "xml": + // Assinging the XML namespace to "xml" is fine. + break; + case "": + parser.fail(`the default namespace may not be set to ${uri}.`); + break; + default: + parser.fail("may not assign the xml namespace to another prefix."); + } + break; + default: + } +} +function nsMappingCheck(parser, mapping) { + for (const local of Object.keys(mapping)) { + nsPairCheck(parser, local, mapping[local]); + } +} +const isNCName = name => NC_NAME_RE.test(name); +const isName = name => NAME_RE.test(name); +const FORBIDDEN_START = 0; +const FORBIDDEN_BRACKET = 1; +const FORBIDDEN_BRACKET_BRACKET = 2; +/** + * The list of supported events. + */ +exports.EVENTS = ["xmldecl", "text", "processinginstruction", "doctype", "comment", "opentagstart", "attribute", "opentag", "closetag", "cdata", "error", "end", "ready"]; +const EVENT_NAME_TO_HANDLER_NAME = { + xmldecl: "xmldeclHandler", + text: "textHandler", + processinginstruction: "piHandler", + doctype: "doctypeHandler", + comment: "commentHandler", + opentagstart: "openTagStartHandler", + attribute: "attributeHandler", + opentag: "openTagHandler", + closetag: "closeTagHandler", + cdata: "cdataHandler", + error: "errorHandler", + end: "endHandler", + ready: "readyHandler" +}; +class SaxesParser { + /** + * @param opt The parser options. + */ + constructor(opt) { + this.opt = opt !== null && opt !== void 0 ? opt : {}; + this.fragmentOpt = !!this.opt.fragment; + const xmlnsOpt = this.xmlnsOpt = !!this.opt.xmlns; + this.trackPosition = this.opt.position !== false; + this.fileName = this.opt.fileName; + if (xmlnsOpt) { + // This is the function we use to perform name checks on PIs and entities. + // When namespaces are used, colons are not allowed in PI target names or + // entity names. So the check depends on whether namespaces are used. See: + // + // https://www.w3.org/XML/xml-names-19990114-errata.html + // NE08 + // + this.nameStartCheck = isNCNameStartChar; + this.nameCheck = isNCNameChar; + this.isName = isNCName; + // eslint-disable-next-line @typescript-eslint/unbound-method + this.processAttribs = this.processAttribsNS; + // eslint-disable-next-line @typescript-eslint/unbound-method + this.pushAttrib = this.pushAttribNS; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.ns = Object.assign({ + __proto__: null + }, rootNS); + const additional = this.opt.additionalNamespaces; + if (additional != null) { + nsMappingCheck(this, additional); + Object.assign(this.ns, additional); + } + } else { + this.nameStartCheck = isNameStartChar; + this.nameCheck = isNameChar; + this.isName = isName; + // eslint-disable-next-line @typescript-eslint/unbound-method + this.processAttribs = this.processAttribsPlain; + // eslint-disable-next-line @typescript-eslint/unbound-method + this.pushAttrib = this.pushAttribPlain; + } + // + // The order of the members in this table needs to correspond to the state + // numbers given to the states that correspond to the methods being recorded + // here. + // + this.stateTable = [/* eslint-disable @typescript-eslint/unbound-method */ + this.sBegin, this.sBeginWhitespace, this.sDoctype, this.sDoctypeQuote, this.sDTD, this.sDTDQuoted, this.sDTDOpenWaka, this.sDTDOpenWakaBang, this.sDTDComment, this.sDTDCommentEnding, this.sDTDCommentEnded, this.sDTDPI, this.sDTDPIEnding, this.sText, this.sEntity, this.sOpenWaka, this.sOpenWakaBang, this.sComment, this.sCommentEnding, this.sCommentEnded, this.sCData, this.sCDataEnding, this.sCDataEnding2, this.sPIFirstChar, this.sPIRest, this.sPIBody, this.sPIEnding, this.sXMLDeclNameStart, this.sXMLDeclName, this.sXMLDeclEq, this.sXMLDeclValueStart, this.sXMLDeclValue, this.sXMLDeclSeparator, this.sXMLDeclEnding, this.sOpenTag, this.sOpenTagSlash, this.sAttrib, this.sAttribName, this.sAttribNameSawWhite, this.sAttribValue, this.sAttribValueQuoted, this.sAttribValueClosed, this.sAttribValueUnquoted, this.sCloseTag, this.sCloseTagSawWhite]; + this._init(); + } + /** + * Indicates whether or not the parser is closed. If ``true``, wait for + * the ``ready`` event to write again. + */ + get closed() { + return this._closed; + } + _init() { + var _a; + this.openWakaBang = ""; + this.text = ""; + this.name = ""; + this.piTarget = ""; + this.entity = ""; + this.q = null; + this.tags = []; + this.tag = null; + this.topNS = null; + this.chunk = ""; + this.chunkPosition = 0; + this.i = 0; + this.prevI = 0; + this.carriedFromPrevious = undefined; + this.forbiddenState = FORBIDDEN_START; + this.attribList = []; + // The logic is organized so as to minimize the need to check + // this.opt.fragment while parsing. + const { + fragmentOpt + } = this; + this.state = fragmentOpt ? S_TEXT : S_BEGIN; + // We want these to be all true if we are dealing with a fragment. + this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot = this.sawRoot = fragmentOpt; + // An XML declaration is intially possible only when parsing whole + // documents. + this.xmlDeclPossible = !fragmentOpt; + this.xmlDeclExpects = ["version"]; + this.entityReturnState = undefined; + let { + defaultXMLVersion + } = this.opt; + if (defaultXMLVersion === undefined) { + if (this.opt.forceXMLVersion === true) { + throw new Error("forceXMLVersion set but defaultXMLVersion is not set"); + } + defaultXMLVersion = "1.0"; + } + this.setXMLVersion(defaultXMLVersion); + this.positionAtNewLine = 0; + this.doctype = false; + this._closed = false; + this.xmlDecl = { + version: undefined, + encoding: undefined, + standalone: undefined + }; + this.line = 1; + this.column = 0; + this.ENTITIES = Object.create(XML_ENTITIES); + // eslint-disable-next-line no-unused-expressions + (_a = this.readyHandler) === null || _a === void 0 ? void 0 : _a.call(this); + } + /** + * The stream position the parser is currently looking at. This field is + * zero-based. + * + * This field is not based on counting Unicode characters but is to be + * interpreted as a plain index into a JavaScript string. + */ + get position() { + return this.chunkPosition + this.i; + } + /** + * The column number of the next character to be read by the parser. * + * This field is zero-based. (The first column in a line is 0.) + * + * This field reports the index at which the next character would be in the + * line if the line were represented as a JavaScript string. Note that this + * *can* be different to a count based on the number of *Unicode characters* + * due to how JavaScript handles astral plane characters. + * + * See [[column]] for a number that corresponds to a count of Unicode + * characters. + */ + get columnIndex() { + return this.position - this.positionAtNewLine; + } + /** + * Set an event listener on an event. The parser supports one handler per + * event type. If you try to set an event handler over an existing handler, + * the old handler is silently overwritten. + * + * @param name The event to listen to. + * + * @param handler The handler to set. + */ + on(name, handler) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this[EVENT_NAME_TO_HANDLER_NAME[name]] = handler; + } + /** + * Unset an event handler. + * + * @parma name The event to stop listening to. + */ + off(name) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this[EVENT_NAME_TO_HANDLER_NAME[name]] = undefined; + } + /** + * Make an error object. The error object will have a message that contains + * the ``fileName`` option passed at the creation of the parser. If position + * tracking was turned on, it will also have line and column number + * information. + * + * @param message The message describing the error to report. + * + * @returns An error object with a properly formatted message. + */ + makeError(message) { + var _a; + let msg = (_a = this.fileName) !== null && _a !== void 0 ? _a : ""; + if (this.trackPosition) { + if (msg.length > 0) { + msg += ":"; + } + msg += `${this.line}:${this.column}`; + } + if (msg.length > 0) { + msg += ": "; + } + return new Error(msg + message); + } + /** + * Report a parsing error. This method is made public so that client code may + * check for issues that are outside the scope of this project and can report + * errors. + * + * @param message The error to report. + * + * @returns this + */ + fail(message) { + const err = this.makeError(message); + const handler = this.errorHandler; + if (handler === undefined) { + throw err; + } else { + handler(err); + } + return this; + } + /** + * Write a XML data to the parser. + * + * @param chunk The XML data to write. + * + * @returns this + */ + write(chunk) { + if (this.closed) { + return this.fail("cannot write after close; assign an onready handler."); + } + let end = false; + if (chunk === null) { + // We cannot return immediately because carriedFromPrevious may need + // processing. + end = true; + chunk = ""; + } else if (typeof chunk === "object") { + chunk = chunk.toString(); + } + // We checked if performing a pre-decomposition of the string into an array + // of single complete characters (``Array.from(chunk)``) would be faster + // than the current repeated calls to ``charCodeAt``. As of August 2018, it + // isn't. (There may be Node-specific code that would perform faster than + // ``Array.from`` but don't want to be dependent on Node.) + if (this.carriedFromPrevious !== undefined) { + // The previous chunk had char we must carry over. + chunk = `${this.carriedFromPrevious}${chunk}`; + this.carriedFromPrevious = undefined; + } + let limit = chunk.length; + const lastCode = chunk.charCodeAt(limit - 1); + if (!end && ( + // A trailing CR or surrogate must be carried over to the next + // chunk. + lastCode === CR || lastCode >= 0xD800 && lastCode <= 0xDBFF)) { + // The chunk ends with a character that must be carried over. We cannot + // know how to handle it until we get the next chunk or the end of the + // stream. So save it for later. + this.carriedFromPrevious = chunk[limit - 1]; + limit--; + chunk = chunk.slice(0, limit); + } + const { + stateTable + } = this; + this.chunk = chunk; + this.i = 0; + while (this.i < limit) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + stateTable[this.state].call(this); + } + this.chunkPosition += limit; + return end ? this.end() : this; + } + /** + * Close the current stream. Perform final well-formedness checks and reset + * the parser tstate. + * + * @returns this + */ + close() { + return this.write(null); + } + /** + * Get a single code point out of the current chunk. This updates the current + * position if we do position tracking. + * + * This is the algorithm to use for XML 1.0. + * + * @returns The character read. + */ + getCode10() { + const { + chunk, + i + } = this; + this.prevI = i; + // Yes, we do this instead of doing this.i++. Doing it this way, we do not + // read this.i again, which is a bit faster. + this.i = i + 1; + if (i >= chunk.length) { + return EOC; + } + // Using charCodeAt and handling the surrogates ourselves is faster + // than using codePointAt. + const code = chunk.charCodeAt(i); + this.column++; + if (code < 0xD800) { + if (code >= SPACE || code === TAB) { + return code; + } + switch (code) { + case NL: + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL; + case CR: + // We may get NaN if we read past the end of the chunk, which is fine. + if (chunk.charCodeAt(i + 1) === NL) { + // A \r\n sequence is converted to \n so we have to skip over the + // next character. We already know it has a size of 1 so ++ is fine + // here. + this.i = i + 2; + } + // Otherwise, a \r is just converted to \n, so we don't have to skip + // ahead. + // In either case, \r becomes \n. + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL_LIKE; + default: + // If we get here, then code < SPACE and it is not NL CR or TAB. + this.fail("disallowed character."); + return code; + } + } + if (code > 0xDBFF) { + // This is a specialized version of isChar10 that takes into account + // that in this context code > 0xDBFF and code <= 0xFFFF. So it does not + // test cases that don't need testing. + if (!(code >= 0xE000 && code <= 0xFFFD)) { + this.fail("disallowed character."); + } + return code; + } + const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00); + this.i = i + 2; + // This is a specialized version of isChar10 that takes into account that in + // this context necessarily final >= 0x10000. + if (final > 0x10FFFF) { + this.fail("disallowed character."); + } + return final; + } + /** + * Get a single code point out of the current chunk. This updates the current + * position if we do position tracking. + * + * This is the algorithm to use for XML 1.1. + * + * @returns {number} The character read. + */ + getCode11() { + const { + chunk, + i + } = this; + this.prevI = i; + // Yes, we do this instead of doing this.i++. Doing it this way, we do not + // read this.i again, which is a bit faster. + this.i = i + 1; + if (i >= chunk.length) { + return EOC; + } + // Using charCodeAt and handling the surrogates ourselves is faster + // than using codePointAt. + const code = chunk.charCodeAt(i); + this.column++; + if (code < 0xD800) { + if (code > 0x1F && code < 0x7F || code > 0x9F && code !== LS || code === TAB) { + return code; + } + switch (code) { + case NL: + // 0xA + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL; + case CR: + { + // 0xD + // We may get NaN if we read past the end of the chunk, which is + // fine. + const next = chunk.charCodeAt(i + 1); + if (next === NL || next === NEL) { + // A CR NL or CR NEL sequence is converted to NL so we have to skip + // over the next character. We already know it has a size of 1. + this.i = i + 2; + } + // Otherwise, a CR is just converted to NL, no skip. + } + /* yes, fall through */ + case NEL: // 0x85 + case LS: + // Ox2028 + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL_LIKE; + default: + this.fail("disallowed character."); + return code; + } + } + if (code > 0xDBFF) { + // This is a specialized version of isCharAndNotRestricted that takes into + // account that in this context code > 0xDBFF and code <= 0xFFFF. So it + // does not test cases that don't need testing. + if (!(code >= 0xE000 && code <= 0xFFFD)) { + this.fail("disallowed character."); + } + return code; + } + const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00); + this.i = i + 2; + // This is a specialized version of isCharAndNotRestricted that takes into + // account that in this context necessarily final >= 0x10000. + if (final > 0x10FFFF) { + this.fail("disallowed character."); + } + return final; + } + /** + * Like ``getCode`` but with the return value normalized so that ``NL`` is + * returned for ``NL_LIKE``. + */ + getCodeNorm() { + const c = this.getCode(); + return c === NL_LIKE ? NL : c; + } + unget() { + this.i = this.prevI; + this.column--; + } + /** + * Capture characters into a buffer until encountering one of a set of + * characters. + * + * @param chars An array of codepoints. Encountering a character in the array + * ends the capture. (``chars`` may safely contain ``NL``.) + * + * @return The character code that made the capture end, or ``EOC`` if we hit + * the end of the chunk. The return value cannot be NL_LIKE: NL is returned + * instead. + */ + captureTo(chars) { + let { + i: start + } = this; + const { + chunk + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + const c = this.getCode(); + const isNLLike = c === NL_LIKE; + const final = isNLLike ? NL : c; + if (final === EOC || chars.includes(final)) { + this.text += chunk.slice(start, this.prevI); + return final; + } + if (isNLLike) { + this.text += `${chunk.slice(start, this.prevI)}\n`; + start = this.i; + } + } + } + /** + * Capture characters into a buffer until encountering a character. + * + * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT + * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior. + * + * @return ``true`` if we ran into the character. Otherwise, we ran into the + * end of the current chunk. + */ + captureToChar(char) { + let { + i: start + } = this; + const { + chunk + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + let c = this.getCode(); + switch (c) { + case NL_LIKE: + this.text += `${chunk.slice(start, this.prevI)}\n`; + start = this.i; + c = NL; + break; + case EOC: + this.text += chunk.slice(start); + return false; + default: + } + if (c === char) { + this.text += chunk.slice(start, this.prevI); + return true; + } + } + } + /** + * Capture characters that satisfy ``isNameChar`` into the ``name`` field of + * this parser. + * + * @return The character code that made the test fail, or ``EOC`` if we hit + * the end of the chunk. The return value cannot be NL_LIKE: NL is returned + * instead. + */ + captureNameChars() { + const { + chunk, + i: start + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + const c = this.getCode(); + if (c === EOC) { + this.name += chunk.slice(start); + return EOC; + } + // NL is not a name char so we don't have to test specifically for it. + if (!isNameChar(c)) { + this.name += chunk.slice(start, this.prevI); + return c === NL_LIKE ? NL : c; + } + } + } + /** + * Skip white spaces. + * + * @return The character that ended the skip, or ``EOC`` if we hit + * the end of the chunk. The return value cannot be NL_LIKE: NL is returned + * instead. + */ + skipSpaces() { + // eslint-disable-next-line no-constant-condition + while (true) { + const c = this.getCodeNorm(); + if (c === EOC || !isS(c)) { + return c; + } + } + } + setXMLVersion(version) { + this.currentXMLVersion = version; + /* eslint-disable @typescript-eslint/unbound-method */ + if (version === "1.0") { + this.isChar = isChar10; + this.getCode = this.getCode10; + } else { + this.isChar = isChar11; + this.getCode = this.getCode11; + } + /* eslint-enable @typescript-eslint/unbound-method */ + } + // STATE ENGINE METHODS + // This needs to be a state separate from S_BEGIN_WHITESPACE because we want + // to be sure never to come back to this state later. + sBegin() { + // We are essentially peeking at the first character of the chunk. Since + // S_BEGIN can be in effect only when we start working on the first chunk, + // the index at which we must look is necessarily 0. Note also that the + // following test does not depend on decoding surrogates. + // If the initial character is 0xFEFF, ignore it. + if (this.chunk.charCodeAt(0) === 0xFEFF) { + this.i++; + this.column++; + } + this.state = S_BEGIN_WHITESPACE; + } + sBeginWhitespace() { + // We need to know whether we've encountered spaces or not because as soon + // as we run into a space, an XML declaration is no longer possible. Rather + // than slow down skipSpaces even in places where we don't care whether it + // skipped anything or not, we check whether prevI is equal to the value of + // i from before we skip spaces. + const iBefore = this.i; + const c = this.skipSpaces(); + if (this.prevI !== iBefore) { + this.xmlDeclPossible = false; + } + switch (c) { + case LESS: + this.state = S_OPEN_WAKA; + // We could naively call closeText but in this state, it is not normal + // to have text be filled with any data. + if (this.text.length !== 0) { + throw new Error("no-empty text at start"); + } + break; + case EOC: + break; + default: + this.unget(); + this.state = S_TEXT; + this.xmlDeclPossible = false; + } + } + sDoctype() { + var _a; + const c = this.captureTo(DOCTYPE_TERMINATOR); + switch (c) { + case GREATER: + { + // eslint-disable-next-line no-unused-expressions + (_a = this.doctypeHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text); + this.text = ""; + this.state = S_TEXT; + this.doctype = true; // just remember that we saw it. + break; + } + case EOC: + break; + default: + this.text += String.fromCodePoint(c); + if (c === OPEN_BRACKET) { + this.state = S_DTD; + } else if (isQuote(c)) { + this.state = S_DOCTYPE_QUOTE; + this.q = c; + } + } + } + sDoctypeQuote() { + const q = this.q; + if (this.captureToChar(q)) { + this.text += String.fromCodePoint(q); + this.q = null; + this.state = S_DOCTYPE; + } + } + sDTD() { + const c = this.captureTo(DTD_TERMINATOR); + if (c === EOC) { + return; + } + this.text += String.fromCodePoint(c); + if (c === CLOSE_BRACKET) { + this.state = S_DOCTYPE; + } else if (c === LESS) { + this.state = S_DTD_OPEN_WAKA; + } else if (isQuote(c)) { + this.state = S_DTD_QUOTED; + this.q = c; + } + } + sDTDQuoted() { + const q = this.q; + if (this.captureToChar(q)) { + this.text += String.fromCodePoint(q); + this.state = S_DTD; + this.q = null; + } + } + sDTDOpenWaka() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + switch (c) { + case BANG: + this.state = S_DTD_OPEN_WAKA_BANG; + this.openWakaBang = ""; + break; + case QUESTION: + this.state = S_DTD_PI; + break; + default: + this.state = S_DTD; + } + } + sDTDOpenWakaBang() { + const char = String.fromCodePoint(this.getCodeNorm()); + const owb = this.openWakaBang += char; + this.text += char; + if (owb !== "-") { + this.state = owb === "--" ? S_DTD_COMMENT : S_DTD; + this.openWakaBang = ""; + } + } + sDTDComment() { + if (this.captureToChar(MINUS)) { + this.text += "-"; + this.state = S_DTD_COMMENT_ENDING; + } + } + sDTDCommentEnding() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT; + } + sDTDCommentEnded() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + if (c === GREATER) { + this.state = S_DTD; + } else { + this.fail("malformed comment."); + // will be recorded as + // a comment of " blah -- bloo " + this.state = S_DTD_COMMENT; + } + } + sDTDPI() { + if (this.captureToChar(QUESTION)) { + this.text += "?"; + this.state = S_DTD_PI_ENDING; + } + } + sDTDPIEnding() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + if (c === GREATER) { + this.state = S_DTD; + } + } + sText() { + // + // We did try a version of saxes where the S_TEXT state was split in two + // states: one for text inside the root element, and one for text + // outside. This was avoiding having to test this.tags.length to decide + // what implementation to actually use. + // + // Peformance testing on gigabyte-size files did not show any advantage to + // using the two states solution instead of the current one. Conversely, it + // made the code a bit more complicated elsewhere. For instance, a comment + // can appear before the root element so when a comment ended it was + // necessary to determine whether to return to the S_TEXT state or to the + // new text-outside-root state. + // + if (this.tags.length !== 0) { + this.handleTextInRoot(); + } else { + this.handleTextOutsideRoot(); + } + } + sEntity() { + // This is essentially a specialized version of captureToChar(SEMICOLON...) + let { + i: start + } = this; + const { + chunk + } = this; + // eslint-disable-next-line no-labels, no-restricted-syntax + loop: + // eslint-disable-next-line no-constant-condition + while (true) { + switch (this.getCode()) { + case NL_LIKE: + this.entity += `${chunk.slice(start, this.prevI)}\n`; + start = this.i; + break; + case SEMICOLON: + { + const { + entityReturnState + } = this; + const entity = this.entity + chunk.slice(start, this.prevI); + this.state = entityReturnState; + let parsed; + if (entity === "") { + this.fail("empty entity name."); + parsed = "&;"; + } else { + parsed = this.parseEntity(entity); + this.entity = ""; + } + if (entityReturnState !== S_TEXT || this.textHandler !== undefined) { + this.text += parsed; + } + // eslint-disable-next-line no-labels + break loop; + } + case EOC: + this.entity += chunk.slice(start); + // eslint-disable-next-line no-labels + break loop; + default: + } + } + } + sOpenWaka() { + // Reminder: a state handler is called with at least one character + // available in the current chunk. So the first call to get code inside of + // a state handler cannot return ``EOC``. That's why we don't test + // for it. + const c = this.getCode(); + // either a /, ?, !, or text is coming next. + if (isNameStartChar(c)) { + this.state = S_OPEN_TAG; + this.unget(); + this.xmlDeclPossible = false; + } else { + switch (c) { + case FORWARD_SLASH: + this.state = S_CLOSE_TAG; + this.xmlDeclPossible = false; + break; + case BANG: + this.state = S_OPEN_WAKA_BANG; + this.openWakaBang = ""; + this.xmlDeclPossible = false; + break; + case QUESTION: + this.state = S_PI_FIRST_CHAR; + break; + default: + this.fail("disallowed character in tag name"); + this.state = S_TEXT; + this.xmlDeclPossible = false; + } + } + } + sOpenWakaBang() { + this.openWakaBang += String.fromCodePoint(this.getCodeNorm()); + switch (this.openWakaBang) { + case "[CDATA[": + if (!this.sawRoot && !this.reportedTextBeforeRoot) { + this.fail("text data outside of root node."); + this.reportedTextBeforeRoot = true; + } + if (this.closedRoot && !this.reportedTextAfterRoot) { + this.fail("text data outside of root node."); + this.reportedTextAfterRoot = true; + } + this.state = S_CDATA; + this.openWakaBang = ""; + break; + case "--": + this.state = S_COMMENT; + this.openWakaBang = ""; + break; + case "DOCTYPE": + this.state = S_DOCTYPE; + if (this.doctype || this.sawRoot) { + this.fail("inappropriately located doctype declaration."); + } + this.openWakaBang = ""; + break; + default: + // 7 happens to be the maximum length of the string that can possibly + // match one of the cases above. + if (this.openWakaBang.length >= 7) { + this.fail("incorrect syntax."); + } + } + } + sComment() { + if (this.captureToChar(MINUS)) { + this.state = S_COMMENT_ENDING; + } + } + sCommentEnding() { + var _a; + const c = this.getCodeNorm(); + if (c === MINUS) { + this.state = S_COMMENT_ENDED; + // eslint-disable-next-line no-unused-expressions + (_a = this.commentHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text); + this.text = ""; + } else { + this.text += `-${String.fromCodePoint(c)}`; + this.state = S_COMMENT; + } + } + sCommentEnded() { + const c = this.getCodeNorm(); + if (c !== GREATER) { + this.fail("malformed comment."); + // will be recorded as + // a comment of " blah -- bloo " + this.text += `--${String.fromCodePoint(c)}`; + this.state = S_COMMENT; + } else { + this.state = S_TEXT; + } + } + sCData() { + if (this.captureToChar(CLOSE_BRACKET)) { + this.state = S_CDATA_ENDING; + } + } + sCDataEnding() { + const c = this.getCodeNorm(); + if (c === CLOSE_BRACKET) { + this.state = S_CDATA_ENDING_2; + } else { + this.text += `]${String.fromCodePoint(c)}`; + this.state = S_CDATA; + } + } + sCDataEnding2() { + var _a; + const c = this.getCodeNorm(); + switch (c) { + case GREATER: + { + // eslint-disable-next-line no-unused-expressions + (_a = this.cdataHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text); + this.text = ""; + this.state = S_TEXT; + break; + } + case CLOSE_BRACKET: + this.text += "]"; + break; + default: + this.text += `]]${String.fromCodePoint(c)}`; + this.state = S_CDATA; + } + } + // We need this separate state to check the first character fo the pi target + // with this.nameStartCheck which allows less characters than this.nameCheck. + sPIFirstChar() { + const c = this.getCodeNorm(); + // This is first because in the case where the file is well-formed this is + // the branch taken. We optimize for well-formedness. + if (this.nameStartCheck(c)) { + this.piTarget += String.fromCodePoint(c); + this.state = S_PI_REST; + } else if (c === QUESTION || isS(c)) { + this.fail("processing instruction without a target."); + this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY; + } else { + this.fail("disallowed character in processing instruction name."); + this.piTarget += String.fromCodePoint(c); + this.state = S_PI_REST; + } + } + sPIRest() { + // Capture characters into a piTarget while ``this.nameCheck`` run on the + // character read returns true. + const { + chunk, + i: start + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + const c = this.getCodeNorm(); + if (c === EOC) { + this.piTarget += chunk.slice(start); + return; + } + // NL cannot satisfy this.nameCheck so we don't have to test specifically + // for it. + if (!this.nameCheck(c)) { + this.piTarget += chunk.slice(start, this.prevI); + const isQuestion = c === QUESTION; + if (isQuestion || isS(c)) { + if (this.piTarget === "xml") { + if (!this.xmlDeclPossible) { + this.fail("an XML declaration must be at the start of the document."); + } + this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START; + } else { + this.state = isQuestion ? S_PI_ENDING : S_PI_BODY; + } + } else { + this.fail("disallowed character in processing instruction name."); + this.piTarget += String.fromCodePoint(c); + } + break; + } + } + } + sPIBody() { + if (this.text.length === 0) { + const c = this.getCodeNorm(); + if (c === QUESTION) { + this.state = S_PI_ENDING; + } else if (!isS(c)) { + this.text = String.fromCodePoint(c); + } + } + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + else if (this.captureToChar(QUESTION)) { + this.state = S_PI_ENDING; + } + } + sPIEnding() { + var _a; + const c = this.getCodeNorm(); + if (c === GREATER) { + const { + piTarget + } = this; + if (piTarget.toLowerCase() === "xml") { + this.fail("the XML declaration must appear at the start of the document."); + } + // eslint-disable-next-line no-unused-expressions + (_a = this.piHandler) === null || _a === void 0 ? void 0 : _a.call(this, { + target: piTarget, + body: this.text + }); + this.piTarget = this.text = ""; + this.state = S_TEXT; + } else if (c === QUESTION) { + // We ran into ?? as part of a processing instruction. We initially took + // the first ? as a sign that the PI was ending, but it is not. So we have + // to add it to the body but we take the new ? as a sign that the PI is + // ending. + this.text += "?"; + } else { + this.text += `?${String.fromCodePoint(c)}`; + this.state = S_PI_BODY; + } + this.xmlDeclPossible = false; + } + sXMLDeclNameStart() { + const c = this.skipSpaces(); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + // It is valid to go to S_XML_DECL_ENDING from this state. + this.state = S_XML_DECL_ENDING; + return; + } + if (c !== EOC) { + this.state = S_XML_DECL_NAME; + this.name = String.fromCodePoint(c); + } + } + sXMLDeclName() { + const c = this.captureTo(XML_DECL_NAME_TERMINATOR); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.name += this.text; + this.text = ""; + this.fail("XML declaration is incomplete."); + return; + } + if (!(isS(c) || c === EQUAL)) { + return; + } + this.name += this.text; + this.text = ""; + if (!this.xmlDeclExpects.includes(this.name)) { + switch (this.name.length) { + case 0: + this.fail("did not expect any more name/value pairs."); + break; + case 1: + this.fail(`expected the name ${this.xmlDeclExpects[0]}.`); + break; + default: + this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`); + } + } + this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ; + } + sXMLDeclEq() { + const c = this.getCodeNorm(); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.fail("XML declaration is incomplete."); + return; + } + if (isS(c)) { + return; + } + if (c !== EQUAL) { + this.fail("value required."); + } + this.state = S_XML_DECL_VALUE_START; + } + sXMLDeclValueStart() { + const c = this.getCodeNorm(); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.fail("XML declaration is incomplete."); + return; + } + if (isS(c)) { + return; + } + if (!isQuote(c)) { + this.fail("value must be quoted."); + this.q = SPACE; + } else { + this.q = c; + } + this.state = S_XML_DECL_VALUE; + } + sXMLDeclValue() { + const c = this.captureTo([this.q, QUESTION]); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.text = ""; + this.fail("XML declaration is incomplete."); + return; + } + if (c === EOC) { + return; + } + const value = this.text; + this.text = ""; + switch (this.name) { + case "version": + { + this.xmlDeclExpects = ["encoding", "standalone"]; + const version = value; + this.xmlDecl.version = version; + // This is the test specified by XML 1.0 but it is fine for XML 1.1. + if (!/^1\.[0-9]+$/.test(version)) { + this.fail("version number must match /^1\\.[0-9]+$/."); + } + // When forceXMLVersion is set, the XML declaration is ignored. + else if (!this.opt.forceXMLVersion) { + this.setXMLVersion(version); + } + break; + } + case "encoding": + if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) { + this.fail("encoding value must match \ +/^[A-Za-z0-9][A-Za-z0-9._-]*$/."); + } + this.xmlDeclExpects = ["standalone"]; + this.xmlDecl.encoding = value; + break; + case "standalone": + if (value !== "yes" && value !== "no") { + this.fail("standalone value must match \"yes\" or \"no\"."); + } + this.xmlDeclExpects = []; + this.xmlDecl.standalone = value; + break; + default: + // We don't need to raise an error here since we've already raised one + // when checking what name was expected. + } + + this.name = ""; + this.state = S_XML_DECL_SEPARATOR; + } + sXMLDeclSeparator() { + const c = this.getCodeNorm(); + // The question mark character is not valid inside any of the XML + // declaration name/value pairs. + if (c === QUESTION) { + // It is valid to go to S_XML_DECL_ENDING from this state. + this.state = S_XML_DECL_ENDING; + return; + } + if (!isS(c)) { + this.fail("whitespace required."); + this.unget(); + } + this.state = S_XML_DECL_NAME_START; + } + sXMLDeclEnding() { + var _a; + const c = this.getCodeNorm(); + if (c === GREATER) { + if (this.piTarget !== "xml") { + this.fail("processing instructions are not allowed before root."); + } else if (this.name !== "version" && this.xmlDeclExpects.includes("version")) { + this.fail("XML declaration must contain a version."); + } + // eslint-disable-next-line no-unused-expressions + (_a = this.xmldeclHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.xmlDecl); + this.name = ""; + this.piTarget = this.text = ""; + this.state = S_TEXT; + } else { + // We got here because the previous character was a ?, but the question + // mark character is not valid inside any of the XML declaration + // name/value pairs. + this.fail("The character ? is disallowed anywhere in XML declarations."); + } + this.xmlDeclPossible = false; + } + sOpenTag() { + var _a; + const c = this.captureNameChars(); + if (c === EOC) { + return; + } + const tag = this.tag = { + name: this.name, + attributes: Object.create(null) + }; + this.name = ""; + if (this.xmlnsOpt) { + this.topNS = tag.ns = Object.create(null); + } + // eslint-disable-next-line no-unused-expressions + (_a = this.openTagStartHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag); + this.sawRoot = true; + if (!this.fragmentOpt && this.closedRoot) { + this.fail("documents may contain only one root."); + } + switch (c) { + case GREATER: + this.openTag(); + break; + case FORWARD_SLASH: + this.state = S_OPEN_TAG_SLASH; + break; + default: + if (!isS(c)) { + this.fail("disallowed character in tag name."); + } + this.state = S_ATTRIB; + } + } + sOpenTagSlash() { + if (this.getCode() === GREATER) { + this.openSelfClosingTag(); + } else { + this.fail("forward-slash in opening tag not followed by >."); + this.state = S_ATTRIB; + } + } + sAttrib() { + const c = this.skipSpaces(); + if (c === EOC) { + return; + } + if (isNameStartChar(c)) { + this.unget(); + this.state = S_ATTRIB_NAME; + } else if (c === GREATER) { + this.openTag(); + } else if (c === FORWARD_SLASH) { + this.state = S_OPEN_TAG_SLASH; + } else { + this.fail("disallowed character in attribute name."); + } + } + sAttribName() { + const c = this.captureNameChars(); + if (c === EQUAL) { + this.state = S_ATTRIB_VALUE; + } else if (isS(c)) { + this.state = S_ATTRIB_NAME_SAW_WHITE; + } else if (c === GREATER) { + this.fail("attribute without value."); + this.pushAttrib(this.name, this.name); + this.name = this.text = ""; + this.openTag(); + } else if (c !== EOC) { + this.fail("disallowed character in attribute name."); + } + } + sAttribNameSawWhite() { + const c = this.skipSpaces(); + switch (c) { + case EOC: + return; + case EQUAL: + this.state = S_ATTRIB_VALUE; + break; + default: + this.fail("attribute without value."); + // Should we do this??? + // this.tag.attributes[this.name] = ""; + this.text = ""; + this.name = ""; + if (c === GREATER) { + this.openTag(); + } else if (isNameStartChar(c)) { + this.unget(); + this.state = S_ATTRIB_NAME; + } else { + this.fail("disallowed character in attribute name."); + this.state = S_ATTRIB; + } + } + } + sAttribValue() { + const c = this.getCodeNorm(); + if (isQuote(c)) { + this.q = c; + this.state = S_ATTRIB_VALUE_QUOTED; + } else if (!isS(c)) { + this.fail("unquoted attribute value."); + this.state = S_ATTRIB_VALUE_UNQUOTED; + this.unget(); + } + } + sAttribValueQuoted() { + // We deliberately do not use captureTo here. The specialized code we use + // here is faster than using captureTo. + const { + q, + chunk + } = this; + let { + i: start + } = this; + // eslint-disable-next-line no-constant-condition + while (true) { + switch (this.getCode()) { + case q: + this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI)); + this.name = this.text = ""; + this.q = null; + this.state = S_ATTRIB_VALUE_CLOSED; + return; + case AMP: + this.text += chunk.slice(start, this.prevI); + this.state = S_ENTITY; + this.entityReturnState = S_ATTRIB_VALUE_QUOTED; + return; + case NL: + case NL_LIKE: + case TAB: + this.text += `${chunk.slice(start, this.prevI)} `; + start = this.i; + break; + case LESS: + this.text += chunk.slice(start, this.prevI); + this.fail("disallowed character."); + return; + case EOC: + this.text += chunk.slice(start); + return; + default: + } + } + } + sAttribValueClosed() { + const c = this.getCodeNorm(); + if (isS(c)) { + this.state = S_ATTRIB; + } else if (c === GREATER) { + this.openTag(); + } else if (c === FORWARD_SLASH) { + this.state = S_OPEN_TAG_SLASH; + } else if (isNameStartChar(c)) { + this.fail("no whitespace between attributes."); + this.unget(); + this.state = S_ATTRIB_NAME; + } else { + this.fail("disallowed character in attribute name."); + } + } + sAttribValueUnquoted() { + // We don't do anything regarding EOL or space handling for unquoted + // attributes. We already have failed by the time we get here, and the + // contract that saxes upholds states that upon failure, it is not safe to + // rely on the data passed to event handlers (other than + // ``onerror``). Passing "bad" data is not a problem. + const c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR); + switch (c) { + case AMP: + this.state = S_ENTITY; + this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED; + break; + case LESS: + this.fail("disallowed character."); + break; + case EOC: + break; + default: + if (this.text.includes("]]>")) { + this.fail("the string \"]]>\" is disallowed in char data."); + } + this.pushAttrib(this.name, this.text); + this.name = this.text = ""; + if (c === GREATER) { + this.openTag(); + } else { + this.state = S_ATTRIB; + } + } + } + sCloseTag() { + const c = this.captureNameChars(); + if (c === GREATER) { + this.closeTag(); + } else if (isS(c)) { + this.state = S_CLOSE_TAG_SAW_WHITE; + } else if (c !== EOC) { + this.fail("disallowed character in closing tag."); + } + } + sCloseTagSawWhite() { + switch (this.skipSpaces()) { + case GREATER: + this.closeTag(); + break; + case EOC: + break; + default: + this.fail("disallowed character in closing tag."); + } + } + // END OF STATE ENGINE METHODS + handleTextInRoot() { + // This is essentially a specialized version of captureTo which is optimized + // for performing the ]]> check. A previous version of this code, checked + // ``this.text`` for the presence of ]]>. It simplified the code but was + // very costly when character data contained a lot of entities to be parsed. + // + // Since we are using a specialized loop, we also keep track of the presence + // of ]]> in text data. The sequence ]]> is forbidden to appear as-is. + // + let { + i: start, + forbiddenState + } = this; + const { + chunk, + textHandler: handler + } = this; + // eslint-disable-next-line no-labels, no-restricted-syntax + scanLoop: + // eslint-disable-next-line no-constant-condition + while (true) { + switch (this.getCode()) { + case LESS: + { + this.state = S_OPEN_WAKA; + if (handler !== undefined) { + const { + text + } = this; + const slice = chunk.slice(start, this.prevI); + if (text.length !== 0) { + handler(text + slice); + this.text = ""; + } else if (slice.length !== 0) { + handler(slice); + } + } + forbiddenState = FORBIDDEN_START; + // eslint-disable-next-line no-labels + break scanLoop; + } + case AMP: + this.state = S_ENTITY; + this.entityReturnState = S_TEXT; + if (handler !== undefined) { + this.text += chunk.slice(start, this.prevI); + } + forbiddenState = FORBIDDEN_START; + // eslint-disable-next-line no-labels + break scanLoop; + case CLOSE_BRACKET: + switch (forbiddenState) { + case FORBIDDEN_START: + forbiddenState = FORBIDDEN_BRACKET; + break; + case FORBIDDEN_BRACKET: + forbiddenState = FORBIDDEN_BRACKET_BRACKET; + break; + case FORBIDDEN_BRACKET_BRACKET: + break; + default: + throw new Error("impossible state"); + } + break; + case GREATER: + if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) { + this.fail("the string \"]]>\" is disallowed in char data."); + } + forbiddenState = FORBIDDEN_START; + break; + case NL_LIKE: + if (handler !== undefined) { + this.text += `${chunk.slice(start, this.prevI)}\n`; + } + start = this.i; + forbiddenState = FORBIDDEN_START; + break; + case EOC: + if (handler !== undefined) { + this.text += chunk.slice(start); + } + // eslint-disable-next-line no-labels + break scanLoop; + default: + forbiddenState = FORBIDDEN_START; + } + } + this.forbiddenState = forbiddenState; + } + handleTextOutsideRoot() { + // This is essentially a specialized version of captureTo which is optimized + // for a specialized task. We keep track of the presence of non-space + // characters in the text since these are errors when appearing outside the + // document root element. + let { + i: start + } = this; + const { + chunk, + textHandler: handler + } = this; + let nonSpace = false; + // eslint-disable-next-line no-labels, no-restricted-syntax + outRootLoop: + // eslint-disable-next-line no-constant-condition + while (true) { + const code = this.getCode(); + switch (code) { + case LESS: + { + this.state = S_OPEN_WAKA; + if (handler !== undefined) { + const { + text + } = this; + const slice = chunk.slice(start, this.prevI); + if (text.length !== 0) { + handler(text + slice); + this.text = ""; + } else if (slice.length !== 0) { + handler(slice); + } + } + // eslint-disable-next-line no-labels + break outRootLoop; + } + case AMP: + this.state = S_ENTITY; + this.entityReturnState = S_TEXT; + if (handler !== undefined) { + this.text += chunk.slice(start, this.prevI); + } + nonSpace = true; + // eslint-disable-next-line no-labels + break outRootLoop; + case NL_LIKE: + if (handler !== undefined) { + this.text += `${chunk.slice(start, this.prevI)}\n`; + } + start = this.i; + break; + case EOC: + if (handler !== undefined) { + this.text += chunk.slice(start); + } + // eslint-disable-next-line no-labels + break outRootLoop; + default: + if (!isS(code)) { + nonSpace = true; + } + } + } + if (!nonSpace) { + return; + } + // We use the reportedTextBeforeRoot and reportedTextAfterRoot flags + // to avoid reporting errors for every single character that is out of + // place. + if (!this.sawRoot && !this.reportedTextBeforeRoot) { + this.fail("text data outside of root node."); + this.reportedTextBeforeRoot = true; + } + if (this.closedRoot && !this.reportedTextAfterRoot) { + this.fail("text data outside of root node."); + this.reportedTextAfterRoot = true; + } + } + pushAttribNS(name, value) { + var _a; + const { + prefix, + local + } = this.qname(name); + const attr = { + name, + prefix, + local, + value + }; + this.attribList.push(attr); + // eslint-disable-next-line no-unused-expressions + (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr); + if (prefix === "xmlns") { + const trimmed = value.trim(); + if (this.currentXMLVersion === "1.0" && trimmed === "") { + this.fail("invalid attempt to undefine prefix in XML 1.0"); + } + this.topNS[local] = trimmed; + nsPairCheck(this, local, trimmed); + } else if (name === "xmlns") { + const trimmed = value.trim(); + this.topNS[""] = trimmed; + nsPairCheck(this, "", trimmed); + } + } + pushAttribPlain(name, value) { + var _a; + const attr = { + name, + value + }; + this.attribList.push(attr); + // eslint-disable-next-line no-unused-expressions + (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr); + } + /** + * End parsing. This performs final well-formedness checks and resets the + * parser to a clean state. + * + * @returns this + */ + end() { + var _a, _b; + if (!this.sawRoot) { + this.fail("document must contain a root element."); + } + const { + tags + } = this; + while (tags.length > 0) { + const tag = tags.pop(); + this.fail(`unclosed tag: ${tag.name}`); + } + if (this.state !== S_BEGIN && this.state !== S_TEXT) { + this.fail("unexpected end."); + } + const { + text + } = this; + if (text.length !== 0) { + // eslint-disable-next-line no-unused-expressions + (_a = this.textHandler) === null || _a === void 0 ? void 0 : _a.call(this, text); + this.text = ""; + } + this._closed = true; + // eslint-disable-next-line no-unused-expressions + (_b = this.endHandler) === null || _b === void 0 ? void 0 : _b.call(this); + this._init(); + return this; + } + /** + * Resolve a namespace prefix. + * + * @param prefix The prefix to resolve. + * + * @returns The namespace URI or ``undefined`` if the prefix is not defined. + */ + resolve(prefix) { + var _a, _b; + let uri = this.topNS[prefix]; + if (uri !== undefined) { + return uri; + } + const { + tags + } = this; + for (let index = tags.length - 1; index >= 0; index--) { + uri = tags[index].ns[prefix]; + if (uri !== undefined) { + return uri; + } + } + uri = this.ns[prefix]; + if (uri !== undefined) { + return uri; + } + return (_b = (_a = this.opt).resolvePrefix) === null || _b === void 0 ? void 0 : _b.call(_a, prefix); + } + /** + * Parse a qname into its prefix and local name parts. + * + * @param name The name to parse + * + * @returns + */ + qname(name) { + // This is faster than using name.split(":"). + const colon = name.indexOf(":"); + if (colon === -1) { + return { + prefix: "", + local: name + }; + } + const local = name.slice(colon + 1); + const prefix = name.slice(0, colon); + if (prefix === "" || local === "" || local.includes(":")) { + this.fail(`malformed name: ${name}.`); + } + return { + prefix, + local + }; + } + processAttribsNS() { + var _a; + const { + attribList + } = this; + const tag = this.tag; + { + // add namespace info to tag + const { + prefix, + local + } = this.qname(tag.name); + tag.prefix = prefix; + tag.local = local; + const uri = tag.uri = (_a = this.resolve(prefix)) !== null && _a !== void 0 ? _a : ""; + if (prefix !== "") { + if (prefix === "xmlns") { + this.fail("tags may not have \"xmlns\" as prefix."); + } + if (uri === "") { + this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`); + tag.uri = prefix; + } + } + } + if (attribList.length === 0) { + return; + } + const { + attributes + } = tag; + const seen = new Set(); + // Note: do not apply default ns to attributes: + // http://www.w3.org/TR/REC-xml-names/#defaulting + for (const attr of attribList) { + const { + name, + prefix, + local + } = attr; + let uri; + let eqname; + if (prefix === "") { + uri = name === "xmlns" ? XMLNS_NAMESPACE : ""; + eqname = name; + } else { + uri = this.resolve(prefix); + // if there's any attributes with an undefined namespace, + // then fail on them now. + if (uri === undefined) { + this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`); + uri = prefix; + } + eqname = `{${uri}}${local}`; + } + if (seen.has(eqname)) { + this.fail(`duplicate attribute: ${eqname}.`); + } + seen.add(eqname); + attr.uri = uri; + attributes[name] = attr; + } + this.attribList = []; + } + processAttribsPlain() { + const { + attribList + } = this; + // eslint-disable-next-line prefer-destructuring + const attributes = this.tag.attributes; + for (const { + name, + value + } of attribList) { + if (attributes[name] !== undefined) { + this.fail(`duplicate attribute: ${name}.`); + } + attributes[name] = value; + } + this.attribList = []; + } + /** + * Handle a complete open tag. This parser code calls this once it has seen + * the whole tag. This method checks for well-formeness and then emits + * ``onopentag``. + */ + openTag() { + var _a; + this.processAttribs(); + const { + tags + } = this; + const tag = this.tag; + tag.isSelfClosing = false; + // There cannot be any pending text here due to the onopentagstart that was + // necessarily emitted before we get here. So we do not check text. + // eslint-disable-next-line no-unused-expressions + (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag); + tags.push(tag); + this.state = S_TEXT; + this.name = ""; + } + /** + * Handle a complete self-closing tag. This parser code calls this once it has + * seen the whole tag. This method checks for well-formeness and then emits + * ``onopentag`` and ``onclosetag``. + */ + openSelfClosingTag() { + var _a, _b, _c; + this.processAttribs(); + const { + tags + } = this; + const tag = this.tag; + tag.isSelfClosing = true; + // There cannot be any pending text here due to the onopentagstart that was + // necessarily emitted before we get here. So we do not check text. + // eslint-disable-next-line no-unused-expressions + (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag); + // eslint-disable-next-line no-unused-expressions + (_b = this.closeTagHandler) === null || _b === void 0 ? void 0 : _b.call(this, tag); + const top = this.tag = (_c = tags[tags.length - 1]) !== null && _c !== void 0 ? _c : null; + if (top === null) { + this.closedRoot = true; + } + this.state = S_TEXT; + this.name = ""; + } + /** + * Handle a complete close tag. This parser code calls this once it has seen + * the whole tag. This method checks for well-formeness and then emits + * ``onclosetag``. + */ + closeTag() { + const { + tags, + name + } = this; + // Our state after this will be S_TEXT, no matter what, and we can clear + // tagName now. + this.state = S_TEXT; + this.name = ""; + if (name === "") { + this.fail("weird empty close tag."); + this.text += ""; + return; + } + const handler = this.closeTagHandler; + let l = tags.length; + while (l-- > 0) { + const tag = this.tag = tags.pop(); + this.topNS = tag.ns; + // eslint-disable-next-line no-unused-expressions + handler === null || handler === void 0 ? void 0 : handler(tag); + if (tag.name === name) { + break; + } + this.fail("unexpected close tag."); + } + if (l === 0) { + this.closedRoot = true; + } else if (l < 0) { + this.fail(`unmatched closing tag: ${name}.`); + this.text += ``; + } + } + /** + * Resolves an entity. Makes any necessary well-formedness checks. + * + * @param entity The entity to resolve. + * + * @returns The parsed entity. + */ + parseEntity(entity) { + // startsWith would be significantly slower for this test. + // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with + if (entity[0] !== "#") { + const defined = this.ENTITIES[entity]; + if (defined !== undefined) { + return defined; + } + this.fail(this.isName(entity) ? "undefined entity." : "disallowed character in entity name."); + return `&${entity};`; + } + let num = NaN; + if (entity[1] === "x" && /^#x[0-9a-f]+$/i.test(entity)) { + num = parseInt(entity.slice(2), 16); + } else if (/^#[0-9]+$/.test(entity)) { + num = parseInt(entity.slice(1), 10); + } + // The character reference is required to match the CHAR production. + if (!this.isChar(num)) { + this.fail("malformed character entity."); + return `&${entity};`; + } + return String.fromCodePoint(num); + } +} +exports.SaxesParser = SaxesParser; + +},{"xmlchars/xml/1.0/ed5":543,"xmlchars/xml/1.1/ed2":544,"xmlchars/xmlns/1.0/ed3":545}],497:[function(require,module,exports){ +"use strict"; + +var Buffer = require('safe-buffer').Buffer; + +// prototype class for hash functions +function Hash(blockSize, finalSize) { + this._block = Buffer.alloc(blockSize); + this._finalSize = finalSize; + this._blockSize = blockSize; + this._len = 0; +} +Hash.prototype.update = function (data, enc) { + if (typeof data === 'string') { + enc = enc || 'utf8'; + data = Buffer.from(data, enc); + } + var block = this._block; + var blockSize = this._blockSize; + var length = data.length; + var accum = this._len; + for (var offset = 0; offset < length;) { + var assigned = accum % blockSize; + var remainder = Math.min(length - offset, blockSize - assigned); + for (var i = 0; i < remainder; i++) { + block[assigned + i] = data[offset + i]; + } + accum += remainder; + offset += remainder; + if (accum % blockSize === 0) { + this._update(block); + } + } + this._len += length; + return this; +}; +Hash.prototype.digest = function (enc) { + var rem = this._len % this._blockSize; + this._block[rem] = 0x80; + + // zero (rem + 1) trailing bits, where (rem + 1) is the smallest + // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize + this._block.fill(0, rem + 1); + if (rem >= this._finalSize) { + this._update(this._block); + this._block.fill(0); + } + var bits = this._len * 8; + + // uint32 + if (bits <= 0xffffffff) { + this._block.writeUInt32BE(bits, this._blockSize - 4); + + // uint64 + } else { + var lowBits = (bits & 0xffffffff) >>> 0; + var highBits = (bits - lowBits) / 0x100000000; + this._block.writeUInt32BE(highBits, this._blockSize - 8); + this._block.writeUInt32BE(lowBits, this._blockSize - 4); + } + this._update(this._block); + var hash = this._hash(); + return enc ? hash.toString(enc) : hash; +}; +Hash.prototype._update = function () { + throw new Error('_update must be implemented by subclass'); +}; +module.exports = Hash; + +},{"safe-buffer":494}],498:[function(require,module,exports){ +"use strict"; + +var _exports = module.exports = function SHA(algorithm) { + algorithm = algorithm.toLowerCase(); + var Algorithm = _exports[algorithm]; + if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)'); + return new Algorithm(); +}; +_exports.sha = require('./sha'); +_exports.sha1 = require('./sha1'); +_exports.sha224 = require('./sha224'); +_exports.sha256 = require('./sha256'); +_exports.sha384 = require('./sha384'); +_exports.sha512 = require('./sha512'); + +},{"./sha":499,"./sha1":500,"./sha224":501,"./sha256":502,"./sha384":503,"./sha512":504}],499:[function(require,module,exports){ +"use strict"; + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined + * in FIPS PUB 180-1 + * This source code is derived from sha1.js of the same repository. + * The difference between SHA-0 and SHA-1 is just a bitwise rotate left + * operation was added. + */ + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0]; +var W = new Array(80); +function Sha() { + this.init(); + this._w = W; + Hash.call(this, 64, 56); +} +inherits(Sha, Hash); +Sha.prototype.init = function () { + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; + this._e = 0xc3d2e1f0; + return this; +}; +function rotl5(num) { + return num << 5 | num >>> 27; +} +function rotl30(num) { + return num << 30 | num >>> 2; +} +function ft(s, b, c, d) { + if (s === 0) return b & c | ~b & d; + if (s === 2) return b & c | b & d | c & d; + return b ^ c ^ d; +} +Sha.prototype._update = function (M) { + var W = this._w; + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4); + for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20); + var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0; + e = d; + d = c; + c = rotl30(b); + b = a; + a = t; + } + this._a = a + this._a | 0; + this._b = b + this._b | 0; + this._c = c + this._c | 0; + this._d = d + this._d | 0; + this._e = e + this._e | 0; +}; +Sha.prototype._hash = function () { + var H = Buffer.allocUnsafe(20); + H.writeInt32BE(this._a | 0, 0); + H.writeInt32BE(this._b | 0, 4); + H.writeInt32BE(this._c | 0, 8); + H.writeInt32BE(this._d | 0, 12); + H.writeInt32BE(this._e | 0, 16); + return H; +}; +module.exports = Sha; + +},{"./hash":497,"inherits":440,"safe-buffer":494}],500:[function(require,module,exports){ +"use strict"; + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0]; +var W = new Array(80); +function Sha1() { + this.init(); + this._w = W; + Hash.call(this, 64, 56); +} +inherits(Sha1, Hash); +Sha1.prototype.init = function () { + this._a = 0x67452301; + this._b = 0xefcdab89; + this._c = 0x98badcfe; + this._d = 0x10325476; + this._e = 0xc3d2e1f0; + return this; +}; +function rotl1(num) { + return num << 1 | num >>> 31; +} +function rotl5(num) { + return num << 5 | num >>> 27; +} +function rotl30(num) { + return num << 30 | num >>> 2; +} +function ft(s, b, c, d) { + if (s === 0) return b & c | ~b & d; + if (s === 2) return b & c | b & d | c & d; + return b ^ c ^ d; +} +Sha1.prototype._update = function (M) { + var W = this._w; + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4); + for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]); + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20); + var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0; + e = d; + d = c; + c = rotl30(b); + b = a; + a = t; + } + this._a = a + this._a | 0; + this._b = b + this._b | 0; + this._c = c + this._c | 0; + this._d = d + this._d | 0; + this._e = e + this._e | 0; +}; +Sha1.prototype._hash = function () { + var H = Buffer.allocUnsafe(20); + H.writeInt32BE(this._a | 0, 0); + H.writeInt32BE(this._b | 0, 4); + H.writeInt32BE(this._c | 0, 8); + H.writeInt32BE(this._d | 0, 12); + H.writeInt32BE(this._e | 0, 16); + return H; +}; +module.exports = Sha1; + +},{"./hash":497,"inherits":440,"safe-buffer":494}],501:[function(require,module,exports){ +"use strict"; + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits'); +var Sha256 = require('./sha256'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var W = new Array(64); +function Sha224() { + this.init(); + this._w = W; // new Array(64) + + Hash.call(this, 64, 56); +} +inherits(Sha224, Sha256); +Sha224.prototype.init = function () { + this._a = 0xc1059ed8; + this._b = 0x367cd507; + this._c = 0x3070dd17; + this._d = 0xf70e5939; + this._e = 0xffc00b31; + this._f = 0x68581511; + this._g = 0x64f98fa7; + this._h = 0xbefa4fa4; + return this; +}; +Sha224.prototype._hash = function () { + var H = Buffer.allocUnsafe(28); + H.writeInt32BE(this._a, 0); + H.writeInt32BE(this._b, 4); + H.writeInt32BE(this._c, 8); + H.writeInt32BE(this._d, 12); + H.writeInt32BE(this._e, 16); + H.writeInt32BE(this._f, 20); + H.writeInt32BE(this._g, 24); + return H; +}; +module.exports = Sha224; + +},{"./hash":497,"./sha256":502,"inherits":440,"safe-buffer":494}],502:[function(require,module,exports){ +"use strict"; + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var K = [0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2]; +var W = new Array(64); +function Sha256() { + this.init(); + this._w = W; // new Array(64) + + Hash.call(this, 64, 56); +} +inherits(Sha256, Hash); +Sha256.prototype.init = function () { + this._a = 0x6a09e667; + this._b = 0xbb67ae85; + this._c = 0x3c6ef372; + this._d = 0xa54ff53a; + this._e = 0x510e527f; + this._f = 0x9b05688c; + this._g = 0x1f83d9ab; + this._h = 0x5be0cd19; + return this; +}; +function ch(x, y, z) { + return z ^ x & (y ^ z); +} +function maj(x, y, z) { + return x & y | z & (x | y); +} +function sigma0(x) { + return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10); +} +function sigma1(x) { + return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7); +} +function gamma0(x) { + return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ x >>> 3; +} +function gamma1(x) { + return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ x >>> 10; +} +Sha256.prototype._update = function (M) { + var W = this._w; + var a = this._a | 0; + var b = this._b | 0; + var c = this._c | 0; + var d = this._d | 0; + var e = this._e | 0; + var f = this._f | 0; + var g = this._g | 0; + var h = this._h | 0; + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4); + for (; i < 64; ++i) W[i] = gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16] | 0; + for (var j = 0; j < 64; ++j) { + var T1 = h + sigma1(e) + ch(e, f, g) + K[j] + W[j] | 0; + var T2 = sigma0(a) + maj(a, b, c) | 0; + h = g; + g = f; + f = e; + e = d + T1 | 0; + d = c; + c = b; + b = a; + a = T1 + T2 | 0; + } + this._a = a + this._a | 0; + this._b = b + this._b | 0; + this._c = c + this._c | 0; + this._d = d + this._d | 0; + this._e = e + this._e | 0; + this._f = f + this._f | 0; + this._g = g + this._g | 0; + this._h = h + this._h | 0; +}; +Sha256.prototype._hash = function () { + var H = Buffer.allocUnsafe(32); + H.writeInt32BE(this._a, 0); + H.writeInt32BE(this._b, 4); + H.writeInt32BE(this._c, 8); + H.writeInt32BE(this._d, 12); + H.writeInt32BE(this._e, 16); + H.writeInt32BE(this._f, 20); + H.writeInt32BE(this._g, 24); + H.writeInt32BE(this._h, 28); + return H; +}; +module.exports = Sha256; + +},{"./hash":497,"inherits":440,"safe-buffer":494}],503:[function(require,module,exports){ +"use strict"; + +var inherits = require('inherits'); +var SHA512 = require('./sha512'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var W = new Array(160); +function Sha384() { + this.init(); + this._w = W; + Hash.call(this, 128, 112); +} +inherits(Sha384, SHA512); +Sha384.prototype.init = function () { + this._ah = 0xcbbb9d5d; + this._bh = 0x629a292a; + this._ch = 0x9159015a; + this._dh = 0x152fecd8; + this._eh = 0x67332667; + this._fh = 0x8eb44a87; + this._gh = 0xdb0c2e0d; + this._hh = 0x47b5481d; + this._al = 0xc1059ed8; + this._bl = 0x367cd507; + this._cl = 0x3070dd17; + this._dl = 0xf70e5939; + this._el = 0xffc00b31; + this._fl = 0x68581511; + this._gl = 0x64f98fa7; + this._hl = 0xbefa4fa4; + return this; +}; +Sha384.prototype._hash = function () { + var H = Buffer.allocUnsafe(48); + function writeInt64BE(h, l, offset) { + H.writeInt32BE(h, offset); + H.writeInt32BE(l, offset + 4); + } + writeInt64BE(this._ah, this._al, 0); + writeInt64BE(this._bh, this._bl, 8); + writeInt64BE(this._ch, this._cl, 16); + writeInt64BE(this._dh, this._dl, 24); + writeInt64BE(this._eh, this._el, 32); + writeInt64BE(this._fh, this._fl, 40); + return H; +}; +module.exports = Sha384; + +},{"./hash":497,"./sha512":504,"inherits":440,"safe-buffer":494}],504:[function(require,module,exports){ +"use strict"; + +var inherits = require('inherits'); +var Hash = require('./hash'); +var Buffer = require('safe-buffer').Buffer; +var K = [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817]; +var W = new Array(160); +function Sha512() { + this.init(); + this._w = W; + Hash.call(this, 128, 112); +} +inherits(Sha512, Hash); +Sha512.prototype.init = function () { + this._ah = 0x6a09e667; + this._bh = 0xbb67ae85; + this._ch = 0x3c6ef372; + this._dh = 0xa54ff53a; + this._eh = 0x510e527f; + this._fh = 0x9b05688c; + this._gh = 0x1f83d9ab; + this._hh = 0x5be0cd19; + this._al = 0xf3bcc908; + this._bl = 0x84caa73b; + this._cl = 0xfe94f82b; + this._dl = 0x5f1d36f1; + this._el = 0xade682d1; + this._fl = 0x2b3e6c1f; + this._gl = 0xfb41bd6b; + this._hl = 0x137e2179; + return this; +}; +function Ch(x, y, z) { + return z ^ x & (y ^ z); +} +function maj(x, y, z) { + return x & y | z & (x | y); +} +function sigma0(x, xl) { + return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25); +} +function sigma1(x, xl) { + return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23); +} +function Gamma0(x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ x >>> 7; +} +function Gamma0l(x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25); +} +function Gamma1(x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ x >>> 6; +} +function Gamma1l(x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26); +} +function getCarry(a, b) { + return a >>> 0 < b >>> 0 ? 1 : 0; +} +Sha512.prototype._update = function (M) { + var W = this._w; + var ah = this._ah | 0; + var bh = this._bh | 0; + var ch = this._ch | 0; + var dh = this._dh | 0; + var eh = this._eh | 0; + var fh = this._fh | 0; + var gh = this._gh | 0; + var hh = this._hh | 0; + var al = this._al | 0; + var bl = this._bl | 0; + var cl = this._cl | 0; + var dl = this._dl | 0; + var el = this._el | 0; + var fl = this._fl | 0; + var gl = this._gl | 0; + var hl = this._hl | 0; + for (var i = 0; i < 32; i += 2) { + W[i] = M.readInt32BE(i * 4); + W[i + 1] = M.readInt32BE(i * 4 + 4); + } + for (; i < 160; i += 2) { + var xh = W[i - 15 * 2]; + var xl = W[i - 15 * 2 + 1]; + var gamma0 = Gamma0(xh, xl); + var gamma0l = Gamma0l(xl, xh); + xh = W[i - 2 * 2]; + xl = W[i - 2 * 2 + 1]; + var gamma1 = Gamma1(xh, xl); + var gamma1l = Gamma1l(xl, xh); + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7h = W[i - 7 * 2]; + var Wi7l = W[i - 7 * 2 + 1]; + var Wi16h = W[i - 16 * 2]; + var Wi16l = W[i - 16 * 2 + 1]; + var Wil = gamma0l + Wi7l | 0; + var Wih = gamma0 + Wi7h + getCarry(Wil, gamma0l) | 0; + Wil = Wil + gamma1l | 0; + Wih = Wih + gamma1 + getCarry(Wil, gamma1l) | 0; + Wil = Wil + Wi16l | 0; + Wih = Wih + Wi16h + getCarry(Wil, Wi16l) | 0; + W[i] = Wih; + W[i + 1] = Wil; + } + for (var j = 0; j < 160; j += 2) { + Wih = W[j]; + Wil = W[j + 1]; + var majh = maj(ah, bh, ch); + var majl = maj(al, bl, cl); + var sigma0h = sigma0(ah, al); + var sigma0l = sigma0(al, ah); + var sigma1h = sigma1(eh, el); + var sigma1l = sigma1(el, eh); + + // t1 = h + sigma1 + ch + K[j] + W[j] + var Kih = K[j]; + var Kil = K[j + 1]; + var chh = Ch(eh, fh, gh); + var chl = Ch(el, fl, gl); + var t1l = hl + sigma1l | 0; + var t1h = hh + sigma1h + getCarry(t1l, hl) | 0; + t1l = t1l + chl | 0; + t1h = t1h + chh + getCarry(t1l, chl) | 0; + t1l = t1l + Kil | 0; + t1h = t1h + Kih + getCarry(t1l, Kil) | 0; + t1l = t1l + Wil | 0; + t1h = t1h + Wih + getCarry(t1l, Wil) | 0; + + // t2 = sigma0 + maj + var t2l = sigma0l + majl | 0; + var t2h = sigma0h + majh + getCarry(t2l, sigma0l) | 0; + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + el = dl + t1l | 0; + eh = dh + t1h + getCarry(el, dl) | 0; + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + al = t1l + t2l | 0; + ah = t1h + t2h + getCarry(al, t1l) | 0; + } + this._al = this._al + al | 0; + this._bl = this._bl + bl | 0; + this._cl = this._cl + cl | 0; + this._dl = this._dl + dl | 0; + this._el = this._el + el | 0; + this._fl = this._fl + fl | 0; + this._gl = this._gl + gl | 0; + this._hl = this._hl + hl | 0; + this._ah = this._ah + ah + getCarry(this._al, al) | 0; + this._bh = this._bh + bh + getCarry(this._bl, bl) | 0; + this._ch = this._ch + ch + getCarry(this._cl, cl) | 0; + this._dh = this._dh + dh + getCarry(this._dl, dl) | 0; + this._eh = this._eh + eh + getCarry(this._el, el) | 0; + this._fh = this._fh + fh + getCarry(this._fl, fl) | 0; + this._gh = this._gh + gh + getCarry(this._gl, gl) | 0; + this._hh = this._hh + hh + getCarry(this._hl, hl) | 0; +}; +Sha512.prototype._hash = function () { + var H = Buffer.allocUnsafe(64); + function writeInt64BE(h, l, offset) { + H.writeInt32BE(h, offset); + H.writeInt32BE(l, offset + 4); + } + writeInt64BE(this._ah, this._al, 0); + writeInt64BE(this._bh, this._bl, 8); + writeInt64BE(this._ch, this._cl, 16); + writeInt64BE(this._dh, this._dl, 24); + writeInt64BE(this._eh, this._el, 32); + writeInt64BE(this._fh, this._fl, 40); + writeInt64BE(this._gh, this._gl, 48); + writeInt64BE(this._hh, this._hl, 56); + return H; +}; +module.exports = Sha512; + +},{"./hash":497,"inherits":440,"safe-buffer":494}],505:[function(require,module,exports){ +"use strict"; + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +module.exports = Stream; +var EE = require('events').EventEmitter; +var inherits = require('inherits'); +inherits(Stream, EE); +Stream.Readable = require('readable-stream/readable.js'); +Stream.Writable = require('readable-stream/writable.js'); +Stream.Duplex = require('readable-stream/duplex.js'); +Stream.Transform = require('readable-stream/transform.js'); +Stream.PassThrough = require('readable-stream/passthrough.js'); + +// Backwards-compat with node 0.4.x +Stream.Stream = Stream; + +// old-style streams. Note that the pipe method (the only relevant +// part of this class) is overridden in the Readable class. + +function Stream() { + EE.call(this); +} +Stream.prototype.pipe = function (dest, options) { + var source = this; + function ondata(chunk) { + if (dest.writable) { + if (false === dest.write(chunk) && source.pause) { + source.pause(); + } + } + } + source.on('data', ondata); + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } + dest.on('drain', ondrain); + + // If the 'end' option is not supplied, dest.end() will be called when + // source gets the 'end' or 'close' events. Only dest.end() once. + if (!dest._isStdio && (!options || options.end !== false)) { + source.on('end', onend); + source.on('close', onclose); + } + var didOnEnd = false; + function onend() { + if (didOnEnd) return; + didOnEnd = true; + dest.end(); + } + function onclose() { + if (didOnEnd) return; + didOnEnd = true; + if (typeof dest.destroy === 'function') dest.destroy(); + } + + // don't leave dangling pipes when there are errors. + function onerror(er) { + cleanup(); + if (EE.listenerCount(this, 'error') === 0) { + throw er; // Unhandled stream error in pipe. + } + } + + source.on('error', onerror); + dest.on('error', onerror); + + // remove all the event listeners that were added. + function cleanup() { + source.removeListener('data', ondata); + dest.removeListener('drain', ondrain); + source.removeListener('end', onend); + source.removeListener('close', onclose); + source.removeListener('error', onerror); + dest.removeListener('error', onerror); + source.removeListener('end', cleanup); + source.removeListener('close', cleanup); + dest.removeListener('close', cleanup); + } + source.on('end', cleanup); + source.on('close', cleanup); + dest.on('close', cleanup); + dest.emit('pipe', source); + + // Allow for unix-like usage: A.pipe(B).pipe(C) + return dest; +}; + +},{"events":422,"inherits":440,"readable-stream/duplex.js":507,"readable-stream/passthrough.js":516,"readable-stream/readable.js":517,"readable-stream/transform.js":518,"readable-stream/writable.js":519}],506:[function(require,module,exports){ +"use strict"; + +var toString = {}.toString; +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +},{}],507:[function(require,module,exports){ +"use strict"; + +module.exports = require('./lib/_stream_duplex.js'); + +},{"./lib/_stream_duplex.js":508}],508:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ +var pna = require('process-nextick-args'); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + } + return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); +util.inherits(Duplex, Readable); +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + if (options && options.readable === false) this.readable = false; + if (options && options.writable === false) this.writable = false; + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + this.once('end', onend); +} +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + pna.nextTick(onEndNT, this); +} +function onEndNT(self) { + self.end(); +} +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + pna.nextTick(cb, err); +}; + +},{"./_stream_readable":510,"./_stream_writable":512,"core-util-is":383,"inherits":440,"process-nextick-args":466}],509:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; +var Transform = require('./_stream_transform'); + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + Transform.call(this, options); +} +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; + +},{"./_stream_transform":511,"core-util-is":383,"inherits":440}],510:[function(require,module,exports){ +(function (process,global){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +/**/ +var pna = require('process-nextick-args'); +/**/ + +module.exports = Readable; + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = require('./internal/streams/BufferList'); +var destroyImpl = require('./internal/streams/destroy'); +var StringDecoder; +util.inherits(Readable, Stream); +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + if (!(this instanceof Readable)) return new Readable(options); + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + if (options) { + if (typeof options.read === 'function') this._read = options.read; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + Stream.call(this); +} +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + return needMoreData(state); +} +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + if (ret !== null) this.emit('data', ret); + return ret; +}; +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + return dest; +}; +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, { + hasUnpiped: false + }); + } + return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this, unpipeInfo); + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + var state = this._readableState; + var paused = false; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + _this.push(null); + }); + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + return this; +}; +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._readableState.highWaterMark; + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./_stream_duplex":508,"./internal/streams/BufferList":513,"./internal/streams/destroy":514,"./internal/streams/stream":515,"_process":467,"core-util-is":383,"events":422,"inherits":440,"isarray":506,"process-nextick-args":466,"safe-buffer":520,"string_decoder/":521,"util":188}],511:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; +var Duplex = require('./_stream_duplex'); + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + var cb = ts.writecb; + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + ts.writechunk = null; + ts.writecb = null; + if (data != null) + // single equals check for both `null` and `undefined` + this.push(data); + cb(er); + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + Duplex.call(this, options); + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} +function prefinish() { + var _this = this; + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this2.emit('close'); + }); +}; +function done(stream, er, data) { + if (er) return stream.emit('error', er); + if (data != null) + // single equals check for both `null` and `undefined` + stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + return stream.push(null); +} + +},{"./_stream_duplex":508,"core-util-is":383,"inherits":440}],512:[function(require,module,exports){ +(function (process,global,setImmediate){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +/**/ +var pna = require('process-nextick-args'); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +var destroyImpl = require('./internal/streams/destroy'); +util.inherits(Writable, Stream); +function nop() {} +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + if (typeof options.final === 'function') this._final = options.final; + } + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + pna.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + return valid; +} +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; +}; +Writable.prototype.cork = function () { + var state = this._writableState; + state.corked++; +}; +Writable.prototype.uncork = function () { + var state = this._writableState; + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + return ret; +} +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + if (entry === null) state.lastBufferedRequest = null; + } + state.bufferedRequest = entry; + state.bufferProcessing = false; +} +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; +Writable.prototype._writev = null; +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending) endWritable(this, state, cb); +}; +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + // reuse the free corkReq. + state.corkedRequestsFree.next = corkReq; +} +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) + +},{"./_stream_duplex":508,"./internal/streams/destroy":514,"./internal/streams/stream":515,"_process":467,"core-util-is":383,"inherits":440,"process-nextick-args":466,"safe-buffer":520,"timers":523,"util-deprecate":524}],513:[function(require,module,exports){ +'use strict'; + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} +var Buffer = require('safe-buffer').Buffer; +var util = require('util'); +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + this.head = null; + this.tail = null; + this.length = 0; + } + BufferList.prototype.push = function push(v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + BufferList.prototype.unshift = function unshift(v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + } + return ret; + }; + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + return BufferList; +}(); +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ + length: this.length + }); + return this.constructor.name + ' ' + obj; + }; +} + +},{"safe-buffer":520,"util":188}],514:[function(require,module,exports){ +'use strict'; + +/**/ +var pna = require('process-nextick-args'); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + pna.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, this, err); + } + } + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + pna.nextTick(emitErrorNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, _this, err); + } + } else if (cb) { + cb(err); + } + }); + return this; +} +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} +function emitErrorNT(self, err) { + self.emit('error', err); +} +module.exports = { + destroy: destroy, + undestroy: undestroy +}; + +},{"process-nextick-args":466}],515:[function(require,module,exports){ +arguments[4][490][0].apply(exports,arguments) +},{"dup":490,"events":422}],516:[function(require,module,exports){ +"use strict"; + +module.exports = require('./readable').PassThrough; + +},{"./readable":517}],517:[function(require,module,exports){ +"use strict"; + +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); + +},{"./lib/_stream_duplex.js":508,"./lib/_stream_passthrough.js":509,"./lib/_stream_readable.js":510,"./lib/_stream_transform.js":511,"./lib/_stream_writable.js":512}],518:[function(require,module,exports){ +"use strict"; + +module.exports = require('./readable').Transform; + +},{"./readable":517}],519:[function(require,module,exports){ +"use strict"; + +module.exports = require('./lib/_stream_writable.js'); + +},{"./lib/_stream_writable.js":512}],520:[function(require,module,exports){ +arguments[4][217][0].apply(exports,arguments) +},{"buffer":220,"dup":217}],521:[function(require,module,exports){ +arguments[4][218][0].apply(exports,arguments) +},{"dup":218,"safe-buffer":520}],522:[function(require,module,exports){ +arguments[4][218][0].apply(exports,arguments) +},{"dup":218,"safe-buffer":494}],523:[function(require,module,exports){ +(function (setImmediate,clearImmediate){(function (){ +"use strict"; + +var nextTick = require('process/browser.js').nextTick; +var apply = Function.prototype.apply; +var slice = Array.prototype.slice; +var immediateIds = {}; +var nextImmediateId = 0; + +// DOM APIs, for completeness + +exports.setTimeout = function () { + return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); +}; +exports.setInterval = function () { + return new Timeout(apply.call(setInterval, window, arguments), clearInterval); +}; +exports.clearTimeout = exports.clearInterval = function (timeout) { + timeout.close(); +}; +function Timeout(id, clearFn) { + this._id = id; + this._clearFn = clearFn; +} +Timeout.prototype.unref = Timeout.prototype.ref = function () {}; +Timeout.prototype.close = function () { + this._clearFn.call(window, this._id); +}; + +// Does not start the time, just sets up the members needed. +exports.enroll = function (item, msecs) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = msecs; +}; +exports.unenroll = function (item) { + clearTimeout(item._idleTimeoutId); + item._idleTimeout = -1; +}; +exports._unrefActive = exports.active = function (item) { + clearTimeout(item._idleTimeoutId); + var msecs = item._idleTimeout; + if (msecs >= 0) { + item._idleTimeoutId = setTimeout(function onTimeout() { + if (item._onTimeout) item._onTimeout(); + }, msecs); + } +}; + +// That's not how node.js implements it but the exposed api is the same. +exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function (fn) { + var id = nextImmediateId++; + var args = arguments.length < 2 ? false : slice.call(arguments, 1); + immediateIds[id] = true; + nextTick(function onNextTick() { + if (immediateIds[id]) { + // fn.call() is faster so we optimize for the common use-case + // @see http://jsperf.com/call-apply-segu + if (args) { + fn.apply(null, args); + } else { + fn.call(null); + } + // Prevent ids from leaking + exports.clearImmediate(id); + } + }); + return id; +}; +exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function (id) { + delete immediateIds[id]; +}; + +}).call(this)}).call(this,require("timers").setImmediate,require("timers").clearImmediate) + +},{"process/browser.js":467,"timers":523}],524:[function(require,module,exports){ +(function (global){(function (){ +"use strict"; + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate(fn, msg) { + if (config('noDeprecation')) { + return fn; + } + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config(name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!global.localStorage) return false; + } catch (_) { + return false; + } + var val = global.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],525:[function(require,module,exports){ +"use strict"; + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + }; +} + +},{}],526:[function(require,module,exports){ +"use strict"; + +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; +}; + +},{}],527:[function(require,module,exports){ +(function (process,global){(function (){ +"use strict"; + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function (f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function (x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': + return String(args[i++]); + case '%d': + return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function (fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function () { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + if (process.noDeprecation === true) { + return fn; + } + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + return deprecated; +}; +var debugs = {}; +var debugEnviron; +exports.debuglog = function (set) { + if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function () { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function () {}; + } + } + return debugs[set]; +}; + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold': [1, 22], + 'italic': [3, 23], + 'underline': [4, 24], + 'inverse': [7, 27], + 'white': [37, 39], + 'grey': [90, 39], + 'black': [30, 39], + 'blue': [34, 39], + 'cyan': [36, 39], + 'green': [32, 39], + 'magenta': [35, 39], + 'red': [31, 39], + 'yellow': [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} +function stylizeNoColor(str, styleType) { + return str; +} +function arrayToHash(array) { + var hash = {}; + array.forEach(function (val, idx) { + hash[val] = true; + }); + return hash; +} +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && value && isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + var base = '', + array = false, + braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + ctx.seen.push(value); + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function (key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + ctx.seen.pop(); + return reduceToSingleString(output, base, braces); +} +function formatPrimitive(ctx, value) { + if (isUndefined(value)) return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) return ctx.stylize('null', 'null'); +} +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function (key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); + } + }); + return output; +} +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { + value: value[key] + }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function (line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function (line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + return name + ': ' + str; +} +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function (prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + if (length > 60) { + return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1]; + } + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; +function isError(e) { + return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; +function isPrimitive(arg) { + return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || + // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; +exports.isBuffer = require('./support/isBuffer'); +function objectToString(o) { + return Object.prototype.toString.call(o); +} +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function () { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); +exports._extend = function (origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./support/isBuffer":526,"_process":467,"inherits":525}],528:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "v1", { + enumerable: true, + get: function () { + return _v.default; + } +}); +Object.defineProperty(exports, "v3", { + enumerable: true, + get: function () { + return _v2.default; + } +}); +Object.defineProperty(exports, "v4", { + enumerable: true, + get: function () { + return _v3.default; + } +}); +Object.defineProperty(exports, "v5", { + enumerable: true, + get: function () { + return _v4.default; + } +}); +Object.defineProperty(exports, "NIL", { + enumerable: true, + get: function () { + return _nil.default; + } +}); +Object.defineProperty(exports, "version", { + enumerable: true, + get: function () { + return _version.default; + } +}); +Object.defineProperty(exports, "validate", { + enumerable: true, + get: function () { + return _validate.default; + } +}); +Object.defineProperty(exports, "stringify", { + enumerable: true, + get: function () { + return _stringify.default; + } +}); +Object.defineProperty(exports, "parse", { + enumerable: true, + get: function () { + return _parse.default; + } +}); +var _v = _interopRequireDefault(require("./v1.js")); +var _v2 = _interopRequireDefault(require("./v3.js")); +var _v3 = _interopRequireDefault(require("./v4.js")); +var _v4 = _interopRequireDefault(require("./v5.js")); +var _nil = _interopRequireDefault(require("./nil.js")); +var _version = _interopRequireDefault(require("./version.js")); +var _validate = _interopRequireDefault(require("./validate.js")); +var _stringify = _interopRequireDefault(require("./stringify.js")); +var _parse = _interopRequireDefault(require("./parse.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} + +},{"./nil.js":530,"./parse.js":531,"./stringify.js":535,"./v1.js":536,"./v3.js":537,"./v4.js":539,"./v5.js":540,"./validate.js":541,"./version.js":542}],529:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + for (let i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + +function md5ToHexEncodedArray(input) { + const output = []; + const length32 = input.length * 32; + const hexTab = '0123456789abcdef'; + for (let i = 0; i < length32; i += 8) { + const x = input[i >> 5] >>> i % 32 & 0xff; + const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + return output; +} +/** + * Calculate output length with padding and bit length + */ + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + let a = 1732584193; + let b = -271733879; + let c = -1732584194; + let d = 271733878; + for (let i = 0; i < x.length; i += 16) { + const olda = a; + const oldb = b; + const oldc = c; + const oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + const length8 = input.length * 8; + const output = new Uint32Array(getOutputLength(length8)); + for (let i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + +function safeAdd(x, y) { + const lsw = (x & 0xffff) + (y & 0xffff); + const msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} +var _default = md5; +exports.default = _default; + +},{}],530:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = '00000000-0000-0000-0000-000000000000'; +exports.default = _default; + +},{}],531:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _validate = _interopRequireDefault(require("./validate.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function parse(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} +var _default = parse; +exports.default = _default; + +},{"./validate.js":541}],532:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; +exports.default = _default; + +},{}],533:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = rng; +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +let getRandomValues; +const rnds8 = new Uint8Array(16); +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + return getRandomValues(rnds8); +} + +},{}],534:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + case 1: + return x ^ y ^ z; + case 2: + return x & y ^ x & z ^ y & z; + case 3: + return x ^ y ^ z; + } +} +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} +function sha1(bytes) { + const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + for (let i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + bytes.push(0x80); + const l = bytes.length / 4 + 2; + const N = Math.ceil(l / 16); + const M = new Array(N); + for (let i = 0; i < N; ++i) { + const arr = new Uint32Array(16); + for (let j = 0; j < 16; ++j) { + arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3]; + } + M[i] = arr; + } + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + for (let i = 0; i < N; ++i) { + const W = new Uint32Array(80); + for (let t = 0; t < 16; ++t) { + W[t] = M[i][t]; + } + for (let t = 16; t < 80; ++t) { + W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); + } + let a = H[0]; + let b = H[1]; + let c = H[2]; + let d = H[3]; + let e = H[4]; + for (let t = 0; t < 80; ++t) { + const s = Math.floor(t / 20); + const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} +var _default = sha1; +exports.default = _default; + +},{}],535:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _validate = _interopRequireDefault(require("./validate.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +const byteToHex = []; +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} +function stringify(arr) { + let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!(0, _validate.default)(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + return uuid; +} +var _default = stringify; +exports.default = _default; + +},{"./validate.js":541}],536:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _rng = _interopRequireDefault(require("./rng.js")); +var _stringify = _interopRequireDefault(require("./stringify.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html +let _nodeId; +let _clockseq; // Previous uuid creation time + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || _rng.default)(); + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + return buf || (0, _stringify.default)(b); +} +var _default = v1; +exports.default = _default; + +},{"./rng.js":533,"./stringify.js":535}],537:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _v = _interopRequireDefault(require("./v35.js")); +var _md = _interopRequireDefault(require("./md5.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const v3 = (0, _v.default)('v3', 0x30, _md.default); +var _default = v3; +exports.default = _default; + +},{"./md5.js":529,"./v35.js":538}],538:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _default; +exports.URL = exports.DNS = void 0; +var _stringify = _interopRequireDefault(require("./stringify.js")); +var _parse = _interopRequireDefault(require("./parse.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + return bytes; +} +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +exports.DNS = DNS; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +exports.URL = URL; +function _default(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + if (typeof namespace === 'string') { + namespace = (0, _parse.default)(namespace); + } + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + if (buf) { + offset = offset || 0; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + return buf; + } + return (0, _stringify.default)(bytes); + } // Function#name is not settable on some platforms (#270) + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} + +},{"./parse.js":531,"./stringify.js":535}],539:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _rng = _interopRequireDefault(require("./rng.js")); +var _stringify = _interopRequireDefault(require("./stringify.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + return buf; + } + return (0, _stringify.default)(rnds); +} +var _default = v4; +exports.default = _default; + +},{"./rng.js":533,"./stringify.js":535}],540:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _v = _interopRequireDefault(require("./v35.js")); +var _sha = _interopRequireDefault(require("./sha1.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +const v5 = (0, _v.default)('v5', 0x50, _sha.default); +var _default = v5; +exports.default = _default; + +},{"./sha1.js":534,"./v35.js":538}],541:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _regex = _interopRequireDefault(require("./regex.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function validate(uuid) { + return typeof uuid === 'string' && _regex.default.test(uuid); +} +var _default = validate; +exports.default = _default; + +},{"./regex.js":532}],542:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _validate = _interopRequireDefault(require("./validate.js")); +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function version(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + return parseInt(uuid.substr(14, 1), 16); +} +var _default = version; +exports.default = _default; + +},{"./validate.js":541}],543:[function(require,module,exports){ +"use strict"; + +/** + * Character classes and associated utilities for the 5th edition of XML 1.0. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +// +// Fragments. +// +exports.CHAR = "\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +exports.S = " \t\r\n"; +// tslint:disable-next-line:max-line-length +exports.NAME_START_CHAR = ":A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\u00B7\u0300-\u036F\u203F-\u2040"; +// +// Regular expressions. +// +exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u"); +exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u"); +exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u"); +exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u"); +exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u"); +exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u"); +var TAB = 9; +var NL = 0xA; +var CR = 0xD; +var SPACE = 0x20; +// +// Lists. +// +/** All characters in the ``S`` production. */ +exports.S_LIST = [SPACE, NL, CR, TAB]; +/** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ +function isChar(c) { + return c >= SPACE && c <= 0xD7FF || c === NL || c === CR || c === TAB || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF; +} +exports.isChar = isChar; +/** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ +function isS(c) { + return c === SPACE || c === NL || c === CR || c === TAB; +} +exports.isS = isS; +/** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ +function isNameStartChar(c) { + return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF; +} +exports.isNameStartChar = isNameStartChar; +/** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ +function isNameChar(c) { + return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040; +} +exports.isNameChar = isNameChar; + +},{}],544:[function(require,module,exports){ +"use strict"; + +/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +// +// Fragments. +// +exports.CHAR = "\u0001-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +exports.RESTRICTED_CHAR = "\u0001-\u0008\u000B\u000C\u000E-\u001F\u007F-\u0084\u0086-\u009F"; +exports.S = " \t\r\n"; +// tslint:disable-next-line:max-line-length +exports.NAME_START_CHAR = ":A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\u00B7\u0300-\u036F\u203F-\u2040"; +// +// Regular expressions. +// +exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u"); +exports.RESTRICTED_CHAR_RE = new RegExp("^[" + exports.RESTRICTED_CHAR + "]$", "u"); +exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u"); +exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u"); +exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u"); +exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u"); +exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u"); +var TAB = 9; +var NL = 0xA; +var CR = 0xD; +var SPACE = 0x20; +// +// Lists. +// +/** All characters in the ``S`` production. */ +exports.S_LIST = [SPACE, NL, CR, TAB]; +/** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ +function isChar(c) { + return c >= 0x0001 && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF; +} +exports.isChar = isChar; +/** + * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``. + */ +function isRestrictedChar(c) { + return c >= 0x1 && c <= 0x8 || c === 0xB || c === 0xC || c >= 0xE && c <= 0x1F || c >= 0x7F && c <= 0x84 || c >= 0x86 && c <= 0x9F; +} +exports.isRestrictedChar = isRestrictedChar; +/** + * Determines whether a codepoint matches the ``CHAR`` production and does not + * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is + * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster + * than running the two-call equivalent. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR`` and does not match + * ``RESTRICTED_CHAR``. + */ +function isCharAndNotRestricted(c) { + return c === 0x9 || c === 0xA || c === 0xD || c > 0x1F && c < 0x7F || c === 0x85 || c > 0x9F && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF; +} +exports.isCharAndNotRestricted = isCharAndNotRestricted; +/** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ +function isS(c) { + return c === SPACE || c === NL || c === CR || c === TAB; +} +exports.isS = isS; +/** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ +// tslint:disable-next-line:cyclomatic-complexity +function isNameStartChar(c) { + return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF; +} +exports.isNameStartChar = isNameStartChar; +/** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ +function isNameChar(c) { + return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040; +} +exports.isNameChar = isNameChar; + +},{}],545:[function(require,module,exports){ +"use strict"; + +/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +// +// Fragments. +// +// tslint:disable-next-line:max-line-length +exports.NC_NAME_START_CHAR = "A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +exports.NC_NAME_CHAR = "-" + exports.NC_NAME_START_CHAR + ".0-9\u00B7\u0300-\u036F\u203F-\u2040"; +// +// Regular expressions. +// +exports.NC_NAME_START_CHAR_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "]$", "u"); +exports.NC_NAME_CHAR_RE = new RegExp("^[" + exports.NC_NAME_CHAR + "]$", "u"); +exports.NC_NAME_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "][" + exports.NC_NAME_CHAR + "]*$", "u"); +/** + * Determines whether a codepoint matches [[NC_NAME_START_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ +// tslint:disable-next-line:cyclomatic-complexity +function isNCNameStartChar(c) { + return c >= 0x41 && c <= 0x5A || c === 0x5F || c >= 0x61 && c <= 0x7A || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x200C && c <= 0x200D || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF; +} +exports.isNCNameStartChar = isNCNameStartChar; +/** + * Determines whether a codepoint matches [[NC_NAME_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ +function isNCNameChar(c) { + return isNCNameStartChar(c) || c === 0x2D || c === 0x2E || c >= 0x30 && c <= 0x39 || c === 0x00B7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040; +} +exports.isNCNameChar = isNCNameChar; + +},{}]},{},[15])(15) +}); +//# sourceMappingURL=exceljs.js.map diff --git a/node_backend/node_modules/exceljs/dist/exceljs.js.map b/node_backend/node_modules/exceljs/dist/exceljs.js.map new file mode 100644 index 0000000000000000000000000000000000000000..b2d9fda0b6fd6c0b789b21b16894c524caf613f7 --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/exceljs.js.map @@ -0,0 +1,1083 @@ +{ + "version": 3, + "sources": [ + "node_modules/browser-pack/_prelude.js", + "lib/csv/csv.js", + "lib/doc/anchor.js", + "lib/doc/cell.js", + "lib/doc/column.js", + "lib/doc/data-validations.js", + "lib/doc/defined-names.js", + "lib/doc/enums.js", + "lib/doc/image.js", + "lib/doc/note.js", + "lib/doc/range.js", + "lib/doc/row.js", + "lib/doc/table.js", + "lib/doc/workbook.js", + "lib/doc/worksheet.js", + "lib/exceljs.browser.js", + "lib/utils/browser-buffer-decode.js", + "lib/utils/browser-buffer-encode.js", + "lib/utils/cell-matrix.js", + "lib/utils/col-cache.js", + "lib/utils/copy-style.js", + "lib/utils/encryptor.js", + "lib/utils/parse-sax.js", + "lib/utils/shared-formula.js", + "lib/utils/stream-buf.js", + "lib/utils/string-buf.js", + "lib/utils/under-dash.js", + "lib/utils/utils.js", + "lib/utils/xml-stream.js", + "lib/utils/zip-stream.js", + "lib/xlsx/defaultnumformats.js", + "lib/xlsx/rel-type.js", + "lib/xlsx/xform/base-xform.js", + "lib/xlsx/xform/book/defined-name-xform.js", + "lib/xlsx/xform/book/sheet-xform.js", + "lib/xlsx/xform/book/workbook-calc-properties-xform.js", + "lib/xlsx/xform/book/workbook-properties-xform.js", + "lib/xlsx/xform/book/workbook-view-xform.js", + "lib/xlsx/xform/book/workbook-xform.js", + "lib/xlsx/xform/comment/comment-xform.js", + "lib/xlsx/xform/comment/comments-xform.js", + "lib/xlsx/xform/comment/style/vml-position-xform.js", + "lib/xlsx/xform/comment/style/vml-protection-xform.js", + "lib/xlsx/xform/comment/vml-anchor-xform.js", + "lib/xlsx/xform/comment/vml-client-data-xform.js", + "lib/xlsx/xform/comment/vml-notes-xform.js", + "lib/xlsx/xform/comment/vml-shape-xform.js", + "lib/xlsx/xform/comment/vml-textbox-xform.js", + "lib/xlsx/xform/composite-xform.js", + "lib/xlsx/xform/core/app-heading-pairs-xform.js", + "lib/xlsx/xform/core/app-titles-of-parts-xform.js", + "lib/xlsx/xform/core/app-xform.js", + "lib/xlsx/xform/core/content-types-xform.js", + "lib/xlsx/xform/core/core-xform.js", + "lib/xlsx/xform/core/relationship-xform.js", + "lib/xlsx/xform/core/relationships-xform.js", + "lib/xlsx/xform/drawing/base-cell-anchor-xform.js", + "lib/xlsx/xform/drawing/blip-fill-xform.js", + "lib/xlsx/xform/drawing/blip-xform.js", + "lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js", + "lib/xlsx/xform/drawing/c-nv-pr-xform.js", + "lib/xlsx/xform/drawing/cell-position-xform.js", + "lib/xlsx/xform/drawing/drawing-xform.js", + "lib/xlsx/xform/drawing/ext-lst-xform.js", + "lib/xlsx/xform/drawing/ext-xform.js", + "lib/xlsx/xform/drawing/hlink-click-xform.js", + "lib/xlsx/xform/drawing/nv-pic-pr-xform.js", + "lib/xlsx/xform/drawing/one-cell-anchor-xform.js", + "lib/xlsx/xform/drawing/pic-xform.js", + "lib/xlsx/xform/drawing/sp-pr.js", + "lib/xlsx/xform/drawing/two-cell-anchor-xform.js", + "lib/xlsx/xform/list-xform.js", + "lib/xlsx/xform/sheet/auto-filter-xform.js", + "lib/xlsx/xform/sheet/cell-xform.js", + "lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js", + "lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js", + "lib/xlsx/xform/sheet/cf/cf-rule-xform.js", + "lib/xlsx/xform/sheet/cf/cfvo-xform.js", + "lib/xlsx/xform/sheet/cf/color-scale-xform.js", + "lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js", + "lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js", + "lib/xlsx/xform/sheet/cf/databar-xform.js", + "lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js", + "lib/xlsx/xform/sheet/cf/formula-xform.js", + "lib/xlsx/xform/sheet/cf/icon-set-xform.js", + "lib/xlsx/xform/sheet/col-xform.js", + "lib/xlsx/xform/sheet/data-validations-xform.js", + "lib/xlsx/xform/sheet/dimension-xform.js", + "lib/xlsx/xform/sheet/drawing-xform.js", + "lib/xlsx/xform/sheet/ext-lst-xform.js", + "lib/xlsx/xform/sheet/header-footer-xform.js", + "lib/xlsx/xform/sheet/hyperlink-xform.js", + "lib/xlsx/xform/sheet/merge-cell-xform.js", + "lib/xlsx/xform/sheet/merges.js", + "lib/xlsx/xform/sheet/outline-properties-xform.js", + "lib/xlsx/xform/sheet/page-breaks-xform.js", + "lib/xlsx/xform/sheet/page-margins-xform.js", + "lib/xlsx/xform/sheet/page-setup-properties-xform.js", + "lib/xlsx/xform/sheet/page-setup-xform.js", + "lib/xlsx/xform/sheet/picture-xform.js", + "lib/xlsx/xform/sheet/print-options-xform.js", + "lib/xlsx/xform/sheet/row-breaks-xform.js", + "lib/xlsx/xform/sheet/row-xform.js", + "lib/xlsx/xform/sheet/sheet-format-properties-xform.js", + "lib/xlsx/xform/sheet/sheet-properties-xform.js", + "lib/xlsx/xform/sheet/sheet-protection-xform.js", + "lib/xlsx/xform/sheet/sheet-view-xform.js", + "lib/xlsx/xform/sheet/table-part-xform.js", + "lib/xlsx/xform/sheet/worksheet-xform.js", + "lib/xlsx/xform/simple/boolean-xform.js", + "lib/xlsx/xform/simple/date-xform.js", + "lib/xlsx/xform/simple/integer-xform.js", + "lib/xlsx/xform/simple/string-xform.js", + "lib/xlsx/xform/static-xform.js", + "lib/xlsx/xform/strings/phonetic-text-xform.js", + "lib/xlsx/xform/strings/rich-text-xform.js", + "lib/xlsx/xform/strings/shared-string-xform.js", + "lib/xlsx/xform/strings/shared-strings-xform.js", + "lib/xlsx/xform/strings/text-xform.js", + "lib/xlsx/xform/style/alignment-xform.js", + "lib/xlsx/xform/style/border-xform.js", + "lib/xlsx/xform/style/color-xform.js", + "lib/xlsx/xform/style/dxf-xform.js", + "lib/xlsx/xform/style/fill-xform.js", + "lib/xlsx/xform/style/font-xform.js", + "lib/xlsx/xform/style/numfmt-xform.js", + "lib/xlsx/xform/style/protection-xform.js", + "lib/xlsx/xform/style/style-xform.js", + "lib/xlsx/xform/style/styles-xform.js", + "lib/xlsx/xform/style/underline-xform.js", + "lib/xlsx/xform/table/auto-filter-xform.js", + "lib/xlsx/xform/table/custom-filter-xform.js", + "lib/xlsx/xform/table/filter-column-xform.js", + "lib/xlsx/xform/table/filter-xform.js", + "lib/xlsx/xform/table/table-column-xform.js", + "lib/xlsx/xform/table/table-style-info-xform.js", + "lib/xlsx/xform/table/table-xform.js", + "lib/xlsx/xlsx.js", + "lib/xlsx/xml/theme1.js", + "node_modules/@fast-csv/format/build/src/CsvFormatterStream.js", + "node_modules/@fast-csv/format/build/src/FormatterOptions.js", + "node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js", + "node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js", + "node_modules/@fast-csv/format/build/src/formatter/index.js", + "node_modules/@fast-csv/format/build/src/index.js", + "node_modules/@fast-csv/format/build/src/types.js", + "node_modules/@fast-csv/parse/build/src/CsvParserStream.js", + "node_modules/@fast-csv/parse/build/src/ParserOptions.js", + "node_modules/@fast-csv/parse/build/src/index.js", + "node_modules/@fast-csv/parse/build/src/parser/Parser.js", + "node_modules/@fast-csv/parse/build/src/parser/RowParser.js", + "node_modules/@fast-csv/parse/build/src/parser/Scanner.js", + "node_modules/@fast-csv/parse/build/src/parser/Token.js", + "node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js", + "node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js", + "node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js", + "node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js", + "node_modules/@fast-csv/parse/build/src/parser/column/index.js", + "node_modules/@fast-csv/parse/build/src/parser/index.js", + "node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js", + "node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js", + "node_modules/@fast-csv/parse/build/src/transforms/index.js", + "node_modules/@fast-csv/parse/build/src/types.js", + "node_modules/asn1.js/lib/asn1.js", + "node_modules/asn1.js/lib/asn1/api.js", + "node_modules/asn1.js/lib/asn1/base/buffer.js", + "node_modules/asn1.js/lib/asn1/base/index.js", + "node_modules/asn1.js/lib/asn1/base/node.js", + "node_modules/asn1.js/lib/asn1/base/reporter.js", + "node_modules/asn1.js/lib/asn1/constants/der.js", + "node_modules/asn1.js/lib/asn1/constants/index.js", + "node_modules/asn1.js/lib/asn1/decoders/der.js", + "node_modules/asn1.js/lib/asn1/decoders/index.js", + "node_modules/asn1.js/lib/asn1/decoders/pem.js", + "node_modules/asn1.js/lib/asn1/encoders/der.js", + "node_modules/asn1.js/lib/asn1/encoders/index.js", + "node_modules/asn1.js/lib/asn1/encoders/pem.js", + "node_modules/asn1.js/node_modules/bn.js/lib/bn.js", + "node_modules/base64-js/index.js", + "node_modules/bn.js/lib/bn.js", + "node_modules/brorand/index.js", + "node_modules/browser-resolve/empty.js", + "node_modules/browserify-aes/aes.js", + "node_modules/browserify-aes/authCipher.js", + "node_modules/browserify-aes/browser.js", + "node_modules/browserify-aes/decrypter.js", + "node_modules/browserify-aes/encrypter.js", + "node_modules/browserify-aes/ghash.js", + "node_modules/browserify-aes/incr32.js", + "node_modules/browserify-aes/modes/cbc.js", + "node_modules/browserify-aes/modes/cfb.js", + "node_modules/browserify-aes/modes/cfb1.js", + "node_modules/browserify-aes/modes/cfb8.js", + "node_modules/browserify-aes/modes/ctr.js", + "node_modules/browserify-aes/modes/ecb.js", + "node_modules/browserify-aes/modes/index.js", + "node_modules/browserify-aes/modes/list.json", + "node_modules/browserify-aes/modes/ofb.js", + "node_modules/browserify-aes/streamCipher.js", + "node_modules/browserify-cipher/browser.js", + "node_modules/browserify-des/index.js", + "node_modules/browserify-des/modes.js", + "node_modules/browserify-rsa/index.js", + "node_modules/browserify-sign/algos.js", + "node_modules/browserify-sign/browser/algorithms.json", + "node_modules/browserify-sign/browser/curves.json", + "node_modules/browserify-sign/browser/index.js", + "node_modules/browserify-sign/browser/sign.js", + "node_modules/browserify-sign/browser/verify.js", + "node_modules/browserify/lib/_empty.js", + "node_modules/browserify/node_modules/safe-buffer/index.js", + "node_modules/browserify/node_modules/string_decoder/lib/string_decoder.js", + "node_modules/buffer-xor/index.js", + "node_modules/buffer/index.js", + "node_modules/cipher-base/index.js", + "node_modules/core-js/internals/a-callable.js", + "node_modules/core-js/internals/a-constructor.js", + "node_modules/core-js/internals/a-possible-prototype.js", + "node_modules/core-js/internals/add-to-unscopables.js", + "node_modules/core-js/internals/an-instance.js", + "node_modules/core-js/internals/an-object.js", + "node_modules/core-js/internals/array-includes.js", + "node_modules/core-js/internals/array-iteration.js", + "node_modules/core-js/internals/array-slice-simple.js", + "node_modules/core-js/internals/array-slice.js", + "node_modules/core-js/internals/array-species-constructor.js", + "node_modules/core-js/internals/array-species-create.js", + "node_modules/core-js/internals/check-correctness-of-iteration.js", + "node_modules/core-js/internals/classof-raw.js", + "node_modules/core-js/internals/classof.js", + "node_modules/core-js/internals/copy-constructor-properties.js", + "node_modules/core-js/internals/correct-is-regexp-logic.js", + "node_modules/core-js/internals/correct-prototype-getter.js", + "node_modules/core-js/internals/create-iter-result-object.js", + "node_modules/core-js/internals/create-non-enumerable-property.js", + "node_modules/core-js/internals/create-property-descriptor.js", + "node_modules/core-js/internals/create-property.js", + "node_modules/core-js/internals/define-built-in-accessor.js", + "node_modules/core-js/internals/define-built-in.js", + "node_modules/core-js/internals/define-global-property.js", + "node_modules/core-js/internals/descriptors.js", + "node_modules/core-js/internals/document-all.js", + "node_modules/core-js/internals/document-create-element.js", + "node_modules/core-js/internals/engine-is-browser.js", + "node_modules/core-js/internals/engine-is-deno.js", + "node_modules/core-js/internals/engine-is-ios-pebble.js", + "node_modules/core-js/internals/engine-is-ios.js", + "node_modules/core-js/internals/engine-is-node.js", + "node_modules/core-js/internals/engine-is-webos-webkit.js", + "node_modules/core-js/internals/engine-user-agent.js", + "node_modules/core-js/internals/engine-v8-version.js", + "node_modules/core-js/internals/enum-bug-keys.js", + "node_modules/core-js/internals/export.js", + "node_modules/core-js/internals/fails.js", + "node_modules/core-js/internals/function-apply.js", + "node_modules/core-js/internals/function-bind-context.js", + "node_modules/core-js/internals/function-bind-native.js", + "node_modules/core-js/internals/function-call.js", + "node_modules/core-js/internals/function-name.js", + "node_modules/core-js/internals/function-uncurry-this-accessor.js", + "node_modules/core-js/internals/function-uncurry-this-clause.js", + "node_modules/core-js/internals/function-uncurry-this.js", + "node_modules/core-js/internals/get-built-in.js", + "node_modules/core-js/internals/get-iterator-method.js", + "node_modules/core-js/internals/get-iterator.js", + "node_modules/core-js/internals/get-json-replacer-function.js", + "node_modules/core-js/internals/get-method.js", + "node_modules/core-js/internals/global.js", + "node_modules/core-js/internals/has-own-property.js", + "node_modules/core-js/internals/hidden-keys.js", + "node_modules/core-js/internals/host-report-errors.js", + "node_modules/core-js/internals/html.js", + "node_modules/core-js/internals/ie8-dom-define.js", + "node_modules/core-js/internals/indexed-object.js", + "node_modules/core-js/internals/inspect-source.js", + "node_modules/core-js/internals/internal-state.js", + "node_modules/core-js/internals/is-array-iterator-method.js", + "node_modules/core-js/internals/is-array.js", + "node_modules/core-js/internals/is-callable.js", + "node_modules/core-js/internals/is-constructor.js", + "node_modules/core-js/internals/is-forced.js", + "node_modules/core-js/internals/is-null-or-undefined.js", + "node_modules/core-js/internals/is-object.js", + "node_modules/core-js/internals/is-pure.js", + "node_modules/core-js/internals/is-regexp.js", + "node_modules/core-js/internals/is-symbol.js", + "node_modules/core-js/internals/iterate.js", + "node_modules/core-js/internals/iterator-close.js", + "node_modules/core-js/internals/iterator-create-constructor.js", + "node_modules/core-js/internals/iterator-define.js", + "node_modules/core-js/internals/iterators-core.js", + "node_modules/core-js/internals/length-of-array-like.js", + "node_modules/core-js/internals/make-built-in.js", + "node_modules/core-js/internals/math-trunc.js", + "node_modules/core-js/internals/microtask.js", + "node_modules/core-js/internals/new-promise-capability.js", + "node_modules/core-js/internals/not-a-regexp.js", + "node_modules/core-js/internals/object-assign.js", + "node_modules/core-js/internals/object-create.js", + "node_modules/core-js/internals/object-define-properties.js", + "node_modules/core-js/internals/object-define-property.js", + "node_modules/core-js/internals/object-get-own-property-descriptor.js", + "node_modules/core-js/internals/object-get-own-property-names-external.js", + "node_modules/core-js/internals/object-get-own-property-names.js", + "node_modules/core-js/internals/object-get-own-property-symbols.js", + "node_modules/core-js/internals/object-get-prototype-of.js", + "node_modules/core-js/internals/object-is-prototype-of.js", + "node_modules/core-js/internals/object-keys-internal.js", + "node_modules/core-js/internals/object-keys.js", + "node_modules/core-js/internals/object-property-is-enumerable.js", + "node_modules/core-js/internals/object-set-prototype-of.js", + "node_modules/core-js/internals/object-to-array.js", + "node_modules/core-js/internals/ordinary-to-primitive.js", + "node_modules/core-js/internals/own-keys.js", + "node_modules/core-js/internals/path.js", + "node_modules/core-js/internals/perform.js", + "node_modules/core-js/internals/promise-constructor-detection.js", + "node_modules/core-js/internals/promise-native-constructor.js", + "node_modules/core-js/internals/promise-resolve.js", + "node_modules/core-js/internals/promise-statics-incorrect-iteration.js", + "node_modules/core-js/internals/queue.js", + "node_modules/core-js/internals/require-object-coercible.js", + "node_modules/core-js/internals/set-species.js", + "node_modules/core-js/internals/set-to-string-tag.js", + "node_modules/core-js/internals/shared-key.js", + "node_modules/core-js/internals/shared-store.js", + "node_modules/core-js/internals/shared.js", + "node_modules/core-js/internals/species-constructor.js", + "node_modules/core-js/internals/symbol-constructor-detection.js", + "node_modules/core-js/internals/symbol-define-to-primitive.js", + "node_modules/core-js/internals/symbol-registry-detection.js", + "node_modules/core-js/internals/task.js", + "node_modules/core-js/internals/to-absolute-index.js", + "node_modules/core-js/internals/to-indexed-object.js", + "node_modules/core-js/internals/to-integer-or-infinity.js", + "node_modules/core-js/internals/to-length.js", + "node_modules/core-js/internals/to-object.js", + "node_modules/core-js/internals/to-primitive.js", + "node_modules/core-js/internals/to-property-key.js", + "node_modules/core-js/internals/to-string-tag-support.js", + "node_modules/core-js/internals/to-string.js", + "node_modules/core-js/internals/try-to-string.js", + "node_modules/core-js/internals/uid.js", + "node_modules/core-js/internals/use-symbol-as-uid.js", + "node_modules/core-js/internals/v8-prototype-define-bug.js", + "node_modules/core-js/internals/validate-arguments-length.js", + "node_modules/core-js/internals/weak-map-basic-detection.js", + "node_modules/core-js/internals/well-known-symbol-define.js", + "node_modules/core-js/internals/well-known-symbol-wrapped.js", + "node_modules/core-js/internals/well-known-symbol.js", + "node_modules/core-js/modules/es.array.find-index.js", + "node_modules/core-js/modules/es.array.find.js", + "node_modules/core-js/modules/es.array.includes.js", + "node_modules/core-js/modules/es.array.iterator.js", + "node_modules/core-js/modules/es.json.stringify.js", + "node_modules/core-js/modules/es.number.is-nan.js", + "node_modules/core-js/modules/es.object.assign.js", + "node_modules/core-js/modules/es.object.get-own-property-symbols.js", + "node_modules/core-js/modules/es.object.keys.js", + "node_modules/core-js/modules/es.object.values.js", + "node_modules/core-js/modules/es.promise.all.js", + "node_modules/core-js/modules/es.promise.catch.js", + "node_modules/core-js/modules/es.promise.constructor.js", + "node_modules/core-js/modules/es.promise.finally.js", + "node_modules/core-js/modules/es.promise.js", + "node_modules/core-js/modules/es.promise.race.js", + "node_modules/core-js/modules/es.promise.reject.js", + "node_modules/core-js/modules/es.promise.resolve.js", + "node_modules/core-js/modules/es.string.from-code-point.js", + "node_modules/core-js/modules/es.string.includes.js", + "node_modules/core-js/modules/es.symbol.async-iterator.js", + "node_modules/core-js/modules/es.symbol.constructor.js", + "node_modules/core-js/modules/es.symbol.for.js", + "node_modules/core-js/modules/es.symbol.js", + "node_modules/core-js/modules/es.symbol.key-for.js", + "node_modules/core-util-is/lib/util.js", + "node_modules/create-ecdh/browser.js", + "node_modules/create-hash/browser.js", + "node_modules/create-hash/md5.js", + "node_modules/create-hmac/browser.js", + "node_modules/create-hmac/legacy.js", + "node_modules/crypto-browserify/index.js", + "node_modules/dayjs/dayjs.min.js", + "node_modules/dayjs/plugin/customParseFormat.js", + "node_modules/dayjs/plugin/utc.js", + "node_modules/des.js/lib/des.js", + "node_modules/des.js/lib/des/cbc.js", + "node_modules/des.js/lib/des/cipher.js", + "node_modules/des.js/lib/des/des.js", + "node_modules/des.js/lib/des/ede.js", + "node_modules/des.js/lib/des/utils.js", + "node_modules/diffie-hellman/browser.js", + "node_modules/diffie-hellman/lib/dh.js", + "node_modules/diffie-hellman/lib/generatePrime.js", + "node_modules/diffie-hellman/lib/primes.json", + "node_modules/elliptic/lib/elliptic.js", + "node_modules/elliptic/lib/elliptic/curve/base.js", + "node_modules/elliptic/lib/elliptic/curve/edwards.js", + "node_modules/elliptic/lib/elliptic/curve/index.js", + "node_modules/elliptic/lib/elliptic/curve/mont.js", + "node_modules/elliptic/lib/elliptic/curve/short.js", + "node_modules/elliptic/lib/elliptic/curves.js", + "node_modules/elliptic/lib/elliptic/ec/index.js", + "node_modules/elliptic/lib/elliptic/ec/key.js", + "node_modules/elliptic/lib/elliptic/ec/signature.js", + "node_modules/elliptic/lib/elliptic/eddsa/index.js", + "node_modules/elliptic/lib/elliptic/eddsa/key.js", + "node_modules/elliptic/lib/elliptic/eddsa/signature.js", + "node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js", + "node_modules/elliptic/lib/elliptic/utils.js", + "node_modules/elliptic/package.json", + "node_modules/events/events.js", + "node_modules/evp_bytestokey/index.js", + "node_modules/fast-csv/build/src/index.js", + "node_modules/hash-base/index.js", + "node_modules/hash.js/lib/hash.js", + "node_modules/hash.js/lib/hash/common.js", + "node_modules/hash.js/lib/hash/hmac.js", + "node_modules/hash.js/lib/hash/ripemd.js", + "node_modules/hash.js/lib/hash/sha.js", + "node_modules/hash.js/lib/hash/sha/1.js", + "node_modules/hash.js/lib/hash/sha/224.js", + "node_modules/hash.js/lib/hash/sha/256.js", + "node_modules/hash.js/lib/hash/sha/384.js", + "node_modules/hash.js/lib/hash/sha/512.js", + "node_modules/hash.js/lib/hash/sha/common.js", + "node_modules/hash.js/lib/hash/utils.js", + "node_modules/hmac-drbg/lib/hmac-drbg.js", + "node_modules/ieee754/index.js", + "node_modules/inherits/inherits_browser.js", + "node_modules/jszip/dist/jszip.min.js", + "node_modules/lodash.escaperegexp/index.js", + "node_modules/lodash.groupby/index.js", + "node_modules/lodash.isboolean/index.js", + "node_modules/lodash.isequal/index.js", + "node_modules/lodash.isfunction/index.js", + "node_modules/lodash.isnil/index.js", + "node_modules/lodash.isundefined/index.js", + "node_modules/lodash.uniq/index.js", + "node_modules/md5.js/index.js", + "node_modules/miller-rabin/lib/mr.js", + "node_modules/minimalistic-assert/index.js", + "node_modules/minimalistic-crypto-utils/lib/utils.js", + "node_modules/parse-asn1/aesid.json", + "node_modules/parse-asn1/asn1.js", + "node_modules/parse-asn1/certificate.js", + "node_modules/parse-asn1/fixProc.js", + "node_modules/parse-asn1/index.js", + "node_modules/pbkdf2/browser.js", + "node_modules/pbkdf2/lib/async.js", + "node_modules/pbkdf2/lib/default-encoding.js", + "node_modules/pbkdf2/lib/precondition.js", + "node_modules/pbkdf2/lib/sync-browser.js", + "node_modules/pbkdf2/lib/to-buffer.js", + "node_modules/process-nextick-args/index.js", + "node_modules/process/browser.js", + "node_modules/public-encrypt/browser.js", + "node_modules/public-encrypt/mgf.js", + "node_modules/public-encrypt/privateDecrypt.js", + "node_modules/public-encrypt/publicEncrypt.js", + "node_modules/public-encrypt/withPublic.js", + "node_modules/public-encrypt/xor.js", + "node_modules/randombytes/browser.js", + "node_modules/randomfill/browser.js", + "node_modules/readable-stream/errors-browser.js", + "node_modules/readable-stream/lib/_stream_duplex.js", + "node_modules/readable-stream/lib/_stream_passthrough.js", + "node_modules/readable-stream/lib/_stream_readable.js", + "node_modules/readable-stream/lib/_stream_transform.js", + "node_modules/readable-stream/lib/_stream_writable.js", + "node_modules/readable-stream/lib/internal/streams/async_iterator.js", + "node_modules/readable-stream/lib/internal/streams/buffer_list.js", + "node_modules/readable-stream/lib/internal/streams/destroy.js", + "node_modules/readable-stream/lib/internal/streams/end-of-stream.js", + "node_modules/readable-stream/lib/internal/streams/from-browser.js", + "node_modules/readable-stream/lib/internal/streams/pipeline.js", + "node_modules/readable-stream/lib/internal/streams/state.js", + "node_modules/readable-stream/lib/internal/streams/stream-browser.js", + "node_modules/readable-stream/readable-browser.js", + "node_modules/regenerator-runtime/runtime.js", + "node_modules/ripemd160/index.js", + "node_modules/safe-buffer/index.js", + "node_modules/safer-buffer/safer.js", + "node_modules/saxes/saxes.js", + "node_modules/sha.js/hash.js", + "node_modules/sha.js/index.js", + "node_modules/sha.js/sha.js", + "node_modules/sha.js/sha1.js", + "node_modules/sha.js/sha224.js", + "node_modules/sha.js/sha256.js", + "node_modules/sha.js/sha384.js", + "node_modules/sha.js/sha512.js", + "node_modules/stream-browserify/index.js", + "node_modules/stream-browserify/node_modules/isarray/index.js", + "node_modules/stream-browserify/node_modules/readable-stream/duplex-browser.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/BufferList.js", + "node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js", + "node_modules/stream-browserify/node_modules/readable-stream/passthrough.js", + "node_modules/stream-browserify/node_modules/readable-stream/readable-browser.js", + "node_modules/stream-browserify/node_modules/readable-stream/transform.js", + "node_modules/stream-browserify/node_modules/readable-stream/writable-browser.js", + "node_modules/timers-browserify/main.js", + "node_modules/util-deprecate/browser.js", + "node_modules/util/node_modules/inherits/inherits_browser.js", + "node_modules/util/support/isBufferBrowser.js", + "node_modules/util/util.js", + "node_modules/uuid/dist/index.js", + "node_modules/uuid/dist/md5-browser.js", + "node_modules/uuid/dist/nil.js", + "node_modules/uuid/dist/parse.js", + "node_modules/uuid/dist/regex.js", + "node_modules/uuid/dist/rng-browser.js", + "node_modules/uuid/dist/sha1-browser.js", + "node_modules/uuid/dist/stringify.js", + "node_modules/uuid/dist/v1.js", + "node_modules/uuid/dist/v3.js", + "node_modules/uuid/dist/v35.js", + "node_modules/uuid/dist/v4.js", + "node_modules/uuid/dist/v5.js", + "node_modules/uuid/dist/validate.js", + "node_modules/uuid/dist/version.js", + "node_modules/xmlchars/xml/1.0/ed5.js", + "node_modules/xmlchars/xml/1.1/ed2.js", + "node_modules/xmlchars/xmlns/1.0/ed3.js" + ], + "names": [], + "mappings": "AAAA;;;ACAA,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;AACxB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;AACnC,MAAM,iBAAiB,GAAG,OAAO,CAAC,gCAAgC,CAAC;AACnE,MAAM,GAAG,GAAG,OAAO,CAAC,kBAAkB,CAAC;AACvC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACpE,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAEhD,MAAM;EACJ,EAAE,EAAE;IAAC;EAAM;AACb,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;;AAE7B;AACA,MAAM,aAAa,GAAG;EACpB,IAAI,EAAE,IAAI;EACV,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE;IAAC,KAAK,EAAE;EAAM,CAAC;EACvB,OAAO,EAAE;IAAC,KAAK,EAAE;EAAO,CAAC;EACzB,QAAQ,EAAE;IAAC,KAAK,EAAE;EAAQ,CAAC;EAC3B,SAAS,EAAE;IAAC,KAAK,EAAE;EAAS,CAAC;EAC7B,QAAQ,EAAE;IAAC,KAAK,EAAE;EAAQ,CAAC;EAC3B,SAAS,EAAE;IAAC,KAAK,EAAE;EAAS,CAAC;EAC7B,OAAO,EAAE;IAAC,KAAK,EAAE;EAAO;AAC1B,CAAC;AACD;;AAEA,MAAM,GAAG,CAAC;EACR,WAAW,CAAC,QAAQ,EAAE;IACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ;IACxB,IAAI,CAAC,SAAS,GAAG,IAAI;EACvB;EAEA,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE;IAChC,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;IACvB,IAAI,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;MAC7B,MAAM,IAAI,KAAK,CAAE,mBAAkB,QAAS,EAAC,CAAC;IAChD;IACA,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;IAClD,MAAM,CAAC,KAAK,CAAC,CAAC;IACd,OAAO,SAAS;EAClB;EAEA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;IACpB,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;IAEvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;MACtC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;MAE/D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CACzC,wBAAwB,EACxB,uBAAuB,EACvB,YAAY,EACZ,YAAY,CACb;MACD,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,IACX,UAAS,KAAK,EAAE;QACd,IAAI,KAAK,KAAK,EAAE,EAAE;UAChB,OAAO,IAAI;QACb;QACA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,WAAW,KAAK,QAAQ,EAAE;UAC1D,OAAO,WAAW;QACpB;QACA,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,iBAAiB,KAAK;UACjE,IAAI,YAAY,EAAE;YAChB,OAAO,YAAY;UACrB;UACA,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC;UACtD,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;YACtB,OAAO,QAAQ;UACjB;UACA,OAAO,IAAI;QACb,CAAC,EAAE,IAAI,CAAC;QACR,IAAI,EAAE,EAAE;UACN,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/B;QACA,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC;QACpC,IAAI,OAAO,KAAK,SAAS,EAAE;UACzB,OAAO,OAAO;QAChB;QACA,OAAO,KAAK;MACd,CAAC;MAEH,MAAM,SAAS,GAAG,OAAO,CACtB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAC5B,EAAE,CAAC,MAAM,EAAE,IAAI,IAAI;QAClB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACjC,CAAC,CAAC,CACD,EAAE,CAAC,KAAK,EAAE,MAAM;QACf,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;MACxC,CAAC,CAAC;MAEJ,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;MAEtD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;EACE,iBAAiB,CAAA,EAAG;IAClB,MAAM,IAAI,KAAK,CACb,wNACF,CAAC;EACH;EAEA,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;IACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;MACtC,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;MACvB;MACA;MACA;;MAEA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;MAElF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;MAC1D,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM;QACxB,OAAO,CAAC,CAAC;MACX,CAAC,CAAC;MACF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;MAC7B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;MAEtB,MAAM;QAAC,UAAU;QAAE;MAAO,CAAC,GAAG,OAAO;MACrC,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,KACV,KAAK,IAAI;QACR,IAAI,KAAK,EAAE;UACT,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;YACjC,OAAO,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE;UAC5C;UACA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;YACjC,OAAO,KAAK,CAAC,MAAM,IAAI,EAAE;UAC3B;UACA,IAAI,KAAK,YAAY,IAAI,EAAE;YACzB,IAAI,UAAU,EAAE;cACd,OAAO,OAAO,GACV,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GACnC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YACrC;YACA,OAAO,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;UACpE;UACA,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,OAAO,KAAK,CAAC,KAAK;UACpB;UACA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;UAC9B;QACF;QACA,OAAO,KAAK;MACd,CAAC,CAAC;MAEJ,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,KAAK,SAAS,IAAI,OAAO,CAAC,gBAAgB;MAC3F,IAAI,OAAO,GAAG,CAAC;MACf,IAAI,SAAS,EAAE;QACb,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK;UACpC,IAAI,gBAAgB,EAAE;YACpB,OAAO,OAAO,EAAE,GAAG,SAAS,GAAG,CAAC,EAAE;cAChC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB;UACF;UACA,MAAM;YAAC;UAAM,CAAC,GAAG,GAAG;UACpB,MAAM,CAAC,KAAK,CAAC,CAAC;UACd,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;UAChC,OAAO,GAAG,SAAS;QACrB,CAAC,CAAC;MACJ;MACA,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC3B,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;IAEvB,MAAM,aAAa,GAAG;MACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI;IAChC,CAAC;IACD,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC;IAE5D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;EACpC;EAEA,MAAM,WAAW,CAAC,OAAO,EAAE;IACzB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;IAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;EACtB;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,GAAG;;;AC9LpB,YAAY;;AAEZ,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAE9C,MAAM,MAAM,CAAC;EACX,WAAW,CAAC,SAAS,EAAE,OAAO,EAAc;IAAA,IAAZ,MAAM,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,CAAC;IACxC,IAAI,CAAC,SAAS,GAAG,SAAS;IAE1B,IAAI,CAAC,OAAO,EAAE;MACZ,IAAI,CAAC,SAAS,GAAG,CAAC;MAClB,IAAI,CAAC,YAAY,GAAG,CAAC;MACrB,IAAI,CAAC,SAAS,GAAG,CAAC;MAClB,IAAI,CAAC,YAAY,GAAG,CAAC;IACvB,CAAC,MAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;MACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;MAC/C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,GAAG,MAAM;MACrC,IAAI,CAAC,YAAY,GAAG,CAAC;MACrB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,GAAG,MAAM;MACrC,IAAI,CAAC,YAAY,GAAG,CAAC;IACvB,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE;MAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC;MACvC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC;MAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC;MACvC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC;IAC/C,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE;MACpC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,MAAM;MAC/B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,MAAM;IACjC,CAAC,MAAM;MACL,IAAI,CAAC,SAAS,GAAG,CAAC;MAClB,IAAI,CAAC,YAAY,GAAG,CAAC;MACrB,IAAI,CAAC,SAAS,GAAG,CAAC;MAClB,IAAI,CAAC,YAAY,GAAG,CAAC;IACvB;EACF;EAEA,OAAO,UAAU,CAAC,KAAK,EAAE;IACvB,OAAO,KAAK,YAAY,MAAM,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC;EAC7E;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,QAAS;EAC1F;EAEA,IAAI,GAAG,CAAC,CAAC,EAAE;IACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC;EACtE;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,SAAU;EAC5F;EAEA,IAAI,GAAG,CAAC,CAAC,EAAE;IACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;EACvE;EAEA,IAAI,QAAQ,CAAA,EAAG;IACb,OAAO,IAAI,CAAC,SAAS,IACnB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAC5C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,aAAa,GACxD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GACtE,MAAM;EACZ;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,SAAS,IACnB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IACzC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,GAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,GACpE,MAAM;EACZ;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO;MACL,SAAS,EAAE,IAAI,CAAC,SAAS;MACzB,YAAY,EAAE,IAAI,CAAC,YAAY;MAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;MACzB,YAAY,EAAE,IAAI,CAAC;IACrB,CAAC;EACH;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;IAChC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY;IACtC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;IAChC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY;EACxC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,MAAM;;;;;AC1FvB;AACA,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC9C,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACxC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAChC,MAAM;EAAC;AAAY,CAAC,GAAG,OAAO,CAAC,yBAAyB,CAAC;AACzD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;AAC9B;AACA;AACA;AACA;;AAEA,MAAM,IAAI,CAAC;EACT,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAChC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;MACnB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;IACvC;IAEA,IAAI,CAAC,IAAI,GAAG,GAAG;IACf,IAAI,CAAC,OAAO,GAAG,MAAM;IAErB,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC;IACjC,IAAI,CAAC,QAAQ,GAAG,OAAO;;IAEvB;IACA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IAEjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE1D,IAAI,CAAC,WAAW,GAAG,CAAC;EACtB;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS;EAC5B;EAEA,IAAI,QAAQ,CAAA,EAAG;IACb,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ;EACrC;;EAEA;EACA,OAAO,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,KAAK;IACjB,OAAO,IAAI,CAAC,MAAM;IAClB,OAAO,IAAI,CAAC,IAAI;IAChB,OAAO,IAAI,CAAC,OAAO;IACnB,OAAO,IAAI,CAAC,QAAQ;EACtB;;EAEA;EACA;EACA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;EAC3B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK;EACzB;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EAEA,IAAI,SAAS,CAAC,KAAK,EAAE;IACnB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK;EAC9B;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;EAC3B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK;EACzB;EAEA,IAAI,UAAU,CAAA,EAAG;IACf,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;EAC9B;EAEA,IAAI,UAAU,CAAC,KAAK,EAAE;IACpB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK;EAC/B;EAEA,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,MAAM,MAAM,GAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAM,QAAQ,IAAI,QAAQ,CAAC,MAAO;IAC7E,IAAI,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM;IAEjC,MAAM,IAAI,GAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAM,QAAQ,IAAI,QAAQ,CAAC,IAAK;IACvE,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI;IAE3B,MAAM,SAAS,GAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,IAAM,QAAQ,IAAI,QAAQ,CAAC,SAAU;IACtF,IAAI,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS;IAE1C,MAAM,MAAM,GAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAM,QAAQ,IAAI,QAAQ,CAAC,MAAO;IAC7E,IAAI,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM;IAEjC,MAAM,IAAI,GAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAM,QAAQ,IAAI,QAAQ,CAAC,IAAK;IACvE,IAAI,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI;IAE3B,MAAM,UAAU,GAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,IAAM,QAAQ,IAAI,QAAQ,CAAC,UAAW;IACzF,IAAI,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,UAAU;IAE7C,OAAO,KAAK;EACd;;EAEA;EACA;EACA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,QAAQ;EACtB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;EACzB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;EAC5B;EAEA,IAAI,QAAQ,CAAA,EAAG;IACb,OAAQ,IAAG,IAAI,CAAC,OAAO,CAAC,MAAO,IAAG,IAAI,CAAC,GAAI,EAAC;EAC9C;;EAEA;EACA;;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;EACzB;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa;EAClC;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;EAClC;;EAEA;EACA;;EAEA,WAAW,CAAA,EAAG;IACZ,IAAI,CAAC,WAAW,EAAE;EACpB;EAEA,eAAe,CAAA,EAAG;IAChB,IAAI,CAAC,WAAW,EAAE;EACpB;EAEA,IAAI,QAAQ,CAAA,EAAG;IACb,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;EAC/D;EAEA,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE;IACzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;IAC1D,IAAI,CAAC,WAAW,EAAE;MAChB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;IAC3B;EACF;EAEA,OAAO,CAAA,EAAG;IACR,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MAClC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;MACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;MACjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACxE;EACF;EAEA,UAAU,CAAC,MAAM,EAAE;IACjB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,KAAK;IACvD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;EACvC;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MAClC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;IAC3B;IACA,OAAO,IAAI,CAAC,CAAC;EACf;;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;EAClD;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS;EAC9B;;EAEA;EACA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;EAC1B;;EAEA;EACA,IAAI,KAAK,CAAC,CAAC,EAAE;IACX;IACA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC;MAC5B;IACF;IAEA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;;IAErB;IACA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;EACvD;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;EAC5C;EAEA,IAAI,IAAI,CAAC,IAAI,EAAE;IACb,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;EAChC;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;EAC/B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;EAChC;EAEA,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,IAAI;EAClB;EAEA,mBAAmB,CAAC,SAAS,EAAE;IAC7B;IACA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;MACnC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE;QACrD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;QACvB;MACF,CAAC,CAAC;IACJ;EACF;;EAEA;EACA;EACA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;EAC5B;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;EAC3B;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW;EAChC;;EAEA;EACA;EACA,IAAI,WAAW,CAAA,EAAG;IAChB,MAAM;MAAC;IAAS,CAAC,GAAG,IAAI,CAAC,IAAI;IAC7B,OAAO;MACL,SAAS,EAAE,SAAS,CAAC,IAAI;MACzB,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,GAAG,EAAE,IAAI,CAAC,GAAG;MACb,GAAG,EAAE,IAAI,CAAC;IACZ,CAAC;EACH;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;EACtB;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;EACtB;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;EAChE;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,MAAM;MAAC;IAAY,CAAC,GAAG,IAAI,CAAC,QAAQ;IACpC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;MACpB,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;IAC5C,CAAC,CAAC;EACJ;EAEA,OAAO,CAAC,IAAI,EAAE;IACZ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;EAC1D;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;EAC7D;EAEA,cAAc,CAAA,EAAG;IACf,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;EAC7D;;EAEA;EACA;EACA,IAAI,gBAAgB,CAAA,EAAG;IACrB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe;EACvC;EAEA,IAAI,cAAc,CAAA,EAAG;IACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;EACjD;EAEA,IAAI,cAAc,CAAC,KAAK,EAAE;IACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;EAChD;;EAEA;EACA;;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,MAAM;MAAC;IAAK,CAAC,GAAG,IAAI,CAAC,MAAM;IAC3B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;IACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;IACrC;IACA,OAAO,KAAK;EACd;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK;IAEzB,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,QAAQ,KAAK,CAAC,OAAO,CAAC,IAAI;QACxB,KAAK,MAAM;UACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;UAC7C;MACJ;IACF;IAEA,IAAI,KAAK,CAAC,KAAK,EAAE;MACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;IAC1B,CAAC,MAAM;MACL,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB;EACF;AACF;AACA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS;;AAE5B;AACA;;AAEA,MAAM,SAAS,CAAC;EACd,WAAW,CAAC,IAAI,EAAE;IAChB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;EACH;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI;EACb;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf;EAAA;EAGF,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,EAAE;EACX;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,EAAE;EACX;AACF;AAEA,MAAM,WAAW,CAAC;EAChB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;MACvB;IACF,CAAC;EACH;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;EAC1B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACpC;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACpC;AACF;AAEA,MAAM,WAAW,CAAC;EAChB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;MACvB;IACF,CAAC;EACH;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;EAC1B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAQ,IAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAE,GAAE;EACpD;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;AACF;AAEA,MAAM,aAAa,CAAC;EAClB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;MACvB;IACF,CAAC;EACH;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;EAC1B;EAEA,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;EAC5D;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;EAC5B;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;EAC5B;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAQ,IAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAE,GAAE;EAC7C;EAEA,OAAO,CAAA,EAAG,CAAC;AACb;AAEA,MAAM,SAAS,CAAC;EACd,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;MACrB;IACF,CAAC;EACH;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;EAC1B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;EACvC;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACpC;AACF;AAEA,MAAM,cAAc,CAAC;EACnB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;MAC1B,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS;MACpC,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG;IACvC,CAAC;IACD,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;MAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IACpC;EACF;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,MAAM,CAAC,GAAG;MACR,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;MACrB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;IACxB,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;MACtB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;IAChC;IACA,OAAO,CAAC;EACV;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,GAAG;MACX,IAAI,EAAE,KAAK,CAAC,IAAI;MAChB,SAAS,EAAE,KAAK,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IACpC;EACF;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;;EAGE,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EAEA,IAAI,SAAS,CAAC,KAAK,EAAE;IACnB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK;EAC9B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;AACF;AAEA,MAAM,UAAU,CAAC;EACf,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE;IACxB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;MACtB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG;IACpC,CAAC;IACD,IAAI,CAAC,OAAO,GAAG,MAAM;IACrB,IAAI,MAAM,EAAE;MACV,MAAM,CAAC,WAAW,CAAC,CAAC;IACtB;EACF;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;EAC3B;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,KAAK,YAAY,IAAI,EAAE;MACzB,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;MAChC;MACA,KAAK,CAAC,WAAW,CAAC,CAAC;MACnB,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB,CAAC,MAAM;MACL,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK;IAC5B;EACF;EAEA,UAAU,CAAC,MAAM,EAAE;IACjB,OAAO,MAAM,KAAK,IAAI,CAAC,OAAO;EAChC;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,OAAO;EACrB;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa;EACnC;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,EAAE;EACX;EAEA,OAAO,CAAA,EAAG;IACR,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;EAChC;EAEA,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EAC9B;AACF;AAEA,MAAM,YAAY,CAAC;EACjB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,IAAI,GAAG,IAAI;IAEhB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;MACxB,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG,SAAS;MAC9C,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,SAAS;MAClC,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS;MAC1C,aAAa,EAAE,KAAK,GAAG,KAAK,CAAC,aAAa,GAAG,SAAS;MACtD,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG;IACjC,CAAC;EACH;EAEA,UAAU,CAAC,KAAK,EAAE;IAChB,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,EAAE,GAAG,IAAI,IAAI;MACjB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;MACzB,IAAI,KAAK,EAAE;QACT,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;MACpB;IACF,CAAC;IACD,EAAE,CAAC,SAAS,CAAC;IACb,EAAE,CAAC,QAAQ,CAAC;IACZ,EAAE,CAAC,KAAK,CAAC;IACT,EAAE,CAAC,WAAW,CAAC;IACf,EAAE,CAAC,eAAe,CAAC;IACnB,OAAO,IAAI;EACb;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;EACpC;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;EACrC;EAEA,QAAQ,CAAC,KAAK,EAAE;IACd,QAAQ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;MAC1B,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;MACpB,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;MACtB,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;MACtB,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI;QAClB;MACF,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;MACzB,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO;MACvB;QACE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;IAC/D;EACF;EAEA,IAAI,YAAY,CAAA,EAAG;IACjB;IACA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC;IACzF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CACvB,OAAO,CAAC,sDAAsD,EAAE,EAAE,CAAC,CACnE,KAAK,CAAC,oCAAoC,CAAC;IAC9C,OAAO;MACL,MAAM;MACN;IACF,CAAC;EACH;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC;EAC3D;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;MACtB,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM;IACjC;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;MAC5B,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM;IACjC;IACA,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI;EAC/B;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;EAC3B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;IAC3B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE;MACjC,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI;IAC7B;IACA,IAAI,CAAC,YAAY,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;MAChD,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM;IAC/B;IACA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;MACzB,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM;IAC/B;IACA,IAAI,CAAC,YAAY,IAAI,EAAE;MACrB,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI;IAC7B;IACA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE;MACzB,OAAO,KAAK,CAAC,SAAS,CAAC,SAAS;IAClC;IACA,IAAI,CAAC,CAAC,OAAO,EAAE;MACb,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO;IAChC;IAEA,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI;EAC7B;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,qBAAqB,CAAA,EAAG;IACtB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;MACxD,MAAM;QAAC;MAAS,CAAC,GAAG,IAAI,CAAC,IAAI;MAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;MAC3D,IAAI,CAAC,kBAAkB,GACrB,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC9E;IACA,OAAO,IAAI,CAAC,kBAAkB;EAChC;EAEA,WAAW,CAAA,EAAG;IACZ,OAAQ,GAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAG,EAAC;EACrC;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE;EAC9D;AACF;AAEA,MAAM,iBAAiB,CAAC;EACtB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;MAC7B;IACF,CAAC;EACH;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;EAC1B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;EAChC;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;EAChC;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACpC;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACpC;AACF;AAEA,MAAM,YAAY,CAAC;EACjB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;MACxB;IACF,CAAC;EACH;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;EAC1B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;EACjC;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACpC;AACF;AAEA,MAAM,UAAU,CAAC;EACf,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;MACtB;IACF,CAAC;EACH;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;EAC1B;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;EACxB;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EAC1C;AACF;AAEA,MAAM,SAAS,CAAC;EACd,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;MACvB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;MAC5B,QAAQ,EAAE;IACZ,CAAC;EACH;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;EAC5B;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK;IAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;EAC1C;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;EAC3B;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK;EAC5B;EAEA,WAAW,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,OAAO,CAAA,EAAG,CAAC;EAEX,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;AACF;;AAEA;AACA,MAAM,KAAK,GAAG;EACZ,OAAO,CAAC,KAAK,EAAE;IACb,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;MACzC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;IACxB;IACA,IAAI,KAAK,YAAY,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MACxD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;IAC1B;IACA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;IAC1B;IACA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;MAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;IAC3B;IACA,IAAI,KAAK,YAAY,IAAI,EAAE;MACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;IACxB;IACA,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;MACjC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;IAC7B;IACA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,EAAE;MACxC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;IAC3B;IACA,IAAI,KAAK,CAAC,QAAQ,EAAE;MAClB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;IAC5B;IACA,IAAI,KAAK,CAAC,YAAY,EAAE;MACtB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;IAChC;IACA,IAAI,KAAK,CAAC,KAAK,EAAE;MACf,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;IACA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB,CAAC;EAED;EACA,KAAK,EAAE,CACL;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;IAAE,CAAC,EAAE;EAAS,CAAC,EAClC;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;IAAE,CAAC,EAAE;EAAW,CAAC,EACtC;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;IAAE,CAAC,EAAE;EAAW,CAAC,EACtC;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;IAAE,CAAC,EAAE;EAAS,CAAC,EAClC;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;IAAE,CAAC,EAAE;EAAc,CAAC,EAC5C;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;IAAE,CAAC,EAAE;EAAY,CAAC,EACxC;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;IAAE,CAAC,EAAE;EAAU,CAAC,EACpC;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;IAAE,CAAC,EAAE;EAAS,CAAC,EAClC;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;IAAE,CAAC,EAAE;EAAiB,CAAC,EAClD;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;IAAE,CAAC,EAAE;EAAa,CAAC,EAC1C;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;IAAE,CAAC,EAAE;EAAY,CAAC,EACxC;IAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;IAAE,CAAC,EAAE;EAAU,CAAC,CACrC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;IACjB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACZ,OAAO,CAAC;EACV,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;IACxB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,CAAC,EAAE;MACN,MAAM,IAAI,KAAK,CAAE,kCAAiC,IAAK,EAAC,CAAC;IAC3D;IACA,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;EAC3B;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,IAAI;;;ACnmCrB,YAAY;;AAEZ,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAExC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAE9C,MAAM,oBAAoB,GAAG,CAAC;;AAE9B;AACA;AACA;AACA,MAAM,MAAM,CAAC;EACX,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;IACnC,IAAI,CAAC,UAAU,GAAG,SAAS;IAC3B,IAAI,CAAC,OAAO,GAAG,MAAM;IACrB,IAAI,IAAI,KAAK,KAAK,EAAE;MAClB;MACA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;EACF;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,OAAO;EACrB;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,UAAU;EACxB;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;EACnC;EAEA,IAAI,aAAa,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,oBAAoB;EACxE;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO;MACL,MAAM,EAAE,IAAI,CAAC,OAAO;MACpB,GAAG,EAAE,IAAI,CAAC,GAAG;MACb,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,MAAM,EAAE,IAAI,CAAC,MAAM;MACnB,YAAY,EAAE,IAAI,CAAC;IACrB,CAAC;EACH;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,KAAK,EAAE;MACT,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;MACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,oBAAoB;MAC3E,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY;MACtC,IAAI,KAAK,CAAC,KAAK,EAAE;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;MAC1B,CAAC,MAAM;QACL,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;MACjB;;MAEA;MACA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;MAC1B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM;IAC/B,CAAC,MAAM;MACL,OAAO,IAAI,CAAC,OAAO;MACnB,OAAO,IAAI,CAAC,IAAI;MAChB,OAAO,IAAI,CAAC,KAAK;MACjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;MACf,IAAI,CAAC,YAAY,GAAG,CAAC;IACvB;EACF;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,YAAY,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;EACtF;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,OAAO;EACrB;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,IAAI,CAAC,OAAO,GAAG,KAAK;MACpB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;QACpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,IAAI;MAC9D,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,IAAI,CAAC,OAAO,GAAG,SAAS;IAC1B;EACF;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,IAAI;EAClB;EAEA,IAAI,GAAG,CAAC,KAAK,EAAE;IACb,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IACnE,IAAI,MAAM,KAAK,IAAI,EAAE;MACnB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5C;IAEA,IAAI,CAAC,IAAI,GAAG,KAAK;IACjB,IAAI,KAAK,EAAE;MACT,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IAC/C;EACF;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO;EACvB;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,OAAO,GAAG,KAAK;EACtB;EAEA,IAAI,YAAY,CAAA,EAAG;IACjB,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC;EAChC;EAEA,IAAI,YAAY,CAAC,KAAK,EAAE;IACtB,IAAI,CAAC,aAAa,GAAG,KAAK;EAC5B;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,CAAC,EACN,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CACvF;EACH;EAEA,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,SAAS,CAAC;MACpB,GAAG,EAAE,IAAI,CAAC,GAAG;MACb,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG;IAChD,CAAC,CAAC;EACJ;EAEA,YAAY,CAAC,KAAK,EAAE;IAClB,OACE,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAC1B,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAC5B,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,IACxC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;EAEtC;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,IAAI,IAAI,CAAC,aAAa,EAAE;MACtB,OAAO,KAAK;IACd;IACA,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,OAAO,KAAK;IACd;IACA,IAAI,IAAI,CAAC,YAAY,EAAE;MACrB,OAAO,KAAK;IACd;IACA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK;IACpB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE;MAClF,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;EAC5B;EAEA,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM;IAC7B,IAAI,CAAC,QAAQ,EAAE;MACb,QAAQ,GAAG,OAAO;MAClB,OAAO,GAAG,IAAI;IAChB;IACA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK;MACnD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC7C,CAAC,CAAC;EACJ;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,MAAM,CAAC,GAAG,EAAE;IACZ,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK;MACjC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;QAC9C,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK;MAC3B;IACF,CAAC,CAAC;IACF,OAAO,CAAC;EACV;EAEA,IAAI,MAAM,CAAC,CAAC,EAAE;IACZ,IAAI,CAAC,CAAC,EAAE;MACN;IACF;IACA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM;IAC7B,IAAI,MAAM,GAAG,CAAC;IACd,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;MACzB;MACA,MAAM,GAAG,CAAC;IACZ;IACA,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;MAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,GAAG,KAAK;IAClE,CAAC,CAAC;EACJ;;EAEA;EACA;EACA,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;IACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;MACpB,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;IACpB,CAAC,CAAC;IACF,OAAO,KAAK;EACd;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;EACnC;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;EACjC;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EAEA,IAAI,SAAS,CAAC,KAAK,EAAE;IACnB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC;EACtC;EAEA,IAAI,UAAU,CAAA,EAAG;IACf,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;EAC9B;EAEA,IAAI,UAAU,CAAC,KAAK,EAAE;IACpB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC;EACvC;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;EACnC;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;EACjC;;EAEA;EACA;;EAEA,OAAO,OAAO,CAAC,OAAO,EAAE;IACtB;IACA,MAAM,IAAI,GAAG,EAAE;IACf,IAAI,GAAG,GAAG,IAAI;IACd,IAAI,OAAO,EAAE;MACX,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK;QACjC,IAAI,MAAM,CAAC,SAAS,EAAE;UACpB,IAAI,GAAG,EAAE;YACP,GAAG,GAAG,IAAI;UACZ;QACF,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;UAC5C,GAAG,GAAG;YACJ,GAAG,EAAE,KAAK,GAAG,CAAC;YACd,GAAG,EAAE,KAAK,GAAG,CAAC;YACd,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,oBAAoB;YACvE,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,SAAS,EAAE,MAAM,CAAC;UACpB,CAAC;UACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAChB,CAAC,MAAM;UACL,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC;QACrB;MACF,CAAC,CAAC;IACJ;IACA,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS;EACvC;EAEA,OAAO,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE;IAChC,IAAI,GAAG,IAAI,IAAI,EAAE;IACjB,MAAM,OAAO,GAAG,EAAE;IAClB,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,KAAK,GAAG,CAAC;IACb;AACJ;AACA;AACA;IACI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAS,GAAG,EAAE,IAAI,EAAG;MACpC,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;IAC3B,CAAC,CAAC;IACF,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;MAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;MACzB,OAAO,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;MAC9C;MACA,OAAO,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE;QACvB,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;MACnD;IACF;IACA,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI;EACxC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,MAAM;;;;;AC/TvB,MAAM,eAAe,CAAC;EACpB,WAAW,CAAC,KAAK,EAAE;IACjB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;EAC1B;EAEA,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE;IACvB,OAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,UAAU;EAC1C;EAEA,IAAI,CAAC,OAAO,EAAE;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;EAC5B;EAEA,MAAM,CAAC,OAAO,EAAE;IACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS;EACjC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;AClBhC,YAAY;;AAEZ,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAClD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAEhC,MAAM,WAAW,GAAG,sCAAsC;AAE1D,MAAM,YAAY,CAAC;EACjB,WAAW,CAAA,EAAG;IACZ,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;EACrB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;IAChF,OAAO,MAAM;EACf;;EAEA;EACA,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;IAChB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;EAC5B;EAEA,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;IACpB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACnC,IAAI,QAAQ,CAAC,GAAG,EAAE;MAChB,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1D,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;UAC1D,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;YAChC,GAAG;YACH;UACF,CAAC;UAED,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QAC3B;MACF;IACF,CAAC,MAAM;MACL,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IAC5B;EACF;EAEA,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;IACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;EAC/B;EAEA,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACnC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;EAC/B;EAEA,cAAc,CAAC,QAAQ,EAAE;IACvB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI;MAC/B,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC,CAAC;EACJ;EAEA,OAAO,CAAC,QAAQ,EAAE;IAChB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK;MACvC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;QACrB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;MACtB,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;;EAEA;EACA,QAAQ,CAAC,UAAU,EAAE;IACnB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;EACvD;EAEA,UAAU,CAAC,OAAO,EAAE;IAClB,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CACvF,OACF,CAAC;EACH;EAEA,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE;IACrB,IAAI,CAAC,IAAI,GAAG,KAAK;IACjB,MAAM;MAAC;IAAS,CAAC,GAAG,IAAI;IAExB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC;IAC1E,IAAI,CAAC;IACL,IAAI,CAAC;;IAEL;IACA,SAAS,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE;MACvB,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC;MACpD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QACjB,OAAO,KAAK;MACd;MACA,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;MAChB,CAAC,CAAC,IAAI,GAAG,KAAK;MACd,OAAO,IAAI;IACb;IACA,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5C,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;;IAE/C;IACA,SAAS,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE;MACvB,MAAM,KAAK,GAAG,EAAE;MAChB,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;UACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACf,CAAC,MAAM;UACL,OAAO,KAAK;QACd;MACF;MACA,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;MAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK;MACvB;MACA,OAAO,IAAI;IACb;IACA,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7C,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;IAE9C,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE;IACtB,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAEvC,IAAI,CAAC,MAAM,EAAE;MACX,OAAO;QAAC,IAAI;QAAE,MAAM,EAAE;MAAE,CAAC;IAC3B;;IAEA;IACA,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;MACrB,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAClB,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACrD,MAAM,CAAC,OAAO,CAAC,CACf,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC;IAElC,OAAO;MACL,IAAI;MACJ;IACF,CAAC;EACH;EAEA,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE;IACjC;IACA;IACA,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK;MACnD,IAAI,IAAI,EAAE;QACR,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE;UACxC,IAAI,CAAC,GAAG,GAAG,GAAG;UACd,IAAI,CAAC,GAAG,GAAG,GAAG;UACd,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;QACxC;MACF;IACF,CAAC,CAAC;EACJ;EAEA,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE;IACjD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI;MAC/B,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC;MACzD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC;IACzC,CAAC,CAAC;EACJ;EAEA,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE;IACpD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI;MAC/B,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC;MAC5D,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC;IACzC,CAAC,CAAC;EACJ;EAEA,IAAI,KAAK,CAAA,EAAG;IACV;IACA,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CACjF,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,MACpC,CAAC;EACH;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf;IACA,MAAM,SAAS,GAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAE;IACvC,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI;MAC3B,MAAM,MAAM,GAAI,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAE;MAC/D,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI;QACrC,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;UACrD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC1B;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;ACnM7B,YAAY;;AAEZ,MAAM,CAAC,OAAO,GAAG;EACf,SAAS,EAAE;IACT,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;IACV,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;IACV,KAAK,EAAE;EACT,CAAC;EACD,WAAW,EAAE;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,MAAM,EAAE;EACV,CAAC;EACD,gBAAgB,EAAE;IAChB,IAAI,EAAE,CAAC;IACP,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IACZ,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,SAAS,EAAE;EACb,CAAC;EACD,YAAY,EAAE;IACZ,IAAI,EAAE;EACR,CAAC;EACD,YAAY,EAAE;IACZ,WAAW,EAAE,CAAC;IACd,WAAW,EAAE;EACf,CAAC;EACD,UAAU,EAAE;IACV,aAAa,EAAE,MAAM;IACrB,GAAG,EAAE,OAAO;IACZ,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE;EACP;AACF,CAAC;;;;;AC/CD,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,MAAM,KAAK,CAAC;EACV,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE;IAC5B,IAAI,CAAC,SAAS,GAAG,SAAS;IAC1B,IAAI,CAAC,KAAK,GAAG,KAAK;EACpB;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,YAAY;QACf,OAAO;UACL,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,OAAO,EAAE,IAAI,CAAC;QAChB,CAAC;MACH,KAAK,OAAO;QACV,OAAO;UACL,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,OAAO,EAAE,IAAI,CAAC,OAAO;UACrB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;UACjC,KAAK,EAAE;YACL,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK;YACvB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK;YACxC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;YACnB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;UACrB;QACF,CAAC;MACH;QACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;IACzC;EACF;EAEA,IAAI,KAAK,CAAA,IAAA,EAAqC;IAAA,IAApC;MAAC,IAAI;MAAE,OAAO;MAAE,KAAK;MAAE;IAAU,CAAC,GAAA,IAAA;IAC1C,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAAC,OAAO,GAAG,OAAO;IAEtB,IAAI,IAAI,KAAK,OAAO,EAAE;MACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG;UACX,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;YAAC,GAAG,EAAE,OAAO,CAAC,IAAI;YAAE,GAAG,EAAE,OAAO,CAAC;UAAG,CAAC,EAAE,CAAC,CAAC,CAAC;UACzE,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;YAAC,GAAG,EAAE,OAAO,CAAC,KAAK;YAAE,GAAG,EAAE,OAAO,CAAC;UAAM,CAAC,EAAE,CAAC,CAAC;UAC5E,MAAM,EAAE;QACV,CAAC;MACH,CAAC,MAAM;QACL,IAAI,CAAC,KAAK,GAAG;UACX,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;UAC3C,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;UACvD,GAAG,EAAE,KAAK,CAAC,GAAG;UACd,MAAM,EAAE,KAAK,CAAC,MAAM;UACpB,UAAU,EAAE,UAAU,IAAI,KAAK,CAAC;QAClC,CAAC;MACH;IACF;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,KAAK;;;;;AC1DtB,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAExC,MAAM,IAAI,CAAC;EACT,WAAW,CAAC,IAAI,EAAE;IAChB,IAAI,CAAC,IAAI,GAAG,IAAI;EAClB;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,IAAI,KAAK,GAAG,IAAI;IAChB,QAAQ,OAAO,IAAI,CAAC,IAAI;MACtB,KAAK,QAAQ;QACX,KAAK,GAAG;UACN,IAAI,EAAE,MAAM;UACZ,IAAI,EAAE;YACJ,KAAK,EAAE,CACL;cACE,IAAI,EAAE,IAAI,CAAC;YACb,CAAC;UAEL;QACF,CAAC;QACD;MACF;QACE,KAAK,GAAG;UACN,IAAI,EAAE,MAAM;UACZ,IAAI,EAAE,IAAI,CAAC;QACb,CAAC;QACD;IACJ;IACA;IACA,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC;EACrD;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,MAAM;MAAC;IAAI,CAAC,GAAG,KAAK;IACpB,MAAM;MAAC;IAAK,CAAC,GAAG,IAAI;IACpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;MAC5D,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;IAC3B,CAAC,MAAM;MACL,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;EACF;EAEA,OAAO,SAAS,CAAC,KAAK,EAAE;IACtB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,GAAG,KAAK;IAClB,OAAO,IAAI;EACb;AACF;AAEA,IAAI,CAAC,eAAe,GAAG;EACrB,IAAI,EAAE;IACJ,OAAO,EAAE;MACP,SAAS,EAAE,MAAM;MACjB,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAChC,CAAC;IACD,UAAU,EAAE;MACV,MAAM,EAAE,MAAM;MACd,QAAQ,EAAE;IACZ,CAAC;IACD,MAAM,EAAE;EACV;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,IAAI;;;;;AChErB,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;;AAE9C;AACA,MAAM,KAAK,CAAC;EACV,WAAW,CAAA,EAAG;IACZ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;EACxB;EAEA,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACrB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;MACxB;MACA,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;MACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;MACpC,IAAI,CAAC,KAAK,GAAG;QACX,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QAC9B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QAChC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QAC/B,SAAS,EAAE;MACb,CAAC;MAED,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC,MAAM;MACL;MACA,IAAI,CAAC,KAAK,GAAG;QACX,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,SAAS,EAAE;MACb,CAAC;IACH;EACF;EAEA,MAAM,CAAC,IAAI,EAAE;IACX,QAAQ,IAAI,CAAC,MAAM;MACjB,KAAK,CAAC;QAAE;QACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACzD;MACF,KAAK,CAAC;QAAE;QACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD;MAEF,KAAK,CAAC;QAAE;QACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC;MACF,KAAK,CAAC;QAAE;QACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B;MAEF,KAAK,CAAC;QAAE;UACN,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;UACrB,IAAI,KAAK,YAAY,KAAK,EAAE;YAC1B;YACA,IAAI,CAAC,KAAK,GAAG;cACX,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;cACpB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;cACtB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;cAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;cACxB,SAAS,EAAE,KAAK,CAAC;YACnB,CAAC;UACH,CAAC,MAAM,IAAI,KAAK,YAAY,KAAK,EAAE;YACjC;YACA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;UACpB,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACjE;YACA,IAAI,CAAC,KAAK,GAAG;cACX,GAAG,EAAE,KAAK,CAAC,GAAG;cACd,IAAI,EAAE,KAAK,CAAC,IAAI;cAChB,MAAM,EAAE,KAAK,CAAC,MAAM;cACpB,KAAK,EAAE,KAAK,CAAC,KAAK;cAClB,SAAS,EAAE,KAAK,CAAC;YACnB,CAAC;UACH,CAAC,MAAM;YACL;YACA,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrC,IAAI,IAAI,CAAC,GAAG,EAAE;cACZ,IAAI,CAAC,KAAK,GAAG;gBACX,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC;cAClB,CAAC;YACH,CAAC,MAAM;cACL,IAAI,CAAC,KAAK,GAAG;gBACX,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,GAAG;gBACd,MAAM,EAAE,IAAI,CAAC,GAAG;gBAChB,KAAK,EAAE,IAAI,CAAC,GAAG;gBACf,SAAS,EAAE,IAAI,CAAC;cAClB,CAAC;YACH;UACF;UACA;QACF;MAEA,KAAK,CAAC;QACJ,IAAI,CAAC,KAAK,GAAG;UACX,GAAG,EAAE,CAAC;UACN,IAAI,EAAE,CAAC;UACP,MAAM,EAAE,CAAC;UACT,KAAK,EAAE;QACT,CAAC;QACD;MAEF;QACE,MAAM,IAAI,KAAK,CAAE,qDAAoD,IAAI,CAAC,MAAO,EAAC,CAAC;IACvF;EACF;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;EAC5B;EAEA,IAAI,GAAG,CAAC,KAAK,EAAE;IACb,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK;EACxB;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;EAC7B;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK;EACzB;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;EAC/B;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;EAC3B;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;EAC9B;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;EAC1B;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EAEA,IAAI,SAAS,CAAC,KAAK,EAAE;IACnB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK;EAC9B;EAEA,IAAI,oBAAoB,CAAA,EAAG;IACzB,MAAM;MAAC;IAAS,CAAC,GAAG,IAAI,CAAC,KAAK;IAC9B,IAAI,SAAS,EAAE;MACb,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACpC,OAAQ,GAAE,SAAU,GAAE;MACxB;MACA,OAAQ,IAAG,SAAU,IAAG;IAC1B;IACA,OAAO,EAAE;EACX;EAEA,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG;IACrD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI;IAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM;IACpE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK;EACjE;EAEA,SAAS,CAAC,GAAG,EAAE;IACb,IAAI,GAAG,EAAE;MACP,MAAM;QAAC,UAAU;QAAE;MAAM,CAAC,GAAG,GAAG;MAChC,IAAI,UAAU,EAAE;QACd,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC;MAC7D;IACF;EACF;EAEA,eAAe,CAAC,UAAU,EAAE;IAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;EACjE;EAEA,IAAI,EAAE,CAAA,EAAG;IACP,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;EAC3C;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAQ,IAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,IAAG,IAAI,CAAC,GAAI,EAAC;EAClD;EAEA,IAAI,EAAE,CAAA,EAAG;IACP,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM;EAC/C;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAQ,IAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAE,IAAG,IAAI,CAAC,MAAO,EAAC;EACtD;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAQ,GAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAG,IAAG,IAAI,CAAC,EAAG,EAAC;EAC5D;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAQ,GAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,IAAK,IAAG,IAAI,CAAC,IAAK,EAAC;EAChE;EAEA,IAAI,UAAU,CAAA,EAAG;IACf,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE;EAC1E;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,IAAI;EAC7E;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;EACpE;EAEA,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK;EACnB;EAEA,UAAU,CAAC,KAAK,EAAE;IAChB,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,OAAO,KAAK;IACzF,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,KAAK;IACzC,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK;IACzC,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK;IACzC,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK;IACzC,OAAO,IAAI;EACb;EAEA,QAAQ,CAAC,UAAU,EAAE;IACnB,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;EACjC;EAEA,UAAU,CAAC,OAAO,EAAE;IAClB,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,OAAO,KAAK;IAC7F,OACE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IACvB,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,IAC1B,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,IACxB,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK;EAE7B;EAEA,cAAc,CAAC,EAAE,EAAE;IACjB,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;MAClD,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAClD,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;MAChD;IACF;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,KAAK;;;AChQtB,YAAY;;AAEZ,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAExC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;AAE9B,MAAM,GAAG,CAAC;EACR,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE;IAC7B,IAAI,CAAC,UAAU,GAAG,SAAS;IAC3B,IAAI,CAAC,OAAO,GAAG,MAAM;IACrB,IAAI,CAAC,MAAM,GAAG,EAAE;IAChB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACf,IAAI,CAAC,YAAY,GAAG,CAAC;EACvB;;EAEA;EACA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,OAAO;EACrB;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,UAAU;EACxB;;EAEA;EACA;EACA,MAAM,CAAA,EAAG;IACP,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;EACpC;;EAEA;EACA,OAAO,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,UAAU;IACtB,OAAO,IAAI,CAAC,MAAM;IAClB,OAAO,IAAI,CAAC,KAAK;EACnB;EAEA,QAAQ,CAAC,SAAS,EAAE;IAClB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;EACnC;;EAEA;EACA,SAAS,CAAC,OAAO,EAAE;IACjB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE;MACT,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;MACrD,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;MAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI;IACrC;IACA,OAAO,IAAI;EACb;;EAEA;EACA,OAAO,CAAC,GAAG,EAAE;IACX,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;MAC3B;MACA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC;MAChD,IAAI,MAAM,EAAE;QACV,GAAG,GAAG,MAAM,CAAC,MAAM;MACrB,CAAC,MAAM;QACL,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;MACzB;IACF;IACA,OACE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,IACpB,IAAI,CAAC,SAAS,CAAC;MACb,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;MAClD,GAAG,EAAE,IAAI,CAAC,OAAO;MACjB;IACF,CAAC,CAAC;EAEN;;EAEA;EACA,MAAM,CAAC,KAAK,EAAE,KAAK,EAAc;IAC/B,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK;IAAC,SAAA,IAAA,GAAA,SAAA,CAAA,MAAA,EADN,OAAO,OAAA,KAAA,CAAA,IAAA,OAAA,IAAA,WAAA,IAAA,MAAA,IAAA,GAAA,IAAA,EAAA,IAAA;MAAP,OAAO,CAAA,IAAA,QAAA,SAAA,CAAA,IAAA;IAAA;IAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;IAC/B,IAAI,CAAC;IACL,IAAI,IAAI;IACR,IAAI,IAAI;IAER,IAAI,OAAO,GAAG,CAAC,EAAE;MACf;MACA,KAAK,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;QAC/C,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;QACnC,IAAI,IAAI,EAAE;UACR,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;UACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;UACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;UACvB;UACA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC/B,CAAC,MAAM,IAAI,IAAI,EAAE;UACf,IAAI,CAAC,KAAK,GAAG,IAAI;UACjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;UACf;UACA,IAAI,CAAC,QAAQ,GAAG,SAAS;QAC3B;MACF;IACF,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,EAAE;MACtB;MACA,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE;UACR,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;UAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;UACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;UACvB;UACA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC/B,CAAC,MAAM;UACL,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS;QAC1C;MACF;IACF;;IAEA;IACA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACnC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;MAC9B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;MACvB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;MACf;MACA,IAAI,CAAC,QAAQ,GAAG,SAAS;IAC3B;EACF;;EAEA;EACA,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE;IAC1B,IAAI,CAAC,QAAQ,EAAE;MACb,QAAQ,GAAG,OAAO;MAClB,OAAO,GAAG,IAAI;IAChB;IACA,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE;MACnC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;MAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;MAC9B;IACF,CAAC,MAAM;MACL,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;QACnC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;UAC9C,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC;QAC3B;MACF,CAAC,CAAC;IACJ;EACF;;EAEA;EACA;EACA,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;IACtB,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU;IAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK;IAC5C,MAAM,EAAE,GAAG;MACT,EAAE,EAAE,IAAI,CAAC,OAAO;MAChB,GAAG,EAAE,KAAK;MACV,GAAG,EAAE;IACP,CAAC;IACD,IAAI,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI;IAEvB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;EACvB;;EAEA;EACA,IAAI,MAAM,CAAA,EAAG;IACX,MAAM,MAAM,GAAG,EAAE;IACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;MAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;QAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK;MAC/B;IACF,CAAC,CAAC;IACF,OAAO,MAAM;EACf;;EAEA;EACA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB;IACA,IAAI,CAAC,MAAM,GAAG,EAAE;IAChB,IAAI,CAAC,KAAK,EAAE;MACV;IAAA,CACD,MAAM,IAAI,KAAK,YAAY,KAAK,EAAE;MACjC,IAAI,MAAM,GAAG,CAAC;MACd,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QAC7B;QACA,MAAM,GAAG,CAAC;MACZ;MACA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;QAC7B,IAAI,IAAI,KAAK,SAAS,EAAE;UACtB,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;YAC7D,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,GAAG,EAAE,KAAK,GAAG;UACf,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;QACjB;MACF,CAAC,CAAC;IACJ,CAAC,MAAM;MACL;MACA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK;QAC7C,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;UAC5B,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YAC5D,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,GAAG,EAAE,MAAM,CAAC;UACd,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;QACvB;MACF,CAAC,CAAC;IACJ;EACF;;EAEA;EACA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;EAChF;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;EAC3B;EAEA,IAAI,eAAe,CAAA,EAAG;IACpB,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,CAAC,QAAQ,CAAC,MAAM;MAClB,KAAK,EAAE;IACT,CAAC,CAAC;IACF,OAAO,KAAK;EACd;;EAEA;EACA,IAAI,UAAU,CAAA,EAAG;IACf,IAAI,GAAG,GAAG,CAAC;IACX,IAAI,GAAG,GAAG,CAAC;IACX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;MAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;QAC9C,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;UAC1B,GAAG,GAAG,IAAI,CAAC,GAAG;QAChB;QACA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;UAClB,GAAG,GAAG,IAAI,CAAC,GAAG;QAChB;MACF;IACF,CAAC,CAAC;IACF,OAAO,GAAG,GAAG,CAAC,GACV;MACE,GAAG;MACH;IACF,CAAC,GACD,IAAI;EACV;;EAEA;EACA;EACA,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;IACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;MAC1B,IAAI,IAAI,EAAE;QACR,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK;MACpB;IACF,CAAC,CAAC;IACF,OAAO,KAAK;EACd;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;EACnC;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;EACjC;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EAEA,IAAI,SAAS,CAAC,KAAK,EAAE;IACnB,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC;EACtC;EAEA,IAAI,UAAU,CAAA,EAAG;IACf,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;EAC9B;EAEA,IAAI,UAAU,CAAC,KAAK,EAAE;IACpB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC;EACvC;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;EACnC;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EAEA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;EACjC;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO;EACvB;EAEA,IAAI,MAAM,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,OAAO,GAAG,KAAK;EACtB;EAEA,IAAI,YAAY,CAAA,EAAG;IACjB,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC;EAChC;EAEA,IAAI,YAAY,CAAC,KAAK,EAAE;IACtB,IAAI,CAAC,aAAa,GAAG,KAAK;EAC5B;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,CAAC,EACN,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CACvF;EACH;;EAEA;EACA,IAAI,KAAK,CAAA,EAAG;IACV,MAAM,KAAK,GAAG,EAAE;IAChB,IAAI,GAAG,GAAG,CAAC;IACX,IAAI,GAAG,GAAG,CAAC;IACX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;MAC1B,IAAI,IAAI,EAAE;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;QAC5B,IAAI,SAAS,EAAE;UACb,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;YAC1B,GAAG,GAAG,IAAI,CAAC,GAAG;UAChB;UACA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;YAClB,GAAG,GAAG,IAAI,CAAC,GAAG;UAChB;UACA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QACvB;MACF;IACF,CAAC,CAAC;IAEF,OAAO,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAC9B;MACE,KAAK;MACL,MAAM,EAAE,IAAI,CAAC,MAAM;MACnB,GAAG;MACH,GAAG;MACH,MAAM,EAAE,IAAI,CAAC,MAAM;MACnB,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,MAAM,EAAE,IAAI,CAAC,MAAM;MACnB,YAAY,EAAE,IAAI,CAAC,YAAY;MAC/B,SAAS,EAAE,IAAI,CAAC;IAClB,CAAC,GACD,IAAI;EACV;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE;MACjC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;IAChD;IACA,IAAI,CAAC,MAAM,GAAG,EAAE;IAChB,IAAI,eAAe;IACnB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI;MAC/B,QAAQ,SAAS,CAAC,IAAI;QACpB,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;UACnB;UACA;QACF;UAAS;YACP,IAAI,OAAO;YACX,IAAI,SAAS,CAAC,OAAO,EAAE;cACrB,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC;YACrD,CAAC,MAAM,IAAI,eAAe,EAAE;cAC1B;cACA;cACA,MAAM;gBAAC;cAAG,CAAC,GAAG,eAAe;cAC7B,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC;cACnC,OAAO,GAAG;gBACR,GAAG;gBACH,GAAG;gBACH,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC;gBACzC,QAAQ,EAAG,IAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,IAAG,GAAI;cACzC,CAAC;YACH;YACA,eAAe,GAAG,OAAO;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,KAAK,GAAG,SAAS;YACtB;UACF;MACF;IACF,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;IAC5B,CAAC,MAAM;MACL,OAAO,IAAI,CAAC,MAAM;IACpB;IAEA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;IAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC;IAE3C,IAAI,CAAC,KAAK,GAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAK,CAAC,CAAC;EAC7E;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,GAAG;;;;;AC9ZpB;AACA,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAE9C,MAAM,MAAM,CAAC;EACX;EACA,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;IAChC,IAAI,CAAC,KAAK,GAAG,KAAK;IAClB,IAAI,CAAC,MAAM,GAAG,MAAM;IACpB,IAAI,CAAC,KAAK,GAAG,KAAK;EACpB;EAEA,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;IAChB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;EAC3B;;EAEA;EACA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;EACzB;EACA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;EAC1B;EAEA,IAAI,YAAY,CAAA,EAAG;IACjB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY;EACjC;EACA,IAAI,YAAY,CAAC,KAAK,EAAE;IACtB,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK;EAClC;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;EAC1B;EACA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK;EAC3B;EAEA,IAAI,cAAc,CAAA,EAAG;IACnB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc;EACnC;EACA,IAAI,cAAc,CAAC,KAAK,EAAE;IACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;EACpC;EAEA,IAAI,iBAAiB,CAAA,EAAG;IACtB,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB;EACtC;EACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;IAC3B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC;EACvC;EAEA,IAAI,eAAe,CAAA,EAAG;IACpB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe;EACpC;EACA,IAAI,eAAe,CAAC,KAAK,EAAE;IACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC;EACrC;EAEA,IAAI,gBAAgB,CAAA,EAAG;IACrB,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB;EACrC;EACA,IAAI,gBAAgB,CAAC,KAAK,EAAE;IAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC;EACtC;EACA;AACF;;AAEA,MAAM,KAAK,CAAC;EACV,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE;IAC5B,IAAI,CAAC,SAAS,GAAG,SAAS;IAC1B,IAAI,KAAK,EAAE;MACT,IAAI,CAAC,KAAK,GAAG,KAAK;MAClB;MACA,IAAI,CAAC,QAAQ,CAAC,CAAC;MAEf,IAAI,CAAC,KAAK,CAAC,CAAC;IACd;EACF;EAEA,UAAU,CAAC,MAAM,EAAE;IACjB;IACA,QAAQ,MAAM,CAAC,iBAAiB;MAC9B,KAAK,MAAM;QACT,OAAO,IAAI;MACb,KAAK,SAAS;QACZ,OAAQ,gBAAe,IAAI,CAAC,KAAK,CAAC,IAAK,IAAG,MAAM,CAAC,IAAK,IAAG;MAC3D,KAAK,WAAW;QACd,OAAQ,gBAAe,IAAI,CAAC,KAAK,CAAC,IAAK,IAAG,MAAM,CAAC,IAAK,IAAG;MAC3D,KAAK,OAAO;QACV,OAAQ,gBAAe,IAAI,CAAC,KAAK,CAAC,IAAK,IAAG,MAAM,CAAC,IAAK,IAAG;MAC3D,KAAK,KAAK;QACR,OAAQ,gBAAe,IAAI,CAAC,KAAK,CAAC,IAAK,IAAG,MAAM,CAAC,IAAK,IAAG;MAC3D,KAAK,KAAK;QACR,OAAQ,gBAAe,IAAI,CAAC,KAAK,CAAC,IAAK,IAAG,MAAM,CAAC,IAAK,IAAG;MAC3D,KAAK,QAAQ;QACX,OAAQ,gBAAe,IAAI,CAAC,KAAK,CAAC,IAAK,IAAG,MAAM,CAAC,IAAK,IAAG;MAC3D,KAAK,KAAK;QACR,OAAQ,gBAAe,IAAI,CAAC,KAAK,CAAC,IAAK,IAAG,MAAM,CAAC,IAAK,IAAG;MAC3D,KAAK,KAAK;QACR,OAAQ,gBAAe,IAAI,CAAC,KAAK,CAAC,IAAK,IAAG,MAAM,CAAC,IAAK,IAAG;MAC3D,KAAK,QAAQ;QACX,OAAO,MAAM,CAAC,gBAAgB;MAChC;QACE,MAAM,IAAI,KAAK,CAAE,gCAA+B,MAAM,CAAC,iBAAkB,EAAC,CAAC;IAC/E;EACF;EAEA,IAAI,KAAK,CAAA,EAAG;IACV;IACA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;EAClC;EAEA,IAAI,MAAM,CAAA,EAAG;IACX;IACA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;EAC/B;EAEA,IAAI,YAAY,CAAA,EAAG;IACjB;IACA,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;EACrD;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB;IACA,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;EAC3D;EAEA,QAAQ,CAAA,EAAG;IACT,MAAM;MAAC;IAAK,CAAC,GAAG,IAAI;IACpB;IACA,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,KAAK;MAChC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;QACzB,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;MAChB;IACF,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC;IAEjC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC;IACjD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,CAAC;IAE/C,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK;MAChC,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;MAC1B;IACF,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,qBAAqB,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,oCAAoC,CAAC;IAC3D,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,iCAAiC,CAAC;IAErD,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;IAC5C,MAAM;MAAC,GAAG;MAAE;IAAG,CAAC,GAAG,KAAK,CAAC,EAAE;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,4BAA4B,CAAC;IAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,4BAA4B,CAAC;IAE7C,MAAM;MAAC,KAAK;MAAE,YAAY;MAAE;IAAW,CAAC,GAAG,IAAI;;IAE/C;IACA,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,YAAY,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;;IAExF;IACA,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,WAAW,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;IAElF,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;MACnC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAG,UAAS,CAAE,mBAAkB,CAAC;MACnD,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC;MAC3C,CAAC,MAAM;QACL,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC;QAC3C,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;MACnD;IACF,CAAC,CAAC;EACJ;EAEA,KAAK,CAAA,EAAG;IACN;IACA;IACA,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK;MACnC,IAAI,KAAK,EAAE;QACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;UAChC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;QACxB,CAAC,CAAC;MACJ;IACF,CAAC;IAED,MAAM;MAAC,SAAS;MAAE;IAAK,CAAC,GAAG,IAAI;IAC/B,MAAM;MAAC,GAAG;MAAE;IAAG,CAAC,GAAG,KAAK,CAAC,EAAE;IAC3B,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;MACzC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;QACnC,MAAM;UAAC,KAAK;UAAE;QAAI,CAAC,GAAG,MAAM;QAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;MAC1B,CAAC,CAAC;IACJ;IACA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;MACzB,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;MACzC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK;QACzB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK;QAElB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;MAC3C,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;MACzC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,EAAE;UACX,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,cAAc;QACpC,CAAC,MAAM;UACL,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;UACvC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,KAAK,GAAG;cACX,OAAO,EAAE,MAAM,CAAC,gBAAgB;cAChC,MAAM,EAAE,MAAM,CAAC;YACjB,CAAC;UACH,CAAC,MAAM;YACL,IAAI,CAAC,KAAK,GAAG,IAAI;UACnB;QACF;QAEA,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;MACjC,CAAC,CAAC;IACJ;EACF;EAEA,IAAI,CAAC,SAAS,EAAE;IACd;IACA,MAAM;MAAC;IAAK,CAAC,GAAG,IAAI;IACpB,MAAM;MAAC,GAAG;MAAE;IAAG,CAAC,GAAG,KAAK,CAAC,EAAE;IAC3B,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;MACzC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI;MAC1B,CAAC,CAAC;IACJ;IACA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;MACzB,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;MACzC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK;QACzB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK;MACpB,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;MACzC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,EAAE;UACX,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,cAAc;QACpC,CAAC,MAAM;UACL,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;UACvC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,KAAK,GAAG;cACX,OAAO,EAAE,MAAM,CAAC,gBAAgB;cAChC,MAAM,EAAE,MAAM,CAAC;YACjB,CAAC;UACH;QACF;MACF,CAAC,CAAC;IACJ;EACF;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK;EACnB;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,GAAG,KAAK;EACpB;;EAEA;EACA;EACA,UAAU,CAAA,EAAG;IACX,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;MAChB,IAAI,CAAC,MAAM,GAAG;QACZ,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC;MACpB,CAAC;IACH;EACF;EAEA,MAAM,CAAA,EAAG;IACP;IACA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;MAChB;IACF;;IAEA;IACA,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEf,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACnD,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;MAChC;MACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;UAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;UACrC,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;MACF;IACF,CAAC,MAAM;MACL;MACA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;UAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;UACrC,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;MACF;;MAEA;MACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;UACnD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;UACrC,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;MACF;IACF;IAEA,IAAI,CAAC,KAAK,CAAC,CAAC;EACd;EAEA,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE;IACxB;IACA,IAAI,CAAC,UAAU,CAAC,CAAC;IAEjB,IAAI,SAAS,KAAK,SAAS,EAAE;MAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC,MAAM;MACL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC;IAC9C;EACF;EAEA,UAAU,CAAC,QAAQ,EAAa;IAAA,IAAX,KAAK,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,CAAC;IAC5B;IACA,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;EACzC;EAEA,SAAS,CAAC,QAAQ,EAAE;IAClB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC3C,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;EAC3C;EAEA,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;IAClC;IACA;IACA,IAAI,CAAC,UAAU,CAAC,CAAC;IAEjB,IAAI,QAAQ,KAAK,SAAS,EAAE;MAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;MAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;QAClC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;MACrB,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC;MAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;QAClC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;MACpC,CAAC,CAAC;IACJ;EACF;EAEA,aAAa,CAAC,QAAQ,EAAa;IAAA,IAAX,KAAK,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,CAAC;IAC/B;IACA,IAAI,CAAC,UAAU,CAAC,CAAC;IAEjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;MAC7B,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC7B,CAAC,CAAC;EACJ;EAEA,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;IAC3B,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;EACtB;;EAEA;EACA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG;EACvB;EACA,IAAI,GAAG,CAAC,KAAK,EAAE;IACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;EACxC;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;EACxB;EACA,IAAI,IAAI,CAAC,KAAK,EAAE;IACd,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK;EACzB;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;EACjD;EACA,IAAI,eAAe,CAAC,KAAK,EAAE;IACzB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK;EAChC;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EACA,IAAI,SAAS,CAAC,KAAK,EAAE;IACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC;EAC9C;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;EAC7B;EACA,IAAI,SAAS,CAAC,KAAK,EAAE;IACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC;EAC9C;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;EAC9B;EACA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK;EAC/B;EAEA,IAAI,eAAe,CAAA,EAAG;IACpB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe;EACzC;EACA,IAAI,eAAe,CAAC,KAAK,EAAE;IACzB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK;EAC1C;EAEA,IAAI,cAAc,CAAA,EAAG;IACnB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc;EACxC;EACA,IAAI,cAAc,CAAC,KAAK,EAAE;IACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK;EACzC;EAEA,IAAI,cAAc,CAAA,EAAG;IACnB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc;EACxC;EACA,IAAI,cAAc,CAAC,KAAK,EAAE;IACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK;EACzC;EAEA,IAAI,iBAAiB,CAAA,EAAG;IACtB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB;EAC3C;EACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;IAC3B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,GAAG,KAAK;EAC5C;EACA;AACF;;AAEA,MAAM,CAAC,OAAO,GAAG,KAAK;;;AChdtB,YAAY;;AAEZ,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;AACxC,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;AACpC,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;;AAEjC;AACA;AACA;AACA;AACA;;AAEA,MAAM,QAAQ,CAAC;EACb,WAAW,CAAA,EAAG;IACZ,IAAI,CAAC,QAAQ,GAAG,EAAE;IAClB,IAAI,CAAC,OAAO,GAAG,EAAE;IACjB,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,WAAW,GAAG,EAAE;IACrB,IAAI,CAAC,QAAQ,GAAG,EAAE;IAClB,IAAI,CAAC,OAAO,GAAG,EAAE;IACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO;IAC5B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,WAAW,GAAG,EAAE;IACrB,IAAI,CAAC,OAAO,GAAG,EAAE;IACjB,IAAI,CAAC,KAAK,GAAG,EAAE;IACf,IAAI,CAAC,KAAK,GAAG,EAAE;IACf,IAAI,CAAC,KAAK,GAAG,EAAE;IACf,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,CAAC,CAAC;EACzC;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;IAC5C,OAAO,IAAI,CAAC,KAAK;EACnB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC,IAAI;EAClB;EAEA,IAAI,MAAM,CAAA,EAAG;IACX;IACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAChD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;QACxB,OAAO,CAAC;MACV;IACF;IACA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC;EACrC;EAEA,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM;;IAEtB;IACA,IAAI,OAAO,EAAE;MACX,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B;QACA,OAAO,CAAC,KAAK,CACX,8HACF,CAAC;QACD,OAAO,GAAG;UACR,UAAU,EAAE;YACV,QAAQ,EAAE;cAAC,IAAI,EAAE;YAAO;UAC1B;QACF,CAAC;MACH,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE;QAC3D;QACA,OAAO,CAAC,KAAK,CACX,gHACF,CAAC;QACD,OAAO,GAAG;UACR,UAAU,EAAE;YACV,QAAQ,EAAE;UACZ;QACF,CAAC;MACH;IACF;IAEA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,KAAM,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,GAAG,GAAI,EAAE,CAAC,CAAC;IAC1G,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;MAClD,EAAE;MACF,IAAI;MACJ,OAAO,EAAE,WAAW,GAAG,CAAC;MACxB,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC;IAEjD,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,SAAS;IAChC,OAAO,SAAS;EAClB;EAEA,iBAAiB,CAAC,SAAS,EAAE;IAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;EACvC;EAEA,eAAe,CAAC,EAAE,EAAE;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;IACvC,IAAI,SAAS,EAAE;MACb,SAAS,CAAC,OAAO,CAAC,CAAC;IACrB;EACF;EAEA,YAAY,CAAC,EAAE,EAAE;IACf,IAAI,EAAE,KAAK,SAAS,EAAE;MACpB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;IACA,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;MAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IAC7B;IACA,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;MAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;IAC/E;IACA,OAAO,SAAS;EAClB;EAEA,IAAI,UAAU,CAAA,EAAG;IACf;IACA,OAAO,IAAI,CAAC,WAAW,CACpB,KAAK,CAAC,CAAC,CAAC,CACR,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CACrC,MAAM,CAAC,OAAO,CAAC;EACpB;EAEA,SAAS,CAAC,QAAQ,EAAE;IAClB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI;MAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;IAC3B,CAAC,CAAC;EACJ;EAEA,IAAI,YAAY,CAAA,EAAG;IACjB,OAAO,IAAI,CAAC,aAAa;EAC3B;EAEA,WAAW,CAAA,EAAG;IACZ;IACA,IAAI,CAAC,OAAO,GAAG,SAAS;EAC1B;EAEA,QAAQ,CAAC,KAAK,EAAE;IACd;IACA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;IAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;MAAC,IAAI,EAAE;IAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,EAAE;EACX;EAEA,QAAQ,CAAC,EAAE,EAAE;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;EACvB;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO;MACL,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;MAClC,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,SAAS;MAChD,WAAW,EAAE,IAAI,CAAC,WAAW;MAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;MACvB,UAAU,EAAE,IAAI,CAAC,UAAU;MAC3B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC;MAC7D,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;MAC3D,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK;MACtC,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;MACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;MACvB,WAAW,EAAE,IAAI,CAAC,WAAW;MAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;MACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;MACvB,aAAa,EAAE,IAAI,CAAC,aAAa;MACjC,MAAM,EAAE,IAAI,CAAC,OAAO;MACpB,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,cAAc,EAAE,IAAI,CAAC;IACvB,CAAC;EACH;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAC5B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc;IAC1C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;IACpC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAC5B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;IAC9B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAC5B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;IACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAC5B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;IAC9B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;IAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;IACpC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;IAC9B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;IAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;IAExC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;IAClC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc;IAC1C,IAAI,CAAC,WAAW,GAAG,EAAE;IACrB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,IAAI;MACzC,MAAM;QAAC,EAAE;QAAE,IAAI;QAAE;MAAK,CAAC,GAAG,cAAc;MACxC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;MAC1E,MAAM,SAAS,GAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,SAAS,CAAC;QACtD,EAAE;QACF,IAAI;QACJ,OAAO;QACP,KAAK;QACL,QAAQ,EAAE;MACZ,CAAC,CAAE;MACH,SAAS,CAAC,KAAK,GAAG,cAAc;IAClC,CAAC,CAAC;IAEF,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY;IAC7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;IACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM;IAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE;EAChC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,QAAQ;;;;;AC5NzB,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAExC,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAChC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;AAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AAClC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAChC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAChC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAChC,MAAM,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACrD,MAAM,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC/C,MAAM;EAAC;AAAS,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;;AAElD;AACA;AACA;AACA;AACA;;AAEA,MAAM,SAAS,CAAC;EACd,WAAW,CAAC,OAAO,EAAE;IACnB,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ;;IAEjC;IACA,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE;IACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;;IAE9B;IACA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;;IAExB;IACA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS;;IAEvC;IACA;IACA,IAAI,CAAC,KAAK,GAAG,EAAE;;IAEf;IACA,IAAI,CAAC,QAAQ,GAAG,IAAI;;IAEpB;IACA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;;IAEf;IACA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;;IAEjB;IACA,IAAI,CAAC,SAAS,GAAG,EAAE;;IAEnB;IACA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAC7B,CAAC,CAAC,EACF;MACE,gBAAgB,EAAE,EAAE;MACpB,SAAS,EAAE,EAAE;MACb,eAAe,EAAE,CAAC;MAClB,eAAe,EAAE;IACnB,CAAC,EACD,OAAO,CAAC,UACV,CAAC;;IAED;IACA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAC5B,CAAC,CAAC,EACF;MACE,OAAO,EAAE;QAAC,IAAI,EAAE,GAAG;QAAE,KAAK,EAAE,GAAG;QAAE,GAAG,EAAE,IAAI;QAAE,MAAM,EAAE,IAAI;QAAE,MAAM,EAAE,GAAG;QAAE,MAAM,EAAE;MAAG,CAAC;MACnF,WAAW,EAAE,UAAU;MACvB,aAAa,EAAE,UAAU;MACzB,WAAW,EAAE,UAAU;MACvB,SAAS,EAAE,CAAC,EACV,OAAO,CAAC,SAAS,KAChB,OAAO,CAAC,SAAS,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,IAC/D,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CACzB;MACD,SAAS,EAAE,cAAc;MACzB,aAAa,EAAE,KAAK;MACpB,KAAK,EAAE,KAAK;MACZ,YAAY,EAAE,MAAM;MACpB,MAAM,EAAE,WAAW;MACnB,KAAK,EAAE,GAAG;MACV,UAAU,EAAE,CAAC;MACb,WAAW,EAAE,CAAC;MACd,SAAS,EAAE,SAAS;MACpB,iBAAiB,EAAE,KAAK;MACxB,aAAa,EAAE,KAAK;MACpB,eAAe,EAAE,SAAS;MAC1B,kBAAkB,EAAE,KAAK;MACzB,gBAAgB,EAAE,KAAK;MACvB,SAAS,EAAE,IAAI;MACf,SAAS,EAAE;IACb,CAAC,EACD,OAAO,CAAC,SACV,CAAC;IAED,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAC/B,CAAC,CAAC,EACF;MACE,cAAc,EAAE,KAAK;MACrB,gBAAgB,EAAE,KAAK;MACvB,SAAS,EAAE,IAAI;MACf,SAAS,EAAE,IAAI;MACf,UAAU,EAAE,IAAI;MAChB,UAAU,EAAE,IAAI;MAChB,WAAW,EAAE,IAAI;MACjB,WAAW,EAAE;IACf,CAAC,EACD,OAAO,CAAC,YACV,CAAC;IAED,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,CAAC;;IAE5C;IACA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE;IAEhC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI;;IAE5C;IACA,IAAI,CAAC,MAAM,GAAG,EAAE;;IAEhB;IACA,IAAI,CAAC,eAAe,GAAG,IAAI;;IAE3B;IACA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhB,IAAI,CAAC,sBAAsB,GAAG,EAAE;EAClC;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK;EACnB;EAEA,IAAI,IAAI,CAAC,IAAI,EAAE;IACb,IAAI,IAAI,KAAK,SAAS,EAAE;MACtB,IAAI,GAAI,QAAO,IAAI,CAAC,EAAG,EAAC;IAC1B;IAEA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;IAEzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;MAC5B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;IACjD;IAEA,IAAI,IAAI,KAAK,EAAE,EAAE;MACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;IAC9C;IAEA,IAAI,IAAI,KAAK,SAAS,EAAE;MACtB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC;IAClF;;IAEA;IACA;IACA,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MAC5B,MAAM,IAAI,KAAK,CAAE,kBAAiB,IAAK,iEAAgE,CAAC;IAC1G;IAEA,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MAC1B,MAAM,IAAI,KAAK,CAAE,oFAAmF,IAAK,EAAC,CAAC;IAC7G;IAEA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE;MAC5B;MACA,OAAO,CAAC,IAAI,CAAE,kBAAiB,IAAK,2CAA0C,CAAC;MAC/E,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;IAC9B;IAEA,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;MAC7F,MAAM,IAAI,KAAK,CAAE,kCAAiC,IAAK,EAAC,CAAC;IAC3D;IAEA,IAAI,CAAC,KAAK,GAAG,IAAI;EACnB;EAEA,IAAI,QAAQ,CAAA,EAAG;IACb,OAAO,IAAI,CAAC,SAAS;EACvB;;EAEA;EACA,OAAO,CAAA,EAAG;IACR,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC;EACxC;;EAEA;EACA,IAAI,UAAU,CAAA,EAAG;IACf,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;MACxB,IAAI,GAAG,EAAE;QACP,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU;QAC9B,IAAI,OAAO,EAAE;UACX,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC;QACrE;MACF;IACF,CAAC,CAAC;IACF,OAAO,UAAU;EACnB;;EAEA;EACA;;EAEA;EACA,IAAI,OAAO,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC,QAAQ;EACtB;;EAEA;EACA;EACA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB;IACA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK;MAC9C,MAAM,WAAW,GAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAM,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,MAAO,IAAI,CAAC;MAC9E,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC;IAClC,CAAC,EAAE,CAAC,CAAC;;IAEL;IACA,IAAI,KAAK,GAAG,CAAC;IACb,MAAM,OAAO,GAAI,IAAI,CAAC,QAAQ,GAAG,EAAG;IACpC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;MACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC;MAC/C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;MACpB,MAAM,CAAC,IAAI,GAAG,IAAI;IACpB,CAAC,CAAC;EACJ;EAEA,YAAY,CAAC,GAAG,EAAE;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;EACxB;EAEA,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;EACzB;EAEA,eAAe,CAAC,GAAG,EAAE;IACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;EACxB;EAEA,aAAa,CAAC,CAAC,EAAE;IACf,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;EACvB;;EAEA;EACA,SAAS,CAAC,CAAC,EAAE;IACX,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;MACzB;MACA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;MACzB,IAAI,GAAG,EAAE,OAAO,GAAG;;MAEnB;MACA,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB;IACA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;MAClB,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;IACA,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;MAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;MAChC,OAAO,CAAC,IAAI,CAAC,EAAE;QACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;MAC3C;IACF;IACA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;EAC7B;EAEA,aAAa,CAAC,KAAK,EAAE,KAAK,EAAc;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;IAAC,SAAA,IAAA,GAAA,SAAA,CAAA,MAAA,EAFG,OAAO,OAAA,KAAA,CAAA,IAAA,OAAA,IAAA,WAAA,IAAA,MAAA,IAAA,GAAA,IAAA,EAAA,IAAA;MAAP,OAAO,CAAA,IAAA,QAAA,SAAA,CAAA,IAAA;IAAA;IAGpC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;MACtB;MACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QACnC;QACA,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI;UACxB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACtC,CAAC,CAAC;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9B;QACA,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC;MACrC;IACF,CAAC,MAAM;MACL;MACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI;QACtB,IAAI,CAAC,EAAE;UACL,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;QACxB;MACF,CAAC,CAAC;IACJ;;IAEA;IACA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK;IACtC,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;IACjC,IAAI,OAAO,GAAG,CAAC,EAAE;MACf,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;QACnD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI;MAC3D;IACF,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,EAAE;MACtB,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;QAClC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;MAC3D;IACF;IACA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACnD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI;IAC/B;;IAEA;IACA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;EACnF;EAEA,IAAI,UAAU,CAAA,EAAG;IACf,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;EACzC;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB,IAAI,QAAQ,GAAG,CAAC;IAChB,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;MAClB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC;IAC9C,CAAC,CAAC;IACF,OAAO,QAAQ;EACjB;EAEA,IAAI,iBAAiB,CAAA,EAAG;IACtB;IACA,MAAM,MAAM,GAAG,EAAE;IACjB,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;MAClB,GAAG,CAAC,QAAQ,CAAC,IAAA,IAAW;QAAA,IAAV;UAAC;QAAG,CAAC,GAAA,IAAA;QACjB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;UAChB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;UAClB,KAAK,EAAE;QACT;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,KAAK;EACd;;EAEA;EACA;;EAEA,UAAU,CAAA,EAAG;IACX;EAAA;EAGF,IAAI,cAAc,CAAA,EAAG;IACnB;IACA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;IACvB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;IACnB,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE;MACzC,CAAC,EAAE;IACL;IACA,OAAO,CAAC;EACV;EAEA,IAAI,QAAQ,CAAA,EAAG;IACb,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC;EAChC;EAEA,IAAI,OAAO,CAAA,EAAG;IACZ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;MACrB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C;IACA,OAAO,SAAS;EAClB;;EAEA;EACA,OAAO,CAAC,CAAC,EAAE;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;EAC1B;;EAEA;EACA,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;IACtB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC;EACxD;EAEA,IAAI,QAAQ,CAAA,EAAG;IACb,OAAO,IAAI,CAAC,cAAc;EAC5B;EAEA,IAAI,cAAc,CAAA,EAAG;IACnB;IACA,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,CAAC,OAAO,CAAC,MAAM;MACjB,KAAK,EAAE;IACT,CAAC,CAAC;IACF,OAAO,KAAK;EACd;;EAEA;EACA,MAAM,CAAC,CAAC,EAAE;IACR,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,EAAE;MACR,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C;IACA,OAAO,GAAG;EACZ;;EAEA;EACA,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;IACrB,IAAI,MAAM,GAAG,CAAC,EAAE,OAAO,SAAS;IAChC,MAAM,IAAI,GAAG,EAAE;IACf,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;MAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B;IACA,OAAO,IAAI;EACb;EAEA,MAAM,CAAC,KAAK,EAAe;IAAA,IAAb,KAAK,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,GAAG;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC9B,GAAG,CAAC,MAAM,GAAG,KAAK;IAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;IAC3D,OAAO,GAAG;EACZ;EAEA,OAAO,CAAC,KAAK,EAAe;IAAA,IAAb,KAAK,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,GAAG;IACxB,MAAM,IAAI,GAAG,EAAE;IACf,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;MACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,GAAG,EAAE,KAAK,EAAe;IAAA,IAAb,KAAK,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,GAAG;IAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC;IAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;IAChC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;EACzB;EAEA,UAAU,CAAC,GAAG,EAAE,MAAM,EAAe;IAAA,IAAb,KAAK,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,GAAG;IACjC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC;IAClC,IAAI,KAAK,KAAK,GAAG,EAAE;MACjB;MACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE;UAC3E,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QACrE,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE;UAClE,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QACrD;MACF;IACF;IACA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;EACzC;;EAEA;EACA,eAAe,CAAC,GAAG,EAAe;IAAA,IAAb,KAAK,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,GAAG;IAC9B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE;MAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;IACjD,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE;MAClE,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;IACjD;EACF;EAEA,UAAU,CAAC,GAAG,EAAE,IAAI,EAAsB;IAAA,IAApB,UAAU,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,KAAK;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;IACA,IAAI,CAAC,QAAQ,CAAC;MAAC,YAAY,EAAE;IAAU,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK;MAC7D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IACvD,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;EAC3B;EAEA,YAAY,CAAC,MAAM,EAAE,KAAK,EAAkB;IAAA,IAAhB,MAAM,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,KAAK;IACxC;IACA;;IAEA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;;IAE3D;IACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;MAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;MACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;MACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;MACzB;MACA,IAAI,CAAC,QAAQ,CAAC;QAAC,YAAY,EAAE;MAAI,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK;QACvD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;MAC5C,CAAC,CAAC;IACJ;EACF;EAEA,UAAU,CAAC,KAAK,EAAE,KAAK,EAAc;IACnC;IACA,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK;IAAC,SAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EAFF,OAAO,OAAA,KAAA,CAAA,KAAA,OAAA,KAAA,WAAA,KAAA,MAAA,KAAA,GAAA,KAAA,EAAA,KAAA;MAAP,OAAO,CAAA,KAAA,QAAA,SAAA,CAAA,KAAA;IAAA;IAGjC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM;IAC/B,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;IAC9B,IAAI,CAAC;IACL,IAAI,IAAI;IACR,IAAI,OAAO,GAAG,CAAC,EAAE;MACf;MACA,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS;MAClC;MACA,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,EAAE;UACR,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC;UACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;UACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;UACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;UACzB;UACA,IAAI,CAAC,QAAQ,CAAC;YAAC,YAAY,EAAE;UAAI,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK;YACvD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;UAC5C,CAAC,CAAC;UACF,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;QAC/B,CAAC,MAAM;UACL,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS;QACzC;MACF;IACF,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,EAAE;MACtB;MACA,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,EAAE;UACR,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC;UACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;UACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;UACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;UACzB;UACA,IAAI,CAAC,QAAQ,CAAC;YAAC,YAAY,EAAE;UAAI,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK;YACvD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;;YAE1C;YACA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,YAAY,EAAE;cACjD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;cACnF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;cACtC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;cACrG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;YACjC;UACF,CAAC,CAAC;QACJ,CAAC,MAAM;UACL,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS;QACzC;MACF;IACF;;IAEA;IACA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;MAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;MACnC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;MACf,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAC1B;;IAEA;IACA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;EAC1E;;EAEA;EACA,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE;IACzB,IAAI,CAAC,QAAQ,EAAE;MACb,QAAQ,GAAG,OAAO;MAClB,OAAO,GAAG,SAAS;IACrB;IACA,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE;MACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;MAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;MAC7B;IACF,CAAC,MAAM;MACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;QACxB,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE;UACxB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;QAC3B;MACF,CAAC,CAAC;IACJ;EACF;;EAEA;EACA,cAAc,CAAA,EAAG;IACf,MAAM,IAAI,GAAG,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;MACxB,IAAI,GAAG,EAAE;QACP,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM;MAC/B;IACF,CAAC,CAAC;IACF,OAAO,IAAI;EACb;;EAEA;EACA;;EAEA;EACA,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE;IACb,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IACvC,OAAO,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS;EACpD;;EAEA;EACA,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE;IACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IACpC,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;EAC/B;;EAEA;EACA;;EAEA;EACA,UAAU,CAAA,EAAW;IAAA,SAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EAAP,KAAK,OAAA,KAAA,CAAA,KAAA,GAAA,KAAA,MAAA,KAAA,GAAA,KAAA,EAAA,KAAA;MAAL,KAAK,CAAA,KAAA,IAAA,SAAA,CAAA,KAAA;IAAA;IACjB,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;IACnC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;EACtC;EAEA,sBAAsB,CAAA,EAAW;IAAA,SAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EAAP,KAAK,OAAA,KAAA,CAAA,KAAA,GAAA,KAAA,MAAA,KAAA,GAAA,KAAA,EAAA,KAAA;MAAL,KAAK,CAAA,KAAA,IAAA,SAAA,CAAA,KAAA;IAAA;IAC7B,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;IACnC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC;EAC5C;EAEA,mBAAmB,CAAC,UAAU,EAAE,WAAW,EAAE;IAC3C;IACA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI;MAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;MACtD;IACF,CAAC,CAAC;;IAEF;IACA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC;IAC5D,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACxD,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACxD;QACA,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE;UAC7C,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC;QAC/C;MACF;IACF;;IAEA;IACA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,UAAU;EAC3C;EAEA,cAAc,CAAC,MAAM,EAAE;IACrB;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IAC1C,IAAI,KAAK,EAAE;MACT,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC9C,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;UAC9C,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9B;MACF;MACA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IACrC;EACF;EAEA,IAAI,SAAS,CAAA,EAAG;IACd;IACA,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;EACtC;;EAEA;EACA;EACA;EACA,YAAY,CAAA,EAAW;IAAA,SAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EAAP,KAAK,OAAA,KAAA,CAAA,KAAA,GAAA,KAAA,MAAA,KAAA,GAAA,KAAA,EAAA,KAAA;MAAL,KAAK,CAAA,KAAA,IAAA,SAAA,CAAA,KAAA;IAAA;IACnB,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;;IAEnC;IACA,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACxD,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE;UACR,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;YACvC;YACA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;UAClC,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACrC;YACA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;UAC3B;QACF;MACF;IACF;EACF;;EAEA;EACA;EACA,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAwB;IAAA,IAAtB,SAAS,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,QAAQ;IACvD;IACA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;IACtC,MAAM;MAAC,GAAG;MAAE,IAAI;MAAE,MAAM;MAAE;IAAK,CAAC,GAAG,OAAO;IAC1C,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC;IAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;IACvD,MAAM,QAAQ,GAAG,SAAS,KAAK,QAAQ;;IAEvC;IACA,IAAI,SAAS;IACb,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;MACjC,SAAS,GAAG,OAAO;IACrB,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;MACjC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7B,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;MAC1D,CAAC,MAAM;QACL;QACA,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC;MACvE;IACF,CAAC,MAAM;MACL,SAAS,GAAG,CAAA,KAAM,SAAS;IAC7B;IACA,IAAI,KAAK,GAAG,IAAI;IAChB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;MAClC,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;QAClC,IAAI,KAAK,EAAE;UACT,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG;YACzB,SAAS;YACT,OAAO;YACP,GAAG,EAAE,KAAK;YACV,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;UACxB,CAAC;UACD,KAAK,GAAG,KAAK;QACf,CAAC,MAAM;UACL,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,GAC/B;YACE,aAAa,EAAE,aAAa;YAC5B,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;UACxB,CAAC,GACD,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB;MACF;IACF;EACF;;EAEA;EACA;EACA,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;IACvB,MAAM,KAAK,GAAG;MACZ,IAAI,EAAE,OAAO;MACb,OAAO;MACP;IACF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;EAC1C;EAEA,SAAS,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;EACpD;EAEA,kBAAkB,CAAC,OAAO,EAAE;IAC1B,MAAM,KAAK,GAAG;MACZ,IAAI,EAAE,YAAY;MAClB;IACF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;EAC1C;EAEA,oBAAoB,CAAA,EAAG;IACrB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;IAC5D,OAAO,KAAK,IAAI,KAAK,CAAC,OAAO;EAC/B;;EAEA;EACA;EACA,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE;IACzB;IACA;IACA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;MAC5B,IAAI,CAAC,eAAe,GAAG;QACrB,KAAK,EAAE;MACT,CAAC;MACD,IAAI,OAAO,IAAI,WAAW,IAAI,OAAO,EAAE;QACrC;QACA,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM;MAC9G;MACA,IAAI,QAAQ,EAAE;QACZ,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,SAAS;QAC9C,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7E,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,OAAO,IAAI,WAAW,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;QACjG,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC,qBAAqB,CAC9D,QAAQ,EACR,QAAQ,EACR,IAAI,CAAC,eAAe,CAAC,SAAS,EAC9B,IAAI,CAAC,eAAe,CAAC,SACvB,CAAC;MACH;MACA,IAAI,OAAO,EAAE;QACX,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;QACnE,IAAI,CAAC,QAAQ,IAAI,WAAW,IAAI,OAAO,EAAE;UACvC,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS;QACvC;MACF;MACA,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ;EAEA,SAAS,CAAA,EAAG;IACV,IAAI,CAAC,eAAe,GAAG,IAAI;EAC7B;;EAEA;EACA;EACA,QAAQ,CAAC,KAAK,EAAE;IACd,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;IAC/B,OAAO,KAAK;EACd;EAEA,QAAQ,CAAC,IAAI,EAAE;IACb,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;EAC1B;EAEA,WAAW,CAAC,IAAI,EAAE;IAChB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;EAC1B;EAEA,SAAS,CAAA,EAAG;IACV,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;EACnC;;EAEA;EACA;EACA,wBAAwB,CAAC,EAAE,EAAE;IAC3B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;EACtC;EAEA,2BAA2B,CAAC,MAAM,EAAE;IAClC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;MAC9B,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC,MAAM,IAAI,MAAM,YAAY,QAAQ,EAAE;MACrC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1E,CAAC,MAAM;MACL,IAAI,CAAC,sBAAsB,GAAG,EAAE;IAClC;EACF;;EAEA;EACA;EACA,IAAI,QAAQ,CAAA,EAAG;IACb;IACA,OAAO,CAAC,KAAK,CAAC,yFAAyF,CAAC;IACxG,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ;EACjC;EAEA,IAAI,QAAQ,CAAC,KAAK,EAAE;IAClB;IACA,OAAO,CAAC,KAAK,CAAC,yFAAyF,CAAC;IACxG,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK;EAClC;;EAEA;EACA;;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,MAAM,KAAK,GAAG;MACZ,EAAE,EAAE,IAAI,CAAC,EAAE;MACX,IAAI,EAAE,IAAI,CAAC,IAAI;MACf,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;MAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;MAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,SAAS,EAAE,IAAI,CAAC,SAAS;MACzB,YAAY,EAAE,IAAI,CAAC,YAAY;MAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;MACzB,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,UAAU,EAAE,IAAI,CAAC,UAAU;MAC3B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;MAC9C,eAAe,EAAE,IAAI,CAAC,eAAe;MACrC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;MAC5D,sBAAsB,EAAE,IAAI,CAAC;IAC/B,CAAC;;IAED;IACA;IACA,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;;IAEzC;IACA;IACA,MAAM,IAAI,GAAI,KAAK,CAAC,IAAI,GAAG,EAAG;IAC9B,MAAM,UAAU,GAAI,KAAK,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,CAAE;IACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;MACxB,MAAM,QAAQ,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK;MACjC,IAAI,QAAQ,EAAE;QACZ,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;MACrB;IACF,CAAC,CAAC;;IAEF;IACA;IACA,KAAK,CAAC,MAAM,GAAG,EAAE;IACjB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI;MAC5B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAChC,CAAC,CAAC;IAEF,OAAO,KAAK;EACd;EAEA,UAAU,CAAC,KAAK,EAAE;IAChB,IAAI,CAAC,KAAK,GAAG,EAAE;IACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI;MAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;MAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;MAChC,GAAG,CAAC,KAAK,GAAG,QAAQ;IACtB,CAAC,CAAC;EACJ;EAEA,gBAAgB,CAAC,KAAK,EAAE;IACtB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI;MAChC;MACA;MACA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;IACpC,CAAC,CAAC;EACJ;EAEA,IAAI,KAAK,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;IACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAEtB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC;IACjE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;IAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;IAChC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY;IACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;IACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;IAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe;IAC5C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK;MACnD,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;MACrB,CAAC,CAAC,KAAK,GAAG,KAAK;MACf,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;MACtB,OAAO,MAAM;IACf,CAAC,EAAE,CAAC,CAAC,CAAC;IACN,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,sBAAsB;EAC5D;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;AC95B1B;AACA,OAAO,CAAC,4BAA4B,CAAC;AACrC,OAAO,CAAC,oCAAoC,CAAC;AAC7C,OAAO,CAAC,kCAAkC,CAAC;AAC3C,OAAO,CAAC,gCAAgC,CAAC;AACzC,OAAO,CAAC,kCAAkC,CAAC;AAC3C,OAAO,CAAC,2BAA2B,CAAC;AACpC,OAAO,CAAC,0CAA0C,CAAC;AACnD;AACA,OAAO,CAAC,mCAAmC,CAAC;AAC5C;AACA,OAAO,CAAC,mCAAmC,CAAC;AAC5C;AACA,OAAO,CAAC,qCAAqC,CAAC;AAC9C;AACA,OAAO,CAAC,+BAA+B,CAAC;AACxC;AACA,OAAO,CAAC,2CAA2C,CAAC;AACpD;AACA,OAAO,CAAC,oCAAoC,CAAC;AAC7C;AACA,OAAO,CAAC,kCAAkC,CAAC;AAC3C,OAAO,CAAC,6BAA6B,CAAC;AAEtC,MAAM,OAAO,GAAG;EACd,QAAQ,EAAE,OAAO,CAAC,gBAAgB;AACpC,CAAC;;AAED;AACA,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;AAEpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;EAChC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,OAAO;;;;;ACnCxB;AACA,MAAM,WAAW,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC;AAExF,SAAS,cAAc,CAAC,KAAK,EAAE;EAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,KAAK;EACd;EACA,IAAI,WAAW,EAAE;IACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;EAClC;EACA,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzB;AAEA,OAAO,CAAC,cAAc,GAAG,cAAc;;;;;ACbvC;AACA,MAAM,WAAW,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC;AACxF,MAAM;EAAC;AAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;AAElC,SAAS,cAAc,CAAC,GAAG,EAAE;EAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IAC3B,OAAO,GAAG;EACZ;EACA,IAAI,WAAW,EAAE;IACf,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;EACpD;EACA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACzB;AAEA,OAAO,CAAC,cAAc,GAAG,cAAc;;;;;ACdvC,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;AACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;AAEvC,MAAM,UAAU,CAAC;EACf,WAAW,CAAC,QAAQ,EAAE;IACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ;IACxB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;EAClB;EAEA,OAAO,CAAC,UAAU,EAAE;IAClB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;EAC/C;EAEA,OAAO,CAAC,UAAU,EAAE;IAClB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;EAC7D;EAEA,QAAQ,CAAC,UAAU,EAAE;IACnB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;EAC9D;EAEA,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IACpC,MAAM,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC;IACrC,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;EAC9B;EAEA,SAAS,CAAC,OAAO,EAAE;IACjB,IAAI,OAAO,CAAC,GAAG,EAAE;MACf,KAAK,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACxD,KAAK,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;UACxD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC;QAC7C;MACF;IACF,CAAC,MAAM;MACL,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;IAChC;EACF;EAEA,SAAS,CAAC,OAAO,EAAE;IACjB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;EACvC;EAEA,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;IACrD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC;EAC/C;EAEA,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;IACrE,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;IACvD,MAAM,IAAI,GACR,GAAG,CAAC,SAAS,CAAC,KACb,GAAG,CAAC,SAAS,CAAC,GAAG;MAChB,SAAS;MACT,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,SAAS;MAC5C,GAAG,EAAE,SAAS;MACd,GAAG,EAAE;IACP,CAAC,CAAC;IACJ,OAAO,IAAI;EACb;EAEA,YAAY,CAAC,OAAO,EAAE;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE;MACV;IACF;IACA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;IAC7C,IAAI,CAAC,GAAG,EAAE;MACR;IACF;IACA,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;EACzB;EAEA,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IACpC,IAAI,KAAK,EAAE;MACT,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK;QAChC,IAAI,GAAG,EAAE;UACP,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK;YAC/B,IAAI,IAAI,EAAE;cACR,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;YACtC;UACF,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ;EACF;EAEA,OAAO,CAAC,QAAQ,EAAE;IAChB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK;MACxC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC1C,CAAC,CAAC;EACJ;EAEA,GAAG,CAAC,QAAQ,EAAE;IACZ,MAAM,OAAO,GAAG,EAAE;IAClB,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;MACnB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,OAAO,OAAO;EAChB;EAEA,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS;IAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;MACrB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B;IACA,IAAI,MAAM,EAAE;MACV,OAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IAChC;IACA,OAAO,SAAS;EAClB;EAEA,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;IACnC,MAAM;MAAC;IAAG,CAAC,GAAG,OAAO;IACrB,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;MACvB,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB;IACA,IAAI,MAAM,EAAE;MACV,OAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;IACzB;IACA,OAAO,SAAS;EAClB;EAEA,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;IAChC,MAAM;MAAC;IAAG,CAAC,GAAG,OAAO;IACrB,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;MACnB,OAAO,GAAG,CAAC,GAAG,CAAC;IACjB;IACA,IAAI,MAAM,EAAE;MACV,OAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,GAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GACjE,OAAO;IACb;IACA,OAAO,SAAS;EAClB;EAEA,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IACpC,IAAI,KAAK,EAAE;MACT,MAAM,OAAO,GAAG,EAAE;MAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;QAClC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;MAClB;MACA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC5C;EACF;EAEA,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IACpC,IAAI,KAAK,EAAE;MACT,MAAM,OAAO,GAAG,EAAE;MAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;QAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;MACpB;MACA,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI;QACnB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;MAC1C,CAAC,CAAC;IACJ;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,UAAU;;;;;ACpK3B,MAAM,YAAY,GAAG,aAAa;AAClC;AACA;AACA,MAAM,QAAQ,GAAG;EACf,WAAW,EAAE,CACX,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACJ;EACD,QAAQ,EAAE,CAAC;EACX,IAAI,EAAE,CAAC,CAAC;EACR,IAAI,EAAE,EAAE;EACR,MAAM,CAAC,CAAC,EAAE;IACR,IAAI,CAAC,IAAI,EAAE,EAAE;MACX,OAAO,CAAC;IACV;IACA,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;MAChB,OAAO,CAAC;IACV;IACA,OAAO,CAAC;EACV,CAAC;EACD,KAAK,CAAC,KAAK,EAAE;IACX,IAAI,CAAC;IACL,IAAI,CAAC;IACL,IAAI,EAAE;IACN,IAAI,EAAE;IACN,IAAI,EAAE;IACN,IAAI,CAAC,GAAG,CAAC;IACT,IAAI,KAAK,IAAI,CAAC,EAAE;MACd,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;IAC1E;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;MACnC,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAChB,CAAC,EAAE;MACL;MACA,IAAI,CAAC,QAAQ,GAAG,CAAC;IACnB;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;MACnC,CAAC,GAAG,EAAE;MACN,OAAO,CAAC,IAAI,EAAE,GAAI,EAAE,GAAG,EAAG,EAAE;QAC1B,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChB,EAAE,GAAG,CAAC,GAAG,EAAE;QACX,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAChB,CAAC,EAAE;MACL;MACA,IAAI,CAAC,QAAQ,GAAG,CAAC;IACnB;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;MACnC,CAAC,GAAG,EAAE,GAAI,EAAE,GAAG,EAAG,GAAG,CAAC;MACtB,OAAO,CAAC,IAAI,KAAK,EAAE;QACjB,CAAC,GAAG,CAAC,IAAK,EAAE,GAAG,EAAE,GAAI,EAAE,GAAG,CAAC,CAAC;QAC5B,EAAE,GAAG,CAAC,GAAG,EAAE;QACX,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;QAC5B,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAChB,CAAC,EAAE;MACL;MACA,IAAI,CAAC,QAAQ,GAAG,CAAC;IACnB;EACF,CAAC;EACD,GAAG,CAAC,CAAC,EAAE;IACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;MACjB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACtB;IACA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;MACjB,MAAM,IAAI,KAAK,CAAE,yCAAwC,CAAE,EAAC,CAAC;IAC/D;IACA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,CAAC;EACD,GAAG,CAAC,CAAC,EAAE;IACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE;MACtB,MAAM,IAAI,KAAK,CAAE,GAAE,CAAE,2DAA0D,CAAC;IAClF;IACA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;MACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B;IACA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;EACrB,CAAC;EAED;EACA;EACA,KAAK,EAAE,CAAC,CAAC;EAET;EACA,eAAe,CAAC,KAAK,EAAE;IACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;MAC7B,MAAM,IAAI,KAAK,CAAE,oBAAmB,KAAM,EAAC,CAAC;IAC9C;IACA,OAAO,IAAI;EACb,CAAC;EAED;EACA,aAAa,CAAC,KAAK,EAAE;IACnB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAClD,IAAI,IAAI,EAAE;MACR,OAAO,IAAI;IACb;IACA,IAAI,MAAM,GAAG,KAAK;IAClB,IAAI,GAAG,GAAG,EAAE;IACZ,IAAI,SAAS,GAAG,CAAC;IACjB,IAAI,MAAM,GAAG,KAAK;IAClB,IAAI,GAAG,GAAG,EAAE;IACZ,IAAI,SAAS,GAAG,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC3C,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;MAC1B;MACA,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE;QACvC;QACA;QACA,MAAM,GAAG,IAAI;QACb,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;QACf;QACA,SAAS,GAAI,SAAS,GAAG,EAAE,GAAI,IAAI,GAAG,EAAE;MAC1C,CAAC,MAAM,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE;QACnC;QACA;QACA,MAAM,GAAG,IAAI;QACb,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;QACf;QACA,SAAS,GAAI,SAAS,GAAG,EAAE,GAAI,IAAI,GAAG,EAAE;MAC1C,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,KAAK,EAAE,EAAE;QAC1C;QACA;MACF;IACF;IACA,IAAI,CAAC,MAAM,EAAE;MACX,SAAS,GAAG,SAAS;IACvB,CAAC,MAAM,IAAI,SAAS,GAAG,KAAK,EAAE;MAC5B,MAAM,IAAI,KAAK,CAAE,yCAAwC,GAAI,EAAC,CAAC;IACjE;IACA,IAAI,CAAC,MAAM,EAAE;MACX,SAAS,GAAG,SAAS;IACvB;;IAEA;IACA,KAAK,GAAG,GAAG,GAAG,GAAG;IAEjB,MAAM,OAAO,GAAG;MACd,OAAO,EAAE,KAAK;MACd,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS;MACd,QAAQ,EAAG,IAAG,GAAI,IAAG,GAAI;IAC3B,CAAC;;IAED;IACA,IAAI,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,EAAE;MACxC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO;MAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO;IACxC;IAEA,OAAO,OAAO;EAChB,CAAC;EAED;EACA,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE;IACf,IAAI,CAAC,EAAE;MACL,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;MAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACpC;IACA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;EAC9B,CAAC;EAED;EACA,MAAM,CAAC,KAAK,EAAE;IACZ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;MACtB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;MACvC,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;MACvC,MAAM,MAAM,GAAG;QACb,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QAC9B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QAChC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG;MAChC,CAAC;MACD;MACA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG;MAC9C,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM;MAClD,MAAM,CAAC,UAAU,GAAI,GAAE,MAAM,CAAC,EAAG,IAAG,MAAM,CAAC,EAAG,EAAC;MAC/C,OAAO,MAAM;IACf;IACA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;EAClC,CAAC;EAED;EACA,QAAQ,CAAC,KAAK,EAAE;IACd,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC;IAE3E,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;IAE7B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;MACpB,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;MACrC,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;MACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;MACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;MACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;MACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;MAEtC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG;MACzB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM;MAE7B,OAAO;QACL,GAAG;QACH,IAAI;QACJ,MAAM;QACN,KAAK;QACL,SAAS;QACT,EAAE,EAAE;UAAC,OAAO,EAAE,EAAE;UAAE,GAAG,EAAE,IAAI;UAAE,GAAG,EAAE,GAAG;UAAE,QAAQ,EAAG,IAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAE,IAAG,GAAI,EAAC;UAAE;QAAS,CAAC;QACxF,EAAE,EAAE;UACF,OAAO,EAAE,EAAE;UACX,GAAG,EAAE,KAAK;UACV,GAAG,EAAE,MAAM;UACX,QAAQ,EAAG,IAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAE,IAAG,MAAO,EAAC;UACzC;QACF,CAAC;QACD,UAAU,EAAG,GAAE,EAAG,IAAG,EAAG;MAC1B,CAAC;IACH;IACA,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;MAC7B,OAAO,SAAS,GAAG;QAAC,SAAS;QAAE,KAAK,EAAE;MAAS,CAAC,GAAG;QAAC,KAAK,EAAE;MAAS,CAAC;IACvE;IAEA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;IAC7C,OAAO,SAAS,GAAG;MAAC,SAAS;MAAE,GAAG;IAAO,CAAC,GAAG,OAAO;EACtD,CAAC;EAED;EACA,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE;IACtB,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;EAChC,CAAC;EAED;EACA,MAAM,CAAA,EAAG;IACP,QAAQ,SAAS,CAAC,MAAM;MACtB,KAAK,CAAC;QACJ,OAAO,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;MAC3D,KAAK,CAAC;QACJ,OAAQ,GAAE,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAE,IAAG,QAAQ,CAAC,aAAa,CACpF,SAAS,CAAC,CAAC,CAAC,EACZ,SAAS,CAAC,CAAC,CACb,CAAE,EAAC;MACL;QACE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;IAC5D;EACF,CAAC;EAED;EACA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAI,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK;IAC1C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO;IAC1B,OAAO,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,MAAM;EACnE;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ;;;;;AC9RzB,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,QAAQ,MAAM;EACvC,GAAG,GAAG;EACN,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK;IAChC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;MAAC,GAAG,GAAG,CAAC,GAAG;IAAC,CAAC;IACvC,OAAO,IAAI;EACb,CAAC,EAAE,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,SAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAoB;EAAA,IAAlB,QAAQ,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,EAAE;EAC/C,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;AAEvD,MAAM,SAAS,GAAG,KAAK,IAAI;EACzB,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK;EACxB,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;EAEhC,MAAM,MAAM,GAAG;IAAC,GAAG;EAAK,CAAC;EAEzB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;EAC7C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;EACvC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC;EACxC,IAAI,KAAK,CAAC,MAAM,EAAE;IAChB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;IACpC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1D,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3D,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;IAC7D,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;IAC5D,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC;EACjE;EAEA,IAAI,KAAK,CAAC,IAAI,EAAE;IACd,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;MACpB,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E;EACF;EAEA,OAAO,MAAM;AACf,CAAC;AAED,OAAO,CAAC,SAAS,GAAG,SAAS;;;;AC1C7B,YAAY;;AAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;AAEhC,MAAM,SAAS,GAAG;EAChB;AACF;AACA;AACA;AACA;EACE,IAAI,CAAC,SAAS,EAAc;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;IAAC,SAAA,IAAA,GAAA,SAAA,CAAA,MAAA,EADzB,OAAO,OAAA,KAAA,CAAA,IAAA,OAAA,IAAA,WAAA,IAAA,MAAA,IAAA,GAAA,IAAA,EAAA,IAAA;MAAP,OAAO,CAAA,IAAA,QAAA,SAAA,CAAA,IAAA;IAAA;IAExB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;EACtB,CAAC;EACD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,qBAAqB,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE;IACnE,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;MACrC,MAAM,IAAI,KAAK,CAAE,mBAAkB,aAAc,kBAAiB,CAAC;IACrE;;IAEA;IACA,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;IACvD;IACA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,cAAc,CAAC;IACpF;IACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;MAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;MAChC;MACA;MACA,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;MAC5B,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,QAAQ,CAAC;IAC/C;IACA,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;EAC/B,CAAC;EACD;AACF;AACA;AACA;EACE,WAAW,CAAC,IAAI,EAAE;IAChB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;EACjC;AACF,CAAC;AACD,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;;;ACtD1B,MAAM;EAAC;AAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;AACtC,MAAM;EAAC;AAAW,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAChD,MAAM;EAAC;AAAc,CAAC,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAE3D,MAAM,CAAC,OAAO,GAAG,iBAAiB,QAAQ,EAAE;EAC1C;EACA;EACA,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;IACpD,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;EAC7C;EACA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC;EACrC,IAAI,KAAK;EACT,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI;IAC7B,KAAK,GAAG,GAAG;EACb,CAAC,CAAC;EACF,IAAI,MAAM,GAAG,EAAE;EACf,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC;IAAC,SAAS,EAAE,SAAS;IAAE;EAAK,CAAC,CAAC,CAAC;EAC9E,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM;IAAE;EAAK,CAAC,CAAC,CAAC;EACxE,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC;IAAC,SAAS,EAAE,UAAU;IAAE;EAAK,CAAC,CAAC,CAAC;EAChF,WAAW,MAAM,KAAK,IAAI,QAAQ,EAAE;IAClC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACxC;IACA;IACA,IAAI,KAAK,EAAE,MAAM,KAAK;IACtB;IACA;IACA,MAAM,MAAM;IACZ,MAAM,GAAG,EAAE;EACb;AACF,CAAC;;;;;AC7BD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;;AAEvC;AACA,MAAM,sBAAsB,GAAG,4CAA4C;AAC3E,MAAM,IAAI,GAAG,sCAAsC;AAEnD,SAAS,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;EAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;EACxC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;EAClC,OAAO,OAAO,CAAC,OAAO,CACpB,sBAAsB,EACtB,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,KAAK;IACxD,IAAI,aAAa,EAAE;MACjB,OAAO,QAAQ;IACjB;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACjC,IAAI,KAAK,EAAE;MACT,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;MAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;MACrC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;MAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;MACvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAK,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,GAAG,KAAM,EAAE;QAChE;QACA,OAAO,QAAQ;MACjB;MACA,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;MAC9B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;MAC9B,IAAI,CAAC,SAAS,EAAE;QACd,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG;MAC5B;MACA,IAAI,CAAC,SAAS,EAAE;QACd,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG;MAC5B;MACA,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,IAAI,EAAE,CAAC,GAAG,GAAG;MAC3F,OAAO,GAAG;IACZ;IACA,OAAO,QAAQ;EACjB,CACF,CAAC;AACH;AAEA,MAAM,CAAC,OAAO,GAAG;EACf;AACF,CAAC;;;;;;AC3CD;AACA,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAEzC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAChC,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;;AAEzC;AACA;AACA,MAAM,WAAW,CAAC;EAChB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE;IAC1B,IAAI,CAAC,KAAK,GAAG,IAAI;IACjB,IAAI,CAAC,SAAS,GAAG,QAAQ;EAC3B;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;EAC/B;;EAEA;EACA,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE;IACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC;EACnE;EAEA,QAAQ,CAAA,EAAG;IACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;MACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;IACxD;IACA,OAAO,IAAI,CAAC,OAAO;EACrB;AACF;AAEA,MAAM,cAAc,CAAC;EACnB,WAAW,CAAC,IAAI,EAAE;IAChB,IAAI,CAAC,KAAK,GAAG,IAAI;EACnB;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;;EAEA;EACA,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE;IACzC;IACA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC;EACnE;EAEA,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EAC9B;AACF;AAEA,MAAM,WAAW,CAAC;EAChB,WAAW,CAAC,IAAI,EAAE;IAChB,IAAI,CAAC,KAAK,GAAG,IAAI;EACnB;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;;EAEA;EACA,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE;IACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC;EACvD;EAEA,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,KAAK;EACnB;AACF;;AAEA;AACA;AACA,MAAM,YAAY,CAAC;EACjB,WAAW,CAAC,IAAI,EAAE;IAChB,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB;IACA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAChC;IACA,IAAI,CAAC,KAAK,GAAG,CAAC;IACd;IACA,IAAI,CAAC,MAAM,GAAG,CAAC;EACjB;EAEA,QAAQ,CAAA,EAAG;IACT,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE;MACjD,OAAO,IAAI,CAAC,MAAM;IACpB;IAEA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;IACjD,OAAO,GAAG;EACZ;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;EACjC;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM;EACnC;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI;EAClC;EAEA,IAAI,CAAC,IAAI,EAAE;IACT,IAAI,GAAG;IACP;IACA,IAAI,IAAI,KAAK,CAAC,EAAE;MACd;MACA,OAAO,IAAI;IACb;IAEA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;MAC7C;MACA,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;MACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;MACxB,OAAO,GAAG;IACZ;;IAEA;IACA,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;IAC1C,IAAI,CAAC,KAAK,IAAI,IAAI;IAClB,OAAO,GAAG;EACZ;EAEA,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;IAC3B;IACA;IACA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,IAAI,CAAC,MAAM,IAAI,IAAI;IACnB,OAAO,IAAI;EACb;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM,SAAS,GAAG,SAAA,CAAS,OAAO,EAAE;EAClC,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;EACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,GAAG,IAAI;EAC7C,IAAI,CAAC,OAAO,GAAG,EAAE;;EAEjB;EACA;EACA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK;EAEnC,IAAI,CAAC,MAAM,GAAG,KAAK;EACnB;EACA,IAAI,CAAC,KAAK,GAAG,CAAC;;EAEd;EACA,IAAI,CAAC,MAAM,GAAG,CAAC;;EAEf;EACA,IAAI,CAAC,KAAK,GAAG,EAAE;;EAEf;EACA,IAAI,CAAC,MAAM,GAAG,KAAK;EAEnB,IAAI,CAAC,QAAQ,GAAG,IAAI;AACtB,CAAC;AAED,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;EACvC,QAAQ,CAAA,EAAG;IACT,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM;MACzB,KAAK,CAAC;QACJ,OAAO,IAAI;MACb,KAAK,CAAC;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;MACnC;QACE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrE;EACF,CAAC;EAED;EACA;EACA;EACA;EACA;EACA;;EAEA,kBAAkB,CAAA,EAAG;IACnB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;MACvB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;MAClD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACd,OAAO,IAAI;MACb;IACF;IACA,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IACtB,OAAO,GAAG;EACZ,CAAC;EAED,MAAM,KAAK,CAAC,KAAK,EAAE;IACjB,MAAM,KAAK,GAAG,SAAA,CAAS,IAAI,EAAE;MAC3B,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;QAC5B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM;UACjC,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;EAC1C,CAAC;EACD,eAAe,CAAC,KAAK,EAAE;IACrB,IAAI,KAAK,GAAG,CAAC;IACb,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;IAC1B,OAAO,KAAK,GAAG,KAAK,EAAE;MACpB;MACA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;;MAExC;MACA,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC;IACpD;EACF,CAAC;EACD,MAAM,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACpC,IAAI,QAAQ,YAAY,QAAQ,EAAE;MAChC,QAAQ,GAAG,QAAQ;MACnB,QAAQ,GAAG,MAAM;IACnB;IACA,QAAQ,GAAG,QAAQ,IAAI,KAAK,CAAC,GAAG;;IAEhC;IACA,IAAI,KAAK;IACT,IAAI,IAAI,YAAY,SAAS,EAAE;MAC7B,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC;IAClC,CAAC,MAAM,IAAI,IAAI,YAAY,MAAM,EAAE;MACjC,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,YAAY,MAAM,IAAI,IAAI,YAAY,WAAW,EAAE;MAC5F,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;IACzC,CAAC,MAAM;MACL,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;IAC3E;;IAEA;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;MACrB,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;UAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC;MACF,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QACvB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACvB,QAAQ,CAAC,CAAC;MACZ,CAAC,MAAM;QACL,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;MAC5B;IACF,CAAC,MAAM;MACL,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;MACrC;MAEA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;MAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IACvB;IAEA,OAAO,IAAI;EACb,CAAC;EACD,IAAI,CAAA,EAAG;IACL,IAAI,CAAC,MAAM,GAAG,IAAI;EACpB,CAAC;EACD,MAAM,CAAA,CAAC;EAAA,EAAmB;IACxB;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;MACrB;MACA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;MAClC;IACF;EACF,CAAC;EACD,MAAM,CAAA,EAAG;IACP,IAAI,CAAC,MAAM,GAAG,KAAK;IACnB,IAAI,CAAC,MAAM,CAAC,CAAC;EACf,CAAC;EACD,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC7B,MAAM,aAAa,GAAG,KAAK,IAAI;MAC7B,IAAI,KAAK,EAAE;QACT,QAAQ,CAAC,KAAK,CAAC;MACjB,CAAC,MAAM;QACL,IAAI,CAAC,MAAM,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;UACzB,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;MACrB;IACF,CAAC;IACD,IAAI,KAAK,EAAE;MACT,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC;IAC5C,CAAC,MAAM;MACL,aAAa,CAAC,CAAC;IACjB;EACF,CAAC;EAED;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,CAAC,IAAI,EAAE;IACT,IAAI,OAAO;IACX;IACA,IAAI,IAAI,EAAE;MACR,OAAO,GAAG,EAAE;MACZ,OAAO,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,IAAI,MAAM,CAAC,MAAM;QACrB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACpB,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;UAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtB;MACF;MACA,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B;IAEA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACjE,IAAI,CAAC,OAAO,GAAG,EAAE;IACjB,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;EAC/B,CAAC;EACD,WAAW,CAAC,QAAQ,EAAE;IACpB;IACA,IAAI,CAAC,QAAQ,GAAG,QAAQ;EAC1B,CAAC;EACD,KAAK,CAAA,EAAG;IACN,IAAI,CAAC,MAAM,GAAG,IAAI;EACpB,CAAC;EACD,MAAM,CAAA,EAAG;IACP,IAAI,CAAC,MAAM,GAAG,KAAK;EACrB,CAAC;EACD,QAAQ,CAAA,EAAG;IACT,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM;EACtB,CAAC;EACD,IAAI,CAAC,WAAW,EAAE;IAChB;IACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;MACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ;EACF,CAAC;EACD,MAAM,CAAC,WAAW,EAAE;IAClB;IACA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,WAAW,CAAC;EAC9D,CAAC;EACD,OAAO,CAAA,CAAC;EAAA,EAAa;IACnB;IACA;IACA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;EACpC,CAAC;EACD,IAAI,CAAA,CAAC;EAAA,EAAc;IACjB;IACA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;EACpC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;;;;AC3W1B;AACA;AACA,MAAM,SAAS,CAAC;EACd,WAAW,CAAC,OAAO,EAAE;IACnB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAE,OAAO,IAAI,OAAO,CAAC,IAAI,IAAK,KAAK,CAAC;IAC5D,IAAI,CAAC,SAAS,GAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAK,MAAM;;IAExD;IACA,IAAI,CAAC,MAAM,GAAG,CAAC;;IAEf;IACA,IAAI,CAAC,OAAO,GAAG,SAAS;EAC1B;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,MAAM;EACpB;EAEA,IAAI,QAAQ,CAAA,EAAG;IACb,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;EACzB;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,IAAI;EAClB;EAEA,QAAQ,CAAA,EAAG;IACT;IACA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;MACjB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;MACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACjD;IACA,OAAO,IAAI,CAAC,OAAO;EACrB;EAEA,KAAK,CAAC,QAAQ,EAAE;IACd,QAAQ,GAAG,QAAQ,IAAI,CAAC;IACxB,IAAI,CAAC,OAAO,GAAG,SAAS;IACxB,IAAI,CAAC,MAAM,GAAG,QAAQ;EACxB;EAEA,KAAK,CAAC,GAAG,EAAE;IACT,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;IAC/B,OAAO,IAAI,GAAG,GAAG,EAAE;MACjB,IAAI,IAAI,CAAC;IACX;IACA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,GAAG,GAAG;EACjB;EAEA,OAAO,CAAC,IAAI,EAAE;IACZ,IAAI,CAAC,OAAO,GAAG,SAAS;IAExB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;;IAE5E;IACA,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;;MAErC;MACA,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;IAC1E;IAEA,IAAI,CAAC,MAAM,GAAG,KAAK;EACrB;EAEA,YAAY,CAAC,KAAK,EAAE;IAClB,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,IAAI,CAAC,OAAO,GAAG,SAAS;MAExB,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;MACxC;MACA;MACA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;MACxD,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;IAC7B;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;;;ACjF1B,MAAM;EAAC;AAAQ,CAAC,GAAG,MAAM,CAAC,SAAS;AACnC,MAAM,eAAe,GAAG,QAAQ;AAChC,MAAM,CAAC,GAAG;EACR,IAAI,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE;IAC3B,IAAI,GAAG,EAAE;MACP,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;MACjB,CAAC,MAAM;QACL,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;UAC9B,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QACnB,CAAC,CAAC;MACJ;IACF;EACF,CAAC;EAED,IAAI,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE;IAC3B,IAAI,GAAG,EAAE;MACP,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;MACrB;MACA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD;IACA,OAAO,KAAK;EACd,CAAC;EAED,KAAK,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE;IAC7B,IAAI,GAAG,EAAE;MACP,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;MACtB;MACA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD;IACA,OAAO,IAAI;EACb,CAAC;EAED,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE;IACzB,IAAI,GAAG,EAAE;MACP,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;MACpB;MACA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD;IACA,OAAO,EAAE;EACX,CAAC;EAED,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;IACV,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;MACxB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;MACX,OAAO,CAAC;IACV,CAAC,EAAE,CAAC,CAAC,CAAC;EACR,CAAC;EAED,OAAO,EAAE,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC;IACtB,MAAM,KAAK,GAAG,OAAO,CAAC;IACtB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,IAAI,IAAI;IAER,IAAI,KAAK,KAAK,KAAK,EAAE;MACnB,OAAO,KAAK;IACd;IACA,QAAQ,OAAO,CAAC;MACd,KAAK,QAAQ;QACX,IAAI,MAAM,IAAI,MAAM,EAAE;UACpB,IAAI,MAAM,IAAI,MAAM,EAAE;YACpB,OACE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IACrB,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK;cACzB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;cACvB,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;YAClC,CAAC,CAAC;UAEN;UACA,OAAO,KAAK;QACd;QAEA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;UAC5B,OAAO,CAAC,KAAK,CAAC;QAChB;;QAEA;QACA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAErB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;UACzC,OAAO,KAAK;QACd;QAEA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;UACtB,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YAC1B,OAAO,KAAK;UACd;QACF;QAEA,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK;UACjC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;UACrB,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;QAClC,CAAC,CAAC;MAEJ;QACE,OAAO,CAAC,KAAK,CAAC;IAClB;EACF,CAAC;EAED,UAAU,CAAC,IAAI,EAAE;IACf,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI;IAE7B,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,SAAS,GAAG,CAAC;IACjB,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK;IACzB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC3B,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpB,KAAK,GAAG;UACN,MAAM,GAAG,QAAQ;UACjB;QACF,KAAK,GAAG;UACN,MAAM,GAAG,OAAO;UAChB;QACF,KAAK,IAAI;UACP,MAAM,GAAG,QAAQ;UACjB;QACF,KAAK,GAAG;UACN,MAAM,GAAG,MAAM;UACf;QACF,KAAK,GAAG;UACN,MAAM,GAAG,MAAM;UACf;QACF;UACE;MACJ;MACA,IAAI,SAAS,KAAK,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;MAC3D,SAAS,GAAG,CAAC,GAAG,CAAC;MACjB,MAAM,IAAI,MAAM;IAClB;IACA,IAAI,SAAS,KAAK,CAAC,EAAE,OAAO,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,OAAO,MAAM;EACf,CAAC;EAED,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;IACX,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC;EACV,CAAC;EAED,WAAW,CAAC,GAAG,EAAE;IACf,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,oBAAoB;EACpD,CAAC;EAED,QAAQ,CAAC,GAAG,EAAE;IACZ,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,iBAAiB;EACjD,CAAC;EAED,SAAS,CAAA,EAAG;IACV,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM;MAAC;IAAM,CAAC,GAAG,SAAS;IAC1B;IACA,IAAI,GAAG,EAAE,KAAK,EAAE,WAAW;IAE3B,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;MAC7B,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;MACjB,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;MAChC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE;QAClC,IAAI,WAAW,EAAE;UACf,WAAW,GAAG,KAAK;UACnB,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;QAC9C,CAAC,MAAM;UACL,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC3C;QACA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;MACvC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;QAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG;MACnB;IACF;IAEA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;MAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;IACnC;IACA,OAAO,MAAM;EACf;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,CAAC;;;;;;ACvLlB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;;AAExB;AACA,MAAM,QAAQ,GAAG,SAAA,CAAS,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;EAC5D;EACA,GAAG,CAAC,MAAM,GAAG,SAAS;EAEtB,IAAI,CAAC,SAAS,EAAE;IACd,SAAS,GAAG,OAAO;IACnB,OAAO,GAAG,IAAI;EAChB;EAEA,IAAI,OAAO,EAAE;IACX,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;MAChC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC;EACJ;EAEA,MAAM,UAAU,GAAG;IACjB,WAAW,EAAE;MACX,KAAK,EAAE,GAAG;MACV,UAAU,EAAE,KAAK;MACjB,QAAQ,EAAE,KAAK;MACf,YAAY,EAAE;IAChB;EACF,CAAC;EACD,IAAI,SAAS,EAAE;IACb,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;MAClC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC;EACJ;EAEA,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC;AAChE,CAAC;;AAED;AACA,MAAM,cAAc,GAAG,wCAAwC;AAC/D,MAAM,KAAK,GAAG;EACZ,GAAG,CAAA,EAAG,CAAC,CAAC;EACR,gBAAgB,CAAC,KAAK,EAAE;IACtB,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;MAC5B,IAAI,MAAM,CAAC,YAAY,EAAE;QACvB,YAAY,CAAC,MAAM;UACjB,OAAO,CAAC,KAAK,CAAC;QAChB,CAAC,CAAC;MACJ,CAAC,MAAM;QACL;QACA,UAAU,CAAC,MAAM;UACf,OAAO,CAAC,KAAK,CAAC;QAChB,CAAC,EAAE,CAAC,CAAC;MACP;IACF,CAAC,CAAC;EACJ,CAAC;EACD,QAAQ;EACR,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE;IACvB,OAAO,KAAK,GAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAG,IAAI,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;EAC7E,CAAC;EACD,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE;IACvB,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IAChG,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC;EACxC,CAAC;EACD,SAAS,CAAC,QAAQ,EAAE;IAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC;IACtC,OAAO;MACL,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;MACjC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;IACnC,CAAC;EACH,CAAC;EACD,WAAW,CAAC,QAAQ,EAAE;IACpB,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;IACtC,OAAQ,GAAE,IAAI,CAAC,IAAK,UAAS,IAAI,CAAC,IAAK,OAAM;EAC/C,CAAC;EACD,SAAS,CAAC,IAAI,EAAE;IACd,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7C,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI;IAE7B,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,SAAS,GAAG,CAAC;IACjB,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK;IACzB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;MACnC,QAAQ,QAAQ;QACd,KAAK,EAAE;UAAE;UACP,MAAM,GAAG,QAAQ;UACjB;QACF,KAAK,EAAE;UAAE;UACP,MAAM,GAAG,OAAO;UAChB;QACF,KAAK,EAAE;UAAE;UACP,MAAM,GAAG,QAAQ;UACjB;QACF,KAAK,EAAE;UAAE;UACP,MAAM,GAAG,MAAM;UACf;QACF,KAAK,EAAE;UAAE;UACP,MAAM,GAAG,MAAM;UACf;QACF,KAAK,GAAG;UACN,MAAM,GAAG,EAAE;UACX;QACF;UAAS;YACP,IAAI,QAAQ,IAAI,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAK,QAAQ,IAAI,EAAE,IAAI,QAAQ,KAAK,EAAG,CAAC,EAAE;cAC5E,MAAM,GAAG,EAAE;cACX;YACF;YACA;UACF;MACF;MACA,IAAI,SAAS,KAAK,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;MAC3D,SAAS,GAAG,CAAC,GAAG,CAAC;MACjB,IAAI,MAAM,EAAE,MAAM,IAAI,MAAM;IAC9B;IACA,IAAI,SAAS,KAAK,CAAC,EAAE,OAAO,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,OAAO,MAAM;EACf,CAAC;EACD,SAAS,CAAC,IAAI,EAAE;IACd,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,IAAI;MACtC,QAAQ,CAAC;QACP,KAAK,MAAM;UACT,OAAO,GAAG;QACZ,KAAK,MAAM;UACT,OAAO,GAAG;QACZ,KAAK,OAAO;UACV,OAAO,GAAG;QACZ,KAAK,QAAQ;UACX,OAAO,IAAI;QACb,KAAK,QAAQ;UACX,OAAO,GAAG;QACZ;UACE,OAAO,CAAC;MACZ;IACF,CAAC,CAAC;EACJ,CAAC;EACD,QAAQ,CAAC,KAAK,EAAE;IACd,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;EACjC,CAAC;EAED,SAAS,CAAC,GAAG,EAAE;IACb,IAAI,CAAC,GAAG,EAAE;MACR,OAAO,KAAK;IACd;;IAEA;IACA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;IACnC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IACjC;IACA,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI;IAC/C,OAAO,MAAM;EACf,CAAC;EAED,EAAE,EAAE;IACF,MAAM,CAAC,IAAI,EAAE;MACX,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;QAC5B,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI;UACxC,OAAO,CAAC,CAAC,GAAG,CAAC;QACf,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EACF,CAAC;EAED,eAAe,CAAC,EAAE,EAAE;IAClB,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;EACxC,CAAC;EAED,YAAY,CAAC,KAAK,EAAE;IAClB,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG;EAC3E;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,KAAK;;;;;;;AC3KtB,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;AAEjC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;;AAEhC;AACA,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,WAAW,GAAG,GAAG;AACvB,MAAM,gBAAgB,GAAG,IAAI;AAC7B,MAAM,iBAAiB,GAAG,IAAI;AAE9B,SAAS,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;EACvC,GAAG,CAAC,IAAI,CAAE,IAAG,IAAK,KAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,GAAE,CAAC;AAC7D;AACA,SAAS,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE;EACvC,IAAI,UAAU,EAAE;IACd,MAAM,GAAG,GAAG,EAAE;IACd,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;MAClC,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC;MACjC;IACF,CAAC,CAAC;IACF,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACxB;AACF;AAEA,MAAM,SAAS,CAAC;EACd,WAAW,CAAA,EAAG;IACZ,IAAI,CAAC,IAAI,GAAG,EAAE;IACd,IAAI,CAAC,MAAM,GAAG,EAAE;IAChB,IAAI,CAAC,UAAU,GAAG,EAAE;EACtB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;EAC7E;EAEA,IAAI,MAAM,CAAA,EAAG;IACX;IACA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;EACzB;EAEA,OAAO,CAAC,aAAa,EAAE;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;IACrB;IACA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;IACjB,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC;IAClC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;EAClB;EAEA,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG;IACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;IACrB,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;MACvB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;IACvB;IAEA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;IAEtB;IACA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;IACpB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACd,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;IAC/B,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAAC,IAAI,GAAG,IAAI;EAClB;EAEA,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;IACxB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;IACtE;IACA,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;IACvC;EACF;EAEA,aAAa,CAAC,KAAK,EAAE;IACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;IACtE;IACA,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;EAClC;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;IACrB,IAAI,IAAI,CAAC,IAAI,EAAE;MACb,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;MACrB,IAAI,CAAC,IAAI,GAAG,KAAK;IACnB;IACA,IAAI,CAAC,IAAI,GAAG,KAAK;IACjB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC5C;EAEA,QAAQ,CAAC,GAAG,EAAE;IACZ,IAAI,IAAI,CAAC,IAAI,EAAE;MACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;MAC3B,IAAI,CAAC,IAAI,GAAG,KAAK;IACnB;IACA,IAAI,CAAC,IAAI,GAAG,KAAK;IACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;EACrB;EAEA,SAAS,CAAA,EAAG;IACV,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;IACrB,IAAI,IAAI,CAAC,IAAI,EAAE;MACb,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC7B,CAAC,MAAM;MACL,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;MAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;MACd,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;IACvB;IACA,IAAI,CAAC,IAAI,GAAG,KAAK;IACjB,IAAI,CAAC,IAAI,GAAG,KAAK;EACnB;EAEA,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS,EAAE;MACtB;MACA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACtB;IACA,IAAI,CAAC,SAAS,CAAC,CAAC;EAClB;EAEA,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;MACzB,IAAI,CAAC,SAAS,CAAC,CAAC;IAClB;EACF;EAEA,WAAW,CAAA,EAAG;IACZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;MACnB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;MACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;MACzB,IAAI,EAAE,IAAI,CAAC,IAAI;MACf,IAAI,EAAE,IAAI,CAAC;IACb,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,MAAM;EACpB;EAEA,MAAM,CAAA,EAAG;IACP,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;EACvB;EAEA,QAAQ,CAAA,EAAG;IACT,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;MAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;IACnD;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;MAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;IAC3D;IACA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;IAClB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;EACpB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,IAAI,CAAC,QAAQ,CAAC,CAAC;IACf,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;EAC3B;AACF;AAEA,SAAS,CAAC,gBAAgB,GAAG;EAC3B,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,OAAO;EACjB,UAAU,EAAE;AACd,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;;ACxK1B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;AAChC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;AAE9B,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM;EAAC;AAAc,CAAC,GAAG,OAAO,CAAC,yBAAyB,CAAC;;AAE3D;AACA;AACA;AACA,MAAM,SAAS,SAAS,MAAM,CAAC,YAAY,CAAC;EAC1C,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAC1B;MACE,IAAI,EAAE,YAAY;MAClB,WAAW,EAAE;IACf,CAAC,EACD,OACF,CAAC;IAED,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;EAC/B;EAEA,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE;IACpB,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;MACtD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE;QAAC,MAAM,EAAE;MAAI,CAAC,CAAC;IACnD,CAAC,MAAM;MACL;MACA,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC/C;QACA,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;MAC7B;MACA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC;EACF;EAEA,MAAM,QAAQ,CAAA,EAAG;IACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;IACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;EACrB;;EAEA;EACA;EACA,IAAI,CAAC,IAAI,EAAE;IACT,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;EAC/B;EAEA,WAAW,CAAC,QAAQ,EAAE;IACpB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;EAC1C;EAEA,KAAK,CAAA,EAAG;IACN,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;EAC5B;EAEA,MAAM,CAAA,EAAG;IACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;EAC7B;EAEA,QAAQ,CAAA,EAAG;IACT,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;EAC/B;EAEA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IACzB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;EAC/C;EAEA,MAAM,CAAC,WAAW,EAAE;IAClB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;EACxC;EAEA,OAAO,CAAC,KAAK,EAAE;IACb,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;EACnC;EAEA,IAAI,CAAC,MAAM,EAAE;IACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;EACjC;AACF;;AAEA;;AAEA,MAAM,CAAC,OAAO,GAAG;EACf;AACF,CAAC;;;;;;;ACtFD,MAAM,CAAC,OAAO,GAAG;EACf,CAAC,EAAE;IAAC,CAAC,EAAE;EAAS,CAAC;EACjB,CAAC,EAAE;IAAC,CAAC,EAAE;EAAG,CAAC;EACX,CAAC,EAAE;IAAC,CAAC,EAAE;EAAM,CAAC;EACd,CAAC,EAAE;IAAC,CAAC,EAAE;EAAO,CAAC;EACf,CAAC,EAAE;IAAC,CAAC,EAAE;EAAU,CAAC;EAClB,CAAC,EAAE;IAAC,CAAC,EAAE;EAAI,CAAC;EACZ,EAAE,EAAE;IAAC,CAAC,EAAE;EAAO,CAAC;EAChB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAU,CAAC;EACnB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAO,CAAC;EAChB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAS,CAAC;EAClB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAU,CAAC;EACnB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAU,CAAC;EACnB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAO,CAAC;EAChB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAQ,CAAC;EACjB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAY,CAAC;EACrB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAe,CAAC;EACxB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAM,CAAC;EACf,EAAE,EAAE;IAAC,CAAC,EAAE;EAAS,CAAC;EAClB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAe,CAAC;EAExB,EAAE,EAAE;IACF,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,qBAAqB;IAC9B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,qBAAqB;IAC9B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IAAC,OAAO,EAAE,SAAS;IAAE,OAAO,EAAE,QAAQ;IAAE,OAAO,EAAE,QAAQ;IAAE,OAAO,EAAE;EAAU,CAAC;EACnF,EAAE,EAAE;IACF,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,gBAAgB;IACzB,OAAO,EAAE,gBAAgB;IACzB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,sBAAsB;IAC/B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE;EACX,CAAC;EAED,EAAE,EAAE;IAAC,CAAC,EAAE;EAAgB,CAAC;EACzB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAqB,CAAC;EAC9B,EAAE,EAAE;IAAC,CAAC,EAAE;EAAsB,CAAC;EAC/B,EAAE,EAAE;IAAC,CAAC,EAAE;EAA2B,CAAC;EACpC,EAAE,EAAE;IAAC,CAAC,EAAE;EAAO,CAAC;EAChB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAW,CAAC;EACpB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAQ,CAAC;EACjB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAU,CAAC;EACnB,EAAE,EAAE;IAAC,CAAC,EAAE;EAAG,CAAC;EAEZ,EAAE,EAAE;IACF,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,qBAAqB;IAC9B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,qBAAqB;IAC9B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,sBAAsB;IAC/B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE;EACX,CAAC;EACD,EAAE,EAAE;IACF,OAAO,EAAE,qBAAqB;IAC9B,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE;EACX,CAAC;EAED,EAAE,EAAE;IAAC,OAAO,EAAE;EAAI,CAAC;EACnB,EAAE,EAAE;IAAC,OAAO,EAAE;EAAO,CAAC;EACtB,EAAE,EAAE;IAAC,OAAO,EAAE;EAAQ,CAAC;EACvB,EAAE,EAAE;IAAC,OAAO,EAAE;EAAW,CAAC;EAC1B,EAAE,EAAE;IAAC,OAAO,EAAE;EAAK,CAAC;EACpB,EAAE,EAAE;IAAC,OAAO,EAAE;EAAQ,CAAC;EACvB,EAAE,EAAE;IAAC,OAAO,EAAE;EAAQ,CAAC;EACvB,EAAE,EAAE;IAAC,OAAO,EAAE;EAAU,CAAC;EAEzB,EAAE,EAAE;IAAC,OAAO,EAAE;EAAQ;AACxB,CAAC;;;ACxJD,YAAY;;AAEZ,MAAM,CAAC,OAAO,GAAG;EACf,cAAc,EACZ,oFAAoF;EACtF,SAAS,EAAE,+EAA+E;EAC1F,SAAS,EAAE,+EAA+E;EAC1F,aAAa,EACX,mFAAmF;EACrF,MAAM,EAAE,4EAA4E;EACpF,KAAK,EAAE,2EAA2E;EAClF,SAAS,EAAE,+EAA+E;EAC1F,KAAK,EAAE,2EAA2E;EAClF,cAAc,EACZ,uFAAuF;EACzF,kBAAkB,EAChB,yFAAyF;EAC3F,QAAQ,EAAE,8EAA8E;EACxF,UAAU,EAAE,gFAAgF;EAC5F,KAAK,EAAE;AACT,CAAC;;;;;ACpBD,MAAM,QAAQ,GAAG,OAAO,CAAC,uBAAuB,CAAC;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,wBAAwB,CAAC;;AAEnD;AACA;;AAEA;AACA,MAAM,SAAS,CAAC;EACd;;EAEA;EACA;EACA,OAAO,CAAA,CAAC;EAAA,EAAsB;IAC5B;EAAA;EAGF,MAAM,CAAA,CAAC;EAAA,EAAwB;IAC7B;EAAA;EAGF,SAAS,CAAC,IAAI,EAAE;IACd;EAAA;EAGF,SAAS,CAAC,IAAI,EAAE;IACd;EAAA;EAGF,UAAU,CAAC,IAAI,EAAE;IACf;EAAA;EAGF,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB;EAAA;;EAGF;EACA,KAAK,CAAA,EAAG;IACN;IACA,IAAI,CAAC,KAAK,GAAG,IAAI;;IAEjB;IACA,IAAI,IAAI,CAAC,GAAG,EAAE;MACZ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI;QACvC,IAAI,KAAK,YAAY,SAAS,EAAE;UAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;QACf,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;UACtB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB;MACF,CAAC,CAAC;IACJ;EACF;EAEA,UAAU,CAAC,GAAG,EAAE;IACd;IACA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;EACnD;EAEA,MAAM,KAAK,CAAC,SAAS,EAAE;IACrB,WAAW,MAAM,MAAM,IAAI,SAAS,EAAE;MACpC,KAAK,MAAM;QAAC,SAAS;QAAE;MAAK,CAAC,IAAI,MAAM,EAAE;QACvC,IAAI,SAAS,KAAK,SAAS,EAAE;UAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB,CAAC,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE;UAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB,CAAC,MAAM,IAAI,SAAS,KAAK,UAAU,EAAE;UACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,IAAI,CAAC,KAAK;UACnB;QACF;MACF;IACF;IACA,OAAO,IAAI,CAAC,KAAK;EACnB;EAEA,MAAM,WAAW,CAAC,MAAM,EAAE;IACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;EACrC;EAEA,IAAI,GAAG,CAAA,EAAG;IACR;IACA;IACA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;EAC/B;EAEA,KAAK,CAAC,KAAK,EAAE;IACX,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAC7B,OAAO,SAAS,CAAC,GAAG;EACtB;;EAEA;EACA;EACA,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,EAAkB;IAAA,IAAhB,MAAM,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,KAAK;IAC5C,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,IAAI,MAAM,EAAE;QACV,OAAO,IAAI;MACb;IACF,CAAC,MAAM,IAAI,MAAM,IAAI,KAAK,KAAK,IAAI,EAAE;MACnC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzB;IACA,OAAO,SAAS;EAClB;EAEA,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAkB;IAAA,IAAhB,MAAM,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,KAAK;IAClD,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;EACnD;EAEA,OAAO,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE;IAC/B,OAAO,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI;EACzC;EAEA,OAAO,eAAe,CAAC,KAAK,EAAE,IAAI,EAAkB;IAAA,IAAhB,MAAM,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,KAAK;IAChD,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,IAAI,MAAM,EAAE;QACV,OAAO,IAAI;MACb;IACF,CAAC,MAAM,IAAI,MAAM,IAAI,KAAK,KAAK,IAAI,EAAE;MACnC,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG;IAC1B;IACA,OAAO,SAAS;EAClB;EAEA,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE;IAC7B,OAAO,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG;EACjD;EAEA,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,EAAkB;IAAA,IAAhB,MAAM,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,KAAK;IAC/C,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;EACnD;EAEA,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE;IAC5B,OAAO,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;EACvD;EAEA,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAkB;IAAA,IAAhB,MAAM,GAAA,SAAA,CAAA,MAAA,QAAA,SAAA,QAAA,SAAA,GAAA,SAAA,MAAG,KAAK;IACjD,OAAO,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;EACnD;EAEA,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE;IAC9B,OAAO,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;EACrD;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;AChJ1B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;AAEpD,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB;IACA;IACA;IACA;IACA,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE;MAChC,IAAI,EAAE,KAAK,CAAC,IAAI;MAChB,YAAY,EAAE,KAAK,CAAC;IACtB,CAAC,CAAC;IACF,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,aAAa;QAChB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;QACvC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY;QACvD,IAAI,CAAC,WAAW,GAAG,EAAE;QACrB,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;EAC7B;EAEA,UAAU,CAAA,EAAG;IACX,IAAI,CAAC,KAAK,GAAG;MACX,IAAI,EAAE,IAAI,CAAC,WAAW;MACtB,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE;MAC1C,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAClE;IACA,OAAO,KAAK;EACd;AACF;AAEA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B,IAAI;IACF,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxB,OAAO,IAAI;EACb,CAAC,CAAC,OAAO,GAAG,EAAE;IACZ,OAAO,KAAK;EACd;AACF;AAEA,SAAS,aAAa,CAAC,UAAU,EAAE;EACjC,MAAM,MAAM,GAAG,EAAE;EACjB,IAAI,YAAY,GAAG,KAAK;EACxB,IAAI,IAAI,GAAG,EAAE;EACb,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;IACpC,IAAI,CAAC,IAAI,EAAE;MACT;IACF;IACA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM;IAE9C,IAAI,CAAC,MAAM,EAAE;MACX,IAAI,YAAY,EAAE;QAChB,IAAI,IAAK,GAAE,IAAK,GAAE;MACpB,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;MACnB;MACA;IACF;IACA,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC;IAEnC,IAAI,CAAC,YAAY,IAAI,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;MACrD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC,MAAM,IAAI,YAAY,IAAI,CAAC,UAAU,EAAE;MACtC,YAAY,GAAG,KAAK;MACpB,IAAI,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;MAC1B;MACA,IAAI,GAAG,EAAE;IACX,CAAC,MAAM;MACL,YAAY,GAAG,IAAI;MACnB,IAAI,IAAK,GAAE,IAAK,GAAE;IACpB;EACF,CAAC,CAAC;EACF,OAAO,MAAM;AACf;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;AC1FlC,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;MAC1B,OAAO,EAAE,KAAK,CAAC,EAAE;MACjB,IAAI,EAAE,KAAK,CAAC,IAAI;MAChB,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,MAAM,EAAE,KAAK,CAAC;IAChB,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;MACzB,IAAI,CAAC,KAAK,GAAG;QACX,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC3C,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACzC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;QAC5B,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;MAC7B,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;ACjC/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,2BAA2B,SAAS,SAAS,CAAC;EAClD,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;MAC3B,MAAM,EAAE,MAAM;MACd,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG;IAC7C,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;MAC1B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;MACf,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,2BAA2B;;;;;ACzB5C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,wBAAwB,SAAS,SAAS,CAAC;EAC/C,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE;MAC/B,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,SAAS;MACxC,mBAAmB,EAAE,MAAM;MAC3B,aAAa,EAAE;IACjB,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;MAC9B,IAAI,CAAC,KAAK,GAAG;QACX,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK;MACzC,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,wBAAwB;;;;;AC5BzC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,MAAM,UAAU,GAAG;MACjB,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;MACrB,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;MACrB,WAAW,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK;MACjC,YAAY,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK;MACnC,UAAU,EAAE,KAAK,CAAC,UAAU;MAC5B,SAAS,EAAE,KAAK,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE;MACtD,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;IAC1C;IACA,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC;EAChD;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE;MAChC,MAAM,KAAK,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAE;MAC/B,MAAM,IAAI,GAAG,SAAA,CAAS,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QACvC,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,GAAI,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAI,IAAI;QAC5D,IAAI,CAAC,KAAK,SAAS,EAAE;UACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACjB;MACF,CAAC;MACD,MAAM,IAAI,GAAG,SAAA,CAAS,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QACvC,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,GAAI,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAI,IAAI;QAC1E,IAAI,CAAC,KAAK,SAAS,EAAE;UACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACjB;MACF,CAAC;MACD,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;MACrC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;MACrC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;MACjD,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC;MACnD,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC;MACzD,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC;MACvD,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC;MACzD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;ACpDlC,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAE9C,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;AACpD,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;AACxD,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;AAC3C,MAAM,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC1D,MAAM,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC;AACtE,MAAM,2BAA2B,GAAG,OAAO,CAAC,kCAAkC,CAAC;AAE/E,MAAM,aAAa,SAAS,SAAS,CAAC;EACpC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,WAAW;MACpD,UAAU,EAAE,IAAI,uBAAuB,CAAC,CAAC;MACzC,SAAS,EAAE,IAAI,SAAS,CAAC;QACvB,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,IAAI,iBAAiB,CAAC;MACpC,CAAC,CAAC;MACF,MAAM,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,QAAQ;QAAE,KAAK,EAAE,KAAK;QAAE,UAAU,EAAE,IAAI,UAAU,CAAC;MAAC,CAAC,CAAC;MAClF,YAAY,EAAE,IAAI,SAAS,CAAC;QAC1B,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,IAAI,gBAAgB,CAAC;MACnC,CAAC,CAAC;MACF,MAAM,EAAE,IAAI,2BAA2B,CAAC;IAC1C,CAAC;EACH;EAEA,OAAO,CAAC,KAAK,EAAE;IACb,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU;;IAE/B;IACA,MAAM,UAAU,GAAG,EAAE;IACrB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;MAC5B,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE;QAChD,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI;UACzD,MAAM,mBAAmB,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;UAChD,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,CAAE,IAAG,KAAK,CAAC,IAAK,MAAK,mBAAmB,CAAC,CAAC,CAAE,KAAI,mBAAmB,CAAC,CAAC,CAAE,EAAC,CAAC;YACjF,YAAY,EAAE;UAChB,CAAC;UACD,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;QAC9B,CAAC,CAAC;MACJ;MAEA,IACE,KAAK,CAAC,SAAS,KACd,KAAK,CAAC,SAAS,CAAC,cAAc,IAAI,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,EACrE;QACA,MAAM,MAAM,GAAG,EAAE;QAEjB,IAAI,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE;UACrC,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC;UAClE,MAAM,CAAC,IAAI,CAAE,IAAG,KAAK,CAAC,IAAK,MAAK,aAAa,CAAC,CAAC,CAAE,KAAI,aAAa,CAAC,CAAC,CAAE,EAAC,CAAC;QAC1E;QAEA,IAAI,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE;UAClC,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;UAC5D,MAAM,CAAC,IAAI,CAAE,IAAG,KAAK,CAAC,IAAK,MAAK,UAAU,CAAC,CAAC,CAAE,KAAI,UAAU,CAAC,CAAC,CAAE,EAAC,CAAC;QACpE;QAEA,MAAM,WAAW,GAAG;UAClB,IAAI,EAAE,oBAAoB;UAC1B,MAAM;UACN,YAAY,EAAE;QAChB,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;MAC9B;MACA,KAAK,EAAE;IACT,CAAC,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,EAAE;MACrB,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;IAC5D;IAEA,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK;MACzC;MACA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC;EACJ;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAEjE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IACjD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;IAC3D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC;IAEvD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,UAAU;QACb,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,UAAU;QACb,IAAI,CAAC,KAAK,GAAG;UACX,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK;UAC7B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;UAC3C,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK;UAC/B,cAAc,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE;UAC/B,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK;QACvD;QAEA,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,KAAK,EAAE;IACf,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;MAC3D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;MACjB,OAAO,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC,CAAC;;IAEN;IACA,MAAM,UAAU,GAAG,EAAE;IACrB,IAAI,SAAS;IACb,IAAI,KAAK,GAAG,CAAC;IAEb,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,IAAI;MACpC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;MAC3B,IAAI,CAAC,GAAG,EAAE;QACR;MACF;MACA;MACA;MACA,SAAS,GAAG,KAAK,CAAC,aAAa,CAAE,MAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAE,EAAC,CAAC;MAChF;MACA;MACA;MACA;MACA;MACA,IAAI,SAAS,EAAE;QACb,SAAS,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;QAC3B,SAAS,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE;QACvB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;QAC7B,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS;MACjC;IACF,CAAC,CAAC;;IAEF;IACA,MAAM,YAAY,GAAG,EAAE;IACvB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,IAAI;MACxC,IAAI,WAAW,CAAC,IAAI,KAAK,kBAAkB,EAAE;QAC3C,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC;QAChD,IAAI,SAAS,EAAE;UACb,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YACxB,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;UAC1B;UACA,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;UACtD,SAAS,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,GACxD,GAAE,SAAS,CAAC,SAAS,CAAC,SAAU,KAAI,KAAK,CAAC,UAAW,EAAC,GACvD,KAAK,CAAC,UAAU;QACtB;MACF,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,KAAK,oBAAoB,EAAE;QACpD,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC;QAChD,IAAI,SAAS,EAAE;UACb,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YACxB,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;UAC1B;UAEA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;UAEhD,MAAM,WAAW,GAAG,KAAK;UAEzB,MAAM,aAAa,GAAG,aAAa;UACnC,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC;UAExD,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,EAAE;YAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC;YAChC,SAAS,CAAC,SAAS,CAAC,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;UACrE;UAEA,MAAM,gBAAgB,GAAG,mBAAmB;UAC5C,MAAM,kBAAkB,GAAG,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC;UAE9D,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,EAAE;YACnD,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC;YACnC,SAAS,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;UACxE;QACF;MACF,CAAC,MAAM;QACL,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;MAChC;IACF,CAAC,CAAC;IACF,KAAK,CAAC,YAAY,GAAG,YAAY;;IAEjC;IACA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK;MAChC,KAAK,CAAC,KAAK,GAAG,CAAC;IACjB,CAAC,CAAC;EACJ;AACF;AAEA,aAAa,CAAC,mBAAmB,GAAG;EAClC,KAAK,EAAE,2DAA2D;EAClE,SAAS,EAAE,qEAAqE;EAChF,UAAU,EAAE,6DAA6D;EACzE,cAAc,EAAE,KAAK;EACrB,WAAW,EAAE;AACf,CAAC;AACD,aAAa,CAAC,aAAa,GAAG;EAC5B,WAAW,EAAE,IAAI,WAAW,CAAC;IAC3B,GAAG,EAAE,aAAa;IAClB,CAAC,EAAE;MAAC,OAAO,EAAE,IAAI;MAAE,UAAU,EAAE,CAAC;MAAE,YAAY,EAAE,CAAC;MAAE,QAAQ,EAAE;IAAI;EACnE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,aAAa;;;;;AC9P9B,MAAM,aAAa,GAAG,OAAO,CAAC,4BAA4B,CAAC;AAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,YAAY,GAAI,MAAM,CAAC,OAAO,GAAG,UAAS,KAAK,EAAE;EACrD,IAAI,CAAC,KAAK,GAAG,KAAK;AACpB,CAAE;AAEF,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE;EACtC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,GAAG;EACZ,CAAC;EAED,IAAI,aAAa,CAAA,EAAG;IAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;MACxB,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,CAAC;IAC3C;IACA,OAAO,IAAI,CAAC,cAAc;EAC5B,CAAC;EAED,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK;IAE3B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;MAC5B,GAAG,EAAE,KAAK,CAAC,GAAG;MACd,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC1B,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;MAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;QAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;MAC5C,CAAC,CAAC;IACJ;IACA,SAAS,CAAC,SAAS,CAAC,CAAC;IACrB,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB,CAAC;EAED,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,SAAS;QACZ,IAAI,CAAC,KAAK,GAAG;UACX,IAAI,EAAE,MAAM;UACZ,IAAI,EAAE;YACJ,KAAK,EAAE;UACT,CAAC;UACD,GAAG,IAAI,CAAC;QACV,CAAC;QACD,OAAO,IAAI;MACb,KAAK,GAAG;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF,CAAC;EACD,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF,CAAC;EACD,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,SAAS;QACZ,OAAO,KAAK;MACd,KAAK,GAAG;QACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,SAAS;QACvB,OAAO,IAAI;MACb;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAC9B;QACA,OAAO,IAAI;IACf;EACF;AACF,CAAC,CAAC;;;;;ACxGF,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AACtD,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAE/C,MAAM,aAAa,GAAI,MAAM,CAAC,OAAO,GAAG,YAAW;EACjD,IAAI,CAAC,GAAG,GAAG;IACT,OAAO,EAAE,IAAI,YAAY,CAAC;EAC5B,CAAC;AACH,CAAE;AAEF,KAAK,CAAC,QAAQ,CACZ,aAAa,EACb,SAAS,EACT;EACE,mBAAmB,EAAE;IACnB,KAAK,EAAE;EACT;AACF,CAAC,EACD;EACE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK;IAC3B,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC;;IAEjE;IACA;IACA,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC;IAC5C,SAAS,CAAC,SAAS,CAAC,CAAC;;IAErB;IACA,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;IACjC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI;MAChC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;IAC7C,CAAC,CAAC;IACF,SAAS,CAAC,SAAS,CAAC,CAAC;IACrB,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB,CAAC;EAED,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,aAAa;QAChB,IAAI,CAAC,KAAK,GAAG;UACX,QAAQ,EAAE;QACZ,CAAC;QACD,OAAO,IAAI;MACb,KAAK,SAAS;QACZ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF,CAAC;EACD,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF,CAAC;EACD,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,aAAa;QAChB,OAAO,KAAK;MACd,KAAK,SAAS;QACZ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,SAAS;QACvB,OAAO,IAAI;MACb;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAC9B;QACA,OAAO,IAAI;IACf;EACF;AACF,CACF,CAAC;;;;;ACjFD,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAM,gBAAgB,SAAS,SAAS,CAAC;EACvC,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,MAAM,GAAG,KAAK;EACrB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG;EACvC;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;IAC7B,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;MACrB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,iBAAiB,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;MAC9D,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;QAC3B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,gBAAgB;;;;;ACtCjC,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAM,kBAAkB,SAAS,SAAS,CAAC;EACzC,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,MAAM,GAAG,KAAK;EACrB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG;EACvC;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC;EAC3C;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,IAAI,GAAG,EAAE;QACd,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,IAAI,GAAG,IAAI;EAClB;EAEA,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,kBAAkB;;;;;ACnCnC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,UAAU;EACnB;EAEA,aAAa,CAAC,MAAM,EAAE;IACpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IACjC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAChC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC/C,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;EACrC;EAEA,cAAc,CAAC,GAAG,EAAE;IAClB,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,EAAE;IACb,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;IACf,MAAM,EAAE,GAAG,EAAE;IACb,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;EACrC;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GACrB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAChC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC;IAEzC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACvD;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,IAAI,GAAG,EAAE;QACd,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,IAAI,GAAG,IAAI;EAClB;EAEA,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;AC3D/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACpD,MAAM,kBAAkB,GAAG,OAAO,CAAC,8BAA8B,CAAC;AAClE,MAAM,gBAAgB,GAAG,OAAO,CAAC,4BAA4B,CAAC;AAE9D,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;AAE1D,MAAM,kBAAkB,SAAS,SAAS,CAAC;EACzC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,GAAG,GAAG;MACT,UAAU,EAAE,IAAI,cAAc,CAAC,CAAC;MAChC,UAAU,EAAE,IAAI,kBAAkB,CAAC;QAAC,GAAG,EAAE;MAAU,CAAC,CAAC;MACrD,YAAY,EAAE,IAAI,kBAAkB,CAAC;QAAC,GAAG,EAAE;MAAY,CAAC,CAAC;MACzD,iBAAiB,EAAE,IAAI,gBAAgB,CAAC;QAAC,GAAG,EAAE;MAAiB,CAAC,CAAC;MACjE,iBAAiB,EAAE,IAAI,gBAAgB,CAAC;QAAC,GAAG,EAAE;MAAiB,CAAC;IAClE,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,MAAM;MAAC,UAAU;MAAE;IAAM,CAAC,GAAG,KAAK,CAAC,IAAI;IACvC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAAC,UAAU,EAAE;IAAM,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC;IACpE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC;IACpE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC;IAC7D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;IAC3D,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9D,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG;UACX,MAAM,EAAE,EAAE;UACV,UAAU,EAAE,CAAC,CAAC;UACd,MAAM,EAAE;QACV,CAAC;QACD;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,cAAc,CAAC,CAAC;QACrB,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;EAEA,cAAc,CAAA,EAAG;IACf,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B,CAAC,CAAC,EACF,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,EACjC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAC9B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;IACxC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI;IAC7C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI;IACxD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI;EAC9D;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,kBAAkB;;;;;AC9FnC,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;;AAElD;AACA;AACA,MAAM,aAAa,SAAS,SAAS,CAAC;EACpC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,GAAG,GAAG;MACT,SAAS,EAAE,IAAI,aAAa,CAAC;IAC/B,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,kBAAkB,CAAC;IAE9D,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE;MAAC,OAAO,EAAE;IAAM,CAAC,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;MAAC,OAAO,EAAE,MAAM;MAAE,IAAI,EAAE;IAAC,CAAC,CAAC;IACzD,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE;MAChC,EAAE,EAAE,aAAa;MACjB,SAAS,EAAE,aAAa;MACxB,OAAO,EAAE,GAAG;MACZ,IAAI,EAAE;IACR,CAAC,CAAC;IACF,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;MAAC,SAAS,EAAE;IAAO,CAAC,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;MAAC,eAAe,EAAE,GAAG;MAAE,eAAe,EAAE;IAAM,CAAC,CAAC;IAC7E,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;MACtC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC;IACpD,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG;UACX,QAAQ,EAAE;QACZ,CAAC;QACD;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI;MAC9B,IAAI,MAAM,CAAC,EAAE,EAAE;QACb,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;MAC1D,CAAC,MAAM;QACL,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;MAC1D;IACF,CAAC,CAAC;EACJ;AACF;AAEA,aAAa,CAAC,kBAAkB,GAAG;EACjC,SAAS,EAAE,+BAA+B;EAC1C,SAAS,EAAE,yCAAyC;EACpD,SAAS,EAAE;AACb,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,aAAa;;;;;AC1G9B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACtD,MAAM,kBAAkB,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAE7D,MAAM,aAAa,SAAS,SAAS,CAAC;EACpC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,GAAG,GAAG;MACT,WAAW,EAAE,IAAI,eAAe,CAAC,CAAC;MAClC,cAAc,EAAE,IAAI,kBAAkB,CAAC;IACzC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;IAC9B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE7E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;MAAC,MAAM,EAAE;IAAqB,CAAC,CAAC;IAC7D,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;MAAC,KAAK,EAAE,WAAW;MAAE,QAAQ,EAAE;IAAG,CAAC,CAAC;IACnE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;MAAC,eAAe,EAAE;IAAM,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAEjD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG;UACX,OAAO,EAAE;YACP,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa;UAC1C,CAAC;UACD,MAAM,EAAE,EAAE;UACV,MAAM,EAAE,EAAE;UACV,UAAU,EAAE,CAAC;QACf,CAAC;QACD;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK;QAC3F,IAAI,CAAC,KAAK,CAAC,UAAU,GACnB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,UAAU;QAC7E,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,MAAM;QAC3F,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,MAAM;QAC3F,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,aAAa,CAAC,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,MAAM;EACpD,EAAE,EAAG,WAAU,IAAI,GAAG,KAAM,EAAC;EAC7B,IAAI,EAAE,cAAc;EACpB,KAAK,EACH,iHAAiH;EACnH,SAAS,EAAE,qBAAqB;EAChC,WAAW,EAAE,WAAW;EACxB,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,aAAa;;;;;AC9F9B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,eAAe,SAAS,SAAS,CAAC;EACtC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;IACpC,OAAQ,GAAE,UAAU,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAE,GAAE,IAAK,EAAC;EAC5D;EAEA,qBAAqB,CAAC,KAAK,EAAE;IAC3B,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI;MAC5C,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC,CAAC;EACJ;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,MAAM,UAAU,GAAG;MACjB,KAAK,EAAE;IACT,CAAC;IACD,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE;MACvB,IAAI;QAAC;MAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO;MAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,KAAK,GAAG,KAAK,CACV,GAAG,CAAC,MAAM,IAAI;UACb,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC;QAC9C,CAAC,CAAC,CACD,IAAI,CAAC,GAAG,CAAC;MACd;MACA,IAAI,KAAK,EAAE;QACT,UAAU,CAAC,KAAK,GAAG,KAAK;MAC1B;IACF;IACA,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE;MAAC,KAAK,EAAE;IAAiB,CAAC,CAAC;IACrD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK;QACzD,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;;;AC/DhC,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;;AAEzC;AACA;;AAEA;AACA;AACA,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,cAAc,CAAC,IAAI,EAAE;IACnB,OAAO,CAAC,CAAC;EACX;EAEA,SAAS,CAAC,IAAI,EAAE;IACd;IACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;MACtC,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE;IACd;IACA,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B;IACA;IACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK;EACjC;EAEA,UAAU,CAAC,IAAI,EAAE;IACf;IACA,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IAEA,OAAO,IAAI,KAAK,IAAI,CAAC,GAAG;EAC1B;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;ACvD/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,oBAAoB,SAAS,SAAS,CAAC;EAC3C,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;MAAC,IAAI,EAAE,CAAC;MAAE,QAAQ,EAAE;IAAS,CAAC,CAAC;IAE/D,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC;IACvD,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;IACpD,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,SAAS,CAAC,SAAS,CAAC,CAAC;IACrB,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd;IACA,OAAO,IAAI,CAAC,IAAI,KAAK,cAAc;EACrC;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,OAAO,IAAI,KAAK,cAAc;EAChC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,oBAAoB;;;;;AC/BrC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,qBAAqB,SAAS,SAAS,CAAC;EAC5C,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;MAAC,IAAI,EAAE,KAAK,CAAC,MAAM;MAAE,QAAQ,EAAE;IAAO,CAAC,CAAC;IAExE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI;MACrB,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;IACvD,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;IACrB,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd;IACA,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe;EACtC;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,OAAO,IAAI,KAAK,eAAe;EACjC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,qBAAqB;;;;;AC3BtC,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC;AAErD,MAAM,oBAAoB,GAAG,OAAO,CAAC,2BAA2B,CAAC;AACjE,MAAM,oBAAoB,GAAG,OAAO,CAAC,6BAA6B,CAAC;AAEnE,MAAM,QAAQ,SAAS,SAAS,CAAC;EAC/B,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,OAAO,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAS,CAAC,CAAC;MAC1C,OAAO,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAS,CAAC,CAAC;MAC1C,YAAY,EAAE,IAAI,oBAAoB,CAAC,CAAC;MACxC,YAAY,EAAE,IAAI,oBAAoB,CAAC;IACzC,CAAC;EACH;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAE7C,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAAC;IAE9D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAE,iBAAiB,CAAC;IAC/D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;IAEnD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IAEjD,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC;IACvD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;IACnD,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,EAAE,OAAO,CAAC;IAC3D,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC;IAEtD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,YAAY;QACf,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;UAC3B,OAAO,IAAI;QACb;;QAEA;QACA,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,YAAY;QACf,IAAI,CAAC,KAAK,GAAG;UACX,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK;UACvC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK;UAC/B,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,QAAQ,CAAC,UAAU,GAAG,UAAS,EAAE,EAAE;EACjC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AACnD,CAAC;AAED,QAAQ,CAAC,SAAS,GAAG;EAAC,UAAU,EAAE;AAAgB,CAAC;AAEnD,QAAQ,CAAC,mBAAmB,GAAG;EAC7B,KAAK,EAAE,2EAA2E;EAClF,UAAU,EAAE;AACd,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ;;;;;ACnGzB,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA;AACA,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAE7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,mBAAmB,CAAC;IAElE,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,MAAM,IAAI;MACpC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;UACzB,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI;UAC3B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;YAAC,SAAS,EAAE,SAAS;YAAE,WAAW,EAAG,SAAQ,SAAU;UAAC,CAAC,CAAC;QAC1F;MACF;IACF,CAAC,CAAC;IAEF,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;MAC5B,SAAS,EAAE,MAAM;MACjB,WAAW,EAAE;IACf,CAAC,CAAC;IACF,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;MAAC,SAAS,EAAE,KAAK;MAAE,WAAW,EAAE;IAAiB,CAAC,CAAC;IAEjF,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;MAC7B,QAAQ,EAAE,kBAAkB;MAC5B,WAAW,EAAE;IACf,CAAC,CAAC;IAEF,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI;MACpC,MAAM,IAAI,GAAI,uBAAsB,SAAS,CAAC,EAAG,MAAK;MACtD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;QAC7B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE;MACf,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;MAC7B,QAAQ,EAAE,sBAAsB;MAChC,WAAW,EAAE;IACf,CAAC,CAAC;IACF,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;MAC7B,QAAQ,EAAE,gBAAgB;MAC1B,WAAW,EAAE;IACf,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK;IACzE,IAAI,gBAAgB,EAAE;MACpB,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;QAC7B,QAAQ,EAAE,uBAAuB;QACjC,WAAW,EACT;MACJ,CAAC,CAAC;IACJ;IAEA,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;QAC5B,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;UAC7B,QAAQ,EAAG,cAAa,KAAK,CAAC,MAAO,EAAC;UACtC,WAAW,EAAE;QACf,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,IAAI,KAAK,CAAC,QAAQ,EAAE;MAClB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI;QAChC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;UAC7B,QAAQ,EAAG,gBAAe,OAAO,CAAC,IAAK,MAAK;UAC5C,WAAW,EAAE;QACf,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,IAAI,KAAK,CAAC,WAAW,EAAE;MACrB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;QAC5B,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE;MACf,CAAC,CAAC;MAEF,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,IAAA,IAAmB;QAAA,IAAlB;UAAC;QAAW,CAAC,GAAA,IAAA;QACtC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;UAC7B,QAAQ,EAAG,OAAM,WAAY,MAAK;UAClC,WAAW,EAAE;QACf,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;MAC7B,QAAQ,EAAE,oBAAoB;MAC9B,WAAW,EAAE;IACf,CAAC,CAAC;IACF,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;MAC7B,QAAQ,EAAE,mBAAmB;MAC7B,WAAW,EAAE;IACf,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAA,EAAG;IACV,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,iBAAiB,CAAC,mBAAmB,GAAG;EACtC,KAAK,EAAE;AACT,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;ACvHlC,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,sBAAsB,CAAC;AACjD,MAAM,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC;AACrD,MAAM,YAAY,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAEvD,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,YAAY,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAY,CAAC,CAAC;MAClD,UAAU,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAU,CAAC,CAAC;MAC9C,YAAY,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAY,CAAC,CAAC;MAClD,gBAAgB,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAgB,CAAC,CAAC;MAC1D,eAAe,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAe,CAAC,CAAC;MACxD,aAAa,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAa,CAAC,CAAC;MACpD,aAAa,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAa,CAAC,CAAC;MACpD,aAAa,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAa,CAAC,CAAC;MACpD,mBAAmB,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAmB,CAAC,CAAC;MAChE,gBAAgB,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,gBAAgB;QAAE,MAAM,EAAE,SAAS,CAAC;MAAU,CAAC,CAAC;MACtF,aAAa,EAAE,IAAI,YAAY,CAAC;QAAC,GAAG,EAAE;MAAa,CAAC,CAAC;MACrD,YAAY,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAY,CAAC,CAAC;MAClD,kBAAkB,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAkB,CAAC,CAAC;MAC9D,gBAAgB,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAgB,CAAC,CAAC;MAC1D,iBAAiB,EAAE,IAAI,SAAS,CAAC;QAC/B,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,SAAS,CAAC,SAAS;QAC1B,MAAM,EAAE,SAAS,CAAC;MACpB,CAAC,CAAC;MACF,kBAAkB,EAAE,IAAI,SAAS,CAAC;QAChC,GAAG,EAAE,kBAAkB;QACvB,KAAK,EAAE,SAAS,CAAC,SAAS;QAC1B,MAAM,EAAE,SAAS,CAAC;MACpB,CAAC;IACH,CAAC;EACH;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAE7C,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,CAAC,wBAAwB,CAAC;IAE3E,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;IAC/D,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC;IACrE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;IAC/D,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC;IACnE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;IAC/D,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IAC5D,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;IAE9D,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,mBAAmB;MACxB,KAAK,gBAAgB;QACnB,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;UAC3B,OAAO,IAAI;QACb;QACA,MAAM,IAAI,KAAK,CAAE,qCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,EAAC,CAAC;IAChF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,mBAAmB;MACxB,KAAK,gBAAgB;QACnB,IAAI,CAAC,KAAK,GAAG;UACX,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK;UACrC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK;UACjC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK;UACrC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK;UAC7C,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK;UAC3C,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK;UACvC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK;UACvC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK;UACvC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK;UACnD,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK;UAC7C,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK;UACvC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,KAAK;UACjD,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK;UAC7C,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK;UAC1C,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,KAAK;MACd;QACE,MAAM,IAAI,KAAK,CAAE,sCAAqC,IAAK,EAAC,CAAC;IACjE;EACF;AACF;AAEA,SAAS,CAAC,UAAU,GAAG,UAAS,EAAE,EAAE;EAClC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AACjD,CAAC;AACD,SAAS,CAAC,SAAS,GAAG;EAAC,UAAU,EAAE;AAAgB,CAAC;AAEpD,SAAS,CAAC,wBAAwB,GAAG;EACnC,UAAU,EAAE,yEAAyE;EACrF,UAAU,EAAE,kCAAkC;EAC9C,eAAe,EAAE,2BAA2B;EAC5C,gBAAgB,EAAE,8BAA8B;EAChD,WAAW,EAAE;AACf,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;ACvI1B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC;EAC3C;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,cAAc;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU;QAC5B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;ACxBlC,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAEzD,MAAM,kBAAkB,SAAS,SAAS,CAAC;EACzC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,YAAY,EAAE,IAAI,iBAAiB,CAAC;IACtC,CAAC;EACH;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO;IAC7B,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAC,wBAAwB,CAAC;IAEhF,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI;MAC5B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;IACvD,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,eAAe;QAClB,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;UAC3B,OAAO,IAAI;QACb;QACA,MAAM,IAAI,KAAK,CAAE,qCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,EAAC,CAAC;IAChF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,eAAe;QAClB,OAAO,KAAK;MACd;QACE,MAAM,IAAI,KAAK,CAAE,sCAAqC,IAAK,EAAC,CAAC;IACjE;EACF;AACF;AAEA,kBAAkB,CAAC,wBAAwB,GAAG;EAC5C,KAAK,EAAE;AACT,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,kBAAkB;;;;;ACxEnC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,mBAAmB,SAAS,SAAS,CAAC;EAC1C,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG;UACX,KAAK,EAAE;YACL,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI;UACpC;QACF,CAAC;QACD;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE;IAC/B,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;MACtB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;MACnC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC;MACjE,IAAI,KAAK,EAAE;QACT,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QACxC,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;MAC/B;IACF;IACA,OAAO,SAAS;EAClB;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,mBAAmB;;;;;AC/CpC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAM,aAAa,SAAS,SAAS,CAAC;EACpC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,QAAQ,EAAE,IAAI,SAAS,CAAC;IAC1B,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAE5B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;;IAE3C;IACA,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC/B,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;IAChC,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ;MAEF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK;QACrC,OAAO,KAAK;MAEd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,aAAa;;;;;ACtE9B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,SAAS,EAAE,qEAAqE;MAChF,SAAS,EAAE,KAAK,CAAC,GAAG;MACpB,MAAM,EAAE;IACV,CAAC,CAAC;IACF;EACF;;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS;QAChC,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;ACzC1B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,aAAa,SAAS,SAAS,CAAC;EACpC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEA,MAAM,CAAC,SAAS,EAAE;IAChB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE;MAC/B,cAAc,EAAE;IAClB,CAAC,CAAC;IACF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,aAAa;;;;;ACrC9B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACtD,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAE9C,MAAM,UAAU,SAAS,SAAS,CAAC;EACjC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,cAAc,EAAE,IAAI,eAAe,CAAC,CAAC;MACrC,UAAU,EAAE,IAAI,WAAW,CAAC;IAC9B,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,EAAE,EAAE,KAAK,CAAC,KAAK;MACf,IAAI,EAAG,WAAU,KAAK,CAAC,KAAM;IAC/B,CAAC,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IACjD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAC7C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK;QAC3C,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,UAAU;;;;;ACnE3B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAEvD,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;IACtB,IAAI,CAAC,GAAG,GAAG;MACT,SAAS,EAAE,IAAI,YAAY,CAAC;QAAC,GAAG,EAAE,SAAS;QAAE,IAAI,EAAE;MAAI,CAAC,CAAC;MACzD,YAAY,EAAE,IAAI,YAAY,CAAC;QAAC,GAAG,EAAE,YAAY;QAAE,IAAI,EAAE;MAAI,CAAC,CAAC;MAC/D,SAAS,EAAE,IAAI,YAAY,CAAC;QAAC,GAAG,EAAE,SAAS;QAAE,IAAI,EAAE;MAAI,CAAC,CAAC;MACzD,YAAY,EAAE,IAAI,YAAY,CAAC;QAAC,GAAG,EAAE,YAAY;QAAE,IAAI,EAAE;MAAI,CAAC;IAChE,CAAC;EACH;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAE5B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;IAE5D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;IAE5D,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK;UACpC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK;UAC1C,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK;UACpC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;AC5ElC,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;AACpD,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,kBAAkB,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAC7D,MAAM,kBAAkB,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAE7D,SAAS,aAAa,CAAC,KAAK,EAAE;EAC5B,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK;EAE1F,OAAO,KAAK,CAAC,EAAE,GAAG,mBAAmB,GAAG,mBAAmB;AAC7D;AAEA,MAAM,YAAY,SAAS,SAAS,CAAC;EACnC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,mBAAmB,EAAE,IAAI,kBAAkB,CAAC,CAAC;MAC7C,mBAAmB,EAAE,IAAI,kBAAkB,CAAC;IAC9C,CAAC;EACH;EAEA,OAAO,CAAC,KAAK,EAAE;IACb,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;MACrC,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC;MACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;MACxC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QAAC;MAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;EACJ;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,UAAU;EACnB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,kBAAkB,CAAC;IAE7D,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI;MAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;MACxC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;IAChC,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG;UACX,OAAO,EAAE;QACX,CAAC;QACD;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI;MAC9B,IAAI,MAAM,CAAC,EAAE,EAAE;QACb,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;MAC1D,CAAC,MAAM;QACL,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;MAC1D;IACF,CAAC,CAAC;EACJ;AACF;AAEA,YAAY,CAAC,kBAAkB,GAAG;EAChC,WAAW,EAAE,qEAAqE;EAClF,SAAS,EAAE;AACb,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;AC5G7B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,WAAW,SAAS,SAAS,CAAC;EAClC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,UAAU;EACnB;EAEA,MAAM,CAAC,SAAS,EAAE;IAChB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;MAC1B,GAAG,EAAE;IACP,CAAC,CAAC;IACF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE;MACnC,WAAW,EAAE,uDAAuD;MACpE,EAAE,EAAE;IACN,CAAC,CAAC;IACF,SAAS,CAAC,SAAS,CAAC,CAAC;IACrB,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,WAAW;;;;;AC1C5B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA,MAAM,uBAAuB,GAAG,IAAI;AAEpC,MAAM,QAAQ,SAAS,SAAS,CAAC;EAC/B,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;IACtB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;EACf;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAE5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,uBAAuB,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,uBAAuB,CAAC;IAEjE,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;IACnC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;IAEpC,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,CAAC,KAAK,GAAG;QACX,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,GAAG,uBAAuB;QACxE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,GAAG;MACpD,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,CAAC,YAAY,CAAC;EAEvB,UAAU,CAAA,CAAC;EAAA,EAAY;IACrB,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,QAAQ;;;;;AC3CzB,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,eAAe,SAAS,SAAS,CAAC;EACtC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;MAC/C;IACF;IACA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,SAAS,EAAE,qEAAqE;MAChF,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG;MAC5B,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC;IAC5B,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,UAAU,EAAE;YACV,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC5B,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;UAC3B;QACF,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;;;ACxChC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC7C,MAAM,aAAa,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAEpD,MAAM,YAAY,SAAS,SAAS,CAAC;EACnC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,WAAW,EAAE,IAAI,UAAU,CAAC,CAAC;MAC7B,cAAc,EAAE,IAAI,aAAa,CAAC;IACpC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IACjD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK;QACxC,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;AChE7B,MAAM,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC;AAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAE9C,MAAM,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;AACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;AAEvC,MAAM,kBAAkB,SAAS,mBAAmB,CAAC;EACnD,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,UAAU,EAAE,IAAI,iBAAiB,CAAC;QAAC,GAAG,EAAE;MAAU,CAAC,CAAC;MACpD,SAAS,EAAE,IAAI,QAAQ,CAAC;QAAC,GAAG,EAAE;MAAS,CAAC,CAAC;MACzC,SAAS,EAAE,IAAI,QAAQ,CAAC,CAAC;MACzB,gBAAgB,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAgB,CAAC;IAC3D,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,mBAAmB;EAC5B;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;EACrD;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI;IAAS,CAAC,CAAC;IAEvE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEhD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK;QAChD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK;QAChD,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK;QAC9C,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;EAC9D;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,kBAAkB;;;;;AC9DnC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAE9C,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAClD,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAEjD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;AAEnC,MAAM,QAAQ,SAAS,SAAS,CAAC;EAC/B,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,aAAa,EAAE,IAAI,YAAY,CAAC,CAAC;MACjC,cAAc,EAAE,IAAI,aAAa,CAAC,CAAC;MACnC,UAAU,EAAE,IAAI,WAAW,CAAC,QAAQ;IACtC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC;EACjC;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAE5B,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IACjD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAE7C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,QAAQ;;;;;AC5EzB,MAAM,CAAC,OAAO,GAAG;EACf,GAAG,EAAE,UAAU;EACf,CAAC,EAAE,CACD;IACE,GAAG,EAAE,QAAQ;IACb,CAAC,EAAE,CACD;MAAC,GAAG,EAAE,OAAO;MAAE,CAAC,EAAE;QAAC,CAAC,EAAE,GAAG;QAAE,CAAC,EAAE;MAAG;IAAC,CAAC,EACnC;MAAC,GAAG,EAAE,OAAO;MAAE,CAAC,EAAE;QAAC,EAAE,EAAE,GAAG;QAAE,EAAE,EAAE;MAAG;IAAC,CAAC;EAEzC,CAAC,EACD;IACE,GAAG,EAAE,YAAY;IACjB,CAAC,EAAE;MAAC,IAAI,EAAE;IAAM,CAAC;IACjB,CAAC,EAAE,CAAC;MAAC,GAAG,EAAE;IAAS,CAAC;EACtB,CAAC;AAEL,CAAC;;;;;AChBD,MAAM,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC;AAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAE9C,MAAM,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;AAEvC,MAAM,kBAAkB,SAAS,mBAAmB,CAAC;EACnD,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,UAAU,EAAE,IAAI,iBAAiB,CAAC;QAAC,GAAG,EAAE;MAAU,CAAC,CAAC;MACpD,QAAQ,EAAE,IAAI,iBAAiB,CAAC;QAAC,GAAG,EAAE;MAAQ,CAAC,CAAC;MAChD,SAAS,EAAE,IAAI,QAAQ,CAAC,CAAC;MACzB,gBAAgB,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE;MAAgB,CAAC;IAC3D,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,mBAAmB;EAC5B;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;EACrD;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI;IAAS,CAAC,CAAC;IAEvE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEhD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK;QAChD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK;QAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK;QAC9C,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;EAC9D;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,kBAAkB;;;;;AC7DnC,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;IACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM;IAC9B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;IAC1B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;IAC1B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO;IACvC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;IAClB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU;IACpC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;EAClC;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,MAAM;MAAC;IAAU,CAAC,GAAG,IAAI;IACzB,IAAI,KAAK,EAAE;MACT,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,KAAK;QACnC,OAAO,CAAC,KAAK,GAAG,KAAK;QACrB,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC;MACzC,CAAC,CAAC;IACJ;EACF;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,IAAI,CAAC,MAAM,IAAK,KAAK,IAAI,KAAK,CAAC,MAAO,EAAE;MAC1C,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;MACpC,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAG,KAAK,IAAI,KAAK,CAAC,MAAM,IAAK,CAAC,CAAC;MACnE;MAEA,MAAM;QAAC;MAAU,CAAC,GAAG,IAAI;MACzB,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,KAAK;QAC3C,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC;MACjD,CAAC,CAAC;MAEF,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;MACrB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,OAAO,IAAI;MACb;QACE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;UACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU;UAC7B,OAAO,IAAI;QACb;QACA,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,SAAS;QAEvB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;UACtD,MAAM,IAAI,KAAK,CAAE,OAAM,IAAI,CAAC,UAAU,CAAC,GAAI,WAAU,IAAI,CAAC,QAAS,YAAW,CAAC;QACjF;MACF;MACA,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB,IAAI,KAAK,EAAE;MACT,MAAM;QAAC;MAAU,CAAC,GAAG,IAAI;MACzB,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI;QAC1B,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;MAC3C,CAAC,CAAC;IACJ;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;AC9F1B,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;AACpD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,eAAe,SAAS,SAAS,CAAC;EACtC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B;QACA,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE;UAAC,GAAG,EAAE;QAAK,CAAC,CAAC;MAChD,CAAC,MAAM;QACL,MAAM,UAAU,GAAG,SAAA,CAAS,IAAI,EAAE;UAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,OAAO,IAAI;UACb;UACA,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO;QAC3D,CAAC;QAED,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3C,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,IAAI,YAAY,IAAI,aAAa,EAAE;UACjC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE;YAAC,GAAG,EAAG,GAAE,YAAa,IAAG,aAAc;UAAC,CAAC,CAAC;QAC7E;MACF;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;MAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG;IAClC;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;;;ACrChC,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAE3C,MAAM,aAAa,GAAG,OAAO,CAAC,4BAA4B,CAAC;AAE3D,SAAS,YAAY,CAAC,CAAC,EAAE;EACvB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE;IACjC,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI;EAC7B;EACA,IAAI,CAAC,YAAY,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;IAChD,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM;EAC/B;EACA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;IACzB,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM;EAC/B;EACA,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE;IAC1B,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO;EAChC;EACA,IAAI,CAAC,YAAY,IAAI,EAAE;IACrB,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI;EAC7B;EACA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE;IACzB,OAAO,KAAK,CAAC,SAAS,CAAC,SAAS;EAClC;EACA,IAAI,CAAC,CAAC,OAAO,EAAE;IACb,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO;EAChC;EACA,IAAI,CAAC,CAAC,KAAK,EAAE;IACX,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK;EAC9B;EACA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;AACzD;AAEA,SAAS,oBAAoB,CAAC,IAAI,EAAE;EAClC,QAAQ,IAAI,CAAC,IAAI;IACf,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO;MAC1B,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAClC;MACE,OAAO,IAAI,CAAC,IAAI;EACpB;AACF;AAEA,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,CAAC;EAC1C;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,GAAG;EACZ;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5F,IAAI,OAAO,EAAE;MACX,KAAK,CAAC,OAAO,GAAG,OAAO;IACzB;IAEA,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAC,GAAG,KAAK,CAAC,OAAO;QAAE,GAAG,EAAE,KAAK,CAAC;MAAO,CAAC,CAAC;IAC/D;IAEA,QAAQ,KAAK,CAAC,IAAI;MAChB,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM;MAC3B,KAAK,KAAK,CAAC,SAAS,CAAC,QAAQ;QAC3B,IAAI,OAAO,CAAC,aAAa,EAAE;UACzB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QACrD;QACA;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI;QACvB,IAAI,OAAO,CAAC,QAAQ,EAAE;UACpB,KAAK,CAAC,QAAQ,GAAG,IAAI;QACvB;QACA;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,SAAS;QAC5B,IAAI,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;UAC5E,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QACpD;QACA,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;UACtB,OAAO,EAAE,KAAK,CAAC,OAAO;UACtB,MAAM,EAAE,KAAK,CAAC,SAAS;UACvB,OAAO,EAAE,KAAK,CAAC;QACjB,CAAC,CAAC;QACF;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK;QACxB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO;QAC1B,IAAI,OAAO,CAAC,QAAQ,EAAE;UACpB;UACA,KAAK,CAAC,QAAQ,GAAG,IAAI;QACvB;QAEA,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;UAChC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;QACjC;QAEA,IAAI,KAAK,CAAC,OAAO,EAAE;UACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK;QACzC,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE;UAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;UACpD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CACZ,wEAAuE,KAAK,CAAC,OAAQ,EACxF,CAAC;UACH;UACA,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,EAAE;YAC3B,MAAM,CAAC,SAAS,GAAG,QAAQ;YAC3B,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;YAChC,MAAM,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;UACzD,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE;YACvB,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;UAC7C;UACA,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;QACtB;QACA;MAEF;QACE;IACJ;EACF;EAEA,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;IAC9B,IAAI,KAAK,GAAG,IAAI;IAChB,QAAQ,KAAK,CAAC,SAAS;MACrB,KAAK,QAAQ;QACX,KAAK,GAAG;UACN,CAAC,EAAE,QAAQ;UACX,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK;UACnC,EAAE,EAAE,KAAK,CAAC;QACZ,CAAC;QACD;MAEF,KAAK,OAAO;QACV,KAAK,GAAG;UACN,CAAC,EAAE,OAAO;UACV,GAAG,EAAE,KAAK,CAAC;QACb,CAAC;QACD;MAEF;QACE,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE;UAC1B,KAAK,GAAG;YACN,CAAC,EAAE,QAAQ;YACX,EAAE,EAAE,KAAK,CAAC;UACZ,CAAC;QACH;QACA;IACJ;IAEA,QAAQ,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;MAChC,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI;QAAE;QACzB,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QAC7C;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM;QACzB;QACA,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;QAClC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QAC7C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QAC3C;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM;QACzB,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QAC7C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QAC3C;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO;QAC1B,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;QAChC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QAC7C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK;QACxB,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;QAChC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QAC7C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACjD;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI;QACvB,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QAC7C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9E;;MAEF;MACA;MACA;QACE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;IAC3D;EACF;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;MACzD;MACA;IACF;IAEA,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;IACvB,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;IAE1C,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;IAC5C;IAEA,QAAQ,KAAK,CAAC,IAAI;MAChB,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI;QACvB;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM;QACzB,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;QAC1C;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO;QAC1B,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;QAChC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;QACtD;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK;QACxB,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;QAChC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QAChD;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM;MAC3B,KAAK,KAAK,CAAC,SAAS,CAAC,QAAQ;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;UAC5B,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;UAChC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QAC3C,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;UAC9C,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC;UACxC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;UACxB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI;YACnC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;UAC5C,CAAC,CAAC;UACF,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,CAAC,MAAM;UACL,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;UAClC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;QAC5C;QACA;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI;QACvB,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7E;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,SAAS;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;UAC5B,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;UAChC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QAC3C,CAAC,MAAM;UACL,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;UAClC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QAC3C;QACA;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO;QAC1B,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC;QACpC;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK;QACxB;QACA;MAEF;QACE;IACJ;IAEA,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EACzB;;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,GAAG;QACN;QACA,IAAI,CAAC,KAAK,GAAG;UACX,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE;UACrB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC;QACtD;QACA,OAAO,IAAI;MAEb,KAAK,GAAG;QACN,IAAI,CAAC,WAAW,GAAG,GAAG;QACtB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE;QAClC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG;QACpC,OAAO,IAAI;MAEb,KAAK,GAAG;QACN,IAAI,CAAC,WAAW,GAAG,GAAG;QACtB,OAAO,IAAI;MAEb,KAAK,GAAG;QACN,IAAI,CAAC,WAAW,GAAG,GAAG;QACtB,OAAO,IAAI;MAEb,KAAK,GAAG;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MAEb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B;IACF;IACA,QAAQ,IAAI,CAAC,WAAW;MACtB,KAAK,GAAG;QACN,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI;QAC1E;MACF,KAAK,GAAG;MACR,KAAK,GAAG;QACN,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;UACjD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAC3D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,GACrC,IAAI;QACV,CAAC,MAAM;UACL,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI;QACtE;QACA;MACF;QACE;IACJ;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,GAAG;QAAE;UACR,MAAM;YAAC;UAAK,CAAC,GAAG,IAAI;;UAEpB;UACA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE;YACpC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO;YACpC,IAAI,KAAK,CAAC,KAAK,EAAE;cACf,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE;gBACpB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;cAC7C,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE;gBACzB,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;cAChD,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE;gBACzB,KAAK,CAAC,MAAM,GAAG;kBAAC,KAAK,EAAE,KAAK,CAAC;gBAAK,CAAC;cACrC,CAAC,MAAM;gBACL,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;cACxC;cACA,KAAK,CAAC,KAAK,GAAG,SAAS;YACzB;UACF,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;YACpC,QAAQ,IAAI,CAAC,CAAC;cACZ,KAAK,GAAG;gBACN,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM;gBACnC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBACvC;cACF,KAAK,KAAK;gBACR,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM;gBACnC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC1C;cACF,KAAK,WAAW;gBACd,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM;gBACnC;cACF,KAAK,GAAG;gBACN,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO;gBACpC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;gBAC7C;cACF,KAAK,GAAG;gBACN,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK;gBAClC,KAAK,CAAC,KAAK,GAAG;kBAAC,KAAK,EAAE,KAAK,CAAC;gBAAK,CAAC;gBAClC;cACF;gBACE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM;gBACnC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;gBACrC;YACJ;UACF,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;YACxB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI;UACnC,CAAC,MAAM;YACL,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK;UACpC;UACA,OAAO,KAAK;QACd;MAEA,KAAK,GAAG;MACR,KAAK,GAAG;MACR,KAAK,IAAI;QACP,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,OAAO,IAAI;MAEb,KAAK,GAAG;QACN,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;UAC5B,OAAO,IAAI;QACb;QACA,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,OAAO,IAAI;MAEb,KAAK,GAAG;QACN,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC3D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,SAAS;QACvB,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,OAAO,IAAI;MAEb;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;UAC5B,OAAO,IAAI;QACb;QACA,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5F,IAAI,KAAK,EAAE;MACT,KAAK,CAAC,KAAK,GAAG,KAAK;IACrB;IACA,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;MAC/B,KAAK,CAAC,OAAO,GAAG,SAAS;IAC3B;IAEA,QAAQ,KAAK,CAAC,IAAI;MAChB,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM;QACzB,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;UACnC,IAAI,OAAO,CAAC,aAAa,EAAE;YACzB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;UAC5D;QACF;QACA,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;UACxB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ;QACvC;QACA;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM;QACzB,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;UAC1C,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI;UACjC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;QAChE;QACA;MAEF,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO;QAC1B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;UACxE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;QAClE;QACA,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;UAChC,IAAI,KAAK,CAAC,GAAG,EAAE;YACb;YACA,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO;UAC5C,CAAC,MAAM;YACL;YACA,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,SAAS;UACxB;UACA,OAAO,KAAK,CAAC,EAAE;QACjB;QACA;MAEF;QACE;IACJ;;IAEA;IACA,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;IACrD,IAAI,SAAS,EAAE;MACb,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;QAC1C,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM;QACzB,KAAK,CAAC,MAAM,GAAG,SAAS;MAC1B,CAAC,MAAM;QACL,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK;QACxB,KAAK,CAAC,KAAK,GAAG,SAAS;MACzB;MACA,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS;MACtC,KAAK,CAAC,SAAS,GAAG,SAAS;IAC7B;IAEA,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;IACzE,IAAI,OAAO,EAAE;MACX,KAAK,CAAC,OAAO,GAAG,OAAO;IACzB;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;ACjf1B,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;MACtB,MAAM,EAAE,KAAK,CAAC;IAChB,CAAC,CAAC;EACJ;EAEA,SAAS,CAAA,IAAA,EAAe;IAAA,IAAd;MAAC;IAAU,CAAC,GAAA,IAAA;IACpB,IAAI,CAAC,KAAK,GAAG;MACX,OAAO,EAAE,UAAU,CAAC,OAAO;MAC3B,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM;IAChD,CAAC;EACH;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,OAAO,IAAI,KAAK,IAAI,CAAC,GAAG;EAC1B;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;AC1B/B,MAAM;EAAC,EAAE,EAAE;AAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AACpC,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACtD,MAAM,eAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAEvD,MAAM,QAAQ,GAAG;EACf,YAAY,EAAE,IAAI;EAClB,QAAQ,EAAE,IAAI;EACd,QAAQ,EAAE;AACZ,CAAC;AAED,MAAM,cAAc,SAAS,cAAc,CAAC;EAC1C,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,aAAa,EAAG,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,CAAE;MAC1D,aAAa,EAAG,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC;IAC1D,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEA,OAAO,KAAK,CAAC,IAAI,EAAE;IACjB;IACA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;MAC3B,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;IACpC;IACA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;MAC3B,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACzC,OAAO,IAAI;MACb;IACF;IACA,OAAO,KAAK;EACd;EAEA,OAAO,CAAC,KAAK,EAAE;IACb,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;MAC/B,KAAK,CAAC,KAAK,GAAI,IAAG,MAAM,CAAC,CAAE,GAAE,CAAC,WAAW,CAAC,CAAC;IAC7C;EACF;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;MAChC;IACF;IAEA,QAAQ,KAAK,CAAC,IAAI;MAChB,KAAK,SAAS;QACZ,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC;QACpC;MACF,KAAK,SAAS;QACZ,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC;QACpC;IACJ;EACF;EAEA,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;IAC9B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,SAAS;MACf,EAAE,EAAE,KAAK,CAAC;IACZ,CAAC,CAAC;IAEF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAE1C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;IAC9B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,SAAS;MACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,EAAE,EAAE,KAAK,CAAC,KAAK,IAAK,IAAG,MAAM,CAAC,CAAE;IAClC,CAAC,CAAC;IAEF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAE1C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,IAAA,EAAe;IAAA,IAAd;MAAC;IAAU,CAAC,GAAA,IAAA;IACzB,OAAO;MACL,IAAI,EAAE,UAAU,CAAC,IAAI;MACrB,KAAK,EAAE,UAAU,CAAC,EAAE;MACpB,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ;IACpD,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;EACzC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;ACjG/B,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,YAAY,SAAS,cAAc,CAAC;EACxC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,MAAM,EAAG,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC;IAC1C,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,UAAU;EACnB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,KAAK,CAAC;IACd,CAAC,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;MAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IAC/C;IACA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAC,IAAI,EAAE;IACnB,OAAO;MACL,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,QAAQ,IAAI;MACV,KAAK,MAAM;QACT,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAC9D;IACJ;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;AC1C7B,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAClD,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAErD,MAAM,6BAA6B,SAAS,cAAc,CAAC;EACzD,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,UAAU,EAAG,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,CAAE;MAC9C,YAAY,EAAG,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC;IAClD,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,2BAA2B;EACpC;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;MAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;IACpC,CAAC,CAAC;EACJ;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;MAC3C;IACF;IAEA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,UAAU,EAAE;IACd,CAAC,CAAC;IAEF,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;;IAE7F;IACA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;IAEvC,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,EAAG;IACf,OAAO;MACL,KAAK,EAAE;IACT,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,QAAQ,IAAI;MACV,KAAK,UAAU;QACb,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK;QAC7B;MAEF,KAAK,YAAY;QACf,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACnC;IACJ;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,6BAA6B;;;;;AC7D9C,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACrD,MAAM,6BAA6B,GAAG,OAAO,CAAC,oCAAoC,CAAC;AAEnF,MAAM,8BAA8B,SAAS,cAAc,CAAC;EAC1D,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,2BAA2B,EAAG,IAAI,CAAC,OAAO,GAAG,IAAI,6BAA6B,CAAC;IACjF,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,4BAA4B;EACrC;EAEA,UAAU,CAAC,KAAK,EAAE;IAChB,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE;MACrC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7E;IACA,OAAO,KAAK,CAAC,aAAa;EAC5B;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI;MAClB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;IACnC,CAAC,CAAC;EACJ;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;MAC1B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;MAC5B,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;MACvD,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB;EACF;EAEA,cAAc,CAAA,EAAG;IACf,OAAO,EAAE;EACX;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B;IACA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;EAC/B;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,8BAA8B;;;;;ACjD/C,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,UAAU,GAAG,OAAO,CAAC,yBAAyB,CAAC;AACrD,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAEhD,MAAM,eAAe,SAAS,cAAc,CAAC;EAC3C,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,UAAU,EAAG,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,CAAE;MACjD,iBAAiB,EAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,UAAU,CAAC,iBAAiB,CAAE;MAC9E,yBAAyB,EAAG,IAAI,CAAC,wBAAwB,GAAG,IAAI,UAAU,CACxE,yBACF,CAAE;MACF,uBAAuB,EAAG,IAAI,CAAC,sBAAsB,GAAG,IAAI,UAAU,CACpE,uBACF,CAAE;MACF,eAAe,EAAG,IAAI,CAAC,cAAc,GAAG,IAAI,UAAU,CAAC,eAAe;IACxE,CAAC;EACH;EAEA,OAAO,KAAK,CAAC,IAAI,EAAE;IACjB;IACA;IACA,OAAO,CAAC,IAAI,CAAC,QAAQ;EACvB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC;MAC7D,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC;MAC/D,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;MACtD,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;MACzD,8BAA8B,EAAE,SAAS,CAAC,eAAe,CACvD,KAAK,CAAC,8BAA8B,EACpC,IACF,CAAC;MACD,oCAAoC,EAAE,SAAS,CAAC,eAAe,CAC7D,KAAK,CAAC,oCAAoC,EAC1C,IACF,CAAC;MACD,YAAY,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC;MAC/D,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa;IACjE,CAAC,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;MACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;IACxC,CAAC,CAAC;IAEF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;IAC1D,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,mBAAmB,CAAC;IAC1E,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACtE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IAEtD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,IAAA,EAAe;IAAA,IAAd;MAAC;IAAU,CAAC,GAAA,IAAA;IACzB,OAAO;MACL,IAAI,EAAE,EAAE;MACR,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;MACxD,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC;MAC1D,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC;MACvD,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;MAC1D,8BAA8B,EAAE,SAAS,CAAC,WAAW,CACnD,UAAU,CAAC,8BAA8B,EACzC,IACF,CAAC;MACD,oCAAoC,EAAE,SAAS,CAAC,WAAW,CACzD,UAAU,CAAC,oCAAoC,EAC/C,IACF,CAAC;MACD,YAAY,EAAE,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC;MACtE,SAAS,EAAE,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa;IACxE,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAChC,QAAQ,IAAI;MACV,KAAK,MAAM;QACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC;MAEF;QACE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK;QAC/B;IACJ;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;;;ACjGhC,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,MAAM;EACf;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC;EAC3C;EAEA,SAAS,CAAA,EAAG;IACV,IAAI,CAAC,KAAK,GAAG,EAAE;EACjB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,KAAK,IAAI,IAAI;EACpB;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,OAAO,IAAI,KAAK,IAAI,CAAC,GAAG;EAC1B;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;ACxB1B,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAChD,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAErD,MAAM,eAAe,SAAS,cAAc,CAAC;EAC3C,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,UAAU,EAAG,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,CAAE;MACjD,YAAY,EAAG,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC;IACvD,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC;MACnD,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;MACxD,SAAS,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;MAC3D,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK;IACtD,CAAC,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;MACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;IACxC,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,KAAK,EAAE;MACf,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK;QAC/B,IAAI,CAAC,MAAM,GAAG,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;MAC1C,CAAC,CAAC;IACJ;IAEA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,IAAA,EAAe;IAAA,IAAd;MAAC;IAAU,CAAC,GAAA,IAAA;IACzB,OAAO;MACL,IAAI,EAAE,EAAE;MACR,OAAO,EAAE,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC;MACtE,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;MACzD,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI;IAC7D,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAChC,QAAQ,IAAI;MACV,KAAK,MAAM;QACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC;MAEF,KAAK,QAAQ;QACX,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;UACrB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;QACvB;QACA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACnC;MAEF;QACE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK;QAC/B;IACJ;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;;;ACxEhC,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAM,aAAa,SAAS,SAAS,CAAC;EACpC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,UAAU;EACnB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC;EAC3C;EAEA,SAAS,CAAA,EAAG;IACV,IAAI,CAAC,KAAK,GAAG,EAAE;EACjB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,KAAK,IAAI,IAAI;EACpB;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,OAAO,IAAI,KAAK,IAAI,CAAC,GAAG;EAC1B;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,aAAa;;;;;ACxB9B,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,KAAK,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAE9C,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACrD,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC/C,MAAM,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACtD,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAEhD,MAAM,QAAQ,GAAG;EACf,YAAY,EAAE,IAAI;EAClB,QAAQ,EAAE,IAAI;EACd,QAAQ,EAAE;AACZ,CAAC;AAED,MAAM,cAAc,GAAG,KAAK,IAAI;EAC9B,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;IACvC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;EAC1B;EAEA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;EAClC,MAAM;IAAC;EAAE,CAAC,GAAG,KAAK;EAClB,QAAQ,KAAK,CAAC,QAAQ;IACpB,KAAK,cAAc;MACjB,OAAQ,uBAAsB,KAAK,CAAC,IAAK,KAAI,EAAG,KAAI;IACtD,KAAK,gBAAgB;MACnB,OAAQ,YAAW,EAAG,MAAK;IAC7B,KAAK,mBAAmB;MACtB,OAAQ,YAAW,EAAG,MAAK;IAC7B,KAAK,gBAAgB;MACnB,OAAQ,WAAU,EAAG,GAAE;IACzB,KAAK,mBAAmB;MACtB,OAAQ,eAAc,EAAG,IAAG;IAC9B;MACE,OAAO,SAAS;EACpB;AACF,CAAC;AAED,MAAM,oBAAoB,GAAG,KAAK,IAAI;EACpC,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;IACvC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;EAC1B;EAEA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;EAClC,MAAM;IAAC;EAAE,CAAC,GAAG,KAAK;EAClB,QAAQ,KAAK,CAAC,UAAU;IACtB,KAAK,UAAU;MACb,OAAQ,yBAAwB,EAAG,qCAAoC,EAAG,kCAAiC;IAC7G,KAAK,UAAU;MACb,OAAQ,yBAAwB,EAAG,6CAA4C,EAAG,2BAA0B;IAC9G,KAAK,UAAU;MACb,OAAQ,iBAAgB,EAAG,8CAA6C,EAAG,oCAAmC;IAChH,KAAK,WAAW;MACd,OAAQ,SAAQ,EAAG,eAAc;IACnC,KAAK,OAAO;MACV,OAAQ,SAAQ,EAAG,aAAY;IACjC,KAAK,UAAU;MACb,OAAQ,SAAQ,EAAG,eAAc;IACnC,KAAK,WAAW;MACd,OAAQ,qBAAoB,EAAG,gBAAe,EAAG,eAAc;IACjE,KAAK,WAAW;MACd,OAAQ,aAAY,EAAG,oCAAmC,EAAG,6BAA4B;IAC3F,KAAK,WAAW;MACd,OAAQ,aAAY,EAAG,yBAAwB,EAAG,kBAAiB;IACrE,KAAK,WAAW;MACd,OAAQ,aAAY,EAAG,oCAAmC,EAAG,6BAA4B;IAC3F;MACE,OAAO,SAAS;EACpB;AACF,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,IAAI;EAC3B,MAAM;IAAC,IAAI;IAAE;EAAQ,CAAC,GAAG,UAAU;EACnC,QAAQ,IAAI;IACV,KAAK,cAAc;IACnB,KAAK,gBAAgB;IACrB,KAAK,mBAAmB;IACxB,KAAK,gBAAgB;IACrB,KAAK,mBAAmB;MACtB,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE;MACZ,CAAC;IAEH;MACE,OAAO;QAAC,IAAI;QAAE;MAAQ,CAAC;EAC3B;AACF,CAAC;AAED,MAAM,WAAW,SAAS,cAAc,CAAC;EACvC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,OAAO,EAAG,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,CAAE;MACjD,MAAM,EAAG,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,CAAE;MACpD,OAAO,EAAG,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,CAAE;MACjD,UAAU,EAAG,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,CAAE;MAC1D,OAAO,EAAG,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;IACjD,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEA,OAAO,WAAW,CAAC,IAAI,EAAE;IACvB;IACA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;MAC3B,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACzC,OAAO,KAAK;MACd;IACF;IACA,OAAO,IAAI;EACb;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,QAAQ,KAAK,CAAC,IAAI;MAChB,KAAK,YAAY;QACf,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC;QACvC;MACF,KAAK,QAAQ;QACX,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC;QACnC;MACF,KAAK,OAAO;QACV,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC;QAClC;MACF,KAAK,cAAc;QACjB,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC;QACzC;MACF,KAAK,SAAS;QACZ,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC;QACpC;MACF,KAAK,YAAY;QACf,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC;QACvC;MACF,KAAK,SAAS;QACZ,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC;QACpC;MACF,KAAK,cAAc;QACjB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC;QACjC;MACF,KAAK,YAAY;QACf,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC;QACvC;IACJ;EACF;EAEA,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE;IACjC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,YAAY;MAClB,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,QAAQ,EAAE,KAAK,CAAC;IAClB,CAAC,CAAC;IAEF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE;IAC7B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,QAAQ;MACd,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,QAAQ,EAAE,KAAK,CAAC;IAClB,CAAC,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI;MAChC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;IAC9C,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE;IAC5B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,OAAO;MACb,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;MACxD,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;MACtD,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI;IACjD,CAAC,CAAC;EACJ;EAEA,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE;IACnC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,cAAc;MACpB,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,YAAY,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI;IAClE,CAAC,CAAC;EACJ;EAEA,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;IAC9B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,SAAS;MACf,QAAQ,EAAE,KAAK,CAAC;IAClB,CAAC,CAAC;IAEF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAE5C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE;IACjC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,YAAY;MAClB,QAAQ,EAAE,KAAK,CAAC;IAClB,CAAC,CAAC;IAEF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAE7C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE;IAC9B;IACA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;MACnC;IACF;IAEA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,SAAS;MACf,QAAQ,EAAE,KAAK,CAAC;IAClB,CAAC,CAAC;IAEF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAE1C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE;IAC3B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,KAAK,CAAC,QAAQ;MACpB,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,QAAQ,EAAE,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc;IACtE,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC;IACrC,IAAI,OAAO,EAAE;MACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;IAC9C;IAEA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE;IACjC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,YAAY;MAClB,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,UAAU,EAAE,KAAK,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC;IAC3C,IAAI,OAAO,EAAE;MACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;IAC9C;IAEA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,IAAA,EAAe;IAAA,IAAd;MAAC;IAAU,CAAC,GAAA,IAAA;IACzB,OAAO;MACL,GAAG,MAAM,CAAC,UAAU,CAAC;MACrB,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;MAC7C,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;MACnD,UAAU,EAAE,UAAU,CAAC,UAAU;MACjC,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;MAClD,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;MAChD,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;MAC3C,YAAY,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY;IAC7D,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,QAAQ,IAAI;MACV,KAAK,SAAS;MACd,KAAK,QAAQ;MACb,KAAK,YAAY;MACjB,KAAK,SAAS;QACZ;QACA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;QACvC;MAEF,KAAK,SAAS;QACZ;QACA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE;QAC/C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACtC;IACJ;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,WAAW;;;;;AC5S5B,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,MAAM;EACf;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;MAChB,GAAG,EAAE,KAAK,CAAC;IACb,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,KAAK,GAAG;MACX,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;MAC1B,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG;IACnD,CAAC;EACH;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,OAAO,IAAI,KAAK,IAAI,CAAC,GAAG;EAC1B;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;AC1B1B,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,UAAU,GAAG,OAAO,CAAC,yBAAyB,CAAC;AACrD,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAM,eAAe,SAAS,cAAc,CAAC;EAC3C,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,IAAI,EAAG,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,CAAE;MACxC,KAAK,EAAG,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC;IAC3C,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAE5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;MACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;IACxC,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI;MAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1C,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAC,IAAI,EAAE;IACnB,OAAO;MACL,IAAI,EAAE,EAAE;MACR,KAAK,EAAE;IACT,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;EACrC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;;;AC5ChC,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAE9C,MAAM,0BAA0B,SAAS,cAAc,CAAC;EACtD,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,MAAM,EAAE,IAAI,WAAW,CAAC;IAC1B,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,uBAAuB;EAChC;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB;IACA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;MAC9C;IACF;IAEA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAAC,KAAK,EAAE,KAAK,CAAC;IAAG,CAAC,CAAC;IAEhD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;MAC1B,IAAI,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;QACpB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;MACzC;IACF,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,IAAA,EAAe;IAAA,IAAd;MAAC;IAAU,CAAC,GAAA,IAAA;IACzB,OAAO;MACL,GAAG,EAAE,UAAU,CAAC,KAAK;MACrB,KAAK,EAAE;IACT,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;EACrC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,0BAA0B;;;;;AC/C3C,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAM,0BAA0B,GAAG,OAAO,CAAC,gCAAgC,CAAC;AAE5E,MAAM,2BAA2B,SAAS,SAAS,CAAC;EAClD,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,OAAO,GAAG,IAAI,0BAA0B,CAAC,CAAC;EACjD;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,uBAAuB;EAChC;EAEA,KAAK,CAAA,EAAG;IACN,IAAI,CAAC,KAAK,GAAG,EAAE;EACjB;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB;IACA,IAAI,YAAY,GAAG,KAAK,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EACnE,CACF,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI;MAClB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;QACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;UAClB,IAAI,CAAC,QAAQ,GAAG,YAAY,EAAE;QAChC;QAEA,IAAI,IAAI,CAAC,KAAK,EAAE;UACd,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QACrD;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI;MAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;IACpC,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,uBAAuB;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MAEb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,SAAS;QACvB,OAAO,KAAK;MACd;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI;MAClB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;UAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;UACnD,OAAO,IAAI,CAAC,KAAK;QACnB;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,2BAA2B;;;;;AC3F5C,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,UAAU,GAAG,OAAO,CAAC,yBAAyB,CAAC;AACrD,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAM,YAAY,SAAS,cAAc,CAAC;EACxC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,IAAI,EAAG,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,CAAE;MACxC,KAAK,EAAG,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC;IAC3C,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAE5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;MACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;IACxC,CAAC,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IAE9C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,EAAG;IACf,OAAO;MACL,IAAI,EAAE;IACR,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,QAAQ,IAAI;MACV,KAAK,MAAM;QACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC;MACF,KAAK,OAAO;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;QAC/B;IACJ;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;AChD7B;AACA,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,UAAU,SAAS,SAAS,CAAC;EACjC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC;EAC3C;EAEA,SAAS,CAAA,EAAG;IACV,IAAI,CAAC,KAAK,GAAG,EAAE;EACjB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,KAAK,IAAI,IAAI;EACpB;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,OAAO,IAAI,KAAK,IAAI,CAAC,GAAG;EAC1B;AACF;AAEA,MAAM,QAAQ,SAAS,cAAc,CAAC;EACpC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,QAAQ,EAAG,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC;IAC3C,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,GAAG,EAAE,wCAAwC;MAC7C,WAAW,EAAE;IACf,CAAC,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IAE3C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,EAAG;IACf,OAAO,CAAC,CAAC;EACX;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;EACjC;AACF;AAEA,MAAM,cAAc,SAAS,cAAc,CAAC;EAC1C,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,GAAG,GAAG;MACT,GAAG,EAAE,IAAI,QAAQ,CAAC;IACpB,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IACrC,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,EAAG;IACf,OAAO,CAAC,CAAC;EACX;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;EACzC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;ACtF/B,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAE7C,MAAM,YAAY,SAAS,SAAS,CAAC;EACnC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC;EAC3C;EAEA,SAAS,CAAA,EAAG;IACV,IAAI,CAAC,KAAK,GAAG,EAAE;EACjB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,KAAK,IAAI,IAAI;EACpB;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,OAAO,IAAI,KAAK,IAAI,CAAC,GAAG;EAC1B;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;ACxB7B,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAM,YAAY,SAAS,cAAc,CAAC;EACxC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,IAAI,EAAG,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC;IACxC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC;MACrE,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;MACxD,SAAS,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI;IAC5D,CAAC,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;MACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;IACxC,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,IAAA,EAAe;IAAA,IAAd;MAAC;IAAU,CAAC,GAAA,IAAA;IACzB,OAAO;MACL,OAAO,EAAE,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC;MACtE,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;MAClD,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC;MACtD,IAAI,EAAE;IACR,CAAC;EACH;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;EACrC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;AC9C7B,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,QAAQ,SAAS,SAAS,CAAC;EAC/B,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAI,OAAO,EAAE;MACX,KAAK,CAAC,OAAO,GAAG,OAAO;IACzB;EACF;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzB,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;IACxC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;IACxC,IAAI,KAAK,CAAC,KAAK,EAAE;MACf,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;IAC9C;IACA,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;IAChD;IACA,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;IACvC;IACA,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC;IACxC;IACA,IAAI,KAAK,CAAC,YAAY,EAAE;MACtB,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC;IAC5D;IACA,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1C;IACA,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC;IAC1C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;MACvB,MAAM,KAAK,GAAI,IAAI,CAAC,KAAK,GAAG;QAC1B,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,CAAC;QAC7C,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,CAAC;QAC7C,KAAK,EACH,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,GAC/B,SAAS,GACT,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG;MAC/C,CAAE;MACF,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;QACzB,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;MACrD;MACA,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC9C,KAAK,CAAC,MAAM,GAAG,IAAI;MACrB;MACA,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC/C,KAAK,CAAC,OAAO,GAAG,IAAI;MACtB;MACA,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;QAChC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC;MACjE;MACA,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACjD,KAAK,CAAC,SAAS,GAAG,IAAI;MACxB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB;IACA,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IAC3D;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,QAAQ;;;;;ACrFzB,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;AACpD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAE3C,SAAS,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE;EAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;EAC9B,IAAI,KAAK,KAAK,SAAS,EAAE;IACvB,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK;EAC3B,CAAC,MAAM,IAAI,YAAY,KAAK,SAAS,EAAE;IACrC,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY;EAClC;AACF;AAEA,SAAS,UAAU,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE;EAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;EAC9B,IAAI,KAAK,KAAK,SAAS,EAAE;IACvB,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;EAC/C,CAAC,MAAM,IAAI,YAAY,KAAK,SAAS,EAAE;IACrC,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY;EAClC;AACF;AAEA,SAAS,uBAAuB,CAAC,KAAK,EAAE;EACtC;EACA;EACA,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,OAAO,MAAM;IACxD,OAAO;IACP,cAAc;IACd,MAAM,EAAE;EACV,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;EAClD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;EACxC,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;MAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;MAC9D,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE;QAChF,OAAO,KAAK;MACd;IACF;IACA,OAAO,IAAI;EACb,CAAC;EACD,OAAO,MAAM,CACV,GAAG,CAAC,EAAE,IAAI;IACT,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;MACd,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC;MAC1C,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,IAAI;QACpC,OAAO;UACL,GAAG,EAAE,CAAC,cAAc;UACpB,KAAK,EAAE,EAAE,CAAC;QACZ,CAAC;MACH;;MAEA;MACA,IAAI,MAAM,GAAG,CAAC;MACd,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;MACtE,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE;QAC/E,MAAM,EAAE;QACR,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;MACpE;;MAEA;;MAEA,IAAI,KAAK,GAAG,CAAC;MACb,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE;QAC/C,KAAK,EAAE;MACT;;MAEA;MACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;UAC9B,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;UACjE,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,IAAI;QACnC;MACF;MAEA,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC;QACpC,OAAO;UACL,GAAG,EAAE,CAAC,cAAc;UACpB,KAAK,EAAG,GAAE,EAAE,CAAC,OAAQ,IAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAE;QAChE,CAAC;MACH;MACA,OAAO;QACL,GAAG,EAAE,CAAC,cAAc;QACpB,KAAK,EAAE,EAAE,CAAC;MACZ,CAAC;IACH;IACA,OAAO,IAAI;EACb,CAAC,CAAC,CACD,MAAM,CAAC,OAAO,CAAC;AACpB;AAEA,MAAM,oBAAoB,SAAS,SAAS,CAAC;EAC3C,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,iBAAiB;EAC1B;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,MAAM,cAAc,GAAG,uBAAuB,CAAC,KAAK,CAAC;IACrD,IAAI,cAAc,CAAC,MAAM,EAAE;MACzB,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE;QAAC,KAAK,EAAE,cAAc,CAAC;MAAM,CAAC,CAAC;MAErE,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI;QAC9B,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAEpC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;UACxB,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;UAE1C,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC3E,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;UACpD;UACA,IAAI,KAAK,CAAC,UAAU,EAAE;YACpB,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC;UAC3C;QACF;QACA,IAAI,KAAK,CAAC,gBAAgB,EAAE;UAC1B,SAAS,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC;QACjD;QACA,IAAI,KAAK,CAAC,WAAW,EAAE;UACrB,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC;QAC1D;QACA,IAAI,KAAK,CAAC,MAAM,EAAE;UAChB,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;QAChD;QACA,IAAI,KAAK,CAAC,gBAAgB,EAAE;UAC1B,SAAS,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC;QACjD;QACA,IAAI,KAAK,CAAC,UAAU,EAAE;UACpB,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC;QACxD;QACA,IAAI,KAAK,CAAC,UAAU,EAAE;UACpB,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC;QACxD;QACA,IAAI,KAAK,CAAC,KAAK,EAAE;UACf,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;QAC9C;QACA,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;QAC5C,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK;UACjD,SAAS,CAAC,QAAQ,CAAE,UAAS,KAAK,GAAG,CAAE,EAAC,CAAC;UACzC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;YACzB,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;UAC3D,CAAC,MAAM;YACL,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC;UAC9B;UACA,SAAS,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,SAAS,CAAC,SAAS,CAAC,CAAC;MACvB,CAAC,CAAC;MACF,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,iBAAiB;QACpB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,OAAO,IAAI;MAEb,KAAK,gBAAgB;QAAE;UACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;UACrC,MAAM,cAAc,GAAG;YAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,KAAK;YAAE,QAAQ,EAAE;UAAE,CAAC;UAE1E,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACxB,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;UAC3D;UACA,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;UAC/D,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;UAE/D,QAAQ,cAAc,CAAC,IAAI;YACzB,KAAK,KAAK;YACV,KAAK,MAAM;YACX,KAAK,QAAQ;cACX;YACF;cACE,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC;cAC9D;UACJ;UACA,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;UACtD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;UACjD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;UACrD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;UACrD,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;UAEhD,IAAI,CAAC,eAAe,GAAG,cAAc;UACrC,OAAO,IAAI;QACb;MAEA,KAAK,UAAU;MACf,KAAK,UAAU;QACb,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,OAAO,IAAI;MAEb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,iBAAiB;QACpB,OAAO,KAAK;MACd,KAAK,gBAAgB;QAAE;UACrB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC3E,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ;YACpC,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ;UACtC;UACA;UACA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;UAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;YACnB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;cACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;cAC7B,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI;gBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe;cAC5C,CAAC,CAAC;YACJ,CAAC,MAAM;cACL,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe;YACzC;UACF,CAAC,CAAC;UACF,OAAO,IAAI;QACb;MACA,KAAK,UAAU;MACf,KAAK,UAAU;QAAE;UACf,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;UACpC,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI;YAC/B,KAAK,OAAO;YACZ,KAAK,YAAY;cACf,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;cAC/B;YACF,KAAK,SAAS;cACZ,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;cAC7B;YACF,KAAK,MAAM;cACT,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;cAChD;YACF;cACE;UACJ;UACA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;UAC3C,IAAI,CAAC,QAAQ,GAAG,SAAS;UACzB,OAAO,IAAI;QACb;MACA;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,oBAAoB;;;;;AChQrC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;QAAC,GAAG,EAAE;MAAK,CAAC,CAAC;IAC/C;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG;MAChC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;AC5B/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,YAAY,SAAS,SAAS,CAAC;EACnC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;QAAC,MAAM,EAAE,KAAK,CAAC;MAAG,CAAC,CAAC;IACnD;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;QAC7B,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;AChC7B;AACA,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAEpD,MAAM,yBAAyB,GAAG,OAAO,CAAC,4CAA4C,CAAC;AAEvF,MAAM,QAAQ,SAAS,cAAc,CAAC;EACpC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,GAAG,GAAG;MACT,4BAA4B,EAAG,IAAI,CAAC,sBAAsB,GAAG,IAAI,yBAAyB,CAAC;IAC7F,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEA,UAAU,CAAC,KAAK,EAAE;IAChB,OAAO,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC;EAC7E;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,OAAO,CAAC;EAC5E;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE;MACxB,GAAG,EAAE,wCAAwC;MAC7C,WAAW,EAAE;IACf,CAAC,CAAC;IAEF,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,sBAAsB,CAAC;IAE3E,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,EAAG;IACf,OAAO,CAAC,CAAC;EACX;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK;EACjC;AACF;AAEA,MAAM,WAAW,SAAS,cAAc,CAAC;EACvC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,GAAG,EAAG,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC;IAChC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;EAClC;EAEA,UAAU,CAAC,KAAK,EAAE;IAChB,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;EACnC;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;MAC3B;IACF;IAEA,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IACjC,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,cAAc,CAAA,EAAG;IACf,OAAO,CAAC,CAAC;EACX;EAEA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;IAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;EACzC;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,WAAW;;;;;ACrF5B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,SAAS,CAAC,WAAW,CAAC,CAAC;MAEvB,IAAI,SAAS,GAAG,KAAK;MAErB,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC;MAClC,IAAI,KAAK,CAAC,cAAc,EAAE;QACxB,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,GAAG,CAAC;QAC7C,SAAS,GAAG,IAAI;MAClB;MACA,IAAI,KAAK,CAAC,gBAAgB,EAAE;QAC1B,SAAS,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC;QAC/C,SAAS,GAAG,IAAI;MAClB;MACA,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;QAC1D,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;QACtD,SAAS,GAAG,IAAI;MAClB;MACA,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;QAC1D,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;QACtD,SAAS,GAAG,IAAI;MAClB;MACA,IAAI,KAAK,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE;QAC5D,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC;QACxD,SAAS,GAAG,IAAI;MAClB;MACA,IAAI,KAAK,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE;QAC5D,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC;QACxD,SAAS,GAAG,IAAI;MAClB;MACA,IAAI,KAAK,CAAC,WAAW,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC9D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC;QAC1D,SAAS,GAAG,IAAI;MAClB;MACA,IAAI,KAAK,CAAC,WAAW,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC9D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC;QAC1D,SAAS,GAAG,IAAI;MAClB;MAEA,IAAI,SAAS,EAAE;QACb,SAAS,CAAC,SAAS,CAAC,CAAC;QACrB,SAAS,CAAC,MAAM,CAAC,CAAC;MACpB,CAAC,MAAM;QACL,SAAS,CAAC,QAAQ,CAAC,CAAC;MACtB;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,cAAc;QACjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;UAClC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC;QAC/E;QACA,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;UACpC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC;QACnF;QACA,OAAO,IAAI;MAEb,KAAK,WAAW;QACd,IAAI,CAAC,WAAW,GAAG,WAAW;QAC9B,OAAO,IAAI;MAEb,KAAK,WAAW;QACd,IAAI,CAAC,WAAW,GAAG,WAAW;QAC9B,OAAO,IAAI;MAEb,KAAK,YAAY;QACf,IAAI,CAAC,WAAW,GAAG,YAAY;QAC/B,OAAO,IAAI;MAEb,KAAK,YAAY;QACf,IAAI,CAAC,WAAW,GAAG,YAAY;QAC/B,OAAO,IAAI;MAEb,KAAK,aAAa;QAChB,IAAI,CAAC,WAAW,GAAG,aAAa;QAChC,OAAO,IAAI;MAEb,KAAK,aAAa;QAChB,IAAI,CAAC,WAAW,GAAG,aAAa;QAChC,OAAO,IAAI;MAEb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,WAAW;MACtB,KAAK,WAAW;QACd,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI;QAC3B;MAEF,KAAK,WAAW;QACd,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI;QAC3B;MAEF,KAAK,YAAY;QACf,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;QAC5B;MAEF,KAAK,YAAY;QACf,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;QAC5B;MAEF,KAAK,aAAa;QAChB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI;QAC7B;MAEF,KAAK,aAAa;QAChB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI;QAC7B;MAEF;QACE;IACJ;EACF;EAEA,UAAU,CAAA,EAAG;IACX,QAAQ,IAAI,CAAC,WAAW;MACtB,KAAK,WAAW;MAChB,KAAK,WAAW;MAChB,KAAK,YAAY;MACjB,KAAK,YAAY;MACjB,KAAK,aAAa;MAClB,KAAK,aAAa;QAChB,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,OAAO,IAAI;MAEb;QACE,OAAO,KAAK;IAChB;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;ACjJlC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;MAC9B,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;QAC9B,GAAG,EAAE,KAAK,CAAC,OAAO;QAClB,MAAM,EAAE,KAAK,CAAC,GAAG;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC;MAClB,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;QAC9B,GAAG,EAAE,KAAK,CAAC,OAAO;QAClB,MAAM,EAAE,KAAK,CAAC,GAAG;QACjB,OAAO,EAAE,KAAK,CAAC;MACjB,CAAC,CAAC;IACJ;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAI,CAAC,KAAK,GAAG;QACX,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG;QAC5B,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC5B,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;MAC3B,CAAC;;MAED;MACA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ;MAC9C;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;EAEA,cAAc,CAAC,KAAK,EAAE;IACpB;IACA,OAAO,KAAK,CAAC,MAAM,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;EACpE;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;ACrD/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;MAAC,GAAG,EAAE;IAAK,CAAC,CAAC;EAC/C;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG;MAChC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;AC1B/B,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAE9C,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;AACpD,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAE3C,MAAM,MAAM,CAAC;EACX,WAAW,CAAA,EAAG;IACZ;IACA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;EAClB;EAEA,GAAG,CAAC,KAAK,EAAE;IACT;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;MAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;IAC1D,CAAC,MAAM;MACL,MAAM,KAAK,GAAI,GAAE,KAAK,CAAC,MAAO,IAAG,KAAK,CAAC,OAAQ,EAAC;MAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;IAC9C;EACF;EAEA,IAAI,UAAU,CAAA,EAAG;IACf,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;EACjD;EAEA,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE;IAC1B;IACA,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI;MAC1B,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;MACzC,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;UACxD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;UAC7B,IAAI,CAAC,IAAI,EAAE;YACT;YACA,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;cACb,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;cAC1B,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;YACtC,CAAC;UACH,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;YAC9C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;UAC7B;QACF;MACF;IACF,CAAC,CAAC;EACJ;EAEA,gBAAgB,CAAC,OAAO,EAAE;IACxB;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,OAAO,KAAK,IAAI,KAAK,CAAC,EAAE;EAC1B;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,MAAM;;;;;ACvDvB,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,SAAS,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,WAAW;AAErD,MAAM,sBAAsB,SAAS,SAAS,CAAC;EAC7C,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE;MAC7E,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;QAC3B,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS;QACpF,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG;MAC7E,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,CAAC,KAAK,GAAG;QACX,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GACjD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,GAC7C,SAAS;QACb,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,GACjD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,GAC7C;MACN,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,sBAAsB;;;;;AC1CvC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,eAAe,SAAS,SAAS,CAAC;EACtC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;EAClC;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;MACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG;MAChC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;;;AC1BhC,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,gBAAgB,SAAS,SAAS,CAAC;EACvC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,MAAM,UAAU,GAAG;QACjB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC;MAChB,CAAC;MACD,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE;QACpD,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC;MAC1C;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,CAAC;UAC7C,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC;UAC/C,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC;UAC5C,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC;UAClD,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC;UACjD,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG;QAClD,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,gBAAgB;;;;;AChDjC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,wBAAwB,SAAS,SAAS,CAAC;EAC/C,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE;MAC5B,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;QAC3B,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,GAAG,GAAG;MACrC,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,CAAC,KAAK,GAAG;QACX,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK;MAC3C,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,wBAAwB;;;;;AClCzC,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B,OAAO,KAAK,GAAG,GAAG,GAAG,SAAS;AAChC;AACA,SAAS,cAAc,CAAC,KAAK,EAAE;EAC7B,QAAQ,KAAK;IACX,KAAK,cAAc;MACjB,OAAO,KAAK;IACd;MACE,OAAO,SAAS;EACpB;AACF;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;EAChC,QAAQ,KAAK;IACX,KAAK,OAAO;IACZ,KAAK,YAAY;MACf,OAAO,KAAK;IACd;MACE,OAAO,SAAS;EACpB;AACF;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC1B,QAAQ,KAAK;IACX,KAAK,MAAM;IACX,KAAK,OAAO;IACZ,KAAK,IAAI;MACP,OAAO,KAAK;IACd;MACE,OAAO,SAAS;EACpB;AACF;AACA,SAAS,eAAe,CAAC,KAAK,EAAE;EAC9B,OAAO,KAAK,KAAK,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,SAAS;AAC9D;AAEA,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,MAAM,UAAU,GAAG;QACjB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;QAC1C,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;QAChD,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;QAChC,YAAY,EAAE,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC;QACnD,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;QACjC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,kBAAkB,EAAE,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC;QACvD,kBAAkB,EAAE,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAC1D,MAAM,EAAE,KAAK,CAAC;MAChB,CAAC;MACD,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE;QACpD,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC;MAC1C;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;UACrD,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,UAAU;UACtD,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,YAAY,EAAE,EAAE,CAAC;UAC1E,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,YAAY,EAAE,EAAE,CAAC;UACtE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,cAAc;UACtD,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,GAAG;UACpD,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,GAAG;UACpC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,MAAM;UACpD,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,WAAW;UAC7C,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,KAAK,EAAE,EAAE,CAAC;UACnD,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,GAAG,EAAE,EAAE,CAAC;UAC3D,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,GAAG,EAAE,EAAE,CAAC;UAC7D,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,GAAG,EAAE,EAAE,CAAC;UACrE,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,KAAK,GAAG;UAC9D,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,KAAK,GAAG;UAC9D,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,EAAE,EAAE;QACpD,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;ACtG/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,YAAY,SAAS,SAAS,CAAC;EACnC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;QAAC,MAAM,EAAE,KAAK,CAAC;MAAG,CAAC,CAAC;IACnD;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;QAC7B,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;AChC7B,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B,OAAO,KAAK,GAAG,GAAG,GAAG,SAAS;AAChC;AAEA,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,MAAM,UAAU,GAAG;QACjB,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC/C,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;QAC5C,kBAAkB,EAAE,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAC1D,gBAAgB,EAAE,YAAY,CAAC,KAAK,CAAC,gBAAgB;MACvD,CAAC;MACD,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE;QACpD,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC;MAC1C;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,GAAG;UACnD,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,GAAG;UAChD,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,KAAK,GAAG;UAC9D,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,KAAK;QACzD,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;AChDlC,YAAY;;AAEZ,MAAM,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,WAAW,CAAA,EAAG;IACZ,MAAM,OAAO,GAAG;MACd,GAAG,EAAE,WAAW;MAChB,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,IAAI,eAAe,CAAC;IAClC,CAAC;IACD,KAAK,CAAC,OAAO,CAAC;EAChB;;EAEA;;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;MACzB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;MACpC,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACjD,SAAS,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC;MAC1D;MAEA,MAAM;QAAC;MAAU,CAAC,GAAG,IAAI;MACzB,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI;QAC1B,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC;MAC1C,CAAC,CAAC;MAEF,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;MACrB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;ACtC/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AAEzC,MAAM,QAAQ,SAAS,SAAS,CAAC;EAC/B,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,QAAQ;IAC3C,IAAI,CAAC,GAAG,GAAG;MACT,CAAC,EAAE,IAAI,SAAS,CAAC;IACnB,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;IACzD,IAAI,OAAO,EAAE;MACX,KAAK,CAAC,OAAO,GAAG,OAAO;IACzB;IACA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI;MAC/B,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;IACvC,CAAC,CAAC;EACJ;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;IAChC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzB,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;MAC1C,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC;IAC7C;IACA,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;IACvC;IACA,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;MAC5D,SAAS,CAAC,YAAY,CAAC,OAAO,EAAG,GAAE,KAAK,CAAC,GAAI,IAAG,KAAK,CAAC,GAAI,EAAC,CAAC;IAC9D;IACA,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;MAC1C,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC;IAC7C;IACA,SAAS,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACjD,IAAI,KAAK,CAAC,YAAY,EAAE;MACtB,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC;IAC5D;IACA,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1C;IAEA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI;MAC/B,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;IACjD,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;MACvB,IAAI,CAAC,WAAW,IAAI,CAAC;MACrB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAChE,CAAC,SAAS,EAAE,SAAS,CAAC;MAC1B,MAAM,KAAK,GAAI,IAAI,CAAC,KAAK,GAAG;QAC1B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC;QACvC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACb,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACb,KAAK,EAAE;MACT,CAAE;MACF,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE;QACrB,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC;MACjD;MACA,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;QAC9C,KAAK,CAAC,MAAM,GAAG,IAAI;MACrB;MACA,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC/C,KAAK,CAAC,OAAO,GAAG,IAAI;MACtB;MACA,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;QACtB,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;MAC/C;MACA,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;QAChC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC;MACjE;MACA,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACjD,KAAK,CAAC,SAAS,GAAG,IAAI;MACxB;MACA,OAAO,IAAI;IACb;IAEA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;UAC5D,MAAM,IAAI,KAAK,CAAE,qBAAoB,IAAI,CAAC,QAAS,YAAW,CAAC;QACjE;QACA,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;MAC/B,KAAK,CAAC,OAAO,GAAG,SAAS;IAC3B;IAEA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI;MAC/B,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;IACzC,CAAC,CAAC;EACJ;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,QAAQ;;;;;AC7IzB,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,0BAA0B,SAAS,SAAS,CAAC;EACjD,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,eAAe;EACxB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,MAAM,UAAU,GAAG;QACjB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,iBAAiB,EAAE,KAAK,CAAC;MAC3B,CAAC;MACD,IAAI,KAAK,CAAC,eAAe,EAAE;QACzB,UAAU,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe;MACpD;;MAEA;MACA,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,KAAK,EAAE,EAAE;QAC5D,UAAU,CAAC,YAAY,GAAG,GAAG;MAC/B;MAEA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE;QACpD,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC;MACjD;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE;MACjC,IAAI,CAAC,KAAK,GAAG;QACX,gBAAgB,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,IAAI,GAAG,CAAC;QACrE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC;QAChE,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,GAAG,EAAE,EAAE,CAAC;QACrE,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,GAAG,EAAE,EAAE;MACtE,CAAC;MACD,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE;QACnC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;MAC1E;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,0BAA0B;;;;;ACtD3C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAClD,MAAM,wBAAwB,GAAG,OAAO,CAAC,+BAA+B,CAAC;AACzE,MAAM,sBAAsB,GAAG,OAAO,CAAC,4BAA4B,CAAC;AAEpE,MAAM,oBAAoB,SAAS,SAAS,CAAC;EAC3C,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,QAAQ,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC;MACpC,WAAW,EAAE,IAAI,wBAAwB,CAAC,CAAC;MAC3C,SAAS,EAAE,IAAI,sBAAsB,CAAC;IACxC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,SAAS,CAAC,WAAW,CAAC,CAAC;MACvB,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;MAE7B,IAAI,KAAK,GAAG,KAAK;MACjB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK;MACpE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK;MACxE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,IAAI,KAAK;MAE9E,IAAI,KAAK,EAAE;QACT,SAAS,CAAC,SAAS,CAAC,CAAC;QACrB,SAAS,CAAC,MAAM,CAAC,CAAC;MACpB,CAAC,MAAM;QACL,SAAS,CAAC,QAAQ,CAAC,CAAC;MACtB;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,CAAC,KAAK,CAAC,CAAC;MACZ,OAAO,IAAI;IACb;IACA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;MACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE;MACrF,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;MACf,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;QAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK;MAC/C;MACA,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE;QAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK;MACnD;MACA,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE;QAC5B,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK;MACzD;IACF,CAAC,MAAM;MACL,IAAI,CAAC,KAAK,GAAG,IAAI;IACnB;IACA,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,oBAAoB;;;;;ACzFrC,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,SAAS,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE;EAClC,OAAO,KAAK,GAAG,KAAK,GAAG,SAAS;AAClC;AAEA,SAAS,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE;EACnC,OAAO,KAAK,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS;AAC5C;AAEA,MAAM,oBAAoB,SAAS,SAAS,CAAC;EAC3C,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,iBAAiB;EAC1B;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,MAAM,UAAU,GAAG;QACjB,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;QACrC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,KAAK,KAAK,GAAG,GAAG,GAAG,SAAS;QACtE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,KAAK,KAAK,GAAG,GAAG,GAAG,SAAS;QAC1E,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;QACjD,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC;QACrD,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;QAC/C,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC;QACrD,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;QAC/C,gBAAgB,EAAE,YAAY,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC;QAC3D,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC;QACrD,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;QAC/C,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC;QACnC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;QAC/C,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG;MAClD,CAAC;MACD,IAAI,KAAK,CAAC,KAAK,EAAE;QACf,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;QAC9C,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;QACtC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;QACtC,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;QACtC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE,GAAG,CAAC;QAC/D,UAAU,CAAC,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,GAAG,CAAC;MACrE;MACA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE;QACpD,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC;MAC1C;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;UAC/C,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,GAAG,GAAG,KAAK,GAAG,SAAS;UAC5D,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,GAAG,GAAG,KAAK,GAAG,SAAS;UAChE,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,KAAK,GAAG,GAAG,KAAK,GAAG,SAAS;UAChF,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB,KAAK,GAAG,GAAG,KAAK,GAAG,SAAS;UACpF,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC;UAC3D,aAAa,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC;UAC/D,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;UACzD,aAAa,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC;UAC/D,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;UACzD,gBAAgB,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,GAAG,CAAC;UACrE,aAAa,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC;UAC/D,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;UACzD,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;UAC7C,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;UACzD,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG;QAC5D,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;UACjC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;UACxD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;UAChD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;UAChD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;QAChE;QACA,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,oBAAoB;;;;;ACxFrC,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;AACpD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,WAAW,GAAG;EAClB,MAAM,EAAE,QAAQ;EAChB,WAAW,EAAE,QAAQ;EACrB,KAAK,EAAE;AACT,CAAC;AAED,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,OAAO,CAAC,KAAK,EAAE;IACb,QAAQ,KAAK,CAAC,KAAK;MACjB,KAAK,QAAQ;MACb,KAAK,OAAO;QACV;MACF;QACE,KAAK,CAAC,KAAK,GAAG,QAAQ;QACtB;IACJ;EACF;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;MAC9B,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI;IAC1C,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,SAAA,CAAS,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;MAC1C,IAAI,QAAQ,EAAE;QACZ,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;MACrC;IACF,CAAC;IACD,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC;IACnD,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC;IAC1C,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC;IAChD,GAAG,CAAC,mBAAmB,EAAE,GAAG,EAAE,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC;IAChE,GAAG,CAAC,eAAe,EAAE,GAAG,EAAE,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC;IACxD,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IAClD,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC;IACpE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IAErC,IAAI,WAAW;IACf,IAAI,MAAM;IACV,IAAI,MAAM;IACV,IAAI,UAAU;IACd,QAAQ,KAAK,CAAC,KAAK;MACjB,KAAK,QAAQ;QACX,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;QAC1B,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;QAC1B,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO;QACtF,UAAU,GACP,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,aAAa,IAC7C,KAAK,CAAC,MAAM,IAAI,UAAW,IAC5B,YAAY;QAEd,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;UACzB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;UACjC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;UACjC,WAAW;UACX,UAAU;UACV,KAAK,EAAE;QACT,CAAC,CAAC;QACF,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;UAC9B,IAAI,EAAE,UAAU;UAChB,UAAU,EAAE,KAAK,CAAC,UAAU;UAC5B,KAAK,EAAE,KAAK,CAAC;QACf,CAAC,CAAC;QACF;MACF,KAAK,OAAO;QACV,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE;UAClC,KAAK,CAAC,UAAU,GAAG,SAAS;QAC9B;QACA,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;UACzB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;UACjC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;UACjC,WAAW,EAAE,KAAK,CAAC,WAAW;UAC9B,UAAU,EAAE,KAAK,CAAC;QACpB,CAAC,CAAC;QACF,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;UAC9B,IAAI,EAAE,KAAK,CAAC,UAAU;UACtB,UAAU,EAAE,KAAK,CAAC,UAAU;UAC5B,KAAK,EAAE,KAAK,CAAC;QACf,CAAC,CAAC;QACF;MACF,KAAK,QAAQ;QACX,IAAI,KAAK,CAAC,UAAU,EAAE;UACpB,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,KAAK,EAAE,KAAK,CAAC;UACf,CAAC,CAAC;QACJ;QACA;MACF;QACE;IACJ;IACA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,WAAW;QACd,IAAI,CAAC,SAAS,GAAG;UACf,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;UAC5D,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,KAAK,GAAG;UAChD,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,KAAK,GAAG;UAChD,SAAS,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,GAAG,CAAC;UAC/C,iBAAiB,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,KAAK,GAAG,CAAC;UAC/D,aAAa,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,GAAG,CAAC;UACvD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,KAAK,EAAE,EAAE,CAAC;UAC3D,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,KAAK,EAAE,EAAE,CAAC;UACvE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,SAAS;QACrB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,OAAO,IAAI;MAEb,KAAK,MAAM;QACT,IAAI,CAAC,IAAI,GAAG;UACV,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC;UACnD,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC;UACnD,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;UACxC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,SAAS;UACnD,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QACD,OAAO,IAAI;MAEb,KAAK,WAAW;QAAE;UAChB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS;UAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG;YACtB,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;UAC9B,CAAC;UACD,OAAO,IAAI;QACb;MAEA;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,KAAK;IACT,IAAI,SAAS;IACb,QAAQ,IAAI;MACV,KAAK,WAAW;QACd,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE;UAC/B,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YACnB,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc;YAC7C,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW;YACvC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO;YAAE;YAChD,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACxB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACxB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;YACnC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB;YACnD,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa;YAC3C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;YACnC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;UAClC,CAAC;UACD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE;YAChC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU;UACzC;UACA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;UACjD,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE;YACrC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU;UACzC;UACA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;UACpC;QACF,CAAC,MAAM;UACL,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YACnB,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc;YAC7C,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW;YACvC,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;YACnC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB;YACnD,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa;YAC3C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;YACnC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;UAClC,CAAC;UACD,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;UACnC,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE;YACrC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU;UACzC;UACA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;UACpC;QACF;QACA,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;AACf;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;ACzM/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;QAAC,MAAM,EAAE,KAAK,CAAC;MAAG,CAAC,CAAC;IACnD;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;QAC7B,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;AChC/B,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAE9C,MAAM,QAAQ,GAAG,OAAO,CAAC,0BAA0B,CAAC;AACpD,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAEtD,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;AACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;AACvC,MAAM,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC;AACnD,MAAM,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC;AACnD,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACpD,MAAM,oBAAoB,GAAG,OAAO,CAAC,0BAA0B,CAAC;AAChE,MAAM,oBAAoB,GAAG,OAAO,CAAC,0BAA0B,CAAC;AAChE,MAAM,0BAA0B,GAAG,OAAO,CAAC,iCAAiC,CAAC;AAC7E,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACpD,MAAM,oBAAoB,GAAG,OAAO,CAAC,0BAA0B,CAAC;AAChE,MAAM,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;AACxD,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACpD,MAAM,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC1D,MAAM,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACtD,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACpD,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACpD,MAAM,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC1D,MAAM,2BAA2B,GAAG,OAAO,CAAC,oCAAoC,CAAC;AACjF,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAE/C,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK;EACnC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;IACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE;MACjD,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ;IACtB;EACF,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK;EACvD;EACA;EACA;EACA,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;IACjC,OAAO,KAAK;EACd;EACA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IAC3B,OAAO,QAAQ;EACjB;;EAEA;EACA,MAAM,KAAK,GAAG,CAAC,CAAC;EAChB,MAAM,OAAO,GAAG,CAAC,CAAC;EAClB,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI;IAClB,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE;IAClB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI;MACvB,MAAM;QAAC;MAAK,CAAC,GAAG,IAAI;MACpB,IAAI,KAAK,EAAE;QACT,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;MACvB;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI;IACxB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI;MAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;MACnC,IAAI,IAAI,EAAE;QACR;QACA,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;MAC1B,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC3B;QACA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;MACtC,CAAC,MAAM;QACL;QACA,KAAK,CAAC,IAAI,CAAC;UACT,GAAG,EAAE,KAAK,CAAC,GAAG;UACd,KAAK,EAAE,CAAC,OAAO;QACjB,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACA,OAAO,KAAK;AACd,CAAC;AAED,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,MAAM;MAAC,OAAO;MAAE,OAAO;MAAE;IAAW,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,EAAE;IAEpC,IAAI,CAAC,GAAG,GAAG;MACT,OAAO,EAAE,IAAI,oBAAoB,CAAC,CAAC;MACnC,SAAS,EAAE,IAAI,cAAc,CAAC,CAAC;MAC/B,UAAU,EAAE,IAAI,SAAS,CAAC;QACxB,GAAG,EAAE,YAAY;QACjB,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,IAAI,cAAc,CAAC;MACjC,CAAC,CAAC;MACF,aAAa,EAAE,IAAI,0BAA0B,CAAC,CAAC;MAC/C,IAAI,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM;QAAE,KAAK,EAAE,KAAK;QAAE,UAAU,EAAE,IAAI,QAAQ,CAAC;MAAC,CAAC,CAAC;MAC5E,SAAS,EAAE,IAAI,SAAS,CAAC;QACvB,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAI,QAAQ,CAAC;UAAC,QAAQ,EAAE;QAAO,CAAC,CAAC;QAC7C,QAAQ,EAAE;MACZ,CAAC,CAAC;MACF,UAAU,EAAE,IAAI,eAAe,CAAC,CAAC;MACjC,UAAU,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,YAAY;QAAE,KAAK,EAAE,IAAI;QAAE,UAAU,EAAE,IAAI,cAAc,CAAC;MAAC,CAAC,CAAC;MAC7F,SAAS,EAAE,IAAI,cAAc,CAAC,CAAC;MAC/B,UAAU,EAAE,IAAI,SAAS,CAAC;QACxB,GAAG,EAAE,YAAY;QACjB,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,IAAI,cAAc,CAAC;MACjC,CAAC,CAAC;MACF,WAAW,EAAE,IAAI,gBAAgB,CAAC,CAAC;MACnC,eAAe,EAAE,IAAI,oBAAoB,CAAC,CAAC;MAC3C,SAAS,EAAE,IAAI,cAAc,CAAC,CAAC;MAC/B,YAAY,EAAE,IAAI,iBAAiB,CAAC,CAAC;MACrC,YAAY,EAAE,IAAI,iBAAiB,CAAC,CAAC;MACrC,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC;MAC3B,OAAO,EAAE,IAAI,YAAY,CAAC,CAAC;MAC3B,eAAe,EAAE,IAAI,oBAAoB,CAAC,CAAC;MAC3C,UAAU,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,YAAY;QAAE,KAAK,EAAE,IAAI;QAAE,UAAU,EAAE,IAAI,cAAc,CAAC;MAAC,CAAC,CAAC;MAC7F,qBAAqB,EAAE,IAAI,2BAA2B,CAAC,CAAC;MACxD,MAAM,EAAE,IAAI,YAAY,CAAC;IAC3B,CAAC;EACH;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,OAAO,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,EAAE;IAC1C,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,EAAE;IAEtC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,OAAO,CAAC,UAAU,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;IAC1C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,OAAO,CAAC;IAE7E,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU;;IAE5C;IACA,MAAM,IAAI,GAAI,KAAK,CAAC,IAAI,GAAG,EAAG;IAE9B,SAAS,OAAO,CAAC,CAAC,EAAE;MAClB,OAAQ,MAAK,CAAC,CAAC,MAAM,GAAG,CAAE,EAAC;IAC7B;IAEA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI;MACpC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;MACzB,SAAS,CAAC,GAAG,GAAG,GAAG;MACnB,IAAI,CAAC,IAAI,CAAC;QACR,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,OAAO,CAAC,SAAS;QACvB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,UAAU,EAAE;MACd,CAAC,CAAC;IACJ,CAAC,CAAC;;IAEF;IACA,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;MAC7B,MAAM,OAAO,GAAG;QACd,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC,QAAQ;QACtB,MAAM,EAAG,cAAa,KAAK,CAAC,EAAG;MACjC,CAAC;MACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;MAClB,MAAM,UAAU,GAAG;QACjB,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC,UAAU;QACxB,MAAM,EAAG,yBAAwB,KAAK,CAAC,EAAG;MAC5C,CAAC;MACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;MAErB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI;QAC7B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;MACpD,CAAC,CAAC;MAEF,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QACvB,WAAW,EAAG,WAAU,KAAK,CAAC,EAAG,EAAC;QAClC,UAAU,EAAG,aAAY,KAAK,CAAC,EAAG;MACpC,CAAC,CAAC;IACJ;IAEA,MAAM,eAAe,GAAG,EAAE;IAC1B,IAAI,SAAS;IACb,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI;MAC5B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC;UACR,EAAE,EAAE,GAAG;UACP,IAAI,EAAE,OAAO,CAAC,KAAK;UACnB,MAAM,EAAG,YAAW,SAAS,CAAC,IAAK,IAAG,SAAS,CAAC,SAAU;QAC5D,CAAC,CAAC;QACF,KAAK,CAAC,UAAU,GAAG;UACjB;QACF,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;MAC7C,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QAClC,IAAI;UAAC;QAAO,CAAC,GAAG,KAAK;QACrB,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE;UACZ,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG;YACxB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC;YAClB,IAAI,EAAG,UAAS,EAAE,OAAO,CAAC,aAAc,EAAC;YACzC,OAAO,EAAE,EAAE;YACX,IAAI,EAAE;UACR,CAAC;UACD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;UAC9B,IAAI,CAAC,IAAI,CAAC;YACR,EAAE,EAAE,OAAO,CAAC,GAAG;YACf,IAAI,EAAE,6EAA6E;YACnF,MAAM,EAAG,eAAc,OAAO,CAAC,IAAK;UACtC,CAAC,CAAC;QACJ;QACA,IAAI,QAAQ,GACV,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7G,IAAI,CAAC,QAAQ,EAAE;UACb,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;UAChC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,QAAQ;UAC/C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,2EAA2E;YACjF,MAAM,EAAG,YAAW,SAAS,CAAC,IAAK,IAAG,SAAS,CAAC,SAAU;UAC5D,CAAC,CAAC;QACJ;QAEA,MAAM,MAAM,GAAG;UACb,OAAO,EAAE;YACP,GAAG,EAAE;UACP,CAAC;UACD,KAAK,EAAE,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE;UACpD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;UAC1C,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,YAAY;UACnD,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG;YAC1B,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO;YAClC,GAAG,EAAE;UACP,CAAC;UACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,OAAO,CAAC,SAAS;YACvB,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS;YACnC,UAAU,EAAE;UACd,CAAC,CAAC;QACJ;QACA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO;QAChC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;MAC9B;IACF,CAAC,CAAC;;IAEF;IACA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;MAC5B;MACA,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;MACzB,KAAK,CAAC,GAAG,GAAG,GAAG;MACf,IAAI,CAAC,IAAI,CAAC;QACR,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,OAAO,CAAC,KAAK;QACnB,MAAM,EAAG,aAAY,KAAK,CAAC,MAAO;MACpC,CAAC,CAAC;;MAEF;MACA,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI;QAC9B,MAAM;UAAC;QAAK,CAAC,GAAG,MAAM;QACtB,IAAI,KAAK,EAAE;UACT,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;QAClD;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;;IAEF;IACA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;EACzC;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,oBAAoB,CAAC;IAEpE,MAAM,0BAA0B,GAAG,KAAK,CAAC,UAAU,GAC/C;MACE,gBAAgB,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB;MACnD,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS;MACrC,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC,eAAe;MACjD,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC;IACpC,CAAC,GACD,SAAS;IACb,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE;MACxD,0BAA0B,CAAC,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe;IAC/E;IACA,MAAM,oBAAoB,GAAG;MAC3B,iBAAiB,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,iBAAiB;MACzE,QAAQ,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ;MACvD,SAAS,EACP,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,GACxC;QACE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;MAC7B,CAAC,GACD;IACR,CAAC;IACD,MAAM,gBAAgB,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO;IACnE,MAAM,iBAAiB,GAAG;MACxB,iBAAiB,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,iBAAiB;MACvE,aAAa,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,aAAa;MAC/D,kBAAkB,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,kBAAkB;MACzE,gBAAgB,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC;IACvD,CAAC;IACD,MAAM,oBAAoB,GAAG,KAAK,CAAC,eAAe;IAElD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACxD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,0BAA0B,CAAC;IACpE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;IAC3C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChF,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC;;IAEjE;IACA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IAEvD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACxD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IACrD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;IAC3D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IACrD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;IAEnD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAExC,IAAI,KAAK,CAAC,IAAI,EAAE;MACd;MACA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,UAAU,EAAE;UACnC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE;YAAC,MAAM,EAAE,GAAG,CAAC;UAAE,CAAC,CAAC;QACvD;MACF,CAAC,CAAC;IACJ;IAEA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;MAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;MACf,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IAEA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MAChE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;MACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,WAAW;QAAE;UAChB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,CAAC;UACrD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC7D,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ;UACvD;UACA,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACtE,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB;UACzE;UACA,MAAM,eAAe,GAAG;YACtB,SAAS,EACN,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IACrB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,IAChC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,IAC5C,KAAK;YACP,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;UAChC,CAAC;UACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;UACvG,MAAM,sBAAsB,GAAG,2BAA2B,CACxD,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,EACpC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAC7E,CAAC;UACD,IAAI,CAAC,KAAK,GAAG;YACX,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK;YACpC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK;YACzB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK;YAC9B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK;YACrC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK;YACrC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK;YAC/C,UAAU;YACV,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK;YAChC,SAAS;YACT,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK;YACzC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK;YAClC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK;YAC/B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK;YACjC;UACF,CAAC;UAED,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK;UACnD;UACA,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK;UAC7D;UAEA,OAAO,KAAK;QACd;MAEA;QACE;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB;IACA;IACA,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK;MAC1D,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;MACf,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,EAAE;QACjC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ;MACxD;MACA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ;QAC3D,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK;UACzC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC;MACJ;MACA,OAAO,CAAC;IACV,CAAC,EAAE,CAAC,CAAC,CAAC;IACN,OAAO,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;MAClE,IAAI,OAAO,CAAC,GAAG,EAAE;QACf,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO;MAC1B;MACA,OAAO,CAAC;IACV,CAAC,EAAE,CAAC,CAAC,CAAC;IACN,OAAO,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,KAAK;MACvE,IAAI,SAAS,CAAC,GAAG,EAAE;QACjB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM;MACnD;MACA,OAAO,CAAC;IACV,CAAC,EAAE,CAAC,CAAC,CAAC;IACN,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;;IAErB;IACA,KAAK,CAAC,IAAI,GAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAK,EAAE;IAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;MACxB,GAAG,CAAC,KAAK,GAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAK,EAAE;IAC5D,CAAC,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;IACjD,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,sBAAsB,EAAE,OAAO,CAAC;IAE/E,KAAK,CAAC,KAAK,GAAG,EAAE;IAChB,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;MAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC;MACpF,IAAI,KAAK,EAAE;QACT,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7C,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI;UAChC,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,MAAM,KAAK,GAAG;cACZ,IAAI,EAAE,OAAO;cACb,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;cAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;cACnB,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;YAC7B,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;UACzB;QACF,CAAC,CAAC;MACJ;IACF;IAEA,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;IACpE,IAAI,aAAa,EAAE;MACjB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;MACvD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;MAChE,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;UACf,IAAI,EAAE,YAAY;UAClB;QACF,CAAC,CAAC;MACJ;IACF;IAEA,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,SAAS,IAAI;MACnD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;MAC/B,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IACnC,CAAC,CAAC;IAEF,OAAO,KAAK,CAAC,aAAa;IAC1B,OAAO,KAAK,CAAC,UAAU;IACvB,OAAO,KAAK,CAAC,QAAQ;EACvB;AACF;AAEA,cAAc,CAAC,oBAAoB,GAAG;EACpC,KAAK,EAAE,2DAA2D;EAClE,SAAS,EAAE,qEAAqE;EAChF,UAAU,EAAE,6DAA6D;EACzE,cAAc,EAAE,OAAO;EACvB,aAAa,EAAE;AACjB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;AC1hB/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,YAAY,SAAS,SAAS,CAAC;EACnC,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;IACtB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;EAC1B;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;MAC5B,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,CAAC,KAAK,GAAG,IAAI;IACnB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;AC9B7B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;IACtB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IACxB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;IAC1B,IAAI,CAAC,OAAO,GACV,OAAO,CAAC,MAAM,IACd,UAAS,EAAE,EAAE;MACX,IAAI;QACF,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;QACzC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;MACzB,CAAC,CAAC,OAAO,CAAC,EAAE;QACV,OAAO,EAAE;MACX;IACF,CAAC;IACH,IAAI,CAAC,MAAM,GACT,OAAO,CAAC,KAAK,IACb,UAAS,GAAG,EAAE;MACZ,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC;IACtB,CAAC;EACL;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;MAC5B,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;MACrC;MACA,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;MACxD,CAAC,MAAM;QACL,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;MAC1C;MACA,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MACtD,CAAC,MAAM;QACL,IAAI,CAAC,IAAI,GAAG,EAAE;MAChB;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACtB;EACF;EAEA,UAAU,CAAA,EAAG;IACX,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C;IACA,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;ACjE1B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,YAAY,SAAS,SAAS,CAAC;EACnC,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;IACtB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IACxB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;;IAE1B;IACA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;EAC1B;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB;IACA,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;MACtB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;MAC5B,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;MACrC;MACA,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;MAC1C,CAAC,MAAM;QACL,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;MAC5B;MACA,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;MACvD,CAAC,MAAM;QACL,IAAI,CAAC,IAAI,GAAG,EAAE;MAChB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACtB;EACF;EAEA,UAAU,CAAA,EAAG;IACX,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACpD;IACA,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;ACxD7B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,WAAW,SAAS,SAAS,CAAC;EAClC,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG;IACtB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IACxB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;EAC5B;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;MAC5B,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;MACrC;MACA,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;MAC1C,CAAC,MAAM;QACL,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;MAC5B;MACA,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;MACzC,CAAC,MAAM;QACL,IAAI,CAAC,IAAI,GAAG,EAAE;MAChB;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACtB;EACF;EAEA,UAAU,CAAA,EAAG;IACX,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACjC;IACA,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,WAAW;;;;;AClD5B,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM,SAAS,GAAG,OAAO,CAAC,wBAAwB,CAAC;;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE;EAC/B,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;EACtC,IAAI,KAAK,CAAC,CAAC,EAAE;IACX,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI;MACvB,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;IACzB,CAAC,CAAC;EACJ;EACA,IAAI,KAAK,CAAC,CAAC,EAAE;IACX,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;EAC9B;EACA,SAAS,CAAC,SAAS,CAAC,CAAC;AACvB;AAEA,MAAM,WAAW,SAAS,SAAS,CAAC;EAClC,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;;IAEP;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,CAAC,MAAM,GAAG,KAAK;EACrB;EAEA,MAAM,CAAC,SAAS,EAAE;IAChB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;MACd,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;MAC9B,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;MAC1B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG;IACxB;IACA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;EAC/B;EAEA,SAAS,CAAA,EAAG;IACV,OAAO,IAAI;EACb;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG;QAClB,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,WAAW;;;;;AC/D5B,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAElD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA;AACA;;AAEA,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,CAAC,EAAE,IAAI,aAAa,CAAC,CAAC;MACtB,CAAC,EAAE,IAAI,SAAS,CAAC;IACnB,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,KAAK;EACd;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC;MACjB,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI;IAClB,CAAC,CAAC;IACF,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE;MAC/D,MAAM;QAAC;MAAC,CAAC,GAAG,IAAI,CAAC,GAAG;MACpB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI;QAC7B,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;MAC3B,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI,KAAK,EAAE;MAChB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;IAC1C;IACA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,MAAM;MAAC;IAAI,CAAC,GAAG,IAAI;IACnB,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,IAAI,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MACrB,IAAI,CAAC,KAAK,GAAG;QACX,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QACpC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE;MACrC,CAAC;MACD,OAAO,IAAI;IACb;IACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,QAAQ,IAAI;UACV,KAAK,GAAG;YAAE;cACR,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ;cAC5B,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;cAC/B;cACA,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;cAC1B;YACF;UACA,KAAK,GAAG;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;YACnC;UACF;YACE;QACJ;QACA,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;ACjGlC,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAEhD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,aAAa,SAAS,SAAS,CAAC;EACpC,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,KAAK,GAAG,KAAK;EACpB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,GAAG;EACZ;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;EAC/D;EAEA,IAAI,SAAS,CAAA,EAAG;IACd,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;EACzF;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK;IAE3B,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;IACvB,IAAI,KAAK,CAAC,IAAI,EAAE;MACd,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;IAC9C;IACA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;IAC5C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,GAAG;QACN,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,OAAO,IAAI;MACb,KAAK,GAAG;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb,KAAK,KAAK;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI;MACV,KAAK,GAAG;QACN,OAAO,KAAK;MACd,KAAK,GAAG;QACN,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QACnC,IAAI,CAAC,MAAM,GAAG,SAAS;QACvB,OAAO,IAAI;MACb,KAAK,KAAK;QACR,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QACnC,IAAI,CAAC,MAAM,GAAG,SAAS;QACvB,OAAO,IAAI;MACb;QACE,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAC9B;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEA,aAAa,CAAC,YAAY,GAAG;EAC3B,OAAO,EAAE,KAAK;EACd,WAAW,EAAE;AACf,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,aAAa;;;;;ACpG9B,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAClD,MAAM,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAE1D,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,KAAK,GAAG,KAAK;IAElB,IAAI,CAAC,GAAG,GAAG;MACT,CAAC,EAAE,IAAI,aAAa,CAAC,CAAC;MACtB,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC;MAClB,GAAG,EAAE,IAAI,iBAAiB,CAAC;IAC7B,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI;EACb;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE;MAC/D,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;QACzB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI;UAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;QACpC,CAAC,CAAC;MACJ,CAAC,MAAM;QACL,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;MAClC;IACF,CAAC,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;MAChD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IACrC;IACA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,MAAM;MAAC;IAAI,CAAC,GAAG,IAAI;IACnB,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,IAAI,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MACrB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;MACf,OAAO,IAAI;IACb;IACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,QAAQ,IAAI;UACV,KAAK,GAAG;YAAE;cACR,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ;cAC5B,IAAI,CAAC,EAAE,EAAE;gBACP,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;cAC/B;cACA,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;cAC1B;YACF;UACA,KAAK,GAAG;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;YAC9B;UACF;YACE;QACJ;QACA,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;ACrGlC,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAE1D,MAAM,kBAAkB,SAAS,SAAS,CAAC;EACzC,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI;MACpB,MAAM,EAAE,EAAE;MACV,KAAK,EAAE;IACT,CAAC;IACD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;EACjC;EAEA,IAAI,iBAAiB,CAAA,EAAG;IACtB,OAAO,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,kBAAkB,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC;EACvF;EAEA,IAAI,MAAM,CAAA,EAAG;IACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;EAC1B;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;EACjC;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;EACzB;EAEA,SAAS,CAAC,KAAK,EAAE;IACf,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;EACjC;EAEA,GAAG,CAAC,KAAK,EAAE;IACT,OAAO,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;EACvE;EAEA,OAAO,CAAC,KAAK,EAAE;IACb,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;MACnD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;IACA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IAClB,OAAO,KAAK;EACd;EAEA,WAAW,CAAC,KAAK,EAAE;IACjB;IACA,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/C,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;MACjD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;IACA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IAClB,OAAO,KAAK;EACd;;EAEA;EACA;EACA;EACA;EACA;;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO;IAC7B,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAE7C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE;MACxB,KAAK,EAAE,2DAA2D;MAClE,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB;IACjC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI;MACnC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC;IACpC,CAAC,CAAC;IACF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,KAAK;QACR,OAAO,IAAI;MACb,KAAK,IAAI;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB;QACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb;QACE,MAAM,IAAI,KAAK,CAAE,qCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,EAAC,CAAC;IAChF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QAClB,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,KAAK;QACR,OAAO,KAAK;MACd;QACE,MAAM,IAAI,KAAK,CAAE,sCAAqC,IAAK,EAAC,CAAC;IACjE;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,kBAAkB;;;;;AC9HnC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;;AAEA,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,GAAG;EACZ;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;IACvB,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;MAC5B,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC;IACjD;IACA,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;IAC1B,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,IAAI,KAAK,CAAA,EAAG;IACV,OAAO,IAAI,CAAC,KAAK,CACd,IAAI,CAAC,EAAE,CAAC,CACR,OAAO,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EACpF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,GAAG;QACN,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;EACvB;EAEA,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;AC3C1B,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAE3C,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,UAAU,GAAG;EACjB,gBAAgB,EAAE,CAChB,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,SAAS,CACV,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;IACjB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IACX,OAAO,CAAC;EACV,CAAC,EAAE,CAAC,CAAC,CAAC;EACN,UAAU,CAAC,KAAK,EAAE;IAChB,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,SAAS;EACzD,CAAC;EAED,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;IACrF,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IACX,OAAO,CAAC;EACV,CAAC,EAAE,CAAC,CAAC,CAAC;EACN,QAAQ,CAAC,KAAK,EAAE;IACd,IAAI,KAAK,KAAK,QAAQ,EAAE,OAAO,QAAQ;IACvC,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,SAAS;EACvD,CAAC;EACD,QAAQ,CAAC,KAAK,EAAE;IACd,OAAO,KAAK,GAAG,IAAI,GAAG,SAAS;EACjC,CAAC;EACD,WAAW,CAAC,KAAK,EAAE;IACjB,OAAO,KAAK,GAAG,IAAI,GAAG,SAAS;EACjC,CAAC;EACD,YAAY,CAAC,KAAK,EAAE;IAClB,QAAQ,KAAK;MACX,KAAK,UAAU;QACb,OAAO,KAAK;MACd;QACE,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7B,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,GAAG,SAAS;IAC1D;EACF,CAAC;EACD,MAAM,CAAC,KAAK,EAAE;IACZ,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;EAC3B,CAAC;EACD,YAAY,CAAC,KAAK,EAAE;IAClB,QAAQ,KAAK;MACX,KAAK,KAAK;QACR,OAAO,KAAK,CAAC,YAAY,CAAC,WAAW;MACvC,KAAK,KAAK;QACR,OAAO,KAAK,CAAC,YAAY,CAAC,WAAW;MACvC;QACE,OAAO,SAAS;IACpB;EACF;AACF,CAAC;AAED,MAAM,iBAAiB,GAAG;EACxB,KAAK,CAAC,YAAY,EAAE;IAClB,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC;IACpD,IAAI,YAAY,EAAE;MAChB,IAAI,YAAY,KAAK,UAAU,EAAE;QAC/B,OAAO,GAAG;MACZ;MAEA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;MACnC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACvB,OAAO,EAAE;MACX;MAEA,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACvB,OAAO,EAAE,GAAG,EAAE;MAChB;IACF;IACA,OAAO,SAAS;EAClB,CAAC;EACD,OAAO,CAAC,YAAY,EAAE;IACpB,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;IACvC,IAAI,EAAE,KAAK,SAAS,EAAE;MACpB,IAAI,EAAE,KAAK,GAAG,EAAE;QACd,OAAO,UAAU;MACnB;MACA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACvB,OAAO,EAAE;MACX;MACA,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE;QACxB,OAAO,EAAE,GAAG,EAAE;MAChB;IACF;IACA,OAAO,SAAS;EAClB;AACF,CAAC;;AAED;AACA,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,WAAW;EACpB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,WAAW,CAAC,CAAC;IACvB,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;IAE/B,IAAI,OAAO,GAAG,KAAK;IACnB,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;MACxB,IAAI,KAAK,EAAE;QACT,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;QACnC,OAAO,GAAG,IAAI;MAChB;IACF;IACA,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1D,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpD,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;IAClE,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;IAC3E,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAChE,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEhE,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,IAAI,OAAO,EAAE;MACX,SAAS,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC,MAAM;MACL,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,MAAM,KAAK,GAAG,CAAC,CAAC;IAEhB,IAAI,KAAK,GAAG,KAAK;IACjB,SAAS,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;MAChC,IAAI,MAAM,EAAE;QACV,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK;QACnB,KAAK,GAAG,IAAI;MACd;IACF;IACA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IACzE,GAAG,CACD,IAAI,CAAC,UAAU,CAAC,QAAQ,EACxB,UAAU,EACV,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QACrE,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvF,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAChG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3E,GAAG,CACD,IAAI,CAAC,UAAU,CAAC,YAAY,EAC5B,cAAc,EACd,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CACxD,CAAC;IACD,GAAG,CACD,IAAI,CAAC,UAAU,CAAC,YAAY,EAC5B,cAAc,EACd,IAAI,CAAC,UAAU,CAAC,YAAY,KAAK,GAAG,GAAG,KAAK,GAAG,KACjD,CAAC;IAED,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI;EACnC;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;AC3K/B;AACA,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAE7C,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;AAE3C,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,WAAW,CAAC,IAAI,EAAE;IAChB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAAC,GAAG,GAAG;MACT,KAAK,EAAE,IAAI,UAAU,CAAC;IACxB,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,IAAI;EAClB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE;IACrC,MAAM,KAAK,GAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAK,YAAY,IAAI,IAAI,CAAC,YAAY;IACzE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;MACxB,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;MAC5C,IAAI,KAAK,EAAE;QACT,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;MACzC;IACF;IACA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,IAAI;QAAE;UACd,MAAM;YAAC;UAAK,CAAC,GAAG,IAAI,CAAC,UAAU;UAC/B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,GAAG;cACX;YACF,CAAC;UACH,CAAC,MAAM;YACL,IAAI,CAAC,KAAK,GAAG,SAAS;UACxB;UACA,OAAO,IAAI;QACb;MACA,KAAK,OAAO;QACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IAEA,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;MACtB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;UACf,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACjB;QACA,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK;MACzC;IACF;IAEA,OAAO,KAAK;EACd;EAEA,UAAU,CAAC,KAAK,EAAE;IAChB,OAAO,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC;EAC1C;AACF;AAEA,SAAS,CAAC,gBAAgB,GAAG,CAC3B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,OAAO,CACR,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;EACjB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;EACX,OAAO,CAAC;AACV,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEN;AACA,MAAM,WAAW,SAAS,SAAS,CAAC;EAClC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,GAAG,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC;MACzB,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC;MAC3B,MAAM,EAAE,IAAI,SAAS,CAAC,QAAQ,CAAC;MAC/B,KAAK,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;MAC7B,QAAQ,EAAE,IAAI,SAAS,CAAC,UAAU;IACpC,CAAC;EACH;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,MAAM;MAAC;IAAK,CAAC,GAAG,KAAK;IACrB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC5B,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE;MAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE;QACrB,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC;MAC3C;MACA,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;QACvB,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC;MAC7C;IACF;IACA,SAAS,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE;MACjC,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;QAChD;QACA,SAAS,GAAG;UACV,GAAG,SAAS;UACZ,KAAK,EAAE,KAAK,CAAC;QACf,CAAC;MACH;MACA,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;IAC/C;IACA,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5B,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IAClC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;IAEtC,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,QAAQ;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAChE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QACpE,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;UAC3B,OAAO,IAAI;QACb;QACA,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,IAAI,IAAI,KAAK,QAAQ,EAAE;MACrB,MAAM,KAAK,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAE;MAC/B,MAAM,GAAG,GAAG,SAAA,CAAS,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE;QAC/C,IAAI,SAAS,EAAE;UACb,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC;UACtC;UACA,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;QACxB;MACF,CAAC;MACD,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;MAChC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;MAClC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;MAC9B,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;MACpC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;QAAC,EAAE,EAAE,IAAI,CAAC,UAAU;QAAE,IAAI,EAAE,IAAI,CAAC;MAAY,CAAC,CAAC;IAC1F;IACA,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,WAAW;;;;;AC9M5B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA,MAAM,UAAU,SAAS,SAAS,CAAC;EACjC,WAAW,CAAC,IAAI,EAAE;IAChB,KAAK,CAAC,CAAC;;IAEP;IACA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO;EAC7B;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,IAAI;EAClB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,EAAE;MACT,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;MAC7B,IAAI,KAAK,CAAC,IAAI,EAAE;QACd,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;MAC3C,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;QACpC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;UAC5B,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;QAC5C;MACF,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;QACtC,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;MAClD,CAAC,MAAM;QACL,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;MACrC;MACA,SAAS,CAAC,SAAS,CAAC,CAAC;MACrB,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;MAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;QACvB,IAAI,CAAC,KAAK,GAAG;UAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;QAAG,CAAC;MAC1C,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;QAChC,IAAI,CAAC,KAAK,GAAG;UAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE;QAAC,CAAC;QACzD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;UACxB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACpD;MACF,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QAClC,IAAI,CAAC,KAAK,GAAG;UAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE;QAAC,CAAC;MAC/D,CAAC,MAAM;QACL,IAAI,CAAC,KAAK,GAAG,SAAS;MACxB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,UAAU;;;;;AC9D3B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC;AACnD,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC;;AAErD;AACA;AACA;AACA;;AAEA;AACA,MAAM,QAAQ,SAAS,SAAS,CAAC;EAC/B,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,SAAS,EAAE,IAAI,cAAc,CAAC,CAAC;MAC/B,MAAM,EAAE,IAAI,WAAW,CAAC,CAAC;MACzB,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC;MACrB,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC;MACrB,MAAM,EAAE,IAAI,WAAW,CAAC,CAAC;MACzB,UAAU,EAAE,IAAI,eAAe,CAAC;IAClC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,KAAK;EACd;;EAEA;;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IAE5B,IAAI,KAAK,CAAC,IAAI,EAAE;MACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;IAC7C;IACA,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;MAClC,MAAM,WAAW,GAAG;QAAC,EAAE,EAAE,KAAK,CAAC,QAAQ;QAAE,UAAU,EAAE,KAAK,CAAC;MAAM,CAAC;MAClE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;IAChD;IACA,IAAI,KAAK,CAAC,IAAI,EAAE;MACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;IAC7C;IACA,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IACvD;IACA,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;IACjD;IACA,IAAI,KAAK,CAAC,UAAU,EAAE;MACpB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IACzD;IAEA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IAEA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX;QACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,IAAI,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MACrB,IAAI,CAAC,KAAK,GAAG;QACX,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK;QACnC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK;QAC7B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK;QACzB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK;QACzB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK;QAC7B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;MAClC,CAAC;MACD,OAAO,KAAK;IACd;IAEA,OAAO,IAAI;EACb;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,QAAQ;;;;;AC9GzB;AACA,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;AAE3C,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,KAAK,EAAE,IAAI,UAAU,CAAC;IACxB,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,MAAM;EACf;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC1B,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IAC7C,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,MAAM;QACT,IAAI,CAAC,KAAK,GAAG;UACX,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ;QAC/C,CAAC;QACD,OAAO,IAAI;MACb,KAAK,OAAO;QACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QACpC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AAEA,MAAM,gBAAgB,SAAS,SAAS,CAAC;EACvC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,OAAO,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC;MAClC,OAAO,EAAE,IAAI,UAAU,CAAC,SAAS;IACnC,CAAC;EACH;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,SAAS;EAClB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;IACjC,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC;IACpD,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IACnD;IACA,IAAI,KAAK,CAAC,OAAO,EAAE;MACjB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IACnD;IACA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,aAAa;QAChB,IAAI,CAAC,KAAK,GAAG;UACX,IAAI,EAAE,SAAS;UACf,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;UAC3B,OAAO,IAAI;QACb;QACA,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;UACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QACtC;QACA,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AAEA,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,IAAI,EAAE,IAAI,SAAS,CAAC;IACtB,CAAC;IACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EACF;;EAEA,IAAI,IAAI,CAAA,EAAG;IACT,OAAO,UAAU;EACnB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC;IAClC,QAAQ,KAAK,CAAC,QAAQ;MACpB,KAAK,OAAO;QACV,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;QAC9C;MACF,KAAK,MAAM;QACT,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;UACrB,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;UACjD,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;YACpC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;UACpD;QACF;QACA,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;UACtB,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACrD;QACA,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;UACpB,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;UAC/C,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;YACrC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;UACpD;QACF;QACA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;UACvB,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QACvD;QACA;MAEF;QACE;IACJ;IAEA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;IAC/B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI;MAC/B,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;IACxC,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,cAAc;QAAE;UACnB,MAAM,KAAK,GAAI,IAAI,CAAC,KAAK,GAAG;YAC1B,KAAK,EAAE;UACT,CAAE;UACF,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAC1B,KAAK,CAAC,QAAQ,GAAG,OAAO;YACxB,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;UACrD,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE;YAC1C,KAAK,CAAC,QAAQ,GAAG,MAAM;YACvB,KAAK,CAAC,MAAM,GAAG;cACb,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;cACjE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG;YAC/D,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;cAClD,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;YACpF;YACA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;cAClD,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;YACvF;UACF;UACA,OAAO,IAAI;QACb;MAEA,KAAK,MAAM;QACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;QAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MAEb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;;AAEA;AACA,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,WAAW,EAAE,IAAI,gBAAgB,CAAC,CAAC;MACnC,YAAY,EAAE,IAAI,iBAAiB,CAAC;IACtC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,MAAM;EACf;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,WAAW,CAAC,CAAC;IACvB,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC1B,QAAQ,KAAK,CAAC,IAAI;MAChB,KAAK,SAAS;QACZ,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;QAC7C;MACF,KAAK,UAAU;QACb,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;QAC9C;MACF;QACE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpB;IACJ;IACA,SAAS,CAAC,SAAS,CAAC,CAAC;IACrB,SAAS,CAAC,MAAM,CAAC,CAAC;EACpB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,MAAM;QACT,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;UAC3B,OAAO,IAAI;QACb;QACA,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;QAClC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,UAAU,CAAC,KAAK,EAAE;IAChB,OAAO,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC;EAC5C;AACF;AAEA,SAAS,CAAC,kBAAkB,GAAG,CAC7B,MAAM,EACN,OAAO,EACP,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,QAAQ,EACR,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,EACd,WAAW,CACZ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;EACjB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;EACX,OAAO,CAAC;AACV,CAAC,EAAE,CAAC,CAAC,CAAC;AAEN,SAAS,CAAC,SAAS,GAAG,SAAS;AAC/B,SAAS,CAAC,gBAAgB,GAAG,gBAAgB;AAC7C,SAAS,CAAC,iBAAiB,GAAG,iBAAiB;AAE/C,MAAM,CAAC,OAAO,GAAG,SAAS;;;AC3W1B,YAAY;;AAEZ,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;AAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,yBAAyB,CAAC;AACvD,MAAM,YAAY,GAAG,OAAO,CAAC,yBAAyB,CAAC;AACvD,MAAM,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC;AACrD,MAAM,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAEnD,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;;AAE1C;AACA,MAAM,SAAS,SAAS,SAAS,CAAC;EAChC,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,SAAS,CAAC,OAAO;IAE3C,IAAI,CAAC,GAAG,GAAG;MACT,CAAC,EAAE;QAAC,IAAI,EAAE,MAAM;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,GAAG;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MACnE,CAAC,EAAE;QAAC,IAAI,EAAE,QAAQ;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,GAAG;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MACrE,CAAC,EAAE;QAAC,IAAI,EAAE,WAAW;QAAE,KAAK,EAAE,IAAI,cAAc,CAAC;MAAC,CAAC;MACnD,OAAO,EAAE;QAAC,IAAI,EAAE,SAAS;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,SAAS;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MAClF,KAAK,EAAE;QAAC,IAAI,EAAE,OAAO;QAAE,KAAK,EAAE,IAAI,UAAU,CAAC;MAAC,CAAC;MAC/C,QAAQ,EAAE;QAAC,IAAI,EAAE,UAAU;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,UAAU;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MACrF,MAAM,EAAE;QAAC,IAAI,EAAE,QAAQ;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,QAAQ;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MAC/E,MAAM,EAAE;QAAC,IAAI,EAAE,QAAQ;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,QAAQ;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MAC/E,OAAO,EAAE;QAAC,IAAI,EAAE,SAAS;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,SAAS;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MAClF,SAAS,EAAE;QAAC,IAAI,EAAE,WAAW;QAAE,KAAK,EAAE,IAAI,WAAW,CAAC;UAAC,GAAG,EAAE,WAAW;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MACvF,MAAM,EAAE;QAAC,IAAI,EAAE,QAAQ;QAAE,KAAK,EAAE,IAAI,WAAW,CAAC;UAAC,GAAG,EAAE,QAAQ;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MAC9E,MAAM,EAAE;QAAC,IAAI,EAAE,QAAQ;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,QAAQ;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MAC/E,MAAM,EAAE;QAAC,IAAI,EAAE,QAAQ;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,QAAQ;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC,CAAC;MAC/E,EAAE,EAAE;QAAC,IAAI,EAAE,MAAM;QAAE,KAAK,EAAE,IAAI,YAAY,CAAC;UAAC,GAAG,EAAE,IAAI;UAAE,IAAI,EAAE;QAAK,CAAC;MAAC;IACtE,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG;MACnC,IAAI,EAAE,MAAM;MACZ,KAAK,EAAE,IAAI,WAAW,CAAC;QAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,IAAI,EAAE;MAAK,CAAC;IACrE,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;EAC7B;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,MAAM;MAAC;IAAG,CAAC,GAAG,IAAI;IAElB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACxC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK;MAC9B,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC;IACF,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK;MACvC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IACpC;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;MAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;MAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;MAC3C;MACA,IAAI,CAAC,MAAM,GAAG,SAAS;MACvB,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;QACvB,OAAO,KAAK;MACd;QACE,OAAO,IAAI;IACf;EACF;AACF;AAEA,SAAS,CAAC,OAAO,GAAG;EAClB,OAAO,EAAE,MAAM;EACf,WAAW,EAAE;AACf,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,SAAS;;;;;ACrG1B,MAAM,CAAC,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAC9C,MAAM,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAE5D,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,SAAS,kBAAkB,CAAA,EAAG;EAC5B,MAAM,IAAI,GAAG,CAAC,CAAC;EACf,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK;IACrC,IAAI,GAAG,CAAC,CAAC,EAAE;MACT,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChC;IACA;EACF,CAAC,CAAC;;EACF,OAAO,IAAI;AACb;AACA,MAAM,cAAc,GAAG,kBAAkB,CAAC,CAAC;;AAE3C;AACA,MAAM,WAAW,SAAS,SAAS,CAAC;EAClC,WAAW,CAAC,EAAE,EAAE,UAAU,EAAE;IAC1B,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,EAAE,GAAG,EAAE;IACZ,IAAI,CAAC,UAAU,GAAG,UAAU;EAC9B;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;MAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;MAAE,UAAU,EAAE,KAAK,CAAC;IAAU,CAAC,CAAC;EAClF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,QAAQ;QACX,IAAI,CAAC,KAAK,GAAG;UACX,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;UAC1C,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI;QACjE,CAAC;QACD,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,WAAW,CAAC,eAAe,GAAG,SAAS,eAAe,CAAC,UAAU,EAAE;EACjE,OAAO,cAAc,CAAC,UAAU,CAAC;AACnC,CAAC;AAED,WAAW,CAAC,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,QAAQ,EAAE;EACnE,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,WAAW;;;;;AC9D5B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,UAAU,GAAG;EACjB,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE;IACnB,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF,CAAC;;AAED;AACA,MAAM,eAAe,SAAS,SAAS,CAAC;EACtC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,WAAW,CAAC,CAAC;IACvB,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;IAEhC,IAAI,OAAO,GAAG,KAAK;IACnB,SAAS,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;MACxB,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;QACnC,OAAO,GAAG,IAAI;MAChB;IACF;IACA,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC;IACvE,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;IAExE,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,IAAI,OAAO,EAAE;MACX,SAAS,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC,MAAM;MACL,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,MAAM,KAAK,GAAG;MACZ,MAAM,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,GAAG,CAAC;MACzC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK;IACrC,CAAC;;IAED;IACA,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;IAEnD,IAAI,CAAC,KAAK,GAAG,aAAa,GAAG,KAAK,GAAG,IAAI;EAC3C;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;;;AC3DhC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC;AACnD,MAAM,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC;;AAErD;AACA;AACA;AACA;;AAEA;AACA,MAAM,UAAU,SAAS,SAAS,CAAC;EACjC,WAAW,CAAC,OAAO,EAAE;IACnB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACvC,IAAI,CAAC,GAAG,GAAG;MACT,SAAS,EAAE,IAAI,cAAc,CAAC,CAAC;MAC/B,UAAU,EAAE,IAAI,eAAe,CAAC;IAClC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,IAAI;EACb;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE;MACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC;MAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;MACzB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;MACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI;IAC9B,CAAC,CAAC;IACF,IAAI,IAAI,CAAC,IAAI,EAAE;MACb,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;IACjD;IAEA,IAAI,KAAK,CAAC,QAAQ,EAAE;MAClB,SAAS,CAAC,YAAY,CAAC,mBAAmB,EAAE,GAAG,CAAC;IAClD;IACA,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1C;IACA,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC;IAC1C;IACA,IAAI,KAAK,CAAC,QAAQ,EAAE;MAClB,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC;IAC5C;IACA,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAC/C;IACA,IAAI,KAAK,CAAC,UAAU,EAAE;MACpB,SAAS,CAAC,YAAY,CAAC,iBAAiB,EAAE,GAAG,CAAC;IAChD;;IAEA;AACJ;AACA;AACA;;IAEI,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IACvD;IACA,IAAI,KAAK,CAAC,UAAU,EAAE;MACpB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC;IACzD;IAEA,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI;QACP,IAAI,CAAC,KAAK,GAAG;UACX,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;UAChD,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;UAC5C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;UAC5C,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE;UACb,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;QACtD;QACA,OAAO,IAAI;MACb,KAAK,WAAW;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb,KAAK,YAAY;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU;QACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE;UACvC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QAC3C,CAAC,MAAM;UACL,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QAC1C;QACA,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,OAAO,IAAI,KAAK,IAAI;EACtB;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,UAAU;;;;;AC5H3B;AACA,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AACzC,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;AAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;;AAEvC;AACA,MAAM,WAAW,GAAG,GAAG;;AAEvB;AACA;AACA;AACA,MAAM,WAAW,SAAS,SAAS,CAAC;EAClC,WAAW,CAAC,UAAU,EAAE;IACtB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,OAAO,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,SAAS;QAAE,KAAK,EAAE,IAAI;QAAE,UAAU,EAAE,IAAI,WAAW,CAAC;MAAC,CAAC,CAAC;MACpF,KAAK,EAAE,IAAI,SAAS,CAAC;QACnB,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAI,SAAS,CAAC,CAAC;QAC3B,CAAC,EAAE;UAAC,kBAAkB,EAAE;QAAC;MAC3B,CAAC,CAAC;MACF,KAAK,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,OAAO;QAAE,KAAK,EAAE,IAAI;QAAE,UAAU,EAAE,IAAI,SAAS,CAAC;MAAC,CAAC,CAAC;MAC9E,OAAO,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,SAAS;QAAE,KAAK,EAAE,IAAI;QAAE,UAAU,EAAE,IAAI,WAAW,CAAC;MAAC,CAAC,CAAC;MACpF,YAAY,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,cAAc;QAAE,KAAK,EAAE,IAAI;QAAE,UAAU,EAAE,IAAI,UAAU,CAAC;MAAC,CAAC,CAAC;MAC7F,OAAO,EAAE,IAAI,SAAS,CAAC;QACrB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAI,UAAU,CAAC;UAAC,IAAI,EAAE;QAAI,CAAC;MACzC,CAAC,CAAC;MACF,IAAI,EAAE,IAAI,SAAS,CAAC;QAAC,GAAG,EAAE,MAAM;QAAE,MAAM,EAAE,IAAI;QAAE,KAAK,EAAE,IAAI;QAAE,UAAU,EAAE,IAAI,QAAQ,CAAC;MAAC,CAAC,CAAC;MAEzF;MACA,MAAM,EAAE,IAAI,WAAW,CAAC,CAAC;MACzB,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC;MACrB,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC;MACrB,MAAM,EAAE,IAAI,WAAW,CAAC,CAAC;MACzB,KAAK,EAAE,IAAI,UAAU,CAAC;QAAC,IAAI,EAAE;MAAI,CAAC,CAAC;MAEnC,UAAU,EAAE,WAAW,CAAC,aAAa,CAAC,UAAU;MAChD,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,WAAW;MAClD,MAAM,EAAE,WAAW,CAAC,aAAa,CAAC;IACpC,CAAC;IAED,IAAI,UAAU,EAAE;MACd;MACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACb;EACF;EAEA,SAAS,CAAA,EAAG;IACV,IAAI,CAAC,KAAK,GAAG;MACX,KAAK,EAAE,CAAC,CAAC;MACT,MAAM,EAAE,CAAC,CAAC;MACV,YAAY,EAAE,GAAG;MAAE;MACnB,IAAI,EAAE,CAAC,CAAC;MACR,MAAM,EAAE,CAAC,CAAC;MACV,IAAI,EAAE,CAAC;IACT,CAAC;EACH;EAEA,IAAI,CAAA,EAAG;IACL;IACA,IAAI,CAAC,KAAK,GAAG;MACX,MAAM,EAAE,EAAE;MACV,OAAO,EAAE,EAAE;MACX,KAAK,EAAE,EAAE;MACT,OAAO,EAAE,EAAE;MACX,KAAK,EAAE,EAAE;MACT,IAAI,EAAE;IACR,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,CAAC;;IAEhB;IACA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;IAEnB;IACA,IAAI,CAAC,SAAS,CAAC;MAAC,QAAQ,EAAE,CAAC;MAAE,MAAM,EAAE,CAAC;MAAE,MAAM,EAAE,CAAC;MAAE,QAAQ,EAAE,CAAC;MAAE,IAAI,EAAE;IAAC,CAAC,CAAC;;IAEzE;IACA,IAAI,CAAC,QAAQ,CAAC;MAAC,IAAI,EAAE,SAAS;MAAE,OAAO,EAAE;IAAM,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC;MAAC,IAAI,EAAE,SAAS;MAAE,OAAO,EAAE;IAAS,CAAC,CAAC;IAEpD,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC;EAC9B;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK;IAC3B;IACA;IACA,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAE7C,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,qBAAqB,CAAC;IAEnE,IAAI,IAAI,CAAC,KAAK,EAAE;MACd;MACA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;QACzC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;UAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QAAM,CAAC,CAAC;QAC5D,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI;UACjC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC;QACF,SAAS,CAAC,SAAS,CAAC,CAAC;MACvB;MAEA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;QACvB;QACA,IAAI,CAAC,QAAQ,CAAC;UAAC,IAAI,EAAE,EAAE;UAAE,KAAK,EAAE;YAAC,KAAK,EAAE;UAAC,CAAC;UAAE,IAAI,EAAE,SAAS;UAAE,MAAM,EAAE,CAAC;UAAE,MAAM,EAAE;QAAO,CAAC,CAAC;MAC3F;MACA,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;QAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;QAAE,kBAAkB,EAAE;MAAC,CAAC,CAAC;MAC/E,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI;QAC7B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;MAC7B,CAAC,CAAC;MACF,SAAS,CAAC,SAAS,CAAC,CAAC;MAErB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;QAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;MAAM,CAAC,CAAC;MACxD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI;QAC7B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;MAC7B,CAAC,CAAC;MACF,SAAS,CAAC,SAAS,CAAC,CAAC;MAErB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;QAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;MAAM,CAAC,CAAC;MAC5D,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI;QACjC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;MAC/B,CAAC,CAAC;MACF,SAAS,CAAC,SAAS,CAAC,CAAC;MAErB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAAC,QAAQ,EAAE,CAAC;QAAE,MAAM,EAAE,CAAC;QAAE,MAAM,EAAE,CAAC;QAAE,QAAQ,EAAE,CAAC;QAAE,IAAI,EAAE;MAAC,CAAC,CAAC,CAAC;MAEpG,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;QAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;MAAM,CAAC,CAAC;MAC3D,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI;QAC/B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;MAC9B,CAAC,CAAC;MACF,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,MAAM;MACL;MACA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;MACjD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;MAC7C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;MAC7C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;MACjD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAAC,QAAQ,EAAE,CAAC;QAAE,MAAM,EAAE,CAAC;QAAE,MAAM,EAAE,CAAC;QAAE,QAAQ,EAAE,CAAC;QAAE,IAAI,EAAE;MAAC,CAAC,CAAC,CAAC;MACpG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;IAClD;IAEA,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;IAEtD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;IAE3C,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;IACvD,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;IAElD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,YAAY;QACf,IAAI,CAAC,SAAS,CAAC,CAAC;QAChB,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,YAAY;QAAE;UACjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;UACf,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,KAAK;YAC/B,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;cACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK;YACpC;UACF,CAAC;UACD,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;UAChC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;UAC5B,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;UAC5B,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;UAChC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;UAC/B,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;UAE1B;UACA,IAAI,CAAC,KAAK,GAAG;YACX,KAAK,EAAE,EAAE;YACT,MAAM,EAAE;UACV,CAAC;UACD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACtB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;YACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI;cACnC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU;YAC5C,CAAC,CAAC;UACJ;UAEA,OAAO,KAAK;QACd;MACA;QACE;QACA,OAAO,IAAI;IACf;EACF;;EAEA;EACA;EACA;EACA,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;IAC7B,IAAI,CAAC,KAAK,EAAE;MACV,OAAO,CAAC;IACV;;IAEA;IACA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;MAC5B;MACA,IAAI,CAAC,QAAQ,CAAC;QAAC,IAAI,EAAE,EAAE;QAAE,KAAK,EAAE;UAAC,KAAK,EAAE;QAAC,CAAC;QAAE,IAAI,EAAE,SAAS;QAAE,MAAM,EAAE,CAAC;QAAE,MAAM,EAAE;MAAO,CAAC,CAAC;IAC3F;;IAEA;IACA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;MAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;IAEA,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,QAAQ,GAAG,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM;IAE7C,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;IACnD,CAAC,MAAM;MACL,QAAQ,QAAQ;QACd,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM;UACzB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;UAC9C;QACF,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI;UACvB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;UAC/C;QACF;UACE;MACJ;IACF;IAEA,IAAI,KAAK,CAAC,IAAI,EAAE;MACd,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1C;IAEA,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;IAChD;IAEA,IAAI,KAAK,CAAC,IAAI,EAAE;MACd,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1C;IAEA,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;IACnC;IAEA,IAAI,KAAK,CAAC,UAAU,EAAE;MACpB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;IACrC;IAEA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACrC,IAAI,IAAI,CAAC,OAAO,EAAE;MAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;IAClC;IACA,OAAO,OAAO;EAChB;;EAEA;EACA;EACA,aAAa,CAAC,EAAE,EAAE;IAChB;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI;;IAEvB;IACA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IAChC,IAAI,KAAK,EAAE,OAAO,KAAK;;IAEvB;IACA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;;IAEjC;IACA;IACA,IAAI,KAAK,CAAC,QAAQ,EAAE;MAClB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC;MACjG,IAAI,MAAM,EAAE;QACV,KAAK,CAAC,MAAM,GAAG,MAAM;MACvB;IACF;IAEA,SAAS,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;MACtC,IAAI,OAAO,IAAI,OAAO,KAAK,CAAC,EAAE;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3B,IAAI,IAAI,EAAE;UACR,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI;QACpB;MACF;IACF;IAEA,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;;IAEhD;IACA;IACA,IAAI,KAAK,CAAC,SAAS,EAAE;MACnB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;IACnC;;IAEA;IACA;IACA,IAAI,KAAK,CAAC,UAAU,EAAE;MACpB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;IACrC;IAEA,OAAO,KAAK;EACd;EAEA,WAAW,CAAC,KAAK,EAAE;IACjB,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB;MACA,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;IACnD;IAEA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;EACnC;EAEA,WAAW,CAAC,EAAE,EAAE;IACd,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;EAC5B;;EAEA;EACA;EACA,SAAS,CAAC,KAAK,EAAE;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;IACvC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACjC,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;MACxD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7B;IACA,OAAO,KAAK;EACd;;EAEA;EACA;EACA,aAAa,CAAC,UAAU,EAAE;IACxB;IACA,IAAI,KAAK,GAAG,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC;IACnD,IAAI,KAAK,KAAK,SAAS,EAAE,OAAO,KAAK;;IAErC;IACA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS,EAAE,OAAO,KAAK;IAErC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;IAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;MAAC,EAAE,EAAE,KAAK;MAAE;IAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B,OAAO,KAAK;EACd;;EAEA;EACA;EACA,QAAQ,CAAC,IAAI,EAAE;IACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACrC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;MACtD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B;IACA,OAAO,KAAK;EACd;;EAEA;EACA;EACA,UAAU,CAAC,MAAM,EAAE;IACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IACzC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;MAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;IACA,OAAO,KAAK;EACd;;EAEA;EACA;EACA,QAAQ,CAAC,IAAI,EAAE;IACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACrC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,EAAE;MACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;MACtD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B;IACA,OAAO,KAAK;EACd;;EAEA;AACF;;AAEA,WAAW,CAAC,qBAAqB,GAAG;EAClC,KAAK,EAAE,2DAA2D;EAClE,UAAU,EAAE,6DAA6D;EACzE,cAAc,EAAE,aAAa;EAC7B,aAAa,EAAE,6DAA6D;EAC5E,aAAa,EAAE;AACjB,CAAC;AACD,WAAW,CAAC,aAAa,GAAG;EAC1B,UAAU,EAAE,IAAI,WAAW,CAAC;IAC1B,GAAG,EAAE,YAAY;IACjB,CAAC,EAAE;MAAC,KAAK,EAAE;IAAC,CAAC;IACb,CAAC,EAAE,CAAC;MAAC,GAAG,EAAE,WAAW;MAAE,CAAC,EAAE;QAAC,IAAI,EAAE,QAAQ;QAAE,IAAI,EAAE,CAAC;QAAE,SAAS,EAAE;MAAC;IAAC,CAAC;EACpE,CAAC,CAAC;EACF,IAAI,EAAE,IAAI,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM;IAAE,CAAC,EAAE;MAAC,KAAK,EAAE;IAAC;EAAC,CAAC,CAAC;EACnD,WAAW,EAAE,IAAI,WAAW,CAAC;IAC3B,GAAG,EAAE,aAAa;IAClB,CAAC,EAAE;MAAC,KAAK,EAAE,CAAC;MAAE,iBAAiB,EAAE,mBAAmB;MAAE,iBAAiB,EAAE;IAAmB;EAC9F,CAAC,CAAC;EACF,MAAM,EAAE,IAAI,WAAW,CAAC;IACtB,GAAG,EAAE,QAAQ;IACb,CAAC,EAAE,CACD;MACE,GAAG,EAAE,KAAK;MACV,CAAC,EAAE;QACD,GAAG,EAAE,wCAAwC;QAC7C,WAAW,EAAE;MACf,CAAC;MACD,CAAC,EAAE,CAAC;QAAC,GAAG,EAAE,kBAAkB;QAAE,CAAC,EAAE;UAAC,kBAAkB,EAAE;QAAmB;MAAC,CAAC;IAC7E,CAAC,EACD;MACE,GAAG,EAAE,KAAK;MACV,CAAC,EAAE;QACD,GAAG,EAAE,wCAAwC;QAC7C,WAAW,EAAE;MACf,CAAC;MACD,CAAC,EAAE,CAAC;QAAC,GAAG,EAAE,oBAAoB;QAAE,CAAC,EAAE;UAAC,oBAAoB,EAAE;QAAuB;MAAC,CAAC;IACrF,CAAC;EAEL,CAAC;AACH,CAAC;;AAED;AACA,MAAM,eAAe,SAAS,WAAW,CAAC;EACxC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,KAAK,GAAG;MACX,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,CAAC;QAAE,MAAM,EAAE,CAAC;QAAE,MAAM,EAAE,CAAC;QAAE,QAAQ,EAAE,CAAC;QAAE,IAAI,EAAE;MAAC,CAAC,CAAC;MACnE,OAAO,EAAE,EAAE;MACX,KAAK,EAAE,CAAC;QAAC,IAAI,EAAE,EAAE;QAAE,KAAK,EAAE;UAAC,KAAK,EAAE;QAAC,CAAC;QAAE,IAAI,EAAE,SAAS;QAAE,MAAM,EAAE,CAAC;QAAE,MAAM,EAAE;MAAO,CAAC,CAAC;MACnF,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;MACb,KAAK,EAAE,CACL;QAAC,IAAI,EAAE,SAAS;QAAE,OAAO,EAAE;MAAM,CAAC,EAClC;QAAC,IAAI,EAAE,SAAS;QAAE,OAAO,EAAE;MAAS,CAAC;IAEzC,CAAC;EACH;;EAEA;EACA;;EAEA;EACA,WAAW,CAAC,MAAM,EAAE;IAClB,MAAM,CAAC,SAAS,CAAC,CAAC;IAClB,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;EAC1B;;EAEA;EACA;EACA;EACA,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;IAC7B,QAAQ,QAAQ;MACd,KAAK,KAAK,CAAC,SAAS,CAAC,IAAI;QACvB,OAAO,IAAI,CAAC,WAAW;MACzB;QACE,OAAO,CAAC;IACZ;EACF;EAEA,IAAI,WAAW,CAAA,EAAG;IAChB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;MACtB,MAAM,SAAS,GAAG;QAChB,QAAQ,EAAE,WAAW,CAAC,eAAe,CAAC,UAAU;MAClD,CAAC;MACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;MAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IACnC;IACA,OAAO,IAAI,CAAC,YAAY;EAC1B;;EAEA;EACA;EACA,aAAa,CAAA,CAAC;EAAA,EAAU;IACtB,OAAO,CAAC,CAAC;EACX;AACF;AAEA,WAAW,CAAC,IAAI,GAAG,eAAe;AAElC,MAAM,CAAC,OAAO,GAAG,WAAW;;;;;AC9gB5B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,cAAc,SAAS,SAAS,CAAC;EACrC,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,KAAK,GAAG,KAAK;EACpB;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,GAAG;EACZ;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK;IAE3B,IAAI,KAAK,KAAK,IAAI,EAAE;MAClB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;IACzB,CAAC,MAAM;MACL,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC;MAC7C,IAAI,IAAI,EAAE;QACR,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;MAC/B;IACF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE;MACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI;IAC1C;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,cAAc,CAAC,UAAU,GAAG;EAC1B,MAAM,EAAE,CAAC,CAAC;EACV,MAAM,EAAE;IAAC,GAAG,EAAE;EAAQ,CAAC;EACvB,gBAAgB,EAAE;IAAC,GAAG,EAAE;EAAkB,CAAC;EAC3C,gBAAgB,EAAE;IAAC,GAAG,EAAE;EAAkB;AAC5C,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,cAAc;;;;;AC9C/B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAE1D,MAAM,eAAe,SAAS,SAAS,CAAC;EACtC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,YAAY,EAAE,IAAI,iBAAiB,CAAC;IACtC,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,YAAY;EACrB;EAEA,OAAO,CAAC,KAAK,EAAE;IACb,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK;MACvC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE;QAAC;MAAK,CAAC,CAAC;IAChD,CAAC,CAAC;EACJ;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAAC,GAAG,EAAE,KAAK,CAAC;IAAa,CAAC,CAAC;IAExD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI;MAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;IACjD,CAAC,CAAC;IAEF,SAAS,CAAC,SAAS,CAAC,CAAC;IACrB,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG;UAClC,OAAO,EAAE;QACX,CAAC;QACD,OAAO,IAAI;MAEb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;UACpB,OAAO,IAAI;QACb;QACA,MAAM,IAAI,KAAK,CAAE,qCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,EAAC,CAAC;IAChF;EACF;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,OAAO,KAAK;MACd;QACE,MAAM,IAAI,KAAK,CAAE,sCAAqC,IAAK,EAAC,CAAC;IACjE;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,eAAe;;;;;AChFhC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,GAAG,EAAE,KAAK,CAAC,GAAG;MACd,QAAQ,EAAE,KAAK,CAAC;IAClB,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,CAAC,KAAK,GAAG;QACX,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG;QACxB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;MAC5B,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;AChClC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAE7C,MAAM,iBAAiB,SAAS,SAAS,CAAC;EACxC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,aAAa,EAAE,IAAI,SAAS,CAAC;QAC3B,GAAG,EAAE,eAAe;QACpB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAI,iBAAiB,CAAC;MACpC,CAAC,CAAC;MACF,OAAO,EAAE,IAAI,SAAS,CAAC;QACrB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAI,WAAW,CAAC;MAC9B,CAAC;IACH,CAAC;EACH;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,cAAc;EACvB;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACxC;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,IAAI,KAAK,CAAC,aAAa,EAAE;MACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;QAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,GAAG,GAAG;MAC3C,CAAC,CAAC;MAEF,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC;MAE7D,SAAS,CAAC,SAAS,CAAC,CAAC;MACrB,OAAO,IAAI;IACb;IACA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,GAAG,GAAG;IAC3C,CAAC,CAAC;IACF,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,MAAM;MAAC;IAAU,CAAC,GAAG,IAAI;IACzB,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,GAAG;UACX,YAAY,EAAE,UAAU,CAAC,YAAY,KAAK;QAC5C,CAAC;QACD,OAAO,IAAI;MACb;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;UACpB,OAAO,IAAI;QACb;QACA,MAAM,IAAI,KAAK,CAAE,qCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAE,EAAC,CAAC;IAChF;EACF;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK;QACvD,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;;;AC/FlC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,WAAW,SAAS,SAAS,CAAC;EAClC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,GAAG,EAAE,KAAK,CAAC;IACb,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,IAAI,CAAC,KAAK,GAAG;QACX,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;MACvB,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,WAAW;;;;;AC9B5B,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,gBAAgB,SAAS,SAAS,CAAC;EACvC,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,aAAa;EACtB;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC;EAC9B;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;MACvB,IAAI,EAAE,KAAK,CAAC,IAAI;MAChB,cAAc,EAAE,KAAK,CAAC,cAAc;MACpC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;MAC1C,KAAK,EAAE,KAAK,CAAC;IACf,CAAC,CAAC;IACF,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,MAAM;QAAC;MAAU,CAAC,GAAG,IAAI;MACzB,IAAI,CAAC,KAAK,GAAG;QACX,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,cAAc,EAAE,UAAU,CAAC,cAAc;QACzC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;QAC/C,KAAK,EAAE,UAAU,CAAC;MACpB,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,gBAAgB;;;;;AC3CjC,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,mBAAmB,SAAS,SAAS,CAAC;EAC1C,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,gBAAgB;EACzB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS;MAC3C,eAAe,EAAE,KAAK,CAAC,eAAe,GAAG,GAAG,GAAG,GAAG;MAClD,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,GAAG,GAAG,GAAG;MAChD,cAAc,EAAE,KAAK,CAAC,cAAc,GAAG,GAAG,GAAG,GAAG;MAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,GAAG,GAAG,GAAG;IACrD,CAAC,CAAC;IACF,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;MAC1B,MAAM;QAAC;MAAU,CAAC,GAAG,IAAI;MACzB,IAAI,CAAC,KAAK,GAAG;QACX,KAAK,EAAE,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,IAAI;QAC/C,eAAe,EAAE,UAAU,CAAC,eAAe,KAAK,GAAG;QACnD,cAAc,EAAE,UAAU,CAAC,cAAc,KAAK,GAAG;QACjD,cAAc,EAAE,UAAU,CAAC,cAAc,KAAK,GAAG;QACjD,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,KAAK;MACtD,CAAC;MACD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEA,SAAS,CAAA,EAAG,CAAC;EAEb,UAAU,CAAA,EAAG;IACX,OAAO,KAAK;EACd;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,mBAAmB;;;;;ACxCpC,MAAM,SAAS,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;AAE1C,MAAM,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;AACtD,MAAM,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;AACxD,MAAM,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC;AAE/D,MAAM,UAAU,SAAS,SAAS,CAAC;EACjC,WAAW,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAAC,GAAG,GAAG;MACT,UAAU,EAAE,IAAI,eAAe,CAAC,CAAC;MACjC,YAAY,EAAE,IAAI,SAAS,CAAC;QAC1B,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAI,gBAAgB,CAAC;MACnC,CAAC,CAAC;MACF,cAAc,EAAE,IAAI,mBAAmB,CAAC;IAC1C,CAAC;EACH;EAEA,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;EACvD;EAEA,IAAI,GAAG,CAAA,EAAG;IACR,OAAO,OAAO;EAChB;EAEA,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE;IACvB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;MAC3B,GAAG,UAAU,CAAC,gBAAgB;MAC9B,EAAE,EAAE,KAAK,CAAC,EAAE;MACZ,IAAI,EAAE,KAAK,CAAC,IAAI;MAChB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI;MAC5C,GAAG,EAAE,KAAK,CAAC,QAAQ;MACnB,cAAc,EAAE,KAAK,CAAC,SAAS,GAAG,GAAG,GAAG,SAAS;MACjD,cAAc,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,GAAG;MACjD,cAAc,EAAE,KAAK,CAAC,SAAS,GAAG,GAAG,GAAG;IAC1C,CAAC,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;IAEtD,SAAS,CAAC,SAAS,CAAC,CAAC;EACvB;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;MAC3B,OAAO,IAAI;IACb;IACA,MAAM;MAAC,IAAI;MAAE;IAAU,CAAC,GAAG,IAAI;IAC/B,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG;UACX,IAAI,EAAE,UAAU,CAAC,IAAI;UACrB,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,IAAI;UACtD,QAAQ,EAAE,UAAU,CAAC,GAAG;UACxB,SAAS,EAAE,UAAU,CAAC,cAAc,KAAK,GAAG;UAC5C,SAAS,EAAE,UAAU,CAAC,cAAc,KAAK;QAC3C,CAAC;QACD;MACF;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE;UACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B;QACA;IACJ;IACA,OAAO,IAAI;EACb;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B;EACF;EAEA,UAAU,CAAC,IAAI,EAAE;IACf,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,CAAC,MAAM,GAAG,SAAS;MACzB;MACA,OAAO,IAAI;IACb;IACA,QAAQ,IAAI;MACV,KAAK,IAAI,CAAC,GAAG;QACX,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK;QAChD,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE;UAC7B,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa;UAClE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK;YAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;UAC9D,CAAC,CAAC;QACJ;QACA,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK;QAChD,OAAO,KAAK;MACd;QACE;QACA,OAAO,IAAI;IACf;EACF;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB;IACA,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI;MAC9B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;QAC9B,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;MACzD;IACF,CAAC,CAAC;EACJ;AACF;AAEA,UAAU,CAAC,gBAAgB,GAAG;EAC5B,KAAK,EAAE,2DAA2D;EAClE,UAAU,EAAE,6DAA6D;EACzE,cAAc,EAAE,QAAQ;EACxB,UAAU,EAAE,iEAAiE;EAC7E,WAAW,EAAE;EACb;AACF,CAAC;;AAED,MAAM,CAAC,OAAO,GAAG,UAAU;;;;;;AClI3B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;AACxB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;AAC9B,MAAM;EAAC;AAAW,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAChD,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAChD,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAEhD,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACvC,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAChD,MAAM;EAAC;AAAc,CAAC,GAAG,OAAO,CAAC,gCAAgC,CAAC;AAElE,MAAM,WAAW,GAAG,OAAO,CAAC,4BAA4B,CAAC;AAEzD,MAAM,SAAS,GAAG,OAAO,CAAC,yBAAyB,CAAC;AACpD,MAAM,kBAAkB,GAAG,OAAO,CAAC,sCAAsC,CAAC;AAC1E,MAAM,kBAAkB,GAAG,OAAO,CAAC,kCAAkC,CAAC;AACtE,MAAM,iBAAiB,GAAG,OAAO,CAAC,kCAAkC,CAAC;AACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,wBAAwB,CAAC;AAClD,MAAM,aAAa,GAAG,OAAO,CAAC,6BAA6B,CAAC;AAC5D,MAAM,cAAc,GAAG,OAAO,CAAC,+BAA+B,CAAC;AAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,+BAA+B,CAAC;AAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,2BAA2B,CAAC;AACvD,MAAM,aAAa,GAAG,OAAO,CAAC,gCAAgC,CAAC;AAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,iCAAiC,CAAC;AAEhE,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;AAEzC,SAAS,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE;EAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;IACtC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK;MAC9C,IAAI,KAAK,EAAE;QACT,MAAM,CAAC,KAAK,CAAC;MACf,CAAC,MAAM;QACL,OAAO,CAAC,IAAI,CAAC;MACf;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;AAEA,MAAM,IAAI,CAAC;EACT,WAAW,CAAC,QAAQ,EAAE;IACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ;EAC1B;;EAEA;EACA;EACA;EACA;;EAEA,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE;IAChC,IAAI,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE;MACtC,MAAM,IAAI,KAAK,CAAE,mBAAkB,QAAS,EAAC,CAAC;IAChD;IACA,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C,IAAI;MACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;MACjD,MAAM,CAAC,KAAK,CAAC,CAAC;MACd,OAAO,QAAQ;IACjB,CAAC,CAAC,OAAO,KAAK,EAAE;MACd,MAAM,CAAC,KAAK,CAAC,CAAC;MACd,MAAM,KAAK;IACb;EACF;EAEA,SAAS,CAAC,MAAM,EAAE;IAChB,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;EAClC;EAEA,aAAa,CAAC,MAAM,EAAE;IACpB,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;EAClC;EAEA,kBAAkB,CAAC,MAAM,EAAE;IACzB,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;EAClC;EAEA,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;IACxB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC;IAEnC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;;IAE9B;IACA,MAAM,cAAc,GAAG;MACrB,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,UAAU,EAAE,KAAK,CAAC;IACpB,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;MAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;MACpC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;MAC1C,IAAI,UAAU,EAAE;QACd,cAAc,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK;UAClD,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;UACf,OAAO,CAAC;QACV,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,MAAM,IAAI;UACxC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU;UAC9D,IAAI,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACrD,UAAU,CAAC,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM;YACjE,OAAO,UAAU,CAAC,GAAG;UACvB;QACF,CAAC,CAAC;QACF,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC;MACjD;IACF,CAAC,CAAC;;IAEF;IACA,MAAM,YAAY,GAAG;MACnB,MAAM,EAAE,KAAK,CAAC;IAChB,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI;MAC3C,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IAC3C,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG;MACnB,MAAM,EAAE,KAAK,CAAC,MAAM;MACpB,aAAa,EAAE,KAAK,CAAC,aAAa;MAClC,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,UAAU,EAAE,KAAK,CAAC,UAAU;MAC5B,QAAQ,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ;MACvD,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,MAAM,EAAE,KAAK,CAAC,MAAM;MACpB,WAAW,EAAE,KAAK,CAAC;IACrB,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI;MACpC,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC;MAChE,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC;IACnD,CAAC,CAAC;;IAEF;IACA,OAAO,KAAK,CAAC,aAAa;IAC1B,OAAO,KAAK,CAAC,aAAa;IAC1B,OAAO,KAAK,CAAC,UAAU;IACvB,OAAO,KAAK,CAAC,aAAa;IAC1B,OAAO,KAAK,CAAC,YAAY;IACzB,OAAO,KAAK,CAAC,SAAS;IACtB,OAAO,KAAK,CAAC,MAAM;IACnB,OAAO,KAAK,CAAC,UAAU;IACvB,OAAO,KAAK,CAAC,QAAQ;IACrB,OAAO,KAAK,CAAC,WAAW;IACxB,OAAO,KAAK,CAAC,WAAW;EAC1B;EAEA,MAAM,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAClE,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;IACjD,SAAS,CAAC,OAAO,GAAG,OAAO;IAC3B,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,SAAS;IACrC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;EAClC;EAEA,MAAM,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9C,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;IAChD,KAAK,CAAC,QAAQ,CAAE,MAAK,IAAK,MAAK,CAAC,GAAG,QAAQ;EAC7C;EAEA,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IAC5C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;IAC7C,KAAK,CAAC,MAAM,CAAE,aAAY,IAAK,MAAK,CAAC,GAAG,KAAK;EAC/C;EAEA,MAAM,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;IACvD,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;IACrD,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,aAAa;EAC9C;EAEA,MAAM,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC;IACzC;IACA,IAAI,OAAO,IAAI,CAAC,EAAE;MAChB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;MAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC;MACxC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;QACrC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;QACjC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM;UAC3B,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;UAC/C,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;UAC3C,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,OAAO;YACb,IAAI;YACJ,SAAS;YACT,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC;UAC7B,CAAC;UACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;UACxB,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI;UACzB,MAAM,CAAC,KAAK,CAAC;QACf,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;MACvB,CAAC,CAAC;IACJ;EACF;EAEA,MAAM,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IAC7C,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;IAC9C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO;EAChC;EAEA,MAAM,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IACjD,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;IACpD,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa;EACzC;EAEA,MAAM,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IAChD,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;IACjD,KAAK,CAAC,WAAW,CAAE,eAAc,IAAK,MAAK,CAAC,GAAG,UAAU;EAC3D;EAEA,MAAM,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IAC3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;MACrC;MACA,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;MAC9B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;MACzB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;MAC1B,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM;QACxB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,CAAC,CAAC;MACX,CAAC,CAAC;MACF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;EACE,iBAAiB,CAAA,EAAG;IAClB,MAAM,IAAI,KAAK,CACb,0NACF,CAAC;EACH;EAEA,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;IAC1B;IACA;IACA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE;MAChD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;IACzC;IACA,MAAM,MAAM,GAAG,EAAE;IACjB,WAAW,MAAM,KAAK,IAAI,MAAM,EAAE;MAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACpB;IACA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;EAClD;EAEA,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;IACxB,IAAI,MAAM;IACV,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;MAC7B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC;IACjD,CAAC,MAAM;MACL,MAAM,GAAG,IAAI;IACf;IAEA,MAAM,KAAK,GAAG;MACZ,UAAU,EAAE,EAAE;MACd,aAAa,EAAE,CAAC,CAAC;MACjB,aAAa,EAAE,EAAE;MACjB,MAAM,EAAE,CAAC,CAAC;MACV,KAAK,EAAE,EAAE;MACT,UAAU,EAAE,CAAC,CAAC;MACd,QAAQ,EAAE,CAAC,CAAC;MACZ,WAAW,EAAE,CAAC,CAAC;MACf,QAAQ,EAAE,CAAC,CAAC;MACZ,MAAM,EAAE,CAAC,CAAC;MACV,WAAW,EAAE,CAAC;IAChB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;MAC5C;MACA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;QACd,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI;QAC1B,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;UACxB,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACjC;QACA,IAAI,MAAM;QACV,IACE,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;QAC9B;QACA,SAAS,CAAC,KAAK,CAAC,iCAAiC,CAAC,EAClD;UACA,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC;UAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC,MAAM;UACL;UACA,MAAM,GAAG,IAAI,WAAW,CAAC;YACvB,kBAAkB,EAAE,IAAI;YACxB,kBAAkB,EAAE;UACtB,CAAC,CAAC;UACF,IAAI,OAAO;UACX;UACA,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB;YACA,OAAO,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;UAC3D,CAAC,MAAM;YACL;YACA,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;UACvC;UACA,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI;UAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE;YAClD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;UACnD;QACF;QACA,MAAM,CAAC,GAAG,CAAC,CAAC;QACZ,QAAQ,SAAS;UACf,KAAK,aAAa;YAChB,KAAK,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC/C;UAEF,KAAK,iBAAiB;YAAE;cACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;cACjD,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;cAC9B,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY;cAC1C,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;cAC5B,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU;cACtC,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc;cAC9C;YACF;UAEA,KAAK,4BAA4B;YAC/B,KAAK,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACjD;UAEF,KAAK,sBAAsB;YACzB,KAAK,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC;YAC7C;UAEF,KAAK,eAAe;YAClB,KAAK,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC;YAChC,MAAM,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;YACtC;UAEF,KAAK,kBAAkB;YAAE;cACvB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,CAAC;cAC/B,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;cACxD,KAAK,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO;cACrC,KAAK,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO;cACrC;YACF;UAEA,KAAK,mBAAmB;YAAE;cACxB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;cACjC,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;cAC1D,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC;cACpC;YACF;UAEA;YAAS;cACP,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,kCAAkC,CAAC;cAC/D,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC;gBAC9E;cACF;cACA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,8CAA8C,CAAC;cACvE,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9D;cACF;cACA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,iCAAiC,CAAC;cAC1D,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtD;cACF;cACA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,+CAA+C,CAAC;cACxE,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtD;cACF;cACA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,oCAAoC,CAAC;cAC7D,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxD;cACF;cACA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,yBAAyB,CAAC;cAClD,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxD;cACF;cACA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,8BAA8B,CAAC;cACvD,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtD;cACF;cACA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,kDAAkD,CAAC;cAC3E,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5D;cACF;cACA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,qCAAqC,CAAC;cAC9D,IAAI,KAAK,EAAE;gBACT,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3D;cACF;YACF;QACF;MACF;IACF;IAEA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;;IAE9B;IACA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK;IAC3B,OAAO,IAAI,CAAC,QAAQ;EACtB;;EAEA;EACA;;EAEA,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE;IACzB,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,MAAM,IAAI;MAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;QAC3B,MAAM,QAAQ,GAAI,YAAW,MAAM,CAAC,IAAK,IAAG,MAAM,CAAC,SAAU,EAAC;QAC9D,IAAI,MAAM,CAAC,QAAQ,EAAE;UACnB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;UACnD,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;YAAC,IAAI,EAAE;UAAQ,CAAC,CAAC;QAC3C;QACA,IAAI,MAAM,CAAC,MAAM,EAAE;UACjB,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YAAC,IAAI,EAAE;UAAQ,CAAC,CAAC;QACpD;QACA,IAAI,MAAM,CAAC,MAAM,EAAE;UACjB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM;UAC/B,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;UAC/D,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE;YAAC,IAAI,EAAE,QAAQ;YAAE,MAAM,EAAE;UAAI,CAAC,CAAC;QAC5D;MACF;MACA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;IACtC,CAAC,CACH,CAAC;EACH;EAEA,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE;IACtB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,CAAC;IAE1C,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI;MACpC,MAAM;QAAC;MAAO,CAAC,GAAG,SAAS;MAC3B,IAAI,OAAO,EAAE;QACX,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;UAAC,IAAI,EAAG,eAAc,OAAO,CAAC,IAAK;QAAK,CAAC,CAAC;QAE1D,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;UAAC,IAAI,EAAG,qBAAoB,OAAO,CAAC,IAAK;QAAU,CAAC,CAAC;MACvE;IACF,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE;IACpB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC;IAEnC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI;MACpC,MAAM;QAAC;MAAM,CAAC,GAAG,SAAS;MAC1B,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;QACtB,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QACxC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE;UAAC,IAAI,EAAG,aAAY,KAAK,CAAC,MAAO;QAAC,CAAC,CAAC;MAC3D,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEA,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE;IAChC,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;MAAC,IAAI,EAAE;IAAqB,CAAC,CAAC;EAChD;EAEA,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE;IACvB,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;MAAC,IAAI,EAAE;IAAkB,CAAC,CAAC;EAC7C;EAEA,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE;IACxB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;IACjC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;MAAC,IAAI,EAAE;IAAmB,CAAC,CAAC;EACjE;EAEA,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI;MAAC,MAAM,EAAE;IAAS,CAAC;IAClD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;MAClC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;MACxB,MAAM,IAAI,GAAI,YAAW,IAAK,MAAK;MACnC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;QAAC,IAAI,EAAE;MAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;EACJ;EAEA,MAAM,aAAa,CAAC,GAAG,EAAE;IACvB,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CACtB;MAAC,EAAE,EAAE,MAAM;MAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;MAAE,MAAM,EAAE;IAAiB,CAAC,EAC1E;MAAC,EAAE,EAAE,MAAM;MAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;MAAE,MAAM,EAAE;IAAmB,CAAC,EAC5E;MAAC,EAAE,EAAE,MAAM;MAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB;MAAE,MAAM,EAAE;IAAkB,CAAC,CAChF,CAAC;IACF,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;MAAC,IAAI,EAAE;IAAa,CAAC,CAAC;EACxC;EAEA,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE;IAChC,IAAI,KAAK,GAAG,CAAC;IACb,MAAM,aAAa,GAAG,CACpB;MAAC,EAAE,EAAG,MAAK,KAAK,EAAG,EAAC;MAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;MAAE,MAAM,EAAE;IAAY,CAAC,EACtE;MAAC,EAAE,EAAG,MAAK,KAAK,EAAG,EAAC;MAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;MAAE,MAAM,EAAE;IAAkB,CAAC,CAC5E;IACD,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;MAC7B,aAAa,CAAC,IAAI,CAAC;QACjB,EAAE,EAAG,MAAK,KAAK,EAAG,EAAC;QACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;QAChC,MAAM,EAAE;MACV,CAAC,CAAC;IACJ;IACA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI;MACpC,SAAS,CAAC,GAAG,GAAI,MAAK,KAAK,EAAG,EAAC;MAC/B,aAAa,CAAC,IAAI,CAAC;QACjB,EAAE,EAAE,SAAS,CAAC,GAAG;QACjB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAG,mBAAkB,SAAS,CAAC,EAAG;MAC1C,CAAC,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;IACtC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;MAAC,IAAI,EAAE;IAA4B,CAAC,CAAC;EACvD;EAEA,MAAM,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE;IACjC,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;MACpD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE;QAAC,IAAI,EAAE;MAAsB,CAAC,CAAC;IACrE;EACF;EAEA,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE;IAC1B,MAAM;MAAC;IAAG,CAAC,GAAG,KAAK,CAAC,MAAM;IAC1B,IAAI,GAAG,EAAE;MACP,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;QAAC,IAAI,EAAE;MAAe,CAAC,CAAC;IAC1C;EACF;EAEA,MAAM,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE;IAC5B,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,CAAC;IACjC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;MAAC,IAAI,EAAE;IAAiB,CAAC,CAAC;EAC3D;EAEA,MAAM,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;IAC9B;IACA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC;IAC3C,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,CAAC;;IAEzC;IACA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI;MACpC,IAAI,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;MAC/B,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;MAC3C,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QAAC,IAAI,EAAG,sBAAqB,SAAS,CAAC,EAAG;MAAK,CAAC,CAAC;MAE3E,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;QAC3C,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;QAC3B,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC;QACpD,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;UAAC,IAAI,EAAG,4BAA2B,SAAS,CAAC,EAAG;QAAU,CAAC,CAAC;MACxF;MAEA,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACjC,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;QAC3B,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;UAAC,IAAI,EAAG,cAAa,SAAS,CAAC,EAAG;QAAK,CAAC,CAAC;QAEnE,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;QAC3B,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;UAAC,IAAI,EAAG,yBAAwB,SAAS,CAAC,EAAG;QAAK,CAAC,CAAC;MAChF;IACF,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;MACtC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM;QACrB,OAAO,CAAC,IAAI,CAAC;MACf,CAAC,CAAC;MACF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;MACvB,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChB,CAAC,CAAC;EACJ;EAEA,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE;IAC3B;IACA,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS;IAC1C,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,SAAS;IACxD,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC;IAC3C,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC;IAE7C,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,KAAK,SAAS,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI;IACjG,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI;;IAE5E;IACA,KAAK,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC,CAAC;;IAE9C;IACA,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;;IAE/E;IACA,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC;IAE3C,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;IAE5B,MAAM,gBAAgB,GAAG;MACvB,aAAa,EAAE,KAAK,CAAC,aAAa;MAClC,MAAM,EAAE,KAAK,CAAC,MAAM;MACpB,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ;MACnC,aAAa,EAAE,CAAC;MAChB,KAAK,EAAE,KAAK,CAAC;IACf,CAAC;IACD,gBAAgB,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,EAAE;IAC/C,gBAAgB,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG,EAAE;IACrD,IAAI,UAAU,GAAG,CAAC;IAClB,KAAK,CAAC,MAAM,GAAG,EAAE;IACjB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAI;MACpC;MACA,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI;QAChC,UAAU,EAAE;QACZ,KAAK,CAAC,MAAM,GAAI,QAAO,UAAW,MAAK;QACvC,KAAK,CAAC,EAAE,GAAG,UAAU;QACrB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;MAC1B,CAAC,CAAC;MAEF,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrD,CAAC,CAAC;;IAEF;EACF;;EAEA,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;IAC3B,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;IACvB,MAAM;MAAC;IAAK,CAAC,GAAG,IAAI,CAAC,QAAQ;IAC7B,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;IAChD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IAEhB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;;IAEjC;IACA,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;IACtC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;IACpC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;IACtC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;IACpC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;IAClC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC;IAChC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3E,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;IAC/B,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;EAC5B;EAEA,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE;IAC3B,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;IAE7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;MACtC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM;QACxB,OAAO,CAAC,CAAC;MACX,CAAC,CAAC;MACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI;QAC1B,MAAM,CAAC,KAAK,CAAC;MACf,CAAC,CAAC;MAEF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM;QACrC,MAAM,CAAC,GAAG,CAAC,CAAC;MACd,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAE;QACZ,MAAM,CAAC,GAAG,CAAC;MACb,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEA,MAAM,WAAW,CAAC,OAAO,EAAE;IACzB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC;IAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;EACtB;AACF;AAEA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;AAEpC,MAAM,CAAC,OAAO,GAAG,IAAI;;;;;;;ACrrBrB;AACA,MAAM,CAAC,OAAO,GACZ,wtPAAwtP;;;;ACF1tP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA,YAAY;;AAEZ,MAAM,IAAI,GAAG,OAAO;AAEpB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;AAE9B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM;AAC1C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;AAClC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC5C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC;;;ACV1C,YAAY;;AAEZ,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;AACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;AACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAEpC,MAAM,GAAG,GAAG,OAAO;AAEnB,GAAG,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;EACvC,OAAO,IA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AAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IAEnB,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;IAC3C,GAAG,CAAC,MAAM,GAAG,EAAE;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAA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IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjB,IAAI,GAAG,GAAG,EAAE,GAAG,MAAM;IACrB,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,GAAG,CAAC,C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C,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,EAAE,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACtD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;IACjD,EAAE,IAAI,SAAS;IACf;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG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AC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC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EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACnC,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB;IACA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACzB,GAAG,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAI,CAAC;IACrC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IACxB,IAAI,GAAG,GAAI,CAAE,CAAC,GAAG,EAAE,GAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,EAAE,CAAC,GAAI,CAAC;IACvD,CAAC,GAAI,CAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,GAAI,CAAC;IAClD,GAAG,IAAI,SAAS;IAChB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IACT,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACX,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;IACX,IAAI,CAAC,KAAK,CAAC,EAAE;MACX,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;MACT,GAAG,CAAC,MAAM,EAAE;IACd;IACA,OAAO,GAAG;EACZ,CAAC;;EAED;EACA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACd,WAAW,GAAG,UAAU;EAC1B;EAEA,SAAS,QAAQ,CAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;IACjC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAC3C,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;IAErC,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,OAAO,GAAG,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MACvC;MACA;MACA,IAAI,MAAM,GAAG,OAAO;MACpB,OAAO,GAAG,CAAC;MACX,IAAI,KAAK,GAAG,KAAK,GAAG,SAAS;MAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;MACtC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;QAC7D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACb,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAEb,IAAI,EAAE,GAAG,CAAC,GAAG,SAAS;QACtB,MAAM,GAAI,MAAM,IAAK,CAAC,GAAG,SAAS,GAAI,CAAC,CAAC,GAAI,CAAC;QAC7C,EAAE,GAAI,EAAE,GAAG,KAAK,GAAI,CAAC;QACrB,KAAK,GAAG,EAAE,GAAG,SAAS;QACtB,MAAM,GAAI,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC,GAAI,CAAC;QAEnC,OAAO,IAAI,MAAM,KAAK,EAAE;QACxB,MAAM,IAAI,SAAS;MACrB;MACA,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;MACpB,KAAK,GAAG,MAAM;MACd,MAAM,GAAG,OAAO;IAClB;IACA,IAAI,KAAK,KAAK,CAAC,EAAE;MACf,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;IACtB,CAAC,MAAM;MACL,GAAG,CAAC,MAAM,EAAE;IACd;IAEA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;EACrB;EAEA,SAAS,UAAU,CAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;IACnC;IACA;IACA;IACA,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;EACjC;EAEA,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE,GAAG,EAAE;IAC7C,IAAI,GAAG;IACP,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;IAClC,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE;MAC3C,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IACnC,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE;MACnB,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IAClC,CAAC,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE;MACrB,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IAChC,CAAC,MAAM;MACL,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IAClC;IAEA,OAAO,GAAG;EACZ,CAAC;;EAED;EACA;;EAEA,SAAS,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE;IACnB,IAAI,CAAC,CAAC,GAAG,CAAC;IACV,IAAI,CAAC,CAAC,GAAG,CAAC;EACZ;EAEA,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAE,CAAC,EAAE;IAC5C,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAC1B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7B;IAEA,OAAO,CAAC;EACV,CAAC;;EAED;EACA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAEpC,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAC1B,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAM,CAAC,GAAG,CAAC,GAAG,CAAE;MAC5B,CAAC,KAAK,CAAC;IACT;IAEA,OAAO,EAAE;EACX,CAAC;;EAED;EACA;EACA,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MACrB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB;EACF,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;IAC3E,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;MAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;MAEd,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;MACrC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;MAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAC7B,IAAI,MAAM,GAAG,KAAK;QAClB,IAAI,MAAM,GAAG,KAAK;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;UAC1B,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;UACpB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;UAEpB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;UACxB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;UAExB,IAAI,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE;UAElC,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE;UAC9B,EAAE,GAAG,EAAE;UAEP,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;UACrB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;UAErB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;UACzB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;;UAEzB;UACA,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,EAAE,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;YAEpC,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;YACxC,MAAM,GAAG,EAAE;UACb;QACF;MACF;IACF;EACF,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,CAAC,EAAE,CAAC,EAAE;IACvD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;IAC1B,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;IACf,IAAI,CAAC,GAAG,CAAC;IACT,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;MAClC,CAAC,EAAE;IACL;IAEA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;EACzB,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;IAC1D,IAAI,CAAC,IAAI,CAAC,EAAE;IAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAC9B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;MAEd,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACvB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;MAElB,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;MAEV,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACrB;EACF,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,EAAE,EAAE,CAAC,EAAE;IAC1D,IAAI,KAAK,GAAG,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAC9B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAC5C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GACzB,KAAK;MAEP,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;MAErB,IAAI,CAAC,GAAG,SAAS,EAAE;QACjB,KAAK,GAAG,CAAC;MACX,CAAC,MAAM;QACL,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC;MAC3B;IACF;IAEA,OAAO,EAAE;EACX,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;IAChE,IAAI,KAAK,GAAG,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;MAC5B,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;MAE3B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM;MAAE,KAAK,GAAG,KAAK,KAAK,EAAE;MACjD,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM;MAAE,KAAK,GAAG,KAAK,KAAK,EAAE;IACvD;;IAEA;IACA,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;MAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACZ;IAEA,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC;IACnB,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;EACjC,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE;IACtC,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAC1B,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACX;IAEA,OAAO,EAAE;EACX,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE;IAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;IAEhD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEzB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IACtB,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IACvB,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IAEvB,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IACvB,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IACxB,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IAExB,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK;IACpB,IAAI,CAAC,MAAM,GAAG,CAAC;IAEf,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;IAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC;IAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MAC1B,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;MAChD,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;MACjD,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE;IACd;IAEA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAE1B,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;IACtC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;IAChC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;EACrB,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;IACtB,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;EAC7B,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;IACtB,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC/C,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;EACnC,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;EACtC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IACxC,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC;IACtB,IAAI,QAAQ,EAAE,GAAG,GAAG,CAAC,GAAG;IAExB,MAAM,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;IAC/B,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;;IAEvB;IACA,IAAI,KAAK,GAAG,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;MACjC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,KAAK,KAAK,GAAG,SAAS,CAAC;MAC9C,KAAK,KAAK,EAAE;MACZ,KAAK,IAAK,CAAC,GAAG,SAAS,GAAI,CAAC;MAC5B;MACA,KAAK,IAAI,EAAE,KAAK,EAAE;MAClB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS;IAChC;IAEA,IAAI,KAAK,KAAK,CAAC,EAAE;MACf,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;MACrB,IAAI,CAAC,MAAM,EAAE;IACf;IAEA,OAAO,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;EACtC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EAChC,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAA,EAAI;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;EACvB,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAA,EAAI;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;EAChC,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;IACvB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;;IAEpC;IACA,IAAI,GAAG,GAAG,IAAI;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;MAClD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;IAClB;IAEA,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;MAClB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;QACtD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAEhB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;MAClB;IACF;IAEA,OAAO,GAAG;EACZ,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,IAAI,EAAE;IAC3C,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;IACjB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE;IACvB,IAAI,SAAS,GAAI,SAAS,KAAM,EAAE,GAAG,CAAE,IAAM,EAAE,GAAG,CAAE;IACpD,IAAI,CAAC;IAEL,IAAI,CAAC,KAAK,CAAC,EAAE;MACX,IAAI,KAAK,GAAG,CAAC;MAEb,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;QACxC,IAAI,CAAC,GAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAK,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;QACzB,KAAK,GAAG,QAAQ,KAAM,EAAE,GAAG,CAAE;MAC/B;MAEA,IAAI,KAAK,EAAE;QACT,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;QACrB,IAAI,CAAC,MAAM,EAAE;MACf;IACF;IAEA,IAAI,CAAC,KAAK,CAAC,EAAE;MACX,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;MACnC;MAEA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MACnB;MAEA,IAAI,CAAC,MAAM,IAAI,CAAC;IAClB;IAEA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;EACtB,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,IAAI,EAAE;IACzC;IACA,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;EAC1B,CAAC;;EAED;EACA;EACA;EACA,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC3D,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC;IACL,IAAI,IAAI,EAAE;MACR,CAAC,GAAG,CAAC,IAAI,GAAI,IAAI,GAAG,EAAG,IAAI,EAAE;IAC/B,CAAC,MAAM;MACL,CAAC,GAAG,CAAC;IACP;IAEA,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;IACjB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;IAC9C,IAAI,IAAI,GAAG,SAAS,GAAK,SAAS,KAAK,CAAC,IAAK,CAAE;IAC/C,IAAI,WAAW,GAAG,QAAQ;IAE1B,CAAC,IAAI,CAAC;IACN,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;;IAElB;IACA,IAAI,WAAW,EAAE;MACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;MACtC;MACA,WAAW,CAAC,MAAM,GAAG,CAAC;IACxB;IAEA,IAAI,CAAC,KAAK,CAAC,EAAE;MACX;IAAA,CACD,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MAC1B,IAAI,CAAC,MAAM,IAAI,CAAC;MAChB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;MACnC;IACF,CAAC,MAAM;MACL,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MACjB,IAAI,CAAC,MAAM,GAAG,CAAC;IACjB;IAEA,IAAI,KAAK,GAAG,CAAC;IACb,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;MAChE,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAI,KAAK,IAAK,EAAE,GAAG,CAAE,GAAK,IAAI,KAAK,CAAE;MAClD,KAAK,GAAG,IAAI,GAAG,IAAI;IACrB;;IAEA;IACA,IAAI,WAAW,IAAI,KAAK,KAAK,CAAC,EAAE;MAC9B,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK;IACjD;IAEA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;MACrB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MACjB,IAAI,CAAC,MAAM,GAAG,CAAC;IACjB;IAEA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;EACtB,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IACzD;IACA,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC;EAC1C,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,IAAI,EAAE;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;EACjC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,IAAI,EAAE;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;EAClC,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,IAAI,EAAE;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;EACjC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,IAAI,EAAE;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;EAClC,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IACxC,MAAM,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE;IAChB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;IAEd;IACA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,KAAK;;IAElC;IACA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAErB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EAClB,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,IAAI,EAAE;IAC3C,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;IACjB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE;IAEvB,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,yCAAyC,CAAC;IAEtE,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;MACpB,OAAO,IAAI;IACb;IAEA,IAAI,CAAC,KAAK,CAAC,EAAE;MACX,CAAC,EAAE;IACL;IACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IAEtC,IAAI,CAAC,KAAK,CAAC,EAAE;MACX,IAAI,IAAI,GAAG,SAAS,GAAK,SAAS,KAAK,CAAC,IAAK,CAAE;MAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;IACrC;IAEA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;EACtB,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,IAAI,EAAE;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;EAClC,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IACxC,MAAM,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;IAC/B,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;IACvB,IAAI,GAAG,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;;IAEpC;IACA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;MACvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE;QACnD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,CAAC;QACjB,OAAO,IAAI;MACb;MAEA,IAAI,CAAC,QAAQ,GAAG,CAAC;MACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;MACf,IAAI,CAAC,QAAQ,GAAG,CAAC;MACjB,OAAO,IAAI;IACb;;IAEA;IACA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;EACzB,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,GAAG,EAAE;IAC1C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;;IAEpB;IACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;MAClE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS;MAC1B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACzB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;MACvB,CAAC,MAAM;QACL,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;MACrB;IACF;IACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IAE1C,OAAO,IAAI;EACb,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IACxC,MAAM,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;IAC/B,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;IACvB,IAAI,GAAG,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;IAEpC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;MACvB,IAAI,CAAC,QAAQ,GAAG,CAAC;MACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;MACf,IAAI,CAAC,QAAQ,GAAG,CAAC;MACjB,OAAO,IAAI;IACb;IAEA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;IAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MAC1C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;MAC9B,IAAI,CAAC,QAAQ,GAAG,CAAC;IACnB,CAAC,MAAM;MACL;MACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACzD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS;QAC1B,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;MACxB;IACF;IAEA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;EACtB,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EAChC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EAChC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAA,EAAI;IACnC,IAAI,CAAC,QAAQ,GAAG,CAAC;IAEjB,OAAO,IAAI;EACb,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAA,EAAI;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAC5B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;IAClE,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,KAAK;IAC5B,IAAI,CAAC;IAEL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IAEjB,IAAI,CAAC;IACL,IAAI,KAAK,GAAG,CAAC;IACb,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC/B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK;MACvC,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;MACpC,CAAC,IAAI,KAAK,GAAG,SAAS;MACtB,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,KAAM,KAAK,GAAG,SAAS,GAAI,CAAC,CAAC;MAC7C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;IACvC;IACA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;MACnC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK;MACvC,KAAK,GAAG,CAAC,IAAI,EAAE;MACf,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;IACvC;IAEA,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;;IAErC;IACA,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;IACpB,KAAK,GAAG,CAAC;IACT,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAChC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;MAChC,KAAK,GAAG,CAAC,IAAI,EAAE;MACf,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;IAC/B;IACA,IAAI,CAAC,QAAQ,GAAG,CAAC;IAEjB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;EACtB,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAE,GAAG,EAAE,IAAI,EAAE;IACpD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;IAEpC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,GAAG;;IAEX;IACA,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;IACnC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;IAClC,KAAK,GAAG,EAAE,GAAG,OAAO;IACpB,IAAI,KAAK,KAAK,CAAC,EAAE;MACf,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;MAClB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;MACf,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;IACjC;;IAEA;IACA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;IAC3B,IAAI,CAAC;IAEL,IAAI,IAAI,KAAK,KAAK,EAAE;MAClB,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;MAChB,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;MAChB,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;MAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MAChB;IACF;IAEA,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;MACvB,CAAC,GAAG,IAAI;MACR,IAAI,CAAC,EAAE;QACL,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MAChB;IACF;IAEA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;MAC/B,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,IAC7C,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;;MAEjC;MACA;MACA,EAAE,GAAG,IAAI,CAAC,GAAG,CAAE,EAAE,GAAG,GAAG,GAAI,CAAC,EAAE,SAAS,CAAC;MAExC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;MACxB,OAAO,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE;QACvB,EAAE,EAAE;QACJ,CAAC,CAAC,QAAQ,GAAG,CAAC;QACd,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;UACf,CAAC,CAAC,QAAQ,IAAI,CAAC;QACjB;MACF;MACA,IAAI,CAAC,EAAE;QACL,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;MACjB;IACF;IACA,IAAI,CAAC,EAAE;MACL,CAAC,CAAC,MAAM,CAAC,CAAC;IACZ;IACA,CAAC,CAAC,MAAM,CAAC,CAAC;;IAEV;IACA,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE;MACjC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACjB;IAEA,OAAO;MACL,GAAG,EAAE,CAAC,IAAI,IAAI;MACd,GAAG,EAAE;IACP,CAAC;EACH,CAAC;;EAED;EACA;EACA;EACA;EACA,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC1D,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAErB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAO;QACL,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACd,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;MACf,CAAC;IACH;IAEA,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG;IACjB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;MAC7C,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;MAElC,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACrB;MAEA,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;UAClC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QACf;MACF;MAEA,OAAO;QACL,GAAG,EAAE,GAAG;QACR,GAAG,EAAE;MACP,CAAC;IACH;IAEA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;MAC7C,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;MAElC,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACrB;MAEA,OAAO;QACL,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG,CAAC;MACX,CAAC;IACH;IAEA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,MAAM,CAAC,EAAE;MACxC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;MAExC,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;UAClC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QACf;MACF;MAEA,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,GAAG,EAAE;MACP,CAAC;IACH;;IAEA;;IAEA;IACA,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;MACjD,OAAO;QACL,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACd,GAAG,EAAE;MACP,CAAC;IACH;;IAEA;IACA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;MACpB,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,OAAO;UACL,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;UAC5B,GAAG,EAAE;QACP,CAAC;MACH;MAEA,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,OAAO;UACL,GAAG,EAAE,IAAI;UACT,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;MACH;MAEA,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;MACtC,CAAC;IACH;IAEA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;EACjC,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG;EAC3C,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG;EAC3C,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG;EAC1C,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAE,GAAG,EAAE;IAC9C,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;IAEzB;IACA,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG;IAElC,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG;IAE3D,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACrB,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;;IAEvB;IACA,IAAI,GAAG,GAAG,CAAC,IAAK,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAE,EAAE,OAAO,EAAE,CAAC,GAAG;;IAErD;IACA,OAAO,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;EAClE,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IACxC,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC;IACtB,IAAI,QAAQ,EAAE,GAAG,GAAG,CAAC,GAAG;IAExB,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG;IAEvB,IAAI,GAAG,GAAG,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;MACzC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG;IAC7C;IAEA,OAAO,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG;EAC9B,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;EACxB,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IACxC,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC;IACtB,IAAI,QAAQ,EAAE,GAAG,GAAG,CAAC,GAAG;IAExB,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;IAExB,IAAI,KAAK,GAAG,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;MACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,SAAS;MAC/C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAI,CAAC,GAAG,GAAG,GAAI,CAAC;MAC7B,KAAK,GAAG,CAAC,GAAG,GAAG;IACjB;IAEA,IAAI,CAAC,MAAM,CAAC,CAAC;IACb,OAAO,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;EACtC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EAChC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE;IACpC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnB,IAAI,CAAC,GAAG,IAAI;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAEjB,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE;MACpB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACf,CAAC,MAAM;MACL,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACf;;IAEA;IACA,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;;IAEjB;IACA,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAEjB,IAAI,CAAC,GAAG,CAAC;IAET,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;MAC/B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;MACX,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;MACX,EAAE,CAAC;IACL;IAEA,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAElB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;MAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;MACzE,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACX,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE;UACd,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACV,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;UACZ;UAEA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;UACX,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACb;MACF;MAEA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;MACzE,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACX,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE;UACd,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1B,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACV,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;UACZ;UAEA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;UACX,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACb;MACF;MAEA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;QACjB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACT,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACT,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;MACX,CAAC,MAAM;QACL,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACT,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACT,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;MACX;IACF;IAEA,OAAO;MACL,CAAC,EAAE,CAAC;MACJ,CAAC,EAAE,CAAC;MACJ,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACjB,CAAC;EACH,CAAC;;EAED;EACA;EACA;EACA,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,CAAC,EAAE;IACxC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnB,IAAI,CAAC,GAAG,IAAI;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAEjB,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE;MACpB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACf,CAAC,MAAM;MACL,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACf;IAEA,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAClB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAElB,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAErB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;MACzE,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACX,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE;UACd,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;YACd,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;UAChB;UAEA,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACd;MACF;MAEA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;MACzE,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACX,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE;UACd,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;YACd,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;UAChB;UAEA,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACd;MACF;MAEA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;QACjB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACT,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;MACb,CAAC,MAAM;QACL,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACT,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;MACb;IACF;IAEA,IAAI,GAAG;IACP,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;MACnB,GAAG,GAAG,EAAE;IACV,CAAC,MAAM;MACL,GAAG,GAAG,EAAE;IACV;IAEA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MACnB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACb;IAEA,OAAO,GAAG;EACZ,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC,QAAQ,GAAG,CAAC;IACd,CAAC,CAAC,QAAQ,GAAG,CAAC;;IAEd;IACA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;MACrD,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;MACX,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACb;IAEA,GAAG;MACD,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;QACjB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;MACb;MACA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;QACjB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;MACb;MAEA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAChB,IAAI,CAAC,GAAG,CAAC,EAAE;QACT;QACA,IAAI,CAAC,GAAG,CAAC;QACT,CAAC,GAAG,CAAC;QACL,CAAC,GAAG,CAAC;MACP,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QACrC;MACF;MAEA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,CAAC,QAAQ,IAAI;IAEb,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;EACxB,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;EACnC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAA,EAAI;IACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;EAClC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAA,EAAI;IACrC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;EAClC,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;EAC5B,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IACxC,MAAM,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;IAC/B,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE;IAChB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE;IACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;IAEd;IACA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;MACpB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;MACnB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;MAClB,OAAO,IAAI;IACb;;IAEA;IACA,IAAI,KAAK,GAAG,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACnD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MACzB,CAAC,IAAI,KAAK;MACV,KAAK,GAAG,CAAC,KAAK,EAAE;MAChB,CAAC,IAAI,SAAS;MACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IACnB;IACA,IAAI,KAAK,KAAK,CAAC,EAAE;MACf,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;MACrB,IAAI,CAAC,MAAM,EAAE;IACf;IACA,OAAO,IAAI;EACb,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAA,EAAI;IACvC,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;EACjD,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC;IAEtB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,QAAQ,EAAE,OAAO,CAAC;IAE7C,IAAI,CAAC,MAAM,CAAC,CAAC;IAEb,IAAI,GAAG;IACP,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MACnB,GAAG,GAAG,CAAC;IACT,CAAC,MAAM;MACL,IAAI,QAAQ,EAAE;QACZ,GAAG,GAAG,CAAC,GAAG;MACZ;MAEA,MAAM,CAAC,GAAG,IAAI,SAAS,EAAE,mBAAmB,CAAC;MAE7C,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MACzB,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IACxC;IACA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;IACxC,OAAO,GAAG;EACZ,CAAC;;EAED;EACA;EACA;EACA;EACA,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC;IAEvD,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC;IACxC,OAAO,GAAG;EACZ,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvC,IAAI,GAAG,GAAG,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;MACzC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MACzB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MAExB,IAAI,CAAC,KAAK,CAAC,EAAE;MACb,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,GAAG,GAAG,CAAC,CAAC;MACV,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE;QAChB,GAAG,GAAG,CAAC;MACT;MACA;IACF;IACA,OAAO,GAAG;EACZ,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;EAC7B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,EAAE,CAAE,GAAG,EAAE;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;EAC5B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;EAC5B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;EAC3B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;EAC9B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,EAAE,CAAE,GAAG,EAAE;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;EAC7B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;EAC5B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;EAC3B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;EAC7B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,EAAE,CAAE,GAAG,EAAE;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;EAC5B,CAAC;;EAED;EACA;EACA;EACA;EACA,EAAE,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,GAAG,EAAE;IAC1B,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC;EACrB,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IACxC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,uCAAuC,CAAC;IAC1D,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,+BAA+B,CAAC;IAC5D,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;EAC3C,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAA,EAAI;IACzC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,sDAAsD,CAAC;IACxE,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;EACnC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAE,GAAG,EAAE;IAChD,IAAI,CAAC,GAAG,GAAG,GAAG;IACd,OAAO,IAAI;EACb,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAE,GAAG,EAAE;IAC9C,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,uCAAuC,CAAC;IAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;EAC5B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,CAAC;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;EAChC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAE,GAAG,EAAE;IAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,qCAAqC,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;EACjC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,CAAC;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;EAChC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAE,GAAG,EAAE;IAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,qCAAqC,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;EACjC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,CAAC;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;EAChC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;EAChC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAE,GAAG,EAAE;IAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;EACjC,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAA,EAAI;IACvC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;EAC3B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAA,EAAI;IACzC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,qCAAqC,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EAC5B,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAA,EAAI;IACzC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,qCAAqC,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EAC5B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAA,EAAI;IACzC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,qCAAqC,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EAC5B,CAAC;;EAED;EACA,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAA,EAAI;IACvC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;EAC3B,CAAC;EAED,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,GAAG,EAAE;IAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,mBAAmB,CAAC;IACjD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;EAChC,CAAC;;EAED;EACA,IAAI,MAAM,GAAG;IACX,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,MAAM,EAAE;EACV,CAAC;;EAED;EACA,SAAS,MAAM,CAAE,IAAI,EAAE,CAAC,EAAE;IACxB;IACA,IAAI,CAAC,IAAI,GAAG,IAAI;IAChB,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACtB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;EACxB;EAEA,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAA,EAAI;IACvC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;IACtB,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,OAAO,GAAG;EACZ,CAAC;EAED,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,CAAE,GAAG,EAAE;IAChD;IACA;IACA,IAAI,CAAC,GAAG,GAAG;IACX,IAAI,IAAI;IAER,GAAG;MACD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;MACvB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;MACjB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;MACpB,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC,QAAQ,IAAI,GAAG,IAAI,CAAC,CAAC;IAEtB,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,CAAC,EAAE;MACb,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MACd,CAAC,CAAC,MAAM,GAAG,CAAC;IACd,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE;MAClB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChB,CAAC,MAAM;MACL,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;QACzB;QACA,CAAC,CAAC,KAAK,CAAC,CAAC;MACX,CAAC,MAAM;QACL;QACA,CAAC,CAAC,MAAM,CAAC,CAAC;MACZ;IACF;IAEA,OAAO,CAAC;EACV,CAAC;EAED,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,KAAK,EAAE,GAAG,EAAE;IACnD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;EAC9B,CAAC;EAED,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IAC5C,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;EACzB,CAAC;EAED,SAAS,IAAI,CAAA,EAAI;IACf,MAAM,CAAC,IAAI,CACT,IAAI,EACJ,MAAM,EACN,yEAAyE,CAAC;EAC9E;EACA,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;EAEtB,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,KAAK,EAAE,MAAM,EAAE;IACpD;IACA,IAAI,IAAI,GAAG,QAAQ;IAEnB,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;MAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC;IACA,MAAM,CAAC,MAAM,GAAG,MAAM;IAEtB,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;MACrB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MAClB,KAAK,CAAC,MAAM,GAAG,CAAC;MAChB;IACF;;IAEA;IACA,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IAE3C,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAClC,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MAC7B,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,GAAK,IAAI,KAAK,EAAG;MAC1D,IAAI,GAAG,IAAI;IACb;IACA,IAAI,MAAM,EAAE;IACZ,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAC1B,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;MACnC,KAAK,CAAC,MAAM,IAAI,EAAE;IACpB,CAAC,MAAM;MACL,KAAK,CAAC,MAAM,IAAI,CAAC;IACnB;EACF,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IAC1C;IACA,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;IACzB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;IAC7B,GAAG,CAAC,MAAM,IAAI,CAAC;;IAEf;IACA,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACnC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MACxB,EAAE,IAAI,CAAC,GAAG,KAAK;MACf,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS;MAC7B,EAAE,GAAG,CAAC,GAAG,IAAI,IAAK,EAAE,GAAG,SAAS,GAAI,CAAC,CAAC;IACxC;;IAEA;IACA,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;MACnC,GAAG,CAAC,MAAM,EAAE;MACZ,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;QACnC,GAAG,CAAC,MAAM,EAAE;MACd;IACF;IACA,OAAO,GAAG;EACZ,CAAC;EAED,SAAS,IAAI,CAAA,EAAI;IACf,MAAM,CAAC,IAAI,CACT,IAAI,EACJ,MAAM,EACN,gEAAgE,CAAC;EACrE;EACA,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;EAEtB,SAAS,IAAI,CAAA,EAAI;IACf,MAAM,CAAC,IAAI,CACT,IAAI,EACJ,MAAM,EACN,uDAAuD,CAAC;EAC5D;EACA,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;EAEtB,SAAS,MAAM,CAAA,EAAI;IACjB;IACA,MAAM,CAAC,IAAI,CACT,IAAI,EACJ,OAAO,EACP,qEAAqE,CAAC;EAC1E;EACA,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;EAExB,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAE,GAAG,EAAE;IAC5C;IACA,IAAI,KAAK,GAAG,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACnC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK;MAC1C,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS;MACvB,EAAE,MAAM,EAAE;MAEV,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;MACjB,KAAK,GAAG,EAAE;IACZ;IACA,IAAI,KAAK,KAAK,CAAC,EAAE;MACf,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK;IACjC;IACA,OAAO,GAAG;EACZ,CAAC;;EAED;EACA,EAAE,CAAC,MAAM,GAAG,SAAS,KAAK,CAAE,IAAI,EAAE;IAChC;IACA,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAErC,IAAI,KAAK;IACT,IAAI,IAAI,KAAK,MAAM,EAAE;MACnB,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;IACpB,CAAC,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE;MAC1B,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;IACpB,CAAC,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE;MAC1B,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC;IACpB,CAAC,MAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;MAC5B,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC;IACtB,CAAC,MAAM;MACL,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC1C;IACA,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;IAEpB,OAAO,KAAK;EACd,CAAC;;EAED;EACA;EACA;EACA,SAAS,GAAG,CAAE,CAAC,EAAE;IACf,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;MACzB,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;MACxB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;MAChB,IAAI,CAAC,KAAK,GAAG,KAAK;IACpB,CAAC,MAAM;MACL,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,gCAAgC,CAAC;MAClD,IAAI,CAAC,CAAC,GAAG,CAAC;MACV,IAAI,CAAC,KAAK,GAAG,IAAI;IACnB;EACF;EAEA,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAE,CAAC,EAAE;IAC7C,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE,+BAA+B,CAAC;IACzD,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,iCAAiC,CAAC;EAClD,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAE,CAAC,EAAE,CAAC,EAAE;IAChD,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,MAAM,CAAC,EAAE,+BAA+B,CAAC;IACxE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAC7B,iCAAiC,CAAC;EACtC,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE;IACrC,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IAE5D,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,CAAC;EACV,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,CAAC,EAAE;IACnC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;MACd,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;IAClB;IAEA,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;EACtC,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,CAAC,EAAE,CAAC,EAAE;IACtC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAEnB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClB,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;MACxB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClB;IACA,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;EAC5B,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE;IACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAEnB,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnB,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;MACxB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClB;IACA,OAAO,GAAG;EACZ,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,CAAC,EAAE,CAAC,EAAE;IACtC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAEnB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClB,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MACnB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClB;IACA,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;EAC5B,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE;IACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAEnB,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnB,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MACnB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClB;IACA,OAAO,GAAG;EACZ,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,CAAC,EAAE,GAAG,EAAE;IACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EAChC,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE;IACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAC7B,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,CAAC,EAAE,CAAC,EAAE;IACtC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC5B,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;EAChC,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,CAAC,EAAE;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;EACvB,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE;IACrC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1B,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;;IAEtB;IACA,IAAI,IAAI,KAAK,CAAC,EAAE;MACd,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;MACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;IACzB;;IAEA;IACA;IACA;IACA,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,GAAG,CAAC;IACT,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;MACtC,CAAC,EAAE;MACH,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACb;IACA,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnB,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/B,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;;IAEvB;IACA;IACA,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAEjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;MACxC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACjB;IAEA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACtB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACtB,IAAI,CAAC,GAAG,CAAC;IACT,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;MACvB,IAAI,GAAG,GAAG,CAAC;MACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE;QACvC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;MACpB;MACA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;MACb,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;MAEhD,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;MACf,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;MACd,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;MACf,CAAC,GAAG,CAAC;IACP;IAEA,OAAO,CAAC;EACV,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE;IACrC,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1B,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE;MACtB,GAAG,CAAC,QAAQ,GAAG,CAAC;MAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC,MAAM;MACL,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACvB;EACF,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,CAAC,EAAE,GAAG,EAAE;IACxC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9C,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,UAAU,GAAG,CAAC;IAClB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC;IACpC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACnC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC;IAEA,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC;IACf,IAAI,UAAU,GAAG,CAAC;IAClB,IAAI,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE;IAChC,IAAI,KAAK,KAAK,CAAC,EAAE;MACf,KAAK,GAAG,EAAE;IACZ;IAEA,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;MACpC,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;MACvB,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACnC,IAAI,GAAG,GAAI,IAAI,IAAI,CAAC,GAAI,CAAC;QACzB,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;UAClB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACrB;QAEA,IAAI,GAAG,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE;UAC9B,UAAU,GAAG,CAAC;UACd;QACF;QAEA,OAAO,KAAK,CAAC;QACb,OAAO,IAAI,GAAG;QACd,UAAU,EAAE;QACZ,IAAI,UAAU,KAAK,UAAU,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;QAEvD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,UAAU,GAAG,CAAC;QACd,OAAO,GAAG,CAAC;MACb;MACA,KAAK,GAAG,EAAE;IACZ;IAEA,OAAO,GAAG;EACZ,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAE,GAAG,EAAE;IACjD,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAExB,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;EAClC,CAAC;EAED,GAAG,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,GAAG,EAAE;IACrD,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,GAAG,CAAC,GAAG,GAAG,IAAI;IACd,OAAO,GAAG;EACZ,CAAC;;EAED;EACA;EACA;;EAEA,EAAE,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,GAAG,EAAE;IAC5B,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC;EACtB,CAAC;EAED,SAAS,IAAI,CAAE,CAAC,EAAE;IAChB,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,CAAC,EAAE;MACzB,IAAI,CAAC,KAAK,IAAI,EAAE,GAAI,IAAI,CAAC,KAAK,GAAG,EAAG;IACtC;IAEA,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EACnC;EACA,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;EAEnB,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAE,GAAG,EAAE;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACzC,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAE,GAAG,EAAE;IACtD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,GAAG,GAAG,IAAI;IACZ,OAAO,CAAC;EACV,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE,CAAC,EAAE;IACzC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;MAC5B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;MACd,CAAC,CAAC,MAAM,GAAG,CAAC;MACZ,OAAO,CAAC;IACV;IAEA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC,IAAI,GAAG,GAAG,CAAC;IAEX,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;MACtB,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtB,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MACxB,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtB;IAEA,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;EAC5B,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,CAAE,CAAC,EAAE,CAAC,EAAE;IACvC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IAE9D,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC,IAAI,GAAG,GAAG,CAAC;IACX,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;MACtB,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtB,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;MACxB,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtB;IAEA,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;EAC5B,CAAC;EAED,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAE,CAAC,EAAE;IACtC;IACA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;EAC5B,CAAC;AACH,CAAC,EAAE,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,QAAM,CAAC;;;;;AC19GjD,IAAI,CAAC;AAEL,MAAM,CAAC,OAAO,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE;EAClC,IAAI,CAAC,CAAC,EACJ,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;EAEpB,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACxB,CAAC;AAED,SAAS,IAAI,CAAC,IAAI,EAAE;EAClB,IAAI,CAAC,IAAI,GAAG,IAAI;AAClB;AACA,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI;AAE1B,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,GAAG,EAAE;EAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACxB,CAAC;;AAED;AACA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,EAAE;EACvC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EACpB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;EAE9B,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;EAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACjC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EAC9B,OAAO,GAAG;AACZ,CAAC;AAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;EAC5B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;IAC9C;IACA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,EAAE;MACvC,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;MAC3B,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC;MAChC,OAAO,GAAG;IACZ,CAAC;EACH,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;IACzD;IACA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,EAAE;MACvC,IAAI,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC;MAC3B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC;MAClC,OAAO,GAAG;IACZ,CAAC;;IAEH;EACA,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;IACrC;IACA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,YAAW;MAChC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;IACxC,CAAC;EACH;AACF,CAAC,MAAM;EACL;EACA,IAAI;IACF,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC9B,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,EAC1C,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;IAElC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,EAAE;MACvC,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9B,CAAC;EACH,CAAC,CAAC,OAAO,CAAC,EAAE,CACZ;AACF;;;AChEA;AACA;;;;ACDA;AACA;AACA;AACA;;AAEA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAE1C,SAAS,aAAa,CAAE,GAAG,EAAE;EAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;EAEjD,IAAI,GAAG,GAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAI,CAAC;EAC9B,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;EAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;EAClC;EAEA,OAAO,GAAG;AACZ;AAEA,SAAS,QAAQ,CAAE,CAAC,EAAE;EACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACjC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;EACV;AACF;AAEA,SAAS,UAAU,CAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;EAC3D,IAAI,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;EACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;EACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;EACzB,IAAI,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;EAEzB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC9B,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC9B,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC9B,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC9B,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;EAClB,IAAI,KAAK,GAAG,CAAC;EAEb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,EAAE,EAAE;IAC5C,EAAE,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAE,EAAE,KAAK,EAAE,GAAI,IAAI,CAAC,GAAG,QAAQ,CAAE,EAAE,KAAK,CAAC,GAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;IAClI,EAAE,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAE,EAAE,KAAK,EAAE,GAAI,IAAI,CAAC,GAAG,QAAQ,CAAE,EAAE,KAAK,CAAC,GAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;IAClI,EAAE,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAE,EAAE,KAAK,EAAE,GAAI,IAAI,CAAC,GAAG,QAAQ,CAAE,EAAE,KAAK,CAAC,GAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;IAClI,EAAE,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAE,EAAE,KAAK,EAAE,GAAI,IAAI,CAAC,GAAG,QAAQ,CAAE,EAAE,KAAK,CAAC,GAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;IAClI,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;EACT;EAEA,EAAE,GAAG,CAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,GAAK,IAAI,CAAE,EAAE,KAAK,EAAE,GAAI,IAAI,CAAC,IAAI,EAAG,GAAI,IAAI,CAAE,EAAE,KAAK,CAAC,GAAI,IAAI,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;EAC3I,EAAE,GAAG,CAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,GAAK,IAAI,CAAE,EAAE,KAAK,EAAE,GAAI,IAAI,CAAC,IAAI,EAAG,GAAI,IAAI,CAAE,EAAE,KAAK,CAAC,GAAI,IAAI,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;EAC3I,EAAE,GAAG,CAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,GAAK,IAAI,CAAE,EAAE,KAAK,EAAE,GAAI,IAAI,CAAC,IAAI,EAAG,GAAI,IAAI,CAAE,EAAE,KAAK,CAAC,GAAI,IAAI,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;EAC3I,EAAE,GAAG,CAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,GAAK,IAAI,CAAE,EAAE,KAAK,EAAE,GAAI,IAAI,CAAC,IAAI,EAAG,GAAI,IAAI,CAAE,EAAE,KAAK,CAAC,GAAI,IAAI,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;EAC3I,EAAE,GAAG,EAAE,KAAK,CAAC;EACb,EAAE,GAAG,EAAE,KAAK,CAAC;EACb,EAAE,GAAG,EAAE,KAAK,CAAC;EACb,EAAE,GAAG,EAAE,KAAK,CAAC;EAEb,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACzB;;AAEA;AACA,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC7E,IAAI,CAAC,GAAI,YAAY;EACnB;EACA,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;EACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC5B,IAAI,CAAC,GAAG,GAAG,EAAE;MACX,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACf,CAAC,MAAM;MACL,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC,IAAI,CAAC,GAAI,KAAK;IACzB;EACF;EAEA,IAAI,IAAI,GAAG,EAAE;EACb,IAAI,QAAQ,GAAG,EAAE;EACjB,IAAI,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;EAC9B,IAAI,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;;EAElC;EACA,IAAI,CAAC,GAAG,CAAC;EACT,IAAI,EAAE,GAAG,CAAC;EACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;IAC5B;IACA,IAAI,EAAE,GAAG,EAAE,GAAI,EAAE,IAAI,CAAE,GAAI,EAAE,IAAI,CAAE,GAAI,EAAE,IAAI,CAAE,GAAI,EAAE,IAAI,CAAE;IAC3D,EAAE,GAAI,EAAE,KAAK,CAAC,GAAK,EAAE,GAAG,IAAK,GAAG,IAAI;IACpC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE;IACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;;IAEhB;IACA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACb,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IACd,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;;IAEd;IACA,IAAI,CAAC,GAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAK,EAAE,GAAG,SAAU;IAC1C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC,IAAI,EAAE,GAAK,CAAC,KAAK,CAAE;IACrC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC,IAAI,EAAE,GAAK,CAAC,KAAK,EAAG;IACtC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC,IAAI,CAAC,GAAK,CAAC,KAAK,EAAG;IACrC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;;IAEjB;IACA,CAAC,GAAI,EAAE,GAAG,SAAS,GAAK,EAAE,GAAG,OAAQ,GAAI,EAAE,GAAG,KAAM,GAAI,CAAC,GAAG,SAAU;IACtE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,CAAC,IAAI,EAAE,GAAK,CAAC,KAAK,CAAE;IAC1C,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,CAAC,IAAI,EAAE,GAAK,CAAC,KAAK,EAAG;IAC3C,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,CAAC,IAAI,CAAC,GAAK,CAAC,KAAK,EAAG;IAC1C,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IAEtB,IAAI,CAAC,KAAK,CAAC,EAAE;MACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACZ,CAAC,MAAM;MACL,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;MACzB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB;EACF;EAEA,OAAO;IACL,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE;EACf,CAAC;AACH,CAAC,CAAE,CAAC;AAEJ,SAAS,GAAG,CAAE,GAAG,EAAE;EACjB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC;EAC9B,IAAI,CAAC,MAAM,CAAC,CAAC;AACf;AAEA,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC;AACrB,GAAG,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC;AACrB,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS;AACvC,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AACnC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EACjC,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI;EACxB,IAAI,OAAO,GAAG,QAAQ,CAAC,MAAM;EAC7B,IAAI,OAAO,GAAG,OAAO,GAAG,CAAC;EACzB,IAAI,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC;EAE9B,IAAI,WAAW,GAAG,EAAE;EACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;IAChC,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EAC9B;EAEA,KAAK,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;IACjC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;IAE1B,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE;MACrB,CAAC,GAAI,CAAC,IAAI,CAAC,GAAK,CAAC,KAAK,EAAG;MACzB,CAAC,GACE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GACtB,CAAC,CAAC,IAAI,CAAE,CAAC,KAAK,EAAE,GAAI,IAAI,CAAC,IAAI,EAAG,GAChC,CAAC,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC,GAAI,IAAI,CAAC,IAAI,CAAE,GAC9B,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAE;MAEpB,CAAC,IAAI,IAAI,CAAE,CAAC,GAAG,OAAO,GAAI,CAAC,CAAC,IAAI,EAAE;IACpC,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE;MAC3C,CAAC,GACE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GACtB,CAAC,CAAC,IAAI,CAAE,CAAC,KAAK,EAAE,GAAI,IAAI,CAAC,IAAI,EAAG,GAChC,CAAC,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC,GAAI,IAAI,CAAC,IAAI,CAAE,GAC9B,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAE;IACtB;IAEA,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;EAC/C;EAEA,IAAI,cAAc,GAAG,EAAE;EACvB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE;IAClC,IAAI,GAAG,GAAG,MAAM,GAAG,EAAE;IACrB,IAAI,EAAE,GAAG,WAAW,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5C,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;MACtB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE;IACzB,CAAC,MAAM;MACL,cAAc,CAAC,EAAE,CAAC,GAChB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GACnC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAE,EAAE,KAAK,EAAE,GAAI,IAAI,CAAC,CAAC,GAC5C,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAE,EAAE,KAAK,CAAC,GAAI,IAAI,CAAC,CAAC,GAC3C,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC;EACF;EAEA,IAAI,CAAC,QAAQ,GAAG,OAAO;EACvB,IAAI,CAAC,YAAY,GAAG,WAAW;EAC/B,IAAI,CAAC,eAAe,GAAG,cAAc;AACvC,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,eAAe,GAAG,UAAU,CAAC,EAAE;EAC3C,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;EACpB,OAAO,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC3E,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,CAAC,EAAE;EACxC,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;EACjC,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;EAChC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC5B,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC5B,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC5B,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC7B,OAAO,GAAG;AACZ,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,CAAC,EAAE;EACxC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;;EAEpB;EACA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;EACb,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACX,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;EAET,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;EACvF,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;EAChC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC5B,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC5B,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EAC5B,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC7B,OAAO,GAAG;AACZ,CAAC;AAED,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;EAChC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;EAC3B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;EAC9B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG;;;;;ACnOxB,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;AAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;AACtC,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAClC,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAC9B,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AAEhC,SAAS,OAAO,CAAE,CAAC,EAAE,CAAC,EAAE;EACtB,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE;EAEhC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;EACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;IAC5B,GAAG,IAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE;EACtB;EAEA,OAAO,GAAG;AACZ;AAEA,SAAS,MAAM,CAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;EAC7B,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,EAAE;IACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;EACvD;EACA,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;EACzB,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM;EACnB,IAAI,KAAK,GAAG,GAAG,GAAG,EAAE;EACpB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;EAChB,IAAI,KAAK,EAAE;IACT,KAAK,GAAG,EAAE,GAAG,KAAK;IAClB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;EACtC;EACA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAChC,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;EACpB,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EAC1B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;EAC9B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;EAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK;EACzB,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;EAClC,MAAM,CAAC,GAAG,CAAC;EACX,OAAO,GAAG;AACZ;AACA,SAAS,YAAY,CAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;EAC7C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EAEpB,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;EAE1B,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;EAC/B,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;EACrC,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;EAC3B,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;EAEzB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;EAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;EACnC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;EACtC,IAAI,CAAC,QAAQ,GAAG,OAAO;EACvB,IAAI,CAAC,KAAK,GAAG,CAAC;EACd,IAAI,CAAC,IAAI,GAAG,CAAC;EACb,IAAI,CAAC,KAAK,GAAG,IAAI;EAEjB,IAAI,CAAC,QAAQ,GAAG,IAAI;EACpB,IAAI,CAAC,OAAO,GAAG,KAAK;AACtB;AAEA,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;AAEjC,YAAY,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,KAAK,EAAE;EAChD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE;IAC/B,IAAI,IAAI,GAAG,EAAE,GAAI,IAAI,CAAC,KAAK,GAAG,EAAG;IACjC,IAAI,IAAI,GAAG,EAAE,EAAE;MACb,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;MAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B;EACF;EAEA,IAAI,CAAC,OAAO,GAAG,IAAI;EACnB,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;EACzC,IAAI,IAAI,CAAC,QAAQ,EAAE;IACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;EAC3B,CAAC,MAAM;IACL,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;EACzB;EACA,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM;EACzB,OAAO,GAAG;AACZ,CAAC;AAED,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EAC1C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;EAExG,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACvG,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC;EAErH,IAAI,CAAC,QAAQ,GAAG,GAAG;EACnB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,YAAY,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAA,EAAI;EACzD,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;EAExH,OAAO,IAAI,CAAC,QAAQ;AACtB,CAAC;AAED,YAAY,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAE,GAAG,EAAE;EAC5D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;EAEtF,IAAI,CAAC,QAAQ,GAAG,GAAG;AACrB,CAAC;AAED,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAE,GAAG,EAAE;EACpD,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;EAE/E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;EACvB,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM;AAC1B,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,YAAY;;;;;ACpH7B,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;AACpC,IAAI,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;AACtC,IAAI,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAExC,SAAS,UAAU,CAAA,EAAI;EACrB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B;AAEA,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY;AAC5D,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc;AAClE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,cAAc;AACpE,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,gBAAgB;AAC1E,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,GAAG,UAAU;;;;;ACZrD,IAAI,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;AACxC,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAC9B,IAAI,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAC5C,IAAI,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;AACtC,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;AAC1B,IAAI,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACpC,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,SAAS,QAAQ,CAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;EAChC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EAEpB,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,CAAC;EAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EACnB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;EAC/B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;EAC5B,IAAI,CAAC,KAAK,GAAG,IAAI;EACjB,IAAI,CAAC,YAAY,GAAG,IAAI;AAC1B;AAEA,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;AAE7B,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE;EAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;EACrB,IAAI,KAAK;EACT,IAAI,KAAK;EACT,IAAI,GAAG,GAAG,EAAE;EACZ,OAAQ,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAG;IACnD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;IACvC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;EACjB;EACA,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3B,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EACtC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;EAC/B,IAAI,IAAI,CAAC,YAAY,EAAE;IACrB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;EAC/C,CAAC,MAAM,IAAI,KAAK,EAAE;IAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;EACtD;AACF,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,KAAK,EAAE;EACnD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK;EAC3B,OAAO,IAAI;AACb,CAAC;AAED,SAAS,QAAQ,CAAA,EAAI;EACnB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AACpC;AAEA,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;EACvC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,UAAU,WAAW,EAAE;EAC9C,IAAI,GAAG;EACP,IAAI,WAAW,EAAE;IACf,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;MAC1B,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;MAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;MACjC,OAAO,GAAG;IACZ;EACF,CAAC,MAAM;IACL,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE;MAC3B,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;MAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;MACjC,OAAO,GAAG;IACZ;EACF;EAEA,OAAO,IAAI;AACb,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;EACrC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK;AAC1C,CAAC;AAED,SAAS,KAAK,CAAE,IAAI,EAAE;EACpB,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;EACrB,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,EAAE;IAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;EAC3C;EACA,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE;IACnB,IAAI,IAAI,CAAE,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAE,KAAK,MAAM,EAAE;MACxC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;IAC3C;EACF;EACA,IAAI,MAAM,KAAK,EAAE,EAAE;EAEnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC;AACnC;AAEA,SAAS,gBAAgB,CAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;EAC9C,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;EACvC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC;EAEtD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;EAChD,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC;EAE3G,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;EAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC;EAEpG,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;IAC5B,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC;EAC5D,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;IACjC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC;EAC1D;EAEA,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;AAClD;AAEA,SAAS,cAAc,CAAE,KAAK,EAAE,QAAQ,EAAE;EACxC,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;EACvC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC;EAEtD,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;EACvD,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;AACnD;AAEA,OAAO,CAAC,cAAc,GAAG,cAAc;AACvC,OAAO,CAAC,gBAAgB,GAAG,gBAAgB;;;;;AC3H3C,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAC9B,IAAI,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;AACxC,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAC5C,IAAI,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;AACtC,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;AAC1B,IAAI,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACpC,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,SAAS,MAAM,CAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;EAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EAEpB,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,CAAC;EAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;EAC/B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;EAC5B,IAAI,CAAC,KAAK,GAAG,IAAI;EACjB,IAAI,CAAC,YAAY,GAAG,IAAI;AAC1B;AAEA,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;AAE3B,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE;EACzC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;EACrB,IAAI,KAAK;EACT,IAAI,KAAK;EACT,IAAI,GAAG,GAAG,EAAE;EAEZ,OAAQ,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAG;IAClC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;IACvC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;EACjB;EAEA,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3B,CAAC;AAED,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC;AAEpC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EACpC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;EAC/B,IAAI,IAAI,CAAC,YAAY,EAAE;IACrB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,KAAK;EACd;EAEA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;IAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;EACtD;AACF,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,KAAK,EAAE;EACjD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK;EAC3B,OAAO,IAAI;AACb,CAAC;AAED,SAAS,QAAQ,CAAA,EAAI;EACnB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AACpC;AAEA,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE;EACvC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,YAAY;EACnC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;IAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IACjC,OAAO,GAAG;EACZ;EACA,OAAO,IAAI;AACb,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;EACrC,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;EAChC,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;EAErC,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE;IAChB,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;EAC5B;EAEA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;EAC5C,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;EACvC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC;EAEtD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;EAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC;EAEpG,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;EAChD,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC;EAE3G,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;IAC5B,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;EACtD,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;IACjC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;EACpD;EAEA,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;AAChD;AAEA,SAAS,YAAY,CAAE,KAAK,EAAE,QAAQ,EAAE;EACtC,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;EACvC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC;EAEtD,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;EACvD,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;AACjD;AAEA,OAAO,CAAC,cAAc,GAAG,cAAc;AACvC,OAAO,CAAC,YAAY,GAAG,YAAY;;;;;ACjHnC,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;AAEhC,SAAS,OAAO,CAAE,GAAG,EAAE;EACrB,OAAO,CACL,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EACnB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EACnB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EACnB,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CACrB;AACH;AAEA,SAAS,SAAS,CAAE,GAAG,EAAE;EACvB,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;EAChC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;EAClC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;EAClC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;EAClC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;EACnC,OAAO,GAAG;AACZ;AAEA,SAAS,KAAK,CAAE,GAAG,EAAE;EACnB,IAAI,CAAC,CAAC,GAAG,GAAG;EACZ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;EAChC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AACpC;;AAEA;AACA;AACA,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,KAAK,EAAE;EACvC,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;IACzB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;EAC3B;EACA,IAAI,CAAC,SAAS,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,YAAY;EACtC,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;EACxB,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACrB,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK;EAChB,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE;IAChB,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAI,CAAC,IAAK,CAAC,GAAI,CAAC,GAAG,CAAI,MAAM,CAAC;IACzD,IAAI,EAAE,EAAE;MACN;MACA,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;MACd,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;MACd,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;MACd,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAChB;;IAEA;IACA,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;;IAEzB;IACA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;MACtB,EAAE,CAAC,CAAC,CAAC,GAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAG;IACjD;IACA,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;;IAEnB;IACA,IAAI,KAAK,EAAE;MACT,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAI,IAAI,IAAI,EAAG;IAC9B;EACF;EACA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,GAAG,EAAE;EACtC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAC7C,IAAI,KAAK;EACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE;IAC9B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;EACnB;AACF,CAAC;AAED,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAG,EAAE,EAAE,EAAE;EACzC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;EACrD;EAEA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;EACtC,OAAO,IAAI,CAAC,KAAK;AACnB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,KAAK;;;;;ACxFtB,SAAS,MAAM,CAAE,EAAE,EAAE;EACnB,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM;EACnB,IAAI,IAAI;EACR,OAAO,GAAG,EAAE,EAAE;IACZ,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;IACxB,IAAI,IAAI,KAAK,GAAG,EAAE;MAChB,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC;IACvB,CAAC,MAAM;MACL,IAAI,EAAE;MACN,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;MACxB;IACF;EACF;AACF;AACA,MAAM,CAAC,OAAO,GAAG,MAAM;;;;;ACdvB,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;AAE/B,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACvC,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;EAEjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;EAC5C,OAAO,IAAI,CAAC,KAAK;AACnB,CAAC;AAED,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACvC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK;EAEpB,IAAI,CAAC,KAAK,GAAG,KAAK;EAClB,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;EAE1C,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AACtB,CAAC;;;;;AChBD,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;AAE/B,SAAS,YAAY,CAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;EAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;EACrB,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;EAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;EACpC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;EAC9D,OAAO,GAAG;AACZ;AAEA,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;EAC/C,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;EAC/B,IAAI,GAAG;EAEP,OAAO,IAAI,CAAC,MAAM,EAAE;IAClB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;MAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;MACnD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACpC;IAEA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;MACrC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;MACxB,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;MAC3E,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB,CAAC,MAAM;MACL,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;MAC7D;IACF;EACF;EAEA,OAAO,GAAG;AACZ,CAAC;;;;;AChCD,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAE1C,SAAS,WAAW,CAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;EAC9C,IAAI,GAAG;EACP,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,GAAG,GAAG,CAAC;EACX,IAAI,GAAG,EAAE,KAAK;EACd,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE;IAChB,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3C,GAAG,GAAI,SAAS,GAAI,CAAC,IAAK,CAAC,GAAG,CAAG,GAAI,IAAI,GAAG,CAAC;IAC7C,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;IACpB,GAAG,IAAK,CAAC,KAAK,GAAG,IAAI,KAAM,CAAC,GAAG,CAAG;IAClC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC;EACzD;EACA,OAAO,GAAG;AACZ;AAEA,SAAS,OAAO,CAAE,MAAM,EAAE,KAAK,EAAE;EAC/B,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM;EACvB,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;EAC3C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAEtD,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE;IAChB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAK,CAAE;EAChD;EAEA,OAAO,GAAG;AACZ;AAEA,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;EAChD,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM;EACtB,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;EACjC,IAAI,CAAC,GAAG,CAAC,CAAC;EAEV,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE;IAChB,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;EAC/C;EAEA,OAAO,GAAG;AACZ,CAAC;;;;;ACzCD,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAE1C,SAAS,WAAW,CAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;EAC9C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;EAC/C,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;EAE5B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CACzB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EACnB,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CACzC,CAAC;EAEF,OAAO,GAAG;AACZ;AAEA,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;EAChD,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM;EACtB,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;EACjC,IAAI,CAAC,GAAG,CAAC,CAAC;EAEV,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE;IAChB,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;EAC/C;EAEA,OAAO,GAAG;AACZ,CAAC;;;;;ACxBD,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;AAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;AAEjC,SAAS,QAAQ,CAAE,IAAI,EAAE;EACvB,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;EAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;EAClB,OAAO,GAAG;AACZ;AAEA,IAAI,SAAS,GAAG,EAAE;AAClB,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACvC,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;EAClD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;EAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAC1B,IAAI,CAAC,MAAM,EACX,MAAM,CAAC,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,CACzC,CAAC;EACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;IACjC,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;IACxB,IAAI,MAAM,GAAG,KAAK,GAAG,CAAC,GAAG,SAAS;IAClC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;EAChD;EACA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;EAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;EAC7C,OAAO,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;AACxB,CAAC;;;;;AC7BD,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACvC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;AACzC,CAAC;AAED,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACvC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;AACzC,CAAC;;;;;ACND,IAAI,WAAW,GAAG;EAChB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;EACvB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;EACvB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;EACrB,GAAG,EAAE,OAAO,CAAC,OAAO;AACtB,CAAC;AAED,IAAI,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;AAElC,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;EACrB,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAClD;AAEA,MAAM,CAAC,OAAO,GAAG,KAAK;;;ACjBtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC/LA,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;AAE/B,SAAS,QAAQ,CAAE,IAAI,EAAE;EACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;EAClD,OAAO,IAAI,CAAC,KAAK;AACnB;AAEA,OAAO,CAAC,OAAO,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACvC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;IACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;EAC5D;EAEA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAA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AAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;EAC5C,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EAC9C,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC;AAC5F;AACA,GAAG,CAAC,IAAI,GAAG,IAAI;AAEf,MAAM,CAAC,OAAO,GAAG,GAAG;;;;;;;AClCpB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,2BAA2B,CAAC;;;ACArD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;A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EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAEnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAEtD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAEnD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAEnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAEpD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACrD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAEnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAA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,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,gEAAgE,CACjE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE;EAEL,CAAC;EACD,GAAG,EAAE;IACH,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CACN,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,gEAAgE,EAChE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,iEAAiE,EACjE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,iEAAiE,CAClE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE,EACD,CACE,kEAAkE,EAClE,kEAAkE,CACnE;EAEL;AACF,CAAC;;;AC3wBD,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO;AACnB,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;AACzB,IAAI,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAC9C,IAAI,QAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC;AAEnD,KAAK,CAAC,MAAM,GAAG,SAAS;AACxB,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO;AAChC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;AAC5B,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;AAC5B,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;;AAE9B;AACA,SAAS,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE;EAC5B,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;EACxD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;EAEX,IAAI,EAAE,GAAG,CAAC,IAAK,CAAC,GAAG,CAAE;EACrB,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;EAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACnC,IAAI,CAAC;IACL,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;MACb,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EACrB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,KAEpB,CAAC,GAAG,GAAG;MACT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,CAAC,MAAM;MACL,CAAC,GAAG,CAAC;IACP;IAEA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACV,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;EACb;EAEA,OAAO,GAAG;AACZ;AACA,KAAK,CAAC,MAAM,GAAG,MAAM;;AAErB;AACA,SAAS,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE;EACtB,IAAI,GAAG,GAAG,CACR,EAAE,EACF,EAAE,CACH;EAED,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;EACf,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;EACf,IAAI,EAAE,GAAG,CAAC;EACV,IAAI,EAAE,GAAG,CAAC;EACV,IAAI,EAAE;EACN,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;IAC3C;IACA,IAAI,GAAG,GAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;IAChC,IAAI,GAAG,GAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;IAChC,IAAI,GAAG,KAAK,CAAC,EACX,GAAG,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,KAAK,CAAC,EACX,GAAG,GAAG,CAAC,CAAC;IACV,IAAI,EAAE;IACN,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE;MACnB,EAAE,GAAG,CAAC;IACR,CAAC,MAAM;MACL,EAAE,GAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;MAC3B,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,EACrC,EAAE,GAAG,CAAC,GAAG,CAAC,KAEV,EAAE,GAAG,GAAG;IACZ;IACA,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAEf,IAAI,EAAE;IACN,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE;MACnB,EAAE,GAAG,CAAC;IACR,CAAC,MAAM;MACL,EAAE,GAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;MAC3B,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,EACrC,EAAE,GAAG,CAAC,GAAG,CAAC,KAEV,EAAE,GAAG,GAAG;IACZ;IACA,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;IAEf;IACA,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EACnB,EAAE,GAAG,CAAC,GAAG,EAAE;IACb,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EACnB,EAAE,GAAG,CAAC,GAAG,EAAE;IACb,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACZ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;EACd;EAEA,OAAO,GAAG;AACZ;AACA,KAAK,CAAC,MAAM,GAAG,MAAM;AAErB,SAAS,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;EAC3C,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI;EACpB,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,cAAc,CAAA,EAAG;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GACxC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;EACnC,CAAC;AACH;AACA,KAAK,CAAC,cAAc,GAAG,cAAc;AAErC,SAAS,UAAU,CAAC,KAAK,EAAE;EACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAC5D,KAAK;AACT;AACA,KAAK,CAAC,UAAU,GAAG,UAAU;AAE7B,SAAS,SAAS,CAAC,KAAK,EAAE;EACxB,OAAO,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACnC;AACA,KAAK,CAAC,SAAS,GAAG,SAAS;;;;;ACrH3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,IAAI,oBAAoB;AACxD,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,kBAAkB;AAClD,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,oBAAoB;AAE1D,SAAS,YAAY,CAAA,EAAG;EACtB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;IAC3E,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,YAAY,GAAG,CAAC;EACvB;EAEA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,SAAS;AACtD;AACA,MAAM,CAAC,OAAO,GAAG,YAAY;;AAE7B;AACA,YAAY,CAAC,YAAY,GAAG,YAAY;AAExC,YAAY,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS;AAC1C,YAAY,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS;;AAEhD;AACA;AACA,IAAI,mBAAmB,GAAG,EAAE;AAE5B,IAAI,iBAAiB;AACrB,IAAI;EACF,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE;IAAE,KAAK,EAAE;EAAE,CAAC,CAAC;EACtE,iBAAiB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,CAAC,CAAC,OAAO,GAAG,EAAE;EAAE,iBAAiB,GAAG,KAAK;AAAC;AAC1C,IAAI,iBAAiB,EAAE;EACrB,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,qBAAqB,EAAE;IACzD,UAAU,EAAE,IAAI;IAChB,GAAG,EAAE,SAAA,CAAA,EAAW;MACd,OAAO,mBAAmB;IAC5B,CAAC;IACD,GAAG,EAAE,SAAA,CAAS,GAAG,EAAE;MACjB;MACA;MACA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,EACnD,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC;MACxE,mBAAmB,GAAG,GAAG;IAC3B;EACF,CAAC,CAAC;AACJ,CAAC,MAAM;EACL,YAAY,CAAC,mBAAmB,GAAG,mBAAmB;AACxD;;AAEA;AACA;AACA,YAAY,CAAC,SAAS,CAAC,eAAe,GAAG,SAAS,eAAe,CAAC,CAAC,EAAE;EACnE,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAC5C,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;EAC/D,IAAI,CAAC,aAAa,GAAG,CAAC;EACtB,OAAO,IAAI;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAI,EAAE;EAC9B,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAClC,OAAO,YAAY,CAAC,mBAAmB;EACzC,OAAO,IAAI,CAAC,aAAa;AAC3B;AAEA,YAAY,CAAC,SAAS,CAAC,eAAe,GAAG,SAAS,eAAe,CAAA,EAAG;EAClE,OAAO,gBAAgB,CAAC,IAAI,CAAC;AAC/B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;EACrC,IAAI,IAAI,EACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAChB;IACH,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM;IACxB,IAAI,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAC1B,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EAC3B;AACF;AACA,SAAS,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;EAC1C,IAAI,IAAI,EACN,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KACtB;IACH,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM;IACxB,IAAI,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAC1B,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;EACjC;AACF;AACA,SAAS,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;EAChD,IAAI,IAAI,EACN,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KAC5B;IACH,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM;IACxB,IAAI,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAC1B,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;EACvC;AACF;AACA,SAAS,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;EACxD,IAAI,IAAI,EACN,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KAClC;IACH,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM;IACxB,IAAI,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAC1B,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;EAC7C;AACF;AAEA,SAAS,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;EAC3C,IAAI,IAAI,EACN,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KACvB;IACH,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM;IACxB,IAAI,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAC1B,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;EAClC;AACF;AAEA,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE;EAChD,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM;EACrC,IAAI,OAAO,GAAI,IAAI,KAAK,OAAQ;EAEhC,MAAM,GAAG,IAAI,CAAC,OAAO;EACrB,IAAI,MAAM,EACR,OAAO,GAAI,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,IAAK,CAAC,KACzC,IAAI,CAAC,OAAO,EACf,OAAO,KAAK;;EAEd;EACA,IAAI,OAAO,EAAE;IACX,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACtB,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;IACnB,IAAI,EAAE,YAAY,KAAK,EAAE;MACvB,MAAM,EAAE,CAAC,CAAC;IACZ,CAAC,MAAM;MACL;MACA,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,GAAG,GAAG,CAAC;MAC5D,GAAG,CAAC,OAAO,GAAG,EAAE;MAChB,MAAM,GAAG;IACX;IACA,OAAO,KAAK;EACd;EAEA,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;EAEtB,IAAI,CAAC,OAAO,EACV,OAAO,KAAK;EAEd,IAAI,IAAI,GAAG,OAAO,OAAO,KAAK,UAAU;EACxC,GAAG,GAAG,SAAS,CAAC,MAAM;EACtB,QAAQ,GAAG;IACP;IACF,KAAK,CAAC;MACJ,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;MAC7B;IACF,KAAK,CAAC;MACJ,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;MAC1C;IACF,KAAK,CAAC;MACJ,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;MACxD;IACF,KAAK,CAAC;MACJ,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;MACxE;IACA;IACF;MACE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;MACzB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EACtB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;MAC5B,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;EACvC;EAEA,OAAO,IAAI;AACb,CAAC;AAED,SAAS,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;EACrD,IAAI,CAAC;EACL,IAAI,MAAM;EACV,IAAI,QAAQ;EAEZ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAChC,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;EAE/D,MAAM,GAAG,MAAM,CAAC,OAAO;EACvB,IAAI,CAAC,MAAM,EAAE;IACX,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC;IAC5C,MAAM,CAAC,YAAY,GAAG,CAAC;EACzB,CAAC,MAAM;IACL;IACA;IACA,IAAI,MAAM,CAAC,WAAW,EAAE;MACtB,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAC3B,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;;MAErD;MACA;MACA,MAAM,GAAG,MAAM,CAAC,OAAO;IACzB;IACA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;EACzB;EAEA,IAAI,CAAC,QAAQ,EAAE;IACb;IACA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ;IAClC,EAAE,MAAM,CAAC,YAAY;EACvB,CAAC,MAAM;IACL,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;MAClC;MACA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GACnB,OAAO,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC3D,CAAC,MAAM;MACL;MACA,IAAI,OAAO,EAAE;QACX,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;MAC5B,CAAC,MAAM;QACL,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;MACzB;IACF;;IAEA;IACA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;MACpB,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC;MAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACrC,QAAQ,CAAC,MAAM,GAAG,IAAI;QACtB,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,8CAA8C,GAC5D,QAAQ,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,GACtD,0CAA0C,GAC1C,iBAAiB,CAAC;QACtB,CAAC,CAAC,IAAI,GAAG,6BAA6B;QACtC,CAAC,CAAC,OAAO,GAAG,MAAM;QAClB,CAAC,CAAC,IAAI,GAAG,IAAI;QACb,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM;QACzB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;UAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;QAC3C;MACF;IACF;EACF;EAEA,OAAO,MAAM;AACf;AAEA,YAAY,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE;EACxE,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC;AAClD,CAAC;AAED,YAAY,CAAC,SAAS,CAAC,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,WAAW;AAE9D,YAAY,CAAC,SAAS,CAAC,eAAe,GAClC,SAAS,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE;EACvC,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;AACjD,CAAC;AAEL,SAAS,WAAW,CAAA,EAAG;EACrB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClD,IAAI,CAAC,KAAK,GAAG,IAAI;IACjB,QAAQ,SAAS,CAAC,MAAM;MACtB,KAAK,CAAC;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;MACxC,KAAK,CAAC;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;MACtD,KAAK,CAAC;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;MACpE,KAAK,CAAC;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAC7D,SAAS,CAAC,CAAC,CAAC,CAAC;MACnB;QACE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAClC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;IAC1C;EACF;AACF;AAEA,SAAS,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;EACzC,IAAI,KAAK,GAAG;IAAE,KAAK,EAAE,KAAK;IAAE,MAAM,EAAE,SAAS;IAAE,MAAM,EAAE,MAAM;IAAE,IAAI,EAAE,IAAI;IAAE,QAAQ,EAAE;EAAS,CAAC;EAC/F,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;EAC3C,OAAO,CAAC,QAAQ,GAAG,QAAQ;EAC3B,KAAK,CAAC,MAAM,GAAG,OAAO;EACtB,OAAO,OAAO;AAChB;AAEA,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE;EAC1D,IAAI,OAAO,QAAQ,KAAK,UAAU,EAChC,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;EAC/D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;EAC9C,OAAO,IAAI;AACb,CAAC;AAED,YAAY,CAAC,SAAS,CAAC,mBAAmB,GACtC,SAAS,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE;EAC3C,IAAI,OAAO,QAAQ,KAAK,UAAU,EAChC,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;EAC/D,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;EAC3D,OAAO,IAAI;AACb,CAAC;;AAEL;AACA,YAAY,CAAC,SAAS,CAAC,cAAc,GACjC,SAAS,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;EACtC,IAAI,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,gBAAgB;EAE/C,IAAI,OAAO,QAAQ,KAAK,UAAU,EAChC,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC;EAE/D,MAAM,GAAG,IAAI,CAAC,OAAO;EACrB,IAAI,CAAC,MAAM,EACT,OAAO,IAAI;EAEb,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;EACnB,IAAI,CAAC,IAAI,EACP,OAAO,IAAI;EAEb,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;IACnD,IAAI,EAAE,IAAI,CAAC,YAAY,KAAK,CAAC,EAC3B,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAC/B;MACH,OAAO,MAAM,CAAC,IAAI,CAAC;MACnB,IAAI,MAAM,CAAC,cAAc,EACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAChE;EACF,CAAC,MAAM,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;IACrC,QAAQ,GAAG,CAAC,CAAC;IAEb,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;MACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE;QACzD,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;QACnC,QAAQ,GAAG,CAAC;QACZ;MACF;IACF;IAEA,IAAI,QAAQ,GAAG,CAAC,EACd,OAAO,IAAI;IAEb,IAAI,QAAQ,KAAK,CAAC,EAChB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAEb,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;IAE3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACnB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAExB,IAAI,MAAM,CAAC,cAAc,EACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,IAAI,QAAQ,CAAC;EACnE;EAEA,OAAO,IAAI;AACb,CAAC;AAEL,YAAY,CAAC,SAAS,CAAC,kBAAkB,GACrC,SAAS,kBAAkB,CAAC,IAAI,EAAE;EAChC,IAAI,SAAS,EAAE,MAAM,EAAE,CAAC;EAExB,MAAM,GAAG,IAAI,CAAC,OAAO;EACrB,IAAI,CAAC,MAAM,EACT,OAAO,IAAI;;EAEb;EACA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;IAC1B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;MAC1B,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC;MACjC,IAAI,CAAC,YAAY,GAAG,CAAC;IACvB,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;MACvB,IAAI,EAAE,IAAI,CAAC,YAAY,KAAK,CAAC,EAC3B,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAElC,OAAO,MAAM,CAAC,IAAI,CAAC;IACvB;IACA,OAAO,IAAI;EACb;;EAEA;EACA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;IAC1B,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;IAC7B,IAAI,GAAG;IACP,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;MAChC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;MACb,IAAI,GAAG,KAAK,gBAAgB,EAAE;MAC9B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;IAC9B;IACA,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;IACzC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,YAAY,GAAG,CAAC;IACrB,OAAO,IAAI;EACb;EAEA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;EAExB,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;IACnC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;EACtC,CAAC,MAAM,IAAI,SAAS,EAAE;IACpB;IACA,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;MAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACzC;EACF;EAEA,OAAO,IAAI;AACb,CAAC;AAEL,SAAS,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;EACxC,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO;EAE3B,IAAI,CAAC,MAAM,EACT,OAAO,EAAE;EAEX,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;EAC7B,IAAI,CAAC,UAAU,EACb,OAAO,EAAE;EAEX,IAAI,OAAO,UAAU,KAAK,UAAU,EAClC,OAAO,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;EAEpE,OAAO,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;AACzF;AAEA,YAAY,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,IAAI,EAAE;EAC1D,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACrC,CAAC;AAED,YAAY,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,CAAC,IAAI,EAAE;EAChE,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;AACtC,CAAC;AAED,YAAY,CAAC,aAAa,GAAG,UAAS,OAAO,EAAE,IAAI,EAAE;EACnD,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE;IAC/C,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;EACpC,CAAC,MAAM;IACL,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;EAC1C;AACF,CAAC;AAED,YAAY,CAAC,SAAS,CAAC,aAAa,GAAG,aAAa;AACpD,SAAS,aAAa,CAAC,IAAI,EAAE;EAC3B,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO;EAEzB,IAAI,MAAM,EAAE;IACV,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAE7B,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;MACpC,OAAO,CAAC;IACV,CAAC,MAAM,IAAI,UAAU,EAAE;MACrB,OAAO,UAAU,CAAC,MAAM;IAC1B;EACF;EAEA,OAAO,CAAC;AACV;AAEA,YAAY,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,CAAA,EAAG;EACxD,OAAO,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AACnE,CAAC;;AAED;AACA,SAAS,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;EAC9B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EACnE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;EACnB,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ;AAEA,SAAS,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE;EAC1B,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;EACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EACxB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAClB,OAAO,IAAI;AACb;AAEA,SAAS,eAAe,CAAC,GAAG,EAAE;EAC5B,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;EAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;IACnC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC;EACpC;EACA,OAAO,GAAG;AACZ;AAEA,SAAS,oBAAoB,CAAC,KAAK,EAAE;EACnC,IAAI,CAAC,GAAG,SAAA,CAAA,EAAW,CAAC,CAAC;EACrB,CAAC,CAAC,SAAS,GAAG,KAAK;EACnB,OAAO,IAAI,CAAC,CAAD,CAAC;AACd;AACA,SAAS,kBAAkB,CAAC,GAAG,EAAE;EAC/B,IAAI,IAAI,GAAG,EAAE;EACb,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;IACnE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;EACd;EACA,OAAO,CAAC;AACV;AACA,SAAS,oBAAoB,CAAC,OAAO,EAAE;EACrC,IAAI,EAAE,GAAG,IAAI;EACb,OAAO,YAAY;IACjB,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;EACrC,CAAC;AACH;;;;;AC1gBA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;;AAE3B;AACA,SAAS,cAAc,CAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;EACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;EAC1E,IAAI,IAAI,EAAE;IACR,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC;EACzF;EAEA,IAAI,MAAM,GAAG,OAAO,GAAG,CAAC;EACxB,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;EAC9B,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;EACjC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EAEzB,OAAO,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;IAC9B,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IACrB,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC3B,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnB,IAAI,IAAI,GAAG,CAAC;IAEZ,IAAI,MAAM,GAAG,CAAC,EAAE;MACd,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM;MAClC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;MACnC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;MAChC,MAAM,IAAI,IAAI;IAChB;IAEA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE;MAClC,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,GAAG,KAAK;MAC/B,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;MAC/C,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;MAC1C,KAAK,IAAI,MAAM;IACjB;EACF;EAEA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;EACX,OAAO;IAAE,GAAG,EAAE,GAAG;IAAE,EAAE,EAAE;EAAG,CAAC;AAC7B;AAEA,MAAM,CAAC,OAAO,GAAG,cAAc;;;AC5C/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA,YAAY;;AACZ,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;AAC1C,IAAI,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,SAAS;AACpD,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,SAAS,wBAAwB,CAAE,GAAG,EAAE,MAAM,EAAE;EAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;IACpD,MAAM,IAAI,SAAS,CAAC,MAAM,GAAG,+BAA+B,CAAC;EAC/D;AACF;AAEA,SAAS,QAAQ,CAAE,SAAS,EAAE;EAC5B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EAEpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;EAC3C,IAAI,CAAC,UAAU,GAAG,SAAS;EAC3B,IAAI,CAAC,YAAY,GAAG,CAAC;EACrB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAE3B,IAAI,CAAC,UAAU,GAAG,KAAK;AACzB;AAEA,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;AAE7B,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;EACnE,IAAI,KAAK,GAAG,IAAI;EAChB,IAAI;IACF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;EAC9B,CAAC,CAAC,OAAO,GAAG,EAAE;IACZ,KAAK,GAAG,GAAG;EACb;EAEA,QAAQ,CAAC,KAAK,CAAC;AACjB,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,QAAQ,EAAE;EAC9C,IAAI,KAAK,GAAG,IAAI;EAChB,IAAI;IACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;EAC1B,CAAC,CAAC,OAAO,GAAG,EAAE;IACZ,KAAK,GAAG,GAAG;EACb;EAEA,QAAQ,CAAC,KAAK,CAAC;AACjB,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE;EACpD,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC;EACtC,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;EAC7D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;;EAE9D;EACA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM;EACvB,IAAI,MAAM,GAAG,CAAC;EACd,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;IAClE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACjF,IAAI,CAAC,OAAO,CAAC,CAAC;IACd,IAAI,CAAC,YAAY,GAAG,CAAC;EACvB;EACA,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;;EAExE;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;IACvD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK;IACxB,KAAK,GAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,GAAI,CAAC;IAC5C,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,GAAG,KAAK;EACxD;EAEA,OAAO,IAAI;AACb,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,YAAY;EACvC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AAC/C,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,QAAQ,EAAE;EAC9C,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;EAC7D,IAAI,CAAC,UAAU,GAAG,IAAI;EAEtB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;EAC3B,IAAI,QAAQ,KAAK,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;;EAE9D;EACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;EACnB,IAAI,CAAC,YAAY,GAAG,CAAC;EACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;EAE/C,OAAO,MAAM;AACf,CAAC;AAED,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,YAAY;EACvC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ;;;;;AC9FzB,IAAI,IAAI,GAAG,OAAO;AAElB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;AACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;AACtC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;AAChC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;AACtC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;;AAElC;AACA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;AACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;AAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;AAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;AAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;AAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;;;ACdtC,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAC9B,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAE3C,SAAS,SAAS,CAAA,EAAG;EACnB,IAAI,CAAC,OAAO,GAAG,IAAI;EACnB,IAAI,CAAC,YAAY,GAAG,CAAC;EACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS;EAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;EACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY;EACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC;EAC/C,IAAI,CAAC,MAAM,GAAG,KAAK;EAEnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;EACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE;AACrC;AACA,OAAO,CAAC,SAAS,GAAG,SAAS;AAE7B,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;EACrD;EACA,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;EAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EACf,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,KAEnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;EACzC,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM;;EAE/B;EACA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;IACvC,GAAG,GAAG,IAAI,CAAC,OAAO;;IAElB;IACA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO;IACjC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IACpD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAC3B,IAAI,CAAC,OAAO,GAAG,IAAI;IAErB,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,EAChD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;EAC3C;EAEA,OAAO,IAAI;AACb,CAAC;AAED,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;EAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;EACxB,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;EAE7B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC1B,CAAC;AAED,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,GAAG,CAAA,EAAG;EACxC,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY;EAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO;EACxB,IAAI,CAAC,GAAG,KAAK,GAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,KAAM;EAChD,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;EACvC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;EACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EACxB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;;EAEZ;EACA,GAAG,KAAK,CAAC;EACT,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EACrC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IAEd,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IACZ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IACZ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IACZ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IACZ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,GAAG,KAAK,EAAE,GAAI,IAAI;IAC9B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,GAAG,KAAK,EAAE,GAAI,IAAI;IAC9B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,GAAG,KAAK,CAAC,GAAI,IAAI;IAC7B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI;EACvB,CAAC,MAAM;IACL,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI;IACrB,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,GAAG,KAAK,CAAC,GAAI,IAAI;IAC7B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,GAAG,KAAK,EAAE,GAAI,IAAI;IAC9B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAI,GAAG,KAAK,EAAE,GAAI,IAAI;IAC9B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IACZ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IACZ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IACZ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IAEZ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EACjC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;EAChB;EAEA,OAAO,GAAG;AACZ,CAAC;;;AC3FD,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAC9B,IAAI,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAE3C,SAAS,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;EAC5B,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC,EACzB,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;EACjC,IAAI,CAAC,IAAI,GAAG,IAAI;EAChB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;EACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC;EAC/B,IAAI,CAAC,KAAK,GAAG,IAAI;EACjB,IAAI,CAAC,KAAK,GAAG,IAAI;EAEjB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACrC;AACA,MAAM,CAAC,OAAO,GAAG,IAAI;AAErB,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE;EACxC;EACA,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAC7B,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;EAC5C,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC;;EAEpC;EACA,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAC9C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;EAEb,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI;EAChB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;;EAExC;EACA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI;EAChB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;EAChD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;EAC3B,OAAO,IAAI;AACb,CAAC;AAED,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;EAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACtC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AAC/B,CAAC;;;AC9CD,YAAY;;AAEZ,IAAI,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;AAC9B,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AAEhC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;AACzB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;AACvB,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;AAC3B,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;AAC3B,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS;AAEhC,SAAS,SAAS,CAAA,EAAG;EACnB,IAAI,EAAE,IAAI,YAAY,SAAS,CAAC,EAC9B,OAAO,IAAI,SAAS,CAAC,CAAC;EAExB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;EAEpB,IAAI,CAAC,CAAC,GAAG,CAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAE;EACvE,IAAI,CAAC,MAAM,GAAG,QAAQ;AACxB;AACA,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;AACpC,OAAO,CAAC,SAAS,GAAG,SAAS;AAE7B,SAAS,CAAC,SAAS,GAAG,GAAG;AACzB,SAAS,CAAC,OAAO,GAAG,GAAG;AACvB,SAAS,CAAC,YAAY,GAAG,GAAG;AAC5B,SAAS,CAAC,SAAS,GAAG,EAAE;AAExB,SAAS,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE;EACxD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACjB,IAAI,EAAE,GAAG,CAAC;EACV,IAAI,EAAE,GAAG,CAAC;EACV,IAAI,EAAE,GAAG,CAAC;EACV,IAAI,EAAE,GAAG,CAAC;EACV,IAAI,EAAE,GAAG,CAAC;EACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;IAC3B,IAAI,CAAC,GAAG,KAAK,CACX,MAAM,CACJ,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAClD,CAAC,CAAC,CAAC,CAAC,CAAC,EACP,CAAC,CAAC;IACJ,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;IACjB,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,KAAK,CACP,MAAM,CACJ,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAC7D,EAAE,CAAC,CAAC,CAAC,CAAC,EACR,EAAE,CAAC;IACL,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;IACnB,EAAE,GAAG,EAAE;IACP,EAAE,GAAG,CAAC;EACR;EACA,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EACrC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EACrC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EACrC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EACrC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACf,CAAC;AAED,SAAS,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;EACjD,IAAI,GAAG,KAAK,KAAK,EACf,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,KAEvC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC1C,CAAC;AAED,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EACrB,IAAI,CAAC,IAAI,EAAE,EACT,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KACd,IAAI,CAAC,IAAI,EAAE,EACd,OAAQ,CAAC,GAAG,CAAC,GAAM,CAAC,CAAC,GAAI,CAAE,CAAC,KACzB,IAAI,CAAC,IAAI,EAAE,EACd,OAAO,CAAC,CAAC,GAAI,CAAC,CAAE,IAAI,CAAC,CAAC,KACnB,IAAI,CAAC,IAAI,EAAE,EACd,OAAQ,CAAC,GAAG,CAAC,GAAK,CAAC,GAAI,CAAC,CAAG,CAAC,KAE5B,OAAO,CAAC,IAAI,CAAC,GAAI,CAAC,CAAE,CAAC;AACzB;AAEA,SAAS,CAAC,CAAC,CAAC,EAAE;EACZ,IAAI,CAAC,IAAI,EAAE,EACT,OAAO,UAAU,CAAC,KACf,IAAI,CAAC,IAAI,EAAE,EACd,OAAO,UAAU,CAAC,KACf,IAAI,CAAC,IAAI,EAAE,EACd,OAAO,UAAU,CAAC,KACf,IAAI,CAAC,IAAI,EAAE,EACd,OAAO,UAAU,CAAC,KAElB,OAAO,UAAU;AACrB;AAEA,SAAS,EAAE,CAAC,CAAC,EAAE;EACb,IAAI,CAAC,IAAI,EAAE,EACT,OAAO,UAAU,CAAC,KACf,IAAI,CAAC,IAAI,EAAE,EACd,OAAO,UAAU,CAAC,KACf,IAAI,CAAC,IAAI,EAAE,EACd,OAAO,UAAU,CAAC,KACf,IAAI,CAAC,IAAI,EAAE,EACd,OAAO,UAAU,CAAC,KAElB,OAAO,UAAU;AACrB;AAEA,IAAI,CAAC,GAAG,CACN,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CACrD;AAED,IAAI,EAAE,GAAG,CACP,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACpD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CACrD;AAED,IAAI,CAAC,GAAG,CACN,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACtD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACtD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAA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,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,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C,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC;QAAC,CAAC,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;QAAC,CAAC,GAAC,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,CAAC;QAAC,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC;MAAC,CAAC,CAAC,CAAC,CAAC;MAAC,IAAI,CAAC,GAAC,IAAI,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC;MAAC,CAAC,CAAC,CAAC,CAAC;MAAC,IAAI,CAAC,GAAC,IAAI,KAA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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC1B,OAAO,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;EAChC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,KAAK,EAAE;EACzB;EACA;EACA,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;EAC3D,OAAO,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,MAAM;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,OAAO,KAAK,IAAI,QAAQ,IAC7B,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,gBAAgB;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,IAAI,IAAI,GAAG,OAAO,KAAK;EACvB,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,UAAU,CAAC;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,OAAO,KAAK,IAAI,QAAQ,IAC5B,YAAY,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAU;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC,GAAG,gBAAgB;;AAEpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;EACvC,IAAI,MAAM,GAAG,MAAM,IAAI,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;EAC/D,OAAO,MAAM,KAAK,SAAS,GAAG,YAAY,GAAG,MAAM;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;EAC3B,OAAO,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,MAAM,EAAE;EACpB,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AACvE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,IAAI,EAAE;EACtB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACzE;AAEA,MAAM,CAAC,OAAO,GAAG,OAAO;;;;;;;ACh0ExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,OAAO,GAAG,kBAAkB;;AAEhC;AACA,IAAI,WAAW,GAAG,MAAM,CAAC,SAAS;;AAElC;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG,WAAW,CAAC,QAAQ;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,KAAK,EAAE;EACxB,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IACrC,YAAY,CAAC,KAAK,CAAC,I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CA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,IAAI,EAAE;EACtB,IAAI,IAAI,IAAI,IAAI,EAAE;IAChB,IAAI;MACF,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACb,IAAI;MACF,OAAQ,IAAI,GAAG,EAAE;IACnB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;EACf;EACA,OAAO,EAAE;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE;EACxB,OAAO,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAM;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG,eAAe,CAAC,YAAW;EAAE,OAAO,SAAS;AAAE,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,GAAG,UAAS,KAAK,EAAE;EACxG,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAChE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC/C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC1B,OAAO,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG,cAAc,IAAI,SAAS;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE;EAC7B,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,KAAK,EAAE;EACzB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACpB,OAAO,KAAK;EACd;EACA;EACA;EACA,IAAI,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC;EAC3B,OAAO,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ;AAC9E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,OAAO,OAAO,KAAK,IAAI,QAAQ,IAC7B,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,gBAAgB;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,IAAI,IAAI,GAAG,OAAO,KAAK;EACvB,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,UAAU,CAAC;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;EAC3B,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,IAAI,QAAQ;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC,GAAG,gBAAgB;;AAEpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,MAAM,EAAE;EACpB,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AACvE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAA,EAAG;EACnB,OAAO,EAAE;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAA,EAAG;EACnB,OAAO,KAAK;AACd;AAEA,MAAM,CAAC,OAAO,GAAG,OAAO;;;;;;;;ACvzDxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,QAAQ,GAAG,wBAAwB;EACnC,OAAO,GAAG,mBAAmB;EAC7B,MAAM,GAAG,4BAA4B;EACrC,OAAO,GAAG,eAAe;EACzB,QAAQ,GAAG,gBAAgB;EAC3B,YAAY,GAAG,oBAAoB;;AAEvC;AACA,IAAI,UAA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,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAE1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAE1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAEzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACxC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EAC1C,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;EACzC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC;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,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CACrD;AAED,IAAI,EAAE,GAAG,CACP,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACpD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CACrD;AAED,IAAI,EAAE,GAAG,CACP,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EACtD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACtD,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACvD;AAED,IAAI,EAAE,GAAG,CACP,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,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EAC3B,IAAI;IACF,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,gBAAgB;EACrE,CAAC,CAAC,OAAO,CAAC,EAAE;IACV;IACA;EAAA;AAEJ;AAEA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;EACpB,KAAK,CAAC,SAAS,GAAG;IAChB,UAAU,EAAE,KAAK,CAAC;EACpB,CAAC;EACD,IAAI,KAAK,CAAC,gBAAgB,EAAE;IAC1B,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,CAAC,gBAAgB;EAC5D;AACF;AAEA,MAAM,CAAC,OAAO,GAAG,KAAK;;;;;AC5EtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChhEA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM;;AAE1C;AACA,SAAS,IAAI,CAAE,SAAS,EAAE,SAAS,EAAE;EACnC,IAAI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9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAC9C,UAAU,EAA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AsB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAEhE,SAAS,sBAAsB,CAAC,GAAG,EAAE;EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,GAAG;IAAE,OAAO,EAAE;EAAI,CAAC;AAAE;AAE9F,SAAS,OAAO,CAAC,IAAI,EAAE;EACrB,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;IACjC,MAAM,SAAS,CAAC,cAAc,CAAC;EACjC;EAEA,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACzC;AAEA,IAAI,QAAQ,GAAG,OAAO;AACtB,OAAO,CAAC,OAAO,GAAG,QAAQ;;;ACpB1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", + "file": "generated.js", + "sourceRoot": "", + "sourcesContent": [ + "(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i {\n const worksheet = this.workbook.addWorksheet(options.sheetName);\n\n const dateFormats = options.dateFormats || [\n 'YYYY-MM-DD[T]HH:mm:ssZ',\n 'YYYY-MM-DD[T]HH:mm:ss',\n 'MM-DD-YYYY',\n 'YYYY-MM-DD',\n ];\n const map =\n options.map ||\n function(datum) {\n if (datum === '') {\n return null;\n }\n const datumNumber = Number(datum);\n if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) {\n return datumNumber;\n }\n const dt = dateFormats.reduce((matchingDate, currentDateFormat) => {\n if (matchingDate) {\n return matchingDate;\n }\n const dayjsObj = dayjs(datum, currentDateFormat, true);\n if (dayjsObj.isValid()) {\n return dayjsObj;\n }\n return null;\n }, null);\n if (dt) {\n return new Date(dt.valueOf());\n }\n const special = SpecialValues[datum];\n if (special !== undefined) {\n return special;\n }\n return datum;\n };\n\n const csvStream = fastCsv\n .parse(options.parserOptions)\n .on('data', data => {\n worksheet.addRow(data.map(map));\n })\n .on('end', () => {\n csvStream.emit('worksheet', worksheet);\n });\n\n csvStream.on('worksheet', resolve).on('error', reject);\n\n stream.pipe(csvStream);\n });\n }\n\n /**\n * @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\n */\n createInputStream() {\n throw new Error(\n '`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\n );\n }\n\n write(stream, options) {\n return new Promise((resolve, reject) => {\n options = options || {};\n // const encoding = options.encoding || 'utf8';\n // const separator = options.separator || ',';\n // const quoteChar = options.quoteChar || '\\'';\n\n const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId);\n\n const csvStream = fastCsv.format(options.formatterOptions);\n stream.on('finish', () => {\n resolve();\n });\n csvStream.on('error', reject);\n csvStream.pipe(stream);\n\n const {dateFormat, dateUTC} = options;\n const map =\n options.map ||\n (value => {\n if (value) {\n if (value.text || value.hyperlink) {\n return value.hyperlink || value.text || '';\n }\n if (value.formula || value.result) {\n return value.result || '';\n }\n if (value instanceof Date) {\n if (dateFormat) {\n return dateUTC\n ? dayjs.utc(value).format(dateFormat)\n : dayjs(value).format(dateFormat);\n }\n return dateUTC ? dayjs.utc(value).format() : dayjs(value).format();\n }\n if (value.error) {\n return value.error;\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n }\n return value;\n });\n\n const includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows;\n let lastRow = 1;\n if (worksheet) {\n worksheet.eachRow((row, rowNumber) => {\n if (includeEmptyRows) {\n while (lastRow++ < rowNumber - 1) {\n csvStream.write([]);\n }\n }\n const {values} = row;\n values.shift();\n csvStream.write(values.map(map));\n lastRow = rowNumber;\n });\n }\n csvStream.end();\n });\n }\n\n writeFile(filename, options) {\n options = options || {};\n\n const streamOptions = {\n encoding: options.encoding || 'utf8',\n };\n const stream = fs.createWriteStream(filename, streamOptions);\n\n return this.write(stream, options);\n }\n\n async writeBuffer(options) {\n const stream = new StreamBuf();\n await this.write(stream, options);\n return stream.read();\n }\n}\n\nmodule.exports = CSV;\n", + "'use strict';\n\nconst colCache = require('../utils/col-cache');\n\nclass Anchor {\n constructor(worksheet, address, offset = 0) {\n this.worksheet = worksheet;\n\n if (!address) {\n this.nativeCol = 0;\n this.nativeColOff = 0;\n this.nativeRow = 0;\n this.nativeRowOff = 0;\n } else if (typeof address === 'string') {\n const decoded = colCache.decodeAddress(address);\n this.nativeCol = decoded.col + offset;\n this.nativeColOff = 0;\n this.nativeRow = decoded.row + offset;\n this.nativeRowOff = 0;\n } else if (address.nativeCol !== undefined) {\n this.nativeCol = address.nativeCol || 0;\n this.nativeColOff = address.nativeColOff || 0;\n this.nativeRow = address.nativeRow || 0;\n this.nativeRowOff = address.nativeRowOff || 0;\n } else if (address.col !== undefined) {\n this.col = address.col + offset;\n this.row = address.row + offset;\n } else {\n this.nativeCol = 0;\n this.nativeColOff = 0;\n this.nativeRow = 0;\n this.nativeRowOff = 0;\n }\n }\n\n static asInstance(model) {\n return model instanceof Anchor || model == null ? model : new Anchor(model);\n }\n\n get col() {\n return this.nativeCol + (Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth);\n }\n\n set col(v) {\n this.nativeCol = Math.floor(v);\n this.nativeColOff = Math.floor((v - this.nativeCol) * this.colWidth);\n }\n\n get row() {\n return this.nativeRow + (Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight);\n }\n\n set row(v) {\n this.nativeRow = Math.floor(v);\n this.nativeRowOff = Math.floor((v - this.nativeRow) * this.rowHeight);\n }\n\n get colWidth() {\n return this.worksheet &&\n this.worksheet.getColumn(this.nativeCol + 1) &&\n this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth\n ? Math.floor(this.worksheet.getColumn(this.nativeCol + 1).width * 10000)\n : 640000;\n }\n\n get rowHeight() {\n return this.worksheet &&\n this.worksheet.getRow(this.nativeRow + 1) &&\n this.worksheet.getRow(this.nativeRow + 1).height\n ? Math.floor(this.worksheet.getRow(this.nativeRow + 1).height * 10000)\n : 180000;\n }\n\n get model() {\n return {\n nativeCol: this.nativeCol,\n nativeColOff: this.nativeColOff,\n nativeRow: this.nativeRow,\n nativeRowOff: this.nativeRowOff,\n };\n }\n\n set model(value) {\n this.nativeCol = value.nativeCol;\n this.nativeColOff = value.nativeColOff;\n this.nativeRow = value.nativeRow;\n this.nativeRowOff = value.nativeRowOff;\n }\n}\n\nmodule.exports = Anchor;\n", + "/* eslint-disable max-classes-per-file */\nconst colCache = require('../utils/col-cache');\nconst _ = require('../utils/under-dash');\nconst Enums = require('./enums');\nconst {slideFormula} = require('../utils/shared-formula');\nconst Note = require('./note');\n// Cell requirements\n// Operate inside a worksheet\n// Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc.\n// Manage/use and manipulate cell format either as local to cell or inherited from column or row.\n\nclass Cell {\n constructor(row, column, address) {\n if (!row || !column) {\n throw new Error('A Cell needs a Row');\n }\n\n this._row = row;\n this._column = column;\n\n colCache.validateAddress(address);\n this._address = address;\n\n // TODO: lazy evaluation of this._value\n this._value = Value.create(Cell.Types.Null, this);\n\n this.style = this._mergeStyle(row.style, column.style, {});\n\n this._mergeCount = 0;\n }\n\n get worksheet() {\n return this._row.worksheet;\n }\n\n get workbook() {\n return this._row.worksheet.workbook;\n }\n\n // help GC by removing cyclic (and other) references\n destroy() {\n delete this.style;\n delete this._value;\n delete this._row;\n delete this._column;\n delete this._address;\n }\n\n // =========================================================================\n // Styles stuff\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this.style.numFmt = value;\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this.style.font = value;\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this.style.alignment = value;\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this.style.border = value;\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this.style.fill = value;\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this.style.protection = value;\n }\n\n _mergeStyle(rowStyle, colStyle, style) {\n const numFmt = (rowStyle && rowStyle.numFmt) || (colStyle && colStyle.numFmt);\n if (numFmt) style.numFmt = numFmt;\n\n const font = (rowStyle && rowStyle.font) || (colStyle && colStyle.font);\n if (font) style.font = font;\n\n const alignment = (rowStyle && rowStyle.alignment) || (colStyle && colStyle.alignment);\n if (alignment) style.alignment = alignment;\n\n const border = (rowStyle && rowStyle.border) || (colStyle && colStyle.border);\n if (border) style.border = border;\n\n const fill = (rowStyle && rowStyle.fill) || (colStyle && colStyle.fill);\n if (fill) style.fill = fill;\n\n const protection = (rowStyle && rowStyle.protection) || (colStyle && colStyle.protection);\n if (protection) style.protection = protection;\n\n return style;\n }\n\n // =========================================================================\n // return the address for this cell\n get address() {\n return this._address;\n }\n\n get row() {\n return this._row.number;\n }\n\n get col() {\n return this._column.number;\n }\n\n get $col$row() {\n return `$${this._column.letter}$${this.row}`;\n }\n\n // =========================================================================\n // Value stuff\n\n get type() {\n return this._value.type;\n }\n\n get effectiveType() {\n return this._value.effectiveType;\n }\n\n toCsvString() {\n return this._value.toCsvString();\n }\n\n // =========================================================================\n // Merge stuff\n\n addMergeRef() {\n this._mergeCount++;\n }\n\n releaseMergeRef() {\n this._mergeCount--;\n }\n\n get isMerged() {\n return this._mergeCount > 0 || this.type === Cell.Types.Merge;\n }\n\n merge(master, ignoreStyle) {\n this._value.release();\n this._value = Value.create(Cell.Types.Merge, this, master);\n if (!ignoreStyle) {\n this.style = master.style;\n }\n }\n\n unmerge() {\n if (this.type === Cell.Types.Merge) {\n this._value.release();\n this._value = Value.create(Cell.Types.Null, this);\n this.style = this._mergeStyle(this._row.style, this._column.style, {});\n }\n }\n\n isMergedTo(master) {\n if (this._value.type !== Cell.Types.Merge) return false;\n return this._value.isMergedTo(master);\n }\n\n get master() {\n if (this.type === Cell.Types.Merge) {\n return this._value.master;\n }\n return this; // an unmerged cell is its own master\n }\n\n get isHyperlink() {\n return this._value.type === Cell.Types.Hyperlink;\n }\n\n get hyperlink() {\n return this._value.hyperlink;\n }\n\n // return the value\n get value() {\n return this._value.value;\n }\n\n // set the value - can be number, string or raw\n set value(v) {\n // special case - merge cells set their master's value\n if (this.type === Cell.Types.Merge) {\n this._value.master.value = v;\n return;\n }\n\n this._value.release();\n\n // assign value\n this._value = Value.create(Value.getType(v), this, v);\n }\n\n get note() {\n return this._comment && this._comment.note;\n }\n\n set note(note) {\n this._comment = new Note(note);\n }\n\n get text() {\n return this._value.toString();\n }\n\n get html() {\n return _.escapeHtml(this.text);\n }\n\n toString() {\n return this.text;\n }\n\n _upgradeToHyperlink(hyperlink) {\n // if this cell is a string, turn it into a Hyperlink\n if (this.type === Cell.Types.String) {\n this._value = Value.create(Cell.Types.Hyperlink, this, {\n text: this._value.value,\n hyperlink,\n });\n }\n }\n\n // =========================================================================\n // Formula stuff\n get formula() {\n return this._value.formula;\n }\n\n get result() {\n return this._value.result;\n }\n\n get formulaType() {\n return this._value.formulaType;\n }\n\n // =========================================================================\n // Name stuff\n get fullAddress() {\n const {worksheet} = this._row;\n return {\n sheetName: worksheet.name,\n address: this.address,\n row: this.row,\n col: this.col,\n };\n }\n\n get name() {\n return this.names[0];\n }\n\n set name(value) {\n this.names = [value];\n }\n\n get names() {\n return this.workbook.definedNames.getNamesEx(this.fullAddress);\n }\n\n set names(value) {\n const {definedNames} = this.workbook;\n definedNames.removeAllNames(this.fullAddress);\n value.forEach(name => {\n definedNames.addEx(this.fullAddress, name);\n });\n }\n\n addName(name) {\n this.workbook.definedNames.addEx(this.fullAddress, name);\n }\n\n removeName(name) {\n this.workbook.definedNames.removeEx(this.fullAddress, name);\n }\n\n removeAllNames() {\n this.workbook.definedNames.removeAllNames(this.fullAddress);\n }\n\n // =========================================================================\n // Data Validation stuff\n get _dataValidations() {\n return this.worksheet.dataValidations;\n }\n\n get dataValidation() {\n return this._dataValidations.find(this.address);\n }\n\n set dataValidation(value) {\n this._dataValidations.add(this.address, value);\n }\n\n // =========================================================================\n // Model stuff\n\n get model() {\n const {model} = this._value;\n model.style = this.style;\n if (this._comment) {\n model.comment = this._comment.model;\n }\n return model;\n }\n\n set model(value) {\n this._value.release();\n this._value = Value.create(value.type, this);\n this._value.model = value;\n\n if (value.comment) {\n switch (value.comment.type) {\n case 'note':\n this._comment = Note.fromModel(value.comment);\n break;\n }\n }\n\n if (value.style) {\n this.style = value.style;\n } else {\n this.style = {};\n }\n }\n}\nCell.Types = Enums.ValueType;\n\n// =============================================================================\n// Internal Value Types\n\nclass NullValue {\n constructor(cell) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Null,\n };\n }\n\n get value() {\n return null;\n }\n\n set value(value) {\n // nothing to do\n }\n\n get type() {\n return Cell.Types.Null;\n }\n\n get effectiveType() {\n return Cell.Types.Null;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return '';\n }\n\n release() {}\n\n toString() {\n return '';\n }\n}\n\nclass NumberValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Number,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Number;\n }\n\n get effectiveType() {\n return Cell.Types.Number;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass StringValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.String;\n }\n\n get effectiveType() {\n return Cell.Types.String;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return `\"${this.model.value.replace(/\"/g, '\"\"')}\"`;\n }\n\n release() {}\n\n toString() {\n return this.model.value;\n }\n}\n\nclass RichTextValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n toString() {\n return this.model.value.richText.map(t => t.text).join('');\n }\n\n get type() {\n return Cell.Types.RichText;\n }\n\n get effectiveType() {\n return Cell.Types.RichText;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return `\"${this.text.replace(/\"/g, '\"\"')}\"`;\n }\n\n release() {}\n}\n\nclass DateValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Date,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Date;\n }\n\n get effectiveType() {\n return Cell.Types.Date;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toISOString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass HyperlinkValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Hyperlink,\n text: value ? value.text : undefined,\n hyperlink: value ? value.hyperlink : undefined,\n };\n if (value && value.tooltip) {\n this.model.tooltip = value.tooltip;\n }\n }\n\n get value() {\n const v = {\n text: this.model.text,\n hyperlink: this.model.hyperlink,\n };\n if (this.model.tooltip) {\n v.tooltip = this.model.tooltip;\n }\n return v;\n }\n\n set value(value) {\n this.model = {\n text: value.text,\n hyperlink: value.hyperlink,\n };\n if (value.tooltip) {\n this.model.tooltip = value.tooltip;\n }\n }\n\n get text() {\n return this.model.text;\n }\n\n set text(value) {\n this.model.text = value;\n }\n\n /*\n get tooltip() {\n return this.model.tooltip;\n }\n\n set tooltip(value) {\n this.model.tooltip = value;\n } */\n\n get hyperlink() {\n return this.model.hyperlink;\n }\n\n set hyperlink(value) {\n this.model.hyperlink = value;\n }\n\n get type() {\n return Cell.Types.Hyperlink;\n }\n\n get effectiveType() {\n return Cell.Types.Hyperlink;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.hyperlink;\n }\n\n release() {}\n\n toString() {\n return this.model.text;\n }\n}\n\nclass MergeValue {\n constructor(cell, master) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Merge,\n master: master ? master.address : undefined,\n };\n this._master = master;\n if (master) {\n master.addMergeRef();\n }\n }\n\n get value() {\n return this._master.value;\n }\n\n set value(value) {\n if (value instanceof Cell) {\n if (this._master) {\n this._master.releaseMergeRef();\n }\n value.addMergeRef();\n this._master = value;\n } else {\n this._master.value = value;\n }\n }\n\n isMergedTo(master) {\n return master === this._master;\n }\n\n get master() {\n return this._master;\n }\n\n get type() {\n return Cell.Types.Merge;\n }\n\n get effectiveType() {\n return this._master.effectiveType;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return '';\n }\n\n release() {\n this._master.releaseMergeRef();\n }\n\n toString() {\n return this.value.toString();\n }\n}\n\nclass FormulaValue {\n constructor(cell, value) {\n this.cell = cell;\n\n this.model = {\n address: cell.address,\n type: Cell.Types.Formula,\n shareType: value ? value.shareType : undefined,\n ref: value ? value.ref : undefined,\n formula: value ? value.formula : undefined,\n sharedFormula: value ? value.sharedFormula : undefined,\n result: value ? value.result : undefined,\n };\n }\n\n _copyModel(model) {\n const copy = {};\n const cp = name => {\n const value = model[name];\n if (value) {\n copy[name] = value;\n }\n };\n cp('formula');\n cp('result');\n cp('ref');\n cp('shareType');\n cp('sharedFormula');\n return copy;\n }\n\n get value() {\n return this._copyModel(this.model);\n }\n\n set value(value) {\n this.model = this._copyModel(value);\n }\n\n validate(value) {\n switch (Value.getType(value)) {\n case Cell.Types.Null:\n case Cell.Types.String:\n case Cell.Types.Number:\n case Cell.Types.Date:\n break;\n case Cell.Types.Hyperlink:\n case Cell.Types.Formula:\n default:\n throw new Error('Cannot process that type of result value');\n }\n }\n\n get dependencies() {\n // find all the ranges and cells mentioned in the formula\n const ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g);\n const cells = this.formula\n .replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g, '')\n .match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}/g);\n return {\n ranges,\n cells,\n };\n }\n\n get formula() {\n return this.model.formula || this._getTranslatedFormula();\n }\n\n set formula(value) {\n this.model.formula = value;\n }\n\n get formulaType() {\n if (this.model.formula) {\n return Enums.FormulaType.Master;\n }\n if (this.model.sharedFormula) {\n return Enums.FormulaType.Shared;\n }\n return Enums.FormulaType.None;\n }\n\n get result() {\n return this.model.result;\n }\n\n set result(value) {\n this.model.result = value;\n }\n\n get type() {\n return Cell.Types.Formula;\n }\n\n get effectiveType() {\n const v = this.model.result;\n if (v === null || v === undefined) {\n return Enums.ValueType.Null;\n }\n if (v instanceof String || typeof v === 'string') {\n return Enums.ValueType.String;\n }\n if (typeof v === 'number') {\n return Enums.ValueType.Number;\n }\n if (v instanceof Date) {\n return Enums.ValueType.Date;\n }\n if (v.text && v.hyperlink) {\n return Enums.ValueType.Hyperlink;\n }\n if (v.formula) {\n return Enums.ValueType.Formula;\n }\n\n return Enums.ValueType.Null;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n _getTranslatedFormula() {\n if (!this._translatedFormula && this.model.sharedFormula) {\n const {worksheet} = this.cell;\n const master = worksheet.findCell(this.model.sharedFormula);\n this._translatedFormula =\n master && slideFormula(master.formula, master.address, this.model.address);\n }\n return this._translatedFormula;\n }\n\n toCsvString() {\n return `${this.model.result || ''}`;\n }\n\n release() {}\n\n toString() {\n return this.model.result ? this.model.result.toString() : '';\n }\n}\n\nclass SharedStringValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.SharedString,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.SharedString;\n }\n\n get effectiveType() {\n return Cell.Types.SharedString;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass BooleanValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Boolean,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Boolean;\n }\n\n get effectiveType() {\n return Cell.Types.Boolean;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value ? 1 : 0;\n }\n\n release() {}\n\n toString() {\n return this.model.value.toString();\n }\n}\n\nclass ErrorValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.Error,\n value,\n };\n }\n\n get value() {\n return this.model.value;\n }\n\n set value(value) {\n this.model.value = value;\n }\n\n get type() {\n return Cell.Types.Error;\n }\n\n get effectiveType() {\n return Cell.Types.Error;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.toString();\n }\n\n release() {}\n\n toString() {\n return this.model.value.error.toString();\n }\n}\n\nclass JSONValue {\n constructor(cell, value) {\n this.model = {\n address: cell.address,\n type: Cell.Types.String,\n value: JSON.stringify(value),\n rawValue: value,\n };\n }\n\n get value() {\n return this.model.rawValue;\n }\n\n set value(value) {\n this.model.rawValue = value;\n this.model.value = JSON.stringify(value);\n }\n\n get type() {\n return Cell.Types.String;\n }\n\n get effectiveType() {\n return Cell.Types.String;\n }\n\n get address() {\n return this.model.address;\n }\n\n set address(value) {\n this.model.address = value;\n }\n\n toCsvString() {\n return this.model.value;\n }\n\n release() {}\n\n toString() {\n return this.model.value;\n }\n}\n\n// Value is a place to hold common static Value type functions\nconst Value = {\n getType(value) {\n if (value === null || value === undefined) {\n return Cell.Types.Null;\n }\n if (value instanceof String || typeof value === 'string') {\n return Cell.Types.String;\n }\n if (typeof value === 'number') {\n return Cell.Types.Number;\n }\n if (typeof value === 'boolean') {\n return Cell.Types.Boolean;\n }\n if (value instanceof Date) {\n return Cell.Types.Date;\n }\n if (value.text && value.hyperlink) {\n return Cell.Types.Hyperlink;\n }\n if (value.formula || value.sharedFormula) {\n return Cell.Types.Formula;\n }\n if (value.richText) {\n return Cell.Types.RichText;\n }\n if (value.sharedString) {\n return Cell.Types.SharedString;\n }\n if (value.error) {\n return Cell.Types.Error;\n }\n return Cell.Types.JSON;\n },\n\n // map valueType to constructor\n types: [\n {t: Cell.Types.Null, f: NullValue},\n {t: Cell.Types.Number, f: NumberValue},\n {t: Cell.Types.String, f: StringValue},\n {t: Cell.Types.Date, f: DateValue},\n {t: Cell.Types.Hyperlink, f: HyperlinkValue},\n {t: Cell.Types.Formula, f: FormulaValue},\n {t: Cell.Types.Merge, f: MergeValue},\n {t: Cell.Types.JSON, f: JSONValue},\n {t: Cell.Types.SharedString, f: SharedStringValue},\n {t: Cell.Types.RichText, f: RichTextValue},\n {t: Cell.Types.Boolean, f: BooleanValue},\n {t: Cell.Types.Error, f: ErrorValue},\n ].reduce((p, t) => {\n p[t.t] = t.f;\n return p;\n }, []),\n\n create(type, cell, value) {\n const T = this.types[type];\n if (!T) {\n throw new Error(`Could not create Value of type ${type}`);\n }\n return new T(cell, value);\n },\n};\n\nmodule.exports = Cell;\n", + "'use strict';\n\nconst _ = require('../utils/under-dash');\n\nconst Enums = require('./enums');\nconst colCache = require('../utils/col-cache');\n\nconst DEFAULT_COLUMN_WIDTH = 9;\n\n// Column defines the column properties for 1 column.\n// This includes header rows, widths, key, (style), etc.\n// Worksheet will condense the columns as appropriate during serialization\nclass Column {\n constructor(worksheet, number, defn) {\n this._worksheet = worksheet;\n this._number = number;\n if (defn !== false) {\n // sometimes defn will follow\n this.defn = defn;\n }\n }\n\n get number() {\n return this._number;\n }\n\n get worksheet() {\n return this._worksheet;\n }\n\n get letter() {\n return colCache.n2l(this._number);\n }\n\n get isCustomWidth() {\n return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH;\n }\n\n get defn() {\n return {\n header: this._header,\n key: this.key,\n width: this.width,\n style: this.style,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n };\n }\n\n set defn(value) {\n if (value) {\n this.key = value.key;\n this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH;\n this.outlineLevel = value.outlineLevel;\n if (value.style) {\n this.style = value.style;\n } else {\n this.style = {};\n }\n\n // headers must be set after style\n this.header = value.header;\n this._hidden = !!value.hidden;\n } else {\n delete this._header;\n delete this._key;\n delete this.width;\n this.style = {};\n this.outlineLevel = 0;\n }\n }\n\n get headers() {\n return this._header && this._header instanceof Array ? this._header : [this._header];\n }\n\n get header() {\n return this._header;\n }\n\n set header(value) {\n if (value !== undefined) {\n this._header = value;\n this.headers.forEach((text, index) => {\n this._worksheet.getCell(index + 1, this.number).value = text;\n });\n } else {\n this._header = undefined;\n }\n }\n\n get key() {\n return this._key;\n }\n\n set key(value) {\n const column = this._key && this._worksheet.getColumnKey(this._key);\n if (column === this) {\n this._worksheet.deleteColumnKey(this._key);\n }\n\n this._key = value;\n if (value) {\n this._worksheet.setColumnKey(this._key, this);\n }\n }\n\n get hidden() {\n return !!this._hidden;\n }\n\n set hidden(value) {\n this._hidden = value;\n }\n\n get outlineLevel() {\n return this._outlineLevel || 0;\n }\n\n set outlineLevel(value) {\n this._outlineLevel = value;\n }\n\n get collapsed() {\n return !!(\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol\n );\n }\n\n toString() {\n return JSON.stringify({\n key: this.key,\n width: this.width,\n headers: this.headers.length ? this.headers : undefined,\n });\n }\n\n equivalentTo(other) {\n return (\n this.width === other.width &&\n this.hidden === other.hidden &&\n this.outlineLevel === other.outlineLevel &&\n _.isEqual(this.style, other.style)\n );\n }\n\n get isDefault() {\n if (this.isCustomWidth) {\n return false;\n }\n if (this.hidden) {\n return false;\n }\n if (this.outlineLevel) {\n return false;\n }\n const s = this.style;\n if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) {\n return false;\n }\n return true;\n }\n\n get headerCount() {\n return this.headers.length;\n }\n\n eachCell(options, iteratee) {\n const colNumber = this.number;\n if (!iteratee) {\n iteratee = options;\n options = null;\n }\n this._worksheet.eachRow(options, (row, rowNumber) => {\n iteratee(row.getCell(colNumber), rowNumber);\n });\n }\n\n get values() {\n const v = [];\n this.eachCell((cell, rowNumber) => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n v[rowNumber] = cell.value;\n }\n });\n return v;\n }\n\n set values(v) {\n if (!v) {\n return;\n }\n const colNumber = this.number;\n let offset = 0;\n if (v.hasOwnProperty('0')) {\n // assume contiguous array, start at row 1\n offset = 1;\n }\n v.forEach((value, index) => {\n this._worksheet.getCell(index + offset, colNumber).value = value;\n });\n }\n\n // =========================================================================\n // styles\n _applyStyle(name, value) {\n this.style[name] = value;\n this.eachCell(cell => {\n cell[name] = value;\n });\n return value;\n }\n\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this._applyStyle('numFmt', value);\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this._applyStyle('font', value);\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this._applyStyle('alignment', value);\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this._applyStyle('protection', value);\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this._applyStyle('border', value);\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this._applyStyle('fill', value);\n }\n\n // =============================================================================\n // static functions\n\n static toModel(columns) {\n // Convert array of Column into compressed list cols\n const cols = [];\n let col = null;\n if (columns) {\n columns.forEach((column, index) => {\n if (column.isDefault) {\n if (col) {\n col = null;\n }\n } else if (!col || !column.equivalentTo(col)) {\n col = {\n min: index + 1,\n max: index + 1,\n width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH,\n style: column.style,\n isCustomWidth: column.isCustomWidth,\n hidden: column.hidden,\n outlineLevel: column.outlineLevel,\n collapsed: column.collapsed,\n };\n cols.push(col);\n } else {\n col.max = index + 1;\n }\n });\n }\n return cols.length ? cols : undefined;\n }\n\n static fromModel(worksheet, cols) {\n cols = cols || [];\n const columns = [];\n let count = 1;\n let index = 0;\n /**\n * sort cols by min\n * If it is not sorted, the subsequent column configuration will be overwritten\n * */\n cols = cols.sort(function(pre, next) {\n return pre.min - next.min;\n });\n while (index < cols.length) {\n const col = cols[index++];\n while (count < col.min) {\n columns.push(new Column(worksheet, count++));\n }\n while (count <= col.max) {\n columns.push(new Column(worksheet, count++, col));\n }\n }\n return columns.length ? columns : null;\n }\n}\n\nmodule.exports = Column;\n", + "class DataValidations {\n constructor(model) {\n this.model = model || {};\n }\n\n add(address, validation) {\n return (this.model[address] = validation);\n }\n\n find(address) {\n return this.model[address];\n }\n\n remove(address) {\n this.model[address] = undefined;\n }\n}\n\nmodule.exports = DataValidations;\n", + "'use strict';\n\nconst _ = require('../utils/under-dash');\nconst colCache = require('../utils/col-cache');\nconst CellMatrix = require('../utils/cell-matrix');\nconst Range = require('./range');\n\nconst rangeRegexp = /[$](\\w+)[$](\\d+)(:[$](\\w+)[$](\\d+))?/;\n\nclass DefinedNames {\n constructor() {\n this.matrixMap = {};\n }\n\n getMatrix(name) {\n const matrix = this.matrixMap[name] || (this.matrixMap[name] = new CellMatrix());\n return matrix;\n }\n\n // add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2\n add(locStr, name) {\n const location = colCache.decodeEx(locStr);\n this.addEx(location, name);\n }\n\n addEx(location, name) {\n const matrix = this.getMatrix(name);\n if (location.top) {\n for (let col = location.left; col <= location.right; col++) {\n for (let row = location.top; row <= location.bottom; row++) {\n const address = {\n sheetName: location.sheetName,\n address: colCache.n2l(col) + row,\n row,\n col,\n };\n\n matrix.addCellEx(address);\n }\n }\n } else {\n matrix.addCellEx(location);\n }\n }\n\n remove(locStr, name) {\n const location = colCache.decodeEx(locStr);\n this.removeEx(location, name);\n }\n\n removeEx(location, name) {\n const matrix = this.getMatrix(name);\n matrix.removeCellEx(location);\n }\n\n removeAllNames(location) {\n _.each(this.matrixMap, matrix => {\n matrix.removeCellEx(location);\n });\n }\n\n forEach(callback) {\n _.each(this.matrixMap, (matrix, name) => {\n matrix.forEach(cell => {\n callback(name, cell);\n });\n });\n }\n\n // get all the names of a cell\n getNames(addressStr) {\n return this.getNamesEx(colCache.decodeEx(addressStr));\n }\n\n getNamesEx(address) {\n return _.map(this.matrixMap, (matrix, name) => matrix.findCellEx(address) && name).filter(\n Boolean\n );\n }\n\n _explore(matrix, cell) {\n cell.mark = false;\n const {sheetName} = cell;\n\n const range = new Range(cell.row, cell.col, cell.row, cell.col, sheetName);\n let x;\n let y;\n\n // grow vertical - only one col to worry about\n function vGrow(yy, edge) {\n const c = matrix.findCellAt(sheetName, yy, cell.col);\n if (!c || !c.mark) {\n return false;\n }\n range[edge] = yy;\n c.mark = false;\n return true;\n }\n for (y = cell.row - 1; vGrow(y, 'top'); y--);\n for (y = cell.row + 1; vGrow(y, 'bottom'); y++);\n\n // grow horizontal - ensure all rows can grow\n function hGrow(xx, edge) {\n const cells = [];\n for (y = range.top; y <= range.bottom; y++) {\n const c = matrix.findCellAt(sheetName, y, xx);\n if (c && c.mark) {\n cells.push(c);\n } else {\n return false;\n }\n }\n range[edge] = xx;\n for (let i = 0; i < cells.length; i++) {\n cells[i].mark = false;\n }\n return true;\n }\n for (x = cell.col - 1; hGrow(x, 'left'); x--);\n for (x = cell.col + 1; hGrow(x, 'right'); x++);\n\n return range;\n }\n\n getRanges(name, matrix) {\n matrix = matrix || this.matrixMap[name];\n\n if (!matrix) {\n return {name, ranges: []};\n }\n\n // mark and sweep!\n matrix.forEach(cell => {\n cell.mark = true;\n });\n const ranges = matrix\n .map(cell => cell.mark && this._explore(matrix, cell))\n .filter(Boolean)\n .map(range => range.$shortRange);\n\n return {\n name,\n ranges,\n };\n }\n\n normaliseMatrix(matrix, sheetName) {\n // some of the cells might have shifted on specified sheet\n // need to reassign rows, cols\n matrix.forEachInSheet(sheetName, (cell, row, col) => {\n if (cell) {\n if (cell.row !== row || cell.col !== col) {\n cell.row = row;\n cell.col = col;\n cell.address = colCache.n2l(col) + row;\n }\n }\n });\n }\n\n spliceRows(sheetName, start, numDelete, numInsert) {\n _.each(this.matrixMap, matrix => {\n matrix.spliceRows(sheetName, start, numDelete, numInsert);\n this.normaliseMatrix(matrix, sheetName);\n });\n }\n\n spliceColumns(sheetName, start, numDelete, numInsert) {\n _.each(this.matrixMap, matrix => {\n matrix.spliceColumns(sheetName, start, numDelete, numInsert);\n this.normaliseMatrix(matrix, sheetName);\n });\n }\n\n get model() {\n // To get names per cell - just iterate over all names finding cells if they exist\n return _.map(this.matrixMap, (matrix, name) => this.getRanges(name, matrix)).filter(\n definedName => definedName.ranges.length\n );\n }\n\n set model(value) {\n // value is [ { name, ranges }, ... ]\n const matrixMap = (this.matrixMap = {});\n value.forEach(definedName => {\n const matrix = (matrixMap[definedName.name] = new CellMatrix());\n definedName.ranges.forEach(rangeStr => {\n if (rangeRegexp.test(rangeStr.split('!').pop() || '')) {\n matrix.addCell(rangeStr);\n }\n });\n });\n }\n}\n\nmodule.exports = DefinedNames;\n", + "'use strict';\n\nmodule.exports = {\n ValueType: {\n Null: 0,\n Merge: 1,\n Number: 2,\n String: 3,\n Date: 4,\n Hyperlink: 5,\n Formula: 6,\n SharedString: 7,\n RichText: 8,\n Boolean: 9,\n Error: 10,\n },\n FormulaType: {\n None: 0,\n Master: 1,\n Shared: 2,\n },\n RelationshipType: {\n None: 0,\n OfficeDocument: 1,\n Worksheet: 2,\n CalcChain: 3,\n SharedStrings: 4,\n Styles: 5,\n Theme: 6,\n Hyperlink: 7,\n },\n DocumentType: {\n Xlsx: 1,\n },\n ReadingOrder: {\n LeftToRight: 1,\n RightToLeft: 2,\n },\n ErrorValue: {\n NotApplicable: '#N/A',\n Ref: '#REF!',\n Name: '#NAME?',\n DivZero: '#DIV/0!',\n Null: '#NULL!',\n Value: '#VALUE!',\n Num: '#NUM!',\n },\n};\n", + "const colCache = require('../utils/col-cache');\nconst Anchor = require('./anchor');\n\nclass Image {\n constructor(worksheet, model) {\n this.worksheet = worksheet;\n this.model = model;\n }\n\n get model() {\n switch (this.type) {\n case 'background':\n return {\n type: this.type,\n imageId: this.imageId,\n };\n case 'image':\n return {\n type: this.type,\n imageId: this.imageId,\n hyperlinks: this.range.hyperlinks,\n range: {\n tl: this.range.tl.model,\n br: this.range.br && this.range.br.model,\n ext: this.range.ext,\n editAs: this.range.editAs,\n },\n };\n default:\n throw new Error('Invalid Image Type');\n }\n }\n\n set model({type, imageId, range, hyperlinks}) {\n this.type = type;\n this.imageId = imageId;\n\n if (type === 'image') {\n if (typeof range === 'string') {\n const decoded = colCache.decode(range);\n this.range = {\n tl: new Anchor(this.worksheet, {col: decoded.left, row: decoded.top}, -1),\n br: new Anchor(this.worksheet, {col: decoded.right, row: decoded.bottom}, 0),\n editAs: 'oneCell',\n };\n } else {\n this.range = {\n tl: new Anchor(this.worksheet, range.tl, 0),\n br: range.br && new Anchor(this.worksheet, range.br, 0),\n ext: range.ext,\n editAs: range.editAs,\n hyperlinks: hyperlinks || range.hyperlinks,\n };\n }\n }\n }\n}\n\nmodule.exports = Image;\n", + "const _ = require('../utils/under-dash');\n\nclass Note {\n constructor(note) {\n this.note = note;\n }\n\n get model() {\n let value = null;\n switch (typeof this.note) {\n case 'string':\n value = {\n type: 'note',\n note: {\n texts: [\n {\n text: this.note,\n },\n ],\n },\n };\n break;\n default:\n value = {\n type: 'note',\n note: this.note,\n };\n break;\n }\n // Suitable for all cell comments\n return _.deepMerge({}, Note.DEFAULT_CONFIGS, value);\n }\n\n set model(value) {\n const {note} = value;\n const {texts} = note;\n if (texts.length === 1 && Object.keys(texts[0]).length === 1) {\n this.note = texts[0].text;\n } else {\n this.note = note;\n }\n }\n\n static fromModel(model) {\n const note = new Note();\n note.model = model;\n return note;\n }\n}\n\nNote.DEFAULT_CONFIGS = {\n note: {\n margins: {\n insetmode: 'auto',\n inset: [0.13, 0.13, 0.25, 0.25],\n },\n protection: {\n locked: 'True',\n lockText: 'True',\n },\n editAs: 'absolute',\n },\n};\n\nmodule.exports = Note;\n", + "const colCache = require('../utils/col-cache');\n\n// used by worksheet to calculate sheet dimensions\nclass Range {\n constructor() {\n this.decode(arguments);\n }\n\n setTLBR(t, l, b, r, s) {\n if (arguments.length < 4) {\n // setTLBR(tl, br, s)\n const tl = colCache.decodeAddress(t);\n const br = colCache.decodeAddress(l);\n this.model = {\n top: Math.min(tl.row, br.row),\n left: Math.min(tl.col, br.col),\n bottom: Math.max(tl.row, br.row),\n right: Math.max(tl.col, br.col),\n sheetName: b,\n };\n\n this.setTLBR(tl.row, tl.col, br.row, br.col, s);\n } else {\n // setTLBR(t, l, b, r, s)\n this.model = {\n top: Math.min(t, b),\n left: Math.min(l, r),\n bottom: Math.max(t, b),\n right: Math.max(l, r),\n sheetName: s,\n };\n }\n }\n\n decode(argv) {\n switch (argv.length) {\n case 5: // [t,l,b,r,s]\n this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);\n break;\n case 4: // [t,l,b,r]\n this.setTLBR(argv[0], argv[1], argv[2], argv[3]);\n break;\n\n case 3: // [tl,br,s]\n this.setTLBR(argv[0], argv[1], argv[2]);\n break;\n case 2: // [tl,br]\n this.setTLBR(argv[0], argv[1]);\n break;\n\n case 1: {\n const value = argv[0];\n if (value instanceof Range) {\n // copy constructor\n this.model = {\n top: value.model.top,\n left: value.model.left,\n bottom: value.model.bottom,\n right: value.model.right,\n sheetName: value.sheetName,\n };\n } else if (value instanceof Array) {\n // an arguments array\n this.decode(value);\n } else if (value.top && value.left && value.bottom && value.right) {\n // a model\n this.model = {\n top: value.top,\n left: value.left,\n bottom: value.bottom,\n right: value.right,\n sheetName: value.sheetName,\n };\n } else {\n // [sheetName!]tl:br\n const tlbr = colCache.decodeEx(value);\n if (tlbr.top) {\n this.model = {\n top: tlbr.top,\n left: tlbr.left,\n bottom: tlbr.bottom,\n right: tlbr.right,\n sheetName: tlbr.sheetName,\n };\n } else {\n this.model = {\n top: tlbr.row,\n left: tlbr.col,\n bottom: tlbr.row,\n right: tlbr.col,\n sheetName: tlbr.sheetName,\n };\n }\n }\n break;\n }\n\n case 0:\n this.model = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n };\n break;\n\n default:\n throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`);\n }\n }\n\n get top() {\n return this.model.top || 1;\n }\n\n set top(value) {\n this.model.top = value;\n }\n\n get left() {\n return this.model.left || 1;\n }\n\n set left(value) {\n this.model.left = value;\n }\n\n get bottom() {\n return this.model.bottom || 1;\n }\n\n set bottom(value) {\n this.model.bottom = value;\n }\n\n get right() {\n return this.model.right || 1;\n }\n\n set right(value) {\n this.model.right = value;\n }\n\n get sheetName() {\n return this.model.sheetName;\n }\n\n set sheetName(value) {\n this.model.sheetName = value;\n }\n\n get _serialisedSheetName() {\n const {sheetName} = this.model;\n if (sheetName) {\n if (/^[a-zA-Z0-9]*$/.test(sheetName)) {\n return `${sheetName}!`;\n }\n return `'${sheetName}'!`;\n }\n return '';\n }\n\n expand(top, left, bottom, right) {\n if (!this.model.top || top < this.top) this.top = top;\n if (!this.model.left || left < this.left) this.left = left;\n if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;\n if (!this.model.right || right > this.right) this.right = right;\n }\n\n expandRow(row) {\n if (row) {\n const {dimensions, number} = row;\n if (dimensions) {\n this.expand(number, dimensions.min, number, dimensions.max);\n }\n }\n }\n\n expandToAddress(addressStr) {\n const address = colCache.decodeEx(addressStr);\n this.expand(address.row, address.col, address.row, address.col);\n }\n\n get tl() {\n return colCache.n2l(this.left) + this.top;\n }\n\n get $t$l() {\n return `$${colCache.n2l(this.left)}$${this.top}`;\n }\n\n get br() {\n return colCache.n2l(this.right) + this.bottom;\n }\n\n get $b$r() {\n return `$${colCache.n2l(this.right)}$${this.bottom}`;\n }\n\n get range() {\n return `${this._serialisedSheetName + this.tl}:${this.br}`;\n }\n\n get $range() {\n return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`;\n }\n\n get shortRange() {\n return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;\n }\n\n get $shortRange() {\n return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;\n }\n\n get count() {\n return (1 + this.bottom - this.top) * (1 + this.right - this.left);\n }\n\n toString() {\n return this.range;\n }\n\n intersects(other) {\n if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;\n if (other.bottom < this.top) return false;\n if (other.top > this.bottom) return false;\n if (other.right < this.left) return false;\n if (other.left > this.right) return false;\n return true;\n }\n\n contains(addressStr) {\n const address = colCache.decodeEx(addressStr);\n return this.containsEx(address);\n }\n\n containsEx(address) {\n if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;\n return (\n address.row >= this.top &&\n address.row <= this.bottom &&\n address.col >= this.left &&\n address.col <= this.right\n );\n }\n\n forEachAddress(cb) {\n for (let col = this.left; col <= this.right; col++) {\n for (let row = this.top; row <= this.bottom; row++) {\n cb(colCache.encodeAddress(row, col), row, col);\n }\n }\n }\n}\n\nmodule.exports = Range;\n", + "'use strict';\n\nconst _ = require('../utils/under-dash');\n\nconst Enums = require('./enums');\nconst colCache = require('../utils/col-cache');\nconst Cell = require('./cell');\n\nclass Row {\n constructor(worksheet, number) {\n this._worksheet = worksheet;\n this._number = number;\n this._cells = [];\n this.style = {};\n this.outlineLevel = 0;\n }\n\n // return the row number\n get number() {\n return this._number;\n }\n\n get worksheet() {\n return this._worksheet;\n }\n\n // Inform Streaming Writer that this row (and all rows before it) are complete\n // and ready to write. Has no effect on Worksheet document\n commit() {\n this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle\n }\n\n // helps GC by breaking cyclic references\n destroy() {\n delete this._worksheet;\n delete this._cells;\n delete this.style;\n }\n\n findCell(colNumber) {\n return this._cells[colNumber - 1];\n }\n\n // given {address, row, col}, find or create new cell\n getCellEx(address) {\n let cell = this._cells[address.col - 1];\n if (!cell) {\n const column = this._worksheet.getColumn(address.col);\n cell = new Cell(this, column, address.address);\n this._cells[address.col - 1] = cell;\n }\n return cell;\n }\n\n // get cell by key, letter or column number\n getCell(col) {\n if (typeof col === 'string') {\n // is it a key?\n const column = this._worksheet.getColumnKey(col);\n if (column) {\n col = column.number;\n } else {\n col = colCache.l2n(col);\n }\n }\n return (\n this._cells[col - 1] ||\n this.getCellEx({\n address: colCache.encodeAddress(this._number, col),\n row: this._number,\n col,\n })\n );\n }\n\n // remove cell(s) and shift all higher cells down by count\n splice(start, count, ...inserts) {\n const nKeep = start + count;\n const nExpand = inserts.length - count;\n const nEnd = this._cells.length;\n let i;\n let cSrc;\n let cDst;\n\n if (nExpand < 0) {\n // remove cells\n for (i = start + inserts.length; i <= nEnd; i++) {\n cDst = this._cells[i - 1];\n cSrc = this._cells[i - nExpand - 1];\n if (cSrc) {\n cDst = this.getCell(i);\n cDst.value = cSrc.value;\n cDst.style = cSrc.style;\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = cSrc._comment;\n } else if (cDst) {\n cDst.value = null;\n cDst.style = {};\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = undefined;\n }\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n cSrc = this._cells[i - 1];\n if (cSrc) {\n cDst = this.getCell(i + nExpand);\n cDst.value = cSrc.value;\n cDst.style = cSrc.style;\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = cSrc._comment;\n } else {\n this._cells[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now add the new values\n for (i = 0; i < inserts.length; i++) {\n cDst = this.getCell(start + i);\n cDst.value = inserts[i];\n cDst.style = {};\n // eslint-disable-next-line no-underscore-dangle\n cDst._comment = undefined;\n }\n }\n\n // Iterate over all non-null cells in this row\n eachCell(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = null;\n }\n if (options && options.includeEmpty) {\n const n = this._cells.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getCell(i), i);\n }\n } else {\n this._cells.forEach((cell, index) => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n iteratee(cell, index + 1);\n }\n });\n }\n }\n\n // ===========================================================================\n // Page Breaks\n addPageBreak(lft, rght) {\n const ws = this._worksheet;\n const left = Math.max(0, lft - 1) || 0;\n const right = Math.max(0, rght - 1) || 16838;\n const pb = {\n id: this._number,\n max: right,\n man: 1,\n };\n if (left) pb.min = left;\n\n ws.rowBreaks.push(pb);\n }\n\n // return a sparse array of cell values\n get values() {\n const values = [];\n this._cells.forEach(cell => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n values[cell.col] = cell.value;\n }\n });\n return values;\n }\n\n // set the values by contiguous or sparse array, or by key'd object literal\n set values(value) {\n // this operation is not additive - any prior cells are removed\n this._cells = [];\n if (!value) {\n // empty row\n } else if (value instanceof Array) {\n let offset = 0;\n if (value.hasOwnProperty('0')) {\n // contiguous array - start at column 1\n offset = 1;\n }\n value.forEach((item, index) => {\n if (item !== undefined) {\n this.getCellEx({\n address: colCache.encodeAddress(this._number, index + offset),\n row: this._number,\n col: index + offset,\n }).value = item;\n }\n });\n } else {\n // assume object with column keys\n this._worksheet.eachColumnKey((column, key) => {\n if (value[key] !== undefined) {\n this.getCellEx({\n address: colCache.encodeAddress(this._number, column.number),\n row: this._number,\n col: column.number,\n }).value = value[key];\n }\n });\n }\n }\n\n // returns true if the row includes at least one cell with a value\n get hasValues() {\n return _.some(this._cells, cell => cell && cell.type !== Enums.ValueType.Null);\n }\n\n get cellCount() {\n return this._cells.length;\n }\n\n get actualCellCount() {\n let count = 0;\n this.eachCell(() => {\n count++;\n });\n return count;\n }\n\n // get the min and max column number for the non-null cells in this row or null\n get dimensions() {\n let min = 0;\n let max = 0;\n this._cells.forEach(cell => {\n if (cell && cell.type !== Enums.ValueType.Null) {\n if (!min || min > cell.col) {\n min = cell.col;\n }\n if (max < cell.col) {\n max = cell.col;\n }\n }\n });\n return min > 0\n ? {\n min,\n max,\n }\n : null;\n }\n\n // =========================================================================\n // styles\n _applyStyle(name, value) {\n this.style[name] = value;\n this._cells.forEach(cell => {\n if (cell) {\n cell[name] = value;\n }\n });\n return value;\n }\n\n get numFmt() {\n return this.style.numFmt;\n }\n\n set numFmt(value) {\n this._applyStyle('numFmt', value);\n }\n\n get font() {\n return this.style.font;\n }\n\n set font(value) {\n this._applyStyle('font', value);\n }\n\n get alignment() {\n return this.style.alignment;\n }\n\n set alignment(value) {\n this._applyStyle('alignment', value);\n }\n\n get protection() {\n return this.style.protection;\n }\n\n set protection(value) {\n this._applyStyle('protection', value);\n }\n\n get border() {\n return this.style.border;\n }\n\n set border(value) {\n this._applyStyle('border', value);\n }\n\n get fill() {\n return this.style.fill;\n }\n\n set fill(value) {\n this._applyStyle('fill', value);\n }\n\n get hidden() {\n return !!this._hidden;\n }\n\n set hidden(value) {\n this._hidden = value;\n }\n\n get outlineLevel() {\n return this._outlineLevel || 0;\n }\n\n set outlineLevel(value) {\n this._outlineLevel = value;\n }\n\n get collapsed() {\n return !!(\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow\n );\n }\n\n // =========================================================================\n get model() {\n const cells = [];\n let min = 0;\n let max = 0;\n this._cells.forEach(cell => {\n if (cell) {\n const cellModel = cell.model;\n if (cellModel) {\n if (!min || min > cell.col) {\n min = cell.col;\n }\n if (max < cell.col) {\n max = cell.col;\n }\n cells.push(cellModel);\n }\n }\n });\n\n return this.height || cells.length\n ? {\n cells,\n number: this.number,\n min,\n max,\n height: this.height,\n style: this.style,\n hidden: this.hidden,\n outlineLevel: this.outlineLevel,\n collapsed: this.collapsed,\n }\n : null;\n }\n\n set model(value) {\n if (value.number !== this._number) {\n throw new Error('Invalid row number in model');\n }\n this._cells = [];\n let previousAddress;\n value.cells.forEach(cellModel => {\n switch (cellModel.type) {\n case Cell.Types.Merge:\n // special case - don't add this types\n break;\n default: {\n let address;\n if (cellModel.address) {\n address = colCache.decodeAddress(cellModel.address);\n } else if (previousAddress) {\n // This is a element without an r attribute\n // Assume that it's the cell for the next column\n const {row} = previousAddress;\n const col = previousAddress.col + 1;\n address = {\n row,\n col,\n address: colCache.encodeAddress(row, col),\n $col$row: `$${colCache.n2l(col)}$${row}`,\n };\n }\n previousAddress = address;\n const cell = this.getCellEx(address);\n cell.model = cellModel;\n break;\n }\n }\n });\n\n if (value.height) {\n this.height = value.height;\n } else {\n delete this.height;\n }\n\n this.hidden = value.hidden;\n this.outlineLevel = value.outlineLevel || 0;\n\n this.style = (value.style && JSON.parse(JSON.stringify(value.style))) || {};\n }\n}\n\nmodule.exports = Row;\n", + "/* eslint-disable max-classes-per-file */\nconst colCache = require('../utils/col-cache');\n\nclass Column {\n // wrapper around column model, allowing access and manipulation\n constructor(table, column, index) {\n this.table = table;\n this.column = column;\n this.index = index;\n }\n\n _set(name, value) {\n this.table.cacheState();\n this.column[name] = value;\n }\n\n /* eslint-disable lines-between-class-members */\n get name() {\n return this.column.name;\n }\n set name(value) {\n this._set('name', value);\n }\n\n get filterButton() {\n return this.column.filterButton;\n }\n set filterButton(value) {\n this.column.filterButton = value;\n }\n\n get style() {\n return this.column.style;\n }\n set style(value) {\n this.column.style = value;\n }\n\n get totalsRowLabel() {\n return this.column.totalsRowLabel;\n }\n set totalsRowLabel(value) {\n this._set('totalsRowLabel', value);\n }\n\n get totalsRowFunction() {\n return this.column.totalsRowFunction;\n }\n set totalsRowFunction(value) {\n this._set('totalsRowFunction', value);\n }\n\n get totalsRowResult() {\n return this.column.totalsRowResult;\n }\n set totalsRowResult(value) {\n this._set('totalsRowResult', value);\n }\n\n get totalsRowFormula() {\n return this.column.totalsRowFormula;\n }\n set totalsRowFormula(value) {\n this._set('totalsRowFormula', value);\n }\n /* eslint-enable lines-between-class-members */\n}\n\nclass Table {\n constructor(worksheet, table) {\n this.worksheet = worksheet;\n if (table) {\n this.table = table;\n // check things are ok first\n this.validate();\n\n this.store();\n }\n }\n\n getFormula(column) {\n // get the correct formula to apply to the totals row\n switch (column.totalsRowFunction) {\n case 'none':\n return null;\n case 'average':\n return `SUBTOTAL(101,${this.table.name}[${column.name}])`;\n case 'countNums':\n return `SUBTOTAL(102,${this.table.name}[${column.name}])`;\n case 'count':\n return `SUBTOTAL(103,${this.table.name}[${column.name}])`;\n case 'max':\n return `SUBTOTAL(104,${this.table.name}[${column.name}])`;\n case 'min':\n return `SUBTOTAL(105,${this.table.name}[${column.name}])`;\n case 'stdDev':\n return `SUBTOTAL(106,${this.table.name}[${column.name}])`;\n case 'var':\n return `SUBTOTAL(107,${this.table.name}[${column.name}])`;\n case 'sum':\n return `SUBTOTAL(109,${this.table.name}[${column.name}])`;\n case 'custom':\n return column.totalsRowFormula;\n default:\n throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`);\n }\n }\n\n get width() {\n // width of the table\n return this.table.columns.length;\n }\n\n get height() {\n // height of the table data\n return this.table.rows.length;\n }\n\n get filterHeight() {\n // height of the table data plus optional header row\n return this.height + (this.table.headerRow ? 1 : 0);\n }\n\n get tableHeight() {\n // full height of the table on the sheet\n return this.filterHeight + (this.table.totalsRow ? 1 : 0);\n }\n\n validate() {\n const {table} = this;\n // set defaults and check is valid\n const assign = (o, name, dflt) => {\n if (o[name] === undefined) {\n o[name] = dflt;\n }\n };\n assign(table, 'headerRow', true);\n assign(table, 'totalsRow', false);\n\n assign(table, 'style', {});\n assign(table.style, 'theme', 'TableStyleMedium2');\n assign(table.style, 'showFirstColumn', false);\n assign(table.style, 'showLastColumn', false);\n assign(table.style, 'showRowStripes', false);\n assign(table.style, 'showColumnStripes', false);\n\n const assert = (test, message) => {\n if (!test) {\n throw new Error(message);\n }\n };\n assert(table.ref, 'Table must have ref');\n assert(table.columns, 'Table must have column definitions');\n assert(table.rows, 'Table must have row definitions');\n\n table.tl = colCache.decodeAddress(table.ref);\n const {row, col} = table.tl;\n assert(row > 0, 'Table must be on valid row');\n assert(col > 0, 'Table must be on valid col');\n\n const {width, filterHeight, tableHeight} = this;\n\n // autoFilterRef is a range that includes optional headers only\n table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1);\n\n // tableRef is a range that includes optional headers and totals\n table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1);\n\n table.columns.forEach((column, i) => {\n assert(column.name, `Column ${i} must have a name`);\n if (i === 0) {\n assign(column, 'totalsRowLabel', 'Total');\n } else {\n assign(column, 'totalsRowFunction', 'none');\n column.totalsRowFormula = this.getFormula(column);\n }\n });\n }\n\n store() {\n // where the table needs to store table data, headers, footers in\n // the sheet...\n const assignStyle = (cell, style) => {\n if (style) {\n Object.keys(style).forEach(key => {\n cell[key] = style[key];\n });\n }\n };\n\n const {worksheet, table} = this;\n const {row, col} = table.tl;\n let count = 0;\n if (table.headerRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const {style, name} = column;\n const cell = r.getCell(col + j);\n cell.value = name;\n assignStyle(cell, style);\n });\n }\n table.rows.forEach(data => {\n const r = worksheet.getRow(row + count++);\n data.forEach((value, j) => {\n const cell = r.getCell(col + j);\n cell.value = value;\n\n assignStyle(cell, table.columns[j].style);\n });\n });\n\n if (table.totalsRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n if (j === 0) {\n cell.value = column.totalsRowLabel;\n } else {\n const formula = this.getFormula(column);\n if (formula) {\n cell.value = {\n formula: column.totalsRowFormula,\n result: column.totalsRowResult,\n };\n } else {\n cell.value = null;\n }\n }\n\n assignStyle(cell, column.style);\n });\n }\n }\n\n load(worksheet) {\n // where the table will read necessary features from a loaded sheet\n const {table} = this;\n const {row, col} = table.tl;\n let count = 0;\n if (table.headerRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n cell.value = column.name;\n });\n }\n table.rows.forEach(data => {\n const r = worksheet.getRow(row + count++);\n data.forEach((value, j) => {\n const cell = r.getCell(col + j);\n cell.value = value;\n });\n });\n\n if (table.totalsRow) {\n const r = worksheet.getRow(row + count++);\n table.columns.forEach((column, j) => {\n const cell = r.getCell(col + j);\n if (j === 0) {\n cell.value = column.totalsRowLabel;\n } else {\n const formula = this.getFormula(column);\n if (formula) {\n cell.value = {\n formula: column.totalsRowFormula,\n result: column.totalsRowResult,\n };\n }\n }\n });\n }\n }\n\n get model() {\n return this.table;\n }\n\n set model(value) {\n this.table = value;\n }\n\n // ================================================================\n // TODO: Mutating methods\n cacheState() {\n if (!this._cache) {\n this._cache = {\n ref: this.ref,\n width: this.width,\n tableHeight: this.tableHeight,\n };\n }\n }\n\n commit() {\n // changes may have been made that might have on-sheet effects\n if (!this._cache) {\n return;\n }\n\n // check things are ok first\n this.validate();\n\n const ref = colCache.decodeAddress(this._cache.ref);\n if (this.ref !== this._cache.ref) {\n // wipe out whole table footprint at previous location\n for (let i = 0; i < this._cache.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = 0; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n } else {\n // clear out below table if it has shrunk\n for (let i = this.tableHeight; i < this._cache.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = 0; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n\n // clear out to right of table if it has lost columns\n for (let i = 0; i < this.tableHeight; i++) {\n const row = this.worksheet.getRow(ref.row + i);\n for (let j = this.width; j < this._cache.width; j++) {\n const cell = row.getCell(ref.col + j);\n cell.value = null;\n }\n }\n }\n\n this.store();\n }\n\n addRow(values, rowNumber) {\n // Add a row of data, either insert at rowNumber or append\n this.cacheState();\n\n if (rowNumber === undefined) {\n this.table.rows.push(values);\n } else {\n this.table.rows.splice(rowNumber, 0, values);\n }\n }\n\n removeRows(rowIndex, count = 1) {\n // Remove a rows of data\n this.cacheState();\n this.table.rows.splice(rowIndex, count);\n }\n\n getColumn(colIndex) {\n const column = this.table.columns[colIndex];\n return new Column(this, column, colIndex);\n }\n\n addColumn(column, values, colIndex) {\n // Add a new column, including column defn and values\n // Inserts at colNumber or adds to the right\n this.cacheState();\n\n if (colIndex === undefined) {\n this.table.columns.push(column);\n this.table.rows.forEach((row, i) => {\n row.push(values[i]);\n });\n } else {\n this.table.columns.splice(colIndex, 0, column);\n this.table.rows.forEach((row, i) => {\n row.splice(colIndex, 0, values[i]);\n });\n }\n }\n\n removeColumns(colIndex, count = 1) {\n // Remove a column with data\n this.cacheState();\n\n this.table.columns.splice(colIndex, count);\n this.table.rows.forEach(row => {\n row.splice(colIndex, count);\n });\n }\n\n _assign(target, prop, value) {\n this.cacheState();\n target[prop] = value;\n }\n\n /* eslint-disable lines-between-class-members */\n get ref() {\n return this.table.ref;\n }\n set ref(value) {\n this._assign(this.table, 'ref', value);\n }\n\n get name() {\n return this.table.name;\n }\n set name(value) {\n this.table.name = value;\n }\n\n get displayName() {\n return this.table.displyName || this.table.name;\n }\n set displayNamename(value) {\n this.table.displayName = value;\n }\n\n get headerRow() {\n return this.table.headerRow;\n }\n set headerRow(value) {\n this._assign(this.table, 'headerRow', value);\n }\n\n get totalsRow() {\n return this.table.totalsRow;\n }\n set totalsRow(value) {\n this._assign(this.table, 'totalsRow', value);\n }\n\n get theme() {\n return this.table.style.name;\n }\n set theme(value) {\n this.table.style.name = value;\n }\n\n get showFirstColumn() {\n return this.table.style.showFirstColumn;\n }\n set showFirstColumn(value) {\n this.table.style.showFirstColumn = value;\n }\n\n get showLastColumn() {\n return this.table.style.showLastColumn;\n }\n set showLastColumn(value) {\n this.table.style.showLastColumn = value;\n }\n\n get showRowStripes() {\n return this.table.style.showRowStripes;\n }\n set showRowStripes(value) {\n this.table.style.showRowStripes = value;\n }\n\n get showColumnStripes() {\n return this.table.style.showColumnStripes;\n }\n set showColumnStripes(value) {\n this.table.style.showColumnStripes = value;\n }\n /* eslint-enable lines-between-class-members */\n}\n\nmodule.exports = Table;\n", + "'use strict';\n\nconst Worksheet = require('./worksheet');\nconst DefinedNames = require('./defined-names');\nconst XLSX = require('../xlsx/xlsx');\nconst CSV = require('../csv/csv');\n\n// Workbook requirements\n// Load and Save from file and stream\n// Access/Add/Delete individual worksheets\n// Manage String table, Hyperlink table, etc.\n// Manage scaffolding for contained objects to write to/read from\n\nclass Workbook {\n constructor() {\n this.category = '';\n this.company = '';\n this.created = new Date();\n this.description = '';\n this.keywords = '';\n this.manager = '';\n this.modified = this.created;\n this.properties = {};\n this.calcProperties = {};\n this._worksheets = [];\n this.subject = '';\n this.title = '';\n this.views = [];\n this.media = [];\n this._definedNames = new DefinedNames();\n }\n\n get xlsx() {\n if (!this._xlsx) this._xlsx = new XLSX(this);\n return this._xlsx;\n }\n\n get csv() {\n if (!this._csv) this._csv = new CSV(this);\n return this._csv;\n }\n\n get nextId() {\n // find the next unique spot to add worksheet\n for (let i = 1; i < this._worksheets.length; i++) {\n if (!this._worksheets[i]) {\n return i;\n }\n }\n return this._worksheets.length || 1;\n }\n\n addWorksheet(name, options) {\n const id = this.nextId;\n\n // if options is a color, call it tabColor (and signal deprecated message)\n if (options) {\n if (typeof options === 'string') {\n // eslint-disable-next-line no-console\n console.trace(\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: \"rbg value\" } }'\n );\n options = {\n properties: {\n tabColor: {argb: options},\n },\n };\n } else if (options.argb || options.theme || options.indexed) {\n // eslint-disable-next-line no-console\n console.trace(\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }'\n );\n options = {\n properties: {\n tabColor: options,\n },\n };\n }\n }\n\n const lastOrderNo = this._worksheets.reduce((acc, ws) => ((ws && ws.orderNo) > acc ? ws.orderNo : acc), 0);\n const worksheetOptions = Object.assign({}, options, {\n id,\n name,\n orderNo: lastOrderNo + 1,\n workbook: this,\n });\n\n const worksheet = new Worksheet(worksheetOptions);\n\n this._worksheets[id] = worksheet;\n return worksheet;\n }\n\n removeWorksheetEx(worksheet) {\n delete this._worksheets[worksheet.id];\n }\n\n removeWorksheet(id) {\n const worksheet = this.getWorksheet(id);\n if (worksheet) {\n worksheet.destroy();\n }\n }\n\n getWorksheet(id) {\n if (id === undefined) {\n return this._worksheets.find(Boolean);\n }\n if (typeof id === 'number') {\n return this._worksheets[id];\n }\n if (typeof id === 'string') {\n return this._worksheets.find(worksheet => worksheet && worksheet.name === id);\n }\n return undefined;\n }\n\n get worksheets() {\n // return a clone of _worksheets\n return this._worksheets\n .slice(1)\n .sort((a, b) => a.orderNo - b.orderNo)\n .filter(Boolean);\n }\n\n eachSheet(iteratee) {\n this.worksheets.forEach(sheet => {\n iteratee(sheet, sheet.id);\n });\n }\n\n get definedNames() {\n return this._definedNames;\n }\n\n clearThemes() {\n // Note: themes are not an exposed feature, meddle at your peril!\n this._themes = undefined;\n }\n\n addImage(image) {\n // TODO: validation?\n const id = this.media.length;\n this.media.push(Object.assign({}, image, {type: 'image'}));\n return id;\n }\n\n getImage(id) {\n return this.media[id];\n }\n\n get model() {\n return {\n creator: this.creator || 'Unknown',\n lastModifiedBy: this.lastModifiedBy || 'Unknown',\n lastPrinted: this.lastPrinted,\n created: this.created,\n modified: this.modified,\n properties: this.properties,\n worksheets: this.worksheets.map(worksheet => worksheet.model),\n sheets: this.worksheets.map(ws => ws.model).filter(Boolean),\n definedNames: this._definedNames.model,\n views: this.views,\n company: this.company,\n manager: this.manager,\n title: this.title,\n subject: this.subject,\n keywords: this.keywords,\n category: this.category,\n description: this.description,\n language: this.language,\n revision: this.revision,\n contentStatus: this.contentStatus,\n themes: this._themes,\n media: this.media,\n calcProperties: this.calcProperties,\n };\n }\n\n set model(value) {\n this.creator = value.creator;\n this.lastModifiedBy = value.lastModifiedBy;\n this.lastPrinted = value.lastPrinted;\n this.created = value.created;\n this.modified = value.modified;\n this.company = value.company;\n this.manager = value.manager;\n this.title = value.title;\n this.subject = value.subject;\n this.keywords = value.keywords;\n this.category = value.category;\n this.description = value.description;\n this.language = value.language;\n this.revision = value.revision;\n this.contentStatus = value.contentStatus;\n\n this.properties = value.properties;\n this.calcProperties = value.calcProperties;\n this._worksheets = [];\n value.worksheets.forEach(worksheetModel => {\n const {id, name, state} = worksheetModel;\n const orderNo = value.sheets && value.sheets.findIndex(ws => ws.id === id);\n const worksheet = (this._worksheets[id] = new Worksheet({\n id,\n name,\n orderNo,\n state,\n workbook: this,\n }));\n worksheet.model = worksheetModel;\n });\n\n this._definedNames.model = value.definedNames;\n this.views = value.views;\n this._themes = value.themes;\n this.media = value.media || [];\n }\n}\n\nmodule.exports = Workbook;\n", + "const _ = require('../utils/under-dash');\n\nconst colCache = require('../utils/col-cache');\nconst Range = require('./range');\nconst Row = require('./row');\nconst Column = require('./column');\nconst Enums = require('./enums');\nconst Image = require('./image');\nconst Table = require('./table');\nconst DataValidations = require('./data-validations');\nconst Encryptor = require('../utils/encryptor');\nconst {copyStyle} = require('../utils/copy-style');\n\n// Worksheet requirements\n// Operate as sheet inside workbook or standalone\n// Load and Save from file and stream\n// Access/Add/Delete individual cells\n// Manage column widths and row heights\n\nclass Worksheet {\n constructor(options) {\n options = options || {};\n this._workbook = options.workbook;\n\n // in a workbook, each sheet will have a number\n this.id = options.id;\n this.orderNo = options.orderNo;\n\n // and a name\n this.name = options.name;\n\n // add a state\n this.state = options.state || 'visible';\n\n // rows allows access organised by row. Sparse array of arrays indexed by row-1, col\n // Note: _rows is zero based. Must subtract 1 to go from cell.row to index\n this._rows = [];\n\n // column definitions\n this._columns = null;\n\n // column keys (addRow convenience): key ==> this._collumns index\n this._keys = {};\n\n // keep record of all merges\n this._merges = {};\n\n // record of all row and column pageBreaks\n this.rowBreaks = [];\n\n // for tabColor, default row height, outline levels, etc\n this.properties = Object.assign(\n {},\n {\n defaultRowHeight: 15,\n dyDescent: 55,\n outlineLevelCol: 0,\n outlineLevelRow: 0,\n },\n options.properties\n );\n\n // for all things printing\n this.pageSetup = Object.assign(\n {},\n {\n margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3},\n orientation: 'portrait',\n horizontalDpi: 4294967295,\n verticalDpi: 4294967295,\n fitToPage: !!(\n options.pageSetup &&\n (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) &&\n !options.pageSetup.scale\n ),\n pageOrder: 'downThenOver',\n blackAndWhite: false,\n draft: false,\n cellComments: 'None',\n errors: 'displayed',\n scale: 100,\n fitToWidth: 1,\n fitToHeight: 1,\n paperSize: undefined,\n showRowColHeaders: false,\n showGridLines: false,\n firstPageNumber: undefined,\n horizontalCentered: false,\n verticalCentered: false,\n rowBreaks: null,\n colBreaks: null,\n },\n options.pageSetup\n );\n\n this.headerFooter = Object.assign(\n {},\n {\n differentFirst: false,\n differentOddEven: false,\n oddHeader: null,\n oddFooter: null,\n evenHeader: null,\n evenFooter: null,\n firstHeader: null,\n firstFooter: null,\n },\n options.headerFooter\n );\n\n this.dataValidations = new DataValidations();\n\n // for freezepanes, split, zoom, gridlines, etc\n this.views = options.views || [];\n\n this.autoFilter = options.autoFilter || null;\n\n // for images, etc\n this._media = [];\n\n // worksheet protection\n this.sheetProtection = null;\n\n // for tables\n this.tables = {};\n\n this.conditionalFormattings = [];\n }\n\n get name() {\n return this._name;\n }\n\n set name(name) {\n if (name === undefined) {\n name = `sheet${this.id}`;\n }\n\n if (this._name === name) return;\n\n if (typeof name !== 'string') {\n throw new Error('The name has to be a string.');\n }\n\n if (name === '') {\n throw new Error('The name can\\'t be empty.');\n }\n\n if (name === 'History') {\n throw new Error('The name \"History\" is protected. Please use a different name.');\n }\n\n // Illegal character in worksheet name: asterisk (*), question mark (?),\n // colon (:), forward slash (/ \\), or bracket ([])\n if (/[*?:/\\\\[\\]]/.test(name)) {\n throw new Error(`Worksheet name ${name} cannot include any of the following characters: * ? : \\\\ / [ ]`);\n }\n\n if (/(^')|('$)/.test(name)) {\n throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${name}`);\n }\n\n if (name && name.length > 31) {\n // eslint-disable-next-line no-console\n console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`);\n name = name.substring(0, 31);\n }\n\n if (this._workbook._worksheets.find(ws => ws && ws.name.toLowerCase() === name.toLowerCase())) {\n throw new Error(`Worksheet name already exists: ${name}`);\n }\n\n this._name = name;\n }\n\n get workbook() {\n return this._workbook;\n }\n\n // when you're done with this worksheet, call this to remove from workbook\n destroy() {\n this._workbook.removeWorksheetEx(this);\n }\n\n // Get the bounding range of the cells in this worksheet\n get dimensions() {\n const dimensions = new Range();\n this._rows.forEach(row => {\n if (row) {\n const rowDims = row.dimensions;\n if (rowDims) {\n dimensions.expand(row.number, rowDims.min, row.number, rowDims.max);\n }\n }\n });\n return dimensions;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\n }\n\n // set the columns from an array of column definitions.\n // Note: any headers defined will overwrite existing values.\n set columns(value) {\n // calculate max header row count\n this._headerRowCount = value.reduce((pv, cv) => {\n const headerCount = (cv.header && 1) || (cv.headers && cv.headers.length) || 0;\n return Math.max(pv, headerCount);\n }, 0);\n\n // construct Column objects\n let count = 1;\n const columns = (this._columns = []);\n value.forEach(defn => {\n const column = new Column(this, count++, false);\n columns.push(column);\n column.defn = defn;\n });\n }\n\n getColumnKey(key) {\n return this._keys[key];\n }\n\n setColumnKey(key, value) {\n this._keys[key] = value;\n }\n\n deleteColumnKey(key) {\n delete this._keys[key];\n }\n\n eachColumnKey(f) {\n _.each(this._keys, f);\n }\n\n // get a single column by col number. If it doesn't exist, create it and any gaps before it\n getColumn(c) {\n if (typeof c === 'string') {\n // if it matches a key'd column, return that\n const col = this._keys[c];\n if (col) return col;\n\n // otherwise, assume letter\n c = colCache.l2n(c);\n }\n if (!this._columns) {\n this._columns = [];\n }\n if (c > this._columns.length) {\n let n = this._columns.length + 1;\n while (n <= c) {\n this._columns.push(new Column(this, n++));\n }\n }\n return this._columns[c - 1];\n }\n\n spliceColumns(start, count, ...inserts) {\n const rows = this._rows;\n const nRows = rows.length;\n if (inserts.length > 0) {\n // must iterate over all rows whether they exist yet or not\n for (let i = 0; i < nRows; i++) {\n const rowArguments = [start, count];\n // eslint-disable-next-line no-loop-func\n inserts.forEach(insert => {\n rowArguments.push(insert[i] || null);\n });\n const row = this.getRow(i + 1);\n // eslint-disable-next-line prefer-spread\n row.splice.apply(row, rowArguments);\n }\n } else {\n // nothing to insert, so just splice all rows\n this._rows.forEach(r => {\n if (r) {\n r.splice(start, count);\n }\n });\n }\n\n // splice column definitions\n const nExpand = inserts.length - count;\n const nKeep = start + count;\n const nEnd = this._columns.length;\n if (nExpand < 0) {\n for (let i = start + inserts.length; i <= nEnd; i++) {\n this.getColumn(i).defn = this.getColumn(i - nExpand).defn;\n }\n } else if (nExpand > 0) {\n for (let i = nEnd; i >= nKeep; i--) {\n this.getColumn(i + nExpand).defn = this.getColumn(i).defn;\n }\n }\n for (let i = start; i < start + inserts.length; i++) {\n this.getColumn(i).defn = null;\n }\n\n // account for defined names\n this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length);\n }\n\n get lastColumn() {\n return this.getColumn(this.columnCount);\n }\n\n get columnCount() {\n let maxCount = 0;\n this.eachRow(row => {\n maxCount = Math.max(maxCount, row.cellCount);\n });\n return maxCount;\n }\n\n get actualColumnCount() {\n // performance nightmare - for each row, counts all the columns used\n const counts = [];\n let count = 0;\n this.eachRow(row => {\n row.eachCell(({col}) => {\n if (!counts[col]) {\n counts[col] = true;\n count++;\n }\n });\n });\n return count;\n }\n\n // =========================================================================\n // Rows\n\n _commitRow() {\n // nop - allows streaming reader to fill a document\n }\n\n get _lastRowNumber() {\n // need to cope with results of splice\n const rows = this._rows;\n let n = rows.length;\n while (n > 0 && rows[n - 1] === undefined) {\n n--;\n }\n return n;\n }\n\n get _nextRow() {\n return this._lastRowNumber + 1;\n }\n\n get lastRow() {\n if (this._rows.length) {\n return this._rows[this._rows.length - 1];\n }\n return undefined;\n }\n\n // find a row (if exists) by row number\n findRow(r) {\n return this._rows[r - 1];\n }\n\n // find multiple rows (if exists) by row number\n findRows(start, length) {\n return this._rows.slice(start - 1, start - 1 + length);\n }\n\n get rowCount() {\n return this._lastRowNumber;\n }\n\n get actualRowCount() {\n // counts actual rows that have actual data\n let count = 0;\n this.eachRow(() => {\n count++;\n });\n return count;\n }\n\n // get a row by row number.\n getRow(r) {\n let row = this._rows[r - 1];\n if (!row) {\n row = this._rows[r - 1] = new Row(this, r);\n }\n return row;\n }\n\n // get multiple rows by row number.\n getRows(start, length) {\n if (length < 1) return undefined;\n const rows = [];\n for (let i = start; i < start + length; i++) {\n rows.push(this.getRow(i));\n }\n return rows;\n }\n\n addRow(value, style = 'n') {\n const rowNo = this._nextRow;\n const row = this.getRow(rowNo);\n row.values = value;\n this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n');\n return row;\n }\n\n addRows(value, style = 'n') {\n const rows = [];\n value.forEach(row => {\n rows.push(this.addRow(row, style));\n });\n return rows;\n }\n\n insertRow(pos, value, style = 'n') {\n this.spliceRows(pos, 0, value);\n this._setStyleOption(pos, style);\n return this.getRow(pos);\n }\n\n insertRows(pos, values, style = 'n') {\n this.spliceRows(pos, 0, ...values);\n if (style !== 'n') {\n // copy over the styles\n for (let i = 0; i < values.length; i++) {\n if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) {\n this._copyStyle(values.length + pos + i, pos + i, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos + i, style[1] === '+');\n }\n }\n }\n return this.getRows(pos, values.length);\n }\n\n // set row at position to same style as of either pervious row (option 'i') or next row (option 'o')\n _setStyleOption(pos, style = 'n') {\n if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) {\n this._copyStyle(pos + 1, pos, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos, style[1] === '+');\n }\n }\n\n _copyStyle(src, dest, styleEmpty = false) {\n const rSrc = this.getRow(src);\n const rDst = this.getRow(dest);\n rDst.style = copyStyle(rSrc.style);\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: styleEmpty}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = copyStyle(cell.style);\n });\n rDst.height = rSrc.height;\n }\n\n duplicateRow(rowNum, count, insert = false) {\n // create count duplicates of rowNum\n // either inserting new or overwriting existing rows\n\n const rSrc = this._rows[rowNum - 1];\n const inserts = new Array(count).fill(rSrc.values);\n this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts);\n\n // now copy styles...\n for (let i = 0; i < count; i++) {\n const rDst = this._rows[rowNum + i];\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n }\n }\n\n spliceRows(start, count, ...inserts) {\n // same problem as row.splice, except worse.\n const nKeep = start + count;\n const nInserts = inserts.length;\n const nExpand = nInserts - count;\n const nEnd = this._rows.length;\n let i;\n let rSrc;\n if (nExpand < 0) {\n // remove rows\n if (start === nEnd) {\n this._rows[nEnd - 1] = undefined;\n }\n for (i = nKeep; i <= nEnd; i++) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n this._rows[i - 1] = undefined;\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n\n // remerge cells accounting for insert offset\n if (cell._value.constructor.name === 'MergeValue') {\n const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber);\n const prevMaster = cell._value._master;\n const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number);\n cellToBeMerged.merge(newMaster);\n }\n });\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now copy over the new values\n for (i = 0; i < nInserts; i++) {\n const rDst = this.getRow(start + i);\n rDst.style = {};\n rDst.values = inserts[i];\n }\n\n // account for defined names\n this.workbook.definedNames.spliceRows(this.name, start, count, nInserts);\n }\n\n // iterate over every row in the worksheet, including maybe empty rows\n eachRow(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = undefined;\n }\n if (options && options.includeEmpty) {\n const n = this._rows.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getRow(i), i);\n }\n } else {\n this._rows.forEach(row => {\n if (row && row.hasValues) {\n iteratee(row, row.number);\n }\n });\n }\n }\n\n // return all rows as sparse array\n getSheetValues() {\n const rows = [];\n this._rows.forEach(row => {\n if (row) {\n rows[row.number] = row.values;\n }\n });\n return rows;\n }\n\n // =========================================================================\n // Cells\n\n // returns the cell at [r,c] or address given by r. If not found, return undefined\n findCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this._rows[address.row - 1];\n return row ? row.findCell(address.col) : undefined;\n }\n\n // return the cell at [r,c] or address given by r. If not found, create a new one.\n getCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this.getRow(address.row);\n return row.getCellEx(address);\n }\n\n // =========================================================================\n // Merge\n\n // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell\n mergeCells(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions);\n }\n\n mergeCellsWithoutStyle(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions, true);\n }\n\n _mergeCellsInternal(dimensions, ignoreStyle) {\n // check cells aren't already merged\n _.each(this._merges, merge => {\n if (merge.intersects(dimensions)) {\n throw new Error('Cannot merge already merged cells');\n }\n });\n\n // apply merge\n const master = this.getCell(dimensions.top, dimensions.left);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n // merge all but the master cell\n if (i > dimensions.top || j > dimensions.left) {\n this.getCell(i, j).merge(master, ignoreStyle);\n }\n }\n }\n\n // index merge\n this._merges[master.address] = dimensions;\n }\n\n _unMergeMaster(master) {\n // master is always top left of a rectangle\n const merge = this._merges[master.address];\n if (merge) {\n for (let i = merge.top; i <= merge.bottom; i++) {\n for (let j = merge.left; j <= merge.right; j++) {\n this.getCell(i, j).unmerge();\n }\n }\n delete this._merges[master.address];\n }\n }\n\n get hasMerges() {\n // return true if this._merges has a merge object\n return _.some(this._merges, Boolean);\n }\n\n // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge,\n // un-merge the group. Note this function can affect multiple merges and merge-blocks are\n // atomic - either they're all merged or all un-merged.\n unMergeCells(...cells) {\n const dimensions = new Range(cells);\n\n // find any cells in that range and unmerge them\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = this.findCell(i, j);\n if (cell) {\n if (cell.type === Enums.ValueType.Merge) {\n // this cell merges to another master\n this._unMergeMaster(cell.master);\n } else if (this._merges[cell.address]) {\n // this cell is a master\n this._unMergeMaster(cell);\n }\n }\n }\n }\n }\n\n // ===========================================================================\n // Shared/Array Formula\n fillFormula(range, formula, results, shareType = 'shared') {\n // Define formula for top-left cell and share to rest\n const decoded = colCache.decode(range);\n const {top, left, bottom, right} = decoded;\n const width = right - left + 1;\n const masterAddress = colCache.encodeAddress(top, left);\n const isShared = shareType === 'shared';\n\n // work out result accessor\n let getResult;\n if (typeof results === 'function') {\n getResult = results;\n } else if (Array.isArray(results)) {\n if (Array.isArray(results[0])) {\n getResult = (row, col) => results[row - top][col - left];\n } else {\n // eslint-disable-next-line no-mixed-operators\n getResult = (row, col) => results[(row - top) * width + (col - left)];\n }\n } else {\n getResult = () => undefined;\n }\n let first = true;\n for (let r = top; r <= bottom; r++) {\n for (let c = left; c <= right; c++) {\n if (first) {\n this.getCell(r, c).value = {\n shareType,\n formula,\n ref: range,\n result: getResult(r, c),\n };\n first = false;\n } else {\n this.getCell(r, c).value = isShared\n ? {\n sharedFormula: masterAddress,\n result: getResult(r, c),\n }\n : getResult(r, c);\n }\n }\n }\n }\n\n // =========================================================================\n // Images\n addImage(imageId, range) {\n const model = {\n type: 'image',\n imageId,\n range,\n };\n this._media.push(new Image(this, model));\n }\n\n getImages() {\n return this._media.filter(m => m.type === 'image');\n }\n\n addBackgroundImage(imageId) {\n const model = {\n type: 'background',\n imageId,\n };\n this._media.push(new Image(this, model));\n }\n\n getBackgroundImageId() {\n const image = this._media.find(m => m.type === 'background');\n return image && image.imageId;\n }\n\n // =========================================================================\n // Worksheet Protection\n protect(password, options) {\n // TODO: make this function truly async\n // perhaps marshal to worker thread or something\n return new Promise(resolve => {\n this.sheetProtection = {\n sheet: true,\n };\n if (options && 'spinCount' in options) {\n // force spinCount to be integer >= 0\n options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;\n }\n if (password) {\n this.sheetProtection.algorithmName = 'SHA-512';\n this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');\n this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount\n this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(\n password,\n 'SHA512',\n this.sheetProtection.saltValue,\n this.sheetProtection.spinCount\n );\n }\n if (options) {\n this.sheetProtection = Object.assign(this.sheetProtection, options);\n if (!password && 'spinCount' in options) {\n delete this.sheetProtection.spinCount;\n }\n }\n resolve();\n });\n }\n\n unprotect() {\n this.sheetProtection = null;\n }\n\n // =========================================================================\n // Tables\n addTable(model) {\n const table = new Table(this, model);\n this.tables[model.name] = table;\n return table;\n }\n\n getTable(name) {\n return this.tables[name];\n }\n\n removeTable(name) {\n delete this.tables[name];\n }\n\n getTables() {\n return Object.values(this.tables);\n }\n\n // ===========================================================================\n // Conditional Formatting\n addConditionalFormatting(cf) {\n this.conditionalFormattings.push(cf);\n }\n\n removeConditionalFormatting(filter) {\n if (typeof filter === 'number') {\n this.conditionalFormattings.splice(filter, 1);\n } else if (filter instanceof Function) {\n this.conditionalFormattings = this.conditionalFormattings.filter(filter);\n } else {\n this.conditionalFormattings = [];\n }\n }\n\n // ===========================================================================\n // Deprecated\n get tabColor() {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n return this.properties.tabColor;\n }\n\n set tabColor(value) {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n this.properties.tabColor = value;\n }\n\n // ===========================================================================\n // Model\n\n get model() {\n const model = {\n id: this.id,\n name: this.name,\n dataValidations: this.dataValidations.model,\n properties: this.properties,\n state: this.state,\n pageSetup: this.pageSetup,\n headerFooter: this.headerFooter,\n rowBreaks: this.rowBreaks,\n views: this.views,\n autoFilter: this.autoFilter,\n media: this._media.map(medium => medium.model),\n sheetProtection: this.sheetProtection,\n tables: Object.values(this.tables).map(table => table.model),\n conditionalFormattings: this.conditionalFormattings,\n };\n\n // =================================================\n // columns\n model.cols = Column.toModel(this.columns);\n\n // ==========================================================\n // Rows\n const rows = (model.rows = []);\n const dimensions = (model.dimensions = new Range());\n this._rows.forEach(row => {\n const rowModel = row && row.model;\n if (rowModel) {\n dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max);\n rows.push(rowModel);\n }\n });\n\n // ==========================================================\n // Merges\n model.merges = [];\n _.each(this._merges, merge => {\n model.merges.push(merge.range);\n });\n\n return model;\n }\n\n _parseRows(model) {\n this._rows = [];\n model.rows.forEach(rowModel => {\n const row = new Row(this, rowModel.number);\n this._rows[row.number - 1] = row;\n row.model = rowModel;\n });\n }\n\n _parseMergeCells(model) {\n _.each(model.mergeCells, merge => {\n // Do not merge styles when importing an Excel file\n // since each cell may have different styles intentionally.\n this.mergeCellsWithoutStyle(merge);\n });\n }\n\n set model(value) {\n this.name = value.name;\n this._columns = Column.fromModel(this, value.cols);\n this._parseRows(value);\n\n this._parseMergeCells(value);\n this.dataValidations = new DataValidations(value.dataValidations);\n this.properties = value.properties;\n this.pageSetup = value.pageSetup;\n this.headerFooter = value.headerFooter;\n this.views = value.views;\n this.autoFilter = value.autoFilter;\n this._media = value.media.map(medium => new Image(this, medium));\n this.sheetProtection = value.sheetProtection;\n this.tables = value.tables.reduce((tables, table) => {\n const t = new Table();\n t.model = table;\n tables[table.name] = t;\n return tables;\n }, {});\n this.conditionalFormattings = value.conditionalFormattings;\n }\n}\n\nmodule.exports = Worksheet;\n", + "/* eslint-disable import/no-extraneous-dependencies,node/no-unpublished-require */\nrequire('core-js/modules/es.promise');\nrequire('core-js/modules/es.promise.finally');\nrequire('core-js/modules/es.object.assign');\nrequire('core-js/modules/es.object.keys');\nrequire('core-js/modules/es.object.values');\nrequire('core-js/modules/es.symbol');\nrequire('core-js/modules/es.symbol.async-iterator');\n// required by core-js/modules/es.promise Promise.all\nrequire('core-js/modules/es.array.iterator');\n// required by node_modules/saxes/saxes.js SaxesParser.captureTo\nrequire('core-js/modules/es.array.includes');\n// required by lib/doc/workbook.js Workbook.model\nrequire('core-js/modules/es.array.find-index');\n// required by lib/doc/workbook.js Workbook.addWorksheet and Workbook.getWorksheet\nrequire('core-js/modules/es.array.find');\n// required by node_modules/saxes/saxes.js SaxesParser.getCode10\nrequire('core-js/modules/es.string.from-code-point');\n// required by lib/xlsx/xform/sheet/data-validations-xform.js DataValidationsXform.parseClose\nrequire('core-js/modules/es.string.includes');\n// required by lib/utils/utils.js utils.validInt and lib/csv/csv.js CSV.read\nrequire('core-js/modules/es.number.is-nan');\nrequire('regenerator-runtime/runtime');\n\nconst ExcelJS = {\n Workbook: require('./doc/workbook'),\n};\n\n// Object.assign mono-fill\nconst Enums = require('./doc/enums');\n\nObject.keys(Enums).forEach(key => {\n ExcelJS[key] = Enums[key];\n});\n\nmodule.exports = ExcelJS;\n", + "// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');\n\nfunction bufferToString(chunk) {\n if (typeof chunk === 'string') {\n return chunk;\n }\n if (textDecoder) {\n return textDecoder.decode(chunk);\n }\n return chunk.toString();\n}\n\nexports.bufferToString = bufferToString;\n", + "// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8');\nconst {Buffer} = require('buffer');\n\nfunction stringToBuffer(str) {\n if (typeof str !== 'string') {\n return str;\n }\n if (textEncoder) {\n return Buffer.from(textEncoder.encode(str).buffer);\n }\n return Buffer.from(str);\n}\n\nexports.stringToBuffer = stringToBuffer;\n", + "const _ = require('./under-dash');\nconst colCache = require('./col-cache');\n\nclass CellMatrix {\n constructor(template) {\n this.template = template;\n this.sheets = {};\n }\n\n addCell(addressStr) {\n this.addCellEx(colCache.decodeEx(addressStr));\n }\n\n getCell(addressStr) {\n return this.findCellEx(colCache.decodeEx(addressStr), true);\n }\n\n findCell(addressStr) {\n return this.findCellEx(colCache.decodeEx(addressStr), false);\n }\n\n findCellAt(sheetName, rowNumber, colNumber) {\n const sheet = this.sheets[sheetName];\n const row = sheet && sheet[rowNumber];\n return row && row[colNumber];\n }\n\n addCellEx(address) {\n if (address.top) {\n for (let row = address.top; row <= address.bottom; row++) {\n for (let col = address.left; col <= address.right; col++) {\n this.getCellAt(address.sheetName, row, col);\n }\n }\n } else {\n this.findCellEx(address, true);\n }\n }\n\n getCellEx(address) {\n return this.findCellEx(address, true);\n }\n\n findCellEx(address, create) {\n const sheet = this.findSheet(address, create);\n const row = this.findSheetRow(sheet, address, create);\n return this.findRowCell(row, address, create);\n }\n\n getCellAt(sheetName, rowNumber, colNumber) {\n const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []);\n const row = sheet[rowNumber] || (sheet[rowNumber] = []);\n const cell =\n row[colNumber] ||\n (row[colNumber] = {\n sheetName,\n address: colCache.n2l(colNumber) + rowNumber,\n row: rowNumber,\n col: colNumber,\n });\n return cell;\n }\n\n removeCellEx(address) {\n const sheet = this.findSheet(address);\n if (!sheet) {\n return;\n }\n const row = this.findSheetRow(sheet, address);\n if (!row) {\n return;\n }\n delete row[address.col];\n }\n\n forEachInSheet(sheetName, callback) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n sheet.forEach((row, rowNumber) => {\n if (row) {\n row.forEach((cell, colNumber) => {\n if (cell) {\n callback(cell, rowNumber, colNumber);\n }\n });\n }\n });\n }\n }\n\n forEach(callback) {\n _.each(this.sheets, (sheet, sheetName) => {\n this.forEachInSheet(sheetName, callback);\n });\n }\n\n map(callback) {\n const results = [];\n this.forEach(cell => {\n results.push(callback(cell));\n });\n return results;\n }\n\n findSheet(address, create) {\n const name = address.sheetName;\n if (this.sheets[name]) {\n return this.sheets[name];\n }\n if (create) {\n return (this.sheets[name] = []);\n }\n return undefined;\n }\n\n findSheetRow(sheet, address, create) {\n const {row} = address;\n if (sheet && sheet[row]) {\n return sheet[row];\n }\n if (create) {\n return (sheet[row] = []);\n }\n return undefined;\n }\n\n findRowCell(row, address, create) {\n const {col} = address;\n if (row && row[col]) {\n return row[col];\n }\n if (create) {\n return (row[col] = this.template\n ? Object.assign(address, JSON.parse(JSON.stringify(this.template)))\n : address);\n }\n return undefined;\n }\n\n spliceRows(sheetName, start, numDelete, numInsert) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n const inserts = [];\n for (let i = 0; i < numInsert; i++) {\n inserts.push([]);\n }\n sheet.splice(start, numDelete, ...inserts);\n }\n }\n\n spliceColumns(sheetName, start, numDelete, numInsert) {\n const sheet = this.sheets[sheetName];\n if (sheet) {\n const inserts = [];\n for (let i = 0; i < numInsert; i++) {\n inserts.push(null);\n }\n _.each(sheet, row => {\n row.splice(start, numDelete, ...inserts);\n });\n }\n }\n}\n\nmodule.exports = CellMatrix;\n", + "const addressRegex = /^[A-Z]+\\d+$/;\n// =========================================================================\n// Column Letter to Number conversion\nconst colCache = {\n _dictionary: [\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'F',\n 'G',\n 'H',\n 'I',\n 'J',\n 'K',\n 'L',\n 'M',\n 'N',\n 'O',\n 'P',\n 'Q',\n 'R',\n 'S',\n 'T',\n 'U',\n 'V',\n 'W',\n 'X',\n 'Y',\n 'Z',\n ],\n _l2nFill: 0,\n _l2n: {},\n _n2l: [],\n _level(n) {\n if (n <= 26) {\n return 1;\n }\n if (n <= 26 * 26) {\n return 2;\n }\n return 3;\n },\n _fill(level) {\n let c;\n let v;\n let l1;\n let l2;\n let l3;\n let n = 1;\n if (level >= 4) {\n throw new Error('Out of bounds. Excel supports columns from 1 to 16384');\n }\n if (this._l2nFill < 1 && level >= 1) {\n while (n <= 26) {\n c = this._dictionary[n - 1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 1;\n }\n if (this._l2nFill < 2 && level >= 2) {\n n = 27;\n while (n <= 26 + (26 * 26)) {\n v = n - (26 + 1);\n l1 = v % 26;\n l2 = Math.floor(v / 26);\n c = this._dictionary[l2] + this._dictionary[l1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 2;\n }\n if (this._l2nFill < 3 && level >= 3) {\n n = 26 + (26 * 26) + 1;\n while (n <= 16384) {\n v = n - ((26 * 26) + 26 + 1);\n l1 = v % 26;\n l2 = Math.floor(v / 26) % 26;\n l3 = Math.floor(v / (26 * 26));\n c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1];\n this._n2l[n] = c;\n this._l2n[c] = n;\n n++;\n }\n this._l2nFill = 3;\n }\n },\n l2n(l) {\n if (!this._l2n[l]) {\n this._fill(l.length);\n }\n if (!this._l2n[l]) {\n throw new Error(`Out of bounds. Invalid column letter: ${l}`);\n }\n return this._l2n[l];\n },\n n2l(n) {\n if (n < 1 || n > 16384) {\n throw new Error(`${n} is out of bounds. Excel supports columns from 1 to 16384`);\n }\n if (!this._n2l[n]) {\n this._fill(this._level(n));\n }\n return this._n2l[n];\n },\n\n // =========================================================================\n // Address processing\n _hash: {},\n\n // check if value looks like an address\n validateAddress(value) {\n if (!addressRegex.test(value)) {\n throw new Error(`Invalid Address: ${value}`);\n }\n return true;\n },\n\n // convert address string into structure\n decodeAddress(value) {\n const addr = value.length < 5 && this._hash[value];\n if (addr) {\n return addr;\n }\n let hasCol = false;\n let col = '';\n let colNumber = 0;\n let hasRow = false;\n let row = '';\n let rowNumber = 0;\n for (let i = 0, char; i < value.length; i++) {\n char = value.charCodeAt(i);\n // col should before row\n if (!hasRow && char >= 65 && char <= 90) {\n // 65 = 'A'.charCodeAt(0)\n // 90 = 'Z'.charCodeAt(0)\n hasCol = true;\n col += value[i];\n // colNumber starts from 1\n colNumber = (colNumber * 26) + char - 64;\n } else if (char >= 48 && char <= 57) {\n // 48 = '0'.charCodeAt(0)\n // 57 = '9'.charCodeAt(0)\n hasRow = true;\n row += value[i];\n // rowNumber starts from 0\n rowNumber = (rowNumber * 10) + char - 48;\n } else if (hasRow && hasCol && char !== 36) {\n // 36 = '$'.charCodeAt(0)\n break;\n }\n }\n if (!hasCol) {\n colNumber = undefined;\n } else if (colNumber > 16384) {\n throw new Error(`Out of bounds. Invalid column letter: ${col}`);\n }\n if (!hasRow) {\n rowNumber = undefined;\n }\n\n // in case $row$col\n value = col + row;\n\n const address = {\n address: value,\n col: colNumber,\n row: rowNumber,\n $col$row: `$${col}$${row}`,\n };\n\n // mem fix - cache only the tl 100x100 square\n if (colNumber <= 100 && rowNumber <= 100) {\n this._hash[value] = address;\n this._hash[address.$col$row] = address;\n }\n\n return address;\n },\n\n // convert r,c into structure (if only 1 arg, assume r is address string)\n getAddress(r, c) {\n if (c) {\n const address = this.n2l(c) + r;\n return this.decodeAddress(address);\n }\n return this.decodeAddress(r);\n },\n\n // convert [address], [tl:br] into address structures\n decode(value) {\n const parts = value.split(':');\n if (parts.length === 2) {\n const tl = this.decodeAddress(parts[0]);\n const br = this.decodeAddress(parts[1]);\n const result = {\n top: Math.min(tl.row, br.row),\n left: Math.min(tl.col, br.col),\n bottom: Math.max(tl.row, br.row),\n right: Math.max(tl.col, br.col),\n };\n // reconstruct tl, br and dimensions\n result.tl = this.n2l(result.left) + result.top;\n result.br = this.n2l(result.right) + result.bottom;\n result.dimensions = `${result.tl}:${result.br}`;\n return result;\n }\n return this.decodeAddress(value);\n },\n\n // convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures\n decodeEx(value) {\n const groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/);\n\n const sheetName = groups[1] || groups[2]; // Qouted and unqouted groups\n const reference = groups[3]; // Remaining address\n\n const parts = reference.split(':');\n if (parts.length > 1) {\n let tl = this.decodeAddress(parts[0]);\n let br = this.decodeAddress(parts[1]);\n const top = Math.min(tl.row, br.row);\n const left = Math.min(tl.col, br.col);\n const bottom = Math.max(tl.row, br.row);\n const right = Math.max(tl.col, br.col);\n\n tl = this.n2l(left) + top;\n br = this.n2l(right) + bottom;\n\n return {\n top,\n left,\n bottom,\n right,\n sheetName,\n tl: {address: tl, col: left, row: top, $col$row: `$${this.n2l(left)}$${top}`, sheetName},\n br: {\n address: br,\n col: right,\n row: bottom,\n $col$row: `$${this.n2l(right)}$${bottom}`,\n sheetName,\n },\n dimensions: `${tl}:${br}`,\n };\n }\n if (reference.startsWith('#')) {\n return sheetName ? {sheetName, error: reference} : {error: reference};\n }\n\n const address = this.decodeAddress(reference);\n return sheetName ? {sheetName, ...address} : address;\n },\n\n // convert row,col into address string\n encodeAddress(row, col) {\n return colCache.n2l(col) + row;\n },\n\n // convert row,col into string address or t,l,b,r into range\n encode() {\n switch (arguments.length) {\n case 2:\n return colCache.encodeAddress(arguments[0], arguments[1]);\n case 4:\n return `${colCache.encodeAddress(arguments[0], arguments[1])}:${colCache.encodeAddress(\n arguments[2],\n arguments[3]\n )}`;\n default:\n throw new Error('Can only encode with 2 or 4 arguments');\n }\n },\n\n // return true if address is contained within range\n inRange(range, address) {\n const [left, top, , right, bottom] = range;\n const [col, row] = address;\n return col >= left && col <= right && row >= top && row <= bottom;\n },\n};\n\nmodule.exports = colCache;\n", + "const oneDepthCopy = (obj, nestKeys) => ({\n ...obj,\n ...nestKeys.reduce((memo, key) => {\n if (obj[key]) memo[key] = {...obj[key]};\n return memo;\n }, {}),\n});\n\nconst setIfExists = (src, dst, key, nestKeys = []) => {\n if (src[key]) dst[key] = oneDepthCopy(src[key], nestKeys);\n};\n\nconst isEmptyObj = obj => Object.keys(obj).length === 0;\n\nconst copyStyle = style => {\n if (!style) return style;\n if (isEmptyObj(style)) return {};\n\n const copied = {...style};\n\n setIfExists(style, copied, 'font', ['color']);\n setIfExists(style, copied, 'alignment');\n setIfExists(style, copied, 'protection');\n if (style.border) {\n setIfExists(style, copied, 'border');\n setIfExists(style.border, copied.border, 'top', ['color']);\n setIfExists(style.border, copied.border, 'left', ['color']);\n setIfExists(style.border, copied.border, 'bottom', ['color']);\n setIfExists(style.border, copied.border, 'right', ['color']);\n setIfExists(style.border, copied.border, 'diagonal', ['color']);\n }\n\n if (style.fill) {\n setIfExists(style, copied, 'fill', ['fgColor', 'bgColor', 'center']);\n if (style.fill.stops) {\n copied.fill.stops = style.fill.stops.map(s => oneDepthCopy(s, ['color']));\n }\n }\n\n return copied;\n};\n\nexports.copyStyle = copyStyle;\n", + "'use strict';\n\nconst crypto = require('crypto');\n\nconst Encryptor = {\n /**\n * Calculate a hash of the concatenated buffers with the given algorithm.\n * @param {string} algorithm - The hash algorithm.\n * @returns {Buffer} The hash\n */\n hash(algorithm, ...buffers) {\n const hash = crypto.createHash(algorithm);\n hash.update(Buffer.concat(buffers));\n return hash.digest();\n },\n /**\n * Convert a password into an encryption key\n * @param {string} password - The password\n * @param {string} hashAlgorithm - The hash algoritm\n * @param {string} saltValue - The salt value\n * @param {number} spinCount - The spin count\n * @param {number} keyBits - The length of the key in bits\n * @param {Buffer} blockKey - The block key\n * @returns {Buffer} The encryption key\n */\n convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) {\n hashAlgorithm = hashAlgorithm.toLowerCase();\n const hashes = crypto.getHashes();\n if (hashes.indexOf(hashAlgorithm) < 0) {\n throw new Error(`Hash algorithm '${hashAlgorithm}' not supported!`);\n }\n\n // Password must be in unicode buffer\n const passwordBuffer = Buffer.from(password, 'utf16le');\n // Generate the initial hash\n let key = this.hash(hashAlgorithm, Buffer.from(saltValue, 'base64'), passwordBuffer);\n // Now regenerate until spin count\n for (let i = 0; i < spinCount; i++) {\n const iterator = Buffer.alloc(4);\n // this is the 'special' element of Excel password hashing\n // that stops us from using crypto.pbkdf2()\n iterator.writeUInt32LE(i, 0);\n key = this.hash(hashAlgorithm, key, iterator);\n }\n return key.toString('base64');\n },\n /**\n * Generates cryptographically strong pseudo-random data.\n * @param size The size argument is a number indicating the number of bytes to generate.\n */\n randomBytes(size) {\n return crypto.randomBytes(size);\n },\n};\nmodule.exports = Encryptor;\n", + "const {SaxesParser} = require('saxes');\nconst {PassThrough} = require('readable-stream');\nconst {bufferToString} = require('./browser-buffer-decode');\n\nmodule.exports = async function* (iterable) {\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old streams\n if (iterable.pipe && !iterable[Symbol.asyncIterator]) {\n iterable = iterable.pipe(new PassThrough());\n }\n const saxesParser = new SaxesParser();\n let error;\n saxesParser.on('error', err => {\n error = err;\n });\n let events = [];\n saxesParser.on('opentag', value => events.push({eventType: 'opentag', value}));\n saxesParser.on('text', value => events.push({eventType: 'text', value}));\n saxesParser.on('closetag', value => events.push({eventType: 'closetag', value}));\n for await (const chunk of iterable) {\n saxesParser.write(bufferToString(chunk));\n // saxesParser.write and saxesParser.on() are synchronous,\n // so we can only reach the below line once all events have been emitted\n if (error) throw error;\n // As a performance optimization, we gather all events instead of passing\n // them one by one, which would cause each event to go through the event queue\n yield events;\n events = [];\n }\n};\n", + "const colCache = require('./col-cache');\n\n// const cellRefRegex = /(([a-z_\\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i;\nconst replacementCandidateRx = /(([a-z_\\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;\nconst CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;\n\nfunction slideFormula(formula, fromCell, toCell) {\n const offset = colCache.decode(fromCell);\n const to = colCache.decode(toCell);\n return formula.replace(\n replacementCandidateRx,\n (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => {\n if (trailingParen) {\n return refMatch;\n }\n const match = CRrx.exec(addrPart);\n if (match) {\n const colDollar = match[1];\n const colStr = match[2].toUpperCase();\n const rowDollar = match[3];\n const rowStr = match[4];\n if (colStr.length > 3 || (colStr.length === 3 && colStr > 'XFD')) {\n // > XFD is the highest col number in excel 2007 and beyond, so this is a named range\n return refMatch;\n }\n let col = colCache.l2n(colStr);\n let row = parseInt(rowStr, 10);\n if (!colDollar) {\n col += to.col - offset.col;\n }\n if (!rowDollar) {\n row += to.row - offset.row;\n }\n const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row;\n return res;\n }\n return refMatch;\n }\n );\n}\n\nmodule.exports = {\n slideFormula,\n};\n", + "/* eslint-disable max-classes-per-file */\nconst Stream = require('readable-stream');\n\nconst utils = require('./utils');\nconst StringBuf = require('./string-buf');\n\n// =============================================================================\n// data chunks - encapsulating incoming data\nclass StringChunk {\n constructor(data, encoding) {\n this._data = data;\n this._encoding = encoding;\n }\n\n get length() {\n return this.toBuffer().length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n return this.toBuffer().copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n if (!this._buffer) {\n this._buffer = Buffer.from(this._data, this._encoding);\n }\n return this._buffer;\n }\n}\n\nclass StringBufChunk {\n constructor(data) {\n this._data = data;\n }\n\n get length() {\n return this._data.length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n // eslint-disable-next-line no-underscore-dangle\n return this._data._buf.copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n return this._data.toBuffer();\n }\n}\n\nclass BufferChunk {\n constructor(data) {\n this._data = data;\n }\n\n get length() {\n return this._data.length;\n }\n\n // copy to target buffer\n copy(target, targetOffset, offset, length) {\n this._data.copy(target, targetOffset, offset, length);\n }\n\n toBuffer() {\n return this._data;\n }\n}\n\n// =============================================================================\n// ReadWriteBuf - a single buffer supporting simple read-write\nclass ReadWriteBuf {\n constructor(size) {\n this.size = size;\n // the buffer\n this.buffer = Buffer.alloc(size);\n // read index\n this.iRead = 0;\n // write index\n this.iWrite = 0;\n }\n\n toBuffer() {\n if (this.iRead === 0 && this.iWrite === this.size) {\n return this.buffer;\n }\n\n const buf = Buffer.alloc(this.iWrite - this.iRead);\n this.buffer.copy(buf, 0, this.iRead, this.iWrite);\n return buf;\n }\n\n get length() {\n return this.iWrite - this.iRead;\n }\n\n get eod() {\n return this.iRead === this.iWrite;\n }\n\n get full() {\n return this.iWrite === this.size;\n }\n\n read(size) {\n let buf;\n // read size bytes from buffer and return buffer\n if (size === 0) {\n // special case - return null if no data requested\n return null;\n }\n\n if (size === undefined || size >= this.length) {\n // if no size specified or size is at least what we have then return all of the bytes\n buf = this.toBuffer();\n this.iRead = this.iWrite;\n return buf;\n }\n\n // otherwise return a chunk\n buf = Buffer.alloc(size);\n this.buffer.copy(buf, 0, this.iRead, size);\n this.iRead += size;\n return buf;\n }\n\n write(chunk, offset, length) {\n // write as many bytes from data from optional source offset\n // and return number of bytes written\n const size = Math.min(length, this.size - this.iWrite);\n chunk.copy(this.buffer, this.iWrite, offset, offset + size);\n this.iWrite += size;\n return size;\n }\n}\n\n// =============================================================================\n// StreamBuf - a multi-purpose read-write stream\n// As MemBuf - write as much data as you like. Then call toBuffer() to consolidate\n// As StreamHub - pipe to multiple writables\n// As readable stream - feed data into the writable part and have some other code read from it.\n\n// Note: Not sure why but StreamBuf does not like JS \"class\" sugar. It fails the\n// integration tests\nconst StreamBuf = function(options) {\n options = options || {};\n this.bufSize = options.bufSize || 1024 * 1024;\n this.buffers = [];\n\n // batch mode fills a buffer completely before passing the data on\n // to pipes or 'readable' event listeners\n this.batch = options.batch || false;\n\n this.corked = false;\n // where in the current writable buffer we're up to\n this.inPos = 0;\n\n // where in the current readable buffer we've read up to\n this.outPos = 0;\n\n // consuming pipe streams go here\n this.pipes = [];\n\n // controls emit('data')\n this.paused = false;\n\n this.encoding = null;\n};\n\nutils.inherits(StreamBuf, Stream.Duplex, {\n toBuffer() {\n switch (this.buffers.length) {\n case 0:\n return null;\n case 1:\n return this.buffers[0].toBuffer();\n default:\n return Buffer.concat(this.buffers.map(rwBuf => rwBuf.toBuffer()));\n }\n },\n\n // writable\n // event drain - if write returns false (which it won't), indicates when safe to write again.\n // finish - end() has been called\n // pipe(src) - pipe() has been called on readable\n // unpipe(src) - unpipe() has been called on readable\n // error - duh\n\n _getWritableBuffer() {\n if (this.buffers.length) {\n const last = this.buffers[this.buffers.length - 1];\n if (!last.full) {\n return last;\n }\n }\n const buf = new ReadWriteBuf(this.bufSize);\n this.buffers.push(buf);\n return buf;\n },\n\n async _pipe(chunk) {\n const write = function(pipe) {\n return new Promise(resolve => {\n pipe.write(chunk.toBuffer(), () => {\n resolve();\n });\n });\n };\n await Promise.all(this.pipes.map(write));\n },\n _writeToBuffers(chunk) {\n let inPos = 0;\n const inLen = chunk.length;\n while (inPos < inLen) {\n // find writable buffer\n const buffer = this._getWritableBuffer();\n\n // write some data\n inPos += buffer.write(chunk, inPos, inLen - inPos);\n }\n },\n async write(data, encoding, callback) {\n if (encoding instanceof Function) {\n callback = encoding;\n encoding = 'utf8';\n }\n callback = callback || utils.nop;\n\n // encapsulate data into a chunk\n let chunk;\n if (data instanceof StringBuf) {\n chunk = new StringBufChunk(data);\n } else if (data instanceof Buffer) {\n chunk = new BufferChunk(data);\n } else if (typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer) {\n chunk = new StringChunk(data, encoding);\n } else {\n throw new Error('Chunk must be one of type String, Buffer or StringBuf.');\n }\n\n // now, do something with the chunk\n if (this.pipes.length) {\n if (this.batch) {\n this._writeToBuffers(chunk);\n while (!this.corked && this.buffers.length > 1) {\n this._pipe(this.buffers.shift());\n }\n } else if (!this.corked) {\n await this._pipe(chunk);\n callback();\n } else {\n this._writeToBuffers(chunk);\n process.nextTick(callback);\n }\n } else {\n if (!this.paused) {\n this.emit('data', chunk.toBuffer());\n }\n\n this._writeToBuffers(chunk);\n this.emit('readable');\n }\n\n return true;\n },\n cork() {\n this.corked = true;\n },\n _flush(/* destination */) {\n // if we have comsumers...\n if (this.pipes.length) {\n // and there's stuff not written\n while (this.buffers.length) {\n this._pipe(this.buffers.shift());\n }\n }\n },\n uncork() {\n this.corked = false;\n this._flush();\n },\n end(chunk, encoding, callback) {\n const writeComplete = error => {\n if (error) {\n callback(error);\n } else {\n this._flush();\n this.pipes.forEach(pipe => {\n pipe.end();\n });\n this.emit('finish');\n }\n };\n if (chunk) {\n this.write(chunk, encoding, writeComplete);\n } else {\n writeComplete();\n }\n },\n\n // readable\n // event readable - some data is now available\n // event data - switch to flowing mode - feeds chunks to handler\n // event end - no more data\n // event close - optional, indicates upstream close\n // event error - duh\n read(size) {\n let buffers;\n // read min(buffer, size || infinity)\n if (size) {\n buffers = [];\n while (size && this.buffers.length && !this.buffers[0].eod) {\n const first = this.buffers[0];\n const buffer = first.read(size);\n size -= buffer.length;\n buffers.push(buffer);\n if (first.eod && first.full) {\n this.buffers.shift();\n }\n }\n return Buffer.concat(buffers);\n }\n\n buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean);\n this.buffers = [];\n return Buffer.concat(buffers);\n },\n setEncoding(encoding) {\n // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects\n this.encoding = encoding;\n },\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n isPaused() {\n return !!this.paused;\n },\n pipe(destination) {\n // add destination to pipe list & write current buffer\n this.pipes.push(destination);\n if (!this.paused && this.buffers.length) {\n this.end();\n }\n },\n unpipe(destination) {\n // remove destination from pipe list\n this.pipes = this.pipes.filter(pipe => pipe !== destination);\n },\n unshift(/* chunk */) {\n // some numpty has read some data that's not for them and they want to put it back!\n // Might implement this some day\n throw new Error('Not Implemented');\n },\n wrap(/* stream */) {\n // not implemented\n throw new Error('Not Implemented');\n },\n});\n\nmodule.exports = StreamBuf;\n", + "// StringBuf - a way to keep string memory operations to a minimum\n// while building the strings for the xml files\nclass StringBuf {\n constructor(options) {\n this._buf = Buffer.alloc((options && options.size) || 16384);\n this._encoding = (options && options.encoding) || 'utf8';\n\n // where in the buffer we are at\n this._inPos = 0;\n\n // for use by toBuffer()\n this._buffer = undefined;\n }\n\n get length() {\n return this._inPos;\n }\n\n get capacity() {\n return this._buf.length;\n }\n\n get buffer() {\n return this._buf;\n }\n\n toBuffer() {\n // return the current data as a single enclosing buffer\n if (!this._buffer) {\n this._buffer = Buffer.alloc(this.length);\n this._buf.copy(this._buffer, 0, 0, this.length);\n }\n return this._buffer;\n }\n\n reset(position) {\n position = position || 0;\n this._buffer = undefined;\n this._inPos = position;\n }\n\n _grow(min) {\n let size = this._buf.length * 2;\n while (size < min) {\n size *= 2;\n }\n const buf = Buffer.alloc(size);\n this._buf.copy(buf, 0);\n this._buf = buf;\n }\n\n addText(text) {\n this._buffer = undefined;\n\n let inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\n\n // if we've hit (or nearing capacity), grow the buf\n while (inPos >= this._buf.length - 4) {\n this._grow(this._inPos + text.length);\n\n // keep trying to write until we've completely written the text\n inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\n }\n\n this._inPos = inPos;\n }\n\n addStringBuf(inBuf) {\n if (inBuf.length) {\n this._buffer = undefined;\n\n if (this.length + inBuf.length > this.capacity) {\n this._grow(this.length + inBuf.length);\n }\n // eslint-disable-next-line no-underscore-dangle\n inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length);\n this._inPos += inBuf.length;\n }\n }\n}\n\nmodule.exports = StringBuf;\n", + "const {toString} = Object.prototype;\nconst escapeHtmlRegex = /[\"&<>]/;\nconst _ = {\n each: function each(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n obj.forEach(cb);\n } else {\n Object.keys(obj).forEach(key => {\n cb(obj[key], key);\n });\n }\n }\n },\n\n some: function some(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.some(cb);\n }\n return Object.keys(obj).some(key => cb(obj[key], key));\n }\n return false;\n },\n\n every: function every(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.every(cb);\n }\n return Object.keys(obj).every(key => cb(obj[key], key));\n }\n return true;\n },\n\n map: function map(obj, cb) {\n if (obj) {\n if (Array.isArray(obj)) {\n return obj.map(cb);\n }\n return Object.keys(obj).map(key => cb(obj[key], key));\n }\n return [];\n },\n\n keyBy(a, p) {\n return a.reduce((o, v) => {\n o[v[p]] = v;\n return o;\n }, {});\n },\n\n isEqual: function isEqual(a, b) {\n const aType = typeof a;\n const bType = typeof b;\n const aArray = Array.isArray(a);\n const bArray = Array.isArray(b);\n let keys;\n\n if (aType !== bType) {\n return false;\n }\n switch (typeof a) {\n case 'object':\n if (aArray || bArray) {\n if (aArray && bArray) {\n return (\n a.length === b.length &&\n a.every((aValue, index) => {\n const bValue = b[index];\n return _.isEqual(aValue, bValue);\n })\n );\n }\n return false;\n }\n\n if (a === null || b === null) {\n return a === b;\n }\n\n // Compare object keys and values\n keys = Object.keys(a);\n\n if (Object.keys(b).length !== keys.length) {\n return false;\n }\n\n for (const key of keys) {\n if (!b.hasOwnProperty(key)) {\n return false;\n }\n }\n\n return _.every(a, (aValue, key) => {\n const bValue = b[key];\n return _.isEqual(aValue, bValue);\n });\n\n default:\n return a === b;\n }\n },\n\n escapeHtml(html) {\n const regexResult = escapeHtmlRegex.exec(html);\n if (!regexResult) return html;\n\n let result = '';\n let escape = '';\n let lastIndex = 0;\n let i = regexResult.index;\n for (; i < html.length; i++) {\n switch (html.charAt(i)) {\n case '\"':\n escape = '"';\n break;\n case '&':\n escape = '&';\n break;\n case '\\'':\n escape = ''';\n break;\n case '<':\n escape = '<';\n break;\n case '>':\n escape = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== i) result += html.substring(lastIndex, i);\n lastIndex = i + 1;\n result += escape;\n }\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\n return result;\n },\n\n strcmp(a, b) {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n },\n\n isUndefined(val) {\n return toString.call(val) === '[object Undefined]';\n },\n\n isObject(val) {\n return toString.call(val) === '[object Object]';\n },\n\n deepMerge() {\n const target = arguments[0] || {};\n const {length} = arguments;\n // eslint-disable-next-line one-var\n let src, clone, copyIsArray;\n\n function assignValue(val, key) {\n src = target[key];\n copyIsArray = Array.isArray(val);\n if (_.isObject(val) || copyIsArray) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && Array.isArray(src) ? src : [];\n } else {\n clone = src && _.isObject(src) ? src : {};\n }\n target[key] = _.deepMerge(clone, val);\n } else if (!_.isUndefined(val)) {\n target[key] = val;\n }\n }\n\n for (let i = 0; i < length; i++) {\n _.each(arguments[i], assignValue);\n }\n return target;\n },\n};\n\nmodule.exports = _;\n", + "const fs = require('fs');\n\n// useful stuff\nconst inherits = function(cls, superCtor, statics, prototype) {\n // eslint-disable-next-line no-underscore-dangle\n cls.super_ = superCtor;\n\n if (!prototype) {\n prototype = statics;\n statics = null;\n }\n\n if (statics) {\n Object.keys(statics).forEach(i => {\n Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));\n });\n }\n\n const properties = {\n constructor: {\n value: cls,\n enumerable: false,\n writable: false,\n configurable: true,\n },\n };\n if (prototype) {\n Object.keys(prototype).forEach(i => {\n properties[i] = Object.getOwnPropertyDescriptor(prototype, i);\n });\n }\n\n cls.prototype = Object.create(superCtor.prototype, properties);\n};\n\n// eslint-disable-next-line no-control-regex\nconst xmlDecodeRegex = /[<>&'\"\\x7F\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]/;\nconst utils = {\n nop() {},\n promiseImmediate(value) {\n return new Promise(resolve => {\n if (global.setImmediate) {\n setImmediate(() => {\n resolve(value);\n });\n } else {\n // poorman's setImmediate - must wait at least 1ms\n setTimeout(() => {\n resolve(value);\n }, 1);\n }\n });\n },\n inherits,\n dateToExcel(d, date1904) {\n return 25569 + ( d.getTime() / (24 * 3600 * 1000) ) - (date1904 ? 1462 : 0);\n },\n excelToDate(v, date1904) {\n const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);\n return new Date(millisecondSinceEpoch);\n },\n parsePath(filepath) {\n const last = filepath.lastIndexOf('/');\n return {\n path: filepath.substring(0, last),\n name: filepath.substring(last + 1),\n };\n },\n getRelsPath(filepath) {\n const path = utils.parsePath(filepath);\n return `${path.path}/_rels/${path.name}.rels`;\n },\n xmlEncode(text) {\n const regexResult = xmlDecodeRegex.exec(text);\n if (!regexResult) return text;\n\n let result = '';\n let escape = '';\n let lastIndex = 0;\n let i = regexResult.index;\n for (; i < text.length; i++) {\n const charCode = text.charCodeAt(i);\n switch (charCode) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n case 127:\n escape = '';\n break;\n default: {\n if (charCode <= 31 && (charCode <= 8 || (charCode >= 11 && charCode !== 13))) {\n escape = '';\n break;\n }\n continue;\n }\n }\n if (lastIndex !== i) result += text.substring(lastIndex, i);\n lastIndex = i + 1;\n if (escape) result += escape;\n }\n if (lastIndex !== i) return result + text.substring(lastIndex, i);\n return result;\n },\n xmlDecode(text) {\n return text.replace(/&([a-z]*);/g, c => {\n switch (c) {\n case '<':\n return '<';\n case '>':\n return '>';\n case '&':\n return '&';\n case ''':\n return '\\'';\n case '"':\n return '\"';\n default:\n return c;\n }\n });\n },\n validInt(value) {\n const i = parseInt(value, 10);\n return !Number.isNaN(i) ? i : 0;\n },\n\n isDateFmt(fmt) {\n if (!fmt) {\n return false;\n }\n\n // must remove all chars inside quotes and []\n fmt = fmt.replace(/\\[[^\\]]*]/g, '');\n fmt = fmt.replace(/\"[^\"]*\"/g, '');\n // then check for date formatting chars\n const result = fmt.match(/[ymdhMsb]+/) !== null;\n return result;\n },\n\n fs: {\n exists(path) {\n return new Promise(resolve => {\n fs.access(path, fs.constants.F_OK, err => {\n resolve(!err);\n });\n });\n },\n },\n\n toIsoDateString(dt) {\n return dt.toIsoString().subsstr(0, 10);\n },\n\n parseBoolean(value) {\n return value === true || value === 'true' || value === 1 || value === '1';\n },\n};\n\nmodule.exports = utils;\n", + "const _ = require('./under-dash');\n\nconst utils = require('./utils');\n\n// constants\nconst OPEN_ANGLE = '<';\nconst CLOSE_ANGLE = '>';\nconst OPEN_ANGLE_SLASH = '';\n\nfunction pushAttribute(xml, name, value) {\n xml.push(` ${name}=\"${utils.xmlEncode(value.toString())}\"`);\n}\nfunction pushAttributes(xml, attributes) {\n if (attributes) {\n const tmp = [];\n _.each(attributes, (value, name) => {\n if (value !== undefined) {\n pushAttribute(tmp, name, value);\n }\n });\n xml.push(tmp.join(\"\"));\n }\n}\n\nclass XmlStream {\n constructor() {\n this._xml = [];\n this._stack = [];\n this._rollbacks = [];\n }\n\n get tos() {\n return this._stack.length ? this._stack[this._stack.length - 1] : undefined;\n }\n\n get cursor() {\n // handy way to track whether anything has been added\n return this._xml.length;\n }\n\n openXml(docAttributes) {\n const xml = this._xml;\n // \n xml.push('\\n');\n }\n\n openNode(name, attributes) {\n const parent = this.tos;\n const xml = this._xml;\n if (parent && this.open) {\n xml.push(CLOSE_ANGLE);\n }\n\n this._stack.push(name);\n\n // start streaming node\n xml.push(OPEN_ANGLE);\n xml.push(name);\n pushAttributes(xml, attributes);\n this.leaf = true;\n this.open = true;\n }\n\n addAttribute(name, value) {\n if (!this.open) {\n throw new Error('Cannot write attributes to node if it is not open');\n }\n if (value !== undefined) {\n pushAttribute(this._xml, name, value);\n }\n }\n\n addAttributes(attrs) {\n if (!this.open) {\n throw new Error('Cannot write attributes to node if it is not open');\n }\n pushAttributes(this._xml, attrs);\n }\n\n writeText(text) {\n const xml = this._xml;\n if (this.open) {\n xml.push(CLOSE_ANGLE);\n this.open = false;\n }\n this.leaf = false;\n xml.push(utils.xmlEncode(text.toString()));\n }\n\n writeXml(xml) {\n if (this.open) {\n this._xml.push(CLOSE_ANGLE);\n this.open = false;\n }\n this.leaf = false;\n this._xml.push(xml);\n }\n\n closeNode() {\n const node = this._stack.pop();\n const xml = this._xml;\n if (this.leaf) {\n xml.push(CLOSE_SLASH_ANGLE);\n } else {\n xml.push(OPEN_ANGLE_SLASH);\n xml.push(node);\n xml.push(CLOSE_ANGLE);\n }\n this.open = false;\n this.leaf = false;\n }\n\n leafNode(name, attributes, text) {\n this.openNode(name, attributes);\n if (text !== undefined) {\n // zeros need to be written\n this.writeText(text);\n }\n this.closeNode();\n }\n\n closeAll() {\n while (this._stack.length) {\n this.closeNode();\n }\n }\n\n addRollback() {\n this._rollbacks.push({\n xml: this._xml.length,\n stack: this._stack.length,\n leaf: this.leaf,\n open: this.open,\n });\n return this.cursor;\n }\n\n commit() {\n this._rollbacks.pop();\n }\n\n rollback() {\n const r = this._rollbacks.pop();\n if (this._xml.length > r.xml) {\n this._xml.splice(r.xml, this._xml.length - r.xml);\n }\n if (this._stack.length > r.stack) {\n this._stack.splice(r.stack, this._stack.length - r.stack);\n }\n this.leaf = r.leaf;\n this.open = r.open;\n }\n\n get xml() {\n this.closeAll();\n return this._xml.join('');\n }\n}\n\nXmlStream.StdDocAttributes = {\n version: '1.0',\n encoding: 'UTF-8',\n standalone: 'yes',\n};\n\nmodule.exports = XmlStream;\n", + "const events = require('events');\nconst JSZip = require('jszip');\n\nconst StreamBuf = require('./stream-buf');\nconst {stringToBuffer} = require('./browser-buffer-encode');\n\n// =============================================================================\n// The ZipWriter class\n// Packs streamed data into an output zip stream\nclass ZipWriter extends events.EventEmitter {\n constructor(options) {\n super();\n this.options = Object.assign(\n {\n type: 'nodebuffer',\n compression: 'DEFLATE',\n },\n options\n );\n\n this.zip = new JSZip();\n this.stream = new StreamBuf();\n }\n\n append(data, options) {\n if (options.hasOwnProperty('base64') && options.base64) {\n this.zip.file(options.name, data, {base64: true});\n } else {\n // https://www.npmjs.com/package/process\n if (process.browser && typeof data === 'string') {\n // use TextEncoder in browser\n data = stringToBuffer(data);\n }\n this.zip.file(options.name, data);\n }\n }\n\n async finalize() {\n const content = await this.zip.generateAsync(this.options);\n this.stream.end(content);\n this.emit('finish');\n }\n\n // ==========================================================================\n // Stream.Readable interface\n read(size) {\n return this.stream.read(size);\n }\n\n setEncoding(encoding) {\n return this.stream.setEncoding(encoding);\n }\n\n pause() {\n return this.stream.pause();\n }\n\n resume() {\n return this.stream.resume();\n }\n\n isPaused() {\n return this.stream.isPaused();\n }\n\n pipe(destination, options) {\n return this.stream.pipe(destination, options);\n }\n\n unpipe(destination) {\n return this.stream.unpipe(destination);\n }\n\n unshift(chunk) {\n return this.stream.unshift(chunk);\n }\n\n wrap(stream) {\n return this.stream.wrap(stream);\n }\n}\n\n// =============================================================================\n\nmodule.exports = {\n ZipWriter,\n};\n", + "module.exports = {\n 0: {f: 'General'},\n 1: {f: '0'},\n 2: {f: '0.00'},\n 3: {f: '#,##0'},\n 4: {f: '#,##0.00'},\n 9: {f: '0%'},\n 10: {f: '0.00%'},\n 11: {f: '0.00E+00'},\n 12: {f: '# ?/?'},\n 13: {f: '# ??/??'},\n 14: {f: 'mm-dd-yy'},\n 15: {f: 'd-mmm-yy'},\n 16: {f: 'd-mmm'},\n 17: {f: 'mmm-yy'},\n 18: {f: 'h:mm AM/PM'},\n 19: {f: 'h:mm:ss AM/PM'},\n 20: {f: 'h:mm'},\n 21: {f: 'h:mm:ss'},\n 22: {f: 'm/d/yy \"h\":mm'},\n\n 27: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 28: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 29: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 30: {'zh-tw': 'm/d/yy ', 'zh-cn': 'm-d-yy', 'ja-jp': 'm/d/yy', 'ko-kr': 'mm-dd-yy'},\n 31: {\n 'zh-tw': 'yyyy\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'yyyy\"年\"m\"月\"d\"日\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'yyyy\"년\" mm\"월\" dd\"일\"',\n },\n 32: {\n 'zh-tw': 'hh\"時\"mm\"分\"',\n 'zh-cn': 'h\"时\"mm\"分\"',\n 'ja-jp': 'h\"時\"mm\"分\"',\n 'ko-kr': 'h\"시\" mm\"분\"',\n },\n 33: {\n 'zh-tw': 'hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': 'h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'h\"時\"mm\"分\"ss\"秒\"',\n 'ko-kr': 'h\"시\" mm\"분\" ss\"초\"',\n },\n 34: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 35: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 36: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n\n 37: {f: '#,##0 ;(#,##0)'},\n 38: {f: '#,##0 ;[Red](#,##0)'},\n 39: {f: '#,##0.00 ;(#,##0.00)'},\n 40: {f: '#,##0.00 ;[Red](#,##0.00)'},\n 45: {f: 'mm:ss'},\n 46: {f: '[h]:mm:ss'},\n 47: {f: 'mmss.0'},\n 48: {f: '##0.0E+0'},\n 49: {f: '@'},\n\n 50: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 51: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 52: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 53: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 54: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n 55: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\n 'ja-jp': 'yyyy\"年\"m\"月\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 56: {\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\n 'ja-jp': 'm\"月\"d\"日\"',\n 'ko-kr': 'yyyy-mm-dd',\n },\n 57: {\n 'zh-tw': '[$-404]e/m/d',\n 'zh-cn': 'yyyy\"年\"m\"月\"',\n 'ja-jp': '[$-411]ge.m.d',\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\n },\n 58: {\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\n 'zh-cn': 'm\"月\"d\"日\"',\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\n 'ko-kr': 'mm-dd',\n },\n\n 59: {'th-th': 't0'},\n 60: {'th-th': 't0.00'},\n 61: {'th-th': 't#,##0'},\n 62: {'th-th': 't#,##0.00'},\n 67: {'th-th': 't0%'},\n 68: {'th-th': 't0.00%'},\n 69: {'th-th': 't# ?/?'},\n 70: {'th-th': 't# ??/??'},\n\n 81: {'th-th': 'd/m/bb'},\n};\n", + "'use strict';\n\nmodule.exports = {\n OfficeDocument:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\n Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\n CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain',\n SharedStrings:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\n Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\n Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',\n Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n CoreProperties:\n 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\n ExtenderProperties:\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',\n VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',\n Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',\n};\n", + "const parseSax = require('../../utils/parse-sax');\nconst XmlStream = require('../../utils/xml-stream');\n\n/* 'virtual' methods used as a form of documentation */\n/* eslint-disable class-methods-use-this */\n\n// Base class for Xforms\nclass BaseXform {\n // constructor(/* model, name */) {}\n\n // ============================================================\n // Virtual Interface\n prepare(/* model, options */) {\n // optional preparation (mutation) of model so it is ready for write\n }\n\n render(/* xmlStream, model */) {\n // convert model to xml\n }\n\n parseOpen(node) {\n // XML node opened\n }\n\n parseText(text) {\n // chunk of text encountered for current node\n }\n\n parseClose(name) {\n // XML node closed\n }\n\n reconcile(model, options) {\n // optional post-parse step (opposite to prepare)\n }\n\n // ============================================================\n reset() {\n // to make sure parses don't bleed to next iteration\n this.model = null;\n\n // if we have a map - reset them too\n if (this.map) {\n Object.values(this.map).forEach(xform => {\n if (xform instanceof BaseXform) {\n xform.reset();\n } else if (xform.xform) {\n xform.xform.reset();\n }\n });\n }\n }\n\n mergeModel(obj) {\n // set obj's props to this.model\n this.model = Object.assign(this.model || {}, obj);\n }\n\n async parse(saxParser) {\n for await (const events of saxParser) {\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n this.parseOpen(value);\n } else if (eventType === 'text') {\n this.parseText(value);\n } else if (eventType === 'closetag') {\n if (!this.parseClose(value.name)) {\n return this.model;\n }\n }\n }\n }\n return this.model;\n }\n\n async parseStream(stream) {\n return this.parse(parseSax(stream));\n }\n\n get xml() {\n // convenience function to get the xml of this.model\n // useful for manager types that are built during the prepare phase\n return this.toXml(this.model);\n }\n\n toXml(model) {\n const xmlStream = new XmlStream();\n this.render(xmlStream, model);\n return xmlStream.xml;\n }\n\n // ============================================================\n // Useful Utilities\n static toAttribute(value, dflt, always = false) {\n if (value === undefined) {\n if (always) {\n return dflt;\n }\n } else if (always || value !== dflt) {\n return value.toString();\n }\n return undefined;\n }\n\n static toStringAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toStringValue(attr, dflt) {\n return attr === undefined ? dflt : attr;\n }\n\n static toBoolAttribute(value, dflt, always = false) {\n if (value === undefined) {\n if (always) {\n return dflt;\n }\n } else if (always || value !== dflt) {\n return value ? '1' : '0';\n }\n return undefined;\n }\n\n static toBoolValue(attr, dflt) {\n return attr === undefined ? dflt : attr === '1';\n }\n\n static toIntAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toIntValue(attr, dflt) {\n return attr === undefined ? dflt : parseInt(attr, 10);\n }\n\n static toFloatAttribute(value, dflt, always = false) {\n return BaseXform.toAttribute(value, dflt, always);\n }\n\n static toFloatValue(attr, dflt) {\n return attr === undefined ? dflt : parseFloat(attr);\n }\n}\n\nmodule.exports = BaseXform;\n", + "const BaseXform = require('../base-xform');\nconst colCache = require('../../../utils/col-cache');\n\nclass DefinedNamesXform extends BaseXform {\n render(xmlStream, model) {\n // \n // name.ranges.join(',')\n // name.ranges.join(',')\n // \n xmlStream.openNode('definedName', {\n name: model.name,\n localSheetId: model.localSheetId,\n });\n xmlStream.writeText(model.ranges.join(','));\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'definedName':\n this._parsedName = node.attributes.name;\n this._parsedLocalSheetId = node.attributes.localSheetId;\n this._parsedText = [];\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this._parsedText.push(text);\n }\n\n parseClose() {\n this.model = {\n name: this._parsedName,\n ranges: extractRanges(this._parsedText.join('')),\n };\n if (this._parsedLocalSheetId !== undefined) {\n this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10);\n }\n return false;\n }\n}\n\nfunction isValidRange(range) {\n try {\n colCache.decodeEx(range);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nfunction extractRanges(parsedText) {\n const ranges = [];\n let quotesOpened = false;\n let last = '';\n parsedText.split(',').forEach(item => {\n if (!item) {\n return;\n }\n const quotes = (item.match(/'/g) || []).length;\n\n if (!quotes) {\n if (quotesOpened) {\n last += `${item},`;\n } else if (isValidRange(item)) {\n ranges.push(item);\n }\n return;\n }\n const quotesEven = quotes % 2 === 0;\n\n if (!quotesOpened && quotesEven && isValidRange(item)) {\n ranges.push(item);\n } else if (quotesOpened && !quotesEven) {\n quotesOpened = false;\n if (isValidRange(last + item)) {\n ranges.push(last + item);\n }\n last = '';\n } else {\n quotesOpened = true;\n last += `${item},`;\n }\n });\n return ranges;\n}\n\nmodule.exports = DefinedNamesXform;\n", + "const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nclass WorksheetXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('sheet', {\n sheetId: model.id,\n name: model.name,\n state: model.state,\n 'r:id': model.rId,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'sheet') {\n this.model = {\n name: utils.xmlDecode(node.attributes.name),\n id: parseInt(node.attributes.sheetId, 10),\n state: node.attributes.state,\n rId: node.attributes['r:id'],\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorksheetXform;\n", + "const BaseXform = require('../base-xform');\n\nclass WorkbookCalcPropertiesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('calcPr', {\n calcId: 171027,\n fullCalcOnLoad: model.fullCalcOnLoad ? 1 : undefined,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'calcPr') {\n this.model = {};\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorkbookCalcPropertiesXform;\n", + "const BaseXform = require('../base-xform');\n\nclass WorksheetPropertiesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('workbookPr', {\n date1904: model.date1904 ? 1 : undefined,\n defaultThemeVersion: 164011,\n filterPrivacy: 1,\n });\n }\n\n parseOpen(node) {\n if (node.name === 'workbookPr') {\n this.model = {\n date1904: node.attributes.date1904 === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorksheetPropertiesXform;\n", + "const BaseXform = require('../base-xform');\n\nclass WorkbookViewXform extends BaseXform {\n render(xmlStream, model) {\n const attributes = {\n xWindow: model.x || 0,\n yWindow: model.y || 0,\n windowWidth: model.width || 12000,\n windowHeight: model.height || 24000,\n firstSheet: model.firstSheet,\n activeTab: model.activeTab,\n };\n if (model.visibility && model.visibility !== 'visible') {\n attributes.visibility = model.visibility;\n }\n xmlStream.leafNode('workbookView', attributes);\n }\n\n parseOpen(node) {\n if (node.name === 'workbookView') {\n const model = (this.model = {});\n const addS = function(name, value, dflt) {\n const s = value !== undefined ? (model[name] = value) : dflt;\n if (s !== undefined) {\n model[name] = s;\n }\n };\n const addN = function(name, value, dflt) {\n const n = value !== undefined ? (model[name] = parseInt(value, 10)) : dflt;\n if (n !== undefined) {\n model[name] = n;\n }\n };\n addN('x', node.attributes.xWindow, 0);\n addN('y', node.attributes.yWindow, 0);\n addN('width', node.attributes.windowWidth, 25000);\n addN('height', node.attributes.windowHeight, 10000);\n addS('visibility', node.attributes.visibility, 'visible');\n addN('activeTab', node.attributes.activeTab, undefined);\n addN('firstSheet', node.attributes.firstSheet, undefined);\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = WorkbookViewXform;\n", + "const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst DefinedNameXform = require('./defined-name-xform');\nconst SheetXform = require('./sheet-xform');\nconst WorkbookViewXform = require('./workbook-view-xform');\nconst WorkbookPropertiesXform = require('./workbook-properties-xform');\nconst WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform');\n\nclass WorkbookXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion,\n workbookPr: new WorkbookPropertiesXform(),\n bookViews: new ListXform({\n tag: 'bookViews',\n count: false,\n childXform: new WorkbookViewXform(),\n }),\n sheets: new ListXform({tag: 'sheets', count: false, childXform: new SheetXform()}),\n definedNames: new ListXform({\n tag: 'definedNames',\n count: false,\n childXform: new DefinedNameXform(),\n }),\n calcPr: new WorkbookCalcPropertiesXform(),\n };\n }\n\n prepare(model) {\n model.sheets = model.worksheets;\n\n // collate all the print areas from all of the sheets and add them to the defined names\n const printAreas = [];\n let index = 0; // sheets is sparse array - calc index manually\n model.sheets.forEach(sheet => {\n if (sheet.pageSetup && sheet.pageSetup.printArea) {\n sheet.pageSetup.printArea.split('&&').forEach(printArea => {\n const printAreaComponents = printArea.split(':');\n const definedName = {\n name: '_xlnm.Print_Area',\n ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`],\n localSheetId: index,\n };\n printAreas.push(definedName);\n });\n }\n\n if (\n sheet.pageSetup &&\n (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)\n ) {\n const ranges = [];\n\n if (sheet.pageSetup.printTitlesColumn) {\n const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':');\n ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`);\n }\n\n if (sheet.pageSetup.printTitlesRow) {\n const titlesRows = sheet.pageSetup.printTitlesRow.split(':');\n ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`);\n }\n\n const definedName = {\n name: '_xlnm.Print_Titles',\n ranges,\n localSheetId: index,\n };\n\n printAreas.push(definedName);\n }\n index++;\n });\n if (printAreas.length) {\n model.definedNames = model.definedNames.concat(printAreas);\n }\n\n (model.media || []).forEach((medium, i) => {\n // assign name\n medium.name = medium.type + (i + 1);\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES);\n\n this.map.fileVersion.render(xmlStream);\n this.map.workbookPr.render(xmlStream, model.properties);\n this.map.bookViews.render(xmlStream, model.views);\n this.map.sheets.render(xmlStream, model.sheets);\n this.map.definedNames.render(xmlStream, model.definedNames);\n this.map.calcPr.render(xmlStream, model.calcProperties);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'workbook':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'workbook':\n this.model = {\n sheets: this.map.sheets.model,\n properties: this.map.workbookPr.model || {},\n views: this.map.bookViews.model,\n calcProperties: {},\n };\n if (this.map.definedNames.model) {\n this.model.definedNames = this.map.definedNames.model;\n }\n\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model) {\n const rels = (model.workbookRels || []).reduce((map, rel) => {\n map[rel.Id] = rel;\n return map;\n }, {});\n\n // reconcile sheet ids, rIds and names\n const worksheets = [];\n let worksheet;\n let index = 0;\n\n (model.sheets || []).forEach(sheet => {\n const rel = rels[sheet.rId];\n if (!rel) {\n return;\n }\n // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`,\n // otherwise it will be spliced directly behind `xl/`. i.g.\n worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\\s|\\/xl\\/)+/, '')}`];\n // If there are \"chartsheets\" in the file, rel.Target will\n // come out as chartsheets/sheet1.xml or similar here, and\n // that won't be in model.worksheetHash.\n // As we don't have the infrastructure to support chartsheets,\n // we will ignore them for now:\n if (worksheet) {\n worksheet.name = sheet.name;\n worksheet.id = sheet.id;\n worksheet.state = sheet.state;\n worksheets[index++] = worksheet;\n }\n });\n\n // reconcile print areas\n const definedNames = [];\n _.each(model.definedNames, definedName => {\n if (definedName.name === '_xlnm.Print_Area') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n const range = colCache.decodeEx(definedName.ranges[0]);\n worksheet.pageSetup.printArea = worksheet.pageSetup.printArea\n ? `${worksheet.pageSetup.printArea}&&${range.dimensions}`\n : range.dimensions;\n }\n } else if (definedName.name === '_xlnm.Print_Titles') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n\n const rangeString = definedName.ranges.join(',');\n\n const dollarRegex = /\\$/g;\n\n const rowRangeRegex = /\\$\\d+:\\$\\d+/;\n const rowRangeMatches = rangeString.match(rowRangeRegex);\n\n if (rowRangeMatches && rowRangeMatches.length) {\n const range = rowRangeMatches[0];\n worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, '');\n }\n\n const columnRangeRegex = /\\$[A-Z]+:\\$[A-Z]+/;\n const columnRangeMatches = rangeString.match(columnRangeRegex);\n\n if (columnRangeMatches && columnRangeMatches.length) {\n const range = columnRangeMatches[0];\n worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, '');\n }\n }\n } else {\n definedNames.push(definedName);\n }\n });\n model.definedNames = definedNames;\n\n // used by sheets to build their image models\n model.media.forEach((media, i) => {\n media.index = i;\n });\n }\n}\n\nWorkbookXform.WORKBOOK_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x15',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n};\nWorkbookXform.STATIC_XFORMS = {\n fileVersion: new StaticXform({\n tag: 'fileVersion',\n $: {appName: 'xl', lastEdited: 5, lowestEdited: 5, rupBuild: 9303},\n }),\n};\n\nmodule.exports = WorkbookXform;\n", + "const RichTextXform = require('../strings/rich-text-xform');\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\n/**\n \n \n \n \n \n \n \n \n \n 51422:\n \n \n \n \n \n \n \n test\n \n \n \n */\n\nconst CommentXform = (module.exports = function(model) {\n this.model = model;\n});\n\nutils.inherits(CommentXform, BaseXform, {\n get tag() {\n return 'r';\n },\n\n get richTextXform() {\n if (!this._richTextXform) {\n this._richTextXform = new RichTextXform();\n }\n return this._richTextXform;\n },\n\n render(xmlStream, model) {\n model = model || this.model;\n\n xmlStream.openNode('comment', {\n ref: model.ref,\n authorId: 0,\n });\n xmlStream.openNode('text');\n if (model && model.note && model.note.texts) {\n model.note.texts.forEach(text => {\n this.richTextXform.render(xmlStream, text);\n });\n }\n xmlStream.closeNode();\n xmlStream.closeNode();\n },\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'comment':\n this.model = {\n type: 'note',\n note: {\n texts: [],\n },\n ...node.attributes,\n };\n return true;\n case 'r':\n this.parser = this.richTextXform;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n },\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n },\n parseClose(name) {\n switch (name) {\n case 'comment':\n return false;\n case 'r':\n this.model.note.texts.push(this.parser.model);\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n },\n});\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nconst CommentXform = require('./comment-xform');\n\nconst CommentsXform = (module.exports = function() {\n this.map = {\n comment: new CommentXform(),\n };\n});\n\nutils.inherits(\n CommentsXform,\n BaseXform,\n {\n COMMENTS_ATTRIBUTES: {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n },\n },\n {\n render(xmlStream, model) {\n model = model || this.model;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('comments', CommentsXform.COMMENTS_ATTRIBUTES);\n\n // authors\n // TODO: support authors properly\n xmlStream.openNode('authors');\n xmlStream.leafNode('author', null, 'Author');\n xmlStream.closeNode();\n\n // comments\n xmlStream.openNode('commentList');\n model.comments.forEach(comment => {\n this.map.comment.render(xmlStream, comment);\n });\n xmlStream.closeNode();\n xmlStream.closeNode();\n },\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'commentList':\n this.model = {\n comments: [],\n };\n return true;\n case 'comment':\n this.parser = this.map.comment;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n },\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n },\n parseClose(name) {\n switch (name) {\n case 'commentList':\n return false;\n case 'comment':\n this.model.comments.push(this.parser.model);\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n },\n }\n);\n", + "const BaseXform = require('../../base-xform');\n\nclass VmlPositionXform extends BaseXform {\n constructor(model) {\n super();\n this._model = model;\n }\n\n get tag() {\n return this._model && this._model.tag;\n }\n\n render(xmlStream, model, type) {\n if (model === type[2]) {\n xmlStream.leafNode(this.tag);\n } else if (this.tag === 'x:SizeWithCells' && model === type[1]) {\n xmlStream.leafNode(this.tag);\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {};\n this.model[this.tag] = true;\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlPositionXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass VmlProtectionXform extends BaseXform {\n constructor(model) {\n super();\n this._model = model;\n }\n\n get tag() {\n return this._model && this._model.tag;\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.text = '';\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this.text = text;\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlProtectionXform;\n", + "const BaseXform = require('../base-xform');\n\n// render the triangle in the cell for the comment\nclass VmlAnchorXform extends BaseXform {\n get tag() {\n return 'x:Anchor';\n }\n\n getAnchorRect(anchor) {\n const l = Math.floor(anchor.left);\n const lf = Math.floor((anchor.left - l) * 68);\n const t = Math.floor(anchor.top);\n const tf = Math.floor((anchor.top - t) * 18);\n const r = Math.floor(anchor.right);\n const rf = Math.floor((anchor.right - r) * 68);\n const b = Math.floor(anchor.bottom);\n const bf = Math.floor((anchor.bottom - b) * 18);\n return [l, lf, t, tf, r, rf, b, bf];\n }\n\n getDefaultRect(ref) {\n const l = ref.col;\n const lf = 6;\n const t = Math.max(ref.row - 2, 0);\n const tf = 14;\n const r = l + 2;\n const rf = 2;\n const b = t + 4;\n const bf = 16;\n return [l, lf, t, tf, r, rf, b, bf];\n }\n\n render(xmlStream, model) {\n const rect = model.anchor\n ? this.getAnchorRect(model.anchor)\n : this.getDefaultRect(model.refAddress);\n\n xmlStream.leafNode('x:Anchor', null, rect.join(', '));\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.text = '';\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this.text = text;\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = VmlAnchorXform;\n", + "const BaseXform = require('../base-xform');\n\nconst VmlAnchorXform = require('./vml-anchor-xform');\nconst VmlProtectionXform = require('./style/vml-protection-xform');\nconst VmlPositionXform = require('./style/vml-position-xform');\n\nconst POSITION_TYPE = ['twoCells', 'oneCells', 'absolute'];\n\nclass VmlClientDataXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'x:Anchor': new VmlAnchorXform(),\n 'x:Locked': new VmlProtectionXform({tag: 'x:Locked'}),\n 'x:LockText': new VmlProtectionXform({tag: 'x:LockText'}),\n 'x:SizeWithCells': new VmlPositionXform({tag: 'x:SizeWithCells'}),\n 'x:MoveWithCells': new VmlPositionXform({tag: 'x:MoveWithCells'}),\n };\n }\n\n get tag() {\n return 'x:ClientData';\n }\n\n render(xmlStream, model) {\n const {protection, editAs} = model.note;\n xmlStream.openNode(this.tag, {ObjectType: 'Note'});\n this.map['x:MoveWithCells'].render(xmlStream, editAs, POSITION_TYPE);\n this.map['x:SizeWithCells'].render(xmlStream, editAs, POSITION_TYPE);\n this.map['x:Anchor'].render(xmlStream, model);\n this.map['x:Locked'].render(xmlStream, protection.locked);\n xmlStream.leafNode('x:AutoFill', null, 'False');\n this.map['x:LockText'].render(xmlStream, protection.lockText);\n xmlStream.leafNode('x:Row', null, model.refAddress.row - 1);\n xmlStream.leafNode('x:Column', null, model.refAddress.col - 1);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n anchor: [],\n protection: {},\n editAs: '',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.normalizeModel();\n return false;\n default:\n return true;\n }\n }\n\n normalizeModel() {\n const position = Object.assign(\n {},\n this.map['x:MoveWithCells'].model,\n this.map['x:SizeWithCells'].model\n );\n const len = Object.keys(position).length;\n this.model.editAs = POSITION_TYPE[len];\n this.model.anchor = this.map['x:Anchor'].text;\n this.model.protection.locked = this.map['x:Locked'].text;\n this.model.protection.lockText = this.map['x:LockText'].text;\n }\n}\n\nmodule.exports = VmlClientDataXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst VmlShapeXform = require('./vml-shape-xform');\n\n// This class is (currently) single purposed to insert the triangle\n// drawing icons on commented cells\nclass VmlNotesXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'v:shape': new VmlShapeXform(),\n };\n }\n\n get tag() {\n return 'xml';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, VmlNotesXform.DRAWING_ATTRIBUTES);\n\n xmlStream.openNode('o:shapelayout', {'v:ext': 'edit'});\n xmlStream.leafNode('o:idmap', {'v:ext': 'edit', data: 1});\n xmlStream.closeNode();\n\n xmlStream.openNode('v:shapetype', {\n id: '_x0000_t202',\n coordsize: '21600,21600',\n 'o:spt': 202,\n path: 'm,l,21600r21600,l21600,xe',\n });\n xmlStream.leafNode('v:stroke', {joinstyle: 'miter'});\n xmlStream.leafNode('v:path', {gradientshapeok: 't', 'o:connecttype': 'rect'});\n xmlStream.closeNode();\n\n model.comments.forEach((item, index) => {\n this.map['v:shape'].render(xmlStream, item, index);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n comments: [],\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.comments.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.anchors.forEach(anchor => {\n if (anchor.br) {\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\n } else {\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\n }\n });\n }\n}\n\nVmlNotesXform.DRAWING_ATTRIBUTES = {\n 'xmlns:v': 'urn:schemas-microsoft-com:vml',\n 'xmlns:o': 'urn:schemas-microsoft-com:office:office',\n 'xmlns:x': 'urn:schemas-microsoft-com:office:excel',\n};\n\nmodule.exports = VmlNotesXform;\n", + "const BaseXform = require('../base-xform');\nconst VmlTextboxXform = require('./vml-textbox-xform');\nconst VmlClientDataXform = require('./vml-client-data-xform');\n\nclass VmlShapeXform extends BaseXform {\n constructor() {\n super();\n this.map = {\n 'v:textbox': new VmlTextboxXform(),\n 'x:ClientData': new VmlClientDataXform(),\n };\n }\n\n get tag() {\n return 'v:shape';\n }\n\n render(xmlStream, model, index) {\n xmlStream.openNode('v:shape', VmlShapeXform.V_SHAPE_ATTRIBUTES(model, index));\n\n xmlStream.leafNode('v:fill', {color2: 'infoBackground [80]'});\n xmlStream.leafNode('v:shadow', {color: 'none [81]', obscured: 't'});\n xmlStream.leafNode('v:path', {'o:connecttype': 'none'});\n this.map['v:textbox'].render(xmlStream, model);\n this.map['x:ClientData'].render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n margins: {\n insetmode: node.attributes['o:insetmode'],\n },\n anchor: '',\n editAs: '',\n protection: {},\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.margins.inset = this.map['v:textbox'].model && this.map['v:textbox'].model.inset;\n this.model.protection =\n this.map['x:ClientData'].model && this.map['x:ClientData'].model.protection;\n this.model.anchor = this.map['x:ClientData'].model && this.map['x:ClientData'].model.anchor;\n this.model.editAs = this.map['x:ClientData'].model && this.map['x:ClientData'].model.editAs;\n return false;\n default:\n return true;\n }\n }\n}\n\nVmlShapeXform.V_SHAPE_ATTRIBUTES = (model, index) => ({\n id: `_x0000_s${1025 + index}`,\n type: '#_x0000_t202',\n style:\n 'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden',\n fillcolor: 'infoBackground [80]',\n strokecolor: 'none [81]',\n 'o:insetmode': model.note.margins && model.note.margins.insetmode,\n});\n\nmodule.exports = VmlShapeXform;\n", + "const BaseXform = require('../base-xform');\n\nclass VmlTextboxXform extends BaseXform {\n get tag() {\n return 'v:textbox';\n }\n\n conversionUnit(value, multiple, unit) {\n return `${parseFloat(value) * multiple.toFixed(2)}${unit}`;\n }\n\n reverseConversionUnit(inset) {\n return (inset || '').split(',').map(margin => {\n return Number(parseFloat(this.conversionUnit(parseFloat(margin), 0.1, '')).toFixed(2));\n });\n }\n\n render(xmlStream, model) {\n const attributes = {\n style: 'mso-direction-alt:auto',\n };\n if (model && model.note) {\n let {inset} = model.note && model.note.margins;\n if (Array.isArray(inset)) {\n inset = inset\n .map(margin => {\n return this.conversionUnit(margin, 10, 'mm');\n })\n .join(',');\n }\n if (inset) {\n attributes.inset = inset;\n }\n }\n xmlStream.openNode('v:textbox', attributes);\n xmlStream.leafNode('div', {style: 'text-align:left'});\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n inset: this.reverseConversionUnit(node.attributes.inset),\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = VmlTextboxXform;\n", + "const BaseXform = require('./base-xform');\n\n/* 'virtual' methods used as a form of documentation */\n/* eslint-disable class-methods-use-this */\n\n// base class for xforms that are composed of other xforms\n// offers some default implementations\nclass CompositeXform extends BaseXform {\n createNewModel(node) {\n return {};\n }\n\n parseOpen(node) {\n // Typical pattern for composite xform\n this.parser = this.parser || this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n if (node.name === this.tag) {\n this.model = this.createNewModel(node);\n return true;\n }\n\n return false;\n }\n\n parseText(text) {\n // Default implementation. Send text to child parser\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n onParserClose(name, parser) {\n // parseClose has seen a child parser close\n // now need to incorporate into this.model somehow\n this.model[name] = parser.model;\n }\n\n parseClose(name) {\n // Default implementation\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.onParserClose(name, this.parser);\n this.parser = undefined;\n }\n return true;\n }\n\n return name !== this.tag;\n }\n}\n\nmodule.exports = CompositeXform;\n", + "const BaseXform = require('../base-xform');\n\nclass AppHeadingPairsXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openNode('HeadingPairs');\n xmlStream.openNode('vt:vector', {size: 2, baseType: 'variant'});\n\n xmlStream.openNode('vt:variant');\n xmlStream.leafNode('vt:lpstr', undefined, 'Worksheets');\n xmlStream.closeNode();\n\n xmlStream.openNode('vt:variant');\n xmlStream.leafNode('vt:i4', undefined, model.length);\n xmlStream.closeNode();\n\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n // no parsing\n return node.name === 'HeadingPairs';\n }\n\n parseText() {}\n\n parseClose(name) {\n return name !== 'HeadingPairs';\n }\n}\n\nmodule.exports = AppHeadingPairsXform;\n", + "const BaseXform = require('../base-xform');\n\nclass AppTitlesOfPartsXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openNode('TitlesOfParts');\n xmlStream.openNode('vt:vector', {size: model.length, baseType: 'lpstr'});\n\n model.forEach(sheet => {\n xmlStream.leafNode('vt:lpstr', undefined, sheet.name);\n });\n\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n // no parsing\n return node.name === 'TitlesOfParts';\n }\n\n parseText() {}\n\n parseClose(name) {\n return name !== 'TitlesOfParts';\n }\n}\n\nmodule.exports = AppTitlesOfPartsXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst StringXform = require('../simple/string-xform');\n\nconst AppHeadingPairsXform = require('./app-heading-pairs-xform');\nconst AppTitleOfPartsXform = require('./app-titles-of-parts-xform');\n\nclass AppXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n Company: new StringXform({tag: 'Company'}),\n Manager: new StringXform({tag: 'Manager'}),\n HeadingPairs: new AppHeadingPairsXform(),\n TitleOfParts: new AppTitleOfPartsXform(),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('Properties', AppXform.PROPERTY_ATTRIBUTES);\n\n xmlStream.leafNode('Application', undefined, 'Microsoft Excel');\n xmlStream.leafNode('DocSecurity', undefined, '0');\n xmlStream.leafNode('ScaleCrop', undefined, 'false');\n\n this.map.HeadingPairs.render(xmlStream, model.worksheets);\n this.map.TitleOfParts.render(xmlStream, model.worksheets);\n this.map.Company.render(xmlStream, model.company || '');\n this.map.Manager.render(xmlStream, model.manager);\n\n xmlStream.leafNode('LinksUpToDate', undefined, 'false');\n xmlStream.leafNode('SharedDoc', undefined, 'false');\n xmlStream.leafNode('HyperlinksChanged', undefined, 'false');\n xmlStream.leafNode('AppVersion', undefined, '16.0300');\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'Properties':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n // there's a lot we don't bother to parse\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'Properties':\n this.model = {\n worksheets: this.map.TitleOfParts.model,\n company: this.map.Company.model,\n manager: this.map.Manager.model,\n };\n return false;\n default:\n return true;\n }\n }\n}\n\nAppXform.DateFormat = function(dt) {\n return dt.toISOString().replace(/[.]\\d{3,6}/, '');\n};\n\nAppXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\n\nAppXform.PROPERTY_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties',\n 'xmlns:vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n};\n\nmodule.exports = AppXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\n\n// used for rendering the [Content_Types].xml file\n// not used for parsing\nclass ContentTypesXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('Types', ContentTypesXform.PROPERTY_ATTRIBUTES);\n\n const mediaHash = {};\n (model.media || []).forEach(medium => {\n if (medium.type === 'image') {\n const imageType = medium.extension;\n if (!mediaHash[imageType]) {\n mediaHash[imageType] = true;\n xmlStream.leafNode('Default', {Extension: imageType, ContentType: `image/${imageType}`});\n }\n }\n });\n\n xmlStream.leafNode('Default', {\n Extension: 'rels',\n ContentType: 'application/vnd.openxmlformats-package.relationships+xml',\n });\n xmlStream.leafNode('Default', {Extension: 'xml', ContentType: 'application/xml'});\n\n xmlStream.leafNode('Override', {\n PartName: '/xl/workbook.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml',\n });\n\n model.worksheets.forEach(worksheet => {\n const name = `/xl/worksheets/sheet${worksheet.id}.xml`;\n xmlStream.leafNode('Override', {\n PartName: name,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml',\n });\n });\n\n xmlStream.leafNode('Override', {\n PartName: '/xl/theme/theme1.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml',\n });\n xmlStream.leafNode('Override', {\n PartName: '/xl/styles.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml',\n });\n\n const hasSharedStrings = model.sharedStrings && model.sharedStrings.count;\n if (hasSharedStrings) {\n xmlStream.leafNode('Override', {\n PartName: '/xl/sharedStrings.xml',\n ContentType:\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml',\n });\n }\n\n if (model.tables) {\n model.tables.forEach(table => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/tables/${table.target}`,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml',\n });\n });\n }\n\n if (model.drawings) {\n model.drawings.forEach(drawing => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/drawings/${drawing.name}.xml`,\n ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml',\n });\n });\n }\n\n if (model.commentRefs) {\n xmlStream.leafNode('Default', {\n Extension: 'vml',\n ContentType: 'application/vnd.openxmlformats-officedocument.vmlDrawing',\n });\n\n model.commentRefs.forEach(({commentName}) => {\n xmlStream.leafNode('Override', {\n PartName: `/xl/${commentName}.xml`,\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml',\n });\n });\n }\n\n xmlStream.leafNode('Override', {\n PartName: '/docProps/core.xml',\n ContentType: 'application/vnd.openxmlformats-package.core-properties+xml',\n });\n xmlStream.leafNode('Override', {\n PartName: '/docProps/app.xml',\n ContentType: 'application/vnd.openxmlformats-officedocument.extended-properties+xml',\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen() {\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nContentTypesXform.PROPERTY_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/package/2006/content-types',\n};\n\nmodule.exports = ContentTypesXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst DateXform = require('../simple/date-xform');\nconst StringXform = require('../simple/string-xform');\nconst IntegerXform = require('../simple/integer-xform');\n\nclass CoreXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'dc:creator': new StringXform({tag: 'dc:creator'}),\n 'dc:title': new StringXform({tag: 'dc:title'}),\n 'dc:subject': new StringXform({tag: 'dc:subject'}),\n 'dc:description': new StringXform({tag: 'dc:description'}),\n 'dc:identifier': new StringXform({tag: 'dc:identifier'}),\n 'dc:language': new StringXform({tag: 'dc:language'}),\n 'cp:keywords': new StringXform({tag: 'cp:keywords'}),\n 'cp:category': new StringXform({tag: 'cp:category'}),\n 'cp:lastModifiedBy': new StringXform({tag: 'cp:lastModifiedBy'}),\n 'cp:lastPrinted': new DateXform({tag: 'cp:lastPrinted', format: CoreXform.DateFormat}),\n 'cp:revision': new IntegerXform({tag: 'cp:revision'}),\n 'cp:version': new StringXform({tag: 'cp:version'}),\n 'cp:contentStatus': new StringXform({tag: 'cp:contentStatus'}),\n 'cp:contentType': new StringXform({tag: 'cp:contentType'}),\n 'dcterms:created': new DateXform({\n tag: 'dcterms:created',\n attrs: CoreXform.DateAttrs,\n format: CoreXform.DateFormat,\n }),\n 'dcterms:modified': new DateXform({\n tag: 'dcterms:modified',\n attrs: CoreXform.DateAttrs,\n format: CoreXform.DateFormat,\n }),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('cp:coreProperties', CoreXform.CORE_PROPERTY_ATTRIBUTES);\n\n this.map['dc:creator'].render(xmlStream, model.creator);\n this.map['dc:title'].render(xmlStream, model.title);\n this.map['dc:subject'].render(xmlStream, model.subject);\n this.map['dc:description'].render(xmlStream, model.description);\n this.map['dc:identifier'].render(xmlStream, model.identifier);\n this.map['dc:language'].render(xmlStream, model.language);\n this.map['cp:keywords'].render(xmlStream, model.keywords);\n this.map['cp:category'].render(xmlStream, model.category);\n this.map['cp:lastModifiedBy'].render(xmlStream, model.lastModifiedBy);\n this.map['cp:lastPrinted'].render(xmlStream, model.lastPrinted);\n this.map['cp:revision'].render(xmlStream, model.revision);\n this.map['cp:version'].render(xmlStream, model.version);\n this.map['cp:contentStatus'].render(xmlStream, model.contentStatus);\n this.map['cp:contentType'].render(xmlStream, model.contentType);\n this.map['dcterms:created'].render(xmlStream, model.created);\n this.map['dcterms:modified'].render(xmlStream, model.modified);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'cp:coreProperties':\n case 'coreProperties':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'cp:coreProperties':\n case 'coreProperties':\n this.model = {\n creator: this.map['dc:creator'].model,\n title: this.map['dc:title'].model,\n subject: this.map['dc:subject'].model,\n description: this.map['dc:description'].model,\n identifier: this.map['dc:identifier'].model,\n language: this.map['dc:language'].model,\n keywords: this.map['cp:keywords'].model,\n category: this.map['cp:category'].model,\n lastModifiedBy: this.map['cp:lastModifiedBy'].model,\n lastPrinted: this.map['cp:lastPrinted'].model,\n revision: this.map['cp:revision'].model,\n contentStatus: this.map['cp:contentStatus'].model,\n contentType: this.map['cp:contentType'].model,\n created: this.map['dcterms:created'].model,\n modified: this.map['dcterms:modified'].model,\n };\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nCoreXform.DateFormat = function(dt) {\n return dt.toISOString().replace(/[.]\\d{3}/, '');\n};\nCoreXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\n\nCoreXform.CORE_PROPERTY_ATTRIBUTES = {\n 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',\n 'xmlns:dcterms': 'http://purl.org/dc/terms/',\n 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/',\n 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n};\n\nmodule.exports = CoreXform;\n", + "const BaseXform = require('../base-xform');\n\nclass RelationshipXform extends BaseXform {\n render(xmlStream, model) {\n xmlStream.leafNode('Relationship', model);\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'Relationship':\n this.model = node.attributes;\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = RelationshipXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\n\nconst RelationshipXform = require('./relationship-xform');\n\nclass RelationshipsXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n Relationship: new RelationshipXform(),\n };\n }\n\n render(xmlStream, model) {\n model = model || this._values;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('Relationships', RelationshipsXform.RELATIONSHIPS_ATTRIBUTES);\n\n model.forEach(relationship => {\n this.map.Relationship.render(xmlStream, relationship);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'Relationships':\n this.model = [];\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'Relationships':\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nRelationshipsXform.RELATIONSHIPS_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships',\n};\n\nmodule.exports = RelationshipsXform;\n", + "const BaseXform = require('../base-xform');\n\nclass BaseCellAnchorXform extends BaseXform {\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n range: {\n editAs: node.attributes.editAs || 'oneCell',\n },\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n reconcilePicture(model, options) {\n if (model && model.rId) {\n const rel = options.rels[model.rId];\n const match = rel.Target.match(/.*\\/media\\/(.+[.][a-zA-Z]{3,4})/);\n if (match) {\n const name = match[1];\n const mediaId = options.mediaIndex[name];\n return options.media[mediaId];\n }\n }\n return undefined;\n }\n}\n\nmodule.exports = BaseCellAnchorXform;\n", + "const BaseXform = require('../base-xform');\nconst BlipXform = require('./blip-xform');\n\nclass BlipFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'a:blip': new BlipXform(),\n };\n }\n\n get tag() {\n return 'xdr:blipFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['a:blip'].render(xmlStream, model);\n\n // TODO: options for this + parsing\n xmlStream.openNode('a:stretch');\n xmlStream.leafNode('a:fillRect');\n xmlStream.closeNode();\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['a:blip'].model;\n return false;\n\n default:\n return true;\n }\n }\n}\n\nmodule.exports = BlipFillXform;\n", + "const BaseXform = require('../base-xform');\n\nclass BlipXform extends BaseXform {\n get tag() {\n return 'a:blip';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'r:embed': model.rId,\n cstate: 'print',\n });\n // TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:embed'],\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = BlipXform;\n", + "const BaseXform = require('../base-xform');\n\nclass CNvPicPrXform extends BaseXform {\n get tag() {\n return 'xdr:cNvPicPr';\n }\n\n render(xmlStream) {\n xmlStream.openNode(this.tag);\n xmlStream.leafNode('a:picLocks', {\n noChangeAspect: '1',\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = CNvPicPrXform;\n", + "const BaseXform = require('../base-xform');\nconst HlickClickXform = require('./hlink-click-xform');\nconst ExtLstXform = require('./ext-lst-xform');\n\nclass CNvPrXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'a:hlinkClick': new HlickClickXform(),\n 'a:extLst': new ExtLstXform(),\n };\n }\n\n get tag() {\n return 'xdr:cNvPr';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n id: model.index,\n name: `Picture ${model.index}`,\n });\n this.map['a:hlinkClick'].render(xmlStream, model);\n this.map['a:extLst'].render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['a:hlinkClick'].model;\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = CNvPrXform;\n", + "const BaseXform = require('../base-xform');\nconst IntegerXform = require('../simple/integer-xform');\n\nclass CellPositionXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.map = {\n 'xdr:col': new IntegerXform({tag: 'xdr:col', zero: true}),\n 'xdr:colOff': new IntegerXform({tag: 'xdr:colOff', zero: true}),\n 'xdr:row': new IntegerXform({tag: 'xdr:row', zero: true}),\n 'xdr:rowOff': new IntegerXform({tag: 'xdr:rowOff', zero: true}),\n };\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['xdr:col'].render(xmlStream, model.nativeCol);\n this.map['xdr:colOff'].render(xmlStream, model.nativeColOff);\n\n this.map['xdr:row'].render(xmlStream, model.nativeRow);\n this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = {\n nativeCol: this.map['xdr:col'].model,\n nativeColOff: this.map['xdr:colOff'].model,\n nativeRow: this.map['xdr:row'].model,\n nativeRowOff: this.map['xdr:rowOff'].model,\n };\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n}\n\nmodule.exports = CellPositionXform;\n", + "const colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst TwoCellAnchorXform = require('./two-cell-anchor-xform');\nconst OneCellAnchorXform = require('./one-cell-anchor-xform');\n\nfunction getAnchorType(model) {\n const range = typeof model.range === 'string' ? colCache.decode(model.range) : model.range;\n\n return range.br ? 'xdr:twoCellAnchor' : 'xdr:oneCellAnchor';\n}\n\nclass DrawingXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:twoCellAnchor': new TwoCellAnchorXform(),\n 'xdr:oneCellAnchor': new OneCellAnchorXform(),\n };\n }\n\n prepare(model) {\n model.anchors.forEach((item, index) => {\n item.anchorType = getAnchorType(item);\n const anchor = this.map[item.anchorType];\n anchor.prepare(item, {index});\n });\n }\n\n get tag() {\n return 'xdr:wsDr';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, DrawingXform.DRAWING_ATTRIBUTES);\n\n model.anchors.forEach(item => {\n const anchor = this.map[item.anchorType];\n anchor.render(xmlStream, item);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n this.model = {\n anchors: [],\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.anchors.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.anchors.forEach(anchor => {\n if (anchor.br) {\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\n } else {\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\n }\n });\n }\n}\n\nDrawingXform.DRAWING_ATTRIBUTES = {\n 'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing',\n 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\n};\n\nmodule.exports = DrawingXform;\n", + "const BaseXform = require('../base-xform');\n\nclass ExtLstXform extends BaseXform {\n get tag() {\n return 'a:extLst';\n }\n\n render(xmlStream) {\n xmlStream.openNode(this.tag);\n xmlStream.openNode('a:ext', {\n uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}',\n });\n xmlStream.leafNode('a16:creationId', {\n 'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main',\n id: '{00000000-0008-0000-0000-000002000000}',\n });\n xmlStream.closeNode();\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this.tag:\n return false;\n default:\n // unprocessed internal nodes\n return true;\n }\n }\n}\n\nmodule.exports = ExtLstXform;\n", + "const BaseXform = require('../base-xform');\n\n/** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */\nconst EMU_PER_PIXEL_AT_96_DPI = 9525;\n\nclass ExtXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.map = {};\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n const width = Math.floor(model.width * EMU_PER_PIXEL_AT_96_DPI);\n const height = Math.floor(model.height * EMU_PER_PIXEL_AT_96_DPI);\n\n xmlStream.addAttribute('cx', width);\n xmlStream.addAttribute('cy', height);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n width: parseInt(node.attributes.cx || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\n height: parseInt(node.attributes.cy || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\n };\n return true;\n }\n return false;\n }\n\n parseText(/* text */) {}\n\n parseClose(/* name */) {\n return false;\n }\n}\n\nmodule.exports = ExtXform;\n", + "const BaseXform = require('../base-xform');\n\nclass HLinkClickXform extends BaseXform {\n get tag() {\n return 'a:hlinkClick';\n }\n\n render(xmlStream, model) {\n if (!(model.hyperlinks && model.hyperlinks.rId)) {\n return;\n }\n xmlStream.leafNode(this.tag, {\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'r:id': model.hyperlinks.rId,\n tooltip: model.hyperlinks.tooltip,\n });\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n hyperlinks: {\n rId: node.attributes['r:id'],\n tooltip: node.attributes.tooltip,\n },\n };\n return true;\n default:\n return true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = HLinkClickXform;\n", + "const BaseXform = require('../base-xform');\nconst CNvPrXform = require('./c-nv-pr-xform');\nconst CNvPicPrXform = require('./c-nv-pic-pr-xform');\n\nclass NvPicPrXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:cNvPr': new CNvPrXform(),\n 'xdr:cNvPicPr': new CNvPicPrXform(),\n };\n }\n\n get tag() {\n return 'xdr:nvPicPr';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n this.map['xdr:cNvPr'].render(xmlStream, model);\n this.map['xdr:cNvPicPr'].render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model = this.map['xdr:cNvPr'].model;\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = NvPicPrXform;\n", + "const BaseCellAnchorXform = require('./base-cell-anchor-xform');\nconst StaticXform = require('../static-xform');\n\nconst CellPositionXform = require('./cell-position-xform');\nconst ExtXform = require('./ext-xform');\nconst PicXform = require('./pic-xform');\n\nclass OneCellAnchorXform extends BaseCellAnchorXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\n 'xdr:ext': new ExtXform({tag: 'xdr:ext'}),\n 'xdr:pic': new PicXform(),\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\n };\n }\n\n get tag() {\n return 'xdr:oneCellAnchor';\n }\n\n prepare(model, options) {\n this.map['xdr:pic'].prepare(model.picture, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\n\n this.map['xdr:from'].render(xmlStream, model.range.tl);\n this.map['xdr:ext'].render(xmlStream, model.range.ext);\n this.map['xdr:pic'].render(xmlStream, model.picture);\n this.map['xdr:clientData'].render(xmlStream, {});\n\n xmlStream.closeNode();\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.range.tl = this.map['xdr:from'].model;\n this.model.range.ext = this.map['xdr:ext'].model;\n this.model.picture = this.map['xdr:pic'].model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.medium = this.reconcilePicture(model.picture, options);\n }\n}\n\nmodule.exports = OneCellAnchorXform;\n", + "const BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\n\nconst BlipFillXform = require('./blip-fill-xform');\nconst NvPicPrXform = require('./nv-pic-pr-xform');\n\nconst spPrJSON = require('./sp-pr');\n\nclass PicXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:nvPicPr': new NvPicPrXform(),\n 'xdr:blipFill': new BlipFillXform(),\n 'xdr:spPr': new StaticXform(spPrJSON),\n };\n }\n\n get tag() {\n return 'xdr:pic';\n }\n\n prepare(model, options) {\n model.index = options.index + 1;\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n this.map['xdr:nvPicPr'].render(xmlStream, model);\n this.map['xdr:blipFill'].render(xmlStream, model);\n this.map['xdr:spPr'].render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.reset();\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.mergeModel(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n}\n\nmodule.exports = PicXform;\n", + "module.exports = {\n tag: 'xdr:spPr',\n c: [\n {\n tag: 'a:xfrm',\n c: [\n {tag: 'a:off', $: {x: '0', y: '0'}},\n {tag: 'a:ext', $: {cx: '0', cy: '0'}},\n ],\n },\n {\n tag: 'a:prstGeom',\n $: {prst: 'rect'},\n c: [{tag: 'a:avLst'}],\n },\n ],\n};\n", + "const BaseCellAnchorXform = require('./base-cell-anchor-xform');\nconst StaticXform = require('../static-xform');\n\nconst CellPositionXform = require('./cell-position-xform');\nconst PicXform = require('./pic-xform');\n\nclass TwoCellAnchorXform extends BaseCellAnchorXform {\n constructor() {\n super();\n\n this.map = {\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\n 'xdr:to': new CellPositionXform({tag: 'xdr:to'}),\n 'xdr:pic': new PicXform(),\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\n };\n }\n\n get tag() {\n return 'xdr:twoCellAnchor';\n }\n\n prepare(model, options) {\n this.map['xdr:pic'].prepare(model.picture, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\n\n this.map['xdr:from'].render(xmlStream, model.range.tl);\n this.map['xdr:to'].render(xmlStream, model.range.br);\n this.map['xdr:pic'].render(xmlStream, model.picture);\n this.map['xdr:clientData'].render(xmlStream, {});\n\n xmlStream.closeNode();\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.range.tl = this.map['xdr:from'].model;\n this.model.range.br = this.map['xdr:to'].model;\n this.model.picture = this.map['xdr:pic'].model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n model.medium = this.reconcilePicture(model.picture, options);\n }\n}\n\nmodule.exports = TwoCellAnchorXform;\n", + "const BaseXform = require('./base-xform');\n\nclass ListXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.always = !!options.always;\n this.count = options.count;\n this.empty = options.empty;\n this.$count = options.$count || 'count';\n this.$ = options.$;\n this.childXform = options.childXform;\n this.maxItems = options.maxItems;\n }\n\n prepare(model, options) {\n const {childXform} = this;\n if (model) {\n model.forEach((childModel, index) => {\n options.index = index;\n childXform.prepare(childModel, options);\n });\n }\n }\n\n render(xmlStream, model) {\n if (this.always || (model && model.length)) {\n xmlStream.openNode(this.tag, this.$);\n if (this.count) {\n xmlStream.addAttribute(this.$count, (model && model.length) || 0);\n }\n\n const {childXform} = this;\n (model || []).forEach((childModel, index) => {\n childXform.render(xmlStream, childModel, index);\n });\n\n xmlStream.closeNode();\n } else if (this.empty) {\n xmlStream.leafNode(this.tag);\n }\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.model = [];\n return true;\n default:\n if (this.childXform.parseOpen(node)) {\n this.parser = this.childXform;\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n\n if (this.maxItems && this.model.length > this.maxItems) {\n throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);\n }\n }\n return true;\n }\n\n return false;\n }\n\n reconcile(model, options) {\n if (model) {\n const {childXform} = this;\n model.forEach(childModel => {\n childXform.reconcile(childModel, options);\n });\n }\n }\n}\n\nmodule.exports = ListXform;\n", + "const colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\n\nclass AutoFilterXform extends BaseXform {\n get tag() {\n return 'autoFilter';\n }\n\n render(xmlStream, model) {\n if (model) {\n if (typeof model === 'string') {\n // assume range\n xmlStream.leafNode('autoFilter', {ref: model});\n } else {\n const getAddress = function(addr) {\n if (typeof addr === 'string') {\n return addr;\n }\n return colCache.getAddress(addr.row, addr.column).address;\n };\n\n const firstAddress = getAddress(model.from);\n const secondAddress = getAddress(model.to);\n if (firstAddress && secondAddress) {\n xmlStream.leafNode('autoFilter', {ref: `${firstAddress}:${secondAddress}`});\n }\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'autoFilter') {\n this.model = node.attributes.ref;\n }\n }\n}\n\nmodule.exports = AutoFilterXform;\n", + "const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\nconst Enums = require('../../../doc/enums');\n\nconst RichTextXform = require('../strings/rich-text-xform');\n\nfunction getValueType(v) {\n if (v === null || v === undefined) {\n return Enums.ValueType.Null;\n }\n if (v instanceof String || typeof v === 'string') {\n return Enums.ValueType.String;\n }\n if (typeof v === 'number') {\n return Enums.ValueType.Number;\n }\n if (typeof v === 'boolean') {\n return Enums.ValueType.Boolean;\n }\n if (v instanceof Date) {\n return Enums.ValueType.Date;\n }\n if (v.text && v.hyperlink) {\n return Enums.ValueType.Hyperlink;\n }\n if (v.formula) {\n return Enums.ValueType.Formula;\n }\n if (v.error) {\n return Enums.ValueType.Error;\n }\n throw new Error('I could not understand type of value');\n}\n\nfunction getEffectiveCellType(cell) {\n switch (cell.type) {\n case Enums.ValueType.Formula:\n return getValueType(cell.result);\n default:\n return cell.type;\n }\n}\n\nclass CellXform extends BaseXform {\n constructor() {\n super();\n\n this.richTextXForm = new RichTextXform();\n }\n\n get tag() {\n return 'c';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style || {}, getEffectiveCellType(model));\n if (styleId) {\n model.styleId = styleId;\n }\n\n if (model.comment) {\n options.comments.push({...model.comment, ref: model.address});\n }\n\n switch (model.type) {\n case Enums.ValueType.String:\n case Enums.ValueType.RichText:\n if (options.sharedStrings) {\n model.ssId = options.sharedStrings.add(model.value);\n }\n break;\n\n case Enums.ValueType.Date:\n if (options.date1904) {\n model.date1904 = true;\n }\n break;\n\n case Enums.ValueType.Hyperlink:\n if (options.sharedStrings && model.text !== undefined && model.text !== null) {\n model.ssId = options.sharedStrings.add(model.text);\n }\n options.hyperlinks.push({\n address: model.address,\n target: model.hyperlink,\n tooltip: model.tooltip,\n });\n break;\n\n case Enums.ValueType.Merge:\n options.merges.add(model);\n break;\n\n case Enums.ValueType.Formula:\n if (options.date1904) {\n // in case valueType is date\n model.date1904 = true;\n }\n\n if (model.shareType === 'shared') {\n model.si = options.siFormulae++;\n }\n\n if (model.formula) {\n options.formulae[model.address] = model;\n } else if (model.sharedFormula) {\n const master = options.formulae[model.sharedFormula];\n if (!master) {\n throw new Error(\n `Shared Formula master must exist above and or left of clone for cell ${model.address}`\n );\n }\n if (master.si === undefined) {\n master.shareType = 'shared';\n master.si = options.siFormulae++;\n master.range = new Range(master.address, model.address);\n } else if (master.range) {\n master.range.expandToAddress(model.address);\n }\n model.si = master.si;\n }\n break;\n\n default:\n break;\n }\n }\n\n renderFormula(xmlStream, model) {\n let attrs = null;\n switch (model.shareType) {\n case 'shared':\n attrs = {\n t: 'shared',\n ref: model.ref || model.range.range,\n si: model.si,\n };\n break;\n\n case 'array':\n attrs = {\n t: 'array',\n ref: model.ref,\n };\n break;\n\n default:\n if (model.si !== undefined) {\n attrs = {\n t: 'shared',\n si: model.si,\n };\n }\n break;\n }\n\n switch (getValueType(model.result)) {\n case Enums.ValueType.Null: // ?\n xmlStream.leafNode('f', attrs, model.formula);\n break;\n\n case Enums.ValueType.String:\n // oddly, formula results don't ever use shared strings\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result);\n break;\n\n case Enums.ValueType.Number:\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result);\n break;\n\n case Enums.ValueType.Boolean:\n xmlStream.addAttribute('t', 'b');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result ? 1 : 0);\n break;\n\n case Enums.ValueType.Error:\n xmlStream.addAttribute('t', 'e');\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, model.result.error);\n break;\n\n case Enums.ValueType.Date:\n xmlStream.leafNode('f', attrs, model.formula);\n xmlStream.leafNode('v', null, utils.dateToExcel(model.result, model.date1904));\n break;\n\n // case Enums.ValueType.Hyperlink: // ??\n // case Enums.ValueType.Formula:\n default:\n throw new Error('I could not understand type of value');\n }\n }\n\n render(xmlStream, model) {\n if (model.type === Enums.ValueType.Null && !model.styleId) {\n // if null and no style, exit\n return;\n }\n\n xmlStream.openNode('c');\n xmlStream.addAttribute('r', model.address);\n\n if (model.styleId) {\n xmlStream.addAttribute('s', model.styleId);\n }\n\n switch (model.type) {\n case Enums.ValueType.Null:\n break;\n\n case Enums.ValueType.Number:\n xmlStream.leafNode('v', null, model.value);\n break;\n\n case Enums.ValueType.Boolean:\n xmlStream.addAttribute('t', 'b');\n xmlStream.leafNode('v', null, model.value ? '1' : '0');\n break;\n\n case Enums.ValueType.Error:\n xmlStream.addAttribute('t', 'e');\n xmlStream.leafNode('v', null, model.value.error);\n break;\n\n case Enums.ValueType.String:\n case Enums.ValueType.RichText:\n if (model.ssId !== undefined) {\n xmlStream.addAttribute('t', 's');\n xmlStream.leafNode('v', null, model.ssId);\n } else if (model.value && model.value.richText) {\n xmlStream.addAttribute('t', 'inlineStr');\n xmlStream.openNode('is');\n model.value.richText.forEach(text => {\n this.richTextXForm.render(xmlStream, text);\n });\n xmlStream.closeNode('is');\n } else {\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('v', null, model.value);\n }\n break;\n\n case Enums.ValueType.Date:\n xmlStream.leafNode('v', null, utils.dateToExcel(model.value, model.date1904));\n break;\n\n case Enums.ValueType.Hyperlink:\n if (model.ssId !== undefined) {\n xmlStream.addAttribute('t', 's');\n xmlStream.leafNode('v', null, model.ssId);\n } else {\n xmlStream.addAttribute('t', 'str');\n xmlStream.leafNode('v', null, model.text);\n }\n break;\n\n case Enums.ValueType.Formula:\n this.renderFormula(xmlStream, model);\n break;\n\n case Enums.ValueType.Merge:\n // nothing to add\n break;\n\n default:\n break;\n }\n\n xmlStream.closeNode(); // \n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'c':\n // const address = colCache.decodeAddress(node.attributes.r);\n this.model = {\n address: node.attributes.r,\n };\n this.t = node.attributes.t;\n if (node.attributes.s) {\n this.model.styleId = parseInt(node.attributes.s, 10);\n }\n return true;\n\n case 'f':\n this.currentNode = 'f';\n this.model.si = node.attributes.si;\n this.model.shareType = node.attributes.t;\n this.model.ref = node.attributes.ref;\n return true;\n\n case 'v':\n this.currentNode = 'v';\n return true;\n\n case 't':\n this.currentNode = 't';\n return true;\n\n case 'r':\n this.parser = this.richTextXForm;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n return;\n }\n switch (this.currentNode) {\n case 'f':\n this.model.formula = this.model.formula ? this.model.formula + text : text;\n break;\n case 'v':\n case 't':\n if (this.model.value && this.model.value.richText) {\n this.model.value.richText.text = this.model.value.richText.text\n ? this.model.value.richText.text + text\n : text;\n } else {\n this.model.value = this.model.value ? this.model.value + text : text;\n }\n break;\n default:\n break;\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'c': {\n const {model} = this;\n\n // first guess on cell type\n if (model.formula || model.shareType) {\n model.type = Enums.ValueType.Formula;\n if (model.value) {\n if (this.t === 'str') {\n model.result = utils.xmlDecode(model.value);\n } else if (this.t === 'b') {\n model.result = parseInt(model.value, 10) !== 0;\n } else if (this.t === 'e') {\n model.result = {error: model.value};\n } else {\n model.result = parseFloat(model.value);\n }\n model.value = undefined;\n }\n } else if (model.value !== undefined) {\n switch (this.t) {\n case 's':\n model.type = Enums.ValueType.String;\n model.value = parseInt(model.value, 10);\n break;\n case 'str':\n model.type = Enums.ValueType.String;\n model.value = utils.xmlDecode(model.value);\n break;\n case 'inlineStr':\n model.type = Enums.ValueType.String;\n break;\n case 'b':\n model.type = Enums.ValueType.Boolean;\n model.value = parseInt(model.value, 10) !== 0;\n break;\n case 'e':\n model.type = Enums.ValueType.Error;\n model.value = {error: model.value};\n break;\n default:\n model.type = Enums.ValueType.Number;\n model.value = parseFloat(model.value);\n break;\n }\n } else if (model.styleId) {\n model.type = Enums.ValueType.Null;\n } else {\n model.type = Enums.ValueType.Merge;\n }\n return false;\n }\n\n case 'f':\n case 'v':\n case 'is':\n this.currentNode = undefined;\n return true;\n\n case 't':\n if (this.parser) {\n this.parser.parseClose(name);\n return true;\n }\n this.currentNode = undefined;\n return true;\n\n case 'r':\n this.model.value = this.model.value || {};\n this.model.value.richText = this.model.value.richText || [];\n this.model.value.richText.push(this.parser.model);\n this.parser = undefined;\n this.currentNode = undefined;\n return true;\n\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n return true;\n }\n return false;\n }\n }\n\n reconcile(model, options) {\n const style = model.styleId && options.styles && options.styles.getStyleModel(model.styleId);\n if (style) {\n model.style = style;\n }\n if (model.styleId !== undefined) {\n model.styleId = undefined;\n }\n\n switch (model.type) {\n case Enums.ValueType.String:\n if (typeof model.value === 'number') {\n if (options.sharedStrings) {\n model.value = options.sharedStrings.getString(model.value);\n }\n }\n if (model.value.richText) {\n model.type = Enums.ValueType.RichText;\n }\n break;\n\n case Enums.ValueType.Number:\n if (style && utils.isDateFmt(style.numFmt)) {\n model.type = Enums.ValueType.Date;\n model.value = utils.excelToDate(model.value, options.date1904);\n }\n break;\n\n case Enums.ValueType.Formula:\n if (model.result !== undefined && style && utils.isDateFmt(style.numFmt)) {\n model.result = utils.excelToDate(model.result, options.date1904);\n }\n if (model.shareType === 'shared') {\n if (model.ref) {\n // master\n options.formulae[model.si] = model.address;\n } else {\n // slave\n model.sharedFormula = options.formulae[model.si];\n delete model.shareType;\n }\n delete model.si;\n }\n break;\n\n default:\n break;\n }\n\n // look for hyperlink\n const hyperlink = options.hyperlinkMap[model.address];\n if (hyperlink) {\n if (model.type === Enums.ValueType.Formula) {\n model.text = model.result;\n model.result = undefined;\n } else {\n model.text = model.value;\n model.value = undefined;\n }\n model.type = Enums.ValueType.Hyperlink;\n model.hyperlink = hyperlink;\n }\n\n const comment = options.commentsMap && options.commentsMap[model.address];\n if (comment) {\n model.comment = comment;\n }\n }\n}\n\nmodule.exports = CellXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass CfIconExtXform extends BaseXform {\n get tag() {\n return 'x14:cfIcon';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n iconSet: model.iconSet,\n iconId: model.iconId,\n });\n }\n\n parseOpen({attributes}) {\n this.model = {\n iconSet: attributes.iconSet,\n iconId: BaseXform.toIntValue(attributes.iconId),\n };\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = CfIconExtXform;\n", + "const {v4: uuidv4} = require('uuid');\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst DatabarExtXform = require('./databar-ext-xform');\nconst IconSetExtXform = require('./icon-set-ext-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nclass CfRuleExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:dataBar': (this.databarXform = new DatabarExtXform()),\n 'x14:iconSet': (this.iconSetXform = new IconSetExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfRule';\n }\n\n static isExt(rule) {\n // is this rule primitive?\n if (rule.type === 'dataBar') {\n return DatabarExtXform.isExt(rule);\n }\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return true;\n }\n }\n return false;\n }\n\n prepare(model) {\n if (CfRuleExtXform.isExt(model)) {\n model.x14Id = `{${uuidv4()}}`.toUpperCase();\n }\n }\n\n render(xmlStream, model) {\n if (!CfRuleExtXform.isExt(model)) {\n return;\n }\n\n switch (model.type) {\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n }\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n id: model.x14Id,\n });\n\n this.databarXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n id: model.x14Id || `{${uuidv4()}}`,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n type: attributes.type,\n x14Id: attributes.id,\n priority: BaseXform.toIntValue(attributes.priority),\n };\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = CfRuleExtXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst FExtXform = require('./f-ext-xform');\n\nclass CfvoExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'xm:f': (this.fExtXform = new FExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfvo';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.type,\n });\n if (model.value !== undefined) {\n this.fExtXform.render(xmlStream, model.value);\n }\n xmlStream.closeNode();\n }\n\n createNewModel(node) {\n return {\n type: node.attributes.type,\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'xm:f':\n this.model.value = parser.model ? parseFloat(parser.model) : 0;\n break;\n }\n }\n}\n\nmodule.exports = CfvoExtXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst SqRefExtXform = require('./sqref-ext-xform');\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\n\nclass ConditionalFormattingExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'xm:sqref': (this.sqRef = new SqRefExtXform()),\n 'x14:cfRule': (this.cfRule = new CfRuleExtXform()),\n };\n }\n\n get tag() {\n return 'x14:conditionalFormatting';\n }\n\n prepare(model, options) {\n model.rules.forEach(rule => {\n this.cfRule.prepare(rule, options);\n });\n }\n\n render(xmlStream, model) {\n if (!model.rules.some(CfRuleExtXform.isExt)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n 'xmlns:xm': 'http://schemas.microsoft.com/office/excel/2006/main',\n });\n\n model.rules.filter(CfRuleExtXform.isExt).forEach(rule => this.cfRule.render(xmlStream, rule));\n\n // for some odd reason, Excel needs the node to be after the rules\n this.sqRef.render(xmlStream, model.ref);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {\n rules: [],\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'xm:sqref':\n this.model.ref = parser.model;\n break;\n\n case 'x14:cfRule':\n this.model.rules.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = ConditionalFormattingExtXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\nconst ConditionalFormattingExtXform = require('./conditional-formatting-ext-xform');\n\nclass ConditionalFormattingsExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:conditionalFormatting': (this.cfXform = new ConditionalFormattingExtXform()),\n };\n }\n\n get tag() {\n return 'x14:conditionalFormattings';\n }\n\n hasContent(model) {\n if (model.hasExtContent === undefined) {\n model.hasExtContent = model.some(cf => cf.rules.some(CfRuleExtXform.isExt));\n }\n return model.hasExtContent;\n }\n\n prepare(model, options) {\n model.forEach(cf => {\n this.cfXform.prepare(cf, options);\n });\n }\n\n render(xmlStream, model) {\n if (this.hasContent(model)) {\n xmlStream.openNode(this.tag);\n model.forEach(cf => this.cfXform.render(xmlStream, cf));\n xmlStream.closeNode();\n }\n }\n\n createNewModel() {\n return [];\n }\n\n onParserClose(name, parser) {\n // model is array of conditional formatting objects\n this.model.push(parser.model);\n }\n}\n\nmodule.exports = ConditionalFormattingsExtXform;\n", + "const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoExtXform = require('./cfvo-ext-xform');\n\nclass DatabarExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\n 'x14:borderColor': (this.borderColorXform = new ColorXform('x14:borderColor')),\n 'x14:negativeBorderColor': (this.negativeBorderColorXform = new ColorXform(\n 'x14:negativeBorderColor'\n )),\n 'x14:negativeFillColor': (this.negativeFillColorXform = new ColorXform(\n 'x14:negativeFillColor'\n )),\n 'x14:axisColor': (this.axisColorXform = new ColorXform('x14:axisColor')),\n };\n }\n\n static isExt(rule) {\n // not all databars need ext\n // TODO: refine this\n return !rule.gradient;\n }\n\n get tag() {\n return 'x14:dataBar';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n minLength: BaseXform.toIntAttribute(model.minLength, 0, true),\n maxLength: BaseXform.toIntAttribute(model.maxLength, 100, true),\n border: BaseXform.toBoolAttribute(model.border, false),\n gradient: BaseXform.toBoolAttribute(model.gradient, true),\n negativeBarColorSameAsPositive: BaseXform.toBoolAttribute(\n model.negativeBarColorSameAsPositive,\n true\n ),\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolAttribute(\n model.negativeBarBorderColorSameAsPositive,\n true\n ),\n axisPosition: BaseXform.toAttribute(model.axisPosition, 'auto'),\n direction: BaseXform.toAttribute(model.direction, 'leftToRight'),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n this.borderColorXform.render(xmlStream, model.borderColor);\n this.negativeBorderColorXform.render(xmlStream, model.negativeBorderColor);\n this.negativeFillColorXform.render(xmlStream, model.negativeFillColor);\n this.axisColorXform.render(xmlStream, model.axisColor);\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n cfvo: [],\n minLength: BaseXform.toIntValue(attributes.minLength, 0),\n maxLength: BaseXform.toIntValue(attributes.maxLength, 100),\n border: BaseXform.toBoolValue(attributes.border, false),\n gradient: BaseXform.toBoolValue(attributes.gradient, true),\n negativeBarColorSameAsPositive: BaseXform.toBoolValue(\n attributes.negativeBarColorSameAsPositive,\n true\n ),\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolValue(\n attributes.negativeBarBorderColorSameAsPositive,\n true\n ),\n axisPosition: BaseXform.toStringValue(attributes.axisPosition, 'auto'),\n direction: BaseXform.toStringValue(attributes.direction, 'leftToRight'),\n };\n }\n\n onParserClose(name, parser) {\n const [, prop] = name.split(':');\n switch (prop) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n\n default:\n this.model[prop] = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = DatabarExtXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass FExtXform extends BaseXform {\n get tag() {\n return 'xm:f';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = FExtXform;\n", + "const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst CfvoExtXform = require('./cfvo-ext-xform');\nconst CfIconExtXform = require('./cf-icon-ext-xform');\n\nclass IconSetExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\n 'x14:cfIcon': (this.cfIconXform = new CfIconExtXform()),\n };\n }\n\n get tag() {\n return 'x14:iconSet';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n iconSet: BaseXform.toStringAttribute(model.iconSet),\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\n custom: BaseXform.toBoolAttribute(model.icons, false),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n if (model.icons) {\n model.icons.forEach((icon, i) => {\n icon.iconId = i;\n this.cfIconXform.render(xmlStream, icon);\n });\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n cfvo: [],\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolValue(attributes.reverse, false),\n showValue: BaseXform.toBoolValue(attributes.showValue, true),\n };\n }\n\n onParserClose(name, parser) {\n const [, prop] = name.split(':');\n switch (prop) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n\n case 'cfIcon':\n if (!this.model.icons) {\n this.model.icons = [];\n }\n this.model.icons.push(parser.model);\n break;\n\n default:\n this.model[prop] = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = IconSetExtXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass SqrefExtXform extends BaseXform {\n get tag() {\n return 'xm:sqref';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = SqrefExtXform;\n", + "const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst Range = require('../../../../doc/range');\n\nconst DatabarXform = require('./databar-xform');\nconst ExtLstRefXform = require('./ext-lst-ref-xform');\nconst FormulaXform = require('./formula-xform');\nconst ColorScaleXform = require('./color-scale-xform');\nconst IconSetXform = require('./icon-set-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nconst getTextFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.operator) {\n case 'containsText':\n return `NOT(ISERROR(SEARCH(\"${model.text}\",${tl})))`;\n case 'containsBlanks':\n return `LEN(TRIM(${tl}))=0`;\n case 'notContainsBlanks':\n return `LEN(TRIM(${tl}))>0`;\n case 'containsErrors':\n return `ISERROR(${tl})`;\n case 'notContainsErrors':\n return `NOT(ISERROR(${tl}))`;\n default:\n return undefined;\n }\n};\n\nconst getTimePeriodFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.timePeriod) {\n case 'thisWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`;\n case 'lastWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`;\n case 'nextWeek':\n return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`;\n case 'yesterday':\n return `FLOOR(${tl},1)=TODAY()-1`;\n case 'today':\n return `FLOOR(${tl},1)=TODAY()`;\n case 'tomorrow':\n return `FLOOR(${tl},1)=TODAY()+1`;\n case 'last7Days':\n return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`;\n case 'lastMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`;\n case 'thisMonth':\n return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`;\n case 'nextMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`;\n default:\n return undefined;\n }\n};\n\nconst opType = attributes => {\n const {type, operator} = attributes;\n switch (type) {\n case 'containsText':\n case 'containsBlanks':\n case 'notContainsBlanks':\n case 'containsErrors':\n case 'notContainsErrors':\n return {\n type: 'containsText',\n operator: type,\n };\n\n default:\n return {type, operator};\n }\n};\n\nclass CfRuleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n dataBar: (this.databarXform = new DatabarXform()),\n extLst: (this.extLstRefXform = new ExtLstRefXform()),\n formula: (this.formulaXform = new FormulaXform()),\n colorScale: (this.colorScaleXform = new ColorScaleXform()),\n iconSet: (this.iconSetXform = new IconSetXform()),\n };\n }\n\n get tag() {\n return 'cfRule';\n }\n\n static isPrimitive(rule) {\n // is this rule primitive?\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return false;\n }\n }\n return true;\n }\n\n render(xmlStream, model) {\n switch (model.type) {\n case 'expression':\n this.renderExpression(xmlStream, model);\n break;\n case 'cellIs':\n this.renderCellIs(xmlStream, model);\n break;\n case 'top10':\n this.renderTop10(xmlStream, model);\n break;\n case 'aboveAverage':\n this.renderAboveAverage(xmlStream, model);\n break;\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'colorScale':\n this.renderColorScale(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n case 'containsText':\n this.renderText(xmlStream, model);\n break;\n case 'timePeriod':\n this.renderTimePeriod(xmlStream, model);\n break;\n }\n }\n\n renderExpression(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'expression',\n dxfId: model.dxfId,\n priority: model.priority,\n });\n\n this.formulaXform.render(xmlStream, model.formulae[0]);\n\n xmlStream.closeNode();\n }\n\n renderCellIs(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'cellIs',\n dxfId: model.dxfId,\n priority: model.priority,\n operator: model.operator,\n });\n\n model.formulae.forEach(formula => {\n this.formulaXform.render(xmlStream, formula);\n });\n\n xmlStream.closeNode();\n }\n\n renderTop10(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'top10',\n dxfId: model.dxfId,\n priority: model.priority,\n percent: BaseXform.toBoolAttribute(model.percent, false),\n bottom: BaseXform.toBoolAttribute(model.bottom, false),\n rank: BaseXform.toIntValue(model.rank, 10, true),\n });\n }\n\n renderAboveAverage(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'aboveAverage',\n dxfId: model.dxfId,\n priority: model.priority,\n aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true),\n });\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n priority: model.priority,\n });\n\n this.databarXform.render(xmlStream, model);\n this.extLstRefXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderColorScale(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'colorScale',\n priority: model.priority,\n });\n\n this.colorScaleXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n // iconset is all primitive or all extLst\n if (!CfRuleXform.isPrimitive(model)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderText(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.operator,\n dxfId: model.dxfId,\n priority: model.priority,\n operator: BaseXform.toStringAttribute(model.operator, 'containsText'),\n });\n\n const formula = getTextFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n renderTimePeriod(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'timePeriod',\n dxfId: model.dxfId,\n priority: model.priority,\n timePeriod: model.timePeriod,\n });\n\n const formula = getTimePeriodFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ...opType(attributes),\n dxfId: BaseXform.toIntValue(attributes.dxfId),\n priority: BaseXform.toIntValue(attributes.priority),\n timePeriod: attributes.timePeriod,\n percent: BaseXform.toBoolValue(attributes.percent),\n bottom: BaseXform.toBoolValue(attributes.bottom),\n rank: BaseXform.toIntValue(attributes.rank),\n aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage),\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'dataBar':\n case 'extLst':\n case 'colorScale':\n case 'iconSet':\n // merge parser model with ours\n Object.assign(this.model, parser.model);\n break;\n\n case 'formula':\n // except - formula is a string and appends to formulae\n this.model.formulae = this.model.formulae || [];\n this.model.formulae.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = CfRuleXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass CfvoXform extends BaseXform {\n get tag() {\n return 'cfvo';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: model.type,\n val: model.value,\n });\n }\n\n parseOpen(node) {\n this.model = {\n type: node.attributes.type,\n value: BaseXform.toFloatValue(node.attributes.val),\n };\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = CfvoXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoXform = require('./cfvo-xform');\n\nclass ColorScaleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n color: (this.colorXform = new ColorXform()),\n };\n }\n\n get tag() {\n return 'colorScale';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n model.color.forEach(color => {\n this.colorXform.render(xmlStream, color);\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel(node) {\n return {\n cfvo: [],\n color: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model[name].push(parser.model);\n }\n}\n\nmodule.exports = ColorScaleXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst CfRuleXform = require('./cf-rule-xform');\n\nclass ConditionalFormattingXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfRule: new CfRuleXform(),\n };\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n render(xmlStream, model) {\n // if there are no primitive rules, exit now\n if (!model.rules.some(CfRuleXform.isPrimitive)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {sqref: model.ref});\n\n model.rules.forEach(rule => {\n if (CfRuleXform.isPrimitive(rule)) {\n rule.ref = model.ref;\n this.map.cfRule.render(xmlStream, rule);\n }\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ref: attributes.sqref,\n rules: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model.rules.push(parser.model);\n }\n}\n\nmodule.exports = ConditionalFormattingXform;\n", + "const BaseXform = require('../../base-xform');\n\nconst ConditionalFormattingXform = require('./conditional-formatting-xform');\n\nclass ConditionalFormattingsXform extends BaseXform {\n constructor() {\n super();\n\n this.cfXform = new ConditionalFormattingXform();\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n reset() {\n this.model = [];\n }\n\n prepare(model, options) {\n // ensure each rule has a priority value\n let nextPriority = model.reduce(\n (p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)),\n 1\n );\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (!rule.priority) {\n rule.priority = nextPriority++;\n }\n\n if (rule.style) {\n rule.dxfId = options.styles.addDxfStyle(rule.style);\n }\n });\n });\n }\n\n render(xmlStream, model) {\n model.forEach(cf => {\n this.cfXform.render(xmlStream, cf);\n });\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case 'conditionalFormatting':\n this.parser = this.cfXform;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n return false;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (rule.dxfId !== undefined) {\n rule.style = options.styles.getDxfStyle(rule.dxfId);\n delete rule.dxfId;\n }\n });\n });\n }\n}\n\nmodule.exports = ConditionalFormattingsXform;\n", + "const CompositeXform = require('../../composite-xform');\n\nconst ColorXform = require('../../style/color-xform');\nconst CfvoXform = require('./cfvo-xform');\n\nclass DatabarXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n color: (this.colorXform = new ColorXform()),\n };\n }\n\n get tag() {\n return 'dataBar';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n this.colorXform.render(xmlStream, model.color);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {\n cfvo: [],\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'cfvo':\n this.model.cfvo.push(parser.model);\n break;\n case 'color':\n this.model.color = parser.model;\n break;\n }\n }\n}\n\nmodule.exports = DatabarXform;\n", + "/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nclass X14IdXform extends BaseXform {\n get tag() {\n return 'x14:id';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nclass ExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:id': (this.idXform = new X14IdXform()),\n };\n }\n\n get tag() {\n return 'ext';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n uri: '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n });\n\n this.idXform.render(xmlStream, model.x14Id);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n this.model.x14Id = parser.model;\n }\n}\n\nclass ExtLstRefXform extends CompositeXform {\n constructor() {\n super();\n this.map = {\n ext: new ExtXform(),\n };\n }\n\n get tag() {\n return 'extLst';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n this.map.ext.render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = ExtLstRefXform;\n", + "const BaseXform = require('../../base-xform');\n\nclass FormulaXform extends BaseXform {\n get tag() {\n return 'formula';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, null, model);\n }\n\n parseOpen() {\n this.model = '';\n }\n\n parseText(text) {\n this.model += text;\n }\n\n parseClose(name) {\n return name !== this.tag;\n }\n}\n\nmodule.exports = FormulaXform;\n", + "const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst CfvoXform = require('./cfvo-xform');\n\nclass IconSetXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n cfvo: (this.cfvoXform = new CfvoXform()),\n };\n }\n\n get tag() {\n return 'iconSet';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n iconSet: BaseXform.toStringAttribute(model.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\n });\n\n model.cfvo.forEach(cfvo => {\n this.cfvoXform.render(xmlStream, cfvo);\n });\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\n reverse: BaseXform.toBoolValue(attributes.reverse),\n showValue: BaseXform.toBoolValue(attributes.showValue),\n cfvo: [],\n };\n }\n\n onParserClose(name, parser) {\n this.model[name].push(parser.model);\n }\n}\n\nmodule.exports = IconSetXform;\n", + "const utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nclass ColXform extends BaseXform {\n get tag() {\n return 'col';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style || {});\n if (styleId) {\n model.styleId = styleId;\n }\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('col');\n xmlStream.addAttribute('min', model.min);\n xmlStream.addAttribute('max', model.max);\n if (model.width) {\n xmlStream.addAttribute('width', model.width);\n }\n if (model.styleId) {\n xmlStream.addAttribute('style', model.styleId);\n }\n if (model.hidden) {\n xmlStream.addAttribute('hidden', '1');\n }\n if (model.bestFit) {\n xmlStream.addAttribute('bestFit', '1');\n }\n if (model.outlineLevel) {\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\n }\n if (model.collapsed) {\n xmlStream.addAttribute('collapsed', '1');\n }\n xmlStream.addAttribute('customWidth', '1');\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (node.name === 'col') {\n const model = (this.model = {\n min: parseInt(node.attributes.min || '0', 10),\n max: parseInt(node.attributes.max || '0', 10),\n width:\n node.attributes.width === undefined\n ? undefined\n : parseFloat(node.attributes.width || '0'),\n });\n if (node.attributes.style) {\n model.styleId = parseInt(node.attributes.style, 10);\n }\n if (utils.parseBoolean(node.attributes.hidden)) {\n model.hidden = true;\n }\n if (utils.parseBoolean(node.attributes.bestFit)) {\n model.bestFit = true;\n }\n if (node.attributes.outlineLevel) {\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\n }\n if (utils.parseBoolean(node.attributes.collapsed)) {\n model.collapsed = true;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n\n reconcile(model, options) {\n // reconcile column styles\n if (model.styleId) {\n model.style = options.styles.getStyleModel(model.styleId);\n }\n }\n}\n\nmodule.exports = ColXform;\n", + "const _ = require('../../../utils/under-dash');\nconst utils = require('../../../utils/utils');\nconst colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\n\nfunction assign(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = value;\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction assignBool(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = utils.parseBoolean(value);\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction optimiseDataValidations(model) {\n // Squeeze alike data validations together into rectangular ranges\n // to reduce file size and speed up Excel load time\n const dvList = _.map(model, (dataValidation, address) => ({\n address,\n dataValidation,\n marked: false,\n })).sort((a, b) => _.strcmp(a.address, b.address));\n const dvMap = _.keyBy(dvList, 'address');\n const matchCol = (addr, height, col) => {\n for (let i = 0; i < height; i++) {\n const otherAddress = colCache.encodeAddress(addr.row + i, col);\n if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) {\n return false;\n }\n }\n return true;\n };\n return dvList\n .map(dv => {\n if (!dv.marked) {\n const addr = colCache.decodeEx(dv.address);\n if (addr.dimensions) {\n dvMap[addr.dimensions].marked = true;\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n\n // iterate downwards - finding matching cells\n let height = 1;\n let otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) {\n height++;\n otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n }\n\n // iterate rightwards...\n\n let width = 1;\n while (matchCol(addr, height, addr.col + width)) {\n width++;\n }\n\n // mark all included addresses\n for (let i = 0; i < height; i++) {\n for (let j = 0; j < width; j++) {\n otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j);\n dvMap[otherAddress].marked = true;\n }\n }\n\n if (height > 1 || width > 1) {\n const bottom = addr.row + (height - 1);\n const right = addr.col + (width - 1);\n return {\n ...dv.dataValidation,\n sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}`,\n };\n }\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nclass DataValidationsXform extends BaseXform {\n get tag() {\n return 'dataValidations';\n }\n\n render(xmlStream, model) {\n const optimizedModel = optimiseDataValidations(model);\n if (optimizedModel.length) {\n xmlStream.openNode('dataValidations', {count: optimizedModel.length});\n\n optimizedModel.forEach(value => {\n xmlStream.openNode('dataValidation');\n\n if (value.type !== 'any') {\n xmlStream.addAttribute('type', value.type);\n\n if (value.operator && value.type !== 'list' && value.operator !== 'between') {\n xmlStream.addAttribute('operator', value.operator);\n }\n if (value.allowBlank) {\n xmlStream.addAttribute('allowBlank', '1');\n }\n }\n if (value.showInputMessage) {\n xmlStream.addAttribute('showInputMessage', '1');\n }\n if (value.promptTitle) {\n xmlStream.addAttribute('promptTitle', value.promptTitle);\n }\n if (value.prompt) {\n xmlStream.addAttribute('prompt', value.prompt);\n }\n if (value.showErrorMessage) {\n xmlStream.addAttribute('showErrorMessage', '1');\n }\n if (value.errorStyle) {\n xmlStream.addAttribute('errorStyle', value.errorStyle);\n }\n if (value.errorTitle) {\n xmlStream.addAttribute('errorTitle', value.errorTitle);\n }\n if (value.error) {\n xmlStream.addAttribute('error', value.error);\n }\n xmlStream.addAttribute('sqref', value.sqref);\n (value.formulae || []).forEach((formula, index) => {\n xmlStream.openNode(`formula${index + 1}`);\n if (value.type === 'date') {\n xmlStream.writeText(utils.dateToExcel(new Date(formula)));\n } else {\n xmlStream.writeText(formula);\n }\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'dataValidations':\n this.model = {};\n return true;\n\n case 'dataValidation': {\n this._address = node.attributes.sqref;\n const dataValidation = {type: node.attributes.type || 'any', formulae: []};\n\n if (node.attributes.type) {\n assignBool(dataValidation, node.attributes, 'allowBlank');\n }\n assignBool(dataValidation, node.attributes, 'showInputMessage');\n assignBool(dataValidation, node.attributes, 'showErrorMessage');\n\n switch (dataValidation.type) {\n case 'any':\n case 'list':\n case 'custom':\n break;\n default:\n assign(dataValidation, node.attributes, 'operator', 'between');\n break;\n }\n assign(dataValidation, node.attributes, 'promptTitle');\n assign(dataValidation, node.attributes, 'prompt');\n assign(dataValidation, node.attributes, 'errorStyle');\n assign(dataValidation, node.attributes, 'errorTitle');\n assign(dataValidation, node.attributes, 'error');\n\n this._dataValidation = dataValidation;\n return true;\n }\n\n case 'formula1':\n case 'formula2':\n this._formula = [];\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this._formula) {\n this._formula.push(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'dataValidations':\n return false;\n case 'dataValidation': {\n if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) {\n delete this._dataValidation.formulae;\n delete this._dataValidation.operator;\n }\n // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4\n const list = this._address.split(/\\s+/g) || [];\n list.forEach(addr => {\n if (addr.includes(':')) {\n const range = new Range(addr);\n range.forEachAddress(address => {\n this.model[address] = this._dataValidation;\n });\n } else {\n this.model[addr] = this._dataValidation;\n }\n });\n return true;\n }\n case 'formula1':\n case 'formula2': {\n let formula = this._formula.join('');\n switch (this._dataValidation.type) {\n case 'whole':\n case 'textLength':\n formula = parseInt(formula, 10);\n break;\n case 'decimal':\n formula = parseFloat(formula);\n break;\n case 'date':\n formula = utils.excelToDate(parseFloat(formula));\n break;\n default:\n break;\n }\n this._dataValidation.formulae.push(formula);\n this._formula = undefined;\n return true;\n }\n default:\n return true;\n }\n }\n}\n\nmodule.exports = DataValidationsXform;\n", + "const BaseXform = require('../base-xform');\n\nclass DimensionXform extends BaseXform {\n get tag() {\n return 'dimension';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode('dimension', {ref: model});\n }\n }\n\n parseOpen(node) {\n if (node.name === 'dimension') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = DimensionXform;\n", + "const BaseXform = require('../base-xform');\n\nclass DrawingXform extends BaseXform {\n get tag() {\n return 'drawing';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = DrawingXform;\n", + "/* eslint-disable max-classes-per-file */\nconst CompositeXform = require('../composite-xform');\n\nconst ConditionalFormattingsExt = require('./cf-ext/conditional-formattings-ext-xform');\n\nclass ExtXform extends CompositeXform {\n constructor() {\n super();\n this.map = {\n 'x14:conditionalFormattings': (this.conditionalFormattings = new ConditionalFormattingsExt()),\n };\n }\n\n get tag() {\n return 'ext';\n }\n\n hasContent(model) {\n return this.conditionalFormattings.hasContent(model.conditionalFormattings);\n }\n\n prepare(model, options) {\n this.conditionalFormattings.prepare(model.conditionalFormattings, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('ext', {\n uri: '{78C0D931-6437-407d-A8EE-F0AAD7539E65}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n });\n\n this.conditionalFormattings.render(xmlStream, model.conditionalFormattings);\n\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n this.model[name] = parser.model;\n }\n}\n\nclass ExtLstXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n ext: (this.ext = new ExtXform()),\n };\n }\n\n get tag() {\n return 'extLst';\n }\n\n prepare(model, options) {\n this.ext.prepare(model, options);\n }\n\n hasContent(model) {\n return this.ext.hasContent(model);\n }\n\n render(xmlStream, model) {\n if (!this.hasContent(model)) {\n return;\n }\n\n xmlStream.openNode('extLst');\n this.ext.render(xmlStream, model);\n xmlStream.closeNode();\n }\n\n createNewModel() {\n return {};\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = ExtLstXform;\n", + "const BaseXform = require('../base-xform');\n\nclass HeaderFooterXform extends BaseXform {\n get tag() {\n return 'headerFooter';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.addRollback();\n\n let createTag = false;\n\n xmlStream.openNode('headerFooter');\n if (model.differentFirst) {\n xmlStream.addAttribute('differentFirst', '1');\n createTag = true;\n }\n if (model.differentOddEven) {\n xmlStream.addAttribute('differentOddEven', '1');\n createTag = true;\n }\n if (model.oddHeader && typeof model.oddHeader === 'string') {\n xmlStream.leafNode('oddHeader', null, model.oddHeader);\n createTag = true;\n }\n if (model.oddFooter && typeof model.oddFooter === 'string') {\n xmlStream.leafNode('oddFooter', null, model.oddFooter);\n createTag = true;\n }\n if (model.evenHeader && typeof model.evenHeader === 'string') {\n xmlStream.leafNode('evenHeader', null, model.evenHeader);\n createTag = true;\n }\n if (model.evenFooter && typeof model.evenFooter === 'string') {\n xmlStream.leafNode('evenFooter', null, model.evenFooter);\n createTag = true;\n }\n if (model.firstHeader && typeof model.firstHeader === 'string') {\n xmlStream.leafNode('firstHeader', null, model.firstHeader);\n createTag = true;\n }\n if (model.firstFooter && typeof model.firstFooter === 'string') {\n xmlStream.leafNode('firstFooter', null, model.firstFooter);\n createTag = true;\n }\n\n if (createTag) {\n xmlStream.closeNode();\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'headerFooter':\n this.model = {};\n if (node.attributes.differentFirst) {\n this.model.differentFirst = parseInt(node.attributes.differentFirst, 0) === 1;\n }\n if (node.attributes.differentOddEven) {\n this.model.differentOddEven = parseInt(node.attributes.differentOddEven, 0) === 1;\n }\n return true;\n\n case 'oddHeader':\n this.currentNode = 'oddHeader';\n return true;\n\n case 'oddFooter':\n this.currentNode = 'oddFooter';\n return true;\n\n case 'evenHeader':\n this.currentNode = 'evenHeader';\n return true;\n\n case 'evenFooter':\n this.currentNode = 'evenFooter';\n return true;\n\n case 'firstHeader':\n this.currentNode = 'firstHeader';\n return true;\n\n case 'firstFooter':\n this.currentNode = 'firstFooter';\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n switch (this.currentNode) {\n case 'oddHeader':\n this.model.oddHeader = text;\n break;\n\n case 'oddFooter':\n this.model.oddFooter = text;\n break;\n\n case 'evenHeader':\n this.model.evenHeader = text;\n break;\n\n case 'evenFooter':\n this.model.evenFooter = text;\n break;\n\n case 'firstHeader':\n this.model.firstHeader = text;\n break;\n\n case 'firstFooter':\n this.model.firstFooter = text;\n break;\n\n default:\n break;\n }\n }\n\n parseClose() {\n switch (this.currentNode) {\n case 'oddHeader':\n case 'oddFooter':\n case 'evenHeader':\n case 'evenFooter':\n case 'firstHeader':\n case 'firstFooter':\n this.currentNode = undefined;\n return true;\n\n default:\n return false;\n }\n }\n}\n\nmodule.exports = HeaderFooterXform;\n", + "const BaseXform = require('../base-xform');\n\nclass HyperlinkXform extends BaseXform {\n get tag() {\n return 'hyperlink';\n }\n\n render(xmlStream, model) {\n if (this.isInternalLink(model)) {\n xmlStream.leafNode('hyperlink', {\n ref: model.address,\n 'r:id': model.rId,\n tooltip: model.tooltip,\n location: model.target,\n });\n } else {\n xmlStream.leafNode('hyperlink', {\n ref: model.address,\n 'r:id': model.rId,\n tooltip: model.tooltip,\n });\n }\n }\n\n parseOpen(node) {\n if (node.name === 'hyperlink') {\n this.model = {\n address: node.attributes.ref,\n rId: node.attributes['r:id'],\n tooltip: node.attributes.tooltip,\n };\n\n // This is an internal link\n if (node.attributes.location) {\n this.model.target = node.attributes.location;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n\n isInternalLink(model) {\n // @example: Sheet2!D3, return true\n return model.target && /^[^!]+![a-zA-Z]+[\\d]+$/.test(model.target);\n }\n}\n\nmodule.exports = HyperlinkXform;\n", + "const BaseXform = require('../base-xform');\n\nclass MergeCellXform extends BaseXform {\n get tag() {\n return 'mergeCell';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('mergeCell', {ref: model});\n }\n\n parseOpen(node) {\n if (node.name === 'mergeCell') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = MergeCellXform;\n", + "const _ = require('../../../utils/under-dash');\n\nconst Range = require('../../../doc/range');\nconst colCache = require('../../../utils/col-cache');\nconst Enums = require('../../../doc/enums');\n\nclass Merges {\n constructor() {\n // optional mergeCells is array of ranges (like the xml)\n this.merges = {};\n }\n\n add(merge) {\n // merge is {address, master}\n if (this.merges[merge.master]) {\n this.merges[merge.master].expandToAddress(merge.address);\n } else {\n const range = `${merge.master}:${merge.address}`;\n this.merges[merge.master] = new Range(range);\n }\n }\n\n get mergeCells() {\n return _.map(this.merges, merge => merge.range);\n }\n\n reconcile(mergeCells, rows) {\n // reconcile merge list with merge cells\n _.each(mergeCells, merge => {\n const dimensions = colCache.decode(merge);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n const row = rows[i - 1];\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = row.cells[j - 1];\n if (!cell) {\n // nulls are not included in document - so if master cell has no value - add a null one here\n row.cells[j] = {\n type: Enums.ValueType.Null,\n address: colCache.encodeAddress(i, j),\n };\n } else if (cell.type === Enums.ValueType.Merge) {\n cell.master = dimensions.tl;\n }\n }\n }\n });\n }\n\n getMasterAddress(address) {\n // if address has been merged, return its master's address. Assumes reconcile has been called\n const range = this.hash[address];\n return range && range.tl;\n }\n}\n\nmodule.exports = Merges;\n", + "const BaseXform = require('../base-xform');\n\nconst isDefined = attr => typeof attr !== 'undefined';\n\nclass OutlinePropertiesXform extends BaseXform {\n get tag() {\n return 'outlinePr';\n }\n\n render(xmlStream, model) {\n if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) {\n xmlStream.leafNode(this.tag, {\n summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined,\n summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined,\n });\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n summaryBelow: isDefined(node.attributes.summaryBelow)\n ? Boolean(Number(node.attributes.summaryBelow))\n : undefined,\n summaryRight: isDefined(node.attributes.summaryRight)\n ? Boolean(Number(node.attributes.summaryRight))\n : undefined,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = OutlinePropertiesXform;\n", + "const BaseXform = require('../base-xform');\n\nclass PageBreaksXform extends BaseXform {\n get tag() {\n return 'brk';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('brk', model);\n }\n\n parseOpen(node) {\n if (node.name === 'brk') {\n this.model = node.attributes.ref;\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageBreaksXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nclass PageMarginsXform extends BaseXform {\n get tag() {\n return 'pageMargins';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n left: model.left,\n right: model.right,\n top: model.top,\n bottom: model.bottom,\n header: model.header,\n footer: model.footer,\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n left: parseFloat(node.attributes.left || 0.7),\n right: parseFloat(node.attributes.right || 0.7),\n top: parseFloat(node.attributes.top || 0.75),\n bottom: parseFloat(node.attributes.bottom || 0.75),\n header: parseFloat(node.attributes.header || 0.3),\n footer: parseFloat(node.attributes.footer || 0.3),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageMarginsXform;\n", + "const BaseXform = require('../base-xform');\n\nclass PageSetupPropertiesXform extends BaseXform {\n get tag() {\n return 'pageSetUpPr';\n }\n\n render(xmlStream, model) {\n if (model && model.fitToPage) {\n xmlStream.leafNode(this.tag, {\n fitToPage: model.fitToPage ? '1' : undefined,\n });\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n fitToPage: node.attributes.fitToPage === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageSetupPropertiesXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model) {\n return model ? '1' : undefined;\n}\nfunction pageOrderToXml(model) {\n switch (model) {\n case 'overThenDown':\n return model;\n default:\n return undefined;\n }\n}\nfunction cellCommentsToXml(model) {\n switch (model) {\n case 'atEnd':\n case 'asDisplyed':\n return model;\n default:\n return undefined;\n }\n}\nfunction errorsToXml(model) {\n switch (model) {\n case 'dash':\n case 'blank':\n case 'NA':\n return model;\n default:\n return undefined;\n }\n}\nfunction pageSizeToModel(value) {\n return value !== undefined ? parseInt(value, 10) : undefined;\n}\n\nclass PageSetupXform extends BaseXform {\n get tag() {\n return 'pageSetup';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n paperSize: model.paperSize,\n orientation: model.orientation,\n horizontalDpi: model.horizontalDpi,\n verticalDpi: model.verticalDpi,\n pageOrder: pageOrderToXml(model.pageOrder),\n blackAndWhite: booleanToXml(model.blackAndWhite),\n draft: booleanToXml(model.draft),\n cellComments: cellCommentsToXml(model.cellComments),\n errors: errorsToXml(model.errors),\n scale: model.scale,\n fitToWidth: model.fitToWidth,\n fitToHeight: model.fitToHeight,\n firstPageNumber: model.firstPageNumber,\n useFirstPageNumber: booleanToXml(model.firstPageNumber),\n usePrinterDefaults: booleanToXml(model.usePrinterDefaults),\n copies: model.copies,\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n paperSize: pageSizeToModel(node.attributes.paperSize),\n orientation: node.attributes.orientation || 'portrait',\n horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10),\n verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10),\n pageOrder: node.attributes.pageOrder || 'downThenOver',\n blackAndWhite: node.attributes.blackAndWhite === '1',\n draft: node.attributes.draft === '1',\n cellComments: node.attributes.cellComments || 'None',\n errors: node.attributes.errors || 'displayed',\n scale: parseInt(node.attributes.scale || '100', 10),\n fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10),\n fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10),\n firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10),\n useFirstPageNumber: node.attributes.useFirstPageNumber === '1',\n usePrinterDefaults: node.attributes.usePrinterDefaults === '1',\n copies: parseInt(node.attributes.copies || '1', 10),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PageSetupXform;\n", + "const BaseXform = require('../base-xform');\n\nclass PictureXform extends BaseXform {\n get tag() {\n return 'picture';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PictureXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model) {\n return model ? '1' : undefined;\n}\n\nclass PrintOptionsXform extends BaseXform {\n get tag() {\n return 'printOptions';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n headings: booleanToXml(model.showRowColHeaders),\n gridLines: booleanToXml(model.showGridLines),\n horizontalCentered: booleanToXml(model.horizontalCentered),\n verticalCentered: booleanToXml(model.verticalCentered),\n };\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n showRowColHeaders: node.attributes.headings === '1',\n showGridLines: node.attributes.gridLines === '1',\n horizontalCentered: node.attributes.horizontalCentered === '1',\n verticalCentered: node.attributes.verticalCentered === '1',\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = PrintOptionsXform;\n", + "'use strict';\n\nconst PageBreaksXform = require('./page-breaks-xform');\n\nconst ListXform = require('../list-xform');\n\nclass RowBreaksXform extends ListXform {\n constructor() {\n const options = {\n tag: 'rowBreaks',\n count: true,\n childXform: new PageBreaksXform(),\n };\n super(options);\n }\n\n // get tag() { return 'rowBreaks'; }\n\n render(xmlStream, model) {\n if (model && model.length) {\n xmlStream.openNode(this.tag, this.$);\n if (this.count) {\n xmlStream.addAttribute(this.$count, model.length);\n xmlStream.addAttribute('manualBreakCount', model.length);\n }\n\n const {childXform} = this;\n model.forEach(childModel => {\n childXform.render(xmlStream, childModel);\n });\n\n xmlStream.closeNode();\n } else if (this.empty) {\n xmlStream.leafNode(this.tag);\n }\n }\n}\n\nmodule.exports = RowBreaksXform;\n", + "const BaseXform = require('../base-xform');\nconst utils = require('../../../utils/utils');\n\nconst CellXform = require('./cell-xform');\n\nclass RowXform extends BaseXform {\n constructor(options) {\n super();\n\n this.maxItems = options && options.maxItems;\n this.map = {\n c: new CellXform(),\n };\n }\n\n get tag() {\n return 'row';\n }\n\n prepare(model, options) {\n const styleId = options.styles.addStyleModel(model.style);\n if (styleId) {\n model.styleId = styleId;\n }\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.prepare(cellModel, options);\n });\n }\n\n render(xmlStream, model, options) {\n xmlStream.openNode('row');\n xmlStream.addAttribute('r', model.number);\n if (model.height) {\n xmlStream.addAttribute('ht', model.height);\n xmlStream.addAttribute('customHeight', '1');\n }\n if (model.hidden) {\n xmlStream.addAttribute('hidden', '1');\n }\n if (model.min > 0 && model.max > 0 && model.min <= model.max) {\n xmlStream.addAttribute('spans', `${model.min}:${model.max}`);\n }\n if (model.styleId) {\n xmlStream.addAttribute('s', model.styleId);\n xmlStream.addAttribute('customFormat', '1');\n }\n xmlStream.addAttribute('x14ac:dyDescent', '0.25');\n if (model.outlineLevel) {\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\n }\n if (model.collapsed) {\n xmlStream.addAttribute('collapsed', '1');\n }\n\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.render(xmlStream, cellModel, options);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (node.name === 'row') {\n this.numRowsSeen += 1;\n const spans = node.attributes.spans\n ? node.attributes.spans.split(':').map(span => parseInt(span, 10))\n : [undefined, undefined];\n const model = (this.model = {\n number: parseInt(node.attributes.r, 10),\n min: spans[0],\n max: spans[1],\n cells: [],\n });\n if (node.attributes.s) {\n model.styleId = parseInt(node.attributes.s, 10);\n }\n if (utils.parseBoolean(node.attributes.hidden)) {\n model.hidden = true;\n }\n if (utils.parseBoolean(node.attributes.bestFit)) {\n model.bestFit = true;\n }\n if (node.attributes.ht) {\n model.height = parseFloat(node.attributes.ht);\n }\n if (node.attributes.outlineLevel) {\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\n }\n if (utils.parseBoolean(node.attributes.collapsed)) {\n model.collapsed = true;\n }\n return true;\n }\n\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.cells.push(this.parser.model);\n if (this.maxItems && this.model.cells.length > this.maxItems) {\n throw new Error(`Max column count (${this.maxItems}) exceeded`);\n }\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.style = model.styleId ? options.styles.getStyleModel(model.styleId) : {};\n if (model.styleId !== undefined) {\n model.styleId = undefined;\n }\n\n const cellXform = this.map.c;\n model.cells.forEach(cellModel => {\n cellXform.reconcile(cellModel, options);\n });\n }\n}\n\nmodule.exports = RowXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nclass SheetFormatPropertiesXform extends BaseXform {\n get tag() {\n return 'sheetFormatPr';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n defaultRowHeight: model.defaultRowHeight,\n outlineLevelRow: model.outlineLevelRow,\n outlineLevelCol: model.outlineLevelCol,\n 'x14ac:dyDescent': model.dyDescent,\n };\n if (model.defaultColWidth) {\n attributes.defaultColWidth = model.defaultColWidth;\n }\n\n // default value for 'defaultRowHeight' is 15, this should not be 'custom'\n if (!model.defaultRowHeight || model.defaultRowHeight !== 15) {\n attributes.customHeight = '1';\n }\n\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode('sheetFormatPr', attributes);\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'sheetFormatPr') {\n this.model = {\n defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || '0'),\n dyDescent: parseFloat(node.attributes['x14ac:dyDescent'] || '0'),\n outlineLevelRow: parseInt(node.attributes.outlineLevelRow || '0', 10),\n outlineLevelCol: parseInt(node.attributes.outlineLevelCol || '0', 10),\n };\n if (node.attributes.defaultColWidth) {\n this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth);\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = SheetFormatPropertiesXform;\n", + "const BaseXform = require('../base-xform');\nconst ColorXform = require('../style/color-xform');\nconst PageSetupPropertiesXform = require('./page-setup-properties-xform');\nconst OutlinePropertiesXform = require('./outline-properties-xform');\n\nclass SheetPropertiesXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n tabColor: new ColorXform('tabColor'),\n pageSetUpPr: new PageSetupPropertiesXform(),\n outlinePr: new OutlinePropertiesXform(),\n };\n }\n\n get tag() {\n return 'sheetPr';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.addRollback();\n xmlStream.openNode('sheetPr');\n\n let inner = false;\n inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner;\n inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner;\n inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner;\n\n if (inner) {\n xmlStream.closeNode();\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (node.name === this.tag) {\n this.reset();\n return true;\n }\n if (this.map[node.name]) {\n this.parser = this.map[node.name];\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n return true;\n }\n return false;\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) {\n this.model = {};\n if (this.map.tabColor.model) {\n this.model.tabColor = this.map.tabColor.model;\n }\n if (this.map.pageSetUpPr.model) {\n this.model.pageSetup = this.map.pageSetUpPr.model;\n }\n if (this.map.outlinePr.model) {\n this.model.outlineProperties = this.map.outlinePr.model;\n }\n } else {\n this.model = null;\n }\n return false;\n }\n}\n\nmodule.exports = SheetPropertiesXform;\n", + "const _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\nfunction booleanToXml(model, value) {\n return model ? value : undefined;\n}\n\nfunction xmlToBoolean(value, equals) {\n return value === equals ? true : undefined;\n}\n\nclass SheetProtectionXform extends BaseXform {\n get tag() {\n return 'sheetProtection';\n }\n\n render(xmlStream, model) {\n if (model) {\n const attributes = {\n sheet: booleanToXml(model.sheet, '1'),\n selectLockedCells: model.selectLockedCells === false ? '1' : undefined,\n selectUnlockedCells: model.selectUnlockedCells === false ? '1' : undefined,\n formatCells: booleanToXml(model.formatCells, '0'),\n formatColumns: booleanToXml(model.formatColumns, '0'),\n formatRows: booleanToXml(model.formatRows, '0'),\n insertColumns: booleanToXml(model.insertColumns, '0'),\n insertRows: booleanToXml(model.insertRows, '0'),\n insertHyperlinks: booleanToXml(model.insertHyperlinks, '0'),\n deleteColumns: booleanToXml(model.deleteColumns, '0'),\n deleteRows: booleanToXml(model.deleteRows, '0'),\n sort: booleanToXml(model.sort, '0'),\n autoFilter: booleanToXml(model.autoFilter, '0'),\n pivotTables: booleanToXml(model.pivotTables, '0'),\n };\n if (model.sheet) {\n attributes.algorithmName = model.algorithmName;\n attributes.hashValue = model.hashValue;\n attributes.saltValue = model.saltValue;\n attributes.spinCount = model.spinCount;\n attributes.objects = booleanToXml(model.objects === false, '1');\n attributes.scenarios = booleanToXml(model.scenarios === false, '1');\n }\n if (_.some(attributes, value => value !== undefined)) {\n xmlStream.leafNode(this.tag, attributes);\n }\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n sheet: xmlToBoolean(node.attributes.sheet, '1'),\n objects: node.attributes.objects === '1' ? false : undefined,\n scenarios: node.attributes.scenarios === '1' ? false : undefined,\n selectLockedCells: node.attributes.selectLockedCells === '1' ? false : undefined,\n selectUnlockedCells: node.attributes.selectUnlockedCells === '1' ? false : undefined,\n formatCells: xmlToBoolean(node.attributes.formatCells, '0'),\n formatColumns: xmlToBoolean(node.attributes.formatColumns, '0'),\n formatRows: xmlToBoolean(node.attributes.formatRows, '0'),\n insertColumns: xmlToBoolean(node.attributes.insertColumns, '0'),\n insertRows: xmlToBoolean(node.attributes.insertRows, '0'),\n insertHyperlinks: xmlToBoolean(node.attributes.insertHyperlinks, '0'),\n deleteColumns: xmlToBoolean(node.attributes.deleteColumns, '0'),\n deleteRows: xmlToBoolean(node.attributes.deleteRows, '0'),\n sort: xmlToBoolean(node.attributes.sort, '0'),\n autoFilter: xmlToBoolean(node.attributes.autoFilter, '0'),\n pivotTables: xmlToBoolean(node.attributes.pivotTables, '0'),\n };\n if (node.attributes.algorithmName) {\n this.model.algorithmName = node.attributes.algorithmName;\n this.model.hashValue = node.attributes.hashValue;\n this.model.saltValue = node.attributes.saltValue;\n this.model.spinCount = parseInt(node.attributes.spinCount, 10);\n }\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = SheetProtectionXform;\n", + "const colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\n\nconst VIEW_STATES = {\n frozen: 'frozen',\n frozenSplit: 'frozen',\n split: 'split',\n};\n\nclass SheetViewXform extends BaseXform {\n get tag() {\n return 'sheetView';\n }\n\n prepare(model) {\n switch (model.state) {\n case 'frozen':\n case 'split':\n break;\n default:\n model.state = 'normal';\n break;\n }\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('sheetView', {\n workbookViewId: model.workbookViewId || 0,\n });\n const add = function(name, value, included) {\n if (included) {\n xmlStream.addAttribute(name, value);\n }\n };\n add('rightToLeft', '1', model.rightToLeft === true);\n add('tabSelected', '1', model.tabSelected);\n add('showRuler', '0', model.showRuler === false);\n add('showRowColHeaders', '0', model.showRowColHeaders === false);\n add('showGridLines', '0', model.showGridLines === false);\n add('zoomScale', model.zoomScale, model.zoomScale);\n add('zoomScaleNormal', model.zoomScaleNormal, model.zoomScaleNormal);\n add('view', model.style, model.style);\n\n let topLeftCell;\n let xSplit;\n let ySplit;\n let activePane;\n switch (model.state) {\n case 'frozen':\n xSplit = model.xSplit || 0;\n ySplit = model.ySplit || 0;\n topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address;\n activePane =\n (model.xSplit && model.ySplit && 'bottomRight') ||\n (model.xSplit && 'topRight') ||\n 'bottomLeft';\n\n xmlStream.leafNode('pane', {\n xSplit: model.xSplit || undefined,\n ySplit: model.ySplit || undefined,\n topLeftCell,\n activePane,\n state: 'frozen',\n });\n xmlStream.leafNode('selection', {\n pane: activePane,\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n break;\n case 'split':\n if (model.activePane === 'topLeft') {\n model.activePane = undefined;\n }\n xmlStream.leafNode('pane', {\n xSplit: model.xSplit || undefined,\n ySplit: model.ySplit || undefined,\n topLeftCell: model.topLeftCell,\n activePane: model.activePane,\n });\n xmlStream.leafNode('selection', {\n pane: model.activePane,\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n break;\n case 'normal':\n if (model.activeCell) {\n xmlStream.leafNode('selection', {\n activeCell: model.activeCell,\n sqref: model.activeCell,\n });\n }\n break;\n default:\n break;\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'sheetView':\n this.sheetView = {\n workbookViewId: parseInt(node.attributes.workbookViewId, 10),\n rightToLeft: node.attributes.rightToLeft === '1',\n tabSelected: node.attributes.tabSelected === '1',\n showRuler: !(node.attributes.showRuler === '0'),\n showRowColHeaders: !(node.attributes.showRowColHeaders === '0'),\n showGridLines: !(node.attributes.showGridLines === '0'),\n zoomScale: parseInt(node.attributes.zoomScale || '100', 10),\n zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || '100', 10),\n style: node.attributes.view,\n };\n this.pane = undefined;\n this.selections = {};\n return true;\n\n case 'pane':\n this.pane = {\n xSplit: parseInt(node.attributes.xSplit || '0', 10),\n ySplit: parseInt(node.attributes.ySplit || '0', 10),\n topLeftCell: node.attributes.topLeftCell,\n activePane: node.attributes.activePane || 'topLeft',\n state: node.attributes.state,\n };\n return true;\n\n case 'selection': {\n const name = node.attributes.pane || 'topLeft';\n this.selections[name] = {\n pane: name,\n activeCell: node.attributes.activeCell,\n };\n return true;\n }\n\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n let model;\n let selection;\n switch (name) {\n case 'sheetView':\n if (this.sheetView && this.pane) {\n model = this.model = {\n workbookViewId: this.sheetView.workbookViewId,\n rightToLeft: this.sheetView.rightToLeft,\n state: VIEW_STATES[this.pane.state] || 'split', // split is default\n xSplit: this.pane.xSplit,\n ySplit: this.pane.ySplit,\n topLeftCell: this.pane.topLeftCell,\n showRuler: this.sheetView.showRuler,\n showRowColHeaders: this.sheetView.showRowColHeaders,\n showGridLines: this.sheetView.showGridLines,\n zoomScale: this.sheetView.zoomScale,\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\n };\n if (this.model.state === 'split') {\n model.activePane = this.pane.activePane;\n }\n selection = this.selections[this.pane.activePane];\n if (selection && selection.activeCell) {\n model.activeCell = selection.activeCell;\n }\n if (this.sheetView.style) {\n model.style = this.sheetView.style;\n }\n } else {\n model = this.model = {\n workbookViewId: this.sheetView.workbookViewId,\n rightToLeft: this.sheetView.rightToLeft,\n state: 'normal',\n showRuler: this.sheetView.showRuler,\n showRowColHeaders: this.sheetView.showRowColHeaders,\n showGridLines: this.sheetView.showGridLines,\n zoomScale: this.sheetView.zoomScale,\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\n };\n selection = this.selections.topLeft;\n if (selection && selection.activeCell) {\n model.activeCell = selection.activeCell;\n }\n if (this.sheetView.style) {\n model.style = this.sheetView.style;\n }\n }\n return false;\n default:\n return true;\n }\n }\n\n reconcile() {}\n}\n\nmodule.exports = SheetViewXform;\n", + "const BaseXform = require('../base-xform');\n\nclass TablePartXform extends BaseXform {\n get tag() {\n return 'tablePart';\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case this.tag:\n this.model = {\n rId: node.attributes['r:id'],\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TablePartXform;\n", + "const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst RelType = require('../../rel-type');\n\nconst Merges = require('./merges');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\nconst RowXform = require('./row-xform');\nconst ColXform = require('./col-xform');\nconst DimensionXform = require('./dimension-xform');\nconst HyperlinkXform = require('./hyperlink-xform');\nconst MergeCellXform = require('./merge-cell-xform');\nconst DataValidationsXform = require('./data-validations-xform');\nconst SheetPropertiesXform = require('./sheet-properties-xform');\nconst SheetFormatPropertiesXform = require('./sheet-format-properties-xform');\nconst SheetViewXform = require('./sheet-view-xform');\nconst SheetProtectionXform = require('./sheet-protection-xform');\nconst PageMarginsXform = require('./page-margins-xform');\nconst PageSetupXform = require('./page-setup-xform');\nconst PrintOptionsXform = require('./print-options-xform');\nconst AutoFilterXform = require('./auto-filter-xform');\nconst PictureXform = require('./picture-xform');\nconst DrawingXform = require('./drawing-xform');\nconst TablePartXform = require('./table-part-xform');\nconst RowBreaksXform = require('./row-breaks-xform');\nconst HeaderFooterXform = require('./header-footer-xform');\nconst ConditionalFormattingsXform = require('./cf/conditional-formattings-xform');\nconst ExtListXform = require('./ext-lst-xform');\n\nconst mergeRule = (rule, extRule) => {\n Object.keys(extRule).forEach(key => {\n const value = rule[key];\n const extValue = extRule[key];\n if (value === undefined && extValue !== undefined) {\n rule[key] = extValue;\n }\n });\n};\n\nconst mergeConditionalFormattings = (model, extModel) => {\n // conditional formattings are rendered in worksheet.conditionalFormatting and also in\n // worksheet.extLst.ext.x14:conditionalFormattings\n // some (e.g. dataBar) are even spread across both!\n if (!extModel || !extModel.length) {\n return model;\n }\n if (!model || !model.length) {\n return extModel;\n }\n\n // index model rules by x14Id\n const cfMap = {};\n const ruleMap = {};\n model.forEach(cf => {\n cfMap[cf.ref] = cf;\n cf.rules.forEach(rule => {\n const {x14Id} = rule;\n if (x14Id) {\n ruleMap[x14Id] = rule;\n }\n });\n });\n\n extModel.forEach(extCf => {\n extCf.rules.forEach(extRule => {\n const rule = ruleMap[extRule.x14Id];\n if (rule) {\n // merge with matching rule\n mergeRule(rule, extRule);\n } else if (cfMap[extCf.ref]) {\n // reuse existing cf ref\n cfMap[extCf.ref].rules.push(extRule);\n } else {\n // create new cf\n model.push({\n ref: extCf.ref,\n rules: [extRule],\n });\n }\n });\n });\n\n // need to cope with rules in extModel that don't exist in model\n return model;\n};\n\nclass WorkSheetXform extends BaseXform {\n constructor(options) {\n super();\n\n const {maxRows, maxCols, ignoreNodes} = options || {};\n\n this.ignoreNodes = ignoreNodes || [];\n\n this.map = {\n sheetPr: new SheetPropertiesXform(),\n dimension: new DimensionXform(),\n sheetViews: new ListXform({\n tag: 'sheetViews',\n count: false,\n childXform: new SheetViewXform(),\n }),\n sheetFormatPr: new SheetFormatPropertiesXform(),\n cols: new ListXform({tag: 'cols', count: false, childXform: new ColXform()}),\n sheetData: new ListXform({\n tag: 'sheetData',\n count: false,\n empty: true,\n childXform: new RowXform({maxItems: maxCols}),\n maxItems: maxRows,\n }),\n autoFilter: new AutoFilterXform(),\n mergeCells: new ListXform({tag: 'mergeCells', count: true, childXform: new MergeCellXform()}),\n rowBreaks: new RowBreaksXform(),\n hyperlinks: new ListXform({\n tag: 'hyperlinks',\n count: false,\n childXform: new HyperlinkXform(),\n }),\n pageMargins: new PageMarginsXform(),\n dataValidations: new DataValidationsXform(),\n pageSetup: new PageSetupXform(),\n headerFooter: new HeaderFooterXform(),\n printOptions: new PrintOptionsXform(),\n picture: new PictureXform(),\n drawing: new DrawingXform(),\n sheetProtection: new SheetProtectionXform(),\n tableParts: new ListXform({tag: 'tableParts', count: true, childXform: new TablePartXform()}),\n conditionalFormatting: new ConditionalFormattingsXform(),\n extLst: new ExtListXform(),\n };\n }\n\n prepare(model, options) {\n options.merges = new Merges();\n model.hyperlinks = options.hyperlinks = [];\n model.comments = options.comments = [];\n\n options.formulae = {};\n options.siFormulae = 0;\n this.map.cols.prepare(model.cols, options);\n this.map.sheetData.prepare(model.rows, options);\n this.map.conditionalFormatting.prepare(model.conditionalFormattings, options);\n\n model.mergeCells = options.merges.mergeCells;\n\n // prepare relationships\n const rels = (model.rels = []);\n\n function nextRid(r) {\n return `rId${r.length + 1}`;\n }\n\n model.hyperlinks.forEach(hyperlink => {\n const rId = nextRid(rels);\n hyperlink.rId = rId;\n rels.push({\n Id: rId,\n Type: RelType.Hyperlink,\n Target: hyperlink.target,\n TargetMode: 'External',\n });\n });\n\n // prepare comment relationships\n if (model.comments.length > 0) {\n const comment = {\n Id: nextRid(rels),\n Type: RelType.Comments,\n Target: `../comments${model.id}.xml`,\n };\n rels.push(comment);\n const vmlDrawing = {\n Id: nextRid(rels),\n Type: RelType.VmlDrawing,\n Target: `../drawings/vmlDrawing${model.id}.vml`,\n };\n rels.push(vmlDrawing);\n\n model.comments.forEach(item => {\n item.refAddress = colCache.decodeAddress(item.ref);\n });\n\n options.commentRefs.push({\n commentName: `comments${model.id}`,\n vmlDrawing: `vmlDrawing${model.id}`,\n });\n }\n\n const drawingRelsHash = [];\n let bookImage;\n model.media.forEach(medium => {\n if (medium.type === 'background') {\n const rId = nextRid(rels);\n bookImage = options.media[medium.imageId];\n rels.push({\n Id: rId,\n Type: RelType.Image,\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\n });\n model.background = {\n rId,\n };\n model.image = options.media[medium.imageId];\n } else if (medium.type === 'image') {\n let {drawing} = model;\n bookImage = options.media[medium.imageId];\n if (!drawing) {\n drawing = model.drawing = {\n rId: nextRid(rels),\n name: `drawing${++options.drawingsCount}`,\n anchors: [],\n rels: [],\n };\n options.drawings.push(drawing);\n rels.push({\n Id: drawing.rId,\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',\n Target: `../drawings/${drawing.name}.xml`,\n });\n }\n let rIdImage =\n this.preImageId === medium.imageId ? drawingRelsHash[medium.imageId] : drawingRelsHash[drawing.rels.length];\n if (!rIdImage) {\n rIdImage = nextRid(drawing.rels);\n drawingRelsHash[drawing.rels.length] = rIdImage;\n drawing.rels.push({\n Id: rIdImage,\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\n });\n }\n\n const anchor = {\n picture: {\n rId: rIdImage,\n },\n range: medium.range,\n };\n if (medium.hyperlinks && medium.hyperlinks.hyperlink) {\n const rIdHyperLink = nextRid(drawing.rels);\n drawingRelsHash[drawing.rels.length] = rIdHyperLink;\n anchor.picture.hyperlinks = {\n tooltip: medium.hyperlinks.tooltip,\n rId: rIdHyperLink,\n };\n drawing.rels.push({\n Id: rIdHyperLink,\n Type: RelType.Hyperlink,\n Target: medium.hyperlinks.hyperlink,\n TargetMode: 'External',\n });\n }\n this.preImageId = medium.imageId;\n drawing.anchors.push(anchor);\n }\n });\n\n // prepare tables\n model.tables.forEach(table => {\n // relationships\n const rId = nextRid(rels);\n table.rId = rId;\n rels.push({\n Id: rId,\n Type: RelType.Table,\n Target: `../tables/${table.target}`,\n });\n\n // dynamic styles\n table.columns.forEach(column => {\n const {style} = column;\n if (style) {\n column.dxfId = options.styles.addDxfStyle(style);\n }\n });\n });\n\n // prepare ext items\n this.map.extLst.prepare(model, options);\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('worksheet', WorkSheetXform.WORKSHEET_ATTRIBUTES);\n\n const sheetFormatPropertiesModel = model.properties\n ? {\n defaultRowHeight: model.properties.defaultRowHeight,\n dyDescent: model.properties.dyDescent,\n outlineLevelCol: model.properties.outlineLevelCol,\n outlineLevelRow: model.properties.outlineLevelRow,\n }\n : undefined;\n if (model.properties && model.properties.defaultColWidth) {\n sheetFormatPropertiesModel.defaultColWidth = model.properties.defaultColWidth;\n }\n const sheetPropertiesModel = {\n outlineProperties: model.properties && model.properties.outlineProperties,\n tabColor: model.properties && model.properties.tabColor,\n pageSetup:\n model.pageSetup && model.pageSetup.fitToPage\n ? {\n fitToPage: model.pageSetup.fitToPage,\n }\n : undefined,\n };\n const pageMarginsModel = model.pageSetup && model.pageSetup.margins;\n const printOptionsModel = {\n showRowColHeaders: model.pageSetup && model.pageSetup.showRowColHeaders,\n showGridLines: model.pageSetup && model.pageSetup.showGridLines,\n horizontalCentered: model.pageSetup && model.pageSetup.horizontalCentered,\n verticalCentered: model.pageSetup && model.pageSetup.verticalCentered,\n };\n const sheetProtectionModel = model.sheetProtection;\n\n this.map.sheetPr.render(xmlStream, sheetPropertiesModel);\n this.map.dimension.render(xmlStream, model.dimensions);\n this.map.sheetViews.render(xmlStream, model.views);\n this.map.sheetFormatPr.render(xmlStream, sheetFormatPropertiesModel);\n this.map.cols.render(xmlStream, model.cols);\n this.map.sheetData.render(xmlStream, model.rows);\n this.map.sheetProtection.render(xmlStream, sheetProtectionModel); // Note: must be after sheetData and before autoFilter\n this.map.autoFilter.render(xmlStream, model.autoFilter);\n this.map.mergeCells.render(xmlStream, model.mergeCells);\n this.map.conditionalFormatting.render(xmlStream, model.conditionalFormattings); // Note: must be before dataValidations\n this.map.dataValidations.render(xmlStream, model.dataValidations);\n\n // For some reason hyperlinks have to be after the data validations\n this.map.hyperlinks.render(xmlStream, model.hyperlinks);\n\n this.map.printOptions.render(xmlStream, printOptionsModel); // Note: must be before pageMargins\n this.map.pageMargins.render(xmlStream, pageMarginsModel);\n this.map.pageSetup.render(xmlStream, model.pageSetup);\n this.map.headerFooter.render(xmlStream, model.headerFooter);\n this.map.rowBreaks.render(xmlStream, model.rowBreaks);\n this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks\n this.map.picture.render(xmlStream, model.background); // Note: must be after drawing\n this.map.tableParts.render(xmlStream, model.tables);\n\n this.map.extLst.render(xmlStream, model);\n\n if (model.rels) {\n // add a node for each comment\n model.rels.forEach(rel => {\n if (rel.Type === RelType.VmlDrawing) {\n xmlStream.leafNode('legacyDrawing', {'r:id': rel.Id});\n }\n });\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n if (node.name === 'worksheet') {\n _.each(this.map, xform => {\n xform.reset();\n });\n return true;\n }\n\n if (this.map[node.name] && !this.ignoreNodes.includes(node.name)) {\n this.parser = this.map[node.name];\n this.parser.parseOpen(node);\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'worksheet': {\n const properties = this.map.sheetFormatPr.model || {};\n if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) {\n properties.tabColor = this.map.sheetPr.model.tabColor;\n }\n if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) {\n properties.outlineProperties = this.map.sheetPr.model.outlineProperties;\n }\n const sheetProperties = {\n fitToPage:\n (this.map.sheetPr.model &&\n this.map.sheetPr.model.pageSetup &&\n this.map.sheetPr.model.pageSetup.fitToPage) ||\n false,\n margins: this.map.pageMargins.model,\n };\n const pageSetup = Object.assign(sheetProperties, this.map.pageSetup.model, this.map.printOptions.model);\n const conditionalFormattings = mergeConditionalFormattings(\n this.map.conditionalFormatting.model,\n this.map.extLst.model && this.map.extLst.model['x14:conditionalFormattings']\n );\n this.model = {\n dimensions: this.map.dimension.model,\n cols: this.map.cols.model,\n rows: this.map.sheetData.model,\n mergeCells: this.map.mergeCells.model,\n hyperlinks: this.map.hyperlinks.model,\n dataValidations: this.map.dataValidations.model,\n properties,\n views: this.map.sheetViews.model,\n pageSetup,\n headerFooter: this.map.headerFooter.model,\n background: this.map.picture.model,\n drawing: this.map.drawing.model,\n tables: this.map.tableParts.model,\n conditionalFormattings,\n };\n\n if (this.map.autoFilter.model) {\n this.model.autoFilter = this.map.autoFilter.model;\n }\n if (this.map.sheetProtection.model) {\n this.model.sheetProtection = this.map.sheetProtection.model;\n }\n\n return false;\n }\n\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model, options) {\n // options.merges = new Merges();\n // options.merges.reconcile(model.mergeCells, model.rows);\n const rels = (model.relationships || []).reduce((h, rel) => {\n h[rel.Id] = rel;\n if (rel.Type === RelType.Comments) {\n model.comments = options.comments[rel.Target].comments;\n }\n if (rel.Type === RelType.VmlDrawing && model.comments && model.comments.length) {\n const vmlComment = options.vmlDrawings[rel.Target].comments;\n model.comments.forEach((comment, index) => {\n comment.note = Object.assign({}, comment.note, vmlComment[index]);\n });\n }\n return h;\n }, {});\n options.commentsMap = (model.comments || []).reduce((h, comment) => {\n if (comment.ref) {\n h[comment.ref] = comment;\n }\n return h;\n }, {});\n options.hyperlinkMap = (model.hyperlinks || []).reduce((h, hyperlink) => {\n if (hyperlink.rId) {\n h[hyperlink.address] = rels[hyperlink.rId].Target;\n }\n return h;\n }, {});\n options.formulae = {};\n\n // compact the rows and cells\n model.rows = (model.rows && model.rows.filter(Boolean)) || [];\n model.rows.forEach(row => {\n row.cells = (row.cells && row.cells.filter(Boolean)) || [];\n });\n\n this.map.cols.reconcile(model.cols, options);\n this.map.sheetData.reconcile(model.rows, options);\n this.map.conditionalFormatting.reconcile(model.conditionalFormattings, options);\n\n model.media = [];\n if (model.drawing) {\n const drawingRel = rels[model.drawing.rId];\n const match = drawingRel.Target.match(/\\/drawings\\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);\n if (match) {\n const drawingName = match[1];\n const drawing = options.drawings[drawingName];\n drawing.anchors.forEach(anchor => {\n if (anchor.medium) {\n const image = {\n type: 'image',\n imageId: anchor.medium.index,\n range: anchor.range,\n hyperlinks: anchor.picture.hyperlinks,\n };\n model.media.push(image);\n }\n });\n }\n }\n\n const backgroundRel = model.background && rels[model.background.rId];\n if (backgroundRel) {\n const target = backgroundRel.Target.split('/media/')[1];\n const imageId = options.mediaIndex && options.mediaIndex[target];\n if (imageId !== undefined) {\n model.media.push({\n type: 'background',\n imageId,\n });\n }\n }\n\n model.tables = (model.tables || []).map(tablePart => {\n const rel = rels[tablePart.rId];\n return options.tables[rel.Target];\n });\n\n delete model.relationships;\n delete model.hyperlinks;\n delete model.comments;\n }\n}\n\nWorkSheetXform.WORKSHEET_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x14ac',\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\n};\n\nmodule.exports = WorkSheetXform;\n", + "const BaseXform = require('../base-xform');\n\nclass BooleanXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.tag);\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = BooleanXform;\n", + "const BaseXform = require('../base-xform');\n\nclass DateXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n this._format =\n options.format ||\n function(dt) {\n try {\n if (Number.isNaN(dt.getTime())) return '';\n return dt.toISOString();\n } catch (e) {\n return '';\n }\n };\n this._parse =\n options.parse ||\n function(str) {\n return new Date(str);\n };\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, this._format(model));\n } else {\n xmlStream.writeText(this._format(model));\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = this._parse(node.attributes[this.attr]);\n } else {\n this.text = [];\n }\n }\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = this._parse(this.text.join(''));\n }\n return false;\n }\n}\n\nmodule.exports = DateXform;\n", + "const BaseXform = require('../base-xform');\n\nclass IntegerXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n\n // option to render zero\n this.zero = options.zero;\n }\n\n render(xmlStream, model) {\n // int is different to float in that zero is not rendered\n if (model || this.zero) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, model);\n } else {\n xmlStream.writeText(model);\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = parseInt(node.attributes[this.attr], 10);\n } else {\n this.text = [];\n }\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = parseInt(this.text.join('') || 0, 10);\n }\n return false;\n }\n}\n\nmodule.exports = IntegerXform;\n", + "const BaseXform = require('../base-xform');\n\nclass StringXform extends BaseXform {\n constructor(options) {\n super();\n\n this.tag = options.tag;\n this.attr = options.attr;\n this.attrs = options.attrs;\n }\n\n render(xmlStream, model) {\n if (model !== undefined) {\n xmlStream.openNode(this.tag);\n if (this.attrs) {\n xmlStream.addAttributes(this.attrs);\n }\n if (this.attr) {\n xmlStream.addAttribute(this.attr, model);\n } else {\n xmlStream.writeText(model);\n }\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n if (this.attr) {\n this.model = node.attributes[this.attr];\n } else {\n this.text = [];\n }\n }\n }\n\n parseText(text) {\n if (!this.attr) {\n this.text.push(text);\n }\n }\n\n parseClose() {\n if (!this.attr) {\n this.model = this.text.join('');\n }\n return false;\n }\n}\n\nmodule.exports = StringXform;\n", + "const BaseXform = require('./base-xform');\nconst XmlStream = require('../../utils/xml-stream');\n\n// const model = {\n// tag: 'name',\n// $: {attr: 'value'},\n// c: [\n// { tag: 'child' }\n// ],\n// t: 'some text'\n// };\n\nfunction build(xmlStream, model) {\n xmlStream.openNode(model.tag, model.$);\n if (model.c) {\n model.c.forEach(child => {\n build(xmlStream, child);\n });\n }\n if (model.t) {\n xmlStream.writeText(model.t);\n }\n xmlStream.closeNode();\n}\n\nclass StaticXform extends BaseXform {\n constructor(model) {\n super();\n\n // This class is an optimisation for static (unimportant and unchanging) xml\n // It is stateless - apart from its static model and so can be used as a singleton\n // Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else\n // Known issues:\n // since stateless - parseOpen always returns true. Parent xform must know when to start using this xform\n // if the root tag is recursive, the parsing will behave unpredictably\n this._model = model;\n }\n\n render(xmlStream) {\n if (!this._xml) {\n const stream = new XmlStream();\n build(stream, this._model);\n this._xml = stream.xml;\n }\n xmlStream.writeXml(this._xml);\n }\n\n parseOpen() {\n return true;\n }\n\n parseText() {}\n\n parseClose(name) {\n switch (name) {\n case this._model.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = StaticXform;\n", + "const TextXform = require('./text-xform');\nconst RichTextXform = require('./rich-text-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// (its pronounciation in KATAKANA)\n// \n\nclass PhoneticTextXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n r: new RichTextXform(),\n t: new TextXform(),\n };\n }\n\n get tag() {\n return 'rPh';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n sb: model.sb || 0,\n eb: model.eb || 0,\n });\n if (model && model.hasOwnProperty('richText') && model.richText) {\n const {r} = this.map;\n model.richText.forEach(text => {\n r.render(xmlStream, text);\n });\n } else if (model) {\n this.map.t.render(xmlStream, model.text);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n const {name} = node;\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (name === this.tag) {\n this.model = {\n sb: parseInt(node.attributes.sb, 10),\n eb: parseInt(node.attributes.eb, 10),\n };\n return true;\n }\n this.parser = this.map[name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n switch (name) {\n case 'r': {\n let rt = this.model.richText;\n if (!rt) {\n rt = this.model.richText = [];\n }\n rt.push(this.parser.model);\n break;\n }\n case 't':\n this.model.text = this.parser.model;\n break;\n default:\n break;\n }\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = PhoneticTextXform;\n", + "const TextXform = require('./text-xform');\nconst FontXform = require('../style/font-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// \n// \n// \n// \n// \n// \n// \n// is \n// \n\nclass RichTextXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n }\n\n get tag() {\n return 'r';\n }\n\n get textXform() {\n return this._textXform || (this._textXform = new TextXform());\n }\n\n get fontXform() {\n return this._fontXform || (this._fontXform = new FontXform(RichTextXform.FONT_OPTIONS));\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n\n xmlStream.openNode('r');\n if (model.font) {\n this.fontXform.render(xmlStream, model.font);\n }\n this.textXform.render(xmlStream, model.text);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'r':\n this.model = {};\n return true;\n case 't':\n this.parser = this.textXform;\n this.parser.parseOpen(node);\n return true;\n case 'rPr':\n this.parser = this.fontXform;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'r':\n return false;\n case 't':\n this.model.text = this.parser.model;\n this.parser = undefined;\n return true;\n case 'rPr':\n this.model.font = this.parser.model;\n this.parser = undefined;\n return true;\n default:\n if (this.parser) {\n this.parser.parseClose(name);\n }\n return true;\n }\n }\n}\n\nRichTextXform.FONT_OPTIONS = {\n tagName: 'rPr',\n fontNameTag: 'rFont',\n};\n\nmodule.exports = RichTextXform;\n", + "const TextXform = require('./text-xform');\nconst RichTextXform = require('./rich-text-xform');\nconst PhoneticTextXform = require('./phonetic-text-xform');\n\nconst BaseXform = require('../base-xform');\n\n// \n// ...\n// \n// \n// \n// \n\nclass SharedStringXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n\n this.map = {\n r: new RichTextXform(),\n t: new TextXform(),\n rPh: new PhoneticTextXform(),\n };\n }\n\n get tag() {\n return 'si';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n if (model && model.hasOwnProperty('richText') && model.richText) {\n if (model.richText.length) {\n model.richText.forEach(text => {\n this.map.r.render(xmlStream, text);\n });\n } else {\n this.map.t.render(xmlStream, '');\n }\n } else if (model !== undefined && model !== null) {\n this.map.t.render(xmlStream, model);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n const {name} = node;\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (name === this.tag) {\n this.model = {};\n return true;\n }\n this.parser = this.map[name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n switch (name) {\n case 'r': {\n let rt = this.model.richText;\n if (!rt) {\n rt = this.model.richText = [];\n }\n rt.push(this.parser.model);\n break;\n }\n case 't':\n this.model = this.parser.model;\n break;\n default:\n break;\n }\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n return true;\n }\n }\n}\n\nmodule.exports = SharedStringXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\nconst BaseXform = require('../base-xform');\nconst SharedStringXform = require('./shared-string-xform');\n\nclass SharedStringsXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model || {\n values: [],\n count: 0,\n };\n this.hash = Object.create(null);\n this.rich = Object.create(null);\n }\n\n get sharedStringXform() {\n return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform());\n }\n\n get values() {\n return this.model.values;\n }\n\n get uniqueCount() {\n return this.model.values.length;\n }\n\n get count() {\n return this.model.count;\n }\n\n getString(index) {\n return this.model.values[index];\n }\n\n add(value) {\n return value.richText ? this.addRichText(value) : this.addText(value);\n }\n\n addText(value) {\n let index = this.hash[value];\n if (index === undefined) {\n index = this.hash[value] = this.model.values.length;\n this.model.values.push(value);\n }\n this.model.count++;\n return index;\n }\n\n addRichText(value) {\n // TODO: add WeakMap here\n const xml = this.sharedStringXform.toXml(value);\n let index = this.rich[xml];\n if (index === undefined) {\n index = this.rich[xml] = this.model.values.length;\n this.model.values.push(value);\n }\n this.model.count++;\n return index;\n }\n\n // \n // \" uniqueCount=\"<%=count%>\">\n // <%=text%>\n // \n // \n\n render(xmlStream, model) {\n model = model || this._values;\n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('sst', {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n count: model.count,\n uniqueCount: model.values.length,\n });\n\n const sx = this.sharedStringXform;\n model.values.forEach(sharedString => {\n sx.render(xmlStream, sharedString);\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'sst':\n return true;\n case 'si':\n this.parser = this.sharedStringXform;\n this.parser.parseOpen(node);\n return true;\n default:\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.values.push(this.parser.model);\n this.model.count++;\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'sst':\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nmodule.exports = SharedStringsXform;\n", + "const BaseXform = require('../base-xform');\n\n// is \n\nclass TextXform extends BaseXform {\n get tag() {\n return 't';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('t');\n if (/^\\s|\\n|\\s$/.test(model)) {\n xmlStream.addAttribute('xml:space', 'preserve');\n }\n xmlStream.writeText(model);\n xmlStream.closeNode();\n }\n\n get model() {\n return this._text\n .join('')\n .replace(/_x([0-9A-F]{4})_/g, ($0, $1) => String.fromCharCode(parseInt($1, 16)));\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 't':\n this._text = [];\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n this._text.push(text);\n }\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TextXform;\n", + "const Enums = require('../../../doc/enums');\n\nconst utils = require('../../../utils/utils');\nconst BaseXform = require('../base-xform');\n\nconst validation = {\n horizontalValues: [\n 'left',\n 'center',\n 'right',\n 'fill',\n 'centerContinuous',\n 'distributed',\n 'justify',\n ].reduce((p, v) => {\n p[v] = true;\n return p;\n }, {}),\n horizontal(value) {\n return this.horizontalValues[value] ? value : undefined;\n },\n\n verticalValues: ['top', 'middle', 'bottom', 'distributed', 'justify'].reduce((p, v) => {\n p[v] = true;\n return p;\n }, {}),\n vertical(value) {\n if (value === 'middle') return 'center';\n return this.verticalValues[value] ? value : undefined;\n },\n wrapText(value) {\n return value ? true : undefined;\n },\n shrinkToFit(value) {\n return value ? true : undefined;\n },\n textRotation(value) {\n switch (value) {\n case 'vertical':\n return value;\n default:\n value = utils.validInt(value);\n return value >= -90 && value <= 90 ? value : undefined;\n }\n },\n indent(value) {\n value = utils.validInt(value);\n return Math.max(0, value);\n },\n readingOrder(value) {\n switch (value) {\n case 'ltr':\n return Enums.ReadingOrder.LeftToRight;\n case 'rtl':\n return Enums.ReadingOrder.RightToLeft;\n default:\n return undefined;\n }\n },\n};\n\nconst textRotationXform = {\n toXml(textRotation) {\n textRotation = validation.textRotation(textRotation);\n if (textRotation) {\n if (textRotation === 'vertical') {\n return 255;\n }\n\n const tr = Math.round(textRotation);\n if (tr >= 0 && tr <= 90) {\n return tr;\n }\n\n if (tr < 0 && tr >= -90) {\n return 90 - tr;\n }\n }\n return undefined;\n },\n toModel(textRotation) {\n const tr = utils.validInt(textRotation);\n if (tr !== undefined) {\n if (tr === 255) {\n return 'vertical';\n }\n if (tr >= 0 && tr <= 90) {\n return tr;\n }\n if (tr > 90 && tr <= 180) {\n return 90 - tr;\n }\n }\n return undefined;\n },\n};\n\n// Alignment encapsulates translation from style.alignment model to/from xlsx\nclass AlignmentXform extends BaseXform {\n get tag() {\n return 'alignment';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('alignment');\n\n let isValid = false;\n function add(name, value) {\n if (value) {\n xmlStream.addAttribute(name, value);\n isValid = true;\n }\n }\n add('horizontal', validation.horizontal(model.horizontal));\n add('vertical', validation.vertical(model.vertical));\n add('wrapText', validation.wrapText(model.wrapText) ? '1' : false);\n add('shrinkToFit', validation.shrinkToFit(model.shrinkToFit) ? '1' : false);\n add('indent', validation.indent(model.indent));\n add('textRotation', textRotationXform.toXml(model.textRotation));\n add('readingOrder', validation.readingOrder(model.readingOrder));\n\n xmlStream.closeNode();\n\n if (isValid) {\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n\n parseOpen(node) {\n const model = {};\n\n let valid = false;\n function add(truthy, name, value) {\n if (truthy) {\n model[name] = value;\n valid = true;\n }\n }\n add(node.attributes.horizontal, 'horizontal', node.attributes.horizontal);\n add(\n node.attributes.vertical,\n 'vertical',\n node.attributes.vertical === 'center' ? 'middle' : node.attributes.vertical\n );\n add(node.attributes.wrapText, 'wrapText', utils.parseBoolean(node.attributes.wrapText));\n add(node.attributes.shrinkToFit, 'shrinkToFit', utils.parseBoolean(node.attributes.shrinkToFit));\n add(node.attributes.indent, 'indent', parseInt(node.attributes.indent, 10));\n add(\n node.attributes.textRotation,\n 'textRotation',\n textRotationXform.toModel(node.attributes.textRotation)\n );\n add(\n node.attributes.readingOrder,\n 'readingOrder',\n node.attributes.readingOrder === '2' ? 'rtl' : 'ltr'\n );\n\n this.model = valid ? model : null;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = AlignmentXform;\n", + "/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../base-xform');\nconst utils = require('../../../utils/utils');\n\nconst ColorXform = require('./color-xform');\n\nclass EdgeXform extends BaseXform {\n constructor(name) {\n super();\n\n this.name = name;\n this.map = {\n color: new ColorXform(),\n };\n }\n\n get tag() {\n return this.name;\n }\n\n render(xmlStream, model, defaultColor) {\n const color = (model && model.color) || defaultColor || this.defaultColor;\n xmlStream.openNode(this.name);\n if (model && model.style) {\n xmlStream.addAttribute('style', model.style);\n if (color) {\n this.map.color.render(xmlStream, color);\n }\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.name: {\n const {style} = node.attributes;\n if (style) {\n this.model = {\n style,\n };\n } else {\n this.model = undefined;\n }\n return true;\n }\n case 'color':\n this.parser = this.map.color;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n\n if (name === this.name) {\n if (this.map.color.model) {\n if (!this.model) {\n this.model = {};\n }\n this.model.color = this.map.color.model;\n }\n }\n\n return false;\n }\n\n validStyle(value) {\n return EdgeXform.validStyleValues[value];\n }\n}\n\nEdgeXform.validStyleValues = [\n 'thin',\n 'dashed',\n 'dotted',\n 'dashDot',\n 'hair',\n 'dashDotDot',\n 'slantDashDot',\n 'mediumDashed',\n 'mediumDashDotDot',\n 'mediumDashDot',\n 'medium',\n 'double',\n 'thick',\n].reduce((p, v) => {\n p[v] = true;\n return p;\n}, {});\n\n// Border encapsulates translation from border model to/from xlsx\nclass BorderXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n top: new EdgeXform('top'),\n left: new EdgeXform('left'),\n bottom: new EdgeXform('bottom'),\n right: new EdgeXform('right'),\n diagonal: new EdgeXform('diagonal'),\n };\n }\n\n render(xmlStream, model) {\n const {color} = model;\n xmlStream.openNode('border');\n if (model.diagonal && model.diagonal.style) {\n if (model.diagonal.up) {\n xmlStream.addAttribute('diagonalUp', '1');\n }\n if (model.diagonal.down) {\n xmlStream.addAttribute('diagonalDown', '1');\n }\n }\n function add(edgeModel, edgeXform) {\n if (edgeModel && !edgeModel.color && model.color) {\n // don't mess with incoming models\n edgeModel = {\n ...edgeModel,\n color: model.color,\n };\n }\n edgeXform.render(xmlStream, edgeModel, color);\n }\n add(model.left, this.map.left);\n add(model.right, this.map.right);\n add(model.top, this.map.top);\n add(model.bottom, this.map.bottom);\n add(model.diagonal, this.map.diagonal);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'border':\n this.reset();\n this.diagonalUp = utils.parseBoolean(node.attributes.diagonalUp);\n this.diagonalDown = utils.parseBoolean(node.attributes.diagonalDown);\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (name === 'border') {\n const model = (this.model = {});\n const add = function(key, edgeModel, extensions) {\n if (edgeModel) {\n if (extensions) {\n Object.assign(edgeModel, extensions);\n }\n model[key] = edgeModel;\n }\n };\n add('left', this.map.left.model);\n add('right', this.map.right.model);\n add('top', this.map.top.model);\n add('bottom', this.map.bottom.model);\n add('diagonal', this.map.diagonal.model, {up: this.diagonalUp, down: this.diagonalDown});\n }\n return false;\n }\n}\n\nmodule.exports = BorderXform;\n", + "const BaseXform = require('../base-xform');\n\n// Color encapsulates translation from color model to/from xlsx\nclass ColorXform extends BaseXform {\n constructor(name) {\n super();\n\n // this.name controls the xm node name\n this.name = name || 'color';\n }\n\n get tag() {\n return this.name;\n }\n\n render(xmlStream, model) {\n if (model) {\n xmlStream.openNode(this.name);\n if (model.argb) {\n xmlStream.addAttribute('rgb', model.argb);\n } else if (model.theme !== undefined) {\n xmlStream.addAttribute('theme', model.theme);\n if (model.tint !== undefined) {\n xmlStream.addAttribute('tint', model.tint);\n }\n } else if (model.indexed !== undefined) {\n xmlStream.addAttribute('indexed', model.indexed);\n } else {\n xmlStream.addAttribute('auto', '1');\n }\n xmlStream.closeNode();\n return true;\n }\n return false;\n }\n\n parseOpen(node) {\n if (node.name === this.name) {\n if (node.attributes.rgb) {\n this.model = {argb: node.attributes.rgb};\n } else if (node.attributes.theme) {\n this.model = {theme: parseInt(node.attributes.theme, 10)};\n if (node.attributes.tint) {\n this.model.tint = parseFloat(node.attributes.tint);\n }\n } else if (node.attributes.indexed) {\n this.model = {indexed: parseInt(node.attributes.indexed, 10)};\n } else {\n this.model = undefined;\n }\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = ColorXform;\n", + "const BaseXform = require('../base-xform');\n\nconst AlignmentXform = require('./alignment-xform');\nconst BorderXform = require('./border-xform');\nconst FillXform = require('./fill-xform');\nconst FontXform = require('./font-xform');\nconst NumFmtXform = require('./numfmt-xform');\nconst ProtectionXform = require('./protection-xform');\n\n// \n// Optional \n// Optional \n// \n\n// Style assists translation from style model to/from xlsx\nclass DxfXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n alignment: new AlignmentXform(),\n border: new BorderXform(),\n fill: new FillXform(),\n font: new FontXform(),\n numFmt: new NumFmtXform(),\n protection: new ProtectionXform(),\n };\n }\n\n get tag() {\n return 'dxf';\n }\n\n // how do we generate dxfid?\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag);\n\n if (model.font) {\n this.map.font.render(xmlStream, model.font);\n }\n if (model.numFmt && model.numFmtId) {\n const numFmtModel = {id: model.numFmtId, formatCode: model.numFmt};\n this.map.numFmt.render(xmlStream, numFmtModel);\n }\n if (model.fill) {\n this.map.fill.render(xmlStream, model.fill);\n }\n if (model.alignment) {\n this.map.alignment.render(xmlStream, model.alignment);\n }\n if (model.border) {\n this.map.border.render(xmlStream, model.border);\n }\n if (model.protection) {\n this.map.protection.render(xmlStream, model.protection);\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case this.tag:\n // this node is often repeated. Need to reset children\n this.reset();\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n if (name === this.tag) {\n this.model = {\n alignment: this.map.alignment.model,\n border: this.map.border.model,\n fill: this.map.fill.model,\n font: this.map.font.model,\n numFmt: this.map.numFmt.model,\n protection: this.map.protection.model,\n };\n return false;\n }\n\n return true;\n }\n}\n\nmodule.exports = DxfXform;\n", + "/* eslint-disable max-classes-per-file */\nconst BaseXform = require('../base-xform');\n\nconst ColorXform = require('./color-xform');\n\nclass StopXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n color: new ColorXform(),\n };\n }\n\n get tag() {\n return 'stop';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('stop');\n xmlStream.addAttribute('position', model.position);\n this.map.color.render(xmlStream, model.color);\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'stop':\n this.model = {\n position: parseFloat(node.attributes.position),\n };\n return true;\n case 'color':\n this.parser = this.map.color;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.color = this.parser.model;\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\nclass PatternFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fgColor: new ColorXform('fgColor'),\n bgColor: new ColorXform('bgColor'),\n };\n }\n\n get name() {\n return 'pattern';\n }\n\n get tag() {\n return 'patternFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('patternFill');\n xmlStream.addAttribute('patternType', model.pattern);\n if (model.fgColor) {\n this.map.fgColor.render(xmlStream, model.fgColor);\n }\n if (model.bgColor) {\n this.map.bgColor.render(xmlStream, model.bgColor);\n }\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'patternFill':\n this.model = {\n type: 'pattern',\n pattern: node.attributes.patternType,\n };\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n if (this.parser.model) {\n this.model[name] = this.parser.model;\n }\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\nclass GradientFillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n stop: new StopXform(),\n };\n // if (model) {\n // this.gradient = model.gradient;\n // if (model.center) {\n // this.center = model.center;\n // }\n // if (model.degree !== undefined) {\n // this.degree = model.degree;\n // }\n // this.stops = model.stops.map(function(stop) { return new StopXform(stop); });\n // } else {\n // this.stops = [];\n // }\n }\n\n get name() {\n return 'gradient';\n }\n\n get tag() {\n return 'gradientFill';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('gradientFill');\n switch (model.gradient) {\n case 'angle':\n xmlStream.addAttribute('degree', model.degree);\n break;\n case 'path':\n xmlStream.addAttribute('type', 'path');\n if (model.center.left) {\n xmlStream.addAttribute('left', model.center.left);\n if (model.center.right === undefined) {\n xmlStream.addAttribute('right', model.center.left);\n }\n }\n if (model.center.right) {\n xmlStream.addAttribute('right', model.center.right);\n }\n if (model.center.top) {\n xmlStream.addAttribute('top', model.center.top);\n if (model.center.bottom === undefined) {\n xmlStream.addAttribute('bottom', model.center.top);\n }\n }\n if (model.center.bottom) {\n xmlStream.addAttribute('bottom', model.center.bottom);\n }\n break;\n\n default:\n break;\n }\n\n const stopXform = this.map.stop;\n model.stops.forEach(stopModel => {\n stopXform.render(xmlStream, stopModel);\n });\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'gradientFill': {\n const model = (this.model = {\n stops: [],\n });\n if (node.attributes.degree) {\n model.gradient = 'angle';\n model.degree = parseInt(node.attributes.degree, 10);\n } else if (node.attributes.type === 'path') {\n model.gradient = 'path';\n model.center = {\n left: node.attributes.left ? parseFloat(node.attributes.left) : 0,\n top: node.attributes.top ? parseFloat(node.attributes.top) : 0,\n };\n if (node.attributes.right !== node.attributes.left) {\n model.center.right = node.attributes.right ? parseFloat(node.attributes.right) : 0;\n }\n if (node.attributes.bottom !== node.attributes.top) {\n model.center.bottom = node.attributes.bottom ? parseFloat(node.attributes.bottom) : 0;\n }\n }\n return true;\n }\n\n case 'stop':\n this.parser = this.map.stop;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.stops.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n}\n\n// Fill encapsulates translation from fill model to/from xlsx\nclass FillXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n patternFill: new PatternFillXform(),\n gradientFill: new GradientFillXform(),\n };\n }\n\n get tag() {\n return 'fill';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('fill');\n switch (model.type) {\n case 'pattern':\n this.map.patternFill.render(xmlStream, model);\n break;\n case 'gradient':\n this.map.gradientFill.render(xmlStream, model);\n break;\n default:\n xmlStream.rollback();\n return;\n }\n xmlStream.closeNode();\n xmlStream.commit();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'fill':\n this.model = {};\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model = this.parser.model;\n this.model.type = this.parser.name;\n this.parser = undefined;\n }\n return true;\n }\n return false;\n }\n\n validStyle(value) {\n return FillXform.validPatternValues[value];\n }\n}\n\nFillXform.validPatternValues = [\n 'none',\n 'solid',\n 'darkVertical',\n 'darkGray',\n 'mediumGray',\n 'lightGray',\n 'gray125',\n 'gray0625',\n 'darkHorizontal',\n 'darkVertical',\n 'darkDown',\n 'darkUp',\n 'darkGrid',\n 'darkTrellis',\n 'lightHorizontal',\n 'lightVertical',\n 'lightDown',\n 'lightUp',\n 'lightGrid',\n 'lightTrellis',\n 'lightGrid',\n].reduce((p, v) => {\n p[v] = true;\n return p;\n}, {});\n\nFillXform.StopXform = StopXform;\nFillXform.PatternFillXform = PatternFillXform;\nFillXform.GradientFillXform = GradientFillXform;\n\nmodule.exports = FillXform;\n", + "'use strict';\n\nconst ColorXform = require('./color-xform');\nconst BooleanXform = require('../simple/boolean-xform');\nconst IntegerXform = require('../simple/integer-xform');\nconst StringXform = require('../simple/string-xform');\nconst UnderlineXform = require('./underline-xform');\n\nconst _ = require('../../../utils/under-dash');\nconst BaseXform = require('../base-xform');\n\n// Font encapsulates translation from font model to xlsx\nclass FontXform extends BaseXform {\n constructor(options) {\n super();\n\n this.options = options || FontXform.OPTIONS;\n\n this.map = {\n b: {prop: 'bold', xform: new BooleanXform({tag: 'b', attr: 'val'})},\n i: {prop: 'italic', xform: new BooleanXform({tag: 'i', attr: 'val'})},\n u: {prop: 'underline', xform: new UnderlineXform()},\n charset: {prop: 'charset', xform: new IntegerXform({tag: 'charset', attr: 'val'})},\n color: {prop: 'color', xform: new ColorXform()},\n condense: {prop: 'condense', xform: new BooleanXform({tag: 'condense', attr: 'val'})},\n extend: {prop: 'extend', xform: new BooleanXform({tag: 'extend', attr: 'val'})},\n family: {prop: 'family', xform: new IntegerXform({tag: 'family', attr: 'val'})},\n outline: {prop: 'outline', xform: new BooleanXform({tag: 'outline', attr: 'val'})},\n vertAlign: {prop: 'vertAlign', xform: new StringXform({tag: 'vertAlign', attr: 'val'})},\n scheme: {prop: 'scheme', xform: new StringXform({tag: 'scheme', attr: 'val'})},\n shadow: {prop: 'shadow', xform: new BooleanXform({tag: 'shadow', attr: 'val'})},\n strike: {prop: 'strike', xform: new BooleanXform({tag: 'strike', attr: 'val'})},\n sz: {prop: 'size', xform: new IntegerXform({tag: 'sz', attr: 'val'})},\n };\n this.map[this.options.fontNameTag] = {\n prop: 'name',\n xform: new StringXform({tag: this.options.fontNameTag, attr: 'val'}),\n };\n }\n\n get tag() {\n return this.options.tagName;\n }\n\n render(xmlStream, model) {\n const {map} = this;\n\n xmlStream.openNode(this.options.tagName);\n _.each(this.map, (defn, tag) => {\n map[tag].xform.render(xmlStream, model[defn.prop]);\n });\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n if (this.map[node.name]) {\n this.parser = this.map[node.name].xform;\n return this.parser.parseOpen(node);\n }\n switch (node.name) {\n case this.options.tagName:\n this.model = {};\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser && !this.parser.parseClose(name)) {\n const item = this.map[name];\n if (this.parser.model) {\n this.model[item.prop] = this.parser.model;\n }\n this.parser = undefined;\n return true;\n }\n switch (name) {\n case this.options.tagName:\n return false;\n default:\n return true;\n }\n }\n}\n\nFontXform.OPTIONS = {\n tagName: 'font',\n fontNameTag: 'name',\n};\n\nmodule.exports = FontXform;\n", + "const _ = require('../../../utils/under-dash');\nconst defaultNumFormats = require('../../defaultnumformats');\n\nconst BaseXform = require('../base-xform');\n\nfunction hashDefaultFormats() {\n const hash = {};\n _.each(defaultNumFormats, (dnf, id) => {\n if (dnf.f) {\n hash[dnf.f] = parseInt(id, 10);\n }\n // at some point, add the other cultures here...\n });\n return hash;\n}\nconst defaultFmtHash = hashDefaultFormats();\n\n// NumFmt encapsulates translation between number format and xlsx\nclass NumFmtXform extends BaseXform {\n constructor(id, formatCode) {\n super();\n\n this.id = id;\n this.formatCode = formatCode;\n }\n\n get tag() {\n return 'numFmt';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode('numFmt', {numFmtId: model.id, formatCode: model.formatCode});\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'numFmt':\n this.model = {\n id: parseInt(node.attributes.numFmtId, 10),\n formatCode: node.attributes.formatCode.replace(/[\\\\](.)/g, '$1'),\n };\n return true;\n default:\n return false;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nNumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) {\n return defaultFmtHash[formatCode];\n};\n\nNumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) {\n return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f;\n};\n\nmodule.exports = NumFmtXform;\n", + "const BaseXform = require('../base-xform');\n\nconst validation = {\n boolean(value, dflt) {\n if (value === undefined) {\n return dflt;\n }\n return value;\n },\n};\n\n// Protection encapsulates translation from style.protection model to/from xlsx\nclass ProtectionXform extends BaseXform {\n get tag() {\n return 'protection';\n }\n\n render(xmlStream, model) {\n xmlStream.addRollback();\n xmlStream.openNode('protection');\n\n let isValid = false;\n function add(name, value) {\n if (value !== undefined) {\n xmlStream.addAttribute(name, value);\n isValid = true;\n }\n }\n add('locked', validation.boolean(model.locked, true) ? undefined : '0');\n add('hidden', validation.boolean(model.hidden, false) ? '1' : undefined);\n\n xmlStream.closeNode();\n\n if (isValid) {\n xmlStream.commit();\n } else {\n xmlStream.rollback();\n }\n }\n\n parseOpen(node) {\n const model = {\n locked: !(node.attributes.locked === '0'),\n hidden: node.attributes.hidden === '1',\n };\n\n // only want to record models that differ from defaults\n const isSignificant = !model.locked || model.hidden;\n\n this.model = isSignificant ? model : null;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = ProtectionXform;\n", + "const BaseXform = require('../base-xform');\n\nconst AlignmentXform = require('./alignment-xform');\nconst ProtectionXform = require('./protection-xform');\n\n// \n// Optional \n// Optional \n// \n\n// Style assists translation from style model to/from xlsx\nclass StyleXform extends BaseXform {\n constructor(options) {\n super();\n\n this.xfId = !!(options && options.xfId);\n this.map = {\n alignment: new AlignmentXform(),\n protection: new ProtectionXform(),\n };\n }\n\n get tag() {\n return 'xf';\n }\n\n render(xmlStream, model) {\n xmlStream.openNode('xf', {\n numFmtId: model.numFmtId || 0,\n fontId: model.fontId || 0,\n fillId: model.fillId || 0,\n borderId: model.borderId || 0,\n });\n if (this.xfId) {\n xmlStream.addAttribute('xfId', model.xfId || 0);\n }\n\n if (model.numFmtId) {\n xmlStream.addAttribute('applyNumberFormat', '1');\n }\n if (model.fontId) {\n xmlStream.addAttribute('applyFont', '1');\n }\n if (model.fillId) {\n xmlStream.addAttribute('applyFill', '1');\n }\n if (model.borderId) {\n xmlStream.addAttribute('applyBorder', '1');\n }\n if (model.alignment) {\n xmlStream.addAttribute('applyAlignment', '1');\n }\n if (model.protection) {\n xmlStream.addAttribute('applyProtection', '1');\n }\n\n /**\n * Rendering tags causes close of XML stream.\n * Therefore adding attributes must be done before rendering tags.\n */\n\n if (model.alignment) {\n this.map.alignment.render(xmlStream, model.alignment);\n }\n if (model.protection) {\n this.map.protection.render(xmlStream, model.protection);\n }\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n // used during sax parsing of xml to build font object\n switch (node.name) {\n case 'xf':\n this.model = {\n numFmtId: parseInt(node.attributes.numFmtId, 10),\n fontId: parseInt(node.attributes.fontId, 10),\n fillId: parseInt(node.attributes.fillId, 10),\n borderId: parseInt(node.attributes.borderId, 10),\n };\n if (this.xfId) {\n this.model.xfId = parseInt(node.attributes.xfId, 10);\n }\n return true;\n case 'alignment':\n this.parser = this.map.alignment;\n this.parser.parseOpen(node);\n return true;\n case 'protection':\n this.parser = this.map.protection;\n this.parser.parseOpen(node);\n return true;\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n if (this.map.protection === this.parser) {\n this.model.protection = this.parser.model;\n } else {\n this.model.alignment = this.parser.model;\n }\n this.parser = undefined;\n }\n return true;\n }\n return name !== 'xf';\n }\n}\n\nmodule.exports = StyleXform;\n", + "/* eslint-disable max-classes-per-file */\nconst Enums = require('../../../doc/enums');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst FontXform = require('./font-xform');\nconst FillXform = require('./fill-xform');\nconst BorderXform = require('./border-xform');\nconst NumFmtXform = require('./numfmt-xform');\nconst StyleXform = require('./style-xform');\nconst DxfXform = require('./dxf-xform');\n\n// custom numfmt ids start here\nconst NUMFMT_BASE = 164;\n\n// =============================================================================\n// StylesXform is used to generate and parse the styles.xml file\n// it manages the collections of fonts, number formats, alignments, etc\nclass StylesXform extends BaseXform {\n constructor(initialise) {\n super();\n\n this.map = {\n numFmts: new ListXform({tag: 'numFmts', count: true, childXform: new NumFmtXform()}),\n fonts: new ListXform({\n tag: 'fonts',\n count: true,\n childXform: new FontXform(),\n $: {'x14ac:knownFonts': 1},\n }),\n fills: new ListXform({tag: 'fills', count: true, childXform: new FillXform()}),\n borders: new ListXform({tag: 'borders', count: true, childXform: new BorderXform()}),\n cellStyleXfs: new ListXform({tag: 'cellStyleXfs', count: true, childXform: new StyleXform()}),\n cellXfs: new ListXform({\n tag: 'cellXfs',\n count: true,\n childXform: new StyleXform({xfId: true}),\n }),\n dxfs: new ListXform({tag: 'dxfs', always: true, count: true, childXform: new DxfXform()}),\n\n // for style manager\n numFmt: new NumFmtXform(),\n font: new FontXform(),\n fill: new FillXform(),\n border: new BorderXform(),\n style: new StyleXform({xfId: true}),\n\n cellStyles: StylesXform.STATIC_XFORMS.cellStyles,\n tableStyles: StylesXform.STATIC_XFORMS.tableStyles,\n extLst: StylesXform.STATIC_XFORMS.extLst,\n };\n\n if (initialise) {\n // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing\n this.init();\n }\n }\n\n initIndex() {\n this.index = {\n style: {},\n numFmt: {},\n numFmtNextId: 164, // start custom format ids here\n font: {},\n border: {},\n fill: {},\n };\n }\n\n init() {\n // Prepare for Style Manager role\n this.model = {\n styles: [],\n numFmts: [],\n fonts: [],\n borders: [],\n fills: [],\n dxfs: [],\n };\n\n this.initIndex();\n\n // default (zero) border\n this._addBorder({});\n\n // add default (all zero) style\n this._addStyle({numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0});\n\n // add default fills\n this._addFill({type: 'pattern', pattern: 'none'});\n this._addFill({type: 'pattern', pattern: 'gray125'});\n\n this.weakMap = new WeakMap();\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n //\n // \n xmlStream.openXml(XmlStream.StdDocAttributes);\n\n xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES);\n\n if (this.index) {\n // model has been built by style manager role (contains xml)\n if (model.numFmts && model.numFmts.length) {\n xmlStream.openNode('numFmts', {count: model.numFmts.length});\n model.numFmts.forEach(numFmtXml => {\n xmlStream.writeXml(numFmtXml);\n });\n xmlStream.closeNode();\n }\n\n if (!model.fonts.length) {\n // default (zero) font\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\n }\n xmlStream.openNode('fonts', {count: model.fonts.length, 'x14ac:knownFonts': 1});\n model.fonts.forEach(fontXml => {\n xmlStream.writeXml(fontXml);\n });\n xmlStream.closeNode();\n\n xmlStream.openNode('fills', {count: model.fills.length});\n model.fills.forEach(fillXml => {\n xmlStream.writeXml(fillXml);\n });\n xmlStream.closeNode();\n\n xmlStream.openNode('borders', {count: model.borders.length});\n model.borders.forEach(borderXml => {\n xmlStream.writeXml(borderXml);\n });\n xmlStream.closeNode();\n\n this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);\n\n xmlStream.openNode('cellXfs', {count: model.styles.length});\n model.styles.forEach(styleXml => {\n xmlStream.writeXml(styleXml);\n });\n xmlStream.closeNode();\n } else {\n // model is plain JSON and needs to be xformed\n this.map.numFmts.render(xmlStream, model.numFmts);\n this.map.fonts.render(xmlStream, model.fonts);\n this.map.fills.render(xmlStream, model.fills);\n this.map.borders.render(xmlStream, model.borders);\n this.map.cellStyleXfs.render(xmlStream, [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}]);\n this.map.cellXfs.render(xmlStream, model.styles);\n }\n\n StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream);\n\n this.map.dxfs.render(xmlStream, model.dxfs);\n\n StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream);\n StylesXform.STATIC_XFORMS.extLst.render(xmlStream);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'styleSheet':\n this.initIndex();\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'styleSheet': {\n this.model = {};\n const add = (propName, xform) => {\n if (xform.model && xform.model.length) {\n this.model[propName] = xform.model;\n }\n };\n add('numFmts', this.map.numFmts);\n add('fonts', this.map.fonts);\n add('fills', this.map.fills);\n add('borders', this.map.borders);\n add('styles', this.map.cellXfs);\n add('dxfs', this.map.dxfs);\n\n // index numFmts\n this.index = {\n model: [],\n numFmt: [],\n };\n if (this.model.numFmts) {\n const numFmtIndex = this.index.numFmt;\n this.model.numFmts.forEach(numFmt => {\n numFmtIndex[numFmt.id] = numFmt.formatCode;\n });\n }\n\n return false;\n }\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n // add a cell's style model to the collection\n // each style property is processed and cross-referenced, etc.\n // the styleId is returned. Note: cellType is used when numFmt not defined\n addStyleModel(model, cellType) {\n if (!model) {\n return 0;\n }\n\n // if we have no default font, add it here now\n if (!this.model.fonts.length) {\n // default (zero) font\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\n }\n\n // if we have seen this style object before, assume it has the same styleId\n if (this.weakMap && this.weakMap.has(model)) {\n return this.weakMap.get(model);\n }\n\n const style = {};\n cellType = cellType || Enums.ValueType.Number;\n\n if (model.numFmt) {\n style.numFmtId = this._addNumFmtStr(model.numFmt);\n } else {\n switch (cellType) {\n case Enums.ValueType.Number:\n style.numFmtId = this._addNumFmtStr('General');\n break;\n case Enums.ValueType.Date:\n style.numFmtId = this._addNumFmtStr('mm-dd-yy');\n break;\n default:\n break;\n }\n }\n\n if (model.font) {\n style.fontId = this._addFont(model.font);\n }\n\n if (model.border) {\n style.borderId = this._addBorder(model.border);\n }\n\n if (model.fill) {\n style.fillId = this._addFill(model.fill);\n }\n\n if (model.alignment) {\n style.alignment = model.alignment;\n }\n\n if (model.protection) {\n style.protection = model.protection;\n }\n\n const styleId = this._addStyle(style);\n if (this.weakMap) {\n this.weakMap.set(model, styleId);\n }\n return styleId;\n }\n\n // given a styleId (i.e. s=\"n\"), get the cell's style model\n // objects are shared where possible.\n getStyleModel(id) {\n // if the style doesn't exist return null\n const style = this.model.styles[id];\n if (!style) return null;\n\n // have we built this model before?\n let model = this.index.model[id];\n if (model) return model;\n\n // build a new model\n model = this.index.model[id] = {};\n\n // -------------------------------------------------------\n // number format\n if (style.numFmtId) {\n const numFmt = this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId);\n if (numFmt) {\n model.numFmt = numFmt;\n }\n }\n\n function addStyle(name, group, styleId) {\n if (styleId || styleId === 0) {\n const part = group[styleId];\n if (part) {\n model[name] = part;\n }\n }\n }\n\n addStyle('font', this.model.fonts, style.fontId);\n addStyle('border', this.model.borders, style.borderId);\n addStyle('fill', this.model.fills, style.fillId);\n\n // -------------------------------------------------------\n // alignment\n if (style.alignment) {\n model.alignment = style.alignment;\n }\n\n // -------------------------------------------------------\n // protection\n if (style.protection) {\n model.protection = style.protection;\n }\n\n return model;\n }\n\n addDxfStyle(style) {\n if (style.numFmt) {\n // register numFmtId to use it during dxf-xform rendering\n style.numFmtId = this._addNumFmtStr(style.numFmt);\n }\n\n this.model.dxfs.push(style);\n return this.model.dxfs.length - 1;\n }\n\n getDxfStyle(id) {\n return this.model.dxfs[id];\n }\n\n // =========================================================================\n // Private Interface\n _addStyle(style) {\n const xml = this.map.style.toXml(style);\n let index = this.index.style[xml];\n if (index === undefined) {\n index = this.index.style[xml] = this.model.styles.length;\n this.model.styles.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Number Formats\n _addNumFmtStr(formatCode) {\n // check if default format\n let index = NumFmtXform.getDefaultFmtId(formatCode);\n if (index !== undefined) return index;\n\n // check if already in\n index = this.index.numFmt[formatCode];\n if (index !== undefined) return index;\n\n index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length;\n const xml = this.map.numFmt.toXml({id: index, formatCode});\n this.model.numFmts.push(xml);\n return index;\n }\n\n // =========================================================================\n // Fonts\n _addFont(font) {\n const xml = this.map.font.toXml(font);\n let index = this.index.font[xml];\n if (index === undefined) {\n index = this.index.font[xml] = this.model.fonts.length;\n this.model.fonts.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Borders\n _addBorder(border) {\n const xml = this.map.border.toXml(border);\n let index = this.index.border[xml];\n if (index === undefined) {\n index = this.index.border[xml] = this.model.borders.length;\n this.model.borders.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n // Fills\n _addFill(fill) {\n const xml = this.map.fill.toXml(fill);\n let index = this.index.fill[xml];\n if (index === undefined) {\n index = this.index.fill[xml] = this.model.fills.length;\n this.model.fills.push(xml);\n }\n return index;\n }\n\n // =========================================================================\n}\n\nStylesXform.STYLESHEET_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'x14ac x16r2',\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\n 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main',\n};\nStylesXform.STATIC_XFORMS = {\n cellStyles: new StaticXform({\n tag: 'cellStyles',\n $: {count: 1},\n c: [{tag: 'cellStyle', $: {name: 'Normal', xfId: 0, builtinId: 0}}],\n }),\n dxfs: new StaticXform({tag: 'dxfs', $: {count: 0}}),\n tableStyles: new StaticXform({\n tag: 'tableStyles',\n $: {count: 0, defaultTableStyle: 'TableStyleMedium2', defaultPivotStyle: 'PivotStyleLight16'},\n }),\n extLst: new StaticXform({\n tag: 'extLst',\n c: [\n {\n tag: 'ext',\n $: {\n uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}',\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\n },\n c: [{tag: 'x14:slicerStyles', $: {defaultSlicerStyle: 'SlicerStyleLight1'}}],\n },\n {\n tag: 'ext',\n $: {\n uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n },\n c: [{tag: 'x15:timelineStyles', $: {defaultTimelineStyle: 'TimeSlicerStyleLight1'}}],\n },\n ],\n }),\n};\n\n// the stylemanager mock acts like StyleManager except that it always returns 0 or {}\nclass StylesXformMock extends StylesXform {\n constructor() {\n super();\n\n this.model = {\n styles: [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}],\n numFmts: [],\n fonts: [{size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'}],\n borders: [{}],\n fills: [\n {type: 'pattern', pattern: 'none'},\n {type: 'pattern', pattern: 'gray125'},\n ],\n };\n }\n\n // =========================================================================\n // Style Manager Interface\n\n // override normal behaviour - consume and dispose\n parseStream(stream) {\n stream.autodrain();\n return Promise.resolve();\n }\n\n // add a cell's style model to the collection\n // each style property is processed and cross-referenced, etc.\n // the styleId is returned. Note: cellType is used when numFmt not defined\n addStyleModel(model, cellType) {\n switch (cellType) {\n case Enums.ValueType.Date:\n return this.dateStyleId;\n default:\n return 0;\n }\n }\n\n get dateStyleId() {\n if (!this._dateStyleId) {\n const dateStyle = {\n numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy'),\n };\n this._dateStyleId = this.model.styles.length;\n this.model.styles.push(dateStyle);\n }\n return this._dateStyleId;\n }\n\n // given a styleId (i.e. s=\"n\"), get the cell's style model\n // objects are shared where possible.\n getStyleModel(/* id */) {\n return {};\n }\n}\n\nStylesXform.Mock = StylesXformMock;\n\nmodule.exports = StylesXform;\n", + "const BaseXform = require('../base-xform');\n\nclass UnderlineXform extends BaseXform {\n constructor(model) {\n super();\n\n this.model = model;\n }\n\n get tag() {\n return 'u';\n }\n\n render(xmlStream, model) {\n model = model || this.model;\n\n if (model === true) {\n xmlStream.leafNode('u');\n } else {\n const attr = UnderlineXform.Attributes[model];\n if (attr) {\n xmlStream.leafNode('u', attr);\n }\n }\n }\n\n parseOpen(node) {\n if (node.name === 'u') {\n this.model = node.attributes.val || true;\n }\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nUnderlineXform.Attributes = {\n single: {},\n double: {val: 'double'},\n singleAccounting: {val: 'singleAccounting'},\n doubleAccounting: {val: 'doubleAccounting'},\n};\n\nmodule.exports = UnderlineXform;\n", + "const BaseXform = require('../base-xform');\n\nconst FilterColumnXform = require('./filter-column-xform');\n\nclass AutoFilterXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n filterColumn: new FilterColumnXform(),\n };\n }\n\n get tag() {\n return 'autoFilter';\n }\n\n prepare(model) {\n model.columns.forEach((column, index) => {\n this.map.filterColumn.prepare(column, {index});\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openNode(this.tag, {ref: model.autoFilterRef});\n\n model.columns.forEach(column => {\n this.map.filterColumn.render(xmlStream, column);\n });\n\n xmlStream.closeNode();\n return true;\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case this.tag:\n this.model = {\n autoFilterRef: node.attributes.ref,\n columns: [],\n };\n return true;\n\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.columns.push(this.parser.model);\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n return false;\n default:\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\n }\n }\n}\n\nmodule.exports = AutoFilterXform;\n", + "const BaseXform = require('../base-xform');\n\nclass CustomFilterXform extends BaseXform {\n get tag() {\n return 'customFilter';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n val: model.val,\n operator: model.operator,\n });\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n val: node.attributes.val,\n operator: node.attributes.operator,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = CustomFilterXform;\n", + "const BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst CustomFilterXform = require('./custom-filter-xform');\nconst FilterXform = require('./filter-xform');\n\nclass FilterColumnXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n customFilters: new ListXform({\n tag: 'customFilters',\n count: false,\n empty: true,\n childXform: new CustomFilterXform(),\n }),\n filters: new ListXform({\n tag: 'filters',\n count: false,\n empty: true,\n childXform: new FilterXform(),\n }),\n };\n }\n\n get tag() {\n return 'filterColumn';\n }\n\n prepare(model, options) {\n model.colId = options.index.toString();\n }\n\n render(xmlStream, model) {\n if (model.customFilters) {\n xmlStream.openNode(this.tag, {\n colId: model.colId,\n hiddenButton: model.filterButton ? '0' : '1',\n });\n\n this.map.customFilters.render(xmlStream, model.customFilters);\n\n xmlStream.closeNode();\n return true;\n }\n xmlStream.leafNode(this.tag, {\n colId: model.colId,\n hiddenButton: model.filterButton ? '0' : '1',\n });\n return true;\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {attributes} = node;\n switch (node.name) {\n case this.tag:\n this.model = {\n filterButton: attributes.hiddenButton === '0',\n };\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parseOpen(node);\n return true;\n }\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\n }\n }\n\n parseText() {}\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.customFilters = this.map.customFilters.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n}\n\nmodule.exports = FilterColumnXform;\n", + "const BaseXform = require('../base-xform');\n\nclass FilterXform extends BaseXform {\n get tag() {\n return 'filter';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n val: model.val,\n });\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n this.model = {\n val: node.attributes.val,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = FilterXform;\n", + "const BaseXform = require('../base-xform');\n\nclass TableColumnXform extends BaseXform {\n get tag() {\n return 'tableColumn';\n }\n\n prepare(model, options) {\n model.id = options.index + 1;\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n id: model.id.toString(),\n name: model.name,\n totalsRowLabel: model.totalsRowLabel,\n totalsRowFunction: model.totalsRowFunction,\n dxfId: model.dxfId,\n });\n return true;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n const {attributes} = node;\n this.model = {\n name: attributes.name,\n totalsRowLabel: attributes.totalsRowLabel,\n totalsRowFunction: attributes.totalsRowFunction,\n dxfId: attributes.dxfId,\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TableColumnXform;\n", + "const BaseXform = require('../base-xform');\n\nclass TableStyleInfoXform extends BaseXform {\n get tag() {\n return 'tableStyleInfo';\n }\n\n render(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n name: model.theme ? model.theme : undefined,\n showFirstColumn: model.showFirstColumn ? '1' : '0',\n showLastColumn: model.showLastColumn ? '1' : '0',\n showRowStripes: model.showRowStripes ? '1' : '0',\n showColumnStripes: model.showColumnStripes ? '1' : '0',\n });\n return true;\n }\n\n parseOpen(node) {\n if (node.name === this.tag) {\n const {attributes} = node;\n this.model = {\n theme: attributes.name ? attributes.name : null,\n showFirstColumn: attributes.showFirstColumn === '1',\n showLastColumn: attributes.showLastColumn === '1',\n showRowStripes: attributes.showRowStripes === '1',\n showColumnStripes: attributes.showColumnStripes === '1',\n };\n return true;\n }\n return false;\n }\n\n parseText() {}\n\n parseClose() {\n return false;\n }\n}\n\nmodule.exports = TableStyleInfoXform;\n", + "const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst AutoFilterXform = require('./auto-filter-xform');\nconst TableColumnXform = require('./table-column-xform');\nconst TableStyleInfoXform = require('./table-style-info-xform');\n\nclass TableXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n autoFilter: new AutoFilterXform(),\n tableColumns: new ListXform({\n tag: 'tableColumns',\n count: true,\n empty: true,\n childXform: new TableColumnXform(),\n }),\n tableStyleInfo: new TableStyleInfoXform(),\n };\n }\n\n prepare(model, options) {\n this.map.autoFilter.prepare(model);\n this.map.tableColumns.prepare(model.columns, options);\n }\n\n get tag() {\n return 'table';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, {\n ...TableXform.TABLE_ATTRIBUTES,\n id: model.id,\n name: model.name,\n displayName: model.displayName || model.name,\n ref: model.tableRef,\n totalsRowCount: model.totalsRow ? '1' : undefined,\n totalsRowShown: model.totalsRow ? undefined : '1',\n headerRowCount: model.headerRow ? '1' : '0',\n });\n\n this.map.autoFilter.render(xmlStream, model);\n this.map.tableColumns.render(xmlStream, model.columns);\n this.map.tableStyleInfo.render(xmlStream, model.style);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {name, attributes} = node;\n switch (name) {\n case this.tag:\n this.reset();\n this.model = {\n name: attributes.name,\n displayName: attributes.displayName || attributes.name,\n tableRef: attributes.ref,\n totalsRow: attributes.totalsRowCount === '1',\n headerRow: attributes.headerRowCount === '1',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.columns = this.map.tableColumns.model;\n if (this.map.autoFilter.model) {\n this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef;\n this.map.autoFilter.model.columns.forEach((column, index) => {\n this.model.columns[index].filterButton = column.filterButton;\n });\n }\n this.model.style = this.map.tableStyleInfo.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n // fetch the dfxs from styles\n model.columns.forEach(column => {\n if (column.dxfId !== undefined) {\n column.style = options.styles.getDxfStyle(column.dxfId);\n }\n });\n }\n}\n\nTableXform.TABLE_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'xr xr3',\n 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',\n 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3',\n // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}',\n};\n\nmodule.exports = TableXform;\n", + "const fs = require('fs');\nconst JSZip = require('jszip');\nconst {PassThrough} = require('readable-stream');\nconst ZipStream = require('../utils/zip-stream');\nconst StreamBuf = require('../utils/stream-buf');\n\nconst utils = require('../utils/utils');\nconst XmlStream = require('../utils/xml-stream');\nconst {bufferToString} = require('../utils/browser-buffer-decode');\n\nconst StylesXform = require('./xform/style/styles-xform');\n\nconst CoreXform = require('./xform/core/core-xform');\nconst SharedStringsXform = require('./xform/strings/shared-strings-xform');\nconst RelationshipsXform = require('./xform/core/relationships-xform');\nconst ContentTypesXform = require('./xform/core/content-types-xform');\nconst AppXform = require('./xform/core/app-xform');\nconst WorkbookXform = require('./xform/book/workbook-xform');\nconst WorksheetXform = require('./xform/sheet/worksheet-xform');\nconst DrawingXform = require('./xform/drawing/drawing-xform');\nconst TableXform = require('./xform/table/table-xform');\nconst CommentsXform = require('./xform/comment/comments-xform');\nconst VmlNotesXform = require('./xform/comment/vml-notes-xform');\n\nconst theme1Xml = require('./xml/theme1');\n\nfunction fsReadFileAsync(filename, options) {\n return new Promise((resolve, reject) => {\n fs.readFile(filename, options, (error, data) => {\n if (error) {\n reject(error);\n } else {\n resolve(data);\n }\n });\n });\n}\n\nclass XLSX {\n constructor(workbook) {\n this.workbook = workbook;\n }\n\n // ===============================================================================\n // Workbook\n // =========================================================================\n // Read\n\n async readFile(filename, options) {\n if (!(await utils.fs.exists(filename))) {\n throw new Error(`File not found: ${filename}`);\n }\n const stream = fs.createReadStream(filename);\n try {\n const workbook = await this.read(stream, options);\n stream.close();\n return workbook;\n } catch (error) {\n stream.close();\n throw error;\n }\n }\n\n parseRels(stream) {\n const xform = new RelationshipsXform();\n return xform.parseStream(stream);\n }\n\n parseWorkbook(stream) {\n const xform = new WorkbookXform();\n return xform.parseStream(stream);\n }\n\n parseSharedStrings(stream) {\n const xform = new SharedStringsXform();\n return xform.parseStream(stream);\n }\n\n reconcile(model, options) {\n const workbookXform = new WorkbookXform();\n const worksheetXform = new WorksheetXform(options);\n const drawingXform = new DrawingXform();\n const tableXform = new TableXform();\n\n workbookXform.reconcile(model);\n\n // reconcile drawings with their rels\n const drawingOptions = {\n media: model.media,\n mediaIndex: model.mediaIndex,\n };\n Object.keys(model.drawings).forEach(name => {\n const drawing = model.drawings[name];\n const drawingRel = model.drawingRels[name];\n if (drawingRel) {\n drawingOptions.rels = drawingRel.reduce((o, rel) => {\n o[rel.Id] = rel;\n return o;\n }, {});\n (drawing.anchors || []).forEach(anchor => {\n const hyperlinks = anchor.picture && anchor.picture.hyperlinks;\n if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) {\n hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target;\n delete hyperlinks.rId;\n }\n });\n drawingXform.reconcile(drawing, drawingOptions);\n }\n });\n\n // reconcile tables with the default styles\n const tableOptions = {\n styles: model.styles,\n };\n Object.values(model.tables).forEach(table => {\n tableXform.reconcile(table, tableOptions);\n });\n\n const sheetOptions = {\n styles: model.styles,\n sharedStrings: model.sharedStrings,\n media: model.media,\n mediaIndex: model.mediaIndex,\n date1904: model.properties && model.properties.date1904,\n drawings: model.drawings,\n comments: model.comments,\n tables: model.tables,\n vmlDrawings: model.vmlDrawings,\n };\n model.worksheets.forEach(worksheet => {\n worksheet.relationships = model.worksheetRels[worksheet.sheetNo];\n worksheetXform.reconcile(worksheet, sheetOptions);\n });\n\n // delete unnecessary parts\n delete model.worksheetHash;\n delete model.worksheetRels;\n delete model.globalRels;\n delete model.sharedStrings;\n delete model.workbookRels;\n delete model.sheetDefs;\n delete model.styles;\n delete model.mediaIndex;\n delete model.drawings;\n delete model.drawingRels;\n delete model.vmlDrawings;\n }\n\n async _processWorksheetEntry(stream, model, sheetNo, options, path) {\n const xform = new WorksheetXform(options);\n const worksheet = await xform.parseStream(stream);\n worksheet.sheetNo = sheetNo;\n model.worksheetHash[path] = worksheet;\n model.worksheets.push(worksheet);\n }\n\n async _processCommentEntry(stream, model, name) {\n const xform = new CommentsXform();\n const comments = await xform.parseStream(stream);\n model.comments[`../${name}.xml`] = comments;\n }\n\n async _processTableEntry(stream, model, name) {\n const xform = new TableXform();\n const table = await xform.parseStream(stream);\n model.tables[`../tables/${name}.xml`] = table;\n }\n\n async _processWorksheetRelsEntry(stream, model, sheetNo) {\n const xform = new RelationshipsXform();\n const relationships = await xform.parseStream(stream);\n model.worksheetRels[sheetNo] = relationships;\n }\n\n async _processMediaEntry(entry, model, filename) {\n const lastDot = filename.lastIndexOf('.');\n // if we can't determine extension, ignore it\n if (lastDot >= 1) {\n const extension = filename.substr(lastDot + 1);\n const name = filename.substr(0, lastDot);\n await new Promise((resolve, reject) => {\n const streamBuf = new StreamBuf();\n streamBuf.on('finish', () => {\n model.mediaIndex[filename] = model.media.length;\n model.mediaIndex[name] = model.media.length;\n const medium = {\n type: 'image',\n name,\n extension,\n buffer: streamBuf.toBuffer(),\n };\n model.media.push(medium);\n resolve();\n });\n entry.on('error', error => {\n reject(error);\n });\n entry.pipe(streamBuf);\n });\n }\n }\n\n async _processDrawingEntry(entry, model, name) {\n const xform = new DrawingXform();\n const drawing = await xform.parseStream(entry);\n model.drawings[name] = drawing;\n }\n\n async _processDrawingRelsEntry(entry, model, name) {\n const xform = new RelationshipsXform();\n const relationships = await xform.parseStream(entry);\n model.drawingRels[name] = relationships;\n }\n\n async _processVmlDrawingEntry(entry, model, name) {\n const xform = new VmlNotesXform();\n const vmlDrawing = await xform.parseStream(entry);\n model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing;\n }\n\n async _processThemeEntry(entry, model, name) {\n await new Promise((resolve, reject) => {\n // TODO: stream entry into buffer and store the xml in the model.themes[]\n const stream = new StreamBuf();\n entry.on('error', reject);\n stream.on('error', reject);\n stream.on('finish', () => {\n model.themes[name] = stream.read().toString();\n resolve();\n });\n entry.pipe(stream);\n });\n }\n\n /**\n * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\n */\n createInputStream() {\n throw new Error(\n '`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\n );\n }\n\n async read(stream, options) {\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old streams\n if (!stream[Symbol.asyncIterator] && stream.pipe) {\n stream = stream.pipe(new PassThrough());\n }\n const chunks = [];\n for await (const chunk of stream) {\n chunks.push(chunk);\n }\n return this.load(Buffer.concat(chunks), options);\n }\n\n async load(data, options) {\n let buffer;\n if (options && options.base64) {\n buffer = Buffer.from(data.toString(), 'base64');\n } else {\n buffer = data;\n }\n\n const model = {\n worksheets: [],\n worksheetHash: {},\n worksheetRels: [],\n themes: {},\n media: [],\n mediaIndex: {},\n drawings: {},\n drawingRels: {},\n comments: {},\n tables: {},\n vmlDrawings: {},\n };\n\n const zip = await JSZip.loadAsync(buffer);\n for (const entry of Object.values(zip.files)) {\n /* eslint-disable no-await-in-loop */\n if (!entry.dir) {\n let entryName = entry.name;\n if (entryName[0] === '/') {\n entryName = entryName.substr(1);\n }\n let stream;\n if (\n entryName.match(/xl\\/media\\//) ||\n // themes are not parsed as stream\n entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/)\n ) {\n stream = new PassThrough();\n stream.write(await entry.async('nodebuffer'));\n } else {\n // use object mode to avoid buffer-string convention\n stream = new PassThrough({\n writableObjectMode: true,\n readableObjectMode: true,\n });\n let content;\n // https://www.npmjs.com/package/process\n if (process.browser) {\n // running in browser, use TextDecoder if possible\n content = bufferToString(await entry.async('nodebuffer'));\n } else {\n // running in node.js\n content = await entry.async('string');\n }\n const chunkSize = 16 * 1024;\n for (let i = 0; i < content.length; i += chunkSize) {\n stream.write(content.substring(i, i + chunkSize));\n }\n }\n stream.end();\n switch (entryName) {\n case '_rels/.rels':\n model.globalRels = await this.parseRels(stream);\n break;\n\n case 'xl/workbook.xml': {\n const workbook = await this.parseWorkbook(stream);\n model.sheets = workbook.sheets;\n model.definedNames = workbook.definedNames;\n model.views = workbook.views;\n model.properties = workbook.properties;\n model.calcProperties = workbook.calcProperties;\n break;\n }\n\n case 'xl/_rels/workbook.xml.rels':\n model.workbookRels = await this.parseRels(stream);\n break;\n\n case 'xl/sharedStrings.xml':\n model.sharedStrings = new SharedStringsXform();\n await model.sharedStrings.parseStream(stream);\n break;\n\n case 'xl/styles.xml':\n model.styles = new StylesXform();\n await model.styles.parseStream(stream);\n break;\n\n case 'docProps/app.xml': {\n const appXform = new AppXform();\n const appProperties = await appXform.parseStream(stream);\n model.company = appProperties.company;\n model.manager = appProperties.manager;\n break;\n }\n\n case 'docProps/core.xml': {\n const coreXform = new CoreXform();\n const coreProperties = await coreXform.parseStream(stream);\n Object.assign(model, coreProperties);\n break;\n }\n\n default: {\n let match = entryName.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/);\n if (match) {\n await this._processWorksheetEntry(stream, model, match[1], options, entryName);\n break;\n }\n match = entryName.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/);\n if (match) {\n await this._processWorksheetRelsEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/);\n if (match) {\n await this._processThemeEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/media\\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/);\n if (match) {\n await this._processMediaEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/([a-zA-Z0-9]+)[.]xml/);\n if (match) {\n await this._processDrawingEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/(comments\\d+)[.]xml/);\n if (match) {\n await this._processCommentEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/tables\\/(table\\d+)[.]xml/);\n if (match) {\n await this._processTableEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/_rels\\/([a-zA-Z0-9]+)[.]xml[.]rels/);\n if (match) {\n await this._processDrawingRelsEntry(stream, model, match[1]);\n break;\n }\n match = entryName.match(/xl\\/drawings\\/(vmlDrawing\\d+)[.]vml/);\n if (match) {\n await this._processVmlDrawingEntry(stream, model, match[1]);\n break;\n }\n }\n }\n }\n }\n\n this.reconcile(model, options);\n\n // apply model\n this.workbook.model = model;\n return this.workbook;\n }\n\n // =========================================================================\n // Write\n\n async addMedia(zip, model) {\n await Promise.all(\n model.media.map(async medium => {\n if (medium.type === 'image') {\n const filename = `xl/media/${medium.name}.${medium.extension}`;\n if (medium.filename) {\n const data = await fsReadFileAsync(medium.filename);\n return zip.append(data, {name: filename});\n }\n if (medium.buffer) {\n return zip.append(medium.buffer, {name: filename});\n }\n if (medium.base64) {\n const dataimg64 = medium.base64;\n const content = dataimg64.substring(dataimg64.indexOf(',') + 1);\n return zip.append(content, {name: filename, base64: true});\n }\n }\n throw new Error('Unsupported media');\n })\n );\n }\n\n addDrawings(zip, model) {\n const drawingXform = new DrawingXform();\n const relsXform = new RelationshipsXform();\n\n model.worksheets.forEach(worksheet => {\n const {drawing} = worksheet;\n if (drawing) {\n drawingXform.prepare(drawing, {});\n let xml = drawingXform.toXml(drawing);\n zip.append(xml, {name: `xl/drawings/${drawing.name}.xml`});\n\n xml = relsXform.toXml(drawing.rels);\n zip.append(xml, {name: `xl/drawings/_rels/${drawing.name}.xml.rels`});\n }\n });\n }\n\n addTables(zip, model) {\n const tableXform = new TableXform();\n\n model.worksheets.forEach(worksheet => {\n const {tables} = worksheet;\n tables.forEach(table => {\n tableXform.prepare(table, {});\n const tableXml = tableXform.toXml(table);\n zip.append(tableXml, {name: `xl/tables/${table.target}`});\n });\n });\n }\n\n async addContentTypes(zip, model) {\n const xform = new ContentTypesXform();\n const xml = xform.toXml(model);\n zip.append(xml, {name: '[Content_Types].xml'});\n }\n\n async addApp(zip, model) {\n const xform = new AppXform();\n const xml = xform.toXml(model);\n zip.append(xml, {name: 'docProps/app.xml'});\n }\n\n async addCore(zip, model) {\n const coreXform = new CoreXform();\n zip.append(coreXform.toXml(model), {name: 'docProps/core.xml'});\n }\n\n async addThemes(zip, model) {\n const themes = model.themes || {theme1: theme1Xml};\n Object.keys(themes).forEach(name => {\n const xml = themes[name];\n const path = `xl/theme/${name}.xml`;\n zip.append(xml, {name: path});\n });\n }\n\n async addOfficeRels(zip) {\n const xform = new RelationshipsXform();\n const xml = xform.toXml([\n {Id: 'rId1', Type: XLSX.RelType.OfficeDocument, Target: 'xl/workbook.xml'},\n {Id: 'rId2', Type: XLSX.RelType.CoreProperties, Target: 'docProps/core.xml'},\n {Id: 'rId3', Type: XLSX.RelType.ExtenderProperties, Target: 'docProps/app.xml'},\n ]);\n zip.append(xml, {name: '_rels/.rels'});\n }\n\n async addWorkbookRels(zip, model) {\n let count = 1;\n const relationships = [\n {Id: `rId${count++}`, Type: XLSX.RelType.Styles, Target: 'styles.xml'},\n {Id: `rId${count++}`, Type: XLSX.RelType.Theme, Target: 'theme/theme1.xml'},\n ];\n if (model.sharedStrings.count) {\n relationships.push({\n Id: `rId${count++}`,\n Type: XLSX.RelType.SharedStrings,\n Target: 'sharedStrings.xml',\n });\n }\n model.worksheets.forEach(worksheet => {\n worksheet.rId = `rId${count++}`;\n relationships.push({\n Id: worksheet.rId,\n Type: XLSX.RelType.Worksheet,\n Target: `worksheets/sheet${worksheet.id}.xml`,\n });\n });\n const xform = new RelationshipsXform();\n const xml = xform.toXml(relationships);\n zip.append(xml, {name: 'xl/_rels/workbook.xml.rels'});\n }\n\n async addSharedStrings(zip, model) {\n if (model.sharedStrings && model.sharedStrings.count) {\n zip.append(model.sharedStrings.xml, {name: 'xl/sharedStrings.xml'});\n }\n }\n\n async addStyles(zip, model) {\n const {xml} = model.styles;\n if (xml) {\n zip.append(xml, {name: 'xl/styles.xml'});\n }\n }\n\n async addWorkbook(zip, model) {\n const xform = new WorkbookXform();\n zip.append(xform.toXml(model), {name: 'xl/workbook.xml'});\n }\n\n async addWorksheets(zip, model) {\n // preparation phase\n const worksheetXform = new WorksheetXform();\n const relationshipsXform = new RelationshipsXform();\n const commentsXform = new CommentsXform();\n const vmlNotesXform = new VmlNotesXform();\n\n // write sheets\n model.worksheets.forEach(worksheet => {\n let xmlStream = new XmlStream();\n worksheetXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/worksheets/sheet${worksheet.id}.xml`});\n\n if (worksheet.rels && worksheet.rels.length) {\n xmlStream = new XmlStream();\n relationshipsXform.render(xmlStream, worksheet.rels);\n zip.append(xmlStream.xml, {name: `xl/worksheets/_rels/sheet${worksheet.id}.xml.rels`});\n }\n\n if (worksheet.comments.length > 0) {\n xmlStream = new XmlStream();\n commentsXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/comments${worksheet.id}.xml`});\n\n xmlStream = new XmlStream();\n vmlNotesXform.render(xmlStream, worksheet);\n zip.append(xmlStream.xml, {name: `xl/drawings/vmlDrawing${worksheet.id}.vml`});\n }\n });\n }\n\n _finalize(zip) {\n return new Promise((resolve, reject) => {\n zip.on('finish', () => {\n resolve(this);\n });\n zip.on('error', reject);\n zip.finalize();\n });\n }\n\n prepareModel(model, options) {\n // ensure following properties have sane values\n model.creator = model.creator || 'ExcelJS';\n model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS';\n model.created = model.created || new Date();\n model.modified = model.modified || new Date();\n\n model.useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : true;\n model.useStyles = options.useStyles !== undefined ? options.useStyles : true;\n\n // Manage the shared strings\n model.sharedStrings = new SharedStringsXform();\n\n // add a style manager to handle cell formats, fonts, etc.\n model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock();\n\n // prepare all of the things before the render\n const workbookXform = new WorkbookXform();\n const worksheetXform = new WorksheetXform();\n\n workbookXform.prepare(model);\n\n const worksheetOptions = {\n sharedStrings: model.sharedStrings,\n styles: model.styles,\n date1904: model.properties.date1904,\n drawingsCount: 0,\n media: model.media,\n };\n worksheetOptions.drawings = model.drawings = [];\n worksheetOptions.commentRefs = model.commentRefs = [];\n let tableCount = 0;\n model.tables = [];\n model.worksheets.forEach(worksheet => {\n // assign unique filenames to tables\n worksheet.tables.forEach(table => {\n tableCount++;\n table.target = `table${tableCount}.xml`;\n table.id = tableCount;\n model.tables.push(table);\n });\n\n worksheetXform.prepare(worksheet, worksheetOptions);\n });\n\n // TODO: workbook drawing list\n }\n\n async write(stream, options) {\n options = options || {};\n const {model} = this.workbook;\n const zip = new ZipStream.ZipWriter(options.zip);\n zip.pipe(stream);\n\n this.prepareModel(model, options);\n\n // render\n await this.addContentTypes(zip, model);\n await this.addOfficeRels(zip, model);\n await this.addWorkbookRels(zip, model);\n await this.addWorksheets(zip, model);\n await this.addSharedStrings(zip, model); // always after worksheets\n await this.addDrawings(zip, model);\n await this.addTables(zip, model);\n await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]);\n await this.addMedia(zip, model);\n await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]);\n await this.addWorkbook(zip, model);\n return this._finalize(zip);\n }\n\n writeFile(filename, options) {\n const stream = fs.createWriteStream(filename);\n\n return new Promise((resolve, reject) => {\n stream.on('finish', () => {\n resolve();\n });\n stream.on('error', error => {\n reject(error);\n });\n\n this.write(stream, options).then(() => {\n stream.end();\n }).catch(err=>{\n reject(err);\n });\n });\n }\n\n async writeBuffer(options) {\n const stream = new StreamBuf();\n await this.write(stream, options);\n return stream.read();\n }\n}\n\nXLSX.RelType = require('./rel-type');\n\nmodule.exports = XLSX;\n", + "/* eslint-disable */\nmodule.exports =\n '\\n ';\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvFormatterStream = void 0;\nconst stream_1 = require(\"stream\");\nconst formatter_1 = require(\"./formatter\");\nclass CsvFormatterStream extends stream_1.Transform {\n constructor(formatterOptions) {\n super({\n writableObjectMode: formatterOptions.objectMode\n });\n this.hasWrittenBOM = false;\n this.formatterOptions = formatterOptions;\n this.rowFormatter = new formatter_1.RowFormatter(formatterOptions);\n // if writeBOM is false then set to true\n // if writeBOM is true then set to false by default so it is written out\n this.hasWrittenBOM = !formatterOptions.writeBOM;\n }\n transform(transformFunction) {\n this.rowFormatter.rowTransform = transformFunction;\n return this;\n }\n _transform(row, encoding, cb) {\n let cbCalled = false;\n try {\n if (!this.hasWrittenBOM) {\n this.push(this.formatterOptions.BOM);\n this.hasWrittenBOM = true;\n }\n this.rowFormatter.format(row, (err, rows) => {\n if (err) {\n cbCalled = true;\n return cb(err);\n }\n if (rows) {\n rows.forEach(r => {\n this.push(Buffer.from(r, 'utf8'));\n });\n }\n cbCalled = true;\n return cb();\n });\n } catch (e) {\n if (cbCalled) {\n throw e;\n }\n cb(e);\n }\n }\n _flush(cb) {\n this.rowFormatter.finish((err, rows) => {\n if (err) {\n return cb(err);\n }\n if (rows) {\n rows.forEach(r => {\n this.push(Buffer.from(r, 'utf8'));\n });\n }\n return cb();\n });\n }\n}\nexports.CsvFormatterStream = CsvFormatterStream;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHJlYW1fMSIsInJlcXVpcmUiLCJmb3JtYXR0ZXJfMSIsIkNzdkZvcm1hdHRlclN0cmVhbSIsIlRyYW5zZm9ybSIsImNvbnN0cnVjdG9yIiwiZm9ybWF0dGVyT3B0aW9ucyIsIndyaXRhYmxlT2JqZWN0TW9kZSIsIm9iamVjdE1vZGUiLCJoYXNXcml0dGVuQk9NIiwicm93Rm9ybWF0dGVyIiwiUm93Rm9ybWF0dGVyIiwid3JpdGVCT00iLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsInJvd1RyYW5zZm9ybSIsIl90cmFuc2Zvcm0iLCJyb3ciLCJlbmNvZGluZyIsImNiIiwiY2JDYWxsZWQiLCJwdXNoIiwiQk9NIiwiZm9ybWF0IiwiZXJyIiwicm93cyIsImZvckVhY2giLCJyIiwiQnVmZmVyIiwiZnJvbSIsImUiLCJfZmx1c2giLCJmaW5pc2giLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NzdkZvcm1hdHRlclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBR0EsTUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBRUEsTUFBYUUsa0JBQWlELFNBQVFILFFBQUEsQ0FBQUksU0FBUztFQU8zRUMsWUFBbUJDLGdCQUF3QztJQUN2RCxLQUFLLENBQUM7TUFBRUMsa0JBQWtCLEVBQUVELGdCQUFnQixDQUFDRTtJQUFVLENBQUUsQ0FBQztJQUh0RCxLQUFBQyxhQUFhLEdBQUcsS0FBSztJQUl6QixJQUFJLENBQUNILGdCQUFnQixHQUFHQSxnQkFBZ0I7SUFDeEMsSUFBSSxDQUFDSSxZQUFZLEdBQUcsSUFBSVIsV0FBQSxDQUFBUyxZQUFZLENBQUNMLGdCQUFnQixDQUFDO0lBQ3REO0lBQ0E7SUFDQSxJQUFJLENBQUNHLGFBQWEsR0FBRyxDQUFDSCxnQkFBZ0IsQ0FBQ00sUUFBUTtFQUNuRDtFQUVPQyxTQUFTQSxDQUFDQyxpQkFBNkM7SUFDMUQsSUFBSSxDQUFDSixZQUFZLENBQUNLLFlBQVksR0FBR0QsaUJBQWlCO0lBQ2xELE9BQU8sSUFBSTtFQUNmO0VBRU9FLFVBQVVBLENBQUNDLEdBQU0sRUFBRUMsUUFBZ0IsRUFBRUMsRUFBcUI7SUFDN0QsSUFBSUMsUUFBUSxHQUFHLEtBQUs7SUFDcEIsSUFBSTtNQUNBLElBQUksQ0FBQyxJQUFJLENBQUNYLGFBQWEsRUFBRTtRQUNyQixJQUFJLENBQUNZLElBQUksQ0FBQyxJQUFJLENBQUNmLGdCQUFnQixDQUFDZ0IsR0FBRyxDQUFDO1FBQ3BDLElBQUksQ0FBQ2IsYUFBYSxHQUFHLElBQUk7O01BRTdCLElBQUksQ0FBQ0MsWUFBWSxDQUFDYSxNQUFNLENBQUNOLEdBQUcsRUFBRSxDQUFDTyxHQUFHLEVBQUVDLElBQUksS0FBVTtRQUM5QyxJQUFJRCxHQUFHLEVBQUU7VUFDTEosUUFBUSxHQUFHLElBQUk7VUFDZixPQUFPRCxFQUFFLENBQUNLLEdBQUcsQ0FBQzs7UUFFbEIsSUFBSUMsSUFBSSxFQUFFO1VBQ05BLElBQUksQ0FBQ0MsT0FBTyxDQUFFQyxDQUFDLElBQVU7WUFDckIsSUFBSSxDQUFDTixJQUFJLENBQUNPLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7VUFDckMsQ0FBQyxDQUFDOztRQUVOUCxRQUFRLEdBQUcsSUFBSTtRQUNmLE9BQU9ELEVBQUUsRUFBRTtNQUNmLENBQUMsQ0FBQztLQUNMLENBQUMsT0FBT1csQ0FBQyxFQUFFO01BQ1IsSUFBSVYsUUFBUSxFQUFFO1FBQ1YsTUFBTVUsQ0FBQzs7TUFFWFgsRUFBRSxDQUFDVyxDQUFDLENBQUM7O0VBRWI7RUFFT0MsTUFBTUEsQ0FBQ1osRUFBcUI7SUFDL0IsSUFBSSxDQUFDVCxZQUFZLENBQUNzQixNQUFNLENBQUMsQ0FBQ1IsR0FBRyxFQUFFQyxJQUFJLEtBQVU7TUFDekMsSUFBSUQsR0FBRyxFQUFFO1FBQ0wsT0FBT0wsRUFBRSxDQUFDSyxHQUFHLENBQUM7O01BRWxCLElBQUlDLElBQUksRUFBRTtRQUNOQSxJQUFJLENBQUNDLE9BQU8sQ0FBRUMsQ0FBQyxJQUFVO1VBQ3JCLElBQUksQ0FBQ04sSUFBSSxDQUFDTyxNQUFNLENBQUNDLElBQUksQ0FBQ0YsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQzs7TUFFTixPQUFPUixFQUFFLEVBQUU7SUFDZixDQUFDLENBQUM7RUFDTjs7QUE3REpjLE9BQUEsQ0FBQTlCLGtCQUFBLEdBQUFBLGtCQUFBIn0=", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FormatterOptions = void 0;\nclass FormatterOptions {\n constructor() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _a;\n this.objectMode = true;\n this.delimiter = ',';\n this.rowDelimiter = '\\n';\n this.quote = '\"';\n this.escape = this.quote;\n this.quoteColumns = false;\n this.quoteHeaders = this.quoteColumns;\n this.headers = null;\n this.includeEndRowDelimiter = false;\n this.writeBOM = false;\n this.BOM = '\\ufeff';\n this.alwaysWriteHeaders = false;\n Object.assign(this, opts || {});\n if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') {\n this.quoteHeaders = this.quoteColumns;\n }\n if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) {\n this.quote = '\"';\n } else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) {\n this.quote = '';\n }\n if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') {\n this.escape = this.quote;\n }\n this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true);\n this.headers = Array.isArray(this.headers) ? this.headers : null;\n this.escapedQuote = `${this.escape}${this.quote}`;\n }\n}\nexports.FormatterOptions = FormatterOptions;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtYXR0ZXJPcHRpb25zIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib2JqZWN0TW9kZSIsImRlbGltaXRlciIsInJvd0RlbGltaXRlciIsInF1b3RlIiwiZXNjYXBlIiwicXVvdGVDb2x1bW5zIiwicXVvdGVIZWFkZXJzIiwiaGVhZGVycyIsImluY2x1ZGVFbmRSb3dEZWxpbWl0ZXIiLCJ3cml0ZUJPTSIsIkJPTSIsImFsd2F5c1dyaXRlSGVhZGVycyIsIk9iamVjdCIsImFzc2lnbiIsInNob3VsZFdyaXRlSGVhZGVycyIsIl9hIiwid3JpdGVIZWFkZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwiZXNjYXBlZFF1b3RlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Gb3JtYXR0ZXJPcHRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3QkEsTUFBYUEsZ0JBQWdCO0VBK0J6QkMsWUFBQSxFQUF3RDtJQUFBLElBQXJDQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFtQyxFQUFFOztJQTlCeEMsS0FBQUcsVUFBVSxHQUFZLElBQUk7SUFFMUIsS0FBQUMsU0FBUyxHQUFXLEdBQUc7SUFFdkIsS0FBQUMsWUFBWSxHQUFXLElBQUk7SUFFM0IsS0FBQUMsS0FBSyxHQUFXLEdBQUc7SUFFbkIsS0FBQUMsTUFBTSxHQUFXLElBQUksQ0FBQ0QsS0FBSztJQUUzQixLQUFBRSxZQUFZLEdBQWlCLEtBQUs7SUFFbEMsS0FBQUMsWUFBWSxHQUFpQixJQUFJLENBQUNELFlBQVk7SUFFOUMsS0FBQUUsT0FBTyxHQUFvQixJQUFJO0lBRS9CLEtBQUFDLHNCQUFzQixHQUFZLEtBQUs7SUFNdkMsS0FBQUMsUUFBUSxHQUFZLEtBQUs7SUFJekIsS0FBQUMsR0FBRyxHQUFXLFFBQVE7SUFFdEIsS0FBQUMsa0JBQWtCLEdBQVksS0FBSztJQUcvQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxFQUFFakIsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUUvQixJQUFJLFFBQU9BLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFVSxZQUFZLE1BQUssV0FBVyxFQUFFO01BQzNDLElBQUksQ0FBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQ0QsWUFBWTs7SUFFekMsSUFBSSxDQUFBVCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRU8sS0FBSyxNQUFLLElBQUksRUFBRTtNQUN0QixJQUFJLENBQUNBLEtBQUssR0FBRyxHQUFHO0tBQ25CLE1BQU0sSUFBSSxDQUFBUCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRU8sS0FBSyxNQUFLLEtBQUssRUFBRTtNQUM5QixJQUFJLENBQUNBLEtBQUssR0FBRyxFQUFFOztJQUVuQixJQUFJLFFBQU9QLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFUSxNQUFNLE1BQUssUUFBUSxFQUFFO01BQ2xDLElBQUksQ0FBQ0EsTUFBTSxHQUFHLElBQUksQ0FBQ0QsS0FBSzs7SUFFNUIsSUFBSSxDQUFDVyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDUCxPQUFPLEtBQUksQ0FBQVEsRUFBQSxHQUFDbkIsSUFBSSxDQUFDb0IsWUFBWSxjQUFBRCxFQUFBLGNBQUFBLEVBQUEsR0FBSSxJQUFJLENBQUM7SUFDdkUsSUFBSSxDQUFDUixPQUFPLEdBQUdVLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ1gsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDQSxPQUFPLEdBQUcsSUFBSTtJQUNoRSxJQUFJLENBQUNZLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQ0QsS0FBSyxFQUFFO0VBQ3JEOztBQWhESmlCLE9BQUEsQ0FBQTFCLGdCQUFBLEdBQUFBLGdCQUFBIn0=", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldFormatter = void 0;\nconst lodash_isboolean_1 = __importDefault(require(\"lodash.isboolean\"));\nconst lodash_isnil_1 = __importDefault(require(\"lodash.isnil\"));\nconst lodash_escaperegexp_1 = __importDefault(require(\"lodash.escaperegexp\"));\nclass FieldFormatter {\n constructor(formatterOptions) {\n this._headers = null;\n this.formatterOptions = formatterOptions;\n if (formatterOptions.headers !== null) {\n this.headers = formatterOptions.headers;\n }\n this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g');\n const escapePattern = `[${formatterOptions.delimiter}${lodash_escaperegexp_1.default(formatterOptions.rowDelimiter)}|\\r|\\n]`;\n this.ESCAPE_REGEXP = new RegExp(escapePattern);\n }\n set headers(headers) {\n this._headers = headers;\n }\n shouldQuote(fieldIndex, isHeader) {\n const quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns;\n if (lodash_isboolean_1.default(quoteConfig)) {\n return quoteConfig;\n }\n if (Array.isArray(quoteConfig)) {\n return quoteConfig[fieldIndex];\n }\n if (this._headers !== null) {\n return quoteConfig[this._headers[fieldIndex]];\n }\n return false;\n }\n format(field, fieldIndex, isHeader) {\n const preparedField = `${lodash_isnil_1.default(field) ? '' : field}`.replace(/\\0/g, '');\n const {\n formatterOptions\n } = this;\n if (formatterOptions.quote !== '') {\n const shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1;\n if (shouldEscape) {\n return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote));\n }\n }\n const hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1;\n if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) {\n return this.quoteField(preparedField);\n }\n return preparedField;\n }\n quoteField(field) {\n const {\n quote\n } = this.formatterOptions;\n return `${quote}${field}${quote}`;\n }\n}\nexports.FieldFormatter = FieldFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXNib29sZWFuXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZXF1aXJlIiwibG9kYXNoX2lzbmlsXzEiLCJsb2Rhc2hfZXNjYXBlcmVnZXhwXzEiLCJGaWVsZEZvcm1hdHRlciIsImNvbnN0cnVjdG9yIiwiZm9ybWF0dGVyT3B0aW9ucyIsIl9oZWFkZXJzIiwiaGVhZGVycyIsIlJFUExBQ0VfUkVHRVhQIiwiUmVnRXhwIiwicXVvdGUiLCJlc2NhcGVQYXR0ZXJuIiwiZGVsaW1pdGVyIiwiZGVmYXVsdCIsInJvd0RlbGltaXRlciIsIkVTQ0FQRV9SRUdFWFAiLCJzaG91bGRRdW90ZSIsImZpZWxkSW5kZXgiLCJpc0hlYWRlciIsInF1b3RlQ29uZmlnIiwicXVvdGVIZWFkZXJzIiwicXVvdGVDb2x1bW5zIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwiZmllbGQiLCJwcmVwYXJlZEZpZWxkIiwicmVwbGFjZSIsInNob3VsZEVzY2FwZSIsImluZGV4T2YiLCJxdW90ZUZpZWxkIiwiZXNjYXBlZFF1b3RlIiwiaGFzRXNjYXBlQ2hhcmFjdGVycyIsInNlYXJjaCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZm9ybWF0dGVyL0ZpZWxkRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE1BQUFBLGtCQUFBLEdBQUFDLGVBQUEsQ0FBQUMsT0FBQTtBQUNBLE1BQUFDLGNBQUEsR0FBQUYsZUFBQSxDQUFBQyxPQUFBO0FBQ0EsTUFBQUUscUJBQUEsR0FBQUgsZUFBQSxDQUFBQyxPQUFBO0FBSUEsTUFBYUcsY0FBYztFQVN2QkMsWUFBbUJDLGdCQUF3QztJQU5uRCxLQUFBQyxRQUFRLEdBQW9CLElBQUk7SUFPcEMsSUFBSSxDQUFDRCxnQkFBZ0IsR0FBR0EsZ0JBQWdCO0lBQ3hDLElBQUlBLGdCQUFnQixDQUFDRSxPQUFPLEtBQUssSUFBSSxFQUFFO01BQ25DLElBQUksQ0FBQ0EsT0FBTyxHQUFHRixnQkFBZ0IsQ0FBQ0UsT0FBTzs7SUFFM0MsSUFBSSxDQUFDQyxjQUFjLEdBQUcsSUFBSUMsTUFBTSxDQUFDSixnQkFBZ0IsQ0FBQ0ssS0FBSyxFQUFFLEdBQUcsQ0FBQztJQUM3RCxNQUFNQyxhQUFhLEdBQUcsSUFBSU4sZ0JBQWdCLENBQUNPLFNBQVMsR0FBR1YscUJBQUEsQ0FBQVcsT0FBWSxDQUFDUixnQkFBZ0IsQ0FBQ1MsWUFBWSxDQUFDLFNBQVM7SUFDM0csSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSU4sTUFBTSxDQUFDRSxhQUFhLENBQUM7RUFDbEQ7RUFFQSxJQUFXSixPQUFPQSxDQUFDQSxPQUFpQjtJQUNoQyxJQUFJLENBQUNELFFBQVEsR0FBR0MsT0FBTztFQUMzQjtFQUVRUyxXQUFXQSxDQUFDQyxVQUFrQixFQUFFQyxRQUFpQjtJQUNyRCxNQUFNQyxXQUFXLEdBQUdELFFBQVEsR0FBRyxJQUFJLENBQUNiLGdCQUFnQixDQUFDZSxZQUFZLEdBQUcsSUFBSSxDQUFDZixnQkFBZ0IsQ0FBQ2dCLFlBQVk7SUFDdEcsSUFBSXZCLGtCQUFBLENBQUFlLE9BQVMsQ0FBQ00sV0FBVyxDQUFDLEVBQUU7TUFDeEIsT0FBT0EsV0FBVzs7SUFFdEIsSUFBSUcsS0FBSyxDQUFDQyxPQUFPLENBQUNKLFdBQVcsQ0FBQyxFQUFFO01BQzVCLE9BQU9BLFdBQVcsQ0FBQ0YsVUFBVSxDQUFDOztJQUVsQyxJQUFJLElBQUksQ0FBQ1gsUUFBUSxLQUFLLElBQUksRUFBRTtNQUN4QixPQUFPYSxXQUFXLENBQUMsSUFBSSxDQUFDYixRQUFRLENBQUNXLFVBQVUsQ0FBQyxDQUFDOztJQUVqRCxPQUFPLEtBQUs7RUFDaEI7RUFFT08sTUFBTUEsQ0FBQ0MsS0FBYSxFQUFFUixVQUFrQixFQUFFQyxRQUFpQjtJQUM5RCxNQUFNUSxhQUFhLEdBQUcsR0FBR3pCLGNBQUEsQ0FBQVksT0FBSyxDQUFDWSxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUdBLEtBQUssRUFBRSxDQUFDRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUN2RSxNQUFNO01BQUV0QjtJQUFnQixDQUFFLEdBQUcsSUFBSTtJQUNqQyxJQUFJQSxnQkFBZ0IsQ0FBQ0ssS0FBSyxLQUFLLEVBQUUsRUFBRTtNQUMvQixNQUFNa0IsWUFBWSxHQUFHRixhQUFhLENBQUNHLE9BQU8sQ0FBQ3hCLGdCQUFnQixDQUFDSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDekUsSUFBSWtCLFlBQVksRUFBRTtRQUNkLE9BQU8sSUFBSSxDQUFDRSxVQUFVLENBQUNKLGFBQWEsQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ25CLGNBQWMsRUFBRUgsZ0JBQWdCLENBQUMwQixZQUFZLENBQUMsQ0FBQzs7O0lBR3pHLE1BQU1DLG1CQUFtQixHQUFHTixhQUFhLENBQUNPLE1BQU0sQ0FBQyxJQUFJLENBQUNsQixhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0UsSUFBSWlCLG1CQUFtQixJQUFJLElBQUksQ0FBQ2hCLFdBQVcsQ0FBQ0MsVUFBVSxFQUFFQyxRQUFRLENBQUMsRUFBRTtNQUMvRCxPQUFPLElBQUksQ0FBQ1ksVUFBVSxDQUFDSixhQUFhLENBQUM7O0lBRXpDLE9BQU9BLGFBQWE7RUFDeEI7RUFFUUksVUFBVUEsQ0FBQ0wsS0FBYTtJQUM1QixNQUFNO01BQUVmO0lBQUssQ0FBRSxHQUFHLElBQUksQ0FBQ0wsZ0JBQWdCO0lBQ3ZDLE9BQU8sR0FBR0ssS0FBSyxHQUFHZSxLQUFLLEdBQUdmLEtBQUssRUFBRTtFQUNyQzs7QUF4REp3QixPQUFBLENBQUEvQixjQUFBLEdBQUFBLGNBQUEifQ==", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowFormatter = void 0;\nconst lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\nconst lodash_isequal_1 = __importDefault(require(\"lodash.isequal\"));\nconst FieldFormatter_1 = require(\"./FieldFormatter\");\nconst types_1 = require(\"../types\");\nclass RowFormatter {\n constructor(formatterOptions) {\n this.rowCount = 0;\n this.formatterOptions = formatterOptions;\n this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions);\n this.headers = formatterOptions.headers;\n this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders;\n this.hasWrittenHeaders = false;\n if (this.headers !== null) {\n this.fieldFormatter.headers = this.headers;\n }\n if (formatterOptions.transform) {\n this.rowTransform = formatterOptions.transform;\n }\n }\n static isRowHashArray(row) {\n if (Array.isArray(row)) {\n return Array.isArray(row[0]) && row[0].length === 2;\n }\n return false;\n }\n static isRowArray(row) {\n return Array.isArray(row) && !this.isRowHashArray(row);\n }\n // get headers from a row item\n static gatherHeaders(row) {\n if (RowFormatter.isRowHashArray(row)) {\n // lets assume a multi-dimesional array with item 0 being the header\n return row.map(it => it[0]);\n }\n if (Array.isArray(row)) {\n return row;\n }\n return Object.keys(row);\n }\n // eslint-disable-next-line @typescript-eslint/no-shadow\n static createTransform(transformFunction) {\n if (types_1.isSyncTransform(transformFunction)) {\n return (row, cb) => {\n let transformedRow = null;\n try {\n transformedRow = transformFunction(row);\n } catch (e) {\n return cb(e);\n }\n return cb(null, transformedRow);\n };\n }\n return (row, cb) => {\n transformFunction(row, cb);\n };\n }\n set rowTransform(transformFunction) {\n if (!lodash_isfunction_1.default(transformFunction)) {\n throw new TypeError('The transform should be a function');\n }\n this._rowTransform = RowFormatter.createTransform(transformFunction);\n }\n format(row, cb) {\n this.callTransformer(row, (err, transformedRow) => {\n if (err) {\n return cb(err);\n }\n if (!row) {\n return cb(null);\n }\n const rows = [];\n if (transformedRow) {\n const {\n shouldFormatColumns,\n headers\n } = this.checkHeaders(transformedRow);\n if (this.shouldWriteHeaders && headers && !this.hasWrittenHeaders) {\n rows.push(this.formatColumns(headers, true));\n this.hasWrittenHeaders = true;\n }\n if (shouldFormatColumns) {\n const columns = this.gatherColumns(transformedRow);\n rows.push(this.formatColumns(columns, false));\n }\n }\n return cb(null, rows);\n });\n }\n finish(cb) {\n const rows = [];\n // check if we should write headers and we didnt get any rows\n if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) {\n if (!this.headers) {\n return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.'));\n }\n rows.push(this.formatColumns(this.headers, true));\n }\n if (this.formatterOptions.includeEndRowDelimiter) {\n rows.push(this.formatterOptions.rowDelimiter);\n }\n return cb(null, rows);\n }\n // check if we need to write header return true if we should also write a row\n // could be false if headers is true and the header row(first item) is passed in\n checkHeaders(row) {\n if (this.headers) {\n // either the headers were provided by the user or we have already gathered them.\n return {\n shouldFormatColumns: true,\n headers: this.headers\n };\n }\n const headers = RowFormatter.gatherHeaders(row);\n this.headers = headers;\n this.fieldFormatter.headers = headers;\n if (!this.shouldWriteHeaders) {\n // if we are not supposed to write the headers then\n // always format the columns\n return {\n shouldFormatColumns: true,\n headers: null\n };\n }\n // if the row is equal to headers dont format\n return {\n shouldFormatColumns: !lodash_isequal_1.default(headers, row),\n headers\n };\n }\n // todo change this method to unknown[]\n gatherColumns(row) {\n if (this.headers === null) {\n throw new Error('Headers is currently null');\n }\n if (!Array.isArray(row)) {\n return this.headers.map(header => row[header]);\n }\n if (RowFormatter.isRowHashArray(row)) {\n return this.headers.map((header, i) => {\n const col = row[i];\n if (col) {\n return col[1];\n }\n return '';\n });\n }\n // if its a one dimensional array and headers were not provided\n // then just return the row\n if (RowFormatter.isRowArray(row) && !this.shouldWriteHeaders) {\n return row;\n }\n return this.headers.map((header, i) => row[i]);\n }\n callTransformer(row, cb) {\n if (!this._rowTransform) {\n return cb(null, row);\n }\n return this._rowTransform(row, cb);\n }\n formatColumns(columns, isHeadersRow) {\n const formattedCols = columns.map((field, i) => this.fieldFormatter.format(field, i, isHeadersRow)).join(this.formatterOptions.delimiter);\n const {\n rowCount\n } = this;\n this.rowCount += 1;\n if (rowCount) {\n return [this.formatterOptions.rowDelimiter, formattedCols].join('');\n }\n return formattedCols;\n }\n}\nexports.RowFormatter = RowFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXNmdW5jdGlvbl8xIiwiX19pbXBvcnREZWZhdWx0IiwicmVxdWlyZSIsImxvZGFzaF9pc2VxdWFsXzEiLCJGaWVsZEZvcm1hdHRlcl8xIiwidHlwZXNfMSIsIlJvd0Zvcm1hdHRlciIsImNvbnN0cnVjdG9yIiwiZm9ybWF0dGVyT3B0aW9ucyIsInJvd0NvdW50IiwiZmllbGRGb3JtYXR0ZXIiLCJGaWVsZEZvcm1hdHRlciIsImhlYWRlcnMiLCJzaG91bGRXcml0ZUhlYWRlcnMiLCJoYXNXcml0dGVuSGVhZGVycyIsInRyYW5zZm9ybSIsInJvd1RyYW5zZm9ybSIsImlzUm93SGFzaEFycmF5Iiwicm93IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNSb3dBcnJheSIsImdhdGhlckhlYWRlcnMiLCJtYXAiLCJpdCIsIk9iamVjdCIsImtleXMiLCJjcmVhdGVUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsImlzU3luY1RyYW5zZm9ybSIsImNiIiwidHJhbnNmb3JtZWRSb3ciLCJlIiwiZGVmYXVsdCIsIlR5cGVFcnJvciIsIl9yb3dUcmFuc2Zvcm0iLCJmb3JtYXQiLCJjYWxsVHJhbnNmb3JtZXIiLCJlcnIiLCJyb3dzIiwic2hvdWxkRm9ybWF0Q29sdW1ucyIsImNoZWNrSGVhZGVycyIsInB1c2giLCJmb3JtYXRDb2x1bW5zIiwiY29sdW1ucyIsImdhdGhlckNvbHVtbnMiLCJmaW5pc2giLCJhbHdheXNXcml0ZUhlYWRlcnMiLCJFcnJvciIsImluY2x1ZGVFbmRSb3dEZWxpbWl0ZXIiLCJyb3dEZWxpbWl0ZXIiLCJoZWFkZXIiLCJpIiwiY29sIiwiaXNIZWFkZXJzUm93IiwiZm9ybWF0dGVkQ29scyIsImZpZWxkIiwiam9pbiIsImRlbGltaXRlciIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZm9ybWF0dGVyL1Jvd0Zvcm1hdHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldFormatter = exports.RowFormatter = void 0;\nvar RowFormatter_1 = require(\"./RowFormatter\");\nObject.defineProperty(exports, \"RowFormatter\", {\n enumerable: true,\n get: function () {\n return RowFormatter_1.RowFormatter;\n }\n});\nvar FieldFormatter_1 = require(\"./FieldFormatter\");\nObject.defineProperty(exports, \"FieldFormatter\", {\n enumerable: true,\n get: function () {\n return FieldFormatter_1.FieldFormatter;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3dGb3JtYXR0ZXJfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUm93Rm9ybWF0dGVyIiwiRmllbGRGb3JtYXR0ZXJfMSIsIkZpZWxkRm9ybWF0dGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zvcm1hdHRlci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sY0FBQSxDQUFBTyxZQUFZO0VBQUE7QUFBQTtBQUNyQixJQUFBQyxnQkFBQSxHQUFBUCxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsZ0JBQUEsQ0FBQUMsY0FBYztFQUFBO0FBQUEifQ==", + "\"use strict\";\n\nvar __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\nvar __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = void 0 && (void 0).__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = exports.FormatterOptions = exports.CsvFormatterStream = void 0;\nconst util_1 = require(\"util\");\nconst stream_1 = require(\"stream\");\nconst fs = __importStar(require(\"fs\"));\nconst FormatterOptions_1 = require(\"./FormatterOptions\");\nconst CsvFormatterStream_1 = require(\"./CsvFormatterStream\");\n__exportStar(require(\"./types\"), exports);\nvar CsvFormatterStream_2 = require(\"./CsvFormatterStream\");\nObject.defineProperty(exports, \"CsvFormatterStream\", {\n enumerable: true,\n get: function () {\n return CsvFormatterStream_2.CsvFormatterStream;\n }\n});\nvar FormatterOptions_2 = require(\"./FormatterOptions\");\nObject.defineProperty(exports, \"FormatterOptions\", {\n enumerable: true,\n get: function () {\n return FormatterOptions_2.FormatterOptions;\n }\n});\nexports.format = options => new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options));\nexports.write = (rows, options) => {\n const csvStream = exports.format(options);\n const promiseWrite = util_1.promisify((row, cb) => {\n csvStream.write(row, undefined, cb);\n });\n rows.reduce((prev, row) => prev.then(() => promiseWrite(row)), Promise.resolve()).then(() => csvStream.end()).catch(err => {\n csvStream.emit('error', err);\n });\n return csvStream;\n};\nexports.writeToStream = (ws, rows, options) => exports.write(rows, options).pipe(ws);\nexports.writeToBuffer = function (rows) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const buffers = [];\n const ws = new stream_1.Writable({\n write(data, enc, writeCb) {\n buffers.push(data);\n writeCb();\n }\n });\n return new Promise((res, rej) => {\n ws.on('error', rej).on('finish', () => res(Buffer.concat(buffers)));\n exports.write(rows, opts).pipe(ws);\n });\n};\nexports.writeToString = (rows, options) => exports.writeToBuffer(rows, options).then(buffer => buffer.toString());\nexports.writeToPath = (path, rows, options) => {\n const stream = fs.createWriteStream(path, {\n encoding: 'utf8'\n });\n return exports.write(rows, options).pipe(stream);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlsXzEiLCJyZXF1aXJlIiwic3RyZWFtXzEiLCJmcyIsIl9faW1wb3J0U3RhciIsIkZvcm1hdHRlck9wdGlvbnNfMSIsIkNzdkZvcm1hdHRlclN0cmVhbV8xIiwiX19leHBvcnRTdGFyIiwiZXhwb3J0cyIsIkNzdkZvcm1hdHRlclN0cmVhbV8yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ3N2Rm9ybWF0dGVyU3RyZWFtIiwiRm9ybWF0dGVyT3B0aW9uc18yIiwiRm9ybWF0dGVyT3B0aW9ucyIsImZvcm1hdCIsIm9wdGlvbnMiLCJ3cml0ZSIsInJvd3MiLCJjc3ZTdHJlYW0iLCJwcm9taXNlV3JpdGUiLCJwcm9taXNpZnkiLCJyb3ciLCJjYiIsInVuZGVmaW5lZCIsInJlZHVjZSIsInByZXYiLCJ0aGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJlbmQiLCJjYXRjaCIsImVyciIsImVtaXQiLCJ3cml0ZVRvU3RyZWFtIiwid3MiLCJwaXBlIiwid3JpdGVUb0J1ZmZlciIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJidWZmZXJzIiwiV3JpdGFibGUiLCJkYXRhIiwiZW5jIiwid3JpdGVDYiIsInB1c2giLCJyZXMiLCJyZWoiLCJvbiIsIkJ1ZmZlciIsImNvbmNhdCIsIndyaXRlVG9TdHJpbmciLCJidWZmZXIiLCJ0b1N0cmluZyIsIndyaXRlVG9QYXRoIiwicGF0aCIsInN0cmVhbSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZW5jb2RpbmciXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE1BQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLE1BQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLE1BQUFFLEVBQUEsR0FBQUMsWUFBQSxDQUFBSCxPQUFBO0FBRUEsTUFBQUks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", + "\"use strict\";\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isSyncTransform = void 0;\nexports.isSyncTransform = transform => transform.length === 1;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiaXNTeW5jVHJhbnNmb3JtIiwidHJhbnNmb3JtIiwibGVuZ3RoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOztBQUFBOzs7OztBQVlhQSxPQUFBLENBQUFDLGVBQWUsR0FDeEJDLFNBQXFDLElBQ0NBLFNBQVMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMifQ==", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvParserStream = void 0;\nconst string_decoder_1 = require(\"string_decoder\");\nconst stream_1 = require(\"stream\");\nconst transforms_1 = require(\"./transforms\");\nconst parser_1 = require(\"./parser\");\nclass CsvParserStream extends stream_1.Transform {\n constructor(parserOptions) {\n super({\n objectMode: parserOptions.objectMode\n });\n this.lines = '';\n this.rowCount = 0;\n this.parsedRowCount = 0;\n this.parsedLineCount = 0;\n this.endEmitted = false;\n this.headersEmitted = false;\n this.parserOptions = parserOptions;\n this.parser = new parser_1.Parser(parserOptions);\n this.headerTransformer = new transforms_1.HeaderTransformer(parserOptions);\n this.decoder = new string_decoder_1.StringDecoder(parserOptions.encoding);\n this.rowTransformerValidator = new transforms_1.RowTransformerValidator();\n }\n get hasHitRowLimit() {\n return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows;\n }\n get shouldEmitRows() {\n return this.parsedRowCount > this.parserOptions.skipRows;\n }\n get shouldSkipLine() {\n return this.parsedLineCount <= this.parserOptions.skipLines;\n }\n transform(transformFunction) {\n this.rowTransformerValidator.rowTransform = transformFunction;\n return this;\n }\n validate(validateFunction) {\n this.rowTransformerValidator.rowValidator = validateFunction;\n return this;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n emit(event) {\n if (event === 'end') {\n if (!this.endEmitted) {\n this.endEmitted = true;\n super.emit('end', this.rowCount);\n }\n return false;\n }\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n return super.emit(event, ...rest);\n }\n _transform(data, encoding, done) {\n // if we have hit our maxRows parsing limit then skip parsing\n if (this.hasHitRowLimit) {\n return done();\n }\n const wrappedCallback = CsvParserStream.wrapDoneCallback(done);\n try {\n const {\n lines\n } = this;\n const newLine = lines + this.decoder.write(data);\n const rows = this.parse(newLine, true);\n return this.processRows(rows, wrappedCallback);\n } catch (e) {\n return wrappedCallback(e);\n }\n }\n _flush(done) {\n const wrappedCallback = CsvParserStream.wrapDoneCallback(done);\n // if we have hit our maxRows parsing limit then skip parsing\n if (this.hasHitRowLimit) {\n return wrappedCallback();\n }\n try {\n const newLine = this.lines + this.decoder.end();\n const rows = this.parse(newLine, false);\n return this.processRows(rows, wrappedCallback);\n } catch (e) {\n return wrappedCallback(e);\n }\n }\n parse(data, hasMoreData) {\n if (!data) {\n return [];\n }\n const {\n line,\n rows\n } = this.parser.parse(data, hasMoreData);\n this.lines = line;\n return rows;\n }\n processRows(rows, cb) {\n const rowsLength = rows.length;\n const iterate = i => {\n const callNext = err => {\n if (err) {\n return cb(err);\n }\n if (i % 100 === 0) {\n // incase the transform are sync insert a next tick to prevent stack overflow\n setImmediate(() => iterate(i + 1));\n return undefined;\n }\n return iterate(i + 1);\n };\n this.checkAndEmitHeaders();\n // if we have emitted all rows or we have hit the maxRows limit option\n // then end\n if (i >= rowsLength || this.hasHitRowLimit) {\n return cb();\n }\n this.parsedLineCount += 1;\n if (this.shouldSkipLine) {\n return callNext();\n }\n const row = rows[i];\n this.rowCount += 1;\n this.parsedRowCount += 1;\n const nextRowCount = this.rowCount;\n return this.transformRow(row, (err, transformResult) => {\n if (err) {\n this.rowCount -= 1;\n return callNext(err);\n }\n if (!transformResult) {\n return callNext(new Error('expected transform result'));\n }\n if (!transformResult.isValid) {\n this.emit('data-invalid', transformResult.row, nextRowCount, transformResult.reason);\n } else if (transformResult.row) {\n return this.pushRow(transformResult.row, callNext);\n }\n return callNext();\n });\n };\n iterate(0);\n }\n transformRow(parsedRow, cb) {\n try {\n this.headerTransformer.transform(parsedRow, (err, withHeaders) => {\n if (err) {\n return cb(err);\n }\n if (!withHeaders) {\n return cb(new Error('Expected result from header transform'));\n }\n if (!withHeaders.isValid) {\n if (this.shouldEmitRows) {\n return cb(null, {\n isValid: false,\n row: parsedRow\n });\n }\n // skipped because of skipRows option remove from total row count\n return this.skipRow(cb);\n }\n if (withHeaders.row) {\n if (this.shouldEmitRows) {\n return this.rowTransformerValidator.transformAndValidate(withHeaders.row, cb);\n }\n // skipped because of skipRows option remove from total row count\n return this.skipRow(cb);\n }\n // this is a header row dont include in the rowCount or parsedRowCount\n this.rowCount -= 1;\n this.parsedRowCount -= 1;\n return cb(null, {\n row: null,\n isValid: true\n });\n });\n } catch (e) {\n cb(e);\n }\n }\n checkAndEmitHeaders() {\n if (!this.headersEmitted && this.headerTransformer.headers) {\n this.headersEmitted = true;\n this.emit('headers', this.headerTransformer.headers);\n }\n }\n skipRow(cb) {\n // skipped because of skipRows option remove from total row count\n this.rowCount -= 1;\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n pushRow(row, cb) {\n try {\n if (!this.parserOptions.objectMode) {\n this.push(JSON.stringify(row));\n } else {\n this.push(row);\n }\n cb();\n } catch (e) {\n cb(e);\n }\n }\n static wrapDoneCallback(done) {\n let errorCalled = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (err) {\n if (err) {\n if (errorCalled) {\n throw err;\n }\n errorCalled = true;\n done(err);\n return;\n }\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n done(...args);\n };\n }\n}\nexports.CsvParserStream = CsvParserStream;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHJpbmdfZGVjb2Rlcl8xIiwicmVxdWlyZSIsInN0cmVhbV8xIiwidHJhbnNmb3Jtc18xIiwicGFyc2VyXzEiLCJDc3ZQYXJzZXJTdHJlYW0iLCJUcmFuc2Zvcm0iLCJjb25zdHJ1Y3RvciIsInBhcnNlck9wdGlvbnMiLCJvYmplY3RNb2RlIiwibGluZXMiLCJyb3dDb3VudCIsInBhcnNlZFJvd0NvdW50IiwicGFyc2VkTGluZUNvdW50IiwiZW5kRW1pdHRlZCIsImhlYWRlcnNFbWl0dGVkIiwicGFyc2VyIiwiUGFyc2VyIiwiaGVhZGVyVHJhbnNmb3JtZXIiLCJIZWFkZXJUcmFuc2Zvcm1lciIsImRlY29kZXIiLCJTdHJpbmdEZWNvZGVyIiwiZW5jb2RpbmciLCJyb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIsIlJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yIiwiaGFzSGl0Um93TGltaXQiLCJsaW1pdFJvd3MiLCJtYXhSb3dzIiwic2hvdWxkRW1pdFJvd3MiLCJza2lwUm93cyIsInNob3VsZFNraXBMaW5lIiwic2tpcExpbmVzIiwidHJhbnNmb3JtIiwidHJhbnNmb3JtRnVuY3Rpb24iLCJyb3dUcmFuc2Zvcm0iLCJ2YWxpZGF0ZSIsInZhbGlkYXRlRnVuY3Rpb24iLCJyb3dWYWxpZGF0b3IiLCJlbWl0IiwiZXZlbnQiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwicmVzdCIsIkFycmF5IiwiX2tleSIsIl90cmFuc2Zvcm0iLCJkYXRhIiwiZG9uZSIsIndyYXBwZWRDYWxsYmFjayIsIndyYXBEb25lQ2FsbGJhY2siLCJuZXdMaW5lIiwid3JpdGUiLCJyb3dzIiwicGFyc2UiLCJwcm9jZXNzUm93cyIsImUiLCJfZmx1c2giLCJlbmQiLCJoYXNNb3JlRGF0YSIsImxpbmUiLCJjYiIsInJvd3NMZW5ndGgiLCJpdGVyYXRlIiwiaSIsImNhbGxOZXh0IiwiZXJyIiwic2V0SW1tZWRpYXRlIiwidW5kZWZpbmVkIiwiY2hlY2tBbmRFbWl0SGVhZGVycyIsInJvdyIsIm5leHRSb3dDb3VudCIsInRyYW5zZm9ybVJvdyIsInRyYW5zZm9ybVJlc3VsdCIsIkVycm9yIiwiaXNWYWxpZCIsInJlYXNvbiIsInB1c2hSb3ciLCJwYXJzZWRSb3ciLCJ3aXRoSGVhZGVycyIsInNraXBSb3ciLCJ0cmFuc2Zvcm1BbmRWYWxpZGF0ZSIsImhlYWRlcnMiLCJwdXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImVycm9yQ2FsbGVkIiwiX2xlbjIiLCJhcmdzIiwiX2tleTIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NzdlBhcnNlclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBQUEsZ0JBQUEsR0FBQUMsT0FBQTtBQUNBLE1BQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUVBLE1BQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUNBLE1BQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUdBLE1BQWFJLGVBQThDLFNBQVFILFFBQUEsQ0FBQUksU0FBUztFQXVCeEVDLFlBQW1CQyxhQUE0QjtJQUMzQyxLQUFLLENBQUM7TUFBRUMsVUFBVSxFQUFFRCxhQUFhLENBQUNDO0lBQVUsQ0FBRSxDQUFDO0lBYjNDLEtBQUFDLEtBQUssR0FBRyxFQUFFO0lBRVYsS0FBQUMsUUFBUSxHQUFHLENBQUM7SUFFWixLQUFBQyxjQUFjLEdBQUcsQ0FBQztJQUVsQixLQUFBQyxlQUFlLEdBQUcsQ0FBQztJQUVuQixLQUFBQyxVQUFVLEdBQUcsS0FBSztJQUVsQixLQUFBQyxjQUFjLEdBQUcsS0FBSztJQUkxQixJQUFJLENBQUNQLGFBQWEsR0FBR0EsYUFBYTtJQUNsQyxJQUFJLENBQUNRLE1BQU0sR0FBRyxJQUFJWixRQUFBLENBQUFhLE1BQU0sQ0FBQ1QsYUFBYSxDQUFDO0lBQ3ZDLElBQUksQ0FBQ1UsaUJBQWlCLEdBQUcsSUFBSWYsWUFBQSxDQUFBZ0IsaUJBQWlCLENBQUNYLGFBQWEsQ0FBQztJQUM3RCxJQUFJLENBQUNZLE9BQU8sR0FBRyxJQUFJcEIsZ0JBQUEsQ0FBQXFCLGFBQWEsQ0FBQ2IsYUFBYSxDQUFDYyxRQUFRLENBQUM7SUFDeEQsSUFBSSxDQUFDQyx1QkFBdUIsR0FBRyxJQUFJcEIsWUFBQSxDQUFBcUIsdUJBQXVCLEVBQUU7RUFDaEU7RUFFQSxJQUFZQyxjQUFjQSxDQUFBO0lBQ3RCLE9BQU8sSUFBSSxDQUFDakIsYUFBYSxDQUFDa0IsU0FBUyxJQUFJLElBQUksQ0FBQ2YsUUFBUSxJQUFJLElBQUksQ0FBQ0gsYUFBYSxDQUFDbUIsT0FBTztFQUN0RjtFQUVBLElBQVlDLGNBQWNBLENBQUE7SUFDdEIsT0FBTyxJQUFJLENBQUNoQixjQUFjLEdBQUcsSUFBSSxDQUFDSixhQUFhLENBQUNxQixRQUFRO0VBQzVEO0VBRUEsSUFBWUMsY0FBY0EsQ0FBQTtJQUN0QixPQUFPLElBQUksQ0FBQ2pCLGVBQWUsSUFBSSxJQUFJLENBQUNMLGFBQWEsQ0FBQ3VCLFNBQVM7RUFDL0Q7RUFFT0MsU0FBU0EsQ0FBQ0MsaUJBQTZDO0lBQzFELElBQUksQ0FBQ1YsdUJBQXVCLENBQUNXLFlBQVksR0FBR0QsaUJBQWlCO0lBQzdELE9BQU8sSUFBSTtFQUNmO0VBRU9FLFFBQVFBLENBQUNDLGdCQUFnQztJQUM1QyxJQUFJLENBQUNiLHVCQUF1QixDQUFDYyxZQUFZLEdBQUdELGdCQUFnQjtJQUM1RCxPQUFPLElBQUk7RUFDZjtFQUVBO0VBQ09FLElBQUlBLENBQUNDLEtBQXNCLEVBQWdCO0lBQzlDLElBQUlBLEtBQUssS0FBSyxLQUFLLEVBQUU7TUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQ3pCLFVBQVUsRUFBRTtRQUNsQixJQUFJLENBQUNBLFVBQVUsR0FBRyxJQUFJO1FBQ3RCLEtBQUssQ0FBQ3dCLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDM0IsUUFBUSxDQUFDOztNQUVwQyxPQUFPLEtBQUs7O0lBQ2YsU0FBQTZCLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBUGtDQyxJQUFXLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxPQUFBQSxJQUFBLFdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7TUFBWEYsSUFBVyxDQUFBRSxJQUFBLFFBQUFKLFNBQUEsQ0FBQUksSUFBQTtJQUFBO0lBUTlDLE9BQU8sS0FBSyxDQUFDUCxJQUFJLENBQUNDLEtBQUssRUFBRSxHQUFHSSxJQUFJLENBQUM7RUFDckM7RUFFT0csVUFBVUEsQ0FBQ0MsSUFBWSxFQUFFekIsUUFBZ0IsRUFBRTBCLElBQXVCO0lBQ3JFO0lBQ0EsSUFBSSxJQUFJLENBQUN2QixjQUFjLEVBQUU7TUFDckIsT0FBT3VCLElBQUksRUFBRTs7SUFFakIsTUFBTUMsZUFBZSxHQUFHNUMsZUFBZSxDQUFDNkMsZ0JBQWdCLENBQUNGLElBQUksQ0FBQztJQUM5RCxJQUFJO01BQ0EsTUFBTTtRQUFFdEM7TUFBSyxDQUFFLEdBQUcsSUFBSTtNQUN0QixNQUFNeUMsT0FBTyxHQUFHekMsS0FBSyxHQUFHLElBQUksQ0FBQ1UsT0FBTyxDQUFDZ0MsS0FBSyxDQUFDTCxJQUFJLENBQUM7TUFDaEQsTUFBTU0sSUFBSSxHQUFHLElBQUksQ0FBQ0MsS0FBSyxDQUFDSCxPQUFPLEVBQUUsSUFBSSxDQUFDO01BQ3RDLE9BQU8sSUFBSSxDQUFDSSxXQUFXLENBQUNGLElBQUksRUFBRUosZUFBZSxDQUFDO0tBQ2pELENBQUMsT0FBT08sQ0FBQyxFQUFFO01BQ1IsT0FBT1AsZUFBZSxDQUFDTyxDQUFDLENBQUM7O0VBRWpDO0VBRU9DLE1BQU1BLENBQUNULElBQXVCO0lBQ2pDLE1BQU1DLGVBQWUsR0FBRzVDLGVBQWUsQ0FBQzZDLGdCQUFnQixDQUFDRixJQUFJLENBQUM7SUFDOUQ7SUFDQSxJQUFJLElBQUksQ0FBQ3ZCLGNBQWMsRUFBRTtNQUNyQixPQUFPd0IsZUFBZSxFQUFFOztJQUU1QixJQUFJO01BQ0EsTUFBTUUsT0FBTyxHQUFHLElBQUksQ0FBQ3pDLEtBQUssR0FBRyxJQUFJLENBQUNVLE9BQU8sQ0FBQ3NDLEdBQUcsRUFBRTtNQUMvQyxNQUFNTCxJQUFJLEdBQUcsSUFBSSxDQUFDQyxLQUFLLENBQUNILE9BQU8sRUFBRSxLQUFLLENBQUM7TUFDdkMsT0FBTyxJQUFJLENBQUNJLFdBQVcsQ0FBQ0YsSUFBSSxFQUFFSixlQUFlLENBQUM7S0FDakQsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7TUFDUixPQUFPUCxlQUFlLENBQUNPLENBQUMsQ0FBQzs7RUFFakM7RUFFUUYsS0FBS0EsQ0FBQ1AsSUFBWSxFQUFFWSxXQUFvQjtJQUM1QyxJQUFJLENBQUNaLElBQUksRUFBRTtNQUNQLE9BQU8sRUFBRTs7SUFFYixNQUFNO01BQUVhLElBQUk7TUFBRVA7SUFBSSxDQUFFLEdBQUcsSUFBSSxDQUFDckMsTUFBTSxDQUFDc0MsS0FBSyxDQUFDUCxJQUFJLEVBQUVZLFdBQVcsQ0FBQztJQUMzRCxJQUFJLENBQUNqRCxLQUFLLEdBQUdrRCxJQUFJO0lBQ2pCLE9BQU9QLElBQUk7RUFDZjtFQUVRRSxXQUFXQSxDQUFDRixJQUFnQixFQUFFUSxFQUFxQjtJQUN2RCxNQUFNQyxVQUFVLEdBQUdULElBQUksQ0FBQ1gsTUFBTTtJQUM5QixNQUFNcUIsT0FBTyxHQUFJQyxDQUFTLElBQVU7TUFDaEMsTUFBTUMsUUFBUSxHQUFJQyxHQUFXLElBQVU7UUFDbkMsSUFBSUEsR0FBRyxFQUFFO1VBQ0wsT0FBT0wsRUFBRSxDQUFDSyxHQUFHLENBQUM7O1FBRWxCLElBQUlGLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFO1VBQ2Y7VUFDQUcsWUFBWSxDQUFDLE1BQVlKLE9BQU8sQ0FBQ0MsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ3hDLE9BQU9JLFNBQVM7O1FBRXBCLE9BQU9MLE9BQU8sQ0FBQ0MsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN6QixDQUFDO01BQ0QsSUFBSSxDQUFDSyxtQkFBbUIsRUFBRTtNQUMxQjtNQUNBO01BQ0EsSUFBSUwsQ0FBQyxJQUFJRixVQUFVLElBQUksSUFBSSxDQUFDckMsY0FBYyxFQUFFO1FBQ3hDLE9BQU9vQyxFQUFFLEVBQUU7O01BRWYsSUFBSSxDQUFDaEQsZUFBZSxJQUFJLENBQUM7TUFDekIsSUFBSSxJQUFJLENBQUNpQixjQUFjLEVBQUU7UUFDckIsT0FBT21DLFFBQVEsRUFBRTs7TUFFckIsTUFBTUssR0FBRyxHQUFHakIsSUFBSSxDQUFDVyxDQUFDLENBQUM7TUFDbkIsSUFBSSxDQUFDckQsUUFBUSxJQUFJLENBQUM7TUFDbEIsSUFBSSxDQUFDQyxjQUFjLElBQUksQ0FBQztNQUN4QixNQUFNMkQsWUFBWSxHQUFHLElBQUksQ0FBQzVELFFBQVE7TUFDbEMsT0FBTyxJQUFJLENBQUM2RCxZQUFZLENBQUNGLEdBQUcsRUFBRSxDQUFDSixHQUFHLEVBQUVPLGVBQWUsS0FBVTtRQUN6RCxJQUFJUCxHQUFHLEVBQUU7VUFDTCxJQUFJLENBQUN2RCxRQUFRLElBQUksQ0FBQztVQUNsQixPQUFPc0QsUUFBUSxDQUFDQyxHQUFHLENBQUM7O1FBRXhCLElBQUksQ0FBQ08sZUFBZSxFQUFFO1VBQ2xCLE9BQU9SLFFBQVEsQ0FBQyxJQUFJUyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQzs7UUFFM0QsSUFBSSxDQUFDRCxlQUFlLENBQUNFLE9BQU8sRUFBRTtVQUMxQixJQUFJLENBQUNyQyxJQUFJLENBQUMsY0FBYyxFQUFFbUMsZUFBZSxDQUFDSCxHQUFHLEVBQUVDLFlBQVksRUFBRUUsZUFBZSxDQUFDRyxNQUFNLENBQUM7U0FDdkYsTUFBTSxJQUFJSCxlQUFlLENBQUNILEdBQUcsRUFBRTtVQUM1QixPQUFPLElBQUksQ0FBQ08sT0FBTyxDQUFDSixlQUFlLENBQUNILEdBQUcsRUFBRUwsUUFBUSxDQUFDOztRQUV0RCxPQUFPQSxRQUFRLEVBQUU7TUFDckIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUNERixPQUFPLENBQUMsQ0FBQyxDQUFDO0VBQ2Q7RUFFUVMsWUFBWUEsQ0FBQ00sU0FBbUIsRUFBRWpCLEVBQTJCO0lBQ2pFLElBQUk7TUFDQSxJQUFJLENBQUMzQyxpQkFBaUIsQ0FBQ2MsU0FBUyxDQUFDOEMsU0FBUyxFQUFFLENBQUNaLEdBQUcsRUFBRWEsV0FBVyxLQUFVO1FBQ25FLElBQUliLEdBQUcsRUFBRTtVQUNMLE9BQU9MLEVBQUUsQ0FBQ0ssR0FBRyxDQUFDOztRQUVsQixJQUFJLENBQUNhLFdBQVcsRUFBRTtVQUNkLE9BQU9sQixFQUFFLENBQUMsSUFBSWEsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7O1FBRWpFLElBQUksQ0FBQ0ssV0FBVyxDQUFDSixPQUFPLEVBQUU7VUFDdEIsSUFBSSxJQUFJLENBQUMvQyxjQUFjLEVBQUU7WUFDckIsT0FBT2lDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7Y0FBRWMsT0FBTyxFQUFFLEtBQUs7Y0FBRUwsR0FBRyxFQUFHUTtZQUF3QixDQUFFLENBQUM7O1VBRXZFO1VBQ0EsT0FBTyxJQUFJLENBQUNFLE9BQU8sQ0FBQ25CLEVBQUUsQ0FBQzs7UUFFM0IsSUFBSWtCLFdBQVcsQ0FBQ1QsR0FBRyxFQUFFO1VBQ2pCLElBQUksSUFBSSxDQUFDMUMsY0FBYyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDTCx1QkFBdUIsQ0FBQzBELG9CQUFvQixDQUFDRixXQUFXLENBQUNULEdBQUcsRUFBRVQsRUFBRSxDQUFDOztVQUVqRjtVQUNBLE9BQU8sSUFBSSxDQUFDbUIsT0FBTyxDQUFDbkIsRUFBRSxDQUFDOztRQUUzQjtRQUNBLElBQUksQ0FBQ2xELFFBQVEsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQ0MsY0FBYyxJQUFJLENBQUM7UUFDeEIsT0FBT2lELEVBQUUsQ0FBQyxJQUFJLEVBQUU7VUFBRVMsR0FBRyxFQUFFLElBQUk7VUFBRUssT0FBTyxFQUFFO1FBQUksQ0FBRSxDQUFDO01BQ2pELENBQUMsQ0FBQztLQUNMLENBQUMsT0FBT25CLENBQUMsRUFBRTtNQUNSSyxFQUFFLENBQUNMLENBQUMsQ0FBQzs7RUFFYjtFQUVRYSxtQkFBbUJBLENBQUE7SUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQ3RELGNBQWMsSUFBSSxJQUFJLENBQUNHLGlCQUFpQixDQUFDZ0UsT0FBTyxFQUFFO01BQ3hELElBQUksQ0FBQ25FLGNBQWMsR0FBRyxJQUFJO01BQzFCLElBQUksQ0FBQ3VCLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDcEIsaUJBQWlCLENBQUNnRSxPQUFPLENBQUM7O0VBRTVEO0VBRVFGLE9BQU9BLENBQUNuQixFQUEyQjtJQUN2QztJQUNBLElBQUksQ0FBQ2xELFFBQVEsSUFBSSxDQUFDO0lBQ2xCLE9BQU9rRCxFQUFFLENBQUMsSUFBSSxFQUFFO01BQUVTLEdBQUcsRUFBRSxJQUFJO01BQUVLLE9BQU8sRUFBRTtJQUFJLENBQUUsQ0FBQztFQUNqRDtFQUVRRSxPQUFPQSxDQUFDUCxHQUFRLEVBQUVULEVBQXlCO0lBQy9DLElBQUk7TUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDckQsYUFBYSxDQUFDQyxVQUFVLEVBQUU7UUFDaEMsSUFBSSxDQUFDMEUsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ2YsR0FBRyxDQUFDLENBQUM7T0FDakMsTUFBTTtRQUNILElBQUksQ0FBQ2EsSUFBSSxDQUFDYixHQUFHLENBQUM7O01BRWxCVCxFQUFFLEVBQUU7S0FDUCxDQUFDLE9BQU9MLENBQUMsRUFBRTtNQUNSSyxFQUFFLENBQUNMLENBQUMsQ0FBQzs7RUFFYjtFQUVRLE9BQU9OLGdCQUFnQkEsQ0FBQ0YsSUFBdUI7SUFDbkQsSUFBSXNDLFdBQVcsR0FBRyxLQUFLO0lBQ3ZCO0lBQ0EsT0FBTyxVQUFDcEIsR0FBNkIsRUFBMEI7TUFDM0QsSUFBSUEsR0FBRyxFQUFFO1FBQ0wsSUFBSW9CLFdBQVcsRUFBRTtVQUNiLE1BQU1wQixHQUFHOztRQUVib0IsV0FBVyxHQUFHLElBQUk7UUFDbEJ0QyxJQUFJLENBQUNrQixHQUFHLENBQUM7UUFDVDs7TUFDSCxTQUFBcUIsS0FBQSxHQUFBOUMsU0FBQSxDQUFBQyxNQUFBLEVBUnFDOEMsSUFBVyxPQUFBNUMsS0FBQSxDQUFBMkMsS0FBQSxPQUFBQSxLQUFBLFdBQUFFLEtBQUEsTUFBQUEsS0FBQSxHQUFBRixLQUFBLEVBQUFFLEtBQUE7UUFBWEQsSUFBVyxDQUFBQyxLQUFBLFFBQUFoRCxTQUFBLENBQUFnRCxLQUFBO01BQUE7TUFTakR6QyxJQUFJLENBQUMsR0FBR3dDLElBQUksQ0FBQztJQUNqQixDQUFDO0VBQ0w7O0FBbE9KRSxPQUFBLENBQUFyRixlQUFBLEdBQUFBLGVBQUEifQ==", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ParserOptions = void 0;\nconst lodash_escaperegexp_1 = __importDefault(require(\"lodash.escaperegexp\"));\nconst lodash_isnil_1 = __importDefault(require(\"lodash.isnil\"));\nclass ParserOptions {\n constructor(opts) {\n var _a;\n this.objectMode = true;\n this.delimiter = ',';\n this.ignoreEmpty = false;\n this.quote = '\"';\n this.escape = null;\n this.escapeChar = this.quote;\n this.comment = null;\n this.supportsComments = false;\n this.ltrim = false;\n this.rtrim = false;\n this.trim = false;\n this.headers = null;\n this.renameHeaders = false;\n this.strictColumnHandling = false;\n this.discardUnmappedColumns = false;\n this.carriageReturn = '\\r';\n this.encoding = 'utf8';\n this.limitRows = false;\n this.maxRows = 0;\n this.skipLines = 0;\n this.skipRows = 0;\n Object.assign(this, opts || {});\n if (this.delimiter.length > 1) {\n throw new Error('delimiter option must be one character long');\n }\n this.escapedDelimiter = lodash_escaperegexp_1.default(this.delimiter);\n this.escapeChar = (_a = this.escape) !== null && _a !== void 0 ? _a : this.quote;\n this.supportsComments = !lodash_isnil_1.default(this.comment);\n this.NEXT_TOKEN_REGEXP = new RegExp(`([^\\\\s]|\\\\r\\\\n|\\\\n|\\\\r|${this.escapedDelimiter})`);\n if (this.maxRows > 0) {\n this.limitRows = true;\n }\n }\n}\nexports.ParserOptions = ParserOptions;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfZXNjYXBlcmVnZXhwXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZXF1aXJlIiwibG9kYXNoX2lzbmlsXzEiLCJQYXJzZXJPcHRpb25zIiwiY29uc3RydWN0b3IiLCJvcHRzIiwib2JqZWN0TW9kZSIsImRlbGltaXRlciIsImlnbm9yZUVtcHR5IiwicXVvdGUiLCJlc2NhcGUiLCJlc2NhcGVDaGFyIiwiY29tbWVudCIsInN1cHBvcnRzQ29tbWVudHMiLCJsdHJpbSIsInJ0cmltIiwidHJpbSIsImhlYWRlcnMiLCJyZW5hbWVIZWFkZXJzIiwic3RyaWN0Q29sdW1uSGFuZGxpbmciLCJkaXNjYXJkVW5tYXBwZWRDb2x1bW5zIiwiY2FycmlhZ2VSZXR1cm4iLCJlbmNvZGluZyIsImxpbWl0Um93cyIsIm1heFJvd3MiLCJza2lwTGluZXMiLCJza2lwUm93cyIsIk9iamVjdCIsImFzc2lnbiIsImxlbmd0aCIsIkVycm9yIiwiZXNjYXBlZERlbGltaXRlciIsImRlZmF1bHQiLCJfYSIsIk5FWFRfVE9LRU5fUkVHRVhQIiwiUmVnRXhwIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QYXJzZXJPcHRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE1BQUFBLHFCQUFBLEdBQUFDLGVBQUEsQ0FBQUMsT0FBQTtBQUNBLE1BQUFDLGNBQUEsR0FBQUYsZUFBQSxDQUFBQyxPQUFBO0FBdUJBLE1BQWFFLGFBQWE7RUErQ3RCQyxZQUFtQkMsSUFBd0I7O0lBNUMzQixLQUFBQyxVQUFVLEdBQVksSUFBSTtJQUUxQixLQUFBQyxTQUFTLEdBQVcsR0FBRztJQUV2QixLQUFBQyxXQUFXLEdBQVksS0FBSztJQUU1QixLQUFBQyxLQUFLLEdBQWtCLEdBQUc7SUFFMUIsS0FBQUMsTUFBTSxHQUFrQixJQUFJO0lBRTVCLEtBQUFDLFVBQVUsR0FBa0IsSUFBSSxDQUFDRixLQUFLO0lBRXRDLEtBQUFHLE9BQU8sR0FBa0IsSUFBSTtJQUU3QixLQUFBQyxnQkFBZ0IsR0FBWSxLQUFLO0lBRWpDLEtBQUFDLEtBQUssR0FBWSxLQUFLO0lBRXRCLEtBQUFDLEtBQUssR0FBWSxLQUFLO0lBRXRCLEtBQUFDLElBQUksR0FBWSxLQUFLO0lBRXJCLEtBQUFDLE9BQU8sR0FBMkQsSUFBSTtJQUV0RSxLQUFBQyxhQUFhLEdBQVksS0FBSztJQUU5QixLQUFBQyxvQkFBb0IsR0FBWSxLQUFLO0lBRXJDLEtBQUFDLHNCQUFzQixHQUFZLEtBQUs7SUFFdkMsS0FBQUMsY0FBYyxHQUFXLElBQUk7SUFJN0IsS0FBQUMsUUFBUSxHQUFtQixNQUFNO0lBRWpDLEtBQUFDLFNBQVMsR0FBWSxLQUFLO0lBRTFCLEtBQUFDLE9BQU8sR0FBVyxDQUFDO0lBRW5CLEtBQUFDLFNBQVMsR0FBVyxDQUFDO0lBRXJCLEtBQUFDLFFBQVEsR0FBVyxDQUFDO0lBR2hDQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLEVBQUV2QixJQUFJLElBQUksRUFBRSxDQUFDO0lBQy9CLElBQUksSUFBSSxDQUFDRSxTQUFTLENBQUNzQixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzNCLE1BQU0sSUFBSUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDOztJQUVsRSxJQUFJLENBQUNDLGdCQUFnQixHQUFHaEMscUJBQUEsQ0FBQWlDLE9BQVksQ0FBQyxJQUFJLENBQUN6QixTQUFTLENBQUM7SUFDcEQsSUFBSSxDQUFDSSxVQUFVLElBQUFzQixFQUFBLEdBQUcsSUFBSSxDQUFDdkIsTUFBTSxjQUFBdUIsRUFBQSxjQUFBQSxFQUFBLEdBQUksSUFBSSxDQUFDeEIsS0FBSztJQUMzQyxJQUFJLENBQUNJLGdCQUFnQixHQUFHLENBQUNYLGNBQUEsQ0FBQThCLE9BQUssQ0FBQyxJQUFJLENBQUNwQixPQUFPLENBQUM7SUFDNUMsSUFBSSxDQUFDc0IsaUJBQWlCLEdBQUcsSUFBSUMsTUFBTSxDQUFDLDBCQUEwQixJQUFJLENBQUNKLGdCQUFnQixHQUFHLENBQUM7SUFFdkYsSUFBSSxJQUFJLENBQUNQLE9BQU8sR0FBRyxDQUFDLEVBQUU7TUFDbEIsSUFBSSxDQUFDRCxTQUFTLEdBQUcsSUFBSTs7RUFFN0I7O0FBNURKYSxPQUFBLENBQUFqQyxhQUFBLEdBQUFBLGFBQUEifQ==", + "\"use strict\";\n\nvar __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function () {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\nvar __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = void 0 && (void 0).__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseString = exports.parseFile = exports.parseStream = exports.parse = exports.ParserOptions = exports.CsvParserStream = void 0;\nconst fs = __importStar(require(\"fs\"));\nconst stream_1 = require(\"stream\");\nconst ParserOptions_1 = require(\"./ParserOptions\");\nconst CsvParserStream_1 = require(\"./CsvParserStream\");\n__exportStar(require(\"./types\"), exports);\nvar CsvParserStream_2 = require(\"./CsvParserStream\");\nObject.defineProperty(exports, \"CsvParserStream\", {\n enumerable: true,\n get: function () {\n return CsvParserStream_2.CsvParserStream;\n }\n});\nvar ParserOptions_2 = require(\"./ParserOptions\");\nObject.defineProperty(exports, \"ParserOptions\", {\n enumerable: true,\n get: function () {\n return ParserOptions_2.ParserOptions;\n }\n});\nexports.parse = args => new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args));\nexports.parseStream = (stream, options) => stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\nexports.parseFile = function (location) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\n};\nexports.parseString = (string, options) => {\n const rs = new stream_1.Readable();\n rs.push(string);\n rs.push(null);\n return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsIl9faW1wb3J0U3RhciIsInJlcXVpcmUiLCJzdHJlYW1fMSIsIlBhcnNlck9wdGlvbnNfMSIsIkNzdlBhcnNlclN0cmVhbV8xIiwiX19leHBvcnRTdGFyIiwiZXhwb3J0cyIsIkNzdlBhcnNlclN0cmVhbV8yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ3N2UGFyc2VyU3RyZWFtIiwiUGFyc2VyT3B0aW9uc18yIiwiUGFyc2VyT3B0aW9ucyIsInBhcnNlIiwiYXJncyIsInBhcnNlU3RyZWFtIiwic3RyZWFtIiwib3B0aW9ucyIsInBpcGUiLCJwYXJzZUZpbGUiLCJsb2NhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJwYXJzZVN0cmluZyIsInN0cmluZyIsInJzIiwiUmVhZGFibGUiLCJwdXNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFBQSxFQUFBLEdBQUFDLFlBQUEsQ0FBQUMsT0FBQTtBQUNBLE1BQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLE1BQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUNBLE1BQUFHLGlCQUFBLEdBQUFILE9BQUE7QUFHQUksWUFBQSxDQUFBSixPQUFBLGFBQUFLLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBTixPQUFBO0FBQVNPLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxPQUFBO0VBQUFJLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUosaUJBQUEsQ0FBQUssZUFBZTtFQUFBO0FBQUE7QUFDeEIsSUFBQUMsZUFBQSxHQUFBWixPQUFBO0FBQVNPLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxPQUFBO0VBQUFJLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsZUFBQSxDQUFBQyxhQUFhO0VBQUE7QUFBQTtBQUVUUixPQUFBLENBQUFTLEtBQUssR0FBa0NDLElBQXdCLElBQ3hFLElBQUlaLGlCQUFBLENBQUFRLGVBQWUsQ0FBQyxJQUFJVCxlQUFBLENBQUFXLGFBQWEsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7QUFFbkNWLE9BQUEsQ0FBQVcsV0FBVyxHQUFHLENBQ3ZCQyxNQUE2QixFQUM3QkMsT0FBMkIsS0FDSEQsTUFBTSxDQUFDRSxJQUFJLENBQUMsSUFBSWhCLGlCQUFBLENBQUFRLGVBQWUsQ0FBQyxJQUFJVCxlQUFBLENBQUFXLGFBQWEsQ0FBQ0ssT0FBTyxDQUFDLENBQUMsQ0FBQztBQUUzRWIsT0FBQSxDQUFBZSxTQUFTLEdBQUcsVUFDckJDLFFBQWdCO0VBQUEsSUFDaEJILE9BQUEsR0FBQUksU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQTZCLEVBQUU7RUFBQSxPQUNQeEIsRUFBRSxDQUFDMkIsZ0JBQWdCLENBQUNKLFFBQVEsQ0FBQyxDQUFDRixJQUFJLENBQUMsSUFBSWhCLGlCQUFBLENBQUFRLGVBQWUsQ0FBQyxJQUFJVCxlQUFBLENBQUFXLGFBQWEsQ0FBQ0ssT0FBTyxDQUFDLENBQUMsQ0FBQztBQUFBO0FBRWxHYixPQUFBLENBQUFxQixXQUFXLEdBQUcsQ0FDdkJDLE1BQWMsRUFDZFQsT0FBMkIsS0FDSjtFQUN2QixNQUFNVSxFQUFFLEdBQUcsSUFBSTNCLFFBQUEsQ0FBQTRCLFFBQVEsRUFBRTtFQUN6QkQsRUFBRSxDQUFDRSxJQUFJLENBQUNILE1BQU0sQ0FBQztFQUNmQyxFQUFFLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDYixPQUFPRixFQUFFLENBQUNULElBQUksQ0FBQyxJQUFJaEIsaUJBQUEsQ0FBQVEsZUFBZSxDQUFDLElBQUlULGVBQUEsQ0FBQVcsYUFBYSxDQUFDSyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUMifQ==", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Parser = void 0;\nconst Scanner_1 = require(\"./Scanner\");\nconst RowParser_1 = require(\"./RowParser\");\nconst Token_1 = require(\"./Token\");\nclass Parser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.rowParser = new RowParser_1.RowParser(this.parserOptions);\n }\n static removeBOM(line) {\n // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string\n // conversion translates it to FEFF (UTF-16 BOM)\n if (line && line.charCodeAt(0) === 0xfeff) {\n return line.slice(1);\n }\n return line;\n }\n parse(line, hasMoreData) {\n const scanner = new Scanner_1.Scanner({\n line: Parser.removeBOM(line),\n parserOptions: this.parserOptions,\n hasMoreData\n });\n if (this.parserOptions.supportsComments) {\n return this.parseWithComments(scanner);\n }\n return this.parseWithoutComments(scanner);\n }\n parseWithoutComments(scanner) {\n const rows = [];\n let shouldContinue = true;\n while (shouldContinue) {\n shouldContinue = this.parseRow(scanner, rows);\n }\n return {\n line: scanner.line,\n rows\n };\n }\n parseWithComments(scanner) {\n const {\n parserOptions\n } = this;\n const rows = [];\n for (let nextToken = scanner.nextCharacterToken; nextToken !== null; nextToken = scanner.nextCharacterToken) {\n if (Token_1.Token.isTokenComment(nextToken, parserOptions)) {\n const cursor = scanner.advancePastLine();\n if (cursor === null) {\n return {\n line: scanner.lineFromCursor,\n rows\n };\n }\n if (!scanner.hasMoreCharacters) {\n return {\n line: scanner.lineFromCursor,\n rows\n };\n }\n scanner.truncateToCursor();\n } else if (!this.parseRow(scanner, rows)) {\n break;\n }\n }\n return {\n line: scanner.line,\n rows\n };\n }\n parseRow(scanner, rows) {\n const nextToken = scanner.nextNonSpaceToken;\n if (!nextToken) {\n return false;\n }\n const row = this.rowParser.parse(scanner);\n if (row === null) {\n return false;\n }\n if (this.parserOptions.ignoreEmpty && RowParser_1.RowParser.isEmptyRow(row)) {\n return true;\n }\n rows.push(row);\n return true;\n }\n}\nexports.Parser = Parser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTY2FubmVyXzEiLCJyZXF1aXJlIiwiUm93UGFyc2VyXzEiLCJUb2tlbl8xIiwiUGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwicm93UGFyc2VyIiwiUm93UGFyc2VyIiwicmVtb3ZlQk9NIiwibGluZSIsImNoYXJDb2RlQXQiLCJzbGljZSIsInBhcnNlIiwiaGFzTW9yZURhdGEiLCJzY2FubmVyIiwiU2Nhbm5lciIsInN1cHBvcnRzQ29tbWVudHMiLCJwYXJzZVdpdGhDb21tZW50cyIsInBhcnNlV2l0aG91dENvbW1lbnRzIiwicm93cyIsInNob3VsZENvbnRpbnVlIiwicGFyc2VSb3ciLCJuZXh0VG9rZW4iLCJuZXh0Q2hhcmFjdGVyVG9rZW4iLCJUb2tlbiIsImlzVG9rZW5Db21tZW50IiwiY3Vyc29yIiwiYWR2YW5jZVBhc3RMaW5lIiwibGluZUZyb21DdXJzb3IiLCJoYXNNb3JlQ2hhcmFjdGVycyIsInRydW5jYXRlVG9DdXJzb3IiLCJuZXh0Tm9uU3BhY2VUb2tlbiIsInJvdyIsImlnbm9yZUVtcHR5IiwiaXNFbXB0eVJvdyIsInB1c2giLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhcnNlci9QYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQUFBLFNBQUEsR0FBQUMsT0FBQTtBQUNBLE1BQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUdBLE1BQUFFLE9BQUEsR0FBQUYsT0FBQTtBQU1BLE1BQWFHLE1BQU07RUFjZkMsWUFBbUJDLGFBQTRCO0lBQzNDLElBQUksQ0FBQ0EsYUFBYSxHQUFHQSxhQUFhO0lBQ2xDLElBQUksQ0FBQ0MsU0FBUyxHQUFHLElBQUlMLFdBQUEsQ0FBQU0sU0FBUyxDQUFDLElBQUksQ0FBQ0YsYUFBYSxDQUFDO0VBQ3REO0VBaEJRLE9BQU9HLFNBQVNBLENBQUNDLElBQVk7SUFDakM7SUFDQTtJQUNBLElBQUlBLElBQUksSUFBSUEs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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowParser = void 0;\nconst column_1 = require(\"./column\");\nconst Token_1 = require(\"./Token\");\nconst EMPTY_STRING = '';\nclass RowParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.columnParser = new column_1.ColumnParser(parserOptions);\n }\n static isEmptyRow(row) {\n return row.join(EMPTY_STRING).replace(/\\s+/g, EMPTY_STRING) === EMPTY_STRING;\n }\n parse(scanner) {\n const {\n parserOptions\n } = this;\n const {\n hasMoreData\n } = scanner;\n const currentScanner = scanner;\n const columns = [];\n let currentToken = this.getStartToken(currentScanner, columns);\n while (currentToken) {\n if (Token_1.Token.isTokenRowDelimiter(currentToken)) {\n currentScanner.advancePastToken(currentToken);\n // if ends with CR and there is more data, keep unparsed due to possible\n // coming LF in CRLF\n if (!currentScanner.hasMoreCharacters && Token_1.Token.isTokenCarriageReturn(currentToken, parserOptions) && hasMoreData) {\n return null;\n }\n currentScanner.truncateToCursor();\n return columns;\n }\n if (!this.shouldSkipColumnParse(currentScanner, currentToken, columns)) {\n const item = this.columnParser.parse(currentScanner);\n if (item === null) {\n return null;\n }\n columns.push(item);\n }\n currentToken = currentScanner.nextNonSpaceToken;\n }\n if (!hasMoreData) {\n currentScanner.truncateToCursor();\n return columns;\n }\n return null;\n }\n getStartToken(scanner, columns) {\n const currentToken = scanner.nextNonSpaceToken;\n if (currentToken !== null && Token_1.Token.isTokenDelimiter(currentToken, this.parserOptions)) {\n columns.push('');\n return scanner.nextNonSpaceToken;\n }\n return currentToken;\n }\n shouldSkipColumnParse(scanner, currentToken, columns) {\n const {\n parserOptions\n } = this;\n if (Token_1.Token.isTokenDelimiter(currentToken, parserOptions)) {\n scanner.advancePastToken(currentToken);\n // if the delimiter is at the end of a line\n const nextToken = scanner.nextCharacterToken;\n if (!scanner.hasMoreCharacters || nextToken !== null && Token_1.Token.isTokenRowDelimiter(nextToken)) {\n columns.push('');\n return true;\n }\n if (nextToken !== null && Token_1.Token.isTokenDelimiter(nextToken, parserOptions)) {\n columns.push('');\n return true;\n }\n }\n return false;\n }\n}\nexports.RowParser = RowParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2x1bW5fMSIsInJlcXVpcmUiLCJUb2tlbl8xIiwiRU1QVFlfU1RSSU5HIiwiUm93UGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwiY29sdW1uUGFyc2VyIiwiQ29sdW1uUGFyc2VyIiwiaXNFbXB0eVJvdyIsInJvdyIsImpvaW4iLCJyZXBsYWNlIiwicGFyc2UiLCJzY2FubmVyIiwiaGFzTW9yZURhdGEiLCJjdXJyZW50U2Nhbm5lciIsImNvbHVtbnMiLCJjdXJyZW50VG9rZW4iLCJnZXRTdGFydFRva2VuIiwiVG9rZW4iLCJpc1Rva2VuUm93RGVsaW1pdGVyIiwiYWR2YW5jZVBhc3RUb2tlbiIsImhhc01vcmVDaGFyYWN0ZXJzIiwiaXNUb2tlbkNhcnJpYWdlUmV0dXJuIiwidHJ1bmNhdGVUb0N1cnNvciIsInNob3VsZFNraXBDb2x1bW5QYXJzZSIsIml0ZW0iLCJwdXNoIiwibmV4dE5vblNwYWNlVG9rZW4iLCJpc1Rva2VuRGVsaW1pdGVyIiwibmV4dFRva2VuIiwibmV4dENoYXJhY3RlclRva2VuIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvUm93UGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxNQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFHQSxNQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxNQUFNRSxZQUFZLEdBQUcsRUFBRTtBQUV2QixNQUFhQyxTQUFTO0VBU2xCQyxZQUFtQkMsYUFBNEI7SUFDM0MsSUFBSSxDQUFDQSxhQUFhLEdBQUdBLGFBQWE7SUFDbEMsSUFBSSxDQUFDQyxZQUFZLEdBQUcsSUFBSVAsUUFBQSxDQUFBUSxZQUFZLENBQUNGLGFBQWEsQ0FBQztFQUN2RDtFQVhBLE9BQU9HLFVBQVVBLENBQUNDLEdBQWE7SUFDM0IsT0FBT0EsR0FBRyxDQUFDQyxJQUFJLENBQUNSLFlBQVksQ0FBQyxDQUFDUyxPQUFPLENBQUMsTUFB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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scanner = void 0;\nconst Token_1 = require(\"./Token\");\nconst ROW_DELIMITER = /((?:\\r\\n)|\\n|\\r)/;\nclass Scanner {\n constructor(args) {\n this.cursor = 0;\n this.line = args.line;\n this.lineLength = this.line.length;\n this.parserOptions = args.parserOptions;\n this.hasMoreData = args.hasMoreData;\n this.cursor = args.cursor || 0;\n }\n get hasMoreCharacters() {\n return this.lineLength > this.cursor;\n }\n get nextNonSpaceToken() {\n const {\n lineFromCursor\n } = this;\n const regex = this.parserOptions.NEXT_TOKEN_REGEXP;\n if (lineFromCursor.search(regex) === -1) {\n return null;\n }\n const match = regex.exec(lineFromCursor);\n if (match == null) {\n return null;\n }\n const token = match[1];\n const startCursor = this.cursor + (match.index || 0);\n return new Token_1.Token({\n token,\n startCursor,\n endCursor: startCursor + token.length - 1\n });\n }\n get nextCharacterToken() {\n const {\n cursor,\n lineLength\n } = this;\n if (lineLength <= cursor) {\n return null;\n }\n return new Token_1.Token({\n token: this.line[cursor],\n startCursor: cursor,\n endCursor: cursor\n });\n }\n get lineFromCursor() {\n return this.line.substr(this.cursor);\n }\n advancePastLine() {\n const match = ROW_DELIMITER.exec(this.lineFromCursor);\n if (!match) {\n if (this.hasMoreData) {\n return null;\n }\n this.cursor = this.lineLength;\n return this;\n }\n this.cursor += (match.index || 0) + match[0].length;\n return this;\n }\n advanceTo(cursor) {\n this.cursor = cursor;\n return this;\n }\n advanceToToken(token) {\n this.cursor = token.startCursor;\n return this;\n }\n advancePastToken(token) {\n this.cursor = token.endCursor + 1;\n return this;\n }\n truncateToCursor() {\n this.line = this.lineFromCursor;\n this.lineLength = this.line.length;\n this.cursor = 0;\n return this;\n }\n}\nexports.Scanner = Scanner;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb2tlbl8xIiwicmVxdWlyZSIsIlJPV19ERUxJTUlURVIiLCJTY2FubmVyIiwiY29uc3RydWN0b3IiLCJhcmdzIiwiY3Vyc29yIiwibGluZSIsImxpbmVMZW5ndGgiLCJsZW5ndGgiLCJwYXJzZXJPcHRpb25zIiwiaGFzTW9yZURhdGEiLCJoYXNNb3JlQ2hhcmFjdGVycyIsIm5leHROb25TcGFjZVRva2VuIiwibGluZUZyb21DdXJzb3IiLCJyZWdleCIsIk5FWFRfVE9LRU5fUkVHRVhQIiwic2VhcmNoIiwibWF0Y2giLCJleGVjIiwidG9rZW4iLCJzdGFydEN1cnNvciIsImluZGV4IiwiVG9rZW4iLCJlbmRDdXJzb3IiLCJuZXh0Q2hhcmFjdGVyVG9rZW4iLCJzdWJzdHIiLCJhZHZhbmNlUGFzdExpbmUiLCJhZHZhbmNlVG8iLCJhZHZhbmNlVG9Ub2tlbiIsImFkdmFuY2VQYXN0VG9rZW4iLCJ0cnVuY2F0ZVRvQ3Vyc29yIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvU2Nhbm5lci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBRUEsTUFBTUMsYUFBYSxHQUFHLGtCQUFrQjtBQVN4QyxNQUFhQyxPQUFPO0VBV2hCQyxZQUFtQkMsSUFBaUI7SUFGN0IsS0FBQUMsTUFBTSxHQUFHLENBQUM7SUFHYixJQUFJLENBQUNDLElBQUksR0FBR0YsSUFBSSxDQUFDRSxJQUFJO0lBQ3JCLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUksQ0FBQ0QsSUFBSSxDQUFDRSxNQUFNO0lBQ2xDLElBQUksQ0FBQ0MsYUFBYSxHQUFHTCxJQUFJLENBQUNLLGFBQWE7SUFDdkMsSUFBSSxDQUFDQyxXQUFXLEdBQUdOLElBQUksQ0FBQ00sV0FBVztJQUNuQyxJQUFJLENBQUNMLE1BQU0sR0FBR0QsSUFBSSxDQUFDQyxNQUFNLElBQUksQ0FBQztFQUNsQztFQUVBLElB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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Token = void 0;\nclass Token {\n constructor(tokenArgs) {\n this.token = tokenArgs.token;\n this.startCursor = tokenArgs.startCursor;\n this.endCursor = tokenArgs.endCursor;\n }\n static isTokenRowDelimiter(token) {\n const content = token.token;\n return content === '\\r' || content === '\\n' || content === '\\r\\n';\n }\n static isTokenCarriageReturn(token, parserOptions) {\n return token.token === parserOptions.carriageReturn;\n }\n static isTokenComment(token, parserOptions) {\n return parserOptions.supportsComments && !!token && token.token === parserOptions.comment;\n }\n static isTokenEscapeCharacter(token, parserOptions) {\n return token.token === parserOptions.escapeChar;\n }\n static isTokenQuote(token, parserOptions) {\n return token.token === parserOptions.quote;\n }\n static isTokenDelimiter(token, parserOptions) {\n return token.token === parserOptions.delimiter;\n }\n}\nexports.Token = Token;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb2tlbiIsImNvbnN0cnVjdG9yIiwidG9rZW5BcmdzIiwidG9rZW4iLCJzdGFydEN1cnNvciIsImVuZEN1cnNvciIsImlzVG9rZW5Sb3dEZWxpbWl0ZXIiLCJjb250ZW50IiwiaXNUb2tlbkNhcnJpYWdlUmV0dXJuIiwicGFyc2VyT3B0aW9ucyIsImNhcnJpYWdlUmV0dXJuIiwiaXNUb2tlbkNvbW1lbnQiLCJzdXBwb3J0c0NvbW1lbnRzIiwiY29tbWVudCIsImlzVG9rZW5Fc2NhcGVDaGFyYWN0ZXIiLCJlc2NhcGVDaGFyIiwiaXNUb2tlblF1b3RlIiwicXVvdGUiLCJpc1Rva2VuRGVsaW1pdGVyIiwiZGVsaW1pdGVyIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvVG9rZW4udHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQVVBLE1BQWFBLEtBQUs7RUFnQ2RDLFlBQW1CQyxTQUFvQjtJQUNuQyxJQUFJLENBQUNDLEtBQUssR0FBR0QsU0FBUyxDQUFDQyxLQUFLO0lBQzVCLElBQUksQ0FBQ0MsV0FBVyxHQUFHRixTQUFTLENBQUNFLFdBQVc7SUFDeEMsSUFBSSxDQUFDQyxTQUFTLEdBQUdILFNBQVMsQ0FBQ0csU0FBUztFQUN4QztFQW5DTyxPQUFPQyxtQkFBbUJBLENBQUNILEtBQVk7SUFDMUMsTUFBTUksT0FBTyxHQUFHSixLQUFLLENBQUNBLEtBQUs7SUFDM0IsT0FBT0ksT0FBTyxLQUFLLElBQUksSUFBSUEsT0FBTyxLQUFLLElBQUksSUFBSUEsT0FBTyxLQUFLLE1BQU07RUFDckU7RUFFTyxPQUFPQyxxQkFBcUJBLENBQUNMLEtBQVksRUFBRU0sYUFBNEI7SUFDMUUsT0FBT04sS0FBSyxDQUFDQSxLQUFLLEtBQUtNLGFBQWEsQ0FBQ0MsY0FBYztFQUN2RDtFQUVPLE9BQU9DLGNBQWNBLENBQUNSLEtBQVksRUFBRU0sYUFBNEI7SUFDbkUsT0FBT0EsYUFBYSxDQUFDRyxnQkFBZ0IsSUFBSSxDQUFDLENBQUNULEtBQUssSUFBSUEsS0FBSyxDQUFDQSxLQUFLLEtBQUtNLGFBQWEsQ0FBQ0ksT0FBTztFQUM3RjtFQUVPLE9BQU9DLHNCQUFzQkEsQ0FBQ1gsS0FBWSxFQUFFTSxhQUE0QjtJQUMzRSxPQUFPTixLQUFLLENBQUNBLEtBQUssS0FBS00sYUFBYSxDQUFDTSxVQUFVO0VBQ25EO0VBRU8sT0FBT0MsWUFBWUEsQ0FBQ2IsS0FBWSxFQUFFTSxhQUE0QjtJQUNqRSxPQUFPTixLQUFLLENBQUNBLEtBQUssS0FBS00sYUFBYSxDQUFDUSxLQUFLO0VBQzlDO0VBRU8sT0FBT0MsZ0JBQWdCQSxDQUFDZixLQUFZLEVBQUVNLGFBQTRCO0lBQ3JFLE9BQU9OLEtBQUssQ0FBQ0EsS0FBSyxLQUFLTSxhQUFhLENBQUNVLFNBQVM7RUFDbEQ7O0FBeEJKQyxPQUFBLENBQUFwQixLQUFBLEdBQUFBLEtBQUEifQ==", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnFormatter = void 0;\nclass ColumnFormatter {\n constructor(parserOptions) {\n if (parserOptions.trim) {\n this.format = col => col.trim();\n } else if (parserOptions.ltrim) {\n this.format = col => col.trimLeft();\n } else if (parserOptions.rtrim) {\n this.format = col => col.trimRight();\n } else {\n this.format = col => col;\n }\n }\n}\nexports.ColumnFormatter = ColumnFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5Gb3JtYXR0ZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlck9wdGlvbnMiLCJ0cmltIiwiZm9ybWF0IiwiY29sIiwibHRyaW0iLCJ0cmltTGVmdCIsInJ0cmltIiwidHJpbVJpZ2h0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL0NvbHVtbkZvcm1hdHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsTUFBYUEsZUFBZTtFQUd4QkMsWUFBbUJDLGFBQTRCO0lBQzNDLElBQUlBLGFBQWEsQ0FBQ0MsSUFBSSxFQUFFO01BQ3BCLElBQUksQ0FBQ0MsTUFBTSxHQUFJQyxHQUFXLElBQWFBLEdBQUcsQ0FBQ0YsSUFBSSxFQUFFO0tBQ3BELE1BQU0sSUFBSUQsYUFBYSxDQUFDSSxLQUFLLEVBQUU7TUFDNUIsSUFBSSxDQUFDRixNQUFNLEdBQUlDLEdBQVcsSUFBYUEsR0FBRyxDQUFDRSxRQUFRLEVBQUU7S0FDeEQsTUFBTSxJQUFJTCxhQUFhLENBQUNNLEtBQUssRUFBRTtNQUM1QixJQUFJLENBQUNKLE1BQU0sR0FBSUMsR0FBVyxJQUFhQSxHQUFHLENBQUNJLFNBQVMsRUFBRTtLQUN6RCxNQUFNO01BQ0gsSUFBSSxDQUFDTCxNQUFNLEdBQUlDLEdBQVcsSUFBYUEsR0FBRzs7RUFFbEQ7O0FBYkpLLE9BQUEsQ0FBQVYsZUFBQSxHQUFBQSxlQUFBIn0=", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnParser = void 0;\nconst NonQuotedColumnParser_1 = require(\"./NonQuotedColumnParser\");\nconst QuotedColumnParser_1 = require(\"./QuotedColumnParser\");\nconst Token_1 = require(\"../Token\");\nclass ColumnParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.quotedColumnParser = new QuotedColumnParser_1.QuotedColumnParser(parserOptions);\n this.nonQuotedColumnParser = new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions);\n }\n parse(scanner) {\n const {\n nextNonSpaceToken\n } = scanner;\n if (nextNonSpaceToken !== null && Token_1.Token.isTokenQuote(nextNonSpaceToken, this.parserOptions)) {\n scanner.advanceToToken(nextNonSpaceToken);\n return this.quotedColumnParser.parse(scanner);\n }\n return this.nonQuotedColumnParser.parse(scanner);\n }\n}\nexports.ColumnParser = ColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOb25RdW90ZWRDb2x1bW5QYXJzZXJfMSIsInJlcXVpcmUiLCJRdW90ZWRDb2x1bW5QYXJzZXJfMSIsIlRva2VuXzEiLCJDb2x1bW5QYXJzZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlck9wdGlvbnMiLCJxdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXIiLCJub25RdW90ZWRDb2x1bW5QYXJzZXIiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJwYXJzZSIsInNjYW5uZXIiLCJuZXh0Tm9uU3BhY2VUb2tlbiIsIlRva2VuIiwiaXNUb2tlblF1b3RlIiwiYWR2YW5jZVRvVG9rZW4iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhcnNlci9jb2x1bW4vQ29sdW1uUGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxNQUFBQSx1QkFBQSxHQUFBQyxPQUFBO0FBQ0EsTUFBQUMsb0JBQUEsR0FBQUQsT0FBQTtBQUVBLE1BQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLE1BQWFHLFlBQVk7RUFPckJDLFlBQW1CQyxhQUE0QjtJQUMzQyxJQUFJLENBQUNBLGFBQWEsR0FBR0EsYUFBYTtJQUNsQyxJQUFJLENBQUNDLGtCQUFrQixHQUFHLElBQUlMLG9CQUFBLENBQUFNLGtCQUFrQixDQUFDRixhQUFhLENBQUM7SUFDL0QsSUFBSSxDQUFDRyxxQkFBcUIsR0FBRyxJQUFJVCx1QkFBQSxDQUFBVSxxQkFBcUIsQ0FBQ0osYUFBYSxDQUFDO0VBQ3pFO0VBRU9LLEtBQUtBLENBQUNDLE9BQWdCO0lBQ3pCLE1BQU07TUFBRUM7SUFBaUIsQ0FBRSxHQUFHRCxPQUFPO0lBQ3JDLElBQUlDLGlCQUFpQixLQUFLLElBQUksSUFBSVYsT0FBQSxDQUFBVyxLQUFLLENBQUNDLFlBQVksQ0FBQ0YsaUJBQWlCLEVBQUUsSUFBSSxDQUFDUCxhQUFhLENBQUMsRUFBRTtNQUN6Rk0sT0FBTyxDQUFDSSxjQUFjLENBQUNILGlCQUFpQixDQUFDO01BQ3pDLE9BQU8sSUFBSSxDQUFDTixrQkFBa0IsQ0FBQ0ksS0FBSyxDQUFDQyxPQUFPLENBQUM7O0lBRWpELE9BQU8sSUFBSSxDQUFDSCxxQkFBcUIsQ0FBQ0UsS0FBSyxDQUFDQyxPQUFPLENBQUM7RUFDcEQ7O0FBcEJKSyxPQUFBLENBQUFiLFlBQUEsR0FBQUEsWUFBQSJ9", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.NonQuotedColumnParser = void 0;\nconst ColumnFormatter_1 = require(\"./ColumnFormatter\");\nconst Token_1 = require(\"../Token\");\nclass NonQuotedColumnParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);\n }\n parse(scanner) {\n if (!scanner.hasMoreCharacters) {\n return null;\n }\n const {\n parserOptions\n } = this;\n const characters = [];\n let nextToken = scanner.nextCharacterToken;\n for (; nextToken; nextToken = scanner.nextCharacterToken) {\n if (Token_1.Token.isTokenDelimiter(nextToken, parserOptions) || Token_1.Token.isTokenRowDelimiter(nextToken)) {\n break;\n }\n characters.push(nextToken.token);\n scanner.advancePastToken(nextToken);\n }\n return this.columnFormatter.format(characters.join(''));\n }\n}\nexports.NonQuotedColumnParser = NonQuotedColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5Gb3JtYXR0ZXJfMSIsInJlcXVpcmUiLCJUb2tlbl8xIiwiTm9uUXVvdGVkQ29sdW1uUGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwiY29sdW1uRm9ybWF0dGVyIiwiQ29sdW1uRm9ybWF0dGVyIiwicGFyc2UiLCJzY2FubmVyIiwiaGFzTW9yZUNoYXJhY3RlcnMiLCJjaGFyYWN0ZXJzIiwibmV4dFRva2VuIiwibmV4dENoYXJhY3RlclRva2VuIiwiVG9rZW4iLCJpc1Rva2VuRGVsaW1pdGVyIiwiaXNUb2tlblJvd0RlbGltaXRlciIsInB1c2giLCJ0b2tlbiIsImFkdmFuY2VQYXN0VG9rZW4iLCJmb3JtYXQiLCJqb2luIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL05vblF1b3RlZENvbHVtblBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsTUFBQUEsaUJBQUEsR0FBQUMsT0FBQTtBQUVBLE1BQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUVBLE1BQWFFLHFCQUFxQjtFQUs5QkMsWUFBbUJDLGFBQTRCO0lBQzNDLElBQUksQ0FBQ0EsYUFBYSxHQUFHQSxhQUFhO0lBQ2xDLElBQUksQ0FBQ0MsZUFBZSxHQUFHLElBQUlOLGlCQUFBLENBQUFPLGVBQWUsQ0FBQ0YsYUFBYSxDQUFDO0VBQzdEO0VBRU9HLEtBQUtBLENBQUNDLE9BQWdCO0lBQ3pCLElBQUksQ0FBQ0EsT0FBTyxDQUFDQyxpQkFBaUIsRUFBRTtNQUM1QixPQUFPLElBQUk7O0lBRWYsTUFBTTtNQUFFTDtJQUFhLENBQUUsR0FBRyxJQUFJO0lBQzlCLE1BQU1NLFVBQVUsR0FBRyxFQUFFO0lBQ3JCLElBQUlDLFNBQVMsR0FBR0gsT0FBTyxDQUFDSSxrQkFBa0I7SUFDMUMsT0FBT0QsU0FBUyxFQUFFQSxTQUFTLEdBQUdILE9BQU8sQ0FBQ0ksa0JBQWtCLEVBQUU7TUFDdEQsSUFBSVgsT0FBQSxDQUFBWSxLQUFLLENBQUNDLGdCQUFnQixDQUFDSCxTQUFTLEVBQUVQLGFBQWEsQ0FBQyxJQUFJSCxPQUFBLENBQUFZLEtBQUssQ0FBQ0UsbUJBQW1CLENBQUNKLFNBQVMsQ0FBQyxFQUFFO1FBQzFGOztNQUVKRCxVQUFVLENBQUNNLElBQUksQ0FBQ0wsU0FBUyxDQUFDTSxLQUFLLENBQUM7TUFDaENULE9BQU8sQ0FBQ1UsZ0JBQWdCLENBQUNQLFNBQVMsQ0FBQzs7SUFFdkMsT0FBTyxJQUFJLENBQUNOLGVBQWUsQ0FBQ2MsTUFBTSxDQUFDVCxVQUFVLENBQUNVLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMzRDs7QUF6QkpDLE9BQUEsQ0FBQW5CLHFCQUFBLEdBQUFBLHFCQUFBIn0=", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QuotedColumnParser = void 0;\nconst ColumnFormatter_1 = require(\"./ColumnFormatter\");\nconst Token_1 = require(\"../Token\");\nclass QuotedColumnParser {\n constructor(parserOptions) {\n this.parserOptions = parserOptions;\n this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);\n }\n parse(scanner) {\n if (!scanner.hasMoreCharacters) {\n return null;\n }\n const originalCursor = scanner.cursor;\n const {\n foundClosingQuote,\n col\n } = this.gatherDataBetweenQuotes(scanner);\n if (!foundClosingQuote) {\n // reset the cursor to the original\n scanner.advanceTo(originalCursor);\n // if we didnt find a closing quote but we potentially have more data then skip the parsing\n // and return the original scanner.\n if (!scanner.hasMoreData) {\n throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote || ''}' in line: at '${scanner.lineFromCursor.replace(/[\\r\\n]/g, \"\\\\n'\")}'`);\n }\n return null;\n }\n this.checkForMalformedColumn(scanner);\n return col;\n }\n gatherDataBetweenQuotes(scanner) {\n const {\n parserOptions\n } = this;\n let foundStartingQuote = false;\n let foundClosingQuote = false;\n const characters = [];\n let nextToken = scanner.nextCharacterToken;\n for (; !foundClosingQuote && nextToken !== null; nextToken = scanner.nextCharacterToken) {\n const isQuote = Token_1.Token.isTokenQuote(nextToken, parserOptions);\n // ignore first quote\n if (!foundStartingQuote && isQuote) {\n foundStartingQuote = true;\n } else if (foundStartingQuote) {\n if (Token_1.Token.isTokenEscapeCharacter(nextToken, parserOptions)) {\n // advance past the escape character so we can get the next one in line\n scanner.advancePastToken(nextToken);\n const tokenFollowingEscape = scanner.nextCharacterToken;\n // if the character following the escape is a quote character then just add\n // the quote and advance to that character\n if (tokenFollowingEscape !== null && (Token_1.Token.isTokenQuote(tokenFollowingEscape, parserOptions) || Token_1.Token.isTokenEscapeCharacter(tokenFollowingEscape, parserOptions))) {\n characters.push(tokenFollowingEscape.token);\n nextToken = tokenFollowingEscape;\n } else if (isQuote) {\n // if the escape is also a quote then we found our closing quote and finish early\n foundClosingQuote = true;\n } else {\n // other wise add the escape token to the characters since it wast escaping anything\n characters.push(nextToken.token);\n }\n } else if (isQuote) {\n // we found our closing quote!\n foundClosingQuote = true;\n } else {\n // add the token to the characters\n characters.push(nextToken.token);\n }\n }\n scanner.advancePastToken(nextToken);\n }\n return {\n col: this.columnFormatter.format(characters.join('')),\n foundClosingQuote\n };\n }\n checkForMalformedColumn(scanner) {\n const {\n parserOptions\n } = this;\n const {\n nextNonSpaceToken\n } = scanner;\n if (nextNonSpaceToken) {\n const isNextTokenADelimiter = Token_1.Token.isTokenDelimiter(nextNonSpaceToken, parserOptions);\n const isNextTokenARowDelimiter = Token_1.Token.isTokenRowDelimiter(nextNonSpaceToken);\n if (!(isNextTokenADelimiter || isNextTokenARowDelimiter)) {\n // if the final quote was NOT followed by a column (,) or row(\\n) delimiter then its a bad column\n // tldr: only part of the column was quoted\n const linePreview = scanner.lineFromCursor.substr(0, 10).replace(/[\\r\\n]/g, \"\\\\n'\");\n throw new Error(`Parse Error: expected: '${parserOptions.escapedDelimiter}' OR new line got: '${nextNonSpaceToken.token}'. at '${linePreview}`);\n }\n scanner.advanceToToken(nextNonSpaceToken);\n } else if (!scanner.hasMoreData) {\n scanner.advancePastLine();\n }\n }\n}\nexports.QuotedColumnParser = QuotedColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5Gb3JtYXR0ZXJfMSIsInJlcXVpcmUiLCJUb2tlbl8xIiwiUXVvdGVkQ29sdW1uUGFyc2VyIiwiY29uc3RydWN0b3IiLCJwYXJzZXJPcHRpb25zIiwiY29sdW1uRm9ybWF0dGVyIiwiQ29sdW1uRm9ybWF0dGVyIiwicGFyc2UiLCJzY2FubmVyIiwiaGFzTW9yZUNoYXJhY3RlcnMiLCJvcmlnaW5hbEN1cnNvciIsImN1cnNvciIsImZvdW5kQ2xvc2luZ1F1b3RlIiwiY29sIiwiZ2F0aGVyRGF0YUJldHdlZW5RdW90ZXMiLCJhZHZhbmNlVG8iLCJoYXNNb3JlRGF0YSIsIkVycm9yIiwicXVvdGUiLCJsaW5lRnJvbUN1cnNvciIsInJlcGxhY2UiLCJjaGVja0Zvck1hbGZvcm1lZENvbHVtbiIsImZvdW5kU3RhcnRpbmdRdW90ZSIsImNoYXJhY3RlcnMiLCJuZXh0VG9rZW4iLCJuZXh0Q2hhcmFjdGVyVG9rZW4iLCJpc1F1b3RlIiwiVG9rZW4iLCJpc1Rva2VuUXVvdGUiLCJpc1Rva2VuRXNjYXBlQ2hhcmFjdGVyIiwiYWR2YW5jZVBhc3RUb2tlbiIsInRva2VuRm9sbG93aW5nRXNjYXBlIiwicHVzaCIsInRva2VuIiwiZm9ybWF0Iiwiam9pbiIsIm5leHROb25TcGFjZVRva2VuIiwiaXNOZXh0VG9rZW5BRGVsaW1pdGVyIiwiaXNUb2tlbkRlbGltaXRlciIsImlzTmV4dFRva2VuQVJvd0RlbGltaXRlciIsImlzVG9rZW5Sb3dEZWxpbWl0ZXIiLCJsaW5lUHJldmlldyIsInN1YnN0ciIsImVzY2FwZWREZWxpbWl0ZXIiLCJhZHZhbmNlVG9Ub2tlbiIsImFkdmFuY2VQYXN0TGluZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGFyc2VyL2NvbHVtbi9RdW90ZWRDb2x1bW5QYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQUFBLGlCQUFBLEdBQUFDLE9BQUE7QUFHQSxN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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnFormatter = exports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = void 0;\nvar ColumnParser_1 = require(\"./ColumnParser\");\nObject.defineProperty(exports, \"ColumnParser\", {\n enumerable: true,\n get: function () {\n return ColumnParser_1.ColumnParser;\n }\n});\nvar NonQuotedColumnParser_1 = require(\"./NonQuotedColumnParser\");\nObject.defineProperty(exports, \"NonQuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return NonQuotedColumnParser_1.NonQuotedColumnParser;\n }\n});\nvar QuotedColumnParser_1 = require(\"./QuotedColumnParser\");\nObject.defineProperty(exports, \"QuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return QuotedColumnParser_1.QuotedColumnParser;\n }\n});\nvar ColumnFormatter_1 = require(\"./ColumnFormatter\");\nObject.defineProperty(exports, \"ColumnFormatter\", {\n enumerable: true,\n get: function () {\n return ColumnFormatter_1.ColumnFormatter;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5QYXJzZXJfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ29sdW1uUGFyc2VyIiwiTm9uUXVvdGVkQ29sdW1uUGFyc2VyXzEiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXJfMSIsIlF1b3RlZENvbHVtblBhcnNlciIsIkNvbHVtbkZvcm1hdHRlcl8xIiwiQ29sdW1uRm9ybWF0dGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhcnNlci9jb2x1bW4vaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGNBQUEsR0FBQUMsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLGNBQUEsQ0FBQU8sWUFBWTtFQUFBO0FBQUE7QUFDckIsSUFBQUMsdUJBQUEsR0FBQVAsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFFLHVCQUFBLENBQUFDLHFCQUFxQjtFQUFBO0FBQUE7QUFDOUIsSUFBQUMsb0JBQUEsR0FBQVQsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFJLG9CQUFBLENBQUFDLGtCQUFrQjtFQUFBO0FBQUE7QUFDM0IsSUFBQUMsaUJBQUEsR0FBQVgsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFNLGlCQUFBLENBQUFDLGVBQWU7RUFBQTtBQUFBIn0=", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QuotedColumnParser = exports.NonQuotedColumnParser = exports.ColumnParser = exports.Token = exports.Scanner = exports.RowParser = exports.Parser = void 0;\nvar Parser_1 = require(\"./Parser\");\nObject.defineProperty(exports, \"Parser\", {\n enumerable: true,\n get: function () {\n return Parser_1.Parser;\n }\n});\nvar RowParser_1 = require(\"./RowParser\");\nObject.defineProperty(exports, \"RowParser\", {\n enumerable: true,\n get: function () {\n return RowParser_1.RowParser;\n }\n});\nvar Scanner_1 = require(\"./Scanner\");\nObject.defineProperty(exports, \"Scanner\", {\n enumerable: true,\n get: function () {\n return Scanner_1.Scanner;\n }\n});\nvar Token_1 = require(\"./Token\");\nObject.defineProperty(exports, \"Token\", {\n enumerable: true,\n get: function () {\n return Token_1.Token;\n }\n});\nvar column_1 = require(\"./column\");\nObject.defineProperty(exports, \"ColumnParser\", {\n enumerable: true,\n get: function () {\n return column_1.ColumnParser;\n }\n});\nObject.defineProperty(exports, \"NonQuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return column_1.NonQuotedColumnParser;\n }\n});\nObject.defineProperty(exports, \"QuotedColumnParser\", {\n enumerable: true,\n get: function () {\n return column_1.QuotedColumnParser;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZXJfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUGFyc2VyIiwiUm93UGFyc2VyXzEiLCJSb3dQYXJzZXIiLCJTY2FubmVyXzEiLCJTY2FubmVyIiwiVG9rZW5fMSIsIlRva2VuIiwiY29sdW1uXzEiLCJDb2x1bW5QYXJzZXIiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFyc2VyL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFBU0MsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBTixRQUFBLENBQUFPLE1BQU07RUFBQTtBQUFBO0FBQ2YsSUFBQUMsV0FBQSxHQUFBUCxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsV0FBQSxDQUFBQyxTQUFTO0VBQUE7QUFBQTtBQUNsQixJQUFBQyxTQUFBLEdBQUFULE9BQUE7QUFBU0MsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBSSxTQUFBLENBQUFDLE9BQU87RUFBQTtBQUFBO0FBQ2hCLElBQUFDLE9BQUEsR0FBQVgsT0FBQTtBQUFTQyxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFNLE9BQUEsQ0FBQUMsS0FBSztFQUFBO0FBQUE7QUFDZCxJQUFBQyxRQUFBLEdBQUFiLE9BQUE7QUFBU0MsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBUSxRQUFBLENBQUFDLFlBQVk7RUFBQTtBQUFBO0FBQUViLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVEsUUFBQSxDQUFBRSxxQkFBcUI7RUFBQTtBQUFBO0FBQUVkLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVEsUUFBQSxDQUFBRyxrQkFBa0I7RUFBQTtBQUFBIn0=", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HeaderTransformer = void 0;\nconst lodash_isundefined_1 = __importDefault(require(\"lodash.isundefined\"));\nconst lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\nconst lodash_uniq_1 = __importDefault(require(\"lodash.uniq\"));\nconst lodash_groupby_1 = __importDefault(require(\"lodash.groupby\"));\nclass HeaderTransformer {\n constructor(parserOptions) {\n this.headers = null;\n this.receivedHeaders = false;\n this.shouldUseFirstRow = false;\n this.processedFirstRow = false;\n this.headersLength = 0;\n this.parserOptions = parserOptions;\n if (parserOptions.headers === true) {\n this.shouldUseFirstRow = true;\n } else if (Array.isArray(parserOptions.headers)) {\n this.setHeaders(parserOptions.headers);\n } else if (lodash_isfunction_1.default(parserOptions.headers)) {\n this.headersTransform = parserOptions.headers;\n }\n }\n transform(row, cb) {\n if (!this.shouldMapRow(row)) {\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n return cb(null, this.processRow(row));\n }\n shouldMapRow(row) {\n const {\n parserOptions\n } = this;\n if (!this.headersTransform && parserOptions.renameHeaders && !this.processedFirstRow) {\n if (!this.receivedHeaders) {\n throw new Error('Error renaming headers: new headers must be provided in an array');\n }\n this.processedFirstRow = true;\n return false;\n }\n if (!this.receivedHeaders && Array.isArray(row)) {\n if (this.headersTransform) {\n this.setHeaders(this.headersTransform(row));\n } else if (this.shouldUseFirstRow) {\n this.setHeaders(row);\n } else {\n // dont do anything with the headers if we didnt receive a transform or shouldnt use the first row.\n return true;\n }\n return false;\n }\n return true;\n }\n processRow(row) {\n if (!this.headers) {\n return {\n row: row,\n isValid: true\n };\n }\n const {\n parserOptions\n } = this;\n if (!parserOptions.discardUnmappedColumns && row.length > this.headersLength) {\n if (!parserOptions.strictColumnHandling) {\n throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${row.length}`);\n }\n return {\n row: row,\n isValid: false,\n reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`\n };\n }\n if (parserOptions.strictColumnHandling && row.length < this.headersLength) {\n return {\n row: row,\n isValid: false,\n reason: `Column header mismatch expected: ${this.headersLength} columns got: ${row.length}`\n };\n }\n return {\n row: this.mapHeaders(row),\n isValid: true\n };\n }\n mapHeaders(row) {\n const rowMap = {};\n const {\n headers,\n headersLength\n } = this;\n for (let i = 0; i < headersLength; i += 1) {\n const header = headers[i];\n if (!lodash_isundefined_1.default(header)) {\n const val = row[i];\n // eslint-disable-next-line no-param-reassign\n if (lodash_isundefined_1.default(val)) {\n rowMap[header] = '';\n } else {\n rowMap[header] = val;\n }\n }\n }\n return rowMap;\n }\n setHeaders(headers) {\n var _a;\n const filteredHeaders = headers.filter(h => !!h);\n if (lodash_uniq_1.default(filteredHeaders).length !== filteredHeaders.length) {\n const grouped = lodash_groupby_1.default(filteredHeaders);\n const duplicates = Object.keys(grouped).filter(dup => grouped[dup].length > 1);\n throw new Error(`Duplicate headers found ${JSON.stringify(duplicates)}`);\n }\n this.headers = headers;\n this.receivedHeaders = true;\n this.headersLength = ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.length) || 0;\n }\n}\nexports.HeaderTransformer = HeaderTransformer;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXN1bmRlZmluZWRfMSIsIl9faW1wb3J0RGVmYXVsdCIsInJlcXVpcmUiLCJsb2Rhc2hfaXNmdW5jdGlvbl8xIiwibG9kYXNoX3VuaXFfMSIsImxvZGFzaF9ncm91cGJ5XzEiLCJIZWFkZXJUcmFuc2Zvcm1lciIsImNvbnN0cnVjdG9yIiwicGFyc2VyT3B0aW9ucyIsImhlYWRlcnMiLCJyZWNlaXZlZEhlYWRlcnMiLCJzaG91bGRVc2VGaXJzdFJvdyIsInByb2Nlc3NlZEZpcnN0Um93IiwiaGVhZGVyc0xlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsInNldEhlYWRlcnMiLCJkZWZhdWx0IiwiaGVhZGVyc1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsInJvdyIsImNiIiwic2hvdWxkTWFwUm93IiwiaXNWYWxpZCIsInByb2Nlc3NSb3ciLCJyZW5hbWVIZWFkZXJzIiwiRXJyb3IiLCJkaXNjYXJkVW5tYXBwZWRDb2x1bW5zIiwibGVuZ3RoIiwic3RyaWN0Q29sdW1uSGFuZGxpbmciLCJyZWFzb24iLCJtYXBIZWFkZXJzIiwicm93TWFwIiwiaSIsImhlYWRlciIsInZhbCIsImZpbHRlcmVkSGVhZGVycyIsImZpbHRlciIsImgiLCJncm91cGVkIiwiZHVwbGljYXRlcyIsIk9iamVjdCIsImtleXMiLCJkdXAiLCJKU09OIiwic3RyaW5naWZ5IiwiX2EiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zZm9ybXMvSGVhZGVyVHJhbnNmb3JtZXIudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBQUEsb0JBQUEsR0FBQUMsZUFBQSxDQUFBQyxPQUFBO0FBQ0EsTUFBQUMsbUJBQUEsR0FBQUYsZUFBQSxDQUFBQyxPQUFBO0FBQ0EsTUFBQUUsYUFBQSxHQUFBSCxlQUFBLENBQUFDLE9BQUE7QUFDQSxNQUFBRyxnQkFBQSxHQUFBSixlQUFBLENBQUFDLE9BQUE7QUFZQSxNQUFhSSxp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", + "\"use strict\";\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowTransformerValidator = void 0;\nconst lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\nconst types_1 = require(\"../types\");\nclass RowTransformerValidator {\n constructor() {\n this._rowTransform = null;\n this._rowValidator = null;\n }\n // eslint-disable-next-line @typescript-eslint/no-shadow\n static createTransform(transformFunction) {\n if (types_1.isSyncTransform(transformFunction)) {\n return (row, cb) => {\n let transformed = null;\n try {\n transformed = transformFunction(row);\n } catch (e) {\n return cb(e);\n }\n return cb(null, transformed);\n };\n }\n return transformFunction;\n }\n static createValidator(validateFunction) {\n if (types_1.isSyncValidate(validateFunction)) {\n return (row, cb) => {\n cb(null, {\n row,\n isValid: validateFunction(row)\n });\n };\n }\n return (row, cb) => {\n validateFunction(row, (err, isValid, reason) => {\n if (err) {\n return cb(err);\n }\n if (isValid) {\n return cb(null, {\n row,\n isValid,\n reason\n });\n }\n return cb(null, {\n row,\n isValid: false,\n reason\n });\n });\n };\n }\n set rowTransform(transformFunction) {\n if (!lodash_isfunction_1.default(transformFunction)) {\n throw new TypeError('The transform should be a function');\n }\n this._rowTransform = RowTransformerValidator.createTransform(transformFunction);\n }\n set rowValidator(validateFunction) {\n if (!lodash_isfunction_1.default(validateFunction)) {\n throw new TypeError('The validate should be a function');\n }\n this._rowValidator = RowTransformerValidator.createValidator(validateFunction);\n }\n transformAndValidate(row, cb) {\n return this.callTransformer(row, (transformErr, transformedRow) => {\n if (transformErr) {\n return cb(transformErr);\n }\n if (!transformedRow) {\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n return this.callValidator(transformedRow, (validateErr, validationResult) => {\n if (validateErr) {\n return cb(validateErr);\n }\n if (validationResult && !validationResult.isValid) {\n return cb(null, {\n row: transformedRow,\n isValid: false,\n reason: validationResult.reason\n });\n }\n return cb(null, {\n row: transformedRow,\n isValid: true\n });\n });\n });\n }\n callTransformer(row, cb) {\n if (!this._rowTransform) {\n return cb(null, row);\n }\n return this._rowTransform(row, cb);\n }\n callValidator(row, cb) {\n if (!this._rowValidator) {\n return cb(null, {\n row,\n isValid: true\n });\n }\n return this._rowValidator(row, cb);\n }\n}\nexports.RowTransformerValidator = RowTransformerValidator;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2Rhc2hfaXNmdW5jdGlvbl8xIiwiX19pbXBvcnREZWZhdWx0IiwicmVxdWlyZSIsInR5cGVzXzEiLCJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIsImNvbnN0cnVjdG9yIiwiX3Jvd1RyYW5zZm9ybSIsIl9yb3dWYWxpZGF0b3IiLCJjcmVhdGVUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsImlzU3luY1RyYW5zZm9ybSIsInJvdyIsImNiIiwidHJhbnNmb3JtZWQiLCJlIiwiY3JlYXRlVmFsaWRhdG9yIiwidmFsaWRhdGVGdW5jdGlvbiIsImlzU3luY1ZhbGlkYXRlIiwiaXNWYWxpZCIsImVyciIsInJlYXNvbiIsInJvd1RyYW5zZm9ybSIsImRlZmF1bHQiLCJUeXBlRXJyb3IiLCJyb3dWYWxpZGF0b3IiLCJ0cmFuc2Zvcm1BbmRWYWxpZGF0ZSIsImNhbGxUcmFuc2Zvcm1lciIsInRyYW5zZm9ybUVyciIsInRyYW5zZm9ybWVkUm93IiwiY2FsbFZhbGlkYXRvciIsInZhbGlkYXRlRXJyIiwidmFsaWRhdGlvblJlc3VsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNmb3Jtcy9Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxNQUFBQSxtQkFBQSxHQUFBQyxlQUFBLENBQUFDLE9BQUE7QUFDQSxNQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFhQSxNQUFhRSx1QkFBdUI7RUFBcENDLFlBQUE7SUFzQ1ksS0FBQUMsYUFBYSxHQUFtQyxJQUFJO0lBRXBELEtBQUFDLGFBQWEsR0FBMkIsSUFBSTtFQWlEeEQ7RUF4Rkk7RUFDUSxPQUFPQyxlQUFlQSxDQUMxQkMsaUJBQTZDO0lBRTdDLElBQUlOLE9BQUEsQ0FBQU8sZUFBZSxDQUFDRCxpQkFBaUIsQ0FBQyxFQUFFO01BQ3BDLE9BQU8sQ0FBQ0UsR0FBTSxFQUFFQyxFQUEyQixLQUFV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", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HeaderTransformer = exports.RowTransformerValidator = void 0;\nvar RowTransformerValidator_1 = require(\"./RowTransformerValidator\");\nObject.defineProperty(exports, \"RowTransformerValidator\", {\n enumerable: true,\n get: function () {\n return RowTransformerValidator_1.RowTransformerValidator;\n }\n});\nvar HeaderTransformer_1 = require(\"./HeaderTransformer\");\nObject.defineProperty(exports, \"HeaderTransformer\", {\n enumerable: true,\n get: function () {\n return HeaderTransformer_1.HeaderTransformer;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvcl8xIiwicmVxdWlyZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsImVudW1lcmFibGUiLCJnZXQiLCJSb3dUcmFuc2Zvcm1lclZhbGlkYXRvciIsIkhlYWRlclRyYW5zZm9ybWVyXzEiLCJIZWFkZXJUcmFuc2Zvcm1lciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2Zvcm1zL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSx5QkFBQSxHQUFBQyxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4seUJBQUEsQ0FBQU8sdUJBQXVCO0VBQUE7QUFBQTtBQUNoQyxJQUFBQyxtQkFBQSxHQUFBUCxPQUFBO0FBQVNDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQUUsbUJBQUEsQ0FBQUMsaUJBQWlCO0VBQUE7QUFBQSJ9", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isSyncValidate = exports.isSyncTransform = void 0;\nexports.isSyncTransform = transform => transform.length === 1;\nexports.isSyncValidate = validate => validate.length === 1;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiaXNTeW5jVHJhbnNmb3JtIiwidHJhbnNmb3JtIiwibGVuZ3RoIiwiaXNTeW5jVmFsaWRhdGUiLCJ2YWxpZGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBb0JhQSxPQUFBLENBQUFDLGVBQWUsR0FDeEJDLFNBQXFDLElBQ0NBLFNBQVMsQ0FBQ0MsTUFBTSxLQUFLLENBQUM7QUFRbkRILE9BQUEsQ0FBQUksY0FBYyxHQUFtQkMsUUFBd0IsSUFDbEVBLFFBQVEsQ0FBQ0YsTUFBTSxLQUFLLENBQUMifQ==", + "'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n", + "'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n", + "'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n", + "'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n", + "'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n", + "'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n", + "'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n", + "'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n", + "'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n", + "'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n", + "'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n", + "'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n", + "'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n", + "'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n", + "(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n", + "'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n", + "(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n", + "var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n", + "\"use strict\";\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiZW1wdHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiIl0sIm1hcHBpbmdzIjoiIn0=", + "// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n", + "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n", + "var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", + "var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n", + "var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n", + "var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n", + "function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n", + "var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n", + "var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n", + "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n", + "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n", + "var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n", + "exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n", + "var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n", + "module.exports={\n \"aes-128-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-192-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-256-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-128-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-192-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-256-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes128\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes192\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes256\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-128-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-128-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-128-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-128-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-192-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-256-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-128-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-192-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-256-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-128-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n },\n \"aes-192-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n },\n \"aes-256-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n }\n}\n", + "var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n", + "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n", + "var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", + "var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n", + "exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n", + "var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n", + "module.exports = require('./browser/algorithms.json')\n", + "module.exports={\n \"sha224WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha224\",\n \"id\": \"302d300d06096086480165030402040500041c\"\n },\n \"RSA-SHA224\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha224\",\n \"id\": \"302d300d06096086480165030402040500041c\"\n },\n \"sha256WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha256\",\n \"id\": \"3031300d060960864801650304020105000420\"\n },\n \"RSA-SHA256\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha256\",\n \"id\": \"3031300d060960864801650304020105000420\"\n },\n \"sha384WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha384\",\n \"id\": \"3041300d060960864801650304020205000430\"\n },\n \"RSA-SHA384\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha384\",\n \"id\": \"3041300d060960864801650304020205000430\"\n },\n \"sha512WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha512\",\n \"id\": \"3051300d060960864801650304020305000440\"\n },\n \"RSA-SHA512\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha512\",\n \"id\": \"3051300d060960864801650304020305000440\"\n },\n \"RSA-SHA1\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha1\",\n \"id\": \"3021300906052b0e03021a05000414\"\n },\n \"ecdsa-with-SHA1\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"sha256\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"sha224\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"sha384\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"sha512\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-SHA\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA-SHA1\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA224\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"DSA-SHA224\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA256\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"DSA-SHA256\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA384\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"DSA-SHA384\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA512\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-SHA512\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-RIPEMD160\": {\n \"sign\": \"dsa\",\n \"hash\": \"rmd160\",\n \"id\": \"\"\n },\n \"ripemd160WithRSA\": {\n \"sign\": \"rsa\",\n \"hash\": \"rmd160\",\n \"id\": \"3021300906052b2403020105000414\"\n },\n \"RSA-RIPEMD160\": {\n \"sign\": \"rsa\",\n \"hash\": \"rmd160\",\n \"id\": \"3021300906052b2403020105000414\"\n },\n \"md5WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"md5\",\n \"id\": \"3020300c06082a864886f70d020505000410\"\n },\n \"RSA-MD5\": {\n \"sign\": \"rsa\",\n \"hash\": \"md5\",\n \"id\": \"3020300c06082a864886f70d020505000410\"\n }\n}\n", + "module.exports={\n \"1.3.132.0.10\": \"secp256k1\",\n \"1.3.132.0.33\": \"p224\",\n \"1.2.840.10045.3.1.1\": \"p192\",\n \"1.2.840.10045.3.1.7\": \"p256\",\n \"1.3.132.0.34\": \"p384\",\n \"1.3.132.0.35\": \"p521\"\n}\n", + "var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n", + "// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n", + "// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [1]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = Buffer.from(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = Buffer.from(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n", + "\"use strict\";\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiX2VtcHR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIiJdLCJtYXBwaW5ncyI6IiJ9", + "/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}", + "module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n", + "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayLike(value)\n }\n\n if (value == null) {\n throw TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n buf = Buffer.from(buf)\n }\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (var i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n", + "var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n", + "'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n", + "'use strict';\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a constructor');\n};\n", + "'use strict';\nvar isCallable = require('../internals/is-callable');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n", + "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n defineProperty(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n", + "'use strict';\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw new $TypeError('Incorrect invocation');\n};\n", + "'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n", + "'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !== el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n", + "'use strict';\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE === 1;\n var IS_FILTER = TYPE === 2;\n var IS_SOME = TYPE === 3;\n var IS_EVERY = TYPE === 4;\n var IS_FIND_INDEX = TYPE === 6;\n var IS_FILTER_REJECT = TYPE === 7;\n var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n", + "'use strict';\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar $Array = Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = $Array(max(fin - k, 0));\n var n = 0;\n for (; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n", + "'use strict';\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? $Array : C;\n};\n", + "'use strict';\nvar arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n", + "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n try {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n } catch (error) { return false; } // workaround of old WebKit + `eval` bug\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n", + "'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n", + "'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n", + "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n", + "'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n", + "'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n", + "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n", + "'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n", + "'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n", + "'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n", + "'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n", + "'use strict';\nvar global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n", + "'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n", + "'use strict';\nvar documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n all: documentAll,\n IS_HTMLDDA: IS_HTMLDDA\n};\n", + "'use strict';\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n", + "'use strict';\nvar IS_DENO = require('../internals/engine-is-deno');\nvar IS_NODE = require('../internals/engine-is-node');\n\nmodule.exports = !IS_DENO && !IS_NODE\n && typeof window == 'object'\n && typeof document == 'object';\n", + "'use strict';\n/* global Deno -- Deno case */\nmodule.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object';\n", + "'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != 'undefined';\n", + "'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line redos/no-vulnerable -- safe\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n", + "'use strict';\nvar global = require('../internals/global');\nvar classof = require('../internals/classof-raw');\n\nmodule.exports = classof(global.process) === 'process';\n", + "'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n", + "'use strict';\nmodule.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || '';\n", + "'use strict';\nvar global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n", + "'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n", + "'use strict';\nvar global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n", + "'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n", + "'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n", + "'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n", + "'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n", + "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n", + "'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n // Nashorn bug:\n // https://github.com/zloirock/core-js/issues/1128\n // https://github.com/zloirock/core-js/issues/1130\n if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n", + "'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n", + "'use strict';\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n", + "'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n", + "'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar toString = require('../internals/to-string');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (replacer) {\n if (isCallable(replacer)) return replacer;\n if (!isArray(replacer)) return;\n var rawLength = replacer.length;\n var keys = [];\n for (var i = 0; i < rawLength; i++) {\n var element = replacer[i];\n if (typeof element == 'string') push(keys, element);\n else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n }\n var keysLength = keys.length;\n var root = true;\n return function (key, value) {\n if (root) {\n root = false;\n return value;\n }\n if (isArray(this)) return value;\n for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n };\n};\n", + "'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n", + "'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || this || Function('return this')();\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n", + "'use strict';\nmodule.exports = {};\n", + "'use strict';\nmodule.exports = function (a, b) {\n try {\n // eslint-disable-next-line no-console -- safe\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n } catch (error) { /* empty */ }\n};\n", + "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n", + "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n", + "'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n", + "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n", + "'use strict';\nvar classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) === 'Array';\n};\n", + "'use strict';\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.test(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n", + "'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value === POLYFILL ? true\n : value === NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n", + "'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n", + "'use strict';\nvar isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n", + "'use strict';\nmodule.exports = false;\n", + "'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n", + "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n", + "'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_RECORD = !!(options && options.IS_RECORD);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_RECORD) {\n iterator = iterable.iterator;\n } else if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = IS_RECORD ? iterable.next : iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n", + "'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n", + "'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n", + "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n", + "'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n", + "'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n", + "'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n", + "'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar Queue = require('../internals/queue');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar microtask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\nvar notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!microtask) {\n var queue = new Queue();\n\n var flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (fn = queue.get()) try {\n fn();\n } catch (error) {\n if (queue.head) notify();\n throw error;\n }\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessage\n // - onreadystatechange\n // - setTimeout\n } else {\n // `webpack` dev server bug on IE global methods - use bind(fn, global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n\n microtask = function (fn) {\n if (!queue.head) notify();\n queue.add(fn);\n };\n}\n\nmodule.exports = microtask;\n", + "'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar $TypeError = TypeError;\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n", + "'use strict';\nvar isRegExp = require('../internals/is-regexp');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw new $TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n", + "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol('assign detection');\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n", + "'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n", + "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n", + "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n", + "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n", + "'use strict';\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) === 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n", + "'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n", + "'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n", + "'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n", + "'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n", + "'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n", + "'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n", + "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys\n// of `null` prototype objects\nvar IE_BUG = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-create -- safe\n var O = Object.create(null);\n O[2] = 2;\n return !propertyIsEnumerable(O, 2);\n});\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null;\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n", + "'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n", + "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n", + "'use strict';\nvar global = require('../internals/global');\n\nmodule.exports = global;\n", + "'use strict';\nmodule.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n", + "'use strict';\nvar global = require('../internals/global');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar isCallable = require('../internals/is-callable');\nvar isForced = require('../internals/is-forced');\nvar inspectSource = require('../internals/inspect-source');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_DENO = require('../internals/engine-is-deno');\nvar IS_PURE = require('../internals/is-pure');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar SPECIES = wellKnownSymbol('species');\nvar SUBCLASSING = false;\nvar NATIVE_PROMISE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\n\nvar FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution\n if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) {\n // Detect correctness of subclassing with @@species support\n var promise = new NativePromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n } return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT;\n});\n\nmodule.exports = {\n CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR,\n REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT,\n SUBCLASSING: SUBCLASSING\n};\n", + "'use strict';\nvar global = require('../internals/global');\n\nmodule.exports = global.Promise;\n", + "'use strict';\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n", + "'use strict';\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\nmodule.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) {\n NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ });\n});\n", + "'use strict';\nvar Queue = function () {\n this.head = null;\n this.tail = null;\n};\n\nQueue.prototype = {\n add: function (item) {\n var entry = { item: item, next: null };\n var tail = this.tail;\n if (tail) tail.next = entry;\n else this.head = entry;\n this.tail = entry;\n },\n get: function () {\n var entry = this.head;\n if (entry) {\n var next = this.head = entry.next;\n if (next === null) this.tail = null;\n return entry.item;\n }\n }\n};\n\nmodule.exports = Queue;\n", + "'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n", + "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n", + "'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n", + "'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n", + "'use strict';\nvar global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n", + "'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.33.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n", + "'use strict';\nvar anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S);\n};\n", + "'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\n\nvar $String = global.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n", + "'use strict';\nvar call = require('../internals/function-call');\nvar getBuiltIn = require('../internals/get-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function () {\n var Symbol = getBuiltIn('Symbol');\n var SymbolPrototype = Symbol && Symbol.prototype;\n var valueOf = SymbolPrototype && SymbolPrototype.valueOf;\n var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {\n // `Symbol.prototype[@@toPrimitive]` method\n // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\n // eslint-disable-next-line no-unused-vars -- required for .length\n defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n return call(valueOf, this);\n }, { arity: 1 });\n }\n};\n", + "'use strict';\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\n/* eslint-disable es/no-symbol -- safe */\nmodule.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor;\n", + "'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar $location, defer, channel, port;\n\nfails(function () {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n $location = global.location;\n});\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar eventListener = function (event) {\n run(event.data);\n};\n\nvar globalPostMessageDefer = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), $location.protocol + '//' + $location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(handler) {\n validateArgumentsLength(arguments.length, 1);\n var fn = isCallable(handler) ? handler : Function(handler);\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(fn, undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = eventListener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n $location && $location.protocol !== 'file:' &&\n !fails(globalPostMessageDefer)\n ) {\n defer = globalPostMessageDefer;\n global.addEventListener('message', eventListener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n", + "'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n", + "'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n", + "'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n", + "'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n", + "'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n", + "'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n", + "'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n", + "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n", + "'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n", + "'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n", + "'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n", + "'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n", + "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n", + "'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw new $TypeError('Not enough arguments');\n return passed;\n};\n", + "'use strict';\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n", + "'use strict';\nvar path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n", + "'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n", + "'use strict';\nvar global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = global.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n", + "'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\n// eslint-disable-next-line es/no-array-prototype-findindex -- testing\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n", + "'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\n// eslint-disable-next-line es/no-array-prototype-find -- testing\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n", + "'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar fails = require('../internals/fails');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// FF99+ bug\nvar BROKEN_ON_SPARSE = fails(function () {\n // eslint-disable-next-line es/no-array-prototype-includes -- detection\n return !Array(1).includes();\n});\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n", + "'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n switch (kind) {\n case 'keys': return createIterResultObject(index, false);\n case 'values': return createIterResultObject(target[index], false);\n } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n", + "'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isSymbol = require('../internals/is-symbol');\nvar arraySlice = require('../internals/array-slice');\nvar getReplacerFunction = require('../internals/get-json-replacer-function');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nvar $String = String;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar exec = uncurryThis(/./.exec);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar replace = uncurryThis(''.replace);\nvar numberToString = uncurryThis(1.0.toString);\n\nvar tester = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n var symbol = getBuiltIn('Symbol')('stringify detection');\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) !== '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) !== '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) !== '{}';\n});\n\n// https://github.com/tc39/proposal-well-formed-stringify\nvar ILL_FORMED_UNICODE = fails(function () {\n return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nvar stringifyWithSymbolsFix = function (it, replacer) {\n var args = arraySlice(arguments);\n var $replacer = getReplacerFunction(replacer);\n if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n args[1] = function (key, value) {\n // some old implementations (like WebKit) could pass numbers as keys\n if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n if (!isSymbol(value)) return value;\n };\n return apply($stringify, null, args);\n};\n\nvar fixIllFormed = function (match, offset, string) {\n var prev = charAt(string, offset - 1);\n var next = charAt(string, offset + 1);\n if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\n return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n } return match;\n};\n\nif ($stringify) {\n // `JSON.stringify` method\n // https://tc39.es/ecma262/#sec-json.stringify\n $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\n return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\n }\n });\n}\n", + "'use strict';\nvar $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.es/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number;\n }\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, {\n assign: assign\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar toObject = require('../internals/to-object');\n\n// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); });\n\n// `Object.getOwnPropertySymbols` method\n// https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n$({ target: 'Object', stat: true, forced: FORCED }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];\n }\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.all` method\n// https://tc39.es/ecma262/#sec-promise.all\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// `Promise.prototype.catch` method\n// https://tc39.es/ecma262/#sec-promise.prototype.catch\n$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, {\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n});\n\n// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n var method = getBuiltIn('Promise').prototype['catch'];\n if (NativePromisePrototype['catch'] !== method) {\n defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true });\n }\n}\n", + "'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar IS_NODE = require('../internals/engine-is-node');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar perform = require('../internals/perform');\nvar Queue = require('../internals/queue');\nvar InternalStateModule = require('../internals/internal-state');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar PromiseConstructorDetection = require('../internals/promise-constructor-detection');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\n\nvar PROMISE = 'Promise';\nvar FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;\nvar NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;\nvar NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar setInternalState = InternalStateModule.set;\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar PromiseConstructor = NativePromiseConstructor;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar callReaction = function (reaction, state) {\n var value = state.value;\n var ok = state.state === FULFILLED;\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(new TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n microtask(function () {\n var reactions = state.reactions;\n var reaction;\n while (reaction = reactions.get()) {\n callReaction(reaction, state);\n }\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw new TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED_PROMISE_CONSTRUCTOR) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalPromiseState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n\n PromisePrototype = PromiseConstructor.prototype;\n\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: new Queue(),\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n state.parent = true;\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n if (state.state === PENDING) state.reactions.add(reaction);\n else microtask(function () {\n callReaction(reaction, state);\n });\n return reaction.promise;\n });\n\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalPromiseState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!NATIVE_PROMISE_SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n", + "'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromiseConstructor && fails(function () {\n // eslint-disable-next-line unicorn/no-thenable -- required for testing\n NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = isCallable(onFinally);\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromisePrototype['finally'] !== method) {\n defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true });\n }\n}\n", + "'use strict';\n// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/es.promise.constructor');\nrequire('../modules/es.promise.all');\nrequire('../modules/es.promise.catch');\nrequire('../modules/es.promise.race');\nrequire('../modules/es.promise.reject');\nrequire('../modules/es.promise.resolve');\n", + "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.race` method\n// https://tc39.es/ecma262/#sec-promise.race\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\n// `Promise.reject` method\n// https://tc39.es/ecma262/#sec-promise.reject\n$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n reject: function reject(r) {\n var capability = newPromiseCapabilityModule.f(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar promiseResolve = require('../internals/promise-resolve');\n\nvar PromiseConstructorWrapper = getBuiltIn('Promise');\nvar CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR;\n\n// `Promise.resolve` method\n// https://tc39.es/ecma262/#sec-promise.resolve\n$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, {\n resolve: function resolve(x) {\n return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x);\n }\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\nvar $RangeError = RangeError;\nvar fromCharCode = String.fromCharCode;\n// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing\nvar $fromCodePoint = String.fromCodePoint;\nvar join = uncurryThis([].join);\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length !== 1;\n\n// `String.fromCodePoint` method\n// https://tc39.es/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, arity: 1, forced: INCORRECT_LENGTH }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n fromCodePoint: function fromCodePoint(x) {\n var elements = [];\n var length = arguments.length;\n var i = 0;\n var code;\n while (length > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw new $RangeError(code + ' is not a valid code point');\n elements[i] = code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);\n } return join(elements, '');\n }\n});\n", + "'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n", + "'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n", + "'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar RangeError = global.RangeError;\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar fallbackDefineProperty = function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n};\n\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a !== 7;\n}) ? fallbackDefineProperty : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function (O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n var descriptor = createPropertyDescriptor(1, value);\n try {\n setSymbolDescriptor(this, tag, descriptor);\n } catch (error) {\n if (!(error instanceof RangeError)) throw error;\n fallbackDefineProperty(this, tag, descriptor);\n }\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n defineBuiltIn(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n defineBuiltIn($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n definePropertiesModule.f = $defineProperties;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n defineBuiltInAccessor(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames\n});\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n", + "'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.for` method\n// https://tc39.es/ecma262/#sec-symbol.for\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n 'for': function (key) {\n var string = toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = getBuiltIn('Symbol')(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n }\n});\n", + "'use strict';\n// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/es.symbol.constructor');\nrequire('../modules/es.symbol.for');\nrequire('../modules/es.symbol.key-for');\nrequire('../modules/es.json.stringify');\nrequire('../modules/es.object.get-own-property-symbols');\n", + "'use strict';\nvar $ = require('../internals/export');\nvar hasOwn = require('../internals/has-own-property');\nvar isSymbol = require('../internals/is-symbol');\nvar tryToString = require('../internals/try-to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.keyFor` method\n// https://tc39.es/ecma262/#sec-symbol.keyfor\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n }\n});\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n", + "var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n", + "'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n", + "var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n", + "'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n", + "'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n", + "'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n", + "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));", + "!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));", + "'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n if (this.padding === false) {\n return false;\n }\n\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n if (this.padding === false) {\n return buffer;\n }\n\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n", + "'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n", + "var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n", + "var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n", + "var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n", + "module.exports={\n \"modp1\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n },\n \"modp2\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n },\n \"modp5\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n },\n \"modp14\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n },\n \"modp15\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n },\n \"modp16\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n },\n \"modp17\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n },\n \"modp18\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n }\n}", + "'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n", + "'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n", + "'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n", + "'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n", + "'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n", + "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n", + "module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n", + "'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n", + "module.exports={\n \"name\": \"elliptic\",\n \"version\": \"6.5.4\",\n \"description\": \"EC cryptography\",\n \"main\": \"lib/elliptic.js\",\n \"files\": [\n \"lib\"\n ],\n \"scripts\": {\n \"lint\": \"eslint lib test\",\n \"lint:fix\": \"npm run lint -- --fix\",\n \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n \"test\": \"npm run lint && npm run unit\",\n \"version\": \"grunt dist && git add dist/\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git@github.com:indutny/elliptic\"\n },\n \"keywords\": [\n \"EC\",\n \"Elliptic\",\n \"curve\",\n \"Cryptography\"\n ],\n \"author\": \"Fedor Indutny \",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/indutny/elliptic/issues\"\n },\n \"homepage\": \"https://github.com/indutny/elliptic\",\n \"devDependencies\": {\n \"brfs\": \"^2.0.2\",\n \"coveralls\": \"^3.1.0\",\n \"eslint\": \"^7.6.0\",\n \"grunt\": \"^1.2.1\",\n \"grunt-browserify\": \"^5.3.0\",\n \"grunt-cli\": \"^1.3.2\",\n \"grunt-contrib-connect\": \"^3.0.0\",\n \"grunt-contrib-copy\": \"^1.0.0\",\n \"grunt-contrib-uglify\": \"^5.0.0\",\n \"grunt-mocha-istanbul\": \"^5.0.2\",\n \"grunt-saucelabs\": \"^9.0.1\",\n \"istanbul\": \"^0.4.5\",\n \"mocha\": \"^8.0.1\"\n },\n \"dependencies\": {\n \"bn.js\": \"^4.11.9\",\n \"brorand\": \"^1.1.0\",\n \"hash.js\": \"^1.0.0\",\n \"hmac-drbg\": \"^1.0.1\",\n \"inherits\": \"^2.0.4\",\n \"minimalistic-assert\": \"^1.0.1\",\n \"minimalistic-crypto-utils\": \"^1.0.1\"\n }\n}\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar objectCreate = Object.create || objectCreatePolyfill\nvar objectKeys = Object.keys || objectKeysPolyfill\nvar bind = Function.prototype.bind || functionBindPolyfill\n\nfunction EventEmitter() {\n if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {\n this._events = objectCreate(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nvar hasDefineProperty;\ntry {\n var o = {};\n if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });\n hasDefineProperty = o.x === 0;\n} catch (err) { hasDefineProperty = false }\nif (hasDefineProperty) {\n Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n // check whether the input is a positive number (whose value is zero or\n // greater and not a NaN).\n if (typeof arg !== 'number' || arg < 0 || arg !== arg)\n throw new TypeError('\"defaultMaxListeners\" must be a positive number');\n defaultMaxListeners = arg;\n }\n });\n} else {\n EventEmitter.defaultMaxListeners = defaultMaxListeners;\n}\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n if (arguments.length > 1)\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Unhandled \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = objectCreate(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' \"' + String(type) + '\" listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit.');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n if (typeof console === 'object' && console.warn) {\n console.warn('%s: %s', w.name, w.message);\n }\n }\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n switch (arguments.length) {\n case 0:\n return this.listener.call(this.target);\n case 1:\n return this.listener.call(this.target, arguments[0]);\n case 2:\n return this.listener.call(this.target, arguments[0], arguments[1]);\n case 3:\n return this.listener.call(this.target, arguments[0], arguments[1],\n arguments[2]);\n default:\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i)\n args[i] = arguments[i];\n this.listener.apply(this.target, args);\n }\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = bind.call(onceWrapper, state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = objectCreate(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else\n spliceOne(list, position);\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = objectCreate(null);\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = objectCreate(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = objectKeys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = objectCreate(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (!events)\n return [];\n\n var evlistener = events[type];\n if (!evlistener)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction objectCreatePolyfill(proto) {\n var F = function() {};\n F.prototype = proto;\n return new F;\n}\nfunction objectKeysPolyfill(obj) {\n var keys = [];\n for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n return k;\n}\nfunction functionBindPolyfill(context) {\n var fn = this;\n return function () {\n return fn.apply(context, arguments);\n };\n}\n", + "var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvParserStream = exports.ParserOptions = exports.parseFile = exports.parseStream = exports.parseString = exports.parse = exports.FormatterOptions = exports.CsvFormatterStream = exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = void 0;\nvar format_1 = require(\"@fast-csv/format\");\nObject.defineProperty(exports, \"format\", {\n enumerable: true,\n get: function () {\n return format_1.format;\n }\n});\nObject.defineProperty(exports, \"write\", {\n enumerable: true,\n get: function () {\n return format_1.write;\n }\n});\nObject.defineProperty(exports, \"writeToStream\", {\n enumerable: true,\n get: function () {\n return format_1.writeToStream;\n }\n});\nObject.defineProperty(exports, \"writeToBuffer\", {\n enumerable: true,\n get: function () {\n return format_1.writeToBuffer;\n }\n});\nObject.defineProperty(exports, \"writeToString\", {\n enumerable: true,\n get: function () {\n return format_1.writeToString;\n }\n});\nObject.defineProperty(exports, \"writeToPath\", {\n enumerable: true,\n get: function () {\n return format_1.writeToPath;\n }\n});\nObject.defineProperty(exports, \"CsvFormatterStream\", {\n enumerable: true,\n get: function () {\n return format_1.CsvFormatterStream;\n }\n});\nObject.defineProperty(exports, \"FormatterOptions\", {\n enumerable: true,\n get: function () {\n return format_1.FormatterOptions;\n }\n});\nvar parse_1 = require(\"@fast-csv/parse\");\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return parse_1.parse;\n }\n});\nObject.defineProperty(exports, \"parseString\", {\n enumerable: true,\n get: function () {\n return parse_1.parseString;\n }\n});\nObject.defineProperty(exports, \"parseStream\", {\n enumerable: true,\n get: function () {\n return parse_1.parseStream;\n }\n});\nObject.defineProperty(exports, \"parseFile\", {\n enumerable: true,\n get: function () {\n return parse_1.parseFile;\n }\n});\nObject.defineProperty(exports, \"ParserOptions\", {\n enumerable: true,\n get: function () {\n return parse_1.ParserOptions;\n }\n});\nObject.defineProperty(exports, \"CsvParserStream\", {\n enumerable: true,\n get: function () {\n return parse_1.CsvParserStream;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRfMSIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZm9ybWF0Iiwid3JpdGUiLCJ3cml0ZVRvU3RyZWFtIiwid3JpdGVUb0J1ZmZlciIsIndyaXRlVG9TdHJpbmciLCJ3cml0ZVRvUGF0aCIsIkNzdkZvcm1hdHRlclN0cmVhbSIsIkZvcm1hdHRlck9wdGlvbnMiLCJwYXJzZV8xIiwicGFyc2UiLCJwYXJzZVN0cmluZyIsInBhcnNlU3RyZWFtIiwicGFyc2VGaWxlIiwiUGFyc2VyT3B0aW9ucyIsIkNzdlBhcnNlclN0cmVhbSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0lDLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sUUFBQSxDQUFBTyxNQUFNO0VBQUE7QUFBQTtBQUNOTCxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLFFBQUEsQ0FBQVEsS0FBSztFQUFBO0FBQUE7QUFDTE4sTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBTixRQUFBLENBQUFTLGFBQWE7RUFBQTtBQUFBO0FBQ2JQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sUUFBQSxDQUFBVSxhQUFhO0VBQUE7QUFBQTtBQUNiUixNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLFFBQUEsQ0FBQVcsYUFBYTtFQUFBO0FBQUE7QUFDYlQsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBTixRQUFBLENBQUFZLFdBQVc7RUFBQTtBQUFBO0FBQ1hWLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQU4sUUFBQSxDQUFBYSxrQkFBa0I7RUFBQTtBQUFBO0FBQ2xCWCxNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFOLFFBQUEsQ0FBQWMsZ0JBQWdCO0VBQUE7QUFBQTtBQVVwQixJQUFBQyxPQUFBLEdBQUFkLE9BQUE7QUFDSUMsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBUyxPQUFBLENBQUFDLEtBQUs7RUFBQTtBQUFBO0FBQ0xkLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVMsT0FBQSxDQUFBRSxXQUFXO0VBQUE7QUFBQTtBQUNYZixNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFTLE9BQUEsQ0FBQUcsV0FBVztFQUFBO0FBQUE7QUFDWGhCLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLFVBQUE7RUFBQUMsR0FBQSxXQUFBQSxDQUFBO0lBQUEsT0FBQVMsT0FBQSxDQUFBSSxTQUFTO0VBQUE7QUFBQTtBQUNUakIsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsVUFBQTtFQUFBQyxHQUFBLFdBQUFBLENBQUE7SUFBQSxPQUFBUyxPQUFBLENBQUFLLGFBQWE7RUFBQTtBQUFBO0FBQ2JsQixNQUFBLENBQUFDLGNBQUEsQ0FBQUMsT0FBQTtFQUFBQyxVQUFBO0VBQUFDLEdBQUEsV0FBQUEsQ0FBQTtJQUFBLE9BQUFTLE9BQUEsQ0FBQU0sZUFBZTtFQUFBO0FBQUEifQ==", + "'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n", + "var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n", + "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n", + "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n", + "'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n", + "'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n", + "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n", + "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n", + "'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n", + "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n", + "'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n", + "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n", + "'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n", + "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", + "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n", + "/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n}\n\nmodule.exports = escapeRegExp;\n", + "/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var result,\n index = -1,\n length = path.length;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result) {\n return result;\n }\n var length = object ? object.length : 0;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity]\n * The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n result[key] = [value];\n }\n});\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = groupBy;\n", + "/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && objectToString.call(value) == boolTag);\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isBoolean;\n", + "/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n", + "/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n nullTag = '[object Null]',\n proxyTag = '[object Proxy]',\n undefinedTag = '[object Undefined]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isFunction;\n", + "/**\n * lodash 4.0.0 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nmodule.exports = isNil;\n", + "/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nmodule.exports = isUndefined;\n", + "/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n Set = getNative(root, 'Set'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each\n * element is kept.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length)\n ? baseUniq(array)\n : [];\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = uniq;\n", + "'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n", + "var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n", + "module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n", + "'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n", + "module.exports={\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}", + "// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n", + "// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n", + "// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n", + "var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n", + "exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n", + "var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n", + "var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n", + "var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n", + "var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n", + "var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n", + "'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n", + "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", + "exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n", + "var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n", + "var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n", + "var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n", + "var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n", + "module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n", + "'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n", + "'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n", + "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};", + "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", + "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();", + "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};", + "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;", + "module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n", + "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", + "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};", + "module.exports = require('events').EventEmitter;\n", + "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n", + "/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next mehtod, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n", + "'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n", + "/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", + "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst ed5 = require(\"xmlchars/xml/1.0/ed5\");\nconst ed2 = require(\"xmlchars/xml/1.1/ed2\");\nconst NSed3 = require(\"xmlchars/xmlns/1.0/ed3\");\nvar isS = ed5.isS;\nvar isChar10 = ed5.isChar;\nvar isNameStartChar = ed5.isNameStartChar;\nvar isNameChar = ed5.isNameChar;\nvar S_LIST = ed5.S_LIST;\nvar NAME_RE = ed5.NAME_RE;\nvar isChar11 = ed2.isChar;\nvar isNCNameStartChar = NSed3.isNCNameStartChar;\nvar isNCNameChar = NSed3.isNCNameChar;\nvar NC_NAME_RE = NSed3.NC_NAME_RE;\nconst XML_NAMESPACE = \"http://www.w3.org/XML/1998/namespace\";\nconst XMLNS_NAMESPACE = \"http://www.w3.org/2000/xmlns/\";\nconst rootNS = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __proto__: null,\n xml: XML_NAMESPACE,\n xmlns: XMLNS_NAMESPACE\n};\nconst XML_ENTITIES = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __proto__: null,\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: \"\\\"\",\n apos: \"'\"\n};\n// EOC: end-of-chunk\nconst EOC = -1;\nconst NL_LIKE = -2;\nconst S_BEGIN = 0; // Initial state.\nconst S_BEGIN_WHITESPACE = 1; // leading whitespace\nconst S_DOCTYPE = 2; // \nconst TAB = 9;\nconst NL = 0xA;\nconst CR = 0xD;\nconst SPACE = 0x20;\nconst BANG = 0x21;\nconst DQUOTE = 0x22;\nconst AMP = 0x26;\nconst SQUOTE = 0x27;\nconst MINUS = 0x2D;\nconst FORWARD_SLASH = 0x2F;\nconst SEMICOLON = 0x3B;\nconst LESS = 0x3C;\nconst EQUAL = 0x3D;\nconst GREATER = 0x3E;\nconst QUESTION = 0x3F;\nconst OPEN_BRACKET = 0x5B;\nconst CLOSE_BRACKET = 0x5D;\nconst NEL = 0x85;\nconst LS = 0x2028; // Line Separator\nconst isQuote = c => c === DQUOTE || c === SQUOTE;\nconst QUOTES = [DQUOTE, SQUOTE];\nconst DOCTYPE_TERMINATOR = [...QUOTES, OPEN_BRACKET, GREATER];\nconst DTD_TERMINATOR = [...QUOTES, LESS, CLOSE_BRACKET];\nconst XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION, ...S_LIST];\nconst ATTRIB_VALUE_UNQUOTED_TERMINATOR = [...S_LIST, GREATER, AMP, LESS];\nfunction nsPairCheck(parser, prefix, uri) {\n switch (prefix) {\n case \"xml\":\n if (uri !== XML_NAMESPACE) {\n parser.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`);\n }\n break;\n case \"xmlns\":\n if (uri !== XMLNS_NAMESPACE) {\n parser.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`);\n }\n break;\n default:\n }\n switch (uri) {\n case XMLNS_NAMESPACE:\n parser.fail(prefix === \"\" ? `the default namespace may not be set to ${uri}.` : `may not assign a prefix (even \"xmlns\") to the URI \\\n${XMLNS_NAMESPACE}.`);\n break;\n case XML_NAMESPACE:\n switch (prefix) {\n case \"xml\":\n // Assinging the XML namespace to \"xml\" is fine.\n break;\n case \"\":\n parser.fail(`the default namespace may not be set to ${uri}.`);\n break;\n default:\n parser.fail(\"may not assign the xml namespace to another prefix.\");\n }\n break;\n default:\n }\n}\nfunction nsMappingCheck(parser, mapping) {\n for (const local of Object.keys(mapping)) {\n nsPairCheck(parser, local, mapping[local]);\n }\n}\nconst isNCName = name => NC_NAME_RE.test(name);\nconst isName = name => NAME_RE.test(name);\nconst FORBIDDEN_START = 0;\nconst FORBIDDEN_BRACKET = 1;\nconst FORBIDDEN_BRACKET_BRACKET = 2;\n/**\n * The list of supported events.\n */\nexports.EVENTS = [\"xmldecl\", \"text\", \"processinginstruction\", \"doctype\", \"comment\", \"opentagstart\", \"attribute\", \"opentag\", \"closetag\", \"cdata\", \"error\", \"end\", \"ready\"];\nconst EVENT_NAME_TO_HANDLER_NAME = {\n xmldecl: \"xmldeclHandler\",\n text: \"textHandler\",\n processinginstruction: \"piHandler\",\n doctype: \"doctypeHandler\",\n comment: \"commentHandler\",\n opentagstart: \"openTagStartHandler\",\n attribute: \"attributeHandler\",\n opentag: \"openTagHandler\",\n closetag: \"closeTagHandler\",\n cdata: \"cdataHandler\",\n error: \"errorHandler\",\n end: \"endHandler\",\n ready: \"readyHandler\"\n};\nclass SaxesParser {\n /**\n * @param opt The parser options.\n */\n constructor(opt) {\n this.opt = opt !== null && opt !== void 0 ? opt : {};\n this.fragmentOpt = !!this.opt.fragment;\n const xmlnsOpt = this.xmlnsOpt = !!this.opt.xmlns;\n this.trackPosition = this.opt.position !== false;\n this.fileName = this.opt.fileName;\n if (xmlnsOpt) {\n // This is the function we use to perform name checks on PIs and entities.\n // When namespaces are used, colons are not allowed in PI target names or\n // entity names. So the check depends on whether namespaces are used. See:\n //\n // https://www.w3.org/XML/xml-names-19990114-errata.html\n // NE08\n //\n this.nameStartCheck = isNCNameStartChar;\n this.nameCheck = isNCNameChar;\n this.isName = isNCName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsNS;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribNS;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.ns = Object.assign({\n __proto__: null\n }, rootNS);\n const additional = this.opt.additionalNamespaces;\n if (additional != null) {\n nsMappingCheck(this, additional);\n Object.assign(this.ns, additional);\n }\n } else {\n this.nameStartCheck = isNameStartChar;\n this.nameCheck = isNameChar;\n this.isName = isName;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.processAttribs = this.processAttribsPlain;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.pushAttrib = this.pushAttribPlain;\n }\n //\n // The order of the members in this table needs to correspond to the state\n // numbers given to the states that correspond to the methods being recorded\n // here.\n //\n this.stateTable = [/* eslint-disable @typescript-eslint/unbound-method */\n this.sBegin, this.sBeginWhitespace, this.sDoctype, this.sDoctypeQuote, this.sDTD, this.sDTDQuoted, this.sDTDOpenWaka, this.sDTDOpenWakaBang, this.sDTDComment, this.sDTDCommentEnding, this.sDTDCommentEnded, this.sDTDPI, this.sDTDPIEnding, this.sText, this.sEntity, this.sOpenWaka, this.sOpenWakaBang, this.sComment, this.sCommentEnding, this.sCommentEnded, this.sCData, this.sCDataEnding, this.sCDataEnding2, this.sPIFirstChar, this.sPIRest, this.sPIBody, this.sPIEnding, this.sXMLDeclNameStart, this.sXMLDeclName, this.sXMLDeclEq, this.sXMLDeclValueStart, this.sXMLDeclValue, this.sXMLDeclSeparator, this.sXMLDeclEnding, this.sOpenTag, this.sOpenTagSlash, this.sAttrib, this.sAttribName, this.sAttribNameSawWhite, this.sAttribValue, this.sAttribValueQuoted, this.sAttribValueClosed, this.sAttribValueUnquoted, this.sCloseTag, this.sCloseTagSawWhite];\n this._init();\n }\n /**\n * Indicates whether or not the parser is closed. If ``true``, wait for\n * the ``ready`` event to write again.\n */\n get closed() {\n return this._closed;\n }\n _init() {\n var _a;\n this.openWakaBang = \"\";\n this.text = \"\";\n this.name = \"\";\n this.piTarget = \"\";\n this.entity = \"\";\n this.q = null;\n this.tags = [];\n this.tag = null;\n this.topNS = null;\n this.chunk = \"\";\n this.chunkPosition = 0;\n this.i = 0;\n this.prevI = 0;\n this.carriedFromPrevious = undefined;\n this.forbiddenState = FORBIDDEN_START;\n this.attribList = [];\n // The logic is organized so as to minimize the need to check\n // this.opt.fragment while parsing.\n const {\n fragmentOpt\n } = this;\n this.state = fragmentOpt ? S_TEXT : S_BEGIN;\n // We want these to be all true if we are dealing with a fragment.\n this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot = this.sawRoot = fragmentOpt;\n // An XML declaration is intially possible only when parsing whole\n // documents.\n this.xmlDeclPossible = !fragmentOpt;\n this.xmlDeclExpects = [\"version\"];\n this.entityReturnState = undefined;\n let {\n defaultXMLVersion\n } = this.opt;\n if (defaultXMLVersion === undefined) {\n if (this.opt.forceXMLVersion === true) {\n throw new Error(\"forceXMLVersion set but defaultXMLVersion is not set\");\n }\n defaultXMLVersion = \"1.0\";\n }\n this.setXMLVersion(defaultXMLVersion);\n this.positionAtNewLine = 0;\n this.doctype = false;\n this._closed = false;\n this.xmlDecl = {\n version: undefined,\n encoding: undefined,\n standalone: undefined\n };\n this.line = 1;\n this.column = 0;\n this.ENTITIES = Object.create(XML_ENTITIES);\n // eslint-disable-next-line no-unused-expressions\n (_a = this.readyHandler) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n /**\n * The stream position the parser is currently looking at. This field is\n * zero-based.\n *\n * This field is not based on counting Unicode characters but is to be\n * interpreted as a plain index into a JavaScript string.\n */\n get position() {\n return this.chunkPosition + this.i;\n }\n /**\n * The column number of the next character to be read by the parser. *\n * This field is zero-based. (The first column in a line is 0.)\n *\n * This field reports the index at which the next character would be in the\n * line if the line were represented as a JavaScript string. Note that this\n * *can* be different to a count based on the number of *Unicode characters*\n * due to how JavaScript handles astral plane characters.\n *\n * See [[column]] for a number that corresponds to a count of Unicode\n * characters.\n */\n get columnIndex() {\n return this.position - this.positionAtNewLine;\n }\n /**\n * Set an event listener on an event. The parser supports one handler per\n * event type. If you try to set an event handler over an existing handler,\n * the old handler is silently overwritten.\n *\n * @param name The event to listen to.\n *\n * @param handler The handler to set.\n */\n on(name, handler) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = handler;\n }\n /**\n * Unset an event handler.\n *\n * @parma name The event to stop listening to.\n */\n off(name) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this[EVENT_NAME_TO_HANDLER_NAME[name]] = undefined;\n }\n /**\n * Make an error object. The error object will have a message that contains\n * the ``fileName`` option passed at the creation of the parser. If position\n * tracking was turned on, it will also have line and column number\n * information.\n *\n * @param message The message describing the error to report.\n *\n * @returns An error object with a properly formatted message.\n */\n makeError(message) {\n var _a;\n let msg = (_a = this.fileName) !== null && _a !== void 0 ? _a : \"\";\n if (this.trackPosition) {\n if (msg.length > 0) {\n msg += \":\";\n }\n msg += `${this.line}:${this.column}`;\n }\n if (msg.length > 0) {\n msg += \": \";\n }\n return new Error(msg + message);\n }\n /**\n * Report a parsing error. This method is made public so that client code may\n * check for issues that are outside the scope of this project and can report\n * errors.\n *\n * @param message The error to report.\n *\n * @returns this\n */\n fail(message) {\n const err = this.makeError(message);\n const handler = this.errorHandler;\n if (handler === undefined) {\n throw err;\n } else {\n handler(err);\n }\n return this;\n }\n /**\n * Write a XML data to the parser.\n *\n * @param chunk The XML data to write.\n *\n * @returns this\n */\n write(chunk) {\n if (this.closed) {\n return this.fail(\"cannot write after close; assign an onready handler.\");\n }\n let end = false;\n if (chunk === null) {\n // We cannot return immediately because carriedFromPrevious may need\n // processing.\n end = true;\n chunk = \"\";\n } else if (typeof chunk === \"object\") {\n chunk = chunk.toString();\n }\n // We checked if performing a pre-decomposition of the string into an array\n // of single complete characters (``Array.from(chunk)``) would be faster\n // than the current repeated calls to ``charCodeAt``. As of August 2018, it\n // isn't. (There may be Node-specific code that would perform faster than\n // ``Array.from`` but don't want to be dependent on Node.)\n if (this.carriedFromPrevious !== undefined) {\n // The previous chunk had char we must carry over.\n chunk = `${this.carriedFromPrevious}${chunk}`;\n this.carriedFromPrevious = undefined;\n }\n let limit = chunk.length;\n const lastCode = chunk.charCodeAt(limit - 1);\n if (!end && (\n // A trailing CR or surrogate must be carried over to the next\n // chunk.\n lastCode === CR || lastCode >= 0xD800 && lastCode <= 0xDBFF)) {\n // The chunk ends with a character that must be carried over. We cannot\n // know how to handle it until we get the next chunk or the end of the\n // stream. So save it for later.\n this.carriedFromPrevious = chunk[limit - 1];\n limit--;\n chunk = chunk.slice(0, limit);\n }\n const {\n stateTable\n } = this;\n this.chunk = chunk;\n this.i = 0;\n while (this.i < limit) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stateTable[this.state].call(this);\n }\n this.chunkPosition += limit;\n return end ? this.end() : this;\n }\n /**\n * Close the current stream. Perform final well-formedness checks and reset\n * the parser tstate.\n *\n * @returns this\n */\n close() {\n return this.write(null);\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.0.\n *\n * @returns The character read.\n */\n getCode10() {\n const {\n chunk,\n i\n } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if (code >= SPACE || code === TAB) {\n return code;\n }\n switch (code) {\n case NL:\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR:\n // We may get NaN if we read past the end of the chunk, which is fine.\n if (chunk.charCodeAt(i + 1) === NL) {\n // A \\r\\n sequence is converted to \\n so we have to skip over the\n // next character. We already know it has a size of 1 so ++ is fine\n // here.\n this.i = i + 2;\n }\n // Otherwise, a \\r is just converted to \\n, so we don't have to skip\n // ahead.\n // In either case, \\r becomes \\n.\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n // If we get here, then code < SPACE and it is not NL CR or TAB.\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isChar10 that takes into account\n // that in this context code > 0xDBFF and code <= 0xFFFF. So it does not\n // test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isChar10 that takes into account that in\n // this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Get a single code point out of the current chunk. This updates the current\n * position if we do position tracking.\n *\n * This is the algorithm to use for XML 1.1.\n *\n * @returns {number} The character read.\n */\n getCode11() {\n const {\n chunk,\n i\n } = this;\n this.prevI = i;\n // Yes, we do this instead of doing this.i++. Doing it this way, we do not\n // read this.i again, which is a bit faster.\n this.i = i + 1;\n if (i >= chunk.length) {\n return EOC;\n }\n // Using charCodeAt and handling the surrogates ourselves is faster\n // than using codePointAt.\n const code = chunk.charCodeAt(i);\n this.column++;\n if (code < 0xD800) {\n if (code > 0x1F && code < 0x7F || code > 0x9F && code !== LS || code === TAB) {\n return code;\n }\n switch (code) {\n case NL:\n // 0xA\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL;\n case CR:\n {\n // 0xD\n // We may get NaN if we read past the end of the chunk, which is\n // fine.\n const next = chunk.charCodeAt(i + 1);\n if (next === NL || next === NEL) {\n // A CR NL or CR NEL sequence is converted to NL so we have to skip\n // over the next character. We already know it has a size of 1.\n this.i = i + 2;\n }\n // Otherwise, a CR is just converted to NL, no skip.\n }\n /* yes, fall through */\n case NEL: // 0x85\n case LS:\n // Ox2028\n this.line++;\n this.column = 0;\n this.positionAtNewLine = this.position;\n return NL_LIKE;\n default:\n this.fail(\"disallowed character.\");\n return code;\n }\n }\n if (code > 0xDBFF) {\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context code > 0xDBFF and code <= 0xFFFF. So it\n // does not test cases that don't need testing.\n if (!(code >= 0xE000 && code <= 0xFFFD)) {\n this.fail(\"disallowed character.\");\n }\n return code;\n }\n const final = 0x10000 + (code - 0xD800) * 0x400 + (chunk.charCodeAt(i + 1) - 0xDC00);\n this.i = i + 2;\n // This is a specialized version of isCharAndNotRestricted that takes into\n // account that in this context necessarily final >= 0x10000.\n if (final > 0x10FFFF) {\n this.fail(\"disallowed character.\");\n }\n return final;\n }\n /**\n * Like ``getCode`` but with the return value normalized so that ``NL`` is\n * returned for ``NL_LIKE``.\n */\n getCodeNorm() {\n const c = this.getCode();\n return c === NL_LIKE ? NL : c;\n }\n unget() {\n this.i = this.prevI;\n this.column--;\n }\n /**\n * Capture characters into a buffer until encountering one of a set of\n * characters.\n *\n * @param chars An array of codepoints. Encountering a character in the array\n * ends the capture. (``chars`` may safely contain ``NL``.)\n *\n * @return The character code that made the capture end, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureTo(chars) {\n let {\n i: start\n } = this;\n const {\n chunk\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n const isNLLike = c === NL_LIKE;\n const final = isNLLike ? NL : c;\n if (final === EOC || chars.includes(final)) {\n this.text += chunk.slice(start, this.prevI);\n return final;\n }\n if (isNLLike) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n }\n }\n }\n /**\n * Capture characters into a buffer until encountering a character.\n *\n * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT\n * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior.\n *\n * @return ``true`` if we ran into the character. Otherwise, we ran into the\n * end of the current chunk.\n */\n captureToChar(char) {\n let {\n i: start\n } = this;\n const {\n chunk\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let c = this.getCode();\n switch (c) {\n case NL_LIKE:\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n c = NL;\n break;\n case EOC:\n this.text += chunk.slice(start);\n return false;\n default:\n }\n if (c === char) {\n this.text += chunk.slice(start, this.prevI);\n return true;\n }\n }\n }\n /**\n * Capture characters that satisfy ``isNameChar`` into the ``name`` field of\n * this parser.\n *\n * @return The character code that made the test fail, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n captureNameChars() {\n const {\n chunk,\n i: start\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCode();\n if (c === EOC) {\n this.name += chunk.slice(start);\n return EOC;\n }\n // NL is not a name char so we don't have to test specifically for it.\n if (!isNameChar(c)) {\n this.name += chunk.slice(start, this.prevI);\n return c === NL_LIKE ? NL : c;\n }\n }\n }\n /**\n * Skip white spaces.\n *\n * @return The character that ended the skip, or ``EOC`` if we hit\n * the end of the chunk. The return value cannot be NL_LIKE: NL is returned\n * instead.\n */\n skipSpaces() {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC || !isS(c)) {\n return c;\n }\n }\n }\n setXMLVersion(version) {\n this.currentXMLVersion = version;\n /* eslint-disable @typescript-eslint/unbound-method */\n if (version === \"1.0\") {\n this.isChar = isChar10;\n this.getCode = this.getCode10;\n } else {\n this.isChar = isChar11;\n this.getCode = this.getCode11;\n }\n /* eslint-enable @typescript-eslint/unbound-method */\n }\n // STATE ENGINE METHODS\n // This needs to be a state separate from S_BEGIN_WHITESPACE because we want\n // to be sure never to come back to this state later.\n sBegin() {\n // We are essentially peeking at the first character of the chunk. Since\n // S_BEGIN can be in effect only when we start working on the first chunk,\n // the index at which we must look is necessarily 0. Note also that the\n // following test does not depend on decoding surrogates.\n // If the initial character is 0xFEFF, ignore it.\n if (this.chunk.charCodeAt(0) === 0xFEFF) {\n this.i++;\n this.column++;\n }\n this.state = S_BEGIN_WHITESPACE;\n }\n sBeginWhitespace() {\n // We need to know whether we've encountered spaces or not because as soon\n // as we run into a space, an XML declaration is no longer possible. Rather\n // than slow down skipSpaces even in places where we don't care whether it\n // skipped anything or not, we check whether prevI is equal to the value of\n // i from before we skip spaces.\n const iBefore = this.i;\n const c = this.skipSpaces();\n if (this.prevI !== iBefore) {\n this.xmlDeclPossible = false;\n }\n switch (c) {\n case LESS:\n this.state = S_OPEN_WAKA;\n // We could naively call closeText but in this state, it is not normal\n // to have text be filled with any data.\n if (this.text.length !== 0) {\n throw new Error(\"no-empty text at start\");\n }\n break;\n case EOC:\n break;\n default:\n this.unget();\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n sDoctype() {\n var _a;\n const c = this.captureTo(DOCTYPE_TERMINATOR);\n switch (c) {\n case GREATER:\n {\n // eslint-disable-next-line no-unused-expressions\n (_a = this.doctypeHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n this.doctype = true; // just remember that we saw it.\n break;\n }\n case EOC:\n break;\n default:\n this.text += String.fromCodePoint(c);\n if (c === OPEN_BRACKET) {\n this.state = S_DTD;\n } else if (isQuote(c)) {\n this.state = S_DOCTYPE_QUOTE;\n this.q = c;\n }\n }\n }\n sDoctypeQuote() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.q = null;\n this.state = S_DOCTYPE;\n }\n }\n sDTD() {\n const c = this.captureTo(DTD_TERMINATOR);\n if (c === EOC) {\n return;\n }\n this.text += String.fromCodePoint(c);\n if (c === CLOSE_BRACKET) {\n this.state = S_DOCTYPE;\n } else if (c === LESS) {\n this.state = S_DTD_OPEN_WAKA;\n } else if (isQuote(c)) {\n this.state = S_DTD_QUOTED;\n this.q = c;\n }\n }\n sDTDQuoted() {\n const q = this.q;\n if (this.captureToChar(q)) {\n this.text += String.fromCodePoint(q);\n this.state = S_DTD;\n this.q = null;\n }\n }\n sDTDOpenWaka() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n switch (c) {\n case BANG:\n this.state = S_DTD_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n break;\n case QUESTION:\n this.state = S_DTD_PI;\n break;\n default:\n this.state = S_DTD;\n }\n }\n sDTDOpenWakaBang() {\n const char = String.fromCodePoint(this.getCodeNorm());\n const owb = this.openWakaBang += char;\n this.text += char;\n if (owb !== \"-\") {\n this.state = owb === \"--\" ? S_DTD_COMMENT : S_DTD;\n this.openWakaBang = \"\";\n }\n }\n sDTDComment() {\n if (this.captureToChar(MINUS)) {\n this.text += \"-\";\n this.state = S_DTD_COMMENT_ENDING;\n }\n }\n sDTDCommentEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT;\n }\n sDTDCommentEnded() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n } else {\n this.fail(\"malformed comment.\");\n // will be recorded as\n // a comment of \" blah -- bloo \"\n this.state = S_DTD_COMMENT;\n }\n }\n sDTDPI() {\n if (this.captureToChar(QUESTION)) {\n this.text += \"?\";\n this.state = S_DTD_PI_ENDING;\n }\n }\n sDTDPIEnding() {\n const c = this.getCodeNorm();\n this.text += String.fromCodePoint(c);\n if (c === GREATER) {\n this.state = S_DTD;\n }\n }\n sText() {\n //\n // We did try a version of saxes where the S_TEXT state was split in two\n // states: one for text inside the root element, and one for text\n // outside. This was avoiding having to test this.tags.length to decide\n // what implementation to actually use.\n //\n // Peformance testing on gigabyte-size files did not show any advantage to\n // using the two states solution instead of the current one. Conversely, it\n // made the code a bit more complicated elsewhere. For instance, a comment\n // can appear before the root element so when a comment ended it was\n // necessary to determine whether to return to the S_TEXT state or to the\n // new text-outside-root state.\n //\n if (this.tags.length !== 0) {\n this.handleTextInRoot();\n } else {\n this.handleTextOutsideRoot();\n }\n }\n sEntity() {\n // This is essentially a specialized version of captureToChar(SEMICOLON...)\n let {\n i: start\n } = this;\n const {\n chunk\n } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n loop:\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case NL_LIKE:\n this.entity += `${chunk.slice(start, this.prevI)}\\n`;\n start = this.i;\n break;\n case SEMICOLON:\n {\n const {\n entityReturnState\n } = this;\n const entity = this.entity + chunk.slice(start, this.prevI);\n this.state = entityReturnState;\n let parsed;\n if (entity === \"\") {\n this.fail(\"empty entity name.\");\n parsed = \"&;\";\n } else {\n parsed = this.parseEntity(entity);\n this.entity = \"\";\n }\n if (entityReturnState !== S_TEXT || this.textHandler !== undefined) {\n this.text += parsed;\n }\n // eslint-disable-next-line no-labels\n break loop;\n }\n case EOC:\n this.entity += chunk.slice(start);\n // eslint-disable-next-line no-labels\n break loop;\n default:\n }\n }\n }\n sOpenWaka() {\n // Reminder: a state handler is called with at least one character\n // available in the current chunk. So the first call to get code inside of\n // a state handler cannot return ``EOC``. That's why we don't test\n // for it.\n const c = this.getCode();\n // either a /, ?, !, or text is coming next.\n if (isNameStartChar(c)) {\n this.state = S_OPEN_TAG;\n this.unget();\n this.xmlDeclPossible = false;\n } else {\n switch (c) {\n case FORWARD_SLASH:\n this.state = S_CLOSE_TAG;\n this.xmlDeclPossible = false;\n break;\n case BANG:\n this.state = S_OPEN_WAKA_BANG;\n this.openWakaBang = \"\";\n this.xmlDeclPossible = false;\n break;\n case QUESTION:\n this.state = S_PI_FIRST_CHAR;\n break;\n default:\n this.fail(\"disallowed character in tag name\");\n this.state = S_TEXT;\n this.xmlDeclPossible = false;\n }\n }\n }\n sOpenWakaBang() {\n this.openWakaBang += String.fromCodePoint(this.getCodeNorm());\n switch (this.openWakaBang) {\n case \"[CDATA[\":\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n this.state = S_CDATA;\n this.openWakaBang = \"\";\n break;\n case \"--\":\n this.state = S_COMMENT;\n this.openWakaBang = \"\";\n break;\n case \"DOCTYPE\":\n this.state = S_DOCTYPE;\n if (this.doctype || this.sawRoot) {\n this.fail(\"inappropriately located doctype declaration.\");\n }\n this.openWakaBang = \"\";\n break;\n default:\n // 7 happens to be the maximum length of the string that can possibly\n // match one of the cases above.\n if (this.openWakaBang.length >= 7) {\n this.fail(\"incorrect syntax.\");\n }\n }\n }\n sComment() {\n if (this.captureToChar(MINUS)) {\n this.state = S_COMMENT_ENDING;\n }\n }\n sCommentEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === MINUS) {\n this.state = S_COMMENT_ENDED;\n // eslint-disable-next-line no-unused-expressions\n (_a = this.commentHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n } else {\n this.text += `-${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n }\n }\n sCommentEnded() {\n const c = this.getCodeNorm();\n if (c !== GREATER) {\n this.fail(\"malformed comment.\");\n // will be recorded as\n // a comment of \" blah -- bloo \"\n this.text += `--${String.fromCodePoint(c)}`;\n this.state = S_COMMENT;\n } else {\n this.state = S_TEXT;\n }\n }\n sCData() {\n if (this.captureToChar(CLOSE_BRACKET)) {\n this.state = S_CDATA_ENDING;\n }\n }\n sCDataEnding() {\n const c = this.getCodeNorm();\n if (c === CLOSE_BRACKET) {\n this.state = S_CDATA_ENDING_2;\n } else {\n this.text += `]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n sCDataEnding2() {\n var _a;\n const c = this.getCodeNorm();\n switch (c) {\n case GREATER:\n {\n // eslint-disable-next-line no-unused-expressions\n (_a = this.cdataHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.text);\n this.text = \"\";\n this.state = S_TEXT;\n break;\n }\n case CLOSE_BRACKET:\n this.text += \"]\";\n break;\n default:\n this.text += `]]${String.fromCodePoint(c)}`;\n this.state = S_CDATA;\n }\n }\n // We need this separate state to check the first character fo the pi target\n // with this.nameStartCheck which allows less characters than this.nameCheck.\n sPIFirstChar() {\n const c = this.getCodeNorm();\n // This is first because in the case where the file is well-formed this is\n // the branch taken. We optimize for well-formedness.\n if (this.nameStartCheck(c)) {\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n } else if (c === QUESTION || isS(c)) {\n this.fail(\"processing instruction without a target.\");\n this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY;\n } else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n this.state = S_PI_REST;\n }\n }\n sPIRest() {\n // Capture characters into a piTarget while ``this.nameCheck`` run on the\n // character read returns true.\n const {\n chunk,\n i: start\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const c = this.getCodeNorm();\n if (c === EOC) {\n this.piTarget += chunk.slice(start);\n return;\n }\n // NL cannot satisfy this.nameCheck so we don't have to test specifically\n // for it.\n if (!this.nameCheck(c)) {\n this.piTarget += chunk.slice(start, this.prevI);\n const isQuestion = c === QUESTION;\n if (isQuestion || isS(c)) {\n if (this.piTarget === \"xml\") {\n if (!this.xmlDeclPossible) {\n this.fail(\"an XML declaration must be at the start of the document.\");\n }\n this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START;\n } else {\n this.state = isQuestion ? S_PI_ENDING : S_PI_BODY;\n }\n } else {\n this.fail(\"disallowed character in processing instruction name.\");\n this.piTarget += String.fromCodePoint(c);\n }\n break;\n }\n }\n }\n sPIBody() {\n if (this.text.length === 0) {\n const c = this.getCodeNorm();\n if (c === QUESTION) {\n this.state = S_PI_ENDING;\n } else if (!isS(c)) {\n this.text = String.fromCodePoint(c);\n }\n }\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n else if (this.captureToChar(QUESTION)) {\n this.state = S_PI_ENDING;\n }\n }\n sPIEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n const {\n piTarget\n } = this;\n if (piTarget.toLowerCase() === \"xml\") {\n this.fail(\"the XML declaration must appear at the start of the document.\");\n }\n // eslint-disable-next-line no-unused-expressions\n (_a = this.piHandler) === null || _a === void 0 ? void 0 : _a.call(this, {\n target: piTarget,\n body: this.text\n });\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n } else if (c === QUESTION) {\n // We ran into ?? as part of a processing instruction. We initially took\n // the first ? as a sign that the PI was ending, but it is not. So we have\n // to add it to the body but we take the new ? as a sign that the PI is\n // ending.\n this.text += \"?\";\n } else {\n this.text += `?${String.fromCodePoint(c)}`;\n this.state = S_PI_BODY;\n }\n this.xmlDeclPossible = false;\n }\n sXMLDeclNameStart() {\n const c = this.skipSpaces();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (c !== EOC) {\n this.state = S_XML_DECL_NAME;\n this.name = String.fromCodePoint(c);\n }\n }\n sXMLDeclName() {\n const c = this.captureTo(XML_DECL_NAME_TERMINATOR);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.name += this.text;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (!(isS(c) || c === EQUAL)) {\n return;\n }\n this.name += this.text;\n this.text = \"\";\n if (!this.xmlDeclExpects.includes(this.name)) {\n switch (this.name.length) {\n case 0:\n this.fail(\"did not expect any more name/value pairs.\");\n break;\n case 1:\n this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);\n break;\n default:\n this.fail(`expected one of ${this.xmlDeclExpects.join(\", \")}`);\n }\n }\n this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ;\n }\n sXMLDeclEq() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (c !== EQUAL) {\n this.fail(\"value required.\");\n }\n this.state = S_XML_DECL_VALUE_START;\n }\n sXMLDeclValueStart() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (isS(c)) {\n return;\n }\n if (!isQuote(c)) {\n this.fail(\"value must be quoted.\");\n this.q = SPACE;\n } else {\n this.q = c;\n }\n this.state = S_XML_DECL_VALUE;\n }\n sXMLDeclValue() {\n const c = this.captureTo([this.q, QUESTION]);\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n this.state = S_XML_DECL_ENDING;\n this.text = \"\";\n this.fail(\"XML declaration is incomplete.\");\n return;\n }\n if (c === EOC) {\n return;\n }\n const value = this.text;\n this.text = \"\";\n switch (this.name) {\n case \"version\":\n {\n this.xmlDeclExpects = [\"encoding\", \"standalone\"];\n const version = value;\n this.xmlDecl.version = version;\n // This is the test specified by XML 1.0 but it is fine for XML 1.1.\n if (!/^1\\.[0-9]+$/.test(version)) {\n this.fail(\"version number must match /^1\\\\.[0-9]+$/.\");\n }\n // When forceXMLVersion is set, the XML declaration is ignored.\n else if (!this.opt.forceXMLVersion) {\n this.setXMLVersion(version);\n }\n break;\n }\n case \"encoding\":\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) {\n this.fail(\"encoding value must match \\\n/^[A-Za-z0-9][A-Za-z0-9._-]*$/.\");\n }\n this.xmlDeclExpects = [\"standalone\"];\n this.xmlDecl.encoding = value;\n break;\n case \"standalone\":\n if (value !== \"yes\" && value !== \"no\") {\n this.fail(\"standalone value must match \\\"yes\\\" or \\\"no\\\".\");\n }\n this.xmlDeclExpects = [];\n this.xmlDecl.standalone = value;\n break;\n default:\n // We don't need to raise an error here since we've already raised one\n // when checking what name was expected.\n }\n\n this.name = \"\";\n this.state = S_XML_DECL_SEPARATOR;\n }\n sXMLDeclSeparator() {\n const c = this.getCodeNorm();\n // The question mark character is not valid inside any of the XML\n // declaration name/value pairs.\n if (c === QUESTION) {\n // It is valid to go to S_XML_DECL_ENDING from this state.\n this.state = S_XML_DECL_ENDING;\n return;\n }\n if (!isS(c)) {\n this.fail(\"whitespace required.\");\n this.unget();\n }\n this.state = S_XML_DECL_NAME_START;\n }\n sXMLDeclEnding() {\n var _a;\n const c = this.getCodeNorm();\n if (c === GREATER) {\n if (this.piTarget !== \"xml\") {\n this.fail(\"processing instructions are not allowed before root.\");\n } else if (this.name !== \"version\" && this.xmlDeclExpects.includes(\"version\")) {\n this.fail(\"XML declaration must contain a version.\");\n }\n // eslint-disable-next-line no-unused-expressions\n (_a = this.xmldeclHandler) === null || _a === void 0 ? void 0 : _a.call(this, this.xmlDecl);\n this.name = \"\";\n this.piTarget = this.text = \"\";\n this.state = S_TEXT;\n } else {\n // We got here because the previous character was a ?, but the question\n // mark character is not valid inside any of the XML declaration\n // name/value pairs.\n this.fail(\"The character ? is disallowed anywhere in XML declarations.\");\n }\n this.xmlDeclPossible = false;\n }\n sOpenTag() {\n var _a;\n const c = this.captureNameChars();\n if (c === EOC) {\n return;\n }\n const tag = this.tag = {\n name: this.name,\n attributes: Object.create(null)\n };\n this.name = \"\";\n if (this.xmlnsOpt) {\n this.topNS = tag.ns = Object.create(null);\n }\n // eslint-disable-next-line no-unused-expressions\n (_a = this.openTagStartHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n this.sawRoot = true;\n if (!this.fragmentOpt && this.closedRoot) {\n this.fail(\"documents may contain only one root.\");\n }\n switch (c) {\n case GREATER:\n this.openTag();\n break;\n case FORWARD_SLASH:\n this.state = S_OPEN_TAG_SLASH;\n break;\n default:\n if (!isS(c)) {\n this.fail(\"disallowed character in tag name.\");\n }\n this.state = S_ATTRIB;\n }\n }\n sOpenTagSlash() {\n if (this.getCode() === GREATER) {\n this.openSelfClosingTag();\n } else {\n this.fail(\"forward-slash in opening tag not followed by >.\");\n this.state = S_ATTRIB;\n }\n }\n sAttrib() {\n const c = this.skipSpaces();\n if (c === EOC) {\n return;\n }\n if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n } else if (c === GREATER) {\n this.openTag();\n } else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n } else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribName() {\n const c = this.captureNameChars();\n if (c === EQUAL) {\n this.state = S_ATTRIB_VALUE;\n } else if (isS(c)) {\n this.state = S_ATTRIB_NAME_SAW_WHITE;\n } else if (c === GREATER) {\n this.fail(\"attribute without value.\");\n this.pushAttrib(this.name, this.name);\n this.name = this.text = \"\";\n this.openTag();\n } else if (c !== EOC) {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribNameSawWhite() {\n const c = this.skipSpaces();\n switch (c) {\n case EOC:\n return;\n case EQUAL:\n this.state = S_ATTRIB_VALUE;\n break;\n default:\n this.fail(\"attribute without value.\");\n // Should we do this???\n // this.tag.attributes[this.name] = \"\";\n this.text = \"\";\n this.name = \"\";\n if (c === GREATER) {\n this.openTag();\n } else if (isNameStartChar(c)) {\n this.unget();\n this.state = S_ATTRIB_NAME;\n } else {\n this.fail(\"disallowed character in attribute name.\");\n this.state = S_ATTRIB;\n }\n }\n }\n sAttribValue() {\n const c = this.getCodeNorm();\n if (isQuote(c)) {\n this.q = c;\n this.state = S_ATTRIB_VALUE_QUOTED;\n } else if (!isS(c)) {\n this.fail(\"unquoted attribute value.\");\n this.state = S_ATTRIB_VALUE_UNQUOTED;\n this.unget();\n }\n }\n sAttribValueQuoted() {\n // We deliberately do not use captureTo here. The specialized code we use\n // here is faster than using captureTo.\n const {\n q,\n chunk\n } = this;\n let {\n i: start\n } = this;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case q:\n this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI));\n this.name = this.text = \"\";\n this.q = null;\n this.state = S_ATTRIB_VALUE_CLOSED;\n return;\n case AMP:\n this.text += chunk.slice(start, this.prevI);\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_QUOTED;\n return;\n case NL:\n case NL_LIKE:\n case TAB:\n this.text += `${chunk.slice(start, this.prevI)} `;\n start = this.i;\n break;\n case LESS:\n this.text += chunk.slice(start, this.prevI);\n this.fail(\"disallowed character.\");\n return;\n case EOC:\n this.text += chunk.slice(start);\n return;\n default:\n }\n }\n }\n sAttribValueClosed() {\n const c = this.getCodeNorm();\n if (isS(c)) {\n this.state = S_ATTRIB;\n } else if (c === GREATER) {\n this.openTag();\n } else if (c === FORWARD_SLASH) {\n this.state = S_OPEN_TAG_SLASH;\n } else if (isNameStartChar(c)) {\n this.fail(\"no whitespace between attributes.\");\n this.unget();\n this.state = S_ATTRIB_NAME;\n } else {\n this.fail(\"disallowed character in attribute name.\");\n }\n }\n sAttribValueUnquoted() {\n // We don't do anything regarding EOL or space handling for unquoted\n // attributes. We already have failed by the time we get here, and the\n // contract that saxes upholds states that upon failure, it is not safe to\n // rely on the data passed to event handlers (other than\n // ``onerror``). Passing \"bad\" data is not a problem.\n const c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);\n switch (c) {\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED;\n break;\n case LESS:\n this.fail(\"disallowed character.\");\n break;\n case EOC:\n break;\n default:\n if (this.text.includes(\"]]>\")) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n this.pushAttrib(this.name, this.text);\n this.name = this.text = \"\";\n if (c === GREATER) {\n this.openTag();\n } else {\n this.state = S_ATTRIB;\n }\n }\n }\n sCloseTag() {\n const c = this.captureNameChars();\n if (c === GREATER) {\n this.closeTag();\n } else if (isS(c)) {\n this.state = S_CLOSE_TAG_SAW_WHITE;\n } else if (c !== EOC) {\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n sCloseTagSawWhite() {\n switch (this.skipSpaces()) {\n case GREATER:\n this.closeTag();\n break;\n case EOC:\n break;\n default:\n this.fail(\"disallowed character in closing tag.\");\n }\n }\n // END OF STATE ENGINE METHODS\n handleTextInRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for performing the ]]> check. A previous version of this code, checked\n // ``this.text`` for the presence of ]]>. It simplified the code but was\n // very costly when character data contained a lot of entities to be parsed.\n //\n // Since we are using a specialized loop, we also keep track of the presence\n // of ]]> in text data. The sequence ]]> is forbidden to appear as-is.\n //\n let {\n i: start,\n forbiddenState\n } = this;\n const {\n chunk,\n textHandler: handler\n } = this;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n scanLoop:\n // eslint-disable-next-line no-constant-condition\n while (true) {\n switch (this.getCode()) {\n case LESS:\n {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const {\n text\n } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n } else if (slice.length !== 0) {\n handler(slice);\n }\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n forbiddenState = FORBIDDEN_START;\n // eslint-disable-next-line no-labels\n break scanLoop;\n case CLOSE_BRACKET:\n switch (forbiddenState) {\n case FORBIDDEN_START:\n forbiddenState = FORBIDDEN_BRACKET;\n break;\n case FORBIDDEN_BRACKET:\n forbiddenState = FORBIDDEN_BRACKET_BRACKET;\n break;\n case FORBIDDEN_BRACKET_BRACKET:\n break;\n default:\n throw new Error(\"impossible state\");\n }\n break;\n case GREATER:\n if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) {\n this.fail(\"the string \\\"]]>\\\" is disallowed in char data.\");\n }\n forbiddenState = FORBIDDEN_START;\n break;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n forbiddenState = FORBIDDEN_START;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break scanLoop;\n default:\n forbiddenState = FORBIDDEN_START;\n }\n }\n this.forbiddenState = forbiddenState;\n }\n handleTextOutsideRoot() {\n // This is essentially a specialized version of captureTo which is optimized\n // for a specialized task. We keep track of the presence of non-space\n // characters in the text since these are errors when appearing outside the\n // document root element.\n let {\n i: start\n } = this;\n const {\n chunk,\n textHandler: handler\n } = this;\n let nonSpace = false;\n // eslint-disable-next-line no-labels, no-restricted-syntax\n outRootLoop:\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const code = this.getCode();\n switch (code) {\n case LESS:\n {\n this.state = S_OPEN_WAKA;\n if (handler !== undefined) {\n const {\n text\n } = this;\n const slice = chunk.slice(start, this.prevI);\n if (text.length !== 0) {\n handler(text + slice);\n this.text = \"\";\n } else if (slice.length !== 0) {\n handler(slice);\n }\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n }\n case AMP:\n this.state = S_ENTITY;\n this.entityReturnState = S_TEXT;\n if (handler !== undefined) {\n this.text += chunk.slice(start, this.prevI);\n }\n nonSpace = true;\n // eslint-disable-next-line no-labels\n break outRootLoop;\n case NL_LIKE:\n if (handler !== undefined) {\n this.text += `${chunk.slice(start, this.prevI)}\\n`;\n }\n start = this.i;\n break;\n case EOC:\n if (handler !== undefined) {\n this.text += chunk.slice(start);\n }\n // eslint-disable-next-line no-labels\n break outRootLoop;\n default:\n if (!isS(code)) {\n nonSpace = true;\n }\n }\n }\n if (!nonSpace) {\n return;\n }\n // We use the reportedTextBeforeRoot and reportedTextAfterRoot flags\n // to avoid reporting errors for every single character that is out of\n // place.\n if (!this.sawRoot && !this.reportedTextBeforeRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextBeforeRoot = true;\n }\n if (this.closedRoot && !this.reportedTextAfterRoot) {\n this.fail(\"text data outside of root node.\");\n this.reportedTextAfterRoot = true;\n }\n }\n pushAttribNS(name, value) {\n var _a;\n const {\n prefix,\n local\n } = this.qname(name);\n const attr = {\n name,\n prefix,\n local,\n value\n };\n this.attribList.push(attr);\n // eslint-disable-next-line no-unused-expressions\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n if (prefix === \"xmlns\") {\n const trimmed = value.trim();\n if (this.currentXMLVersion === \"1.0\" && trimmed === \"\") {\n this.fail(\"invalid attempt to undefine prefix in XML 1.0\");\n }\n this.topNS[local] = trimmed;\n nsPairCheck(this, local, trimmed);\n } else if (name === \"xmlns\") {\n const trimmed = value.trim();\n this.topNS[\"\"] = trimmed;\n nsPairCheck(this, \"\", trimmed);\n }\n }\n pushAttribPlain(name, value) {\n var _a;\n const attr = {\n name,\n value\n };\n this.attribList.push(attr);\n // eslint-disable-next-line no-unused-expressions\n (_a = this.attributeHandler) === null || _a === void 0 ? void 0 : _a.call(this, attr);\n }\n /**\n * End parsing. This performs final well-formedness checks and resets the\n * parser to a clean state.\n *\n * @returns this\n */\n end() {\n var _a, _b;\n if (!this.sawRoot) {\n this.fail(\"document must contain a root element.\");\n }\n const {\n tags\n } = this;\n while (tags.length > 0) {\n const tag = tags.pop();\n this.fail(`unclosed tag: ${tag.name}`);\n }\n if (this.state !== S_BEGIN && this.state !== S_TEXT) {\n this.fail(\"unexpected end.\");\n }\n const {\n text\n } = this;\n if (text.length !== 0) {\n // eslint-disable-next-line no-unused-expressions\n (_a = this.textHandler) === null || _a === void 0 ? void 0 : _a.call(this, text);\n this.text = \"\";\n }\n this._closed = true;\n // eslint-disable-next-line no-unused-expressions\n (_b = this.endHandler) === null || _b === void 0 ? void 0 : _b.call(this);\n this._init();\n return this;\n }\n /**\n * Resolve a namespace prefix.\n *\n * @param prefix The prefix to resolve.\n *\n * @returns The namespace URI or ``undefined`` if the prefix is not defined.\n */\n resolve(prefix) {\n var _a, _b;\n let uri = this.topNS[prefix];\n if (uri !== undefined) {\n return uri;\n }\n const {\n tags\n } = this;\n for (let index = tags.length - 1; index >= 0; index--) {\n uri = tags[index].ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n }\n uri = this.ns[prefix];\n if (uri !== undefined) {\n return uri;\n }\n return (_b = (_a = this.opt).resolvePrefix) === null || _b === void 0 ? void 0 : _b.call(_a, prefix);\n }\n /**\n * Parse a qname into its prefix and local name parts.\n *\n * @param name The name to parse\n *\n * @returns\n */\n qname(name) {\n // This is faster than using name.split(\":\").\n const colon = name.indexOf(\":\");\n if (colon === -1) {\n return {\n prefix: \"\",\n local: name\n };\n }\n const local = name.slice(colon + 1);\n const prefix = name.slice(0, colon);\n if (prefix === \"\" || local === \"\" || local.includes(\":\")) {\n this.fail(`malformed name: ${name}.`);\n }\n return {\n prefix,\n local\n };\n }\n processAttribsNS() {\n var _a;\n const {\n attribList\n } = this;\n const tag = this.tag;\n {\n // add namespace info to tag\n const {\n prefix,\n local\n } = this.qname(tag.name);\n tag.prefix = prefix;\n tag.local = local;\n const uri = tag.uri = (_a = this.resolve(prefix)) !== null && _a !== void 0 ? _a : \"\";\n if (prefix !== \"\") {\n if (prefix === \"xmlns\") {\n this.fail(\"tags may not have \\\"xmlns\\\" as prefix.\");\n }\n if (uri === \"\") {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n tag.uri = prefix;\n }\n }\n }\n if (attribList.length === 0) {\n return;\n }\n const {\n attributes\n } = tag;\n const seen = new Set();\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (const attr of attribList) {\n const {\n name,\n prefix,\n local\n } = attr;\n let uri;\n let eqname;\n if (prefix === \"\") {\n uri = name === \"xmlns\" ? XMLNS_NAMESPACE : \"\";\n eqname = name;\n } else {\n uri = this.resolve(prefix);\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (uri === undefined) {\n this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`);\n uri = prefix;\n }\n eqname = `{${uri}}${local}`;\n }\n if (seen.has(eqname)) {\n this.fail(`duplicate attribute: ${eqname}.`);\n }\n seen.add(eqname);\n attr.uri = uri;\n attributes[name] = attr;\n }\n this.attribList = [];\n }\n processAttribsPlain() {\n const {\n attribList\n } = this;\n // eslint-disable-next-line prefer-destructuring\n const attributes = this.tag.attributes;\n for (const {\n name,\n value\n } of attribList) {\n if (attributes[name] !== undefined) {\n this.fail(`duplicate attribute: ${name}.`);\n }\n attributes[name] = value;\n }\n this.attribList = [];\n }\n /**\n * Handle a complete open tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onopentag``.\n */\n openTag() {\n var _a;\n this.processAttribs();\n const {\n tags\n } = this;\n const tag = this.tag;\n tag.isSelfClosing = false;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n // eslint-disable-next-line no-unused-expressions\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n tags.push(tag);\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete self-closing tag. This parser code calls this once it has\n * seen the whole tag. This method checks for well-formeness and then emits\n * ``onopentag`` and ``onclosetag``.\n */\n openSelfClosingTag() {\n var _a, _b, _c;\n this.processAttribs();\n const {\n tags\n } = this;\n const tag = this.tag;\n tag.isSelfClosing = true;\n // There cannot be any pending text here due to the onopentagstart that was\n // necessarily emitted before we get here. So we do not check text.\n // eslint-disable-next-line no-unused-expressions\n (_a = this.openTagHandler) === null || _a === void 0 ? void 0 : _a.call(this, tag);\n // eslint-disable-next-line no-unused-expressions\n (_b = this.closeTagHandler) === null || _b === void 0 ? void 0 : _b.call(this, tag);\n const top = this.tag = (_c = tags[tags.length - 1]) !== null && _c !== void 0 ? _c : null;\n if (top === null) {\n this.closedRoot = true;\n }\n this.state = S_TEXT;\n this.name = \"\";\n }\n /**\n * Handle a complete close tag. This parser code calls this once it has seen\n * the whole tag. This method checks for well-formeness and then emits\n * ``onclosetag``.\n */\n closeTag() {\n const {\n tags,\n name\n } = this;\n // Our state after this will be S_TEXT, no matter what, and we can clear\n // tagName now.\n this.state = S_TEXT;\n this.name = \"\";\n if (name === \"\") {\n this.fail(\"weird empty close tag.\");\n this.text += \"\";\n return;\n }\n const handler = this.closeTagHandler;\n let l = tags.length;\n while (l-- > 0) {\n const tag = this.tag = tags.pop();\n this.topNS = tag.ns;\n // eslint-disable-next-line no-unused-expressions\n handler === null || handler === void 0 ? void 0 : handler(tag);\n if (tag.name === name) {\n break;\n }\n this.fail(\"unexpected close tag.\");\n }\n if (l === 0) {\n this.closedRoot = true;\n } else if (l < 0) {\n this.fail(`unmatched closing tag: ${name}.`);\n this.text += ``;\n }\n }\n /**\n * Resolves an entity. Makes any necessary well-formedness checks.\n *\n * @param entity The entity to resolve.\n *\n * @returns The parsed entity.\n */\n parseEntity(entity) {\n // startsWith would be significantly slower for this test.\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (entity[0] !== \"#\") {\n const defined = this.ENTITIES[entity];\n if (defined !== undefined) {\n return defined;\n }\n this.fail(this.isName(entity) ? \"undefined entity.\" : \"disallowed character in entity name.\");\n return `&${entity};`;\n }\n let num = NaN;\n if (entity[1] === \"x\" && /^#x[0-9a-f]+$/i.test(entity)) {\n num = parseInt(entity.slice(2), 16);\n } else if (/^#[0-9]+$/.test(entity)) {\n num = parseInt(entity.slice(1), 10);\n }\n // The character reference is required to match the CHAR production.\n if (!this.isChar(num)) {\n this.fail(\"malformed character entity.\");\n return `&${entity};`;\n }\n return String.fromCodePoint(num);\n }\n}\nexports.SaxesParser = SaxesParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlZDUiLCJyZXF1aXJlIiwiZWQyIiwiTlNlZDMiLCJpc1MiLCJpc0NoYXIxMCIsImlzQ2hhciIsImlzTmFtZVN0YXJ0Q2hhciIsImlzTmFtZUNoYXIiLCJTX0xJU1QiLCJOQU1FX1JFIiwiaXNDaGFyMTEiLCJpc05DTmFtZVN0YXJ0Q2hhciIsImlzTkNOYW1lQ2hhciIsIk5DX05BTUVfUkUiLCJYTUxfTkFNRVNQQUNFIiwiWE1MTlNfTkFNRVNQQUNFIiwicm9vdE5TIiwiX19wcm90b19fIiwieG1sIiwieG1sbnMiLCJYTUxfRU5USVRJRVMiLCJhbXAiLCJndCIsImx0IiwicXVvdCIsImFwb3MiLCJFT0MiLCJOTF9MSUtFIiwiU19CRUdJTiIsIlNfQkVHSU5fV0hJVEVTUEFDRSIsIlNfRE9DVFlQRSIsIlNfRE9DVFlQRV9RVU9URSIsIlNfRFREIiwiU19EVERfUVVPVEVEIiwiU19EVERfT1BFTl9XQUtBIiwiU19EVERfT1BFTl9XQUtBX0JBTkciLCJTX0RURF9DT01NRU5UIiwiU19EVERfQ09NTUVOVF9FTkRJTkciLCJTX0RURF9DT01NRU5UX0VOREVEIiwiU19EVERfUEkiLCJTX0RURF9QSV9FTkRJTkciLCJTX1RFWFQiLCJTX0VOVElUWSIsIlNfT1BFTl9XQUtBIiwiU19PUEVOX1dBS0FfQkFORyIsIlNfQ09NTUVOVCIsIlNfQ09NTUVOVF9FTkRJTkciLCJTX0NPTU1FTlRfRU5ERUQiLCJTX0NEQVRBIiwiU19DREFUQV9FTkRJTkciLCJTX0NEQVRBX0VORElOR18yIiwiU19QSV9GSVJTVF9DSEFSIiwiU19QSV9SRVNUIiwiU19QSV9CT0RZIiwiU19QSV9FTkRJTkciLCJTX1hNTF9ERUNMX05BTUVfU1RBUlQiLCJTX1hNTF9ERUNMX05BTUUiLCJTX1hNTF9ERUNMX0VRIiwiU19YTUxfREVDTF9WQUxVRV9TVEFSVCIsIlNfWE1MX0RFQ0xfVkFMVUUiLCJTX1hNTF9ERUNMX1NFUEFSQVRPUiIsIlNfWE1MX0RFQ0xfRU5ESU5HIiwiU19PUEVOX1RBRyIsIlNfT1BFTl9UQUdfU0xBU0giLCJTX0FUVFJJQiIsIlNfQVRUUklCX05BTUUiLCJTX0FUVFJJQl9OQU1FX1NBV19XSElURSIsIlNfQVRUUklCX1ZBTFVFIiwiU19BVFRSSUJfVkFMVUVfUVVPVEVEIiwiU19BVFRSSUJfVkFMVUVfQ0xPU0VEIiwiU19BVFRSSUJfVkFMVUVfVU5RVU9URUQiLCJTX0NMT1NFX1RBRyIsIlNfQ0xPU0VfVEFHX1NBV19XSElURSIsIlRBQiIsIk5MIiwiQ1IiLCJTUEFDRSIsIkJBTkciLCJEUVVPVEUiLCJBTVAiLCJTUVVPVEUiLCJNSU5VUyIsIkZPUldBUkRfU0xBU0giLCJTRU1JQ09MT04iLCJMRVNTIiwiRVFVQUwiLCJHUkVBVEVSIiwiUVVFU1RJT04iLCJPUEVOX0JSQUNLRVQiLCJDTE9TRV9CUkFDS0VUIiwiTkVMIiwiTFMiLCJpc1F1b3RlIiwiYyIsIlFVT1RFUyIsIkRPQ1RZUEVfVEVSTUlOQVRPUiIsIkRURF9URVJNSU5BVE9SIiwiWE1MX0RFQ0xfTkFNRV9URVJNSU5BVE9SIiwiQVRUUklCX1ZBTFVFX1VOUVVPVEVEX1RFUk1JTkFUT1IiLCJuc1BhaXJDaGVjayIsInBhcnNlciIsInByZWZpeCIsInVyaSIsImZhaWwiLCJuc01hcHBpbmdDaGVjayIsIm1hcHBpbmciLCJsb2NhbCIsIk9iamVjdCIsImtleXMiLCJpc05DTmFtZSIsIm5hbWUiLCJ0ZXN0IiwiaXNOYW1lIiwiRk9SQklEREVOX1NUQVJUIiwiRk9SQklEREVOX0JSQUNLRVQiLCJGT1JCSURERU5fQlJBQ0tFVF9CUkFDS0VUIiwiZXhwb3J0cyIsIkVWRU5UUyIsIkVWRU5UX05BTUVfVE9fSEFORExFUl9OQU1FIiwieG1sZGVjbCIsInRleHQiLCJwcm9jZXNzaW5naW5zdHJ1Y3Rpb24iLCJkb2N0eXBlIiwiY29tbWVudCIsIm9wZW50YWdzdGFydCIsImF0dHJpYnV0ZSIsIm9wZW50YWciLCJjbG9zZXRhZyIsImNkYXRhIiwiZXJyb3IiLCJlbmQiLCJyZWFkeSIsIlNheGVzUGFyc2VyIiwiY29uc3RydWN0b3IiLCJvcHQiLCJmcmFnbWVudE9wdCIsImZyYWdtZW50IiwieG1sbnNPcHQiLCJ0cmFja1Bvc2l0aW9uIiwicG9zaXRpb24iLCJmaWxlTmFtZSIsIm5hbWVTdGFydENoZWNrIiwibmFtZUNoZWNrIiwicHJvY2Vzc0F0dHJpYnMiLCJwcm9jZXNzQXR0cmlic05TIiwicHVzaEF0dHJpYiIsInB1c2hBdHRyaWJOUyIsIm5zIiwiYXNzaWduIiwiYWRkaXRpb25hbCIsImFkZGl0aW9uYWxOYW1lc3BhY2VzIiwicHJvY2Vzc0F0dHJpYnNQbGFpbiIsInB1c2hBdHRyaWJQbGFpbiIsInN0YXRlVGFibGUiLCJzQmVnaW4iLCJzQmVnaW5XaGl0ZXNwYWNlIiwic0RvY3R5cGUiLCJzRG9jdHlwZVF1b3RlIiwic0RURCIsInNEVERRdW90ZWQiLCJzRFRET3Blbldha2EiLCJzRFRET3Blbldha2FCYW5nIiwic0RURENvbW1lbnQiLCJzRFREQ29tbWVudEVuZGluZyIsInNEVERDb21tZW50RW5kZWQiLCJzRFREUEkiLCJzRFREUElFbmRpbmciLCJzVGV4dCIsInNFbnRpdHkiLCJzT3Blbldha2EiLCJzT3Blbldha2FCYW5nIiwic0NvbW1lbnQiLCJzQ29tbWVudEVuZGluZyIsInNDb21tZW50RW5kZWQiLCJzQ0RhdGEiLCJzQ0RhdGFFbmRpbmciLCJzQ0RhdGFFbmRpbmcyIiwic1BJRmlyc3RDaGFyIiwic1BJUmVzdCIsInNQSUJvZHkiLCJzUElFbmRpbmciLCJzWE1MRGVjbE5hbWVTdGFydCIsInNYTUxEZWNsTmFtZSIsInNYTUxEZWNsRXEiLCJzWE1MRGVjbFZhbHVlU3RhcnQiLCJzWE1MRGVjbFZhbHVlIiwic1hNTERlY2xTZXBhcmF0b3IiLCJzWE1MRGVjbEVuZGluZyIsInNPcGVuVGFnIiwic09wZW5UYWdTbGFzaCIsInNBdHRyaWIiLCJzQXR0cmliTmFtZSIsInNBdHRyaWJOYW1lU2F3V2hpdGUiLCJzQXR0cmliVmFsdWUiLCJzQXR0cmliVmFsdWVRdW90ZWQiLCJzQXR0cmliVmFsdWVDbG9zZWQiLCJzQXR0cmliVmFsdWVVbnF1b3RlZCIsInNDbG9zZVRhZyIsInNDbG9zZVRhZ1Nhd1doaXRlIiwiX2luaXQiLCJjbG9zZWQiLCJfY2xvc2VkIiwib3Blbldha2FCYW5nIiwicGlUYXJnZXQiLCJlbnRpdHkiLCJxIiwidGFncyIsInRhZyIsInRvcE5TIiwiY2h1bmsiLCJjaHVua1Bvc2l0aW9uIiwiaSIsInByZXZJIiwiY2FycmllZEZyb21QcmV2aW91cyIsInVuZGVmaW5lZCIsImZvcmJpZGRlblN0YXRlIiwiYXR0cmliTGlzdCIsInN0YXRlIiwicmVwb3J0ZWRUZXh0QmVmb3JlUm9vdCIsInJlcG9ydGVkVGV4dEFmdGVyUm9vdCIsImNsb3NlZFJvb3QiLCJzYXdSb290IiwieG1sRGVjbFBvc3NpYmxlIiwieG1sRGVjbEV4cGVjdHMiLCJlbnRpdHlSZXR1cm5TdGF0ZSIsImRlZmF1bHRYTUxWZXJzaW9uIiwiZm9yY2VYTUxWZXJzaW9uIiwiRXJyb3IiLCJzZXRYTUxWZXJzaW9uIiwicG9zaXRpb25BdE5ld0xpbmUiLCJ4bWxEZWNsIiwidmVyc2lvbiIsImVuY29kaW5nIiwic3RhbmRhbG9uZSIsImxpbmUiLCJjb2x1bW4iLCJFTlRJVElFUyIsImNyZWF0ZSIsIl9hIiwicmVhZHlIYW5kbGVyIiwiY2FsbCIsImNvbHVtbkluZGV4Iiwib24iLCJoYW5kbGVyIiwib2ZmIiwibWFrZUVycm9yIiwibWVzc2FnZSIsIm1zZyIsImxlbmd0aCIsImVyciIsImVycm9ySGFuZGxlciIsIndyaXRlIiwidG9TdHJpbmciLCJsaW1pdCIsImxhc3RDb2RlIiwiY2hhckNvZGVBdCIsInNsaWNlIiwiY2xvc2UiLCJnZXRDb2RlMTAiLCJjb2RlIiwiZmluYWwiLCJnZXRDb2RlMTEiLCJuZXh0IiwiZ2V0Q29kZU5vcm0iLCJnZXRDb2RlIiwidW5nZXQiLCJjYXB0dXJlVG8iLCJjaGFycyIsInN0YXJ0IiwiaXNOTExpa2UiLCJpbmNsdWRlcyIsImNhcHR1cmVUb0NoYXIiLCJjaGFyIiwiY2FwdHVyZU5hbWVDaGFycyIsInNraXBTcGFjZXMiLCJjdXJyZW50WE1MVmVyc2lvbiIsImlCZWZvcmUiLCJkb2N0eXBlSGFuZGxlciIsIlN0cmluZyIsImZyb21Db2RlUG9pbnQiLCJvd2IiLCJoYW5kbGVUZXh0SW5Sb290IiwiaGFuZGxlVGV4dE91dHNpZGVSb290IiwibG9vcCIsInBhcnNlZCIsInBhcnNlRW50aXR5IiwidGV4dEhhbmRsZXIiLCJjb21tZW50SGFuZGxlciIsImNkYXRhSGFuZGxlciIsImlzUXVlc3Rpb24iLCJ0b0xvd2VyQ2FzZSIsInBpSGFuZGxlciIsInRhcmdldCIsImJvZHkiLCJqb2luIiwidmFsdWUiLCJ4bWxkZWNsSGFuZGxlciIsImF0dHJpYnV0ZXMiLCJvcGVuVGFnU3RhcnRIYW5kbGVyIiwib3BlblRhZyIsIm9wZW5TZWxmQ2xvc2luZ1RhZyIsImNsb3NlVGFnIiwic2Nhbkxvb3AiLCJub25TcGFjZSIsIm91dFJvb3RMb29wIiwicW5hbWUiLCJhdHRyIiwicHVzaCIsImF0dHJpYnV0ZUhhbmRsZXIiLCJ0cmltbWVkIiwidHJpbSIsInBvcCIsIl9iIiwiZW5kSGFuZGxlciIsInJlc29sdmUiLCJpbmRleCIsInJlc29sdmVQcmVmaXgiLCJjb2xvbiIsImluZGV4T2YiLCJKU09OIiwic3RyaW5naWZ5Iiwic2VlbiIsIlNldCIsImVxbmFtZSIsImhhcyIsImFkZCIsImlzU2VsZkNsb3NpbmciLCJvcGVuVGFnSGFuZGxlciIsImNsb3NlVGFnSGFuZGxlciIsInRvcCIsIl9jIiwibCIsImRlZmluZWQiLCJudW0iLCJOYU4iLCJwYXJzZUludCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zYXhlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxNQUFBQSxHQUFBLEdBQUFDLE9BQUE7QUFDQSxNQUFBQyxHQUFBLEdBQUFELE9BQUE7QUFDQSxNQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFPRyxHQUFHLEdBQUdKLEdBQUcsQ0FBQ0ksR0FBRztBQUNwQixJQUFPQyxRQUFRLEdBQUdMLEdB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", + "var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n", + "var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n", + "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n", + "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n", + "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n", + "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n", + "var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n", + "var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n", + "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n", + "module.exports = require('./lib/_stream_duplex.js');\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};", + "'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}", + "'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};", + "module.exports = require('./readable').PassThrough\n", + "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n", + "module.exports = require('./readable').Transform\n", + "module.exports = require('./lib/_stream_writable.js');\n", + "var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};", + "\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n", + "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n", + "module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"v1\", {\n enumerable: true,\n get: function () {\n return _v.default;\n }\n});\nObject.defineProperty(exports, \"v3\", {\n enumerable: true,\n get: function () {\n return _v2.default;\n }\n});\nObject.defineProperty(exports, \"v4\", {\n enumerable: true,\n get: function () {\n return _v3.default;\n }\n});\nObject.defineProperty(exports, \"v5\", {\n enumerable: true,\n get: function () {\n return _v4.default;\n }\n});\nObject.defineProperty(exports, \"NIL\", {\n enumerable: true,\n get: function () {\n return _nil.default;\n }\n});\nObject.defineProperty(exports, \"version\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n});\nObject.defineProperty(exports, \"validate\", {\n enumerable: true,\n get: function () {\n return _validate.default;\n }\n});\nObject.defineProperty(exports, \"stringify\", {\n enumerable: true,\n get: function () {\n return _stringify.default;\n }\n});\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function () {\n return _parse.default;\n }\n});\n\nvar _v = _interopRequireDefault(require(\"./v1.js\"));\n\nvar _v2 = _interopRequireDefault(require(\"./v3.js\"));\n\nvar _v3 = _interopRequireDefault(require(\"./v4.js\"));\n\nvar _v4 = _interopRequireDefault(require(\"./v5.js\"));\n\nvar _nil = _interopRequireDefault(require(\"./nil.js\"));\n\nvar _version = _interopRequireDefault(require(\"./version.js\"));\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (let i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n const output = [];\n const length32 = input.length * 32;\n const hexTab = '0123456789abcdef';\n\n for (let i = 0; i < length32; i += 8) {\n const x = input[i >> 5] >>> i % 32 & 0xff;\n const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n let a = 1732584193;\n let b = -271733879;\n let c = -1732584194;\n let d = 271733878;\n\n for (let i = 0; i < x.length; i += 16) {\n const olda = a;\n const oldb = b;\n const oldc = c;\n const oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n const length8 = input.length * 8;\n const output = new Uint32Array(getOutputLength(length8));\n\n for (let i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n const lsw = (x & 0xffff) + (y & 0xffff);\n const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nvar _default = md5;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = '00000000-0000-0000-0000-000000000000';\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parse(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nvar _default = parse;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rng;\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\n\nfunction rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nvar _default = sha1;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nvar _default = stringify;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || _rng.default)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || (0, _stringify.default)(b);\n}\n\nvar _default = v1;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _md = _interopRequireDefault(require(\"./md5.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v3 = (0, _v.default)('v3', 0x30, _md.default);\nvar _default = v3;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.URL = exports.DNS = void 0;\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nvar _parse = _interopRequireDefault(require(\"./parse.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexports.DNS = DNS;\nconst URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexports.URL = URL;\n\nfunction _default(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = (0, _parse.default)(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _rng = _interopRequireDefault(require(\"./rng.js\"));\n\nvar _stringify = _interopRequireDefault(require(\"./stringify.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction v4(options, buf, offset) {\n options = options || {};\n\n const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return (0, _stringify.default)(rnds);\n}\n\nvar _default = v4;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _v = _interopRequireDefault(require(\"./v35.js\"));\n\nvar _sha = _interopRequireDefault(require(\"./sha1.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst v5 = (0, _v.default)('v5', 0x50, _sha.default);\nvar _default = v5;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _regex = _interopRequireDefault(require(\"./regex.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && _regex.default.test(uuid);\n}\n\nvar _default = validate;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _validate = _interopRequireDefault(require(\"./validate.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction version(uuid) {\n if (!(0, _validate.default)(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nvar _default = version;\nexports.default = _default;", + "\"use strict\";\n\n/**\n * Character classes and associated utilities for the 5th edition of XML 1.0.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//\n// Fragments.\n//\nexports.CHAR = \"\\t\\n\\r -\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return c >= SPACE && c <= 0xD7FF || c === NL || c === CR || c === TAB || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\nfunction isNameStartChar(c) {\n return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiQ0hBUiIsIlMiLCJOQU1FX1NUQVJUX0NIQVIiLCJOQU1FX0NIQVIiLCJDSEFSX1JFIiwiUmVnRXhwIiwiU19SRSIsIk5BTUVfU1RBUlRfQ0hBUl9SRSIsIk5BTUVfQ0hBUl9SRSIsIk5BTUVfUkUiLCJOTVRPS0VOX1JFIiwiVEFCIiwiTkwiLCJDUiIsIlNQQUNFIiwiU19MSVNUIiwiaXNDaGFyIiwiYyIsImlzUyIsImlzTmFtZVN0YXJ0Q2hhciIsImlzTmFtZUNoYXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMveG1sLzEuMC9lZDUudHMiXSwic291cmNlc0NvbnRlbnQiOltudWxsXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDYUEsT0FBQSxDQUFBQyxJQUFJLEdBQUcsc0RBQXNEO0FBRTdERCxPQUFBLENBQUFFLENBQUMsR0FBRyxTQUFTO0FBRTFCO0FBQ2FGLE9BQUEsQ0FBQUcsZUFBZSxHQUFHLGlMQUEySztBQUU3TEgsT0FBQSxDQUFBSSxTQUFTLEdBQ3BCLE1BQUlKLE9BQUEsQ0FBQUcsZUFBZSx5Q0FBc0M7QUFFM0Q7QUFDQTtBQUNBO0FBRWFILE9BQUEsQ0FBQUssT0FBTyxHQUFHLElBQUlDLE1BQU0sQ0FBQyxPQUFLTixPQUFBLENBQUFDLElBQUksT0FBSSxFQUFFLEdBQUcsQ0FBQztBQUV4Q0QsT0FBQSxDQUFBTyxJQUFJLEdBQUcsSUFBSUQsTUFBTSxDQUFDLE9BQUtOLE9BQUEsQ0FBQUUsQ0FBQyxRQUFLLEVBQUUsR0FBRyxDQUFDO0FBRW5DRixPQUFBLENBQUFRLGtCQUFrQixHQUFHLElBQUlGLE1BQU0sQ0FBQyxPQUFLTixPQUFBLENBQUFHLGVBQWUsT0FBSSxFQUFFLEdBQUcsQ0FBQztBQUU5REgsT0FBQSxDQUFBUyxZQUFZLEdBQUcsSUFBSUgsTUFBTSxDQUFDLE9BQUtOLE9BQUEsQ0FBQUksU0FBUyxPQUFJLEVBQUUsR0FBRyxDQUFDO0FBRWxESixPQUFBLENBQUFVLE9B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", + "\"use strict\";\n\n/**\n * Character classes and associated utilities for the 2nd edition of XML 1.1.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//\n// Fragments.\n//\nexports.CHAR = \"\\u0001-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\";\nexports.RESTRICTED_CHAR = \"\\u0001-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F-\\u0084\\u0086-\\u009F\";\nexports.S = \" \\t\\r\\n\";\n// tslint:disable-next-line:max-line-length\nexports.NAME_START_CHAR = \":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NAME_CHAR = \"-\" + exports.NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.CHAR_RE = new RegExp(\"^[\" + exports.CHAR + \"]$\", \"u\");\nexports.RESTRICTED_CHAR_RE = new RegExp(\"^[\" + exports.RESTRICTED_CHAR + \"]$\", \"u\");\nexports.S_RE = new RegExp(\"^[\" + exports.S + \"]+$\", \"u\");\nexports.NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"]$\", \"u\");\nexports.NAME_CHAR_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]$\", \"u\");\nexports.NAME_RE = new RegExp(\"^[\" + exports.NAME_START_CHAR + \"][\" + exports.NAME_CHAR + \"]*$\", \"u\");\nexports.NMTOKEN_RE = new RegExp(\"^[\" + exports.NAME_CHAR + \"]+$\", \"u\");\nvar TAB = 9;\nvar NL = 0xA;\nvar CR = 0xD;\nvar SPACE = 0x20;\n//\n// Lists.\n//\n/** All characters in the ``S`` production. */\nexports.S_LIST = [SPACE, NL, CR, TAB];\n/**\n * Determines whether a codepoint matches the ``CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR``.\n */\nfunction isChar(c) {\n return c >= 0x0001 && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;\n}\nexports.isChar = isChar;\n/**\n * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``.\n */\nfunction isRestrictedChar(c) {\n return c >= 0x1 && c <= 0x8 || c === 0xB || c === 0xC || c >= 0xE && c <= 0x1F || c >= 0x7F && c <= 0x84 || c >= 0x86 && c <= 0x9F;\n}\nexports.isRestrictedChar = isRestrictedChar;\n/**\n * Determines whether a codepoint matches the ``CHAR`` production and does not\n * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is\n * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster\n * than running the two-call equivalent.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``CHAR`` and does not match\n * ``RESTRICTED_CHAR``.\n */\nfunction isCharAndNotRestricted(c) {\n return c === 0x9 || c === 0xA || c === 0xD || c > 0x1F && c < 0x7F || c === 0x85 || c > 0x9F && c <= 0xD7FF || c >= 0xE000 && c <= 0xFFFD || c >= 0x10000 && c <= 0x10FFFF;\n}\nexports.isCharAndNotRestricted = isCharAndNotRestricted;\n/**\n * Determines whether a codepoint matches the ``S`` (space) production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``S``.\n */\nfunction isS(c) {\n return c === SPACE || c === NL || c === CR || c === TAB;\n}\nexports.isS = isS;\n/**\n * Determines whether a codepoint matches the ``NAME_START_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNameStartChar(c) {\n return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A || c === 0x3A || c === 0x5F || c === 0x200C || c === 0x200D || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;\n}\nexports.isNameStartChar = isNameStartChar;\n/**\n * Determines whether a codepoint matches the ``NAME_CHAR`` production.\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches ``NAME_CHAR``.\n */\nfunction isNameChar(c) {\n return isNameStartChar(c) || c >= 0x30 && c <= 0x39 || c === 0x2D || c === 0x2E || c === 0xB7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;\n}\nexports.isNameChar = isNameChar;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiQ0hBUiIsIlJFU1RSSUNURURfQ0hBUiIsIlMiLCJOQU1FX1NUQVJUX0NIQVIiLCJOQU1FX0NIQVIiLCJDSEFSX1JFIiwiUmVnRXhwIiwiUkVTVFJJQ1RFRF9DSEFSX1JFIiwiU19SRSIsIk5BTUVfU1RBUlRfQ0hBUl9SRSIsIk5BTUVfQ0hBUl9SRSIsIk5BTUVfUkUiLCJOTVRPS0VOX1JFIiwiVEFCIiwiTkwiLCJDUiIsIlNQQUNFIiwiU19MSVNUIiwiaXNDaGFyIiwiYyIsImlzUmVzdHJpY3RlZENoYXIiLCJpc0NoYXJBbmROb3RSZXN0cmljdGVkIiwiaXNTIiwiaXNOYW1lU3RhcnRDaGFyIiwiaXNOYW1lQ2hhciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy94bWwvMS4xL2VkMi50cyJdLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNhQSxPQUFBLENBQUFDLElBQUksR0FBRyxxREFBZ0Q7QUFFdkRELE9BQUEsQ0FBQUUsZUFBZSxHQUMxQixrRUFBa0U7QUFFdkRGLE9BQUEsQ0FBQUcsQ0FBQyxHQUFHLFNBQVM7QUFFMUI7QUFDYUgsT0FBQSxDQUFBSSxlQUFlLEdBQUcsaUxBQTJLO0FBRTdMSixPQUFBLENBQUFLLFNBQVMsR0FDcEIsTUFBSUwsT0FBQSxDQUFBSSxlQUFlLHlDQUFzQztBQUUzRDtBQUNBO0FBQ0E7QUFFYUosT0FBQSxDQUFBTSxPQUFPLEdBQUcsSUFBSUMsTUFBTSxDQUFDLE9BQUtQLE9BQUEsQ0FBQUMsSUFBSSxPQUFJLEVBQUUsR0FBRyxDQUFDO0FBRXhDRCxPQUFBLENBQUFRLGtCQUFrQixHQUFHLElBQUlELE1BQU0sQ0FBQyxPQUFLUCxPQUFBLENBQUFFLGVBQWUsT0FBSSxFQUFFLEdBQUcsQ0FBQztBQUU5REYsT0FBQSxDQUFBUyxJQUFJLEdBQUcsSUFBSUYsTUFBTSxDQUFDLE9BQUtQLE9BQUEsQ0FBQUcsQ0FBQyxRQUFLLEVB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", + "\"use strict\";\n\n/**\n * Character class utilities for XML NS 1.0 edition 3.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//\n// Fragments.\n//\n// tslint:disable-next-line:max-line-length\nexports.NC_NAME_START_CHAR = \"A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\uD800\\uDC00-\\uDB7F\\uDFFF\";\nexports.NC_NAME_CHAR = \"-\" + exports.NC_NAME_START_CHAR + \".0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040\";\n//\n// Regular expressions.\n//\nexports.NC_NAME_START_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"]$\", \"u\");\nexports.NC_NAME_CHAR_RE = new RegExp(\"^[\" + exports.NC_NAME_CHAR + \"]$\", \"u\");\nexports.NC_NAME_RE = new RegExp(\"^[\" + exports.NC_NAME_START_CHAR + \"][\" + exports.NC_NAME_CHAR + \"]*$\", \"u\");\n/**\n * Determines whether a codepoint matches [[NC_NAME_START_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\n// tslint:disable-next-line:cyclomatic-complexity\nfunction isNCNameStartChar(c) {\n return c >= 0x41 && c <= 0x5A || c === 0x5F || c >= 0x61 && c <= 0x7A || c >= 0xC0 && c <= 0xD6 || c >= 0xD8 && c <= 0xF6 || c >= 0x00F8 && c <= 0x02FF || c >= 0x0370 && c <= 0x037D || c >= 0x037F && c <= 0x1FFF || c >= 0x200C && c <= 0x200D || c >= 0x2070 && c <= 0x218F || c >= 0x2C00 && c <= 0x2FEF || c >= 0x3001 && c <= 0xD7FF || c >= 0xF900 && c <= 0xFDCF || c >= 0xFDF0 && c <= 0xFFFD || c >= 0x10000 && c <= 0xEFFFF;\n}\nexports.isNCNameStartChar = isNCNameStartChar;\n/**\n * Determines whether a codepoint matches [[NC_NAME_CHAR]].\n *\n * @param c The code point.\n *\n * @returns ``true`` if the codepoint matches.\n */\nfunction isNCNameChar(c) {\n return isNCNameStartChar(c) || c === 0x2D || c === 0x2E || c >= 0x30 && c <= 0x39 || c === 0x00B7 || c >= 0x0300 && c <= 0x036F || c >= 0x203F && c <= 0x2040;\n}\nexports.isNCNameChar = isNCNameChar;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwiTkNfTkFNRV9TVEFSVF9DSEFSIiwiTkNfTkFNRV9DSEFSIiwiTkNfTkFNRV9TVEFSVF9DSEFSX1JFIiwiUmVnRXhwIiwiTkNfTkFNRV9DSEFSX1JFIiwiTkNfTkFNRV9SRSIsImlzTkNOYW1lU3RhcnRDaGFyIiwiYyIsImlzTkNOYW1lQ2hhciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy94bWxucy8xLjAvZWQzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbbnVsbF0sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDYUEsT0FBQSxDQUFBQyxrQkFBa0IsR0FBRyxpTEFBMks7QUFFaE1ELE9BQUEsQ0FBQUUsWUFBWSxHQUN2QixNQUFJRixPQUFBLENBQUFDLGtCQUFrQix5Q0FBc0M7QUFFOUQ7QUFDQTtBQUNBO0FBRWFELE9BQUEsQ0FBQUcscUJBQXFCLEdBQ2hDLElBQUlDLE1BQU0sQ0FBQyxPQUFLSixPQUFBLENBQUFDLGtCQUFrQixPQUFJLEVBQUUsR0FBRyxDQUFDO0FBRWpDRCxPQUFBLENBQUFLLGVBQWUsR0FBRyxJQUFJRCxNQUFNLENBQUMsT0FBS0osT0FBQSxDQUFBRSxZQUFZLE9BQUksRUFBRSxHQUFHLENBQUM7QUFFeERGLE9BQUEsQ0FBQU0sVUFBVSxHQUNyQixJQUFJRixNQUFNLENBQUMsT0FBS0osT0FBQSxDQUFBQyxrQkFBa0IsVUFBS0QsT0FBQSxDQUFBRSxZQUFZLFFBQUssRUFBRSxHQUFHLENBQUM7QUFFaEU7Ozs7Ozs7QUFPQTtBQUNBLFNBQWdCSyxpQkFBaUJBLENBQUNDLENBQVM7RUFDekMsT0FBU0EsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUksSUFDdkJBLENBQUMsS0FBSyxJQUFJLElBQ1RBLENBQUMsSUFBSSxJQUFJLElBQUlBLENBQUMsSUFBSSxJQUFLLElBQ3ZCQSxDQUFDLElBQUksSUFBSSxJQUFJQSxDQUFDLElBQUksSUFBSyxJQUN2QkEsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUssSUFDdkJBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBTyxJQUMzQkEsQ0FBQyxJQUFJLE1BQU0sSUFBSUEsQ0FBQyxJQUFJLE1BQU8sSUFDM0JBLENBQUMsSUFBSSxPQUFPLElBQUlBLENBQUMsSUFBSSxPQUFRO0FBQ3hDO0FBaEJBUixPQUFBLENBQUFPLGlCQUFBLEdBQUFBLGlCQUFBO0FBa0JBOzs7Ozs7O0FBT0EsU0FBZ0JFLFlBQVlBLENBQUNELENBQVM7RUFDcEMsT0FBT0QsaUJBQWlCLENBQUNDLENBQUMsQ0FBQyxJQUN4QkEsQ0FBQyxLQUFLLElBQUksSUFDVkEsQ0FBQyxLQUFLLElBQUksSUFDVEEsQ0FBQyxJQUFJLElBQUksSUFBSUEsQ0FBQyxJQUFJLElBQUssSUFDeEJBLENBQUMsS0FBSyxNQUFNLElBQ1hBLENBQUMsSUFBSSxNQUFNLElBQUlBLENBQUMsSUFBSSxNQUFPLElBQzNCQSxDQUFDLElBQUksTUFBTSxJQUFJQSxDQUFDLElBQUksTUFBUTtBQUNsQztBQVJBUixPQUFBLENBQUFTLFlBQUEsR0FBQUEsWUFBQSJ9" + ] +} \ No newline at end of file diff --git a/node_backend/node_modules/exceljs/dist/exceljs.min.js b/node_backend/node_modules/exceljs/dist/exceljs.min.js new file mode 100644 index 0000000000000000000000000000000000000000..0b07c1ee50eefd56c0f363540750bbcc6225b75b --- /dev/null +++ b/node_backend/node_modules/exceljs/dist/exceljs.min.js @@ -0,0 +1,45 @@ +/*! ExcelJS 19-10-2023 */ + +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).ExcelJS=e()}}((function(){return function e(t,r,n){function i(o,a){if(!r[o]){if(!t[o]){var l="function"==typeof require&&require;if(!a&&l)return l(o,!0);if(s)return s(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var u=r[o]={exports:{}};t[o][0].call(u.exports,(function(e){return i(t[o][1][e]||e)}),u,u.exports,e,t,r,n)}return r[o].exports}for(var s="function"==typeof require&&require,o=0;o{const s=this.workbook.addWorksheet(t.sheetName),o=t.dateFormats||["YYYY-MM-DD[T]HH:mm:ssZ","YYYY-MM-DD[T]HH:mm:ss","MM-DD-YYYY","YYYY-MM-DD"],l=t.map||function(e){if(""===e)return null;const t=Number(e);if(!Number.isNaN(t)&&t!==1/0)return t;const r=o.reduce((t,r)=>{if(t)return t;const n=a(e,r,!0);return n.isValid()?n:null},null);if(r)return new Date(r.valueOf());const n=u[e];return void 0!==n?n:e},c=i.parse(t.parserOptions).on("data",e=>{s.addRow(e.map(l))}).on("end",()=>{c.emit("worksheet",s)});c.on("worksheet",r).on("error",n),e.pipe(c)})}createInputStream(){throw new Error("`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}write(e,t){return new Promise((r,n)=>{t=t||{};const s=this.workbook.getWorksheet(t.sheetName||t.sheetId),o=i.format(t.formatterOptions);e.on("finish",()=>{r()}),o.on("error",n),o.pipe(e);const{dateFormat:l,dateUTC:c}=t,u=t.map||(e=>{if(e){if(e.text||e.hyperlink)return e.hyperlink||e.text||"";if(e.formula||e.result)return e.result||"";if(e instanceof Date)return l?c?a.utc(e).format(l):a(e).format(l):c?a.utc(e).format():a(e).format();if(e.error)return e.error;if("object"==typeof e)return JSON.stringify(e)}return e}),h=void 0===t.includeEmptyRows||t.includeEmptyRows;let f=1;s&&s.eachRow((e,t)=>{if(h)for(;f++2&&void 0!==arguments[2]?arguments[2]:0;if(this.worksheet=e,t)if("string"==typeof t){const e=n.decodeAddress(t);this.nativeCol=e.col+r,this.nativeColOff=0,this.nativeRow=e.row+r,this.nativeRowOff=0}else void 0!==t.nativeCol?(this.nativeCol=t.nativeCol||0,this.nativeColOff=t.nativeColOff||0,this.nativeRow=t.nativeRow||0,this.nativeRowOff=t.nativeRowOff||0):void 0!==t.col?(this.col=t.col+r,this.row=t.row+r):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0);else this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0}static asInstance(e){return e instanceof i||null==e?e:new i(e)}get col(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth}set col(e){this.nativeCol=Math.floor(e),this.nativeColOff=Math.floor((e-this.nativeCol)*this.colWidth)}get row(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight}set row(e){this.nativeRow=Math.floor(e),this.nativeRowOff=Math.floor((e-this.nativeRow)*this.rowHeight)}get colWidth(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(1e4*this.worksheet.getColumn(this.nativeCol+1).width):64e4}get rowHeight(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(1e4*this.worksheet.getRow(this.nativeRow+1).height):18e4}get model(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}}set model(e){this.nativeCol=e.nativeCol,this.nativeColOff=e.nativeColOff,this.nativeRow=e.nativeRow,this.nativeRowOff=e.nativeRowOff}}t.exports=i},{"../utils/col-cache":19}],3:[function(e,t,r){"use strict";const n=e("../utils/col-cache"),i=e("../utils/under-dash"),s=e("./enums"),{slideFormula:o}=e("../utils/shared-formula"),a=e("./note");class l{constructor(e,t,r){if(!e||!t)throw new Error("A Cell needs a Row");this._row=e,this._column=t,n.validateAddress(r),this._address=r,this._value=c.create(l.Types.Null,this),this.style=this._mergeStyle(e.style,t.style,{}),this._mergeCount=0}get worksheet(){return this._row.worksheet}get workbook(){return this._row.worksheet.workbook}destroy(){delete this.style,delete this._value,delete this._row,delete this._column,delete this._address}get numFmt(){return this.style.numFmt}set numFmt(e){this.style.numFmt=e}get font(){return this.style.font}set font(e){this.style.font=e}get alignment(){return this.style.alignment}set alignment(e){this.style.alignment=e}get border(){return this.style.border}set border(e){this.style.border=e}get fill(){return this.style.fill}set fill(e){this.style.fill=e}get protection(){return this.style.protection}set protection(e){this.style.protection=e}_mergeStyle(e,t,r){const n=e&&e.numFmt||t&&t.numFmt;n&&(r.numFmt=n);const i=e&&e.font||t&&t.font;i&&(r.font=i);const s=e&&e.alignment||t&&t.alignment;s&&(r.alignment=s);const o=e&&e.border||t&&t.border;o&&(r.border=o);const a=e&&e.fill||t&&t.fill;a&&(r.fill=a);const l=e&&e.protection||t&&t.protection;return l&&(r.protection=l),r}get address(){return this._address}get row(){return this._row.number}get col(){return this._column.number}get $col$row(){return`$${this._column.letter}$${this.row}`}get type(){return this._value.type}get effectiveType(){return this._value.effectiveType}toCsvString(){return this._value.toCsvString()}addMergeRef(){this._mergeCount++}releaseMergeRef(){this._mergeCount--}get isMerged(){return this._mergeCount>0||this.type===l.Types.Merge}merge(e,t){this._value.release(),this._value=c.create(l.Types.Merge,this,e),t||(this.style=e.style)}unmerge(){this.type===l.Types.Merge&&(this._value.release(),this._value=c.create(l.Types.Null,this),this.style=this._mergeStyle(this._row.style,this._column.style,{}))}isMergedTo(e){return this._value.type===l.Types.Merge&&this._value.isMergedTo(e)}get master(){return this.type===l.Types.Merge?this._value.master:this}get isHyperlink(){return this._value.type===l.Types.Hyperlink}get hyperlink(){return this._value.hyperlink}get value(){return this._value.value}set value(e){this.type!==l.Types.Merge?(this._value.release(),this._value=c.create(c.getType(e),this,e)):this._value.master.value=e}get note(){return this._comment&&this._comment.note}set note(e){this._comment=new a(e)}get text(){return this._value.toString()}get html(){return i.escapeHtml(this.text)}toString(){return this.text}_upgradeToHyperlink(e){this.type===l.Types.String&&(this._value=c.create(l.Types.Hyperlink,this,{text:this._value.value,hyperlink:e}))}get formula(){return this._value.formula}get result(){return this._value.result}get formulaType(){return this._value.formulaType}get fullAddress(){const{worksheet:e}=this._row;return{sheetName:e.name,address:this.address,row:this.row,col:this.col}}get name(){return this.names[0]}set name(e){this.names=[e]}get names(){return this.workbook.definedNames.getNamesEx(this.fullAddress)}set names(e){const{definedNames:t}=this.workbook;t.removeAllNames(this.fullAddress),e.forEach(e=>{t.addEx(this.fullAddress,e)})}addName(e){this.workbook.definedNames.addEx(this.fullAddress,e)}removeName(e){this.workbook.definedNames.removeEx(this.fullAddress,e)}removeAllNames(){this.workbook.definedNames.removeAllNames(this.fullAddress)}get _dataValidations(){return this.worksheet.dataValidations}get dataValidation(){return this._dataValidations.find(this.address)}set dataValidation(e){this._dataValidations.add(this.address,e)}get model(){const{model:e}=this._value;return e.style=this.style,this._comment&&(e.comment=this._comment.model),e}set model(e){if(this._value.release(),this._value=c.create(e.type,this),this._value.model=e,e.comment)switch(e.comment.type){case"note":this._comment=a.fromModel(e.comment)}e.style?this.style=e.style:this.style={}}}l.Types=s.ValueType;const c={getType:e=>null==e?l.Types.Null:e instanceof String||"string"==typeof e?l.Types.String:"number"==typeof e?l.Types.Number:"boolean"==typeof e?l.Types.Boolean:e instanceof Date?l.Types.Date:e.text&&e.hyperlink?l.Types.Hyperlink:e.formula||e.sharedFormula?l.Types.Formula:e.richText?l.Types.RichText:e.sharedString?l.Types.SharedString:e.error?l.Types.Error:l.Types.JSON,types:[{t:l.Types.Null,f:class{constructor(e){this.model={address:e.address,type:l.Types.Null}}get value(){return null}set value(e){}get type(){return l.Types.Null}get effectiveType(){return l.Types.Null}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return""}release(){}toString(){return""}}},{t:l.Types.Number,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Number,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.Number}get effectiveType(){return l.Types.Number}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}},{t:l.Types.String,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.String,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.String}get effectiveType(){return l.Types.String}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return`"${this.model.value.replace(/"/g,'""')}"`}release(){}toString(){return this.model.value}}},{t:l.Types.Date,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Date,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.Date}get effectiveType(){return l.Types.Date}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value.toISOString()}release(){}toString(){return this.model.value.toString()}}},{t:l.Types.Hyperlink,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Hyperlink,text:t?t.text:void 0,hyperlink:t?t.hyperlink:void 0},t&&t.tooltip&&(this.model.tooltip=t.tooltip)}get value(){const e={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(e.tooltip=this.model.tooltip),e}set value(e){this.model={text:e.text,hyperlink:e.hyperlink},e.tooltip&&(this.model.tooltip=e.tooltip)}get text(){return this.model.text}set text(e){this.model.text=e}get hyperlink(){return this.model.hyperlink}set hyperlink(e){this.model.hyperlink=e}get type(){return l.Types.Hyperlink}get effectiveType(){return l.Types.Hyperlink}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.hyperlink}release(){}toString(){return this.model.text}}},{t:l.Types.Formula,f:class{constructor(e,t){this.cell=e,this.model={address:e.address,type:l.Types.Formula,shareType:t?t.shareType:void 0,ref:t?t.ref:void 0,formula:t?t.formula:void 0,sharedFormula:t?t.sharedFormula:void 0,result:t?t.result:void 0}}_copyModel(e){const t={},r=r=>{const n=e[r];n&&(t[r]=n)};return r("formula"),r("result"),r("ref"),r("shareType"),r("sharedFormula"),t}get value(){return this._copyModel(this.model)}set value(e){this.model=this._copyModel(e)}validate(e){switch(c.getType(e)){case l.Types.Null:case l.Types.String:case l.Types.Number:case l.Types.Date:break;case l.Types.Hyperlink:case l.Types.Formula:default:throw new Error("Cannot process that type of result value")}}get dependencies(){return{ranges:this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g),cells:this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g,"").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g)}}get formula(){return this.model.formula||this._getTranslatedFormula()}set formula(e){this.model.formula=e}get formulaType(){return this.model.formula?s.FormulaType.Master:this.model.sharedFormula?s.FormulaType.Shared:s.FormulaType.None}get result(){return this.model.result}set result(e){this.model.result=e}get type(){return l.Types.Formula}get effectiveType(){const e=this.model.result;return null==e?s.ValueType.Null:e instanceof String||"string"==typeof e?s.ValueType.String:"number"==typeof e?s.ValueType.Number:e instanceof Date?s.ValueType.Date:e.text&&e.hyperlink?s.ValueType.Hyperlink:e.formula?s.ValueType.Formula:s.ValueType.Null}get address(){return this.model.address}set address(e){this.model.address=e}_getTranslatedFormula(){if(!this._translatedFormula&&this.model.sharedFormula){const{worksheet:e}=this.cell,t=e.findCell(this.model.sharedFormula);this._translatedFormula=t&&o(t.formula,t.address,this.model.address)}return this._translatedFormula}toCsvString(){return""+(this.model.result||"")}release(){}toString(){return this.model.result?this.model.result.toString():""}}},{t:l.Types.Merge,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Merge,master:t?t.address:void 0},this._master=t,t&&t.addMergeRef()}get value(){return this._master.value}set value(e){e instanceof l?(this._master&&this._master.releaseMergeRef(),e.addMergeRef(),this._master=e):this._master.value=e}isMergedTo(e){return e===this._master}get master(){return this._master}get type(){return l.Types.Merge}get effectiveType(){return this._master.effectiveType}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return""}release(){this._master.releaseMergeRef()}toString(){return this.value.toString()}}},{t:l.Types.JSON,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.String,value:JSON.stringify(t),rawValue:t}}get value(){return this.model.rawValue}set value(e){this.model.rawValue=e,this.model.value=JSON.stringify(e)}get type(){return l.Types.String}get effectiveType(){return l.Types.String}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value}release(){}toString(){return this.model.value}}},{t:l.Types.SharedString,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.SharedString,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.SharedString}get effectiveType(){return l.Types.SharedString}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}},{t:l.Types.RichText,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.String,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}toString(){return this.model.value.richText.map(e=>e.text).join("")}get type(){return l.Types.RichText}get effectiveType(){return l.Types.RichText}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return`"${this.text.replace(/"/g,'""')}"`}release(){}}},{t:l.Types.Boolean,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Boolean,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.Boolean}get effectiveType(){return l.Types.Boolean}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.model.value?1:0}release(){}toString(){return this.model.value.toString()}}},{t:l.Types.Error,f:class{constructor(e,t){this.model={address:e.address,type:l.Types.Error,value:t}}get value(){return this.model.value}set value(e){this.model.value=e}get type(){return l.Types.Error}get effectiveType(){return l.Types.Error}get address(){return this.model.address}set address(e){this.model.address=e}toCsvString(){return this.toString()}release(){}toString(){return this.model.value.error.toString()}}}].reduce((e,t)=>(e[t.t]=t.f,e),[]),create(e,t,r){const n=this.types[e];if(!n)throw new Error("Could not create Value of type "+e);return new n(t,r)}};t.exports=l},{"../utils/col-cache":19,"../utils/shared-formula":23,"../utils/under-dash":26,"./enums":7,"./note":9}],4:[function(e,t,r){"use strict";const n=e("../utils/under-dash"),i=e("./enums"),s=e("../utils/col-cache");class o{constructor(e,t,r){this._worksheet=e,this._number=t,!1!==r&&(this.defn=r)}get number(){return this._number}get worksheet(){return this._worksheet}get letter(){return s.n2l(this._number)}get isCustomWidth(){return void 0!==this.width&&9!==this.width}get defn(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel}}set defn(e){e?(this.key=e.key,this.width=void 0!==e.width?e.width:9,this.outlineLevel=e.outlineLevel,e.style?this.style=e.style:this.style={},this.header=e.header,this._hidden=!!e.hidden):(delete this._header,delete this._key,delete this.width,this.style={},this.outlineLevel=0)}get headers(){return this._header&&this._header instanceof Array?this._header:[this._header]}get header(){return this._header}set header(e){void 0!==e?(this._header=e,this.headers.forEach((e,t)=>{this._worksheet.getCell(t+1,this.number).value=e})):this._header=void 0}get key(){return this._key}set key(e){(this._key&&this._worksheet.getColumnKey(this._key))===this&&this._worksheet.deleteColumnKey(this._key),this._key=e,e&&this._worksheet.setColumnKey(this._key,this)}get hidden(){return!!this._hidden}set hidden(e){this._hidden=e}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(e){this._outlineLevel=e}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol)}toString(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:void 0})}equivalentTo(e){return this.width===e.width&&this.hidden===e.hidden&&this.outlineLevel===e.outlineLevel&&n.isEqual(this.style,e.style)}get isDefault(){if(this.isCustomWidth)return!1;if(this.hidden)return!1;if(this.outlineLevel)return!1;const e=this.style;return!e||!(e.font||e.numFmt||e.alignment||e.border||e.fill||e.protection)}get headerCount(){return this.headers.length}eachCell(e,t){const r=this.number;t||(t=e,e=null),this._worksheet.eachRow(e,(e,n)=>{t(e.getCell(r),n)})}get values(){const e=[];return this.eachCell((t,r)=>{t&&t.type!==i.ValueType.Null&&(e[r]=t.value)}),e}set values(e){if(!e)return;const t=this.number;let r=0;e.hasOwnProperty("0")&&(r=1),e.forEach((e,n)=>{this._worksheet.getCell(n+r,t).value=e})}_applyStyle(e,t){return this.style[e]=t,this.eachCell(r=>{r[e]=t}),t}get numFmt(){return this.style.numFmt}set numFmt(e){this._applyStyle("numFmt",e)}get font(){return this.style.font}set font(e){this._applyStyle("font",e)}get alignment(){return this.style.alignment}set alignment(e){this._applyStyle("alignment",e)}get protection(){return this.style.protection}set protection(e){this._applyStyle("protection",e)}get border(){return this.style.border}set border(e){this._applyStyle("border",e)}get fill(){return this.style.fill}set fill(e){this._applyStyle("fill",e)}static toModel(e){const t=[];let r=null;return e&&e.forEach((e,n)=>{e.isDefault?r&&(r=null):r&&e.equivalentTo(r)?r.max=n+1:(r={min:n+1,max:n+1,width:void 0!==e.width?e.width:9,style:e.style,isCustomWidth:e.isCustomWidth,hidden:e.hidden,outlineLevel:e.outlineLevel,collapsed:e.collapsed},t.push(r))}),t.length?t:void 0}static fromModel(e,t){const r=[];let n=1,i=0;for(t=(t=t||[]).sort((function(e,t){return e.min-t.min}));i{t.removeCellEx(e)})}forEach(e){n.each(this.matrixMap,(t,r)=>{t.forEach(t=>{e(r,t)})})}getNames(e){return this.getNamesEx(i.decodeEx(e))}getNamesEx(e){return n.map(this.matrixMap,(t,r)=>t.findCellEx(e)&&r).filter(Boolean)}_explore(e,t){t.mark=!1;const{sheetName:r}=t,n=new o(t.row,t.col,t.row,t.col,r);let i,s;function a(i,s){const o=e.findCellAt(r,i,t.col);return!(!o||!o.mark)&&(n[s]=i,o.mark=!1,!0)}for(s=t.row-1;a(s,"top");s--);for(s=t.row+1;a(s,"bottom");s++);function l(t,i){const o=[];for(s=n.top;s<=n.bottom;s++){const n=e.findCellAt(r,s,t);if(!n||!n.mark)return!1;o.push(n)}n[i]=t;for(let e=0;e{e.mark=!0});return{name:e,ranges:t.map(e=>e.mark&&this._explore(t,e)).filter(Boolean).map(e=>e.$shortRange)}}normaliseMatrix(e,t){e.forEachInSheet(t,(e,t,r)=>{e&&(e.row===t&&e.col===r||(e.row=t,e.col=r,e.address=i.n2l(r)+t))})}spliceRows(e,t,r,i){n.each(this.matrixMap,n=>{n.spliceRows(e,t,r,i),this.normaliseMatrix(n,e)})}spliceColumns(e,t,r,i){n.each(this.matrixMap,n=>{n.spliceColumns(e,t,r,i),this.normaliseMatrix(n,e)})}get model(){return n.map(this.matrixMap,(e,t)=>this.getRanges(t,e)).filter(e=>e.ranges.length)}set model(e){const t=this.matrixMap={};e.forEach(e=>{const r=t[e.name]=new s;e.ranges.forEach(e=>{a.test(e.split("!").pop()||"")&&r.addCell(e)})})}}},{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":26,"./range":10}],7:[function(e,t,r){"use strict";t.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:"#N/A",Ref:"#REF!",Name:"#NAME?",DivZero:"#DIV/0!",Null:"#NULL!",Value:"#VALUE!",Num:"#NUM!"}}},{}],8:[function(e,t,r){"use strict";const n=e("../utils/col-cache"),i=e("./anchor");t.exports=class{constructor(e,t){this.worksheet=e,this.model=t}get model(){switch(this.type){case"background":return{type:this.type,imageId:this.imageId};case"image":return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error("Invalid Image Type")}}set model(e){let{type:t,imageId:r,range:s,hyperlinks:o}=e;if(this.type=t,this.imageId=r,"image"===t)if("string"==typeof s){const e=n.decode(s);this.range={tl:new i(this.worksheet,{col:e.left,row:e.top},-1),br:new i(this.worksheet,{col:e.right,row:e.bottom},0),editAs:"oneCell"}}else this.range={tl:new i(this.worksheet,s.tl,0),br:s.br&&new i(this.worksheet,s.br,0),ext:s.ext,editAs:s.editAs,hyperlinks:o||s.hyperlinks}}}},{"../utils/col-cache":19,"./anchor":2}],9:[function(e,t,r){"use strict";const n=e("../utils/under-dash");class i{constructor(e){this.note=e}get model(){let e=null;switch(typeof this.note){case"string":e={type:"note",note:{texts:[{text:this.note}]}};break;default:e={type:"note",note:this.note}}return n.deepMerge({},i.DEFAULT_CONFIGS,e)}set model(e){const{note:t}=e,{texts:r}=t;1===r.length&&1===Object.keys(r[0]).length?this.note=r[0].text:this.note=t}static fromModel(e){const t=new i;return t.model=e,t}}i.DEFAULT_CONFIGS={note:{margins:{insetmode:"auto",inset:[.13,.13,.25,.25]},protection:{locked:"True",lockText:"True"},editAs:"absolute"}},t.exports=i},{"../utils/under-dash":26}],10:[function(e,t,r){"use strict";const n=e("../utils/col-cache");class i{constructor(){this.decode(arguments)}setTLBR(e,t,r,i,s){if(arguments.length<4){const i=n.decodeAddress(e),o=n.decodeAddress(t);this.model={top:Math.min(i.row,o.row),left:Math.min(i.col,o.col),bottom:Math.max(i.row,o.row),right:Math.max(i.col,o.col),sheetName:r},this.setTLBR(i.row,i.col,o.row,o.col,s)}else this.model={top:Math.min(e,r),left:Math.min(t,i),bottom:Math.max(e,r),right:Math.max(t,i),sheetName:s}}decode(e){switch(e.length){case 5:this.setTLBR(e[0],e[1],e[2],e[3],e[4]);break;case 4:this.setTLBR(e[0],e[1],e[2],e[3]);break;case 3:this.setTLBR(e[0],e[1],e[2]);break;case 2:this.setTLBR(e[0],e[1]);break;case 1:{const t=e[0];if(t instanceof i)this.model={top:t.model.top,left:t.model.left,bottom:t.model.bottom,right:t.model.right,sheetName:t.sheetName};else if(t instanceof Array)this.decode(t);else if(t.top&&t.left&&t.bottom&&t.right)this.model={top:t.top,left:t.left,bottom:t.bottom,right:t.right,sheetName:t.sheetName};else{const e=n.decodeEx(t);e.top?this.model={top:e.top,left:e.left,bottom:e.bottom,right:e.right,sheetName:e.sheetName}:this.model={top:e.row,left:e.col,bottom:e.row,right:e.col,sheetName:e.sheetName}}break}case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error("Invalid number of arguments to _getDimensions() - "+e.length)}}get top(){return this.model.top||1}set top(e){this.model.top=e}get left(){return this.model.left||1}set left(e){this.model.left=e}get bottom(){return this.model.bottom||1}set bottom(e){this.model.bottom=e}get right(){return this.model.right||1}set right(e){this.model.right=e}get sheetName(){return this.model.sheetName}set sheetName(e){this.model.sheetName=e}get _serialisedSheetName(){const{sheetName:e}=this.model;return e?/^[a-zA-Z0-9]*$/.test(e)?e+"!":`'${e}'!`:""}expand(e,t,r,n){(!this.model.top||ethis.bottom)&&(this.bottom=r),(!this.model.right||n>this.right)&&(this.right=n)}expandRow(e){if(e){const{dimensions:t,number:r}=e;t&&this.expand(r,t.min,r,t.max)}}expandToAddress(e){const t=n.decodeEx(e);this.expand(t.row,t.col,t.row,t.col)}get tl(){return n.n2l(this.left)+this.top}get $t$l(){return`$${n.n2l(this.left)}$${this.top}`}get br(){return n.n2l(this.right)+this.bottom}get $b$r(){return`$${n.n2l(this.right)}$${this.bottom}`}get range(){return`${this._serialisedSheetName+this.tl}:${this.br}`}get $range(){return`${this._serialisedSheetName+this.$t$l}:${this.$b$r}`}get shortRange(){return this.count>1?this.range:this._serialisedSheetName+this.tl}get $shortRange(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}get count(){return(1+this.bottom-this.top)*(1+this.right-this.left)}toString(){return this.range}intersects(e){return(!e.sheetName||!this.sheetName||e.sheetName===this.sheetName)&&(!(e.bottomthis.bottom)&&(!(e.rightthis.right))))}contains(e){const t=n.decodeEx(e);return this.containsEx(t)}containsEx(e){return(!e.sheetName||!this.sheetName||e.sheetName===this.sheetName)&&(e.row>=this.top&&e.row<=this.bottom&&e.col>=this.left&&e.col<=this.right)}forEachAddress(e){for(let t=this.left;t<=this.right;t++)for(let r=this.top;r<=this.bottom;r++)e(n.encodeAddress(r,t),r,t)}}t.exports=i},{"../utils/col-cache":19}],11:[function(e,t,r){"use strict";const n=e("../utils/under-dash"),i=e("./enums"),s=e("../utils/col-cache"),o=e("./cell");t.exports=class{constructor(e,t){this._worksheet=e,this._number=t,this._cells=[],this.style={},this.outlineLevel=0}get number(){return this._number}get worksheet(){return this._worksheet}commit(){this._worksheet._commitRow(this)}destroy(){delete this._worksheet,delete this._cells,delete this.style}findCell(e){return this._cells[e-1]}getCellEx(e){let t=this._cells[e.col-1];if(!t){const r=this._worksheet.getColumn(e.col);t=new o(this,r,e.address),this._cells[e.col-1]=t}return t}getCell(e){if("string"==typeof e){const t=this._worksheet.getColumnKey(e);e=t?t.number:s.l2n(e)}return this._cells[e-1]||this.getCellEx({address:s.encodeAddress(this._number,e),row:this._number,col:e})}splice(e,t){const r=e+t;for(var n=arguments.length,i=new Array(n>2?n-2:0),s=2;s0)for(l=a;l>=r;l--)c=this._cells[l-1],c?(u=this.getCell(l+o),u.value=c.value,u.style=c.style,u._comment=c._comment):this._cells[l+o-1]=void 0;for(l=0;l{e&&e.type!==i.ValueType.Null&&t(e,r+1)})}addPageBreak(e,t){const r=this._worksheet,n=Math.max(0,e-1)||0,i=Math.max(0,t-1)||16838,s={id:this._number,max:i,man:1};n&&(s.min=n),r.rowBreaks.push(s)}get values(){const e=[];return this._cells.forEach(t=>{t&&t.type!==i.ValueType.Null&&(e[t.col]=t.value)}),e}set values(e){if(this._cells=[],e)if(e instanceof Array){let t=0;e.hasOwnProperty("0")&&(t=1),e.forEach((e,r)=>{void 0!==e&&(this.getCellEx({address:s.encodeAddress(this._number,r+t),row:this._number,col:r+t}).value=e)})}else this._worksheet.eachColumnKey((t,r)=>{void 0!==e[r]&&(this.getCellEx({address:s.encodeAddress(this._number,t.number),row:this._number,col:t.number}).value=e[r])});else;}get hasValues(){return n.some(this._cells,e=>e&&e.type!==i.ValueType.Null)}get cellCount(){return this._cells.length}get actualCellCount(){let e=0;return this.eachCell(()=>{e++}),e}get dimensions(){let e=0,t=0;return this._cells.forEach(r=>{r&&r.type!==i.ValueType.Null&&((!e||e>r.col)&&(e=r.col),t0?{min:e,max:t}:null}_applyStyle(e,t){return this.style[e]=t,this._cells.forEach(r=>{r&&(r[e]=t)}),t}get numFmt(){return this.style.numFmt}set numFmt(e){this._applyStyle("numFmt",e)}get font(){return this.style.font}set font(e){this._applyStyle("font",e)}get alignment(){return this.style.alignment}set alignment(e){this._applyStyle("alignment",e)}get protection(){return this.style.protection}set protection(e){this._applyStyle("protection",e)}get border(){return this.style.border}set border(e){this._applyStyle("border",e)}get fill(){return this.style.fill}set fill(e){this._applyStyle("fill",e)}get hidden(){return!!this._hidden}set hidden(e){this._hidden=e}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(e){this._outlineLevel=e}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}get model(){const e=[];let t=0,r=0;return this._cells.forEach(n=>{if(n){const i=n.model;i&&((!t||t>n.col)&&(t=n.col),r{switch(e.type){case o.Types.Merge:break;default:{let r;if(e.address)r=s.decodeAddress(e.address);else if(t){const{row:e}=t,n=t.col+1;r={row:e,col:n,address:s.encodeAddress(e,n),$col$row:`$${s.n2l(n)}$${e}`}}t=r;this.getCellEx(r).model=e;break}}}),e.height?this.height=e.height:delete this.height,this.hidden=e.hidden,this.outlineLevel=e.outlineLevel||0,this.style=e.style&&JSON.parse(JSON.stringify(e.style))||{}}}},{"../utils/col-cache":19,"../utils/under-dash":26,"./cell":3,"./enums":7}],12:[function(e,t,r){"use strict";const n=e("../utils/col-cache");class i{constructor(e,t,r){this.table=e,this.column=t,this.index=r}_set(e,t){this.table.cacheState(),this.column[e]=t}get name(){return this.column.name}set name(e){this._set("name",e)}get filterButton(){return this.column.filterButton}set filterButton(e){this.column.filterButton=e}get style(){return this.column.style}set style(e){this.column.style=e}get totalsRowLabel(){return this.column.totalsRowLabel}set totalsRowLabel(e){this._set("totalsRowLabel",e)}get totalsRowFunction(){return this.column.totalsRowFunction}set totalsRowFunction(e){this._set("totalsRowFunction",e)}get totalsRowResult(){return this.column.totalsRowResult}set totalsRowResult(e){this._set("totalsRowResult",e)}get totalsRowFormula(){return this.column.totalsRowFormula}set totalsRowFormula(e){this._set("totalsRowFormula",e)}}t.exports=class{constructor(e,t){this.worksheet=e,t&&(this.table=t,this.validate(),this.store())}getFormula(e){switch(e.totalsRowFunction){case"none":return null;case"average":return`SUBTOTAL(101,${this.table.name}[${e.name}])`;case"countNums":return`SUBTOTAL(102,${this.table.name}[${e.name}])`;case"count":return`SUBTOTAL(103,${this.table.name}[${e.name}])`;case"max":return`SUBTOTAL(104,${this.table.name}[${e.name}])`;case"min":return`SUBTOTAL(105,${this.table.name}[${e.name}])`;case"stdDev":return`SUBTOTAL(106,${this.table.name}[${e.name}])`;case"var":return`SUBTOTAL(107,${this.table.name}[${e.name}])`;case"sum":return`SUBTOTAL(109,${this.table.name}[${e.name}])`;case"custom":return e.totalsRowFormula;default:throw new Error("Invalid Totals Row Function: "+e.totalsRowFunction)}}get width(){return this.table.columns.length}get height(){return this.table.rows.length}get filterHeight(){return this.height+(this.table.headerRow?1:0)}get tableHeight(){return this.filterHeight+(this.table.totalsRow?1:0)}validate(){const{table:e}=this,t=(e,t,r)=>{void 0===e[t]&&(e[t]=r)};t(e,"headerRow",!0),t(e,"totalsRow",!1),t(e,"style",{}),t(e.style,"theme","TableStyleMedium2"),t(e.style,"showFirstColumn",!1),t(e.style,"showLastColumn",!1),t(e.style,"showRowStripes",!1),t(e.style,"showColumnStripes",!1);const r=(e,t)=>{if(!e)throw new Error(t)};r(e.ref,"Table must have ref"),r(e.columns,"Table must have column definitions"),r(e.rows,"Table must have row definitions"),e.tl=n.decodeAddress(e.ref);const{row:i,col:s}=e.tl;r(i>0,"Table must be on valid row"),r(s>0,"Table must be on valid col");const{width:o,filterHeight:a,tableHeight:l}=this;e.autoFilterRef=n.encode(i,s,i+a-1,s+o-1),e.tableRef=n.encode(i,s,i+l-1,s+o-1),e.columns.forEach((e,n)=>{r(e.name,`Column ${n} must have a name`),0===n?t(e,"totalsRowLabel","Total"):(t(e,"totalsRowFunction","none"),e.totalsRowFormula=this.getFormula(e))})}store(){const e=(e,t)=>{t&&Object.keys(t).forEach(r=>{e[r]=t[r]})},{worksheet:t,table:r}=this,{row:n,col:i}=r.tl;let s=0;if(r.headerRow){const o=t.getRow(n+s++);r.columns.forEach((t,r)=>{const{style:n,name:s}=t,a=o.getCell(i+r);a.value=s,e(a,n)})}if(r.rows.forEach(o=>{const a=t.getRow(n+s++);o.forEach((t,n)=>{const s=a.getCell(i+n);s.value=t,e(s,r.columns[n].style)})}),r.totalsRow){const o=t.getRow(n+s++);r.columns.forEach((t,r)=>{const n=o.getCell(i+r);if(0===r)n.value=t.totalsRowLabel;else{const e=this.getFormula(t);n.value=e?{formula:t.totalsRowFormula,result:t.totalsRowResult}:null}e(n,t.style)})}}load(e){const{table:t}=this,{row:r,col:n}=t.tl;let i=0;if(t.headerRow){const s=e.getRow(r+i++);t.columns.forEach((e,t)=>{s.getCell(n+t).value=e.name})}if(t.rows.forEach(t=>{const s=e.getRow(r+i++);t.forEach((e,t)=>{s.getCell(n+t).value=e})}),t.totalsRow){const s=e.getRow(r+i++);t.columns.forEach((e,t)=>{const r=s.getCell(n+t);if(0===t)r.value=e.totalsRowLabel;else{this.getFormula(e)&&(r.value={formula:e.totalsRowFormula,result:e.totalsRowResult})}})}}get model(){return this.table}set model(e){this.table=e}cacheState(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}commit(){if(!this._cache)return;this.validate();const e=n.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.rows.splice(e,t)}getColumn(e){const t=this.table.columns[e];return new i(this,t,e)}addColumn(e,t,r){this.cacheState(),void 0===r?(this.table.columns.push(e),this.table.rows.forEach((e,r)=>{e.push(t[r])})):(this.table.columns.splice(r,0,e),this.table.rows.forEach((e,n)=>{e.splice(r,0,t[n])}))}removeColumns(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.columns.splice(e,t),this.table.rows.forEach(r=>{r.splice(e,t)})}_assign(e,t,r){this.cacheState(),e[t]=r}get ref(){return this.table.ref}set ref(e){this._assign(this.table,"ref",e)}get name(){return this.table.name}set name(e){this.table.name=e}get displayName(){return this.table.displyName||this.table.name}set displayNamename(e){this.table.displayName=e}get headerRow(){return this.table.headerRow}set headerRow(e){this._assign(this.table,"headerRow",e)}get totalsRow(){return this.table.totalsRow}set totalsRow(e){this._assign(this.table,"totalsRow",e)}get theme(){return this.table.style.name}set theme(e){this.table.style.name=e}get showFirstColumn(){return this.table.style.showFirstColumn}set showFirstColumn(e){this.table.style.showFirstColumn=e}get showLastColumn(){return this.table.style.showLastColumn}set showLastColumn(e){this.table.style.showLastColumn=e}get showRowStripes(){return this.table.style.showRowStripes}set showRowStripes(e){this.table.style.showRowStripes=e}get showColumnStripes(){return this.table.style.showColumnStripes}set showColumnStripes(e){this.table.style.showColumnStripes=e}}},{"../utils/col-cache":19}],13:[function(e,t,r){"use strict";const n=e("./worksheet"),i=e("./defined-names"),s=e("../xlsx/xlsx"),o=e("../csv/csv");t.exports=class{constructor(){this.category="",this.company="",this.created=new Date,this.description="",this.keywords="",this.manager="",this.modified=this.created,this.properties={},this.calcProperties={},this._worksheets=[],this.subject="",this.title="",this.views=[],this.media=[],this._definedNames=new i}get xlsx(){return this._xlsx||(this._xlsx=new s(this)),this._xlsx}get csv(){return this._csv||(this._csv=new o(this)),this._csv}get nextId(){for(let e=1;e(t&&t.orderNo)>e?t.orderNo:e,0),s=Object.assign({},t,{id:r,name:e,orderNo:i+1,workbook:this}),o=new n(s);return this._worksheets[r]=o,o}removeWorksheetEx(e){delete this._worksheets[e.id]}removeWorksheet(e){const t=this.getWorksheet(e);t&&t.destroy()}getWorksheet(e){return void 0===e?this._worksheets.find(Boolean):"number"==typeof e?this._worksheets[e]:"string"==typeof e?this._worksheets.find(t=>t&&t.name===e):void 0}get worksheets(){return this._worksheets.slice(1).sort((e,t)=>e.orderNo-t.orderNo).filter(Boolean)}eachSheet(e){this.worksheets.forEach(t=>{e(t,t.id)})}get definedNames(){return this._definedNames}clearThemes(){this._themes=void 0}addImage(e){const t=this.media.length;return this.media.push(Object.assign({},e,{type:"image"})),t}getImage(e){return this.media[e]}get model(){return{creator:this.creator||"Unknown",lastModifiedBy:this.lastModifiedBy||"Unknown",lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map(e=>e.model),sheets:this.worksheets.map(e=>e.model).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties}}set model(e){this.creator=e.creator,this.lastModifiedBy=e.lastModifiedBy,this.lastPrinted=e.lastPrinted,this.created=e.created,this.modified=e.modified,this.company=e.company,this.manager=e.manager,this.title=e.title,this.subject=e.subject,this.keywords=e.keywords,this.category=e.category,this.description=e.description,this.language=e.language,this.revision=e.revision,this.contentStatus=e.contentStatus,this.properties=e.properties,this.calcProperties=e.calcProperties,this._worksheets=[],e.worksheets.forEach(t=>{const{id:r,name:i,state:s}=t,o=e.sheets&&e.sheets.findIndex(e=>e.id===r);(this._worksheets[r]=new n({id:r,name:i,orderNo:o,state:s,workbook:this})).model=t}),this._definedNames.model=e.definedNames,this.views=e.views,this._themes=e.themes,this.media=e.media||[]}}},{"../csv/csv":1,"../xlsx/xlsx":144,"./defined-names":6,"./worksheet":14}],14:[function(e,t,r){"use strict";const n=e("../utils/under-dash"),i=e("../utils/col-cache"),s=e("./range"),o=e("./row"),a=e("./column"),l=e("./enums"),c=e("./image"),u=e("./table"),h=e("./data-validations"),f=e("../utils/encryptor"),{copyStyle:d}=e("../utils/copy-style");t.exports=class{constructor(e){e=e||{},this._workbook=e.workbook,this.id=e.id,this.orderNo=e.orderNo,this.name=e.name,this.state=e.state||"visible",this._rows=[],this._columns=null,this._keys={},this._merges={},this.rowBreaks=[],this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},e.properties),this.pageSetup=Object.assign({},{margins:{left:.7,right:.7,top:.75,bottom:.75,header:.3,footer:.3},orientation:"portrait",horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!(!e.pageSetup||!e.pageSetup.fitToWidth&&!e.pageSetup.fitToHeight||e.pageSetup.scale),pageOrder:"downThenOver",blackAndWhite:!1,draft:!1,cellComments:"None",errors:"displayed",scale:100,fitToWidth:1,fitToHeight:1,paperSize:void 0,showRowColHeaders:!1,showGridLines:!1,firstPageNumber:void 0,horizontalCentered:!1,verticalCentered:!1,rowBreaks:null,colBreaks:null},e.pageSetup),this.headerFooter=Object.assign({},{differentFirst:!1,differentOddEven:!1,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},e.headerFooter),this.dataValidations=new h,this.views=e.views||[],this.autoFilter=e.autoFilter||null,this._media=[],this.sheetProtection=null,this.tables={},this.conditionalFormattings=[]}get name(){return this._name}set name(e){if(void 0===e&&(e="sheet"+this.id),this._name!==e){if("string"!=typeof e)throw new Error("The name has to be a string.");if(""===e)throw new Error("The name can't be empty.");if("History"===e)throw new Error('The name "History" is protected. Please use a different name.');if(/[*?:/\\[\]]/.test(e))throw new Error(`Worksheet name ${e} cannot include any of the following characters: * ? : \\ / [ ]`);if(/(^')|('$)/.test(e))throw new Error("The first or last character of worksheet name cannot be a single quotation mark: "+e);if(e&&e.length>31&&(console.warn(`Worksheet name ${e} exceeds 31 chars. This will be truncated`),e=e.substring(0,31)),this._workbook._worksheets.find(t=>t&&t.name.toLowerCase()===e.toLowerCase()))throw new Error("Worksheet name already exists: "+e);this._name=e}}get workbook(){return this._workbook}destroy(){this._workbook.removeWorksheetEx(this)}get dimensions(){const e=new s;return this._rows.forEach(t=>{if(t){const r=t.dimensions;r&&e.expand(t.number,r.min,t.number,r.max)}}),e}get columns(){return this._columns}set columns(e){this._headerRowCount=e.reduce((e,t)=>{const r=(t.header?1:t.headers&&t.headers.length)||0;return Math.max(e,r)},0);let t=1;const r=this._columns=[];e.forEach(e=>{const n=new a(this,t++,!1);r.push(n),n.defn=e})}getColumnKey(e){return this._keys[e]}setColumnKey(e,t){this._keys[e]=t}deleteColumnKey(e){delete this._keys[e]}eachColumnKey(e){n.each(this._keys,e)}getColumn(e){if("string"==typeof e){const t=this._keys[e];if(t)return t;e=i.l2n(e)}if(this._columns||(this._columns=[]),e>this._columns.length){let t=this._columns.length+1;for(;t<=e;)this._columns.push(new a(this,t++))}return this._columns[e-1]}spliceColumns(e,t){const r=this._rows.length;for(var n=arguments.length,i=new Array(n>2?n-2:0),s=2;s0)for(let n=0;n{r.push(e[n]||null)});const s=this.getRow(n+1);s.splice.apply(s,r)}else this._rows.forEach(r=>{r&&r.splice(e,t)});const o=i.length-t,a=e+t,l=this._columns.length;if(o<0)for(let t=e+i.length;t<=l;t++)this.getColumn(t).defn=this.getColumn(t-o).defn;else if(o>0)for(let e=l;e>=a;e--)this.getColumn(e+o).defn=this.getColumn(e).defn;for(let t=e;t{e=Math.max(e,t.cellCount)}),e}get actualColumnCount(){const e=[];let t=0;return this.eachRow(r=>{r.eachCell(r=>{let{col:n}=r;e[n]||(e[n]=!0,t++)})}),t}_commitRow(){}get _lastRowNumber(){const e=this._rows;let t=e.length;for(;t>0&&void 0===e[t-1];)t--;return t}get _nextRow(){return this._lastRowNumber+1}get lastRow(){if(this._rows.length)return this._rows[this._rows.length-1]}findRow(e){return this._rows[e-1]}findRows(e,t){return this._rows.slice(e-1,e-1+t)}get rowCount(){return this._lastRowNumber}get actualRowCount(){let e=0;return this.eachRow(()=>{e++}),e}getRow(e){let t=this._rows[e-1];return t||(t=this._rows[e-1]=new o(this,e)),t}getRows(e,t){if(t<1)return;const r=[];for(let n=e;n1&&void 0!==arguments[1]?arguments[1]:"n";const r=this._nextRow,n=this.getRow(r);return n.values=e,this._setStyleOption(r,"i"===t[0]?t:"n"),n}addRows(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"n";const r=[];return e.forEach(e=>{r.push(this.addRow(e,t))}),r}insertRow(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"n";return this.spliceRows(e,0,t),this._setStyleOption(e,r),this.getRow(e)}insertRows(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"n";if(this.spliceRows(e,0,...t),"n"!==r)for(let n=0;n1&&void 0!==arguments[1]?arguments[1]:"n";"o"===t[0]&&void 0!==this.findRow(e+1)?this._copyStyle(e+1,e,"+"===t[1]):"i"===t[0]&&void 0!==this.findRow(e-1)&&this._copyStyle(e-1,e,"+"===t[1])}_copyStyle(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=this.getRow(e),i=this.getRow(t);i.style=d(n.style),n.eachCell({includeEmpty:r},(e,t)=>{i.getCell(t).style=d(e.style)}),i.height=n.height}duplicateRow(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=this._rows[e-1],i=new Array(t).fill(n.values);this.spliceRows(e+1,r?0:t,...i);for(let r=0;r{t.getCell(r).style=e.style})}}spliceRows(e,t){const r=e+t;for(var n=arguments.length,i=new Array(n>2?n-2:0),s=2;s{e.getCell(r).style=t.style}),this._rows[c-1]=void 0}else this._rows[c+a-1]=void 0;else if(a>0)for(c=l;c>=r;c--)if(u=this._rows[c-1],u){const e=this.getRow(c+a);e.values=u.values,e.style=u.style,e.height=u.height,u.eachCell({includeEmpty:!0},(t,r)=>{if(e.getCell(r).style=t.style,"MergeValue"===t._value.constructor.name){const e=this.getRow(t._row._number+o).getCell(r),n=t._value._master,i=this.getRow(n._row._number+o).getCell(n._column._number);e.merge(i)}})}else this._rows[c+a-1]=void 0;for(c=0;c{e&&e.hasValues&&t(e,e.number)})}getSheetValues(){const e=[];return this._rows.forEach(t=>{t&&(e[t.number]=t.values)}),e}findCell(e,t){const r=i.getAddress(e,t),n=this._rows[r.row-1];return n?n.findCell(r.col):void 0}getCell(e,t){const r=i.getAddress(e,t);return this.getRow(r.row).getCellEx(r)}mergeCells(){for(var e=arguments.length,t=new Array(e),r=0;r{if(t.intersects(e))throw new Error("Cannot merge already merged cells")});const r=this.getCell(e.top,e.left);for(let n=e.top;n<=e.bottom;n++)for(let i=e.left;i<=e.right;i++)(n>e.top||i>e.left)&&this.getCell(n,i).merge(r,t);this._merges[r.address]=e}_unMergeMaster(e){const t=this._merges[e.address];if(t){for(let e=t.top;e<=t.bottom;e++)for(let r=t.left;r<=t.right;r++)this.getCell(e,r).unmerge();delete this._merges[e.address]}}get hasMerges(){return n.some(this._merges,Boolean)}unMergeCells(){for(var e=arguments.length,t=new Array(e),r=0;r3&&void 0!==arguments[3]?arguments[3]:"shared";const s=i.decode(e),{top:o,left:a,bottom:l,right:c}=s,u=c-a+1,h=i.encodeAddress(o,a),f="shared"===n;let d;d="function"==typeof r?r:Array.isArray(r)?Array.isArray(r[0])?(e,t)=>r[e-o][t-a]:(e,t)=>r[(e-o)*u+(t-a)]:()=>{};let p=!0;for(let r=o;r<=l;r++)for(let i=a;i<=c;i++)p?(this.getCell(r,i).value={shareType:n,formula:t,ref:e,result:d(r,i)},p=!1):this.getCell(r,i).value=f?{sharedFormula:h,result:d(r,i)}:d(r,i)}addImage(e,t){const r={type:"image",imageId:e,range:t};this._media.push(new c(this,r))}getImages(){return this._media.filter(e=>"image"===e.type)}addBackgroundImage(e){const t={type:"background",imageId:e};this._media.push(new c(this,t))}getBackgroundImageId(){const e=this._media.find(e=>"background"===e.type);return e&&e.imageId}protect(e,t){return new Promise(r=>{this.sheetProtection={sheet:!0},t&&"spinCount"in t&&(t.spinCount=Number.isFinite(t.spinCount)?Math.round(Math.max(0,t.spinCount)):1e5),e&&(this.sheetProtection.algorithmName="SHA-512",this.sheetProtection.saltValue=f.randomBytes(16).toString("base64"),this.sheetProtection.spinCount=t&&"spinCount"in t?t.spinCount:1e5,this.sheetProtection.hashValue=f.convertPasswordToHash(e,"SHA512",this.sheetProtection.saltValue,this.sheetProtection.spinCount)),t&&(this.sheetProtection=Object.assign(this.sheetProtection,t),!e&&"spinCount"in t&&delete this.sheetProtection.spinCount),r()})}unprotect(){this.sheetProtection=null}addTable(e){const t=new u(this,e);return this.tables[e.name]=t,t}getTable(e){return this.tables[e]}removeTable(e){delete this.tables[e]}getTables(){return Object.values(this.tables)}addConditionalFormatting(e){this.conditionalFormattings.push(e)}removeConditionalFormatting(e){"number"==typeof e?this.conditionalFormattings.splice(e,1):this.conditionalFormattings=e instanceof Function?this.conditionalFormattings.filter(e):[]}get tabColor(){return console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor}set tabColor(e){console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor=e}get model(){const e={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map(e=>e.model),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map(e=>e.model),conditionalFormattings:this.conditionalFormattings};e.cols=a.toModel(this.columns);const t=e.rows=[],r=e.dimensions=new s;return this._rows.forEach(e=>{const n=e&&e.model;n&&(r.expand(n.number,n.min,n.number,n.max),t.push(n))}),e.merges=[],n.each(this._merges,t=>{e.merges.push(t.range)}),e}_parseRows(e){this._rows=[],e.rows.forEach(e=>{const t=new o(this,e.number);this._rows[t.number-1]=t,t.model=e})}_parseMergeCells(e){n.each(e.mergeCells,e=>{this.mergeCellsWithoutStyle(e)})}set model(e){this.name=e.name,this._columns=a.fromModel(this,e.cols),this._parseRows(e),this._parseMergeCells(e),this.dataValidations=new h(e.dataValidations),this.properties=e.properties,this.pageSetup=e.pageSetup,this.headerFooter=e.headerFooter,this.views=e.views,this.autoFilter=e.autoFilter,this._media=e.media.map(e=>new c(this,e)),this.sheetProtection=e.sheetProtection,this.tables=e.tables.reduce((e,t)=>{const r=new u;return r.model=t,e[t.name]=r,e},{}),this.conditionalFormattings=e.conditionalFormattings}}},{"../utils/col-cache":19,"../utils/copy-style":20,"../utils/encryptor":21,"../utils/under-dash":26,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(e,t,r){"use strict";e("core-js/modules/es.promise"),e("core-js/modules/es.promise.finally"),e("core-js/modules/es.object.assign"),e("core-js/modules/es.object.keys"),e("core-js/modules/es.object.values"),e("core-js/modules/es.symbol"),e("core-js/modules/es.symbol.async-iterator"),e("core-js/modules/es.array.iterator"),e("core-js/modules/es.array.includes"),e("core-js/modules/es.array.find-index"),e("core-js/modules/es.array.find"),e("core-js/modules/es.string.from-code-point"),e("core-js/modules/es.string.includes"),e("core-js/modules/es.number.is-nan"),e("regenerator-runtime/runtime");const n={Workbook:e("./doc/workbook")},i=e("./doc/enums");Object.keys(i).forEach(e=>{n[e]=i[e]}),t.exports=n},{"./doc/enums":7,"./doc/workbook":13,"core-js/modules/es.array.find":359,"core-js/modules/es.array.find-index":358,"core-js/modules/es.array.includes":360,"core-js/modules/es.array.iterator":361,"core-js/modules/es.number.is-nan":363,"core-js/modules/es.object.assign":364,"core-js/modules/es.object.keys":366,"core-js/modules/es.object.values":367,"core-js/modules/es.promise":372,"core-js/modules/es.promise.finally":371,"core-js/modules/es.string.from-code-point":376,"core-js/modules/es.string.includes":377,"core-js/modules/es.symbol":381,"core-js/modules/es.symbol.async-iterator":378,"regenerator-runtime/runtime":492}],16:[function(e,t,r){"use strict";const n="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8");r.bufferToString=function(e){return"string"==typeof e?e:n?n.decode(e):e.toString()}},{}],17:[function(e,t,r){"use strict";const n="undefined"==typeof TextEncoder?null:new TextEncoder("utf-8"),{Buffer:i}=e("buffer");r.stringToBuffer=function(e){return"string"!=typeof e?e:n?i.from(n.encode(e).buffer):i.from(e)}},{buffer:220}],18:[function(e,t,r){"use strict";const n=e("./under-dash"),i=e("./col-cache");t.exports=class{constructor(e){this.template=e,this.sheets={}}addCell(e){this.addCellEx(i.decodeEx(e))}getCell(e){return this.findCellEx(i.decodeEx(e),!0)}findCell(e){return this.findCellEx(i.decodeEx(e),!1)}findCellAt(e,t,r){const n=this.sheets[e],i=n&&n[t];return i&&i[r]}addCellEx(e){if(e.top)for(let t=e.top;t<=e.bottom;t++)for(let r=e.left;r<=e.right;r++)this.getCellAt(e.sheetName,t,r);else this.findCellEx(e,!0)}getCellEx(e){return this.findCellEx(e,!0)}findCellEx(e,t){const r=this.findSheet(e,t),n=this.findSheetRow(r,e,t);return this.findRowCell(n,e,t)}getCellAt(e,t,r){const n=this.sheets[e]||(this.sheets[e]=[]),s=n[t]||(n[t]=[]);return s[r]||(s[r]={sheetName:e,address:i.n2l(r)+t,row:t,col:r})}removeCellEx(e){const t=this.findSheet(e);if(!t)return;const r=this.findSheetRow(t,e);r&&delete r[e.col]}forEachInSheet(e,t){const r=this.sheets[e];r&&r.forEach((e,r)=>{e&&e.forEach((e,n)=>{e&&t(e,r,n)})})}forEach(e){n.each(this.sheets,(t,r)=>{this.forEachInSheet(r,e)})}map(e){const t=[];return this.forEach(r=>{t.push(e(r))}),t}findSheet(e,t){const r=e.sheetName;return this.sheets[r]?this.sheets[r]:t?this.sheets[r]=[]:void 0}findSheetRow(e,t,r){const{row:n}=t;return e&&e[n]?e[n]:r?e[n]=[]:void 0}findRowCell(e,t,r){const{col:n}=t;return e&&e[n]?e[n]:r?e[n]=this.template?Object.assign(t,JSON.parse(JSON.stringify(this.template))):t:void 0}spliceRows(e,t,r,n){const i=this.sheets[e];if(i){const e=[];for(let t=0;t{n.splice(t,r,...e)})}}}},{"./col-cache":19,"./under-dash":26}],19:[function(e,t,r){"use strict";const n=/^[A-Z]+\d+$/,i={_dictionary:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],_l2nFill:0,_l2n:{},_n2l:[],_level:e=>e<=26?1:e<=676?2:3,_fill(e){let t,r,n,i,s,o=1;if(e>=4)throw new Error("Out of bounds. Excel supports columns from 1 to 16384");if(this._l2nFill<1&&e>=1){for(;o<=26;)t=this._dictionary[o-1],this._n2l[o]=t,this._l2n[t]=o,o++;this._l2nFill=1}if(this._l2nFill<2&&e>=2){for(o=27;o<=702;)r=o-27,n=r%26,i=Math.floor(r/26),t=this._dictionary[i]+this._dictionary[n],this._n2l[o]=t,this._l2n[t]=o,o++;this._l2nFill=2}if(this._l2nFill<3&&e>=3){for(o=703;o<=16384;)r=o-703,n=r%26,i=Math.floor(r/26)%26,s=Math.floor(r/676),t=this._dictionary[s]+this._dictionary[i]+this._dictionary[n],this._n2l[o]=t,this._l2n[t]=o,o++;this._l2nFill=3}},l2n(e){if(this._l2n[e]||this._fill(e.length),!this._l2n[e])throw new Error("Out of bounds. Invalid column letter: "+e);return this._l2n[e]},n2l(e){if(e<1||e>16384)throw new Error(e+" is out of bounds. Excel supports columns from 1 to 16384");return this._n2l[e]||this._fill(this._level(e)),this._n2l[e]},_hash:{},validateAddress(e){if(!n.test(e))throw new Error("Invalid Address: "+e);return!0},decodeAddress(e){const t=e.length<5&&this._hash[e];if(t)return t;let r=!1,n="",i=0,s=!1,o="",a=0;for(let t,l=0;l=65&&t<=90)r=!0,n+=e[l],i=26*i+t-64;else if(t>=48&&t<=57)s=!0,o+=e[l],a=10*a+t-48;else if(s&&r&&36!==t)break;if(r){if(i>16384)throw new Error("Out of bounds. Invalid column letter: "+n)}else i=void 0;s||(a=void 0);const l={address:e=n+o,col:i,row:a,$col$row:`$${n}$${o}`};return i<=100&&a<=100&&(this._hash[e]=l,this._hash[l.$col$row]=l),l},getAddress(e,t){if(t){const r=this.n2l(t)+e;return this.decodeAddress(r)}return this.decodeAddress(e)},decode(e){const t=e.split(":");if(2===t.length){const e=this.decodeAddress(t[0]),r=this.decodeAddress(t[1]),n={top:Math.min(e.row,r.row),left:Math.min(e.col,r.col),bottom:Math.max(e.row,r.row),right:Math.max(e.col,r.col)};return n.tl=this.n2l(n.left)+n.top,n.br=this.n2l(n.right)+n.bottom,n.dimensions=`${n.tl}:${n.br}`,n}return this.decodeAddress(e)},decodeEx(e){const t=e.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),r=t[1]||t[2],n=t[3],i=n.split(":");if(i.length>1){let e=this.decodeAddress(i[0]),t=this.decodeAddress(i[1]);const n=Math.min(e.row,t.row),s=Math.min(e.col,t.col),o=Math.max(e.row,t.row),a=Math.max(e.col,t.col);return e=this.n2l(s)+n,t=this.n2l(a)+o,{top:n,left:s,bottom:o,right:a,sheetName:r,tl:{address:e,col:s,row:n,$col$row:`$${this.n2l(s)}$${n}`,sheetName:r},br:{address:t,col:a,row:o,$col$row:`$${this.n2l(a)}$${o}`,sheetName:r},dimensions:`${e}:${t}`}}if(n.startsWith("#"))return r?{sheetName:r,error:n}:{error:n};const s=this.decodeAddress(n);return r?{sheetName:r,...s}:s},encodeAddress:(e,t)=>i.n2l(t)+e,encode(){switch(arguments.length){case 2:return i.encodeAddress(arguments[0],arguments[1]);case 4:return`${i.encodeAddress(arguments[0],arguments[1])}:${i.encodeAddress(arguments[2],arguments[3])}`;default:throw new Error("Can only encode with 2 or 4 arguments")}},inRange(e,t){const[r,n,,i,s]=e,[o,a]=t;return o>=r&&o<=i&&a>=n&&a<=s}};t.exports=i},{}],20:[function(e,t,r){"use strict";const n=(e,t)=>({...e,...t.reduce((t,r)=>(e[r]&&(t[r]={...e[r]}),t),{})}),i=function(e,t,r){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];e[r]&&(t[r]=n(e[r],i))};r.copyStyle=e=>{if(!e)return e;if(t=e,0===Object.keys(t).length)return{};var t;const r={...e};return i(e,r,"font",["color"]),i(e,r,"alignment"),i(e,r,"protection"),e.border&&(i(e,r,"border"),i(e.border,r.border,"top",["color"]),i(e.border,r.border,"left",["color"]),i(e.border,r.border,"bottom",["color"]),i(e.border,r.border,"right",["color"]),i(e.border,r.border,"diagonal",["color"])),e.fill&&(i(e,r,"fill",["fgColor","bgColor","center"]),e.fill.stops&&(r.fill.stops=e.fill.stops.map(e=>n(e,["color"])))),r}},{}],21:[function(e,t,r){(function(r){(function(){"use strict";const n=e("crypto"),i={hash(e){const t=n.createHash(e);for(var i=arguments.length,s=new Array(i>1?i-1:0),o=1;on.randomBytes(e)};t.exports=i}).call(this)}).call(this,e("buffer").Buffer)},{buffer:220,crypto:390}],22:[function(e,t,r){"use strict";const{SaxesParser:n}=e("saxes"),{PassThrough:i}=e("readable-stream"),{bufferToString:s}=e("./browser-buffer-decode");t.exports=async function*(e){e.pipe&&!e[Symbol.asyncIterator]&&(e=e.pipe(new i));const t=new n;let r;t.on("error",e=>{r=e});let o=[];t.on("opentag",e=>o.push({eventType:"opentag",value:e})),t.on("text",e=>o.push({eventType:"text",value:e})),t.on("closetag",e=>o.push({eventType:"closetag",value:e}));for await(const n of e){if(t.write(s(n)),r)throw r;yield o,o=[]}}},{"./browser-buffer-decode":16,"readable-stream":491,saxes:496}],23:[function(e,t,r){"use strict";const n=e("./col-cache"),i=/(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi,s=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;t.exports={slideFormula:function(e,t,r){const o=n.decode(t),a=n.decode(r);return e.replace(i,(e,t,r,i,l)=>{if(l)return e;const c=s.exec(i);if(c){const r=c[1],i=c[2].toUpperCase(),s=c[3],l=c[4];if(i.length>3||3===i.length&&i>"XFD")return e;let u=n.l2n(i),h=parseInt(l,10);r||(u+=a.col-o.col),s||(h+=a.row-o.row);return(t||"")+(r||"")+n.n2l(u)+(s||"")+h}return e})}}},{"./col-cache":19}],24:[function(e,t,r){(function(r,n){(function(){"use strict";const i=e("readable-stream"),s=e("./utils"),o=e("./string-buf");class a{constructor(e,t){this._data=e,this._encoding=t}get length(){return this.toBuffer().length}copy(e,t,r,n){return this.toBuffer().copy(e,t,r,n)}toBuffer(){return this._buffer||(this._buffer=n.from(this._data,this._encoding)),this._buffer}}class l{constructor(e){this._data=e}get length(){return this._data.length}copy(e,t,r,n){return this._data._buf.copy(e,t,r,n)}toBuffer(){return this._data.toBuffer()}}class c{constructor(e){this._data=e}get length(){return this._data.length}copy(e,t,r,n){this._data.copy(e,t,r,n)}toBuffer(){return this._data}}class u{constructor(e){this.size=e,this.buffer=n.alloc(e),this.iRead=0,this.iWrite=0}toBuffer(){if(0===this.iRead&&this.iWrite===this.size)return this.buffer;const e=n.alloc(this.iWrite-this.iRead);return this.buffer.copy(e,0,this.iRead,this.iWrite),e}get length(){return this.iWrite-this.iRead}get eod(){return this.iRead===this.iWrite}get full(){return this.iWrite===this.size}read(e){let t;return 0===e?null:void 0===e||e>=this.length?(t=this.toBuffer(),this.iRead=this.iWrite,t):(t=n.alloc(e),this.buffer.copy(t,0,this.iRead,e),this.iRead+=e,t)}write(e,t,r){const n=Math.min(r,this.size-this.iWrite);return e.copy(this.buffer,this.iWrite,t,t+n),this.iWrite+=n,n}}const h=function(e){e=e||{},this.bufSize=e.bufSize||1048576,this.buffers=[],this.batch=e.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};s.inherits(h,i.Duplex,{toBuffer(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return n.concat(this.buffers.map(e=>e.toBuffer()))}},_getWritableBuffer(){if(this.buffers.length){const e=this.buffers[this.buffers.length-1];if(!e.full)return e}const e=new u(this.bufSize);return this.buffers.push(e),e},async _pipe(e){await Promise.all(this.pipes.map((function(t){return new Promise(r=>{t.write(e.toBuffer(),()=>{r()})})})))},_writeToBuffers(e){let t=0;const r=e.length;for(;t1;)this._pipe(this.buffers.shift());else this.corked?(this._writeToBuffers(u),r.nextTick(i)):(await this._pipe(u),i());else this.paused||this.emit("data",u.toBuffer()),this._writeToBuffers(u),this.emit("readable");return!0},cork(){this.corked=!0},_flush(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork(){this.corked=!1,this._flush()},end(e,t,r){const n=e=>{e?r(e):(this._flush(),this.pipes.forEach(e=>{e.end()}),this.emit("finish"))};e?this.write(e,t,n):n()},read(e){let t;if(e){for(t=[];e&&this.buffers.length&&!this.buffers[0].eod;){const r=this.buffers[0],n=r.read(e);e-=n.length,t.push(n),r.eod&&r.full&&this.buffers.shift()}return n.concat(t)}return t=this.buffers.map(e=>e.toBuffer()).filter(Boolean),this.buffers=[],n.concat(t)},setEncoding(e){this.encoding=e},pause(){this.paused=!0},resume(){this.paused=!1},isPaused(){return!!this.paused},pipe(e){this.pipes.push(e),!this.paused&&this.buffers.length&&this.end()},unpipe(e){this.pipes=this.pipes.filter(t=>t!==e)},unshift(){throw new Error("Not Implemented")},wrap(){throw new Error("Not Implemented")}}),t.exports=h}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"./string-buf":25,"./utils":27,_process:467,buffer:220,"readable-stream":491}],25:[function(e,t,r){(function(e){(function(){"use strict";t.exports=class{constructor(t){this._buf=e.alloc(t&&t.size||16384),this._encoding=t&&t.encoding||"utf8",this._inPos=0,this._buffer=void 0}get length(){return this._inPos}get capacity(){return this._buf.length}get buffer(){return this._buf}toBuffer(){return this._buffer||(this._buffer=e.alloc(this.length),this._buf.copy(this._buffer,0,0,this.length)),this._buffer}reset(e){e=e||0,this._buffer=void 0,this._inPos=e}_grow(t){let r=2*this._buf.length;for(;r=this._buf.length-4;)this._grow(this._inPos+e.length),t=this._inPos+this._buf.write(e,this._inPos,this._encoding);this._inPos=t}addStringBuf(e){e.length&&(this._buffer=void 0,this.length+e.length>this.capacity&&this._grow(this.length+e.length),e._buf.copy(this._buf,this._inPos,0,e.length),this._inPos+=e.length)}}}).call(this)}).call(this,e("buffer").Buffer)},{buffer:220}],26:[function(e,t,r){"use strict";const{toString:n}=Object.prototype,i=/["&<>]/,s={each:function(e,t){e&&(Array.isArray(e)?e.forEach(t):Object.keys(e).forEach(r=>{t(e[r],r)}))},some:function(e,t){return!!e&&(Array.isArray(e)?e.some(t):Object.keys(e).some(r=>t(e[r],r)))},every:function(e,t){return!e||(Array.isArray(e)?e.every(t):Object.keys(e).every(r=>t(e[r],r)))},map:function(e,t){return e?Array.isArray(e)?e.map(t):Object.keys(e).map(r=>t(e[r],r)):[]},keyBy:(e,t)=>e.reduce((e,r)=>(e[r[t]]=r,e),{}),isEqual:function(e,t){const r=typeof e,n=typeof t,i=Array.isArray(e),o=Array.isArray(t);let a;if(r!==n)return!1;switch(typeof e){case"object":if(i||o)return!(!i||!o)&&(e.length===t.length&&e.every((e,r)=>{const n=t[r];return s.isEqual(e,n)}));if(null===e||null===t)return e===t;if(a=Object.keys(e),Object.keys(t).length!==a.length)return!1;for(const e of a)if(!t.hasOwnProperty(e))return!1;return s.every(e,(e,r)=>{const n=t[r];return s.isEqual(e,n)});default:return e===t}},escapeHtml(e){const t=i.exec(e);if(!t)return e;let r="",n="",s=0,o=t.index;for(;o":n=">";break;default:continue}s!==o&&(r+=e.substring(s,o)),s=o+1,r+=n}return s!==o?r+e.substring(s,o):r},strcmp:(e,t)=>et?1:0,isUndefined:e=>"[object Undefined]"===n.call(e),isObject:e=>"[object Object]"===n.call(e),deepMerge(){const e=arguments[0]||{},{length:t}=arguments;let r,n,i;function o(t,o){r=e[o],i=Array.isArray(t),s.isObject(t)||i?(i?(i=!1,n=r&&Array.isArray(r)?r:[]):n=r&&s.isObject(r)?r:{},e[o]=s.deepMerge(n,t)):s.isUndefined(t)||(e[o]=t)}for(let e=0;e&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/,o={nop(){},promiseImmediate:e=>new Promise(t=>{r.setImmediate?n(()=>{t(e)}):setTimeout(()=>{t(e)},1)}),inherits:function(e,t,r,n){e.super_=t,n||(n=r,r=null),r&&Object.keys(r).forEach(t=>{Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))});const i={constructor:{value:e,enumerable:!1,writable:!1,configurable:!0}};n&&Object.keys(n).forEach(e=>{i[e]=Object.getOwnPropertyDescriptor(n,e)}),e.prototype=Object.create(t.prototype,i)},dateToExcel:(e,t)=>25569+e.getTime()/864e5-(t?1462:0),excelToDate(e,t){const r=Math.round(24*(e-25569+(t?1462:0))*3600*1e3);return new Date(r)},parsePath(e){const t=e.lastIndexOf("/");return{path:e.substring(0,t),name:e.substring(t+1)}},getRelsPath(e){const t=o.parsePath(e);return`${t.path}/_rels/${t.name}.rels`},xmlEncode(e){const t=s.exec(e);if(!t)return e;let r="",n="",i=0,o=t.index;for(;o=11&&13!==t)){n="";break}continue}i!==o&&(r+=e.substring(i,o)),i=o+1,n&&(r+=n)}return i!==o?r+e.substring(i,o):r},xmlDecode:e=>e.replace(/&([a-z]*);/g,e=>{switch(e){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case""":return'"';default:return e}}),validInt(e){const t=parseInt(e,10);return Number.isNaN(t)?0:t},isDateFmt(e){if(!e)return!1;return null!==(e=(e=e.replace(/\[[^\]]*]/g,"")).replace(/"[^"]*"/g,"")).match(/[ymdhMsb]+/)},fs:{exists:e=>new Promise(t=>{i.access(e,i.constants.F_OK,e=>{t(!e)})})},toIsoDateString:e=>e.toIsoString().subsstr(0,10),parseBoolean:e=>!0===e||"true"===e||1===e||"1"===e};t.exports=o}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("timers").setImmediate)},{fs:216,timers:523}],28:[function(e,t,r){"use strict";const n=e("./under-dash"),i=e("./utils");function s(e,t,r){e.push(` ${t}="${i.xmlEncode(r.toString())}"`)}function o(e,t){if(t){const r=[];n.each(t,(e,t)=>{void 0!==e&&s(r,t,e)}),e.push(r.join(""))}}class a{constructor(){this._xml=[],this._stack=[],this._rollbacks=[]}get tos(){return this._stack.length?this._stack[this._stack.length-1]:void 0}get cursor(){return this._xml.length}openXml(e){const t=this._xml;t.push("\n")}openNode(e,t){const r=this.tos,n=this._xml;r&&this.open&&n.push(">"),this._stack.push(e),n.push("<"),n.push(e),o(n,t),this.leaf=!0,this.open=!0}addAttribute(e,t){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");void 0!==t&&s(this._xml,e,t)}addAttributes(e){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");o(this._xml,e)}writeText(e){const t=this._xml;this.open&&(t.push(">"),this.open=!1),this.leaf=!1,t.push(i.xmlEncode(e.toString()))}writeXml(e){this.open&&(this._xml.push(">"),this.open=!1),this.leaf=!1,this._xml.push(e)}closeNode(){const e=this._stack.pop(),t=this._xml;this.leaf?t.push("/>"):(t.push("")),this.open=!1,this.leaf=!1}leafNode(e,t,r){this.openNode(e,t),void 0!==r&&this.writeText(r),this.closeNode()}closeAll(){for(;this._stack.length;)this.closeNode()}addRollback(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}commit(){this._rollbacks.pop()}rollback(){const e=this._rollbacks.pop();this._xml.length>e.xml&&this._xml.splice(e.xml,this._xml.length-e.xml),this._stack.length>e.stack&&this._stack.splice(e.stack,this._stack.length-e.stack),this.leaf=e.leaf,this.open=e.open}get xml(){return this.closeAll(),this._xml.join("")}}a.StdDocAttributes={version:"1.0",encoding:"UTF-8",standalone:"yes"},t.exports=a},{"./under-dash":26,"./utils":27}],29:[function(e,t,r){(function(r){(function(){"use strict";const n=e("events"),i=e("jszip"),s=e("./stream-buf"),{stringToBuffer:o}=e("./browser-buffer-encode");class a extends n.EventEmitter{constructor(e){super(),this.options=Object.assign({type:"nodebuffer",compression:"DEFLATE"},e),this.zip=new i,this.stream=new s}append(e,t){t.hasOwnProperty("base64")&&t.base64?this.zip.file(t.name,e,{base64:!0}):(r.browser&&"string"==typeof e&&(e=o(e)),this.zip.file(t.name,e))}async finalize(){const e=await this.zip.generateAsync(this.options);this.stream.end(e),this.emit("finish")}read(e){return this.stream.read(e)}setEncoding(e){return this.stream.setEncoding(e)}pause(){return this.stream.pause()}resume(){return this.stream.resume()}isPaused(){return this.stream.isPaused()}pipe(e,t){return this.stream.pipe(e,t)}unpipe(e){return this.stream.unpipe(e)}unshift(e){return this.stream.unshift(e)}wrap(e){return this.stream.wrap(e)}}t.exports={ZipWriter:a}}).call(this)}).call(this,e("_process"))},{"./browser-buffer-encode":17,"./stream-buf":24,_process:467,events:422,jszip:441}],30:[function(e,t,r){"use strict";t.exports={0:{f:"General"},1:{f:"0"},2:{f:"0.00"},3:{f:"#,##0"},4:{f:"#,##0.00"},9:{f:"0%"},10:{f:"0.00%"},11:{f:"0.00E+00"},12:{f:"# ?/?"},13:{f:"# ??/??"},14:{f:"mm-dd-yy"},15:{f:"d-mmm-yy"},16:{f:"d-mmm"},17:{f:"mmm-yy"},18:{f:"h:mm AM/PM"},19:{f:"h:mm:ss AM/PM"},20:{f:"h:mm"},21:{f:"h:mm:ss"},22:{f:'m/d/yy "h":mm'},27:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"\u5e74" mm"\u6708" dd"\u65e5"'},28:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},29:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},30:{"zh-tw":"m/d/yy ","zh-cn":"m-d-yy","ja-jp":"m/d/yy","ko-kr":"mm-dd-yy"},31:{"zh-tw":'yyyy"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'yyyy"\u5e74"m"\u6708"d"\u65e5"',"ja-jp":'yyyy"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":'yyyy"\ub144" mm"\uc6d4" dd"\uc77c"'},32:{"zh-tw":'hh"\u6642"mm"\u5206"',"zh-cn":'h"\u65f6"mm"\u5206"',"ja-jp":'h"\u6642"mm"\u5206"',"ko-kr":'h"\uc2dc" mm"\ubd84"'},33:{"zh-tw":'hh"\u6642"mm"\u5206"ss"\u79d2"',"zh-cn":'h"\u65f6"mm"\u5206"ss"\u79d2"',"ja-jp":'h"\u6642"mm"\u5206"ss"\u79d2"',"ko-kr":'h"\uc2dc" mm"\ubd84" ss"\ucd08"'},34:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"',"zh-cn":'\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"',"ja-jp":'yyyy"\u5e74"m"\u6708"',"ko-kr":"yyyy-mm-dd"},35:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"ss"\u79d2"',"zh-cn":'\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"ss"\u79d2"',"ja-jp":'m"\u6708"d"\u65e5"',"ko-kr":"yyyy-mm-dd"},36:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"\u5e74" mm"\u6708" dd"\u65e5"'},37:{f:"#,##0 ;(#,##0)"},38:{f:"#,##0 ;[Red](#,##0)"},39:{f:"#,##0.00 ;(#,##0.00)"},40:{f:"#,##0.00 ;[Red](#,##0.00)"},45:{f:"mm:ss"},46:{f:"[h]:mm:ss"},47:{f:"mmss.0"},48:{f:"##0.0E+0"},49:{f:"@"},50:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"\u5e74" mm"\u6708" dd"\u65e5"'},51:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},52:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"',"zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":'yyyy"\u5e74"m"\u6708"',"ko-kr":"yyyy-mm-dd"},53:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"ss"\u79d2"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'m"\u6708"d"\u65e5"',"ko-kr":"yyyy-mm-dd"},54:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},55:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"',"zh-cn":'\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"',"ja-jp":'yyyy"\u5e74"m"\u6708"',"ko-kr":"yyyy-mm-dd"},56:{"zh-tw":'\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"ss"\u79d2"',"zh-cn":'\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"ss"\u79d2"',"ja-jp":'m"\u6708"d"\u65e5"',"ko-kr":"yyyy-mm-dd"},57:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"\u5e74"m"\u6708"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"\u5e74" mm"\u6708" dd"\u65e5"'},58:{"zh-tw":'[$-404]e"\u5e74"m"\u6708"d"\u65e5"',"zh-cn":'m"\u6708"d"\u65e5"',"ja-jp":'[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"',"ko-kr":"mm-dd"},59:{"th-th":"t0"},60:{"th-th":"t0.00"},61:{"th-th":"t#,##0"},62:{"th-th":"t#,##0.00"},67:{"th-th":"t0%"},68:{"th-th":"t0.00%"},69:{"th-th":"t# ?/?"},70:{"th-th":"t# ??/??"},81:{"th-th":"d/m/bb"}}},{}],31:[function(e,t,r){"use strict";t.exports={OfficeDocument:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",Worksheet:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",CalcChain:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain",SharedStrings:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",Styles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",Theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",Hyperlink:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",Image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",CoreProperties:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",ExtenderProperties:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",Comments:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",VmlDrawing:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",Table:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table"}},{}],32:[function(e,t,r){"use strict";const n=e("../../utils/parse-sax"),i=e("../../utils/xml-stream");class s{prepare(){}render(){}parseOpen(e){}parseText(e){}parseClose(e){}reconcile(e,t){}reset(){this.model=null,this.map&&Object.values(this.map).forEach(e=>{e instanceof s?e.reset():e.xform&&e.xform.reset()})}mergeModel(e){this.model=Object.assign(this.model||{},e)}async parse(e){for await(const t of e)for(const{eventType:e,value:r}of t)if("opentag"===e)this.parseOpen(r);else if("text"===e)this.parseText(r);else if("closetag"===e&&!this.parseClose(r.name))return this.model;return this.model}async parseStream(e){return this.parse(n(e))}get xml(){return this.toXml(this.model)}toXml(e){const t=new i;return this.render(t,e),t.xml}static toAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e.toString()}static toStringAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return s.toAttribute(e,t,r)}static toStringValue(e,t){return void 0===e?t:e}static toBoolAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e?"1":"0"}static toBoolValue(e,t){return void 0===e?t:"1"===e}static toIntAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return s.toAttribute(e,t,r)}static toIntValue(e,t){return void 0===e?t:parseInt(e,10)}static toFloatAttribute(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return s.toAttribute(e,t,r)}static toFloatValue(e,t){return void 0===e?t:parseFloat(e)}}t.exports=s},{"../../utils/parse-sax":22,"../../utils/xml-stream":28}],33:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("../../../utils/col-cache");function s(e){try{return i.decodeEx(e),!0}catch(e){return!1}}function o(e){const t=[];let r=!1,n="";return e.split(",").forEach(e=>{if(!e)return;const i=(e.match(/'/g)||[]).length;if(!i)return void(r?n+=e+",":s(e)&&t.push(e));const o=i%2==0;!r&&o&&s(e)?t.push(e):r&&!o?(r=!1,s(n+e)&&t.push(n+e),n=""):(r=!0,n+=e+",")}),t}t.exports=class extends n{render(e,t){e.openNode("definedName",{name:t.name,localSheetId:t.localSheetId}),e.writeText(t.ranges.join(",")),e.closeNode()}parseOpen(e){switch(e.name){case"definedName":return this._parsedName=e.attributes.name,this._parsedLocalSheetId=e.attributes.localSheetId,this._parsedText=[],!0;default:return!1}}parseText(e){this._parsedText.push(e)}parseClose(){return this.model={name:this._parsedName,ranges:o(this._parsedText.join(""))},void 0!==this._parsedLocalSheetId&&(this.model.localSheetId=parseInt(this._parsedLocalSheetId,10)),!1}}},{"../../../utils/col-cache":19,"../base-xform":32}],34:[function(e,t,r){"use strict";const n=e("../../../utils/utils"),i=e("../base-xform");t.exports=class extends i{render(e,t){e.leafNode("sheet",{sheetId:t.id,name:t.name,state:t.state,"r:id":t.rId})}parseOpen(e){return"sheet"===e.name&&(this.model={name:n.xmlDecode(e.attributes.name),id:parseInt(e.attributes.sheetId,10),state:e.attributes.state,rId:e.attributes["r:id"]},!0)}parseText(){}parseClose(){return!1}}},{"../../../utils/utils":27,"../base-xform":32}],35:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{render(e,t){e.leafNode("calcPr",{calcId:171027,fullCalcOnLoad:t.fullCalcOnLoad?1:void 0})}parseOpen(e){return"calcPr"===e.name&&(this.model={},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],36:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{render(e,t){e.leafNode("workbookPr",{date1904:t.date1904?1:void 0,defaultThemeVersion:164011,filterPrivacy:1})}parseOpen(e){return"workbookPr"===e.name&&(this.model={date1904:"1"===e.attributes.date1904},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],37:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{render(e,t){const r={xWindow:t.x||0,yWindow:t.y||0,windowWidth:t.width||12e3,windowHeight:t.height||24e3,firstSheet:t.firstSheet,activeTab:t.activeTab};t.visibility&&"visible"!==t.visibility&&(r.visibility=t.visibility),e.leafNode("workbookView",r)}parseOpen(e){if("workbookView"===e.name){const t=this.model={},r=function(e,r,n){const i=void 0!==r?t[e]=r:n;void 0!==i&&(t[e]=i)},n=function(e,r,n){const i=void 0!==r?t[e]=parseInt(r,10):n;void 0!==i&&(t[e]=i)};return n("x",e.attributes.xWindow,0),n("y",e.attributes.yWindow,0),n("width",e.attributes.windowWidth,25e3),n("height",e.attributes.windowHeight,1e4),r("visibility",e.attributes.visibility,"visible"),n("activeTab",e.attributes.activeTab,void 0),n("firstSheet",e.attributes.firstSheet,void 0),!0}return!1}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],38:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../../../utils/col-cache"),s=e("../../../utils/xml-stream"),o=e("../base-xform"),a=e("../static-xform"),l=e("../list-xform"),c=e("./defined-name-xform"),u=e("./sheet-xform"),h=e("./workbook-view-xform"),f=e("./workbook-properties-xform"),d=e("./workbook-calc-properties-xform");class p extends o{constructor(){super(),this.map={fileVersion:p.STATIC_XFORMS.fileVersion,workbookPr:new f,bookViews:new l({tag:"bookViews",count:!1,childXform:new h}),sheets:new l({tag:"sheets",count:!1,childXform:new u}),definedNames:new l({tag:"definedNames",count:!1,childXform:new c}),calcPr:new d}}prepare(e){e.sheets=e.worksheets;const t=[];let r=0;e.sheets.forEach(e=>{if(e.pageSetup&&e.pageSetup.printArea&&e.pageSetup.printArea.split("&&").forEach(n=>{const i=n.split(":"),s={name:"_xlnm.Print_Area",ranges:[`'${e.name}'!$${i[0]}:$${i[1]}`],localSheetId:r};t.push(s)}),e.pageSetup&&(e.pageSetup.printTitlesRow||e.pageSetup.printTitlesColumn)){const n=[];if(e.pageSetup.printTitlesColumn){const t=e.pageSetup.printTitlesColumn.split(":");n.push(`'${e.name}'!$${t[0]}:$${t[1]}`)}if(e.pageSetup.printTitlesRow){const t=e.pageSetup.printTitlesRow.split(":");n.push(`'${e.name}'!$${t[0]}:$${t[1]}`)}const i={name:"_xlnm.Print_Titles",ranges:n,localSheetId:r};t.push(i)}r++}),t.length&&(e.definedNames=e.definedNames.concat(t)),(e.media||[]).forEach((e,t)=>{e.name=e.type+(t+1)})}render(e,t){e.openXml(s.StdDocAttributes),e.openNode("workbook",p.WORKBOOK_ATTRIBUTES),this.map.fileVersion.render(e),this.map.workbookPr.render(e,t.properties),this.map.bookViews.render(e,t.views),this.map.sheets.render(e,t.sheets),this.map.definedNames.render(e,t.definedNames),this.map.calcPr.render(e,t.calcProperties),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"workbook":return!0;default:return this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"workbook":return this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}},this.map.definedNames.model&&(this.model.definedNames=this.map.definedNames.model),!1;default:return!0}}reconcile(e){const t=(e.workbookRels||[]).reduce((e,t)=>(e[t.Id]=t,e),{}),r=[];let s,o=0;(e.sheets||[]).forEach(n=>{const i=t[n.rId];i&&(s=e.worksheetHash["xl/"+i.Target.replace(/^(\s|\/xl\/)+/,"")],s&&(s.name=n.name,s.id=n.id,s.state=n.state,r[o++]=s))});const a=[];n.each(e.definedNames,e=>{if("_xlnm.Print_Area"===e.name){if(s=r[e.localSheetId],s){s.pageSetup||(s.pageSetup={});const t=i.decodeEx(e.ranges[0]);s.pageSetup.printArea=s.pageSetup.printArea?`${s.pageSetup.printArea}&&${t.dimensions}`:t.dimensions}}else if("_xlnm.Print_Titles"===e.name){if(s=r[e.localSheetId],s){s.pageSetup||(s.pageSetup={});const t=e.ranges.join(","),r=/\$/g,n=/\$\d+:\$\d+/,i=t.match(n);if(i&&i.length){const e=i[0];s.pageSetup.printTitlesRow=e.replace(r,"")}const o=/\$[A-Z]+:\$[A-Z]+/,a=t.match(o);if(a&&a.length){const e=a[0];s.pageSetup.printTitlesColumn=e.replace(r,"")}}}else a.push(e)}),e.definedNames=a,e.media.forEach((e,t)=>{e.index=t})}}p.WORKBOOK_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x15","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},p.STATIC_XFORMS={fileVersion:new a({tag:"fileVersion",$:{appName:"xl",lastEdited:5,lowestEdited:5,rupBuild:9303}})},t.exports=p},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./defined-name-xform":33,"./sheet-xform":34,"./workbook-calc-properties-xform":35,"./workbook-properties-xform":36,"./workbook-view-xform":37}],39:[function(e,t,r){"use strict";const n=e("../strings/rich-text-xform"),i=e("../../../utils/utils"),s=e("../base-xform"),o=t.exports=function(e){this.model=e};i.inherits(o,s,{get tag(){return"r"},get richTextXform(){return this._richTextXform||(this._richTextXform=new n),this._richTextXform},render(e,t){t=t||this.model,e.openNode("comment",{ref:t.ref,authorId:0}),e.openNode("text"),t&&t.note&&t.note.texts&&t.note.texts.forEach(t=>{this.richTextXform.render(e,t)}),e.closeNode(),e.closeNode()},parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"comment":return this.model={type:"note",note:{texts:[]},...e.attributes},!0;case"r":return this.parser=this.richTextXform,this.parser.parseOpen(e),!0;default:return!1}},parseText(e){this.parser&&this.parser.parseText(e)},parseClose(e){switch(e){case"comment":return!1;case"r":return this.model.note.texts.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}})},{"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],40:[function(e,t,r){"use strict";const n=e("../../../utils/xml-stream"),i=e("../../../utils/utils"),s=e("../base-xform"),o=e("./comment-xform"),a=t.exports=function(){this.map={comment:new o}};i.inherits(a,s,{COMMENTS_ATTRIBUTES:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},{render(e,t){t=t||this.model,e.openXml(n.StdDocAttributes),e.openNode("comments",a.COMMENTS_ATTRIBUTES),e.openNode("authors"),e.leafNode("author",null,"Author"),e.closeNode(),e.openNode("commentList"),t.comments.forEach(t=>{this.map.comment.render(e,t)}),e.closeNode(),e.closeNode()},parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"commentList":return this.model={comments:[]},!0;case"comment":return this.parser=this.map.comment,this.parser.parseOpen(e),!0;default:return!1}},parseText(e){this.parser&&this.parser.parseText(e)},parseClose(e){switch(e){case"commentList":return!1;case"comment":return this.model.comments.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}})},{"../../../utils/utils":27,"../../../utils/xml-stream":28,"../base-xform":32,"./comment-xform":39}],41:[function(e,t,r){"use strict";const n=e("../../base-xform");t.exports=class extends n{constructor(e){super(),this._model=e}get tag(){return this._model&&this._model.tag}render(e,t,r){(t===r[2]||"x:SizeWithCells"===this.tag&&t===r[1])&&e.leafNode(this.tag)}parseOpen(e){switch(e.name){case this.tag:return this.model={},this.model[this.tag]=!0,!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../base-xform":32}],42:[function(e,t,r){"use strict";const n=e("../../base-xform");t.exports=class extends n{constructor(e){super(),this._model=e}get tag(){return this._model&&this._model.tag}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(e){switch(e.name){case this.tag:return this.text="",!0;default:return!1}}parseText(e){this.text=e}parseClose(){return!1}}},{"../../base-xform":32}],43:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"x:Anchor"}getAnchorRect(e){const t=Math.floor(e.left),r=Math.floor(68*(e.left-t)),n=Math.floor(e.top),i=Math.floor(18*(e.top-n)),s=Math.floor(e.right),o=Math.floor(68*(e.right-s)),a=Math.floor(e.bottom);return[t,r,n,i,s,o,a,Math.floor(18*(e.bottom-a))]}getDefaultRect(e){const t=e.col,r=Math.max(e.row-2,0);return[t,6,r,14,t+2,2,r+4,16]}render(e,t){const r=t.anchor?this.getAnchorRect(t.anchor):this.getDefaultRect(t.refAddress);e.leafNode("x:Anchor",null,r.join(", "))}parseOpen(e){switch(e.name){case this.tag:return this.text="",!0;default:return!1}}parseText(e){this.text=e}parseClose(){return!1}}},{"../base-xform":32}],44:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("./vml-anchor-xform"),s=e("./style/vml-protection-xform"),o=e("./style/vml-position-xform"),a=["twoCells","oneCells","absolute"];t.exports=class extends n{constructor(){super(),this.map={"x:Anchor":new i,"x:Locked":new s({tag:"x:Locked"}),"x:LockText":new s({tag:"x:LockText"}),"x:SizeWithCells":new o({tag:"x:SizeWithCells"}),"x:MoveWithCells":new o({tag:"x:MoveWithCells"})}}get tag(){return"x:ClientData"}render(e,t){const{protection:r,editAs:n}=t.note;e.openNode(this.tag,{ObjectType:"Note"}),this.map["x:MoveWithCells"].render(e,n,a),this.map["x:SizeWithCells"].render(e,n,a),this.map["x:Anchor"].render(e,t),this.map["x:Locked"].render(e,r.locked),e.leafNode("x:AutoFill",null,"False"),this.map["x:LockText"].render(e,r.lockText),e.leafNode("x:Row",null,t.refAddress.row-1),e.leafNode("x:Column",null,t.refAddress.col-1),e.closeNode()}parseOpen(e){switch(e.name){case this.tag:this.reset(),this.model={anchor:[],protection:{},editAs:""};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.normalizeModel(),!1;default:return!0}}normalizeModel(){const e=Object.assign({},this.map["x:MoveWithCells"].model,this.map["x:SizeWithCells"].model),t=Object.keys(e).length;this.model.editAs=a[t],this.model.anchor=this.map["x:Anchor"].text,this.model.protection.locked=this.map["x:Locked"].text,this.model.protection.lockText=this.map["x:LockText"].text}}},{"../base-xform":32,"./style/vml-position-xform":41,"./style/vml-protection-xform":42,"./vml-anchor-xform":43}],45:[function(e,t,r){"use strict";const n=e("../../../utils/xml-stream"),i=e("../base-xform"),s=e("./vml-shape-xform");class o extends i{constructor(){super(),this.map={"v:shape":new s}}get tag(){return"xml"}render(e,t){e.openXml(n.StdDocAttributes),e.openNode(this.tag,o.DRAWING_ATTRIBUTES),e.openNode("o:shapelayout",{"v:ext":"edit"}),e.leafNode("o:idmap",{"v:ext":"edit",data:1}),e.closeNode(),e.openNode("v:shapetype",{id:"_x0000_t202",coordsize:"21600,21600","o:spt":202,path:"m,l,21600r21600,l21600,xe"}),e.leafNode("v:stroke",{joinstyle:"miter"}),e.leafNode("v:path",{gradientshapeok:"t","o:connecttype":"rect"}),e.closeNode(),t.comments.forEach((t,r)=>{this.map["v:shape"].render(e,t,r)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={comments:[]};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.comments.push(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:return!0}}reconcile(e,t){e.anchors.forEach(e=>{e.br?this.map["xdr:twoCellAnchor"].reconcile(e,t):this.map["xdr:oneCellAnchor"].reconcile(e,t)})}}o.DRAWING_ATTRIBUTES={"xmlns:v":"urn:schemas-microsoft-com:vml","xmlns:o":"urn:schemas-microsoft-com:office:office","xmlns:x":"urn:schemas-microsoft-com:office:excel"},t.exports=o},{"../../../utils/xml-stream":28,"../base-xform":32,"./vml-shape-xform":46}],46:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("./vml-textbox-xform"),s=e("./vml-client-data-xform");class o extends n{constructor(){super(),this.map={"v:textbox":new i,"x:ClientData":new s}}get tag(){return"v:shape"}render(e,t,r){e.openNode("v:shape",o.V_SHAPE_ATTRIBUTES(t,r)),e.leafNode("v:fill",{color2:"infoBackground [80]"}),e.leafNode("v:shadow",{color:"none [81]",obscured:"t"}),e.leafNode("v:path",{"o:connecttype":"none"}),this.map["v:textbox"].render(e,t),this.map["x:ClientData"].render(e,t),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={margins:{insetmode:e.attributes["o:insetmode"]},anchor:"",editAs:"",protection:{}};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.margins.inset=this.map["v:textbox"].model&&this.map["v:textbox"].model.inset,this.model.protection=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.protection,this.model.anchor=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.anchor,this.model.editAs=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.editAs,!1;default:return!0}}}o.V_SHAPE_ATTRIBUTES=(e,t)=>({id:"_x0000_s"+(1025+t),type:"#_x0000_t202",style:"position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden",fillcolor:"infoBackground [80]",strokecolor:"none [81]","o:insetmode":e.note.margins&&e.note.margins.insetmode}),t.exports=o},{"../base-xform":32,"./vml-client-data-xform":44,"./vml-textbox-xform":47}],47:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"v:textbox"}conversionUnit(e,t,r){return`${parseFloat(e)*t.toFixed(2)}${r}`}reverseConversionUnit(e){return(e||"").split(",").map(e=>Number(parseFloat(this.conversionUnit(parseFloat(e),.1,"")).toFixed(2)))}render(e,t){const r={style:"mso-direction-alt:auto"};if(t&&t.note){let{inset:e}=t.note&&t.note.margins;Array.isArray(e)&&(e=e.map(e=>this.conversionUnit(e,10,"mm")).join(",")),e&&(r.inset=e)}e.openNode("v:textbox",r),e.leafNode("div",{style:"text-align:left"}),e.closeNode()}parseOpen(e){switch(e.name){case this.tag:return this.model={inset:this.reverseConversionUnit(e.attributes.inset)},!0;default:return!0}}parseText(){}parseClose(e){switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],48:[function(e,t,r){"use strict";const n=e("./base-xform");t.exports=class extends n{createNewModel(e){return{}}parseOpen(e){return this.parser=this.parser||this.map[e.name],this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag&&(this.model=this.createNewModel(e),!0)}parseText(e){this.parser&&this.parser.parseText(e)}onParserClose(e,t){this.model[e]=t.model}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.onParserClose(e,this.parser),this.parser=void 0),!0):e!==this.tag}}},{"./base-xform":32}],49:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{render(e,t){e.openNode("HeadingPairs"),e.openNode("vt:vector",{size:2,baseType:"variant"}),e.openNode("vt:variant"),e.leafNode("vt:lpstr",void 0,"Worksheets"),e.closeNode(),e.openNode("vt:variant"),e.leafNode("vt:i4",void 0,t.length),e.closeNode(),e.closeNode(),e.closeNode()}parseOpen(e){return"HeadingPairs"===e.name}parseText(){}parseClose(e){return"HeadingPairs"!==e}}},{"../base-xform":32}],50:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{render(e,t){e.openNode("TitlesOfParts"),e.openNode("vt:vector",{size:t.length,baseType:"lpstr"}),t.forEach(t=>{e.leafNode("vt:lpstr",void 0,t.name)}),e.closeNode(),e.closeNode()}parseOpen(e){return"TitlesOfParts"===e.name}parseText(){}parseClose(e){return"TitlesOfParts"!==e}}},{"../base-xform":32}],51:[function(e,t,r){"use strict";const n=e("../../../utils/xml-stream"),i=e("../base-xform"),s=e("../simple/string-xform"),o=e("./app-heading-pairs-xform"),a=e("./app-titles-of-parts-xform");class l extends i{constructor(){super(),this.map={Company:new s({tag:"Company"}),Manager:new s({tag:"Manager"}),HeadingPairs:new o,TitleOfParts:new a}}render(e,t){e.openXml(n.StdDocAttributes),e.openNode("Properties",l.PROPERTY_ATTRIBUTES),e.leafNode("Application",void 0,"Microsoft Excel"),e.leafNode("DocSecurity",void 0,"0"),e.leafNode("ScaleCrop",void 0,"false"),this.map.HeadingPairs.render(e,t.worksheets),this.map.TitleOfParts.render(e,t.worksheets),this.map.Company.render(e,t.company||""),this.map.Manager.render(e,t.manager),e.leafNode("LinksUpToDate",void 0,"false"),e.leafNode("SharedDoc",void 0,"false"),e.leafNode("HyperlinksChanged",void 0,"false"),e.leafNode("AppVersion",void 0,"16.0300"),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"Properties":return!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"Properties":return this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model},!1;default:return!0}}}l.DateFormat=function(e){return e.toISOString().replace(/[.]\d{3,6}/,"")},l.DateAttrs={"xsi:type":"dcterms:W3CDTF"},l.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties","xmlns:vt":"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"},t.exports=l},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/string-xform":119,"./app-heading-pairs-xform":49,"./app-titles-of-parts-xform":50}],52:[function(e,t,r){"use strict";const n=e("../../../utils/xml-stream"),i=e("../base-xform");class s extends i{render(e,t){e.openXml(n.StdDocAttributes),e.openNode("Types",s.PROPERTY_ATTRIBUTES);const r={};(t.media||[]).forEach(t=>{if("image"===t.type){const n=t.extension;r[n]||(r[n]=!0,e.leafNode("Default",{Extension:n,ContentType:"image/"+n}))}}),e.leafNode("Default",{Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"}),e.leafNode("Default",{Extension:"xml",ContentType:"application/xml"}),e.leafNode("Override",{PartName:"/xl/workbook.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}),t.worksheets.forEach(t=>{const r=`/xl/worksheets/sheet${t.id}.xml`;e.leafNode("Override",{PartName:r,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"})}),e.leafNode("Override",{PartName:"/xl/theme/theme1.xml",ContentType:"application/vnd.openxmlformats-officedocument.theme+xml"}),e.leafNode("Override",{PartName:"/xl/styles.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"});t.sharedStrings&&t.sharedStrings.count&&e.leafNode("Override",{PartName:"/xl/sharedStrings.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"}),t.tables&&t.tables.forEach(t=>{e.leafNode("Override",{PartName:"/xl/tables/"+t.target,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"})}),t.drawings&&t.drawings.forEach(t=>{e.leafNode("Override",{PartName:`/xl/drawings/${t.name}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.drawing+xml"})}),t.commentRefs&&(e.leafNode("Default",{Extension:"vml",ContentType:"application/vnd.openxmlformats-officedocument.vmlDrawing"}),t.commentRefs.forEach(t=>{let{commentName:r}=t;e.leafNode("Override",{PartName:`/xl/${r}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"})})),e.leafNode("Override",{PartName:"/docProps/core.xml",ContentType:"application/vnd.openxmlformats-package.core-properties+xml"}),e.leafNode("Override",{PartName:"/docProps/app.xml",ContentType:"application/vnd.openxmlformats-officedocument.extended-properties+xml"}),e.closeNode()}parseOpen(){return!1}parseText(){}parseClose(){return!1}}s.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"},t.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32}],53:[function(e,t,r){"use strict";const n=e("../../../utils/xml-stream"),i=e("../base-xform"),s=e("../simple/date-xform"),o=e("../simple/string-xform"),a=e("../simple/integer-xform");class l extends i{constructor(){super(),this.map={"dc:creator":new o({tag:"dc:creator"}),"dc:title":new o({tag:"dc:title"}),"dc:subject":new o({tag:"dc:subject"}),"dc:description":new o({tag:"dc:description"}),"dc:identifier":new o({tag:"dc:identifier"}),"dc:language":new o({tag:"dc:language"}),"cp:keywords":new o({tag:"cp:keywords"}),"cp:category":new o({tag:"cp:category"}),"cp:lastModifiedBy":new o({tag:"cp:lastModifiedBy"}),"cp:lastPrinted":new s({tag:"cp:lastPrinted",format:l.DateFormat}),"cp:revision":new a({tag:"cp:revision"}),"cp:version":new o({tag:"cp:version"}),"cp:contentStatus":new o({tag:"cp:contentStatus"}),"cp:contentType":new o({tag:"cp:contentType"}),"dcterms:created":new s({tag:"dcterms:created",attrs:l.DateAttrs,format:l.DateFormat}),"dcterms:modified":new s({tag:"dcterms:modified",attrs:l.DateAttrs,format:l.DateFormat})}}render(e,t){e.openXml(n.StdDocAttributes),e.openNode("cp:coreProperties",l.CORE_PROPERTY_ATTRIBUTES),this.map["dc:creator"].render(e,t.creator),this.map["dc:title"].render(e,t.title),this.map["dc:subject"].render(e,t.subject),this.map["dc:description"].render(e,t.description),this.map["dc:identifier"].render(e,t.identifier),this.map["dc:language"].render(e,t.language),this.map["cp:keywords"].render(e,t.keywords),this.map["cp:category"].render(e,t.category),this.map["cp:lastModifiedBy"].render(e,t.lastModifiedBy),this.map["cp:lastPrinted"].render(e,t.lastPrinted),this.map["cp:revision"].render(e,t.revision),this.map["cp:version"].render(e,t.version),this.map["cp:contentStatus"].render(e,t.contentStatus),this.map["cp:contentType"].render(e,t.contentType),this.map["dcterms:created"].render(e,t.created),this.map["dcterms:modified"].render(e,t.modified),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"cp:coreProperties":case"coreProperties":return!0;default:if(this.parser=this.map[e.name],this.parser)return this.parser.parseOpen(e),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"cp:coreProperties":case"coreProperties":return this.model={creator:this.map["dc:creator"].model,title:this.map["dc:title"].model,subject:this.map["dc:subject"].model,description:this.map["dc:description"].model,identifier:this.map["dc:identifier"].model,language:this.map["dc:language"].model,keywords:this.map["cp:keywords"].model,category:this.map["cp:category"].model,lastModifiedBy:this.map["cp:lastModifiedBy"].model,lastPrinted:this.map["cp:lastPrinted"].model,revision:this.map["cp:revision"].model,contentStatus:this.map["cp:contentStatus"].model,contentType:this.map["cp:contentType"].model,created:this.map["dcterms:created"].model,modified:this.map["dcterms:modified"].model},!1;default:throw new Error("Unexpected xml node in parseClose: "+e)}}}l.DateFormat=function(e){return e.toISOString().replace(/[.]\d{3}/,"")},l.DateAttrs={"xsi:type":"dcterms:W3CDTF"},l.CORE_PROPERTY_ATTRIBUTES={"xmlns:cp":"http://schemas.openxmlformats.org/package/2006/metadata/core-properties","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:dcterms":"http://purl.org/dc/terms/","xmlns:dcmitype":"http://purl.org/dc/dcmitype/","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance"},t.exports=l},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/date-xform":117,"../simple/integer-xform":118,"../simple/string-xform":119}],54:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{render(e,t){e.leafNode("Relationship",t)}parseOpen(e){switch(e.name){case"Relationship":return this.model=e.attributes,!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],55:[function(e,t,r){"use strict";const n=e("../../../utils/xml-stream"),i=e("../base-xform"),s=e("./relationship-xform");class o extends i{constructor(){super(),this.map={Relationship:new s}}render(e,t){t=t||this._values,e.openXml(n.StdDocAttributes),e.openNode("Relationships",o.RELATIONSHIPS_ATTRIBUTES),t.forEach(t=>{this.map.Relationship.render(e,t)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"Relationships":return this.model=[],!0;default:if(this.parser=this.map[e.name],this.parser)return this.parser.parseOpen(e),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.push(this.parser.model),this.parser=void 0),!0;switch(e){case"Relationships":return!1;default:throw new Error("Unexpected xml node in parseClose: "+e)}}}o.RELATIONSHIPS_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"},t.exports=o},{"../../../utils/xml-stream":28,"../base-xform":32,"./relationship-xform":54}],56:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={range:{editAs:e.attributes.editAs||"oneCell"}};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}reconcilePicture(e,t){if(e&&e.rId){const r=t.rels[e.rId].Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/);if(r){const e=r[1],n=t.mediaIndex[e];return t.media[n]}}}}},{"../base-xform":32}],57:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("./blip-xform");t.exports=class extends n{constructor(){super(),this.map={"a:blip":new i}}get tag(){return"xdr:blipFill"}render(e,t){e.openNode(this.tag),this.map["a:blip"].render(e,t),e.openNode("a:stretch"),e.leafNode("a:fillRect"),e.closeNode(),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model=this.map["a:blip"].model,!1;default:return!0}}}},{"../base-xform":32,"./blip-xform":58}],58:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"a:blip"}render(e,t){e.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:embed":t.rId,cstate:"print"})}parseOpen(e){switch(e.name){case this.tag:return this.model={rId:e.attributes["r:embed"]},!0;default:return!0}}parseText(){}parseClose(e){switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],59:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"xdr:cNvPicPr"}render(e){e.openNode(this.tag),e.leafNode("a:picLocks",{noChangeAspect:"1"}),e.closeNode()}parseOpen(e){switch(e.name){case this.tag:default:return!0}}parseText(){}parseClose(e){switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],60:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("./hlink-click-xform"),s=e("./ext-lst-xform");t.exports=class extends n{constructor(){super(),this.map={"a:hlinkClick":new i,"a:extLst":new s}}get tag(){return"xdr:cNvPr"}render(e,t){e.openNode(this.tag,{id:t.index,name:"Picture "+t.index}),this.map["a:hlinkClick"].render(e,t),this.map["a:extLst"].render(e,t),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model=this.map["a:hlinkClick"].model,!1;default:return!0}}}},{"../base-xform":32,"./ext-lst-xform":63,"./hlink-click-xform":65}],61:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("../simple/integer-xform");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.map={"xdr:col":new i({tag:"xdr:col",zero:!0}),"xdr:colOff":new i({tag:"xdr:colOff",zero:!0}),"xdr:row":new i({tag:"xdr:row",zero:!0}),"xdr:rowOff":new i({tag:"xdr:rowOff",zero:!0})}}render(e,t){e.openNode(this.tag),this.map["xdr:col"].render(e,t.nativeCol),this.map["xdr:colOff"].render(e,t.nativeColOff),this.map["xdr:row"].render(e,t.nativeRow),this.map["xdr:rowOff"].render(e,t.nativeRowOff),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model={nativeCol:this.map["xdr:col"].model,nativeColOff:this.map["xdr:colOff"].model,nativeRow:this.map["xdr:row"].model,nativeRowOff:this.map["xdr:rowOff"].model},!1;default:return!0}}}},{"../base-xform":32,"../simple/integer-xform":118}],62:[function(e,t,r){"use strict";const n=e("../../../utils/col-cache"),i=e("../../../utils/xml-stream"),s=e("../base-xform"),o=e("./two-cell-anchor-xform"),a=e("./one-cell-anchor-xform");class l extends s{constructor(){super(),this.map={"xdr:twoCellAnchor":new o,"xdr:oneCellAnchor":new a}}prepare(e){e.anchors.forEach((e,t)=>{e.anchorType=function(e){return("string"==typeof e.range?n.decode(e.range):e.range).br?"xdr:twoCellAnchor":"xdr:oneCellAnchor"}(e);this.map[e.anchorType].prepare(e,{index:t})})}get tag(){return"xdr:wsDr"}render(e,t){e.openXml(i.StdDocAttributes),e.openNode(this.tag,l.DRAWING_ATTRIBUTES),t.anchors.forEach(t=>{this.map[t.anchorType].render(e,t)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={anchors:[]};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.anchors.push(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:return!0}}reconcile(e,t){e.anchors.forEach(e=>{e.br?this.map["xdr:twoCellAnchor"].reconcile(e,t):this.map["xdr:oneCellAnchor"].reconcile(e,t)})}}l.DRAWING_ATTRIBUTES={"xmlns:xdr":"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing","xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main"},t.exports=l},{"../../../utils/col-cache":19,"../../../utils/xml-stream":28,"../base-xform":32,"./one-cell-anchor-xform":67,"./two-cell-anchor-xform":70}],63:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"a:extLst"}render(e){e.openNode(this.tag),e.openNode("a:ext",{uri:"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"}),e.leafNode("a16:creationId",{"xmlns:a16":"http://schemas.microsoft.com/office/drawing/2014/main",id:"{00000000-0008-0000-0000-000002000000}"}),e.closeNode(),e.closeNode()}parseOpen(e){switch(e.name){case this.tag:default:return!0}}parseText(){}parseClose(e){switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32}],64:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.map={}}render(e,t){e.openNode(this.tag);const r=Math.floor(9525*t.width),n=Math.floor(9525*t.height);e.addAttribute("cx",r),e.addAttribute("cy",n),e.closeNode()}parseOpen(e){return e.name===this.tag&&(this.model={width:parseInt(e.attributes.cx||"0",10)/9525,height:parseInt(e.attributes.cy||"0",10)/9525},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],65:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"a:hlinkClick"}render(e,t){t.hyperlinks&&t.hyperlinks.rId&&e.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:id":t.hyperlinks.rId,tooltip:t.hyperlinks.tooltip})}parseOpen(e){switch(e.name){case this.tag:return this.model={hyperlinks:{rId:e.attributes["r:id"],tooltip:e.attributes.tooltip}},!0;default:return!0}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],66:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("./c-nv-pr-xform"),s=e("./c-nv-pic-pr-xform");t.exports=class extends n{constructor(){super(),this.map={"xdr:cNvPr":new i,"xdr:cNvPicPr":new s}}get tag(){return"xdr:nvPicPr"}render(e,t){e.openNode(this.tag),this.map["xdr:cNvPr"].render(e,t),this.map["xdr:cNvPicPr"].render(e,t),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model=this.map["xdr:cNvPr"].model,!1;default:return!0}}}},{"../base-xform":32,"./c-nv-pic-pr-xform":59,"./c-nv-pr-xform":60}],67:[function(e,t,r){"use strict";const n=e("./base-cell-anchor-xform"),i=e("../static-xform"),s=e("./cell-position-xform"),o=e("./ext-xform"),a=e("./pic-xform");t.exports=class extends n{constructor(){super(),this.map={"xdr:from":new s({tag:"xdr:from"}),"xdr:ext":new o({tag:"xdr:ext"}),"xdr:pic":new a,"xdr:clientData":new i({tag:"xdr:clientData"})}}get tag(){return"xdr:oneCellAnchor"}prepare(e,t){this.map["xdr:pic"].prepare(e.picture,t)}render(e,t){e.openNode(this.tag,{editAs:t.range.editAs||"oneCell"}),this.map["xdr:from"].render(e,t.range.tl),this.map["xdr:ext"].render(e,t.range.ext),this.map["xdr:pic"].render(e,t.picture),this.map["xdr:clientData"].render(e,{}),e.closeNode()}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.ext=this.map["xdr:ext"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(e,t){e.medium=this.reconcilePicture(e.picture,t)}}},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./ext-xform":64,"./pic-xform":68}],68:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("../static-xform"),s=e("./blip-fill-xform"),o=e("./nv-pic-pr-xform"),a=e("./sp-pr");t.exports=class extends n{constructor(){super(),this.map={"xdr:nvPicPr":new o,"xdr:blipFill":new s,"xdr:spPr":new i(a)}}get tag(){return"xdr:pic"}prepare(e,t){e.index=t.index+1}render(e,t){e.openNode(this.tag),this.map["xdr:nvPicPr"].render(e,t),this.map["xdr:blipFill"].render(e,t),this.map["xdr:spPr"].render(e,t),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.mergeModel(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32,"../static-xform":120,"./blip-fill-xform":57,"./nv-pic-pr-xform":66,"./sp-pr":69}],69:[function(e,t,r){"use strict";t.exports={tag:"xdr:spPr",c:[{tag:"a:xfrm",c:[{tag:"a:off",$:{x:"0",y:"0"}},{tag:"a:ext",$:{cx:"0",cy:"0"}}]},{tag:"a:prstGeom",$:{prst:"rect"},c:[{tag:"a:avLst"}]}]}},{}],70:[function(e,t,r){"use strict";const n=e("./base-cell-anchor-xform"),i=e("../static-xform"),s=e("./cell-position-xform"),o=e("./pic-xform");t.exports=class extends n{constructor(){super(),this.map={"xdr:from":new s({tag:"xdr:from"}),"xdr:to":new s({tag:"xdr:to"}),"xdr:pic":new o,"xdr:clientData":new i({tag:"xdr:clientData"})}}get tag(){return"xdr:twoCellAnchor"}prepare(e,t){this.map["xdr:pic"].prepare(e.picture,t)}render(e,t){e.openNode(this.tag,{editAs:t.range.editAs||"oneCell"}),this.map["xdr:from"].render(e,t.range.tl),this.map["xdr:to"].render(e,t.range.br),this.map["xdr:pic"].render(e,t.picture),this.map["xdr:clientData"].render(e,{}),e.closeNode()}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.br=this.map["xdr:to"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(e,t){e.medium=this.reconcilePicture(e.picture,t)}}},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./pic-xform":68}],71:[function(e,t,r){"use strict";const n=e("./base-xform");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.always=!!e.always,this.count=e.count,this.empty=e.empty,this.$count=e.$count||"count",this.$=e.$,this.childXform=e.childXform,this.maxItems=e.maxItems}prepare(e,t){const{childXform:r}=this;e&&e.forEach((e,n)=>{t.index=n,r.prepare(e,t)})}render(e,t){if(this.always||t&&t.length){e.openNode(this.tag,this.$),this.count&&e.addAttribute(this.$count,t&&t.length||0);const{childXform:r}=this;(t||[]).forEach((t,n)=>{r.render(e,t,n)}),e.closeNode()}else this.empty&&e.leafNode(this.tag)}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:return this.model=[],!0;default:return!!this.childXform.parseOpen(e)&&(this.parser=this.childXform,!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)&&(this.model.push(this.parser.model),this.parser=void 0,this.maxItems&&this.model.length>this.maxItems))throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);return!0}return!1}reconcile(e,t){if(e){const{childXform:r}=this;e.forEach(e=>{r.reconcile(e,t)})}}}},{"./base-xform":32}],72:[function(e,t,r){"use strict";const n=e("../../../utils/col-cache"),i=e("../base-xform");t.exports=class extends i{get tag(){return"autoFilter"}render(e,t){if(t)if("string"==typeof t)e.leafNode("autoFilter",{ref:t});else{const r=function(e){return"string"==typeof e?e:n.getAddress(e.row,e.column).address},i=r(t.from),s=r(t.to);i&&s&&e.leafNode("autoFilter",{ref:`${i}:${s}`})}}parseOpen(e){"autoFilter"===e.name&&(this.model=e.attributes.ref)}}},{"../../../utils/col-cache":19,"../base-xform":32}],73:[function(e,t,r){"use strict";const n=e("../../../utils/utils"),i=e("../base-xform"),s=e("../../../doc/range"),o=e("../../../doc/enums"),a=e("../strings/rich-text-xform");function l(e){if(null==e)return o.ValueType.Null;if(e instanceof String||"string"==typeof e)return o.ValueType.String;if("number"==typeof e)return o.ValueType.Number;if("boolean"==typeof e)return o.ValueType.Boolean;if(e instanceof Date)return o.ValueType.Date;if(e.text&&e.hyperlink)return o.ValueType.Hyperlink;if(e.formula)return o.ValueType.Formula;if(e.error)return o.ValueType.Error;throw new Error("I could not understand type of value")}t.exports=class extends i{constructor(){super(),this.richTextXForm=new a}get tag(){return"c"}prepare(e,t){const r=t.styles.addStyleModel(e.style||{},function(e){switch(e.type){case o.ValueType.Formula:return l(e.result);default:return e.type}}(e));switch(r&&(e.styleId=r),e.comment&&t.comments.push({...e.comment,ref:e.address}),e.type){case o.ValueType.String:case o.ValueType.RichText:t.sharedStrings&&(e.ssId=t.sharedStrings.add(e.value));break;case o.ValueType.Date:t.date1904&&(e.date1904=!0);break;case o.ValueType.Hyperlink:t.sharedStrings&&void 0!==e.text&&null!==e.text&&(e.ssId=t.sharedStrings.add(e.text)),t.hyperlinks.push({address:e.address,target:e.hyperlink,tooltip:e.tooltip});break;case o.ValueType.Merge:t.merges.add(e);break;case o.ValueType.Formula:if(t.date1904&&(e.date1904=!0),"shared"===e.shareType&&(e.si=t.siFormulae++),e.formula)t.formulae[e.address]=e;else if(e.sharedFormula){const r=t.formulae[e.sharedFormula];if(!r)throw new Error("Shared Formula master must exist above and or left of clone for cell "+e.address);void 0===r.si?(r.shareType="shared",r.si=t.siFormulae++,r.range=new s(r.address,e.address)):r.range&&r.range.expandToAddress(e.address),e.si=r.si}}}renderFormula(e,t){let r=null;switch(t.shareType){case"shared":r={t:"shared",ref:t.ref||t.range.range,si:t.si};break;case"array":r={t:"array",ref:t.ref};break;default:void 0!==t.si&&(r={t:"shared",si:t.si})}switch(l(t.result)){case o.ValueType.Null:e.leafNode("f",r,t.formula);break;case o.ValueType.String:e.addAttribute("t","str"),e.leafNode("f",r,t.formula),e.leafNode("v",null,t.result);break;case o.ValueType.Number:e.leafNode("f",r,t.formula),e.leafNode("v",null,t.result);break;case o.ValueType.Boolean:e.addAttribute("t","b"),e.leafNode("f",r,t.formula),e.leafNode("v",null,t.result?1:0);break;case o.ValueType.Error:e.addAttribute("t","e"),e.leafNode("f",r,t.formula),e.leafNode("v",null,t.result.error);break;case o.ValueType.Date:e.leafNode("f",r,t.formula),e.leafNode("v",null,n.dateToExcel(t.result,t.date1904));break;default:throw new Error("I could not understand type of value")}}render(e,t){if(t.type!==o.ValueType.Null||t.styleId){switch(e.openNode("c"),e.addAttribute("r",t.address),t.styleId&&e.addAttribute("s",t.styleId),t.type){case o.ValueType.Null:break;case o.ValueType.Number:e.leafNode("v",null,t.value);break;case o.ValueType.Boolean:e.addAttribute("t","b"),e.leafNode("v",null,t.value?"1":"0");break;case o.ValueType.Error:e.addAttribute("t","e"),e.leafNode("v",null,t.value.error);break;case o.ValueType.String:case o.ValueType.RichText:void 0!==t.ssId?(e.addAttribute("t","s"),e.leafNode("v",null,t.ssId)):t.value&&t.value.richText?(e.addAttribute("t","inlineStr"),e.openNode("is"),t.value.richText.forEach(t=>{this.richTextXForm.render(e,t)}),e.closeNode("is")):(e.addAttribute("t","str"),e.leafNode("v",null,t.value));break;case o.ValueType.Date:e.leafNode("v",null,n.dateToExcel(t.value,t.date1904));break;case o.ValueType.Hyperlink:void 0!==t.ssId?(e.addAttribute("t","s"),e.leafNode("v",null,t.ssId)):(e.addAttribute("t","str"),e.leafNode("v",null,t.text));break;case o.ValueType.Formula:this.renderFormula(e,t);break;case o.ValueType.Merge:}e.closeNode()}}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"c":return this.model={address:e.attributes.r},this.t=e.attributes.t,e.attributes.s&&(this.model.styleId=parseInt(e.attributes.s,10)),!0;case"f":return this.currentNode="f",this.model.si=e.attributes.si,this.model.shareType=e.attributes.t,this.model.ref=e.attributes.ref,!0;case"v":return this.currentNode="v",!0;case"t":return this.currentNode="t",!0;case"r":return this.parser=this.richTextXForm,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){if(this.parser)this.parser.parseText(e);else switch(this.currentNode){case"f":this.model.formula=this.model.formula?this.model.formula+e:e;break;case"v":case"t":this.model.value&&this.model.value.richText?this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+e:e:this.model.value=this.model.value?this.model.value+e:e}}parseClose(e){switch(e){case"c":{const{model:e}=this;if(e.formula||e.shareType)e.type=o.ValueType.Formula,e.value&&("str"===this.t?e.result=n.xmlDecode(e.value):"b"===this.t?e.result=0!==parseInt(e.value,10):"e"===this.t?e.result={error:e.value}:e.result=parseFloat(e.value),e.value=void 0);else if(void 0!==e.value)switch(this.t){case"s":e.type=o.ValueType.String,e.value=parseInt(e.value,10);break;case"str":e.type=o.ValueType.String,e.value=n.xmlDecode(e.value);break;case"inlineStr":e.type=o.ValueType.String;break;case"b":e.type=o.ValueType.Boolean,e.value=0!==parseInt(e.value,10);break;case"e":e.type=o.ValueType.Error,e.value={error:e.value};break;default:e.type=o.ValueType.Number,e.value=parseFloat(e.value)}else e.styleId?e.type=o.ValueType.Null:e.type=o.ValueType.Merge;return!1}case"f":case"v":case"is":return this.currentNode=void 0,!0;case"t":return this.parser?(this.parser.parseClose(e),!0):(this.currentNode=void 0,!0);case"r":return this.model.value=this.model.value||{},this.model.value.richText=this.model.value.richText||[],this.model.value.richText.push(this.parser.model),this.parser=void 0,this.currentNode=void 0,!0;default:return!!this.parser&&(this.parser.parseClose(e),!0)}}reconcile(e,t){const r=e.styleId&&t.styles&&t.styles.getStyleModel(e.styleId);switch(r&&(e.style=r),void 0!==e.styleId&&(e.styleId=void 0),e.type){case o.ValueType.String:"number"==typeof e.value&&t.sharedStrings&&(e.value=t.sharedStrings.getString(e.value)),e.value.richText&&(e.type=o.ValueType.RichText);break;case o.ValueType.Number:r&&n.isDateFmt(r.numFmt)&&(e.type=o.ValueType.Date,e.value=n.excelToDate(e.value,t.date1904));break;case o.ValueType.Formula:void 0!==e.result&&r&&n.isDateFmt(r.numFmt)&&(e.result=n.excelToDate(e.result,t.date1904)),"shared"===e.shareType&&(e.ref?t.formulae[e.si]=e.address:(e.sharedFormula=t.formulae[e.si],delete e.shareType),delete e.si)}const i=t.hyperlinkMap[e.address];i&&(e.type===o.ValueType.Formula?(e.text=e.result,e.result=void 0):(e.text=e.value,e.value=void 0),e.type=o.ValueType.Hyperlink,e.hyperlink=i);const s=t.commentsMap&&t.commentsMap[e.address];s&&(e.comment=s)}}},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],74:[function(e,t,r){"use strict";const n=e("../../base-xform");t.exports=class extends n{get tag(){return"x14:cfIcon"}render(e,t){e.leafNode(this.tag,{iconSet:t.iconSet,iconId:t.iconId})}parseOpen(e){let{attributes:t}=e;this.model={iconSet:t.iconSet,iconId:n.toIntValue(t.iconId)}}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],75:[function(e,t,r){"use strict";const{v4:n}=e("uuid"),i=e("../../base-xform"),s=e("../../composite-xform"),o=e("./databar-ext-xform"),a=e("./icon-set-ext-xform"),l={"3Triangles":!0,"3Stars":!0,"5Boxes":!0};class c extends s{constructor(){super(),this.map={"x14:dataBar":this.databarXform=new o,"x14:iconSet":this.iconSetXform=new a}}get tag(){return"x14:cfRule"}static isExt(e){return"dataBar"===e.type?o.isExt(e):!("iconSet"!==e.type||!e.custom&&!l[e.iconSet])}prepare(e){c.isExt(e)&&(e.x14Id=`{${n()}}`.toUpperCase())}render(e,t){if(c.isExt(t))switch(t.type){case"dataBar":this.renderDataBar(e,t);break;case"iconSet":this.renderIconSet(e,t)}}renderDataBar(e,t){e.openNode(this.tag,{type:"dataBar",id:t.x14Id}),this.databarXform.render(e,t),e.closeNode()}renderIconSet(e,t){e.openNode(this.tag,{type:"iconSet",priority:t.priority,id:t.x14Id||`{${n()}}`}),this.iconSetXform.render(e,t),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{type:t.type,x14Id:t.id,priority:i.toIntValue(t.priority)}}onParserClose(e,t){Object.assign(this.model,t.model)}}t.exports=c},{"../../base-xform":32,"../../composite-xform":48,"./databar-ext-xform":79,"./icon-set-ext-xform":81,uuid:528}],76:[function(e,t,r){"use strict";const n=e("../../composite-xform"),i=e("./f-ext-xform");t.exports=class extends n{constructor(){super(),this.map={"xm:f":this.fExtXform=new i}}get tag(){return"x14:cfvo"}render(e,t){e.openNode(this.tag,{type:t.type}),void 0!==t.value&&this.fExtXform.render(e,t.value),e.closeNode()}createNewModel(e){return{type:e.attributes.type}}onParserClose(e,t){switch(e){case"xm:f":this.model.value=t.model?parseFloat(t.model):0}}}},{"../../composite-xform":48,"./f-ext-xform":80}],77:[function(e,t,r){"use strict";const n=e("../../composite-xform"),i=e("./sqref-ext-xform"),s=e("./cf-rule-ext-xform");t.exports=class extends n{constructor(){super(),this.map={"xm:sqref":this.sqRef=new i,"x14:cfRule":this.cfRule=new s}}get tag(){return"x14:conditionalFormatting"}prepare(e,t){e.rules.forEach(e=>{this.cfRule.prepare(e,t)})}render(e,t){t.rules.some(s.isExt)&&(e.openNode(this.tag,{"xmlns:xm":"http://schemas.microsoft.com/office/excel/2006/main"}),t.rules.filter(s.isExt).forEach(t=>this.cfRule.render(e,t)),this.sqRef.render(e,t.ref),e.closeNode())}createNewModel(){return{rules:[]}}onParserClose(e,t){switch(e){case"xm:sqref":this.model.ref=t.model;break;case"x14:cfRule":this.model.rules.push(t.model)}}}},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./sqref-ext-xform":82}],78:[function(e,t,r){"use strict";const n=e("../../composite-xform"),i=e("./cf-rule-ext-xform"),s=e("./conditional-formatting-ext-xform");t.exports=class extends n{constructor(){super(),this.map={"x14:conditionalFormatting":this.cfXform=new s}}get tag(){return"x14:conditionalFormattings"}hasContent(e){return void 0===e.hasExtContent&&(e.hasExtContent=e.some(e=>e.rules.some(i.isExt))),e.hasExtContent}prepare(e,t){e.forEach(e=>{this.cfXform.prepare(e,t)})}render(e,t){this.hasContent(t)&&(e.openNode(this.tag),t.forEach(t=>this.cfXform.render(e,t)),e.closeNode())}createNewModel(){return[]}onParserClose(e,t){this.model.push(t.model)}}},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./conditional-formatting-ext-xform":77}],79:[function(e,t,r){"use strict";const n=e("../../base-xform"),i=e("../../composite-xform"),s=e("../../style/color-xform"),o=e("./cfvo-ext-xform");t.exports=class extends i{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new o,"x14:borderColor":this.borderColorXform=new s("x14:borderColor"),"x14:negativeBorderColor":this.negativeBorderColorXform=new s("x14:negativeBorderColor"),"x14:negativeFillColor":this.negativeFillColorXform=new s("x14:negativeFillColor"),"x14:axisColor":this.axisColorXform=new s("x14:axisColor")}}static isExt(e){return!e.gradient}get tag(){return"x14:dataBar"}render(e,t){e.openNode(this.tag,{minLength:n.toIntAttribute(t.minLength,0,!0),maxLength:n.toIntAttribute(t.maxLength,100,!0),border:n.toBoolAttribute(t.border,!1),gradient:n.toBoolAttribute(t.gradient,!0),negativeBarColorSameAsPositive:n.toBoolAttribute(t.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:n.toBoolAttribute(t.negativeBarBorderColorSameAsPositive,!0),axisPosition:n.toAttribute(t.axisPosition,"auto"),direction:n.toAttribute(t.direction,"leftToRight")}),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),this.borderColorXform.render(e,t.borderColor),this.negativeBorderColorXform.render(e,t.negativeBorderColor),this.negativeFillColorXform.render(e,t.negativeFillColor),this.axisColorXform.render(e,t.axisColor),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{cfvo:[],minLength:n.toIntValue(t.minLength,0),maxLength:n.toIntValue(t.maxLength,100),border:n.toBoolValue(t.border,!1),gradient:n.toBoolValue(t.gradient,!0),negativeBarColorSameAsPositive:n.toBoolValue(t.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:n.toBoolValue(t.negativeBarBorderColorSameAsPositive,!0),axisPosition:n.toStringValue(t.axisPosition,"auto"),direction:n.toStringValue(t.direction,"leftToRight")}}onParserClose(e,t){const[,r]=e.split(":");switch(r){case"cfvo":this.model.cfvo.push(t.model);break;default:this.model[r]=t.model}}}},{"../../base-xform":32,"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-ext-xform":76}],80:[function(e,t,r){"use strict";const n=e("../../base-xform");t.exports=class extends n{get tag(){return"xm:f"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],81:[function(e,t,r){"use strict";const n=e("../../base-xform"),i=e("../../composite-xform"),s=e("./cfvo-ext-xform"),o=e("./cf-icon-ext-xform");t.exports=class extends i{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new s,"x14:cfIcon":this.cfIconXform=new o}}get tag(){return"x14:iconSet"}render(e,t){e.openNode(this.tag,{iconSet:n.toStringAttribute(t.iconSet),reverse:n.toBoolAttribute(t.reverse,!1),showValue:n.toBoolAttribute(t.showValue,!0),custom:n.toBoolAttribute(t.icons,!1)}),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),t.icons&&t.icons.forEach((t,r)=>{t.iconId=r,this.cfIconXform.render(e,t)}),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{cfvo:[],iconSet:n.toStringValue(t.iconSet,"3TrafficLights"),reverse:n.toBoolValue(t.reverse,!1),showValue:n.toBoolValue(t.showValue,!0)}}onParserClose(e,t){const[,r]=e.split(":");switch(r){case"cfvo":this.model.cfvo.push(t.model);break;case"cfIcon":this.model.icons||(this.model.icons=[]),this.model.icons.push(t.model);break;default:this.model[r]=t.model}}}},{"../../base-xform":32,"../../composite-xform":48,"./cf-icon-ext-xform":74,"./cfvo-ext-xform":76}],82:[function(e,t,r){"use strict";const n=e("../../base-xform");t.exports=class extends n{get tag(){return"xm:sqref"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],83:[function(e,t,r){"use strict";const n=e("../../base-xform"),i=e("../../composite-xform"),s=e("../../../../doc/range"),o=e("./databar-xform"),a=e("./ext-lst-ref-xform"),l=e("./formula-xform"),c=e("./color-scale-xform"),u=e("./icon-set-xform"),h={"3Triangles":!0,"3Stars":!0,"5Boxes":!0},f=e=>{const{type:t,operator:r}=e;switch(t){case"containsText":case"containsBlanks":case"notContainsBlanks":case"containsErrors":case"notContainsErrors":return{type:"containsText",operator:t};default:return{type:t,operator:r}}};class d extends i{constructor(){super(),this.map={dataBar:this.databarXform=new o,extLst:this.extLstRefXform=new a,formula:this.formulaXform=new l,colorScale:this.colorScaleXform=new c,iconSet:this.iconSetXform=new u}}get tag(){return"cfRule"}static isPrimitive(e){return"iconSet"!==e.type||!e.custom&&!h[e.iconSet]}render(e,t){switch(t.type){case"expression":this.renderExpression(e,t);break;case"cellIs":this.renderCellIs(e,t);break;case"top10":this.renderTop10(e,t);break;case"aboveAverage":this.renderAboveAverage(e,t);break;case"dataBar":this.renderDataBar(e,t);break;case"colorScale":this.renderColorScale(e,t);break;case"iconSet":this.renderIconSet(e,t);break;case"containsText":this.renderText(e,t);break;case"timePeriod":this.renderTimePeriod(e,t)}}renderExpression(e,t){e.openNode(this.tag,{type:"expression",dxfId:t.dxfId,priority:t.priority}),this.formulaXform.render(e,t.formulae[0]),e.closeNode()}renderCellIs(e,t){e.openNode(this.tag,{type:"cellIs",dxfId:t.dxfId,priority:t.priority,operator:t.operator}),t.formulae.forEach(t=>{this.formulaXform.render(e,t)}),e.closeNode()}renderTop10(e,t){e.leafNode(this.tag,{type:"top10",dxfId:t.dxfId,priority:t.priority,percent:n.toBoolAttribute(t.percent,!1),bottom:n.toBoolAttribute(t.bottom,!1),rank:n.toIntValue(t.rank,10,!0)})}renderAboveAverage(e,t){e.leafNode(this.tag,{type:"aboveAverage",dxfId:t.dxfId,priority:t.priority,aboveAverage:n.toBoolAttribute(t.aboveAverage,!0)})}renderDataBar(e,t){e.openNode(this.tag,{type:"dataBar",priority:t.priority}),this.databarXform.render(e,t),this.extLstRefXform.render(e,t),e.closeNode()}renderColorScale(e,t){e.openNode(this.tag,{type:"colorScale",priority:t.priority}),this.colorScaleXform.render(e,t),e.closeNode()}renderIconSet(e,t){d.isPrimitive(t)&&(e.openNode(this.tag,{type:"iconSet",priority:t.priority}),this.iconSetXform.render(e,t),e.closeNode())}renderText(e,t){e.openNode(this.tag,{type:t.operator,dxfId:t.dxfId,priority:t.priority,operator:n.toStringAttribute(t.operator,"containsText")});const r=(e=>{if(e.formulae&&e.formulae[0])return e.formulae[0];const t=new s(e.ref),{tl:r}=t;switch(e.operator){case"containsText":return`NOT(ISERROR(SEARCH("${e.text}",${r})))`;case"containsBlanks":return`LEN(TRIM(${r}))=0`;case"notContainsBlanks":return`LEN(TRIM(${r}))>0`;case"containsErrors":return`ISERROR(${r})`;case"notContainsErrors":return`NOT(ISERROR(${r}))`;default:return}})(t);r&&this.formulaXform.render(e,r),e.closeNode()}renderTimePeriod(e,t){e.openNode(this.tag,{type:"timePeriod",dxfId:t.dxfId,priority:t.priority,timePeriod:t.timePeriod});const r=(e=>{if(e.formulae&&e.formulae[0])return e.formulae[0];const t=new s(e.ref),{tl:r}=t;switch(e.timePeriod){case"thisWeek":return`AND(TODAY()-ROUNDDOWN(${r},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${r},0)-TODAY()<=7-WEEKDAY(TODAY()))`;case"lastWeek":return`AND(TODAY()-ROUNDDOWN(${r},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${r},0)<(WEEKDAY(TODAY())+7))`;case"nextWeek":return`AND(ROUNDDOWN(${r},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${r},0)-TODAY()<(15-WEEKDAY(TODAY())))`;case"yesterday":return`FLOOR(${r},1)=TODAY()-1`;case"today":return`FLOOR(${r},1)=TODAY()`;case"tomorrow":return`FLOOR(${r},1)=TODAY()+1`;case"last7Days":return`AND(TODAY()-FLOOR(${r},1)<=6,FLOOR(${r},1)<=TODAY())`;case"lastMonth":return`AND(MONTH(${r})=MONTH(EDATE(TODAY(),0-1)),YEAR(${r})=YEAR(EDATE(TODAY(),0-1)))`;case"thisMonth":return`AND(MONTH(${r})=MONTH(TODAY()),YEAR(${r})=YEAR(TODAY()))`;case"nextMonth":return`AND(MONTH(${r})=MONTH(EDATE(TODAY(),0+1)),YEAR(${r})=YEAR(EDATE(TODAY(),0+1)))`;default:return}})(t);r&&this.formulaXform.render(e,r),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{...f(t),dxfId:n.toIntValue(t.dxfId),priority:n.toIntValue(t.priority),timePeriod:t.timePeriod,percent:n.toBoolValue(t.percent),bottom:n.toBoolValue(t.bottom),rank:n.toIntValue(t.rank),aboveAverage:n.toBoolValue(t.aboveAverage)}}onParserClose(e,t){switch(e){case"dataBar":case"extLst":case"colorScale":case"iconSet":Object.assign(this.model,t.model);break;case"formula":this.model.formulae=this.model.formulae||[],this.model.formulae.push(t.model)}}}t.exports=d},{"../../../../doc/range":10,"../../base-xform":32,"../../composite-xform":48,"./color-scale-xform":85,"./databar-xform":88,"./ext-lst-ref-xform":89,"./formula-xform":90,"./icon-set-xform":91}],84:[function(e,t,r){"use strict";const n=e("../../base-xform");t.exports=class extends n{get tag(){return"cfvo"}render(e,t){e.leafNode(this.tag,{type:t.type,val:t.value})}parseOpen(e){this.model={type:e.attributes.type,value:n.toFloatValue(e.attributes.val)}}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],85:[function(e,t,r){"use strict";const n=e("../../composite-xform"),i=e("../../style/color-xform"),s=e("./cfvo-xform");t.exports=class extends n{constructor(){super(),this.map={cfvo:this.cfvoXform=new s,color:this.colorXform=new i}}get tag(){return"colorScale"}render(e,t){e.openNode(this.tag),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),t.color.forEach(t=>{this.colorXform.render(e,t)}),e.closeNode()}createNewModel(e){return{cfvo:[],color:[]}}onParserClose(e,t){this.model[e].push(t.model)}}},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],86:[function(e,t,r){"use strict";const n=e("../../composite-xform"),i=e("./cf-rule-xform");t.exports=class extends n{constructor(){super(),this.map={cfRule:new i}}get tag(){return"conditionalFormatting"}render(e,t){t.rules.some(i.isPrimitive)&&(e.openNode(this.tag,{sqref:t.ref}),t.rules.forEach(r=>{i.isPrimitive(r)&&(r.ref=t.ref,this.map.cfRule.render(e,r))}),e.closeNode())}createNewModel(e){let{attributes:t}=e;return{ref:t.sqref,rules:[]}}onParserClose(e,t){this.model.rules.push(t.model)}}},{"../../composite-xform":48,"./cf-rule-xform":83}],87:[function(e,t,r){"use strict";const n=e("../../base-xform"),i=e("./conditional-formatting-xform");t.exports=class extends n{constructor(){super(),this.cfXform=new i}get tag(){return"conditionalFormatting"}reset(){this.model=[]}prepare(e,t){let r=e.reduce((e,t)=>Math.max(e,...t.rules.map(e=>e.priority||0)),1);e.forEach(e=>{e.rules.forEach(e=>{e.priority||(e.priority=r++),e.style&&(e.dxfId=t.styles.addDxfStyle(e.style))})})}render(e,t){t.forEach(t=>{this.cfXform.render(e,t)})}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"conditionalFormatting":return this.parser=this.cfXform,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(!!this.parser.parseClose(e)||(this.model.push(this.parser.model),this.parser=void 0,!1))}reconcile(e,t){e.forEach(e=>{e.rules.forEach(e=>{void 0!==e.dxfId&&(e.style=t.styles.getDxfStyle(e.dxfId),delete e.dxfId)})})}}},{"../../base-xform":32,"./conditional-formatting-xform":86}],88:[function(e,t,r){"use strict";const n=e("../../composite-xform"),i=e("../../style/color-xform"),s=e("./cfvo-xform");t.exports=class extends n{constructor(){super(),this.map={cfvo:this.cfvoXform=new s,color:this.colorXform=new i}}get tag(){return"dataBar"}render(e,t){e.openNode(this.tag),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),this.colorXform.render(e,t.color),e.closeNode()}createNewModel(){return{cfvo:[]}}onParserClose(e,t){switch(e){case"cfvo":this.model.cfvo.push(t.model);break;case"color":this.model.color=t.model}}}},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],89:[function(e,t,r){"use strict";const n=e("../../base-xform"),i=e("../../composite-xform");class s extends n{get tag(){return"x14:id"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}class o extends i{constructor(){super(),this.map={"x14:id":this.idXform=new s}}get tag(){return"ext"}render(e,t){e.openNode(this.tag,{uri:"{B025F937-C7B1-47D3-B67F-A62EFF666E3E}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.idXform.render(e,t.x14Id),e.closeNode()}createNewModel(){return{}}onParserClose(e,t){this.model.x14Id=t.model}}t.exports=class extends i{constructor(){super(),this.map={ext:new o}}get tag(){return"extLst"}render(e,t){e.openNode(this.tag),this.map.ext.render(e,t),e.closeNode()}createNewModel(){return{}}onParserClose(e,t){Object.assign(this.model,t.model)}}},{"../../base-xform":32,"../../composite-xform":48}],90:[function(e,t,r){"use strict";const n=e("../../base-xform");t.exports=class extends n{get tag(){return"formula"}render(e,t){e.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(e){this.model+=e}parseClose(e){return e!==this.tag}}},{"../../base-xform":32}],91:[function(e,t,r){"use strict";const n=e("../../base-xform"),i=e("../../composite-xform"),s=e("./cfvo-xform");t.exports=class extends i{constructor(){super(),this.map={cfvo:this.cfvoXform=new s}}get tag(){return"iconSet"}render(e,t){e.openNode(this.tag,{iconSet:n.toStringAttribute(t.iconSet,"3TrafficLights"),reverse:n.toBoolAttribute(t.reverse,!1),showValue:n.toBoolAttribute(t.showValue,!0)}),t.cfvo.forEach(t=>{this.cfvoXform.render(e,t)}),e.closeNode()}createNewModel(e){let{attributes:t}=e;return{iconSet:n.toStringValue(t.iconSet,"3TrafficLights"),reverse:n.toBoolValue(t.reverse),showValue:n.toBoolValue(t.showValue),cfvo:[]}}onParserClose(e,t){this.model[e].push(t.model)}}},{"../../base-xform":32,"../../composite-xform":48,"./cfvo-xform":84}],92:[function(e,t,r){"use strict";const n=e("../../../utils/utils"),i=e("../base-xform");t.exports=class extends i{get tag(){return"col"}prepare(e,t){const r=t.styles.addStyleModel(e.style||{});r&&(e.styleId=r)}render(e,t){e.openNode("col"),e.addAttribute("min",t.min),e.addAttribute("max",t.max),t.width&&e.addAttribute("width",t.width),t.styleId&&e.addAttribute("style",t.styleId),t.hidden&&e.addAttribute("hidden","1"),t.bestFit&&e.addAttribute("bestFit","1"),t.outlineLevel&&e.addAttribute("outlineLevel",t.outlineLevel),t.collapsed&&e.addAttribute("collapsed","1"),e.addAttribute("customWidth","1"),e.closeNode()}parseOpen(e){if("col"===e.name){const t=this.model={min:parseInt(e.attributes.min||"0",10),max:parseInt(e.attributes.max||"0",10),width:void 0===e.attributes.width?void 0:parseFloat(e.attributes.width||"0")};return e.attributes.style&&(t.styleId=parseInt(e.attributes.style,10)),n.parseBoolean(e.attributes.hidden)&&(t.hidden=!0),n.parseBoolean(e.attributes.bestFit)&&(t.bestFit=!0),e.attributes.outlineLevel&&(t.outlineLevel=parseInt(e.attributes.outlineLevel,10)),n.parseBoolean(e.attributes.collapsed)&&(t.collapsed=!0),!0}return!1}parseText(){}parseClose(){return!1}reconcile(e,t){e.styleId&&(e.style=t.styles.getStyleModel(e.styleId))}}},{"../../../utils/utils":27,"../base-xform":32}],93:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../../../utils/utils"),s=e("../../../utils/col-cache"),o=e("../base-xform"),a=e("../../../doc/range");function l(e,t,r,n){const i=t[r];void 0!==i?e[r]=i:void 0!==n&&(e[r]=n)}function c(e,t,r,n){const s=t[r];void 0!==s?e[r]=i.parseBoolean(s):void 0!==n&&(e[r]=n)}t.exports=class extends o{get tag(){return"dataValidations"}render(e,t){const r=function(e){const t=n.map(e,(e,t)=>({address:t,dataValidation:e,marked:!1})).sort((e,t)=>n.strcmp(e.address,t.address)),r=n.keyBy(t,"address"),i=(t,r,i)=>{for(let o=0;o{if(!t.marked){const o=s.decodeEx(t.address);if(o.dimensions)return r[o.dimensions].marked=!0,{...t.dataValidation,sqref:t.address};let a=1,l=s.encodeAddress(o.row+a,o.col);for(;e[l]&&n.isEqual(t.dataValidation,e[l]);)a++,l=s.encodeAddress(o.row+a,o.col);let c=1;for(;i(o,a,o.col+c);)c++;for(let e=0;e1||c>1){const e=o.row+(a-1),r=o.col+(c-1);return{...t.dataValidation,sqref:`${t.address}:${s.encodeAddress(e,r)}`}}return{...t.dataValidation,sqref:t.address}}return null}).filter(Boolean)}(t);r.length&&(e.openNode("dataValidations",{count:r.length}),r.forEach(t=>{e.openNode("dataValidation"),"any"!==t.type&&(e.addAttribute("type",t.type),t.operator&&"list"!==t.type&&"between"!==t.operator&&e.addAttribute("operator",t.operator),t.allowBlank&&e.addAttribute("allowBlank","1")),t.showInputMessage&&e.addAttribute("showInputMessage","1"),t.promptTitle&&e.addAttribute("promptTitle",t.promptTitle),t.prompt&&e.addAttribute("prompt",t.prompt),t.showErrorMessage&&e.addAttribute("showErrorMessage","1"),t.errorStyle&&e.addAttribute("errorStyle",t.errorStyle),t.errorTitle&&e.addAttribute("errorTitle",t.errorTitle),t.error&&e.addAttribute("error",t.error),e.addAttribute("sqref",t.sqref),(t.formulae||[]).forEach((r,n)=>{e.openNode("formula"+(n+1)),"date"===t.type?e.writeText(i.dateToExcel(new Date(r))):e.writeText(r),e.closeNode()}),e.closeNode()}),e.closeNode())}parseOpen(e){switch(e.name){case"dataValidations":return this.model={},!0;case"dataValidation":{this._address=e.attributes.sqref;const t={type:e.attributes.type||"any",formulae:[]};switch(e.attributes.type&&c(t,e.attributes,"allowBlank"),c(t,e.attributes,"showInputMessage"),c(t,e.attributes,"showErrorMessage"),t.type){case"any":case"list":case"custom":break;default:l(t,e.attributes,"operator","between")}return l(t,e.attributes,"promptTitle"),l(t,e.attributes,"prompt"),l(t,e.attributes,"errorStyle"),l(t,e.attributes,"errorTitle"),l(t,e.attributes,"error"),this._dataValidation=t,!0}case"formula1":case"formula2":return this._formula=[],!0;default:return!1}}parseText(e){this._formula&&this._formula.push(e)}parseClose(e){switch(e){case"dataValidations":return!1;case"dataValidation":this._dataValidation.formulae&&this._dataValidation.formulae.length||(delete this._dataValidation.formulae,delete this._dataValidation.operator);return(this._address.split(/\s+/g)||[]).forEach(e=>{if(e.includes(":")){new a(e).forEachAddress(e=>{this.model[e]=this._dataValidation})}else this.model[e]=this._dataValidation}),!0;case"formula1":case"formula2":{let e=this._formula.join("");switch(this._dataValidation.type){case"whole":case"textLength":e=parseInt(e,10);break;case"decimal":e=parseFloat(e);break;case"date":e=i.excelToDate(parseFloat(e))}return this._dataValidation.formulae.push(e),this._formula=void 0,!0}default:return!0}}}},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/utils":27,"../base-xform":32}],94:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"dimension"}render(e,t){t&&e.leafNode("dimension",{ref:t})}parseOpen(e){return"dimension"===e.name&&(this.model=e.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],95:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"drawing"}render(e,t){t&&e.leafNode(this.tag,{"r:id":t.rId})}parseOpen(e){switch(e.name){case this.tag:return this.model={rId:e.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],96:[function(e,t,r){"use strict";const n=e("../composite-xform"),i=e("./cf-ext/conditional-formattings-ext-xform");class s extends n{constructor(){super(),this.map={"x14:conditionalFormattings":this.conditionalFormattings=new i}}get tag(){return"ext"}hasContent(e){return this.conditionalFormattings.hasContent(e.conditionalFormattings)}prepare(e,t){this.conditionalFormattings.prepare(e.conditionalFormattings,t)}render(e,t){e.openNode("ext",{uri:"{78C0D931-6437-407d-A8EE-F0AAD7539E65}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.conditionalFormattings.render(e,t.conditionalFormattings),e.closeNode()}createNewModel(){return{}}onParserClose(e,t){this.model[e]=t.model}}t.exports=class extends n{constructor(){super(),this.map={ext:this.ext=new s}}get tag(){return"extLst"}prepare(e,t){this.ext.prepare(e,t)}hasContent(e){return this.ext.hasContent(e)}render(e,t){this.hasContent(t)&&(e.openNode("extLst"),this.ext.render(e,t),e.closeNode())}createNewModel(){return{}}onParserClose(e,t){Object.assign(this.model,t.model)}}},{"../composite-xform":48,"./cf-ext/conditional-formattings-ext-xform":78}],97:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"headerFooter"}render(e,t){if(t){e.addRollback();let r=!1;e.openNode("headerFooter"),t.differentFirst&&(e.addAttribute("differentFirst","1"),r=!0),t.differentOddEven&&(e.addAttribute("differentOddEven","1"),r=!0),t.oddHeader&&"string"==typeof t.oddHeader&&(e.leafNode("oddHeader",null,t.oddHeader),r=!0),t.oddFooter&&"string"==typeof t.oddFooter&&(e.leafNode("oddFooter",null,t.oddFooter),r=!0),t.evenHeader&&"string"==typeof t.evenHeader&&(e.leafNode("evenHeader",null,t.evenHeader),r=!0),t.evenFooter&&"string"==typeof t.evenFooter&&(e.leafNode("evenFooter",null,t.evenFooter),r=!0),t.firstHeader&&"string"==typeof t.firstHeader&&(e.leafNode("firstHeader",null,t.firstHeader),r=!0),t.firstFooter&&"string"==typeof t.firstFooter&&(e.leafNode("firstFooter",null,t.firstFooter),r=!0),r?(e.closeNode(),e.commit()):e.rollback()}}parseOpen(e){switch(e.name){case"headerFooter":return this.model={},e.attributes.differentFirst&&(this.model.differentFirst=1===parseInt(e.attributes.differentFirst,0)),e.attributes.differentOddEven&&(this.model.differentOddEven=1===parseInt(e.attributes.differentOddEven,0)),!0;case"oddHeader":return this.currentNode="oddHeader",!0;case"oddFooter":return this.currentNode="oddFooter",!0;case"evenHeader":return this.currentNode="evenHeader",!0;case"evenFooter":return this.currentNode="evenFooter",!0;case"firstHeader":return this.currentNode="firstHeader",!0;case"firstFooter":return this.currentNode="firstFooter",!0;default:return!1}}parseText(e){switch(this.currentNode){case"oddHeader":this.model.oddHeader=e;break;case"oddFooter":this.model.oddFooter=e;break;case"evenHeader":this.model.evenHeader=e;break;case"evenFooter":this.model.evenFooter=e;break;case"firstHeader":this.model.firstHeader=e;break;case"firstFooter":this.model.firstFooter=e}}parseClose(){switch(this.currentNode){case"oddHeader":case"oddFooter":case"evenHeader":case"evenFooter":case"firstHeader":case"firstFooter":return this.currentNode=void 0,!0;default:return!1}}}},{"../base-xform":32}],98:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"hyperlink"}render(e,t){this.isInternalLink(t)?e.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip,location:t.target}):e.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip})}parseOpen(e){return"hyperlink"===e.name&&(this.model={address:e.attributes.ref,rId:e.attributes["r:id"],tooltip:e.attributes.tooltip},e.attributes.location&&(this.model.target=e.attributes.location),!0)}parseText(){}parseClose(){return!1}isInternalLink(e){return e.target&&/^[^!]+![a-zA-Z]+[\d]+$/.test(e.target)}}},{"../base-xform":32}],99:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"mergeCell"}render(e,t){e.leafNode("mergeCell",{ref:t})}parseOpen(e){return"mergeCell"===e.name&&(this.model=e.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],100:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../../../doc/range"),s=e("../../../utils/col-cache"),o=e("../../../doc/enums");t.exports=class{constructor(){this.merges={}}add(e){if(this.merges[e.master])this.merges[e.master].expandToAddress(e.address);else{const t=`${e.master}:${e.address}`;this.merges[e.master]=new i(t)}}get mergeCells(){return n.map(this.merges,e=>e.range)}reconcile(e,t){n.each(e,e=>{const r=s.decode(e);for(let e=r.top;e<=r.bottom;e++){const n=t[e-1];for(let t=r.left;t<=r.right;t++){const i=n.cells[t-1];i?i.type===o.ValueType.Merge&&(i.master=r.tl):n.cells[t]={type:o.ValueType.Null,address:s.encodeAddress(e,t)}}}})}getMasterAddress(e){const t=this.hash[e];return t&&t.tl}}},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26}],101:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e=>void 0!==e;t.exports=class extends n{get tag(){return"outlinePr"}render(e,t){return!(!t||!i(t.summaryBelow)&&!i(t.summaryRight))&&(e.leafNode(this.tag,{summaryBelow:i(t.summaryBelow)?Number(t.summaryBelow):void 0,summaryRight:i(t.summaryRight)?Number(t.summaryRight):void 0}),!0)}parseOpen(e){return e.name===this.tag&&(this.model={summaryBelow:i(e.attributes.summaryBelow)?Boolean(Number(e.attributes.summaryBelow)):void 0,summaryRight:i(e.attributes.summaryRight)?Boolean(Number(e.attributes.summaryRight)):void 0},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],102:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"brk"}render(e,t){e.leafNode("brk",t)}parseOpen(e){return"brk"===e.name&&(this.model=e.attributes.ref,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],103:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../base-xform");t.exports=class extends i{get tag(){return"pageMargins"}render(e,t){if(t){const r={left:t.left,right:t.right,top:t.top,bottom:t.bottom,header:t.header,footer:t.footer};n.some(r,e=>void 0!==e)&&e.leafNode(this.tag,r)}}parseOpen(e){switch(e.name){case this.tag:return this.model={left:parseFloat(e.attributes.left||.7),right:parseFloat(e.attributes.right||.7),top:parseFloat(e.attributes.top||.75),bottom:parseFloat(e.attributes.bottom||.75),header:parseFloat(e.attributes.header||.3),footer:parseFloat(e.attributes.footer||.3)},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],104:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"pageSetUpPr"}render(e,t){return!(!t||!t.fitToPage)&&(e.leafNode(this.tag,{fitToPage:t.fitToPage?"1":void 0}),!0)}parseOpen(e){return e.name===this.tag&&(this.model={fitToPage:"1"===e.attributes.fitToPage},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],105:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../base-xform");function s(e){return e?"1":void 0}function o(e){switch(e){case"overThenDown":return e;default:return}}function a(e){switch(e){case"atEnd":case"asDisplyed":return e;default:return}}function l(e){switch(e){case"dash":case"blank":case"NA":return e;default:return}}t.exports=class extends i{get tag(){return"pageSetup"}render(e,t){if(t){const r={paperSize:t.paperSize,orientation:t.orientation,horizontalDpi:t.horizontalDpi,verticalDpi:t.verticalDpi,pageOrder:o(t.pageOrder),blackAndWhite:s(t.blackAndWhite),draft:s(t.draft),cellComments:a(t.cellComments),errors:l(t.errors),scale:t.scale,fitToWidth:t.fitToWidth,fitToHeight:t.fitToHeight,firstPageNumber:t.firstPageNumber,useFirstPageNumber:s(t.firstPageNumber),usePrinterDefaults:s(t.usePrinterDefaults),copies:t.copies};n.some(r,e=>void 0!==e)&&e.leafNode(this.tag,r)}}parseOpen(e){switch(e.name){case this.tag:return this.model={paperSize:(t=e.attributes.paperSize,void 0!==t?parseInt(t,10):void 0),orientation:e.attributes.orientation||"portrait",horizontalDpi:parseInt(e.attributes.horizontalDpi||"4294967295",10),verticalDpi:parseInt(e.attributes.verticalDpi||"4294967295",10),pageOrder:e.attributes.pageOrder||"downThenOver",blackAndWhite:"1"===e.attributes.blackAndWhite,draft:"1"===e.attributes.draft,cellComments:e.attributes.cellComments||"None",errors:e.attributes.errors||"displayed",scale:parseInt(e.attributes.scale||"100",10),fitToWidth:parseInt(e.attributes.fitToWidth||"1",10),fitToHeight:parseInt(e.attributes.fitToHeight||"1",10),firstPageNumber:parseInt(e.attributes.firstPageNumber||"1",10),useFirstPageNumber:"1"===e.attributes.useFirstPageNumber,usePrinterDefaults:"1"===e.attributes.usePrinterDefaults,copies:parseInt(e.attributes.copies||"1",10)},!0;default:return!1}var t}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],106:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"picture"}render(e,t){t&&e.leafNode(this.tag,{"r:id":t.rId})}parseOpen(e){switch(e.name){case this.tag:return this.model={rId:e.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],107:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../base-xform");function s(e){return e?"1":void 0}t.exports=class extends i{get tag(){return"printOptions"}render(e,t){if(t){const r={headings:s(t.showRowColHeaders),gridLines:s(t.showGridLines),horizontalCentered:s(t.horizontalCentered),verticalCentered:s(t.verticalCentered)};n.some(r,e=>void 0!==e)&&e.leafNode(this.tag,r)}}parseOpen(e){switch(e.name){case this.tag:return this.model={showRowColHeaders:"1"===e.attributes.headings,showGridLines:"1"===e.attributes.gridLines,horizontalCentered:"1"===e.attributes.horizontalCentered,verticalCentered:"1"===e.attributes.verticalCentered},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],108:[function(e,t,r){"use strict";const n=e("./page-breaks-xform"),i=e("../list-xform");t.exports=class extends i{constructor(){super({tag:"rowBreaks",count:!0,childXform:new n})}render(e,t){if(t&&t.length){e.openNode(this.tag,this.$),this.count&&(e.addAttribute(this.$count,t.length),e.addAttribute("manualBreakCount",t.length));const{childXform:r}=this;t.forEach(t=>{r.render(e,t)}),e.closeNode()}else this.empty&&e.leafNode(this.tag)}}},{"../list-xform":71,"./page-breaks-xform":102}],109:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("../../../utils/utils"),s=e("./cell-xform");t.exports=class extends n{constructor(e){super(),this.maxItems=e&&e.maxItems,this.map={c:new s}}get tag(){return"row"}prepare(e,t){const r=t.styles.addStyleModel(e.style);r&&(e.styleId=r);const n=this.map.c;e.cells.forEach(e=>{n.prepare(e,t)})}render(e,t,r){e.openNode("row"),e.addAttribute("r",t.number),t.height&&(e.addAttribute("ht",t.height),e.addAttribute("customHeight","1")),t.hidden&&e.addAttribute("hidden","1"),t.min>0&&t.max>0&&t.min<=t.max&&e.addAttribute("spans",`${t.min}:${t.max}`),t.styleId&&(e.addAttribute("s",t.styleId),e.addAttribute("customFormat","1")),e.addAttribute("x14ac:dyDescent","0.25"),t.outlineLevel&&e.addAttribute("outlineLevel",t.outlineLevel),t.collapsed&&e.addAttribute("collapsed","1");const n=this.map.c;t.cells.forEach(t=>{n.render(e,t,r)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;if("row"===e.name){this.numRowsSeen+=1;const t=e.attributes.spans?e.attributes.spans.split(":").map(e=>parseInt(e,10)):[void 0,void 0],r=this.model={number:parseInt(e.attributes.r,10),min:t[0],max:t[1],cells:[]};return e.attributes.s&&(r.styleId=parseInt(e.attributes.s,10)),i.parseBoolean(e.attributes.hidden)&&(r.hidden=!0),i.parseBoolean(e.attributes.bestFit)&&(r.bestFit=!0),e.attributes.ht&&(r.height=parseFloat(e.attributes.ht)),e.attributes.outlineLevel&&(r.outlineLevel=parseInt(e.attributes.outlineLevel,10)),i.parseBoolean(e.attributes.collapsed)&&(r.collapsed=!0),!0}return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(`Max column count (${this.maxItems}) exceeded`);this.parser=void 0}return!0}return!1}reconcile(e,t){e.style=e.styleId?t.styles.getStyleModel(e.styleId):{},void 0!==e.styleId&&(e.styleId=void 0);const r=this.map.c;e.cells.forEach(e=>{r.reconcile(e,t)})}}},{"../../../utils/utils":27,"../base-xform":32,"./cell-xform":73}],110:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../base-xform");t.exports=class extends i{get tag(){return"sheetFormatPr"}render(e,t){if(t){const r={defaultRowHeight:t.defaultRowHeight,outlineLevelRow:t.outlineLevelRow,outlineLevelCol:t.outlineLevelCol,"x14ac:dyDescent":t.dyDescent};t.defaultColWidth&&(r.defaultColWidth=t.defaultColWidth),t.defaultRowHeight&&15===t.defaultRowHeight||(r.customHeight="1"),n.some(r,e=>void 0!==e)&&e.leafNode("sheetFormatPr",r)}}parseOpen(e){return"sheetFormatPr"===e.name&&(this.model={defaultRowHeight:parseFloat(e.attributes.defaultRowHeight||"0"),dyDescent:parseFloat(e.attributes["x14ac:dyDescent"]||"0"),outlineLevelRow:parseInt(e.attributes.outlineLevelRow||"0",10),outlineLevelCol:parseInt(e.attributes.outlineLevelCol||"0",10)},e.attributes.defaultColWidth&&(this.model.defaultColWidth=parseFloat(e.attributes.defaultColWidth)),!0)}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],111:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("../style/color-xform"),s=e("./page-setup-properties-xform"),o=e("./outline-properties-xform");t.exports=class extends n{constructor(){super(),this.map={tabColor:new i("tabColor"),pageSetUpPr:new s,outlinePr:new o}}get tag(){return"sheetPr"}render(e,t){if(t){e.addRollback(),e.openNode("sheetPr");let r=!1;r=this.map.tabColor.render(e,t.tabColor)||r,r=this.map.pageSetUpPr.render(e,t.pageSetup)||r,r=this.map.outlinePr.render(e,t.outlineProperties)||r,r?(e.closeNode(),e.commit()):e.rollback()}}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag?(this.reset(),!0):!!this.map[e.name]&&(this.parser=this.map[e.name],this.parser.parseOpen(e),!0)}parseText(e){return!!this.parser&&(this.parser.parseText(e),!0)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model?(this.model={},this.map.tabColor.model&&(this.model.tabColor=this.map.tabColor.model),this.map.pageSetUpPr.model&&(this.model.pageSetup=this.map.pageSetUpPr.model),this.map.outlinePr.model&&(this.model.outlineProperties=this.map.outlinePr.model)):this.model=null,!1)}}},{"../base-xform":32,"../style/color-xform":128,"./outline-properties-xform":101,"./page-setup-properties-xform":104}],112:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../base-xform");function s(e,t){return e?t:void 0}function o(e,t){return e===t||void 0}t.exports=class extends i{get tag(){return"sheetProtection"}render(e,t){if(t){const r={sheet:s(t.sheet,"1"),selectLockedCells:!1===t.selectLockedCells?"1":void 0,selectUnlockedCells:!1===t.selectUnlockedCells?"1":void 0,formatCells:s(t.formatCells,"0"),formatColumns:s(t.formatColumns,"0"),formatRows:s(t.formatRows,"0"),insertColumns:s(t.insertColumns,"0"),insertRows:s(t.insertRows,"0"),insertHyperlinks:s(t.insertHyperlinks,"0"),deleteColumns:s(t.deleteColumns,"0"),deleteRows:s(t.deleteRows,"0"),sort:s(t.sort,"0"),autoFilter:s(t.autoFilter,"0"),pivotTables:s(t.pivotTables,"0")};t.sheet&&(r.algorithmName=t.algorithmName,r.hashValue=t.hashValue,r.saltValue=t.saltValue,r.spinCount=t.spinCount,r.objects=s(!1===t.objects,"1"),r.scenarios=s(!1===t.scenarios,"1")),n.some(r,e=>void 0!==e)&&e.leafNode(this.tag,r)}}parseOpen(e){switch(e.name){case this.tag:return this.model={sheet:o(e.attributes.sheet,"1"),objects:"1"!==e.attributes.objects&&void 0,scenarios:"1"!==e.attributes.scenarios&&void 0,selectLockedCells:"1"!==e.attributes.selectLockedCells&&void 0,selectUnlockedCells:"1"!==e.attributes.selectUnlockedCells&&void 0,formatCells:o(e.attributes.formatCells,"0"),formatColumns:o(e.attributes.formatColumns,"0"),formatRows:o(e.attributes.formatRows,"0"),insertColumns:o(e.attributes.insertColumns,"0"),insertRows:o(e.attributes.insertRows,"0"),insertHyperlinks:o(e.attributes.insertHyperlinks,"0"),deleteColumns:o(e.attributes.deleteColumns,"0"),deleteRows:o(e.attributes.deleteRows,"0"),sort:o(e.attributes.sort,"0"),autoFilter:o(e.attributes.autoFilter,"0"),pivotTables:o(e.attributes.pivotTables,"0")},e.attributes.algorithmName&&(this.model.algorithmName=e.attributes.algorithmName,this.model.hashValue=e.attributes.hashValue,this.model.saltValue=e.attributes.saltValue,this.model.spinCount=parseInt(e.attributes.spinCount,10)),!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../../../utils/under-dash":26,"../base-xform":32}],113:[function(e,t,r){"use strict";const n=e("../../../utils/col-cache"),i=e("../base-xform"),s={frozen:"frozen",frozenSplit:"frozen",split:"split"};t.exports=class extends i{get tag(){return"sheetView"}prepare(e){switch(e.state){case"frozen":case"split":break;default:e.state="normal"}}render(e,t){e.openNode("sheetView",{workbookViewId:t.workbookViewId||0});const r=function(t,r,n){n&&e.addAttribute(t,r)};let i,s,o,a;switch(r("rightToLeft","1",!0===t.rightToLeft),r("tabSelected","1",t.tabSelected),r("showRuler","0",!1===t.showRuler),r("showRowColHeaders","0",!1===t.showRowColHeaders),r("showGridLines","0",!1===t.showGridLines),r("zoomScale",t.zoomScale,t.zoomScale),r("zoomScaleNormal",t.zoomScaleNormal,t.zoomScaleNormal),r("view",t.style,t.style),t.state){case"frozen":s=t.xSplit||0,o=t.ySplit||0,i=t.topLeftCell||n.getAddress(o+1,s+1).address,a=(t.xSplit&&t.ySplit?"bottomRight":t.xSplit&&"topRight")||"bottomLeft",e.leafNode("pane",{xSplit:t.xSplit||void 0,ySplit:t.ySplit||void 0,topLeftCell:i,activePane:a,state:"frozen"}),e.leafNode("selection",{pane:a,activeCell:t.activeCell,sqref:t.activeCell});break;case"split":"topLeft"===t.activePane&&(t.activePane=void 0),e.leafNode("pane",{xSplit:t.xSplit||void 0,ySplit:t.ySplit||void 0,topLeftCell:t.topLeftCell,activePane:t.activePane}),e.leafNode("selection",{pane:t.activePane,activeCell:t.activeCell,sqref:t.activeCell});break;case"normal":t.activeCell&&e.leafNode("selection",{activeCell:t.activeCell,sqref:t.activeCell})}e.closeNode()}parseOpen(e){switch(e.name){case"sheetView":return this.sheetView={workbookViewId:parseInt(e.attributes.workbookViewId,10),rightToLeft:"1"===e.attributes.rightToLeft,tabSelected:"1"===e.attributes.tabSelected,showRuler:!("0"===e.attributes.showRuler),showRowColHeaders:!("0"===e.attributes.showRowColHeaders),showGridLines:!("0"===e.attributes.showGridLines),zoomScale:parseInt(e.attributes.zoomScale||"100",10),zoomScaleNormal:parseInt(e.attributes.zoomScaleNormal||"100",10),style:e.attributes.view},this.pane=void 0,this.selections={},!0;case"pane":return this.pane={xSplit:parseInt(e.attributes.xSplit||"0",10),ySplit:parseInt(e.attributes.ySplit||"0",10),topLeftCell:e.attributes.topLeftCell,activePane:e.attributes.activePane||"topLeft",state:e.attributes.state},!0;case"selection":{const t=e.attributes.pane||"topLeft";return this.selections[t]={pane:t,activeCell:e.attributes.activeCell},!0}default:return!1}}parseText(){}parseClose(e){let t,r;switch(e){case"sheetView":return this.sheetView&&this.pane?(t=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:s[this.pane.state]||"split",xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},"split"===this.model.state&&(t.activePane=this.pane.activePane),r=this.selections[this.pane.activePane],r&&r.activeCell&&(t.activeCell=r.activeCell),this.sheetView.style&&(t.style=this.sheetView.style)):(t=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:"normal",showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},r=this.selections.topLeft,r&&r.activeCell&&(t.activeCell=r.activeCell),this.sheetView.style&&(t.style=this.sheetView.style)),!1;default:return!0}}reconcile(){}}},{"../../../utils/col-cache":19,"../base-xform":32}],114:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"tablePart"}render(e,t){t&&e.leafNode(this.tag,{"r:id":t.rId})}parseOpen(e){switch(e.name){case this.tag:return this.model={rId:e.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],115:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../../../utils/col-cache"),s=e("../../../utils/xml-stream"),o=e("../../rel-type"),a=e("./merges"),l=e("../base-xform"),c=e("../list-xform"),u=e("./row-xform"),h=e("./col-xform"),f=e("./dimension-xform"),d=e("./hyperlink-xform"),p=e("./merge-cell-xform"),m=e("./data-validations-xform"),b=e("./sheet-properties-xform"),g=e("./sheet-format-properties-xform"),y=e("./sheet-view-xform"),v=e("./sheet-protection-xform"),w=e("./page-margins-xform"),_=e("./page-setup-xform"),x=e("./print-options-xform"),k=e("./auto-filter-xform"),S=e("./picture-xform"),M=e("./drawing-xform"),C=e("./table-part-xform"),T=e("./row-breaks-xform"),E=e("./header-footer-xform"),A=e("./cf/conditional-formattings-xform"),R=e("./ext-lst-xform"),O=(e,t)=>{if(!t||!t.length)return e;if(!e||!e.length)return t;const r={},n={};return e.forEach(e=>{r[e.ref]=e,e.rules.forEach(e=>{const{x14Id:t}=e;t&&(n[t]=e)})}),t.forEach(t=>{t.rules.forEach(i=>{const s=n[i.x14Id];s?((e,t)=>{Object.keys(t).forEach(r=>{const n=e[r],i=t[r];void 0===n&&void 0!==i&&(e[r]=i)})})(s,i):r[t.ref]?r[t.ref].rules.push(i):e.push({ref:t.ref,rules:[i]})})}),e};class j extends l{constructor(e){super();const{maxRows:t,maxCols:r,ignoreNodes:n}=e||{};this.ignoreNodes=n||[],this.map={sheetPr:new b,dimension:new f,sheetViews:new c({tag:"sheetViews",count:!1,childXform:new y}),sheetFormatPr:new g,cols:new c({tag:"cols",count:!1,childXform:new h}),sheetData:new c({tag:"sheetData",count:!1,empty:!0,childXform:new u({maxItems:r}),maxItems:t}),autoFilter:new k,mergeCells:new c({tag:"mergeCells",count:!0,childXform:new p}),rowBreaks:new T,hyperlinks:new c({tag:"hyperlinks",count:!1,childXform:new d}),pageMargins:new w,dataValidations:new m,pageSetup:new _,headerFooter:new E,printOptions:new x,picture:new S,drawing:new M,sheetProtection:new v,tableParts:new c({tag:"tableParts",count:!0,childXform:new C}),conditionalFormatting:new A,extLst:new R}}prepare(e,t){t.merges=new a,e.hyperlinks=t.hyperlinks=[],e.comments=t.comments=[],t.formulae={},t.siFormulae=0,this.map.cols.prepare(e.cols,t),this.map.sheetData.prepare(e.rows,t),this.map.conditionalFormatting.prepare(e.conditionalFormattings,t),e.mergeCells=t.merges.mergeCells;const r=e.rels=[];function n(e){return"rId"+(e.length+1)}if(e.hyperlinks.forEach(e=>{const t=n(r);e.rId=t,r.push({Id:t,Type:o.Hyperlink,Target:e.target,TargetMode:"External"})}),e.comments.length>0){const s={Id:n(r),Type:o.Comments,Target:`../comments${e.id}.xml`};r.push(s);const a={Id:n(r),Type:o.VmlDrawing,Target:`../drawings/vmlDrawing${e.id}.vml`};r.push(a),e.comments.forEach(e=>{e.refAddress=i.decodeAddress(e.ref)}),t.commentRefs.push({commentName:"comments"+e.id,vmlDrawing:"vmlDrawing"+e.id})}const s=[];let l;e.media.forEach(i=>{if("background"===i.type){const s=n(r);l=t.media[i.imageId],r.push({Id:s,Type:o.Image,Target:`../media/${l.name}.${l.extension}`}),e.background={rId:s},e.image=t.media[i.imageId]}else if("image"===i.type){let{drawing:a}=e;l=t.media[i.imageId],a||(a=e.drawing={rId:n(r),name:"drawing"+ ++t.drawingsCount,anchors:[],rels:[]},t.drawings.push(a),r.push({Id:a.rId,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",Target:`../drawings/${a.name}.xml`}));let c=this.preImageId===i.imageId?s[i.imageId]:s[a.rels.length];c||(c=n(a.rels),s[a.rels.length]=c,a.rels.push({Id:c,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:`../media/${l.name}.${l.extension}`}));const u={picture:{rId:c},range:i.range};if(i.hyperlinks&&i.hyperlinks.hyperlink){const e=n(a.rels);s[a.rels.length]=e,u.picture.hyperlinks={tooltip:i.hyperlinks.tooltip,rId:e},a.rels.push({Id:e,Type:o.Hyperlink,Target:i.hyperlinks.hyperlink,TargetMode:"External"})}this.preImageId=i.imageId,a.anchors.push(u)}}),e.tables.forEach(e=>{const i=n(r);e.rId=i,r.push({Id:i,Type:o.Table,Target:"../tables/"+e.target}),e.columns.forEach(e=>{const{style:r}=e;r&&(e.dxfId=t.styles.addDxfStyle(r))})}),this.map.extLst.prepare(e,t)}render(e,t){e.openXml(s.StdDocAttributes),e.openNode("worksheet",j.WORKSHEET_ATTRIBUTES);const r=t.properties?{defaultRowHeight:t.properties.defaultRowHeight,dyDescent:t.properties.dyDescent,outlineLevelCol:t.properties.outlineLevelCol,outlineLevelRow:t.properties.outlineLevelRow}:void 0;t.properties&&t.properties.defaultColWidth&&(r.defaultColWidth=t.properties.defaultColWidth);const n={outlineProperties:t.properties&&t.properties.outlineProperties,tabColor:t.properties&&t.properties.tabColor,pageSetup:t.pageSetup&&t.pageSetup.fitToPage?{fitToPage:t.pageSetup.fitToPage}:void 0},i=t.pageSetup&&t.pageSetup.margins,a={showRowColHeaders:t.pageSetup&&t.pageSetup.showRowColHeaders,showGridLines:t.pageSetup&&t.pageSetup.showGridLines,horizontalCentered:t.pageSetup&&t.pageSetup.horizontalCentered,verticalCentered:t.pageSetup&&t.pageSetup.verticalCentered},l=t.sheetProtection;this.map.sheetPr.render(e,n),this.map.dimension.render(e,t.dimensions),this.map.sheetViews.render(e,t.views),this.map.sheetFormatPr.render(e,r),this.map.cols.render(e,t.cols),this.map.sheetData.render(e,t.rows),this.map.sheetProtection.render(e,l),this.map.autoFilter.render(e,t.autoFilter),this.map.mergeCells.render(e,t.mergeCells),this.map.conditionalFormatting.render(e,t.conditionalFormattings),this.map.dataValidations.render(e,t.dataValidations),this.map.hyperlinks.render(e,t.hyperlinks),this.map.printOptions.render(e,a),this.map.pageMargins.render(e,i),this.map.pageSetup.render(e,t.pageSetup),this.map.headerFooter.render(e,t.headerFooter),this.map.rowBreaks.render(e,t.rowBreaks),this.map.drawing.render(e,t.drawing),this.map.picture.render(e,t.background),this.map.tableParts.render(e,t.tables),this.map.extLst.render(e,t),t.rels&&t.rels.forEach(t=>{t.Type===o.VmlDrawing&&e.leafNode("legacyDrawing",{"r:id":t.Id})}),e.closeNode()}parseOpen(e){return this.parser?(this.parser.parseOpen(e),!0):"worksheet"===e.name?(n.each(this.map,e=>{e.reset()}),!0):(this.map[e.name]&&!this.ignoreNodes.includes(e.name)&&(this.parser=this.map[e.name],this.parser.parseOpen(e)),!0)}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"worksheet":{const e=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&(e.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&(e.outlineProperties=this.map.sheetPr.model.outlineProperties);const t={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},r=Object.assign(t,this.map.pageSetup.model,this.map.printOptions.model),n=O(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model["x14:conditionalFormattings"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:e,views:this.map.sheetViews.model,pageSetup:r,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:n},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1}default:return!0}}reconcile(e,t){const r=(e.relationships||[]).reduce((r,n)=>{if(r[n.Id]=n,n.Type===o.Comments&&(e.comments=t.comments[n.Target].comments),n.Type===o.VmlDrawing&&e.comments&&e.comments.length){const r=t.vmlDrawings[n.Target].comments;e.comments.forEach((e,t)=>{e.note=Object.assign({},e.note,r[t])})}return r},{});if(t.commentsMap=(e.comments||[]).reduce((e,t)=>(t.ref&&(e[t.ref]=t),e),{}),t.hyperlinkMap=(e.hyperlinks||[]).reduce((e,t)=>(t.rId&&(e[t.address]=r[t.rId].Target),e),{}),t.formulae={},e.rows=e.rows&&e.rows.filter(Boolean)||[],e.rows.forEach(e=>{e.cells=e.cells&&e.cells.filter(Boolean)||[]}),this.map.cols.reconcile(e.cols,t),this.map.sheetData.reconcile(e.rows,t),this.map.conditionalFormatting.reconcile(e.conditionalFormattings,t),e.media=[],e.drawing){const n=r[e.drawing.rId].Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(n){const r=n[1];t.drawings[r].anchors.forEach(t=>{if(t.medium){const r={type:"image",imageId:t.medium.index,range:t.range,hyperlinks:t.picture.hyperlinks};e.media.push(r)}})}}const n=e.background&&r[e.background.rId];if(n){const r=n.Target.split("/media/")[1],i=t.mediaIndex&&t.mediaIndex[r];void 0!==i&&e.media.push({type:"background",imageId:i})}e.tables=(e.tables||[]).map(e=>{const n=r[e.rId];return t.tables[n.Target]}),delete e.relationships,delete e.hyperlinks,delete e.comments}}j.WORKSHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"},t.exports=j},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../../rel-type":31,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":72,"./cf/conditional-formattings-xform":87,"./col-xform":92,"./data-validations-xform":93,"./dimension-xform":94,"./drawing-xform":95,"./ext-lst-xform":96,"./header-footer-xform":97,"./hyperlink-xform":98,"./merge-cell-xform":99,"./merges":100,"./page-margins-xform":103,"./page-setup-xform":105,"./picture-xform":106,"./print-options-xform":107,"./row-breaks-xform":108,"./row-xform":109,"./sheet-format-properties-xform":110,"./sheet-properties-xform":111,"./sheet-protection-xform":112,"./sheet-view-xform":113,"./table-part-xform":114}],116:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.attr=e.attr}render(e,t){t&&(e.openNode(this.tag),e.closeNode())}parseOpen(e){e.name===this.tag&&(this.model=!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],117:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.attr=e.attr,this.attrs=e.attrs,this._format=e.format||function(e){try{return Number.isNaN(e.getTime())?"":e.toISOString()}catch(e){return""}},this._parse=e.parse||function(e){return new Date(e)}}render(e,t){t&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,this._format(t)):e.writeText(this._format(t)),e.closeNode())}parseOpen(e){e.name===this.tag&&(this.attr?this.model=this._parse(e.attributes[this.attr]):this.text=[])}parseText(e){this.attr||this.text.push(e)}parseClose(){return this.attr||(this.model=this._parse(this.text.join(""))),!1}}},{"../base-xform":32}],118:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.attr=e.attr,this.attrs=e.attrs,this.zero=e.zero}render(e,t){(t||this.zero)&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,t):e.writeText(t),e.closeNode())}parseOpen(e){return e.name===this.tag&&(this.attr?this.model=parseInt(e.attributes[this.attr],10):this.text=[],!0)}parseText(e){this.attr||this.text.push(e)}parseClose(){return this.attr||(this.model=parseInt(this.text.join("")||0,10)),!1}}},{"../base-xform":32}],119:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{constructor(e){super(),this.tag=e.tag,this.attr=e.attr,this.attrs=e.attrs}render(e,t){void 0!==t&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,t):e.writeText(t),e.closeNode())}parseOpen(e){e.name===this.tag&&(this.attr?this.model=e.attributes[this.attr]:this.text=[])}parseText(e){this.attr||this.text.push(e)}parseClose(){return this.attr||(this.model=this.text.join("")),!1}}},{"../base-xform":32}],120:[function(e,t,r){"use strict";const n=e("./base-xform"),i=e("../../utils/xml-stream");t.exports=class extends n{constructor(e){super(),this._model=e}render(e){if(!this._xml){const e=new i;!function e(t,r){t.openNode(r.tag,r.$),r.c&&r.c.forEach(r=>{e(t,r)}),r.t&&t.writeText(r.t),t.closeNode()}(e,this._model),this._xml=e.xml}e.writeXml(this._xml)}parseOpen(){return!0}parseText(){}parseClose(e){switch(e){case this._model.tag:return!1;default:return!0}}}},{"../../utils/xml-stream":28,"./base-xform":32}],121:[function(e,t,r){"use strict";const n=e("./text-xform"),i=e("./rich-text-xform"),s=e("../base-xform");t.exports=class extends s{constructor(){super(),this.map={r:new i,t:new n}}get tag(){return"rPh"}render(e,t){if(e.openNode(this.tag,{sb:t.sb||0,eb:t.eb||0}),t&&t.hasOwnProperty("richText")&&t.richText){const{r:r}=this.map;t.richText.forEach(t=>{r.render(e,t)})}else t&&this.map.t.render(e,t.text);e.closeNode()}parseOpen(e){const{name:t}=e;return this.parser?(this.parser.parseOpen(e),!0):t===this.tag?(this.model={sb:parseInt(e.attributes.sb,10),eb:parseInt(e.attributes.eb,10)},!0):(this.parser=this.map[t],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)){switch(e){case"r":{let e=this.model.richText;e||(e=this.model.richText=[]),e.push(this.parser.model);break}case"t":this.model.text=this.parser.model}this.parser=void 0}return!0}switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32,"./rich-text-xform":122,"./text-xform":125}],122:[function(e,t,r){"use strict";const n=e("./text-xform"),i=e("../style/font-xform"),s=e("../base-xform");class o extends s{constructor(e){super(),this.model=e}get tag(){return"r"}get textXform(){return this._textXform||(this._textXform=new n)}get fontXform(){return this._fontXform||(this._fontXform=new i(o.FONT_OPTIONS))}render(e,t){t=t||this.model,e.openNode("r"),t.font&&this.fontXform.render(e,t.font),this.textXform.render(e,t.text),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"r":return this.model={},!0;case"t":return this.parser=this.textXform,this.parser.parseOpen(e),!0;case"rPr":return this.parser=this.fontXform,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){switch(e){case"r":return!1;case"t":return this.model.text=this.parser.model,this.parser=void 0,!0;case"rPr":return this.model.font=this.parser.model,this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}}o.FONT_OPTIONS={tagName:"rPr",fontNameTag:"rFont"},t.exports=o},{"../base-xform":32,"../style/font-xform":131,"./text-xform":125}],123:[function(e,t,r){"use strict";const n=e("./text-xform"),i=e("./rich-text-xform"),s=e("./phonetic-text-xform"),o=e("../base-xform");t.exports=class extends o{constructor(e){super(),this.model=e,this.map={r:new i,t:new n,rPh:new s}}get tag(){return"si"}render(e,t){e.openNode(this.tag),t&&t.hasOwnProperty("richText")&&t.richText?t.richText.length?t.richText.forEach(t=>{this.map.r.render(e,t)}):this.map.t.render(e,""):null!=t&&this.map.t.render(e,t),e.closeNode()}parseOpen(e){const{name:t}=e;return this.parser?(this.parser.parseOpen(e),!0):t===this.tag?(this.model={},!0):(this.parser=this.map[t],!!this.parser&&(this.parser.parseOpen(e),!0))}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser){if(!this.parser.parseClose(e)){switch(e){case"r":{let e=this.model.richText;e||(e=this.model.richText=[]),e.push(this.parser.model);break}case"t":this.model=this.parser.model}this.parser=void 0}return!0}switch(e){case this.tag:return!1;default:return!0}}}},{"../base-xform":32,"./phonetic-text-xform":121,"./rich-text-xform":122,"./text-xform":125}],124:[function(e,t,r){"use strict";const n=e("../../../utils/xml-stream"),i=e("../base-xform"),s=e("./shared-string-xform");t.exports=class extends i{constructor(e){super(),this.model=e||{values:[],count:0},this.hash=Object.create(null),this.rich=Object.create(null)}get sharedStringXform(){return this._sharedStringXform||(this._sharedStringXform=new s)}get values(){return this.model.values}get uniqueCount(){return this.model.values.length}get count(){return this.model.count}getString(e){return this.model.values[e]}add(e){return e.richText?this.addRichText(e):this.addText(e)}addText(e){let t=this.hash[e];return void 0===t&&(t=this.hash[e]=this.model.values.length,this.model.values.push(e)),this.model.count++,t}addRichText(e){const t=this.sharedStringXform.toXml(e);let r=this.rich[t];return void 0===r&&(r=this.rich[t]=this.model.values.length,this.model.values.push(e)),this.model.count++,r}render(e,t){t=t||this._values,e.openXml(n.StdDocAttributes),e.openNode("sst",{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",count:t.count,uniqueCount:t.values.length});const r=this.sharedStringXform;t.values.forEach(t=>{r.render(e,t)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"sst":return!0;case"si":return this.parser=this.sharedStringXform,this.parser.parseOpen(e),!0;default:throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.values.push(this.parser.model),this.model.count++,this.parser=void 0),!0;switch(e){case"sst":return!1;default:throw new Error("Unexpected xml node in parseClose: "+e)}}}},{"../../../utils/xml-stream":28,"../base-xform":32,"./shared-string-xform":123}],125:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"t"}render(e,t){e.openNode("t"),/^\s|\n|\s$/.test(t)&&e.addAttribute("xml:space","preserve"),e.writeText(t),e.closeNode()}get model(){return this._text.join("").replace(/_x([0-9A-F]{4})_/g,(e,t)=>String.fromCharCode(parseInt(t,16)))}parseOpen(e){switch(e.name){case"t":return this._text=[],!0;default:return!1}}parseText(e){this._text.push(e)}parseClose(){return!1}}},{"../base-xform":32}],126:[function(e,t,r){"use strict";const n=e("../../../doc/enums"),i=e("../../../utils/utils"),s=e("../base-xform"),o={horizontalValues:["left","center","right","fill","centerContinuous","distributed","justify"].reduce((e,t)=>(e[t]=!0,e),{}),horizontal(e){return this.horizontalValues[e]?e:void 0},verticalValues:["top","middle","bottom","distributed","justify"].reduce((e,t)=>(e[t]=!0,e),{}),vertical(e){return"middle"===e?"center":this.verticalValues[e]?e:void 0},wrapText:e=>!!e||void 0,shrinkToFit:e=>!!e||void 0,textRotation(e){switch(e){case"vertical":return e;default:return(e=i.validInt(e))>=-90&&e<=90?e:void 0}},indent:e=>(e=i.validInt(e),Math.max(0,e)),readingOrder(e){switch(e){case"ltr":return n.ReadingOrder.LeftToRight;case"rtl":return n.ReadingOrder.RightToLeft;default:return}}},a={toXml(e){if(e=o.textRotation(e)){if("vertical"===e)return 255;const t=Math.round(e);if(t>=0&&t<=90)return t;if(t<0&&t>=-90)return 90-t}},toModel(e){const t=i.validInt(e);if(void 0!==t){if(255===t)return"vertical";if(t>=0&&t<=90)return t;if(t>90&&t<=180)return 90-t}}};t.exports=class extends s{get tag(){return"alignment"}render(e,t){e.addRollback(),e.openNode("alignment");let r=!1;function n(t,n){n&&(e.addAttribute(t,n),r=!0)}n("horizontal",o.horizontal(t.horizontal)),n("vertical",o.vertical(t.vertical)),n("wrapText",!!o.wrapText(t.wrapText)&&"1"),n("shrinkToFit",!!o.shrinkToFit(t.shrinkToFit)&&"1"),n("indent",o.indent(t.indent)),n("textRotation",a.toXml(t.textRotation)),n("readingOrder",o.readingOrder(t.readingOrder)),e.closeNode(),r?e.commit():e.rollback()}parseOpen(e){const t={};let r=!1;function n(e,n,i){e&&(t[n]=i,r=!0)}n(e.attributes.horizontal,"horizontal",e.attributes.horizontal),n(e.attributes.vertical,"vertical","center"===e.attributes.vertical?"middle":e.attributes.vertical),n(e.attributes.wrapText,"wrapText",i.parseBoolean(e.attributes.wrapText)),n(e.attributes.shrinkToFit,"shrinkToFit",i.parseBoolean(e.attributes.shrinkToFit)),n(e.attributes.indent,"indent",parseInt(e.attributes.indent,10)),n(e.attributes.textRotation,"textRotation",a.toModel(e.attributes.textRotation)),n(e.attributes.readingOrder,"readingOrder","2"===e.attributes.readingOrder?"rtl":"ltr"),this.model=r?t:null}parseText(){}parseClose(){return!1}}},{"../../../doc/enums":7,"../../../utils/utils":27,"../base-xform":32}],127:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("../../../utils/utils"),s=e("./color-xform");class o extends n{constructor(e){super(),this.name=e,this.map={color:new s}}get tag(){return this.name}render(e,t,r){const n=t&&t.color||r||this.defaultColor;e.openNode(this.name),t&&t.style&&(e.addAttribute("style",t.style),n&&this.map.color.render(e,n)),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.name:{const{style:t}=e.attributes;return this.model=t?{style:t}:void 0,!0}case"color":return this.parser=this.map.color,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):(e===this.name&&this.map.color.model&&(this.model||(this.model={}),this.model.color=this.map.color.model),!1)}validStyle(e){return o.validStyleValues[e]}}o.validStyleValues=["thin","dashed","dotted","dashDot","hair","dashDotDot","slantDashDot","mediumDashed","mediumDashDotDot","mediumDashDot","medium","double","thick"].reduce((e,t)=>(e[t]=!0,e),{});t.exports=class extends n{constructor(){super(),this.map={top:new o("top"),left:new o("left"),bottom:new o("bottom"),right:new o("right"),diagonal:new o("diagonal")}}render(e,t){const{color:r}=t;function n(n,i){n&&!n.color&&t.color&&(n={...n,color:t.color}),i.render(e,n,r)}e.openNode("border"),t.diagonal&&t.diagonal.style&&(t.diagonal.up&&e.addAttribute("diagonalUp","1"),t.diagonal.down&&e.addAttribute("diagonalDown","1")),n(t.left,this.map.left),n(t.right,this.map.right),n(t.top,this.map.top),n(t.bottom,this.map.bottom),n(t.diagonal,this.map.diagonal),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"border":return this.reset(),this.diagonalUp=i.parseBoolean(e.attributes.diagonalUp),this.diagonalDown=i.parseBoolean(e.attributes.diagonalDown),!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;if("border"===e){const e=this.model={},t=function(t,r,n){r&&(n&&Object.assign(r,n),e[t]=r)};t("left",this.map.left.model),t("right",this.map.right.model),t("top",this.map.top.model),t("bottom",this.map.bottom.model),t("diagonal",this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown})}return!1}}},{"../../../utils/utils":27,"../base-xform":32,"./color-xform":128}],128:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{constructor(e){super(),this.name=e||"color"}get tag(){return this.name}render(e,t){return!!t&&(e.openNode(this.name),t.argb?e.addAttribute("rgb",t.argb):void 0!==t.theme?(e.addAttribute("theme",t.theme),void 0!==t.tint&&e.addAttribute("tint",t.tint)):void 0!==t.indexed?e.addAttribute("indexed",t.indexed):e.addAttribute("auto","1"),e.closeNode(),!0)}parseOpen(e){return e.name===this.name&&(e.attributes.rgb?this.model={argb:e.attributes.rgb}:e.attributes.theme?(this.model={theme:parseInt(e.attributes.theme,10)},e.attributes.tint&&(this.model.tint=parseFloat(e.attributes.tint))):e.attributes.indexed?this.model={indexed:parseInt(e.attributes.indexed,10)}:this.model=void 0,!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],129:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("./alignment-xform"),s=e("./border-xform"),o=e("./fill-xform"),a=e("./font-xform"),l=e("./numfmt-xform"),c=e("./protection-xform");t.exports=class extends n{constructor(){super(),this.map={alignment:new i,border:new s,fill:new o,font:new a,numFmt:new l,protection:new c}}get tag(){return"dxf"}render(e,t){if(e.openNode(this.tag),t.font&&this.map.font.render(e,t.font),t.numFmt&&t.numFmtId){const r={id:t.numFmtId,formatCode:t.numFmt};this.map.numFmt.render(e,r)}t.fill&&this.map.fill.render(e,t.fill),t.alignment&&this.map.alignment.render(e,t.alignment),t.border&&this.map.border.render(e,t.border),t.protection&&this.map.protection.render(e,t.protection),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:return this.reset(),!0;default:return this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model},!1)}}},{"../base-xform":32,"./alignment-xform":126,"./border-xform":127,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./protection-xform":133}],130:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("./color-xform");class s extends n{constructor(){super(),this.map={color:new i}}get tag(){return"stop"}render(e,t){e.openNode("stop"),e.addAttribute("position",t.position),this.map.color.render(e,t.color),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"stop":return this.model={position:parseFloat(e.attributes.position)},!0;case"color":return this.parser=this.map.color,this.parser.parseOpen(e),!0;default:return!1}}parseText(){}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model.color=this.parser.model,this.parser=void 0),!0)}}class o extends n{constructor(){super(),this.map={fgColor:new i("fgColor"),bgColor:new i("bgColor")}}get name(){return"pattern"}get tag(){return"patternFill"}render(e,t){e.openNode("patternFill"),e.addAttribute("patternType",t.pattern),t.fgColor&&this.map.fgColor.render(e,t.fgColor),t.bgColor&&this.map.bgColor.render(e,t.bgColor),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"patternFill":return this.model={type:"pattern",pattern:e.attributes.patternType},!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.parser.model&&(this.model[e]=this.parser.model),this.parser=void 0),!0)}}class a extends n{constructor(){super(),this.map={stop:new s}}get name(){return"gradient"}get tag(){return"gradientFill"}render(e,t){switch(e.openNode("gradientFill"),t.gradient){case"angle":e.addAttribute("degree",t.degree);break;case"path":e.addAttribute("type","path"),t.center.left&&(e.addAttribute("left",t.center.left),void 0===t.center.right&&e.addAttribute("right",t.center.left)),t.center.right&&e.addAttribute("right",t.center.right),t.center.top&&(e.addAttribute("top",t.center.top),void 0===t.center.bottom&&e.addAttribute("bottom",t.center.top)),t.center.bottom&&e.addAttribute("bottom",t.center.bottom)}const r=this.map.stop;t.stops.forEach(t=>{r.render(e,t)}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"gradientFill":{const t=this.model={stops:[]};return e.attributes.degree?(t.gradient="angle",t.degree=parseInt(e.attributes.degree,10)):"path"===e.attributes.type&&(t.gradient="path",t.center={left:e.attributes.left?parseFloat(e.attributes.left):0,top:e.attributes.top?parseFloat(e.attributes.top):0},e.attributes.right!==e.attributes.left&&(t.center.right=e.attributes.right?parseFloat(e.attributes.right):0),e.attributes.bottom!==e.attributes.top&&(t.center.bottom=e.attributes.bottom?parseFloat(e.attributes.bottom):0)),!0}case"stop":return this.parser=this.map.stop,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model.stops.push(this.parser.model),this.parser=void 0),!0)}}class l extends n{constructor(){super(),this.map={patternFill:new o,gradientFill:new a}}get tag(){return"fill"}render(e,t){switch(e.addRollback(),e.openNode("fill"),t.type){case"pattern":this.map.patternFill.render(e,t);break;case"gradient":this.map.gradientFill.render(e,t);break;default:return void e.rollback()}e.closeNode(),e.commit()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"fill":return this.model={},!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model=this.parser.model,this.model.type=this.parser.name,this.parser=void 0),!0)}validStyle(e){return l.validPatternValues[e]}}l.validPatternValues=["none","solid","darkVertical","darkGray","mediumGray","lightGray","gray125","gray0625","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","lightGrid"].reduce((e,t)=>(e[t]=!0,e),{}),l.StopXform=s,l.PatternFillXform=o,l.GradientFillXform=a,t.exports=l},{"../base-xform":32,"./color-xform":128}],131:[function(e,t,r){"use strict";const n=e("./color-xform"),i=e("../simple/boolean-xform"),s=e("../simple/integer-xform"),o=e("../simple/string-xform"),a=e("./underline-xform"),l=e("../../../utils/under-dash"),c=e("../base-xform");class u extends c{constructor(e){super(),this.options=e||u.OPTIONS,this.map={b:{prop:"bold",xform:new i({tag:"b",attr:"val"})},i:{prop:"italic",xform:new i({tag:"i",attr:"val"})},u:{prop:"underline",xform:new a},charset:{prop:"charset",xform:new s({tag:"charset",attr:"val"})},color:{prop:"color",xform:new n},condense:{prop:"condense",xform:new i({tag:"condense",attr:"val"})},extend:{prop:"extend",xform:new i({tag:"extend",attr:"val"})},family:{prop:"family",xform:new s({tag:"family",attr:"val"})},outline:{prop:"outline",xform:new i({tag:"outline",attr:"val"})},vertAlign:{prop:"vertAlign",xform:new o({tag:"vertAlign",attr:"val"})},scheme:{prop:"scheme",xform:new o({tag:"scheme",attr:"val"})},shadow:{prop:"shadow",xform:new i({tag:"shadow",attr:"val"})},strike:{prop:"strike",xform:new i({tag:"strike",attr:"val"})},sz:{prop:"size",xform:new s({tag:"sz",attr:"val"})}},this.map[this.options.fontNameTag]={prop:"name",xform:new o({tag:this.options.fontNameTag,attr:"val"})}}get tag(){return this.options.tagName}render(e,t){const{map:r}=this;e.openNode(this.options.tagName),l.each(this.map,(n,i)=>{r[i].xform.render(e,t[n.prop])}),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;if(this.map[e.name])return this.parser=this.map[e.name].xform,this.parser.parseOpen(e);switch(e.name){case this.options.tagName:return this.model={},!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser&&!this.parser.parseClose(e)){const t=this.map[e];return this.parser.model&&(this.model[t.prop]=this.parser.model),this.parser=void 0,!0}switch(e){case this.options.tagName:return!1;default:return!0}}}u.OPTIONS={tagName:"font",fontNameTag:"name"},t.exports=u},{"../../../utils/under-dash":26,"../base-xform":32,"../simple/boolean-xform":116,"../simple/integer-xform":118,"../simple/string-xform":119,"./color-xform":128,"./underline-xform":136}],132:[function(e,t,r){"use strict";const n=e("../../../utils/under-dash"),i=e("../../defaultnumformats"),s=e("../base-xform");const o=function(){const e={};return n.each(i,(t,r)=>{t.f&&(e[t.f]=parseInt(r,10))}),e}();class a extends s{constructor(e,t){super(),this.id=e,this.formatCode=t}get tag(){return"numFmt"}render(e,t){e.leafNode("numFmt",{numFmtId:t.id,formatCode:t.formatCode})}parseOpen(e){switch(e.name){case"numFmt":return this.model={id:parseInt(e.attributes.numFmtId,10),formatCode:e.attributes.formatCode.replace(/[\\](.)/g,"$1")},!0;default:return!1}}parseText(){}parseClose(){return!1}}a.getDefaultFmtId=function(e){return o[e]},a.getDefaultFmtCode=function(e){return i[e]&&i[e].f},t.exports=a},{"../../../utils/under-dash":26,"../../defaultnumformats":30,"../base-xform":32}],133:[function(e,t,r){"use strict";const n=e("../base-xform"),i={boolean:(e,t)=>void 0===e?t:e};t.exports=class extends n{get tag(){return"protection"}render(e,t){e.addRollback(),e.openNode("protection");let r=!1;function n(t,n){void 0!==n&&(e.addAttribute(t,n),r=!0)}n("locked",i.boolean(t.locked,!0)?void 0:"0"),n("hidden",i.boolean(t.hidden,!1)?"1":void 0),e.closeNode(),r?e.commit():e.rollback()}parseOpen(e){const t={locked:!("0"===e.attributes.locked),hidden:"1"===e.attributes.hidden},r=!t.locked||t.hidden;this.model=r?t:null}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],134:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("./alignment-xform"),s=e("./protection-xform");t.exports=class extends n{constructor(e){super(),this.xfId=!(!e||!e.xfId),this.map={alignment:new i,protection:new s}}get tag(){return"xf"}render(e,t){e.openNode("xf",{numFmtId:t.numFmtId||0,fontId:t.fontId||0,fillId:t.fillId||0,borderId:t.borderId||0}),this.xfId&&e.addAttribute("xfId",t.xfId||0),t.numFmtId&&e.addAttribute("applyNumberFormat","1"),t.fontId&&e.addAttribute("applyFont","1"),t.fillId&&e.addAttribute("applyFill","1"),t.borderId&&e.addAttribute("applyBorder","1"),t.alignment&&e.addAttribute("applyAlignment","1"),t.protection&&e.addAttribute("applyProtection","1"),t.alignment&&this.map.alignment.render(e,t.alignment),t.protection&&this.map.protection.render(e,t.protection),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"xf":return this.model={numFmtId:parseInt(e.attributes.numFmtId,10),fontId:parseInt(e.attributes.fontId,10),fillId:parseInt(e.attributes.fillId,10),borderId:parseInt(e.attributes.borderId,10)},this.xfId&&(this.model.xfId=parseInt(e.attributes.xfId,10)),!0;case"alignment":return this.parser=this.map.alignment,this.parser.parseOpen(e),!0;case"protection":return this.parser=this.map.protection,this.parser.parseOpen(e),!0;default:return!1}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){return this.parser?(this.parser.parseClose(e)||(this.map.protection===this.parser?this.model.protection=this.parser.model:this.model.alignment=this.parser.model,this.parser=void 0),!0):"xf"!==e}}},{"../base-xform":32,"./alignment-xform":126,"./protection-xform":133}],135:[function(e,t,r){"use strict";const n=e("../../../doc/enums"),i=e("../../../utils/xml-stream"),s=e("../base-xform"),o=e("../static-xform"),a=e("../list-xform"),l=e("./font-xform"),c=e("./fill-xform"),u=e("./border-xform"),h=e("./numfmt-xform"),f=e("./style-xform"),d=e("./dxf-xform");class p extends s{constructor(e){super(),this.map={numFmts:new a({tag:"numFmts",count:!0,childXform:new h}),fonts:new a({tag:"fonts",count:!0,childXform:new l,$:{"x14ac:knownFonts":1}}),fills:new a({tag:"fills",count:!0,childXform:new c}),borders:new a({tag:"borders",count:!0,childXform:new u}),cellStyleXfs:new a({tag:"cellStyleXfs",count:!0,childXform:new f}),cellXfs:new a({tag:"cellXfs",count:!0,childXform:new f({xfId:!0})}),dxfs:new a({tag:"dxfs",always:!0,count:!0,childXform:new d}),numFmt:new h,font:new l,fill:new c,border:new u,style:new f({xfId:!0}),cellStyles:p.STATIC_XFORMS.cellStyles,tableStyles:p.STATIC_XFORMS.tableStyles,extLst:p.STATIC_XFORMS.extLst},e&&this.init()}initIndex(){this.index={style:{},numFmt:{},numFmtNextId:164,font:{},border:{},fill:{}}}init(){this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]},this.initIndex(),this._addBorder({}),this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}),this._addFill({type:"pattern",pattern:"none"}),this._addFill({type:"pattern",pattern:"gray125"}),this.weakMap=new WeakMap}render(e,t){t=t||this.model,e.openXml(i.StdDocAttributes),e.openNode("styleSheet",p.STYLESHEET_ATTRIBUTES),this.index?(t.numFmts&&t.numFmts.length&&(e.openNode("numFmts",{count:t.numFmts.length}),t.numFmts.forEach(t=>{e.writeXml(t)}),e.closeNode()),t.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),e.openNode("fonts",{count:t.fonts.length,"x14ac:knownFonts":1}),t.fonts.forEach(t=>{e.writeXml(t)}),e.closeNode(),e.openNode("fills",{count:t.fills.length}),t.fills.forEach(t=>{e.writeXml(t)}),e.closeNode(),e.openNode("borders",{count:t.borders.length}),t.borders.forEach(t=>{e.writeXml(t)}),e.closeNode(),this.map.cellStyleXfs.render(e,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),e.openNode("cellXfs",{count:t.styles.length}),t.styles.forEach(t=>{e.writeXml(t)}),e.closeNode()):(this.map.numFmts.render(e,t.numFmts),this.map.fonts.render(e,t.fonts),this.map.fills.render(e,t.fills),this.map.borders.render(e,t.borders),this.map.cellStyleXfs.render(e,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),this.map.cellXfs.render(e,t.styles)),p.STATIC_XFORMS.cellStyles.render(e),this.map.dxfs.render(e,t.dxfs),p.STATIC_XFORMS.tableStyles.render(e),p.STATIC_XFORMS.extLst.render(e),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case"styleSheet":return this.initIndex(),!0;default:return this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case"styleSheet":{this.model={};const e=(e,t)=>{t.model&&t.model.length&&(this.model[e]=t.model)};if(e("numFmts",this.map.numFmts),e("fonts",this.map.fonts),e("fills",this.map.fills),e("borders",this.map.borders),e("styles",this.map.cellXfs),e("dxfs",this.map.dxfs),this.index={model:[],numFmt:[]},this.model.numFmts){const e=this.index.numFmt;this.model.numFmts.forEach(t=>{e[t.id]=t.formatCode})}return!1}default:return!0}}addStyleModel(e,t){if(!e)return 0;if(this.model.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),this.weakMap&&this.weakMap.has(e))return this.weakMap.get(e);const r={};if(t=t||n.ValueType.Number,e.numFmt)r.numFmtId=this._addNumFmtStr(e.numFmt);else switch(t){case n.ValueType.Number:r.numFmtId=this._addNumFmtStr("General");break;case n.ValueType.Date:r.numFmtId=this._addNumFmtStr("mm-dd-yy")}e.font&&(r.fontId=this._addFont(e.font)),e.border&&(r.borderId=this._addBorder(e.border)),e.fill&&(r.fillId=this._addFill(e.fill)),e.alignment&&(r.alignment=e.alignment),e.protection&&(r.protection=e.protection);const i=this._addStyle(r);return this.weakMap&&this.weakMap.set(e,i),i}getStyleModel(e){const t=this.model.styles[e];if(!t)return null;let r=this.index.model[e];if(r)return r;if(r=this.index.model[e]={},t.numFmtId){const e=this.index.numFmt[t.numFmtId]||h.getDefaultFmtCode(t.numFmtId);e&&(r.numFmt=e)}function n(e,t,n){if(n||0===n){const i=t[n];i&&(r[e]=i)}}return n("font",this.model.fonts,t.fontId),n("border",this.model.borders,t.borderId),n("fill",this.model.fills,t.fillId),t.alignment&&(r.alignment=t.alignment),t.protection&&(r.protection=t.protection),r}addDxfStyle(e){return e.numFmt&&(e.numFmtId=this._addNumFmtStr(e.numFmt)),this.model.dxfs.push(e),this.model.dxfs.length-1}getDxfStyle(e){return this.model.dxfs[e]}_addStyle(e){const t=this.map.style.toXml(e);let r=this.index.style[t];return void 0===r&&(r=this.index.style[t]=this.model.styles.length,this.model.styles.push(t)),r}_addNumFmtStr(e){let t=h.getDefaultFmtId(e);if(void 0!==t)return t;if(t=this.index.numFmt[e],void 0!==t)return t;t=this.index.numFmt[e]=164+this.model.numFmts.length;const r=this.map.numFmt.toXml({id:t,formatCode:e});return this.model.numFmts.push(r),t}_addFont(e){const t=this.map.font.toXml(e);let r=this.index.font[t];return void 0===r&&(r=this.index.font[t]=this.model.fonts.length,this.model.fonts.push(t)),r}_addBorder(e){const t=this.map.border.toXml(e);let r=this.index.border[t];return void 0===r&&(r=this.index.border[t]=this.model.borders.length,this.model.borders.push(t)),r}_addFill(e){const t=this.map.fill.toXml(e);let r=this.index.fill[t];return void 0===r&&(r=this.index.fill[t]=this.model.fills.length,this.model.fills.push(t)),r}}p.STYLESHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac x16r2","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac","xmlns:x16r2":"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"},p.STATIC_XFORMS={cellStyles:new o({tag:"cellStyles",$:{count:1},c:[{tag:"cellStyle",$:{name:"Normal",xfId:0,builtinId:0}}]}),dxfs:new o({tag:"dxfs",$:{count:0}}),tableStyles:new o({tag:"tableStyles",$:{count:0,defaultTableStyle:"TableStyleMedium2",defaultPivotStyle:"PivotStyleLight16"}}),extLst:new o({tag:"extLst",c:[{tag:"ext",$:{uri:"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"},c:[{tag:"x14:slicerStyles",$:{defaultSlicerStyle:"SlicerStyleLight1"}}]},{tag:"ext",$:{uri:"{9260A510-F301-46a8-8635-F512D64BE5F5}","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},c:[{tag:"x15:timelineStyles",$:{defaultTimelineStyle:"TimeSlicerStyleLight1"}}]}]})};p.Mock=class extends p{constructor(){super(),this.model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}],borders:[{}],fills:[{type:"pattern",pattern:"none"},{type:"pattern",pattern:"gray125"}]}}parseStream(e){return e.autodrain(),Promise.resolve()}addStyleModel(e,t){switch(t){case n.ValueType.Date:return this.dateStyleId;default:return 0}}get dateStyleId(){if(!this._dateStyleId){const e={numFmtId:h.getDefaultFmtId("mm-dd-yy")};this._dateStyleId=this.model.styles.length,this.model.styles.push(e)}return this._dateStyleId}getStyleModel(){return{}}},t.exports=p},{"../../../doc/enums":7,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./border-xform":127,"./dxf-xform":129,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./style-xform":134}],136:[function(e,t,r){"use strict";const n=e("../base-xform");class i extends n{constructor(e){super(),this.model=e}get tag(){return"u"}render(e,t){if(!0===(t=t||this.model))e.leafNode("u");else{const r=i.Attributes[t];r&&e.leafNode("u",r)}}parseOpen(e){"u"===e.name&&(this.model=e.attributes.val||!0)}parseText(){}parseClose(){return!1}}i.Attributes={single:{},double:{val:"double"},singleAccounting:{val:"singleAccounting"},doubleAccounting:{val:"doubleAccounting"}},t.exports=i},{"../base-xform":32}],137:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("./filter-column-xform");t.exports=class extends n{constructor(){super(),this.map={filterColumn:new i}}get tag(){return"autoFilter"}prepare(e){e.columns.forEach((e,t)=>{this.map.filterColumn.prepare(e,{index:t})})}render(e,t){return e.openNode(this.tag,{ref:t.autoFilterRef}),t.columns.forEach(t=>{this.map.filterColumn.render(e,t)}),e.closeNode(),!0}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:return this.model={autoFilterRef:e.attributes.ref,columns:[]},!0;default:if(this.parser=this.map[e.name],this.parser)return this.parseOpen(e),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.model.columns.push(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:throw new Error("Unexpected xml node in parseClose: "+e)}}}},{"../base-xform":32,"./filter-column-xform":139}],138:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"customFilter"}render(e,t){e.leafNode(this.tag,{val:t.val,operator:t.operator})}parseOpen(e){return e.name===this.tag&&(this.model={val:e.attributes.val,operator:e.attributes.operator},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],139:[function(e,t,r){"use strict";const n=e("../base-xform"),i=e("../list-xform"),s=e("./custom-filter-xform"),o=e("./filter-xform");t.exports=class extends n{constructor(){super(),this.map={customFilters:new i({tag:"customFilters",count:!1,empty:!0,childXform:new s}),filters:new i({tag:"filters",count:!1,empty:!0,childXform:new o})}}get tag(){return"filterColumn"}prepare(e,t){e.colId=t.index.toString()}render(e,t){return t.customFilters?(e.openNode(this.tag,{colId:t.colId,hiddenButton:t.filterButton?"0":"1"}),this.map.customFilters.render(e,t.customFilters),e.closeNode(),!0):(e.leafNode(this.tag,{colId:t.colId,hiddenButton:t.filterButton?"0":"1"}),!0)}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;const{attributes:t}=e;switch(e.name){case this.tag:return this.model={filterButton:"0"===t.hiddenButton},!0;default:if(this.parser=this.map[e.name],this.parser)return this.parseOpen(e),!0;throw new Error("Unexpected xml node in parseOpen: "+JSON.stringify(e))}}parseText(){}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.customFilters=this.map.customFilters.model,!1;default:return!0}}}},{"../base-xform":32,"../list-xform":71,"./custom-filter-xform":138,"./filter-xform":140}],140:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"filter"}render(e,t){e.leafNode(this.tag,{val:t.val})}parseOpen(e){return e.name===this.tag&&(this.model={val:e.attributes.val},!0)}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],141:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"tableColumn"}prepare(e,t){e.id=t.index+1}render(e,t){return e.leafNode(this.tag,{id:t.id.toString(),name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId}),!0}parseOpen(e){if(e.name===this.tag){const{attributes:t}=e;return this.model={name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId},!0}return!1}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],142:[function(e,t,r){"use strict";const n=e("../base-xform");t.exports=class extends n{get tag(){return"tableStyleInfo"}render(e,t){return e.leafNode(this.tag,{name:t.theme?t.theme:void 0,showFirstColumn:t.showFirstColumn?"1":"0",showLastColumn:t.showLastColumn?"1":"0",showRowStripes:t.showRowStripes?"1":"0",showColumnStripes:t.showColumnStripes?"1":"0"}),!0}parseOpen(e){if(e.name===this.tag){const{attributes:t}=e;return this.model={theme:t.name?t.name:null,showFirstColumn:"1"===t.showFirstColumn,showLastColumn:"1"===t.showLastColumn,showRowStripes:"1"===t.showRowStripes,showColumnStripes:"1"===t.showColumnStripes},!0}return!1}parseText(){}parseClose(){return!1}}},{"../base-xform":32}],143:[function(e,t,r){"use strict";const n=e("../../../utils/xml-stream"),i=e("../base-xform"),s=e("../list-xform"),o=e("./auto-filter-xform"),a=e("./table-column-xform"),l=e("./table-style-info-xform");class c extends i{constructor(){super(),this.map={autoFilter:new o,tableColumns:new s({tag:"tableColumns",count:!0,empty:!0,childXform:new a}),tableStyleInfo:new l}}prepare(e,t){this.map.autoFilter.prepare(e),this.map.tableColumns.prepare(e.columns,t)}get tag(){return"table"}render(e,t){e.openXml(n.StdDocAttributes),e.openNode(this.tag,{...c.TABLE_ATTRIBUTES,id:t.id,name:t.name,displayName:t.displayName||t.name,ref:t.tableRef,totalsRowCount:t.totalsRow?"1":void 0,totalsRowShown:t.totalsRow?void 0:"1",headerRowCount:t.headerRow?"1":"0"}),this.map.autoFilter.render(e,t),this.map.tableColumns.render(e,t.columns),this.map.tableStyleInfo.render(e,t.style),e.closeNode()}parseOpen(e){if(this.parser)return this.parser.parseOpen(e),!0;const{name:t,attributes:r}=e;switch(t){case this.tag:this.reset(),this.model={name:r.name,displayName:r.displayName||r.name,tableRef:r.ref,totalsRow:"1"===r.totalsRowCount,headerRow:"1"===r.headerRowCount};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}parseText(e){this.parser&&this.parser.parseText(e)}parseClose(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.columns=this.map.tableColumns.model,this.map.autoFilter.model&&(this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef,this.map.autoFilter.model.columns.forEach((e,t)=>{this.model.columns[t].filterButton=e.filterButton})),this.model.style=this.map.tableStyleInfo.model,!1;default:return!0}}reconcile(e,t){e.columns.forEach(e=>{void 0!==e.dxfId&&(e.style=t.styles.getDxfStyle(e.dxfId))})}}c.TABLE_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"xr xr3","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision","xmlns:xr3":"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3"},t.exports=c},{"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":137,"./table-column-xform":141,"./table-style-info-xform":142}],144:[function(e,t,r){(function(r,n){(function(){"use strict";const i=e("fs"),s=e("jszip"),{PassThrough:o}=e("readable-stream"),a=e("../utils/zip-stream"),l=e("../utils/stream-buf"),c=e("../utils/utils"),u=e("../utils/xml-stream"),{bufferToString:h}=e("../utils/browser-buffer-decode"),f=e("./xform/style/styles-xform"),d=e("./xform/core/core-xform"),p=e("./xform/strings/shared-strings-xform"),m=e("./xform/core/relationships-xform"),b=e("./xform/core/content-types-xform"),g=e("./xform/core/app-xform"),y=e("./xform/book/workbook-xform"),v=e("./xform/sheet/worksheet-xform"),w=e("./xform/drawing/drawing-xform"),_=e("./xform/table/table-xform"),x=e("./xform/comment/comments-xform"),k=e("./xform/comment/vml-notes-xform"),S=e("./xml/theme1");class M{constructor(e){this.workbook=e}async readFile(e,t){if(!await c.fs.exists(e))throw new Error("File not found: "+e);const r=i.createReadStream(e);try{const e=await this.read(r,t);return r.close(),e}catch(e){throw r.close(),e}}parseRels(e){return(new m).parseStream(e)}parseWorkbook(e){return(new y).parseStream(e)}parseSharedStrings(e){return(new p).parseStream(e)}reconcile(e,t){const r=new y,n=new v(t),i=new w,s=new _;r.reconcile(e);const o={media:e.media,mediaIndex:e.mediaIndex};Object.keys(e.drawings).forEach(t=>{const r=e.drawings[t],n=e.drawingRels[t];n&&(o.rels=n.reduce((e,t)=>(e[t.Id]=t,e),{}),(r.anchors||[]).forEach(e=>{const t=e.picture&&e.picture.hyperlinks;t&&o.rels[t.rId]&&(t.hyperlink=o.rels[t.rId].Target,delete t.rId)}),i.reconcile(r,o))});const a={styles:e.styles};Object.values(e.tables).forEach(e=>{s.reconcile(e,a)});const l={styles:e.styles,sharedStrings:e.sharedStrings,media:e.media,mediaIndex:e.mediaIndex,date1904:e.properties&&e.properties.date1904,drawings:e.drawings,comments:e.comments,tables:e.tables,vmlDrawings:e.vmlDrawings};e.worksheets.forEach(t=>{t.relationships=e.worksheetRels[t.sheetNo],n.reconcile(t,l)}),delete e.worksheetHash,delete e.worksheetRels,delete e.globalRels,delete e.sharedStrings,delete e.workbookRels,delete e.sheetDefs,delete e.styles,delete e.mediaIndex,delete e.drawings,delete e.drawingRels,delete e.vmlDrawings}async _processWorksheetEntry(e,t,r,n,i){const s=new v(n),o=await s.parseStream(e);o.sheetNo=r,t.worksheetHash[i]=o,t.worksheets.push(o)}async _processCommentEntry(e,t,r){const n=new x,i=await n.parseStream(e);t.comments[`../${r}.xml`]=i}async _processTableEntry(e,t,r){const n=new _,i=await n.parseStream(e);t.tables[`../tables/${r}.xml`]=i}async _processWorksheetRelsEntry(e,t,r){const n=new m,i=await n.parseStream(e);t.worksheetRels[r]=i}async _processMediaEntry(e,t,r){const n=r.lastIndexOf(".");if(n>=1){const i=r.substr(n+1),s=r.substr(0,n);await new Promise((n,o)=>{const a=new l;a.on("finish",()=>{t.mediaIndex[r]=t.media.length,t.mediaIndex[s]=t.media.length;const e={type:"image",name:s,extension:i,buffer:a.toBuffer()};t.media.push(e),n()}),e.on("error",e=>{o(e)}),e.pipe(a)})}}async _processDrawingEntry(e,t,r){const n=new w,i=await n.parseStream(e);t.drawings[r]=i}async _processDrawingRelsEntry(e,t,r){const n=new m,i=await n.parseStream(e);t.drawingRels[r]=i}async _processVmlDrawingEntry(e,t,r){const n=new k,i=await n.parseStream(e);t.vmlDrawings[`../drawings/${r}.vml`]=i}async _processThemeEntry(e,t,r){await new Promise((n,i)=>{const s=new l;e.on("error",i),s.on("error",i),s.on("finish",()=>{t.themes[r]=s.read().toString(),n()}),e.pipe(s)})}createInputStream(){throw new Error("`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}async read(e,t){!e[Symbol.asyncIterator]&&e.pipe&&(e=e.pipe(new o));const r=[];for await(const t of e)r.push(t);return this.load(n.concat(r),t)}async load(e,t){let i;i=t&&t.base64?n.from(e.toString(),"base64"):e;const a={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},l=await s.loadAsync(i);for(const e of Object.values(l.files))if(!e.dir){let n,i=e.name;if("/"===i[0]&&(i=i.substr(1)),i.match(/xl\/media\//)||i.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/))n=new o,n.write(await e.async("nodebuffer"));else{let t;n=new o({writableObjectMode:!0,readableObjectMode:!0}),t=r.browser?h(await e.async("nodebuffer")):await e.async("string");const i=16384;for(let e=0;e{if("image"===t.type){const r=`xl/media/${t.name}.${t.extension}`;if(t.filename){const n=await function(e,t){return new Promise((r,n)=>{i.readFile(e,t,(e,t)=>{e?n(e):r(t)})})}(t.filename);return e.append(n,{name:r})}if(t.buffer)return e.append(t.buffer,{name:r});if(t.base64){const n=t.base64,i=n.substring(n.indexOf(",")+1);return e.append(i,{name:r,base64:!0})}}throw new Error("Unsupported media")}))}addDrawings(e,t){const r=new w,n=new m;t.worksheets.forEach(t=>{const{drawing:i}=t;if(i){r.prepare(i,{});let t=r.toXml(i);e.append(t,{name:`xl/drawings/${i.name}.xml`}),t=n.toXml(i.rels),e.append(t,{name:`xl/drawings/_rels/${i.name}.xml.rels`})}})}addTables(e,t){const r=new _;t.worksheets.forEach(t=>{const{tables:n}=t;n.forEach(t=>{r.prepare(t,{});const n=r.toXml(t);e.append(n,{name:"xl/tables/"+t.target})})})}async addContentTypes(e,t){const r=(new b).toXml(t);e.append(r,{name:"[Content_Types].xml"})}async addApp(e,t){const r=(new g).toXml(t);e.append(r,{name:"docProps/app.xml"})}async addCore(e,t){const r=new d;e.append(r.toXml(t),{name:"docProps/core.xml"})}async addThemes(e,t){const r=t.themes||{theme1:S};Object.keys(r).forEach(t=>{const n=r[t],i=`xl/theme/${t}.xml`;e.append(n,{name:i})})}async addOfficeRels(e){const t=(new m).toXml([{Id:"rId1",Type:M.RelType.OfficeDocument,Target:"xl/workbook.xml"},{Id:"rId2",Type:M.RelType.CoreProperties,Target:"docProps/core.xml"},{Id:"rId3",Type:M.RelType.ExtenderProperties,Target:"docProps/app.xml"}]);e.append(t,{name:"_rels/.rels"})}async addWorkbookRels(e,t){let r=1;const n=[{Id:"rId"+r++,Type:M.RelType.Styles,Target:"styles.xml"},{Id:"rId"+r++,Type:M.RelType.Theme,Target:"theme/theme1.xml"}];t.sharedStrings.count&&n.push({Id:"rId"+r++,Type:M.RelType.SharedStrings,Target:"sharedStrings.xml"}),t.worksheets.forEach(e=>{e.rId="rId"+r++,n.push({Id:e.rId,Type:M.RelType.Worksheet,Target:`worksheets/sheet${e.id}.xml`})});const i=(new m).toXml(n);e.append(i,{name:"xl/_rels/workbook.xml.rels"})}async addSharedStrings(e,t){t.sharedStrings&&t.sharedStrings.count&&e.append(t.sharedStrings.xml,{name:"xl/sharedStrings.xml"})}async addStyles(e,t){const{xml:r}=t.styles;r&&e.append(r,{name:"xl/styles.xml"})}async addWorkbook(e,t){const r=new y;e.append(r.toXml(t),{name:"xl/workbook.xml"})}async addWorksheets(e,t){const r=new v,n=new m,i=new x,s=new k;t.worksheets.forEach(t=>{let o=new u;r.render(o,t),e.append(o.xml,{name:`xl/worksheets/sheet${t.id}.xml`}),t.rels&&t.rels.length&&(o=new u,n.render(o,t.rels),e.append(o.xml,{name:`xl/worksheets/_rels/sheet${t.id}.xml.rels`})),t.comments.length>0&&(o=new u,i.render(o,t),e.append(o.xml,{name:`xl/comments${t.id}.xml`}),o=new u,s.render(o,t),e.append(o.xml,{name:`xl/drawings/vmlDrawing${t.id}.vml`}))})}_finalize(e){return new Promise((t,r)=>{e.on("finish",()=>{t(this)}),e.on("error",r),e.finalize()})}prepareModel(e,t){e.creator=e.creator||"ExcelJS",e.lastModifiedBy=e.lastModifiedBy||"ExcelJS",e.created=e.created||new Date,e.modified=e.modified||new Date,e.useSharedStrings=void 0===t.useSharedStrings||t.useSharedStrings,e.useStyles=void 0===t.useStyles||t.useStyles,e.sharedStrings=new p,e.styles=e.useStyles?new f(!0):new f.Mock;const r=new y,n=new v;r.prepare(e);const i={sharedStrings:e.sharedStrings,styles:e.styles,date1904:e.properties.date1904,drawingsCount:0,media:e.media};i.drawings=e.drawings=[],i.commentRefs=e.commentRefs=[];let s=0;e.tables=[],e.worksheets.forEach(t=>{t.tables.forEach(t=>{s++,t.target=`table${s}.xml`,t.id=s,e.tables.push(t)}),n.prepare(t,i)})}async write(e,t){t=t||{};const{model:r}=this.workbook,n=new a.ZipWriter(t.zip);return n.pipe(e),this.prepareModel(r,t),await this.addContentTypes(n,r),await this.addOfficeRels(n,r),await this.addWorkbookRels(n,r),await this.addWorksheets(n,r),await this.addSharedStrings(n,r),await this.addDrawings(n,r),await this.addTables(n,r),await Promise.all([this.addThemes(n,r),this.addStyles(n,r)]),await this.addMedia(n,r),await Promise.all([this.addApp(n,r),this.addCore(n,r)]),await this.addWorkbook(n,r),this._finalize(n)}writeFile(e,t){const r=i.createWriteStream(e);return new Promise((e,n)=>{r.on("finish",()=>{e()}),r.on("error",e=>{n(e)}),this.write(r,t).then(()=>{r.end()}).catch(e=>{n(e)})})}async writeBuffer(e){const t=new l;return await this.write(t,e),t.read()}}M.RelType=e("./rel-type"),t.exports=M}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":24,"../utils/utils":27,"../utils/xml-stream":28,"../utils/zip-stream":29,"./rel-type":31,"./xform/book/workbook-xform":38,"./xform/comment/comments-xform":40,"./xform/comment/vml-notes-xform":45,"./xform/core/app-xform":51,"./xform/core/content-types-xform":52,"./xform/core/core-xform":53,"./xform/core/relationships-xform":55,"./xform/drawing/drawing-xform":62,"./xform/sheet/worksheet-xform":115,"./xform/strings/shared-strings-xform":124,"./xform/style/styles-xform":135,"./xform/table/table-xform":143,"./xml/theme1":145,_process:467,buffer:220,fs:216,jszip:441,"readable-stream":491}],145:[function(e,t,r){"use strict";t.exports='\n '},{}],146:[function(e,t,r){(function(t){(function(){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.CsvFormatterStream=void 0;const n=e("stream"),i=e("./formatter");class s extends n.Transform{constructor(e){super({writableObjectMode:e.objectMode}),this.hasWrittenBOM=!1,this.formatterOptions=e,this.rowFormatter=new i.RowFormatter(e),this.hasWrittenBOM=!e.writeBOM}transform(e){return this.rowFormatter.rowTransform=e,this}_transform(e,r,n){let i=!1;try{this.hasWrittenBOM||(this.push(this.formatterOptions.BOM),this.hasWrittenBOM=!0),this.rowFormatter.format(e,(e,r)=>e?(i=!0,n(e)):(r&&r.forEach(e=>{this.push(t.from(e,"utf8"))}),i=!0,n()))}catch(e){if(i)throw e;n(e)}}_flush(e){this.rowFormatter.finish((r,n)=>r?e(r):(n&&n.forEach(e=>{this.push(t.from(e,"utf8"))}),e()))}}r.CsvFormatterStream=s}).call(this)}).call(this,e("buffer").Buffer)},{"./formatter":150,buffer:220,stream:505}],147:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.FormatterOptions=void 0;r.FormatterOptions=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var t;this.objectMode=!0,this.delimiter=",",this.rowDelimiter="\n",this.quote='"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.writeBOM=!1,this.BOM="\ufeff",this.alwaysWriteHeaders=!1,Object.assign(this,e||{}),void 0===(null==e?void 0:e.quoteHeaders)&&(this.quoteHeaders=this.quoteColumns),!0===(null==e?void 0:e.quote)?this.quote='"':!1===(null==e?void 0:e.quote)&&(this.quote=""),"string"!=typeof(null==e?void 0:e.escape)&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers&&(null===(t=e.writeHeaders)||void 0===t||t),this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=`${this.escape}${this.quote}`}}},{}],148:[function(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.FieldFormatter=void 0;const i=n(e("lodash.isboolean")),s=n(e("lodash.isnil")),o=n(e("lodash.escaperegexp"));r.FieldFormatter=class{constructor(e){this._headers=null,this.formatterOptions=e,null!==e.headers&&(this.headers=e.headers),this.REPLACE_REGEXP=new RegExp(e.quote,"g");const t=`[${e.delimiter}${o.default(e.rowDelimiter)}|\r|\n]`;this.ESCAPE_REGEXP=new RegExp(t)}set headers(e){this._headers=e}shouldQuote(e,t){const r=t?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;return i.default(r)?r:Array.isArray(r)?r[e]:null!==this._headers&&r[this._headers[e]]}format(e,t,r){const n=(""+(s.default(e)?"":e)).replace(/\0/g,""),{formatterOptions:i}=this;if(""!==i.quote){if(-1!==n.indexOf(i.quote))return this.quoteField(n.replace(this.REPLACE_REGEXP,i.escapedQuote))}return-1!==n.search(this.ESCAPE_REGEXP)||this.shouldQuote(t,r)?this.quoteField(n):n}quoteField(e){const{quote:t}=this.formatterOptions;return`${t}${e}${t}`}}},{"lodash.escaperegexp":442,"lodash.isboolean":444,"lodash.isnil":447}],149:[function(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.RowFormatter=void 0;const i=n(e("lodash.isfunction")),s=n(e("lodash.isequal")),o=e("./FieldFormatter"),a=e("../types");class l{constructor(e){this.rowCount=0,this.formatterOptions=e,this.fieldFormatter=new o.FieldFormatter(e),this.headers=e.headers,this.shouldWriteHeaders=e.shouldWriteHeaders,this.hasWrittenHeaders=!1,null!==this.headers&&(this.fieldFormatter.headers=this.headers),e.transform&&(this.rowTransform=e.transform)}static isRowHashArray(e){return!!Array.isArray(e)&&(Array.isArray(e[0])&&2===e[0].length)}static isRowArray(e){return Array.isArray(e)&&!this.isRowHashArray(e)}static gatherHeaders(e){return l.isRowHashArray(e)?e.map(e=>e[0]):Array.isArray(e)?e:Object.keys(e)}static createTransform(e){return a.isSyncTransform(e)?(t,r)=>{let n=null;try{n=e(t)}catch(e){return r(e)}return r(null,n)}:(t,r)=>{e(t,r)}}set rowTransform(e){if(!i.default(e))throw new TypeError("The transform should be a function");this._rowTransform=l.createTransform(e)}format(e,t){this.callTransformer(e,(r,n)=>{if(r)return t(r);if(!e)return t(null);const i=[];if(n){const{shouldFormatColumns:e,headers:t}=this.checkHeaders(n);if(this.shouldWriteHeaders&&t&&!this.hasWrittenHeaders&&(i.push(this.formatColumns(t,!0)),this.hasWrittenHeaders=!0),e){const e=this.gatherColumns(n);i.push(this.formatColumns(e,!1))}}return t(null,i)})}finish(e){const t=[];if(this.formatterOptions.alwaysWriteHeaders&&0===this.rowCount){if(!this.headers)return e(new Error("`alwaysWriteHeaders` option is set to true but `headers` option not provided."));t.push(this.formatColumns(this.headers,!0))}return this.formatterOptions.includeEndRowDelimiter&&t.push(this.formatterOptions.rowDelimiter),e(null,t)}checkHeaders(e){if(this.headers)return{shouldFormatColumns:!0,headers:this.headers};const t=l.gatherHeaders(e);return this.headers=t,this.fieldFormatter.headers=t,this.shouldWriteHeaders?{shouldFormatColumns:!s.default(t,e),headers:t}:{shouldFormatColumns:!0,headers:null}}gatherColumns(e){if(null===this.headers)throw new Error("Headers is currently null");return Array.isArray(e)?l.isRowHashArray(e)?this.headers.map((t,r)=>{const n=e[r];return n?n[1]:""}):l.isRowArray(e)&&!this.shouldWriteHeaders?e:this.headers.map((t,r)=>e[r]):this.headers.map(t=>e[t])}callTransformer(e,t){return this._rowTransform?this._rowTransform(e,t):t(null,e)}formatColumns(e,t){const r=e.map((e,r)=>this.fieldFormatter.format(e,r,t)).join(this.formatterOptions.delimiter),{rowCount:n}=this;return this.rowCount+=1,n?[this.formatterOptions.rowDelimiter,r].join(""):r}}r.RowFormatter=l},{"../types":152,"./FieldFormatter":148,"lodash.isequal":445,"lodash.isfunction":446}],150:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.FieldFormatter=r.RowFormatter=void 0;var n=e("./RowFormatter");Object.defineProperty(r,"RowFormatter",{enumerable:!0,get:function(){return n.RowFormatter}});var i=e("./FieldFormatter");Object.defineProperty(r,"FieldFormatter",{enumerable:!0,get:function(){return i.FieldFormatter}})},{"./FieldFormatter":148,"./RowFormatter":149}],151:[function(e,t,r){(function(t){(function(){"use strict";var n=Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},i=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},o=function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(r,"__esModule",{value:!0}),r.writeToPath=r.writeToString=r.writeToBuffer=r.writeToStream=r.write=r.format=r.FormatterOptions=r.CsvFormatterStream=void 0;const a=e("util"),l=e("stream"),c=s(e("fs")),u=e("./FormatterOptions"),h=e("./CsvFormatterStream");o(e("./types"),r);var f=e("./CsvFormatterStream");Object.defineProperty(r,"CsvFormatterStream",{enumerable:!0,get:function(){return f.CsvFormatterStream}});var d=e("./FormatterOptions");Object.defineProperty(r,"FormatterOptions",{enumerable:!0,get:function(){return d.FormatterOptions}}),r.format=e=>new h.CsvFormatterStream(new u.FormatterOptions(e)),r.write=(e,t)=>{const n=r.format(t),i=a.promisify((e,t)=>{n.write(e,void 0,t)});return e.reduce((e,t)=>e.then(()=>i(t)),Promise.resolve()).then(()=>n.end()).catch(e=>{n.emit("error",e)}),n},r.writeToStream=(e,t,n)=>r.write(t,n).pipe(e),r.writeToBuffer=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=[],s=new l.Writable({write(e,t,r){i.push(e),r()}});return new Promise((o,a)=>{s.on("error",a).on("finish",()=>o(t.concat(i))),r.write(e,n).pipe(s)})},r.writeToString=(e,t)=>r.writeToBuffer(e,t).then(e=>e.toString()),r.writeToPath=(e,t,n)=>{const i=c.createWriteStream(e,{encoding:"utf8"});return r.write(t,n).pipe(i)}}).call(this)}).call(this,e("buffer").Buffer)},{"./CsvFormatterStream":146,"./FormatterOptions":147,"./types":152,buffer:220,fs:216,stream:505,util:527}],152:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.isSyncTransform=void 0,r.isSyncTransform=e=>1===e.length},{}],153:[function(e,t,r){(function(t){(function(){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.CsvParserStream=void 0;const n=e("string_decoder"),i=e("stream"),s=e("./transforms"),o=e("./parser");class a extends i.Transform{constructor(e){super({objectMode:e.objectMode}),this.lines="",this.rowCount=0,this.parsedRowCount=0,this.parsedLineCount=0,this.endEmitted=!1,this.headersEmitted=!1,this.parserOptions=e,this.parser=new o.Parser(e),this.headerTransformer=new s.HeaderTransformer(e),this.decoder=new n.StringDecoder(e.encoding),this.rowTransformerValidator=new s.RowTransformerValidator}get hasHitRowLimit(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}get shouldEmitRows(){return this.parsedRowCount>this.parserOptions.skipRows}get shouldSkipLine(){return this.parsedLineCount<=this.parserOptions.skipLines}transform(e){return this.rowTransformerValidator.rowTransform=e,this}validate(e){return this.rowTransformerValidator.rowValidator=e,this}emit(e){if("end"===e)return this.endEmitted||(this.endEmitted=!0,super.emit("end",this.rowCount)),!1;for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n{const o=e=>e?r(e):s%100!=0?i(s+1):void t(()=>i(s+1));if(this.checkAndEmitHeaders(),s>=n||this.hasHitRowLimit)return r();if(this.parsedLineCount+=1,this.shouldSkipLine)return o();const a=e[s];this.rowCount+=1,this.parsedRowCount+=1;const l=this.rowCount;return this.transformRow(a,(e,t)=>{if(e)return this.rowCount-=1,o(e);if(!t)return o(new Error("expected transform result"));if(t.isValid){if(t.row)return this.pushRow(t.row,o)}else this.emit("data-invalid",t.row,l,t.reason);return o()})};i(0)}transformRow(e,t){try{this.headerTransformer.transform(e,(r,n)=>r?t(r):n?n.isValid?n.row?this.shouldEmitRows?this.rowTransformerValidator.transformAndValidate(n.row,t):this.skipRow(t):(this.rowCount-=1,this.parsedRowCount-=1,t(null,{row:null,isValid:!0})):this.shouldEmitRows?t(null,{isValid:!1,row:e}):this.skipRow(t):t(new Error("Expected result from header transform")))}catch(e){t(e)}}checkAndEmitHeaders(){!this.headersEmitted&&this.headerTransformer.headers&&(this.headersEmitted=!0,this.emit("headers",this.headerTransformer.headers))}skipRow(e){return this.rowCount-=1,e(null,{row:null,isValid:!0})}pushRow(e,t){try{this.parserOptions.objectMode?this.push(e):this.push(JSON.stringify(e)),t()}catch(e){t(e)}}static wrapDoneCallback(e){let t=!1;return function(r){if(r){if(t)throw r;return t=!0,void e(r)}for(var n=arguments.length,i=new Array(n>1?n-1:0),s=1;s1)throw new Error("delimiter option must be one character long");this.escapedDelimiter=i.default(this.delimiter),this.escapeChar=null!==(t=this.escape)&&void 0!==t?t:this.quote,this.supportsComments=!s.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`),this.maxRows>0&&(this.limitRows=!0)}}},{"lodash.escaperegexp":442,"lodash.isnil":447}],155:[function(e,t,r){"use strict";var n=Object.create?function(e,t,r,n){void 0===n&&(n=r),Object.defineProperty(e,n,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]},i=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},o=function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(r,"__esModule",{value:!0}),r.parseString=r.parseFile=r.parseStream=r.parse=r.ParserOptions=r.CsvParserStream=void 0;const a=s(e("fs")),l=e("stream"),c=e("./ParserOptions"),u=e("./CsvParserStream");o(e("./types"),r);var h=e("./CsvParserStream");Object.defineProperty(r,"CsvParserStream",{enumerable:!0,get:function(){return h.CsvParserStream}});var f=e("./ParserOptions");Object.defineProperty(r,"ParserOptions",{enumerable:!0,get:function(){return f.ParserOptions}}),r.parse=e=>new u.CsvParserStream(new c.ParserOptions(e)),r.parseStream=(e,t)=>e.pipe(new u.CsvParserStream(new c.ParserOptions(t))),r.parseFile=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return a.createReadStream(e).pipe(new u.CsvParserStream(new c.ParserOptions(t)))},r.parseString=(e,t)=>{const r=new l.Readable;return r.push(e),r.push(null),r.pipe(new u.CsvParserStream(new c.ParserOptions(t)))}},{"./CsvParserStream":153,"./ParserOptions":154,"./types":169,fs:216,stream:505}],156:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Parser=void 0;const n=e("./Scanner"),i=e("./RowParser"),s=e("./Token");class o{constructor(e){this.parserOptions=e,this.rowParser=new i.RowParser(this.parserOptions)}static removeBOM(e){return e&&65279===e.charCodeAt(0)?e.slice(1):e}parse(e,t){const r=new n.Scanner({line:o.removeBOM(e),parserOptions:this.parserOptions,hasMoreData:t});return this.parserOptions.supportsComments?this.parseWithComments(r):this.parseWithoutComments(r)}parseWithoutComments(e){const t=[];let r=!0;for(;r;)r=this.parseRow(e,t);return{line:e.line,rows:t}}parseWithComments(e){const{parserOptions:t}=this,r=[];for(let n=e.nextCharacterToken;null!==n;n=e.nextCharacterToken)if(s.Token.isTokenComment(n,t)){if(null===e.advancePastLine())return{line:e.lineFromCursor,rows:r};if(!e.hasMoreCharacters)return{line:e.lineFromCursor,rows:r};e.truncateToCursor()}else if(!this.parseRow(e,r))break;return{line:e.line,rows:r}}parseRow(e,t){if(!e.nextNonSpaceToken)return!1;const r=this.rowParser.parse(e);return null!==r&&(this.parserOptions.ignoreEmpty&&i.RowParser.isEmptyRow(r)||t.push(r),!0)}}r.Parser=o},{"./RowParser":157,"./Scanner":158,"./Token":159}],157:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.RowParser=void 0;const n=e("./column"),i=e("./Token");r.RowParser=class{constructor(e){this.parserOptions=e,this.columnParser=new n.ColumnParser(e)}static isEmptyRow(e){return""===e.join("").replace(/\s+/g,"")}parse(e){const{parserOptions:t}=this,{hasMoreData:r}=e,n=e,s=[];let o=this.getStartToken(n,s);for(;o;){if(i.Token.isTokenRowDelimiter(o))return n.advancePastToken(o),!n.hasMoreCharacters&&i.Token.isTokenCarriageReturn(o,t)&&r?null:(n.truncateToCursor(),s);if(!this.shouldSkipColumnParse(n,o,s)){const e=this.columnParser.parse(n);if(null===e)return null;s.push(e)}o=n.nextNonSpaceToken}return r?null:(n.truncateToCursor(),s)}getStartToken(e,t){const r=e.nextNonSpaceToken;return null!==r&&i.Token.isTokenDelimiter(r,this.parserOptions)?(t.push(""),e.nextNonSpaceToken):r}shouldSkipColumnParse(e,t,r){const{parserOptions:n}=this;if(i.Token.isTokenDelimiter(t,n)){e.advancePastToken(t);const s=e.nextCharacterToken;if(!e.hasMoreCharacters||null!==s&&i.Token.isTokenRowDelimiter(s))return r.push(""),!0;if(null!==s&&i.Token.isTokenDelimiter(s,n))return r.push(""),!0}return!1}}},{"./Token":159,"./column":164}],158:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Scanner=void 0;const n=e("./Token"),i=/((?:\r\n)|\n|\r)/;r.Scanner=class{constructor(e){this.cursor=0,this.line=e.line,this.lineLength=this.line.length,this.parserOptions=e.parserOptions,this.hasMoreData=e.hasMoreData,this.cursor=e.cursor||0}get hasMoreCharacters(){return this.lineLength>this.cursor}get nextNonSpaceToken(){const{lineFromCursor:e}=this,t=this.parserOptions.NEXT_TOKEN_REGEXP;if(-1===e.search(t))return null;const r=t.exec(e);if(null==r)return null;const i=r[1],s=this.cursor+(r.index||0);return new n.Token({token:i,startCursor:s,endCursor:s+i.length-1})}get nextCharacterToken(){const{cursor:e,lineLength:t}=this;return t<=e?null:new n.Token({token:this.line[e],startCursor:e,endCursor:e})}get lineFromCursor(){return this.line.substr(this.cursor)}advancePastLine(){const e=i.exec(this.lineFromCursor);return e?(this.cursor+=(e.index||0)+e[0].length,this):this.hasMoreData?null:(this.cursor=this.lineLength,this)}advanceTo(e){return this.cursor=e,this}advanceToToken(e){return this.cursor=e.startCursor,this}advancePastToken(e){return this.cursor=e.endCursor+1,this}truncateToCursor(){return this.line=this.lineFromCursor,this.lineLength=this.line.length,this.cursor=0,this}}},{"./Token":159}],159:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Token=void 0;r.Token=class{constructor(e){this.token=e.token,this.startCursor=e.startCursor,this.endCursor=e.endCursor}static isTokenRowDelimiter(e){const t=e.token;return"\r"===t||"\n"===t||"\r\n"===t}static isTokenCarriageReturn(e,t){return e.token===t.carriageReturn}static isTokenComment(e,t){return t.supportsComments&&!!e&&e.token===t.comment}static isTokenEscapeCharacter(e,t){return e.token===t.escapeChar}static isTokenQuote(e,t){return e.token===t.quote}static isTokenDelimiter(e,t){return e.token===t.delimiter}}},{}],160:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ColumnFormatter=void 0;r.ColumnFormatter=class{constructor(e){e.trim?this.format=e=>e.trim():e.ltrim?this.format=e=>e.trimLeft():e.rtrim?this.format=e=>e.trimRight():this.format=e=>e}}},{}],161:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ColumnParser=void 0;const n=e("./NonQuotedColumnParser"),i=e("./QuotedColumnParser"),s=e("../Token");r.ColumnParser=class{constructor(e){this.parserOptions=e,this.quotedColumnParser=new i.QuotedColumnParser(e),this.nonQuotedColumnParser=new n.NonQuotedColumnParser(e)}parse(e){const{nextNonSpaceToken:t}=e;return null!==t&&s.Token.isTokenQuote(t,this.parserOptions)?(e.advanceToToken(t),this.quotedColumnParser.parse(e)):this.nonQuotedColumnParser.parse(e)}}},{"../Token":159,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],162:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.NonQuotedColumnParser=void 0;const n=e("./ColumnFormatter"),i=e("../Token");r.NonQuotedColumnParser=class{constructor(e){this.parserOptions=e,this.columnFormatter=new n.ColumnFormatter(e)}parse(e){if(!e.hasMoreCharacters)return null;const{parserOptions:t}=this,r=[];let n=e.nextCharacterToken;for(;n&&(!i.Token.isTokenDelimiter(n,t)&&!i.Token.isTokenRowDelimiter(n));n=e.nextCharacterToken)r.push(n.token),e.advancePastToken(n);return this.columnFormatter.format(r.join(""))}}},{"../Token":159,"./ColumnFormatter":160}],163:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.QuotedColumnParser=void 0;const n=e("./ColumnFormatter"),i=e("../Token");r.QuotedColumnParser=class{constructor(e){this.parserOptions=e,this.columnFormatter=new n.ColumnFormatter(e)}parse(e){if(!e.hasMoreCharacters)return null;const t=e.cursor,{foundClosingQuote:r,col:n}=this.gatherDataBetweenQuotes(e);if(!r){if(e.advanceTo(t),!e.hasMoreData)throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote||""}' in line: at '${e.lineFromCursor.replace(/[\r\n]/g,"\\n'")}'`);return null}return this.checkForMalformedColumn(e),n}gatherDataBetweenQuotes(e){const{parserOptions:t}=this;let r=!1,n=!1;const s=[];let o=e.nextCharacterToken;for(;!n&&null!==o;o=e.nextCharacterToken){const a=i.Token.isTokenQuote(o,t);if(!r&&a)r=!0;else if(r)if(i.Token.isTokenEscapeCharacter(o,t)){e.advancePastToken(o);const r=e.nextCharacterToken;null!==r&&(i.Token.isTokenQuote(r,t)||i.Token.isTokenEscapeCharacter(r,t))?(s.push(r.token),o=r):a?n=!0:s.push(o.token)}else a?n=!0:s.push(o.token);e.advancePastToken(o)}return{col:this.columnFormatter.format(s.join("")),foundClosingQuote:n}}checkForMalformedColumn(e){const{parserOptions:t}=this,{nextNonSpaceToken:r}=e;if(r){const n=i.Token.isTokenDelimiter(r,t),s=i.Token.isTokenRowDelimiter(r);if(!n&&!s){const n=e.lineFromCursor.substr(0,10).replace(/[\r\n]/g,"\\n'");throw new Error(`Parse Error: expected: '${t.escapedDelimiter}' OR new line got: '${r.token}'. at '${n}`)}e.advanceToToken(r)}else e.hasMoreData||e.advancePastLine()}}},{"../Token":159,"./ColumnFormatter":160}],164:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ColumnFormatter=r.QuotedColumnParser=r.NonQuotedColumnParser=r.ColumnParser=void 0;var n=e("./ColumnParser");Object.defineProperty(r,"ColumnParser",{enumerable:!0,get:function(){return n.ColumnParser}});var i=e("./NonQuotedColumnParser");Object.defineProperty(r,"NonQuotedColumnParser",{enumerable:!0,get:function(){return i.NonQuotedColumnParser}});var s=e("./QuotedColumnParser");Object.defineProperty(r,"QuotedColumnParser",{enumerable:!0,get:function(){return s.QuotedColumnParser}});var o=e("./ColumnFormatter");Object.defineProperty(r,"ColumnFormatter",{enumerable:!0,get:function(){return o.ColumnFormatter}})},{"./ColumnFormatter":160,"./ColumnParser":161,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],165:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.QuotedColumnParser=r.NonQuotedColumnParser=r.ColumnParser=r.Token=r.Scanner=r.RowParser=r.Parser=void 0;var n=e("./Parser");Object.defineProperty(r,"Parser",{enumerable:!0,get:function(){return n.Parser}});var i=e("./RowParser");Object.defineProperty(r,"RowParser",{enumerable:!0,get:function(){return i.RowParser}});var s=e("./Scanner");Object.defineProperty(r,"Scanner",{enumerable:!0,get:function(){return s.Scanner}});var o=e("./Token");Object.defineProperty(r,"Token",{enumerable:!0,get:function(){return o.Token}});var a=e("./column");Object.defineProperty(r,"ColumnParser",{enumerable:!0,get:function(){return a.ColumnParser}}),Object.defineProperty(r,"NonQuotedColumnParser",{enumerable:!0,get:function(){return a.NonQuotedColumnParser}}),Object.defineProperty(r,"QuotedColumnParser",{enumerable:!0,get:function(){return a.QuotedColumnParser}})},{"./Parser":156,"./RowParser":157,"./Scanner":158,"./Token":159,"./column":164}],166:[function(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.HeaderTransformer=void 0;const i=n(e("lodash.isundefined")),s=n(e("lodash.isfunction")),o=n(e("lodash.uniq")),a=n(e("lodash.groupby"));r.HeaderTransformer=class{constructor(e){this.headers=null,this.receivedHeaders=!1,this.shouldUseFirstRow=!1,this.processedFirstRow=!1,this.headersLength=0,this.parserOptions=e,!0===e.headers?this.shouldUseFirstRow=!0:Array.isArray(e.headers)?this.setHeaders(e.headers):s.default(e.headers)&&(this.headersTransform=e.headers)}transform(e,t){return this.shouldMapRow(e)?t(null,this.processRow(e)):t(null,{row:null,isValid:!0})}shouldMapRow(e){const{parserOptions:t}=this;if(!this.headersTransform&&t.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders)throw new Error("Error renaming headers: new headers must be provided in an array");return this.processedFirstRow=!0,!1}if(!this.receivedHeaders&&Array.isArray(e)){if(this.headersTransform)this.setHeaders(this.headersTransform(e));else{if(!this.shouldUseFirstRow)return!0;this.setHeaders(e)}return!1}return!0}processRow(e){if(!this.headers)return{row:e,isValid:!0};const{parserOptions:t}=this;if(!t.discardUnmappedColumns&&e.length>this.headersLength){if(!t.strictColumnHandling)throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${e.length}`);return{row:e,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${e.length}`}}return t.strictColumnHandling&&e.length!!e);if(o.default(r).length!==r.length){const e=a.default(r),t=Object.keys(e).filter(t=>e[t].length>1);throw new Error("Duplicate headers found "+JSON.stringify(t))}this.headers=e,this.receivedHeaders=!0,this.headersLength=(null===(t=this.headers)||void 0===t?void 0:t.length)||0}}},{"lodash.groupby":443,"lodash.isfunction":446,"lodash.isundefined":448,"lodash.uniq":449}],167:[function(e,t,r){"use strict";var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,"__esModule",{value:!0}),r.RowTransformerValidator=void 0;const i=n(e("lodash.isfunction")),s=e("../types");class o{constructor(){this._rowTransform=null,this._rowValidator=null}static createTransform(e){return s.isSyncTransform(e)?(t,r)=>{let n=null;try{n=e(t)}catch(e){return r(e)}return r(null,n)}:e}static createValidator(e){return s.isSyncValidate(e)?(t,r)=>{r(null,{row:t,isValid:e(t)})}:(t,r)=>{e(t,(e,n,i)=>e?r(e):r(null,n?{row:t,isValid:n,reason:i}:{row:t,isValid:!1,reason:i}))}}set rowTransform(e){if(!i.default(e))throw new TypeError("The transform should be a function");this._rowTransform=o.createTransform(e)}set rowValidator(e){if(!i.default(e))throw new TypeError("The validate should be a function");this._rowValidator=o.createValidator(e)}transformAndValidate(e,t){return this.callTransformer(e,(e,r)=>e?t(e):r?this.callValidator(r,(e,n)=>e?t(e):n&&!n.isValid?t(null,{row:r,isValid:!1,reason:n.reason}):t(null,{row:r,isValid:!0})):t(null,{row:null,isValid:!0}))}callTransformer(e,t){return this._rowTransform?this._rowTransform(e,t):t(null,e)}callValidator(e,t){return this._rowValidator?this._rowValidator(e,t):t(null,{row:e,isValid:!0})}}r.RowTransformerValidator=o},{"../types":169,"lodash.isfunction":446}],168:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.HeaderTransformer=r.RowTransformerValidator=void 0;var n=e("./RowTransformerValidator");Object.defineProperty(r,"RowTransformerValidator",{enumerable:!0,get:function(){return n.RowTransformerValidator}});var i=e("./HeaderTransformer");Object.defineProperty(r,"HeaderTransformer",{enumerable:!0,get:function(){return i.HeaderTransformer}})},{"./HeaderTransformer":166,"./RowTransformerValidator":167}],169:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.isSyncValidate=r.isSyncTransform=void 0,r.isSyncTransform=e=>1===e.length,r.isSyncValidate=e=>1===e.length},{}],170:[function(e,t,r){"use strict";const n=r;n.bignum=e("bn.js"),n.define=e("./asn1/api").define,n.base=e("./asn1/base"),n.constants=e("./asn1/constants"),n.decoders=e("./asn1/decoders"),n.encoders=e("./asn1/encoders")},{"./asn1/api":171,"./asn1/base":173,"./asn1/constants":177,"./asn1/decoders":179,"./asn1/encoders":182,"bn.js":184}],171:[function(e,t,r){"use strict";const n=e("./encoders"),i=e("./decoders"),s=e("inherits");function o(e,t){this.name=e,this.body=t,this.decoders={},this.encoders={}}r.define=function(e,t){return new o(e,t)},o.prototype._createNamed=function(e){const t=this.name;function r(e){this._initNamed(e,t)}return s(r,e),r.prototype._initNamed=function(t,r){e.call(this,t,r)},new r(this)},o.prototype._getDecoder=function(e){return e=e||"der",this.decoders.hasOwnProperty(e)||(this.decoders[e]=this._createNamed(i[e])),this.decoders[e]},o.prototype.decode=function(e,t,r){return this._getDecoder(t).decode(e,r)},o.prototype._getEncoder=function(e){return e=e||"der",this.encoders.hasOwnProperty(e)||(this.encoders[e]=this._createNamed(n[e])),this.encoders[e]},o.prototype.encode=function(e,t,r){return this._getEncoder(t).encode(e,r)}},{"./decoders":179,"./encoders":182,inherits:440}],172:[function(e,t,r){"use strict";const n=e("inherits"),i=e("../base/reporter").Reporter,s=e("safer-buffer").Buffer;function o(e,t){i.call(this,t),s.isBuffer(e)?(this.base=e,this.offset=0,this.length=e.length):this.error("Input not Buffer")}function a(e,t){if(Array.isArray(e))this.length=0,this.value=e.map((function(e){return a.isEncoderBuffer(e)||(e=new a(e,t)),this.length+=e.length,e}),this);else if("number"==typeof e){if(!(0<=e&&e<=255))return t.error("non-byte EncoderBuffer value");this.value=e,this.length=1}else if("string"==typeof e)this.value=e,this.length=s.byteLength(e);else{if(!s.isBuffer(e))return t.error("Unsupported type: "+typeof e);this.value=e,this.length=e.length}}n(o,i),r.DecoderBuffer=o,o.isDecoderBuffer=function(e){if(e instanceof o)return!0;return"object"==typeof e&&s.isBuffer(e.base)&&"DecoderBuffer"===e.constructor.name&&"number"==typeof e.offset&&"number"==typeof e.length&&"function"==typeof e.save&&"function"==typeof e.restore&&"function"==typeof e.isEmpty&&"function"==typeof e.readUInt8&&"function"==typeof e.skip&&"function"==typeof e.raw},o.prototype.save=function(){return{offset:this.offset,reporter:i.prototype.save.call(this)}},o.prototype.restore=function(e){const t=new o(this.base);return t.offset=e.offset,t.length=this.offset,this.offset=e.offset,i.prototype.restore.call(this,e.reporter),t},o.prototype.isEmpty=function(){return this.offset===this.length},o.prototype.readUInt8=function(e){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(e||"DecoderBuffer overrun")},o.prototype.skip=function(e,t){if(!(this.offset+e<=this.length))return this.error(t||"DecoderBuffer overrun");const r=new o(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+e,this.offset+=e,r},o.prototype.raw=function(e){return this.base.slice(e?e.offset:this.offset,this.length)},r.EncoderBuffer=a,a.isEncoderBuffer=function(e){if(e instanceof a)return!0;return"object"==typeof e&&"EncoderBuffer"===e.constructor.name&&"number"==typeof e.length&&"function"==typeof e.join},a.prototype.join=function(e,t){return e||(e=s.alloc(this.length)),t||(t=0),0===this.length||(Array.isArray(this.value)?this.value.forEach((function(r){r.join(e,t),t+=r.length})):("number"==typeof this.value?e[t]=this.value:"string"==typeof this.value?e.write(this.value,t):s.isBuffer(this.value)&&this.value.copy(e,t),t+=this.length)),e}},{"../base/reporter":175,inherits:440,"safer-buffer":495}],173:[function(e,t,r){"use strict";const n=r;n.Reporter=e("./reporter").Reporter,n.DecoderBuffer=e("./buffer").DecoderBuffer,n.EncoderBuffer=e("./buffer").EncoderBuffer,n.Node=e("./node")},{"./buffer":172,"./node":174,"./reporter":175}],174:[function(e,t,r){"use strict";const n=e("../base/reporter").Reporter,i=e("../base/buffer").EncoderBuffer,s=e("../base/buffer").DecoderBuffer,o=e("minimalistic-assert"),a=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],l=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(a);function c(e,t,r){const n={};this._baseState=n,n.name=r,n.enc=e,n.parent=t||null,n.children=null,n.tag=null,n.args=null,n.reverseArgs=null,n.choice=null,n.optional=!1,n.any=!1,n.obj=!1,n.use=null,n.useDecoder=null,n.key=null,n.default=null,n.explicit=null,n.implicit=null,n.contains=null,n.parent||(n.children=[],this._wrap())}t.exports=c;const u=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];c.prototype.clone=function(){const e=this._baseState,t={};u.forEach((function(r){t[r]=e[r]}));const r=new this.constructor(t.parent);return r._baseState=t,r},c.prototype._wrap=function(){const e=this._baseState;l.forEach((function(t){this[t]=function(){const r=new this.constructor(this);return e.children.push(r),r[t].apply(r,arguments)}}),this)},c.prototype._init=function(e){const t=this._baseState;o(null===t.parent),e.call(this),t.children=t.children.filter((function(e){return e._baseState.parent===this}),this),o.equal(t.children.length,1,"Root node can have only one child")},c.prototype._useArgs=function(e){const t=this._baseState,r=e.filter((function(e){return e instanceof this.constructor}),this);e=e.filter((function(e){return!(e instanceof this.constructor)}),this),0!==r.length&&(o(null===t.children),t.children=r,r.forEach((function(e){e._baseState.parent=this}),this)),0!==e.length&&(o(null===t.args),t.args=e,t.reverseArgs=e.map((function(e){if("object"!=typeof e||e.constructor!==Object)return e;const t={};return Object.keys(e).forEach((function(r){r==(0|r)&&(r|=0);const n=e[r];t[n]=r})),t})))},["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"].forEach((function(e){c.prototype[e]=function(){const t=this._baseState;throw new Error(e+" not implemented for encoding: "+t.enc)}})),a.forEach((function(e){c.prototype[e]=function(){const t=this._baseState,r=Array.prototype.slice.call(arguments);return o(null===t.tag),t.tag=e,this._useArgs(r),this}})),c.prototype.use=function(e){o(e);const t=this._baseState;return o(null===t.use),t.use=e,this},c.prototype.optional=function(){return this._baseState.optional=!0,this},c.prototype.def=function(e){const t=this._baseState;return o(null===t.default),t.default=e,t.optional=!0,this},c.prototype.explicit=function(e){const t=this._baseState;return o(null===t.explicit&&null===t.implicit),t.explicit=e,this},c.prototype.implicit=function(e){const t=this._baseState;return o(null===t.explicit&&null===t.implicit),t.implicit=e,this},c.prototype.obj=function(){const e=this._baseState,t=Array.prototype.slice.call(arguments);return e.obj=!0,0!==t.length&&this._useArgs(t),this},c.prototype.key=function(e){const t=this._baseState;return o(null===t.key),t.key=e,this},c.prototype.any=function(){return this._baseState.any=!0,this},c.prototype.choice=function(e){const t=this._baseState;return o(null===t.choice),t.choice=e,this._useArgs(Object.keys(e).map((function(t){return e[t]}))),this},c.prototype.contains=function(e){const t=this._baseState;return o(null===t.use),t.contains=e,this},c.prototype._decode=function(e,t){const r=this._baseState;if(null===r.parent)return e.wrapResult(r.children[0]._decode(e,t));let n,i=r.default,o=!0,a=null;if(null!==r.key&&(a=e.enterKey(r.key)),r.optional){let n=null;if(null!==r.explicit?n=r.explicit:null!==r.implicit?n=r.implicit:null!==r.tag&&(n=r.tag),null!==n||r.any){if(o=this._peekTag(e,n,r.any),e.isError(o))return o}else{const n=e.save();try{null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t),o=!0}catch(e){o=!1}e.restore(n)}}if(r.obj&&o&&(n=e.enterObject()),o){if(null!==r.explicit){const t=this._decodeTag(e,r.explicit);if(e.isError(t))return t;e=t}const n=e.offset;if(null===r.use&&null===r.choice){let t;r.any&&(t=e.save());const n=this._decodeTag(e,null!==r.implicit?r.implicit:r.tag,r.any);if(e.isError(n))return n;r.any?i=e.raw(t):e=n}if(t&&t.track&&null!==r.tag&&t.track(e.path(),n,e.length,"tagged"),t&&t.track&&null!==r.tag&&t.track(e.path(),e.offset,e.length,"content"),r.any||(i=null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t)),e.isError(i))return i;if(r.any||null!==r.choice||null===r.children||r.children.forEach((function(r){r._decode(e,t)})),r.contains&&("octstr"===r.tag||"bitstr"===r.tag)){const n=new s(i);i=this._getUse(r.contains,e._reporterState.obj)._decode(n,t)}}return r.obj&&o&&(i=e.leaveObject(n)),null===r.key||null===i&&!0!==o?null!==a&&e.exitKey(a):e.leaveKey(a,r.key,i),i},c.prototype._decodeGeneric=function(e,t,r){const n=this._baseState;return"seq"===e||"set"===e?null:"seqof"===e||"setof"===e?this._decodeList(t,e,n.args[0],r):/str$/.test(e)?this._decodeStr(t,e,r):"objid"===e&&n.args?this._decodeObjid(t,n.args[0],n.args[1],r):"objid"===e?this._decodeObjid(t,null,null,r):"gentime"===e||"utctime"===e?this._decodeTime(t,e,r):"null_"===e?this._decodeNull(t,r):"bool"===e?this._decodeBool(t,r):"objDesc"===e?this._decodeStr(t,e,r):"int"===e||"enum"===e?this._decodeInt(t,n.args&&n.args[0],r):null!==n.use?this._getUse(n.use,t._reporterState.obj)._decode(t,r):t.error("unknown tag: "+e)},c.prototype._getUse=function(e,t){const r=this._baseState;return r.useDecoder=this._use(e,t),o(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},c.prototype._decodeChoice=function(e,t){const r=this._baseState;let n=null,i=!1;return Object.keys(r.choice).some((function(s){const o=e.save(),a=r.choice[s];try{const r=a._decode(e,t);if(e.isError(r))return!1;n={type:s,value:r},i=!0}catch(t){return e.restore(o),!1}return!0}),this),i?n:e.error("Choice not matched")},c.prototype._createEncoderBuffer=function(e){return new i(e,this.reporter)},c.prototype._encode=function(e,t,r){const n=this._baseState;if(null!==n.default&&n.default===e)return;const i=this._encodeValue(e,t,r);return void 0===i||this._skipDefault(i,t,r)?void 0:i},c.prototype._encodeValue=function(e,t,r){const i=this._baseState;if(null===i.parent)return i.children[0]._encode(e,t||new n);let s=null;if(this.reporter=t,i.optional&&void 0===e){if(null===i.default)return;e=i.default}let o=null,a=!1;if(i.any)s=this._createEncoderBuffer(e);else if(i.choice)s=this._encodeChoice(e,t);else if(i.contains)o=this._getUse(i.contains,r)._encode(e,t),a=!0;else if(i.children)o=i.children.map((function(r){if("null_"===r._baseState.tag)return r._encode(null,t,e);if(null===r._baseState.key)return t.error("Child should have a key");const n=t.enterKey(r._baseState.key);if("object"!=typeof e)return t.error("Child expected, but input is not object");const i=r._encode(e[r._baseState.key],t,e);return t.leaveKey(n),i}),this).filter((function(e){return e})),o=this._createEncoderBuffer(o);else if("seqof"===i.tag||"setof"===i.tag){if(!i.args||1!==i.args.length)return t.error("Too many args for : "+i.tag);if(!Array.isArray(e))return t.error("seqof/setof, but data is not Array");const r=this.clone();r._baseState.implicit=null,o=this._createEncoderBuffer(e.map((function(r){const n=this._baseState;return this._getUse(n.args[0],e)._encode(r,t)}),r))}else null!==i.use?s=this._getUse(i.use,r)._encode(e,t):(o=this._encodePrimitive(i.tag,e),a=!0);if(!i.any&&null===i.choice){const e=null!==i.implicit?i.implicit:i.tag,r=null===i.implicit?"universal":"context";null===e?null===i.use&&t.error("Tag could be omitted only for .use()"):null===i.use&&(s=this._encodeComposite(e,a,r,o))}return null!==i.explicit&&(s=this._encodeComposite(i.explicit,!1,"context",s)),s},c.prototype._encodeChoice=function(e,t){const r=this._baseState,n=r.choice[e.type];return n||o(!1,e.type+" not found in "+JSON.stringify(Object.keys(r.choice))),n._encode(e.value,t)},c.prototype._encodePrimitive=function(e,t){const r=this._baseState;if(/str$/.test(e))return this._encodeStr(t,e);if("objid"===e&&r.args)return this._encodeObjid(t,r.reverseArgs[0],r.args[1]);if("objid"===e)return this._encodeObjid(t,null,null);if("gentime"===e||"utctime"===e)return this._encodeTime(t,e);if("null_"===e)return this._encodeNull();if("int"===e||"enum"===e)return this._encodeInt(t,r.args&&r.reverseArgs[0]);if("bool"===e)return this._encodeBool(t);if("objDesc"===e)return this._encodeStr(t,e);throw new Error("Unsupported tag: "+e)},c.prototype._isNumstr=function(e){return/^[0-9 ]*$/.test(e)},c.prototype._isPrintstr=function(e){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(e)}},{"../base/buffer":172,"../base/reporter":175,"minimalistic-assert":453}],175:[function(e,t,r){"use strict";const n=e("inherits");function i(e){this._reporterState={obj:null,path:[],options:e||{},errors:[]}}function s(e,t){this.path=e,this.rethrow(t)}r.Reporter=i,i.prototype.isError=function(e){return e instanceof s},i.prototype.save=function(){const e=this._reporterState;return{obj:e.obj,pathLen:e.path.length}},i.prototype.restore=function(e){const t=this._reporterState;t.obj=e.obj,t.path=t.path.slice(0,e.pathLen)},i.prototype.enterKey=function(e){return this._reporterState.path.push(e)},i.prototype.exitKey=function(e){const t=this._reporterState;t.path=t.path.slice(0,e-1)},i.prototype.leaveKey=function(e,t,r){const n=this._reporterState;this.exitKey(e),null!==n.obj&&(n.obj[t]=r)},i.prototype.path=function(){return this._reporterState.path.join("/")},i.prototype.enterObject=function(){const e=this._reporterState,t=e.obj;return e.obj={},t},i.prototype.leaveObject=function(e){const t=this._reporterState,r=t.obj;return t.obj=e,r},i.prototype.error=function(e){let t;const r=this._reporterState,n=e instanceof s;if(t=n?e:new s(r.path.map((function(e){return"["+JSON.stringify(e)+"]"})).join(""),e.message||e,e.stack),!r.options.partial)throw t;return n||r.errors.push(t),t},i.prototype.wrapResult=function(e){const t=this._reporterState;return t.options.partial?{result:this.isError(e)?null:e,errors:t.errors}:e},n(s,Error),s.prototype.rethrow=function(e){if(this.message=e+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,s),!this.stack)try{throw new Error(this.message)}catch(e){this.stack=e.stack}return this}},{inherits:440}],176:[function(e,t,r){"use strict";function n(e){const t={};return Object.keys(e).forEach((function(r){(0|r)==r&&(r|=0);const n=e[r];t[n]=r})),t}r.tagClass={0:"universal",1:"application",2:"context",3:"private"},r.tagClassByName=n(r.tagClass),r.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},r.tagByName=n(r.tag)},{}],177:[function(e,t,r){"use strict";const n=r;n._reverse=function(e){const t={};return Object.keys(e).forEach((function(r){(0|r)==r&&(r|=0);const n=e[r];t[n]=r})),t},n.der=e("./der")},{"./der":176}],178:[function(e,t,r){"use strict";const n=e("inherits"),i=e("bn.js"),s=e("../base/buffer").DecoderBuffer,o=e("../base/node"),a=e("../constants/der");function l(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=new c,this.tree._init(e.body)}function c(e){o.call(this,"der",e)}function u(e,t){let r=e.readUInt8(t);if(e.isError(r))return r;const n=a.tagClass[r>>6],i=0==(32&r);if(31==(31&r)){let n=r;for(r=0;128==(128&n);){if(n=e.readUInt8(t),e.isError(n))return n;r<<=7,r|=127&n}}else r&=31;return{cls:n,primitive:i,tag:r,tagStr:a.tag[r]}}function h(e,t,r){let n=e.readUInt8(r);if(e.isError(n))return n;if(!t&&128===n)return null;if(0==(128&n))return n;const i=127&n;if(i>4)return e.error("length octect is too long");n=0;for(let t=0;t=31)return n.error("Multi-octet tag encoding unsupported");t||(i|=32);return i|=o.tagClassByName[r||"universal"]<<6,i}(e,t,r,this.reporter);if(n.length<128){const e=i.alloc(2);return e[0]=s,e[1]=n.length,this._createEncoderBuffer([e,n])}let a=1;for(let e=n.length;e>=256;e>>=8)a++;const l=i.alloc(2+a);l[0]=s,l[1]=128|a;for(let e=1+a,t=n.length;t>0;e--,t>>=8)l[e]=255&t;return this._createEncoderBuffer([l,n])},l.prototype._encodeStr=function(e,t){if("bitstr"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if("bmpstr"===t){const t=i.alloc(2*e.length);for(let r=0;r=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}let n=0;for(let t=0;t=128;r>>=7)n++}const s=i.alloc(n);let o=s.length-1;for(let t=e.length-1;t>=0;t--){let r=e[t];for(s[o--]=127&r;(r>>=7)>0;)s[o--]=128|127&r}return this._createEncoderBuffer(s)},l.prototype._encodeTime=function(e,t){let r;const n=new Date(e);return"gentime"===t?r=[c(n.getUTCFullYear()),c(n.getUTCMonth()+1),c(n.getUTCDate()),c(n.getUTCHours()),c(n.getUTCMinutes()),c(n.getUTCSeconds()),"Z"].join(""):"utctime"===t?r=[c(n.getUTCFullYear()%100),c(n.getUTCMonth()+1),c(n.getUTCDate()),c(n.getUTCHours()),c(n.getUTCMinutes()),c(n.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+t+" time is not supported yet"),this._encodeStr(r,"octstr")},l.prototype._encodeNull=function(){return this._createEncoderBuffer("")},l.prototype._encodeInt=function(e,t){if("string"==typeof e){if(!t)return this.reporter.error("String int or enum given, but no values map");if(!t.hasOwnProperty(e))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(e));e=t[e]}if("number"!=typeof e&&!i.isBuffer(e)){const t=e.toArray();!e.sign&&128&t[0]&&t.unshift(0),e=i.from(t)}if(i.isBuffer(e)){let t=e.length;0===e.length&&t++;const r=i.alloc(t);return e.copy(r),0===e.length&&(r[0]=0),this._createEncoderBuffer(r)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);let r=1;for(let t=e;t>=256;t>>=8)r++;const n=new Array(r);for(let t=n.length-1;t>=0;t--)n[t]=255&e,e>>=8;return 128&n[0]&&n.unshift(0),this._createEncoderBuffer(i.from(n))},l.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},l.prototype._use=function(e,t){return"function"==typeof e&&(e=e(t)),e._getEncoder("der").tree},l.prototype._skipDefault=function(e,t,r){const n=this._baseState;let i;if(null===n.default)return!1;const s=e.join();if(void 0===n.defaultBuffer&&(n.defaultBuffer=this._encodeValue(n.default,t,r).join()),s.length!==n.defaultBuffer.length)return!1;for(i=0;i=65&&r<=70?r-55:r>=97&&r<=102?r-87:r-48&15}function l(e,t,r){var n=a(e,r);return r-1>=t&&(n|=a(e,r-1)<<4),n}function c(e,t,r,n){for(var i=0,s=Math.min(e.length,r),o=t;o=49?a-49+10:a>=17?a-17+10:a}return i}s.isBN=function(e){return e instanceof s||null!==e&&"object"==typeof e&&e.constructor.wordSize===s.wordSize&&Array.isArray(e.words)},s.max=function(e,t){return e.cmp(t)>0?e:t},s.min=function(e,t){return e.cmp(t)<0?e:t},s.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"==typeof e)return this._initArray(e,t,r);"hex"===t&&(t=16),n(t===(0|t)&&t>=2&&t<=36);var i=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&(i++,this.negative=1),i=0;i-=3)o=e[i]|e[i-1]<<8|e[i-2]<<16,this.words[s]|=o<>>26-a&67108863,(a+=24)>=26&&(a-=26,s++);else if("le"===r)for(i=0,s=0;i>>26-a&67108863,(a+=24)>=26&&(a-=26,s++);return this.strip()},s.prototype._parseHex=function(e,t,r){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var n=0;n=t;n-=2)i=l(e,t,n)<=18?(s-=18,o+=1,this.words[o]|=i>>>26):s+=8;else for(n=(e.length-t)%2==0?t+1:t;n=18?(s-=18,o+=1,this.words[o]|=i>>>26):s+=8;this.strip()},s.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=t)n++;n--,i=i/t|0;for(var s=e.length-r,o=s%n,a=Math.min(s,s-o)+r,l=0,u=r;u1&&0===this.words[this.length-1];)this.length--;return this._normSign()},s.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},s.prototype.inspect=function(){return(this.red?""};var u=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],h=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],f=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],s=0|t.words[0],o=i*s,a=67108863&o,l=o/67108864|0;r.words[0]=a;for(var c=1;c>>26,h=67108863&l,f=Math.min(c,t.length-1),d=Math.max(0,c-e.length+1);d<=f;d++){var p=c-d|0;u+=(o=(i=0|e.words[p])*(s=0|t.words[d])+h)/67108864|0,h=67108863&o}r.words[c]=0|h,l=0|u}return 0!==l?r.words[c]=0|l:r.length--,r.strip()}s.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var i=0,s=0,o=0;o>>24-i&16777215)||o!==this.length-1?u[6-l.length]+l+r:l+r,(i+=2)>=26&&(i-=26,o--)}for(0!==s&&(r=s.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var c=h[e],d=f[e];r="";var p=this.clone();for(p.negative=0;!p.isZero();){var m=p.modn(d).toString(e);r=(p=p.idivn(d)).isZero()?m+r:u[c-m.length]+m+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},s.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},s.prototype.toJSON=function(){return this.toString(16)},s.prototype.toBuffer=function(e,t){return n(void 0!==o),this.toArrayLike(o,e,t)},s.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},s.prototype.toArrayLike=function(e,t,r){var i=this.byteLength(),s=r||Math.max(1,i);n(i<=s,"byte array longer than desired length"),n(s>0,"Requested array length <= 0"),this.strip();var o,a,l="le"===t,c=new e(s),u=this.clone();if(l){for(a=0;!u.isZero();a++)o=u.andln(255),u.iushrn(8),c[a]=o;for(;a=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},s.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},s.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},s.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},s.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},s.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},s.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},s.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},s.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},s.prototype.inotn=function(e){n("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var i=0;i0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},s.prototype.notn=function(e){return this.clone().inotn(e)},s.prototype.setn=function(e,t){n("number"==typeof e&&e>=0);var r=e/26|0,i=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,s=0;s>>26;for(;0!==i&&s>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},s.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=e):(r=e,n=this);for(var s=0,o=0;o>26,this.words[o]=67108863&t;for(;0!==s&&o>26,this.words[o]=67108863&t;if(0===s&&o>>13,d=0|o[1],p=8191&d,m=d>>>13,b=0|o[2],g=8191&b,y=b>>>13,v=0|o[3],w=8191&v,_=v>>>13,x=0|o[4],k=8191&x,S=x>>>13,M=0|o[5],C=8191&M,T=M>>>13,E=0|o[6],A=8191&E,R=E>>>13,O=0|o[7],j=8191&O,I=O>>>13,N=0|o[8],P=8191&N,B=N>>>13,D=0|o[9],F=8191&D,L=D>>>13,z=0|a[0],U=8191&z,$=z>>>13,H=0|a[1],V=8191&H,q=H>>>13,W=0|a[2],X=8191&W,K=W>>>13,Y=0|a[3],Z=8191&Y,G=Y>>>13,J=0|a[4],Q=8191&J,ee=J>>>13,te=0|a[5],re=8191&te,ne=te>>>13,ie=0|a[6],se=8191&ie,oe=ie>>>13,ae=0|a[7],le=8191&ae,ce=ae>>>13,ue=0|a[8],he=8191&ue,fe=ue>>>13,de=0|a[9],pe=8191&de,me=de>>>13;r.negative=e.negative^t.negative,r.length=19;var be=(c+(n=Math.imul(h,U))|0)+((8191&(i=(i=Math.imul(h,$))+Math.imul(f,U)|0))<<13)|0;c=((s=Math.imul(f,$))+(i>>>13)|0)+(be>>>26)|0,be&=67108863,n=Math.imul(p,U),i=(i=Math.imul(p,$))+Math.imul(m,U)|0,s=Math.imul(m,$);var ge=(c+(n=n+Math.imul(h,V)|0)|0)+((8191&(i=(i=i+Math.imul(h,q)|0)+Math.imul(f,V)|0))<<13)|0;c=((s=s+Math.imul(f,q)|0)+(i>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(g,U),i=(i=Math.imul(g,$))+Math.imul(y,U)|0,s=Math.imul(y,$),n=n+Math.imul(p,V)|0,i=(i=i+Math.imul(p,q)|0)+Math.imul(m,V)|0,s=s+Math.imul(m,q)|0;var ye=(c+(n=n+Math.imul(h,X)|0)|0)+((8191&(i=(i=i+Math.imul(h,K)|0)+Math.imul(f,X)|0))<<13)|0;c=((s=s+Math.imul(f,K)|0)+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(w,U),i=(i=Math.imul(w,$))+Math.imul(_,U)|0,s=Math.imul(_,$),n=n+Math.imul(g,V)|0,i=(i=i+Math.imul(g,q)|0)+Math.imul(y,V)|0,s=s+Math.imul(y,q)|0,n=n+Math.imul(p,X)|0,i=(i=i+Math.imul(p,K)|0)+Math.imul(m,X)|0,s=s+Math.imul(m,K)|0;var ve=(c+(n=n+Math.imul(h,Z)|0)|0)+((8191&(i=(i=i+Math.imul(h,G)|0)+Math.imul(f,Z)|0))<<13)|0;c=((s=s+Math.imul(f,G)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(k,U),i=(i=Math.imul(k,$))+Math.imul(S,U)|0,s=Math.imul(S,$),n=n+Math.imul(w,V)|0,i=(i=i+Math.imul(w,q)|0)+Math.imul(_,V)|0,s=s+Math.imul(_,q)|0,n=n+Math.imul(g,X)|0,i=(i=i+Math.imul(g,K)|0)+Math.imul(y,X)|0,s=s+Math.imul(y,K)|0,n=n+Math.imul(p,Z)|0,i=(i=i+Math.imul(p,G)|0)+Math.imul(m,Z)|0,s=s+Math.imul(m,G)|0;var we=(c+(n=n+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,ee)|0)+Math.imul(f,Q)|0))<<13)|0;c=((s=s+Math.imul(f,ee)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(C,U),i=(i=Math.imul(C,$))+Math.imul(T,U)|0,s=Math.imul(T,$),n=n+Math.imul(k,V)|0,i=(i=i+Math.imul(k,q)|0)+Math.imul(S,V)|0,s=s+Math.imul(S,q)|0,n=n+Math.imul(w,X)|0,i=(i=i+Math.imul(w,K)|0)+Math.imul(_,X)|0,s=s+Math.imul(_,K)|0,n=n+Math.imul(g,Z)|0,i=(i=i+Math.imul(g,G)|0)+Math.imul(y,Z)|0,s=s+Math.imul(y,G)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,ee)|0)+Math.imul(m,Q)|0,s=s+Math.imul(m,ee)|0;var _e=(c+(n=n+Math.imul(h,re)|0)|0)+((8191&(i=(i=i+Math.imul(h,ne)|0)+Math.imul(f,re)|0))<<13)|0;c=((s=s+Math.imul(f,ne)|0)+(i>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(A,U),i=(i=Math.imul(A,$))+Math.imul(R,U)|0,s=Math.imul(R,$),n=n+Math.imul(C,V)|0,i=(i=i+Math.imul(C,q)|0)+Math.imul(T,V)|0,s=s+Math.imul(T,q)|0,n=n+Math.imul(k,X)|0,i=(i=i+Math.imul(k,K)|0)+Math.imul(S,X)|0,s=s+Math.imul(S,K)|0,n=n+Math.imul(w,Z)|0,i=(i=i+Math.imul(w,G)|0)+Math.imul(_,Z)|0,s=s+Math.imul(_,G)|0,n=n+Math.imul(g,Q)|0,i=(i=i+Math.imul(g,ee)|0)+Math.imul(y,Q)|0,s=s+Math.imul(y,ee)|0,n=n+Math.imul(p,re)|0,i=(i=i+Math.imul(p,ne)|0)+Math.imul(m,re)|0,s=s+Math.imul(m,ne)|0;var xe=(c+(n=n+Math.imul(h,se)|0)|0)+((8191&(i=(i=i+Math.imul(h,oe)|0)+Math.imul(f,se)|0))<<13)|0;c=((s=s+Math.imul(f,oe)|0)+(i>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(j,U),i=(i=Math.imul(j,$))+Math.imul(I,U)|0,s=Math.imul(I,$),n=n+Math.imul(A,V)|0,i=(i=i+Math.imul(A,q)|0)+Math.imul(R,V)|0,s=s+Math.imul(R,q)|0,n=n+Math.imul(C,X)|0,i=(i=i+Math.imul(C,K)|0)+Math.imul(T,X)|0,s=s+Math.imul(T,K)|0,n=n+Math.imul(k,Z)|0,i=(i=i+Math.imul(k,G)|0)+Math.imul(S,Z)|0,s=s+Math.imul(S,G)|0,n=n+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,s=s+Math.imul(_,ee)|0,n=n+Math.imul(g,re)|0,i=(i=i+Math.imul(g,ne)|0)+Math.imul(y,re)|0,s=s+Math.imul(y,ne)|0,n=n+Math.imul(p,se)|0,i=(i=i+Math.imul(p,oe)|0)+Math.imul(m,se)|0,s=s+Math.imul(m,oe)|0;var ke=(c+(n=n+Math.imul(h,le)|0)|0)+((8191&(i=(i=i+Math.imul(h,ce)|0)+Math.imul(f,le)|0))<<13)|0;c=((s=s+Math.imul(f,ce)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(P,U),i=(i=Math.imul(P,$))+Math.imul(B,U)|0,s=Math.imul(B,$),n=n+Math.imul(j,V)|0,i=(i=i+Math.imul(j,q)|0)+Math.imul(I,V)|0,s=s+Math.imul(I,q)|0,n=n+Math.imul(A,X)|0,i=(i=i+Math.imul(A,K)|0)+Math.imul(R,X)|0,s=s+Math.imul(R,K)|0,n=n+Math.imul(C,Z)|0,i=(i=i+Math.imul(C,G)|0)+Math.imul(T,Z)|0,s=s+Math.imul(T,G)|0,n=n+Math.imul(k,Q)|0,i=(i=i+Math.imul(k,ee)|0)+Math.imul(S,Q)|0,s=s+Math.imul(S,ee)|0,n=n+Math.imul(w,re)|0,i=(i=i+Math.imul(w,ne)|0)+Math.imul(_,re)|0,s=s+Math.imul(_,ne)|0,n=n+Math.imul(g,se)|0,i=(i=i+Math.imul(g,oe)|0)+Math.imul(y,se)|0,s=s+Math.imul(y,oe)|0,n=n+Math.imul(p,le)|0,i=(i=i+Math.imul(p,ce)|0)+Math.imul(m,le)|0,s=s+Math.imul(m,ce)|0;var Se=(c+(n=n+Math.imul(h,he)|0)|0)+((8191&(i=(i=i+Math.imul(h,fe)|0)+Math.imul(f,he)|0))<<13)|0;c=((s=s+Math.imul(f,fe)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(F,U),i=(i=Math.imul(F,$))+Math.imul(L,U)|0,s=Math.imul(L,$),n=n+Math.imul(P,V)|0,i=(i=i+Math.imul(P,q)|0)+Math.imul(B,V)|0,s=s+Math.imul(B,q)|0,n=n+Math.imul(j,X)|0,i=(i=i+Math.imul(j,K)|0)+Math.imul(I,X)|0,s=s+Math.imul(I,K)|0,n=n+Math.imul(A,Z)|0,i=(i=i+Math.imul(A,G)|0)+Math.imul(R,Z)|0,s=s+Math.imul(R,G)|0,n=n+Math.imul(C,Q)|0,i=(i=i+Math.imul(C,ee)|0)+Math.imul(T,Q)|0,s=s+Math.imul(T,ee)|0,n=n+Math.imul(k,re)|0,i=(i=i+Math.imul(k,ne)|0)+Math.imul(S,re)|0,s=s+Math.imul(S,ne)|0,n=n+Math.imul(w,se)|0,i=(i=i+Math.imul(w,oe)|0)+Math.imul(_,se)|0,s=s+Math.imul(_,oe)|0,n=n+Math.imul(g,le)|0,i=(i=i+Math.imul(g,ce)|0)+Math.imul(y,le)|0,s=s+Math.imul(y,ce)|0,n=n+Math.imul(p,he)|0,i=(i=i+Math.imul(p,fe)|0)+Math.imul(m,he)|0,s=s+Math.imul(m,fe)|0;var Me=(c+(n=n+Math.imul(h,pe)|0)|0)+((8191&(i=(i=i+Math.imul(h,me)|0)+Math.imul(f,pe)|0))<<13)|0;c=((s=s+Math.imul(f,me)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(F,V),i=(i=Math.imul(F,q))+Math.imul(L,V)|0,s=Math.imul(L,q),n=n+Math.imul(P,X)|0,i=(i=i+Math.imul(P,K)|0)+Math.imul(B,X)|0,s=s+Math.imul(B,K)|0,n=n+Math.imul(j,Z)|0,i=(i=i+Math.imul(j,G)|0)+Math.imul(I,Z)|0,s=s+Math.imul(I,G)|0,n=n+Math.imul(A,Q)|0,i=(i=i+Math.imul(A,ee)|0)+Math.imul(R,Q)|0,s=s+Math.imul(R,ee)|0,n=n+Math.imul(C,re)|0,i=(i=i+Math.imul(C,ne)|0)+Math.imul(T,re)|0,s=s+Math.imul(T,ne)|0,n=n+Math.imul(k,se)|0,i=(i=i+Math.imul(k,oe)|0)+Math.imul(S,se)|0,s=s+Math.imul(S,oe)|0,n=n+Math.imul(w,le)|0,i=(i=i+Math.imul(w,ce)|0)+Math.imul(_,le)|0,s=s+Math.imul(_,ce)|0,n=n+Math.imul(g,he)|0,i=(i=i+Math.imul(g,fe)|0)+Math.imul(y,he)|0,s=s+Math.imul(y,fe)|0;var Ce=(c+(n=n+Math.imul(p,pe)|0)|0)+((8191&(i=(i=i+Math.imul(p,me)|0)+Math.imul(m,pe)|0))<<13)|0;c=((s=s+Math.imul(m,me)|0)+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(F,X),i=(i=Math.imul(F,K))+Math.imul(L,X)|0,s=Math.imul(L,K),n=n+Math.imul(P,Z)|0,i=(i=i+Math.imul(P,G)|0)+Math.imul(B,Z)|0,s=s+Math.imul(B,G)|0,n=n+Math.imul(j,Q)|0,i=(i=i+Math.imul(j,ee)|0)+Math.imul(I,Q)|0,s=s+Math.imul(I,ee)|0,n=n+Math.imul(A,re)|0,i=(i=i+Math.imul(A,ne)|0)+Math.imul(R,re)|0,s=s+Math.imul(R,ne)|0,n=n+Math.imul(C,se)|0,i=(i=i+Math.imul(C,oe)|0)+Math.imul(T,se)|0,s=s+Math.imul(T,oe)|0,n=n+Math.imul(k,le)|0,i=(i=i+Math.imul(k,ce)|0)+Math.imul(S,le)|0,s=s+Math.imul(S,ce)|0,n=n+Math.imul(w,he)|0,i=(i=i+Math.imul(w,fe)|0)+Math.imul(_,he)|0,s=s+Math.imul(_,fe)|0;var Te=(c+(n=n+Math.imul(g,pe)|0)|0)+((8191&(i=(i=i+Math.imul(g,me)|0)+Math.imul(y,pe)|0))<<13)|0;c=((s=s+Math.imul(y,me)|0)+(i>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(F,Z),i=(i=Math.imul(F,G))+Math.imul(L,Z)|0,s=Math.imul(L,G),n=n+Math.imul(P,Q)|0,i=(i=i+Math.imul(P,ee)|0)+Math.imul(B,Q)|0,s=s+Math.imul(B,ee)|0,n=n+Math.imul(j,re)|0,i=(i=i+Math.imul(j,ne)|0)+Math.imul(I,re)|0,s=s+Math.imul(I,ne)|0,n=n+Math.imul(A,se)|0,i=(i=i+Math.imul(A,oe)|0)+Math.imul(R,se)|0,s=s+Math.imul(R,oe)|0,n=n+Math.imul(C,le)|0,i=(i=i+Math.imul(C,ce)|0)+Math.imul(T,le)|0,s=s+Math.imul(T,ce)|0,n=n+Math.imul(k,he)|0,i=(i=i+Math.imul(k,fe)|0)+Math.imul(S,he)|0,s=s+Math.imul(S,fe)|0;var Ee=(c+(n=n+Math.imul(w,pe)|0)|0)+((8191&(i=(i=i+Math.imul(w,me)|0)+Math.imul(_,pe)|0))<<13)|0;c=((s=s+Math.imul(_,me)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(F,Q),i=(i=Math.imul(F,ee))+Math.imul(L,Q)|0,s=Math.imul(L,ee),n=n+Math.imul(P,re)|0,i=(i=i+Math.imul(P,ne)|0)+Math.imul(B,re)|0,s=s+Math.imul(B,ne)|0,n=n+Math.imul(j,se)|0,i=(i=i+Math.imul(j,oe)|0)+Math.imul(I,se)|0,s=s+Math.imul(I,oe)|0,n=n+Math.imul(A,le)|0,i=(i=i+Math.imul(A,ce)|0)+Math.imul(R,le)|0,s=s+Math.imul(R,ce)|0,n=n+Math.imul(C,he)|0,i=(i=i+Math.imul(C,fe)|0)+Math.imul(T,he)|0,s=s+Math.imul(T,fe)|0;var Ae=(c+(n=n+Math.imul(k,pe)|0)|0)+((8191&(i=(i=i+Math.imul(k,me)|0)+Math.imul(S,pe)|0))<<13)|0;c=((s=s+Math.imul(S,me)|0)+(i>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(F,re),i=(i=Math.imul(F,ne))+Math.imul(L,re)|0,s=Math.imul(L,ne),n=n+Math.imul(P,se)|0,i=(i=i+Math.imul(P,oe)|0)+Math.imul(B,se)|0,s=s+Math.imul(B,oe)|0,n=n+Math.imul(j,le)|0,i=(i=i+Math.imul(j,ce)|0)+Math.imul(I,le)|0,s=s+Math.imul(I,ce)|0,n=n+Math.imul(A,he)|0,i=(i=i+Math.imul(A,fe)|0)+Math.imul(R,he)|0,s=s+Math.imul(R,fe)|0;var Re=(c+(n=n+Math.imul(C,pe)|0)|0)+((8191&(i=(i=i+Math.imul(C,me)|0)+Math.imul(T,pe)|0))<<13)|0;c=((s=s+Math.imul(T,me)|0)+(i>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(F,se),i=(i=Math.imul(F,oe))+Math.imul(L,se)|0,s=Math.imul(L,oe),n=n+Math.imul(P,le)|0,i=(i=i+Math.imul(P,ce)|0)+Math.imul(B,le)|0,s=s+Math.imul(B,ce)|0,n=n+Math.imul(j,he)|0,i=(i=i+Math.imul(j,fe)|0)+Math.imul(I,he)|0,s=s+Math.imul(I,fe)|0;var Oe=(c+(n=n+Math.imul(A,pe)|0)|0)+((8191&(i=(i=i+Math.imul(A,me)|0)+Math.imul(R,pe)|0))<<13)|0;c=((s=s+Math.imul(R,me)|0)+(i>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(F,le),i=(i=Math.imul(F,ce))+Math.imul(L,le)|0,s=Math.imul(L,ce),n=n+Math.imul(P,he)|0,i=(i=i+Math.imul(P,fe)|0)+Math.imul(B,he)|0,s=s+Math.imul(B,fe)|0;var je=(c+(n=n+Math.imul(j,pe)|0)|0)+((8191&(i=(i=i+Math.imul(j,me)|0)+Math.imul(I,pe)|0))<<13)|0;c=((s=s+Math.imul(I,me)|0)+(i>>>13)|0)+(je>>>26)|0,je&=67108863,n=Math.imul(F,he),i=(i=Math.imul(F,fe))+Math.imul(L,he)|0,s=Math.imul(L,fe);var Ie=(c+(n=n+Math.imul(P,pe)|0)|0)+((8191&(i=(i=i+Math.imul(P,me)|0)+Math.imul(B,pe)|0))<<13)|0;c=((s=s+Math.imul(B,me)|0)+(i>>>13)|0)+(Ie>>>26)|0,Ie&=67108863;var Ne=(c+(n=Math.imul(F,pe))|0)+((8191&(i=(i=Math.imul(F,me))+Math.imul(L,pe)|0))<<13)|0;return c=((s=Math.imul(L,me))+(i>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,l[0]=be,l[1]=ge,l[2]=ye,l[3]=ve,l[4]=we,l[5]=_e,l[6]=xe,l[7]=ke,l[8]=Se,l[9]=Me,l[10]=Ce,l[11]=Te,l[12]=Ee,l[13]=Ae,l[14]=Re,l[15]=Oe,l[16]=je,l[17]=Ie,l[18]=Ne,0!==c&&(l[19]=c,r.length++),r};function m(e,t,r){return(new b).mulp(e,t,r)}function b(e,t){this.x=e,this.y=t}Math.imul||(p=d),s.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?p(this,e,t):r<63?d(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,s=0;s>>26)|0)>>>26,o&=67108863}r.words[s]=a,n=o,o=i}return 0!==n?r.words[s]=n:r.length--,r.strip()}(this,e,t):m(this,e,t)},b.prototype.makeRBT=function(e){for(var t=new Array(e),r=s.prototype._countBits(e)-1,n=0;n>=1;return n},b.prototype.permute=function(e,t,r,n,i,s){for(var o=0;o>>=1)i++;return 1<>>=13,r[2*o+1]=8191&s,s>>>=13;for(o=2*t;o>=26,t+=i/67108864|0,t+=s>>>26,this.words[r]=67108863&s}return 0!==t&&(this.words[r]=t,this.length++),this},s.prototype.muln=function(e){return this.clone().imuln(e)},s.prototype.sqr=function(){return this.mul(this)},s.prototype.isqr=function(){return this.imul(this.clone())},s.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r>>i}return t}(e);if(0===t.length)return new s(1);for(var r=this,n=0;n=0);var t,r=e%26,i=(e-r)/26,s=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(t=0;t>>26-r}o&&(this.words[t]=o,this.length++)}if(0!==i){for(t=this.length-1;t>=0;t--)this.words[t+i]=this.words[t];for(t=0;t=0),i=t?(t-t%26)/26:0;var s=e%26,o=Math.min((e-s)/26,this.length),a=67108863^67108863>>>s<o)for(this.length-=o,c=0;c=0&&(0!==u||c>=i);c--){var h=0|this.words[c];this.words[c]=u<<26-s|h>>>s,u=h&a}return l&&0!==u&&(l.words[l.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},s.prototype.ishrn=function(e,t,r){return n(0===this.negative),this.iushrn(e,t,r)},s.prototype.shln=function(e){return this.clone().ishln(e)},s.prototype.ushln=function(e){return this.clone().iushln(e)},s.prototype.shrn=function(e){return this.clone().ishrn(e)},s.prototype.ushrn=function(e){return this.clone().iushrn(e)},s.prototype.testn=function(e){n("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,i=1<=0);var t=e%26,r=(e-t)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var i=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},s.prototype.isubn=function(e){if(n("number"==typeof e),n(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(l/67108864|0),this.words[i+r]=67108863&s}for(;i>26,this.words[i+r]=67108863&s;if(0===a)return this.strip();for(n(-1===a),a=0,i=0;i>26,this.words[i]=67108863&s;return this.negative=1,this.strip()},s.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),i=e,o=0|i.words[i.length-1];0!==(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var a,l=n.length-i.length;if("mod"!==t){(a=new s(null)).length=l+1,a.words=new Array(a.length);for(var c=0;c=0;h--){var f=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(f=Math.min(f/o|0,67108863),n._ishlnsubmul(i,f,h);0!==n.negative;)f--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);a&&(a.words[h]=f)}return a&&a.strip(),n.strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:a||null,mod:n}},s.prototype.divmod=function(e,t,r){return n(!e.isZero()),this.isZero()?{div:new s(0),mod:new s(0)}:0!==this.negative&&0===e.negative?(a=this.neg().divmod(e,t),"mod"!==t&&(i=a.div.neg()),"div"!==t&&(o=a.mod.neg(),r&&0!==o.negative&&o.iadd(e)),{div:i,mod:o}):0===this.negative&&0!==e.negative?(a=this.divmod(e.neg(),t),"mod"!==t&&(i=a.div.neg()),{div:i,mod:a.mod}):0!=(this.negative&e.negative)?(a=this.neg().divmod(e.neg(),t),"div"!==t&&(o=a.mod.neg(),r&&0!==o.negative&&o.isub(e)),{div:a.div,mod:o}):e.length>this.length||this.cmp(e)<0?{div:new s(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new s(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new s(this.modn(e.words[0]))}:this._wordDiv(e,t);var i,o,a},s.prototype.div=function(e){return this.divmod(e,"div",!1).div},s.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},s.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},s.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),s=r.cmp(n);return s<0||1===i&&0===s?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},s.prototype.modn=function(e){n(e<=67108863);for(var t=(1<<26)%e,r=0,i=this.length-1;i>=0;i--)r=(t*r+(0|this.words[i]))%e;return r},s.prototype.idivn=function(e){n(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*t;this.words[r]=i/e|0,t=i%e}return this.strip()},s.prototype.divn=function(e){return this.clone().idivn(e)},s.prototype.egcd=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new s(1),o=new s(0),a=new s(0),l=new s(1),c=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++c;for(var u=r.clone(),h=t.clone();!t.isZero();){for(var f=0,d=1;0==(t.words[0]&d)&&f<26;++f,d<<=1);if(f>0)for(t.iushrn(f);f-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(u),o.isub(h)),i.iushrn(1),o.iushrn(1);for(var p=0,m=1;0==(r.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(a.isOdd()||l.isOdd())&&(a.iadd(u),l.isub(h)),a.iushrn(1),l.iushrn(1);t.cmp(r)>=0?(t.isub(r),i.isub(a),o.isub(l)):(r.isub(t),a.isub(i),l.isub(o))}return{a:a,b:l,gcd:r.iushln(c)}},s.prototype._invmp=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i,o=new s(1),a=new s(0),l=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var c=0,u=1;0==(t.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(t.iushrn(c);c-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var h=0,f=1;0==(r.words[0]&f)&&h<26;++h,f<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(l),a.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(a)):(r.isub(t),a.isub(o))}return(i=0===t.cmpn(1)?o:a).cmpn(0)<0&&i.iadd(e),i},s.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(i<0){var s=t;t=r,r=s}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},s.prototype.invm=function(e){return this.egcd(e).a.umod(e)},s.prototype.isEven=function(){return 0==(1&this.words[0])},s.prototype.isOdd=function(){return 1==(1&this.words[0])},s.prototype.andln=function(e){return this.words[0]&e},s.prototype.bincn=function(e){n("number"==typeof e);var t=e%26,r=(e-t)/26,i=1<>>26,a&=67108863,this.words[o]=a}return 0!==s&&(this.words[o]=s,this.length++),this},s.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},s.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),n(e<=67108863,"Number is too big");var i=0|this.words[0];t=i===e?0:ie.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){ni&&(t=1);break}}return t},s.prototype.gtn=function(e){return 1===this.cmpn(e)},s.prototype.gt=function(e){return 1===this.cmp(e)},s.prototype.gten=function(e){return this.cmpn(e)>=0},s.prototype.gte=function(e){return this.cmp(e)>=0},s.prototype.ltn=function(e){return-1===this.cmpn(e)},s.prototype.lt=function(e){return-1===this.cmp(e)},s.prototype.lten=function(e){return this.cmpn(e)<=0},s.prototype.lte=function(e){return this.cmp(e)<=0},s.prototype.eqn=function(e){return 0===this.cmpn(e)},s.prototype.eq=function(e){return 0===this.cmp(e)},s.red=function(e){return new k(e)},s.prototype.toRed=function(e){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},s.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},s.prototype._forceRed=function(e){return this.red=e,this},s.prototype.forceRed=function(e){return n(!this.red,"Already a number in reduction context"),this._forceRed(e)},s.prototype.redAdd=function(e){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},s.prototype.redIAdd=function(e){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},s.prototype.redSub=function(e){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},s.prototype.redISub=function(e){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},s.prototype.redShl=function(e){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},s.prototype.redMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},s.prototype.redIMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},s.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},s.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},s.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},s.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},s.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},s.prototype.redPow=function(e){return n(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var g={k256:null,p224:null,p192:null,p25519:null};function y(e,t){this.name=e,this.p=new s(t,16),this.n=this.p.bitLength(),this.k=new s(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){y.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function w(){y.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function _(){y.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function x(){y.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function k(e){if("string"==typeof e){var t=s._prime(e);this.m=t.p,this.prime=t}else n(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function S(e){k.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new s(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}y.prototype._tmp=function(){var e=new s(null);return e.words=new Array(Math.ceil(this.n/13)),e},y.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},y.prototype.split=function(e,t){e.iushrn(this.n,0,t)},y.prototype.imulK=function(e){return e.imul(this.k)},i(v,y),v.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n>>22,i=s}i>>>=22,e.words[n-10]=i,0===i&&e.length>10?e.length-=10:e.length-=9},v.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},s._prime=function(e){if(g[e])return g[e];var t;if("k256"===e)t=new v;else if("p224"===e)t=new w;else if("p192"===e)t=new _;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new x}return g[e]=t,t},k.prototype._verify1=function(e){n(0===e.negative,"red works only with positives"),n(e.red,"red works only with red numbers")},k.prototype._verify2=function(e,t){n(0==(e.negative|t.negative),"red works only with positives"),n(e.red&&e.red===t.red,"red works only with red numbers")},k.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},k.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},k.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},k.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},k.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},k.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},k.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},k.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},k.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},k.prototype.isqr=function(e){return this.imul(e,e.clone())},k.prototype.sqr=function(e){return this.mul(e,e)},k.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(n(t%2==1),3===t){var r=this.m.add(new s(1)).iushrn(2);return this.pow(e,r)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);n(!i.isZero());var a=new s(1).toRed(this),l=a.redNeg(),c=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new s(2*u*u).toRed(this);0!==this.pow(u,c).cmp(l);)u.redIAdd(l);for(var h=this.pow(u,i),f=this.pow(e,i.addn(1).iushrn(1)),d=this.pow(e,i),p=o;0!==d.cmp(a);){for(var m=d,b=0;0!==m.cmp(a);b++)m=m.redSqr();n(b=0;n--){for(var c=t.words[n],u=l-1;u>=0;u--){var h=c>>u&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,(4===++a||0===n&&0===u)&&(i=this.mul(i,r[o]),a=0,o=0)):a=0}l=26}return i},k.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},k.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},s.mont=function(e){return new S(e)},i(S,k),S.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},S.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),s=i;return i.cmp(this.m)>=0?s=i.isub(this.m):i.cmpn(0)<0&&(s=i.iadd(this.m)),s._forceRed(this)},S.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new s(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},S.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t)},{buffer:188}],185:[function(e,t,r){"use strict";r.byteLength=function(e){var t=c(e),r=t[0],n=t[1];return 3*(r+n)/4-n},r.toByteArray=function(e){var t,r,n=c(e),o=n[0],a=n[1],l=new s(function(e,t,r){return 3*(t+r)/4-r}(0,o,a)),u=0,h=a>0?o-4:o;for(r=0;r>16&255,l[u++]=t>>8&255,l[u++]=255&t;2===a&&(t=i[e.charCodeAt(r)]<<2|i[e.charCodeAt(r+1)]>>4,l[u++]=255&t);1===a&&(t=i[e.charCodeAt(r)]<<10|i[e.charCodeAt(r+1)]<<4|i[e.charCodeAt(r+2)]>>2,l[u++]=t>>8&255,l[u++]=255&t);return l},r.fromByteArray=function(e){for(var t,r=e.length,i=r%3,s=[],o=0,a=r-i;oa?a:o+16383));1===i?(t=e[r-1],s.push(n[t>>2]+n[t<<4&63]+"==")):2===i&&(t=(e[r-2]<<8)+e[r-1],s.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return s.join("")};for(var n=[],i=[],s="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,l=o.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function u(e,t,r){for(var i,s,o=[],a=t;a>18&63]+n[s>>12&63]+n[s>>6&63]+n[63&s]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],186:[function(e,t,r){"use strict";!function(t,r){function n(e,t){if(!e)throw new Error(t||"Assertion failed")}function i(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function s(e,t,r){if(s.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(r=t,t=10),this._init(e||0,t||10,r||"be"))}var o;"object"==typeof t?t.exports=s:(void 0).BN=s,s.BN=s,s.wordSize=26;try{o="undefined"!=typeof window&&void 0!==window.Buffer?window.Buffer:e("buffer").Buffer}catch(e){}function a(e,t){var r=e.charCodeAt(t);return r>=48&&r<=57?r-48:r>=65&&r<=70?r-55:r>=97&&r<=102?r-87:void n(!1,"Invalid character in "+e)}function l(e,t,r){var n=a(e,r);return r-1>=t&&(n|=a(e,r-1)<<4),n}function c(e,t,r,i){for(var s=0,o=0,a=Math.min(e.length,r),l=t;l=49?c-49+10:c>=17?c-17+10:c,n(c>=0&&o0?e:t},s.min=function(e,t){return e.cmp(t)<0?e:t},s.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"==typeof e)return this._initArray(e,t,r);"hex"===t&&(t=16),n(t===(0|t)&&t>=2&&t<=36);var i=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&(i++,this.negative=1),i=0;i-=3)o=e[i]|e[i-1]<<8|e[i-2]<<16,this.words[s]|=o<>>26-a&67108863,(a+=24)>=26&&(a-=26,s++);else if("le"===r)for(i=0,s=0;i>>26-a&67108863,(a+=24)>=26&&(a-=26,s++);return this._strip()},s.prototype._parseHex=function(e,t,r){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var n=0;n=t;n-=2)i=l(e,t,n)<=18?(s-=18,o+=1,this.words[o]|=i>>>26):s+=8;else for(n=(e.length-t)%2==0?t+1:t;n=18?(s-=18,o+=1,this.words[o]|=i>>>26):s+=8;this._strip()},s.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=t)n++;n--,i=i/t|0;for(var s=e.length-r,o=s%n,a=Math.min(s,s-o)+r,l=0,u=r;u1&&0===this.words[this.length-1];)this.length--;return this._normSign()},s.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},"undefined"!=typeof Symbol&&"function"==typeof Symbol.for)try{s.prototype[Symbol.for("nodejs.util.inspect.custom")]=h}catch(e){s.prototype.inspect=h}else s.prototype.inspect=h;function h(){return(this.red?""}var f=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],d=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],p=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];s.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var i=0,s=0,o=0;o>>24-i&16777215,(i+=2)>=26&&(i-=26,o--),r=0!==s||o!==this.length-1?f[6-l.length]+l+r:l+r}for(0!==s&&(r=s.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var c=d[e],u=p[e];r="";var h=this.clone();for(h.negative=0;!h.isZero();){var m=h.modrn(u).toString(e);r=(h=h.idivn(u)).isZero()?m+r:f[c-m.length]+m+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},s.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},s.prototype.toJSON=function(){return this.toString(16,2)},o&&(s.prototype.toBuffer=function(e,t){return this.toArrayLike(o,e,t)}),s.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)};function m(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],s=0|t.words[0],o=i*s,a=67108863&o,l=o/67108864|0;r.words[0]=a;for(var c=1;c>>26,h=67108863&l,f=Math.min(c,t.length-1),d=Math.max(0,c-e.length+1);d<=f;d++){var p=c-d|0;u+=(o=(i=0|e.words[p])*(s=0|t.words[d])+h)/67108864|0,h=67108863&o}r.words[c]=0|h,l=0|u}return 0!==l?r.words[c]=0|l:r.length--,r._strip()}s.prototype.toArrayLike=function(e,t,r){this._strip();var i=this.byteLength(),s=r||Math.max(1,i);n(i<=s,"byte array longer than desired length"),n(s>0,"Requested array length <= 0");var o=function(e,t){return e.allocUnsafe?e.allocUnsafe(t):new e(t)}(e,s);return this["_toArrayLike"+("le"===t?"LE":"BE")](o,i),o},s.prototype._toArrayLikeLE=function(e,t){for(var r=0,n=0,i=0,s=0;i>8&255),r>16&255),6===s?(r>24&255),n=0,s=0):(n=o>>>24,s+=2)}if(r=0&&(e[r--]=o>>8&255),r>=0&&(e[r--]=o>>16&255),6===s?(r>=0&&(e[r--]=o>>24&255),n=0,s=0):(n=o>>>24,s+=2)}if(r>=0)for(e[r--]=n;r>=0;)e[r--]=0},Math.clz32?s.prototype._countBits=function(e){return 32-Math.clz32(e)}:s.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},s.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},s.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},s.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},s.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},s.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},s.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},s.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},s.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},s.prototype.inotn=function(e){n("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var i=0;i0&&(this.words[i]=~this.words[i]&67108863>>26-r),this._strip()},s.prototype.notn=function(e){return this.clone().inotn(e)},s.prototype.setn=function(e,t){n("number"==typeof e&&e>=0);var r=e/26|0,i=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,s=0;s>>26;for(;0!==i&&s>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;se.length?this.clone().iadd(e):e.clone().iadd(this)},s.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=e):(r=e,n=this);for(var s=0,o=0;o>26,this.words[o]=67108863&t;for(;0!==s&&o>26,this.words[o]=67108863&t;if(0===s&&o>>13,d=0|o[1],p=8191&d,m=d>>>13,b=0|o[2],g=8191&b,y=b>>>13,v=0|o[3],w=8191&v,_=v>>>13,x=0|o[4],k=8191&x,S=x>>>13,M=0|o[5],C=8191&M,T=M>>>13,E=0|o[6],A=8191&E,R=E>>>13,O=0|o[7],j=8191&O,I=O>>>13,N=0|o[8],P=8191&N,B=N>>>13,D=0|o[9],F=8191&D,L=D>>>13,z=0|a[0],U=8191&z,$=z>>>13,H=0|a[1],V=8191&H,q=H>>>13,W=0|a[2],X=8191&W,K=W>>>13,Y=0|a[3],Z=8191&Y,G=Y>>>13,J=0|a[4],Q=8191&J,ee=J>>>13,te=0|a[5],re=8191&te,ne=te>>>13,ie=0|a[6],se=8191&ie,oe=ie>>>13,ae=0|a[7],le=8191&ae,ce=ae>>>13,ue=0|a[8],he=8191&ue,fe=ue>>>13,de=0|a[9],pe=8191&de,me=de>>>13;r.negative=e.negative^t.negative,r.length=19;var be=(c+(n=Math.imul(h,U))|0)+((8191&(i=(i=Math.imul(h,$))+Math.imul(f,U)|0))<<13)|0;c=((s=Math.imul(f,$))+(i>>>13)|0)+(be>>>26)|0,be&=67108863,n=Math.imul(p,U),i=(i=Math.imul(p,$))+Math.imul(m,U)|0,s=Math.imul(m,$);var ge=(c+(n=n+Math.imul(h,V)|0)|0)+((8191&(i=(i=i+Math.imul(h,q)|0)+Math.imul(f,V)|0))<<13)|0;c=((s=s+Math.imul(f,q)|0)+(i>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(g,U),i=(i=Math.imul(g,$))+Math.imul(y,U)|0,s=Math.imul(y,$),n=n+Math.imul(p,V)|0,i=(i=i+Math.imul(p,q)|0)+Math.imul(m,V)|0,s=s+Math.imul(m,q)|0;var ye=(c+(n=n+Math.imul(h,X)|0)|0)+((8191&(i=(i=i+Math.imul(h,K)|0)+Math.imul(f,X)|0))<<13)|0;c=((s=s+Math.imul(f,K)|0)+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(w,U),i=(i=Math.imul(w,$))+Math.imul(_,U)|0,s=Math.imul(_,$),n=n+Math.imul(g,V)|0,i=(i=i+Math.imul(g,q)|0)+Math.imul(y,V)|0,s=s+Math.imul(y,q)|0,n=n+Math.imul(p,X)|0,i=(i=i+Math.imul(p,K)|0)+Math.imul(m,X)|0,s=s+Math.imul(m,K)|0;var ve=(c+(n=n+Math.imul(h,Z)|0)|0)+((8191&(i=(i=i+Math.imul(h,G)|0)+Math.imul(f,Z)|0))<<13)|0;c=((s=s+Math.imul(f,G)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(k,U),i=(i=Math.imul(k,$))+Math.imul(S,U)|0,s=Math.imul(S,$),n=n+Math.imul(w,V)|0,i=(i=i+Math.imul(w,q)|0)+Math.imul(_,V)|0,s=s+Math.imul(_,q)|0,n=n+Math.imul(g,X)|0,i=(i=i+Math.imul(g,K)|0)+Math.imul(y,X)|0,s=s+Math.imul(y,K)|0,n=n+Math.imul(p,Z)|0,i=(i=i+Math.imul(p,G)|0)+Math.imul(m,Z)|0,s=s+Math.imul(m,G)|0;var we=(c+(n=n+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,ee)|0)+Math.imul(f,Q)|0))<<13)|0;c=((s=s+Math.imul(f,ee)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(C,U),i=(i=Math.imul(C,$))+Math.imul(T,U)|0,s=Math.imul(T,$),n=n+Math.imul(k,V)|0,i=(i=i+Math.imul(k,q)|0)+Math.imul(S,V)|0,s=s+Math.imul(S,q)|0,n=n+Math.imul(w,X)|0,i=(i=i+Math.imul(w,K)|0)+Math.imul(_,X)|0,s=s+Math.imul(_,K)|0,n=n+Math.imul(g,Z)|0,i=(i=i+Math.imul(g,G)|0)+Math.imul(y,Z)|0,s=s+Math.imul(y,G)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,ee)|0)+Math.imul(m,Q)|0,s=s+Math.imul(m,ee)|0;var _e=(c+(n=n+Math.imul(h,re)|0)|0)+((8191&(i=(i=i+Math.imul(h,ne)|0)+Math.imul(f,re)|0))<<13)|0;c=((s=s+Math.imul(f,ne)|0)+(i>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(A,U),i=(i=Math.imul(A,$))+Math.imul(R,U)|0,s=Math.imul(R,$),n=n+Math.imul(C,V)|0,i=(i=i+Math.imul(C,q)|0)+Math.imul(T,V)|0,s=s+Math.imul(T,q)|0,n=n+Math.imul(k,X)|0,i=(i=i+Math.imul(k,K)|0)+Math.imul(S,X)|0,s=s+Math.imul(S,K)|0,n=n+Math.imul(w,Z)|0,i=(i=i+Math.imul(w,G)|0)+Math.imul(_,Z)|0,s=s+Math.imul(_,G)|0,n=n+Math.imul(g,Q)|0,i=(i=i+Math.imul(g,ee)|0)+Math.imul(y,Q)|0,s=s+Math.imul(y,ee)|0,n=n+Math.imul(p,re)|0,i=(i=i+Math.imul(p,ne)|0)+Math.imul(m,re)|0,s=s+Math.imul(m,ne)|0;var xe=(c+(n=n+Math.imul(h,se)|0)|0)+((8191&(i=(i=i+Math.imul(h,oe)|0)+Math.imul(f,se)|0))<<13)|0;c=((s=s+Math.imul(f,oe)|0)+(i>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(j,U),i=(i=Math.imul(j,$))+Math.imul(I,U)|0,s=Math.imul(I,$),n=n+Math.imul(A,V)|0,i=(i=i+Math.imul(A,q)|0)+Math.imul(R,V)|0,s=s+Math.imul(R,q)|0,n=n+Math.imul(C,X)|0,i=(i=i+Math.imul(C,K)|0)+Math.imul(T,X)|0,s=s+Math.imul(T,K)|0,n=n+Math.imul(k,Z)|0,i=(i=i+Math.imul(k,G)|0)+Math.imul(S,Z)|0,s=s+Math.imul(S,G)|0,n=n+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,s=s+Math.imul(_,ee)|0,n=n+Math.imul(g,re)|0,i=(i=i+Math.imul(g,ne)|0)+Math.imul(y,re)|0,s=s+Math.imul(y,ne)|0,n=n+Math.imul(p,se)|0,i=(i=i+Math.imul(p,oe)|0)+Math.imul(m,se)|0,s=s+Math.imul(m,oe)|0;var ke=(c+(n=n+Math.imul(h,le)|0)|0)+((8191&(i=(i=i+Math.imul(h,ce)|0)+Math.imul(f,le)|0))<<13)|0;c=((s=s+Math.imul(f,ce)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(P,U),i=(i=Math.imul(P,$))+Math.imul(B,U)|0,s=Math.imul(B,$),n=n+Math.imul(j,V)|0,i=(i=i+Math.imul(j,q)|0)+Math.imul(I,V)|0,s=s+Math.imul(I,q)|0,n=n+Math.imul(A,X)|0,i=(i=i+Math.imul(A,K)|0)+Math.imul(R,X)|0,s=s+Math.imul(R,K)|0,n=n+Math.imul(C,Z)|0,i=(i=i+Math.imul(C,G)|0)+Math.imul(T,Z)|0,s=s+Math.imul(T,G)|0,n=n+Math.imul(k,Q)|0,i=(i=i+Math.imul(k,ee)|0)+Math.imul(S,Q)|0,s=s+Math.imul(S,ee)|0,n=n+Math.imul(w,re)|0,i=(i=i+Math.imul(w,ne)|0)+Math.imul(_,re)|0,s=s+Math.imul(_,ne)|0,n=n+Math.imul(g,se)|0,i=(i=i+Math.imul(g,oe)|0)+Math.imul(y,se)|0,s=s+Math.imul(y,oe)|0,n=n+Math.imul(p,le)|0,i=(i=i+Math.imul(p,ce)|0)+Math.imul(m,le)|0,s=s+Math.imul(m,ce)|0;var Se=(c+(n=n+Math.imul(h,he)|0)|0)+((8191&(i=(i=i+Math.imul(h,fe)|0)+Math.imul(f,he)|0))<<13)|0;c=((s=s+Math.imul(f,fe)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(F,U),i=(i=Math.imul(F,$))+Math.imul(L,U)|0,s=Math.imul(L,$),n=n+Math.imul(P,V)|0,i=(i=i+Math.imul(P,q)|0)+Math.imul(B,V)|0,s=s+Math.imul(B,q)|0,n=n+Math.imul(j,X)|0,i=(i=i+Math.imul(j,K)|0)+Math.imul(I,X)|0,s=s+Math.imul(I,K)|0,n=n+Math.imul(A,Z)|0,i=(i=i+Math.imul(A,G)|0)+Math.imul(R,Z)|0,s=s+Math.imul(R,G)|0,n=n+Math.imul(C,Q)|0,i=(i=i+Math.imul(C,ee)|0)+Math.imul(T,Q)|0,s=s+Math.imul(T,ee)|0,n=n+Math.imul(k,re)|0,i=(i=i+Math.imul(k,ne)|0)+Math.imul(S,re)|0,s=s+Math.imul(S,ne)|0,n=n+Math.imul(w,se)|0,i=(i=i+Math.imul(w,oe)|0)+Math.imul(_,se)|0,s=s+Math.imul(_,oe)|0,n=n+Math.imul(g,le)|0,i=(i=i+Math.imul(g,ce)|0)+Math.imul(y,le)|0,s=s+Math.imul(y,ce)|0,n=n+Math.imul(p,he)|0,i=(i=i+Math.imul(p,fe)|0)+Math.imul(m,he)|0,s=s+Math.imul(m,fe)|0;var Me=(c+(n=n+Math.imul(h,pe)|0)|0)+((8191&(i=(i=i+Math.imul(h,me)|0)+Math.imul(f,pe)|0))<<13)|0;c=((s=s+Math.imul(f,me)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(F,V),i=(i=Math.imul(F,q))+Math.imul(L,V)|0,s=Math.imul(L,q),n=n+Math.imul(P,X)|0,i=(i=i+Math.imul(P,K)|0)+Math.imul(B,X)|0,s=s+Math.imul(B,K)|0,n=n+Math.imul(j,Z)|0,i=(i=i+Math.imul(j,G)|0)+Math.imul(I,Z)|0,s=s+Math.imul(I,G)|0,n=n+Math.imul(A,Q)|0,i=(i=i+Math.imul(A,ee)|0)+Math.imul(R,Q)|0,s=s+Math.imul(R,ee)|0,n=n+Math.imul(C,re)|0,i=(i=i+Math.imul(C,ne)|0)+Math.imul(T,re)|0,s=s+Math.imul(T,ne)|0,n=n+Math.imul(k,se)|0,i=(i=i+Math.imul(k,oe)|0)+Math.imul(S,se)|0,s=s+Math.imul(S,oe)|0,n=n+Math.imul(w,le)|0,i=(i=i+Math.imul(w,ce)|0)+Math.imul(_,le)|0,s=s+Math.imul(_,ce)|0,n=n+Math.imul(g,he)|0,i=(i=i+Math.imul(g,fe)|0)+Math.imul(y,he)|0,s=s+Math.imul(y,fe)|0;var Ce=(c+(n=n+Math.imul(p,pe)|0)|0)+((8191&(i=(i=i+Math.imul(p,me)|0)+Math.imul(m,pe)|0))<<13)|0;c=((s=s+Math.imul(m,me)|0)+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(F,X),i=(i=Math.imul(F,K))+Math.imul(L,X)|0,s=Math.imul(L,K),n=n+Math.imul(P,Z)|0,i=(i=i+Math.imul(P,G)|0)+Math.imul(B,Z)|0,s=s+Math.imul(B,G)|0,n=n+Math.imul(j,Q)|0,i=(i=i+Math.imul(j,ee)|0)+Math.imul(I,Q)|0,s=s+Math.imul(I,ee)|0,n=n+Math.imul(A,re)|0,i=(i=i+Math.imul(A,ne)|0)+Math.imul(R,re)|0,s=s+Math.imul(R,ne)|0,n=n+Math.imul(C,se)|0,i=(i=i+Math.imul(C,oe)|0)+Math.imul(T,se)|0,s=s+Math.imul(T,oe)|0,n=n+Math.imul(k,le)|0,i=(i=i+Math.imul(k,ce)|0)+Math.imul(S,le)|0,s=s+Math.imul(S,ce)|0,n=n+Math.imul(w,he)|0,i=(i=i+Math.imul(w,fe)|0)+Math.imul(_,he)|0,s=s+Math.imul(_,fe)|0;var Te=(c+(n=n+Math.imul(g,pe)|0)|0)+((8191&(i=(i=i+Math.imul(g,me)|0)+Math.imul(y,pe)|0))<<13)|0;c=((s=s+Math.imul(y,me)|0)+(i>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(F,Z),i=(i=Math.imul(F,G))+Math.imul(L,Z)|0,s=Math.imul(L,G),n=n+Math.imul(P,Q)|0,i=(i=i+Math.imul(P,ee)|0)+Math.imul(B,Q)|0,s=s+Math.imul(B,ee)|0,n=n+Math.imul(j,re)|0,i=(i=i+Math.imul(j,ne)|0)+Math.imul(I,re)|0,s=s+Math.imul(I,ne)|0,n=n+Math.imul(A,se)|0,i=(i=i+Math.imul(A,oe)|0)+Math.imul(R,se)|0,s=s+Math.imul(R,oe)|0,n=n+Math.imul(C,le)|0,i=(i=i+Math.imul(C,ce)|0)+Math.imul(T,le)|0,s=s+Math.imul(T,ce)|0,n=n+Math.imul(k,he)|0,i=(i=i+Math.imul(k,fe)|0)+Math.imul(S,he)|0,s=s+Math.imul(S,fe)|0;var Ee=(c+(n=n+Math.imul(w,pe)|0)|0)+((8191&(i=(i=i+Math.imul(w,me)|0)+Math.imul(_,pe)|0))<<13)|0;c=((s=s+Math.imul(_,me)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(F,Q),i=(i=Math.imul(F,ee))+Math.imul(L,Q)|0,s=Math.imul(L,ee),n=n+Math.imul(P,re)|0,i=(i=i+Math.imul(P,ne)|0)+Math.imul(B,re)|0,s=s+Math.imul(B,ne)|0,n=n+Math.imul(j,se)|0,i=(i=i+Math.imul(j,oe)|0)+Math.imul(I,se)|0,s=s+Math.imul(I,oe)|0,n=n+Math.imul(A,le)|0,i=(i=i+Math.imul(A,ce)|0)+Math.imul(R,le)|0,s=s+Math.imul(R,ce)|0,n=n+Math.imul(C,he)|0,i=(i=i+Math.imul(C,fe)|0)+Math.imul(T,he)|0,s=s+Math.imul(T,fe)|0;var Ae=(c+(n=n+Math.imul(k,pe)|0)|0)+((8191&(i=(i=i+Math.imul(k,me)|0)+Math.imul(S,pe)|0))<<13)|0;c=((s=s+Math.imul(S,me)|0)+(i>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(F,re),i=(i=Math.imul(F,ne))+Math.imul(L,re)|0,s=Math.imul(L,ne),n=n+Math.imul(P,se)|0,i=(i=i+Math.imul(P,oe)|0)+Math.imul(B,se)|0,s=s+Math.imul(B,oe)|0,n=n+Math.imul(j,le)|0,i=(i=i+Math.imul(j,ce)|0)+Math.imul(I,le)|0,s=s+Math.imul(I,ce)|0,n=n+Math.imul(A,he)|0,i=(i=i+Math.imul(A,fe)|0)+Math.imul(R,he)|0,s=s+Math.imul(R,fe)|0;var Re=(c+(n=n+Math.imul(C,pe)|0)|0)+((8191&(i=(i=i+Math.imul(C,me)|0)+Math.imul(T,pe)|0))<<13)|0;c=((s=s+Math.imul(T,me)|0)+(i>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(F,se),i=(i=Math.imul(F,oe))+Math.imul(L,se)|0,s=Math.imul(L,oe),n=n+Math.imul(P,le)|0,i=(i=i+Math.imul(P,ce)|0)+Math.imul(B,le)|0,s=s+Math.imul(B,ce)|0,n=n+Math.imul(j,he)|0,i=(i=i+Math.imul(j,fe)|0)+Math.imul(I,he)|0,s=s+Math.imul(I,fe)|0;var Oe=(c+(n=n+Math.imul(A,pe)|0)|0)+((8191&(i=(i=i+Math.imul(A,me)|0)+Math.imul(R,pe)|0))<<13)|0;c=((s=s+Math.imul(R,me)|0)+(i>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(F,le),i=(i=Math.imul(F,ce))+Math.imul(L,le)|0,s=Math.imul(L,ce),n=n+Math.imul(P,he)|0,i=(i=i+Math.imul(P,fe)|0)+Math.imul(B,he)|0,s=s+Math.imul(B,fe)|0;var je=(c+(n=n+Math.imul(j,pe)|0)|0)+((8191&(i=(i=i+Math.imul(j,me)|0)+Math.imul(I,pe)|0))<<13)|0;c=((s=s+Math.imul(I,me)|0)+(i>>>13)|0)+(je>>>26)|0,je&=67108863,n=Math.imul(F,he),i=(i=Math.imul(F,fe))+Math.imul(L,he)|0,s=Math.imul(L,fe);var Ie=(c+(n=n+Math.imul(P,pe)|0)|0)+((8191&(i=(i=i+Math.imul(P,me)|0)+Math.imul(B,pe)|0))<<13)|0;c=((s=s+Math.imul(B,me)|0)+(i>>>13)|0)+(Ie>>>26)|0,Ie&=67108863;var Ne=(c+(n=Math.imul(F,pe))|0)+((8191&(i=(i=Math.imul(F,me))+Math.imul(L,pe)|0))<<13)|0;return c=((s=Math.imul(L,me))+(i>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,l[0]=be,l[1]=ge,l[2]=ye,l[3]=ve,l[4]=we,l[5]=_e,l[6]=xe,l[7]=ke,l[8]=Se,l[9]=Me,l[10]=Ce,l[11]=Te,l[12]=Ee,l[13]=Ae,l[14]=Re,l[15]=Oe,l[16]=je,l[17]=Ie,l[18]=Ne,0!==c&&(l[19]=c,r.length++),r};function g(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,s=0;s>>26)|0)>>>26,o&=67108863}r.words[s]=a,n=o,o=i}return 0!==n?r.words[s]=n:r.length--,r._strip()}function y(e,t,r){return g(e,t,r)}function v(e,t){this.x=e,this.y=t}Math.imul||(b=m),s.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?b(this,e,t):r<63?m(this,e,t):r<1024?g(this,e,t):y(this,e,t)},v.prototype.makeRBT=function(e){for(var t=new Array(e),r=s.prototype._countBits(e)-1,n=0;n>=1;return n},v.prototype.permute=function(e,t,r,n,i,s){for(var o=0;o>>=1)i++;return 1<>>=13,r[2*o+1]=8191&s,s>>>=13;for(o=2*t;o>=26,r+=s/67108864|0,r+=o>>>26,this.words[i]=67108863&o}return 0!==r&&(this.words[i]=r,this.length++),t?this.ineg():this},s.prototype.muln=function(e){return this.clone().imuln(e)},s.prototype.sqr=function(){return this.mul(this)},s.prototype.isqr=function(){return this.imul(this.clone())},s.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r>>i&1}return t}(e);if(0===t.length)return new s(1);for(var r=this,n=0;n=0);var t,r=e%26,i=(e-r)/26,s=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(t=0;t>>26-r}o&&(this.words[t]=o,this.length++)}if(0!==i){for(t=this.length-1;t>=0;t--)this.words[t+i]=this.words[t];for(t=0;t=0),i=t?(t-t%26)/26:0;var s=e%26,o=Math.min((e-s)/26,this.length),a=67108863^67108863>>>s<o)for(this.length-=o,c=0;c=0&&(0!==u||c>=i);c--){var h=0|this.words[c];this.words[c]=u<<26-s|h>>>s,u=h&a}return l&&0!==u&&(l.words[l.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this._strip()},s.prototype.ishrn=function(e,t,r){return n(0===this.negative),this.iushrn(e,t,r)},s.prototype.shln=function(e){return this.clone().ishln(e)},s.prototype.ushln=function(e){return this.clone().iushln(e)},s.prototype.shrn=function(e){return this.clone().ishrn(e)},s.prototype.ushrn=function(e){return this.clone().iushrn(e)},s.prototype.testn=function(e){n("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,i=1<=0);var t=e%26,r=(e-t)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var i=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},s.prototype.isubn=function(e){if(n("number"==typeof e),n(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(l/67108864|0),this.words[i+r]=67108863&s}for(;i>26,this.words[i+r]=67108863&s;if(0===a)return this._strip();for(n(-1===a),a=0,i=0;i>26,this.words[i]=67108863&s;return this.negative=1,this._strip()},s.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),i=e,o=0|i.words[i.length-1];0!==(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var a,l=n.length-i.length;if("mod"!==t){(a=new s(null)).length=l+1,a.words=new Array(a.length);for(var c=0;c=0;h--){var f=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(f=Math.min(f/o|0,67108863),n._ishlnsubmul(i,f,h);0!==n.negative;)f--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);a&&(a.words[h]=f)}return a&&a._strip(),n._strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:a||null,mod:n}},s.prototype.divmod=function(e,t,r){return n(!e.isZero()),this.isZero()?{div:new s(0),mod:new s(0)}:0!==this.negative&&0===e.negative?(a=this.neg().divmod(e,t),"mod"!==t&&(i=a.div.neg()),"div"!==t&&(o=a.mod.neg(),r&&0!==o.negative&&o.iadd(e)),{div:i,mod:o}):0===this.negative&&0!==e.negative?(a=this.divmod(e.neg(),t),"mod"!==t&&(i=a.div.neg()),{div:i,mod:a.mod}):0!=(this.negative&e.negative)?(a=this.neg().divmod(e.neg(),t),"div"!==t&&(o=a.mod.neg(),r&&0!==o.negative&&o.isub(e)),{div:a.div,mod:o}):e.length>this.length||this.cmp(e)<0?{div:new s(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new s(this.modrn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new s(this.modrn(e.words[0]))}:this._wordDiv(e,t);var i,o,a},s.prototype.div=function(e){return this.divmod(e,"div",!1).div},s.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},s.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},s.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),s=r.cmp(n);return s<0||1===i&&0===s?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},s.prototype.modrn=function(e){var t=e<0;t&&(e=-e),n(e<=67108863);for(var r=(1<<26)%e,i=0,s=this.length-1;s>=0;s--)i=(r*i+(0|this.words[s]))%e;return t?-i:i},s.prototype.modn=function(e){return this.modrn(e)},s.prototype.idivn=function(e){var t=e<0;t&&(e=-e),n(e<=67108863);for(var r=0,i=this.length-1;i>=0;i--){var s=(0|this.words[i])+67108864*r;this.words[i]=s/e|0,r=s%e}return this._strip(),t?this.ineg():this},s.prototype.divn=function(e){return this.clone().idivn(e)},s.prototype.egcd=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new s(1),o=new s(0),a=new s(0),l=new s(1),c=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++c;for(var u=r.clone(),h=t.clone();!t.isZero();){for(var f=0,d=1;0==(t.words[0]&d)&&f<26;++f,d<<=1);if(f>0)for(t.iushrn(f);f-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(u),o.isub(h)),i.iushrn(1),o.iushrn(1);for(var p=0,m=1;0==(r.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(a.isOdd()||l.isOdd())&&(a.iadd(u),l.isub(h)),a.iushrn(1),l.iushrn(1);t.cmp(r)>=0?(t.isub(r),i.isub(a),o.isub(l)):(r.isub(t),a.isub(i),l.isub(o))}return{a:a,b:l,gcd:r.iushln(c)}},s.prototype._invmp=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i,o=new s(1),a=new s(0),l=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var c=0,u=1;0==(t.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(t.iushrn(c);c-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var h=0,f=1;0==(r.words[0]&f)&&h<26;++h,f<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(l),a.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(a)):(r.isub(t),a.isub(o))}return(i=0===t.cmpn(1)?o:a).cmpn(0)<0&&i.iadd(e),i},s.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(i<0){var s=t;t=r,r=s}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},s.prototype.invm=function(e){return this.egcd(e).a.umod(e)},s.prototype.isEven=function(){return 0==(1&this.words[0])},s.prototype.isOdd=function(){return 1==(1&this.words[0])},s.prototype.andln=function(e){return this.words[0]&e},s.prototype.bincn=function(e){n("number"==typeof e);var t=e%26,r=(e-t)/26,i=1<>>26,a&=67108863,this.words[o]=a}return 0!==s&&(this.words[o]=s,this.length++),this},s.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},s.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this._strip(),this.length>1)t=1;else{r&&(e=-e),n(e<=67108863,"Number is too big");var i=0|this.words[0];t=i===e?0:ie.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){ni&&(t=1);break}}return t},s.prototype.gtn=function(e){return 1===this.cmpn(e)},s.prototype.gt=function(e){return 1===this.cmp(e)},s.prototype.gten=function(e){return this.cmpn(e)>=0},s.prototype.gte=function(e){return this.cmp(e)>=0},s.prototype.ltn=function(e){return-1===this.cmpn(e)},s.prototype.lt=function(e){return-1===this.cmp(e)},s.prototype.lten=function(e){return this.cmpn(e)<=0},s.prototype.lte=function(e){return this.cmp(e)<=0},s.prototype.eqn=function(e){return 0===this.cmpn(e)},s.prototype.eq=function(e){return 0===this.cmp(e)},s.red=function(e){return new C(e)},s.prototype.toRed=function(e){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},s.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},s.prototype._forceRed=function(e){return this.red=e,this},s.prototype.forceRed=function(e){return n(!this.red,"Already a number in reduction context"),this._forceRed(e)},s.prototype.redAdd=function(e){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},s.prototype.redIAdd=function(e){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},s.prototype.redSub=function(e){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},s.prototype.redISub=function(e){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},s.prototype.redShl=function(e){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},s.prototype.redMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},s.prototype.redIMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},s.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},s.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},s.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},s.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},s.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},s.prototype.redPow=function(e){return n(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var w={k256:null,p224:null,p192:null,p25519:null};function _(e,t){this.name=e,this.p=new s(t,16),this.n=this.p.bitLength(),this.k=new s(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function x(){_.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function k(){_.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function S(){_.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){_.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function C(e){if("string"==typeof e){var t=s._prime(e);this.m=t.p,this.prime=t}else n(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function T(e){C.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new s(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}_.prototype._tmp=function(){var e=new s(null);return e.words=new Array(Math.ceil(this.n/13)),e},_.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},_.prototype.split=function(e,t){e.iushrn(this.n,0,t)},_.prototype.imulK=function(e){return e.imul(this.k)},i(x,_),x.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n>>22,i=s}i>>>=22,e.words[n-10]=i,0===i&&e.length>10?e.length-=10:e.length-=9},x.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},s._prime=function(e){if(w[e])return w[e];var t;if("k256"===e)t=new x;else if("p224"===e)t=new k;else if("p192"===e)t=new S;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new M}return w[e]=t,t},C.prototype._verify1=function(e){n(0===e.negative,"red works only with positives"),n(e.red,"red works only with red numbers")},C.prototype._verify2=function(e,t){n(0==(e.negative|t.negative),"red works only with positives"),n(e.red&&e.red===t.red,"red works only with red numbers")},C.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):(u(e,e.umod(this.m)._forceRed(this)),e)},C.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},C.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},C.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},C.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},C.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},C.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},C.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},C.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},C.prototype.isqr=function(e){return this.imul(e,e.clone())},C.prototype.sqr=function(e){return this.mul(e,e)},C.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(n(t%2==1),3===t){var r=this.m.add(new s(1)).iushrn(2);return this.pow(e,r)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);n(!i.isZero());var a=new s(1).toRed(this),l=a.redNeg(),c=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new s(2*u*u).toRed(this);0!==this.pow(u,c).cmp(l);)u.redIAdd(l);for(var h=this.pow(u,i),f=this.pow(e,i.addn(1).iushrn(1)),d=this.pow(e,i),p=o;0!==d.cmp(a);){for(var m=d,b=0;0!==m.cmp(a);b++)m=m.redSqr();n(b=0;n--){for(var c=t.words[n],u=l-1;u>=0;u--){var h=c>>u&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,(4===++a||0===n&&0===u)&&(i=this.mul(i,r[o]),a=0,o=0)):a=0}l=26}return i},C.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},C.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},s.mont=function(e){return new T(e)},i(T,C),T.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},T.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},T.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),s=i;return i.cmp(this.m)>=0?s=i.isub(this.m):i.cmpn(0)<0&&(s=i.iadd(this.m)),s._forceRed(this)},T.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new s(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},T.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t)},{buffer:188}],187:[function(e,t,r){"use strict";var n;function i(e){this.rand=e}if(t.exports=function(e){return n||(n=new i(null)),n.generate(e)},t.exports.Rand=i,i.prototype.generate=function(e){return this._rand(e)},i.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r>>24]^u[p>>>16&255]^h[m>>>8&255]^f[255&b]^t[g++],o=c[p>>>24]^u[m>>>16&255]^h[b>>>8&255]^f[255&d]^t[g++],a=c[m>>>24]^u[b>>>16&255]^h[d>>>8&255]^f[255&p]^t[g++],l=c[b>>>24]^u[d>>>16&255]^h[p>>>8&255]^f[255&m]^t[g++],d=s,p=o,m=a,b=l;return s=(n[d>>>24]<<24|n[p>>>16&255]<<16|n[m>>>8&255]<<8|n[255&b])^t[g++],o=(n[p>>>24]<<24|n[m>>>16&255]<<16|n[b>>>8&255]<<8|n[255&d])^t[g++],a=(n[m>>>24]<<24|n[b>>>16&255]<<16|n[d>>>8&255]<<8|n[255&p])^t[g++],l=(n[b>>>24]<<24|n[d>>>16&255]<<16|n[p>>>8&255]<<8|n[255&m])^t[g++],[s>>>=0,o>>>=0,a>>>=0,l>>>=0]}var a=[0,1,2,4,8,16,32,64,128,27,54],l=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var r=[],n=[],i=[[],[],[],[]],s=[[],[],[],[]],o=0,a=0,l=0;l<256;++l){var c=a^a<<1^a<<2^a<<3^a<<4;c=c>>>8^255&c^99,r[o]=c,n[c]=o;var u=e[o],h=e[u],f=e[h],d=257*e[c]^16843008*c;i[0][o]=d<<24|d>>>8,i[1][o]=d<<16|d>>>16,i[2][o]=d<<8|d>>>24,i[3][o]=d,d=16843009*f^65537*h^257*u^16843008*o,s[0][c]=d<<24|d>>>8,s[1][c]=d<<16|d>>>16,s[2][c]=d<<8|d>>>24,s[3][c]=d,0===o?o=a=1:(o=u^e[e[e[f^u]]],a^=e[e[a]])}return{SBOX:r,INV_SBOX:n,SUB_MIX:i,INV_SUB_MIX:s}}();function c(e){this._key=i(e),this._reset()}c.blockSize=16,c.keySize=32,c.prototype.blockSize=c.blockSize,c.prototype.keySize=c.keySize,c.prototype._reset=function(){for(var e=this._key,t=e.length,r=t+6,n=4*(r+1),i=[],s=0;s>>24,o=l.SBOX[o>>>24]<<24|l.SBOX[o>>>16&255]<<16|l.SBOX[o>>>8&255]<<8|l.SBOX[255&o],o^=a[s/t|0]<<24):t>6&&s%t==4&&(o=l.SBOX[o>>>24]<<24|l.SBOX[o>>>16&255]<<16|l.SBOX[o>>>8&255]<<8|l.SBOX[255&o]),i[s]=i[s-t]^o}for(var c=[],u=0;u>>24]]^l.INV_SUB_MIX[1][l.SBOX[f>>>16&255]]^l.INV_SUB_MIX[2][l.SBOX[f>>>8&255]]^l.INV_SUB_MIX[3][l.SBOX[255&f]]}this._nRounds=r,this._keySchedule=i,this._invKeySchedule=c},c.prototype.encryptBlockRaw=function(e){return o(e=i(e),this._keySchedule,l.SUB_MIX,l.SBOX,this._nRounds)},c.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),r=n.allocUnsafe(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r},c.prototype.decryptBlock=function(e){var t=(e=i(e))[1];e[1]=e[3],e[3]=t;var r=o(e,this._invKeySchedule,l.INV_SUB_MIX,l.INV_SBOX,this._nRounds),s=n.allocUnsafe(16);return s.writeUInt32BE(r[0],0),s.writeUInt32BE(r[3],4),s.writeUInt32BE(r[2],8),s.writeUInt32BE(r[1],12),s},c.prototype.scrub=function(){s(this._keySchedule),s(this._invKeySchedule),s(this._key)},t.exports.AES=c},{"safe-buffer":494}],190:[function(e,t,r){"use strict";var n=e("./aes"),i=e("safe-buffer").Buffer,s=e("cipher-base"),o=e("inherits"),a=e("./ghash"),l=e("buffer-xor"),c=e("./incr32");function u(e,t,r,o){s.call(this);var l=i.alloc(4,0);this._cipher=new n.AES(t);var u=this._cipher.encryptBlock(l);this._ghash=new a(u),r=function(e,t,r){if(12===t.length)return e._finID=i.concat([t,i.from([0,0,0,1])]),i.concat([t,i.from([0,0,0,2])]);var n=new a(r),s=t.length,o=s%16;n.update(t),o&&(o=16-o,n.update(i.alloc(o,0))),n.update(i.alloc(8,0));var l=8*s,u=i.alloc(8);u.writeUIntBE(l,0,8),n.update(u),e._finID=n.state;var h=i.from(e._finID);return c(h),h}(this,r,u),this._prev=i.from(r),this._cache=i.allocUnsafe(0),this._secCache=i.allocUnsafe(0),this._decrypt=o,this._alen=0,this._len=0,this._mode=e,this._authTag=null,this._called=!1}o(u,s),u.prototype._update=function(e){if(!this._called&&this._alen){var t=16-this._alen%16;t<16&&(t=i.alloc(t,0),this._ghash.update(t))}this._called=!0;var r=this._mode.encrypt(this,e);return this._decrypt?this._ghash.update(e):this._ghash.update(r),this._len+=e.length,r},u.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var e=l(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(e,t){var r=0;e.length!==t.length&&r++;for(var n=Math.min(e.length,t.length),i=0;i16)throw new Error("unable to decrypt data");var r=-1;for(;++r16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},h.prototype.flush=function(){if(this.cache.length)return this.cache},r.createDecipher=function(e,t){var r=s[e.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=c(t,!1,r.key,r.iv);return f(e,n.key,n.iv)},r.createDecipheriv=f},{"./aes":189,"./authCipher":190,"./modes":202,"./streamCipher":205,"cipher-base":221,evp_bytestokey:423,inherits:440,"safe-buffer":494}],193:[function(e,t,r){"use strict";var n=e("./modes"),i=e("./authCipher"),s=e("safe-buffer").Buffer,o=e("./streamCipher"),a=e("cipher-base"),l=e("./aes"),c=e("evp_bytestokey");function u(e,t,r){a.call(this),this._cache=new f,this._cipher=new l.AES(t),this._prev=s.from(r),this._mode=e,this._autopadding=!0}e("inherits")(u,a),u.prototype._update=function(e){var t,r;this._cache.add(e);for(var n=[];t=this._cache.get();)r=this._mode.encrypt(this,t),n.push(r);return s.concat(n)};var h=s.alloc(16,16);function f(){this.cache=s.allocUnsafe(0)}function d(e,t,r){var a=n[e.toLowerCase()];if(!a)throw new TypeError("invalid suite type");if("string"==typeof t&&(t=s.from(t)),t.length!==a.key/8)throw new TypeError("invalid key length "+t.length);if("string"==typeof r&&(r=s.from(r)),"GCM"!==a.mode&&r.length!==a.iv)throw new TypeError("invalid iv length "+r.length);return"stream"===a.type?new o(a.module,t,r):"auth"===a.type?new i(a.module,t,r):new u(a.module,t,r)}u.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if(!e.equals(h))throw this._cipher.scrub(),new Error("data not multiple of block length")},u.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},f.prototype.add=function(e){this.cache=s.concat([this.cache,e])},f.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},f.prototype.flush=function(){for(var e=16-this.cache.length,t=s.allocUnsafe(e),r=-1;++r>>0,0),t.writeUInt32BE(e[1]>>>0,4),t.writeUInt32BE(e[2]>>>0,8),t.writeUInt32BE(e[3]>>>0,12),t}function o(e){this.h=e,this.state=n.alloc(16,0),this.cache=n.allocUnsafe(0)}o.prototype.ghash=function(e){for(var t=-1;++t0;t--)n[t]=n[t]>>>1|(1&n[t-1])<<31;n[0]=n[0]>>>1,r&&(n[0]=n[0]^225<<24)}this.state=s(i)},o.prototype.update=function(e){var t;for(this.cache=n.concat([this.cache,e]);this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},o.prototype.final=function(e,t){return this.cache.length&&this.ghash(n.concat([this.cache,i],16)),this.ghash(s([0,e,0,t])),this.state},t.exports=o},{"safe-buffer":494}],195:[function(e,t,r){"use strict";t.exports=function(e){for(var t,r=e.length;r--;){if(255!==(t=e.readUInt8(r))){t++,e.writeUInt8(t,r);break}e.writeUInt8(0,r)}}},{}],196:[function(e,t,r){"use strict";var n=e("buffer-xor");r.encrypt=function(e,t){var r=n(t,e._prev);return e._prev=e._cipher.encryptBlock(r),e._prev},r.decrypt=function(e,t){var r=e._prev;e._prev=t;var i=e._cipher.decryptBlock(t);return n(i,r)}},{"buffer-xor":219}],197:[function(e,t,r){"use strict";var n=e("safe-buffer").Buffer,i=e("buffer-xor");function s(e,t,r){var s=t.length,o=i(t,e._cache);return e._cache=e._cache.slice(s),e._prev=n.concat([e._prev,r?t:o]),o}r.encrypt=function(e,t,r){for(var i,o=n.allocUnsafe(0);t.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=n.allocUnsafe(0)),!(e._cache.length<=t.length)){o=n.concat([o,s(e,t,r)]);break}i=e._cache.length,o=n.concat([o,s(e,t.slice(0,i),r)]),t=t.slice(i)}return o}},{"buffer-xor":219,"safe-buffer":494}],198:[function(e,t,r){"use strict";var n=e("safe-buffer").Buffer;function i(e,t,r){for(var n,i,o=-1,a=0;++o<8;)n=t&1<<7-o?128:0,a+=(128&(i=e._cipher.encryptBlock(e._prev)[0]^n))>>o%8,e._prev=s(e._prev,r?n:i);return a}function s(e,t){var r=e.length,i=-1,s=n.allocUnsafe(e.length);for(e=n.concat([e,n.from([t])]);++i>7;return s}r.encrypt=function(e,t,r){for(var s=t.length,o=n.allocUnsafe(s),a=-1;++a=0||!t.umod(e.prime1)||!t.umod(e.prime2));return t}function o(e,t){var i=function(e){var t=s(e);return{blinder:t.toRed(n.mont(e.modulus)).redPow(new n(e.publicExponent)).fromRed(),unblinder:t.invm(e.modulus)}}(t),o=t.modulus.byteLength(),a=new n(e).mul(i.blinder).umod(t.modulus),l=a.toRed(n.mont(t.prime1)),c=a.toRed(n.mont(t.prime2)),u=t.coefficient,h=t.prime1,f=t.prime2,d=l.redPow(t.exponent1).fromRed(),p=c.redPow(t.exponent2).fromRed(),m=d.isub(p).imul(u).umod(h).imul(f);return p.iadd(m).imul(i.unblinder).umod(t.modulus).toArrayLike(r,"be",o)}o.getr=s,t.exports=o}).call(this)}).call(this,e("buffer").Buffer)},{"bn.js":186,buffer:220,randombytes:475}],210:[function(e,t,r){"use strict";t.exports=e("./browser/algorithms.json")},{"./browser/algorithms.json":211}],211:[function(e,t,r){t.exports={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}}},{}],212:[function(e,t,r){t.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}},{}],213:[function(e,t,r){"use strict";var n=e("safe-buffer").Buffer,i=e("create-hash"),s=e("readable-stream"),o=e("inherits"),a=e("./sign"),l=e("./verify"),c=e("./algorithms.json");function u(e){s.Writable.call(this);var t=c[e];if(!t)throw new Error("Unknown message digest");this._hashType=t.hash,this._hash=i(t.hash),this._tag=t.id,this._signType=t.sign}function h(e){s.Writable.call(this);var t=c[e];if(!t)throw new Error("Unknown message digest");this._hash=i(t.hash),this._tag=t.id,this._signType=t.sign}function f(e){return new u(e)}function d(e){return new h(e)}Object.keys(c).forEach((function(e){c[e].id=n.from(c[e].id,"hex"),c[e.toLowerCase()]=c[e]})),o(u,s.Writable),u.prototype._write=function(e,t,r){this._hash.update(e),r()},u.prototype.update=function(e,t){return"string"==typeof e&&(e=n.from(e,t)),this._hash.update(e),this},u.prototype.sign=function(e,t){this.end();var r=this._hash.digest(),n=a(r,e,this._hashType,this._signType,this._tag);return t?n.toString(t):n},o(h,s.Writable),h.prototype._write=function(e,t,r){this._hash.update(e),r()},h.prototype.update=function(e,t){return"string"==typeof e&&(e=n.from(e,t)),this._hash.update(e),this},h.prototype.verify=function(e,t,r){"string"==typeof t&&(t=n.from(t,r)),this.end();var i=this._hash.digest();return l(t,i,e,this._signType,this._tag)},t.exports={Sign:f,Verify:d,createSign:f,createVerify:d}},{"./algorithms.json":211,"./sign":214,"./verify":215,"create-hash":386,inherits:440,"readable-stream":491,"safe-buffer":494}],214:[function(e,t,r){"use strict";var n=e("safe-buffer").Buffer,i=e("create-hmac"),s=e("browserify-rsa"),o=e("elliptic").ec,a=e("bn.js"),l=e("parse-asn1"),c=e("./curves.json");function u(e,t,r,s){if((e=n.from(e.toArray())).length0&&r.ishrn(n),r}function f(e,t,r){var s,o;do{for(s=n.alloc(0);8*s.length=t)throw new Error("invalid sig")}t.exports=function(e,t,r,c,u){var h=o(r);if("ec"===h.type){if("ecdsa"!==c&&"ecdsa/rsa"!==c)throw new Error("wrong public key type");return function(e,t,r){var n=a[r.data.algorithm.curve.join(".")];if(!n)throw new Error("unknown curve "+r.data.algorithm.curve.join("."));var i=new s(n),o=r.data.subjectPrivateKey.data;return i.verify(t,e,o)}(e,t,h)}if("dsa"===h.type){if("dsa"!==c)throw new Error("wrong public key type");return function(e,t,r){var n=r.data.p,s=r.data.q,a=r.data.g,c=r.data.pub_key,u=o.signature.decode(e,"der"),h=u.s,f=u.r;l(h,s),l(f,s);var d=i.mont(n),p=h.invm(s);return 0===a.toRed(d).redPow(new i(t).mul(p).mod(s)).fromRed().mul(c.toRed(d).redPow(f.mul(p).mod(s)).fromRed()).mod(n).mod(s).cmp(f)}(e,t,h)}if("rsa"!==c&&"ecdsa/rsa"!==c)throw new Error("wrong public key type");t=n.concat([u,t]);for(var f=h.modulus.byteLength(),d=[1],p=0;t.length+d.length+2>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function a(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"\ufffd";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"\ufffd";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"\ufffd"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function u(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function f(e){return e.toString(this.encoding)}function d(e){return e&&e.length?this.write(e):""}r.StringDecoder=s,s.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(e.lastNeed=i-1),i;if(--n=0)return i>0&&(e.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},s.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},{"safe-buffer":217}],219:[function(e,t,r){(function(e){(function(){"use strict";t.exports=function(t,r){for(var n=Math.min(t.length,r.length),i=new e(n),s=0;s + * @license MIT + */ +"use strict";var t=e("base64-js"),n=e("ieee754");r.Buffer=s,r.SlowBuffer=function(e){+e!=e&&(e=0);return s.alloc(+e)},r.INSPECT_MAX_BYTES=50;function i(e){if(e>2147483647)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return t.__proto__=s.prototype,t}function s(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return l(e)}return o(e,t,r)}function o(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!s.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|h(e,t),n=i(r),o=n.write(e,t);o!==r&&(n=n.slice(0,o));return n}(e,t);if(ArrayBuffer.isView(e))return c(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(F(e,ArrayBuffer)||e&&F(e.buffer,ArrayBuffer))return function(e,t,r){if(t<0||e.byteLength=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+2147483647..toString(16)+" bytes");return 0|e}function h(e,t){if(s.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||F(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return P(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return B(e).length;default:if(i)return n?-1:P(e).length;t=(""+t).toLowerCase(),i=!0}}function f(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return C(this,t,r);case"utf8":case"utf-8":return k(this,t,r);case"ascii":return S(this,t,r);case"latin1":case"binary":return M(this,t,r);case"base64":return x(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function d(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function p(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),L(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=s.from(t,n)),s.isBuffer(t))return 0===t.length?-1:m(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):m(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(e,t,r,n,i){var s,o=1,a=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o=2,a/=2,l/=2,r/=2}function c(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var u=-1;for(s=r;sa&&(r=a-l),s=r;s>=0;s--){for(var h=!0,f=0;fi&&(n=i):n=i;var s=t.length;n>s/2&&(n=s/2);for(var o=0;o>8,i=r%256,s.push(i),s.push(n);return s}(t,e.length-r),e,r,n)}function x(e,r,n){return 0===r&&n===e.length?t.fromByteArray(e):t.fromByteArray(e.slice(r,n))}function k(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:c>223?3:c>191?2:1;if(i+h<=r)switch(h){case 1:c<128&&(u=c);break;case 2:128==(192&(s=e[i+1]))&&(l=(31&c)<<6|63&s)>127&&(u=l);break;case 3:s=e[i+1],o=e[i+2],128==(192&s)&&128==(192&o)&&(l=(15&c)<<12|(63&s)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:s=e[i+1],o=e[i+2],a=e[i+3],128==(192&s)&&128==(192&o)&&128==(192&a)&&(l=(15&c)<<18|(63&s)<<12|(63&o)<<6|63&a)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=h}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nt&&(e+=" ... "),""},s.prototype.compare=function(e,t,r,n,i){if(F(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),!s.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),l=Math.min(o,a),c=this.slice(n,i),u=e.slice(t,r),h=0;h>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var s=!1;;)switch(n){case"hex":return b(this,e,t,r);case"utf8":case"utf-8":return g(this,e,t,r);case"ascii":return y(this,e,t,r);case"latin1":case"binary":return v(this,e,t,r);case"base64":return w(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,e,t,r);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function S(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",s=t;sr)throw new RangeError("Trying to access beyond buffer length")}function A(e,t,r,n,i,o){if(!s.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function R(e,t,r,n,i,s){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function O(e,t,r,i,s){return t=+t,r>>>=0,s||R(e,0,r,4),n.write(e,t,r,i,23,4),r+4}function j(e,t,r,i,s){return t=+t,r>>>=0,s||R(e,0,r,8),n.write(e,t,r,i,52,8),r+8}s.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||E(e,t,this.length);for(var n=this[e],i=1,s=0;++s>>=0,t>>>=0,r||E(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},s.prototype.readUInt8=function(e,t){return e>>>=0,t||E(e,1,this.length),this[e]},s.prototype.readUInt16LE=function(e,t){return e>>>=0,t||E(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUInt16BE=function(e,t){return e>>>=0,t||E(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUInt32LE=function(e,t){return e>>>=0,t||E(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},s.prototype.readUInt32BE=function(e,t){return e>>>=0,t||E(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||E(e,t,this.length);for(var n=this[e],i=1,s=0;++s=(i*=128)&&(n-=Math.pow(2,8*t)),n},s.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||E(e,t,this.length);for(var n=t,i=1,s=this[e+--n];n>0&&(i*=256);)s+=this[e+--n]*i;return s>=(i*=128)&&(s-=Math.pow(2,8*t)),s},s.prototype.readInt8=function(e,t){return e>>>=0,t||E(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},s.prototype.readInt16LE=function(e,t){e>>>=0,t||E(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt16BE=function(e,t){e>>>=0,t||E(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt32LE=function(e,t){return e>>>=0,t||E(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return e>>>=0,t||E(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readFloatLE=function(e,t){return e>>>=0,t||E(e,4,this.length),n.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return e>>>=0,t||E(e,4,this.length),n.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return e>>>=0,t||E(e,8,this.length),n.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return e>>>=0,t||E(e,8,this.length),n.read(this,e,!1,52,8)},s.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t>>>=0,r>>>=0,n)||A(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,s=0;for(this[t]=255&e;++s>>=0,r>>>=0,n)||A(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,s=1;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=e/s&255;return t+r},s.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,1,255,0),this[t]=255&e,t+1},s.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},s.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},s.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},s.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},s.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);A(this,e,t,r,i-1,-i)}var s=0,o=1,a=0;for(this[t]=255&e;++s>0)-a&255;return t+r},s.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);A(this,e,t,r,i-1,-i)}var s=r-1,o=1,a=0;for(this[t+s]=255&e;--s>=0&&(o*=256);)e<0&&0===a&&0!==this[t+s+1]&&(a=1),this[t+s]=(e/o>>0)-a&255;return t+r},s.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},s.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},s.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},s.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},s.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||A(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},s.prototype.writeFloatLE=function(e,t,r){return O(this,e,t,!0,r)},s.prototype.writeFloatBE=function(e,t,r){return O(this,e,t,!1,r)},s.prototype.writeDoubleLE=function(e,t,r){return j(this,e,t,!0,r)},s.prototype.writeDoubleBE=function(e,t,r){return j(this,e,t,!1,r)},s.prototype.copy=function(e,t,r,n){if(!s.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--o)e[o+t]=this[o+r];else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return i},s.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!s.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===e.length){var i=e.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(e=i)}}else"number"==typeof e&&(e&=255);if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&s.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&s.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&s.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;s.push(r)}else if(r<2048){if((t-=2)<0)break;s.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function B(e){return t.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(I,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function D(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function F(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function L(e){return e!=e}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":185,buffer:220,ieee754:439}],221:[function(e,t,r){"use strict";var n=e("safe-buffer").Buffer,i=e("stream").Transform,s=e("string_decoder").StringDecoder;function o(e){i.call(this),this.hashMode="string"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}e("inherits")(o,i),o.prototype.update=function(e,t,r){"string"==typeof e&&(e=n.from(e,t));var i=this._update(e);return this.hashMode?this:(r&&(i=this._toString(i,r)),i)},o.prototype.setAutoPadding=function(){},o.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},o.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},o.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},o.prototype._transform=function(e,t,r){var n;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){n=e}finally{r(n)}},o.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},o.prototype._finalOrDigest=function(e){var t=this.__final()||n.alloc(0);return e&&(t=this._toString(t,e,!0)),t},o.prototype._toString=function(e,t,r){if(this._decoder||(this._decoder=new s(t),this._encoding=t),this._encoding!==t)throw new Error("can't switch encodings");var n=this._decoder.write(e);return r&&(n+=this._decoder.end()),n},t.exports=o},{inherits:440,"safe-buffer":494,stream:505,string_decoder:218}],222:[function(e,t,r){"use strict";var n=e("../internals/is-callable"),i=e("../internals/try-to-string"),s=TypeError;t.exports=function(e){if(n(e))return e;throw new s(i(e)+" is not a function")}},{"../internals/is-callable":285,"../internals/try-to-string":349}],223:[function(e,t,r){"use strict";var n=e("../internals/is-constructor"),i=e("../internals/try-to-string"),s=TypeError;t.exports=function(e){if(n(e))return e;throw new s(i(e)+" is not a constructor")}},{"../internals/is-constructor":286,"../internals/try-to-string":349}],224:[function(e,t,r){"use strict";var n=e("../internals/is-callable"),i=String,s=TypeError;t.exports=function(e){if("object"==typeof e||n(e))return e;throw new s("Can't set "+i(e)+" as a prototype")}},{"../internals/is-callable":285}],225:[function(e,t,r){"use strict";var n=e("../internals/well-known-symbol"),i=e("../internals/object-create"),s=e("../internals/object-define-property").f,o=n("unscopables"),a=Array.prototype;void 0===a[o]&&s(a,o,{configurable:!0,value:i(null)}),t.exports=function(e){a[o][e]=!0}},{"../internals/object-create":306,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],226:[function(e,t,r){"use strict";var n=e("../internals/object-is-prototype-of"),i=TypeError;t.exports=function(e,t){if(n(t,e))return e;throw new i("Incorrect invocation")}},{"../internals/object-is-prototype-of":314}],227:[function(e,t,r){"use strict";var n=e("../internals/is-object"),i=String,s=TypeError;t.exports=function(e){if(n(e))return e;throw new s(i(e)+" is not an object")}},{"../internals/is-object":289}],228:[function(e,t,r){"use strict";var n=e("../internals/to-indexed-object"),i=e("../internals/to-absolute-index"),s=e("../internals/length-of-array-like"),o=function(e){return function(t,r,o){var a,l=n(t),c=s(l),u=i(o,c);if(e&&r!=r){for(;c>u;)if((a=l[u++])!=a)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===r)return e||u||0;return!e&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},{"../internals/length-of-array-like":299,"../internals/to-absolute-index":340,"../internals/to-indexed-object":341}],229:[function(e,t,r){"use strict";var n=e("../internals/function-bind-context"),i=e("../internals/function-uncurry-this"),s=e("../internals/indexed-object"),o=e("../internals/to-object"),a=e("../internals/length-of-array-like"),l=e("../internals/array-species-create"),c=i([].push),u=function(e){var t=1===e,r=2===e,i=3===e,u=4===e,h=6===e,f=7===e,d=5===e||h;return function(p,m,b,g){for(var y,v,w=o(p),_=s(w),x=n(m,b),k=a(_),S=0,M=g||l,C=t?M(p,k):r||f?M(p,0):void 0;k>S;S++)if((d||S in _)&&(v=x(y=_[S],S,w),e))if(t)C[S]=v;else if(v)switch(e){case 3:return!0;case 5:return y;case 6:return S;case 2:c(C,y)}else switch(e){case 4:return!1;case 7:c(C,y)}return h?-1:i||u?u:C}};t.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},{"../internals/array-species-create":233,"../internals/function-bind-context":262,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/length-of-array-like":299,"../internals/to-object":344}],230:[function(e,t,r){"use strict";var n=e("../internals/to-absolute-index"),i=e("../internals/length-of-array-like"),s=e("../internals/create-property"),o=Array,a=Math.max;t.exports=function(e,t,r){for(var l=i(e),c=n(t,l),u=n(void 0===r?l:r,l),h=o(a(u-c,0)),f=0;c0&&n[0]<4?1:+(n[0]+n[1])),!i&&o&&(!(n=o.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\/(\d+)/))&&(i=+n[1]),t.exports=i},{"../internals/engine-user-agent":256,"../internals/global":274}],258:[function(e,t,r){"use strict";t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],259:[function(e,t,r){"use strict";var n=e("../internals/global"),i=e("../internals/object-get-own-property-descriptor").f,s=e("../internals/create-non-enumerable-property"),o=e("../internals/define-built-in"),a=e("../internals/define-global-property"),l=e("../internals/copy-constructor-properties"),c=e("../internals/is-forced");t.exports=function(e,t){var r,u,h,f,d,p=e.target,m=e.global,b=e.stat;if(r=m?n:b?n[p]||a(p,{}):(n[p]||{}).prototype)for(u in t){if(f=t[u],h=e.dontCallGetSet?(d=i(r,u))&&d.value:r[u],!c(m?u:p+(b?".":"#")+u,e.forced)&&void 0!==h){if(typeof f==typeof h)continue;l(f,h)}(e.sham||h&&h.sham)&&s(f,"sham",!0),o(r,u,f,e)}}},{"../internals/copy-constructor-properties":237,"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/define-global-property":246,"../internals/global":274,"../internals/is-forced":287,"../internals/object-get-own-property-descriptor":309}],260:[function(e,t,r){"use strict";t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],261:[function(e,t,r){"use strict";var n=e("../internals/function-bind-native"),i=Function.prototype,s=i.apply,o=i.call;t.exports="object"==typeof Reflect&&Reflect.apply||(n?o.bind(s):function(){return o.apply(s,arguments)})},{"../internals/function-bind-native":263}],262:[function(e,t,r){"use strict";var n=e("../internals/function-uncurry-this-clause"),i=e("../internals/a-callable"),s=e("../internals/function-bind-native"),o=n(n.bind);t.exports=function(e,t){return i(e),void 0===t?e:s?o(e,t):function(){return e.apply(t,arguments)}}},{"../internals/a-callable":222,"../internals/function-bind-native":263,"../internals/function-uncurry-this-clause":267}],263:[function(e,t,r){"use strict";var n=e("../internals/fails");t.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},{"../internals/fails":260}],264:[function(e,t,r){"use strict";var n=e("../internals/function-bind-native"),i=Function.prototype.call;t.exports=n?i.bind(i):function(){return i.apply(i,arguments)}},{"../internals/function-bind-native":263}],265:[function(e,t,r){"use strict";var n=e("../internals/descriptors"),i=e("../internals/has-own-property"),s=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,a=i(s,"name"),l=a&&"something"===function(){}.name,c=a&&(!n||n&&o(s,"name").configurable);t.exports={EXISTS:a,PROPER:l,CONFIGURABLE:c}},{"../internals/descriptors":247,"../internals/has-own-property":275}],266:[function(e,t,r){"use strict";var n=e("../internals/function-uncurry-this"),i=e("../internals/a-callable");t.exports=function(e,t,r){try{return n(i(Object.getOwnPropertyDescriptor(e,t)[r]))}catch(e){}}},{"../internals/a-callable":222,"../internals/function-uncurry-this":268}],267:[function(e,t,r){"use strict";var n=e("../internals/classof-raw"),i=e("../internals/function-uncurry-this");t.exports=function(e){if("Function"===n(e))return i(e)}},{"../internals/classof-raw":235,"../internals/function-uncurry-this":268}],268:[function(e,t,r){"use strict";var n=e("../internals/function-bind-native"),i=Function.prototype,s=i.call,o=n&&i.bind.bind(s,s);t.exports=n?o:function(e){return function(){return s.apply(e,arguments)}}},{"../internals/function-bind-native":263}],269:[function(e,t,r){"use strict";var n=e("../internals/global"),i=e("../internals/is-callable"),s=function(e){return i(e)?e:void 0};t.exports=function(e,t){return arguments.length<2?s(n[e]):n[e]&&n[e][t]}},{"../internals/global":274,"../internals/is-callable":285}],270:[function(e,t,r){"use strict";var n=e("../internals/classof"),i=e("../internals/get-method"),s=e("../internals/is-null-or-undefined"),o=e("../internals/iterators"),a=e("../internals/well-known-symbol")("iterator");t.exports=function(e){if(!s(e))return i(e,a)||i(e,"@@iterator")||o[n(e)]}},{"../internals/classof":236,"../internals/get-method":273,"../internals/is-null-or-undefined":288,"../internals/iterators":298,"../internals/well-known-symbol":357}],271:[function(e,t,r){"use strict";var n=e("../internals/function-call"),i=e("../internals/a-callable"),s=e("../internals/an-object"),o=e("../internals/try-to-string"),a=e("../internals/get-iterator-method"),l=TypeError;t.exports=function(e,t){var r=arguments.length<2?a(e):t;if(i(r))return s(n(r,e));throw new l(o(e)+" is not iterable")}},{"../internals/a-callable":222,"../internals/an-object":227,"../internals/function-call":264,"../internals/get-iterator-method":270,"../internals/try-to-string":349}],272:[function(e,t,r){"use strict";var n=e("../internals/function-uncurry-this"),i=e("../internals/is-array"),s=e("../internals/is-callable"),o=e("../internals/classof-raw"),a=e("../internals/to-string"),l=n([].push);t.exports=function(e){if(s(e))return e;if(i(e)){for(var t=e.length,r=[],n=0;ny;y++)if((w=R(e[y]))&&c(m,w))return w;return new p(!1)}b=u(e,g)}for(_=M?e.next:b.next;!(x=i(_,b)).done;){try{w=R(x.value)}catch(e){f(b,"throw",e)}if("object"==typeof w&&w&&c(m,w))return w}return new p(!1)}},{"../internals/an-object":227,"../internals/function-bind-context":262,"../internals/function-call":264,"../internals/get-iterator":271,"../internals/get-iterator-method":270,"../internals/is-array-iterator-method":283,"../internals/iterator-close":294,"../internals/length-of-array-like":299,"../internals/object-is-prototype-of":314,"../internals/try-to-string":349}],294:[function(e,t,r){"use strict";var n=e("../internals/function-call"),i=e("../internals/an-object"),s=e("../internals/get-method");t.exports=function(e,t,r){var o,a;i(e);try{if(!(o=s(e,"return"))){if("throw"===t)throw r;return r}o=n(o,e)}catch(e){a=!0,o=e}if("throw"===t)throw r;if(a)throw o;return i(o),r}},{"../internals/an-object":227,"../internals/function-call":264,"../internals/get-method":273}],295:[function(e,t,r){"use strict";var n=e("../internals/iterators-core").IteratorPrototype,i=e("../internals/object-create"),s=e("../internals/create-property-descriptor"),o=e("../internals/set-to-string-tag"),a=e("../internals/iterators"),l=function(){return this};t.exports=function(e,t,r,c){var u=t+" Iterator";return e.prototype=i(n,{next:s(+!c,r)}),o(e,u,!1,!0),a[u]=l,e}},{"../internals/create-property-descriptor":242,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-create":306,"../internals/set-to-string-tag":331}],296:[function(e,t,r){"use strict";var n=e("../internals/export"),i=e("../internals/function-call"),s=e("../internals/is-pure"),o=e("../internals/function-name"),a=e("../internals/is-callable"),l=e("../internals/iterator-create-constructor"),c=e("../internals/object-get-prototype-of"),u=e("../internals/object-set-prototype-of"),h=e("../internals/set-to-string-tag"),f=e("../internals/create-non-enumerable-property"),d=e("../internals/define-built-in"),p=e("../internals/well-known-symbol"),m=e("../internals/iterators"),b=e("../internals/iterators-core"),g=o.PROPER,y=o.CONFIGURABLE,v=b.IteratorPrototype,w=b.BUGGY_SAFARI_ITERATORS,_=p("iterator"),x=function(){return this};t.exports=function(e,t,r,o,p,b,k){l(r,t,o);var S,M,C,T=function(e){if(e===p&&j)return j;if(!w&&e&&e in R)return R[e];switch(e){case"keys":case"values":case"entries":return function(){return new r(this,e)}}return function(){return new r(this)}},E=t+" Iterator",A=!1,R=e.prototype,O=R[_]||R["@@iterator"]||p&&R[p],j=!w&&O||T(p),I="Array"===t&&R.entries||O;if(I&&(S=c(I.call(new e)))!==Object.prototype&&S.next&&(s||c(S)===v||(u?u(S,v):a(S[_])||d(S,_,x)),h(S,E,!0,!0),s&&(m[E]=x)),g&&"values"===p&&O&&"values"!==O.name&&(!s&&y?f(R,"name","values"):(A=!0,j=function(){return i(O,this)})),p)if(M={values:T("values"),keys:b?j:T("keys"),entries:T("entries")},k)for(C in M)(w||A||!(C in R))&&d(R,C,M[C]);else n({target:t,proto:!0,forced:w||A},M);return s&&!k||R[_]===j||d(R,_,j,{name:p}),m[t]=j,M}},{"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/export":259,"../internals/function-call":264,"../internals/function-name":265,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/iterator-create-constructor":295,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-get-prototype-of":313,"../internals/object-set-prototype-of":318,"../internals/set-to-string-tag":331,"../internals/well-known-symbol":357}],297:[function(e,t,r){"use strict";var n,i,s,o=e("../internals/fails"),a=e("../internals/is-callable"),l=e("../internals/is-object"),c=e("../internals/object-create"),u=e("../internals/object-get-prototype-of"),h=e("../internals/define-built-in"),f=e("../internals/well-known-symbol"),d=e("../internals/is-pure"),p=f("iterator"),m=!1;[].keys&&("next"in(s=[].keys())?(i=u(u(s)))!==Object.prototype&&(n=i):m=!0),!l(n)||o((function(){var e={};return n[p].call(e)!==e}))?n={}:d&&(n=c(n)),a(n[p])||h(n,p,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:m}},{"../internals/define-built-in":245,"../internals/fails":260,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-get-prototype-of":313,"../internals/well-known-symbol":357}],298:[function(e,t,r){arguments[4][276][0].apply(r,arguments)},{dup:276}],299:[function(e,t,r){"use strict";var n=e("../internals/to-length");t.exports=function(e){return n(e.length)}},{"../internals/to-length":343}],300:[function(e,t,r){"use strict";var n=e("../internals/function-uncurry-this"),i=e("../internals/fails"),s=e("../internals/is-callable"),o=e("../internals/has-own-property"),a=e("../internals/descriptors"),l=e("../internals/function-name").CONFIGURABLE,c=e("../internals/inspect-source"),u=e("../internals/internal-state"),h=u.enforce,f=u.get,d=String,p=Object.defineProperty,m=n("".slice),b=n("".replace),g=n([].join),y=a&&!i((function(){return 8!==p((function(){}),"length",{value:8}).length})),v=String(String).split("String"),w=t.exports=function(e,t,r){"Symbol("===m(d(t),0,7)&&(t="["+b(d(t),/^Symbol\(([^)]*)\)/,"$1")+"]"),r&&r.getter&&(t="get "+t),r&&r.setter&&(t="set "+t),(!o(e,"name")||l&&e.name!==t)&&(a?p(e,"name",{value:t,configurable:!0}):e.name=t),y&&r&&o(r,"arity")&&e.length!==r.arity&&p(e,"length",{value:r.arity});try{r&&o(r,"constructor")&&r.constructor?a&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=h(e);return o(n,"source")||(n.source=g(v,"string"==typeof t?t:"")),e};Function.prototype.toString=w((function(){return s(this)&&f(this).source||c(this)}),"toString")},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-name":265,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/inspect-source":281,"../internals/internal-state":282,"../internals/is-callable":285}],301:[function(e,t,r){"use strict";var n=Math.ceil,i=Math.floor;t.exports=Math.trunc||function(e){var t=+e;return(t>0?i:n)(t)}},{}],302:[function(e,t,r){"use strict";var n,i,s,o,a,l=e("../internals/global"),c=e("../internals/function-bind-context"),u=e("../internals/object-get-own-property-descriptor").f,h=e("../internals/task").set,f=e("../internals/queue"),d=e("../internals/engine-is-ios"),p=e("../internals/engine-is-ios-pebble"),m=e("../internals/engine-is-webos-webkit"),b=e("../internals/engine-is-node"),g=l.MutationObserver||l.WebKitMutationObserver,y=l.document,v=l.process,w=l.Promise,_=u(l,"queueMicrotask"),x=_&&_.value;if(!x){var k=new f,S=function(){var e,t;for(b&&(e=v.domain)&&e.exit();t=k.get();)try{t()}catch(e){throw k.head&&n(),e}e&&e.enter()};d||b||m||!g||!y?!p&&w&&w.resolve?((o=w.resolve(void 0)).constructor=w,a=c(o.then,o),n=function(){a(S)}):b?n=function(){v.nextTick(S)}:(h=c(h,l),n=function(){h(S)}):(i=!0,s=y.createTextNode(""),new g(S).observe(s,{characterData:!0}),n=function(){s.data=i=!i}),x=function(e){k.head||n(),k.add(e)}}t.exports=x},{"../internals/engine-is-ios":253,"../internals/engine-is-ios-pebble":252,"../internals/engine-is-node":254,"../internals/engine-is-webos-webkit":255,"../internals/function-bind-context":262,"../internals/global":274,"../internals/object-get-own-property-descriptor":309,"../internals/queue":328,"../internals/task":339}],303:[function(e,t,r){"use strict";var n=e("../internals/a-callable"),i=TypeError,s=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw new i("Bad Promise constructor");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};t.exports.f=function(e){return new s(e)}},{"../internals/a-callable":222}],304:[function(e,t,r){"use strict";var n=e("../internals/is-regexp"),i=TypeError;t.exports=function(e){if(n(e))throw new i("The method doesn't accept regular expressions");return e}},{"../internals/is-regexp":291}],305:[function(e,t,r){"use strict";var n=e("../internals/descriptors"),i=e("../internals/function-uncurry-this"),s=e("../internals/function-call"),o=e("../internals/fails"),a=e("../internals/object-keys"),l=e("../internals/object-get-own-property-symbols"),c=e("../internals/object-property-is-enumerable"),u=e("../internals/to-object"),h=e("../internals/indexed-object"),f=Object.assign,d=Object.defineProperty,p=i([].concat);t.exports=!f||o((function(){if(n&&1!==f({b:1},f(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol("assign detection");return e[r]=7,"abcdefghijklmnopqrst".split("").forEach((function(e){t[e]=e})),7!==f({},e)[r]||"abcdefghijklmnopqrst"!==a(f({},t)).join("")}))?function(e,t){for(var r=u(e),i=arguments.length,o=1,f=l.f,d=c.f;i>o;)for(var m,b=h(arguments[o++]),g=f?p(a(b),f(b)):a(b),y=g.length,v=0;y>v;)m=g[v++],n&&!s(d,b,m)||(r[m]=b[m]);return r}:f},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/object-get-own-property-symbols":312,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-object":344}],306:[function(e,t,r){"use strict";var n,i=e("../internals/an-object"),s=e("../internals/object-define-properties"),o=e("../internals/enum-bug-keys"),a=e("../internals/hidden-keys"),l=e("../internals/html"),c=e("../internals/document-create-element"),u=e("../internals/shared-key"),h=u("IE_PROTO"),f=function(){},d=function(e){return" +``` + +### UMD + +To load this module directly into older browsers you can use the [UMD (Universal Module Definition)](https://github.com/umdjs/umd) builds from any of the following CDNs: + +**Using [UNPKG](https://unpkg.com/uuid@latest/dist/umd/)**: + +```html + +``` + +**Using [jsDelivr](https://cdn.jsdelivr.net/npm/uuid@latest/dist/umd/)**: + +```html + +``` + +**Using [cdnjs](https://cdnjs.com/libraries/uuid)**: + +```html + +``` + +These CDNs all provide the same [`uuidv4()`](#uuidv4options-buffer-offset) method: + +```html + +``` + +Methods for the other algorithms ([`uuidv1()`](#uuidv1options-buffer-offset), [`uuidv3()`](#uuidv3name-namespace-buffer-offset) and [`uuidv5()`](#uuidv5name-namespace-buffer-offset)) are available from the files `uuidv1.min.js`, `uuidv3.min.js` and `uuidv5.min.js` respectively. + +## "getRandomValues() not supported" + +This error occurs in environments where the standard [`crypto.getRandomValues()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues) API is not supported. This issue can be resolved by adding an appropriate polyfill: + +### React Native / Expo + +1. Install [`react-native-get-random-values`](https://github.com/LinusU/react-native-get-random-values#readme) +1. Import it _before_ `uuid`. Since `uuid` might also appear as a transitive dependency of some other imports it's safest to just import `react-native-get-random-values` as the very first thing in your entry point: + +```javascript +import 'react-native-get-random-values'; +import { v4 as uuidv4 } from 'uuid'; +``` + +Note: If you are using Expo, you must be using at least `react-native-get-random-values@1.5.0` and `expo@39.0.0`. + +### Web Workers / Service Workers (Edge <= 18) + +[In Edge <= 18, Web Crypto is not supported in Web Workers or Service Workers](https://caniuse.com/#feat=cryptography) and we are not aware of a polyfill (let us know if you find one, please). + +## Upgrading From `uuid@7.x` + +### Only Named Exports Supported When Using with Node.js ESM + +`uuid@7.x` did not come with native ECMAScript Module (ESM) support for Node.js. Importing it in Node.js ESM consequently imported the CommonJS source with a default export. This library now comes with true Node.js ESM support and only provides named exports. + +Instead of doing: + +```javascript +import uuid from 'uuid'; +uuid.v4(); +``` + +you will now have to use the named exports: + +```javascript +import { v4 as uuidv4 } from 'uuid'; +uuidv4(); +``` + +### Deep Requires No Longer Supported + +Deep requires like `require('uuid/v4')` [which have been deprecated in `uuid@7.x`](#deep-requires-now-deprecated) are no longer supported. + +## Upgrading From `uuid@3.x` + +"_Wait... what happened to `uuid@4.x` - `uuid@6.x`?!?_" + +In order to avoid confusion with RFC [version 4](#uuidv4options-buffer-offset) and [version 5](#uuidv5name-namespace-buffer-offset) UUIDs, and a possible [version 6](http://gh.peabody.io/uuidv6/), releases 4 thru 6 of this module have been skipped. + +### Deep Requires Now Deprecated + +`uuid@3.x` encouraged the use of deep requires to minimize the bundle size of browser builds: + +```javascript +const uuidv4 = require('uuid/v4'); // <== NOW DEPRECATED! +uuidv4(); +``` + +As of `uuid@7.x` this library now provides ECMAScript modules builds, which allow packagers like Webpack and Rollup to do "tree-shaking" to remove dead code. Instead, use the `import` syntax: + +```javascript +import { v4 as uuidv4 } from 'uuid'; +uuidv4(); +``` + +... or for CommonJS: + +```javascript +const { v4: uuidv4 } = require('uuid'); +uuidv4(); +``` + +### Default Export Removed + +`uuid@3.x` was exporting the Version 4 UUID method as a default export: + +```javascript +const uuid = require('uuid'); // <== REMOVED! +``` + +This usage pattern was already discouraged in `uuid@3.x` and has been removed in `uuid@7.x`. + +---- +Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/bin/uuid b/node_backend/node_modules/uuid/dist/bin/uuid new file mode 100644 index 0000000000000000000000000000000000000000..f38d2ee19e7d3597c8a3fc18cb275c5028164b1f --- /dev/null +++ b/node_backend/node_modules/uuid/dist/bin/uuid @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../uuid-bin'); diff --git a/node_backend/node_modules/uuid/dist/esm-browser/index.js b/node_backend/node_modules/uuid/dist/esm-browser/index.js new file mode 100644 index 0000000000000000000000000000000000000000..1db6f6d25b2b6a79d6c650cac2fad395408e1ac2 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/index.js @@ -0,0 +1,9 @@ +export { default as v1 } from './v1.js'; +export { default as v3 } from './v3.js'; +export { default as v4 } from './v4.js'; +export { default as v5 } from './v5.js'; +export { default as NIL } from './nil.js'; +export { default as version } from './version.js'; +export { default as validate } from './validate.js'; +export { default as stringify } from './stringify.js'; +export { default as parse } from './parse.js'; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/md5.js b/node_backend/node_modules/uuid/dist/esm-browser/md5.js new file mode 100644 index 0000000000000000000000000000000000000000..8b5d46a7e4c5c259a8f186bb5f3223e41893d768 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/md5.js @@ -0,0 +1,215 @@ +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + + for (var i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + + +function md5ToHexEncodedArray(input) { + var output = []; + var length32 = input.length * 32; + var hexTab = '0123456789abcdef'; + + for (var i = 0; i < length32; i += 8) { + var x = input[i >> 5] >>> i % 32 & 0xff; + var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + + return output; +} +/** + * Calculate output length with padding and bit length + */ + + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + + for (var i = 0; i < x.length; i += 16) { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + + var length8 = input.length * 8; + var output = new Uint32Array(getOutputLength(length8)); + + for (var i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + + +function safeAdd(x, y) { + var lsw = (x & 0xffff) + (y & 0xffff); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} + +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} + +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} + +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} + +export default md5; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/nil.js b/node_backend/node_modules/uuid/dist/esm-browser/nil.js new file mode 100644 index 0000000000000000000000000000000000000000..b36324c2aa3faa177230ac9916f02e5fff0a6cd3 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/nil.js @@ -0,0 +1 @@ +export default '00000000-0000-0000-0000-000000000000'; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/parse.js b/node_backend/node_modules/uuid/dist/esm-browser/parse.js new file mode 100644 index 0000000000000000000000000000000000000000..7c5b1d5a6b0210d7dc9fbd5501230ca7241cb110 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/parse.js @@ -0,0 +1,35 @@ +import validate from './validate.js'; + +function parse(uuid) { + if (!validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + var v; + var arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +export default parse; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/regex.js b/node_backend/node_modules/uuid/dist/esm-browser/regex.js new file mode 100644 index 0000000000000000000000000000000000000000..3da8673a5cdf3c408c8ae00fad6aed9777d2ae69 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/regex.js @@ -0,0 +1 @@ +export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/rng.js b/node_backend/node_modules/uuid/dist/esm-browser/rng.js new file mode 100644 index 0000000000000000000000000000000000000000..8abbf2ea5b3fc5d01654c425676dae03d8a671fe --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/rng.js @@ -0,0 +1,19 @@ +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +var getRandomValues; +var rnds8 = new Uint8Array(16); +export default function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/sha1.js b/node_backend/node_modules/uuid/dist/esm-browser/sha1.js new file mode 100644 index 0000000000000000000000000000000000000000..940548baa840abb95c8ef52f974ea14f6bca838a --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/sha1.js @@ -0,0 +1,96 @@ +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + + case 1: + return x ^ y ^ z; + + case 2: + return x & y ^ x & z ^ y & z; + + case 3: + return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} + +function sha1(bytes) { + var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof bytes === 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + + for (var i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + + bytes.push(0x80); + var l = bytes.length / 4 + 2; + var N = Math.ceil(l / 16); + var M = new Array(N); + + for (var _i = 0; _i < N; ++_i) { + var arr = new Uint32Array(16); + + for (var j = 0; j < 16; ++j) { + arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3]; + } + + M[_i] = arr; + } + + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + + for (var _i2 = 0; _i2 < N; ++_i2) { + var W = new Uint32Array(80); + + for (var t = 0; t < 16; ++t) { + W[t] = M[_i2][t]; + } + + for (var _t = 16; _t < 80; ++_t) { + W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1); + } + + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + + for (var _t2 = 0; _t2 < 80; ++_t2) { + var s = Math.floor(_t2 / 20); + var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} + +export default sha1; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/stringify.js b/node_backend/node_modules/uuid/dist/esm-browser/stringify.js new file mode 100644 index 0000000000000000000000000000000000000000..310211158db7aed87c83d60533b4b40d8d62fdb9 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/stringify.js @@ -0,0 +1,30 @@ +import validate from './validate.js'; +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +var byteToHex = []; + +for (var i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr) { + var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +export default stringify; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/v1.js b/node_backend/node_modules/uuid/dist/esm-browser/v1.js new file mode 100644 index 0000000000000000000000000000000000000000..1a22591ef1eb8f9a426d86a6dc3e105227608883 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/v1.js @@ -0,0 +1,95 @@ +import rng from './rng.js'; +import stringify from './stringify.js'; // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +var _nodeId; + +var _clockseq; // Previous uuid creation time + + +var _lastMSecs = 0; +var _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + var i = buf && offset || 0; + var b = buf || new Array(16); + options = options || {}; + var node = options.node || _nodeId; + var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + var seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + var tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (var n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || stringify(b); +} + +export default v1; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/v3.js b/node_backend/node_modules/uuid/dist/esm-browser/v3.js new file mode 100644 index 0000000000000000000000000000000000000000..c9ab9a4cd78d32f586cf28d94feec8f16c20478d --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/v3.js @@ -0,0 +1,4 @@ +import v35 from './v35.js'; +import md5 from './md5.js'; +var v3 = v35('v3', 0x30, md5); +export default v3; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/v35.js b/node_backend/node_modules/uuid/dist/esm-browser/v35.js new file mode 100644 index 0000000000000000000000000000000000000000..31dd8a1c89b1679760c610425acd3bdc6a101cd6 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/v35.js @@ -0,0 +1,64 @@ +import stringify from './stringify.js'; +import parse from './parse.js'; + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + var bytes = []; + + for (var i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +export var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +export var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +export default function (name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + var bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/v4.js b/node_backend/node_modules/uuid/dist/esm-browser/v4.js new file mode 100644 index 0000000000000000000000000000000000000000..404810a488de0a44cba0a48564183fe8f9296f37 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/v4.js @@ -0,0 +1,24 @@ +import rng from './rng.js'; +import stringify from './stringify.js'; + +function v4(options, buf, offset) { + options = options || {}; + var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return stringify(rnds); +} + +export default v4; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/v5.js b/node_backend/node_modules/uuid/dist/esm-browser/v5.js new file mode 100644 index 0000000000000000000000000000000000000000..c08d96ba0bd928b829a168fc3f12cd5044d0e057 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/v5.js @@ -0,0 +1,4 @@ +import v35 from './v35.js'; +import sha1 from './sha1.js'; +var v5 = v35('v5', 0x50, sha1); +export default v5; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/validate.js b/node_backend/node_modules/uuid/dist/esm-browser/validate.js new file mode 100644 index 0000000000000000000000000000000000000000..f1cdc7af49bcfc2a66fb1efb3532095e85ce8415 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/validate.js @@ -0,0 +1,7 @@ +import REGEX from './regex.js'; + +function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); +} + +export default validate; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-browser/version.js b/node_backend/node_modules/uuid/dist/esm-browser/version.js new file mode 100644 index 0000000000000000000000000000000000000000..77530e9cb0e355adb6747e5912ecac98848eb7a9 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-browser/version.js @@ -0,0 +1,11 @@ +import validate from './validate.js'; + +function version(uuid) { + if (!validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.substr(14, 1), 16); +} + +export default version; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/index.js b/node_backend/node_modules/uuid/dist/esm-node/index.js new file mode 100644 index 0000000000000000000000000000000000000000..1db6f6d25b2b6a79d6c650cac2fad395408e1ac2 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/index.js @@ -0,0 +1,9 @@ +export { default as v1 } from './v1.js'; +export { default as v3 } from './v3.js'; +export { default as v4 } from './v4.js'; +export { default as v5 } from './v5.js'; +export { default as NIL } from './nil.js'; +export { default as version } from './version.js'; +export { default as validate } from './validate.js'; +export { default as stringify } from './stringify.js'; +export { default as parse } from './parse.js'; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/md5.js b/node_backend/node_modules/uuid/dist/esm-node/md5.js new file mode 100644 index 0000000000000000000000000000000000000000..4d68b040f6c192f73ccbf8d724a19b196fca0de1 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/md5.js @@ -0,0 +1,13 @@ +import crypto from 'crypto'; + +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return crypto.createHash('md5').update(bytes).digest(); +} + +export default md5; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/nil.js b/node_backend/node_modules/uuid/dist/esm-node/nil.js new file mode 100644 index 0000000000000000000000000000000000000000..b36324c2aa3faa177230ac9916f02e5fff0a6cd3 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/nil.js @@ -0,0 +1 @@ +export default '00000000-0000-0000-0000-000000000000'; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/parse.js b/node_backend/node_modules/uuid/dist/esm-node/parse.js new file mode 100644 index 0000000000000000000000000000000000000000..6421c5d5a08e42325718a2caad1f47154eff9de9 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/parse.js @@ -0,0 +1,35 @@ +import validate from './validate.js'; + +function parse(uuid) { + if (!validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +export default parse; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/regex.js b/node_backend/node_modules/uuid/dist/esm-node/regex.js new file mode 100644 index 0000000000000000000000000000000000000000..3da8673a5cdf3c408c8ae00fad6aed9777d2ae69 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/regex.js @@ -0,0 +1 @@ +export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/rng.js b/node_backend/node_modules/uuid/dist/esm-node/rng.js new file mode 100644 index 0000000000000000000000000000000000000000..80062449a297eb936b592ee631bcec8f273256c9 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/rng.js @@ -0,0 +1,12 @@ +import crypto from 'crypto'; +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +export default function rng() { + if (poolPtr > rnds8Pool.length - 16) { + crypto.randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/sha1.js b/node_backend/node_modules/uuid/dist/esm-node/sha1.js new file mode 100644 index 0000000000000000000000000000000000000000..e23850b441a0c0d52d0d0aa75ed49cf0b88cd72b --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/sha1.js @@ -0,0 +1,13 @@ +import crypto from 'crypto'; + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return crypto.createHash('sha1').update(bytes).digest(); +} + +export default sha1; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/stringify.js b/node_backend/node_modules/uuid/dist/esm-node/stringify.js new file mode 100644 index 0000000000000000000000000000000000000000..f9bca12026e21f74488497b6216b135aafa08cd1 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/stringify.js @@ -0,0 +1,29 @@ +import validate from './validate.js'; +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +export default stringify; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/v1.js b/node_backend/node_modules/uuid/dist/esm-node/v1.js new file mode 100644 index 0000000000000000000000000000000000000000..ebf81acb7d3a877a799daf0c247e3e5bc18da65f --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/v1.js @@ -0,0 +1,95 @@ +import rng from './rng.js'; +import stringify from './stringify.js'; // **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || rng)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || stringify(b); +} + +export default v1; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/v3.js b/node_backend/node_modules/uuid/dist/esm-node/v3.js new file mode 100644 index 0000000000000000000000000000000000000000..09063b860499e6a7cf4b374be124df5dded05457 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/v3.js @@ -0,0 +1,4 @@ +import v35 from './v35.js'; +import md5 from './md5.js'; +const v3 = v35('v3', 0x30, md5); +export default v3; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/v35.js b/node_backend/node_modules/uuid/dist/esm-node/v35.js new file mode 100644 index 0000000000000000000000000000000000000000..22f6a196037f91b22cd5fca753a7a1f51071fb18 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/v35.js @@ -0,0 +1,64 @@ +import stringify from './stringify.js'; +import parse from './parse.js'; + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +export const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +export const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +export default function (name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = parse(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return stringify(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/v4.js b/node_backend/node_modules/uuid/dist/esm-node/v4.js new file mode 100644 index 0000000000000000000000000000000000000000..efad926f68deedd9a3446462576b4fd1f7ddc341 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/v4.js @@ -0,0 +1,24 @@ +import rng from './rng.js'; +import stringify from './stringify.js'; + +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return stringify(rnds); +} + +export default v4; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/v5.js b/node_backend/node_modules/uuid/dist/esm-node/v5.js new file mode 100644 index 0000000000000000000000000000000000000000..e87fe317d70a00942dd870c8c1c9155b517aa957 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/v5.js @@ -0,0 +1,4 @@ +import v35 from './v35.js'; +import sha1 from './sha1.js'; +const v5 = v35('v5', 0x50, sha1); +export default v5; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/validate.js b/node_backend/node_modules/uuid/dist/esm-node/validate.js new file mode 100644 index 0000000000000000000000000000000000000000..f1cdc7af49bcfc2a66fb1efb3532095e85ce8415 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/validate.js @@ -0,0 +1,7 @@ +import REGEX from './regex.js'; + +function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); +} + +export default validate; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/esm-node/version.js b/node_backend/node_modules/uuid/dist/esm-node/version.js new file mode 100644 index 0000000000000000000000000000000000000000..77530e9cb0e355adb6747e5912ecac98848eb7a9 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/esm-node/version.js @@ -0,0 +1,11 @@ +import validate from './validate.js'; + +function version(uuid) { + if (!validate(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.substr(14, 1), 16); +} + +export default version; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/index.js b/node_backend/node_modules/uuid/dist/index.js new file mode 100644 index 0000000000000000000000000000000000000000..bf13b103c651d69b40bd9c6f9636ef4f331a713e --- /dev/null +++ b/node_backend/node_modules/uuid/dist/index.js @@ -0,0 +1,79 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "v1", { + enumerable: true, + get: function () { + return _v.default; + } +}); +Object.defineProperty(exports, "v3", { + enumerable: true, + get: function () { + return _v2.default; + } +}); +Object.defineProperty(exports, "v4", { + enumerable: true, + get: function () { + return _v3.default; + } +}); +Object.defineProperty(exports, "v5", { + enumerable: true, + get: function () { + return _v4.default; + } +}); +Object.defineProperty(exports, "NIL", { + enumerable: true, + get: function () { + return _nil.default; + } +}); +Object.defineProperty(exports, "version", { + enumerable: true, + get: function () { + return _version.default; + } +}); +Object.defineProperty(exports, "validate", { + enumerable: true, + get: function () { + return _validate.default; + } +}); +Object.defineProperty(exports, "stringify", { + enumerable: true, + get: function () { + return _stringify.default; + } +}); +Object.defineProperty(exports, "parse", { + enumerable: true, + get: function () { + return _parse.default; + } +}); + +var _v = _interopRequireDefault(require("./v1.js")); + +var _v2 = _interopRequireDefault(require("./v3.js")); + +var _v3 = _interopRequireDefault(require("./v4.js")); + +var _v4 = _interopRequireDefault(require("./v5.js")); + +var _nil = _interopRequireDefault(require("./nil.js")); + +var _version = _interopRequireDefault(require("./version.js")); + +var _validate = _interopRequireDefault(require("./validate.js")); + +var _stringify = _interopRequireDefault(require("./stringify.js")); + +var _parse = _interopRequireDefault(require("./parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/md5-browser.js b/node_backend/node_modules/uuid/dist/md5-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..7a4582ace686897b291f71b50b1ac4cbe1744239 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/md5-browser.js @@ -0,0 +1,223 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ +function md5(bytes) { + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = new Uint8Array(msg.length); + + for (let i = 0; i < msg.length; ++i) { + bytes[i] = msg.charCodeAt(i); + } + } + + return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8)); +} +/* + * Convert an array of little-endian words to an array of bytes + */ + + +function md5ToHexEncodedArray(input) { + const output = []; + const length32 = input.length * 32; + const hexTab = '0123456789abcdef'; + + for (let i = 0; i < length32; i += 8) { + const x = input[i >> 5] >>> i % 32 & 0xff; + const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16); + output.push(hex); + } + + return output; +} +/** + * Calculate output length with padding and bit length + */ + + +function getOutputLength(inputLength8) { + return (inputLength8 + 64 >>> 9 << 4) + 14 + 1; +} +/* + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + + +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[getOutputLength(len) - 1] = len; + let a = 1732584193; + let b = -271733879; + let c = -1732584194; + let d = 271733878; + + for (let i = 0; i < x.length; i += 16) { + const olda = a; + const oldb = b; + const oldc = c; + const oldd = d; + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + + return [a, b, c, d]; +} +/* + * Convert an array bytes to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + + +function bytesToWords(input) { + if (input.length === 0) { + return []; + } + + const length8 = input.length * 8; + const output = new Uint32Array(getOutputLength(length8)); + + for (let i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[i / 8] & 0xff) << i % 32; + } + + return output; +} +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + + +function safeAdd(x, y) { + const lsw = (x & 0xffff) + (y & 0xffff); + const msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 0xffff; +} +/* + * Bitwise rotate a 32-bit number to the left. + */ + + +function bitRotateLeft(num, cnt) { + return num << cnt | num >>> 32 - cnt; +} +/* + * These functions implement the four basic operations the algorithm uses. + */ + + +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} + +function md5ff(a, b, c, d, x, s, t) { + return md5cmn(b & c | ~b & d, a, b, x, s, t); +} + +function md5gg(a, b, c, d, x, s, t) { + return md5cmn(b & d | c & ~d, a, b, x, s, t); +} + +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} + +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | ~d), a, b, x, s, t); +} + +var _default = md5; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/md5.js b/node_backend/node_modules/uuid/dist/md5.js new file mode 100644 index 0000000000000000000000000000000000000000..824d48167a980e1ea70732421b05f66c8622a12f --- /dev/null +++ b/node_backend/node_modules/uuid/dist/md5.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _crypto = _interopRequireDefault(require("crypto")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function md5(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return _crypto.default.createHash('md5').update(bytes).digest(); +} + +var _default = md5; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/nil.js b/node_backend/node_modules/uuid/dist/nil.js new file mode 100644 index 0000000000000000000000000000000000000000..7ade577b256b25919a4d06a8d432507daef8d3ed --- /dev/null +++ b/node_backend/node_modules/uuid/dist/nil.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = '00000000-0000-0000-0000-000000000000'; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/parse.js b/node_backend/node_modules/uuid/dist/parse.js new file mode 100644 index 0000000000000000000000000000000000000000..4c69fc39e74c2e0858b85333753db64f58a1a5ac --- /dev/null +++ b/node_backend/node_modules/uuid/dist/parse.js @@ -0,0 +1,45 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _validate = _interopRequireDefault(require("./validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function parse(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + let v; + const arr = new Uint8Array(16); // Parse ########-....-....-....-............ + + arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; + arr[1] = v >>> 16 & 0xff; + arr[2] = v >>> 8 & 0xff; + arr[3] = v & 0xff; // Parse ........-####-....-....-............ + + arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; + arr[5] = v & 0xff; // Parse ........-....-####-....-............ + + arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; + arr[7] = v & 0xff; // Parse ........-....-....-####-............ + + arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; + arr[9] = v & 0xff; // Parse ........-....-....-....-############ + // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) + + arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; + arr[11] = v / 0x100000000 & 0xff; + arr[12] = v >>> 24 & 0xff; + arr[13] = v >>> 16 & 0xff; + arr[14] = v >>> 8 & 0xff; + arr[15] = v & 0xff; + return arr; +} + +var _default = parse; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/regex.js b/node_backend/node_modules/uuid/dist/regex.js new file mode 100644 index 0000000000000000000000000000000000000000..1ef91d64c80e220e599881771a9bd231879a538f --- /dev/null +++ b/node_backend/node_modules/uuid/dist/regex.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/rng-browser.js b/node_backend/node_modules/uuid/dist/rng-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..91faeae6d6acb2c2ea05bad67e423ba5666a4392 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/rng-browser.js @@ -0,0 +1,26 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = rng; +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +let getRandomValues; +const rnds8 = new Uint8Array(16); + +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/rng.js b/node_backend/node_modules/uuid/dist/rng.js new file mode 100644 index 0000000000000000000000000000000000000000..3507f93772a910b44fffb4df2f0e7daeed6586ae --- /dev/null +++ b/node_backend/node_modules/uuid/dist/rng.js @@ -0,0 +1,24 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = rng; + +var _crypto = _interopRequireDefault(require("crypto")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; + +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + _crypto.default.randomFillSync(rnds8Pool); + + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/sha1-browser.js b/node_backend/node_modules/uuid/dist/sha1-browser.js new file mode 100644 index 0000000000000000000000000000000000000000..24cbcedca58c8ad42d50498a9ffa3241fc85c16a --- /dev/null +++ b/node_backend/node_modules/uuid/dist/sha1-browser.js @@ -0,0 +1,104 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +function f(s, x, y, z) { + switch (s) { + case 0: + return x & y ^ ~x & z; + + case 1: + return x ^ y ^ z; + + case 2: + return x & y ^ x & z ^ y & z; + + case 3: + return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return x << n | x >>> 32 - n; +} + +function sha1(bytes) { + const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof bytes === 'string') { + const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + + bytes = []; + + for (let i = 0; i < msg.length; ++i) { + bytes.push(msg.charCodeAt(i)); + } + } else if (!Array.isArray(bytes)) { + // Convert Array-like to Array + bytes = Array.prototype.slice.call(bytes); + } + + bytes.push(0x80); + const l = bytes.length / 4 + 2; + const N = Math.ceil(l / 16); + const M = new Array(N); + + for (let i = 0; i < N; ++i) { + const arr = new Uint32Array(16); + + for (let j = 0; j < 16; ++j) { + arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3]; + } + + M[i] = arr; + } + + M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32); + M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff; + + for (let i = 0; i < N; ++i) { + const W = new Uint32Array(80); + + for (let t = 0; t < 16; ++t) { + W[t] = M[i][t]; + } + + for (let t = 16; t < 80; ++t) { + W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); + } + + let a = H[0]; + let b = H[1]; + let c = H[2]; + let d = H[3]; + let e = H[4]; + + for (let t = 0; t < 80; ++t) { + const s = Math.floor(t / 20); + const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = H[0] + a >>> 0; + H[1] = H[1] + b >>> 0; + H[2] = H[2] + c >>> 0; + H[3] = H[3] + d >>> 0; + H[4] = H[4] + e >>> 0; + } + + return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff]; +} + +var _default = sha1; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/sha1.js b/node_backend/node_modules/uuid/dist/sha1.js new file mode 100644 index 0000000000000000000000000000000000000000..03bdd63cedadafd8dd4ef2c2d186f89826cf80b0 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/sha1.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _crypto = _interopRequireDefault(require("crypto")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function sha1(bytes) { + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + + return _crypto.default.createHash('sha1').update(bytes).digest(); +} + +var _default = sha1; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/stringify.js b/node_backend/node_modules/uuid/dist/stringify.js new file mode 100644 index 0000000000000000000000000000000000000000..b8e7519403eedc36e538a0310315fa3602e1f98d --- /dev/null +++ b/node_backend/node_modules/uuid/dist/stringify.js @@ -0,0 +1,39 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _validate = _interopRequireDefault(require("./validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!(0, _validate.default)(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +var _default = stringify; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/umd/uuid.min.js b/node_backend/node_modules/uuid/dist/umd/uuid.min.js new file mode 100644 index 0000000000000000000000000000000000000000..639ca2f2ddc41d09cfba966f6349bb1ec190e704 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/umd/uuid.min.js @@ -0,0 +1 @@ +!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((r="undefined"!=typeof globalThis?globalThis:r||self).uuid={})}(this,(function(r){"use strict";var e,n=new Uint8Array(16);function t(){if(!e&&!(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(n)}var o=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function a(r){return"string"==typeof r&&o.test(r)}for(var i,u,f=[],s=0;s<256;++s)f.push((s+256).toString(16).substr(1));function c(r){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(f[r[e+0]]+f[r[e+1]]+f[r[e+2]]+f[r[e+3]]+"-"+f[r[e+4]]+f[r[e+5]]+"-"+f[r[e+6]]+f[r[e+7]]+"-"+f[r[e+8]]+f[r[e+9]]+"-"+f[r[e+10]]+f[r[e+11]]+f[r[e+12]]+f[r[e+13]]+f[r[e+14]]+f[r[e+15]]).toLowerCase();if(!a(n))throw TypeError("Stringified UUID is invalid");return n}var l=0,d=0;function v(r){if(!a(r))throw TypeError("Invalid UUID");var e,n=new Uint8Array(16);return n[0]=(e=parseInt(r.slice(0,8),16))>>>24,n[1]=e>>>16&255,n[2]=e>>>8&255,n[3]=255&e,n[4]=(e=parseInt(r.slice(9,13),16))>>>8,n[5]=255&e,n[6]=(e=parseInt(r.slice(14,18),16))>>>8,n[7]=255&e,n[8]=(e=parseInt(r.slice(19,23),16))>>>8,n[9]=255&e,n[10]=(e=parseInt(r.slice(24,36),16))/1099511627776&255,n[11]=e/4294967296&255,n[12]=e>>>24&255,n[13]=e>>>16&255,n[14]=e>>>8&255,n[15]=255&e,n}function p(r,e,n){function t(r,t,o,a){if("string"==typeof r&&(r=function(r){r=unescape(encodeURIComponent(r));for(var e=[],n=0;n>>9<<4)+1}function y(r,e){var n=(65535&r)+(65535&e);return(r>>16)+(e>>16)+(n>>16)<<16|65535&n}function g(r,e,n,t,o,a){return y((i=y(y(e,r),y(t,a)))<<(u=o)|i>>>32-u,n);var i,u}function m(r,e,n,t,o,a,i){return g(e&n|~e&t,r,e,o,a,i)}function w(r,e,n,t,o,a,i){return g(e&t|n&~t,r,e,o,a,i)}function b(r,e,n,t,o,a,i){return g(e^n^t,r,e,o,a,i)}function A(r,e,n,t,o,a,i){return g(n^(e|~t),r,e,o,a,i)}var U=p("v3",48,(function(r){if("string"==typeof r){var e=unescape(encodeURIComponent(r));r=new Uint8Array(e.length);for(var n=0;n>5]>>>o%32&255,i=parseInt(t.charAt(a>>>4&15)+t.charAt(15&a),16);e.push(i)}return e}(function(r,e){r[e>>5]|=128<>5]|=(255&r[t/8])<>>32-e}var R=p("v5",80,(function(r){var e=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof r){var t=unescape(encodeURIComponent(r));r=[];for(var o=0;o>>0;w=m,m=g,g=C(y,30)>>>0,y=h,h=U}n[0]=n[0]+h>>>0,n[1]=n[1]+y>>>0,n[2]=n[2]+g>>>0,n[3]=n[3]+m>>>0,n[4]=n[4]+w>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]}));r.NIL="00000000-0000-0000-0000-000000000000",r.parse=v,r.stringify=c,r.v1=function(r,e,n){var o=e&&n||0,a=e||new Array(16),f=(r=r||{}).node||i,s=void 0!==r.clockseq?r.clockseq:u;if(null==f||null==s){var v=r.random||(r.rng||t)();null==f&&(f=i=[1|v[0],v[1],v[2],v[3],v[4],v[5]]),null==s&&(s=u=16383&(v[6]<<8|v[7]))}var p=void 0!==r.msecs?r.msecs:Date.now(),h=void 0!==r.nsecs?r.nsecs:d+1,y=p-l+(h-d)/1e4;if(y<0&&void 0===r.clockseq&&(s=s+1&16383),(y<0||p>l)&&void 0===r.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");l=p,d=h,u=s;var g=(1e4*(268435455&(p+=122192928e5))+h)%4294967296;a[o++]=g>>>24&255,a[o++]=g>>>16&255,a[o++]=g>>>8&255,a[o++]=255&g;var m=p/4294967296*1e4&268435455;a[o++]=m>>>8&255,a[o++]=255&m,a[o++]=m>>>24&15|16,a[o++]=m>>>16&255,a[o++]=s>>>8|128,a[o++]=255&s;for(var w=0;w<6;++w)a[o+w]=f[w];return e||c(a)},r.v3=U,r.v4=function(r,e,n){var o=(r=r||{}).random||(r.rng||t)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,e){n=n||0;for(var a=0;a<16;++a)e[n+a]=o[a];return e}return c(o)},r.v5=R,r.validate=a,r.version=function(r){if(!a(r))throw TypeError("Invalid UUID");return parseInt(r.substr(14,1),16)},Object.defineProperty(r,"__esModule",{value:!0})})); \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/umd/uuidNIL.min.js b/node_backend/node_modules/uuid/dist/umd/uuidNIL.min.js new file mode 100644 index 0000000000000000000000000000000000000000..30b28a7e0faf0193f5c258d83ece2374fb2be350 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/umd/uuidNIL.min.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidNIL=n()}(this,(function(){"use strict";return"00000000-0000-0000-0000-000000000000"})); \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/umd/uuidParse.min.js b/node_backend/node_modules/uuid/dist/umd/uuidParse.min.js new file mode 100644 index 0000000000000000000000000000000000000000..d48ea6af50a42ac8dac17fb474f07c0ed5e46a82 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/umd/uuidParse.min.js @@ -0,0 +1 @@ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidParse=n()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(n){if(!function(n){return"string"==typeof n&&e.test(n)}(n))throw TypeError("Invalid UUID");var t,i=new Uint8Array(16);return i[0]=(t=parseInt(n.slice(0,8),16))>>>24,i[1]=t>>>16&255,i[2]=t>>>8&255,i[3]=255&t,i[4]=(t=parseInt(n.slice(9,13),16))>>>8,i[5]=255&t,i[6]=(t=parseInt(n.slice(14,18),16))>>>8,i[7]=255&t,i[8]=(t=parseInt(n.slice(19,23),16))>>>8,i[9]=255&t,i[10]=(t=parseInt(n.slice(24,36),16))/1099511627776&255,i[11]=t/4294967296&255,i[12]=t>>>24&255,i[13]=t>>>16&255,i[14]=t>>>8&255,i[15]=255&t,i}})); \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/umd/uuidStringify.min.js b/node_backend/node_modules/uuid/dist/umd/uuidStringify.min.js new file mode 100644 index 0000000000000000000000000000000000000000..fd39adc330cf2b9988cda4a0ce845e048abeac0e --- /dev/null +++ b/node_backend/node_modules/uuid/dist/umd/uuidStringify.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidStringify=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function t(t){return"string"==typeof t&&e.test(t)}for(var i=[],n=0;n<256;++n)i.push((n+256).toString(16).substr(1));return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,f=(i[e[n+0]]+i[e[n+1]]+i[e[n+2]]+i[e[n+3]]+"-"+i[e[n+4]]+i[e[n+5]]+"-"+i[e[n+6]]+i[e[n+7]]+"-"+i[e[n+8]]+i[e[n+9]]+"-"+i[e[n+10]]+i[e[n+11]]+i[e[n+12]]+i[e[n+13]]+i[e[n+14]]+i[e[n+15]]).toLowerCase();if(!t(f))throw TypeError("Stringified UUID is invalid");return f}})); \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/umd/uuidValidate.min.js b/node_backend/node_modules/uuid/dist/umd/uuidValidate.min.js new file mode 100644 index 0000000000000000000000000000000000000000..378e5b902131fd19e37fdfc81167edbee2b55bf8 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/umd/uuidValidate.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidValidate=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){return"string"==typeof t&&e.test(t)}})); \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/umd/uuidVersion.min.js b/node_backend/node_modules/uuid/dist/umd/uuidVersion.min.js new file mode 100644 index 0000000000000000000000000000000000000000..274bb090db76ecdc4cc2a39bf46c732ec5082951 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/umd/uuidVersion.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidVersion=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){if(!function(t){return"string"==typeof t&&e.test(t)}(t))throw TypeError("Invalid UUID");return parseInt(t.substr(14,1),16)}})); \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/umd/uuidv1.min.js b/node_backend/node_modules/uuid/dist/umd/uuidv1.min.js new file mode 100644 index 0000000000000000000000000000000000000000..2622889a25e52b8533f0acc629327a1dba7ee243 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/umd/uuidv1.min.js @@ -0,0 +1 @@ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidv1=o()}(this,(function(){"use strict";var e,o=new Uint8Array(16);function t(){if(!e&&!(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(o)}var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function r(e){return"string"==typeof e&&n.test(e)}for(var i,u,s=[],a=0;a<256;++a)s.push((a+256).toString(16).substr(1));var d=0,f=0;return function(e,o,n){var a=o&&n||0,c=o||new Array(16),l=(e=e||{}).node||i,p=void 0!==e.clockseq?e.clockseq:u;if(null==l||null==p){var v=e.random||(e.rng||t)();null==l&&(l=i=[1|v[0],v[1],v[2],v[3],v[4],v[5]]),null==p&&(p=u=16383&(v[6]<<8|v[7]))}var y=void 0!==e.msecs?e.msecs:Date.now(),m=void 0!==e.nsecs?e.nsecs:f+1,g=y-d+(m-f)/1e4;if(g<0&&void 0===e.clockseq&&(p=p+1&16383),(g<0||y>d)&&void 0===e.nsecs&&(m=0),m>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");d=y,f=m,u=p;var h=(1e4*(268435455&(y+=122192928e5))+m)%4294967296;c[a++]=h>>>24&255,c[a++]=h>>>16&255,c[a++]=h>>>8&255,c[a++]=255&h;var w=y/4294967296*1e4&268435455;c[a++]=w>>>8&255,c[a++]=255&w,c[a++]=w>>>24&15|16,c[a++]=w>>>16&255,c[a++]=p>>>8|128,c[a++]=255&p;for(var b=0;b<6;++b)c[a+b]=l[b];return o||function(e){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(s[e[o+0]]+s[e[o+1]]+s[e[o+2]]+s[e[o+3]]+"-"+s[e[o+4]]+s[e[o+5]]+"-"+s[e[o+6]]+s[e[o+7]]+"-"+s[e[o+8]]+s[e[o+9]]+"-"+s[e[o+10]]+s[e[o+11]]+s[e[o+12]]+s[e[o+13]]+s[e[o+14]]+s[e[o+15]]).toLowerCase();if(!r(t))throw TypeError("Stringified UUID is invalid");return t}(c)}})); \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/umd/uuidv3.min.js b/node_backend/node_modules/uuid/dist/umd/uuidv3.min.js new file mode 100644 index 0000000000000000000000000000000000000000..8d37b62d70870180d5628e0abb1b568d3dd9f779 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/umd/uuidv3.min.js @@ -0,0 +1 @@ +!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(n="undefined"!=typeof globalThis?globalThis:n||self).uuidv3=r()}(this,(function(){"use strict";var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function r(r){return"string"==typeof r&&n.test(r)}for(var e=[],t=0;t<256;++t)e.push((t+256).toString(16).substr(1));function i(n){return 14+(n+64>>>9<<4)+1}function o(n,r){var e=(65535&n)+(65535&r);return(n>>16)+(r>>16)+(e>>16)<<16|65535&e}function a(n,r,e,t,i,a){return o((f=o(o(r,n),o(t,a)))<<(u=i)|f>>>32-u,e);var f,u}function f(n,r,e,t,i,o,f){return a(r&e|~r&t,n,r,i,o,f)}function u(n,r,e,t,i,o,f){return a(r&t|e&~t,n,r,i,o,f)}function c(n,r,e,t,i,o,f){return a(r^e^t,n,r,i,o,f)}function s(n,r,e,t,i,o,f){return a(e^(r|~t),n,r,i,o,f)}return function(n,t,i){function o(n,o,a,f){if("string"==typeof n&&(n=function(n){n=unescape(encodeURIComponent(n));for(var r=[],e=0;e>>24,t[1]=e>>>16&255,t[2]=e>>>8&255,t[3]=255&e,t[4]=(e=parseInt(n.slice(9,13),16))>>>8,t[5]=255&e,t[6]=(e=parseInt(n.slice(14,18),16))>>>8,t[7]=255&e,t[8]=(e=parseInt(n.slice(19,23),16))>>>8,t[9]=255&e,t[10]=(e=parseInt(n.slice(24,36),16))/1099511627776&255,t[11]=e/4294967296&255,t[12]=e>>>24&255,t[13]=e>>>16&255,t[14]=e>>>8&255,t[15]=255&e,t}(o)),16!==o.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var u=new Uint8Array(16+n.length);if(u.set(o),u.set(n,o.length),(u=i(u))[6]=15&u[6]|t,u[8]=63&u[8]|128,a){f=f||0;for(var c=0;c<16;++c)a[f+c]=u[c];return a}return function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(e[n[t+0]]+e[n[t+1]]+e[n[t+2]]+e[n[t+3]]+"-"+e[n[t+4]]+e[n[t+5]]+"-"+e[n[t+6]]+e[n[t+7]]+"-"+e[n[t+8]]+e[n[t+9]]+"-"+e[n[t+10]]+e[n[t+11]]+e[n[t+12]]+e[n[t+13]]+e[n[t+14]]+e[n[t+15]]).toLowerCase();if(!r(i))throw TypeError("Stringified UUID is invalid");return i}(u)}try{o.name=n}catch(n){}return o.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",o.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",o}("v3",48,(function(n){if("string"==typeof n){var r=unescape(encodeURIComponent(n));n=new Uint8Array(r.length);for(var e=0;e>5]>>>i%32&255,a=parseInt(t.charAt(o>>>4&15)+t.charAt(15&o),16);r.push(a)}return r}(function(n,r){n[r>>5]|=128<>5]|=(255&n[t/8])<1&&void 0!==arguments[1]?arguments[1]:0,o=(i[t[e+0]]+i[t[e+1]]+i[t[e+2]]+i[t[e+3]]+"-"+i[t[e+4]]+i[t[e+5]]+"-"+i[t[e+6]]+i[t[e+7]]+"-"+i[t[e+8]]+i[t[e+9]]+"-"+i[t[e+10]]+i[t[e+11]]+i[t[e+12]]+i[t[e+13]]+i[t[e+14]]+i[t[e+15]]).toLowerCase();if(!r(o))throw TypeError("Stringified UUID is invalid");return o}(u)}})); \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/umd/uuidv5.min.js b/node_backend/node_modules/uuid/dist/umd/uuidv5.min.js new file mode 100644 index 0000000000000000000000000000000000000000..ba6fc63da76e4e07b134808a30fdf6df4f333355 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/umd/uuidv5.min.js @@ -0,0 +1 @@ +!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).uuidv5=e()}(this,(function(){"use strict";var r=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function e(e){return"string"==typeof e&&r.test(e)}for(var t=[],n=0;n<256;++n)t.push((n+256).toString(16).substr(1));function a(r,e,t,n){switch(r){case 0:return e&t^~e&n;case 1:return e^t^n;case 2:return e&t^e&n^t&n;case 3:return e^t^n}}function o(r,e){return r<>>32-e}return function(r,n,a){function o(r,o,i,f){if("string"==typeof r&&(r=function(r){r=unescape(encodeURIComponent(r));for(var e=[],t=0;t>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(r.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(r.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(r.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(r.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}(o)),16!==o.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var s=new Uint8Array(16+r.length);if(s.set(o),s.set(r,o.length),(s=a(s))[6]=15&s[6]|n,s[8]=63&s[8]|128,i){f=f||0;for(var u=0;u<16;++u)i[f+u]=s[u];return i}return function(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=(t[r[n+0]]+t[r[n+1]]+t[r[n+2]]+t[r[n+3]]+"-"+t[r[n+4]]+t[r[n+5]]+"-"+t[r[n+6]]+t[r[n+7]]+"-"+t[r[n+8]]+t[r[n+9]]+"-"+t[r[n+10]]+t[r[n+11]]+t[r[n+12]]+t[r[n+13]]+t[r[n+14]]+t[r[n+15]]).toLowerCase();if(!e(a))throw TypeError("Stringified UUID is invalid");return a}(s)}try{o.name=r}catch(r){}return o.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",o.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",o}("v5",80,(function(r){var e=[1518500249,1859775393,2400959708,3395469782],t=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof r){var n=unescape(encodeURIComponent(r));r=[];for(var i=0;i>>0;A=U,U=w,w=o(b,30)>>>0,b=g,g=C}t[0]=t[0]+g>>>0,t[1]=t[1]+b>>>0,t[2]=t[2]+w>>>0,t[3]=t[3]+U>>>0,t[4]=t[4]+A>>>0}return[t[0]>>24&255,t[0]>>16&255,t[0]>>8&255,255&t[0],t[1]>>24&255,t[1]>>16&255,t[1]>>8&255,255&t[1],t[2]>>24&255,t[2]>>16&255,t[2]>>8&255,255&t[2],t[3]>>24&255,t[3]>>16&255,t[3]>>8&255,255&t[3],t[4]>>24&255,t[4]>>16&255,t[4]>>8&255,255&t[4]]}))})); \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/uuid-bin.js b/node_backend/node_modules/uuid/dist/uuid-bin.js new file mode 100644 index 0000000000000000000000000000000000000000..50a7a9f17a065c7d2a409327643f41dee6f4136c --- /dev/null +++ b/node_backend/node_modules/uuid/dist/uuid-bin.js @@ -0,0 +1,85 @@ +"use strict"; + +var _assert = _interopRequireDefault(require("assert")); + +var _v = _interopRequireDefault(require("./v1.js")); + +var _v2 = _interopRequireDefault(require("./v3.js")); + +var _v3 = _interopRequireDefault(require("./v4.js")); + +var _v4 = _interopRequireDefault(require("./v5.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function usage() { + console.log('Usage:'); + console.log(' uuid'); + console.log(' uuid v1'); + console.log(' uuid v3 '); + console.log(' uuid v4'); + console.log(' uuid v5 '); + console.log(' uuid --help'); + console.log('\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122'); +} + +const args = process.argv.slice(2); + +if (args.indexOf('--help') >= 0) { + usage(); + process.exit(0); +} + +const version = args.shift() || 'v4'; + +switch (version) { + case 'v1': + console.log((0, _v.default)()); + break; + + case 'v3': + { + const name = args.shift(); + let namespace = args.shift(); + (0, _assert.default)(name != null, 'v3 name not specified'); + (0, _assert.default)(namespace != null, 'v3 namespace not specified'); + + if (namespace === 'URL') { + namespace = _v2.default.URL; + } + + if (namespace === 'DNS') { + namespace = _v2.default.DNS; + } + + console.log((0, _v2.default)(name, namespace)); + break; + } + + case 'v4': + console.log((0, _v3.default)()); + break; + + case 'v5': + { + const name = args.shift(); + let namespace = args.shift(); + (0, _assert.default)(name != null, 'v5 name not specified'); + (0, _assert.default)(namespace != null, 'v5 namespace not specified'); + + if (namespace === 'URL') { + namespace = _v4.default.URL; + } + + if (namespace === 'DNS') { + namespace = _v4.default.DNS; + } + + console.log((0, _v4.default)(name, namespace)); + break; + } + + default: + usage(); + process.exit(1); +} \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/v1.js b/node_backend/node_modules/uuid/dist/v1.js new file mode 100644 index 0000000000000000000000000000000000000000..abb9b3d1672a32e9abcc82e192d06f8d9c779816 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/v1.js @@ -0,0 +1,107 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _rng = _interopRequireDefault(require("./rng.js")); + +var _stringify = _interopRequireDefault(require("./stringify.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html +let _nodeId; + +let _clockseq; // Previous uuid creation time + + +let _lastMSecs = 0; +let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details + +function v1(options, buf, offset) { + let i = buf && offset || 0; + const b = buf || new Array(16); + options = options || {}; + let node = options.node || _nodeId; + let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + + if (node == null || clockseq == null) { + const seedBytes = options.random || (options.rng || _rng.default)(); + + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; + } + + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + + + let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + + let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) + + const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression + + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + + + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } // Per 4.2.1.2 Throw error if too many uuids are requested + + + if (nsecs >= 10000) { + throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + + msecs += 12219292800000; // `time_low` + + const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; // `time_mid` + + const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; // `time_high_and_version` + + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + + b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + + b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` + + b[i++] = clockseq & 0xff; // `node` + + for (let n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf || (0, _stringify.default)(b); +} + +var _default = v1; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/v3.js b/node_backend/node_modules/uuid/dist/v3.js new file mode 100644 index 0000000000000000000000000000000000000000..6b47ff517535a6d8c00d6afaff55b0332f825c9c --- /dev/null +++ b/node_backend/node_modules/uuid/dist/v3.js @@ -0,0 +1,16 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _v = _interopRequireDefault(require("./v35.js")); + +var _md = _interopRequireDefault(require("./md5.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v3 = (0, _v.default)('v3', 0x30, _md.default); +var _default = v3; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/v35.js b/node_backend/node_modules/uuid/dist/v35.js new file mode 100644 index 0000000000000000000000000000000000000000..f784c6337fa0e29c17fecd43e90a478f0d2e206a --- /dev/null +++ b/node_backend/node_modules/uuid/dist/v35.js @@ -0,0 +1,78 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _default; +exports.URL = exports.DNS = void 0; + +var _stringify = _interopRequireDefault(require("./stringify.js")); + +var _parse = _interopRequireDefault(require("./parse.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + + const bytes = []; + + for (let i = 0; i < str.length; ++i) { + bytes.push(str.charCodeAt(i)); + } + + return bytes; +} + +const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; +exports.DNS = DNS; +const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; +exports.URL = URL; + +function _default(name, version, hashfunc) { + function generateUUID(value, namespace, buf, offset) { + if (typeof value === 'string') { + value = stringToBytes(value); + } + + if (typeof namespace === 'string') { + namespace = (0, _parse.default)(namespace); + } + + if (namespace.length !== 16) { + throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); + } // Compute hash of namespace and value, Per 4.3 + // Future: Use spread syntax when supported on all platforms, e.g. `bytes = + // hashfunc([...namespace, ... value])` + + + let bytes = new Uint8Array(16 + value.length); + bytes.set(namespace); + bytes.set(value, namespace.length); + bytes = hashfunc(bytes); + bytes[6] = bytes[6] & 0x0f | version; + bytes[8] = bytes[8] & 0x3f | 0x80; + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = bytes[i]; + } + + return buf; + } + + return (0, _stringify.default)(bytes); + } // Function#name is not settable on some platforms (#270) + + + try { + generateUUID.name = name; // eslint-disable-next-line no-empty + } catch (err) {} // For CommonJS default export support + + + generateUUID.DNS = DNS; + generateUUID.URL = URL; + return generateUUID; +} \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/v4.js b/node_backend/node_modules/uuid/dist/v4.js new file mode 100644 index 0000000000000000000000000000000000000000..838ce0b28d7436b871c58a314a0e5a5c8de78abb --- /dev/null +++ b/node_backend/node_modules/uuid/dist/v4.js @@ -0,0 +1,37 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _rng = _interopRequireDefault(require("./rng.js")); + +var _stringify = _interopRequireDefault(require("./stringify.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function v4(options, buf, offset) { + options = options || {}; + + const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return (0, _stringify.default)(rnds); +} + +var _default = v4; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/v5.js b/node_backend/node_modules/uuid/dist/v5.js new file mode 100644 index 0000000000000000000000000000000000000000..99d615e096c5e176d7a97cb25f17862a317a970d --- /dev/null +++ b/node_backend/node_modules/uuid/dist/v5.js @@ -0,0 +1,16 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _v = _interopRequireDefault(require("./v35.js")); + +var _sha = _interopRequireDefault(require("./sha1.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const v5 = (0, _v.default)('v5', 0x50, _sha.default); +var _default = v5; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/validate.js b/node_backend/node_modules/uuid/dist/validate.js new file mode 100644 index 0000000000000000000000000000000000000000..fd052157d4400d572c97905c9b077a8b26dff0d5 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/validate.js @@ -0,0 +1,17 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _regex = _interopRequireDefault(require("./regex.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function validate(uuid) { + return typeof uuid === 'string' && _regex.default.test(uuid); +} + +var _default = validate; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/dist/version.js b/node_backend/node_modules/uuid/dist/version.js new file mode 100644 index 0000000000000000000000000000000000000000..b72949cdb96e7e5557bf415b3bcc8ea20df4a990 --- /dev/null +++ b/node_backend/node_modules/uuid/dist/version.js @@ -0,0 +1,21 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _validate = _interopRequireDefault(require("./validate.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function version(uuid) { + if (!(0, _validate.default)(uuid)) { + throw TypeError('Invalid UUID'); + } + + return parseInt(uuid.substr(14, 1), 16); +} + +var _default = version; +exports.default = _default; \ No newline at end of file diff --git a/node_backend/node_modules/uuid/package.json b/node_backend/node_modules/uuid/package.json new file mode 100644 index 0000000000000000000000000000000000000000..f0ab3711ee4f490cbf961ebe6283ce2a28b6824b --- /dev/null +++ b/node_backend/node_modules/uuid/package.json @@ -0,0 +1,135 @@ +{ + "name": "uuid", + "version": "8.3.2", + "description": "RFC4122 (v1, v4, and v5) UUIDs", + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "keywords": [ + "uuid", + "guid", + "rfc4122" + ], + "license": "MIT", + "bin": { + "uuid": "./dist/bin/uuid" + }, + "sideEffects": false, + "main": "./dist/index.js", + "exports": { + ".": { + "node": { + "module": "./dist/esm-node/index.js", + "require": "./dist/index.js", + "import": "./wrapper.mjs" + }, + "default": "./dist/esm-browser/index.js" + }, + "./package.json": "./package.json" + }, + "module": "./dist/esm-node/index.js", + "browser": { + "./dist/md5.js": "./dist/md5-browser.js", + "./dist/rng.js": "./dist/rng-browser.js", + "./dist/sha1.js": "./dist/sha1-browser.js", + "./dist/esm-node/index.js": "./dist/esm-browser/index.js" + }, + "files": [ + "CHANGELOG.md", + "CONTRIBUTING.md", + "LICENSE.md", + "README.md", + "dist", + "wrapper.mjs" + ], + "devDependencies": { + "@babel/cli": "7.11.6", + "@babel/core": "7.11.6", + "@babel/preset-env": "7.11.5", + "@commitlint/cli": "11.0.0", + "@commitlint/config-conventional": "11.0.0", + "@rollup/plugin-node-resolve": "9.0.0", + "babel-eslint": "10.1.0", + "bundlewatch": "0.3.1", + "eslint": "7.10.0", + "eslint-config-prettier": "6.12.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.22.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "3.1.4", + "eslint-plugin-promise": "4.2.1", + "eslint-plugin-standard": "4.0.1", + "husky": "4.3.0", + "jest": "25.5.4", + "lint-staged": "10.4.0", + "npm-run-all": "4.1.5", + "optional-dev-dependency": "2.0.1", + "prettier": "2.1.2", + "random-seed": "0.3.0", + "rollup": "2.28.2", + "rollup-plugin-terser": "7.0.2", + "runmd": "1.3.2", + "standard-version": "9.0.0" + }, + "optionalDevDependencies": { + "@wdio/browserstack-service": "6.4.0", + "@wdio/cli": "6.4.0", + "@wdio/jasmine-framework": "6.4.0", + "@wdio/local-runner": "6.4.0", + "@wdio/spec-reporter": "6.4.0", + "@wdio/static-server-service": "6.4.0", + "@wdio/sync": "6.4.0" + }, + "scripts": { + "examples:browser:webpack:build": "cd examples/browser-webpack && npm install && npm run build", + "examples:browser:rollup:build": "cd examples/browser-rollup && npm install && npm run build", + "examples:node:commonjs:test": "cd examples/node-commonjs && npm install && npm test", + "examples:node:esmodules:test": "cd examples/node-esmodules && npm install && npm test", + "lint": "npm run eslint:check && npm run prettier:check", + "eslint:check": "eslint src/ test/ examples/ *.js", + "eslint:fix": "eslint --fix src/ test/ examples/ *.js", + "pretest": "[ -n $CI ] || npm run build", + "test": "BABEL_ENV=commonjs node --throw-deprecation node_modules/.bin/jest test/unit/", + "pretest:browser": "optional-dev-dependency && npm run build && npm-run-all --parallel examples:browser:**", + "test:browser": "wdio run ./wdio.conf.js", + "pretest:node": "npm run build", + "test:node": "npm-run-all --parallel examples:node:**", + "test:pack": "./scripts/testpack.sh", + "pretest:benchmark": "npm run build", + "test:benchmark": "cd examples/benchmark && npm install && npm test", + "prettier:check": "prettier --ignore-path .prettierignore --check '**/*.{js,jsx,json,md}'", + "prettier:fix": "prettier --ignore-path .prettierignore --write '**/*.{js,jsx,json,md}'", + "bundlewatch": "npm run pretest:browser && bundlewatch --config bundlewatch.config.json", + "md": "runmd --watch --output=README.md README_js.md", + "docs": "( node --version | grep -q 'v12' ) && ( npm run build && runmd --output=README.md README_js.md )", + "docs:diff": "npm run docs && git diff --quiet README.md", + "build": "./scripts/build.sh", + "prepack": "npm run build", + "release": "standard-version --no-verify" + }, + "repository": { + "type": "git", + "url": "https://github.com/uuidjs/uuid.git" + }, + "husky": { + "hooks": { + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS", + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,jsx,json,md}": [ + "prettier --write" + ], + "*.{js,jsx}": [ + "eslint --fix" + ] + }, + "standard-version": { + "scripts": { + "postchangelog": "prettier --write CHANGELOG.md" + } + } +} diff --git a/node_backend/node_modules/uuid/wrapper.mjs b/node_backend/node_modules/uuid/wrapper.mjs new file mode 100644 index 0000000000000000000000000000000000000000..c31e9cef45e2b96a11ded81ac2170391022dc2f6 --- /dev/null +++ b/node_backend/node_modules/uuid/wrapper.mjs @@ -0,0 +1,10 @@ +import uuid from './dist/index.js'; +export const v1 = uuid.v1; +export const v3 = uuid.v3; +export const v4 = uuid.v4; +export const v5 = uuid.v5; +export const NIL = uuid.NIL; +export const version = uuid.version; +export const validate = uuid.validate; +export const stringify = uuid.stringify; +export const parse = uuid.parse; diff --git a/node_backend/node_modules/xmlchars/LICENSE b/node_backend/node_modules/xmlchars/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..ec8c59ca75ac44886aae008936916616b8738368 --- /dev/null +++ b/node_backend/node_modules/xmlchars/LICENSE @@ -0,0 +1,18 @@ +Copyright Louis-Dominique Dubeau and contributors to xmlchars + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_backend/node_modules/xmlchars/README.md b/node_backend/node_modules/xmlchars/README.md new file mode 100644 index 0000000000000000000000000000000000000000..609ff04588e81a63b0985ee9b94aa93cde569c28 --- /dev/null +++ b/node_backend/node_modules/xmlchars/README.md @@ -0,0 +1,33 @@ +Utilities for determining whether characters belong to character classes defined +by the XML specs. + +## Organization + +It used to be that the library was contained in a single file and you could just +import/require/what-have-you the `xmlchars` module. However, that setup did not +work well for people who cared about code optimization. Importing `xmlchars` +meant importing *all* of the library and because of the way the code was +generated there was no way to shake the resulting code tree. + +Different modules cover different standards. At the time this documentation was +last updated, we had: + +* `xmlchars/xml/1.0/ed5` which covers XML 1.0 edition 5. +* `xmlchars/xml/1.0/ed4` which covers XML 1.0 edition 4. +* `xmlchars/xml/1.1/ed2` which covers XML 1.0 edition 2. +* `xmlchars/xmlns/1.0/ed3` which covers XML Namespaces 1.0 edition 3. + +## Features + +The "things" each module contains can be categorized as follows: + +1. "Fragments": these are parts and pieces of regular expressions that +correspond to the productions defined in the standard that the module +covers. You'd use these to *build regular expressions*. + +2. Regular expressions that correspond to the productions defined in the +standard that the module covers. + +3. Lists: these are arrays of characters that correspond to the productions. + +4. Functions that test code points to verify whether they fit a production. diff --git a/node_backend/node_modules/xmlchars/package.json b/node_backend/node_modules/xmlchars/package.json new file mode 100644 index 0000000000000000000000000000000000000000..ff709a193e740262d5721860b0884790778d13d4 --- /dev/null +++ b/node_backend/node_modules/xmlchars/package.json @@ -0,0 +1,51 @@ +{ + "name": "xmlchars", + "version": "2.2.0", + "description": "Utilities for determining if characters belong to character classes defined by the XML specs.", + "keywords": [ + "XML", + "validation" + ], + "main": "xmlchars.js", + "types": "xmlchars.d.ts", + "repository": "https://github.com/lddubeau/xmlchars.git", + "author": "Louis-Dominique Dubeau ", + "license": "MIT", + "devDependencies": { + "@commitlint/cli": "^8.1.0", + "@commitlint/config-angular": "^8.1.0", + "@types/chai": "^4.2.1", + "@types/mocha": "^5.2.7", + "chai": "^4.2.0", + "conventional-changelog-cli": "^2.0.23", + "husky": "^3.0.5", + "mocha": "^6.2.0", + "ts-node": "^8.3.0", + "tslint": "^5.19.0", + "tslint-config-lddubeau": "^4.1.0", + "typescript": "^3.6.2" + }, + "scripts": { + "copy": "cp README.md LICENSE build/dist && sed -e'/\"private\": true/d' package.json > build/dist/package.json", + "build": "tsc && npm run copy", + "pretest": "npm run build", + "test": "mocha", + "posttest": "tslint -p tsconfig.json && tslint -p test/tsconfig.json", + "prepack": "node -e 'require(\"assert\")(!require(\"./package.json\").private)'", + "test-install": "npm run test && (test_dir=build/install_dir; rm -rf $test_dir; mkdir -p $test_dir/node_modules; packname=`npm run xmlchars:pack --silent`; (cd $test_dir; npm install ../$packname); rm -rf $test_dir)", + "xmlchars:pack": "cd build/dist/ && (packname=`npm pack --silent`; mv $packname ..; echo $packname)", + "prepublishOnly": "node -e 'require(\"assert\")(!require(\"./package.json\").private)'", + "xmlchars:publish": "npm run test-install && (cd build/dist && npm publish)", + "preversion": "npm run test-install", + "version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md", + "postversion": "npm run xmlchars:publish", + "postpublish": "git push origin --follow-tags", + "clean": "rm -rf build" + }, + "dependencies": {}, + "husky": { + "hooks": { + "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS" + } + } +} diff --git a/node_backend/node_modules/xmlchars/xml/1.0/ed4.d.ts b/node_backend/node_modules/xmlchars/xml/1.0/ed4.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8d21792f351e344e25f8ba471bec75a9b2e95e6d --- /dev/null +++ b/node_backend/node_modules/xmlchars/xml/1.0/ed4.d.ts @@ -0,0 +1,31 @@ +/** + * Character classes and associated utilities for the 4th edition of XML 1.0. + * + * These are deprecated in the 5th edition but some of the standards related to + * XML 1.0 (e.g. XML Schema 1.0) refer to these. So they are still generally + * useful. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +export declare const CHAR = "\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +export declare const S = " \t\r\n"; +export declare const BASE_CHAR = "A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4-\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7-\u04C8\u04CB-\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8-\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5-\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B36-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0-\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60-\u0D61\u0E01-\u0E2E\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EAE\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102-\u1103\u1105-\u1107\u1109\u110B-\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154-\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D-\u116E\u1172-\u1173\u1175\u119E\u11A8\u11AB\u11AE-\u11AF\u11B7-\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A-\u212B\u212E\u2180-\u2182\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\uAC00-\uD7A3"; +export declare const IDEOGRAPHIC = "\u4E00-\u9FA5\u3007\u3021-\u3029"; +export declare const COMBINING_CHAR = "\u0300-\u0345\u0360-\u0361\u0483-\u0486\u0591-\u05A1\u05A3-\u05B9\u05BB-\u05BD\u05BF\u05C1-\u05C2\u05C4\u064B-\u0652\u0670\u06D6-\u06DC\u06DD-\u06DF\u06E0-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0901-\u0903\u093C\u093E-\u094C\u094D\u0951-\u0954\u0962-\u0963\u0981-\u0983\u09BC\u09BE\u09BF\u09C0-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09E2-\u09E3\u0A02\u0A3C\u0A3E\u0A3F\u0A40-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A70-\u0A71\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0B01-\u0B03\u0B3C\u0B3E-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B82-\u0B83\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C82-\u0C83\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86-\u0F8B\u0F90-\u0F95\u0F97\u0F99-\u0FAD\u0FB1-\u0FB7\u0FB9\u20D0-\u20DC\u20E1\u302A-\u302F\u3099\u309A"; +export declare const DIGIT = "0-9\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29"; +export declare const EXTENDER = "\u00B7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D-\u309E\u30FC-\u30FE"; +export declare const LETTER: string; +export declare const NAME_CHAR: string; +export declare const CHAR_RE: RegExp; +export declare const S_RE: RegExp; +export declare const BASE_CHAR_RE: RegExp; +export declare const IDEOGRAPHIC_RE: RegExp; +export declare const COMBINING_CHAR_RE: RegExp; +export declare const DIGIT_RE: RegExp; +export declare const EXTENDER_RE: RegExp; +export declare const LETTER_RE: RegExp; +export declare const NAME_CHAR_RE: RegExp; +export declare const NAME_RE: RegExp; +export declare const NMTOKEN_RE: RegExp; diff --git a/node_backend/node_modules/xmlchars/xml/1.0/ed4.js b/node_backend/node_modules/xmlchars/xml/1.0/ed4.js new file mode 100644 index 0000000000000000000000000000000000000000..ba11516af632aaf2f0249bd43bce15681901400d --- /dev/null +++ b/node_backend/node_modules/xmlchars/xml/1.0/ed4.js @@ -0,0 +1,44 @@ +"use strict"; +/** + * Character classes and associated utilities for the 4th edition of XML 1.0. + * + * These are deprecated in the 5th edition but some of the standards related to + * XML 1.0 (e.g. XML Schema 1.0) refer to these. So they are still generally + * useful. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { value: true }); +// +// Fragments. +// +exports.CHAR = "\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +exports.S = " \t\r\n"; +// tslint:disable-next-line:missing-jsdoc max-line-length +exports.BASE_CHAR = "A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4-\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7-\u04C8\u04CB-\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8-\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5-\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B36-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0-\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60-\u0D61\u0E01-\u0E2E\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EAE\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102-\u1103\u1105-\u1107\u1109\u110B-\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154-\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D-\u116E\u1172-\u1173\u1175\u119E\u11A8\u11AB\u11AE-\u11AF\u11B7-\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A-\u212B\u212E\u2180-\u2182\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\uAC00-\uD7A3"; +exports.IDEOGRAPHIC = "\u4E00-\u9FA5\u3007\u3021-\u3029"; +// tslint:disable-next-line:missing-jsdoc max-line-length +exports.COMBINING_CHAR = "\u0300-\u0345\u0360-\u0361\u0483-\u0486\u0591-\u05A1\u05A3-\u05B9\u05BB-\u05BD\u05BF\u05C1-\u05C2\u05C4\u064B-\u0652\u0670\u06D6-\u06DC\u06DD-\u06DF\u06E0-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0901-\u0903\u093C\u093E-\u094C\u094D\u0951-\u0954\u0962-\u0963\u0981-\u0983\u09BC\u09BE\u09BF\u09C0-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09E2-\u09E3\u0A02\u0A3C\u0A3E\u0A3F\u0A40-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A70-\u0A71\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0B01-\u0B03\u0B3C\u0B3E-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B82-\u0B83\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C82-\u0C83\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86-\u0F8B\u0F90-\u0F95\u0F97\u0F99-\u0FAD\u0FB1-\u0FB7\u0FB9\u20D0-\u20DC\u20E1\u302A-\u302F\u3099\u309A"; +// tslint:disable-next-line:missing-jsdoc max-line-length +exports.DIGIT = "0-9\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29"; +// tslint:disable-next-line:missing-jsdoc max-line-length +exports.EXTENDER = "\u00B7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D-\u309E\u30FC-\u30FE"; +exports.LETTER = exports.BASE_CHAR + exports.IDEOGRAPHIC; +exports.NAME_CHAR = "-" + exports.LETTER + exports.DIGIT + "._:" + exports.COMBINING_CHAR + exports.EXTENDER; +// +// Regular expressions. +// +exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u"); +exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u"); +exports.BASE_CHAR_RE = new RegExp("^[" + exports.BASE_CHAR + "]$", "u"); +exports.IDEOGRAPHIC_RE = new RegExp("^[" + exports.IDEOGRAPHIC + "]$", "u"); +exports.COMBINING_CHAR_RE = new RegExp("^[" + exports.COMBINING_CHAR + "]$", "u"); +exports.DIGIT_RE = new RegExp("^[" + exports.DIGIT + "]$", "u"); +exports.EXTENDER_RE = new RegExp("^[" + exports.EXTENDER + "]$", "u"); +exports.LETTER_RE = new RegExp("^[" + exports.LETTER + "]$", "u"); +exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u"); +exports.NAME_RE = new RegExp("^[" + exports.LETTER + "_:][" + exports.NAME_CHAR + "]*$", "u"); +exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u"); +//# sourceMappingURL=ed4.js.map \ No newline at end of file diff --git a/node_backend/node_modules/xmlchars/xml/1.0/ed4.js.map b/node_backend/node_modules/xmlchars/xml/1.0/ed4.js.map new file mode 100644 index 0000000000000000000000000000000000000000..fe1973c200c41466ef592dfbce8f5834a5e4a4d7 --- /dev/null +++ b/node_backend/node_modules/xmlchars/xml/1.0/ed4.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ed4.js","sourceRoot":"","sources":["../../../../src/xml/1.0/ed4.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAEH,EAAE;AACF,aAAa;AACb,EAAE;AAEW,QAAA,IAAI,GAAG,sDAAsD,CAAC;AAE9D,QAAA,CAAC,GAAG,SAAS,CAAC;AAE3B,yDAAyD;AAC5C,QAAA,SAAS,GAAG,osEAAosE,CAAC;AAEjtE,QAAA,WAAW,GAAG,kCAAkC,CAAC;AAE9D,yDAAyD;AAC5C,QAAA,cAAc,GAAG,0gCAA0gC,CAAC;AAEziC,yDAAyD;AAC5C,QAAA,KAAK,GAAG,2LAA2L,CAAC;AAEjN,yDAAyD;AAC5C,QAAA,QAAQ,GAAG,yFAAyF,CAAC;AAErG,QAAA,MAAM,GAAI,iBAAS,GAAG,mBAAW,CAAC;AAElC,QAAA,SAAS,GAAG,MAAI,cAAM,GAAG,aAAK,WAAM,sBAAc,GAAG,gBAAU,CAAC;AAE7E,EAAE;AACF,uBAAuB;AACvB,EAAE;AAEW,QAAA,OAAO,GAAG,IAAI,MAAM,CAAC,OAAK,YAAI,OAAI,EAAE,GAAG,CAAC,CAAC;AAEzC,QAAA,IAAI,GAAG,IAAI,MAAM,CAAC,OAAK,SAAC,QAAK,EAAE,GAAG,CAAC,CAAC;AAEpC,QAAA,YAAY,GAAG,IAAI,MAAM,CAAC,OAAK,iBAAS,OAAI,EAAE,GAAG,CAAC,CAAC;AAEnD,QAAA,cAAc,GAAG,IAAI,MAAM,CAAC,OAAK,mBAAW,OAAI,EAAE,GAAG,CAAC,CAAC;AAEvD,QAAA,iBAAiB,GAAG,IAAI,MAAM,CAAC,OAAK,sBAAc,OAAI,EAAE,GAAG,CAAC,CAAC;AAE7D,QAAA,QAAQ,GAAG,IAAI,MAAM,CAAC,OAAK,aAAK,OAAI,EAAE,GAAG,CAAC,CAAC;AAE3C,QAAA,WAAW,GAAG,IAAI,MAAM,CAAC,OAAK,gBAAQ,OAAI,EAAE,GAAG,CAAC,CAAC;AAEjD,QAAA,SAAS,GAAG,IAAI,MAAM,CAAC,OAAK,cAAM,OAAI,EAAE,GAAG,CAAC,CAAC;AAE7C,QAAA,YAAY,GAAG,IAAI,MAAM,CAAC,OAAK,iBAAS,OAAI,EAAE,GAAG,CAAC,CAAC;AAEnD,QAAA,OAAO,GAAG,IAAI,MAAM,CAAC,OAAK,cAAM,YAAO,iBAAS,QAAK,EAAE,GAAG,CAAC,CAAC;AAE5D,QAAA,UAAU,GAAG,IAAI,MAAM,CAAC,OAAK,iBAAS,QAAK,EAAE,GAAG,CAAC,CAAC"} \ No newline at end of file diff --git a/node_backend/node_modules/xmlchars/xml/1.0/ed5.d.ts b/node_backend/node_modules/xmlchars/xml/1.0/ed5.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..859934684d0252e8d04b34e6dcd5ebd75a1dbb4d --- /dev/null +++ b/node_backend/node_modules/xmlchars/xml/1.0/ed5.d.ts @@ -0,0 +1,51 @@ +/** + * Character classes and associated utilities for the 5th edition of XML 1.0. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +export declare const CHAR = "\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +export declare const S = " \t\r\n"; +export declare const NAME_START_CHAR = ":A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +export declare const NAME_CHAR: string; +export declare const CHAR_RE: RegExp; +export declare const S_RE: RegExp; +export declare const NAME_START_CHAR_RE: RegExp; +export declare const NAME_CHAR_RE: RegExp; +export declare const NAME_RE: RegExp; +export declare const NMTOKEN_RE: RegExp; +/** All characters in the ``S`` production. */ +export declare const S_LIST: number[]; +/** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ +export declare function isChar(c: number): boolean; +/** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ +export declare function isS(c: number): boolean; +/** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ +export declare function isNameStartChar(c: number): boolean; +/** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ +export declare function isNameChar(c: number): boolean; diff --git a/node_backend/node_modules/xmlchars/xml/1.0/ed5.js b/node_backend/node_modules/xmlchars/xml/1.0/ed5.js new file mode 100644 index 0000000000000000000000000000000000000000..e515a28012ee78e0f4ebf3f9240e074170319e1d --- /dev/null +++ b/node_backend/node_modules/xmlchars/xml/1.0/ed5.js @@ -0,0 +1,105 @@ +"use strict"; +/** + * Character classes and associated utilities for the 5th edition of XML 1.0. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { value: true }); +// +// Fragments. +// +exports.CHAR = "\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +exports.S = " \t\r\n"; +// tslint:disable-next-line:max-line-length +exports.NAME_START_CHAR = ":A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\u00B7\u0300-\u036F\u203F-\u2040"; +// +// Regular expressions. +// +exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u"); +exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u"); +exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u"); +exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u"); +exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u"); +exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u"); +var TAB = 9; +var NL = 0xA; +var CR = 0xD; +var SPACE = 0x20; +// +// Lists. +// +/** All characters in the ``S`` production. */ +exports.S_LIST = [SPACE, NL, CR, TAB]; +/** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ +function isChar(c) { + return (c >= SPACE && c <= 0xD7FF) || + c === NL || c === CR || c === TAB || + (c >= 0xE000 && c <= 0xFFFD) || + (c >= 0x10000 && c <= 0x10FFFF); +} +exports.isChar = isChar; +/** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ +function isS(c) { + return c === SPACE || c === NL || c === CR || c === TAB; +} +exports.isS = isS; +/** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ +function isNameStartChar(c) { + return ((c >= 0x41 && c <= 0x5A) || + (c >= 0x61 && c <= 0x7A) || + c === 0x3A || + c === 0x5F || + c === 0x200C || + c === 0x200D || + (c >= 0xC0 && c <= 0xD6) || + (c >= 0xD8 && c <= 0xF6) || + (c >= 0x00F8 && c <= 0x02FF) || + (c >= 0x0370 && c <= 0x037D) || + (c >= 0x037F && c <= 0x1FFF) || + (c >= 0x2070 && c <= 0x218F) || + (c >= 0x2C00 && c <= 0x2FEF) || + (c >= 0x3001 && c <= 0xD7FF) || + (c >= 0xF900 && c <= 0xFDCF) || + (c >= 0xFDF0 && c <= 0xFFFD) || + (c >= 0x10000 && c <= 0xEFFFF)); +} +exports.isNameStartChar = isNameStartChar; +/** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ +function isNameChar(c) { + return isNameStartChar(c) || + (c >= 0x30 && c <= 0x39) || + c === 0x2D || + c === 0x2E || + c === 0xB7 || + (c >= 0x0300 && c <= 0x036F) || + (c >= 0x203F && c <= 0x2040); +} +exports.isNameChar = isNameChar; +//# sourceMappingURL=ed5.js.map \ No newline at end of file diff --git a/node_backend/node_modules/xmlchars/xml/1.0/ed5.js.map b/node_backend/node_modules/xmlchars/xml/1.0/ed5.js.map new file mode 100644 index 0000000000000000000000000000000000000000..cc8dbe98adfc96c3b8f0bb02a43226bc6f49f1e2 --- /dev/null +++ b/node_backend/node_modules/xmlchars/xml/1.0/ed5.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ed5.js","sourceRoot":"","sources":["../../../../src/xml/1.0/ed5.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/xmlchars/xml/1.1/ed2.d.ts b/node_backend/node_modules/xmlchars/xml/1.1/ed2.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5e96aeeeeba5638568156449dd1a258445bb8262 --- /dev/null +++ b/node_backend/node_modules/xmlchars/xml/1.1/ed2.d.ts @@ -0,0 +1,73 @@ +/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +export declare const CHAR = "\u0001-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +export declare const RESTRICTED_CHAR = "\u0001-\b\v\f\u000E-\u001F-\u0084\u0086-\u009F"; +export declare const S = " \t\r\n"; +export declare const NAME_START_CHAR = ":A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +export declare const NAME_CHAR: string; +export declare const CHAR_RE: RegExp; +export declare const RESTRICTED_CHAR_RE: RegExp; +export declare const S_RE: RegExp; +export declare const NAME_START_CHAR_RE: RegExp; +export declare const NAME_CHAR_RE: RegExp; +export declare const NAME_RE: RegExp; +export declare const NMTOKEN_RE: RegExp; +/** All characters in the ``S`` production. */ +export declare const S_LIST: number[]; +/** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ +export declare function isChar(c: number): boolean; +/** + * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``. + */ +export declare function isRestrictedChar(c: number): boolean; +/** + * Determines whether a codepoint matches the ``CHAR`` production and does not + * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is + * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster + * than running the two-call equivalent. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR`` and does not match + * ``RESTRICTED_CHAR``. + */ +export declare function isCharAndNotRestricted(c: number): boolean; +/** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ +export declare function isS(c: number): boolean; +/** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ +export declare function isNameStartChar(c: number): boolean; +/** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ +export declare function isNameChar(c: number): boolean; diff --git a/node_backend/node_modules/xmlchars/xml/1.1/ed2.js b/node_backend/node_modules/xmlchars/xml/1.1/ed2.js new file mode 100644 index 0000000000000000000000000000000000000000..7906e76a23b2a8dc7b687e15656e10794561000d --- /dev/null +++ b/node_backend/node_modules/xmlchars/xml/1.1/ed2.js @@ -0,0 +1,145 @@ +"use strict"; +/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { value: true }); +// +// Fragments. +// +exports.CHAR = "\u0001-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; +exports.RESTRICTED_CHAR = "\u0001-\u0008\u000B\u000C\u000E-\u001F\u007F-\u0084\u0086-\u009F"; +exports.S = " \t\r\n"; +// tslint:disable-next-line:max-line-length +exports.NAME_START_CHAR = ":A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\u00B7\u0300-\u036F\u203F-\u2040"; +// +// Regular expressions. +// +exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u"); +exports.RESTRICTED_CHAR_RE = new RegExp("^[" + exports.RESTRICTED_CHAR + "]$", "u"); +exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u"); +exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u"); +exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u"); +exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u"); +exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u"); +var TAB = 9; +var NL = 0xA; +var CR = 0xD; +var SPACE = 0x20; +// +// Lists. +// +/** All characters in the ``S`` production. */ +exports.S_LIST = [SPACE, NL, CR, TAB]; +/** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ +function isChar(c) { + return (c >= 0x0001 && c <= 0xD7FF) || + (c >= 0xE000 && c <= 0xFFFD) || + (c >= 0x10000 && c <= 0x10FFFF); +} +exports.isChar = isChar; +/** + * Determines whether a codepoint matches the ``RESTRICTED_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``RESTRICTED_CHAR``. + */ +function isRestrictedChar(c) { + return (c >= 0x1 && c <= 0x8) || + c === 0xB || + c === 0xC || + (c >= 0xE && c <= 0x1F) || + (c >= 0x7F && c <= 0x84) || + (c >= 0x86 && c <= 0x9F); +} +exports.isRestrictedChar = isRestrictedChar; +/** + * Determines whether a codepoint matches the ``CHAR`` production and does not + * match the ``RESTRICTED_CHAR`` production. ``isCharAndNotRestricted(x)`` is + * equivalent to ``isChar(x) && !isRestrictedChar(x)``. This function is faster + * than running the two-call equivalent. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR`` and does not match + * ``RESTRICTED_CHAR``. + */ +function isCharAndNotRestricted(c) { + return (c === 0x9) || + (c === 0xA) || + (c === 0xD) || + (c > 0x1F && c < 0x7F) || + (c === 0x85) || + (c > 0x9F && c <= 0xD7FF) || + (c >= 0xE000 && c <= 0xFFFD) || + (c >= 0x10000 && c <= 0x10FFFF); +} +exports.isCharAndNotRestricted = isCharAndNotRestricted; +/** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ +function isS(c) { + return c === SPACE || c === NL || c === CR || c === TAB; +} +exports.isS = isS; +/** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ +// tslint:disable-next-line:cyclomatic-complexity +function isNameStartChar(c) { + return ((c >= 0x41 && c <= 0x5A) || + (c >= 0x61 && c <= 0x7A) || + c === 0x3A || + c === 0x5F || + c === 0x200C || + c === 0x200D || + (c >= 0xC0 && c <= 0xD6) || + (c >= 0xD8 && c <= 0xF6) || + (c >= 0x00F8 && c <= 0x02FF) || + (c >= 0x0370 && c <= 0x037D) || + (c >= 0x037F && c <= 0x1FFF) || + (c >= 0x2070 && c <= 0x218F) || + (c >= 0x2C00 && c <= 0x2FEF) || + (c >= 0x3001 && c <= 0xD7FF) || + (c >= 0xF900 && c <= 0xFDCF) || + (c >= 0xFDF0 && c <= 0xFFFD) || + (c >= 0x10000 && c <= 0xEFFFF)); +} +exports.isNameStartChar = isNameStartChar; +/** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ +function isNameChar(c) { + return isNameStartChar(c) || + (c >= 0x30 && c <= 0x39) || + c === 0x2D || + c === 0x2E || + c === 0xB7 || + (c >= 0x0300 && c <= 0x036F) || + (c >= 0x203F && c <= 0x2040); +} +exports.isNameChar = isNameChar; +//# sourceMappingURL=ed2.js.map \ No newline at end of file diff --git a/node_backend/node_modules/xmlchars/xml/1.1/ed2.js.map b/node_backend/node_modules/xmlchars/xml/1.1/ed2.js.map new file mode 100644 index 0000000000000000000000000000000000000000..96fb7e24fb500a91b376b51518587985041e78ab --- /dev/null +++ b/node_backend/node_modules/xmlchars/xml/1.1/ed2.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ed2.js","sourceRoot":"","sources":["../../../../src/xml/1.1/ed2.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/xmlchars/xmlchars.d.ts b/node_backend/node_modules/xmlchars/xmlchars.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..bdb3d400a06553b50735fd8934800eba951e76db --- /dev/null +++ b/node_backend/node_modules/xmlchars/xmlchars.d.ts @@ -0,0 +1,170 @@ +/** + * Character classes for XML. + * + * @deprecated since 1.3.0. Import from the ``xml`` and ``xmlns`` hierarchies + * instead. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +import * as ed5 from "./xml/1.0/ed5"; +import * as nsed3 from "./xmlns/1.0/ed3"; +/** + * Character class utilities for XML 1.0. + */ +export declare namespace XML_1_0 { + /** + * Fifth edition. + */ + namespace ED5 { + /** + * Regular expression fragments. These fragments are designed to be included + * inside square brackets in a regular expression. + */ + namespace fragments { + const CHAR = "\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; + const S = " \t\r\n"; + const NAME_START_CHAR = ":A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; + const NAME_CHAR: string; + } + /** + * Regular expression. These correspond to the productions of the same name + * in the specification. + */ + namespace regexes { + const CHAR: RegExp; + const S: RegExp; + const NAME_START_CHAR: RegExp; + const NAME_CHAR: RegExp; + const NAME: RegExp; + const NMTOKEN: RegExp; + } + /** + * Lists of characters. + * + * The names defined in this namespace are arrays of codepoints which + * contain the set of codepoints that an XML production encompasses. Note + * that many productions are too large to be reasonably represented as sets. + */ + namespace lists { + const S: number[]; + } + /** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ + const isChar: typeof ed5.isChar; + /** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ + const isS: typeof ed5.isS; + /** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` + * production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ + const isNameStartChar: typeof ed5.isNameStartChar; + /** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ + const isNameChar: typeof ed5.isNameChar; + } + /** + * Fourth edition. These are deprecated in the 5th edition but some of the + * standards related to XML 1.0 (e.g. XML Schema 1.0) refer to these. So they + * are still generally useful. + */ + namespace ED4 { + /** + * Regular expression fragments. These fragments are designed to be included + * inside square brackets in a regular expression. + */ + namespace fragments { + const CHAR = "\t\n\r -\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF"; + const S = " \t\r\n"; + const BASE_CHAR = "A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4-\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7-\u04C8\u04CB-\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8-\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5-\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B36-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0-\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60-\u0D61\u0E01-\u0E2E\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EAE\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102-\u1103\u1105-\u1107\u1109\u110B-\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154-\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D-\u116E\u1172-\u1173\u1175\u119E\u11A8\u11AB\u11AE-\u11AF\u11B7-\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A-\u212B\u212E\u2180-\u2182\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\uAC00-\uD7A3"; + const IDEOGRAPHIC = "\u4E00-\u9FA5\u3007\u3021-\u3029"; + const COMBINING_CHAR = "\u0300-\u0345\u0360-\u0361\u0483-\u0486\u0591-\u05A1\u05A3-\u05B9\u05BB-\u05BD\u05BF\u05C1-\u05C2\u05C4\u064B-\u0652\u0670\u06D6-\u06DC\u06DD-\u06DF\u06E0-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0901-\u0903\u093C\u093E-\u094C\u094D\u0951-\u0954\u0962-\u0963\u0981-\u0983\u09BC\u09BE\u09BF\u09C0-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09E2-\u09E3\u0A02\u0A3C\u0A3E\u0A3F\u0A40-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A70-\u0A71\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0B01-\u0B03\u0B3C\u0B3E-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B82-\u0B83\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C82-\u0C83\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86-\u0F8B\u0F90-\u0F95\u0F97\u0F99-\u0FAD\u0FB1-\u0FB7\u0FB9\u20D0-\u20DC\u20E1\u302A-\u302F\u3099\u309A"; + const DIGIT = "0-9\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29"; + const EXTENDER = "\u00B7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D-\u309E\u30FC-\u30FE"; + const LETTER: string; + const NAME_CHAR: string; + } + /** + * Regular expression. These correspond to the productions of the same + * name in the specification. + */ + namespace regexes { + const CHAR: RegExp; + const S: RegExp; + const BASE_CHAR: RegExp; + const IDEOGRAPHIC: RegExp; + const COMBINING_CHAR: RegExp; + const DIGIT: RegExp; + const EXTENDER: RegExp; + const LETTER: RegExp; + const NAME_CHAR: RegExp; + const NAME: RegExp; + const NMTOKEN: RegExp; + } + } +} +/** + * Character class utilities for XML NS 1.0. + */ +export declare namespace XMLNS_1_0 { + /** + * Third edition. + */ + namespace ED3 { + /** + * Regular expression fragments. These fragments are designed to be included + * inside square brackets in a regular expression. + */ + namespace fragments { + const NC_NAME_START_CHAR = "A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; + const NC_NAME_CHAR: string; + } + /** + * Regular expression. These correspond to the productions of the same name + * in the specification. + */ + namespace regexes { + const NC_NAME_START_CHAR: RegExp; + const NC_NAME_CHAR: RegExp; + const NC_NAME: RegExp; + } + /** + * Determines whether a codepoint matches + * [[regexes.NC_NAME_START_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ + const isNCNameStartChar: typeof nsed3.isNCNameStartChar; + /** + * Determines whether a codepoint matches [[regexes.NC_NAME_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ + const isNCNameChar: typeof nsed3.isNCNameChar; + } +} diff --git a/node_backend/node_modules/xmlchars/xmlchars.js b/node_backend/node_modules/xmlchars/xmlchars.js new file mode 100644 index 0000000000000000000000000000000000000000..acf682b4e12bf74682f7298e691b096b94299bef --- /dev/null +++ b/node_backend/node_modules/xmlchars/xmlchars.js @@ -0,0 +1,191 @@ +"use strict"; +/** + * Character classes for XML. + * + * @deprecated since 1.3.0. Import from the ``xml`` and ``xmlns`` hierarchies + * instead. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { value: true }); +var ed4 = require("./xml/1.0/ed4"); +var ed5 = require("./xml/1.0/ed5"); +var nsed3 = require("./xmlns/1.0/ed3"); +// tslint:disable-next-line:no-console +console.warn("DEPRECATION WARNING: the xmlchar *module* is deprecated: please \ +replace e.g. require('xmlchars') with require('xmlchars/xml/...')"); +/** + * Character class utilities for XML 1.0. + */ +// tslint:disable-next-line:no-namespace +var XML_1_0; +(function (XML_1_0) { + /** + * Fifth edition. + */ + var ED5; + (function (ED5) { + /** + * Regular expression fragments. These fragments are designed to be included + * inside square brackets in a regular expression. + */ + var fragments; + (function (fragments) { + fragments.CHAR = ed5.CHAR; + fragments.S = ed5.S; + fragments.NAME_START_CHAR = ed5.NAME_START_CHAR; + fragments.NAME_CHAR = ed5.NAME_CHAR; + })(fragments = ED5.fragments || (ED5.fragments = {})); + /** + * Regular expression. These correspond to the productions of the same name + * in the specification. + */ + var regexes; + (function (regexes) { + regexes.CHAR = ed5.CHAR_RE; + regexes.S = ed5.S_RE; + regexes.NAME_START_CHAR = ed5.NAME_START_CHAR_RE; + regexes.NAME_CHAR = ed5.NAME_CHAR_RE; + regexes.NAME = ed5.NAME_RE; + regexes.NMTOKEN = ed5.NMTOKEN_RE; + })(regexes = ED5.regexes || (ED5.regexes = {})); + /** + * Lists of characters. + * + * The names defined in this namespace are arrays of codepoints which + * contain the set of codepoints that an XML production encompasses. Note + * that many productions are too large to be reasonably represented as sets. + */ + var lists; + (function (lists) { + lists.S = ed5.S_LIST; + })(lists = ED5.lists || (ED5.lists = {})); + /** + * Determines whether a codepoint matches the ``CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``CHAR``. + */ + ED5.isChar = ed5.isChar; + /** + * Determines whether a codepoint matches the ``S`` (space) production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``S``. + */ + ED5.isS = ed5.isS; + /** + * Determines whether a codepoint matches the ``NAME_START_CHAR`` + * production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_START_CHAR``. + */ + ED5.isNameStartChar = ed5.isNameStartChar; + /** + * Determines whether a codepoint matches the ``NAME_CHAR`` production. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches ``NAME_CHAR``. + */ + ED5.isNameChar = ed5.isNameChar; + })(ED5 = XML_1_0.ED5 || (XML_1_0.ED5 = {})); + /** + * Fourth edition. These are deprecated in the 5th edition but some of the + * standards related to XML 1.0 (e.g. XML Schema 1.0) refer to these. So they + * are still generally useful. + */ + var ED4; + (function (ED4) { + /** + * Regular expression fragments. These fragments are designed to be included + * inside square brackets in a regular expression. + */ + var fragments; + (function (fragments) { + fragments.CHAR = ed4.CHAR; + fragments.S = ed4.S; + fragments.BASE_CHAR = ed4.BASE_CHAR; + fragments.IDEOGRAPHIC = ed4.IDEOGRAPHIC; + fragments.COMBINING_CHAR = ed4.COMBINING_CHAR; + fragments.DIGIT = ed4.DIGIT; + fragments.EXTENDER = ed4.EXTENDER; + fragments.LETTER = ed4.LETTER; + fragments.NAME_CHAR = ed4.NAME_CHAR; + })(fragments = ED4.fragments || (ED4.fragments = {})); + /** + * Regular expression. These correspond to the productions of the same + * name in the specification. + */ + var regexes; + (function (regexes) { + regexes.CHAR = ed4.CHAR_RE; + regexes.S = ed4.S_RE; + regexes.BASE_CHAR = ed4.BASE_CHAR_RE; + regexes.IDEOGRAPHIC = ed4.IDEOGRAPHIC_RE; + regexes.COMBINING_CHAR = ed4.COMBINING_CHAR_RE; + regexes.DIGIT = ed4.DIGIT_RE; + regexes.EXTENDER = ed4.EXTENDER_RE; + regexes.LETTER = ed4.LETTER_RE; + regexes.NAME_CHAR = ed4.NAME_CHAR_RE; + regexes.NAME = ed4.NAME_RE; + regexes.NMTOKEN = ed4.NMTOKEN_RE; + })(regexes = ED4.regexes || (ED4.regexes = {})); + })(ED4 = XML_1_0.ED4 || (XML_1_0.ED4 = {})); +})(XML_1_0 = exports.XML_1_0 || (exports.XML_1_0 = {})); +/** + * Character class utilities for XML NS 1.0. + */ +// tslint:disable-next-line:no-namespace +var XMLNS_1_0; +(function (XMLNS_1_0) { + /** + * Third edition. + */ + var ED3; + (function (ED3) { + /** + * Regular expression fragments. These fragments are designed to be included + * inside square brackets in a regular expression. + */ + var fragments; + (function (fragments) { + fragments.NC_NAME_START_CHAR = nsed3.NC_NAME_START_CHAR; + fragments.NC_NAME_CHAR = nsed3.NC_NAME_CHAR; + })(fragments = ED3.fragments || (ED3.fragments = {})); + /** + * Regular expression. These correspond to the productions of the same name + * in the specification. + */ + var regexes; + (function (regexes) { + regexes.NC_NAME_START_CHAR = nsed3.NC_NAME_START_CHAR_RE; + regexes.NC_NAME_CHAR = nsed3.NC_NAME_CHAR_RE; + regexes.NC_NAME = nsed3.NC_NAME_RE; + })(regexes = ED3.regexes || (ED3.regexes = {})); + /** + * Determines whether a codepoint matches + * [[regexes.NC_NAME_START_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ + ED3.isNCNameStartChar = nsed3.isNCNameStartChar; + /** + * Determines whether a codepoint matches [[regexes.NC_NAME_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ + ED3.isNCNameChar = nsed3.isNCNameChar; + })(ED3 = XMLNS_1_0.ED3 || (XMLNS_1_0.ED3 = {})); +})(XMLNS_1_0 = exports.XMLNS_1_0 || (exports.XMLNS_1_0 = {})); +//# sourceMappingURL=xmlchars.js.map \ No newline at end of file diff --git a/node_backend/node_modules/xmlchars/xmlchars.js.map b/node_backend/node_modules/xmlchars/xmlchars.js.map new file mode 100644 index 0000000000000000000000000000000000000000..47b8c34c9848d8637bf83b5db66fcbfba3aab75f --- /dev/null +++ b/node_backend/node_modules/xmlchars/xmlchars.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xmlchars.js","sourceRoot":"","sources":["../../src/xmlchars.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_backend/node_modules/xmlchars/xmlns/1.0/ed3.d.ts b/node_backend/node_modules/xmlchars/xmlns/1.0/ed3.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5cdf37ac8a26c8378b728fbe626508e5fc574fc1 --- /dev/null +++ b/node_backend/node_modules/xmlchars/xmlns/1.0/ed3.d.ts @@ -0,0 +1,28 @@ +/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +export declare const NC_NAME_START_CHAR = "A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +export declare const NC_NAME_CHAR: string; +export declare const NC_NAME_START_CHAR_RE: RegExp; +export declare const NC_NAME_CHAR_RE: RegExp; +export declare const NC_NAME_RE: RegExp; +/** + * Determines whether a codepoint matches [[NC_NAME_START_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ +export declare function isNCNameStartChar(c: number): boolean; +/** + * Determines whether a codepoint matches [[NC_NAME_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ +export declare function isNCNameChar(c: number): boolean; diff --git a/node_backend/node_modules/xmlchars/xmlns/1.0/ed3.js b/node_backend/node_modules/xmlchars/xmlns/1.0/ed3.js new file mode 100644 index 0000000000000000000000000000000000000000..50d8d9d6edd626737005a5a71f021f509ff12480 --- /dev/null +++ b/node_backend/node_modules/xmlchars/xmlns/1.0/ed3.js @@ -0,0 +1,65 @@ +"use strict"; +/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */ +Object.defineProperty(exports, "__esModule", { value: true }); +// +// Fragments. +// +// tslint:disable-next-line:max-line-length +exports.NC_NAME_START_CHAR = "A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\uD800\uDC00-\uDB7F\uDFFF"; +exports.NC_NAME_CHAR = "-" + exports.NC_NAME_START_CHAR + ".0-9\u00B7\u0300-\u036F\u203F-\u2040"; +// +// Regular expressions. +// +exports.NC_NAME_START_CHAR_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "]$", "u"); +exports.NC_NAME_CHAR_RE = new RegExp("^[" + exports.NC_NAME_CHAR + "]$", "u"); +exports.NC_NAME_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "][" + exports.NC_NAME_CHAR + "]*$", "u"); +/** + * Determines whether a codepoint matches [[NC_NAME_START_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ +// tslint:disable-next-line:cyclomatic-complexity +function isNCNameStartChar(c) { + return ((c >= 0x41 && c <= 0x5A) || + c === 0x5F || + (c >= 0x61 && c <= 0x7A) || + (c >= 0xC0 && c <= 0xD6) || + (c >= 0xD8 && c <= 0xF6) || + (c >= 0x00F8 && c <= 0x02FF) || + (c >= 0x0370 && c <= 0x037D) || + (c >= 0x037F && c <= 0x1FFF) || + (c >= 0x200C && c <= 0x200D) || + (c >= 0x2070 && c <= 0x218F) || + (c >= 0x2C00 && c <= 0x2FEF) || + (c >= 0x3001 && c <= 0xD7FF) || + (c >= 0xF900 && c <= 0xFDCF) || + (c >= 0xFDF0 && c <= 0xFFFD) || + (c >= 0x10000 && c <= 0xEFFFF)); +} +exports.isNCNameStartChar = isNCNameStartChar; +/** + * Determines whether a codepoint matches [[NC_NAME_CHAR]]. + * + * @param c The code point. + * + * @returns ``true`` if the codepoint matches. + */ +function isNCNameChar(c) { + return isNCNameStartChar(c) || + (c === 0x2D || + c === 0x2E || + (c >= 0x30 && c <= 0x39) || + c === 0x00B7 || + (c >= 0x0300 && c <= 0x036F) || + (c >= 0x203F && c <= 0x2040)); +} +exports.isNCNameChar = isNCNameChar; +//# sourceMappingURL=ed3.js.map \ No newline at end of file diff --git a/node_backend/node_modules/xmlchars/xmlns/1.0/ed3.js.map b/node_backend/node_modules/xmlchars/xmlns/1.0/ed3.js.map new file mode 100644 index 0000000000000000000000000000000000000000..9195a690d88d5b79f45d380952987d26a3dd6604 --- /dev/null +++ b/node_backend/node_modules/xmlchars/xmlns/1.0/ed3.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ed3.js","sourceRoot":"","sources":["../../../../src/xmlns/1.0/ed3.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,EAAE;AACF,aAAa;AACb,EAAE;AAEF,2CAA2C;AAC9B,QAAA,kBAAkB,GAAG,iLAA2K,CAAC;AAEjM,QAAA,YAAY,GACvB,MAAI,0BAAkB,yCAAsC,CAAC;AAE/D,EAAE;AACF,uBAAuB;AACvB,EAAE;AAEW,QAAA,qBAAqB,GAChC,IAAI,MAAM,CAAC,OAAK,0BAAkB,OAAI,EAAE,GAAG,CAAC,CAAC;AAElC,QAAA,eAAe,GAAG,IAAI,MAAM,CAAC,OAAK,oBAAY,OAAI,EAAE,GAAG,CAAC,CAAC;AAEzD,QAAA,UAAU,GACrB,IAAI,MAAM,CAAC,OAAK,0BAAkB,UAAK,oBAAY,QAAK,EAAE,GAAG,CAAC,CAAC;AAEjE;;;;;;GAMG;AACH,iDAAiD;AACjD,SAAgB,iBAAiB,CAAC,CAAS;IACzC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACxB,CAAC,KAAK,IAAI;QACV,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACxB,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACxB,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACxB,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;QAC5B,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;QAC5B,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;QAC5B,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;QAC5B,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;QAC5B,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;QAC5B,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;QAC5B,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;QAC5B,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;QAC5B,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC;AAhBD,8CAgBC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,CAAS;IACpC,OAAO,iBAAiB,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,KAAK,IAAI;YACV,CAAC,KAAK,IAAI;YACV,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;YACxB,CAAC,KAAK,MAAM;YACZ,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC;YAC5B,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;AACnC,CAAC;AARD,oCAQC"} \ No newline at end of file diff --git a/node_backend/node_modules/zip-stream/CHANGELOG.md b/node_backend/node_modules/zip-stream/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..f8e4fede2452c8b1760dd60402c2b59d94f9f129 --- /dev/null +++ b/node_backend/node_modules/zip-stream/CHANGELOG.md @@ -0,0 +1,112 @@ +## Changelog + +**4.1.1** - September 2, 2023 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/4.1.0...4.1.1) + +**4.1.0** - March 2, 2021 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/4.0.5...4.1.0) + +## Features + +- Allow prepending forward slash in entry name (#79) + +## Maintenance + +- Bump mocha from 8.2.1 to 8.3.0 (#76) +- Bump actions/setup-node from v2.1.4 to v2.1.5 (#77) +- Bump actions/setup-node from v2.1.2 to v2.1.4 (#74) + +**4.0.5** - November 18, 2020 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/4.0.4...4.0.5) + +- No Changes + +**4.0.4** - November 18, 2020 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/4.0.3...4.0.4) + +### Maintenance + +- Bump compress-commons from 4.0.1 to 4.0.2 (#72) + +**4.0.3** - November 18, 2020 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/4.0.2...4.0.3) + +### Maintenance + +- Update docs example with latest ES6 syntax (#60) +- Update archiver-jsdoc-theme to ^1.1.3 (#71) +- Update archiver-jsdoc-theme to ^1.1.2 (#70) +- Bump jsdoc from 3.6.5 to 3.6.6 (#62) +- Bump actions/setup-node from v2.1.1 to v2.1.2 (#64) +- Bump mocha from 8.1.1 to 8.2.1 (#66) +- Bump actions/checkout from v2.3.2 to v2.3.4 (#67) +- Bump mocha from 8.1.0 to 8.1.1 (#55) +- Bump actions/checkout from v2.3.1 to v2.3.2 (#56) +- Bump mocha from 8.0.1 to 8.1.0 (#54) +- Bump actions/setup-node from v2.1.0 to v2.1.1 (#52) +- Bump jsdoc from 3.6.4 to 3.6.5 (#53) + + +**4.0.2** - July 20, 2020 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/4.0.1...4.0.2) + +* Bump compress-commons from 4.0.0 to 4.0.1 (#51) @dependabot + +**4.0.1** - July 20, 2020 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/4.0.0...4.0.1) + +* Bump compress-commons from 3.0.0 to 4.0.0 (#50) @dependabot + +**4.0.0** - July 18, 2020 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/3.0.1...4.0.0) + +* Bump mocha from 6.2.3 to 8.0.1 (#47) @dependabot +* Bump rimraf from 2.7.1 to 3.0.2 (#46) @dependabot +* Bump actions/setup-node from v1 to v2.1.0 (#45) @dependabot +* Bump mkdirp from 0.5.5 to 1.0.4 (#48) @dependabot +* remove support for node < 10 (#49) @ctalkington +* Bump actions/checkout from v1 to v2.3.1 (#44) @dependabot + +**3.0.1** - April 14, 2020 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/3.0.0...3.0.1) + +- update to compress-commons@^3.0.0 + +**3.0.0** - April 14, 2020 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/2.1.3...3.0.0) + +- breaking: slowly catch up with node LTS, remove support for versions under 8. +- update multiple deps. + +**2.1.3** — January 8, 2020 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/2.1.0...2.1.3) + +- allow zip64 for no compression (#40) + +**2.1.2** — August 2, 2019 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/2.1.0...2.1.2) + +- update compress-commons to v2.1.1 + +**2.1.1** — August 2, 2019 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/2.1.0...2.1.1) + +- update compress-commons to v2.1.0 + +**2.1.0** — July 19, 2019 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/2.0.1...2.1.0) + +- test: now targeting node v12 +- other: update dependencies. + +**2.0.1** — August 22, 2018 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/2.0.0...2.0.1) + +- update to archiver-utils@2 + +**2.0.0** — August 22, 2018 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/1.2.0...2.0.0) + +- breaking: follow node LTS, remove support for versions under 6. +- other: remove unused lodash dependence (#35) + +**1.2.0** — June 16, 2017 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/1.1.1...1.2.0) + +- groundwork for symlinks support. + +*NOTE: this will be the last release for node v0.10 and v0.12. node v4 will become the minimum and a version bump to 2.0.0 will take place.* + +**1.1.1** — _January 17, 2017_ — [Diff](https://github.com/archiverjs/node-zip-stream/compare/1.1.0...1.1.1) + +- actually use STORE method if level is 0 (GH #21) +- bump deps to ensure latest versions are used. + +**1.1.0** — _August 27, 2016_ — [Diff](https://github.com/archiverjs/node-zip-stream/compare/1.0.0...1.1.0) + +- bump deps to ensure latest versions are used. + +[Release Archive](https://github.com/archiverjs/node-zip-stream/releases) diff --git a/node_backend/node_modules/zip-stream/LICENSE b/node_backend/node_modules/zip-stream/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..56420a6a06bd156003ce69970b50c67176f2afe5 --- /dev/null +++ b/node_backend/node_modules/zip-stream/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2014 Chris Talkington, contributors. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_backend/node_modules/zip-stream/README.md b/node_backend/node_modules/zip-stream/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ff85b9ba33e3c3d95775ccb40cdb2cfcd2f31bd3 --- /dev/null +++ b/node_backend/node_modules/zip-stream/README.md @@ -0,0 +1,45 @@ +# ZipStream + +zip-stream is a streaming zip archive generator based on the `ZipArchiveOutputStream` prototype found in the [compress-commons](https://www.npmjs.org/package/compress-commons) project. + +It was originally created to be a successor to [zipstream](https://npmjs.org/package/zipstream). + +Visit the [API documentation](http://archiverjs.com/zip-stream) for a list of all methods available. + +### Install + +```bash +npm install zip-stream --save +``` + +You can also use `npm install https://github.com/archiverjs/node-zip-stream/archive/master.tar.gz` to test upcoming versions. + +### Usage + +This module is meant to be wrapped internally by other modules and therefore lacks any queue management. This means you have to wait until the previous entry has been fully consumed to add another. Nested callbacks should be used to add multiple entries. There are modules like [async](https://npmjs.org/package/async) that ease the so called "callback hell". + +If you want a module that handles entry queueing and much more, you should check out [archiver](https://npmjs.org/package/archiver) which uses this module internally. + +```js +const Packer = require('zip-stream'); +const archive = new Packer(); // OR new Packer(options) + +archive.on('error', function(err) { + throw err; +}); + +// pipe archive where you want it (ie fs, http, etc) +// listen to the destination's end, close, or finish event + +archive.entry('string contents', { name: 'string.txt' }, function(err, entry) { + if (err) throw err; + archive.entry(null, { name: 'directory/' }, function(err, entry) { + if (err) throw err; + archive.finish(); + }); +}); +``` + +## Credits + +Concept inspired by Antoine van Wel's [zipstream](https://npmjs.org/package/zipstream) module, which is no longer being updated. diff --git a/node_backend/node_modules/zip-stream/index.js b/node_backend/node_modules/zip-stream/index.js new file mode 100644 index 0000000000000000000000000000000000000000..2c692376d200e6aa706397a8e9e4d2ce75566dd9 --- /dev/null +++ b/node_backend/node_modules/zip-stream/index.js @@ -0,0 +1,187 @@ +/** + * ZipStream + * + * @ignore + * @license [MIT]{@link https://github.com/archiverjs/node-zip-stream/blob/master/LICENSE} + * @copyright (c) 2014 Chris Talkington, contributors. + */ +var inherits = require('util').inherits; + +var ZipArchiveOutputStream = require('compress-commons').ZipArchiveOutputStream; +var ZipArchiveEntry = require('compress-commons').ZipArchiveEntry; + +var util = require('archiver-utils'); + +/** + * @constructor + * @extends external:ZipArchiveOutputStream + * @param {Object} [options] + * @param {String} [options.comment] Sets the zip archive comment. + * @param {Boolean} [options.forceLocalTime=false] Forces the archive to contain local file times instead of UTC. + * @param {Boolean} [options.forceZip64=false] Forces the archive to contain ZIP64 headers. + * @param {Boolean} [options.store=false] Sets the compression method to STORE. + * @param {Object} [options.zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options} + * to control compression. + */ +var ZipStream = module.exports = function(options) { + if (!(this instanceof ZipStream)) { + return new ZipStream(options); + } + + options = this.options = options || {}; + options.zlib = options.zlib || {}; + + ZipArchiveOutputStream.call(this, options); + + if (typeof options.level === 'number' && options.level >= 0) { + options.zlib.level = options.level; + delete options.level; + } + + if (!options.forceZip64 && typeof options.zlib.level === 'number' && options.zlib.level === 0) { + options.store = true; + } + + options.namePrependSlash = options.namePrependSlash || false; + + if (options.comment && options.comment.length > 0) { + this.setComment(options.comment); + } +}; + +inherits(ZipStream, ZipArchiveOutputStream); + +/** + * Normalizes entry data with fallbacks for key properties. + * + * @private + * @param {Object} data + * @return {Object} + */ +ZipStream.prototype._normalizeFileData = function(data) { + data = util.defaults(data, { + type: 'file', + name: null, + namePrependSlash: this.options.namePrependSlash, + linkname: null, + date: null, + mode: null, + store: this.options.store, + comment: '' + }); + + var isDir = data.type === 'directory'; + var isSymlink = data.type === 'symlink'; + + if (data.name) { + data.name = util.sanitizePath(data.name); + + if (!isSymlink && data.name.slice(-1) === '/') { + isDir = true; + data.type = 'directory'; + } else if (isDir) { + data.name += '/'; + } + } + + if (isDir || isSymlink) { + data.store = true; + } + + data.date = util.dateify(data.date); + + return data; +}; + +/** + * Appends an entry given an input source (text string, buffer, or stream). + * + * @param {(Buffer|Stream|String)} source The input source. + * @param {Object} data + * @param {String} data.name Sets the entry name including internal path. + * @param {String} [data.comment] Sets the entry comment. + * @param {(String|Date)} [data.date=NOW()] Sets the entry date. + * @param {Number} [data.mode=D:0755/F:0644] Sets the entry permissions. + * @param {Boolean} [data.store=options.store] Sets the compression method to STORE. + * @param {String} [data.type=file] Sets the entry type. Defaults to `directory` + * if name ends with trailing slash. + * @param {Function} callback + * @return this + */ +ZipStream.prototype.entry = function(source, data, callback) { + if (typeof callback !== 'function') { + callback = this._emitErrorCallback.bind(this); + } + + data = this._normalizeFileData(data); + + if (data.type !== 'file' && data.type !== 'directory' && data.type !== 'symlink') { + callback(new Error(data.type + ' entries not currently supported')); + return; + } + + if (typeof data.name !== 'string' || data.name.length === 0) { + callback(new Error('entry name must be a non-empty string value')); + return; + } + + if (data.type === 'symlink' && typeof data.linkname !== 'string') { + callback(new Error('entry linkname must be a non-empty string value when type equals symlink')); + return; + } + + var entry = new ZipArchiveEntry(data.name); + entry.setTime(data.date, this.options.forceLocalTime); + + if (data.namePrependSlash) { + entry.setName(data.name, true); + } + + if (data.store) { + entry.setMethod(0); + } + + if (data.comment.length > 0) { + entry.setComment(data.comment); + } + + if (data.type === 'symlink' && typeof data.mode !== 'number') { + data.mode = 40960; // 0120000 + } + + if (typeof data.mode === 'number') { + if (data.type === 'symlink') { + data.mode |= 40960; + } + + entry.setUnixMode(data.mode); + } + + if (data.type === 'symlink' && typeof data.linkname === 'string') { + source = Buffer.from(data.linkname); + } + + return ZipArchiveOutputStream.prototype.entry.call(this, entry, source, callback); +}; + +/** + * Finalizes the instance and prevents further appending to the archive + * structure (queue will continue til drained). + * + * @return void + */ +ZipStream.prototype.finalize = function() { + this.finish(); +}; + +/** + * Returns the current number of bytes written to this stream. + * @function ZipStream#getBytesWritten + * @returns {Number} + */ + +/** + * Compress Commons ZipArchiveOutputStream + * @external ZipArchiveOutputStream + * @see {@link https://github.com/archiverjs/node-compress-commons} + */ diff --git a/node_backend/node_modules/zip-stream/node_modules/archiver-utils/LICENSE b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f12cd49cae3978dcdb337c7bad10842b3412ce59 --- /dev/null +++ b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2015 Chris Talkington. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_backend/node_modules/zip-stream/node_modules/archiver-utils/README.md b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4de3b9d1a31e4dc02cbadf58e9b35ced611cf13e --- /dev/null +++ b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/README.md @@ -0,0 +1,6 @@ +# Archiver Utils + +## Things of Interest +- [Changelog](https://github.com/archiverjs/archiver-utils/releases) +- [Contributing](https://github.com/archiverjs/archiver-utils/blob/master/CONTRIBUTING.md) +- [MIT License](https://github.com/archiverjs/archiver-utils/blob/master/LICENSE) diff --git a/node_backend/node_modules/zip-stream/node_modules/archiver-utils/file.js b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/file.js new file mode 100644 index 0000000000000000000000000000000000000000..98496886400acde52b68bc9f9c587e93ed90187d --- /dev/null +++ b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/file.js @@ -0,0 +1,209 @@ +/** + * archiver-utils + * + * Copyright (c) 2012-2014 Chris Talkington, contributors. + * Licensed under the MIT license. + * https://github.com/archiverjs/node-archiver/blob/master/LICENSE-MIT + */ +var fs = require('graceful-fs'); +var path = require('path'); + +var flatten = require('lodash.flatten'); +var difference = require('lodash.difference'); +var union = require('lodash.union'); +var isPlainObject = require('lodash.isplainobject'); + +var glob = require('glob'); + +var file = module.exports = {}; + +var pathSeparatorRe = /[\/\\]/g; + +// Process specified wildcard glob patterns or filenames against a +// callback, excluding and uniquing files in the result set. +var processPatterns = function(patterns, fn) { + // Filepaths to return. + var result = []; + // Iterate over flattened patterns array. + flatten(patterns).forEach(function(pattern) { + // If the first character is ! it should be omitted + var exclusion = pattern.indexOf('!') === 0; + // If the pattern is an exclusion, remove the ! + if (exclusion) { pattern = pattern.slice(1); } + // Find all matching files for this pattern. + var matches = fn(pattern); + if (exclusion) { + // If an exclusion, remove matching files. + result = difference(result, matches); + } else { + // Otherwise add matching files. + result = union(result, matches); + } + }); + return result; +}; + +// True if the file path exists. +file.exists = function() { + var filepath = path.join.apply(path, arguments); + return fs.existsSync(filepath); +}; + +// Return an array of all file paths that match the given wildcard patterns. +file.expand = function(...args) { + // If the first argument is an options object, save those options to pass + // into the File.prototype.glob.sync method. + var options = isPlainObject(args[0]) ? args.shift() : {}; + // Use the first argument if it's an Array, otherwise convert the arguments + // object to an array and use that. + var patterns = Array.isArray(args[0]) ? args[0] : args; + // Return empty set if there are no patterns or filepaths. + if (patterns.length === 0) { return []; } + // Return all matching filepaths. + var matches = processPatterns(patterns, function(pattern) { + // Find all matching files for this pattern. + return glob.sync(pattern, options); + }); + // Filter result set? + if (options.filter) { + matches = matches.filter(function(filepath) { + filepath = path.join(options.cwd || '', filepath); + try { + if (typeof options.filter === 'function') { + return options.filter(filepath); + } else { + // If the file is of the right type and exists, this should work. + return fs.statSync(filepath)[options.filter](); + } + } catch(e) { + // Otherwise, it's probably not the right type. + return false; + } + }); + } + return matches; +}; + +// Build a multi task "files" object dynamically. +file.expandMapping = function(patterns, destBase, options) { + options = Object.assign({ + rename: function(destBase, destPath) { + return path.join(destBase || '', destPath); + } + }, options); + var files = []; + var fileByDest = {}; + // Find all files matching pattern, using passed-in options. + file.expand(options, patterns).forEach(function(src) { + var destPath = src; + // Flatten? + if (options.flatten) { + destPath = path.basename(destPath); + } + // Change the extension? + if (options.ext) { + destPath = destPath.replace(/(\.[^\/]*)?$/, options.ext); + } + // Generate destination filename. + var dest = options.rename(destBase, destPath, options); + // Prepend cwd to src path if necessary. + if (options.cwd) { src = path.join(options.cwd, src); } + // Normalize filepaths to be unix-style. + dest = dest.replace(pathSeparatorRe, '/'); + src = src.replace(pathSeparatorRe, '/'); + // Map correct src path to dest path. + if (fileByDest[dest]) { + // If dest already exists, push this src onto that dest's src array. + fileByDest[dest].src.push(src); + } else { + // Otherwise create a new src-dest file mapping object. + files.push({ + src: [src], + dest: dest, + }); + // And store a reference for later use. + fileByDest[dest] = files[files.length - 1]; + } + }); + return files; +}; + +// reusing bits of grunt's multi-task source normalization +file.normalizeFilesArray = function(data) { + var files = []; + + data.forEach(function(obj) { + var prop; + if ('src' in obj || 'dest' in obj) { + files.push(obj); + } + }); + + if (files.length === 0) { + return []; + } + + files = _(files).chain().forEach(function(obj) { + if (!('src' in obj) || !obj.src) { return; } + // Normalize .src properties to flattened array. + if (Array.isArray(obj.src)) { + obj.src = flatten(obj.src); + } else { + obj.src = [obj.src]; + } + }).map(function(obj) { + // Build options object, removing unwanted properties. + var expandOptions = Object.assign({}, obj); + delete expandOptions.src; + delete expandOptions.dest; + + // Expand file mappings. + if (obj.expand) { + return file.expandMapping(obj.src, obj.dest, expandOptions).map(function(mapObj) { + // Copy obj properties to result. + var result = Object.assign({}, obj); + // Make a clone of the orig obj available. + result.orig = Object.assign({}, obj); + // Set .src and .dest, processing both as templates. + result.src = mapObj.src; + result.dest = mapObj.dest; + // Remove unwanted properties. + ['expand', 'cwd', 'flatten', 'rename', 'ext'].forEach(function(prop) { + delete result[prop]; + }); + return result; + }); + } + + // Copy obj properties to result, adding an .orig property. + var result = Object.assign({}, obj); + // Make a clone of the orig obj available. + result.orig = Object.assign({}, obj); + + if ('src' in result) { + // Expose an expand-on-demand getter method as .src. + Object.defineProperty(result, 'src', { + enumerable: true, + get: function fn() { + var src; + if (!('result' in fn)) { + src = obj.src; + // If src is an array, flatten it. Otherwise, make it into an array. + src = Array.isArray(src) ? flatten(src) : [src]; + // Expand src files, memoizing result. + fn.result = file.expand(expandOptions, src); + } + return fn.result; + } + }); + } + + if ('dest' in result) { + result.dest = obj.dest; + } + + return result; + }).flatten().value(); + + return files; +}; diff --git a/node_backend/node_modules/zip-stream/node_modules/archiver-utils/index.js b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/index.js new file mode 100644 index 0000000000000000000000000000000000000000..a597febfa37d5afaf4d332a7613087f1e0decba0 --- /dev/null +++ b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/index.js @@ -0,0 +1,149 @@ +/** + * archiver-utils + * + * Copyright (c) 2015 Chris Talkington. + * Licensed under the MIT license. + * https://github.com/archiverjs/archiver-utils/blob/master/LICENSE + */ +var fs = require('graceful-fs'); +var path = require('path'); +var lazystream = require('lazystream'); +var normalizePath = require('normalize-path'); +var defaults = require('lodash.defaults'); + +var Stream = require('stream').Stream; +var PassThrough = require('readable-stream').PassThrough; + +var utils = module.exports = {}; +utils.file = require('./file.js'); + +utils.collectStream = function(source, callback) { + var collection = []; + var size = 0; + + source.on('error', callback); + + source.on('data', function(chunk) { + collection.push(chunk); + size += chunk.length; + }); + + source.on('end', function() { + var buf = Buffer.alloc(size); + var offset = 0; + + collection.forEach(function(data) { + data.copy(buf, offset); + offset += data.length; + }); + + callback(null, buf); + }); +}; + +utils.dateify = function(dateish) { + dateish = dateish || new Date(); + + if (dateish instanceof Date) { + dateish = dateish; + } else if (typeof dateish === 'string') { + dateish = new Date(dateish); + } else { + dateish = new Date(); + } + + return dateish; +}; + +// this is slightly different from lodash version +utils.defaults = function(object, source, guard) { + var args = arguments; + args[0] = args[0] || {}; + + return defaults(...args); +}; + +utils.isStream = function(source) { + return source instanceof Stream; +}; + +utils.lazyReadStream = function(filepath) { + return new lazystream.Readable(function() { + return fs.createReadStream(filepath); + }); +}; + +utils.normalizeInputSource = function(source) { + if (source === null) { + return Buffer.alloc(0); + } else if (typeof source === 'string') { + return Buffer.from(source); + } else if (utils.isStream(source)) { + // Always pipe through a PassThrough stream to guarantee pausing the stream if it's already flowing, + // since it will only be processed in a (distant) future iteration of the event loop, and will lose + // data if already flowing now. + return source.pipe(new PassThrough()); + } + + return source; +}; + +utils.sanitizePath = function(filepath) { + return normalizePath(filepath, false).replace(/^\w+:/, '').replace(/^(\.\.\/|\/)+/, ''); +}; + +utils.trailingSlashIt = function(str) { + return str.slice(-1) !== '/' ? str + '/' : str; +}; + +utils.unixifyPath = function(filepath) { + return normalizePath(filepath, false).replace(/^\w+:/, ''); +}; + +utils.walkdir = function(dirpath, base, callback) { + var results = []; + + if (typeof base === 'function') { + callback = base; + base = dirpath; + } + + fs.readdir(dirpath, function(err, list) { + var i = 0; + var file; + var filepath; + + if (err) { + return callback(err); + } + + (function next() { + file = list[i++]; + + if (!file) { + return callback(null, results); + } + + filepath = path.join(dirpath, file); + + fs.stat(filepath, function(err, stats) { + results.push({ + path: filepath, + relative: path.relative(base, filepath).replace(/\\/g, '/'), + stats: stats + }); + + if (stats && stats.isDirectory()) { + utils.walkdir(filepath, base, function(err, res) { + res.forEach(function(dirEntry) { + results.push(dirEntry); + }); + next(); + }); + } else { + next(); + } + }); + })(); + }); +}; diff --git a/node_backend/node_modules/zip-stream/node_modules/archiver-utils/package.json b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/package.json new file mode 100644 index 0000000000000000000000000000000000000000..1b9c4f0b387079b8714f26bbecab83483a0ff54d --- /dev/null +++ b/node_backend/node_modules/zip-stream/node_modules/archiver-utils/package.json @@ -0,0 +1,54 @@ +{ + "name": "archiver-utils", + "version": "3.0.4", + "license": "MIT", + "description": "utility functions for archiver", + "homepage": "https://github.com/archiverjs/archiver-utils#readme", + "author": { + "name": "Chris Talkington", + "url": "http://christalkington.com/" + }, + "repository": { + "type": "git", + "url": "https://github.com/archiverjs/archiver-utils.git" + }, + "bugs": { + "url": "https://github.com/archiverjs/archiver-utils/issues" + }, + "keywords": [ + "archiver", + "utils" + ], + "main": "index.js", + "files": [ + "index.js", + "file.js" + ], + "engines": { + "node": ">= 10" + }, + "scripts": { + "test": "mocha --reporter dot" + }, + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "devDependencies": { + "chai": "4.3.8", + "mkdirp": "3.0.1", + "mocha": "9.2.2", + "rimraf": "3.0.2" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/" + } +} diff --git a/node_backend/node_modules/zip-stream/package.json b/node_backend/node_modules/zip-stream/package.json new file mode 100644 index 0000000000000000000000000000000000000000..f689d1b29125f4142d9d17186314c3232d7ea9a9 --- /dev/null +++ b/node_backend/node_modules/zip-stream/package.json @@ -0,0 +1,49 @@ +{ + "name": "zip-stream", + "version": "4.1.1", + "description": "a streaming zip archive generator.", + "homepage": "https://github.com/archiverjs/node-zip-stream", + "author": { + "name": "Chris Talkington", + "url": "http://christalkington.com/" + }, + "repository": { + "type": "git", + "url": "https://github.com/archiverjs/node-zip-stream.git" + }, + "bugs": { + "url": "https://github.com/archiverjs/node-zip-stream/issues" + }, + "license": "MIT", + "main": "index.js", + "files": [ + "index.js" + ], + "engines": { + "node": ">= 10" + }, + "scripts": { + "test": "mocha --reporter dot", + "jsdoc": "jsdoc -c jsdoc.json README.md" + }, + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "devDependencies": { + "archiver-jsdoc-theme": "1.1.3", + "chai": "4.3.8", + "jsdoc": "3.6.11", + "minami": "1.2.3", + "mkdirp": "2.1.6", + "mocha": "9.2.2", + "rimraf": "3.0.2" + }, + "keywords": [ + "archive", + "stream", + "zip-stream", + "zip" + ] +} diff --git a/node_backend/package-lock.json b/node_backend/package-lock.json index fc20d4987ce9a8f8ecaf77d3930d49aa57073d00..fc9f8e206f5c9001b4b936fc52e9939a7ed3d0c4 100644 --- a/node_backend/package-lock.json +++ b/node_backend/package-lock.json @@ -14,6 +14,7 @@ "cors": "^2.8.5", "csv-parser": "^3.1.0", "dotenv": "^16.4.5", + "exceljs": "^4.4.0", "express": "^4.21.1", "json2csv": "^6.0.0-alpha.2", "jsonwebtoken": "^9.0.2", @@ -23,6 +24,35 @@ "pdfkit": "^0.17.1" } }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", @@ -63,6 +93,12 @@ "tslib": "^2.8.0" } }, + "node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -143,6 +179,75 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/are-we-there-yet": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", @@ -161,6 +266,12 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -203,6 +314,45 @@ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -251,6 +401,39 @@ "node": ">=16.20.1" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -261,6 +444,23 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -298,6 +498,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -330,6 +542,21 @@ "node": ">= 6" } }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -430,6 +657,31 @@ "node": ">= 0.10" } }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/crypto-js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", @@ -446,6 +698,12 @@ "node": ">= 10" } }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -516,6 +774,45 @@ "url": "https://dotenvx.com" } }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -542,6 +839,15 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -574,6 +880,26 @@ "node": ">= 0.6" } }, + "node_modules/exceljs": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.4.0.tgz", + "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==", + "license": "MIT", + "dependencies": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, "node_modules/express": { "version": "4.21.1", "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", @@ -615,6 +941,19 @@ "node": ">= 0.10.0" } }, + "node_modules/fast-csv": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -669,6 +1008,12 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -696,6 +1041,47 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -773,6 +1159,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -881,6 +1273,32 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -965,6 +1383,54 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -992,6 +1458,57 @@ "node": ">=12.0.0" } }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/linebreak": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", @@ -1009,12 +1526,48 @@ "node": ">= 0.4" } }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "license": "ISC" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead." }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==", + "license": "MIT" + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -1025,11 +1578,30 @@ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "license": "MIT" + }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", + "license": "MIT" + }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", @@ -1045,11 +1617,29 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", + "license": "MIT" + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -1418,6 +2008,15 @@ "node": ">=6" } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -1585,6 +2184,36 @@ "node": ">= 6" } }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/restructure": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", @@ -1629,6 +2258,18 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -1711,6 +2352,12 @@ "node": ">= 0.4" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -1815,11 +2462,36 @@ "node": ">=10" } }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tiny-inflate": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1839,6 +2511,15 @@ "node": ">=14" } }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -1887,6 +2568,54 @@ "node": ">= 0.8" } }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -1900,6 +2629,15 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1941,6 +2679,12 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -1953,6 +2697,41 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } } } } diff --git a/node_backend/package.json b/node_backend/package.json index b00312e4a6cd77626810caa206273704267e3a01..3a4f620fa45df09ba2154c1791d46058d3d25e8e 100644 --- a/node_backend/package.json +++ b/node_backend/package.json @@ -15,6 +15,7 @@ "cors": "^2.8.5", "csv-parser": "^3.1.0", "dotenv": "^16.4.5", + "exceljs": "^4.4.0", "express": "^4.21.1", "json2csv": "^6.0.0-alpha.2", "jsonwebtoken": "^9.0.2", diff --git a/node_backend/routes/historialAcademicoRoutes.js b/node_backend/routes/historialAcademicoRoutes.js new file mode 100644 index 0000000000000000000000000000000000000000..7993b52708f4a0833a9958aef435b7c4d55f9f7a --- /dev/null +++ b/node_backend/routes/historialAcademicoRoutes.js @@ -0,0 +1,11 @@ +const express = require('express'); +const router = express.Router(); +const historialAcademicoController = require('../controllers/historialAcademicoController'); + +// Ruta para generar historial académico +router.post('/generar', historialAcademicoController.generarHistorial); + +// Ruta para listar historiales académicos +router.get('/', historialAcademicoController.listarHistoriales); + +module.exports = router; \ No newline at end of file diff --git a/node_backend/server.js b/node_backend/server.js index 22e80eb0c6ae3a168ceb04da0fed697e45663f57..676a73a0ae53fcf8d35236362bc6ca0a9bfe33a8 100644 --- a/node_backend/server.js +++ b/node_backend/server.js @@ -2,6 +2,7 @@ const express = require('express'); const mongoose = require('mongoose'); const cors = require('cors'); +const path = require('path'); require('dotenv').config(); const userRoutes = require('./routes/userRoutes'); const alumnoRoutes = require('./routes/alumnoRoutes'); @@ -14,7 +15,7 @@ const administradorRoutes = require('./routes/administradorRoutes'); const administradorGenRoutes = require('./routes/administradorGenRoutes'); const tutorRoutes = require('./routes/tutorRoutes'); const docenteRoutes = require('./routes/docenteRoutes'); - +const historialAcademicoRoutes = require('./routes/historialAcademicoRoutes'); const app = express(); const PORT = process.env.PORT || 5000; @@ -33,6 +34,8 @@ app.use('/api/coordinadores', coordinadorRoutes); app.use('/api/administradores', administradorRoutes); app.use('/api/cordgen', coordinadorGenRoutes); app.use('/api/admingen', administradorGenRoutes); +app.use('/api/historial', historialAcademicoRoutes); +app.use('/descargas', express.static(path.join(__dirname, 'exports'))); //Ruta para los comprobantes app.use('/uploads/comprobantes', express.static('uploads/comprobantes')); diff --git a/node_backend/uploads/comprobantes/Pago_A120.pdf b/node_backend/uploads/comprobantes/Pago_A120.pdf new file mode 100644 index 0000000000000000000000000000000000000000..925643a21da1714b9fdf55497278b9ab24cf4500 Binary files /dev/null and b/node_backend/uploads/comprobantes/Pago_A120.pdf differ diff --git a/node_backend/utils/exportarAlumnos.js b/node_backend/utils/exportarAlumnos.js new file mode 100644 index 0000000000000000000000000000000000000000..3acfa2c1d2ebf2c626e20e489758f030d6b898d5 --- /dev/null +++ b/node_backend/utils/exportarAlumnos.js @@ -0,0 +1,24 @@ +// utils/exportarAlumnos.js +const ExcelJS = require('exceljs'); +const Alumno = require('../models/Alumno'); +const path = require('path'); + +async function exportarAlumnos(semestre, outputPath) { + const alumnos = await Alumno.find({ semestre }); + const workbook = new ExcelJS.Workbook(); + const worksheet = workbook.addWorksheet('Alumnos'); + + worksheet.columns = [ + { header: 'Nombre', key: 'nombre', width: 30 }, + { header: 'Matrícula', key: 'matricula', width: 20 }, + { header: 'Carrera', key: 'id_carrera', width: 25 }, + { header: 'Correo', key: 'correo', width: 30 } + ]; + + alumnos.forEach(a => worksheet.addRow(a)); + const filePath = path.join(outputPath, 'alumnos.xlsx'); + await workbook.xlsx.writeFile(filePath); + return filePath; +} + +module.exports = { exportarAlumnos }; \ No newline at end of file diff --git a/node_backend/utils/exportarMaterias.js b/node_backend/utils/exportarMaterias.js new file mode 100644 index 0000000000000000000000000000000000000000..c1c9d9eb7cd38b85a903277d766e4155baa51ec4 --- /dev/null +++ b/node_backend/utils/exportarMaterias.js @@ -0,0 +1,24 @@ +const ExcelJS = require('exceljs'); +const Materia = require('../models/Materia'); +const path = require('path'); + +async function exportarMaterias(semestre, outputPath) { + const materias = await Materia.find({ semestre }); + const workbook = new ExcelJS.Workbook(); + const worksheet = workbook.addWorksheet('Materias'); + + worksheet.columns = [ + { header: 'Nombre', key: 'nombre', width: 30 }, + { header: 'ID Materia', key: 'id_materia', width: 20 }, + { header: 'Carrera', key: 'id_carrera', width: 25 }, + { header: 'Grupo', key: 'grupo', width: 10 }, + { header: 'Docente', key: 'docente', width: 30 } + ]; + + materias.forEach(m => worksheet.addRow(m)); + const filePath = path.join(outputPath, 'materias.xlsx'); + await workbook.xlsx.writeFile(filePath); + return filePath; +} + +module.exports = { exportarMaterias }; diff --git a/node_backend/utils/exportarPersonal.js b/node_backend/utils/exportarPersonal.js new file mode 100644 index 0000000000000000000000000000000000000000..3fe09e8aed025a8077bb16da4b34e22b5b7d5c44 --- /dev/null +++ b/node_backend/utils/exportarPersonal.js @@ -0,0 +1,25 @@ +const ExcelJS = require('exceljs'); +const Personal = require('../models/Personal'); +const path = require('path'); + +async function exportarPersonal(semestre, outputPath) { + // Si el personal no tiene semestre, puedes quitar el filtro o adaptarlo + const personal = await Personal.find(); + const workbook = new ExcelJS.Workbook(); + const worksheet = workbook.addWorksheet('Personal'); + + worksheet.columns = [ + { header: 'Nombre', key: 'nombre', width: 30 }, + { header: 'Matrícula', key: 'matricula', width: 20 }, + { header: 'Correo', key: 'correo', width: 30 }, + { header: 'Teléfono', key: 'telefono', width: 20 }, + { header: 'Roles', key: 'roles', width: 20 } + ]; + + personal.forEach(p => worksheet.addRow(p)); + const filePath = path.join(outputPath, 'personal.xlsx'); + await workbook.xlsx.writeFile(filePath); + return filePath; +} + +module.exports = { exportarPersonal }; diff --git a/react_frontend/src/components/HistorialAcademico.js b/react_frontend/src/components/HistorialAcademico.js index 6fcd0444fd97281995fc3530ad954e658a32ed64..0b23ace8d78cd83154f1694e4d7358378e659deb 100644 --- a/react_frontend/src/components/HistorialAcademico.js +++ b/react_frontend/src/components/HistorialAcademico.js @@ -5,10 +5,19 @@ import './HistorialAcademico.css'; function HistorialAcademico() { const [semestres, setSemestres] = useState([ "2025-1", "2024-2", "2024-1", "2023-2", "2023-1" - ]); // Puedes poblar esto dinámicamente si lo deseas + ]); const [semestreSeleccionado, setSemestreSeleccionado] = useState(semestres[0]); + const [historiales, setHistoriales] = useState([]); const navigate = useNavigate(); + useEffect(() => { + // Obtener historiales académicos del backend + fetch('http://localhost:5000/api/historial') + .then(res => res.json()) + .then(data => setHistoriales(data)) + .catch(() => setHistoriales([])); + }, []); + // Crear carpeta en Documentos si no existe useEffect(() => { async function crearCarpetaHistorial() { @@ -24,10 +33,6 @@ const descargarArchivo = async (tipo) => { let url = ''; let nombre = ''; const id_carrera = localStorage.getItem('id_carrera'); - /*if (!window.api || !window.api.createFolder || !window.api.saveFile) { - alert('Funcionalidad no disponible en este entorno.'); - return; - }*/ switch (tipo) { case 'personal': if (!id_carrera) { @@ -35,24 +40,22 @@ const descargarArchivo = async (tipo) => { return; } url = `http://localhost:5000/api/personal/exportar-csv`; - nombre = 'personal.xlsx'; + nombre = 'personal.csv'; // Cambia a .csv break; case 'alumnos': url = 'http://localhost:5000/api/alumnos/exportar-csv'; - nombre = 'alumnos.xlsx'; + nombre = 'alumnos.csv'; // Cambia a .csv break; case 'materias': url = 'http://localhost:5000/api/materias/exportar-csv'; - nombre = 'materias.xlsx'; + nombre = 'materias.csv'; // Cambia a .csv break; default: alert('Tipo de descarga no válido.'); return; } try { - // Carpeta absoluta en Windows const folderPath = 'C:/Users/Stefano/Documentos/HistorialAcademico'; - // Se intenta crear la carpeta, pero si ya existe, no pasa nada (debe manejarlo la función nativa) await window.api.createFolder(folderPath); const response = await fetch(url); if (!response.ok) throw new Error('Error al descargar ' + tipo); @@ -66,53 +69,83 @@ const descargarArchivo = async (tipo) => { const handleGenerarHistorialAcademico = async () => { try { - if (!window.api || !window.api.createFolder || !window.api.saveFile) { - alert('Funcionalidad no disponible en este entorno.'); - return; - } - const folderPath = 'C:/Users/Stefano/Documentos/HistorialAcademico'; - await window.api.createFolder(folderPath); - const id_carrera = localStorage.getItem('id_carrera'); - const endpoints = [ - { tipo: 'personal', url: id_carrera ? `http://localhost:5000/api/personal/exportar-csv` : '', nombre: 'personal.xlsx' }, - { tipo: 'alumnos', url: 'http://localhost:5000/api/alumnos/exportar-csv', nombre: 'alumnos.xlsx' }, - { tipo: 'materias', url: 'http://localhost:5000/api/materias/exportar-csv', nombre: 'materias.xlsx' } - ]; - for (const endpoint of endpoints) { - if (!endpoint.url) continue; - const response = await fetch(endpoint.url); - if (!response.ok) throw new Error('Error al descargar ' + endpoint.tipo); - const blob = await response.blob(); - await window.api.saveFile(folderPath + '/' + endpoint.nombre, blob); + const response = await fetch('http://localhost:5000/api/historial/generar', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + semestre: semestreSeleccionado, + matricula: localStorage.getItem('matricula') + }) + }); + const data = await response.json(); + if (response.ok) { + alert('Historial generado correctamente'); + setHistoriales(prev => [data.historial, ...prev]); + } else { + alert('Error: ' + data.message); } - alert('Historial académico generado y guardado en ' + folderPath); - } catch (error) { - alert('Error al generar historial académico: ' + error.message); + } catch (err) { + alert('Error al generar historial: ' + err.message); } }; - + return (

Historial Académico

-
- - -
- - - -
-
- {/* Aquí se puede mostrar la información del historial académico según el semestre seleccionado */} +

Historiales generados

+ + + + + + + + + + + + {Array.isArray(historiales) && historiales.length > 0 + ? historiales + .filter(h => h && h.semestre) // Filtra elementos undefined o sin semestre + .map(h => ( + + + + {/* Busca archivos .csv en el backend y descarga como .csv */} + + + + + )) + : ( + + + + ) + } + +
SemestreFechaPersonalAlumnosMaterias
{h.semestre}{new Date(h.fecha_generacion).toLocaleString()} + Descargar + + Descargar + + Descargar +
No hay historiales disponibles